[
  {
    "path": ".github/workflows/build-and-test.yml",
    "content": "name: build-and-test\non:\n  workflow_dispatch:\n  pull_request:\njobs:\n  build-and-test:\n    runs-on: ubuntu-22.04\n    steps:\n      - name: Checkout\n        uses: actions/checkout@v3\n      - name: autogen\n        working-directory: cola\n        run: ./autogen.sh\n\n"
  },
  {
    "path": ".gitignore",
    "content": ".DS_Store\n.vscode\n.idea\n\n"
  },
  {
    "path": "README.md",
    "content": "Adaptagrams\n===========\n\nAdaptagrams is a library of tools and reusable code for adaptive diagramming\napplications, for example: drawing tools, automated document and diagram\nlayout, smart presentation software, graph drawing, chart layout, etc.\n\nCurrently, the [Adaptagrams repository][repo] includes five cross-platform C++ \nlibraries:\n\n *  [libvpsc][libvpsc]  \n              - a solver for the Variable Placement with Separation \n\t\tConstraints problem. This is a quadratic programming \n\t\tproblem in which the squared differences between a \n\t\tplacement vector and some ideal placement are minimised \n\t\tsubject to a set of separation constraints. This is very \n\t\tuseful in a number of layout problems.\n *  [libcola][libcola]  \n    \t      - a library for constraint graph layout.  Specifically, \n    \t\tforce-directed layout using the stress-majorization \n\t\tmethod subject to separation constraints. Applications \n\t\tinclude layout with non-overlapping nodes and clusters, \n\t\tdirected graph layout and layout preserving the crossing \n\t\tproperties of a given starting layout.  \n\t      - libcola depends on libvpsc.\n *  [libavoid][libavoid]  \n    \t      - a library providing high-quality object-avoiding polyline \n\t\tand orthogonal connector routing for use in interactive \n\t\tdiagram editors. \n *  [libtopology][libtopology]  \n              - a library containing extensions to libcola to support \n\t\ttopology preserving constraint-based layout.  \n\t      - libtopology depends on libavoid, libcola and libvpsc.\n *  [libdialect][libdialect]  \n              - a library for computing human-like orthogonal network\n\t        (DiAlEcT) layouts via the following steps: \n\t\tD = Decompose/Distribute; A = Arrange; \n                E = Expand/Emend; and T = Transform.  \n\t      - libdialect depends on libavoid, libcola and libvpsc.\n\nThese libraries are collectively known as cola (for Constraint Layout). The\nnewest version of the C++ source code for cola can be found in the \nAdaptagrams GitHub repository maintained by [Michael Wybrow][mw]:\n\n *  [https://github.com/mjwybrow/adaptagrams/][repo]\n\nThe algorithms were developed by members of the [Immersive Analytics Lab][ialab] \nat [Monash University][monash] in Melbourne, Australia.  The Adaptagrams libraries \nwere written by [Tim Dwyer][td], [Michael Wybrow][mw] and [Steve Kieffer][sk].\n\nAll code in the Adaptagrams repository is released as open source software\nunder the terms of the LGPL 2.1 or later, see the LICENSE file. \n\nWe also dual-license the Adaptagrams libraries and for a fee we can provide\nthem under a less-restrictive commercial license as well as extend them to fit\nyour needs (contact us).  For this reason, if you contribute code to the\nproject and would like it to appear in the main Adaptagrams repository, we\nrequire that you assign the copyright on your changes to Monash University with\nthe following statement: \"I hereby assign copyright in this code to Monash\nUniversity, to be licensed under the same terms as the rest of the code.\"\n \nSoftware using one or more of the Adaptagrams libraries include: \n\n *  [Dunnart][dunnart], constraint-based diagram editor,\n *  [Inkscape][inkscape], the popular open source vector graphics editor,\n *  [Graphviz][graphviz], open source graph visualisation software,\n *  [Arcadia][arcadia], a visualisation tool for metabolic pathways,\n *  [Gaphas][gaphor], an open source Python-based diagramming widget for GTK+, and\n *  [BRL-CAD][brlcad], a powerful cross-platform open source solid modeling system that includes interactive geometry editing, high-performance ray-tracing for rendering and geometric analysis, image and signal-processing tools, a system performance analysis benchmark suite, libraries for robust geometric representation, with more than 20 years of active development.\n\n\n\nBuilding\n--------\n\nThe library code is all contained in the `cola` directory of the repository.\n\nWe use GNU `automake` to build.  We've tried to make the contents of the\nrepository as platform agnostic as possible, so you'll need to call `aclocal`,\n`autoconf`, and `automake` before `configure`.\n\nThe only dependency is [Cairo][cairo] if debugging SVG output is to be included in several example test cases.  The libraries themselves have no dependencies.\n\nRun `./autogen.sh` to compile from scratch.\n\nUse from other languages\n------------------------\n\nBindings for use of the Adaptagrams libraries can be generated using [SWIG][swig].  The repository contains a SWIG interface file `cola/adaptagrams.i`.  We have successfully tested and used Adaptagrams from Java and Python in this way.\n\nCola in the browser\n-------------------\n\n[cola.js][webcola] (a.k.a. WebCola) is a JavaScript based rewrite of libcola which works well with [D3.js][d3]\n\n[d3]: http://d3js.org/\n[webcola]: http://ialab.it.monash.edu/webcola/\n[swig]: http://www.swig.org/\n[td]: http://users.monash.edu/~tdwyer/\n[km]: http://users.monash.edu/~kmarriott/\n[mw]: http://users.monash.edu/~mwybrow/\n[sk]: http://skieffer.info/\n[ialab]: http://ialab.it.monash.edu/\n[monash]: http://wwww.csse.monash.edu.au/\n[libvpsc]: http://www.adaptagrams.org/documentation/libvpsc.html\n[libavoid]: http://www.adaptagrams.org/documentation/libavoid.html\n[libcola]: http://www.adaptagrams.org/documentation/libcola.html\n[libtopology]: http://www.adaptagrams.org/documentation/libtopology.html\n[libdialect]: http://www.adaptagrams.org/documentation/libdialect.html\n[dunnart]: http://users.monash.edu/~mwybrow/dunnart/\n[inkscape]: http://www.inkscape.org/\n[graphviz]: http://www.graphviz.org/\n[arcadia]: http://arcadiapathways.sourceforge.net/\n[gaphor]: http://gaphor.sourceforge.net/\n[cairo]: http://cairographics.org/\n[repo]: https://github.com/mjwybrow/adaptagrams/\n[brlcad]: http://brlcad.org/\n\n"
  },
  {
    "path": "cola/.gitignore",
    "content": "# http://www.gnu.org/software/automake\n\nMakefile.in\n\n# http://www.gnu.org/software/autoconf\n\n/autom4te.cache\n/aclocal.m4\n/compile\n/configure\n/depcomp\n/install-sh\n/missing\n\n# Compiled Object files\n*.slo\n*.lo\n*.o\n\n# Compiled Dynamic libraries\n*.so\n\n# Compiled Static libraries\n*.lai\n*.la\n*.a\n\n.*.swp\n\n.DS_Store\n\n*.pyc\n\nMakefile\n\n/m4\nconfig.guess\nconfig.log\nconfig.status\nconfig.sub\n\nlibtool\nltmain.sh\n\n.deps/\n\nlibcola/config.h.in\nlibcola/stamp-h1\nlibcola/config.h\nlibcola/config.h.in~\n\ndiff\n\n*/tests/*\n!*/tests/*.cpp\n!*/tests/*.h\n!*/tests/Makefile.am\n!libdialect/tests/swig_tests\nlibdialect/tests/swig_tests/output/*\n!libdialect/tests/swig_tests/output/README.txt\n!libdialect/tests/graphs\n\n\nlib*/.libs\nlib*/lib*.pc\n\nadaptagrams*\n!adaptagrams.i\n\nswig-worked\ntest-driver\n\n"
  },
  {
    "path": "cola/AUTHORS",
    "content": "Tim Dwyer <Tim.Dwyer@monash.edu>\nMichael Wybrow <Michael.Wybrow@monash.edu>\n"
  },
  {
    "path": "cola/COPYING",
    "content": "Adaptagrams is free software.\n\nEvery source file in the implementation of Adaptagrams is available to be\nredistributed and/or modified under the terms of the GNU Lesser General \nPublic License (LGPL) version 2.1.  Some files may be available under more\nliberal terms, but we believe that in all cases, each file may be used\nunder the LGPL.\n\nSee the 'LICENSE' file in this directory for the precise terms and\nconditions of the LGPL.\n\nBelow is the copyright notice for the libraries:\n\n--------------------------------------------------------------------------\n\nAdaptagrams is a library of tools and reusable code for adaptive diagramming\napplications, for example: drawing tools, automated document and diagram\nlayout, smart presentation software, graph drawing, chart layout, etc.\n\nThese libraries are collectively known as cola (for Constraint Layout). \nThe newest version of the C++ source code for cola can be found in the \ngit repository on github:\n    https://github.com/mjwybrow/adaptagrams\n\nAll code in the Adaptagrams repository is released as open source under \nthe terms of the LGPL, see the LICENSE file.  This library is distributed\nin the hope that it will be useful, but WITHOUT ANY WARRANTY; without \neven the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR \nPURPOSE.  \n\nWe also dual-license the Adaptagrams libraries and for a fee we can provide\nthem under a less-restrictive commercial license as well as extend them to fit\nyour needs (contact us).  For this reason, if you contribute code to the\nproject and would like it to appear in the main Adaptagrams repository, we\nrequire that you assign the copyright on your changes to Monash Univeristy with\nthe following statement: \"I hereby assign copyright in this code to Monash\nUniversity, to be licensed under the same terms as the rest of the code.\"\n\nCopyright (C) 2004-2013  Monash University\n\nThe Adaptagrams code is written by:\n    Michael Wybrow  <Michael.Wybrow@monash.edu>  and\n    Tim Dwyer  <Tim.Dwyer@monash.edu>\n\n--------------------------------------------------------------------------\n\n"
  },
  {
    "path": "cola/ChangeLog",
    "content": ""
  },
  {
    "path": "cola/Doxyfile",
    "content": "# Doxyfile 1.9.8\n\n# This file describes the settings to be used by the documentation system\n# doxygen (www.doxygen.org) for a project.\n#\n# All text after a double hash (##) is considered a comment and is placed in\n# front of the TAG it is preceding.\n#\n# All text after a single hash (#) is considered a comment and will be ignored.\n# The format is:\n# TAG = value [value, ...]\n# For lists, items can also be appended using:\n# TAG += value [value, ...]\n# Values that contain spaces should be placed between quotes (\\\" \\\").\n#\n# Note:\n#\n# Use doxygen to compare the used configuration file with the template\n# configuration file:\n# doxygen -x [configFile]\n# Use doxygen to compare the used configuration file with the template\n# configuration file without replacing the environment variables or CMake type\n# replacement variables:\n# doxygen -x_noenv [configFile]\n\n#---------------------------------------------------------------------------\n# Project related configuration options\n#---------------------------------------------------------------------------\n\n# This tag specifies the encoding used for all characters in the configuration\n# file that follow. The default is UTF-8 which is also the encoding used for all\n# text before the first occurrence of this tag. Doxygen uses libiconv (or the\n# iconv built into libc) for the transcoding. See\n# https://www.gnu.org/software/libiconv/ for the list of possible encodings.\n# The default value is: UTF-8.\n\nDOXYFILE_ENCODING      = UTF-8\n\n# The PROJECT_NAME tag is a single word (or a sequence of words surrounded by\n# double-quotes, unless you are using Doxywizard) that should identify the\n# project for which the documentation is generated. This name is used in the\n# title of most generated pages and in a few other places.\n# The default value is: My Project.\n\nPROJECT_NAME           = Adaptagrams\n\n# The PROJECT_NUMBER tag can be used to enter a project or revision number. This\n# could be handy for archiving the generated documentation or if some version\n# control system is used.\n\nPROJECT_NUMBER         =\n\n# Using the PROJECT_BRIEF tag one can provide an optional one line description\n# for a project that appears at the top of each page and should give viewer a\n# quick idea about the purpose of the project. Keep the description short.\n\nPROJECT_BRIEF          =\n\n# With the PROJECT_LOGO tag one can specify a logo or an icon that is included\n# in the documentation. The maximum height of the logo should not exceed 55\n# pixels and the maximum width should not exceed 200 pixels. Doxygen will copy\n# the logo to the output directory.\n\nPROJECT_LOGO           =\n\n# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path\n# into which the generated documentation will be written. If a relative path is\n# entered, it will be relative to the location where doxygen was started. If\n# left blank the current directory will be used.\n\nOUTPUT_DIRECTORY       = doc\n\n# If the CREATE_SUBDIRS tag is set to YES then doxygen will create up to 4096\n# sub-directories (in 2 levels) under the output directory of each output format\n# and will distribute the generated files over these directories. Enabling this\n# option can be useful when feeding doxygen a huge amount of source files, where\n# putting all generated files in the same directory would otherwise causes\n# performance problems for the file system. Adapt CREATE_SUBDIRS_LEVEL to\n# control the number of sub-directories.\n# The default value is: NO.\n\nCREATE_SUBDIRS         = NO\n\n# Controls the number of sub-directories that will be created when\n# CREATE_SUBDIRS tag is set to YES. Level 0 represents 16 directories, and every\n# level increment doubles the number of directories, resulting in 4096\n# directories at level 8 which is the default and also the maximum value. The\n# sub-directories are organized in 2 levels, the first level always has a fixed\n# number of 16 directories.\n# Minimum value: 0, maximum value: 8, default value: 8.\n# This tag requires that the tag CREATE_SUBDIRS is set to YES.\n\nCREATE_SUBDIRS_LEVEL   = 8\n\n# If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII\n# characters to appear in the names of generated files. If set to NO, non-ASCII\n# characters will be escaped, for example _xE3_x81_x84 will be used for Unicode\n# U+3044.\n# The default value is: NO.\n\nALLOW_UNICODE_NAMES    = NO\n\n# The OUTPUT_LANGUAGE tag is used to specify the language in which all\n# documentation generated by doxygen is written. Doxygen will use this\n# information to generate all constant output in the proper language.\n# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Bulgarian,\n# Catalan, Chinese, Chinese-Traditional, Croatian, Czech, Danish, Dutch, English\n# (United States), Esperanto, Farsi (Persian), Finnish, French, German, Greek,\n# Hindi, Hungarian, Indonesian, Italian, Japanese, Japanese-en (Japanese with\n# English messages), Korean, Korean-en (Korean with English messages), Latvian,\n# Lithuanian, Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese,\n# Romanian, Russian, Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish,\n# Swedish, Turkish, Ukrainian and Vietnamese.\n# The default value is: English.\n\nOUTPUT_LANGUAGE        = English\n\n# If the BRIEF_MEMBER_DESC tag is set to YES, doxygen will include brief member\n# descriptions after the members that are listed in the file and class\n# documentation (similar to Javadoc). Set to NO to disable this.\n# The default value is: YES.\n\nBRIEF_MEMBER_DESC      = YES\n\n# If the REPEAT_BRIEF tag is set to YES, doxygen will prepend the brief\n# description of a member or function before the detailed description\n#\n# Note: If both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the\n# brief descriptions will be completely suppressed.\n# The default value is: YES.\n\nREPEAT_BRIEF           = YES\n\n# This tag implements a quasi-intelligent brief description abbreviator that is\n# used to form the text in various listings. Each string in this list, if found\n# as the leading text of the brief description, will be stripped from the text\n# and the result, after processing the whole list, is used as the annotated\n# text. Otherwise, the brief description is used as-is. If left blank, the\n# following values are used ($name is automatically replaced with the name of\n# the entity):The $name class, The $name widget, The $name file, is, provides,\n# specifies, contains, represents, a, an and the.\n\nABBREVIATE_BRIEF       =\n\n# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then\n# doxygen will generate a detailed section even if there is only a brief\n# description.\n# The default value is: NO.\n\nALWAYS_DETAILED_SEC    = NO\n\n# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all\n# inherited members of a class in the documentation of that class as if those\n# members were ordinary class members. Constructors, destructors and assignment\n# operators of the base classes will not be shown.\n# The default value is: NO.\n\nINLINE_INHERITED_MEMB  = NO\n\n# If the FULL_PATH_NAMES tag is set to YES, doxygen will prepend the full path\n# before files name in the file list and in the header files. If set to NO the\n# shortest path that makes the file name unique will be used\n# The default value is: YES.\n\nFULL_PATH_NAMES        = YES\n\n# The STRIP_FROM_PATH tag can be used to strip a user-defined part of the path.\n# Stripping is only done if one of the specified strings matches the left-hand\n# part of the path. The tag can be used to show relative paths in the file list.\n# If left blank the directory from which doxygen is run is used as the path to\n# strip.\n#\n# Note that you can specify absolute paths here, but also relative paths, which\n# will be relative from the directory where doxygen is started.\n# This tag requires that the tag FULL_PATH_NAMES is set to YES.\n\nSTRIP_FROM_PATH        =\n\n# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of the\n# path mentioned in the documentation of a class, which tells the reader which\n# header file to include in order to use a class. If left blank only the name of\n# the header file containing the class definition is used. Otherwise one should\n# specify the list of include paths that are normally passed to the compiler\n# using the -I flag.\n\nSTRIP_FROM_INC_PATH    =\n\n# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter (but\n# less readable) file names. This can be useful is your file systems doesn't\n# support long names like on DOS, Mac, or CD-ROM.\n# The default value is: NO.\n\nSHORT_NAMES            = NO\n\n# If the JAVADOC_AUTOBRIEF tag is set to YES then doxygen will interpret the\n# first line (until the first dot) of a Javadoc-style comment as the brief\n# description. If set to NO, the Javadoc-style will behave just like regular Qt-\n# style comments (thus requiring an explicit @brief command for a brief\n# description.)\n# The default value is: NO.\n\nJAVADOC_AUTOBRIEF      = NO\n\n# If the JAVADOC_BANNER tag is set to YES then doxygen will interpret a line\n# such as\n# /***************\n# as being the beginning of a Javadoc-style comment \"banner\". If set to NO, the\n# Javadoc-style will behave just like regular comments and it will not be\n# interpreted by doxygen.\n# The default value is: NO.\n\nJAVADOC_BANNER         = NO\n\n# If the QT_AUTOBRIEF tag is set to YES then doxygen will interpret the first\n# line (until the first dot) of a Qt-style comment as the brief description. If\n# set to NO, the Qt-style will behave just like regular Qt-style comments (thus\n# requiring an explicit \\brief command for a brief description.)\n# The default value is: NO.\n\nQT_AUTOBRIEF           = NO\n\n# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make doxygen treat a\n# multi-line C++ special comment block (i.e. a block of //! or /// comments) as\n# a brief description. This used to be the default behavior. The new default is\n# to treat a multi-line C++ comment block as a detailed description. Set this\n# tag to YES if you prefer the old behavior instead.\n#\n# Note that setting this tag to YES also means that rational rose comments are\n# not recognized any more.\n# The default value is: NO.\n\nMULTILINE_CPP_IS_BRIEF = NO\n\n# By default Python docstrings are displayed as preformatted text and doxygen's\n# special commands cannot be used. By setting PYTHON_DOCSTRING to NO the\n# doxygen's special commands can be used and the contents of the docstring\n# documentation blocks is shown as doxygen documentation.\n# The default value is: YES.\n\nPYTHON_DOCSTRING       = YES\n\n# If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the\n# documentation from any documented member that it re-implements.\n# The default value is: YES.\n\nINHERIT_DOCS           = YES\n\n# If the SEPARATE_MEMBER_PAGES tag is set to YES then doxygen will produce a new\n# page for each member. If set to NO, the documentation of a member will be part\n# of the file/class/namespace that contains it.\n# The default value is: NO.\n\nSEPARATE_MEMBER_PAGES  = NO\n\n# The TAB_SIZE tag can be used to set the number of spaces in a tab. Doxygen\n# uses this value to replace tabs by spaces in code fragments.\n# Minimum value: 1, maximum value: 16, default value: 4.\n\nTAB_SIZE               = 8\n\n# This tag can be used to specify a number of aliases that act as commands in\n# the documentation. An alias has the form:\n# name=value\n# For example adding\n# \"sideeffect=@par Side Effects:^^\"\n# will allow you to put the command \\sideeffect (or @sideeffect) in the\n# documentation, which will result in a user-defined paragraph with heading\n# \"Side Effects:\". Note that you cannot put \\n's in the value part of an alias\n# to insert newlines (in the resulting output). You can put ^^ in the value part\n# of an alias to insert a newline as if a physical newline was in the original\n# file. When you need a literal { or } or , in the value part of an alias you\n# have to escape them by means of a backslash (\\), this can lead to conflicts\n# with the commands \\{ and \\} for these it is advised to use the version @{ and\n# @} or use a double escape (\\\\{ and \\\\})\n\nALIASES                =\n\n# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources\n# only. Doxygen will then generate output that is more tailored for C. For\n# instance, some of the names that are used will be different. The list of all\n# members will be omitted, etc.\n# The default value is: NO.\n\nOPTIMIZE_OUTPUT_FOR_C  = NO\n\n# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or\n# Python sources only. Doxygen will then generate output that is more tailored\n# for that language. For instance, namespaces will be presented as packages,\n# qualified scopes will look different, etc.\n# The default value is: NO.\n\nOPTIMIZE_OUTPUT_JAVA   = NO\n\n# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran\n# sources. Doxygen will then generate output that is tailored for Fortran.\n# The default value is: NO.\n\nOPTIMIZE_FOR_FORTRAN   = NO\n\n# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL\n# sources. Doxygen will then generate output that is tailored for VHDL.\n# The default value is: NO.\n\nOPTIMIZE_OUTPUT_VHDL   = NO\n\n# Set the OPTIMIZE_OUTPUT_SLICE tag to YES if your project consists of Slice\n# sources only. Doxygen will then generate output that is more tailored for that\n# language. For instance, namespaces will be presented as modules, types will be\n# separated into more groups, etc.\n# The default value is: NO.\n\nOPTIMIZE_OUTPUT_SLICE  = NO\n\n# Doxygen selects the parser to use depending on the extension of the files it\n# parses. With this tag you can assign which parser to use for a given\n# extension. Doxygen has a built-in mapping, but you can override or extend it\n# using this tag. The format is ext=language, where ext is a file extension, and\n# language is one of the parsers supported by doxygen: IDL, Java, JavaScript,\n# Csharp (C#), C, C++, Lex, D, PHP, md (Markdown), Objective-C, Python, Slice,\n# VHDL, Fortran (fixed format Fortran: FortranFixed, free formatted Fortran:\n# FortranFree, unknown formatted Fortran: Fortran. In the later case the parser\n# tries to guess whether the code is fixed or free formatted code, this is the\n# default for Fortran type files). For instance to make doxygen treat .inc files\n# as Fortran files (default is PHP), and .f files as C (default is Fortran),\n# use: inc=Fortran f=C.\n#\n# Note: For files without extension you can use no_extension as a placeholder.\n#\n# Note that for custom extensions you also need to set FILE_PATTERNS otherwise\n# the files are not read by doxygen. When specifying no_extension you should add\n# * to the FILE_PATTERNS.\n#\n# Note see also the list of default file extension mappings.\n\nEXTENSION_MAPPING      =\n\n# If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments\n# according to the Markdown format, which allows for more readable\n# documentation. See https://daringfireball.net/projects/markdown/ for details.\n# The output of markdown processing is further processed by doxygen, so you can\n# mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in\n# case of backward compatibilities issues.\n# The default value is: YES.\n\nMARKDOWN_SUPPORT       = YES\n\n# When the TOC_INCLUDE_HEADINGS tag is set to a non-zero value, all headings up\n# to that level are automatically included in the table of contents, even if\n# they do not have an id attribute.\n# Note: This feature currently applies only to Markdown headings.\n# Minimum value: 0, maximum value: 99, default value: 5.\n# This tag requires that the tag MARKDOWN_SUPPORT is set to YES.\n\nTOC_INCLUDE_HEADINGS   = 0\n\n# The MARKDOWN_ID_STYLE tag can be used to specify the algorithm used to\n# generate identifiers for the Markdown headings. Note: Every identifier is\n# unique.\n# Possible values are: DOXYGEN use a fixed 'autotoc_md' string followed by a\n# sequence number starting at 0 and GITHUB use the lower case version of title\n# with any whitespace replaced by '-' and punctuation characters removed.\n# The default value is: DOXYGEN.\n# This tag requires that the tag MARKDOWN_SUPPORT is set to YES.\n\nMARKDOWN_ID_STYLE      = DOXYGEN\n\n# When enabled doxygen tries to link words that correspond to documented\n# classes, or namespaces to their corresponding documentation. Such a link can\n# be prevented in individual cases by putting a % sign in front of the word or\n# globally by setting AUTOLINK_SUPPORT to NO.\n# The default value is: YES.\n\nAUTOLINK_SUPPORT       = YES\n\n# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want\n# to include (a tag file for) the STL sources as input, then you should set this\n# tag to YES in order to let doxygen match functions declarations and\n# definitions whose arguments contain STL classes (e.g. func(std::string);\n# versus func(std::string) {}). This also make the inheritance and collaboration\n# diagrams that involve STL classes more complete and accurate.\n# The default value is: NO.\n\nBUILTIN_STL_SUPPORT    = NO\n\n# If you use Microsoft's C++/CLI language, you should set this option to YES to\n# enable parsing support.\n# The default value is: NO.\n\nCPP_CLI_SUPPORT        = NO\n\n# Set the SIP_SUPPORT tag to YES if your project consists of sip (see:\n# https://www.riverbankcomputing.com/software/sip/intro) sources only. Doxygen\n# will parse them like normal C++ but will assume all classes use public instead\n# of private inheritance when no explicit protection keyword is present.\n# The default value is: NO.\n\nSIP_SUPPORT            = NO\n\n# For Microsoft's IDL there are propget and propput attributes to indicate\n# getter and setter methods for a property. Setting this option to YES will make\n# doxygen to replace the get and set methods by a property in the documentation.\n# This will only work if the methods are indeed getting or setting a simple\n# type. If this is not the case, or you want to show the methods anyway, you\n# should set this option to NO.\n# The default value is: YES.\n\nIDL_PROPERTY_SUPPORT   = YES\n\n# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC\n# tag is set to YES then doxygen will reuse the documentation of the first\n# member in the group (if any) for the other members of the group. By default\n# all members of a group must be documented explicitly.\n# The default value is: NO.\n\nDISTRIBUTE_GROUP_DOC   = NO\n\n# If one adds a struct or class to a group and this option is enabled, then also\n# any nested class or struct is added to the same group. By default this option\n# is disabled and one has to add nested compounds explicitly via \\ingroup.\n# The default value is: NO.\n\nGROUP_NESTED_COMPOUNDS = NO\n\n# Set the SUBGROUPING tag to YES to allow class member groups of the same type\n# (for instance a group of public functions) to be put as a subgroup of that\n# type (e.g. under the Public Functions section). Set it to NO to prevent\n# subgrouping. Alternatively, this can be done per class using the\n# \\nosubgrouping command.\n# The default value is: YES.\n\nSUBGROUPING            = YES\n\n# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions\n# are shown inside the group in which they are included (e.g. using \\ingroup)\n# instead of on a separate page (for HTML and Man pages) or section (for LaTeX\n# and RTF).\n#\n# Note that this feature does not work in combination with\n# SEPARATE_MEMBER_PAGES.\n# The default value is: NO.\n\nINLINE_GROUPED_CLASSES = NO\n\n# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions\n# with only public data fields or simple typedef fields will be shown inline in\n# the documentation of the scope in which they are defined (i.e. file,\n# namespace, or group documentation), provided this scope is documented. If set\n# to NO, structs, classes, and unions are shown on a separate page (for HTML and\n# Man pages) or section (for LaTeX and RTF).\n# The default value is: NO.\n\nINLINE_SIMPLE_STRUCTS  = NO\n\n# When TYPEDEF_HIDES_STRUCT tag is enabled, a typedef of a struct, union, or\n# enum is documented as struct, union, or enum with the name of the typedef. So\n# typedef struct TypeS {} TypeT, will appear in the documentation as a struct\n# with name TypeT. When disabled the typedef will appear as a member of a file,\n# namespace, or class. And the struct will be named TypeS. This can typically be\n# useful for C code in case the coding convention dictates that all compound\n# types are typedef'ed and only the typedef is referenced, never the tag name.\n# The default value is: NO.\n\nTYPEDEF_HIDES_STRUCT   = NO\n\n# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This\n# cache is used to resolve symbols given their name and scope. Since this can be\n# an expensive process and often the same symbol appears multiple times in the\n# code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small\n# doxygen will become slower. If the cache is too large, memory is wasted. The\n# cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range\n# is 0..9, the default is 0, corresponding to a cache size of 2^16=65536\n# symbols. At the end of a run doxygen will report the cache usage and suggest\n# the optimal cache size from a speed point of view.\n# Minimum value: 0, maximum value: 9, default value: 0.\n\nLOOKUP_CACHE_SIZE      = 0\n\n# The NUM_PROC_THREADS specifies the number of threads doxygen is allowed to use\n# during processing. When set to 0 doxygen will based this on the number of\n# cores available in the system. You can set it explicitly to a value larger\n# than 0 to get more control over the balance between CPU load and processing\n# speed. At this moment only the input processing can be done using multiple\n# threads. Since this is still an experimental feature the default is set to 1,\n# which effectively disables parallel processing. Please report any issues you\n# encounter. Generating dot graphs in parallel is controlled by the\n# DOT_NUM_THREADS setting.\n# Minimum value: 0, maximum value: 32, default value: 1.\n\nNUM_PROC_THREADS       = 1\n\n# If the TIMESTAMP tag is set different from NO then each generated page will\n# contain the date or date and time when the page was generated. Setting this to\n# NO can help when comparing the output of multiple runs.\n# Possible values are: YES, NO, DATETIME and DATE.\n# The default value is: NO.\n\nTIMESTAMP              = YES\n\n#---------------------------------------------------------------------------\n# Build related configuration options\n#---------------------------------------------------------------------------\n\n# If the EXTRACT_ALL tag is set to YES, doxygen will assume all entities in\n# documentation are documented, even if no documentation was available. Private\n# class members and static file members will be hidden unless the\n# EXTRACT_PRIVATE respectively EXTRACT_STATIC tags are set to YES.\n# Note: This will also disable the warnings about undocumented members that are\n# normally produced when WARNINGS is set to YES.\n# The default value is: NO.\n\nEXTRACT_ALL            = NO\n\n# If the EXTRACT_PRIVATE tag is set to YES, all private members of a class will\n# be included in the documentation.\n# The default value is: NO.\n\nEXTRACT_PRIVATE        = NO\n\n# If the EXTRACT_PRIV_VIRTUAL tag is set to YES, documented private virtual\n# methods of a class will be included in the documentation.\n# The default value is: NO.\n\nEXTRACT_PRIV_VIRTUAL   = NO\n\n# If the EXTRACT_PACKAGE tag is set to YES, all members with package or internal\n# scope will be included in the documentation.\n# The default value is: NO.\n\nEXTRACT_PACKAGE        = NO\n\n# If the EXTRACT_STATIC tag is set to YES, all static members of a file will be\n# included in the documentation.\n# The default value is: NO.\n\nEXTRACT_STATIC         = NO\n\n# If the EXTRACT_LOCAL_CLASSES tag is set to YES, classes (and structs) defined\n# locally in source files will be included in the documentation. If set to NO,\n# only classes defined in header files are included. Does not have any effect\n# for Java sources.\n# The default value is: YES.\n\nEXTRACT_LOCAL_CLASSES  = NO\n\n# This flag is only useful for Objective-C code. If set to YES, local methods,\n# which are defined in the implementation section but not in the interface are\n# included in the documentation. If set to NO, only methods in the interface are\n# included.\n# The default value is: NO.\n\nEXTRACT_LOCAL_METHODS  = NO\n\n# If this flag is set to YES, the members of anonymous namespaces will be\n# extracted and appear in the documentation as a namespace called\n# 'anonymous_namespace{file}', where file will be replaced with the base name of\n# the file that contains the anonymous namespace. By default anonymous namespace\n# are hidden.\n# The default value is: NO.\n\nEXTRACT_ANON_NSPACES   = NO\n\n# If this flag is set to YES, the name of an unnamed parameter in a declaration\n# will be determined by the corresponding definition. By default unnamed\n# parameters remain unnamed in the output.\n# The default value is: YES.\n\nRESOLVE_UNNAMED_PARAMS = YES\n\n# If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all\n# undocumented members inside documented classes or files. If set to NO these\n# members will be included in the various overviews, but no documentation\n# section is generated. This option has no effect if EXTRACT_ALL is enabled.\n# The default value is: NO.\n\nHIDE_UNDOC_MEMBERS     = YES\n\n# If the HIDE_UNDOC_CLASSES tag is set to YES, doxygen will hide all\n# undocumented classes that are normally visible in the class hierarchy. If set\n# to NO, these classes will be included in the various overviews. This option\n# will also hide undocumented C++ concepts if enabled. This option has no effect\n# if EXTRACT_ALL is enabled.\n# The default value is: NO.\n\nHIDE_UNDOC_CLASSES     = YES\n\n# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, doxygen will hide all friend\n# declarations. If set to NO, these declarations will be included in the\n# documentation.\n# The default value is: NO.\n\nHIDE_FRIEND_COMPOUNDS  = YES\n\n# If the HIDE_IN_BODY_DOCS tag is set to YES, doxygen will hide any\n# documentation blocks found inside the body of a function. If set to NO, these\n# blocks will be appended to the function's detailed documentation block.\n# The default value is: NO.\n\nHIDE_IN_BODY_DOCS      = NO\n\n# The INTERNAL_DOCS tag determines if documentation that is typed after a\n# \\internal command is included. If the tag is set to NO then the documentation\n# will be excluded. Set it to YES to include the internal documentation.\n# The default value is: NO.\n\nINTERNAL_DOCS          = NO\n\n# With the correct setting of option CASE_SENSE_NAMES doxygen will better be\n# able to match the capabilities of the underlying filesystem. In case the\n# filesystem is case sensitive (i.e. it supports files in the same directory\n# whose names only differ in casing), the option must be set to YES to properly\n# deal with such files in case they appear in the input. For filesystems that\n# are not case sensitive the option should be set to NO to properly deal with\n# output files written for symbols that only differ in casing, such as for two\n# classes, one named CLASS and the other named Class, and to also support\n# references to files without having to specify the exact matching casing. On\n# Windows (including Cygwin) and MacOS, users should typically set this option\n# to NO, whereas on Linux or other Unix flavors it should typically be set to\n# YES.\n# Possible values are: SYSTEM, NO and YES.\n# The default value is: SYSTEM.\n\nCASE_SENSE_NAMES       = YES\n\n# If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with\n# their full class and namespace scopes in the documentation. If set to YES, the\n# scope will be hidden.\n# The default value is: NO.\n\nHIDE_SCOPE_NAMES       = NO\n\n# If the HIDE_COMPOUND_REFERENCE tag is set to NO (default) then doxygen will\n# append additional text to a page's title, such as Class Reference. If set to\n# YES the compound reference will be hidden.\n# The default value is: NO.\n\nHIDE_COMPOUND_REFERENCE= NO\n\n# If the SHOW_HEADERFILE tag is set to YES then the documentation for a class\n# will show which file needs to be included to use the class.\n# The default value is: YES.\n\nSHOW_HEADERFILE        = YES\n\n# If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of\n# the files that are included by a file in the documentation of that file.\n# The default value is: YES.\n\nSHOW_INCLUDE_FILES     = YES\n\n# If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each\n# grouped member an include statement to the documentation, telling the reader\n# which file to include in order to use the member.\n# The default value is: NO.\n\nSHOW_GROUPED_MEMB_INC  = NO\n\n# If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include\n# files with double quotes in the documentation rather than with sharp brackets.\n# The default value is: NO.\n\nFORCE_LOCAL_INCLUDES   = NO\n\n# If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the\n# documentation for inline members.\n# The default value is: YES.\n\nINLINE_INFO            = YES\n\n# If the SORT_MEMBER_DOCS tag is set to YES then doxygen will sort the\n# (detailed) documentation of file and class members alphabetically by member\n# name. If set to NO, the members will appear in declaration order.\n# The default value is: YES.\n\nSORT_MEMBER_DOCS       = YES\n\n# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief\n# descriptions of file, namespace and class members alphabetically by member\n# name. If set to NO, the members will appear in declaration order. Note that\n# this will also influence the order of the classes in the class list.\n# The default value is: NO.\n\nSORT_BRIEF_DOCS        = NO\n\n# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the\n# (brief and detailed) documentation of class members so that constructors and\n# destructors are listed first. If set to NO the constructors will appear in the\n# respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS.\n# Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief\n# member documentation.\n# Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting\n# detailed member documentation.\n# The default value is: NO.\n\nSORT_MEMBERS_CTORS_1ST = NO\n\n# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the hierarchy\n# of group names into alphabetical order. If set to NO the group names will\n# appear in their defined order.\n# The default value is: NO.\n\nSORT_GROUP_NAMES       = NO\n\n# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be sorted by\n# fully-qualified names, including namespaces. If set to NO, the class list will\n# be sorted only by class name, not including the namespace part.\n# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.\n# Note: This option applies only to the class list, not to the alphabetical\n# list.\n# The default value is: NO.\n\nSORT_BY_SCOPE_NAME     = NO\n\n# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper\n# type resolution of all parameters of a function it will reject a match between\n# the prototype and the implementation of a member function even if there is\n# only one candidate or it is obvious which candidate to choose by doing a\n# simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still\n# accept a match between prototype and implementation in such cases.\n# The default value is: NO.\n\nSTRICT_PROTO_MATCHING  = NO\n\n# The GENERATE_TODOLIST tag can be used to enable (YES) or disable (NO) the todo\n# list. This list is created by putting \\todo commands in the documentation.\n# The default value is: YES.\n\nGENERATE_TODOLIST      = YES\n\n# The GENERATE_TESTLIST tag can be used to enable (YES) or disable (NO) the test\n# list. This list is created by putting \\test commands in the documentation.\n# The default value is: YES.\n\nGENERATE_TESTLIST      = YES\n\n# The GENERATE_BUGLIST tag can be used to enable (YES) or disable (NO) the bug\n# list. This list is created by putting \\bug commands in the documentation.\n# The default value is: YES.\n\nGENERATE_BUGLIST       = YES\n\n# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or disable (NO)\n# the deprecated list. This list is created by putting \\deprecated commands in\n# the documentation.\n# The default value is: YES.\n\nGENERATE_DEPRECATEDLIST= YES\n\n# The ENABLED_SECTIONS tag can be used to enable conditional documentation\n# sections, marked by \\if <section_label> ... \\endif and \\cond <section_label>\n# ... \\endcond blocks.\n\nENABLED_SECTIONS       = ADAPTAGRAMS_DOC\n\n# The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the\n# initial value of a variable or macro / define can have for it to appear in the\n# documentation. If the initializer consists of more lines than specified here\n# it will be hidden. Use a value of 0 to hide initializers completely. The\n# appearance of the value of individual variables and macros / defines can be\n# controlled using \\showinitializer or \\hideinitializer command in the\n# documentation regardless of this setting.\n# Minimum value: 0, maximum value: 10000, default value: 30.\n\nMAX_INITIALIZER_LINES  = 30\n\n# Set the SHOW_USED_FILES tag to NO to disable the list of files generated at\n# the bottom of the documentation of classes and structs. If set to YES, the\n# list will mention the files that were used to generate the documentation.\n# The default value is: YES.\n\nSHOW_USED_FILES        = YES\n\n# Set the SHOW_FILES tag to NO to disable the generation of the Files page. This\n# will remove the Files entry from the Quick Index and from the Folder Tree View\n# (if specified).\n# The default value is: YES.\n\nSHOW_FILES             = YES\n\n# Set the SHOW_NAMESPACES tag to NO to disable the generation of the Namespaces\n# page. This will remove the Namespaces entry from the Quick Index and from the\n# Folder Tree View (if specified).\n# The default value is: YES.\n\nSHOW_NAMESPACES        = YES\n\n# The FILE_VERSION_FILTER tag can be used to specify a program or script that\n# doxygen should invoke to get the current version for each file (typically from\n# the version control system). Doxygen will invoke the program by executing (via\n# popen()) the command command input-file, where command is the value of the\n# FILE_VERSION_FILTER tag, and input-file is the name of an input file provided\n# by doxygen. Whatever the program writes to standard output is used as the file\n# version. For an example see the documentation.\n\nFILE_VERSION_FILTER    =\n\n# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed\n# by doxygen. The layout file controls the global structure of the generated\n# output files in an output format independent way. To create the layout file\n# that represents doxygen's defaults, run doxygen with the -l option. You can\n# optionally specify a file name after the option, if omitted DoxygenLayout.xml\n# will be used as the name of the layout file. See also section \"Changing the\n# layout of pages\" for information.\n#\n# Note that if you run doxygen from a directory containing a file called\n# DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE\n# tag is left empty.\n\nLAYOUT_FILE            =\n\n# The CITE_BIB_FILES tag can be used to specify one or more bib files containing\n# the reference definitions. This must be a list of .bib files. The .bib\n# extension is automatically appended if omitted. This requires the bibtex tool\n# to be installed. See also https://en.wikipedia.org/wiki/BibTeX for more info.\n# For LaTeX the style of the bibliography can be controlled using\n# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the\n# search path. See also \\cite for info how to create references.\n\nCITE_BIB_FILES         =\n\n#---------------------------------------------------------------------------\n# Configuration options related to warning and progress messages\n#---------------------------------------------------------------------------\n\n# The QUIET tag can be used to turn on/off the messages that are generated to\n# standard output by doxygen. If QUIET is set to YES this implies that the\n# messages are off.\n# The default value is: NO.\n\nQUIET                  = NO\n\n# The WARNINGS tag can be used to turn on/off the warning messages that are\n# generated to standard error (stderr) by doxygen. If WARNINGS is set to YES\n# this implies that the warnings are on.\n#\n# Tip: Turn warnings on while writing the documentation.\n# The default value is: YES.\n\nWARNINGS               = YES\n\n# If the WARN_IF_UNDOCUMENTED tag is set to YES then doxygen will generate\n# warnings for undocumented members. If EXTRACT_ALL is set to YES then this flag\n# will automatically be disabled.\n# The default value is: YES.\n\nWARN_IF_UNDOCUMENTED   = YES\n\n# If the WARN_IF_DOC_ERROR tag is set to YES, doxygen will generate warnings for\n# potential errors in the documentation, such as documenting some parameters in\n# a documented function twice, or documenting parameters that don't exist or\n# using markup commands wrongly.\n# The default value is: YES.\n\nWARN_IF_DOC_ERROR      = YES\n\n# If WARN_IF_INCOMPLETE_DOC is set to YES, doxygen will warn about incomplete\n# function parameter documentation. If set to NO, doxygen will accept that some\n# parameters have no documentation without warning.\n# The default value is: YES.\n\nWARN_IF_INCOMPLETE_DOC = YES\n\n# This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that\n# are documented, but have no documentation for their parameters or return\n# value. If set to NO, doxygen will only warn about wrong parameter\n# documentation, but not about the absence of documentation. If EXTRACT_ALL is\n# set to YES then this flag will automatically be disabled. See also\n# WARN_IF_INCOMPLETE_DOC\n# The default value is: NO.\n\nWARN_NO_PARAMDOC       = NO\n\n# If WARN_IF_UNDOC_ENUM_VAL option is set to YES, doxygen will warn about\n# undocumented enumeration values. If set to NO, doxygen will accept\n# undocumented enumeration values. If EXTRACT_ALL is set to YES then this flag\n# will automatically be disabled.\n# The default value is: NO.\n\nWARN_IF_UNDOC_ENUM_VAL = NO\n\n# If the WARN_AS_ERROR tag is set to YES then doxygen will immediately stop when\n# a warning is encountered. If the WARN_AS_ERROR tag is set to FAIL_ON_WARNINGS\n# then doxygen will continue running as if WARN_AS_ERROR tag is set to NO, but\n# at the end of the doxygen process doxygen will return with a non-zero status.\n# If the WARN_AS_ERROR tag is set to FAIL_ON_WARNINGS_PRINT then doxygen behaves\n# like FAIL_ON_WARNINGS but in case no WARN_LOGFILE is defined doxygen will not\n# write the warning messages in between other messages but write them at the end\n# of a run, in case a WARN_LOGFILE is defined the warning messages will be\n# besides being in the defined file also be shown at the end of a run, unless\n# the WARN_LOGFILE is defined as - i.e. standard output (stdout) in that case\n# the behavior will remain as with the setting FAIL_ON_WARNINGS.\n# Possible values are: NO, YES, FAIL_ON_WARNINGS and FAIL_ON_WARNINGS_PRINT.\n# The default value is: NO.\n\nWARN_AS_ERROR          = NO\n\n# The WARN_FORMAT tag determines the format of the warning messages that doxygen\n# can produce. The string should contain the $file, $line, and $text tags, which\n# will be replaced by the file and line number from which the warning originated\n# and the warning text. Optionally the format may contain $version, which will\n# be replaced by the version of the file (if it could be obtained via\n# FILE_VERSION_FILTER)\n# See also: WARN_LINE_FORMAT\n# The default value is: $file:$line: $text.\n\nWARN_FORMAT            = \"$file:$line: $text\"\n\n# In the $text part of the WARN_FORMAT command it is possible that a reference\n# to a more specific place is given. To make it easier to jump to this place\n# (outside of doxygen) the user can define a custom \"cut\" / \"paste\" string.\n# Example:\n# WARN_LINE_FORMAT = \"'vi $file +$line'\"\n# See also: WARN_FORMAT\n# The default value is: at line $line of file $file.\n\nWARN_LINE_FORMAT       = \"at line $line of file $file\"\n\n# The WARN_LOGFILE tag can be used to specify a file to which warning and error\n# messages should be written. If left blank the output is written to standard\n# error (stderr). In case the file specified cannot be opened for writing the\n# warning and error messages are written to standard error. When as file - is\n# specified the warning and error messages are written to standard output\n# (stdout).\n\nWARN_LOGFILE           =\n\n#---------------------------------------------------------------------------\n# Configuration options related to the input files\n#---------------------------------------------------------------------------\n\n# The INPUT tag is used to specify the files and/or directories that contain\n# documented source files. You may enter file names like myfile.cpp or\n# directories like /usr/src/myproject. Separate the files or directories with\n# spaces. See also FILE_PATTERNS and EXTENSION_MAPPING\n# Note: If this tag is empty the current directory is searched.\n\nINPUT                  = libvpsc \\\n                         libavoid \\\n                         libcola \\\n                         libtopology \\\n                         libdialect \\\n                         doc \\\n                         libavoid/doc \\\n                         libcola/doc \\\n                         libtopology/doc \\\n                         libvpsc/doc \\\n                         libdialect/doc\n\n# This tag can be used to specify the character encoding of the source files\n# that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses\n# libiconv (or the iconv built into libc) for the transcoding. See the libiconv\n# documentation (see:\n# https://www.gnu.org/software/libiconv/) for the list of possible encodings.\n# See also: INPUT_FILE_ENCODING\n# The default value is: UTF-8.\n\nINPUT_ENCODING         = UTF-8\n\n# This tag can be used to specify the character encoding of the source files\n# that doxygen parses The INPUT_FILE_ENCODING tag can be used to specify\n# character encoding on a per file pattern basis. Doxygen will compare the file\n# name with each pattern and apply the encoding instead of the default\n# INPUT_ENCODING) if there is a match. The character encodings are a list of the\n# form: pattern=encoding (like *.php=ISO-8859-1). See cfg_input_encoding\n# \"INPUT_ENCODING\" for further information on supported encodings.\n\nINPUT_FILE_ENCODING    =\n\n# If the value of the INPUT tag contains directories, you can use the\n# FILE_PATTERNS tag to specify one or more wildcard patterns (like *.cpp and\n# *.h) to filter out the source-files in the directories.\n#\n# Note that for custom extensions or not directly supported extensions you also\n# need to set EXTENSION_MAPPING for the extension otherwise the files are not\n# read by doxygen.\n#\n# Note the list of default checked file patterns might differ from the list of\n# default file extension mappings.\n#\n# If left blank the following patterns are tested:*.c, *.cc, *.cxx, *.cxxm,\n# *.cpp, *.cppm, *.c++, *.c++m, *.java, *.ii, *.ixx, *.ipp, *.i++, *.inl, *.idl,\n# *.ddl, *.odl, *.h, *.hh, *.hxx, *.hpp, *.h++, *.ixx, *.l, *.cs, *.d, *.php,\n# *.php4, *.php5, *.phtml, *.inc, *.m, *.markdown, *.md, *.mm, *.dox (to be\n# provided as doxygen C comment), *.py, *.pyw, *.f90, *.f95, *.f03, *.f08,\n# *.f18, *.f, *.for, *.vhd, *.vhdl, *.ucf, *.qsf and *.ice.\n\nFILE_PATTERNS          = *.cpp \\\n                         *.h \\\n                         *.doc\n\n# The RECURSIVE tag can be used to specify whether or not subdirectories should\n# be searched for input files as well.\n# The default value is: NO.\n\nRECURSIVE              = NO\n\n# The EXCLUDE tag can be used to specify files and/or directories that should be\n# excluded from the INPUT source files. This way you can easily exclude a\n# subdirectory from a directory tree whose root is specified with the INPUT tag.\n#\n# Note that relative paths are relative to the directory from which doxygen is\n# run.\n\nEXCLUDE                =\n\n# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or\n# directories that are symbolic links (a Unix file system feature) are excluded\n# from the input.\n# The default value is: NO.\n\nEXCLUDE_SYMLINKS       = NO\n\n# If the value of the INPUT tag contains directories, you can use the\n# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude\n# certain files from those directories.\n#\n# Note that the wildcards are matched against the file with absolute path, so to\n# exclude all test directories for example use the pattern */test/*\n\nEXCLUDE_PATTERNS       =\n\n# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names\n# (namespaces, classes, functions, etc.) that should be excluded from the\n# output. The symbol name can be a fully qualified name, a word, or if the\n# wildcard * is used, a substring. Examples: ANamespace, AClass,\n# ANamespace::AClass, ANamespace::*Test\n\nEXCLUDE_SYMBOLS        =\n\n# The EXAMPLE_PATH tag can be used to specify one or more files or directories\n# that contain example code fragments that are included (see the \\include\n# command).\n\nEXAMPLE_PATH           =\n\n# If the value of the EXAMPLE_PATH tag contains directories, you can use the\n# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp and\n# *.h) to filter out the source-files in the directories. If left blank all\n# files are included.\n\nEXAMPLE_PATTERNS       =\n\n# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be\n# searched for input files to be used with the \\include or \\dontinclude commands\n# irrespective of the value of the RECURSIVE tag.\n# The default value is: NO.\n\nEXAMPLE_RECURSIVE      = NO\n\n# The IMAGE_PATH tag can be used to specify one or more files or directories\n# that contain images that are to be included in the documentation (see the\n# \\image command).\n\nIMAGE_PATH             =\n\n# The INPUT_FILTER tag can be used to specify a program that doxygen should\n# invoke to filter for each input file. Doxygen will invoke the filter program\n# by executing (via popen()) the command:\n#\n# <filter> <input-file>\n#\n# where <filter> is the value of the INPUT_FILTER tag, and <input-file> is the\n# name of an input file. Doxygen will then use the output that the filter\n# program writes to standard output. If FILTER_PATTERNS is specified, this tag\n# will be ignored.\n#\n# Note that the filter must not add or remove lines; it is applied before the\n# code is scanned, but not when the output code is generated. If lines are added\n# or removed, the anchors will not be placed correctly.\n#\n# Note that doxygen will use the data processed and written to standard output\n# for further processing, therefore nothing else, like debug statements or used\n# commands (so in case of a Windows batch file always use @echo OFF), should be\n# written to standard output.\n#\n# Note that for custom extensions or not directly supported extensions you also\n# need to set EXTENSION_MAPPING for the extension otherwise the files are not\n# properly processed by doxygen.\n\nINPUT_FILTER           =\n\n# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern\n# basis. Doxygen will compare the file name with each pattern and apply the\n# filter if there is a match. The filters are a list of the form: pattern=filter\n# (like *.cpp=my_cpp_filter). See INPUT_FILTER for further information on how\n# filters are used. If the FILTER_PATTERNS tag is empty or if none of the\n# patterns match the file name, INPUT_FILTER is applied.\n#\n# Note that for custom extensions or not directly supported extensions you also\n# need to set EXTENSION_MAPPING for the extension otherwise the files are not\n# properly processed by doxygen.\n\nFILTER_PATTERNS        =\n\n# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using\n# INPUT_FILTER) will also be used to filter the input files that are used for\n# producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES).\n# The default value is: NO.\n\nFILTER_SOURCE_FILES    = NO\n\n# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file\n# pattern. A pattern will override the setting for FILTER_PATTERN (if any) and\n# it is also possible to disable source filtering for a specific pattern using\n# *.ext= (so without naming a filter).\n# This tag requires that the tag FILTER_SOURCE_FILES is set to YES.\n\nFILTER_SOURCE_PATTERNS =\n\n# If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that\n# is part of the input, its contents will be placed on the main page\n# (index.html). This can be useful if you have a project on for instance GitHub\n# and want to reuse the introduction page also for the doxygen output.\n\nUSE_MDFILE_AS_MAINPAGE =\n\n# The Fortran standard specifies that for fixed formatted Fortran code all\n# characters from position 72 are to be considered as comment. A common\n# extension is to allow longer lines before the automatic comment starts. The\n# setting FORTRAN_COMMENT_AFTER will also make it possible that longer lines can\n# be processed before the automatic comment starts.\n# Minimum value: 7, maximum value: 10000, default value: 72.\n\nFORTRAN_COMMENT_AFTER  = 72\n\n#---------------------------------------------------------------------------\n# Configuration options related to source browsing\n#---------------------------------------------------------------------------\n\n# If the SOURCE_BROWSER tag is set to YES then a list of source files will be\n# generated. Documented entities will be cross-referenced with these sources.\n#\n# Note: To get rid of all source code in the generated output, make sure that\n# also VERBATIM_HEADERS is set to NO.\n# The default value is: NO.\n\nSOURCE_BROWSER         = NO\n\n# Setting the INLINE_SOURCES tag to YES will include the body of functions,\n# classes and enums directly into the documentation.\n# The default value is: NO.\n\nINLINE_SOURCES         = NO\n\n# Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any\n# special comment blocks from generated source code fragments. Normal C, C++ and\n# Fortran comments will always remain visible.\n# The default value is: YES.\n\nSTRIP_CODE_COMMENTS    = YES\n\n# If the REFERENCED_BY_RELATION tag is set to YES then for each documented\n# entity all documented functions referencing it will be listed.\n# The default value is: NO.\n\nREFERENCED_BY_RELATION = YES\n\n# If the REFERENCES_RELATION tag is set to YES then for each documented function\n# all documented entities called/used by that function will be listed.\n# The default value is: NO.\n\nREFERENCES_RELATION    = YES\n\n# If the REFERENCES_LINK_SOURCE tag is set to YES and SOURCE_BROWSER tag is set\n# to YES then the hyperlinks from functions in REFERENCES_RELATION and\n# REFERENCED_BY_RELATION lists will link to the source code. Otherwise they will\n# link to the documentation.\n# The default value is: YES.\n\nREFERENCES_LINK_SOURCE = YES\n\n# If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the\n# source code will show a tooltip with additional information such as prototype,\n# brief description and links to the definition and documentation. Since this\n# will make the HTML file larger and loading of large files a bit slower, you\n# can opt to disable this feature.\n# The default value is: YES.\n# This tag requires that the tag SOURCE_BROWSER is set to YES.\n\nSOURCE_TOOLTIPS        = YES\n\n# If the USE_HTAGS tag is set to YES then the references to source code will\n# point to the HTML generated by the htags(1) tool instead of doxygen built-in\n# source browser. The htags tool is part of GNU's global source tagging system\n# (see https://www.gnu.org/software/global/global.html). You will need version\n# 4.8.6 or higher.\n#\n# To use it do the following:\n# - Install the latest version of global\n# - Enable SOURCE_BROWSER and USE_HTAGS in the configuration file\n# - Make sure the INPUT points to the root of the source tree\n# - Run doxygen as normal\n#\n# Doxygen will invoke htags (and that will in turn invoke gtags), so these\n# tools must be available from the command line (i.e. in the search path).\n#\n# The result: instead of the source browser generated by doxygen, the links to\n# source code will now point to the output of htags.\n# The default value is: NO.\n# This tag requires that the tag SOURCE_BROWSER is set to YES.\n\nUSE_HTAGS              = NO\n\n# If the VERBATIM_HEADERS tag is set the YES then doxygen will generate a\n# verbatim copy of the header file for each class for which an include is\n# specified. Set to NO to disable this.\n# See also: Section \\class.\n# The default value is: YES.\n\nVERBATIM_HEADERS       = YES\n\n#---------------------------------------------------------------------------\n# Configuration options related to the alphabetical class index\n#---------------------------------------------------------------------------\n\n# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index of all\n# compounds will be generated. Enable this if the project contains a lot of\n# classes, structs, unions or interfaces.\n# The default value is: YES.\n\nALPHABETICAL_INDEX     = NO\n\n# The IGNORE_PREFIX tag can be used to specify a prefix (or a list of prefixes)\n# that should be ignored while generating the index headers. The IGNORE_PREFIX\n# tag works for classes, function and member names. The entity will be placed in\n# the alphabetical list under the first letter of the entity name that remains\n# after removing the prefix.\n# This tag requires that the tag ALPHABETICAL_INDEX is set to YES.\n\nIGNORE_PREFIX          =\n\n#---------------------------------------------------------------------------\n# Configuration options related to the HTML output\n#---------------------------------------------------------------------------\n\n# If the GENERATE_HTML tag is set to YES, doxygen will generate HTML output\n# The default value is: YES.\n\nGENERATE_HTML          = YES\n\n# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. If a\n# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of\n# it.\n# The default directory is: html.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nHTML_OUTPUT            = html\n\n# The HTML_FILE_EXTENSION tag can be used to specify the file extension for each\n# generated HTML page (for example: .htm, .php, .asp).\n# The default value is: .html.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nHTML_FILE_EXTENSION    = .html\n\n# The HTML_HEADER tag can be used to specify a user-defined HTML header file for\n# each generated HTML page. If the tag is left blank doxygen will generate a\n# standard header.\n#\n# To get valid HTML the header file that includes any scripts and style sheets\n# that doxygen needs, which is dependent on the configuration options used (e.g.\n# the setting GENERATE_TREEVIEW). It is highly recommended to start with a\n# default header using\n# doxygen -w html new_header.html new_footer.html new_stylesheet.css\n# YourConfigFile\n# and then modify the file new_header.html. See also section \"Doxygen usage\"\n# for information on how to generate the default header that doxygen normally\n# uses.\n# Note: The header is subject to change so you typically have to regenerate the\n# default header when upgrading to a newer version of doxygen. For a description\n# of the possible markers and block names see the documentation.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nHTML_HEADER            =\n\n# The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each\n# generated HTML page. If the tag is left blank doxygen will generate a standard\n# footer. See HTML_HEADER for more information on how to generate a default\n# footer and what special commands can be used inside the footer. See also\n# section \"Doxygen usage\" for information on how to generate the default footer\n# that doxygen normally uses.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nHTML_FOOTER            =\n\n# The HTML_STYLESHEET tag can be used to specify a user-defined cascading style\n# sheet that is used by each HTML page. It can be used to fine-tune the look of\n# the HTML output. If left blank doxygen will generate a default style sheet.\n# See also section \"Doxygen usage\" for information on how to generate the style\n# sheet that doxygen normally uses.\n# Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as\n# it is more robust and this tag (HTML_STYLESHEET) will in the future become\n# obsolete.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nHTML_STYLESHEET        =\n\n# The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined\n# cascading style sheets that are included after the standard style sheets\n# created by doxygen. Using this option one can overrule certain style aspects.\n# This is preferred over using HTML_STYLESHEET since it does not replace the\n# standard style sheet and is therefore more robust against future updates.\n# Doxygen will copy the style sheet files to the output directory.\n# Note: The order of the extra style sheet files is of importance (e.g. the last\n# style sheet in the list overrules the setting of the previous ones in the\n# list).\n# Note: Since the styling of scrollbars can currently not be overruled in\n# Webkit/Chromium, the styling will be left out of the default doxygen.css if\n# one or more extra stylesheets have been specified. So if scrollbar\n# customization is desired it has to be added explicitly. For an example see the\n# documentation.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nHTML_EXTRA_STYLESHEET  =\n\n# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or\n# other source files which should be copied to the HTML output directory. Note\n# that these files will be copied to the base HTML output directory. Use the\n# $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these\n# files. In the HTML_STYLESHEET file, use the file name only. Also note that the\n# files will be copied as-is; there are no commands or markers available.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nHTML_EXTRA_FILES       =\n\n# The HTML_COLORSTYLE tag can be used to specify if the generated HTML output\n# should be rendered with a dark or light theme.\n# Possible values are: LIGHT always generate light mode output, DARK always\n# generate dark mode output, AUTO_LIGHT automatically set the mode according to\n# the user preference, use light mode if no preference is set (the default),\n# AUTO_DARK automatically set the mode according to the user preference, use\n# dark mode if no preference is set and TOGGLE allow to user to switch between\n# light and dark mode via a button.\n# The default value is: AUTO_LIGHT.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nHTML_COLORSTYLE        = AUTO_LIGHT\n\n# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen\n# will adjust the colors in the style sheet and background images according to\n# this color. Hue is specified as an angle on a color-wheel, see\n# https://en.wikipedia.org/wiki/Hue for more information. For instance the value\n# 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300\n# purple, and 360 is red again.\n# Minimum value: 0, maximum value: 359, default value: 220.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nHTML_COLORSTYLE_HUE    = 220\n\n# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors\n# in the HTML output. For a value of 0 the output will use gray-scales only. A\n# value of 255 will produce the most vivid colors.\n# Minimum value: 0, maximum value: 255, default value: 100.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nHTML_COLORSTYLE_SAT    = 100\n\n# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the\n# luminance component of the colors in the HTML output. Values below 100\n# gradually make the output lighter, whereas values above 100 make the output\n# darker. The value divided by 100 is the actual gamma applied, so 80 represents\n# a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not\n# change the gamma.\n# Minimum value: 40, maximum value: 240, default value: 80.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nHTML_COLORSTYLE_GAMMA  = 80\n\n# If the HTML_DYNAMIC_MENUS tag is set to YES then the generated HTML\n# documentation will contain a main index with vertical navigation menus that\n# are dynamically created via JavaScript. If disabled, the navigation index will\n# consists of multiple levels of tabs that are statically embedded in every HTML\n# page. Disable this option to support browsers that do not have JavaScript,\n# like the Qt help browser.\n# The default value is: YES.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nHTML_DYNAMIC_MENUS     = YES\n\n# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML\n# documentation will contain sections that can be hidden and shown after the\n# page has loaded.\n# The default value is: NO.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nHTML_DYNAMIC_SECTIONS  = NO\n\n# If the HTML_CODE_FOLDING tag is set to YES then classes and functions can be\n# dynamically folded and expanded in the generated HTML source code.\n# The default value is: YES.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nHTML_CODE_FOLDING      = YES\n\n# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries\n# shown in the various tree structured indices initially; the user can expand\n# and collapse entries dynamically later on. Doxygen will expand the tree to\n# such a level that at most the specified number of entries are visible (unless\n# a fully collapsed tree already exceeds this amount). So setting the number of\n# entries 1 will produce a full collapsed tree by default. 0 is a special value\n# representing an infinite number of entries and will result in a full expanded\n# tree by default.\n# Minimum value: 0, maximum value: 9999, default value: 100.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nHTML_INDEX_NUM_ENTRIES = 100\n\n# If the GENERATE_DOCSET tag is set to YES, additional index files will be\n# generated that can be used as input for Apple's Xcode 3 integrated development\n# environment (see:\n# https://developer.apple.com/xcode/), introduced with OSX 10.5 (Leopard). To\n# create a documentation set, doxygen will generate a Makefile in the HTML\n# output directory. Running make will produce the docset in that directory and\n# running make install will install the docset in\n# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find it at\n# startup. See https://developer.apple.com/library/archive/featuredarticles/Doxy\n# genXcode/_index.html for more information.\n# The default value is: NO.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nGENERATE_DOCSET        = NO\n\n# This tag determines the name of the docset feed. A documentation feed provides\n# an umbrella under which multiple documentation sets from a single provider\n# (such as a company or product suite) can be grouped.\n# The default value is: Doxygen generated docs.\n# This tag requires that the tag GENERATE_DOCSET is set to YES.\n\nDOCSET_FEEDNAME        = \"Doxygen generated docs\"\n\n# This tag determines the URL of the docset feed. A documentation feed provides\n# an umbrella under which multiple documentation sets from a single provider\n# (such as a company or product suite) can be grouped.\n# This tag requires that the tag GENERATE_DOCSET is set to YES.\n\nDOCSET_FEEDURL         =\n\n# This tag specifies a string that should uniquely identify the documentation\n# set bundle. This should be a reverse domain-name style string, e.g.\n# com.mycompany.MyDocSet. Doxygen will append .docset to the name.\n# The default value is: org.doxygen.Project.\n# This tag requires that the tag GENERATE_DOCSET is set to YES.\n\nDOCSET_BUNDLE_ID       = org.doxygen.Project\n\n# The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify\n# the documentation publisher. This should be a reverse domain-name style\n# string, e.g. com.mycompany.MyDocSet.documentation.\n# The default value is: org.doxygen.Publisher.\n# This tag requires that the tag GENERATE_DOCSET is set to YES.\n\nDOCSET_PUBLISHER_ID    = org.doxygen.Publisher\n\n# The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher.\n# The default value is: Publisher.\n# This tag requires that the tag GENERATE_DOCSET is set to YES.\n\nDOCSET_PUBLISHER_NAME  = Publisher\n\n# If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three\n# additional HTML index files: index.hhp, index.hhc, and index.hhk. The\n# index.hhp is a project file that can be read by Microsoft's HTML Help Workshop\n# on Windows. In the beginning of 2021 Microsoft took the original page, with\n# a.o. the download links, offline the HTML help workshop was already many years\n# in maintenance mode). You can download the HTML help workshop from the web\n# archives at Installation executable (see:\n# http://web.archive.org/web/20160201063255/http://download.microsoft.com/downlo\n# ad/0/A/9/0A939EF6-E31C-430F-A3DF-DFAE7960D564/htmlhelp.exe).\n#\n# The HTML Help Workshop contains a compiler that can convert all HTML output\n# generated by doxygen into a single compiled HTML file (.chm). Compiled HTML\n# files are now used as the Windows 98 help format, and will replace the old\n# Windows help format (.hlp) on all Windows platforms in the future. Compressed\n# HTML files also contain an index, a table of contents, and you can search for\n# words in the documentation. The HTML workshop also contains a viewer for\n# compressed HTML files.\n# The default value is: NO.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nGENERATE_HTMLHELP      = NO\n\n# The CHM_FILE tag can be used to specify the file name of the resulting .chm\n# file. You can add a path in front of the file if the result should not be\n# written to the html output directory.\n# This tag requires that the tag GENERATE_HTMLHELP is set to YES.\n\nCHM_FILE               =\n\n# The HHC_LOCATION tag can be used to specify the location (absolute path\n# including file name) of the HTML help compiler (hhc.exe). If non-empty,\n# doxygen will try to run the HTML help compiler on the generated index.hhp.\n# The file has to be specified with full path.\n# This tag requires that the tag GENERATE_HTMLHELP is set to YES.\n\nHHC_LOCATION           =\n\n# The GENERATE_CHI flag controls if a separate .chi index file is generated\n# (YES) or that it should be included in the main .chm file (NO).\n# The default value is: NO.\n# This tag requires that the tag GENERATE_HTMLHELP is set to YES.\n\nGENERATE_CHI           = NO\n\n# The CHM_INDEX_ENCODING is used to encode HtmlHelp index (hhk), content (hhc)\n# and project file content.\n# This tag requires that the tag GENERATE_HTMLHELP is set to YES.\n\nCHM_INDEX_ENCODING     =\n\n# The BINARY_TOC flag controls whether a binary table of contents is generated\n# (YES) or a normal table of contents (NO) in the .chm file. Furthermore it\n# enables the Previous and Next buttons.\n# The default value is: NO.\n# This tag requires that the tag GENERATE_HTMLHELP is set to YES.\n\nBINARY_TOC             = NO\n\n# The TOC_EXPAND flag can be set to YES to add extra items for group members to\n# the table of contents of the HTML help documentation and to the tree view.\n# The default value is: NO.\n# This tag requires that the tag GENERATE_HTMLHELP is set to YES.\n\nTOC_EXPAND             = NO\n\n# The SITEMAP_URL tag is used to specify the full URL of the place where the\n# generated documentation will be placed on the server by the user during the\n# deployment of the documentation. The generated sitemap is called sitemap.xml\n# and placed on the directory specified by HTML_OUTPUT. In case no SITEMAP_URL\n# is specified no sitemap is generated. For information about the sitemap\n# protocol see https://www.sitemaps.org\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nSITEMAP_URL            =\n\n# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and\n# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated that\n# can be used as input for Qt's qhelpgenerator to generate a Qt Compressed Help\n# (.qch) of the generated HTML documentation.\n# The default value is: NO.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nGENERATE_QHP           = NO\n\n# If the QHG_LOCATION tag is specified, the QCH_FILE tag can be used to specify\n# the file name of the resulting .qch file. The path specified is relative to\n# the HTML output folder.\n# This tag requires that the tag GENERATE_QHP is set to YES.\n\nQCH_FILE               =\n\n# The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help\n# Project output. For more information please see Qt Help Project / Namespace\n# (see:\n# https://doc.qt.io/archives/qt-4.8/qthelpproject.html#namespace).\n# The default value is: org.doxygen.Project.\n# This tag requires that the tag GENERATE_QHP is set to YES.\n\nQHP_NAMESPACE          = org.doxygen.Project\n\n# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating Qt\n# Help Project output. For more information please see Qt Help Project / Virtual\n# Folders (see:\n# https://doc.qt.io/archives/qt-4.8/qthelpproject.html#virtual-folders).\n# The default value is: doc.\n# This tag requires that the tag GENERATE_QHP is set to YES.\n\nQHP_VIRTUAL_FOLDER     = doc\n\n# If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom\n# filter to add. For more information please see Qt Help Project / Custom\n# Filters (see:\n# https://doc.qt.io/archives/qt-4.8/qthelpproject.html#custom-filters).\n# This tag requires that the tag GENERATE_QHP is set to YES.\n\nQHP_CUST_FILTER_NAME   =\n\n# The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the\n# custom filter to add. For more information please see Qt Help Project / Custom\n# Filters (see:\n# https://doc.qt.io/archives/qt-4.8/qthelpproject.html#custom-filters).\n# This tag requires that the tag GENERATE_QHP is set to YES.\n\nQHP_CUST_FILTER_ATTRS  =\n\n# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this\n# project's filter section matches. Qt Help Project / Filter Attributes (see:\n# https://doc.qt.io/archives/qt-4.8/qthelpproject.html#filter-attributes).\n# This tag requires that the tag GENERATE_QHP is set to YES.\n\nQHP_SECT_FILTER_ATTRS  =\n\n# The QHG_LOCATION tag can be used to specify the location (absolute path\n# including file name) of Qt's qhelpgenerator. If non-empty doxygen will try to\n# run qhelpgenerator on the generated .qhp file.\n# This tag requires that the tag GENERATE_QHP is set to YES.\n\nQHG_LOCATION           =\n\n# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be\n# generated, together with the HTML files, they form an Eclipse help plugin. To\n# install this plugin and make it available under the help contents menu in\n# Eclipse, the contents of the directory containing the HTML and XML files needs\n# to be copied into the plugins directory of eclipse. The name of the directory\n# within the plugins directory should be the same as the ECLIPSE_DOC_ID value.\n# After copying Eclipse needs to be restarted before the help appears.\n# The default value is: NO.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nGENERATE_ECLIPSEHELP   = NO\n\n# A unique identifier for the Eclipse help plugin. When installing the plugin\n# the directory name containing the HTML and XML files should also have this\n# name. Each documentation set should have its own identifier.\n# The default value is: org.doxygen.Project.\n# This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES.\n\nECLIPSE_DOC_ID         = org.doxygen.Project\n\n# If you want full control over the layout of the generated HTML pages it might\n# be necessary to disable the index and replace it with your own. The\n# DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top\n# of each HTML page. A value of NO enables the index and the value YES disables\n# it. Since the tabs in the index contain the same information as the navigation\n# tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES.\n# The default value is: NO.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nDISABLE_INDEX          = NO\n\n# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index\n# structure should be generated to display hierarchical information. If the tag\n# value is set to YES, a side panel will be generated containing a tree-like\n# index structure (just like the one that is generated for HTML Help). For this\n# to work a browser that supports JavaScript, DHTML, CSS and frames is required\n# (i.e. any modern browser). Windows users are probably better off using the\n# HTML help feature. Via custom style sheets (see HTML_EXTRA_STYLESHEET) one can\n# further fine tune the look of the index (see \"Fine-tuning the output\"). As an\n# example, the default style sheet generated by doxygen has an example that\n# shows how to put an image at the root of the tree instead of the PROJECT_NAME.\n# Since the tree basically has the same information as the tab index, you could\n# consider setting DISABLE_INDEX to YES when enabling this option.\n# The default value is: NO.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nGENERATE_TREEVIEW      = NO\n\n# When both GENERATE_TREEVIEW and DISABLE_INDEX are set to YES, then the\n# FULL_SIDEBAR option determines if the side bar is limited to only the treeview\n# area (value NO) or if it should extend to the full height of the window (value\n# YES). Setting this to YES gives a layout similar to\n# https://docs.readthedocs.io with more room for contents, but less room for the\n# project logo, title, and description. If either GENERATE_TREEVIEW or\n# DISABLE_INDEX is set to NO, this option has no effect.\n# The default value is: NO.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nFULL_SIDEBAR           = NO\n\n# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that\n# doxygen will group on one line in the generated HTML documentation.\n#\n# Note that a value of 0 will completely suppress the enum values from appearing\n# in the overview section.\n# Minimum value: 0, maximum value: 20, default value: 4.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nENUM_VALUES_PER_LINE   = 4\n\n# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be used\n# to set the initial width (in pixels) of the frame in which the tree is shown.\n# Minimum value: 0, maximum value: 1500, default value: 250.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nTREEVIEW_WIDTH         = 250\n\n# If the EXT_LINKS_IN_WINDOW option is set to YES, doxygen will open links to\n# external symbols imported via tag files in a separate window.\n# The default value is: NO.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nEXT_LINKS_IN_WINDOW    = NO\n\n# If the OBFUSCATE_EMAILS tag is set to YES, doxygen will obfuscate email\n# addresses.\n# The default value is: YES.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nOBFUSCATE_EMAILS       = YES\n\n# If the HTML_FORMULA_FORMAT option is set to svg, doxygen will use the pdf2svg\n# tool (see https://github.com/dawbarton/pdf2svg) or inkscape (see\n# https://inkscape.org) to generate formulas as SVG images instead of PNGs for\n# the HTML output. These images will generally look nicer at scaled resolutions.\n# Possible values are: png (the default) and svg (looks nicer but requires the\n# pdf2svg or inkscape tool).\n# The default value is: png.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nHTML_FORMULA_FORMAT    = png\n\n# Use this tag to change the font size of LaTeX formulas included as images in\n# the HTML documentation. When you change the font size after a successful\n# doxygen run you need to manually remove any form_*.png images from the HTML\n# output directory to force them to be regenerated.\n# Minimum value: 8, maximum value: 50, default value: 10.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nFORMULA_FONTSIZE       = 10\n\n# The FORMULA_MACROFILE can contain LaTeX \\newcommand and \\renewcommand commands\n# to create new LaTeX commands to be used in formulas as building blocks. See\n# the section \"Including formulas\" for details.\n\nFORMULA_MACROFILE      =\n\n# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see\n# https://www.mathjax.org) which uses client side JavaScript for the rendering\n# instead of using pre-rendered bitmaps. Use this if you do not have LaTeX\n# installed or if you want to formulas look prettier in the HTML output. When\n# enabled you may also need to install MathJax separately and configure the path\n# to it using the MATHJAX_RELPATH option.\n# The default value is: NO.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nUSE_MATHJAX            = NO\n\n# With MATHJAX_VERSION it is possible to specify the MathJax version to be used.\n# Note that the different versions of MathJax have different requirements with\n# regards to the different settings, so it is possible that also other MathJax\n# settings have to be changed when switching between the different MathJax\n# versions.\n# Possible values are: MathJax_2 and MathJax_3.\n# The default value is: MathJax_2.\n# This tag requires that the tag USE_MATHJAX is set to YES.\n\nMATHJAX_VERSION        = MathJax_2\n\n# When MathJax is enabled you can set the default output format to be used for\n# the MathJax output. For more details about the output format see MathJax\n# version 2 (see:\n# http://docs.mathjax.org/en/v2.7-latest/output.html) and MathJax version 3\n# (see:\n# http://docs.mathjax.org/en/latest/web/components/output.html).\n# Possible values are: HTML-CSS (which is slower, but has the best\n# compatibility. This is the name for Mathjax version 2, for MathJax version 3\n# this will be translated into chtml), NativeMML (i.e. MathML. Only supported\n# for NathJax 2. For MathJax version 3 chtml will be used instead.), chtml (This\n# is the name for Mathjax version 3, for MathJax version 2 this will be\n# translated into HTML-CSS) and SVG.\n# The default value is: HTML-CSS.\n# This tag requires that the tag USE_MATHJAX is set to YES.\n\nMATHJAX_FORMAT         = HTML-CSS\n\n# When MathJax is enabled you need to specify the location relative to the HTML\n# output directory using the MATHJAX_RELPATH option. The destination directory\n# should contain the MathJax.js script. For instance, if the mathjax directory\n# is located at the same level as the HTML output directory, then\n# MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax\n# Content Delivery Network so you can quickly see the result without installing\n# MathJax. However, it is strongly recommended to install a local copy of\n# MathJax from https://www.mathjax.org before deployment. The default value is:\n# - in case of MathJax version 2: https://cdn.jsdelivr.net/npm/mathjax@2\n# - in case of MathJax version 3: https://cdn.jsdelivr.net/npm/mathjax@3\n# This tag requires that the tag USE_MATHJAX is set to YES.\n\nMATHJAX_RELPATH        = http://cdn.mathjax.org/mathjax/latest\n\n# The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax\n# extension names that should be enabled during MathJax rendering. For example\n# for MathJax version 2 (see\n# https://docs.mathjax.org/en/v2.7-latest/tex.html#tex-and-latex-extensions):\n# MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols\n# For example for MathJax version 3 (see\n# http://docs.mathjax.org/en/latest/input/tex/extensions/index.html):\n# MATHJAX_EXTENSIONS = ams\n# This tag requires that the tag USE_MATHJAX is set to YES.\n\nMATHJAX_EXTENSIONS     =\n\n# The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces\n# of code that will be used on startup of the MathJax code. See the MathJax site\n# (see:\n# http://docs.mathjax.org/en/v2.7-latest/output.html) for more details. For an\n# example see the documentation.\n# This tag requires that the tag USE_MATHJAX is set to YES.\n\nMATHJAX_CODEFILE       =\n\n# When the SEARCHENGINE tag is enabled doxygen will generate a search box for\n# the HTML output. The underlying search engine uses javascript and DHTML and\n# should work on any modern browser. Note that when using HTML help\n# (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET)\n# there is already a search function so this one should typically be disabled.\n# For large projects the javascript based search engine can be slow, then\n# enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to\n# search using the keyboard; to jump to the search box use <access key> + S\n# (what the <access key> is depends on the OS and browser, but it is typically\n# <CTRL>, <ALT>/<option>, or both). Inside the search box use the <cursor down\n# key> to jump into the search results window, the results can be navigated\n# using the <cursor keys>. Press <Enter> to select an item or <escape> to cancel\n# the search. The filter options can be selected when the cursor is inside the\n# search box by pressing <Shift>+<cursor down>. Also here use the <cursor keys>\n# to select a filter and <Enter> or <escape> to activate or cancel the filter\n# option.\n# The default value is: YES.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nSEARCHENGINE           = NO\n\n# When the SERVER_BASED_SEARCH tag is enabled the search engine will be\n# implemented using a web server instead of a web client using JavaScript. There\n# are two flavors of web server based searching depending on the EXTERNAL_SEARCH\n# setting. When disabled, doxygen will generate a PHP script for searching and\n# an index file used by the script. When EXTERNAL_SEARCH is enabled the indexing\n# and searching needs to be provided by external tools. See the section\n# \"External Indexing and Searching\" for details.\n# The default value is: NO.\n# This tag requires that the tag SEARCHENGINE is set to YES.\n\nSERVER_BASED_SEARCH    = NO\n\n# When EXTERNAL_SEARCH tag is enabled doxygen will no longer generate the PHP\n# script for searching. Instead the search results are written to an XML file\n# which needs to be processed by an external indexer. Doxygen will invoke an\n# external search engine pointed to by the SEARCHENGINE_URL option to obtain the\n# search results.\n#\n# Doxygen ships with an example indexer (doxyindexer) and search engine\n# (doxysearch.cgi) which are based on the open source search engine library\n# Xapian (see:\n# https://xapian.org/).\n#\n# See the section \"External Indexing and Searching\" for details.\n# The default value is: NO.\n# This tag requires that the tag SEARCHENGINE is set to YES.\n\nEXTERNAL_SEARCH        = NO\n\n# The SEARCHENGINE_URL should point to a search engine hosted by a web server\n# which will return the search results when EXTERNAL_SEARCH is enabled.\n#\n# Doxygen ships with an example indexer (doxyindexer) and search engine\n# (doxysearch.cgi) which are based on the open source search engine library\n# Xapian (see:\n# https://xapian.org/). See the section \"External Indexing and Searching\" for\n# details.\n# This tag requires that the tag SEARCHENGINE is set to YES.\n\nSEARCHENGINE_URL       =\n\n# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the unindexed\n# search data is written to a file for indexing by an external tool. With the\n# SEARCHDATA_FILE tag the name of this file can be specified.\n# The default file is: searchdata.xml.\n# This tag requires that the tag SEARCHENGINE is set to YES.\n\nSEARCHDATA_FILE        = searchdata.xml\n\n# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the\n# EXTERNAL_SEARCH_ID tag can be used as an identifier for the project. This is\n# useful in combination with EXTRA_SEARCH_MAPPINGS to search through multiple\n# projects and redirect the results back to the right project.\n# This tag requires that the tag SEARCHENGINE is set to YES.\n\nEXTERNAL_SEARCH_ID     =\n\n# The EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through doxygen\n# projects other than the one defined by this configuration file, but that are\n# all added to the same external search index. Each project needs to have a\n# unique id set via EXTERNAL_SEARCH_ID. The search mapping then maps the id of\n# to a relative location where the documentation can be found. The format is:\n# EXTRA_SEARCH_MAPPINGS = tagname1=loc1 tagname2=loc2 ...\n# This tag requires that the tag SEARCHENGINE is set to YES.\n\nEXTRA_SEARCH_MAPPINGS  =\n\n#---------------------------------------------------------------------------\n# Configuration options related to the LaTeX output\n#---------------------------------------------------------------------------\n\n# If the GENERATE_LATEX tag is set to YES, doxygen will generate LaTeX output.\n# The default value is: YES.\n\nGENERATE_LATEX         = YES\n\n# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. If a\n# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of\n# it.\n# The default directory is: latex.\n# This tag requires that the tag GENERATE_LATEX is set to YES.\n\nLATEX_OUTPUT           = latex\n\n# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be\n# invoked.\n#\n# Note that when not enabling USE_PDFLATEX the default is latex when enabling\n# USE_PDFLATEX the default is pdflatex and when in the later case latex is\n# chosen this is overwritten by pdflatex. For specific output languages the\n# default can have been set differently, this depends on the implementation of\n# the output language.\n# This tag requires that the tag GENERATE_LATEX is set to YES.\n\nLATEX_CMD_NAME         = latex\n\n# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to generate\n# index for LaTeX.\n# Note: This tag is used in the Makefile / make.bat.\n# See also: LATEX_MAKEINDEX_CMD for the part in the generated output file\n# (.tex).\n# The default file is: makeindex.\n# This tag requires that the tag GENERATE_LATEX is set to YES.\n\nMAKEINDEX_CMD_NAME     = makeindex\n\n# The LATEX_MAKEINDEX_CMD tag can be used to specify the command name to\n# generate index for LaTeX. In case there is no backslash (\\) as first character\n# it will be automatically added in the LaTeX code.\n# Note: This tag is used in the generated output file (.tex).\n# See also: MAKEINDEX_CMD_NAME for the part in the Makefile / make.bat.\n# The default value is: makeindex.\n# This tag requires that the tag GENERATE_LATEX is set to YES.\n\nLATEX_MAKEINDEX_CMD    = makeindex\n\n# If the COMPACT_LATEX tag is set to YES, doxygen generates more compact LaTeX\n# documents. This may be useful for small projects and may help to save some\n# trees in general.\n# The default value is: NO.\n# This tag requires that the tag GENERATE_LATEX is set to YES.\n\nCOMPACT_LATEX          = NO\n\n# The PAPER_TYPE tag can be used to set the paper type that is used by the\n# printer.\n# Possible values are: a4 (210 x 297 mm), letter (8.5 x 11 inches), legal (8.5 x\n# 14 inches) and executive (7.25 x 10.5 inches).\n# The default value is: a4.\n# This tag requires that the tag GENERATE_LATEX is set to YES.\n\nPAPER_TYPE             = a4wide\n\n# The EXTRA_PACKAGES tag can be used to specify one or more LaTeX package names\n# that should be included in the LaTeX output. The package can be specified just\n# by its name or with the correct syntax as to be used with the LaTeX\n# \\usepackage command. To get the times font for instance you can specify :\n# EXTRA_PACKAGES=times or EXTRA_PACKAGES={times}\n# To use the option intlimits with the amsmath package you can specify:\n# EXTRA_PACKAGES=[intlimits]{amsmath}\n# If left blank no extra packages will be included.\n# This tag requires that the tag GENERATE_LATEX is set to YES.\n\nEXTRA_PACKAGES         =\n\n# The LATEX_HEADER tag can be used to specify a user-defined LaTeX header for\n# the generated LaTeX document. The header should contain everything until the\n# first chapter. If it is left blank doxygen will generate a standard header. It\n# is highly recommended to start with a default header using\n# doxygen -w latex new_header.tex new_footer.tex new_stylesheet.sty\n# and then modify the file new_header.tex. See also section \"Doxygen usage\" for\n# information on how to generate the default header that doxygen normally uses.\n#\n# Note: Only use a user-defined header if you know what you are doing!\n# Note: The header is subject to change so you typically have to regenerate the\n# default header when upgrading to a newer version of doxygen. The following\n# commands have a special meaning inside the header (and footer): For a\n# description of the possible markers and block names see the documentation.\n# This tag requires that the tag GENERATE_LATEX is set to YES.\n\nLATEX_HEADER           =\n\n# The LATEX_FOOTER tag can be used to specify a user-defined LaTeX footer for\n# the generated LaTeX document. The footer should contain everything after the\n# last chapter. If it is left blank doxygen will generate a standard footer. See\n# LATEX_HEADER for more information on how to generate a default footer and what\n# special commands can be used inside the footer. See also section \"Doxygen\n# usage\" for information on how to generate the default footer that doxygen\n# normally uses. Note: Only use a user-defined footer if you know what you are\n# doing!\n# This tag requires that the tag GENERATE_LATEX is set to YES.\n\nLATEX_FOOTER           =\n\n# The LATEX_EXTRA_STYLESHEET tag can be used to specify additional user-defined\n# LaTeX style sheets that are included after the standard style sheets created\n# by doxygen. Using this option one can overrule certain style aspects. Doxygen\n# will copy the style sheet files to the output directory.\n# Note: The order of the extra style sheet files is of importance (e.g. the last\n# style sheet in the list overrules the setting of the previous ones in the\n# list).\n# This tag requires that the tag GENERATE_LATEX is set to YES.\n\nLATEX_EXTRA_STYLESHEET =\n\n# The LATEX_EXTRA_FILES tag can be used to specify one or more extra images or\n# other source files which should be copied to the LATEX_OUTPUT output\n# directory. Note that the files will be copied as-is; there are no commands or\n# markers available.\n# This tag requires that the tag GENERATE_LATEX is set to YES.\n\nLATEX_EXTRA_FILES      =\n\n# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated is\n# prepared for conversion to PDF (using ps2pdf or pdflatex). The PDF file will\n# contain links (just like the HTML output) instead of page references. This\n# makes the output suitable for online browsing using a PDF viewer.\n# The default value is: YES.\n# This tag requires that the tag GENERATE_LATEX is set to YES.\n\nPDF_HYPERLINKS         = NO\n\n# If the USE_PDFLATEX tag is set to YES, doxygen will use the engine as\n# specified with LATEX_CMD_NAME to generate the PDF file directly from the LaTeX\n# files. Set this option to YES, to get a higher quality PDF documentation.\n#\n# See also section LATEX_CMD_NAME for selecting the engine.\n# The default value is: YES.\n# This tag requires that the tag GENERATE_LATEX is set to YES.\n\nUSE_PDFLATEX           = NO\n\n# The LATEX_BATCHMODE tag signals the behavior of LaTeX in case of an error.\n# Possible values are: NO same as ERROR_STOP, YES same as BATCH, BATCH In batch\n# mode nothing is printed on the terminal, errors are scrolled as if <return> is\n# hit at every error; missing files that TeX tries to input or request from\n# keyboard input (\\read on a not open input stream) cause the job to abort,\n# NON_STOP In nonstop mode the diagnostic message will appear on the terminal,\n# but there is no possibility of user interaction just like in batch mode,\n# SCROLL In scroll mode, TeX will stop only for missing files to input or if\n# keyboard input is necessary and ERROR_STOP In errorstop mode, TeX will stop at\n# each error, asking for user intervention.\n# The default value is: NO.\n# This tag requires that the tag GENERATE_LATEX is set to YES.\n\nLATEX_BATCHMODE        = NO\n\n# If the LATEX_HIDE_INDICES tag is set to YES then doxygen will not include the\n# index chapters (such as File Index, Compound Index, etc.) in the output.\n# The default value is: NO.\n# This tag requires that the tag GENERATE_LATEX is set to YES.\n\nLATEX_HIDE_INDICES     = NO\n\n# The LATEX_BIB_STYLE tag can be used to specify the style to use for the\n# bibliography, e.g. plainnat, or ieeetr. See\n# https://en.wikipedia.org/wiki/BibTeX and \\cite for more info.\n# The default value is: plain.\n# This tag requires that the tag GENERATE_LATEX is set to YES.\n\nLATEX_BIB_STYLE        = plain\n\n# The LATEX_EMOJI_DIRECTORY tag is used to specify the (relative or absolute)\n# path from which the emoji images will be read. If a relative path is entered,\n# it will be relative to the LATEX_OUTPUT directory. If left blank the\n# LATEX_OUTPUT directory will be used.\n# This tag requires that the tag GENERATE_LATEX is set to YES.\n\nLATEX_EMOJI_DIRECTORY  =\n\n#---------------------------------------------------------------------------\n# Configuration options related to the RTF output\n#---------------------------------------------------------------------------\n\n# If the GENERATE_RTF tag is set to YES, doxygen will generate RTF output. The\n# RTF output is optimized for Word 97 and may not look too pretty with other RTF\n# readers/editors.\n# The default value is: NO.\n\nGENERATE_RTF           = NO\n\n# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. If a\n# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of\n# it.\n# The default directory is: rtf.\n# This tag requires that the tag GENERATE_RTF is set to YES.\n\nRTF_OUTPUT             = rtf\n\n# If the COMPACT_RTF tag is set to YES, doxygen generates more compact RTF\n# documents. This may be useful for small projects and may help to save some\n# trees in general.\n# The default value is: NO.\n# This tag requires that the tag GENERATE_RTF is set to YES.\n\nCOMPACT_RTF            = NO\n\n# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated will\n# contain hyperlink fields. The RTF file will contain links (just like the HTML\n# output) instead of page references. This makes the output suitable for online\n# browsing using Word or some other Word compatible readers that support those\n# fields.\n#\n# Note: WordPad (write) and others do not support links.\n# The default value is: NO.\n# This tag requires that the tag GENERATE_RTF is set to YES.\n\nRTF_HYPERLINKS         = NO\n\n# Load stylesheet definitions from file. Syntax is similar to doxygen's\n# configuration file, i.e. a series of assignments. You only have to provide\n# replacements, missing definitions are set to their default value.\n#\n# See also section \"Doxygen usage\" for information on how to generate the\n# default style sheet that doxygen normally uses.\n# This tag requires that the tag GENERATE_RTF is set to YES.\n\nRTF_STYLESHEET_FILE    =\n\n# Set optional variables used in the generation of an RTF document. Syntax is\n# similar to doxygen's configuration file. A template extensions file can be\n# generated using doxygen -e rtf extensionFile.\n# This tag requires that the tag GENERATE_RTF is set to YES.\n\nRTF_EXTENSIONS_FILE    =\n\n#---------------------------------------------------------------------------\n# Configuration options related to the man page output\n#---------------------------------------------------------------------------\n\n# If the GENERATE_MAN tag is set to YES, doxygen will generate man pages for\n# classes and files.\n# The default value is: NO.\n\nGENERATE_MAN           = NO\n\n# The MAN_OUTPUT tag is used to specify where the man pages will be put. If a\n# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of\n# it. A directory man3 will be created inside the directory specified by\n# MAN_OUTPUT.\n# The default directory is: man.\n# This tag requires that the tag GENERATE_MAN is set to YES.\n\nMAN_OUTPUT             = man\n\n# The MAN_EXTENSION tag determines the extension that is added to the generated\n# man pages. In case the manual section does not start with a number, the number\n# 3 is prepended. The dot (.) at the beginning of the MAN_EXTENSION tag is\n# optional.\n# The default value is: .3.\n# This tag requires that the tag GENERATE_MAN is set to YES.\n\nMAN_EXTENSION          = .3\n\n# The MAN_SUBDIR tag determines the name of the directory created within\n# MAN_OUTPUT in which the man pages are placed. If defaults to man followed by\n# MAN_EXTENSION with the initial . removed.\n# This tag requires that the tag GENERATE_MAN is set to YES.\n\nMAN_SUBDIR             =\n\n# If the MAN_LINKS tag is set to YES and doxygen generates man output, then it\n# will generate one additional man file for each entity documented in the real\n# man page(s). These additional files only source the real man page, but without\n# them the man command would be unable to find the correct page.\n# The default value is: NO.\n# This tag requires that the tag GENERATE_MAN is set to YES.\n\nMAN_LINKS              = NO\n\n#---------------------------------------------------------------------------\n# Configuration options related to the XML output\n#---------------------------------------------------------------------------\n\n# If the GENERATE_XML tag is set to YES, doxygen will generate an XML file that\n# captures the structure of the code including all documentation.\n# The default value is: NO.\n\nGENERATE_XML           = NO\n\n# The XML_OUTPUT tag is used to specify where the XML pages will be put. If a\n# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of\n# it.\n# The default directory is: xml.\n# This tag requires that the tag GENERATE_XML is set to YES.\n\nXML_OUTPUT             = xml\n\n# If the XML_PROGRAMLISTING tag is set to YES, doxygen will dump the program\n# listings (including syntax highlighting and cross-referencing information) to\n# the XML output. Note that enabling this will significantly increase the size\n# of the XML output.\n# The default value is: YES.\n# This tag requires that the tag GENERATE_XML is set to YES.\n\nXML_PROGRAMLISTING     = YES\n\n# If the XML_NS_MEMB_FILE_SCOPE tag is set to YES, doxygen will include\n# namespace members in file scope as well, matching the HTML output.\n# The default value is: NO.\n# This tag requires that the tag GENERATE_XML is set to YES.\n\nXML_NS_MEMB_FILE_SCOPE = NO\n\n#---------------------------------------------------------------------------\n# Configuration options related to the DOCBOOK output\n#---------------------------------------------------------------------------\n\n# If the GENERATE_DOCBOOK tag is set to YES, doxygen will generate Docbook files\n# that can be used to generate PDF.\n# The default value is: NO.\n\nGENERATE_DOCBOOK       = NO\n\n# The DOCBOOK_OUTPUT tag is used to specify where the Docbook pages will be put.\n# If a relative path is entered the value of OUTPUT_DIRECTORY will be put in\n# front of it.\n# The default directory is: docbook.\n# This tag requires that the tag GENERATE_DOCBOOK is set to YES.\n\nDOCBOOK_OUTPUT         = docbook\n\n#---------------------------------------------------------------------------\n# Configuration options for the AutoGen Definitions output\n#---------------------------------------------------------------------------\n\n# If the GENERATE_AUTOGEN_DEF tag is set to YES, doxygen will generate an\n# AutoGen Definitions (see https://autogen.sourceforge.net/) file that captures\n# the structure of the code including all documentation. Note that this feature\n# is still experimental and incomplete at the moment.\n# The default value is: NO.\n\nGENERATE_AUTOGEN_DEF   = NO\n\n#---------------------------------------------------------------------------\n# Configuration options related to Sqlite3 output\n#---------------------------------------------------------------------------\n\n# If the GENERATE_SQLITE3 tag is set to YES doxygen will generate a Sqlite3\n# database with symbols found by doxygen stored in tables.\n# The default value is: NO.\n\nGENERATE_SQLITE3       = NO\n\n# The SQLITE3_OUTPUT tag is used to specify where the Sqlite3 database will be\n# put. If a relative path is entered the value of OUTPUT_DIRECTORY will be put\n# in front of it.\n# The default directory is: sqlite3.\n# This tag requires that the tag GENERATE_SQLITE3 is set to YES.\n\nSQLITE3_OUTPUT         = sqlite3\n\n# The SQLITE3_OVERWRITE_DB tag is set to YES, the existing doxygen_sqlite3.db\n# database file will be recreated with each doxygen run. If set to NO, doxygen\n# will warn if an a database file is already found and not modify it.\n# The default value is: YES.\n# This tag requires that the tag GENERATE_SQLITE3 is set to YES.\n\nSQLITE3_RECREATE_DB    = YES\n\n#---------------------------------------------------------------------------\n# Configuration options related to the Perl module output\n#---------------------------------------------------------------------------\n\n# If the GENERATE_PERLMOD tag is set to YES, doxygen will generate a Perl module\n# file that captures the structure of the code including all documentation.\n#\n# Note that this feature is still experimental and incomplete at the moment.\n# The default value is: NO.\n\nGENERATE_PERLMOD       = NO\n\n# If the PERLMOD_LATEX tag is set to YES, doxygen will generate the necessary\n# Makefile rules, Perl scripts and LaTeX code to be able to generate PDF and DVI\n# output from the Perl module output.\n# The default value is: NO.\n# This tag requires that the tag GENERATE_PERLMOD is set to YES.\n\nPERLMOD_LATEX          = NO\n\n# If the PERLMOD_PRETTY tag is set to YES, the Perl module output will be nicely\n# formatted so it can be parsed by a human reader. This is useful if you want to\n# understand what is going on. On the other hand, if this tag is set to NO, the\n# size of the Perl module output will be much smaller and Perl will parse it\n# just the same.\n# The default value is: YES.\n# This tag requires that the tag GENERATE_PERLMOD is set to YES.\n\nPERLMOD_PRETTY         = YES\n\n# The names of the make variables in the generated doxyrules.make file are\n# prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. This is useful\n# so different doxyrules.make files included by the same Makefile don't\n# overwrite each other's variables.\n# This tag requires that the tag GENERATE_PERLMOD is set to YES.\n\nPERLMOD_MAKEVAR_PREFIX =\n\n#---------------------------------------------------------------------------\n# Configuration options related to the preprocessor\n#---------------------------------------------------------------------------\n\n# If the ENABLE_PREPROCESSING tag is set to YES, doxygen will evaluate all\n# C-preprocessor directives found in the sources and include files.\n# The default value is: YES.\n\nENABLE_PREPROCESSING   = YES\n\n# If the MACRO_EXPANSION tag is set to YES, doxygen will expand all macro names\n# in the source code. If set to NO, only conditional compilation will be\n# performed. Macro expansion can be done in a controlled way by setting\n# EXPAND_ONLY_PREDEF to YES.\n# The default value is: NO.\n# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.\n\nMACRO_EXPANSION        = NO\n\n# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES then\n# the macro expansion is limited to the macros specified with the PREDEFINED and\n# EXPAND_AS_DEFINED tags.\n# The default value is: NO.\n# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.\n\nEXPAND_ONLY_PREDEF     = NO\n\n# If the SEARCH_INCLUDES tag is set to YES, the include files in the\n# INCLUDE_PATH will be searched if a #include is found.\n# The default value is: YES.\n# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.\n\nSEARCH_INCLUDES        = YES\n\n# The INCLUDE_PATH tag can be used to specify one or more directories that\n# contain include files that are not input files but should be processed by the\n# preprocessor. Note that the INCLUDE_PATH is not recursive, so the setting of\n# RECURSIVE has no effect here.\n# This tag requires that the tag SEARCH_INCLUDES is set to YES.\n\nINCLUDE_PATH           =\n\n# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard\n# patterns (like *.h and *.hpp) to filter out the header-files in the\n# directories. If left blank, the patterns specified with FILE_PATTERNS will be\n# used.\n# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.\n\nINCLUDE_FILE_PATTERNS  =\n\n# The PREDEFINED tag can be used to specify one or more macro names that are\n# defined before the preprocessor is started (similar to the -D option of e.g.\n# gcc). The argument of the tag is a list of macros of the form: name or\n# name=definition (no spaces). If the definition and the \"=\" are omitted, \"=1\"\n# is assumed. To prevent a macro definition from being undefined via #undef or\n# recursively expanded use the := operator instead of the = operator.\n# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.\n\nPREDEFINED             =\n\n# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then this\n# tag can be used to specify a list of macro names that should be expanded. The\n# macro definition that is found in the sources will be used. Use the PREDEFINED\n# tag if you want to use a different macro definition that overrules the\n# definition found in the source code.\n# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.\n\nEXPAND_AS_DEFINED      =\n\n# If the SKIP_FUNCTION_MACROS tag is set to YES then doxygen's preprocessor will\n# remove all references to function-like macros that are alone on a line, have\n# an all uppercase name, and do not end with a semicolon. Such function macros\n# are typically used for boiler-plate code, and will confuse the parser if not\n# removed.\n# The default value is: YES.\n# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.\n\nSKIP_FUNCTION_MACROS   = YES\n\n#---------------------------------------------------------------------------\n# Configuration options related to external references\n#---------------------------------------------------------------------------\n\n# The TAGFILES tag can be used to specify one or more tag files. For each tag\n# file the location of the external documentation should be added. The format of\n# a tag file without this location is as follows:\n# TAGFILES = file1 file2 ...\n# Adding location for the tag files is done as follows:\n# TAGFILES = file1=loc1 \"file2 = loc2\" ...\n# where loc1 and loc2 can be relative or absolute paths or URLs. See the\n# section \"Linking to external documentation\" for more information about the use\n# of tag files.\n# Note: Each tag file must have a unique name (where the name does NOT include\n# the path). If a tag file is not located in the directory in which doxygen is\n# run, you must also specify the path to the tagfile here.\n\nTAGFILES               =\n\n# When a file name is specified after GENERATE_TAGFILE, doxygen will create a\n# tag file that is based on the input files it reads. See section \"Linking to\n# external documentation\" for more information about the usage of tag files.\n\nGENERATE_TAGFILE       =\n\n# If the ALLEXTERNALS tag is set to YES, all external classes and namespaces\n# will be listed in the class and namespace index. If set to NO, only the\n# inherited external classes will be listed.\n# The default value is: NO.\n\nALLEXTERNALS           = NO\n\n# If the EXTERNAL_GROUPS tag is set to YES, all external groups will be listed\n# in the topic index. If set to NO, only the current project's groups will be\n# listed.\n# The default value is: YES.\n\nEXTERNAL_GROUPS        = YES\n\n# If the EXTERNAL_PAGES tag is set to YES, all external pages will be listed in\n# the related pages index. If set to NO, only the current project's pages will\n# be listed.\n# The default value is: YES.\n\nEXTERNAL_PAGES         = YES\n\n#---------------------------------------------------------------------------\n# Configuration options related to diagram generator tools\n#---------------------------------------------------------------------------\n\n# If set to YES the inheritance and collaboration graphs will hide inheritance\n# and usage relations if the target is undocumented or is not a class.\n# The default value is: YES.\n\nHIDE_UNDOC_RELATIONS   = NO\n\n# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is\n# available from the path. This tool is part of Graphviz (see:\n# https://www.graphviz.org/), a graph visualization toolkit from AT&T and Lucent\n# Bell Labs. The other options in this section have no effect if this option is\n# set to NO\n# The default value is: NO.\n\nHAVE_DOT               = YES\n\n# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is allowed\n# to run in parallel. When set to 0 doxygen will base this on the number of\n# processors available in the system. You can set it explicitly to a value\n# larger than 0 to get control over the balance between CPU load and processing\n# speed.\n# Minimum value: 0, maximum value: 32, default value: 0.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nDOT_NUM_THREADS        = 0\n\n# DOT_COMMON_ATTR is common attributes for nodes, edges and labels of\n# subgraphs. When you want a differently looking font in the dot files that\n# doxygen generates you can specify fontname, fontcolor and fontsize attributes.\n# For details please see <a href=https://graphviz.org/doc/info/attrs.html>Node,\n# Edge and Graph Attributes specification</a> You need to make sure dot is able\n# to find the font, which can be done by putting it in a standard location or by\n# setting the DOTFONTPATH environment variable or by setting DOT_FONTPATH to the\n# directory containing the font. Default graphviz fontsize is 14.\n# The default value is: fontname=Helvetica,fontsize=10.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nDOT_COMMON_ATTR        = \"fontname=Helvetica,fontsize=10\"\n\n# DOT_EDGE_ATTR is concatenated with DOT_COMMON_ATTR. For elegant style you can\n# add 'arrowhead=open, arrowtail=open, arrowsize=0.5'. <a\n# href=https://graphviz.org/doc/info/arrows.html>Complete documentation about\n# arrows shapes.</a>\n# The default value is: labelfontname=Helvetica,labelfontsize=10.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nDOT_EDGE_ATTR          = \"labelfontname=Helvetica,labelfontsize=10\"\n\n# DOT_NODE_ATTR is concatenated with DOT_COMMON_ATTR. For view without boxes\n# around nodes set 'shape=plain' or 'shape=plaintext' <a\n# href=https://www.graphviz.org/doc/info/shapes.html>Shapes specification</a>\n# The default value is: shape=box,height=0.2,width=0.4.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nDOT_NODE_ATTR          = \"shape=box,height=0.2,width=0.4\"\n\n# You can set the path where dot can find font specified with fontname in\n# DOT_COMMON_ATTR and others dot attributes.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nDOT_FONTPATH           =\n\n# If the CLASS_GRAPH tag is set to YES or GRAPH or BUILTIN then doxygen will\n# generate a graph for each documented class showing the direct and indirect\n# inheritance relations. In case the CLASS_GRAPH tag is set to YES or GRAPH and\n# HAVE_DOT is enabled as well, then dot will be used to draw the graph. In case\n# the CLASS_GRAPH tag is set to YES and HAVE_DOT is disabled or if the\n# CLASS_GRAPH tag is set to BUILTIN, then the built-in generator will be used.\n# If the CLASS_GRAPH tag is set to TEXT the direct and indirect inheritance\n# relations will be shown as texts / links.\n# Possible values are: NO, YES, TEXT, GRAPH and BUILTIN.\n# The default value is: YES.\n\nCLASS_GRAPH            = YES\n\n# If the COLLABORATION_GRAPH tag is set to YES then doxygen will generate a\n# graph for each documented class showing the direct and indirect implementation\n# dependencies (inheritance, containment, and class references variables) of the\n# class with other documented classes. Explicit enabling a collaboration graph,\n# when COLLABORATION_GRAPH is set to NO, can be accomplished by means of the\n# command \\collaborationgraph. Disabling a collaboration graph can be\n# accomplished by means of the command \\hidecollaborationgraph.\n# The default value is: YES.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nCOLLABORATION_GRAPH    = YES\n\n# If the GROUP_GRAPHS tag is set to YES then doxygen will generate a graph for\n# groups, showing the direct groups dependencies. Explicit enabling a group\n# dependency graph, when GROUP_GRAPHS is set to NO, can be accomplished by means\n# of the command \\groupgraph. Disabling a directory graph can be accomplished by\n# means of the command \\hidegroupgraph. See also the chapter Grouping in the\n# manual.\n# The default value is: YES.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nGROUP_GRAPHS           = YES\n\n# If the UML_LOOK tag is set to YES, doxygen will generate inheritance and\n# collaboration diagrams in a style similar to the OMG's Unified Modeling\n# Language.\n# The default value is: NO.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nUML_LOOK               = YES\n\n# If the UML_LOOK tag is enabled, the fields and methods are shown inside the\n# class node. If there are many fields or methods and many nodes the graph may\n# become too big to be useful. The UML_LIMIT_NUM_FIELDS threshold limits the\n# number of items for each type to make the size more manageable. Set this to 0\n# for no limit. Note that the threshold may be exceeded by 50% before the limit\n# is enforced. So when you set the threshold to 10, up to 15 fields may appear,\n# but if the number exceeds 15, the total amount of fields shown is limited to\n# 10.\n# Minimum value: 0, maximum value: 100, default value: 10.\n# This tag requires that the tag UML_LOOK is set to YES.\n\nUML_LIMIT_NUM_FIELDS   = 10\n\n# If the DOT_UML_DETAILS tag is set to NO, doxygen will show attributes and\n# methods without types and arguments in the UML graphs. If the DOT_UML_DETAILS\n# tag is set to YES, doxygen will add type and arguments for attributes and\n# methods in the UML graphs. If the DOT_UML_DETAILS tag is set to NONE, doxygen\n# will not generate fields with class member information in the UML graphs. The\n# class diagrams will look similar to the default class diagrams but using UML\n# notation for the relationships.\n# Possible values are: NO, YES and NONE.\n# The default value is: NO.\n# This tag requires that the tag UML_LOOK is set to YES.\n\nDOT_UML_DETAILS        = NO\n\n# The DOT_WRAP_THRESHOLD tag can be used to set the maximum number of characters\n# to display on a single line. If the actual line length exceeds this threshold\n# significantly it will wrapped across multiple lines. Some heuristics are apply\n# to avoid ugly line breaks.\n# Minimum value: 0, maximum value: 1000, default value: 17.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nDOT_WRAP_THRESHOLD     = 17\n\n# If the TEMPLATE_RELATIONS tag is set to YES then the inheritance and\n# collaboration graphs will show the relations between templates and their\n# instances.\n# The default value is: NO.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nTEMPLATE_RELATIONS     = YES\n\n# If the INCLUDE_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are set to\n# YES then doxygen will generate a graph for each documented file showing the\n# direct and indirect include dependencies of the file with other documented\n# files. Explicit enabling an include graph, when INCLUDE_GRAPH is is set to NO,\n# can be accomplished by means of the command \\includegraph. Disabling an\n# include graph can be accomplished by means of the command \\hideincludegraph.\n# The default value is: YES.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nINCLUDE_GRAPH          = YES\n\n# If the INCLUDED_BY_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are\n# set to YES then doxygen will generate a graph for each documented file showing\n# the direct and indirect include dependencies of the file with other documented\n# files. Explicit enabling an included by graph, when INCLUDED_BY_GRAPH is set\n# to NO, can be accomplished by means of the command \\includedbygraph. Disabling\n# an included by graph can be accomplished by means of the command\n# \\hideincludedbygraph.\n# The default value is: YES.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nINCLUDED_BY_GRAPH      = YES\n\n# If the CALL_GRAPH tag is set to YES then doxygen will generate a call\n# dependency graph for every global function or class method.\n#\n# Note that enabling this option will significantly increase the time of a run.\n# So in most cases it will be better to enable call graphs for selected\n# functions only using the \\callgraph command. Disabling a call graph can be\n# accomplished by means of the command \\hidecallgraph.\n# The default value is: NO.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nCALL_GRAPH             = YES\n\n# If the CALLER_GRAPH tag is set to YES then doxygen will generate a caller\n# dependency graph for every global function or class method.\n#\n# Note that enabling this option will significantly increase the time of a run.\n# So in most cases it will be better to enable caller graphs for selected\n# functions only using the \\callergraph command. Disabling a caller graph can be\n# accomplished by means of the command \\hidecallergraph.\n# The default value is: NO.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nCALLER_GRAPH           = YES\n\n# If the GRAPHICAL_HIERARCHY tag is set to YES then doxygen will graphical\n# hierarchy of all classes instead of a textual one.\n# The default value is: YES.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nGRAPHICAL_HIERARCHY    = YES\n\n# If the DIRECTORY_GRAPH tag is set to YES then doxygen will show the\n# dependencies a directory has on other directories in a graphical way. The\n# dependency relations are determined by the #include relations between the\n# files in the directories. Explicit enabling a directory graph, when\n# DIRECTORY_GRAPH is set to NO, can be accomplished by means of the command\n# \\directorygraph. Disabling a directory graph can be accomplished by means of\n# the command \\hidedirectorygraph.\n# The default value is: YES.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nDIRECTORY_GRAPH        = YES\n\n# The DIR_GRAPH_MAX_DEPTH tag can be used to limit the maximum number of levels\n# of child directories generated in directory dependency graphs by dot.\n# Minimum value: 1, maximum value: 25, default value: 1.\n# This tag requires that the tag DIRECTORY_GRAPH is set to YES.\n\nDIR_GRAPH_MAX_DEPTH    = 1\n\n# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images\n# generated by dot. For an explanation of the image formats see the section\n# output formats in the documentation of the dot tool (Graphviz (see:\n# https://www.graphviz.org/)).\n# Note: If you choose svg you need to set HTML_FILE_EXTENSION to xhtml in order\n# to make the SVG files visible in IE 9+ (other browsers do not have this\n# requirement).\n# Possible values are: png, jpg, gif, svg, png:gd, png:gd:gd, png:cairo,\n# png:cairo:gd, png:cairo:cairo, png:cairo:gdiplus, png:gdiplus and\n# png:gdiplus:gdiplus.\n# The default value is: png.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nDOT_IMAGE_FORMAT       = png\n\n# If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to\n# enable generation of interactive SVG images that allow zooming and panning.\n#\n# Note that this requires a modern browser other than Internet Explorer. Tested\n# and working are Firefox, Chrome, Safari, and Opera.\n# Note: For IE 9+ you need to set HTML_FILE_EXTENSION to xhtml in order to make\n# the SVG files visible. Older versions of IE do not have SVG support.\n# The default value is: NO.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nINTERACTIVE_SVG        = NO\n\n# The DOT_PATH tag can be used to specify the path where the dot tool can be\n# found. If left blank, it is assumed the dot tool can be found in the path.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nDOT_PATH               =\n\n# The DOTFILE_DIRS tag can be used to specify one or more directories that\n# contain dot files that are included in the documentation (see the \\dotfile\n# command).\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nDOTFILE_DIRS           =\n\n# You can include diagrams made with dia in doxygen documentation. Doxygen will\n# then run dia to produce the diagram and insert it in the documentation. The\n# DIA_PATH tag allows you to specify the directory where the dia binary resides.\n# If left empty dia is assumed to be found in the default search path.\n\nDIA_PATH               =\n\n# The DIAFILE_DIRS tag can be used to specify one or more directories that\n# contain dia files that are included in the documentation (see the \\diafile\n# command).\n\nDIAFILE_DIRS           =\n\n# When using plantuml, the PLANTUML_JAR_PATH tag should be used to specify the\n# path where java can find the plantuml.jar file or to the filename of jar file\n# to be used. If left blank, it is assumed PlantUML is not used or called during\n# a preprocessing step. Doxygen will generate a warning when it encounters a\n# \\startuml command in this case and will not generate output for the diagram.\n\nPLANTUML_JAR_PATH      =\n\n# When using plantuml, the PLANTUML_CFG_FILE tag can be used to specify a\n# configuration file for plantuml.\n\nPLANTUML_CFG_FILE      =\n\n# When using plantuml, the specified paths are searched for files specified by\n# the !include statement in a plantuml block.\n\nPLANTUML_INCLUDE_PATH  =\n\n# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of nodes\n# that will be shown in the graph. If the number of nodes in a graph becomes\n# larger than this value, doxygen will truncate the graph, which is visualized\n# by representing a node as a red box. Note that doxygen if the number of direct\n# children of the root node in a graph is already larger than\n# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note that\n# the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.\n# Minimum value: 0, maximum value: 10000, default value: 50.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nDOT_GRAPH_MAX_NODES    = 1000\n\n# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the graphs\n# generated by dot. A depth value of 3 means that only nodes reachable from the\n# root by following a path via at most 3 edges will be shown. Nodes that lay\n# further from the root node will be omitted. Note that setting this option to 1\n# or 2 may greatly reduce the computation time needed for large code bases. Also\n# note that the size of a graph can be further restricted by\n# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.\n# Minimum value: 0, maximum value: 1000, default value: 0.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nMAX_DOT_GRAPH_DEPTH    = 50\n\n# Set the DOT_MULTI_TARGETS tag to YES to allow dot to generate multiple output\n# files in one run (i.e. multiple -o and -T options on the command line). This\n# makes dot run faster, but since only newer versions of dot (>1.8.10) support\n# this, this feature is disabled by default.\n# The default value is: NO.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nDOT_MULTI_TARGETS      = YES\n\n# If the GENERATE_LEGEND tag is set to YES doxygen will generate a legend page\n# explaining the meaning of the various boxes and arrows in the dot generated\n# graphs.\n# Note: This tag requires that UML_LOOK isn't set, i.e. the doxygen internal\n# graphical representation for inheritance and collaboration diagrams is used.\n# The default value is: YES.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nGENERATE_LEGEND        = YES\n\n# If the DOT_CLEANUP tag is set to YES, doxygen will remove the intermediate\n# files that are used to generate the various graphs.\n#\n# Note: This setting is not only used for dot files but also for msc temporary\n# files.\n# The default value is: YES.\n\nDOT_CLEANUP            = NO\n\n# You can define message sequence charts within doxygen comments using the \\msc\n# command. If the MSCGEN_TOOL tag is left empty (the default), then doxygen will\n# use a built-in version of mscgen tool to produce the charts. Alternatively,\n# the MSCGEN_TOOL tag can also specify the name an external tool. For instance,\n# specifying prog as the value, doxygen will call the tool as prog -T\n# <outfile_format> -o <outputfile> <inputfile>. The external tool should support\n# output file formats \"png\", \"eps\", \"svg\", and \"ismap\".\n\nMSCGEN_TOOL            =\n\n# The MSCFILE_DIRS tag can be used to specify one or more directories that\n# contain msc files that are included in the documentation (see the \\mscfile\n# command).\n\nMSCFILE_DIRS           =\n"
  },
  {
    "path": "cola/INSTALL",
    "content": "from svn\nautoreconf\n./configure\nmake\nmake install\n"
  },
  {
    "path": "cola/LICENSE",
    "content": "                  GNU LESSER GENERAL PUBLIC LICENSE\n                       Version 2.1, February 1999\n\n Copyright (C) 1991, 1999 Free Software Foundation, Inc.\n     59 Temple Place, Suite 330, Boston, MA  02111-1307  USA\n Everyone is permitted to copy and distribute verbatim copies\n of this license document, but changing it is not allowed.\n\n[This is the first released version of the Lesser GPL.  It also counts\n as the successor of the GNU Library Public License, version 2, hence\n the version number 2.1.]\n\n                            Preamble\n\n  The licenses for most software are designed to take away your\nfreedom to share and change it.  By contrast, the GNU General Public\nLicenses are intended to guarantee your freedom to share and change\nfree software--to make sure the software is free for all its users.\n\n  This license, the Lesser General Public License, applies to some\nspecially designated software packages--typically libraries--of the\nFree Software Foundation and other authors who decide to use it.  You\ncan use it too, but we suggest you first think carefully about whether\nthis license or the ordinary General Public License is the better\nstrategy to use in any particular case, based on the explanations below.\n\n  When we speak of free software, we are referring to freedom of use,\nnot price.  Our General Public Licenses are designed to make sure that\nyou have the freedom to distribute copies of free software (and charge\nfor this service if you wish); that you receive source code or can get\nit if you want it; that you can change the software and use pieces of\nit in new free programs; and that you are informed that you can do\nthese things.\n\n  To protect your rights, we need to make restrictions that forbid\ndistributors to deny you these rights or to ask you to surrender these\nrights.  These restrictions translate to certain responsibilities for\nyou if you distribute copies of the library or if you modify it.\n\n  For example, if you distribute copies of the library, whether gratis\nor for a fee, you must give the recipients all the rights that we gave\nyou.  You must make sure that they, too, receive or can get the source\ncode.  If you link other code with the library, you must provide\ncomplete object files to the recipients, so that they can relink them\nwith the library after making changes to the library and recompiling\nit.  And you must show them these terms so they know their rights.\n\n  We protect your rights with a two-step method: (1) we copyright the\nlibrary, and (2) we offer you this license, which gives you legal\npermission to copy, distribute and/or modify the library.\n\n  To protect each distributor, we want to make it very clear that\nthere is no warranty for the free library.  Also, if the library is\nmodified by someone else and passed on, the recipients should know\nthat what they have is not the original version, so that the original\nauthor's reputation will not be affected by problems that might be\nintroduced by others.\n\n  Finally, software patents pose a constant threat to the existence of\nany free program.  We wish to make sure that a company cannot\neffectively restrict the users of a free program by obtaining a\nrestrictive license from a patent holder.  Therefore, we insist that\nany patent license obtained for a version of the library must be\nconsistent with the full freedom of use specified in this license.\n\n  Most GNU software, including some libraries, is covered by the\nordinary GNU General Public License.  This license, the GNU Lesser\nGeneral Public License, applies to certain designated libraries, and\nis quite different from the ordinary General Public License.  We use\nthis license for certain libraries in order to permit linking those\nlibraries into non-free programs.\n\n  When a program is linked with a library, whether statically or using\na shared library, the combination of the two is legally speaking a\ncombined work, a derivative of the original library.  The ordinary\nGeneral Public License therefore permits such linking only if the\nentire combination fits its criteria of freedom.  The Lesser General\nPublic License permits more lax criteria for linking other code with\nthe library.\n\n  We call this license the \"Lesser\" General Public License because it\ndoes Less to protect the user's freedom than the ordinary General\nPublic License.  It also provides other free software developers Less\nof an advantage over competing non-free programs.  These disadvantages\nare the reason we use the ordinary General Public License for many\nlibraries.  However, the Lesser license provides advantages in certain\nspecial circumstances.\n\n  For example, on rare occasions, there may be a special need to\nencourage the widest possible use of a certain library, so that it becomes\na de-facto standard.  To achieve this, non-free programs must be\nallowed to use the library.  A more frequent case is that a free\nlibrary does the same job as widely used non-free libraries.  In this\ncase, there is little to gain by limiting the free library to free\nsoftware only, so we use the Lesser General Public License.\n\n  In other cases, permission to use a particular library in non-free\nprograms enables a greater number of people to use a large body of\nfree software.  For example, permission to use the GNU C Library in\nnon-free programs enables many more people to use the whole GNU\noperating system, as well as its variant, the GNU/Linux operating\nsystem.\n\n  Although the Lesser General Public License is Less protective of the\nusers' freedom, it does ensure that the user of a program that is\nlinked with the Library has the freedom and the wherewithal to run\nthat program using a modified version of the Library.\n\n  The precise terms and conditions for copying, distribution and\nmodification follow.  Pay close attention to the difference between a\n\"work based on the library\" and a \"work that uses the library\".  The\nformer contains code derived from the library, whereas the latter must\nbe combined with the library in order to run.\n\n                  GNU LESSER GENERAL PUBLIC LICENSE\n   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION\n\n  0. This License Agreement applies to any software library or other\nprogram which contains a notice placed by the copyright holder or\nother authorized party saying it may be distributed under the terms of\nthis Lesser General Public License (also called \"this License\").\nEach licensee is addressed as \"you\".\n\n  A \"library\" means a collection of software functions and/or data\nprepared so as to be conveniently linked with application programs\n(which use some of those functions and data) to form executables.\n\n  The \"Library\", below, refers to any such software library or work\nwhich has been distributed under these terms.  A \"work based on the\nLibrary\" means either the Library or any derivative work under\ncopyright law: that is to say, a work containing the Library or a\nportion of it, either verbatim or with modifications and/or translated\nstraightforwardly into another language.  (Hereinafter, translation is\nincluded without limitation in the term \"modification\".)\n\n  \"Source code\" for a work means the preferred form of the work for\nmaking modifications to it.  For a library, complete source code means\nall the source code for all modules it contains, plus any associated\ninterface definition files, plus the scripts used to control compilation\nand installation of the library.\n\n  Activities other than copying, distribution and modification are not\ncovered by this License; they are outside its scope.  The act of\nrunning a program using the Library is not restricted, and output from\nsuch a program is covered only if its contents constitute a work based\non the Library (independent of the use of the Library in a tool for\nwriting it).  Whether that is true depends on what the Library does\nand what the program that uses the Library does.\n\n  1. You may copy and distribute verbatim copies of the Library's\ncomplete source code as you receive it, in any medium, provided that\nyou conspicuously and appropriately publish on each copy an\nappropriate copyright notice and disclaimer of warranty; keep intact\nall the notices that refer to this License and to the absence of any\nwarranty; and distribute a copy of this License along with the\nLibrary.\n\n  You may charge a fee for the physical act of transferring a copy,\nand you may at your option offer warranty protection in exchange for a\nfee.\n\n  2. You may modify your copy or copies of the Library or any portion\nof it, thus forming a work based on the Library, and copy and\ndistribute such modifications or work under the terms of Section 1\nabove, provided that you also meet all of these conditions:\n\n    a) The modified work must itself be a software library.\n\n    b) You must cause the files modified to carry prominent notices\n    stating that you changed the files and the date of any change.\n\n    c) You must cause the whole of the work to be licensed at no\n    charge to all third parties under the terms of this License.\n\n    d) If a facility in the modified Library refers to a function or a\n    table of data to be supplied by an application program that uses\n    the facility, other than as an argument passed when the facility\n    is invoked, then you must make a good faith effort to ensure that,\n    in the event an application does not supply such function or\n    table, the facility still operates, and performs whatever part of\n    its purpose remains meaningful.\n\n    (For example, a function in a library to compute square roots has\n    a purpose that is entirely well-defined independent of the\n    application.  Therefore, Subsection 2d requires that any\n    application-supplied function or table used by this function must\n    be optional: if the application does not supply it, the square\n    root function must still compute square roots.)\n\nThese requirements apply to the modified work as a whole.  If\nidentifiable sections of that work are not derived from the Library,\nand can be reasonably considered independent and separate works in\nthemselves, then this License, and its terms, do not apply to those\nsections when you distribute them as separate works.  But when you\ndistribute the same sections as part of a whole which is a work based\non the Library, the distribution of the whole must be on the terms of\nthis License, whose permissions for other licensees extend to the\nentire whole, and thus to each and every part regardless of who wrote\nit.\n\nThus, it is not the intent of this section to claim rights or contest\nyour rights to work written entirely by you; rather, the intent is to\nexercise the right to control the distribution of derivative or\ncollective works based on the Library.\n\nIn addition, mere aggregation of another work not based on the Library\nwith the Library (or with a work based on the Library) on a volume of\na storage or distribution medium does not bring the other work under\nthe scope of this License.\n\n  3. You may opt to apply the terms of the ordinary GNU General Public\nLicense instead of this License to a given copy of the Library.  To do\nthis, you must alter all the notices that refer to this License, so\nthat they refer to the ordinary GNU General Public License, version 2,\ninstead of to this License.  (If a newer version than version 2 of the\nordinary GNU General Public License has appeared, then you can specify\nthat version instead if you wish.)  Do not make any other change in\nthese notices.\n\n  Once this change is made in a given copy, it is irreversible for\nthat copy, so the ordinary GNU General Public License applies to all\nsubsequent copies and derivative works made from that copy.\n\n  This option is useful when you wish to copy part of the code of\nthe Library into a program that is not a library.\n\n  4. You may copy and distribute the Library (or a portion or\nderivative of it, under Section 2) in object code or executable form\nunder the terms of Sections 1 and 2 above provided that you accompany\nit with the complete corresponding machine-readable source code, which\nmust be distributed under the terms of Sections 1 and 2 above on a\nmedium customarily used for software interchange.\n\n  If distribution of object code is made by offering access to copy\nfrom a designated place, then offering equivalent access to copy the\nsource code from the same place satisfies the requirement to\ndistribute the source code, even though third parties are not\ncompelled to copy the source along with the object code.\n\n  5. A program that contains no derivative of any portion of the\nLibrary, but is designed to work with the Library by being compiled or\nlinked with it, is called a \"work that uses the Library\".  Such a\nwork, in isolation, is not a derivative work of the Library, and\ntherefore falls outside the scope of this License.\n\n  However, linking a \"work that uses the Library\" with the Library\ncreates an executable that is a derivative of the Library (because it\ncontains portions of the Library), rather than a \"work that uses the\nlibrary\".  The executable is therefore covered by this License.\nSection 6 states terms for distribution of such executables.\n\n  When a \"work that uses the Library\" uses material from a header file\nthat is part of the Library, the object code for the work may be a\nderivative work of the Library even though the source code is not.\nWhether this is true is especially significant if the work can be\nlinked without the Library, or if the work is itself a library.  The\nthreshold for this to be true is not precisely defined by law.\n\n  If such an object file uses only numerical parameters, data\nstructure layouts and accessors, and small macros and small inline\nfunctions (ten lines or less in length), then the use of the object\nfile is unrestricted, regardless of whether it is legally a derivative\nwork.  (Executables containing this object code plus portions of the\nLibrary will still fall under Section 6.)\n\n  Otherwise, if the work is a derivative of the Library, you may\ndistribute the object code for the work under the terms of Section 6.\nAny executables containing that work also fall under Section 6,\nwhether or not they are linked directly with the Library itself.\n\n  6. As an exception to the Sections above, you may also combine or\nlink a \"work that uses the Library\" with the Library to produce a\nwork containing portions of the Library, and distribute that work\nunder terms of your choice, provided that the terms permit\nmodification of the work for the customer's own use and reverse\nengineering for debugging such modifications.\n\n  You must give prominent notice with each copy of the work that the\nLibrary is used in it and that the Library and its use are covered by\nthis License.  You must supply a copy of this License.  If the work\nduring execution displays copyright notices, you must include the\ncopyright notice for the Library among them, as well as a reference\ndirecting the user to the copy of this License.  Also, you must do one\nof these things:\n\n    a) Accompany the work with the complete corresponding\n    machine-readable source code for the Library including whatever\n    changes were used in the work (which must be distributed under\n    Sections 1 and 2 above); and, if the work is an executable linked\n    with the Library, with the complete machine-readable \"work that\n    uses the Library\", as object code and/or source code, so that the\n    user can modify the Library and then relink to produce a modified\n    executable containing the modified Library.  (It is understood\n    that the user who changes the contents of definitions files in the\n    Library will not necessarily be able to recompile the application\n    to use the modified definitions.)\n\n    b) Use a suitable shared library mechanism for linking with the\n    Library.  A suitable mechanism is one that (1) uses at run time a\n    copy of the library already present on the user's computer system,\n    rather than copying library functions into the executable, and (2)\n    will operate properly with a modified version of the library, if\n    the user installs one, as long as the modified version is\n    interface-compatible with the version that the work was made with.\n\n    c) Accompany the work with a written offer, valid for at\n    least three years, to give the same user the materials\n    specified in Subsection 6a, above, for a charge no more\n    than the cost of performing this distribution.\n\n    d) If distribution of the work is made by offering access to copy\n    from a designated place, offer equivalent access to copy the above\n    specified materials from the same place.\n\n    e) Verify that the user has already received a copy of these\n    materials or that you have already sent this user a copy.\n\n  For an executable, the required form of the \"work that uses the\nLibrary\" must include any data and utility programs needed for\nreproducing the executable from it.  However, as a special exception,\nthe materials to be distributed need not include anything that is\nnormally distributed (in either source or binary form) with the major\ncomponents (compiler, kernel, and so on) of the operating system on\nwhich the executable runs, unless that component itself accompanies\nthe executable.\n\n  It may happen that this requirement contradicts the license\nrestrictions of other proprietary libraries that do not normally\naccompany the operating system.  Such a contradiction means you cannot\nuse both them and the Library together in an executable that you\ndistribute.\n\n  7. You may place library facilities that are a work based on the\nLibrary side-by-side in a single library together with other library\nfacilities not covered by this License, and distribute such a combined\nlibrary, provided that the separate distribution of the work based on\nthe Library and of the other library facilities is otherwise\npermitted, and provided that you do these two things:\n\n    a) Accompany the combined library with a copy of the same work\n    based on the Library, uncombined with any other library\n    facilities.  This must be distributed under the terms of the\n    Sections above.\n\n    b) Give prominent notice with the combined library of the fact\n    that part of it is a work based on the Library, and explaining\n    where to find the accompanying uncombined form of the same work.\n\n  8. You may not copy, modify, sublicense, link with, or distribute\nthe Library except as expressly provided under this License.  Any\nattempt otherwise to copy, modify, sublicense, link with, or\ndistribute the Library is void, and will automatically terminate your\nrights under this License.  However, parties who have received copies,\nor rights, from you under this License will not have their licenses\nterminated so long as such parties remain in full compliance.\n\n  9. You are not required to accept this License, since you have not\nsigned it.  However, nothing else grants you permission to modify or\ndistribute the Library or its derivative works.  These actions are\nprohibited by law if you do not accept this License.  Therefore, by\nmodifying or distributing the Library (or any work based on the\nLibrary), you indicate your acceptance of this License to do so, and\nall its terms and conditions for copying, distributing or modifying\nthe Library or works based on it.\n\n  10. Each time you redistribute the Library (or any work based on the\nLibrary), the recipient automatically receives a license from the\noriginal licensor to copy, distribute, link with or modify the Library\nsubject to these terms and conditions.  You may not impose any further\nrestrictions on the recipients' exercise of the rights granted herein.\nYou are not responsible for enforcing compliance by third parties with\nthis License.\n\n  11. If, as a consequence of a court judgment or allegation of patent\ninfringement or for any other reason (not limited to patent issues),\nconditions are imposed on you (whether by court order, agreement or\notherwise) that contradict the conditions of this License, they do not\nexcuse you from the conditions of this License.  If you cannot\ndistribute so as to satisfy simultaneously your obligations under this\nLicense and any other pertinent obligations, then as a consequence you\nmay not distribute the Library at all.  For example, if a patent\nlicense would not permit royalty-free redistribution of the Library by\nall those who receive copies directly or indirectly through you, then\nthe only way you could satisfy both it and this License would be to\nrefrain entirely from distribution of the Library.\n\nIf any portion of this section is held invalid or unenforceable under any\nparticular circumstance, the balance of the section is intended to apply,\nand the section as a whole is intended to apply in other circumstances.\n\nIt is not the purpose of this section to induce you to infringe any\npatents or other property right claims or to contest validity of any\nsuch claims; this section has the sole purpose of protecting the\nintegrity of the free software distribution system which is\nimplemented by public license practices.  Many people have made\ngenerous contributions to the wide range of software distributed\nthrough that system in reliance on consistent application of that\nsystem; it is up to the author/donor to decide if he or she is willing\nto distribute software through any other system and a licensee cannot\nimpose that choice.\n\nThis section is intended to make thoroughly clear what is believed to\nbe a consequence of the rest of this License.\n\n  12. If the distribution and/or use of the Library is restricted in\ncertain countries either by patents or by copyrighted interfaces, the\noriginal copyright holder who places the Library under this License may add\nan explicit geographical distribution limitation excluding those countries,\nso that distribution is permitted only in or among countries not thus\nexcluded.  In such case, this License incorporates the limitation as if\nwritten in the body of this License.\n\n  13. The Free Software Foundation may publish revised and/or new\nversions of the Lesser General Public License from time to time.\nSuch new versions will be similar in spirit to the present version,\nbut may differ in detail to address new problems or concerns.\n\nEach version is given a distinguishing version number.  If the Library\nspecifies a version number of this License which applies to it and\n\"any later version\", you have the option of following the terms and\nconditions either of that version or of any later version published by\nthe Free Software Foundation.  If the Library does not specify a\nlicense version number, you may choose any version ever published by\nthe Free Software Foundation.\n\n  14. If you wish to incorporate parts of the Library into other free\nprograms whose distribution conditions are incompatible with these,\nwrite to the author to ask for permission.  For software which is\ncopyrighted by the Free Software Foundation, write to the Free\nSoftware Foundation; we sometimes make exceptions for this.  Our\ndecision will be guided by the two goals of preserving the free status\nof all derivatives of our free software and of promoting the sharing\nand reuse of software generally.\n\n                            NO WARRANTY\n\n  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO\nWARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.\nEXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR\nOTHER PARTIES PROVIDE THE LIBRARY \"AS IS\" WITHOUT WARRANTY OF ANY\nKIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\nPURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE\nLIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME\nTHE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.\n\n  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN\nWRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY\nAND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU\nFOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR\nCONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE\nLIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING\nRENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A\nFAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF\nSUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH\nDAMAGES.\n\n                     END OF TERMS AND CONDITIONS\n\n\n"
  },
  {
    "path": "cola/Makefile-swig-java",
    "content": "OSNAME:=$(shell uname -s | sed 's/_.*//')\n\nifeq ($(OSNAME),Darwin)\n\tCPPFLAGS =\n\tCXXFLAGS += -std=c++11\n\t# Change path to JDK\n\t# JAVA_INCLUDE = -I/System/Library/Frameworks/JavaVM.framework/Headers\n\tJAVA_INCLUDE = -I/Library/Java/JavaVirtualMachines/temurin-8.jdk/Contents/Home/include \\\n\t\t\t\t\t-I/Library/Java/JavaVirtualMachines/temurin-8.jdk/Contents/Home/include/darwin\n\t# LINK = $(CXX) $(CXXFLAGS) -dynamiclib -framework JavaVM -o adaptagrams.dylib\n\tLINK = $(CXX) $(CXXFLAGS) -dynamiclib -o adaptagrams.dylib\nelse \n\t# Some make versions say only one else per if statment.\n\tifeq ($(OSNAME),Linux)\n\t\tCPPFLAGS = -fPIC\n\t\t# Change path to JDK\n\t\tJAVA_INCLUDE = -I/usr/lib/jvm/java-8-openjdk-amd64/include \\\n\t\t\t\t\t\t-I/usr/lib/jvm/java-8-openjdk-amd64/include/linux\n\t\tLINK = $(CXX) $(CXXFLAGS) -shared -o adaptagrams.so\n\telse \n\t\tifeq ($(OSNAME),MINGW32)\n\t\t\tCPPFLAGS =\n\t\t\t# Change path to JDK\n\t\t\tJAVA_INCLUDE = -I\"/c/Program Files/Java/jdk-1.8/include\" \\\n\t\t\t\t\t\t\t-I\"/c/Program File/Java/jdk-1.8/include/win32\"\n\t\t\t# Building with MinGW\n\t\t\tLINK = $(CXX) $(CXXFLAGS) -Wl,--add-stdcall-alias -shared -o adaptagrams.dll\n\t\telse\n\t\t\tifeq ($(OSNAME),MINGW64)\n\t\t\t\tCPPFLAGS =\n\t\t\t\t# Change path to JDK\n\t\t\t\tJAVA_INCLUDE = -I\"/c/Program Files/Java/jdk-1.8/include\" \\\n\t\t\t\t\t\t\t\t-I\"/c/Program Files/Java/jdk-1.8/include/win32\"\n\t\t\t\t# Building with MSYS2\n\t\t\t\tLINK = $(CXX) $(CXXFLAGS) -Wl,--add-stdcall-alias -static-libgcc -static-libstdc++ -static -lpthread -shared -o adaptagrams.dll\n\t\t\tendif\n\t\tendif\n\tendif\nendif\n\nall: adaptagrams jar\n\nswig-worked: clean adaptagrams.i\n\tmkdir -p java/src/org/adaptagrams\n\tmkdir -p java/build/org/adaptagrams\n\t# Use Swig version 3\n\tswig -DUSE_ASSERT_EXCEPTIONS -c++ -java -package org.adaptagrams -outdir java/src/org/adaptagrams adaptagrams.i\n\ttouch swig-worked\n\nadaptagrams_wrap.o: swig-worked\n\t$(CXX) $(CXXFLAGS) $(CPPFLAGS) -I. $(JAVA_INCLUDE) -c adaptagrams_wrap.cxx\n\nadaptagrams: adaptagrams_wrap.o\n\t$(LINK) adaptagrams_wrap.o libcola/.libs/libcola.a libtopology/.libs/libtopology.a libavoid/.libs/libavoid.a libvpsc/.libs/libvpsc.a libdialect/.libs/libdialect.a\n\njar: swig-worked\n\tjavac -d java/build/ java/src/org/adaptagrams/*.java\n\tjar cf adaptagrams.jar -C java/build/ .\n\tjar uf adaptagrams.jar -C java/src/ .\n\nrealclean: clean\n\nclean: mostlyclean\n\trm -f adaptagrams.so adaptagrams.dylib adaptagrams.so\n\nmostlyclean:\n\trm -f swig-worked\n\trm -f adaptagrams_wrap.o adaptagrams_wrap.cxx adaptagrams.jar\n\trm -rf java/*\n\n.PHONY: all clean mostlyclean realclean\n\n"
  },
  {
    "path": "cola/Makefile-swig-python",
    "content": "OSNAME:=$(shell uname -s | sed 's/_.*//')\n\nCOMPILER =\n# to get a list of available compilers run\n# python swig-python-setup.py build_ext --help-compiler\n# no changes necessary on Linux and MacOS\n# change compiler to mingw32 on MinGW (but not on MSYS2)\nifeq ($(OSNAME),MINGW32)\n\tCOMPILER = --compiler=mingw32\nendif\n\nall: adaptagrams\n\nadaptagrams_wrap.cxx: clean adaptagrams.i\n\t# use Swig version 3\n\tswig -DNDEBUG -c++ -python adaptagrams.i\n\nadaptagrams: adaptagrams_wrap.cxx\n\t# change to 'python' on Windows\n\tpython3 swig-python3-setup.py build_ext --inplace $(COMPILER)\n\nrealclean: clean\n\nclean: mostlyclean\n\trm -f _adaptagrams.so _adaptagrams.dylib _adaptagrams.dll\n\trm -f adaptagrams.py\n\nmostlyclean:\n\trm -f swig-worked\n\trm -f adaptagrams_wrap.o adaptagrams_wrap.cxx\n\n.PHONY: all clean mostlyclean realclean\n\n"
  },
  {
    "path": "cola/Makefile.am",
    "content": "ACLOCAL_AMFLAGS = -I m4\nAUTOMAKE_OPTIONS = gnu\nSUBDIRS = libavoid libvpsc libcola libtopology libdialect\n\n"
  },
  {
    "path": "cola/NEWS",
    "content": ""
  },
  {
    "path": "cola/README",
    "content": "See README.md in the parent directory.\n"
  },
  {
    "path": "cola/__init__.py",
    "content": ""
  },
  {
    "path": "cola/adaptagrams.i",
    "content": "/* This is a SWIG interface file for generating interfaces to the Adpatagrams\n * libraries for languages other than C++.  It has currently been tested from\n * Java and Python, but could be adapted for other languages.\n */\n\n/* File : adaptagrams.i */\n%module(directors=\"1\") adaptagrams\n\n/* Allow target language to subclass and implement virtual methods for\n * these classes.\n */\n%feature(\"director\") Avoid::Router;\n%feature(\"director\") cola::TestConvergence;\n\n#ifdef SWIGJAVA\n/* Allow enum values to be logically ORed together as flags. */\n%include \"enumtypeunsafe.swg\"\n#endif\n\n%{\n\n#ifdef SWIGPYTHON\n#define SWIG_FILE_WITH_INIT\n#endif\n\n#include <vector>\n#include <libvpsc/rectangle.h>\n#include <libvpsc/assertions.h>\n#include <libcola/cola.h>\n#include <libcola/cluster.h>\n#include <libcola/convex_hull.h>\n#include <libcola/compound_constraints.h>\n#include <libcola/exceptions.h>\n#include <libtopology/topology_graph.h>\n#include <libtopology/cola_topology_addon.h>\n#include <libavoid/libavoid.h>\n#include <libtopology/orthogonal_topology.h>\n#include <libdialect/aca.h>\n#include <libdialect/chains.h>\n#include <libdialect/commontypes.h>\n#include <libdialect/constraints.h>\n#include <libdialect/faces.h>\n#include <libdialect/graphs.h>\n#include <libdialect/hola.h>\n#include <libdialect/io.h>\n#include <libdialect/nearalign.h>\n#include <libdialect/nodeconfig.h>\n#include <libdialect/opts.h>\n#include <libdialect/ortho.h>\n#include <libdialect/peeling.h>\n#include <libdialect/planarise.h>\n#include <libdialect/routing.h>\n#include <libdialect/treeplacement.h>\n#include <libdialect/trees.h>\n/* Includes the header in the wrapper code */\n\nusing namespace Avoid;\nusing namespace cola;\nusing namespace hull;\nusing namespace vpsc;\nusing namespace topology;\nusing namespace dialect;\n\n%}\n\n%ignore Avoid::XDIM;\n%ignore Avoid::YDIM;\n%ignore Avoid::Point::operator[];\n%ignore cola::PreIteration::operator();\n%ignore cola::PreIteration::locksNotUsed;\n//%ignore cola::TestConvergence::operator();\n%ignore operator<<(std::ostream &os, vpsc::Rectangle const &r);\n%ignore vpsc::Rectangle::setXBorder(double);\n%ignore vpsc::Rectangle::setYBorder(double);\n%ignore vpsc::assertNoOverlaps(const Rectangles& rs);\n%ignore Avoid::Point::operator==(const Point&) const;\n%ignore Avoid::Point::operator!=(const Point&) const;\n%ignore Avoid::Point::operator<(const Point&) const;\n%ignore Avoid::Point::operator-(const Point&) const;\n%ignore Avoid::Point::operator+(const Point&) const;\n%ignore Avoid::ShapeConnectionPin::operator<(const ShapeConnectionPin& rhs) const;\n%ignore Avoid::ShapeConnectionPin::operator==(const ShapeConnectionPin& rhs) const;\n%ignore Avoid::CmpConnPinPtr::operator()(const ShapeConnectionPin *lhs, const ShapeConnectionPin *rhs) const;\n%ignore cola::SubConstraint;\n%ignore cola::SubConstraintAlternatives;\n%ignore cola::SubConstraintInfo;\n%ignore std::vector<cola::SubConstraintInfo>;\n%ignore cola::NonOverlapConstraints;\n%ignore cola::Resize::Resize();\n%ignore vpsc::Constraint::Constraint();\n%ignore topology::Segment;\n%ignore topology::EdgePoint::inSegment;\n%ignore topology::EdgePoint::outSegment;\n%ignore topology::EdgePoint::bendConstraint;\n%ignore topology::EdgePoint::prune();\n%ignore topology::EdgePoint::getBendConstraint(std::vector<TopologyConstraint*>* ts);\n%ignore topology::EdgePoint::createBendConstraint();\n%ignore topology::EdgePoint::deleteBendConstraint();\n%ignore topology::Edge::firstSegment;\n%ignore topology::Edge::lastSegment;\n%ignore topology::Edge::getTopologyConstraints(std::vector<TopologyConstraint*>* ts) const;\n%ignore topology::Edge::getRoute() const;\n%ignore topology::Edge::toString() const;\n%ignore topology::Edge::toString() const;\n%ignore topology::assertConvexBends(const Edges&);\n%ignore topology::assertNoSegmentRectIntersection(const Nodes&, const Edges&);\n%ignore topology::assertNoZeroLengthEdgeSegments(const Edges& es);\n%ignore topology::compute_stress(const Edges&);\n%ignore topology::printEdges(const Edges&);\n%ignore dialect::Node::operator=(const dialect::Node&);\n%ignore dialect::Edge::operator=(const dialect::Edge&);\n%ignore dialect::Graph::operator=(const Graph);\n%ignore dialect::PeeledNode::operator=(const PeeledNode&);\n%ignore operator+(const dialect::BoundingBox&, const dialect::BoundingBox&);\n%ignore operator+(const dialect::ProjSeq&, const dialect::ProjSeq&);\n%ignore operator==(const dialect::BoundingBox&, const dialect::BoundingBox&);\n%ignore operator!=(const dialect::BoundingBox&, const dialect::BoundingBox&);\n%ignore dialect::identifyRootNode(const Graph&);\n%ignore dialect::negateSepDir(SepDir);\n%ignore dialect::swap(Graph&, Graph&);\n%ignore dialect::ProjSeq::operator+=(const ProjSeq&);\n%ignore dialect::BoundingBox::operator+=(const BoundingBox&);\n%ignore dialect::NodeIdCmp::operator()(id_type, const std::pair<id_type, Node_SP>&) const;\n%ignore dialect::NodeIdCmp::operator()(const std::pair<id_type, Node_SP>&, id_type) const;\n%ignore dialect::operator&(AlignmentFlag, AlignmentFlag);\n%ignore dialect::operator|=(AlignmentFlag&, AlignmentFlag);\n\n%include \"std_string.i\"\n%include \"std_vector.i\"\n%include \"std_deque.i\"\n%include \"std_pair.i\"\n%include \"std_map.i\"\n%include \"std_shared_ptr.i\"\n\n#ifdef SWIGJAVA\n/* Wrap every C++ action in try/catch statement so we convert all \n * possible C++ exceptions (generated from C++ assertion failures)\n * into Java exceptions.\n */\n%exception {\n    try {\n        $action\n    } catch(vpsc::CriticalFailure cf) {\n        jclass excep = jenv->FindClass(\"org/adaptagrams/ColaException\");\n        if (excep)\n            jenv->ThrowNew(excep, cf.what().c_str());\n    } catch(cola::InvalidVariableIndexException ivi) {\n        jclass excep = jenv->FindClass(\"org/adaptagrams/ColaException\");\n        if (excep)\n            jenv->ThrowNew(excep, ivi.what().c_str());\n    } \n}\n\n/* Define a Java ColaException class.\n */\n%typemap(javabase) cola::ColaException \"java.lang.Exception\";\n%inline %{\nnamespace cola {\nclass ColaException {\n    public:\n        ColaException(const std::string& msg) : message(msg) {}\n        std::string getMessage() {\n            return message;\n        }\n    private:\n      std::string message;\n};\n}\n%}\n#endif\n\n/* We have a problem where in garbage collected languages like Java and Python,\n * objects that appear to no longer be used and go out of scope can cause \n * their corresponding internal C++ instances to be freed prematurely.  \n * For this reason we generate empty finialise methods for the following \n * classes and clean them up later.\n *\n * For libavoid, the Router instance takes ownership of these objects and \n * deletes them when it is freed.  For the cola/vpsc classes, a Java/Python\n * user can call ConstrainedFDLayout::freeAssociatedObjects() to free this \n * memory.\n */\n%nodefaultdtor vpsc::Rectangle;\n%nodefaultdtor cola::CompoundConstraint;\n%nodefaultdtor cola::AlignmentConstraint;\n%nodefaultdtor cola::BoundaryConstraint;\n%nodefaultdtor cola::DistributionConstraint;\n%nodefaultdtor cola::MultiSeparationConstraint;\n%nodefaultdtor cola::PageBoundaryConstraints;\n%nodefaultdtor cola::SeparationConstraint;\n%nodefaultdtor cola::OrthogonalEdgeConstraint;\n%nodefaultdtor cola::FixedRelativeConstraint;\n%nodefaultdtor cola::Cluster;\n%nodefaultdtor cola::RootCluster;\n%nodefaultdtor cola::ConvexCluster;\n%nodefaultdtor cola::RectangularCluster;\n%nodefaultdtor Avoid::ShapeRef;\n%nodefaultdtor Avoid::ConnRef;\n%nodefaultdtor Avoid::ClusterRef;\n%nodefaultdtor Avoid::JunctionRef;\n%nodefaultdtor Avoid::Obstacle;\n%nodefaultdtor Avoid::ShapeConnectionPin;\n%nodefaultdtor cola::PreIteration;\n%nodefaultdtor cola::TestConvergence;\n%nodefaultdtor cola::Lock;\n%nodefaultdtor cola::Resize;\n%nodefaultdtor topology::Node;\n%nodefaultdtor topology::Edge;\n%nodefaultdtor topology::EdgePoint;\n%nodefaultdtor topology::ColaTopologyAddon;\n%nodefaultdtor dialect::ACALayout;\n%nodefaultdtor dialect::Graph;\n%nodefaultdtor dialect::Node;\n%nodefaultdtor dialect::Edge;\n\n%include \"libdialect/commontypes.h\"\n\n%template(Chars) std::vector<char>;\n%template(Unsigneds) std::vector<unsigned>;\n%template(Doubles) std::vector<double>;\n\n%template(UnsatisfiableConstraintInfoPtrs) std::vector<cola::UnsatisfiableConstraintInfo *>;\n%template(ColaEdge) std::pair<unsigned,unsigned>;\n%template(ColaEdges) std::vector< std::pair<unsigned,unsigned> >;\n%template(RectanglePtrs) std::vector<vpsc::Rectangle*>;\n%template(CompoundConstraintPtrs) std::vector<cola::CompoundConstraint*>;\n%template(ColaLocks) std::vector<cola::Lock>;\n%template(ColaResizes) std::vector<cola::Resize>;\n%template(ColaDesiredPositions) std::vector<cola::DesiredPosition>;\n%template(TopologyEdgePointPtrs) std::vector<topology::EdgePoint*>;\n%template(TopologyEdgePointConstPtrs) std::vector<const topology::EdgePoint*>;\n%template(TopologyEdgePtrs) std::vector<topology::Edge*>;\n%template(TopologyNodePtrs) std::vector<topology::Node*>;\n%template(ColaClusters) std::vector<cola::Cluster*>;\n%template(AvoidPoints) std::vector<Avoid::Point>;\n%template(AvoidCheckpoints) std::vector<Avoid::Checkpoint>;\n%template(OrderedAlignmentPtrs) std::vector<dialect::OrderedAlignment*>;\n%template(TreePtrs) std::vector<std::shared_ptr<dialect::Tree>>;\n%template(ChainPtrs) std::vector<std::shared_ptr<dialect::Chain>>;\n%template(DialectNodes) std::vector<std::shared_ptr<dialect::Node>>;\n%template(DialectNodeLookup) std::map<dialect::id_type, std::shared_ptr<dialect::Node>>;\n%template(DialectNodeDeques) std::vector<std::deque<std::shared_ptr<dialect::Node>>>;\n\n%inline %{\nvoid doubleArraySet(double *a, int i, double val) {\n   a[i] = val;\n}\ndouble doubleArrayGet(const double *a, int i) {\n   return a[i];\n}\ndouble *newDoubleArray(int size) {\n   return new double[size];\n}\nvoid deleteDoubleArray(double* a) {\n   delete a;\n}\n%}\n\n%rename(ColaTestConvergenceOperator) cola::TestConvergence::operator();\n\n%rename(AvoidBox) Avoid::Box;\n%rename(AvoidEdge) Avoid::Edge;\n%rename(AvoidRectangle) Avoid::Rectangle;\n%rename(AvoidTopologyAddonInterface) Avoid::TopologyAddonInterface;\n\n%rename(getVarConst) topology::Node::getVar() const;\n\n%rename(DialectNode) dialect::Node;\n%rename(DialectEdge) dialect::Edge;\n\n%rename(X1) dialect::BoundingBox::x;\n%rename(Y1) dialect::BoundingBox::y;\n%rename(X2) dialect::BoundingBox::X;\n%rename(Y2) dialect::BoundingBox::Y;\n\n%shared_ptr(dialect::Node)\n%shared_ptr(dialect::GhostNode)\n%shared_ptr(dialect::PeeledNode)\n%shared_ptr(dialect::Graph)\n%shared_ptr(dialect::Tree)\n%shared_ptr(dialect::Side)\n%shared_ptr(dialect::Nexus)\n%shared_ptr(dialect::Face)\n%shared_ptr(dialect::FaceSet)\n%shared_ptr(dialect::TreePlacement)\n%shared_ptr(dialect::Chain)\n\n/* %warnfilter(315) dialect::Edge; */\n%ignore dialect::Edge::m_tgt;\n\n\n\n\n/* Parse the header file to generate wrappers */\n%include \"libvpsc/rectangle.h\"\n%include \"libvpsc/assertions.h\"\n%include \"libcola/compound_constraints.h\"\n\n%include \"libcola/cola.h\"\n%include \"libcola/cluster.h\"\n%include \"libcola/convex_hull.h\"\n%include \"libcola/exceptions.h\"\n\n%include \"libavoid/dllexport.h\"\n%include \"libavoid/geometry.h\"\n%include \"libavoid/geomtypes.h\"\n%include \"libavoid/connend.h\"\n%include \"libavoid/router.h\"\n%include \"libavoid/connector.h\"\n%include \"libavoid/obstacle.h\"\n%include \"libavoid/shape.h\"\n%include \"libavoid/junction.h\"\n%include \"libavoid/viscluster.h\"\n%include \"libavoid/connectionpin.h\"\n\n%include \"libtopology/topology_graph.h\"\n%include \"libtopology/cola_topology_addon.h\"\n%include \"libtopology/orthogonal_topology.h\"\n\n%include \"libdialect/aca.h\"\n%include \"libdialect/chains.h\"\n%include \"libdialect/constraints.h\"\n%include \"libdialect/faces.h\"\n%include \"libdialect/graphs.h\"\n%include \"libdialect/hola.h\"\n%include \"libdialect/io.h\"\n%include \"libdialect/nearalign.h\"\n%include \"libdialect/nodeconfig.h\"\n%include \"libdialect/opts.h\"\n%include \"libdialect/ortho.h\"\n%include \"libdialect/peeling.h\"\n%include \"libdialect/planarise.h\"\n%include \"libdialect/routing.h\"\n%include \"libdialect/treeplacement.h\"\n%include \"libdialect/trees.h\"\n\n"
  },
  {
    "path": "cola/autogen.sh",
    "content": "#!/bin/sh -xe\n#\n# We use gnu automake to build.  I've tried to make the contents of the\n# repository as platform agnostic as possible, so you'll need to call\n# autoreconf before configure.\n\n# Make m4 directory, otherwise autoreconf fails when it doesn't exist.\nmkdir -p m4\n\nautoreconf --install --verbose\n\n# The following sequence gives the manual steps if autoreconf isn't available.\n#\n#aclocal $ACLOCAL_FLAGS\n#glibtoolize\n#autoheader\n#autoconf\n#automake -a --add-missing\n\n\n# Configure.\n./configure\n# Compile with CXXFLAGS=\"-std=c++11\" when using g++ 14 or newer\n# ./configure CXXFLAGS=\"-std=c++11\"\n\n# Instead, use this line if building for SWIG Java or SWIG Python 3:\n# ./configure CPPFLAGS=\"-DUSE_ASSERT_EXCEPTIONS\"\n# Compile with CXXFLAGS=\"-std=c++11\" when using g++ 14 or newer\n# ./configure CXXFLAGS=\"-std=c++11\" CPPFLAGS=\"-DUSE_ASSERT_EXCEPTIONS\"\n\n# Instead, use this line if building for SWIG Python:\n# (this line doesn't seem to work anymore, it's causing problems in particular with\n# libdialect and \"-O3 -DNDEBUG\")\n# ./configure CXXFLAGS=\"-O3 -DNDEBUG -arch x86_64 -arch i386\" LDFLAGS=\"-arch x86_64 -arch i386\"\n\n# Instead, use this line for development and for debugging the tests:\n#./configure --disable-shared CXXFLAGS=\"-g -O0\"\n\nmake\n\n# The following builds examples and tests for each of the libraries.\n# Please look at these before sending me questions.\nmake check\n\n"
  },
  {
    "path": "cola/buildPythonSWIG.sh",
    "content": "#!/bin/sh\n\nmake -f Makefile-swig-python CPPFLAGS=\"-Wno-c++11-extensions\"\n\n"
  },
  {
    "path": "cola/buildSWIGVersionForMac.sh",
    "content": "#!/bin/sh\n\n# Builds a universeral 32/64-bet Mac Java version of the Adaptagrams libraries.\n\nFATFLAGS=\"-arch i386 -arch x86_64\"\n\nmkdir -p m4\nautoreconf --install --verbose\n\n./configure --disable-dependency-tracking CPPFLAGS=\"-DNDEBUG -O3 -DUSE_ASSERT_EXCEPTIONS\" CXXFLAGS=\"$FATFLAGS\" LDFLAGS=\"$FATFLAGS\"\n\nmake clean\nmake -j8\nmake -f Makefile-swig-java CXXFLAGS=\"$FATFLAGS\" LDFLAGS=\"$FATFLAGS\"\nmake -f Makefile-swig-python\n\n"
  },
  {
    "path": "cola/configure.ac",
    "content": "AC_INIT([libcola],[0.1])\nAC_CONFIG_MACRO_DIR([m4])\nAC_CONFIG_SRCDIR(libcola/cola.h)\nAC_CONFIG_HEADERS([libcola/config.h])\nAM_INIT_AUTOMAKE\n# able to choose or disable these two at configure time:\nAC_ENABLE_STATIC\nAC_ENABLE_SHARED\nAC_PROG_CXX\nAC_PROG_CC\nAC_PROG_LIBTOOL\nLT_INIT\nAC_PROG_INSTALL\n#AC_DEFINE(TRACE_LOGGING)\ndnl ******************************\ndnl   Compilation warnings\ndnl ******************************\nif test \"$GXX\" = \"yes\"; then\n  # Use C++11 Extensions\n  CXXFLAGS=\"-std=gnu++11 $CXXFLAGS\"\n  dnl Alternatively (https://askubuntu.com/a/773293),\n  dnl CXXFLAGS=\"-std=c++11 $CXXFLAGS\"\n  case \"$host_os\" in\n    darwin*)\n      dnl See https://stackoverflow.com/a/14657009\n      CXXFLAGS=\"-stdlib=libc++ $CXXFLAGS\"\n      ;;\n  esac\n\n  # Enable some warnings from g++.\n  CXXFLAGS=\"-Wall -W -Wpointer-arith -Wcast-align -Wsign-compare -Woverloaded-virtual -Wswitch  $CXXFLAGS\"\n\n  dnl Test for arch-specific situations.\n  case \"$host_cpu\" in\n    mips|mipsel)\n      dnl Symbol tables can get too large: this uses alternate tables\n      dnl See http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=283476\n      CXXFLAGS=\"$CXXFLAGS -Wa,-xgot\"\n      CFLAGS=\"$CFLAGS -Wa,-xgot\"\n      ;;\n  esac\nfi\n\n# If we are on a Windows OS using MinGW, extend the linker flags by '-no-undefined'\n# to avoid linker warnings\nif test \"x$host_os\" = \"xmingw32\"; then\n  AM_LDFLAGS=\"$AM_LDFLAGS -no-undefined\"\nfi\n# Distribute the changed linker flags among the Makefiles\nAC_SUBST(AM_LDFLAGS)\n\n#AC_CHECK_LIB(cairomm-1.0,cairo_create)\nPKG_CHECK_MODULES(CAIROMM,cairomm-1.0,cairomm=yes,cairomm=no)\nif test \"x$cairomm\" = \"xyes\"; then\n\tAC_DEFINE(HAVE_CAIROMM, 1, [Enable CairoMM code])\nfi\nAC_SUBST(CAIROMM_CFLAGS)\nAC_SUBST(CAIROMM_LIBS)\n\nAH_BOTTOM([ \n  \n])\n\nAC_CONFIG_FILES([Makefile libcola/Makefile libcola/tests/Makefile libvpsc/Makefile libvpsc/tests/Makefile libtopology/Makefile libtopology/tests/Makefile libavoid/Makefile libavoid/tests/Makefile libdialect/Makefile libdialect/tests/Makefile libcola/libcola.pc libavoid/libavoid.pc libvpsc/libvpsc.pc libtopology/libtopology.pc libdialect/libdialect.pc])\nAC_OUTPUT\n"
  },
  {
    "path": "cola/libavoid/Doxyfile",
    "content": "# Doxyfile 1.9.8\n\n# This file describes the settings to be used by the documentation system\n# doxygen (www.doxygen.org) for a project.\n#\n# All text after a double hash (##) is considered a comment and is placed in\n# front of the TAG it is preceding.\n#\n# All text after a single hash (#) is considered a comment and will be ignored.\n# The format is:\n# TAG = value [value, ...]\n# For lists, items can also be appended using:\n# TAG += value [value, ...]\n# Values that contain spaces should be placed between quotes (\\\" \\\").\n#\n# Note:\n#\n# Use doxygen to compare the used configuration file with the template\n# configuration file:\n# doxygen -x [configFile]\n# Use doxygen to compare the used configuration file with the template\n# configuration file without replacing the environment variables or CMake type\n# replacement variables:\n# doxygen -x_noenv [configFile]\n\n#---------------------------------------------------------------------------\n# Project related configuration options\n#---------------------------------------------------------------------------\n\n# This tag specifies the encoding used for all characters in the configuration\n# file that follow. The default is UTF-8 which is also the encoding used for all\n# text before the first occurrence of this tag. Doxygen uses libiconv (or the\n# iconv built into libc) for the transcoding. See\n# https://www.gnu.org/software/libiconv/ for the list of possible encodings.\n# The default value is: UTF-8.\n\nDOXYFILE_ENCODING      = UTF-8\n\n# The PROJECT_NAME tag is a single word (or a sequence of words surrounded by\n# double-quotes, unless you are using Doxywizard) that should identify the\n# project for which the documentation is generated. This name is used in the\n# title of most generated pages and in a few other places.\n# The default value is: My Project.\n\nPROJECT_NAME           = libavoid\n\n# The PROJECT_NUMBER tag can be used to enter a project or revision number. This\n# could be handy for archiving the generated documentation or if some version\n# control system is used.\n\nPROJECT_NUMBER         =\n\n# Using the PROJECT_BRIEF tag one can provide an optional one line description\n# for a project that appears at the top of each page and should give viewer a\n# quick idea about the purpose of the project. Keep the description short.\n\nPROJECT_BRIEF          =\n\n# With the PROJECT_LOGO tag one can specify a logo or an icon that is included\n# in the documentation. The maximum height of the logo should not exceed 55\n# pixels and the maximum width should not exceed 200 pixels. Doxygen will copy\n# the logo to the output directory.\n\nPROJECT_LOGO           =\n\n# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path\n# into which the generated documentation will be written. If a relative path is\n# entered, it will be relative to the location where doxygen was started. If\n# left blank the current directory will be used.\n\nOUTPUT_DIRECTORY       = doc\n\n# If the CREATE_SUBDIRS tag is set to YES then doxygen will create up to 4096\n# sub-directories (in 2 levels) under the output directory of each output format\n# and will distribute the generated files over these directories. Enabling this\n# option can be useful when feeding doxygen a huge amount of source files, where\n# putting all generated files in the same directory would otherwise causes\n# performance problems for the file system. Adapt CREATE_SUBDIRS_LEVEL to\n# control the number of sub-directories.\n# The default value is: NO.\n\nCREATE_SUBDIRS         = NO\n\n# Controls the number of sub-directories that will be created when\n# CREATE_SUBDIRS tag is set to YES. Level 0 represents 16 directories, and every\n# level increment doubles the number of directories, resulting in 4096\n# directories at level 8 which is the default and also the maximum value. The\n# sub-directories are organized in 2 levels, the first level always has a fixed\n# number of 16 directories.\n# Minimum value: 0, maximum value: 8, default value: 8.\n# This tag requires that the tag CREATE_SUBDIRS is set to YES.\n\nCREATE_SUBDIRS_LEVEL   = 8\n\n# If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII\n# characters to appear in the names of generated files. If set to NO, non-ASCII\n# characters will be escaped, for example _xE3_x81_x84 will be used for Unicode\n# U+3044.\n# The default value is: NO.\n\nALLOW_UNICODE_NAMES    = NO\n\n# The OUTPUT_LANGUAGE tag is used to specify the language in which all\n# documentation generated by doxygen is written. Doxygen will use this\n# information to generate all constant output in the proper language.\n# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Bulgarian,\n# Catalan, Chinese, Chinese-Traditional, Croatian, Czech, Danish, Dutch, English\n# (United States), Esperanto, Farsi (Persian), Finnish, French, German, Greek,\n# Hindi, Hungarian, Indonesian, Italian, Japanese, Japanese-en (Japanese with\n# English messages), Korean, Korean-en (Korean with English messages), Latvian,\n# Lithuanian, Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese,\n# Romanian, Russian, Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish,\n# Swedish, Turkish, Ukrainian and Vietnamese.\n# The default value is: English.\n\nOUTPUT_LANGUAGE        = English\n\n# If the BRIEF_MEMBER_DESC tag is set to YES, doxygen will include brief member\n# descriptions after the members that are listed in the file and class\n# documentation (similar to Javadoc). Set to NO to disable this.\n# The default value is: YES.\n\nBRIEF_MEMBER_DESC      = YES\n\n# If the REPEAT_BRIEF tag is set to YES, doxygen will prepend the brief\n# description of a member or function before the detailed description\n#\n# Note: If both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the\n# brief descriptions will be completely suppressed.\n# The default value is: YES.\n\nREPEAT_BRIEF           = YES\n\n# This tag implements a quasi-intelligent brief description abbreviator that is\n# used to form the text in various listings. Each string in this list, if found\n# as the leading text of the brief description, will be stripped from the text\n# and the result, after processing the whole list, is used as the annotated\n# text. Otherwise, the brief description is used as-is. If left blank, the\n# following values are used ($name is automatically replaced with the name of\n# the entity):The $name class, The $name widget, The $name file, is, provides,\n# specifies, contains, represents, a, an and the.\n\nABBREVIATE_BRIEF       =\n\n# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then\n# doxygen will generate a detailed section even if there is only a brief\n# description.\n# The default value is: NO.\n\nALWAYS_DETAILED_SEC    = NO\n\n# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all\n# inherited members of a class in the documentation of that class as if those\n# members were ordinary class members. Constructors, destructors and assignment\n# operators of the base classes will not be shown.\n# The default value is: NO.\n\nINLINE_INHERITED_MEMB  = YES\n\n# If the FULL_PATH_NAMES tag is set to YES, doxygen will prepend the full path\n# before files name in the file list and in the header files. If set to NO the\n# shortest path that makes the file name unique will be used\n# The default value is: YES.\n\nFULL_PATH_NAMES        = YES\n\n# The STRIP_FROM_PATH tag can be used to strip a user-defined part of the path.\n# Stripping is only done if one of the specified strings matches the left-hand\n# part of the path. The tag can be used to show relative paths in the file list.\n# If left blank the directory from which doxygen is run is used as the path to\n# strip.\n#\n# Note that you can specify absolute paths here, but also relative paths, which\n# will be relative from the directory where doxygen is started.\n# This tag requires that the tag FULL_PATH_NAMES is set to YES.\n\nSTRIP_FROM_PATH        =\n\n# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of the\n# path mentioned in the documentation of a class, which tells the reader which\n# header file to include in order to use a class. If left blank only the name of\n# the header file containing the class definition is used. Otherwise one should\n# specify the list of include paths that are normally passed to the compiler\n# using the -I flag.\n\nSTRIP_FROM_INC_PATH    =\n\n# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter (but\n# less readable) file names. This can be useful is your file systems doesn't\n# support long names like on DOS, Mac, or CD-ROM.\n# The default value is: NO.\n\nSHORT_NAMES            = NO\n\n# If the JAVADOC_AUTOBRIEF tag is set to YES then doxygen will interpret the\n# first line (until the first dot) of a Javadoc-style comment as the brief\n# description. If set to NO, the Javadoc-style will behave just like regular Qt-\n# style comments (thus requiring an explicit @brief command for a brief\n# description.)\n# The default value is: NO.\n\nJAVADOC_AUTOBRIEF      = NO\n\n# If the JAVADOC_BANNER tag is set to YES then doxygen will interpret a line\n# such as\n# /***************\n# as being the beginning of a Javadoc-style comment \"banner\". If set to NO, the\n# Javadoc-style will behave just like regular comments and it will not be\n# interpreted by doxygen.\n# The default value is: NO.\n\nJAVADOC_BANNER         = NO\n\n# If the QT_AUTOBRIEF tag is set to YES then doxygen will interpret the first\n# line (until the first dot) of a Qt-style comment as the brief description. If\n# set to NO, the Qt-style will behave just like regular Qt-style comments (thus\n# requiring an explicit \\brief command for a brief description.)\n# The default value is: NO.\n\nQT_AUTOBRIEF           = NO\n\n# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make doxygen treat a\n# multi-line C++ special comment block (i.e. a block of //! or /// comments) as\n# a brief description. This used to be the default behavior. The new default is\n# to treat a multi-line C++ comment block as a detailed description. Set this\n# tag to YES if you prefer the old behavior instead.\n#\n# Note that setting this tag to YES also means that rational rose comments are\n# not recognized any more.\n# The default value is: NO.\n\nMULTILINE_CPP_IS_BRIEF = NO\n\n# By default Python docstrings are displayed as preformatted text and doxygen's\n# special commands cannot be used. By setting PYTHON_DOCSTRING to NO the\n# doxygen's special commands can be used and the contents of the docstring\n# documentation blocks is shown as doxygen documentation.\n# The default value is: YES.\n\nPYTHON_DOCSTRING       = YES\n\n# If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the\n# documentation from any documented member that it re-implements.\n# The default value is: YES.\n\nINHERIT_DOCS           = YES\n\n# If the SEPARATE_MEMBER_PAGES tag is set to YES then doxygen will produce a new\n# page for each member. If set to NO, the documentation of a member will be part\n# of the file/class/namespace that contains it.\n# The default value is: NO.\n\nSEPARATE_MEMBER_PAGES  = NO\n\n# The TAB_SIZE tag can be used to set the number of spaces in a tab. Doxygen\n# uses this value to replace tabs by spaces in code fragments.\n# Minimum value: 1, maximum value: 16, default value: 4.\n\nTAB_SIZE               = 8\n\n# This tag can be used to specify a number of aliases that act as commands in\n# the documentation. An alias has the form:\n# name=value\n# For example adding\n# \"sideeffect=@par Side Effects:^^\"\n# will allow you to put the command \\sideeffect (or @sideeffect) in the\n# documentation, which will result in a user-defined paragraph with heading\n# \"Side Effects:\". Note that you cannot put \\n's in the value part of an alias\n# to insert newlines (in the resulting output). You can put ^^ in the value part\n# of an alias to insert a newline as if a physical newline was in the original\n# file. When you need a literal { or } or , in the value part of an alias you\n# have to escape them by means of a backslash (\\), this can lead to conflicts\n# with the commands \\{ and \\} for these it is advised to use the version @{ and\n# @} or use a double escape (\\\\{ and \\\\})\n\nALIASES                =\n\n# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources\n# only. Doxygen will then generate output that is more tailored for C. For\n# instance, some of the names that are used will be different. The list of all\n# members will be omitted, etc.\n# The default value is: NO.\n\nOPTIMIZE_OUTPUT_FOR_C  = NO\n\n# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or\n# Python sources only. Doxygen will then generate output that is more tailored\n# for that language. For instance, namespaces will be presented as packages,\n# qualified scopes will look different, etc.\n# The default value is: NO.\n\nOPTIMIZE_OUTPUT_JAVA   = NO\n\n# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran\n# sources. Doxygen will then generate output that is tailored for Fortran.\n# The default value is: NO.\n\nOPTIMIZE_FOR_FORTRAN   = NO\n\n# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL\n# sources. Doxygen will then generate output that is tailored for VHDL.\n# The default value is: NO.\n\nOPTIMIZE_OUTPUT_VHDL   = NO\n\n# Set the OPTIMIZE_OUTPUT_SLICE tag to YES if your project consists of Slice\n# sources only. Doxygen will then generate output that is more tailored for that\n# language. For instance, namespaces will be presented as modules, types will be\n# separated into more groups, etc.\n# The default value is: NO.\n\nOPTIMIZE_OUTPUT_SLICE  = NO\n\n# Doxygen selects the parser to use depending on the extension of the files it\n# parses. With this tag you can assign which parser to use for a given\n# extension. Doxygen has a built-in mapping, but you can override or extend it\n# using this tag. The format is ext=language, where ext is a file extension, and\n# language is one of the parsers supported by doxygen: IDL, Java, JavaScript,\n# Csharp (C#), C, C++, Lex, D, PHP, md (Markdown), Objective-C, Python, Slice,\n# VHDL, Fortran (fixed format Fortran: FortranFixed, free formatted Fortran:\n# FortranFree, unknown formatted Fortran: Fortran. In the later case the parser\n# tries to guess whether the code is fixed or free formatted code, this is the\n# default for Fortran type files). For instance to make doxygen treat .inc files\n# as Fortran files (default is PHP), and .f files as C (default is Fortran),\n# use: inc=Fortran f=C.\n#\n# Note: For files without extension you can use no_extension as a placeholder.\n#\n# Note that for custom extensions you also need to set FILE_PATTERNS otherwise\n# the files are not read by doxygen. When specifying no_extension you should add\n# * to the FILE_PATTERNS.\n#\n# Note see also the list of default file extension mappings.\n\nEXTENSION_MAPPING      =\n\n# If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments\n# according to the Markdown format, which allows for more readable\n# documentation. See https://daringfireball.net/projects/markdown/ for details.\n# The output of markdown processing is further processed by doxygen, so you can\n# mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in\n# case of backward compatibilities issues.\n# The default value is: YES.\n\nMARKDOWN_SUPPORT       = YES\n\n# When the TOC_INCLUDE_HEADINGS tag is set to a non-zero value, all headings up\n# to that level are automatically included in the table of contents, even if\n# they do not have an id attribute.\n# Note: This feature currently applies only to Markdown headings.\n# Minimum value: 0, maximum value: 99, default value: 5.\n# This tag requires that the tag MARKDOWN_SUPPORT is set to YES.\n\nTOC_INCLUDE_HEADINGS   = 0\n\n# The MARKDOWN_ID_STYLE tag can be used to specify the algorithm used to\n# generate identifiers for the Markdown headings. Note: Every identifier is\n# unique.\n# Possible values are: DOXYGEN use a fixed 'autotoc_md' string followed by a\n# sequence number starting at 0 and GITHUB use the lower case version of title\n# with any whitespace replaced by '-' and punctuation characters removed.\n# The default value is: DOXYGEN.\n# This tag requires that the tag MARKDOWN_SUPPORT is set to YES.\n\nMARKDOWN_ID_STYLE      = DOXYGEN\n\n# When enabled doxygen tries to link words that correspond to documented\n# classes, or namespaces to their corresponding documentation. Such a link can\n# be prevented in individual cases by putting a % sign in front of the word or\n# globally by setting AUTOLINK_SUPPORT to NO.\n# The default value is: YES.\n\nAUTOLINK_SUPPORT       = YES\n\n# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want\n# to include (a tag file for) the STL sources as input, then you should set this\n# tag to YES in order to let doxygen match functions declarations and\n# definitions whose arguments contain STL classes (e.g. func(std::string);\n# versus func(std::string) {}). This also make the inheritance and collaboration\n# diagrams that involve STL classes more complete and accurate.\n# The default value is: NO.\n\nBUILTIN_STL_SUPPORT    = NO\n\n# If you use Microsoft's C++/CLI language, you should set this option to YES to\n# enable parsing support.\n# The default value is: NO.\n\nCPP_CLI_SUPPORT        = NO\n\n# Set the SIP_SUPPORT tag to YES if your project consists of sip (see:\n# https://www.riverbankcomputing.com/software/sip/intro) sources only. Doxygen\n# will parse them like normal C++ but will assume all classes use public instead\n# of private inheritance when no explicit protection keyword is present.\n# The default value is: NO.\n\nSIP_SUPPORT            = NO\n\n# For Microsoft's IDL there are propget and propput attributes to indicate\n# getter and setter methods for a property. Setting this option to YES will make\n# doxygen to replace the get and set methods by a property in the documentation.\n# This will only work if the methods are indeed getting or setting a simple\n# type. If this is not the case, or you want to show the methods anyway, you\n# should set this option to NO.\n# The default value is: YES.\n\nIDL_PROPERTY_SUPPORT   = YES\n\n# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC\n# tag is set to YES then doxygen will reuse the documentation of the first\n# member in the group (if any) for the other members of the group. By default\n# all members of a group must be documented explicitly.\n# The default value is: NO.\n\nDISTRIBUTE_GROUP_DOC   = NO\n\n# If one adds a struct or class to a group and this option is enabled, then also\n# any nested class or struct is added to the same group. By default this option\n# is disabled and one has to add nested compounds explicitly via \\ingroup.\n# The default value is: NO.\n\nGROUP_NESTED_COMPOUNDS = NO\n\n# Set the SUBGROUPING tag to YES to allow class member groups of the same type\n# (for instance a group of public functions) to be put as a subgroup of that\n# type (e.g. under the Public Functions section). Set it to NO to prevent\n# subgrouping. Alternatively, this can be done per class using the\n# \\nosubgrouping command.\n# The default value is: YES.\n\nSUBGROUPING            = YES\n\n# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions\n# are shown inside the group in which they are included (e.g. using \\ingroup)\n# instead of on a separate page (for HTML and Man pages) or section (for LaTeX\n# and RTF).\n#\n# Note that this feature does not work in combination with\n# SEPARATE_MEMBER_PAGES.\n# The default value is: NO.\n\nINLINE_GROUPED_CLASSES = NO\n\n# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions\n# with only public data fields or simple typedef fields will be shown inline in\n# the documentation of the scope in which they are defined (i.e. file,\n# namespace, or group documentation), provided this scope is documented. If set\n# to NO, structs, classes, and unions are shown on a separate page (for HTML and\n# Man pages) or section (for LaTeX and RTF).\n# The default value is: NO.\n\nINLINE_SIMPLE_STRUCTS  = NO\n\n# When TYPEDEF_HIDES_STRUCT tag is enabled, a typedef of a struct, union, or\n# enum is documented as struct, union, or enum with the name of the typedef. So\n# typedef struct TypeS {} TypeT, will appear in the documentation as a struct\n# with name TypeT. When disabled the typedef will appear as a member of a file,\n# namespace, or class. And the struct will be named TypeS. This can typically be\n# useful for C code in case the coding convention dictates that all compound\n# types are typedef'ed and only the typedef is referenced, never the tag name.\n# The default value is: NO.\n\nTYPEDEF_HIDES_STRUCT   = NO\n\n# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This\n# cache is used to resolve symbols given their name and scope. Since this can be\n# an expensive process and often the same symbol appears multiple times in the\n# code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small\n# doxygen will become slower. If the cache is too large, memory is wasted. The\n# cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range\n# is 0..9, the default is 0, corresponding to a cache size of 2^16=65536\n# symbols. At the end of a run doxygen will report the cache usage and suggest\n# the optimal cache size from a speed point of view.\n# Minimum value: 0, maximum value: 9, default value: 0.\n\nLOOKUP_CACHE_SIZE      = 0\n\n# The NUM_PROC_THREADS specifies the number of threads doxygen is allowed to use\n# during processing. When set to 0 doxygen will based this on the number of\n# cores available in the system. You can set it explicitly to a value larger\n# than 0 to get more control over the balance between CPU load and processing\n# speed. At this moment only the input processing can be done using multiple\n# threads. Since this is still an experimental feature the default is set to 1,\n# which effectively disables parallel processing. Please report any issues you\n# encounter. Generating dot graphs in parallel is controlled by the\n# DOT_NUM_THREADS setting.\n# Minimum value: 0, maximum value: 32, default value: 1.\n\nNUM_PROC_THREADS       = 1\n\n# If the TIMESTAMP tag is set different from NO then each generated page will\n# contain the date or date and time when the page was generated. Setting this to\n# NO can help when comparing the output of multiple runs.\n# Possible values are: YES, NO, DATETIME and DATE.\n# The default value is: NO.\n\nTIMESTAMP              = YES\n\n#---------------------------------------------------------------------------\n# Build related configuration options\n#---------------------------------------------------------------------------\n\n# If the EXTRACT_ALL tag is set to YES, doxygen will assume all entities in\n# documentation are documented, even if no documentation was available. Private\n# class members and static file members will be hidden unless the\n# EXTRACT_PRIVATE respectively EXTRACT_STATIC tags are set to YES.\n# Note: This will also disable the warnings about undocumented members that are\n# normally produced when WARNINGS is set to YES.\n# The default value is: NO.\n\nEXTRACT_ALL            = NO\n\n# If the EXTRACT_PRIVATE tag is set to YES, all private members of a class will\n# be included in the documentation.\n# The default value is: NO.\n\nEXTRACT_PRIVATE        = NO\n\n# If the EXTRACT_PRIV_VIRTUAL tag is set to YES, documented private virtual\n# methods of a class will be included in the documentation.\n# The default value is: NO.\n\nEXTRACT_PRIV_VIRTUAL   = NO\n\n# If the EXTRACT_PACKAGE tag is set to YES, all members with package or internal\n# scope will be included in the documentation.\n# The default value is: NO.\n\nEXTRACT_PACKAGE        = NO\n\n# If the EXTRACT_STATIC tag is set to YES, all static members of a file will be\n# included in the documentation.\n# The default value is: NO.\n\nEXTRACT_STATIC         = NO\n\n# If the EXTRACT_LOCAL_CLASSES tag is set to YES, classes (and structs) defined\n# locally in source files will be included in the documentation. If set to NO,\n# only classes defined in header files are included. Does not have any effect\n# for Java sources.\n# The default value is: YES.\n\nEXTRACT_LOCAL_CLASSES  = NO\n\n# This flag is only useful for Objective-C code. If set to YES, local methods,\n# which are defined in the implementation section but not in the interface are\n# included in the documentation. If set to NO, only methods in the interface are\n# included.\n# The default value is: NO.\n\nEXTRACT_LOCAL_METHODS  = NO\n\n# If this flag is set to YES, the members of anonymous namespaces will be\n# extracted and appear in the documentation as a namespace called\n# 'anonymous_namespace{file}', where file will be replaced with the base name of\n# the file that contains the anonymous namespace. By default anonymous namespace\n# are hidden.\n# The default value is: NO.\n\nEXTRACT_ANON_NSPACES   = NO\n\n# If this flag is set to YES, the name of an unnamed parameter in a declaration\n# will be determined by the corresponding definition. By default unnamed\n# parameters remain unnamed in the output.\n# The default value is: YES.\n\nRESOLVE_UNNAMED_PARAMS = YES\n\n# If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all\n# undocumented members inside documented classes or files. If set to NO these\n# members will be included in the various overviews, but no documentation\n# section is generated. This option has no effect if EXTRACT_ALL is enabled.\n# The default value is: NO.\n\nHIDE_UNDOC_MEMBERS     = YES\n\n# If the HIDE_UNDOC_CLASSES tag is set to YES, doxygen will hide all\n# undocumented classes that are normally visible in the class hierarchy. If set\n# to NO, these classes will be included in the various overviews. This option\n# will also hide undocumented C++ concepts if enabled. This option has no effect\n# if EXTRACT_ALL is enabled.\n# The default value is: NO.\n\nHIDE_UNDOC_CLASSES     = YES\n\n# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, doxygen will hide all friend\n# declarations. If set to NO, these declarations will be included in the\n# documentation.\n# The default value is: NO.\n\nHIDE_FRIEND_COMPOUNDS  = YES\n\n# If the HIDE_IN_BODY_DOCS tag is set to YES, doxygen will hide any\n# documentation blocks found inside the body of a function. If set to NO, these\n# blocks will be appended to the function's detailed documentation block.\n# The default value is: NO.\n\nHIDE_IN_BODY_DOCS      = NO\n\n# The INTERNAL_DOCS tag determines if documentation that is typed after a\n# \\internal command is included. If the tag is set to NO then the documentation\n# will be excluded. Set it to YES to include the internal documentation.\n# The default value is: NO.\n\nINTERNAL_DOCS          = NO\n\n# With the correct setting of option CASE_SENSE_NAMES doxygen will better be\n# able to match the capabilities of the underlying filesystem. In case the\n# filesystem is case sensitive (i.e. it supports files in the same directory\n# whose names only differ in casing), the option must be set to YES to properly\n# deal with such files in case they appear in the input. For filesystems that\n# are not case sensitive the option should be set to NO to properly deal with\n# output files written for symbols that only differ in casing, such as for two\n# classes, one named CLASS and the other named Class, and to also support\n# references to files without having to specify the exact matching casing. On\n# Windows (including Cygwin) and MacOS, users should typically set this option\n# to NO, whereas on Linux or other Unix flavors it should typically be set to\n# YES.\n# Possible values are: SYSTEM, NO and YES.\n# The default value is: SYSTEM.\n\nCASE_SENSE_NAMES       = NO\n\n# If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with\n# their full class and namespace scopes in the documentation. If set to YES, the\n# scope will be hidden.\n# The default value is: NO.\n\nHIDE_SCOPE_NAMES       = NO\n\n# If the HIDE_COMPOUND_REFERENCE tag is set to NO (default) then doxygen will\n# append additional text to a page's title, such as Class Reference. If set to\n# YES the compound reference will be hidden.\n# The default value is: NO.\n\nHIDE_COMPOUND_REFERENCE= NO\n\n# If the SHOW_HEADERFILE tag is set to YES then the documentation for a class\n# will show which file needs to be included to use the class.\n# The default value is: YES.\n\nSHOW_HEADERFILE        = YES\n\n# If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of\n# the files that are included by a file in the documentation of that file.\n# The default value is: YES.\n\nSHOW_INCLUDE_FILES     = YES\n\n# If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each\n# grouped member an include statement to the documentation, telling the reader\n# which file to include in order to use the member.\n# The default value is: NO.\n\nSHOW_GROUPED_MEMB_INC  = NO\n\n# If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include\n# files with double quotes in the documentation rather than with sharp brackets.\n# The default value is: NO.\n\nFORCE_LOCAL_INCLUDES   = NO\n\n# If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the\n# documentation for inline members.\n# The default value is: YES.\n\nINLINE_INFO            = YES\n\n# If the SORT_MEMBER_DOCS tag is set to YES then doxygen will sort the\n# (detailed) documentation of file and class members alphabetically by member\n# name. If set to NO, the members will appear in declaration order.\n# The default value is: YES.\n\nSORT_MEMBER_DOCS       = YES\n\n# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief\n# descriptions of file, namespace and class members alphabetically by member\n# name. If set to NO, the members will appear in declaration order. Note that\n# this will also influence the order of the classes in the class list.\n# The default value is: NO.\n\nSORT_BRIEF_DOCS        = NO\n\n# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the\n# (brief and detailed) documentation of class members so that constructors and\n# destructors are listed first. If set to NO the constructors will appear in the\n# respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS.\n# Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief\n# member documentation.\n# Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting\n# detailed member documentation.\n# The default value is: NO.\n\nSORT_MEMBERS_CTORS_1ST = NO\n\n# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the hierarchy\n# of group names into alphabetical order. If set to NO the group names will\n# appear in their defined order.\n# The default value is: NO.\n\nSORT_GROUP_NAMES       = NO\n\n# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be sorted by\n# fully-qualified names, including namespaces. If set to NO, the class list will\n# be sorted only by class name, not including the namespace part.\n# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.\n# Note: This option applies only to the class list, not to the alphabetical\n# list.\n# The default value is: NO.\n\nSORT_BY_SCOPE_NAME     = NO\n\n# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper\n# type resolution of all parameters of a function it will reject a match between\n# the prototype and the implementation of a member function even if there is\n# only one candidate or it is obvious which candidate to choose by doing a\n# simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still\n# accept a match between prototype and implementation in such cases.\n# The default value is: NO.\n\nSTRICT_PROTO_MATCHING  = NO\n\n# The GENERATE_TODOLIST tag can be used to enable (YES) or disable (NO) the todo\n# list. This list is created by putting \\todo commands in the documentation.\n# The default value is: YES.\n\nGENERATE_TODOLIST      = YES\n\n# The GENERATE_TESTLIST tag can be used to enable (YES) or disable (NO) the test\n# list. This list is created by putting \\test commands in the documentation.\n# The default value is: YES.\n\nGENERATE_TESTLIST      = YES\n\n# The GENERATE_BUGLIST tag can be used to enable (YES) or disable (NO) the bug\n# list. This list is created by putting \\bug commands in the documentation.\n# The default value is: YES.\n\nGENERATE_BUGLIST       = YES\n\n# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or disable (NO)\n# the deprecated list. This list is created by putting \\deprecated commands in\n# the documentation.\n# The default value is: YES.\n\nGENERATE_DEPRECATEDLIST= YES\n\n# The ENABLED_SECTIONS tag can be used to enable conditional documentation\n# sections, marked by \\if <section_label> ... \\endif and \\cond <section_label>\n# ... \\endcond blocks.\n\nENABLED_SECTIONS       = LIBAVOID_DOC\n\n# The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the\n# initial value of a variable or macro / define can have for it to appear in the\n# documentation. If the initializer consists of more lines than specified here\n# it will be hidden. Use a value of 0 to hide initializers completely. The\n# appearance of the value of individual variables and macros / defines can be\n# controlled using \\showinitializer or \\hideinitializer command in the\n# documentation regardless of this setting.\n# Minimum value: 0, maximum value: 10000, default value: 30.\n\nMAX_INITIALIZER_LINES  = 30\n\n# Set the SHOW_USED_FILES tag to NO to disable the list of files generated at\n# the bottom of the documentation of classes and structs. If set to YES, the\n# list will mention the files that were used to generate the documentation.\n# The default value is: YES.\n\nSHOW_USED_FILES        = YES\n\n# Set the SHOW_FILES tag to NO to disable the generation of the Files page. This\n# will remove the Files entry from the Quick Index and from the Folder Tree View\n# (if specified).\n# The default value is: YES.\n\nSHOW_FILES             = YES\n\n# Set the SHOW_NAMESPACES tag to NO to disable the generation of the Namespaces\n# page. This will remove the Namespaces entry from the Quick Index and from the\n# Folder Tree View (if specified).\n# The default value is: YES.\n\nSHOW_NAMESPACES        = YES\n\n# The FILE_VERSION_FILTER tag can be used to specify a program or script that\n# doxygen should invoke to get the current version for each file (typically from\n# the version control system). Doxygen will invoke the program by executing (via\n# popen()) the command command input-file, where command is the value of the\n# FILE_VERSION_FILTER tag, and input-file is the name of an input file provided\n# by doxygen. Whatever the program writes to standard output is used as the file\n# version. For an example see the documentation.\n\nFILE_VERSION_FILTER    =\n\n# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed\n# by doxygen. The layout file controls the global structure of the generated\n# output files in an output format independent way. To create the layout file\n# that represents doxygen's defaults, run doxygen with the -l option. You can\n# optionally specify a file name after the option, if omitted DoxygenLayout.xml\n# will be used as the name of the layout file. See also section \"Changing the\n# layout of pages\" for information.\n#\n# Note that if you run doxygen from a directory containing a file called\n# DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE\n# tag is left empty.\n\nLAYOUT_FILE            =\n\n# The CITE_BIB_FILES tag can be used to specify one or more bib files containing\n# the reference definitions. This must be a list of .bib files. The .bib\n# extension is automatically appended if omitted. This requires the bibtex tool\n# to be installed. See also https://en.wikipedia.org/wiki/BibTeX for more info.\n# For LaTeX the style of the bibliography can be controlled using\n# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the\n# search path. See also \\cite for info how to create references.\n\nCITE_BIB_FILES         =\n\n#---------------------------------------------------------------------------\n# Configuration options related to warning and progress messages\n#---------------------------------------------------------------------------\n\n# The QUIET tag can be used to turn on/off the messages that are generated to\n# standard output by doxygen. If QUIET is set to YES this implies that the\n# messages are off.\n# The default value is: NO.\n\nQUIET                  = NO\n\n# The WARNINGS tag can be used to turn on/off the warning messages that are\n# generated to standard error (stderr) by doxygen. If WARNINGS is set to YES\n# this implies that the warnings are on.\n#\n# Tip: Turn warnings on while writing the documentation.\n# The default value is: YES.\n\nWARNINGS               = YES\n\n# If the WARN_IF_UNDOCUMENTED tag is set to YES then doxygen will generate\n# warnings for undocumented members. If EXTRACT_ALL is set to YES then this flag\n# will automatically be disabled.\n# The default value is: YES.\n\nWARN_IF_UNDOCUMENTED   = YES\n\n# If the WARN_IF_DOC_ERROR tag is set to YES, doxygen will generate warnings for\n# potential errors in the documentation, such as documenting some parameters in\n# a documented function twice, or documenting parameters that don't exist or\n# using markup commands wrongly.\n# The default value is: YES.\n\nWARN_IF_DOC_ERROR      = YES\n\n# If WARN_IF_INCOMPLETE_DOC is set to YES, doxygen will warn about incomplete\n# function parameter documentation. If set to NO, doxygen will accept that some\n# parameters have no documentation without warning.\n# The default value is: YES.\n\nWARN_IF_INCOMPLETE_DOC = YES\n\n# This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that\n# are documented, but have no documentation for their parameters or return\n# value. If set to NO, doxygen will only warn about wrong parameter\n# documentation, but not about the absence of documentation. If EXTRACT_ALL is\n# set to YES then this flag will automatically be disabled. See also\n# WARN_IF_INCOMPLETE_DOC\n# The default value is: NO.\n\nWARN_NO_PARAMDOC       = NO\n\n# If WARN_IF_UNDOC_ENUM_VAL option is set to YES, doxygen will warn about\n# undocumented enumeration values. If set to NO, doxygen will accept\n# undocumented enumeration values. If EXTRACT_ALL is set to YES then this flag\n# will automatically be disabled.\n# The default value is: NO.\n\nWARN_IF_UNDOC_ENUM_VAL = NO\n\n# If the WARN_AS_ERROR tag is set to YES then doxygen will immediately stop when\n# a warning is encountered. If the WARN_AS_ERROR tag is set to FAIL_ON_WARNINGS\n# then doxygen will continue running as if WARN_AS_ERROR tag is set to NO, but\n# at the end of the doxygen process doxygen will return with a non-zero status.\n# If the WARN_AS_ERROR tag is set to FAIL_ON_WARNINGS_PRINT then doxygen behaves\n# like FAIL_ON_WARNINGS but in case no WARN_LOGFILE is defined doxygen will not\n# write the warning messages in between other messages but write them at the end\n# of a run, in case a WARN_LOGFILE is defined the warning messages will be\n# besides being in the defined file also be shown at the end of a run, unless\n# the WARN_LOGFILE is defined as - i.e. standard output (stdout) in that case\n# the behavior will remain as with the setting FAIL_ON_WARNINGS.\n# Possible values are: NO, YES, FAIL_ON_WARNINGS and FAIL_ON_WARNINGS_PRINT.\n# The default value is: NO.\n\nWARN_AS_ERROR          = NO\n\n# The WARN_FORMAT tag determines the format of the warning messages that doxygen\n# can produce. The string should contain the $file, $line, and $text tags, which\n# will be replaced by the file and line number from which the warning originated\n# and the warning text. Optionally the format may contain $version, which will\n# be replaced by the version of the file (if it could be obtained via\n# FILE_VERSION_FILTER)\n# See also: WARN_LINE_FORMAT\n# The default value is: $file:$line: $text.\n\nWARN_FORMAT            = \"$file:$line: $text\"\n\n# In the $text part of the WARN_FORMAT command it is possible that a reference\n# to a more specific place is given. To make it easier to jump to this place\n# (outside of doxygen) the user can define a custom \"cut\" / \"paste\" string.\n# Example:\n# WARN_LINE_FORMAT = \"'vi $file +$line'\"\n# See also: WARN_FORMAT\n# The default value is: at line $line of file $file.\n\nWARN_LINE_FORMAT       = \"at line $line of file $file\"\n\n# The WARN_LOGFILE tag can be used to specify a file to which warning and error\n# messages should be written. If left blank the output is written to standard\n# error (stderr). In case the file specified cannot be opened for writing the\n# warning and error messages are written to standard error. When as file - is\n# specified the warning and error messages are written to standard output\n# (stdout).\n\nWARN_LOGFILE           =\n\n#---------------------------------------------------------------------------\n# Configuration options related to the input files\n#---------------------------------------------------------------------------\n\n# The INPUT tag is used to specify the files and/or directories that contain\n# documented source files. You may enter file names like myfile.cpp or\n# directories like /usr/src/myproject. Separate the files or directories with\n# spaces. See also FILE_PATTERNS and EXTENSION_MAPPING\n# Note: If this tag is empty the current directory is searched.\n\nINPUT                  = . \\\n                         doc\n\n# This tag can be used to specify the character encoding of the source files\n# that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses\n# libiconv (or the iconv built into libc) for the transcoding. See the libiconv\n# documentation (see:\n# https://www.gnu.org/software/libiconv/) for the list of possible encodings.\n# See also: INPUT_FILE_ENCODING\n# The default value is: UTF-8.\n\nINPUT_ENCODING         = UTF-8\n\n# This tag can be used to specify the character encoding of the source files\n# that doxygen parses The INPUT_FILE_ENCODING tag can be used to specify\n# character encoding on a per file pattern basis. Doxygen will compare the file\n# name with each pattern and apply the encoding instead of the default\n# INPUT_ENCODING) if there is a match. The character encodings are a list of the\n# form: pattern=encoding (like *.php=ISO-8859-1). See cfg_input_encoding\n# \"INPUT_ENCODING\" for further information on supported encodings.\n\nINPUT_FILE_ENCODING    =\n\n# If the value of the INPUT tag contains directories, you can use the\n# FILE_PATTERNS tag to specify one or more wildcard patterns (like *.cpp and\n# *.h) to filter out the source-files in the directories.\n#\n# Note that for custom extensions or not directly supported extensions you also\n# need to set EXTENSION_MAPPING for the extension otherwise the files are not\n# read by doxygen.\n#\n# Note the list of default checked file patterns might differ from the list of\n# default file extension mappings.\n#\n# If left blank the following patterns are tested:*.c, *.cc, *.cxx, *.cxxm,\n# *.cpp, *.cppm, *.c++, *.c++m, *.java, *.ii, *.ixx, *.ipp, *.i++, *.inl, *.idl,\n# *.ddl, *.odl, *.h, *.hh, *.hxx, *.hpp, *.h++, *.ixx, *.l, *.cs, *.d, *.php,\n# *.php4, *.php5, *.phtml, *.inc, *.m, *.markdown, *.md, *.mm, *.dox (to be\n# provided as doxygen C comment), *.py, *.pyw, *.f90, *.f95, *.f03, *.f08,\n# *.f18, *.f, *.for, *.vhd, *.vhdl, *.ucf, *.qsf and *.ice.\n\nFILE_PATTERNS          = *.cpp \\\n                         *.h \\\n                         *.doc\n\n# The RECURSIVE tag can be used to specify whether or not subdirectories should\n# be searched for input files as well.\n# The default value is: NO.\n\nRECURSIVE              = NO\n\n# The EXCLUDE tag can be used to specify files and/or directories that should be\n# excluded from the INPUT source files. This way you can easily exclude a\n# subdirectory from a directory tree whose root is specified with the INPUT tag.\n#\n# Note that relative paths are relative to the directory from which doxygen is\n# run.\n\nEXCLUDE                =\n\n# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or\n# directories that are symbolic links (a Unix file system feature) are excluded\n# from the input.\n# The default value is: NO.\n\nEXCLUDE_SYMLINKS       = NO\n\n# If the value of the INPUT tag contains directories, you can use the\n# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude\n# certain files from those directories.\n#\n# Note that the wildcards are matched against the file with absolute path, so to\n# exclude all test directories for example use the pattern */test/*\n\nEXCLUDE_PATTERNS       =\n\n# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names\n# (namespaces, classes, functions, etc.) that should be excluded from the\n# output. The symbol name can be a fully qualified name, a word, or if the\n# wildcard * is used, a substring. Examples: ANamespace, AClass,\n# ANamespace::AClass, ANamespace::*Test\n\nEXCLUDE_SYMBOLS        =\n\n# The EXAMPLE_PATH tag can be used to specify one or more files or directories\n# that contain example code fragments that are included (see the \\include\n# command).\n\nEXAMPLE_PATH           =\n\n# If the value of the EXAMPLE_PATH tag contains directories, you can use the\n# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp and\n# *.h) to filter out the source-files in the directories. If left blank all\n# files are included.\n\nEXAMPLE_PATTERNS       =\n\n# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be\n# searched for input files to be used with the \\include or \\dontinclude commands\n# irrespective of the value of the RECURSIVE tag.\n# The default value is: NO.\n\nEXAMPLE_RECURSIVE      = NO\n\n# The IMAGE_PATH tag can be used to specify one or more files or directories\n# that contain images that are to be included in the documentation (see the\n# \\image command).\n\nIMAGE_PATH             =\n\n# The INPUT_FILTER tag can be used to specify a program that doxygen should\n# invoke to filter for each input file. Doxygen will invoke the filter program\n# by executing (via popen()) the command:\n#\n# <filter> <input-file>\n#\n# where <filter> is the value of the INPUT_FILTER tag, and <input-file> is the\n# name of an input file. Doxygen will then use the output that the filter\n# program writes to standard output. If FILTER_PATTERNS is specified, this tag\n# will be ignored.\n#\n# Note that the filter must not add or remove lines; it is applied before the\n# code is scanned, but not when the output code is generated. If lines are added\n# or removed, the anchors will not be placed correctly.\n#\n# Note that doxygen will use the data processed and written to standard output\n# for further processing, therefore nothing else, like debug statements or used\n# commands (so in case of a Windows batch file always use @echo OFF), should be\n# written to standard output.\n#\n# Note that for custom extensions or not directly supported extensions you also\n# need to set EXTENSION_MAPPING for the extension otherwise the files are not\n# properly processed by doxygen.\n\nINPUT_FILTER           =\n\n# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern\n# basis. Doxygen will compare the file name with each pattern and apply the\n# filter if there is a match. The filters are a list of the form: pattern=filter\n# (like *.cpp=my_cpp_filter). See INPUT_FILTER for further information on how\n# filters are used. If the FILTER_PATTERNS tag is empty or if none of the\n# patterns match the file name, INPUT_FILTER is applied.\n#\n# Note that for custom extensions or not directly supported extensions you also\n# need to set EXTENSION_MAPPING for the extension otherwise the files are not\n# properly processed by doxygen.\n\nFILTER_PATTERNS        =\n\n# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using\n# INPUT_FILTER) will also be used to filter the input files that are used for\n# producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES).\n# The default value is: NO.\n\nFILTER_SOURCE_FILES    = NO\n\n# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file\n# pattern. A pattern will override the setting for FILTER_PATTERN (if any) and\n# it is also possible to disable source filtering for a specific pattern using\n# *.ext= (so without naming a filter).\n# This tag requires that the tag FILTER_SOURCE_FILES is set to YES.\n\nFILTER_SOURCE_PATTERNS =\n\n# If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that\n# is part of the input, its contents will be placed on the main page\n# (index.html). This can be useful if you have a project on for instance GitHub\n# and want to reuse the introduction page also for the doxygen output.\n\nUSE_MDFILE_AS_MAINPAGE =\n\n# The Fortran standard specifies that for fixed formatted Fortran code all\n# characters from position 72 are to be considered as comment. A common\n# extension is to allow longer lines before the automatic comment starts. The\n# setting FORTRAN_COMMENT_AFTER will also make it possible that longer lines can\n# be processed before the automatic comment starts.\n# Minimum value: 7, maximum value: 10000, default value: 72.\n\nFORTRAN_COMMENT_AFTER  = 72\n\n#---------------------------------------------------------------------------\n# Configuration options related to source browsing\n#---------------------------------------------------------------------------\n\n# If the SOURCE_BROWSER tag is set to YES then a list of source files will be\n# generated. Documented entities will be cross-referenced with these sources.\n#\n# Note: To get rid of all source code in the generated output, make sure that\n# also VERBATIM_HEADERS is set to NO.\n# The default value is: NO.\n\nSOURCE_BROWSER         = NO\n\n# Setting the INLINE_SOURCES tag to YES will include the body of functions,\n# classes and enums directly into the documentation.\n# The default value is: NO.\n\nINLINE_SOURCES         = NO\n\n# Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any\n# special comment blocks from generated source code fragments. Normal C, C++ and\n# Fortran comments will always remain visible.\n# The default value is: YES.\n\nSTRIP_CODE_COMMENTS    = YES\n\n# If the REFERENCED_BY_RELATION tag is set to YES then for each documented\n# entity all documented functions referencing it will be listed.\n# The default value is: NO.\n\nREFERENCED_BY_RELATION = NO\n\n# If the REFERENCES_RELATION tag is set to YES then for each documented function\n# all documented entities called/used by that function will be listed.\n# The default value is: NO.\n\nREFERENCES_RELATION    = NO\n\n# If the REFERENCES_LINK_SOURCE tag is set to YES and SOURCE_BROWSER tag is set\n# to YES then the hyperlinks from functions in REFERENCES_RELATION and\n# REFERENCED_BY_RELATION lists will link to the source code. Otherwise they will\n# link to the documentation.\n# The default value is: YES.\n\nREFERENCES_LINK_SOURCE = YES\n\n# If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the\n# source code will show a tooltip with additional information such as prototype,\n# brief description and links to the definition and documentation. Since this\n# will make the HTML file larger and loading of large files a bit slower, you\n# can opt to disable this feature.\n# The default value is: YES.\n# This tag requires that the tag SOURCE_BROWSER is set to YES.\n\nSOURCE_TOOLTIPS        = YES\n\n# If the USE_HTAGS tag is set to YES then the references to source code will\n# point to the HTML generated by the htags(1) tool instead of doxygen built-in\n# source browser. The htags tool is part of GNU's global source tagging system\n# (see https://www.gnu.org/software/global/global.html). You will need version\n# 4.8.6 or higher.\n#\n# To use it do the following:\n# - Install the latest version of global\n# - Enable SOURCE_BROWSER and USE_HTAGS in the configuration file\n# - Make sure the INPUT points to the root of the source tree\n# - Run doxygen as normal\n#\n# Doxygen will invoke htags (and that will in turn invoke gtags), so these\n# tools must be available from the command line (i.e. in the search path).\n#\n# The result: instead of the source browser generated by doxygen, the links to\n# source code will now point to the output of htags.\n# The default value is: NO.\n# This tag requires that the tag SOURCE_BROWSER is set to YES.\n\nUSE_HTAGS              = NO\n\n# If the VERBATIM_HEADERS tag is set the YES then doxygen will generate a\n# verbatim copy of the header file for each class for which an include is\n# specified. Set to NO to disable this.\n# See also: Section \\class.\n# The default value is: YES.\n\nVERBATIM_HEADERS       = YES\n\n#---------------------------------------------------------------------------\n# Configuration options related to the alphabetical class index\n#---------------------------------------------------------------------------\n\n# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index of all\n# compounds will be generated. Enable this if the project contains a lot of\n# classes, structs, unions or interfaces.\n# The default value is: YES.\n\nALPHABETICAL_INDEX     = NO\n\n# The IGNORE_PREFIX tag can be used to specify a prefix (or a list of prefixes)\n# that should be ignored while generating the index headers. The IGNORE_PREFIX\n# tag works for classes, function and member names. The entity will be placed in\n# the alphabetical list under the first letter of the entity name that remains\n# after removing the prefix.\n# This tag requires that the tag ALPHABETICAL_INDEX is set to YES.\n\nIGNORE_PREFIX          =\n\n#---------------------------------------------------------------------------\n# Configuration options related to the HTML output\n#---------------------------------------------------------------------------\n\n# If the GENERATE_HTML tag is set to YES, doxygen will generate HTML output\n# The default value is: YES.\n\nGENERATE_HTML          = YES\n\n# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. If a\n# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of\n# it.\n# The default directory is: html.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nHTML_OUTPUT            = html\n\n# The HTML_FILE_EXTENSION tag can be used to specify the file extension for each\n# generated HTML page (for example: .htm, .php, .asp).\n# The default value is: .html.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nHTML_FILE_EXTENSION    = .html\n\n# The HTML_HEADER tag can be used to specify a user-defined HTML header file for\n# each generated HTML page. If the tag is left blank doxygen will generate a\n# standard header.\n#\n# To get valid HTML the header file that includes any scripts and style sheets\n# that doxygen needs, which is dependent on the configuration options used (e.g.\n# the setting GENERATE_TREEVIEW). It is highly recommended to start with a\n# default header using\n# doxygen -w html new_header.html new_footer.html new_stylesheet.css\n# YourConfigFile\n# and then modify the file new_header.html. See also section \"Doxygen usage\"\n# for information on how to generate the default header that doxygen normally\n# uses.\n# Note: The header is subject to change so you typically have to regenerate the\n# default header when upgrading to a newer version of doxygen. For a description\n# of the possible markers and block names see the documentation.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nHTML_HEADER            = \n\n# The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each\n# generated HTML page. If the tag is left blank doxygen will generate a standard\n# footer. See HTML_HEADER for more information on how to generate a default\n# footer and what special commands can be used inside the footer. See also\n# section \"Doxygen usage\" for information on how to generate the default footer\n# that doxygen normally uses.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nHTML_FOOTER            =\n\n# The HTML_STYLESHEET tag can be used to specify a user-defined cascading style\n# sheet that is used by each HTML page. It can be used to fine-tune the look of\n# the HTML output. If left blank doxygen will generate a default style sheet.\n# See also section \"Doxygen usage\" for information on how to generate the style\n# sheet that doxygen normally uses.\n# Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as\n# it is more robust and this tag (HTML_STYLESHEET) will in the future become\n# obsolete.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nHTML_STYLESHEET        =\n\n# The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined\n# cascading style sheets that are included after the standard style sheets\n# created by doxygen. Using this option one can overrule certain style aspects.\n# This is preferred over using HTML_STYLESHEET since it does not replace the\n# standard style sheet and is therefore more robust against future updates.\n# Doxygen will copy the style sheet files to the output directory.\n# Note: The order of the extra style sheet files is of importance (e.g. the last\n# style sheet in the list overrules the setting of the previous ones in the\n# list).\n# Note: Since the styling of scrollbars can currently not be overruled in\n# Webkit/Chromium, the styling will be left out of the default doxygen.css if\n# one or more extra stylesheets have been specified. So if scrollbar\n# customization is desired it has to be added explicitly. For an example see the\n# documentation.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nHTML_EXTRA_STYLESHEET  =\n\n# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or\n# other source files which should be copied to the HTML output directory. Note\n# that these files will be copied to the base HTML output directory. Use the\n# $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these\n# files. In the HTML_STYLESHEET file, use the file name only. Also note that the\n# files will be copied as-is; there are no commands or markers available.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nHTML_EXTRA_FILES       =\n\n# The HTML_COLORSTYLE tag can be used to specify if the generated HTML output\n# should be rendered with a dark or light theme.\n# Possible values are: LIGHT always generate light mode output, DARK always\n# generate dark mode output, AUTO_LIGHT automatically set the mode according to\n# the user preference, use light mode if no preference is set (the default),\n# AUTO_DARK automatically set the mode according to the user preference, use\n# dark mode if no preference is set and TOGGLE allow to user to switch between\n# light and dark mode via a button.\n# The default value is: AUTO_LIGHT.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nHTML_COLORSTYLE        = AUTO_LIGHT\n\n# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen\n# will adjust the colors in the style sheet and background images according to\n# this color. Hue is specified as an angle on a color-wheel, see\n# https://en.wikipedia.org/wiki/Hue for more information. For instance the value\n# 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300\n# purple, and 360 is red again.\n# Minimum value: 0, maximum value: 359, default value: 220.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nHTML_COLORSTYLE_HUE    = 220\n\n# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors\n# in the HTML output. For a value of 0 the output will use gray-scales only. A\n# value of 255 will produce the most vivid colors.\n# Minimum value: 0, maximum value: 255, default value: 100.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nHTML_COLORSTYLE_SAT    = 100\n\n# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the\n# luminance component of the colors in the HTML output. Values below 100\n# gradually make the output lighter, whereas values above 100 make the output\n# darker. The value divided by 100 is the actual gamma applied, so 80 represents\n# a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not\n# change the gamma.\n# Minimum value: 40, maximum value: 240, default value: 80.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nHTML_COLORSTYLE_GAMMA  = 80\n\n# If the HTML_DYNAMIC_MENUS tag is set to YES then the generated HTML\n# documentation will contain a main index with vertical navigation menus that\n# are dynamically created via JavaScript. If disabled, the navigation index will\n# consists of multiple levels of tabs that are statically embedded in every HTML\n# page. Disable this option to support browsers that do not have JavaScript,\n# like the Qt help browser.\n# The default value is: YES.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nHTML_DYNAMIC_MENUS     = YES\n\n# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML\n# documentation will contain sections that can be hidden and shown after the\n# page has loaded.\n# The default value is: NO.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nHTML_DYNAMIC_SECTIONS  = NO\n\n# If the HTML_CODE_FOLDING tag is set to YES then classes and functions can be\n# dynamically folded and expanded in the generated HTML source code.\n# The default value is: YES.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nHTML_CODE_FOLDING      = YES\n\n# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries\n# shown in the various tree structured indices initially; the user can expand\n# and collapse entries dynamically later on. Doxygen will expand the tree to\n# such a level that at most the specified number of entries are visible (unless\n# a fully collapsed tree already exceeds this amount). So setting the number of\n# entries 1 will produce a full collapsed tree by default. 0 is a special value\n# representing an infinite number of entries and will result in a full expanded\n# tree by default.\n# Minimum value: 0, maximum value: 9999, default value: 100.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nHTML_INDEX_NUM_ENTRIES = 100\n\n# If the GENERATE_DOCSET tag is set to YES, additional index files will be\n# generated that can be used as input for Apple's Xcode 3 integrated development\n# environment (see:\n# https://developer.apple.com/xcode/), introduced with OSX 10.5 (Leopard). To\n# create a documentation set, doxygen will generate a Makefile in the HTML\n# output directory. Running make will produce the docset in that directory and\n# running make install will install the docset in\n# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find it at\n# startup. See https://developer.apple.com/library/archive/featuredarticles/Doxy\n# genXcode/_index.html for more information.\n# The default value is: NO.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nGENERATE_DOCSET        = NO\n\n# This tag determines the name of the docset feed. A documentation feed provides\n# an umbrella under which multiple documentation sets from a single provider\n# (such as a company or product suite) can be grouped.\n# The default value is: Doxygen generated docs.\n# This tag requires that the tag GENERATE_DOCSET is set to YES.\n\nDOCSET_FEEDNAME        = \"Doxygen generated docs\"\n\n# This tag determines the URL of the docset feed. A documentation feed provides\n# an umbrella under which multiple documentation sets from a single provider\n# (such as a company or product suite) can be grouped.\n# This tag requires that the tag GENERATE_DOCSET is set to YES.\n\nDOCSET_FEEDURL         =\n\n# This tag specifies a string that should uniquely identify the documentation\n# set bundle. This should be a reverse domain-name style string, e.g.\n# com.mycompany.MyDocSet. Doxygen will append .docset to the name.\n# The default value is: org.doxygen.Project.\n# This tag requires that the tag GENERATE_DOCSET is set to YES.\n\nDOCSET_BUNDLE_ID       = org.doxygen.Project\n\n# The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify\n# the documentation publisher. This should be a reverse domain-name style\n# string, e.g. com.mycompany.MyDocSet.documentation.\n# The default value is: org.doxygen.Publisher.\n# This tag requires that the tag GENERATE_DOCSET is set to YES.\n\nDOCSET_PUBLISHER_ID    = org.doxygen.Publisher\n\n# The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher.\n# The default value is: Publisher.\n# This tag requires that the tag GENERATE_DOCSET is set to YES.\n\nDOCSET_PUBLISHER_NAME  = Publisher\n\n# If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three\n# additional HTML index files: index.hhp, index.hhc, and index.hhk. The\n# index.hhp is a project file that can be read by Microsoft's HTML Help Workshop\n# on Windows. In the beginning of 2021 Microsoft took the original page, with\n# a.o. the download links, offline the HTML help workshop was already many years\n# in maintenance mode). You can download the HTML help workshop from the web\n# archives at Installation executable (see:\n# http://web.archive.org/web/20160201063255/http://download.microsoft.com/downlo\n# ad/0/A/9/0A939EF6-E31C-430F-A3DF-DFAE7960D564/htmlhelp.exe).\n#\n# The HTML Help Workshop contains a compiler that can convert all HTML output\n# generated by doxygen into a single compiled HTML file (.chm). Compiled HTML\n# files are now used as the Windows 98 help format, and will replace the old\n# Windows help format (.hlp) on all Windows platforms in the future. Compressed\n# HTML files also contain an index, a table of contents, and you can search for\n# words in the documentation. The HTML workshop also contains a viewer for\n# compressed HTML files.\n# The default value is: NO.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nGENERATE_HTMLHELP      = NO\n\n# The CHM_FILE tag can be used to specify the file name of the resulting .chm\n# file. You can add a path in front of the file if the result should not be\n# written to the html output directory.\n# This tag requires that the tag GENERATE_HTMLHELP is set to YES.\n\nCHM_FILE               =\n\n# The HHC_LOCATION tag can be used to specify the location (absolute path\n# including file name) of the HTML help compiler (hhc.exe). If non-empty,\n# doxygen will try to run the HTML help compiler on the generated index.hhp.\n# The file has to be specified with full path.\n# This tag requires that the tag GENERATE_HTMLHELP is set to YES.\n\nHHC_LOCATION           =\n\n# The GENERATE_CHI flag controls if a separate .chi index file is generated\n# (YES) or that it should be included in the main .chm file (NO).\n# The default value is: NO.\n# This tag requires that the tag GENERATE_HTMLHELP is set to YES.\n\nGENERATE_CHI           = NO\n\n# The CHM_INDEX_ENCODING is used to encode HtmlHelp index (hhk), content (hhc)\n# and project file content.\n# This tag requires that the tag GENERATE_HTMLHELP is set to YES.\n\nCHM_INDEX_ENCODING     =\n\n# The BINARY_TOC flag controls whether a binary table of contents is generated\n# (YES) or a normal table of contents (NO) in the .chm file. Furthermore it\n# enables the Previous and Next buttons.\n# The default value is: NO.\n# This tag requires that the tag GENERATE_HTMLHELP is set to YES.\n\nBINARY_TOC             = NO\n\n# The TOC_EXPAND flag can be set to YES to add extra items for group members to\n# the table of contents of the HTML help documentation and to the tree view.\n# The default value is: NO.\n# This tag requires that the tag GENERATE_HTMLHELP is set to YES.\n\nTOC_EXPAND             = NO\n\n# The SITEMAP_URL tag is used to specify the full URL of the place where the\n# generated documentation will be placed on the server by the user during the\n# deployment of the documentation. The generated sitemap is called sitemap.xml\n# and placed on the directory specified by HTML_OUTPUT. In case no SITEMAP_URL\n# is specified no sitemap is generated. For information about the sitemap\n# protocol see https://www.sitemaps.org\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nSITEMAP_URL            =\n\n# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and\n# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated that\n# can be used as input for Qt's qhelpgenerator to generate a Qt Compressed Help\n# (.qch) of the generated HTML documentation.\n# The default value is: NO.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nGENERATE_QHP           = NO\n\n# If the QHG_LOCATION tag is specified, the QCH_FILE tag can be used to specify\n# the file name of the resulting .qch file. The path specified is relative to\n# the HTML output folder.\n# This tag requires that the tag GENERATE_QHP is set to YES.\n\nQCH_FILE               =\n\n# The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help\n# Project output. For more information please see Qt Help Project / Namespace\n# (see:\n# https://doc.qt.io/archives/qt-4.8/qthelpproject.html#namespace).\n# The default value is: org.doxygen.Project.\n# This tag requires that the tag GENERATE_QHP is set to YES.\n\nQHP_NAMESPACE          =\n\n# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating Qt\n# Help Project output. For more information please see Qt Help Project / Virtual\n# Folders (see:\n# https://doc.qt.io/archives/qt-4.8/qthelpproject.html#virtual-folders).\n# The default value is: doc.\n# This tag requires that the tag GENERATE_QHP is set to YES.\n\nQHP_VIRTUAL_FOLDER     = doc\n\n# If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom\n# filter to add. For more information please see Qt Help Project / Custom\n# Filters (see:\n# https://doc.qt.io/archives/qt-4.8/qthelpproject.html#custom-filters).\n# This tag requires that the tag GENERATE_QHP is set to YES.\n\nQHP_CUST_FILTER_NAME   =\n\n# The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the\n# custom filter to add. For more information please see Qt Help Project / Custom\n# Filters (see:\n# https://doc.qt.io/archives/qt-4.8/qthelpproject.html#custom-filters).\n# This tag requires that the tag GENERATE_QHP is set to YES.\n\nQHP_CUST_FILTER_ATTRS  =\n\n# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this\n# project's filter section matches. Qt Help Project / Filter Attributes (see:\n# https://doc.qt.io/archives/qt-4.8/qthelpproject.html#filter-attributes).\n# This tag requires that the tag GENERATE_QHP is set to YES.\n\nQHP_SECT_FILTER_ATTRS  =\n\n# The QHG_LOCATION tag can be used to specify the location (absolute path\n# including file name) of Qt's qhelpgenerator. If non-empty doxygen will try to\n# run qhelpgenerator on the generated .qhp file.\n# This tag requires that the tag GENERATE_QHP is set to YES.\n\nQHG_LOCATION           =\n\n# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be\n# generated, together with the HTML files, they form an Eclipse help plugin. To\n# install this plugin and make it available under the help contents menu in\n# Eclipse, the contents of the directory containing the HTML and XML files needs\n# to be copied into the plugins directory of eclipse. The name of the directory\n# within the plugins directory should be the same as the ECLIPSE_DOC_ID value.\n# After copying Eclipse needs to be restarted before the help appears.\n# The default value is: NO.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nGENERATE_ECLIPSEHELP   = NO\n\n# A unique identifier for the Eclipse help plugin. When installing the plugin\n# the directory name containing the HTML and XML files should also have this\n# name. Each documentation set should have its own identifier.\n# The default value is: org.doxygen.Project.\n# This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES.\n\nECLIPSE_DOC_ID         = org.doxygen.Project\n\n# If you want full control over the layout of the generated HTML pages it might\n# be necessary to disable the index and replace it with your own. The\n# DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top\n# of each HTML page. A value of NO enables the index and the value YES disables\n# it. Since the tabs in the index contain the same information as the navigation\n# tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES.\n# The default value is: NO.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nDISABLE_INDEX          = NO\n\n# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index\n# structure should be generated to display hierarchical information. If the tag\n# value is set to YES, a side panel will be generated containing a tree-like\n# index structure (just like the one that is generated for HTML Help). For this\n# to work a browser that supports JavaScript, DHTML, CSS and frames is required\n# (i.e. any modern browser). Windows users are probably better off using the\n# HTML help feature. Via custom style sheets (see HTML_EXTRA_STYLESHEET) one can\n# further fine tune the look of the index (see \"Fine-tuning the output\"). As an\n# example, the default style sheet generated by doxygen has an example that\n# shows how to put an image at the root of the tree instead of the PROJECT_NAME.\n# Since the tree basically has the same information as the tab index, you could\n# consider setting DISABLE_INDEX to YES when enabling this option.\n# The default value is: NO.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nGENERATE_TREEVIEW      = NONE\n\n# When both GENERATE_TREEVIEW and DISABLE_INDEX are set to YES, then the\n# FULL_SIDEBAR option determines if the side bar is limited to only the treeview\n# area (value NO) or if it should extend to the full height of the window (value\n# YES). Setting this to YES gives a layout similar to\n# https://docs.readthedocs.io with more room for contents, but less room for the\n# project logo, title, and description. If either GENERATE_TREEVIEW or\n# DISABLE_INDEX is set to NO, this option has no effect.\n# The default value is: NO.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nFULL_SIDEBAR           = NO\n\n# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that\n# doxygen will group on one line in the generated HTML documentation.\n#\n# Note that a value of 0 will completely suppress the enum values from appearing\n# in the overview section.\n# Minimum value: 0, maximum value: 20, default value: 4.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nENUM_VALUES_PER_LINE   = 4\n\n# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be used\n# to set the initial width (in pixels) of the frame in which the tree is shown.\n# Minimum value: 0, maximum value: 1500, default value: 250.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nTREEVIEW_WIDTH         = 250\n\n# If the EXT_LINKS_IN_WINDOW option is set to YES, doxygen will open links to\n# external symbols imported via tag files in a separate window.\n# The default value is: NO.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nEXT_LINKS_IN_WINDOW    = NO\n\n# If the OBFUSCATE_EMAILS tag is set to YES, doxygen will obfuscate email\n# addresses.\n# The default value is: YES.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nOBFUSCATE_EMAILS       = YES\n\n# If the HTML_FORMULA_FORMAT option is set to svg, doxygen will use the pdf2svg\n# tool (see https://github.com/dawbarton/pdf2svg) or inkscape (see\n# https://inkscape.org) to generate formulas as SVG images instead of PNGs for\n# the HTML output. These images will generally look nicer at scaled resolutions.\n# Possible values are: png (the default) and svg (looks nicer but requires the\n# pdf2svg or inkscape tool).\n# The default value is: png.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nHTML_FORMULA_FORMAT    = png\n\n# Use this tag to change the font size of LaTeX formulas included as images in\n# the HTML documentation. When you change the font size after a successful\n# doxygen run you need to manually remove any form_*.png images from the HTML\n# output directory to force them to be regenerated.\n# Minimum value: 8, maximum value: 50, default value: 10.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nFORMULA_FONTSIZE       = 10\n\n# The FORMULA_MACROFILE can contain LaTeX \\newcommand and \\renewcommand commands\n# to create new LaTeX commands to be used in formulas as building blocks. See\n# the section \"Including formulas\" for details.\n\nFORMULA_MACROFILE      =\n\n# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see\n# https://www.mathjax.org) which uses client side JavaScript for the rendering\n# instead of using pre-rendered bitmaps. Use this if you do not have LaTeX\n# installed or if you want to formulas look prettier in the HTML output. When\n# enabled you may also need to install MathJax separately and configure the path\n# to it using the MATHJAX_RELPATH option.\n# The default value is: NO.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nUSE_MATHJAX            = NO\n\n# With MATHJAX_VERSION it is possible to specify the MathJax version to be used.\n# Note that the different versions of MathJax have different requirements with\n# regards to the different settings, so it is possible that also other MathJax\n# settings have to be changed when switching between the different MathJax\n# versions.\n# Possible values are: MathJax_2 and MathJax_3.\n# The default value is: MathJax_2.\n# This tag requires that the tag USE_MATHJAX is set to YES.\n\nMATHJAX_VERSION        = MathJax_2\n\n# When MathJax is enabled you can set the default output format to be used for\n# the MathJax output. For more details about the output format see MathJax\n# version 2 (see:\n# http://docs.mathjax.org/en/v2.7-latest/output.html) and MathJax version 3\n# (see:\n# http://docs.mathjax.org/en/latest/web/components/output.html).\n# Possible values are: HTML-CSS (which is slower, but has the best\n# compatibility. This is the name for Mathjax version 2, for MathJax version 3\n# this will be translated into chtml), NativeMML (i.e. MathML. Only supported\n# for NathJax 2. For MathJax version 3 chtml will be used instead.), chtml (This\n# is the name for Mathjax version 3, for MathJax version 2 this will be\n# translated into HTML-CSS) and SVG.\n# The default value is: HTML-CSS.\n# This tag requires that the tag USE_MATHJAX is set to YES.\n\nMATHJAX_FORMAT         = HTML-CSS\n\n# When MathJax is enabled you need to specify the location relative to the HTML\n# output directory using the MATHJAX_RELPATH option. The destination directory\n# should contain the MathJax.js script. For instance, if the mathjax directory\n# is located at the same level as the HTML output directory, then\n# MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax\n# Content Delivery Network so you can quickly see the result without installing\n# MathJax. However, it is strongly recommended to install a local copy of\n# MathJax from https://www.mathjax.org before deployment. The default value is:\n# - in case of MathJax version 2: https://cdn.jsdelivr.net/npm/mathjax@2\n# - in case of MathJax version 3: https://cdn.jsdelivr.net/npm/mathjax@3\n# This tag requires that the tag USE_MATHJAX is set to YES.\n\nMATHJAX_RELPATH        = http://cdn.mathjax.org/mathjax/latest\n\n# The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax\n# extension names that should be enabled during MathJax rendering. For example\n# for MathJax version 2 (see\n# https://docs.mathjax.org/en/v2.7-latest/tex.html#tex-and-latex-extensions):\n# MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols\n# For example for MathJax version 3 (see\n# http://docs.mathjax.org/en/latest/input/tex/extensions/index.html):\n# MATHJAX_EXTENSIONS = ams\n# This tag requires that the tag USE_MATHJAX is set to YES.\n\nMATHJAX_EXTENSIONS     =\n\n# The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces\n# of code that will be used on startup of the MathJax code. See the MathJax site\n# (see:\n# http://docs.mathjax.org/en/v2.7-latest/output.html) for more details. For an\n# example see the documentation.\n# This tag requires that the tag USE_MATHJAX is set to YES.\n\nMATHJAX_CODEFILE       =\n\n# When the SEARCHENGINE tag is enabled doxygen will generate a search box for\n# the HTML output. The underlying search engine uses javascript and DHTML and\n# should work on any modern browser. Note that when using HTML help\n# (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET)\n# there is already a search function so this one should typically be disabled.\n# For large projects the javascript based search engine can be slow, then\n# enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to\n# search using the keyboard; to jump to the search box use <access key> + S\n# (what the <access key> is depends on the OS and browser, but it is typically\n# <CTRL>, <ALT>/<option>, or both). Inside the search box use the <cursor down\n# key> to jump into the search results window, the results can be navigated\n# using the <cursor keys>. Press <Enter> to select an item or <escape> to cancel\n# the search. The filter options can be selected when the cursor is inside the\n# search box by pressing <Shift>+<cursor down>. Also here use the <cursor keys>\n# to select a filter and <Enter> or <escape> to activate or cancel the filter\n# option.\n# The default value is: YES.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nSEARCHENGINE           = NO\n\n# When the SERVER_BASED_SEARCH tag is enabled the search engine will be\n# implemented using a web server instead of a web client using JavaScript. There\n# are two flavors of web server based searching depending on the EXTERNAL_SEARCH\n# setting. When disabled, doxygen will generate a PHP script for searching and\n# an index file used by the script. When EXTERNAL_SEARCH is enabled the indexing\n# and searching needs to be provided by external tools. See the section\n# \"External Indexing and Searching\" for details.\n# The default value is: NO.\n# This tag requires that the tag SEARCHENGINE is set to YES.\n\nSERVER_BASED_SEARCH    = NO\n\n# When EXTERNAL_SEARCH tag is enabled doxygen will no longer generate the PHP\n# script for searching. Instead the search results are written to an XML file\n# which needs to be processed by an external indexer. Doxygen will invoke an\n# external search engine pointed to by the SEARCHENGINE_URL option to obtain the\n# search results.\n#\n# Doxygen ships with an example indexer (doxyindexer) and search engine\n# (doxysearch.cgi) which are based on the open source search engine library\n# Xapian (see:\n# https://xapian.org/).\n#\n# See the section \"External Indexing and Searching\" for details.\n# The default value is: NO.\n# This tag requires that the tag SEARCHENGINE is set to YES.\n\nEXTERNAL_SEARCH        = NO\n\n# The SEARCHENGINE_URL should point to a search engine hosted by a web server\n# which will return the search results when EXTERNAL_SEARCH is enabled.\n#\n# Doxygen ships with an example indexer (doxyindexer) and search engine\n# (doxysearch.cgi) which are based on the open source search engine library\n# Xapian (see:\n# https://xapian.org/). See the section \"External Indexing and Searching\" for\n# details.\n# This tag requires that the tag SEARCHENGINE is set to YES.\n\nSEARCHENGINE_URL       =\n\n# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the unindexed\n# search data is written to a file for indexing by an external tool. With the\n# SEARCHDATA_FILE tag the name of this file can be specified.\n# The default file is: searchdata.xml.\n# This tag requires that the tag SEARCHENGINE is set to YES.\n\nSEARCHDATA_FILE        = searchdata.xml\n\n# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the\n# EXTERNAL_SEARCH_ID tag can be used as an identifier for the project. This is\n# useful in combination with EXTRA_SEARCH_MAPPINGS to search through multiple\n# projects and redirect the results back to the right project.\n# This tag requires that the tag SEARCHENGINE is set to YES.\n\nEXTERNAL_SEARCH_ID     =\n\n# The EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through doxygen\n# projects other than the one defined by this configuration file, but that are\n# all added to the same external search index. Each project needs to have a\n# unique id set via EXTERNAL_SEARCH_ID. The search mapping then maps the id of\n# to a relative location where the documentation can be found. The format is:\n# EXTRA_SEARCH_MAPPINGS = tagname1=loc1 tagname2=loc2 ...\n# This tag requires that the tag SEARCHENGINE is set to YES.\n\nEXTRA_SEARCH_MAPPINGS  =\n\n#---------------------------------------------------------------------------\n# Configuration options related to the LaTeX output\n#---------------------------------------------------------------------------\n\n# If the GENERATE_LATEX tag is set to YES, doxygen will generate LaTeX output.\n# The default value is: YES.\n\nGENERATE_LATEX         = YES\n\n# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. If a\n# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of\n# it.\n# The default directory is: latex.\n# This tag requires that the tag GENERATE_LATEX is set to YES.\n\nLATEX_OUTPUT           = latex\n\n# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be\n# invoked.\n#\n# Note that when not enabling USE_PDFLATEX the default is latex when enabling\n# USE_PDFLATEX the default is pdflatex and when in the later case latex is\n# chosen this is overwritten by pdflatex. For specific output languages the\n# default can have been set differently, this depends on the implementation of\n# the output language.\n# This tag requires that the tag GENERATE_LATEX is set to YES.\n\nLATEX_CMD_NAME         = latex\n\n# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to generate\n# index for LaTeX.\n# Note: This tag is used in the Makefile / make.bat.\n# See also: LATEX_MAKEINDEX_CMD for the part in the generated output file\n# (.tex).\n# The default file is: makeindex.\n# This tag requires that the tag GENERATE_LATEX is set to YES.\n\nMAKEINDEX_CMD_NAME     = makeindex\n\n# The LATEX_MAKEINDEX_CMD tag can be used to specify the command name to\n# generate index for LaTeX. In case there is no backslash (\\) as first character\n# it will be automatically added in the LaTeX code.\n# Note: This tag is used in the generated output file (.tex).\n# See also: MAKEINDEX_CMD_NAME for the part in the Makefile / make.bat.\n# The default value is: makeindex.\n# This tag requires that the tag GENERATE_LATEX is set to YES.\n\nLATEX_MAKEINDEX_CMD    = makeindex\n\n# If the COMPACT_LATEX tag is set to YES, doxygen generates more compact LaTeX\n# documents. This may be useful for small projects and may help to save some\n# trees in general.\n# The default value is: NO.\n# This tag requires that the tag GENERATE_LATEX is set to YES.\n\nCOMPACT_LATEX          = NO\n\n# The PAPER_TYPE tag can be used to set the paper type that is used by the\n# printer.\n# Possible values are: a4 (210 x 297 mm), letter (8.5 x 11 inches), legal (8.5 x\n# 14 inches) and executive (7.25 x 10.5 inches).\n# The default value is: a4.\n# This tag requires that the tag GENERATE_LATEX is set to YES.\n\nPAPER_TYPE             = a4wide\n\n# The EXTRA_PACKAGES tag can be used to specify one or more LaTeX package names\n# that should be included in the LaTeX output. The package can be specified just\n# by its name or with the correct syntax as to be used with the LaTeX\n# \\usepackage command. To get the times font for instance you can specify :\n# EXTRA_PACKAGES=times or EXTRA_PACKAGES={times}\n# To use the option intlimits with the amsmath package you can specify:\n# EXTRA_PACKAGES=[intlimits]{amsmath}\n# If left blank no extra packages will be included.\n# This tag requires that the tag GENERATE_LATEX is set to YES.\n\nEXTRA_PACKAGES         =\n\n# The LATEX_HEADER tag can be used to specify a user-defined LaTeX header for\n# the generated LaTeX document. The header should contain everything until the\n# first chapter. If it is left blank doxygen will generate a standard header. It\n# is highly recommended to start with a default header using\n# doxygen -w latex new_header.tex new_footer.tex new_stylesheet.sty\n# and then modify the file new_header.tex. See also section \"Doxygen usage\" for\n# information on how to generate the default header that doxygen normally uses.\n#\n# Note: Only use a user-defined header if you know what you are doing!\n# Note: The header is subject to change so you typically have to regenerate the\n# default header when upgrading to a newer version of doxygen. The following\n# commands have a special meaning inside the header (and footer): For a\n# description of the possible markers and block names see the documentation.\n# This tag requires that the tag GENERATE_LATEX is set to YES.\n\nLATEX_HEADER           =\n\n# The LATEX_FOOTER tag can be used to specify a user-defined LaTeX footer for\n# the generated LaTeX document. The footer should contain everything after the\n# last chapter. If it is left blank doxygen will generate a standard footer. See\n# LATEX_HEADER for more information on how to generate a default footer and what\n# special commands can be used inside the footer. See also section \"Doxygen\n# usage\" for information on how to generate the default footer that doxygen\n# normally uses. Note: Only use a user-defined footer if you know what you are\n# doing!\n# This tag requires that the tag GENERATE_LATEX is set to YES.\n\nLATEX_FOOTER           =\n\n# The LATEX_EXTRA_STYLESHEET tag can be used to specify additional user-defined\n# LaTeX style sheets that are included after the standard style sheets created\n# by doxygen. Using this option one can overrule certain style aspects. Doxygen\n# will copy the style sheet files to the output directory.\n# Note: The order of the extra style sheet files is of importance (e.g. the last\n# style sheet in the list overrules the setting of the previous ones in the\n# list).\n# This tag requires that the tag GENERATE_LATEX is set to YES.\n\nLATEX_EXTRA_STYLESHEET =\n\n# The LATEX_EXTRA_FILES tag can be used to specify one or more extra images or\n# other source files which should be copied to the LATEX_OUTPUT output\n# directory. Note that the files will be copied as-is; there are no commands or\n# markers available.\n# This tag requires that the tag GENERATE_LATEX is set to YES.\n\nLATEX_EXTRA_FILES      =\n\n# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated is\n# prepared for conversion to PDF (using ps2pdf or pdflatex). The PDF file will\n# contain links (just like the HTML output) instead of page references. This\n# makes the output suitable for online browsing using a PDF viewer.\n# The default value is: YES.\n# This tag requires that the tag GENERATE_LATEX is set to YES.\n\nPDF_HYPERLINKS         = YES\n\n# If the USE_PDFLATEX tag is set to YES, doxygen will use the engine as\n# specified with LATEX_CMD_NAME to generate the PDF file directly from the LaTeX\n# files. Set this option to YES, to get a higher quality PDF documentation.\n#\n# See also section LATEX_CMD_NAME for selecting the engine.\n# The default value is: YES.\n# This tag requires that the tag GENERATE_LATEX is set to YES.\n\nUSE_PDFLATEX           = YES\n\n# The LATEX_BATCHMODE tag signals the behavior of LaTeX in case of an error.\n# Possible values are: NO same as ERROR_STOP, YES same as BATCH, BATCH In batch\n# mode nothing is printed on the terminal, errors are scrolled as if <return> is\n# hit at every error; missing files that TeX tries to input or request from\n# keyboard input (\\read on a not open input stream) cause the job to abort,\n# NON_STOP In nonstop mode the diagnostic message will appear on the terminal,\n# but there is no possibility of user interaction just like in batch mode,\n# SCROLL In scroll mode, TeX will stop only for missing files to input or if\n# keyboard input is necessary and ERROR_STOP In errorstop mode, TeX will stop at\n# each error, asking for user intervention.\n# The default value is: NO.\n# This tag requires that the tag GENERATE_LATEX is set to YES.\n\nLATEX_BATCHMODE        = NO\n\n# If the LATEX_HIDE_INDICES tag is set to YES then doxygen will not include the\n# index chapters (such as File Index, Compound Index, etc.) in the output.\n# The default value is: NO.\n# This tag requires that the tag GENERATE_LATEX is set to YES.\n\nLATEX_HIDE_INDICES     = NO\n\n# The LATEX_BIB_STYLE tag can be used to specify the style to use for the\n# bibliography, e.g. plainnat, or ieeetr. See\n# https://en.wikipedia.org/wiki/BibTeX and \\cite for more info.\n# The default value is: plain.\n# This tag requires that the tag GENERATE_LATEX is set to YES.\n\nLATEX_BIB_STYLE        = plain\n\n# The LATEX_EMOJI_DIRECTORY tag is used to specify the (relative or absolute)\n# path from which the emoji images will be read. If a relative path is entered,\n# it will be relative to the LATEX_OUTPUT directory. If left blank the\n# LATEX_OUTPUT directory will be used.\n# This tag requires that the tag GENERATE_LATEX is set to YES.\n\nLATEX_EMOJI_DIRECTORY  =\n\n#---------------------------------------------------------------------------\n# Configuration options related to the RTF output\n#---------------------------------------------------------------------------\n\n# If the GENERATE_RTF tag is set to YES, doxygen will generate RTF output. The\n# RTF output is optimized for Word 97 and may not look too pretty with other RTF\n# readers/editors.\n# The default value is: NO.\n\nGENERATE_RTF           = NO\n\n# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. If a\n# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of\n# it.\n# The default directory is: rtf.\n# This tag requires that the tag GENERATE_RTF is set to YES.\n\nRTF_OUTPUT             = rtf\n\n# If the COMPACT_RTF tag is set to YES, doxygen generates more compact RTF\n# documents. This may be useful for small projects and may help to save some\n# trees in general.\n# The default value is: NO.\n# This tag requires that the tag GENERATE_RTF is set to YES.\n\nCOMPACT_RTF            = NO\n\n# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated will\n# contain hyperlink fields. The RTF file will contain links (just like the HTML\n# output) instead of page references. This makes the output suitable for online\n# browsing using Word or some other Word compatible readers that support those\n# fields.\n#\n# Note: WordPad (write) and others do not support links.\n# The default value is: NO.\n# This tag requires that the tag GENERATE_RTF is set to YES.\n\nRTF_HYPERLINKS         = NO\n\n# Load stylesheet definitions from file. Syntax is similar to doxygen's\n# configuration file, i.e. a series of assignments. You only have to provide\n# replacements, missing definitions are set to their default value.\n#\n# See also section \"Doxygen usage\" for information on how to generate the\n# default style sheet that doxygen normally uses.\n# This tag requires that the tag GENERATE_RTF is set to YES.\n\nRTF_STYLESHEET_FILE    =\n\n# Set optional variables used in the generation of an RTF document. Syntax is\n# similar to doxygen's configuration file. A template extensions file can be\n# generated using doxygen -e rtf extensionFile.\n# This tag requires that the tag GENERATE_RTF is set to YES.\n\nRTF_EXTENSIONS_FILE    =\n\n#---------------------------------------------------------------------------\n# Configuration options related to the man page output\n#---------------------------------------------------------------------------\n\n# If the GENERATE_MAN tag is set to YES, doxygen will generate man pages for\n# classes and files.\n# The default value is: NO.\n\nGENERATE_MAN           = NO\n\n# The MAN_OUTPUT tag is used to specify where the man pages will be put. If a\n# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of\n# it. A directory man3 will be created inside the directory specified by\n# MAN_OUTPUT.\n# The default directory is: man.\n# This tag requires that the tag GENERATE_MAN is set to YES.\n\nMAN_OUTPUT             = man\n\n# The MAN_EXTENSION tag determines the extension that is added to the generated\n# man pages. In case the manual section does not start with a number, the number\n# 3 is prepended. The dot (.) at the beginning of the MAN_EXTENSION tag is\n# optional.\n# The default value is: .3.\n# This tag requires that the tag GENERATE_MAN is set to YES.\n\nMAN_EXTENSION          = .3\n\n# The MAN_SUBDIR tag determines the name of the directory created within\n# MAN_OUTPUT in which the man pages are placed. If defaults to man followed by\n# MAN_EXTENSION with the initial . removed.\n# This tag requires that the tag GENERATE_MAN is set to YES.\n\nMAN_SUBDIR             =\n\n# If the MAN_LINKS tag is set to YES and doxygen generates man output, then it\n# will generate one additional man file for each entity documented in the real\n# man page(s). These additional files only source the real man page, but without\n# them the man command would be unable to find the correct page.\n# The default value is: NO.\n# This tag requires that the tag GENERATE_MAN is set to YES.\n\nMAN_LINKS              = NO\n\n#---------------------------------------------------------------------------\n# Configuration options related to the XML output\n#---------------------------------------------------------------------------\n\n# If the GENERATE_XML tag is set to YES, doxygen will generate an XML file that\n# captures the structure of the code including all documentation.\n# The default value is: NO.\n\nGENERATE_XML           = NO\n\n# The XML_OUTPUT tag is used to specify where the XML pages will be put. If a\n# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of\n# it.\n# The default directory is: xml.\n# This tag requires that the tag GENERATE_XML is set to YES.\n\nXML_OUTPUT             = xml\n\n# If the XML_PROGRAMLISTING tag is set to YES, doxygen will dump the program\n# listings (including syntax highlighting and cross-referencing information) to\n# the XML output. Note that enabling this will significantly increase the size\n# of the XML output.\n# The default value is: YES.\n# This tag requires that the tag GENERATE_XML is set to YES.\n\nXML_PROGRAMLISTING     = YES\n\n# If the XML_NS_MEMB_FILE_SCOPE tag is set to YES, doxygen will include\n# namespace members in file scope as well, matching the HTML output.\n# The default value is: NO.\n# This tag requires that the tag GENERATE_XML is set to YES.\n\nXML_NS_MEMB_FILE_SCOPE = NO\n\n#---------------------------------------------------------------------------\n# Configuration options related to the DOCBOOK output\n#---------------------------------------------------------------------------\n\n# If the GENERATE_DOCBOOK tag is set to YES, doxygen will generate Docbook files\n# that can be used to generate PDF.\n# The default value is: NO.\n\nGENERATE_DOCBOOK       = NO\n\n# The DOCBOOK_OUTPUT tag is used to specify where the Docbook pages will be put.\n# If a relative path is entered the value of OUTPUT_DIRECTORY will be put in\n# front of it.\n# The default directory is: docbook.\n# This tag requires that the tag GENERATE_DOCBOOK is set to YES.\n\nDOCBOOK_OUTPUT         = docbook\n\n#---------------------------------------------------------------------------\n# Configuration options for the AutoGen Definitions output\n#---------------------------------------------------------------------------\n\n# If the GENERATE_AUTOGEN_DEF tag is set to YES, doxygen will generate an\n# AutoGen Definitions (see https://autogen.sourceforge.net/) file that captures\n# the structure of the code including all documentation. Note that this feature\n# is still experimental and incomplete at the moment.\n# The default value is: NO.\n\nGENERATE_AUTOGEN_DEF   = NO\n\n#---------------------------------------------------------------------------\n# Configuration options related to Sqlite3 output\n#---------------------------------------------------------------------------\n\n# If the GENERATE_SQLITE3 tag is set to YES doxygen will generate a Sqlite3\n# database with symbols found by doxygen stored in tables.\n# The default value is: NO.\n\nGENERATE_SQLITE3       = NO\n\n# The SQLITE3_OUTPUT tag is used to specify where the Sqlite3 database will be\n# put. If a relative path is entered the value of OUTPUT_DIRECTORY will be put\n# in front of it.\n# The default directory is: sqlite3.\n# This tag requires that the tag GENERATE_SQLITE3 is set to YES.\n\nSQLITE3_OUTPUT         = sqlite3\n\n# The SQLITE3_OVERWRITE_DB tag is set to YES, the existing doxygen_sqlite3.db\n# database file will be recreated with each doxygen run. If set to NO, doxygen\n# will warn if an a database file is already found and not modify it.\n# The default value is: YES.\n# This tag requires that the tag GENERATE_SQLITE3 is set to YES.\n\nSQLITE3_RECREATE_DB    = YES\n\n#---------------------------------------------------------------------------\n# Configuration options related to the Perl module output\n#---------------------------------------------------------------------------\n\n# If the GENERATE_PERLMOD tag is set to YES, doxygen will generate a Perl module\n# file that captures the structure of the code including all documentation.\n#\n# Note that this feature is still experimental and incomplete at the moment.\n# The default value is: NO.\n\nGENERATE_PERLMOD       = NO\n\n# If the PERLMOD_LATEX tag is set to YES, doxygen will generate the necessary\n# Makefile rules, Perl scripts and LaTeX code to be able to generate PDF and DVI\n# output from the Perl module output.\n# The default value is: NO.\n# This tag requires that the tag GENERATE_PERLMOD is set to YES.\n\nPERLMOD_LATEX          = NO\n\n# If the PERLMOD_PRETTY tag is set to YES, the Perl module output will be nicely\n# formatted so it can be parsed by a human reader. This is useful if you want to\n# understand what is going on. On the other hand, if this tag is set to NO, the\n# size of the Perl module output will be much smaller and Perl will parse it\n# just the same.\n# The default value is: YES.\n# This tag requires that the tag GENERATE_PERLMOD is set to YES.\n\nPERLMOD_PRETTY         = YES\n\n# The names of the make variables in the generated doxyrules.make file are\n# prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. This is useful\n# so different doxyrules.make files included by the same Makefile don't\n# overwrite each other's variables.\n# This tag requires that the tag GENERATE_PERLMOD is set to YES.\n\nPERLMOD_MAKEVAR_PREFIX =\n\n#---------------------------------------------------------------------------\n# Configuration options related to the preprocessor\n#---------------------------------------------------------------------------\n\n# If the ENABLE_PREPROCESSING tag is set to YES, doxygen will evaluate all\n# C-preprocessor directives found in the sources and include files.\n# The default value is: YES.\n\nENABLE_PREPROCESSING   = YES\n\n# If the MACRO_EXPANSION tag is set to YES, doxygen will expand all macro names\n# in the source code. If set to NO, only conditional compilation will be\n# performed. Macro expansion can be done in a controlled way by setting\n# EXPAND_ONLY_PREDEF to YES.\n# The default value is: NO.\n# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.\n\nMACRO_EXPANSION        = NO\n\n# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES then\n# the macro expansion is limited to the macros specified with the PREDEFINED and\n# EXPAND_AS_DEFINED tags.\n# The default value is: NO.\n# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.\n\nEXPAND_ONLY_PREDEF     = NO\n\n# If the SEARCH_INCLUDES tag is set to YES, the include files in the\n# INCLUDE_PATH will be searched if a #include is found.\n# The default value is: YES.\n# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.\n\nSEARCH_INCLUDES        = YES\n\n# The INCLUDE_PATH tag can be used to specify one or more directories that\n# contain include files that are not input files but should be processed by the\n# preprocessor. Note that the INCLUDE_PATH is not recursive, so the setting of\n# RECURSIVE has no effect here.\n# This tag requires that the tag SEARCH_INCLUDES is set to YES.\n\nINCLUDE_PATH           =\n\n# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard\n# patterns (like *.h and *.hpp) to filter out the header-files in the\n# directories. If left blank, the patterns specified with FILE_PATTERNS will be\n# used.\n# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.\n\nINCLUDE_FILE_PATTERNS  =\n\n# The PREDEFINED tag can be used to specify one or more macro names that are\n# defined before the preprocessor is started (similar to the -D option of e.g.\n# gcc). The argument of the tag is a list of macros of the form: name or\n# name=definition (no spaces). If the definition and the \"=\" are omitted, \"=1\"\n# is assumed. To prevent a macro definition from being undefined via #undef or\n# recursively expanded use the := operator instead of the = operator.\n# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.\n\nPREDEFINED             =\n\n# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then this\n# tag can be used to specify a list of macro names that should be expanded. The\n# macro definition that is found in the sources will be used. Use the PREDEFINED\n# tag if you want to use a different macro definition that overrules the\n# definition found in the source code.\n# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.\n\nEXPAND_AS_DEFINED      =\n\n# If the SKIP_FUNCTION_MACROS tag is set to YES then doxygen's preprocessor will\n# remove all references to function-like macros that are alone on a line, have\n# an all uppercase name, and do not end with a semicolon. Such function macros\n# are typically used for boiler-plate code, and will confuse the parser if not\n# removed.\n# The default value is: YES.\n# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.\n\nSKIP_FUNCTION_MACROS   = YES\n\n#---------------------------------------------------------------------------\n# Configuration options related to external references\n#---------------------------------------------------------------------------\n\n# The TAGFILES tag can be used to specify one or more tag files. For each tag\n# file the location of the external documentation should be added. The format of\n# a tag file without this location is as follows:\n# TAGFILES = file1 file2 ...\n# Adding location for the tag files is done as follows:\n# TAGFILES = file1=loc1 \"file2 = loc2\" ...\n# where loc1 and loc2 can be relative or absolute paths or URLs. See the\n# section \"Linking to external documentation\" for more information about the use\n# of tag files.\n# Note: Each tag file must have a unique name (where the name does NOT include\n# the path). If a tag file is not located in the directory in which doxygen is\n# run, you must also specify the path to the tagfile here.\n\nTAGFILES               =\n\n# When a file name is specified after GENERATE_TAGFILE, doxygen will create a\n# tag file that is based on the input files it reads. See section \"Linking to\n# external documentation\" for more information about the usage of tag files.\n\nGENERATE_TAGFILE       =\n\n# If the ALLEXTERNALS tag is set to YES, all external classes and namespaces\n# will be listed in the class and namespace index. If set to NO, only the\n# inherited external classes will be listed.\n# The default value is: NO.\n\nALLEXTERNALS           = NO\n\n# If the EXTERNAL_GROUPS tag is set to YES, all external groups will be listed\n# in the topic index. If set to NO, only the current project's groups will be\n# listed.\n# The default value is: YES.\n\nEXTERNAL_GROUPS        = YES\n\n# If the EXTERNAL_PAGES tag is set to YES, all external pages will be listed in\n# the related pages index. If set to NO, only the current project's pages will\n# be listed.\n# The default value is: YES.\n\nEXTERNAL_PAGES         = YES\n\n#---------------------------------------------------------------------------\n# Configuration options related to diagram generator tools\n#---------------------------------------------------------------------------\n\n# If set to YES the inheritance and collaboration graphs will hide inheritance\n# and usage relations if the target is undocumented or is not a class.\n# The default value is: YES.\n\nHIDE_UNDOC_RELATIONS   = YES\n\n# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is\n# available from the path. This tool is part of Graphviz (see:\n# https://www.graphviz.org/), a graph visualization toolkit from AT&T and Lucent\n# Bell Labs. The other options in this section have no effect if this option is\n# set to NO\n# The default value is: NO.\n\nHAVE_DOT               = NO\n\n# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is allowed\n# to run in parallel. When set to 0 doxygen will base this on the number of\n# processors available in the system. You can set it explicitly to a value\n# larger than 0 to get control over the balance between CPU load and processing\n# speed.\n# Minimum value: 0, maximum value: 32, default value: 0.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nDOT_NUM_THREADS        = 0\n\n# DOT_COMMON_ATTR is common attributes for nodes, edges and labels of\n# subgraphs. When you want a differently looking font in the dot files that\n# doxygen generates you can specify fontname, fontcolor and fontsize attributes.\n# For details please see <a href=https://graphviz.org/doc/info/attrs.html>Node,\n# Edge and Graph Attributes specification</a> You need to make sure dot is able\n# to find the font, which can be done by putting it in a standard location or by\n# setting the DOTFONTPATH environment variable or by setting DOT_FONTPATH to the\n# directory containing the font. Default graphviz fontsize is 14.\n# The default value is: fontname=Helvetica,fontsize=10.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nDOT_COMMON_ATTR        = \"fontname=Helvetica,fontsize=10\"\n\n# DOT_EDGE_ATTR is concatenated with DOT_COMMON_ATTR. For elegant style you can\n# add 'arrowhead=open, arrowtail=open, arrowsize=0.5'. <a\n# href=https://graphviz.org/doc/info/arrows.html>Complete documentation about\n# arrows shapes.</a>\n# The default value is: labelfontname=Helvetica,labelfontsize=10.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nDOT_EDGE_ATTR          = \"labelfontname=Helvetica,labelfontsize=10\"\n\n# DOT_NODE_ATTR is concatenated with DOT_COMMON_ATTR. For view without boxes\n# around nodes set 'shape=plain' or 'shape=plaintext' <a\n# href=https://www.graphviz.org/doc/info/shapes.html>Shapes specification</a>\n# The default value is: shape=box,height=0.2,width=0.4.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nDOT_NODE_ATTR          = \"shape=box,height=0.2,width=0.4\"\n\n# You can set the path where dot can find font specified with fontname in\n# DOT_COMMON_ATTR and others dot attributes.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nDOT_FONTPATH           =\n\n# If the CLASS_GRAPH tag is set to YES or GRAPH or BUILTIN then doxygen will\n# generate a graph for each documented class showing the direct and indirect\n# inheritance relations. In case the CLASS_GRAPH tag is set to YES or GRAPH and\n# HAVE_DOT is enabled as well, then dot will be used to draw the graph. In case\n# the CLASS_GRAPH tag is set to YES and HAVE_DOT is disabled or if the\n# CLASS_GRAPH tag is set to BUILTIN, then the built-in generator will be used.\n# If the CLASS_GRAPH tag is set to TEXT the direct and indirect inheritance\n# relations will be shown as texts / links.\n# Possible values are: NO, YES, TEXT, GRAPH and BUILTIN.\n# The default value is: YES.\n\nCLASS_GRAPH            = YES\n\n# If the COLLABORATION_GRAPH tag is set to YES then doxygen will generate a\n# graph for each documented class showing the direct and indirect implementation\n# dependencies (inheritance, containment, and class references variables) of the\n# class with other documented classes. Explicit enabling a collaboration graph,\n# when COLLABORATION_GRAPH is set to NO, can be accomplished by means of the\n# command \\collaborationgraph. Disabling a collaboration graph can be\n# accomplished by means of the command \\hidecollaborationgraph.\n# The default value is: YES.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nCOLLABORATION_GRAPH    = YES\n\n# If the GROUP_GRAPHS tag is set to YES then doxygen will generate a graph for\n# groups, showing the direct groups dependencies. Explicit enabling a group\n# dependency graph, when GROUP_GRAPHS is set to NO, can be accomplished by means\n# of the command \\groupgraph. Disabling a directory graph can be accomplished by\n# means of the command \\hidegroupgraph. See also the chapter Grouping in the\n# manual.\n# The default value is: YES.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nGROUP_GRAPHS           = YES\n\n# If the UML_LOOK tag is set to YES, doxygen will generate inheritance and\n# collaboration diagrams in a style similar to the OMG's Unified Modeling\n# Language.\n# The default value is: NO.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nUML_LOOK               = NO\n\n# If the UML_LOOK tag is enabled, the fields and methods are shown inside the\n# class node. If there are many fields or methods and many nodes the graph may\n# become too big to be useful. The UML_LIMIT_NUM_FIELDS threshold limits the\n# number of items for each type to make the size more manageable. Set this to 0\n# for no limit. Note that the threshold may be exceeded by 50% before the limit\n# is enforced. So when you set the threshold to 10, up to 15 fields may appear,\n# but if the number exceeds 15, the total amount of fields shown is limited to\n# 10.\n# Minimum value: 0, maximum value: 100, default value: 10.\n# This tag requires that the tag UML_LOOK is set to YES.\n\nUML_LIMIT_NUM_FIELDS   = 10\n\n# If the DOT_UML_DETAILS tag is set to NO, doxygen will show attributes and\n# methods without types and arguments in the UML graphs. If the DOT_UML_DETAILS\n# tag is set to YES, doxygen will add type and arguments for attributes and\n# methods in the UML graphs. If the DOT_UML_DETAILS tag is set to NONE, doxygen\n# will not generate fields with class member information in the UML graphs. The\n# class diagrams will look similar to the default class diagrams but using UML\n# notation for the relationships.\n# Possible values are: NO, YES and NONE.\n# The default value is: NO.\n# This tag requires that the tag UML_LOOK is set to YES.\n\nDOT_UML_DETAILS        = NO\n\n# The DOT_WRAP_THRESHOLD tag can be used to set the maximum number of characters\n# to display on a single line. If the actual line length exceeds this threshold\n# significantly it will wrapped across multiple lines. Some heuristics are apply\n# to avoid ugly line breaks.\n# Minimum value: 0, maximum value: 1000, default value: 17.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nDOT_WRAP_THRESHOLD     = 17\n\n# If the TEMPLATE_RELATIONS tag is set to YES then the inheritance and\n# collaboration graphs will show the relations between templates and their\n# instances.\n# The default value is: NO.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nTEMPLATE_RELATIONS     = NO\n\n# If the INCLUDE_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are set to\n# YES then doxygen will generate a graph for each documented file showing the\n# direct and indirect include dependencies of the file with other documented\n# files. Explicit enabling an include graph, when INCLUDE_GRAPH is is set to NO,\n# can be accomplished by means of the command \\includegraph. Disabling an\n# include graph can be accomplished by means of the command \\hideincludegraph.\n# The default value is: YES.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nINCLUDE_GRAPH          = YES\n\n# If the INCLUDED_BY_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are\n# set to YES then doxygen will generate a graph for each documented file showing\n# the direct and indirect include dependencies of the file with other documented\n# files. Explicit enabling an included by graph, when INCLUDED_BY_GRAPH is set\n# to NO, can be accomplished by means of the command \\includedbygraph. Disabling\n# an included by graph can be accomplished by means of the command\n# \\hideincludedbygraph.\n# The default value is: YES.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nINCLUDED_BY_GRAPH      = YES\n\n# If the CALL_GRAPH tag is set to YES then doxygen will generate a call\n# dependency graph for every global function or class method.\n#\n# Note that enabling this option will significantly increase the time of a run.\n# So in most cases it will be better to enable call graphs for selected\n# functions only using the \\callgraph command. Disabling a call graph can be\n# accomplished by means of the command \\hidecallgraph.\n# The default value is: NO.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nCALL_GRAPH             = NO\n\n# If the CALLER_GRAPH tag is set to YES then doxygen will generate a caller\n# dependency graph for every global function or class method.\n#\n# Note that enabling this option will significantly increase the time of a run.\n# So in most cases it will be better to enable caller graphs for selected\n# functions only using the \\callergraph command. Disabling a caller graph can be\n# accomplished by means of the command \\hidecallergraph.\n# The default value is: NO.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nCALLER_GRAPH           = NO\n\n# If the GRAPHICAL_HIERARCHY tag is set to YES then doxygen will graphical\n# hierarchy of all classes instead of a textual one.\n# The default value is: YES.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nGRAPHICAL_HIERARCHY    = YES\n\n# If the DIRECTORY_GRAPH tag is set to YES then doxygen will show the\n# dependencies a directory has on other directories in a graphical way. The\n# dependency relations are determined by the #include relations between the\n# files in the directories. Explicit enabling a directory graph, when\n# DIRECTORY_GRAPH is set to NO, can be accomplished by means of the command\n# \\directorygraph. Disabling a directory graph can be accomplished by means of\n# the command \\hidedirectorygraph.\n# The default value is: YES.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nDIRECTORY_GRAPH        = YES\n\n# The DIR_GRAPH_MAX_DEPTH tag can be used to limit the maximum number of levels\n# of child directories generated in directory dependency graphs by dot.\n# Minimum value: 1, maximum value: 25, default value: 1.\n# This tag requires that the tag DIRECTORY_GRAPH is set to YES.\n\nDIR_GRAPH_MAX_DEPTH    = 1\n\n# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images\n# generated by dot. For an explanation of the image formats see the section\n# output formats in the documentation of the dot tool (Graphviz (see:\n# https://www.graphviz.org/)).\n# Note: If you choose svg you need to set HTML_FILE_EXTENSION to xhtml in order\n# to make the SVG files visible in IE 9+ (other browsers do not have this\n# requirement).\n# Possible values are: png, jpg, gif, svg, png:gd, png:gd:gd, png:cairo,\n# png:cairo:gd, png:cairo:cairo, png:cairo:gdiplus, png:gdiplus and\n# png:gdiplus:gdiplus.\n# The default value is: png.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nDOT_IMAGE_FORMAT       = png\n\n# If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to\n# enable generation of interactive SVG images that allow zooming and panning.\n#\n# Note that this requires a modern browser other than Internet Explorer. Tested\n# and working are Firefox, Chrome, Safari, and Opera.\n# Note: For IE 9+ you need to set HTML_FILE_EXTENSION to xhtml in order to make\n# the SVG files visible. Older versions of IE do not have SVG support.\n# The default value is: NO.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nINTERACTIVE_SVG        = NO\n\n# The DOT_PATH tag can be used to specify the path where the dot tool can be\n# found. If left blank, it is assumed the dot tool can be found in the path.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nDOT_PATH               =\n\n# The DOTFILE_DIRS tag can be used to specify one or more directories that\n# contain dot files that are included in the documentation (see the \\dotfile\n# command).\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nDOTFILE_DIRS           =\n\n# You can include diagrams made with dia in doxygen documentation. Doxygen will\n# then run dia to produce the diagram and insert it in the documentation. The\n# DIA_PATH tag allows you to specify the directory where the dia binary resides.\n# If left empty dia is assumed to be found in the default search path.\n\nDIA_PATH               =\n\n# The DIAFILE_DIRS tag can be used to specify one or more directories that\n# contain dia files that are included in the documentation (see the \\diafile\n# command).\n\nDIAFILE_DIRS           =\n\n# When using plantuml, the PLANTUML_JAR_PATH tag should be used to specify the\n# path where java can find the plantuml.jar file or to the filename of jar file\n# to be used. If left blank, it is assumed PlantUML is not used or called during\n# a preprocessing step. Doxygen will generate a warning when it encounters a\n# \\startuml command in this case and will not generate output for the diagram.\n\nPLANTUML_JAR_PATH      =\n\n# When using plantuml, the PLANTUML_CFG_FILE tag can be used to specify a\n# configuration file for plantuml.\n\nPLANTUML_CFG_FILE      =\n\n# When using plantuml, the specified paths are searched for files specified by\n# the !include statement in a plantuml block.\n\nPLANTUML_INCLUDE_PATH  =\n\n# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of nodes\n# that will be shown in the graph. If the number of nodes in a graph becomes\n# larger than this value, doxygen will truncate the graph, which is visualized\n# by representing a node as a red box. Note that doxygen if the number of direct\n# children of the root node in a graph is already larger than\n# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note that\n# the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.\n# Minimum value: 0, maximum value: 10000, default value: 50.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nDOT_GRAPH_MAX_NODES    = 50\n\n# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the graphs\n# generated by dot. A depth value of 3 means that only nodes reachable from the\n# root by following a path via at most 3 edges will be shown. Nodes that lay\n# further from the root node will be omitted. Note that setting this option to 1\n# or 2 may greatly reduce the computation time needed for large code bases. Also\n# note that the size of a graph can be further restricted by\n# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.\n# Minimum value: 0, maximum value: 1000, default value: 0.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nMAX_DOT_GRAPH_DEPTH    = 0\n\n# Set the DOT_MULTI_TARGETS tag to YES to allow dot to generate multiple output\n# files in one run (i.e. multiple -o and -T options on the command line). This\n# makes dot run faster, but since only newer versions of dot (>1.8.10) support\n# this, this feature is disabled by default.\n# The default value is: NO.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nDOT_MULTI_TARGETS      = NO\n\n# If the GENERATE_LEGEND tag is set to YES doxygen will generate a legend page\n# explaining the meaning of the various boxes and arrows in the dot generated\n# graphs.\n# Note: This tag requires that UML_LOOK isn't set, i.e. the doxygen internal\n# graphical representation for inheritance and collaboration diagrams is used.\n# The default value is: YES.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nGENERATE_LEGEND        = YES\n\n# If the DOT_CLEANUP tag is set to YES, doxygen will remove the intermediate\n# files that are used to generate the various graphs.\n#\n# Note: This setting is not only used for dot files but also for msc temporary\n# files.\n# The default value is: YES.\n\nDOT_CLEANUP            = YES\n\n# You can define message sequence charts within doxygen comments using the \\msc\n# command. If the MSCGEN_TOOL tag is left empty (the default), then doxygen will\n# use a built-in version of mscgen tool to produce the charts. Alternatively,\n# the MSCGEN_TOOL tag can also specify the name an external tool. For instance,\n# specifying prog as the value, doxygen will call the tool as prog -T\n# <outfile_format> -o <outputfile> <inputfile>. The external tool should support\n# output file formats \"png\", \"eps\", \"svg\", and \"ismap\".\n\nMSCGEN_TOOL            =\n\n# The MSCFILE_DIRS tag can be used to specify one or more directories that\n# contain msc files that are included in the documentation (see the \\mscfile\n# command).\n\nMSCFILE_DIRS           =\n"
  },
  {
    "path": "cola/libavoid/LICENSE.LGPL",
    "content": "                  GNU LESSER GENERAL PUBLIC LICENSE\n                       Version 2.1, February 1999\n\n Copyright (C) 1991, 1999 Free Software Foundation, Inc.\n     59 Temple Place, Suite 330, Boston, MA  02111-1307  USA\n Everyone is permitted to copy and distribute verbatim copies\n of this license document, but changing it is not allowed.\n\n[This is the first released version of the Lesser GPL.  It also counts\n as the successor of the GNU Library Public License, version 2, hence\n the version number 2.1.]\n\n                            Preamble\n\n  The licenses for most software are designed to take away your\nfreedom to share and change it.  By contrast, the GNU General Public\nLicenses are intended to guarantee your freedom to share and change\nfree software--to make sure the software is free for all its users.\n\n  This license, the Lesser General Public License, applies to some\nspecially designated software packages--typically libraries--of the\nFree Software Foundation and other authors who decide to use it.  You\ncan use it too, but we suggest you first think carefully about whether\nthis license or the ordinary General Public License is the better\nstrategy to use in any particular case, based on the explanations below.\n\n  When we speak of free software, we are referring to freedom of use,\nnot price.  Our General Public Licenses are designed to make sure that\nyou have the freedom to distribute copies of free software (and charge\nfor this service if you wish); that you receive source code or can get\nit if you want it; that you can change the software and use pieces of\nit in new free programs; and that you are informed that you can do\nthese things.\n\n  To protect your rights, we need to make restrictions that forbid\ndistributors to deny you these rights or to ask you to surrender these\nrights.  These restrictions translate to certain responsibilities for\nyou if you distribute copies of the library or if you modify it.\n\n  For example, if you distribute copies of the library, whether gratis\nor for a fee, you must give the recipients all the rights that we gave\nyou.  You must make sure that they, too, receive or can get the source\ncode.  If you link other code with the library, you must provide\ncomplete object files to the recipients, so that they can relink them\nwith the library after making changes to the library and recompiling\nit.  And you must show them these terms so they know their rights.\n\n  We protect your rights with a two-step method: (1) we copyright the\nlibrary, and (2) we offer you this license, which gives you legal\npermission to copy, distribute and/or modify the library.\n\n  To protect each distributor, we want to make it very clear that\nthere is no warranty for the free library.  Also, if the library is\nmodified by someone else and passed on, the recipients should know\nthat what they have is not the original version, so that the original\nauthor's reputation will not be affected by problems that might be\nintroduced by others.\n\n  Finally, software patents pose a constant threat to the existence of\nany free program.  We wish to make sure that a company cannot\neffectively restrict the users of a free program by obtaining a\nrestrictive license from a patent holder.  Therefore, we insist that\nany patent license obtained for a version of the library must be\nconsistent with the full freedom of use specified in this license.\n\n  Most GNU software, including some libraries, is covered by the\nordinary GNU General Public License.  This license, the GNU Lesser\nGeneral Public License, applies to certain designated libraries, and\nis quite different from the ordinary General Public License.  We use\nthis license for certain libraries in order to permit linking those\nlibraries into non-free programs.\n\n  When a program is linked with a library, whether statically or using\na shared library, the combination of the two is legally speaking a\ncombined work, a derivative of the original library.  The ordinary\nGeneral Public License therefore permits such linking only if the\nentire combination fits its criteria of freedom.  The Lesser General\nPublic License permits more lax criteria for linking other code with\nthe library.\n\n  We call this license the \"Lesser\" General Public License because it\ndoes Less to protect the user's freedom than the ordinary General\nPublic License.  It also provides other free software developers Less\nof an advantage over competing non-free programs.  These disadvantages\nare the reason we use the ordinary General Public License for many\nlibraries.  However, the Lesser license provides advantages in certain\nspecial circumstances.\n\n  For example, on rare occasions, there may be a special need to\nencourage the widest possible use of a certain library, so that it becomes\na de-facto standard.  To achieve this, non-free programs must be\nallowed to use the library.  A more frequent case is that a free\nlibrary does the same job as widely used non-free libraries.  In this\ncase, there is little to gain by limiting the free library to free\nsoftware only, so we use the Lesser General Public License.\n\n  In other cases, permission to use a particular library in non-free\nprograms enables a greater number of people to use a large body of\nfree software.  For example, permission to use the GNU C Library in\nnon-free programs enables many more people to use the whole GNU\noperating system, as well as its variant, the GNU/Linux operating\nsystem.\n\n  Although the Lesser General Public License is Less protective of the\nusers' freedom, it does ensure that the user of a program that is\nlinked with the Library has the freedom and the wherewithal to run\nthat program using a modified version of the Library.\n\n  The precise terms and conditions for copying, distribution and\nmodification follow.  Pay close attention to the difference between a\n\"work based on the library\" and a \"work that uses the library\".  The\nformer contains code derived from the library, whereas the latter must\nbe combined with the library in order to run.\n\n                  GNU LESSER GENERAL PUBLIC LICENSE\n   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION\n\n  0. This License Agreement applies to any software library or other\nprogram which contains a notice placed by the copyright holder or\nother authorized party saying it may be distributed under the terms of\nthis Lesser General Public License (also called \"this License\").\nEach licensee is addressed as \"you\".\n\n  A \"library\" means a collection of software functions and/or data\nprepared so as to be conveniently linked with application programs\n(which use some of those functions and data) to form executables.\n\n  The \"Library\", below, refers to any such software library or work\nwhich has been distributed under these terms.  A \"work based on the\nLibrary\" means either the Library or any derivative work under\ncopyright law: that is to say, a work containing the Library or a\nportion of it, either verbatim or with modifications and/or translated\nstraightforwardly into another language.  (Hereinafter, translation is\nincluded without limitation in the term \"modification\".)\n\n  \"Source code\" for a work means the preferred form of the work for\nmaking modifications to it.  For a library, complete source code means\nall the source code for all modules it contains, plus any associated\ninterface definition files, plus the scripts used to control compilation\nand installation of the library.\n\n  Activities other than copying, distribution and modification are not\ncovered by this License; they are outside its scope.  The act of\nrunning a program using the Library is not restricted, and output from\nsuch a program is covered only if its contents constitute a work based\non the Library (independent of the use of the Library in a tool for\nwriting it).  Whether that is true depends on what the Library does\nand what the program that uses the Library does.\n\n  1. You may copy and distribute verbatim copies of the Library's\ncomplete source code as you receive it, in any medium, provided that\nyou conspicuously and appropriately publish on each copy an\nappropriate copyright notice and disclaimer of warranty; keep intact\nall the notices that refer to this License and to the absence of any\nwarranty; and distribute a copy of this License along with the\nLibrary.\n\n  You may charge a fee for the physical act of transferring a copy,\nand you may at your option offer warranty protection in exchange for a\nfee.\n\n  2. You may modify your copy or copies of the Library or any portion\nof it, thus forming a work based on the Library, and copy and\ndistribute such modifications or work under the terms of Section 1\nabove, provided that you also meet all of these conditions:\n\n    a) The modified work must itself be a software library.\n\n    b) You must cause the files modified to carry prominent notices\n    stating that you changed the files and the date of any change.\n\n    c) You must cause the whole of the work to be licensed at no\n    charge to all third parties under the terms of this License.\n\n    d) If a facility in the modified Library refers to a function or a\n    table of data to be supplied by an application program that uses\n    the facility, other than as an argument passed when the facility\n    is invoked, then you must make a good faith effort to ensure that,\n    in the event an application does not supply such function or\n    table, the facility still operates, and performs whatever part of\n    its purpose remains meaningful.\n\n    (For example, a function in a library to compute square roots has\n    a purpose that is entirely well-defined independent of the\n    application.  Therefore, Subsection 2d requires that any\n    application-supplied function or table used by this function must\n    be optional: if the application does not supply it, the square\n    root function must still compute square roots.)\n\nThese requirements apply to the modified work as a whole.  If\nidentifiable sections of that work are not derived from the Library,\nand can be reasonably considered independent and separate works in\nthemselves, then this License, and its terms, do not apply to those\nsections when you distribute them as separate works.  But when you\ndistribute the same sections as part of a whole which is a work based\non the Library, the distribution of the whole must be on the terms of\nthis License, whose permissions for other licensees extend to the\nentire whole, and thus to each and every part regardless of who wrote\nit.\n\nThus, it is not the intent of this section to claim rights or contest\nyour rights to work written entirely by you; rather, the intent is to\nexercise the right to control the distribution of derivative or\ncollective works based on the Library.\n\nIn addition, mere aggregation of another work not based on the Library\nwith the Library (or with a work based on the Library) on a volume of\na storage or distribution medium does not bring the other work under\nthe scope of this License.\n\n  3. You may opt to apply the terms of the ordinary GNU General Public\nLicense instead of this License to a given copy of the Library.  To do\nthis, you must alter all the notices that refer to this License, so\nthat they refer to the ordinary GNU General Public License, version 2,\ninstead of to this License.  (If a newer version than version 2 of the\nordinary GNU General Public License has appeared, then you can specify\nthat version instead if you wish.)  Do not make any other change in\nthese notices.\n\n  Once this change is made in a given copy, it is irreversible for\nthat copy, so the ordinary GNU General Public License applies to all\nsubsequent copies and derivative works made from that copy.\n\n  This option is useful when you wish to copy part of the code of\nthe Library into a program that is not a library.\n\n  4. You may copy and distribute the Library (or a portion or\nderivative of it, under Section 2) in object code or executable form\nunder the terms of Sections 1 and 2 above provided that you accompany\nit with the complete corresponding machine-readable source code, which\nmust be distributed under the terms of Sections 1 and 2 above on a\nmedium customarily used for software interchange.\n\n  If distribution of object code is made by offering access to copy\nfrom a designated place, then offering equivalent access to copy the\nsource code from the same place satisfies the requirement to\ndistribute the source code, even though third parties are not\ncompelled to copy the source along with the object code.\n\n  5. A program that contains no derivative of any portion of the\nLibrary, but is designed to work with the Library by being compiled or\nlinked with it, is called a \"work that uses the Library\".  Such a\nwork, in isolation, is not a derivative work of the Library, and\ntherefore falls outside the scope of this License.\n\n  However, linking a \"work that uses the Library\" with the Library\ncreates an executable that is a derivative of the Library (because it\ncontains portions of the Library), rather than a \"work that uses the\nlibrary\".  The executable is therefore covered by this License.\nSection 6 states terms for distribution of such executables.\n\n  When a \"work that uses the Library\" uses material from a header file\nthat is part of the Library, the object code for the work may be a\nderivative work of the Library even though the source code is not.\nWhether this is true is especially significant if the work can be\nlinked without the Library, or if the work is itself a library.  The\nthreshold for this to be true is not precisely defined by law.\n\n  If such an object file uses only numerical parameters, data\nstructure layouts and accessors, and small macros and small inline\nfunctions (ten lines or less in length), then the use of the object\nfile is unrestricted, regardless of whether it is legally a derivative\nwork.  (Executables containing this object code plus portions of the\nLibrary will still fall under Section 6.)\n\n  Otherwise, if the work is a derivative of the Library, you may\ndistribute the object code for the work under the terms of Section 6.\nAny executables containing that work also fall under Section 6,\nwhether or not they are linked directly with the Library itself.\n\n  6. As an exception to the Sections above, you may also combine or\nlink a \"work that uses the Library\" with the Library to produce a\nwork containing portions of the Library, and distribute that work\nunder terms of your choice, provided that the terms permit\nmodification of the work for the customer's own use and reverse\nengineering for debugging such modifications.\n\n  You must give prominent notice with each copy of the work that the\nLibrary is used in it and that the Library and its use are covered by\nthis License.  You must supply a copy of this License.  If the work\nduring execution displays copyright notices, you must include the\ncopyright notice for the Library among them, as well as a reference\ndirecting the user to the copy of this License.  Also, you must do one\nof these things:\n\n    a) Accompany the work with the complete corresponding\n    machine-readable source code for the Library including whatever\n    changes were used in the work (which must be distributed under\n    Sections 1 and 2 above); and, if the work is an executable linked\n    with the Library, with the complete machine-readable \"work that\n    uses the Library\", as object code and/or source code, so that the\n    user can modify the Library and then relink to produce a modified\n    executable containing the modified Library.  (It is understood\n    that the user who changes the contents of definitions files in the\n    Library will not necessarily be able to recompile the application\n    to use the modified definitions.)\n\n    b) Use a suitable shared library mechanism for linking with the\n    Library.  A suitable mechanism is one that (1) uses at run time a\n    copy of the library already present on the user's computer system,\n    rather than copying library functions into the executable, and (2)\n    will operate properly with a modified version of the library, if\n    the user installs one, as long as the modified version is\n    interface-compatible with the version that the work was made with.\n\n    c) Accompany the work with a written offer, valid for at\n    least three years, to give the same user the materials\n    specified in Subsection 6a, above, for a charge no more\n    than the cost of performing this distribution.\n\n    d) If distribution of the work is made by offering access to copy\n    from a designated place, offer equivalent access to copy the above\n    specified materials from the same place.\n\n    e) Verify that the user has already received a copy of these\n    materials or that you have already sent this user a copy.\n\n  For an executable, the required form of the \"work that uses the\nLibrary\" must include any data and utility programs needed for\nreproducing the executable from it.  However, as a special exception,\nthe materials to be distributed need not include anything that is\nnormally distributed (in either source or binary form) with the major\ncomponents (compiler, kernel, and so on) of the operating system on\nwhich the executable runs, unless that component itself accompanies\nthe executable.\n\n  It may happen that this requirement contradicts the license\nrestrictions of other proprietary libraries that do not normally\naccompany the operating system.  Such a contradiction means you cannot\nuse both them and the Library together in an executable that you\ndistribute.\n\n  7. You may place library facilities that are a work based on the\nLibrary side-by-side in a single library together with other library\nfacilities not covered by this License, and distribute such a combined\nlibrary, provided that the separate distribution of the work based on\nthe Library and of the other library facilities is otherwise\npermitted, and provided that you do these two things:\n\n    a) Accompany the combined library with a copy of the same work\n    based on the Library, uncombined with any other library\n    facilities.  This must be distributed under the terms of the\n    Sections above.\n\n    b) Give prominent notice with the combined library of the fact\n    that part of it is a work based on the Library, and explaining\n    where to find the accompanying uncombined form of the same work.\n\n  8. You may not copy, modify, sublicense, link with, or distribute\nthe Library except as expressly provided under this License.  Any\nattempt otherwise to copy, modify, sublicense, link with, or\ndistribute the Library is void, and will automatically terminate your\nrights under this License.  However, parties who have received copies,\nor rights, from you under this License will not have their licenses\nterminated so long as such parties remain in full compliance.\n\n  9. You are not required to accept this License, since you have not\nsigned it.  However, nothing else grants you permission to modify or\ndistribute the Library or its derivative works.  These actions are\nprohibited by law if you do not accept this License.  Therefore, by\nmodifying or distributing the Library (or any work based on the\nLibrary), you indicate your acceptance of this License to do so, and\nall its terms and conditions for copying, distributing or modifying\nthe Library or works based on it.\n\n  10. Each time you redistribute the Library (or any work based on the\nLibrary), the recipient automatically receives a license from the\noriginal licensor to copy, distribute, link with or modify the Library\nsubject to these terms and conditions.  You may not impose any further\nrestrictions on the recipients' exercise of the rights granted herein.\nYou are not responsible for enforcing compliance by third parties with\nthis License.\n\n  11. If, as a consequence of a court judgment or allegation of patent\ninfringement or for any other reason (not limited to patent issues),\nconditions are imposed on you (whether by court order, agreement or\notherwise) that contradict the conditions of this License, they do not\nexcuse you from the conditions of this License.  If you cannot\ndistribute so as to satisfy simultaneously your obligations under this\nLicense and any other pertinent obligations, then as a consequence you\nmay not distribute the Library at all.  For example, if a patent\nlicense would not permit royalty-free redistribution of the Library by\nall those who receive copies directly or indirectly through you, then\nthe only way you could satisfy both it and this License would be to\nrefrain entirely from distribution of the Library.\n\nIf any portion of this section is held invalid or unenforceable under any\nparticular circumstance, the balance of the section is intended to apply,\nand the section as a whole is intended to apply in other circumstances.\n\nIt is not the purpose of this section to induce you to infringe any\npatents or other property right claims or to contest validity of any\nsuch claims; this section has the sole purpose of protecting the\nintegrity of the free software distribution system which is\nimplemented by public license practices.  Many people have made\ngenerous contributions to the wide range of software distributed\nthrough that system in reliance on consistent application of that\nsystem; it is up to the author/donor to decide if he or she is willing\nto distribute software through any other system and a licensee cannot\nimpose that choice.\n\nThis section is intended to make thoroughly clear what is believed to\nbe a consequence of the rest of this License.\n\n  12. If the distribution and/or use of the Library is restricted in\ncertain countries either by patents or by copyrighted interfaces, the\noriginal copyright holder who places the Library under this License may add\nan explicit geographical distribution limitation excluding those countries,\nso that distribution is permitted only in or among countries not thus\nexcluded.  In such case, this License incorporates the limitation as if\nwritten in the body of this License.\n\n  13. The Free Software Foundation may publish revised and/or new\nversions of the Lesser General Public License from time to time.\nSuch new versions will be similar in spirit to the present version,\nbut may differ in detail to address new problems or concerns.\n\nEach version is given a distinguishing version number.  If the Library\nspecifies a version number of this License which applies to it and\n\"any later version\", you have the option of following the terms and\nconditions either of that version or of any later version published by\nthe Free Software Foundation.  If the Library does not specify a\nlicense version number, you may choose any version ever published by\nthe Free Software Foundation.\n\n  14. If you wish to incorporate parts of the Library into other free\nprograms whose distribution conditions are incompatible with these,\nwrite to the author to ask for permission.  For software which is\ncopyrighted by the Free Software Foundation, write to the Free\nSoftware Foundation; we sometimes make exceptions for this.  Our\ndecision will be guided by the two goals of preserving the free status\nof all derivatives of our free software and of promoting the sharing\nand reuse of software generally.\n\n                            NO WARRANTY\n\n  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO\nWARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.\nEXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR\nOTHER PARTIES PROVIDE THE LIBRARY \"AS IS\" WITHOUT WARRANTY OF ANY\nKIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\nPURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE\nLIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME\nTHE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.\n\n  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN\nWRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY\nAND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU\nFOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR\nCONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE\nLIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING\nRENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A\nFAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF\nSUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH\nDAMAGES.\n\n                     END OF TERMS AND CONDITIONS\n\n\n"
  },
  {
    "path": "cola/libavoid/Makefile.am",
    "content": "EXTRA_DIST=libavoid.pc.in\n\nlib_LTLIBRARIES = libavoid.la\nlibavoid_la_CPPFLAGS = -I$(top_srcdir) -I$(includedir)/libavoid -fPIC\nlibavoid_la_LDFLAGS = -no-undefined\n\nlibavoid_la_SOURCES = connectionpin.cpp \\\n\t\t\tconnector.cpp \\\n\t\t\tconnend.cpp \\\n\t\t\tgeometry.cpp \\\n\t\t\tgeomtypes.cpp \\\n\t\t\tgraph.cpp \\\n\t\t\tjunction.cpp \\\n\t\t\tmakepath.cpp \\\n\t\t\tobstacle.cpp \\\n\t\t\torthogonal.cpp \\\n\t\t\trouter.cpp \\\n\t\t\tshape.cpp \\\n\t\t\ttimer.cpp \\\n\t\t\tvertices.cpp \\\n\t\t\tviscluster.cpp \\\n\t\t\tvisibility.cpp \\\n\t\t\tvpsc.cpp \\\n\t\t\thyperedge.cpp \\\n\t\t\thyperedgeimprover.cpp \\\n\t\t\tmtst.cpp \\\n\t\t\thyperedgetree.cpp \\\n\t\t\tscanline.cpp \\\n\t\t\tactioninfo.cpp \\\n\t\t\tassertions.h \\\n\t\t\tconnector.h \\\n\t\t\tconnectionpin.h \\\n\t\t\tconnend.h \\\n\t\t\tdebug.h \\\n\t\t\tgeometry.h \\\n\t\t\tgeomtypes.h \\\n\t\t\tgraph.h \\\n\t\t\tjunction.h \\\n\t\t\tlibavoid.h \\\n\t\t\tmakepath.h \\\n\t\t\tobstacle.h \\\n\t\t\torthogonal.h \\\n\t\t\trouter.h \\\n\t\t\tshape.h \\\n\t\t\ttimer.h \\\n\t\t\tvertices.h \\\n\t\t\tviscluster.h \\\n\t\t\tvisibility.h \\\n\t\t\thyperedge.h \\\n\t\t\tmtst.h \\\n\t\t\thyperedgetree.h \\\n\t\t\tscanline.h \\\n\t\t\tactioninfo.h \\\n\t\t\tvpsc.h \\\n\t\t\tdebughandler.h\n\nlibavoidincludedir = $(includedir)/libavoid\nlibavoidinclude_HEADERS = assertions.h \\\n\t\t\tconnector.h \\\n\t\t\tconnectionpin.h \\\n\t\t\tconnend.h \\\n\t\t\tdebug.h \\\n                        dllexport.h \\\n\t\t\tgeometry.h \\\n\t\t\tgeomtypes.h \\\n\t\t\tgraph.h \\\n\t\t\tjunction.h \\\n\t\t\tlibavoid.h \\\n\t\t\tmakepath.h \\\n\t\t\tobstacle.h \\\n\t\t\torthogonal.h \\\n\t\t\trouter.h \\\n\t\t\tshape.h \\\n\t\t\ttimer.h \\\n\t\t\tvertices.h \\\n\t\t\tviscluster.h \\\n\t\t\tvisibility.h \\\n\t\t\thyperedge.h \\\n\t\t\thyperedgeimprover.h \\\n\t\t\tmtst.h \\\n\t\t\thyperedgetree.h \\\n\t\t\tscanline.h \\\n\t\t\tactioninfo.h \\\n\t\t\tvpsc.h \\\n\t\t\tdebughandler.h\n\npkgconfigdir = $(libdir)/pkgconfig\npkgconfig_DATA = libavoid.pc\n\nSUBDIRS = . tests\n\n"
  },
  {
    "path": "cola/libavoid/README",
    "content": "libavoid - Fast, Incremental, Object-avoiding Line Router\n\nCopyright (C) 2004-2009  Monash University\n\nA cross-platform C++ library providing fast, object-avoiding connector\nrouting for use in interactive diagram editors.\n\nDocumentation is available for libavoid through Doxygen.  Install Doxygen and\nrun it in the libavoid directory to generate documentation for the interface.\n\nlibavoid is written and maintained by Michael Wybrow, a member of the \nAdaptive Diagrams and Documents lab at Monash University, Australia.\n\nlibavoid is available under the terms of open-source GNU Lesser General Public\nLicense v2.1.  Commercial licenses are also available, for more information \nplease contact Michael Wybrow <http://www.csse.monash.edu.au/~mwybrow/>.\n\nThe algorithms used for the connector routing are described in:\n\n  M. Wybrow, K. Marriott, and P.J. Stuckey. Incremental connector routing.\n  In Proceedings of 13th International Symposium on Graph Drawing, LNCS 3843,\n  pages 446-457. Springer-Verlag, 2006.\n  http://www.csse.monash.edu.au/~mwybrow/papers/wybrow-gd-2005.pdf\n\n  M. Wybrow, K. Marriott, and P.J. Stuckey. Orthogonal connector routing.\n  In Proceedings of 17th International Symposium on Graph Drawing (GD '09),\n  To appear 2010.\n  http://www.csse.monash.edu.au/~mwybrow/papers/wybrow-gd-2009.pdf\n\nlibavoid is currently used in the prototype research diagram editor \"Dunnart\":\n  http://www.csse.monash.edu.au/~mwybrow/dunnart/\nAs well as the professional open-source vector graphics editor \"Inkscape\":\n  http://www.inkscape.org/\n\n\n"
  },
  {
    "path": "cola/libavoid/actioninfo.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libavoid - Fast, Incremental, Object-avoiding Line Router\n *\n * Copyright (C) 2004-2011  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * Licensees holding a valid commercial license may use this file in\n * accordance with the commercial license agreement provided with the \n * library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  \n *\n * Author(s):  Michael Wybrow\n*/\n\n\n#include <algorithm>\n\n#include \"libavoid/actioninfo.h\"\n#include \"libavoid/shape.h\"\n#include \"libavoid/connector.h\"\n#include \"libavoid/junction.h\"\n\nnamespace Avoid {\n\n\nActionInfo::ActionInfo(ActionType t, ShapeRef *s, const Polygon& p, bool fM)\n    : type(t),\n      objPtr(s),\n      newPoly(p),\n      firstMove(fM)\n{\n    COLA_ASSERT(type == ShapeMove);\n}\n\n\nActionInfo::ActionInfo(ActionType t, ShapeRef *s)\n    : type(t),\n      objPtr(s)\n\n{\n    COLA_ASSERT((type == ShapeAdd) || (type == ShapeRemove) ||\n            (type == ShapeMove));\n}\n\n\nActionInfo::ActionInfo(ActionType t, JunctionRef *j, const Point& p)\n    : type(t),\n      objPtr(j),\n      newPosition(p)\n{\n    COLA_ASSERT(type == JunctionMove);\n}\n\n\nActionInfo::ActionInfo(ActionType t, JunctionRef *j)\n    : type(t),\n      objPtr(j)\n{\n    COLA_ASSERT((type == JunctionAdd) || (type == JunctionRemove) ||\n            (type == JunctionMove));\n}\n\nActionInfo::ActionInfo(ActionType t, ConnRef *c)\n    : type(t),\n      objPtr(c)\n{\n    COLA_ASSERT(type == ConnChange);\n}\n\n\nActionInfo::ActionInfo(ActionType t, ShapeConnectionPin *p)\n    : type(t),\n      objPtr(p)\n{\n    COLA_ASSERT(type == ConnectionPinChange);\n}\n\n\nActionInfo::~ActionInfo()\n{\n}\n\n\nObstacle *ActionInfo::obstacle(void) const\n{\n    COLA_ASSERT((type == ShapeMove) || (type == ShapeAdd) || \n            (type == ShapeRemove) || (type == JunctionMove) || \n            (type == JunctionAdd) || (type == JunctionRemove));\n    return (static_cast<Obstacle *> (objPtr));\n}\n\n\nShapeRef *ActionInfo::shape(void) const\n{\n    return (dynamic_cast<ShapeRef *> (obstacle()));\n}\n\n\nConnRef *ActionInfo::conn(void) const\n{\n    COLA_ASSERT(type == ConnChange);\n    return (static_cast<ConnRef *> (objPtr));\n}\n\nJunctionRef *ActionInfo::junction(void) const\n{\n    return (dynamic_cast<JunctionRef *> (obstacle()));\n}\n\n\nvoid ActionInfo::addConnEndUpdate(const unsigned int type, \n        const ConnEnd& connEnd, bool isConnPinMoveUpdate)\n{\n    bool alreadyExists = false;\n    for (ConnUpdateList::iterator conn = conns.begin();\n            conn != conns.end(); ++conn)\n    {\n        // Look for an existing queued change to the same end.\n        if (conn->first == type)\n        {\n            // Found a queued change to the same endpoint of the\n            // connector. If this is a pin change as a result of a\n            // shape move, then leave the user created update\n            // that was found (since it may be moving the connection\n            // to connect to a different shape/pin.  But if this is a\n            // user change, then overwrite the previous change.\n            alreadyExists = true;\n            if (!isConnPinMoveUpdate)\n            {\n                // Overwrite the queued change with this one.\n                conn->second = connEnd;\n            }\n            break;\n        }\n    }\n\n    if (!alreadyExists)\n    {\n        // Matching change not found, so add this one.\n        conns.push_back(std::make_pair(type, connEnd));\n    }\n}\n\n\nbool ActionInfo::operator==(const ActionInfo& rhs) const\n{\n    return (type == rhs.type) && (objPtr == rhs.objPtr);\n}\n\n\nbool ActionInfo::operator<(const ActionInfo& rhs) const\n{\n    if (type != rhs.type)\n    {\n        return type < rhs.type;\n    }\n\n    if (type == ConnChange)\n    {\n        return conn()->id() < rhs.conn()->id();\n    }\n    else if (type == ConnectionPinChange)\n    {\n        // NOTE Comparing pointers may not preserve the order of\n        //      objects, but the order of Connection Pins is not\n        //      used so this is not an issue here.\n        return objPtr < rhs.objPtr;\n    }\n    else\n    {\n        return obstacle()->id() < rhs.obstacle()->id();\n    }\n}\n\n\n}\n\n"
  },
  {
    "path": "cola/libavoid/actioninfo.h",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libavoid - Fast, Incremental, Object-avoiding Line Router\n *\n * Copyright (C) 2004-2011  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * Licensees holding a valid commercial license may use this file in\n * accordance with the commercial license agreement provided with the \n * library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  \n *\n * Author(s):   Michael Wybrow\n*/\n\n#ifndef AVOID_ACTIONINFO_H\n#define AVOID_ACTIONINFO_H\n\n#include <list>\n\n#include \"libavoid/actioninfo.h\"\n#include \"libavoid/connend.h\"\n#include \"libavoid/geomtypes.h\"\n\nnamespace Avoid {\n\n// This class is not intended for public use.\n// It is used internally by Router to track actions performed on objects\n// during transactions.\n\n\n\nclass ShapeRef;\nclass JunctionRef;\n\n\nenum ActionType {\n    ShapeMove,\n    ShapeAdd,\n    ShapeRemove,\n    JunctionMove,\n    JunctionAdd,\n    JunctionRemove,\n    ConnChange,\n    ConnectionPinChange\n};\n\ntypedef std::list<std::pair<unsigned int, ConnEnd> > ConnUpdateList;\n\nclass ActionInfo {\n    public:\n        ActionInfo(ActionType t, ShapeRef *s, const Polygon& p, bool fM);\n        ActionInfo(ActionType t, ShapeRef *s);\n        ActionInfo(ActionType t, JunctionRef *j, const Point& p);\n        ActionInfo(ActionType t, JunctionRef *j);\n        ActionInfo(ActionType t, ConnRef *c);\n        ActionInfo(ActionType t, ShapeConnectionPin *p);\n        ~ActionInfo();\n        Obstacle *obstacle(void) const;\n        ShapeRef *shape(void) const;\n        ConnRef *conn(void) const;\n        JunctionRef *junction(void) const;\n        void addConnEndUpdate(const unsigned int type, const ConnEnd& connEnd,\n                bool isConnPinMoveUpdate);\n        bool operator==(const ActionInfo& rhs) const;\n        bool operator<(const ActionInfo& rhs) const;\n        \n        ActionType type;\n        void *objPtr;\n        Polygon newPoly;\n        Point newPosition;\n        bool firstMove;\n        ConnUpdateList conns;\n};\ntypedef std::list<ActionInfo> ActionInfoList;\n\n\n}\n#endif\n"
  },
  {
    "path": "cola/libavoid/assertions.h",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libavoid - Fast, Incremental, Object-avoiding Line Router\n *\n * Copyright (C) 2009  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * Licensees holding a valid commercial license may use this file in\n * accordance with the commercial license agreement provided with the \n * library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  \n *\n * Author(s):   Michael Wybrow\n*/\n\n#ifndef AVOID_ASSERTIONS_H\n#define AVOID_ASSERTIONS_H\n\n#define COLA_UNUSED(expr) do { (void)(expr); } while (0)\n\n#ifdef NDEBUG \n\n  #define COLA_ASSERT(expr)  static_cast<void>(0)\n\n#else // Not NDEBUG\n\n  #ifdef _MSC_VER\n    // Compiling with Microsoft Visual C++ compiler\n\n    // Prevent inclusion of min and max macros.\n    #define NOMINMAX\n\n    #include <afx.h>\n    #define COLA_ASSERT(expr) ASSERT(expr)\n\n  #elif defined(USE_ASSERT_EXCEPTIONS)\n\n    #include \"libvpsc/assertions.h\"\n\n  #else\n\n    #include <cassert>\n    #define COLA_ASSERT(expr)  assert(expr)\n\n  #endif\n\n#endif\n\n\n#endif // AVOID_ASSERTIONS_H\n\n"
  },
  {
    "path": "cola/libavoid/connectionpin.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libavoid - Fast, Incremental, Object-avoiding Line Router\n *\n * Copyright (C) 2010-2014  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * Licensees holding a valid commercial license may use this file in\n * accordance with the commercial license agreement provided with the \n * library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  \n *\n * Author(s):  Michael Wybrow\n*/\n\n#include <cfloat>\n\n#include \"libavoid/connectionpin.h\"\n#include \"libavoid/shape.h\"\n#include \"libavoid/junction.h\"\n#include \"libavoid/vertices.h\"\n#include \"libavoid/router.h\"\n#include \"libavoid/visibility.h\"\n#include \"libavoid/debug.h\"\n\n\nnamespace Avoid {\n\nShapeConnectionPin::ShapeConnectionPin(ShapeRef *shape, \n        const unsigned int classId, const double xPortionOffset,\n        const double yPortionOffset, const bool proportional,\n        const double insideOffset, const ConnDirFlags visDirs)\n    : m_shape(shape),\n      m_junction(nullptr),\n      m_class_id(classId),\n      m_x_offset(xPortionOffset),\n      m_y_offset(yPortionOffset),\n      m_inside_offset(insideOffset),\n      m_visibility_directions(visDirs),\n      m_exclusive(true),\n      m_connection_cost(0.0),\n      m_vertex(nullptr),\n      m_using_proportional_offsets(proportional)\n{\n    commonInitForShapeConnection();\n}\n\nShapeConnectionPin::ShapeConnectionPin(ShapeRef *shape, \n        const unsigned int classId, const double xOffset,\n        const double yOffset, const double insideOffset,\n        const ConnDirFlags visDirs)\n    : m_shape(shape),\n      m_junction(nullptr),\n      m_class_id(classId),\n      m_x_offset(xOffset),\n      m_y_offset(yOffset),\n      m_inside_offset(insideOffset),\n      m_visibility_directions(visDirs),\n      m_exclusive(true),\n      m_connection_cost(0.0),\n      m_vertex(nullptr),\n      m_using_proportional_offsets(true)\n{\n    commonInitForShapeConnection();\n}\n\n\nvoid ShapeConnectionPin::commonInitForShapeConnection(void)\n{\n    COLA_ASSERT(m_shape != nullptr);\n    COLA_ASSERT(m_class_id > 0);\n\n    if (m_using_proportional_offsets)\n    {\n        // Parameter checking\n        if ((m_x_offset < 0) || (m_x_offset > 1))\n        {\n            err_printf(\"xPortionOffset value (%g) in ShapeConnectionPin \"\n                    \"constructor not between 0 and 1.\\n\", m_x_offset);\n        }\n        if ((m_y_offset < 0) || (m_y_offset > 1))\n        {\n            err_printf(\"yPortionOffset value (%g) in ShapeConnectionPin \"\n                    \"constructor not between 0 and 1.\\n\", m_y_offset);\n        }\n    }\n    else\n    {\n        const Box shapeBox = m_shape->polygon().offsetBoundingBox(0.0);\n        // Parameter checking\n        if (m_x_offset > shapeBox.width())\n        {\n            err_printf(\"xOffset value (%g) in ShapeConnectionPin constructor \"\n                    \"greater than shape width (%g).\\n\", m_x_offset, \n                    shapeBox.width());\n        }\n        if (m_y_offset > shapeBox.height())\n        {\n            err_printf(\"yOffset value (%g) in ShapeConnectionPin constructor \"\n                    \"greater than shape height (%g).\\n\", m_y_offset,\n                    shapeBox.height());\n        }\n    }\n\n    m_router = m_shape->router();\n    m_shape->addConnectionPin(this);\n    \n    // Create a visibility vertex for this ShapeConnectionPin.\n    VertID id(m_shape->id(), kShapeConnectionPin, \n            VertID::PROP_ConnPoint | VertID::PROP_ConnectionPin);\n    m_vertex = new VertInf(m_router, id, this->position());\n    m_vertex->visDirections = this->directions();\n    \n    if (m_vertex->visDirections == ConnDirAll)\n    {\n        // A pin with visibility in all directions is not exclusive \n        // by default.\n        m_exclusive = false;\n    }\n\n    if (m_router->m_allows_polyline_routing)\n    {\n        vertexVisibility(m_vertex, nullptr, true, true);\n    }\n}\n\n\nShapeConnectionPin::ShapeConnectionPin(JunctionRef *junction, \n        const unsigned int classId, const ConnDirFlags visDirs)\n    : m_shape(nullptr),\n      m_junction(junction),\n      m_class_id(classId),\n      m_x_offset(0.0),\n      m_y_offset(0.0),\n      m_inside_offset(0.0),\n      m_visibility_directions(visDirs),\n      m_exclusive(true),\n      m_connection_cost(0.0),\n      m_vertex(nullptr),\n      m_using_proportional_offsets(false)\n{\n    COLA_ASSERT(m_junction != nullptr);\n    m_router = m_junction->router();\n    m_junction->addConnectionPin(this);\n    \n    // Create a visibility vertex for this ShapeConnectionPin.\n    // XXX These IDs should really be uniquely identifiable in case there\n    //     are multiple pins on a shape.  I think currently this case will\n    //     break rubber-band routing.\n    VertID id(m_junction->id(), kShapeConnectionPin, \n            VertID::PROP_ConnPoint | VertID::PROP_ConnectionPin);\n    m_vertex = new VertInf(m_router, id, m_junction->position());\n    m_vertex->visDirections = visDirs;\n\n    if (m_router->m_allows_polyline_routing)\n    {\n        vertexVisibility(m_vertex, nullptr, true, true);\n    }\n}\n\n\nShapeConnectionPin::~ShapeConnectionPin()\n{\n    COLA_ASSERT(m_shape || m_junction);\n    if (m_shape)\n    {\n        m_shape->removeConnectionPin(this);\n    }\n    else if (m_junction)\n    {\n        m_junction->removeConnectionPin(this);\n    }\n\n    // Disconnect connend using this pin.\n    while (!m_connend_users.empty())\n    {\n        ConnEnd *connend = *(m_connend_users.begin());\n        connend->freeActivePin();\n    }\n\n    if (m_vertex)\n    {\n        m_vertex->removeFromGraph();\n        m_router->vertices.removeVertex(m_vertex);\n        delete m_vertex;\n        m_vertex = nullptr;\n    }\n}\n\nvoid ShapeConnectionPin::updatePositionAndVisibility(void)\n{\n    m_vertex->Reset(this->position());\n    m_vertex->visDirections = this->directions();\n    updateVisibility();\n}\n\nvoid ShapeConnectionPin::updateVisibility(void)\n{\n    m_vertex->removeFromGraph();\n    if (m_router->m_allows_polyline_routing)\n    {\n        vertexVisibility(m_vertex, nullptr, true, true);\n    }\n}\n\nvoid ShapeConnectionPin::setConnectionCost(const double cost)\n{\n    COLA_ASSERT(cost >= 0);\n\n    m_connection_cost = cost;\n}\n \n\nvoid ShapeConnectionPin::setExclusive(const bool exclusive)\n{\n    m_exclusive = exclusive;\n}\n\nbool ShapeConnectionPin::isExclusive(void) const\n{\n    return m_exclusive;\n}\n\nvoid ShapeConnectionPin::updatePosition(const Point& newPosition)\n{\n    m_vertex->Reset(newPosition);\n}\n\n\nvoid ShapeConnectionPin::updatePosition(const Polygon& newPoly)\n{\n    m_vertex->Reset(position(newPoly));\n}\n\n\nconst Point ShapeConnectionPin::position(const Polygon& newPoly) const\n{\n    if (m_junction)\n    {\n        return m_junction->position();\n    }\n\n    const Polygon& poly = (newPoly.empty()) ? m_shape->polygon() : newPoly;\n    const Box shapeBox = poly.offsetBoundingBox(0.0);\n\n    Point point;\n\n    if (m_using_proportional_offsets)\n    {\n        // We want to place connection points exactly on the edges of shapes, \n        // or possibly slightly inside them (if m_insideOfset is set).\n        if (m_x_offset == ATTACH_POS_LEFT)\n        {\n            point.x = shapeBox.min.x + m_inside_offset;\n            point.vn = 6;\n        }\n        else if (m_x_offset == ATTACH_POS_RIGHT)\n        {\n            point.x = shapeBox.max.x - m_inside_offset;\n            point.vn = 4;\n        }\n        else\n        {\n            point.x = shapeBox.min.x + (m_x_offset * shapeBox.width());\n        }\n\n        if (m_y_offset == ATTACH_POS_TOP)\n        {\n            point.y = shapeBox.min.y + m_inside_offset;\n            point.vn = 5;\n        }\n        else if (m_y_offset == ATTACH_POS_BOTTOM)\n        {\n            point.y = shapeBox.max.y - m_inside_offset;\n            point.vn = 7;\n        }\n        else\n        {\n            point.y = shapeBox.min.y + (m_y_offset * shapeBox.height());\n        }\n    }\n    else\n    {\n        // Using absolute offsets for connection pin position.\n        if (m_x_offset == ATTACH_POS_MIN_OFFSET)\n        {\n            point.x = shapeBox.min.x + m_inside_offset;\n            point.vn = 6;\n        }\n        else if ((m_x_offset == ATTACH_POS_MAX_OFFSET) ||\n                 (m_x_offset == shapeBox.width()))\n        {\n            point.x = shapeBox.max.x - m_inside_offset;\n            point.vn = 4;\n        }\n        else\n        {\n            point.x = shapeBox.min.x + m_x_offset;\n        }\n\n        if (m_y_offset == ATTACH_POS_MIN_OFFSET)\n        {\n            point.y = shapeBox.min.y + m_inside_offset;\n            point.vn = 5;\n        }\n        else if ((m_y_offset == ATTACH_POS_MAX_OFFSET) ||\n                 (m_y_offset == shapeBox.height()))\n        {\n            point.y = shapeBox.max.y - m_inside_offset;\n            point.vn = 7;\n        }\n        else\n        {\n            point.y = shapeBox.min.y + m_y_offset;\n        }\n    }\n\n    return point;\n}\n\n\nConnDirFlags ShapeConnectionPin::directions(void) const\n{\n    ConnDirFlags visDir = m_visibility_directions;\n    if (m_visibility_directions == ConnDirNone)\n    {\n        // None is set, use the defaults:\n        if (m_x_offset == ATTACH_POS_LEFT)\n        {\n            visDir |= ConnDirLeft;\n        }\n        else if (m_x_offset == ATTACH_POS_RIGHT)\n        {\n            visDir |= ConnDirRight;\n        }\n\n        if (m_y_offset == ATTACH_POS_TOP)\n        {\n            visDir |= ConnDirUp;\n        }\n        else if (m_y_offset == ATTACH_POS_BOTTOM)\n        {\n            visDir |= ConnDirDown;\n        }\n\n        if (visDir == ConnDirNone)\n        {\n            visDir = ConnDirAll;\n        }\n    }\n    return visDir;\n}\n\nvoid ShapeConnectionPin::outputCode(FILE *fp) const\n{\n    COLA_ASSERT(m_shape || m_junction);\n    if (m_shape)\n    {\n        fprintf(fp, \"    connPin = new ShapeConnectionPin(shapeRef%u, %u, \"\n                \"%\" PREC \"g, %\" PREC \"g, %s, %g, (ConnDirFlags) %u);\\n\",\n                m_shape->id(), m_class_id, m_x_offset, m_y_offset, \n                (m_using_proportional_offsets ? \"true\" : \"false\"),\n                m_inside_offset, (unsigned int) m_visibility_directions);\n    }\n    else if (m_junction)\n    {\n        fprintf(fp, \"    connPin = new ShapeConnectionPin(junctionRef%u, %u, \"\n                \"(ConnDirFlags) %u);\\n\", m_junction->id(), m_class_id, \n                (unsigned int) m_visibility_directions);\n    }\n\n    if ((m_vertex->visDirections != ConnDirAll) && (m_exclusive == false))\n    {\n        // Directional port is not exclusive (the default), so output this.\n        fprintf(fp, \"    connPin->setExclusive(false);\\n\");\n    }\n}\n\nConnectionPinIds ShapeConnectionPin::ids(void) const\n{\n    return std::make_pair(containingObjectId(), m_class_id);\n}\n\nunsigned int ShapeConnectionPin::containingObjectId(void) const\n{\n    COLA_ASSERT(m_shape || m_junction);\n    return (m_shape) ? m_shape->id() : m_junction->id();\n}\n\nbool ShapeConnectionPin::operator==(const ShapeConnectionPin& rhs) const\n{\n    COLA_ASSERT(m_router == rhs.m_router);\n\n    if (containingObjectId() != rhs.containingObjectId())\n    {\n        return false;\n    }\n\n    // The shape/junction is equal, so examine the unique members.\n    if (m_class_id != rhs.m_class_id)\n    {\n        return false;\n    }\n    if (m_visibility_directions != rhs.m_visibility_directions)\n    {\n        return false;\n    }\n    if (m_x_offset != rhs.m_x_offset)\n    {\n       return false;\n    }\n    if (m_y_offset != rhs.m_y_offset)\n    {\n       return false;\n    }\n    if (m_inside_offset != rhs.m_inside_offset)\n    {\n       return false;\n    } \n    return true;  \n}\n\nbool ShapeConnectionPin::operator<(const ShapeConnectionPin& rhs) const\n{\n    COLA_ASSERT(m_router == rhs.m_router);\n\n    if (containingObjectId() != rhs.containingObjectId())\n    {\n        return containingObjectId() < rhs.containingObjectId();\n    }\n    // Note: operator< is used for set ordering within each shape or junction,\n    // so the m_shape/m_junction values should match and we needn't perform the\n    // above test in most cases and could just assert the following:\n    // COLA_ASSERT(m_shape == rhs.m_shape);\n    // COLA_ASSERT(m_junction == rhs.m_junction);\n\n    if (m_class_id != rhs.m_class_id)\n    {\n        return m_class_id < rhs.m_class_id;\n    }\n    if (m_visibility_directions != rhs.m_visibility_directions)\n    {\n        return m_visibility_directions < rhs.m_visibility_directions;\n    }\n    if (m_x_offset != rhs.m_x_offset)\n    {\n        return m_x_offset < rhs.m_x_offset;\n    }\n    if (m_y_offset != rhs.m_y_offset)\n    {\n        return m_y_offset < rhs.m_y_offset;\n    }\n    if (m_inside_offset != rhs.m_inside_offset)\n    {\n        return m_inside_offset < rhs.m_inside_offset;\n    }\n\n    // Otherwise, they are considered the same.\n    return false;\n} \n\n\n//============================================================================\n\n}\n\n\n"
  },
  {
    "path": "cola/libavoid/connectionpin.h",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libavoid - Fast, Incremental, Object-avoiding Line Router\n *\n * Copyright (C) 2010-2014  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * Licensees holding a valid commercial license may use this file in\n * accordance with the commercial license agreement provided with the \n * library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  \n *\n * Author(s):   Michael Wybrow\n*/\n\n//! @file    connectionpin.h\n//! @brief   Contains the interface for the ShapeConnectionPin class.\n\n\n#ifndef AVOID_CONNECTIONPIN_H\n#define AVOID_CONNECTIONPIN_H\n\n#include <cstdio>\n#include <set>\n#include <climits>\n#include <utility>\n\n#include \"libavoid/dllexport.h\"\n#include \"libavoid/connend.h\"\n#include \"libavoid/geomtypes.h\"\n\nnamespace Avoid {\n\n\nstatic const unsigned int CONNECTIONPIN_UNSET  = INT_MAX;\nstatic const unsigned int CONNECTIONPIN_CENTRE = INT_MAX - 1;\n\nclass Router;\nclass ShapeRef;\nclass JunctionRef;\nclass ConnEnd;\nclass VertInf;\n\ntypedef std::pair<unsigned int, unsigned int> ConnectionPinIds;\n\n// Used to specify position on shape when constructing a shape-attached ConnEnd.\n//\nstatic const double ATTACH_POS_TOP = 0;\nstatic const double ATTACH_POS_CENTRE = 0.5;\nstatic const double ATTACH_POS_BOTTOM = 1;\nstatic const double ATTACH_POS_LEFT = ATTACH_POS_TOP;\nstatic const double ATTACH_POS_RIGHT = ATTACH_POS_BOTTOM;\n\nstatic const double ATTACH_POS_MIN_OFFSET = 0;\nstatic const double ATTACH_POS_MAX_OFFSET = -1;\n\n\n//! @brief  The ShapeConnectionPin class represents a fixed point or \"pin\" \n//!         on a shape that can be connected to.\n//!\n//! A pin has a position that is specified relative to its parent shape.  \n//! When the shape is moved or resized, the pin will be automatically moved \n//! accordingly.  Connectors attached to the pin will be rerouted.\n//!\n//! Pins have a visibility direction and numeric ID used to identify them.\n//! This ID, known as their classId, may be shared by multiple pins on the\n//! same shape.  You can use classIds when you want libavoid to choose from \n//! multiple potential choices (e.g., to specify multiple types of pins such \n//! as \"input\" or \"output\" pins on circuit elements).\n//!\n//! If you would like connectors that attach to a single specific position\n//! on a shape, then just give each pin a unique classId (for that shape)\n//! and tell the connector to attach to that particular pin.\n//! \n//! Pins may optionally be given a connection cost, via setConnectionCost(). \n//! In the case of multiple pins with the same classId, this causes the \n//! lower-cost pins to be chosen first, rather than libavoid choosing the\n//! best pin with that classId based solely on connector path cost.\n//! \n//! Pins can be exclusive, which means subsequent connectors routed to the \n//! same classId will choose a different pin.  Pins with a specified direction \n//! are exclusive by default, those with visibility in all directions are \n//! non-exclusive by default.  This behaviour can be changed by calling the \n//! ShapeConnectionPin::setExclusive() method.  Exclusive pins may only have \n//! a single connector attached to them.\n//!\nclass AVOID_EXPORT ShapeConnectionPin\n{\n    public:\n        //! @brief Constructs a ShapeConnectionPin at a specified absolute or\n        //!        proportional position relative to the parent shape.\n        //!\n        //! Ownership of this ShapeConnectionPin is passed to the parent shape.\n        //!\n        //! The connection point position offsets can be specified as absolute\n        //! or proportional.  If absolute, the xOffset and yOffset values are\n        //! absolute offsets relative to the lower X and Y shape rectangle \n        //! border positions.  If proportional, the xOffset and yOffset values\n        //! represent proportions  of the shape's total width and height using \n        //! a floating point value between 0 and 1.  \n        //! \n        //! Note that if you need the connection pin to appear at an exact \n        //! position this may not be possible via proportional positions due \n        //! to numerical inaccuracy in floating point multiplications.  In \n        //! this case you should use absolute offsets instead.\n        //!\n        //! There are some predefined values for specifying the xOffset\n        //! and yOffset arguments for proportional offsets:\n        //!  -  ATTACH_POS_TOP = 0\n        //!  -  ATTACH_POS_LEFT = 0\n        //!  -  ATTACH_POS_CENTRE = 0.5\n        //!  -  ATTACH_POS_BOTTOM = 1\n        //!  -  ATTACH_POS_RIGHT = 1\n        //! And two more for specifying absolute offsets:\n        //!  -  ATTACH_POS_MIN_OFFSET = offset of zero\n        //!  -  ATTACH_POS_MAX_OFFSET = offset of shape width/height\n        //!\n        //! Importantly, shape connection pins will be moved automatically when\n        //! the parent shape is moved or resized.  Attachment for connectors \n        //! will be chosen based on the classId specified to ConnEnd and these\n        //! connectors will be subsequently rerouted.\n        //!\n        //! If no value is given for the visDirs argument, then visibility is \n        //! automatically determined based on the position of the connection\n        //! point.  Points on the shape boundary will have visibility from the\n        //! shape out of that edge while points in the interior will have\n        //! visibility in all directions.  Note: Pins with visibility in a\n        //! specific direction are exclusive by default, whereas those with \n        //! visibility in all directions are non-exclusive by default.\n        //!\n        //! The insideOffset argument can be used to set a distance to \n        //! automatically offset the point within the shape.  This is useful\n        //! for orthogonal routing, where you usually want the connection \n        //! point to lie inside the shape rather than exactly on its boundary.\n        //! This offset will only be applied for connection pins specified \n        //! with a position exactly on the shape boundary.\n        //! \n        //! @param[in]  shape          A pointer to the containing parent \n        //!                            shape's ShapeRef.\n        //! @param[in]  classId        A non-zero integer used to identify \n        //!                            this pin and other equivalent \n        //!                            connection point, and used to specify \n        //!                            attachment via the ConnEnd class.\n        //! @param[in]  xOffset        The X offset for the connection pin from\n        //!                            the shape's lower X border position.\n        //! @param[in]  yOffset        The Y offset for the connection pin from\n        //!                            the shape's lower Y border position.\n        //! @param[in]  proportional   A boolean specifying whether the X and Y\n        //!                            offsets are proportional or not.\n        //! @param[in]  insideOffset   A distance to offset the connection \n        //!                            point inside the shape if it lies on \n        //!                            the boundary. Use 0.0 for no offset.\n        //! @param[in]  visDirs        One or more Avoid::ConnDirFlag options \n        //!                            specifying the directions that this \n        //!                            connection point has visibility.  \n        //!                            Use ConnDirNone to have visibility \n        //!                            be directional if a pin is on the shape\n        //!                            edge or in all directions otherwise.\n        //!\n        ShapeConnectionPin(ShapeRef *shape, const unsigned int classId,\n                const double xOffset, const double yOffset, \n                const bool proportional, const double insideOffset,\n                const ConnDirFlags visDirs);\n        \n        // Old constructor.  Provided for compatibility with old debug files.\n        ShapeConnectionPin(ShapeRef *shape, const unsigned int classId,\n                const double xOffset, const double yOffset, \n                const double insideOffset, const ConnDirFlags visDirs);\n \n        //! @brief Constructs a ShapeConnectionPin on a JunctionRef.\n        //!\n        //! Ownership of this ShapeConnectionPin is passed to the parent \n        //! junction.\n        //!\n        //! This will usually be automatically called by the JunctionRef \n        //! constructor to give the Junction four ShapeConnectionPins, \n        //! facing up, down, left and right.\n        //!\n        //! @param[in]  junction       A pointer to the containing parent \n        //!                            junction's JunctionRef.\n        //! @param[in]  classId        An integer used to mark the class or \n        //!                            group of this connection point, used \n        //!                            for specifying attachment to ConnEnd.\n        //! @param[in]  visDirs        One or more Avoid::ConnDirFlag options \n        //!                            specifying the directions that this \n        //!                            connection point has visibility. \n        //!\n        ShapeConnectionPin(JunctionRef *junction, const unsigned int classId,\n                const ConnDirFlags visDirs = ConnDirNone);\n        \n// To prevent C++ objects from being destroyed in garbage collected languages\n// when the libraries are called from SWIG, we hide the declarations of the\n// destructors and prevent generation of default destructors.\n#ifndef SWIG\n        ~ShapeConnectionPin();\n#endif\n        \n        //! @brief Sets a cost used when selecting whether connectors should be\n        //!        be attached to this connection pin.\n        //!\n        //! @param[in]  cost  A routing cost applied to a route when selecting\n        //!                   this connection pin.\n        //!\n        void setConnectionCost(const double cost);\n\n        //! @brief Returns the position of this connection pin.\n        //!\n        //! @return The position of this connection pin.\n        //!\n        const Point position(const Polygon& newPoly = Polygon()) const;\n\n        //! @brief Returns the directions in which this connection pin\n        //!        has visibility.\n        //!\n        //! @return The visibility directions for this connection pin.\n        //!\n        ConnDirFlags directions(void) const;\n        \n        //! @brief  Sets whether the pin is exclusive, i.e., only one connector\n        //!         can attach to it.  This defaults to true for connection \n        //!         pins with visibility in a specific directions and false for\n        //!         pins with visibility in all directions.\n        //!\n        //! @param[in]  exclusive  A bool representing whether this pin should\n        //!                        be exclusive.\n        //!\n        void setExclusive(const bool exclusive);\n\n        //! @brief Returns whether the connection pin is exclusive, \n        //!        i.e., only one connector can attach to it.\n        //!\n        //! @return  A boolean denoting whether this pin is exclusive.\n        //!\n        bool isExclusive(void) const;\n\n        ConnectionPinIds ids(void) const;\n\n        bool operator==(const ShapeConnectionPin& rhs) const;\n        bool operator<(const ShapeConnectionPin& rhs) const;\n    private:\n        friend class ShapeRef;\n        friend class JunctionRef;\n        friend class Obstacle;\n        friend class ConnEnd;\n        friend class Router;\n \n        void commonInitForShapeConnection(void);\n        void updatePosition(const Point& newPosition);\n        void updatePosition(const Polygon& newPoly);\n        void updatePositionAndVisibility(void);\n        void updateVisibility(void);\n        void outputCode(FILE *fp) const;\n        unsigned int containingObjectId(void) const;\n\n        // Unique properties\n        Router *m_router;\n        ShapeRef *m_shape;\n        JunctionRef *m_junction;\n        unsigned int m_class_id;\n        double m_x_offset;\n        double m_y_offset;\n        double m_inside_offset;\n        ConnDirFlags m_visibility_directions;\n        \n        // Some extra properties.\n        bool m_exclusive;\n        double m_connection_cost;\n        // The set of connends using this pin.\n        std::set<ConnEnd *> m_connend_users;\n        VertInf *m_vertex;\n        bool m_using_proportional_offsets;\n};\n\nclass CmpConnPinPtr\n{\n    public:\n        CmpConnPinPtr()\n        {\n        }\n        bool operator()(const ShapeConnectionPin *lhs, \n                const ShapeConnectionPin *rhs) const \n        {\n            return (*lhs) < (*rhs);\n        }\n};\n\ntypedef std::set<ShapeConnectionPin *, CmpConnPinPtr> ShapeConnectionPinSet;\n\n}\n\n\n#endif\n\n\n"
  },
  {
    "path": "cola/libavoid/connector.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libavoid - Fast, Incremental, Object-avoiding Line Router\n *\n * Copyright (C) 2004-2014  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * Licensees holding a valid commercial license may use this file in\n * accordance with the commercial license agreement provided with the \n * library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  \n *\n * Author(s):  Michael Wybrow\n*/\n\n\n#include <cstring>\n#include <cfloat>\n#include <cmath>\n#include <cstdlib>\n#include <algorithm>\n#include <queue>\n#include <limits>\n\n#include \"libavoid/connector.h\"\n#include \"libavoid/connend.h\"\n#include \"libavoid/router.h\"\n#include \"libavoid/visibility.h\"\n#include \"libavoid/debug.h\"\n#include \"libavoid/assertions.h\"\n#include \"libavoid/junction.h\"\n#include \"libavoid/makepath.h\"\n#include \"libavoid/debughandler.h\"\n\n\nnamespace Avoid {\n\n    \nConnRef::ConnRef(Router *router, const unsigned int id)\n    : m_router(router),\n      m_type(router->validConnType()),\n      m_reroute_flag_ptr(nullptr),\n      m_needs_reroute_flag(true),\n      m_false_path(false),\n      m_needs_repaint(false),\n      m_active(false),\n      m_hate_crossings(false),\n      m_has_fixed_route(false),\n      m_route_dist(0),\n      m_src_vert(nullptr),\n      m_dst_vert(nullptr),\n      m_start_vert(nullptr),\n      m_callback_func(nullptr),\n      m_connector(nullptr),\n      m_src_connend(nullptr),\n      m_dst_connend(nullptr)\n{\n    COLA_ASSERT(m_router != nullptr);\n    m_id = m_router->assignId(id);\n\n    // TODO: Store endpoints and details.\n    m_route.clear();\n\n    m_reroute_flag_ptr = m_router->m_conn_reroute_flags.addConn(this);\n}\n\n\nConnRef::ConnRef(Router *router, const ConnEnd& src, const ConnEnd& dst,\n        const unsigned int id)\n    : m_router(router),\n      m_type(router->validConnType()),\n      m_reroute_flag_ptr(nullptr),\n      m_needs_reroute_flag(true),\n      m_false_path(false),\n      m_needs_repaint(false),\n      m_active(false),\n      m_hate_crossings(false),\n      m_has_fixed_route(false),\n      m_route_dist(0),\n      m_src_vert(nullptr),\n      m_dst_vert(nullptr),\n      m_callback_func(nullptr),\n      m_connector(nullptr),\n      m_src_connend(nullptr),\n      m_dst_connend(nullptr)\n{\n    COLA_ASSERT(m_router != nullptr);\n    m_id = m_router->assignId(id);\n    m_route.clear();\n\n    // Set endpoint values.\n    setEndpoints(src, dst);\n\n    m_reroute_flag_ptr = m_router->m_conn_reroute_flags.addConn(this);\n}\n\n\nConnRef::~ConnRef()\n{\n    COLA_ASSERT(m_router);\n\n    if (m_router->m_currently_calling_destructors == false)\n    {\n        err_printf(\"ERROR: ConnRef::~ConnRef() shouldn't be called directly.\\n\");\n        err_printf(\"       It is owned by the router.  Call Router::deleteConnector() instead.\\n\");\n        abort();\n    }\n\n    m_router->m_conn_reroute_flags.removeConn(this);\n\n    m_router->removeObjectFromQueuedActions(this);\n\n    freeRoutes();\n\n    if (m_src_vert)\n    {\n        m_src_vert->removeFromGraph();\n        m_router->vertices.removeVertex(m_src_vert);\n        delete m_src_vert;\n        m_src_vert = nullptr;\n    }\n    if (m_src_connend)\n    {\n        m_src_connend->disconnect();\n        m_src_connend->freeActivePin();\n        delete m_src_connend;\n        m_src_connend = nullptr;\n    }\n\n    if (m_dst_vert)\n    {\n        m_dst_vert->removeFromGraph();\n        m_router->vertices.removeVertex(m_dst_vert);\n        delete m_dst_vert;\n        m_dst_vert = nullptr;\n    }\n    if (m_dst_connend)\n    {\n        m_dst_connend->disconnect();\n        m_dst_connend->freeActivePin();\n        delete m_dst_connend;\n        m_dst_connend = nullptr;\n    }\n\n    // Clear checkpoint vertices.\n    for (size_t i = 0; i < m_checkpoint_vertices.size(); ++i)\n    {\n        m_checkpoint_vertices[i]->removeFromGraph(true);\n        m_router->vertices.removeVertex(m_checkpoint_vertices[i]);\n        delete m_checkpoint_vertices[i];\n    }\n    m_checkpoint_vertices.clear();\n\n    if (m_active)\n    {\n        makeInactive();\n    }\n}\n\n\nConnType ConnRef::routingType(void) const\n{\n    return m_type;\n}\n\n\nvoid ConnRef::setRoutingType(ConnType type)\n{\n    type = m_router->validConnType(type);\n    if (m_type != type)\n    {\n        m_type = type;\n\n        makePathInvalid();\n\n        m_router->modifyConnector(this);\n    }\n}\n\n\nstd::vector<Checkpoint> ConnRef::routingCheckpoints(void) const\n{\n    return m_checkpoints;\n}\n\n\nvoid ConnRef::setRoutingCheckpoints(const std::vector<Checkpoint>& checkpoints)\n{\n    m_checkpoints = checkpoints;\n    \n    // Clear previous checkpoint vertices.\n    for (size_t i = 0; i < m_checkpoint_vertices.size(); ++i)\n    {\n        m_checkpoint_vertices[i]->removeFromGraph(true);\n        m_router->vertices.removeVertex(m_checkpoint_vertices[i]);\n        delete m_checkpoint_vertices[i];\n    }\n    m_checkpoint_vertices.clear();\n\n    for (size_t i = 0; i < m_checkpoints.size(); ++i)\n    {\n        VertID ptID(m_id, 2 + i, \n                VertID::PROP_ConnPoint | VertID::PROP_ConnCheckpoint);\n        VertInf *vertex = new VertInf(m_router, ptID, m_checkpoints[i].point);\n        vertex->visDirections = ConnDirAll;\n\n        m_checkpoint_vertices.push_back(vertex);\n    }\n    if (m_router->m_allows_polyline_routing)\n    {\n        for (size_t i = 0; i < m_checkpoints.size(); ++i)\n        {\n            vertexVisibility(m_checkpoint_vertices[i], nullptr, true, true);\n        }\n    }\n}\n\n\nvoid ConnRef::common_updateEndPoint(const unsigned int type, ConnEnd connEnd)\n{\n    const Point& point = connEnd.position();\n    //db_printf(\"common_updateEndPoint(%d,(pid=%d,vn=%d,(%f,%f)))\\n\",\n    //      type,point.id,point.vn,point.x,point.y);\n    COLA_ASSERT((type == (unsigned int) VertID::src) ||\n                (type == (unsigned int) VertID::tar));\n\n    // The connEnd is a copy of a ConnEnd that will get disconnected,\n    // so don't leave it looking like it is still connected.\n    connEnd.m_conn_ref = nullptr;\n\n    if (!m_active)\n    {\n        makeActive();\n    }\n    \n    VertInf *altered = nullptr;\n\n    VertIDProps properties = VertID::PROP_ConnPoint;\n    if (connEnd.isPinConnection())\n    {\n        properties |= VertID::PROP_DummyPinHelper;\n    }\n    VertID ptID(m_id, type, properties);\n    if (type == (unsigned int) VertID::src)\n    {\n        if (m_src_vert)\n        {\n            m_src_vert->Reset(ptID, point);\n        }\n        else\n        {\n            m_src_vert = new VertInf(m_router, ptID, point);\n        }\n        m_src_vert->visDirections = connEnd.directions();\n\n        if (m_src_connend)\n        {\n            m_src_connend->disconnect();\n            m_src_connend->freeActivePin();\n            delete m_src_connend;\n            m_src_connend = nullptr;\n        }\n        if (connEnd.isPinConnection())\n        {\n            m_src_connend = new ConnEnd(connEnd);\n            m_src_connend->connect(this);\n            // Don't need this to have visibility since we won't \n            // be connecting to it.\n            m_src_vert->visDirections = ConnDirNone;\n        }\n        \n        altered = m_src_vert;\n    }\n    else // if (type == (unsigned int) VertID::tar)\n    {\n        if (m_dst_vert)\n        {\n            m_dst_vert->Reset(ptID, point);\n        }\n        else\n        {\n            m_dst_vert = new VertInf(m_router, ptID, point);\n        }\n        m_dst_vert->visDirections = connEnd.directions();\n        \n        if (m_dst_connend)\n        {\n            m_dst_connend->disconnect();\n            m_dst_connend->freeActivePin();\n            delete m_dst_connend;\n            m_dst_connend = nullptr;\n        }\n        if (connEnd.isPinConnection())\n        {\n            m_dst_connend = new ConnEnd(connEnd);\n            m_dst_connend->connect(this);\n            // Don't need this to have visibility since we won't \n            // be connecting to it.\n            m_dst_vert->visDirections = ConnDirNone;\n        }\n        \n        altered = m_dst_vert;\n    }\n    \n    // XXX: Seems to be faster to just remove the edges and recreate\n    bool isConn = true;\n    altered->removeFromGraph(isConn);\n\n    makePathInvalid();\n    m_router->setStaticGraphInvalidated(true);\n}\n\n\nvoid ConnRef::setEndpoints(const ConnEnd& srcPoint, const ConnEnd& dstPoint)\n{\n    m_router->modifyConnector(this, VertID::src, srcPoint);\n    m_router->modifyConnector(this, VertID::tar, dstPoint);\n}\n\n\nvoid ConnRef::setEndpoint(const unsigned int type, const ConnEnd& connEnd)\n{\n    m_router->modifyConnector(this, type, connEnd);\n}\n\n\nvoid ConnRef::setSourceEndpoint(const ConnEnd& srcPoint)\n{\n    m_router->modifyConnector(this, VertID::src, srcPoint);\n}\n\n\nvoid ConnRef::setDestEndpoint(const ConnEnd& dstPoint)\n{\n    m_router->modifyConnector(this, VertID::tar, dstPoint);\n}\n\n\n// Given the start or end vertex of a connector, returns the ConnEnd that \n// can be used to reproduce that endpoint.  This is used for hyperedge routing.\n//\nbool ConnRef::getConnEndForEndpointVertex(VertInf *vertex, \n        ConnEnd& connEnd) const \n{\n    if (vertex == nullptr)\n    {\n        err_printf(\"Warning: In ConnRef::getConnEndForEndpointVertex():\\n\"\n                   \"         ConnEnd for connector %d is uninitialised.  It may have been\\n\"\n                   \"         set but Router::processTrancaction has not yet been called.\\n\",\n                   (int) id());\n        return false;\n    }\n\n    if (vertex == m_src_vert)\n    {\n        if (m_src_connend)\n        {\n            connEnd = *m_src_connend;\n        }\n        else\n        {\n            connEnd = ConnEnd(Point(m_src_vert->point.x, m_src_vert->point.y),\n                    m_src_vert->visDirections);\n        }\n        return true;\n    }\n    else if (vertex == m_dst_vert)\n    {\n        if (m_dst_connend)\n        {\n            connEnd = *m_dst_connend;\n        }\n        else\n        {\n            connEnd = ConnEnd(Point(m_dst_vert->point.x, m_dst_vert->point.y),\n                    m_dst_vert->visDirections);\n        }\n        return true;\n    }\n    return false;\n}\n\n\nvoid ConnRef::updateEndPoint(const unsigned int type, const ConnEnd& connEnd)\n{\n    common_updateEndPoint(type, connEnd);\n\n    if (m_has_fixed_route)\n    {\n        // Don't need to continue and compute visibility if route is fixed.\n        return;\n    }\n\n    if (m_router->m_allows_polyline_routing)\n    {\n        bool knownNew = true;\n        bool genContains = true;\n        if (type == (unsigned int) VertID::src)\n        {\n            bool dummySrc = m_src_connend && m_src_connend->isPinConnection();\n            if (!dummySrc)\n            {\n                // Only generate visibility if not attached to a pin.\n                vertexVisibility(m_src_vert, m_dst_vert, knownNew, genContains);\n            }\n        }\n        else\n        {\n            bool dummyDst = m_dst_connend && m_dst_connend->isPinConnection();\n            if (!dummyDst)\n            {\n                // Only generate visibility if not attached to a pin.\n                vertexVisibility(m_dst_vert, m_src_vert, knownNew, genContains);\n            }\n        }\n    }\n}\n\n\nvoid ConnRef::outputCode(FILE *fp) const\n{\n    fprintf(fp, \"    // connRef%u\\n\", id());\n    fprintf(fp, \"    connRef = new ConnRef(router, %u);\\n\", id());\n    if (m_src_connend)\n    {\n        m_src_connend->outputCode(fp, \"src\");\n        fprintf(fp, \"    connRef->setSourceEndpoint(srcPt);\\n\");\n    }\n    else if (src())\n    {\n        fprintf(fp, \"    srcPt = ConnEnd(Point(%\" PREC \"g, %\" PREC \"g), %u);\\n\",\n                src()->point.x, src()->point.y, src()->visDirections);\n        fprintf(fp, \"    connRef->setSourceEndpoint(srcPt);\\n\");\n    }\n    if (m_dst_connend)\n    {\n        m_dst_connend->outputCode(fp, \"dst\");\n        fprintf(fp, \"    connRef->setDestEndpoint(dstPt);\\n\");\n    }\n    else if (dst())\n    {\n        fprintf(fp, \"    dstPt = ConnEnd(Point(%\" PREC \"g, %\" PREC \"g), %u);\\n\",\n                dst()->point.x, dst()->point.y, dst()->visDirections);\n        fprintf(fp, \"    connRef->setDestEndpoint(dstPt);\\n\");\n    }\n    fprintf(fp, \"    connRef->setRoutingType((ConnType)%u);\\n\", routingType());\n\n    if (m_has_fixed_route)\n    {\n        PolyLine currRoute = route();\n        fprintf(fp, \"    newRoute._id = %u;\\n\", id());\n        fprintf(fp, \"    newRoute.ps.resize(%d);\\n\", (int)currRoute.size());\n        for (size_t i = 0; i < currRoute.size(); ++i)\n        {\n            fprintf(fp, \"    newRoute.ps[%d] = Point(%\" PREC \"g, %\" PREC \"g);\\n\", \n                    (int) i, currRoute.ps[i].x, currRoute.ps[i].y);\n            fprintf(fp, \"    newRoute.ps[%d].id = %u;\\n\", \n                    (int) i, currRoute.ps[i].id);\n            fprintf(fp, \"    newRoute.ps[%d].vn = %u;\\n\",\n                    (int) i, currRoute.ps[i].vn);\n        }\n        fprintf(fp, \"    connRef->setFixedRoute(newRoute);\\n\");\n    }\n\n    if (!m_checkpoints.empty())\n    {\n        fprintf(fp, \"    std::vector<Checkpoint> checkpoints%u(%d);\\n\", id(),\n                (int) m_checkpoints.size());\n        for (size_t cInd = 0; cInd < m_checkpoints.size(); ++cInd)\n        {\n            fprintf(fp, \"    checkpoints%u[%d] = Checkpoint(Point(\"\n                    \"%\" PREC \"g, %\" PREC \"g), (ConnDirFlags) %d, \"\n                    \"(ConnDirFlags) %d);\\n\", id(), (int) cInd, \n                    m_checkpoints[cInd].point.x, m_checkpoints[cInd].point.y,\n                    m_checkpoints[cInd].arrivalDirections,\n                    m_checkpoints[cInd].departureDirections);\n        }\n        fprintf(fp, \"    connRef->setRoutingCheckpoints(checkpoints%u);\\n\", \n                id());\n    }\n    fprintf(fp, \"\\n\");\n}\n\n\nstd::pair<Obstacle *, Obstacle *> ConnRef::endpointAnchors(void) const\n{\n    std::pair<Obstacle *, Obstacle *> anchors;\n    anchors.first = nullptr;\n    anchors.second = nullptr;\n\n    if (m_src_connend)\n    {\n        anchors.first = m_src_connend->m_anchor_obj;\n    }\n    if (m_dst_connend)\n    {\n        anchors.second = m_dst_connend->m_anchor_obj;\n    }\n    return anchors;\n}\n\nstd::pair<ConnEnd, ConnEnd> ConnRef::endpointConnEnds(void) const\n{\n    std::pair<ConnEnd, ConnEnd> endpoints;\n    getConnEndForEndpointVertex(m_src_vert, endpoints.first);\n    getConnEndForEndpointVertex(m_dst_vert, endpoints.second);\n    return endpoints;\n}\n\nbool ConnRef::setEndpoint(const unsigned int type, const VertID& pointID,\n        Point *pointSuggestion)\n{\n    VertInf *vInf = m_router->vertices.getVertexByID(pointID);\n    if (vInf == nullptr)\n    {\n        return false;\n    }\n    Point& point = vInf->point;\n    if (pointSuggestion)\n    {\n        if (euclideanDist(point, *pointSuggestion) > 0.5)\n        {\n            return false;\n        }\n    }\n\n    common_updateEndPoint(type, point);\n\n    // Give this visibility just to the point it is over.\n    EdgeInf *edge = new EdgeInf(\n            (type == VertID::src) ? m_src_vert : m_dst_vert, vInf);\n    // XXX: We should be able to set this to zero, but can't due to \n    //      assumptions elsewhere in the code.\n    edge->setDist(0.001);\n\n    m_router->processTransaction();\n    return true;\n}\n\n\nvoid ConnRef::makeActive(void)\n{\n    COLA_ASSERT(!m_active);\n    \n    // Add to connRefs list.\n    m_connrefs_pos = m_router->connRefs.insert(m_router->connRefs.begin(), this);\n    m_active = true;\n}\n\n\nvoid ConnRef::freeActivePins(void)\n{\n    if (m_src_connend)\n    {\n        m_src_connend->freeActivePin();\n    }\n    if (m_dst_connend)\n    {\n        m_dst_connend->freeActivePin();\n    }\n}\n\n\nvoid ConnRef::makeInactive(void)\n{\n    COLA_ASSERT(m_active);\n    \n    // Remove from connRefs list.\n    m_router->connRefs.erase(m_connrefs_pos);\n    m_active = false;\n}\n\n\nvoid ConnRef::freeRoutes(void)\n{\n    m_route.clear();\n    m_display_route.clear();\n}\n    \n\nconst PolyLine& ConnRef::route(void) const\n{\n    return m_route;\n}\n\n\nPolyLine& ConnRef::routeRef(void)\n{\n    return m_route;\n}\n\n\nvoid ConnRef::set_route(const PolyLine& route)\n{\n    if (&m_display_route == &route)\n    {\n        db_printf(\"Error:\\tTrying to update libavoid route with itself.\\n\");\n        return;\n    }\n    m_display_route.ps = route.ps;\n\n    //_display_route.clear();\n}\n\nvoid ConnRef::setFixedExistingRoute(void)\n{\n    COLA_ASSERT(m_route.size() >= 2);\n    m_has_fixed_route = true;\n    m_router->registerSettingsChange();\n}\n\nvoid ConnRef::setFixedRoute(const PolyLine& route)\n{\n    if (route.size() >= 2)\n    {\n        // Set endpoints based on the fixed route incase the \n        // fixed route is later cleared.\n        setEndpoints(route.ps[0], route.ps[route.size() - 1]);\n    }\n    m_has_fixed_route = true;\n    m_route = route;\n    m_display_route = m_route.simplify();\n    m_router->registerSettingsChange();\n}\n\nbool ConnRef::hasFixedRoute(void) const\n{\n    return m_has_fixed_route;\n}\n\nvoid ConnRef::clearFixedRoute(void)\n{\n    m_has_fixed_route = false;\n    makePathInvalid();\n    m_router->registerSettingsChange();\n}\n\nPolygon& ConnRef::displayRoute(void)\n{\n    if (m_display_route.empty())\n    {\n        // No displayRoute is set.  Simplify the current route to get it.\n        m_display_route = m_route.simplify();\n    }\n    return m_display_route;\n}\n\n\nvoid ConnRef::calcRouteDist(void)\n{\n    double (*dist)(const Point& a, const Point& b) = \n            (m_type == ConnType_PolyLine) ? euclideanDist : manhattanDist;\n\n    m_route_dist = 0;\n    for (size_t i = 1; i < m_route.size(); ++i)\n    {\n        m_route_dist += dist(m_route.at(i), m_route.at(i - 1));\n    }\n}\n\n\nbool ConnRef::needsRepaint(void) const\n{\n    return m_needs_repaint;\n}\n\n\nunsigned int ConnRef::id(void) const\n{\n    return m_id;\n}\n\n\nPoint midpoint(Point a, Point b)\n{\n    Point midpoint;\n\n    midpoint.x = (a.x + b.x) / 2.0;\n    midpoint.y = (a.y + b.y) / 2.0;\n\n    return midpoint;\n}\n\n\nstd::pair<JunctionRef *, ConnRef *> ConnRef::splitAtSegment(\n                const size_t segmentN)\n{\n    ConnRef *newConn = nullptr;\n    JunctionRef *newJunction = nullptr;\n\n    if (m_display_route.size() > segmentN)\n    {\n        // Position the junction at the midpoint of the desired segment.\n        Point junctionPos = midpoint(m_display_route.at(segmentN - 1),\n                m_display_route.at(segmentN));\n\n        // Create the new junction.\n        newJunction = new JunctionRef(router(), junctionPos);\n        router()->addJunction(newJunction);\n        newJunction->preferOrthogonalDimension(\n                (m_display_route.at(segmentN - 1).x == \n                    m_display_route.at(segmentN).x) ? YDIM : XDIM);\n\n        // Create a new connection routing from the junction to the original\n        // connector's endpoint.\n        ConnEnd newConnSrc = ConnEnd(newJunction);\n        ConnEnd newConnDst = *m_dst_connend;\n        newConn = new ConnRef(router(), newConnSrc, newConnDst);\n        \n        // Reroute the endpoint of the original connector to attach to the\n        // new junction.\n        ConnEnd oldConnDst = ConnEnd(newJunction);\n        this->setDestEndpoint(oldConnDst);\n    }\n\n    return std::make_pair(newJunction, newConn);\n}\n\n\nVertInf *ConnRef::src(void) const\n{\n    return m_src_vert;\n}\n\n    \nVertInf *ConnRef::dst(void) const\n{\n    return m_dst_vert;\n}\n\n\nVertInf *ConnRef::start(void)\n{\n    return m_start_vert;\n}\n\n\nbool ConnRef::isInitialised(void) const\n{\n    return m_active;\n}\n\n\nvoid ConnRef::unInitialise(void)\n{\n    m_router->vertices.removeVertex(m_src_vert);\n    m_router->vertices.removeVertex(m_dst_vert);\n    makeInactive();\n}\n\n\nvoid ConnRef::removeFromGraph(void)\n{\n    if (m_src_vert)\n    {\n        m_src_vert->removeFromGraph();\n    }\n\n    if (m_dst_vert)\n    {\n        m_dst_vert->removeFromGraph();\n    }\n}\n\n\nvoid ConnRef::setCallback(void (*cb)(void *), void *ptr)\n{\n    m_callback_func = cb;\n    m_connector = ptr;\n}\n\n\nvoid ConnRef::performCallback(void)\n{\n    if (m_callback_func)\n    {\n        m_callback_func(m_connector);\n    }\n}\n\n\nvoid ConnRef::makePathInvalid(void)\n{\n    m_needs_reroute_flag = true;\n}\n\n\nRouter *ConnRef::router(void) const\n{\n    return m_router;\n}\n\n\n// Validates a bend point on a path to check it does not form a zigzag corner.\n// a, b, c are consecutive points on the path.  d and e are b's neighbours,\n// forming the shape corner d-b-e.\n//\nbool validateBendPoint(VertInf *aInf, VertInf *bInf, VertInf *cInf)\n{\n    if (bInf->id.isConnectionPin() || bInf->id.isConnCheckpoint())\n    {\n        // We shouldn't check connection pins or checkpoints.\n        return true;\n    }\n    bool bendOkay = true;\n\n    if ((aInf == nullptr) || (cInf == nullptr))\n    {\n        // Not a bendpoint, i.e., the end of the connector, so don't test.\n        return bendOkay;\n    }\n\n    COLA_ASSERT(bInf != nullptr);\n    VertInf *dInf = bInf->shPrev;\n    VertInf *eInf = bInf->shNext;\n    COLA_ASSERT(dInf != nullptr);\n    COLA_ASSERT(eInf != nullptr);\n\n    Point& a = aInf->point;\n    Point& b = bInf->point;\n    Point& c = cInf->point;\n    Point& d = dInf->point;\n    Point& e = eInf->point;\n\n    if ((a == b) || (b == c))\n    {\n        return bendOkay;\n    }\n\n#ifdef PATHDEBUG\n    db_printf(\"a=(%g, %g)\\n\", a.x, a.y);\n    db_printf(\"b=(%g, %g)\\n\", b.x, b.y);\n    db_printf(\"c=(%g, %g)\\n\", c.x, c.y);\n    db_printf(\"d=(%g, %g)\\n\", d.x, d.y);\n    db_printf(\"e=(%g, %g)\\n\", e.x, e.y);\n#endif\n    // Check angle:\n    int abc = vecDir(a, b, c);\n#ifdef PATHDEBUG\n    db_printf(\"(abc == %d) \", abc);\n#endif\n   \n    if (abc == 0)\n    {\n        // The three consecutive point on the path are in a line.\n        // There should always be an equally short path that skips this\n        // bend point, but this check is used during rubber-band routing\n        // so we allow this case.\n        bendOkay = true;\n    }\n    else // (abc != 0)\n    {\n        COLA_ASSERT(vecDir(d, b, e) > 0);\n        int abe = vecDir(a, b, e);\n        int abd = vecDir(a, b, d);\n        int bce = vecDir(b, c, e);\n        int bcd = vecDir(b, c, d);\n#ifdef PATHDEBUG\n        db_printf(\"&& (abe == %d) && (abd == %d) &&\\n(bce == %d) && (bcd == %d)\",\n                abe, abd, bce, bcd);\n#endif\n\n        bendOkay = false;\n        if (abe > 0)\n        {\n            if ((abc > 0) && (abd >= 0) && (bce >= 0))\n            {\n                bendOkay = true;\n            }\n        }\n        else if (abd < 0)\n        {\n            if ((abc < 0) && (abe <= 0) && (bcd <= 0))\n            {\n                bendOkay = true;\n            }\n        }\n    }\n#ifdef PATHDEBUG\n    db_printf(\"\\n\");\n#endif\n    return bendOkay;\n}\n\n\nstd::pair<bool, bool> ConnRef::assignConnectionPinVisibility(const bool connect)\n{\n    // XXX This is kind of a hack for connection pins.  Probably we want to\n    //     not use m_src_vert and m_dst_vert.  For the moment we will clear\n    //     their visibility and give them visibility to the pins.\n    bool dummySrc = m_src_connend && m_src_connend->isPinConnection();\n    if (dummySrc)\n    {\n        m_src_vert->removeFromGraph();\n        if (connect)\n        {\n            m_src_connend->assignPinVisibilityTo(m_src_vert, m_dst_vert);\n        }\n    }\n    bool dummyDst = m_dst_connend && m_dst_connend->isPinConnection();\n    if (dummyDst)\n    {\n        m_dst_vert->removeFromGraph();\n        if (connect)\n        {\n            m_dst_connend->assignPinVisibilityTo(m_dst_vert, m_src_vert);\n        }\n    }\n\n    return std::make_pair(dummySrc, dummyDst);\n}\n\n\nbool ConnRef::generatePath(void)\n{\n    // XXX Currently rubber-band routing only works when dragging the\n    //     destination point of a connector, but not the source.  The code\n    //     needs to be reworked to work in both directions.\n\n    if (!m_false_path && !m_needs_reroute_flag)\n    {\n        // This connector is up to date.\n        return false;\n    }\n\n    if (!m_dst_vert || !m_src_vert)\n    {\n        // Connector is not fully initialised.\n        return false;\n    }\n    \n    //COLA_ASSERT(_srcVert->point != _dstVert->point);\n\n    m_false_path = false;\n    m_needs_reroute_flag = false;\n\n    m_start_vert = m_src_vert;\n\n    // Some connectors may attach to connection pins, which means they route\n    // to the closest of multiple pins on a shape.  How we handle this is to\n    // add a dummy vertex as the source or target vertex.  This is then given\n    // visibility to each of the possible pins and tiny distance.  Here we\n    // assign this visibility by adding edges to the visibility graph that we\n    // later remove.\n    std::pair<bool, bool> isDummyAtEnd = assignConnectionPinVisibility(true);\n    \n\n    if (m_router->RubberBandRouting && route().size() > 0)\n    {\n        if (isDummyAtEnd.first)\n        {\n            //ShapeConnectionPin *activePin = m_src_connend->active\n            Point firstPoint = m_src_vert->point;\n            firstPoint.id = m_src_vert->id.objID;\n            firstPoint.vn = m_src_vert->id.vn;\n            PolyLine& existingRoute = routeRef();\n            existingRoute.ps.insert(existingRoute.ps.begin(), 1, firstPoint);\n        }\n    }\n\n    std::vector<Point> path;\n    std::vector<VertInf *> vertices;\n    if (m_checkpoints.empty())\n    {\n        generateStandardPath(path, vertices);\n    }\n    else\n    {\n        generateCheckpointsPath(path, vertices);\n    }\n\n    COLA_ASSERT(vertices.size() >= 2);\n    COLA_ASSERT(vertices[0] == src());\n    COLA_ASSERT(vertices[vertices.size() - 1] == dst());\n    COLA_ASSERT(m_reroute_flag_ptr != nullptr);\n\n    for (size_t i = 1; i < vertices.size(); ++i)\n    {\n        if (m_router->InvisibilityGrph && (m_type == ConnType_PolyLine))\n        {\n            // TODO: Again, we could know this edge without searching.\n            EdgeInf *edge = EdgeInf::existingEdge(vertices[i - 1], vertices[i]);\n            if (edge) {\n                edge->addConn(m_reroute_flag_ptr);\n            }\n        }\n        else\n        {\n            m_false_path = true;\n        }\n\n        VertInf *vertex = vertices[i];\n        if (vertex->pathNext && \n                (vertex->pathNext->point == vertex->point))\n        {\n            if (!(vertex->pathNext->id.isConnPt()) && !(vertex->id.isConnPt()))\n            {\n                // Check for consecutive points on opposite \n                // corners of two touching shapes.\n                COLA_ASSERT(abs(vertex->pathNext->id.vn - vertex->id.vn) != 2);\n            }\n        }\n    }\n\n    // Get rid of dummy ShapeConnectionPin bridging points at beginning\n    // and end of path.\n    std::vector<Point> clippedPath;\n    std::vector<Point>::iterator pathBegin = path.begin();\n    std::vector<Point>::iterator pathEnd = path.end();\n    if (path.size() > 2 && isDummyAtEnd.first)\n    {\n        ++pathBegin;\n        m_src_connend->usePinVertex(vertices[1]);\n    }\n    if (path.size() > 2 && isDummyAtEnd.second)\n    {\n        --pathEnd;\n        m_dst_connend->usePinVertex(vertices[vertices.size() - 2]);\n    }\n    clippedPath.insert(clippedPath.end(), pathBegin, pathEnd);\n    \n    // Clear visibility edges added for connection pins dummy vertices.\n    assignConnectionPinVisibility(false);\n\n    freeRoutes();\n    PolyLine& output_route = m_route;\n    output_route.ps = clippedPath;\n \n#ifdef PATHDEBUG\n    db_printf(\"Output route:\\n\");\n    for (size_t i = 0; i < output_route.ps.size(); ++i)\n    {\n        db_printf(\"[%d,%d] %g, %g   \", output_route.ps[i].id, \n                output_route.ps[i].vn, output_route.ps[i].x, \n                output_route.ps[i].y);\n    }\n    db_printf(\"\\n\\n\");\n#endif\n\n#ifdef DEBUGHANDLER\n    if (m_router->debugHandler())\n    {\n        m_router->debugHandler()->updateConnectorRoute(this, -1, -1);\n    }\n#endif\n\n    return true;\n}\n\nvoid ConnRef::generateCheckpointsPath(std::vector<Point>& path,\n        std::vector<VertInf *>& vertices)\n{\n    std::vector<VertInf *> checkpoints = m_checkpoint_vertices;\n    checkpoints.insert(checkpoints.begin(), src());\n    checkpoints.push_back(dst());\n    \n    path.clear();\n    vertices.clear();\n    path.push_back(src()->point);\n    vertices.push_back(src());\n \n    size_t lastSuccessfulIndex = 0;\n    for (size_t i = 1; i < checkpoints.size(); ++i)\n    {\n        VertInf *start = checkpoints[lastSuccessfulIndex];\n        VertInf *end = checkpoints[i];\n        \n        // Handle checkpoint directions by disabling some visibility edges.\n        if (lastSuccessfulIndex > 0)\n        {\n            Checkpoint& srcCP = m_checkpoints[lastSuccessfulIndex - 1];\n            if (srcCP.departureDirections != ConnDirAll)\n            {\n                start->setVisibleDirections(srcCP.departureDirections);\n            }\n        }\n        if ((i + 1) < checkpoints.size())\n        {\n            Checkpoint& dstCP = m_checkpoints[i - 1];\n            if (dstCP.arrivalDirections != ConnDirAll)\n            {\n                end->setVisibleDirections(dstCP.arrivalDirections);\n            }\n        }\n        \n        AStarPath aStar;\n        // Route the connector\n        aStar.search(this, start, end, nullptr); \n\n        // Restore changes made for checkpoint visibility directions.\n        if (lastSuccessfulIndex > 0)\n        {\n            start->setVisibleDirections(ConnDirAll);\n        }\n        if ((i + 1) < checkpoints.size())\n        {\n            end->setVisibleDirections(ConnDirAll);\n        }\n\n        // Process the path.\n        int pathlen = end->pathLeadsBackTo(start);\n        if (pathlen >= 2)\n        {\n            size_t prev_path_size = path.size();\n            path.resize(prev_path_size + (pathlen - 1));\n            vertices.resize(prev_path_size + (pathlen - 1));\n            VertInf *vertInf = end;\n            for (size_t index = path.size() - 1; index >= prev_path_size;\n                    --index)\n            {\n                path[index] = vertInf->point;\n                if (vertInf->id.isConnPt())\n                {\n                    path[index].id = m_id;\n                    path[index].vn = kUnassignedVertexNumber;\n                }\n                else\n                {\n                    path[index].id = vertInf->id.objID;\n                    path[index].vn = vertInf->id.vn;\n                }\n                vertices[index] = vertInf;\n                vertInf = vertInf->pathNext;\n            }\n            lastSuccessfulIndex = i;\n        }\n        else if (i + 1 == checkpoints.size())\n        {\n            // There is no valid path.\n            db_printf(\"Warning: Path not found...\\n\");\n            m_needs_reroute_flag = true;\n            \n            path.push_back(dst()->point);\n            vertices.push_back(dst());\n\n            COLA_ASSERT(path.size() >= 2);\n        }\n        else\n        {\n            err_printf(\"Warning: skipping checkpoint for connector \"\n                    \"%d at (%g, %g).\\n\", (int) id(), \n                    checkpoints[i]->point.x, checkpoints[i]->point.y);\n            fflush(stderr);\n        }\n    }\n    // Use topbit to differentiate between start and end point of connector.\n    // They need unique IDs for nudging.\n    unsigned int topbit = ((unsigned int) 1) << 31;\n    path[path.size() - 1].id = m_id | topbit; \n    path[path.size() - 1].vn = kUnassignedVertexNumber;\n}\n\n\nvoid ConnRef::generateStandardPath(std::vector<Point>& path,\n        std::vector<VertInf *>& vertices)\n{\n    VertInf *tar = m_dst_vert;\n    size_t existingPathStart = 0;\n    const PolyLine& currRoute = route();\n    if (m_router->RubberBandRouting)\n    {\n        COLA_ASSERT(m_router->IgnoreRegions == true);\n\n#ifdef PATHDEBUG\n        db_printf(\"\\n\");\n        src()->id.db_print();\n        db_printf(\": %g, %g\\n\", src()->point.x, src()->point.y);\n        tar->id.db_print();\n        db_printf(\": %g, %g\\n\", tar->point.x, tar->point.y);\n        for (size_t i = 0; i < currRoute.ps.size(); ++i)\n        {\n            db_printf(\"%g, %g  \", currRoute.ps[i].x, currRoute.ps[i].y);\n        }\n        db_printf(\"\\n\");\n#endif\n        if (currRoute.size() > 2)\n        {\n            if (m_src_vert->point == currRoute.ps[0])\n            {\n                existingPathStart = currRoute.size() - 2;\n                COLA_ASSERT(existingPathStart != 0);\n                const Point& pnt = currRoute.at(existingPathStart);\n                VertID vID(pnt.id, pnt.vn);\n\n                m_start_vert = m_router->vertices.getVertexByID(vID);\n                COLA_ASSERT(m_start_vert);\n            }\n        }\n    }\n    //db_printf(\"GO\\n\");\n    //db_printf(\"src: %X strt: %X dst: %X\\n\", (int) m_src_vert, (int) m_start_vert, (int) m_dst_vert);\n    unsigned int pathlen = 0;\n    while (pathlen == 0)\n    {\n        AStarPath aStar;\n        aStar.search(this, src(), dst(), start());\n        pathlen = dst()->pathLeadsBackTo(src());\n        if (pathlen < 2)\n        {\n            if (existingPathStart == 0)\n            {\n                break;\n            }\n#ifdef PATHDEBUG\n            db_printf(\"BACK\\n\");\n#endif\n            existingPathStart--;\n            const Point& pnt = currRoute.at(existingPathStart);\n            VertIDProps props = (existingPathStart > 0) ? 0 :\n                    VertID::PROP_ConnPoint;\n            VertID vID(pnt.id, pnt.vn, props);\n\n            m_start_vert = m_router->vertices.getVertexByID(vID);\n            COLA_ASSERT(m_start_vert);\n        }\n        else if (m_router->RubberBandRouting)\n        {\n            // found.\n            bool unwind = false;\n\n#ifdef PATHDEBUG\n            db_printf(\"\\n\\n\\nSTART:\\n\\n\");\n#endif\n            VertInf *prior = nullptr;\n            for (VertInf *curr = tar; curr != m_start_vert->pathNext;\n                    curr = curr->pathNext)\n            {\n                if (!validateBendPoint(curr->pathNext, curr, prior))\n                {\n                    unwind = true;\n                    break;\n                }\n                prior = curr;\n            }\n            if (unwind)\n            {\n#ifdef PATHDEBUG\n                db_printf(\"BACK II\\n\");\n#endif\n                if (existingPathStart == 0)\n                {\n                    break;\n                }\n                existingPathStart--;\n                const Point& pnt = currRoute.at(existingPathStart);\n                VertIDProps props = (existingPathStart > 0) ? 0 :\n                        VertID::PROP_ConnPoint;\n                VertID vID(pnt.id, pnt.vn, props);\n\n                m_start_vert = m_router->vertices.getVertexByID(vID);\n                COLA_ASSERT(m_start_vert);\n\n                pathlen = 0;\n            }\n        }\n    }\n\n    if (pathlen < 2)\n    {\n        // There is no valid path.\n        db_printf(\"Warning: Path not found...\\n\");\n        m_needs_reroute_flag = true;\n        pathlen = 2;\n        tar->pathNext = m_src_vert;\n        if ((m_type == ConnType_PolyLine) && m_router->InvisibilityGrph)\n        {\n            // TODO:  Could we know this edge already?\n            //EdgeInf *edge = EdgeInf::existingEdge(m_src_vert, tar);\n            //COLA_ASSERT(edge != nullptr);\n            //edge->addCycleBlocker();\n        }\n    }\n    path.resize(pathlen);\n    vertices.resize(pathlen);\n\n    unsigned int j = pathlen - 1;\n    for (VertInf *i = tar; i != m_src_vert; i = i->pathNext)\n    {\n        path[j] = i->point;\n        vertices[j] = i;\n        path[j].id = i->id.objID;\n        path[j].vn = i->id.vn;\n\n        j--;\n    }\n    vertices[0] = m_src_vert;\n    path[0] = m_src_vert->point;\n    path[0].id = m_src_vert->id.objID;\n    path[0].vn =m_src_vert->id.vn;\n}\n\n\nvoid ConnRef::setHateCrossings(bool value)\n{\n    m_hate_crossings = value;\n}\n\n\nbool ConnRef::doesHateCrossings(void) const\n{\n    return m_hate_crossings;\n}\n\n\nstd::vector<Point> ConnRef::possibleDstPinPoints(void) const\n{\n    std::vector<Point> points;\n    if (m_dst_connend)\n    {\n        points = m_dst_connend->possiblePinPoints();\n    }\n    return points;\n}\n\n\nPtOrder::PtOrder()\n{\n    // We have sorted neither list initially.\n    for (size_t dim = 0; dim < 2; ++dim)\n    {\n        sorted[dim] = false;\n    }\n}\n\n\nPtOrder::~PtOrder()\n{\n}\n\n\nPointRepVector PtOrder::sortedPoints(const size_t dim)\n{\n    // Sort if not already sorted.\n    if (sorted[dim] == false)\n    {\n        sort(dim);\n    }\n    return sortedConnVector[dim];\n}\n\n\nint PtOrder::positionFor(const size_t dim, const ConnRef *conn)\n{\n    // Sort if not already sorted.\n    if (sorted[dim] == false)\n    {\n        sort(dim);\n    }\n\n    // Just return position from the sorted list.\n    size_t i = 0;\n    for ( ; i < sortedConnVector[dim].size(); ++i)\n    {\n        if (sortedConnVector[dim][i].second == conn)\n        {\n            return (int) i;\n        }\n    }\n    return -1;\n}\n\n\nsize_t PtOrder::insertPoint(const size_t dim, const PtConnPtrPair& pointPair)\n{\n    // Is this connector bendpoint already inserted?\n    size_t i = 0;\n    for ( ; i < nodes[dim].size(); ++i)\n    {\n        if (nodes[dim][i].second == pointPair.second)\n        {\n            return i;\n        }\n    }\n    // Not found, insert.\n    nodes[dim].push_back(pointPair);\n    return nodes[dim].size() - 1;\n}\n\nvoid PtOrder::addPoints(const size_t dim, const PtConnPtrPair& arg1, \n                const PtConnPtrPair& arg2)\n{\n    // Add points, but not ordering information.\n    insertPoint(dim, arg1);\n    insertPoint(dim, arg2);\n}\n\n\nvoid PtOrder::addOrderedPoints(const size_t dim, const PtConnPtrPair& innerArg, \n        const PtConnPtrPair& outerArg, bool swapped)\n{\n    PtConnPtrPair inner = (swapped) ? outerArg : innerArg;\n    PtConnPtrPair outer = (swapped) ? innerArg : outerArg;\n    COLA_ASSERT(inner != outer);\n\n    // Add points.\n    size_t innerIndex = insertPoint(dim, inner);\n    size_t outerIndex = insertPoint(dim, outer);\n   \n    // And edge for ordering information.\n    links[dim].push_back(std::make_pair(outerIndex, innerIndex));\n}\n\n\nvoid PtOrder::sort(const size_t dim)\n{\n    // This is just a topological sort of the points using the edges info.\n\n    sorted[dim] = true;\n\n    size_t n = nodes[dim].size();\n\n    // Build an adjacency matrix for easy lookup.\n    std::vector<std::vector<bool> > adjacencyMatrix(n);\n    for (size_t i = 0; i < n; ++i)\n    {\n        adjacencyMatrix[i].assign(n, false);\n    }\n    std::vector<int> incomingDegree(n);\n    std::queue<size_t> queue;\n\n    // Populate the dependency matrix.\n    for (NodeIndexPairLinkList::iterator it = links[dim].begin(); \n            it != links[dim].end(); ++it)\n    {\n        adjacencyMatrix[it->first][it->second] = true;\n    }\n\n    // Build incoming degree lookup structure, and add nodes with no\n    // incoming edges to queue.\n    for (size_t i = 0; i < n; ++i)\n    {\n        int degree = 0;\n \n        for (size_t j = 0; j < n; ++j)\n        {\n            if (adjacencyMatrix[j][i])\n            {\n                degree++;\n            }\n        }\n        incomingDegree[i] = degree;\n\n        if (degree == 0)\n        {\n            queue.push(i);\n        }\n    }\n \n    while (queue.empty() == false)\n    {\n        size_t k = queue.front();\n        assert(k < nodes[dim].size());\n        queue.pop();\n\n        // Insert node k into the sorted list\n        sortedConnVector[dim].push_back(nodes[dim][k]);\n\n        // Remove all edges leaving node k:\n        for (size_t i = 0; i < n; ++i)\n        {\n            if (adjacencyMatrix[k][i])\n            {\n                adjacencyMatrix[k][i] = false;\n                incomingDegree[i]--;\n \n                if (incomingDegree[i] == 0)\n                {\n                    queue.push(i);\n                }\n            }\n        }\n    }\n}\n\n\n// Returns a vertex number representing a point on the line between \n// two shape corners, represented by p0 and p1.\n//\nstatic int midVertexNumber(const Point& p0, const Point& p1, const Point& c)\n{\n    if (c.vn != kUnassignedVertexNumber)\n    {\n        // The split point is a shape corner, so doesn't need its \n        // vertex number adjusting.\n        return c.vn;\n    }\n    if ((p0.vn >= 4) && (p0.vn < kUnassignedVertexNumber))\n    {\n        // The point next to this has the correct nudging direction,\n        // so use that.\n        return p0.vn;\n    }\n    if ((p1.vn >= 4) && (p1.vn < kUnassignedVertexNumber))\n    {\n        // The point next to this has the correct nudging direction,\n        // so use that.\n        return p1.vn;\n    }\n    if ((p0.vn < 4) && (p1.vn < 4))\n    {\n        if (p0.vn != p1.vn)\n        {\n            return p0.vn;\n        }\n        // Splitting between two ordinary shape corners.\n        int vn_mid = std::min(p0.vn, p1.vn);\n        if ((std::max(p0.vn, p1.vn) == 3) && (vn_mid == 0))\n        {\n            vn_mid = 3; // Next vn is effectively 4.\n        }\n        return vn_mid + 4;\n    }\n    COLA_ASSERT((p0.x == p1.x) || (p0.y == p1.y));\n    if (p0.vn != kUnassignedVertexNumber)\n    {\n        if (p0.x == p1.x)\n        {\n            if ((p0.vn == 2) || (p0.vn == 3))\n            {\n                return 6;\n            }\n            return 4;\n        }\n        else\n        {\n            if ((p0.vn == 0) || (p0.vn == 3))\n            {\n                return 7;\n            }\n            return 5;\n        }\n    }\n    else if (p1.vn != kUnassignedVertexNumber)\n    {\n        if (p0.x == p1.x)\n        {\n            if ((p1.vn == 2) || (p1.vn == 3))\n            {\n                return 6;\n            }\n            return 4;\n        }\n        else\n        {\n            if ((p1.vn == 0) || (p1.vn == 3))\n            {\n                return 7;\n            }\n            return 5;\n        }\n    }\n\n    // Shouldn't both be new (kUnassignedVertexNumber) points.\n    db_printf(\"midVertexNumber(): p0.vn and p1.vn both = \"\n            \"kUnassignedVertexNumber\\n\");\n    db_printf(\"p0.vn %d p1.vn %d\\n\", p0.vn, p1.vn);\n    return kUnassignedVertexNumber;\n}\n\n\n// Break up overlapping parallel segments that are not the same edge in \n// the visibility graph, i.e., where one segment is a subsegment of another.\nvoid splitBranchingSegments(Avoid::Polygon& poly, bool polyIsConn,\n        Avoid::Polygon& conn, const double tolerance)\n{\n    for (std::vector<Avoid::Point>::iterator i = conn.ps.begin(); \n            i != conn.ps.end(); ++i)\n    {\n        if (i == conn.ps.begin())\n        {\n            // Skip the first point.\n            // There are points-1 segments in a connector.\n            continue;\n        }\n\n        for (std::vector<Avoid::Point>::iterator j = poly.ps.begin(); \n                j != poly.ps.end(); )\n        {\n            if (polyIsConn && (j == poly.ps.begin()))\n            {\n                // Skip the first point.\n                // There are points-1 segments in a connector.\n                ++j;\n                continue;\n            }\n            Point& c0 = *(i - 1);\n            Point& c1 = *i;\n\n            Point& p0 = (j == poly.ps.begin()) ? poly.ps.back() : *(j - 1);\n            Point& p1 = *j;\n\n            // Check the first point of the first segment.\n            if (((i - 1) == conn.ps.begin()) && \n                    pointOnLine(p0, p1, c0, tolerance))\n            {\n                //db_printf(\"add to poly %g %g\\n\", c0.x, c0.y);\n                \n                c0.vn = midVertexNumber(p0, p1, c0);\n                j = poly.ps.insert(j, c0);\n                if (j != poly.ps.begin())\n                {\n                    --j;\n                }\n                continue;\n            }\n            // And the second point of every segment.\n            if (pointOnLine(p0, p1, c1, tolerance))\n            {\n                //db_printf(\"add to poly %g %g\\n\", c1.x, c1.y);\n                \n                c1.vn = midVertexNumber(p0, p1, c1);\n                j = poly.ps.insert(j, c1);\n                if (j != poly.ps.begin())\n                {\n                    --j;\n                }\n                continue;\n            }\n\n            // Check the first point of the first segment.\n            if (polyIsConn && ((j - 1) == poly.ps.begin()) && \n                        pointOnLine(c0, c1, p0, tolerance))\n            {\n                //db_printf(\"add to conn %g %g\\n\", p0.x, p0.y);\n\n                p0.vn = midVertexNumber(c0, c1, p0);\n                i = conn.ps.insert(i, p0);\n                continue;\n            }\n            // And the second point of every segment.\n            if (pointOnLine(c0, c1, p1, tolerance))\n            {\n                //db_printf(\"add to conn %g %g\\n\", p1.x, p1.y);\n\n                p1.vn = midVertexNumber(c0, c1, p1);\n                i = conn.ps.insert(i, p1);\n            }\n            ++j;\n        }\n    }\n}\n\n\nstatic int segDir(const Point& p1, const Point& p2)\n{\n    int result = 1;\n    if (p1.x == p2.x)\n    {\n        if (p2.y > p1.y)\n        {\n            result = -1;\n        }\n    }\n    else if (p1.y == p2.y)\n    {\n        if (p2.x < p1.x)\n        {\n            result = -1;\n        }\n    }\n    return result;\n}\n\n\nstatic bool posInlineWithConnEndSegs(const double pos, const size_t dim, \n        const Avoid::Polygon& poly, const Avoid::Polygon& conn)\n{\n    size_t pLast = poly.size() - 1;\n    size_t cLast = conn.size() - 1;\n    if ((\n         // Is inline with the beginning of the \"poly\" line\n         ((pos == poly.ps[0][dim]) && (pos == poly.ps[1][dim])) ||\n         // Is inline with the end of the \"poly\" line\n         ((pos == poly.ps[pLast][dim]) && (pos == poly.ps[pLast - 1][dim])) \n        ) && (\n         // Is inline with the beginning of the \"conn\" line\n         ((pos == conn.ps[0][dim]) && (pos == conn.ps[1][dim])) || \n         // Is inline with the end of the \"conn\" line\n         ((pos == conn.ps[cLast][dim]) && (pos == conn.ps[cLast - 1][dim]))\n        ))\n    {\n        return true;\n    }\n    return false;\n}\n\nConnectorCrossings::ConnectorCrossings(Avoid::Polygon& poly, bool polyIsConn,\n        Avoid::Polygon& conn, ConnRef *polyConnRef, ConnRef *connConnRef)\n    : poly(poly),\n      polyIsConn(polyIsConn),\n      conn(conn),\n      checkForBranchingSegments(false),\n      polyConnRef(polyConnRef),\n      connConnRef(connConnRef),\n      crossingPoints(nullptr),\n      pointOrders(nullptr),\n      sharedPaths(nullptr)\n{\n}\n\nvoid ConnectorCrossings::clear(void)\n{\n    crossingCount = 0;\n    crossingFlags = CROSSING_NONE;\n    firstSharedPathAtEndLength = DBL_MAX;\n    secondSharedPathAtEndLength = DBL_MAX;\n}\n\n\n// Computes the *shared* length of these two shared paths.\n//\nstatic double pathLength(Avoid::Point **c_path, Avoid::Point **p_path, \n        size_t size)\n{\n    double length = 0;\n\n    for (unsigned int ind = 1; ind < size; ++ind)\n    {\n        if ( (*(c_path[ind - 1]) == *(p_path[ind - 1])) && \n             (*(c_path[ind]) == *(p_path[ind])) )\n        {\n            // This segment is shared by both paths.\n            //\n            // This function will only be used for orthogonal paths, so we \n            // can use Manhattan distance here since it will be faster to \n            // compute.\n            length += manhattanDist(*(c_path[ind - 1]), *(c_path[ind]));\n        }\n    }\n\n    return length;\n}\n\n// Works out if the segment conn[cIndex-1]--conn[cIndex] really crosses poly.\n// This does not not count non-crossing shared paths as crossings.\n// poly can be either a connector (polyIsConn = true) or a cluster\n// boundary (polyIsConn = false).\n//\nvoid ConnectorCrossings::countForSegment(size_t cIndex, const bool finalSegment)\n{\n    clear();\n\n    bool polyIsOrthogonal = (polyConnRef && \n            (polyConnRef->routingType() == ConnType_Orthogonal));\n    bool connIsOrthogonal = (connConnRef &&\n            (connConnRef->routingType() == ConnType_Orthogonal));\n\n    // Fixed routes will not have segment breaks at possible crossings.\n    bool polyIsFixed = (polyConnRef && polyConnRef->hasFixedRoute());\n    bool connIsFixed = (connConnRef && connConnRef->hasFixedRoute());\n    \n    // We need to split apart connectors at potential crossing points if\n    // either has a fixed route or it is a polyline connector.  This is not\n    // needed for orthogonal connectors where crossings occur at vertices \n    // in visibility graph and on the raw connector routes.\n    if (checkForBranchingSegments || polyIsFixed || connIsFixed ||\n            !polyIsOrthogonal || !connIsOrthogonal)\n    {\n        double epsilon = std::numeric_limits<double>::epsilon();\n        size_t conn_pn = conn.size();\n        // XXX When doing the pointOnLine test we allow the points to be \n        // slightly non-collinear.  This addresses a problem with clustered\n        // routing where connectors could otherwise route cheaply through\n        // shape corners that were not quite on the cluster boundary, but\n        // reported to be on there by the line segment intersection code,\n        // which I suspect is not numerically accurate enough.  This occurred\n        // for points that only differed by about 10^-12 in the y-dimension.\n        double tolerance = (!polyIsConn) ? epsilon : 0.0;\n        splitBranchingSegments(poly, polyIsConn, conn, tolerance);\n        // cIndex is going to be the last, so take into account added points.\n        cIndex += (conn.size() - conn_pn);\n    }\n    COLA_ASSERT(cIndex >= 1);\n    COLA_ASSERT(cIndex < conn.size());\n\n    size_t poly_size = poly.size();\n\n    Avoid::Point& a1 = conn.ps[cIndex - 1];\n    Avoid::Point& a2 = conn.ps[cIndex];\n    //db_printf(\"a1: %g %g\\n\", a1.x, a1.y);\n    //db_printf(\"a2: %g %g\\n\", a2.x, a2.y);\n\n    // Allocate arrays for computing shared paths.\n    // Don't use dynamic array due to portablity issues.\n    size_t max_path_size = std::min(poly_size, conn.size());\n    Avoid::Point **c_path = new Avoid::Point*[max_path_size];\n    Avoid::Point **p_path = new Avoid::Point*[max_path_size];\n    size_t size = 0;\n\n    for (size_t j = ((polyIsConn) ? 1 : 0); j < poly_size; ++j)\n    {\n        Avoid::Point& b1 = poly.ps[(j - 1 + poly_size) % poly_size];\n        Avoid::Point& b2 = poly.ps[j];\n        //db_printf(\"b1: %g %g\\n\", b1.x, b1.y);\n        //db_printf(\"b2: %g %g\\n\", b2.x, b2.y);\n\n        size = 0;\n\n        bool converging = false;\n\n        const bool a1_eq_b1 = (a1 == b1);\n        const bool a2_eq_b1 = (a2 == b1);\n        const bool a2_eq_b2 = (a2 == b2);\n        const bool a1_eq_b2 = (a1 == b2);\n\n        if ( (a1_eq_b1 && a2_eq_b2) ||\n             (a2_eq_b1 && a1_eq_b2) )\n        {\n            if (finalSegment)\n            {\n                converging = true;\n            }\n            else\n            {\n                // Route along same segment: no penalty.  We detect\n                // crossovers when we see the segments diverge.\n                continue;\n            }\n        }\n        else if (a2_eq_b1 || a2_eq_b2 || a1_eq_b2)\n        {\n            // Each crossing that is at a vertex in the \n            // visibility graph gets noticed four times.\n            // We ignore three of these cases.\n            // This also catches the case of a shared path,\n            // but this is one that terminates at a common\n            // endpoint, so we don't care about it.\n            continue;\n        }\n    \n        if (a1_eq_b1 || converging)\n        {\n            if (!converging)\n            {\n                if (polyIsConn && (j == 1))\n                {\n                    // Can't be the end of a shared path or crossing path \n                    // since the common point is the first point of the \n                    // connector path.  This is not a shared path at all.\n                    continue;\n                }\n\n                Avoid::Point& b0 = poly.ps[(j - 2 + poly_size) % poly_size];\n                // The segments share an endpoint -- a1==b1.\n                if (a2 == b0)\n                {\n                    // a2 is not a split, continue.\n                    continue;\n                }\n            }\n            \n            // If here and not converging, then we know that a2 != b2\n            // And a2 and its pair in b are a split.\n            COLA_ASSERT(converging || !a2_eq_b2);\n\n            bool shared_path = false;\n            \n            // Initial values here don't matter. They are only used after \n            // being set to sensible values, but we set them to stop a MSVC\n            // warning.\n            bool p_dir_back;\n            int p_dir = 0;\n            int trace_c = 0;\n            int trace_p = 0;\n            \n            if (converging)\n            {\n                // Determine direction we have to look through\n                // the points of connector b.\n                p_dir_back = a2_eq_b2 ? true : false;\n                p_dir = p_dir_back ? -1 : 1;\n                trace_c = (int) cIndex;\n                trace_p = (int) j;\n                if (!p_dir_back)\n                {\n                    if (finalSegment)\n                    {\n                        trace_p--;\n                    }\n                    else\n                    {   \n                        trace_c--;\n                    }\n                }\n\n                shared_path = true;\n            }\n            else if (cIndex >= 2)\n            {\n                Avoid::Point& b0 = poly.ps[(j - 2 + poly_size) % poly_size];\n                Avoid::Point& a0 = conn.ps[cIndex - 2];\n            \n                //db_printf(\"a0: %g %g\\n\", a0.x, a0.y);\n                //db_printf(\"b0: %g %g\\n\", b0.x, b0.y);\n\n                if ((a0 == b2) || (a0 == b0))\n                {\n                    // Determine direction we have to look through\n                    // the points of connector b.\n                    p_dir_back = (a0 == b0) ? true : false;\n                    p_dir = p_dir_back ? -1 : 1;\n                    trace_c = (int) cIndex;\n                    trace_p = (int) (p_dir_back ? j : j - 2);\n                    \n                    shared_path = true;\n                }\n            }    \n\n            if (shared_path)\n            {\n                crossingFlags |= CROSSING_SHARES_PATH;\n                // Shouldn't be here if p_dir is still equal to zero.\n                COLA_ASSERT(p_dir != 0);\n\n                // Build the shared path, including the diverging points at\n                // each end if the connector does not end at a common point.\n                while ( (trace_c >= 0) && (!polyIsConn || \n                            ((trace_p >= 0) && (trace_p < (int) poly_size))) )\n                {\n                    // If poly is a cluster boundary, then it is a closed \n                    // poly-line and so it wraps around.\n                    size_t index_p = (size_t)\n                            ((trace_p + (2 * poly_size)) % poly_size);\n                    size_t index_c = (size_t) trace_c;\n                    c_path[size] = &conn.ps[index_c];\n                    p_path[size] = &poly.ps[index_p];\n                    ++size;\n                    if ((size > 1) && (conn.ps[index_c] != poly.ps[index_p]))\n                    {\n                        // Points don't match, so break out of loop.\n                        break;\n                    }\n                    trace_c--;\n                    trace_p += p_dir;\n                }\n\n                // Are there diverging points at the ends of the shared path.\n                bool front_same = (*(c_path[0]) == *(p_path[0]));\n                bool back_same  = (*(c_path[size - 1]) == *(p_path[size - 1]));\n\n                // Determine if the shared path originates at a junction.\n                bool terminatesAtJunction = false;\n                if (polyConnRef && connConnRef && (front_same || back_same))\n                {\n                    // To do this we find the two ConnEnds at the common \n                    // end of the shared path.  Then check if they are \n                    // attached to a junction and it is the same one.\n                    std::pair<ConnEnd, ConnEnd> connEnds = \n                            connConnRef->endpointConnEnds();\n                    JunctionRef *connJunction = nullptr;\n\n                    std::pair<ConnEnd, ConnEnd> polyEnds = \n                            polyConnRef->endpointConnEnds();\n                    JunctionRef *polyJunction = nullptr;\n                   \n                    // The front of the c_path corresponds to destination \n                    // of the connector.\n                    connJunction = (front_same) ? connEnds.second.junction() : \n                            connEnds.first.junction();\n                    bool use_first = back_same;\n                    if (p_dir_back)\n                    {\n                        // Reversed, so use opposite.\n                        use_first = !use_first;\n                    }\n                    // The front of the p_path corresponds to destination \n                    // of the connector.\n                    polyJunction = (use_first) ? polyEnds.second.junction() :\n                            polyEnds.first.junction();\n                    \n                    terminatesAtJunction = (connJunction && \n                            (connJunction == polyJunction));\n                }\n\n                if (sharedPaths)\n                {\n                    // Store a copy of the shared path\n                    size_t start = (front_same) ? 0 : 1;\n                    size_t limit = size - ((back_same) ? 0 : 1);\n                \n                    PointList sPath(limit - start);\n                    for (size_t i = start; i < limit; ++i)\n                    {\n                        sPath[i - start] = *(c_path[i]);\n                    }\n                    sharedPaths->push_back(sPath);\n                }\n\n                // Check to see if these share a fixed segment.\n                if (polyIsOrthogonal && connIsOrthogonal)\n                {\n                    size_t startPt = (front_same) ? 0 : 1;\n                    size_t endPt = size - ((back_same) ? 1 : 2);\n                    for (size_t dim = 0; dim < 2; ++dim)\n                    {\n                        if ((*c_path[startPt])[dim] == (*c_path[endPt])[dim])\n                        {\n                            double pos = (*c_path[startPt])[dim];\n                            // See if this is inline with either the start\n                            // or end point of both connectors.  We don't\n                            // count them as crossing if they originate at a\n                            // junction and are part of the same hyperedge.\n                            if ( ((pos == poly.ps[0][dim]) ||\n                                    (pos == poly.ps[poly_size - 1][dim])) &&\n                                 ((pos == conn.ps[0][dim]) ||\n                                    (pos == conn.ps[cIndex][dim])) &&\n                                 (terminatesAtJunction == false))\n                            {\n                                crossingFlags |= CROSSING_SHARES_FIXED_SEGMENT;\n                            }\n                        }\n                    }\n\n                    if (!front_same && !back_same)\n                    {\n                        // Find overlapping segments that are constrained by\n                        // the fact that both the adjoining segments are fixed\n                        // in the other dimension, i.e.,\n                        //\n                        // X------++---X\n                        //        ||\n                        //        ||\n                        //    X---++------X\n                        //\n                        // In the example above, altDim is X, and dim is Y.\n                        //\n                        \n                        // For each dimension...\n                        for (size_t dim = 0; dim < 2; ++dim)\n                        {\n                            size_t end = size - 1;\n                            size_t altDim = (dim + 1) % 2;\n                            // If segment is in this dimension...\n                            if ((*c_path[1])[altDim] == (*c_path[end - 1])[altDim])\n                            {\n                                double posBeg = (*c_path[1])[dim];\n                                double posEnd = (*c_path[end - 1])[dim];\n                                // If both segment ends diverge at right-angles...\n                                if ( (posBeg == (*c_path[0])[dim]) && \n                                        (posBeg == (*p_path[0])[dim]) &&\n                                     (posEnd == (*c_path[end])[dim]) && \n                                        (posEnd == (*p_path[end])[dim]) )\n                                {\n                                    // and these segments are inline with the conn and path ends themselves...\n                                    if (posInlineWithConnEndSegs(posBeg, dim,\n                                                conn, poly) &&\n                                        posInlineWithConnEndSegs(posEnd, dim,\n                                                conn, poly))\n                                    {\n                                    // If all endpoints branch at right angles,\n                                    // then penalise this since it is a segment\n                                    // will will not be able to nudge apart\n                                    // without introducing fixed segment \n                                    // crossings.\n                                    crossingFlags |= \n                                            CROSSING_SHARES_FIXED_SEGMENT;\n                                    }\n                                }\n                            }\n                        }\n                    }\n\n#if 0\n                    // XXX: What is this code for?  It is pretty much \n                    // incomprehensible and also causes one of the test\n                    // cases to fail.  \n                    //\n                    if (!front_same && !back_same)\n                    {\n                        for (size_t dim = 0; dim < 2; ++dim)\n                        {\n                            size_t altDim = (dim + 1) % 2;\n                            if ((*c_path[1])[altDim] == (*c_path[1])[altDim])\n                            {\n                                size_t n = c_path.size();\n                                double yPosB = (*c_path[1])[dim];\n                                if ( (yPosB == (*c_path[0])[dim]) && \n                                        (yPosB == (*p_path[0])[dim]) )\n                                {\n                                    crossingFlags |= \n                                            CROSSING_SHARES_FIXED_SEGMENT;\n                                }\n\n                                double yPosE = (*c_path[n - 2])[dim];\n                                if ( (yPosE == (*c_path[n - 1])[dim]) && \n                                        (yPosE == (*p_path[n - 1])[dim]) )\n                                {\n                                    crossingFlags |= \n                                            CROSSING_SHARES_FIXED_SEGMENT;\n                                }\n                            }\n                        }\n                    }\n#endif\n                }\n\n                // {start,end}CornerSide specifies which side of conn the \n                // poly path enters and leaves.\n                int startCornerSide = 1;\n                int endCornerSide = 1;\n\n                bool reversed = false;\n                if (!front_same)\n                {\n                    // If there is a divergence at the beginning, \n                    // then order the shared path based on this.\n                    startCornerSide = Avoid::cornerSide(*c_path[0], *c_path[1], \n                            *c_path[2], *p_path[0]);\n                }\n                if (!back_same)\n                {\n                    // If there is a divergence at the end of the path, \n                    // then order the shared path based on this.\n                    endCornerSide = Avoid::cornerSide(*c_path[size - 3], \n                            *c_path[size - 2], *c_path[size - 1], \n                            *p_path[size - 1]);\n                }\n                else\n                {\n                    endCornerSide = startCornerSide;\n                }\n                if (front_same)\n                {\n                    startCornerSide = endCornerSide;\n                }\n                \n                if (endCornerSide != startCornerSide)\n                {\n                    // Mark that the shared path crosses.\n                    //db_printf(\"shared path crosses.\\n\");\n                    crossingCount += 1;\n                    if (crossingPoints)\n                    {\n                        crossingPoints->insert(*c_path[1]);\n                    }\n                }\n\n                if (front_same || back_same)\n                {\n                    crossingFlags |= CROSSING_SHARES_PATH_AT_END;\n\n                    // Reduce the cost of paths that stay straight after \n                    // the split, and make this length available so that the\n                    // paths can be ordered during the improveCrossings()\n                    // step and the straight (usually better) paths will be \n                    // left alone while the router attempts to find better\n                    // paths for the others.\n                    double straightModifier = 200;\n                    firstSharedPathAtEndLength = secondSharedPathAtEndLength = \n                            pathLength(c_path, p_path, size);\n                    if (back_same && (size > 2))\n                    {\n                        if (vecDir(*p_path[0], *p_path[1], *p_path[2]) == 0)\n                        {\n                            firstSharedPathAtEndLength -= straightModifier;\n                        }\n\n                        if (vecDir(*c_path[0], *c_path[1], *c_path[2]) == 0)\n                        {\n                            secondSharedPathAtEndLength -= straightModifier;\n                        }\n                    }\n                    else if (front_same && (size > 2))\n                    {\n                        if (vecDir(*p_path[size - 3], *p_path[size - 2],\n                                    *p_path[size - 1]) == 0)\n                        {\n                            firstSharedPathAtEndLength -= straightModifier;\n                        }\n\n                        if (vecDir(*c_path[size - 3], *c_path[size - 2],\n                                    *c_path[size - 1]) == 0)\n                        {\n                            secondSharedPathAtEndLength -= straightModifier;\n                        }\n                    }\n                }\n                else if (polyIsOrthogonal && connIsOrthogonal)\n                {\n                    int cStartDir = vecDir(*c_path[0], *c_path[1], *c_path[2]);\n                    int pStartDir = vecDir(*p_path[0], *p_path[1], *p_path[2]);\n                    if ((cStartDir != 0) && (cStartDir == -pStartDir))\n                    {\n                        // The start segments diverge at 180 degrees to each \n                        // other.  So order based on not introducing overlap\n                        // of the diverging segments when these are nudged\n                        // apart.\n                        startCornerSide = -cStartDir;\n                    }\n                    else \n                    {\n                        int cEndDir = vecDir(*c_path[size - 3], \n                                *c_path[size - 2], *c_path[size - 1]);\n                        int pEndDir = vecDir(*p_path[size - 3], \n                                *p_path[size - 2], *p_path[size - 1]);\n                        if ((cEndDir != 0) && (cEndDir == -pEndDir))\n                        {\n                            // The end segments diverge at 180 degrees to \n                            // each other.  So order based on not introducing \n                            // overlap of the diverging segments when these \n                            // are nudged apart.\n                            startCornerSide = -cEndDir;\n                        }\n                    }\n                }\n\n#if 0\n                int prevTurnDir = 0;\n                if (pointOrders)\n                {\n                    // Return the ordering for the shared path.\n                    COLA_ASSERT(c_path.size() > 0 || back_same);\n                    size_t adj_size = (c_path.size() - ((back_same) ? 0 : 1));\n                    for (size_t i = (front_same) ? 0 : 1; i < adj_size; ++i)\n                    {\n                        Avoid::Point& an = *(c_path[i]);\n                        Avoid::Point& bn = *(p_path[i]);\n                        int currTurnDir = ((i > 0) && (i < (adj_size - 1))) ?  \n                                vecDir(*c_path[i - 1], an,\n                                       *c_path[i + 1]) : 0;\n                        VertID vID(an.id, true, an.vn);\n                        if ( (currTurnDir == (-1 * prevTurnDir)) &&\n                                (currTurnDir != 0) && (prevTurnDir != 0) )\n                        {\n                            // The connector turns the opposite way around \n                            // this shape as the previous bend on the path,\n                            // so reverse the order so that the inner path\n                            // become the outer path and vice versa.\n                            reversed = !reversed;\n                        }\n                        bool orderSwapped = (*pointOrders)[an].addOrderedPoints(\n                                &bn, &an, reversed);\n                        if (orderSwapped)\n                        {\n                            // Reverse the order for later points.\n                            reversed = !reversed;\n                        }\n                        prevTurnDir = currTurnDir;\n                    }\n                }\n#endif\n                if (pointOrders)\n                {\n                    reversed = false;\n                    size_t startPt = (front_same) ? 0 : 1;\n                    \n                    // Orthogonal should always have at least one segment.\n                    COLA_ASSERT(size > (startPt + 1));\n\n                    if (startCornerSide > 0)\n                    {\n                        reversed = !reversed;\n                    }\n\n                    int prevDir = 0;\n                    // Return the ordering for the shared path.\n                    COLA_ASSERT(size > 0 || back_same);\n                    size_t adj_size = (size - ((back_same) ? 0 : 1));\n                    for (size_t i = startPt; i < adj_size; ++i)\n                    {\n                        Avoid::Point& an = *(c_path[i]);\n                        Avoid::Point& bn = *(p_path[i]);\n                        COLA_ASSERT(an == bn);\n\n                        if (i > startPt)\n                        {\n                            Avoid::Point& ap = *(c_path[i - 1]);\n                            Avoid::Point& bp = *(p_path[i - 1]);\n\n                            int thisDir = segDir(ap, an);\n                            if (prevDir == 0)\n                            {\n                                if (thisDir > 0)\n                                {\n                                    reversed = !reversed;\n                                }\n                            }\n                            else if (thisDir != prevDir)\n                            {\n                                reversed = !reversed;\n                            }\n\n                            int orientation = (ap.x == an.x) ? 0 : 1;\n                            //printf(\"prevOri %d\\n\", prevOrientation);\n                            //printf(\"1: %X, %X\\n\", (int) &(bn), (int) &(an));\n                            (*pointOrders)[an].addOrderedPoints(\n                                    orientation, \n                                    std::make_pair(&bn, polyConnRef), \n                                    std::make_pair(&an, connConnRef), \n                                    reversed);\n                            COLA_ASSERT(ap == bp);\n                            //printf(\"2: %X, %X\\n\", (int) &bp, (int) &ap);\n                            (*pointOrders)[ap].addOrderedPoints(\n                                    orientation, \n                                    std::make_pair(&bp, polyConnRef), \n                                    std::make_pair(&ap, connConnRef), \n                                    reversed);\n                            prevDir = thisDir;\n                        }\n                    }\n                }\n#if 0\n                    int ymod = -1;\n                    if ((id.vn == 1) || (id.vn == 2))\n                    {\n                        // bottom.\n                        ymod = +1;\n                    }\n                    \n                    int xmod = -1;\n                    if ((id.vn == 0) || (id.vn == 1))\n                    {\n                        // right.\n                        xmod = +1;\n                    }\n                    if(id.vn > 3)\n                    {\n                        xmod = ymod = 0;\n                        if (id.vn == 4)\n                        {\n                            // right.\n                            xmod = +1;\n                        }\n                        else if (id.vn == 5)\n                        {\n                            // bottom.\n                            ymod = +1;\n                        }\n                        else if (id.vn == 6)\n                        {\n                            // left.\n                            xmod = -1;\n                        }\n                        else if (id.vn == 7)\n                        {\n                            // top.\n                            ymod = -1;\n                        }\n                    }\n#endif\n \n                crossingFlags |= CROSSING_TOUCHES;\n            }\n            else if (cIndex >= 2)\n            {\n                // The connectors cross or touch at this point.\n                //db_printf(\"Cross or touch at point... \\n\");\n                \n                // Crossing shouldn't be at an endpoint.\n                COLA_ASSERT(cIndex >= 2);\n                COLA_ASSERT(!polyIsConn || (j >= 2));\n\n                Avoid::Point& b0 = poly.ps[(j - 2 + poly_size) % poly_size];\n                Avoid::Point& a0 = conn.ps[cIndex - 2];\n            \n                int side1 = Avoid::cornerSide(a0, a1, a2, b0);\n                int side2 = Avoid::cornerSide(a0, a1, a2, b2);\n                if (side1 != side2)\n                {\n                    // The connectors cross at this point.\n                    //db_printf(\"cross.\\n\");\n                    crossingCount += 1;\n                    if (crossingPoints)\n                    {\n                        crossingPoints->insert(a1);\n                    }\n                }\n\n                crossingFlags |= CROSSING_TOUCHES;\n                if (pointOrders)\n                {\n                    if (polyIsOrthogonal && connIsOrthogonal)\n                    {\n                        // Orthogonal case:\n                        // Just order based on which comes from the left and\n                        // top in each dimension because this can only be two\n                        // L-shaped segments touching at the bend.\n                        bool reversedX = ((a0.x < a1.x) || (a2.x < a1.x));\n                        bool reversedY = ((a0.y < a1.y) || (a2.y < a1.y));\n                        // XXX: Why do we need to invert the reversed values \n                        //      here?  Are they wrong for orthogonal points\n                        //      in the other places?\n                        (*pointOrders)[b1].addOrderedPoints(0, \n                                std::make_pair(&b1, polyConnRef), \n                                std::make_pair(&a1, connConnRef), \n                                !reversedX);\n                        (*pointOrders)[b1].addOrderedPoints(1, \n                                std::make_pair(&b1, polyConnRef), \n                                std::make_pair(&a1, connConnRef),\n                                !reversedY);\n                    }\n#if 0\n// Unused code.\n                    else\n                    {\n                        int turnDirA = vecDir(a0, a1, a2); \n                        int turnDirB = vecDir(b0, b1, b2); \n                        bool reversed = (side1 != -turnDirA); \n                        if (side1 != side2) \n                        { \n                            // Interesting case where a connector routes round \n                            // the edge of a shape and intersects a connector \n                            // which is connected to a port on the edge of the \n                            // shape. \n                            if (turnDirA == 0) \n                            { \n                                // We'll make B the outer by preference,  \n                                // because the points of A are collinear. \n                                reversed = false; \n                            } \n                            else if (turnDirB == 0) \n                            { \n                                reversed = true; \n                            } \n                            // TODO COLA_ASSERT((turnDirB != 0) || \n                            //          (turnDirA != 0)); \n                        }\n                        VertID vID(b1.id, b1.vn);\n                        //(*pointOrders)[b1].addOrderedPoints(&b1, &a1, reversed);\n                    }\n#endif\n                }\n            }\n        }\n        else\n        {\n            if ( polyIsOrthogonal && connIsOrthogonal)\n            {\n                // All crossings in orthogonal connectors will be at a\n                // vertex in the visibility graph, so we need not bother\n                // doing normal line intersection.\n                continue;\n            }\n\n            // No endpoint is shared between these two line segments,\n            // so just calculate normal segment intersection.\n\n            Point cPt;\n            int intersectResult = Avoid::segmentIntersectPoint(\n                    a1, a2, b1, b2, &(cPt.x), &(cPt.y));\n\n            if (intersectResult == Avoid::DO_INTERSECT)\n            {\n                if (!polyIsConn && \n                        ((a1 == cPt) || (a2 == cPt) || (b1 == cPt) || (b2 == cPt)))\n                {\n                    // XXX: This shouldn't actually happen, because these\n                    //      points should be added as bends to each line by\n                    //      splitBranchingSegments().  Thus, lets ignore them.\n                    COLA_ASSERT(a1 != cPt);\n                    COLA_ASSERT(a2 != cPt);\n                    COLA_ASSERT(b1 != cPt);\n                    COLA_ASSERT(b2 != cPt);\n                    continue;\n                }                \n                //db_printf(\"crossing lines:\\n\");\n                //db_printf(\"cPt: %g %g\\n\", cPt.x, cPt.y);\n                crossingCount += 1;\n                if (crossingPoints)\n                {\n                    crossingPoints->insert(cPt);\n                }\n            }\n        }\n    }\n    //db_printf(\"crossingcount %d %d\\n\", crossingCount, crossingFlags);\n\n    // Free shared path memory.\n    delete[] c_path;\n    delete[] p_path;\n}\n\n\n//============================================================================\n\n}\n\n\n"
  },
  {
    "path": "cola/libavoid/connector.h",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libavoid - Fast, Incremental, Object-avoiding Line Router\n *\n * Copyright (C) 2004-2015  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * Licensees holding a valid commercial license may use this file in\n * accordance with the commercial license agreement provided with the \n * library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  \n *\n * Author(s):   Michael Wybrow\n*/\n\n//! @file    connector.h\n//! @brief   Contains the interface for the ConnRef class.\n\n\n#ifndef AVOID_CONNECTOR_H\n#define AVOID_CONNECTOR_H\n\n#include <utility>\n#include <list>\n#include <vector>\n\n#include \"libavoid/dllexport.h\"\n#include \"libavoid/vertices.h\"\n#include \"libavoid/geometry.h\"\n#include \"libavoid/connend.h\"\n\n\nnamespace Avoid {\n\nclass Router;\nclass ConnRef;\nclass JunctionRef;\nclass ShapeRef;\ntypedef std::list<ConnRef *> ConnRefList;\n\n\n//! @brief  Describes the type of routing that is performed for each \n//!         connector.\nenum ConnType {\n    ConnType_None       = 0,\n    //! @brief  The connector path will be a shortest-path poly-line that\n    //!         routes around obstacles.\n    ConnType_PolyLine   = 1,\n    //! @brief  The connector path will be a shortest-path orthogonal \n    //!         poly-line (only vertical and horizontal line segments) that\n    //!         routes around obstacles.\n    ConnType_Orthogonal = 2\n};\n\n//! @brief  A checkpoint is a point that the route for a particular connector\n//!         must visit.  They may optionally be given an arrival/departure\n//!         direction.\n//!\nclass AVOID_EXPORT Checkpoint\n{\n    public:\n        //! @brief  A point that a route must visit.\n        //!\n        //! The connector will be able to enter and leave this checkpoint from \n        //! any direction.\n        //!\n        //! @param[in] p  The Point that must be visited.\n        Checkpoint(const Point& p)\n            : point(p),\n              arrivalDirections(ConnDirAll),\n              departureDirections(ConnDirAll)\n        {\n        }\n        //! @brief  A point that a route must visit.\n        //!\n        //! The connector will be able to enter and leave this checkpoint from \n        //! the directions specified.  Give Avoid::ConnDirAll to specify all\n        //! directions.\n        //!\n        //! @param[in] p  The Point that must be visited.\n        //! @param[in] ad Avoid::ConnDirFlags denoting arrival directions for\n        //!               the connector portion leading up to this checkpoint.\n        //! @param[in] dd Avoid::ConnDirFlags denoting departure directions \n        //!               for the connector portion leading away from this \n        //!               checkpoint.\n        Checkpoint(const Point& p, ConnDirFlags ad, ConnDirFlags dd)\n            : point(p),\n              arrivalDirections(ad),\n              departureDirections(dd)\n        {\n        }\n        // Default constructor.\n        Checkpoint()\n            : point(Point()),\n              arrivalDirections(ConnDirAll),\n              departureDirections(ConnDirAll)\n        {\n        }\n\n        Point point;\n        ConnDirFlags arrivalDirections;\n        ConnDirFlags departureDirections;\n};\n\n\n//! @brief   The ConnRef class represents a connector object.\n//!\n//! Connectors are a (possible multi-segment) line between two points.\n//! They are routed intelligently so as not to overlap any of the shape\n//! objects in the Router scene.\n//! \n//! Routing penalties can be applied, resulting in more aesthetically pleasing\n//! connector paths with fewer segments or less severe bend-points.\n//!\n//! You can set a function to be called when the connector has been rerouted\n//! and needs to be redrawn.  Alternatively, you can query the connector's\n//! needsRepaint() function to determine this manually.\n//!\n//! Usually, it is expected that you would create a ConnRef for each connector \n//! in your diagram and keep that reference in your own connector class.\n//!\nclass AVOID_EXPORT ConnRef\n{\n    public:\n        //! @brief Constructs a connector with no endpoints specified.\n        //!\n        //! The constructor requires a valid Router instance.  This router\n        //! will take ownership of the connector.  Hence, you should not\n        //! call the destructor yourself, but should instead call\n        //! Router::deleteConnector() and the router instance will remove\n        //! and then free the connector's memory.\n        //!\n        //! @note Regarding IDs:\n        //!       You can let libavoid manually handle IDs by not specifying\n        //!       them.  Alternatively, you can specify all IDs yourself, but \n        //!       you must be careful to makes sure that each object in the \n        //!       scene (shape, connector, cluster, etc) is given a unique, \n        //!       positive ID.  This uniqueness is checked if assertions are\n        //!       enabled, but if not and there are clashes then strange \n        //!       things can happen.\n        //!\n        //! @param[in]  router  The router scene to place the connector into.\n        //! @param[in]  id      Optionally, a positive integer ID unique\n        //!                     among all objects.\n        //!\n        ConnRef(Router *router, const unsigned int id = 0);\n        //! @brief Constructs a connector with endpoints specified.\n        //!\n        //! The constructor requires a valid Router instance.  This router\n        //! will take ownership of the connector.  Hence, you should not\n        //! call the destructor yourself, but should instead call\n        //! Router::deleteConnector() and the router instance will remove\n        //! and then free the connector's memory.\n        //!\n        //! If an ID is not specified, then one will be assigned to the shape.\n        //! If assigning an ID yourself, note that it should be a unique \n        //! positive integer.  Also, IDs are given to all objects in a scene,\n        //! so the same ID cannot be given to a shape and a connector for \n        //! example.\n        //!\n        //! @param[in]  router  The router scene to place the connector into.\n        //! @param[in]  id      A unique positive integer ID for the connector.\n        //! @param[in]  src     The source endpoint of the connector.\n        //! @param[in]  dst     The destination endpoint of the connector.\n        //!\n        ConnRef(Router *router, const ConnEnd& src, const ConnEnd& dst,\n                const unsigned int id = 0);\n\n// To prevent C++ objects from being destroyed in garbage collected languages\n// when the libraries are called from SWIG, we hide the declarations of the\n// destructors and prevent generation of default destructors.\n#ifndef SWIG\n        //! @brief  Connector reference destuctor.\n        //!\n        //! Do not call this yourself, instead call\n        //! Router::deleteConnector().  Ownership of this object\n        //! belongs to the router scene.\n        ~ConnRef();\n#endif        \n        //! @brief  Sets both a new source and destination endpoint for this \n        //!         connector.\n        //!\n        //! If the router is using transactions, then this action will occur\n        //! the next time Router::processTransaction() is called.  See\n        //! Router::setTransactionUse() for more information.\n        //!\n        //! @param[in]  srcPoint  New source endpoint for the connector.\n        //! @param[in]  dstPoint  New destination endpoint for the connector.\n        void setEndpoints(const ConnEnd& srcPoint, const ConnEnd& dstPoint);\n        \n        //! @brief  Sets just a new source endpoint for this connector.\n        //!\n        //! If the router is using transactions, then this action will occur\n        //! the next time Router::processTransaction() is called.  See\n        //! Router::setTransactionUse() for more information.\n        //!\n        //! @param[in]  srcPoint  New source endpoint for the connector.\n        void setSourceEndpoint(const ConnEnd& srcPoint);\n        \n        //! @brief  Sets just a new destination endpoint for this connector.\n        //!\n        //! If the router is using transactions, then this action will occur\n        //! the next time Router::processTransaction() is called.  See\n        //! Router::setTransactionUse() for more information.\n        //!\n        //! @param[in]  dstPoint  New destination endpoint for the connector.\n        void setDestEndpoint(const ConnEnd& dstPoint);\n        \n        //! @brief   Returns the ID of this connector.\n        //! @returns The ID of the connector. \n        unsigned int id(void) const;\n        \n        //! @brief   Returns a pointer to the router scene this connector is in.\n        //! @returns A pointer to the router scene for this connector.\n        Router *router(void) const;\n\n        //! @brief   Returns an indication of whether this connector has a \n        //!          new route and thus needs to be repainted.\n        //!\n        //! If the connector has been rerouted and need repainting, the  \n        //! displayRoute() method can be called to get a reference to the \n        //! new route.\n        //!\n        //! @returns Returns true if the connector requires repainting, or \n        //!          false if it does not.\n        bool needsRepaint(void) const;\n        \n        //! @brief   Returns a reference to the current raw \"debug\" route for \n        //!          the connector.\n        //!\n        //! This is a raw \"debug\" shortest path version of the route, where \n        //! each line segment in the route may be made up of multiple collinear\n        //! line segments.  It also has no post-processing (i.e., centering,\n        //! nudging apart of overlapping paths, or curving of corners) applied \n        //! to it.  A route to display to the user can be obtained by calling\n        //! displayRoute().\n        //!\n        //! @returns The PolyLine route for the connector.\n        const PolyLine& route(void) const;\n        \n        //! @brief   Returns a reference to the current display version of the\n        //!          route for the connector.\n        //! \n        //! The display version of a route has been simplified to collapse all\n        //! collinear line segments into single segments.  It also has all\n        //! post-processing applied to the route, including centering, curved\n        //! corners and nudging apart of overlapping segments.\n        //! \n        //! @returns The PolyLine display route for the connector.\n        PolyLine& displayRoute(void);\n        \n        //! @brief   Sets a callback function that will called to indicate that\n        //!          the connector needs rerouting.\n        //!\n        //! The cb function will be called when shapes are added to, removed \n        //! from or moved about on the page.  The pointer ptr will be passed \n        //! as an argument to the callback function.\n        //!\n        //! @param[in]  cb   A pointer to the callback function.\n        //! @param[in]  ptr  A generic pointer that will be passed to the \n        //!                  callback function.\n        void setCallback(void (*cb)(void *), void *ptr);\n        \n        //! @brief   Returns the type of routing performed for this connector.\n        //! @return  The type of routing performed.\n        //!\n        ConnType routingType(void) const;\n        \n        //! @brief       Sets the type of routing to be performed for this \n        //!              connector.\n        //! \n        //! If a call to this method changes the current type of routing \n        //! being used for the connector, then it will get rerouted during\n        //! the next processTransaction() call, or immediately if \n        //! transactions are not being used.\n        //!\n        //! @param type  The type of routing to be performed.\n        //!\n        void setRoutingType(ConnType type);\n       \n        //! @brief   Splits a connector in the centre of the segmentNth \n        //!          segment and creates a junction point there as well \n        //!          as a second connector.\n        //!\n        //! The new junction and connector will be automatically added to \n        //! the router scene.  A slight preference will be given to the \n        //! connectors connecting to the junction in the same orientation\n        //! the line segment already existed in.\n        //!\n        //! @return  A pair containing pointers to the new JunctionRef and \n        //!          ConnRef.\n        std::pair<JunctionRef *, ConnRef *> splitAtSegment(\n                const size_t segmentN);\n\n        //! @brief  Allows the user to specify a set of checkpoints that this\n        //!         connector will route via.\n        //!\n        //! When routing, the connector will attempt to visit each of the \n        //! points in the checkpoints list in order.  It will route from the\n        //! source point to the first checkpoint, to the second checkpoint, \n        //! etc.  If a checkpoint is unreachable because it lies inside an\n        //! obstacle, then that checkpoint will be skipped.\n        //! \n        //! @param[in] checkpoints  An ordered list of Checkpoints that the \n        //!                         connector will attempt to route via.\n        void setRoutingCheckpoints(const std::vector<Checkpoint>& checkpoints);\n\n        //! @brief   Returns the current set of routing checkpoints for this\n        //!          connector.\n        //! @returns The ordered list of Checkpoints that this connector will \n        //!          route via.\n        std::vector<Checkpoint> routingCheckpoints(void) const;\n        \n        //! @brief   Returns ConnEnds specifying what this connector is \n        //!          attached to.\n        //!\n        //! This may be useful during hyperedge rerouting.  You can check the \n        //! type and properties of the ConnEnd objects to find out what this \n        //! connector is attached to.  The ConnEnd::type() will be ConnEndEmpty\n        //! if the connector has not had its endpoints initialised.\n        //!\n        //! @note  If the router is using transactions, you might get \n        //!        unexpected results if you call this after changing objects\n        //!        but before calling Router::processTransaction().  In this\n        //!        case changes to ConnEnds for the connector may be queued \n        //!        and not yet applied, so you will get old (or empty) values.\n        //!\n        //! @returns A pair of ConnEnd objects specifying what the connector\n        //!          is attached to.\n        //!\n        std::pair<ConnEnd, ConnEnd> endpointConnEnds(void) const;\n\n        // @brief   Returns the source endpoint vertex in the visibility graph.\n        // @returns The source endpoint vertex.\n        VertInf *src(void) const;\n        // @brief   Returns the destination endpoint vertex in the \n        //          visibility graph.\n        // @returns The destination endpoint vertex.\n        VertInf *dst(void) const;\n        \n        //! @brief  Sets a fixed user-specified route for this connector.\n        //!\n        //! libavoid will no longer calculate object-avoiding paths for this\n        //! connector but instead just return the specified route.  The path\n        //! of this connector will still be considered for the purpose of \n        //! nudging and routing other non-fixed connectors.\n        //!\n        //! @note  This will reset the endpoints of the connector to the two\n        //!        ends of the given route, which may cause it to become \n        //!        dettached from any shapes or junctions.  You can\n        //!        alternatively call setFixedExistingRoute() for connectors\n        //!        with valid routes in hyperedges that you would like to\n        //!        remain attached.\n        //!\n        //! @param[in] route  The new fixed route for the connector.\n        //! @sa  setFixedExistingRoute()\n        //! @sa  clearFixedRoute()\n        //!\n        void setFixedRoute(const PolyLine& route);\n\n        //! @brief  Sets a fixed existing route for this connector.\n        //!\n        //! libavoid will no longer calculate object-avoiding paths for this\n        //! connector but instead just return the current exisitng route.  \n        //! The path of this connector will still be considered for the \n        //! purpose of nudging and routing other non-fixed connectors.\n        //!\n        //! @note  The endpoints of this connector will remain at their current\n        //!        positions, even while remaining 'attached' to shapes \n        //!        or junctions that move.\n        //!\n        //! @sa  setFixedRoute()\n        //! @sa  clearFixedRoute()\n        //!\n        void setFixedExistingRoute(void);\n\n        //! @brief  Returns whether the connector route is marked as fixed.\n        //!\n        //! @return True if the connector route is fixed, false otherwise.\n        //!\n        bool hasFixedRoute(void) const;\n\n        //! @brief  Returns the connector to being automatically routed if it\n        //!         was marked as fixed.\n        //!\n        //! @sa  setFixedRoute()\n        //!\n        void clearFixedRoute(void);\n\n        void set_route(const PolyLine& route);\n        void calcRouteDist(void);\n        void makeActive(void);\n        void makeInactive(void);\n        VertInf *start(void);\n        void removeFromGraph(void);\n        bool isInitialised(void) const;\n        void makePathInvalid(void);\n        void setHateCrossings(bool value);\n        bool doesHateCrossings(void) const;\n        void setEndpoint(const unsigned int type, const ConnEnd& connEnd);\n        bool setEndpoint(const unsigned int type, const VertID& pointID, \n                Point *pointSuggestion = nullptr);\n        std::vector<Point> possibleDstPinPoints(void) const;\n    \n    private:\n        friend class Router;\n        friend class ConnEnd;\n        friend class JunctionRef;\n        friend class ConnRerouteFlagDelegate;\n        friend class HyperedgeImprover;\n        friend struct HyperedgeTreeEdge;\n        friend struct HyperedgeTreeNode;\n        friend class HyperedgeRerouter;\n\n        PolyLine& routeRef(void);\n        void freeRoutes(void);\n        void performCallback(void);\n        bool generatePath(void);\n        void generateCheckpointsPath(std::vector<Point>& path,\n                std::vector<VertInf *>& vertices);\n        void generateStandardPath(std::vector<Point>& path,\n                std::vector<VertInf *>& vertices);\n        void unInitialise(void);\n        void updateEndPoint(const unsigned int type, const ConnEnd& connEnd);\n        void common_updateEndPoint(const unsigned int type, ConnEnd connEnd);\n        void freeActivePins(void);\n        bool getConnEndForEndpointVertex(VertInf *vertex, ConnEnd& connEnd) \n                const;\n        std::pair<Obstacle *, Obstacle *> endpointAnchors(void) const;\n        void outputCode(FILE *fp) const;\n        std::pair<bool, bool> assignConnectionPinVisibility(const bool connect);\n\n\n        Router *m_router;\n        unsigned int m_id;\n        ConnType m_type;\n        bool *m_reroute_flag_ptr;\n        bool m_needs_reroute_flag:1;\n        bool m_false_path:1;\n        bool m_needs_repaint:1;\n        bool m_active:1;\n        bool m_initialised:1;\n        bool m_hate_crossings:1;\n        bool m_has_fixed_route:1;\n        PolyLine m_route;\n        Polygon m_display_route;\n        double m_route_dist;\n        ConnRefList::iterator m_connrefs_pos;\n        VertInf *m_src_vert;\n        VertInf *m_dst_vert;\n        VertInf *m_start_vert;\n        void (*m_callback_func)(void *);\n        void *m_connector;\n        ConnEnd *m_src_connend;\n        ConnEnd *m_dst_connend;\n        std::vector<Checkpoint> m_checkpoints;\n        std::vector<VertInf *> m_checkpoint_vertices;\n};\n\n\ntypedef std::pair<Point *, ConnRef *> PtConnPtrPair;\n\ntypedef std::vector< PtConnPtrPair > PointRepVector;\ntypedef std::list<std::pair<size_t, size_t> > NodeIndexPairLinkList;\n\nclass PtOrder\n{\n    public:\n        PtOrder();\n        ~PtOrder();\n        void addPoints(const size_t dim, const PtConnPtrPair& arg1, \n                const PtConnPtrPair& arg2);\n        void addOrderedPoints(const size_t dim, const PtConnPtrPair& innerArg, \n                const PtConnPtrPair& outerArg, bool swapped);\n        int positionFor(const size_t dim, const ConnRef *conn);\n        PointRepVector sortedPoints(const size_t dim);\n    private:\n        size_t insertPoint(const size_t dim, const PtConnPtrPair& point);\n        void sort(const size_t dim);\n\n        // One for each dimension.\n        bool sorted[2];\n        PointRepVector nodes[2];\n        NodeIndexPairLinkList links[2];\n        PointRepVector sortedConnVector[2];\n};\n\ntypedef std::map<Avoid::Point,PtOrder> PtOrderMap;\ntypedef std::set<Avoid::Point> PointSet;\n\n\nconst unsigned int CROSSING_NONE = 0;\nconst unsigned int CROSSING_TOUCHES = 1;\nconst unsigned int CROSSING_SHARES_PATH = 2;\nconst unsigned int CROSSING_SHARES_PATH_AT_END = 4;\nconst unsigned int CROSSING_SHARES_FIXED_SEGMENT = 8;\n\n\ntypedef std::pair<int, unsigned int> CrossingsInfoPair;\ntypedef std::vector<Avoid::Point> PointList;\ntypedef std::vector<PointList> SharedPathList;\n\nclass ConnectorCrossings\n{\n    public:\n        ConnectorCrossings(Avoid::Polygon& poly, bool polyIsConn, \n                Avoid::Polygon& conn, ConnRef *polyConnRef = nullptr, \n                ConnRef *connConnRef = nullptr);\n        void clear(void);\n        void countForSegment(size_t cIndex, const bool finalSegment);\n\n        Avoid::Polygon& poly;\n        bool polyIsConn; \n        Avoid::Polygon& conn; \n        bool checkForBranchingSegments;\n        ConnRef *polyConnRef;\n        ConnRef *connConnRef;\n        \n        unsigned int crossingCount;\n        unsigned int crossingFlags;\n        PointSet *crossingPoints;\n        PtOrderMap *pointOrders;\n        SharedPathList *sharedPaths;\n        \n        double firstSharedPathAtEndLength;\n        double secondSharedPathAtEndLength;\n};\n\nextern void splitBranchingSegments(Avoid::Polygon& poly, bool polyIsConn,\n        Avoid::Polygon& conn, const double tolerance = 0);\nextern bool validateBendPoint(VertInf *aInf, VertInf *bInf, VertInf *cInf);\n\n}\n\n\n#endif\n\n\n"
  },
  {
    "path": "cola/libavoid/connend.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libavoid - Fast, Incremental, Object-avoiding Line Router\n *\n * Copyright (C) 2004-2009  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * Licensees holding a valid commercial license may use this file in\n * accordance with the commercial license agreement provided with the \n * library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  \n *\n * Author(s):  Michael Wybrow\n*/\n\n#include <cstring>\n#include <cmath>\n#include <cstdlib>\n#include <cfloat>\n#include <algorithm>\n\n#include \"libavoid/router.h\"\n#include \"libavoid/connend.h\"\n#include \"libavoid/connector.h\"\n#include \"libavoid/connectionpin.h\"\n#include \"libavoid/junction.h\"\n#include \"libavoid/shape.h\"\n#include \"libavoid/debug.h\"\n#include \"libavoid/graph.h\"\n#include \"libavoid/visibility.h\"\n\nnamespace Avoid {\n\n    \nConnEnd::ConnEnd()\n    : m_type(ConnEndEmpty),\n      m_point(Point(0,0)),\n      m_directions(ConnDirAll),\n      m_connection_pin_class_id(CONNECTIONPIN_UNSET),\n      m_anchor_obj(nullptr),\n      m_conn_ref(nullptr),\n      m_active_pin(nullptr)\n{\n}\n\nConnEnd::ConnEnd(const Point& point) \n    : m_type(ConnEndPoint),\n      m_point(point),\n      m_directions(ConnDirAll),\n      m_connection_pin_class_id(CONNECTIONPIN_UNSET),\n      m_anchor_obj(nullptr),\n      m_conn_ref(nullptr),\n      m_active_pin(nullptr)\n{\n}\n\n\nConnEnd::ConnEnd(const Point& point, const ConnDirFlags visDirs) \n    : m_type(ConnEndPoint),\n      m_point(point),\n      m_directions(visDirs),\n      m_connection_pin_class_id(CONNECTIONPIN_UNSET),\n      m_anchor_obj(nullptr),\n      m_conn_ref(nullptr),\n      m_active_pin(nullptr)\n{\n}\n\n\nConnEnd::ConnEnd(ShapeRef *shapeRef, const unsigned int connectionPinClassID)\n    : m_type(ConnEndShapePin),\n      m_point(Point(0,0)),\n      m_directions(ConnDirAll),\n      m_connection_pin_class_id(connectionPinClassID),\n      m_anchor_obj(shapeRef),\n      m_conn_ref(nullptr),\n      m_active_pin(nullptr)\n{\n    COLA_ASSERT(m_anchor_obj != nullptr);\n    COLA_ASSERT(m_connection_pin_class_id > 0);\n\n    m_point = m_anchor_obj->position();\n    COLA_ASSERT(m_connection_pin_class_id != CONNECTIONPIN_UNSET);\n}\n\n\nConnEnd::ConnEnd(JunctionRef *junctionRef)\n    : m_type(ConnEndJunction),\n      m_directions(ConnDirAll),\n      m_connection_pin_class_id(CONNECTIONPIN_CENTRE),\n      m_anchor_obj(junctionRef),\n      m_conn_ref(nullptr),\n      m_active_pin(nullptr)\n{\n    COLA_ASSERT(m_anchor_obj != nullptr);\n    m_point = m_anchor_obj->position();\n}\n\n\nConnEnd::~ConnEnd()\n{\n}\n\n\nConnEndType ConnEnd::type(void) const\n{\n    return m_type;\n}\n\n\nconst Point ConnEnd::position(void) const\n{\n    if (m_active_pin)  // Attached to a pin!\n    {\n        return m_active_pin->position();\n    }\n    else if (m_anchor_obj)\n    {\n        return m_anchor_obj->position();\n    }\n    else\n    {\n        return m_point;\n    }\n}\n\n\nConnDirFlags ConnEnd::directions(void) const\n{\n    if (m_active_pin)  // Attached to a pin!\n    {\n        return m_active_pin->directions();\n    }\n    else\n    {\n        return m_directions;\n    }\n}\n\n\nShapeRef *ConnEnd::shape(void) const\n{\n    return dynamic_cast<ShapeRef *> (m_anchor_obj);\n}\n\n\nJunctionRef *ConnEnd::junction(void) const\n{\n    return dynamic_cast<JunctionRef *> (m_anchor_obj);\n}\n\n\nunsigned int ConnEnd::pinClassId(void) const\n{\n    return m_connection_pin_class_id;\n}\n\n\n\nbool ConnEnd::isPinConnection(void) const\n{\n    return (m_type == ConnEndShapePin) || (m_type == ConnEndJunction);\n}\n\nunsigned int ConnEnd::endpointType(void) const\n{\n    COLA_ASSERT(m_conn_ref != nullptr);\n    return (m_conn_ref->m_dst_connend == this) ? VertID::tar : VertID::src;\n}\n\n\n// Marks this ConnEnd as using a particular ShapeConnectionPin.\nvoid ConnEnd::usePin(ShapeConnectionPin *pin)\n{\n    COLA_ASSERT(m_active_pin == nullptr);\n    \n    m_active_pin = pin;\n    if (m_active_pin)\n    {\n        m_active_pin->m_connend_users.insert(this);\n    }\n}\n\n\n// Marks this ConnEnd as using a particular ShapeConnectionPin's vertex.\nvoid ConnEnd::usePinVertex(VertInf *pinVert)\n{\n    COLA_ASSERT(m_active_pin == nullptr);\n    \n    for (ShapeConnectionPinSet::iterator curr = \n            m_anchor_obj->m_connection_pins.begin(); \n            curr != m_anchor_obj->m_connection_pins.end(); ++curr)\n    {\n        ShapeConnectionPin *currPin = *curr;\n        if (currPin->m_vertex == pinVert)\n        {\n            usePin(currPin);\n            break;\n        }\n    }\n}\n\n\n// Returns a vector of the possible Points for this ConnEnd\nstd::vector<Point> ConnEnd::possiblePinPoints(void) const\n{\n    std::vector<Point> points;\n    if (!m_anchor_obj || (m_connection_pin_class_id == CONNECTIONPIN_UNSET))\n    {\n        return points;\n    }\n\n    return m_anchor_obj->possiblePinPoints(m_connection_pin_class_id);\n}\n\n// Marks this ConnEnd as no longer using the active ShapeConnectionPin\nvoid ConnEnd::freeActivePin(void)\n{\n    if (m_active_pin)\n    {\n        m_active_pin->m_connend_users.erase(this);\n    }\n    m_active_pin = nullptr;\n}\n\n\n// Creates the connection between a connector and a shape/junction.\nvoid ConnEnd::connect(ConnRef *conn)\n{\n    COLA_ASSERT(isPinConnection());\n    COLA_ASSERT(m_anchor_obj);\n    COLA_ASSERT(m_conn_ref == nullptr);\n\n    m_anchor_obj->addFollowingConnEnd(this);\n    m_conn_ref = conn;\n}\n\n\n// Removes the connection between a connector and a shape/junction.\nvoid ConnEnd::disconnect(const bool shapeDeleted)\n{\n    if (m_conn_ref == nullptr)\n    {\n        // Not connected.\n        return;\n    }\n\n    m_point = position();\n    m_anchor_obj->removeFollowingConnEnd(this);\n    m_conn_ref = nullptr;\n\n    if (shapeDeleted)\n    {\n        // Turn this into a manual ConnEnd.\n        m_point = position();\n        m_anchor_obj = nullptr;\n        m_type = ConnEndPoint;\n        m_connection_pin_class_id = CONNECTIONPIN_UNSET;\n    }\n}\n\n\n// Assign visibility to a dummy vertex representing all the possible pins\n// for this pinClassId.\nvoid ConnEnd::assignPinVisibilityTo(VertInf *dummyConnectionVert, \n        VertInf *targetVert)\n{\n    unsigned int validPinCount = 0;\n\n    COLA_ASSERT(m_anchor_obj);\n    COLA_ASSERT(m_connection_pin_class_id != CONNECTIONPIN_UNSET);\n \n    Router *router = m_anchor_obj->router();\n    for (ShapeConnectionPinSet::iterator curr = \n            m_anchor_obj->m_connection_pins.begin(); \n            curr != m_anchor_obj->m_connection_pins.end(); ++curr)\n    {\n        ShapeConnectionPin *currPin = *curr;\n        if ((currPin->m_class_id == m_connection_pin_class_id) && \n                (!currPin->m_exclusive || currPin->m_connend_users.empty()))\n        {\n            double routingCost = currPin->m_connection_cost;\n            Point adjTargetPt = targetVert->point - currPin->m_vertex->point;\n            double angle = rotationalAngle(adjTargetPt);\n            bool inVisibilityRange = false;\n\n            if (angle <= 45 || angle >= 315)\n            {\n                if (currPin->directions() & ConnDirRight)\n                {\n                    inVisibilityRange = true;\n                }\n            }\n            if (angle >= 45 && angle <= 135)\n            {\n                if (currPin->directions() & ConnDirDown)\n                {\n                    inVisibilityRange = true;\n                }\n            }\n            if (angle >= 135 && angle <= 225)\n            {\n                if (currPin->directions() & ConnDirLeft)\n                {\n                    inVisibilityRange = true;\n                }\n            }\n            if (angle >= 225 && angle <= 315)\n            {\n                if (currPin->directions() & ConnDirUp)\n                {\n                    inVisibilityRange = true;\n                }\n            }\n            if (!inVisibilityRange)\n            {\n                routingCost += router->routingParameter(portDirectionPenalty);\n            }\n\n            if (router->m_allows_orthogonal_routing)\n            {\n                // This has same ID and is either unconnected or not \n                // exclusive, so give it visibility.\n                EdgeInf *edge = new EdgeInf(dummyConnectionVert,\n                        currPin->m_vertex, true);\n                // XXX Can't use a zero cost due to assumptions \n                //     elsewhere in code.\n                edge->setDist(manhattanDist(dummyConnectionVert->point,\n                            currPin->m_vertex->point) + \n                        std::max(0.001, routingCost));\n            }\n\n            if (router->m_allows_polyline_routing)\n            {\n                // This has same ID and is either unconnected or not \n                // exclusive, so give it visibility.\n                EdgeInf *edge = new EdgeInf(dummyConnectionVert,\n                        currPin->m_vertex, false);\n                // XXX Can't use a zero cost due to assumptions \n                //     elsewhere in code.\n                edge->setDist(euclideanDist(dummyConnectionVert->point,\n                            currPin->m_vertex->point) + \n                        std::max(0.001, routingCost));\n            }\n\n            // Increment the number of valid pins for this ConnEnd connection.\n            validPinCount++;\n        }\n    }\n\n    if (validPinCount == 0)\n    {\n        // There should be at least one pin, otherwise we will have \n        // problems finding connector routes.\n        err_printf(\"Warning: In ConnEnd::assignPinVisibilityTo():\\n\"\n                   \"         ConnEnd for connector %d can't connect to shape %d\\n\"\n                   \"         since it has no pins with class id of %u.\\n\", \n                   (int) m_conn_ref->id(), (int) m_anchor_obj->id(), \n                   m_connection_pin_class_id);\n    }\n}\n\n\nstd::pair<bool, VertInf *> ConnEnd::getHyperedgeVertex(Router *router) const\n{\n    bool addedVertex = false;\n    VertInf *vertex = nullptr;\n\n    if (m_anchor_obj)\n    {\n        for (ShapeConnectionPinSet::iterator curr =\n                m_anchor_obj->m_connection_pins.begin();\n                curr != m_anchor_obj->m_connection_pins.end(); ++curr)\n        {\n            ShapeConnectionPin *currPin = *curr;\n            if ((currPin->m_class_id == m_connection_pin_class_id) &&\n                    (!currPin->m_exclusive || currPin->m_connend_users.empty()))\n            {\n                vertex = currPin->m_vertex;\n            }\n        }\n        COLA_ASSERT(vertex != nullptr);\n    }\n    else\n    {\n        VertID id(0, kUnassignedVertexNumber,\n                VertID::PROP_ConnPoint);\n        vertex = new VertInf(router, id, m_point);\n        vertex->visDirections = m_directions;\n        addedVertex = true;\n\n        if (router->m_allows_polyline_routing)\n        {\n            vertexVisibility(vertex, nullptr, true, true);\n        }\n    }\n\n    return std::make_pair(addedVertex, vertex);\n}\n\n\nvoid ConnEnd::outputCode(FILE *fp, const char *srcDst) const\n{\n    if (junction())\n    {\n        fprintf(fp, \"    %sPt = ConnEnd(junctionRef%u);\\n\", srcDst,\n                m_anchor_obj->id());\n    }\n    else if (shape())\n    {\n        fprintf(fp, \"    %sPt = ConnEnd(shapeRef%u, %u);\\n\", srcDst,\n                m_anchor_obj->id(), m_connection_pin_class_id);\n    }\n    else\n    {\n        fprintf(fp, \"    %sPt = ConnEnd(Point(%\" PREC \"g, %\" PREC \"g), (ConnDirFlags) %u);\\n\",\n                srcDst, m_point.x, m_point.y, m_directions);\n    }\n}\n\n\n//============================================================================\n\n}\n\n\n"
  },
  {
    "path": "cola/libavoid/connend.h",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libavoid - Fast, Incremental, Object-avoiding Line Router\n *\n * Copyright (C) 2004-2014  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * Licensees holding a valid commercial license may use this file in\n * accordance with the commercial license agreement provided with the \n * library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  \n *\n * Author(s):   Michael Wybrow\n*/\n\n//! @file    connend.h\n//! @brief   Contains the interface for the ConnEnd class.\n\n\n#ifndef AVOID_CONNEND_H\n#define AVOID_CONNEND_H\n\n\n#include <cstdio>\n#include <list>\n#include <vector>\n#include <utility>\n\n#include \"libavoid/dllexport.h\"\n#include \"libavoid/geometry.h\"\n\n\nnamespace Avoid {\n\nclass Obstacle;\nclass ShapeRef;\nclass JunctionRef;\nclass Router;\nclass ConnRef;\nclass ShapeConnectionPin;\ntypedef std::list<ConnRef *> ConnRefList;\nclass VertInf;\n\n\n//! @brief  Flags that can be passed to the ConnEnd constructor to specify\n//!         which sides of a shape this point should have visibility to if\n//!         it is located within the shape's area.\n//!\n//! Like SVG, libavoid considers the Y-axis to point downwards, that is, \n//! like screen coordinates the coordinates increase from left-to-right and \n//! also from top-to-bottom.\n//!\nenum ConnDirFlag {\n    ConnDirNone  = 0,\n    //! @brief  This option specifies the point should be given visibility \n    //!         to the top of the shape that it is located within.\n    ConnDirUp    = 1,\n    //! @brief  This option specifies the point should be given visibility \n    //!         to the bottom of the shape that it is located within.\n    ConnDirDown  = 2,\n    //! @brief  This option specifies the point should be given visibility \n    //!         to the left side of the shape that it is located within.\n    ConnDirLeft  = 4,\n    //! @brief  This option specifies the point should be given visibility \n    //!         to the right side of the shape that it is located within.\n    ConnDirRight = 8,\n    //! @brief  This option, provided for convenience, specifies the point \n    //!         should be given visibility to all four sides of the shape \n    //!         that it is located within.\n    ConnDirAll   = 15\n};\n//! @brief  One or more Avoid::ConnDirFlag options.\n//!\ntypedef unsigned int ConnDirFlags;\n\n\n//! @brief  Types that describe the kind a connection that a ConnEnd \n//!         represents.\n//!\nenum ConnEndType {\n    //! @brief  The ConnEnd represents a free-floating point that may or may \n    //!         not have visibility in specific directions.\n    ConnEndPoint,\n    //! @brief  The ConnEnd attaches to a specific ShapeConnectionPin on a \n    //!         shape.\n    ConnEndShapePin,\n    //! @brief  The ConnEnd attaches to a junction.\n    ConnEndJunction,\n    //! @brief  The ConnEnd is empty and doesn't have any information set.\n    ConnEndEmpty\n};\n\n\n//! @brief  The ConnEnd class represents different possible endpoints for \n//!         connectors.\n//!\n//! ConnEnds may be free-floating points, points attached to junctions (between\n//! multiple connectors), or points attached to shapes (either to the centre of \n//! the shape or to particular pin positions on the shape).\n//! \nclass AVOID_EXPORT ConnEnd \n{\n    public:\n        //! @brief Constructs a ConnEnd from a free-floating point.\n        //!\n        //! @param[in]  point  The position of the connector endpoint.\n        //!\n        ConnEnd(const Point& point);\n\n        //! @brief Constructs a ConnEnd from a free-floating point as well\n        //!        as a set of flags specifying visibility for this point \n        //!        if it is located inside a shape.\n        //!\n        //! @param[in]  point    The position of the connector endpoint.\n        //! @param[in]  visDirs  One or more Avoid::ConnDirFlag options \n        //!                      specifying the directions that this point \n        //!                      should be given visibility if it is inside \n        //!                      a shape.  Currently has no effect if outside\n        //!                      of shapes.\n        //!\n        ConnEnd(const Point& point, const ConnDirFlags visDirs);\n\n        //! @brief Constructs a ConnEnd attached to one of a particular set of\n        //!        connection pins on a shape.\n        //!\n        //! This is the recommended method for connecting to shapes that may \n        //! later be moved or resized and for which you don't want to track \n        //! and specify the connector endpoints yourself.  See the \n        //! ShapeConnectionPin documentation for more information.\n        //! \n        //! If you to just connect to the centre of a shape you should just\n        //! create a centre connection pin\n        //! @code\n        //! const unsigned int CENTRE = 1;\n        //! new Avoid::ShapeConnectionPin(shapeRef, CENTRE, Avoid::ATTACH_POS_CENTRE, Avoid::ATTACH_POS_CENTRE);\n        //! @endcode\n        //! and attach to that with\n        //! @code\n        //! ConnEnd(shapeRef, CENTRE);\n        //! @endcode\n        //!\n        //! If a pin with the specified pin class ID doesn't exist then you\n        //! will get a warning and a straight-line path between the source \n        //! and destination endpoints of the connector will be returned \n        //! during routing.\n        //!\n        //! @param[in]  shapeRef              A pointer to the containing shape's\n        //!                                   ShapeRef.\n        //! @param[in]  connectionPinClassID  A non-zero integer denoting the\n        //!                                   class ID for the set of pins to\n        //!                                   connect to.\n        //!\n        ConnEnd(ShapeRef *shapeRef, const unsigned int connectionPinClassID);\n\n        //! @brief Constructs a ConnEnd attached to one of the connection \n        //!        pins on a junction.\n        //!\n        //! This is the recommended method for connecting to junctions that \n        //! may later be moved.  See the ShapeConnectionPin documentation for \n        //! more information.\n        //!\n        //! @param[in]  junctionRef           A pointer to the containing \n        //!                                   junction's junctionRef.\n        //!\n        ConnEnd(JunctionRef *junctionRef);\n\n\n        //! @brief Returns the kind of connection this ConnEnd represents.\n        //!\n        //! @return The ConnEndType represented by this ConnEnd.\n        //!\n        ConnEndType type(void) const;\n\n        //! @brief Returns the position of this connector endpoint.\n        //!\n        //! @return The position of this connector endpoint.\n        //!\n        const Point position(void) const;\n\n        //! @brief Returns the directions in which this connector endpoint\n        //!        should be given visibility.\n        //!\n        //! @return The visibility directions for this connector endpoint.\n        //!\n        ConnDirFlags directions(void) const;\n\n        //! @brief Returns the shape this ConnEnd attaches to, or nullptr.\n        //!\n        //! Will be valid only if type() == ConnEndShapePin.\n        //!\n        //! @return The ShapeRef pointer that the ConnEnd attaches to, or nullptr.\n        //!\n        ShapeRef *shape(void) const;\n\n        //! @brief Returns the junction this ConnEnd attaches to, or nullptr.\n        //!\n        //! Will be valid only if type() == ConnEndJunction.\n        //!\n        //! @return The JunctionRef pointer that the ConnEnd attaches to,\n        //!         or nullptr.\n        //!\n        JunctionRef *junction(void) const;\n\n        //! @brief Returns the pin class ID for a ConnEnd attached to a shape.\n        //!\n        //! Will be valid only if type() == ConnEndShapePin.\n        //!\n        //! @return An unsigned int representing the pin class ID for the\n        //!         ConnEnd.\n        //!\n        unsigned int pinClassId(void) const;\n\n        ConnEnd();\n        ~ConnEnd();\n    private:\n        friend class Obstacle;\n        friend class JunctionRef;\n        friend class ShapeRef;\n        friend class ConnRef;\n        friend class Router;\n        friend class HyperedgeRerouter;\n        friend class ShapeConnectionPin;\n        friend class HyperedgeImprover;\n        friend class CrossingConnectorsInfo;\n\n        void connect(ConnRef *conn);\n        void disconnect(const bool shapeDeleted = false);\n        void usePin(ShapeConnectionPin *pin);\n        void usePinVertex(VertInf *pinVert);\n        void freeActivePin(void);\n        unsigned int endpointType(void) const;\n        bool isPinConnection(void) const;\n        std::vector<Point> possiblePinPoints(void) const;\n        void assignPinVisibilityTo(VertInf *dummyConnectionVert, \n                VertInf *targetVert);\n        void outputCode(FILE *fp, const char *srcDst) const;\n        std::pair<bool, VertInf *> getHyperedgeVertex(Router *router) const;\n\n        ConnEndType m_type;\n        Point m_point;\n        ConnDirFlags m_directions;\n        unsigned int m_connection_pin_class_id;\n        \n        // For referencing ConnEnds\n        Obstacle *m_anchor_obj;  // The shape/junction this is attached to.\n        ConnRef *m_conn_ref;    // The parent connector.\n        \n        // The pin to which the ConnEnd is attached.\n        ShapeConnectionPin *m_active_pin;  \n};\n\n\n}\n\n\n#endif\n\n\n"
  },
  {
    "path": "cola/libavoid/debug.h",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libavoid - Fast, Incremental, Object-avoiding Line Router\n *\n * Copyright (C) 2004-2008  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * Licensees holding a valid commercial license may use this file in\n * accordance with the commercial license agreement provided with the \n * library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  \n *\n * Author(s):   Michael Wybrow\n*/\n\n\n#ifndef AVOID_DEBUG_H\n#define AVOID_DEBUG_H\n\n\n#if defined(_MSC_VER) && defined(USE_ATLTRACE)\n    // Using Microsoft Visual C++ compiler and we want to use ATLTRACE\n    // to send warnings and error messages to a GUI window.\n\n    // Prevent inclusion of min and max macros.\n    #define NOMINMAX\n\n    #include <afx.h>\n#endif\n\n#include <cstdarg>\n#include <cstdio>\n#include <iostream>\n\n\nnamespace Avoid {\n\n// db_printf is debugging output for verifying behaviour of the router:\n#ifdef LIBAVOID_DEBUG\n\n  #if defined(_MSC_VER) && defined(USE_ATLTRACE)\n    #define db_printf  ATL::AtlTrace\n  #else\n    inline void db_printf(const char *fmt, ...)\n    {\n        va_list ap;\n        va_start(ap, fmt);\n        vfprintf(stdout, fmt, ap);\n        va_end(ap);\n    }\n  #endif\n\n#else\n\n    inline void db_printf(const char *, ...)\n    {\n    }\n\n#endif\n\n// err_printf are critical errors that mean something pretty bad has happened:\n#if defined(_MSC_VER) && defined(USE_ATLTRACE)\n\n    #define err_printf ATL::AtlTrace\n\n#else\n\n    // For other environments we always show these errors.\n    inline void err_printf(const char *fmt, ...)\n    {\n        va_list ap;\n        va_start(ap, fmt);\n        vfprintf(stderr, fmt, ap);\n        va_end(ap);\n    }\n\n#endif\n\n}\n\n// Precision of numbers in libavoid SVG debug file.  Used in printf\n// strings (\"%\" PREC \"g\"), e.g., \"%.16g\"\n#if defined(HIGH_PRECISION_DEBUG)\n    #define PREC \".16\"\n#else\n    #define PREC \"\"\n#endif\n\n#endif\n\n\n"
  },
  {
    "path": "cola/libavoid/debughandler.h",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libavoid - Fast, Incremental, Object-avoiding Line Router\n *\n * Copyright (C) 2014  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * Licensees holding a valid commercial license may use this file in\n * accordance with the commercial license agreement provided with the \n * library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  \n *\n * Author(s):   Michael Wybrow\n*/\n\n// @file    debughandler.h\n// @brief   Contains the interface for the DebugHandler class.\n\n#ifndef AVOID_DEBUGHANDLER_H\n#define AVOID_DEBUGHANDLER_H\n\n#include \"libavoid/assertions.h\"\n#include \"libavoid/dllexport.h\"\n\n// Add -DDEBUGHANDLER to compile in debug handler with optimisations enabled.\n#ifndef NDEBUG\n  #define DEBUGHANDLER\n#endif\n\nnamespace Avoid {\n\n// @brief You can subclass DebugHandler and register an instance with Router\n//        to recieve debugging information.\n// \n// @note  This is currently intended for internal use.\n//\nclass AVOID_EXPORT DebugHandler\n{\n    public:\n        DebugHandler()\n        {\n        }\n\n        virtual ~DebugHandler()\n        {\n        }\n\n        // @brief The obstacles being routed around.\n        //\n        virtual void updateObstacleBoxes(std::vector<Avoid::Box> obstacles)\n        {\n            COLA_UNUSED(obstacles);\n        }\n\n        // @brief An updated connector route.  Optionally the ends of a just\n        //        updated segment within the route between the indexes index1 \n        //        and index2.\n        //\n        virtual void updateConnectorRoute(ConnRef *conn, int index1, int index2)\n        {\n            COLA_UNUSED(conn);\n            COLA_UNUSED(index1);\n            COLA_UNUSED(index2);\n        }\n\n        // @brief The current endpoints that a path is being searched for\n        //        between src and tar\n        //\n        virtual void beginningSearchWithEndpoints(VertInf *src, VertInf *tar)\n        {\n            COLA_UNUSED(src);\n            COLA_UNUSED(tar);\n        }\n\n        // @brief The current search path.\n        //\n        virtual void updateCurrentSearchPath(Avoid::PolyLine currentPath)\n        {\n            COLA_UNUSED(currentPath);\n        }\n\n        // @brief The current hyperedge endpoints for hyperedge rerouting\n        //\n        virtual void beginningHyperedgeReroutingWithEndpoints(std::set<VertInf *> endpoints)\n        {\n            COLA_UNUSED(endpoints);\n        }\n\n\n        // @brief The Minimum Terminal Spanning Tree for hyperedge rerouting\n        //        is being grown with the edge between vertices u and v.\n        //\n        // @param shouldWait  Boolean indicating the forest is being grown \n        //                    with this edge, or otherwise being immediately\n        //                    repopulated after pruning.\n        //\n        virtual void mtstGrowForestWithEdge(Avoid::VertInf *u, Avoid::VertInf *v, bool shouldWait)\n        {\n            COLA_UNUSED(u);\n            COLA_UNUSED(v);\n            COLA_UNUSED(shouldWait);\n        }\n\n        // @brief The Minimum Terminal Spanning Tree for hyperedge rerouting\n        //        is potentiall bridged by the edge between vertices u and v.\n        //\n        virtual void mtstPotentialBridgingEdge(Avoid::VertInf *u, Avoid::VertInf *v)\n        {\n            COLA_UNUSED(u);\n            COLA_UNUSED(v);\n        }\n\n        // @brief The Minimum Terminal Spanning Tree for hyperedge rerouting\n        //        is being finalised with the edge between vertices u and v.\n        //\n        // @param isBridge  Boolean indicating whether edge was a bridge.\n        //\n        virtual void mtstCommitToEdge(Avoid::VertInf *u, Avoid::VertInf *v, bool isBridge)\n        {\n            COLA_UNUSED(u);\n            COLA_UNUSED(v);\n            COLA_UNUSED(isBridge);\n        }\n};\n\n\n}\n\n#endif\n"
  },
  {
    "path": "cola/libavoid/dllexport.h",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libavoid - Fast, Incremental, Object-avoiding Line Router\n *\n * Copyright (C) 2012  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * Licensees holding a valid commercial license may use this file in\n * accordance with the commercial license agreement provided with the \n * library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  \n *\n * Author(s):   Michael Wybrow\n*/\n\n\n#ifndef AVOID_DLLEXPORT_H\n#define AVOID_DLLEXPORT_H\n\n#if defined(_MSC_VER) && !defined(LIBAVOID_NO_DLL)\n    #ifdef LIBAVOID_EXPORTS\n        #define AVOID_EXPORT __declspec(dllexport)\n    #else\n        #define AVOID_EXPORT __declspec(dllimport)\n    #endif\n#else\n    #define AVOID_EXPORT\n#endif\n\n#endif\n"
  },
  {
    "path": "cola/libavoid/doc/description.doc",
    "content": "/*!\n\n\\if LIBAVOID_DOC\n@mainpage libavoid: Object-avoiding orthogonal and polyline connector routing library\n\\endif\n\n\\if ADAPTAGRAMS_DOC\n@page libavoid libavoid &mdash; Overview\n\\endif\n\nlibavoid is a cross-platform C++ library providing fast, object-avoiding \northogonal and polyline connector routing for use in interactive diagram \neditors.\n\nlibavoid is part of the \n<a href=\"http://www.adaptagrams.org/\">Adaptagrams project</a>. \nThere are no official releases yet, though the code is stable and \navailable from the Adaptagrams \n<a href=\"https://github.com/mjwybrow/adaptagrams\">GitHub\nrepository</a>.\n\nThe API is documented using Doxygen.  The documentation you are currently \nreading can be obtained by running doxygen in the cola or libavoid directory. \nThere is also \na simple <a href=\"libavoid_example.html\">documented example</a> to help you get started.\n\nlibavoid is written and maintained by \n<a href=\"http://users.monash.edu/~mwybrow/\">Michael Wybrow</a>,\na member of <a href=\"http://ialab.it.monash.edu/\">Immersive Analytics Lab</a> at Monash University, Australia.\n\nThe algorithms used for the connector routing are described in the following papers.  If you use libavoid, please cite the relevant paper.\n-  M. Wybrow, K. Marriott, and P.J. Stuckey. Orthogonal connector \n   routing.\\n\n   In Proceedings of 17th International Symposium on Graph Drawing \n   (GD '09),\\n\n   LNCS 5849, pages 219–231. Spring-Verlag, 2010.\n   [<a href=\"http://dx.doi.org/10.1007/978-3-642-11805-0_22\">DOI</a>]\n   [<a href=\"http://users.monash.edu/~mwybrow/papers/wybrow-gd-2009.pdf\">PDF</a>]\n-  M. Wybrow, K. Marriott, and P.J. Stuckey. Incremental connector \n   routing.\\n\n   In Proceedings of 13th International Symposium on Graph Drawing \n   (GD '05),\\n\n   LNCS 3843, pages 446—457. Springer-Verlag, 2006. \n   [<a href=\"http://dx.doi.org/10.1007/11618058_40\">DOI</a>]\n   [<a href=\"http://users.monash.edu/~mwybrow/papers/wybrow-gd-2005.pdf\">PDF</a>]\n-  M. Wybrow, K. Marriott and P.J. Stuckey.  Orthogonal hyperedge routing.\\n\n   In Proceedings of 7th International Conference on the Theory and Application of Diagrams (Diagrams 2012),\\n \n   LNCS (LNAI) 7352, pages 51&ndash;64. Springer-Verlag, 2012.\n   [<a href=\"http://dx.doi.org/10.1007/978-3-642-31223-6_10\">DOI</a>]\n   [<a href=\"http://users.monash.edu/~mwybrow/papers/wybrow-diagrams-2012.pdf\">PDF</a>]\n-  K. Marriott, P.J. Stuckey, and M. Wybrow.  Seeing Around Corners: Fast Orthogonal Connector Routing.\\n\n   In Proceedings of the 8th International Conference on the Theory and Application of Diagrams (Diagrams 2014),\\n\n   LNCS 8578, pages 31&ndash;37. Springer-Verlag, 2014.\n   [<a href=\"http://doi.acm.org/10.1007/978-3-662-44043-8_4\">DOI</a>]\n   [<a href=\"http://users.monash.edu/~mwybrow/papers/marriott-diagrams-2014.pdf\">PDF</a>]\n\nlibavoid is currently used in the following software:\n-  A commercial circuit diagram editor;\n-  <a href=\"http://users.monash.edu/~mwybrow/dunnart/\">Dunnart</a>, a prototype research \n   constraint-based diagram editor;\n-  <a href=\"http://www.inkscape.org/\">Inkscape</a>, the popular Open \n   Source vector graphics editor;\n-  <a href=\"http://arcadiapathways.sourceforge.net/\">Arcadia</a>, a \n   visualisation tool for metabolic pathways;\n-  <a href=\"http://gaphor.sourceforge.net/\">Gaphas</a>, an open source diagramming widget for GTK+, written in Python;\n-  <a href=\"http://brlcad.org/\">BRL-CAD</a>, Constructive Solid Geometry (CSG) solid modeling system;\n-  <a href=\"http://www.qxorm.com/\">QxOrm</a>, a C++ library designed to provide Object Relational Mapping (ORM) feature to C++ users; and\n-  <a href=\"http://www.qxorm.com/\">QxEntityEditor</a>, a graphic editor for QxOrm library, providing a graphic way to manage a data model.\n\n\n*/\n\n\n"
  },
  {
    "path": "cola/libavoid/doc/example.doc",
    "content": "\n/*!\n\n@page libavoid_example libavoid &mdash; Documented code example\n\nlibavoid is a C++ library.  Its code is all within the Avoid namespace.\n\nFirst, you must create an instance of the router. \n@code\nAvoid::Router *router = new Avoid::Router(Avoid::PolyLineRouting); @endcode\n\nTo add a shape (obstacle) to the router, you first create a Avoid::ShapeRef by giving the bounding box of the obstacle.  This adds the shape to the router (and cause rerouting of connectors it intersects).  It also passes ownership of the shapeRef object to the router instance, though it is still fine for you to keep a reference to it.\n@code\n// Create the ShapeRef:\nAvoid::Rectangle rectangle(Avoid::Point(20.0, 35.0), Avoid::Point(40.0, 12.0));\nAvoid::ShapeRef *shapeRef = new Avoid::ShapeRef(router, rectangle); @endcode\nor\n@code \nAvoid::Polygon shapePoly(3);\nshapePoly.ps[0] = Avoid::Point(1.0, 1.0);\nshapePoly.ps[1] = Avoid::Point(2.5, 1.5);\nshapePoly.ps[2] = Avoid::Point(1.5, 2.5);\nAvoid::ShapeRef *shapeRef = new Avoid::ShapeRef(router, shapePoly); @endcode\n\nThe relevant prototypes (all in the Avoid namespace) are as follows.  If a shape ID is specified, it should be non-zero and unique among all shapes and connectors.\n@code\nAvoid::Rectangle(const Avoid::Point& topLeft, const Avoid::Point& bottomRight);\nAvoid::Rectangle(const Avoid::Point& centre, const double width, const double height);\nAvoid::ShapeRef(Avoid::Router *router, const Avoid::Polygon& polygon, unsigned int id = 0); @endcode\n\n\nTo move or resize a shape already in the router, you do the following:\n@code\nrouter->moveShape(shapeRef, newPolygon); @endcode\nor\n@code\ndouble xmove = 20, ymove = 15;\nrouter->moveShape(shapeRef, xmove, ymove); @endcode\n\nIn its default mode the router will queue multiple shape movements and perform the changes to the visibility graph in an optimised order.  Thus you make several calls to Avoid::Router::moveShape() for different shapes and then tell the router to process the moves.  This tend to be useful in interactive applications where the user may move multiple shapes at once.\n@code\nrouter->moveShape(shapeRef1, newPolygon1);\nrouter->moveShape(shapeRef2, newPolygon2);\nrouter->processTransaction();\n @endcode\n\nTo delete a shape from the router (and reroute connectors that then have a better path) you do the following.  \n@code\nrouter->deleteShape(shapeRef); @endcode\nThis will cause the router to free the memory for the shapeRef.  You should discard your reference to the shapeRef after this call.\n\nTo add a new connector to the router, you do the following:\n@code \nAvoid::ConnEnd srcPt(Avoid::Point(1.2, 0.5));\nAvoid::ConnEnd dstPt(Avoid::Point(3.0, 4.0));\nAvoid::ConnRef *connRef = new Avoid::ConnRef(router, srcPt, dstPt); @endcode\nThis passes ownership of the connRef object to the router instance, though it is still fine for you to keep a reference to it.\n\nTo remove a connector from the router:\n@code\nrouter->deleteConnector(connRef); @endcode\nThis will cause the router to free the memory for the connRef.  You should discard your reference to the connRef after this call.\n\nYou can set a function to be called when the connector needs to be redrawn.  When called, this function will be passed the pointer given as a second argument to Avoid::ConnRef::setCallback():\n@code\nvoid connCallback(void *ptr)\n{\n    Avoid::ConnRef *connRef = (Avoid::ConnRef *) ptr;\n    printf(\"Connector %u needs rerouting!\\n\", connRef->id());\n}\nconnRef->setCallback(connCallback, connRef); @endcode\n\nThe callback will be triggered by movement, addition and deletion of shapes, as well as by adjustment of the connector endpoints, or by processing a transaction that includes any of these events.  You can check if a connector path has changed, and hence the object requires repainting (say because a better path is available due to a shape being deleted):\n@code\nif (connRef->needsRepaint()) ... @endcode\n\nIf you want to trigger the callback for a connector after moving its endpoints (or when it is first created you can do this via:\n@code\nconnRef->processTransaction(); @endcode\n\nYou can then get the new path as follows:\n\n@code\nconst Avoid::PolyLine route = connRef->dispayRoute();\nfor (size_t i = 0; i &lt; route.size(); ++i) \n{\n    Avoid::Point point = route.at(i);\n    printf(\"%f, %f\\n\", point.x, point.y);\n} @endcode       \n\nObviously the alternative to using the callback mechanism is to iterate through all connectors and check their needsRepaint() value after having called processTransaction().\n\nYou can update the endpoints of a connector with:\n@code\nAvoid::ConnEnd newSrcPt(Avoid::Point(6, 3));\nAvoid::ConnEnd newDstPt(Avoid::Point(12, 67));\nconnRef->setEndpoints(newSrcPt, newDstPt); @endcode\nor\n@code\nAvoid::ConnEnd newSrcPt(Avoid::Point(6, 3));\nconnRef->setSourceEndpoint(newSrcPt);\n\nAvoid::ConnEnd newDstPt(Avoid::Point(6, 3));\nconnRef->setDestEndpoint(newDstPt); @endcode\n\nYou can also create connection pins on shapes and attach connectors directly to these.  Then when you move or resize the shapes, the connector endpoints attached to them will be automatically rerouted.\n\nYou can create a connection pin as follows:\n@code\nconst unsigned int CENTRE = 1;\nnew Avoid::ShapeConnectionPin(shapeRef, CENTRE, Avoid::ATTACH_POS_CENTRE, Avoid::ATTACH_POS_CENTRE); @endcode\nThis one connects to the centre of the shape, but the position can be specified anywhere within the shape as a proportion of the shape's width and height.  \n\nYou can then attach a connector to the connection pin be doing the following:\n@code\nAvoid::ConnEnd newSrcPt(shapeRef, CENTRE);\nconnRef->setSourceEndpoint(newSrcPt); @endcode\n\n\nSee also a short example: example.cpp in the libavoid/tests directory\n\n*/\n"
  },
  {
    "path": "cola/libavoid/geometry.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libavoid - Fast, Incremental, Object-avoiding Line Router\n *\n * Copyright (C) 2004-2011  Monash University\n *\n * --------------------------------------------------------------------\n * Much of the code in this module is based on code published with\n * and/or described in \"Computational Geometry in C\" (Second Edition),\n * Copyright (C) 1998  Joseph O'Rourke <orourke@cs.smith.edu>\n * --------------------------------------------------------------------\n * The segmentIntersectPoint function is based on code published and\n * described in Franklin Antonio, Faster Line Segment Intersection,\n * Graphics Gems III, p. 199-202, code: p. 500-501.\n * --------------------------------------------------------------------\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * Licensees holding a valid commercial license may use this file in\n * accordance with the commercial license agreement provided with the \n * library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  \n *\n * Author(s):  Michael Wybrow\n*/\n\n\n// For M_PI:\n#ifndef _USE_MATH_DEFINES\n#define _USE_MATH_DEFINES\n#endif\n#include <cmath>\n\n#include <limits>\n\n#include \"libavoid/graph.h\"\n#include \"libavoid/geometry.h\"\n#include \"libavoid/assertions.h\"\n\n\nnamespace Avoid {\n\n\n// Returns true iff the point c lies on the closed segment ab.\n// To be used when the points are known to be collinear.\n//\n// Based on the code of 'Between'.\n//\nbool inBetween(const Point& a, const Point& b, const Point& c)\n{\n    double epsilon = std::numeric_limits<double>::epsilon();\n\n    // We only call this when we know the points are collinear,\n    // otherwise we should be checking this here.\n    COLA_ASSERT(vecDir(a, b, c, epsilon) == 0);\n\n    if (fabs(a.x - b.x) > epsilon)\n    {\n        // not vertical\n        return (((a.x < c.x) && (c.x < b.x)) ||\n                ((b.x < c.x) && (c.x < a.x)));\n    }\n    else\n    {\n        return (((a.y < c.y) && (c.y < b.y)) ||\n                ((b.y < c.y) && (c.y < a.y)));\n    }\n}\n\n\n// Returns true iff the three points are colinear.\n//\nbool colinear(const Point& a, const Point& b, const Point& c,\n        const double tolerance)\n{\n\n    // Do this a bit more optimally for orthogonal AB line segments.\n    if (a == b)\n    {\n        return true;\n    }\n    else if (a.x == b.x)\n    {\n        return (a.x == c.x);\n    }\n    else if (a.y == b.y)\n    {\n        return (a.y == c.y);\n    }\n\n    // Or use the general case.\n    return (vecDir(a, b, c, tolerance) == 0);\n    \n}\n\n\n// Returns true iff the point c lies on the closed segment ab.\n//\nbool pointOnLine(const Point& a, const Point& b, const Point& c, \n        const double tolerance)\n{\n    // Do this a bit more optimally for orthogonal AB line segments.\n    if (a.x == b.x)\n    {\n        return (a.x == c.x) &&\n                (((a.y < c.y) && (c.y < b.y)) ||\n                 ((b.y < c.y) && (c.y < a.y)));\n    }\n    else if (a.y == b.y)\n    {\n        return (a.y == c.y) &&\n                (((a.x < c.x) && (c.x < b.x)) ||\n                 ((b.x < c.x) && (c.x < a.x)));\n    }\n\n    // Or use the general case.\n    return (vecDir(a, b, c, tolerance) == 0) && inBetween(a, b, c);\n}\n\n\n// Returns true if the segment cd intersects the segment ab, blocking\n// visibility.\n//\n// Based on the code of 'IntersectProp' and 'Intersect'.\n//\nbool segmentIntersect(const Point& a, const Point& b, const Point& c,\n        const Point& d)\n{\n    int ab_c = vecDir(a, b, c);\n    if (ab_c == 0)\n    {\n        return false;\n    }\n\n    int ab_d = vecDir(a, b, d);\n    if (ab_d == 0)\n    {\n        return false;\n    }\n\n    // It's ok for either of the points a or b to be on the line cd,\n    // so we don't have to check the other two cases.\n\n    int cd_a = vecDir(c, d, a);\n    int cd_b = vecDir(c, d, b);\n\n    // Is an intersection if a and b are on opposite sides of cd,\n    // and c and d are on opposite sides of the line ab.\n    //\n    // Note: this is safe even though the textbook warns about it\n    // since, unlike them, our vecDir is equivilent to 'AreaSign'\n    // rather than 'Area2'.\n    return (((ab_c * ab_d) < 0) && ((cd_a * cd_b) < 0));\n}\n\n\n// Returns true if the segment e1-e2 intersects the shape boundary \n// segment s1-s2, blocking visibility.\n//\nbool segmentShapeIntersect(const Point& e1, const Point& e2, const Point& s1,\n        const Point& s2, bool& seenIntersectionAtEndpoint)\n{\n    if (segmentIntersect(e1, e2, s1, s2))\n    {\n        // Basic intersection of segments.\n        return true;\n    }\n    else if ( (((s2 == e1) || pointOnLine(s1, s2, e1)) && \n               (vecDir(s1, s2, e2) != 0)) \n              ||\n              (((s2 == e2) || pointOnLine(s1, s2, e2)) &&\n               (vecDir(s1, s2, e1) != 0)) )\n    {\n        // Segments intersect at the endpoint of one of the segments.  We\n        // allow this once, but the second one blocks visibility.  Otherwise\n        // shapes butted up against each other could have visibility through\n        // shapes.\n        if (seenIntersectionAtEndpoint)\n        {\n            return true;\n        }\n        seenIntersectionAtEndpoint = true;\n    }\n    return false;\n}\n\n\n// Returns true iff the point p in a valid region that can contain\n// shortest paths.  a0, a1, a2 are ordered vertices of a shape.\n//\n// Based on the code of 'InCone'.\n//\nbool inValidRegion(bool IgnoreRegions, const Point& a0, const Point& a1,\n        const Point& a2, const Point& b)\n{\n    // r is a0--a1\n    // s is a1--a2\n\n    int rSide = vecDir(b, a0, a1);\n    int sSide = vecDir(b, a1, a2);\n\n    bool rOutOn = (rSide <= 0);\n    bool sOutOn = (sSide <= 0);\n\n    bool rOut = (rSide < 0);\n    bool sOut = (sSide < 0);\n\n    if (vecDir(a0, a1, a2) > 0)\n    {\n        // Convex at a1:\n        //\n        //   !rO      rO\n        //    sO      sO\n        //\n        // ---s---+\n        //        |\n        //   !rO  r   rO\n        //   !sO  |  !sO\n        //\n        //\n        if (IgnoreRegions)\n        {\n            return (rOutOn && !sOut) || (!rOut && sOutOn);\n        }\n        return (rOutOn || sOutOn);\n    }\n    else\n    {\n        // Concave at a1:\n        //\n        //   !rO      rO\n        //   !sO     !sO\n        //\n        //        +---s---\n        //        |\n        //   !rO  r   rO\n        //    sO  |   sO\n        //\n        //\n        return (IgnoreRegions ? false : (rOutOn && sOutOn));\n    }\n}\n\n\n// Gives the side of a corner that a point lies on:\n//      1   anticlockwise\n//     -1   clockwise\n// e.g.                     /|s2\n//       /s3          -1   / |\n//      /                 /  |\n//  1  |s2  -1           / 1 |  -1\n//     |                /    |\n//     |s1           s3/     |s1\n//     \nint cornerSide(const Point &c1, const Point &c2, const Point &c3,\n        const Point& p)\n{\n    int s123 = vecDir(c1, c2, c3);\n    int s12p = vecDir(c1, c2, p);\n    int s23p = vecDir(c2, c3, p);\n\n    if (s123 == 1)\n    {\n        if ((s12p >= 0) && (s23p >= 0))\n        {\n            return 1;\n        }\n        return -1;\n    }\n    else if (s123 == -1)\n    {\n        if ((s12p <= 0) && (s23p <= 0))\n        {\n            return -1;\n        }\n        return 1;\n    }\n\n    // c1-c2-c3 are collinear, so just return vecDir from c1-c2\n    return s12p;\n}\n\n\n// Returns the Euclidean distance between points a and b.\n//\ndouble euclideanDist(const Point& a, const Point& b)\n{\n    double xdiff = a.x - b.x;\n    double ydiff = a.y - b.y;\n\n    return sqrt((xdiff * xdiff) + (ydiff * ydiff));\n}\n\n// Returns the Manhattan distance between points a and b.\n//\ndouble manhattanDist(const Point& a, const Point& b)\n{\n    return fabs(a.x - b.x) + fabs(a.y - b.y);\n}\n\n\n// Returns the Euclidean distance between points a and b.\n//\ndouble dist(const Point& a, const Point& b)\n{\n    double xdiff = a.x - b.x;\n    double ydiff = a.y - b.y;\n\n    return sqrt((xdiff * xdiff) + (ydiff * ydiff));\n}\n\n// Returns the total length of all line segments in the polygon\ndouble totalLength(const Polygon& poly)\n{\n    double l = 0;\n    for (size_t i = 1; i < poly.size(); ++i) \n    {\n        l += dist(poly.ps[i-1], poly.ps[i]);\n    }\n    return l;\n}\n\n// Uses the dot-product rule to find the angle (radians) between ab and bc\ndouble angle(const Point& a, const Point& b, const Point& c)\n{\n    double ux = b.x - a.x,\n           uy = b.y - a.y,\n           vx = c.x - b.x,\n           vy = c.y - b.y,\n           lu = sqrt(ux*ux+uy*uy),\n           lv = sqrt(vx*vx+vy*vy),\n           udotv = ux * vx + uy * vy,\n           costheta = udotv / (lu * lv);\n    return acos(costheta);\n}\n\n// Returns true iff the point q is inside (or on the edge of) the\n// polygon argpoly.\n//\n// This is a fast version that only works for convex shapes.  The\n// other version (inPolyGen) is more general.\n//\nbool inPoly(const Polygon& poly, const Point& q, bool countBorder)\n{\n    size_t n = poly.size();\n    const std::vector<Point>& P = poly.ps;\n    bool onBorder = false;\n    for (size_t i = 0; i < n; i++)\n    {\n        // point index; i1 = i-1 mod n\n        size_t prev = (i + n - 1) % n;\n        int dir = vecDir(P[prev], P[i], q);\n        if (dir == -1)\n        {\n            // Point is outside\n            return false;\n        }\n        // Record if point was on a boundary.\n        onBorder |= (dir == 0);\n    }\n    if (!countBorder && onBorder)\n    {\n        return false;\n    }\n    return true;\n}\n\n\n// Returns true iff the point q is inside (or on the edge of) the\n// polygon argpoly.\n//\n// Based on the code of 'InPoly'.\n//\nbool inPolyGen(const PolygonInterface& argpoly, const Point& q)\n{\n    // Numbers of right and left edge/ray crossings.\n    int Rcross = 0;\n    int Lcross = 0;\n\n    // Copy the argument polygon\n    Polygon poly = argpoly;\n    std::vector<Point>& P = poly.ps;\n    size_t    n = poly.size();\n\n    // Shift so that q is the origin. This is done for pedagogical clarity.\n    for (size_t i = 0; i < n; ++i)\n    {\n        P[i].x = P[i].x - q.x;\n        P[i].y = P[i].y - q.y;\n    }\n\n    // For each edge e=(i-1,i), see if crosses ray.\n    for (size_t i = 0; i < n; ++i)\n    {\n        // First see if q=(0,0) is a vertex.\n        if ((P[i].x == 0) && (P[i].y == 0))\n        {\n            // We count a vertex as inside.\n            return true;\n        }\n\n        // point index; i1 = i-1 mod n\n        size_t i1 = ( i + n - 1 ) % n;\n\n        // if e \"straddles\" the x-axis...\n        // The commented-out statement is logically equivalent to the one\n        // following.\n        // if( ((P[i].y > 0) && (P[i1].y <= 0)) ||\n        //         ((P[i1].y > 0) && (P[i].y <= 0)) )\n\n        if ((P[i].y > 0) != (P[i1].y > 0))\n        {\n            // e straddles ray, so compute intersection with ray.\n            double x = (P[i].x * P[i1].y - P[i1].x * P[i].y)\n                    / (P[i1].y - P[i].y);\n\n            // crosses ray if strictly positive intersection.\n            if (x > 0)\n            {\n                Rcross++;\n            }\n        }\n\n        // if e straddles the x-axis when reversed...\n        // if( ((P[i].y < 0) && (P[i1].y >= 0)) ||\n        //         ((P[i1].y < 0) && (P[i].y >= 0)) )\n\n        if ((P[i].y < 0) != (P[i1].y < 0))\n        {\n            // e straddles ray, so compute intersection with ray.\n            double x = (P[i].x * P[i1].y - P[i1].x * P[i].y)\n                    / (P[i1].y - P[i].y);\n\n            // crosses ray if strictly positive intersection.\n            if (x < 0)\n            {\n                Lcross++;\n            }\n        }\n    }\n\n    // q on the edge if left and right cross are not the same parity.\n    if ( (Rcross % 2) != (Lcross % 2) )\n    {\n        // We count the edge as inside.\n        return true;\n    }\n\n    // Inside iff an odd number of crossings.\n    if ((Rcross % 2) == 1)\n    {\n        return true;\n    }\n\n    // Outside.\n    return false;\n}\n\n\n\n// Line Segment Intersection\n// Original code by Franklin Antonio \n// \n// The SAME_SIGNS macro assumes arithmetic where the exclusive-or\n// operation will work on sign bits.  This works for twos-complement,\n// and most other machine arithmetic.\n#define SAME_SIGNS( a, b ) \\\n        (((long) ((unsigned long) a ^ (unsigned long) b)) >= 0 )\n// \nint segmentIntersectPoint(const Point& a1, const Point& a2,\n        const Point& b1, const Point& b2, double *x, double *y) \n{\n    double Ax,Bx,Cx,Ay,By,Cy,d,e,f,num;\n    double x1lo,x1hi,y1lo,y1hi;\n\n    Ax = a2.x - a1.x;\n    Bx = b1.x - b2.x;\n\n    // X bound box test:\n    if (Ax < 0)\n    {\n        x1lo = a2.x;\n        x1hi = a1.x;\n    }\n    else\n    {\n        x1hi = a2.x;\n        x1lo = a1.x;\n    }\n    if (Bx > 0)\n    {\n        if (x1hi < b2.x || b1.x < x1lo) return DONT_INTERSECT;\n    }\n    else\n    {\n        if (x1hi < b1.x || b2.x < x1lo) return DONT_INTERSECT;\n    }\n\n    Ay = a2.y - a1.y;\n    By = b1.y - b2.y;\n\n    // Y bound box test:\n    if (Ay < 0)\n    {\n        y1lo = a2.y;\n        y1hi = a1.y;\n    }\n    else\n    {\n        y1hi = a2.y;\n        y1lo = a1.y;\n    }\n    if (By > 0)\n    {\n        if (y1hi < b2.y || b1.y < y1lo) return DONT_INTERSECT;\n    }\n    else\n    {\n        if (y1hi < b1.y || b2.y < y1lo) return DONT_INTERSECT;\n    }\n\n    Cx = a1.x - b1.x;\n    Cy = a1.y - b1.y;\n    // alpha numerator:\n    d = By*Cx - Bx*Cy;\n    // Both denominator:\n    f = Ay*Bx - Ax*By;\n    // alpha tests:\n    if (f > 0)\n    {\n        if (d < 0 || d > f) return DONT_INTERSECT;\n    }\n    else\n    {\n        if (d > 0 || d < f) return DONT_INTERSECT;\n    }\n\n    // beta numerator:\n    e = Ax*Cy - Ay*Cx;       \n    // beta tests:\n    if (f > 0)\n    {\n        if (e < 0 || e > f) return DONT_INTERSECT;\n    }\n    else\n    {\n        if (e > 0 || e < f) return DONT_INTERSECT;\n    }\n\n    // compute intersection coordinates:\n\n    if (f == 0) return PARALLEL;\n    \n    // Numerator:\n    num = d*Ax;\n    // Intersection X:\n    *x = a1.x + (num) / f;\n\n    num = d*Ay;\n    // Intersection Y:\n    *y = a1.y + (num) / f;\n\n    return DO_INTERSECT;\n}\n\n\n// Line Segment Intersection\n// Original code by Franklin Antonio \n//\nint rayIntersectPoint(const Point& a1, const Point& a2,\n        const Point& b1, const Point& b2, double *x, double *y) \n{\n    double Ax,Bx,Cx,Ay,By,Cy,d,f,num;\n\n    Ay = a2.y - a1.y;\n    By = b1.y - b2.y;\n    Ax = a2.x - a1.x;\n    Bx = b1.x - b2.x;\n\n    Cx = a1.x - b1.x;\n    Cy = a1.y - b1.y;\n    // alpha numerator:\n    d = By*Cx - Bx*Cy;\n    // Both denominator:\n    f = Ay*Bx - Ax*By;\n\n    // compute intersection coordinates:\n\n    if (f == 0) return PARALLEL;\n    \n    // Numerator:\n    num = d*Ax;\n    // Intersection X:\n    *x = a1.x + (num) / f;\n\n    num = d*Ay;\n    // Intersection Y:\n    *y = a1.y + (num) / f;\n\n    return DO_INTERSECT;\n}\n\n// Returns the rotationalAngle, between 0 and 360, of this point from (0,0).\n//\ndouble rotationalAngle(const Point& p)\n{\n    if (p.y == 0)\n    {\n        return ((p.x < 0) ? 180 : 0);\n    }\n    else if (p.x == 0)\n    {\n        return ((p.y < 0) ? 270 : 90);\n    }\n    \n    double ang = atan(p.y / p.x);\n    ang = (ang * 180) / M_PI;\n\n    if (p.x < 0)\n    {\n        ang += 180;\n    }\n    else if (p.y < 0)\n    {\n        ang += 360;\n    }\n    COLA_ASSERT(ang >= 0);\n    COLA_ASSERT(ang <= 360);\n\n    return ang;\n}\n\n\n}\n\n"
  },
  {
    "path": "cola/libavoid/geometry.h",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libavoid - Fast, Incremental, Object-avoiding Line Router\n *\n * Copyright (C) 2004-2011  Monash University\n *\n * --------------------------------------------------------------------\n * Much of the code in this module is based on code published with\n * and/or described in \"Computational Geometry in C\" (Second Edition),\n * Copyright (C) 1998  Joseph O'Rourke <orourke@cs.smith.edu>\n * --------------------------------------------------------------------\n * The segmentIntersectPoint function is based on code published and\n * described in Franklin Antonio, Faster Line Segment Intersection,\n * Graphics Gems III, p. 199-202, code: p. 500-501.\n * --------------------------------------------------------------------\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * Licensees holding a valid commercial license may use this file in\n * accordance with the commercial license agreement provided with the \n * library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  \n *\n * Author(s):   Michael Wybrow\n*/\n\n\n#ifndef AVOID_GEOMETRY_H\n#define AVOID_GEOMETRY_H\n\n#include \"libavoid/geomtypes.h\"\n#include \"libavoid/assertions.h\"\n\nnamespace Avoid {\n\n\nextern double euclideanDist(const Point& a, const Point& b);\nextern double manhattanDist(const Point& a, const Point& b);\nextern double totalLength(const Polygon& poly);\nextern double angle(const Point& a, const Point& b, const Point& c);\nextern bool segmentIntersect(const Point& a, const Point& b,\n        const Point& c, const Point& d);\nextern bool segmentShapeIntersect(const Point& e1, const Point& e2, \n        const Point& s1, const Point& s2, bool& seenIntersectionAtEndpoint);\nextern bool inPoly(const Polygon& poly, const Point& q, bool countBorder = true);\nextern bool inPolyGen(const PolygonInterface& poly, const Point& q);\nextern bool inValidRegion(bool IgnoreRegions, const Point& a0,\n        const Point& a1, const Point& a2, const Point& b);\nextern int cornerSide(const Point &c1, const Point &c2, const Point &c3,\n        const Point& p);\nextern bool pointOnLine(const Point& a, const Point& b, const Point& c,\n        const double tolerance = 0.0);\nextern bool colinear(const Point& a, const Point& b, const Point& c,\n        const double tolerance = 0.0);\n// To be used only when the points are known to be colinear.\nextern bool inBetween(const Point& a, const Point& b, const Point& c);\n\n\n// Direction from vector.\n// Looks at the position of point c from the directed segment ab and\n// returns the following:\n//      1   counterclockwise\n//      0   collinear\n//     -1   clockwise\n//\n// Based on the code of 'AreaSign'.\n//\n// The 'maybeZero' argument can be used to adjust the tolerance of the \n// function.  It will be most accurate when 'maybeZero' == 0.0, the default.\n//\nstatic inline int vecDir(const Point& a, const Point& b, const Point& c, \n        const double maybeZero = 0.0)\n{\n    COLA_ASSERT(maybeZero >= 0);\n\n    double area2 = ((b.x - a.x) * (c.y - a.y)) -\n                   ((c.x - a.x) * (b.y - a.y));\n    \n    if (area2 < (-maybeZero))\n    {\n        return -1;\n    }\n    else if (area2 > maybeZero)\n    {\n        return 1;\n    }\n    return 0;\n}\n\n// Finds the projection point of (a,b) onto (a,c)\nstatic inline Point projection(const Point& a, const Point& b, const Point& c)\n{\n    double ux = c.x - a.x,\n           uy = c.y - a.y,\n           vx = b.x - a.x,\n           vy = b.y - a.y,\n           scalarProj = ux * vx + uy * vy;\n    scalarProj       /= ux * ux + uy * uy;\n    Point p;\n    p.x = scalarProj * ux + a.x;\n    p.y = scalarProj * uy + a.y;\n    return p;\n}\n\n// Line Segment Intersection\n// Original code by Franklin Antonio \n// \nstatic const int DONT_INTERSECT = 0;\nstatic const int DO_INTERSECT = 1;\nstatic const int PARALLEL = 3;\nextern int segmentIntersectPoint(const Point& a1, const Point& a2,\n        const Point& b1, const Point& b2, double *x, double *y);\nextern int rayIntersectPoint(const Point& a1, const Point& a2,\n        const Point& b1, const Point& b2, double *x, double *y);\nextern double rotationalAngle(const Point& p);\n\n\n}\n\n\n#endif\n"
  },
  {
    "path": "cola/libavoid/geomtypes.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libavoid - Fast, Incremental, Object-avoiding Line Router\n *\n * Copyright (C) 2004-2014  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * Licensees holding a valid commercial license may use this file in\n * accordance with the commercial license agreement provided with the \n * library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  \n *\n * Author(s):  Michael Wybrow\n*/\n\n\n#include <cmath>\n#include <cfloat>\n#include <cstdlib>\n#include <algorithm>\n\n#include \"libavoid/geomtypes.h\"\n#include \"libavoid/shape.h\"\n#include \"libavoid/router.h\"\n#include \"libavoid/assertions.h\"\n\n\nnamespace Avoid\n{\n\n    \nPoint::Point() :\n    id(0),\n    vn(kUnassignedVertexNumber)\n{\n}\n\n\nPoint::Point(const double xv, const double yv) :\n    x(xv),\n    y(yv),\n    id(0),\n    vn(kUnassignedVertexNumber)\n{\n}\n\n\nbool Point::operator==(const Point& rhs) const\n{\n    if ((x == rhs.x) && (y == rhs.y))\n    {\n        return true;\n    }\n    return false;\n}\n\n\nbool Point::operator!=(const Point& rhs) const\n{\n    if ((x != rhs.x) || (y != rhs.y))\n    {\n        return true;\n    }\n    return false;\n}\n\n\nbool Point::equals(const Point& rhs, double epsilon) const\n{\n    if ( (fabs(x - rhs.x) < epsilon) && (fabs(y - rhs.y) < epsilon) )\n    {\n        return true;\n    }\n    return false;\n}\n\n\n// Just defined to allow std::set<Point>.  Not particularly meaningful!\nbool Point::operator<(const Point& rhs) const\n{\n    if (x == rhs.x)\n    {\n        return (y < rhs.y);\n    }\n    return (x < rhs.x);\n}\n\n\ndouble& Point::operator[](const size_t dimension)\n{\n    COLA_ASSERT((dimension == 0) || (dimension == 1));\n    return ((dimension == 0) ? x : y);\n}\n\n\nconst double& Point::operator[](const size_t dimension) const\n{\n    COLA_ASSERT((dimension == 0) || (dimension == 1));\n    return ((dimension == 0) ? x : y);\n}\n\nPoint Point::operator+(const Point& rhs) const\n{\n    return Point(x + rhs.x, y + rhs.y);\n}\n\n\nPoint Point::operator-(const Point& rhs) const\n{\n    return Point(x - rhs.x, y - rhs.y);\n}\n\n\nReferencingPolygon::ReferencingPolygon(const Polygon& poly, const Router *router)\n    : PolygonInterface(),\n      _id(poly._id),\n      psRef(poly.size()),\n      psPoints(poly.size())\n{\n    COLA_ASSERT(router != nullptr);\n    for (size_t i = 0; i < poly.size(); ++i)\n    {\n        if (poly.ps[i].id == 0)\n        {\n            // Can't be referenced, so just make a copy of the point.\n            psRef[i] = std::make_pair((Polygon *) nullptr, \n                    kUnassignedVertexNumber);\n            psPoints[i] = poly.ps[i];\n        }\n        else\n        {\n            const Polygon *polyPtr = nullptr;\n            for (ObstacleList::const_iterator sh = router->m_obstacles.begin();\n                    sh != router->m_obstacles.end(); ++sh) \n            {\n                if ((*sh)->id() == poly.ps[i].id)\n                {\n                    const Polygon& poly = (*sh)->polygon();\n                    polyPtr = &poly;\n                    break;\n                }\n            }\n            COLA_ASSERT(polyPtr != nullptr);\n            psRef[i] = std::make_pair(polyPtr, poly.ps[i].vn);\n        }\n    }\n}\n\n\nReferencingPolygon::ReferencingPolygon()\n    : PolygonInterface()\n{\n    clear();\n}\n\n\nvoid ReferencingPolygon::clear(void)\n{\n    psRef.clear();\n    psPoints.clear();\n}\n\n\nbool ReferencingPolygon::empty(void) const\n{\n    return psRef.empty();\n}\n\n\nsize_t ReferencingPolygon::size(void) const\n{\n    return psRef.size();\n}\n\n\nint ReferencingPolygon::id(void) const\n{\n    return _id;\n}\n\n\nconst Point& ReferencingPolygon::at(size_t index) const \n{\n    COLA_ASSERT(index < size());\n    \n    if (psRef[index].first != nullptr)\n    {\n        const Polygon& poly = *(psRef[index].first);\n        unsigned short poly_index = psRef[index].second;\n        COLA_ASSERT(poly_index < poly.size());\n\n        return poly.ps[poly_index];\n    }\n    else\n    {\n        return psPoints[index];\n    }\n}\n\n\nBox PolygonInterface::offsetBoundingBox(double offset) const\n{\n    Box bBox;\n    bBox.min.x = DBL_MAX;\n    bBox.min.y = DBL_MAX;\n    bBox.max.x = -DBL_MAX;\n    bBox.max.y = -DBL_MAX;\n\n    for (size_t i = 0; i < size(); ++i)\n    {\n        bBox.min.x = std::min(bBox.min.x, at(i).x);\n        bBox.min.y = std::min(bBox.min.y, at(i).y);\n        bBox.max.x = std::max(bBox.max.x, at(i).x);\n        bBox.max.y = std::max(bBox.max.y, at(i).y);\n    }\n\n    // Add buffer space.\n    bBox.min.x -= offset;\n    bBox.min.y -= offset;\n    bBox.max.x += offset;\n    bBox.max.y += offset;\n\n    return bBox;\n}\n\ndouble Box::length(size_t dimension) const\n{\n    if (dimension == 0)\n    {\n        return (max.x - min.x);\n    }\n    return (max.y - min.y);\n}\n\ndouble Box::width(void) const\n{\n    return (max.x - min.x);\n}\n\ndouble Box::height(void) const\n{\n    return (max.y - min.y);\n}\n\nPolygon::Polygon()\n    : PolygonInterface(),\n      _id(0)\n{\n    clear();\n}\n\n\nPolygon::Polygon(const int pn)\n    : PolygonInterface(),\n      _id(0),\n      ps(pn)\n{\n}\n\n\nPolygon::Polygon(const PolygonInterface& poly)\n    : PolygonInterface(),\n      _id(poly.id()),\n      ps(poly.size())\n{\n    for (size_t i = 0; i < poly.size(); ++i)\n    {\n        ps[i] = poly.at(i);\n    }\n}\n\n\nPolygon PolygonInterface::boundingRectPolygon(void) const\n{\n    Box boundingBox = offsetBoundingBox(0.0);\n    \n    return Rectangle(boundingBox.min, boundingBox.max);\n}\n\nstatic Point unitNormalForEdge(const Point &pt1, const Point &pt2)\n{\n    if (pt2 == pt1)\n    {\n        return Point(0, 0);\n    }\n    double dx = pt2.x - pt1.x;\n    double dy = pt2.y - pt1.y;\n    double f = 1.0 / std::sqrt((dx * dx) + (dy * dy));\n    dx *= f;\n    dy *= f;\n    return Point(dy, -dx);\n}\n\nPolygon PolygonInterface::offsetPolygon(double offset) const\n{\n    Polygon newPoly;\n    newPoly._id = id();\n    if (offset == 0)\n    {\n        for (size_t i = 0; i < size(); ++i)\n        {\n            newPoly.ps.push_back(at(i));\n        }\n        return newPoly;\n    }\n\n    size_t numOfEdges = size();\n    std::vector<Vector> normals(numOfEdges);\n    for (size_t i = 0; i < numOfEdges; ++i)\n    {\n        normals[i] = unitNormalForEdge(at(i), at((i + 1) % numOfEdges));\n    }\n\n    size_t j = numOfEdges - 1;\n    for (size_t i = 0; i < numOfEdges; ++i)\n    {\n        double R = 1 + ((normals[i].x * normals[j].x) + \n                (normals[i].y * normals[j].y));\n        if (((normals[j].x * normals[i].y) - (normals[i].x * normals[j].y)) *\n                offset >= 0)\n        {\n            double q = offset / R;\n            Point pt = Point(at(i).x + (normals[j].x + normals[i].x) * q,\n                    at(i).y + (normals[j].y + normals[i].y) * q);\n\n            pt.id = id();\n            pt.vn = newPoly.size();\n            newPoly.ps.push_back(pt);\n        }\n        else\n        {\n            Point pt1 = Point(at(i).x + normals[j].x * offset, \n                    at(i).y + normals[j].y * offset);\n            Point pt2 = at(i);\n            Point pt3 = Point(at(i).x + normals[i].x * offset,\n                    at(i).y + normals[i].y * offset);\n\n            pt1.id = id();\n            pt1.vn = newPoly.size();\n            newPoly.ps.push_back(pt1);\n\n            pt2.id = id();\n            pt2.vn = newPoly.size();\n            newPoly.ps.push_back(pt2);\n\n            pt3.id = id();\n            pt3.vn = newPoly.size();\n            newPoly.ps.push_back(pt3);\n        }\n        j = i;\n    }\n\n    return newPoly;\n}\n\nvoid Polygon::clear(void)\n{\n    ps.clear();\n    ts.clear();\n}\n\n\nbool Polygon::empty(void) const\n{\n    return ps.empty();\n}\n\n\nsize_t Polygon::size(void) const\n{\n    return ps.size();\n}\n\n\nint Polygon::id(void) const\n{\n    return _id;\n}\n\n\nconst Point& Polygon::at(size_t index) const\n{\n    COLA_ASSERT(index < size());\n\n    return ps[index];\n}\n\nvoid Polygon::setPoint(size_t index, const Point& point)\n{\n    COLA_ASSERT(index < size());\n\n    ps[index] = point;\n}\n\n\nstatic const unsigned int SHORTEN_NONE  = 0;\nstatic const unsigned int SHORTEN_START = 1;\nstatic const unsigned int SHORTEN_END   = 2;\nstatic const unsigned int SHORTEN_BOTH  = SHORTEN_START | SHORTEN_END;\n\n// shorten_line():\n//     Given the two endpoints of a line segment, this function adjusts the\n//     endpoints of the line to shorten the line by shorten_length at either\n//     or both ends.\n//\nstatic void shorten_line(double& x1, double& y1, double& x2, double& y2, \n        const unsigned int mode, const double shorten_length)\n{\n    if (mode == SHORTEN_NONE)\n    {\n        return;\n    }\n    \n    double rise = y1 - y2;\n    double run = x1 - x2;\n    double disty = fabs(rise);\n    double distx = fabs(run);\n\n    // Handle case where shorten length is greater than the length of the\n    // line segment.\n    if ((mode == SHORTEN_BOTH) &&\n            (((distx > disty) && ((shorten_length * 2) > distx)) ||\n             ((disty >= distx) && ((shorten_length * 2) > disty))))\n    {\n        x1 = x2 = x1 - (run / 2); \n        y1 = y2 = y1 - (rise / 2); \n        return;\n    }\n    else if ((mode == SHORTEN_START) && \n            (((distx > disty) && (shorten_length > distx)) ||\n             ((disty >= distx) && (shorten_length > disty))))\n    {\n        x1 = x2;\n        y1 = y2;\n        return;\n    }\n    else if ((mode == SHORTEN_END) && \n            (((distx > disty) && (shorten_length > distx)) ||\n             ((disty >= distx) && (shorten_length > disty))))\n    {\n        x2 = x1;\n        y2 = y1;\n        return;\n    }\n\n    // Handle orthogonal line segments.\n    if (x1 == x2)\n    {\n        // Vertical\n        int sign = (y1 < y2) ? 1: -1;\n        \n        if (mode & SHORTEN_START)\n        {\n            y1 += (sign * shorten_length);\n        }\n        if (mode & SHORTEN_END)\n        {\n            y2 -= (sign * shorten_length);\n        }\n        return;\n    }\n    else if (y1 == y2)\n    {\n        // Horizontal\n        int sign = (x1 < x2) ? 1: -1;\n        \n        if (mode & SHORTEN_START)\n        {\n            x1 += (sign * shorten_length);\n        }\n        if (mode & SHORTEN_END)\n        {\n            x2 -= (sign * shorten_length);\n        }\n        return;\n    }\n    \n    int xpos = (x1 < x2) ? -1 : 1;\n    int ypos = (y1 < y2) ? -1 : 1;\n    \n    double tangent = rise / run;\n   \n    if (mode & SHORTEN_END)\n    {\n        if (disty > distx)\n        {\n            y2 += shorten_length * ypos;\n            x2 += shorten_length * ypos * (1 / tangent);\n        }\n        else if (disty < distx)\n        {\n            y2 += shorten_length * xpos * tangent;\n            x2 += shorten_length * xpos;\n        }\n    }\n\n    if (mode & SHORTEN_START)\n    {\n        if (disty > distx)\n        {\n            y1 -= shorten_length * ypos;\n            x1 -= shorten_length * ypos * (1 / tangent);\n        }\n        else if (disty < distx)\n        {\n            y1 -= shorten_length * xpos * tangent;\n            x1 -= shorten_length * xpos;\n        }\n    }\n}\n\n\nvoid Polygon::translate(const double xDist, const double yDist)\n{\n    for (size_t i = 0; i < size(); ++i)\n    {\n        ps[i].x += xDist;\n        ps[i].y += yDist;\n    }\n}\n\n\nPolygon Polygon::simplify(void) const\n{\n    // Copy the PolyLine.\n    Polygon simplified = *this;\n    \n    std::vector<std::pair<size_t, Point> >& checkpoints = \n            simplified.checkpointsOnRoute;\n    bool hasCheckpointInfo = !(checkpoints.empty());\n\n    std::vector<Point>::iterator it = simplified.ps.begin();\n    if (it != simplified.ps.end()) ++it;\n\n    // Combine collinear line segments into single segments:\n    for (size_t j = 2; j < simplified.size(); )\n    {\n        if (vecDir(simplified.ps[j - 2], simplified.ps[j - 1], \n                simplified.ps[j]) == 0)\n        {\n            // These three points make up two collinear segments, so just\n            // combine them into a single segment.\n            it = simplified.ps.erase(it);\n\n            if (hasCheckpointInfo)\n            {\n                // 0     1     2     3     4   <- vertices on path\n                // +-----+-----+-----+-----+\n                // 0  1  2  3  4  5  6  7  8   <- checkpoints on points & edges\n                //             |\n                //             \\_ deletedPointValue = 4\n                //\n                // If 1-2-3 is collinear then we want to end up with\n                //\n                // 0     1           2     3\n                // +-----+-----------+-----+\n                // 0  1  2  3  3  3  4  5  6\n                //\n                //\n                //\n                size_t deletedPointValue = (j - 1) - 1;\n                for (size_t i = 0; i < checkpoints.size(); ++i)\n                {\n                    if (checkpoints[i].first == deletedPointValue)\n                    {\n                        checkpoints[i].first -= 1;\n                    }\n                    else if (checkpoints[i].first > deletedPointValue)\n                    {\n                        checkpoints[i].first -= 2;\n                    }\n                }\n            }\n        }\n        else\n        {\n            ++j;\n            ++it;\n        }\n    }\n\n    return simplified;\n}\n\nstd::vector<Point> Polygon::checkpointsOnSegment(size_t segmentLowerIndex,\n        int indexModifier) const\n{\n    std::vector<Point> checkpoints;\n    // 0     1     2     3     4   <- vertices on path\n    // +-----+-----+-----+-----+\n    // 0  1  2  3  4  5  6  7  8   <- checkpoints on points & edges\n \n    size_t checkpointLowerValue = 2 * segmentLowerIndex;\n    size_t checkpointUpperValue = checkpointLowerValue + 2;\n    size_t index = 0;\n\n    if (indexModifier > 0)\n    {\n        checkpointLowerValue++;\n    }\n    else if (indexModifier < 0)\n    {\n        checkpointUpperValue--;\n    }\n\n    while (index < checkpointsOnRoute.size())\n    {\n        if ((checkpointsOnRoute[index].first >= checkpointLowerValue) &&\n                (checkpointsOnRoute[index].first <= checkpointUpperValue))\n        {\n            checkpoints.push_back(checkpointsOnRoute[index].second);\n        }\n        ++index;\n    }\n    return checkpoints;\n}\n\n\n#define mid(a, b) ((a < b) ? a + ((b - a) / 2) : b + ((a - b) / 2))\n\n\n// curvedPolyline():\n//     Returns a curved approximation of this multi-segment PolyLine, with \n//     the corners replaced by smooth Bezier curves.  curve_amount describes\n//     how large to make the curves.\n//     The ts value for each point in the returned Polygon describes the \n//     drawing operation: 'M' (move) marks the first point, a line segment \n//     is marked with an 'L' and three 'C's (along with the previous point) \n//     describe the control points of a Bezier curve.\n//\nPolygon Polygon::curvedPolyline(const double curve_amount,\n        const bool closed) const\n{\n    Polygon simplified = this->simplify();\n\n    Polygon curved;\n    size_t num_of_points = size();\n    if (num_of_points <= 2)\n    {\n        // There is only a single segment, do nothing.\n        curved = *this;\n        curved.ts.push_back('M');\n        curved.ts.push_back('L');\n        return curved;\n    }\n\n    // Build the curved polyline:\n    curved._id = _id;\n    double last_x = 0;\n    double last_y = 0;\n    if (closed)\n    {\n        double x1 = simplified.ps[0].x;\n        double y1 = simplified.ps[0].y;\n        double x2 = simplified.ps[1].x;\n        double y2 = simplified.ps[1].y;\n        shorten_line(x1, y1, x2, y2, SHORTEN_START, curve_amount);\n        curved.ps.push_back(Point(x1, y1));\n        curved.ts.push_back('M');\n    }\n    else\n    {\n        curved.ps.push_back(ps[0]);\n        curved.ts.push_back('M');\n    }\n   \n    size_t simpSize = simplified.size();\n    size_t finish = (closed) ? simpSize + 2 : simpSize;\n    for (size_t j = 1; j < finish; ++j)\n    {\n        double x1 = simplified.ps[(simpSize + j - 1) % simpSize].x;\n        double y1 = simplified.ps[(simpSize + j - 1) % simpSize].y;\n        double x2 = simplified.ps[j % simpSize].x;\n        double y2 = simplified.ps[j % simpSize].y;\n\n        double old_x = x1;\n        double old_y = y1;\n        \n        unsigned int mode = SHORTEN_BOTH;\n        if (!closed)\n        {\n            if (j == 1)\n            {\n                mode = SHORTEN_END;\n            }\n            else if (j == (size() - 1))\n            {\n                mode = SHORTEN_START;\n            }\n        }\n        shorten_line(x1, y1, x2, y2, mode, curve_amount);\n\n        if (j > 1)\n        {\n            curved.ts.insert(curved.ts.end(), 3, 'C');\n            curved.ps.push_back(Point(mid(last_x, old_x), mid(last_y, old_y)));\n            curved.ps.push_back(Point(mid(x1, old_x), mid(y1, old_y)));\n            curved.ps.push_back(Point(x1, y1));\n        }\n        if (closed && (j == (finish - 1)))\n        {\n            // Close the path.\n            curved.ts.push_back('Z');\n            curved.ps.push_back(Point(x1, y1));\n            break;\n        }\n        curved.ts.push_back('L');\n        curved.ps.push_back(Point(x2, y2));\n            \n        last_x = x2;\n        last_y = y2;\n    }\n    \n    return curved;\n}\n\n\nRectangle::Rectangle(const Point& topLeft, const Point& bottomRight)\n    : Polygon(4)\n{\n    double xMin = std::min(topLeft.x, bottomRight.x);\n    double xMax = std::max(topLeft.x, bottomRight.x);\n    double yMin = std::min(topLeft.y, bottomRight.y);\n    double yMax = std::max(topLeft.y, bottomRight.y);\n\n    ps[0] = Point(xMax, yMin);\n    ps[1] = Point(xMax, yMax);\n    ps[2] = Point(xMin, yMax);\n    ps[3] = Point(xMin, yMin);\n}\n\n\nRectangle::Rectangle(const Point& centre, const double width, \n        const double height)\n    : Polygon(4)\n{\n    double halfWidth  = width / 2.0;\n    double halfHeight = height / 2.0;\n    double xMin = centre.x - halfWidth;\n    double xMax = centre.x + halfWidth;\n    double yMin = centre.y - halfHeight;\n    double yMax = centre.y + halfHeight;\n\n    ps[0] = Point(xMax, yMin);\n    ps[1] = Point(xMax, yMax);\n    ps[2] = Point(xMin, yMax);\n    ps[3] = Point(xMin, yMin);\n}\n\n\n}\n\n"
  },
  {
    "path": "cola/libavoid/geomtypes.h",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libavoid - Fast, Incremental, Object-avoiding Line Router\n *\n * Copyright (C) 2004-2014  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * Licensees holding a valid commercial license may use this file in\n * accordance with the commercial license agreement provided with the \n * library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  \n *\n * Author(s):   Michael Wybrow\n*/\n\n//! @file  geomtypes.h\n//! @brief Contains the interface for various geometry types and classes.\n\n\n#ifndef AVOID_GEOMTYPES_H\n#define AVOID_GEOMTYPES_H\n\n#include <cstdlib>\n#include <vector>\n#include <utility>\n\n#include \"libavoid/dllexport.h\"\n\n\nnamespace Avoid\n{\n\nstatic const size_t XDIM = 0;\nstatic const size_t YDIM = 1;\n\nclass Polygon;\n\n//! @brief  The Point class defines a point in the plane.\n//!\n//! Points consist of an x and y value.  They may also have an ID and vertex\n//! number associated with them.\n//!\nclass AVOID_EXPORT Point\n{\n    public:\n        //! @brief  Default constructor.\n        //!\n        Point();\n        //! @brief  Standard constructor.\n        //!\n        //! @param[in]  xv  The x position of the point.\n        //! @param[in]  yv  The y position of the point.\n        //!\n        Point(const double xv, const double yv);\n\n        //! @brief  Comparison operator. Returns true if at same position.\n        //!\n        //! @param[in]  rhs  The point to compare with this one.\n        //! @return          The result of the comparison.\n        //! @sa         equals()\n        bool operator==(const Point& rhs) const;\n        //! @brief  Comparison operator. Returns true if at same position,\n        //!         or at effectively the same position for a given value of\n        //!         epsilson.\n        //!\n        //! @param[in]  rhs      The point to compare with this one.\n        //! @param[in]  epsilon  Value of epsilon to use during comparison.\n        //! @return              The result of the comparison.\n        //! @sa         operator==()\n        bool equals(const Point& rhs, double epsilon = 0.0001) const;\n        //! @brief  Comparison operator. Returns true if at different positions.\n        //!\n        //! @param[in]  rhs  The point to compare with this one.\n        //! @return          The result of the comparison.\n        //!\n        bool operator!=(const Point& rhs) const;\n        //! @brief  Comparison operator. Returns true if less-then rhs point.\n        //!\n        //! @note  This operator is not particularly useful, but is defined \n        //!        to allow std::set<Point>.\n        //!\n        //! @param[in]  rhs  The point to compare with this one.\n        //! @return          The result of the comparison.\n        //!\n        bool operator<(const Point& rhs) const;\n\n        //! @brief  Returns the x or y value of the point, given the dimension.\n        //!\n        //! @param[in]  dimension  The dimension:  0 for x, 1 for y.\n        //! @return                The component of the point in that dimension.\n        double& operator[](const size_t dimension);\n        const double& operator[](const size_t dimension) const;\n\n        Point operator+(const Point& rhs) const;\n        Point operator-(const Point& rhs) const;\n\n        //! The x position.\n        double x;\n        //! The y position.\n        double y;\n        //! The ID associated with this point.\n        unsigned int id;\n        //! The vertex number associated with this point.\n        unsigned short vn;\n\n};\n\n\n//! Constant value representing an unassigned vertex number.\n//!\nstatic const unsigned short kUnassignedVertexNumber = 8;\n\n//! Constant value representing a ShapeConnectionPin.\nstatic const unsigned short kShapeConnectionPin = 9;\n\n\n//! @brief  A vector, represented by the Point class.\n//!\ntypedef Point Vector;\n\n//! @brief  A bounding box, represented by the top-left and\n//!         bottom-right corners.\n//!\nclass AVOID_EXPORT Box\n{\n    public:\n        //! The top-left point.\n        Point min;\n        //! The bottom-right point.\n        Point max;\n\n        double length(size_t dimension) const;\n        double width(void) const;\n        double height(void) const;\n};\n\n\n\n//! @brief  A common interface used by the Polygon classes.\n//!\nclass AVOID_EXPORT PolygonInterface\n{\n    public:\n        //! @brief  Constructor.\n        PolygonInterface() { }\n        //! @brief  Destructor.\n        virtual ~PolygonInterface() { }\n        //! @brief  Resets this to the empty polygon.\n        virtual void clear(void) = 0;\n        //! @brief  Returns true if this polygon is empty.\n        virtual bool empty(void) const = 0;\n        //! @brief  Returns the number of points in this polygon.\n        virtual size_t size(void) const = 0;\n        //! @brief  Returns the ID value associated with this polygon.\n        virtual int id(void) const = 0;\n        //! @brief  Returns a specific point in the polygon.\n        //! @param[in]  index  The array index of the point to be returned.\n        virtual const Point& at(size_t index) const = 0;\n        //! @brief  Returns the bounding rectangle for this polygon.\n        //!\n        //! @return A new Rectangle representing the bounding box.\n        Polygon boundingRectPolygon(void) const;\n        //! @brief  Returns the bounding rectangle that contains this polygon\n        //!         with optionally some buffer space around it for routing.\n        //!\n        //! If a buffer distance of zero is given, then this method returns\n        //! the bounding rectangle for the shape's polygon.\n        //!\n        //! @param     offset  Extra distance to pad each side of the rect.\n        //! @return    The bounding box for the polygon.\n        Box offsetBoundingBox(double offset) const;\n\n        Polygon offsetPolygon(double offset) const;\n};\n\n\n//! @brief  A line between two points. \n//!\nclass AVOID_EXPORT Edge\n{\n    public:\n        //! The first point.\n        Point a;\n        //! The second point.\n        Point b;\n};\n\n\nclass Router;\nclass ReferencingPolygon;\n\n\n//! @brief  A dynamic Polygon, to which points can be easily added and removed.\n//!\n//! @note The Rectangle class can be used as an easy way of constructing a\n//!       square or rectangular polygon.\n//!\nclass AVOID_EXPORT Polygon : public PolygonInterface\n{\n    public:\n        //! @brief  Constructs an empty polygon (with zero points). \n        Polygon();\n        //! @brief  Constructs a new polygon with n points.\n        //! \n        //! A rectangle would be comprised of four point.  An n segment \n        //! PolyLine (represented as a Polygon) would be comprised of n+1\n        //! points.  Whether a particular Polygon is closed or not, depends\n        //! on whether it is a Polygon or Polyline.  Shape polygons are always\n        //! considered to be closed, meaning the last point joins back to the\n        //! first point.\n        //!\n        //! The values for points can be set by setting the Polygon:ps vector,\n        //! or via the Polygon::setPoint() method.\n        //!\n        //! @param[in]  n  Number of points in the polygon.\n        //!\n        Polygon(const int n);\n        //! @brief  Constructs a new polygon from an existing Polygon.\n        //!\n        //! @param[in]  poly  An existing polygon to copy the new polygon from.\n        //!\n        Polygon(const PolygonInterface& poly);\n        //! @brief  Resets this to the empty polygon.\n        void clear(void);\n        //! @brief  Returns true if this polygon is empty.\n        bool empty(void) const;\n        //! @brief  Returns the number of points in this polygon.\n        size_t size(void) const;\n        //! @brief  Returns the ID value associated with this polygon.\n        int id(void) const;\n        //! @brief  Returns a specific point in the polygon.\n        //! @param[in]  index  The array index of the point to be returned.\n        const Point& at(size_t index) const;\n        //! @brief  Sets a position for a particular point in the polygon..\n        //! @param[in]  index  The array index of the point to be set.\n        //! @param[in]  point  The point value to be assigned..\n        void setPoint(size_t index, const Point& point);\n        //! @brief  Returns a simplified Polyline, where all collinear line\n        //!         segments have been collapsed down into single line \n        //!         segments.\n        //!\n        //! @return A new polyline with a simplified representation.\n        //!\n        Polygon simplify(void) const;\n        //! @brief  Returns a curved approximation of this multi-segment \n        //!         PolyLine, with the corners replaced by smooth Bezier \n        //!         curves.\n        //!\n        //! This function does not do any further obstacle avoidance with the\n        //! curves produced.  Hence, you would usually specify a curve_amount\n        //! in similar size to the space buffer around obstacles in the scene.\n        //! This way the curves will cut the corners around shapes but still\n        //! run within this buffer space.\n        //!\n        //! @param  curve_amount  Describes the distance along the end of each \n        //!                       line segment to turn into a curve.\n        //! @param  closed        Describes whether the Polygon should be \n        //!                       treated as closed.  Defaults to false.\n        //! @return A new polyline (polygon) representing the curved path.\n        //!         Its points represent endpoints of line segments and \n        //!         Bezier spline control points.  The Polygon::ts vector for\n        //!         this returned polygon is populated with a character for \n        //!         each point describing its type.\n        //! @sa     ts\n        Polygon curvedPolyline(const double curve_amount, \n                const bool closed = false) const;\n        //! @brief  Translates the polygon position by a relative amount.\n        //!\n        //! @param[in]  xDist  Distance to move polygon in the x dimension.\n        //! @param[in]  yDist  Distance to move polygon in the y dimension.\n        void translate(const double xDist, const double yDist);\n\n        //! @brief  An ID for the polygon.\n        int _id;\n        //! @brief  A vector of the points that make up the Polygon.\n        std::vector<Point> ps;\n        //! @brief  If used, denotes whether the corresponding point in ps is \n        //!         a move-to operation or a Bezier curve-to.\n        //! \n        //! Each character describes the drawing operation for the \n        //! corresponding point in the ps vector.  Possible values are:\n        //!  -  'M': A moveto operation, marks the first point;\n        //!  -  'L': A lineto operation, is a line from the previous point to\n        //!     the current point; or\n        //!  -  'C': A curveto operation, three consecutive 'C' points \n        //!     (along with the previous point) describe the control points \n        //!     of a Bezier curve.\n        //!  -  'Z': Closes the path (used for cluster boundaries).\n        //!\n        //! @note   This vector will currently only be populated for polygons \n        //!         returned by curvedPolyline().  \n        std::vector<char> ts;\n\n        // @brief  If used, denotes checkpoints through which the route travels\n        //         and the relevant segment of the route.\n        //\n        // Set and used by the orthogonal routing code. Note the first value\n        // in the pair doesn't correspond to the segment index containing the \n        // checkpoint, but rather the segment or bendpoint on which it lies.\n        //    0 if on ps[0]\n        //    1 if on line ps[0]-ps[1]\n        //    2 if on ps[1]\n        //    3 if on line ps[1]-ps[2]\n        //    etc.\n        std::vector<std::pair<size_t, Point> > checkpointsOnRoute;\n\n        // Returns true if at least one checkpoint lies on the line segment\n        // or at either end of it.  An indexModifier of +1 will cause it to\n        // ignore a checkpoint on the corner at the start of the segment and\n        // -1 will cause it to do the same for the corner at the end of the\n        // segment.\n        std::vector<Point> checkpointsOnSegment(size_t segmentLowerIndex,\n                int indexModifier = 0) const;\n};\n\n\n//! @brief  A multi-segment line, represented with the Polygon class.\n//!\ntypedef Polygon PolyLine;\n\n\n//! @brief  A Polygon which just references its points from other Polygons.\n//!          \n//! This type of Polygon is used to accurately represent cluster boundaries \n//! made up from the corner points of shapes.\n//!\nclass AVOID_EXPORT ReferencingPolygon : public PolygonInterface\n{\n    public:\n        ReferencingPolygon();\n        ReferencingPolygon(const Polygon& poly, const Router *router);\n        void clear(void);\n        bool empty(void) const;\n        size_t size(void) const;\n        int id(void) const;\n        const Point& at(size_t index) const;\n\n        int _id;\n        std::vector<std::pair<const Polygon *, unsigned short> > psRef;\n        std::vector<Point> psPoints;\n};\n\n\n//! @brief  A Rectangle, a simpler way to define the polygon for square or\n//!         rectangular shapes.\n//!\nclass AVOID_EXPORT Rectangle : public Polygon\n{\n    public:\n        //! @brief  Constructs a rectangular polygon given two opposing \n        //!         corner points.\n        //!\n        //! @param[in]  topLeft      The first corner point of the rectangle.\n        //! @param[in]  bottomRight  The opposing corner point of the rectangle.\n        //!\n        Rectangle(const Point& topLeft, const Point& bottomRight);\n        \n        //! @brief  Constructs a rectangular polygon given the centre, width\n        //!         and height.\n        //!\n        //! @param[in]  centre  The centre of the rectangle, specified as \n        //!                     a point.\n        //! @param[in]  width   The width of the rectangle.\n        //! @param[in]  height  The height of the rectangle.\n        //!\n        Rectangle(const Point& centre, const double width, const double height);\n};\n\n\n}\n\n#endif\n"
  },
  {
    "path": "cola/libavoid/graph.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libavoid - Fast, Incremental, Object-avoiding Line Router\n *\n * Copyright (C) 2004-2011  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * Licensees holding a valid commercial license may use this file in\n * accordance with the commercial license agreement provided with the \n * library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  \n *\n * Author(s):  Michael Wybrow\n*/\n\n\n#include <cmath>\n\n#include \"libavoid/debug.h\"\n#include \"libavoid/graph.h\"\n#include \"libavoid/connector.h\"\n#include \"libavoid/geometry.h\"\n#include \"libavoid/timer.h\"\n#include \"libavoid/vertices.h\"\n#include \"libavoid/router.h\"\n#include \"libavoid/assertions.h\"\n\n\nusing std::pair;\n\nnamespace Avoid {\n\n\nEdgeInf::EdgeInf(VertInf *v1, VertInf *v2, const bool orthogonal)\n    : lstPrev(nullptr),\n      lstNext(nullptr),\n      m_router(nullptr),\n      m_blocker(0),\n      m_added(false),\n      m_visible(false),\n      m_orthogonal(orthogonal),\n      m_isHyperedgeSegment(false),\n      m_disabled(false),\n      m_vert1(v1),\n      m_vert2(v2),\n      m_dist(-1)\n{\n    // Not passed nullptr values.\n    COLA_ASSERT(v1 && v2);\n\n    // We are in the same instance\n    COLA_ASSERT(m_vert1->_router == m_vert2->_router);\n    m_router = m_vert1->_router;\n\n    m_conns.clear();\n}\n\n\nEdgeInf::~EdgeInf()\n{\n    if (m_added)\n    {\n        makeInactive();\n    }\n}\n\n\n// Gives an order value between 0 and 3 for the point c, given the last\n// segment was from a to b.  Returns the following value:\n//    0 : Point c is directly backwards from point b.\n//    1 : Point c is a left-hand 90 degree turn.\n//    2 : Point c is a right-hand 90 degree turn.\n//    3 : Point c is straight ahead (collinear).\n//    4 : Point c is not orthogonally positioned.\n//\nstatic inline int orthogTurnOrder(const Point& a, const Point& b, \n        const Point& c)\n{\n    if ( ((c.x != b.x) && (c.y != b.y)) || ((a.x != b.x) && (a.y != b.y)) )\n    {\n        // Not orthogonally positioned.\n        return 4;\n    }\n\n    int direction = vecDir(a, b, c);\n\n    if (direction > 0)\n    {\n        // Counterclockwise := left\n        return 1;\n    }\n    else if (direction < 0)\n    {\n        // Clockwise := right\n        return 2;\n    }\n\n    if (b.x == c.x)\n    {\n        if ( ((a.y < b.y) && (c.y < b.y)) || \n             ((a.y > b.y) && (c.y > b.y)) ) \n        {\n            // Behind.\n            return 0;\n        }\n    }\n    else\n    {\n        if ( ((a.x < b.x) && (c.x < b.x)) || \n             ((a.x > b.x) && (c.x > b.x)) ) \n        {\n            // Behind.\n            return 0;\n        }\n    }\n\n    // Ahead.\n    return 3;\n}\n\n\n// Returns a less than operation for a set exploration order for orthogonal\n// searching.  Forward, then left, then right.  Or if there is no previous \n// point, then the order is north, east, south, then west.\n// Note: This method assumes the two Edges that share a common point.\nbool EdgeInf::rotationLessThan(const VertInf *lastV, const EdgeInf *rhs) const\n{\n    if ((m_vert1 == rhs->m_vert1) && (m_vert2 == rhs->m_vert2))\n    {\n        // Effectively the same visibility edge, so they are equal.\n        return false;\n    }\n    VertInf *lhsV = nullptr, *rhsV = nullptr, *commonV = nullptr;\n    \n    // Determine common Point and the comparison point on the left- and\n    // the right-hand-side.\n    if (m_vert1 == rhs->m_vert1)\n    {\n        commonV = m_vert1;\n        lhsV = m_vert2;\n        rhsV = rhs->m_vert2;\n    }\n    else if (m_vert1 == rhs->m_vert2)\n    {\n        commonV = m_vert1;\n        lhsV = m_vert2;\n        rhsV = rhs->m_vert1;\n    }\n    else if (m_vert2 == rhs->m_vert1)\n    {\n        commonV = m_vert2;\n        lhsV = m_vert1;\n        rhsV = rhs->m_vert2;\n    }\n    else if (m_vert2 == rhs->m_vert2)\n    {\n        commonV = m_vert2;\n        lhsV = m_vert1;\n        rhsV = rhs->m_vert1;\n    }\n\n    const Point& lhsPt = lhsV->point;\n    const Point& rhsPt = rhsV->point;\n    const Point& commonPt = commonV->point;\n    \n    // If no lastPt, use one directly to the left;\n    Point lastPt = (lastV) ? lastV->point : Point(commonPt.x - 10,  commonPt.y);\n\n    int lhsVal = orthogTurnOrder(lastPt, commonPt, lhsPt);\n    int rhsVal = orthogTurnOrder(lastPt, commonPt, rhsPt);\n\n    return lhsVal < rhsVal;\n}\n\n\nvoid EdgeInf::makeActive(void)\n{\n    COLA_ASSERT(m_added == false);\n\n    if (m_orthogonal)\n    {\n        COLA_ASSERT(m_visible);\n        m_router->visOrthogGraph.addEdge(this);\n        m_pos1 = m_vert1->orthogVisList.insert(m_vert1->orthogVisList.begin(), this);\n        m_vert1->orthogVisListSize++;\n        m_pos2 = m_vert2->orthogVisList.insert(m_vert2->orthogVisList.begin(), this);\n        m_vert2->orthogVisListSize++;\n    }\n    else\n    {\n        if (m_visible)\n        {\n            m_router->visGraph.addEdge(this);\n            m_pos1 = m_vert1->visList.insert(m_vert1->visList.begin(), this);\n            m_vert1->visListSize++;\n            m_pos2 = m_vert2->visList.insert(m_vert2->visList.begin(), this);\n            m_vert2->visListSize++;\n        }\n        else // if (invisible)\n        {\n            m_router->invisGraph.addEdge(this);\n            m_pos1 = m_vert1->invisList.insert(m_vert1->invisList.begin(), this);\n            m_vert1->invisListSize++;\n            m_pos2 = m_vert2->invisList.insert(m_vert2->invisList.begin(), this);\n            m_vert2->invisListSize++;\n        }\n    }\n    m_added = true;\n}\n\n\nvoid EdgeInf::makeInactive(void)\n{\n    COLA_ASSERT(m_added == true);\n\n    if (m_orthogonal)\n    {\n        COLA_ASSERT(m_visible);\n        m_router->visOrthogGraph.removeEdge(this);\n        m_vert1->orthogVisList.erase(m_pos1);\n        m_vert1->orthogVisListSize--;\n        m_vert2->orthogVisList.erase(m_pos2);\n        m_vert2->orthogVisListSize--;\n    }\n    else\n    {\n        if (m_visible)\n        {\n            m_router->visGraph.removeEdge(this);\n            m_vert1->visList.erase(m_pos1);\n            m_vert1->visListSize--;\n            m_vert2->visList.erase(m_pos2);\n            m_vert2->visListSize--;\n        }\n        else // if (invisible)\n        {\n            m_router->invisGraph.removeEdge(this);\n            m_vert1->invisList.erase(m_pos1);\n            m_vert1->invisListSize--;\n            m_vert2->invisList.erase(m_pos2);\n            m_vert2->invisListSize--;\n        }\n    }\n    m_blocker = 0;\n    m_conns.clear();\n    m_added = false;\n}\n\n\nvoid EdgeInf::setDist(double dist)\n{\n    //COLA_ASSERT(dist != 0);\n\n    if (m_added && !m_visible)\n    {\n        makeInactive();\n        COLA_ASSERT(!m_added);\n    }\n    if (!m_added)\n    {\n        m_visible = true;\n        makeActive();\n    }\n    m_dist = dist;\n    m_blocker = 0;\n}\n\n\nvoid EdgeInf::setMtstDist(const double joinCost)\n{\n    m_mtst_dist = joinCost;\n}\n\ndouble EdgeInf::mtstDist(void) const\n{\n    return m_mtst_dist;\n}\n\nbool EdgeInf::isHyperedgeSegment(void) const\n{\n    return m_isHyperedgeSegment;\n}\n\nbool EdgeInf::isDisabled(void) const\n{\n    return m_disabled;\n}\n\nvoid EdgeInf::setDisabled(const bool disabled)\n{\n    m_disabled = disabled;\n}\n\nvoid EdgeInf::setHyperedgeSegment(const bool hyperedge)\n{\n    m_isHyperedgeSegment = hyperedge;\n}\n\nbool EdgeInf::added(void)\n{\n    return m_added;\n}\n\nint EdgeInf::blocker(void) const\n{\n    return m_blocker;\n}\n\nvoid EdgeInf::alertConns(void)\n{\n    FlagList::iterator finish = m_conns.end();\n    for (FlagList::iterator i = m_conns.begin(); i != finish; ++i)\n    {\n        *(*i) = true;\n    }\n    m_conns.clear();\n}\n\n\nvoid EdgeInf::addConn(bool *flag)\n{\n    m_conns.push_back(flag);\n}\n\n\nvoid EdgeInf::addCycleBlocker(void)\n{\n    // Needs to be in invisibility graph.\n    addBlocker(-1);\n}\n\n\nvoid EdgeInf::addBlocker(int b)\n{\n    COLA_ASSERT(m_router->InvisibilityGrph);\n\n    if (m_added && m_visible)\n    {\n        makeInactive();\n        COLA_ASSERT(!m_added);\n    }\n    if (!m_added)\n    {\n        m_visible = false;\n        makeActive();\n    }\n    m_dist = 0;\n    m_blocker = b;\n}\n\n\npair<VertID, VertID> EdgeInf::ids(void) const\n{\n    return std::make_pair(m_vert1->id, m_vert2->id);\n}\n\n\npair<Point, Point> EdgeInf::points(void) const\n{\n    return std::make_pair(m_vert1->point, m_vert2->point);\n}\n\n\nvoid EdgeInf::db_print(void)\n{\n    db_printf(\"Edge(\");\n    m_vert1->id.db_print();\n    db_printf(\",\");\n    m_vert2->id.db_print();\n    db_printf(\")\\n\");\n}\n\n\nvoid EdgeInf::checkVis(void)\n{\n    if (m_added && !m_visible)\n    {\n        db_printf(\"\\tChecking visibility for existing invisibility edge...\"\n                \"\\n\\t\\t\");\n        db_print();\n    }\n    else if (m_added && m_visible)\n    {\n        db_printf(\"\\tChecking visibility for existing visibility edge...\"\n                \"\\n\\t\\t\");\n        db_print();\n    }\n\n    int blocker = 0;\n    bool cone1 = true;\n    bool cone2 = true;\n\n    VertInf *i = m_vert1;\n    VertInf *j = m_vert2;\n    const VertID& iID = i->id;\n    const VertID& jID = j->id;\n    const Point& iPoint = i->point;\n    const Point& jPoint = j->point;\n\n    m_router->st_checked_edges++;\n\n    if (!(iID.isConnPt()))\n    {\n        cone1 = inValidRegion(m_router->IgnoreRegions, i->shPrev->point,\n                iPoint, i->shNext->point, jPoint);\n    }\n    else if (m_router->IgnoreRegions == false)\n    {\n        // If Ignoring regions then this case is already caught by \n        // the invalid regions, so only check it when not ignoring\n        // regions.\n        ShapeSet& ss = m_router->contains[iID];\n\n        if (!(jID.isConnPt()) && (ss.find(jID.objID) != ss.end()))\n        {\n            db_printf(\"1: Edge of bounding shape\\n\");\n            // Don't even check this edge, it should be zero,\n            // since a point in a shape can't see it's corners\n            cone1 = false;\n        }\n    }\n\n    if (cone1)\n    {\n        // If outside the first cone, don't even bother checking.\n        if (!(jID.isConnPt()))\n        {\n            cone2 = inValidRegion(m_router->IgnoreRegions, j->shPrev->point,\n                    jPoint, j->shNext->point, iPoint);\n        }\n        else if (m_router->IgnoreRegions == false)\n        {\n            // If Ignoring regions then this case is already caught by \n            // the invalid regions, so only check it when not ignoring\n            // regions.\n            ShapeSet& ss = m_router->contains[jID];\n\n            if (!(iID.isConnPt()) && (ss.find(iID.objID) != ss.end()))\n            {\n                db_printf(\"2: Edge of bounding shape\\n\");\n                // Don't even check this edge, it should be zero,\n                // since a point in a shape can't see it's corners\n                cone2 = false;\n            }\n        }\n    }\n\n    if (cone1 && cone2 && ((blocker = firstBlocker()) == 0))\n    {\n\n        // if i and j see each other, add edge\n        db_printf(\"\\tSetting visibility edge... \\n\\t\\t\");\n        db_print();\n\n        double d = euclideanDist(iPoint, jPoint);\n\n        setDist(d);\n\n    }\n    else if (m_router->InvisibilityGrph)\n    {\n#if 0\n        db_printf(\"%d, %d, %d\\n\", cone1, cone2, blocker);\n        db_printf(\"\\t(%d, %d)--(%d, %d)\\n\", (int) iInfo.point.x,\n                (int) iInfo.point.y, (int) jInfo.point.x,\n                (int) jInfo.point.y);\n#endif\n\n        // if i and j can't see each other, add blank edge\n        db_printf(\"\\tSetting invisibility edge... \\n\\t\\t\");\n        db_print();\n        addBlocker(blocker);\n    }\n}\n\n\nint EdgeInf::firstBlocker(void)\n{\n    ShapeSet ss = ShapeSet();\n\n    Point& pti = m_vert1->point;\n    Point& ptj = m_vert2->point;\n    VertID& iID = m_vert1->id;\n    VertID& jID = m_vert2->id;\n\n    ContainsMap &contains = m_router->contains;\n    if (iID.isConnPt())\n    {\n        ss.insert(contains[iID].begin(), contains[iID].end());\n    }\n    if (jID.isConnPt())\n    {\n        ss.insert(contains[jID].begin(), contains[jID].end());\n    }\n\n    VertInf *last = m_router->vertices.end();\n    unsigned int lastId = 0;\n    bool seenIntersectionAtEndpoint = false;\n    for (VertInf *k = m_router->vertices.shapesBegin(); k != last; )\n    {\n        VertID kID = k->id;\n        if (k->id == dummyOrthogID)\n        {\n            // Don't include orthogonal dummy vertices.\n            k = k->lstNext;\n            continue;\n        }\n        if (kID.objID != lastId)\n        {\n            if ((ss.find(kID.objID) != ss.end()))\n            {\n                unsigned int shapeID = kID.objID;\n                db_printf(\"Endpoint is inside shape %u so ignore shape \"\n                        \"edges.\\n\", kID.objID);\n                // One of the endpoints is inside this shape so ignore it.\n                while ((k != last) && (k->id.objID == shapeID))\n                {\n                    // And skip the other vertices from this shape.\n                    k = k->lstNext;\n                }\n                continue;\n            }\n            seenIntersectionAtEndpoint = false;\n            lastId = kID.objID;\n        }\n        Point& kPoint = k->point;\n        Point& kPrevPoint = k->shPrev->point;\n        if (segmentShapeIntersect(pti, ptj, kPrevPoint, kPoint, \n                    seenIntersectionAtEndpoint))\n        {\n            ss.clear();\n            return kID.objID;\n        }\n        k = k->lstNext;\n    }\n    ss.clear();\n    return 0;\n}\n\n\nbool EdgeInf::isBetween(VertInf *i, VertInf *j)\n{\n    if ( ((i == m_vert1) && (j == m_vert2)) ||\n         ((i == m_vert2) && (j == m_vert1)) )\n    {\n        return true;\n    }\n    return false;\n}\n\n\n    // Returns true if this edge is a vertical or horizontal line segment.\nbool EdgeInf::isOrthogonal(void) const\n{\n    return ((m_vert1->point.x == m_vert2->point.x) || \n            (m_vert1->point.y == m_vert2->point.y));\n}\n\n\nbool EdgeInf::isDummyConnection(void) const\n{\n    // This is a dummy edge from a shape centre to \n    // a set of its ShapeConnectionPins.\n    return ((m_vert1->id.isConnectionPin() && m_vert2->id.isConnPt()) ||\n            (m_vert2->id.isConnectionPin() && m_vert1->id.isConnPt()));\n}\n\n\nVertInf *EdgeInf::otherVert(const VertInf *vert) const\n{\n    COLA_ASSERT((vert == m_vert1) || (vert == m_vert2));\n\n    return (vert == m_vert1) ? m_vert2 : m_vert1;\n}\n\n\nEdgeInf *EdgeInf::checkEdgeVisibility(VertInf *i, VertInf *j, bool knownNew)\n{\n    // This is for polyline routing, so check we're not \n    // considering orthogonal vertices.\n    COLA_ASSERT(i->id != dummyOrthogID);\n    COLA_ASSERT(j->id != dummyOrthogID);\n    \n    Router *router = i->_router;\n    EdgeInf *edge = nullptr;\n\n    if (knownNew)\n    {\n        COLA_ASSERT(existingEdge(i, j) == nullptr);\n        edge = new EdgeInf(i, j);\n    }\n    else\n    {\n        edge = existingEdge(i, j);\n        if (edge == nullptr)\n        {\n            edge = new EdgeInf(i, j);\n        }\n    }\n    edge->checkVis();\n    if (!(edge->m_added) && !(router->InvisibilityGrph))\n    {\n        delete edge;\n        edge = nullptr;\n    }\n\n    return edge;\n}\n\n\n    // XXX: This function is inefficient, and shouldn't even really be\n    //      required.\nEdgeInf *EdgeInf::existingEdge(VertInf *i, VertInf *j)\n{\n    VertInf *selected = nullptr;\n\n    // Look through poly-line visibility edges.\n    selected = (i->visListSize <= j->visListSize) ? i : j;\n    EdgeInfList& visList = selected->visList;\n    EdgeInfList::const_iterator finish = visList.end();\n    for (EdgeInfList::const_iterator edge = visList.begin(); edge != finish;\n            ++edge)\n    {\n        if ((*edge)->isBetween(i, j))\n        {\n            return (*edge);\n        }\n    }\n\n    // Look through orthogonal visibility edges.\n    selected = (i->orthogVisListSize <= j->orthogVisListSize) ? i : j;\n    EdgeInfList& orthogVisList = selected->orthogVisList;\n    finish = orthogVisList.end();\n    for (EdgeInfList::const_iterator edge = orthogVisList.begin(); \n            edge != finish; ++edge)\n    {\n        if ((*edge)->isBetween(i, j))\n        {\n            return (*edge);\n        }\n    }\n\n    // Look through poly-line invisibility edges.\n    selected = (i->invisListSize <= j->invisListSize) ? i : j;\n    EdgeInfList& invisList = selected->invisList;\n    finish = invisList.end();\n    for (EdgeInfList::const_iterator edge = invisList.begin(); edge != finish;\n            ++edge)\n    {\n        if ((*edge)->isBetween(i, j))\n        {\n            return (*edge);\n        }\n    }\n\n    return nullptr;\n}\n\n\n//===========================================================================\n\n\nEdgeList::EdgeList(bool orthogonal)\n    : m_orthogonal(orthogonal),\n      m_first_edge(nullptr),\n      m_last_edge(nullptr),\n      m_count(0)\n{\n}\n\n\nEdgeList::~EdgeList()\n{\n    clear();\n}\n\n\nvoid EdgeList::clear(void)\n{\n    while (m_first_edge)\n    {\n        // The Edge destructor results in EdgeList:::removeEdge() being called\n        // for this edge and m_first_edge being updated to the subsequent edge\n        // in the EdgeList.\n        delete m_first_edge;\n    }\n    COLA_ASSERT(m_count == 0);\n    m_last_edge = nullptr;\n}\n\n\nint EdgeList::size(void) const\n{\n    return m_count;\n}\n\n\nvoid EdgeList::addEdge(EdgeInf *edge)\n{\n    // Dummy connections for ShapeConnectionPins won't be orthogonal, \n    // even in the orthogonal visibility graph.\n    COLA_UNUSED(m_orthogonal);\n    COLA_ASSERT(!m_orthogonal || edge->isOrthogonal() ||\n            edge->isDummyConnection());\n    \n    if (m_first_edge == nullptr)\n    {\n        COLA_ASSERT(m_last_edge == nullptr);\n\n        m_last_edge = edge;\n        m_first_edge = edge;\n\n        edge->lstPrev = nullptr;\n        edge->lstNext = nullptr;\n    }\n    else\n    {\n        COLA_ASSERT(m_last_edge != nullptr);\n\n        m_last_edge->lstNext = edge;\n        edge->lstPrev = m_last_edge;\n\n        m_last_edge = edge;\n\n        edge->lstNext = nullptr;\n    }\n    m_count++;\n}\n\n\nvoid EdgeList::removeEdge(EdgeInf *edge)\n{\n    if (edge->lstPrev)\n    {\n        edge->lstPrev->lstNext = edge->lstNext;\n    }\n    if (edge->lstNext)\n    {\n        edge->lstNext->lstPrev = edge->lstPrev;\n    }\n    if (edge == m_last_edge)\n    {\n        m_last_edge = edge->lstPrev;\n        if (edge == m_first_edge)\n        {\n            m_first_edge = nullptr;\n        }\n    }\n    else if (edge == m_first_edge)\n    {\n        m_first_edge = edge->lstNext;\n    }\n\n\n    edge->lstPrev = nullptr;\n    edge->lstNext = nullptr;\n\n    m_count--;\n}\n\n\nEdgeInf *EdgeList::begin(void)\n{\n    return m_first_edge;\n}\n\n\nEdgeInf *EdgeList::end(void)\n{\n    return nullptr;\n}\n\n\n}\n\n\n"
  },
  {
    "path": "cola/libavoid/graph.h",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libavoid - Fast, Incremental, Object-avoiding Line Router\n *\n * Copyright (C) 2004-2011  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * Licensees holding a valid commercial license may use this file in\n * accordance with the commercial license agreement provided with the \n * library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  \n *\n * Author(s):   Michael Wybrow\n*/\n\n\n#ifndef AVOID_GRAPH_H\n#define AVOID_GRAPH_H\n\n\n#include <cassert>\n#include <list>\n#include <utility>\n#include \"libavoid/vertices.h\"\n\nnamespace Avoid {\n\n\nclass ConnRef;\nclass Router;\n\n\ntypedef std::list<int> ShapeList;\ntypedef std::list<bool *> FlagList;\n\n\nclass EdgeInf\n{\n    public:\n        EdgeInf(VertInf *v1, VertInf *v2, const bool orthogonal = false);\n        ~EdgeInf();\n        inline double getDist(void)\n        {\n            return m_dist;\n        }\n        void setDist(double dist);\n        void alertConns(void);\n        void addConn(bool *flag);\n        void addCycleBlocker(void);\n        void addBlocker(int b);\n        bool added(void);\n        bool isOrthogonal(void) const;\n        bool isDummyConnection(void) const;\n        bool isDisabled(void) const;\n        void setDisabled(const bool disabled);\n        bool rotationLessThan(const VertInf* last, const EdgeInf *rhs) const;\n        std::pair<VertID, VertID> ids(void) const;\n        std::pair<Point, Point> points(void) const;\n        void db_print(void);\n        void checkVis(void);\n        VertInf *otherVert(const VertInf *vert) const;\n        static EdgeInf *checkEdgeVisibility(VertInf *i, VertInf *j,\n                bool knownNew = false);\n        static EdgeInf *existingEdge(VertInf *i, VertInf *j);\n        int blocker(void) const;\n        \n        bool isHyperedgeSegment(void) const;\n        void setHyperedgeSegment(const bool hyperedge);\n        double mtstDist(void) const;\n        void setMtstDist(const double joinCost);\n\n        EdgeInf *lstPrev;\n        EdgeInf *lstNext;\n    private:\n        friend class MinimumTerminalSpanningTree;\n        friend class VertInf;\n\n        void makeActive(void);\n        void makeInactive(void);\n        int firstBlocker(void);\n        bool isBetween(VertInf *i, VertInf *j);\n\n        Router *m_router;\n        int m_blocker;\n        bool m_added;\n        bool m_visible;\n        bool m_orthogonal;\n        bool m_isHyperedgeSegment;\n        bool m_disabled;\n        VertInf *m_vert1;\n        VertInf *m_vert2;\n        EdgeInfList::iterator m_pos1;\n        EdgeInfList::iterator m_pos2;\n        FlagList  m_conns;\n        double  m_dist;\n        double  m_mtst_dist;\n};\n\n\nclass EdgeList\n{\n    public:\n        friend class EdgeInf;\n        EdgeList(bool orthogonal = false);\n        ~EdgeList();\n        void clear(void);\n        EdgeInf *begin(void);\n        EdgeInf *end(void);\n        int size(void) const;\n    private:\n        void addEdge(EdgeInf *edge);\n        void removeEdge(EdgeInf *edge);\n\n        bool m_orthogonal;\n        EdgeInf *m_first_edge;\n        EdgeInf *m_last_edge;\n        unsigned int m_count;\n};\n\n\n}\n\n\n#endif\n\n\n"
  },
  {
    "path": "cola/libavoid/hyperedge.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libavoid - Fast, Incremental, Object-avoiding Line Router\n *\n * Copyright (C) 2011-2014  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * Licensees holding a valid commercial license may use this file in\n * accordance with the commercial license agreement provided with the \n * library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  \n *\n * Author(s):  Michael Wybrow\n*/\n\n#include \"libavoid/hyperedge.h\"\n#include \"libavoid/hyperedgetree.h\"\n#include \"libavoid/mtst.h\"\n#include \"libavoid/junction.h\"\n#include \"libavoid/connector.h\"\n#include \"libavoid/vertices.h\"\n#include \"libavoid/connend.h\"\n#include \"libavoid/shape.h\"\n#include \"libavoid/router.h\"\n#include \"libavoid/assertions.h\"\n#include \"libavoid/debughandler.h\"\n#include \"libavoid/debug.h\"\n\n\nnamespace Avoid {\n\nHyperedgeRerouter::HyperedgeRerouter()\n    : m_router(nullptr)\n{\n}\n\nvoid HyperedgeRerouter::setRouter(Router *router)\n{\n    m_router = router;\n}\n\nsize_t HyperedgeRerouter::registerHyperedgeForRerouting(\n        ConnEndList terminals)\n{\n    m_terminals_vector.push_back(terminals);\n    m_root_junction_vector.push_back(nullptr);\n\n    return m_terminals_vector.size() - 1;\n}\n\nsize_t HyperedgeRerouter::registerHyperedgeForRerouting(\n        JunctionRef *junction)\n{\n    m_terminals_vector.push_back(ConnEndList());\n    m_root_junction_vector.push_back(junction);\n\n    return m_terminals_vector.size() - 1;\n}\n\nsize_t HyperedgeRerouter::count(void) const\n{\n    return m_terminals_vector.size();\n}\n\nHyperedgeNewAndDeletedObjectLists HyperedgeRerouter::newAndDeletedObjectLists(\n        size_t index) const\n{\n    COLA_ASSERT(index <= count());\n\n    HyperedgeNewAndDeletedObjectLists result;\n\n    result.newJunctionList = m_new_junctions_vector[index];\n    result.deletedJunctionList = m_deleted_junctions_vector[index];\n    result.newConnectorList = m_new_connectors_vector[index];\n    result.deletedConnectorList = m_deleted_connectors_vector[index];\n\n    return result;\n}\n\n\nvoid HyperedgeRerouter::outputInstanceToSVG(FILE *fp)\n{\n    if (count() == 0)\n    {\n        return;\n    }\n\n    fprintf(fp, \"    HyperedgeRerouter *hyperedgeRerouter = router->hyperedgeRerouter();\\n\");\n    const size_t num_hyperedges = count();\n    for (size_t i = 0; i < num_hyperedges; ++i)\n    {\n        if (m_root_junction_vector[i])\n        {\n            fprintf(fp, \"    hyperedgeRerouter->registerHyperedgeForRerouting(junctionRef%u);\\n\",\n                    m_root_junction_vector[i]->id());\n        }\n        else\n        {\n            fprintf(fp, \"    ConnEndList heConnList%u;\\n\", (unsigned int) i);\n            for (ConnEndList::const_iterator it = m_terminals_vector[i].begin();\n                    it != m_terminals_vector[i].end(); ++it)\n            {\n                (*it).outputCode(fp, \"heEnd\");\n                fprintf(fp, \"    heConnList%u.push_back(heEndPt);\\n\",\n                        (unsigned int) i);\n            }\n            fprintf(fp, \"    hyperedgeRerouter->registerHyperedgeForRerouting(heConnList%u);\\n\",\n                    (unsigned int) i);\n\n        }\n    }\n    fprintf(fp, \"\\n\");\n}\n\n\n// Follow connected junctions and connectors from the given connector to\n// determine the hyperedge topology, saving objects to the deleted-objects\n// vectors as we go.\nbool HyperedgeRerouter::findAttachedObjects(size_t index,\n        ConnRef *connector, JunctionRef *ignore, ConnRefSet& hyperedgeConns)\n{\n    bool validHyperedge = false;\n\n    connector->assignConnectionPinVisibility(true);\n\n    m_deleted_connectors_vector[index].push_back(connector);\n    hyperedgeConns.insert(connector);\n\n    std::pair<Obstacle *, Obstacle *> anchors = connector->endpointAnchors();\n    JunctionRef *jFirst = dynamic_cast<JunctionRef *> (anchors.first);\n    JunctionRef *jSecond = dynamic_cast<JunctionRef *> (anchors.second);\n\n    if (jFirst)\n    {\n        // If attached to a junction and not one we've explored, then continue.\n        if (jFirst != ignore)\n        {\n            validHyperedge |= findAttachedObjects(index, jFirst, connector, hyperedgeConns);\n        }\n    }\n    else\n    {\n        // If its an endpoint, then record the vertex for this endpoint.\n        COLA_ASSERT(connector->m_src_vert);\n        m_terminal_vertices_vector[index].insert(connector->m_src_vert);\n    }\n\n    if (jSecond)\n    {\n        // If attached to a junction and not one we've explored, then continue.\n        if (jSecond != ignore)\n        {\n            validHyperedge |= findAttachedObjects(index, jSecond, connector, hyperedgeConns);\n        }\n    }\n    else\n    {\n        // If its an endpoint, then record the vertex for this endpoint.\n        COLA_ASSERT(connector->m_dst_vert);\n        m_terminal_vertices_vector[index].insert(connector->m_dst_vert);\n    }\n    return validHyperedge;\n}\n\n\n// Follow connected junctions and connectors from the given junction to\n// determine the hyperedge topology, saving objects to the deleted-objects\n// vectors as we go.\nbool HyperedgeRerouter::findAttachedObjects(size_t index,\n        JunctionRef *junction, ConnRef *ignore, ConnRefSet& hyperedgeConns)\n{\n    bool validHyperedge = false;\n\n    m_deleted_junctions_vector[index].push_back(junction);\n\n    ConnRefList connectors = junction->attachedConnectors();\n\n    if (connectors.size() > 2)\n    {\n        // A valid hyperedge must have at least one junction with three\n        // connectors attached, i.e., more than two endpoints.\n        validHyperedge |= true;\n    }\n\n    for (ConnRefList::iterator curr  = connectors.begin();\n            curr != connectors.end(); ++curr)\n    {\n        if (*curr == ignore)\n        {\n            continue;\n        }\n\n        COLA_ASSERT(*curr != nullptr);\n        validHyperedge |= findAttachedObjects(index, (*curr), junction, hyperedgeConns);\n    }\n    return validHyperedge;\n}\n\n\n// Populate the deleted-object vectors with all the connectors and junctions\n// that form the registered hyperedges.  Then return the set of all these\n// connectors so they can be ignored for individual rerouting.\nConnRefSet HyperedgeRerouter::calcHyperedgeConnectors(void)\n{\n    COLA_ASSERT(m_router != nullptr);\n\n    ConnRefSet allRegisteredHyperedgeConns;\n\n    // Clear the deleted-object vectors.  We populate them here if necessary.\n    m_deleted_junctions_vector.clear();\n    m_deleted_junctions_vector.resize(count());\n    m_deleted_connectors_vector.clear();\n    m_deleted_connectors_vector.resize(count());\n\n    m_terminal_vertices_vector.clear();\n    m_terminal_vertices_vector.resize(count());\n    m_added_vertices.clear();\n\n    // Populate the deleted-object vectors.\n    const size_t num_hyperedges = count();\n    for (size_t i = 0; i < num_hyperedges; ++i)\n    {\n        if (m_root_junction_vector[i])\n        {\n            // Follow objects attached to junction to find the hyperedge.\n            bool valid = findAttachedObjects(i, m_root_junction_vector[i], nullptr,\n                    allRegisteredHyperedgeConns);\n            if (!valid)\n            {\n                err_printf(\"Warning: Hyperedge %d registered with \"\n                           \"HyperedgeRerouter is invalid and will be \"\n                           \"ignored.\\n\", (int) i);\n                // Hyperedge is invalid.  Clear the terminals and other info\n                // so it will be ignored, and rerouted as a normal set of \n                // connectors.\n                m_terminals_vector[i].clear();\n                m_terminal_vertices_vector[i].clear();\n                m_deleted_junctions_vector[i].clear();\n                m_deleted_connectors_vector[i].clear();\n            }\n            continue;\n        }\n\n        // Alternatively, we have a set of ConnEnds, so store the\n        // corresponding terminals\n        std::pair<bool, VertInf *> maybeNewVertex;\n        for (ConnEndList::const_iterator it = m_terminals_vector[i].begin();\n                it != m_terminals_vector[i].end(); ++it)\n        {\n            maybeNewVertex = it->getHyperedgeVertex(m_router);\n            COLA_ASSERT(maybeNewVertex.second != nullptr);\n            m_terminal_vertices_vector[i].insert(maybeNewVertex.second);\n\n            if (maybeNewVertex.first)\n            {\n                // This is a newly created vertex.  Remember it so we can\n                // free it and it's visibility edges later.\n                m_added_vertices.push_back(maybeNewVertex.second);\n            }\n        }\n    }\n\n    // Return these connectors that don't require rerouting.\n    return allRegisteredHyperedgeConns;\n}\n\n\nvoid HyperedgeRerouter::performRerouting(void)\n{\n    COLA_ASSERT(m_router != nullptr);\n\n    m_new_junctions_vector.clear();\n    m_new_junctions_vector.resize(count());\n    m_new_connectors_vector.clear();\n    m_new_connectors_vector.resize(count());\n\n#ifdef DEBUGHANDLER\n    if (m_router->debugHandler())\n    {\n        std::vector<Box> obstacleBoxes;\n        ObstacleList::iterator obstacleIt = m_router->m_obstacles.begin();\n        while (obstacleIt != m_router->m_obstacles.end())\n        {\n            Obstacle *obstacle = *obstacleIt;\n            JunctionRef *junction = dynamic_cast<JunctionRef *> (obstacle);\n            if (junction && ! junction->positionFixed())\n            {\n                // Junctions that are free to move are not treated as obstacles.\n                ++obstacleIt;\n                continue;\n            }\n            Box bbox = obstacle->routingBox();\n            obstacleBoxes.push_back(bbox);\n            ++obstacleIt;\n        }\n        m_router->debugHandler()->updateObstacleBoxes(obstacleBoxes);\n    }\n#endif\n\n    // For each hyperedge...\n    const size_t num_hyperedges = count();\n    for (size_t i = 0; i < num_hyperedges; ++i)\n    {\n        if (m_terminal_vertices_vector[i].empty())\n        {\n            // Invalid hyperedge, ignore.\n            continue;\n        }\n\n        // Execute the MTST method to find good junction positions and an\n        // initial path.  A hyperedge tree will be built for the new route.\n        JunctionHyperedgeTreeNodeMap hyperedgeTreeJunctions;\n        MinimumTerminalSpanningTree mtst(m_router, \n                m_terminal_vertices_vector[i], &hyperedgeTreeJunctions);\n\n        // The older MTST construction method (faster, worse results).\n        //mtst.constructSequential();\n        \n        // The preferred MTST construction method.\n        // Slightly slower, better quality results.\n        mtst.constructInterleaved();\n\n        HyperedgeTreeNode *treeRoot = mtst.rootJunction();\n        COLA_ASSERT(treeRoot);\n        \n        // Fill in connector information and join them to junctions of endpoints\n        // of original connectors.\n        treeRoot->addConns(nullptr, m_router, \n                m_deleted_connectors_vector[i], nullptr);\n\n        // Output the list of new junctions and connectors from hyperedge tree.\n        treeRoot->listJunctionsAndConnectors(nullptr, m_new_junctions_vector[i],\n                m_new_connectors_vector[i]);\n\n        // Write paths from the hyperedge tree back into individual\n        // connector routes.\n        for (size_t pass = 0; pass < 2; ++pass)\n        {\n            treeRoot->writeEdgesToConns(nullptr, pass);\n        }\n\n        // Tell the router that we are deleting the objects used for the\n        // previous path for the hyperedge.\n        for (ConnRefList::iterator curr = \n                m_deleted_connectors_vector[i].begin();\n                curr != m_deleted_connectors_vector[i].end(); ++curr)\n        {\n            // Clear visibility assigned for connection pins.\n            (*curr)->assignConnectionPinVisibility(false);\n\n            m_router->deleteConnector(*curr);\n        }\n        for (JunctionRefList::iterator curr = \n                m_deleted_junctions_vector[i].begin();\n                curr != m_deleted_junctions_vector[i].end(); ++curr)\n        {\n            m_router->deleteJunction(*curr);\n        }\n    }\n\n    // Clear the input to this class, so that new objects can be registered\n    // for rerouting for the next time that transaction that is processed.\n    m_terminals_vector.clear();\n    m_root_junction_vector.clear();\n\n    // Free temporarily added vertices.\n    for (VertexList::iterator curr = m_added_vertices.begin();\n            curr != m_added_vertices.end(); ++curr)\n    {\n        (*curr)->removeFromGraph();\n        m_router->vertices.removeVertex(*curr);\n        delete *curr;\n    }\n    m_added_vertices.clear();\n}\n\n\n}\n    \n"
  },
  {
    "path": "cola/libavoid/hyperedge.h",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libavoid - Fast, Incremental, Object-avoiding Line Router\n *\n * Copyright (C) 2011-2015  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * Licensees holding a valid commercial license may use this file in\n * accordance with the commercial license agreement provided with the \n * library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  \n *\n * Author(s):   Michael Wybrow\n*/\n\n//! @file    hyperedge.h\n//! @brief   Contains the interface for the HyperedgeRerouter class.\n\n#ifndef AVOID_HYPEREDGE_H\n#define AVOID_HYPEREDGE_H\n\n#include <cstdio>\n#include <list>\n#include <vector>\n#include <set>\n\n#include \"libavoid/dllexport.h\"\n\nnamespace Avoid {\n\nclass ConnRef;\nclass JunctionRef;\nclass Router;\nclass ConnEnd;\nclass VertInf;\n\n//! @brief   A list of ConnEnd objects.\ntypedef std::list<ConnEnd> ConnEndList;\n\n//! @brief   A list of ConnRef objects.\ntypedef std::list<ConnRef *> ConnRefList;\n\n//! @brief   A list of JunctionRef objects.\ntypedef std::list<JunctionRef *> JunctionRefList;\n\ntypedef std::list<VertInf *> VertexList;\ntypedef std::set<ConnRef *> ConnRefSet;\ntypedef std::set<VertInf *> VertexSet;\n\ntypedef std::vector<JunctionRef *> JunctionRefVector;\ntypedef std::vector<ConnEndList> ConnEndListVector;\ntypedef std::vector<ConnRefList> ConnRefListVector;\ntypedef std::vector<JunctionRefList> JunctionRefListVector;\ntypedef std::vector<VertexSet> VertexSetVector;\n\n//! @brief   The HyperedgeNewAndDeletedObjectLists class stores lists of \n//!          objects created and deleted during hyperedge improvement.\n//!\n//! After hyperedge improvement, this information can be produced by calling\n//! the Router::newAndDeletedObjectListsFromHyperedgeImprovement() method.\n//! \n//! After hyperedge rerouting, this information can be produced by calling \n//! the HyperedgeRerouter::newAndDeletedObjectLists() method for each \n//! hyperedge being fully rerouted.\n//!\n//! The HyperedgeNewAndDeletedObjectLists::changedConnectorList attribute \n//! will only be used for hyperedge improvement and will always be empty \n//! for hyperedge rerouting.\n//!\nstruct HyperedgeNewAndDeletedObjectLists\n{\n        //! A list of newly created junctions.\n        JunctionRefList  newJunctionList;\n\n        //! A list of newly created connectors.\n        ConnRefList      newConnectorList;\n        \n        //! A list of deleted junctions.\n        JunctionRefList  deletedJunctionList;\n\n        //! A list of deleted connectors.\n        ConnRefList      deletedConnectorList;\n        \n        //! A list of changed connectors.\n        ConnRefList      changedConnectorList;\n};\n\n\n//! @brief   The HyperedgeRerouter class is a convenience object that can be\n//!          used to register hyperedges to be rerouted, improving the\n//!          placement of their junctions and connector paths.\n//!\n//! To work with this class, you should get a copy from the router instance\n//! via a call to Router::hyperedgeRerouter().\n//!\n//! If you would like a particular hyperedge to be completely rerouted with\n//! new junction positions then you should register it with this class via a\n//! call to registerHyperedgeForRerouting.  A hyperedge can either be\n//! specified as a set of terminal vertices, or as a single JunctionRef.\n//! Passing a JunctionRef will cause HyperedgeRerouter to follow the attached\n//! connectors and junctions to determine the hyperedge.  When you register\n//! a hyperedge you get an index number that can be used to later find\n//! information about it.\n//!\n//! The rerouting will actually occur the next time the Router processes a\n//! transaction, see Router::processTransaction().  The rerouting will\n//! effectively create new junctions (JunctionRefs) and connectors (ConnRefs)\n//! for the hyperedge.  \n//! \n//! Since hyperedges are composed of multiple connections and junction objects,\n//! rerouting a hyperedge can cause creation of new or deletion of existing \n//! connectors and/or junctions.  Thus once the transaction has been completed\n//! you should call the newAndDeletedObjectLists() to get an object containing\n//! the lists of created and deleted junctions and connectors.  After the\n//! transaction You should not use references to these deleted objects any \n//! more from your own code (since the router will free their memory at its\n//! convenience) and you should refer only to the unaffected objects and the \n//! new connectors and junctions.\n//!\nclass AVOID_EXPORT HyperedgeRerouter\n{\n    public:\n        //! @brief  Constructor for hyperedge rerouter object.\n        //!\n        //! @note   You shouldn't create this object yourself.  The Router\n        //!         instance has one that you can request a reference to\n        //!         via Router::hyperedgeRerouter().\n        //!\n        HyperedgeRerouter();\n        \n        //! @brief  Registers a hyperedge to be fully rerouted the next time\n        //!         the router processes a transaction.\n        //!\n        //! @param[in] terminals  The ConnEnds that form the endpoints of the\n        //!                       hyperedge.\n        //! @return An index that can be used to request information on the\n        //!         resulting routing of the hyperedge.\n        //!\n        size_t registerHyperedgeForRerouting(ConnEndList terminals);\n\n        //! @brief  Registers a hyperedge to be fully rerouted the next time\n        //!         the router processes a transaction.\n        //!\n        //! In this case the connectors and junctions attached to the given\n        //! junction will be traversed to determine the endpoints of the\n        //! hyperedge.  These endpoints will then be used for the rerouting.\n        //! The junctions and connectors forming the old route will be\n        //! deleted.\n        //!\n        //! @param[in] junction  One of the junctions that forms the\n        //!                      hyperedge.\n        //! @return An index that can be used to request information on the\n        //!         resulting routing of the hyperedge.\n        //!\n        size_t registerHyperedgeForRerouting(JunctionRef *junction);\n\n        //! @brief  Returns a HyperedgeNewAndDeletedObjectLists detailing the\n        //!         lists of junctions and connectors created and deleted\n        //!         during hyperedge improvement.\n        //!\n        //! This method will only return information once the router has\n        //! processed the transaction.  You should read this information \n        //! before processTransaction() is called again.\n        //!\n        //! After calling this you should no longer refer to any of the\n        //! objects in the \"deleted\" lists --- the router will delete these \n        //! and free their memory at its convenience.\n        //!\n        //! @param  index  The index of the hyperedge to return junctions for.\n        //! @return A HyperedgeNewAndDeletedObjectLists containing lists of \n        //!         junctions and connectors created and deleted.\n        //!\n        HyperedgeNewAndDeletedObjectLists newAndDeletedObjectLists(\n                size_t index) const;\n\n        // @brief  The number of hyperedges that are being or have been\n        //         rerouted.\n        // @return The number of rerouted hyperedges.\n        //\n        size_t count(void) const;\n\n    private:\n        friend class Router;\n\n        // @brief  Sets the router instance that this object operates on.\n        //\n        // @param[in] router  The router instance to operate on.\n        //\n        void setRouter(Router *router);\n\n        ConnRefSet calcHyperedgeConnectors(void);\n        // Called by Router during processTransaction().\n        void performRerouting(void);\n        void outputInstanceToSVG(FILE *fp);\n        bool findAttachedObjects(size_t index, ConnRef *connector,\n                JunctionRef *ignore, ConnRefSet& hyperedgeConns);\n        bool findAttachedObjects(size_t index, JunctionRef *junction,\n                ConnRef *ignore, ConnRefSet& hyperedgeConns);\n\n        Router *m_router;\n        ConnEndListVector m_terminals_vector;\n        JunctionRefVector m_root_junction_vector;\n        JunctionRefListVector m_new_junctions_vector;\n        JunctionRefListVector m_deleted_junctions_vector;\n        ConnRefListVector m_new_connectors_vector;\n        ConnRefListVector m_deleted_connectors_vector;\n        VertexSetVector m_terminal_vertices_vector;\n        VertexList m_added_vertices;\n};\n\n\n}\n\n#endif\n"
  },
  {
    "path": "cola/libavoid/hyperedgeimprover.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libavoid - Fast, Incremental, Object-avoiding Line Router\n *\n * Copyright (C) 2009-2014  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * Licensees holding a valid commercial license may use this file in\n * accordance with the commercial license agreement provided with the\n * library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n * Author(s):  Michael Wybrow\n*/\n\n#include <algorithm>\n#include <sstream>\n#include <iomanip>\n\n#include \"libavoid/router.h\"\n#include \"libavoid/shape.h\"\n#include \"libavoid/junction.h\"\n#include \"libavoid/vpsc.h\"\n#include \"libavoid/assertions.h\"\n#include \"libavoid/hyperedgetree.h\"\n#include \"libavoid/hyperedgeimprover.h\"\n#include \"libavoid/scanline.h\"\n#include \"libavoid/debug.h\"\n\nnamespace Avoid {\n\nclass HyperedgeShiftSegment : public ShiftSegment\n{\n    public:\n        HyperedgeShiftSegment(HyperedgeTreeNode *n1, HyperedgeTreeNode *n2,\n                const size_t dim, bool immovable)\n            : ShiftSegment(dim),\n              nodes((dim + 1) % 2),\n              isImmovable(immovable),\n              m_balance_count(0),\n              m_balance_count_set(false),\n              m_at_limit(false)\n        {\n            nodes.insert(n1);\n            nodes.insert(n2);\n            n1->shiftSegmentNodeSet = &nodes;\n            n2->shiftSegmentNodeSet = &nodes;\n\n            minSpaceLimit = -CHANNEL_MAX;\n            maxSpaceLimit = CHANNEL_MAX;\n        }\n        virtual ~HyperedgeShiftSegment()\n        {\n            for (OrderedHENodeSet::const_iterator curr = nodes.begin();\n                    curr != nodes.end(); ++curr)\n            {\n                (*curr)->shiftSegmentNodeSet = nullptr;\n            }\n        }\n\n        Point& lowPoint(void)\n        {\n            return (*nodes.begin())->point;\n        }\n        Point& highPoint(void)\n        {\n            return (*nodes.rbegin())->point;\n        }\n        const Point& lowPoint(void) const\n        {\n            return (*nodes.begin())->point;\n        }\n        const Point& highPoint(void) const\n        {\n            return (*nodes.rbegin())->point;\n        }\n        // Counts the number of segments diverging on each side and returns\n        // a count: a negative number if there a more on the lower side,\n        // a positive number if there are more on the upper side, or zero if\n        // there are an equal number of segments.\n        void setBalanceCount(void)\n        {\n            size_t altDim = (dimension + 1) % 2;\n            m_next_pos_lower = minSpaceLimit;\n            m_next_pos_upper = maxSpaceLimit;\n            m_balance_count = 0;\n            if ( isImmovable )\n            {\n                m_balance_count_set = true;\n                return;\n            }\n            for (OrderedHENodeSet::const_iterator curr = nodes.begin();\n                    curr != nodes.end(); ++curr)\n            {\n                const Point& currPoint = (*curr)->point;\n                for (std::list<HyperedgeTreeEdge *>::const_iterator currEdge =\n                        (*curr)->edges.begin(); currEdge != (*curr)->edges.end();\n                        ++currEdge)\n                {\n                    const HyperedgeTreeNode *node = (*currEdge)->followFrom(*curr);\n                    const Point& otherPoint = node->point;\n                    if (currPoint[altDim] == otherPoint[altDim])\n                    {\n                        if (otherPoint[dimension] < currPoint[dimension])\n                        {\n                            m_next_pos_lower = std::max(m_next_pos_lower,\n                                    otherPoint[dimension]);\n                            --m_balance_count;\n                        }\n                        else if (otherPoint[dimension] > currPoint[dimension])\n                        {\n                            m_next_pos_upper = std::min(m_next_pos_upper,\n                                    otherPoint[dimension]);\n                            ++m_balance_count;\n                        }\n                    }\n                }\n            }\n            m_balance_count_set = true;\n        }\n        int balanceCount(void) const\n        {\n            COLA_ASSERT( m_balance_count_set );\n            return m_balance_count;\n        }\n        void adjustPosition(void)\n        {\n            COLA_ASSERT(m_balance_count_set);\n            COLA_ASSERT(m_balance_count != 0);\n\n            double newPos = (m_balance_count < 0) ?\n                    m_next_pos_lower : m_next_pos_upper;\n            double limit = (m_balance_count < 0) ?\n                    minSpaceLimit : maxSpaceLimit;\n            if (lowPoint()[dimension] == newPos)\n            {\n                // If aren't actually moving this segment, then mark it\n                // as at-limit.\n                // XXX This seems to be because of a segment with an\n                //     incorrectly marked limit, possibly due to a\n                //     junction positioned within a shape.\n                m_at_limit = true;\n            }\n\n            for (OrderedHENodeSet::iterator curr = nodes.begin();\n                    curr != nodes.end(); ++curr)\n            {\n                (*curr)->point[dimension] = newPos;\n            }\n\n            if (newPos == limit)\n            {\n                m_at_limit = true;\n            }\n\n            // Add nodes from collapsed segments, in case they are not part of\n            // a segment that will be merged.\n            for (OrderedHENodeSet::iterator curr = nodes.begin();\n                    curr != nodes.end(); ++curr)\n            {\n                Point& currPoint = (*curr)->point;\n                for (std::list<HyperedgeTreeEdge *>::iterator currEdge =\n                        (*curr)->edges.begin(); currEdge != (*curr)->edges.end();\n                        ++currEdge)\n                {\n                    HyperedgeTreeNode *node = (*currEdge)->followFrom(*curr);\n                    Point& otherPoint = node->point;\n                    if (currPoint == otherPoint)\n                    {\n                        nodes.insert(node);\n                        node->shiftSegmentNodeSet = &nodes;\n                    }\n                }\n            }\n        }\n        bool overlapsWith(const ShiftSegment *rhs, const size_t dim) const\n        {\n            size_t altDim = (dim + 1) % 2;\n            const Point& lowPt = lowPoint();\n            const Point& highPt = highPoint();\n            const Point& rhsLowPt = rhs->lowPoint();\n            const Point& rhsHighPt = rhs->highPoint();\n            if ( (lowPt[altDim] <= rhsHighPt[altDim]) &&\n                    (rhsLowPt[altDim] <= highPt[altDim]))\n            {\n                // The segments overlap.\n                if ( (minSpaceLimit <= rhs->maxSpaceLimit) &&\n                        (rhs->minSpaceLimit <= maxSpaceLimit) )\n                {\n                    return true;\n                }\n            }\n            return false;\n        }\n        bool immovable(void) const\n        {\n            return isImmovable;\n        }\n        bool settled(void) const\n        {\n            return isImmovable || m_at_limit || (balanceCount() == 0);\n        }\n        bool mergesWith(HyperedgeShiftSegment *other)\n        {\n            size_t altDim = (dimension + 1) % 2;\n            const Point& lowPt = lowPoint();\n            const Point& highPt = highPoint();\n            const Point& otherLowPt = other->lowPoint();\n            const Point& otherHighPt = other->highPoint();\n            if ( (lowPt[dimension] == otherLowPt[dimension]) &&\n                    (lowPt[altDim] <= otherHighPt[altDim]) &&\n                    (otherLowPt[altDim] <= highPt[altDim]))\n            {\n                isImmovable |= other->isImmovable;\n                m_at_limit |= m_at_limit;\n                minSpaceLimit = std::max(minSpaceLimit, other->minSpaceLimit);\n                maxSpaceLimit = std::min(maxSpaceLimit, other->maxSpaceLimit);\n                nodes.insert(other->nodes.begin(), other->nodes.end());\n                other->nodes.clear();\n                for (OrderedHENodeSet::iterator curr = nodes.begin();\n                        curr != nodes.end(); ++curr)\n                {\n                    (*curr)->shiftSegmentNodeSet = &nodes;\n                }\n                setBalanceCount();\n                return true;\n            }\n            setBalanceCount();\n            return false;\n        }\n\n        std::set<HyperedgeTreeNode *, CmpNodesInDim> nodes;\n        bool isImmovable;\nprivate:\n        int m_balance_count;\n        bool m_balance_count_set;\n        double m_next_pos_lower;\n        double m_next_pos_upper;\n        bool m_at_limit;\n};\n\n#if 0\n// UNUSED\nstatic bool CmpHyperedgeSegmentDirOrder(const ShiftSegment *lhsSuper,\n            const ShiftSegment *rhsSuper)\n{\n    const HyperedgeShiftSegment *lhs =\n            dynamic_cast<const HyperedgeShiftSegment *> (lhsSuper);\n    const HyperedgeShiftSegment *rhs =\n            dynamic_cast<const HyperedgeShiftSegment *> (rhsSuper);\n\n    return fabs(lhs->balanceCount()) > fabs(rhs->balanceCount());\n}\n#endif\n\n\n// Constructor.\nHyperedgeImprover::HyperedgeImprover()\n    : m_router(nullptr)\n{\n    clear();\n}\n\nvoid HyperedgeImprover::setRouter(Router *router)\n{\n    m_router = router;\n}\n\nvoid HyperedgeImprover::clear(void)\n{\n    m_hyperedge_tree_junctions.clear();\n    m_hyperedge_tree_roots.clear();\n    m_root_shift_segments.clear();\n    m_all_shift_segments.clear();\n    m_new_junctions.clear();\n    m_deleted_junctions.clear();\n    m_new_connectors.clear();\n    m_deleted_connectors.clear();\n    m_changed_connectors.clear();\n    m_debug_count = 0;\n}\n\n// Helper method for buildHyperedgeSegments() for hyperedge tree nodes.\nvoid HyperedgeImprover::createShiftSegmentsForDimensionExcluding(\n        HyperedgeTreeNode *node, const size_t dim, HyperedgeTreeEdge *ignore,\n        ShiftSegmentList& segments)\n{\n    for (std::list<HyperedgeTreeEdge *>::iterator curr = node->edges.begin();\n            curr != node->edges.end(); ++curr)\n    {\n        HyperedgeTreeEdge *edge = *curr;\n        if (edge != ignore)\n        {\n            createShiftSegmentsForDimensionExcluding(edge, dim,\n                    node, segments);\n        }\n    }\n}\n\n// Helper method for buildHyperedgeSegments() for hyperedge tree edges.\nvoid HyperedgeImprover::createShiftSegmentsForDimensionExcluding(\n        HyperedgeTreeEdge *edge, const size_t dim, HyperedgeTreeNode *ignore,\n        ShiftSegmentList& segments)\n{\n    if (edge->hasOrientation(dim) && ! edge->zeroLength())\n    {\n        bool immovable = (edge->ends.first->isImmovable() ||\n                edge->ends.second->isImmovable());\n\n        HyperedgeShiftSegment *newSegment =\n                new HyperedgeShiftSegment(edge->ends.first,\n                edge->ends.second, dim, immovable);\n        segments.push_back(newSegment);\n    }\n\n    if (edge->ends.first && (edge->ends.first != ignore))\n    {\n        createShiftSegmentsForDimensionExcluding(edge->ends.first, dim,\n                edge, segments);\n    }\n\n    if (edge->ends.second && (edge->ends.second != ignore))\n    {\n        createShiftSegmentsForDimensionExcluding(edge->ends.second, dim,\n                edge, segments);\n    }\n}\n\n// During creation and nudging of shift segments it is often necessary\n// to merge collinear or overlapping segments.  This method does the\n// merging for these cases.  Effectively merging is done by adding\n// additional vertex pointers to the shift segment.\nvoid HyperedgeImprover::mergeOverlappingSegments(ShiftSegmentList& segments)\n{\n    for (ShiftSegmentList::iterator curr = segments.begin();\n            curr != segments.end(); ++curr)\n    {\n        HyperedgeShiftSegment *edge1 =\n                static_cast<HyperedgeShiftSegment *> (*curr);\n        for (ShiftSegmentList::iterator curr2 = segments.begin();\n                curr2 != segments.end(); )\n        {\n            if (curr2 == curr)\n            {\n                ++curr2;\n                continue;\n            }\n            HyperedgeShiftSegment *edge2 =\n                    static_cast<HyperedgeShiftSegment *> (*curr2);\n            if (edge1->mergesWith(edge2))\n            {\n                delete edge2;\n                curr2 = segments.erase(curr2);\n            }\n            else\n            {\n                ++curr2;\n            }\n        }\n    }\n}\n\n// Given a hyperedge tree and a dimension, this method creates shift\n// segments for all edges in that orientation.  These segments are the\n// objects on which the local improvement nudging operates, and they\n// in turn make changes back to the hyperedge tree.\nvoid HyperedgeImprover::buildHyperedgeSegments(const size_t dim)\n{\n    for (JunctionSet::iterator curr = m_hyperedge_tree_roots.begin();\n            curr != m_hyperedge_tree_roots.end(); ++curr)\n    {\n        ShiftSegmentList& segments = m_root_shift_segments[*curr];\n\n        HyperedgeTreeNode *node = m_hyperedge_tree_junctions[*curr];\n        createShiftSegmentsForDimensionExcluding(node, dim, nullptr, segments);\n\n        // Merge overlapping segment.\n        mergeOverlappingSegments(segments);\n\n        m_all_shift_segments.insert(m_all_shift_segments.begin(),\n                segments.begin(), segments.end());\n    }\n}\n\n// This method looks for and corrects situations where the middle section\n// of a zigzag is optimised away by bringing the outside segments in line\n// and leading to the middle segment being zero length.  These zero length\n// edges are removed.\nvoid HyperedgeImprover::removeZeroLengthEdges(void)\n{\n    for (JunctionSet::iterator curr = m_hyperedge_tree_roots.begin();\n            curr != m_hyperedge_tree_roots.end(); ++curr)\n    {\n        HyperedgeTreeNode *node = m_hyperedge_tree_junctions[*curr];\n\n        removeZeroLengthEdges(node, nullptr);\n    }\n}\n\n// This method looks for and correct situations where multiple overlapping\n// edges lead to a junction and one or more of these segments could be\n// removed by moving the junction (and thus divergence point) along the\n// edge.\nvoid HyperedgeImprover::moveJunctionsAlongCommonEdges(void)\n{\n    for (JunctionHyperedgeTreeNodeMap::iterator curr =\n            m_hyperedge_tree_junctions.begin();\n            curr != m_hyperedge_tree_junctions.end(); )\n    {\n        HyperedgeTreeNode *node = curr->second;\n\n        bool nodeMapHasChanged = false;\n        // For each junction, try and move it.\n        while ((node = moveJunctionAlongCommonEdge(node, nodeMapHasChanged)))\n        {\n            if (node)\n            {\n                // Junction has moved, rewrite the pointer in\n                // the m_hyperedge_tree_junctions map.\n                curr->second = node;\n            }\n        }\n\n        if (nodeMapHasChanged)\n        {\n            // Objects have been added to m_hyperedge_tree_junctions and\n            // this may be earlier than our current iterator, so restart.\n            curr = m_hyperedge_tree_junctions.begin();\n        }\n        else\n        {\n            ++curr;\n        }\n    }\n}\n\n// This method traverses the hyperedge tree removing zero length edges.\n//\nvoid HyperedgeImprover::removeZeroLengthEdges(HyperedgeTreeEdge *self,\n        HyperedgeTreeNode *ignored)\n{\n    if (self->ends.first != ignored)\n    {\n        removeZeroLengthEdges(self->ends.first, self);\n    }\n\n    if (self->ends.second != ignored)\n    {\n        removeZeroLengthEdges(self->ends.second, self);\n    }\n}\n\n\n// This method traverses the hyperedge tree removing zero length edges.\n//\nvoid HyperedgeImprover::removeZeroLengthEdges(HyperedgeTreeNode *self,\n        HyperedgeTreeEdge *ignored)\n{\n    for (std::list<HyperedgeTreeEdge *>::iterator curr = self->edges.begin();\n            curr != self->edges.end(); ++curr)\n    {\n        HyperedgeTreeEdge *edge = *curr;\n        if (edge != ignored)\n        {\n            if (!edge->hasFixedRoute && edge->zeroLength())\n            {\n                HyperedgeTreeNode *other = edge->followFrom(self);\n                HyperedgeTreeNode *target = nullptr;\n                HyperedgeTreeNode *source = nullptr;\n                if (other->junction && ! self->junction)\n                {\n                    target = other;\n                    source = self;\n                }\n                else if ( ! other->junction && self->junction)\n                {\n                    target = self;\n                    source = other;\n                }\n                else if ( ! other->junction && ! self->junction)\n                {\n                    target = self;\n                    source = other;\n                }\n                else if ( other->junction && self->junction &&\n                        m_can_make_major_changes)\n                {\n                    // Only delete junctions if we can make major changes.\n\n#ifdef MAJOR_HYPEREDGE_IMPROVEMENT_DEBUG\n                    fprintf(stderr, \"HyperedgeImprover: Coalescing junctions \"\n                            \"%u and %u:\\n\", self->junction->id(),\n                            other->junction->id());\n                    fprintf(stderr, \"                   Deleted junction %u\\n\",\n                            other->junction->id());\n                    fprintf(stderr, \"                   Deleted connector %u\\n\",\n                            edge->conn->id());\n#endif\n\n                    // Delete one of the junctions.\n                    m_deleted_junctions.push_back(other->junction);\n                    m_hyperedge_tree_junctions.erase(other->junction);\n                    if (m_hyperedge_tree_roots.count(other->junction) > 0)\n                    {\n                        // If 'other' was the root for the hyperedge, we need\n                        // to make 'self' the new root.\n                        m_hyperedge_tree_roots.erase(other->junction);\n                        m_hyperedge_tree_roots.insert(self->junction);\n                        // It should already be in the junctions list.\n                        COLA_ASSERT(m_hyperedge_tree_junctions.\n                                count(self->junction) == 1);\n                    }\n                    other->junction = nullptr;\n\n                    // Delete the connector on the zero length edge.\n                    m_deleted_connectors.push_back(edge->conn);\n                    edge->conn = nullptr;\n\n                    target = self;\n                    source = other;\n                }\n\n                if (target)\n                {\n                    edge->disconnectEdge();\n                    delete edge;\n                    target->spliceEdgesFrom(source);\n                    delete source;\n                    removeZeroLengthEdges(target, ignored);\n                    return;\n                }\n            }\n\n            // Recursive call.\n            removeZeroLengthEdges(edge, self);\n        }\n    }\n}\n\n\n\n// Given a set of hyperedge shift segments in a particular dimension,\n// with limits and balance values precomputed, this method shifts and\n// merges segments to improve the overall cost (length + bend penalties)\n// for the hyperedge.\nvoid HyperedgeImprover::nudgeHyperedgeSegments(size_t dimension,\n        unsigned int& versionNumber)\n{\n    // For each hyperedge...\n    for (JunctionSet::iterator curr = m_hyperedge_tree_roots.begin();\n            curr != m_hyperedge_tree_roots.end(); ++curr)\n    {\n        ++m_debug_count;\n        versionNumber = (int)dimension * 10000;\n        versionNumber += m_debug_count * 1000;\n\n        // Calculate the balance for each shift segment.\n        ShiftSegmentList& segmentList = m_root_shift_segments[*curr];\n        for (ShiftSegmentList::iterator currSeg = segmentList.begin();\n                currSeg != segmentList.end(); )\n        {\n            HyperedgeShiftSegment *segment =\n                    static_cast<HyperedgeShiftSegment *> (*currSeg);\n            segment->setBalanceCount();\n\n            ++currSeg;\n        }\n\n        //segmentList.sort(CmpHyperedgeSegmentDirOrder);\n\n        bool change = false;\n        ShiftSegmentList::iterator currSeg = segmentList.begin();\n        while (currSeg != segmentList.end())\n        {\n            // While we haven't considered every segment...\n\n            HyperedgeShiftSegment *segment =\n                    static_cast<HyperedgeShiftSegment *> (*currSeg);\n\n            if ( ! segment->settled() )\n            {\n                // The segment is not settled, so move it to the next\n                // ideal position and then merge it with overlapping\n                // segments.  Note, the merged segment will have a new\n                // balance value calculated for it.\n                segment->adjustPosition();\n                outputHyperedgesToSVG(++versionNumber, segment);\n                mergeOverlappingSegments(segmentList);\n                change = true;\n            }\n\n            if (change)\n            {\n                // We made a change, so start again from the beginning\n                // of the list of segments.\n                change = false;\n                currSeg = segmentList.begin();\n            }\n            else\n            {\n                // Consider the next segment.\n                ++currSeg;\n            }\n        }\n    }\n}\n\n// Write the paths from an improved hyperedgetree object back as routes\n// to the component connectors that form the hyperedge.\nvoid HyperedgeImprover::writeHyperedgeSegmentsBackToConnPaths(void)\n{\n    // Write segments in two passes.  The first to clear the existing\n    // connector routes and the second to build and set new routes.\n    for (size_t pass = 0; pass < 2; ++pass)\n    {\n        for (JunctionSet::iterator curr = m_hyperedge_tree_roots.begin();\n                curr != m_hyperedge_tree_roots.end(); ++curr)\n        {\n            HyperedgeTreeNode *node = m_hyperedge_tree_junctions[*curr];\n\n            node->writeEdgesToConns(nullptr, pass);\n        }\n    }\n}\n\n// Output the hyperedge tree to an SVG file, optionally highlighting\n// a segment of interest (usually the segment being moved).\nvoid HyperedgeImprover::outputHyperedgesToSVG(unsigned int pass,\n        HyperedgeShiftSegment *activeSegment)\n{\n#ifndef HYPEREDGE_DEBUG\n    return;\n#endif\n\n    // Reasonable initial limit for diagram bounds.\n    const double LIMIT = 100000000;\n\n    std::stringstream filename;\n    filename << \"DEBUG/hyperedges-\" << std::setfill('0') << std::setw(5) << pass << \".svg\";\n    FILE *fp = fopen(filename.str().c_str(), \"w\");\n\n    double minX = LIMIT;\n    double minY = LIMIT;\n    double maxX = -LIMIT;\n    double maxY = -LIMIT;\n\n    VertInf *curr = m_router->vertices.connsBegin();\n    while (curr)\n    {\n        Point p = curr->point;\n\n        if (p.x > -LIMIT)\n        {\n            minX = std::min(minX, p.x);\n        }\n        if (p.x < LIMIT)\n        {\n            maxX = std::max(maxX, p.x);\n        }\n        if (p.y > -LIMIT)\n        {\n            minY = std::min(minY, p.y);\n        }\n        if (p.y < LIMIT)\n        {\n            maxY = std::max(maxY, p.y);\n        }\n        curr = curr->lstNext;\n    }\n    minX -= 50;\n    minY -= 50;\n    maxX += 50;\n    maxY += 50;\n\n\n    fprintf(fp, \"<?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?>\\n\");\n    fprintf(fp, \"<svg xmlns:inkscape=\\\"http://www.inkscape.org/namespaces/inkscape\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"100%%\\\" height=\\\"100%%\\\" viewBox=\\\"%g %g %g %g\\\">\\n\", minX, minY, maxX - minX, maxY - minY);\n\n    fprintf(fp, \"<g inkscape:groupmode=\\\"layer\\\" \"\n            \"inkscape:label=\\\"ShapesRect\\\">\\n\");\n    ObstacleList::iterator obstacleIt = m_router->m_obstacles.begin();\n    while (obstacleIt != m_router->m_obstacles.end())\n    {\n        Obstacle *obstacle = *obstacleIt;\n        bool isShape = (nullptr != dynamic_cast<ShapeRef *> (obstacle));\n\n        if ( ! isShape )\n        {\n            // Don't output obstacles here, for now.\n            ++obstacleIt;\n            continue;\n        }\n\n        Box bBox = obstacle->polygon().offsetBoundingBox(0.0);\n\n        fprintf(fp, \"<rect id=\\\"rect-%u\\\" x=\\\"%g\\\" y=\\\"%g\\\" width=\\\"%g\\\" \"\n                \"height=\\\"%g\\\" style=\\\"stroke-width: 1px; stroke: %s; \"\n                \"fill: blue; fill-opacity: 0.3;\\\" />\\n\",\n                obstacle->id(), bBox.min.x, bBox.min.y,\n                bBox.max.x - bBox.min.x, bBox.max.y - bBox.min.y,\n                (isShape) ? \"blue\" : \"red\");\n        ++obstacleIt;\n    }\n    fprintf(fp, \"</g>\\n\");\n\n    fprintf(fp, \"<g inkscape:groupmode=\\\"layer\\\" \"\n            \"inkscape:label=\\\"Hyperedge-%u\\\">\\n\", pass);\n    if (activeSegment)\n    {\n        fprintf(fp, \"<path d=\\\"M %g %g L %g %g\\\" \"\n            \"style=\\\"fill: none; stroke: %s; stroke-width: 12px; \"\n            \"stroke-opacity: 0.5;\\\" />\\n\",\n            activeSegment->lowPoint().x, activeSegment->lowPoint().y,\n            activeSegment->highPoint().x, activeSegment->highPoint().y,\n            activeSegment->settled() ? \"red\" : \"orange\");\n    }\n\n    for (JunctionSet::iterator curr = m_hyperedge_tree_roots.begin();\n            curr != m_hyperedge_tree_roots.end(); ++curr)\n    {\n        HyperedgeTreeNode *node = m_hyperedge_tree_junctions[*curr];\n\n        node->outputEdgesExcept(fp, nullptr);\n    }\n    fprintf(fp, \"</g>\\n\");\n    fprintf(fp, \"</svg>\\n\");\n\n    fclose(fp);\n}\n\n// Given a junction, this method follows the attached connectors and\n// junctions to determine a hyperedge and returns the set of vertices\n// representing its endpoints.\nvoid HyperedgeImprover::getEndpoints(JunctionRef *junction, JunctionRef *ignore,\n        std::set<VertInf *>& endpoints)\n{\n    for (std::set<ConnEnd *>::iterator curr =\n            junction->m_following_conns.begin();\n            curr != junction->m_following_conns.end(); ++curr)\n    {\n        ConnEnd *connEnd = *curr;\n        COLA_ASSERT(connEnd->m_conn_ref != nullptr);\n        ConnRef *connRef = connEnd->m_conn_ref;\n        std::pair<Obstacle *, Obstacle *> anchors =\n                connRef->endpointAnchors();\n\n        JunctionRef *junction1 =\n                dynamic_cast<JunctionRef *> (anchors.first);\n        if (junction1)\n        {\n            if (junction1 != junction && junction1 != ignore)\n            {\n                getEndpoints(junction1, junction, endpoints);\n            }\n        }\n        else\n        {\n            endpoints.insert(connRef->m_src_vert);\n        }\n\n        JunctionRef *junction2 =\n                dynamic_cast<JunctionRef *> (anchors.second);\n        if (junction2)\n        {\n            if (junction2 != junction && junction2 != ignore)\n            {\n                getEndpoints(junction2, junction, endpoints);\n            }\n        }\n        else\n        {\n            endpoints.insert(connRef->m_dst_vert);\n        }\n    }\n}\n\n// Execute local improvement process.\nvoid HyperedgeImprover::execute(bool canMakeMajorChanges)\n{\n    m_can_make_major_changes = canMakeMajorChanges;\n\n    // Build Hyperedge trees.\n    ConnRefList::iterator connRefIt = m_router->connRefs.begin();\n    while (connRefIt != m_router->connRefs.end())\n    {\n        ConnRef *connRef = *connRefIt;\n        JunctionRef *jFront = nullptr;\n        JunctionRef *jBack = nullptr;\n\n        if (connRef->m_src_connend)\n        {\n            jFront = connRef->m_src_connend->junction();\n        }\n\n        if (connRef->m_dst_connend)\n        {\n            jBack = connRef->m_dst_connend->junction();\n        }\n\n        if ( ! jFront && ! jBack )\n        {\n            ++connRefIt;\n            continue;\n        }\n\n        bool seenFront = (m_hyperedge_tree_junctions.find(jFront) !=\n                m_hyperedge_tree_junctions.end());\n        bool seenBack = (m_hyperedge_tree_junctions.find(jBack) !=\n                m_hyperedge_tree_junctions.end());\n\n        HyperedgeTreeNode *nodeFront = nullptr;\n        HyperedgeTreeNode *nodeBack = nullptr;\n\n        if (jFront)\n        {\n            if ( ! seenFront)\n            {\n                nodeFront = new HyperedgeTreeNode();\n                nodeFront->point = jFront->position();\n                nodeFront->junction = jFront;\n\n                m_hyperedge_tree_junctions[jFront] = nodeFront;\n            }\n            else\n            {\n                nodeFront = m_hyperedge_tree_junctions[jFront];\n            }\n        }\n        else\n        {\n            nodeFront = new HyperedgeTreeNode();\n        }\n\n        if (jBack)\n        {\n            if ( ! seenBack)\n            {\n                nodeBack = new HyperedgeTreeNode();\n                nodeBack->point = jBack->position();\n                nodeBack->junction = jBack;\n\n                m_hyperedge_tree_junctions[jBack] = nodeBack;\n            }\n            else\n            {\n                nodeBack = m_hyperedge_tree_junctions[jBack];\n            }\n        }\n        else\n        {\n            nodeBack = new HyperedgeTreeNode();\n        }\n\n        PolyLine& route = connRef->displayRoute();\n        HyperedgeTreeNode *prev = nullptr;\n        for (unsigned int i = 1; i < route.size(); ++i)\n        {\n            HyperedgeTreeNode *node;\n            if (i + 1 == route.size())\n            {\n                node = nodeBack;\n            }\n            else\n            {\n                node = new HyperedgeTreeNode();\n            }\n            node->point = route.at(i);\n            if (i == 1)\n            {\n                prev = nodeFront;\n                nodeFront->point = route.at(0);\n                nodeFront->isConnectorSource = true;\n            }\n            new HyperedgeTreeEdge(prev, node, connRef);\n            prev = node;\n        }\n        ++connRefIt;\n    }\n\n    // Make a list that contains a single junction from each tree.\n    for (JunctionHyperedgeTreeNodeMap::iterator curr =\n            m_hyperedge_tree_junctions.begin();\n            curr != m_hyperedge_tree_junctions.end(); ++curr)\n    {\n        HyperedgeTreeNode *node = curr->second;\n        m_hyperedge_tree_roots.insert(node->junction);\n    }\n    JunctionRefList cyclicHyperedgeTreeRoots;\n    for (JunctionSet::iterator curr = m_hyperedge_tree_roots.begin();\n            curr != m_hyperedge_tree_roots.end(); ++curr)\n    {\n        HyperedgeTreeNode *node = m_hyperedge_tree_junctions[*curr];\n        bool containsCycle = node->removeOtherJunctionsFrom(nullptr,\n                m_hyperedge_tree_roots);\n        if (containsCycle)\n        {\n            // This hyperedge has a cycle.  We will need to remove it.\n            cyclicHyperedgeTreeRoots.push_back(node->junction);\n        }\n    }\n    // Remove roots of cyclic hyperedges, we can't improve these.\n    for (JunctionRefList::iterator curr = cyclicHyperedgeTreeRoots.begin();\n            curr != cyclicHyperedgeTreeRoots.end(); ++curr)\n    {\n        JunctionRef *junction = *curr;\n        err_printf(\"Warning: Skipping cyclic hyperedge rooted at junction %u\\n\",\n                junction->id());\n        m_hyperedge_tree_roots.erase(junction);\n    }\n\n    TIMER_START(m_router, tmHyperedgeImprove);\n\n    // Debug output.\n    unsigned int versionNumber = 1;\n    outputHyperedgesToSVG(versionNumber);\n\n    // Remove zero length edges.\n    removeZeroLengthEdges();\n\n    // Move junctions to divergence points.\n    moveJunctionsAlongCommonEdges();\n\n    // Debug output.\n    outputHyperedgesToSVG(++versionNumber);\n\n    for (size_t count = 0; count < 4; ++count)\n    {\n        size_t dimension = count % 2;\n\n        // Set a version number for debug output.\n        versionNumber = 100 * (int)(dimension + 1);\n\n        // Build shift segments.\n        buildHyperedgeSegments(dimension);\n        // Calculate channel information for this dimension.\n        buildOrthogonalChannelInfo(m_router, dimension, m_all_shift_segments);\n        // Nudge hyperedge segments to locally improve the route.\n        nudgeHyperedgeSegments(dimension, versionNumber);\n        // Remove resulting zero length edges.\n        removeZeroLengthEdges();\n        // Move junctions to divergence points.\n        moveJunctionsAlongCommonEdges();\n        // Debug output.\n        outputHyperedgesToSVG(++versionNumber);\n\n        // Clean up shift segments.\n        for (JunctionSet::iterator curr = m_hyperedge_tree_roots.begin();\n                curr != m_hyperedge_tree_roots.end(); ++curr)\n        {\n            ShiftSegmentList& segmentList = m_root_shift_segments[*curr];\n            for_each(segmentList.begin(), segmentList.end(),\n                    delete_object());\n        }\n        m_root_shift_segments.clear();\n        m_all_shift_segments.clear();\n    }\n\n    // Rewrite updated connector attachments to junctions.\n    if (m_can_make_major_changes)\n    {\n        for (JunctionSet::iterator curr = m_hyperedge_tree_roots.begin();\n                curr != m_hyperedge_tree_roots.end(); ++curr)\n        {\n            HyperedgeTreeNode *treeRoot = m_hyperedge_tree_junctions[*curr];\n            COLA_ASSERT(treeRoot);\n            treeRoot->updateConnEnds(nullptr, m_router, m_changed_connectors);\n\n            // Validate the rewrtten connections.\n            treeRoot->validateHyperedge(nullptr, 0);\n        }\n    }\n\n    // Write back final recommended positions to junctions.\n    for (JunctionHyperedgeTreeNodeMap::iterator curr =\n            m_hyperedge_tree_junctions.begin();\n            curr != m_hyperedge_tree_junctions.end(); ++curr)\n    {\n        HyperedgeTreeNode *node = curr->second;\n\n        node->junction->setRecommendedPosition(node->point);\n    }\n\n    // Write paths from the hyperedge tree back into individual\n    // connector routes.\n    writeHyperedgeSegmentsBackToConnPaths();\n\n    // Free HyperedgeTree structure.\n    for (JunctionSet::iterator curr = m_hyperedge_tree_roots.begin();\n            curr != m_hyperedge_tree_roots.end(); ++curr)\n    {\n        HyperedgeTreeNode *node = m_hyperedge_tree_junctions[*curr];\n\n        node->deleteEdgesExcept(nullptr);\n        delete node;\n    }\n\n    // Tell the router that we are deleting the objects used for the\n    // previous path for the hyperedge.\n    for (ConnRefList::iterator curr = m_deleted_connectors.begin();\n            curr != m_deleted_connectors.end(); ++curr)\n    {\n        // Clear visibility assigned for connection pins.\n        (*curr)->assignConnectionPinVisibility(false);\n\n        m_router->deleteConnector(*curr);\n    }\n    for (JunctionRefList::iterator curr = m_deleted_junctions.begin();\n            curr != m_deleted_junctions.end(); ++curr)\n    {\n        m_router->deleteJunction(*curr);\n    }\n\n    TIMER_STOP(m_router);\n}\n\n\nHyperedgeNewAndDeletedObjectLists\n        HyperedgeImprover::newAndDeletedObjectLists(void) const\n{\n    HyperedgeNewAndDeletedObjectLists result;\n\n    result.newJunctionList = m_new_junctions;\n    result.deletedJunctionList = m_deleted_junctions;\n    result.newConnectorList = m_new_connectors;\n    result.deletedConnectorList = m_deleted_connectors;\n    result.changedConnectorList = m_changed_connectors;\n\n    return result;\n}\n\n\n// This method moves the junction at the given node along any shared paths\n// (so long as this action would not create any additional shared paths),\n// while also removing and freeing merged edges and nodes in the process.\n// It returns the new node where the junction is now located.\n//\nHyperedgeTreeNode *HyperedgeImprover::moveJunctionAlongCommonEdge(\n        HyperedgeTreeNode *self, bool& nodeMapHasChanged)\n{\n    COLA_ASSERT(self->junction);\n\n    HyperedgeTreeNode *newSelf = nullptr;\n    std::vector<HyperedgeTreeEdge *> commonEdges;\n    std::vector<HyperedgeTreeEdge *> otherEdges;\n\n    // Consider each edge from this node in turn.\n    for (std::list<HyperedgeTreeEdge *>::iterator curr = self->edges.begin();\n            curr != self->edges.end(); ++curr)\n    {\n        HyperedgeTreeEdge *currEdge = *curr;\n        HyperedgeTreeNode *currNode = currEdge->followFrom(self);\n        commonEdges.clear();\n        otherEdges.clear();\n\n        if (currNode->junction)\n        {\n            // Don't shift junctions onto other junctions.\n            continue;\n        }\n        if (currEdge->hasFixedRoute)\n        {\n            // Don't move junctions along fixed edges.\n            continue;\n        }\n\n        // The current edge is a common edge we are looking to shift along.\n        commonEdges.push_back(currEdge);\n\n        // Consider each of the other edges.\n        for (std::list<HyperedgeTreeEdge *>::iterator curr2 =\n                self->edges.begin(); curr2 != self->edges.end(); ++curr2)\n        {\n            if (curr == curr2)\n            {\n                // Except the current (curr) one.\n                continue;\n            }\n\n            HyperedgeTreeEdge *otherEdge = *curr2;\n            if (otherEdge->hasFixedRoute)\n            {\n                // Don't shift junctions along fixed route connectors.\n                otherEdges.push_back(otherEdge);\n                continue;\n            }\n\n            HyperedgeTreeNode *otherNode = otherEdge->followFrom(self);\n            if (otherNode->point == currNode->point)\n            {\n                // A common edge can be at the same point, but can't have\n                // a junction at it.\n                if (otherNode->junction)\n                {\n                    otherEdges.push_back(otherEdge);\n                }\n                else\n                {\n                    commonEdges.push_back(otherEdge);\n                }\n            }\n            else if (pointOnLine(self->point, otherNode->point,\n                    currNode->point))\n            {\n                // A common edge can be a (longer) collinear line, but we\n                // need to split the longer line at the other end of curr.\n                otherEdge->splitFromNodeAtPoint(self, currNode->point);\n                commonEdges.push_back(otherEdge);\n            }\n            else\n            {\n                // If the edge goes in another direction it is not common.\n                otherEdges.push_back(otherEdge);\n            }\n        }\n\n        // For the purpose of these changes a junction is considered fixed\n        // only when not performing major improvements.\n        bool selfFixed = self->junction->positionFixed() &&\n                !m_can_make_major_changes;\n\n        if ((commonEdges.size() > 1) && (otherEdges.size() <= 1) && !selfFixed)\n        {\n            // One of the common nodes becomes the target node, we move\n            // all connections from the other common nodes to this node.\n            // We also move the junction there and remove it from the\n            // current node.\n            HyperedgeTreeNode *targetNode = commonEdges[0]->followFrom(self);\n            for (size_t i = 1; i < commonEdges.size(); ++i)\n            {\n                HyperedgeTreeNode *thisNode = commonEdges[i]->followFrom(self);\n                commonEdges[i]->disconnectEdge();\n                targetNode->spliceEdgesFrom(thisNode);\n                delete thisNode;\n                delete commonEdges[i];\n            }\n            targetNode->junction = self->junction;\n            self->junction = nullptr;\n\n            if (otherEdges.empty())\n            {\n                // Nothing else connected to this node, so remove the node\n                // and the edge to the target node.\n                commonEdges[0]->disconnectEdge();\n\n                delete commonEdges[0];\n                delete self;\n            }\n            else\n            {\n                // We need to mark commonEdges[0] as being from the connector\n                // of the otherEdges[0].\n                commonEdges[0]->conn = otherEdges[0]->conn;\n            }\n            newSelf = targetNode;\n\n            break;\n        }\n        else if (m_can_make_major_changes && (commonEdges.size() > 1) &&\n                (otherEdges.size() > 1))\n        {\n            // Case where this is one junction we need to split into two,\n            // because we have a common path leading to it that we want to\n            // move the junction along, but multiple other edges leaving\n            // this junction that need to stay in place.\n\n            // One of the common nodes becomes the target node, we move\n            // all connections from the other common nodes to this node.\n            // We will also create a new junction there.\n            HyperedgeTreeNode *targetNode = commonEdges[0]->followFrom(self);\n            for (size_t i = 1; i < commonEdges.size(); ++i)\n            {\n                HyperedgeTreeNode *thisNode = commonEdges[i]->followFrom(self);\n                commonEdges[i]->disconnectEdge();\n                targetNode->spliceEdgesFrom(thisNode);\n                delete thisNode;\n                delete commonEdges[i];\n            }\n\n            // Create the additional junction at the target node for\n            // the otherEdges to attach to.\n            targetNode->junction = new JunctionRef(m_router, targetNode->point);\n            m_router->removeObjectFromQueuedActions(targetNode->junction);\n            targetNode->junction->makeActive();\n            m_hyperedge_tree_junctions[targetNode->junction] = targetNode;\n            nodeMapHasChanged = true;\n            m_new_junctions.push_back(targetNode->junction);\n\n            // And we create a new connector between the original junction\n            // and the new junction.\n            ConnRef *conn = new ConnRef(m_router);\n            m_router->removeObjectFromQueuedActions(conn);\n            conn->makeActive();\n            conn->m_initialised = true;\n            ConnEnd srcConnend(targetNode->junction);\n            conn->updateEndPoint(VertID::src, srcConnend);\n            ConnEnd tarConnend(self->junction);\n            conn->updateEndPoint(VertID::tar, tarConnend);\n            commonEdges[0]->conn = conn;\n            m_new_connectors.push_back(conn);\n\n#ifdef MAJOR_HYPEREDGE_IMPROVEMENT_DEBUG\n            fprintf(stderr, \"HyperedgeImprover: Split junction %u:\\n\",\n                    self->junction->id());\n            fprintf(stderr, \"                   Added junction %u\\n\",\n                    targetNode->junction->id());\n            fprintf(stderr, \"                   Added connector %u \"\n                    \"(between junctions %u and %u)\\n\", conn->id(),\n                    self->junction->id(), targetNode->junction->id());\n#endif\n\n            newSelf = self;\n\n            break;\n        }\n    }\n\n    return newSelf;\n}\n\n\n\n\n}\n"
  },
  {
    "path": "cola/libavoid/hyperedgeimprover.h",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libavoid - Fast, Incremental, Object-avoiding Line Router\n *\n * Copyright (C) 2011-2014  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * Licensees holding a valid commercial license may use this file in\n * accordance with the commercial license agreement provided with the \n * library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  \n *\n * Author(s):   Michael Wybrow\n*/\n\n#ifndef AVOID_IMPROVEHYPEREDGES_H\n#define AVOID_IMPROVEHYPEREDGES_H\n\n#include <map>\n#include <set>\n#include <list>\n\n\nnamespace Avoid {\n\nstruct HyperedgeTreeNode;\nstruct HyperedgeTreeEdge;\nclass HyperedgeShiftSegment;\nclass ConnRef;\nclass JunctionRef;\nclass ShiftSegment;\nclass VertInf;\n\ntypedef std::list<ShiftSegment *> ShiftSegmentList;\ntypedef std::map<JunctionRef *, ShiftSegmentList> RootSegmentsMap;\ntypedef std::map<JunctionRef *, HyperedgeTreeNode *>\n        JunctionHyperedgeTreeNodeMap;\ntypedef std::set<JunctionRef *> JunctionSet;\ntypedef std::list<ConnRef *> ConnRefList;\ntypedef std::list<JunctionRef *> JunctionRefList;\n\nclass HyperedgeImprover\n{\npublic:\n    // Constructor.\n    HyperedgeImprover();\n    \n    void clear(void);\n\n    // Set the router that this HyperedgeImprover will act upon.\n    void setRouter(Router *router);\n\n    // Returns lists of junctions and connectors created and deleted during \n    // hyperedge improvement.\n    HyperedgeNewAndDeletedObjectLists newAndDeletedObjectLists(void) const;\n\n    // Execute local improvement process.\n    void execute(bool canMakeMajorChanges);\n\nprivate:\n    // Helper method for buildHyperedgeSegments() for hyperedge tree nodes.\n    void createShiftSegmentsForDimensionExcluding(HyperedgeTreeNode *node,\n            const size_t dim, HyperedgeTreeEdge *ignore, \n            ShiftSegmentList& segments);\n\n    // Helper method for buildHyperedgeSegments() for hyperedge tree edges.\n    void createShiftSegmentsForDimensionExcluding(HyperedgeTreeEdge *edge,\n            const size_t dim, HyperedgeTreeNode *ignore, \n            ShiftSegmentList& segments);\n\n    // During creation and nudging of shift segments it is often necessary\n    // to merge collinear or overlapping segments.  This method does the\n    // merging for these cases.  Effectively merging is done by adding\n    // additional vertex pointers to the shift segment.\n    void mergeOverlappingSegments(ShiftSegmentList& segments);\n\n    // Given a hyperedge tree and a dimension, this method creates shift\n    // segments for all edges in that orientation.  These segments are the\n    // objects on which the local improvement nudging operates, and they\n    // in turn make changes back to the hyperedge tree.\n    void buildHyperedgeSegments(const size_t dim);\n\n    // This method looks for and corrects situations where the middle section\n    // of a zigzag is optimised away by bringing the outside segments in line\n    // and leading to the middle segment being zero length.  These zero length\n    // edges are removed.\n    void removeZeroLengthEdges(void);\n\n    // This method looks for and correct situations where multiple overlapping\n    // edges lead to a junction and one or more of these segments could be\n    // removed by moving the junction (and thus divergence point) along the\n    // edge.\n    void moveJunctionsAlongCommonEdges(void);\n\n    // Given a set of hyperedge shift segments in a particular dimension,\n    // with limits and balance values precomputed, this method shifts and\n    // merges segments to improve the overall cost (length + bend penalties)\n    // for the hyperedge.\n    void nudgeHyperedgeSegments(size_t dimension, unsigned int& versionNumber);\n\n    // Write the paths from an improved hyperedgetree object back as routes\n    // to the component connectors that form the hyperedge.\n    void writeHyperedgeSegmentsBackToConnPaths(void);\n\n    // Output the hyperedge tree to an SVG file, optionally highlighting\n    // a segment of interest (usually the segment being moved).\n    void outputHyperedgesToSVG(unsigned int pass,\n            HyperedgeShiftSegment *activeSegment = nullptr);\n\n    // Given a junction, this method follows the attached connectors and\n    // junctions to determine a hyperedge and returns the set of vertices\n    // representing its endpoints.\n    void getEndpoints(JunctionRef *junction, JunctionRef *ignore,\n            std::set<VertInf *>& endpoints);\n\n    // This method moves the junction at the given node along any shared paths\n    // (so long as this action would not create any additional shared paths),\n    // while also removing and freeing merged edges and nodes in the process.\n    // It returns the new node where the junction is now located.\n    HyperedgeTreeNode *moveJunctionAlongCommonEdge(HyperedgeTreeNode *self,\n             bool& nodeMapHasChanged);\n\n    // This method traverses the hyperedge tree removing zero length edges.\n    //\n    void removeZeroLengthEdges(HyperedgeTreeNode *self, \n            HyperedgeTreeEdge *ignored);\n\n    // This method traverses the hyperedge tree removing zero length edges.\n    //\n    void removeZeroLengthEdges(HyperedgeTreeEdge *self,\n            HyperedgeTreeNode *ignored);\n    \n    Router *m_router;\n    JunctionHyperedgeTreeNodeMap m_hyperedge_tree_junctions;\n    JunctionSet m_hyperedge_tree_roots;\n    RootSegmentsMap m_root_shift_segments;\n    ShiftSegmentList m_all_shift_segments;\n    JunctionRefList m_new_junctions;\n    JunctionRefList m_deleted_junctions;\n    ConnRefList m_new_connectors;\n    ConnRefList m_deleted_connectors;\n    ConnRefList m_changed_connectors;\n    int m_debug_count;\n    bool m_can_make_major_changes;\n};\n\n\n}\n#endif\n\n"
  },
  {
    "path": "cola/libavoid/hyperedgetree.cpp",
    "content": "/* \n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libavoid - Fast, Incremental, Object-avoiding Line Router\n *\n * Copyright (C) 2011-2014  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * Licensees holding a valid commercial license may use this file in\n * accordance with the commercial license agreement provided with the \n * library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  \n *\n * Author(s):  Michael Wybrow\n*/\n\n#include <algorithm>\n\n#include \"libavoid/hyperedgetree.h\"\n#include \"libavoid/geometry.h\"\n#include \"libavoid/connector.h\"\n#include \"libavoid/router.h\"\n#include \"libavoid/connend.h\"\n#include \"libavoid/assertions.h\"\n#include \"libavoid/junction.h\"\n#include \"libavoid/debughandler.h\"\n\nnamespace Avoid {\n\n\n// Constructs a new hyperedge tree node.\n//\nHyperedgeTreeNode::HyperedgeTreeNode()\n    : junction(nullptr),\n      shiftSegmentNodeSet(nullptr),\n      finalVertex(nullptr),\n      isConnectorSource(false),\n      isPinDummyEndpoint(false),\n      visited(false)\n{\n}\n\nHyperedgeTreeNode::~HyperedgeTreeNode()\n{\n    if (shiftSegmentNodeSet)\n    {\n        shiftSegmentNodeSet->erase(this);\n        shiftSegmentNodeSet = nullptr;\n    }\n}\n\n\n// This method traverses the hyperedge tree and outputs each of the edges\n// and junction positions as SVG objects to the file fp.\n//\nvoid HyperedgeTreeNode::outputEdgesExcept(FILE *fp, HyperedgeTreeEdge *ignored)\n{\n    if (junction)\n    {\n        fprintf(fp, \"<circle cx=\\\"%g\\\" cy=\\\"%g\\\" r=\\\"6\\\" \"\n            \"style=\\\"fill: green; stroke: none;\\\" />\\n\", point.x, point.y);\n    }\n    for (std::list<HyperedgeTreeEdge *>::iterator curr = edges.begin();\n            curr != edges.end(); ++curr)\n    {\n        if (*curr != ignored)\n        {\n            (*curr)->outputNodesExcept(fp, this);\n        }\n    }\n}\n\n\n// This method traverses the hyperedge tree and removes from treeRoots any\n// junction nodes (other than this one).\n\nbool HyperedgeTreeNode::removeOtherJunctionsFrom(HyperedgeTreeEdge *ignored, \n            JunctionSet& treeRoots)\n{\n    bool containsCycle = false;\n    if (visited)\n    {\n        // We've encountered this node before, so there must be cycles in\n        // the hyperedge.  Don't recurse any further.\n        containsCycle = true;\n        return containsCycle;\n    }\n    \n    if (junction && (ignored != nullptr))\n    {\n        // Remove junctions other than the first (when ignored == nullptr).\n        treeRoots.erase(junction);\n    }\n    visited = true;\n    for (std::list<HyperedgeTreeEdge *>::iterator curr = edges.begin();\n            curr != edges.end(); ++curr)\n    {\n        if (*curr != ignored)\n        {\n            containsCycle |= (*curr)->removeOtherJunctionsFrom(this, treeRoots);\n        }\n    }\n    return containsCycle;\n}\n\n\n// This method traverses the hyperedge tree and writes each of the paths\n// back to the individual connectors as routes.\n//\nvoid HyperedgeTreeNode::writeEdgesToConns(HyperedgeTreeEdge *ignored,\n        size_t pass)\n{\n    for (std::list<HyperedgeTreeEdge *>::iterator curr = edges.begin();\n            curr != edges.end(); ++curr)\n    {\n        if (*curr != ignored)\n        {\n            (*curr)->writeEdgesToConns(this, pass);\n        }\n    }\n}\n\n// This method traverses the hyperedge tree and creates connectors for each\n// segment bridging junction and/or terminals.  It also sets the \n// appropriate ConnEnds for each connector.\n//\nvoid HyperedgeTreeNode::addConns(HyperedgeTreeEdge *ignored, Router *router,\n        ConnRefList& oldConns, ConnRef *conn)\n{\n    // If no connector is set, then we must be starting off at a junction.\n    COLA_ASSERT(conn || junction);\n\n    for (std::list<HyperedgeTreeEdge *>::iterator curr = edges.begin();\n            curr != edges.end(); ++curr)\n    {\n        if (*curr != ignored)\n        {\n            // If we're not at a junction, then use the connector value being\n            // passed in to the method.\n\n            if (junction)\n            {\n                // If we're at a junction, then we are effectively starting\n                // our traversal along a connector, so create this new connector\n                // and set it's start ConnEnd to be this junction.\n                conn = new ConnRef(router);\n                router->removeObjectFromQueuedActions(conn);\n                conn->makeActive();\n                conn->m_initialised = true;\n                ConnEnd connend(junction);\n                conn->updateEndPoint(VertID::src, connend);\n            }\n    \n            // Set the connector for this edge.\n            (*curr)->conn = conn;\n            \n            // Continue recursive traversal.\n            (*curr)->addConns(this, router, oldConns);\n        }\n    }\n}\n\nstatic bool travellingForwardOnConnector(ConnRef *conn, JunctionRef *junction)\n{\n    std::pair<ConnEnd, ConnEnd> connEnds = conn->endpointConnEnds();\n\n    if (connEnds.first.junction() == junction)\n    {\n        return true;\n    }\n    if (connEnds.second.junction() == junction)\n    {\n        return false;\n    }\n    if (connEnds.first.type() != ConnEndJunction &&\n        connEnds.first.type() != ConnEndEmpty)\n    {\n        return false;\n    }\n    if (connEnds.second.type() != ConnEndJunction &&\n        connEnds.second.type() != ConnEndEmpty)\n    {\n        return true;\n    }\n    return true;\n}\n\n// This method traverses the hyperedge tree and rewrites connector ends\n// that may have changed junctions due to major hyperedge improvement.\n//\nvoid HyperedgeTreeNode::updateConnEnds(HyperedgeTreeEdge *ignored, \n        bool forward, ConnRefList& changedConns)\n{\n    for (std::list<HyperedgeTreeEdge *>::iterator curr = edges.begin();\n            curr != edges.end(); ++curr)\n    {\n        HyperedgeTreeEdge *edge = *curr;\n        if (edge != ignored)\n        {\n            if (junction)\n            {\n                // If we're at a junction, then we are effectively starting\n                // our traversal along a connector, so create this new connector\n                // and set it's start ConnEnd to be this junction.\n                forward = travellingForwardOnConnector(edge->conn, junction);\n\n                std::pair<ConnEnd, ConnEnd> existingEnds = \n                        edge->conn->endpointConnEnds();\n                ConnEnd existingEnd = (forward) ? \n                        existingEnds.first : existingEnds.second;\n                if (existingEnd.junction() != junction)\n                {\n#ifdef MAJOR_HYPEREDGE_IMPROVEMENT_DEBUG\n                    fprintf(stderr, \"HyperedgeImprover: changed %s of \"\n                            \"connector %u (from junction %u to %u)\\n\", \n                            (forward) ? \"src\" : \"tar\", edge->conn->id(),\n                            existingEnd.junction()->id(), junction->id());\n#endif\n                    unsigned short end = (forward) ? VertID::src : VertID::tar;\n                    ConnEnd connend(junction);\n                    edge->conn->updateEndPoint(end, connend);\n                    changedConns.push_back(edge->conn);\n                }\n            }\n    \n            // Continue recursive traversal.\n            edge->updateConnEnds(this, forward, changedConns);\n        }\n    }\n}\n\n\n// This method traverses the hyperedge tree and returns a list of the junctions\n// and connectors that make up the hyperedge.\n//\nvoid HyperedgeTreeNode::listJunctionsAndConnectors(HyperedgeTreeEdge *ignored,\n        JunctionRefList& junctions, ConnRefList& connectors)\n{\n    if (junction)\n    {\n        junctions.push_back(junction);\n    }\n\n    for (std::list<HyperedgeTreeEdge *>::iterator curr = edges.begin();\n            curr != edges.end(); ++curr)\n    {\n        if (*curr != ignored)\n        {\n            (*curr)->listJunctionsAndConnectors(this, junctions, connectors);\n        }\n    }\n}\n\n\nvoid HyperedgeTreeNode::validateHyperedge(const HyperedgeTreeEdge *ignored, \n        const size_t dist) const \n{\n    size_t newDist = dist;\n#ifdef MAJOR_HYPEREDGE_IMPROVEMENT_DEBUG\n    if (junction)\n    {\n        if (newDist == 0)\n        {\n            fprintf(stderr,\"\\nHyperedge topology:\\n\");\n        }\n        else\n        {\n            ++newDist;\n        }\n        for (size_t d = 0; d < newDist; ++d)\n        {\n            fprintf(stderr,\"  \");\n        }\n        fprintf(stderr, \"j(%d)\\n\", junction->id());\n        ++newDist;\n    }\n    else if (edges.size() == 1)\n    {\n        ++newDist;\n        for (size_t d = 0; d < newDist; ++d)\n        {\n            fprintf(stderr, \"  \");\n        }\n        fprintf(stderr, \"t()\\n\");\n        ++newDist;\n    }\n#endif\n    for (std::list<HyperedgeTreeEdge *>::const_iterator curr = edges.begin();\n            curr != edges.end(); ++curr)\n    {\n        HyperedgeTreeEdge *edge = *curr;\n        std::pair<ConnEnd, ConnEnd> connEnds = edge->conn->endpointConnEnds();\n\n        if (junction)\n        {\n            COLA_ASSERT((connEnds.first.junction() == junction) ||\n                        (connEnds.second.junction() == junction));\n            COLA_ASSERT(connEnds.first.junction() != connEnds.second.junction());\n        }\n        else if (edges.size() == 1)\n        {\n            COLA_ASSERT(!connEnds.first.junction() || \n                        !connEnds.second.junction());\n        }\n        \n        if (edge != ignored)\n        {\n            edge->validateHyperedge(this, newDist);\n        }\n    }\n}\n\n\n// This method traverses the hyperedge tree, clearing up the objects and\n// memory used to store the tree.\n//\nvoid HyperedgeTreeNode::deleteEdgesExcept(HyperedgeTreeEdge *ignored)\n{\n    for (std::list<HyperedgeTreeEdge *>::iterator curr = edges.begin();\n            curr != edges.end(); ++curr)\n    {\n        if (*curr != ignored)\n        {\n            (*curr)->deleteNodesExcept(this);\n            delete *curr;\n        }\n    }\n    edges.clear();\n}\n\n\n// This method disconnects a specific hyperedge tree edge from the given node.\n//\nvoid HyperedgeTreeNode::disconnectEdge(HyperedgeTreeEdge *edge)\n{\n    for (std::list<HyperedgeTreeEdge *>::iterator curr = edges.begin();\n            curr != edges.end(); )\n    {\n        if (*curr == edge)\n        {\n            curr = edges.erase(curr);\n        }\n        else\n        {\n            ++curr;\n        }\n    }\n\n}\n\n\n// This method moves all edges attached to oldNode to instead be attached to\n// the given hyperedge tree node.\n//\nvoid HyperedgeTreeNode::spliceEdgesFrom(HyperedgeTreeNode *oldNode)\n{\n    COLA_ASSERT(oldNode != this);\n    for (std::list<HyperedgeTreeEdge *>::iterator curr = oldNode->edges.begin();\n            curr != oldNode->edges.end(); curr = oldNode->edges.begin())\n    {\n        (*curr)->replaceNode(oldNode, this);\n    }\n}\n\n\nbool HyperedgeTreeNode::isImmovable(void) const\n{\n    if ((edges.size() == 1) || (junction && junction->positionFixed()))\n    {\n        return true;\n    }\n    for (std::list<HyperedgeTreeEdge *>::const_iterator curr = edges.begin();\n            curr != edges.end(); ++curr)\n    {\n        if ((*curr)->hasFixedRoute)\n        {\n            return true;\n        }\n    }\n    return false;\n}\n\n// Constructs a new hyperedge tree edge, given two endpoint nodes.\n//\nHyperedgeTreeEdge::HyperedgeTreeEdge(HyperedgeTreeNode *node1,\n        HyperedgeTreeNode *node2, ConnRef *conn)\n    : conn(conn),\n      hasFixedRoute(false)\n{\n    if (conn)\n    {\n        hasFixedRoute = conn->hasFixedRoute();\n    }\n    ends = std::make_pair(node1, node2);\n    node1->edges.push_back(this);\n    node2->edges.push_back(this);\n}\n\n\n// Given one endpoint of the hyperedge tree edge, returns the other endpoint.\n//\nHyperedgeTreeNode *HyperedgeTreeEdge::followFrom(HyperedgeTreeNode *from) const\n{\n    return (ends.first == from) ? ends.second : ends.first;\n}\n\n\n// Returns true if the length of this edge is zero, i.e., the endpoints are\n// located at the same position.\n//\nbool HyperedgeTreeEdge::zeroLength(void) const\n{\n    return (ends.first->point == ends.second->point);\n}\n\n\n// This method traverses the hyperedge tree and outputs each of the edges\n// and junction positions as SVG objects to the file fp.\n//\nvoid HyperedgeTreeEdge::outputNodesExcept(FILE *fp, HyperedgeTreeNode *ignored)\n{\n    fprintf(fp, \"<path d=\\\"M %g %g L %g %g\\\" \"\n            \"style=\\\"fill: none; stroke: %s; stroke-width: 2px; \"\n            \"stroke-opacity: 0.5;\\\" />\\n\",\n            ends.first->point.x, ends.first->point.y, \n            ends.second->point.x, ends.second->point.y, \"purple\");\n    if (ends.first != ignored)\n    {\n        ends.first->outputEdgesExcept(fp, this);\n    }\n\n    if (ends.second != ignored)\n    {\n        ends.second->outputEdgesExcept(fp, this);\n    }\n}\n\n\n// This method returns true if the edge is in the dimension given, i.e.,\n// either horizontal or vertical.\n//\nbool HyperedgeTreeEdge::hasOrientation(const size_t dimension) const\n{\n    return (ends.first->point[dimension] == ends.second->point[dimension]);\n}\n\n\n// This method updates any of the given hyperedge tree edge's endpoints that\n// are attached to oldNode to instead be attached to newNode.\n//\nvoid HyperedgeTreeEdge::replaceNode(HyperedgeTreeNode *oldNode,\n        HyperedgeTreeNode *newNode)\n{\n    if (ends.first == oldNode)\n    {\n        oldNode->disconnectEdge(this);\n        newNode->edges.push_back(this);\n        ends.first = newNode;\n    }\n    else if (ends.second == oldNode)\n    {\n        oldNode->disconnectEdge(this);\n        newNode->edges.push_back(this);\n        ends.second = newNode;\n    }\n}\n\n\n// This method traverses the hyperedge tree and writes each of the paths\n// back to the individual connectors as routes.\n//\nvoid HyperedgeTreeEdge::writeEdgesToConns(HyperedgeTreeNode *ignored,\n        size_t pass)\n{\n    COLA_ASSERT(ignored != nullptr);\n    COLA_ASSERT(ends.first != nullptr);\n    COLA_ASSERT(ends.second != nullptr);\n\n    HyperedgeTreeNode *prevNode = \n            (ignored == ends.first) ? ends.first : ends.second;\n    HyperedgeTreeNode *nextNode = \n            (ignored == ends.first) ? ends.second : ends.first;\n\n    if (pass == 0)\n    {\n        conn->m_display_route.clear();\n    }\n    else if (pass == 1)\n    {\n        if (conn->m_display_route.empty())\n        {\n            //printf(\"[%u] - %g %g\\n\", conn->id(), prevNode->point.x, prevNode->point.y);\n            conn->m_display_route.ps.push_back(prevNode->point);\n        }\n        //printf(\"[%u] + %g %g\\n\", conn->id(), nextNode->point.x, nextNode->point.y);\n        conn->m_display_route.ps.push_back(nextNode->point);\n\n        size_t nextNodeEdges = nextNode->edges.size();\n        if (nextNodeEdges != 2)\n        {\n            // We have finished writing a connector.  If the node has just\n            // two edges then it is an intermediate node on a connector.\n            bool shouldReverse = false;\n            if (nextNodeEdges == 1)\n            {\n                // This connector led to a terminal.\n                if (nextNode->isConnectorSource)\n                {\n                    shouldReverse = true;\n                }\n                \n                if (nextNode->isPinDummyEndpoint)\n                {\n                    // If may be that the hyperedge has an extra segment or\n                    // two leading to the centre dummy pin used for connection \n                    // pin routing.  If so, remove these points from the\n                    // resulting route.\n                    conn->m_display_route.ps.pop_back();\n                    if (prevNode->point == nextNode->point)\n                    {\n                        // Duplicated dummy point.  Remove second one.\n                        conn->m_display_route.ps.pop_back();\n                    }\n                }\n            }\n            else // if (nextNodeEdges > 2)\n            {\n                // This connector was between two junctions.\n                COLA_ASSERT(conn->m_dst_connend);\n                JunctionRef *correctEndJunction = \n                        conn->m_dst_connend->junction();\n                if (nextNode->junction != correctEndJunction)\n                {\n                    shouldReverse = true;\n                }\n            }\n\n            if (shouldReverse == true)\n            {\n                // Reverse the written connector route.\n                std::reverse(conn->m_display_route.ps.begin(),\n                        conn->m_display_route.ps.end());\n            }\n        }\n\n#ifdef DEBUGHANDLER\n        if (conn->router()->debugHandler())\n        {\n            conn->router()->debugHandler()->updateConnectorRoute(\n                    conn, -1, -1);\n        }\n#endif\n    }\n\n    nextNode->writeEdgesToConns(this, pass);\n}\n\n// This method traverses the hyperedge tree and creates connectors for each\n// segment bridging junction and/or terminals.  It also sets the \n// appropriate ConnEnds for each connector.\n//\nvoid HyperedgeTreeEdge::addConns(HyperedgeTreeNode *ignored, Router *router,\n        ConnRefList& oldConns)\n{\n    COLA_ASSERT(conn != nullptr);\n    HyperedgeTreeNode *endNode = nullptr;\n    if (ends.first && (ends.first != ignored))\n    {\n        endNode = ends.first;\n        ends.first->addConns(this, router, oldConns, conn);\n    }\n\n    if (ends.second && (ends.second != ignored))\n    {\n        endNode = ends.second;\n        ends.second->addConns(this, router, oldConns, conn);\n    }\n\n    if (endNode->finalVertex)\n    {\n        // We have reached a terminal of the hyperedge, so set a ConnEnd for\n        // the original connector endpoint\n        ConnEnd connend;\n        bool result = false;\n        // Find the ConnEnd from the list of original connectors.\n        for (ConnRefList::iterator curr = oldConns.begin(); \n                curr != oldConns.end(); ++curr)\n        {\n            result |= (*curr)->getConnEndForEndpointVertex(\n                    endNode->finalVertex, connend);\n            if (result)\n            {\n                break;\n            }\n        }\n        if (result)\n        {\n            // XXX: Create new conn here.\n            conn->updateEndPoint(VertID::tar, connend);\n        }\n    }\n    else if (endNode->junction)\n    {\n        // Or, set a ConnEnd connecting to the junction we have reached.\n        ConnEnd connend(endNode->junction);\n        conn->updateEndPoint(VertID::tar, connend);\n    }\n}\n\n\n// This method traverses the hyperedge tree and rewrites connector ends\n// that may have changed junctions due to major hyperedge improvement.\n//\nvoid HyperedgeTreeEdge::updateConnEnds(HyperedgeTreeNode *ignored, \n        bool forward, ConnRefList& changedConns)\n{\n    HyperedgeTreeNode *endNode = nullptr;\n    if (ends.first && (ends.first != ignored))\n    {\n        endNode = ends.first;\n        ends.first->updateConnEnds(this, forward, changedConns);\n    }\n\n    if (ends.second && (ends.second != ignored))\n    {\n        endNode = ends.second;\n        ends.second->updateConnEnds(this, forward, changedConns);\n    }\n\n    if (endNode->junction)\n    {\n        // We've reached a junction at the end of this connector, and it's\n        // not an endpoint of the hyperedge.  So  the connector ConnEnd to \n        // connect to the junction we have reached.\n        std::pair<ConnEnd, ConnEnd> existingEnds = conn->endpointConnEnds();\n        ConnEnd existingEnd = (forward) ?\n                existingEnds.second : existingEnds.first;\n        if (existingEnd.junction() != endNode->junction)\n        {\n#ifdef MAJOR_HYPEREDGE_IMPROVEMENT_DEBUG\n            fprintf(stderr, \"HyperedgeImprover: changed %s of \"\n                    \"connector %u (from junction %u to %u)\\n\", \n                    (forward) ? \"tar\" : \"src\", conn->id(),\n                    existingEnd.junction()->id(), endNode->junction->id());\n#endif\n            ConnEnd connend(endNode->junction);\n            unsigned short end = (forward) ? VertID::tar : VertID::src;\n            conn->updateEndPoint(end, connend);\n\n            // Record that this connector was changed (so long as it wasn't \n            // already recorded).\n            if (changedConns.empty() || (changedConns.back() != conn))\n            {\n                changedConns.push_back(conn);\n            }\n        }\n    }\n}\n\n// This method traverses the hyperedge tree and returns a list of the junctions\n// and connectors that make up the hyperedge.\n//\nvoid HyperedgeTreeEdge::listJunctionsAndConnectors(HyperedgeTreeNode *ignored,\n        JunctionRefList& junctions, ConnRefList& connectors)\n{\n    ConnRefList::iterator foundPosition =\n            std::find(connectors.begin(), connectors.end(), conn);\n    if (foundPosition == connectors.end())\n    {\n        // Add connector if it isn't already in the list.\n        connectors.push_back(conn);\n    }\n\n    if (ends.first != ignored)\n    {\n        ends.first->listJunctionsAndConnectors(this, junctions, connectors);\n    }\n    else if (ends.second != ignored)\n    {\n        ends.second->listJunctionsAndConnectors(this, junctions, connectors);\n    }\n}\n\n\nvoid HyperedgeTreeEdge::validateHyperedge(\n        const HyperedgeTreeNode *ignored, const size_t dist) const\n{\n#ifdef MAJOR_HYPEREDGE_IMPROVEMENT_DEBUG\n    for (size_t d = 0; d < dist; ++d)\n    {\n        fprintf(stderr, \"  \");\n    }\n    fprintf(stderr, \"-(%d)\\n\", conn->id());\n#endif\n    if (ends.first != ignored)\n    {\n        ends.first->validateHyperedge(this, dist);\n    }\n    else if (ends.second != ignored)\n    {\n        ends.second->validateHyperedge(this, dist);\n    }\n}\n\n\n// This method splits the current edge, adding a node at the given point.\n// The current edge will connect the source node and the newly created node.\n// A new edge will connect the new node and the node at the other end of the\n// original edge.\n//\nvoid HyperedgeTreeEdge::splitFromNodeAtPoint(HyperedgeTreeNode *source, \n        const Point& point)\n{\n    // Make the source the first of the two nodes.\n    if (ends.second == source)\n    {\n        std::swap(ends.second, ends.first);\n    }\n    COLA_ASSERT(ends.first == source);\n\n    // Remember the other end.\n    HyperedgeTreeNode *target = ends.second;\n\n    // Create a new node for the split point at the given position.\n    HyperedgeTreeNode *split = new HyperedgeTreeNode();\n    split->point = point;\n\n    // Create a new edge between the split point and the other end.\n    new HyperedgeTreeEdge(split, target, conn);\n    \n    // Disconnect the current edge from the other end and connect it to \n    // the new split point node.\n    target->disconnectEdge(this);\n    ends.second = split;\n    split->edges.push_back(this);\n}\n\n\n// This method disconnects the hyperedge tree edge nodes that it's attached to.\n//\nvoid HyperedgeTreeEdge::disconnectEdge(void)\n{\n    COLA_ASSERT(ends.first != nullptr);\n    COLA_ASSERT(ends.second != nullptr);\n\n    ends.first->disconnectEdge(this);\n    ends.second->disconnectEdge(this);\n    ends.first = nullptr;\n    ends.second = nullptr;\n}\n\n\n// This method traverses the hyperedge tree and removes from treeRoots any\n// junction nodes.\n//\nbool HyperedgeTreeEdge::removeOtherJunctionsFrom(HyperedgeTreeNode *ignored,\n        JunctionSet& treeRoots)\n{\n    bool containsCycle = false;\n    if (ends.first && (ends.first != ignored))\n    {\n        containsCycle |= ends.first->removeOtherJunctionsFrom(this, treeRoots);\n    }\n\n    if (ends.second && (ends.second != ignored))\n    {\n        containsCycle |= ends.second->removeOtherJunctionsFrom(this, treeRoots);\n    }\n    return containsCycle;\n}\n\n\n// This method traverses the hyperedge tree, clearing up the objects and\n// memory used to store the tree.\n//\nvoid HyperedgeTreeEdge::deleteNodesExcept(HyperedgeTreeNode *ignored)\n{\n    if (ends.first && (ends.first != ignored))\n    {\n        ends.first->deleteEdgesExcept(this);\n        delete ends.first;\n    }\n    ends.first = nullptr;\n\n    if (ends.second && (ends.second != ignored))\n    {\n        ends.second->deleteEdgesExcept(this);\n        delete ends.second;\n    }\n    ends.second = nullptr;\n}\n\n\nCmpNodesInDim::CmpNodesInDim(const size_t dim)\n    : m_dimension(dim)\n{\n}\n\n\n// Nodes in set are ordered by position along a line in a certain dimension, \n// and then by Node pointer since multiple may exist at a particular position.\nbool CmpNodesInDim::operator()(const HyperedgeTreeNode *lhs,\n        const HyperedgeTreeNode *rhs) const\n{\n    if (lhs->point[m_dimension] != rhs->point[m_dimension])\n    {\n        return lhs->point[m_dimension] < rhs->point[m_dimension];\n    }\n    return lhs < rhs;\n}\n\n}\n\n"
  },
  {
    "path": "cola/libavoid/hyperedgetree.h",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libavoid - Fast, Incremental, Object-avoiding Line Router\n *\n * Copyright (C) 2011-2014  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * Licensees holding a valid commercial license may use this file in\n * accordance with the commercial license agreement provided with the \n * library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  \n *\n * Author(s):   Michael Wybrow\n*/\n\n#ifndef AVOID_HYPEREDGETREE_H\n#define AVOID_HYPEREDGETREE_H\n\n#include <cstdio>\n#include <list>\n#include <map>\n#include <set>\n#include <utility>\n\n#include \"libavoid/geomtypes.h\"\n\n//#define MAJOR_HYPEREDGE_IMPROVEMENT_DEBUG\n\nnamespace Avoid {\n\n// These classes are not intended for public use.\n// They are used to represent a hyperedge as a tree that certain\n// transformations can be easily performed on to improve the routing\n// of the hyperedge.\n\nclass JunctionRef;\nclass ConnRef;\nclass HyperedgeShiftSegment;\nclass VertInf;\nclass Router;\n\nstruct HyperedgeTreeEdge;\nstruct HyperedgeTreeNode;\n\ntypedef std::map<JunctionRef *, HyperedgeTreeNode *>\n        JunctionHyperedgeTreeNodeMap;\ntypedef std::set<JunctionRef *> JunctionSet;\ntypedef std::list<JunctionRef *> JunctionRefList;\ntypedef std::list<ConnRef *> ConnRefList;\n\nclass CmpNodesInDim;\n\ntypedef std::set<HyperedgeTreeNode *, CmpNodesInDim> OrderedHENodeSet;\n\nstruct HyperedgeTreeNode\n{\n    HyperedgeTreeNode();\n    ~HyperedgeTreeNode();\n\n    void deleteEdgesExcept(HyperedgeTreeEdge *ignored);\n    bool removeOtherJunctionsFrom(HyperedgeTreeEdge *ignored, \n            JunctionSet &treeRoots);\n    void outputEdgesExcept(FILE *fp, HyperedgeTreeEdge *ignored);\n    void disconnectEdge(HyperedgeTreeEdge *edge);\n    void spliceEdgesFrom(HyperedgeTreeNode *oldNode);\n    void writeEdgesToConns(HyperedgeTreeEdge *ignored, size_t pass);\n    void addConns(HyperedgeTreeEdge *ignored, Router *router, \n            ConnRefList& oldConns, ConnRef *conn);\n    void updateConnEnds(HyperedgeTreeEdge *ignored, bool forward,\n            ConnRefList& changedConns);\n    void listJunctionsAndConnectors(HyperedgeTreeEdge *ignored,\n            JunctionRefList& junctions, ConnRefList& connectors);\n    bool isImmovable(void) const;\n    void validateHyperedge(const HyperedgeTreeEdge *ignored, \n            const size_t dist) const;\n\n    std::list<HyperedgeTreeEdge *> edges;\n    JunctionRef *junction;\n    Point point;\n    OrderedHENodeSet *shiftSegmentNodeSet;\n    VertInf *finalVertex;\n    bool isConnectorSource;\n    bool isPinDummyEndpoint;\n    bool visited;\n};\n\nstruct HyperedgeTreeEdge\n{\n    HyperedgeTreeEdge(HyperedgeTreeNode *node1, HyperedgeTreeNode *node2,\n            ConnRef *conn);\n\n    HyperedgeTreeNode *followFrom(HyperedgeTreeNode *from) const;\n    bool zeroLength(void) const;\n    void splitFromNodeAtPoint(HyperedgeTreeNode *source, const Point& point);\n    bool hasOrientation(const size_t dimension) const;\n    void outputNodesExcept(FILE *file, HyperedgeTreeNode *ignored);\n    void deleteNodesExcept(HyperedgeTreeNode *ignored);\n    bool removeOtherJunctionsFrom(HyperedgeTreeNode *ignored, \n            JunctionSet &treeRoots);\n    void writeEdgesToConns(HyperedgeTreeNode *ignored, size_t pass);\n    void addConns(HyperedgeTreeNode *ignored, Router *router,\n            ConnRefList& oldConns);\n    void updateConnEnds(HyperedgeTreeNode *ignored, bool forward,\n            ConnRefList& changedConns);\n    void disconnectEdge(void);\n    void replaceNode(HyperedgeTreeNode *oldNode,\n            HyperedgeTreeNode *newNode);\n    void listJunctionsAndConnectors(HyperedgeTreeNode *ignored,\n            JunctionRefList& junctions, ConnRefList& connectors);\n    void validateHyperedge(const HyperedgeTreeNode *ignored, \n            const size_t dist) const;\n\n    std::pair<HyperedgeTreeNode *, HyperedgeTreeNode *> ends;\n    ConnRef *conn;\n    bool hasFixedRoute;\n};\n\n\ntypedef std::map<VertInf *, HyperedgeTreeNode *> VertexNodeMap;\n\n\nclass CmpNodesInDim\n{\n    public:\n        CmpNodesInDim(const size_t dim);\n        bool operator()(const HyperedgeTreeNode *lhs,\n                const HyperedgeTreeNode *rhs) const;\n    private:\n        const size_t m_dimension;\n};\n\n}\n\n#endif\n"
  },
  {
    "path": "cola/libavoid/junction.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libavoid - Fast, Incremental, Object-avoiding Line Router\n *\n * Copyright (C) 2010-2011  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * Licensees holding a valid commercial license may use this file in\n * accordance with the commercial license agreement provided with the \n * library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  \n *\n * Author(s):  Michael Wybrow\n*/\n\n#include <cstdlib>\n#include <algorithm>\n\n#include \"libavoid/junction.h\"\n#include \"libavoid/router.h\"\n#include \"libavoid/connectionpin.h\"\n#include \"libavoid/debug.h\"\n\n\nnamespace Avoid {\n\n\nJunctionRef::JunctionRef(Router *router, Point position, const unsigned int id)\n    : Obstacle(router, makeRectangle(router, position), id),\n      m_position(position),\n      m_recommended_position(position),\n      m_position_fixed(false)\n{\n    // For Junctions we use a single non-exclusive pin.\n    ShapeConnectionPin *pin = new Avoid::ShapeConnectionPin(this,\n            Avoid::CONNECTIONPIN_CENTRE, ConnDirAll);\n    pin->setExclusive(false);\n    m_connection_pins.insert(pin);\n\n    m_router->addJunction(this);\n}\n\nJunctionRef::~JunctionRef()\n{\n    if (m_router->m_currently_calling_destructors == false)\n    {\n        err_printf(\"ERROR: JunctionRef::~JunctionRef() shouldn't be called directly.\\n\");\n        err_printf(\"       It is owned by the router.  Call Router::deleteJunction() instead.\\n\");\n        abort();\n    }\n}\n\n\nRectangle JunctionRef::makeRectangle(Router *router, const Point& position)\n{\n    COLA_ASSERT(router);\n\n    // A suitably small value.\n    double nudgeDist = router->routingParameter(idealNudgingDistance);\n    nudgeDist = std::min(1.0, nudgeDist);\n\n    Point low = position;\n    low.x -= nudgeDist;\n    low.y -= nudgeDist;\n\n    Point high = position;\n    high.x += nudgeDist;\n    high.y += nudgeDist;\n\n    return Rectangle(low, high);\n}\n\n\nvoid JunctionRef::setPositionFixed(bool fixed)\n{\n    m_position_fixed = fixed;\n    m_router->registerSettingsChange();\n}\n\n\nbool JunctionRef::positionFixed(void) const\n{\n    return m_position_fixed;\n}\n\n\nvoid JunctionRef::preferOrthogonalDimension(const size_t dim)\n{\n    const double smallPenalty = 1.0;\n    for (ShapeConnectionPinSet::iterator curr = \n            m_connection_pins.begin(); curr != m_connection_pins.end(); ++curr)\n    {\n        ShapeConnectionPin *pin = *curr;\n        if (dim == YDIM)\n        {\n            if (pin->directions() & (ConnDirLeft | ConnDirRight))\n            {\n                pin->setConnectionCost(smallPenalty);\n            }\n        }\n        else if (dim == XDIM)\n        {\n            if (pin->directions() & (ConnDirUp | ConnDirDown))\n            {\n                pin->setConnectionCost(smallPenalty);\n            }\n        }\n    }\n}\n\n\nPoint JunctionRef::position(void) const\n{\n    return m_position;\n}\n\n\nvoid JunctionRef::setPosition(const Point& position)\n{\n    m_position = position;\n    m_recommended_position = position;\n    m_polygon = makeRectangle(m_router, m_position);\n    setNewPoly(m_polygon);\n}\n\n\nPoint JunctionRef::recommendedPosition(void) const\n{\n    return m_recommended_position;\n}\n\n\nvoid JunctionRef::setRecommendedPosition(const Point& position)\n{\n    m_recommended_position = position;\n}\n\n\nvoid JunctionRef::outputCode(FILE *fp) const\n{\n    fprintf(fp, \"    JunctionRef *junctionRef%u = new JunctionRef(router, \"\n            \"Point(%g, %g), %u);\\n\", id(), position().x, position().y, id());\n    if (m_position_fixed)\n    {\n        fprintf(fp, \"    junctionRef%u->setPositionFixed(true);\\n\", id());\n    }\n    \n    fprintf(fp, \"    /*\\n\");\n    fprintf(fp, \"    // This may be useful if junction pins are modified.\\n\");\n    for (ShapeConnectionPinSet::const_iterator curr = \n            m_connection_pins.begin(); \n            curr != m_connection_pins.end(); ++curr)\n    {\n        (*curr)->outputCode(fp);\n    }\n    fprintf(fp, \"    */\\n\");\n    fprintf(fp, \"\\n\");\n}\n\n\nvoid JunctionRef::moveAttachedConns(const Point& newPosition)\n{\n    // Update positions of attached connector ends.\n    for (std::set<ConnEnd *>::iterator curr = m_following_conns.begin();\n            curr != m_following_conns.end(); ++curr)\n    {\n        ConnEnd *connEnd = *curr;\n        COLA_ASSERT(connEnd->m_conn_ref != nullptr);\n        m_router->modifyConnector(connEnd->m_conn_ref, connEnd->endpointType(),\n                *connEnd);\n    }\n    for (ShapeConnectionPinSet::iterator curr = \n            m_connection_pins.begin(); curr != m_connection_pins.end(); ++curr)\n    {\n        ShapeConnectionPin *pin = *curr;\n        pin->updatePosition(newPosition);\n    }\n}\n\n\nConnRef *JunctionRef::removeJunctionAndMergeConnectors(void)\n{\n    if (m_following_conns.size() != 2)\n    {\n        return nullptr;\n    }\n\n    std::set<ConnEnd *>::iterator curr = m_following_conns.begin();\n    ConnEnd *connEnd1 = *curr;\n    ++curr;\n    ConnEnd *connEnd2 = *curr;\n    COLA_ASSERT(connEnd2->m_conn_ref != nullptr);\n    COLA_ASSERT(connEnd1->m_conn_ref != nullptr);\n\n    // The second conn will be the one we will delete.\n    ConnRef *conn2 = connEnd2->m_conn_ref;\n    // Determine its endpoint that is not attached to the junction.\n    ConnEnd *connEnd2Other = (conn2->m_src_connend == connEnd2) ? \n            conn2->m_dst_connend : conn2->m_src_connend;\n    if (connEnd2Other == nullptr)\n    {\n        // If it doesn't have a valid other endpoint, then ignore.\n        return nullptr;\n    }\n    // Modify the first connector's junction endpoint to connect to the \n    // other end of the second connector.\n    m_router->modifyConnector(connEnd1->m_conn_ref,\n            connEnd1->endpointType(), *connEnd2Other);\n\n    // Delete the second connector.\n    m_router->deleteConnector(conn2);\n\n    // Remove the junction from the router scene.  It should get deleted later.\n    m_router->deleteJunction(this);\n\n    // Return the first (i.e. merged) connector.\n    return connEnd1->m_conn_ref;\n}\n\n\n//============================================================================\n}\n\n\n"
  },
  {
    "path": "cola/libavoid/junction.h",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libavoid - Fast, Incremental, Object-avoiding Line Router\n *\n * Copyright (C) 2010-2015  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * Licensees holding a valid commercial license may use this file in\n * accordance with the commercial license agreement provided with the \n * library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  \n *\n * Author(s):   Michael Wybrow\n*/\n\n//! @file    junction.h\n//! @brief   Contains the interface for the JunctionRef class.\n\n\n#ifndef AVOID_JUNCTION_H\n#define AVOID_JUNCTION_H\n\n#include <list>\n#include <set>\n\n#include \"libavoid/geomtypes.h\"\n#include \"libavoid/obstacle.h\"\n#include \"libavoid/dllexport.h\"\n\nnamespace Avoid {\n\nclass Router;\nclass VertInf;\nclass ConnEnd;\nclass ConnRef;\nclass ShapeConnectionPin;\nclass JunctionRef;\ntypedef std::list<JunctionRef *> JunctionRefList;\n\n\n//! @brief  The JunctionRef class represents a fixed or free-floating point that \n//!         connectors can be attached to.  \n//!\n//! A JunctionRef represents a junction between multiple connectors, or could\n//! be used to specify an intermediate point that a single connector must route\n//! through.\n//!\nclass AVOID_EXPORT JunctionRef : public Obstacle\n{\n    public:\n        //! @brief  Junction reference constructor.\n        //!\n        //! Creates a junction object reference, and adds it to the router\n        //! scene.  This junction will be considered to be an obstacle.\n        //! This will cause connectors intersecting the newly added junction\n        //! to be marked as needing to be rerouted.\n        //!\n        //! If the router is using transactions, then changes will occur\n        //! the next time Router::processTransaction() is called.  See\n        //! Router::setTransactionUse() for more information.\n        //!\n        //! The junction can be moved with Router::moveJunction() and removed\n        //! from the scene and freed with Router::deleteJunction().\n        //!\n        //! libavoid expects junctions to have sensible positions (i.e.,\n        //! for junctions to be positioned outside of shapes).  When routing \n        //! it will simplify hyperedges by moving junctions while preserving \n        //! hyperedge topology, i.e., not altering the sides of shapes the \n        //! hyperedge routes around.\n        //!\n        //! If you don't have sensible positions for junctions or want to \n        //! disregard the junction position and reroute the entire hyperedge \n        //! considering only the endpoints, then this can be achieved by \n        //! registering the hyperedge with the HyperedgeRerouter class\n        //! obtained by calling the Router::hyperedgeRerouter() method.\n        //! \n        //! When the improveHyperedgeRoutesMovingJunctions router option is\n        //! set (the default) the junction position is a suggestion used for\n        //! initial routing, but subsequent hyperedge path improvement may\n        //! suggest new junction positions for the updated routings.  This\n        //! position can be accessed via the recommendedPosition() method.\n        //!\n        //! When the improveHyperedgeRoutesMovingAddingAndDeletingJunctions\n        //! router option is set (not the default) junctions and connectors\n        //! can be added or removed to further improve hyperedges, see also\n        //! Router::newAndDeletedObjectListsFromHyperedgeImprovement().\n        //!\n        //! @note Regarding IDs:\n        //!       You can let libavoid manually handle IDs by not specifying\n        //!       them.  Alternatively, you can specify all IDs yourself, but \n        //!       you must be careful to makes sure that each object in the \n        //!       scene (shape, connector, cluster, etc.) is given a unique, \n        //!       positive ID.  This uniqueness is checked if assertions are\n        //!       enabled, but if not and there are clashes then strange \n        //!       things can happen.\n        //!\n        //! @param[in]  router   The router scene to place the junction into.\n        //! @param[in]  position A Point representing the position of the \n        //!                      junction.\n        //! @param[in]  id       Optionally, a positive integer ID unique\n        //!                      among all objects.\n        //!\n        JunctionRef(Router *router, Point position, const unsigned int id = 0);\n\n// To prevent C++ objects from being destroyed in garbage collected languages\n// when the libraries are called from SWIG, we hide the declarations of the\n// destructors and prevent generation of default destructors.\n#ifndef SWIG\n        //! @brief  Junction reference destructor.\n        //!\n        //! Do not call this yourself, instead call Router::deleteJunction().\n        //! Ownership of this object belongs to the router scene.\n        virtual ~JunctionRef();\n#endif\n\n        //! @brief  Removes a junction that has only two connectors attached\n        //!         to it and merges them into a single connector.\n        //!\n        //! The junction and one of the connectors will be removed from the\n        //! router scene and the connector deleted.  A pointer to the \n        //! remaining (merged) connector will be returned by this method.\n        //!\n        //! Currently this method does not delete and free the Junction itself.\n        //! The user needs to do this after the transaction has been \n        //! processed by the router.\n        //!\n        //! If there are more than two connectors attached to the junction\n        //! then nothing will be changed and this method will return nullptr.\n        //!\n        //! @return  The merged connector, or nullptr if the junction was not\n        //!          removed.\n        ConnRef *removeJunctionAndMergeConnectors(void);\n\n        //! @brief   Returns the position of this junction.\n        //! @returns A point representing the position of this junction.\n        Point position(void) const;\n\n        //! @brief  Sets whether the junction has a fixed position and\n        //!         therefore can't be moved by the Router during routing.\n        //!\n        //! This property is ignored for hyperedge improvement if the option\n        //! improveHyperedgeRoutesMovingAddingAndDeletingJunctions is set and\n        //! when it would lead to confusing hyperedge topology, such as two\n        //! overlapping junctions with a zero length connector between them\n        //! or an unnecessary junction bridging two connectors.\n        //!\n        //! @param[in]  fixed  Boolean indicating whether the junction position\n        //!                    should be marked as fixed.\n        void setPositionFixed(bool fixed);\n        \n        //! @brief   Returns whether this junction has a fixed position (that \n        //!          can't be moved by the Router during routing).\n        //! @returns A point representing the position of this junction.\n        bool positionFixed(void) const;\n        \n        //! @brief   Returns a recommended position for the junction based on\n        //!          improving hyperedge routes. This value will be set during\n        //!          routing when the improveHyperedgeRoutesMovingJunctions\n        //!          router option is set (the default).\n        //! @returns A point indicating the ideal position for this junction.\n        Point recommendedPosition(void) const;\n\n        Rectangle makeRectangle(Router *router, const Point& position);\n        void preferOrthogonalDimension(const size_t dim);\n\n    private:\n        friend class Router;\n        friend class ShapeConnectionPin;\n        friend class ConnEnd;\n        friend class HyperedgeImprover;\n\n        void outputCode(FILE *fp) const;\n        void setPosition(const Point& position);\n        void setRecommendedPosition(const Point& position);\n        void moveAttachedConns(const Point& newPosition);\n\n        Point m_position;\n        Point m_recommended_position;\n        bool m_position_fixed;\n};\n\n\n}\n\n\n#endif\n\n\n"
  },
  {
    "path": "cola/libavoid/libavoid.h",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libavoid - Fast, Incremental, Object-avoiding Line Router\n *\n * Copyright (C) 2004-2009  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * Licensees holding a valid commercial license may use this file in\n * accordance with the commercial license agreement provided with the \n * library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  \n *\n * Author(s):   Michael Wybrow\n*/\n\n//! @file  libavoid.h\n//! @brief Standard libavoid include file which includes all libavoid \n//!        header files.\n\n/**\n * @namespace Avoid\n * @brief libavoid: Object-avoiding orthogonal and polyline connector \n *        routing library.\n *\n * You should use libavoid via an instance of the Router class.\n */\n#ifndef AVOID_LIBAVOID_H\n#define AVOID_LIBAVOID_H\n\n#include \"libavoid/geomtypes.h\"\n#include \"libavoid/shape.h\"\n#include \"libavoid/connector.h\"\n#include \"libavoid/connend.h\"\n#include \"libavoid/graph.h\"\n#include \"libavoid/debug.h\"\n#include \"libavoid/timer.h\"\n#include \"libavoid/vertices.h\"\n#include \"libavoid/visibility.h\"\n#include \"libavoid/router.h\"\n#include \"libavoid/connectionpin.h\"\n#include \"libavoid/junction.h\"\n#include \"libavoid/viscluster.h\"\n\n#endif\n\n\n"
  },
  {
    "path": "cola/libavoid/libavoid.pc.in",
    "content": "prefix=@prefix@\nexec_prefix=@exec_prefix@\nlibdir=@libdir@\nincludedir=@includedir@\n\nName: libavoid\nDescription: A library for object-avoiding polyline and orthogonal connector routing for use in interactive diagram editors.\nURL: http://www.adaptagrams.org/\nVersion: @VERSION@\nRequires:\nLibs: -L${libdir} -lavoid\nCflags: -I${includedir}/libavoid"
  },
  {
    "path": "cola/libavoid/libavoid.sln",
    "content": "﻿\r\nMicrosoft Visual Studio Solution File, Format Version 11.00\r\n# Visual Studio 2010\r\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"libavoid\", \"libavoid.vcxproj\", \"{798C3D94-BF71-4C72-A29D-0E74C2EB296A}\"\r\nEndProject\r\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"2junctions\", \"tests\\msctests\\2junctions.vcxproj\", \"{4C07F666-EB74-44E9-811C-57CFCCC553C8}\"\r\nEndProject\r\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"example\", \"tests\\msctests\\example.vcxproj\", \"{6943E11D-22DE-4F6A-A30E-C7D23681B507}\"\r\nEndProject\r\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"buildOrthogonalChannelInfo1\", \"tests\\msctests\\buildOrthogonalChannelInfo1.vcxproj\", \"{022C18E8-4B2A-4CF0-8660-9B691473C20E}\"\r\nEndProject\r\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"checkpointNudging1\", \"tests\\msctests\\checkpointNudging1.vcxproj\", \"{33240DD8-FDA7-4157-B022-C71E0B29467B}\"\r\nEndProject\r\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"checkpointNudging2\", \"tests\\msctests\\checkpointNudging2.vcxproj\", \"{97CCD32F-F345-4B41-BC79-50EE7644FCCD}\"\r\nEndProject\r\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"checkpoints01\", \"tests\\msctests\\checkpoints01.vcxproj\", \"{6C2BA2FB-CD3A-409E-B87B-6A105C7CCA48}\"\r\nEndProject\r\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"junction01\", \"tests\\msctests\\junction01.vcxproj\", \"{35D83117-8DA7-495E-A045-DFDC555227C8}\"\r\nEndProject\r\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"complex\", \"tests\\msctests\\complex.vcxproj\", \"{EE121773-CBA2-473D-8C8C-4FCA709DE828}\"\r\nEndProject\r\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"connectionpin01\", \"tests\\msctests\\connectionpin01.vcxproj\", \"{F77FA86C-07F5-468C-A162-479EEE7AEC45}\"\r\nEndProject\r\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"connectionpin02\", \"tests\\msctests\\connectionpin02.vcxproj\", \"{E570E7C6-CFF4-4639-855E-4C1E02F0DD85}\"\r\nEndProject\r\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"connectionpin03\", \"tests\\msctests\\connectionpin03.vcxproj\", \"{69ED412A-63E6-4057-9517-D06A55DD99B0}\"\r\nEndProject\r\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"connendmove\", \"tests\\msctests\\connendmove.vcxproj\", \"{980B4C23-428F-48A1-9111-40AA4777C246}\"\r\nEndProject\r\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"corneroverlap01\", \"tests\\msctests\\corneroverlap01.vcxproj\", \"{8E4B6939-A58A-4DF0-B799-5662E25B7BAD}\"\r\nEndProject\r\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"finalSegmentNudging1\", \"tests\\msctests\\finalSegmentNudging1.vcxproj\", \"{DDD617A0-FFE1-4C05-8144-06F637FB1C7B}\"\r\nEndProject\r\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"finalSegmentNudging2\", \"tests\\msctests\\finalSegmentNudging2.vcxproj\", \"{A5A5A67A-A961-4AA1-A248-196D91406169}\"\r\nEndProject\r\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"finalSegmentNudging3\", \"tests\\msctests\\finalSegmentNudging3.vcxproj\", \"{6C94F0E2-5A2C-4D6D-93FC-43B9A5A578AF}\"\r\nEndProject\r\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"freeFloatingDirection01\", \"tests\\msctests\\freeFloatingDirection01.vcxproj\", \"{8DB197B1-20B2-485D-B89E-D9A7674193BD}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Win32 = Debug|Win32\r\n\t\tDebug|x64 = Debug|x64\r\n\t\tRelease|Win32 = Release|Win32\r\n\t\tRelease|x64 = Release|x64\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{798C3D94-BF71-4C72-A29D-0E74C2EB296A}.Debug|Win32.ActiveCfg = Debug|Win32\r\n\t\t{798C3D94-BF71-4C72-A29D-0E74C2EB296A}.Debug|Win32.Build.0 = Debug|Win32\r\n\t\t{798C3D94-BF71-4C72-A29D-0E74C2EB296A}.Debug|x64.ActiveCfg = Debug|x64\r\n\t\t{798C3D94-BF71-4C72-A29D-0E74C2EB296A}.Debug|x64.Build.0 = Debug|x64\r\n\t\t{798C3D94-BF71-4C72-A29D-0E74C2EB296A}.Release|Win32.ActiveCfg = Release|Win32\r\n\t\t{798C3D94-BF71-4C72-A29D-0E74C2EB296A}.Release|Win32.Build.0 = Release|Win32\r\n\t\t{798C3D94-BF71-4C72-A29D-0E74C2EB296A}.Release|x64.ActiveCfg = Release|x64\r\n\t\t{798C3D94-BF71-4C72-A29D-0E74C2EB296A}.Release|x64.Build.0 = Release|x64\r\n\t\t{4C07F666-EB74-44E9-811C-57CFCCC553C8}.Debug|Win32.ActiveCfg = Debug|Win32\r\n\t\t{4C07F666-EB74-44E9-811C-57CFCCC553C8}.Debug|Win32.Build.0 = Debug|Win32\r\n\t\t{4C07F666-EB74-44E9-811C-57CFCCC553C8}.Debug|x64.ActiveCfg = Debug|x64\r\n\t\t{4C07F666-EB74-44E9-811C-57CFCCC553C8}.Debug|x64.Build.0 = Debug|x64\r\n\t\t{4C07F666-EB74-44E9-811C-57CFCCC553C8}.Release|Win32.ActiveCfg = Release|Win32\r\n\t\t{4C07F666-EB74-44E9-811C-57CFCCC553C8}.Release|Win32.Build.0 = Release|Win32\r\n\t\t{4C07F666-EB74-44E9-811C-57CFCCC553C8}.Release|x64.ActiveCfg = Release|x64\r\n\t\t{4C07F666-EB74-44E9-811C-57CFCCC553C8}.Release|x64.Build.0 = Release|x64\r\n\t\t{6943E11D-22DE-4F6A-A30E-C7D23681B507}.Debug|Win32.ActiveCfg = Debug|Win32\r\n\t\t{6943E11D-22DE-4F6A-A30E-C7D23681B507}.Debug|Win32.Build.0 = Debug|Win32\r\n\t\t{6943E11D-22DE-4F6A-A30E-C7D23681B507}.Debug|x64.ActiveCfg = Debug|x64\r\n\t\t{6943E11D-22DE-4F6A-A30E-C7D23681B507}.Debug|x64.Build.0 = Debug|x64\r\n\t\t{6943E11D-22DE-4F6A-A30E-C7D23681B507}.Release|Win32.ActiveCfg = Release|Win32\r\n\t\t{6943E11D-22DE-4F6A-A30E-C7D23681B507}.Release|Win32.Build.0 = Release|Win32\r\n\t\t{6943E11D-22DE-4F6A-A30E-C7D23681B507}.Release|x64.ActiveCfg = Release|x64\r\n\t\t{6943E11D-22DE-4F6A-A30E-C7D23681B507}.Release|x64.Build.0 = Release|x64\r\n\t\t{022C18E8-4B2A-4CF0-8660-9B691473C20E}.Debug|Win32.ActiveCfg = Debug|Win32\r\n\t\t{022C18E8-4B2A-4CF0-8660-9B691473C20E}.Debug|Win32.Build.0 = Debug|Win32\r\n\t\t{022C18E8-4B2A-4CF0-8660-9B691473C20E}.Debug|x64.ActiveCfg = Debug|x64\r\n\t\t{022C18E8-4B2A-4CF0-8660-9B691473C20E}.Debug|x64.Build.0 = Debug|x64\r\n\t\t{022C18E8-4B2A-4CF0-8660-9B691473C20E}.Release|Win32.ActiveCfg = Release|Win32\r\n\t\t{022C18E8-4B2A-4CF0-8660-9B691473C20E}.Release|Win32.Build.0 = Release|Win32\r\n\t\t{022C18E8-4B2A-4CF0-8660-9B691473C20E}.Release|x64.ActiveCfg = Release|x64\r\n\t\t{022C18E8-4B2A-4CF0-8660-9B691473C20E}.Release|x64.Build.0 = Release|x64\r\n\t\t{33240DD8-FDA7-4157-B022-C71E0B29467B}.Debug|Win32.ActiveCfg = Debug|Win32\r\n\t\t{33240DD8-FDA7-4157-B022-C71E0B29467B}.Debug|Win32.Build.0 = Debug|Win32\r\n\t\t{33240DD8-FDA7-4157-B022-C71E0B29467B}.Debug|x64.ActiveCfg = Debug|x64\r\n\t\t{33240DD8-FDA7-4157-B022-C71E0B29467B}.Debug|x64.Build.0 = Debug|x64\r\n\t\t{33240DD8-FDA7-4157-B022-C71E0B29467B}.Release|Win32.ActiveCfg = Release|Win32\r\n\t\t{33240DD8-FDA7-4157-B022-C71E0B29467B}.Release|Win32.Build.0 = Release|Win32\r\n\t\t{33240DD8-FDA7-4157-B022-C71E0B29467B}.Release|x64.ActiveCfg = Release|x64\r\n\t\t{33240DD8-FDA7-4157-B022-C71E0B29467B}.Release|x64.Build.0 = Release|x64\r\n\t\t{97CCD32F-F345-4B41-BC79-50EE7644FCCD}.Debug|Win32.ActiveCfg = Debug|Win32\r\n\t\t{97CCD32F-F345-4B41-BC79-50EE7644FCCD}.Debug|Win32.Build.0 = Debug|Win32\r\n\t\t{97CCD32F-F345-4B41-BC79-50EE7644FCCD}.Debug|x64.ActiveCfg = Debug|x64\r\n\t\t{97CCD32F-F345-4B41-BC79-50EE7644FCCD}.Debug|x64.Build.0 = Debug|x64\r\n\t\t{97CCD32F-F345-4B41-BC79-50EE7644FCCD}.Release|Win32.ActiveCfg = Release|Win32\r\n\t\t{97CCD32F-F345-4B41-BC79-50EE7644FCCD}.Release|Win32.Build.0 = Release|Win32\r\n\t\t{97CCD32F-F345-4B41-BC79-50EE7644FCCD}.Release|x64.ActiveCfg = Release|x64\r\n\t\t{97CCD32F-F345-4B41-BC79-50EE7644FCCD}.Release|x64.Build.0 = Release|x64\r\n\t\t{6C2BA2FB-CD3A-409E-B87B-6A105C7CCA48}.Debug|Win32.ActiveCfg = Debug|Win32\r\n\t\t{6C2BA2FB-CD3A-409E-B87B-6A105C7CCA48}.Debug|Win32.Build.0 = Debug|Win32\r\n\t\t{6C2BA2FB-CD3A-409E-B87B-6A105C7CCA48}.Debug|x64.ActiveCfg = Debug|x64\r\n\t\t{6C2BA2FB-CD3A-409E-B87B-6A105C7CCA48}.Debug|x64.Build.0 = Debug|x64\r\n\t\t{6C2BA2FB-CD3A-409E-B87B-6A105C7CCA48}.Release|Win32.ActiveCfg = Release|Win32\r\n\t\t{6C2BA2FB-CD3A-409E-B87B-6A105C7CCA48}.Release|Win32.Build.0 = Release|Win32\r\n\t\t{6C2BA2FB-CD3A-409E-B87B-6A105C7CCA48}.Release|x64.ActiveCfg = Release|x64\r\n\t\t{6C2BA2FB-CD3A-409E-B87B-6A105C7CCA48}.Release|x64.Build.0 = Release|x64\r\n\t\t{35D83117-8DA7-495E-A045-DFDC555227C8}.Debug|Win32.ActiveCfg = Debug|Win32\r\n\t\t{35D83117-8DA7-495E-A045-DFDC555227C8}.Debug|Win32.Build.0 = Debug|Win32\r\n\t\t{35D83117-8DA7-495E-A045-DFDC555227C8}.Debug|x64.ActiveCfg = Debug|x64\r\n\t\t{35D83117-8DA7-495E-A045-DFDC555227C8}.Debug|x64.Build.0 = Debug|x64\r\n\t\t{35D83117-8DA7-495E-A045-DFDC555227C8}.Release|Win32.ActiveCfg = Release|Win32\r\n\t\t{35D83117-8DA7-495E-A045-DFDC555227C8}.Release|Win32.Build.0 = Release|Win32\r\n\t\t{35D83117-8DA7-495E-A045-DFDC555227C8}.Release|x64.ActiveCfg = Release|x64\r\n\t\t{35D83117-8DA7-495E-A045-DFDC555227C8}.Release|x64.Build.0 = Release|x64\r\n\t\t{EE121773-CBA2-473D-8C8C-4FCA709DE828}.Debug|Win32.ActiveCfg = Debug|Win32\r\n\t\t{EE121773-CBA2-473D-8C8C-4FCA709DE828}.Debug|Win32.Build.0 = Debug|Win32\r\n\t\t{EE121773-CBA2-473D-8C8C-4FCA709DE828}.Debug|x64.ActiveCfg = Debug|x64\r\n\t\t{EE121773-CBA2-473D-8C8C-4FCA709DE828}.Debug|x64.Build.0 = Debug|x64\r\n\t\t{EE121773-CBA2-473D-8C8C-4FCA709DE828}.Release|Win32.ActiveCfg = Release|Win32\r\n\t\t{EE121773-CBA2-473D-8C8C-4FCA709DE828}.Release|Win32.Build.0 = Release|Win32\r\n\t\t{EE121773-CBA2-473D-8C8C-4FCA709DE828}.Release|x64.ActiveCfg = Release|x64\r\n\t\t{EE121773-CBA2-473D-8C8C-4FCA709DE828}.Release|x64.Build.0 = Release|x64\r\n\t\t{F77FA86C-07F5-468C-A162-479EEE7AEC45}.Debug|Win32.ActiveCfg = Debug|Win32\r\n\t\t{F77FA86C-07F5-468C-A162-479EEE7AEC45}.Debug|Win32.Build.0 = Debug|Win32\r\n\t\t{F77FA86C-07F5-468C-A162-479EEE7AEC45}.Debug|x64.ActiveCfg = Debug|x64\r\n\t\t{F77FA86C-07F5-468C-A162-479EEE7AEC45}.Debug|x64.Build.0 = Debug|x64\r\n\t\t{F77FA86C-07F5-468C-A162-479EEE7AEC45}.Release|Win32.ActiveCfg = Release|Win32\r\n\t\t{F77FA86C-07F5-468C-A162-479EEE7AEC45}.Release|Win32.Build.0 = Release|Win32\r\n\t\t{F77FA86C-07F5-468C-A162-479EEE7AEC45}.Release|x64.ActiveCfg = Release|x64\r\n\t\t{F77FA86C-07F5-468C-A162-479EEE7AEC45}.Release|x64.Build.0 = Release|x64\r\n\t\t{E570E7C6-CFF4-4639-855E-4C1E02F0DD85}.Debug|Win32.ActiveCfg = Debug|Win32\r\n\t\t{E570E7C6-CFF4-4639-855E-4C1E02F0DD85}.Debug|Win32.Build.0 = Debug|Win32\r\n\t\t{E570E7C6-CFF4-4639-855E-4C1E02F0DD85}.Debug|x64.ActiveCfg = Debug|x64\r\n\t\t{E570E7C6-CFF4-4639-855E-4C1E02F0DD85}.Debug|x64.Build.0 = Debug|x64\r\n\t\t{E570E7C6-CFF4-4639-855E-4C1E02F0DD85}.Release|Win32.ActiveCfg = Release|Win32\r\n\t\t{E570E7C6-CFF4-4639-855E-4C1E02F0DD85}.Release|Win32.Build.0 = Release|Win32\r\n\t\t{E570E7C6-CFF4-4639-855E-4C1E02F0DD85}.Release|x64.ActiveCfg = Release|x64\r\n\t\t{E570E7C6-CFF4-4639-855E-4C1E02F0DD85}.Release|x64.Build.0 = Release|x64\r\n\t\t{69ED412A-63E6-4057-9517-D06A55DD99B0}.Debug|Win32.ActiveCfg = Debug|Win32\r\n\t\t{69ED412A-63E6-4057-9517-D06A55DD99B0}.Debug|Win32.Build.0 = Debug|Win32\r\n\t\t{69ED412A-63E6-4057-9517-D06A55DD99B0}.Debug|x64.ActiveCfg = Debug|x64\r\n\t\t{69ED412A-63E6-4057-9517-D06A55DD99B0}.Debug|x64.Build.0 = Debug|x64\r\n\t\t{69ED412A-63E6-4057-9517-D06A55DD99B0}.Release|Win32.ActiveCfg = Release|Win32\r\n\t\t{69ED412A-63E6-4057-9517-D06A55DD99B0}.Release|Win32.Build.0 = Release|Win32\r\n\t\t{69ED412A-63E6-4057-9517-D06A55DD99B0}.Release|x64.ActiveCfg = Release|x64\r\n\t\t{69ED412A-63E6-4057-9517-D06A55DD99B0}.Release|x64.Build.0 = Release|x64\r\n\t\t{980B4C23-428F-48A1-9111-40AA4777C246}.Debug|Win32.ActiveCfg = Debug|Win32\r\n\t\t{980B4C23-428F-48A1-9111-40AA4777C246}.Debug|Win32.Build.0 = Debug|Win32\r\n\t\t{980B4C23-428F-48A1-9111-40AA4777C246}.Debug|x64.ActiveCfg = Debug|x64\r\n\t\t{980B4C23-428F-48A1-9111-40AA4777C246}.Debug|x64.Build.0 = Debug|x64\r\n\t\t{980B4C23-428F-48A1-9111-40AA4777C246}.Release|Win32.ActiveCfg = Release|Win32\r\n\t\t{980B4C23-428F-48A1-9111-40AA4777C246}.Release|Win32.Build.0 = Release|Win32\r\n\t\t{980B4C23-428F-48A1-9111-40AA4777C246}.Release|x64.ActiveCfg = Release|x64\r\n\t\t{980B4C23-428F-48A1-9111-40AA4777C246}.Release|x64.Build.0 = Release|x64\r\n\t\t{8E4B6939-A58A-4DF0-B799-5662E25B7BAD}.Debug|Win32.ActiveCfg = Debug|Win32\r\n\t\t{8E4B6939-A58A-4DF0-B799-5662E25B7BAD}.Debug|Win32.Build.0 = Debug|Win32\r\n\t\t{8E4B6939-A58A-4DF0-B799-5662E25B7BAD}.Debug|x64.ActiveCfg = Debug|x64\r\n\t\t{8E4B6939-A58A-4DF0-B799-5662E25B7BAD}.Debug|x64.Build.0 = Debug|x64\r\n\t\t{8E4B6939-A58A-4DF0-B799-5662E25B7BAD}.Release|Win32.ActiveCfg = Release|Win32\r\n\t\t{8E4B6939-A58A-4DF0-B799-5662E25B7BAD}.Release|Win32.Build.0 = Release|Win32\r\n\t\t{8E4B6939-A58A-4DF0-B799-5662E25B7BAD}.Release|x64.ActiveCfg = Release|x64\r\n\t\t{8E4B6939-A58A-4DF0-B799-5662E25B7BAD}.Release|x64.Build.0 = Release|x64\r\n\t\t{DDD617A0-FFE1-4C05-8144-06F637FB1C7B}.Debug|Win32.ActiveCfg = Debug|Win32\r\n\t\t{DDD617A0-FFE1-4C05-8144-06F637FB1C7B}.Debug|Win32.Build.0 = Debug|Win32\r\n\t\t{DDD617A0-FFE1-4C05-8144-06F637FB1C7B}.Debug|x64.ActiveCfg = Debug|x64\r\n\t\t{DDD617A0-FFE1-4C05-8144-06F637FB1C7B}.Debug|x64.Build.0 = Debug|x64\r\n\t\t{DDD617A0-FFE1-4C05-8144-06F637FB1C7B}.Release|Win32.ActiveCfg = Release|Win32\r\n\t\t{DDD617A0-FFE1-4C05-8144-06F637FB1C7B}.Release|Win32.Build.0 = Release|Win32\r\n\t\t{DDD617A0-FFE1-4C05-8144-06F637FB1C7B}.Release|x64.ActiveCfg = Release|x64\r\n\t\t{DDD617A0-FFE1-4C05-8144-06F637FB1C7B}.Release|x64.Build.0 = Release|x64\r\n\t\t{A5A5A67A-A961-4AA1-A248-196D91406169}.Debug|Win32.ActiveCfg = Debug|Win32\r\n\t\t{A5A5A67A-A961-4AA1-A248-196D91406169}.Debug|Win32.Build.0 = Debug|Win32\r\n\t\t{A5A5A67A-A961-4AA1-A248-196D91406169}.Debug|x64.ActiveCfg = Debug|x64\r\n\t\t{A5A5A67A-A961-4AA1-A248-196D91406169}.Debug|x64.Build.0 = Debug|x64\r\n\t\t{A5A5A67A-A961-4AA1-A248-196D91406169}.Release|Win32.ActiveCfg = Release|Win32\r\n\t\t{A5A5A67A-A961-4AA1-A248-196D91406169}.Release|Win32.Build.0 = Release|Win32\r\n\t\t{A5A5A67A-A961-4AA1-A248-196D91406169}.Release|x64.ActiveCfg = Release|x64\r\n\t\t{A5A5A67A-A961-4AA1-A248-196D91406169}.Release|x64.Build.0 = Release|x64\r\n\t\t{6C94F0E2-5A2C-4D6D-93FC-43B9A5A578AF}.Debug|Win32.ActiveCfg = Debug|Win32\r\n\t\t{6C94F0E2-5A2C-4D6D-93FC-43B9A5A578AF}.Debug|Win32.Build.0 = Debug|Win32\r\n\t\t{6C94F0E2-5A2C-4D6D-93FC-43B9A5A578AF}.Debug|x64.ActiveCfg = Debug|x64\r\n\t\t{6C94F0E2-5A2C-4D6D-93FC-43B9A5A578AF}.Debug|x64.Build.0 = Debug|x64\r\n\t\t{6C94F0E2-5A2C-4D6D-93FC-43B9A5A578AF}.Release|Win32.ActiveCfg = Release|Win32\r\n\t\t{6C94F0E2-5A2C-4D6D-93FC-43B9A5A578AF}.Release|Win32.Build.0 = Release|Win32\r\n\t\t{6C94F0E2-5A2C-4D6D-93FC-43B9A5A578AF}.Release|x64.ActiveCfg = Release|x64\r\n\t\t{6C94F0E2-5A2C-4D6D-93FC-43B9A5A578AF}.Release|x64.Build.0 = Release|x64\r\n\t\t{8DB197B1-20B2-485D-B89E-D9A7674193BD}.Debug|Win32.ActiveCfg = Debug|Win32\r\n\t\t{8DB197B1-20B2-485D-B89E-D9A7674193BD}.Debug|Win32.Build.0 = Debug|Win32\r\n\t\t{8DB197B1-20B2-485D-B89E-D9A7674193BD}.Debug|x64.ActiveCfg = Debug|x64\r\n\t\t{8DB197B1-20B2-485D-B89E-D9A7674193BD}.Debug|x64.Build.0 = Debug|x64\r\n\t\t{8DB197B1-20B2-485D-B89E-D9A7674193BD}.Release|Win32.ActiveCfg = Release|Win32\r\n\t\t{8DB197B1-20B2-485D-B89E-D9A7674193BD}.Release|Win32.Build.0 = Release|Win32\r\n\t\t{8DB197B1-20B2-485D-B89E-D9A7674193BD}.Release|x64.ActiveCfg = Release|x64\r\n\t\t{8DB197B1-20B2-485D-B89E-D9A7674193BD}.Release|x64.Build.0 = Release|x64\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "cola/libavoid/libavoid.vcxproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project DefaultTargets=\"Build\" ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n  <ItemGroup Label=\"ProjectConfigurations\">\r\n    <ProjectConfiguration Include=\"Debug|Win32\">\r\n      <Configuration>Debug</Configuration>\r\n      <Platform>Win32</Platform>\r\n    </ProjectConfiguration>\r\n    <ProjectConfiguration Include=\"Debug|x64\">\r\n      <Configuration>Debug</Configuration>\r\n      <Platform>x64</Platform>\r\n    </ProjectConfiguration>\r\n    <ProjectConfiguration Include=\"Release|Win32\">\r\n      <Configuration>Release</Configuration>\r\n      <Platform>Win32</Platform>\r\n    </ProjectConfiguration>\r\n    <ProjectConfiguration Include=\"Release|x64\">\r\n      <Configuration>Release</Configuration>\r\n      <Platform>x64</Platform>\r\n    </ProjectConfiguration>\r\n  </ItemGroup>\r\n  <PropertyGroup Label=\"Globals\">\r\n    <ProjectGuid>{798C3D94-BF71-4C72-A29D-0E74C2EB296A}</ProjectGuid>\r\n    <Keyword>Win32Proj</Keyword>\r\n    <RootNamespace>libavoid</RootNamespace>\r\n  </PropertyGroup>\r\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.Default.props\" />\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"Configuration\">\r\n    <ConfigurationType>DynamicLibrary</ConfigurationType>\r\n    <UseDebugLibraries>true</UseDebugLibraries>\r\n    <CharacterSet>Unicode</CharacterSet>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" Label=\"Configuration\">\r\n    <ConfigurationType>DynamicLibrary</ConfigurationType>\r\n    <UseDebugLibraries>true</UseDebugLibraries>\r\n    <CharacterSet>Unicode</CharacterSet>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"Configuration\">\r\n    <ConfigurationType>DynamicLibrary</ConfigurationType>\r\n    <UseDebugLibraries>false</UseDebugLibraries>\r\n    <WholeProgramOptimization>true</WholeProgramOptimization>\r\n    <CharacterSet>Unicode</CharacterSet>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" Label=\"Configuration\">\r\n    <ConfigurationType>DynamicLibrary</ConfigurationType>\r\n    <UseDebugLibraries>false</UseDebugLibraries>\r\n    <WholeProgramOptimization>true</WholeProgramOptimization>\r\n    <CharacterSet>Unicode</CharacterSet>\r\n  </PropertyGroup>\r\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.props\" />\r\n  <ImportGroup Label=\"ExtensionSettings\">\r\n  </ImportGroup>\r\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\r\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\r\n  </ImportGroup>\r\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" Label=\"PropertySheets\">\r\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\r\n  </ImportGroup>\r\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\r\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\r\n  </ImportGroup>\r\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" Label=\"PropertySheets\">\r\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\r\n  </ImportGroup>\r\n  <PropertyGroup Label=\"UserMacros\" />\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\r\n    <LinkIncremental>true</LinkIncremental>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">\r\n    <LinkIncremental>true</LinkIncremental>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\r\n    <LinkIncremental>false</LinkIncremental>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">\r\n    <LinkIncremental>false</LinkIncremental>\r\n  </PropertyGroup>\r\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\r\n    <ClCompile>\r\n      <PrecompiledHeader>\r\n      </PrecompiledHeader>\r\n      <WarningLevel>Level3</WarningLevel>\r\n      <Optimization>Disabled</Optimization>\r\n      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;LIBAVOID_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n      <AdditionalIncludeDirectories>$(SolutionDir)..</AdditionalIncludeDirectories>\r\n    </ClCompile>\r\n    <Link>\r\n      <SubSystem>Windows</SubSystem>\r\n      <GenerateDebugInformation>true</GenerateDebugInformation>\r\n    </Link>\r\n  </ItemDefinitionGroup>\r\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">\r\n    <ClCompile>\r\n      <PrecompiledHeader>\r\n      </PrecompiledHeader>\r\n      <WarningLevel>Level3</WarningLevel>\r\n      <Optimization>Disabled</Optimization>\r\n      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;LIBAVOID_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n      <AdditionalIncludeDirectories>$(SolutionDir)..</AdditionalIncludeDirectories>\r\n    </ClCompile>\r\n    <Link>\r\n      <SubSystem>Windows</SubSystem>\r\n      <GenerateDebugInformation>true</GenerateDebugInformation>\r\n    </Link>\r\n  </ItemDefinitionGroup>\r\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\r\n    <ClCompile>\r\n      <WarningLevel>Level3</WarningLevel>\r\n      <PrecompiledHeader>\r\n      </PrecompiledHeader>\r\n      <Optimization>MaxSpeed</Optimization>\r\n      <FunctionLevelLinking>true</FunctionLevelLinking>\r\n      <IntrinsicFunctions>true</IntrinsicFunctions>\r\n      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;LIBAVOID_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n      <AdditionalIncludeDirectories>$(SolutionDir)..</AdditionalIncludeDirectories>\r\n    </ClCompile>\r\n    <Link>\r\n      <SubSystem>Windows</SubSystem>\r\n      <GenerateDebugInformation>true</GenerateDebugInformation>\r\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r\n      <OptimizeReferences>true</OptimizeReferences>\r\n    </Link>\r\n  </ItemDefinitionGroup>\r\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">\r\n    <ClCompile>\r\n      <WarningLevel>Level3</WarningLevel>\r\n      <PrecompiledHeader>\r\n      </PrecompiledHeader>\r\n      <Optimization>MaxSpeed</Optimization>\r\n      <FunctionLevelLinking>true</FunctionLevelLinking>\r\n      <IntrinsicFunctions>true</IntrinsicFunctions>\r\n      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;LIBAVOID_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n      <AdditionalIncludeDirectories>$(SolutionDir)..</AdditionalIncludeDirectories>\r\n    </ClCompile>\r\n    <Link>\r\n      <SubSystem>Windows</SubSystem>\r\n      <GenerateDebugInformation>true</GenerateDebugInformation>\r\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r\n      <OptimizeReferences>true</OptimizeReferences>\r\n    </Link>\r\n  </ItemDefinitionGroup>\r\n  <ItemGroup>\r\n    <ClCompile Include=\"actioninfo.cpp\" />\r\n    <ClCompile Include=\"connectionpin.cpp\" />\r\n    <ClCompile Include=\"connector.cpp\" />\r\n    <ClCompile Include=\"connend.cpp\" />\r\n    <ClCompile Include=\"geometry.cpp\" />\r\n    <ClCompile Include=\"geomtypes.cpp\" />\r\n    <ClCompile Include=\"graph.cpp\" />\r\n    <ClCompile Include=\"hyperedge.cpp\" />\r\n    <ClCompile Include=\"hyperedgeimprover.cpp\" />\r\n    <ClCompile Include=\"hyperedgetree.cpp\" />\r\n    <ClCompile Include=\"junction.cpp\" />\r\n    <ClCompile Include=\"makepath.cpp\" />\r\n    <ClCompile Include=\"mtst.cpp\" />\r\n    <ClCompile Include=\"obstacle.cpp\" />\r\n    <ClCompile Include=\"orthogonal.cpp\" />\r\n    <ClCompile Include=\"router.cpp\" />\r\n    <ClCompile Include=\"scanline.cpp\" />\r\n    <ClCompile Include=\"shape.cpp\" />\r\n    <ClCompile Include=\"timer.cpp\" />\r\n    <ClCompile Include=\"vertices.cpp\" />\r\n    <ClCompile Include=\"viscluster.cpp\" />\r\n    <ClCompile Include=\"visibility.cpp\" />\r\n    <ClCompile Include=\"vpsc.cpp\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <ClInclude Include=\"actioninfo.h\" />\r\n    <ClInclude Include=\"assertions.h\" />\r\n    <ClInclude Include=\"connectionpin.h\" />\r\n    <ClInclude Include=\"connector.h\" />\r\n    <ClInclude Include=\"connend.h\" />\r\n    <ClInclude Include=\"debug.h\" />\r\n    <ClInclude Include=\"dllexport.h\" />\r\n    <ClInclude Include=\"geometry.h\" />\r\n    <ClInclude Include=\"geomtypes.h\" />\r\n    <ClInclude Include=\"graph.h\" />\r\n    <ClInclude Include=\"hyperedge.h\" />\r\n    <ClInclude Include=\"hyperedgeimprover.h\" />\r\n    <ClInclude Include=\"hyperedgetree.h\" />\r\n    <ClInclude Include=\"junction.h\" />\r\n    <ClInclude Include=\"libavoid.h\" />\r\n    <ClInclude Include=\"makepath.h\" />\r\n    <ClInclude Include=\"mtst.h\" />\r\n    <ClInclude Include=\"obstacle.h\" />\r\n    <ClInclude Include=\"orthogonal.h\" />\r\n    <ClInclude Include=\"router.h\" />\r\n    <ClInclude Include=\"scanline.h\" />\r\n    <ClInclude Include=\"shape.h\" />\r\n    <ClInclude Include=\"timer.h\" />\r\n    <ClInclude Include=\"vertices.h\" />\r\n    <ClInclude Include=\"viscluster.h\" />\r\n    <ClInclude Include=\"visibility.h\" />\r\n    <ClInclude Include=\"vpsc.h\" />\r\n  </ItemGroup>\r\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.targets\" />\r\n  <ImportGroup Label=\"ExtensionTargets\">\r\n  </ImportGroup>\r\n</Project>"
  },
  {
    "path": "cola/libavoid/makepath.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libavoid - Fast, Incremental, Object-avoiding Line Router\n *\n * Copyright (C) 2004-2014  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * Licensees holding a valid commercial license may use this file in\n * accordance with the commercial license agreement provided with the \n * library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  \n *\n * Author(s):  Michael Wybrow\n*/\n\n// For M_PI.\n// This should be first include for MSVC.\n#ifndef _USE_MATH_DEFINES\n#define _USE_MATH_DEFINES\n#endif\n#include <cmath>\n\n#include <algorithm>\n#include <vector>\n#include <climits>\n#include <cfloat>\n\n#include \"libavoid/makepath.h\"\n#include \"libavoid/vertices.h\"\n#include \"libavoid/geometry.h\"\n#include \"libavoid/connector.h\"\n#include \"libavoid/viscluster.h\"\n#include \"libavoid/graph.h\"\n#include \"libavoid/router.h\"\n#include \"libavoid/debug.h\"\n#include \"libavoid/assertions.h\"\n#include \"libavoid/debughandler.h\"\n\n//#define ESTIMATED_COST_DEBUG\n\nnamespace Avoid {\n\nclass ANode\n{\n    public:\n        VertInf* inf;\n        double g;        // Gone\n        double h;        // Heuristic\n        double f;        // Formula f = g + h\n        \n        ANode *prevNode; // VertInf for the previous ANode.\n        int timeStamp;   // Time-stamp used to determine exploration order of\n                         // seemingly equal paths during orthogonal routing.\n\n        ANode(VertInf *vinf, int time)\n            : inf(vinf),\n              g(0),\n              h(0),\n              f(0),\n              prevNode(nullptr),\n              timeStamp(time)\n        {\n        }\n        ANode()\n            : inf(nullptr),\n              g(0),\n              h(0),\n              f(0),\n              prevNode(nullptr),\n              timeStamp(-1)\n        {\n        }\n};\n\nclass AStarPathPrivate\n{\n    public:\n        AStarPathPrivate()\n            : m_available_nodes(),\n              m_available_array_size(0),\n              m_available_array_index(0),\n              m_available_node_index(0)\n        {\n        }\n        ~AStarPathPrivate()\n        {\n            // Free memory\n            for (size_t i = 0; i < m_available_nodes.size(); ++i)\n            {\n                delete[] m_available_nodes[i];\n            }\n        }\n        // Returns a pointer to an ANode for aStar search, but allocates\n        // these in blocks \n        ANode *newANode(const ANode& node, const bool addToPending = true)\n        {\n            const size_t blockSize = 5000;\n            if ((m_available_array_index + 1 > m_available_array_size) ||\n                    (m_available_node_index >= blockSize))\n            {\n                m_available_nodes.push_back(new ANode[blockSize]);\n                ++m_available_array_size;\n                m_available_node_index = 0;\n                m_available_array_index = m_available_array_size - 1;\n            }\n            \n            ANode *nodes = m_available_nodes[m_available_array_index];\n            ANode *newNode = &(nodes[m_available_node_index++]);\n            *newNode = node;\n            if (addToPending)\n            {\n                node.inf->aStarPendingNodes.push_back(newNode);\n            }\n            return newNode;\n        }\n        void search(ConnRef *lineRef, VertInf *src, VertInf *tar, \n                VertInf *start);\n\n    private:\n        void determineEndPointLocation(double dist, VertInf *start,\n                VertInf *target, VertInf *other, int level);\n        double estimatedCost(ConnRef *lineRef, const Point *last,\n                const Point& curr) const;\n\n        std::vector<ANode *> m_available_nodes;\n        size_t m_available_array_size;\n        size_t m_available_array_index;\n        size_t m_available_node_index;\n \n        // For determining estimated cost target.\n        std::vector<VertInf *> m_cost_targets;\n        std::vector<unsigned int> m_cost_targets_directions;\n        std::vector<double> m_cost_targets_displacements;\n};\n\n\n\n// This returns the opposite result (>) so that when used with stl::make_heap, \n// the head node of the heap will be the smallest value, rather than the \n// largest.  This saves us from having to sort the heap (and then reorder\n// it back into a heap) when getting the next node to examine.  This way we\n// get better complexity -- logarithmic pushes and pops to the heap.\n//\nclass ANodeCmp\n{\n    public:\n    ANodeCmp()\n    {\n    }\nbool operator()(const ANode *a, const ANode *b)\n{\n    // We need to use an epsilon here since otherwise the multiple addition\n    // of floating point numbers that makes up the 'f' values cause a problem\n    // with routings occasionally being non-deterministic.\n    if (fabs(a->f - b->f) > 0.0000001)\n    {\n        return a->f > b->f;\n    }\n    if (a->timeStamp != b->timeStamp)\n    {\n        // Tiebreaker, if two paths have equal cost, then choose the one with\n        // the highest timeStamp.  This corresponds to the furthest point\n        // explored along the straight-line path.  When exploring we give the\n        // directions the following timeStamps; left:1, right:2 and forward:3,\n        // then we always try to explore forward first.\n        return a->timeStamp < b->timeStamp;\n    }\n    return false;\n}\n};\n\n\nstatic double Dot(const Point& l, const Point& r)\n{\n    return (l.x * r.x) + (l.y * r.y);\n}\n\nstatic double CrossLength(const Point& l, const Point& r)\n{\n    return (l.x * r.y) - (l.y * r.x);\n}\n\n\n// Return the angle between the two line segments made by the\n// points p1--p2 and p2--p3.  Return value is in radians.\n//\nstatic double angleBetween(const Point& p1, const Point& p2, const Point& p3)\n{\n    if ((p1.x == p2.x && p1.y == p2.y) || (p2.x == p3.x && p2.y == p3.y))\n    {\n        // If two of the points are the same, then we can't say anything\n        // about the angle between.  Treat them as being collinear.\n        return M_PI;\n    }\n\n    Point v1(p1.x - p2.x, p1.y - p2.y);\n    Point v2(p3.x - p2.x, p3.y - p2.y);\n\n    return fabs(atan2(CrossLength(v1, v2), Dot(v1, v2)));\n}\n\n\n// Construct a temporary Polygon path given several VertInf's for a connector.\n//\nstatic void constructPolygonPath(Polygon& connRoute, VertInf *inf2, \n        VertInf *inf3, ANode *inf1Node)\n{\n    // Don't include colinear points.\n    bool simplified = true;\n\n    int routeSize = 2;\n    for (ANode *curr = inf1Node; curr != nullptr; curr = curr->prevNode)\n    {\n        routeSize += 1;\n    }\n    connRoute.ps.resize(routeSize);\n    int arraySize = routeSize;\n    connRoute.ps[routeSize - 1] = inf3->point;\n    connRoute.ps[routeSize - 2] = inf2->point;\n    routeSize -= 3;\n    for (ANode *curr = inf1Node; curr != nullptr; curr = curr->prevNode)\n    {\n        // For connection pins, we stop and don't include the fake shape \n        // center as part of this path.\n        bool isConnectionPin = curr->inf->id.isConnectionPin();\n\n        if (!simplified)\n        {\n            // If this is non-simplified, we don't need to do anything \n            // clever and can simply add the new point.\n            connRoute.ps[routeSize] = curr->inf->point;\n            routeSize -= 1;\n            \n            if (isConnectionPin)\n            {\n                // Stop at the connection pin.\n                break;\n            }\n            continue;\n        }\n            \n        if ((curr == inf1Node) || \n                vecDir(curr->inf->point, connRoute.ps[routeSize + 1], \n                    connRoute.ps[routeSize + 2]) != 0)\n        {\n            // Add new point if this is the earlier than the last segment\n            // and it is not colinear with the other points.  \n            // Note, you can't collapse the 'last' segment with previous \n            // segments, or if this just intersects another line you risk \n            // penalising it once for each collapsed line segment.\n            connRoute.ps[routeSize] = curr->inf->point;\n            routeSize -= 1;\n        }\n        else\n        {\n            // The last point is inline with this one, so update it.\n            connRoute.ps[routeSize + 1] = curr->inf->point;\n        }\n            \n        if (isConnectionPin)\n        {\n            // Stop at the connection pin.\n            break;\n        }\n    }\n\n    // If the vector is not filled, move entries to the beginning and \n    // remove the unused end of the vector.\n    int diff = routeSize + 1;\n    COLA_ASSERT(simplified || (diff == 0));\n    if (diff > 0)\n    {\n        for (int i = diff; i < arraySize; ++i)\n        {\n            connRoute.ps[i - diff] = connRoute.ps[i];\n        }\n        connRoute.ps.resize(connRoute.size() - diff);\n    }\n}\n\n// Used to get an indication of if a diffence is positive (1),\n// negative (-1) or no different (0).\nstatic inline int dimDirection(double difference)\n{\n    if (difference > 0)\n    {\n        return 1;\n    }\n    else if (difference < 0)\n    {\n        return -1;\n    }\n    return 0;\n}\n\n// Given the two points for a new segment of a path (inf2 & inf3)\n// as well as the distance between these points (dist), as well as\n// possibly the previous point (inf1) [from inf1--inf2], return a\n// cost associated with this route.\n//\nstatic double cost(ConnRef *lineRef, const double dist, VertInf *inf2, \n        VertInf *inf3, ANode *inf1Node)\n{\n    bool isOrthogonal = (lineRef->routingType() == ConnType_Orthogonal);\n    VertInf *inf1 = (inf1Node) ? inf1Node->inf : nullptr;\n    double result = dist;\n    Polygon connRoute;\n\n    Router *router = inf2->_router;\n    if (inf1 != nullptr)\n    {\n        const double angle_penalty = router->routingParameter(anglePenalty);\n        const double segmt_penalty = router->routingParameter(segmentPenalty);\n\n        // This is not the first segment, so there is a bend\n        // between it and the last one in the existing path.\n        if ((angle_penalty > 0) || (segmt_penalty > 0))\n        {\n            Point p1 = inf1->point;\n            Point p2 = inf2->point;\n            Point p3 = inf3->point;\n\n            double rad = M_PI - angleBetween(p1, p2, p3);\n\n            if ((rad > 0) && !isOrthogonal)\n            {\n                // Make `xval' between 0--10 then take its log so small\n                // angles are not penalised as much as large ones.\n                //\n                double xval = rad * 10 / M_PI;\n                double yval = xval * log10(xval + 1) / 10.5;\n                result += (angle_penalty * yval);\n                //db_printf(\"deg from straight: %g\\tpenalty: %g\\n\",\n                //        rad * 180 / M_PI, (angle_penalty * yval));\n            }\n\n            if (rad == M_PI)\n            {\n                // Needs to double back\n                result += (2 * segmt_penalty);\n            }\n            else if (rad > 0)\n            {\n                // Only penalise as an extra segment if the two \n                // segments are not collinear.\n                result += segmt_penalty;\n            }\n        }\n    }\n\n    const double cluster_crossing_penalty = \n            router->routingParameter(clusterCrossingPenalty);\n    // XXX: Clustered routing doesn't yet work with orthogonal connectors.\n    if (router->ClusteredRouting && !router->clusterRefs.empty() &&\n            (cluster_crossing_penalty > 0))\n    {\n        if (connRoute.empty())\n        {\n            constructPolygonPath(connRoute, inf2, inf3, inf1Node);\n        }\n        // There are clusters so do cluster routing.\n        for (ClusterRefList::const_iterator cl = router->clusterRefs.begin(); \n                cl != router->clusterRefs.end(); ++cl)\n        {\n            Polygon cBoundary = (isOrthogonal) ?\n                    (*cl)->rectangularPolygon() : (*cl)->polygon();\n            if (cBoundary.size() <= 2)\n            {\n                continue;\n            }\n            COLA_ASSERT(cBoundary.ps[0] != cBoundary.ps[cBoundary.size() - 1]);\n            for (size_t j = 0; j < cBoundary.size(); ++j)\n            {\n                // Non-orthogonal cluster boundary points should correspond to \n                // shape vertices and hence already be in the list of vertices.\n                COLA_ASSERT(isOrthogonal || \n                        router->vertices.getVertexByPos(cBoundary.at(j)));\n            }\n            \n            bool isConn = false;\n            Polygon dynamic_conn_route(connRoute);\n            const bool finalSegment = (inf3 == lineRef->dst());\n            ConnectorCrossings cross(cBoundary, isConn, dynamic_conn_route);\n            cross.checkForBranchingSegments = true;\n            cross.countForSegment(connRoute.size() - 1, finalSegment);\n            \n            result += (cross.crossingCount * cluster_crossing_penalty);\n        }\n    }\n    \n    // This penalty penalises route segments that head in a direction opposite\n    // of the direction(s) toward the target point.  \n    const double reversePenalty = router->routingParameter(\n            reverseDirectionPenalty);\n    if (reversePenalty)\n    {\n        // X and Y direction of destination from source point.\n        const Point& srcPoint = lineRef->src()->point;\n        const Point& dstPoint = lineRef->dst()->point;\n        int xDir = dimDirection(dstPoint.x - srcPoint.x);\n        int yDir = dimDirection(dstPoint.y - srcPoint.y);\n        \n        bool doesReverse = false;\n\n        if ((xDir != 0) && \n                (-xDir == dimDirection(inf3->point.x - inf2->point.x)))\n        {\n            // Connector has an X component and the segment heads in the \n            // opposite direction.\n            doesReverse |= true;\n        }\n\n        if ((yDir != 0) && \n                (-yDir == dimDirection(inf3->point.y - inf2->point.y)))\n        {\n            // Connector has an Y component and the segment heads in the \n            // opposite direction.\n            doesReverse |= true;\n        }\n\n        if (doesReverse)\n        {\n            result += reversePenalty;\n        }\n    }\n\n    if (!router->isInCrossingPenaltyReroutingStage())\n    {\n        // Return here if we are not in the post-processing stage \n        return result;\n    }\n\n    const double crossing_penalty = router->routingParameter(crossingPenalty);\n    const double shared_path_penalty = \n            router->routingParameter(fixedSharedPathPenalty);\n    if ((shared_path_penalty > 0) || (crossing_penalty > 0))\n    {\n        if (connRoute.empty())\n        {\n            constructPolygonPath(connRoute, inf2, inf3, inf1Node);\n        }\n        ConnRefList::const_iterator curr, finish = router->connRefs.end();\n        for (curr = router->connRefs.begin(); curr != finish; ++curr)\n        {\n            ConnRef *connRef = *curr;\n\n            if (connRef->id() == lineRef->id())\n            {\n                continue;\n            }\n            const Avoid::PolyLine& route2 = connRef->displayRoute();\n            \n            bool isConn = true;\n            Polygon dynamic_route2(route2);\n            Polygon dynamic_conn_route(connRoute);\n            const bool finalSegment = (inf3->point == lineRef->dst()->point);\n            ConnectorCrossings cross(dynamic_route2, isConn, \n                    dynamic_conn_route, connRef, lineRef);\n            cross.checkForBranchingSegments = true;\n            cross.countForSegment(connRoute.size() - 1, finalSegment);\n\n            if ((cross.crossingFlags & CROSSING_SHARES_PATH) &&\n                    (cross.crossingFlags & CROSSING_SHARES_FIXED_SEGMENT) &&\n                    (router->routingOption(\n                            penaliseOrthogonalSharedPathsAtConnEnds) || \n                     !(cross.crossingFlags & CROSSING_SHARES_PATH_AT_END))) \n            {\n                // Penalise unnecessary shared paths in the middle of\n                // connectors.\n                result += shared_path_penalty;\n            }\n            result += (cross.crossingCount * crossing_penalty);\n        }\n    }\n\n    return result;\n}\n\n// Directions for estimated orthgonal cost, as bitflags.\nstatic const unsigned int CostDirectionN = 1;\nstatic const unsigned int CostDirectionE = 2;\nstatic const unsigned int CostDirectionS = 4;\nstatic const unsigned int CostDirectionW = 8;\n\n#ifdef ESTIMATED_COST_DEBUG\nstatic void printDirections(FILE *fp, unsigned int directions)\n{\n    if (directions & CostDirectionN)\n    {\n        fprintf(fp, \"N \");\n    }\n    if (directions & CostDirectionE)\n    {\n        fprintf(fp, \"E \");\n    }\n    if (directions & CostDirectionS)\n    {\n        fprintf(fp, \"S \");\n    }\n    if (directions & CostDirectionW)\n    {\n        fprintf(fp, \"W \");\n    }\n}\n#endif\n\n// Returns the number of directions for the argument.\nstatic unsigned int orthogonalDirectionsCount(const unsigned int directions)\n{\n    unsigned int count = 0;\n    if (directions & CostDirectionN)\n    {\n        ++count;\n    }\n    if (directions & CostDirectionE)\n    {\n        ++count;\n    }\n    if (directions & CostDirectionS)\n    {\n        ++count;\n    }\n    if (directions & CostDirectionW)\n    {\n        ++count;\n    }\n    return count;\n}\n\n// Returns the directions of point b from point a.\nstatic unsigned int orthogonalDirection(const Point &a, const Point &b)\n{\n    unsigned int result = 0;\n\n    if (b.y > a.y)\n    {\n        result |= CostDirectionS;\n    }\n    else if (b.y < a.y)\n    {\n        result |= CostDirectionN;\n    }\n\n    if (b.x > a.x)\n    {\n        result |= CostDirectionE;\n    }\n    else if (b.x < a.x)\n    {\n        result |= CostDirectionW;\n    }\n\n    return result;\n}\n\n// Returns the direction to the right of the given direction.\nstatic unsigned int dirRight(unsigned int direction)\n{\n    if (direction == CostDirectionN)\n    {\n        return CostDirectionE;\n    }\n    else if (direction == CostDirectionE)\n    {\n        return CostDirectionS;\n    }\n    else if (direction == CostDirectionS)\n    {\n        return CostDirectionW;\n    }\n    else if (direction == CostDirectionW)\n    {\n        return CostDirectionN;\n    }\n    \n    // Should not be possible to reach here.\n    COLA_ASSERT(false);\n    return direction;\n}\n\n// Returns the direction to the left of the given direction.\nstatic unsigned int dirLeft(unsigned int direction)\n{\n    if (direction == CostDirectionN)\n    {\n        return CostDirectionW;\n    }\n    else if (direction == CostDirectionE)\n    {\n        return CostDirectionN;\n    }\n    else if (direction == CostDirectionS)\n    {\n        return CostDirectionE;\n    }\n    else if (direction == CostDirectionW)\n    {\n        return CostDirectionS;\n    }\n    \n    // Should not be possible to reach here.\n    COLA_ASSERT(false);\n    return direction;\n}\n\n// Returns the reverse direction to the given direction.\nstatic unsigned int dirReverse(unsigned int direction)\n{\n    if (direction == CostDirectionN)\n    {\n        return CostDirectionS;\n    }\n    else if (direction == CostDirectionE)\n    {\n        return CostDirectionW;\n    }\n    else if (direction == CostDirectionS)\n    {\n        return CostDirectionN;\n    }\n    else if (direction == CostDirectionW)\n    {\n        return CostDirectionE;\n    }\n    \n    // Should not be possible to reach here.\n    COLA_ASSERT(false);\n    return direction;\n}\n\n// Given Point curr with a direction of currDir, returns the nimimum number \n// of bends to reach Point dest with the entry direction of destDir\n// \n// This is used for estimating the bend penalty cost to the target point\n// from the current point of the search. The geometry was described in the \n// \"Orthogonal Connector Routing\" paper, although the version described \n// there is incorrect.\n//\nint bends(const Point& curr, unsigned int currDir, const Point& dest,\n        unsigned int destDir)\n{\n        // Bend counts from 'o' to 'D' should be:\n        //\n        //                1            1            3\n        //                v            v            v\n        //            2 > o < 2    2 > o < 2    4 > o < 2\n        //                ^            ^            ^\n        //                3            3            3\n        //                                      \n        //   0 > o < 4                 D-->             4 > o < 4\n        //       ^                                          ^\n        //       1                                          3\n        //\n    COLA_ASSERT(currDir != 0);\n    unsigned int currToDestDir = orthogonalDirection(curr, dest);\n    unsigned int reverseDestDir = dirReverse(destDir);\n    bool currDirPerpendicularToDestDir =\n            (currDir == dirLeft(destDir)) || (currDir == dirRight(destDir));\n\n    if ((currDir == destDir) &&\n             (currToDestDir == currDir))\n    {\n        //                                      \n        //   0 > o                     D--> \n        //\n        return 0;\n    }\n    else if (currDirPerpendicularToDestDir &&\n             (currToDestDir == (destDir | currDir)))\n    {\n        //\n        //                1\n        //                v\n        //                o\n        //                 \n        //                                      \n        //                             D-->\n        //\n        return 1;\n    }\n    else if (currDirPerpendicularToDestDir &&\n             (currToDestDir == currDir))\n    {\n        //\n        //                             1\n        //                             v\n        //                             o\n        //                 \n        //                                      \n        //                             D-->\n        //\n        return 1;\n    }\n    else if (currDirPerpendicularToDestDir &&\n             (currToDestDir == destDir))\n    {\n        //\n        //       o                     D-->\n        //       ^\n        //       1\n        //\n        return 1;\n    }\n    else if ((currDir == destDir) && \n             (currToDestDir != currDir) &&\n             !(currToDestDir & reverseDestDir))\n    {\n        //\n        //            2 > o        2 > o\n        //\n        //                                      \n        //                             D-->\n        //\n        return 2;\n    }\n    else if (currDir == reverseDestDir && \n             (currToDestDir != destDir) &&\n             (currToDestDir != currDir))\n    {\n        //\n        //                o < 2        o < 2       o < 2\n        //\n        //                                      \n        //                             D-->\n        //\n        return 2;\n    }\n    else if (currDirPerpendicularToDestDir &&\n             (currToDestDir != (destDir | currDir)) && \n             (currToDestDir != currDir))\n    {\n        //\n        //                                          3\n        //                                          v\n        //                o            o            o\n        //                ^            ^            ^\n        //                3            3            3\n        //                                      \n        //                             D-->                 o\n        //                                                  ^\n        //                                                  3\n        //\n        return 3;\n    }\n    else if ((currDir == reverseDestDir) && \n             ((currToDestDir == destDir) || (currToDestDir == currDir)))\n    {\n        //\n        //                                      \n        //                                      \n        //       o < 4                 D-->                 o < 4\n        //\n        return 4;\n    }\n    else if ((currDir == destDir) && \n             (currToDestDir & reverseDestDir))\n    {\n        //\n        //                                      4 > o\n        //                                      \n        //                                      \n        //                             D-->             4 > o\n        //\n        return 4;\n    }\n\n    // Should not be possible to reach here.\n    COLA_ASSERT(false);\n    return 0;\n}\n\n\nstatic double estimatedCostSpecific(ConnRef *lineRef, const Point *last,\n        const Point& curr, const VertInf *costTar,\n        const unsigned int costTarDirs)\n{\n    Point costTarPoint = costTar->point;\n\n    if (lineRef->routingType() == ConnType_PolyLine)\n    {\n        return euclideanDist(curr, costTarPoint);\n    }\n    else // Orthogonal\n    {\n        // Really doesn't make sense to route orthogonal paths without \n        // a segment penalty.\n        COLA_ASSERT(lineRef->router()->routingParameter(segmentPenalty) > 0);\n\n        double dist = manhattanDist(curr, costTarPoint);\n\n        int bendCount = 0;\n        double xmove = costTarPoint.x - curr.x;\n        double ymove = costTarPoint.y - curr.y;\n        if (last == nullptr)\n        {\n            // This is just the initial point.  Penalise it simply if it is \n            // not inline with the target in either the x- or y-dimension.\n            if ((xmove != 0) && (ymove != 0))\n            {\n                bendCount += 1;\n            }\n        }\n        else if (dist > 0)\n        {\n            // We have two points and a non-zero distance, so we know \n            // the segment direction.\n\n            unsigned int currDir = orthogonalDirection(*last, curr);\n            if ((currDir > 0) && (orthogonalDirectionsCount(currDir) == 1))\n            {\n                // Suitably high value, then we find the minimum.\n                bendCount = 10;\n\n                // Find the minimum bent penalty given all the possible \n                // directions at the target point.\n                if (costTarDirs & CostDirectionN)\n                {\n                    bendCount = std::min(bendCount,\n                            bends(curr, currDir, costTarPoint, CostDirectionN));\n                }\n                if (costTarDirs & CostDirectionE)\n                {\n                    bendCount = std::min(bendCount,\n                            bends(curr, currDir, costTarPoint, CostDirectionE));\n                }\n                if (costTarDirs & CostDirectionS)\n                {\n                    bendCount = std::min(bendCount,\n                            bends(curr, currDir, costTarPoint, CostDirectionS));\n                }\n                if (costTarDirs & CostDirectionW)\n                {\n                    bendCount = std::min(bendCount,\n                            bends(curr, currDir, costTarPoint, CostDirectionW));\n                }\n            }\n        }\n        double penalty = bendCount *\n                lineRef->router()->routingParameter(segmentPenalty);\n\n        return dist + penalty;\n    }\n}\n\n\n\ndouble AStarPathPrivate::estimatedCost(ConnRef *lineRef, const Point *last,\n        const Point& curr) const\n{\n    double estimate = DBL_MAX;\n    COLA_ASSERT(m_cost_targets.size() > 0);\n\n    // Find the minimum cost from the estimates to each of the possible\n    // target points from this current point.\n    for (size_t i = 0; i < m_cost_targets.size(); ++i)\n    {\n        double iEstimate = estimatedCostSpecific(lineRef, last,\n                curr, m_cost_targets[i], m_cost_targets_directions[i]);\n        \n        // Add on the distance to the real target, otherwise this difference\n        // might may make the comparisons unfair if they vary between targets.\n        iEstimate += m_cost_targets_displacements[i];\n        \n        estimate = std::min(estimate, iEstimate);\n    }\n    return estimate;\n}\n\n\nclass CmpVisEdgeRotation \n{\n    public:\n        CmpVisEdgeRotation(const VertInf* lastPt)\n            : _lastPt(lastPt)\n        {\n        }\n        bool operator() (const EdgeInf* u, const EdgeInf* v) const \n        {\n            // Dummy ShapeConnectionPin edges are not orthogonal and \n            // therefore can't be compared in the same way.\n            if (u->isOrthogonal() && v->isOrthogonal())\n            {\n                return u->rotationLessThan(_lastPt, v);\n            }\n            return u < v;\n        }\n    private:\n        const VertInf *_lastPt;\n};\n\n\nstatic inline bool pointAlignedWithOneOf(const Point& point, \n        const std::vector<Point>& points, const size_t dim)\n{\n    for (size_t i = 0; i < points.size(); ++i)\n    {\n        if (point[dim] == points[i][dim])\n        {\n            return true;\n        }\n    }\n    return false;\n}\n\nAStarPath::AStarPath(void)\n    : m_private(new AStarPathPrivate())\n{\n}\n\nAStarPath::~AStarPath(void)\n{\n    delete m_private;\n}\n\nvoid AStarPath::search(ConnRef *lineRef, VertInf *src, VertInf *tar, VertInf *start)\n{\n    m_private->search(lineRef, src, tar, start);\n}\n\nvoid AStarPathPrivate::determineEndPointLocation(double dist, VertInf *start, \n        VertInf *target, VertInf *other, int level)\n{\n    COLA_UNUSED(dist);\n    COLA_UNUSED(start);\n    COLA_UNUSED(level);\n\n    Point otherPoint = other->point;\n    unsigned int thisDirs = orthogonalDirection(otherPoint, target->point);\n    COLA_ASSERT(orthogonalDirectionsCount(thisDirs) > 0);\n    double displacement = manhattanDist(otherPoint, target->point);\n\n    m_cost_targets.push_back(other);\n    m_cost_targets_directions.push_back(thisDirs);\n    m_cost_targets_displacements.push_back(displacement);\n\n#ifdef ESTIMATED_COST_DEBUG\n    fprintf(stderr,\" - %g %g \", otherPoint.x, otherPoint.y);\n    if (manhattanDist(start->point, otherPoint) > dist)\n    {\n        fprintf(stderr,\"far \");\n    }\n    fprintf(stderr, \"%s\", (level == 1) ? \"--\" : \"- \");\n    printDirections(stderr, thisDirs);\n    fprintf(stderr,\"\\n\");\n#endif\n}\n\n// Returns the best path from src to tar using the cost function.\n//\n// The path is worked out using the aStar algorithm, and is encoded via\n// prevNode values for each ANode which point back to the previous ANode.\n// At completion, this order is written into the pathNext links in each \n// of the VerInfs along the path.\n//\n// The aStar STL code is originally based on public domain code available \n// on the internet.\n//\nvoid AStarPathPrivate::search(ConnRef *lineRef, VertInf *src, VertInf *tar, VertInf *start)\n{\n    ANodeCmp pendingCmp;\n\n    bool isOrthogonal = (lineRef->routingType() == ConnType_Orthogonal);\n\n    if (start == nullptr)\n    {\n        start = src;\n    }\n\n#ifdef DEBUGHANDLER\n    if (lineRef->router()->debugHandler())\n    {\n        lineRef->router()->debugHandler()->beginningSearchWithEndpoints(start, tar);\n    }\n#endif\n\n    // Find a target point to use for cost estimate for orthogonal routing.\n    //\n    // If the connectivity is only on the far side we need to estimate to the\n    // point on the far side.  Otherwise for orthogonal routing we can explore\n    // all the space in between before we pay the extra cost to explore this\n    // area.  This is especially true given many orthogonal routes have \n    // equivalent costs.\n#ifdef ESTIMATED_COST_DEBUG\n    fprintf(stderr,\"== aStar  %g %g ==\\n\", tar->point.x, tar->point.y);\n#endif\n    if (isOrthogonal && tar->id.isConnPt() && !tar->id.isConnCheckpoint())\n    {\n        // The target is a connector endpoint and the connector is orthogonal.\n        double dist = manhattanDist(start->point, tar->point);\n        for (EdgeInfList::const_iterator it = tar->orthogVisList.begin(); \n                it != tar->orthogVisList.end(); ++it)\n        {\n            // For each edge from the target endpoint, find the other vertex.\n            EdgeInf *edge = *it;\n            VertInf *other = edge->otherVert(tar);\n            if (other->id.isConnectionPin())\n            {\n                // If this is a connection pin we need to do this process\n                // another time since the current edge will be a dummy \n                // zero-length edge.\n                VertInf *replacementTar = other;\n                for (EdgeInfList::const_iterator it = \n                        replacementTar->orthogVisList.begin(); \n                        it != replacementTar->orthogVisList.end(); ++it)\n                {\n                    EdgeInf *edge = *it;\n                    VertInf *other = edge->otherVert(replacementTar);\n                    if ((other == tar) || \n                            (other->point == tar->point))\n                    {\n                        // Ignore edge we came from, or zero-length edges.\n                        continue;\n                    }\n\n                    // Determine possible target endpoint directions and \n                    // position.\n                    determineEndPointLocation(dist, start, replacementTar,\n                            other, 2);\n                }\n                continue;\n            }\n                    \n            // Determine possible target endpoint directions and position.\n            determineEndPointLocation(dist, start, tar, other, 1);\n        }\n    }\n\n\n    if (m_cost_targets.empty())\n    {\n        m_cost_targets.push_back(tar);\n        // For polyline routing, assume target has visibility is all \n        // directions for the purpose of cost estimations.\n        m_cost_targets_directions.push_back(CostDirectionN |\n                CostDirectionE | CostDirectionS | CostDirectionW);\n        m_cost_targets_displacements.push_back(0.0);\n    }\n\n#ifdef ESTIMATED_COST_DEBUG\n    fprintf(stderr, \"------------\\n\");\n    for (size_t i = 0; i < m_cost_targets.size(); ++i)\n    {\n        fprintf(stderr,\"== %g %g - \", m_cost_targets[i]->point.x,\n                m_cost_targets[i]->point.y);\n        printDirections(stderr, m_cost_targets_directions[i]);\n        fprintf(stderr,\"\\n\");\n    }\n#endif\n\n\n    double (*dist)(const Point& a, const Point& b) = \n        (isOrthogonal) ? manhattanDist : euclideanDist;\n\n    // We need to know the possible endpoints for doing an orthogonal \n    // routing optimisation where we only turn when we are heading beside\n    // a shape or are in line with a possible endpoint.\n    std::vector<Point> endPoints;\n    if (isOrthogonal)\n    {\n        endPoints = lineRef->possibleDstPinPoints();\n    }\n    endPoints.push_back(tar->point);\n    \n    // Heap of PENDING nodes.\n    std::vector<ANode *> PENDING;\n    PENDING.reserve(1000);\n\n    size_t exploredCount = 0;\n    ANode node, ati;\n    ANode *bestNode = nullptr;         // Temporary bestNode\n    bool bNodeFound = false;        // Flag if node is found in container\n    int timestamp = 1;\n\n    Router *router = lineRef->router();\n    if (router->RubberBandRouting && (start != src))\n    {\n        COLA_ASSERT(router->IgnoreRegions == true);\n        \n        const PolyLine& currRoute = lineRef->route();\n        VertInf *last = nullptr;\n        int rIndx = 0;\n        while (last != start)\n        {\n            const Point& pnt = currRoute.at(rIndx);\n            VertIDProps props = (rIndx > 0) ? 0 : VertID::PROP_ConnPoint;\n            VertID vID(pnt.id, pnt.vn, props);\n\n#ifdef PATHDEBUG\n            db_printf(\"/// %d %d\\n\", pnt.id, pnt.vn);\n#endif\n            VertInf *curr = router->vertices.getVertexByID(vID);\n            COLA_ASSERT(curr != nullptr);\n\n            node = ANode(curr, timestamp++);\n            if (!last)\n            {\n                node.inf = src;\n                node.g = 0;\n                node.h = estimatedCost(lineRef, nullptr, node.inf->point);\n\n                node.f = node.g + node.h;\n            }\n            else\n            {\n                double edgeDist = dist(bestNode->inf->point, curr->point);\n\n                node.g = bestNode->g + cost(lineRef, edgeDist, bestNode->inf, \n                        node.inf, bestNode->prevNode);\n\n                // Calculate the Heuristic.\n                node.h = estimatedCost(lineRef, &(bestNode->inf->point),\n                        node.inf->point);\n\n                // The A* formula\n                node.f = node.g + node.h;\n                \n                // Point parent to last bestNode\n                node.prevNode = bestNode;\n            }\n\n            if (curr != start)\n            {\n                bool addToPending = false;\n                bestNode = newANode(node, addToPending);\n                bestNode->inf->aStarDoneNodes.push_back(bestNode);\n                ++exploredCount;\n            }\n            else\n            {\n                ANode * newNode = newANode(node);\n                PENDING.push_back(newNode);\n            }\n\n            rIndx++;\n            last = curr;\n        }\n    }\n    else\n    {\n        if (start->pathNext)\n        {\n            // If we are doing checkpoint routing and have already done one\n            // path, then we have an existing segment to consider for the \n            // cost of the  choice from the start node, so we add a dummy \n            // nodes as if they were already in the Done set.  This causes \n            // us to first search in a collinear direction from the previous \n            // segment.\n            bool addToPending = false;\n            bestNode = newANode(ANode(start->pathNext, timestamp++), \n                    addToPending);\n            bestNode->inf->aStarDoneNodes.push_back(bestNode);\n            ++exploredCount;\n        }\n\n        // Create the start node\n        node = ANode(src, timestamp++);\n        node.g = 0;\n        node.h = estimatedCost(lineRef, nullptr, node.inf->point);\n        node.f = node.g + node.h;\n        // Set a nullptr parent, so cost function knows this is the first segment.\n        node.prevNode = bestNode;\n\n        // Populate the PENDING container with the first location\n        ANode *newNode = newANode(node);\n        PENDING.push_back(newNode);\n    }\n\n    tar->pathNext = nullptr;\n\n    // Create a heap from PENDING for sorting\n    using std::make_heap; using std::push_heap; using std::pop_heap;\n    make_heap( PENDING.begin(), PENDING.end(), pendingCmp);\n\n    // Continue until the queue is empty.\n    while (!PENDING.empty())\n    {\n        TIMER_VAR_ADD(router, 0, 1);\n        // Set the Node with lowest f value to BESTNODE.\n        // Since the ANode operator< is reversed, the head of the\n        // heap is the node with the lowest f value.\n        bestNode = PENDING.front();\n        VertInf *bestNodeInf = bestNode->inf;\n\n#ifdef DEBUGHANDLER\n        if (router->debugHandler())\n        {\n            PolyLine currentSearchPath;\n\n            ANode *curr = bestNode;\n            while (curr)\n            {\n                currentSearchPath.ps.push_back(curr->inf->point);\n                curr = curr->prevNode;\n            }\n            router->debugHandler()->updateCurrentSearchPath(currentSearchPath);\n        }\n#endif\n\n        // Remove this node from the aStarPendingList\n        std::list<ANode *>::iterator finishIt = \n                bestNodeInf->aStarPendingNodes.end();\n        for (std::list<ANode *>::iterator currInd = \n                bestNodeInf->aStarPendingNodes.begin(); currInd != finishIt; \n                ++currInd)\n        {\n            if (*currInd == bestNode)\n            {\n                bestNodeInf->aStarPendingNodes.erase(currInd);\n                break;\n            }\n        }\n\n        // Pop off the heap.  Actually this moves the\n        // far left value to the far right.  The node\n        // is not actually removed since the pop is to\n        // the heap and not the container.\n        pop_heap(PENDING.begin(), PENDING.end(), pendingCmp);\n        // Remove node from right (the value we pop_heap'd)\n        PENDING.pop_back();\n\n        // Add the bestNode into the Done set.\n        bestNodeInf->aStarDoneNodes.push_back(bestNode);\n        ++exploredCount;\n\n        VertInf *prevInf = (bestNode->prevNode) ? bestNode->prevNode->inf : nullptr;\n#ifdef ASTAR_DEBUG\n        db_printf(\"Considering... \");\n        db_printf(\" %g %g  \", bestNodeInf->point.x, bestNodeInf->point.y);\n        bestNodeInf->id.db_print();\n        db_printf(\" - g: %3.1f h: %3.1f back: \", bestNode->g, bestNode->h);\n        if (prevInf)\n        {\n            db_printf(\" %g %g\", prevInf->point.x, prevInf->point.y);\n            //prevInf->id.db_print();\n        }\n        db_printf(\"\\n\");\n#endif\n\n        if (bestNodeInf == tar)\n        {\n            TIMER_VAR_ADD(router, 1, PENDING.size());\n            // This node is our goal.\n#ifdef ASTAR_DEBUG\n            db_printf(\"LINE %10d  Steps: %4d  Cost: %g\\n\", lineRef->id(), \n                    (int) exploredCount, bestNode->f);\n#endif\n     \n            // Correct all the pathNext pointers.\n            for (ANode *curr = bestNode; curr->prevNode; curr = curr->prevNode)\n            {\n#ifdef ASTAR_DEBUG\n                db_printf(\"[%.12f, %.12f]\\n\", curr->inf->point.x, curr->inf->point.y);\n#endif\n                curr->inf->pathNext = curr->prevNode->inf;\n            }\n#ifdef ASTAR_DEBUG\n            db_printf(\"\\n\");\n#endif\n\n            // Exit from the search\n            break;\n        }\n\n        // Check adjacent points in graph and add them to the queue.\n        EdgeInfList& visList = (!isOrthogonal) ?\n                bestNodeInf->visList : bestNodeInf->orthogVisList;\n        if (isOrthogonal)\n        {\n            // We would like to explore in a structured way, \n            // so sort the points in the visList...\n            CmpVisEdgeRotation compare(prevInf);\n            visList.sort(compare);\n        }\n        EdgeInfList::const_iterator finish = visList.end();\n        for (EdgeInfList::const_iterator edge = visList.begin(); \n                edge != finish; ++edge)\n        {\n            if ((*edge)->isDisabled())\n            {\n                // Skip disabled edges.\n                continue;\n            }\n\n            node = ANode((*edge)->otherVert(bestNodeInf), timestamp++);\n            \n            // Set the index to the previous ANode that we reached\n            // this ANode via.\n            node.prevNode = bestNode;\n\n            VertInf *prevInf = (bestNode->prevNode) ?\n                    bestNode->prevNode->inf : nullptr;\n\n            // Don't bother looking at the segment we just arrived along.\n            if (prevInf && (prevInf == node.inf))\n            {\n                continue;\n            }\n            if (node.inf->id.isConnectionPin() && \n                    !node.inf->id.isConnCheckpoint())\n            {\n                if ( !( (bestNodeInf == lineRef->src()) &&\n                        lineRef->src()->id.isDummyPinHelper()\n                      ) &&\n                     !( node.inf->hasNeighbour(lineRef->dst(), isOrthogonal) &&\n                        lineRef->dst()->id.isDummyPinHelper())\n                      )\n                {\n                    // Don't check connection pins if they don't have the \n                    // target vertex as a direct neighbour, or are directly\n                    // leaving the source vertex.\n                    continue;\n                }\n            }\n            else if (node.inf->id.isConnPt())\n            {\n                if ((node.inf != tar))\n                {\n                    // Don't check connector endpoints vertices unless they\n                    // are the target endpoint.\n                    continue;\n                }\n            }\n\n            if (isOrthogonal && !(*edge)->isDummyConnection())\n            {\n                // Orthogonal routing optimisation.\n                // Skip the edges that don't lead to shape edges, or the \n                // connection point we are looking for.  Though allow them\n                // if we haven't yet turned from the source point, since it\n                // may be a free-floating endpoint with directional visibility.\n                // Also, don't check if the previous point was a dummy for a\n                // connection pin and this happens to be placed diagonally \n                // from here, i.e., when both of notInline{X,Y} are true.\n                Point& bestPt = bestNodeInf->point;\n                Point& nextPt = node.inf->point;\n\n                bool notInlineX = prevInf && (prevInf->point.x != bestPt.x);\n                bool notInlineY = prevInf && (prevInf->point.y != bestPt.y);\n                if ((bestPt.x == nextPt.x) && notInlineX && !notInlineY &&\n                        (bestPt[YDIM] != src->point[YDIM]))\n                {\n                    if (nextPt.y < bestPt.y)\n                    {\n                        if (!(bestNodeInf->orthogVisPropFlags & YL_EDGE) &&\n                                !pointAlignedWithOneOf(bestPt, endPoints, XDIM))\n                        {\n                            continue;\n                        }\n                    }\n                    else if (nextPt.y > bestPt.y)\n                    {\n                        if (!(bestNodeInf->orthogVisPropFlags & YH_EDGE) &&\n                                !pointAlignedWithOneOf(bestPt, endPoints, XDIM))\n                        {\n                            continue;\n                        }\n                    }\n                }\n                if ((bestPt.y == nextPt.y) && notInlineY && !notInlineX &&\n                        (bestPt[XDIM] != src->point[XDIM]))\n                {\n                    if (nextPt.x < bestPt.x)\n                    {\n                        if (!(bestNodeInf->orthogVisPropFlags & XL_EDGE) &&\n                                !pointAlignedWithOneOf(bestPt, endPoints, YDIM))\n                        {\n                            continue;\n                        }\n                    }\n                    else if (nextPt.x > bestPt.x)\n                    {\n                        if (!(bestNodeInf->orthogVisPropFlags & XH_EDGE) &&\n                                !pointAlignedWithOneOf(bestPt, endPoints, YDIM))\n                        {\n                            continue;\n                        }\n                    }\n                }\n            }\n\n            double edgeDist = (*edge)->getDist();\n\n            if (edgeDist == 0)\n            {\n                continue;\n            }\n\n            if (!isOrthogonal &&\n                  (!router->RubberBandRouting || (start == src)) && \n                  (validateBendPoint(prevInf, bestNodeInf, node.inf) == false))\n            {\n                // The bendpoint is not valid, i.e., is a zigzag corner, so...\n                continue;\n                // For RubberBand routing we want to allow these routes and\n                // unwind them later, otherwise instead or unwinding, paths\n                // can go the *really* long way round.\n            }\n\n            // Figure out if we are at one of the cost targets.\n            bool atCostTarget = false;\n            for (size_t i = 0; i < m_cost_targets.size(); ++i)\n            {\n                if (bestNode->inf == m_cost_targets[i])\n                        \n                {\n                    atCostTarget = true;\n                    break;\n                }\n            }\n\n            if (atCostTarget &&\n                    (node.inf->id.isConnectionPin() || (node.inf == tar)))\n            {\n                // This is a point on the side of an obstacle that connects\n                // to the target or a connection pin.  It should have no \n                // further cost and the heuristic should be zero.\n                node.g = bestNode->g;\n                node.h = 0;\n            }\n            else \n            {\n                if (node.inf == tar)\n                {\n                    // We've reached the target.  The heuristic should be zero.\n                    node.h = 0;\n                }\n                else\n                {\n                    // Otherwise, calculate the heuristic value.\n                    node.h = estimatedCost(lineRef, &(bestNodeInf->point),\n                            node.inf->point);\n                }\n                \n                if (node.inf->id.isDummyPinHelper())\n                {\n                    // This is connecting to a connection pin helper vertex.\n                    // There should be no additional cost for this step.\n                    node.g = bestNode->g;\n                }\n                else\n                {\n                    // Otherwise, calculate the cost of this step.\n                    node.g = bestNode->g + cost(lineRef, edgeDist, bestNodeInf, \n                            node.inf, bestNode->prevNode);\n                }\n            }\n\n            // The A* formula\n            node.f = node.g + node.h;\n\n#ifdef ASTAR_DEBUG\n            db_printf(\"-- Adding: %g %g  \", node.inf->point.x, \n                    node.inf->point.y);\n            node.inf->id.db_print();\n            db_printf(\" - g: %3.1f h: %3.1f \\n\", node.g, node.h);\n#endif\n\n            bNodeFound = false;\n\n    \n            // Check to see if already on PENDING\n            std::list<ANode *>::const_iterator finish = node.inf->aStarPendingNodes.end();\n            for (std::list<ANode *>::const_iterator currInd = \n                    node.inf->aStarPendingNodes.begin(); currInd != finish; ++currInd)\n            {\n                ati = **currInd;\n                // The (node.prevNode == ati.prevNode) is redundant, but may\n                // save checking the mosre costly prevNode->inf test if the\n                // Nodes are the same.\n                if ((node.inf == ati.inf) && \n                        ((node.prevNode == ati.prevNode) ||\n                         (node.prevNode->inf == ati.prevNode->inf)))\n                {\n                    // If already on PENDING\n                    if (node.g < ati.g)\n                    {\n                        // Replace the existing node in PENDING\n                        **currInd = node;\n                        make_heap( PENDING.begin(), PENDING.end(), pendingCmp);\n                    }\n                    bNodeFound = true;\n                    break;\n                }\n            }\n            if ( !bNodeFound ) // If Node NOT found on PENDING\n            {\n                // Check to see if it is already in the Done set for this\n                // vertex.\n                for (std::list<ANode *>::const_iterator currInd = \n                        node.inf->aStarDoneNodes.begin();\n                        currInd != node.inf->aStarDoneNodes.end(); ++currInd)\n                {\n                    ati = **currInd;\n                    // The (node.prevNode == ati.prevNode) is redundant, but may\n                    // save checking the mosre costly prevNode->inf test if the\n                    // Nodes are the same.\n                    if ((node.inf == ati.inf) && ati.prevNode &&\n                            ((node.prevNode == ati.prevNode) ||\n                             (node.prevNode->inf == ati.prevNode->inf)))\n                    {\n                        //COLA_ASSERT(node.g >= (ati.g - 10e-10));\n                        // This node is already in the Done set and the \n                        // current node also has a higher g-value, so we \n                        // don't need to consider this node.\n                        bNodeFound = true;\n                        break;\n                    }\n                }\n            }\n\n            if (!bNodeFound ) // If Node NOT in either Pending or Done.\n            {\n                // Push NewNode onto PENDING\n                ANode *newNode = newANode(node);\n                PENDING.push_back(newNode);\n                // Push NewNode onto heap\n                push_heap( PENDING.begin(), PENDING.end(), pendingCmp);\n\n#if 0\n                using std::cout; using std::endl;\n                // Display PENDING container (For Debugging)\n                cout << \"PENDING:   \";\n                for (unsigned int i = 0; i < PENDING.size(); i++)\n                {\n                    cout << PENDING[i]->g << \",\" << PENDING[i]->h << \",\";\n                    cout << PENDING[i]->inf << \",\" << PENDING[i]->pp << \"  \";\n                }\n                cout << endl << endl;\n#endif\n            }\n        }\n    }\n\n    // Cleanup lists used to store Done and Pending sets for each vertex.\n    VertInf *endVert = router->vertices.end();\n    for (VertInf *k = router->vertices.connsBegin(); k != endVert;\n            k = k->lstNext)\n    {\n        k->aStarDoneNodes.clear();\n        k->aStarPendingNodes.clear();\n    }\n}\n\n\n}\n\n\n"
  },
  {
    "path": "cola/libavoid/makepath.h",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libavoid - Fast, Incremental, Object-avoiding Line Router\n *\n * Copyright (C) 2004-2008  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * Licensees holding a valid commercial license may use this file in\n * accordance with the commercial license agreement provided with the \n * library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  \n *\n * Author(s):   Michael Wybrow\n*/\n\n\n#ifndef AVOID_MAKEPATH_H\n#define AVOID_MAKEPATH_H\n\n\nnamespace Avoid {\n\nclass ConnRef;\nclass AStarPathPrivate;\nclass ANode;\nclass VertInf;\n\nclass AStarPath\n{\n    public:\n        AStarPath();\n        ~AStarPath();\n        void search(ConnRef *lineRef, VertInf *src, VertInf *tar, \n                VertInf *start);\n    private:\n        AStarPathPrivate *m_private;        \n};\n\n}\n\n#endif\n\n\n"
  },
  {
    "path": "cola/libavoid/mtst.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libavoid - Fast, Incremental, Object-avoiding Line Router\n *\n * Copyright (C) 2011-2014  Monash University\n *\n * --------------------------------------------------------------------\n * Sequential Construction of the Minimum Terminal Spanning Tree is an\n * extended version of the method described in Section IV.B of:\n *     Long, J., Zhou, H., Memik, S.O. (2008). EBOARST: An efficient\n *     edge-based obstacle-avoiding rectilinear Steiner tree construction\n *     algorithm. IEEE Trans. on Computer-Aided Design of Integrated\n *     Circuits and Systems 27(12), pages 2169--2182.\n * --------------------------------------------------------------------\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * Licensees holding a valid commercial license may use this file in\n * accordance with the commercial license agreement provided with the\n * library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n * Author(s):  Michael Wybrow\n*/\n\n#include <cfloat>\n#include <vector>\n#include <algorithm>\n#include <string>\n#include <cstring>\n\n\n#include \"libavoid/hyperedgetree.h\"\n#include \"libavoid/router.h\"\n#include \"libavoid/mtst.h\"\n#include \"libavoid/vertices.h\"\n#include \"libavoid/timer.h\"\n#include \"libavoid/junction.h\"\n#include \"libavoid/debughandler.h\"\n\nnamespace Avoid {\n\n\n// Comparison for the vertex heap in the extended Dijkstra's algorithm.\nbool HeapCmpVertInf::operator()(const VertInf *a, const VertInf *b) const\n{\n    return a->sptfDist > b->sptfDist;\n}\n\n\n// Comparison for the bridging edge heap in the extended Kruskal's algorithm.\nbool CmpEdgeInf::operator()(const EdgeInf *a, const EdgeInf *b) const\n{\n    return a->mtstDist() > b->mtstDist();\n}\n\n\nstruct delete_vertex\n{\n    void operator()(VertInf *ptr)\n    {\n        ptr->removeFromGraph(false);\n        delete ptr;\n    }\n};\n\n\nMinimumTerminalSpanningTree::MinimumTerminalSpanningTree(Router *router,\n        std::set<VertInf *> terminals, JunctionHyperedgeTreeNodeMap *hyperedgeTreeJunctions)\n    : router(router),\n      isOrthogonal(true),\n      terminals(terminals),\n      hyperedgeTreeJunctions(hyperedgeTreeJunctions),\n      m_rootJunction(nullptr),\n      bendPenalty(2000),\n      dimensionChangeVertexID(0, 42)\n{\n\n}\n\nMinimumTerminalSpanningTree::~MinimumTerminalSpanningTree()\n{\n    // Free the temporary hyperedge tree representation.\n    m_rootJunction->deleteEdgesExcept(nullptr);\n    delete m_rootJunction;\n    m_rootJunction = nullptr;\n}\n\n\nHyperedgeTreeNode *MinimumTerminalSpanningTree::rootJunction(void) const\n{\n    return m_rootJunction;\n}\n\n\nvoid MinimumTerminalSpanningTree::makeSet(VertInf *vertex)\n{\n    VertexSet newSet;\n    newSet.insert(vertex);\n    allsets.push_back(newSet);\n}\n\nVertexSetList::iterator MinimumTerminalSpanningTree::findSet(VertInf *vertex)\n{\n    for (VertexSetList::iterator it = allsets.begin();\n            it != allsets.end(); ++it)\n    {\n        if (it->find(vertex) != it->end())\n        {\n            return it;\n        }\n    }\n    return allsets.end();\n}\n\nvoid MinimumTerminalSpanningTree::unionSets(VertexSetList::iterator s1,\n        VertexSetList::iterator s2)\n{\n    std::set<VertInf *> s = *s1;\n    s.insert(s2->begin(), s2->end());\n\n    allsets.erase(s1);\n    allsets.erase(s2);\n    allsets.push_back(s);\n}\n\nHyperedgeTreeNode *MinimumTerminalSpanningTree::addNode(VertInf *vertex,\n        HyperedgeTreeNode *prevNode)\n{\n    HyperedgeTreeNode *node = nullptr;\n\n    // Do we already have a node for this vertex?\n    VertexNodeMap::iterator match = nodes.find(vertex);\n    if (match == nodes.end())\n    {\n        // Not found.  Create new node.\n        HyperedgeTreeNode *newNode = new HyperedgeTreeNode();\n        newNode->point = vertex->point;\n        // Remember it.\n        nodes[vertex] = newNode;\n\n        node = newNode;\n    }\n    else\n    {\n        // Found.\n        HyperedgeTreeNode *junctionNode = match->second;\n        if (junctionNode->junction == nullptr)\n        {\n            // Create a junction, if one has not already been created.\n            junctionNode->junction = new JunctionRef(router, vertex->point);\n            if (m_rootJunction == nullptr)\n            {\n                // Remember the first junction node, so we can use it to\n                // traverse the tree, added and connecting connectors to\n                // junctions and endpoints.\n                m_rootJunction = junctionNode;\n            }\n            router->removeObjectFromQueuedActions(junctionNode->junction);\n            junctionNode->junction->makeActive();\n        }\n        node = junctionNode;\n    }\n\n    if (prevNode)\n    {\n        // Join this node to the previous node.\n        new HyperedgeTreeEdge(prevNode, node, nullptr);\n    }\n\n    return node;\n}\n\nvoid MinimumTerminalSpanningTree::buildHyperedgeTreeToRoot(VertInf *currVert,\n        HyperedgeTreeNode *prevNode, VertInf *prevVert, bool markEdges)\n{\n    if (prevNode->junction)\n    {\n        // We've reached a junction, so stop.\n        return;\n    }\n\n    COLA_ASSERT(currVert != nullptr);\n\n    // This method follows branches in a shortest path tree back to the\n    // root, generating hyperedge tree nodes and branches as it goes.\n    while (currVert)\n    {\n        // Add the node, if necessary.\n        HyperedgeTreeNode *currentNode = addNode(currVert, prevNode);\n\n        if (markEdges)\n        {\n            //COLA_ASSERT( !(currVert->id == dimensionChangeVertexID) );\n            //COLA_ASSERT( !(prevVert->id == dimensionChangeVertexID) );\n            EdgeInf *edge = prevVert->hasNeighbour(currVert, isOrthogonal);\n            if (edge == nullptr && (currVert->id == dimensionChangeVertexID))\n            {\n                VertInf *modCurr = (currVert->id == dimensionChangeVertexID) ?\n                        currVert->m_orthogonalPartner : currVert;\n                VertInf *modPrev = (prevVert->id == dimensionChangeVertexID) ?\n                        prevVert->m_orthogonalPartner : prevVert;\n                edge = modPrev->hasNeighbour(modCurr, isOrthogonal);\n            }\n            COLA_ASSERT(edge);\n            edge->setHyperedgeSegment(true);\n        }\n\n#ifdef DEBUGHANDLER\n        if (router->debugHandler())\n        {\n            router->debugHandler()->mtstCommitToEdge(currVert, prevVert, false);\n        }\n#endif\n\n        if (currentNode->junction)\n        {\n            // We've reached a junction, so stop.\n            break;\n        }\n\n        if (currVert->pathNext == nullptr)\n        {\n            // This is a terminal of the hyperedge, mark the node with the\n            // vertex representing the endpoint of the connector so we can\n            // later use this to set the correct ConnEnd for the connector.\n            currentNode->finalVertex = currVert;\n        }\n\n        if (currVert->id.isDummyPinHelper())\n        {\n            // Note if we have an extra dummy vertex for connecting\n            // to possible connection pins.\n            currentNode->isPinDummyEndpoint = true;\n        }\n\n        prevNode = currentNode;\n        prevVert = currVert;\n        currVert = currVert->pathNext;\n    }\n}\n\n\nVertInf **MinimumTerminalSpanningTree::resetDistsForPath(VertInf *currVert, VertInf **newRootVertPtr)\n{\n    COLA_ASSERT(currVert != nullptr);\n\n    // This method follows branches in a shortest path tree back to the\n    // root, generating hyperedge tree nodes and branches as it goes.\n    while (currVert)\n    {\n        if (currVert->sptfDist == 0)\n        {\n            VertInf **oldTreeRootPtr = currVert->treeRootPointer();\n            // We've reached a junction, so stop.\n            rewriteRestOfHyperedge(currVert, newRootVertPtr);\n            return oldTreeRootPtr;\n        }\n\n        currVert->sptfDist = 0;\n        currVert->setTreeRootPointer(newRootVertPtr);\n\n        terminals.insert(currVert);\n\n        currVert = currVert->pathNext;\n    }\n\n    // Shouldn't get here.\n    COLA_ASSERT(false);\n    return nullptr;\n}\n\n\nvoid MinimumTerminalSpanningTree::constructSequential(void)\n{\n    // First, perform extended Dijkstra's algorithm\n    // ============================================\n    //\n    TIMER_START(router, tmHyperedgeForest);\n\n    // Vertex heap for extended Dijkstra's algorithm.\n    std::vector<VertInf *> vHeap;\n    HeapCmpVertInf vHeapCompare;\n\n    // Bridging edge heap for the extended Kruskal's algorithm.\n    std::vector<EdgeInf *> beHeap;\n    CmpEdgeInf beHeapCompare;\n\n#ifdef DEBUGHANDLER\n    if (router->debugHandler())\n    {\n        router->debugHandler()->beginningHyperedgeReroutingWithEndpoints(\n                terminals);\n    }\n#endif\n\n    // Initialisation\n    //\n    VertInf *endVert = router->vertices.end();\n    for (VertInf *k = router->vertices.connsBegin(); k != endVert;\n            k = k->lstNext)\n    {\n        k->sptfDist = DBL_MAX;\n        k->pathNext = nullptr;\n        k->setSPTFRoot(k);\n    }\n    for (std::set<VertInf *>::iterator ti = terminals.begin();\n            ti != terminals.end(); ++ti)\n    {\n        VertInf *t = *ti;\n        // This is a terminal, set a distance of zero.\n        t->sptfDist = 0;\n        makeSet(t);\n        vHeap.push_back(t);\n\n    }\n    std::make_heap(vHeap.begin(), vHeap.end(), vHeapCompare);\n\n    // Shortest path terminal forest construction\n    //\n    while ( ! vHeap.empty() )\n    {\n        // Take the lowest vertex from heap.\n        VertInf *u = vHeap.front();\n\n        // Pop the lowest vertex off the heap.\n        std::pop_heap(vHeap.begin(), vHeap.end(), vHeapCompare);\n        vHeap.pop_back();\n\n        // For each edge from this vertex...\n        EdgeInfList& visList = (!isOrthogonal) ? u->visList : u->orthogVisList;\n        EdgeInfList::const_iterator finish = visList.end();\n        VertInf *extraVertex = nullptr;\n        for (EdgeInfList::const_iterator edge = visList.begin();\n                edge != finish; ++edge)\n        {\n            VertInf *v = (*edge)->otherVert(u);\n            double edgeDist = (*edge)->getDist();\n\n            // Assign a distance (length) of 1 for dummy visibility edges\n            // which may not accurately reflect the real distance of the edge.\n            if (v->id.isDummyPinHelper() || u->id.isDummyPinHelper())\n            {\n                edgeDist = 1;\n            }\n\n            // Ignore an edge we have already explored.\n            if (u->pathNext == v ||\n                    (u->pathNext && u->pathNext->pathNext == v))\n            {\n                continue;\n            }\n\n            // Don't do anything more here if this is an intra-tree edge that\n            // would just bridge branches of the same tree.\n            if (u->sptfRoot() == v->sptfRoot())\n            {\n                continue;\n            }\n\n            // This is an extension to the original method that takes a bend\n            // cost into account.  When edges from this node, we take into\n            // account the direction of the branch in the tree that got us\n            // here.  For an edge colinear to this we do the normal thing,\n            // and add it to the heap.  For edges at right angle, we don't\n            // immediately add these, but instead add a dummy segment and node\n            // at the current position and give the edge an distance equal to\n            // the bend penalty.  We add equivalent edges for the right-angled\n            // original edges, so these may be explored when the algorithm\n            // explores the dummy node.  Obviously we also need to clean up\n            // these dummy nodes and edges later.\n            double newCost = (u->sptfDist + edgeDist);\n\n            double freeConnection = connectsWithoutBend(u, v);\n            COLA_ASSERT(!freeConnection == (u->pathNext && ! colinear(u->pathNext->point,\n                    u->point, v->point)));\n            if (!freeConnection)\n            {\n                // This edge is not colinear, so add it to the dummy node and\n                // ignore it.\n                COLA_ASSERT(u->id != dimensionChangeVertexID);\n                if ( ! extraVertex )\n                {\n                    // Create the dummy node if necessary.\n                    extraVertex = new VertInf(router, dimensionChangeVertexID,\n                           u->point, false);\n                    extraVertices.push_back(extraVertex);\n                    extraVertex->sptfDist = bendPenalty + u->sptfDist;\n                    extraVertex->pathNext = u;\n                    extraVertex->setSPTFRoot(u->sptfRoot());\n                    vHeap.push_back(extraVertex);\n                    std::push_heap(vHeap.begin(), vHeap.end(), vHeapCompare);\n                }\n                // Add a copy of the ignored edge to the dummy node, so it\n                // may be explored later.\n                EdgeInf *extraEdge = new EdgeInf(extraVertex, v, isOrthogonal);\n                extraEdge->setDist(edgeDist);\n                continue;\n            }\n\n            if (newCost < v->sptfDist && v->sptfRoot() == v)\n            {\n                // We have got to a node we haven't explored to from any tree.\n                // So attach it to the tree and update it with the distance\n                // from the root to reach this vertex.  Then add the vertex\n                // to the heap of potentials to explore.\n                v->sptfDist = newCost;\n                v->pathNext = u;\n                v->setSPTFRoot(u->sptfRoot());\n                vHeap.push_back(v);\n                std::push_heap(vHeap.begin(), vHeap.end(), vHeapCompare);\n#ifdef DEBUGHANDLER\n                if (router->debugHandler())\n                {\n                    router->debugHandler()->mtstGrowForestWithEdge(u, v, true);\n                }\n#endif\n            }\n            else\n            {\n                // We have reached a node that has been reached already through\n                // a different tree.  Set the MTST distance for the bridging\n                // edge and push it to the priority queue of edges to consider\n                // during the extended Kruskal's algorithm.\n                double secondJoinCost = connectsWithoutBend(v, u) ?\n                        0.0 : bendPenalty;\n\n                // The default cost is the cost back to the root of each\n                // forest plus the length of this edge.\n                double cost = (*edge)->m_vert1->sptfDist +\n                        (*edge)->m_vert2->sptfDist + secondJoinCost +\n                        (*edge)->getDist();\n                (*edge)->setMtstDist(cost);\n                beHeap.push_back(*edge);\n\n#ifdef DEBUGHANDLER\n                if (router->debugHandler())\n                {\n                    router->debugHandler()->mtstPotentialBridgingEdge(u, v);\n                }\n#endif\n            }\n        }\n    }\n    // Make the bridging edge heap.\n    std::make_heap(beHeap.begin(), beHeap.end(), beHeapCompare);\n    TIMER_STOP(router);\n\n    // Next, perform extended Kruskal's algorithm\n    // ==========================================\n    //\n    TIMER_START(router, tmHyperedgeMTST);\n    while ( ! beHeap.empty() )\n    {\n        // Take the lowest cost edge.\n        EdgeInf *e = beHeap.front();\n\n        // Pop the lowest cost edge off of the heap.\n        std::pop_heap(beHeap.begin(), beHeap.end(), beHeapCompare);\n        beHeap.pop_back();\n\n        // Find the sets of terminals that each of the trees connects.\n        VertexSetList::iterator s1 = findSet(e->m_vert1->sptfRoot());\n        VertexSetList::iterator s2 = findSet(e->m_vert2->sptfRoot());\n\n        if ((s1 == allsets.end()) || (s2 == allsets.end()))\n        {\n            // This is a special case if we would be connecting to something\n            // that isn't a standard terminal shortest path tree, and thus\n            // doesn't have a root.\n            continue;\n        }\n\n        // We ignore edges that don't connect us to anything new, i.e., when\n        // the terminal sets are the same.\n        if (s1 != s2)\n        {\n            // This is bridging us to one or more new terminals.\n\n            // Union the terminal sets.\n            unionSets(s1, s2);\n\n            // Connect this edge into the MTST by building HyperedgeTree nodes\n            // and edges for this edge and the path back to the tree root.\n            HyperedgeTreeNode *node1 = nullptr;\n            HyperedgeTreeNode *node2 = nullptr;\n            if (hyperedgeTreeJunctions)\n            {\n                node1 = addNode(e->m_vert1, nullptr);\n                node2 = addNode(e->m_vert2, node1);\n            }\n\n#ifdef DEBUGHANDLER\n            if (router->debugHandler())\n            {\n                router->debugHandler()->mtstCommitToEdge(\n                        e->m_vert1, e->m_vert2, true);\n            }\n#endif\n\n            buildHyperedgeTreeToRoot(e->m_vert1->pathNext, node1, e->m_vert1);\n            buildHyperedgeTreeToRoot(e->m_vert2->pathNext, node2, e->m_vert2);\n        }\n    }\n\n    // Free the dummy nodes and edges created earlier.\n    for_each(extraVertices.begin(), extraVertices.end(), delete_vertex());\n    extraVertices.clear();\n    nodes.clear();\n    allsets.clear();\n\n    TIMER_STOP(router);\n}\n\nVertInf *MinimumTerminalSpanningTree::orthogonalPartner(VertInf *vert,\n        double penalty)\n{\n    if (penalty == 0)\n    {\n        penalty = bendPenalty;\n    }\n    if (vert->m_orthogonalPartner == nullptr)\n    {\n        vert->m_orthogonalPartner = new VertInf(router,\n                dimensionChangeVertexID, vert->point, false);\n        vert->m_orthogonalPartner->m_orthogonalPartner = vert;\n        extraVertices.push_back(vert->m_orthogonalPartner);\n        EdgeInf *extraEdge = new EdgeInf(vert->m_orthogonalPartner, vert,\n                isOrthogonal);\n        extraEdge->setDist(penalty);\n    }\n    return vert->m_orthogonalPartner;\n}\n\nvoid MinimumTerminalSpanningTree::removeInvalidBridgingEdges()\n{\n    // Look through the bridging edge heap for any now invalidated edges and\n    // remove these by only copying valid edges to the beHeapNew array.\n    size_t beHeapSize = beHeap.size();\n    std::vector<EdgeInf *> beHeapNew(beHeapSize);\n    size_t j = 0;\n    for (size_t i = 0; i < beHeapSize; ++i)\n    {\n        EdgeInf *e = beHeap[i];\n\n        VertexPair ends = realVerticesCountingPartners(e);\n        bool valid = (ends.first->treeRoot() != ends.second->treeRoot()) &&\n                ends.first->treeRoot() && ends.second->treeRoot() &&\n                (origTerminals.find(ends.first->treeRoot()) != origTerminals.end()) &&\n                (origTerminals.find(ends.second->treeRoot()) != origTerminals.end());\n        if (!valid)\n        {\n            // This is an invalid edge, don't copy it to beHeapNew.\n            continue;\n        }\n\n        // Copy the other bridging edges to beHeapNew.\n        beHeapNew[j] = beHeap[i];\n        ++j;\n    }\n    beHeapNew.resize(j);\n    // Replace beHeap with beHeapNew\n    beHeap = beHeapNew;\n\n    // Remake the bridging edge heap, since we've deleted many elements.\n    std::make_heap(beHeap.begin(), beHeap.end(), beHeapCompare);\n}\n\nLayeredOrthogonalEdgeList MinimumTerminalSpanningTree::\n        getOrthogonalEdgesFromVertex(VertInf *vert, VertInf *prev)\n{\n    LayeredOrthogonalEdgeList edgeList;\n\n    COLA_ASSERT(vert);\n\n    double penalty = (prev == nullptr) ? 0.1 : 0;\n    orthogonalPartner(vert, penalty);\n\n    bool isRealVert = (vert->id != dimensionChangeVertexID);\n    VertInf *realVert = (isRealVert) ? vert : orthogonalPartner(vert);\n    COLA_ASSERT(realVert->id != dimensionChangeVertexID);\n    EdgeInfList& visList = (!isOrthogonal) ? realVert->visList : realVert->orthogVisList;\n    EdgeInfList::const_iterator finish = visList.end();\n    for (EdgeInfList::const_iterator edge = visList.begin(); edge != finish; ++edge)\n    {\n        VertInf *other = (*edge)->otherVert(realVert);\n\n        if (other == orthogonalPartner(realVert))\n        {\n            VertInf *partner = (isRealVert) ? other : orthogonalPartner(other);\n            if (partner != prev)\n            {\n                edgeList.push_back(std::make_pair(*edge, partner));\n            }\n            continue;\n        }\n\n        VertInf *partner = (isRealVert) ? other : orthogonalPartner(other);\n        COLA_ASSERT(partner);\n\n        if (other->point.y == realVert->point.y)\n        {\n            if (isRealVert && (prev != partner))\n            {\n                edgeList.push_back(std::make_pair(*edge, partner));\n            }\n        }\n        else if (other->point.x == realVert->point.x)\n        {\n            if (!isRealVert && (prev != partner))\n            {\n                edgeList.push_back(std::make_pair(*edge, partner));\n            }\n        }\n        else\n        {\n            printf(\"Warning, nonorthogonal edge.\\n\");\n            edgeList.push_back(std::make_pair(*edge, other));\n        }\n    }\n\n    return edgeList;\n}\n\nvoid MinimumTerminalSpanningTree::constructInterleaved(void)\n{\n    // Perform an interleaved construction of the MTST and SPTF\n    // ========================================================\n    //\n    TIMER_START(router, tmHyperedgeAlt);\n\n    origTerminals = terminals;\n\n    // Initialisation\n    //\n    VertInf *endVert = router->vertices.end();\n    for (VertInf *k = router->vertices.connsBegin(); k != endVert;\n            k = k->lstNext)\n    {\n        k->sptfDist = DBL_MAX;\n        k->pathNext = nullptr;\n        k->setTreeRootPointer(nullptr);\n        k->m_orthogonalPartner = nullptr;\n    }\n\n#ifdef DEBUGHANDLER\n    if (router->debugHandler())\n    {\n        router->debugHandler()->beginningHyperedgeReroutingWithEndpoints(\n                terminals);\n    }\n#endif\n\n    COLA_ASSERT(rootVertexPointers.empty());\n    for (std::set<VertInf *>::iterator ti = terminals.begin();\n            ti != terminals.end(); ++ti)\n    {\n        VertInf *t = *ti;\n        // This is a terminal, set a distance of zero.\n        t->sptfDist = 0;\n        rootVertexPointers.push_back(t->makeTreeRootPointer(t));\n        vHeap.push_back(t);\n    }\n    for (EdgeInf *t = router->visOrthogGraph.begin();\n            t != router->visOrthogGraph.end(); t = t->lstNext)\n    {\n        t->setHyperedgeSegment(false);\n    }\n\n    std::make_heap(vHeap.begin(), vHeap.end(), vHeapCompare);\n\n    // Shortest Path Terminal Forest construction\n    //\n    while ( ! vHeap.empty() )\n    {\n        // Take the lowest vertex from heap.\n        VertInf *u = vHeap.front();\n\n        // There should be no orphaned vertices.\n        COLA_ASSERT(u->treeRoot() != nullptr);\n        COLA_ASSERT(u->pathNext || (u->sptfDist == 0));\n\n        if (!beHeap.empty() && u->sptfDist >= (0.5 * beHeap.front()->mtstDist()))\n        {\n            // Take the lowest cost edge.\n            EdgeInf *e = beHeap.front();\n\n            // Pop the lowest cost edge off of the heap.\n            std::pop_heap(beHeap.begin(), beHeap.end(), beHeapCompare);\n            beHeap.pop_back();\n\n#ifndef NDEBUG\n            VertexPair ends = realVerticesCountingPartners(e);\n#endif\n            COLA_ASSERT(origTerminals.find(ends.first->treeRoot()) != origTerminals.end());\n            COLA_ASSERT(origTerminals.find(ends.second->treeRoot()) != origTerminals.end());\n\n            commitToBridgingEdge(e);\n\n            if (origTerminals.size() == 1)\n            {\n                break;\n            }\n\n            removeInvalidBridgingEdges();\n\n            // Don't pop this vertex, but continue.\n            continue;\n        }\n\n        // Pop the lowest vertex off the heap.\n        std::pop_heap(vHeap.begin(), vHeap.end(), vHeapCompare);\n        vHeap.pop_back();\n\n        // For each edge from this vertex...\n        LayeredOrthogonalEdgeList edgeList = getOrthogonalEdgesFromVertex(u,\n                u->pathNext);\n        for (LayeredOrthogonalEdgeList::const_iterator edge = edgeList.begin();\n                edge != edgeList.end(); ++edge)\n        {\n            VertInf *v = edge->second;\n            EdgeInf *e = edge->first;\n            double edgeDist = e->getDist();\n\n            // Assign a distance (length) of 1 for dummy visibility edges\n            // which may not accurately reflect the real distance of the edge.\n            if (v->id.isDummyPinHelper() || u->id.isDummyPinHelper())\n            {\n                edgeDist = 1;\n            }\n\n            // Don't do anything more here if this is an intra-tree edge that\n            // would just bridge branches of the same tree.\n            if (u->treeRoot() == v->treeRoot())\n            {\n                continue;\n            }\n\n            // This is an extension to the original method that takes a bend\n            // cost into account.  For edges from this node, we take into\n            // account the direction of the branch in the tree that got us\n            // here.  For an edge colinear to this we do the normal thing,\n            // and add it to the heap.  For edges at right angle, we don't\n            // immediately add these, but instead add a dummy segment and node\n            // at the current position and give the edge an distance equal to\n            // the bend penalty.  We add equivalent edges for the right-angled\n            // original edges, so these may be explored when the algorithm\n            // explores the dummy node.  Obviously we also need to clean up\n            // these dummy nodes and edges later.\n            if (v->treeRoot() == nullptr)\n            {\n                double newCost = (u->sptfDist + edgeDist);\n\n                // We have got to a node we haven't explored to from any tree.\n                // So attach it to the tree and update it with the distance\n                // from the root to reach this vertex.  Then add the vertex\n                // to the heap of potentials to explore.\n                v->sptfDist = newCost;\n                v->pathNext = u;\n                v->setTreeRootPointer(u->treeRootPointer());\n                vHeap.push_back(v);\n                // This can change the cost of other vertices in the heap,\n                // so we need to remake it.\n                std::make_heap(vHeap.begin(), vHeap.end(), vHeapCompare);\n\n#ifdef DEBUGHANDLER\n                if (router->debugHandler())\n                {\n                    router->debugHandler()->mtstGrowForestWithEdge(u, v, true);\n                }\n#endif\n            }\n            else\n            {\n                // We have reached a node that has been reached already through\n                // a different tree.  Set the MTST distance for the bridging\n                // edge and push it to the priority queue of edges to consider\n                // during the extended Kruskal's algorithm.\n                double cost = v->sptfDist + u->sptfDist + e->getDist();\n                bool found = std::find(beHeap.begin(), beHeap.end(), e) != beHeap.end();\n                if (!found)\n                {\n                    // We need to add the edge to the bridging edge heap.\n                    e->setMtstDist(cost);\n                    beHeap.push_back(e);\n                    std::push_heap(beHeap.begin(), beHeap.end(), beHeapCompare);\n#ifdef DEBUGHANDLER\n                    if (router->debugHandler())\n                    {\n                        router->debugHandler()->mtstPotentialBridgingEdge(u, v);\n                    }\n#endif\n                }\n                else\n                {\n                    // This edge is already in the bridging edge heap.\n                    if (cost < e->mtstDist())\n                    {\n                        // Update the edge's mtstDist if we compute a lower\n                        // cost than we had before.\n                        e->setMtstDist(cost);\n                        std::make_heap(beHeap.begin(), beHeap.end(), beHeapCompare);\n                    }\n                }\n            }\n        }\n    }\n    COLA_ASSERT(origTerminals.size() == 1);\n    TIMER_STOP(router);\n\n    // Free Root Vertex Points from all vertices.\n    for (std::list<VertInf **>::iterator curr = rootVertexPointers.begin();\n            curr != rootVertexPointers.end(); ++curr)\n    {\n        free(*curr);\n    }\n    rootVertexPointers.clear();\n\n    // Free the dummy nodes and edges created earlier.\n    for_each(extraVertices.begin(), extraVertices.end(), delete_vertex());\n    extraVertices.clear();\n}\n\nbool MinimumTerminalSpanningTree::connectsWithoutBend(VertInf *oldLeaf,\n        VertInf *newLeaf)\n{\n    COLA_ASSERT(isOrthogonal);\n\n    if (oldLeaf->sptfDist == 0)\n    {\n        bool hyperedgeConnection = false;\n        EdgeInfList& visList = (!isOrthogonal) ?\n                oldLeaf->visList : oldLeaf->orthogVisList;\n        EdgeInfList::const_iterator finish = visList.end();\n        for (EdgeInfList::const_iterator edge = visList.begin();\n                edge != finish; ++edge)\n        {\n            VertInf *other = (*edge)->otherVert(oldLeaf);\n\n            if (other == newLeaf)\n            {\n                continue;\n            }\n\n            if (other->point == oldLeaf->point)\n            {\n                continue;\n            }\n\n            if ((*edge)->isHyperedgeSegment())\n            {\n                hyperedgeConnection = true;\n                if (colinear(other->point, oldLeaf->point, newLeaf->point))\n                {\n                    return true;\n                }\n            }\n        }\n        // If there was no hyperedge to connect to, then its a tree source\n        // and we can connect without a bend.\n        return (!hyperedgeConnection) ? true : false;\n    }\n    else\n    {\n        if (oldLeaf->pathNext)\n        {\n            return colinear(oldLeaf->pathNext->point, oldLeaf->point,\n                    newLeaf->point);\n        }\n        else\n        {\n            // No penalty.\n            return true;\n        }\n    }\n}\n\nvoid MinimumTerminalSpanningTree::rewriteRestOfHyperedge(VertInf *vert,\n        VertInf **newTreeRootPtr)\n{\n    vert->setTreeRootPointer(newTreeRootPtr);\n\n    LayeredOrthogonalEdgeList edgeList = getOrthogonalEdgesFromVertex(vert,\n                nullptr);\n    for (LayeredOrthogonalEdgeList::const_iterator edge = edgeList.begin();\n            edge != edgeList.end(); ++edge)\n    {\n        VertInf *v = edge->second;\n\n        if (v->treeRootPointer() == newTreeRootPtr)\n        {\n            // Already marked.\n            continue;\n        }\n\n        if (v->sptfDist == 0)\n        {\n            // This is part of the rest of an existing hyperedge,\n            // so mark it and continue.\n            rewriteRestOfHyperedge(v, newTreeRootPtr);\n        }\n    }\n}\n\nvoid MinimumTerminalSpanningTree::drawForest(VertInf *vert, VertInf *prev)\n{\n    if (prev == nullptr)\n    {\n        std::string colour = \"green\";\n        /*\n        if (vert->id == dimensionChangeVertexID)\n        {\n            colour = \"blue\";\n        }\n        */\n\n        if (vert->treeRoot() == nullptr)\n        {\n            colour = \"red\";\n        }\n\n        COLA_ASSERT(vert->treeRootPointer() != nullptr);\n        COLA_ASSERT(vert->treeRoot() != nullptr);\n        //fprintf(debug_fp, \"<circle cx=\\\"%g\\\" cy=\\\"%g\\\" r=\\\"3\\\" db:sptfDist=\\\"%g\\\" \"\n        //        \"style=\\\"fill: %s; stroke: %s; fill-opacity: 0.5; \"\n        //        \"stroke-width: 1px; stroke-opacity:0.5\\\" />\\n\",\n        //        vert->point.x, vert->point.y, vert->sptfDist, colour.c_str(), \"black\");\n    }\n\n    LayeredOrthogonalEdgeList edgeList = getOrthogonalEdgesFromVertex(vert,\n            prev);\n    for (LayeredOrthogonalEdgeList::const_iterator edge = edgeList.begin();\n            edge != edgeList.end(); ++edge)\n    {\n        VertInf *v = edge->second;\n\n        if (v->sptfDist == 0)\n        {\n            continue;\n        }\n\n        if (v->treeRoot() == vert->treeRoot())\n        {\n            if (v->pathNext == vert)\n            {\n                if (vert->point != v->point)\n                {\n                    router->debugHandler()->mtstGrowForestWithEdge(vert, v, false);\n                }\n                drawForest(v, vert);\n            }\n        }\n    }\n}\n\nVertexPair MinimumTerminalSpanningTree::\n        realVerticesCountingPartners(EdgeInf *edge)\n{\n    VertInf *v1 = edge->m_vert1;\n    VertInf *v2 = edge->m_vert2;\n\n    VertexPair realVertices = std::make_pair(v1, v2);\n\n    if ((v1->id != dimensionChangeVertexID) &&\n            (v2->id != dimensionChangeVertexID) &&\n            (v1->point != v2->point) &&\n            (v1->point.x == v2->point.x))\n    {\n        if (v1->m_orthogonalPartner)\n        {\n            realVertices.first = v1->m_orthogonalPartner;\n        }\n        if (v2->m_orthogonalPartner)\n        {\n            realVertices.second = v2->m_orthogonalPartner;\n        }\n    }\n\n    return realVertices;\n}\n\n\nvoid MinimumTerminalSpanningTree::commitToBridgingEdge(EdgeInf *e)\n{\n    VertexPair ends = realVerticesCountingPartners(e);\n    VertInf *newRoot = std::min(ends.first->treeRoot(), ends.second->treeRoot());\n    VertInf *oldRoot = std::max(ends.first->treeRoot(), ends.second->treeRoot());\n\n    // Connect this edge into the MTST by building HyperedgeTree nodes\n    // and edges for this edge and the path back to the tree root.\n    HyperedgeTreeNode *node1 = nullptr;\n    HyperedgeTreeNode *node2 = nullptr;\n\n    VertInf *vert1 = ends.first;\n    VertInf *vert2 = ends.second;\n    if (hyperedgeTreeJunctions)\n    {\n        node1 = addNode(vert1, nullptr);\n        node2 = addNode(vert2, node1);\n        e->setHyperedgeSegment(true);\n    }\n\n#ifdef DEBUGHANDLER\n    if (router->debugHandler())\n    {\n        router->debugHandler()->mtstCommitToEdge(vert1, vert2, true);\n        for (std::set<VertInf *>::iterator ti = terminals.begin();\n                ti != terminals.end(); ++ti)\n        {\n            drawForest(*ti, nullptr);\n        }\n    }\n#endif\n\n    buildHyperedgeTreeToRoot(vert1->pathNext, node1, vert1, true);\n    buildHyperedgeTreeToRoot(vert2->pathNext, node2, vert2, true);\n\n    // We are commmitting to a particular path and pruning back the shortest\n    // path terminal forests from the roots of that path.  We do this by\n    // rewriting the treeRootPointers for all the points on the current\n    // hyperedge path to newTreeRootPtr.  The rest of the vertices in the\n    // forest will be pruned by rewriting their treeRootPointer to nullptr.\n    VertInf **oldTreeRootPtr1 = vert1->treeRootPointer();\n    VertInf **oldTreeRootPtr2 = vert2->treeRootPointer();\n    origTerminals.erase(oldRoot);\n    VertInf **newTreeRootPtr = vert1->makeTreeRootPointer(newRoot);\n    rootVertexPointers.push_back(newTreeRootPtr);\n    vert2->setTreeRootPointer(newTreeRootPtr);\n\n    // Zero paths and rewrite the vertices on the hyperedge path to the\n    // newTreeRootPtr.  Also, add vertices on path to the terminal set.\n    COLA_ASSERT(newRoot);\n    resetDistsForPath(vert1, newTreeRootPtr);\n    resetDistsForPath(vert2, newTreeRootPtr);\n\n    // Prune the forests from the joined vertex sets by setting their\n    // treeRootPointers to nullptr.\n    COLA_ASSERT(oldTreeRootPtr1);\n    COLA_ASSERT(oldTreeRootPtr2);\n    *oldTreeRootPtr1 = nullptr;\n    *oldTreeRootPtr2 = nullptr;\n\n    // We have found the full hyperedge path when we have joined all the\n    // terminal sets into one.\n    if (origTerminals.size() == 1)\n    {\n        return;\n    }\n\n    // Remove newly orphaned vertices from vertex heap by only copying the\n    // valid vertices to vHeapNew array which then replaces vHeap.\n    std::vector<VertInf *> vHeapNew(vHeap.size());\n    size_t j = 0;\n    size_t vHeapSize = vHeap.size();\n    for (size_t i = 0; i < vHeapSize; ++i)\n    {\n        VertInf *v = vHeap[i];\n\n        if ((v->treeRoot() == nullptr))\n        {\n            // This is an orphaned vertex.\n            continue;\n        }\n\n        // Copy the other vertices to vHeapNew.\n        vHeapNew[j] = vHeap[i];\n        ++j;\n    }\n    vHeapNew.resize(j);\n    // Replace vHeap with vHeapNew\n    vHeap = vHeapNew;\n\n    // Reset all terminals to zero.\n    for (std::set<VertInf *>::iterator v2 = terminals.begin();\n            v2 != terminals.end(); ++v2)\n    {\n        COLA_ASSERT((*v2)->sptfDist == 0);\n        vHeap.push_back(*v2);\n    }\n\n    // Rebuild the heap since some terminals will have had distances\n    // rewritten as well as the orphaned vertices being removed.\n    std::make_heap(vHeap.begin(), vHeap.end(), vHeapCompare);\n}\n\n}\n"
  },
  {
    "path": "cola/libavoid/mtst.h",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libavoid - Fast, Incremental, Object-avoiding Line Router\n *\n * Copyright (C) 2011-2013  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * Licensees holding a valid commercial license may use this file in\n * accordance with the commercial license agreement provided with the \n * library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  \n *\n * Author(s):   Michael Wybrow\n*/\n\n#ifndef AVOID_MTST_H\n#define AVOID_MTST_H\n\n#include <cstdio>\n#include <set>\n#include <list>\n#include <utility>\n\n#include \"libavoid/vertices.h\"\n#include \"libavoid/hyperedgetree.h\"\n\n\nnamespace Avoid {\n\nclass VertInf;\nclass Router;\nclass ConnRef;\nclass EdgeInf;\n\ntypedef std::list<VertexSet> VertexSetList;\n\ntypedef std::pair<EdgeInf *, VertInf *> LayeredOrthogonalEdge;\ntypedef std::list<LayeredOrthogonalEdge> LayeredOrthogonalEdgeList;\n\n// Comparison for the vertex heap in the extended Dijkstra's algorithm.\nstruct HeapCmpVertInf\n{\n    bool operator()(const VertInf *a, const VertInf *b) const;\n};\n\n\n// Comparison for the bridging edge heap in the extended Kruskal's algorithm.\nstruct CmpEdgeInf\n{\n    bool operator()(const EdgeInf *a, const EdgeInf *b) const;\n};\n\n\n// This class is not intended for public use.\n// It is used by the hyperedge routing code to build a minimum terminal\n// spanning tree for a set of terminal vertices.\nclass MinimumTerminalSpanningTree\n{\n    public:\n        MinimumTerminalSpanningTree(Router *router,\n                std::set<VertInf *> terminals,\n                JunctionHyperedgeTreeNodeMap *hyperedgeTreeJunctions = nullptr);\n        ~MinimumTerminalSpanningTree();\n\n        // Uses Interleaved construction of the MTST and SPTF (heuristic 2 \n        // from paper).  This is the preferred construction approach.\n        void constructInterleaved(void);\n        // Uses Sequential construction of the MTST (heuristic 1 from paper).\n        void constructSequential(void);\n        \n        void setDebuggingOutput(FILE *fp, unsigned int counter);\n        HyperedgeTreeNode *rootJunction(void) const;\n\n    private:\n        void buildHyperedgeTreeToRoot(VertInf *curr, \n                HyperedgeTreeNode *prevNode, VertInf *prevVert, \n                bool markEdges = false);\n        VertInf **resetDistsForPath(VertInf *currVert, VertInf **newRootVertPtr);\n        void rewriteRestOfHyperedge(VertInf *vert, VertInf **newTreeRootPtr);\n        void drawForest(VertInf *vert, VertInf *prev);\n\n        void makeSet(VertInf *vertex);\n        VertexSetList::iterator findSet(VertInf *vertex);\n        void unionSets(VertexSetList::iterator s1, VertexSetList::iterator s2);\n        HyperedgeTreeNode *addNode(VertInf *vertex, HyperedgeTreeNode *prevNode);\n\n        void removeInvalidBridgingEdges(void);\n        void commitToBridgingEdge(EdgeInf *e);\n        bool connectsWithoutBend(VertInf *oldLeaf, VertInf *newLeaf);\n        LayeredOrthogonalEdgeList getOrthogonalEdgesFromVertex(VertInf *vert, \n                VertInf *prev);\n        VertInf *orthogonalPartner(VertInf *vert, double penalty = 0);\n        VertexPair realVerticesCountingPartners(EdgeInf *edge);\n\n\n        Router *router;\n        bool isOrthogonal;\n        std::set<VertInf *> terminals;\n        std::set<VertInf *> origTerminals;\n        JunctionHyperedgeTreeNodeMap *hyperedgeTreeJunctions;\n\n        VertexNodeMap nodes;\n        HyperedgeTreeNode *m_rootJunction;\n        double bendPenalty;\n        VertexSetList allsets;\n        std::list<VertInf *> visitedVertices;\n        std::list<VertInf *> extraVertices;\n        std::list<VertInf *> unusedVertices;\n        std::list<VertInf **> rootVertexPointers;\n\n        // Vertex heap for extended Dijkstra's algorithm.\n        std::vector<VertInf *> vHeap;\n        HeapCmpVertInf vHeapCompare;\n\n        // Bridging edge heap for the extended Kruskal's algorithm.\n        std::vector<EdgeInf *> beHeap;\n        CmpEdgeInf beHeapCompare;\n\n        const VertID dimensionChangeVertexID;\n};\n\n\n}\n\n#endif\n"
  },
  {
    "path": "cola/libavoid/obstacle.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libavoid - Fast, Incremental, Object-avoiding Line Router\n *\n * Copyright (C) 2004-2014  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * Licensees holding a valid commercial license may use this file in\n * accordance with the commercial license agreement provided with the \n * library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  \n *\n * Author(s):  Michael Wybrow\n*/\n\n\n#include \"libavoid/obstacle.h\"\n#include \"libavoid/router.h\"\n#include \"libavoid/connectionpin.h\"\n#include \"libavoid/debug.h\"\n\nnamespace Avoid {\n\n\nObstacle::Obstacle(Router *router, Polygon ply, const unsigned int id)\n    : m_router(router),\n      m_polygon(ply),\n      m_active(false),\n      m_first_vert(nullptr),\n      m_last_vert(nullptr)\n{\n    COLA_ASSERT(m_router != nullptr);\n    m_id = m_router->assignId(id);\n\n    VertID i = VertID(m_id, 0);\n\n    Polygon routingPoly = routingPolygon();\n    const bool addToRouterNow = false;\n    VertInf *last = nullptr;\n    VertInf *node = nullptr;\n    for (size_t pt_i = 0; pt_i < routingPoly.size(); ++pt_i)\n    {\n        node = new VertInf(m_router, i, routingPoly.ps[pt_i], addToRouterNow);\n\n        if (!m_first_vert)\n        {\n            m_first_vert = node;\n        }\n        else\n        {\n            node->shPrev = last;\n            last->shNext = node;\n            //node->lstPrev = last;\n            //last->lstNext = node;\n        }\n        \n        last = node;\n        i++;\n    }\n    m_last_vert = node;\n    \n    m_last_vert->shNext = m_first_vert;\n    m_first_vert->shPrev = m_last_vert;\n}\n\n\nObstacle::~Obstacle()\n{\n    COLA_ASSERT(m_active == false);\n    COLA_ASSERT(m_first_vert != nullptr);\n    \n    VertInf *it = m_first_vert;\n    do\n    {\n        VertInf *tmp = it;\n        it = it->shNext;\n\n        delete tmp;\n    }\n    while (it != m_first_vert);\n    m_first_vert = m_last_vert = nullptr;\n\n    // Free and clear any connection pins.\n    while (!m_connection_pins.empty())\n    {\n        delete *(m_connection_pins.begin());\n    }\n}\n\n\nvoid Obstacle::setNewPoly(const Polygon& poly)\n{\n    COLA_ASSERT(m_first_vert != nullptr);\n    COLA_ASSERT(m_polygon.size() == poly.size());\n    \n    m_polygon = poly;\n    Polygon routingPoly = routingPolygon();\n\n    VertInf *curr = m_first_vert;\n    for (size_t pt_i = 0; pt_i < routingPoly.size(); ++pt_i)\n    {\n        COLA_ASSERT(curr->visListSize == 0);\n        COLA_ASSERT(curr->invisListSize == 0);\n\n        // Reset with the new polygon point.\n        curr->Reset(routingPoly.ps[pt_i]);\n        curr->pathNext = nullptr;\n        \n        curr = curr->shNext;\n    }\n    COLA_ASSERT(curr == m_first_vert);\n        \n    // It may be that the polygon for the obstacle has been updated after\n    // creating the shape.  These events may have been combined for a single\n    // transaction, so update pin positions.\n    for (ShapeConnectionPinSet::iterator curr =\n            m_connection_pins.begin(); curr != m_connection_pins.end(); ++curr)\n    {\n        ShapeConnectionPin *pin = *curr;\n        pin->updatePosition(m_polygon);\n    }\n}\n\n\nvoid Obstacle::makeActive(void)\n{\n    COLA_ASSERT(!m_active);\n    \n    // Add to shapeRefs list.\n    m_router_obstacles_pos = m_router->m_obstacles.insert(\n            m_router->m_obstacles.begin(), this);\n\n    // Add points to vertex list.\n    VertInf *it = m_first_vert;\n    do\n    {\n        VertInf *tmp = it;\n        it = it->shNext;\n\n        m_router->vertices.addVertex(tmp);\n    }\n    while (it != m_first_vert);\n   \n    m_active = true;\n}\n\n\nvoid Obstacle::makeInactive(void)\n{\n    COLA_ASSERT(m_active);\n    \n    // Remove from shapeRefs list.\n    m_router->m_obstacles.erase(m_router_obstacles_pos);\n\n    // Remove points from vertex list.\n    VertInf *it = m_first_vert;\n    do\n    {\n        VertInf *tmp = it;\n        it = it->shNext;\n\n        m_router->vertices.removeVertex(tmp);\n    }\n    while (it != m_first_vert);\n    \n    m_active = false;\n    \n    // Turn attached ConnEnds into manual points.\n    bool deletedShape = true;\n    while (!m_following_conns.empty())\n    {\n        ConnEnd *connEnd = *(m_following_conns.begin());\n        connEnd->disconnect(deletedShape);\n    }\n}\n\n\nvoid Obstacle::updatePinPolyLineVisibility(void)\n{\n    for (ShapeConnectionPinSet::iterator curr = \n            m_connection_pins.begin(); \n            curr != m_connection_pins.end(); ++curr)\n    {\n        (*curr)->updateVisibility();\n    }\n}\n\n\nstd::vector<Point> Obstacle::possiblePinPoints(unsigned int pinClassId) const\n{\n    std::vector<Point> points;\n    for (ShapeConnectionPinSet::const_iterator curr = \n            m_connection_pins.begin(); \n            curr != m_connection_pins.end(); ++curr)\n    {\n        ShapeConnectionPin *currPin = *curr;\n        if ((currPin->m_class_id == pinClassId) && \n                (!currPin->m_exclusive || currPin->m_connend_users.empty()))\n        {\n            points.push_back(currPin->m_vertex->point);\n        }\n    }\n    return points;\n}\n\n\nsize_t Obstacle::addConnectionPin(ShapeConnectionPin *pin)\n{\n    m_connection_pins.insert(pin);\n    m_router->modifyConnectionPin(pin);\n\n    return m_connection_pins.size();\n}\n\nvoid Obstacle::removeConnectionPin(ShapeConnectionPin *pin)\n{\n    m_connection_pins.erase(pin);\n    m_router->modifyConnectionPin(pin);\n}\n\n\nbool Obstacle::isActive(void) const\n{\n    return m_active;\n}\n\n\nVertInf *Obstacle::firstVert(void)\n{\n    return m_first_vert;\n}\n\n\nVertInf *Obstacle::lastVert(void)\n{\n    return m_last_vert;\n}\n\n\nunsigned int Obstacle::id(void) const\n{\n    return m_id;\n}\n\n\nconst Polygon& Obstacle::polygon(void) const\n{\n    return m_polygon;\n}\n\n\nRouter *Obstacle::router(void) const\n{\n    return m_router;\n}\n\n\nBox Obstacle::routingBox(void) const\n{\n    COLA_ASSERT(!m_polygon.empty());\n    COLA_ASSERT(m_router);\n\n    double bufferSpace = m_router->routingParameter(shapeBufferDistance);\n    return m_polygon.offsetBoundingBox(bufferSpace);\n}\n\n\nPolygon Obstacle::routingPolygon(void) const\n{\n    COLA_ASSERT(!m_polygon.empty());\n    COLA_ASSERT(m_router);\n\n    double bufferSpace = m_router->routingParameter(shapeBufferDistance);\n    return m_polygon.offsetPolygon(bufferSpace);\n}\n\n\nPoint Obstacle::shapeCentre(void)\n{\n    Box bb = routingBox();\n\n    Point centre;\n    centre.x = bb.min.x + (0.5 * (bb.max.x - bb.min.x));\n    centre.y = bb.min.y + (0.5 * (bb.max.y - bb.min.y));\n    return centre;\n}\n\n\nvoid Obstacle::removeFromGraph(void)\n{\n    bool isConnPt = false;\n    for (VertInf *iter = firstVert(); iter != lastVert()->lstNext; )\n    {\n        VertInf *tmp = iter;\n        iter = iter->lstNext;\n \n        tmp->removeFromGraph(isConnPt);\n    }\n}\n\n\nVertInf *Obstacle::getPointVertex(const Point& point)\n{\n    VertInf *curr = m_first_vert;\n    do\n    {\n        if (curr->point == point)\n        {\n            return curr;\n        }\n        curr = curr->shNext;\n    }\n    while (curr != m_first_vert);\n\n    return nullptr;\n}\n\n\nvoid Obstacle::addFollowingConnEnd(ConnEnd *connEnd)\n{\n    m_following_conns.insert(connEnd);\n}\n\n\nvoid Obstacle::removeFollowingConnEnd(ConnEnd *connEnd)\n{\n    m_following_conns.erase(connEnd);\n}\n\n\nConnRefList Obstacle::attachedConnectors(void) const\n{\n    ConnRefList attachedConns;\n    for (std::set<ConnEnd *>::const_iterator curr = m_following_conns.begin();\n            curr != m_following_conns.end(); ++curr)\n    {\n        ConnEnd *connEnd = *curr;\n        COLA_ASSERT(connEnd->m_conn_ref != nullptr);\n        attachedConns.push_back(connEnd->m_conn_ref);\n    }\n    return attachedConns;\n}\n\n}\n\n\n"
  },
  {
    "path": "cola/libavoid/obstacle.h",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libavoid - Fast, Incremental, Object-avoiding Line Router\n *\n * Copyright (C) 2004-2014  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * Licensees holding a valid commercial license may use this file in\n * accordance with the commercial license agreement provided with the \n * library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  \n *\n * Author(s):   Michael Wybrow\n*/\n\n//! @file    obstacle.h\n//! @brief   Contains the interface for the Obstacle class, \n//!          the superclass for ShapeRef and JunctionRef.\n\n\n#ifndef AVOID_OBSTACLE_H\n#define AVOID_OBSTACLE_H\n\n#include <list>\n#include <set>\n\n#include <cstdio>\n\n#include \"libavoid/geometry.h\"\n#include \"libavoid/connectionpin.h\"\n\n\nnamespace Avoid {\n\nclass VertInf;\nclass Router;\nclass Obstacle;\nclass ConnEnd;\nclass ConnRef;\ntypedef std::list<Obstacle *> ObstacleList;\ntypedef std::list<ConnRef *> ConnRefList;\n\n\n// @brief   The Obstacle class represents an obstacle that must be \n//          routed around.  Superclass of ShapeRef and JunctionRef.\n//\nclass Obstacle\n{\n    public:\n        //! @brief  Obstacle reference constructor.\n        //!\n        //! Creates an obstacle object reference.  It is expected that you\n        //! would not instantiate an Obstacle directly, but would instead\n        //! use either ShapeRef() or JunctionRef().\n        //!\n        //! @param[in]  router  The router scene to place the shape into.\n        //! @param[in]  poly    A Polygon representing the boundary of the \n        //!                     shape.\n        //! @param[in]  id      A unique positive integer ID for the shape.  \n        Obstacle(Router *router, Polygon poly, const unsigned int id = 0);\n\n// To prevent C++ objects from being destroyed in garbage collected languages\n// when the libraries are called from SWIG, we hide the declarations of the\n// destructors and prevent generation of default destructors.\n#ifndef SWIG\n        //! @brief  Obstacle reference destructor.\n        //!\n        virtual ~Obstacle();\n#endif\n        \n        //! @brief   Returns the ID of this obstacle.\n        //! @returns The ID of the obstacle.\n        unsigned int id(void) const;\n        //! @brief   Returns a reference to the polygon boundary of this\n        //!          obstacle.\n        //! @returns A reference to the polygon boundary of the obstacle.\n        const Polygon& polygon(void) const;\n        //! @brief   Returns a pointer to the router scene this obstacle\n        //!          is in.\n        //! @returns A pointer to the router scene for this obstacle.\n        Router *router(void) const;\n        //! @brief   Returns the position of this obstacle.\n        //! @returns A point representing the position of this obstacle.\n        virtual Point position(void) const = 0;\n        \n        void setNewPoly(const Polygon& poly);\n        VertInf *firstVert(void);\n        VertInf *lastVert(void);\n        Box routingBox(void) const;\n        Polygon routingPolygon(void) const;\n        ConnRefList attachedConnectors(void) const;\n\n    private:\n        friend class Router;\n        friend class ConnEnd;\n        friend class ShapeConnectionPin;\n        friend class HyperedgeRerouter;\n        friend class HyperedgeImprover;\n        friend class MinimumTerminalSpanningTree;\n\n        // Defined in visibility.cpp:\n        void computeVisibilityNaive(void);\n        void computeVisibilitySweep(void);\n       \n        virtual void outputCode(FILE *fp) const = 0;\n        void makeActive(void);\n        void makeInactive(void);\n        bool isActive(void) const;\n        void updatePinPolyLineVisibility(void);\n        void removeFromGraph(void);\n        Point shapeCentre(void);\n\n        VertInf *getPointVertex(const Point& point);\n\n        void addFollowingConnEnd(ConnEnd *connEnd);\n        void removeFollowingConnEnd(ConnEnd *connEnd);\n        size_t addConnectionPin(ShapeConnectionPin *pin);\n        void removeConnectionPin(ShapeConnectionPin *pin);\n        void assignPinVisibilityTo(const unsigned int pinClassId, \n                VertInf *dummyConnectionVert);\n        std::vector<Point> possiblePinPoints(unsigned int pinClassId) const;\n\n    protected:\n        Router *m_router;\n        unsigned int m_id;\n        Polygon m_polygon;\n        bool m_active;\n        ObstacleList::iterator m_router_obstacles_pos;\n        VertInf *m_first_vert;\n        VertInf *m_last_vert;\n        std::set<ConnEnd *> m_following_conns;\n        ShapeConnectionPinSet m_connection_pins;\n};\n\n\n}\n\n\n#endif\n\n\n"
  },
  {
    "path": "cola/libavoid/orthogonal.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libavoid - Fast, Incremental, Object-avoiding Line Router\n *\n * Copyright (C) 2009-2014  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * Licensees holding a valid commercial license may use this file in\n * accordance with the commercial license agreement provided with the\n * library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n * Author(s):  Michael Wybrow\n*/\n\n\n#include <cstdlib>\n#include <cfloat>\n#include <cmath>\n#include <set>\n#include <list>\n#include <algorithm>\n\n#include \"libavoid/router.h\"\n#include \"libavoid/geomtypes.h\"\n#include \"libavoid/shape.h\"\n#include \"libavoid/orthogonal.h\"\n#include \"libavoid/connend.h\"\n#include \"libavoid/connector.h\"\n#include \"libavoid/junction.h\"\n#include \"libavoid/vpsc.h\"\n#include \"libavoid/assertions.h\"\n#include \"libavoid/scanline.h\"\n#include \"libavoid/debughandler.h\"\n\n// For debugging:\n//#define NUDGE_DEBUG\n//#define DEBUG_JUST_UNIFY\n\n\nnamespace Avoid {\n\n\n// IDs:\nstatic const int freeSegmentID  = 0;\nstatic const int fixedSegmentID = 1;\nstatic const int channelLeftID  = 2;\nstatic const int channelRightID = 3;\n// Weights:\nstatic const double freeWeight   = 0.00001;\nstatic const double strongWeight = 0.001;\nstatic const double strongerWeight = 1.0;\nstatic const double fixedWeight  = 100000;\n\n\n// A pair of unsigned values that can be compared and used as the keys\n// for sets and maps.\nclass UnsignedPair\n{\n    public:\n        UnsignedPair(unsigned ind1, unsigned ind2)\n        {\n            COLA_ASSERT(ind1 != ind2);\n            // Assign the lesser value to m_index1.\n            m_index1 = (ind1 < ind2) ? ind1 : ind2;\n            // Assign the greater value to m_index2.\n            m_index2 = (ind1 > ind2) ? ind1 : ind2;\n        }\n\n        bool operator<(const UnsignedPair& rhs) const\n        {\n            if (m_index1 != rhs.m_index1)\n            {\n                return m_index1 < rhs.m_index1;\n            }\n            return m_index2 < rhs.m_index2;\n        }\n    private:\n        unsigned short m_index1;\n        unsigned short m_index2;\n};\ntypedef std::set<UnsignedPair> UnsignedPairSet;\n\n\n// Used to sort points when merging NudgingShiftSegments.\n// Sorts the indexes, by point position in one dimension.\nclass CmpIndexes\n{\n    public:\n        CmpIndexes(ConnRef *conn, size_t dim)\n            : connRef(conn),\n              dimension(dim)\n        {\n        }\n        bool operator()(size_t lhs, size_t rhs)\n        {\n            return connRef->displayRoute().ps[lhs][dimension] <\n                    connRef->displayRoute().ps[rhs][dimension];\n        }\n    private:\n        ConnRef *connRef;\n        size_t dimension;\n};\n\n\nclass NudgingShiftSegment : public ShiftSegment\n{\n    public:\n        // For shiftable segments.\n        NudgingShiftSegment(ConnRef *conn, const size_t low, const size_t high,\n                bool isSBend, bool isZBend, const size_t dim, double minLim,\n                double maxLim)\n            : ShiftSegment(dim),\n              connRef(conn),\n              variable(nullptr),\n              fixed(false),\n              finalSegment(false),\n              endsInShape(false),\n              singleConnectedSegment(false),\n              sBend(isSBend),\n              zBend(isZBend)\n        {\n            indexes.push_back(low);\n            indexes.push_back(high);\n            minSpaceLimit = minLim;\n            maxSpaceLimit = maxLim;\n        }\n        // For fixed segments.\n        NudgingShiftSegment(ConnRef *conn, const size_t low, const size_t high,\n                const size_t dim)\n            : ShiftSegment(dim),\n              connRef(conn),\n              variable(nullptr),\n              fixed(true),\n              finalSegment(false),\n              endsInShape(false),\n              singleConnectedSegment(false),\n              sBend(false),\n              zBend(false)\n        {\n            indexes.push_back(low);\n            indexes.push_back(high);\n            // This has no space to shift.\n            minSpaceLimit = lowPoint()[dim];\n            maxSpaceLimit = lowPoint()[dim];\n        }\n        virtual ~NudgingShiftSegment()\n        {\n        }\n        Point& lowPoint(void)\n        {\n            return connRef->displayRoute().ps[indexes.front()];\n        }\n        Point& highPoint(void)\n        {\n            return connRef->displayRoute().ps[indexes.back()];\n        }\n        const Point& lowPoint(void) const\n        {\n            return connRef->displayRoute().ps[indexes.front()];\n        }\n        const Point& highPoint(void) const\n        {\n            return connRef->displayRoute().ps[indexes.back()];\n        }\n        double nudgeDistance(void) const\n        {\n            return connRef->router()->routingParameter(idealNudgingDistance);\n        }\n        bool immovable(void) const\n        {\n            return ! zigzag();\n        }\n        void createSolverVariable(const bool justUnifying)\n        {\n            bool nudgeFinalSegments = connRef->router()->routingOption(\n                    nudgeOrthogonalSegmentsConnectedToShapes);\n            int varID = freeSegmentID;\n            double varPos = lowPoint()[dimension];\n            double weight = freeWeight;\n            if (nudgeFinalSegments && finalSegment)\n            {\n                weight = strongWeight;\n\n                if (singleConnectedSegment && !justUnifying)\n                {\n                    // This is a single segment connector bridging\n                    // two shapes.  So, we want to try to keep it\n                    // centred rather than shift it.\n                    // Don't do this during Unifying stage, or else\n                    // these connectors could end up at slightly\n                    // different positions and get the wrong ordering\n                    // for nudging.\n                    weight = strongerWeight;\n                }\n            }\n            else if (checkpoints.size() > 0)\n            {\n                weight = strongWeight;\n            }\n            else if (zigzag())\n            {\n                COLA_ASSERT(minSpaceLimit > -CHANNEL_MAX);\n                COLA_ASSERT(maxSpaceLimit < CHANNEL_MAX);\n\n                // For zigzag bends, take the middle as ideal.\n                varPos = minSpaceLimit + ((maxSpaceLimit - minSpaceLimit) / 2);\n            }\n            else if (fixed)\n            {\n                // Fixed segments shouldn't get moved.\n                weight = fixedWeight;\n                varID = fixedSegmentID;\n            }\n            else if ( ! finalSegment )\n            {\n                // Set a higher weight for c-bends to stop them sometimes\n                // getting pushed out into channels by more-free connectors\n                // to the \"inner\" side of them.\n                weight = strongWeight;\n            }\n\n            variable = new Variable(varID, varPos, weight);\n        }\n\n        void updatePositionsFromSolver(const bool justUnifying)\n        {\n            if (fixed)\n            {\n                return;\n            }\n            double newPos = variable->finalPosition;\n\n            // The solver can sometimes cause variables to be outside their\n            // limits by a tiny amount, since all variables are held by\n            // weights.  Thus, just make sure they stay in their limits.\n            newPos = std::max(newPos, minSpaceLimit);\n            newPos = std::min(newPos, maxSpaceLimit);\n\n#ifdef NUDGE_DEBUG\n            printf(\"Pos: %lX, %.16f\\n\", (long) connRef, newPos);\n#endif\n            for (size_t it = 0; it < indexes.size(); ++it)\n            {\n                size_t index = indexes[it];\n                connRef->displayRoute().ps[index][dimension] = newPos;\n            }\n\n#ifdef DEBUGHANDLER\n            if (!justUnifying && connRef->router()->debugHandler())\n            {\n                connRef->router()->debugHandler()->updateConnectorRoute(\n                        connRef, indexes[0], indexes[indexes.size() - 1]);\n            }\n#endif\n        }\n        int fixedOrder(bool& isFixed) const\n        {\n            double nudgeDist = nudgeDistance();\n            double pos = lowPoint()[dimension];\n            bool minLimited = ((pos - minSpaceLimit) < nudgeDist);\n            bool maxLimited = ((maxSpaceLimit - pos) < nudgeDist);\n\n            if (fixed || (minLimited && maxLimited))\n            {\n                isFixed = true;\n                return 0;\n            }\n            else if (minLimited)\n            {\n                return 1;\n            }\n            else if (maxLimited)\n            {\n                return -1;\n            }\n            return 0;\n        }\n        int order(void) const\n        {\n            if (lowC())\n            {\n                return -1;\n            }\n            else if (highC())\n            {\n                return 1;\n            }\n            return 0;\n        }\n        bool zigzag(void) const\n        {\n            return sBend || zBend;\n        }\n        // This counts segments that are collinear and share an endpoint as\n        // overlapping.  This allows them to be nudged apart where possible.\n        bool overlapsWith(const ShiftSegment *rhsSuper, const size_t dim) const\n        {\n            const NudgingShiftSegment *rhs =\n                    static_cast<const NudgingShiftSegment *> (rhsSuper);\n            size_t altDim = (dim + 1) % 2;\n            const Point& lowPt = lowPoint();\n            const Point& highPt = highPoint();\n            const Point& rhsLowPt = rhs->lowPoint();\n            const Point& rhsHighPt = rhs->highPoint();\n            if ( (lowPt[altDim] < rhsHighPt[altDim]) &&\n                    (rhsLowPt[altDim] < highPt[altDim]))\n            {\n                // The segments overlap.\n                if ( (minSpaceLimit <= rhs->maxSpaceLimit) &&\n                        (rhs->minSpaceLimit <= maxSpaceLimit) )\n                {\n                    return true;\n                }\n            }\n            else if ( (lowPt[altDim] == rhsHighPt[altDim]) ||\n                      (rhsLowPt[altDim] == highPt[altDim]) )\n            {\n                bool nudgeColinearSegments = connRef->router()->routingOption(\n                        nudgeOrthogonalTouchingColinearSegments);\n\n                if ( (minSpaceLimit <= rhs->maxSpaceLimit) &&\n                        (rhs->minSpaceLimit <= maxSpaceLimit) )\n                {\n                    // The segments could touch at one end.\n                    if (connRef->router()->routingParameter(\n                            fixedSharedPathPenalty) > 0)\n                    {\n                        // If we are routing with a fixedSharedPathPenalty\n                        // then we don't want these segments to ever touch\n                        // or slide past each other, so they are always\n                        // considered to be overlapping.\n                        return true;\n                    }\n                    else if ((rhs->sBend && sBend) || (rhs->zBend && zBend))\n                    {\n                        // Count them as overlapping for nudging if they\n                        // are both s-bends or both z-bends, i.e., when\n                        // the ordering would matter.\n                        return nudgeColinearSegments;\n                    }\n                    else if ((rhs->finalSegment && finalSegment) &&\n                            (rhs->connRef == connRef))\n                    {\n                        return nudgeColinearSegments;\n                    }\n                }\n            }\n            return false;\n        }\n        // These segments are allowed to drift into alignment but don't have to.\n        bool canAlignWith(const NudgingShiftSegment *rhs,\n                const size_t dim) const\n        {\n            COLA_UNUSED(dim);\n\n            if (connRef != rhs->connRef)\n            {\n                return false;\n            }\n\n            // Don't allow segments of the same connector to drift together\n            // where one of them goes via a checkpoint.  We want the path\n            // through the checkpoint to be maintained.\n            bool hasCheckpoints = checkpoints.size() > 0;\n            bool rhsHasCheckpoints = rhs->checkpoints.size() > 0;\n            if (hasCheckpoints || rhsHasCheckpoints)\n            {\n                return false;\n            }\n            return true;\n        }\n        // These segments should align with each other.\n        bool shouldAlignWith(const ShiftSegment *rhsSuper,\n                const size_t dim) const\n        {\n            const NudgingShiftSegment *rhs =\n                    static_cast<const NudgingShiftSegment *> (rhsSuper);\n            if ((connRef == rhs->connRef) && finalSegment &&\n                    rhs->finalSegment && overlapsWith(rhs, dim))\n            {\n                // If both the segments are in shapes then we know limits\n                // and can align.  Otherwise we do this just for segments\n                // that are very close together, since these will often\n                // prevent nudging, or force it to have a tiny separation\n                // value.\n                if ((endsInShape && rhs->endsInShape) ||\n                        (fabs(lowPoint()[dim] - rhs->lowPoint()[dim]) < 10))\n                {\n                    return true;\n                }\n            }\n            else if ((connRef == rhs->connRef) &&\n                     // Not both final\n                     ((finalSegment & rhs->finalSegment) != true))\n            {\n                bool hasCheckpoints = checkpoints.size() > 0;\n                bool rhsHasCheckpoints = rhs->checkpoints.size() > 0;\n\n                if (hasCheckpoints != rhsHasCheckpoints)\n                {\n                    // At least one segment has checkpoints, but not both.\n\n                    size_t altDim = (dim + 1) % 2;\n                    double space = fabs(lowPoint()[dim] - rhs->lowPoint()[dim]);\n                    double touchPos;\n                    bool couldTouch = false;\n                    if (lowPoint()[altDim] == rhs->highPoint()[altDim])\n                    {\n                        couldTouch = true;\n                        touchPos = lowPoint()[altDim];\n                    }\n                    else if (highPoint()[altDim] == rhs->lowPoint()[altDim])\n                    {\n                        couldTouch = true;\n                        touchPos = highPoint()[altDim];\n                    }\n\n                    // We should align these so long as they are close\n                    // together (<= 10) and there isn't a checkpoint at the\n                    // touch point, i.e., we'd be altering the edges leading\n                    // into the checkpoint.  We want to keep these in place\n                    // and opportunistically move other edges to align with\n                    // them.\n                    return couldTouch && (space <= 10) &&\n                            !hasCheckpointAtPosition(touchPos, altDim) &&\n                            !rhs->hasCheckpointAtPosition(touchPos, altDim);\n                }\n            }\n            return false;\n        }\n        // Used for merging segments with end segments that should appear as\n        // a single segment.\n        void mergeWith(const ShiftSegment *rhsSuper, const size_t dim)\n        {\n            // Adjust limits.\n            minSpaceLimit = std::max(minSpaceLimit, rhsSuper->minSpaceLimit);\n            maxSpaceLimit = std::min(maxSpaceLimit, rhsSuper->maxSpaceLimit);\n\n            // Find a new position for the segment, taking into account\n            // the two original positions and the combined limits.\n            double segmentPos = lowPoint()[dimension];\n            double segment2Pos = rhsSuper->lowPoint()[dimension];\n            if (segment2Pos < segmentPos)\n            {\n                segmentPos -= ((segmentPos - segment2Pos) / 2.0);\n            }\n            else if (segment2Pos > segmentPos)\n            {\n                segmentPos += ((segment2Pos - segmentPos) / 2.0);\n            }\n            segmentPos = std::max(minSpaceLimit, segmentPos);\n            segmentPos = std::min(maxSpaceLimit, segmentPos);\n\n            // Merge the index lists and sort the new list.\n            const NudgingShiftSegment *rhs =\n                    static_cast<const NudgingShiftSegment *> (rhsSuper);\n            indexes.insert(indexes.end(), rhs->indexes.begin(), rhs->indexes.end());\n            size_t altDim = (dim + 1) % 2;\n            CmpIndexes compare(connRef, altDim);\n            sort(indexes.begin(), indexes.end(), compare);\n\n            // Apply the new positon to all points to keep them constant.\n            for (size_t it = 0; it < indexes.size(); ++it)\n            {\n                size_t index = indexes[it];\n                connRef->displayRoute().ps[index][dimension] = segmentPos;\n            }\n        }\n        bool hasCheckpointAtPosition(const double position,\n                const size_t dim) const\n        {\n            for (size_t cp = 0; cp < checkpoints.size(); ++cp)\n            {\n                if (checkpoints[cp][dim] == position)\n                {\n                    return true;\n                }\n            }\n            return false;\n        }\n\n        ConnRef *connRef;\n        Variable *variable;\n        std::vector<size_t> indexes;\n        bool fixed;\n        bool finalSegment;\n        bool endsInShape;\n        bool singleConnectedSegment;\n        std::vector<Point> checkpoints;\n    private:\n        bool sBend;\n        bool zBend;\n        bool lowC(void) const\n        {\n            // This is true if this is a cBend and its adjoining points\n            // are at lower positions.\n            if (!finalSegment && !zigzag() && !fixed &&\n                    (minSpaceLimit == lowPoint()[dimension]))\n            {\n                return true;\n            }\n            return false;\n        }\n        bool highC(void) const\n        {\n            // This is true if this is a cBend and its adjoining points\n            // are at higher positions.\n            if (!finalSegment && !zigzag() && !fixed &&\n                    (maxSpaceLimit == lowPoint()[dimension]))\n            {\n                return true;\n            }\n            return false;\n        }\n};\n\n\n\nenum ScanVisDirFlag {\n    VisDirNone  = 0,\n    VisDirUp    = 1,\n    VisDirDown  = 2\n};\ntypedef unsigned int ScanVisDirFlags;\n\n\n// Returns a bitfield of the directions of visibility in terms of the scanline\n// in a particular dimension dimension.  It will return either ConnDirDown\n// (meaning visibility to lower position values) or ConnDirUp (for visibility\n// towards higher position values).\n//\nstatic ScanVisDirFlags getPosVertInfDirections(VertInf *v, size_t dim)\n{\n    if (dim == XDIM) // X-dimension\n    {\n        unsigned int dirs = v->visDirections & (ConnDirLeft | ConnDirRight);\n        if (dirs == (ConnDirLeft | ConnDirRight))\n        {\n            return (VisDirDown | VisDirUp);\n        }\n        else if (dirs == ConnDirLeft)\n        {\n            return VisDirDown;\n        }\n        else if (dirs == ConnDirRight)\n        {\n            return VisDirUp;\n        }\n    }\n    else if (dim == YDIM) // Y-dimension\n    {\n        unsigned int dirs = v->visDirections & (ConnDirDown | ConnDirUp);\n        if (dirs == (ConnDirDown | ConnDirUp))\n        {\n            return (VisDirDown | VisDirUp);\n        }\n        else if (dirs == ConnDirDown)\n        {\n            // libavoid's Y-axis points downwards, so where the user has\n            // specified visibility downwards, this results in visibility to\n            // higher scanline positition values.\n            return VisDirUp;\n        }\n        else if (dirs == ConnDirUp)\n        {\n            // libavoid's Y-axis points downwards, so where the user has\n            // specified visibility upwards, this results in visibility to\n            // lower scanline positition values.\n            return VisDirDown;\n        }\n    }\n\n    // Can occur for ConnDirNone visibility.\n    return VisDirNone;\n}\n\n\nstruct PosVertInf\n{\n    PosVertInf(double p, VertInf *vI, ScanVisDirFlags d = VisDirNone)\n        : pos(p),\n          vert(vI),\n          dirs(d)\n    {\n    }\n\n    bool operator<(const PosVertInf& rhs) const\n    {\n        if (pos != rhs.pos)\n        {\n            return pos < rhs.pos;\n        }\n        if ((vert->id == rhs.vert->id) && (vert->id == dummyOrthogID))\n        {\n            // Multiple dummy nodes can get placed at the same point for\n            // multiple ShapeConnectionPins on junctions (outside of shapes).\n            // We only need one at each position, so multiples can be seen\n            // as equal here.\n            return false;\n        }\n        if (vert->id != rhs.vert->id)\n        {\n            return vert->id < rhs.vert->id;\n        }\n        return dirs < rhs.dirs;\n    }\n\n    double pos;\n    VertInf *vert;\n\n    // A bitfield marking the direction of visibility (in this dimension)\n    // made up of VisDirDown (for visibility towards lower position values)\n    // and VisDirUp (for visibility towards higher position values).\n    //\n    ScanVisDirFlags dirs;\n};\n\n\nstruct CmpVertInf\n{\n    bool operator()(const VertInf* u, const VertInf* v) const\n    {\n        // Comparator for VertSet, an ordered set of VertInf pointers.\n        // It is assumed vertical sets of points will all have the same\n        // x position and horizontal sets all share a y position, so this\n        // method can be used to sort both these sets.\n        COLA_ASSERT((u->point.x == v->point.x) || (u->point.y == v->point.y));\n        if (u->point.x != v->point.x)\n        {\n            return u->point.x < v->point.x;\n        }\n        else if (u->point.y != v->point.y)\n        {\n            return u->point.y < v->point.y;\n        }\n        return u < v;\n    }\n};\n\n\ntypedef std::set<VertInf *, CmpVertInf> VertSet;\n\n// A set of points to break the line segment,\n// along with vertices for these points.\ntypedef std::set<PosVertInf> BreakpointSet;\n\n// Temporary structure used to store the possible horizontal visibility\n// lines arising from the vertical sweep.\nclass LineSegment\n{\npublic:\n    LineSegment(const double& b, const double& f, const double& p,\n            bool ss = false, VertInf *bvi = nullptr, VertInf *fvi = nullptr)\n        : begin(b),\n          finish(f),\n          pos(p),\n          shapeSide(ss)\n    {\n        COLA_ASSERT(begin < finish);\n\n        if (bvi)\n        {\n            vertInfs.insert(bvi);\n        }\n        if (fvi)\n        {\n            vertInfs.insert(fvi);\n        }\n    }\n    LineSegment(const double& bf, const double& p, VertInf *bfvi = nullptr)\n        : begin(bf),\n          finish(bf),\n          pos(p),\n          shapeSide(false)\n    {\n        if (bfvi)\n        {\n            vertInfs.insert(bfvi);\n        }\n    }\n\n    // Order by begin, pos, finish.\n    bool operator<(const LineSegment& rhs) const\n    {\n        if (begin != rhs.begin)\n        {\n            return begin < rhs.begin;\n        }\n        if (pos != rhs.pos)\n        {\n            return pos < rhs.pos;\n        }\n        if (finish != rhs.finish)\n        {\n            return finish < rhs.finish;\n        }\n        COLA_ASSERT(shapeSide == rhs.shapeSide);\n        return false;\n    }\n\n    bool overlaps(const LineSegment& rhs) const\n    {\n        if ((begin == rhs.begin) && (pos == rhs.pos) &&\n                (finish == rhs.finish))\n        {\n            // Lines are exactly equal.\n            return true;\n        }\n\n        if (pos == rhs.pos)\n        {\n            if (((begin >= rhs.begin) && (begin <= rhs.finish)) ||\n                ((rhs.begin >= begin) && (rhs.begin <= finish)) )\n            {\n                // They are colinear and overlap by some amount.\n                return true;\n            }\n        }\n        return false;\n    }\n\n    void mergeVertInfs(const LineSegment& segment)\n    {\n        begin = std::min(begin, segment.begin);\n        finish = std::max(finish, segment.finish);\n        vertInfs.insert(segment.vertInfs.begin(), segment.vertInfs.end());\n    }\n\n    VertInf *beginVertInf(void) const\n    {\n        if (vertInfs.empty())\n        {\n            return nullptr;\n        }\n        VertInf *inf = *vertInfs.begin();\n        if ( ((inf->point.y == begin) && (inf->point.x == pos)) ||\n             ((inf->point.x == begin) && (inf->point.y == pos)) )\n        {\n            // Only return the point if it is actually at the begin pos.\n            return inf;\n        }\n        return nullptr;\n    }\n    VertInf *finishVertInf(void) const\n    {\n        if (vertInfs.empty())\n        {\n            return nullptr;\n        }\n        VertInf *inf = *vertInfs.rbegin();\n        if ( ((inf->point.y == finish) && (inf->point.x == pos)) ||\n             ((inf->point.x == finish) && (inf->point.y == pos)) )\n        {\n            // Only return the point if it is actually at the finish pos.\n            return inf;\n        }\n        return nullptr;\n    }\n\n    VertInf *commitPositionX(Router *router, double posX)\n    {\n        VertInf *found = nullptr;\n        for (VertSet::iterator v = vertInfs.begin();\n                v != vertInfs.end(); ++v)\n        {\n            if ((*v)->point.x == posX)\n            {\n                found = *v;\n                break;\n            }\n        }\n        if (!found)\n        {\n            found = new VertInf(router, dummyOrthogID, Point(posX, pos));\n            vertInfs.insert(found);\n        }\n        return found;\n    }\n    // Set begin endpoint vertex if none has been assigned.\n    void horiCommitBegin(Router *router, VertInf *vert = nullptr)\n    {\n        if (vert)\n        {\n            vertInfs.insert(vert);\n        }\n\n        if (vertInfs.empty() ||\n                ((*vertInfs.begin())->point.x != begin))\n        {\n            if (begin != -DBL_MAX)\n            {\n                vertInfs.insert(new\n                        VertInf(router, dummyOrthogID, Point(begin, pos)));\n            }\n        }\n    }\n\n    // Set begin endpoint vertex if none has been assigned.\n    void horiCommitFinish(Router *router, VertInf *vert = nullptr)\n    {\n        if (vert)\n        {\n            vertInfs.insert(vert);\n        }\n\n        if (vertInfs.empty() ||\n                ((*vertInfs.rbegin())->point.x != finish))\n        {\n            if (finish != DBL_MAX)\n            {\n                vertInfs.insert(new\n                        VertInf(router, dummyOrthogID, Point(finish, pos)));\n            }\n        }\n    }\n\n    // Converts a section of the points list to a set of breakPoints.\n    // Returns the first of the intersection points occurring at finishPos.\n    VertSet::iterator addSegmentsUpTo(double finishPos)\n    {\n        VertSet::iterator firstIntersectionPt = vertInfs.end();\n        for (VertSet::iterator vert = vertInfs.begin();\n                vert != vertInfs.end(); ++vert)\n        {\n            if ((*vert)->point.x > finishPos)\n            {\n                // We're done.\n                break;\n            }\n\n            breakPoints.insert(PosVertInf((*vert)->point.x, (*vert),\n                        getPosVertInfDirections(*vert, XDIM)));\n\n            if ((firstIntersectionPt == vertInfs.end()) &&\n                    ((*vert)->point.x == finishPos))\n            {\n                firstIntersectionPt = vert;\n            }\n        }\n        // Returns the first of the intersection points at finishPos.\n        return firstIntersectionPt;\n    }\n\n    // Add visibility edge(s) for this segment.  There may be multiple if\n    // one of the endpoints is shared by multiple connector endpoints.\n    void addEdgeHorizontal(Router *router)\n    {\n        horiCommitBegin(router);\n        horiCommitFinish(router);\n\n        addSegmentsUpTo(finish);\n    }\n\n    // Set flags to show what can be passed on this visibility line.\n    // This can be used later to disregard some edges in the visibility\n    // graph when routing particular connectors.\n    void setLongRangeVisibilityFlags(size_t dim)\n    {\n        // First, travel in one direction\n        bool seenConnPt = false;\n        bool seenShapeEdge = false;\n        for (BreakpointSet::iterator nvert = breakPoints.begin();\n                nvert != breakPoints.end(); ++nvert)\n        {\n            VertIDProps mask = 0;\n            if (dim == XDIM)\n            {\n                if (seenConnPt)\n                {\n                    mask |= XL_CONN;\n                }\n                if (seenShapeEdge)\n                {\n                    mask |= XL_EDGE;\n                }\n            }\n            else // if (dim == YDIM)\n            {\n                if (seenConnPt)\n                {\n                    mask |= YL_CONN;\n                }\n                if (seenShapeEdge)\n                {\n                    mask |= YL_EDGE;\n                }\n            }\n            nvert->vert->orthogVisPropFlags |= mask;\n\n            if (nvert->vert->id.isConnPt())\n            {\n                seenConnPt = true;\n            }\n            if (nvert->vert->id.isOrthShapeEdge())\n            {\n                seenShapeEdge = true;\n            }\n        }\n        // Then in the other direction\n        seenConnPt = false;\n        seenShapeEdge = false;\n        for (BreakpointSet::reverse_iterator rvert = breakPoints.rbegin();\n                rvert != breakPoints.rend(); ++rvert)\n        {\n            VertIDProps mask = 0;\n            if (dim == XDIM)\n            {\n                if (seenConnPt)\n                {\n                    mask |= XH_CONN;\n                }\n                if (seenShapeEdge)\n                {\n                    mask |= XH_EDGE;\n                }\n            }\n            else // if (dim == YDIM)\n            {\n                if (seenConnPt)\n                {\n                    mask |= YH_CONN;\n                }\n                if (seenShapeEdge)\n                {\n                    mask |= YH_EDGE;\n                }\n            }\n            rvert->vert->orthogVisPropFlags |= mask;\n\n            if (rvert->vert->id.isConnPt())\n            {\n                seenConnPt = true;\n            }\n            if (rvert->vert->id.isOrthShapeEdge())\n            {\n                seenShapeEdge = true;\n            }\n        }\n    }\n\n    // Add visibility edge(s) for this segment up until an intersection.\n    // Then, move the segment beginning to the intersection point, so we\n    // later only consider the remainder of the segment.\n    // There may be multiple segments added to the graph if the beginning\n    // endpoint of the segment is shared by multiple connector endpoints.\n    VertSet addEdgeHorizontalTillIntersection(Router *router,\n            LineSegment& vertLine)\n    {\n        VertSet intersectionSet;\n\n        horiCommitBegin(router);\n\n        // Does a vertex already exist for this point.\n        commitPositionX(router, vertLine.pos);\n\n        // Generate segments and set end iterator to the first point\n        // at the intersection position.\n        VertSet::iterator restBegin = addSegmentsUpTo(vertLine.pos);\n\n        // Add the intersections points to intersectionSet.\n        VertSet::iterator restEnd = restBegin;\n        while ((restEnd != vertInfs.end()) &&\n                (*restEnd)->point.x == vertLine.pos)\n        {\n            ++restEnd;\n        }\n        intersectionSet.insert(restBegin, restEnd);\n\n        // Adjust segment to remove processed portion.\n        begin = vertLine.pos;\n        vertInfs.erase(vertInfs.begin(), restBegin);\n\n        return intersectionSet;\n    }\n\n    // Insert vertical breakpoints.\n    void insertBreakpointsBegin(Router *router, LineSegment& vertLine)\n    {\n        VertInf *vert = nullptr;\n        if (pos == vertLine.begin && vertLine.beginVertInf())\n        {\n            vert = vertLine.beginVertInf();\n        }\n        else if (pos == vertLine.finish && vertLine.finishVertInf())\n        {\n            vert = vertLine.finishVertInf();\n        }\n        horiCommitBegin(router, vert);\n\n        for (VertSet::iterator v = vertInfs.begin();\n                v != vertInfs.end(); ++v)\n        {\n            if ((*v)->point.x == begin)\n            {\n                vertLine.breakPoints.insert(PosVertInf(pos, *v,\n                        getPosVertInfDirections(*v, YDIM)));\n            }\n        }\n    }\n\n    // Insert vertical breakpoints.\n    void insertBreakpointsFinish(Router *router, LineSegment& vertLine)\n    {\n        VertInf *vert = nullptr;\n        if (pos == vertLine.begin && vertLine.beginVertInf())\n        {\n            vert = vertLine.beginVertInf();\n        }\n        else if (pos == vertLine.finish && vertLine.finishVertInf())\n        {\n            vert = vertLine.finishVertInf();\n        }\n        horiCommitFinish(router, vert);\n\n        for (VertSet::iterator v = vertInfs.begin();\n                v != vertInfs.end(); ++v)\n        {\n            if ((*v)->point.x == finish)\n            {\n                vertLine.breakPoints.insert(PosVertInf(pos, *v,\n                        getPosVertInfDirections(*v, YDIM)));\n            }\n        }\n    }\n    void generateVisibilityEdgesFromBreakpointSet(Router *router, size_t dim)\n    {\n        if (breakPoints.empty() || ((breakPoints.begin())->pos > begin))\n        {\n            // Add a begin point if there was not already an intersection\n            // found at that point. Though, don't do this if the line\n            // segment goes off to infinity -- we can't reach anything\n            // by going in that direction!\n            if (begin == -DBL_MAX)\n            {\n                // Shorten line to first intersection point.\n                COLA_ASSERT(!breakPoints.empty());\n                begin = breakPoints.begin()->pos;\n            }\n            else\n            {\n                // Add begin point.\n                Point point(pos, pos);\n                point[dim] = begin;\n                VertInf *vert = new VertInf(router, dummyOrthogID, point);\n                breakPoints.insert(PosVertInf(begin, vert));\n            }\n        }\n        if (breakPoints.empty() || ((breakPoints.rbegin())->pos < finish))\n        {\n            // Add a finish point if there was not already an intersection\n            // found at that point. Though, don't do this if the line\n            // segment goes off to infinity -- we can't reach anything\n            // by going in that direction!\n            if (finish == DBL_MAX)\n            {\n                // Shorten line to last intersection point.\n                finish = breakPoints.rbegin()->pos;\n            }\n            else\n            {\n                // Add finish point.\n                Point point(pos, pos);\n                point[dim] = finish;\n                VertInf *vert = new VertInf(router, dummyOrthogID, point);\n                breakPoints.insert(PosVertInf(finish, vert));\n            }\n        }\n\n        // Set flags for orthogonal routing optimisation.\n        setLongRangeVisibilityFlags(dim);\n\n        const bool orthogonal = true;\n        BreakpointSet::iterator vert, last;\n#if 0\n        last = breakPoints.end();\n        for (vert = breakPoints.begin(); vert != breakPoints.end();)\n        {\n            if (vert->vert->id == dummyOrthogID)\n            {\n                if (last == breakPoints.end() ||\n                        (last->vert->point != vert->vert->point))\n                {\n                    last = vert;\n                }\n                else\n                {\n                    // Already seen a dummy orthogonal point at this\n                    // position, delete it.\n\n            }\n            else\n            {\n                ++vert;\n            }\n        }\n#endif\n        for (vert = last = breakPoints.begin(); vert != breakPoints.end();)\n        {\n            BreakpointSet::iterator firstPrev = last;\n            while (last->vert->point[dim] != vert->vert->point[dim])\n            {\n                COLA_ASSERT(vert != last);\n                // Assert points are not at the same position.\n                COLA_ASSERT(vert->vert->point != last->vert->point);\n\n                if (vert->vert->id.isConnPt() && last->vert->id.isConnPt())\n                {\n                    // Here we have a pair of two endpoints that are both\n                    // connector endpoints and both are inside a shape.\n\n                    // Give vert visibility back to the first non-connector\n                    // endpoint vertex (i.e., the side of the shape).\n                    BreakpointSet::iterator side = last;\n                    while (side->vert->id.isConnPt())\n                    {\n                        if (side == breakPoints.begin())\n                        {\n                            break;\n                        }\n                        --side;\n                    }\n                    bool canSeeDown = (vert->dirs & VisDirDown);\n                    if (canSeeDown && !(side->vert->id.isConnPt()))\n                    {\n                        EdgeInf *edge = new\n                                EdgeInf(side->vert, vert->vert, orthogonal);\n                        edge->setDist(vert->vert->point[dim] -\n                                side->vert->point[dim]);\n                    }\n\n                    // Give last visibility back to the first non-connector\n                    // endpoint vertex (i.e., the side of the shape).\n                    side = vert;\n                    while ((side != breakPoints.end()) &&\n                            side->vert->id.isConnPt())\n                    {\n                        ++side;\n                    }\n                    bool canSeeUp = (last->dirs & VisDirUp);\n                    if (canSeeUp && (side != breakPoints.end()))\n                    {\n                        EdgeInf *edge = new\n                                EdgeInf(last->vert, side->vert, orthogonal);\n                        edge->setDist(side->vert->point[dim] -\n                                last->vert->point[dim]);\n                    }\n                }\n\n                // The normal case.\n                //\n                // Note: It's okay to give two connector endpoints visibility\n                // here since we only consider the partner endpoint as a\n                // candidate while searching if it is the other endpoint of\n                // the connector in question.\n                //\n                bool generateEdge = true;\n                if (last->vert->id.isConnPt() && !(last->dirs & VisDirUp))\n                {\n                    // Don't generate the visibility segment if the ConnEnd\n                    // doesn't have visibility in that direction.\n                    generateEdge = false;\n                }\n                else if (vert->vert->id.isConnPt() && !(vert->dirs & VisDirDown))\n                {\n                    // Don't generate the visibility segment if the ConnEnd\n                    // doesn't have visibility in that direction.\n                    generateEdge = false;\n                }\n                if (generateEdge)\n                {\n                    EdgeInf *edge =\n                            new EdgeInf(last->vert, vert->vert, orthogonal);\n                    edge->setDist(vert->vert->point[dim] -\n                            last->vert->point[dim]);\n                }\n\n                ++last;\n            }\n\n            ++vert;\n\n            if ((vert != breakPoints.end()) &&\n                    (last->vert->point[dim] == vert->vert->point[dim]))\n            {\n                // Still looking at same pair, just reset prev number pointer.\n                last = firstPrev;\n            }\n            else\n            {\n                // vert has moved to the beginning of a group at a new\n                // position.  Last is now in the right place, so do nothing.\n            }\n        }\n    }\n\n    double begin;\n    double finish;\n    double pos;\n\n    // XXX shapeSide is unused and could possibly be removed?\n    bool shapeSide;\n\n    VertSet vertInfs;\n    BreakpointSet breakPoints;\nprivate:\n    // MSVC wants to generate the assignment operator and the default\n    // constructor, but fails.  Therefore we declare them private and\n    // don't implement them.\n    LineSegment & operator=(LineSegment const &);\n    LineSegment();\n};\n\ntypedef std::list<LineSegment> SegmentList;\n\nclass SegmentListWrapper\n{\n    public:\n        LineSegment *insert(LineSegment segment)\n        {\n            SegmentList::iterator found = _list.end();\n            for (SegmentList::iterator curr = _list.begin();\n                    curr != _list.end(); ++curr)\n            {\n                if (curr->overlaps(segment))\n                {\n                    if (found != _list.end())\n                    {\n                        // This is not the first segment that overlaps,\n                        // so we need to merge and then delete an existing\n                        // segment.\n                        curr->mergeVertInfs(*found);\n                        _list.erase(found);\n                        found = curr;\n                    }\n                    else\n                    {\n                        // This is the first overlapping segment, so just\n                        // merge the new segment with this one.\n                        curr->mergeVertInfs(segment);\n                        found = curr;\n                    }\n                }\n            }\n\n            if (found == _list.end())\n            {\n                // Add this line.\n                _list.push_back(segment);\n                return &(_list.back());\n            }\n\n            return &(*found);\n        }\n        SegmentList& list(void)\n        {\n            return _list;\n        }\n    private:\n        SegmentList _list;\n};\n\n\n// Given a router instance and a set of possible horizontal segments, and a\n// possible vertical visibility segment, compute and add edges to the\n// orthogonal visibility graph for all the visibility edges.\nstatic void intersectSegments(Router *router, SegmentList& segments,\n        LineSegment& vertLine)\n{\n    // XXX: It seems that this case can sometimes occur... maybe when\n    // there are many overlapping rectangles.\n    //COLA_ASSERT(vertLine.beginVertInf() == nullptr);\n    //COLA_ASSERT(vertLine.finishVertInf() == nullptr);\n\n    COLA_ASSERT(!segments.empty());\n    for (SegmentList::iterator it = segments.begin(); it != segments.end(); )\n    {\n        LineSegment& horiLine = *it;\n\n        bool inVertSegRegion = ((vertLine.begin <= horiLine.pos) &&\n                                (vertLine.finish >= horiLine.pos));\n\n        if (vertLine.pos < horiLine.begin)\n        {\n            // We've yet to reach this segment in the sweep, so ignore.\n            ++it;\n            continue;\n        }\n        else if (vertLine.pos == horiLine.begin)\n        {\n            if (inVertSegRegion)\n            {\n                horiLine.insertBreakpointsBegin(router, vertLine);\n            }\n        }\n        else if (vertLine.pos == horiLine.finish)\n        {\n            if (inVertSegRegion)\n            {\n                // Add horizontal visibility segment.\n                horiLine.addEdgeHorizontal(router);\n\n                horiLine.insertBreakpointsFinish(router, vertLine);\n\n                size_t dim = XDIM; // x-dimension\n                horiLine.generateVisibilityEdgesFromBreakpointSet(router, dim);\n\n                // And we've now finished with the segment, so delete.\n                it = segments.erase(it);\n                continue;\n            }\n        }\n        else if (vertLine.pos > horiLine.finish)\n        {\n            // Add horizontal visibility segment.\n            horiLine.addEdgeHorizontal(router);\n\n            size_t dim = XDIM; // x-dimension\n            horiLine.generateVisibilityEdgesFromBreakpointSet(router, dim);\n\n            // We've now swept past this horizontal segment, so delete.\n            it = segments.erase(it);\n            continue;\n        }\n        else\n        {\n            COLA_ASSERT(vertLine.pos > horiLine.begin);\n            COLA_ASSERT(vertLine.pos < horiLine.finish);\n\n            if (inVertSegRegion)\n            {\n                // Add horizontal visibility segment.\n                VertSet intersectionVerts =\n                        horiLine.addEdgeHorizontalTillIntersection(\n                            router, vertLine);\n\n                for (VertSet::iterator v = intersectionVerts.begin();\n                        v != intersectionVerts.end(); ++v)\n                {\n                    vertLine.breakPoints.insert(PosVertInf(horiLine.pos, *v,\n                            getPosVertInfDirections(*v, YDIM)));\n                }\n            }\n        }\n        ++it;\n    }\n\n    // Split breakPoints set into visibility segments.\n    size_t dimension = YDIM; // y-dimension\n    vertLine.generateVisibilityEdgesFromBreakpointSet(router, dimension);\n}\n\n\n// Processes an event for the vertical sweep used for computing the static\n// orthogonal visibility graph.  This adds possible horizontal visibility\n// segments to the segments list.\n// The first pass is adding the event to the scanline, the second is for\n// processing the event and the third for removing it from the scanline.\nstatic void processEventVert(Router *router, NodeSet& scanline,\n        SegmentListWrapper& segments, Event *e, unsigned int pass)\n{\n    Node *v = e->v;\n\n    if ( ((pass == 1) && (e->type == Open)) ||\n         ((pass == 2) && (e->type == ConnPoint)) )\n    {\n        std::pair<NodeSet::iterator, bool> result = scanline.insert(v);\n        v->iter = result.first;\n        COLA_ASSERT(result.second);\n\n        NodeSet::iterator it = v->iter;\n        // Work out neighbours\n        if (it != scanline.begin())\n        {\n            Node *u = *(--it);\n            v->firstAbove = u;\n            u->firstBelow = v;\n        }\n        it = v->iter;\n        if (++it != scanline.end())\n        {\n            Node *u = *it;\n            v->firstBelow = u;\n            u->firstAbove = v;\n        }\n    }\n\n    if (pass == 2)\n    {\n        if ((e->type == Open) || (e->type == Close))\n        {\n            // Only difference between Open and Close is whether the line\n            // segments are at the top or bottom of the shape.  Decide here.\n            double lineY = (e->type == Open) ? v->min[YDIM] : v->max[YDIM];\n\n            // Shape edge positions.\n            double minShape = v->min[XDIM];\n            double maxShape = v->max[XDIM];\n            // As far as we can see.\n            double minLimit, maxLimit;\n            double minLimitMax, maxLimitMin;\n            v->findFirstPointAboveAndBelow(XDIM, lineY, minLimit, maxLimit,\n                    minLimitMax, maxLimitMin);\n\n            // Insert possible visibility segments.\n            if (minLimitMax >= maxLimitMin)\n            {\n                // These vertices represent the shape corners.\n                VertInf *vI1 = new VertInf(router, dummyOrthogShapeID,\n                            Point(minShape, lineY));\n                VertInf *vI2 = new VertInf(router, dummyOrthogShapeID,\n                            Point(maxShape, lineY));\n\n                // There are no overlapping shapes, so give full visibility.\n                if (minLimit < minShape)\n                {\n                    segments.insert(LineSegment(minLimit, minShape, lineY,\n                                true, nullptr, vI1));\n                }\n                segments.insert(LineSegment(minShape, maxShape, lineY,\n                            true, vI1, vI2));\n                if (maxShape < maxLimit)\n                {\n                    segments.insert(LineSegment(maxShape, maxLimit, lineY,\n                                true, vI2, nullptr));\n                }\n            }\n            else\n            {\n                // There are overlapping shapes along this shape edge.\n\n                if ((minLimitMax > minLimit) && (minLimitMax >= minShape))\n                {\n                    LineSegment *line = segments.insert(\n                            LineSegment(minLimit, minLimitMax, lineY, true));\n                    // Shape corner:\n                    VertInf *vI1 = new VertInf(router, dummyOrthogShapeID,\n                                Point(minShape, lineY));\n                    line->vertInfs.insert(vI1);\n                }\n                if ((maxLimitMin < maxLimit) && (maxLimitMin <= maxShape))\n                {\n                    LineSegment *line = segments.insert(\n                            LineSegment(maxLimitMin, maxLimit, lineY, true));\n                    // Shape corner:\n                    VertInf *vI2 = new VertInf(router, dummyOrthogShapeID,\n                                Point(maxShape, lineY));\n                    line->vertInfs.insert(vI2);\n                }\n            }\n        }\n        else if (e->type == ConnPoint)\n        {\n            // Connection point.\n            VertInf *centreVert = e->v->c;\n            Point& cp = centreVert->point;\n\n            // As far as we can see.\n            double minLimit = v->firstPointAbove(XDIM);\n            double maxLimit = v->firstPointBelow(XDIM);\n            bool inShape = v->isInsideShape(XDIM);\n\n            // Insert if we have visibility in that direction and the segment\n            // length is greater than zero.\n            LineSegment *line1 = nullptr, *line2 = nullptr;\n            if ((centreVert->visDirections & ConnDirLeft) && (minLimit < cp.x))\n            {\n                line1 = segments.insert(LineSegment(minLimit, cp.x, e->pos,\n                        true, nullptr, centreVert));\n            }\n            if ((centreVert->visDirections & ConnDirRight) && (cp.x < maxLimit))\n            {\n                line2 = segments.insert(LineSegment(cp.x, maxLimit, e->pos,\n                        true, centreVert, nullptr));\n                // If there was a line1, then we just merged with it, so\n                // that pointer will be invalid (and now unnecessary).\n                line1 = nullptr;\n            }\n            if (!line1 && !line2)\n            {\n                // Add a point segment for the centre point.\n                segments.insert(LineSegment(cp.x, e->pos, centreVert));\n            }\n\n            if (!inShape)\n            {\n                // This is not contained within a shape so add a normal\n                // visibility graph point here too (since paths won't route\n                // *through* connector endpoint vertices).\n                if (line1 || line2)\n                {\n                    VertInf *cent = new VertInf(router, dummyOrthogID, cp);\n                    if (line1)\n                    {\n                        line1->vertInfs.insert(cent);\n                    }\n                    if (line2)\n                    {\n                        line2->vertInfs.insert(cent);\n                    }\n                }\n            }\n        }\n    }\n\n    if ( ((pass == 3) && (e->type == Close)) ||\n         ((pass == 2) && (e->type == ConnPoint)) )\n    {\n        // Clean up neighbour pointers.\n        Node *l = v->firstAbove, *r = v->firstBelow;\n        if (l != nullptr)\n        {\n            l->firstBelow = v->firstBelow;\n        }\n        if (r != nullptr)\n        {\n            r->firstAbove = v->firstAbove;\n        }\n\n        if (e->type == ConnPoint)\n        {\n            scanline.erase(v->iter);\n            delete v;\n        }\n        else  // if (e->type == Close)\n        {\n            size_t result;\n            result = scanline.erase(v);\n            COLA_ASSERT(result == 1);\n            COLA_UNUSED(result);  // Avoid warning.\n            delete v;\n        }\n    }\n}\n\n\n// Processes an event for the vertical sweep used for computing the static\n// orthogonal visibility graph.  This adds possible vertical visibility\n// segments to the segments list.\n// The first pass is adding the event to the scanline, the second is for\n// processing the event and the third for removing it from the scanline.\nstatic void processEventHori(Router *router, NodeSet& scanline,\n        SegmentListWrapper& segments, Event *e, unsigned int pass)\n{\n    Node *v = e->v;\n\n    if ( ((pass == 1) && (e->type == Open)) ||\n         ((pass == 2) && (e->type == ConnPoint)) )\n    {\n        std::pair<NodeSet::iterator, bool> result = scanline.insert(v);\n        v->iter = result.first;\n        COLA_ASSERT(result.second);\n\n        NodeSet::iterator it = v->iter;\n        // Work out neighbours\n        if (it != scanline.begin())\n        {\n            Node *u = *(--it);\n            v->firstAbove = u;\n            u->firstBelow = v;\n        }\n        it = v->iter;\n        if (++it != scanline.end())\n        {\n            Node *u = *it;\n            v->firstBelow = u;\n            u->firstAbove = v;\n        }\n    }\n\n    if (pass == 2)\n    {\n        if ((e->type == Open) || (e->type == Close))\n        {\n            // Only difference between Open and Close is whether the line\n            // segments are at the left or right of the shape.  Decide here.\n            double lineX = (e->type == Open) ? v->min[XDIM] : v->max[XDIM];\n\n            // Shape edge positions.\n            double minShape = v->min[YDIM];\n            double maxShape = v->max[YDIM];\n            // As far as we can see.\n            double minLimit, maxLimit;\n            double minLimitMax, maxLimitMin;\n            v->findFirstPointAboveAndBelow(YDIM, lineX, minLimit, maxLimit,\n                    minLimitMax, maxLimitMin);\n\n            if (minLimitMax >= maxLimitMin)\n            {\n                LineSegment *line = segments.insert(\n                        LineSegment(minLimit, maxLimit, lineX));\n\n                // Shape corners:\n                VertInf *vI1 = new VertInf(router, dummyOrthogShapeID,\n                        Point(lineX, minShape));\n                VertInf *vI2 = new VertInf(router, dummyOrthogShapeID,\n                        Point(lineX, maxShape));\n                line->vertInfs.insert(vI1);\n                line->vertInfs.insert(vI2);\n            }\n            else\n            {\n                if ((minLimitMax > minLimit) && (minLimitMax >= minShape))\n                {\n                    LineSegment *line = segments.insert(\n                            LineSegment(minLimit, minLimitMax, lineX));\n\n                    // Shape corner:\n                    VertInf *vI1 = new VertInf(router, dummyOrthogShapeID,\n                                Point(lineX, minShape));\n                    line->vertInfs.insert(vI1);\n                }\n                if ((maxLimitMin < maxLimit) && (maxLimitMin <= maxShape))\n                {\n                    LineSegment *line = segments.insert(\n                            LineSegment(maxLimitMin, maxLimit, lineX));\n\n                    // Shape corner:\n                    VertInf *vI2 = new VertInf(router, dummyOrthogShapeID,\n                                Point(lineX, maxShape));\n                    line->vertInfs.insert(vI2);\n                }\n            }\n        }\n        else if (e->type == ConnPoint)\n        {\n            // Connection point.\n            VertInf *centreVert = e->v->c;\n            Point& cp = centreVert->point;\n\n            // As far as we can see.\n            double minLimit = v->firstPointAbove(YDIM);\n            double maxLimit = v->firstPointBelow(YDIM);\n\n            // Insert if we have visibility in that direction and the segment\n            // length is greater than zero.\n            if ((centreVert->visDirections & ConnDirUp) && (minLimit < cp.y))\n            {\n                segments.insert(LineSegment(minLimit, cp.y, e->pos));\n            }\n\n            if ((centreVert->visDirections & ConnDirDown) && (cp.y < maxLimit))\n            {\n                segments.insert(LineSegment(cp.y, maxLimit, e->pos));\n            }\n        }\n    }\n\n    if ( ((pass == 3) && (e->type == Close)) ||\n         ((pass == 2) && (e->type == ConnPoint)) )\n    {\n        // Clean up neighbour pointers.\n        Node *l = v->firstAbove, *r = v->firstBelow;\n        if (l != nullptr)\n        {\n            l->firstBelow = v->firstBelow;\n        }\n        if (r != nullptr)\n        {\n            r->firstAbove = v->firstAbove;\n        }\n\n        if (e->type == ConnPoint)\n        {\n            scanline.erase(v->iter);\n            delete v;\n        }\n        else  // if (e->type == Close)\n        {\n            size_t result;\n            result = scanline.erase(v);\n            COLA_ASSERT(result == 1);\n            COLA_UNUSED(result);  // Avoid warning.\n            delete v;\n        }\n    }\n}\n\n// Correct visibility for pins or connector endpoints on the leading or\n// trailing edge of the visibility graph which may only have visibility in\n// the outward direction where there will not be a possible path.\nvoid fixConnectionPointVisibilityOnOutsideOfVisibilityGraph(Event **events,\n        size_t totalEvents, ConnDirFlags addedVisibility)\n{\n    if (totalEvents > 0)\n    {\n        double firstPos = events[0]->pos;\n        size_t index = 0;\n        while (index < totalEvents)\n        {\n            if (events[index]->pos > firstPos)\n            {\n                break;\n            }\n\n            if (events[index]->v->c)\n            {\n                events[index]->v->c->visDirections |= addedVisibility;\n            }\n            ++index;\n        }\n        index = 0;\n        double lastPos = events[totalEvents - 1]->pos;\n        while (index < totalEvents)\n        {\n            size_t revIndex = totalEvents - 1 - index;\n            if (events[revIndex]->pos < lastPos)\n            {\n                break;\n            }\n\n            if (events[revIndex]->v->c)\n            {\n                events[revIndex]->v->c->visDirections |= addedVisibility;\n            }\n            ++index;\n        }\n    }\n}\n\nextern void generateStaticOrthogonalVisGraph(Router *router)\n{\n    const size_t n = router->m_obstacles.size();\n    const unsigned cpn = router->vertices.connsSize();\n    // Set up the events for the vertical sweep.\n    size_t totalEvents = (2 * n) + cpn;\n    Event **events = new Event*[totalEvents];\n    unsigned ctr = 0;\n    ObstacleList::iterator obstacleIt = router->m_obstacles.begin();\n    for (unsigned i = 0; i < n; i++)\n    {\n        Obstacle *obstacle = *obstacleIt;\n#ifndef PAPER\n        JunctionRef *junction = dynamic_cast<JunctionRef *> (obstacle);\n        if (junction && ! junction->positionFixed())\n        {\n            // Junctions that are free to move are not treated as obstacles.\n            ++obstacleIt;\n            totalEvents -= 2;\n            continue;\n        }\n#endif\n\n        Box bbox = obstacle->routingBox();\n        double midX = bbox.min.x + ((bbox.max.x - bbox.min.x) / 2);\n        Node *v = new Node(obstacle, midX);\n        events[ctr++] = new Event(Open, v, bbox.min.y);\n        events[ctr++] = new Event(Close, v, bbox.max.y);\n\n        ++obstacleIt;\n    }\n\n#ifdef DEBUGHANDLER\n    if (router->debugHandler())\n    {\n        std::vector<Box> obstacleBoxes;\n        ObstacleList::iterator obstacleIt = router->m_obstacles.begin();\n        for (unsigned i = 0; i < n; i++)\n        {\n            Obstacle *obstacle = *obstacleIt;\n            JunctionRef *junction = dynamic_cast<JunctionRef *> (obstacle);\n            if (junction && ! junction->positionFixed())\n            {\n                // Junctions that are free to move are not treated as obstacles.\n                ++obstacleIt;\n                continue;\n            }\n            Box bbox = obstacle->routingBox();\n            obstacleBoxes.push_back(bbox);\n            ++obstacleIt;\n        }\n        router->debugHandler()->updateObstacleBoxes(obstacleBoxes);\n    }\n#endif\n\n    for (VertInf *curr = router->vertices.connsBegin();\n            curr && (curr != router->vertices.shapesBegin());\n            curr = curr->lstNext)\n    {\n        if (curr->visDirections == ConnDirNone)\n        {\n            // This is a connector endpoint that is attached to a connection\n            // pin on a shape, so it doesn't need to be given visibility.\n            // Thus, skip it and record that there is one less total event.\n            --totalEvents;\n            continue;\n        }\n        Point& point = curr->point;\n\n        Node *v = new Node(curr, point.x);\n        events[ctr++] = new Event(ConnPoint, v, point.y);\n    }\n    qsort((Event*)events, (size_t) totalEvents, sizeof(Event*), compare_events);\n\n    // Correct visibility for pins or connector endpoints on the leading or\n    // trailing edge of the visibility graph which may only have visibility in\n    // the outward direction where there will not be a possible path.  We\n    // fix this by giving them visibility left and right.\n    fixConnectionPointVisibilityOnOutsideOfVisibilityGraph(events, totalEvents,\n            (ConnDirLeft | ConnDirRight));\n\n    // Process the vertical sweep -- creating cadidate horizontal edges.\n    // We do multiple passes over sections of the list so we can add relevant\n    // entries to the scanline that might follow, before processing them.\n    SegmentListWrapper segments;\n    NodeSet scanline;\n    double thisPos = (totalEvents > 0) ? events[0]->pos : 0;\n    unsigned int posStartIndex = 0;\n    unsigned int posFinishIndex = 0;\n    for (unsigned i = 0; i <= totalEvents; ++i)\n    {\n        // Progress reporting and continuation check.\n        router->performContinuationCheck(\n                TransactionPhaseOrthogonalVisibilityGraphScanX,\n                i, totalEvents);\n\n        // If we have finished the current scanline or all events, then we\n        // process the events on the current scanline in a couple of passes.\n        if ((i == totalEvents) || (events[i]->pos != thisPos))\n        {\n            posFinishIndex = i;\n            for (int pass = 2; pass <= 3; ++pass)\n            {\n                for (unsigned j = posStartIndex; j < posFinishIndex; ++j)\n                {\n                    processEventVert(router, scanline, segments,\n                            events[j], pass);\n                }\n            }\n\n            if (i == totalEvents)\n            {\n                // We have cleaned up, so we can now break out of loop.\n                break;\n            }\n\n            thisPos = events[i]->pos;\n            posStartIndex = i;\n        }\n\n        // Do the first sweep event handling -- building the correct\n        // structure of the scanline.\n        const int pass = 1;\n        processEventVert(router, scanline, segments, events[i], pass);\n    }\n    COLA_ASSERT(scanline.size() == 0);\n    for (unsigned i = 0; i < totalEvents; ++i)\n    {\n        delete events[i];\n    }\n\n    segments.list().sort();\n\n    // Set up the events for the horizontal sweep.\n    SegmentListWrapper vertSegments;\n    ctr = 0;\n    obstacleIt = router->m_obstacles.begin();\n    for (unsigned i = 0; i < n; i++)\n    {\n        Obstacle *obstacle = *obstacleIt;\n#ifndef PAPER\n        JunctionRef *junction = dynamic_cast<JunctionRef *> (obstacle);\n        if (junction && ! junction->positionFixed())\n        {\n            // Junctions that are free to move are not treated as obstacles.\n            ++obstacleIt;\n            continue;\n        }\n#endif\n        Box bbox = obstacle->routingBox();\n        double midY = bbox.min.y + ((bbox.max.y - bbox.min.y) / 2);\n        Node *v = new Node(obstacle, midY);\n        events[ctr++] = new Event(Open, v, bbox.min.x);\n        events[ctr++] = new Event(Close, v, bbox.max.x);\n\n        ++obstacleIt;\n    }\n    for (VertInf *curr = router->vertices.connsBegin();\n            curr && (curr != router->vertices.shapesBegin());\n            curr = curr->lstNext)\n    {\n        if (curr->visDirections == ConnDirNone)\n        {\n            // This is a connector endpoint that is attached to a connection\n            // pin on a shape, so it doesn't need to be given visibility.\n            // Thus, skip it.\n            continue;\n        }\n        Point& point = curr->point;\n\n        Node *v = new Node(curr, point.y);\n        events[ctr++] = new Event(ConnPoint, v, point.x);\n    }\n    qsort((Event*)events, (size_t) totalEvents, sizeof(Event*), compare_events);\n\n    // Correct visibility for pins or connector endpoints on the leading or\n    // trailing edge of the visibility graph which may only have visibility in\n    // the outward direction where there will not be a possible path.  We\n    // fix this by giving them visibility up and down.\n    fixConnectionPointVisibilityOnOutsideOfVisibilityGraph(events, totalEvents,\n            (ConnDirUp | ConnDirDown));\n\n    // Process the horizontal sweep -- creating vertical visibility edges.\n    thisPos = (totalEvents > 0) ? events[0]->pos : 0;\n    posStartIndex = 0;\n    for (unsigned i = 0; i <= totalEvents; ++i)\n    {\n        // Progress reporting and continuation check.\n        router->performContinuationCheck(\n                TransactionPhaseOrthogonalVisibilityGraphScanY,\n                i, totalEvents);\n\n        // If we have finished the current scanline or all events, then we\n        // process the events on the current scanline in a couple of passes.\n        if ((i == totalEvents) || (events[i]->pos != thisPos))\n        {\n            posFinishIndex = i;\n            for (int pass = 2; pass <= 3; ++pass)\n            {\n                for (unsigned j = posStartIndex; j < posFinishIndex; ++j)\n                {\n                    processEventHori(router, scanline, vertSegments,\n                            events[j], pass);\n                }\n            }\n\n            // Process the merged line segments.\n            vertSegments.list().sort();\n            for (SegmentList::iterator curr = vertSegments.list().begin();\n                    curr != vertSegments.list().end(); ++curr)\n            {\n                intersectSegments(router, segments.list(), *curr);\n            }\n            vertSegments.list().clear();\n\n            if (i == totalEvents)\n            {\n                // We have cleaned up, so we can now break out of loop.\n                break;\n            }\n\n            thisPos = events[i]->pos;\n            posStartIndex = i;\n        }\n\n        // Do the first sweep event handling -- building the correct\n        // structure of the scanline.\n        const int pass = 1;\n        processEventHori(router, scanline, vertSegments, events[i], pass);\n    }\n    COLA_ASSERT(scanline.size() == 0);\n    for (unsigned i = 0; i < totalEvents; ++i)\n    {\n        delete events[i];\n    }\n    delete [] events;\n\n    // Add portions of horizontal lines that are after the final vertical\n    // position we considered.\n    for (SegmentList::iterator it = segments.list().begin();\n            it != segments.list().end(); )\n    {\n        LineSegment& horiLine = *it;\n\n        horiLine.addEdgeHorizontal(router);\n\n        size_t dim = XDIM; // x-dimension\n        horiLine.generateVisibilityEdgesFromBreakpointSet(router, dim);\n\n        it = segments.list().erase(it);\n    }\n}\n\n\n//============================================================================\n//                           Path Adjustment code\n//============================================================================\n\n\ntypedef std::pair<Point, Point> RectBounds;\n\nstatic bool insideRectBounds(const Point& point, const RectBounds& rectBounds)\n{\n    Point zero(0, 0);\n    if ((rectBounds.first == zero) && (rectBounds.second == zero))\n    {\n        // We can't be inside the invalid rectangle.\n        return false;\n    }\n\n    for (size_t i = 0; i < 2; ++i)\n    {\n        if (point[i] < rectBounds.first[i])\n        {\n            return false;\n        }\n        if (point[i] > rectBounds.second[i])\n        {\n            return false;\n        }\n    }\n    return true;\n}\n\n\nstatic void buildOrthogonalNudgingSegments(Router *router,\n        const size_t dim, ShiftSegmentList& segmentList)\n{\n    if (router->routingParameter(segmentPenalty) == 0)\n    {\n        // The nudging code assumes the routes are pretty optimal.  This will\n        // only be true if a segment penalty is set, so just return if this\n        // is not the case.\n        return;\n    }\n    bool nudgeFinalSegments =\n            router->routingOption(nudgeOrthogonalSegmentsConnectedToShapes);\n    std::vector<RectBounds> shapeLimits;\n    if (nudgeFinalSegments)\n    {\n        // If we're going to nudge final segments, then cache the shape\n        // rectangles to save us rebuilding them multiple times.\n        const size_t n = router->m_obstacles.size();\n        shapeLimits = std::vector<RectBounds>(n);\n\n        double zeroBufferDist = 0.0;\n\n        ObstacleList::iterator obstacleIt = router->m_obstacles.begin();\n        for (unsigned i = 0; i < n; i++)\n        {\n            ShapeRef *shape = dynamic_cast<ShapeRef *> (*obstacleIt);\n            JunctionRef *junction = dynamic_cast<JunctionRef *> (*obstacleIt);\n            if (shape)\n            {\n                // Take the real bounds of the shape\n                Box bBox = shape->polygon().offsetBoundingBox(zeroBufferDist);\n                shapeLimits[i] = std::make_pair(bBox.min, bBox.max);\n            }\n            else if (junction)\n            {\n                // Don't nudge segments attached to junctions,\n                // so just use the junction position here.\n                Point pos = junction->position();\n                shapeLimits[i] = std::make_pair(pos, pos);\n            }\n            ++obstacleIt;\n        }\n    }\n\n    size_t altDim = (dim + 1) % 2;\n    // For each connector.\n    for (ConnRefList::const_iterator curr = router->connRefs.begin();\n            curr != router->connRefs.end(); ++curr)\n    {\n        if ((*curr)->routingType() != ConnType_Orthogonal)\n        {\n            continue;\n        }\n        Polygon& displayRoute = (*curr)->displayRoute();\n        // Determine all line segments that we are interested in shifting.\n        // We don't consider the first or last segment of a path.\n        for (size_t i = 1; i < displayRoute.size(); ++i)\n        {\n            if (displayRoute.ps[i - 1][dim] == displayRoute.ps[i][dim])\n            {\n                // It's a segment in the dimension we are processing,\n                size_t indexLow = i - 1;\n                size_t indexHigh = i;\n                if (displayRoute.ps[i - 1][altDim] ==\n                        displayRoute.ps[i][altDim])\n                {\n                    // This is a zero length segment, so ignore it.\n                    continue;\n                }\n                else if (displayRoute.ps[i - 1][altDim] >\n                        displayRoute.ps[i][altDim])\n                {\n                    indexLow = i;\n                    indexHigh = i - 1;\n                }\n\n                // Find the checkpoints on the current segment and the\n                // checkpoints on the adjoining segments that aren't on\n                // the corner (hence the +1 and -1 modifiers).\n                std::vector<Point> checkpoints =\n                        displayRoute.checkpointsOnSegment(i - 1);\n                std::vector<Point> prevCheckpoints =\n                        displayRoute.checkpointsOnSegment(i - 2, -1);\n                std::vector<Point> nextCheckpoints =\n                        displayRoute.checkpointsOnSegment(i, +1);\n                bool hasCheckpoints = (checkpoints.size() > 0);\n                if (hasCheckpoints && !nudgeFinalSegments)\n                {\n                    // This segment includes one of the routing\n                    // checkpoints so we shouldn't shift it.\n                    segmentList.push_back(new NudgingShiftSegment(\n                            *curr, indexLow, indexHigh, dim));\n                    continue;\n                }\n\n                double thisPos = displayRoute.ps[i][dim];\n\n                if ((i == 1) || ((i + 1) == displayRoute.size()))\n                {\n                    // Is first or last segment of route.\n\n                    if (nudgeFinalSegments)\n                    {\n                        // Determine available space for nudging these\n                        // final segments.\n                        double minLim = -CHANNEL_MAX;\n                        double maxLim = CHANNEL_MAX;\n\n                        // If the position of the opposite end of the\n                        // attached segment is within the shape boundaries\n                        // then we want to use this as an ideal position\n                        // for the segment.\n\n                        // Bitflags indicating whether this segment starts\n                        // and/or ends in a shape.\n                        unsigned int endsInShapes = 0;\n                        // Also limit their movement to the edges of the\n                        // shapes they begin or end within.\n                        for (size_t k = 0; k < shapeLimits.size(); ++k)\n                        {\n                            double shapeMin = shapeLimits[k].first[dim];\n                            double shapeMax = shapeLimits[k].second[dim];\n                            if (insideRectBounds(displayRoute.ps[i - 1],\n                                        shapeLimits[k]))\n                            {\n                                minLim = std::max(minLim, shapeMin);\n                                maxLim = std::min(maxLim, shapeMax);\n                                endsInShapes |= 0x01;\n                            }\n                            if (insideRectBounds(displayRoute.ps[i],\n                                        shapeLimits[k]))\n                            {\n                                minLim = std::max(minLim, shapeMin);\n                                maxLim = std::min(maxLim, shapeMax);\n                                endsInShapes |= 0x10;\n                            }\n                        }\n\n                        if ( endsInShapes == 0 )\n                        {\n                            // If the segment is not within a shape, then we\n                            // should limit it's nudging buffer so we don't\n                            // combine many unnecessary regions.\n                            double pos = displayRoute.ps[i - 1][dim];\n                            double freeConnBuffer = 15;\n                            minLim = std::max(minLim, pos - freeConnBuffer);\n                            maxLim = std::min(maxLim, pos + freeConnBuffer);\n                        }\n\n                        if ((minLim == maxLim) || (*curr)->hasFixedRoute())\n                        {\n                            // Fixed.\n                            segmentList.push_back(new NudgingShiftSegment(*curr,\n                                    indexLow, indexHigh, dim));\n                        }\n                        else\n                        {\n                            // Shiftable.\n                            NudgingShiftSegment *segment = new NudgingShiftSegment(\n                                    *curr, indexLow, indexHigh, false, false, dim,\n                                    minLim, maxLim);\n                            segment->finalSegment = true;\n                            segment->endsInShape = (endsInShapes > 0);\n                            if ((displayRoute.size() == 2) &&\n                                    (endsInShapes == 0x11))\n                            {\n                                // This is a single segment connector bridging\n                                // two shapes.  So, we want to try to keep the\n                                // segment centred rather than shift it.\n                                segment->singleConnectedSegment = true;\n                            }\n                            segmentList.push_back(segment);\n                        }\n                    }\n                    else\n                    {\n                        // The first and last segment of a connector can't be\n                        // shifted.  We call them fixed segments.\n                        segmentList.push_back(new NudgingShiftSegment(*curr,\n                               indexLow, indexHigh, dim));\n                    }\n                    continue;\n                }\n\n\n                // The segment probably has space to be shifted.\n                double minLim = -CHANNEL_MAX;\n                double maxLim = CHANNEL_MAX;\n\n                // Constrain these segments by checkpoints along the\n                // adjoining segments.  Ignore checkpoints at ends of\n                // those segments.  XXX Perhaps this should not\n                // affect the ideal centre position in the channel.\n                for (size_t cp = 0; cp < nextCheckpoints.size(); ++cp)\n                {\n                    if (nextCheckpoints[cp][dim] < thisPos)\n                    {\n                        // Not at thisPoint, so constrain.\n                        minLim = std::max(minLim, nextCheckpoints[cp][dim]);\n                    }\n                    else if (nextCheckpoints[cp][dim] > thisPos)\n                    {\n                        // Not at thisPoint, so constrain.\n                        maxLim = std::min(maxLim, nextCheckpoints[cp][dim]);\n                    }\n                }\n                for (size_t cp = 0; cp < prevCheckpoints.size(); ++cp)\n                {\n                    if (prevCheckpoints[cp][dim] < thisPos)\n                    {\n                        // Not at thisPoint, so constrain.\n                        minLim = std::max(minLim, prevCheckpoints[cp][dim]);\n                    }\n                    else if (prevCheckpoints[cp][dim] > thisPos)\n                    {\n                        // Not at thisPoint, so constrain.\n                        maxLim = std::min(maxLim, prevCheckpoints[cp][dim]);\n                    }\n                }\n\n                bool isSBend = false;\n                bool isZBend = false;\n\n                if (checkpoints.empty())\n                {\n                    // Segments with checkpoints are held in place, but for\n                    // other segments, we should limit their movement based\n                    // on the limits of the segments at either end.\n\n                    double prevPos = displayRoute.ps[i - 2][dim];\n                    double nextPos = displayRoute.ps[i + 1][dim];\n                    if ( ((prevPos < thisPos) && (nextPos > thisPos)) ||\n                         ((prevPos > thisPos) && (nextPos < thisPos)) )\n                    {\n                        // Determine limits if the s-bend is not due to an\n                        // obstacle.  In this case we need to limit the channel\n                        // to the span of the adjoining segments to this one.\n                        if ((prevPos < thisPos) && (nextPos > thisPos))\n                        {\n                            minLim = std::max(minLim, prevPos);\n                            maxLim = std::min(maxLim, nextPos);\n                            isZBend = true;\n                        }\n                        else // if ((prevPos > thisPos) && (nextPos < thisPos))\n                        {\n                            minLim = std::max(minLim, nextPos);\n                            maxLim = std::min(maxLim, prevPos);\n                            isSBend = true;\n                        }\n                    }\n                }\n\n                NudgingShiftSegment *nss = new NudgingShiftSegment(*curr,\n                        indexLow, indexHigh, isSBend, isZBend, dim,\n                        minLim, maxLim);\n                nss->checkpoints = checkpoints;\n                segmentList.push_back(nss);\n            }\n        }\n    }\n}\n\n\ntypedef std::vector<ConnRef *> ConnRefVector;\ntypedef std::vector<Polygon> RouteVector;\n\n\nclass CmpLineOrder\n{\n    public:\n        CmpLineOrder(PtOrderMap& ord, const size_t dim)\n            : orders(ord),\n              dimension(dim)\n        {\n        }\n        bool operator()(const ShiftSegment *lhsSuper,\n                const ShiftSegment *rhsSuper,\n                bool *comparable = nullptr) const\n        {\n            const NudgingShiftSegment *lhs =\n                    static_cast<const NudgingShiftSegment *> (lhsSuper);\n            const NudgingShiftSegment *rhs =\n                    static_cast<const NudgingShiftSegment *> (rhsSuper);\n            if (comparable)\n            {\n                *comparable = true;\n            }\n            Point lhsLow  = lhs->lowPoint();\n            Point rhsLow  = rhs->lowPoint();\n            size_t altDim = (dimension + 1) % 2;\n#ifndef NDEBUG\n            const Point& lhsHigh = lhs->highPoint();\n            const Point& rhsHigh = rhs->highPoint();\n            COLA_ASSERT(lhsLow[dimension] == lhsHigh[dimension]);\n            COLA_ASSERT(rhsLow[dimension] == rhsHigh[dimension]);\n#endif\n\n            // We consider things at effectively the same position to\n            // be ordered based on their order and fixedOrder, so only\n            // compare segments further apart than the nudgeDistance.\n            if (lhsLow[dimension] != rhsLow[dimension])\n            {\n                return lhsLow[dimension] < rhsLow[dimension];\n            }\n\n            // If one of these is fixed, then determine order based on\n            // fixed segment, that is, order so the fixed segment doesn't\n            // block movement.\n            bool oneIsFixed = false;\n            const int lhsFixedOrder = lhs->fixedOrder(oneIsFixed);\n            const int rhsFixedOrder = rhs->fixedOrder(oneIsFixed);\n            if (oneIsFixed && (lhsFixedOrder != rhsFixedOrder))\n            {\n                return lhsFixedOrder < rhsFixedOrder;\n            }\n\n            // C-bends that did not have a clear order with s-bends might\n            // not have a good ordering here, so compare their order in\n            // terms of C-bend direction and S-bends and use that if it\n            // differs for the two segments.\n            const int lhsOrder = lhs->order();\n            const int rhsOrder = rhs->order();\n            if (lhsOrder != rhsOrder)\n            {\n                return lhsOrder < rhsOrder;\n            }\n\n            // Need to index using the original point into the map, so find it.\n            Point& unchanged = (lhsLow[altDim] > rhsLow[altDim]) ?\n                    lhsLow : rhsLow;\n\n            PtOrder& lowOrder = orders[unchanged];\n            int lhsPos = lowOrder.positionFor(dimension, lhs->connRef);\n            int rhsPos = lowOrder.positionFor(dimension, rhs->connRef);\n            if ((lhsPos == -1) || (rhsPos == -1))\n            {\n                // A value for rhsPos or lhsPos mean the points are not directly\n                // comparable, meaning they are at the same position but cannot\n                // overlap (they are just collinear.  The relative order for\n                // these segments is not important since we do not constrain\n                // them against each other.\n                //COLA_ASSERT(lhs->overlapsWith(rhs, dimension) == false);\n                // We do need to be consistent though.\n                if (comparable)\n                {\n                    *comparable = false;\n                }\n                return lhsLow[altDim] < rhsLow[altDim];\n            }\n            return lhsPos < rhsPos;\n        }\n\n        PtOrderMap& orders;\n        const size_t dimension;\n};\n\n\n// We can't use the normal sort algorithm for lists since it is not possible\n// to compare all elements, but there will be an ordering defined between\n// most of the elements.  Hence we order these, using insertion sort, and\n// the case of them not being able to be compared is handled by not setting\n// up any constraints between such segments when doing the nudging.\n//\nstatic ShiftSegmentList linesort(bool nudgeFinalSegments,\n        ShiftSegmentList origList, CmpLineOrder& comparison)\n{\n    // Cope with end segments that are getting moved and will line up with\n    // other segments of the same connector.  We do this by merging them into\n    // a single NudgingShiftSegment.\n    if (nudgeFinalSegments)\n    {\n        for (ShiftSegmentList::iterator currSegIt = origList.begin();\n                currSegIt != origList.end(); ++currSegIt)\n        {\n            for (ShiftSegmentList::iterator otherSegIt = currSegIt;\n                    otherSegIt != origList.end(); )\n            {\n                NudgingShiftSegment *currSeg =\n                        static_cast<NudgingShiftSegment *> (*currSegIt);\n                NudgingShiftSegment *otherSeg =\n                        static_cast<NudgingShiftSegment *> (*otherSegIt);\n                if ((currSegIt != otherSegIt) && currSeg && otherSeg &&\n                        currSeg->shouldAlignWith(otherSeg, comparison.dimension))\n                {\n                    currSeg->mergeWith(otherSeg, comparison.dimension);\n                    delete otherSeg;\n                    otherSegIt = origList.erase(otherSegIt);\n                }\n                else\n                {\n                    ++otherSegIt;\n                }\n            }\n        }\n    }\n\n    ShiftSegmentList resultList;\n\n    size_t origListSize = origList.size();\n    size_t deferredN = 0;\n    while (!origList.empty())\n    {\n        // Get and remove the first element from the origList.\n        ShiftSegment *segment = origList.front();\n        origList.pop_front();\n\n        // Find the insertion point in the resultList.\n        bool allComparable = true;\n        ShiftSegmentList::iterator curr;\n        for (curr = resultList.begin(); curr != resultList.end(); ++curr)\n        {\n            bool comparable = false;\n            bool lessThan = comparison(segment, *curr, &comparable);\n            allComparable &= comparable;\n\n            if (comparable && lessThan)\n            {\n                // If it is comparable and lessThan, then we have found the\n                // insertion point.\n                break;\n            }\n        }\n\n        if (resultList.empty() || allComparable || (deferredN >= origListSize))\n        {\n            // Insert the element into the resultList at the required point.\n            resultList.insert(curr, segment);\n            // Reset the origListSize and deferred counter.\n            deferredN = 0;\n            origListSize = origList.size();\n        }\n        else\n        {\n            // This wasn't comparable to anything in the sorted list,\n            // so defer addition of the segment till later.\n            origList.push_back(segment);\n            deferredN++;\n        }\n    }\n\n    return resultList;\n}\n\n\ntypedef std::list<ShiftSegment *> ShiftSegmentPtrList;\n\nclass PotentialSegmentConstraint\n{\n    public:\n        PotentialSegmentConstraint(size_t index1, size_t index2,\n                const Variables& vs)\n            : index1(index1),\n              index2(index2),\n              vs(vs)\n        {\n        }\n\n        bool operator<(const PotentialSegmentConstraint rhs) const\n        {\n            return sepDistance() < rhs.sepDistance();\n        }\n        double sepDistance(void) const\n        {\n            if (!stillValid())\n            {\n                return 0;\n            }\n            return fabs(vs[index1]->finalPosition - vs[index2]->finalPosition);\n        }\n        bool stillValid(void) const\n        {\n            return (index1 != index2);\n        }\n        void rewriteIndex(size_t oldIndex, size_t newIndex)\n        {\n            if (index1 == oldIndex)\n            {\n                index1 = newIndex;\n            }\n\n            if (index2 == oldIndex)\n            {\n                index2 = newIndex;\n            }\n        }\n\n        size_t index1;\n        size_t index2;\n\n    private:\n        const Variables& vs;\n};\n\n\nclass ImproveOrthogonalRoutes\n{\npublic:\n    ImproveOrthogonalRoutes(Router *router);\n    void execute(void);\n\nprivate:\n    void simplifyOrthogonalRoutes(void);\n    void buildOrthogonalNudgingOrderInfo(void);\n    void nudgeOrthogonalRoutes(size_t dimension,\n           bool justUnifying = false);\n\n    Router *m_router;\n    PtOrderMap m_point_orders;\n    UnsignedPairSet m_shared_path_connectors_with_common_endpoints;\n    ShiftSegmentList m_segment_list;\n};\n\n\nImproveOrthogonalRoutes::ImproveOrthogonalRoutes(Router *router)\n    : m_router(router)\n{\n}\n\nvoid ImproveOrthogonalRoutes::execute(void)\n{\n    TIMER_START(m_router, tmOrthogNudge);\n\n    m_shared_path_connectors_with_common_endpoints.clear();\n\n    // Simplify routes.\n    simplifyOrthogonalRoutes();\n\n    // Build a cache that denotes whether a certain segment of a connector\n    // contains a checkpoint.  We can't just compare positions, since routes\n    // can be moved away from their original positions during nudging.\n    buildConnectorRouteCheckpointCache(m_router);\n\n    // Do Unifying first, by itself.  This greedily tries to position free\n    // segments in overlapping channels at the same position.  This way they\n    // have correct nudging orders determined for them since they will form\n    // shared paths, rather than segments just positioned as an results of\n    // the routing process.  Of course, don't do this when rerouting with\n    // a fixedSharedPathPenalty since these routes include extra segments\n    // we want to keep apart which prevent some shared paths.\n    if (m_router->routingOption(performUnifyingNudgingPreprocessingStep) &&\n            (m_router->routingParameter(fixedSharedPathPenalty) == 0))\n    {\n        for (size_t dimension = 0; dimension < 2; ++dimension)\n        {\n            // Just perform Unifying operation.\n            bool justUnifying = true;\n            m_segment_list.clear();\n            buildOrthogonalNudgingSegments(m_router, dimension, m_segment_list);\n            buildOrthogonalChannelInfo(m_router, dimension, m_segment_list);\n            nudgeOrthogonalRoutes(dimension, justUnifying);\n        }\n    }\n\n#ifndef DEBUG_JUST_UNIFY\n    // Do the Nudging and centring.\n    for (size_t dimension = 0; dimension < 2; ++dimension)\n    {\n        m_point_orders.clear();\n        // Build nudging info.\n        // XXX Needs to be rebuilt for each dimension, cause of shifting\n        //     points.  Maybe we could modify the point orders.\n        buildOrthogonalNudgingOrderInfo();\n\n        // Do the centring and nudging.\n        m_segment_list.clear();\n        buildOrthogonalNudgingSegments(m_router, dimension, m_segment_list);\n        buildOrthogonalChannelInfo(m_router, dimension, m_segment_list);\n        nudgeOrthogonalRoutes(dimension);\n    }\n#endif // DEBUG_JUST_UNIFY\n\n    // Resimplify all the display routes that may have been split.\n    simplifyOrthogonalRoutes();\n\n    m_router->improveOrthogonalTopology();\n\n    // Clear the segment-checkpoint cache for connectors.\n    clearConnectorRouteCheckpointCache(m_router);\n\n    TIMER_STOP(m_router);\n}\n\nvoid ImproveOrthogonalRoutes::nudgeOrthogonalRoutes(size_t dimension,\n       bool justUnifying)\n{\n    bool nudgeFinalSegments = m_router->routingOption(\n            nudgeOrthogonalSegmentsConnectedToShapes);\n    bool nudgeSharedPathsWithCommonEnd = m_router->routingOption(\n            nudgeSharedPathsWithCommonEndPoint);\n    double baseSepDist = m_router->routingParameter(idealNudgingDistance);\n    COLA_ASSERT(baseSepDist >= 0);\n    // If we can fit things with the desired separation distance, then\n    // we try 10 times, reducing each time by a 10th of the original amount.\n    double reductionSteps = 10.0;\n\n    size_t totalSegmentsToShift = m_segment_list.size();\n    size_t numOfSegmentsShifted = 0;\n    // Do the actual nudging.\n    ShiftSegmentList currentRegion;\n    while (!m_segment_list.empty())\n    {\n        // Progress reporting and continuation check.\n        numOfSegmentsShifted = totalSegmentsToShift - m_segment_list.size();\n        m_router->performContinuationCheck(\n                (dimension == XDIM) ? TransactionPhaseOrthogonalNudgingX :\n                TransactionPhaseOrthogonalNudgingY, numOfSegmentsShifted,\n                totalSegmentsToShift);\n\n        // Take a reference segment\n        ShiftSegment *currentSegment = m_segment_list.front();\n        // Then, find the segments that overlap this one.\n        currentRegion.clear();\n        currentRegion.push_back(currentSegment);\n        m_segment_list.erase(m_segment_list.begin());\n        for (ShiftSegmentList::iterator curr = m_segment_list.begin();\n                curr != m_segment_list.end(); )\n        {\n            bool overlaps = false;\n            for (ShiftSegmentList::iterator curr2 = currentRegion.begin();\n                    curr2 != currentRegion.end(); ++curr2)\n            {\n                if ((*curr)->overlapsWith(*curr2, dimension))\n                {\n                    overlaps = true;\n                    break;\n                }\n            }\n            if (overlaps)\n            {\n                currentRegion.push_back(*curr);\n                m_segment_list.erase(curr);\n                // Consider segments from the beginning, since we may have\n                // since passed segments that overlap with the new set.\n                curr = m_segment_list.begin();\n            }\n            else\n            {\n                ++curr;\n            }\n        }\n\n        if (! justUnifying)\n        {\n            CmpLineOrder lineSortComp(m_point_orders, dimension);\n            currentRegion = linesort(nudgeFinalSegments, currentRegion,\n                    lineSortComp);\n        }\n\n        if (currentRegion.size() == 1)\n        {\n            // Save creating the solver instance if there is just one\n            // immovable segment, or if we are in the unifying stage.\n            if (currentRegion.front()->immovable() || justUnifying)\n            {\n                delete currentRegion.front();\n                continue;\n            }\n        }\n\n        // Process these segments.\n        std::list<size_t> freeIndexes;\n        Variables vs;\n        Constraints cs;\n        Constraints gapcs;\n        ShiftSegmentPtrList prevVars;\n        double sepDist = baseSepDist;\n#ifdef NUDGE_DEBUG\n        fprintf(stderr, \"-------------------------------------------------------\\n\");\n        fprintf(stderr, \"%s -- size: %d\\n\", (justUnifying) ? \"Unifying\" : \"Nudging\",\n                (int) currentRegion.size());\n#endif\n#ifdef NUDGE_DEBUG_SVG\n        printf(\"\\n\\n\");\n#endif\n        for (ShiftSegmentList::iterator currSegmentIt = currentRegion.begin();\n                currSegmentIt != currentRegion.end(); ++currSegmentIt )\n        {\n            NudgingShiftSegment *currSegment = static_cast<NudgingShiftSegment *> (*currSegmentIt);\n\n            // Create a solver variable for the position of this segment.\n            currSegment->createSolverVariable(justUnifying);\n\n            vs.push_back(currSegment->variable);\n            size_t index = vs.size() - 1;\n#ifdef NUDGE_DEBUG\n            fprintf(stderr,\"line(%d)  %.15f  dim: %d pos: %.16f\\n\"\n                   \"min: %.16f  max: %.16f\\n\"\n                   \"minEndPt: %.16f  maxEndPt: %.16f weight: %g cc: %d\\n\",\n                    currSegment->connRef->id(),\n                    currSegment->lowPoint()[dimension], (int) dimension,\n                    currSegment->variable->desiredPosition,\n                    currSegment->minSpaceLimit, currSegment->maxSpaceLimit,\n                    currSegment->lowPoint()[!dimension], currSegment->highPoint()[!dimension],\n                    currSegment->variable->weight,\n                    (int) currSegment->checkpoints.size());\n#endif\n#ifdef NUDGE_DEBUG_SVG\n            // Debugging info:\n            double minP = std::max(currSegment->minSpaceLimit, -5000.0);\n            double maxP = std::min(currSegment->maxSpaceLimit, 5000.0);\n            fprintf(stdout, \"<rect style=\\\"fill: #f00; opacity: 0.2;\\\" \"\n                    \"x=\\\"%g\\\" y=\\\"%g\\\" width=\\\"%g\\\" height=\\\"%g\\\" />\\n\",\n                    currSegment->lowPoint()[XDIM], minP,\n                    currSegment->highPoint()[XDIM] - currSegment->lowPoint()[XDIM],\n                    maxP - minP);\n            fprintf(stdout, \"<line style=\\\"stroke: #000;\\\" x1=\\\"%g\\\" \"\n                    \"y1=\\\"%g\\\" x2=\\\"%g\\\" y2=\\\"%g\\\" />\\n\",\n                    currSegment->lowPoint()[XDIM], currSegment->lowPoint()[YDIM],\n                    currSegment->highPoint()[XDIM], currSegment->highPoint()[YDIM]);\n#endif\n\n            if (justUnifying)\n            {\n                // Just doing centring, not nudging.\n                // Record the index of the variable so we can use it as\n                // a segment to potentially constrain to other segments.\n                if (currSegment->variable->weight == freeWeight)\n                {\n                    freeIndexes.push_back(index);\n                }\n                // Thus, we don't need to constrain position against other\n                // segments.\n                prevVars.push_back(&(*currSegment));\n                continue;\n            }\n\n            // The constraints generated here must be in order of\n            // leftBoundary-segment ... segment-segment ... segment-rightBoundary\n            // since this order is leveraged later for rewriting the\n            // separations of unsatisfable channel groups.\n\n            // Constrain to channel boundary.\n            if (!currSegment->fixed)\n            {\n                // If this segment sees a channel boundary to its left,\n                // then constrain its placement as such.\n                if (currSegment->minSpaceLimit > -CHANNEL_MAX)\n                {\n                    vs.push_back(new Variable(channelLeftID,\n                                currSegment->minSpaceLimit, fixedWeight));\n                    cs.push_back(new Constraint(vs[vs.size() - 1], vs[index],\n                                0.0));\n                }\n            }\n\n            // Constrain position in relation to previously seen segments,\n            // if necessary (i.e. when they could overlap).\n            for (ShiftSegmentPtrList::iterator prevVarIt = prevVars.begin();\n                    prevVarIt != prevVars.end(); ++prevVarIt)\n            {\n                NudgingShiftSegment *prevSeg =\n                        static_cast<NudgingShiftSegment *> (*prevVarIt);\n                Variable *prevVar = prevSeg->variable;\n\n                if (currSegment->overlapsWith(prevSeg, dimension) &&\n                        (!(currSegment->fixed) || !(prevSeg->fixed)))\n                {\n                    // If there is a previous segment to the left that\n                    // could overlap this in the shift direction, then\n                    // constrain the two segments to be separated.\n                    // Though don't add the constraint if both the\n                    // segments are fixed in place.\n                    double thisSepDist = sepDist;\n                    bool equality = false;\n                    if (currSegment->shouldAlignWith(prevSeg, dimension))\n                    {\n                        // Handles the case where the two end segments can\n                        // be brought together to make a single segment. This\n                        // can help in situations where having the small kink\n                        // can restrict other kinds of nudging.\n                        thisSepDist = 0;\n                        equality = true;\n                    }\n                    else if (currSegment->canAlignWith(prevSeg, dimension))\n                    {\n                        // We need to address the problem of two neighbouring\n                        // segments of the same connector being kept separated\n                        // due only to a kink created in the other dimension.\n                        // Here, we let such segments drift back together.\n                        thisSepDist = 0;\n                    }\n                    else if (!nudgeSharedPathsWithCommonEnd &&\n                            (m_shared_path_connectors_with_common_endpoints.count(\n                                 UnsignedPair(currSegment->connRef->id(), prevSeg->connRef->id())) > 0))\n                    {\n                        // We don't want to nudge apart these two segments\n                        // since they are from a shared path with a common\n                        // endpoint.  There might be multiple chains of\n                        // segments that don't all have the same endpoints\n                        // so we need to make this an equality to prevent\n                        // some of them possibly getting nudged apart.\n                        thisSepDist = 0;\n                        equality = true;\n                    }\n\n                    Constraint *constraint = new Constraint(prevVar,\n                            vs[index], thisSepDist, equality);\n                    cs.push_back(constraint);\n                    if (thisSepDist)\n                    {\n                        // Add to the list of gap constraints so we can\n                        // rewrite the separation distance later.\n                        gapcs.push_back(constraint);\n                    }\n                }\n            }\n\n            if (!currSegment->fixed)\n            {\n                // If this segment sees a channel boundary to its right,\n                // then constrain its placement as such.\n                if (currSegment->maxSpaceLimit < CHANNEL_MAX)\n                {\n                    vs.push_back(new Variable(channelRightID,\n                                currSegment->maxSpaceLimit, fixedWeight));\n                    cs.push_back(new Constraint(vs[index], vs[vs.size() - 1],\n                                0.0));\n                }\n            }\n\n            prevVars.push_back(&(*currSegment));\n        }\n\n        std::list<PotentialSegmentConstraint> potentialConstraints;\n        if (justUnifying)\n        {\n            for (std::list<size_t>::iterator curr = freeIndexes.begin();\n                    curr != freeIndexes.end(); ++curr)\n            {\n                for (std::list<size_t>::iterator curr2 = curr;\n                        curr2 != freeIndexes.end(); ++curr2)\n                {\n                    if (curr == curr2)\n                    {\n                        continue;\n                    }\n                    potentialConstraints.push_back(\n                            PotentialSegmentConstraint(*curr, *curr2, vs));\n                }\n            }\n        }\n#ifdef NUDGE_DEBUG\n        for (unsigned i = 0;i < vs.size(); ++i)\n        {\n            fprintf(stderr, \"-vs[%d]=%f\\n\", i, vs[i]->desiredPosition);\n        }\n#endif\n        // Repeatedly try solving this.  There are two cases:\n        //  -  When Unifying, we greedily place as many free segments as\n        //     possible at the same positions, that way they have more\n        //     accurate nudging orders determined for them in the Nudging\n        //     stage.\n        //  -  When Nudging, if we can't fit all the segments with the\n        //     default nudging distance we try smaller separation\n        //     distances till we find a solution that is satisfied.\n        bool justAddedConstraint = false;\n        bool satisfied;\n\n        typedef std::pair<size_t, size_t> UnsatisfiedRange;\n        std::list<UnsatisfiedRange> unsatisfiedRanges;\n        do\n        {\n            IncSolver f(vs, cs);\n            f.solve();\n\n            // Determine if the problem was satisfied.\n            satisfied = true;\n            for (size_t i = 0; i < vs.size(); ++i)\n            {\n                // For each variable...\n                if (vs[i]->id != freeSegmentID)\n                {\n                    // If it is a fixed segment (should stay still)...\n                    if (fabs(vs[i]->finalPosition -\n                            vs[i]->desiredPosition) > 0.0001)\n                    {\n                        // and it is not at it's desired position, then\n                        // we consider the problem to be unsatisfied.\n                        satisfied = false;\n\n                        // We record ranges of unsatisfied variables based on\n                        // the channel edges.\n                        if (vs[i]->id == channelLeftID)\n                        {\n                            // This is the left-hand-side of a channel.\n                            if (unsatisfiedRanges.empty() ||\n                                    (unsatisfiedRanges.back().first !=\n                                    unsatisfiedRanges.back().second))\n                            {\n                                // There are no existing unsatisfied ranges,\n                                // or there are but they are a valid range\n                                // (we've encountered the right-hand channel\n                                // edges already).\n                                // So, start a new unsatisfied range.\n                                unsatisfiedRanges.push_back(\n                                        std::make_pair(i, i + 1));\n                            }\n                        }\n                        else if (vs[i]->id == channelRightID)\n                        {\n                            // This is the right-hand-side of a channel.\n                            if (unsatisfiedRanges.empty())\n                            {\n                                // There are no existing unsatisfied ranges,\n                                // so start a new unsatisfied range.\n                                // We are looking at a unsatisfied right side\n                                // where the left side was satisfied, so the\n                                // range begins at the previous variable\n                                // which should be a left channel side.\n                                COLA_ASSERT(i > 0);\n                                COLA_ASSERT(vs[i - 1]->id == channelLeftID);\n                                unsatisfiedRanges.push_back(\n                                        std::make_pair(i - 1, i));\n                            }\n                            else\n                            {\n                                // Expand the existing range to include index.\n                                unsatisfiedRanges.back().second = i;\n                            }\n                        }\n                        else if (vs[i]->id == fixedSegmentID)\n                        {\n                            // Fixed connector segments can also start and\n                            // extend unsatisfied variable ranges.\n                            if (unsatisfiedRanges.empty())\n                            {\n                                // There are no existing unsatisfied ranges,\n                                // so start a new unsatisfied range.\n                                unsatisfiedRanges.push_back(\n                                        std::make_pair(i, i));\n                            }\n                            else\n                            {\n                                // Expand the existing range to include index.\n                                unsatisfiedRanges.back().second = i;\n                            }\n                        }\n                    }\n                }\n            }\n\n#ifdef NUDGE_DEBUG\n            if (!satisfied)\n            {\n                fprintf(stderr,\"unsatisfied\\n\");\n            }\n#endif\n\n            if (justUnifying)\n            {\n                // When we're centring, we'd like to greedily place as many\n                // segments as possible at the same positions, that way they\n                // have more accurate nudging orders determined for them.\n                //\n                // We do this by taking pairs of adjoining free segments and\n                // attempting to constrain them to have the same position,\n                // starting from the closest up to the furthest.\n\n                if (justAddedConstraint)\n                {\n                    COLA_ASSERT(potentialConstraints.size() > 0);\n                    if (!satisfied)\n                    {\n                        // We couldn't satisfy the problem with the added\n                        // potential constraint, so we can't position these\n                        // segments together.  Roll back.\n                        potentialConstraints.pop_front();\n                        delete cs.back();\n                        cs.pop_back();\n                    }\n                    else\n                    {\n                        // We could position these two segments together.\n                        PotentialSegmentConstraint& pc =\n                                potentialConstraints.front();\n\n                        // Rewrite the indexes of these two variables to\n                        // one, so we need not worry about redundant\n                        // equality constraints.\n                        for (std::list<PotentialSegmentConstraint>::iterator\n                                it = potentialConstraints.begin();\n                                it != potentialConstraints.end(); ++it)\n                        {\n                            it->rewriteIndex(pc.index1, pc.index2);\n                        }\n                        potentialConstraints.pop_front();\n                    }\n                }\n                potentialConstraints.sort();\n                justAddedConstraint = false;\n\n                // Remove now invalid potential segment constraints.\n                // This could have been caused by the variable rewriting.\n                while (!potentialConstraints.empty() &&\n                       !potentialConstraints.front().stillValid())\n                {\n                    potentialConstraints.pop_front();\n                }\n\n                if (!potentialConstraints.empty())\n                {\n                    // We still have more possibilities to consider.\n                    // Create a constraint for this, add it, and mark as\n                    // unsatisfied, so the problem gets re-solved.\n                    PotentialSegmentConstraint& pc =\n                            potentialConstraints.front();\n                    COLA_ASSERT(pc.index1 != pc.index2);\n                    cs.push_back(new Constraint(vs[pc.index1], vs[pc.index2],\n                            0, true));\n                    satisfied = false;\n                    justAddedConstraint = true;\n                }\n            }\n            else\n            {\n                if (!satisfied)\n                {\n                    COLA_ASSERT(unsatisfiedRanges.size() > 0);\n                    // Reduce the separation distance.\n                    sepDist -= (baseSepDist / reductionSteps);\n#ifndef NDEBUG\n                    for (std::list<UnsatisfiedRange>::iterator it =\n                            unsatisfiedRanges.begin();\n                            it != unsatisfiedRanges.end(); ++it)\n                    {\n                        COLA_ASSERT(vs[it->first]->id != freeSegmentID);\n                        COLA_ASSERT(vs[it->second]->id != freeSegmentID);\n                    }\n#endif\n#ifdef NUDGE_DEBUG\n                    for (std::list<UnsatisfiedRange>::iterator it =\n                            unsatisfiedRanges.begin();\n                            it != unsatisfiedRanges.end(); ++it)\n                    {\n                        fprintf(stderr, \"unsatisfiedVarRange(%ld, %ld)\\n\",\n                                it->first, it->second);\n                    }\n                    fprintf(stderr, \"unsatisfied, trying %g\\n\", sepDist);\n#endif\n                    // And rewrite all the gap constraints to have the new\n                    // reduced separation distance.\n                    bool withinUnsatisfiedGroup = false;\n                    for (Constraints::iterator cIt = cs.begin();\n                            cIt != cs.end(); ++cIt)\n                    {\n                        UnsatisfiedRange& range = unsatisfiedRanges.front();\n                        Constraint *constraint = *cIt;\n\n                        if (constraint->left == vs[range.first])\n                        {\n                            // Entered an unsatisfied range of variables.\n                            withinUnsatisfiedGroup = true;\n                        }\n\n                        if (withinUnsatisfiedGroup && (constraint->gap > 0))\n                        {\n                            // Rewrite constraints in unsatisfied ranges\n                            // that have a non-zero gap.\n                            constraint->gap = sepDist;\n                        }\n\n                        if (constraint->right == vs[range.second])\n                        {\n                            // Left an unsatisfied range of variables.\n                            withinUnsatisfiedGroup = false;\n                            unsatisfiedRanges.pop_front();\n                            if (unsatisfiedRanges.empty())\n                            {\n                                // And there are no more unsatisfied variables.\n                                break;\n                            }\n                        }\n                    }\n                }\n            }\n        }\n        while (!satisfied && (sepDist > 0.0001));\n\n        if (satisfied)\n        {\n#ifdef NUDGE_DEBUG\n            fprintf(stderr,\"satisfied at nudgeDist = %g\\n\", sepDist);\n#endif\n            for (ShiftSegmentList::iterator currSegment = currentRegion.begin();\n                    currSegment != currentRegion.end(); ++currSegment)\n            {\n                NudgingShiftSegment *segment =\n                        static_cast<NudgingShiftSegment *> (*currSegment);\n\n                segment->updatePositionsFromSolver(justUnifying);\n            }\n        }\n#ifdef NUDGE_DEBUG\n        for(unsigned i=0;i<vs.size();i++) {\n            fprintf(stderr, \"+vs[%d]=%f\\n\",i,vs[i]->finalPosition);\n        }\n#endif\n#ifdef NUDGE_DEBUG_SVG\n        for (ShiftSegmentList::iterator currSegment = currentRegion.begin();\n                currSegment != currentRegion.end(); ++currSegment)\n        {\n            NudgingShiftSegment *segment =\n                    static_cast<NudgingShiftSegment *> (*currSegment);\n\n            fprintf(stdout, \"<line style=\\\"stroke: #00F;\\\" x1=\\\"%g\\\" \"\n                    \"y1=\\\"%g\\\" x2=\\\"%g\\\" y2=\\\"%g\\\" />\\n\",\n                    segment->lowPoint()[XDIM], segment->variable->finalPosition,\n                    segment->highPoint()[XDIM], segment->variable->finalPosition);\n        }\n#endif\n        for_each(currentRegion.begin(), currentRegion.end(), delete_object());\n        for_each(vs.begin(), vs.end(), delete_object());\n        for_each(cs.begin(), cs.end(), delete_object());\n    }\n}\n\n\nvoid ImproveOrthogonalRoutes::simplifyOrthogonalRoutes(void)\n{\n    // Simplify routes.\n    for (ConnRefList::const_iterator curr = m_router->connRefs.begin();\n            curr != m_router->connRefs.end(); ++curr)\n    {\n        if ((*curr)->routingType() != ConnType_Orthogonal)\n        {\n            continue;\n        }\n        (*curr)->set_route((*curr)->displayRoute().simplify());\n    }\n}\n\n\n// Populates m_point_orders and m_shared_path_connectors_with_common_endpoints.\nvoid ImproveOrthogonalRoutes::buildOrthogonalNudgingOrderInfo(void)\n{\n    // Simplify routes.\n    simplifyOrthogonalRoutes();\n\n    int crossingsN = 0;\n\n    bool buildSharedPathInfo = false;\n    if (!m_router->routingOption(Avoid::nudgeSharedPathsWithCommonEndPoint) &&\n            m_shared_path_connectors_with_common_endpoints.empty())\n    {\n        // We're not going to nudge apart shared paths with common ends so we\n        // will need to store information about this during the crossing\n        // detection.\n        buildSharedPathInfo = true;\n    }\n\n\n    // Make a vector of the ConnRefList, for convenience.\n    ConnRefVector connRefs(m_router->connRefs.begin(), m_router->connRefs.end());\n\n    // Make a temporary copy of all the connector displayRoutes.\n    RouteVector connRoutes(connRefs.size());\n    for (size_t ind = 0; ind < connRefs.size(); ++ind)\n    {\n        connRoutes[ind] = connRefs[ind]->displayRoute();\n    }\n\n    // Do segment splitting.\n    for (size_t ind1 = 0; ind1 < connRefs.size(); ++ind1)\n    {\n        ConnRef *conn = connRefs[ind1];\n        if (conn->routingType() != ConnType_Orthogonal)\n        {\n            continue;\n        }\n\n        for (size_t ind2 = 0; ind2 < connRefs.size(); ++ind2)\n        {\n            if (ind1 == ind2)\n            {\n                continue;\n            }\n\n            ConnRef *conn2 = connRefs[ind2];\n            if (conn2->routingType() != ConnType_Orthogonal)\n            {\n                continue;\n            }\n\n            Avoid::Polygon& route = connRoutes[ind1];\n            Avoid::Polygon& route2 = connRoutes[ind2];\n            splitBranchingSegments(route2, true, route);\n        }\n    }\n\n    for (size_t ind1 = 0; ind1 < connRefs.size(); ++ind1)\n    {\n        ConnRef *conn = connRefs[ind1];\n        if (conn->routingType() != ConnType_Orthogonal)\n        {\n            continue;\n        }\n\n        for (size_t ind2 = ind1 + 1; ind2 < connRefs.size(); ++ind2)\n        {\n            ConnRef *conn2 = connRefs[ind2];\n            if (conn2->routingType() != ConnType_Orthogonal)\n            {\n                continue;\n            }\n\n            Avoid::Polygon& route = connRoutes[ind1];\n            Avoid::Polygon& route2 = connRoutes[ind2];\n            int crossings = 0;\n            unsigned int crossingFlags = 0;\n            ConnectorCrossings cross(route2, true, route, conn2, conn);\n            cross.pointOrders = &m_point_orders;\n            for (size_t i = 1; i < route.size(); ++i)\n            {\n                const bool finalSegment = ((i + 1) == route.size());\n                cross.countForSegment(i, finalSegment);\n\n                crossings += cross.crossingCount;\n                crossingFlags |= cross.crossingFlags;\n            }\n            if (crossings > 0)\n            {\n                crossingsN += crossings;\n            }\n\n            if (buildSharedPathInfo &&\n                    (crossingFlags & CROSSING_SHARES_PATH_AT_END))\n            {\n                // Record if these two connectors have a shared path with a\n                // common end point.\n                m_shared_path_connectors_with_common_endpoints.insert(\n                        UnsignedPair(conn->id(), conn2->id()));\n            }\n        }\n    }\n}\n\n\nextern void improveOrthogonalRoutes(Router *router)\n{\n    ImproveOrthogonalRoutes improver(router);\n    improver.execute();\n}\n\n\n}\n"
  },
  {
    "path": "cola/libavoid/orthogonal.h",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libavoid - Fast, Incremental, Object-avoiding Line Router\n *\n * Copyright (C) 2009-2011  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * Licensees holding a valid commercial license may use this file in\n * accordance with the commercial license agreement provided with the \n * library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  \n *\n * Author(s):   Michael Wybrow\n*/\n\n\n#ifndef AVOID_ORTHOGONAL_H\n#define AVOID_ORTHOGONAL_H\n\nnamespace Avoid {\n\nclass Router;\n\nextern void generateStaticOrthogonalVisGraph(Router *router);\nextern void improveOrthogonalRoutes(Router *router);\n\n\n}\n\n#endif\n"
  },
  {
    "path": "cola/libavoid/router.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libavoid - Fast, Incremental, Object-avoiding Line Router\n *\n * Copyright (C) 2004-2014  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * Licensees holding a valid commercial license may use this file in\n * accordance with the commercial license agreement provided with the \n * library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  \n *\n * Author(s):  Michael Wybrow\n*/\n\n\n#include <algorithm>\n#include <cmath>\n#include <cfloat>\n#include <clocale>\n\n#include \"libavoid/shape.h\"\n#include \"libavoid/router.h\"\n#include \"libavoid/visibility.h\"\n#include \"libavoid/connector.h\"\n#include \"libavoid/junction.h\"\n#include \"libavoid/viscluster.h\"\n#include \"libavoid/connend.h\"\n#include \"libavoid/debug.h\"\n#include \"libavoid/orthogonal.h\"\n#include \"libavoid/assertions.h\"\n#include \"libavoid/connectionpin.h\"\n\n\nnamespace Avoid {\n\n\nRouter::Router(const unsigned int flags)\n    : visOrthogGraph(),\n      PartialTime(false),\n      SimpleRouting(false),\n      ClusteredRouting(true),\n      // Poly-line algorithm options:\n      IgnoreRegions(true),\n      UseLeesAlgorithm(true),\n      InvisibilityGrph(true),\n      // General algorithm options:\n      SelectiveReroute(true),\n      PartialFeedback(false),\n      RubberBandRouting(false),\n      // Instrumentation:\n      st_checked_edges(0),\n      m_largest_assigned_id(0),\n      m_consolidate_actions(true),\n      m_currently_calling_destructors(false),\n      m_topology_addon(new TopologyAddonInterface()),\n      // Mode options:\n      m_allows_polyline_routing(false),\n      m_allows_orthogonal_routing(false),\n      m_static_orthogonal_graph_invalidated(true),\n      m_in_crossing_rerouting_stage(false),\n      m_settings_changes(false),\n      m_debug_handler(nullptr)\n{\n    // At least one of the Routing modes must be set.\n    COLA_ASSERT(flags & (PolyLineRouting | OrthogonalRouting));\n\n    if (flags & PolyLineRouting)\n    {\n        m_allows_polyline_routing = true;\n    }\n    if (flags & OrthogonalRouting)\n    {\n        m_allows_orthogonal_routing = true;\n    }\n\n    for (size_t p = 0; p < lastRoutingParameterMarker; ++p)\n    {\n        m_routing_parameters[p] = 0.0;\n    }\n    m_routing_parameters[segmentPenalty] = 10;\n    m_routing_parameters[clusterCrossingPenalty] = 4000;\n    m_routing_parameters[idealNudgingDistance] = 4.0;\n\n    m_routing_options[nudgeOrthogonalSegmentsConnectedToShapes] = false;\n    m_routing_options[improveHyperedgeRoutesMovingJunctions] = true;\n    m_routing_options[penaliseOrthogonalSharedPathsAtConnEnds] = false;\n    m_routing_options[nudgeOrthogonalTouchingColinearSegments] = false;\n    m_routing_options[performUnifyingNudgingPreprocessingStep] = true;\n    m_routing_options[improveHyperedgeRoutesMovingAddingAndDeletingJunctions] =\n            false;\n    m_routing_options[nudgeSharedPathsWithCommonEndPoint] = true;\n\n    m_hyperedge_improver.setRouter(this);\n    m_hyperedge_rerouter.setRouter(this);\n}\n\n\nRouter::~Router()\n{\n    m_currently_calling_destructors = true;\n\n    // Delete remaining connectors.\n    ConnRefList::iterator conn = connRefs.begin();\n    while (conn != connRefs.end())\n    {\n        db_printf(\"Deleting connector %u in ~Router()\\n\", (*conn)->id());\n        delete *conn;\n        conn = connRefs.begin();\n    }\n\n    // Remove remaining obstacles (shapes and junctions).\n    ObstacleList::iterator obstacle =  m_obstacles.begin();\n    while (obstacle != m_obstacles.end())\n    {\n        Obstacle *obstaclePtr = *obstacle;\n        ShapeRef *shape = dynamic_cast<ShapeRef *> (obstaclePtr);\n        db_printf(\"Deleting %s %u in ~Router()\\n\", \n                (shape) ? \"shape\" : \"junction\", obstaclePtr->id());\n        if (obstaclePtr->isActive())\n        {\n            obstaclePtr->removeFromGraph();\n            obstaclePtr->makeInactive();\n        }\n        delete obstaclePtr;\n        obstacle = m_obstacles.begin();\n    }\n    m_currently_calling_destructors = false;\n\n    // Cleanup orphaned orthogonal graph vertices.\n    destroyOrthogonalVisGraph();\n\n    COLA_ASSERT(m_obstacles.size() == 0);\n    COLA_ASSERT(connRefs.size() == 0);\n    COLA_ASSERT(visGraph.size() == 0);\n\n    delete m_topology_addon;\n}\n\nvoid Router::setDebugHandler(DebugHandler *handler)\n{\n    m_debug_handler = handler;\n}\n\nDebugHandler *Router::debugHandler(void) const\n{\n    return m_debug_handler;\n}\n\nShapeRef *Router::shapeContainingPoint(const Point& point)\n{\n    // Count points on the border as being inside.\n    bool countBorder = true;\n\n    // Compute enclosing shapes.\n    ObstacleList::const_iterator finish = m_obstacles.end();\n    for (ObstacleList::const_iterator i = m_obstacles.begin(); i != finish; ++i)\n    {\n        ShapeRef *shape = dynamic_cast<ShapeRef *>(*i);\n        if (shape && inPoly(shape->routingPolygon(), point, countBorder))\n        {\n            return shape;\n        }\n    }\n    return nullptr;\n}\n\nvoid Router::modifyConnector(ConnRef *conn, const unsigned int type,\n        const ConnEnd& connEnd, bool connPinMoveUpdate)\n{\n    ActionInfo modInfo(ConnChange, conn);\n    \n    ActionInfoList::iterator found = \n            find(actionList.begin(), actionList.end(), modInfo);\n    if (found == actionList.end())\n    {\n        // Matching action not found, so add.\n        modInfo.conns.push_back(std::make_pair(type, connEnd));\n        actionList.push_back(modInfo);\n    }\n    else\n    {\n        // Update the found action as necessary.\n        found->addConnEndUpdate(type, connEnd, connPinMoveUpdate);\n    }\n\n    if (!m_consolidate_actions)\n    {\n        processTransaction();\n    }\n}\n\n\nvoid Router::modifyConnector(ConnRef *conn)\n{\n    ActionInfo modInfo(ConnChange, conn);\n    \n    ActionInfoList::iterator found = \n            find(actionList.begin(), actionList.end(), modInfo);\n    if (found == actionList.end())\n    {\n        actionList.push_back(modInfo);\n    }\n\n    if (!m_consolidate_actions)\n    {\n        processTransaction();\n    }\n}\n\n\nvoid Router::modifyConnectionPin(ShapeConnectionPin *pin)\n{\n    ActionInfo modInfo(ConnectionPinChange, pin);\n    \n    ActionInfoList::iterator found = \n            find(actionList.begin(), actionList.end(), modInfo);\n    if (found == actionList.end())\n    {\n        actionList.push_back(modInfo);\n    }\n\n    if (!m_consolidate_actions)\n    {\n        processTransaction();\n    }\n}\n\n\nvoid Router::removeObjectFromQueuedActions(const void *object)\n{\n    for (ActionInfoList::iterator curr = actionList.begin();\n            curr != actionList.end(); )\n    {\n        if (curr->objPtr == object)\n        {\n            curr = actionList.erase(curr);\n        }\n        else\n        {\n            ++curr;\n        }\n    }\n}\n\n\nvoid Router::addShape(ShapeRef *shape)\n{\n    // There shouldn't be remove events or move events for the same shape\n    // already in the action list.\n    // XXX: Possibly we could handle this by ordering them intelligently.\n    COLA_ASSERT(find(actionList.begin(), actionList.end(), \n                ActionInfo(ShapeRemove, shape)) == actionList.end());\n    COLA_ASSERT(find(actionList.begin(), actionList.end(), \n                ActionInfo(ShapeMove, shape)) == actionList.end());\n\n    ActionInfo addInfo(ShapeAdd, shape);\n    \n    ActionInfoList::iterator found = \n            find(actionList.begin(), actionList.end(), addInfo);\n    if (found == actionList.end())\n    {\n        actionList.push_back(addInfo);\n    }\n\n    if (!m_consolidate_actions)\n    {\n        processTransaction();\n    }\n}\n\n\nvoid Router::deleteShape(ShapeRef *shape)\n{\n    // There shouldn't be add events events for the same shape already \n    // in the action list.\n    // XXX: Possibly we could handle this by ordering them intelligently.\n    COLA_ASSERT(find(actionList.begin(), actionList.end(), \n                ActionInfo(ShapeAdd, shape)) == actionList.end());\n\n    // Delete any ShapeMove entries for this shape in the action list.\n    ActionInfoList::iterator found = find(actionList.begin(), \n            actionList.end(), ActionInfo(ShapeMove, shape));\n    if (found != actionList.end())\n    {\n        actionList.erase(found);\n    }\n\n    // Add the ShapeRemove entry.\n    ActionInfo remInfo(ShapeRemove, shape);\n    found = find(actionList.begin(), actionList.end(), remInfo);\n    if (found == actionList.end())\n    {\n        actionList.push_back(remInfo);\n    }\n\n    if (!m_consolidate_actions)\n    {\n        processTransaction();\n    }\n}\n\n\nvoid Router::deleteConnector(ConnRef *connector)\n{\n    m_currently_calling_destructors = true;\n    delete connector;\n    m_currently_calling_destructors = false;\n}\n\nvoid Router::moveShape(ShapeRef *shape, const double xDiff, const double yDiff)\n{\n    ActionInfo moveInfo(ShapeMove, shape, Polygon(), false);\n    ActionInfoList::iterator found =\n            find(actionList.begin(), actionList.end(), moveInfo);\n\n    Polygon newPoly;\n    if (found != actionList.end())\n    {\n        // The shape already has a queued move, so use that shape position.\n        newPoly = found->newPoly;\n    }\n    else\n    {\n        // Just use the existing position.\n        newPoly = shape->polygon();\n    }\n    newPoly.translate(xDiff, yDiff);\n\n    moveShape(shape, newPoly);\n}\n\n\nvoid Router::markAllObstaclesAsMoved(void)\n{\n    for (ObstacleList::iterator obstacleIt = m_obstacles.begin();\n            obstacleIt != m_obstacles.end(); ++obstacleIt)\n    {\n        ShapeRef *shape = dynamic_cast<ShapeRef *> (*obstacleIt);\n        JunctionRef *junction = dynamic_cast<JunctionRef *> (*obstacleIt);\n        if (shape)\n        {\n            moveShape(shape, 0, 0);\n        }\n        else if (junction)\n        {\n            moveJunction(junction, 0, 0);\n        }\n    }\n}\n\nvoid Router::moveShape(ShapeRef *shape, const Polygon& newPoly, \n        const bool first_move)\n{\n    // There shouldn't be remove events or add events for the same shape\n    // already in the action list.\n    // XXX: Possibly we could handle this by ordering them intelligently.\n    COLA_ASSERT(find(actionList.begin(), actionList.end(), \n                ActionInfo(ShapeRemove, shape)) == actionList.end());\n    \n    ActionInfoList::iterator found = find(actionList.begin(), \n            actionList.end(), ActionInfo(ShapeAdd, shape));\n    if (found != actionList.end())\n    {\n        // The Add is enough, no need for the Move action too.\n        // The shape will be added with it's existing polygon,\n        // so set this to be the newPoly passed for the move.\n        found->shape()->setNewPoly(newPoly);\n        return;\n    }\n\n    ActionInfo moveInfo(ShapeMove, shape, newPoly, first_move);\n    // Sanely cope with the case where the user requests moving the same\n    // shape multiple times before rerouting connectors.\n    found = find(actionList.begin(), actionList.end(), moveInfo);\n\n    if (found != actionList.end())\n    {\n        // Just update the ActionInfo with the second polygon, but\n        // leave the firstMove setting alone.\n        found->newPoly = newPoly;\n    }\n    else \n    {\n        actionList.push_back(moveInfo);\n    }\n\n    if (!m_consolidate_actions)\n    {\n        processTransaction();\n    }\n}\n\n\nvoid Router::setStaticGraphInvalidated(const bool invalidated)\n{\n    m_static_orthogonal_graph_invalidated = invalidated;\n}\n\n\nvoid Router::destroyOrthogonalVisGraph(void)\n{\n    // Remove orthogonal visibility graph edges.\n    visOrthogGraph.clear();\n\n    // Remove the now orphaned vertices.\n    VertInf *curr = vertices.shapesBegin();\n    while (curr)\n    {\n        if (curr->orphaned() && (curr->id == dummyOrthogID))\n        {\n            VertInf *following = vertices.removeVertex(curr);\n            delete curr;\n            curr = following;\n            continue;\n        }\n        curr = curr->lstNext;\n    }\n}\n\n\nvoid Router::regenerateStaticBuiltGraph(void)\n{\n    // Here we do talks involved in updating the static-built visibility \n    // graph (if necessary) before we do any routing.\n    if (m_static_orthogonal_graph_invalidated)\n    {\n        if (m_allows_orthogonal_routing)\n        {\n            destroyOrthogonalVisGraph();\n\n            TIMER_START(this, tmOrthogGraph);\n            // Regenerate a new visibility graph.\n            generateStaticOrthogonalVisGraph(this);\n            \n            TIMER_STOP(this);\n        }\n        m_static_orthogonal_graph_invalidated = false;\n    }\n}\n\n\nbool Router::transactionUse(void) const\n{\n    return m_consolidate_actions;\n}\n\n\nvoid Router::setTransactionUse(const bool transactions)\n{\n    m_consolidate_actions = transactions;\n}\n\n\n// Processes the action list.\nvoid Router::processActions(void)\n{\n    bool notPartialTime = !(PartialFeedback && PartialTime);\n    bool seenShapeMovesOrDeletes = false;\n\n    m_transaction_start_time = clock();\n    m_abort_transaction = false;\n\n    std::list<unsigned int> deletedObstacles;\n    actionList.sort();\n    ActionInfoList::iterator curr;\n    ActionInfoList::iterator finish = actionList.end();\n    for (curr = actionList.begin(); curr != finish; ++curr)\n    {\n        ActionInfo& actInf = *curr;\n        if (!((actInf.type == ShapeRemove) || (actInf.type == ShapeMove) ||\n              (actInf.type == JunctionRemove) || (actInf.type == JunctionMove)))\n        {\n            // Not a move or remove action, so don't do anything.\n            continue;\n        }\n        seenShapeMovesOrDeletes = true;\n\n        Obstacle *obstacle = actInf.obstacle();\n        ShapeRef *shape = actInf.shape();\n        JunctionRef *junction = actInf.junction();\n        bool isMove = (actInf.type == ShapeMove) ||\n                (actInf.type == JunctionMove);;\n        bool first_move = actInf.firstMove;\n\n        unsigned int pid = obstacle->id();\n\n        // o  Remove entries related to this shape's vertices\n        obstacle->removeFromGraph();\n\n        if (SelectiveReroute && (!isMove || notPartialTime || first_move))\n        {\n            markPolylineConnectorsNeedingReroutingForDeletedObstacle(obstacle);\n        }\n\n        adjustContainsWithDel(pid);\n\n        if (isMove)\n        {\n            if (shape)\n            {\n                shape->moveAttachedConns(actInf.newPoly);\n            }\n            else if (junction)\n            {\n                junction->moveAttachedConns(actInf.newPosition);\n            }\n        }\n\n        // Ignore this shape for visibility.\n        // XXX: We don't really need to do this if we're not using Partial\n        //      Feedback.  Without this the blocked edges still route\n        //      around the shape until it leaves the connector.\n        obstacle->makeInactive();\n\n        if (!isMove)\n        {\n            // Free deleted obstacle.\n            m_currently_calling_destructors = true;\n            deletedObstacles.push_back(obstacle->id());\n            delete obstacle;\n            m_currently_calling_destructors = false;\n        }\n    }\n\n    if (seenShapeMovesOrDeletes && m_allows_polyline_routing)\n    {\n        if (InvisibilityGrph)\n        {\n            // Check edges for obstacles that were moved or removed.\n            for (curr = actionList.begin(); curr != finish; ++curr)\n            {\n                ActionInfo& actInf = *curr;\n                if ((actInf.type == ShapeMove) || (actInf.type == JunctionMove))\n                {\n                    // o  Check all edges that were blocked by moved obstacle.\n                    checkAllBlockedEdges(actInf.obstacle()->id());\n                }\n            }\n\n            for (std::list<unsigned int>::iterator it = deletedObstacles.begin();\n                     it != deletedObstacles.end(); ++it)\n            {\n                // o  Check all edges that were blocked by deleted obstacle.\n                checkAllBlockedEdges(*it);\n            }\n        }\n        else\n        {\n            // check all edges not in graph\n            checkAllMissingEdges();\n        }\n    }\n\n    for (curr = actionList.begin(); curr != finish; ++curr)\n    {\n        ActionInfo& actInf = *curr;\n        if (!((actInf.type == ShapeAdd) || (actInf.type == ShapeMove) ||\n              (actInf.type == JunctionAdd) || (actInf.type == JunctionMove)))\n        {\n            // Not a move or add action, so don't do anything.\n            continue;\n        }\n\n        Obstacle *obstacle = actInf.obstacle();\n        ShapeRef *shape = actInf.shape();\n        JunctionRef *junction = actInf.junction();\n        Polygon& newPoly = actInf.newPoly;\n        bool isMove = (actInf.type == ShapeMove) ||\n                (actInf.type == JunctionMove);\n\n        unsigned int pid = obstacle->id();\n\n        // Restore this shape for visibility.\n        obstacle->makeActive();\n\n        if (isMove)\n        {\n            if (shape)\n            {\n                shape->setNewPoly(newPoly);\n            }\n            else\n            {\n                junction->setPosition(actInf.newPosition);\n            }\n        }\n        const Polygon& shapePoly = obstacle->routingPolygon();\n\n        adjustContainsWithAdd(shapePoly, pid);\n\n        if (m_allows_polyline_routing)\n        {\n            // o  Check all visibility edges to see if this one shape\n            //    blocks them.\n            if (!isMove || notPartialTime)\n            {\n                newBlockingShape(shapePoly, pid);\n            }\n\n            // o  Calculate visibility for the new vertices.\n            if (UseLeesAlgorithm)\n            {\n                obstacle->computeVisibilitySweep();\n            }\n            else\n            {\n                obstacle->computeVisibilityNaive();\n            }\n            obstacle->updatePinPolyLineVisibility();\n        }\n    }\n\n    // Update connector endpoints.\n    for (curr = actionList.begin(); curr != finish; ++curr)\n    {\n        ActionInfo& actInf = *curr;\n        if (actInf.type != ConnChange)\n        {\n            continue;\n        }\n        for (ConnUpdateList::iterator conn = actInf.conns.begin();\n                conn != actInf.conns.end(); ++conn)\n        {\n            actInf.conn()->updateEndPoint(conn->first, conn->second);\n        }\n    }\n    // Clear the actionList.\n    actionList.clear();\n}\n\nbool Router::processTransaction(void)\n{\n    // If SimpleRouting, then don't update here.\n    if ((actionList.empty() && (m_hyperedge_rerouter.count() == 0) &&\n         (m_settings_changes == false)) || SimpleRouting)\n    {\n        return false;\n    }\n    m_settings_changes = false;\n\n    processActions();\n\n    m_static_orthogonal_graph_invalidated = true;\n    rerouteAndCallbackConnectors();\n\n    return true;\n}\n\n\nvoid Router::addJunction(JunctionRef *junction)\n{\n    // There shouldn't be remove events or move events for the same junction\n    // already in the action list.\n    // XXX: Possibly we could handle this by ordering them intelligently.\n    COLA_ASSERT(find(actionList.begin(), actionList.end(), \n                ActionInfo(JunctionRemove, junction)) == actionList.end());\n    COLA_ASSERT(find(actionList.begin(), actionList.end(), \n                ActionInfo(JunctionMove, junction)) == actionList.end());\n\n    ActionInfo addInfo(JunctionAdd, junction);\n    \n    ActionInfoList::iterator found = \n            find(actionList.begin(), actionList.end(), addInfo);\n    if (found == actionList.end())\n    {\n        actionList.push_back(addInfo);\n    }\n\n    if (!m_consolidate_actions)\n    {\n        processTransaction();\n    }\n}\n\n\nvoid Router::deleteJunction(JunctionRef *junction)\n{\n    // There shouldn't be add events events for the same junction already \n    // in the action list.\n    // XXX: Possibly we could handle this by ordering them intelligently.\n    COLA_ASSERT(find(actionList.begin(), actionList.end(), \n                ActionInfo(JunctionAdd, junction)) == actionList.end());\n\n    // Delete any ShapeMove entries for this shape in the action list.\n    ActionInfoList::iterator found = find(actionList.begin(), \n            actionList.end(), ActionInfo(JunctionMove, junction));\n    if (found != actionList.end())\n    {\n        actionList.erase(found);\n    }\n\n    // Add the ShapeRemove entry.\n    ActionInfo remInfo(JunctionRemove, junction);\n    found = find(actionList.begin(), actionList.end(), remInfo);\n    if (found == actionList.end())\n    {\n        actionList.push_back(remInfo);\n    }\n\n    if (!m_consolidate_actions)\n    {\n        processTransaction();\n    }\n}\n\n\nvoid Router::moveJunction(JunctionRef *junction, const double xDiff, \n        const double yDiff)\n{\n    ActionInfo moveInfo(JunctionMove, junction, Point());\n    ActionInfoList::iterator found =\n            find(actionList.begin(), actionList.end(), moveInfo);\n\n    Point newPosition;\n    if (found != actionList.end())\n    {\n        // The junction already has a queued move, so use that position.\n        newPosition = found->newPosition;\n    }\n    else\n    {\n        // Just use the existing position.\n        newPosition = junction->position();\n    }\n    newPosition.x += xDiff;\n    newPosition.y += yDiff;\n\n    moveJunction(junction, newPosition);\n}\n\n\nvoid Router::moveJunction(JunctionRef *junction, const Point& newPosition)\n{\n    // There shouldn't be remove events or add events for the same junction\n    // already in the action list.\n    // XXX: Possibly we could handle this by ordering them intelligently.\n    COLA_ASSERT(find(actionList.begin(), actionList.end(), \n                ActionInfo(JunctionRemove, junction)) == actionList.end());\n    \n    ActionInfoList::iterator found = find(actionList.begin(), \n            actionList.end(), ActionInfo(JunctionAdd, junction));\n    if (found != actionList.end())\n    {\n        // The Add is enough, no need for the Move action too.\n        // The junction will be added with the new position.\n        found->junction()->setPosition(newPosition);\n        return;\n    }\n\n    ActionInfo moveInfo(JunctionMove, junction, newPosition);\n    // Sanely cope with the case where the user requests moving the same\n    // shape multiple times before rerouting connectors.\n    found = find(actionList.begin(), actionList.end(), moveInfo);\n\n    if (found != actionList.end())\n    {\n        // Just update the ActionInfo with the second position.\n        found->newPosition = newPosition;\n    }\n    else \n    {\n        actionList.push_back(moveInfo);\n    }\n\n    if (!m_consolidate_actions)\n    {\n        processTransaction();\n    }\n}\n\nvoid Router::addCluster(ClusterRef *cluster)\n{\n    cluster->makeActive();\n    \n    unsigned int pid = cluster->id();\n    ReferencingPolygon& poly = cluster->polygon();\n\n    adjustClustersWithAdd(poly, pid);\n}\n\n\nvoid Router::deleteCluster(ClusterRef *cluster)\n{\n    cluster->makeInactive();\n    \n    unsigned int pid = cluster->id();\n    \n    adjustClustersWithDel(pid);\n}\n\n\nunsigned int Router::newObjectId(void) const\n{\n    return m_largest_assigned_id + 1;\n}\n\n\nunsigned int Router::assignId(const unsigned int suggestedId)\n{\n    // If the suggestedId is zero, then we assign the object the next\n    // smallest unassigned ID, otherwise we trust the ID given is unique.\n    unsigned int assignedId = (suggestedId == 0) ?  newObjectId() : suggestedId;\n    \n    // If assertions are enabled, then we check that this ID really is unique.\n    COLA_ASSERT(objectIdIsUnused(assignedId));\n    \n    // Have the router record if this ID is larger than the largest assigned ID.\n    m_largest_assigned_id = std::max(m_largest_assigned_id, assignedId);\n\n    return assignedId;\n}\n\n\n    // Returns whether the given ID is unique among all objects known by the\n    // router.  It is expected this is only going to be called from assertions\n    // while debugging, so efficiency is not an issue and we just iterate over\n    // all objects.\nbool Router::objectIdIsUnused(const unsigned int id) const \n{\n    // Examine shapes/junctions.\n    for (ObstacleList::const_iterator i = m_obstacles.begin(); \n            i != m_obstacles.end(); ++i) \n    {\n        if ((*i)->id() == id)\n        {\n            return false;\n        }\n    }\n\n    // Examine connectors.\n    for (ConnRefList::const_iterator i = connRefs.begin(); \n            i != connRefs.end(); ++i) \n    {\n        if ((*i)->id() == id)\n        {\n            return false;\n        }\n    }\n\n    // Examine clusters.\n    for (ClusterRefList::const_iterator i = clusterRefs.begin(); \n            i != clusterRefs.end(); ++i) \n    {\n        if ((*i)->id() == id)\n        {\n            return false;\n        }\n    }\n\n    return true;\n}\n\n\n//----------------------------------------------------------------------------\n\n    // Returns a list of connector Ids of all the connectors of type\n    // 'type' attached to the shape with the ID 'shapeId'.\nvoid Router::attachedConns(IntList &conns, const unsigned int shapeId,\n        const unsigned int type)\n{\n    ConnRefList::const_iterator fin = connRefs.end();\n    for (ConnRefList::const_iterator i = connRefs.begin(); i != fin; ++i) \n    {\n        std::pair<Obstacle *, Obstacle *> anchors = (*i)->endpointAnchors();\n\n        if ((type & runningTo) &&\n                (anchors.second && (anchors.second->id() == shapeId)))\n        {\n            conns.push_back((*i)->id());\n        }\n        else if ((type & runningFrom) &&\n                (anchors.first && (anchors.first->id() == shapeId)))\n        {\n            conns.push_back((*i)->id());\n        }\n    }\n}\n\n\n    // Returns a list of shape Ids of all the shapes attached to the\n    // shape with the ID 'shapeId' with connection type 'type'.\nvoid Router::attachedShapes(IntList &shapes, const unsigned int shapeId,\n        const unsigned int type)\n{\n    ConnRefList::const_iterator fin = connRefs.end();\n    for (ConnRefList::const_iterator i = connRefs.begin(); i != fin; ++i) \n    {\n        std::pair<Obstacle *, Obstacle *> anchors = (*i)->endpointAnchors();\n\n        if ((type & runningTo) &&\n                (anchors.second && (anchors.second->id() == shapeId)))\n        {\n            if (anchors.first)\n            {\n                // Only if there is a shape attached to the other end.\n                shapes.push_back(anchors.first->id());\n            }\n        }\n        else if ((type & runningFrom) &&\n            (anchors.first && (anchors.first->id() == shapeId)))\n        {\n            if (anchors.second)\n            {\n                // Only if there is a shape attached to the other end.\n                shapes.push_back(anchors.second->id());\n            }\n        }\n    }\n}\n\n\n    // It's intended this function is called after visibility changes \n    // resulting from shape movement have happened.  It will alert \n    // rerouted connectors (via a callback) that they need to be redrawn.\nvoid Router::rerouteAndCallbackConnectors(void)\n{\n    ConnRefList reroutedConns;\n    ConnRefList::const_iterator fin = connRefs.end();\n    \n    this->m_conn_reroute_flags.alertConns();\n\n    // Updating the orthogonal visibility graph if necessary. \n    regenerateStaticBuiltGraph();\n\n    for (ConnRefList::const_iterator i = connRefs.begin(); i != fin; ++i) \n    {\n        (*i)->freeActivePins();\n    }\n\n    // Calculate and return connectors that are part of hyperedges and will\n    // be completely rerouted by that code and thus don't need to have routes\n    // generated here.\n    ConnRefSet hyperedgeConns =\n            m_hyperedge_rerouter.calcHyperedgeConnectors();\n\n    // TODO: It might be worth sorting connectors and routing them from \n    //       smallest to largest estimated cost.  This way we likely get \n    //       better exclusive pin assignment during initial routing.\n\n    size_t totalConns = connRefs.size();\n    size_t numOfReroutedConns = 0;\n    for (ConnRefList::const_iterator i = connRefs.begin(); i != fin; ++i) \n    {\n        // Progress reporting and continuation check.\n        performContinuationCheck(TransactionPhaseRouteSearch, \n                numOfReroutedConns, totalConns);\n        ++numOfReroutedConns;\n\n        ConnRef *connector = *i;\n        if (hyperedgeConns.find(connector) != hyperedgeConns.end())\n        {\n            // This will be rerouted by the hyperedge code, so do nothing.\n            continue;\n        }\n\n        if (connector->hasFixedRoute())\n        {\n            // We don't reroute connectors with fixed routes.\n            continue;\n        }\n\n        TIMER_START(this, tmOrthogRoute);\n        connector->m_needs_repaint = false;\n        bool rerouted = connector->generatePath();\n        if (rerouted)\n        {\n            reroutedConns.push_back(connector);\n        }\n        TIMER_STOP(this);\n    }\n\n\n    // Perform any complete hyperedge rerouting that has been requested.\n    m_hyperedge_rerouter.performRerouting();\n\n    // Find and reroute crossing connectors if crossing penalties are set.\n    improveCrossings();\n\n    bool withMinorImprovements = routingOption(\n            improveHyperedgeRoutesMovingJunctions);\n    bool withMajorImprovements = routingOption(\n            improveHyperedgeRoutesMovingAddingAndDeletingJunctions);\n    if (withMinorImprovements || withMajorImprovements)\n    {\n        m_hyperedge_improver.clear();\n        m_hyperedge_improver.execute(withMajorImprovements);\n    }\n\n    // Perform centring and nudging for orthogonal routes.\n    improveOrthogonalRoutes(this);\n\n    // Find a list of all the deleted connectors in hyperedges.\n    HyperedgeNewAndDeletedObjectLists changedHyperedgeObjs = \n            m_hyperedge_improver.newAndDeletedObjectLists();\n    ConnRefList deletedConns = changedHyperedgeObjs.deletedConnectorList;\n    for (size_t index = 0; index < m_hyperedge_rerouter.count(); ++index)\n    {\n        changedHyperedgeObjs = \n                m_hyperedge_rerouter.newAndDeletedObjectLists(index);\n        deletedConns.merge(changedHyperedgeObjs.deletedConnectorList);\n    }\n\n    // Alert connectors that they need redrawing.\n    fin = reroutedConns.end();\n    for (ConnRefList::const_iterator i = reroutedConns.begin(); i != fin; ++i) \n    {\n        ConnRef *conn = *i;\n        \n        // Skip hyperedge connectors which have been deleted.\n        ConnRefList::iterator findIt = std::find(\n                deletedConns.begin(), deletedConns.end(), conn);\n        if (findIt != deletedConns.end())\n        {\n            // Connector deleted, skip.\n            continue;\n        }\n\n        conn->m_needs_repaint = true;\n        conn->performCallback();\n    }\n\n    // Progress reporting.\n    performContinuationCheck(TransactionPhaseCompleted, 1, 1);\n}\n\n// Type holding a cost estimate and ConnRef.\ntypedef std::pair<double, ConnRef *> ConnCostRef;\n\n// A comparison class used to order a set of ConnCostRefs.\nclass CmpConnCostRef\n{\n    public:\n        CmpConnCostRef()\n        {\n        }\n        bool operator() (const ConnCostRef& u, const ConnCostRef& v) const\n        {\n            return (u.second->id() < v.second->id());\n        }\n};\n\ntypedef std::set<ConnCostRef, CmpConnCostRef> ConnCostRefSet;\ntypedef std::list<ConnCostRefSet> ConnCostRefSetList;\n\n\nstatic double cheapEstimatedCost(ConnRef *lineRef)\n{\n    // We use an estimate of overall connector length, reduced by a count \n    // of the number of segments.  In the case of equal length, This causes \n    // straight line connectors to be left alone and connectors with more \n    // complex paths to be rerouted.\n    bool isPolyLine = (lineRef->routingType() == ConnType_PolyLine);\n    const PolyLine& route = lineRef->displayRoute();\n    double length = 0;\n\n    for (size_t i = 1; i < route.size(); ++i)\n    {\n        const Point& a = route.ps[i - 1];\n        const Point& b = route.ps[i];\n\n        double segmentLength = (isPolyLine) ? \n                euclideanDist(a, b) : manhattanDist(a, b);\n        length += segmentLength;\n    }\n    return length - (route.size() + 1);\n}\n\n// A map of connectors to the set of connectors that cross them.\ntypedef std::map<ConnRef *, std::set<ConnRef *> > CrossingConnectorsMap;\n\n// A list of connector crossing maps that don't interact with each other.\ntypedef std::list<CrossingConnectorsMap> CrossingConnectorsMapList;\n\n// This class maintains the list of connector crossing maps and provides \n// methods for adding crossing connector pairs and getting the minimal sets\n// of connectors that can be removed from each group to prevent crossings.\nclass CrossingConnectorsInfo\n{\n    public:\n\n        // Add information that a pair of connectors cross.\n        void addCrossing(ConnRef *conn1, ConnRef *conn2)\n        {\n            // Find the existing or new group that this crossing \n            // should be recorded in.\n            CrossingConnectorsMapList::iterator it = \n                    groupForCrossingConns(conn1, conn2);\n            CrossingConnectorsMap& pairsSet = *it;\n\n            // Record the crossing.\n            pairsSet[conn1].insert(conn2);\n            pairsSet[conn2].insert(conn1);\n        }\n\n        // This method builds and returns a list of non-interacting sets of\n        // connectors (with crossing counts) that need to be removed so there\n        // are no crossings.  These are the connectors we reroute.  Where \n        // these connectors attach to exclusive connection pins, we return\n        // and thus reroute all connectors attached to the exlcusive pins.  We \n        // do this so we are no so committed to possible bad pin assignemnts.\n        ConnCostRefSetList crossingSetsListToRemoveCrossingsFromGroups(void)\n        {\n            // A list of the minimal sets of connectors that cause crossings \n            // in all groups of crossingconnectors.\n            ConnCostRefSetList crossingSetsList;\n\n            // For each group of crossing connectors.\n            for (CrossingConnectorsMapList::iterator it = pairsSetList.begin();\n                 it != pairsSetList.end(); ++it)\n            {\n                // The minimal set of crossing-causing connectors.\n                // We will build this.\n                ConnCostRefSet crossingSet;\n\n                // Set of exclusive pins that the crossing-causing connectors\n                // attach to.\n                std::set<ConnectionPinIds> exclusivePins;\n\n                // The group of all crossing pairs.\n                CrossingConnectorsMap& pairsSet = *it;\n\n                // For each crossing-causing connector.\n                ConnCostRef crossingCausingConnector;\n                while ( (crossingCausingConnector = \n                            removeConnectorWithMostCrossings(pairsSet)).second != nullptr )\n                {\n                    // Add it to our crossing-causing set.\n                    crossingSet.insert(crossingCausingConnector);\n\n                    // Determine if it attaches to any exclusive pins and \n                    // record these.\n                    std::pair<ConnEnd, ConnEnd> ends = \n                            crossingCausingConnector.second->endpointConnEnds();\n                    // Look at one end.\n                    ShapeConnectionPin *pin = ends.first.m_active_pin;\n                    if (pin && pin->isExclusive())\n                    {\n                        exclusivePins.insert(pin->ids());\n                    }\n                    // Look at other end.\n                    pin = ends.second.m_active_pin;\n                    if (pin && pin->isExclusive())\n                    {\n                        exclusivePins.insert(pin->ids());\n                    }\n                }\n\n                // For each of the remaining connectors which are not\n                // crossing-causing, add them to our crossing set if they \n                // attach to one of the exclusive pin classes which the\n                // crossing-causing connectors attached to.\n                for (CrossingConnectorsMap::const_iterator it2 = \n                        pairsSet.begin(); it2 != pairsSet.end(); ++it2)\n                {\n                    ConnRef *conn = it2->first;\n                    std::pair<ConnEnd, ConnEnd> ends = conn->endpointConnEnds();\n                    // Look at one end.\n                    ShapeConnectionPin *pin = ends.first.m_active_pin;\n                    if (pin && pin->isExclusive())\n                    {\n                        if (exclusivePins.count(pin->ids()) > 0)\n                        {\n                            // Attaches to an exclusive pin and it matches \n                            // one attached to by the crossing-causing\n                            // connectors.  So add the conn to the \n                            // crossing set and continue..\n                            crossingSet.insert(std::make_pair(0, conn));\n                            continue;\n                        }\n                    }\n                    // Look at other end.\n                    pin = ends.second.m_active_pin;\n                    if (pin && pin->isExclusive())\n                    {\n                        if (exclusivePins.count(pin->ids()) > 0)\n                        {\n                            // Attaches to an exclusive pin and it matches \n                            // one attached to by the crossing-causing\n                            // connectors.  So add the conn to the \n                            // crossing set.\n                            crossingSet.insert(std::make_pair(0, conn));\n                        }\n                    }\n                }\n\n                if (!crossingSet.empty())\n                {\n                    crossingSetsList.push_back(crossingSet);\n                }\n            }\n            return crossingSetsList;\n        }\n\n        // Returns whether this pair of connector is already known to cross.\n        bool connsKnownToCross(ConnRef *conn1, ConnRef *conn2)\n        {\n            CrossingConnectorsMapList::iterator it1 = groupForConn(conn1);\n            CrossingConnectorsMapList::iterator it2 = groupForConn(conn2);\n\n            // The connectors cross if\n            if ((it1 == it2) && (it1 != pairsSetList.end()))\n            {\n                // They are in the same group and conn2 is in crossing\n                // connectors set of conn1.\n                CrossingConnectorsMap& pairsSet = *it1;\n                return ((pairsSet.count(conn1) > 0) &&\n                        (pairsSet[conn1].count(conn2) > 0));\n            }\n            return false;\n        }\n\n    private:\n\n        // Given a particular group (pairsSet), removes the connector with \n        // the most crossings withing the group and returns it along with its \n        // crossing count.\n        ConnCostRef removeConnectorWithMostCrossings(\n                CrossingConnectorsMap& pairsSet)\n        {\n            // Tracking of the greatest number of crossings.\n            ConnRef *candidateConnector = nullptr;\n            size_t candidateCrossingCount = 0;\n            double candidateEstimatedCost = 0;\n\n            // For each connector in the group...\n            for (CrossingConnectorsMap::const_iterator it = pairsSet.begin();\n                    it != pairsSet.end(); ++it)\n            {\n                // ... check if it has any crossings.\n                size_t crossings = it->second.size();\n                if (crossings == 0)\n                {\n                    // If not, skip.\n                    continue;\n                }\n\n                // It has crossings.  Determine if it has the most crossings\n                // of the connectors we've seen, or if it is tied but has\n                // a greater estimated cost.  If so, it is our new candidate.\n                double cost = cheapEstimatedCost(it->first);\n                if ((crossings > candidateCrossingCount) || \n                    ((crossings == candidateCrossingCount) && \n                        (cost > candidateEstimatedCost)))\n                {\n                    // Update with new candidate.\n                    candidateConnector = it->first;\n                    candidateCrossingCount = crossings;\n                    candidateEstimatedCost = cost;\n                }\n            }\n\n            if (candidateConnector == nullptr)\n            {\n                // If no candidate, return nullptr connector.\n                return std::make_pair(0, (ConnRef *) nullptr);\n            }\n\n            // Remove the candidate from the group.  To do this we find the\n            // set of all connectors it crosses.\n            std::set<ConnRef *>& connSet = pairsSet[candidateConnector];\n            // For each of these\n            for (std::set<ConnRef *>::const_iterator it = connSet.begin();\n                    it != connSet.end(); ++it)\n            {\n                // we remove the candidate from their crossing lists\n                pairsSet[*it].erase(candidateConnector);\n            }\n            // And then clear the crossing list for the candidate itself.\n            connSet.clear();\n\n            // Return the candidate connector and its original crossing count.\n            return std::make_pair(static_cast<double>(candidateCrossingCount), candidateConnector);\n        }\n\n        // Returns the iterator to the group that the given conn is in,\n        // if it is part of any crossing group.\n        CrossingConnectorsMapList::iterator groupForConn(ConnRef *conn)\n        {\n            // For each group...\n            for (CrossingConnectorsMapList::iterator it = pairsSetList.begin();\n                 it != pairsSetList.end(); ++it)\n            {\n                // ... check if the connector is in it.\n                if (it->count(conn) > 0)\n                {\n                    // If so, return it.\n                    return it;\n                }\n            }\n            // Connector was not in any existing group.\n            return pairsSetList.end();\n        }\n\n        // Given a pair of crossing connectors, returns an iterator to the \n        // crossing connector group they are part of.  If neither are part \n        // of any group, one is created and returned.  If one connector is \n        // part of an exisitng group, that group is returned.  If they are \n        // part of two different groups, the groups are merged and the \n        // merged group is returned.\n        CrossingConnectorsMapList::iterator groupForCrossingConns(\n                ConnRef *conn1, ConnRef *conn2)\n        {\n            CrossingConnectorsMapList::iterator it1 = groupForConn(conn1);\n            CrossingConnectorsMapList::iterator it2 = groupForConn(conn2);\n\n            // groupIt will be the iterator to the appropriate group.\n            CrossingConnectorsMapList::iterator groupIt = pairsSetList.end();\n\n            if ((it1 == pairsSetList.end()) && (it2 == pairsSetList.end()))\n            {\n                // Neither are part of a group.  Create one.\n                CrossingConnectorsMap newSet;\n                groupIt = pairsSetList.insert(pairsSetList.end(), newSet);\n            }\n            else if ((it1 != pairsSetList.end()) && (it2 == pairsSetList.end()))\n            {\n                // it1 is the appropriate existing group.\n                groupIt = it1;\n            }\n            else if ((it1 == pairsSetList.end()) && (it2 != pairsSetList.end()))\n            {\n                // it2 is the appropriate exisitng group.\n                groupIt = it2;\n            }\n            else if (it1 != it2)\n            {\n                // There are two different existing groups, so merge them.\n                COLA_ASSERT(it1 != pairsSetList.end());\n                COLA_ASSERT(it2 != pairsSetList.end());\n                it1->insert(it2->begin(), it2->end());\n                pairsSetList.erase(it2);\n                groupIt = it1;\n            }\n            else \n            {\n                // These are already part of the same group.  Do nothing.\n                COLA_ASSERT(it1 == it2);\n                groupIt = it1;\n            }\n            return groupIt;\n        }\n\n        CrossingConnectorsMapList pairsSetList;\n};\n\n\nvoid Router::performContinuationCheck(unsigned int phaseNumber, \n        size_t stepNumber, size_t totalSteps)\n{\n    // Compute the elapsed time in msec since the beginning of the transaction.\n    unsigned int elapsedMsec = (unsigned int) \n            ((clock() - m_transaction_start_time) / \n             (CLOCKS_PER_SEC / (double) 1000));\n\n    bool shouldContinue = shouldContinueTransactionWithProgress(elapsedMsec, \n            phaseNumber, TransactionPhaseCompleted, \n            stepNumber / (double)totalSteps);\n    if (shouldContinue == false)\n    {\n        // Host program has asked us not to continue the transaction.\n        m_abort_transaction = true;\n    }\n}\n\n\nbool Router::shouldContinueTransactionWithProgress(unsigned int elapsedTime, \n        unsigned int phaseNumber, unsigned int totalPhases, \n        double proportion)\n{\n    COLA_UNUSED(elapsedTime);\n    COLA_UNUSED(phaseNumber);\n    COLA_UNUSED(totalPhases);\n    COLA_UNUSED(proportion);\n\n#if 0\n    printf(\"Progress: %8u, phase %u of %u... %.2f%%\\n\", elapsedTime,\n            phaseNumber, totalPhases, proportion * 100);\n#endif\n\n    // We always continue.  Subclasses can override this behaviour.\n    return true;\n}\n\n\nclass CmpOrderedConnCostRef\n{\n    public:\n        CmpOrderedConnCostRef()\n        {\n        }\n        bool operator() (const ConnCostRef& u, const ConnCostRef& v) const\n        {\n            return (u.first < v.first);\n        }\n};\ntypedef std::list<ConnCostRef> ConnCostRefList;\n\n\nvoid Router::improveCrossings(void)\n{\n    const double crossing_penalty = routingParameter(crossingPenalty);\n    const double shared_path_penalty = routingParameter(fixedSharedPathPenalty);\n    if ((crossing_penalty == 0) && (shared_path_penalty == 0))\n    {\n        // No penalties, return.\n        return;\n    }\n\n    // Information on crossing connector groups.\n    CrossingConnectorsInfo crossingConnInfo;\n\n    size_t numOfConns = connRefs.size();\n    size_t numOfConnsChecked = 0;\n\n    // Find crossings and reroute connectors.\n    m_in_crossing_rerouting_stage = true;\n    ConnRefList::iterator fin = connRefs.end();\n    for (ConnRefList::iterator i = connRefs.begin(); i != fin; ++i) \n    {\n        // Progress reporting and continuation check.\n        ++numOfConnsChecked;\n        performContinuationCheck(TransactionPhaseCrossingDetection,\n                numOfConnsChecked, numOfConns);\n        if (m_abort_transaction)\n        {\n            m_in_crossing_rerouting_stage = false;\n            return;\n        }\n    \n        Avoid::Polygon& iRoute = (*i)->routeRef();\n        if (iRoute.size() == 0)\n        {\n            // Rerouted hyperedges will have an empty route.\n            // We can't reroute these.\n            continue;\n        }\n        ConnRefList::iterator j = i;\n        for (++j; j != fin; ++j) \n        {\n            if (crossingConnInfo.connsKnownToCross(*i, *j))\n            {\n                // We already know both these have crossings.\n                continue;\n            }\n\n            // Determine if this pair cross.\n            Avoid::Polygon& jRoute = (*j)->routeRef();\n            ConnectorCrossings cross(iRoute, true, jRoute, *i, *j);\n            for (size_t jInd = 1; jInd < jRoute.size(); ++jInd)\n            {\n                const bool finalSegment = ((jInd + 1) == jRoute.size());\n                cross.countForSegment(jInd, finalSegment);\n                \n                if ((shared_path_penalty > 0) && \n                    (cross.crossingFlags & CROSSING_SHARES_PATH) && \n                    (cross.crossingFlags & CROSSING_SHARES_FIXED_SEGMENT) &&\n                    (m_routing_options[penaliseOrthogonalSharedPathsAtConnEnds] || \n                     !(cross.crossingFlags & CROSSING_SHARES_PATH_AT_END))) \n                {\n                    // We are penalising fixedSharedPaths and there is a\n                    // fixedSharedPath.\n                    crossingConnInfo.addCrossing(*i, *j);\n                    break;\n                }\n                else if ((crossing_penalty > 0) && (cross.crossingCount > 0))\n                {\n                    // We are penalising crossings and this is a crossing.\n                    crossingConnInfo.addCrossing(*i, *j);\n                    break;\n                }\n            }\n        }\n    }\n\n    // Find the list of connector sets that need to be removed to avoid any\n    // crossings in all crossing groups.  This is our candidate set for \n    // rerouting.  Where these connectors connect to exlusive pins, all \n    // connectors attached to exclusive pins with the same IDs will also \n    // be rerouted, starting with the shortest.\n    ConnCostRefSetList crossingConnsGroups = \n            crossingConnInfo.crossingSetsListToRemoveCrossingsFromGroups();\n\n    // At this point we have a list containing crossings for rerouting.\n    // We do this rerouting via two passes, for each group of interacting\n    // crossing connectors:\n    //  1) clear existing routes and free pin assignments, and\n    //  2) compute new routes.\n    unsigned int numOfConnsToReroute = 1;\n    unsigned int numOfConnsRerouted = 1;\n    for (ConnCostRefSetList::iterator setIt = crossingConnsGroups.begin();\n         setIt != crossingConnsGroups.end(); ++setIt)\n    {\n        // Sort the connectors we will be rerouting from lowest to\n        // highest cost.\n        ConnCostRefList orderedConnList(setIt->begin(), setIt->end());\n        orderedConnList.sort(CmpOrderedConnCostRef());\n\n        // Perform rerouting of this set of connectors.\n        for (int pass = 0; pass < 2; ++pass)\n        {\n            for (ConnCostRefList::iterator connIt = orderedConnList.begin(); \n                    connIt != orderedConnList.end(); ++connIt)\n            {\n                ConnRef *conn = connIt->second;\n                if (pass == 0)\n                {\n                    ++numOfConnsToReroute;\n\n                    // Mark the fixed shared path as being invalid.\n                    conn->makePathInvalid();\n                    \n                    // Free the previous path, so it is not noticed by other \n                    // connectors during rerouting.\n                    conn->freeRoutes();\n                    \n                    // Free pin assignments.\n                    conn->freeActivePins();\n                }\n                else if (pass == 1)\n                {\n                    // Progress reporting and continuation check.\n                    performContinuationCheck(TransactionPhaseRerouteSearch, \n                            numOfConnsRerouted, numOfConnsToReroute);\n                    if (m_abort_transaction)\n                    {\n                        m_in_crossing_rerouting_stage = false;\n                        return;\n                    }\n                    ++numOfConnsRerouted;\n                    \n                    // Recompute this path.\n                    conn->generatePath();\n                }\n            }\n        }\n    }\n    m_in_crossing_rerouting_stage = false;\n}\n\n\nvoid Router::newBlockingShape(const Polygon& poly, int pid)\n{\n    // o  Check all visibility edges to see if this one shape\n    //    blocks them.\n    EdgeInf *finish = visGraph.end();\n    for (EdgeInf *iter = visGraph.begin(); iter != finish ; )\n    {\n        EdgeInf *tmp = iter;\n        iter = iter->lstNext;\n\n        if (tmp->getDist() != 0)\n        {\n            std::pair<VertID, VertID> ids(tmp->ids());\n            VertID eID1 = ids.first;\n            VertID eID2 = ids.second;\n            std::pair<Point, Point> points(tmp->points());\n            Point e1 = points.first;\n            Point e2 = points.second;\n            bool blocked = false;\n\n            bool countBorder = false;\n            bool ep_in_poly1 = (eID1.isConnPt()) ? \n                    inPoly(poly, e1, countBorder) : false;\n            bool ep_in_poly2 = (eID2.isConnPt()) ? \n                    inPoly(poly, e2, countBorder) : false;\n            if (ep_in_poly1 || ep_in_poly2)\n            {\n                // Don't check edges that have a connector endpoint\n                // and are inside the shape being added.\n                continue;\n            }\n\n            bool seenIntersectionAtEndpoint = false;\n            for (size_t pt_i = 0; pt_i < poly.size(); ++pt_i)\n            {\n                size_t pt_n = (pt_i == (poly.size() - 1)) ? 0 : pt_i + 1;\n                const Point& pi = poly.ps[pt_i];\n                const Point& pn = poly.ps[pt_n];\n                if (segmentShapeIntersect(e1, e2, pi, pn, \n                        seenIntersectionAtEndpoint))\n                {\n                    blocked = true;\n                    break;\n                }\n            }\n            if (blocked)\n            {\n                db_printf(\"\\tRemoving newly blocked edge (by shape %3d)\"\n                        \"... \\n\\t\\t\", pid);\n                tmp->alertConns();\n                tmp->db_print();\n                if (InvisibilityGrph)\n                {\n                    tmp->addBlocker(pid);\n                }\n                else\n                {\n                    delete tmp;\n                }\n            }\n        }\n    }\n}\n\n\nvoid Router::checkAllBlockedEdges(int pid)\n{\n    COLA_ASSERT(InvisibilityGrph);\n\n    for (EdgeInf *iter = invisGraph.begin(); iter != invisGraph.end() ; )\n    {\n        EdgeInf *tmp = iter;\n        iter = iter->lstNext;\n\n        if (tmp->blocker() == -1)\n        {\n            tmp->alertConns();\n            tmp->checkVis();\n        }\n        else if (tmp->blocker() == pid)\n        {\n            tmp->checkVis();\n        }\n    }\n}\n\n\nvoid Router::checkAllMissingEdges(void)\n{\n    COLA_ASSERT(!InvisibilityGrph);\n\n    VertInf *first = vertices.connsBegin();\n\n    VertInf *pend = vertices.end();\n    for (VertInf *i = first; i != pend; i = i->lstNext)\n    {\n        VertID iID = i->id;\n\n        // Check remaining, earlier vertices\n        for (VertInf *j = first ; j != i; j = j->lstNext)\n        {\n            VertID jID = j->id;\n            if (iID.isConnPt() && !iID.isConnectionPin() && \n                    (iID.objID != jID.objID))\n            {\n                // Don't keep visibility between edges of different conns\n                continue;\n            }\n\n            // See if the edge is already there?\n            bool found = (EdgeInf::existingEdge(i, j) != nullptr);\n\n            if (!found)\n            {\n                // Didn't already exist, check.\n                bool knownNew = true;\n                EdgeInf::checkEdgeVisibility(i, j, knownNew);\n            }\n        }\n    }\n}\n\n\nvoid Router::generateContains(VertInf *pt)\n{\n    contains[pt->id].clear();\n    enclosingClusters[pt->id].clear();\n\n    // Don't count points on the border as being inside.\n    bool countBorder = false;\n\n    // Compute enclosing shapes.\n    ObstacleList::const_iterator finish = m_obstacles.end();\n    for (ObstacleList::const_iterator i = m_obstacles.begin(); i != finish; ++i)\n    {\n        if (inPoly((*i)->routingPolygon(), pt->point, countBorder))\n        {\n            contains[pt->id].insert((*i)->id());\n        }\n    }\n\n    // Computer enclosing Clusters\n    ClusterRefList::const_iterator clFinish = clusterRefs.end();\n    for (ClusterRefList::const_iterator i = clusterRefs.begin(); \n            i != clFinish; ++i)\n    {\n        if (inPolyGen((*i)->polygon(), pt->point))\n        {\n            enclosingClusters[pt->id].insert((*i)->id());\n        }\n    }\n}\n\n\nvoid Router::adjustClustersWithAdd(const PolygonInterface& poly, \n        const int p_cluster)\n{\n    for (VertInf *k = vertices.connsBegin(); k != vertices.shapesBegin();\n            k = k->lstNext)\n    {\n        if (inPolyGen(poly, k->point))\n        {\n            enclosingClusters[k->id].insert(p_cluster);\n        }\n    }\n}\n\n\nvoid Router::adjustClustersWithDel(const int p_cluster)\n{\n    for (ContainsMap::iterator k = enclosingClusters.begin();\n            k != enclosingClusters.end(); ++k)\n    {\n        (*k).second.erase(p_cluster);\n    }\n}\n\n\nvoid Router::adjustContainsWithAdd(const Polygon& poly, const int p_shape)\n{\n    // Don't count points on the border as being inside.\n    bool countBorder = false;\n\n    for (VertInf *k = vertices.connsBegin(); k != vertices.shapesBegin();\n            k = k->lstNext)\n    {\n        if (inPoly(poly, k->point, countBorder))\n        {\n            contains[k->id].insert(p_shape);\n        }\n    }\n}\n\n\nvoid Router::adjustContainsWithDel(const int p_shape)\n{\n    for (ContainsMap::iterator k = contains.begin(); k != contains.end(); ++k)\n    {\n        (*k).second.erase(p_shape);\n    }\n}\n\n\n#ifdef SELECTIVE_DEBUG\nstatic double AngleAFromThreeSides(const double a, const double b,\n        const double c)\n{\n    // returns angle A, the angle opposite from side a, in radians\n    return acos((pow(b, 2) + pow(c, 2) - pow(a, 2)) / (2 * b * c));\n}\n#endif\n\n// Given an deleted obstacle, uses a simple heauristic to determine polyline\n// connectors that may now have a better path through the region occupied by\n// the shape and mark them as needing to be rerouted.\n// See the \"Incremental Connector Routing\" paper which explains this code.\n//\nvoid Router::markPolylineConnectorsNeedingReroutingForDeletedObstacle(\n        Obstacle *obstacle)\n{\n    if (RubberBandRouting)\n    {\n        // When rubber-band routing, we do not reroute connectors that\n        // may have a better route, only invalid connectors.\n        return;\n    }\n\n    COLA_ASSERT(SelectiveReroute);\n\n    // For each connector...\n    ConnRefList::const_iterator end = connRefs.end();\n    for (ConnRefList::const_iterator it = connRefs.begin(); it != end; ++it)\n    {\n        ConnRef *conn = (*it);\n\n        if (conn->m_route.empty())\n        {\n            // Ignore uninitialised connectors.\n            continue;\n        }\n        else if (conn->m_needs_reroute_flag)\n        {\n            // Already marked, so skip.\n            continue;\n        }\n        else if (conn->routingType() != ConnType_PolyLine)\n        {\n            // This test only works for polyline connectors, so skip others.\n            continue;\n        }\n\n        Point start = conn->m_route.ps[0];\n        Point end = conn->m_route.ps[conn->m_route.size() - 1];\n\n        double conndist = conn->m_route_dist;\n\n        double estdist;\n        double e1, e2;\n\n        // For each vertex of the obstacle...\n        VertInf *beginV = obstacle->firstVert();\n        VertInf *endV = obstacle->lastVert()->lstNext;\n        for (VertInf *i = beginV; i != endV; i = i->lstNext)\n        {\n            const Point& p1 = i->point;\n            const Point& p2 = i->shNext->point;\n\n            double offy;\n            double a;\n            double b;\n            double c;\n            double d;\n\n            double min;\n            double max;\n\n            if (p1.y == p2.y)\n            {\n                // Standard case\n                offy = p1.y;\n                a = start.x;\n                b = start.y - offy;\n                c = end.x;\n                d = end.y - offy;\n\n                min = std::min(p1.x, p2.x);\n                max = std::max(p1.x, p2.x);\n            }\n            else if (p1.x == p2.x)\n            {\n                // Other Standard case\n                offy = p1.x;\n                a = start.y;\n                b = start.x - offy;\n                c = end.y;\n                d = end.x - offy;\n\n                min = std::min(p1.y, p2.y);\n                max = std::max(p1.y, p2.y);\n            }\n            else\n            {\n                // Need to do rotation\n                Point n_p2(p2.x - p1.x, p2.y - p1.y);\n                Point n_start(start.x - p1.x, start.y - p1.y);\n                Point n_end(end.x - p1.x, end.y - p1.y);\n                //db_printf(\"n_p2:    (%.1f, %.1f)\\n\", n_p2.x, n_p2.y);\n                //db_printf(\"n_start: (%.1f, %.1f)\\n\", n_start.x, n_start.y);\n                //db_printf(\"n_end:   (%.1f, %.1f)\\n\", n_end.x, n_end.y);\n\n                double theta = 0 - atan2(n_p2.y, n_p2.x);\n                //db_printf(\"theta = %.2f\\n\", theta * (180 / PI));\n\n                Point r_p1(0, 0);\n                Point r_p2 = n_p2;\n                start = n_start;\n                end = n_end;\n\n                double cosv = cos(theta);\n                double sinv = sin(theta);\n\n                r_p2.x = cosv * n_p2.x - sinv * n_p2.y;\n                r_p2.y = cosv * n_p2.y + sinv * n_p2.x;\n                start.x = cosv * n_start.x - sinv * n_start.y;\n                start.y = cosv * n_start.y + sinv * n_start.x;\n                end.x = cosv * n_end.x - sinv * n_end.y;\n                end.y = cosv * n_end.y + sinv * n_end.x;\n                //db_printf(\"r_p2:    (%.1f, %.1f)\\n\", r_p2.x, r_p2.y);\n                //db_printf(\"r_start: (%.1f, %.1f)\\n\", start.x, start.y);\n                //db_printf(\"r_end:   (%.1f, %.1f)\\n\", end.x, end.y);\n\n                // This might be slightly off.\n                if (fabs(r_p2.y) > 0.0001)\n                {\n                    db_printf(\"r_p2.y: %f != 0\\n\", r_p2.y);\n                }\n                r_p2.y = 0;\n\n                offy = r_p1.y;\n                a = start.x;\n                b = start.y - offy;\n                c = end.x;\n                d = end.y - offy;\n\n                min = std::min(r_p1.x, r_p2.x);\n                max = std::max(r_p1.x, r_p2.x);\n\n            }\n\n            double x;\n            if ((b + d) == 0)\n            {\n                db_printf(\"WARNING: (b + d) == 0\\n\");\n                d = d * -1;\n            }\n\n            if ((b == 0) && (d == 0))\n            {\n                db_printf(\"WARNING: b == d == 0\\n\");\n                if (((a < min) && (c < min)) ||\n                        ((a > max) && (c > max)))\n                {\n                    // It's going to get adjusted.\n                    x = a;\n                }\n                else\n                {\n                    continue;\n                }\n            }\n            else\n            {\n                x = ((b*c) + (a*d)) / (b + d);\n            }\n\n            //db_printf(\"%.1f, %.1f, %.1f, %.1f\\n\", a, b, c, d);\n            //db_printf(\"x = %.1f\\n\", x);\n\n            x = std::max(min, x);\n            x = std::min(max, x);\n\n            //db_printf(\"x = %.1f\\n\", x);\n\n            Point xp;\n            if (p1.x == p2.x)\n            {\n                xp.x = offy;\n                xp.y = x;\n            }\n            else\n            {\n                xp.x = x;\n                xp.y = offy;\n            }\n            //db_printf(\"(%.1f, %.1f)\\n\", xp.x, xp.y);\n\n            e1 = euclideanDist(start, xp);\n            e2 = euclideanDist(xp, end);\n            estdist = e1 + e2;\n\n\n            //db_printf(\"is %.1f < %.1f\\n\", estdist, conndist);\n            if (estdist < conndist)\n            {\n#ifdef SELECTIVE_DEBUG\n                //double angle = AngleAFromThreeSides(dist(start, end),\n                //        e1, e2);\n                db_printf(\"[%3d] - Possible better path found (%.1f < %.1f)\\n\",\n                        conn->_id, estdist, conndist);\n#endif\n                conn->m_needs_reroute_flag = true;\n                break;\n            }\n\n        }\n    }\n}\n\n\nConnType Router::validConnType(const ConnType select) const\n{\n    if (select != ConnType_None)\n    {\n        if ((select == ConnType_Orthogonal) && m_allows_orthogonal_routing)\n        {\n            return ConnType_Orthogonal;\n        }\n        else if ((select == ConnType_PolyLine) && m_allows_polyline_routing)\n        {\n            return ConnType_PolyLine;\n        }\n    }\n\n    if (m_allows_polyline_routing)\n    {\n        return ConnType_PolyLine;\n    }\n    else if (m_allows_orthogonal_routing)\n    {\n        return ConnType_Orthogonal;\n    }\n    return ConnType_None;\n}\n\n\nvoid Router::setRoutingParameter(const RoutingParameter parameter,\n        const double value)\n{\n    COLA_ASSERT(parameter < lastRoutingParameterMarker);\n    if (value < 0)\n    {\n        // Set some sensible parameter value for the parameter being 'active'.\n        switch (parameter)\n        {\n            case segmentPenalty:\n                m_routing_parameters[parameter] = 50;\n                break;\n            case fixedSharedPathPenalty:\n                m_routing_parameters[parameter] = 110;\n                break;\n            case anglePenalty:\n                m_routing_parameters[parameter] = 50;\n                break;\n            case crossingPenalty:\n                m_routing_parameters[parameter] = 200;\n                break;\n            case clusterCrossingPenalty:\n                m_routing_parameters[parameter] = 4000;\n                break;\n            case idealNudgingDistance:\n                m_routing_parameters[parameter] = 4.0;\n                break;\n            case portDirectionPenalty:\n                m_routing_parameters[parameter] = 100;\n                break;\n            default:\n                m_routing_parameters[parameter] = 50;\n                break;\n        }\n    }\n    else\n    {\n        m_routing_parameters[parameter] = value;\n    }\n    m_settings_changes = true;\n}\n\n\ndouble Router::routingParameter(const RoutingParameter parameter) const\n{\n    COLA_ASSERT(parameter < lastRoutingParameterMarker);\n    return m_routing_parameters[parameter];\n}\n\n\nvoid Router::setRoutingOption(const RoutingOption option, const bool value)\n{\n    COLA_ASSERT(option < lastRoutingOptionMarker);\n    m_routing_options[option] = value;\n    m_settings_changes = true;\n}\n\n\nbool Router::routingOption(const RoutingOption option) const\n{\n    COLA_ASSERT(option < lastRoutingOptionMarker);\n    return m_routing_options[option];\n}\n\n\nvoid Router::setRoutingPenalty(const RoutingParameter penType,\n        const double penValue)\n{\n    setRoutingParameter(penType, penValue);\n}\n\nvoid Router::registerSettingsChange(void)\n{\n    m_settings_changes = true;\n}\n\nHyperedgeRerouter *Router::hyperedgeRerouter(void)\n{\n    return &m_hyperedge_rerouter;\n}\n\n\nbool Router::isInCrossingPenaltyReroutingStage(void) const\n{\n    return m_in_crossing_rerouting_stage;\n}\n\n\nvoid Router::printInfo(void)\n{\n    FILE *fp = stdout;\n    fprintf(fp, \"\\nVisibility Graph info:\\n\");\n    fprintf(fp, \"----------------------\\n\");\n\n    unsigned int currshape = 0;\n    int st_shapes = 0;\n    int st_vertices = 0;\n    int st_endpoints = 0;\n    int st_valid_shape_visedges = 0;\n    int st_valid_endpt_visedges = 0;\n    int st_orthogonal_visedges = 0;\n    int st_invalid_visedges = 0;\n    VertInf *finish = vertices.end();\n    for (VertInf *t = vertices.connsBegin(); t != finish; t = t->lstNext)\n    {\n        VertID pID = t->id;\n\n        if (!(pID.isConnPt()) && (pID.objID != currshape))\n        {\n            currshape = pID.objID;\n            st_shapes++;\n        }\n        if (!(pID.isConnPt()))\n        {\n            st_vertices++;\n        }\n        else\n        {\n            // The shape 0 ones are temporary and not considered.\n            st_endpoints++;\n        }\n    }\n    for (EdgeInf *t = visGraph.begin(); t != visGraph.end();\n            t = t->lstNext)\n    {\n        std::pair<VertID, VertID> idpair = t->ids();\n\n        if (idpair.first.isConnPt() || idpair.second.isConnPt())\n        {\n            st_valid_endpt_visedges++;\n        }\n        else\n        {\n            st_valid_shape_visedges++;\n        }\n    }\n    for (EdgeInf *t = invisGraph.begin(); t != invisGraph.end();\n            t = t->lstNext)\n    {\n        st_invalid_visedges++;\n    }\n    for (EdgeInf *t = visOrthogGraph.begin(); t != visOrthogGraph.end();\n            t = t->lstNext)\n    {\n        st_orthogonal_visedges++;\n    }\n    fprintf(fp, \"Number of shapes: %d\\n\", st_shapes);\n    fprintf(fp, \"Number of vertices: %d (%d real, %d endpoints)\\n\",\n            st_vertices + st_endpoints, st_vertices, st_endpoints);\n    fprintf(fp, \"Number of orthog_vis_edges: %d\\n\", st_orthogonal_visedges);\n    fprintf(fp, \"Number of vis_edges: %d (%d valid [%d normal, %d endpt], \"\n            \"%d invalid)\\n\", st_valid_shape_visedges + st_invalid_visedges +\n            st_valid_endpt_visedges, st_valid_shape_visedges +\n            st_valid_endpt_visedges, st_valid_shape_visedges,\n            st_valid_endpt_visedges, st_invalid_visedges);\n    fprintf(fp, \"----------------------\\n\");\n    fprintf(fp, \"checkVisEdge tally: %d\\n\", st_checked_edges);\n    fprintf(fp, \"----------------------\\n\");\n\n#ifdef AVOID_PROFILE\n    timers.printAll(fp);\n    timers.reset();\n#endif\n}\n\n\nstatic const double LIMIT = 100000000;\n\nstatic void reduceRange(double& val)\n{\n    val = std::min(val, LIMIT);\n    val = std::max(val, -LIMIT);\n}\n\n\n//=============================================================================\n// The following methods are for testing and debugging.\n\n\nbool Router::existsOrthogonalSegmentOverlap(const bool atEnds)\n{\n    ConnRefList::iterator fin = connRefs.end();\n    for (ConnRefList::iterator i = connRefs.begin(); i != fin; ++i) \n    {\n        Avoid::Polygon iRoute = (*i)->displayRoute();\n        ConnRefList::iterator j = i;\n        for (++j; j != fin; ++j) \n        {\n            // Determine if this pair overlap\n            Avoid::Polygon jRoute = (*j)->displayRoute();\n            ConnectorCrossings cross(iRoute, true, jRoute, *i, *j);\n            cross.checkForBranchingSegments = true;\n            for (size_t jInd = 1; jInd < jRoute.size(); ++jInd)\n            {\n                const bool finalSegment = ((jInd + 1) == jRoute.size());\n                cross.countForSegment(jInd, finalSegment);\n                \n                if ((cross.crossingFlags & CROSSING_SHARES_PATH) && \n                    (atEnds || \n                     !(cross.crossingFlags & CROSSING_SHARES_PATH_AT_END))) \n                {\n                    // We are looking for fixedSharedPaths and there is a\n                    // fixedSharedPath.\n                    return true;\n                }\n            }\n        }\n    }\n    return false;\n}\n\n\nbool Router::existsOrthogonalFixedSegmentOverlap(const bool atEnds)\n{\n    ConnRefList::iterator fin = connRefs.end();\n    for (ConnRefList::iterator i = connRefs.begin(); i != fin; ++i) \n    {\n        Avoid::Polygon iRoute = (*i)->displayRoute();\n        ConnRefList::iterator j = i;\n        for (++j; j != fin; ++j) \n        {\n            // Determine if this pair overlap\n            Avoid::Polygon jRoute = (*j)->displayRoute();\n            ConnectorCrossings cross(iRoute, true, jRoute, *i, *j);\n            cross.checkForBranchingSegments = true;\n            for (size_t jInd = 1; jInd < jRoute.size(); ++jInd)\n            {\n                const bool finalSegment = ((jInd + 1) == jRoute.size());\n                cross.countForSegment(jInd, finalSegment);\n                \n                if ((cross.crossingFlags & CROSSING_SHARES_PATH) && \n                    (cross.crossingFlags & CROSSING_SHARES_FIXED_SEGMENT) &&\n                    (atEnds || \n                     !(cross.crossingFlags & CROSSING_SHARES_PATH_AT_END))) \n                {\n                    // We are looking for fixedSharedPaths and there is a\n                    // fixedSharedPath.\n                    return true;\n                }\n            }\n        }\n    }\n    return false;\n}\n\n\nbool Router::existsOrthogonalTouchingPaths(void)\n{\n    ConnRefList::iterator fin = connRefs.end();\n    for (ConnRefList::iterator i = connRefs.begin(); i != fin; ++i) \n    {\n        Avoid::Polygon iRoute = (*i)->displayRoute();\n        ConnRefList::iterator j = i;\n        for (++j; j != fin; ++j) \n        {\n            // Determine if this pair overlap\n            Avoid::Polygon jRoute = (*j)->displayRoute();\n            ConnectorCrossings cross(iRoute, true, jRoute, *i, *j);\n            cross.checkForBranchingSegments = true;\n            for (size_t jInd = 1; jInd < jRoute.size(); ++jInd)\n            {\n                const bool finalSegment = ((jInd + 1) == jRoute.size());\n                cross.countForSegment(jInd, finalSegment);\n                \n                if (cross.crossingFlags & CROSSING_TOUCHES) \n                {\n                    return true;\n                }\n            }\n        }\n    }\n    return false;\n}\n\n\n// Counts the number of crossings between all connectors.\n//\n// If optimisedForConnectorType is set, This will only count crossings \n// between orthogonal connectors if they appear at segment endpoints. \n// Thus, it can be used on raw connectors but not on simplified orthogonal\n// connectors.\n//\nint Router::existsCrossings(const bool optimisedForConnectorType)\n{\n    int count = 0;\n    ConnRefList::iterator fin = connRefs.end();\n    for (ConnRefList::iterator i = connRefs.begin(); i != fin; ++i) \n    {\n        Avoid::Polygon iRoute = (*i)->displayRoute();\n        ConnRefList::iterator j = i;\n        for (++j; j != fin; ++j) \n        {\n            // Determine if this pair overlap\n            Avoid::Polygon jRoute = (*j)->displayRoute();\n            ConnRef *iConn = (optimisedForConnectorType) ? *i : nullptr;\n            ConnRef *jConn = (optimisedForConnectorType) ? *j : nullptr;\n            ConnectorCrossings cross(iRoute, true, jRoute, iConn, jConn);\n            cross.checkForBranchingSegments = true;\n            for (size_t jInd = 1; jInd < jRoute.size(); ++jInd)\n            {\n                const bool finalSegment = ((jInd + 1) == jRoute.size());\n                \n                // Normal crossings aren't counted if we pass the pointers\n                // for the connectors, so don't pass them.\n                cross.countForSegment(jInd, finalSegment);\n                \n                count += cross.crossingCount;\n            }\n        }\n    }\n    return count;\n}\n\n// Looks for non-orthogonal segments in orthogonal connectors and \n// returns true if it finds any.\nbool Router::existsInvalidOrthogonalPaths(void)\n{\n    // For each connector...\n    ConnRefList::iterator fin = connRefs.end();\n    for (ConnRefList::iterator i = connRefs.begin(); i != fin; ++i) \n    {\n        // If it is an orthogonal connector...\n        if ((*i)->routingType() == Avoid::ConnType_Orthogonal)\n        {\n            // Check each segment of the path...\n            Avoid::Polygon iRoute = (*i)->displayRoute();\n            for (size_t iInd = 1; iInd < iRoute.size(); ++iInd)\n            {\n                // And if it isn't either vertical or horizontal...\n                if ( (iRoute.at(iInd - 1).x != iRoute.at(iInd).x) &&\n                     (iRoute.at(iInd - 1).y != iRoute.at(iInd).y) )\n                {\n                    // Then we've found an invalid path.\n                    return true;\n                }\n            }\n        }\n    }\n    return false;\n}\n\n\nvoid Router::setTopologyAddon(TopologyAddonInterface *topologyAddon)\n{\n    COLA_ASSERT(m_topology_addon);\n    delete m_topology_addon;\n    if (topologyAddon)\n    {\n        m_topology_addon = topologyAddon->clone();\n    }\n    else\n    {\n        m_topology_addon = new TopologyAddonInterface();\n    }\n    registerSettingsChange();\n}\n\nvoid Router::improveOrthogonalTopology(void)\n{\n    COLA_ASSERT(m_topology_addon);\n    m_topology_addon->improveOrthogonalTopology(this);\n}\n\nvoid Router::outputInstanceToSVG(std::string instanceName)\n{\n    // Save current locale\n    char* originalLocale = setlocale(LC_NUMERIC, nullptr);\n    // Set locale to \"C\" to enforce decimal point\n    setlocale(LC_NUMERIC, \"C\");\n\n    std::string filename;\n    if (!instanceName.empty())\n    {\n        filename = instanceName;\n    }\n    else\n    {\n        filename = \"libavoid-debug\";\n    }\n    filename += \".svg\";\n    FILE *fp = fopen(filename.c_str(), \"w\");\n\n    if (fp == nullptr)\n    {\n        return;\n    }\n\n    double minX = LIMIT;\n    double minY = LIMIT;\n    double maxX = -LIMIT;\n    double maxY = -LIMIT;\n\n    VertInf *curr = vertices.connsBegin();\n    while (curr)\n    {\n        Point p = curr->point;\n\n        reduceRange(p.x);\n        reduceRange(p.y);\n        \n        if (p.x > -LIMIT)\n        {\n            minX = std::min(minX, p.x);\n        }\n        if (p.x < LIMIT)\n        {\n            maxX = std::max(maxX, p.x);\n        }\n        if (p.y > -LIMIT)\n        {\n            minY = std::min(minY, p.y);\n        }\n        if (p.y < LIMIT)\n        {\n            maxY = std::max(maxY, p.y);\n        }\n        curr = curr->lstNext;\n    }\n    minX -= 8;\n    minY -= 8;\n    maxX += 8;\n    maxY += 8;\n\n    fprintf(fp, \"<?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?>\\n\");\n    fprintf(fp, \"<svg xmlns:inkscape=\\\"http://www.inkscape.org/namespaces/inkscape\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"100%%\\\" height=\\\"100%%\\\" viewBox=\\\"%g %g %g %g\\\">\\n\", minX, minY, maxX - minX, maxY - minY);\n\n    // Output source code to generate this instance of the router.\n    fprintf(fp, \"<!-- Source code to generate this instance:\\n\");\n    fprintf(fp, \"#include \\\"libavoid/libavoid.h\\\"\\n\");\n    if (m_topology_addon->outputCode(nullptr))\n    {\n        fprintf(fp, \"#include \\\"libcola/cola.h\\\"\\n\");\n        fprintf(fp, \"#include \\\"libtopology/orthogonal_topology.h\\\"\\n\");\n        fprintf(fp, \"using namespace cola;\\n\");\n    }\n    fprintf(fp, \"using namespace Avoid;\\n\");\n    fprintf(fp, \"int main(void) {\\n\");\n    fprintf(fp, \"    Router *router = new Router(\");\n    if (m_allows_polyline_routing)\n    {\n        fprintf(fp, \"PolyLineRouting\");\n    }\n    if (m_allows_polyline_routing && m_allows_orthogonal_routing)\n    {\n        fprintf(fp, \" | \");\n    }\n    if (m_allows_orthogonal_routing)\n    {\n        fprintf(fp, \"OrthogonalRouting\");\n    }\n    fprintf(fp, \");\\n\");\n    for (size_t p = 0; p < lastRoutingParameterMarker; ++p)\n    {\n        fprintf(fp, \"    router->setRoutingParameter((RoutingParameter)%lu, %g);\\n\", \n                (unsigned long)p, m_routing_parameters[p]);\n    }\n    for (size_t p = 0; p < lastRoutingOptionMarker; ++p)\n    {\n        fprintf(fp, \"    router->setRoutingOption((RoutingOption)%lu, %s);\\n\", \n                (unsigned long)p, (m_routing_options[p]) ? \"true\" : \"false\");\n    }\n    fprintf(fp, \"    Polygon polygon;\\n\");\n    fprintf(fp, \"    ConnRef *connRef = nullptr;\\n\");\n    fprintf(fp, \"    ConnEnd srcPt;\\n\");\n    fprintf(fp, \"    ConnEnd dstPt;\\n\");\n    fprintf(fp, \"    ConnEnd heConnPt;\\n\");\n    fprintf(fp, \"    PolyLine newRoute;\\n\");\n    fprintf(fp, \"    ShapeConnectionPin *connPin = nullptr;\\n\");\n    fprintf(fp, \"\\n\");\n    ClusterRefList::reverse_iterator revClusterRefIt = clusterRefs.rbegin();\n    while (revClusterRefIt != clusterRefs.rend())\n    {\n        ClusterRef *cRef = *revClusterRefIt;\n        fprintf(fp, \"    polygon = Polygon(%lu);\\n\", \n                (unsigned long)cRef->polygon().size());\n        for (size_t i = 0; i <cRef->polygon().size(); ++i)\n        {\n            fprintf(fp, \"    polygon.ps[%lu] = Point(%g, %g);\\n\", \n                    (unsigned long)i, cRef->polygon().at(i).x,\n                    cRef->polygon().at(i).y);\n        }\n        fprintf(fp, \"    new ClusterRef(router, polygon, %u);\\n\", cRef->id());\n        ++revClusterRefIt;\n    }\n    ObstacleList::reverse_iterator revObstacleIt = m_obstacles.rbegin();\n    while (revObstacleIt != m_obstacles.rend())\n    {\n        Obstacle *obstacle = *revObstacleIt;\n        obstacle->outputCode(fp);\n        ++revObstacleIt;\n    }\n    ConnRefList::reverse_iterator revConnRefIt = connRefs.rbegin();\n    while (revConnRefIt != connRefs.rend())\n    {\n        ConnRef *connRef = *revConnRefIt;\n        connRef->outputCode(fp);\n        ++revConnRefIt;\n    }\n\n    m_topology_addon->outputCode(fp);\n\n    fprintf(fp, \"    router->processTransaction();\\n\");\n    fprintf(fp, \"    router->outputInstanceToSVG();\\n\");\n\n    m_topology_addon->outputDeletionCode(fp);\n    fprintf(fp, \"    delete router;\\n\");\n    fprintf(fp, \"    return 0;\\n\");\n    fprintf(fp, \"};\\n\");\n    fprintf(fp, \"-->\\n\");\n\n    fprintf(fp, \"<g inkscape:groupmode=\\\"layer\\\" \"\n            \"inkscape:label=\\\"Clusters\\\">\\n\");\n    revClusterRefIt = clusterRefs.rbegin();\n    while (revClusterRefIt != clusterRefs.rend())\n    {\n        ClusterRef *cRef = *revClusterRefIt;\n        fprintf(fp, \"<path id=\\\"cluster-%u\\\" style=\\\"stroke-width: 1px; \"\n                \"stroke: black; fill: green; opacity: 0.1;\\\" d=\\\"\", \n                cRef->id());\n        for (size_t i = 0; i < cRef->polygon().size(); ++i)\n        {\n            fprintf(fp, \"%c %g %g \", ((i == 0) ? 'M' : 'L'), \n                    cRef->polygon().at(i).x, cRef->polygon().at(i).y);\n        }\n        fprintf(fp, \"Z\\\" />\\n\");\n\n        fprintf(fp, \"<path id=\\\"cluster-%u-rect\\\" style=\\\"stroke-width: 1px; \"\n                \"stroke: black; fill: green; opacity: 0.1;\\\" d=\\\"\", \n                cRef->id());\n        for (size_t i = 0; i < cRef->rectangularPolygon().size(); ++i)\n        {\n            fprintf(fp, \"%c %g %g \", ((i == 0) ? 'M' : 'L'), \n                    cRef->rectangularPolygon().at(i).x, \n                    cRef->rectangularPolygon().at(i).y);\n        }\n        fprintf(fp, \"Z\\\" />\\n\");\n        ++revClusterRefIt;\n    }\n    fprintf(fp, \"</g>\\n\");\n\n    fprintf(fp, \"<g inkscape:groupmode=\\\"layer\\\" \"\n    \"style=\\\"display: none;\\\" \"\n            \"inkscape:label=\\\"ShapePolygons\\\">\\n\");\n    ObstacleList::iterator obstacleIt = m_obstacles.begin();\n    while (obstacleIt != m_obstacles.end())\n    {\n        Obstacle *obstacle = *obstacleIt;\n        bool isShape = (nullptr != dynamic_cast<ShapeRef *> (obstacle));\n\n        if ( ! isShape )\n        {\n            // Don't output obstacles here, for now.\n            ++obstacleIt;\n            continue;\n        }\n\n        fprintf(fp, \"<path id=\\\"poly-%u\\\" style=\\\"stroke-width: 1px; \"\n                \"stroke: black; fill: %s; fill-opacity: 0.3;\\\" d=\\\"\", \n                obstacle->id(), (isShape) ? \"grey\" : \"red\");\n        for (size_t i = 0; i < obstacle->polygon().size(); ++i)\n        {\n            fprintf(fp, \"%c %g %g \", ((i == 0) ? 'M' : 'L'), \n                    obstacle->polygon().at(i).x, obstacle->polygon().at(i).y);\n        }\n        fprintf(fp, \"Z\\\" />\\n\");\n        ++obstacleIt;\n    }\n    fprintf(fp, \"</g>\\n\");\n\n    fprintf(fp, \"<g inkscape:groupmode=\\\"layer\\\" \"\n    \"style=\\\"display: none;\\\" \"\n            \"inkscape:label=\\\"ObstaclePolygons\\\">\\n\");\n    obstacleIt = m_obstacles.begin();\n    while (obstacleIt != m_obstacles.end())\n    {\n        Obstacle *obstacle = *obstacleIt;\n        bool isShape = (nullptr != dynamic_cast<ShapeRef *> (obstacle));\n\n        if ( ! isShape )\n        {\n            // Don't output obstacles here, for now.\n            ++obstacleIt;\n            continue;\n        }\n\n        Polygon polygon = obstacle->routingPolygon();\n        fprintf(fp, \"<path id=\\\"poly-%u\\\" style=\\\"stroke-width: 1px; \"\n                \"stroke: black; fill: %s; fill-opacity: 0.3;\\\" d=\\\"\", \n                obstacle->id(), (isShape) ? \"grey\" : \"red\");\n        for (size_t i = 0; i < polygon.size(); ++i)\n        {\n            fprintf(fp, \"%c %g %g \", ((i == 0) ? 'M' : 'L'), \n                    polygon.at(i).x, polygon.at(i).y);\n        }\n        fprintf(fp, \"Z\\\" />\\n\");\n        ++obstacleIt;\n    }\n    fprintf(fp, \"</g>\\n\");\n\n    fprintf(fp, \"<g inkscape:groupmode=\\\"layer\\\" \"\n            \"style=\\\"display: none;\\\" \"\n            \"inkscape:label=\\\"IdealJunctions\\\">\\n\");\n    for (ObstacleList::iterator obstacleIt = m_obstacles.begin();\n            obstacleIt != m_obstacles.end(); ++obstacleIt)\n    {\n        JunctionRef *junction = dynamic_cast<JunctionRef *> (*obstacleIt);\n        if (junction)\n        {\n            fprintf(fp, \"<circle id=\\\"idealJunction-%u\\\" cx=\\\"%g\\\" cy=\\\"%g\\\" \"\n                    \"r=\\\"8\\\" style=\\\"stroke: none; fill: %s; \"\n                    \"fill-opacity: 0.5;\\\"  />\\n\", junction->id(), \n                    junction->recommendedPosition().x, \n                    junction->recommendedPosition().y, \"green\");\n        }\n\n    }\n    fprintf(fp, \"</g>\\n\");\n\n    fprintf(fp, \"<g inkscape:groupmode=\\\"layer\\\" \"\n            \"inkscape:label=\\\"ObstacleRects\\\">\\n\");\n    obstacleIt = m_obstacles.begin();\n    while (obstacleIt != m_obstacles.end())\n    {\n        Obstacle *obstacle = *obstacleIt;\n        bool isShape = (nullptr != dynamic_cast<ShapeRef *> (obstacle));\n\n        if ( ! isShape )\n        {\n            // Don't output obstacles here, for now.\n            ++obstacleIt;\n            continue;\n        }\n\n        Box bBox = obstacle->routingBox();\n\n        fprintf(fp, \"<rect id=\\\"rect-%u\\\" x=\\\"%g\\\" y=\\\"%g\\\" width=\\\"%g\\\" \"\n                \"height=\\\"%g\\\" style=\\\"stroke-width: 1px; stroke: black; \"\n                \"fill: grey; stroke-opacity: 0.1; fill-opacity: 0.1;\\\" />\\n\",\n                obstacle->id(), bBox.min.x, bBox.min.y, \n                bBox.max.x - bBox.min.x, bBox.max.y - bBox.min.y);\n        ++obstacleIt;\n    }\n    fprintf(fp, \"</g>\\n\");\n\n    fprintf(fp, \"<g inkscape:groupmode=\\\"layer\\\" \"\n            \"inkscape:label=\\\"VisGraph\\\"\"\n            \">\\n\");\n    EdgeInf *finish = nullptr;\n    fprintf(fp, \"<g inkscape:groupmode=\\\"layer\\\" \"\n            \"style=\\\"display: none;\\\" \"\n            \"inkscape:label=\\\"VisGraph-shape\\\"\"\n            \">\\n\");\n    finish = visGraph.end();\n    for (EdgeInf *t = visGraph.begin(); t != finish; t = t->lstNext)\n    {\n        std::pair<VertID, VertID> ids = t->ids();\n        bool isConn = ids.first.isConnPt() || ids.second.isConnPt();\n        if (isConn)\n        {\n            continue;\n        }\n        std::pair<Point, Point> ptpair = t->points();\n        Point p1 = ptpair.first;\n        Point p2 = ptpair.second;\n        \n        reduceRange(p1.x);\n        reduceRange(p1.y);\n        reduceRange(p2.x);\n        reduceRange(p2.y);\n        \n        fprintf(fp, \"<path d=\\\"M %g %g L %g %g\\\" \"\n                \"style=\\\"fill: none; stroke: %s; stroke-width: 1px;\\\" />\\n\", \n                p1.x, p1.y, p2.x, p2.y,\n                (ids.first.isConnPt() || ids.second.isConnPt()) ? \"blue\" :\n                \"red\");\n    }\n    fprintf(fp, \"</g>\\n\");\n    fprintf(fp, \"<g inkscape:groupmode=\\\"layer\\\" \"\n            \"style=\\\"display: none;\\\" \"\n            \"inkscape:label=\\\"VisGraph-conn\\\"\"\n            \">\\n\");\n    finish = visGraph.end();\n    for (EdgeInf *t = visGraph.begin(); t != finish; t = t->lstNext)\n    {\n        std::pair<VertID, VertID> ids = t->ids();\n        bool isConn = ids.first.isConnPt() || ids.second.isConnPt();\n        if (!isConn)\n        {\n            continue;\n        }\n        std::pair<Point, Point> ptpair = t->points();\n        Point p1 = ptpair.first;\n        Point p2 = ptpair.second;\n        \n        reduceRange(p1.x);\n        reduceRange(p1.y);\n        reduceRange(p2.x);\n        reduceRange(p2.y);\n        \n        fprintf(fp, \"<path d=\\\"M %g %g L %g %g\\\" \"\n                \"style=\\\"fill: none; stroke: %s; stroke-width: 1px;\\\" />\\n\", \n                p1.x, p1.y, p2.x, p2.y,\n                (ids.first.isConnPt() || ids.second.isConnPt()) ? \"blue\" :\n                \"red\");\n    }\n    fprintf(fp, \"</g>\\n\");\n    fprintf(fp, \"</g>\\n\");\n\n    fprintf(fp, \"<g inkscape:groupmode=\\\"layer\\\" \"\n            \"style=\\\"display: none;\\\" \"\n            \"inkscape:label=\\\"OrthogVisGraph\\\">\\n\");\n    finish = visOrthogGraph.end();\n    for (EdgeInf *t = visOrthogGraph.begin(); t != finish; t = t->lstNext)\n    {\n        std::pair<Point, Point> ptpair = t->points();\n        Point p1 = ptpair.first;\n        Point p2 = ptpair.second;\n        \n        reduceRange(p1.x);\n        reduceRange(p1.y);\n        reduceRange(p2.x);\n        reduceRange(p2.y);\n        \n        std::pair<VertID, VertID> ids = t->ids();\n\n        fprintf(fp, \"<path d=\\\"M %g %g L %g %g\\\" \"\n                \"style=\\\"fill: none; stroke: %s; stroke-width: 1px;\\\" />\\n\", \n                p1.x, p1.y, p2.x, p2.y,\n                (ids.first.isConnPt() || ids.second.isConnPt()) ? \"green\" : \n                \"red\");\n    }\n    fprintf(fp, \"</g>\\n\");\n\n    fprintf(fp, \"<g inkscape:groupmode=\\\"layer\\\" \"\n            \"style=\\\"display: none;\\\" \"\n            \"inkscape:label=\\\"RawConnectors\\\"\"\n            \">\\n\");\n    ConnRefList::iterator connRefIt = connRefs.begin();\n    while (connRefIt != connRefs.end())\n    {\n        ConnRef *connRef = *connRefIt;\n    \n        PolyLine route = connRef->route();\n        if (!route.empty())\n        {\n            fprintf(fp, \"<path id=\\\"raw-%u\\\" d=\\\"M %g %g \", connRef->id(),\n                    route.ps[0].x, route.ps[0].y);\n            for (size_t i = 1; i < route.size(); ++i)\n            {\n                fprintf(fp, \"L %g %g \", route.ps[i].x, route.ps[i].y);\n            }\n            fprintf(fp, \"\\\" \");\n            if (connRef->src() && connRef->dst())\n            {\n                fprintf(fp, \"debug=\\\"src: %d dst: %d\\\" \",\n                        connRef->src()->visDirections,\n                        connRef->dst()->visDirections);\n            }\n            fprintf(fp, \"style=\\\"fill: none; stroke: black; \"\n                    \"stroke-width: 1px;\\\" />\\n\");\n        }\n\n        ++connRefIt;\n    }\n    fprintf(fp, \"</g>\\n\");\n\n    fprintf(fp, \"<g inkscape:groupmode=\\\"layer\\\" \"\n            \"style=\\\"display: none;\\\" \"\n            \"inkscape:label=\\\"CurvedDisplayConnectors\\\"\"\n            \">\\n\");\n    connRefIt = connRefs.begin();\n    while (connRefIt != connRefs.end())\n    {\n        ConnRef *connRef = *connRefIt;\n    \n        PolyLine route = connRef->displayRoute().curvedPolyline(8);\n        if (!route.empty())\n        {\n            fprintf(fp, \"<path id=\\\"curved-%u\\\" d=\\\"M %g %g \", connRef->id(),\n                    route.ps[0].x, route.ps[0].y);\n            for (size_t i = 1; i < route.size(); ++i)\n            {\n                if (route.ts[i] == 'C')\n                {\n                    fprintf(fp, \"%c %g %g %g %g %g %g\", route.ts[i], \n                            route.ps[i].x, route.ps[i].y,\n                            route.ps[i+1].x, route.ps[i+1].y,\n                            route.ps[i+2].x, route.ps[i+2].y);\n                    i += 2;\n                }\n                else\n                {\n                    fprintf(fp, \"%c %g %g \", route.ts[i], \n                            route.ps[i].x, route.ps[i].y);\n                }\n            }\n            fprintf(fp, \"\\\" \");\n            if (connRef->src() && connRef->dst())\n            {\n                fprintf(fp, \"debug=\\\"src: %d dst: %d\\\" \",\n                        connRef->src()->visDirections,\n                        connRef->dst()->visDirections);\n            }\n            fprintf(fp, \"style=\\\"fill: none; stroke: black; \"\n                    \"stroke-width: 1px;\\\" />\\n\");\n        }\n        \n        ++connRefIt;\n    }\n    fprintf(fp, \"</g>\\n\");\n\n\n    fprintf(fp, \"<g inkscape:groupmode=\\\"layer\\\" \"\n            \"inkscape:label=\\\"DisplayConnectors\\\"\"\n            \">\\n\");\n    connRefIt = connRefs.begin();\n    while (connRefIt != connRefs.end())\n    {\n        ConnRef *connRef = *connRefIt;\n    \n        PolyLine route = connRef->displayRoute();\n        if (!route.empty())\n        {\n            fprintf(fp, \"<path id=\\\"disp-%u\\\" d=\\\"M %g %g \", connRef->id(),\n                    route.ps[0].x, route.ps[0].y);\n            for (size_t i = 1; i < route.size(); ++i)\n            {\n                fprintf(fp, \"L %g %g \", route.ps[i].x, route.ps[i].y);\n            }\n            fprintf(fp, \"\\\" \");\n            if (connRef->src() && connRef->dst())\n            {\n                fprintf(fp, \"debug=\\\"src: %d dst: %d\\\" \",\n                        connRef->src()->visDirections,\n                        connRef->dst()->visDirections);\n            }\n            fprintf(fp, \"style=\\\"fill: none; stroke: black; \"\n                    \"stroke-width: 1px;\\\" />\\n\");\n        }\n        \n        ++connRefIt;\n    }\n    fprintf(fp, \"</g>\\n\");\n\n    fprintf(fp, \"<g inkscape:groupmode=\\\"layer\\\" \"\n            \"inkscape:label=\\\"ConnectorCheckpoints\\\"\"\n            \">\\n\");\n    connRefIt = connRefs.begin();\n    while (connRefIt != connRefs.end())\n    {\n        ConnRef *connRef = *connRefIt;\n    \n        for (size_t i = 0; i < connRef->m_checkpoints.size(); ++i)\n        {\n            fprintf(fp, \"<circle id=\\\"checkpoint-%u-%d\\\" cx=\\\"%g\\\" cy=\\\"%g\\\" \"\n                    \"r=\\\"8\\\" style=\\\"stroke: none; fill: red; \"\n                    \"fill-opacity: 0.25;\\\"  />\\n\", connRef->id(), (int) i,\n                    connRef->m_checkpoints[i].point.x, \n                    connRef->m_checkpoints[i].point.y);\n        }\n        \n        ++connRefIt;\n    }\n    fprintf(fp, \"</g>\\n\");\n\n\n    fprintf(fp, \"</svg>\\n\");\n    fclose(fp);\n    //printInfo();\n    // Restore locale\n    setlocale(LC_NUMERIC, originalLocale);\n}\n\nvoid Router::outputDiagramSVG(std::string instanceName, LineReps *lineReps)\n{\n    std::string filename;\n    if (!instanceName.empty())\n    {\n        filename = instanceName;\n    }\n    else\n    {\n        filename = \"libavoid-diagram\";\n    }\n    filename += \".svg\";\n    FILE *fp = fopen(filename.c_str(), \"w\");\n\n    if (fp == nullptr)\n    {\n        return;\n    }\n\n    double minX = LIMIT;\n    double minY = LIMIT;\n    double maxX = -LIMIT;\n    double maxY = -LIMIT;\n\n    VertInf *curr = vertices.connsBegin();\n    while (curr)\n    {\n        Point p = curr->point;\n\n        reduceRange(p.x);\n        reduceRange(p.y);\n        \n        if (p.x > -LIMIT)\n        {\n            minX = std::min(minX, p.x);\n        }\n        if (p.x < LIMIT)\n        {\n            maxX = std::max(maxX, p.x);\n        }\n        if (p.y > -LIMIT)\n        {\n            minY = std::min(minY, p.y);\n        }\n        if (p.y < LIMIT)\n        {\n            maxY = std::max(maxY, p.y);\n        }\n        curr = curr->lstNext;\n    }\n    minX -= 8;\n    minY -= 8;\n    maxX += 8;\n    maxY += 8;\n\n    fprintf(fp, \"<?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?>\\n\");\n    fprintf(fp, \"<svg xmlns:inkscape=\\\"http://www.inkscape.org/namespaces/inkscape\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"100%%\\\" height=\\\"100%%\\\" viewBox=\\\"%g %g %g %g\\\">\\n\", minX, minY, maxX - minX, maxY - minY);\n\n    fprintf(fp, \"<g inkscape:groupmode=\\\"layer\\\" \"\n            \"inkscape:label=\\\"ShapesRect\\\">\\n\");\n    ObstacleList::iterator obstacleIt = m_obstacles.begin();\n    while (obstacleIt != m_obstacles.end())\n    {\n        Obstacle *obstacle = *obstacleIt;\n        bool isShape = (nullptr != dynamic_cast<ShapeRef *> (obstacle));\n\n        if ( ! isShape )\n        {\n            // Don't output non-shape obstacles here, for now.\n            ++obstacleIt;\n            continue;\n        }\n\n        Box bBox = obstacle->polygon().offsetBoundingBox(0.0);\n\n        fprintf(fp, \"<rect id=\\\"rect-%u\\\" x=\\\"%g\\\" y=\\\"%g\\\" width=\\\"%g\\\" \"\n                \"height=\\\"%g\\\" style=\\\"stroke-width: 1px; stroke: black; \"\n                \"fill: grey; stroke-opacity: 0.5; fill-opacity: 0.4;\\\" />\\n\",\n                obstacle->id(), bBox.min.x, bBox.min.y,\n                bBox.max.x - bBox.min.x, bBox.max.y - bBox.min.y);\n        ++obstacleIt;\n    }\n    fprintf(fp, \"</g>\\n\");\n\n    fprintf(fp, \"<g inkscape:groupmode=\\\"layer\\\" \"\n            \"inkscape:label=\\\"DisplayConnectors\\\"\"\n            \">\\n\");\n    ConnRefList::iterator connRefIt = connRefs.begin();\n    while (connRefIt != connRefs.end())\n    {\n        ConnRef *connRef = *connRefIt;\n    \n        PolyLine route = connRef->displayRoute();\n        if (!route.empty())\n        {\n            fprintf(fp, \"<path id=\\\"disp-%u\\\" d=\\\"M %g %g \", connRef->id(),\n                    route.ps[0].x, route.ps[0].y);\n            for (size_t i = 1; i < route.size(); ++i)\n            {\n                fprintf(fp, \"L %g %g \", route.ps[i].x, route.ps[i].y);\n            }\n            fprintf(fp, \"\\\" \");\n            fprintf(fp, \"style=\\\"fill: none; stroke: black; \"\n                    \"stroke-width: 1px;\\\" />\\n\");\n\n            /*\n            for (size_t i = 1; i < route.size(); ++i)\n            {\n                if (route.segmentHasCheckpoint[i - 1])\n                {\n                    fprintf(fp, \"<path d=\\\"M %g %g \", \n                            route.ps[i - 1].x, route.ps[i - 1].y);\n                    fprintf(fp, \"L %g %g\\\" \", route.ps[i].x, route.ps[i].y);\n                    fprintf(fp, \"style=\\\"fill: none; stroke: red; \"\n                            \"stroke-width: 1px; stroke-opacity: 1;\\\" />\\n\");\n                }\n            }\n            */\n        }\n        \n        ++connRefIt;\n    }\n    fprintf(fp, \"</g>\\n\");\n\n    if (lineReps)\n    {\n\n        for (LineReps::iterator it = lineReps->begin(); it != lineReps->end();\n                ++it)\n        {\n            fprintf(fp, \"<path d=\\\"M %g %g \", \n                    it->begin.x, it->begin.y);\n            fprintf(fp, \"L %g %g\\\" \", it->end.x, it->end.y);\n            fprintf(fp, \"style=\\\"fill: none; stroke: red; \"\n                    \"stroke-width: 1px; stroke-opacity: 0.7;\\\" />\\n\");\n        }\n    }\n\n    fprintf(fp, \"</svg>\\n\");\n    fclose(fp);\n}\n\nvoid Router::outputDiagram(std::string instanceName)\n{\n    outputDiagramText(instanceName);\n#ifdef SVG_OUTPUT\n    outputInstanceToSVG(instanceName);\n#endif\n}\n\nvoid Router::outputDiagramText(std::string instanceName)\n{\n    std::string filename;\n    if (!instanceName.empty())\n    {\n        filename = instanceName;\n    }\n    else\n    {\n        filename = \"libavoid-diagram\";\n    }\n    filename += \".txt\";\n    FILE *fp = fopen(filename.c_str(), \"w\");\n\n    if (fp == nullptr)\n    {\n        return;\n    }\n\n    ObstacleList::iterator obstacleIt = m_obstacles.begin();\n    while (obstacleIt != m_obstacles.end())\n    {\n        Obstacle *obstacle = *obstacleIt;\n        bool isShape = (nullptr != dynamic_cast<ShapeRef *> (obstacle));\n\n        if ( ! isShape )\n        {\n            // Don't output non-shape obstacles here, for now.\n            ++obstacleIt;\n            continue;\n        }\n\n        Box bBox = obstacle->polygon().offsetBoundingBox(0.0);\n\n        fprintf(fp, \"rect\\n\");\n        fprintf(fp, \"id=%u\\n\", obstacle->id());\n        fprintf(fp, \"x=%g\\n\", bBox.min.x);\n        fprintf(fp, \"y=%g\\n\", bBox.min.y);\n        fprintf(fp, \"width=%g\\n\", bBox.max.x - bBox.min.x);\n        fprintf(fp, \"height=%g\\n\", bBox.max.y - bBox.min.y);\n        fprintf(fp, \"\\n\");\n\n        ++obstacleIt;\n    }\n\n    ConnRefList::iterator connRefIt = connRefs.begin();\n    while (connRefIt != connRefs.end())\n    {\n        ConnRef *connRef = *connRefIt;\n\n        PolyLine route = connRef->displayRoute();\n        if (!route.empty())\n        {\n            fprintf(fp, \"path\\n\");\n            fprintf(fp, \"id=%u\\n\", connRef->id());\n            for (size_t i = 0; i < route.size(); ++i)\n            {\n                fprintf(fp, \"p%zu: %g %g \", i, route.ps[i].x, route.ps[i].y);\n                fprintf(fp, \"\\n\");\n            }\n            fprintf(fp, \"\\n\");\n        }\n\n        ++connRefIt;\n    }\n\n    fprintf(fp, \"\\n\");\n\n    fclose(fp);\n}\n\nHyperedgeNewAndDeletedObjectLists \n        Router::newAndDeletedObjectListsFromHyperedgeImprovement(void) const\n{\n    return m_hyperedge_improver.newAndDeletedObjectLists();\n}\n\n\nConnRerouteFlagDelegate::ConnRerouteFlagDelegate()\n{\n}\n\nConnRerouteFlagDelegate::~ConnRerouteFlagDelegate()\n{\n}\n\nbool *ConnRerouteFlagDelegate::addConn(ConnRef *conn)\n{\n    m_mapping.push_back(std::make_pair(conn, false));\n    return &(m_mapping.back().second);\n}\n\nvoid ConnRerouteFlagDelegate::removeConn(ConnRef *conn)\n{\n    std::list<std::pair<ConnRef *, bool> >::iterator it;\n    for (it = m_mapping.begin(); it != m_mapping.end(); ++it)\n    {\n        if (it->first == conn)\n        {\n            it->first = nullptr;\n        }\n    }\n}\n\n\nvoid ConnRerouteFlagDelegate::alertConns(void)\n{\n    std::list<std::pair<ConnRef *, bool> >::iterator it;\n    for (it = m_mapping.begin(); it != m_mapping.end(); ++it)\n    {\n        if ((it->first != nullptr) && (it->second == true))\n        {\n            it->second = false;\n            it->first->m_needs_reroute_flag = true;\n        }\n    }\n}\n\n\n}\n\n"
  },
  {
    "path": "cola/libavoid/router.h",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libavoid - Fast, Incremental, Object-avoiding Line Router\n *\n * Copyright (C) 2004-2015  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * Licensees holding a valid commercial license may use this file in\n * accordance with the commercial license agreement provided with the \n * library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  \n *\n * Author(s):  Michael Wybrow\n*/\n\n//! @file    router.h\n//! @brief   Contains the interface for the Router class.\n\n\n#ifndef AVOID_ROUTER_H\n#define AVOID_ROUTER_H\n\n#include <ctime>\n#include <list>\n#include <utility>\n#include <string>\n\n#include \"libavoid/dllexport.h\"\n#include \"libavoid/connector.h\"\n#include \"libavoid/vertices.h\"\n#include \"libavoid/graph.h\"\n#include \"libavoid/timer.h\"\n#include \"libavoid/hyperedge.h\"\n#include \"libavoid/actioninfo.h\"\n#include \"libavoid/hyperedgeimprover.h\"\n\n\nnamespace Avoid {\n\n// LineReps: Used for highlighting certain areas in debugging output.\nstruct LineRep\n{\n    Point begin;\n    Point end;\n};\ntypedef std::list<LineRep> LineReps;\n\n\ntypedef std::list<unsigned int> IntList;\n\nclass ShapeRef;\nclass JunctionRef;\nclass ClusterRef;\ntypedef std::list<ClusterRef *> ClusterRefList;\nclass Obstacle;\ntypedef std::list<Obstacle *> ObstacleList;\nclass DebugHandler;\n\n//! @brief  Flags that can be passed to the router during initialisation \n//!         to specify options.\nenum RouterFlag\n{\n    //! @brief  This option specifies that the router should maintain the\n    //!         structures necessary to allow poly-line connector routing.\n    PolyLineRouting = 1,\n    //! @brief  This option specifies that the router should maintain the\n    //!         structures necessary to allow orthogonal connector routing.\n    OrthogonalRouting = 2\n};\n\n\nstatic const unsigned int runningTo = 1;\nstatic const unsigned int runningFrom = 2;\nstatic const unsigned int runningToAndFrom = runningTo | runningFrom;\n\n//! @brief  Types of routing parameters and penalties that can be used to \n//!         tailor the style and improve the quality of the connector \n//!         routes produced.\nenum RoutingParameter\n{\n    //! @brief  This penalty is applied for each segment in the connector \n    //!         path beyond the first.  This should always normally be set\n    //!         when doing orthogonal routing to prevent step-like connector\n    //!         paths.\n    //! @note   This penalty must be set (i.e., be greater than zero) in \n    //!         order for orthogonal connector nudging to be performed, since\n    //!         this requires reasonable initial routes. \n    segmentPenalty = 0,\n    \n    //! @brief  This penalty is applied in its full amount to tight acute \n    //!         bends in the connector path.  A smaller portion of the penalty\n    //!         is applied for slight bends, i.e., where the bend is close to\n    //!         180 degrees.  This is useful for polyline routing where there\n    //!         is some evidence that tighter corners are worse for \n    //!         readability, but that slight bends might not be so bad, \n    //!         especially when smoothed by curves.\n    anglePenalty,\n    \n    //! @brief  This penalty is applied whenever a connector path crosses \n    //!         another connector path.  It takes shared paths into \n    //!         consideration and the penalty is only applied if there\n    //!         is an actual crossing.\n    //! @note   This penalty is still experimental!  It is not recommended\n    //!         for normal use.\n    crossingPenalty,\n    \n    //! @brief  This penalty is applied whenever a connector path crosses \n    //!         a cluster boundary.\n    //! @note   This penalty is still experimental!  It is not recommended\n    //!         for normal use.\n    //! @note   This penalty is very slow.  You can override the method\n    //!         Router::shouldContinueTransactionWithProgress() to check\n    //!         progress and possibly cancel overly slow transactions.\n    clusterCrossingPenalty,\n    \n    //! @brief  This penalty is applied whenever a connector path shares \n    //!         some segments with an immovable portion of an existing \n    //!         connector route (such as the first or last segment of a\n    //!         connector).\n    //! @note   This penalty is still experimental!  It is not recommended\n    //!         for normal use.\n    fixedSharedPathPenalty,\n    \n    //! @brief  This penalty is applied to port selection choice when the \n    //!         other end of the connector being routed does not appear in \n    //!         any of the 90 degree visibility cones centered on the\n    //!         visibility directions for the port.\n    //! @note   This penalty is still experimental!  It is not recommended\n    //!         for normal use.\n    //! @note   This penalty is very slow.  You can override the method\n    //!         Router::shouldContinueTransactionWithProgress() to check\n    //!         progress and possibly cancel overly slow transactions.\n    portDirectionPenalty,\n    \n    //! @brief This parameter defines the spacing distance that will be added\n    //!        to the sides of each shape when determining obstacle sizes for\n    //!        routing.  This controls how closely connectors pass shapes, and\n    //!        can be used to prevent connectors overlapping with shape \n    //!        boundaries. By default, this distance is set to a value of 0.\n    shapeBufferDistance,\n    \n    //! @brief This parameter defines the spacing distance that will be used\n    //!        for nudging apart overlapping corners and line segments of \n    //!        connectors.  By default, this distance is set to a value of 4.\n    idealNudgingDistance,\n\n    //! @brief  This penalty is applied whenever a connector path travels\n    //!         in the direction opposite of the destination from the source\n    //!         endpoint.  By default this penalty is set to zero.  This \n    //!         shouldn't be needed in most cases but can be useful if you\n    //!         use penalties such as ::crossingPenalty which cause connectors\n    //!         to loop around obstacles.\n    reverseDirectionPenalty,\n\n    // Used for determining the size of the routing parameter array.\n    // This should always we the last value in the enum.\n    lastRoutingParameterMarker\n};\n\n// Backwards compatibility\ntypedef enum RoutingParameter PenaltyType;\n\n\n//! @brief  Types of routing options that can be enabled.\nenum RoutingOption\n{\n    //! This option causes the final segments of connectors, which are \n    //! attached to shapes, to be nudged apart.  Usually these segments \n    //! are fixed, since they are considered to be attached to ports.\n    //!\n    //! Defaults to false.\n    //!\n    //! This option also causes routes running through the same checkpoint \n    //! to be nudged apart.\n    //!\n    //! This option has no effect if ::nudgeSharedPathsWithCommonEndPoint is\n    //! set to false,\n    //!\n    //! @note   This will allow routes to be nudged up to the bounds of shapes.\n    //!\n    nudgeOrthogonalSegmentsConnectedToShapes = 0,\n    \n    //! This option causes hyperedge routes to be locally improved fixing\n    //! obviously bad paths.  As part of this process libavoid will\n    //! effectively move junctions, setting new ideal positions which can be\n    //! accessed via JunctionRef::recommendedPosition() for each junction.\n    //!\n    //! Defaults to true.\n    //!\n    //! This will not add or remove junctions, so will keep the hyperedge\n    //! topology the same.  Better routes can be achieved by enabling the\n    //! ::improveHyperedgeRoutesMovingAddingAndDeletingJunctions option.\n    //!\n    //! If initial sensible positions for junctions in hyperedges are not\n    //! known you can register those hyperedges with the HyperedgeRerouter\n    //! class for complete rerouting.\n    //!\n    //! @sa   improveHyperedgeRoutesMovingAddingAndDeletingJunctions\n    //! @sa   Router::hyperedgeRerouter()\n    //!\n    improveHyperedgeRoutesMovingJunctions,\n    \n    //! This option penalises and attempts to reroute orthogonal shared \n    //! connector paths terminating at a common junction or shape \n    //! connection pin.  When multiple connector paths enter or leave \n    //! the same side of a junction (or shape pin), the router will \n    //! attempt to reroute these to different sides of the junction or \n    //! different shape pins. \n    //!\n    //! Defaults to false.\n    //!\n    //! This option depends on the ::fixedSharedPathPenalty penalty having \n    //! been set.\n    //!\n    //! @sa     fixedSharedPathPenalty\n    //! @note   This option is still experimental!  It is not recommended\n    //!         for normal use.\n    //!\n    penaliseOrthogonalSharedPathsAtConnEnds,\n    \n    //! This option can be used to control whether collinear line \n    //! segments that touch just at their ends will be nudged apart.\n    //! The overlap will usually be resolved in the other dimension,\n    //! so this is not usually required.\n    //!\n    //! Defaults to false.\n    //!\n    nudgeOrthogonalTouchingColinearSegments,\n    \n    //! This option can be used to control whether the router performs\n    //! a preprocessing step before orthogonal nudging where is tries\n    //! to unify segments and centre them in free space.  This \n    //! generally results in better quality ordering and nudging.\n    //!         \n    //! Defaults to true.\n    //!\n    //! You may wish to turn this off for large examples where it\n    //! can be very slow and will make little difference.\n    //!\n    performUnifyingNudgingPreprocessingStep,\n    \n    //! This option causes hyperedge routes to be locally improved fixing\n    //! obviously bad paths.\n    //! \n    //! It can cause junctions and connectors to be added or removed from\n    //! hyperedges.  To get details of these changes for each connector you can\n    //! call Router::newAndDeletedObjectListsFromHyperedgeImprovement().\n    //!\n    //! As part of this process libavoid will effectively move junctions by\n    //! setting new ideal positions for each remaining or added junction, \n    //! which can be read from JunctionRef::recommendedPosition() for each \n    //! junction.\n    //!\n    //! Defaults to false.\n    //!\n    //! If set, this option overrides the ::improveHyperedgeRoutesMovingJunctions\n    //! option.\n    //!\n    //! If initial sensible positions for junctions in hyperedges are not\n    //! known you can register those hyperedges with the HyperedgeRerouter\n    //! class for complete rerouting.\n    //!\n    //! @sa   improveHyperedgeRoutesMovingJunctions\n    //! @sa   Router::hyperedgeRerouter()\n    //!\n    improveHyperedgeRoutesMovingAddingAndDeletingJunctions,\n\n    //! This option determines whether intermediate segments of connectors that\n    //! are attached to common endpoints will be nudged apart.  Usually these\n    //! segments get nudged apart, but you may want to turn this off if you would\n    //! prefer that entire shared paths terminating at a common end point should\n    //! overlap.\n    //!\n    //! Defaults to true.\n    //!\n    nudgeSharedPathsWithCommonEndPoint,\n\n\n    // Used for determining the size of the routing options array.\n    // This should always we the last value in the enum.\n    lastRoutingOptionMarker\n};\n\n//! @brief  Types of routing phases reported by \n//!         Router::shouldContinueTransactionWithProgress().\n//!\n//! This phases will occur in the order given here, but each phase may take\n//! varying amounts of time.\n//!\nenum TransactionPhases \n{\n    //! @brief  The orthogonal visibility graph is built by conducting a \n    //!         scan in each dimension.  This is the x-dimension.\n    TransactionPhaseOrthogonalVisibilityGraphScanX = 1,\n    //! @brief  The orthogonal visibility graph is built by conducting a \n    //!         scan in each dimension.  This is the y-dimension.\n    TransactionPhaseOrthogonalVisibilityGraphScanY,\n    //! @brief  Initial routes are searched for in the visibility graph.\n    TransactionPhaseRouteSearch,\n    //! @brief  With crossing penalties enabled, crossing detection is \n    //!         performed to find all crossings.\n    TransactionPhaseCrossingDetection,\n    //! @brief  Crossing connectors are rerouted to search for better routes.\n    TransactionPhaseRerouteSearch,\n    //! @brief  Orthogonal edge segments are nudged apart in the x-dimension.\n    TransactionPhaseOrthogonalNudgingX,\n    //! @brief  Orthogonal edge segments are nudged apart in the y-dimension.\n    TransactionPhaseOrthogonalNudgingY,\n    //! @brief  Not a real phase, but represents the router is finished (or has\n    //!         aborted) the transaction and you may interact with is again.\n    TransactionPhaseCompleted\n};\n\n// NOTE: This is an internal helper class that should not be used by the user.\n//\n// This class allows edges in the visibility graph to store a\n// pointer to a boolean registering when a connector needs to\n// reroute, while allowing connectors to be deleted without\n// needing to scan and remove these references from the visibility\n// graph.  Instead the bool is stored in this delegate and the\n// connector is alerted later, so long as it hasn't since been\n// deleted.\nclass ConnRerouteFlagDelegate {\n    public:\n        ConnRerouteFlagDelegate();\n        ~ConnRerouteFlagDelegate();\n        bool *addConn(ConnRef *conn);\n        void removeConn(ConnRef *conn);\n        void alertConns(void);\n    private:\n        std::list<std::pair<ConnRef *, bool> > m_mapping;\n};\n\nstatic const double zeroParamValue = 0;\nstatic const double chooseSensibleParamValue = -1;\n\n// NOTE: This is an internal helper class that should not be used by the user.\n//\n// It is used by libtopology to add additional functionality to libavoid\n// while keeping libavoid dependency free.\nclass TopologyAddonInterface\n{\n    public:\n        TopologyAddonInterface()\n        {\n        }\n        virtual ~TopologyAddonInterface()\n        {\n        }\n        virtual TopologyAddonInterface *clone(void) const\n        {\n            return new TopologyAddonInterface(*this);\n        }\n\n        virtual void improveOrthogonalTopology(Router *router)\n        {\n            (void)(router);  // Avoid unused parameter warning.\n        }\n        virtual bool outputCode(FILE *fp) const\n        {\n            (void)(fp);  // Avoid unused parameter warning.\n            return false;\n        }\n        virtual bool outputDeletionCode(FILE *fp) const\n        {\n            (void)(fp);  // Avoid unused parameter warning.\n            return false;\n        }\n};\n\n\n//! @brief   The Router class represents a libavoid router instance.\n//!\n//! Usually you would keep a separate Router instance for each diagram\n//! or layout you have open in your application.\n//\nclass AVOID_EXPORT Router {\n    public:\n        //! @brief  Constructor for router instance.\n        //!\n        //! @param[in]  flags  One or more Avoid::RouterFlag options to \n        //!                    control the behaviour of the router.\n        Router(const unsigned int flags);\n\n        //! @brief  Destructor for router instance.\n        //!\n        //! @note   Destroying a router instance will delete all remaining\n        //!         shapes and connectors, thereby invalidating any existing\n        //!         pointers to them.\n        virtual ~Router();\n\n        ObstacleList m_obstacles;\n        ConnRefList connRefs;\n        ClusterRefList clusterRefs;\n        EdgeList visGraph;\n        EdgeList invisGraph;\n        EdgeList visOrthogGraph;\n        ContainsMap contains;\n        VertInfList vertices;\n        ContainsMap enclosingClusters;\n        \n        bool PartialTime;\n        bool SimpleRouting;\n        bool ClusteredRouting;\n\n        // Poly-line routing options:\n        bool IgnoreRegions;\n        bool UseLeesAlgorithm;\n        bool InvisibilityGrph;\n       \n        // General routing options:\n        bool SelectiveReroute;\n        \n        bool PartialFeedback;\n        bool RubberBandRouting;\n        \n\n        // Instrumentation:\n#ifdef AVOID_PROFILE\n        Timer timers;\n#endif\n        int st_checked_edges;\n\n        //! @brief Allows setting of the behaviour of the router in regard\n        //!        to transactions.  This controls whether transactions are\n        //!        used to queue changes and process them efficiently at once\n        //!        or they are instead processed immediately.\n        //!\n        //! It is more efficient to perform actions like shape movement,\n        //! addition or deletion as batch tasks, and reroute the necessary\n        //! connectors just once after these actions have been performed.\n        //! For this reason, libavoid allows you to group such actions into\n        //! \"transactions\" that are processed efficiently when the \n        //! processTransaction() method is called.\n        //!\n        //! By default, the router will process all actions as transactions.\n        //! If transactionUse() is set to false, then all actions will get \n        //! processed immediately, and cause immediate routing callbacks to \n        //! all affected connectors after each action.\n        //!\n        //! @param[in]  transactions  A boolean value specifying whether to\n        //!                           use transactions.\n        //!\n        void setTransactionUse(const bool transactions);\n\n        //! @brief Reports whether the router groups actions into transactions.\n        //!\n        //! @return A boolean value describing whether transactions are in use.\n        //!\n        //! @sa setTransactionUse\n        //! @sa processTransaction\n        //!\n        bool transactionUse(void) const;\n\n        //! @brief Finishes the current transaction and processes all the \n        //!        queued object changes efficiently.\n        //!\n        //! This method will efficiently process all moves, additions and\n        //! deletions that have occurred since processTransaction() was \n        //! last called.\n        //!\n        //! If transactionUse() is false, then all actions will have been \n        //! processed immediately and this method will do nothing.\n        //!\n        //! @return A boolean value describing whether there were any actions\n        //!         to process.\n        //!\n        //! @sa setTransactionUse\n        //!\n        bool processTransaction(void);\n\n        //! @brief Delete a shape from the router scene.\n        //!\n        //! Connectors that could have a better (usually shorter) path after\n        //! the removal of this shape will be marked as needing to be rerouted.\n        //!\n        //! If the router is using transactions, then this action will occur\n        //! the next time Router::processTransaction() is called.  See\n        //! Router::setTransactionUse() for more information.\n        //!\n        //! You should not use the shape reference again after this call.\n        //! The router will handle freeing of the shape's memory.\n        //!\n        //! @param[in]  shape  Pointer reference to the shape being removed.\n        //!\n        void deleteShape(ShapeRef *shape);\n\n        //! @brief Move or resize an existing shape within the router scene.\n        //!\n        //! A new polygon for the shape can be given to effectively move or \n        //! resize the shape with the scene.  Connectors that intersect the \n        //! new shape polygon, or that could have a better (usually shorter)\n        //! path after the change, will be marked as needing to be rerouted.\n        //!\n        //! If the router is using transactions, then this action will occur\n        //! the next time Router::processTransaction() is called.  See\n        //! Router::setTransactionUse() for more information.\n        //!\n        //! @param[in]  shape       Pointer reference to the shape being \n        //!                         moved/resized.\n        //! @param[in]  newPoly     The new polygon boundary for the shape.\n        //! @param[in]  first_move  This option is used for some advanced \n        //!                         (currently undocumented) behaviour and \n        //!                         it should be ignored for the moment.\n        //!\n        void moveShape(ShapeRef *shape, const Polygon& newPoly,\n                const bool first_move = false);\n\n        //! @brief Move an existing shape within the router scene by a relative\n        //!        distance.\n        //!         \n        //! Connectors that intersect the shape's new position, or that could \n        //! have a better (usually shorter) path after the change, will be \n        //! marked as needing to be rerouted.\n        //!\n        //! If the router is using transactions, then this action will occur\n        //! the next time Router::processTransaction() is called.  See\n        //! Router::setTransactionUse() for more information.\n        //!\n        //! @param[in]  shape       Pointer reference to the shape being moved.\n        //! @param[in]  xDiff       The distance to move the shape in the \n        //!                         x dimension.\n        //! @param[in]  yDiff       The distance to move the shape in the \n        //!                         y dimension.\n        //!\n        void moveShape(ShapeRef *shape, const double xDiff, const double yDiff);\n\n        //! @brief Remove a junction from the router scene.\n        //!\n        //! If the router is using transactions, then this action will occur\n        //! the next time Router::processTransaction() is called.  See\n        //! Router::setTransactionUse() for more information.\n        //!\n        //! You should not use the junction reference again after this call.\n        //! The router will handle freeing of the junction's memory.\n        //!\n        //! @param[in]  junction  Pointer reference to the junction being \n        //!                       removed.\n        //!\n        void deleteJunction(JunctionRef *junction);\n        \n        //! @brief Remove a connector from the router scene.\n        //!\n        //! If the router is using transactions, then this action will occur\n        //! the next time Router::processTransaction() is called.  See\n        //! Router::setTransactionUse() for more information.\n        //!\n        //! You should not use the connector reference again after this call.\n        //! The router will handle freeing of the connector's memory.\n        //!\n        //! @param[in]  connector  Pointer reference to the connector being\n        //!                        removed.\n        //!\n        void deleteConnector(ConnRef *connector);\n\n        //! @brief Move an existing junction within the router scene.\n        //!\n        //! Connectors that are attached to this junction will be rerouted \n        //! as a result of the move.\n        //!\n        //! If the router is using transactions, then this action will occur\n        //! the next time Router::processTransaction() is called.  See\n        //! Router::setTransactionUse() for more information.\n        //!\n        //! @param[in]  junction     Pointer reference to the junction being\n        //!                          moved.\n        //! @param[in]  newPosition  The new position for the junction.\n        //!\n        void moveJunction(JunctionRef *junction, const Point& newPosition);\n\n        //! @brief Move an existing junction within the router scene by a \n        //!        relative distance.\n        //!         \n        //! Connectors that are attached to this junction will be rerouted \n        //! as a result of the move.\n        //!\n        //! If the router is using transactions, then this action will occur\n        //! the next time Router::processTransaction() is called.  See\n        //! Router::setTransactionUse() for more information.\n        //!\n        //! @param[in]  junction    Pointer reference to the junction being \n        //!                         moved.\n        //! @param[in]  xDiff       The distance to move the junction in the \n        //!                         x dimension.\n        //! @param[in]  yDiff       The distance to move the junction in the \n        //!                         y dimension.\n        //!\n        void moveJunction(JunctionRef *junction, const double xDiff, \n                const double yDiff);\n        \n        //! @brief  Sets values for routing parameters, including routing \n        //!         penalties.\n        //!\n        //! libavoid uses a set of parameters to allow the user more control\n        //! over routing style and quality.  These different parameters are\n        //! described and explained by the RoutingParameter enum.  All \n        //! parameters have sensible defaults.\n        //!\n        //! Regarding routing penalties, libavoid will by default produce\n        //! shortest path routes between the source and destination points \n        //! for each connector.  There are several penalties that can be \n        //! applied during this stage to penalise certain conditions and\n        //! thus improve the aesthetics of the routes generated.  \n        //! \n        //! If a value of zero or Avoid::zeroParamValue is given then the \n        //! particular parameter value or penalty will be removed.  If no \n        //! parameter value argument (or a negative value) is specified \n        //! when calling this method, then a sensible penalty value will \n        //! be automatically chosen.\n        //!\n        //! This method does not re-trigger processing of connectors. The new\n        //! parameter value will be used the next time rerouting is performed.\n        //!\n        //! @param[in] parameter  The type of penalty, a RoutingParameter.\n        //! @param[in] value      The value to be set for that parameter.\n        //!\n        void setRoutingParameter(const RoutingParameter parameter, \n                const double value = chooseSensibleParamValue);\n\n        //! @brief  Returns the current value for a particular routing\n        //!         parameter of a given type.\n        //!\n        //! @param[in] parameter  The type of parameter, a RoutingParameter.\n        //! @return  The value for the specified routing parameter.\n        //!\n        double routingParameter(const RoutingParameter parameter) const;\n\n        //! @brief  Turn specific routing options on or off.\n        //!\n        //! @param[in] option  The type of routing option, a RoutingOption.\n        //! @param[in] value   A boolean representing the option state.\n        //!\n        void setRoutingOption(const RoutingOption option, const bool value);\n\n        //! @brief  Returns the current state for a specific routing option.\n        //!\n        //! @param[in] option  The type of routing option, a RoutingOption.\n        //! @return  A boolean representing the option state.\n        //!\n        bool routingOption(const RoutingOption option) const;\n\n        //! @brief  Sets or removes penalty values that are applied during \n        //!         connector routing.\n        //!\n        //! @note   This is a convenience wrapper for the setRoutingParameter()\n        //          method.  See its documentation for more details.\n        //!\n        //! @param[in] penType  The type of penalty, a RoutingParameter.\n        //! @param[in] penVal   The value to be applied for each occurrence\n        //!                     of the penalty case.  \n        //!\n        void setRoutingPenalty(const RoutingParameter penType, \n                const double penVal = chooseSensibleParamValue);\n\n        //! @brief  Returns a pointer to the hyperedge rerouter for the router.\n        //!\n        //! @return  A HyperedgeRerouter object that can be used to register\n        //!          hyperedges for rerouting.\n        //!\n        HyperedgeRerouter *hyperedgeRerouter(void);\n\n        //! @brief  Generates an SVG file containing debug output and code that\n        //!         can be used to regenerate the instance.\n        //!\n        //! If transactions are being used, then this method should be called \n        //! after processTransaction() has been called, so that it includes any\n        //! changes being queued by the router.\n        //!\n        //! @param[in] filename  A string indicating the filename (without \n        //!                      extension) for the output file.  Defaults to\n        //!                      \"libavoid-debug.svg\" if no filename is given.\n        //!\n        void outputInstanceToSVG(std::string filename = std::string());\n\n        //! @brief  Returns the object ID used for automatically generated \n        //!         objects, such as during hyperedge routing.\n        //! \n        //! Reimplement this in a subclass to set specific IDs for new objects.\n        //!\n        //! @note   Your implementation should return a value that does not \n        //!         fail objectIdIsUnused().\n        //!\n        //! @return  The ID for a new object.\n        //!\n        virtual unsigned int newObjectId(void) const;\n\n        //! @brief  Returns whether or not the given ID is already used.\n        //! \n        //! You should only need this if you reimplement newObjectId().\n        //!\n        //! @param[in]  id  An ID to test.\n        //! @return  A boolean denoting that the given ID is unused.\n        //!\n        bool objectIdIsUnused(const unsigned int id) const;\n        \n        //! @brief  A method called at regular intervals during transaction \n        //!         processing to report progress and ask if the Router\n        //!         should continue the transaction.\n        //! \n        //! You can subclass the Avoid::Router class to implement your \n        //! own behaviour, such as to show a progress bar or cancel the \n        //! transaction at the user's request.\n        //!\n        //! Note that you can get a sense of progress by looking at the \n        //! phaseNumber divided by the totalPhases and the progress in the \n        //! current phase, but be aware that phases and the intervals and\n        //! proportions at which this method is called will vary, sometime\n        //! unpredictably.\n        //!\n        //! You can return false to request that the Router abort the current\n        //! transaction.  Be aware that it may not abort in some phases. For\n        //! others it may need to clean up some state before it is safe for \n        //! you to interact with it again.  Hence you should wait for a final \n        //! call to this method with the phase Avoid::TransactionPhaseCompleted\n        //! before continuing.\n        //!\n        //! @note  Your implementation of this method should be very fast as\n        //!        it will be called many times.  Also, you should not change\n        //!        or interact with the Router instance at all during these \n        //!        calls.  Wait till you have received a call with the \n        //!        Avoid::TransactionPhaseCompleted phase.\n        //!\n        //! @param  elapsedTime  The number of msec spent on the transaction\n        //!                      since it began.\n        //! @param  phaseNumber  A Router::TransactionPhases representing the\n        //!                      current phase of the transaction.\n        //! @param  totalPhases  The total number of phases to be performed \n        //!                      during the transaction.\n        //! @param  proportion   A double representing the progress in the \n        //!                      current phase.  Value will be between 0--1.\n        //!\n        //! @return  Whether the router should continue the transaction.\n        //!          This is true in the default (empty) implementation.\n        virtual bool shouldContinueTransactionWithProgress(\n                unsigned int elapsedTime, unsigned int phaseNumber, \n                unsigned int totalPhases, double proportion);\n\n        //! @brief  Returns a HyperedgeNewAndDeletedObjectLists detailing the\n        //!         lists of junctions and connectors created and deleted\n        //!         during hyperedge improvement.\n        //!\n        //! This method will only return information once the router has\n        //! processed the transaction.  You should read and act on this \n        //! information before processTransaction() is called again.\n        //!\n        //! After calling this you should no longer refer to any of the\n        //! objects in the \"deleted\" lists --- the router will delete these \n        //! and free their memory at its convenience.\n        //!\n        //! @return A HyperedgeNewAndDeletedObjectLists containing lists of \n        //!         junctions and connectors created and deleted.\n        //!\n        HyperedgeNewAndDeletedObjectLists \n                newAndDeletedObjectListsFromHyperedgeImprovement(void) const;\n\n        void setDebugHandler(DebugHandler *handler);\n        DebugHandler *debugHandler(void) const;\n\n        // Processes the actions list for the transaction.  You shouldn't\n        // need to cal this.  Instead use processTransaction().\n        void processActions(void);\n        \n        void deleteCluster(ClusterRef *cluster);\n        void attachedShapes(IntList &shapes, const unsigned int shapeId,\n                const unsigned int type);\n        void attachedConns(IntList &conns, const unsigned int shapeId,\n                const unsigned int type);\n        void markPolylineConnectorsNeedingReroutingForDeletedObstacle(\n                Obstacle *obstacle);\n        void generateContains(VertInf *pt);\n        void printInfo(void);\n        void regenerateStaticBuiltGraph(void);\n        void destroyOrthogonalVisGraph(void);\n        void setStaticGraphInvalidated(const bool invalidated);\n        ConnType validConnType(const ConnType select = ConnType_None) const;\n        bool isInCrossingPenaltyReroutingStage(void) const;\n        void markAllObstaclesAsMoved(void);\n        ShapeRef *shapeContainingPoint(const Point& point);\n        void performContinuationCheck(unsigned int phaseNumber,\n                size_t stepNumber, size_t totalSteps);\n        void registerSettingsChange(void);\n\n        /** \n         *  @brief  Set an addon for doing orthogonal topology improvement.\n         *\n         *  It is expected that you would use the topology::AvoidTopologyAddon() \n         *  from libtopology rather than write your own.  This is done so that \n         *  libavoid does not have to depend on libtopology.\n         */\n        void setTopologyAddon(TopologyAddonInterface *topologyAddon);\n        void improveOrthogonalTopology(void);\n\n        // Testing and debugging methods.\n        bool existsOrthogonalSegmentOverlap(const bool atEnds = false);\n        bool existsOrthogonalFixedSegmentOverlap(const bool atEnds = false);\n        bool existsOrthogonalTouchingPaths(void);\n        int  existsCrossings(const bool optimisedForConnectorType = false);\n        bool existsInvalidOrthogonalPaths(void);\n\n        // Outputs the current diagram.  Used for visualising individual\n        // steps of various algorithms.  lineReps can be used to draw \n        // attention to specific parts of the diagram that have changed\n        // between steps.\n        void outputDiagramSVG(std::string instanceName = std::string(), \n                LineReps *lineReps = nullptr);\n\n        void outputDiagramText(std::string instanceName = std::string());\n        void outputDiagram(std::string instanceName = std::string());\n\n    private:\n        friend class ShapeRef;\n        friend class ConnRef;\n        friend class JunctionRef;\n        friend class Obstacle;\n        friend class ClusterRef;\n        friend class ShapeConnectionPin;\n        friend class MinimumTerminalSpanningTree;\n        friend class ConnEnd;\n        friend struct HyperedgeTreeNode;\n        friend class HyperedgeRerouter;\n        friend class HyperedgeImprover;\n\n        unsigned int assignId(const unsigned int suggestedId);\n        void addShape(ShapeRef *shape);\n        void addJunction(JunctionRef *junction);\n        void addCluster(ClusterRef *cluster);\n        void modifyConnector(ConnRef *conn);\n        void modifyConnector(ConnRef *conn, unsigned int type,\n                const ConnEnd &connEnd, bool connPinUpdate = false);\n        void modifyConnectionPin(ShapeConnectionPin *pin);\n\n        void removeObjectFromQueuedActions(const void *object);\n        void newBlockingShape(const Polygon& poly, int pid);\n        void checkAllBlockedEdges(int pid);\n        void checkAllMissingEdges(void);\n        void adjustContainsWithAdd(const Polygon& poly, const int p_shape);\n        void adjustContainsWithDel(const int p_shape);\n        void adjustClustersWithAdd(const PolygonInterface& poly, \n                const int p_cluster);\n        void adjustClustersWithDel(const int p_cluster);\n        void rerouteAndCallbackConnectors(void);\n        void improveCrossings(void);\n\n        ActionInfoList actionList;\n        unsigned int m_largest_assigned_id;\n        bool m_consolidate_actions;\n        bool m_currently_calling_destructors;\n        double m_routing_parameters[lastRoutingParameterMarker];\n        bool m_routing_options[lastRoutingOptionMarker];\n        \n        ConnRerouteFlagDelegate m_conn_reroute_flags;\n        HyperedgeRerouter m_hyperedge_rerouter;\n        \n        // Progress tracking and transaction cancelling.\n        clock_t m_transaction_start_time;\n        bool m_abort_transaction;\n        \n        TopologyAddonInterface *m_topology_addon;\n\n        // Overall modes:\n        bool m_allows_polyline_routing;\n        bool m_allows_orthogonal_routing;\n        \n        bool m_static_orthogonal_graph_invalidated;\n        bool m_in_crossing_rerouting_stage;\n\n        bool m_settings_changes;\n    \n        HyperedgeImprover m_hyperedge_improver;\n\n        DebugHandler *m_debug_handler;\n};\n\n\n}\n\n\n\n#endif\n"
  },
  {
    "path": "cola/libavoid/scanline.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libavoid - Fast, Incremental, Object-avoiding Line Router\n *\n * Copyright (C) 2009-2014  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * Licensees holding a valid commercial license may use this file in\n * accordance with the commercial license agreement provided with the \n * library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  \n *\n * Author(s):  Michael Wybrow\n*/\n\n#include <cfloat>\n#include <algorithm>\n\n#include \"libavoid/scanline.h\"\n#include \"libavoid/obstacle.h\"\n#include \"libavoid/vertices.h\"\n#include \"libavoid/connector.h\"\n#include \"libavoid/junction.h\"\n#include \"libavoid/router.h\"\n\nnamespace Avoid {\n\nbool CmpNodePos::operator() (const Node* u, const Node* v) const \n{\n    if (u->pos != v->pos) \n    {\n        return u->pos < v->pos;\n    }\n    \n    // Use the pointers to the base objects to differentiate them.\n    void *up = (u->v) ? (void *) u->v : \n            ((u->c) ? (void *) u->c : (void *) u->ss);\n    void *vp = (v->v) ? (void *) v->v : \n            ((v->c) ? (void *) v->c : (void *) v->ss);\n    return up < vp;\n}\n\n\nNode::Node(Obstacle *v, const double p)\n    : v(v),\n      c(nullptr),\n      ss(nullptr),\n      pos(p),\n      firstAbove(nullptr),\n      firstBelow(nullptr)\n{\n    Box bBox = v->routingBox();\n    min[XDIM] = bBox.min.x;\n    min[YDIM] = bBox.min.y;\n    max[XDIM] = bBox.max.x;\n    max[YDIM] = bBox.max.y;\n    //COLA_ASSERT(r->width()<1e40);\n}\n\nNode::Node(VertInf *c, const double p)\n    : v(nullptr),\n      c(c),\n      ss(nullptr),\n      pos(p),\n      firstAbove(nullptr),\n      firstBelow(nullptr)\n{\n    min[XDIM] = max[XDIM] = c->point.x;\n    min[YDIM] = max[YDIM] = c->point.y;\n}\n\nNode::Node(ShiftSegment *ss, const double p)\n    : v(nullptr),\n      c(nullptr),\n      ss(ss),\n      pos(p),\n      firstAbove(nullptr),\n      firstBelow(nullptr)\n{\n    // These values shouldn't ever be used, so they don't matter.\n    min[XDIM] = max[XDIM] = min[YDIM] = max[YDIM] = 0;\n}\n\nNode::~Node() \n{\n}\n\n// Find the first Node above in the scanline that is a shape edge,\n// and does not have an open or close event at this position (meaning\n// it is just about to be removed).\ndouble Node::firstObstacleAbove(size_t dim)\n{\n    Node *curr = firstAbove;\n    while (curr && (curr->ss || (curr->max[dim] > pos)))\n    {\n        curr = curr->firstAbove;\n    }\n   \n    if (curr)\n    {\n        return curr->max[dim];\n    }\n    return -DBL_MAX;\n}\n\n// Find the first Node below in the scanline that is a shape edge,\n// and does not have an open or close event at this position (meaning\n// it is just about to be removed).\ndouble Node::firstObstacleBelow(size_t dim)\n{\n    Node *curr = firstBelow;\n    while (curr && (curr->ss || (curr->min[dim] < pos)))\n    {\n        curr = curr->firstBelow;\n    }\n    \n    if (curr)\n    {\n        return curr->min[dim];\n    }\n    return DBL_MAX;\n}\n\n// Mark all connector segments above in the scanline as being able \n// to see to this shape edge.\nvoid Node::markShiftSegmentsAbove(size_t dim)\n{\n    Node *curr = firstAbove;\n    while (curr && (curr->ss || (curr->pos > min[dim])))\n    {\n        if (curr->ss && (curr->pos <= min[dim]))\n        {\n            curr->ss->maxSpaceLimit = \n                    std::min(min[dim], curr->ss->maxSpaceLimit);\n        }\n        curr = curr->firstAbove;\n    }\n}\n\n// Mark all connector segments below in the scanline as being able \n// to see to this shape edge.\nvoid Node::markShiftSegmentsBelow(size_t dim)\n{\n    Node *curr = firstBelow;\n    while (curr && (curr->ss || (curr->pos < max[dim])))\n    {\n        if (curr->ss && (curr->pos >= max[dim]))\n        {\n            curr->ss->minSpaceLimit = \n                    std::max(max[dim], curr->ss->minSpaceLimit);\n        }\n        curr = curr->firstBelow;\n    }\n}\n\nvoid Node::findFirstPointAboveAndBelow(const size_t dim, const double linePos,\n        double& firstAbovePos, double& firstBelowPos, \n        double& lastAbovePos, double& lastBelowPos)\n{\n    firstAbovePos = -DBL_MAX;\n    firstBelowPos = DBL_MAX;\n    // We start looking left from the right side of the shape, \n    // and vice versa. \n    lastAbovePos = max[dim];\n    lastBelowPos = min[dim];\n\n    Node *curr = nullptr;\n    bool eventsAtSamePos = false;\n    for (int direction = 0; direction < 2; ++direction)\n    {\n        // Look for obstacles in one direction, then the other.\n        curr = (direction == 0) ? firstAbove: firstBelow;\n\n        while (curr)\n        {\n            // The events are at a shared beginning or end of a shape or \n            // connection point.  Note, connection points have the same \n            // min and max value in the !dim dimension.\n            eventsAtSamePos = \n                    (((linePos == max[!dim]) && \n                      (linePos == curr->max[!dim])) || \n                     ((linePos == min[!dim]) && \n                      (linePos == curr->min[!dim])));\n            \n            if (curr->max[dim] <= min[dim])\n            {\n                // Curr shape is completely to the left, \n                // so add it's right side as a limit\n                firstAbovePos = std::max(curr->max[dim], firstAbovePos);\n            }\n            else if (curr->min[dim] >= max[dim])\n            {\n                // Curr shape is completely to the right, \n                // so add it's left side as a limit\n                firstBelowPos = std::min(curr->min[dim], firstBelowPos);\n            }\n            else if (!eventsAtSamePos)\n            {\n                // Shapes that open or close at the same position do not\n                // block visibility, so if they are not at same position\n                // determine where they overlap.\n                lastAbovePos = std::min(curr->min[dim], lastAbovePos);\n                lastBelowPos = std::max(curr->max[dim], lastBelowPos);\n            }\n            curr = (direction == 0) ? curr->firstAbove : curr->firstBelow;\n        }\n    }    \n}\n\ndouble Node::firstPointAbove(size_t dim) \n{\n    // We are looking for the first obstacle above this position,\n    // though we ignore shape edges if this point is inline with\n    // the edge of the obstacle.  That is, points have visibility\n    // along the edge of shapes.\n    size_t altDim = (dim + 1) % 2;\n    double result = -DBL_MAX;\n    Node *curr = firstAbove; \n    while (curr) \n    {\n        bool inLineWithEdge = (min[altDim] == curr->min[altDim]) ||\n                (min[altDim] == curr->max[altDim]);\n        if ( ! inLineWithEdge && (curr->max[dim] <= pos) )\n        {\n            result = std::max(curr->max[dim], result);\n        }\n        curr = curr->firstAbove; \n    } \n    return result; \n}\n\ndouble Node::firstPointBelow(size_t dim) \n{ \n    // We are looking for the first obstacle below this position,\n    // though we ignore shape edges if this point is inline with\n    // the edge of the obstacle.  That is, points have visibility\n    // along the edge of shapes.\n    size_t altDim = (dim + 1) % 2;\n    double result = DBL_MAX;\n    Node *curr = firstBelow; \n    while (curr) \n    { \n        bool inLineWithEdge = (min[altDim] == curr->min[altDim]) ||\n                (min[altDim] == curr->max[altDim]);\n        if ( ! inLineWithEdge && (curr->min[dim] >= pos) )\n        {\n            result = std::min(curr->min[dim], result);\n        }\n        curr = curr->firstBelow; \n    }\n    return result;\n}\n\n// This is a bit inefficient, but we won't need to do it once we have \n// connection points.\nbool Node::isInsideShape(size_t dimension)\n{\n    for (Node *curr = firstBelow; curr; curr = curr->firstBelow)\n    {\n        if ((curr->min[dimension] < pos) && (pos < curr->max[dimension]))\n        {\n            return true;\n        }\n    }\n    for (Node *curr = firstAbove; curr; curr = curr->firstAbove)\n    {\n        if ((curr->min[dimension] < pos) && (pos < curr->max[dimension]))\n        {\n            return true;\n        }\n    }\n    return false;\n}\n\n\nEvent::Event(EventType t, Node *v, double p) \n    : type(t),\n      v(v),\n      pos(p)\n{\n}\n\n\n// Used for quicksort.  Must return <0, 0, or >0.\nint compare_events(const void *a, const void *b)\n{\n\tEvent *ea = *(Event**) a;\n\tEvent *eb = *(Event**) b;\n    if (ea->pos != eb->pos)\n    {\n        return (ea->pos < eb->pos) ? -1 : 1;\n    }\n    if (ea->type != eb->type)\n    {\n        return ea->type - eb->type;\n    }\n    COLA_ASSERT(ea->v != eb->v);\n    return (int)(ea->v - eb->v);\n}\n\n\nvoid buildConnectorRouteCheckpointCache(Router *router)\n{\n    for (ConnRefList::const_iterator curr = router->connRefs.begin(); \n            curr != router->connRefs.end(); ++curr) \n    {\n        ConnRef *conn = *curr;\n        if (conn->routingType() != ConnType_Orthogonal)\n        {\n            continue;\n        }\n\n        PolyLine& displayRoute = conn->displayRoute();\n        std::vector<Checkpoint> checkpoints = conn->routingCheckpoints();\n       \n        // Initialise checkpoint vector and set to false.  There will be\n        // one entry for each *segment* in the path, and the value indicates\n        // whether the segment is affected by a checkpoint.\n        displayRoute.checkpointsOnRoute = \n                std::vector<std::pair<size_t, Point> >();\n\n        for (size_t ind = 0; ind < displayRoute.size(); ++ind)\n        {\n            if (ind > 0)\n            {\n                for (size_t cpi = 0; cpi < checkpoints.size(); ++cpi)\n                {\n                    if (pointOnLine(displayRoute.ps[ind - 1], \n                             displayRoute.ps[ind], checkpoints[cpi].point) )\n                    {\n                        // The checkpoint is on a segment.\n                        displayRoute.checkpointsOnRoute.push_back(\n                                std::make_pair((ind * 2) - 1, \n                                    checkpoints[cpi].point));\n                    }\n                }\n            }\n\n            for (size_t cpi = 0; cpi < checkpoints.size(); ++cpi)\n            {\n                if (displayRoute.ps[ind].equals(checkpoints[cpi].point))\n                {\n                    // The checkpoint is at a bendpoint.\n                    displayRoute.checkpointsOnRoute.push_back(\n                            std::make_pair(ind * 2, checkpoints[cpi].point));\n                }\n            }\n        }\n    }\n}\n\n\nvoid clearConnectorRouteCheckpointCache(Router *router)\n{\n    for (ConnRefList::const_iterator curr = router->connRefs.begin(); \n            curr != router->connRefs.end(); ++curr) \n    {\n        ConnRef *conn = *curr;\n        if (conn->routingType() != ConnType_Orthogonal)\n        {\n            continue;\n        }\n\n        // Clear the cache.\n        PolyLine& displayRoute = conn->displayRoute();\n        displayRoute.checkpointsOnRoute.clear();\n    }\n}\n\n\n// Processes sweep events used to determine each horizontal and vertical \n// line segment in a connector's channel of visibility.  \n// Four calls to this function are made at each position by the scanline:\n//   1) Handle all Close event processing.\n//   2) Remove Close event objects from the scanline.\n//   3) Add Open event objects to the scanline.\n//   4) Handle all Open event processing.\n//\nstatic void processShiftEvent(NodeSet& scanline, Event *e, size_t dim,\n        unsigned int pass)\n{\n    Node *v = e->v;\n    \n    if ( ((pass == 3) && (e->type == Open)) ||\n         ((pass == 3) && (e->type == SegOpen)) )\n    {\n        std::pair<NodeSet::iterator, bool> result = scanline.insert(v);\n        v->iter = result.first;\n        COLA_ASSERT(result.second);\n\n        NodeSet::iterator it = v->iter;\n        // Work out neighbours\n        if (it != scanline.begin()) \n        {\n            Node *u = *(--it);\n            v->firstAbove = u;\n            u->firstBelow = v;\n        }\n        it = v->iter;\n        if (++it != scanline.end()) \n        {\n            Node *u = *it;\n            v->firstBelow = u;\n            u->firstAbove = v;\n        }\n    }\n    \n    if ( ((pass == 4) && (e->type == Open)) ||\n         ((pass == 4) && (e->type == SegOpen)) ||\n         ((pass == 1) && (e->type == SegClose)) ||\n         ((pass == 1) && (e->type == Close)) )\n    {\n        if (v->ss)\n        {\n            // As far as we can see.\n            double minLimit = v->firstObstacleAbove(dim);\n            double maxLimit = v->firstObstacleBelow(dim);\n\n            v->ss->minSpaceLimit = \n                    std::max(minLimit, v->ss->minSpaceLimit);\n            v->ss->maxSpaceLimit = \n                    std::min(maxLimit, v->ss->maxSpaceLimit);\n        }\n        else\n        {\n            v->markShiftSegmentsAbove(dim);\n            v->markShiftSegmentsBelow(dim);\n        }\n    }\n    \n    if ( ((pass == 2) && (e->type == SegClose)) ||\n         ((pass == 2) && (e->type == Close)) )\n    {\n        // Clean up neighbour pointers.\n        Node *l = v->firstAbove, *r = v->firstBelow;\n        if (l != nullptr) \n        {\n            l->firstBelow = v->firstBelow;\n        }\n        if (r != nullptr)\n        {\n            r->firstAbove = v->firstAbove;\n        }\n\n        size_t result;\n        result = scanline.erase(v);\n        COLA_ASSERT(result == 1);\n        COLA_UNUSED(result);  // Avoid warning.\n        delete v;\n    }\n}\n\nvoid buildOrthogonalChannelInfo(Router *router, \n        const size_t dim, ShiftSegmentList& segmentList)\n{\n    if (segmentList.empty())\n    {\n        // There are no segments, so we can just return now.\n        return;\n    }\n    \n    // Do a sweep to determine space for shifting segments.\n    size_t altDim = (dim + 1) % 2;\n    const size_t n = router->m_obstacles.size();\n    const size_t cpn = segmentList.size();\n    // Set up the events for the sweep.\n    size_t totalEvents = 2 * (n + cpn);\n    Event **events = new Event*[totalEvents];\n    unsigned ctr = 0;\n    ObstacleList::iterator obstacleIt = router->m_obstacles.begin();\n    for (unsigned i = 0; i < n; i++)\n    {\n        Obstacle *obstacle = *obstacleIt;\n        JunctionRef *junction = dynamic_cast<JunctionRef *> (obstacle);\n        if (junction && ! junction->positionFixed())\n        {\n            // Junctions that are free to move are not treated as obstacles.\n            ++obstacleIt;\n            totalEvents -= 2;\n            continue;\n        }\n        Box bBox = obstacle->routingBox();\n        Point min = bBox.min;\n        Point max = bBox.max;\n        double mid = min[dim] + ((max[dim] - min[dim]) / 2);\n        Node *v = new Node(obstacle, mid);\n        events[ctr++] = new Event(Open, v, min[altDim]);\n        events[ctr++] = new Event(Close, v, max[altDim]);\n\n        ++obstacleIt;\n    }\n    for (ShiftSegmentList::iterator curr = segmentList.begin(); \n            curr != segmentList.end(); ++curr)\n    {\n        const Point& lowPt = (*curr)->lowPoint();\n        const Point& highPt = (*curr)->highPoint();\n\n        COLA_ASSERT(lowPt[dim] == highPt[dim]);\n        COLA_ASSERT(lowPt[altDim] < highPt[altDim]);\n        Node *v = new Node(*curr, lowPt[dim]);\n        events[ctr++] = new Event(SegOpen, v, lowPt[altDim]);\n        events[ctr++] = new Event(SegClose, v, highPt[altDim]);\n    }\n    qsort((Event*)events, (size_t) totalEvents, sizeof(Event*), compare_events);\n\n    // Process the sweep.\n    // We do multiple passes over sections of the list so we can add relevant\n    // entries to the scanline that might follow, before process them.\n    NodeSet scanline;\n    double thisPos = (totalEvents > 0) ? events[0]->pos : 0;\n    unsigned int posStartIndex = 0;\n    unsigned int posFinishIndex = 0;\n    for (unsigned i = 0; i <= totalEvents; ++i)\n    {\n        // If we have finished the current scanline or all events, then we\n        // process the events on the current scanline in a couple of passes.\n        if ((i == totalEvents) || (events[i]->pos != thisPos))\n        {\n            posFinishIndex = i;\n            for (int pass = 2; pass <= 4; ++pass)\n            {\n                for (unsigned j = posStartIndex; j < posFinishIndex; ++j)\n                {\n                    processShiftEvent(scanline, events[j], dim, pass);\n                }\n            }\n\n            if (i == totalEvents)\n            {\n                // We have cleaned up, so we can now break out of loop.\n                break;\n            }\n\n            thisPos = events[i]->pos;\n            posStartIndex = i;\n        }\n\n        // Do the first sweep event handling -- building the correct \n        // structure of the scanline.\n        const int pass = 1;\n        processShiftEvent(scanline, events[i], dim, pass);\n    }\n    COLA_ASSERT(scanline.size() == 0);\n    for (unsigned i = 0; i < totalEvents; ++i)\n    {\n        delete events[i];\n    }\n    delete [] events;\n}\n\n\n}\n\n"
  },
  {
    "path": "cola/libavoid/scanline.h",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libavoid - Fast, Incremental, Object-avoiding Line Router\n *\n * Copyright (C) 2009-2013  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * Licensees holding a valid commercial license may use this file in\n * accordance with the commercial license agreement provided with the \n * library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  \n *\n * Author(s):   Michael Wybrow\n*/\n\n\n#ifndef AVOID_SCANLINE_H\n#define AVOID_SCANLINE_H\n\n#include <set>\n#include <list>\n\n#include \"libavoid/geomtypes.h\"\n\n\nnamespace Avoid {\n\nstatic const double CHANNEL_MAX = 100000000;\n\n\nclass Obstacle;\nclass VertInf;\n\n// ShiftSegment interface.\nclass ShiftSegment\n{ \n    public:\n        ShiftSegment(const size_t dim)\n            : dimension(dim)\n        {\n        }\n        virtual ~ShiftSegment()\n        {\n        }\n        virtual Point& lowPoint(void) = 0;\n        virtual Point& highPoint(void) = 0;\n        virtual const Point& lowPoint(void) const = 0;\n        virtual const Point& highPoint(void) const = 0;\n        virtual bool overlapsWith(const ShiftSegment *rhs,\n                const size_t dim) const = 0;\n        virtual bool immovable(void) const = 0;\n        \n        size_t dimension;\n        double minSpaceLimit;\n        double maxSpaceLimit;\n};\ntypedef std::list<ShiftSegment *> ShiftSegmentList;\n\n\nclass Node;\nstruct CmpNodePos\n{\n    bool operator()(const Node* u, const Node* v) const; \n};\n\n\ntypedef std::set<Node*,CmpNodePos> NodeSet;\n\nclass Node \n{\n    public:\n\n    Obstacle *v;\n    VertInf *c;\n    ShiftSegment *ss;\n    double pos;\n    double min[2], max[2];\n    Node *firstAbove, *firstBelow;\n    NodeSet::iterator iter;\n\n    Node(Obstacle *v, const double p);\n    Node(VertInf *c, const double p);\n    Node(ShiftSegment *ss, const double p);\n    virtual ~Node();\n    double firstObstacleAbove(size_t dim);\n    double firstObstacleBelow(size_t dim);\n    void markShiftSegmentsAbove(size_t dim);\n    void markShiftSegmentsBelow(size_t dim);\n    void findFirstPointAboveAndBelow(const size_t dim, const double linePos,\n            double& firstAbovePos, double& firstBelowPos, \n            double& lastAbovePos, double& lastBelowPos);\n    double firstPointAbove(size_t dim);\n    double firstPointBelow(size_t dim);\n    bool isInsideShape(size_t dimension);\n};\n\n\n// Note: Open must come first.\ntypedef enum {\n    Open = 1,\n    SegOpen = 2,\n    ConnPoint = 3, \n    SegClose = 4,\n    Close = 5\n} EventType;\n\n\nstruct Event\n{\n    Event(EventType t, Node *v, double p);\n    \n    EventType type;\n    Node *v;\n    double pos;\n};\n\n\nextern int compare_events(const void *a, const void *b);\nextern void buildConnectorRouteCheckpointCache(Router *router);\nextern void clearConnectorRouteCheckpointCache(Router *router);\nextern void buildOrthogonalChannelInfo(Router *router, \n        const size_t dim, ShiftSegmentList& segmentList);\n\n\n}\n\n#endif\n"
  },
  {
    "path": "cola/libavoid/shape.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libavoid - Fast, Incremental, Object-avoiding Line Router\n *\n * Copyright (C) 2004-2013  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * Licensees holding a valid commercial license may use this file in\n * accordance with the commercial license agreement provided with the \n * library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  \n *\n * Author(s):  Michael Wybrow\n*/\n\n#include <cstdlib>\n\n#include \"libavoid/shape.h\"\n#include \"libavoid/vertices.h\"\n#include \"libavoid/router.h\"\n#include \"libavoid/connend.h\"\n#include \"libavoid/debug.h\"\n#include \"libavoid/assertions.h\"\n#include \"libavoid/connectionpin.h\"\n\n\nnamespace Avoid {\n\n\nShapeRef::ShapeRef(Router *router, Polygon& ply, const unsigned int id)\n    : Obstacle(router, ply, id)\n{\n    m_router->addShape(this);\n}\n\n\nShapeRef::~ShapeRef()\n{\n    if (m_router->m_currently_calling_destructors == false)\n    {\n        err_printf(\"ERROR: ShapeRef::~ShapeRef() shouldn't be called directly.\\n\");\n        err_printf(\"       It is owned by the router.  Call Router::deleteShape() instead.\\n\");\n        abort();\n    }\n}\n\n\nvoid ShapeRef::moveAttachedConns(const Polygon& newPoly)\n{\n    // Update positions of attached connector ends.\n    for (std::set<ConnEnd *>::iterator curr = m_following_conns.begin();\n            curr != m_following_conns.end(); ++curr)\n    {\n        ConnEnd *connEnd = *curr;\n        COLA_ASSERT(connEnd->m_conn_ref != nullptr);\n        bool connPinUpdate = true;\n        m_router->modifyConnector(connEnd->m_conn_ref, connEnd->endpointType(), \n                *connEnd, connPinUpdate);\n    }\n    for (ShapeConnectionPinSet::iterator curr = \n            m_connection_pins.begin(); curr != m_connection_pins.end(); ++curr)\n    {\n        ShapeConnectionPin *pin = *curr;\n        pin->updatePosition(newPoly);\n    }\n}\n\nstatic double absoluteOffsetInverse(double offset,\n        const Box& shapeBox, size_t toDim)\n{\n    if (offset == ATTACH_POS_MIN_OFFSET)\n    {\n        return ATTACH_POS_MAX_OFFSET;\n    }\n    \n    if (offset == ATTACH_POS_MAX_OFFSET)\n    {\n        return ATTACH_POS_MIN_OFFSET;\n    }\n    \n    return shapeBox.length(toDim) - offset;\n}\n\nvoid ShapeRef::transformConnectionPinPositions(\n        ShapeTransformationType transform)\n{\n    for (ShapeConnectionPinSet::iterator curr = \n            m_connection_pins.begin(); curr != m_connection_pins.end(); ++curr)\n    {\n        ShapeConnectionPin *pin = *curr;\n        double usingProportionalOffsets = pin->m_using_proportional_offsets;\n        double& xOffset = pin->m_x_offset;\n        double& yOffset = pin->m_y_offset;\n        ConnDirFlags& visDirs =  pin->m_visibility_directions;\n        double tmpOffset;\n\n        // Number of clockwise 90 degree rotations;\n        unsigned int rotationN = 0;\n\n        if (usingProportionalOffsets)\n        {\n            // Translate to Origin.\n            xOffset -= 0.5;\n            yOffset -= 0.5;\n\n            switch (transform)\n            {\n                case TransformationType_CW90:\n                    rotationN = 3;\n                    // Y <- inverse X, X <- inverse Y\n                    tmpOffset = yOffset;\n                    yOffset = xOffset;\n                    xOffset = -tmpOffset;\n                    break;\n                case TransformationType_CW180:\n                    rotationN = 2;\n                    // Y <- inverse Y, X <- inverse X\n                    yOffset = -yOffset;\n                    xOffset = -xOffset;\n                    break;\n                case TransformationType_CW270:\n                    rotationN = 1;\n                    // Y <- X, X <- Y\n                    tmpOffset = yOffset;\n                    yOffset = -xOffset;\n                    xOffset = tmpOffset;\n                    break;\n                case TransformationType_FlipX:\n                    // Y <- Y, X <- inverse X\n                    xOffset = -xOffset;\n                    break;\n                case TransformationType_FlipY:\n                    // X <- inverse X, Y <- Y\n                    yOffset = -yOffset;\n                    break;\n            }\n            // Translate back.\n            xOffset += 0.5;\n            yOffset += 0.5;\n        }\n        else\n        {\n            // Using absolute offsets for pin.\n            \n            const Box shapeBox = pin->m_shape->polygon().offsetBoundingBox(0.0);\n            switch (transform)\n            {\n                case TransformationType_CW90:\n                    rotationN = 3;\n                    // Y <- inverse X, X <- inverse Y\n                    tmpOffset = yOffset;\n                    yOffset = xOffset;\n                    xOffset = absoluteOffsetInverse(tmpOffset, shapeBox, XDIM);\n                    break;\n                case TransformationType_CW180:\n                    rotationN = 2;\n                    // Y <- inverse Y, X <- inverse X\n                    yOffset = absoluteOffsetInverse(yOffset, shapeBox, YDIM);\n                    xOffset = absoluteOffsetInverse(xOffset, shapeBox, XDIM);\n                    break;\n                case TransformationType_CW270:\n                    rotationN = 1;\n                    // Y <- X, X <- Y\n                    tmpOffset = yOffset;\n                    yOffset = absoluteOffsetInverse(xOffset, shapeBox, YDIM);\n                    xOffset = tmpOffset;\n                    break;\n                case TransformationType_FlipX:\n                    // Y <- Y, X <- inverse X\n                    xOffset = absoluteOffsetInverse(xOffset, shapeBox, XDIM);\n                    break;\n                case TransformationType_FlipY:\n                    // X <- inverse X, Y <- Y\n                    yOffset = absoluteOffsetInverse(yOffset, shapeBox, YDIM);\n                    break;\n            }\n        }\n\n        if ( (visDirs & ConnDirAll) && (visDirs != ConnDirAll) )\n        {\n            // Visibility is set, but not in all directions.\n            \n            const unsigned int dirU = 0;\n            const unsigned int dirR = 1;\n            const unsigned int dirD = 2;\n            const unsigned int dirL = 3;\n\n            bool visInDir[4] = { false };\n            if (visDirs & ConnDirUp)    visInDir[dirU] = true;\n            if (visDirs & ConnDirRight) visInDir[dirR] = true;\n            if (visDirs & ConnDirDown)  visInDir[dirD] = true;\n            if (visDirs & ConnDirLeft)  visInDir[dirL] = true;\n\n            if (transform == TransformationType_FlipY)\n            {\n                bool tmpBool = visInDir[dirU];\n                visInDir[dirU] = visInDir[dirD];\n                visInDir[dirD] = tmpBool;\n            }\n            else if (transform == TransformationType_FlipX)\n            {\n                bool tmpBool = visInDir[dirL];\n                visInDir[dirL] = visInDir[dirR];\n                visInDir[dirR] = tmpBool;\n            }\n            \n            visDirs = ConnDirNone;\n            if (visInDir[(rotationN + dirU) % 4])  visDirs |= ConnDirUp;\n            if (visInDir[(rotationN + dirR) % 4])  visDirs |= ConnDirRight;\n            if (visInDir[(rotationN + dirD) % 4])  visDirs |= ConnDirDown;\n            if (visInDir[(rotationN + dirL) % 4])  visDirs |= ConnDirLeft;\n        }\n        pin->updatePositionAndVisibility();\n        m_router->modifyConnectionPin(pin);\n    }\n}\n\n\nconst Polygon& ShapeRef::polygon(void) const\n{\n    return m_polygon;\n}\n\n\nvoid ShapeRef::outputCode(FILE *fp) const\n{\n    fprintf(fp, \"    // shapeRef%u\\n\", id());\n    fprintf(fp, \"    polygon = Polygon(%lu);\\n\", (unsigned long) polygon().size());\n    for (size_t i = 0; i < polygon().size(); ++i)\n    {\n        fprintf(fp, \"    polygon.ps[%lu] = Point(%\" PREC \"g, %\" PREC \"g);\\n\", \n                (unsigned long) i, polygon().at(i).x, polygon().at(i).y);\n    }\n\n    fprintf(fp, \"    \");\n    if (!m_connection_pins.empty())\n    {\n        fprintf(fp, \"ShapeRef *shapeRef%u = \", id());\n    }\n    fprintf(fp, \"new ShapeRef(router, polygon, %u);\\n\", id());\n    for (ShapeConnectionPinSet::const_iterator curr = \n            m_connection_pins.begin(); \n            curr != m_connection_pins.end(); ++curr)\n    {\n        (*curr)->outputCode(fp);\n    }\n    fprintf(fp, \"\\n\");\n}\n\n\nPoint ShapeRef::position(void) const\n{\n    Box bBox = routingBox();\n\n    Point centre;\n\n    centre.x = bBox.min.x + (0.5 * (bBox.max.x - bBox.min.x));\n    centre.y = bBox.min.y + (0.5 * (bBox.max.y - bBox.min.y));\n\n    return centre;\n}\n\n\nvoid ShapeRef::setCentrePos(const Point& newCentre)\n{\n    Point diff = newCentre - position();\n    m_polygon.translate(diff.x, diff.y);\n}\n\n}\n\n"
  },
  {
    "path": "cola/libavoid/shape.h",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libavoid - Fast, Incremental, Object-avoiding Line Router\n *\n * Copyright (C) 2004-2011  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * Licensees holding a valid commercial license may use this file in\n * accordance with the commercial license agreement provided with the \n * library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  \n *\n * Author(s):   Michael Wybrow\n*/\n\n//! @file    shape.h\n//! @brief   Contains the interface for the ShapeRef class.\n\n\n#ifndef AVOID_SHAPE_H\n#define AVOID_SHAPE_H\n\n#include <list>\n#include <set>\n\n#include <cstdio>\n\n#include \"libavoid/dllexport.h\"\n#include \"libavoid/geometry.h\"\n#include \"libavoid/obstacle.h\"\n\nnamespace topology {\n    class LayoutObstacle;\n}\n\nnamespace Avoid {\n\nclass VertInf;\nclass Router;\nclass ShapeRef;\nclass ConnEnd;\nclass ShapeConnectionPin;\nclass ConnRef;\ntypedef std::list<ShapeRef *> ShapeRefList;\n\n//! @brief  Describes the type of transformation that has been applied to a\n//!         shape having its transformConnectionPinPositions() method called.\nenum ShapeTransformationType \n{\n    //! @brief  The shape has been rotated clockwise by 90 degrees.\n    TransformationType_CW90       = 0,\n    //! @brief  The shape has been rotated clockwise by 180 degrees.\n    TransformationType_CW180      = 1,\n    //! @brief  The shape has been rotated clockwise by 270 degrees.\n    TransformationType_CW270      = 2,\n    //! @brief  The shape has been flipped horizontally in the X-dimension.\n    TransformationType_FlipX      = 3,\n    //! @brief  The shape has been flipped vertically in the Y-dimension.\n    TransformationType_FlipY      = 4\n};\n\n\n//! @brief   The ShapeRef class represents a shape object.\n//!\n//! Shapes are obstacles that connectors must be routed around.  They can be \n//! placed into a Router scene and can be repositioned or resized (via\n//! Router::moveShape()).\n//! \n//! Usually, it is expected that you would create a ShapeRef for each shape \n//! in your diagram and keep that reference in your own shape class.\n//!\nclass AVOID_EXPORT ShapeRef : public Obstacle\n{\n    public:\n        //! @brief  Shape reference constructor.\n        //!\n        //! Creates a shape object reference, and adds it to the router\n        //! scene.  This shape will be considered to be an obstacle.\n        //! This will cause connectors intersecting the newly added shape\n        //! to be marked as needing to be rerouted.\n        //!\n        //! If the router is using transactions, then changes will occur\n        //! the next time Router::processTransaction() is called.  See\n        //! Router::setTransactionUse() for more information.\n        //!\n        //! The shape can be moved with Router::moveShape() and removed\n        //! from the scene and freed with Router::deleteShape().\n        //!\n        //! The poly argument will usually be the boundary of the shape in your \n        //! application with additional buffer of several pixels on each side.\n        //! Specifying such a buffer results in connectors leaving a small \n        //! amount of space around shapes, rather than touching them on the \n        //! corners or edges.\n        //!\n        //! @note Regarding IDs:\n        //!       You can let libavoid manually handle IDs by not specifying\n        //!       them.  Alternatively, you can specify all IDs yourself, but \n        //!       you must be careful to makes sure that each object in the \n        //!       scene (shape, connector, cluster, etc) is given a unique, \n        //!       positive ID.  This uniqueness is checked if assertions are\n        //!       enabled, but if not and there are clashes then strange \n        //!       things can happen.\n        //!\n        //! @param[in]  router  The router scene to place the shape into.\n        //! @param[in]  poly    A Polygon representing the boundary of the \n        //!                     shape.\n        //! @param[in]  id      Optionally, a positive integer ID unique\n        //!                     among all objects.\n        //!\n        ShapeRef(Router *router, Polygon& poly, const unsigned int id = 0);\n\n// To prevent C++ objects from being destroyed in garbage collected languages\n// when the libraries are called from SWIG, we hide the declarations of the\n// destructors and prevent generation of default destructors.\n#ifndef SWIG\n        //! @brief  Shape reference destructor.\n        //!\n        //! Do not call this yourself, instead call Router::deleteShape().\n        //! Ownership of this object belongs to the router scene.\n        virtual ~ShapeRef();\n#endif\n\n        //! @brief   Returns a reference to the polygon boundary of this shape.\n        //! @returns A reference to the polygon boundary of the shape.\n        const Polygon& polygon(void) const;\n        \n        //! @brief  Adjusts all of the shape's connection pin positions and \n        //!         visibility directions for a given transformation type.\n        //!\n        //! @param[in]  transform  A ShapeTransformationType specifying the \n        //!                        type of transform to be applied to all \n        //!                        connection pins for the shape.\n        //! \n        void transformConnectionPinPositions(ShapeTransformationType transform);\n \n        Point position(void) const;\n    private:\n        friend class Router;\n        friend class ConnEnd;\n        friend class ShapeConnectionPin;\n        friend class topology::LayoutObstacle;\n\n        void outputCode(FILE *fp) const;\n        void moveAttachedConns(const Polygon& newPoly);\n        void assignPinVisibilityTo(const unsigned int pinClassId,\n                VertInf *dummyConnectionVert);\n        void setCentrePos(const Point& newCentre);\n};\n\n\n}\n\n\n#endif\n\n\n"
  },
  {
    "path": "cola/libavoid/tests/2junctions.cpp",
    "content": "#include \"libavoid/libavoid.h\"\r\n#include <sstream>\r\nusing namespace Avoid;\r\n\r\nint test()\r\n{\r\n\tAvoid::ConnEnd end1;\r\n\tAvoid::ConnEnd end2;\r\n\tAvoid::Polygon poly;\r\n\tAvoid::Router * router1 = new Avoid::Router(Avoid::OrthogonalRouting);\r\n\trouter1->setTransactionUse(true);\r\n\trouter1->setRoutingPenalty(Avoid::segmentPenalty);\r\n\trouter1->setRoutingPenalty(Avoid::crossingPenalty);\r\n\trouter1->setRoutingPenalty(Avoid::fixedSharedPathPenalty);\r\n\trouter1->setRoutingOption(Avoid::penaliseOrthogonalSharedPathsAtConnEnds, true);\r\n\trouter1->setRoutingParameter(idealNudgingDistance, 25);\r\n\tpoly = Avoid::Polygon(4);\r\n\tpoly.setPoint(0, Avoid::Point(51410, 50640));\r\n\tpoly.setPoint(1, Avoid::Point(51410, 50960));\r\n\tpoly.setPoint(2, Avoid::Point(51050, 50960));\r\n\tpoly.setPoint(3, Avoid::Point(51050, 50640));\r\n\tAvoid::ShapeRef * shape365249936 = new Avoid::ShapeRef(router1, poly, 365249936);\r\n\tAvoid::ShapeConnectionPin * pin365249936_2 = new Avoid::ShapeConnectionPin(shape365249936, 3, 0, 0.5, true, 10, 4);\r\n\tpin365249936_2->setExclusive(true);\r\n\tAvoid::ShapeConnectionPin * pin365249936_4 = new Avoid::ShapeConnectionPin(shape365249936, 5, 0, 0.734375, true, 10, 4);\r\n\tpin365249936_4->setExclusive(true);\r\n\tpoly = Avoid::Polygon(4);\r\n\tpoly.setPoint(0, Avoid::Point(50760, 50691));\r\n\tpoly.setPoint(1, Avoid::Point(50760, 50775));\r\n\tpoly.setPoint(2, Avoid::Point(50640, 50775));\r\n\tpoly.setPoint(3, Avoid::Point(50640, 50691));\r\n\tAvoid::ShapeRef * shape386142480 = new Avoid::ShapeRef(router1, poly, 386142480);\r\n\tAvoid::ShapeConnectionPin * pin386142480_1 = new Avoid::ShapeConnectionPin(shape386142480, 2, 0.5, 1, true, 10, 2);\r\n\tpin386142480_1->setExclusive(true);\r\n\tAvoid::JunctionRef * junction328922310 = new Avoid::JunctionRef(router1, Avoid::Point(50700, 50800), 328922310);\r\n\tjunction328922310->setPositionFixed(true);\r\n\tend1 = Avoid::ConnEnd(shape365249936, 3);\r\n\tend2 = Avoid::ConnEnd(junction328922310);\r\n\t/*Avoid::ConnRef * conn152169328 = */ new Avoid::ConnRef(router1, end1, end2);\r\n\tend1 = Avoid::ConnEnd(junction328922310);\r\n\tend2 = Avoid::ConnEnd(shape386142480, 2);\r\n\t/*Avoid::ConnRef * conn684888074 = */ new Avoid::ConnRef(router1, end1, end2);\r\n\tend1 = Avoid::ConnEnd(shape365249936, 5);\r\n\tend2 = Avoid::ConnEnd(junction328922310);\r\n\tAvoid::ConnRef * conn18168360 = new Avoid::ConnRef(router1, end1, end2);\r\n\trouter1->processTransaction();\r\n\r\n\trouter1->outputDiagram(\"output/2junctions-1\");\r\n\tpoly = Avoid::Polygon(4);\r\n\tpoly.setPoint(0, Avoid::Point(50879, 50885));\r\n\tpoly.setPoint(1, Avoid::Point(50879, 50960));\r\n\tpoly.setPoint(2, Avoid::Point(50821, 50960));\r\n\tpoly.setPoint(3, Avoid::Point(50821, 50885));\r\n\tAvoid::ShapeRef * shape150429385 = new Avoid::ShapeRef(router1, poly, 150429385);\r\n\tAvoid::ShapeConnectionPin * pin150429385_0 = new Avoid::ShapeConnectionPin(shape150429385, 1, 0.5, 0, true, 10, 1);\r\n\tpin150429385_0->setExclusive(true);\r\n\tAvoid::JunctionRef * junction550292508 = new Avoid::JunctionRef(router1, Avoid::Point(50850, 50875), 550292508);\r\n\trouter1->deleteConnector(conn18168360);\r\n\tconn18168360 = nullptr;\r\n\tend1 = Avoid::ConnEnd(shape365249936, 5);\r\n\tend2 = Avoid::ConnEnd(junction550292508);\r\n\tAvoid::ConnRef * conn795337150 = new Avoid::ConnRef(router1, end1, end2);\r\n\tconn795337150->makePathInvalid();\r\n\tend1 = Avoid::ConnEnd(junction550292508);\r\n\tend2 = Avoid::ConnEnd(junction328922310);\r\n\tAvoid::ConnRef * conn151961380 = new Avoid::ConnRef(router1, end1, end2);\r\n\tconn151961380->makePathInvalid();\r\n\tend1 = Avoid::ConnEnd(shape150429385, 1);\r\n\tend2 = Avoid::ConnEnd(junction550292508);\r\n\tAvoid::ConnRef * conn149180423 = new Avoid::ConnRef(router1, end1, end2);\r\n\tconn149180423->makePathInvalid();\r\n\trouter1->processTransaction();\r\n\r\n\trouter1->outputDiagram(\"output/2junctions-2\");\r\n\t/*\r\n\tjunction550292508->setPositionFixed(true);\r\n\trouter1->deleteShape(shape365249936);\r\n\tshape365249936 = nullptr;\r\n\trouter1->deleteShape(shape386142480);\r\n\tshape386142480 = nullptr;\r\n\trouter1->deleteJunction(junction328922310);\r\n\tjunction328922310 = nullptr;\r\n\trouter1->deleteConnector(conn152169328);\r\n\tconn152169328 = nullptr;\r\n\trouter1->deleteConnector(conn684888074);\r\n\tconn684888074 = nullptr;\r\n\trouter1->deleteShape(shape150429385);\r\n\tshape150429385 = nullptr;\r\n\trouter1->deleteJunction(junction550292508);\r\n\tjunction550292508 = nullptr;\r\n\trouter1->deleteConnector(conn795337150);\r\n\tconn795337150 = nullptr;\r\n\trouter1->deleteConnector(conn151961380);\r\n\tconn151961380 = nullptr;\r\n\trouter1->deleteConnector(conn149180423);\r\n\tconn149180423 = nullptr;\r\n\trouter1->processTransaction();\r\n*/\r\n\tbool atEnds = true;\r\n        bool overlap = router1->existsOrthogonalFixedSegmentOverlap(atEnds);\r\n        delete router1;\r\n        return (overlap) ? 1 : 0;\r\n}\r\n\r\nextern \"C\" int main(void)\r\n{\r\n\treturn test();\r\n}\r\n"
  },
  {
    "path": "cola/libavoid/tests/Makefile.am",
    "content": "AM_CPPFLAGS = -I$(top_srcdir)\n\nLDADD = $(top_builddir)/libavoid/libavoid.la\n\n# Disabled tests:\n#\tcorneroverlap01\n#\tunsatisfiableRangeAssertion  - really slow.\n\ncheck_PROGRAMS = \\\n\tremoveJunctions01 \\\n\tpenaltyRerouting01 \\\n\ttreeRootCrash01 \\\n\ttreeRootCrash02 \\\n        forwardFlowingConnectors01 \\\n\texample \\\n\tendlessLoop01 \\\n\tcomplex \\\n\tmulticonnact \\\n\tinline \\\n\tinfinity \\\n\tlatesetup \\\n\tinlineoverlap01 \\\n\tinlineoverlap02 \\\n\tinlineoverlap03 \\\n\tinlineoverlap04 \\\n\tinlineoverlap05 \\\n\tinlineoverlap06 \\\n\tinlineoverlap07 \\\n\tinlineoverlap08 \\\n\tinlineOverlap09 \\\n\tinlineOverlap10 \\\n\tinlineOverlap11 \\\n\tnudgeintobug \\\n\tslowrouting \\\n\ttjunct \\\n\tvertlineassertion \\\n\torthordering01 \\\n\torthordering02 \\\n\torderassertion \\\n\tconnendmove \\\n\tconnectionpin01 \\\n\tconnectionpin02 \\\n\tconnectionpin03 \\\n\tjunction01 \\\n\tjunction02 \\\n\tjunction03 \\\n\tjunction04 \\\n\tnudgeold \\\n\tlineSegWrapperCrash1 \\\n\tlineSegWrapperCrash2 \\\n\tlineSegWrapperCrash3 \\\n\tlineSegWrapperCrash4 \\\n\tlineSegWrapperCrash5 \\\n\tlineSegWrapperCrash6 \\\n\tlineSegWrapperCrash7 \\\n\tlineSegWrapperCrash8 \\\n\tnode1 \\\n\toverlappingRects \\\n\tinlineShapes \\\n\tcheckpoints01 \\\n\tcheckpoints02 \\\n\tcheckpoints03 \\\n\tfreeFloatingDirection01 \\\n\trestrictedNudging \\\n\tperformance01 \\\n\thyperedge01 \\\n\thyperedge02 \\\n\timproveHyperedge01 \\\n\timproveHyperedge02 \\\n\timproveHyperedge03 \\\n\timproveHyperedge04 \\\n\timproveHyperedge05 \\\n\timproveHyperedge06 \\\n\tvalidPaths01 \\\n\tvalidPaths02 \\\n\t2junctions \\\n\thyperedgeLoop1 \\\n\tbuildOrthogonalChannelInfo1 \\\n\tfinalSegmentNudging1 \\\n\tfinalSegmentNudging2 \\\n\tfinalSegmentNudging3 \\\n\tcheckpointNudging1 \\\n\tcheckpointNudging2 \\\n\tcheckpointNudging3 \\\n\tnudgeCrossing01 \\\n\tnudgingSkipsCheckpoint01 \\\n\tnudgingSkipsCheckpoint02 \\\n\thola01 \\\n\thyperedgeRerouting01\n\n# problem_SOURCES = problem.cpp\n\nhola01_SOURCES = hola01.cpp\n\npenaltyRerouting01_SOURCES = penaltyRerouting01.cpp\n\ntreeRootCrash01_SOURCES = treeRootCrash01.cpp\ntreeRootCrash02_SOURCES = treeRootCrash02.cpp\n\nhyperedgeRerouting01_SOURCES = hyperedgeRerouting01.cpp\n\nforwardFlowingConnectors01_SOURCES = forwardFlowingConnectors01.cpp\n\n# unsatisfiableRangeAssertion_SOURCES = unsatisfiableRangeAssertion.cpp\n\nremoveJunctions01_SOURCES = removeJunctions01.cpp\n\nendlessLoop01_SOURCES = endlessLoop01.cpp\n\nnudgingSkipsCheckpoint01_SOURCES = nudgingSkipsCheckpoint01.cpp\nnudgingSkipsCheckpoint02_SOURCES = nudgingSkipsCheckpoint02.cpp\n\nnudgeCrossing01_SOURCES = nudgeCrossing01.cpp\n\ncheckpointNudging1_SOURCES = checkpointNudging1.cpp\ncheckpointNudging2_SOURCES = checkpointNudging2.cpp\ncheckpointNudging3_SOURCES = checkpointNudging3.cpp\n\nfinalSegmentNudging1_SOURCES = finalSegmentNudging1.cpp\nfinalSegmentNudging2_SOURCES = finalSegmentNudging2.cpp\nfinalSegmentNudging3_SOURCES = finalSegmentNudging3.cpp\n\nbuildOrthogonalChannelInfo1_SOURCES = buildOrthogonalChannelInfo1.cpp\n\nhyperedgeLoop1_SOURCES = hyperedgeLoop1.cpp\n\nimproveHyperedge01_SOURCES = improveHyperedge01.cpp\nimproveHyperedge02_SOURCES = improveHyperedge02.cpp\nimproveHyperedge03_SOURCES = improveHyperedge03.cpp\nimproveHyperedge04_SOURCES = improveHyperedge04.cpp\nimproveHyperedge05_SOURCES = improveHyperedge05.cpp\nimproveHyperedge06_SOURCES = improveHyperedge06.cpp\n\nperformance01_SOURCES = performance01.cpp\n\nrestrictedNudging_SOURCES = restrictedNudging.cpp\n\nfreeFloatingDirection01_SOURCES = freeFloatingDirection01.cpp\n\ncheckpoints01_SOURCES = checkpoints01.cpp\ncheckpoints02_SOURCES = checkpoints02.cpp\ncheckpoints03_SOURCES = checkpoints03.cpp\ninlineShapes_SOURCES = inlineShapes.cpp\n\n2junctions_SOURCES = 2junctions.cpp\noverlappingRects_SOURCES = overlappingRects.cpp\n\nlineSegWrapperCrash1_SOURCES = lineSegWrapperCrash1.cpp\nlineSegWrapperCrash2_SOURCES = lineSegWrapperCrash2.cpp\nlineSegWrapperCrash3_SOURCES = lineSegWrapperCrash3.cpp\nlineSegWrapperCrash4_SOURCES = lineSegWrapperCrash4.cpp\nlineSegWrapperCrash5_SOURCES = lineSegWrapperCrash5.cpp\nlineSegWrapperCrash6_SOURCES = lineSegWrapperCrash6.cpp\nlineSegWrapperCrash7_SOURCES = lineSegWrapperCrash7.cpp\nlineSegWrapperCrash8_SOURCES = lineSegWrapperCrash8.cpp\n\nexample_SOURCES = example.cpp\nvalidPaths01_SOURCES = validPaths01.cpp\nvalidPaths02_SOURCES = validPaths02.cpp\n\nmulticonnact_SOURCES = multiconnact.cpp\n\ncomplex_SOURCES = complex.cpp\n\ninline_SOURCES = inline.cpp\n\ninfinity_SOURCES = infinity.cpp\n\nlatesetup_SOURCES = latesetup.cpp\n\nnudgeold_SOURCES = nudgeold.cpp\n\nnode1_SOURCES = node1.cpp\n\nvertlineassertion_SOURCES = vertlineassertion.cpp\n\ninlineoverlap01_SOURCES = inlineoverlap01.cpp\ninlineoverlap02_SOURCES = inlineoverlap02.cpp\ninlineoverlap03_SOURCES = inlineoverlap03.cpp\ninlineoverlap04_SOURCES = inlineoverlap04.cpp\ninlineoverlap05_SOURCES = inlineoverlap05.cpp\ninlineoverlap06_SOURCES = inlineoverlap06.cpp\ninlineoverlap07_SOURCES = inlineoverlap07.cpp\ninlineoverlap08_SOURCES = inlineoverlap08.cpp\ninlineOverlap09_SOURCES = inlineOverlap09.cpp\ninlineOverlap10_SOURCES = inlineOverlap10.cpp\ninlineOverlap11_SOURCES = inlineOverlap11.cpp\n\n# corneroverlap01_SOURCES = corneroverlap01.cpp\n\northordering01_SOURCES = orthordering01.cpp\northordering02_SOURCES = orthordering02.cpp\n\ntjunct_SOURCES = tjunct.cpp\n\nhyperedge01_SOURCES = hyperedge01.cpp\nhyperedge02_SOURCES = hyperedge02.cpp\n\nnudgeintobug_SOURCES = nudgeintobug.cpp\n\nslowrouting_SOURCES = slowrouting.cpp\n\norderassertion_SOURCES = orderassertion.cpp\n\nconnendmove_SOURCES = connendmove.cpp\n\nconnectionpin01_SOURCES = connectionpin01.cpp\nconnectionpin02_SOURCES = connectionpin02.cpp\nconnectionpin03_SOURCES = connectionpin03.cpp\n\njunction01_SOURCES = junction01.cpp\njunction02_SOURCES = junction02.cpp\njunction03_SOURCES = junction03.cpp\njunction04_SOURCES = junction04.cpp\n\nTESTS = $(check_PROGRAMS)\n\n"
  },
  {
    "path": "cola/libavoid/tests/buildOrthogonalChannelInfo1.cpp",
    "content": "#include \"libavoid/libavoid.h\"\r\n#include <sstream>\r\nusing namespace Avoid;\r\n\r\nvoid test()\r\n{\r\n\tAvoid::ConnEnd end1;\r\n\tAvoid::ConnEnd end2;\r\n\tAvoid::Polygon poly;\r\n\tAvoid::Router * router1 = new Avoid::Router(Avoid::OrthogonalRouting);\r\n\trouter1->setTransactionUse(true);\r\n\trouter1->setRoutingPenalty(Avoid::segmentPenalty);\r\n\trouter1->setRoutingPenalty(Avoid::crossingPenalty);\r\n\trouter1->setRoutingPenalty(Avoid::fixedSharedPathPenalty, 9000);\r\n\trouter1->setRoutingOption(Avoid::penaliseOrthogonalSharedPathsAtConnEnds, true);\r\n\trouter1->setRoutingParameter(idealNudgingDistance, 25);\r\n\tpoly = Avoid::Polygon(4);\r\n\tpoly.setPoint(0, Avoid::Point(50760, 50691));\r\n\tpoly.setPoint(1, Avoid::Point(50760, 50775));\r\n\tpoly.setPoint(2, Avoid::Point(50640, 50775));\r\n\tpoly.setPoint(3, Avoid::Point(50640, 50691));\r\n\tAvoid::ShapeRef * shape386142480 = new Avoid::ShapeRef(router1, poly, 386142480);\r\n\tAvoid::ShapeConnectionPin * pin386142480_0 = new Avoid::ShapeConnectionPin(shape386142480, 1,                  0.5,  0.40476190476190477,                    true, 0, 13);\r\n\tpin386142480_0->setExclusive(true);\r\n\tAvoid::ShapeConnectionPin * pin386142480_1 = new Avoid::ShapeConnectionPin(shape386142480, 2,                  0.5,                    1,                   true, 10, 2);\r\n\tpin386142480_1->setExclusive(true);\r\n\tpoly = Avoid::Polygon(4);\r\n\tpoly.setPoint(0, Avoid::Point(51185, 50765));\r\n\tpoly.setPoint(1, Avoid::Point(51185, 50935));\r\n\tpoly.setPoint(2, Avoid::Point(50975, 50935));\r\n\tpoly.setPoint(3, Avoid::Point(50975, 50765));\r\n\tAvoid::ShapeRef * shape300136482 = new Avoid::ShapeRef(router1, poly, 300136482);\r\n\tAvoid::ShapeConnectionPin * pin300136482_0 = new Avoid::ShapeConnectionPin(shape300136482, 1,                    0,                  0.5,                   true, 10, 4);\r\n\tpin300136482_0->setExclusive(true);\r\n\tAvoid::ShapeConnectionPin * pin300136482_1 = new Avoid::ShapeConnectionPin(shape300136482, 2,  0.95238095238095233,                  0.5,                   true, 10, 8);\r\n\tpin300136482_1->setExclusive(true);\r\n\tpoly = Avoid::Polygon(4);\r\n\tpoly.setPoint(0, Avoid::Point(50854, 50840));\r\n\tpoly.setPoint(1, Avoid::Point(50854, 50935));\r\n\tpoly.setPoint(2, Avoid::Point(50796, 50935));\r\n\tpoly.setPoint(3, Avoid::Point(50796, 50840));\r\n\tAvoid::ShapeRef * shape51003942 = new Avoid::ShapeRef(router1, poly, 51003942);\r\n\tAvoid::ShapeConnectionPin * pin51003942_0 = new Avoid::ShapeConnectionPin(shape51003942, 1,                  0.5,  0.10526315789473684,                   true, 10, 1);\r\n\tpin51003942_0->setExclusive(true);\r\n\tAvoid::JunctionRef * junction502411221 = new Avoid::JunctionRef(router1, Avoid::Point(50825, 50850), 502411221);\r\n\tend1 = Avoid::ConnEnd(shape386142480, 2);\r\n\tend2 = Avoid::ConnEnd(junction502411221);\r\n\tnew Avoid::ConnRef(router1, end1, end2);\r\n\tend1 = Avoid::ConnEnd(junction502411221);\r\n\tend2 = Avoid::ConnEnd(shape300136482, 1);\r\n\tnew Avoid::ConnRef(router1, end1, end2);\r\n\tend1 = Avoid::ConnEnd(shape51003942, 1);\r\n\tend2 = Avoid::ConnEnd(junction502411221);\r\n\tnew Avoid::ConnRef(router1, end1, end2);\r\n\trouter1->processTransaction();\r\n\r\n\trouter1->outputDiagram(\"output/buildOrthogonalChannelInfo1\");\r\n    delete router1;\r\n}\r\n\r\nextern \"C\" int main(void)\r\n{\r\n\ttest();\r\n\treturn 0;\r\n}\r\n"
  },
  {
    "path": "cola/libavoid/tests/checkpointNudging1.cpp",
    "content": "// KEGG -> SBGN example #10\n//\n#include \"libavoid/libavoid.h\"\nusing namespace Avoid;\nint main(void) {\n    Router *router = new Router(\n            PolyLineRouting | OrthogonalRouting);\n    router->setRoutingParameter((RoutingParameter)0, 50);\n    router->setRoutingParameter((RoutingParameter)1, 0);\n    router->setRoutingParameter((RoutingParameter)2, 0);\n    router->setRoutingParameter((RoutingParameter)3, 4000);\n    router->setRoutingParameter((RoutingParameter)4, 0);\n    router->setRoutingParameter((RoutingParameter)5, 100);\n    router->setRoutingOption((RoutingOption)0, true);\n    router->setRoutingOption((RoutingOption)1, true);\n    router->setRoutingOption((RoutingOption)2, false);\n\n\n#ifdef ALL\n    Polygon poly1(4);\n    poly1.ps[0] = Point(1201.5, 1180.75);\n    poly1.ps[1] = Point(1201.5, 1212.75);\n    poly1.ps[2] = Point(1181.5, 1212.75);\n    poly1.ps[3] = Point(1181.5, 1180.75);\n    new ShapeRef(router, poly1, 1);\n\n    Polygon poly2(4);\n    poly2.ps[0] = Point(785.5, 2338.79);\n    poly2.ps[1] = Point(785.5, 2358.79);\n    poly2.ps[2] = Point(753.5, 2358.79);\n    poly2.ps[3] = Point(753.5, 2338.79);\n    new ShapeRef(router, poly2, 2);\n\n    Polygon poly3(4);\n    poly3.ps[0] = Point(261.5, 2215.42);\n    poly3.ps[1] = Point(261.5, 2247.42);\n    poly3.ps[2] = Point(241.5, 2247.42);\n    poly3.ps[3] = Point(241.5, 2215.42);\n    new ShapeRef(router, poly3, 3);\n\n    Polygon poly4(4);\n    poly4.ps[0] = Point(785.5, 2400.79);\n    poly4.ps[1] = Point(785.5, 2420.79);\n    poly4.ps[2] = Point(753.5, 2420.79);\n    poly4.ps[3] = Point(753.5, 2400.79);\n    new ShapeRef(router, poly4, 4);\n\n    Polygon poly5(4);\n    poly5.ps[0] = Point(282.5, 2348.79);\n    poly5.ps[1] = Point(282.5, 2410.79);\n    poly5.ps[2] = Point(220.5, 2410.79);\n    poly5.ps[3] = Point(220.5, 2348.79);\n    new ShapeRef(router, poly5, 5);\n\n    Polygon poly6(4);\n    poly6.ps[0] = Point(1643.5, 817.25);\n    poly6.ps[1] = Point(1643.5, 1194.25);\n    poly6.ps[2] = Point(1421.5, 1194.25);\n    poly6.ps[3] = Point(1421.5, 817.25);\n    new ShapeRef(router, poly6, 6);\n\n    Polygon poly7(4);\n    poly7.ps[0] = Point(1311.5, 45);\n    poly7.ps[1] = Point(1311.5, 219);\n    poly7.ps[2] = Point(1191.5, 219);\n    poly7.ps[3] = Point(1191.5, 45);\n    new ShapeRef(router, poly7, 7);\n\n    Polygon poly8(4);\n    poly8.ps[0] = Point(839.5, 2301.79);\n    poly8.ps[1] = Point(839.5, 2333.79);\n    poly8.ps[2] = Point(819.5, 2333.79);\n    poly8.ps[3] = Point(819.5, 2301.79);\n    new ShapeRef(router, poly8, 8);\n\n    Polygon poly9(4);\n    poly9.ps[0] = Point(1105.5, 2263.79);\n    poly9.ps[1] = Point(1105.5, 2283.79);\n    poly9.ps[2] = Point(1073.5, 2283.79);\n    poly9.ps[3] = Point(1073.5, 2263.79);\n    new ShapeRef(router, poly9, 9);\n\n    Polygon poly10(4);\n    poly10.ps[0] = Point(1105.5, 2338.79);\n    poly10.ps[1] = Point(1105.5, 2358.79);\n    poly10.ps[2] = Point(1073.5, 2358.79);\n    poly10.ps[3] = Point(1073.5, 2338.79);\n    new ShapeRef(router, poly10, 10);\n\n    Polygon poly11(4);\n    poly11.ps[0] = Point(1027.5, 2169.79);\n    poly11.ps[1] = Point(1027.5, 2189.79);\n    poly11.ps[2] = Point(995.5, 2189.79);\n    poly11.ps[3] = Point(995.5, 2169.79);\n    new ShapeRef(router, poly11, 11);\n\n    Polygon poly12(4);\n    poly12.ps[0] = Point(1021.5, 2082.42);\n    poly12.ps[1] = Point(1021.5, 2114.42);\n    poly12.ps[2] = Point(1001.5, 2114.42);\n    poly12.ps[3] = Point(1001.5, 2082.42);\n    new ShapeRef(router, poly12, 12);\n\n    Polygon poly13(4);\n    poly13.ps[0] = Point(721.5, 2159.42);\n    poly13.ps[1] = Point(721.5, 2179.42);\n    poly13.ps[2] = Point(689.5, 2179.42);\n    poly13.ps[3] = Point(689.5, 2159.42);\n    new ShapeRef(router, poly13, 13);\n\n    Polygon poly14(4);\n    poly14.ps[0] = Point(391.5, 2159.42);\n    poly14.ps[1] = Point(391.5, 2179.42);\n    poly14.ps[2] = Point(359.5, 2179.42);\n    poly14.ps[3] = Point(359.5, 2159.42);\n    new ShapeRef(router, poly14, 14);\n\n    Polygon poly15(4);\n    poly15.ps[0] = Point(1374.5, 2159.42);\n    poly15.ps[1] = Point(1374.5, 2179.42);\n    poly15.ps[2] = Point(1342.5, 2179.42);\n    poly15.ps[3] = Point(1342.5, 2159.42);\n    new ShapeRef(router, poly15, 15);\n\n    Polygon poly16(4);\n    poly16.ps[0] = Point(923.421, 1631.86);\n    poly16.ps[1] = Point(923.421, 1675.86);\n    poly16.ps[2] = Point(835.421, 1675.86);\n    poly16.ps[3] = Point(835.421, 1631.86);\n    new ShapeRef(router, poly16, 16);\n\n    Polygon poly17(4);\n    poly17.ps[0] = Point(1201.5, 1949.42);\n    poly17.ps[1] = Point(1201.5, 1981.42);\n    poly17.ps[2] = Point(1181.5, 1981.42);\n    poly17.ps[3] = Point(1181.5, 1949.42);\n    new ShapeRef(router, poly17, 17);\n\n    Polygon poly18(4);\n    poly18.ps[0] = Point(252, 1963.42);\n    poly18.ps[1] = Point(252, 2127.42);\n    poly18.ps[2] = Point(45, 2127.42);\n    poly18.ps[3] = Point(45, 1963.42);\n    new ShapeRef(router, poly18, 18);\n\n    Polygon poly19(4);\n    poly19.ps[0] = Point(1201.5, 1825.42);\n    poly19.ps[1] = Point(1201.5, 1857.42);\n    poly19.ps[2] = Point(1181.5, 1857.42);\n    poly19.ps[3] = Point(1181.5, 1825.42);\n    new ShapeRef(router, poly19, 19);\n\n    Polygon poly20(4);\n    poly20.ps[0] = Point(1201.5, 1701.42);\n    poly20.ps[1] = Point(1201.5, 1733.42);\n    poly20.ps[2] = Point(1181.5, 1733.42);\n    poly20.ps[3] = Point(1181.5, 1701.42);\n    new ShapeRef(router, poly20, 20);\n\n    Polygon poly21(4);\n    poly21.ps[0] = Point(1170.5, 1327.42);\n    poly21.ps[1] = Point(1170.5, 1359.42);\n    poly21.ps[2] = Point(1150.5, 1359.42);\n    poly21.ps[3] = Point(1150.5, 1327.42);\n    new ShapeRef(router, poly21, 21);\n\n    Polygon poly22(4);\n    poly22.ps[0] = Point(741, 1632.42);\n    poly22.ps[1] = Point(741, 1692.42);\n    poly22.ps[2] = Point(428, 1692.42);\n    poly22.ps[3] = Point(428, 1632.42);\n    new ShapeRef(router, poly22, 22);\n\n    Polygon poly23(4);\n    poly23.ps[0] = Point(996.5, 1281.42);\n    poly23.ps[1] = Point(996.5, 1301.42);\n    poly23.ps[2] = Point(964.5, 1301.42);\n    poly23.ps[3] = Point(964.5, 1281.42);\n    new ShapeRef(router, poly23, 23);\n\n    Polygon poly24(4);\n    poly24.ps[0] = Point(1232.5, 1047.75);\n    poly24.ps[1] = Point(1232.5, 1079.75);\n    poly24.ps[2] = Point(1212.5, 1079.75);\n    poly24.ps[3] = Point(1212.5, 1047.75);\n    new ShapeRef(router, poly24, 24);\n\n    Polygon poly25(4);\n    poly25.ps[0] = Point(1170.5, 1047.75);\n    poly25.ps[1] = Point(1170.5, 1079.75);\n    poly25.ps[2] = Point(1150.5, 1079.75);\n    poly25.ps[3] = Point(1150.5, 1047.75);\n    new ShapeRef(router, poly25, 25);\n\n    Polygon poly26(4);\n    poly26.ps[0] = Point(1343.5, 540.5);\n    poly26.ps[1] = Point(1343.5, 560.5);\n    poly26.ps[2] = Point(1311.5, 560.5);\n    poly26.ps[3] = Point(1311.5, 540.5);\n    new ShapeRef(router, poly26, 26);\n\n    Polygon poly27(4);\n    poly27.ps[0] = Point(1201.5, 724);\n    poly27.ps[1] = Point(1201.5, 756);\n    poly27.ps[2] = Point(1181.5, 756);\n    poly27.ps[3] = Point(1181.5, 724);\n    new ShapeRef(router, poly27, 27);\n\n    Polygon poly28(4);\n    poly28.ps[0] = Point(1201.5, 462);\n    poly28.ps[1] = Point(1201.5, 494);\n    poly28.ps[2] = Point(1181.5, 494);\n    poly28.ps[3] = Point(1181.5, 462);\n    new ShapeRef(router, poly28, 28);\n\n    Polygon poly29(4);\n    poly29.ps[0] = Point(934.5, 873);\n    poly29.ps[1] = Point(934.5, 893);\n    poly29.ps[2] = Point(902.5, 893);\n    poly29.ps[3] = Point(902.5, 873);\n    new ShapeRef(router, poly29, 29);\n\n    Polygon poly30(4);\n    poly30.ps[0] = Point(492.5, 767);\n    poly30.ps[1] = Point(492.5, 787);\n    poly30.ps[2] = Point(460.5, 787);\n    poly30.ps[3] = Point(460.5, 767);\n    new ShapeRef(router, poly30, 30);\n\n    Polygon poly31(4);\n    poly31.ps[0] = Point(492.5, 842);\n    poly31.ps[1] = Point(492.5, 862);\n    poly31.ps[2] = Point(460.5, 862);\n    poly31.ps[3] = Point(460.5, 842);\n    new ShapeRef(router, poly31, 31);\n\n    Polygon poly32(4);\n    poly32.ps[0] = Point(814.5, 730);\n    poly32.ps[1] = Point(814.5, 750);\n    poly32.ps[2] = Point(782.5, 750);\n    poly32.ps[3] = Point(782.5, 730);\n    new ShapeRef(router, poly32, 32);\n\n    Polygon poly33(4);\n    poly33.ps[0] = Point(653.5, 724);\n    poly33.ps[1] = Point(653.5, 756);\n    poly33.ps[2] = Point(633.5, 756);\n    poly33.ps[3] = Point(633.5, 724);\n    new ShapeRef(router, poly33, 33);\n\n    Polygon poly34(4);\n    poly34.ps[0] = Point(296.5, 724);\n    poly34.ps[1] = Point(296.5, 756);\n    poly34.ps[2] = Point(276.5, 756);\n    poly34.ps[3] = Point(276.5, 724);\n    new ShapeRef(router, poly34, 34);\n\n    Polygon poly35(4);\n    poly35.ps[0] = Point(723.5, 468);\n    poly35.ps[1] = Point(723.5, 488);\n    poly35.ps[2] = Point(691.5, 488);\n    poly35.ps[3] = Point(691.5, 468);\n    new ShapeRef(router, poly35, 35);\n\n    Polygon poly36(4);\n    poly36.ps[0] = Point(723.5, 543);\n    poly36.ps[1] = Point(723.5, 563);\n    poly36.ps[2] = Point(691.5, 563);\n    poly36.ps[3] = Point(691.5, 543);\n    new ShapeRef(router, poly36, 36);\n\n    Polygon poly37(4);\n    poly37.ps[0] = Point(723.5, 393);\n    poly37.ps[1] = Point(723.5, 413);\n    poly37.ps[2] = Point(691.5, 413);\n    poly37.ps[3] = Point(691.5, 393);\n    new ShapeRef(router, poly37, 37);\n\n    Polygon poly38(4);\n    poly38.ps[0] = Point(783.5, 331);\n    poly38.ps[1] = Point(783.5, 351);\n    poly38.ps[2] = Point(751.5, 351);\n    poly38.ps[3] = Point(751.5, 331);\n    new ShapeRef(router, poly38, 38);\n\n    Polygon poly39(4);\n    poly39.ps[0] = Point(783.5, 229);\n    poly39.ps[1] = Point(783.5, 249);\n    poly39.ps[2] = Point(751.5, 249);\n    poly39.ps[3] = Point(751.5, 229);\n    new ShapeRef(router, poly39, 39);\n\n    Polygon poly40(4);\n    poly40.ps[0] = Point(402, 96.5);\n    poly40.ps[1] = Point(402, 131.5);\n    poly40.ps[2] = Point(141, 131.5);\n    poly40.ps[3] = Point(141, 96.5);\n    new ShapeRef(router, poly40, 40);\n\n    Polygon poly41(4);\n    poly41.ps[0] = Point(508.5, 2302.46);\n    poly41.ps[1] = Point(508.5, 2322.46);\n    poly41.ps[2] = Point(476.5, 2322.46);\n    poly41.ps[3] = Point(476.5, 2302.46);\n    new ShapeRef(router, poly41, 41);\n\n    Polygon poly42(4);\n    poly42.ps[0] = Point(1201.5, 1553.42);\n    poly42.ps[1] = Point(1201.5, 1585.42);\n    poly42.ps[2] = Point(1181.5, 1585.42);\n    poly42.ps[3] = Point(1181.5, 1553.42);\n    new ShapeRef(router, poly42, 42);\n\n    Polygon poly43(4);\n    poly43.ps[0] = Point(723.5, 605);\n    poly43.ps[1] = Point(723.5, 625);\n    poly43.ps[2] = Point(691.5, 625);\n    poly43.ps[3] = Point(691.5, 605);\n    new ShapeRef(router, poly43, 43);\n\n    Polygon poly44(4);\n    poly44.ps[0] = Point(492.5, 904);\n    poly44.ps[1] = Point(492.5, 924);\n    poly44.ps[2] = Point(460.5, 924);\n    poly44.ps[3] = Point(460.5, 904);\n    new ShapeRef(router, poly44, 44);\n\n    Polygon poly45(4);\n    poly45.ps[0] = Point(302.5, 1066);\n    poly45.ps[1] = Point(302.5, 1086);\n    poly45.ps[2] = Point(270.5, 1086);\n    poly45.ps[3] = Point(270.5, 1066);\n    new ShapeRef(router, poly45, 45);\n\n    Polygon poly46(4);\n    poly46.ps[0] = Point(302.5, 1168);\n    poly46.ps[1] = Point(302.5, 1188);\n    poly46.ps[2] = Point(270.5, 1188);\n    poly46.ps[3] = Point(270.5, 1168);\n    new ShapeRef(router, poly46, 46);\n\n    Polygon poly47(4);\n    poly47.ps[0] = Point(570.5, 1066);\n    poly47.ps[1] = Point(570.5, 1086);\n    poly47.ps[2] = Point(538.5, 1086);\n    poly47.ps[3] = Point(538.5, 1066);\n    new ShapeRef(router, poly47, 47);\n\n    Polygon poly48(4);\n    poly48.ps[0] = Point(570.5, 1168);\n    poly48.ps[1] = Point(570.5, 1188);\n    poly48.ps[2] = Point(538.5, 1188);\n    poly48.ps[3] = Point(538.5, 1168);\n    new ShapeRef(router, poly48, 48);\n\n    Polygon poly49(4);\n    poly49.ps[0] = Point(1432.5, 519.5);\n    poly49.ps[1] = Point(1432.5, 581.5);\n    poly49.ps[2] = Point(1370.5, 581.5);\n    poly49.ps[3] = Point(1370.5, 519.5);\n    new ShapeRef(router, poly49, 49);\n\n    Polygon poly50(4);\n    poly50.ps[0] = Point(1222.5, 249);\n    poly50.ps[1] = Point(1222.5, 311);\n    poly50.ps[2] = Point(1160.5, 311);\n    poly50.ps[3] = Point(1160.5, 249);\n    new ShapeRef(router, poly50, 50);\n\n    Polygon poly51(4);\n    poly51.ps[0] = Point(1222.5, 1748.42);\n    poly51.ps[1] = Point(1222.5, 1810.42);\n    poly51.ps[2] = Point(1160.5, 1810.42);\n    poly51.ps[3] = Point(1160.5, 1748.42);\n    new ShapeRef(router, poly51, 51);\n\n    Polygon poly52(4);\n    poly52.ps[0] = Point(317.5, 553);\n    poly52.ps[1] = Point(317.5, 615);\n    poly52.ps[2] = Point(255.5, 615);\n    poly52.ps[3] = Point(255.5, 553);\n    new ShapeRef(router, poly52, 52);\n\n    Polygon poly53(4);\n    poly53.ps[0] = Point(317.5, 852);\n    poly53.ps[1] = Point(317.5, 914);\n    poly53.ps[2] = Point(255.5, 914);\n    poly53.ps[3] = Point(255.5, 852);\n    new ShapeRef(router, poly53, 53);\n\n    Polygon poly54(4);\n    poly54.ps[0] = Point(767.5, 1260.42);\n    poly54.ps[1] = Point(767.5, 1322.42);\n    poly54.ps[2] = Point(705.5, 1322.42);\n    poly54.ps[3] = Point(705.5, 1260.42);\n    new ShapeRef(router, poly54, 54);\n\n    Polygon poly55(4);\n    poly55.ps[0] = Point(767.5, 852);\n    poly55.ps[1] = Point(767.5, 914);\n    poly55.ps[2] = Point(705.5, 914);\n    poly55.ps[3] = Point(705.5, 852);\n    new ShapeRef(router, poly55, 55);\n\n    Polygon poly56(4);\n    poly56.ps[0] = Point(1222.5, 553);\n    poly56.ps[1] = Point(1222.5, 615);\n    poly56.ps[2] = Point(1160.5, 615);\n    poly56.ps[3] = Point(1160.5, 553);\n    new ShapeRef(router, poly56, 56);\n\n    Polygon poly57(4);\n    poly57.ps[0] = Point(1222.5, 852);\n    poly57.ps[1] = Point(1222.5, 914);\n    poly57.ps[2] = Point(1160.5, 914);\n    poly57.ps[3] = Point(1160.5, 852);\n    new ShapeRef(router, poly57, 57);\n\n    Polygon poly58(4);\n    poly58.ps[0] = Point(1222.5, 1872.42);\n    poly58.ps[1] = Point(1222.5, 1934.42);\n    poly58.ps[2] = Point(1160.5, 1934.42);\n    poly58.ps[3] = Point(1160.5, 1872.42);\n    new ShapeRef(router, poly58, 58);\n\n    Polygon poly59(4);\n    poly59.ps[0] = Point(1222.5, 1624.42);\n    poly59.ps[1] = Point(1222.5, 1686.42);\n    poly59.ps[2] = Point(1160.5, 1686.42);\n    poly59.ps[3] = Point(1160.5, 1624.42);\n    new ShapeRef(router, poly59, 59);\n\n    Polygon poly60(4);\n    poly60.ps[0] = Point(1222.5, 1424.42);\n    poly60.ps[1] = Point(1222.5, 1486.42);\n    poly60.ps[2] = Point(1160.5, 1486.42);\n    poly60.ps[3] = Point(1160.5, 1424.42);\n    new ShapeRef(router, poly60, 60);\n\n    Polygon poly61(4);\n    poly61.ps[0] = Point(1463.5, 2138.42);\n    poly61.ps[1] = Point(1463.5, 2200.42);\n    poly61.ps[2] = Point(1401.5, 2200.42);\n    poly61.ps[3] = Point(1401.5, 2138.42);\n    new ShapeRef(router, poly61, 61);\n\n    Polygon poly62(4);\n    poly62.ps[0] = Point(705.5, 2281.46);\n    poly62.ps[1] = Point(705.5, 2343.46);\n    poly62.ps[2] = Point(643.5, 2343.46);\n    poly62.ps[3] = Point(643.5, 2281.46);\n    new ShapeRef(router, poly62, 62);\n\n    Polygon poly63(4);\n    poly63.ps[0] = Point(1358.5, 2348.79);\n    poly63.ps[1] = Point(1358.5, 2410.79);\n    poly63.ps[2] = Point(1296.5, 2410.79);\n    poly63.ps[3] = Point(1296.5, 2348.79);\n    new ShapeRef(router, poly63, 63);\n\n    Polygon poly64(4);\n    poly64.ps[0] = Point(1222.5, 2138.42);\n    poly64.ps[1] = Point(1222.5, 2200.42);\n    poly64.ps[2] = Point(1160.5, 2200.42);\n    poly64.ps[3] = Point(1160.5, 2138.42);\n    new ShapeRef(router, poly64, 64);\n\n    Polygon poly65(4);\n    poly65.ps[0] = Point(860.5, 2138.42);\n    poly65.ps[1] = Point(860.5, 2200.42);\n    poly65.ps[2] = Point(798.5, 2200.42);\n    poly65.ps[3] = Point(798.5, 2138.42);\n    new ShapeRef(router, poly65, 65);\n\n    Polygon poly66(4);\n    poly66.ps[0] = Point(282.5, 2138.42);\n    poly66.ps[1] = Point(282.5, 2200.42);\n    poly66.ps[2] = Point(220.5, 2200.42);\n    poly66.ps[3] = Point(220.5, 2138.42);\n    new ShapeRef(router, poly66, 66);\n\n    Polygon poly67(4);\n    poly67.ps[0] = Point(860.5, 2348.79);\n    poly67.ps[1] = Point(860.5, 2410.79);\n    poly67.ps[2] = Point(798.5, 2410.79);\n    poly67.ps[3] = Point(798.5, 2348.79);\n    new ShapeRef(router, poly67, 67);\n\n    Polygon poly68(4);\n    poly68.ps[0] = Point(554.5, 2138.42);\n    poly68.ps[1] = Point(554.5, 2200.42);\n    poly68.ps[2] = Point(492.5, 2200.42);\n    poly68.ps[3] = Point(492.5, 2138.42);\n    new ShapeRef(router, poly68, 68);\n\n    Polygon poly69(4);\n    poly69.ps[0] = Point(406.5, 2281.46);\n    poly69.ps[1] = Point(406.5, 2343.46);\n    poly69.ps[2] = Point(344.5, 2343.46);\n    poly69.ps[3] = Point(344.5, 2281.46);\n    new ShapeRef(router, poly69, 69);\n\n    Polygon poly70(4);\n    poly70.ps[0] = Point(1222.5, 1084.75);\n    poly70.ps[1] = Point(1222.5, 1146.75);\n    poly70.ps[2] = Point(1160.5, 1146.75);\n    poly70.ps[3] = Point(1160.5, 1084.75);\n    new ShapeRef(router, poly70, 70);\n\n    Polygon poly71(4);\n    poly71.ps[0] = Point(247.5, 1045);\n    poly71.ps[1] = Point(247.5, 1107);\n    poly71.ps[2] = Point(185.5, 1107);\n    poly71.ps[3] = Point(185.5, 1045);\n    new ShapeRef(router, poly71, 71);\n\n    Polygon poly72(4);\n    poly72.ps[0] = Point(437.5, 1045);\n    poly72.ps[1] = Point(437.5, 1107);\n    poly72.ps[2] = Point(375.5, 1107);\n    poly72.ps[3] = Point(375.5, 1045);\n    new ShapeRef(router, poly72, 72);\n\n    Polygon poly73(4);\n    poly73.ps[0] = Point(437.5, 1147);\n    poly73.ps[1] = Point(437.5, 1209);\n    poly73.ps[2] = Point(375.5, 1209);\n    poly73.ps[3] = Point(375.5, 1147);\n    new ShapeRef(router, poly73, 73);\n\n    Polygon poly74(4);\n    poly74.ps[0] = Point(247.5, 1147);\n    poly74.ps[1] = Point(247.5, 1209);\n    poly74.ps[2] = Point(185.5, 1209);\n    poly74.ps[3] = Point(185.5, 1147);\n    new ShapeRef(router, poly74, 74);\n#endif\n    Polygon poly75(4);\n    poly75.ps[0] = Point(715.439, 1924.42);\n    poly75.ps[1] = Point(715.439, 1944.42);\n    poly75.ps[2] = Point(683.439, 1944.42);\n    poly75.ps[3] = Point(683.439, 1924.42);\n    new ShapeRef(router, poly75, 75);\n\n    Polygon poly76(4);\n    poly76.ps[0] = Point(282.5, 1872.42);\n    poly76.ps[1] = Point(282.5, 1934.42);\n    poly76.ps[2] = Point(220.5, 1934.42);\n    poly76.ps[3] = Point(220.5, 1872.42);\n    new ShapeRef(router, poly76, 76);\n\n#ifdef ALL\n    Polygon poly77(4);\n    poly77.ps[0] = Point(1105.5, 2400.79);\n    poly77.ps[1] = Point(1105.5, 2420.79);\n    poly77.ps[2] = Point(1073.5, 2420.79);\n    poly77.ps[3] = Point(1073.5, 2400.79);\n    new ShapeRef(router, poly77, 77);\n#endif\n\n    Polygon poly78(4);\n    poly78.ps[0] = Point(715.439, 1862.42);\n    poly78.ps[1] = Point(715.439, 1882.42);\n    poly78.ps[2] = Point(683.439, 1882.42);\n    poly78.ps[3] = Point(683.439, 1862.42);\n    new ShapeRef(router, poly78, 78);\n\n#ifdef ALL\n    Polygon poly79(4);\n    poly79.ps[0] = Point(1506.5, 2243.29);\n    poly79.ps[1] = Point(1506.5, 2408.29);\n    poly79.ps[2] = Point(1369.5, 2408.29);\n    poly79.ps[3] = Point(1369.5, 2243.29);\n    new ShapeRef(router, poly79, 79);\n\n    Polygon poly80(4);\n    poly80.ps[0] = Point(1232.5, 1327.42);\n    poly80.ps[1] = Point(1232.5, 1359.42);\n    poly80.ps[2] = Point(1212.5, 1359.42);\n    poly80.ps[3] = Point(1212.5, 1327.42);\n    new ShapeRef(router, poly80, 80);\n\n    Polygon poly81(4);\n    poly81.ps[0] = Point(1250.5, 1491.42);\n    poly81.ps[1] = Point(1250.5, 1523.42);\n    poly81.ps[2] = Point(1230.5, 1523.42);\n    poly81.ps[3] = Point(1230.5, 1491.42);\n    new ShapeRef(router, poly81, 81);\n\n    Polygon poly82(4);\n    poly82.ps[0] = Point(1341.5, 1491.42);\n    poly82.ps[1] = Point(1341.5, 1523.42);\n    poly82.ps[2] = Point(1321.5, 1523.42);\n    poly82.ps[3] = Point(1321.5, 1491.42);\n    new ShapeRef(router, poly82, 82);\n\n    Polygon poly83(4);\n    poly83.ps[0] = Point(570.5, 2030.42);\n    poly83.ps[1] = Point(570.5, 2050.42);\n    poly83.ps[2] = Point(538.5, 2050.42);\n    poly83.ps[3] = Point(538.5, 2030.42);\n    new ShapeRef(router, poly83, 83);\n\n    Polygon poly84(4);\n    poly84.ps[0] = Point(1432.5, 1491.42);\n    poly84.ps[1] = Point(1432.5, 1523.42);\n    poly84.ps[2] = Point(1412.5, 1523.42);\n    poly84.ps[3] = Point(1412.5, 1491.42);\n    new ShapeRef(router, poly84, 84);\n\n    Polygon poly85(4);\n    poly85.ps[0] = Point(980.5, 1538.42);\n    poly85.ps[1] = Point(980.5, 1600.42);\n    poly85.ps[2] = Point(918.5, 1600.42);\n    poly85.ps[3] = Point(918.5, 1538.42);\n    new ShapeRef(router, poly85, 85);\n\n    Polygon poly86(4);\n    poly86.ps[0] = Point(1116.5, 1639.42);\n    poly86.ps[1] = Point(1116.5, 1659.42);\n    poly86.ps[2] = Point(1084.5, 1659.42);\n    poly86.ps[3] = Point(1084.5, 1639.42);\n    new ShapeRef(router, poly86, 86);\n\n    Polygon poly87(4);\n    poly87.ps[0] = Point(1116.5, 1445.42);\n    poly87.ps[1] = Point(1116.5, 1465.42);\n    poly87.ps[2] = Point(1084.5, 1465.42);\n    poly87.ps[3] = Point(1084.5, 1445.42);\n    new ShapeRef(router, poly87, 87);\n\n    Polygon poly88(4);\n    poly88.ps[0] = Point(1222.5, 1260.42);\n    poly88.ps[1] = Point(1222.5, 1322.42);\n    poly88.ps[2] = Point(1160.5, 1322.42);\n    poly88.ps[3] = Point(1160.5, 1260.42);\n    new ShapeRef(router, poly88, 88);\n\n    Polygon poly89(4);\n    poly89.ps[0] = Point(170.5, 2215.42);\n    poly89.ps[1] = Point(170.5, 2247.42);\n    poly89.ps[2] = Point(150.5, 2247.42);\n    poly89.ps[3] = Point(150.5, 2215.42);\n    new ShapeRef(router, poly89, 89);\n\n    Polygon poly90(4);\n    poly90.ps[0] = Point(1323.5, 1047.75);\n    poly90.ps[1] = Point(1323.5, 1079.75);\n    poly90.ps[2] = Point(1303.5, 1079.75);\n    poly90.ps[3] = Point(1303.5, 1047.75);\n    new ShapeRef(router, poly90, 90);\n\n    Polygon poly91(4);\n    poly91.ps[0] = Point(723.5, 680);\n    poly91.ps[1] = Point(723.5, 700);\n    poly91.ps[2] = Point(691.5, 700);\n    poly91.ps[3] = Point(691.5, 680);\n    new ShapeRef(router, poly91, 91);\n\n    Polygon poly92(4);\n    poly92.ps[0] = Point(492.5, 979);\n    poly92.ps[1] = Point(492.5, 999);\n    poly92.ps[2] = Point(460.5, 999);\n    poly92.ps[3] = Point(460.5, 979);\n    new ShapeRef(router, poly92, 92);\n\n    Polygon poly93(4);\n    poly93.ps[0] = Point(1105.5, 2475.79);\n    poly93.ps[1] = Point(1105.5, 2495.79);\n    poly93.ps[2] = Point(1073.5, 2495.79);\n    poly93.ps[3] = Point(1073.5, 2475.79);\n    new ShapeRef(router, poly93, 93);\n\n    Polygon poly94(4);\n    poly94.ps[0] = Point(860.5, 2034.42);\n    poly94.ps[1] = Point(860.5, 2096.42);\n    poly94.ps[2] = Point(798.5, 2096.42);\n    poly94.ps[3] = Point(798.5, 2034.42);\n    new ShapeRef(router, poly94, 94);\n\n    Polygon poly95(4);\n    poly95.ps[0] = Point(1277.5, 1176.75);\n    poly95.ps[1] = Point(1277.5, 1216.75);\n    poly95.ps[2] = Point(1201.5, 1216.75);\n    poly95.ps[3] = Point(1201.5, 1176.75);\n    new ShapeRef(router, poly95, 95);\n\n    Polygon poly96(4);\n    poly96.ps[0] = Point(797.5, 2278.79);\n    poly96.ps[1] = Point(797.5, 2338.79);\n    poly96.ps[2] = Point(741.5, 2338.79);\n    poly96.ps[3] = Point(741.5, 2278.79);\n    new ShapeRef(router, poly96, 96);\n\n    Polygon poly97(4);\n    poly97.ps[0] = Point(241.5, 2211.42);\n    poly97.ps[1] = Point(241.5, 2251.42);\n    poly97.ps[2] = Point(165.5, 2251.42);\n    poly97.ps[3] = Point(165.5, 2211.42);\n    new ShapeRef(router, poly97, 97);\n\n    Polygon poly98(4);\n    poly98.ps[0] = Point(797.5, 2420.79);\n    poly98.ps[1] = Point(797.5, 2480.79);\n    poly98.ps[2] = Point(741.5, 2480.79);\n    poly98.ps[3] = Point(741.5, 2420.79);\n    new ShapeRef(router, poly98, 98);\n\n    Polygon poly99(4);\n    poly99.ps[0] = Point(915.5, 2297.79);\n    poly99.ps[1] = Point(915.5, 2337.79);\n    poly99.ps[2] = Point(839.5, 2337.79);\n    poly99.ps[3] = Point(839.5, 2297.79);\n    new ShapeRef(router, poly99, 99);\n\n    Polygon poly100(4);\n    poly100.ps[0] = Point(1117.5, 2203.79);\n    poly100.ps[1] = Point(1117.5, 2263.79);\n    poly100.ps[2] = Point(1061.5, 2263.79);\n    poly100.ps[3] = Point(1061.5, 2203.79);\n    new ShapeRef(router, poly100, 100);\n\n    Polygon poly101(4);\n    poly101.ps[0] = Point(1117.5, 2278.79);\n    poly101.ps[1] = Point(1117.5, 2338.79);\n    poly101.ps[2] = Point(1061.5, 2338.79);\n    poly101.ps[3] = Point(1061.5, 2278.79);\n    new ShapeRef(router, poly101, 101);\n\n    Polygon poly102(4);\n    poly102.ps[0] = Point(1039.5, 2189.79);\n    poly102.ps[1] = Point(1039.5, 2249.79);\n    poly102.ps[2] = Point(983.5, 2249.79);\n    poly102.ps[3] = Point(983.5, 2189.79);\n    new ShapeRef(router, poly102, 102);\n\n    Polygon poly103(4);\n    poly103.ps[0] = Point(1097.5, 2078.42);\n    poly103.ps[1] = Point(1097.5, 2118.42);\n    poly103.ps[2] = Point(1021.5, 2118.42);\n    poly103.ps[3] = Point(1021.5, 2078.42);\n    new ShapeRef(router, poly103, 103);\n\n    Polygon poly104(4);\n    poly104.ps[0] = Point(733.5, 2099.42);\n    poly104.ps[1] = Point(733.5, 2159.42);\n    poly104.ps[2] = Point(677.5, 2159.42);\n    poly104.ps[3] = Point(677.5, 2099.42);\n    new ShapeRef(router, poly104, 104);\n\n    Polygon poly105(4);\n    poly105.ps[0] = Point(403.5, 2099.42);\n    poly105.ps[1] = Point(403.5, 2159.42);\n    poly105.ps[2] = Point(347.5, 2159.42);\n    poly105.ps[3] = Point(347.5, 2099.42);\n    new ShapeRef(router, poly105, 105);\n\n    Polygon poly106(4);\n    poly106.ps[0] = Point(1386.5, 2099.42);\n    poly106.ps[1] = Point(1386.5, 2159.42);\n    poly106.ps[2] = Point(1330.5, 2159.42);\n    poly106.ps[3] = Point(1330.5, 2099.42);\n    new ShapeRef(router, poly106, 106);\n\n    Polygon poly107(4);\n    poly107.ps[0] = Point(1277.5, 1945.42);\n    poly107.ps[1] = Point(1277.5, 1985.42);\n    poly107.ps[2] = Point(1201.5, 1985.42);\n    poly107.ps[3] = Point(1201.5, 1945.42);\n    new ShapeRef(router, poly107, 107);\n\n    Polygon poly108(4);\n    poly108.ps[0] = Point(1277.5, 1821.42);\n    poly108.ps[1] = Point(1277.5, 1861.42);\n    poly108.ps[2] = Point(1201.5, 1861.42);\n    poly108.ps[3] = Point(1201.5, 1821.42);\n    new ShapeRef(router, poly108, 108);\n\n    Polygon poly109(4);\n    poly109.ps[0] = Point(1277.5, 1697.42);\n    poly109.ps[1] = Point(1277.5, 1737.42);\n    poly109.ps[2] = Point(1201.5, 1737.42);\n    poly109.ps[3] = Point(1201.5, 1697.42);\n    new ShapeRef(router, poly109, 109);\n\n    Polygon poly110(4);\n    poly110.ps[0] = Point(1150.5, 1323.42);\n    poly110.ps[1] = Point(1150.5, 1363.42);\n    poly110.ps[2] = Point(1074.5, 1363.42);\n    poly110.ps[3] = Point(1074.5, 1323.42);\n    new ShapeRef(router, poly110, 110);\n\n    Polygon poly111(4);\n    poly111.ps[0] = Point(1008.5, 1221.42);\n    poly111.ps[1] = Point(1008.5, 1281.42);\n    poly111.ps[2] = Point(952.5, 1281.42);\n    poly111.ps[3] = Point(952.5, 1221.42);\n    new ShapeRef(router, poly111, 111);\n\n    Polygon poly112(4);\n    poly112.ps[0] = Point(1308.5, 1043.75);\n    poly112.ps[1] = Point(1308.5, 1083.75);\n    poly112.ps[2] = Point(1232.5, 1083.75);\n    poly112.ps[3] = Point(1232.5, 1043.75);\n    new ShapeRef(router, poly112, 112);\n\n    Polygon poly113(4);\n    poly113.ps[0] = Point(1150.5, 1043.75);\n    poly113.ps[1] = Point(1150.5, 1083.75);\n    poly113.ps[2] = Point(1074.5, 1083.75);\n    poly113.ps[3] = Point(1074.5, 1043.75);\n    new ShapeRef(router, poly113, 113);\n\n    Polygon poly114(4);\n    poly114.ps[0] = Point(1355.5, 480.5);\n    poly114.ps[1] = Point(1355.5, 540.5);\n    poly114.ps[2] = Point(1299.5, 540.5);\n    poly114.ps[3] = Point(1299.5, 480.5);\n    new ShapeRef(router, poly114, 114);\n\n    Polygon poly115(4);\n    poly115.ps[0] = Point(1277.5, 720);\n    poly115.ps[1] = Point(1277.5, 760);\n    poly115.ps[2] = Point(1201.5, 760);\n    poly115.ps[3] = Point(1201.5, 720);\n    new ShapeRef(router, poly115, 115);\n\n    Polygon poly116(4);\n    poly116.ps[0] = Point(1277.5, 458);\n    poly116.ps[1] = Point(1277.5, 498);\n    poly116.ps[2] = Point(1201.5, 498);\n    poly116.ps[3] = Point(1201.5, 458);\n    new ShapeRef(router, poly116, 116);\n\n    Polygon poly117(4);\n    poly117.ps[0] = Point(946.5, 813);\n    poly117.ps[1] = Point(946.5, 873);\n    poly117.ps[2] = Point(890.5, 873);\n    poly117.ps[3] = Point(890.5, 813);\n    new ShapeRef(router, poly117, 117);\n\n    Polygon poly118(4);\n    poly118.ps[0] = Point(504.5, 707);\n    poly118.ps[1] = Point(504.5, 767);\n    poly118.ps[2] = Point(448.5, 767);\n    poly118.ps[3] = Point(448.5, 707);\n    new ShapeRef(router, poly118, 118);\n\n    Polygon poly119(4);\n    poly119.ps[0] = Point(504.5, 782);\n    poly119.ps[1] = Point(504.5, 842);\n    poly119.ps[2] = Point(448.5, 842);\n    poly119.ps[3] = Point(448.5, 782);\n    new ShapeRef(router, poly119, 119);\n\n    Polygon poly120(4);\n    poly120.ps[0] = Point(826.5, 670);\n    poly120.ps[1] = Point(826.5, 730);\n    poly120.ps[2] = Point(770.5, 730);\n    poly120.ps[3] = Point(770.5, 670);\n    new ShapeRef(router, poly120, 120);\n\n    Polygon poly121(4);\n    poly121.ps[0] = Point(633.5, 720);\n    poly121.ps[1] = Point(633.5, 760);\n    poly121.ps[2] = Point(557.5, 760);\n    poly121.ps[3] = Point(557.5, 720);\n    new ShapeRef(router, poly121, 121);\n\n    Polygon poly122(4);\n    poly122.ps[0] = Point(372.5, 720);\n    poly122.ps[1] = Point(372.5, 760);\n    poly122.ps[2] = Point(296.5, 760);\n    poly122.ps[3] = Point(296.5, 720);\n    new ShapeRef(router, poly122, 122);\n\n    Polygon poly123(4);\n    poly123.ps[0] = Point(735.5, 408);\n    poly123.ps[1] = Point(735.5, 468);\n    poly123.ps[2] = Point(679.5, 468);\n    poly123.ps[3] = Point(679.5, 408);\n    new ShapeRef(router, poly123, 123);\n\n    Polygon poly124(4);\n    poly124.ps[0] = Point(735.5, 483);\n    poly124.ps[1] = Point(735.5, 543);\n    poly124.ps[2] = Point(679.5, 543);\n    poly124.ps[3] = Point(679.5, 483);\n    new ShapeRef(router, poly124, 124);\n\n    Polygon poly125(4);\n    poly125.ps[0] = Point(735.5, 333);\n    poly125.ps[1] = Point(735.5, 393);\n    poly125.ps[2] = Point(679.5, 393);\n    poly125.ps[3] = Point(679.5, 333);\n    new ShapeRef(router, poly125, 125);\n\n    Polygon poly126(4);\n    poly126.ps[0] = Point(795.5, 271);\n    poly126.ps[1] = Point(795.5, 331);\n    poly126.ps[2] = Point(739.5, 331);\n    poly126.ps[3] = Point(739.5, 271);\n    new ShapeRef(router, poly126, 126);\n\n    Polygon poly127(4);\n    poly127.ps[0] = Point(795.5, 169);\n    poly127.ps[1] = Point(795.5, 229);\n    poly127.ps[2] = Point(739.5, 229);\n    poly127.ps[3] = Point(739.5, 169);\n    new ShapeRef(router, poly127, 127);\n\n    Polygon poly128(4);\n    poly128.ps[0] = Point(520.5, 2242.46);\n    poly128.ps[1] = Point(520.5, 2302.46);\n    poly128.ps[2] = Point(464.5, 2302.46);\n    poly128.ps[3] = Point(464.5, 2242.46);\n    new ShapeRef(router, poly128, 128);\n\n    Polygon poly129(4);\n    poly129.ps[0] = Point(1277.5, 1549.42);\n    poly129.ps[1] = Point(1277.5, 1589.42);\n    poly129.ps[2] = Point(1201.5, 1589.42);\n    poly129.ps[3] = Point(1201.5, 1549.42);\n    new ShapeRef(router, poly129, 129);\n\n    Polygon poly130(4);\n    poly130.ps[0] = Point(735.5, 625);\n    poly130.ps[1] = Point(735.5, 685);\n    poly130.ps[2] = Point(679.5, 685);\n    poly130.ps[3] = Point(679.5, 625);\n    new ShapeRef(router, poly130, 130);\n\n    Polygon poly131(4);\n    poly131.ps[0] = Point(504.5, 924);\n    poly131.ps[1] = Point(504.5, 984);\n    poly131.ps[2] = Point(448.5, 984);\n    poly131.ps[3] = Point(448.5, 924);\n    new ShapeRef(router, poly131, 131);\n\n    Polygon poly132(4);\n    poly132.ps[0] = Point(314.5, 1006);\n    poly132.ps[1] = Point(314.5, 1066);\n    poly132.ps[2] = Point(258.5, 1066);\n    poly132.ps[3] = Point(258.5, 1006);\n    new ShapeRef(router, poly132, 132);\n\n    Polygon poly133(4);\n    poly133.ps[0] = Point(314.5, 1108);\n    poly133.ps[1] = Point(314.5, 1168);\n    poly133.ps[2] = Point(258.5, 1168);\n    poly133.ps[3] = Point(258.5, 1108);\n    new ShapeRef(router, poly133, 133);\n\n    Polygon poly134(4);\n    poly134.ps[0] = Point(582.5, 1006);\n    poly134.ps[1] = Point(582.5, 1066);\n    poly134.ps[2] = Point(526.5, 1066);\n    poly134.ps[3] = Point(526.5, 1006);\n    new ShapeRef(router, poly134, 134);\n\n    Polygon poly135(4);\n    poly135.ps[0] = Point(582.5, 1108);\n    poly135.ps[1] = Point(582.5, 1168);\n    poly135.ps[2] = Point(526.5, 1168);\n    poly135.ps[3] = Point(526.5, 1108);\n    new ShapeRef(router, poly135, 135);\n#endif\n\n    Polygon poly136(4);\n    poly136.ps[0] = Point(727.439, 1944.42);\n    poly136.ps[1] = Point(727.439, 2004.42);\n    poly136.ps[2] = Point(671.439, 2004.42);\n    poly136.ps[3] = Point(671.439, 1944.42);\n    new ShapeRef(router, poly136, 136);\n\n#ifdef ALL\n    Polygon poly137(4);\n    poly137.ps[0] = Point(1117.5, 2420.79);\n    poly137.ps[1] = Point(1117.5, 2480.79);\n    poly137.ps[2] = Point(1061.5, 2480.79);\n    poly137.ps[3] = Point(1061.5, 2420.79);\n    new ShapeRef(router, poly137, 137);\n#endif\n\n    Polygon poly138(4);\n    poly138.ps[0] = Point(727.439, 1802.42);\n    poly138.ps[1] = Point(727.439, 1862.42);\n    poly138.ps[2] = Point(671.439, 1862.42);\n    poly138.ps[3] = Point(671.439, 1802.42);\n    new ShapeRef(router, poly138, 138);\n\n#ifdef ALL\n    Polygon poly139(4);\n    poly139.ps[0] = Point(1308.5, 1323.42);\n    poly139.ps[1] = Point(1308.5, 1363.42);\n    poly139.ps[2] = Point(1232.5, 1363.42);\n    poly139.ps[3] = Point(1232.5, 1323.42);\n    new ShapeRef(router, poly139, 139);\n\n    Polygon poly140(4);\n    poly140.ps[0] = Point(1326.5, 1487.42);\n    poly140.ps[1] = Point(1326.5, 1527.42);\n    poly140.ps[2] = Point(1250.5, 1527.42);\n    poly140.ps[3] = Point(1250.5, 1487.42);\n    new ShapeRef(router, poly140, 140);\n\n    Polygon poly141(4);\n    poly141.ps[0] = Point(1417.5, 1487.42);\n    poly141.ps[1] = Point(1417.5, 1527.42);\n    poly141.ps[2] = Point(1341.5, 1527.42);\n    poly141.ps[3] = Point(1341.5, 1487.42);\n    new ShapeRef(router, poly141, 141);\n\n    Polygon poly142(4);\n    poly142.ps[0] = Point(582.5, 1970.42);\n    poly142.ps[1] = Point(582.5, 2030.42);\n    poly142.ps[2] = Point(526.5, 2030.42);\n    poly142.ps[3] = Point(526.5, 1970.42);\n    new ShapeRef(router, poly142, 142);\n\n    Polygon poly143(4);\n    poly143.ps[0] = Point(1508.5, 1487.42);\n    poly143.ps[1] = Point(1508.5, 1527.42);\n    poly143.ps[2] = Point(1432.5, 1527.42);\n    poly143.ps[3] = Point(1432.5, 1487.42);\n    new ShapeRef(router, poly143, 143);\n\n    Polygon poly144(4);\n    poly144.ps[0] = Point(1128.5, 1579.42);\n    poly144.ps[1] = Point(1128.5, 1639.42);\n    poly144.ps[2] = Point(1072.5, 1639.42);\n    poly144.ps[3] = Point(1072.5, 1579.42);\n    new ShapeRef(router, poly144, 144);\n\n    Polygon poly145(4);\n    poly145.ps[0] = Point(1128.5, 1385.42);\n    poly145.ps[1] = Point(1128.5, 1445.42);\n    poly145.ps[2] = Point(1072.5, 1445.42);\n    poly145.ps[3] = Point(1072.5, 1385.42);\n    new ShapeRef(router, poly145, 145);\n\n    Polygon poly146(4);\n    poly146.ps[0] = Point(150.5, 2211.42);\n    poly146.ps[1] = Point(150.5, 2251.42);\n    poly146.ps[2] = Point(74.5, 2251.42);\n    poly146.ps[3] = Point(74.5, 2211.42);\n    new ShapeRef(router, poly146, 146);\n\n    Polygon poly147(4);\n    poly147.ps[0] = Point(1399.5, 1043.75);\n    poly147.ps[1] = Point(1399.5, 1083.75);\n    poly147.ps[2] = Point(1323.5, 1083.75);\n    poly147.ps[3] = Point(1323.5, 1043.75);\n    new ShapeRef(router, poly147, 147);\n\n    Polygon poly148(4);\n    poly148.ps[0] = Point(735.5, 700);\n    poly148.ps[1] = Point(735.5, 760);\n    poly148.ps[2] = Point(679.5, 760);\n    poly148.ps[3] = Point(679.5, 700);\n    new ShapeRef(router, poly148, 148);\n\n    Polygon poly149(4);\n    poly149.ps[0] = Point(504.5, 999);\n    poly149.ps[1] = Point(504.5, 1059);\n    poly149.ps[2] = Point(448.5, 1059);\n    poly149.ps[3] = Point(448.5, 999);\n    new ShapeRef(router, poly149, 149);\n\n    Polygon poly150(4);\n    poly150.ps[0] = Point(1117.5, 2495.79);\n    poly150.ps[1] = Point(1117.5, 2555.79);\n    poly150.ps[2] = Point(1061.5, 2555.79);\n    poly150.ps[3] = Point(1061.5, 2495.79);\n    new ShapeRef(router, poly150, 150);\n\n    Polygon poly151(4);\n    poly151.ps[0] = Point(1482, 966.25);\n    poly151.ps[1] = Point(1482, 1006.25);\n    poly151.ps[2] = Point(1422, 1006.25);\n    poly151.ps[3] = Point(1422, 966.25);\n    new ShapeRef(router, poly151, 151);\n\n    Polygon poly152(4);\n    poly152.ps[0] = Point(1482, 1006.25);\n    poly152.ps[1] = Point(1482, 1046.25);\n    poly152.ps[2] = Point(1422, 1046.25);\n    poly152.ps[3] = Point(1422, 1006.25);\n    new ShapeRef(router, poly152, 152);\n\n    Polygon poly153(4);\n    poly153.ps[0] = Point(1533, 1134.75);\n    poly153.ps[1] = Point(1533, 1194.75);\n    poly153.ps[2] = Point(1493, 1194.75);\n    poly153.ps[3] = Point(1493, 1134.75);\n    new ShapeRef(router, poly153, 153);\n\n    Polygon poly154(4);\n    poly154.ps[0] = Point(1573, 1134.75);\n    poly154.ps[1] = Point(1573, 1194.75);\n    poly154.ps[2] = Point(1533, 1194.75);\n    poly154.ps[3] = Point(1533, 1134.75);\n    new ShapeRef(router, poly154, 154);\n\n    Polygon poly155(4);\n    poly155.ps[0] = Point(1272, 159.5);\n    poly155.ps[1] = Point(1272, 219.5);\n    poly155.ps[2] = Point(1232, 219.5);\n    poly155.ps[3] = Point(1232, 159.5);\n    new ShapeRef(router, poly155, 155);\n\n    Polygon poly156(4);\n    poly156.ps[0] = Point(252.5, 2005.92);\n    poly156.ps[1] = Point(252.5, 2045.92);\n    poly156.ps[2] = Point(192.5, 2045.92);\n    poly156.ps[3] = Point(192.5, 2005.92);\n    new ShapeRef(router, poly156, 156);\n\n    Polygon poly157(4);\n    poly157.ps[0] = Point(252.5, 2045.92);\n    poly157.ps[1] = Point(252.5, 2085.92);\n    poly157.ps[2] = Point(192.5, 2085.92);\n    poly157.ps[3] = Point(192.5, 2045.92);\n    new ShapeRef(router, poly157, 157);\n\n    Polygon poly158(4);\n    poly158.ps[0] = Point(741.5, 1642.92);\n    poly158.ps[1] = Point(741.5, 1682.92);\n    poly158.ps[2] = Point(681.5, 1682.92);\n    poly158.ps[3] = Point(681.5, 1642.92);\n    new ShapeRef(router, poly158, 158);\n\n    Polygon poly159(4);\n    poly159.ps[0] = Point(1458.5, 2243.79);\n    poly159.ps[1] = Point(1458.5, 2303.79);\n    poly159.ps[2] = Point(1418.5, 2303.79);\n    poly159.ps[3] = Point(1418.5, 2243.79);\n    new ShapeRef(router, poly159, 159);\n\n    ConnRef *connRef160 = new ConnRef(router, 160);\n    ConnEnd srcPt160(Point(1191.5, 1211.75), 2);\n    connRef160->setSourceEndpoint(srcPt160);\n    ConnEnd dstPt160(Point(736.5, 1291.42), 15);\n    connRef160->setDestEndpoint(dstPt160);\n    connRef160->setRoutingType((ConnType)2);\n\n    ConnRef *connRef161 = new ConnRef(router, 161);\n    ConnEnd srcPt161(Point(1191.5, 1181.75), 1);\n    connRef161->setSourceEndpoint(srcPt161);\n    ConnEnd dstPt161(Point(1191.5, 1115.75), 15);\n    connRef161->setDestEndpoint(dstPt161);\n    connRef161->setRoutingType((ConnType)2);\n\n    ConnRef *connRef162 = new ConnRef(router, 162);\n    ConnEnd srcPt162(Point(1191.5, 1211.75), 2);\n    connRef162->setSourceEndpoint(srcPt162);\n    ConnEnd dstPt162(Point(1191.5, 1291.42), 15);\n    connRef162->setDestEndpoint(dstPt162);\n    connRef162->setRoutingType((ConnType)2);\n\n    ConnRef *connRef163 = new ConnRef(router, 163);\n    ConnEnd srcPt163(Point(754.5, 2348.79), 4);\n    connRef163->setSourceEndpoint(srcPt163);\n    ConnEnd dstPt163(Point(251.5, 2379.79), 15);\n    connRef163->setDestEndpoint(dstPt163);\n    connRef163->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints163(1);\n    checkpoints163[0] = Point(807.5, 2379.79);\n    connRef163->setRoutingCheckpoints(checkpoints163);\n\n    ConnRef *connRef164 = new ConnRef(router, 164);\n    ConnEnd srcPt164(Point(784.5, 2348.79), 8);\n    connRef164->setSourceEndpoint(srcPt164);\n    ConnEnd dstPt164(Point(829.5, 2379.79), 15);\n    connRef164->setDestEndpoint(dstPt164);\n    connRef164->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints164(1);\n    checkpoints164[0] = Point(731.5, 2379.79);\n    connRef164->setRoutingCheckpoints(checkpoints164);\n\n    ConnRef *connRef165 = new ConnRef(router, 165);\n    ConnEnd srcPt165(Point(251.5, 2246.42), 2);\n    connRef165->setSourceEndpoint(srcPt165);\n    ConnEnd dstPt165(Point(251.5, 2379.79), 15);\n    connRef165->setDestEndpoint(dstPt165);\n    connRef165->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints165(1);\n    checkpoints165[0] = Point(226.5, 2261.42);\n    connRef165->setRoutingCheckpoints(checkpoints165);\n\n    ConnRef *connRef166 = new ConnRef(router, 166);\n    ConnEnd srcPt166(Point(754.5, 2410.79), 4);\n    connRef166->setSourceEndpoint(srcPt166);\n    ConnEnd dstPt166(Point(251.5, 2379.79), 15);\n    connRef166->setDestEndpoint(dstPt166);\n    connRef166->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints166(1);\n    checkpoints166[0] = Point(807.5, 2379.79);\n    connRef166->setRoutingCheckpoints(checkpoints166);\n\n    ConnRef *connRef167 = new ConnRef(router, 167);\n    ConnEnd srcPt167(Point(784.5, 2410.79), 8);\n    connRef167->setSourceEndpoint(srcPt167);\n    ConnEnd dstPt167(Point(829.5, 2379.79), 15);\n    connRef167->setDestEndpoint(dstPt167);\n    connRef167->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints167(1);\n    checkpoints167[0] = Point(731.5, 2379.79);\n    connRef167->setRoutingCheckpoints(checkpoints167);\n\n    ConnRef *connRef168 = new ConnRef(router, 168);\n    ConnEnd srcPt168(Point(251.5, 2379.79), 15);\n    connRef168->setSourceEndpoint(srcPt168);\n    ConnEnd dstPt168(Point(160.5, 2246.42), 2);\n    connRef168->setDestEndpoint(dstPt168);\n    connRef168->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints168(1);\n    checkpoints168[0] = Point(226.5, 2261.42);\n    connRef168->setRoutingCheckpoints(checkpoints168);\n\n    ConnRef *connRef169 = new ConnRef(router, 169);\n    ConnEnd srcPt169(Point(829.5, 2332.79), 2);\n    connRef169->setSourceEndpoint(srcPt169);\n    ConnEnd dstPt169(Point(829.5, 2379.79), 15);\n    connRef169->setDestEndpoint(dstPt169);\n    connRef169->setRoutingType((ConnType)2);\n\n    ConnRef *connRef170 = new ConnRef(router, 170);\n    ConnEnd srcPt170(Point(1074.5, 2273.79), 4);\n    connRef170->setSourceEndpoint(srcPt170);\n    ConnEnd dstPt170(Point(829.5, 2379.79), 15);\n    connRef170->setDestEndpoint(dstPt170);\n    connRef170->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints170(1);\n    checkpoints170[0] = Point(1051.5, 2379.79);\n    connRef170->setRoutingCheckpoints(checkpoints170);\n\n    ConnRef *connRef171 = new ConnRef(router, 171);\n    ConnEnd srcPt171(Point(1074.5, 2348.79), 4);\n    connRef171->setSourceEndpoint(srcPt171);\n    ConnEnd dstPt171(Point(829.5, 2379.79), 15);\n    connRef171->setDestEndpoint(dstPt171);\n    connRef171->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints171(1);\n    checkpoints171[0] = Point(1051.5, 2379.79);\n    connRef171->setRoutingCheckpoints(checkpoints171);\n\n    ConnRef *connRef172 = new ConnRef(router, 172);\n    ConnEnd srcPt172(Point(996.5, 2179.79), 4);\n    connRef172->setSourceEndpoint(srcPt172);\n    ConnEnd dstPt172(Point(829.5, 2169.42), 15);\n    connRef172->setDestEndpoint(dstPt172);\n    connRef172->setRoutingType((ConnType)2);\n\n    ConnRef *connRef173 = new ConnRef(router, 173);\n    ConnEnd srcPt173(Point(1011.5, 2113.42), 2);\n    connRef173->setSourceEndpoint(srcPt173);\n    ConnEnd dstPt173(Point(829.5, 2169.42), 15);\n    connRef173->setDestEndpoint(dstPt173);\n    connRef173->setRoutingType((ConnType)2);\n\n    ConnRef *connRef174 = new ConnRef(router, 174);\n    ConnEnd srcPt174(Point(690.5, 2169.42), 4);\n    connRef174->setSourceEndpoint(srcPt174);\n    ConnEnd dstPt174(Point(523.5, 2169.42), 15);\n    connRef174->setDestEndpoint(dstPt174);\n    connRef174->setRoutingType((ConnType)2);\n\n    ConnRef *connRef175 = new ConnRef(router, 175);\n    ConnEnd srcPt175(Point(690.5, 2169.42), 4);\n    connRef175->setSourceEndpoint(srcPt175);\n    ConnEnd dstPt175(Point(829.5, 2065.42), 15);\n    connRef175->setDestEndpoint(dstPt175);\n    connRef175->setRoutingType((ConnType)2);\n\n    ConnRef *connRef176 = new ConnRef(router, 176);\n    ConnEnd srcPt176(Point(360.5, 2169.42), 4);\n    connRef176->setSourceEndpoint(srcPt176);\n    ConnEnd dstPt176(Point(251.5, 2169.42), 15);\n    connRef176->setDestEndpoint(dstPt176);\n    connRef176->setRoutingType((ConnType)2);\n\n    ConnRef *connRef177 = new ConnRef(router, 177);\n    ConnEnd srcPt177(Point(390.5, 2169.42), 8);\n    connRef177->setSourceEndpoint(srcPt177);\n    ConnEnd dstPt177(Point(523.5, 2169.42), 15);\n    connRef177->setDestEndpoint(dstPt177);\n    connRef177->setRoutingType((ConnType)2);\n\n    ConnRef *connRef178 = new ConnRef(router, 178);\n    ConnEnd srcPt178(Point(360.5, 2169.42), 4);\n    connRef178->setSourceEndpoint(srcPt178);\n    ConnEnd dstPt178(Point(375.5, 2312.46), 15);\n    connRef178->setDestEndpoint(dstPt178);\n    connRef178->setRoutingType((ConnType)2);\n\n    ConnRef *connRef179 = new ConnRef(router, 179);\n    ConnEnd srcPt179(Point(1373.5, 2169.42), 8);\n    connRef179->setSourceEndpoint(srcPt179);\n    ConnEnd dstPt179(Point(1432.5, 2169.42), 15);\n    connRef179->setDestEndpoint(dstPt179);\n    connRef179->setRoutingType((ConnType)2);\n\n    ConnRef *connRef180 = new ConnRef(router, 180);\n    ConnEnd srcPt180(Point(1343.5, 2169.42), 4);\n    connRef180->setSourceEndpoint(srcPt180);\n    ConnEnd dstPt180(Point(1191.5, 2169.42), 15);\n    connRef180->setDestEndpoint(dstPt180);\n    connRef180->setRoutingType((ConnType)2);\n\n    ConnRef *connRef181 = new ConnRef(router, 181);\n    ConnEnd srcPt181(Point(1191.5, 1980.42), 2);\n    connRef181->setSourceEndpoint(srcPt181);\n    ConnEnd dstPt181(Point(1191.5, 2169.42), 15);\n    connRef181->setDestEndpoint(dstPt181);\n    connRef181->setRoutingType((ConnType)2);\n\n    ConnRef *connRef182 = new ConnRef(router, 182);\n    ConnEnd srcPt182(Point(1191.5, 1826.42), 1);\n    connRef182->setSourceEndpoint(srcPt182);\n    ConnEnd dstPt182(Point(1191.5, 1779.42), 15);\n    connRef182->setDestEndpoint(dstPt182);\n    connRef182->setRoutingType((ConnType)2);\n\n    ConnRef *connRef183 = new ConnRef(router, 183);\n    ConnEnd srcPt183(Point(1191.5, 1856.42), 2);\n    connRef183->setSourceEndpoint(srcPt183);\n    ConnEnd dstPt183(Point(1191.5, 1903.42), 15);\n    connRef183->setDestEndpoint(dstPt183);\n    connRef183->setRoutingType((ConnType)2);\n\n    ConnRef *connRef184 = new ConnRef(router, 184);\n    ConnEnd srcPt184(Point(1191.5, 1732.42), 2);\n    connRef184->setSourceEndpoint(srcPt184);\n    ConnEnd dstPt184(Point(1191.5, 1779.42), 15);\n    connRef184->setDestEndpoint(dstPt184);\n    connRef184->setRoutingType((ConnType)2);\n\n    ConnRef *connRef185 = new ConnRef(router, 185);\n    ConnEnd srcPt185(Point(1191.5, 1702.42), 1);\n    connRef185->setSourceEndpoint(srcPt185);\n    ConnEnd dstPt185(Point(1191.5, 1655.42), 15);\n    connRef185->setDestEndpoint(dstPt185);\n    connRef185->setRoutingType((ConnType)2);\n\n    ConnRef *connRef186 = new ConnRef(router, 186);\n    ConnEnd srcPt186(Point(1160.5, 1358.42), 2);\n    connRef186->setSourceEndpoint(srcPt186);\n    ConnEnd dstPt186(Point(1191.5, 1455.42), 15);\n    connRef186->setDestEndpoint(dstPt186);\n    connRef186->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints186(1);\n    checkpoints186[0] = Point(1191.5, 1373.42);\n    connRef186->setRoutingCheckpoints(checkpoints186);\n\n    ConnRef *connRef187 = new ConnRef(router, 187);\n    ConnEnd srcPt187(Point(1160.5, 1328.42), 1);\n    connRef187->setSourceEndpoint(srcPt187);\n    ConnEnd dstPt187(Point(1191.5, 1291.42), 15);\n    connRef187->setDestEndpoint(dstPt187);\n    connRef187->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints187(1);\n    checkpoints187[0] = Point(1191.5, 1313.42);\n    connRef187->setRoutingCheckpoints(checkpoints187);\n\n    ConnRef *connRef188 = new ConnRef(router, 188);\n    ConnEnd srcPt188(Point(965.5, 1291.42), 4);\n    connRef188->setSourceEndpoint(srcPt188);\n    ConnEnd dstPt188(Point(736.5, 1291.42), 15);\n    connRef188->setDestEndpoint(dstPt188);\n    connRef188->setRoutingType((ConnType)2);\n\n    ConnRef *connRef189 = new ConnRef(router, 189);\n    ConnEnd srcPt189(Point(995.5, 1291.42), 8);\n    connRef189->setSourceEndpoint(srcPt189);\n    ConnEnd dstPt189(Point(1191.5, 1291.42), 15);\n    connRef189->setDestEndpoint(dstPt189);\n    connRef189->setRoutingType((ConnType)2);\n\n    ConnRef *connRef190 = new ConnRef(router, 190);\n    ConnEnd srcPt190(Point(1222.5, 1078.75), 2);\n    connRef190->setSourceEndpoint(srcPt190);\n    ConnEnd dstPt190(Point(1191.5, 1115.75), 15);\n    connRef190->setDestEndpoint(dstPt190);\n    connRef190->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints190(1);\n    checkpoints190[0] = Point(1191.5, 1033.75);\n    connRef190->setRoutingCheckpoints(checkpoints190);\n\n    ConnRef *connRef191 = new ConnRef(router, 191);\n    ConnEnd srcPt191(Point(1160.5, 1048.75), 1);\n    connRef191->setSourceEndpoint(srcPt191);\n    ConnEnd dstPt191(Point(1191.5, 883), 15);\n    connRef191->setDestEndpoint(dstPt191);\n    connRef191->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints191(1);\n    checkpoints191[0] = Point(1191.5, 1093.75);\n    connRef191->setRoutingCheckpoints(checkpoints191);\n\n    ConnRef *connRef192 = new ConnRef(router, 192);\n    ConnEnd srcPt192(Point(1312.5, 550.5), 4);\n    connRef192->setSourceEndpoint(srcPt192);\n    ConnEnd dstPt192(Point(1191.5, 584), 15);\n    connRef192->setDestEndpoint(dstPt192);\n    connRef192->setRoutingType((ConnType)2);\n\n    ConnRef *connRef193 = new ConnRef(router, 193);\n    ConnEnd srcPt193(Point(1191.5, 725), 1);\n    connRef193->setSourceEndpoint(srcPt193);\n    ConnEnd dstPt193(Point(1191.5, 584), 15);\n    connRef193->setDestEndpoint(dstPt193);\n    connRef193->setRoutingType((ConnType)2);\n\n    ConnRef *connRef194 = new ConnRef(router, 194);\n    ConnEnd srcPt194(Point(1191.5, 755), 2);\n    connRef194->setSourceEndpoint(srcPt194);\n    ConnEnd dstPt194(Point(1191.5, 883), 15);\n    connRef194->setDestEndpoint(dstPt194);\n    connRef194->setRoutingType((ConnType)2);\n\n    ConnRef *connRef195 = new ConnRef(router, 195);\n    ConnEnd srcPt195(Point(1191.5, 463), 1);\n    connRef195->setSourceEndpoint(srcPt195);\n    ConnEnd dstPt195(Point(1191.5, 280), 15);\n    connRef195->setDestEndpoint(dstPt195);\n    connRef195->setRoutingType((ConnType)2);\n\n    ConnRef *connRef196 = new ConnRef(router, 196);\n    ConnEnd srcPt196(Point(1191.5, 493), 2);\n    connRef196->setSourceEndpoint(srcPt196);\n    ConnEnd dstPt196(Point(1191.5, 584), 15);\n    connRef196->setDestEndpoint(dstPt196);\n    connRef196->setRoutingType((ConnType)2);\n\n    ConnRef *connRef197 = new ConnRef(router, 197);\n    ConnEnd srcPt197(Point(903.5, 883), 4);\n    connRef197->setSourceEndpoint(srcPt197);\n    ConnEnd dstPt197(Point(736.5, 883), 15);\n    connRef197->setDestEndpoint(dstPt197);\n    connRef197->setRoutingType((ConnType)2);\n\n    ConnRef *connRef198 = new ConnRef(router, 198);\n    ConnEnd srcPt198(Point(933.5, 883), 8);\n    connRef198->setSourceEndpoint(srcPt198);\n    ConnEnd dstPt198(Point(1191.5, 883), 15);\n    connRef198->setDestEndpoint(dstPt198);\n    connRef198->setRoutingType((ConnType)2);\n\n    ConnRef *connRef199 = new ConnRef(router, 199);\n    ConnEnd srcPt199(Point(491.5, 777), 8);\n    connRef199->setSourceEndpoint(srcPt199);\n    ConnEnd dstPt199(Point(736.5, 883), 15);\n    connRef199->setDestEndpoint(dstPt199);\n    connRef199->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints199(1);\n    checkpoints199[0] = Point(438.5, 883);\n    connRef199->setRoutingCheckpoints(checkpoints199);\n\n    ConnRef *connRef200 = new ConnRef(router, 200);\n    ConnEnd srcPt200(Point(491.5, 852), 8);\n    connRef200->setSourceEndpoint(srcPt200);\n    ConnEnd dstPt200(Point(736.5, 883), 15);\n    connRef200->setDestEndpoint(dstPt200);\n    connRef200->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints200(1);\n    checkpoints200[0] = Point(438.5, 883);\n    connRef200->setRoutingCheckpoints(checkpoints200);\n\n    ConnRef *connRef201 = new ConnRef(router, 201);\n    ConnEnd srcPt201(Point(783.5, 740), 4);\n    connRef201->setSourceEndpoint(srcPt201);\n    ConnEnd dstPt201(Point(736.5, 883), 15);\n    connRef201->setDestEndpoint(dstPt201);\n    connRef201->setRoutingType((ConnType)2);\n\n    ConnRef *connRef202 = new ConnRef(router, 202);\n    ConnEnd srcPt202(Point(813.5, 740), 8);\n    connRef202->setSourceEndpoint(srcPt202);\n    ConnEnd dstPt202(Point(1191.5, 584), 15);\n    connRef202->setDestEndpoint(dstPt202);\n    connRef202->setRoutingType((ConnType)2);\n\n    ConnRef *connRef203 = new ConnRef(router, 203);\n    ConnEnd srcPt203(Point(643.5, 755), 2);\n    connRef203->setSourceEndpoint(srcPt203);\n    ConnEnd dstPt203(Point(736.5, 883), 15);\n    connRef203->setDestEndpoint(dstPt203);\n    connRef203->setRoutingType((ConnType)2);\n\n    ConnRef *connRef204 = new ConnRef(router, 204);\n    ConnEnd srcPt204(Point(643.5, 725), 1);\n    connRef204->setSourceEndpoint(srcPt204);\n    ConnEnd dstPt204(Point(1191.5, 584), 15);\n    connRef204->setDestEndpoint(dstPt204);\n    connRef204->setRoutingType((ConnType)2);\n\n    ConnRef *connRef205 = new ConnRef(router, 205);\n    ConnEnd srcPt205(Point(286.5, 725), 1);\n    connRef205->setSourceEndpoint(srcPt205);\n    ConnEnd dstPt205(Point(286.5, 584), 15);\n    connRef205->setDestEndpoint(dstPt205);\n    connRef205->setRoutingType((ConnType)2);\n\n    ConnRef *connRef206 = new ConnRef(router, 206);\n    ConnEnd srcPt206(Point(286.5, 755), 2);\n    connRef206->setSourceEndpoint(srcPt206);\n    ConnEnd dstPt206(Point(286.5, 883), 15);\n    connRef206->setDestEndpoint(dstPt206);\n    connRef206->setRoutingType((ConnType)2);\n\n    ConnRef *connRef207 = new ConnRef(router, 207);\n    ConnEnd srcPt207(Point(722.5, 478), 8);\n    connRef207->setSourceEndpoint(srcPt207);\n    ConnEnd dstPt207(Point(1191.5, 584), 15);\n    connRef207->setDestEndpoint(dstPt207);\n    connRef207->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints207(1);\n    checkpoints207[0] = Point(669.5, 584);\n    connRef207->setRoutingCheckpoints(checkpoints207);\n\n    ConnRef *connRef208 = new ConnRef(router, 208);\n    ConnEnd srcPt208(Point(722.5, 553), 8);\n    connRef208->setSourceEndpoint(srcPt208);\n    ConnEnd dstPt208(Point(1191.5, 584), 15);\n    connRef208->setDestEndpoint(dstPt208);\n    connRef208->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints208(1);\n    checkpoints208[0] = Point(669.5, 584);\n    connRef208->setRoutingCheckpoints(checkpoints208);\n\n    ConnRef *connRef209 = new ConnRef(router, 209);\n    ConnEnd srcPt209(Point(692.5, 403), 4);\n    connRef209->setSourceEndpoint(srcPt209);\n    ConnEnd dstPt209(Point(286.5, 584), 15);\n    connRef209->setDestEndpoint(dstPt209);\n    connRef209->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints209(1);\n    checkpoints209[0] = Point(745.5, 584);\n    connRef209->setRoutingCheckpoints(checkpoints209);\n\n    ConnRef *connRef210 = new ConnRef(router, 210);\n    ConnEnd srcPt210(Point(752.5, 341), 4);\n    connRef210->setSourceEndpoint(srcPt210);\n    ConnEnd dstPt210(Point(286.5, 584), 15);\n    connRef210->setDestEndpoint(dstPt210);\n    connRef210->setRoutingType((ConnType)2);\n\n    ConnRef *connRef211 = new ConnRef(router, 211);\n    ConnEnd srcPt211(Point(752.5, 239), 4);\n    connRef211->setSourceEndpoint(srcPt211);\n    ConnEnd dstPt211(Point(286.5, 584), 15);\n    connRef211->setDestEndpoint(dstPt211);\n    connRef211->setRoutingType((ConnType)2);\n\n    ConnRef *connRef212 = new ConnRef(router, 212);\n    ConnEnd srcPt212(Point(507.5, 2312.46), 8);\n    connRef212->setSourceEndpoint(srcPt212);\n    ConnEnd dstPt212(Point(674.5, 2312.46), 15);\n    connRef212->setDestEndpoint(dstPt212);\n    connRef212->setRoutingType((ConnType)2);\n\n    ConnRef *connRef213 = new ConnRef(router, 213);\n    ConnEnd srcPt213(Point(1191.5, 1584.42), 2);\n    connRef213->setSourceEndpoint(srcPt213);\n    ConnEnd dstPt213(Point(1191.5, 1655.42), 15);\n    connRef213->setDestEndpoint(dstPt213);\n    connRef213->setRoutingType((ConnType)2);\n\n    ConnRef *connRef214 = new ConnRef(router, 214);\n    ConnEnd srcPt214(Point(1191.5, 1554.42), 1);\n    connRef214->setSourceEndpoint(srcPt214);\n    ConnEnd dstPt214(Point(1191.5, 1455.42), 15);\n    connRef214->setDestEndpoint(dstPt214);\n    connRef214->setRoutingType((ConnType)2);\n\n    ConnRef *connRef215 = new ConnRef(router, 215);\n    ConnEnd srcPt215(Point(722.5, 615), 8);\n    connRef215->setSourceEndpoint(srcPt215);\n    ConnEnd dstPt215(Point(1191.5, 584), 15);\n    connRef215->setDestEndpoint(dstPt215);\n    connRef215->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints215(1);\n    checkpoints215[0] = Point(669.5, 584);\n    connRef215->setRoutingCheckpoints(checkpoints215);\n\n    ConnRef *connRef216 = new ConnRef(router, 216);\n    ConnEnd srcPt216(Point(491.5, 914), 8);\n    connRef216->setSourceEndpoint(srcPt216);\n    ConnEnd dstPt216(Point(736.5, 883), 15);\n    connRef216->setDestEndpoint(dstPt216);\n    connRef216->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints216(1);\n    checkpoints216[0] = Point(438.5, 883);\n    connRef216->setRoutingCheckpoints(checkpoints216);\n\n    ConnRef *connRef217 = new ConnRef(router, 217);\n    ConnEnd srcPt217(Point(301.5, 1076), 8);\n    connRef217->setSourceEndpoint(srcPt217);\n    ConnEnd dstPt217(Point(406.5, 1076), 15);\n    connRef217->setDestEndpoint(dstPt217);\n    connRef217->setRoutingType((ConnType)2);\n\n    ConnRef *connRef218 = new ConnRef(router, 218);\n    ConnEnd srcPt218(Point(301.5, 1178), 8);\n    connRef218->setSourceEndpoint(srcPt218);\n    ConnEnd dstPt218(Point(406.5, 1178), 15);\n    connRef218->setDestEndpoint(dstPt218);\n    connRef218->setRoutingType((ConnType)2);\n\n    ConnRef *connRef219 = new ConnRef(router, 219);\n    ConnEnd srcPt219(Point(569.5, 1076), 8);\n    connRef219->setSourceEndpoint(srcPt219);\n    ConnEnd dstPt219(Point(736.5, 883), 15);\n    connRef219->setDestEndpoint(dstPt219);\n    connRef219->setRoutingType((ConnType)2);\n\n    ConnRef *connRef220 = new ConnRef(router, 220);\n    ConnEnd srcPt220(Point(569.5, 1178), 8);\n    connRef220->setSourceEndpoint(srcPt220);\n    ConnEnd dstPt220(Point(736.5, 883), 15);\n    connRef220->setDestEndpoint(dstPt220);\n    connRef220->setRoutingType((ConnType)2);\n\n    ConnRef *connRef221 = new ConnRef(router, 221);\n    ConnEnd srcPt221(Point(1401.5, 550.5), 15);\n    connRef221->setSourceEndpoint(srcPt221);\n    ConnEnd dstPt221(Point(1342.5, 550.5), 8);\n    connRef221->setDestEndpoint(dstPt221);\n    connRef221->setRoutingType((ConnType)2);\n\n    ConnRef *connRef222 = new ConnRef(router, 222);\n    ConnEnd srcPt222(Point(286.5, 584), 15);\n    connRef222->setSourceEndpoint(srcPt222);\n    ConnEnd dstPt222(Point(692.5, 615), 4);\n    connRef222->setDestEndpoint(dstPt222);\n    connRef222->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints222(1);\n    checkpoints222[0] = Point(745.5, 584);\n    connRef222->setRoutingCheckpoints(checkpoints222);\n\n    ConnRef *connRef223 = new ConnRef(router, 223);\n    ConnEnd srcPt223(Point(286.5, 584), 15);\n    connRef223->setSourceEndpoint(srcPt223);\n    ConnEnd dstPt223(Point(692.5, 690), 4);\n    connRef223->setDestEndpoint(dstPt223);\n    connRef223->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints223(1);\n    checkpoints223[0] = Point(745.5, 584);\n    connRef223->setRoutingCheckpoints(checkpoints223);\n\n    ConnRef *connRef224 = new ConnRef(router, 224);\n    ConnEnd srcPt224(Point(286.5, 883), 15);\n    connRef224->setSourceEndpoint(srcPt224);\n    ConnEnd dstPt224(Point(461.5, 914), 4);\n    connRef224->setDestEndpoint(dstPt224);\n    connRef224->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints224(1);\n    checkpoints224[0] = Point(514.5, 883);\n    connRef224->setRoutingCheckpoints(checkpoints224);\n\n    ConnRef *connRef225 = new ConnRef(router, 225);\n    ConnEnd srcPt225(Point(461.5, 989), 4);\n    connRef225->setSourceEndpoint(srcPt225);\n    ConnEnd dstPt225(Point(286.5, 883), 15);\n    connRef225->setDestEndpoint(dstPt225);\n    connRef225->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints225(1);\n    checkpoints225[0] = Point(514.5, 883);\n    connRef225->setRoutingCheckpoints(checkpoints225);\n\n    ConnRef *connRef226 = new ConnRef(router, 226);\n    ConnEnd srcPt226(Point(491.5, 989), 8);\n    connRef226->setSourceEndpoint(srcPt226);\n    ConnEnd dstPt226(Point(736.5, 883), 15);\n    connRef226->setDestEndpoint(dstPt226);\n    connRef226->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints226(1);\n    checkpoints226[0] = Point(438.5, 883);\n    connRef226->setRoutingCheckpoints(checkpoints226);\n\n    ConnRef *connRef227 = new ConnRef(router, 227);\n    ConnEnd srcPt227(Point(1191.5, 883), 15);\n    connRef227->setSourceEndpoint(srcPt227);\n    ConnEnd dstPt227(Point(1313.5, 1048.75), 1);\n    connRef227->setDestEndpoint(dstPt227);\n    connRef227->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints227(1);\n    checkpoints227[0] = Point(1191.5, 1093.75);\n    connRef227->setRoutingCheckpoints(checkpoints227);\n\n    ConnRef *connRef228 = new ConnRef(router, 228);\n    ConnEnd srcPt228(Point(714.439, 1872.42), 8);\n    connRef228->setSourceEndpoint(srcPt228);\n    ConnEnd dstPt228(Point(1191.5, 1903.42), 15);\n    connRef228->setDestEndpoint(dstPt228);\n    connRef228->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints228(1);\n    checkpoints228[0] = Point(737.439, 1903.42);\n    connRef228->setRoutingCheckpoints(checkpoints228);\n\n    ConnRef *connRef229 = new ConnRef(router, 229);\n    ConnEnd srcPt229(Point(1240.5, 1522.42), 2);\n    connRef229->setSourceEndpoint(srcPt229);\n    ConnEnd dstPt229(Point(1191.5, 1655.42), 15);\n    connRef229->setDestEndpoint(dstPt229);\n    connRef229->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints229(1);\n    checkpoints229[0] = Point(1265.5, 1537.42);\n    connRef229->setRoutingCheckpoints(checkpoints229);\n\n    ConnRef *connRef230 = new ConnRef(router, 230);\n    ConnEnd srcPt230(Point(1331.5, 1522.42), 2);\n    connRef230->setSourceEndpoint(srcPt230);\n    ConnEnd dstPt230(Point(1191.5, 1655.42), 15);\n    connRef230->setDestEndpoint(dstPt230);\n    connRef230->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints230(1);\n    checkpoints230[0] = Point(1265.5, 1537.42);\n    connRef230->setRoutingCheckpoints(checkpoints230);\n\n    ConnRef *connRef231 = new ConnRef(router, 231);\n    ConnEnd srcPt231(Point(1422.5, 1522.42), 2);\n    connRef231->setSourceEndpoint(srcPt231);\n    ConnEnd dstPt231(Point(1191.5, 1655.42), 15);\n    connRef231->setDestEndpoint(dstPt231);\n    connRef231->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints231(1);\n    checkpoints231[0] = Point(1265.5, 1537.42);\n    connRef231->setRoutingCheckpoints(checkpoints231);\n\n    ConnRef *connRef232 = new ConnRef(router, 232);\n    ConnEnd srcPt232(Point(1222.5, 1358.42), 2);\n    connRef232->setSourceEndpoint(srcPt232);\n    ConnEnd dstPt232(Point(1191.5, 1455.42), 15);\n    connRef232->setDestEndpoint(dstPt232);\n    connRef232->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints232(1);\n    checkpoints232[0] = Point(1191.5, 1373.42);\n    connRef232->setRoutingCheckpoints(checkpoints232);\n\n    ConnRef *connRef233 = new ConnRef(router, 233);\n    ConnEnd srcPt233(Point(1115.5, 1455.42), 8);\n    connRef233->setSourceEndpoint(srcPt233);\n    ConnEnd dstPt233(Point(1191.5, 1455.42), 15);\n    connRef233->setDestEndpoint(dstPt233);\n    connRef233->setRoutingType((ConnType)2);\n\n    ConnRef *connRef234 = new ConnRef(router, 234);\n    ConnEnd srcPt234(Point(1104.5, 2273.79), 8);\n    connRef234->setSourceEndpoint(srcPt234);\n    ConnEnd dstPt234(Point(1327.5, 2379.79), 15);\n    connRef234->setDestEndpoint(dstPt234);\n    connRef234->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints234(1);\n    checkpoints234[0] = Point(1127.5, 2379.79);\n    connRef234->setRoutingCheckpoints(checkpoints234);\n\n    ConnRef *connRef235 = new ConnRef(router, 235);\n    ConnEnd srcPt235(Point(1104.5, 2348.79), 8);\n    connRef235->setSourceEndpoint(srcPt235);\n    ConnEnd dstPt235(Point(1327.5, 2379.79), 15);\n    connRef235->setDestEndpoint(dstPt235);\n    connRef235->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints235(1);\n    checkpoints235[0] = Point(1127.5, 2379.79);\n    connRef235->setRoutingCheckpoints(checkpoints235);\n\n    ConnRef *connRef236 = new ConnRef(router, 236);\n    ConnEnd srcPt236(Point(1104.5, 2410.79), 8);\n    connRef236->setSourceEndpoint(srcPt236);\n    ConnEnd dstPt236(Point(1327.5, 2379.79), 15);\n    connRef236->setDestEndpoint(dstPt236);\n    connRef236->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints236(1);\n    checkpoints236[0] = Point(1127.5, 2379.79);\n    connRef236->setRoutingCheckpoints(checkpoints236);\n\n    ConnRef *connRef237 = new ConnRef(router, 237);\n    ConnEnd srcPt237(Point(1104.5, 2485.79), 8);\n    connRef237->setSourceEndpoint(srcPt237);\n    ConnEnd dstPt237(Point(1327.5, 2379.79), 15);\n    connRef237->setDestEndpoint(dstPt237);\n    connRef237->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints237(1);\n    checkpoints237[0] = Point(1127.5, 2379.79);\n    connRef237->setRoutingCheckpoints(checkpoints237);\n\n    ConnRef *connRef238 = new ConnRef(router, 238);\n    ConnEnd srcPt238(Point(569.5, 2040.42), 8);\n    connRef238->setSourceEndpoint(srcPt238);\n    ConnEnd dstPt238(Point(1191.5, 2169.42), 15);\n    connRef238->setDestEndpoint(dstPt238);\n    connRef238->setRoutingType((ConnType)2);\n\n    ConnRef *connRef239 = new ConnRef(router, 239);\n    ConnEnd srcPt239(Point(829.5, 2169.42), 15);\n    connRef239->setSourceEndpoint(srcPt239);\n    ConnEnd dstPt239(Point(829.5, 2302.79), 1);\n    connRef239->setDestEndpoint(dstPt239);\n    connRef239->setRoutingType((ConnType)2);\n\n    ConnRef *connRef240 = new ConnRef(router, 240);\n    ConnEnd srcPt240(Point(539.5, 2040.42), 4);\n    connRef240->setSourceEndpoint(srcPt240);\n    ConnEnd dstPt240(Point(251.5, 2169.42), 15);\n    connRef240->setDestEndpoint(dstPt240);\n    connRef240->setRoutingType((ConnType)2);\n\n    ConnRef *connRef241 = new ConnRef(router, 241);\n    ConnEnd srcPt241(Point(1074.5, 2410.79), 4);\n    connRef241->setSourceEndpoint(srcPt241);\n    ConnEnd dstPt241(Point(829.5, 2379.79), 15);\n    connRef241->setDestEndpoint(dstPt241);\n    connRef241->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints241(1);\n    checkpoints241[0] = Point(1051.5, 2379.79);\n    connRef241->setRoutingCheckpoints(checkpoints241);\n\n    ConnRef *connRef242 = new ConnRef(router, 242);\n    ConnEnd srcPt242(Point(1074.5, 2485.79), 4);\n    connRef242->setSourceEndpoint(srcPt242);\n    ConnEnd dstPt242(Point(829.5, 2379.79), 15);\n    connRef242->setDestEndpoint(dstPt242);\n    connRef242->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints242(1);\n    checkpoints242[0] = Point(1051.5, 2379.79);\n    connRef242->setRoutingCheckpoints(checkpoints242);\n\n    ConnRef *connRef243 = new ConnRef(router, 243);\n    ConnEnd srcPt243(Point(477.5, 2312.46), 4);\n    connRef243->setSourceEndpoint(srcPt243);\n    ConnEnd dstPt243(Point(375.5, 2312.46), 15);\n    connRef243->setDestEndpoint(dstPt243);\n    connRef243->setRoutingType((ConnType)2);\n\n    ConnRef *connRef244 = new ConnRef(router, 244);\n    ConnEnd srcPt244(Point(1191.5, 1115.75), 15);\n    connRef244->setSourceEndpoint(srcPt244);\n    ConnEnd dstPt244(Point(1160.5, 1078.75), 2);\n    connRef244->setDestEndpoint(dstPt244);\n    connRef244->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints244(1);\n    checkpoints244[0] = Point(1191.5, 1033.75);\n    connRef244->setRoutingCheckpoints(checkpoints244);\n\n    ConnRef *connRef245 = new ConnRef(router, 245);\n    ConnEnd srcPt245(Point(216.5, 1076), 15);\n    connRef245->setSourceEndpoint(srcPt245);\n    ConnEnd dstPt245(Point(271.5, 1076), 4);\n    connRef245->setDestEndpoint(dstPt245);\n    connRef245->setRoutingType((ConnType)2);\n\n    ConnRef *connRef246 = new ConnRef(router, 246);\n    ConnEnd srcPt246(Point(406.5, 1076), 15);\n    connRef246->setSourceEndpoint(srcPt246);\n    ConnEnd dstPt246(Point(539.5, 1076), 4);\n    connRef246->setDestEndpoint(dstPt246);\n    connRef246->setRoutingType((ConnType)2);\n\n    ConnRef *connRef247 = new ConnRef(router, 247);\n    ConnEnd srcPt247(Point(406.5, 1178), 15);\n    connRef247->setSourceEndpoint(srcPt247);\n    ConnEnd dstPt247(Point(539.5, 1178), 4);\n    connRef247->setDestEndpoint(dstPt247);\n    connRef247->setRoutingType((ConnType)2);\n\n    ConnRef *connRef248 = new ConnRef(router, 248);\n    ConnEnd srcPt248(Point(216.5, 1178), 15);\n    connRef248->setSourceEndpoint(srcPt248);\n    ConnEnd dstPt248(Point(271.5, 1178), 4);\n    connRef248->setDestEndpoint(dstPt248);\n    connRef248->setRoutingType((ConnType)2);\n\n    ConnRef *connRef249 = new ConnRef(router, 249);\n    ConnEnd srcPt249(Point(714.439, 1934.42), 8);\n    connRef249->setSourceEndpoint(srcPt249);\n    ConnEnd dstPt249(Point(1191.5, 1903.42), 15);\n    connRef249->setDestEndpoint(dstPt249);\n    connRef249->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints249(1);\n    checkpoints249[0] = Point(737.439, 1903.42);\n    connRef249->setRoutingCheckpoints(checkpoints249);\n#endif\n\n    ConnRef *connRef250 = new ConnRef(router, 250);\n    ConnEnd srcPt250(Point(251.5, 1903.42), 15);\n    connRef250->setSourceEndpoint(srcPt250);\n    ConnEnd dstPt250(Point(684.439, 1934.42), 4);\n    connRef250->setDestEndpoint(dstPt250);\n    connRef250->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints250(1);\n    checkpoints250[0] = Point(661.439, 1903.42);\n    connRef250->setRoutingCheckpoints(checkpoints250);\n\n    ConnRef *connRef251 = new ConnRef(router, 251);\n    ConnEnd srcPt251(Point(251.5, 1903.42), 15);\n    connRef251->setSourceEndpoint(srcPt251);\n    ConnEnd dstPt251(Point(684.439, 1872.42), 4);\n    connRef251->setDestEndpoint(dstPt251);\n    connRef251->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints251(1);\n    checkpoints251[0] = Point(661.439, 1903.42);\n    connRef251->setRoutingCheckpoints(checkpoints251);\n\n#ifdef ALL\n    ConnRef *connRef252 = new ConnRef(router, 252);\n    ConnEnd srcPt252(Point(1222.5, 1328.42), 1);\n    connRef252->setSourceEndpoint(srcPt252);\n    ConnEnd dstPt252(Point(1191.5, 1291.42), 15);\n    connRef252->setDestEndpoint(dstPt252);\n    connRef252->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints252(1);\n    checkpoints252[0] = Point(1191.5, 1313.42);\n    connRef252->setRoutingCheckpoints(checkpoints252);\n\n    ConnRef *connRef253 = new ConnRef(router, 253);\n    ConnEnd srcPt253(Point(1085.5, 1649.42), 4);\n    connRef253->setSourceEndpoint(srcPt253);\n    ConnEnd dstPt253(Point(949.5, 1569.42), 15);\n    connRef253->setDestEndpoint(dstPt253);\n    connRef253->setRoutingType((ConnType)2);\n\n    ConnRef *connRef254 = new ConnRef(router, 254);\n    ConnEnd srcPt254(Point(1115.5, 1649.42), 8);\n    connRef254->setSourceEndpoint(srcPt254);\n    ConnEnd dstPt254(Point(1191.5, 1655.42), 15);\n    connRef254->setDestEndpoint(dstPt254);\n    connRef254->setRoutingType((ConnType)2);\n\n    ConnRef *connRef255 = new ConnRef(router, 255);\n    ConnEnd srcPt255(Point(1085.5, 1455.42), 4);\n    connRef255->setSourceEndpoint(srcPt255);\n    ConnEnd dstPt255(Point(949.5, 1569.42), 15);\n    connRef255->setDestEndpoint(dstPt255);\n    connRef255->setRoutingType((ConnType)2);\n\n    ConnRef *connRef256 = new ConnRef(router, 256);\n    ConnEnd srcPt256(Point(1191.5, 1291.42), 15);\n    connRef256->setSourceEndpoint(srcPt256);\n    ConnEnd dstPt256(Point(1240.5, 1492.42), 1);\n    connRef256->setDestEndpoint(dstPt256);\n    connRef256->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints256(1);\n    checkpoints256[0] = Point(1265.5, 1477.42);\n    connRef256->setRoutingCheckpoints(checkpoints256);\n\n    ConnRef *connRef257 = new ConnRef(router, 257);\n    ConnEnd srcPt257(Point(1191.5, 1291.42), 15);\n    connRef257->setSourceEndpoint(srcPt257);\n    ConnEnd dstPt257(Point(1331.5, 1492.42), 1);\n    connRef257->setDestEndpoint(dstPt257);\n    connRef257->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints257(1);\n    checkpoints257[0] = Point(1265.5, 1477.42);\n    connRef257->setRoutingCheckpoints(checkpoints257);\n\n    ConnRef *connRef258 = new ConnRef(router, 258);\n    ConnEnd srcPt258(Point(1191.5, 1291.42), 15);\n    connRef258->setSourceEndpoint(srcPt258);\n    ConnEnd dstPt258(Point(1422.5, 1492.42), 1);\n    connRef258->setDestEndpoint(dstPt258);\n    connRef258->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints258(1);\n    checkpoints258[0] = Point(1265.5, 1477.42);\n    connRef258->setRoutingCheckpoints(checkpoints258);\n\n    ConnRef *connRef259 = new ConnRef(router, 259);\n    ConnEnd srcPt259(Point(160.5, 2216.42), 1);\n    connRef259->setSourceEndpoint(srcPt259);\n    ConnEnd dstPt259(Point(251.5, 2169.42), 15);\n    connRef259->setDestEndpoint(dstPt259);\n    connRef259->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints259(1);\n    checkpoints259[0] = Point(226.5, 2201.42);\n    connRef259->setRoutingCheckpoints(checkpoints259);\n\n    ConnRef *connRef260 = new ConnRef(router, 260);\n    ConnEnd srcPt260(Point(1313.5, 1078.75), 2);\n    connRef260->setSourceEndpoint(srcPt260);\n    ConnEnd dstPt260(Point(1191.5, 1115.75), 15);\n    connRef260->setDestEndpoint(dstPt260);\n    connRef260->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints260(1);\n    checkpoints260[0] = Point(1191.5, 1033.75);\n    connRef260->setRoutingCheckpoints(checkpoints260);\n\n    ConnRef *connRef261 = new ConnRef(router, 261);\n    ConnEnd srcPt261(Point(722.5, 690), 8);\n    connRef261->setSourceEndpoint(srcPt261);\n    ConnEnd dstPt261(Point(1191.5, 584), 15);\n    connRef261->setDestEndpoint(dstPt261);\n    connRef261->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints261(1);\n    checkpoints261[0] = Point(669.5, 584);\n    connRef261->setRoutingCheckpoints(checkpoints261);\n\n    ConnRef *connRef262 = new ConnRef(router, 262);\n    ConnEnd srcPt262(Point(829.5, 2065.42), 15);\n    connRef262->setSourceEndpoint(srcPt262);\n    ConnEnd dstPt262(Point(1026.5, 2179.79), 8);\n    connRef262->setDestEndpoint(dstPt262);\n    connRef262->setRoutingType((ConnType)2);\n\n    ConnRef *connRef263 = new ConnRef(router, 263);\n    ConnEnd srcPt263(Point(829.5, 2065.42), 15);\n    connRef263->setSourceEndpoint(srcPt263);\n    ConnEnd dstPt263(Point(1011.5, 2083.42), 1);\n    connRef263->setDestEndpoint(dstPt263);\n    connRef263->setRoutingType((ConnType)2);\n\n    ConnRef *connRef264 = new ConnRef(router, 264);\n    ConnEnd srcPt264(Point(1249.5, 1196.75), 4);\n    connRef264->setSourceEndpoint(srcPt264);\n    ConnEnd dstPt264(Point(1191.5, 1196.75), 8);\n    connRef264->setDestEndpoint(dstPt264);\n    connRef264->setRoutingType((ConnType)2);\n\n    ConnRef *connRef265 = new ConnRef(router, 265);\n    ConnEnd srcPt265(Point(769.5, 2298.79), 2);\n    connRef265->setSourceEndpoint(srcPt265);\n    ConnEnd dstPt265(Point(769.5, 2348.79), 1);\n    connRef265->setDestEndpoint(dstPt265);\n    connRef265->setRoutingType((ConnType)2);\n\n    ConnRef *connRef266 = new ConnRef(router, 266);\n    ConnEnd srcPt266(Point(193.5, 2231.42), 8);\n    connRef266->setSourceEndpoint(srcPt266);\n    ConnEnd dstPt266(Point(251.5, 2231.42), 4);\n    connRef266->setDestEndpoint(dstPt266);\n    connRef266->setRoutingType((ConnType)2);\n\n    ConnRef *connRef267 = new ConnRef(router, 267);\n    ConnEnd srcPt267(Point(769.5, 2460.79), 1);\n    connRef267->setSourceEndpoint(srcPt267);\n    ConnEnd dstPt267(Point(769.5, 2410.79), 2);\n    connRef267->setDestEndpoint(dstPt267);\n    connRef267->setRoutingType((ConnType)2);\n\n    ConnRef *connRef268 = new ConnRef(router, 268);\n    ConnEnd srcPt268(Point(887.5, 2317.79), 4);\n    connRef268->setSourceEndpoint(srcPt268);\n    ConnEnd dstPt268(Point(829.5, 2317.79), 8);\n    connRef268->setDestEndpoint(dstPt268);\n    connRef268->setRoutingType((ConnType)2);\n\n    ConnRef *connRef269 = new ConnRef(router, 269);\n    ConnEnd srcPt269(Point(1089.5, 2223.79), 2);\n    connRef269->setSourceEndpoint(srcPt269);\n    ConnEnd dstPt269(Point(1089.5, 2273.79), 1);\n    connRef269->setDestEndpoint(dstPt269);\n    connRef269->setRoutingType((ConnType)2);\n\n    ConnRef *connRef270 = new ConnRef(router, 270);\n    ConnEnd srcPt270(Point(1089.5, 2298.79), 2);\n    connRef270->setSourceEndpoint(srcPt270);\n    ConnEnd dstPt270(Point(1089.5, 2348.79), 1);\n    connRef270->setDestEndpoint(dstPt270);\n    connRef270->setRoutingType((ConnType)2);\n\n    ConnRef *connRef271 = new ConnRef(router, 271);\n    ConnEnd srcPt271(Point(1011.5, 2229.79), 1);\n    connRef271->setSourceEndpoint(srcPt271);\n    ConnEnd dstPt271(Point(1011.5, 2179.79), 2);\n    connRef271->setDestEndpoint(dstPt271);\n    connRef271->setRoutingType((ConnType)2);\n\n    ConnRef *connRef272 = new ConnRef(router, 272);\n    ConnEnd srcPt272(Point(1069.5, 2098.42), 4);\n    connRef272->setSourceEndpoint(srcPt272);\n    ConnEnd dstPt272(Point(1011.5, 2098.42), 8);\n    connRef272->setDestEndpoint(dstPt272);\n    connRef272->setRoutingType((ConnType)2);\n\n    ConnRef *connRef273 = new ConnRef(router, 273);\n    ConnEnd srcPt273(Point(705.5, 2119.42), 2);\n    connRef273->setSourceEndpoint(srcPt273);\n    ConnEnd dstPt273(Point(705.5, 2169.42), 1);\n    connRef273->setDestEndpoint(dstPt273);\n    connRef273->setRoutingType((ConnType)2);\n\n    ConnRef *connRef274 = new ConnRef(router, 274);\n    ConnEnd srcPt274(Point(375.5, 2119.42), 2);\n    connRef274->setSourceEndpoint(srcPt274);\n    ConnEnd dstPt274(Point(375.5, 2169.42), 1);\n    connRef274->setDestEndpoint(dstPt274);\n    connRef274->setRoutingType((ConnType)2);\n\n    ConnRef *connRef275 = new ConnRef(router, 275);\n    ConnEnd srcPt275(Point(1358.5, 2119.42), 2);\n    connRef275->setSourceEndpoint(srcPt275);\n    ConnEnd dstPt275(Point(1358.5, 2169.42), 1);\n    connRef275->setDestEndpoint(dstPt275);\n    connRef275->setRoutingType((ConnType)2);\n\n    ConnRef *connRef276 = new ConnRef(router, 276);\n    ConnEnd srcPt276(Point(1249.5, 1965.42), 4);\n    connRef276->setSourceEndpoint(srcPt276);\n    ConnEnd dstPt276(Point(1191.5, 1965.42), 8);\n    connRef276->setDestEndpoint(dstPt276);\n    connRef276->setRoutingType((ConnType)2);\n\n    ConnRef *connRef277 = new ConnRef(router, 277);\n    ConnEnd srcPt277(Point(1249.5, 1841.42), 4);\n    connRef277->setSourceEndpoint(srcPt277);\n    ConnEnd dstPt277(Point(1191.5, 1841.42), 8);\n    connRef277->setDestEndpoint(dstPt277);\n    connRef277->setRoutingType((ConnType)2);\n\n    ConnRef *connRef278 = new ConnRef(router, 278);\n    ConnEnd srcPt278(Point(1249.5, 1717.42), 4);\n    connRef278->setSourceEndpoint(srcPt278);\n    ConnEnd dstPt278(Point(1191.5, 1717.42), 8);\n    connRef278->setDestEndpoint(dstPt278);\n    connRef278->setRoutingType((ConnType)2);\n\n    ConnRef *connRef279 = new ConnRef(router, 279);\n    ConnEnd srcPt279(Point(1102.5, 1343.42), 8);\n    connRef279->setSourceEndpoint(srcPt279);\n    ConnEnd dstPt279(Point(1160.5, 1343.42), 4);\n    connRef279->setDestEndpoint(dstPt279);\n    connRef279->setRoutingType((ConnType)2);\n\n    ConnRef *connRef280 = new ConnRef(router, 280);\n    ConnEnd srcPt280(Point(980.5, 1241.42), 2);\n    connRef280->setSourceEndpoint(srcPt280);\n    ConnEnd dstPt280(Point(980.5, 1291.42), 1);\n    connRef280->setDestEndpoint(dstPt280);\n    connRef280->setRoutingType((ConnType)2);\n\n    ConnRef *connRef281 = new ConnRef(router, 281);\n    ConnEnd srcPt281(Point(1280.5, 1063.75), 4);\n    connRef281->setSourceEndpoint(srcPt281);\n    ConnEnd dstPt281(Point(1222.5, 1063.75), 8);\n    connRef281->setDestEndpoint(dstPt281);\n    connRef281->setRoutingType((ConnType)2);\n\n    ConnRef *connRef282 = new ConnRef(router, 282);\n    ConnEnd srcPt282(Point(1102.5, 1063.75), 8);\n    connRef282->setSourceEndpoint(srcPt282);\n    ConnEnd dstPt282(Point(1160.5, 1063.75), 4);\n    connRef282->setDestEndpoint(dstPt282);\n    connRef282->setRoutingType((ConnType)2);\n\n    ConnRef *connRef283 = new ConnRef(router, 283);\n    ConnEnd srcPt283(Point(1327.5, 500.5), 2);\n    connRef283->setSourceEndpoint(srcPt283);\n    ConnEnd dstPt283(Point(1327.5, 550.5), 1);\n    connRef283->setDestEndpoint(dstPt283);\n    connRef283->setRoutingType((ConnType)2);\n\n    ConnRef *connRef284 = new ConnRef(router, 284);\n    ConnEnd srcPt284(Point(1249.5, 740), 4);\n    connRef284->setSourceEndpoint(srcPt284);\n    ConnEnd dstPt284(Point(1191.5, 740), 8);\n    connRef284->setDestEndpoint(dstPt284);\n    connRef284->setRoutingType((ConnType)2);\n\n    ConnRef *connRef285 = new ConnRef(router, 285);\n    ConnEnd srcPt285(Point(1249.5, 478), 4);\n    connRef285->setSourceEndpoint(srcPt285);\n    ConnEnd dstPt285(Point(1191.5, 478), 8);\n    connRef285->setDestEndpoint(dstPt285);\n    connRef285->setRoutingType((ConnType)2);\n\n    ConnRef *connRef286 = new ConnRef(router, 286);\n    ConnEnd srcPt286(Point(918.5, 833), 2);\n    connRef286->setSourceEndpoint(srcPt286);\n    ConnEnd dstPt286(Point(918.5, 883), 1);\n    connRef286->setDestEndpoint(dstPt286);\n    connRef286->setRoutingType((ConnType)2);\n\n    ConnRef *connRef287 = new ConnRef(router, 287);\n    ConnEnd srcPt287(Point(476.5, 727), 2);\n    connRef287->setSourceEndpoint(srcPt287);\n    ConnEnd dstPt287(Point(476.5, 777), 1);\n    connRef287->setDestEndpoint(dstPt287);\n    connRef287->setRoutingType((ConnType)2);\n\n    ConnRef *connRef288 = new ConnRef(router, 288);\n    ConnEnd srcPt288(Point(476.5, 802), 2);\n    connRef288->setSourceEndpoint(srcPt288);\n    ConnEnd dstPt288(Point(476.5, 852), 1);\n    connRef288->setDestEndpoint(dstPt288);\n    connRef288->setRoutingType((ConnType)2);\n\n    ConnRef *connRef289 = new ConnRef(router, 289);\n    ConnEnd srcPt289(Point(798.5, 690), 2);\n    connRef289->setSourceEndpoint(srcPt289);\n    ConnEnd dstPt289(Point(798.5, 740), 1);\n    connRef289->setDestEndpoint(dstPt289);\n    connRef289->setRoutingType((ConnType)2);\n\n    ConnRef *connRef290 = new ConnRef(router, 290);\n    ConnEnd srcPt290(Point(585.5, 740), 8);\n    connRef290->setSourceEndpoint(srcPt290);\n    ConnEnd dstPt290(Point(643.5, 740), 4);\n    connRef290->setDestEndpoint(dstPt290);\n    connRef290->setRoutingType((ConnType)2);\n\n    ConnRef *connRef291 = new ConnRef(router, 291);\n    ConnEnd srcPt291(Point(344.5, 740), 4);\n    connRef291->setSourceEndpoint(srcPt291);\n    ConnEnd dstPt291(Point(286.5, 740), 8);\n    connRef291->setDestEndpoint(dstPt291);\n    connRef291->setRoutingType((ConnType)2);\n\n    ConnRef *connRef292 = new ConnRef(router, 292);\n    ConnEnd srcPt292(Point(707.5, 428), 2);\n    connRef292->setSourceEndpoint(srcPt292);\n    ConnEnd dstPt292(Point(707.5, 478), 1);\n    connRef292->setDestEndpoint(dstPt292);\n    connRef292->setRoutingType((ConnType)2);\n\n    ConnRef *connRef293 = new ConnRef(router, 293);\n    ConnEnd srcPt293(Point(707.5, 503), 2);\n    connRef293->setSourceEndpoint(srcPt293);\n    ConnEnd dstPt293(Point(707.5, 553), 1);\n    connRef293->setDestEndpoint(dstPt293);\n    connRef293->setRoutingType((ConnType)2);\n\n    ConnRef *connRef294 = new ConnRef(router, 294);\n    ConnEnd srcPt294(Point(707.5, 353), 2);\n    connRef294->setSourceEndpoint(srcPt294);\n    ConnEnd dstPt294(Point(707.5, 403), 1);\n    connRef294->setDestEndpoint(dstPt294);\n    connRef294->setRoutingType((ConnType)2);\n\n    ConnRef *connRef295 = new ConnRef(router, 295);\n    ConnEnd srcPt295(Point(767.5, 291), 2);\n    connRef295->setSourceEndpoint(srcPt295);\n    ConnEnd dstPt295(Point(767.5, 341), 1);\n    connRef295->setDestEndpoint(dstPt295);\n    connRef295->setRoutingType((ConnType)2);\n\n    ConnRef *connRef296 = new ConnRef(router, 296);\n    ConnEnd srcPt296(Point(767.5, 189), 2);\n    connRef296->setSourceEndpoint(srcPt296);\n    ConnEnd dstPt296(Point(767.5, 239), 1);\n    connRef296->setDestEndpoint(dstPt296);\n    connRef296->setRoutingType((ConnType)2);\n\n    ConnRef *connRef297 = new ConnRef(router, 297);\n    ConnEnd srcPt297(Point(492.5, 2262.46), 2);\n    connRef297->setSourceEndpoint(srcPt297);\n    ConnEnd dstPt297(Point(492.5, 2312.46), 1);\n    connRef297->setDestEndpoint(dstPt297);\n    connRef297->setRoutingType((ConnType)2);\n\n    ConnRef *connRef298 = new ConnRef(router, 298);\n    ConnEnd srcPt298(Point(1249.5, 1569.42), 4);\n    connRef298->setSourceEndpoint(srcPt298);\n    ConnEnd dstPt298(Point(1191.5, 1569.42), 8);\n    connRef298->setDestEndpoint(dstPt298);\n    connRef298->setRoutingType((ConnType)2);\n\n    ConnRef *connRef299 = new ConnRef(router, 299);\n    ConnEnd srcPt299(Point(707.5, 665), 1);\n    connRef299->setSourceEndpoint(srcPt299);\n    ConnEnd dstPt299(Point(707.5, 615), 2);\n    connRef299->setDestEndpoint(dstPt299);\n    connRef299->setRoutingType((ConnType)2);\n\n    ConnRef *connRef300 = new ConnRef(router, 300);\n    ConnEnd srcPt300(Point(476.5, 964), 1);\n    connRef300->setSourceEndpoint(srcPt300);\n    ConnEnd dstPt300(Point(476.5, 914), 2);\n    connRef300->setDestEndpoint(dstPt300);\n    connRef300->setRoutingType((ConnType)2);\n\n    ConnRef *connRef301 = new ConnRef(router, 301);\n    ConnEnd srcPt301(Point(286.5, 1026), 2);\n    connRef301->setSourceEndpoint(srcPt301);\n    ConnEnd dstPt301(Point(286.5, 1076), 1);\n    connRef301->setDestEndpoint(dstPt301);\n    connRef301->setRoutingType((ConnType)2);\n\n    ConnRef *connRef302 = new ConnRef(router, 302);\n    ConnEnd srcPt302(Point(286.5, 1128), 2);\n    connRef302->setSourceEndpoint(srcPt302);\n    ConnEnd dstPt302(Point(286.5, 1178), 1);\n    connRef302->setDestEndpoint(dstPt302);\n    connRef302->setRoutingType((ConnType)2);\n\n    ConnRef *connRef303 = new ConnRef(router, 303);\n    ConnEnd srcPt303(Point(554.5, 1026), 2);\n    connRef303->setSourceEndpoint(srcPt303);\n    ConnEnd dstPt303(Point(554.5, 1076), 1);\n    connRef303->setDestEndpoint(dstPt303);\n    connRef303->setRoutingType((ConnType)2);\n\n    ConnRef *connRef304 = new ConnRef(router, 304);\n    ConnEnd srcPt304(Point(554.5, 1128), 2);\n    connRef304->setSourceEndpoint(srcPt304);\n    ConnEnd dstPt304(Point(554.5, 1178), 1);\n    connRef304->setDestEndpoint(dstPt304);\n    connRef304->setRoutingType((ConnType)2);\n\n    ConnRef *connRef305 = new ConnRef(router, 305);\n    ConnEnd srcPt305(Point(699.439, 1984.42), 1);\n    connRef305->setSourceEndpoint(srcPt305);\n    ConnEnd dstPt305(Point(699.439, 1934.42), 2);\n    connRef305->setDestEndpoint(dstPt305);\n    connRef305->setRoutingType((ConnType)2);\n\n    ConnRef *connRef306 = new ConnRef(router, 306);\n    ConnEnd srcPt306(Point(1089.5, 2460.79), 1);\n    connRef306->setSourceEndpoint(srcPt306);\n    ConnEnd dstPt306(Point(1089.5, 2410.79), 2);\n    connRef306->setDestEndpoint(dstPt306);\n    connRef306->setRoutingType((ConnType)2);\n\n    ConnRef *connRef307 = new ConnRef(router, 307);\n    ConnEnd srcPt307(Point(699.439, 1822.42), 2);\n    connRef307->setSourceEndpoint(srcPt307);\n    ConnEnd dstPt307(Point(699.439, 1872.42), 1);\n    connRef307->setDestEndpoint(dstPt307);\n    connRef307->setRoutingType((ConnType)2);\n\n    ConnRef *connRef308 = new ConnRef(router, 308);\n    ConnEnd srcPt308(Point(1280.5, 1343.42), 4);\n    connRef308->setSourceEndpoint(srcPt308);\n    ConnEnd dstPt308(Point(1222.5, 1343.42), 8);\n    connRef308->setDestEndpoint(dstPt308);\n    connRef308->setRoutingType((ConnType)2);\n\n    ConnRef *connRef309 = new ConnRef(router, 309);\n    ConnEnd srcPt309(Point(1298.5, 1507.42), 4);\n    connRef309->setSourceEndpoint(srcPt309);\n    ConnEnd dstPt309(Point(1240.5, 1507.42), 8);\n    connRef309->setDestEndpoint(dstPt309);\n    connRef309->setRoutingType((ConnType)2);\n\n    ConnRef *connRef310 = new ConnRef(router, 310);\n    ConnEnd srcPt310(Point(1389.5, 1507.42), 4);\n    connRef310->setSourceEndpoint(srcPt310);\n    ConnEnd dstPt310(Point(1331.5, 1507.42), 8);\n    connRef310->setDestEndpoint(dstPt310);\n    connRef310->setRoutingType((ConnType)2);\n\n    ConnRef *connRef311 = new ConnRef(router, 311);\n    ConnEnd srcPt311(Point(554.5, 1990.42), 2);\n    connRef311->setSourceEndpoint(srcPt311);\n    ConnEnd dstPt311(Point(554.5, 2040.42), 1);\n    connRef311->setDestEndpoint(dstPt311);\n    connRef311->setRoutingType((ConnType)2);\n\n    ConnRef *connRef312 = new ConnRef(router, 312);\n    ConnEnd srcPt312(Point(1480.5, 1507.42), 4);\n    connRef312->setSourceEndpoint(srcPt312);\n    ConnEnd dstPt312(Point(1422.5, 1507.42), 8);\n    connRef312->setDestEndpoint(dstPt312);\n    connRef312->setRoutingType((ConnType)2);\n\n    ConnRef *connRef313 = new ConnRef(router, 313);\n    ConnEnd srcPt313(Point(1100.5, 1599.42), 2);\n    connRef313->setSourceEndpoint(srcPt313);\n    ConnEnd dstPt313(Point(1100.5, 1649.42), 1);\n    connRef313->setDestEndpoint(dstPt313);\n    connRef313->setRoutingType((ConnType)2);\n\n    ConnRef *connRef314 = new ConnRef(router, 314);\n    ConnEnd srcPt314(Point(1100.5, 1405.42), 2);\n    connRef314->setSourceEndpoint(srcPt314);\n    ConnEnd dstPt314(Point(1100.5, 1455.42), 1);\n    connRef314->setDestEndpoint(dstPt314);\n    connRef314->setRoutingType((ConnType)2);\n\n    ConnRef *connRef315 = new ConnRef(router, 315);\n    ConnEnd srcPt315(Point(102.5, 2231.42), 8);\n    connRef315->setSourceEndpoint(srcPt315);\n    ConnEnd dstPt315(Point(160.5, 2231.42), 4);\n    connRef315->setDestEndpoint(dstPt315);\n    connRef315->setRoutingType((ConnType)2);\n\n    ConnRef *connRef316 = new ConnRef(router, 316);\n    ConnEnd srcPt316(Point(1371.5, 1063.75), 4);\n    connRef316->setSourceEndpoint(srcPt316);\n    ConnEnd dstPt316(Point(1313.5, 1063.75), 8);\n    connRef316->setDestEndpoint(dstPt316);\n    connRef316->setRoutingType((ConnType)2);\n\n    ConnRef *connRef317 = new ConnRef(router, 317);\n    ConnEnd srcPt317(Point(707.5, 740), 1);\n    connRef317->setSourceEndpoint(srcPt317);\n    ConnEnd dstPt317(Point(707.5, 690), 2);\n    connRef317->setDestEndpoint(dstPt317);\n    connRef317->setRoutingType((ConnType)2);\n\n    ConnRef *connRef318 = new ConnRef(router, 318);\n    ConnEnd srcPt318(Point(476.5, 1039), 1);\n    connRef318->setSourceEndpoint(srcPt318);\n    ConnEnd dstPt318(Point(476.5, 989), 2);\n    connRef318->setDestEndpoint(dstPt318);\n    connRef318->setRoutingType((ConnType)2);\n\n    ConnRef *connRef319 = new ConnRef(router, 319);\n    ConnEnd srcPt319(Point(1089.5, 2535.79), 1);\n    connRef319->setSourceEndpoint(srcPt319);\n    ConnEnd dstPt319(Point(1089.5, 2485.79), 2);\n    connRef319->setDestEndpoint(dstPt319);\n    connRef319->setRoutingType((ConnType)2);\n\n    ConnRef *connRef320 = new ConnRef(router, 320);\n    ConnEnd srcPt320(Point(251.5, 2169.42), 15);\n    connRef320->setSourceEndpoint(srcPt320);\n    ConnEnd dstPt320(Point(251.5, 2216.42), 1);\n    connRef320->setDestEndpoint(dstPt320);\n    connRef320->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints320(1);\n    checkpoints320[0] = Point(226.5, 2201.42);\n    connRef320->setRoutingCheckpoints(checkpoints320);\n\n    ConnRef *connRef321 = new ConnRef(router, 321);\n    ConnEnd srcPt321(Point(1191.5, 2169.42), 15);\n    connRef321->setSourceEndpoint(srcPt321);\n    ConnEnd dstPt321(Point(1026.5, 2179.79), 8);\n    connRef321->setDestEndpoint(dstPt321);\n    connRef321->setRoutingType((ConnType)2);\n\n    ConnRef *connRef322 = new ConnRef(router, 322);\n    ConnEnd srcPt322(Point(1191.5, 2169.42), 15);\n    connRef322->setSourceEndpoint(srcPt322);\n    ConnEnd dstPt322(Point(1011.5, 2083.42), 1);\n    connRef322->setDestEndpoint(dstPt322);\n    connRef322->setRoutingType((ConnType)2);\n\n    ConnRef *connRef323 = new ConnRef(router, 323);\n    ConnEnd srcPt323(Point(674.5, 2312.46), 15);\n    connRef323->setSourceEndpoint(srcPt323);\n    ConnEnd dstPt323(Point(720.5, 2169.42), 8);\n    connRef323->setDestEndpoint(dstPt323);\n    connRef323->setRoutingType((ConnType)2);\n\n    ConnRef *connRef324 = new ConnRef(router, 324);\n    ConnEnd srcPt324(Point(829.5, 2169.42), 15);\n    connRef324->setSourceEndpoint(srcPt324);\n    ConnEnd dstPt324(Point(720.5, 2169.42), 8);\n    connRef324->setDestEndpoint(dstPt324);\n    connRef324->setRoutingType((ConnType)2);\n\n    ConnRef *connRef325 = new ConnRef(router, 325);\n    ConnEnd srcPt325(Point(1191.5, 1903.42), 15);\n    connRef325->setSourceEndpoint(srcPt325);\n    ConnEnd dstPt325(Point(1191.5, 1950.42), 1);\n    connRef325->setDestEndpoint(dstPt325);\n    connRef325->setRoutingType((ConnType)2);\n\n    ConnRef *connRef326 = new ConnRef(router, 326);\n    ConnEnd srcPt326(Point(1191.5, 883), 15);\n    connRef326->setSourceEndpoint(srcPt326);\n    ConnEnd dstPt326(Point(1222.5, 1048.75), 1);\n    connRef326->setDestEndpoint(dstPt326);\n    connRef326->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints326(1);\n    checkpoints326[0] = Point(1191.5, 1093.75);\n    connRef326->setRoutingCheckpoints(checkpoints326);\n\n    ConnRef *connRef327 = new ConnRef(router, 327);\n    ConnEnd srcPt327(Point(286.5, 883), 15);\n    connRef327->setSourceEndpoint(srcPt327);\n    ConnEnd dstPt327(Point(461.5, 777), 4);\n    connRef327->setDestEndpoint(dstPt327);\n    connRef327->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints327(1);\n    checkpoints327[0] = Point(514.5, 883);\n    connRef327->setRoutingCheckpoints(checkpoints327);\n\n    ConnRef *connRef328 = new ConnRef(router, 328);\n    ConnEnd srcPt328(Point(286.5, 883), 15);\n    connRef328->setSourceEndpoint(srcPt328);\n    ConnEnd dstPt328(Point(461.5, 852), 4);\n    connRef328->setDestEndpoint(dstPt328);\n    connRef328->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints328(1);\n    checkpoints328[0] = Point(514.5, 883);\n    connRef328->setRoutingCheckpoints(checkpoints328);\n\n    ConnRef *connRef329 = new ConnRef(router, 329);\n    ConnEnd srcPt329(Point(286.5, 584), 15);\n    connRef329->setSourceEndpoint(srcPt329);\n    ConnEnd dstPt329(Point(692.5, 478), 4);\n    connRef329->setDestEndpoint(dstPt329);\n    connRef329->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints329(1);\n    checkpoints329[0] = Point(745.5, 584);\n    connRef329->setRoutingCheckpoints(checkpoints329);\n\n    ConnRef *connRef330 = new ConnRef(router, 330);\n    ConnEnd srcPt330(Point(286.5, 584), 15);\n    connRef330->setSourceEndpoint(srcPt330);\n    ConnEnd dstPt330(Point(692.5, 553), 4);\n    connRef330->setDestEndpoint(dstPt330);\n    connRef330->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints330(1);\n    checkpoints330[0] = Point(745.5, 584);\n    connRef330->setRoutingCheckpoints(checkpoints330);\n\n    ConnRef *connRef331 = new ConnRef(router, 331);\n    ConnEnd srcPt331(Point(1191.5, 584), 15);\n    connRef331->setSourceEndpoint(srcPt331);\n    ConnEnd dstPt331(Point(722.5, 403), 8);\n    connRef331->setDestEndpoint(dstPt331);\n    connRef331->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints331(1);\n    checkpoints331[0] = Point(669.5, 584);\n    connRef331->setRoutingCheckpoints(checkpoints331);\n\n    ConnRef *connRef332 = new ConnRef(router, 332);\n    ConnEnd srcPt332(Point(1191.5, 280), 15);\n    connRef332->setSourceEndpoint(srcPt332);\n    ConnEnd dstPt332(Point(782.5, 341), 8);\n    connRef332->setDestEndpoint(dstPt332);\n    connRef332->setRoutingType((ConnType)2);\n\n    ConnRef *connRef333 = new ConnRef(router, 333);\n    ConnEnd srcPt333(Point(1191.5, 280), 15);\n    connRef333->setSourceEndpoint(srcPt333);\n    ConnEnd dstPt333(Point(782.5, 239), 8);\n    connRef333->setDestEndpoint(dstPt333);\n    connRef333->setRoutingType((ConnType)2);\n\n    ConnRef *connRef334 = new ConnRef(router, 334);\n    ConnEnd srcPt334(Point(1191.5, 584), 15);\n    connRef334->setSourceEndpoint(srcPt334);\n    ConnEnd dstPt334(Point(1427, 986.25), 4);\n    connRef334->setDestEndpoint(dstPt334);\n    connRef334->setRoutingType((ConnType)2);\n\n    ConnRef *connRef335 = new ConnRef(router, 335);\n    ConnEnd srcPt335(Point(1191.5, 1291.42), 15);\n    connRef335->setSourceEndpoint(srcPt335);\n    ConnEnd dstPt335(Point(1427, 1026.25), 4);\n    connRef335->setDestEndpoint(dstPt335);\n    connRef335->setRoutingType((ConnType)2);\n\n    ConnRef *connRef336 = new ConnRef(router, 336);\n    ConnEnd srcPt336(Point(1191.5, 1779.42), 15);\n    connRef336->setSourceEndpoint(srcPt336);\n    ConnEnd dstPt336(Point(1513, 1189.75), 2);\n    connRef336->setDestEndpoint(dstPt336);\n    connRef336->setRoutingType((ConnType)2);\n\n    ConnRef *connRef337 = new ConnRef(router, 337);\n    ConnEnd srcPt337(Point(1191.5, 2169.42), 15);\n    connRef337->setSourceEndpoint(srcPt337);\n    ConnEnd dstPt337(Point(1553, 1189.75), 2);\n    connRef337->setDestEndpoint(dstPt337);\n    connRef337->setRoutingType((ConnType)2);\n\n    ConnRef *connRef338 = new ConnRef(router, 338);\n    ConnEnd srcPt338(Point(1191.5, 280), 15);\n    connRef338->setSourceEndpoint(srcPt338);\n    ConnEnd dstPt338(Point(1252, 214.5), 2);\n    connRef338->setDestEndpoint(dstPt338);\n    connRef338->setRoutingType((ConnType)2);\n\n    ConnRef *connRef339 = new ConnRef(router, 339);\n    ConnEnd srcPt339(Point(251.5, 1903.42), 15);\n    connRef339->setSourceEndpoint(srcPt339);\n    ConnEnd dstPt339(Point(247.5, 2025.92), 8);\n    connRef339->setDestEndpoint(dstPt339);\n    connRef339->setRoutingType((ConnType)2);\n\n    ConnRef *connRef340 = new ConnRef(router, 340);\n    ConnEnd srcPt340(Point(251.5, 2169.42), 15);\n    connRef340->setSourceEndpoint(srcPt340);\n    ConnEnd dstPt340(Point(247.5, 2065.92), 8);\n    connRef340->setDestEndpoint(dstPt340);\n    connRef340->setRoutingType((ConnType)2);\n\n    ConnRef *connRef341 = new ConnRef(router, 341);\n    ConnEnd srcPt341(Point(1191.5, 1655.42), 15);\n    connRef341->setSourceEndpoint(srcPt341);\n    ConnEnd dstPt341(Point(736.5, 1662.92), 8);\n    connRef341->setDestEndpoint(dstPt341);\n    connRef341->setRoutingType((ConnType)2);\n\n    ConnRef *connRef342 = new ConnRef(router, 342);\n    ConnEnd srcPt342(Point(1432.5, 2169.42), 15);\n    connRef342->setSourceEndpoint(srcPt342);\n    ConnEnd dstPt342(Point(1438.5, 2248.79), 1);\n    connRef342->setDestEndpoint(dstPt342);\n    connRef342->setRoutingType((ConnType)2);\n#endif\n\n    router->processTransaction();\n    router->outputDiagram(\"output/checkpointNudging1\");\n    bool atEnds = true;\n    bool overlap = router->existsOrthogonalFixedSegmentOverlap(atEnds);\n    delete router;\n    return (overlap) ? 1 : 0;\n};\n"
  },
  {
    "path": "cola/libavoid/tests/checkpointNudging2.cpp",
    "content": "// KEGG -> SBGN example #10\n//\n#include \"libavoid/libavoid.h\"\nusing namespace Avoid;\nint main(void) {\n    Router *router = new Router(\n            PolyLineRouting | OrthogonalRouting);\n    router->setRoutingParameter((RoutingParameter)0, 50);\n    router->setRoutingParameter((RoutingParameter)1, 0);\n    router->setRoutingParameter((RoutingParameter)2, 0);\n    router->setRoutingParameter((RoutingParameter)3, 4000);\n    router->setRoutingParameter((RoutingParameter)4, 0);\n    router->setRoutingParameter((RoutingParameter)5, 100);\n    router->setRoutingOption((RoutingOption)0, true);\n    router->setRoutingOption((RoutingOption)1, true);\n    router->setRoutingOption((RoutingOption)2, false);\n\n\n    Polygon poly1(4);\n    poly1.ps[0] = Point(1201.5, 1180.75);\n    poly1.ps[1] = Point(1201.5, 1212.75);\n    poly1.ps[2] = Point(1181.5, 1212.75);\n    poly1.ps[3] = Point(1181.5, 1180.75);\n    new ShapeRef(router, poly1, 1);\n\n#ifdef ALL\n    Polygon poly2(4);\n    poly2.ps[0] = Point(785.5, 2338.79);\n    poly2.ps[1] = Point(785.5, 2358.79);\n    poly2.ps[2] = Point(753.5, 2358.79);\n    poly2.ps[3] = Point(753.5, 2338.79);\n    new ShapeRef(router, poly2, 2);\n\n    Polygon poly3(4);\n    poly3.ps[0] = Point(261.5, 2215.42);\n    poly3.ps[1] = Point(261.5, 2247.42);\n    poly3.ps[2] = Point(241.5, 2247.42);\n    poly3.ps[3] = Point(241.5, 2215.42);\n    new ShapeRef(router, poly3, 3);\n\n    Polygon poly4(4);\n    poly4.ps[0] = Point(785.5, 2400.79);\n    poly4.ps[1] = Point(785.5, 2420.79);\n    poly4.ps[2] = Point(753.5, 2420.79);\n    poly4.ps[3] = Point(753.5, 2400.79);\n    new ShapeRef(router, poly4, 4);\n\n    Polygon poly5(4);\n    poly5.ps[0] = Point(282.5, 2348.79);\n    poly5.ps[1] = Point(282.5, 2410.79);\n    poly5.ps[2] = Point(220.5, 2410.79);\n    poly5.ps[3] = Point(220.5, 2348.79);\n    new ShapeRef(router, poly5, 5);\n#endif\n\n    Polygon poly6(4);\n    poly6.ps[0] = Point(1643.5, 817.25);\n    poly6.ps[1] = Point(1643.5, 1194.25);\n    poly6.ps[2] = Point(1421.5, 1194.25);\n    poly6.ps[3] = Point(1421.5, 817.25);\n    new ShapeRef(router, poly6, 6);\n\n#ifdef ALL\n    Polygon poly7(4);\n    poly7.ps[0] = Point(1311.5, 45);\n    poly7.ps[1] = Point(1311.5, 219);\n    poly7.ps[2] = Point(1191.5, 219);\n    poly7.ps[3] = Point(1191.5, 45);\n    new ShapeRef(router, poly7, 7);\n\n    Polygon poly8(4);\n    poly8.ps[0] = Point(839.5, 2301.79);\n    poly8.ps[1] = Point(839.5, 2333.79);\n    poly8.ps[2] = Point(819.5, 2333.79);\n    poly8.ps[3] = Point(819.5, 2301.79);\n    new ShapeRef(router, poly8, 8);\n\n    Polygon poly9(4);\n    poly9.ps[0] = Point(1105.5, 2263.79);\n    poly9.ps[1] = Point(1105.5, 2283.79);\n    poly9.ps[2] = Point(1073.5, 2283.79);\n    poly9.ps[3] = Point(1073.5, 2263.79);\n    new ShapeRef(router, poly9, 9);\n\n    Polygon poly10(4);\n    poly10.ps[0] = Point(1105.5, 2338.79);\n    poly10.ps[1] = Point(1105.5, 2358.79);\n    poly10.ps[2] = Point(1073.5, 2358.79);\n    poly10.ps[3] = Point(1073.5, 2338.79);\n    new ShapeRef(router, poly10, 10);\n\n    Polygon poly11(4);\n    poly11.ps[0] = Point(1027.5, 2169.79);\n    poly11.ps[1] = Point(1027.5, 2189.79);\n    poly11.ps[2] = Point(995.5, 2189.79);\n    poly11.ps[3] = Point(995.5, 2169.79);\n    new ShapeRef(router, poly11, 11);\n\n    Polygon poly12(4);\n    poly12.ps[0] = Point(1021.5, 2082.42);\n    poly12.ps[1] = Point(1021.5, 2114.42);\n    poly12.ps[2] = Point(1001.5, 2114.42);\n    poly12.ps[3] = Point(1001.5, 2082.42);\n    new ShapeRef(router, poly12, 12);\n\n    Polygon poly13(4);\n    poly13.ps[0] = Point(721.5, 2159.42);\n    poly13.ps[1] = Point(721.5, 2179.42);\n    poly13.ps[2] = Point(689.5, 2179.42);\n    poly13.ps[3] = Point(689.5, 2159.42);\n    new ShapeRef(router, poly13, 13);\n\n    Polygon poly14(4);\n    poly14.ps[0] = Point(391.5, 2159.42);\n    poly14.ps[1] = Point(391.5, 2179.42);\n    poly14.ps[2] = Point(359.5, 2179.42);\n    poly14.ps[3] = Point(359.5, 2159.42);\n    new ShapeRef(router, poly14, 14);\n\n    Polygon poly15(4);\n    poly15.ps[0] = Point(1374.5, 2159.42);\n    poly15.ps[1] = Point(1374.5, 2179.42);\n    poly15.ps[2] = Point(1342.5, 2179.42);\n    poly15.ps[3] = Point(1342.5, 2159.42);\n    new ShapeRef(router, poly15, 15);\n\n    Polygon poly16(4);\n    poly16.ps[0] = Point(923.421, 1631.86);\n    poly16.ps[1] = Point(923.421, 1675.86);\n    poly16.ps[2] = Point(835.421, 1675.86);\n    poly16.ps[3] = Point(835.421, 1631.86);\n    new ShapeRef(router, poly16, 16);\n\n    Polygon poly17(4);\n    poly17.ps[0] = Point(1201.5, 1949.42);\n    poly17.ps[1] = Point(1201.5, 1981.42);\n    poly17.ps[2] = Point(1181.5, 1981.42);\n    poly17.ps[3] = Point(1181.5, 1949.42);\n    new ShapeRef(router, poly17, 17);\n\n    Polygon poly18(4);\n    poly18.ps[0] = Point(252, 1963.42);\n    poly18.ps[1] = Point(252, 2127.42);\n    poly18.ps[2] = Point(45, 2127.42);\n    poly18.ps[3] = Point(45, 1963.42);\n    new ShapeRef(router, poly18, 18);\n\n    Polygon poly19(4);\n    poly19.ps[0] = Point(1201.5, 1825.42);\n    poly19.ps[1] = Point(1201.5, 1857.42);\n    poly19.ps[2] = Point(1181.5, 1857.42);\n    poly19.ps[3] = Point(1181.5, 1825.42);\n    new ShapeRef(router, poly19, 19);\n\n    Polygon poly20(4);\n    poly20.ps[0] = Point(1201.5, 1701.42);\n    poly20.ps[1] = Point(1201.5, 1733.42);\n    poly20.ps[2] = Point(1181.5, 1733.42);\n    poly20.ps[3] = Point(1181.5, 1701.42);\n    new ShapeRef(router, poly20, 20);\n\n    Polygon poly21(4);\n    poly21.ps[0] = Point(1170.5, 1327.42);\n    poly21.ps[1] = Point(1170.5, 1359.42);\n    poly21.ps[2] = Point(1150.5, 1359.42);\n    poly21.ps[3] = Point(1150.5, 1327.42);\n    new ShapeRef(router, poly21, 21);\n\n    Polygon poly22(4);\n    poly22.ps[0] = Point(741, 1632.42);\n    poly22.ps[1] = Point(741, 1692.42);\n    poly22.ps[2] = Point(428, 1692.42);\n    poly22.ps[3] = Point(428, 1632.42);\n    new ShapeRef(router, poly22, 22);\n\n    Polygon poly23(4);\n    poly23.ps[0] = Point(996.5, 1281.42);\n    poly23.ps[1] = Point(996.5, 1301.42);\n    poly23.ps[2] = Point(964.5, 1301.42);\n    poly23.ps[3] = Point(964.5, 1281.42);\n    new ShapeRef(router, poly23, 23);\n\n    Polygon poly24(4);\n    poly24.ps[0] = Point(1232.5, 1047.75);\n    poly24.ps[1] = Point(1232.5, 1079.75);\n    poly24.ps[2] = Point(1212.5, 1079.75);\n    poly24.ps[3] = Point(1212.5, 1047.75);\n    new ShapeRef(router, poly24, 24);\n\n    Polygon poly25(4);\n    poly25.ps[0] = Point(1170.5, 1047.75);\n    poly25.ps[1] = Point(1170.5, 1079.75);\n    poly25.ps[2] = Point(1150.5, 1079.75);\n    poly25.ps[3] = Point(1150.5, 1047.75);\n    new ShapeRef(router, poly25, 25);\n\n    Polygon poly26(4);\n    poly26.ps[0] = Point(1343.5, 540.5);\n    poly26.ps[1] = Point(1343.5, 560.5);\n    poly26.ps[2] = Point(1311.5, 560.5);\n    poly26.ps[3] = Point(1311.5, 540.5);\n    new ShapeRef(router, poly26, 26);\n\n    Polygon poly27(4);\n    poly27.ps[0] = Point(1201.5, 724);\n    poly27.ps[1] = Point(1201.5, 756);\n    poly27.ps[2] = Point(1181.5, 756);\n    poly27.ps[3] = Point(1181.5, 724);\n    new ShapeRef(router, poly27, 27);\n\n    Polygon poly28(4);\n    poly28.ps[0] = Point(1201.5, 462);\n    poly28.ps[1] = Point(1201.5, 494);\n    poly28.ps[2] = Point(1181.5, 494);\n    poly28.ps[3] = Point(1181.5, 462);\n    new ShapeRef(router, poly28, 28);\n\n    Polygon poly29(4);\n    poly29.ps[0] = Point(934.5, 873);\n    poly29.ps[1] = Point(934.5, 893);\n    poly29.ps[2] = Point(902.5, 893);\n    poly29.ps[3] = Point(902.5, 873);\n    new ShapeRef(router, poly29, 29);\n\n    Polygon poly30(4);\n    poly30.ps[0] = Point(492.5, 767);\n    poly30.ps[1] = Point(492.5, 787);\n    poly30.ps[2] = Point(460.5, 787);\n    poly30.ps[3] = Point(460.5, 767);\n    new ShapeRef(router, poly30, 30);\n\n    Polygon poly31(4);\n    poly31.ps[0] = Point(492.5, 842);\n    poly31.ps[1] = Point(492.5, 862);\n    poly31.ps[2] = Point(460.5, 862);\n    poly31.ps[3] = Point(460.5, 842);\n    new ShapeRef(router, poly31, 31);\n\n    Polygon poly32(4);\n    poly32.ps[0] = Point(814.5, 730);\n    poly32.ps[1] = Point(814.5, 750);\n    poly32.ps[2] = Point(782.5, 750);\n    poly32.ps[3] = Point(782.5, 730);\n    new ShapeRef(router, poly32, 32);\n\n    Polygon poly33(4);\n    poly33.ps[0] = Point(653.5, 724);\n    poly33.ps[1] = Point(653.5, 756);\n    poly33.ps[2] = Point(633.5, 756);\n    poly33.ps[3] = Point(633.5, 724);\n    new ShapeRef(router, poly33, 33);\n\n    Polygon poly34(4);\n    poly34.ps[0] = Point(296.5, 724);\n    poly34.ps[1] = Point(296.5, 756);\n    poly34.ps[2] = Point(276.5, 756);\n    poly34.ps[3] = Point(276.5, 724);\n    new ShapeRef(router, poly34, 34);\n\n    Polygon poly35(4);\n    poly35.ps[0] = Point(723.5, 468);\n    poly35.ps[1] = Point(723.5, 488);\n    poly35.ps[2] = Point(691.5, 488);\n    poly35.ps[3] = Point(691.5, 468);\n    new ShapeRef(router, poly35, 35);\n\n    Polygon poly36(4);\n    poly36.ps[0] = Point(723.5, 543);\n    poly36.ps[1] = Point(723.5, 563);\n    poly36.ps[2] = Point(691.5, 563);\n    poly36.ps[3] = Point(691.5, 543);\n    new ShapeRef(router, poly36, 36);\n\n    Polygon poly37(4);\n    poly37.ps[0] = Point(723.5, 393);\n    poly37.ps[1] = Point(723.5, 413);\n    poly37.ps[2] = Point(691.5, 413);\n    poly37.ps[3] = Point(691.5, 393);\n    new ShapeRef(router, poly37, 37);\n\n    Polygon poly38(4);\n    poly38.ps[0] = Point(783.5, 331);\n    poly38.ps[1] = Point(783.5, 351);\n    poly38.ps[2] = Point(751.5, 351);\n    poly38.ps[3] = Point(751.5, 331);\n    new ShapeRef(router, poly38, 38);\n\n    Polygon poly39(4);\n    poly39.ps[0] = Point(783.5, 229);\n    poly39.ps[1] = Point(783.5, 249);\n    poly39.ps[2] = Point(751.5, 249);\n    poly39.ps[3] = Point(751.5, 229);\n    new ShapeRef(router, poly39, 39);\n\n    Polygon poly40(4);\n    poly40.ps[0] = Point(402, 96.5);\n    poly40.ps[1] = Point(402, 131.5);\n    poly40.ps[2] = Point(141, 131.5);\n    poly40.ps[3] = Point(141, 96.5);\n    new ShapeRef(router, poly40, 40);\n\n    Polygon poly41(4);\n    poly41.ps[0] = Point(508.5, 2302.46);\n    poly41.ps[1] = Point(508.5, 2322.46);\n    poly41.ps[2] = Point(476.5, 2322.46);\n    poly41.ps[3] = Point(476.5, 2302.46);\n    new ShapeRef(router, poly41, 41);\n\n    Polygon poly42(4);\n    poly42.ps[0] = Point(1201.5, 1553.42);\n    poly42.ps[1] = Point(1201.5, 1585.42);\n    poly42.ps[2] = Point(1181.5, 1585.42);\n    poly42.ps[3] = Point(1181.5, 1553.42);\n    new ShapeRef(router, poly42, 42);\n\n    Polygon poly43(4);\n    poly43.ps[0] = Point(723.5, 605);\n    poly43.ps[1] = Point(723.5, 625);\n    poly43.ps[2] = Point(691.5, 625);\n    poly43.ps[3] = Point(691.5, 605);\n    new ShapeRef(router, poly43, 43);\n\n    Polygon poly44(4);\n    poly44.ps[0] = Point(492.5, 904);\n    poly44.ps[1] = Point(492.5, 924);\n    poly44.ps[2] = Point(460.5, 924);\n    poly44.ps[3] = Point(460.5, 904);\n    new ShapeRef(router, poly44, 44);\n\n    Polygon poly45(4);\n    poly45.ps[0] = Point(302.5, 1066);\n    poly45.ps[1] = Point(302.5, 1086);\n    poly45.ps[2] = Point(270.5, 1086);\n    poly45.ps[3] = Point(270.5, 1066);\n    new ShapeRef(router, poly45, 45);\n\n    Polygon poly46(4);\n    poly46.ps[0] = Point(302.5, 1168);\n    poly46.ps[1] = Point(302.5, 1188);\n    poly46.ps[2] = Point(270.5, 1188);\n    poly46.ps[3] = Point(270.5, 1168);\n    new ShapeRef(router, poly46, 46);\n\n    Polygon poly47(4);\n    poly47.ps[0] = Point(570.5, 1066);\n    poly47.ps[1] = Point(570.5, 1086);\n    poly47.ps[2] = Point(538.5, 1086);\n    poly47.ps[3] = Point(538.5, 1066);\n    new ShapeRef(router, poly47, 47);\n\n    Polygon poly48(4);\n    poly48.ps[0] = Point(570.5, 1168);\n    poly48.ps[1] = Point(570.5, 1188);\n    poly48.ps[2] = Point(538.5, 1188);\n    poly48.ps[3] = Point(538.5, 1168);\n    new ShapeRef(router, poly48, 48);\n\n    Polygon poly49(4);\n    poly49.ps[0] = Point(1432.5, 519.5);\n    poly49.ps[1] = Point(1432.5, 581.5);\n    poly49.ps[2] = Point(1370.5, 581.5);\n    poly49.ps[3] = Point(1370.5, 519.5);\n    new ShapeRef(router, poly49, 49);\n\n    Polygon poly50(4);\n    poly50.ps[0] = Point(1222.5, 249);\n    poly50.ps[1] = Point(1222.5, 311);\n    poly50.ps[2] = Point(1160.5, 311);\n    poly50.ps[3] = Point(1160.5, 249);\n    new ShapeRef(router, poly50, 50);\n\n    Polygon poly51(4);\n    poly51.ps[0] = Point(1222.5, 1748.42);\n    poly51.ps[1] = Point(1222.5, 1810.42);\n    poly51.ps[2] = Point(1160.5, 1810.42);\n    poly51.ps[3] = Point(1160.5, 1748.42);\n    new ShapeRef(router, poly51, 51);\n\n    Polygon poly52(4);\n    poly52.ps[0] = Point(317.5, 553);\n    poly52.ps[1] = Point(317.5, 615);\n    poly52.ps[2] = Point(255.5, 615);\n    poly52.ps[3] = Point(255.5, 553);\n    new ShapeRef(router, poly52, 52);\n\n    Polygon poly53(4);\n    poly53.ps[0] = Point(317.5, 852);\n    poly53.ps[1] = Point(317.5, 914);\n    poly53.ps[2] = Point(255.5, 914);\n    poly53.ps[3] = Point(255.5, 852);\n    new ShapeRef(router, poly53, 53);\n\n    Polygon poly54(4);\n    poly54.ps[0] = Point(767.5, 1260.42);\n    poly54.ps[1] = Point(767.5, 1322.42);\n    poly54.ps[2] = Point(705.5, 1322.42);\n    poly54.ps[3] = Point(705.5, 1260.42);\n    new ShapeRef(router, poly54, 54);\n\n    Polygon poly55(4);\n    poly55.ps[0] = Point(767.5, 852);\n    poly55.ps[1] = Point(767.5, 914);\n    poly55.ps[2] = Point(705.5, 914);\n    poly55.ps[3] = Point(705.5, 852);\n    new ShapeRef(router, poly55, 55);\n\n    Polygon poly56(4);\n    poly56.ps[0] = Point(1222.5, 553);\n    poly56.ps[1] = Point(1222.5, 615);\n    poly56.ps[2] = Point(1160.5, 615);\n    poly56.ps[3] = Point(1160.5, 553);\n    new ShapeRef(router, poly56, 56);\n\n    Polygon poly57(4);\n    poly57.ps[0] = Point(1222.5, 852);\n    poly57.ps[1] = Point(1222.5, 914);\n    poly57.ps[2] = Point(1160.5, 914);\n    poly57.ps[3] = Point(1160.5, 852);\n    new ShapeRef(router, poly57, 57);\n\n    Polygon poly58(4);\n    poly58.ps[0] = Point(1222.5, 1872.42);\n    poly58.ps[1] = Point(1222.5, 1934.42);\n    poly58.ps[2] = Point(1160.5, 1934.42);\n    poly58.ps[3] = Point(1160.5, 1872.42);\n    new ShapeRef(router, poly58, 58);\n\n    Polygon poly59(4);\n    poly59.ps[0] = Point(1222.5, 1624.42);\n    poly59.ps[1] = Point(1222.5, 1686.42);\n    poly59.ps[2] = Point(1160.5, 1686.42);\n    poly59.ps[3] = Point(1160.5, 1624.42);\n    new ShapeRef(router, poly59, 59);\n#endif\n\n    Polygon poly60(4);\n    poly60.ps[0] = Point(1222.5, 1424.42);\n    poly60.ps[1] = Point(1222.5, 1486.42);\n    poly60.ps[2] = Point(1160.5, 1486.42);\n    poly60.ps[3] = Point(1160.5, 1424.42);\n    new ShapeRef(router, poly60, 60);\n\n#ifdef ALL\n    Polygon poly61(4);\n    poly61.ps[0] = Point(1463.5, 2138.42);\n    poly61.ps[1] = Point(1463.5, 2200.42);\n    poly61.ps[2] = Point(1401.5, 2200.42);\n    poly61.ps[3] = Point(1401.5, 2138.42);\n    new ShapeRef(router, poly61, 61);\n\n    Polygon poly62(4);\n    poly62.ps[0] = Point(705.5, 2281.46);\n    poly62.ps[1] = Point(705.5, 2343.46);\n    poly62.ps[2] = Point(643.5, 2343.46);\n    poly62.ps[3] = Point(643.5, 2281.46);\n    new ShapeRef(router, poly62, 62);\n\n    Polygon poly63(4);\n    poly63.ps[0] = Point(1358.5, 2348.79);\n    poly63.ps[1] = Point(1358.5, 2410.79);\n    poly63.ps[2] = Point(1296.5, 2410.79);\n    poly63.ps[3] = Point(1296.5, 2348.79);\n    new ShapeRef(router, poly63, 63);\n\n    Polygon poly64(4);\n    poly64.ps[0] = Point(1222.5, 2138.42);\n    poly64.ps[1] = Point(1222.5, 2200.42);\n    poly64.ps[2] = Point(1160.5, 2200.42);\n    poly64.ps[3] = Point(1160.5, 2138.42);\n    new ShapeRef(router, poly64, 64);\n\n    Polygon poly65(4);\n    poly65.ps[0] = Point(860.5, 2138.42);\n    poly65.ps[1] = Point(860.5, 2200.42);\n    poly65.ps[2] = Point(798.5, 2200.42);\n    poly65.ps[3] = Point(798.5, 2138.42);\n    new ShapeRef(router, poly65, 65);\n\n    Polygon poly66(4);\n    poly66.ps[0] = Point(282.5, 2138.42);\n    poly66.ps[1] = Point(282.5, 2200.42);\n    poly66.ps[2] = Point(220.5, 2200.42);\n    poly66.ps[3] = Point(220.5, 2138.42);\n    new ShapeRef(router, poly66, 66);\n\n    Polygon poly67(4);\n    poly67.ps[0] = Point(860.5, 2348.79);\n    poly67.ps[1] = Point(860.5, 2410.79);\n    poly67.ps[2] = Point(798.5, 2410.79);\n    poly67.ps[3] = Point(798.5, 2348.79);\n    new ShapeRef(router, poly67, 67);\n\n    Polygon poly68(4);\n    poly68.ps[0] = Point(554.5, 2138.42);\n    poly68.ps[1] = Point(554.5, 2200.42);\n    poly68.ps[2] = Point(492.5, 2200.42);\n    poly68.ps[3] = Point(492.5, 2138.42);\n    new ShapeRef(router, poly68, 68);\n\n    Polygon poly69(4);\n    poly69.ps[0] = Point(406.5, 2281.46);\n    poly69.ps[1] = Point(406.5, 2343.46);\n    poly69.ps[2] = Point(344.5, 2343.46);\n    poly69.ps[3] = Point(344.5, 2281.46);\n    new ShapeRef(router, poly69, 69);\n\n    Polygon poly70(4);\n    poly70.ps[0] = Point(1222.5, 1084.75);\n    poly70.ps[1] = Point(1222.5, 1146.75);\n    poly70.ps[2] = Point(1160.5, 1146.75);\n    poly70.ps[3] = Point(1160.5, 1084.75);\n    new ShapeRef(router, poly70, 70);\n\n    Polygon poly71(4);\n    poly71.ps[0] = Point(247.5, 1045);\n    poly71.ps[1] = Point(247.5, 1107);\n    poly71.ps[2] = Point(185.5, 1107);\n    poly71.ps[3] = Point(185.5, 1045);\n    new ShapeRef(router, poly71, 71);\n\n    Polygon poly72(4);\n    poly72.ps[0] = Point(437.5, 1045);\n    poly72.ps[1] = Point(437.5, 1107);\n    poly72.ps[2] = Point(375.5, 1107);\n    poly72.ps[3] = Point(375.5, 1045);\n    new ShapeRef(router, poly72, 72);\n\n    Polygon poly73(4);\n    poly73.ps[0] = Point(437.5, 1147);\n    poly73.ps[1] = Point(437.5, 1209);\n    poly73.ps[2] = Point(375.5, 1209);\n    poly73.ps[3] = Point(375.5, 1147);\n    new ShapeRef(router, poly73, 73);\n\n    Polygon poly74(4);\n    poly74.ps[0] = Point(247.5, 1147);\n    poly74.ps[1] = Point(247.5, 1209);\n    poly74.ps[2] = Point(185.5, 1209);\n    poly74.ps[3] = Point(185.5, 1147);\n    new ShapeRef(router, poly74, 74);\n    \n    Polygon poly75(4);\n    poly75.ps[0] = Point(715.439, 1924.42);\n    poly75.ps[1] = Point(715.439, 1944.42);\n    poly75.ps[2] = Point(683.439, 1944.42);\n    poly75.ps[3] = Point(683.439, 1924.42);\n    new ShapeRef(router, poly75, 75);\n\n    Polygon poly76(4);\n    poly76.ps[0] = Point(282.5, 1872.42);\n    poly76.ps[1] = Point(282.5, 1934.42);\n    poly76.ps[2] = Point(220.5, 1934.42);\n    poly76.ps[3] = Point(220.5, 1872.42);\n    new ShapeRef(router, poly76, 76);\n\n    Polygon poly77(4);\n    poly77.ps[0] = Point(1105.5, 2400.79);\n    poly77.ps[1] = Point(1105.5, 2420.79);\n    poly77.ps[2] = Point(1073.5, 2420.79);\n    poly77.ps[3] = Point(1073.5, 2400.79);\n    new ShapeRef(router, poly77, 77);\n\n    Polygon poly78(4);\n    poly78.ps[0] = Point(715.439, 1862.42);\n    poly78.ps[1] = Point(715.439, 1882.42);\n    poly78.ps[2] = Point(683.439, 1882.42);\n    poly78.ps[3] = Point(683.439, 1862.42);\n    new ShapeRef(router, poly78, 78);\n\n    Polygon poly79(4);\n    poly79.ps[0] = Point(1506.5, 2243.29);\n    poly79.ps[1] = Point(1506.5, 2408.29);\n    poly79.ps[2] = Point(1369.5, 2408.29);\n    poly79.ps[3] = Point(1369.5, 2243.29);\n    new ShapeRef(router, poly79, 79);\n\n    Polygon poly80(4);\n    poly80.ps[0] = Point(1232.5, 1327.42);\n    poly80.ps[1] = Point(1232.5, 1359.42);\n    poly80.ps[2] = Point(1212.5, 1359.42);\n    poly80.ps[3] = Point(1212.5, 1327.42);\n    new ShapeRef(router, poly80, 80);\n#endif\n\n    Polygon poly81(4);\n    poly81.ps[0] = Point(1250.5, 1491.42);\n    poly81.ps[1] = Point(1250.5, 1523.42);\n    poly81.ps[2] = Point(1230.5, 1523.42);\n    poly81.ps[3] = Point(1230.5, 1491.42);\n    new ShapeRef(router, poly81, 81);\n\n    Polygon poly82(4);\n    poly82.ps[0] = Point(1341.5, 1491.42);\n    poly82.ps[1] = Point(1341.5, 1523.42);\n    poly82.ps[2] = Point(1321.5, 1523.42);\n    poly82.ps[3] = Point(1321.5, 1491.42);\n    new ShapeRef(router, poly82, 82);\n\n#ifdef ALL\n    Polygon poly83(4);\n    poly83.ps[0] = Point(570.5, 2030.42);\n    poly83.ps[1] = Point(570.5, 2050.42);\n    poly83.ps[2] = Point(538.5, 2050.42);\n    poly83.ps[3] = Point(538.5, 2030.42);\n    new ShapeRef(router, poly83, 83);\n#endif\n\n    Polygon poly84(4);\n    poly84.ps[0] = Point(1432.5, 1491.42);\n    poly84.ps[1] = Point(1432.5, 1523.42);\n    poly84.ps[2] = Point(1412.5, 1523.42);\n    poly84.ps[3] = Point(1412.5, 1491.42);\n    new ShapeRef(router, poly84, 84);\n\n#ifdef ALL\n    Polygon poly85(4);\n    poly85.ps[0] = Point(980.5, 1538.42);\n    poly85.ps[1] = Point(980.5, 1600.42);\n    poly85.ps[2] = Point(918.5, 1600.42);\n    poly85.ps[3] = Point(918.5, 1538.42);\n    new ShapeRef(router, poly85, 85);\n\n    Polygon poly86(4);\n    poly86.ps[0] = Point(1116.5, 1639.42);\n    poly86.ps[1] = Point(1116.5, 1659.42);\n    poly86.ps[2] = Point(1084.5, 1659.42);\n    poly86.ps[3] = Point(1084.5, 1639.42);\n    new ShapeRef(router, poly86, 86);\n\n    Polygon poly87(4);\n    poly87.ps[0] = Point(1116.5, 1445.42);\n    poly87.ps[1] = Point(1116.5, 1465.42);\n    poly87.ps[2] = Point(1084.5, 1465.42);\n    poly87.ps[3] = Point(1084.5, 1445.42);\n    new ShapeRef(router, poly87, 87);\n#endif\n\n    Polygon poly88(4);\n    poly88.ps[0] = Point(1222.5, 1260.42);\n    poly88.ps[1] = Point(1222.5, 1322.42);\n    poly88.ps[2] = Point(1160.5, 1322.42);\n    poly88.ps[3] = Point(1160.5, 1260.42);\n    new ShapeRef(router, poly88, 88);\n\n#ifdef ALL\n    Polygon poly89(4);\n    poly89.ps[0] = Point(170.5, 2215.42);\n    poly89.ps[1] = Point(170.5, 2247.42);\n    poly89.ps[2] = Point(150.5, 2247.42);\n    poly89.ps[3] = Point(150.5, 2215.42);\n    new ShapeRef(router, poly89, 89);\n\n    Polygon poly90(4);\n    poly90.ps[0] = Point(1323.5, 1047.75);\n    poly90.ps[1] = Point(1323.5, 1079.75);\n    poly90.ps[2] = Point(1303.5, 1079.75);\n    poly90.ps[3] = Point(1303.5, 1047.75);\n    new ShapeRef(router, poly90, 90);\n\n    Polygon poly91(4);\n    poly91.ps[0] = Point(723.5, 680);\n    poly91.ps[1] = Point(723.5, 700);\n    poly91.ps[2] = Point(691.5, 700);\n    poly91.ps[3] = Point(691.5, 680);\n    new ShapeRef(router, poly91, 91);\n\n    Polygon poly92(4);\n    poly92.ps[0] = Point(492.5, 979);\n    poly92.ps[1] = Point(492.5, 999);\n    poly92.ps[2] = Point(460.5, 999);\n    poly92.ps[3] = Point(460.5, 979);\n    new ShapeRef(router, poly92, 92);\n\n    Polygon poly93(4);\n    poly93.ps[0] = Point(1105.5, 2475.79);\n    poly93.ps[1] = Point(1105.5, 2495.79);\n    poly93.ps[2] = Point(1073.5, 2495.79);\n    poly93.ps[3] = Point(1073.5, 2475.79);\n    new ShapeRef(router, poly93, 93);\n\n    Polygon poly94(4);\n    poly94.ps[0] = Point(860.5, 2034.42);\n    poly94.ps[1] = Point(860.5, 2096.42);\n    poly94.ps[2] = Point(798.5, 2096.42);\n    poly94.ps[3] = Point(798.5, 2034.42);\n    new ShapeRef(router, poly94, 94);\n\n    Polygon poly95(4);\n    poly95.ps[0] = Point(1277.5, 1176.75);\n    poly95.ps[1] = Point(1277.5, 1216.75);\n    poly95.ps[2] = Point(1201.5, 1216.75);\n    poly95.ps[3] = Point(1201.5, 1176.75);\n    new ShapeRef(router, poly95, 95);\n\n    Polygon poly96(4);\n    poly96.ps[0] = Point(797.5, 2278.79);\n    poly96.ps[1] = Point(797.5, 2338.79);\n    poly96.ps[2] = Point(741.5, 2338.79);\n    poly96.ps[3] = Point(741.5, 2278.79);\n    new ShapeRef(router, poly96, 96);\n\n    Polygon poly97(4);\n    poly97.ps[0] = Point(241.5, 2211.42);\n    poly97.ps[1] = Point(241.5, 2251.42);\n    poly97.ps[2] = Point(165.5, 2251.42);\n    poly97.ps[3] = Point(165.5, 2211.42);\n    new ShapeRef(router, poly97, 97);\n\n    Polygon poly98(4);\n    poly98.ps[0] = Point(797.5, 2420.79);\n    poly98.ps[1] = Point(797.5, 2480.79);\n    poly98.ps[2] = Point(741.5, 2480.79);\n    poly98.ps[3] = Point(741.5, 2420.79);\n    new ShapeRef(router, poly98, 98);\n\n    Polygon poly99(4);\n    poly99.ps[0] = Point(915.5, 2297.79);\n    poly99.ps[1] = Point(915.5, 2337.79);\n    poly99.ps[2] = Point(839.5, 2337.79);\n    poly99.ps[3] = Point(839.5, 2297.79);\n    new ShapeRef(router, poly99, 99);\n\n    Polygon poly100(4);\n    poly100.ps[0] = Point(1117.5, 2203.79);\n    poly100.ps[1] = Point(1117.5, 2263.79);\n    poly100.ps[2] = Point(1061.5, 2263.79);\n    poly100.ps[3] = Point(1061.5, 2203.79);\n    new ShapeRef(router, poly100, 100);\n\n    Polygon poly101(4);\n    poly101.ps[0] = Point(1117.5, 2278.79);\n    poly101.ps[1] = Point(1117.5, 2338.79);\n    poly101.ps[2] = Point(1061.5, 2338.79);\n    poly101.ps[3] = Point(1061.5, 2278.79);\n    new ShapeRef(router, poly101, 101);\n\n    Polygon poly102(4);\n    poly102.ps[0] = Point(1039.5, 2189.79);\n    poly102.ps[1] = Point(1039.5, 2249.79);\n    poly102.ps[2] = Point(983.5, 2249.79);\n    poly102.ps[3] = Point(983.5, 2189.79);\n    new ShapeRef(router, poly102, 102);\n\n    Polygon poly103(4);\n    poly103.ps[0] = Point(1097.5, 2078.42);\n    poly103.ps[1] = Point(1097.5, 2118.42);\n    poly103.ps[2] = Point(1021.5, 2118.42);\n    poly103.ps[3] = Point(1021.5, 2078.42);\n    new ShapeRef(router, poly103, 103);\n\n    Polygon poly104(4);\n    poly104.ps[0] = Point(733.5, 2099.42);\n    poly104.ps[1] = Point(733.5, 2159.42);\n    poly104.ps[2] = Point(677.5, 2159.42);\n    poly104.ps[3] = Point(677.5, 2099.42);\n    new ShapeRef(router, poly104, 104);\n\n    Polygon poly105(4);\n    poly105.ps[0] = Point(403.5, 2099.42);\n    poly105.ps[1] = Point(403.5, 2159.42);\n    poly105.ps[2] = Point(347.5, 2159.42);\n    poly105.ps[3] = Point(347.5, 2099.42);\n    new ShapeRef(router, poly105, 105);\n\n    Polygon poly106(4);\n    poly106.ps[0] = Point(1386.5, 2099.42);\n    poly106.ps[1] = Point(1386.5, 2159.42);\n    poly106.ps[2] = Point(1330.5, 2159.42);\n    poly106.ps[3] = Point(1330.5, 2099.42);\n    new ShapeRef(router, poly106, 106);\n\n    Polygon poly107(4);\n    poly107.ps[0] = Point(1277.5, 1945.42);\n    poly107.ps[1] = Point(1277.5, 1985.42);\n    poly107.ps[2] = Point(1201.5, 1985.42);\n    poly107.ps[3] = Point(1201.5, 1945.42);\n    new ShapeRef(router, poly107, 107);\n\n    Polygon poly108(4);\n    poly108.ps[0] = Point(1277.5, 1821.42);\n    poly108.ps[1] = Point(1277.5, 1861.42);\n    poly108.ps[2] = Point(1201.5, 1861.42);\n    poly108.ps[3] = Point(1201.5, 1821.42);\n    new ShapeRef(router, poly108, 108);\n\n    Polygon poly109(4);\n    poly109.ps[0] = Point(1277.5, 1697.42);\n    poly109.ps[1] = Point(1277.5, 1737.42);\n    poly109.ps[2] = Point(1201.5, 1737.42);\n    poly109.ps[3] = Point(1201.5, 1697.42);\n    new ShapeRef(router, poly109, 109);\n\n    Polygon poly110(4);\n    poly110.ps[0] = Point(1150.5, 1323.42);\n    poly110.ps[1] = Point(1150.5, 1363.42);\n    poly110.ps[2] = Point(1074.5, 1363.42);\n    poly110.ps[3] = Point(1074.5, 1323.42);\n    new ShapeRef(router, poly110, 110);\n\n    Polygon poly111(4);\n    poly111.ps[0] = Point(1008.5, 1221.42);\n    poly111.ps[1] = Point(1008.5, 1281.42);\n    poly111.ps[2] = Point(952.5, 1281.42);\n    poly111.ps[3] = Point(952.5, 1221.42);\n    new ShapeRef(router, poly111, 111);\n\n    Polygon poly112(4);\n    poly112.ps[0] = Point(1308.5, 1043.75);\n    poly112.ps[1] = Point(1308.5, 1083.75);\n    poly112.ps[2] = Point(1232.5, 1083.75);\n    poly112.ps[3] = Point(1232.5, 1043.75);\n    new ShapeRef(router, poly112, 112);\n\n    Polygon poly113(4);\n    poly113.ps[0] = Point(1150.5, 1043.75);\n    poly113.ps[1] = Point(1150.5, 1083.75);\n    poly113.ps[2] = Point(1074.5, 1083.75);\n    poly113.ps[3] = Point(1074.5, 1043.75);\n    new ShapeRef(router, poly113, 113);\n\n    Polygon poly114(4);\n    poly114.ps[0] = Point(1355.5, 480.5);\n    poly114.ps[1] = Point(1355.5, 540.5);\n    poly114.ps[2] = Point(1299.5, 540.5);\n    poly114.ps[3] = Point(1299.5, 480.5);\n    new ShapeRef(router, poly114, 114);\n\n    Polygon poly115(4);\n    poly115.ps[0] = Point(1277.5, 720);\n    poly115.ps[1] = Point(1277.5, 760);\n    poly115.ps[2] = Point(1201.5, 760);\n    poly115.ps[3] = Point(1201.5, 720);\n    new ShapeRef(router, poly115, 115);\n\n    Polygon poly116(4);\n    poly116.ps[0] = Point(1277.5, 458);\n    poly116.ps[1] = Point(1277.5, 498);\n    poly116.ps[2] = Point(1201.5, 498);\n    poly116.ps[3] = Point(1201.5, 458);\n    new ShapeRef(router, poly116, 116);\n\n    Polygon poly117(4);\n    poly117.ps[0] = Point(946.5, 813);\n    poly117.ps[1] = Point(946.5, 873);\n    poly117.ps[2] = Point(890.5, 873);\n    poly117.ps[3] = Point(890.5, 813);\n    new ShapeRef(router, poly117, 117);\n\n    Polygon poly118(4);\n    poly118.ps[0] = Point(504.5, 707);\n    poly118.ps[1] = Point(504.5, 767);\n    poly118.ps[2] = Point(448.5, 767);\n    poly118.ps[3] = Point(448.5, 707);\n    new ShapeRef(router, poly118, 118);\n\n    Polygon poly119(4);\n    poly119.ps[0] = Point(504.5, 782);\n    poly119.ps[1] = Point(504.5, 842);\n    poly119.ps[2] = Point(448.5, 842);\n    poly119.ps[3] = Point(448.5, 782);\n    new ShapeRef(router, poly119, 119);\n\n    Polygon poly120(4);\n    poly120.ps[0] = Point(826.5, 670);\n    poly120.ps[1] = Point(826.5, 730);\n    poly120.ps[2] = Point(770.5, 730);\n    poly120.ps[3] = Point(770.5, 670);\n    new ShapeRef(router, poly120, 120);\n\n    Polygon poly121(4);\n    poly121.ps[0] = Point(633.5, 720);\n    poly121.ps[1] = Point(633.5, 760);\n    poly121.ps[2] = Point(557.5, 760);\n    poly121.ps[3] = Point(557.5, 720);\n    new ShapeRef(router, poly121, 121);\n\n    Polygon poly122(4);\n    poly122.ps[0] = Point(372.5, 720);\n    poly122.ps[1] = Point(372.5, 760);\n    poly122.ps[2] = Point(296.5, 760);\n    poly122.ps[3] = Point(296.5, 720);\n    new ShapeRef(router, poly122, 122);\n\n    Polygon poly123(4);\n    poly123.ps[0] = Point(735.5, 408);\n    poly123.ps[1] = Point(735.5, 468);\n    poly123.ps[2] = Point(679.5, 468);\n    poly123.ps[3] = Point(679.5, 408);\n    new ShapeRef(router, poly123, 123);\n\n    Polygon poly124(4);\n    poly124.ps[0] = Point(735.5, 483);\n    poly124.ps[1] = Point(735.5, 543);\n    poly124.ps[2] = Point(679.5, 543);\n    poly124.ps[3] = Point(679.5, 483);\n    new ShapeRef(router, poly124, 124);\n\n    Polygon poly125(4);\n    poly125.ps[0] = Point(735.5, 333);\n    poly125.ps[1] = Point(735.5, 393);\n    poly125.ps[2] = Point(679.5, 393);\n    poly125.ps[3] = Point(679.5, 333);\n    new ShapeRef(router, poly125, 125);\n\n    Polygon poly126(4);\n    poly126.ps[0] = Point(795.5, 271);\n    poly126.ps[1] = Point(795.5, 331);\n    poly126.ps[2] = Point(739.5, 331);\n    poly126.ps[3] = Point(739.5, 271);\n    new ShapeRef(router, poly126, 126);\n\n    Polygon poly127(4);\n    poly127.ps[0] = Point(795.5, 169);\n    poly127.ps[1] = Point(795.5, 229);\n    poly127.ps[2] = Point(739.5, 229);\n    poly127.ps[3] = Point(739.5, 169);\n    new ShapeRef(router, poly127, 127);\n\n    Polygon poly128(4);\n    poly128.ps[0] = Point(520.5, 2242.46);\n    poly128.ps[1] = Point(520.5, 2302.46);\n    poly128.ps[2] = Point(464.5, 2302.46);\n    poly128.ps[3] = Point(464.5, 2242.46);\n    new ShapeRef(router, poly128, 128);\n\n    Polygon poly129(4);\n    poly129.ps[0] = Point(1277.5, 1549.42);\n    poly129.ps[1] = Point(1277.5, 1589.42);\n    poly129.ps[2] = Point(1201.5, 1589.42);\n    poly129.ps[3] = Point(1201.5, 1549.42);\n    new ShapeRef(router, poly129, 129);\n\n    Polygon poly130(4);\n    poly130.ps[0] = Point(735.5, 625);\n    poly130.ps[1] = Point(735.5, 685);\n    poly130.ps[2] = Point(679.5, 685);\n    poly130.ps[3] = Point(679.5, 625);\n    new ShapeRef(router, poly130, 130);\n\n    Polygon poly131(4);\n    poly131.ps[0] = Point(504.5, 924);\n    poly131.ps[1] = Point(504.5, 984);\n    poly131.ps[2] = Point(448.5, 984);\n    poly131.ps[3] = Point(448.5, 924);\n    new ShapeRef(router, poly131, 131);\n\n    Polygon poly132(4);\n    poly132.ps[0] = Point(314.5, 1006);\n    poly132.ps[1] = Point(314.5, 1066);\n    poly132.ps[2] = Point(258.5, 1066);\n    poly132.ps[3] = Point(258.5, 1006);\n    new ShapeRef(router, poly132, 132);\n\n    Polygon poly133(4);\n    poly133.ps[0] = Point(314.5, 1108);\n    poly133.ps[1] = Point(314.5, 1168);\n    poly133.ps[2] = Point(258.5, 1168);\n    poly133.ps[3] = Point(258.5, 1108);\n    new ShapeRef(router, poly133, 133);\n\n    Polygon poly134(4);\n    poly134.ps[0] = Point(582.5, 1006);\n    poly134.ps[1] = Point(582.5, 1066);\n    poly134.ps[2] = Point(526.5, 1066);\n    poly134.ps[3] = Point(526.5, 1006);\n    new ShapeRef(router, poly134, 134);\n\n    Polygon poly135(4);\n    poly135.ps[0] = Point(582.5, 1108);\n    poly135.ps[1] = Point(582.5, 1168);\n    poly135.ps[2] = Point(526.5, 1168);\n    poly135.ps[3] = Point(526.5, 1108);\n    new ShapeRef(router, poly135, 135);\n\n    Polygon poly136(4);\n    poly136.ps[0] = Point(727.439, 1944.42);\n    poly136.ps[1] = Point(727.439, 2004.42);\n    poly136.ps[2] = Point(671.439, 2004.42);\n    poly136.ps[3] = Point(671.439, 1944.42);\n    new ShapeRef(router, poly136, 136);\n\n    Polygon poly137(4);\n    poly137.ps[0] = Point(1117.5, 2420.79);\n    poly137.ps[1] = Point(1117.5, 2480.79);\n    poly137.ps[2] = Point(1061.5, 2480.79);\n    poly137.ps[3] = Point(1061.5, 2420.79);\n    new ShapeRef(router, poly137, 137);\n\n    Polygon poly138(4);\n    poly138.ps[0] = Point(727.439, 1802.42);\n    poly138.ps[1] = Point(727.439, 1862.42);\n    poly138.ps[2] = Point(671.439, 1862.42);\n    poly138.ps[3] = Point(671.439, 1802.42);\n    new ShapeRef(router, poly138, 138);\n#endif\n\n    Polygon poly139(4);\n    poly139.ps[0] = Point(1308.5, 1323.42);\n    poly139.ps[1] = Point(1308.5, 1363.42);\n    poly139.ps[2] = Point(1232.5, 1363.42);\n    poly139.ps[3] = Point(1232.5, 1323.42);\n    new ShapeRef(router, poly139, 139);\n\n    Polygon poly140(4);\n    poly140.ps[0] = Point(1326.5, 1487.42);\n    poly140.ps[1] = Point(1326.5, 1527.42);\n    poly140.ps[2] = Point(1250.5, 1527.42);\n    poly140.ps[3] = Point(1250.5, 1487.42);\n    new ShapeRef(router, poly140, 140);\n\n    Polygon poly141(4);\n    poly141.ps[0] = Point(1417.5, 1487.42);\n    poly141.ps[1] = Point(1417.5, 1527.42);\n    poly141.ps[2] = Point(1341.5, 1527.42);\n    poly141.ps[3] = Point(1341.5, 1487.42);\n    new ShapeRef(router, poly141, 141);\n\n#ifdef ALL\n    Polygon poly142(4);\n    poly142.ps[0] = Point(582.5, 1970.42);\n    poly142.ps[1] = Point(582.5, 2030.42);\n    poly142.ps[2] = Point(526.5, 2030.42);\n    poly142.ps[3] = Point(526.5, 1970.42);\n    new ShapeRef(router, poly142, 142);\n\n    Polygon poly143(4);\n    poly143.ps[0] = Point(1508.5, 1487.42);\n    poly143.ps[1] = Point(1508.5, 1527.42);\n    poly143.ps[2] = Point(1432.5, 1527.42);\n    poly143.ps[3] = Point(1432.5, 1487.42);\n    new ShapeRef(router, poly143, 143);\n\n    Polygon poly144(4);\n    poly144.ps[0] = Point(1128.5, 1579.42);\n    poly144.ps[1] = Point(1128.5, 1639.42);\n    poly144.ps[2] = Point(1072.5, 1639.42);\n    poly144.ps[3] = Point(1072.5, 1579.42);\n    new ShapeRef(router, poly144, 144);\n\n    Polygon poly145(4);\n    poly145.ps[0] = Point(1128.5, 1385.42);\n    poly145.ps[1] = Point(1128.5, 1445.42);\n    poly145.ps[2] = Point(1072.5, 1445.42);\n    poly145.ps[3] = Point(1072.5, 1385.42);\n    new ShapeRef(router, poly145, 145);\n\n    Polygon poly146(4);\n    poly146.ps[0] = Point(150.5, 2211.42);\n    poly146.ps[1] = Point(150.5, 2251.42);\n    poly146.ps[2] = Point(74.5, 2251.42);\n    poly146.ps[3] = Point(74.5, 2211.42);\n    new ShapeRef(router, poly146, 146);\n#endif\n\n    Polygon poly147(4);\n    poly147.ps[0] = Point(1399.5, 1043.75);\n    poly147.ps[1] = Point(1399.5, 1083.75);\n    poly147.ps[2] = Point(1323.5, 1083.75);\n    poly147.ps[3] = Point(1323.5, 1043.75);\n    new ShapeRef(router, poly147, 147);\n\n#ifdef ALL\n    Polygon poly148(4);\n    poly148.ps[0] = Point(735.5, 700);\n    poly148.ps[1] = Point(735.5, 760);\n    poly148.ps[2] = Point(679.5, 760);\n    poly148.ps[3] = Point(679.5, 700);\n    new ShapeRef(router, poly148, 148);\n\n    Polygon poly149(4);\n    poly149.ps[0] = Point(504.5, 999);\n    poly149.ps[1] = Point(504.5, 1059);\n    poly149.ps[2] = Point(448.5, 1059);\n    poly149.ps[3] = Point(448.5, 999);\n    new ShapeRef(router, poly149, 149);\n\n    Polygon poly150(4);\n    poly150.ps[0] = Point(1117.5, 2495.79);\n    poly150.ps[1] = Point(1117.5, 2555.79);\n    poly150.ps[2] = Point(1061.5, 2555.79);\n    poly150.ps[3] = Point(1061.5, 2495.79);\n    new ShapeRef(router, poly150, 150);\n\n    Polygon poly151(4);\n    poly151.ps[0] = Point(1482, 966.25);\n    poly151.ps[1] = Point(1482, 1006.25);\n    poly151.ps[2] = Point(1422, 1006.25);\n    poly151.ps[3] = Point(1422, 966.25);\n    new ShapeRef(router, poly151, 151);\n\n    Polygon poly152(4);\n    poly152.ps[0] = Point(1482, 1006.25);\n    poly152.ps[1] = Point(1482, 1046.25);\n    poly152.ps[2] = Point(1422, 1046.25);\n    poly152.ps[3] = Point(1422, 1006.25);\n    new ShapeRef(router, poly152, 152);\n\n    Polygon poly153(4);\n    poly153.ps[0] = Point(1533, 1134.75);\n    poly153.ps[1] = Point(1533, 1194.75);\n    poly153.ps[2] = Point(1493, 1194.75);\n    poly153.ps[3] = Point(1493, 1134.75);\n    new ShapeRef(router, poly153, 153);\n\n    Polygon poly154(4);\n    poly154.ps[0] = Point(1573, 1134.75);\n    poly154.ps[1] = Point(1573, 1194.75);\n    poly154.ps[2] = Point(1533, 1194.75);\n    poly154.ps[3] = Point(1533, 1134.75);\n    new ShapeRef(router, poly154, 154);\n\n    Polygon poly155(4);\n    poly155.ps[0] = Point(1272, 159.5);\n    poly155.ps[1] = Point(1272, 219.5);\n    poly155.ps[2] = Point(1232, 219.5);\n    poly155.ps[3] = Point(1232, 159.5);\n    new ShapeRef(router, poly155, 155);\n\n    Polygon poly156(4);\n    poly156.ps[0] = Point(252.5, 2005.92);\n    poly156.ps[1] = Point(252.5, 2045.92);\n    poly156.ps[2] = Point(192.5, 2045.92);\n    poly156.ps[3] = Point(192.5, 2005.92);\n    new ShapeRef(router, poly156, 156);\n\n    Polygon poly157(4);\n    poly157.ps[0] = Point(252.5, 2045.92);\n    poly157.ps[1] = Point(252.5, 2085.92);\n    poly157.ps[2] = Point(192.5, 2085.92);\n    poly157.ps[3] = Point(192.5, 2045.92);\n    new ShapeRef(router, poly157, 157);\n\n    Polygon poly158(4);\n    poly158.ps[0] = Point(741.5, 1642.92);\n    poly158.ps[1] = Point(741.5, 1682.92);\n    poly158.ps[2] = Point(681.5, 1682.92);\n    poly158.ps[3] = Point(681.5, 1642.92);\n    new ShapeRef(router, poly158, 158);\n\n    Polygon poly159(4);\n    poly159.ps[0] = Point(1458.5, 2243.79);\n    poly159.ps[1] = Point(1458.5, 2303.79);\n    poly159.ps[2] = Point(1418.5, 2303.79);\n    poly159.ps[3] = Point(1418.5, 2243.79);\n    new ShapeRef(router, poly159, 159);\n\n    ConnRef *connRef160 = new ConnRef(router, 160);\n    ConnEnd srcPt160(Point(1191.5, 1211.75), 2);\n    connRef160->setSourceEndpoint(srcPt160);\n    ConnEnd dstPt160(Point(736.5, 1291.42), 15);\n    connRef160->setDestEndpoint(dstPt160);\n    connRef160->setRoutingType((ConnType)2);\n\n    ConnRef *connRef161 = new ConnRef(router, 161);\n    ConnEnd srcPt161(Point(1191.5, 1181.75), 1);\n    connRef161->setSourceEndpoint(srcPt161);\n    ConnEnd dstPt161(Point(1191.5, 1115.75), 15);\n    connRef161->setDestEndpoint(dstPt161);\n    connRef161->setRoutingType((ConnType)2);\n\n    ConnRef *connRef162 = new ConnRef(router, 162);\n    ConnEnd srcPt162(Point(1191.5, 1211.75), 2);\n    connRef162->setSourceEndpoint(srcPt162);\n    ConnEnd dstPt162(Point(1191.5, 1291.42), 15);\n    connRef162->setDestEndpoint(dstPt162);\n    connRef162->setRoutingType((ConnType)2);\n\n    ConnRef *connRef163 = new ConnRef(router, 163);\n    ConnEnd srcPt163(Point(754.5, 2348.79), 4);\n    connRef163->setSourceEndpoint(srcPt163);\n    ConnEnd dstPt163(Point(251.5, 2379.79), 15);\n    connRef163->setDestEndpoint(dstPt163);\n    connRef163->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints163(1);\n    checkpoints163[0] = Point(807.5, 2379.79);\n    connRef163->setRoutingCheckpoints(checkpoints163);\n\n    ConnRef *connRef164 = new ConnRef(router, 164);\n    ConnEnd srcPt164(Point(784.5, 2348.79), 8);\n    connRef164->setSourceEndpoint(srcPt164);\n    ConnEnd dstPt164(Point(829.5, 2379.79), 15);\n    connRef164->setDestEndpoint(dstPt164);\n    connRef164->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints164(1);\n    checkpoints164[0] = Point(731.5, 2379.79);\n    connRef164->setRoutingCheckpoints(checkpoints164);\n\n    ConnRef *connRef165 = new ConnRef(router, 165);\n    ConnEnd srcPt165(Point(251.5, 2246.42), 2);\n    connRef165->setSourceEndpoint(srcPt165);\n    ConnEnd dstPt165(Point(251.5, 2379.79), 15);\n    connRef165->setDestEndpoint(dstPt165);\n    connRef165->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints165(1);\n    checkpoints165[0] = Point(226.5, 2261.42);\n    connRef165->setRoutingCheckpoints(checkpoints165);\n\n    ConnRef *connRef166 = new ConnRef(router, 166);\n    ConnEnd srcPt166(Point(754.5, 2410.79), 4);\n    connRef166->setSourceEndpoint(srcPt166);\n    ConnEnd dstPt166(Point(251.5, 2379.79), 15);\n    connRef166->setDestEndpoint(dstPt166);\n    connRef166->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints166(1);\n    checkpoints166[0] = Point(807.5, 2379.79);\n    connRef166->setRoutingCheckpoints(checkpoints166);\n\n    ConnRef *connRef167 = new ConnRef(router, 167);\n    ConnEnd srcPt167(Point(784.5, 2410.79), 8);\n    connRef167->setSourceEndpoint(srcPt167);\n    ConnEnd dstPt167(Point(829.5, 2379.79), 15);\n    connRef167->setDestEndpoint(dstPt167);\n    connRef167->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints167(1);\n    checkpoints167[0] = Point(731.5, 2379.79);\n    connRef167->setRoutingCheckpoints(checkpoints167);\n\n    ConnRef *connRef168 = new ConnRef(router, 168);\n    ConnEnd srcPt168(Point(251.5, 2379.79), 15);\n    connRef168->setSourceEndpoint(srcPt168);\n    ConnEnd dstPt168(Point(160.5, 2246.42), 2);\n    connRef168->setDestEndpoint(dstPt168);\n    connRef168->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints168(1);\n    checkpoints168[0] = Point(226.5, 2261.42);\n    connRef168->setRoutingCheckpoints(checkpoints168);\n\n    ConnRef *connRef169 = new ConnRef(router, 169);\n    ConnEnd srcPt169(Point(829.5, 2332.79), 2);\n    connRef169->setSourceEndpoint(srcPt169);\n    ConnEnd dstPt169(Point(829.5, 2379.79), 15);\n    connRef169->setDestEndpoint(dstPt169);\n    connRef169->setRoutingType((ConnType)2);\n\n    ConnRef *connRef170 = new ConnRef(router, 170);\n    ConnEnd srcPt170(Point(1074.5, 2273.79), 4);\n    connRef170->setSourceEndpoint(srcPt170);\n    ConnEnd dstPt170(Point(829.5, 2379.79), 15);\n    connRef170->setDestEndpoint(dstPt170);\n    connRef170->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints170(1);\n    checkpoints170[0] = Point(1051.5, 2379.79);\n    connRef170->setRoutingCheckpoints(checkpoints170);\n\n    ConnRef *connRef171 = new ConnRef(router, 171);\n    ConnEnd srcPt171(Point(1074.5, 2348.79), 4);\n    connRef171->setSourceEndpoint(srcPt171);\n    ConnEnd dstPt171(Point(829.5, 2379.79), 15);\n    connRef171->setDestEndpoint(dstPt171);\n    connRef171->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints171(1);\n    checkpoints171[0] = Point(1051.5, 2379.79);\n    connRef171->setRoutingCheckpoints(checkpoints171);\n\n    ConnRef *connRef172 = new ConnRef(router, 172);\n    ConnEnd srcPt172(Point(996.5, 2179.79), 4);\n    connRef172->setSourceEndpoint(srcPt172);\n    ConnEnd dstPt172(Point(829.5, 2169.42), 15);\n    connRef172->setDestEndpoint(dstPt172);\n    connRef172->setRoutingType((ConnType)2);\n\n    ConnRef *connRef173 = new ConnRef(router, 173);\n    ConnEnd srcPt173(Point(1011.5, 2113.42), 2);\n    connRef173->setSourceEndpoint(srcPt173);\n    ConnEnd dstPt173(Point(829.5, 2169.42), 15);\n    connRef173->setDestEndpoint(dstPt173);\n    connRef173->setRoutingType((ConnType)2);\n\n    ConnRef *connRef174 = new ConnRef(router, 174);\n    ConnEnd srcPt174(Point(690.5, 2169.42), 4);\n    connRef174->setSourceEndpoint(srcPt174);\n    ConnEnd dstPt174(Point(523.5, 2169.42), 15);\n    connRef174->setDestEndpoint(dstPt174);\n    connRef174->setRoutingType((ConnType)2);\n\n    ConnRef *connRef175 = new ConnRef(router, 175);\n    ConnEnd srcPt175(Point(690.5, 2169.42), 4);\n    connRef175->setSourceEndpoint(srcPt175);\n    ConnEnd dstPt175(Point(829.5, 2065.42), 15);\n    connRef175->setDestEndpoint(dstPt175);\n    connRef175->setRoutingType((ConnType)2);\n\n    ConnRef *connRef176 = new ConnRef(router, 176);\n    ConnEnd srcPt176(Point(360.5, 2169.42), 4);\n    connRef176->setSourceEndpoint(srcPt176);\n    ConnEnd dstPt176(Point(251.5, 2169.42), 15);\n    connRef176->setDestEndpoint(dstPt176);\n    connRef176->setRoutingType((ConnType)2);\n\n    ConnRef *connRef177 = new ConnRef(router, 177);\n    ConnEnd srcPt177(Point(390.5, 2169.42), 8);\n    connRef177->setSourceEndpoint(srcPt177);\n    ConnEnd dstPt177(Point(523.5, 2169.42), 15);\n    connRef177->setDestEndpoint(dstPt177);\n    connRef177->setRoutingType((ConnType)2);\n\n    ConnRef *connRef178 = new ConnRef(router, 178);\n    ConnEnd srcPt178(Point(360.5, 2169.42), 4);\n    connRef178->setSourceEndpoint(srcPt178);\n    ConnEnd dstPt178(Point(375.5, 2312.46), 15);\n    connRef178->setDestEndpoint(dstPt178);\n    connRef178->setRoutingType((ConnType)2);\n\n    ConnRef *connRef179 = new ConnRef(router, 179);\n    ConnEnd srcPt179(Point(1373.5, 2169.42), 8);\n    connRef179->setSourceEndpoint(srcPt179);\n    ConnEnd dstPt179(Point(1432.5, 2169.42), 15);\n    connRef179->setDestEndpoint(dstPt179);\n    connRef179->setRoutingType((ConnType)2);\n\n    ConnRef *connRef180 = new ConnRef(router, 180);\n    ConnEnd srcPt180(Point(1343.5, 2169.42), 4);\n    connRef180->setSourceEndpoint(srcPt180);\n    ConnEnd dstPt180(Point(1191.5, 2169.42), 15);\n    connRef180->setDestEndpoint(dstPt180);\n    connRef180->setRoutingType((ConnType)2);\n\n    ConnRef *connRef181 = new ConnRef(router, 181);\n    ConnEnd srcPt181(Point(1191.5, 1980.42), 2);\n    connRef181->setSourceEndpoint(srcPt181);\n    ConnEnd dstPt181(Point(1191.5, 2169.42), 15);\n    connRef181->setDestEndpoint(dstPt181);\n    connRef181->setRoutingType((ConnType)2);\n\n    ConnRef *connRef182 = new ConnRef(router, 182);\n    ConnEnd srcPt182(Point(1191.5, 1826.42), 1);\n    connRef182->setSourceEndpoint(srcPt182);\n    ConnEnd dstPt182(Point(1191.5, 1779.42), 15);\n    connRef182->setDestEndpoint(dstPt182);\n    connRef182->setRoutingType((ConnType)2);\n\n    ConnRef *connRef183 = new ConnRef(router, 183);\n    ConnEnd srcPt183(Point(1191.5, 1856.42), 2);\n    connRef183->setSourceEndpoint(srcPt183);\n    ConnEnd dstPt183(Point(1191.5, 1903.42), 15);\n    connRef183->setDestEndpoint(dstPt183);\n    connRef183->setRoutingType((ConnType)2);\n\n    ConnRef *connRef184 = new ConnRef(router, 184);\n    ConnEnd srcPt184(Point(1191.5, 1732.42), 2);\n    connRef184->setSourceEndpoint(srcPt184);\n    ConnEnd dstPt184(Point(1191.5, 1779.42), 15);\n    connRef184->setDestEndpoint(dstPt184);\n    connRef184->setRoutingType((ConnType)2);\n\n    ConnRef *connRef185 = new ConnRef(router, 185);\n    ConnEnd srcPt185(Point(1191.5, 1702.42), 1);\n    connRef185->setSourceEndpoint(srcPt185);\n    ConnEnd dstPt185(Point(1191.5, 1655.42), 15);\n    connRef185->setDestEndpoint(dstPt185);\n    connRef185->setRoutingType((ConnType)2);\n\n    ConnRef *connRef186 = new ConnRef(router, 186);\n    ConnEnd srcPt186(Point(1160.5, 1358.42), 2);\n    connRef186->setSourceEndpoint(srcPt186);\n    ConnEnd dstPt186(Point(1191.5, 1455.42), 15);\n    connRef186->setDestEndpoint(dstPt186);\n    connRef186->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints186(1);\n    checkpoints186[0] = Point(1191.5, 1373.42);\n    connRef186->setRoutingCheckpoints(checkpoints186);\n\n    ConnRef *connRef187 = new ConnRef(router, 187);\n    ConnEnd srcPt187(Point(1160.5, 1328.42), 1);\n    connRef187->setSourceEndpoint(srcPt187);\n    ConnEnd dstPt187(Point(1191.5, 1291.42), 15);\n    connRef187->setDestEndpoint(dstPt187);\n    connRef187->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints187(1);\n    checkpoints187[0] = Point(1191.5, 1313.42);\n    connRef187->setRoutingCheckpoints(checkpoints187);\n\n    ConnRef *connRef188 = new ConnRef(router, 188);\n    ConnEnd srcPt188(Point(965.5, 1291.42), 4);\n    connRef188->setSourceEndpoint(srcPt188);\n    ConnEnd dstPt188(Point(736.5, 1291.42), 15);\n    connRef188->setDestEndpoint(dstPt188);\n    connRef188->setRoutingType((ConnType)2);\n\n    ConnRef *connRef189 = new ConnRef(router, 189);\n    ConnEnd srcPt189(Point(995.5, 1291.42), 8);\n    connRef189->setSourceEndpoint(srcPt189);\n    ConnEnd dstPt189(Point(1191.5, 1291.42), 15);\n    connRef189->setDestEndpoint(dstPt189);\n    connRef189->setRoutingType((ConnType)2);\n\n    ConnRef *connRef190 = new ConnRef(router, 190);\n    ConnEnd srcPt190(Point(1222.5, 1078.75), 2);\n    connRef190->setSourceEndpoint(srcPt190);\n    ConnEnd dstPt190(Point(1191.5, 1115.75), 15);\n    connRef190->setDestEndpoint(dstPt190);\n    connRef190->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints190(1);\n    checkpoints190[0] = Point(1191.5, 1033.75);\n    connRef190->setRoutingCheckpoints(checkpoints190);\n\n    ConnRef *connRef191 = new ConnRef(router, 191);\n    ConnEnd srcPt191(Point(1160.5, 1048.75), 1);\n    connRef191->setSourceEndpoint(srcPt191);\n    ConnEnd dstPt191(Point(1191.5, 883), 15);\n    connRef191->setDestEndpoint(dstPt191);\n    connRef191->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints191(1);\n    checkpoints191[0] = Point(1191.5, 1093.75);\n    connRef191->setRoutingCheckpoints(checkpoints191);\n\n    ConnRef *connRef192 = new ConnRef(router, 192);\n    ConnEnd srcPt192(Point(1312.5, 550.5), 4);\n    connRef192->setSourceEndpoint(srcPt192);\n    ConnEnd dstPt192(Point(1191.5, 584), 15);\n    connRef192->setDestEndpoint(dstPt192);\n    connRef192->setRoutingType((ConnType)2);\n\n    ConnRef *connRef193 = new ConnRef(router, 193);\n    ConnEnd srcPt193(Point(1191.5, 725), 1);\n    connRef193->setSourceEndpoint(srcPt193);\n    ConnEnd dstPt193(Point(1191.5, 584), 15);\n    connRef193->setDestEndpoint(dstPt193);\n    connRef193->setRoutingType((ConnType)2);\n\n    ConnRef *connRef194 = new ConnRef(router, 194);\n    ConnEnd srcPt194(Point(1191.5, 755), 2);\n    connRef194->setSourceEndpoint(srcPt194);\n    ConnEnd dstPt194(Point(1191.5, 883), 15);\n    connRef194->setDestEndpoint(dstPt194);\n    connRef194->setRoutingType((ConnType)2);\n\n    ConnRef *connRef195 = new ConnRef(router, 195);\n    ConnEnd srcPt195(Point(1191.5, 463), 1);\n    connRef195->setSourceEndpoint(srcPt195);\n    ConnEnd dstPt195(Point(1191.5, 280), 15);\n    connRef195->setDestEndpoint(dstPt195);\n    connRef195->setRoutingType((ConnType)2);\n\n    ConnRef *connRef196 = new ConnRef(router, 196);\n    ConnEnd srcPt196(Point(1191.5, 493), 2);\n    connRef196->setSourceEndpoint(srcPt196);\n    ConnEnd dstPt196(Point(1191.5, 584), 15);\n    connRef196->setDestEndpoint(dstPt196);\n    connRef196->setRoutingType((ConnType)2);\n\n    ConnRef *connRef197 = new ConnRef(router, 197);\n    ConnEnd srcPt197(Point(903.5, 883), 4);\n    connRef197->setSourceEndpoint(srcPt197);\n    ConnEnd dstPt197(Point(736.5, 883), 15);\n    connRef197->setDestEndpoint(dstPt197);\n    connRef197->setRoutingType((ConnType)2);\n\n    ConnRef *connRef198 = new ConnRef(router, 198);\n    ConnEnd srcPt198(Point(933.5, 883), 8);\n    connRef198->setSourceEndpoint(srcPt198);\n    ConnEnd dstPt198(Point(1191.5, 883), 15);\n    connRef198->setDestEndpoint(dstPt198);\n    connRef198->setRoutingType((ConnType)2);\n\n    ConnRef *connRef199 = new ConnRef(router, 199);\n    ConnEnd srcPt199(Point(491.5, 777), 8);\n    connRef199->setSourceEndpoint(srcPt199);\n    ConnEnd dstPt199(Point(736.5, 883), 15);\n    connRef199->setDestEndpoint(dstPt199);\n    connRef199->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints199(1);\n    checkpoints199[0] = Point(438.5, 883);\n    connRef199->setRoutingCheckpoints(checkpoints199);\n\n    ConnRef *connRef200 = new ConnRef(router, 200);\n    ConnEnd srcPt200(Point(491.5, 852), 8);\n    connRef200->setSourceEndpoint(srcPt200);\n    ConnEnd dstPt200(Point(736.5, 883), 15);\n    connRef200->setDestEndpoint(dstPt200);\n    connRef200->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints200(1);\n    checkpoints200[0] = Point(438.5, 883);\n    connRef200->setRoutingCheckpoints(checkpoints200);\n\n    ConnRef *connRef201 = new ConnRef(router, 201);\n    ConnEnd srcPt201(Point(783.5, 740), 4);\n    connRef201->setSourceEndpoint(srcPt201);\n    ConnEnd dstPt201(Point(736.5, 883), 15);\n    connRef201->setDestEndpoint(dstPt201);\n    connRef201->setRoutingType((ConnType)2);\n\n    ConnRef *connRef202 = new ConnRef(router, 202);\n    ConnEnd srcPt202(Point(813.5, 740), 8);\n    connRef202->setSourceEndpoint(srcPt202);\n    ConnEnd dstPt202(Point(1191.5, 584), 15);\n    connRef202->setDestEndpoint(dstPt202);\n    connRef202->setRoutingType((ConnType)2);\n\n    ConnRef *connRef203 = new ConnRef(router, 203);\n    ConnEnd srcPt203(Point(643.5, 755), 2);\n    connRef203->setSourceEndpoint(srcPt203);\n    ConnEnd dstPt203(Point(736.5, 883), 15);\n    connRef203->setDestEndpoint(dstPt203);\n    connRef203->setRoutingType((ConnType)2);\n\n    ConnRef *connRef204 = new ConnRef(router, 204);\n    ConnEnd srcPt204(Point(643.5, 725), 1);\n    connRef204->setSourceEndpoint(srcPt204);\n    ConnEnd dstPt204(Point(1191.5, 584), 15);\n    connRef204->setDestEndpoint(dstPt204);\n    connRef204->setRoutingType((ConnType)2);\n\n    ConnRef *connRef205 = new ConnRef(router, 205);\n    ConnEnd srcPt205(Point(286.5, 725), 1);\n    connRef205->setSourceEndpoint(srcPt205);\n    ConnEnd dstPt205(Point(286.5, 584), 15);\n    connRef205->setDestEndpoint(dstPt205);\n    connRef205->setRoutingType((ConnType)2);\n\n    ConnRef *connRef206 = new ConnRef(router, 206);\n    ConnEnd srcPt206(Point(286.5, 755), 2);\n    connRef206->setSourceEndpoint(srcPt206);\n    ConnEnd dstPt206(Point(286.5, 883), 15);\n    connRef206->setDestEndpoint(dstPt206);\n    connRef206->setRoutingType((ConnType)2);\n\n    ConnRef *connRef207 = new ConnRef(router, 207);\n    ConnEnd srcPt207(Point(722.5, 478), 8);\n    connRef207->setSourceEndpoint(srcPt207);\n    ConnEnd dstPt207(Point(1191.5, 584), 15);\n    connRef207->setDestEndpoint(dstPt207);\n    connRef207->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints207(1);\n    checkpoints207[0] = Point(669.5, 584);\n    connRef207->setRoutingCheckpoints(checkpoints207);\n\n    ConnRef *connRef208 = new ConnRef(router, 208);\n    ConnEnd srcPt208(Point(722.5, 553), 8);\n    connRef208->setSourceEndpoint(srcPt208);\n    ConnEnd dstPt208(Point(1191.5, 584), 15);\n    connRef208->setDestEndpoint(dstPt208);\n    connRef208->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints208(1);\n    checkpoints208[0] = Point(669.5, 584);\n    connRef208->setRoutingCheckpoints(checkpoints208);\n\n    ConnRef *connRef209 = new ConnRef(router, 209);\n    ConnEnd srcPt209(Point(692.5, 403), 4);\n    connRef209->setSourceEndpoint(srcPt209);\n    ConnEnd dstPt209(Point(286.5, 584), 15);\n    connRef209->setDestEndpoint(dstPt209);\n    connRef209->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints209(1);\n    checkpoints209[0] = Point(745.5, 584);\n    connRef209->setRoutingCheckpoints(checkpoints209);\n\n    ConnRef *connRef210 = new ConnRef(router, 210);\n    ConnEnd srcPt210(Point(752.5, 341), 4);\n    connRef210->setSourceEndpoint(srcPt210);\n    ConnEnd dstPt210(Point(286.5, 584), 15);\n    connRef210->setDestEndpoint(dstPt210);\n    connRef210->setRoutingType((ConnType)2);\n\n    ConnRef *connRef211 = new ConnRef(router, 211);\n    ConnEnd srcPt211(Point(752.5, 239), 4);\n    connRef211->setSourceEndpoint(srcPt211);\n    ConnEnd dstPt211(Point(286.5, 584), 15);\n    connRef211->setDestEndpoint(dstPt211);\n    connRef211->setRoutingType((ConnType)2);\n\n    ConnRef *connRef212 = new ConnRef(router, 212);\n    ConnEnd srcPt212(Point(507.5, 2312.46), 8);\n    connRef212->setSourceEndpoint(srcPt212);\n    ConnEnd dstPt212(Point(674.5, 2312.46), 15);\n    connRef212->setDestEndpoint(dstPt212);\n    connRef212->setRoutingType((ConnType)2);\n\n    ConnRef *connRef213 = new ConnRef(router, 213);\n    ConnEnd srcPt213(Point(1191.5, 1584.42), 2);\n    connRef213->setSourceEndpoint(srcPt213);\n    ConnEnd dstPt213(Point(1191.5, 1655.42), 15);\n    connRef213->setDestEndpoint(dstPt213);\n    connRef213->setRoutingType((ConnType)2);\n\n    ConnRef *connRef214 = new ConnRef(router, 214);\n    ConnEnd srcPt214(Point(1191.5, 1554.42), 1);\n    connRef214->setSourceEndpoint(srcPt214);\n    ConnEnd dstPt214(Point(1191.5, 1455.42), 15);\n    connRef214->setDestEndpoint(dstPt214);\n    connRef214->setRoutingType((ConnType)2);\n\n    ConnRef *connRef215 = new ConnRef(router, 215);\n    ConnEnd srcPt215(Point(722.5, 615), 8);\n    connRef215->setSourceEndpoint(srcPt215);\n    ConnEnd dstPt215(Point(1191.5, 584), 15);\n    connRef215->setDestEndpoint(dstPt215);\n    connRef215->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints215(1);\n    checkpoints215[0] = Point(669.5, 584);\n    connRef215->setRoutingCheckpoints(checkpoints215);\n\n    ConnRef *connRef216 = new ConnRef(router, 216);\n    ConnEnd srcPt216(Point(491.5, 914), 8);\n    connRef216->setSourceEndpoint(srcPt216);\n    ConnEnd dstPt216(Point(736.5, 883), 15);\n    connRef216->setDestEndpoint(dstPt216);\n    connRef216->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints216(1);\n    checkpoints216[0] = Point(438.5, 883);\n    connRef216->setRoutingCheckpoints(checkpoints216);\n\n    ConnRef *connRef217 = new ConnRef(router, 217);\n    ConnEnd srcPt217(Point(301.5, 1076), 8);\n    connRef217->setSourceEndpoint(srcPt217);\n    ConnEnd dstPt217(Point(406.5, 1076), 15);\n    connRef217->setDestEndpoint(dstPt217);\n    connRef217->setRoutingType((ConnType)2);\n\n    ConnRef *connRef218 = new ConnRef(router, 218);\n    ConnEnd srcPt218(Point(301.5, 1178), 8);\n    connRef218->setSourceEndpoint(srcPt218);\n    ConnEnd dstPt218(Point(406.5, 1178), 15);\n    connRef218->setDestEndpoint(dstPt218);\n    connRef218->setRoutingType((ConnType)2);\n\n    ConnRef *connRef219 = new ConnRef(router, 219);\n    ConnEnd srcPt219(Point(569.5, 1076), 8);\n    connRef219->setSourceEndpoint(srcPt219);\n    ConnEnd dstPt219(Point(736.5, 883), 15);\n    connRef219->setDestEndpoint(dstPt219);\n    connRef219->setRoutingType((ConnType)2);\n\n    ConnRef *connRef220 = new ConnRef(router, 220);\n    ConnEnd srcPt220(Point(569.5, 1178), 8);\n    connRef220->setSourceEndpoint(srcPt220);\n    ConnEnd dstPt220(Point(736.5, 883), 15);\n    connRef220->setDestEndpoint(dstPt220);\n    connRef220->setRoutingType((ConnType)2);\n\n    ConnRef *connRef221 = new ConnRef(router, 221);\n    ConnEnd srcPt221(Point(1401.5, 550.5), 15);\n    connRef221->setSourceEndpoint(srcPt221);\n    ConnEnd dstPt221(Point(1342.5, 550.5), 8);\n    connRef221->setDestEndpoint(dstPt221);\n    connRef221->setRoutingType((ConnType)2);\n\n    ConnRef *connRef222 = new ConnRef(router, 222);\n    ConnEnd srcPt222(Point(286.5, 584), 15);\n    connRef222->setSourceEndpoint(srcPt222);\n    ConnEnd dstPt222(Point(692.5, 615), 4);\n    connRef222->setDestEndpoint(dstPt222);\n    connRef222->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints222(1);\n    checkpoints222[0] = Point(745.5, 584);\n    connRef222->setRoutingCheckpoints(checkpoints222);\n\n    ConnRef *connRef223 = new ConnRef(router, 223);\n    ConnEnd srcPt223(Point(286.5, 584), 15);\n    connRef223->setSourceEndpoint(srcPt223);\n    ConnEnd dstPt223(Point(692.5, 690), 4);\n    connRef223->setDestEndpoint(dstPt223);\n    connRef223->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints223(1);\n    checkpoints223[0] = Point(745.5, 584);\n    connRef223->setRoutingCheckpoints(checkpoints223);\n\n    ConnRef *connRef224 = new ConnRef(router, 224);\n    ConnEnd srcPt224(Point(286.5, 883), 15);\n    connRef224->setSourceEndpoint(srcPt224);\n    ConnEnd dstPt224(Point(461.5, 914), 4);\n    connRef224->setDestEndpoint(dstPt224);\n    connRef224->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints224(1);\n    checkpoints224[0] = Point(514.5, 883);\n    connRef224->setRoutingCheckpoints(checkpoints224);\n\n    ConnRef *connRef225 = new ConnRef(router, 225);\n    ConnEnd srcPt225(Point(461.5, 989), 4);\n    connRef225->setSourceEndpoint(srcPt225);\n    ConnEnd dstPt225(Point(286.5, 883), 15);\n    connRef225->setDestEndpoint(dstPt225);\n    connRef225->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints225(1);\n    checkpoints225[0] = Point(514.5, 883);\n    connRef225->setRoutingCheckpoints(checkpoints225);\n\n    ConnRef *connRef226 = new ConnRef(router, 226);\n    ConnEnd srcPt226(Point(491.5, 989), 8);\n    connRef226->setSourceEndpoint(srcPt226);\n    ConnEnd dstPt226(Point(736.5, 883), 15);\n    connRef226->setDestEndpoint(dstPt226);\n    connRef226->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints226(1);\n    checkpoints226[0] = Point(438.5, 883);\n    connRef226->setRoutingCheckpoints(checkpoints226);\n\n    ConnRef *connRef227 = new ConnRef(router, 227);\n    ConnEnd srcPt227(Point(1191.5, 883), 15);\n    connRef227->setSourceEndpoint(srcPt227);\n    ConnEnd dstPt227(Point(1313.5, 1048.75), 1);\n    connRef227->setDestEndpoint(dstPt227);\n    connRef227->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints227(1);\n    checkpoints227[0] = Point(1191.5, 1093.75);\n    connRef227->setRoutingCheckpoints(checkpoints227);\n\n    ConnRef *connRef228 = new ConnRef(router, 228);\n    ConnEnd srcPt228(Point(714.439, 1872.42), 8);\n    connRef228->setSourceEndpoint(srcPt228);\n    ConnEnd dstPt228(Point(1191.5, 1903.42), 15);\n    connRef228->setDestEndpoint(dstPt228);\n    connRef228->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints228(1);\n    checkpoints228[0] = Point(737.439, 1903.42);\n    connRef228->setRoutingCheckpoints(checkpoints228);\n\n    ConnRef *connRef229 = new ConnRef(router, 229);\n    ConnEnd srcPt229(Point(1240.5, 1522.42), 2);\n    connRef229->setSourceEndpoint(srcPt229);\n    ConnEnd dstPt229(Point(1191.5, 1655.42), 15);\n    connRef229->setDestEndpoint(dstPt229);\n    connRef229->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints229(1);\n    checkpoints229[0] = Point(1265.5, 1537.42);\n    connRef229->setRoutingCheckpoints(checkpoints229);\n\n    ConnRef *connRef230 = new ConnRef(router, 230);\n    ConnEnd srcPt230(Point(1331.5, 1522.42), 2);\n    connRef230->setSourceEndpoint(srcPt230);\n    ConnEnd dstPt230(Point(1191.5, 1655.42), 15);\n    connRef230->setDestEndpoint(dstPt230);\n    connRef230->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints230(1);\n    checkpoints230[0] = Point(1265.5, 1537.42);\n    connRef230->setRoutingCheckpoints(checkpoints230);\n\n    ConnRef *connRef231 = new ConnRef(router, 231);\n    ConnEnd srcPt231(Point(1422.5, 1522.42), 2);\n    connRef231->setSourceEndpoint(srcPt231);\n    ConnEnd dstPt231(Point(1191.5, 1655.42), 15);\n    connRef231->setDestEndpoint(dstPt231);\n    connRef231->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints231(1);\n    checkpoints231[0] = Point(1265.5, 1537.42);\n    connRef231->setRoutingCheckpoints(checkpoints231);\n\n    ConnRef *connRef232 = new ConnRef(router, 232);\n    ConnEnd srcPt232(Point(1222.5, 1358.42), 2);\n    connRef232->setSourceEndpoint(srcPt232);\n    ConnEnd dstPt232(Point(1191.5, 1455.42), 15);\n    connRef232->setDestEndpoint(dstPt232);\n    connRef232->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints232(1);\n    checkpoints232[0] = Point(1191.5, 1373.42);\n    connRef232->setRoutingCheckpoints(checkpoints232);\n\n    ConnRef *connRef233 = new ConnRef(router, 233);\n    ConnEnd srcPt233(Point(1115.5, 1455.42), 8);\n    connRef233->setSourceEndpoint(srcPt233);\n    ConnEnd dstPt233(Point(1191.5, 1455.42), 15);\n    connRef233->setDestEndpoint(dstPt233);\n    connRef233->setRoutingType((ConnType)2);\n\n    ConnRef *connRef234 = new ConnRef(router, 234);\n    ConnEnd srcPt234(Point(1104.5, 2273.79), 8);\n    connRef234->setSourceEndpoint(srcPt234);\n    ConnEnd dstPt234(Point(1327.5, 2379.79), 15);\n    connRef234->setDestEndpoint(dstPt234);\n    connRef234->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints234(1);\n    checkpoints234[0] = Point(1127.5, 2379.79);\n    connRef234->setRoutingCheckpoints(checkpoints234);\n\n    ConnRef *connRef235 = new ConnRef(router, 235);\n    ConnEnd srcPt235(Point(1104.5, 2348.79), 8);\n    connRef235->setSourceEndpoint(srcPt235);\n    ConnEnd dstPt235(Point(1327.5, 2379.79), 15);\n    connRef235->setDestEndpoint(dstPt235);\n    connRef235->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints235(1);\n    checkpoints235[0] = Point(1127.5, 2379.79);\n    connRef235->setRoutingCheckpoints(checkpoints235);\n\n    ConnRef *connRef236 = new ConnRef(router, 236);\n    ConnEnd srcPt236(Point(1104.5, 2410.79), 8);\n    connRef236->setSourceEndpoint(srcPt236);\n    ConnEnd dstPt236(Point(1327.5, 2379.79), 15);\n    connRef236->setDestEndpoint(dstPt236);\n    connRef236->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints236(1);\n    checkpoints236[0] = Point(1127.5, 2379.79);\n    connRef236->setRoutingCheckpoints(checkpoints236);\n\n    ConnRef *connRef237 = new ConnRef(router, 237);\n    ConnEnd srcPt237(Point(1104.5, 2485.79), 8);\n    connRef237->setSourceEndpoint(srcPt237);\n    ConnEnd dstPt237(Point(1327.5, 2379.79), 15);\n    connRef237->setDestEndpoint(dstPt237);\n    connRef237->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints237(1);\n    checkpoints237[0] = Point(1127.5, 2379.79);\n    connRef237->setRoutingCheckpoints(checkpoints237);\n\n    ConnRef *connRef238 = new ConnRef(router, 238);\n    ConnEnd srcPt238(Point(569.5, 2040.42), 8);\n    connRef238->setSourceEndpoint(srcPt238);\n    ConnEnd dstPt238(Point(1191.5, 2169.42), 15);\n    connRef238->setDestEndpoint(dstPt238);\n    connRef238->setRoutingType((ConnType)2);\n\n    ConnRef *connRef239 = new ConnRef(router, 239);\n    ConnEnd srcPt239(Point(829.5, 2169.42), 15);\n    connRef239->setSourceEndpoint(srcPt239);\n    ConnEnd dstPt239(Point(829.5, 2302.79), 1);\n    connRef239->setDestEndpoint(dstPt239);\n    connRef239->setRoutingType((ConnType)2);\n\n    ConnRef *connRef240 = new ConnRef(router, 240);\n    ConnEnd srcPt240(Point(539.5, 2040.42), 4);\n    connRef240->setSourceEndpoint(srcPt240);\n    ConnEnd dstPt240(Point(251.5, 2169.42), 15);\n    connRef240->setDestEndpoint(dstPt240);\n    connRef240->setRoutingType((ConnType)2);\n\n    ConnRef *connRef241 = new ConnRef(router, 241);\n    ConnEnd srcPt241(Point(1074.5, 2410.79), 4);\n    connRef241->setSourceEndpoint(srcPt241);\n    ConnEnd dstPt241(Point(829.5, 2379.79), 15);\n    connRef241->setDestEndpoint(dstPt241);\n    connRef241->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints241(1);\n    checkpoints241[0] = Point(1051.5, 2379.79);\n    connRef241->setRoutingCheckpoints(checkpoints241);\n\n    ConnRef *connRef242 = new ConnRef(router, 242);\n    ConnEnd srcPt242(Point(1074.5, 2485.79), 4);\n    connRef242->setSourceEndpoint(srcPt242);\n    ConnEnd dstPt242(Point(829.5, 2379.79), 15);\n    connRef242->setDestEndpoint(dstPt242);\n    connRef242->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints242(1);\n    checkpoints242[0] = Point(1051.5, 2379.79);\n    connRef242->setRoutingCheckpoints(checkpoints242);\n\n    ConnRef *connRef243 = new ConnRef(router, 243);\n    ConnEnd srcPt243(Point(477.5, 2312.46), 4);\n    connRef243->setSourceEndpoint(srcPt243);\n    ConnEnd dstPt243(Point(375.5, 2312.46), 15);\n    connRef243->setDestEndpoint(dstPt243);\n    connRef243->setRoutingType((ConnType)2);\n\n    ConnRef *connRef244 = new ConnRef(router, 244);\n    ConnEnd srcPt244(Point(1191.5, 1115.75), 15);\n    connRef244->setSourceEndpoint(srcPt244);\n    ConnEnd dstPt244(Point(1160.5, 1078.75), 2);\n    connRef244->setDestEndpoint(dstPt244);\n    connRef244->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints244(1);\n    checkpoints244[0] = Point(1191.5, 1033.75);\n    connRef244->setRoutingCheckpoints(checkpoints244);\n\n    ConnRef *connRef245 = new ConnRef(router, 245);\n    ConnEnd srcPt245(Point(216.5, 1076), 15);\n    connRef245->setSourceEndpoint(srcPt245);\n    ConnEnd dstPt245(Point(271.5, 1076), 4);\n    connRef245->setDestEndpoint(dstPt245);\n    connRef245->setRoutingType((ConnType)2);\n\n    ConnRef *connRef246 = new ConnRef(router, 246);\n    ConnEnd srcPt246(Point(406.5, 1076), 15);\n    connRef246->setSourceEndpoint(srcPt246);\n    ConnEnd dstPt246(Point(539.5, 1076), 4);\n    connRef246->setDestEndpoint(dstPt246);\n    connRef246->setRoutingType((ConnType)2);\n\n    ConnRef *connRef247 = new ConnRef(router, 247);\n    ConnEnd srcPt247(Point(406.5, 1178), 15);\n    connRef247->setSourceEndpoint(srcPt247);\n    ConnEnd dstPt247(Point(539.5, 1178), 4);\n    connRef247->setDestEndpoint(dstPt247);\n    connRef247->setRoutingType((ConnType)2);\n\n    ConnRef *connRef248 = new ConnRef(router, 248);\n    ConnEnd srcPt248(Point(216.5, 1178), 15);\n    connRef248->setSourceEndpoint(srcPt248);\n    ConnEnd dstPt248(Point(271.5, 1178), 4);\n    connRef248->setDestEndpoint(dstPt248);\n    connRef248->setRoutingType((ConnType)2);\n\n    ConnRef *connRef249 = new ConnRef(router, 249);\n    ConnEnd srcPt249(Point(714.439, 1934.42), 8);\n    connRef249->setSourceEndpoint(srcPt249);\n    ConnEnd dstPt249(Point(1191.5, 1903.42), 15);\n    connRef249->setDestEndpoint(dstPt249);\n    connRef249->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints249(1);\n    checkpoints249[0] = Point(737.439, 1903.42);\n    connRef249->setRoutingCheckpoints(checkpoints249);\n\n    ConnRef *connRef250 = new ConnRef(router, 250);\n    ConnEnd srcPt250(Point(251.5, 1903.42), 15);\n    connRef250->setSourceEndpoint(srcPt250);\n    ConnEnd dstPt250(Point(684.439, 1934.42), 4);\n    connRef250->setDestEndpoint(dstPt250);\n    connRef250->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints250(1);\n    checkpoints250[0] = Point(661.439, 1903.42);\n    connRef250->setRoutingCheckpoints(checkpoints250);\n\n    ConnRef *connRef251 = new ConnRef(router, 251);\n    ConnEnd srcPt251(Point(251.5, 1903.42), 15);\n    connRef251->setSourceEndpoint(srcPt251);\n    ConnEnd dstPt251(Point(684.439, 1872.42), 4);\n    connRef251->setDestEndpoint(dstPt251);\n    connRef251->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints251(1);\n    checkpoints251[0] = Point(661.439, 1903.42);\n    connRef251->setRoutingCheckpoints(checkpoints251);\n\n    ConnRef *connRef252 = new ConnRef(router, 252);\n    ConnEnd srcPt252(Point(1222.5, 1328.42), 1);\n    connRef252->setSourceEndpoint(srcPt252);\n    ConnEnd dstPt252(Point(1191.5, 1291.42), 15);\n    connRef252->setDestEndpoint(dstPt252);\n    connRef252->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints252(1);\n    checkpoints252[0] = Point(1191.5, 1313.42);\n    connRef252->setRoutingCheckpoints(checkpoints252);\n\n    ConnRef *connRef253 = new ConnRef(router, 253);\n    ConnEnd srcPt253(Point(1085.5, 1649.42), 4);\n    connRef253->setSourceEndpoint(srcPt253);\n    ConnEnd dstPt253(Point(949.5, 1569.42), 15);\n    connRef253->setDestEndpoint(dstPt253);\n    connRef253->setRoutingType((ConnType)2);\n\n    ConnRef *connRef254 = new ConnRef(router, 254);\n    ConnEnd srcPt254(Point(1115.5, 1649.42), 8);\n    connRef254->setSourceEndpoint(srcPt254);\n    ConnEnd dstPt254(Point(1191.5, 1655.42), 15);\n    connRef254->setDestEndpoint(dstPt254);\n    connRef254->setRoutingType((ConnType)2);\n\n    ConnRef *connRef255 = new ConnRef(router, 255);\n    ConnEnd srcPt255(Point(1085.5, 1455.42), 4);\n    connRef255->setSourceEndpoint(srcPt255);\n    ConnEnd dstPt255(Point(949.5, 1569.42), 15);\n    connRef255->setDestEndpoint(dstPt255);\n    connRef255->setRoutingType((ConnType)2);\n#endif\n\n    ConnRef *connRef256 = new ConnRef(router, 256);\n    ConnEnd srcPt256(Point(1191.5, 1291.42), 15);\n    connRef256->setSourceEndpoint(srcPt256);\n    ConnEnd dstPt256(Point(1240.5, 1492.42), 1);\n    connRef256->setDestEndpoint(dstPt256);\n    connRef256->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints256(1);\n    checkpoints256[0] = Point(1331.5, 1477.42);\n    connRef256->setRoutingCheckpoints(checkpoints256);\n\n    ConnRef *connRef257 = new ConnRef(router, 257);\n    ConnEnd srcPt257(Point(1191.5, 1291.42), 15);\n    connRef257->setSourceEndpoint(srcPt257);\n    ConnEnd dstPt257(Point(1331.5, 1492.42), 1);\n    connRef257->setDestEndpoint(dstPt257);\n    connRef257->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints257(1);\n    checkpoints257[0] = Point(1331.5, 1477.42);\n    connRef257->setRoutingCheckpoints(checkpoints256);\n\n    ConnRef *connRef258 = new ConnRef(router, 258);\n    ConnEnd srcPt258(Point(1191.5, 1291.42), 15);\n    connRef258->setSourceEndpoint(srcPt258);\n    ConnEnd dstPt258(Point(1422.5, 1492.42), 1);\n    connRef258->setDestEndpoint(dstPt258);\n    connRef258->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints258(1);\n    checkpoints258[0] = Point(1331.5, 1477.42);\n    connRef258->setRoutingCheckpoints(checkpoints256);\n\n#ifdef ALL\n    ConnRef *connRef259 = new ConnRef(router, 259);\n    ConnEnd srcPt259(Point(160.5, 2216.42), 1);\n    connRef259->setSourceEndpoint(srcPt259);\n    ConnEnd dstPt259(Point(251.5, 2169.42), 15);\n    connRef259->setDestEndpoint(dstPt259);\n    connRef259->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints259(1);\n    checkpoints259[0] = Point(226.5, 2201.42);\n    connRef259->setRoutingCheckpoints(checkpoints259);\n\n    ConnRef *connRef260 = new ConnRef(router, 260);\n    ConnEnd srcPt260(Point(1313.5, 1078.75), 2);\n    connRef260->setSourceEndpoint(srcPt260);\n    ConnEnd dstPt260(Point(1191.5, 1115.75), 15);\n    connRef260->setDestEndpoint(dstPt260);\n    connRef260->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints260(1);\n    checkpoints260[0] = Point(1191.5, 1033.75);\n    connRef260->setRoutingCheckpoints(checkpoints260);\n\n    ConnRef *connRef261 = new ConnRef(router, 261);\n    ConnEnd srcPt261(Point(722.5, 690), 8);\n    connRef261->setSourceEndpoint(srcPt261);\n    ConnEnd dstPt261(Point(1191.5, 584), 15);\n    connRef261->setDestEndpoint(dstPt261);\n    connRef261->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints261(1);\n    checkpoints261[0] = Point(669.5, 584);\n    connRef261->setRoutingCheckpoints(checkpoints261);\n\n    ConnRef *connRef262 = new ConnRef(router, 262);\n    ConnEnd srcPt262(Point(829.5, 2065.42), 15);\n    connRef262->setSourceEndpoint(srcPt262);\n    ConnEnd dstPt262(Point(1026.5, 2179.79), 8);\n    connRef262->setDestEndpoint(dstPt262);\n    connRef262->setRoutingType((ConnType)2);\n\n    ConnRef *connRef263 = new ConnRef(router, 263);\n    ConnEnd srcPt263(Point(829.5, 2065.42), 15);\n    connRef263->setSourceEndpoint(srcPt263);\n    ConnEnd dstPt263(Point(1011.5, 2083.42), 1);\n    connRef263->setDestEndpoint(dstPt263);\n    connRef263->setRoutingType((ConnType)2);\n\n    ConnRef *connRef264 = new ConnRef(router, 264);\n    ConnEnd srcPt264(Point(1249.5, 1196.75), 4);\n    connRef264->setSourceEndpoint(srcPt264);\n    ConnEnd dstPt264(Point(1191.5, 1196.75), 8);\n    connRef264->setDestEndpoint(dstPt264);\n    connRef264->setRoutingType((ConnType)2);\n\n    ConnRef *connRef265 = new ConnRef(router, 265);\n    ConnEnd srcPt265(Point(769.5, 2298.79), 2);\n    connRef265->setSourceEndpoint(srcPt265);\n    ConnEnd dstPt265(Point(769.5, 2348.79), 1);\n    connRef265->setDestEndpoint(dstPt265);\n    connRef265->setRoutingType((ConnType)2);\n\n    ConnRef *connRef266 = new ConnRef(router, 266);\n    ConnEnd srcPt266(Point(193.5, 2231.42), 8);\n    connRef266->setSourceEndpoint(srcPt266);\n    ConnEnd dstPt266(Point(251.5, 2231.42), 4);\n    connRef266->setDestEndpoint(dstPt266);\n    connRef266->setRoutingType((ConnType)2);\n\n    ConnRef *connRef267 = new ConnRef(router, 267);\n    ConnEnd srcPt267(Point(769.5, 2460.79), 1);\n    connRef267->setSourceEndpoint(srcPt267);\n    ConnEnd dstPt267(Point(769.5, 2410.79), 2);\n    connRef267->setDestEndpoint(dstPt267);\n    connRef267->setRoutingType((ConnType)2);\n\n    ConnRef *connRef268 = new ConnRef(router, 268);\n    ConnEnd srcPt268(Point(887.5, 2317.79), 4);\n    connRef268->setSourceEndpoint(srcPt268);\n    ConnEnd dstPt268(Point(829.5, 2317.79), 8);\n    connRef268->setDestEndpoint(dstPt268);\n    connRef268->setRoutingType((ConnType)2);\n\n    ConnRef *connRef269 = new ConnRef(router, 269);\n    ConnEnd srcPt269(Point(1089.5, 2223.79), 2);\n    connRef269->setSourceEndpoint(srcPt269);\n    ConnEnd dstPt269(Point(1089.5, 2273.79), 1);\n    connRef269->setDestEndpoint(dstPt269);\n    connRef269->setRoutingType((ConnType)2);\n\n    ConnRef *connRef270 = new ConnRef(router, 270);\n    ConnEnd srcPt270(Point(1089.5, 2298.79), 2);\n    connRef270->setSourceEndpoint(srcPt270);\n    ConnEnd dstPt270(Point(1089.5, 2348.79), 1);\n    connRef270->setDestEndpoint(dstPt270);\n    connRef270->setRoutingType((ConnType)2);\n\n    ConnRef *connRef271 = new ConnRef(router, 271);\n    ConnEnd srcPt271(Point(1011.5, 2229.79), 1);\n    connRef271->setSourceEndpoint(srcPt271);\n    ConnEnd dstPt271(Point(1011.5, 2179.79), 2);\n    connRef271->setDestEndpoint(dstPt271);\n    connRef271->setRoutingType((ConnType)2);\n\n    ConnRef *connRef272 = new ConnRef(router, 272);\n    ConnEnd srcPt272(Point(1069.5, 2098.42), 4);\n    connRef272->setSourceEndpoint(srcPt272);\n    ConnEnd dstPt272(Point(1011.5, 2098.42), 8);\n    connRef272->setDestEndpoint(dstPt272);\n    connRef272->setRoutingType((ConnType)2);\n\n    ConnRef *connRef273 = new ConnRef(router, 273);\n    ConnEnd srcPt273(Point(705.5, 2119.42), 2);\n    connRef273->setSourceEndpoint(srcPt273);\n    ConnEnd dstPt273(Point(705.5, 2169.42), 1);\n    connRef273->setDestEndpoint(dstPt273);\n    connRef273->setRoutingType((ConnType)2);\n\n    ConnRef *connRef274 = new ConnRef(router, 274);\n    ConnEnd srcPt274(Point(375.5, 2119.42), 2);\n    connRef274->setSourceEndpoint(srcPt274);\n    ConnEnd dstPt274(Point(375.5, 2169.42), 1);\n    connRef274->setDestEndpoint(dstPt274);\n    connRef274->setRoutingType((ConnType)2);\n\n    ConnRef *connRef275 = new ConnRef(router, 275);\n    ConnEnd srcPt275(Point(1358.5, 2119.42), 2);\n    connRef275->setSourceEndpoint(srcPt275);\n    ConnEnd dstPt275(Point(1358.5, 2169.42), 1);\n    connRef275->setDestEndpoint(dstPt275);\n    connRef275->setRoutingType((ConnType)2);\n\n    ConnRef *connRef276 = new ConnRef(router, 276);\n    ConnEnd srcPt276(Point(1249.5, 1965.42), 4);\n    connRef276->setSourceEndpoint(srcPt276);\n    ConnEnd dstPt276(Point(1191.5, 1965.42), 8);\n    connRef276->setDestEndpoint(dstPt276);\n    connRef276->setRoutingType((ConnType)2);\n\n    ConnRef *connRef277 = new ConnRef(router, 277);\n    ConnEnd srcPt277(Point(1249.5, 1841.42), 4);\n    connRef277->setSourceEndpoint(srcPt277);\n    ConnEnd dstPt277(Point(1191.5, 1841.42), 8);\n    connRef277->setDestEndpoint(dstPt277);\n    connRef277->setRoutingType((ConnType)2);\n\n    ConnRef *connRef278 = new ConnRef(router, 278);\n    ConnEnd srcPt278(Point(1249.5, 1717.42), 4);\n    connRef278->setSourceEndpoint(srcPt278);\n    ConnEnd dstPt278(Point(1191.5, 1717.42), 8);\n    connRef278->setDestEndpoint(dstPt278);\n    connRef278->setRoutingType((ConnType)2);\n\n    ConnRef *connRef279 = new ConnRef(router, 279);\n    ConnEnd srcPt279(Point(1102.5, 1343.42), 8);\n    connRef279->setSourceEndpoint(srcPt279);\n    ConnEnd dstPt279(Point(1160.5, 1343.42), 4);\n    connRef279->setDestEndpoint(dstPt279);\n    connRef279->setRoutingType((ConnType)2);\n\n    ConnRef *connRef280 = new ConnRef(router, 280);\n    ConnEnd srcPt280(Point(980.5, 1241.42), 2);\n    connRef280->setSourceEndpoint(srcPt280);\n    ConnEnd dstPt280(Point(980.5, 1291.42), 1);\n    connRef280->setDestEndpoint(dstPt280);\n    connRef280->setRoutingType((ConnType)2);\n\n    ConnRef *connRef281 = new ConnRef(router, 281);\n    ConnEnd srcPt281(Point(1280.5, 1063.75), 4);\n    connRef281->setSourceEndpoint(srcPt281);\n    ConnEnd dstPt281(Point(1222.5, 1063.75), 8);\n    connRef281->setDestEndpoint(dstPt281);\n    connRef281->setRoutingType((ConnType)2);\n\n    ConnRef *connRef282 = new ConnRef(router, 282);\n    ConnEnd srcPt282(Point(1102.5, 1063.75), 8);\n    connRef282->setSourceEndpoint(srcPt282);\n    ConnEnd dstPt282(Point(1160.5, 1063.75), 4);\n    connRef282->setDestEndpoint(dstPt282);\n    connRef282->setRoutingType((ConnType)2);\n\n    ConnRef *connRef283 = new ConnRef(router, 283);\n    ConnEnd srcPt283(Point(1327.5, 500.5), 2);\n    connRef283->setSourceEndpoint(srcPt283);\n    ConnEnd dstPt283(Point(1327.5, 550.5), 1);\n    connRef283->setDestEndpoint(dstPt283);\n    connRef283->setRoutingType((ConnType)2);\n\n    ConnRef *connRef284 = new ConnRef(router, 284);\n    ConnEnd srcPt284(Point(1249.5, 740), 4);\n    connRef284->setSourceEndpoint(srcPt284);\n    ConnEnd dstPt284(Point(1191.5, 740), 8);\n    connRef284->setDestEndpoint(dstPt284);\n    connRef284->setRoutingType((ConnType)2);\n\n    ConnRef *connRef285 = new ConnRef(router, 285);\n    ConnEnd srcPt285(Point(1249.5, 478), 4);\n    connRef285->setSourceEndpoint(srcPt285);\n    ConnEnd dstPt285(Point(1191.5, 478), 8);\n    connRef285->setDestEndpoint(dstPt285);\n    connRef285->setRoutingType((ConnType)2);\n\n    ConnRef *connRef286 = new ConnRef(router, 286);\n    ConnEnd srcPt286(Point(918.5, 833), 2);\n    connRef286->setSourceEndpoint(srcPt286);\n    ConnEnd dstPt286(Point(918.5, 883), 1);\n    connRef286->setDestEndpoint(dstPt286);\n    connRef286->setRoutingType((ConnType)2);\n\n    ConnRef *connRef287 = new ConnRef(router, 287);\n    ConnEnd srcPt287(Point(476.5, 727), 2);\n    connRef287->setSourceEndpoint(srcPt287);\n    ConnEnd dstPt287(Point(476.5, 777), 1);\n    connRef287->setDestEndpoint(dstPt287);\n    connRef287->setRoutingType((ConnType)2);\n\n    ConnRef *connRef288 = new ConnRef(router, 288);\n    ConnEnd srcPt288(Point(476.5, 802), 2);\n    connRef288->setSourceEndpoint(srcPt288);\n    ConnEnd dstPt288(Point(476.5, 852), 1);\n    connRef288->setDestEndpoint(dstPt288);\n    connRef288->setRoutingType((ConnType)2);\n\n    ConnRef *connRef289 = new ConnRef(router, 289);\n    ConnEnd srcPt289(Point(798.5, 690), 2);\n    connRef289->setSourceEndpoint(srcPt289);\n    ConnEnd dstPt289(Point(798.5, 740), 1);\n    connRef289->setDestEndpoint(dstPt289);\n    connRef289->setRoutingType((ConnType)2);\n\n    ConnRef *connRef290 = new ConnRef(router, 290);\n    ConnEnd srcPt290(Point(585.5, 740), 8);\n    connRef290->setSourceEndpoint(srcPt290);\n    ConnEnd dstPt290(Point(643.5, 740), 4);\n    connRef290->setDestEndpoint(dstPt290);\n    connRef290->setRoutingType((ConnType)2);\n\n    ConnRef *connRef291 = new ConnRef(router, 291);\n    ConnEnd srcPt291(Point(344.5, 740), 4);\n    connRef291->setSourceEndpoint(srcPt291);\n    ConnEnd dstPt291(Point(286.5, 740), 8);\n    connRef291->setDestEndpoint(dstPt291);\n    connRef291->setRoutingType((ConnType)2);\n\n    ConnRef *connRef292 = new ConnRef(router, 292);\n    ConnEnd srcPt292(Point(707.5, 428), 2);\n    connRef292->setSourceEndpoint(srcPt292);\n    ConnEnd dstPt292(Point(707.5, 478), 1);\n    connRef292->setDestEndpoint(dstPt292);\n    connRef292->setRoutingType((ConnType)2);\n\n    ConnRef *connRef293 = new ConnRef(router, 293);\n    ConnEnd srcPt293(Point(707.5, 503), 2);\n    connRef293->setSourceEndpoint(srcPt293);\n    ConnEnd dstPt293(Point(707.5, 553), 1);\n    connRef293->setDestEndpoint(dstPt293);\n    connRef293->setRoutingType((ConnType)2);\n\n    ConnRef *connRef294 = new ConnRef(router, 294);\n    ConnEnd srcPt294(Point(707.5, 353), 2);\n    connRef294->setSourceEndpoint(srcPt294);\n    ConnEnd dstPt294(Point(707.5, 403), 1);\n    connRef294->setDestEndpoint(dstPt294);\n    connRef294->setRoutingType((ConnType)2);\n\n    ConnRef *connRef295 = new ConnRef(router, 295);\n    ConnEnd srcPt295(Point(767.5, 291), 2);\n    connRef295->setSourceEndpoint(srcPt295);\n    ConnEnd dstPt295(Point(767.5, 341), 1);\n    connRef295->setDestEndpoint(dstPt295);\n    connRef295->setRoutingType((ConnType)2);\n\n    ConnRef *connRef296 = new ConnRef(router, 296);\n    ConnEnd srcPt296(Point(767.5, 189), 2);\n    connRef296->setSourceEndpoint(srcPt296);\n    ConnEnd dstPt296(Point(767.5, 239), 1);\n    connRef296->setDestEndpoint(dstPt296);\n    connRef296->setRoutingType((ConnType)2);\n\n    ConnRef *connRef297 = new ConnRef(router, 297);\n    ConnEnd srcPt297(Point(492.5, 2262.46), 2);\n    connRef297->setSourceEndpoint(srcPt297);\n    ConnEnd dstPt297(Point(492.5, 2312.46), 1);\n    connRef297->setDestEndpoint(dstPt297);\n    connRef297->setRoutingType((ConnType)2);\n\n    ConnRef *connRef298 = new ConnRef(router, 298);\n    ConnEnd srcPt298(Point(1249.5, 1569.42), 4);\n    connRef298->setSourceEndpoint(srcPt298);\n    ConnEnd dstPt298(Point(1191.5, 1569.42), 8);\n    connRef298->setDestEndpoint(dstPt298);\n    connRef298->setRoutingType((ConnType)2);\n\n    ConnRef *connRef299 = new ConnRef(router, 299);\n    ConnEnd srcPt299(Point(707.5, 665), 1);\n    connRef299->setSourceEndpoint(srcPt299);\n    ConnEnd dstPt299(Point(707.5, 615), 2);\n    connRef299->setDestEndpoint(dstPt299);\n    connRef299->setRoutingType((ConnType)2);\n\n    ConnRef *connRef300 = new ConnRef(router, 300);\n    ConnEnd srcPt300(Point(476.5, 964), 1);\n    connRef300->setSourceEndpoint(srcPt300);\n    ConnEnd dstPt300(Point(476.5, 914), 2);\n    connRef300->setDestEndpoint(dstPt300);\n    connRef300->setRoutingType((ConnType)2);\n\n    ConnRef *connRef301 = new ConnRef(router, 301);\n    ConnEnd srcPt301(Point(286.5, 1026), 2);\n    connRef301->setSourceEndpoint(srcPt301);\n    ConnEnd dstPt301(Point(286.5, 1076), 1);\n    connRef301->setDestEndpoint(dstPt301);\n    connRef301->setRoutingType((ConnType)2);\n\n    ConnRef *connRef302 = new ConnRef(router, 302);\n    ConnEnd srcPt302(Point(286.5, 1128), 2);\n    connRef302->setSourceEndpoint(srcPt302);\n    ConnEnd dstPt302(Point(286.5, 1178), 1);\n    connRef302->setDestEndpoint(dstPt302);\n    connRef302->setRoutingType((ConnType)2);\n\n    ConnRef *connRef303 = new ConnRef(router, 303);\n    ConnEnd srcPt303(Point(554.5, 1026), 2);\n    connRef303->setSourceEndpoint(srcPt303);\n    ConnEnd dstPt303(Point(554.5, 1076), 1);\n    connRef303->setDestEndpoint(dstPt303);\n    connRef303->setRoutingType((ConnType)2);\n\n    ConnRef *connRef304 = new ConnRef(router, 304);\n    ConnEnd srcPt304(Point(554.5, 1128), 2);\n    connRef304->setSourceEndpoint(srcPt304);\n    ConnEnd dstPt304(Point(554.5, 1178), 1);\n    connRef304->setDestEndpoint(dstPt304);\n    connRef304->setRoutingType((ConnType)2);\n\n    ConnRef *connRef305 = new ConnRef(router, 305);\n    ConnEnd srcPt305(Point(699.439, 1984.42), 1);\n    connRef305->setSourceEndpoint(srcPt305);\n    ConnEnd dstPt305(Point(699.439, 1934.42), 2);\n    connRef305->setDestEndpoint(dstPt305);\n    connRef305->setRoutingType((ConnType)2);\n\n    ConnRef *connRef306 = new ConnRef(router, 306);\n    ConnEnd srcPt306(Point(1089.5, 2460.79), 1);\n    connRef306->setSourceEndpoint(srcPt306);\n    ConnEnd dstPt306(Point(1089.5, 2410.79), 2);\n    connRef306->setDestEndpoint(dstPt306);\n    connRef306->setRoutingType((ConnType)2);\n\n    ConnRef *connRef307 = new ConnRef(router, 307);\n    ConnEnd srcPt307(Point(699.439, 1822.42), 2);\n    connRef307->setSourceEndpoint(srcPt307);\n    ConnEnd dstPt307(Point(699.439, 1872.42), 1);\n    connRef307->setDestEndpoint(dstPt307);\n    connRef307->setRoutingType((ConnType)2);\n\n    ConnRef *connRef308 = new ConnRef(router, 308);\n    ConnEnd srcPt308(Point(1280.5, 1343.42), 4);\n    connRef308->setSourceEndpoint(srcPt308);\n    ConnEnd dstPt308(Point(1222.5, 1343.42), 8);\n    connRef308->setDestEndpoint(dstPt308);\n    connRef308->setRoutingType((ConnType)2);\n\n    ConnRef *connRef309 = new ConnRef(router, 309);\n    ConnEnd srcPt309(Point(1298.5, 1507.42), 4);\n    connRef309->setSourceEndpoint(srcPt309);\n    ConnEnd dstPt309(Point(1240.5, 1507.42), 8);\n    connRef309->setDestEndpoint(dstPt309);\n    connRef309->setRoutingType((ConnType)2);\n\n    ConnRef *connRef310 = new ConnRef(router, 310);\n    ConnEnd srcPt310(Point(1389.5, 1507.42), 4);\n    connRef310->setSourceEndpoint(srcPt310);\n    ConnEnd dstPt310(Point(1331.5, 1507.42), 8);\n    connRef310->setDestEndpoint(dstPt310);\n    connRef310->setRoutingType((ConnType)2);\n\n    ConnRef *connRef311 = new ConnRef(router, 311);\n    ConnEnd srcPt311(Point(554.5, 1990.42), 2);\n    connRef311->setSourceEndpoint(srcPt311);\n    ConnEnd dstPt311(Point(554.5, 2040.42), 1);\n    connRef311->setDestEndpoint(dstPt311);\n    connRef311->setRoutingType((ConnType)2);\n\n    ConnRef *connRef312 = new ConnRef(router, 312);\n    ConnEnd srcPt312(Point(1480.5, 1507.42), 4);\n    connRef312->setSourceEndpoint(srcPt312);\n    ConnEnd dstPt312(Point(1422.5, 1507.42), 8);\n    connRef312->setDestEndpoint(dstPt312);\n    connRef312->setRoutingType((ConnType)2);\n\n    ConnRef *connRef313 = new ConnRef(router, 313);\n    ConnEnd srcPt313(Point(1100.5, 1599.42), 2);\n    connRef313->setSourceEndpoint(srcPt313);\n    ConnEnd dstPt313(Point(1100.5, 1649.42), 1);\n    connRef313->setDestEndpoint(dstPt313);\n    connRef313->setRoutingType((ConnType)2);\n\n    ConnRef *connRef314 = new ConnRef(router, 314);\n    ConnEnd srcPt314(Point(1100.5, 1405.42), 2);\n    connRef314->setSourceEndpoint(srcPt314);\n    ConnEnd dstPt314(Point(1100.5, 1455.42), 1);\n    connRef314->setDestEndpoint(dstPt314);\n    connRef314->setRoutingType((ConnType)2);\n\n    ConnRef *connRef315 = new ConnRef(router, 315);\n    ConnEnd srcPt315(Point(102.5, 2231.42), 8);\n    connRef315->setSourceEndpoint(srcPt315);\n    ConnEnd dstPt315(Point(160.5, 2231.42), 4);\n    connRef315->setDestEndpoint(dstPt315);\n    connRef315->setRoutingType((ConnType)2);\n\n    ConnRef *connRef316 = new ConnRef(router, 316);\n    ConnEnd srcPt316(Point(1371.5, 1063.75), 4);\n    connRef316->setSourceEndpoint(srcPt316);\n    ConnEnd dstPt316(Point(1313.5, 1063.75), 8);\n    connRef316->setDestEndpoint(dstPt316);\n    connRef316->setRoutingType((ConnType)2);\n\n    ConnRef *connRef317 = new ConnRef(router, 317);\n    ConnEnd srcPt317(Point(707.5, 740), 1);\n    connRef317->setSourceEndpoint(srcPt317);\n    ConnEnd dstPt317(Point(707.5, 690), 2);\n    connRef317->setDestEndpoint(dstPt317);\n    connRef317->setRoutingType((ConnType)2);\n\n    ConnRef *connRef318 = new ConnRef(router, 318);\n    ConnEnd srcPt318(Point(476.5, 1039), 1);\n    connRef318->setSourceEndpoint(srcPt318);\n    ConnEnd dstPt318(Point(476.5, 989), 2);\n    connRef318->setDestEndpoint(dstPt318);\n    connRef318->setRoutingType((ConnType)2);\n\n    ConnRef *connRef319 = new ConnRef(router, 319);\n    ConnEnd srcPt319(Point(1089.5, 2535.79), 1);\n    connRef319->setSourceEndpoint(srcPt319);\n    ConnEnd dstPt319(Point(1089.5, 2485.79), 2);\n    connRef319->setDestEndpoint(dstPt319);\n    connRef319->setRoutingType((ConnType)2);\n\n    ConnRef *connRef320 = new ConnRef(router, 320);\n    ConnEnd srcPt320(Point(251.5, 2169.42), 15);\n    connRef320->setSourceEndpoint(srcPt320);\n    ConnEnd dstPt320(Point(251.5, 2216.42), 1);\n    connRef320->setDestEndpoint(dstPt320);\n    connRef320->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints320(1);\n    checkpoints320[0] = Point(226.5, 2201.42);\n    connRef320->setRoutingCheckpoints(checkpoints320);\n\n    ConnRef *connRef321 = new ConnRef(router, 321);\n    ConnEnd srcPt321(Point(1191.5, 2169.42), 15);\n    connRef321->setSourceEndpoint(srcPt321);\n    ConnEnd dstPt321(Point(1026.5, 2179.79), 8);\n    connRef321->setDestEndpoint(dstPt321);\n    connRef321->setRoutingType((ConnType)2);\n\n    ConnRef *connRef322 = new ConnRef(router, 322);\n    ConnEnd srcPt322(Point(1191.5, 2169.42), 15);\n    connRef322->setSourceEndpoint(srcPt322);\n    ConnEnd dstPt322(Point(1011.5, 2083.42), 1);\n    connRef322->setDestEndpoint(dstPt322);\n    connRef322->setRoutingType((ConnType)2);\n\n    ConnRef *connRef323 = new ConnRef(router, 323);\n    ConnEnd srcPt323(Point(674.5, 2312.46), 15);\n    connRef323->setSourceEndpoint(srcPt323);\n    ConnEnd dstPt323(Point(720.5, 2169.42), 8);\n    connRef323->setDestEndpoint(dstPt323);\n    connRef323->setRoutingType((ConnType)2);\n\n    ConnRef *connRef324 = new ConnRef(router, 324);\n    ConnEnd srcPt324(Point(829.5, 2169.42), 15);\n    connRef324->setSourceEndpoint(srcPt324);\n    ConnEnd dstPt324(Point(720.5, 2169.42), 8);\n    connRef324->setDestEndpoint(dstPt324);\n    connRef324->setRoutingType((ConnType)2);\n\n    ConnRef *connRef325 = new ConnRef(router, 325);\n    ConnEnd srcPt325(Point(1191.5, 1903.42), 15);\n    connRef325->setSourceEndpoint(srcPt325);\n    ConnEnd dstPt325(Point(1191.5, 1950.42), 1);\n    connRef325->setDestEndpoint(dstPt325);\n    connRef325->setRoutingType((ConnType)2);\n\n    ConnRef *connRef326 = new ConnRef(router, 326);\n    ConnEnd srcPt326(Point(1191.5, 883), 15);\n    connRef326->setSourceEndpoint(srcPt326);\n    ConnEnd dstPt326(Point(1222.5, 1048.75), 1);\n    connRef326->setDestEndpoint(dstPt326);\n    connRef326->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints326(1);\n    checkpoints326[0] = Point(1191.5, 1093.75);\n    connRef326->setRoutingCheckpoints(checkpoints326);\n\n    ConnRef *connRef327 = new ConnRef(router, 327);\n    ConnEnd srcPt327(Point(286.5, 883), 15);\n    connRef327->setSourceEndpoint(srcPt327);\n    ConnEnd dstPt327(Point(461.5, 777), 4);\n    connRef327->setDestEndpoint(dstPt327);\n    connRef327->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints327(1);\n    checkpoints327[0] = Point(514.5, 883);\n    connRef327->setRoutingCheckpoints(checkpoints327);\n\n    ConnRef *connRef328 = new ConnRef(router, 328);\n    ConnEnd srcPt328(Point(286.5, 883), 15);\n    connRef328->setSourceEndpoint(srcPt328);\n    ConnEnd dstPt328(Point(461.5, 852), 4);\n    connRef328->setDestEndpoint(dstPt328);\n    connRef328->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints328(1);\n    checkpoints328[0] = Point(514.5, 883);\n    connRef328->setRoutingCheckpoints(checkpoints328);\n\n    ConnRef *connRef329 = new ConnRef(router, 329);\n    ConnEnd srcPt329(Point(286.5, 584), 15);\n    connRef329->setSourceEndpoint(srcPt329);\n    ConnEnd dstPt329(Point(692.5, 478), 4);\n    connRef329->setDestEndpoint(dstPt329);\n    connRef329->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints329(1);\n    checkpoints329[0] = Point(745.5, 584);\n    connRef329->setRoutingCheckpoints(checkpoints329);\n\n    ConnRef *connRef330 = new ConnRef(router, 330);\n    ConnEnd srcPt330(Point(286.5, 584), 15);\n    connRef330->setSourceEndpoint(srcPt330);\n    ConnEnd dstPt330(Point(692.5, 553), 4);\n    connRef330->setDestEndpoint(dstPt330);\n    connRef330->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints330(1);\n    checkpoints330[0] = Point(745.5, 584);\n    connRef330->setRoutingCheckpoints(checkpoints330);\n\n    ConnRef *connRef331 = new ConnRef(router, 331);\n    ConnEnd srcPt331(Point(1191.5, 584), 15);\n    connRef331->setSourceEndpoint(srcPt331);\n    ConnEnd dstPt331(Point(722.5, 403), 8);\n    connRef331->setDestEndpoint(dstPt331);\n    connRef331->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints331(1);\n    checkpoints331[0] = Point(669.5, 584);\n    connRef331->setRoutingCheckpoints(checkpoints331);\n\n    ConnRef *connRef332 = new ConnRef(router, 332);\n    ConnEnd srcPt332(Point(1191.5, 280), 15);\n    connRef332->setSourceEndpoint(srcPt332);\n    ConnEnd dstPt332(Point(782.5, 341), 8);\n    connRef332->setDestEndpoint(dstPt332);\n    connRef332->setRoutingType((ConnType)2);\n\n    ConnRef *connRef333 = new ConnRef(router, 333);\n    ConnEnd srcPt333(Point(1191.5, 280), 15);\n    connRef333->setSourceEndpoint(srcPt333);\n    ConnEnd dstPt333(Point(782.5, 239), 8);\n    connRef333->setDestEndpoint(dstPt333);\n    connRef333->setRoutingType((ConnType)2);\n\n    ConnRef *connRef334 = new ConnRef(router, 334);\n    ConnEnd srcPt334(Point(1191.5, 584), 15);\n    connRef334->setSourceEndpoint(srcPt334);\n    ConnEnd dstPt334(Point(1427, 986.25), 4);\n    connRef334->setDestEndpoint(dstPt334);\n    connRef334->setRoutingType((ConnType)2);\n#endif\n\n    ConnRef *connRef335 = new ConnRef(router, 335);\n    ConnEnd srcPt335(Point(1191.5, 1291.42), 15);\n    connRef335->setSourceEndpoint(srcPt335);\n    ConnEnd dstPt335(Point(1427, 1026.25), 4);\n    connRef335->setDestEndpoint(dstPt335);\n    connRef335->setRoutingType((ConnType)2);\n\n#ifdef ALL\n    ConnRef *connRef336 = new ConnRef(router, 336);\n    ConnEnd srcPt336(Point(1191.5, 1779.42), 15);\n    connRef336->setSourceEndpoint(srcPt336);\n    ConnEnd dstPt336(Point(1513, 1189.75), 2);\n    connRef336->setDestEndpoint(dstPt336);\n    connRef336->setRoutingType((ConnType)2);\n\n    ConnRef *connRef337 = new ConnRef(router, 337);\n    ConnEnd srcPt337(Point(1191.5, 2169.42), 15);\n    connRef337->setSourceEndpoint(srcPt337);\n    ConnEnd dstPt337(Point(1553, 1189.75), 2);\n    connRef337->setDestEndpoint(dstPt337);\n    connRef337->setRoutingType((ConnType)2);\n\n    ConnRef *connRef338 = new ConnRef(router, 338);\n    ConnEnd srcPt338(Point(1191.5, 280), 15);\n    connRef338->setSourceEndpoint(srcPt338);\n    ConnEnd dstPt338(Point(1252, 214.5), 2);\n    connRef338->setDestEndpoint(dstPt338);\n    connRef338->setRoutingType((ConnType)2);\n\n    ConnRef *connRef339 = new ConnRef(router, 339);\n    ConnEnd srcPt339(Point(251.5, 1903.42), 15);\n    connRef339->setSourceEndpoint(srcPt339);\n    ConnEnd dstPt339(Point(247.5, 2025.92), 8);\n    connRef339->setDestEndpoint(dstPt339);\n    connRef339->setRoutingType((ConnType)2);\n\n    ConnRef *connRef340 = new ConnRef(router, 340);\n    ConnEnd srcPt340(Point(251.5, 2169.42), 15);\n    connRef340->setSourceEndpoint(srcPt340);\n    ConnEnd dstPt340(Point(247.5, 2065.92), 8);\n    connRef340->setDestEndpoint(dstPt340);\n    connRef340->setRoutingType((ConnType)2);\n\n    ConnRef *connRef341 = new ConnRef(router, 341);\n    ConnEnd srcPt341(Point(1191.5, 1655.42), 15);\n    connRef341->setSourceEndpoint(srcPt341);\n    ConnEnd dstPt341(Point(736.5, 1662.92), 8);\n    connRef341->setDestEndpoint(dstPt341);\n    connRef341->setRoutingType((ConnType)2);\n\n    ConnRef *connRef342 = new ConnRef(router, 342);\n    ConnEnd srcPt342(Point(1432.5, 2169.42), 15);\n    connRef342->setSourceEndpoint(srcPt342);\n    ConnEnd dstPt342(Point(1438.5, 2248.79), 1);\n    connRef342->setDestEndpoint(dstPt342);\n    connRef342->setRoutingType((ConnType)2);\n#endif\n\n    router->processTransaction();\n    router->outputDiagram(\"output/checkpointNudging2\");\n\n    // Second last segment of connector 256 and 258 should be in line with each other \n    // in the y dimension, in line with the checkpoint.\n    bool areInline = (connRef258->displayRoute().ps[2].y == connRef258->displayRoute().ps[3].y) &&\n    \t\t     (connRef258->displayRoute().ps[2].y == connRef256->displayRoute().ps[2].y) &&\n    \t\t     (connRef258->displayRoute().ps[2].y == connRef256->displayRoute().ps[3].y);\n\n    delete router;\n    return (areInline) ? 0 : 1;\n};\n"
  },
  {
    "path": "cola/libavoid/tests/checkpointNudging3.cpp",
    "content": "// Based on ec00240-libavoid-debug-error-high-precision.svg\n// Problem where epsilon difference could cause a segment to be restricted \n// by a checkpoint on that segment, effectively not allowing it to move.\n#include \"libavoid/libavoid.h\"\nusing namespace Avoid;\nint main(void) {\n    Router *router = new Router(\n            PolyLineRouting | OrthogonalRouting);\n    router->setRoutingParameter((RoutingParameter)0, 50);\n    router->setRoutingParameter((RoutingParameter)1, 0);\n    router->setRoutingParameter((RoutingParameter)2, 0);\n    router->setRoutingParameter((RoutingParameter)3, 4000);\n    router->setRoutingParameter((RoutingParameter)4, 0);\n    router->setRoutingParameter((RoutingParameter)5, 100);\n    router->setRoutingParameter((RoutingParameter)6, 0);\n    router->setRoutingParameter((RoutingParameter)7, 4);\n    router->setRoutingOption((RoutingOption)0, true);\n    router->setRoutingOption((RoutingOption)1, true);\n    router->setRoutingOption((RoutingOption)2, false);\n    router->setRoutingOption((RoutingOption)3, false);\n\n#ifdef REST\n    Polygon poly1(4);\n    poly1.ps[0] = Point(191.62835648698, 1359.606854916126);\n    poly1.ps[1] = Point(191.62835648698, 1391.606854916126);\n    poly1.ps[2] = Point(171.62835648698, 1391.606854916126);\n    poly1.ps[3] = Point(171.62835648698, 1359.606854916126);\n    new ShapeRef(router, poly1, 1);\n\n    Polygon poly2(4);\n    poly2.ps[0] = Point(1904.12835649198, 2.256854915126041);\n    poly2.ps[1] = Point(1904.12835649198, 64.25685491512604);\n    poly2.ps[2] = Point(1842.12835649198, 64.25685491512604);\n    poly2.ps[3] = Point(1842.12835649198, 2.256854915126041);\n    new ShapeRef(router, poly2, 2);\n\n    Polygon poly3(4);\n    poly3.ps[0] = Point(1959.12835649298, 23.25685491512604);\n    poly3.ps[1] = Point(1959.12835649298, 43.25685491512604);\n    poly3.ps[2] = Point(1927.12835649298, 43.25685491512604);\n    poly3.ps[3] = Point(1927.12835649298, 23.25685491512604);\n    new ShapeRef(router, poly3, 3);\n\n    Polygon poly4(4);\n    poly4.ps[0] = Point(443.62835648698, -329.4098117515406);\n    poly4.ps[1] = Point(443.62835648698, -309.4098117515406);\n    poly4.ps[2] = Point(411.62835648698, -309.4098117515406);\n    poly4.ps[3] = Point(411.62835648698, -329.4098117515406);\n    new ShapeRef(router, poly4, 4);\n\n    Polygon poly5(4);\n    poly5.ps[0] = Point(47.62835648497997, 935.8568549161259);\n    poly5.ps[1] = Point(47.62835648497997, 955.8568549161259);\n    poly5.ps[2] = Point(15.62835648497997, 955.8568549161259);\n    poly5.ps[3] = Point(15.62835648497997, 935.8568549161259);\n    new ShapeRef(router, poly5, 5);\n\n    Polygon poly6(4);\n    poly6.ps[0] = Point(519.62835648798, 1326.606854916126);\n    poly6.ps[1] = Point(519.62835648798, 1358.606854916126);\n    poly6.ps[2] = Point(499.62835648798, 1358.606854916126);\n    poly6.ps[3] = Point(499.62835648798, 1326.606854916126);\n    new ShapeRef(router, poly6, 6);\n\n    Polygon poly7(4);\n    poly7.ps[0] = Point(-975.12164351602, -157.4098117515406);\n    poly7.ps[1] = Point(-975.12164351602, -95.40981175154064);\n    poly7.ps[2] = Point(-1037.12164351602, -95.40981175154064);\n    poly7.ps[3] = Point(-1037.12164351602, -157.4098117515406);\n    new ShapeRef(router, poly7, 7);\n\n    Polygon poly8(4);\n    poly8.ps[0] = Point(-996.12164351602, -281.4098117515406);\n    poly8.ps[1] = Point(-996.12164351602, -249.4098117515406);\n    poly8.ps[2] = Point(-1016.12164351602, -249.4098117515406);\n    poly8.ps[3] = Point(-1016.12164351602, -281.4098117515406);\n    new ShapeRef(router, poly8, 8);\n\n    Polygon poly9(4);\n    poly9.ps[0] = Point(-827.12164351602, -964.4098117535407);\n    poly9.ps[1] = Point(-827.12164351602, -929.4098117535407);\n    poly9.ps[2] = Point(-1041.12164351602, -929.4098117535407);\n    poly9.ps[3] = Point(-1041.12164351602, -964.4098117535407);\n    new ShapeRef(router, poly9, 9);\n\n    Polygon poly10(4);\n    poly10.ps[0] = Point(-657.62164351602, -907.4098117525407);\n    poly10.ps[1] = Point(-657.62164351602, -847.4098117525407);\n    poly10.ps[2] = Point(-964.62164351602, -847.4098117525407);\n    poly10.ps[3] = Point(-964.62164351602, -907.4098117525407);\n    new ShapeRef(router, poly10, 10);\n\n    Polygon poly11(4);\n    poly11.ps[0] = Point(-938.62164351602, 275.2568549161261);\n    poly11.ps[1] = Point(-938.62164351602, 449.2568549161261);\n    poly11.ps[2] = Point(-1073.62164351602, 449.2568549161261);\n    poly11.ps[3] = Point(-1073.62164351602, 275.2568549161261);\n    new ShapeRef(router, poly11, 11);\n\n    Polygon poly12(4);\n    poly12.ps[0] = Point(2313.295023161646, -400.4098117525406);\n    poly12.ps[1] = Point(2313.295023161646, -340.4098117525406);\n    poly12.ps[2] = Point(2030.295023161646, -340.4098117525406);\n    poly12.ps[3] = Point(2030.295023161646, -400.4098117525406);\n    new ShapeRef(router, poly12, 12);\n\n    Polygon poly13(4);\n    poly13.ps[0] = Point(2313.795023161646, 1545.106854916126);\n    poly13.ps[1] = Point(2313.795023161646, 1605.106854916126);\n    poly13.ps[2] = Point(2029.795023161646, 1605.106854916126);\n    poly13.ps[3] = Point(2029.795023161646, 1545.106854916126);\n    new ShapeRef(router, poly13, 13);\n\n    Polygon poly14(4);\n    poly14.ps[0] = Point(-996.12164351602, -513.4098117525407);\n    poly14.ps[1] = Point(-996.12164351602, -481.4098117525407);\n    poly14.ps[2] = Point(-1016.12164351602, -481.4098117525407);\n    poly14.ps[3] = Point(-1016.12164351602, -513.4098117525407);\n    new ShapeRef(router, poly14, 14);\n\n    Polygon poly15(4);\n    poly15.ps[0] = Point(-792.12164351602, -747.9812403239691);\n    poly15.ps[1] = Point(-792.12164351602, -727.9812403239691);\n    poly15.ps[2] = Point(-824.12164351602, -727.9812403239691);\n    poly15.ps[3] = Point(-824.12164351602, -747.9812403239691);\n    new ShapeRef(router, poly15, 15);\n#endif\n\n    Polygon poly16(4);\n    poly16.ps[0] = Point(-452.87164351602, -843.9812403239691);\n    poly16.ps[1] = Point(-452.87164351602, -823.9812403239691);\n    poly16.ps[2] = Point(-484.87164351602, -823.9812403239691);\n    poly16.ps[3] = Point(-484.87164351602, -843.9812403239691);\n    new ShapeRef(router, poly16, 16);\n\n    Polygon poly17(4);\n    poly17.ps[0] = Point(-452.87164351602, -768.9812403239691);\n    poly17.ps[1] = Point(-452.87164351602, -748.9812403239691);\n    poly17.ps[2] = Point(-484.87164351602, -748.9812403239691);\n    poly17.ps[3] = Point(-484.87164351602, -768.9812403239691);\n    new ShapeRef(router, poly17, 17);\n\n#ifdef REST\n    Polygon poly18(4);\n    poly18.ps[0] = Point(131.62835648698, -747.9812403239691);\n    poly18.ps[1] = Point(131.62835648698, -727.9812403239691);\n    poly18.ps[2] = Point(99.62835648697995, -727.9812403239691);\n    poly18.ps[3] = Point(99.62835648697995, -747.9812403239691);\n    new ShapeRef(router, poly18, 18);\n\n    Polygon poly19(4);\n    poly19.ps[0] = Point(-485.87164351602, -507.4098117525407);\n    poly19.ps[1] = Point(-485.87164351602, -487.4098117525407);\n    poly19.ps[2] = Point(-517.87164351602, -487.4098117525407);\n    poly19.ps[3] = Point(-517.87164351602, -507.4098117525407);\n    new ShapeRef(router, poly19, 19);\n\n    Polygon poly20(4);\n    poly20.ps[0] = Point(-485.87164351602, -388.4098117525406);\n    poly20.ps[1] = Point(-485.87164351602, -368.4098117525406);\n    poly20.ps[2] = Point(-517.87164351602, -368.4098117525406);\n    poly20.ps[3] = Point(-517.87164351602, -388.4098117525406);\n    new ShapeRef(router, poly20, 20);\n\n    Polygon poly21(4);\n    poly21.ps[0] = Point(112.62835648598, -287.4098117515406);\n    poly21.ps[1] = Point(112.62835648598, -267.4098117515406);\n    poly21.ps[2] = Point(80.62835648597996, -267.4098117515406);\n    poly21.ps[3] = Point(80.62835648597996, -287.4098117515406);\n    new ShapeRef(router, poly21, 21);\n\n    Polygon poly22(4);\n    poly22.ps[0] = Point(112.62835648598, -212.4098117515406);\n    poly22.ps[1] = Point(112.62835648598, -192.4098117515406);\n    poly22.ps[2] = Point(80.62835648597996, -192.4098117515406);\n    poly22.ps[3] = Point(80.62835648597996, -212.4098117515406);\n    new ShapeRef(router, poly22, 22);\n\n    Polygon poly23(4);\n    poly23.ps[0] = Point(443.62835648698, -287.4098117515406);\n    poly23.ps[1] = Point(443.62835648698, -267.4098117515406);\n    poly23.ps[2] = Point(411.62835648698, -267.4098117515406);\n    poly23.ps[3] = Point(411.62835648698, -287.4098117515406);\n    new ShapeRef(router, poly23, 23);\n\n    Polygon poly24(4);\n    poly24.ps[0] = Point(443.62835648698, -212.4098117515406);\n    poly24.ps[1] = Point(443.62835648698, -192.4098117515406);\n    poly24.ps[2] = Point(411.62835648698, -192.4098117515406);\n    poly24.ps[3] = Point(411.62835648698, -212.4098117515406);\n    new ShapeRef(router, poly24, 24);\n\n    Polygon poly25(4);\n    poly25.ps[0] = Point(-288.87164351602, -175.4098117515406);\n    poly25.ps[1] = Point(-288.87164351602, -143.4098117515406);\n    poly25.ps[2] = Point(-308.87164351602, -143.4098117515406);\n    poly25.ps[3] = Point(-308.87164351602, -175.4098117515406);\n    new ShapeRef(router, poly25, 25);\n\n    Polygon poly26(4);\n    poly26.ps[0] = Point(-330.87164351602, -175.4098117515406);\n    poly26.ps[1] = Point(-330.87164351602, -143.4098117515406);\n    poly26.ps[2] = Point(-350.87164351602, -143.4098117515406);\n    poly26.ps[3] = Point(-350.87164351602, -175.4098117515406);\n    new ShapeRef(router, poly26, 26);\n\n    Polygon poly27(4);\n    poly27.ps[0] = Point(112.62835648598, -404.4098117515406);\n    poly27.ps[1] = Point(112.62835648598, -384.4098117515406);\n    poly27.ps[2] = Point(80.62835648597996, -384.4098117515406);\n    poly27.ps[3] = Point(80.62835648597996, -404.4098117515406);\n    new ShapeRef(router, poly27, 27);\n\n    Polygon poly28(4);\n    poly28.ps[0] = Point(112.62835648598, -329.4098117515406);\n    poly28.ps[1] = Point(112.62835648598, -309.4098117515406);\n    poly28.ps[2] = Point(80.62835648597996, -309.4098117515406);\n    poly28.ps[3] = Point(80.62835648597996, -329.4098117515406);\n    new ShapeRef(router, poly28, 28);\n\n    Polygon poly29(4);\n    poly29.ps[0] = Point(443.62835648698, -479.4098117515406);\n    poly29.ps[1] = Point(443.62835648698, -459.4098117515406);\n    poly29.ps[2] = Point(411.62835648698, -459.4098117515406);\n    poly29.ps[3] = Point(411.62835648698, -479.4098117515406);\n    new ShapeRef(router, poly29, 29);\n\n    Polygon poly30(4);\n    poly30.ps[0] = Point(443.62835648698, -404.4098117515406);\n    poly30.ps[1] = Point(443.62835648698, -384.4098117515406);\n    poly30.ps[2] = Point(411.62835648698, -384.4098117515406);\n    poly30.ps[3] = Point(411.62835648698, -404.4098117515406);\n    new ShapeRef(router, poly30, 30);\n\n    Polygon poly31(4);\n    poly31.ps[0] = Point(861.62835648898, -242.4098117515406);\n    poly31.ps[1] = Point(861.62835648898, -222.4098117515406);\n    poly31.ps[2] = Point(829.62835648898, -222.4098117515406);\n    poly31.ps[3] = Point(829.62835648898, -242.4098117515406);\n    new ShapeRef(router, poly31, 31);\n\n    Polygon poly32(4);\n    poly32.ps[0] = Point(648.9873402531949, -287.4098117515406);\n    poly32.ps[1] = Point(648.9873402531949, -267.4098117515406);\n    poly32.ps[2] = Point(616.9873402531949, -267.4098117515406);\n    poly32.ps[3] = Point(616.9873402531949, -287.4098117515406);\n    new ShapeRef(router, poly32, 32);\n\n    Polygon poly33(4);\n    poly33.ps[0] = Point(648.9873402531949, -329.4098117515406);\n    poly33.ps[1] = Point(648.9873402531949, -309.4098117515406);\n    poly33.ps[2] = Point(616.9873402531949, -309.4098117515406);\n    poly33.ps[3] = Point(616.9873402531949, -329.4098117515406);\n    new ShapeRef(router, poly33, 33);\n\n    Polygon poly34(4);\n    poly34.ps[0] = Point(1078.914070775694, -329.4098117515406);\n    poly34.ps[1] = Point(1078.914070775694, -309.4098117515406);\n    poly34.ps[2] = Point(1046.914070775694, -309.4098117515406);\n    poly34.ps[3] = Point(1046.914070775694, -329.4098117515406);\n    new ShapeRef(router, poly34, 34);\n\n    Polygon poly35(4);\n    poly35.ps[0] = Point(1078.914070775694, -287.4098117515406);\n    poly35.ps[1] = Point(1078.914070775694, -267.4098117515406);\n    poly35.ps[2] = Point(1046.914070775694, -267.4098117515406);\n    poly35.ps[3] = Point(1046.914070775694, -287.4098117515406);\n    new ShapeRef(router, poly35, 35);\n\n    Polygon poly36(4);\n    poly36.ps[0] = Point(1610.12835648998, -329.4098117515406);\n    poly36.ps[1] = Point(1610.12835648998, -309.4098117515406);\n    poly36.ps[2] = Point(1578.12835648998, -309.4098117515406);\n    poly36.ps[3] = Point(1578.12835648998, -329.4098117515406);\n    new ShapeRef(router, poly36, 36);\n\n    Polygon poly37(4);\n    poly37.ps[0] = Point(1610.12835648998, -287.4098117515406);\n    poly37.ps[1] = Point(1610.12835648998, -267.4098117515406);\n    poly37.ps[2] = Point(1578.12835648998, -267.4098117515406);\n    poly37.ps[3] = Point(1578.12835648998, -287.4098117515406);\n    new ShapeRef(router, poly37, 37);\n\n    Polygon poly38(4);\n    poly38.ps[0] = Point(1786.12835649098, -308.4098117515406);\n    poly38.ps[1] = Point(1786.12835649098, -288.4098117515406);\n    poly38.ps[2] = Point(1754.12835649098, -288.4098117515406);\n    poly38.ps[3] = Point(1754.12835649098, -308.4098117515406);\n    new ShapeRef(router, poly38, 38);\n\n    Polygon poly39(4);\n    poly39.ps[0] = Point(1959.12835649298, -308.4098117515406);\n    poly39.ps[1] = Point(1959.12835649298, -288.4098117515406);\n    poly39.ps[2] = Point(1927.12835649298, -288.4098117515406);\n    poly39.ps[3] = Point(1927.12835649298, -308.4098117515406);\n    new ShapeRef(router, poly39, 39);\n\n    Polygon poly40(4);\n    poly40.ps[0] = Point(-485.87164351602, 89.25685491512604);\n    poly40.ps[1] = Point(-485.87164351602, 109.256854915126);\n    poly40.ps[2] = Point(-517.87164351602, 109.256854915126);\n    poly40.ps[3] = Point(-517.87164351602, 89.25685491512604);\n    new ShapeRef(router, poly40, 40);\n\n    Polygon poly41(4);\n    poly41.ps[0] = Point(-485.87164351602, 191.256854916126);\n    poly41.ps[1] = Point(-485.87164351602, 211.256854916126);\n    poly41.ps[2] = Point(-517.87164351602, 211.256854916126);\n    poly41.ps[3] = Point(-517.87164351602, 191.256854916126);\n    new ShapeRef(router, poly41, 41);\n\n    Polygon poly42(4);\n    poly42.ps[0] = Point(-10.87164351502003, 35.25685491512604);\n    poly42.ps[1] = Point(-10.87164351502003, 55.25685491512604);\n    poly42.ps[2] = Point(-42.87164351502003, 55.25685491512604);\n    poly42.ps[3] = Point(-42.87164351502003, 35.25685491512604);\n    new ShapeRef(router, poly42, 42);\n\n    Polygon poly43(4);\n    poly43.ps[0] = Point(-10.87164351502003, 77.25685491512604);\n    poly43.ps[1] = Point(-10.87164351502003, 97.25685491512604);\n    poly43.ps[2] = Point(-42.87164351502003, 97.25685491512604);\n    poly43.ps[3] = Point(-42.87164351502003, 77.25685491512604);\n    new ShapeRef(router, poly43, 43);\n\n    Polygon poly44(4);\n    poly44.ps[0] = Point(466.62835648698, 77.25685491512604);\n    poly44.ps[1] = Point(466.62835648698, 97.25685491512604);\n    poly44.ps[2] = Point(434.62835648698, 97.25685491512604);\n    poly44.ps[3] = Point(434.62835648698, 77.25685491512604);\n    new ShapeRef(router, poly44, 44);\n\n    Polygon poly45(4);\n    poly45.ps[0] = Point(466.62835648698, 35.25685491512604);\n    poly45.ps[1] = Point(466.62835648698, 55.25685491512604);\n    poly45.ps[2] = Point(434.62835648698, 55.25685491512604);\n    poly45.ps[3] = Point(434.62835648698, 35.25685491512604);\n    new ShapeRef(router, poly45, 45);\n\n    Polygon poly46(4);\n    poly46.ps[0] = Point(781.62835648798, 35.25685491512604);\n    poly46.ps[1] = Point(781.62835648798, 55.25685491512604);\n    poly46.ps[2] = Point(749.62835648798, 55.25685491512604);\n    poly46.ps[3] = Point(749.62835648798, 35.25685491512604);\n    new ShapeRef(router, poly46, 46);\n\n    Polygon poly47(4);\n    poly47.ps[0] = Point(781.62835648798, 77.25685491512604);\n    poly47.ps[1] = Point(781.62835648798, 97.25685491512604);\n    poly47.ps[2] = Point(749.62835648798, 97.25685491512604);\n    poly47.ps[3] = Point(749.62835648798, 77.25685491512604);\n    new ShapeRef(router, poly47, 47);\n\n    Polygon poly48(4);\n    poly48.ps[0] = Point(992.9140707746942, -142.4098117515406);\n    poly48.ps[1] = Point(992.9140707746942, -110.4098117515406);\n    poly48.ps[2] = Point(972.9140707746942, -110.4098117515406);\n    poly48.ps[3] = Point(972.9140707746942, -142.4098117515406);\n    new ShapeRef(router, poly48, 48);\n\n    Polygon poly49(4);\n    poly49.ps[0] = Point(1439.12835648898, -142.4098117515406);\n    poly49.ps[1] = Point(1439.12835648898, -110.4098117515406);\n    poly49.ps[2] = Point(1419.12835648898, -110.4098117515406);\n    poly49.ps[3] = Point(1419.12835648898, -142.4098117515406);\n    new ShapeRef(router, poly49, 49);\n\n    Polygon poly50(4);\n    poly50.ps[0] = Point(1117.12835648898, 35.25685491512604);\n    poly50.ps[1] = Point(1117.12835648898, 55.25685491512604);\n    poly50.ps[2] = Point(1085.12835648898, 55.25685491512604);\n    poly50.ps[3] = Point(1085.12835648898, 35.25685491512604);\n    new ShapeRef(router, poly50, 50);\n\n    Polygon poly51(4);\n    poly51.ps[0] = Point(1117.12835648898, 77.25685491512604);\n    poly51.ps[1] = Point(1117.12835648898, 97.25685491512604);\n    poly51.ps[2] = Point(1085.12835648898, 97.25685491512604);\n    poly51.ps[3] = Point(1085.12835648898, 77.25685491512604);\n    new ShapeRef(router, poly51, 51);\n\n    Polygon poly52(4);\n    poly52.ps[0] = Point(715.62835648798, 245.2568549161261);\n    poly52.ps[1] = Point(715.62835648798, 265.2568549161261);\n    poly52.ps[2] = Point(683.62835648798, 265.2568549161261);\n    poly52.ps[3] = Point(683.62835648798, 245.2568549161261);\n    new ShapeRef(router, poly52, 52);\n\n    Polygon poly53(4);\n    poly53.ps[0] = Point(1643.12835648998, 23.25685491512604);\n    poly53.ps[1] = Point(1643.12835648998, 43.25685491512604);\n    poly53.ps[2] = Point(1611.12835648998, 43.25685491512604);\n    poly53.ps[3] = Point(1611.12835648998, 23.25685491512604);\n    new ShapeRef(router, poly53, 53);\n\n    Polygon poly54(4);\n    poly54.ps[0] = Point(1786.12835649098, 23.25685491512604);\n    poly54.ps[1] = Point(1786.12835649098, 43.25685491512604);\n    poly54.ps[2] = Point(1754.12835649098, 43.25685491512604);\n    poly54.ps[3] = Point(1754.12835649098, 23.25685491512604);\n    new ShapeRef(router, poly54, 54);\n\n    Polygon poly55(4);\n    poly55.ps[0] = Point(-864.12164351602, 755.8568549161259);\n    poly55.ps[1] = Point(-864.12164351602, 787.8568549161259);\n    poly55.ps[2] = Point(-884.12164351602, 787.8568549161259);\n    poly55.ps[3] = Point(-884.12164351602, 755.8568549161259);\n    new ShapeRef(router, poly55, 55);\n\n    Polygon poly56(4);\n    poly56.ps[0] = Point(-718.12164351602, 755.8568549161259);\n    poly56.ps[1] = Point(-718.12164351602, 787.8568549161259);\n    poly56.ps[2] = Point(-738.12164351602, 787.8568549161259);\n    poly56.ps[3] = Point(-738.12164351602, 755.8568549161259);\n    new ShapeRef(router, poly56, 56);\n\n    Polygon poly57(4);\n    poly57.ps[0] = Point(-524.87164351602, 504.756854916126);\n    poly57.ps[1] = Point(-524.87164351602, 536.756854916126);\n    poly57.ps[2] = Point(-544.87164351602, 536.756854916126);\n    poly57.ps[3] = Point(-544.87164351602, 504.756854916126);\n    new ShapeRef(router, poly57, 57);\n\n    Polygon poly58(4);\n    poly58.ps[0] = Point(-309.87164351602, 504.756854916126);\n    poly58.ps[1] = Point(-309.87164351602, 536.756854916126);\n    poly58.ps[2] = Point(-329.87164351602, 536.756854916126);\n    poly58.ps[3] = Point(-329.87164351602, 504.756854916126);\n    new ShapeRef(router, poly58, 58);\n\n    Polygon poly59(4);\n    poly59.ps[0] = Point(-115.87164351502, 504.756854916126);\n    poly59.ps[1] = Point(-115.87164351502, 536.756854916126);\n    poly59.ps[2] = Point(-135.87164351502, 536.756854916126);\n    poly59.ps[3] = Point(-135.87164351502, 504.756854916126);\n    new ShapeRef(router, poly59, 59);\n\n    Polygon poly60(4);\n    poly60.ps[0] = Point(191.62835648698, 504.756854916126);\n    poly60.ps[1] = Point(191.62835648698, 536.756854916126);\n    poly60.ps[2] = Point(171.62835648698, 536.756854916126);\n    poly60.ps[3] = Point(171.62835648698, 504.756854916126);\n    new ShapeRef(router, poly60, 60);\n\n    Polygon poly61(4);\n    poly61.ps[0] = Point(47.62835648497997, 728.8568549161259);\n    poly61.ps[1] = Point(47.62835648497997, 748.8568549161259);\n    poly61.ps[2] = Point(15.62835648497997, 748.8568549161259);\n    poly61.ps[3] = Point(15.62835648497997, 728.8568549161259);\n    new ShapeRef(router, poly61, 61);\n\n    Polygon poly62(4);\n    poly62.ps[0] = Point(-342.87164351602, 962.8568549161259);\n    poly62.ps[1] = Point(-342.87164351602, 994.8568549161259);\n    poly62.ps[2] = Point(-362.87164351602, 994.8568549161259);\n    poly62.ps[3] = Point(-362.87164351602, 962.8568549161259);\n    new ShapeRef(router, poly62, 62);\n\n    Polygon poly63(4);\n    poly63.ps[0] = Point(-685.12164351602, 1028.856854916126);\n    poly63.ps[1] = Point(-685.12164351602, 1060.856854916126);\n    poly63.ps[2] = Point(-705.12164351602, 1060.856854916126);\n    poly63.ps[3] = Point(-705.12164351602, 1028.856854916126);\n    new ShapeRef(router, poly63, 63);\n\n    Polygon poly64(4);\n    poly64.ps[0] = Point(377.62835648698, 707.8568549161259);\n    poly64.ps[1] = Point(377.62835648698, 727.8568549161259);\n    poly64.ps[2] = Point(345.62835648698, 727.8568549161259);\n    poly64.ps[3] = Point(345.62835648698, 707.8568549161259);\n    new ShapeRef(router, poly64, 64);\n\n    Polygon poly65(4);\n    poly65.ps[0] = Point(682.62835648798, 569.006854916126);\n    poly65.ps[1] = Point(682.62835648798, 589.006854916126);\n    poly65.ps[2] = Point(650.62835648798, 589.006854916126);\n    poly65.ps[3] = Point(650.62835648798, 569.006854916126);\n    new ShapeRef(router, poly65, 65);\n\n    Polygon poly66(4);\n    poly66.ps[0] = Point(164.62835648698, 794.8568549161259);\n    poly66.ps[1] = Point(164.62835648698, 814.8568549161259);\n    poly66.ps[2] = Point(132.62835648698, 814.8568549161259);\n    poly66.ps[3] = Point(132.62835648698, 794.8568549161259);\n    new ShapeRef(router, poly66, 66);\n\n    Polygon poly67(4);\n    poly67.ps[0] = Point(814.62835648798, 707.8568549161259);\n    poly67.ps[1] = Point(814.62835648798, 727.8568549161259);\n    poly67.ps[2] = Point(782.62835648798, 727.8568549161259);\n    poly67.ps[3] = Point(782.62835648798, 707.8568549161259);\n    new ShapeRef(router, poly67, 67);\n\n    Polygon poly68(4);\n    poly68.ps[0] = Point(814.62835648798, 749.8568549161259);\n    poly68.ps[1] = Point(814.62835648798, 769.8568549161259);\n    poly68.ps[2] = Point(782.62835648798, 769.8568549161259);\n    poly68.ps[3] = Point(782.62835648798, 749.8568549161259);\n    new ShapeRef(router, poly68, 68);\n\n    Polygon poly69(4);\n    poly69.ps[0] = Point(606.62835648798, 841.8568549161259);\n    poly69.ps[1] = Point(606.62835648798, 873.8568549161259);\n    poly69.ps[2] = Point(586.62835648798, 873.8568549161259);\n    poly69.ps[3] = Point(586.62835648798, 841.8568549161259);\n    new ShapeRef(router, poly69, 69);\n\n    Polygon poly70(4);\n    poly70.ps[0] = Point(117.62835648598, 1011.856854916126);\n    poly70.ps[1] = Point(117.62835648598, 1031.856854916126);\n    poly70.ps[2] = Point(85.62835648597996, 1031.856854916126);\n    poly70.ps[3] = Point(85.62835648597996, 1011.856854916126);\n    new ShapeRef(router, poly70, 70);\n\n    Polygon poly71(4);\n    poly71.ps[0] = Point(-76.87164351502003, 1154.856854916126);\n    poly71.ps[1] = Point(-76.87164351502003, 1174.856854916126);\n    poly71.ps[2] = Point(-108.87164351502, 1174.856854916126);\n    poly71.ps[3] = Point(-108.87164351502, 1154.856854916126);\n    new ShapeRef(router, poly71, 71);\n\n    Polygon poly72(4);\n    poly72.ps[0] = Point(-76.87164351502003, 1112.856854916126);\n    poly72.ps[1] = Point(-76.87164351502003, 1132.856854916126);\n    poly72.ps[2] = Point(-108.87164351502, 1132.856854916126);\n    poly72.ps[3] = Point(-108.87164351502, 1112.856854916126);\n    new ShapeRef(router, poly72, 72);\n\n    Polygon poly73(4);\n    poly73.ps[0] = Point(344.62835648698, 1112.856854916126);\n    poly73.ps[1] = Point(344.62835648698, 1132.856854916126);\n    poly73.ps[2] = Point(312.62835648698, 1132.856854916126);\n    poly73.ps[3] = Point(312.62835648698, 1112.856854916126);\n    new ShapeRef(router, poly73, 73);\n\n    Polygon poly74(4);\n    poly74.ps[0] = Point(861.62835648898, 1100.856854916126);\n    poly74.ps[1] = Point(861.62835648898, 1120.856854916126);\n    poly74.ps[2] = Point(829.62835648898, 1120.856854916126);\n    poly74.ps[3] = Point(829.62835648898, 1100.856854916126);\n    new ShapeRef(router, poly74, 74);\n\n    Polygon poly75(4);\n    poly75.ps[0] = Point(971.9140707746942, 870.8568549171259);\n    poly75.ps[1] = Point(971.9140707746942, 902.8568549171259);\n    poly75.ps[2] = Point(951.9140707746942, 902.8568549171259);\n    poly75.ps[3] = Point(951.9140707746942, 870.8568549171259);\n    new ShapeRef(router, poly75, 75);\n\n    Polygon poly76(4);\n    poly76.ps[0] = Point(1177.12835648898, 995.8568549161259);\n    poly76.ps[1] = Point(1177.12835648898, 1027.856854916126);\n    poly76.ps[2] = Point(1157.12835648898, 1027.856854916126);\n    poly76.ps[3] = Point(1157.12835648898, 995.8568549161259);\n    new ShapeRef(router, poly76, 76);\n\n    Polygon poly77(4);\n    poly77.ps[0] = Point(1177.12835648898, 1094.856854916126);\n    poly77.ps[1] = Point(1177.12835648898, 1126.856854916126);\n    poly77.ps[2] = Point(1157.12835648898, 1126.856854916126);\n    poly77.ps[3] = Point(1157.12835648898, 1094.856854916126);\n    new ShapeRef(router, poly77, 77);\n\n    Polygon poly78(4);\n    poly78.ps[0] = Point(1183.12835648898, 1166.856854916126);\n    poly78.ps[1] = Point(1183.12835648898, 1186.856854916126);\n    poly78.ps[2] = Point(1151.12835648898, 1186.856854916126);\n    poly78.ps[3] = Point(1151.12835648898, 1166.856854916126);\n    new ShapeRef(router, poly78, 78);\n\n    Polygon poly79(4);\n    poly79.ps[0] = Point(41.62835648497997, 1359.606854916126);\n    poly79.ps[1] = Point(41.62835648497997, 1391.606854916126);\n    poly79.ps[2] = Point(21.62835648497997, 1391.606854916126);\n    poly79.ps[3] = Point(21.62835648497997, 1359.606854916126);\n    new ShapeRef(router, poly79, 79);\n\n    Polygon poly80(4);\n    poly80.ps[0] = Point(561.62835648798, 1326.606854916126);\n    poly80.ps[1] = Point(561.62835648798, 1358.606854916126);\n    poly80.ps[2] = Point(541.62835648798, 1358.606854916126);\n    poly80.ps[3] = Point(541.62835648798, 1326.606854916126);\n    new ShapeRef(router, poly80, 80);\n\n    Polygon poly81(4);\n    poly81.ps[0] = Point(-485.87164351602, 1637.106854917126);\n    poly81.ps[1] = Point(-485.87164351602, 1657.106854917126);\n    poly81.ps[2] = Point(-517.87164351602, 1657.106854917126);\n    poly81.ps[3] = Point(-517.87164351602, 1637.106854917126);\n    new ShapeRef(router, poly81, 81);\n\n    Polygon poly82(4);\n    poly82.ps[0] = Point(-43.87164351502003, 1658.106854917126);\n    poly82.ps[1] = Point(-43.87164351502003, 1678.106854917126);\n    poly82.ps[2] = Point(-75.87164351502003, 1678.106854917126);\n    poly82.ps[3] = Point(-75.87164351502003, 1658.106854917126);\n    new ShapeRef(router, poly82, 82);\n\n    Polygon poly83(4);\n    poly83.ps[0] = Point(-43.87164351502003, 1541.106854917126);\n    poly83.ps[1] = Point(-43.87164351502003, 1561.106854917126);\n    poly83.ps[2] = Point(-75.87164351502003, 1561.106854917126);\n    poly83.ps[3] = Point(-75.87164351502003, 1541.106854917126);\n    new ShapeRef(router, poly83, 83);\n\n    Polygon poly84(4);\n    poly84.ps[0] = Point(-43.87164351502003, 1616.106854917126);\n    poly84.ps[1] = Point(-43.87164351502003, 1636.106854917126);\n    poly84.ps[2] = Point(-75.87164351502003, 1636.106854917126);\n    poly84.ps[3] = Point(-75.87164351502003, 1616.106854917126);\n    new ShapeRef(router, poly84, 84);\n\n    Polygon poly85(4);\n    poly85.ps[0] = Point(410.62835648698, 1658.106854917126);\n    poly85.ps[1] = Point(410.62835648698, 1678.106854917126);\n    poly85.ps[2] = Point(378.62835648698, 1678.106854917126);\n    poly85.ps[3] = Point(378.62835648698, 1658.106854917126);\n    new ShapeRef(router, poly85, 85);\n\n    Polygon poly86(4);\n    poly86.ps[0] = Point(410.62835648698, 1616.106854917126);\n    poly86.ps[1] = Point(410.62835648698, 1636.106854917126);\n    poly86.ps[2] = Point(378.62835648698, 1636.106854917126);\n    poly86.ps[3] = Point(378.62835648698, 1616.106854917126);\n    new ShapeRef(router, poly86, 86);\n\n    Polygon poly87(4);\n    poly87.ps[0] = Point(648.9873402531949, 1616.106854917126);\n    poly87.ps[1] = Point(648.9873402531949, 1636.106854917126);\n    poly87.ps[2] = Point(616.9873402531949, 1636.106854917126);\n    poly87.ps[3] = Point(616.9873402531949, 1616.106854917126);\n    new ShapeRef(router, poly87, 87);\n\n    Polygon poly88(4);\n    poly88.ps[0] = Point(648.9873402531949, 1658.106854917126);\n    poly88.ps[1] = Point(648.9873402531949, 1678.106854917126);\n    poly88.ps[2] = Point(616.9873402531949, 1678.106854917126);\n    poly88.ps[3] = Point(616.9873402531949, 1658.106854917126);\n    new ShapeRef(router, poly88, 88);\n\n    Polygon poly89(4);\n    poly89.ps[0] = Point(1183.12835648898, 1557.106854916126);\n    poly89.ps[1] = Point(1183.12835648898, 1577.106854916126);\n    poly89.ps[2] = Point(1151.12835648898, 1577.106854916126);\n    poly89.ps[3] = Point(1151.12835648898, 1557.106854916126);\n    new ShapeRef(router, poly89, 89);\n\n    Polygon poly90(4);\n    poly90.ps[0] = Point(1183.12835648898, 1696.773521583792);\n    poly90.ps[1] = Point(1183.12835648898, 1716.773521583792);\n    poly90.ps[2] = Point(1151.12835648898, 1716.773521583792);\n    poly90.ps[3] = Point(1151.12835648898, 1696.773521583792);\n    new ShapeRef(router, poly90, 90);\n\n    Polygon poly91(4);\n    poly91.ps[0] = Point(1346.12835648898, 1423.106854916126);\n    poly91.ps[1] = Point(1346.12835648898, 1443.106854916126);\n    poly91.ps[2] = Point(1314.12835648898, 1443.106854916126);\n    poly91.ps[3] = Point(1314.12835648898, 1423.106854916126);\n    new ShapeRef(router, poly91, 91);\n\n    Polygon poly92(4);\n    poly92.ps[0] = Point(1643.12835648998, 1299.606854916126);\n    poly92.ps[1] = Point(1643.12835648998, 1319.606854916126);\n    poly92.ps[2] = Point(1611.12835648998, 1319.606854916126);\n    poly92.ps[3] = Point(1611.12835648998, 1299.606854916126);\n    new ShapeRef(router, poly92, 92);\n\n    Polygon poly93(4);\n    poly93.ps[0] = Point(1610.12835648998, 1616.106854917126);\n    poly93.ps[1] = Point(1610.12835648998, 1636.106854917126);\n    poly93.ps[2] = Point(1578.12835648998, 1636.106854917126);\n    poly93.ps[3] = Point(1578.12835648998, 1616.106854917126);\n    new ShapeRef(router, poly93, 93);\n\n    Polygon poly94(4);\n    poly94.ps[0] = Point(1610.12835648998, 1658.106854917126);\n    poly94.ps[1] = Point(1610.12835648998, 1678.106854917126);\n    poly94.ps[2] = Point(1578.12835648998, 1678.106854917126);\n    poly94.ps[3] = Point(1578.12835648998, 1658.106854917126);\n    new ShapeRef(router, poly94, 94);\n\n    Polygon poly95(4);\n    poly95.ps[0] = Point(1786.12835649098, 1299.606854916126);\n    poly95.ps[1] = Point(1786.12835649098, 1319.606854916126);\n    poly95.ps[2] = Point(1754.12835649098, 1319.606854916126);\n    poly95.ps[3] = Point(1754.12835649098, 1299.606854916126);\n    new ShapeRef(router, poly95, 95);\n\n    Polygon poly96(4);\n    poly96.ps[0] = Point(1786.12835649098, 1637.106854917126);\n    poly96.ps[1] = Point(1786.12835649098, 1657.106854917126);\n    poly96.ps[2] = Point(1754.12835649098, 1657.106854917126);\n    poly96.ps[3] = Point(1754.12835649098, 1637.106854917126);\n    new ShapeRef(router, poly96, 96);\n\n    Polygon poly97(4);\n    poly97.ps[0] = Point(1959.12835649298, 1637.106854917126);\n    poly97.ps[1] = Point(1959.12835649298, 1657.106854917126);\n    poly97.ps[2] = Point(1927.12835649298, 1657.106854917126);\n    poly97.ps[3] = Point(1927.12835649298, 1637.106854917126);\n    new ShapeRef(router, poly97, 97);\n\n    Polygon poly98(4);\n    poly98.ps[0] = Point(-1048.12164351702, -157.9098117515406);\n    poly98.ps[1] = Point(-1048.12164351702, 16.09018824845936);\n    poly98.ps[2] = Point(-1172.12164351702, 16.09018824845936);\n    poly98.ps[3] = Point(-1172.12164351702, -157.9098117515406);\n    new ShapeRef(router, poly98, 98);\n#endif\n\n    Polygon poly99(4);\n    poly99.ps[0] = Point(-452.87164351602, -726.9812403239691);\n    poly99.ps[1] = Point(-452.87164351602, -706.9812403239691);\n    poly99.ps[2] = Point(-484.87164351602, -706.9812403239691);\n    poly99.ps[3] = Point(-484.87164351602, -726.9812403239691);\n    new ShapeRef(router, poly99, 99);\n\n#ifdef REST\n    Polygon poly100(4);\n    poly100.ps[0] = Point(377.62835648698, 749.8568549161259);\n    poly100.ps[1] = Point(377.62835648698, 769.8568549161259);\n    poly100.ps[2] = Point(345.62835648698, 769.8568549161259);\n    poly100.ps[3] = Point(345.62835648698, 749.8568549161259);\n    new ShapeRef(router, poly100, 100);\n\n    Polygon poly101(4);\n    poly101.ps[0] = Point(344.62835648698, 1154.856854916126);\n    poly101.ps[1] = Point(344.62835648698, 1174.856854916126);\n    poly101.ps[2] = Point(312.62835648698, 1174.856854916126);\n    poly101.ps[3] = Point(312.62835648698, 1154.856854916126);\n    new ShapeRef(router, poly101, 101);\n\n    Polygon poly102(4);\n    poly102.ps[0] = Point(1013.914070774694, 870.8568549171259);\n    poly102.ps[1] = Point(1013.914070774694, 902.8568549171259);\n    poly102.ps[2] = Point(993.9140707746942, 902.8568549171259);\n    poly102.ps[3] = Point(993.9140707746942, 870.8568549171259);\n    new ShapeRef(router, poly102, 102);\n\n    Polygon poly103(4);\n    poly103.ps[0] = Point(1643.12835648998, -628.4098117525407);\n    poly103.ps[1] = Point(1643.12835648998, -608.4098117525407);\n    poly103.ps[2] = Point(1611.12835648998, -608.4098117525407);\n    poly103.ps[3] = Point(1611.12835648998, -628.4098117525407);\n    new ShapeRef(router, poly103, 103);\n\n    Polygon poly104(4);\n    poly104.ps[0] = Point(1819.12835649098, -568.5348117525407);\n    poly104.ps[1] = Point(1819.12835649098, -548.5348117525407);\n    poly104.ps[2] = Point(1787.12835649098, -548.5348117525407);\n    poly104.ps[3] = Point(1787.12835649098, -568.5348117525407);\n    new ShapeRef(router, poly104, 104);\n\n    Polygon poly105(4);\n    poly105.ps[0] = Point(476.62835648698, -747.9812403239691);\n    poly105.ps[1] = Point(476.62835648698, -727.9812403239691);\n    poly105.ps[2] = Point(444.62835648698, -727.9812403239691);\n    poly105.ps[3] = Point(444.62835648698, -747.9812403239691);\n    new ShapeRef(router, poly105, 105);\n\n    Polygon poly106(4);\n    poly106.ps[0] = Point(748.62835648798, -817.4098117525407);\n    poly106.ps[1] = Point(748.62835648798, -797.4098117525407);\n    poly106.ps[2] = Point(716.62835648798, -797.4098117525407);\n    poly106.ps[3] = Point(716.62835648798, -817.4098117525407);\n    new ShapeRef(router, poly106, 106);\n\n    Polygon poly107(4);\n    poly107.ps[0] = Point(748.62835648798, -691.4098117525407);\n    poly107.ps[1] = Point(748.62835648798, -671.4098117525407);\n    poly107.ps[2] = Point(716.62835648798, -671.4098117525407);\n    poly107.ps[3] = Point(716.62835648798, -691.4098117525407);\n    new ShapeRef(router, poly107, 107);\n\n    Polygon poly108(4);\n    poly108.ps[0] = Point(992.9140707746942, -480.4098117525406);\n    poly108.ps[1] = Point(992.9140707746942, -448.4098117525406);\n    poly108.ps[2] = Point(972.9140707746942, -448.4098117525406);\n    poly108.ps[3] = Point(972.9140707746942, -480.4098117525406);\n    new ShapeRef(router, poly108, 108);\n\n    Polygon poly109(4);\n    poly109.ps[0] = Point(1247.12835648898, -568.5348117525407);\n    poly109.ps[1] = Point(1247.12835648898, -548.5348117525407);\n    poly109.ps[2] = Point(1215.12835648898, -548.5348117525407);\n    poly109.ps[3] = Point(1215.12835648898, -568.5348117525407);\n    new ShapeRef(router, poly109, 109);\n\n    Polygon poly110(4);\n    poly110.ps[0] = Point(197.62835648698, -136.4098117515406);\n    poly110.ps[1] = Point(197.62835648698, -116.4098117515406);\n    poly110.ps[2] = Point(165.62835648698, -116.4098117515406);\n    poly110.ps[3] = Point(165.62835648698, -136.4098117515406);\n    new ShapeRef(router, poly110, 110);\n\n    Polygon poly111(4);\n    poly111.ps[0] = Point(682.62835648798, -30.40981175154064);\n    poly111.ps[1] = Point(682.62835648798, -10.40981175154064);\n    poly111.ps[2] = Point(650.62835648798, -10.40981175154064);\n    poly111.ps[3] = Point(650.62835648798, -30.40981175154064);\n    new ShapeRef(router, poly111, 111);\n\n    Polygon poly112(4);\n    poly112.ps[0] = Point(927.62835648898, 411.7568549161261);\n    poly112.ps[1] = Point(927.62835648898, 431.7568549161261);\n    poly112.ps[2] = Point(895.62835648898, 431.7568549161261);\n    poly112.ps[3] = Point(895.62835648898, 411.7568549161261);\n    new ShapeRef(router, poly112, 112);\n\n    Polygon poly113(4);\n    poly113.ps[0] = Point(509.62835648698, 411.7568549161261);\n    poly113.ps[1] = Point(509.62835648698, 431.7568549161261);\n    poly113.ps[2] = Point(477.62835648698, 431.7568549161261);\n    poly113.ps[3] = Point(477.62835648698, 411.7568549161261);\n    new ShapeRef(router, poly113, 113);\n\n    Polygon poly114(4);\n    poly114.ps[0] = Point(117.62835648598, 1053.856854916126);\n    poly114.ps[1] = Point(117.62835648598, 1073.856854916126);\n    poly114.ps[2] = Point(85.62835648597996, 1073.856854916126);\n    poly114.ps[3] = Point(85.62835648597996, 1053.856854916126);\n    new ShapeRef(router, poly114, 114);\n\n    Polygon poly115(4);\n    poly115.ps[0] = Point(47.62835648497997, -568.5348117525407);\n    poly115.ps[1] = Point(47.62835648497997, -548.5348117525407);\n    poly115.ps[2] = Point(15.62835648497997, -548.5348117525407);\n    poly115.ps[3] = Point(15.62835648497997, -568.5348117525407);\n    new ShapeRef(router, poly115, 115);\n\n    Polygon poly116(4);\n    poly116.ps[0] = Point(-975.12164351602, -768.9812403239691);\n    poly116.ps[1] = Point(-975.12164351602, -706.9812403239691);\n    poly116.ps[2] = Point(-1037.12164351602, -706.9812403239691);\n    poly116.ps[3] = Point(-1037.12164351602, -768.9812403239691);\n    new ShapeRef(router, poly116, 116);\n\n    Polygon poly117(4);\n    poly117.ps[0] = Point(-975.12164351602, -462.4098117525406);\n    poly117.ps[1] = Point(-975.12164351602, -400.4098117525406);\n    poly117.ps[2] = Point(-1037.12164351602, -400.4098117525406);\n    poly117.ps[3] = Point(-1037.12164351602, -462.4098117525406);\n    new ShapeRef(router, poly117, 117);\n#endif\n\n    Polygon poly118(4);\n    poly118.ps[0] = Point(-664.12164351602, -768.9812403239691);\n    poly118.ps[1] = Point(-664.12164351602, -706.9812403239691);\n    poly118.ps[2] = Point(-726.12164351602, -706.9812403239691);\n    poly118.ps[3] = Point(-726.12164351602, -768.9812403239691);\n    new ShapeRef(router, poly118, 118);\n\n#ifdef REST\n    Polygon poly119(4);\n    poly119.ps[0] = Point(-94.87164351502003, -908.4098117525407);\n    poly119.ps[1] = Point(-94.87164351502003, -846.4098117525407);\n    poly119.ps[2] = Point(-156.87164351502, -846.4098117525407);\n    poly119.ps[3] = Point(-156.87164351502, -908.4098117525407);\n    new ShapeRef(router, poly119, 119);\n\n    Polygon poly120(4);\n    poly120.ps[0] = Point(293.62835648698, -768.9812403239691);\n    poly120.ps[1] = Point(293.62835648698, -706.9812403239691);\n    poly120.ps[2] = Point(231.62835648698, -706.9812403239691);\n    poly120.ps[3] = Point(231.62835648698, -768.9812403239691);\n    new ShapeRef(router, poly120, 120);\n\n    Polygon poly121(4);\n    poly121.ps[0] = Point(-810.12164351602, 637.6568549161261);\n    poly121.ps[1] = Point(-810.12164351602, 699.6568549161261);\n    poly121.ps[2] = Point(-872.12164351602, 699.6568549161261);\n    poly121.ps[3] = Point(-872.12164351602, 637.6568549161261);\n    new ShapeRef(router, poly121, 121);\n\n    Polygon poly122(4);\n    poly122.ps[0] = Point(-810.12164351602, 859.8568549161259);\n    poly122.ps[1] = Point(-810.12164351602, 921.8568549161259);\n    poly122.ps[2] = Point(-872.12164351602, 921.8568549161259);\n    poly122.ps[3] = Point(-872.12164351602, 859.8568549161259);\n    new ShapeRef(router, poly122, 122);\n\n    Polygon poly123(4);\n    poly123.ps[0] = Point(-288.87164351602, -329.4098117515406);\n    poly123.ps[1] = Point(-288.87164351602, -267.4098117515406);\n    poly123.ps[2] = Point(-350.87164351602, -267.4098117515406);\n    poly123.ps[3] = Point(-350.87164351602, -329.4098117515406);\n    new ShapeRef(router, poly123, 123);\n\n    Polygon poly124(4);\n    poly124.ps[0] = Point(212.62835648698, -329.4098117515406);\n    poly124.ps[1] = Point(212.62835648698, -267.4098117515406);\n    poly124.ps[2] = Point(150.62835648698, -267.4098117515406);\n    poly124.ps[3] = Point(150.62835648698, -329.4098117515406);\n    new ShapeRef(router, poly124, 124);\n\n    Polygon poly125(4);\n    poly125.ps[0] = Point(561.62835648798, -329.4098117515406);\n    poly125.ps[1] = Point(561.62835648798, -267.4098117515406);\n    poly125.ps[2] = Point(499.62835648798, -267.4098117515406);\n    poly125.ps[3] = Point(499.62835648798, -329.4098117515406);\n    new ShapeRef(router, poly125, 125);\n\n    Polygon poly126(4);\n    poly126.ps[0] = Point(1013.914070774694, -329.4098117515406);\n    poly126.ps[1] = Point(1013.914070774694, -267.4098117515406);\n    poly126.ps[2] = Point(951.9140707746942, -267.4098117515406);\n    poly126.ps[3] = Point(951.9140707746942, -329.4098117515406);\n    new ShapeRef(router, poly126, 126);\n\n    Polygon poly127(4);\n    poly127.ps[0] = Point(1545.12835648898, -329.4098117515406);\n    poly127.ps[1] = Point(1545.12835648898, -267.4098117515406);\n    poly127.ps[2] = Point(1483.12835648898, -267.4098117515406);\n    poly127.ps[3] = Point(1483.12835648898, -329.4098117515406);\n    new ShapeRef(router, poly127, 127);\n\n    Polygon poly128(4);\n    poly128.ps[0] = Point(-664.12164351602, 35.25685491512604);\n    poly128.ps[1] = Point(-664.12164351602, 97.25685491512604);\n    poly128.ps[2] = Point(-726.12164351602, 97.25685491512604);\n    poly128.ps[3] = Point(-726.12164351602, 35.25685491512604);\n    new ShapeRef(router, poly128, 128);\n\n    Polygon poly129(4);\n    poly129.ps[0] = Point(-288.87164351602, 35.25685491512604);\n    poly129.ps[1] = Point(-288.87164351602, 97.25685491512604);\n    poly129.ps[2] = Point(-350.87164351602, 97.25685491512604);\n    poly129.ps[3] = Point(-350.87164351602, 35.25685491512604);\n    new ShapeRef(router, poly129, 129);\n\n    Polygon poly130(4);\n    poly130.ps[0] = Point(-664.12164351602, 1616.106854917126);\n    poly130.ps[1] = Point(-664.12164351602, 1678.106854917126);\n    poly130.ps[2] = Point(-726.12164351602, 1678.106854917126);\n    poly130.ps[3] = Point(-726.12164351602, 1616.106854917126);\n    new ShapeRef(router, poly130, 130);\n\n    Polygon poly131(4);\n    poly131.ps[0] = Point(-288.87164351602, 1616.106854917126);\n    poly131.ps[1] = Point(-288.87164351602, 1678.106854917126);\n    poly131.ps[2] = Point(-350.87164351602, 1678.106854917126);\n    poly131.ps[3] = Point(-350.87164351602, 1616.106854917126);\n    new ShapeRef(router, poly131, 131);\n\n    Polygon poly132(4);\n    poly132.ps[0] = Point(212.62835648698, 1616.106854917126);\n    poly132.ps[1] = Point(212.62835648698, 1678.106854917126);\n    poly132.ps[2] = Point(150.62835648698, 1678.106854917126);\n    poly132.ps[3] = Point(150.62835648698, 1616.106854917126);\n    new ShapeRef(router, poly132, 132);\n\n    Polygon poly133(4);\n    poly133.ps[0] = Point(561.62835648798, 1616.106854917126);\n    poly133.ps[1] = Point(561.62835648798, 1678.106854917126);\n    poly133.ps[2] = Point(499.62835648798, 1678.106854917126);\n    poly133.ps[3] = Point(499.62835648798, 1616.106854917126);\n    new ShapeRef(router, poly133, 133);\n\n    Polygon poly134(4);\n    poly134.ps[0] = Point(1013.914070774694, 1616.106854917126);\n    poly134.ps[1] = Point(1013.914070774694, 1678.106854917126);\n    poly134.ps[2] = Point(951.9140707746942, 1678.106854917126);\n    poly134.ps[3] = Point(951.9140707746942, 1616.106854917126);\n    new ShapeRef(router, poly134, 134);\n\n    Polygon poly135(4);\n    poly135.ps[0] = Point(1427.12835648898, 1708.773521583792);\n    poly135.ps[1] = Point(1427.12835648898, 1770.773521583792);\n    poly135.ps[2] = Point(1365.12835648898, 1770.773521583792);\n    poly135.ps[3] = Point(1365.12835648898, 1708.773521583792);\n    new ShapeRef(router, poly135, 135);\n\n    Polygon poly136(4);\n    poly136.ps[0] = Point(1731.12835648998, 1278.606854916126);\n    poly136.ps[1] = Point(1731.12835648998, 1340.606854916126);\n    poly136.ps[2] = Point(1669.12835648998, 1340.606854916126);\n    poly136.ps[3] = Point(1669.12835648998, 1278.606854916126);\n    new ShapeRef(router, poly136, 136);\n\n    Polygon poly137(4);\n    poly137.ps[0] = Point(1904.12835649198, 1278.606854916126);\n    poly137.ps[1] = Point(1904.12835649198, 1340.606854916126);\n    poly137.ps[2] = Point(1842.12835649198, 1340.606854916126);\n    poly137.ps[3] = Point(1842.12835649198, 1278.606854916126);\n    new ShapeRef(router, poly137, 137);\n\n    Polygon poly138(4);\n    poly138.ps[0] = Point(1545.12835648898, 1616.106854917126);\n    poly138.ps[1] = Point(1545.12835648898, 1678.106854917126);\n    poly138.ps[2] = Point(1483.12835648898, 1678.106854917126);\n    poly138.ps[3] = Point(1483.12835648898, 1616.106854917126);\n    new ShapeRef(router, poly138, 138);\n\n    Polygon poly139(4);\n    poly139.ps[0] = Point(1165.12835648898, 1402.106854916126);\n    poly139.ps[1] = Point(1165.12835648898, 1464.106854916126);\n    poly139.ps[2] = Point(1103.12835648898, 1464.106854916126);\n    poly139.ps[3] = Point(1103.12835648898, 1402.106854916126);\n    new ShapeRef(router, poly139, 139);\n\n    Polygon poly140(4);\n    poly140.ps[0] = Point(1731.12835648998, 1616.106854917126);\n    poly140.ps[1] = Point(1731.12835648998, 1678.106854917126);\n    poly140.ps[2] = Point(1669.12835648998, 1678.106854917126);\n    poly140.ps[3] = Point(1669.12835648998, 1616.106854917126);\n    new ShapeRef(router, poly140, 140);\n\n    Polygon poly141(4);\n    poly141.ps[0] = Point(1904.12835649198, 1616.106854917126);\n    poly141.ps[1] = Point(1904.12835649198, 1678.106854917126);\n    poly141.ps[2] = Point(1842.12835649198, 1678.106854917126);\n    poly141.ps[3] = Point(1842.12835649198, 1616.106854917126);\n    new ShapeRef(router, poly141, 141);\n\n    Polygon poly142(4);\n    poly142.ps[0] = Point(2077.795023159646, 1616.106854917126);\n    poly142.ps[1] = Point(2077.795023159646, 1678.106854917126);\n    poly142.ps[2] = Point(2015.795023159646, 1678.106854917126);\n    poly142.ps[3] = Point(2015.795023159646, 1616.106854917126);\n    new ShapeRef(router, poly142, 142);\n\n    Polygon poly143(4);\n    poly143.ps[0] = Point(2077.795023159646, 2.256854915126041);\n    poly143.ps[1] = Point(2077.795023159646, 64.25685491512604);\n    poly143.ps[2] = Point(2015.795023159646, 64.25685491512604);\n    poly143.ps[3] = Point(2015.795023159646, 2.256854915126041);\n    new ShapeRef(router, poly143, 143);\n\n    Polygon poly144(4);\n    poly144.ps[0] = Point(2011.795023159646, 68.25685491512604);\n    poly144.ps[1] = Point(2011.795023159646, 130.256854915126);\n    poly144.ps[2] = Point(1949.795023159646, 130.256854915126);\n    poly144.ps[3] = Point(1949.795023159646, 68.25685491512604);\n    new ShapeRef(router, poly144, 144);\n\n    Polygon poly145(4);\n    poly145.ps[0] = Point(1731.12835648998, 2.256854915126041);\n    poly145.ps[1] = Point(1731.12835648998, 64.25685491512604);\n    poly145.ps[2] = Point(1669.12835648998, 64.25685491512604);\n    poly145.ps[3] = Point(1669.12835648998, 2.256854915126041);\n    new ShapeRef(router, poly145, 145);\n\n    Polygon poly146(4);\n    poly146.ps[0] = Point(2077.795023159646, -329.4098117515406);\n    poly146.ps[1] = Point(2077.795023159646, -267.4098117515406);\n    poly146.ps[2] = Point(2015.795023159646, -267.4098117515406);\n    poly146.ps[3] = Point(2015.795023159646, -329.4098117515406);\n    new ShapeRef(router, poly146, 146);\n\n    Polygon poly147(4);\n    poly147.ps[0] = Point(1904.12835649198, -329.4098117515406);\n    poly147.ps[1] = Point(1904.12835649198, -267.4098117515406);\n    poly147.ps[2] = Point(1842.12835649198, -267.4098117515406);\n    poly147.ps[3] = Point(1842.12835649198, -329.4098117515406);\n    new ShapeRef(router, poly147, 147);\n\n    Polygon poly148(4);\n    poly148.ps[0] = Point(1731.12835648998, -329.4098117515406);\n    poly148.ps[1] = Point(1731.12835648998, -267.4098117515406);\n    poly148.ps[2] = Point(1669.12835648998, -267.4098117515406);\n    poly148.ps[3] = Point(1669.12835648998, -329.4098117515406);\n    new ShapeRef(router, poly148, 148);\n\n    Polygon poly149(4);\n    poly149.ps[0] = Point(1295.12835648898, 35.25685491512604);\n    poly149.ps[1] = Point(1295.12835648898, 97.25685491512604);\n    poly149.ps[2] = Point(1233.12835648898, 97.25685491512604);\n    poly149.ps[3] = Point(1233.12835648898, 35.25685491512604);\n    new ShapeRef(router, poly149, 149);\n\n    Polygon poly150(4);\n    poly150.ps[0] = Point(1013.914070774694, 35.25685491512604);\n    poly150.ps[1] = Point(1013.914070774694, 97.25685491512604);\n    poly150.ps[2] = Point(951.9140707746942, 97.25685491512604);\n    poly150.ps[3] = Point(951.9140707746942, 35.25685491512604);\n    new ShapeRef(router, poly150, 150);\n\n    Polygon poly151(4);\n    poly151.ps[0] = Point(561.62835648798, 35.25685491512604);\n    poly151.ps[1] = Point(561.62835648798, 97.25685491512604);\n    poly151.ps[2] = Point(499.62835648798, 97.25685491512604);\n    poly151.ps[3] = Point(499.62835648798, 35.25685491512604);\n    new ShapeRef(router, poly151, 151);\n\n    Polygon poly152(4);\n    poly152.ps[0] = Point(212.62835648698, 35.25685491512604);\n    poly152.ps[1] = Point(212.62835648698, 97.25685491512604);\n    poly152.ps[2] = Point(150.62835648698, 97.25685491512604);\n    poly152.ps[3] = Point(150.62835648698, 35.25685491512604);\n    new ShapeRef(router, poly152, 152);\n\n    Polygon poly153(4);\n    poly153.ps[0] = Point(212.62835648698, 1468.106854916126);\n    poly153.ps[1] = Point(212.62835648698, 1530.106854916126);\n    poly153.ps[2] = Point(150.62835648698, 1530.106854916126);\n    poly153.ps[3] = Point(150.62835648698, 1468.106854916126);\n    new ShapeRef(router, poly153, 153);\n\n    Polygon poly154(4);\n    poly154.ps[0] = Point(146.62835648698, 1435.106854916126);\n    poly154.ps[1] = Point(146.62835648698, 1497.106854916126);\n    poly154.ps[2] = Point(84.62835648697995, 1497.106854916126);\n    poly154.ps[3] = Point(84.62835648697995, 1435.106854916126);\n    new ShapeRef(router, poly154, 154);\n\n    Polygon poly155(4);\n    poly155.ps[0] = Point(146.62835648698, 1223.856854916126);\n    poly155.ps[1] = Point(146.62835648698, 1285.856854916126);\n    poly155.ps[2] = Point(84.62835648697995, 1285.856854916126);\n    poly155.ps[3] = Point(84.62835648697995, 1223.856854916126);\n    new ShapeRef(router, poly155, 155);\n\n    Polygon poly156(4);\n    poly156.ps[0] = Point(-288.87164351602, 1112.856854916126);\n    poly156.ps[1] = Point(-288.87164351602, 1174.856854916126);\n    poly156.ps[2] = Point(-350.87164351602, 1174.856854916126);\n    poly156.ps[3] = Point(-350.87164351602, 1112.856854916126);\n    new ShapeRef(router, poly156, 156);\n\n    Polygon poly157(4);\n    poly157.ps[0] = Point(212.62835648698, 1112.856854916126);\n    poly157.ps[1] = Point(212.62835648698, 1174.856854916126);\n    poly157.ps[2] = Point(150.62835648698, 1174.856854916126);\n    poly157.ps[3] = Point(150.62835648698, 1112.856854916126);\n    new ShapeRef(router, poly157, 157);\n\n    Polygon poly158(4);\n    poly158.ps[0] = Point(561.62835648798, 1112.856854916126);\n    poly158.ps[1] = Point(561.62835648798, 1174.856854916126);\n    poly158.ps[2] = Point(499.62835648798, 1174.856854916126);\n    poly158.ps[3] = Point(499.62835648798, 1112.856854916126);\n    new ShapeRef(router, poly158, 158);\n\n    Polygon poly159(4);\n    poly159.ps[0] = Point(1013.914070774694, 1112.856854916126);\n    poly159.ps[1] = Point(1013.914070774694, 1174.856854916126);\n    poly159.ps[2] = Point(951.9140707746942, 1174.856854916126);\n    poly159.ps[3] = Point(951.9140707746942, 1112.856854916126);\n    new ShapeRef(router, poly159, 159);\n\n    Polygon poly160(4);\n    poly160.ps[0] = Point(1013.914070774694, 707.8568549161259);\n    poly160.ps[1] = Point(1013.914070774694, 769.8568549161259);\n    poly160.ps[2] = Point(951.9140707746942, 769.8568549161259);\n    poly160.ps[3] = Point(951.9140707746942, 707.8568549161259);\n    new ShapeRef(router, poly160, 160);\n\n    Polygon poly161(4);\n    poly161.ps[0] = Point(561.62835648798, 707.8568549161259);\n    poly161.ps[1] = Point(561.62835648798, 769.8568549161259);\n    poly161.ps[2] = Point(499.62835648798, 769.8568549161259);\n    poly161.ps[3] = Point(499.62835648798, 707.8568549161259);\n    new ShapeRef(router, poly161, 161);\n\n    Polygon poly162(4);\n    poly162.ps[0] = Point(212.62835648698, 707.8568549161259);\n    poly162.ps[1] = Point(212.62835648698, 769.8568549161259);\n    poly162.ps[2] = Point(150.62835648698, 769.8568549161259);\n    poly162.ps[3] = Point(150.62835648698, 707.8568549161259);\n    new ShapeRef(router, poly162, 162);\n\n    Polygon poly163(4);\n    poly163.ps[0] = Point(-288.87164351602, 707.8568549161259);\n    poly163.ps[1] = Point(-288.87164351602, 769.8568549161259);\n    poly163.ps[2] = Point(-350.87164351602, 769.8568549161259);\n    poly163.ps[3] = Point(-350.87164351602, 707.8568549161259);\n    new ShapeRef(router, poly163, 163);\n\n    Polygon poly164(4);\n    poly164.ps[0] = Point(-404.87164351602, 604.6568549161261);\n    poly164.ps[1] = Point(-404.87164351602, 666.6568549161261);\n    poly164.ps[2] = Point(-466.87164351602, 666.6568549161261);\n    poly164.ps[3] = Point(-466.87164351602, 604.6568549161261);\n    new ShapeRef(router, poly164, 164);\n\n    Polygon poly165(4);\n    poly165.ps[0] = Point(-404.87164351602, 423.7568549161261);\n    poly165.ps[1] = Point(-404.87164351602, 485.7568549161261);\n    poly165.ps[2] = Point(-466.87164351602, 485.7568549161261);\n    poly165.ps[3] = Point(-466.87164351602, 423.7568549161261);\n    new ShapeRef(router, poly165, 165);\n\n    Polygon poly166(4);\n    poly166.ps[0] = Point(146.62835648698, 604.6568549161261);\n    poly166.ps[1] = Point(146.62835648698, 666.6568549161261);\n    poly166.ps[2] = Point(84.62835648697995, 666.6568549161261);\n    poly166.ps[3] = Point(84.62835648697995, 604.6568549161261);\n    new ShapeRef(router, poly166, 166);\n\n    Polygon poly167(4);\n    poly167.ps[0] = Point(146.62835648698, 423.7568549161261);\n    poly167.ps[1] = Point(146.62835648698, 485.7568549161261);\n    poly167.ps[2] = Point(84.62835648697995, 485.7568549161261);\n    poly167.ps[3] = Point(84.62835648697995, 423.7568549161261);\n    new ShapeRef(router, poly167, 167);\n\n    Polygon poly168(4);\n    poly168.ps[0] = Point(909.62835648898, 548.006854916126);\n    poly168.ps[1] = Point(909.62835648898, 610.006854916126);\n    poly168.ps[2] = Point(847.62835648898, 610.006854916126);\n    poly168.ps[3] = Point(847.62835648898, 548.006854916126);\n    new ShapeRef(router, poly168, 168);\n\n    Polygon poly169(4);\n    poly169.ps[0] = Point(1099.12835648898, 548.006854916126);\n    poly169.ps[1] = Point(1099.12835648898, 610.006854916126);\n    poly169.ps[2] = Point(1037.12835648898, 610.006854916126);\n    poly169.ps[3] = Point(1037.12835648898, 548.006854916126);\n    new ShapeRef(router, poly169, 169);\n\n    Polygon poly170(4);\n    poly170.ps[0] = Point(1328.12835648898, 548.006854916126);\n    poly170.ps[1] = Point(1328.12835648898, 610.006854916126);\n    poly170.ps[2] = Point(1266.12835648898, 610.006854916126);\n    poly170.ps[3] = Point(1266.12835648898, 548.006854916126);\n    new ShapeRef(router, poly170, 170);\n\n    Polygon poly171(4);\n    poly171.ps[0] = Point(1731.12835648998, -589.5348117525407);\n    poly171.ps[1] = Point(1731.12835648998, -527.5348117525407);\n    poly171.ps[2] = Point(1669.12835648998, -527.5348117525407);\n    poly171.ps[3] = Point(1669.12835648998, -589.5348117525407);\n    new ShapeRef(router, poly171, 171);\n\n    Polygon poly172(4);\n    poly172.ps[0] = Point(1904.12835649198, -589.5348117525407);\n    poly172.ps[1] = Point(1904.12835649198, -527.5348117525407);\n    poly172.ps[2] = Point(1842.12835649198, -527.5348117525407);\n    poly172.ps[3] = Point(1842.12835649198, -589.5348117525407);\n    new ShapeRef(router, poly172, 172);\n\n    Polygon poly173(4);\n    poly173.ps[0] = Point(-195.87164351502, -768.9812403239691);\n    poly173.ps[1] = Point(-195.87164351502, -706.9812403239691);\n    poly173.ps[2] = Point(-257.87164351502, -706.9812403239691);\n    poly173.ps[3] = Point(-257.87164351502, -768.9812403239691);\n    new ShapeRef(router, poly173, 173);\n\n    Polygon poly174(4);\n    poly174.ps[0] = Point(975.62835648898, -712.4098117525407);\n    poly174.ps[1] = Point(975.62835648898, -650.4098117525407);\n    poly174.ps[2] = Point(913.62835648898, -650.4098117525407);\n    poly174.ps[3] = Point(913.62835648898, -712.4098117525407);\n    new ShapeRef(router, poly174, 174);\n\n    Polygon poly175(4);\n    poly175.ps[0] = Point(975.62835648898, -838.4098117525407);\n    poly175.ps[1] = Point(975.62835648898, -776.4098117525407);\n    poly175.ps[2] = Point(913.62835648898, -776.4098117525407);\n    poly175.ps[3] = Point(913.62835648898, -838.4098117525407);\n    new ShapeRef(router, poly175, 175);\n\n    Polygon poly176(4);\n    poly176.ps[0] = Point(1099.12835648898, -589.5348117525407);\n    poly176.ps[1] = Point(1099.12835648898, -527.5348117525407);\n    poly176.ps[2] = Point(1037.12835648898, -527.5348117525407);\n    poly176.ps[3] = Point(1037.12835648898, -589.5348117525407);\n    new ShapeRef(router, poly176, 176);\n\n    Polygon poly177(4);\n    poly177.ps[0] = Point(1394.12835648898, -589.5348117525407);\n    poly177.ps[1] = Point(1394.12835648898, -527.5348117525407);\n    poly177.ps[2] = Point(1332.12835648898, -527.5348117525407);\n    poly177.ps[3] = Point(1332.12835648898, -589.5348117525407);\n    new ShapeRef(router, poly177, 177);\n\n    Polygon poly178(4);\n    poly178.ps[0] = Point(876.62835648898, -51.40981175154064);\n    poly178.ps[1] = Point(876.62835648898, 10.59018824845936);\n    poly178.ps[2] = Point(814.62835648898, 10.59018824845936);\n    poly178.ps[3] = Point(814.62835648898, -51.40981175154064);\n    new ShapeRef(router, poly178, 178);\n\n    Polygon poly179(4);\n    poly179.ps[0] = Point(326.62835648698, 390.7568549161261);\n    poly179.ps[1] = Point(326.62835648698, 452.7568549161261);\n    poly179.ps[2] = Point(264.62835648698, 452.7568549161261);\n    poly179.ps[3] = Point(264.62835648698, 390.7568549161261);\n    new ShapeRef(router, poly179, 179);\n\n    Polygon poly180(4);\n    poly180.ps[0] = Point(212.62835648698, -589.5348117525407);\n    poly180.ps[1] = Point(212.62835648698, -527.5348117525407);\n    poly180.ps[2] = Point(150.62835648698, -527.5348117525407);\n    poly180.ps[3] = Point(150.62835648698, -589.5348117525407);\n    new ShapeRef(router, poly180, 180);\n\n    Polygon poly181(4);\n    poly181.ps[0] = Point(594.62835648798, 390.7568549161261);\n    poly181.ps[1] = Point(594.62835648798, 452.7568549161261);\n    poly181.ps[2] = Point(532.62835648798, 452.7568549161261);\n    poly181.ps[3] = Point(532.62835648798, 390.7568549161261);\n    new ShapeRef(router, poly181, 181);\n\n    Polygon poly182(4);\n    poly182.ps[0] = Point(1698.12835648998, 604.6568549161261);\n    poly182.ps[1] = Point(1698.12835648998, 666.6568549161261);\n    poly182.ps[2] = Point(1636.12835648998, 666.6568549161261);\n    poly182.ps[3] = Point(1636.12835648998, 604.6568549161261);\n    new ShapeRef(router, poly182, 182);\n\n    Polygon poly183(4);\n    poly183.ps[0] = Point(1574.12835648898, 625.6568549161261);\n    poly183.ps[1] = Point(1574.12835648898, 645.6568549161261);\n    poly183.ps[2] = Point(1542.12835648898, 645.6568549161261);\n    poly183.ps[3] = Point(1542.12835648898, 625.6568549161261);\n    new ShapeRef(router, poly183, 183);\n\n    Polygon poly184(4);\n    poly184.ps[0] = Point(1753.12835649098, 625.6568549161261);\n    poly184.ps[1] = Point(1753.12835649098, 645.6568549161261);\n    poly184.ps[2] = Point(1721.12835649098, 645.6568549161261);\n    poly184.ps[3] = Point(1721.12835649098, 625.6568549161261);\n    new ShapeRef(router, poly184, 184);\n\n    Polygon poly185(4);\n    poly185.ps[0] = Point(1904.12835649198, 604.6568549161261);\n    poly185.ps[1] = Point(1904.12835649198, 666.6568549161261);\n    poly185.ps[2] = Point(1842.12835649198, 666.6568549161261);\n    poly185.ps[3] = Point(1842.12835649198, 604.6568549161261);\n    new ShapeRef(router, poly185, 185);\n\n    Polygon poly186(4);\n    poly186.ps[0] = Point(1867.12835649098, 456.756854916126);\n    poly186.ps[1] = Point(1867.12835649098, 518.756854916126);\n    poly186.ps[2] = Point(1805.12835649098, 518.756854916126);\n    poly186.ps[3] = Point(1805.12835649098, 456.756854916126);\n    new ShapeRef(router, poly186, 186);\n\n    Polygon poly187(4);\n    poly187.ps[0] = Point(2184.795023161646, 604.6568549161261);\n    poly187.ps[1] = Point(2184.795023161646, 666.6568549161261);\n    poly187.ps[2] = Point(2122.795023161646, 666.6568549161261);\n    poly187.ps[3] = Point(2122.795023161646, 604.6568549161261);\n    new ShapeRef(router, poly187, 187);\n\n    Polygon poly188(4);\n    poly188.ps[0] = Point(2249.795023162646, 604.6568549161261);\n    poly188.ps[1] = Point(2249.795023162646, 624.6568549161261);\n    poly188.ps[2] = Point(2217.795023162646, 624.6568549161261);\n    poly188.ps[3] = Point(2217.795023162646, 604.6568549161261);\n    new ShapeRef(router, poly188, 188);\n\n    Polygon poly189(4);\n    poly189.ps[0] = Point(2344.795023163646, 604.6568549161261);\n    poly189.ps[1] = Point(2344.795023163646, 666.6568549161261);\n    poly189.ps[2] = Point(2282.795023163646, 666.6568549161261);\n    poly189.ps[3] = Point(2282.795023163646, 604.6568549161261);\n    new ShapeRef(router, poly189, 189);\n\n    Polygon poly190(4);\n    poly190.ps[0] = Point(2044.795023159646, 604.6568549161261);\n    poly190.ps[1] = Point(2044.795023159646, 666.6568549161261);\n    poly190.ps[2] = Point(1982.795023159646, 666.6568549161261);\n    poly190.ps[3] = Point(1982.795023159646, 604.6568549161261);\n    new ShapeRef(router, poly190, 190);\n\n    Polygon poly191(4);\n    poly191.ps[0] = Point(2099.795023160646, 625.6568549161261);\n    poly191.ps[1] = Point(2099.795023160646, 645.6568549161261);\n    poly191.ps[2] = Point(2067.795023160646, 645.6568549161261);\n    poly191.ps[3] = Point(2067.795023160646, 625.6568549161261);\n    new ShapeRef(router, poly191, 191);\n\n    Polygon poly192(4);\n    poly192.ps[0] = Point(2249.795023162646, 646.6568549161261);\n    poly192.ps[1] = Point(2249.795023162646, 666.6568549161261);\n    poly192.ps[2] = Point(2217.795023162646, 666.6568549161261);\n    poly192.ps[3] = Point(2217.795023162646, 646.6568549161261);\n    new ShapeRef(router, poly192, 192);\n\n    Polygon poly193(4);\n    poly193.ps[0] = Point(1698.12835648998, 330.2568549161261);\n    poly193.ps[1] = Point(1698.12835648998, 392.2568549161261);\n    poly193.ps[2] = Point(1636.12835648998, 392.2568549161261);\n    poly193.ps[3] = Point(1636.12835648998, 330.2568549161261);\n    new ShapeRef(router, poly193, 193);\n\n    Polygon poly194(4);\n    poly194.ps[0] = Point(1753.12835649098, 351.2568549161261);\n    poly194.ps[1] = Point(1753.12835649098, 371.2568549161261);\n    poly194.ps[2] = Point(1721.12835649098, 371.2568549161261);\n    poly194.ps[3] = Point(1721.12835649098, 351.2568549161261);\n    new ShapeRef(router, poly194, 194);\n\n    Polygon poly195(4);\n    poly195.ps[0] = Point(1643.12835648998, -507.4098117525407);\n    poly195.ps[1] = Point(1643.12835648998, -487.4098117525407);\n    poly195.ps[2] = Point(1611.12835648998, -487.4098117525407);\n    poly195.ps[3] = Point(1611.12835648998, -507.4098117525407);\n    new ShapeRef(router, poly195, 195);\n\n    Polygon poly196(4);\n    poly196.ps[0] = Point(267.62835648698, 1355.606854916126);\n    poly196.ps[1] = Point(267.62835648698, 1395.606854916126);\n    poly196.ps[2] = Point(191.62835648698, 1395.606854916126);\n    poly196.ps[3] = Point(191.62835648698, 1355.606854916126);\n    new ShapeRef(router, poly196, 196);\n\n    Polygon poly197(4);\n    poly197.ps[0] = Point(1971.12835649298, -36.74314508487396);\n    poly197.ps[1] = Point(1971.12835649298, 23.25685491512604);\n    poly197.ps[2] = Point(1915.12835649298, 23.25685491512604);\n    poly197.ps[3] = Point(1915.12835649298, -36.74314508487396);\n    new ShapeRef(router, poly197, 197);\n\n    Polygon poly198(4);\n    poly198.ps[0] = Point(455.62835648698, -389.4098117515406);\n    poly198.ps[1] = Point(455.62835648698, -329.4098117515406);\n    poly198.ps[2] = Point(399.62835648698, -329.4098117515406);\n    poly198.ps[3] = Point(399.62835648698, -389.4098117515406);\n    new ShapeRef(router, poly198, 198);\n\n    Polygon poly199(4);\n    poly199.ps[0] = Point(59.62835648497997, 875.8568549161259);\n    poly199.ps[1] = Point(59.62835648497997, 935.8568549161259);\n    poly199.ps[2] = Point(3.628356484979975, 935.8568549161259);\n    poly199.ps[3] = Point(3.628356484979975, 875.8568549161259);\n    new ShapeRef(router, poly199, 199);\n\n    Polygon poly200(4);\n    poly200.ps[0] = Point(499.62835648798, 1322.606854916126);\n    poly200.ps[1] = Point(499.62835648798, 1362.606854916126);\n    poly200.ps[2] = Point(423.6283564879799, 1362.606854916126);\n    poly200.ps[3] = Point(423.6283564879799, 1322.606854916126);\n    new ShapeRef(router, poly200, 200);\n\n    Polygon poly201(4);\n    poly201.ps[0] = Point(-920.12164351602, -285.4098117515406);\n    poly201.ps[1] = Point(-920.12164351602, -245.4098117515406);\n    poly201.ps[2] = Point(-996.12164351602, -245.4098117515406);\n    poly201.ps[3] = Point(-996.12164351602, -285.4098117515406);\n    new ShapeRef(router, poly201, 201);\n\n    Polygon poly202(4);\n    poly202.ps[0] = Point(-920.12164351602, -517.4098117525407);\n    poly202.ps[1] = Point(-920.12164351602, -477.4098117525407);\n    poly202.ps[2] = Point(-996.12164351602, -477.4098117525407);\n    poly202.ps[3] = Point(-996.12164351602, -517.4098117525407);\n    new ShapeRef(router, poly202, 202);\n\n    Polygon poly203(4);\n    poly203.ps[0] = Point(-780.12164351602, -807.9812403239691);\n    poly203.ps[1] = Point(-780.12164351602, -747.9812403239691);\n    poly203.ps[2] = Point(-836.12164351602, -747.9812403239691);\n    poly203.ps[3] = Point(-836.12164351602, -807.9812403239691);\n    new ShapeRef(router, poly203, 203);\n\n    Polygon poly204(4);\n    poly204.ps[0] = Point(-440.87164351602, -903.9812403239691);\n    poly204.ps[1] = Point(-440.87164351602, -843.9812403239691);\n    poly204.ps[2] = Point(-496.87164351602, -843.9812403239691);\n    poly204.ps[3] = Point(-496.87164351602, -903.9812403239691);\n    new ShapeRef(router, poly204, 204);\n\n    Polygon poly205(4);\n    poly205.ps[0] = Point(-440.87164351602, -828.9812403239691);\n    poly205.ps[1] = Point(-440.87164351602, -768.9812403239691);\n    poly205.ps[2] = Point(-496.87164351602, -768.9812403239691);\n    poly205.ps[3] = Point(-496.87164351602, -828.9812403239691);\n    new ShapeRef(router, poly205, 205);\n\n    Polygon poly206(4);\n    poly206.ps[0] = Point(143.62835648698, -807.9812403239691);\n    poly206.ps[1] = Point(143.62835648698, -747.9812403239691);\n    poly206.ps[2] = Point(87.62835648697995, -747.9812403239691);\n    poly206.ps[3] = Point(87.62835648697995, -807.9812403239691);\n    new ShapeRef(router, poly206, 206);\n\n    Polygon poly207(4);\n    poly207.ps[0] = Point(-473.87164351602, -567.4098117525407);\n    poly207.ps[1] = Point(-473.87164351602, -507.4098117525407);\n    poly207.ps[2] = Point(-529.87164351602, -507.4098117525407);\n    poly207.ps[3] = Point(-529.87164351602, -567.4098117525407);\n    new ShapeRef(router, poly207, 207);\n\n    Polygon poly208(4);\n    poly208.ps[0] = Point(-473.87164351602, -448.4098117525406);\n    poly208.ps[1] = Point(-473.87164351602, -388.4098117525406);\n    poly208.ps[2] = Point(-529.87164351602, -388.4098117525406);\n    poly208.ps[3] = Point(-529.87164351602, -448.4098117525406);\n    new ShapeRef(router, poly208, 208);\n\n    Polygon poly209(4);\n    poly209.ps[0] = Point(124.62835648598, -267.4098117515406);\n    poly209.ps[1] = Point(124.62835648598, -207.4098117515406);\n    poly209.ps[2] = Point(68.62835648597996, -207.4098117515406);\n    poly209.ps[3] = Point(68.62835648597996, -267.4098117515406);\n    new ShapeRef(router, poly209, 209);\n\n    Polygon poly210(4);\n    poly210.ps[0] = Point(124.62835648598, -192.4098117515406);\n    poly210.ps[1] = Point(124.62835648598, -132.4098117515406);\n    poly210.ps[2] = Point(68.62835648597996, -132.4098117515406);\n    poly210.ps[3] = Point(68.62835648597996, -192.4098117515406);\n    new ShapeRef(router, poly210, 210);\n\n    Polygon poly211(4);\n    poly211.ps[0] = Point(455.62835648698, -267.4098117515406);\n    poly211.ps[1] = Point(455.62835648698, -207.4098117515406);\n    poly211.ps[2] = Point(399.62835648698, -207.4098117515406);\n    poly211.ps[3] = Point(399.62835648698, -267.4098117515406);\n    new ShapeRef(router, poly211, 211);\n\n    Polygon poly212(4);\n    poly212.ps[0] = Point(455.62835648698, -192.4098117515406);\n    poly212.ps[1] = Point(455.62835648698, -132.4098117515406);\n    poly212.ps[2] = Point(399.62835648698, -132.4098117515406);\n    poly212.ps[3] = Point(399.62835648698, -192.4098117515406);\n    new ShapeRef(router, poly212, 212);\n\n    Polygon poly213(4);\n    poly213.ps[0] = Point(-212.87164351602, -179.4098117515406);\n    poly213.ps[1] = Point(-212.87164351602, -139.4098117515406);\n    poly213.ps[2] = Point(-288.87164351602, -139.4098117515406);\n    poly213.ps[3] = Point(-288.87164351602, -179.4098117515406);\n    new ShapeRef(router, poly213, 213);\n\n    Polygon poly214(4);\n    poly214.ps[0] = Point(-350.87164351602, -179.4098117515406);\n    poly214.ps[1] = Point(-350.87164351602, -139.4098117515406);\n    poly214.ps[2] = Point(-426.87164351602, -139.4098117515406);\n    poly214.ps[3] = Point(-426.87164351602, -179.4098117515406);\n    new ShapeRef(router, poly214, 214);\n\n    Polygon poly215(4);\n    poly215.ps[0] = Point(124.62835648598, -464.4098117515406);\n    poly215.ps[1] = Point(124.62835648598, -404.4098117515406);\n    poly215.ps[2] = Point(68.62835648597996, -404.4098117515406);\n    poly215.ps[3] = Point(68.62835648597996, -464.4098117515406);\n    new ShapeRef(router, poly215, 215);\n\n    Polygon poly216(4);\n    poly216.ps[0] = Point(124.62835648598, -389.4098117515406);\n    poly216.ps[1] = Point(124.62835648598, -329.4098117515406);\n    poly216.ps[2] = Point(68.62835648597996, -329.4098117515406);\n    poly216.ps[3] = Point(68.62835648597996, -389.4098117515406);\n    new ShapeRef(router, poly216, 216);\n\n    Polygon poly217(4);\n    poly217.ps[0] = Point(455.62835648698, -539.4098117515407);\n    poly217.ps[1] = Point(455.62835648698, -479.4098117515406);\n    poly217.ps[2] = Point(399.62835648698, -479.4098117515406);\n    poly217.ps[3] = Point(399.62835648698, -539.4098117515407);\n    new ShapeRef(router, poly217, 217);\n\n    Polygon poly218(4);\n    poly218.ps[0] = Point(455.62835648698, -464.4098117515406);\n    poly218.ps[1] = Point(455.62835648698, -404.4098117515406);\n    poly218.ps[2] = Point(399.62835648698, -404.4098117515406);\n    poly218.ps[3] = Point(399.62835648698, -464.4098117515406);\n    new ShapeRef(router, poly218, 218);\n\n    Polygon poly219(4);\n    poly219.ps[0] = Point(873.62835648898, -222.4098117515406);\n    poly219.ps[1] = Point(873.62835648898, -162.4098117515406);\n    poly219.ps[2] = Point(817.62835648898, -162.4098117515406);\n    poly219.ps[3] = Point(817.62835648898, -222.4098117515406);\n    new ShapeRef(router, poly219, 219);\n\n    Polygon poly220(4);\n    poly220.ps[0] = Point(660.9873402531949, -267.4098117515406);\n    poly220.ps[1] = Point(660.9873402531949, -207.4098117515406);\n    poly220.ps[2] = Point(604.9873402531949, -207.4098117515406);\n    poly220.ps[3] = Point(604.9873402531949, -267.4098117515406);\n    new ShapeRef(router, poly220, 220);\n\n    Polygon poly221(4);\n    poly221.ps[0] = Point(660.9873402531949, -389.4098117515406);\n    poly221.ps[1] = Point(660.9873402531949, -329.4098117515406);\n    poly221.ps[2] = Point(604.9873402531949, -329.4098117515406);\n    poly221.ps[3] = Point(604.9873402531949, -389.4098117515406);\n    new ShapeRef(router, poly221, 221);\n\n    Polygon poly222(4);\n    poly222.ps[0] = Point(1090.914070775694, -389.4098117515406);\n    poly222.ps[1] = Point(1090.914070775694, -329.4098117515406);\n    poly222.ps[2] = Point(1034.914070775694, -329.4098117515406);\n    poly222.ps[3] = Point(1034.914070775694, -389.4098117515406);\n    new ShapeRef(router, poly222, 222);\n\n    Polygon poly223(4);\n    poly223.ps[0] = Point(1090.914070775694, -267.4098117515406);\n    poly223.ps[1] = Point(1090.914070775694, -207.4098117515406);\n    poly223.ps[2] = Point(1034.914070775694, -207.4098117515406);\n    poly223.ps[3] = Point(1034.914070775694, -267.4098117515406);\n    new ShapeRef(router, poly223, 223);\n\n    Polygon poly224(4);\n    poly224.ps[0] = Point(1622.12835648998, -389.4098117515406);\n    poly224.ps[1] = Point(1622.12835648998, -329.4098117515406);\n    poly224.ps[2] = Point(1566.12835648998, -329.4098117515406);\n    poly224.ps[3] = Point(1566.12835648998, -389.4098117515406);\n    new ShapeRef(router, poly224, 224);\n\n    Polygon poly225(4);\n    poly225.ps[0] = Point(1622.12835648998, -267.4098117515406);\n    poly225.ps[1] = Point(1622.12835648998, -207.4098117515406);\n    poly225.ps[2] = Point(1566.12835648998, -207.4098117515406);\n    poly225.ps[3] = Point(1566.12835648998, -267.4098117515406);\n    new ShapeRef(router, poly225, 225);\n\n    Polygon poly226(4);\n    poly226.ps[0] = Point(1798.12835649098, -368.4098117515406);\n    poly226.ps[1] = Point(1798.12835649098, -308.4098117515406);\n    poly226.ps[2] = Point(1742.12835649098, -308.4098117515406);\n    poly226.ps[3] = Point(1742.12835649098, -368.4098117515406);\n    new ShapeRef(router, poly226, 226);\n\n    Polygon poly227(4);\n    poly227.ps[0] = Point(1971.12835649298, -368.4098117515406);\n    poly227.ps[1] = Point(1971.12835649298, -308.4098117515406);\n    poly227.ps[2] = Point(1915.12835649298, -308.4098117515406);\n    poly227.ps[3] = Point(1915.12835649298, -368.4098117515406);\n    new ShapeRef(router, poly227, 227);\n\n    Polygon poly228(4);\n    poly228.ps[0] = Point(-473.87164351602, 109.256854915126);\n    poly228.ps[1] = Point(-473.87164351602, 169.256854915126);\n    poly228.ps[2] = Point(-529.87164351602, 169.256854915126);\n    poly228.ps[3] = Point(-529.87164351602, 109.256854915126);\n    new ShapeRef(router, poly228, 228);\n\n    Polygon poly229(4);\n    poly229.ps[0] = Point(-473.87164351602, 211.256854916126);\n    poly229.ps[1] = Point(-473.87164351602, 271.2568549161261);\n    poly229.ps[2] = Point(-529.87164351602, 271.2568549161261);\n    poly229.ps[3] = Point(-529.87164351602, 211.256854916126);\n    new ShapeRef(router, poly229, 229);\n\n    Polygon poly230(4);\n    poly230.ps[0] = Point(1.128356484979975, -24.74314508487396);\n    poly230.ps[1] = Point(1.128356484979975, 35.25685491512604);\n    poly230.ps[2] = Point(-54.87164351502003, 35.25685491512604);\n    poly230.ps[3] = Point(-54.87164351502003, -24.74314508487396);\n    new ShapeRef(router, poly230, 230);\n\n    Polygon poly231(4);\n    poly231.ps[0] = Point(1.128356484979975, 97.25685491512604);\n    poly231.ps[1] = Point(1.128356484979975, 157.256854915126);\n    poly231.ps[2] = Point(-54.87164351502003, 157.256854915126);\n    poly231.ps[3] = Point(-54.87164351502003, 97.25685491512604);\n    new ShapeRef(router, poly231, 231);\n\n    Polygon poly232(4);\n    poly232.ps[0] = Point(478.62835648698, 97.25685491512604);\n    poly232.ps[1] = Point(478.62835648698, 157.256854915126);\n    poly232.ps[2] = Point(422.62835648698, 157.256854915126);\n    poly232.ps[3] = Point(422.62835648698, 97.25685491512604);\n    new ShapeRef(router, poly232, 232);\n\n    Polygon poly233(4);\n    poly233.ps[0] = Point(478.62835648698, -24.74314508487396);\n    poly233.ps[1] = Point(478.62835648698, 35.25685491512604);\n    poly233.ps[2] = Point(422.62835648698, 35.25685491512604);\n    poly233.ps[3] = Point(422.62835648698, -24.74314508487396);\n    new ShapeRef(router, poly233, 233);\n\n    Polygon poly234(4);\n    poly234.ps[0] = Point(793.62835648798, -24.74314508487396);\n    poly234.ps[1] = Point(793.62835648798, 35.25685491512604);\n    poly234.ps[2] = Point(737.62835648798, 35.25685491512604);\n    poly234.ps[3] = Point(737.62835648798, -24.74314508487396);\n    new ShapeRef(router, poly234, 234);\n\n    Polygon poly235(4);\n    poly235.ps[0] = Point(793.62835648798, 97.25685491512604);\n    poly235.ps[1] = Point(793.62835648798, 157.256854915126);\n    poly235.ps[2] = Point(737.62835648798, 157.256854915126);\n    poly235.ps[3] = Point(737.62835648798, 97.25685491512604);\n    new ShapeRef(router, poly235, 235);\n\n    Polygon poly236(4);\n    poly236.ps[0] = Point(1068.914070774694, -146.4098117515406);\n    poly236.ps[1] = Point(1068.914070774694, -106.4098117515406);\n    poly236.ps[2] = Point(992.9140707746942, -106.4098117515406);\n    poly236.ps[3] = Point(992.9140707746942, -146.4098117515406);\n    new ShapeRef(router, poly236, 236);\n\n    Polygon poly237(4);\n    poly237.ps[0] = Point(1515.12835648898, -146.4098117515406);\n    poly237.ps[1] = Point(1515.12835648898, -106.4098117515406);\n    poly237.ps[2] = Point(1439.12835648898, -106.4098117515406);\n    poly237.ps[3] = Point(1439.12835648898, -146.4098117515406);\n    new ShapeRef(router, poly237, 237);\n\n    Polygon poly238(4);\n    poly238.ps[0] = Point(1129.12835648898, -24.74314508487396);\n    poly238.ps[1] = Point(1129.12835648898, 35.25685491512604);\n    poly238.ps[2] = Point(1073.12835648898, 35.25685491512604);\n    poly238.ps[3] = Point(1073.12835648898, -24.74314508487396);\n    new ShapeRef(router, poly238, 238);\n\n    Polygon poly239(4);\n    poly239.ps[0] = Point(1129.12835648898, 97.25685491512604);\n    poly239.ps[1] = Point(1129.12835648898, 157.256854915126);\n    poly239.ps[2] = Point(1073.12835648898, 157.256854915126);\n    poly239.ps[3] = Point(1073.12835648898, 97.25685491512604);\n    new ShapeRef(router, poly239, 239);\n\n    Polygon poly240(4);\n    poly240.ps[0] = Point(727.62835648798, 265.2568549161261);\n    poly240.ps[1] = Point(727.62835648798, 325.2568549161261);\n    poly240.ps[2] = Point(671.62835648798, 325.2568549161261);\n    poly240.ps[3] = Point(671.62835648798, 265.2568549161261);\n    new ShapeRef(router, poly240, 240);\n\n    Polygon poly241(4);\n    poly241.ps[0] = Point(1655.12835648998, -36.74314508487396);\n    poly241.ps[1] = Point(1655.12835648998, 23.25685491512604);\n    poly241.ps[2] = Point(1599.12835648998, 23.25685491512604);\n    poly241.ps[3] = Point(1599.12835648998, -36.74314508487396);\n    new ShapeRef(router, poly241, 241);\n\n    Polygon poly242(4);\n    poly242.ps[0] = Point(1798.12835649098, -36.74314508487396);\n    poly242.ps[1] = Point(1798.12835649098, 23.25685491512604);\n    poly242.ps[2] = Point(1742.12835649098, 23.25685491512604);\n    poly242.ps[3] = Point(1742.12835649098, -36.74314508487396);\n    new ShapeRef(router, poly242, 242);\n\n    Polygon poly243(4);\n    poly243.ps[0] = Point(-884.12164351602, 751.8568549161259);\n    poly243.ps[1] = Point(-884.12164351602, 791.8568549161259);\n    poly243.ps[2] = Point(-960.12164351602, 791.8568549161259);\n    poly243.ps[3] = Point(-960.12164351602, 751.8568549161259);\n    new ShapeRef(router, poly243, 243);\n\n    Polygon poly244(4);\n    poly244.ps[0] = Point(-738.12164351602, 751.8568549161259);\n    poly244.ps[1] = Point(-738.12164351602, 791.8568549161259);\n    poly244.ps[2] = Point(-814.12164351602, 791.8568549161259);\n    poly244.ps[3] = Point(-814.12164351602, 751.8568549161259);\n    new ShapeRef(router, poly244, 244);\n\n    Polygon poly245(4);\n    poly245.ps[0] = Point(-544.87164351602, 500.756854916126);\n    poly245.ps[1] = Point(-544.87164351602, 540.756854916126);\n    poly245.ps[2] = Point(-620.87164351602, 540.756854916126);\n    poly245.ps[3] = Point(-620.87164351602, 500.756854916126);\n    new ShapeRef(router, poly245, 245);\n\n    Polygon poly246(4);\n    poly246.ps[0] = Point(-233.87164351602, 500.756854916126);\n    poly246.ps[1] = Point(-233.87164351602, 540.756854916126);\n    poly246.ps[2] = Point(-309.87164351602, 540.756854916126);\n    poly246.ps[3] = Point(-309.87164351602, 500.756854916126);\n    new ShapeRef(router, poly246, 246);\n\n    Polygon poly247(4);\n    poly247.ps[0] = Point(-135.87164351502, 500.756854916126);\n    poly247.ps[1] = Point(-135.87164351502, 540.756854916126);\n    poly247.ps[2] = Point(-211.87164351502, 540.756854916126);\n    poly247.ps[3] = Point(-211.87164351502, 500.756854916126);\n    new ShapeRef(router, poly247, 247);\n\n    Polygon poly248(4);\n    poly248.ps[0] = Point(267.62835648698, 500.756854916126);\n    poly248.ps[1] = Point(267.62835648698, 540.756854916126);\n    poly248.ps[2] = Point(191.62835648698, 540.756854916126);\n    poly248.ps[3] = Point(191.62835648698, 500.756854916126);\n    new ShapeRef(router, poly248, 248);\n\n    Polygon poly249(4);\n    poly249.ps[0] = Point(59.62835648497997, 668.8568549161259);\n    poly249.ps[1] = Point(59.62835648497997, 728.8568549161259);\n    poly249.ps[2] = Point(3.628356484979975, 728.8568549161259);\n    poly249.ps[3] = Point(3.628356484979975, 668.8568549161259);\n    new ShapeRef(router, poly249, 249);\n\n    Polygon poly250(4);\n    poly250.ps[0] = Point(-362.87164351602, 958.8568549161259);\n    poly250.ps[1] = Point(-362.87164351602, 998.8568549161259);\n    poly250.ps[2] = Point(-438.87164351602, 998.8568549161259);\n    poly250.ps[3] = Point(-438.87164351602, 958.8568549161259);\n    new ShapeRef(router, poly250, 250);\n\n    Polygon poly251(4);\n    poly251.ps[0] = Point(-609.12164351602, 1024.856854916126);\n    poly251.ps[1] = Point(-609.12164351602, 1064.856854916126);\n    poly251.ps[2] = Point(-685.12164351602, 1064.856854916126);\n    poly251.ps[3] = Point(-685.12164351602, 1024.856854916126);\n    new ShapeRef(router, poly251, 251);\n\n    Polygon poly252(4);\n    poly252.ps[0] = Point(389.62835648698, 647.8568549161259);\n    poly252.ps[1] = Point(389.62835648698, 707.8568549161259);\n    poly252.ps[2] = Point(333.62835648698, 707.8568549161259);\n    poly252.ps[3] = Point(333.62835648698, 647.8568549161259);\n    new ShapeRef(router, poly252, 252);\n\n    Polygon poly253(4);\n    poly253.ps[0] = Point(694.62835648798, 509.006854916126);\n    poly253.ps[1] = Point(694.62835648798, 569.006854916126);\n    poly253.ps[2] = Point(638.62835648798, 569.006854916126);\n    poly253.ps[3] = Point(638.62835648798, 509.006854916126);\n    new ShapeRef(router, poly253, 253);\n\n    Polygon poly254(4);\n    poly254.ps[0] = Point(176.62835648698, 814.8568549161259);\n    poly254.ps[1] = Point(176.62835648698, 874.8568549161259);\n    poly254.ps[2] = Point(120.62835648698, 874.8568549161259);\n    poly254.ps[3] = Point(120.62835648698, 814.8568549161259);\n    new ShapeRef(router, poly254, 254);\n\n    Polygon poly255(4);\n    poly255.ps[0] = Point(826.62835648798, 647.8568549161259);\n    poly255.ps[1] = Point(826.62835648798, 707.8568549161259);\n    poly255.ps[2] = Point(770.62835648798, 707.8568549161259);\n    poly255.ps[3] = Point(770.62835648798, 647.8568549161259);\n    new ShapeRef(router, poly255, 255);\n\n    Polygon poly256(4);\n    poly256.ps[0] = Point(826.62835648798, 769.8568549161259);\n    poly256.ps[1] = Point(826.62835648798, 829.8568549161259);\n    poly256.ps[2] = Point(770.62835648798, 829.8568549161259);\n    poly256.ps[3] = Point(770.62835648798, 769.8568549161259);\n    new ShapeRef(router, poly256, 256);\n\n    Polygon poly257(4);\n    poly257.ps[0] = Point(682.62835648798, 837.8568549161259);\n    poly257.ps[1] = Point(682.62835648798, 877.8568549161259);\n    poly257.ps[2] = Point(606.62835648798, 877.8568549161259);\n    poly257.ps[3] = Point(606.62835648798, 837.8568549161259);\n    new ShapeRef(router, poly257, 257);\n\n    Polygon poly258(4);\n    poly258.ps[0] = Point(129.62835648598, 951.8568549161259);\n    poly258.ps[1] = Point(129.62835648598, 1011.856854916126);\n    poly258.ps[2] = Point(73.62835648597996, 1011.856854916126);\n    poly258.ps[3] = Point(73.62835648597996, 951.8568549161259);\n    new ShapeRef(router, poly258, 258);\n\n    Polygon poly259(4);\n    poly259.ps[0] = Point(-64.87164351502003, 1174.856854916126);\n    poly259.ps[1] = Point(-64.87164351502003, 1234.856854916126);\n    poly259.ps[2] = Point(-120.87164351502, 1234.856854916126);\n    poly259.ps[3] = Point(-120.87164351502, 1174.856854916126);\n    new ShapeRef(router, poly259, 259);\n\n    Polygon poly260(4);\n    poly260.ps[0] = Point(-64.87164351502003, 1052.856854916126);\n    poly260.ps[1] = Point(-64.87164351502003, 1112.856854916126);\n    poly260.ps[2] = Point(-120.87164351502, 1112.856854916126);\n    poly260.ps[3] = Point(-120.87164351502, 1052.856854916126);\n    new ShapeRef(router, poly260, 260);\n\n    Polygon poly261(4);\n    poly261.ps[0] = Point(356.62835648698, 1052.856854916126);\n    poly261.ps[1] = Point(356.62835648698, 1112.856854916126);\n    poly261.ps[2] = Point(300.62835648698, 1112.856854916126);\n    poly261.ps[3] = Point(300.62835648698, 1052.856854916126);\n    new ShapeRef(router, poly261, 261);\n\n    Polygon poly262(4);\n    poly262.ps[0] = Point(873.62835648898, 1040.856854916126);\n    poly262.ps[1] = Point(873.62835648898, 1100.856854916126);\n    poly262.ps[2] = Point(817.62835648898, 1100.856854916126);\n    poly262.ps[3] = Point(817.62835648898, 1040.856854916126);\n    new ShapeRef(router, poly262, 262);\n\n    Polygon poly263(4);\n    poly263.ps[0] = Point(951.9140707746942, 866.8568549171259);\n    poly263.ps[1] = Point(951.9140707746942, 906.8568549171259);\n    poly263.ps[2] = Point(875.9140707746942, 906.8568549171259);\n    poly263.ps[3] = Point(875.9140707746942, 866.8568549171259);\n    new ShapeRef(router, poly263, 263);\n\n    Polygon poly264(4);\n    poly264.ps[0] = Point(1253.12835648898, 991.8568549161259);\n    poly264.ps[1] = Point(1253.12835648898, 1031.856854916126);\n    poly264.ps[2] = Point(1177.12835648898, 1031.856854916126);\n    poly264.ps[3] = Point(1177.12835648898, 991.8568549161259);\n    new ShapeRef(router, poly264, 264);\n\n    Polygon poly265(4);\n    poly265.ps[0] = Point(1253.12835648898, 1090.856854916126);\n    poly265.ps[1] = Point(1253.12835648898, 1130.856854916126);\n    poly265.ps[2] = Point(1177.12835648898, 1130.856854916126);\n    poly265.ps[3] = Point(1177.12835648898, 1090.856854916126);\n    new ShapeRef(router, poly265, 265);\n\n    Polygon poly266(4);\n    poly266.ps[0] = Point(1195.12835648898, 1186.856854916126);\n    poly266.ps[1] = Point(1195.12835648898, 1246.856854916126);\n    poly266.ps[2] = Point(1139.12835648898, 1246.856854916126);\n    poly266.ps[3] = Point(1139.12835648898, 1186.856854916126);\n    new ShapeRef(router, poly266, 266);\n\n    Polygon poly267(4);\n    poly267.ps[0] = Point(21.62835648497997, 1355.606854916126);\n    poly267.ps[1] = Point(21.62835648497997, 1395.606854916126);\n    poly267.ps[2] = Point(-54.37164351502003, 1395.606854916126);\n    poly267.ps[3] = Point(-54.37164351502003, 1355.606854916126);\n    new ShapeRef(router, poly267, 267);\n\n    Polygon poly268(4);\n    poly268.ps[0] = Point(637.62835648798, 1322.606854916126);\n    poly268.ps[1] = Point(637.62835648798, 1362.606854916126);\n    poly268.ps[2] = Point(561.62835648798, 1362.606854916126);\n    poly268.ps[3] = Point(561.62835648798, 1322.606854916126);\n    new ShapeRef(router, poly268, 268);\n\n    Polygon poly269(4);\n    poly269.ps[0] = Point(-473.87164351602, 1577.106854917126);\n    poly269.ps[1] = Point(-473.87164351602, 1637.106854917126);\n    poly269.ps[2] = Point(-529.87164351602, 1637.106854917126);\n    poly269.ps[3] = Point(-529.87164351602, 1577.106854917126);\n    new ShapeRef(router, poly269, 269);\n\n    Polygon poly270(4);\n    poly270.ps[0] = Point(-31.87164351502003, 1678.106854917126);\n    poly270.ps[1] = Point(-31.87164351502003, 1738.106854917126);\n    poly270.ps[2] = Point(-87.87164351502003, 1738.106854917126);\n    poly270.ps[3] = Point(-87.87164351502003, 1678.106854917126);\n    new ShapeRef(router, poly270, 270);\n\n    Polygon poly271(4);\n    poly271.ps[0] = Point(-31.87164351502003, 1481.106854917126);\n    poly271.ps[1] = Point(-31.87164351502003, 1541.106854917126);\n    poly271.ps[2] = Point(-87.87164351502003, 1541.106854917126);\n    poly271.ps[3] = Point(-87.87164351502003, 1481.106854917126);\n    new ShapeRef(router, poly271, 271);\n\n    Polygon poly272(4);\n    poly272.ps[0] = Point(-31.87164351502003, 1556.106854917126);\n    poly272.ps[1] = Point(-31.87164351502003, 1616.106854917126);\n    poly272.ps[2] = Point(-87.87164351502003, 1616.106854917126);\n    poly272.ps[3] = Point(-87.87164351502003, 1556.106854917126);\n    new ShapeRef(router, poly272, 272);\n\n    Polygon poly273(4);\n    poly273.ps[0] = Point(422.62835648698, 1678.106854917126);\n    poly273.ps[1] = Point(422.62835648698, 1738.106854917126);\n    poly273.ps[2] = Point(366.62835648698, 1738.106854917126);\n    poly273.ps[3] = Point(366.62835648698, 1678.106854917126);\n    new ShapeRef(router, poly273, 273);\n\n    Polygon poly274(4);\n    poly274.ps[0] = Point(422.62835648698, 1556.106854917126);\n    poly274.ps[1] = Point(422.62835648698, 1616.106854917126);\n    poly274.ps[2] = Point(366.62835648698, 1616.106854917126);\n    poly274.ps[3] = Point(366.62835648698, 1556.106854917126);\n    new ShapeRef(router, poly274, 274);\n\n    Polygon poly275(4);\n    poly275.ps[0] = Point(660.9873402531949, 1556.106854917126);\n    poly275.ps[1] = Point(660.9873402531949, 1616.106854917126);\n    poly275.ps[2] = Point(604.9873402531949, 1616.106854917126);\n    poly275.ps[3] = Point(604.9873402531949, 1556.106854917126);\n    new ShapeRef(router, poly275, 275);\n\n    Polygon poly276(4);\n    poly276.ps[0] = Point(660.9873402531949, 1678.106854917126);\n    poly276.ps[1] = Point(660.9873402531949, 1738.106854917126);\n    poly276.ps[2] = Point(604.9873402531949, 1738.106854917126);\n    poly276.ps[3] = Point(604.9873402531949, 1678.106854917126);\n    new ShapeRef(router, poly276, 276);\n\n    Polygon poly277(4);\n    poly277.ps[0] = Point(1195.12835648898, 1497.106854916126);\n    poly277.ps[1] = Point(1195.12835648898, 1557.106854916126);\n    poly277.ps[2] = Point(1139.12835648898, 1557.106854916126);\n    poly277.ps[3] = Point(1139.12835648898, 1497.106854916126);\n    new ShapeRef(router, poly277, 277);\n\n    Polygon poly278(4);\n    poly278.ps[0] = Point(1195.12835648898, 1636.773521583792);\n    poly278.ps[1] = Point(1195.12835648898, 1696.773521583792);\n    poly278.ps[2] = Point(1139.12835648898, 1696.773521583792);\n    poly278.ps[3] = Point(1139.12835648898, 1636.773521583792);\n    new ShapeRef(router, poly278, 278);\n\n    Polygon poly279(4);\n    poly279.ps[0] = Point(1358.12835648898, 1363.106854916126);\n    poly279.ps[1] = Point(1358.12835648898, 1423.106854916126);\n    poly279.ps[2] = Point(1302.12835648898, 1423.106854916126);\n    poly279.ps[3] = Point(1302.12835648898, 1363.106854916126);\n    new ShapeRef(router, poly279, 279);\n\n    Polygon poly280(4);\n    poly280.ps[0] = Point(1655.12835648998, 1239.606854916126);\n    poly280.ps[1] = Point(1655.12835648998, 1299.606854916126);\n    poly280.ps[2] = Point(1599.12835648998, 1299.606854916126);\n    poly280.ps[3] = Point(1599.12835648998, 1239.606854916126);\n    new ShapeRef(router, poly280, 280);\n\n    Polygon poly281(4);\n    poly281.ps[0] = Point(1622.12835648998, 1556.106854917126);\n    poly281.ps[1] = Point(1622.12835648998, 1616.106854917126);\n    poly281.ps[2] = Point(1566.12835648998, 1616.106854917126);\n    poly281.ps[3] = Point(1566.12835648998, 1556.106854917126);\n    new ShapeRef(router, poly281, 281);\n\n    Polygon poly282(4);\n    poly282.ps[0] = Point(1622.12835648998, 1678.106854917126);\n    poly282.ps[1] = Point(1622.12835648998, 1738.106854917126);\n    poly282.ps[2] = Point(1566.12835648998, 1738.106854917126);\n    poly282.ps[3] = Point(1566.12835648998, 1678.106854917126);\n    new ShapeRef(router, poly282, 282);\n\n    Polygon poly283(4);\n    poly283.ps[0] = Point(1798.12835649098, 1239.606854916126);\n    poly283.ps[1] = Point(1798.12835649098, 1299.606854916126);\n    poly283.ps[2] = Point(1742.12835649098, 1299.606854916126);\n    poly283.ps[3] = Point(1742.12835649098, 1239.606854916126);\n    new ShapeRef(router, poly283, 283);\n\n    Polygon poly284(4);\n    poly284.ps[0] = Point(1798.12835649098, 1577.106854917126);\n    poly284.ps[1] = Point(1798.12835649098, 1637.106854917126);\n    poly284.ps[2] = Point(1742.12835649098, 1637.106854917126);\n    poly284.ps[3] = Point(1742.12835649098, 1577.106854917126);\n    new ShapeRef(router, poly284, 284);\n\n    Polygon poly285(4);\n    poly285.ps[0] = Point(1971.12835649298, 1577.106854917126);\n    poly285.ps[1] = Point(1971.12835649298, 1637.106854917126);\n    poly285.ps[2] = Point(1915.12835649298, 1637.106854917126);\n    poly285.ps[3] = Point(1915.12835649298, 1577.106854917126);\n    new ShapeRef(router, poly285, 285);\n\n    Polygon poly286(4);\n    poly286.ps[0] = Point(-440.87164351602, -706.9812403239691);\n    poly286.ps[1] = Point(-440.87164351602, -646.9812403239691);\n    poly286.ps[2] = Point(-496.87164351602, -646.9812403239691);\n    poly286.ps[3] = Point(-496.87164351602, -706.9812403239691);\n    new ShapeRef(router, poly286, 286);\n\n    Polygon poly287(4);\n    poly287.ps[0] = Point(389.62835648698, 769.8568549161259);\n    poly287.ps[1] = Point(389.62835648698, 829.8568549161259);\n    poly287.ps[2] = Point(333.62835648698, 829.8568549161259);\n    poly287.ps[3] = Point(333.62835648698, 769.8568549161259);\n    new ShapeRef(router, poly287, 287);\n\n    Polygon poly288(4);\n    poly288.ps[0] = Point(356.62835648698, 1174.856854916126);\n    poly288.ps[1] = Point(356.62835648698, 1234.856854916126);\n    poly288.ps[2] = Point(300.62835648698, 1234.856854916126);\n    poly288.ps[3] = Point(300.62835648698, 1174.856854916126);\n    new ShapeRef(router, poly288, 288);\n\n    Polygon poly289(4);\n    poly289.ps[0] = Point(1089.914070774694, 866.8568549171259);\n    poly289.ps[1] = Point(1089.914070774694, 906.8568549171259);\n    poly289.ps[2] = Point(1013.914070774694, 906.8568549171259);\n    poly289.ps[3] = Point(1013.914070774694, 866.8568549171259);\n    new ShapeRef(router, poly289, 289);\n\n    Polygon poly290(4);\n    poly290.ps[0] = Point(1655.12835648998, -688.4098117525407);\n    poly290.ps[1] = Point(1655.12835648998, -628.4098117525407);\n    poly290.ps[2] = Point(1599.12835648998, -628.4098117525407);\n    poly290.ps[3] = Point(1599.12835648998, -688.4098117525407);\n    new ShapeRef(router, poly290, 290);\n\n    Polygon poly291(4);\n    poly291.ps[0] = Point(1831.12835649098, -628.5348117525407);\n    poly291.ps[1] = Point(1831.12835649098, -568.5348117525407);\n    poly291.ps[2] = Point(1775.12835649098, -568.5348117525407);\n    poly291.ps[3] = Point(1775.12835649098, -628.5348117525407);\n    new ShapeRef(router, poly291, 291);\n\n    Polygon poly292(4);\n    poly292.ps[0] = Point(488.62835648698, -807.9812403239691);\n    poly292.ps[1] = Point(488.62835648698, -747.9812403239691);\n    poly292.ps[2] = Point(432.62835648698, -747.9812403239691);\n    poly292.ps[3] = Point(432.62835648698, -807.9812403239691);\n    new ShapeRef(router, poly292, 292);\n\n    Polygon poly293(4);\n    poly293.ps[0] = Point(760.62835648798, -877.4098117525407);\n    poly293.ps[1] = Point(760.62835648798, -817.4098117525407);\n    poly293.ps[2] = Point(704.62835648798, -817.4098117525407);\n    poly293.ps[3] = Point(704.62835648798, -877.4098117525407);\n    new ShapeRef(router, poly293, 293);\n\n    Polygon poly294(4);\n    poly294.ps[0] = Point(760.62835648798, -751.4098117525407);\n    poly294.ps[1] = Point(760.62835648798, -691.4098117525407);\n    poly294.ps[2] = Point(704.62835648798, -691.4098117525407);\n    poly294.ps[3] = Point(704.62835648798, -751.4098117525407);\n    new ShapeRef(router, poly294, 294);\n\n    Polygon poly295(4);\n    poly295.ps[0] = Point(1068.914070774694, -484.4098117525406);\n    poly295.ps[1] = Point(1068.914070774694, -444.4098117525406);\n    poly295.ps[2] = Point(992.9140707746942, -444.4098117525406);\n    poly295.ps[3] = Point(992.9140707746942, -484.4098117525406);\n    new ShapeRef(router, poly295, 295);\n\n    Polygon poly296(4);\n    poly296.ps[0] = Point(1259.12835648898, -628.5348117525407);\n    poly296.ps[1] = Point(1259.12835648898, -568.5348117525407);\n    poly296.ps[2] = Point(1203.12835648898, -568.5348117525407);\n    poly296.ps[3] = Point(1203.12835648898, -628.5348117525407);\n    new ShapeRef(router, poly296, 296);\n\n    Polygon poly297(4);\n    poly297.ps[0] = Point(209.62835648698, -116.4098117515406);\n    poly297.ps[1] = Point(209.62835648698, -56.40981175154064);\n    poly297.ps[2] = Point(153.62835648698, -56.40981175154064);\n    poly297.ps[3] = Point(153.62835648698, -116.4098117515406);\n    new ShapeRef(router, poly297, 297);\n\n    Polygon poly298(4);\n    poly298.ps[0] = Point(694.62835648798, -90.40981175154064);\n    poly298.ps[1] = Point(694.62835648798, -30.40981175154064);\n    poly298.ps[2] = Point(638.62835648798, -30.40981175154064);\n    poly298.ps[3] = Point(638.62835648798, -90.40981175154064);\n    new ShapeRef(router, poly298, 298);\n\n    Polygon poly299(4);\n    poly299.ps[0] = Point(939.62835648898, 351.7568549161261);\n    poly299.ps[1] = Point(939.62835648898, 411.7568549161261);\n    poly299.ps[2] = Point(883.62835648898, 411.7568549161261);\n    poly299.ps[3] = Point(883.62835648898, 351.7568549161261);\n    new ShapeRef(router, poly299, 299);\n\n    Polygon poly300(4);\n    poly300.ps[0] = Point(521.62835648698, 351.7568549161261);\n    poly300.ps[1] = Point(521.62835648698, 411.7568549161261);\n    poly300.ps[2] = Point(465.62835648698, 411.7568549161261);\n    poly300.ps[3] = Point(465.62835648698, 351.7568549161261);\n    new ShapeRef(router, poly300, 300);\n\n    Polygon poly301(4);\n    poly301.ps[0] = Point(129.62835648598, 1073.856854916126);\n    poly301.ps[1] = Point(129.62835648598, 1133.856854916126);\n    poly301.ps[2] = Point(73.62835648597996, 1133.856854916126);\n    poly301.ps[3] = Point(73.62835648597996, 1073.856854916126);\n    new ShapeRef(router, poly301, 301);\n\n    Polygon poly302(4);\n    poly302.ps[0] = Point(59.62835648497997, -628.5348117525407);\n    poly302.ps[1] = Point(59.62835648497997, -568.5348117525407);\n    poly302.ps[2] = Point(3.628356484979975, -568.5348117525407);\n    poly302.ps[3] = Point(3.628356484979975, -628.5348117525407);\n    new ShapeRef(router, poly302, 302);\n\n    Polygon poly303(4);\n    poly303.ps[0] = Point(1586.12835648898, 565.6568549161261);\n    poly303.ps[1] = Point(1586.12835648898, 625.6568549161261);\n    poly303.ps[2] = Point(1530.12835648898, 625.6568549161261);\n    poly303.ps[3] = Point(1530.12835648898, 565.6568549161261);\n    new ShapeRef(router, poly303, 303);\n\n    Polygon poly304(4);\n    poly304.ps[0] = Point(1765.12835649098, 565.6568549161261);\n    poly304.ps[1] = Point(1765.12835649098, 625.6568549161261);\n    poly304.ps[2] = Point(1709.12835649098, 625.6568549161261);\n    poly304.ps[3] = Point(1709.12835649098, 565.6568549161261);\n    new ShapeRef(router, poly304, 304);\n\n    Polygon poly305(4);\n    poly305.ps[0] = Point(2261.795023162646, 544.6568549161261);\n    poly305.ps[1] = Point(2261.795023162646, 604.6568549161261);\n    poly305.ps[2] = Point(2205.795023162646, 604.6568549161261);\n    poly305.ps[3] = Point(2205.795023162646, 544.6568549161261);\n    new ShapeRef(router, poly305, 305);\n\n    Polygon poly306(4);\n    poly306.ps[0] = Point(2111.795023160646, 565.6568549161261);\n    poly306.ps[1] = Point(2111.795023160646, 625.6568549161261);\n    poly306.ps[2] = Point(2055.795023160646, 625.6568549161261);\n    poly306.ps[3] = Point(2055.795023160646, 565.6568549161261);\n    new ShapeRef(router, poly306, 306);\n\n    Polygon poly307(4);\n    poly307.ps[0] = Point(2261.795023162646, 666.6568549161261);\n    poly307.ps[1] = Point(2261.795023162646, 726.6568549161261);\n    poly307.ps[2] = Point(2205.795023162646, 726.6568549161261);\n    poly307.ps[3] = Point(2205.795023162646, 666.6568549161261);\n    new ShapeRef(router, poly307, 307);\n\n    Polygon poly308(4);\n    poly308.ps[0] = Point(1765.12835649098, 291.2568549161261);\n    poly308.ps[1] = Point(1765.12835649098, 351.2568549161261);\n    poly308.ps[2] = Point(1709.12835649098, 351.2568549161261);\n    poly308.ps[3] = Point(1709.12835649098, 291.2568549161261);\n    new ShapeRef(router, poly308, 308);\n\n    Polygon poly309(4);\n    poly309.ps[0] = Point(1655.12835648998, -567.4098117525407);\n    poly309.ps[1] = Point(1655.12835648998, -507.4098117525407);\n    poly309.ps[2] = Point(1599.12835648998, -507.4098117525407);\n    poly309.ps[3] = Point(1599.12835648998, -567.4098117525407);\n    new ShapeRef(router, poly309, 309);\n\n    Polygon poly310(4);\n    poly310.ps[0] = Point(-657.12164351602, -896.9098117525407);\n    poly310.ps[1] = Point(-657.12164351602, -856.9098117525407);\n    poly310.ps[2] = Point(-717.12164351602, -856.9098117525407);\n    poly310.ps[3] = Point(-717.12164351602, -896.9098117525407);\n    new ShapeRef(router, poly310, 310);\n\n    Polygon poly311(4);\n    poly311.ps[0] = Point(-985.62164351602, 275.7568549161261);\n    poly311.ps[1] = Point(-985.62164351602, 335.7568549161261);\n    poly311.ps[2] = Point(-1025.62164351602, 335.7568549161261);\n    poly311.ps[3] = Point(-1025.62164351602, 275.7568549161261);\n    new ShapeRef(router, poly311, 311);\n\n    Polygon poly312(4);\n    poly312.ps[0] = Point(2090.795023161646, -389.9098117525406);\n    poly312.ps[1] = Point(2090.795023161646, -349.9098117525406);\n    poly312.ps[2] = Point(2030.795023161646, -349.9098117525406);\n    poly312.ps[3] = Point(2030.795023161646, -389.9098117525406);\n    new ShapeRef(router, poly312, 312);\n\n    Polygon poly313(4);\n    poly313.ps[0] = Point(2090.295023161646, 1555.606854916126);\n    poly313.ps[1] = Point(2090.295023161646, 1595.606854916126);\n    poly313.ps[2] = Point(2030.295023161646, 1595.606854916126);\n    poly313.ps[3] = Point(2030.295023161646, 1555.606854916126);\n    new ShapeRef(router, poly313, 313);\n\n    Polygon poly314(4);\n    poly314.ps[0] = Point(-1089.62164351702, -157.4098117515406);\n    poly314.ps[1] = Point(-1089.62164351702, -97.40981175154064);\n    poly314.ps[2] = Point(-1129.62164351702, -97.40981175154064);\n    poly314.ps[3] = Point(-1129.62164351702, -157.4098117515406);\n    new ShapeRef(router, poly314, 314);\n#endif\n\n    Polygon poly315(4);\n    poly315.ps[0] = Point(-430.97164351602, -833.9812403239691);\n    poly315.ps[1] = Point(-430.97164351602, -716.9812403239691);\n    poly315.ps[2] = Point(-506.77164351602, -716.9812403239691);\n    poly315.ps[3] = Point(-506.77164351602, -833.9812403239691);\n    new ShapeRef(router, poly315, 315);\n\n#ifdef REST\n    Polygon poly316(4);\n    poly316.ps[0] = Point(134.52835648598, -394.4098117515406);\n    poly316.ps[1] = Point(134.52835648598, -202.4098117515406);\n    poly316.ps[2] = Point(58.72835648597997, -202.4098117515406);\n    poly316.ps[3] = Point(58.72835648597997, -394.4098117515406);\n    new ShapeRef(router, poly316, 316);\n\n    Polygon poly317(4);\n    poly317.ps[0] = Point(-298.87164351602, -189.3098117515406);\n    poly317.ps[1] = Point(-298.87164351602, -129.5098117515406);\n    poly317.ps[2] = Point(-340.87164351602, -129.5098117515406);\n    poly317.ps[3] = Point(-340.87164351602, -189.3098117515406);\n    new ShapeRef(router, poly317, 317);\n\n    Polygon poly318(4);\n    poly318.ps[0] = Point(465.5283564869799, -469.4098117515406);\n    poly318.ps[1] = Point(465.5283564869799, -202.4098117515406);\n    poly318.ps[2] = Point(389.72835648698, -202.4098117515406);\n    poly318.ps[3] = Point(389.72835648698, -469.4098117515406);\n    new ShapeRef(router, poly318, 318);\n\n    Polygon poly319(4);\n    poly319.ps[0] = Point(670.8873402531949, -319.4098117515406);\n    poly319.ps[1] = Point(670.8873402531949, -277.4098117515406);\n    poly319.ps[2] = Point(595.087340253195, -277.4098117515406);\n    poly319.ps[3] = Point(595.087340253195, -319.4098117515406);\n    new ShapeRef(router, poly319, 319);\n\n    Polygon poly320(4);\n    poly320.ps[0] = Point(1100.814070775694, -319.4098117515406);\n    poly320.ps[1] = Point(1100.814070775694, -277.4098117515406);\n    poly320.ps[2] = Point(1025.014070775694, -277.4098117515406);\n    poly320.ps[3] = Point(1025.014070775694, -319.4098117515406);\n    new ShapeRef(router, poly320, 320);\n\n    Polygon poly321(4);\n    poly321.ps[0] = Point(1632.02835648998, -319.4098117515406);\n    poly321.ps[1] = Point(1632.02835648998, -277.4098117515406);\n    poly321.ps[2] = Point(1556.22835648998, -277.4098117515406);\n    poly321.ps[3] = Point(1556.22835648998, -319.4098117515406);\n    new ShapeRef(router, poly321, 321);\n\n    Polygon poly322(4);\n    poly322.ps[0] = Point(11.02835648497997, 45.25685491512604);\n    poly322.ps[1] = Point(11.02835648497997, 87.25685491512604);\n    poly322.ps[2] = Point(-64.77164351502003, 87.25685491512604);\n    poly322.ps[3] = Point(-64.77164351502003, 45.25685491512604);\n    new ShapeRef(router, poly322, 322);\n\n    Polygon poly323(4);\n    poly323.ps[0] = Point(-21.97164351502003, 1551.106854917126);\n    poly323.ps[1] = Point(-21.97164351502003, 1668.106854917126);\n    poly323.ps[2] = Point(-97.77164351502003, 1668.106854917126);\n    poly323.ps[3] = Point(-97.77164351502003, 1551.106854917126);\n    new ShapeRef(router, poly323, 323);\n\n    Polygon poly324(4);\n    poly324.ps[0] = Point(432.5283564869799, 1626.106854917126);\n    poly324.ps[1] = Point(432.5283564869799, 1668.106854917126);\n    poly324.ps[2] = Point(356.72835648698, 1668.106854917126);\n    poly324.ps[3] = Point(356.72835648698, 1626.106854917126);\n    new ShapeRef(router, poly324, 324);\n\n    Polygon poly325(4);\n    poly325.ps[0] = Point(551.62835648798, 1312.706854916126);\n    poly325.ps[1] = Point(551.62835648798, 1372.506854916126);\n    poly325.ps[2] = Point(509.62835648798, 1372.506854916126);\n    poly325.ps[3] = Point(509.62835648798, 1312.706854916126);\n    new ShapeRef(router, poly325, 325);\n\n    Polygon poly326(4);\n    poly326.ps[0] = Point(670.8873402531949, 1626.106854917126);\n    poly326.ps[1] = Point(670.8873402531949, 1668.106854917126);\n    poly326.ps[2] = Point(595.087340253195, 1668.106854917126);\n    poly326.ps[3] = Point(595.087340253195, 1626.106854917126);\n    new ShapeRef(router, poly326, 326);\n\n    Polygon poly327(4);\n    poly327.ps[0] = Point(1632.02835648998, 1626.106854917126);\n    poly327.ps[1] = Point(1632.02835648998, 1668.106854917126);\n    poly327.ps[2] = Point(1556.22835648998, 1668.106854917126);\n    poly327.ps[3] = Point(1556.22835648998, 1626.106854917126);\n    new ShapeRef(router, poly327, 327);\n\n    Polygon poly328(4);\n    poly328.ps[0] = Point(1139.02835648898, 45.25685491512604);\n    poly328.ps[1] = Point(1139.02835648898, 87.25685491512604);\n    poly328.ps[2] = Point(1063.22835648898, 87.25685491512604);\n    poly328.ps[3] = Point(1063.22835648898, 45.25685491512604);\n    new ShapeRef(router, poly328, 328);\n\n    Polygon poly329(4);\n    poly329.ps[0] = Point(803.52835648798, 45.25685491512604);\n    poly329.ps[1] = Point(803.52835648798, 87.25685491512604);\n    poly329.ps[2] = Point(727.72835648798, 87.25685491512604);\n    poly329.ps[3] = Point(727.72835648798, 45.25685491512604);\n    new ShapeRef(router, poly329, 329);\n\n    Polygon poly330(4);\n    poly330.ps[0] = Point(488.5283564869799, 45.25685491512604);\n    poly330.ps[1] = Point(488.5283564869799, 87.25685491512604);\n    poly330.ps[2] = Point(412.72835648698, 87.25685491512604);\n    poly330.ps[3] = Point(412.72835648698, 45.25685491512604);\n    new ShapeRef(router, poly330, 330);\n\n    Polygon poly331(4);\n    poly331.ps[0] = Point(-54.97164351502003, 1122.856854916126);\n    poly331.ps[1] = Point(-54.97164351502003, 1164.856854916126);\n    poly331.ps[2] = Point(-130.77164351502, 1164.856854916126);\n    poly331.ps[3] = Point(-130.77164351502, 1122.856854916126);\n    new ShapeRef(router, poly331, 331);\n\n    Polygon poly332(4);\n    poly332.ps[0] = Point(139.52835648598, 1021.856854916126);\n    poly332.ps[1] = Point(139.52835648598, 1063.856854916126);\n    poly332.ps[2] = Point(63.72835648597997, 1063.856854916126);\n    poly332.ps[3] = Point(63.72835648597997, 1021.856854916126);\n    new ShapeRef(router, poly332, 332);\n\n    Polygon poly333(4);\n    poly333.ps[0] = Point(366.5283564869799, 1122.856854916126);\n    poly333.ps[1] = Point(366.5283564869799, 1164.856854916126);\n    poly333.ps[2] = Point(290.72835648698, 1164.856854916126);\n    poly333.ps[3] = Point(290.72835648698, 1122.856854916126);\n    new ShapeRef(router, poly333, 333);\n\n    Polygon poly334(4);\n    poly334.ps[0] = Point(1003.914070774694, 856.956854917126);\n    poly334.ps[1] = Point(1003.914070774694, 916.7568549171259);\n    poly334.ps[2] = Point(961.9140707746942, 916.7568549171259);\n    poly334.ps[3] = Point(961.9140707746942, 856.956854917126);\n    new ShapeRef(router, poly334, 334);\n\n    Polygon poly335(4);\n    poly335.ps[0] = Point(836.52835648798, 717.8568549161259);\n    poly335.ps[1] = Point(836.52835648798, 759.8568549161259);\n    poly335.ps[2] = Point(760.72835648798, 759.8568549161259);\n    poly335.ps[3] = Point(760.72835648798, 717.8568549161259);\n    new ShapeRef(router, poly335, 335);\n\n    Polygon poly336(4);\n    poly336.ps[0] = Point(399.5283564869799, 717.8568549161259);\n    poly336.ps[1] = Point(399.5283564869799, 759.8568549161259);\n    poly336.ps[2] = Point(323.72835648698, 759.8568549161259);\n    poly336.ps[3] = Point(323.72835648698, 717.8568549161259);\n    new ShapeRef(router, poly336, 336);\n\n    Polygon poly337(4);\n    poly337.ps[0] = Point(2271.695023162647, 614.6568549161261);\n    poly337.ps[1] = Point(2271.695023162647, 656.6568549161261);\n    poly337.ps[2] = Point(2195.895023162646, 656.6568549161261);\n    poly337.ps[3] = Point(2195.895023162646, 614.6568549161261);\n    new ShapeRef(router, poly337, 337);\n\n    ConnRef *connRef338 = new ConnRef(router, 338);\n    ConnEnd srcPt338(Point(181.62835648698, 1360.606854916126), 1);\n    connRef338->setSourceEndpoint(srcPt338);\n    ConnEnd dstPt338(Point(115.62835648698, 1254.856854916126), 15);\n    connRef338->setDestEndpoint(dstPt338);\n    connRef338->setRoutingType((ConnType)2);\n\n    ConnRef *connRef339 = new ConnRef(router, 339);\n    ConnEnd srcPt339(Point(181.62835648698, 1360.606854916126), 1);\n    connRef339->setSourceEndpoint(srcPt339);\n    ConnEnd dstPt339(Point(181.62835648698, 1143.856854916126), 15);\n    connRef339->setDestEndpoint(dstPt339);\n    connRef339->setRoutingType((ConnType)2);\n\n    ConnRef *connRef340 = new ConnRef(router, 340);\n    ConnEnd srcPt340(Point(1873.12835649198, 33.25685491512604), 15);\n    connRef340->setSourceEndpoint(srcPt340);\n    ConnEnd dstPt340(Point(1928.12835649298, 33.25685491512604), 4);\n    connRef340->setDestEndpoint(dstPt340);\n    connRef340->setRoutingType((ConnType)2);\n\n    ConnRef *connRef341 = new ConnRef(router, 341);\n    ConnEnd srcPt341(Point(1785.12835649098, 33.25685491512604), 8);\n    connRef341->setSourceEndpoint(srcPt341);\n    ConnEnd dstPt341(Point(1873.12835649198, 33.25685491512604), 15);\n    connRef341->setDestEndpoint(dstPt341);\n    connRef341->setRoutingType((ConnType)2);\n\n    ConnRef *connRef342 = new ConnRef(router, 342);\n    ConnEnd srcPt342(Point(1958.12835649298, 33.25685491512604), 8);\n    connRef342->setSourceEndpoint(srcPt342);\n    ConnEnd dstPt342(Point(2046.795023159646, 33.25685491512604), 15);\n    connRef342->setDestEndpoint(dstPt342);\n    connRef342->setRoutingType((ConnType)2);\n\n    ConnRef *connRef343 = new ConnRef(router, 343);\n    ConnEnd srcPt343(Point(1958.12835649298, 33.25685491512604), 8);\n    connRef343->setSourceEndpoint(srcPt343);\n    ConnEnd dstPt343(Point(1980.795023159646, 99.25685491512604), 15);\n    connRef343->setDestEndpoint(dstPt343);\n    connRef343->setRoutingType((ConnType)2);\n\n    ConnRef *connRef344 = new ConnRef(router, 344);\n    ConnEnd srcPt344(Point(412.62835648698, -319.4098117515406), 4);\n    connRef344->setSourceEndpoint(srcPt344);\n    ConnEnd dstPt344(Point(181.62835648698, -298.4098117515406), 15);\n    connRef344->setDestEndpoint(dstPt344);\n    connRef344->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints344(1);\n    checkpoints344[0] = Checkpoint(Point(389.62835648698, -298.4098117515406), (ConnDirFlags) 15, (ConnDirFlags) 4);\n    connRef344->setRoutingCheckpoints(checkpoints344);\n\n    ConnRef *connRef345 = new ConnRef(router, 345);\n    ConnEnd srcPt345(Point(442.62835648698, -319.4098117515406), 8);\n    connRef345->setSourceEndpoint(srcPt345);\n    ConnEnd dstPt345(Point(530.62835648798, -298.4098117515406), 15);\n    connRef345->setDestEndpoint(dstPt345);\n    connRef345->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints345(1);\n    checkpoints345[0] = Checkpoint(Point(465.62835648698, -298.4098117515406), (ConnDirFlags) 15, (ConnDirFlags) 8);\n    connRef345->setRoutingCheckpoints(checkpoints345);\n\n    ConnRef *connRef346 = new ConnRef(router, 346);\n    ConnEnd srcPt346(Point(46.62835648497997, 945.8568549161259), 8);\n    connRef346->setSourceEndpoint(srcPt346);\n    ConnEnd dstPt346(Point(530.62835648798, 1143.856854916126), 15);\n    connRef346->setDestEndpoint(dstPt346);\n    connRef346->setRoutingType((ConnType)2);\n\n    ConnRef *connRef347 = new ConnRef(router, 347);\n    ConnEnd srcPt347(Point(-319.87164351602, 738.8568549161259), 15);\n    connRef347->setSourceEndpoint(srcPt347);\n    ConnEnd dstPt347(Point(16.62835648497997, 945.8568549161259), 4);\n    connRef347->setDestEndpoint(dstPt347);\n    connRef347->setRoutingType((ConnType)2);\n\n    ConnRef *connRef348 = new ConnRef(router, 348);\n    ConnEnd srcPt348(Point(509.62835648798, 1357.606854916126), 2);\n    connRef348->setSourceEndpoint(srcPt348);\n    ConnEnd dstPt348(Point(530.62835648798, 1647.106854917126), 15);\n    connRef348->setDestEndpoint(dstPt348);\n    connRef348->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints348(1);\n    checkpoints348[0] = Checkpoint(Point(530.62835648798, 1372.606854916126), (ConnDirFlags) 15, (ConnDirFlags) 1);\n    connRef348->setRoutingCheckpoints(checkpoints348);\n\n    ConnRef *connRef349 = new ConnRef(router, 349);\n    ConnEnd srcPt349(Point(509.62835648798, 1327.606854916126), 1);\n    connRef349->setSourceEndpoint(srcPt349);\n    ConnEnd dstPt349(Point(530.62835648798, 1143.856854916126), 15);\n    connRef349->setDestEndpoint(dstPt349);\n    connRef349->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints349(1);\n    checkpoints349[0] = Checkpoint(Point(530.62835648798, 1312.606854916126), (ConnDirFlags) 15, (ConnDirFlags) 2);\n    connRef349->setRoutingCheckpoints(checkpoints349);\n\n    ConnRef *connRef350 = new ConnRef(router, 350);\n    ConnEnd srcPt350(Point(-1006.12164351602, -126.4098117515406), 15);\n    connRef350->setSourceEndpoint(srcPt350);\n    ConnEnd dstPt350(Point(-1006.12164351602, -250.4098117515406), 2);\n    connRef350->setDestEndpoint(dstPt350);\n    connRef350->setRoutingType((ConnType)2);\n\n    ConnRef *connRef351 = new ConnRef(router, 351);\n    ConnEnd srcPt351(Point(-1006.12164351602, -280.4098117515406), 1);\n    connRef351->setSourceEndpoint(srcPt351);\n    ConnEnd dstPt351(Point(-1006.12164351602, -431.4098117525406), 15);\n    connRef351->setDestEndpoint(dstPt351);\n    connRef351->setRoutingType((ConnType)2);\n\n    ConnRef *connRef352 = new ConnRef(router, 352);\n    ConnEnd srcPt352(Point(-1006.12164351602, -512.4098117525407), 1);\n    connRef352->setSourceEndpoint(srcPt352);\n    ConnEnd dstPt352(Point(-1006.12164351602, -737.9812403239691), 15);\n    connRef352->setDestEndpoint(dstPt352);\n    connRef352->setRoutingType((ConnType)2);\n\n    ConnRef *connRef353 = new ConnRef(router, 353);\n    ConnEnd srcPt353(Point(-1006.12164351602, -431.4098117525406), 15);\n    connRef353->setSourceEndpoint(srcPt353);\n    ConnEnd dstPt353(Point(-1006.12164351602, -482.4098117525407), 2);\n    connRef353->setDestEndpoint(dstPt353);\n    connRef353->setRoutingType((ConnType)2);\n\n    ConnRef *connRef354 = new ConnRef(router, 354);\n    ConnEnd srcPt354(Point(-823.12164351602, -737.9812403239691), 4);\n    connRef354->setSourceEndpoint(srcPt354);\n    ConnEnd dstPt354(Point(-1006.12164351602, -737.9812403239691), 15);\n    connRef354->setDestEndpoint(dstPt354);\n    connRef354->setRoutingType((ConnType)2);\n\n    ConnRef *connRef355 = new ConnRef(router, 355);\n    ConnEnd srcPt355(Point(-695.12164351602, -737.9812403239691), 15);\n    connRef355->setSourceEndpoint(srcPt355);\n    ConnEnd dstPt355(Point(-793.12164351602, -737.9812403239691), 8);\n    connRef355->setDestEndpoint(dstPt355);\n    connRef355->setRoutingType((ConnType)2);\n\n    ConnRef *connRef356 = new ConnRef(router, 356);\n    ConnEnd srcPt356(Point(-453.87164351602, -833.9812403239691), 8);\n    connRef356->setSourceEndpoint(srcPt356);\n    ConnEnd dstPt356(Point(-226.87164351502, -737.9812403239691), 15);\n    connRef356->setDestEndpoint(dstPt356);\n    connRef356->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints356(1);\n    checkpoints356[0] = Checkpoint(Point(-430.87164351602, -737.9812403239691), (ConnDirFlags) 15, (ConnDirFlags) 8);\n    connRef356->setRoutingCheckpoints(checkpoints356);\n\n    ConnRef *connRef357 = new ConnRef(router, 357);\n    ConnEnd srcPt357(Point(-453.87164351602, -758.9812403239691), 8);\n    connRef357->setSourceEndpoint(srcPt357);\n    ConnEnd dstPt357(Point(-226.87164351502, -737.9812403239691), 15);\n    connRef357->setDestEndpoint(dstPt357);\n    connRef357->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints357(1);\n    checkpoints357[0] = Checkpoint(Point(-430.87164351602, -737.9812403239691), (ConnDirFlags) 15, (ConnDirFlags) 8);\n    connRef357->setRoutingCheckpoints(checkpoints357);\n\n    ConnRef *connRef358 = new ConnRef(router, 358);\n    ConnEnd srcPt358(Point(100.62835648698, -737.9812403239691), 4);\n    connRef358->setSourceEndpoint(srcPt358);\n    ConnEnd dstPt358(Point(-125.87164351502, -877.4098117525407), 15);\n    connRef358->setDestEndpoint(dstPt358);\n    connRef358->setRoutingType((ConnType)2);\n\n    ConnRef *connRef359 = new ConnRef(router, 359);\n    ConnEnd srcPt359(Point(262.62835648698, -737.9812403239691), 15);\n    connRef359->setSourceEndpoint(srcPt359);\n    ConnEnd dstPt359(Point(130.62835648698, -737.9812403239691), 8);\n    connRef359->setDestEndpoint(dstPt359);\n    connRef359->setRoutingType((ConnType)2);\n\n    ConnRef *connRef360 = new ConnRef(router, 360);\n    ConnEnd srcPt360(Point(100.62835648698, -737.9812403239691), 4);\n    connRef360->setSourceEndpoint(srcPt360);\n    ConnEnd dstPt360(Point(-226.87164351502, -737.9812403239691), 15);\n    connRef360->setDestEndpoint(dstPt360);\n    connRef360->setRoutingType((ConnType)2);\n\n    ConnRef *connRef361 = new ConnRef(router, 361);\n    ConnEnd srcPt361(Point(-486.87164351602, -497.4098117525407), 8);\n    connRef361->setSourceEndpoint(srcPt361);\n    ConnEnd dstPt361(Point(181.62835648698, -298.4098117515406), 15);\n    connRef361->setDestEndpoint(dstPt361);\n    connRef361->setRoutingType((ConnType)2);\n\n    ConnRef *connRef362 = new ConnRef(router, 362);\n    ConnEnd srcPt362(Point(-695.12164351602, 66.25685491512604), 15);\n    connRef362->setSourceEndpoint(srcPt362);\n    ConnEnd dstPt362(Point(-516.87164351602, -497.4098117525407), 4);\n    connRef362->setDestEndpoint(dstPt362);\n    connRef362->setRoutingType((ConnType)2);\n\n    ConnRef *connRef363 = new ConnRef(router, 363);\n    ConnEnd srcPt363(Point(-319.87164351602, -298.4098117515406), 15);\n    connRef363->setSourceEndpoint(srcPt363);\n    ConnEnd dstPt363(Point(-486.87164351602, -378.4098117525406), 8);\n    connRef363->setDestEndpoint(dstPt363);\n    connRef363->setRoutingType((ConnType)2);\n\n    ConnRef *connRef364 = new ConnRef(router, 364);\n    ConnEnd srcPt364(Point(-516.87164351602, -378.4098117525406), 4);\n    connRef364->setSourceEndpoint(srcPt364);\n    ConnEnd dstPt364(Point(-695.12164351602, 66.25685491512604), 15);\n    connRef364->setDestEndpoint(dstPt364);\n    connRef364->setRoutingType((ConnType)2);\n\n    ConnRef *connRef365 = new ConnRef(router, 365);\n    ConnEnd srcPt365(Point(81.62835648597996, -277.4098117515406), 4);\n    connRef365->setSourceEndpoint(srcPt365);\n    ConnEnd dstPt365(Point(-319.87164351602, -298.4098117515406), 15);\n    connRef365->setDestEndpoint(dstPt365);\n    connRef365->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints365(1);\n    checkpoints365[0] = Checkpoint(Point(58.62835648597996, -298.4098117515406), (ConnDirFlags) 15, (ConnDirFlags) 4);\n    connRef365->setRoutingCheckpoints(checkpoints365);\n\n    ConnRef *connRef366 = new ConnRef(router, 366);\n    ConnEnd srcPt366(Point(111.62835648598, -277.4098117515406), 8);\n    connRef366->setSourceEndpoint(srcPt366);\n    ConnEnd dstPt366(Point(181.62835648698, -298.4098117515406), 15);\n    connRef366->setDestEndpoint(dstPt366);\n    connRef366->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints366(1);\n    checkpoints366[0] = Checkpoint(Point(134.62835648598, -298.4098117515406), (ConnDirFlags) 15, (ConnDirFlags) 8);\n    connRef366->setRoutingCheckpoints(checkpoints366);\n\n    ConnRef *connRef367 = new ConnRef(router, 367);\n    ConnEnd srcPt367(Point(81.62835648597996, -202.4098117515406), 4);\n    connRef367->setSourceEndpoint(srcPt367);\n    ConnEnd dstPt367(Point(-319.87164351602, -298.4098117515406), 15);\n    connRef367->setDestEndpoint(dstPt367);\n    connRef367->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints367(1);\n    checkpoints367[0] = Checkpoint(Point(58.62835648597996, -298.4098117515406), (ConnDirFlags) 15, (ConnDirFlags) 4);\n    connRef367->setRoutingCheckpoints(checkpoints367);\n\n    ConnRef *connRef368 = new ConnRef(router, 368);\n    ConnEnd srcPt368(Point(111.62835648598, -202.4098117515406), 8);\n    connRef368->setSourceEndpoint(srcPt368);\n    ConnEnd dstPt368(Point(181.62835648698, -298.4098117515406), 15);\n    connRef368->setDestEndpoint(dstPt368);\n    connRef368->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints368(1);\n    checkpoints368[0] = Checkpoint(Point(134.62835648598, -298.4098117515406), (ConnDirFlags) 15, (ConnDirFlags) 8);\n    connRef368->setRoutingCheckpoints(checkpoints368);\n\n    ConnRef *connRef369 = new ConnRef(router, 369);\n    ConnEnd srcPt369(Point(412.62835648698, -277.4098117515406), 4);\n    connRef369->setSourceEndpoint(srcPt369);\n    ConnEnd dstPt369(Point(181.62835648698, -298.4098117515406), 15);\n    connRef369->setDestEndpoint(dstPt369);\n    connRef369->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints369(1);\n    checkpoints369[0] = Checkpoint(Point(389.62835648698, -298.4098117515406), (ConnDirFlags) 15, (ConnDirFlags) 4);\n    connRef369->setRoutingCheckpoints(checkpoints369);\n\n    ConnRef *connRef370 = new ConnRef(router, 370);\n    ConnEnd srcPt370(Point(442.62835648698, -277.4098117515406), 8);\n    connRef370->setSourceEndpoint(srcPt370);\n    ConnEnd dstPt370(Point(530.62835648798, -298.4098117515406), 15);\n    connRef370->setDestEndpoint(dstPt370);\n    connRef370->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints370(1);\n    checkpoints370[0] = Checkpoint(Point(465.62835648698, -298.4098117515406), (ConnDirFlags) 15, (ConnDirFlags) 8);\n    connRef370->setRoutingCheckpoints(checkpoints370);\n\n    ConnRef *connRef371 = new ConnRef(router, 371);\n    ConnEnd srcPt371(Point(412.62835648698, -202.4098117515406), 4);\n    connRef371->setSourceEndpoint(srcPt371);\n    ConnEnd dstPt371(Point(181.62835648698, -298.4098117515406), 15);\n    connRef371->setDestEndpoint(dstPt371);\n    connRef371->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints371(1);\n    checkpoints371[0] = Checkpoint(Point(389.62835648698, -298.4098117515406), (ConnDirFlags) 15, (ConnDirFlags) 4);\n    connRef371->setRoutingCheckpoints(checkpoints371);\n\n    ConnRef *connRef372 = new ConnRef(router, 372);\n    ConnEnd srcPt372(Point(442.62835648698, -202.4098117515406), 8);\n    connRef372->setSourceEndpoint(srcPt372);\n    ConnEnd dstPt372(Point(530.62835648798, -298.4098117515406), 15);\n    connRef372->setDestEndpoint(dstPt372);\n    connRef372->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints372(1);\n    checkpoints372[0] = Checkpoint(Point(465.62835648698, -298.4098117515406), (ConnDirFlags) 15, (ConnDirFlags) 8);\n    connRef372->setRoutingCheckpoints(checkpoints372);\n\n    ConnRef *connRef373 = new ConnRef(router, 373);\n    ConnEnd srcPt373(Point(-298.87164351602, -174.4098117515406), 1);\n    connRef373->setSourceEndpoint(srcPt373);\n    ConnEnd dstPt373(Point(-319.87164351602, -298.4098117515406), 15);\n    connRef373->setDestEndpoint(dstPt373);\n    connRef373->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints373(1);\n    checkpoints373[0] = Checkpoint(Point(-319.87164351602, -189.4098117515406), (ConnDirFlags) 15, (ConnDirFlags) 2);\n    connRef373->setRoutingCheckpoints(checkpoints373);\n\n    ConnRef *connRef374 = new ConnRef(router, 374);\n    ConnEnd srcPt374(Point(-298.87164351602, -144.4098117515406), 2);\n    connRef374->setSourceEndpoint(srcPt374);\n    ConnEnd dstPt374(Point(-319.87164351602, 66.25685491512604), 15);\n    connRef374->setDestEndpoint(dstPt374);\n    connRef374->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints374(1);\n    checkpoints374[0] = Checkpoint(Point(-319.87164351602, -129.4098117515406), (ConnDirFlags) 15, (ConnDirFlags) 1);\n    connRef374->setRoutingCheckpoints(checkpoints374);\n\n    ConnRef *connRef375 = new ConnRef(router, 375);\n    ConnEnd srcPt375(Point(-340.87164351602, -174.4098117515406), 1);\n    connRef375->setSourceEndpoint(srcPt375);\n    ConnEnd dstPt375(Point(-319.87164351602, -298.4098117515406), 15);\n    connRef375->setDestEndpoint(dstPt375);\n    connRef375->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints375(1);\n    checkpoints375[0] = Checkpoint(Point(-319.87164351602, -189.4098117515406), (ConnDirFlags) 15, (ConnDirFlags) 2);\n    connRef375->setRoutingCheckpoints(checkpoints375);\n\n    ConnRef *connRef376 = new ConnRef(router, 376);\n    ConnEnd srcPt376(Point(-340.87164351602, -144.4098117515406), 2);\n    connRef376->setSourceEndpoint(srcPt376);\n    ConnEnd dstPt376(Point(-319.87164351602, 66.25685491512604), 15);\n    connRef376->setDestEndpoint(dstPt376);\n    connRef376->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints376(1);\n    checkpoints376[0] = Checkpoint(Point(-319.87164351602, -129.4098117515406), (ConnDirFlags) 15, (ConnDirFlags) 1);\n    connRef376->setRoutingCheckpoints(checkpoints376);\n\n    ConnRef *connRef377 = new ConnRef(router, 377);\n    ConnEnd srcPt377(Point(81.62835648597996, -394.4098117515406), 4);\n    connRef377->setSourceEndpoint(srcPt377);\n    ConnEnd dstPt377(Point(-319.87164351602, -298.4098117515406), 15);\n    connRef377->setDestEndpoint(dstPt377);\n    connRef377->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints377(1);\n    checkpoints377[0] = Checkpoint(Point(58.62835648597996, -298.4098117515406), (ConnDirFlags) 15, (ConnDirFlags) 4);\n    connRef377->setRoutingCheckpoints(checkpoints377);\n\n    ConnRef *connRef378 = new ConnRef(router, 378);\n    ConnEnd srcPt378(Point(111.62835648598, -394.4098117515406), 8);\n    connRef378->setSourceEndpoint(srcPt378);\n    ConnEnd dstPt378(Point(181.62835648698, -298.4098117515406), 15);\n    connRef378->setDestEndpoint(dstPt378);\n    connRef378->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints378(1);\n    checkpoints378[0] = Checkpoint(Point(134.62835648598, -298.4098117515406), (ConnDirFlags) 15, (ConnDirFlags) 8);\n    connRef378->setRoutingCheckpoints(checkpoints378);\n\n    ConnRef *connRef379 = new ConnRef(router, 379);\n    ConnEnd srcPt379(Point(81.62835648597996, -319.4098117515406), 4);\n    connRef379->setSourceEndpoint(srcPt379);\n    ConnEnd dstPt379(Point(-319.87164351602, -298.4098117515406), 15);\n    connRef379->setDestEndpoint(dstPt379);\n    connRef379->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints379(1);\n    checkpoints379[0] = Checkpoint(Point(58.62835648597996, -298.4098117515406), (ConnDirFlags) 15, (ConnDirFlags) 4);\n    connRef379->setRoutingCheckpoints(checkpoints379);\n\n    ConnRef *connRef380 = new ConnRef(router, 380);\n    ConnEnd srcPt380(Point(111.62835648598, -319.4098117515406), 8);\n    connRef380->setSourceEndpoint(srcPt380);\n    ConnEnd dstPt380(Point(181.62835648698, -298.4098117515406), 15);\n    connRef380->setDestEndpoint(dstPt380);\n    connRef380->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints380(1);\n    checkpoints380[0] = Checkpoint(Point(134.62835648598, -298.4098117515406), (ConnDirFlags) 15, (ConnDirFlags) 8);\n    connRef380->setRoutingCheckpoints(checkpoints380);\n\n    ConnRef *connRef381 = new ConnRef(router, 381);\n    ConnEnd srcPt381(Point(442.62835648698, -469.4098117515406), 8);\n    connRef381->setSourceEndpoint(srcPt381);\n    ConnEnd dstPt381(Point(530.62835648798, -298.4098117515406), 15);\n    connRef381->setDestEndpoint(dstPt381);\n    connRef381->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints381(1);\n    checkpoints381[0] = Checkpoint(Point(465.62835648698, -298.4098117515406), (ConnDirFlags) 15, (ConnDirFlags) 8);\n    connRef381->setRoutingCheckpoints(checkpoints381);\n\n    ConnRef *connRef382 = new ConnRef(router, 382);\n    ConnEnd srcPt382(Point(442.62835648698, -394.4098117515406), 8);\n    connRef382->setSourceEndpoint(srcPt382);\n    ConnEnd dstPt382(Point(530.62835648798, -298.4098117515406), 15);\n    connRef382->setDestEndpoint(dstPt382);\n    connRef382->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints382(1);\n    checkpoints382[0] = Checkpoint(Point(465.62835648698, -298.4098117515406), (ConnDirFlags) 15, (ConnDirFlags) 8);\n    connRef382->setRoutingCheckpoints(checkpoints382);\n\n    ConnRef *connRef383 = new ConnRef(router, 383);\n    ConnEnd srcPt383(Point(530.62835648798, -298.4098117515406), 15);\n    connRef383->setSourceEndpoint(srcPt383);\n    ConnEnd dstPt383(Point(830.62835648898, -232.4098117515406), 4);\n    connRef383->setDestEndpoint(dstPt383);\n    connRef383->setRoutingType((ConnType)2);\n\n    ConnRef *connRef384 = new ConnRef(router, 384);\n    ConnEnd srcPt384(Point(860.62835648898, -232.4098117515406), 8);\n    connRef384->setSourceEndpoint(srcPt384);\n    ConnEnd dstPt384(Point(1514.12835648898, -298.4098117515406), 15);\n    connRef384->setDestEndpoint(dstPt384);\n    connRef384->setRoutingType((ConnType)2);\n\n    ConnRef *connRef385 = new ConnRef(router, 385);\n    ConnEnd srcPt385(Point(617.9873402531949, -277.4098117515406), 4);\n    connRef385->setSourceEndpoint(srcPt385);\n    ConnEnd dstPt385(Point(530.62835648798, -298.4098117515406), 15);\n    connRef385->setDestEndpoint(dstPt385);\n    connRef385->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints385(1);\n    checkpoints385[0] = Checkpoint(Point(594.9873402531949, -298.4098117515406), (ConnDirFlags) 15, (ConnDirFlags) 4);\n    connRef385->setRoutingCheckpoints(checkpoints385);\n\n    ConnRef *connRef386 = new ConnRef(router, 386);\n    ConnEnd srcPt386(Point(647.9873402531949, -277.4098117515406), 8);\n    connRef386->setSourceEndpoint(srcPt386);\n    ConnEnd dstPt386(Point(982.9140707746942, -298.4098117515406), 15);\n    connRef386->setDestEndpoint(dstPt386);\n    connRef386->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints386(1);\n    checkpoints386[0] = Checkpoint(Point(670.9873402531949, -298.4098117515406), (ConnDirFlags) 15, (ConnDirFlags) 8);\n    connRef386->setRoutingCheckpoints(checkpoints386);\n\n    ConnRef *connRef387 = new ConnRef(router, 387);\n    ConnEnd srcPt387(Point(617.9873402531949, -319.4098117515406), 4);\n    connRef387->setSourceEndpoint(srcPt387);\n    ConnEnd dstPt387(Point(530.62835648798, -298.4098117515406), 15);\n    connRef387->setDestEndpoint(dstPt387);\n    connRef387->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints387(1);\n    checkpoints387[0] = Checkpoint(Point(594.9873402531949, -298.4098117515406), (ConnDirFlags) 15, (ConnDirFlags) 4);\n    connRef387->setRoutingCheckpoints(checkpoints387);\n\n    ConnRef *connRef388 = new ConnRef(router, 388);\n    ConnEnd srcPt388(Point(647.9873402531949, -319.4098117515406), 8);\n    connRef388->setSourceEndpoint(srcPt388);\n    ConnEnd dstPt388(Point(982.9140707746942, -298.4098117515406), 15);\n    connRef388->setDestEndpoint(dstPt388);\n    connRef388->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints388(1);\n    checkpoints388[0] = Checkpoint(Point(670.9873402531949, -298.4098117515406), (ConnDirFlags) 15, (ConnDirFlags) 8);\n    connRef388->setRoutingCheckpoints(checkpoints388);\n\n    ConnRef *connRef389 = new ConnRef(router, 389);\n    ConnEnd srcPt389(Point(1047.914070775694, -319.4098117515406), 4);\n    connRef389->setSourceEndpoint(srcPt389);\n    ConnEnd dstPt389(Point(982.9140707746942, -298.4098117515406), 15);\n    connRef389->setDestEndpoint(dstPt389);\n    connRef389->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints389(1);\n    checkpoints389[0] = Checkpoint(Point(1024.914070775694, -298.4098117515406), (ConnDirFlags) 15, (ConnDirFlags) 4);\n    connRef389->setRoutingCheckpoints(checkpoints389);\n\n    ConnRef *connRef390 = new ConnRef(router, 390);\n    ConnEnd srcPt390(Point(1077.914070775694, -319.4098117515406), 8);\n    connRef390->setSourceEndpoint(srcPt390);\n    ConnEnd dstPt390(Point(1514.12835648898, -298.4098117515406), 15);\n    connRef390->setDestEndpoint(dstPt390);\n    connRef390->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints390(1);\n    checkpoints390[0] = Checkpoint(Point(1100.914070775694, -298.4098117515406), (ConnDirFlags) 15, (ConnDirFlags) 8);\n    connRef390->setRoutingCheckpoints(checkpoints390);\n\n    ConnRef *connRef391 = new ConnRef(router, 391);\n    ConnEnd srcPt391(Point(1047.914070775694, -277.4098117515406), 4);\n    connRef391->setSourceEndpoint(srcPt391);\n    ConnEnd dstPt391(Point(982.9140707746942, -298.4098117515406), 15);\n    connRef391->setDestEndpoint(dstPt391);\n    connRef391->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints391(1);\n    checkpoints391[0] = Checkpoint(Point(1024.914070775694, -298.4098117515406), (ConnDirFlags) 15, (ConnDirFlags) 4);\n    connRef391->setRoutingCheckpoints(checkpoints391);\n\n    ConnRef *connRef392 = new ConnRef(router, 392);\n    ConnEnd srcPt392(Point(1077.914070775694, -277.4098117515406), 8);\n    connRef392->setSourceEndpoint(srcPt392);\n    ConnEnd dstPt392(Point(1514.12835648898, -298.4098117515406), 15);\n    connRef392->setDestEndpoint(dstPt392);\n    connRef392->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints392(1);\n    checkpoints392[0] = Checkpoint(Point(1100.914070775694, -298.4098117515406), (ConnDirFlags) 15, (ConnDirFlags) 8);\n    connRef392->setRoutingCheckpoints(checkpoints392);\n\n    ConnRef *connRef393 = new ConnRef(router, 393);\n    ConnEnd srcPt393(Point(1579.12835648998, -319.4098117515406), 4);\n    connRef393->setSourceEndpoint(srcPt393);\n    ConnEnd dstPt393(Point(1514.12835648898, -298.4098117515406), 15);\n    connRef393->setDestEndpoint(dstPt393);\n    connRef393->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints393(1);\n    checkpoints393[0] = Checkpoint(Point(1556.12835648998, -298.4098117515406), (ConnDirFlags) 15, (ConnDirFlags) 4);\n    connRef393->setRoutingCheckpoints(checkpoints393);\n\n    ConnRef *connRef394 = new ConnRef(router, 394);\n    ConnEnd srcPt394(Point(1609.12835648998, -319.4098117515406), 8);\n    connRef394->setSourceEndpoint(srcPt394);\n    ConnEnd dstPt394(Point(1700.12835648998, -298.4098117515406), 15);\n    connRef394->setDestEndpoint(dstPt394);\n    connRef394->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints394(1);\n    checkpoints394[0] = Checkpoint(Point(1632.12835648998, -298.4098117515406), (ConnDirFlags) 15, (ConnDirFlags) 8);\n    connRef394->setRoutingCheckpoints(checkpoints394);\n\n    ConnRef *connRef395 = new ConnRef(router, 395);\n    ConnEnd srcPt395(Point(1579.12835648998, -277.4098117515406), 4);\n    connRef395->setSourceEndpoint(srcPt395);\n    ConnEnd dstPt395(Point(1514.12835648898, -298.4098117515406), 15);\n    connRef395->setDestEndpoint(dstPt395);\n    connRef395->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints395(1);\n    checkpoints395[0] = Checkpoint(Point(1556.12835648998, -298.4098117515406), (ConnDirFlags) 15, (ConnDirFlags) 4);\n    connRef395->setRoutingCheckpoints(checkpoints395);\n\n    ConnRef *connRef396 = new ConnRef(router, 396);\n    ConnEnd srcPt396(Point(1609.12835648998, -277.4098117515406), 8);\n    connRef396->setSourceEndpoint(srcPt396);\n    ConnEnd dstPt396(Point(1700.12835648998, -298.4098117515406), 15);\n    connRef396->setDestEndpoint(dstPt396);\n    connRef396->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints396(1);\n    checkpoints396[0] = Checkpoint(Point(1632.12835648998, -298.4098117515406), (ConnDirFlags) 15, (ConnDirFlags) 8);\n    connRef396->setRoutingCheckpoints(checkpoints396);\n\n    ConnRef *connRef397 = new ConnRef(router, 397);\n    ConnEnd srcPt397(Point(1785.12835649098, -298.4098117515406), 8);\n    connRef397->setSourceEndpoint(srcPt397);\n    ConnEnd dstPt397(Point(1873.12835649198, -298.4098117515406), 15);\n    connRef397->setDestEndpoint(dstPt397);\n    connRef397->setRoutingType((ConnType)2);\n\n    ConnRef *connRef398 = new ConnRef(router, 398);\n    ConnEnd srcPt398(Point(1958.12835649298, -298.4098117515406), 8);\n    connRef398->setSourceEndpoint(srcPt398);\n    ConnEnd dstPt398(Point(2046.795023159646, -298.4098117515406), 15);\n    connRef398->setDestEndpoint(dstPt398);\n    connRef398->setRoutingType((ConnType)2);\n\n    ConnRef *connRef399 = new ConnRef(router, 399);\n    ConnEnd srcPt399(Point(-516.87164351602, 99.25685491512604), 4);\n    connRef399->setSourceEndpoint(srcPt399);\n    ConnEnd dstPt399(Point(-695.12164351602, 66.25685491512604), 15);\n    connRef399->setDestEndpoint(dstPt399);\n    connRef399->setRoutingType((ConnType)2);\n\n    ConnRef *connRef400 = new ConnRef(router, 400);\n    ConnEnd srcPt400(Point(-319.87164351602, 66.25685491512604), 15);\n    connRef400->setSourceEndpoint(srcPt400);\n    ConnEnd dstPt400(Point(-486.87164351602, 99.25685491512604), 8);\n    connRef400->setDestEndpoint(dstPt400);\n    connRef400->setRoutingType((ConnType)2);\n\n    ConnRef *connRef401 = new ConnRef(router, 401);\n    ConnEnd srcPt401(Point(-486.87164351602, 201.256854916126), 8);\n    connRef401->setSourceEndpoint(srcPt401);\n    ConnEnd dstPt401(Point(181.62835648698, 66.25685491512604), 15);\n    connRef401->setDestEndpoint(dstPt401);\n    connRef401->setRoutingType((ConnType)2);\n\n    ConnRef *connRef402 = new ConnRef(router, 402);\n    ConnEnd srcPt402(Point(-41.87164351502003, 45.25685491512604), 4);\n    connRef402->setSourceEndpoint(srcPt402);\n    ConnEnd dstPt402(Point(-319.87164351602, 66.25685491512604), 15);\n    connRef402->setDestEndpoint(dstPt402);\n    connRef402->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints402(1);\n    checkpoints402[0] = Checkpoint(Point(-64.87164351502003, 66.25685491512604), (ConnDirFlags) 15, (ConnDirFlags) 4);\n    connRef402->setRoutingCheckpoints(checkpoints402);\n\n    ConnRef *connRef403 = new ConnRef(router, 403);\n    ConnEnd srcPt403(Point(-11.87164351502003, 45.25685491512604), 8);\n    connRef403->setSourceEndpoint(srcPt403);\n    ConnEnd dstPt403(Point(181.62835648698, 66.25685491512604), 15);\n    connRef403->setDestEndpoint(dstPt403);\n    connRef403->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints403(1);\n    checkpoints403[0] = Checkpoint(Point(11.12835648497997, 66.25685491512604), (ConnDirFlags) 15, (ConnDirFlags) 8);\n    connRef403->setRoutingCheckpoints(checkpoints403);\n\n    ConnRef *connRef404 = new ConnRef(router, 404);\n    ConnEnd srcPt404(Point(-41.87164351502003, 87.25685491512604), 4);\n    connRef404->setSourceEndpoint(srcPt404);\n    ConnEnd dstPt404(Point(-319.87164351602, 66.25685491512604), 15);\n    connRef404->setDestEndpoint(dstPt404);\n    connRef404->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints404(1);\n    checkpoints404[0] = Checkpoint(Point(-64.87164351502003, 66.25685491512604), (ConnDirFlags) 15, (ConnDirFlags) 4);\n    connRef404->setRoutingCheckpoints(checkpoints404);\n\n    ConnRef *connRef405 = new ConnRef(router, 405);\n    ConnEnd srcPt405(Point(-11.87164351502003, 87.25685491512604), 8);\n    connRef405->setSourceEndpoint(srcPt405);\n    ConnEnd dstPt405(Point(181.62835648698, 66.25685491512604), 15);\n    connRef405->setDestEndpoint(dstPt405);\n    connRef405->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints405(1);\n    checkpoints405[0] = Checkpoint(Point(11.12835648497997, 66.25685491512604), (ConnDirFlags) 15, (ConnDirFlags) 8);\n    connRef405->setRoutingCheckpoints(checkpoints405);\n\n    ConnRef *connRef406 = new ConnRef(router, 406);\n    ConnEnd srcPt406(Point(465.62835648698, 87.25685491512604), 8);\n    connRef406->setSourceEndpoint(srcPt406);\n    ConnEnd dstPt406(Point(530.62835648798, 66.25685491512604), 15);\n    connRef406->setDestEndpoint(dstPt406);\n    connRef406->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints406(1);\n    checkpoints406[0] = Checkpoint(Point(488.62835648698, 66.25685491512604), (ConnDirFlags) 15, (ConnDirFlags) 8);\n    connRef406->setRoutingCheckpoints(checkpoints406);\n\n    ConnRef *connRef407 = new ConnRef(router, 407);\n    ConnEnd srcPt407(Point(435.62835648698, 87.25685491512604), 4);\n    connRef407->setSourceEndpoint(srcPt407);\n    ConnEnd dstPt407(Point(181.62835648698, 66.25685491512604), 15);\n    connRef407->setDestEndpoint(dstPt407);\n    connRef407->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints407(1);\n    checkpoints407[0] = Checkpoint(Point(412.62835648698, 66.25685491512604), (ConnDirFlags) 15, (ConnDirFlags) 4);\n    connRef407->setRoutingCheckpoints(checkpoints407);\n\n    ConnRef *connRef408 = new ConnRef(router, 408);\n    ConnEnd srcPt408(Point(465.62835648698, 45.25685491512604), 8);\n    connRef408->setSourceEndpoint(srcPt408);\n    ConnEnd dstPt408(Point(530.62835648798, 66.25685491512604), 15);\n    connRef408->setDestEndpoint(dstPt408);\n    connRef408->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints408(1);\n    checkpoints408[0] = Checkpoint(Point(488.62835648698, 66.25685491512604), (ConnDirFlags) 15, (ConnDirFlags) 8);\n    connRef408->setRoutingCheckpoints(checkpoints408);\n\n    ConnRef *connRef409 = new ConnRef(router, 409);\n    ConnEnd srcPt409(Point(435.62835648698, 45.25685491512604), 4);\n    connRef409->setSourceEndpoint(srcPt409);\n    ConnEnd dstPt409(Point(181.62835648698, 66.25685491512604), 15);\n    connRef409->setDestEndpoint(dstPt409);\n    connRef409->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints409(1);\n    checkpoints409[0] = Checkpoint(Point(412.62835648698, 66.25685491512604), (ConnDirFlags) 15, (ConnDirFlags) 4);\n    connRef409->setRoutingCheckpoints(checkpoints409);\n\n    ConnRef *connRef410 = new ConnRef(router, 410);\n    ConnEnd srcPt410(Point(780.62835648798, 45.25685491512604), 8);\n    connRef410->setSourceEndpoint(srcPt410);\n    ConnEnd dstPt410(Point(982.9140707746942, 66.25685491512604), 15);\n    connRef410->setDestEndpoint(dstPt410);\n    connRef410->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints410(1);\n    checkpoints410[0] = Checkpoint(Point(803.62835648798, 66.25685491512604), (ConnDirFlags) 15, (ConnDirFlags) 8);\n    connRef410->setRoutingCheckpoints(checkpoints410);\n\n    ConnRef *connRef411 = new ConnRef(router, 411);\n    ConnEnd srcPt411(Point(750.62835648798, 45.25685491512604), 4);\n    connRef411->setSourceEndpoint(srcPt411);\n    ConnEnd dstPt411(Point(530.62835648798, 66.25685491512604), 15);\n    connRef411->setDestEndpoint(dstPt411);\n    connRef411->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints411(1);\n    checkpoints411[0] = Checkpoint(Point(727.62835648798, 66.25685491512604), (ConnDirFlags) 15, (ConnDirFlags) 4);\n    connRef411->setRoutingCheckpoints(checkpoints411);\n\n    ConnRef *connRef412 = new ConnRef(router, 412);\n    ConnEnd srcPt412(Point(780.62835648798, 87.25685491512604), 8);\n    connRef412->setSourceEndpoint(srcPt412);\n    ConnEnd dstPt412(Point(982.9140707746942, 66.25685491512604), 15);\n    connRef412->setDestEndpoint(dstPt412);\n    connRef412->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints412(1);\n    checkpoints412[0] = Checkpoint(Point(803.62835648798, 66.25685491512604), (ConnDirFlags) 15, (ConnDirFlags) 8);\n    connRef412->setRoutingCheckpoints(checkpoints412);\n\n    ConnRef *connRef413 = new ConnRef(router, 413);\n    ConnEnd srcPt413(Point(750.62835648798, 87.25685491512604), 4);\n    connRef413->setSourceEndpoint(srcPt413);\n    ConnEnd dstPt413(Point(530.62835648798, 66.25685491512604), 15);\n    connRef413->setDestEndpoint(dstPt413);\n    connRef413->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints413(1);\n    checkpoints413[0] = Checkpoint(Point(727.62835648798, 66.25685491512604), (ConnDirFlags) 15, (ConnDirFlags) 4);\n    connRef413->setRoutingCheckpoints(checkpoints413);\n\n    ConnRef *connRef414 = new ConnRef(router, 414);\n    ConnEnd srcPt414(Point(982.9140707746942, -141.4098117515406), 1);\n    connRef414->setSourceEndpoint(srcPt414);\n    ConnEnd dstPt414(Point(982.9140707746942, -298.4098117515406), 15);\n    connRef414->setDestEndpoint(dstPt414);\n    connRef414->setRoutingType((ConnType)2);\n\n    ConnRef *connRef415 = new ConnRef(router, 415);\n    ConnEnd srcPt415(Point(982.9140707746942, 66.25685491512604), 15);\n    connRef415->setSourceEndpoint(srcPt415);\n    ConnEnd dstPt415(Point(982.9140707746942, -111.4098117515406), 2);\n    connRef415->setDestEndpoint(dstPt415);\n    connRef415->setRoutingType((ConnType)2);\n\n    ConnRef *connRef416 = new ConnRef(router, 416);\n    ConnEnd srcPt416(Point(1429.12835648898, -141.4098117515406), 1);\n    connRef416->setSourceEndpoint(srcPt416);\n    ConnEnd dstPt416(Point(1514.12835648898, -298.4098117515406), 15);\n    connRef416->setDestEndpoint(dstPt416);\n    connRef416->setRoutingType((ConnType)2);\n\n    ConnRef *connRef417 = new ConnRef(router, 417);\n    ConnEnd srcPt417(Point(1264.12835648898, 66.25685491512604), 15);\n    connRef417->setSourceEndpoint(srcPt417);\n    ConnEnd dstPt417(Point(1429.12835648898, -111.4098117515406), 2);\n    connRef417->setDestEndpoint(dstPt417);\n    connRef417->setRoutingType((ConnType)2);\n\n    ConnRef *connRef418 = new ConnRef(router, 418);\n    ConnEnd srcPt418(Point(1116.12835648898, 45.25685491512604), 8);\n    connRef418->setSourceEndpoint(srcPt418);\n    ConnEnd dstPt418(Point(1264.12835648898, 66.25685491512604), 15);\n    connRef418->setDestEndpoint(dstPt418);\n    connRef418->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints418(1);\n    checkpoints418[0] = Checkpoint(Point(1139.12835648898, 66.25685491512604), (ConnDirFlags) 15, (ConnDirFlags) 8);\n    connRef418->setRoutingCheckpoints(checkpoints418);\n\n    ConnRef *connRef419 = new ConnRef(router, 419);\n    ConnEnd srcPt419(Point(1086.12835648898, 45.25685491512604), 4);\n    connRef419->setSourceEndpoint(srcPt419);\n    ConnEnd dstPt419(Point(982.9140707746942, 66.25685491512604), 15);\n    connRef419->setDestEndpoint(dstPt419);\n    connRef419->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints419(1);\n    checkpoints419[0] = Checkpoint(Point(1063.12835648898, 66.25685491512604), (ConnDirFlags) 15, (ConnDirFlags) 4);\n    connRef419->setRoutingCheckpoints(checkpoints419);\n\n    ConnRef *connRef420 = new ConnRef(router, 420);\n    ConnEnd srcPt420(Point(1116.12835648898, 87.25685491512604), 8);\n    connRef420->setSourceEndpoint(srcPt420);\n    ConnEnd dstPt420(Point(1264.12835648898, 66.25685491512604), 15);\n    connRef420->setDestEndpoint(dstPt420);\n    connRef420->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints420(1);\n    checkpoints420[0] = Checkpoint(Point(1139.12835648898, 66.25685491512604), (ConnDirFlags) 15, (ConnDirFlags) 8);\n    connRef420->setRoutingCheckpoints(checkpoints420);\n\n    ConnRef *connRef421 = new ConnRef(router, 421);\n    ConnEnd srcPt421(Point(1086.12835648898, 87.25685491512604), 4);\n    connRef421->setSourceEndpoint(srcPt421);\n    ConnEnd dstPt421(Point(982.9140707746942, 66.25685491512604), 15);\n    connRef421->setDestEndpoint(dstPt421);\n    connRef421->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints421(1);\n    checkpoints421[0] = Checkpoint(Point(1063.12835648898, 66.25685491512604), (ConnDirFlags) 15, (ConnDirFlags) 4);\n    connRef421->setRoutingCheckpoints(checkpoints421);\n\n    ConnRef *connRef422 = new ConnRef(router, 422);\n    ConnEnd srcPt422(Point(714.62835648798, 255.2568549161261), 8);\n    connRef422->setSourceEndpoint(srcPt422);\n    ConnEnd dstPt422(Point(1264.12835648898, 66.25685491512604), 15);\n    connRef422->setDestEndpoint(dstPt422);\n    connRef422->setRoutingType((ConnType)2);\n\n    ConnRef *connRef423 = new ConnRef(router, 423);\n    ConnEnd srcPt423(Point(530.62835648798, 66.25685491512604), 15);\n    connRef423->setSourceEndpoint(srcPt423);\n    ConnEnd dstPt423(Point(684.62835648798, 255.2568549161261), 4);\n    connRef423->setDestEndpoint(dstPt423);\n    connRef423->setRoutingType((ConnType)2);\n\n    ConnRef *connRef424 = new ConnRef(router, 424);\n    ConnEnd srcPt424(Point(1514.12835648898, -298.4098117515406), 15);\n    connRef424->setSourceEndpoint(srcPt424);\n    ConnEnd dstPt424(Point(1612.12835648998, 33.25685491512604), 4);\n    connRef424->setDestEndpoint(dstPt424);\n    connRef424->setRoutingType((ConnType)2);\n\n    ConnRef *connRef425 = new ConnRef(router, 425);\n    ConnEnd srcPt425(Point(1642.12835648998, 33.25685491512604), 8);\n    connRef425->setSourceEndpoint(srcPt425);\n    ConnEnd dstPt425(Point(1700.12835648998, 33.25685491512604), 15);\n    connRef425->setDestEndpoint(dstPt425);\n    connRef425->setRoutingType((ConnType)2);\n\n    ConnRef *connRef426 = new ConnRef(router, 426);\n    ConnEnd srcPt426(Point(-874.12164351602, 756.8568549161259), 1);\n    connRef426->setSourceEndpoint(srcPt426);\n    ConnEnd dstPt426(Point(-841.12164351602, 668.6568549161261), 15);\n    connRef426->setDestEndpoint(dstPt426);\n    connRef426->setRoutingType((ConnType)2);\n\n    ConnRef *connRef427 = new ConnRef(router, 427);\n    ConnEnd srcPt427(Point(-728.12164351602, 786.8568549161259), 2);\n    connRef427->setSourceEndpoint(srcPt427);\n    ConnEnd dstPt427(Point(-841.12164351602, 890.8568549161259), 15);\n    connRef427->setDestEndpoint(dstPt427);\n    connRef427->setRoutingType((ConnType)2);\n\n    ConnRef *connRef428 = new ConnRef(router, 428);\n    ConnEnd srcPt428(Point(-319.87164351602, -298.4098117515406), 15);\n    connRef428->setSourceEndpoint(srcPt428);\n    ConnEnd dstPt428(Point(-728.12164351602, 756.8568549161259), 1);\n    connRef428->setDestEndpoint(dstPt428);\n    connRef428->setRoutingType((ConnType)2);\n\n    ConnRef *connRef429 = new ConnRef(router, 429);\n    ConnEnd srcPt429(Point(-728.12164351602, 786.8568549161259), 2);\n    connRef429->setSourceEndpoint(srcPt429);\n    ConnEnd dstPt429(Point(-319.87164351602, 1143.856854916126), 15);\n    connRef429->setDestEndpoint(dstPt429);\n    connRef429->setRoutingType((ConnType)2);\n\n    ConnRef *connRef430 = new ConnRef(router, 430);\n    ConnEnd srcPt430(Point(-534.87164351602, 505.756854916126), 1);\n    connRef430->setSourceEndpoint(srcPt430);\n    ConnEnd dstPt430(Point(-435.87164351602, 454.7568549161261), 15);\n    connRef430->setDestEndpoint(dstPt430);\n    connRef430->setRoutingType((ConnType)2);\n\n    ConnRef *connRef431 = new ConnRef(router, 431);\n    ConnEnd srcPt431(Point(-319.87164351602, 535.756854916126), 2);\n    connRef431->setSourceEndpoint(srcPt431);\n    ConnEnd dstPt431(Point(-319.87164351602, 738.8568549161259), 15);\n    connRef431->setDestEndpoint(dstPt431);\n    connRef431->setRoutingType((ConnType)2);\n\n    ConnRef *connRef432 = new ConnRef(router, 432);\n    ConnEnd srcPt432(Point(-319.87164351602, 535.756854916126), 2);\n    connRef432->setSourceEndpoint(srcPt432);\n    ConnEnd dstPt432(Point(-435.87164351602, 635.6568549161261), 15);\n    connRef432->setDestEndpoint(dstPt432);\n    connRef432->setRoutingType((ConnType)2);\n\n    ConnRef *connRef433 = new ConnRef(router, 433);\n    ConnEnd srcPt433(Point(-125.87164351502, 505.756854916126), 1);\n    connRef433->setSourceEndpoint(srcPt433);\n    ConnEnd dstPt433(Point(115.62835648698, 454.7568549161261), 15);\n    connRef433->setDestEndpoint(dstPt433);\n    connRef433->setRoutingType((ConnType)2);\n\n    ConnRef *connRef434 = new ConnRef(router, 434);\n    ConnEnd srcPt434(Point(181.62835648698, 535.756854916126), 2);\n    connRef434->setSourceEndpoint(srcPt434);\n    ConnEnd dstPt434(Point(181.62835648698, 738.8568549161259), 15);\n    connRef434->setDestEndpoint(dstPt434);\n    connRef434->setRoutingType((ConnType)2);\n\n    ConnRef *connRef435 = new ConnRef(router, 435);\n    ConnEnd srcPt435(Point(181.62835648698, 535.756854916126), 2);\n    connRef435->setSourceEndpoint(srcPt435);\n    ConnEnd dstPt435(Point(115.62835648698, 635.6568549161261), 15);\n    connRef435->setDestEndpoint(dstPt435);\n    connRef435->setRoutingType((ConnType)2);\n\n    ConnRef *connRef436 = new ConnRef(router, 436);\n    ConnEnd srcPt436(Point(16.62835648497997, 738.8568549161259), 4);\n    connRef436->setSourceEndpoint(srcPt436);\n    ConnEnd dstPt436(Point(-319.87164351602, 738.8568549161259), 15);\n    connRef436->setDestEndpoint(dstPt436);\n    connRef436->setRoutingType((ConnType)2);\n\n    ConnRef *connRef437 = new ConnRef(router, 437);\n    ConnEnd srcPt437(Point(-352.87164351602, 993.8568549161259), 2);\n    connRef437->setSourceEndpoint(srcPt437);\n    ConnEnd dstPt437(Point(-319.87164351602, 1143.856854916126), 15);\n    connRef437->setDestEndpoint(dstPt437);\n    connRef437->setRoutingType((ConnType)2);\n\n    ConnRef *connRef438 = new ConnRef(router, 438);\n    ConnEnd srcPt438(Point(-319.87164351602, 738.8568549161259), 15);\n    connRef438->setSourceEndpoint(srcPt438);\n    ConnEnd dstPt438(Point(-352.87164351602, 963.8568549161259), 1);\n    connRef438->setDestEndpoint(dstPt438);\n    connRef438->setRoutingType((ConnType)2);\n\n    ConnRef *connRef439 = new ConnRef(router, 439);\n    ConnEnd srcPt439(Point(-695.12164351602, 1059.856854916126), 2);\n    connRef439->setSourceEndpoint(srcPt439);\n    ConnEnd dstPt439(Point(-695.12164351602, 1647.106854917126), 15);\n    connRef439->setDestEndpoint(dstPt439);\n    connRef439->setRoutingType((ConnType)2);\n\n    ConnRef *connRef440 = new ConnRef(router, 440);\n    ConnEnd srcPt440(Point(-319.87164351602, 738.8568549161259), 15);\n    connRef440->setSourceEndpoint(srcPt440);\n    ConnEnd dstPt440(Point(-695.12164351602, 1029.856854916126), 1);\n    connRef440->setDestEndpoint(dstPt440);\n    connRef440->setRoutingType((ConnType)2);\n\n    ConnRef *connRef441 = new ConnRef(router, 441);\n    ConnEnd srcPt441(Point(376.62835648698, 717.8568549161259), 8);\n    connRef441->setSourceEndpoint(srcPt441);\n    ConnEnd dstPt441(Point(530.62835648798, 738.8568549161259), 15);\n    connRef441->setDestEndpoint(dstPt441);\n    connRef441->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints441(1);\n    checkpoints441[0] = Checkpoint(Point(399.62835648698, 738.8568549161259), (ConnDirFlags) 15, (ConnDirFlags) 8);\n    connRef441->setRoutingCheckpoints(checkpoints441);\n\n    ConnRef *connRef442 = new ConnRef(router, 442);\n    ConnEnd srcPt442(Point(346.62835648698, 717.8568549161259), 4);\n    connRef442->setSourceEndpoint(srcPt442);\n    ConnEnd dstPt442(Point(181.62835648698, 738.8568549161259), 15);\n    connRef442->setDestEndpoint(dstPt442);\n    connRef442->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints442(1);\n    checkpoints442[0] = Checkpoint(Point(323.62835648698, 738.8568549161259), (ConnDirFlags) 15, (ConnDirFlags) 4);\n    connRef442->setRoutingCheckpoints(checkpoints442);\n\n    ConnRef *connRef443 = new ConnRef(router, 443);\n    ConnEnd srcPt443(Point(530.62835648798, 738.8568549161259), 15);\n    connRef443->setSourceEndpoint(srcPt443);\n    ConnEnd dstPt443(Point(651.62835648798, 579.006854916126), 4);\n    connRef443->setDestEndpoint(dstPt443);\n    connRef443->setRoutingType((ConnType)2);\n\n    ConnRef *connRef444 = new ConnRef(router, 444);\n    ConnEnd srcPt444(Point(681.62835648798, 579.006854916126), 8);\n    connRef444->setSourceEndpoint(srcPt444);\n    ConnEnd dstPt444(Point(878.62835648898, 579.006854916126), 15);\n    connRef444->setDestEndpoint(dstPt444);\n    connRef444->setRoutingType((ConnType)2);\n\n    ConnRef *connRef445 = new ConnRef(router, 445);\n    ConnEnd srcPt445(Point(163.62835648698, 804.8568549161259), 8);\n    connRef445->setSourceEndpoint(srcPt445);\n    ConnEnd dstPt445(Point(530.62835648798, 738.8568549161259), 15);\n    connRef445->setDestEndpoint(dstPt445);\n    connRef445->setRoutingType((ConnType)2);\n\n    ConnRef *connRef446 = new ConnRef(router, 446);\n    ConnEnd srcPt446(Point(813.62835648798, 717.8568549161259), 8);\n    connRef446->setSourceEndpoint(srcPt446);\n    ConnEnd dstPt446(Point(982.9140707746942, 738.8568549161259), 15);\n    connRef446->setDestEndpoint(dstPt446);\n    connRef446->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints446(1);\n    checkpoints446[0] = Checkpoint(Point(836.62835648798, 738.8568549161259), (ConnDirFlags) 15, (ConnDirFlags) 8);\n    connRef446->setRoutingCheckpoints(checkpoints446);\n\n    ConnRef *connRef447 = new ConnRef(router, 447);\n    ConnEnd srcPt447(Point(783.62835648798, 717.8568549161259), 4);\n    connRef447->setSourceEndpoint(srcPt447);\n    ConnEnd dstPt447(Point(530.62835648798, 738.8568549161259), 15);\n    connRef447->setDestEndpoint(dstPt447);\n    connRef447->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints447(1);\n    checkpoints447[0] = Checkpoint(Point(760.62835648798, 738.8568549161259), (ConnDirFlags) 15, (ConnDirFlags) 4);\n    connRef447->setRoutingCheckpoints(checkpoints447);\n\n    ConnRef *connRef448 = new ConnRef(router, 448);\n    ConnEnd srcPt448(Point(813.62835648798, 759.8568549161259), 8);\n    connRef448->setSourceEndpoint(srcPt448);\n    ConnEnd dstPt448(Point(982.9140707746942, 738.8568549161259), 15);\n    connRef448->setDestEndpoint(dstPt448);\n    connRef448->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints448(1);\n    checkpoints448[0] = Checkpoint(Point(836.62835648798, 738.8568549161259), (ConnDirFlags) 15, (ConnDirFlags) 8);\n    connRef448->setRoutingCheckpoints(checkpoints448);\n\n    ConnRef *connRef449 = new ConnRef(router, 449);\n    ConnEnd srcPt449(Point(783.62835648798, 759.8568549161259), 4);\n    connRef449->setSourceEndpoint(srcPt449);\n    ConnEnd dstPt449(Point(530.62835648798, 738.8568549161259), 15);\n    connRef449->setDestEndpoint(dstPt449);\n    connRef449->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints449(1);\n    checkpoints449[0] = Checkpoint(Point(760.62835648798, 738.8568549161259), (ConnDirFlags) 15, (ConnDirFlags) 4);\n    connRef449->setRoutingCheckpoints(checkpoints449);\n\n    ConnRef *connRef450 = new ConnRef(router, 450);\n    ConnEnd srcPt450(Point(596.62835648798, 872.8568549161259), 2);\n    connRef450->setSourceEndpoint(srcPt450);\n    ConnEnd dstPt450(Point(530.62835648798, 1143.856854916126), 15);\n    connRef450->setDestEndpoint(dstPt450);\n    connRef450->setRoutingType((ConnType)2);\n\n    ConnRef *connRef451 = new ConnRef(router, 451);\n    ConnEnd srcPt451(Point(530.62835648798, 738.8568549161259), 15);\n    connRef451->setSourceEndpoint(srcPt451);\n    ConnEnd dstPt451(Point(596.62835648798, 842.8568549161259), 1);\n    connRef451->setDestEndpoint(dstPt451);\n    connRef451->setRoutingType((ConnType)2);\n\n    ConnRef *connRef452 = new ConnRef(router, 452);\n    ConnEnd srcPt452(Point(86.62835648597996, 1021.856854916126), 4);\n    connRef452->setSourceEndpoint(srcPt452);\n    ConnEnd dstPt452(Point(-319.87164351602, 1143.856854916126), 15);\n    connRef452->setDestEndpoint(dstPt452);\n    connRef452->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints452(1);\n    checkpoints452[0] = Checkpoint(Point(63.62835648597996, 1042.856854916126), (ConnDirFlags) 15, (ConnDirFlags) 4);\n    connRef452->setRoutingCheckpoints(checkpoints452);\n\n    ConnRef *connRef453 = new ConnRef(router, 453);\n    ConnEnd srcPt453(Point(116.62835648598, 1021.856854916126), 8);\n    connRef453->setSourceEndpoint(srcPt453);\n    ConnEnd dstPt453(Point(530.62835648798, 1143.856854916126), 15);\n    connRef453->setDestEndpoint(dstPt453);\n    connRef453->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints453(1);\n    checkpoints453[0] = Checkpoint(Point(139.62835648598, 1042.856854916126), (ConnDirFlags) 15, (ConnDirFlags) 8);\n    connRef453->setRoutingCheckpoints(checkpoints453);\n\n    ConnRef *connRef454 = new ConnRef(router, 454);\n    ConnEnd srcPt454(Point(-107.87164351502, 1164.856854916126), 4);\n    connRef454->setSourceEndpoint(srcPt454);\n    ConnEnd dstPt454(Point(-319.87164351602, 1143.856854916126), 15);\n    connRef454->setDestEndpoint(dstPt454);\n    connRef454->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints454(1);\n    checkpoints454[0] = Checkpoint(Point(-130.87164351502, 1143.856854916126), (ConnDirFlags) 15, (ConnDirFlags) 4);\n    connRef454->setRoutingCheckpoints(checkpoints454);\n\n    ConnRef *connRef455 = new ConnRef(router, 455);\n    ConnEnd srcPt455(Point(-77.87164351502003, 1164.856854916126), 8);\n    connRef455->setSourceEndpoint(srcPt455);\n    ConnEnd dstPt455(Point(181.62835648698, 1143.856854916126), 15);\n    connRef455->setDestEndpoint(dstPt455);\n    connRef455->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints455(1);\n    checkpoints455[0] = Checkpoint(Point(-54.87164351502003, 1143.856854916126), (ConnDirFlags) 15, (ConnDirFlags) 8);\n    connRef455->setRoutingCheckpoints(checkpoints455);\n\n    ConnRef *connRef456 = new ConnRef(router, 456);\n    ConnEnd srcPt456(Point(-107.87164351502, 1122.856854916126), 4);\n    connRef456->setSourceEndpoint(srcPt456);\n    ConnEnd dstPt456(Point(-319.87164351602, 1143.856854916126), 15);\n    connRef456->setDestEndpoint(dstPt456);\n    connRef456->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints456(1);\n    checkpoints456[0] = Checkpoint(Point(-130.87164351502, 1143.856854916126), (ConnDirFlags) 15, (ConnDirFlags) 4);\n    connRef456->setRoutingCheckpoints(checkpoints456);\n\n    ConnRef *connRef457 = new ConnRef(router, 457);\n    ConnEnd srcPt457(Point(-77.87164351502003, 1122.856854916126), 8);\n    connRef457->setSourceEndpoint(srcPt457);\n    ConnEnd dstPt457(Point(181.62835648698, 1143.856854916126), 15);\n    connRef457->setDestEndpoint(dstPt457);\n    connRef457->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints457(1);\n    checkpoints457[0] = Checkpoint(Point(-54.87164351502003, 1143.856854916126), (ConnDirFlags) 15, (ConnDirFlags) 8);\n    connRef457->setRoutingCheckpoints(checkpoints457);\n\n    ConnRef *connRef458 = new ConnRef(router, 458);\n    ConnEnd srcPt458(Point(313.62835648698, 1122.856854916126), 4);\n    connRef458->setSourceEndpoint(srcPt458);\n    ConnEnd dstPt458(Point(181.62835648698, 1143.856854916126), 15);\n    connRef458->setDestEndpoint(dstPt458);\n    connRef458->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints458(1);\n    checkpoints458[0] = Checkpoint(Point(290.62835648698, 1143.856854916126), (ConnDirFlags) 15, (ConnDirFlags) 4);\n    connRef458->setRoutingCheckpoints(checkpoints458);\n\n    ConnRef *connRef459 = new ConnRef(router, 459);\n    ConnEnd srcPt459(Point(343.62835648698, 1122.856854916126), 8);\n    connRef459->setSourceEndpoint(srcPt459);\n    ConnEnd dstPt459(Point(530.62835648798, 1143.856854916126), 15);\n    connRef459->setDestEndpoint(dstPt459);\n    connRef459->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints459(1);\n    checkpoints459[0] = Checkpoint(Point(366.62835648698, 1143.856854916126), (ConnDirFlags) 15, (ConnDirFlags) 8);\n    connRef459->setRoutingCheckpoints(checkpoints459);\n\n    ConnRef *connRef460 = new ConnRef(router, 460);\n    ConnEnd srcPt460(Point(830.62835648898, 1110.856854916126), 4);\n    connRef460->setSourceEndpoint(srcPt460);\n    ConnEnd dstPt460(Point(530.62835648798, 1143.856854916126), 15);\n    connRef460->setDestEndpoint(dstPt460);\n    connRef460->setRoutingType((ConnType)2);\n\n    ConnRef *connRef461 = new ConnRef(router, 461);\n    ConnEnd srcPt461(Point(982.9140707746942, 1143.856854916126), 15);\n    connRef461->setSourceEndpoint(srcPt461);\n    ConnEnd dstPt461(Point(860.62835648898, 1110.856854916126), 8);\n    connRef461->setDestEndpoint(dstPt461);\n    connRef461->setRoutingType((ConnType)2);\n\n    ConnRef *connRef462 = new ConnRef(router, 462);\n    ConnEnd srcPt462(Point(961.9140707746942, 901.8568549171259), 2);\n    connRef462->setSourceEndpoint(srcPt462);\n    ConnEnd dstPt462(Point(982.9140707746942, 1143.856854916126), 15);\n    connRef462->setDestEndpoint(dstPt462);\n    connRef462->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints462(1);\n    checkpoints462[0] = Checkpoint(Point(982.9140707746942, 916.8568549171259), (ConnDirFlags) 15, (ConnDirFlags) 1);\n    connRef462->setRoutingCheckpoints(checkpoints462);\n\n    ConnRef *connRef463 = new ConnRef(router, 463);\n    ConnEnd srcPt463(Point(1167.12835648898, 996.8568549161259), 1);\n    connRef463->setSourceEndpoint(srcPt463);\n    ConnEnd dstPt463(Point(1514.12835648898, -298.4098117515406), 15);\n    connRef463->setDestEndpoint(dstPt463);\n    connRef463->setRoutingType((ConnType)2);\n\n    ConnRef *connRef464 = new ConnRef(router, 464);\n    ConnEnd srcPt464(Point(982.9140707746942, 1143.856854916126), 15);\n    connRef464->setSourceEndpoint(srcPt464);\n    ConnEnd dstPt464(Point(1167.12835648898, 1026.856854916126), 2);\n    connRef464->setDestEndpoint(dstPt464);\n    connRef464->setRoutingType((ConnType)2);\n\n    ConnRef *connRef465 = new ConnRef(router, 465);\n    ConnEnd srcPt465(Point(1167.12835648898, 1095.856854916126), 1);\n    connRef465->setSourceEndpoint(srcPt465);\n    ConnEnd dstPt465(Point(1514.12835648898, -298.4098117515406), 15);\n    connRef465->setDestEndpoint(dstPt465);\n    connRef465->setRoutingType((ConnType)2);\n\n    ConnRef *connRef466 = new ConnRef(router, 466);\n    ConnEnd srcPt466(Point(982.9140707746942, 1143.856854916126), 15);\n    connRef466->setSourceEndpoint(srcPt466);\n    ConnEnd dstPt466(Point(1167.12835648898, 1125.856854916126), 2);\n    connRef466->setDestEndpoint(dstPt466);\n    connRef466->setRoutingType((ConnType)2);\n\n    ConnRef *connRef467 = new ConnRef(router, 467);\n    ConnEnd srcPt467(Point(1182.12835648898, 1176.856854916126), 8);\n    connRef467->setSourceEndpoint(srcPt467);\n    ConnEnd dstPt467(Point(1514.12835648898, -298.4098117515406), 15);\n    connRef467->setDestEndpoint(dstPt467);\n    connRef467->setRoutingType((ConnType)2);\n\n    ConnRef *connRef468 = new ConnRef(router, 468);\n    ConnEnd srcPt468(Point(982.9140707746942, 1143.856854916126), 15);\n    connRef468->setSourceEndpoint(srcPt468);\n    ConnEnd dstPt468(Point(1152.12835648898, 1176.856854916126), 4);\n    connRef468->setDestEndpoint(dstPt468);\n    connRef468->setRoutingType((ConnType)2);\n\n    ConnRef *connRef469 = new ConnRef(router, 469);\n    ConnEnd srcPt469(Point(31.62835648497997, 1390.606854916126), 2);\n    connRef469->setSourceEndpoint(srcPt469);\n    ConnEnd dstPt469(Point(115.62835648698, 1466.106854916126), 15);\n    connRef469->setDestEndpoint(dstPt469);\n    connRef469->setRoutingType((ConnType)2);\n\n    ConnRef *connRef470 = new ConnRef(router, 470);\n    ConnEnd srcPt470(Point(551.62835648798, 1357.606854916126), 2);\n    connRef470->setSourceEndpoint(srcPt470);\n    ConnEnd dstPt470(Point(530.62835648798, 1647.106854917126), 15);\n    connRef470->setDestEndpoint(dstPt470);\n    connRef470->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints470(1);\n    checkpoints470[0] = Checkpoint(Point(530.62835648798, 1372.606854916126), (ConnDirFlags) 15, (ConnDirFlags) 1);\n    connRef470->setRoutingCheckpoints(checkpoints470);\n\n    ConnRef *connRef471 = new ConnRef(router, 471);\n    ConnEnd srcPt471(Point(551.62835648798, 1327.606854916126), 1);\n    connRef471->setSourceEndpoint(srcPt471);\n    ConnEnd dstPt471(Point(530.62835648798, 1143.856854916126), 15);\n    connRef471->setDestEndpoint(dstPt471);\n    connRef471->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints471(1);\n    checkpoints471[0] = Checkpoint(Point(530.62835648798, 1312.606854916126), (ConnDirFlags) 15, (ConnDirFlags) 2);\n    connRef471->setRoutingCheckpoints(checkpoints471);\n\n    ConnRef *connRef472 = new ConnRef(router, 472);\n    ConnEnd srcPt472(Point(-516.87164351602, 1647.106854917126), 4);\n    connRef472->setSourceEndpoint(srcPt472);\n    ConnEnd dstPt472(Point(-695.12164351602, 1647.106854917126), 15);\n    connRef472->setDestEndpoint(dstPt472);\n    connRef472->setRoutingType((ConnType)2);\n\n    ConnRef *connRef473 = new ConnRef(router, 473);\n    ConnEnd srcPt473(Point(-319.87164351602, 1647.106854917126), 15);\n    connRef473->setSourceEndpoint(srcPt473);\n    ConnEnd dstPt473(Point(-486.87164351602, 1647.106854917126), 8);\n    connRef473->setDestEndpoint(dstPt473);\n    connRef473->setRoutingType((ConnType)2);\n\n    ConnRef *connRef474 = new ConnRef(router, 474);\n    ConnEnd srcPt474(Point(-74.87164351502003, 1668.106854917126), 4);\n    connRef474->setSourceEndpoint(srcPt474);\n    ConnEnd dstPt474(Point(-319.87164351602, 1647.106854917126), 15);\n    connRef474->setDestEndpoint(dstPt474);\n    connRef474->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints474(1);\n    checkpoints474[0] = Checkpoint(Point(-97.87164351502003, 1647.106854917126), (ConnDirFlags) 15, (ConnDirFlags) 4);\n    connRef474->setRoutingCheckpoints(checkpoints474);\n\n    ConnRef *connRef475 = new ConnRef(router, 475);\n    ConnEnd srcPt475(Point(-44.87164351502003, 1668.106854917126), 8);\n    connRef475->setSourceEndpoint(srcPt475);\n    ConnEnd dstPt475(Point(181.62835648698, 1647.106854917126), 15);\n    connRef475->setDestEndpoint(dstPt475);\n    connRef475->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints475(1);\n    checkpoints475[0] = Checkpoint(Point(-21.87164351502003, 1647.106854917126), (ConnDirFlags) 15, (ConnDirFlags) 8);\n    connRef475->setRoutingCheckpoints(checkpoints475);\n\n    ConnRef *connRef476 = new ConnRef(router, 476);\n    ConnEnd srcPt476(Point(-44.87164351502003, 1551.106854917126), 8);\n    connRef476->setSourceEndpoint(srcPt476);\n    ConnEnd dstPt476(Point(181.62835648698, 1647.106854917126), 15);\n    connRef476->setDestEndpoint(dstPt476);\n    connRef476->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints476(1);\n    checkpoints476[0] = Checkpoint(Point(-21.87164351502003, 1647.106854917126), (ConnDirFlags) 15, (ConnDirFlags) 8);\n    connRef476->setRoutingCheckpoints(checkpoints476);\n\n    ConnRef *connRef477 = new ConnRef(router, 477);\n    ConnEnd srcPt477(Point(-44.87164351502003, 1626.106854917126), 8);\n    connRef477->setSourceEndpoint(srcPt477);\n    ConnEnd dstPt477(Point(181.62835648698, 1647.106854917126), 15);\n    connRef477->setDestEndpoint(dstPt477);\n    connRef477->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints477(1);\n    checkpoints477[0] = Checkpoint(Point(-21.87164351502003, 1647.106854917126), (ConnDirFlags) 15, (ConnDirFlags) 8);\n    connRef477->setRoutingCheckpoints(checkpoints477);\n\n    ConnRef *connRef478 = new ConnRef(router, 478);\n    ConnEnd srcPt478(Point(379.62835648698, 1668.106854917126), 4);\n    connRef478->setSourceEndpoint(srcPt478);\n    ConnEnd dstPt478(Point(181.62835648698, 1647.106854917126), 15);\n    connRef478->setDestEndpoint(dstPt478);\n    connRef478->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints478(1);\n    checkpoints478[0] = Checkpoint(Point(356.62835648698, 1647.106854917126), (ConnDirFlags) 15, (ConnDirFlags) 4);\n    connRef478->setRoutingCheckpoints(checkpoints478);\n\n    ConnRef *connRef479 = new ConnRef(router, 479);\n    ConnEnd srcPt479(Point(409.62835648698, 1668.106854917126), 8);\n    connRef479->setSourceEndpoint(srcPt479);\n    ConnEnd dstPt479(Point(530.62835648798, 1647.106854917126), 15);\n    connRef479->setDestEndpoint(dstPt479);\n    connRef479->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints479(1);\n    checkpoints479[0] = Checkpoint(Point(432.62835648698, 1647.106854917126), (ConnDirFlags) 15, (ConnDirFlags) 8);\n    connRef479->setRoutingCheckpoints(checkpoints479);\n\n    ConnRef *connRef480 = new ConnRef(router, 480);\n    ConnEnd srcPt480(Point(409.62835648698, 1626.106854917126), 8);\n    connRef480->setSourceEndpoint(srcPt480);\n    ConnEnd dstPt480(Point(530.62835648798, 1647.106854917126), 15);\n    connRef480->setDestEndpoint(dstPt480);\n    connRef480->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints480(1);\n    checkpoints480[0] = Checkpoint(Point(432.62835648698, 1647.106854917126), (ConnDirFlags) 15, (ConnDirFlags) 8);\n    connRef480->setRoutingCheckpoints(checkpoints480);\n\n    ConnRef *connRef481 = new ConnRef(router, 481);\n    ConnEnd srcPt481(Point(647.9873402531949, 1626.106854917126), 8);\n    connRef481->setSourceEndpoint(srcPt481);\n    ConnEnd dstPt481(Point(982.9140707746942, 1647.106854917126), 15);\n    connRef481->setDestEndpoint(dstPt481);\n    connRef481->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints481(1);\n    checkpoints481[0] = Checkpoint(Point(670.9873402531949, 1647.106854917126), (ConnDirFlags) 15, (ConnDirFlags) 8);\n    connRef481->setRoutingCheckpoints(checkpoints481);\n\n    ConnRef *connRef482 = new ConnRef(router, 482);\n    ConnEnd srcPt482(Point(617.9873402531949, 1668.106854917126), 4);\n    connRef482->setSourceEndpoint(srcPt482);\n    ConnEnd dstPt482(Point(530.62835648798, 1647.106854917126), 15);\n    connRef482->setDestEndpoint(dstPt482);\n    connRef482->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints482(1);\n    checkpoints482[0] = Checkpoint(Point(594.9873402531949, 1647.106854917126), (ConnDirFlags) 15, (ConnDirFlags) 4);\n    connRef482->setRoutingCheckpoints(checkpoints482);\n\n    ConnRef *connRef483 = new ConnRef(router, 483);\n    ConnEnd srcPt483(Point(647.9873402531949, 1668.106854917126), 8);\n    connRef483->setSourceEndpoint(srcPt483);\n    ConnEnd dstPt483(Point(982.9140707746942, 1647.106854917126), 15);\n    connRef483->setDestEndpoint(dstPt483);\n    connRef483->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints483(1);\n    checkpoints483[0] = Checkpoint(Point(670.9873402531949, 1647.106854917126), (ConnDirFlags) 15, (ConnDirFlags) 8);\n    connRef483->setRoutingCheckpoints(checkpoints483);\n\n    ConnRef *connRef484 = new ConnRef(router, 484);\n    ConnEnd srcPt484(Point(1182.12835648898, 1567.106854916126), 8);\n    connRef484->setSourceEndpoint(srcPt484);\n    ConnEnd dstPt484(Point(1514.12835648898, 1647.106854917126), 15);\n    connRef484->setDestEndpoint(dstPt484);\n    connRef484->setRoutingType((ConnType)2);\n\n    ConnRef *connRef485 = new ConnRef(router, 485);\n    ConnEnd srcPt485(Point(1182.12835648898, 1706.773521583792), 8);\n    connRef485->setSourceEndpoint(srcPt485);\n    ConnEnd dstPt485(Point(1396.12835648898, 1739.773521583792), 15);\n    connRef485->setDestEndpoint(dstPt485);\n    connRef485->setRoutingType((ConnType)2);\n\n    ConnRef *connRef486 = new ConnRef(router, 486);\n    ConnEnd srcPt486(Point(1182.12835648898, 1706.773521583792), 8);\n    connRef486->setSourceEndpoint(srcPt486);\n    ConnEnd dstPt486(Point(1514.12835648898, 1647.106854917126), 15);\n    connRef486->setDestEndpoint(dstPt486);\n    connRef486->setRoutingType((ConnType)2);\n\n    ConnRef *connRef487 = new ConnRef(router, 487);\n    ConnEnd srcPt487(Point(1345.12835648898, 1433.106854916126), 8);\n    connRef487->setSourceEndpoint(srcPt487);\n    ConnEnd dstPt487(Point(1514.12835648898, 1647.106854917126), 15);\n    connRef487->setDestEndpoint(dstPt487);\n    connRef487->setRoutingType((ConnType)2);\n\n    ConnRef *connRef488 = new ConnRef(router, 488);\n    ConnEnd srcPt488(Point(1642.12835648998, 1309.606854916126), 8);\n    connRef488->setSourceEndpoint(srcPt488);\n    ConnEnd dstPt488(Point(1700.12835648998, 1309.606854916126), 15);\n    connRef488->setDestEndpoint(dstPt488);\n    connRef488->setRoutingType((ConnType)2);\n\n    ConnRef *connRef489 = new ConnRef(router, 489);\n    ConnEnd srcPt489(Point(1514.12835648898, 1647.106854917126), 15);\n    connRef489->setSourceEndpoint(srcPt489);\n    ConnEnd dstPt489(Point(1612.12835648998, 1309.606854916126), 4);\n    connRef489->setDestEndpoint(dstPt489);\n    connRef489->setRoutingType((ConnType)2);\n\n    ConnRef *connRef490 = new ConnRef(router, 490);\n    ConnEnd srcPt490(Point(1579.12835648998, 1626.106854917126), 4);\n    connRef490->setSourceEndpoint(srcPt490);\n    ConnEnd dstPt490(Point(1514.12835648898, 1647.106854917126), 15);\n    connRef490->setDestEndpoint(dstPt490);\n    connRef490->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints490(1);\n    checkpoints490[0] = Checkpoint(Point(1556.12835648998, 1647.106854917126), (ConnDirFlags) 15, (ConnDirFlags) 4);\n    connRef490->setRoutingCheckpoints(checkpoints490);\n\n    ConnRef *connRef491 = new ConnRef(router, 491);\n    ConnEnd srcPt491(Point(1609.12835648998, 1626.106854917126), 8);\n    connRef491->setSourceEndpoint(srcPt491);\n    ConnEnd dstPt491(Point(1700.12835648998, 1647.106854917126), 15);\n    connRef491->setDestEndpoint(dstPt491);\n    connRef491->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints491(1);\n    checkpoints491[0] = Checkpoint(Point(1632.12835648998, 1647.106854917126), (ConnDirFlags) 15, (ConnDirFlags) 8);\n    connRef491->setRoutingCheckpoints(checkpoints491);\n\n    ConnRef *connRef492 = new ConnRef(router, 492);\n    ConnEnd srcPt492(Point(1579.12835648998, 1668.106854917126), 4);\n    connRef492->setSourceEndpoint(srcPt492);\n    ConnEnd dstPt492(Point(1514.12835648898, 1647.106854917126), 15);\n    connRef492->setDestEndpoint(dstPt492);\n    connRef492->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints492(1);\n    checkpoints492[0] = Checkpoint(Point(1556.12835648998, 1647.106854917126), (ConnDirFlags) 15, (ConnDirFlags) 4);\n    connRef492->setRoutingCheckpoints(checkpoints492);\n\n    ConnRef *connRef493 = new ConnRef(router, 493);\n    ConnEnd srcPt493(Point(1609.12835648998, 1668.106854917126), 8);\n    connRef493->setSourceEndpoint(srcPt493);\n    ConnEnd dstPt493(Point(1700.12835648998, 1647.106854917126), 15);\n    connRef493->setDestEndpoint(dstPt493);\n    connRef493->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints493(1);\n    checkpoints493[0] = Checkpoint(Point(1632.12835648998, 1647.106854917126), (ConnDirFlags) 15, (ConnDirFlags) 8);\n    connRef493->setRoutingCheckpoints(checkpoints493);\n\n    ConnRef *connRef494 = new ConnRef(router, 494);\n    ConnEnd srcPt494(Point(1785.12835649098, 1309.606854916126), 8);\n    connRef494->setSourceEndpoint(srcPt494);\n    ConnEnd dstPt494(Point(1873.12835649198, 1309.606854916126), 15);\n    connRef494->setDestEndpoint(dstPt494);\n    connRef494->setRoutingType((ConnType)2);\n\n    ConnRef *connRef495 = new ConnRef(router, 495);\n    ConnEnd srcPt495(Point(1785.12835649098, 1647.106854917126), 8);\n    connRef495->setSourceEndpoint(srcPt495);\n    ConnEnd dstPt495(Point(1873.12835649198, 1647.106854917126), 15);\n    connRef495->setDestEndpoint(dstPt495);\n    connRef495->setRoutingType((ConnType)2);\n\n    ConnRef *connRef496 = new ConnRef(router, 496);\n    ConnEnd srcPt496(Point(1958.12835649298, 1647.106854917126), 8);\n    connRef496->setSourceEndpoint(srcPt496);\n    ConnEnd dstPt496(Point(2046.795023159646, 1647.106854917126), 15);\n    connRef496->setDestEndpoint(dstPt496);\n    connRef496->setRoutingType((ConnType)2);\n\n    ConnRef *connRef497 = new ConnRef(router, 497);\n    ConnEnd srcPt497(Point(-453.87164351602, -716.9812403239691), 8);\n    connRef497->setSourceEndpoint(srcPt497);\n    ConnEnd dstPt497(Point(-226.87164351502, -737.9812403239691), 15);\n    connRef497->setDestEndpoint(dstPt497);\n    connRef497->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints497(1);\n    checkpoints497[0] = Checkpoint(Point(-430.87164351602, -737.9812403239691), (ConnDirFlags) 15, (ConnDirFlags) 8);\n    connRef497->setRoutingCheckpoints(checkpoints497);\n\n    ConnRef *connRef498 = new ConnRef(router, 498);\n    ConnEnd srcPt498(Point(376.62835648698, 759.8568549161259), 8);\n    connRef498->setSourceEndpoint(srcPt498);\n    ConnEnd dstPt498(Point(530.62835648798, 738.8568549161259), 15);\n    connRef498->setDestEndpoint(dstPt498);\n    connRef498->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints498(1);\n    checkpoints498[0] = Checkpoint(Point(399.62835648698, 738.8568549161259), (ConnDirFlags) 15, (ConnDirFlags) 8);\n    connRef498->setRoutingCheckpoints(checkpoints498);\n\n    ConnRef *connRef499 = new ConnRef(router, 499);\n    ConnEnd srcPt499(Point(313.62835648698, 1164.856854916126), 4);\n    connRef499->setSourceEndpoint(srcPt499);\n    ConnEnd dstPt499(Point(181.62835648698, 1143.856854916126), 15);\n    connRef499->setDestEndpoint(dstPt499);\n    connRef499->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints499(1);\n    checkpoints499[0] = Checkpoint(Point(290.62835648698, 1143.856854916126), (ConnDirFlags) 15, (ConnDirFlags) 4);\n    connRef499->setRoutingCheckpoints(checkpoints499);\n\n    ConnRef *connRef500 = new ConnRef(router, 500);\n    ConnEnd srcPt500(Point(343.62835648698, 1164.856854916126), 8);\n    connRef500->setSourceEndpoint(srcPt500);\n    ConnEnd dstPt500(Point(530.62835648798, 1143.856854916126), 15);\n    connRef500->setDestEndpoint(dstPt500);\n    connRef500->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints500(1);\n    checkpoints500[0] = Checkpoint(Point(366.62835648698, 1143.856854916126), (ConnDirFlags) 15, (ConnDirFlags) 8);\n    connRef500->setRoutingCheckpoints(checkpoints500);\n\n    ConnRef *connRef501 = new ConnRef(router, 501);\n    ConnEnd srcPt501(Point(1003.914070774694, 901.8568549171259), 2);\n    connRef501->setSourceEndpoint(srcPt501);\n    ConnEnd dstPt501(Point(982.9140707746942, 1143.856854916126), 15);\n    connRef501->setDestEndpoint(dstPt501);\n    connRef501->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints501(1);\n    checkpoints501[0] = Checkpoint(Point(982.9140707746942, 916.8568549171259), (ConnDirFlags) 15, (ConnDirFlags) 1);\n    connRef501->setRoutingCheckpoints(checkpoints501);\n\n    ConnRef *connRef502 = new ConnRef(router, 502);\n    ConnEnd srcPt502(Point(1642.12835648998, -618.4098117525407), 8);\n    connRef502->setSourceEndpoint(srcPt502);\n    ConnEnd dstPt502(Point(1700.12835648998, -558.5348117525407), 15);\n    connRef502->setDestEndpoint(dstPt502);\n    connRef502->setRoutingType((ConnType)2);\n\n    ConnRef *connRef503 = new ConnRef(router, 503);\n    ConnEnd srcPt503(Point(1788.12835649098, -558.5348117525407), 4);\n    connRef503->setSourceEndpoint(srcPt503);\n    ConnEnd dstPt503(Point(1700.12835648998, -558.5348117525407), 15);\n    connRef503->setDestEndpoint(dstPt503);\n    connRef503->setRoutingType((ConnType)2);\n\n    ConnRef *connRef504 = new ConnRef(router, 504);\n    ConnEnd srcPt504(Point(475.62835648698, -737.9812403239691), 8);\n    connRef504->setSourceEndpoint(srcPt504);\n    ConnEnd dstPt504(Point(530.62835648798, -298.4098117515406), 15);\n    connRef504->setDestEndpoint(dstPt504);\n    connRef504->setRoutingType((ConnType)2);\n\n    ConnRef *connRef505 = new ConnRef(router, 505);\n    ConnEnd srcPt505(Point(717.62835648798, -807.4098117525407), 4);\n    connRef505->setSourceEndpoint(srcPt505);\n    ConnEnd dstPt505(Point(530.62835648798, -298.4098117515406), 15);\n    connRef505->setDestEndpoint(dstPt505);\n    connRef505->setRoutingType((ConnType)2);\n\n    ConnRef *connRef506 = new ConnRef(router, 506);\n    ConnEnd srcPt506(Point(717.62835648798, -681.4098117525407), 4);\n    connRef506->setSourceEndpoint(srcPt506);\n    ConnEnd dstPt506(Point(530.62835648798, -298.4098117515406), 15);\n    connRef506->setDestEndpoint(dstPt506);\n    connRef506->setRoutingType((ConnType)2);\n\n    ConnRef *connRef507 = new ConnRef(router, 507);\n    ConnEnd srcPt507(Point(982.9140707746942, -449.4098117525406), 2);\n    connRef507->setSourceEndpoint(srcPt507);\n    ConnEnd dstPt507(Point(982.9140707746942, -298.4098117515406), 15);\n    connRef507->setDestEndpoint(dstPt507);\n    connRef507->setRoutingType((ConnType)2);\n\n    ConnRef *connRef508 = new ConnRef(router, 508);\n    ConnEnd srcPt508(Point(1068.12835648898, -558.5348117525407), 15);\n    connRef508->setSourceEndpoint(srcPt508);\n    ConnEnd dstPt508(Point(982.9140707746942, -479.4098117525406), 1);\n    connRef508->setDestEndpoint(dstPt508);\n    connRef508->setRoutingType((ConnType)2);\n\n    ConnRef *connRef509 = new ConnRef(router, 509);\n    ConnEnd srcPt509(Point(1216.12835648898, -558.5348117525407), 4);\n    connRef509->setSourceEndpoint(srcPt509);\n    ConnEnd dstPt509(Point(1068.12835648898, -558.5348117525407), 15);\n    connRef509->setDestEndpoint(dstPt509);\n    connRef509->setRoutingType((ConnType)2);\n\n    ConnRef *connRef510 = new ConnRef(router, 510);\n    ConnEnd srcPt510(Point(-319.87164351602, -298.4098117515406), 15);\n    connRef510->setSourceEndpoint(srcPt510);\n    ConnEnd dstPt510(Point(166.62835648698, -126.4098117515406), 4);\n    connRef510->setDestEndpoint(dstPt510);\n    connRef510->setRoutingType((ConnType)2);\n\n    ConnRef *connRef511 = new ConnRef(router, 511);\n    ConnEnd srcPt511(Point(196.62835648698, -126.4098117515406), 8);\n    connRef511->setSourceEndpoint(srcPt511);\n    ConnEnd dstPt511(Point(530.62835648798, -298.4098117515406), 15);\n    connRef511->setDestEndpoint(dstPt511);\n    connRef511->setRoutingType((ConnType)2);\n\n    ConnRef *connRef512 = new ConnRef(router, 512);\n    ConnEnd srcPt512(Point(651.62835648798, -20.40981175154064), 4);\n    connRef512->setSourceEndpoint(srcPt512);\n    ConnEnd dstPt512(Point(530.62835648798, 66.25685491512604), 15);\n    connRef512->setDestEndpoint(dstPt512);\n    connRef512->setRoutingType((ConnType)2);\n\n    ConnRef *connRef513 = new ConnRef(router, 513);\n    ConnEnd srcPt513(Point(926.62835648898, 421.7568549161261), 8);\n    connRef513->setSourceEndpoint(srcPt513);\n    ConnEnd dstPt513(Point(982.9140707746942, 66.25685491512604), 15);\n    connRef513->setDestEndpoint(dstPt513);\n    connRef513->setRoutingType((ConnType)2);\n\n    ConnRef *connRef514 = new ConnRef(router, 514);\n    ConnEnd srcPt514(Point(563.62835648798, 421.7568549161261), 15);\n    connRef514->setSourceEndpoint(srcPt514);\n    ConnEnd dstPt514(Point(896.62835648898, 421.7568549161261), 4);\n    connRef514->setDestEndpoint(dstPt514);\n    connRef514->setRoutingType((ConnType)2);\n\n    ConnRef *connRef515 = new ConnRef(router, 515);\n    ConnEnd srcPt515(Point(508.62835648698, 421.7568549161261), 8);\n    connRef515->setSourceEndpoint(srcPt515);\n    ConnEnd dstPt515(Point(563.62835648798, 421.7568549161261), 15);\n    connRef515->setDestEndpoint(dstPt515);\n    connRef515->setRoutingType((ConnType)2);\n\n    ConnRef *connRef516 = new ConnRef(router, 516);\n    ConnEnd srcPt516(Point(116.62835648598, 1063.856854916126), 8);\n    connRef516->setSourceEndpoint(srcPt516);\n    ConnEnd dstPt516(Point(530.62835648798, 1143.856854916126), 15);\n    connRef516->setDestEndpoint(dstPt516);\n    connRef516->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints516(1);\n    checkpoints516[0] = Checkpoint(Point(139.62835648598, 1042.856854916126), (ConnDirFlags) 15, (ConnDirFlags) 8);\n    connRef516->setRoutingCheckpoints(checkpoints516);\n\n    ConnRef *connRef517 = new ConnRef(router, 517);\n    ConnEnd srcPt517(Point(16.62835648497997, -558.5348117525407), 4);\n    connRef517->setSourceEndpoint(srcPt517);\n    ConnEnd dstPt517(Point(-319.87164351602, -298.4098117515406), 15);\n    connRef517->setDestEndpoint(dstPt517);\n    connRef517->setRoutingType((ConnType)2);\n#endif\n    ConnRef *connRef518 = new ConnRef(router, 518);\n    ConnEnd srcPt518(Point(-483.87164351602, -833.9812403239691), 4);\n    connRef518->setSourceEndpoint(srcPt518);\n    ConnEnd dstPt518(Point(-695.12164351602, -737.9812403239691), 15);\n    connRef518->setDestEndpoint(dstPt518);\n    connRef518->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints518(1);\n    checkpoints518[0] = Checkpoint(Point(-506.87164351602, -737.9812403239691), (ConnDirFlags) 15, (ConnDirFlags) 4);\n    connRef518->setRoutingCheckpoints(checkpoints518);\n\n    ConnRef *connRef519 = new ConnRef(router, 519);\n    ConnEnd srcPt519(Point(-483.87164351602, -758.9812403239691), 4);\n    connRef519->setSourceEndpoint(srcPt519);\n    ConnEnd dstPt519(Point(-695.12164351602, -737.9812403239691), 15);\n    connRef519->setDestEndpoint(dstPt519);\n    connRef519->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints519(1);\n    checkpoints519[0] = Checkpoint(Point(-506.87164351602, -737.9812403239691), (ConnDirFlags) 15, (ConnDirFlags) 4);\n    connRef519->setRoutingCheckpoints(checkpoints519);\n\n    ConnRef *connRef520 = new ConnRef(router, 520);\n    ConnEnd srcPt520(Point(-483.87164351602, -716.9812403239691), 4);\n    connRef520->setSourceEndpoint(srcPt520);\n    ConnEnd dstPt520(Point(-695.12164351602, -737.9812403239691), 15);\n    connRef520->setDestEndpoint(dstPt520);\n    connRef520->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints520(1);\n    checkpoints520[0] = Checkpoint(Point(-506.87164351602, -737.9812403239691), (ConnDirFlags) 15, (ConnDirFlags) 4);\n    connRef520->setRoutingCheckpoints(checkpoints520);\n\n#ifdef REST\n    ConnRef *connRef521 = new ConnRef(router, 521);\n    ConnEnd srcPt521(Point(262.62835648698, -737.9812403239691), 15);\n    connRef521->setSourceEndpoint(srcPt521);\n    ConnEnd dstPt521(Point(445.62835648698, -737.9812403239691), 4);\n    connRef521->setDestEndpoint(dstPt521);\n    connRef521->setRoutingType((ConnType)2);\n\n    ConnRef *connRef522 = new ConnRef(router, 522);\n    ConnEnd srcPt522(Point(-841.12164351602, 668.6568549161261), 15);\n    connRef522->setSourceEndpoint(srcPt522);\n    ConnEnd dstPt522(Point(-728.12164351602, 756.8568549161259), 1);\n    connRef522->setDestEndpoint(dstPt522);\n    connRef522->setRoutingType((ConnType)2);\n\n    ConnRef *connRef523 = new ConnRef(router, 523);\n    ConnEnd srcPt523(Point(-841.12164351602, 890.8568549161259), 15);\n    connRef523->setSourceEndpoint(srcPt523);\n    ConnEnd dstPt523(Point(-874.12164351602, 786.8568549161259), 2);\n    connRef523->setDestEndpoint(dstPt523);\n    connRef523->setRoutingType((ConnType)2);\n\n    ConnRef *connRef524 = new ConnRef(router, 524);\n    ConnEnd srcPt524(Point(412.62835648698, -469.4098117515406), 4);\n    connRef524->setSourceEndpoint(srcPt524);\n    ConnEnd dstPt524(Point(181.62835648698, -298.4098117515406), 15);\n    connRef524->setDestEndpoint(dstPt524);\n    connRef524->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints524(1);\n    checkpoints524[0] = Checkpoint(Point(389.62835648698, -298.4098117515406), (ConnDirFlags) 15, (ConnDirFlags) 4);\n    connRef524->setRoutingCheckpoints(checkpoints524);\n\n    ConnRef *connRef525 = new ConnRef(router, 525);\n    ConnEnd srcPt525(Point(412.62835648698, -394.4098117515406), 4);\n    connRef525->setSourceEndpoint(srcPt525);\n    ConnEnd dstPt525(Point(181.62835648698, -298.4098117515406), 15);\n    connRef525->setDestEndpoint(dstPt525);\n    connRef525->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints525(1);\n    checkpoints525[0] = Checkpoint(Point(389.62835648698, -298.4098117515406), (ConnDirFlags) 15, (ConnDirFlags) 4);\n    connRef525->setRoutingCheckpoints(checkpoints525);\n\n    ConnRef *connRef526 = new ConnRef(router, 526);\n    ConnEnd srcPt526(Point(1514.12835648898, -298.4098117515406), 15);\n    connRef526->setSourceEndpoint(srcPt526);\n    ConnEnd dstPt526(Point(1612.12835648998, -618.4098117525407), 4);\n    connRef526->setDestEndpoint(dstPt526);\n    connRef526->setRoutingType((ConnType)2);\n\n    ConnRef *connRef527 = new ConnRef(router, 527);\n    ConnEnd srcPt527(Point(1514.12835648898, -298.4098117515406), 15);\n    connRef527->setSourceEndpoint(srcPt527);\n    ConnEnd dstPt527(Point(1543.12835648898, 635.6568549161261), 4);\n    connRef527->setDestEndpoint(dstPt527);\n    connRef527->setRoutingType((ConnType)2);\n\n    ConnRef *connRef528 = new ConnRef(router, 528);\n    ConnEnd srcPt528(Point(1514.12835648898, -298.4098117515406), 15);\n    connRef528->setSourceEndpoint(srcPt528);\n    ConnEnd dstPt528(Point(1612.12835648998, -497.4098117525407), 4);\n    connRef528->setDestEndpoint(dstPt528);\n    connRef528->setRoutingType((ConnType)2);\n\n    ConnRef *connRef529 = new ConnRef(router, 529);\n    ConnEnd srcPt529(Point(-695.12164351602, 66.25685491512604), 15);\n    connRef529->setSourceEndpoint(srcPt529);\n    ConnEnd dstPt529(Point(-516.87164351602, 201.256854916126), 4);\n    connRef529->setDestEndpoint(dstPt529);\n    connRef529->setRoutingType((ConnType)2);\n\n    ConnRef *connRef530 = new ConnRef(router, 530);\n    ConnEnd srcPt530(Point(-319.87164351602, 66.25685491512604), 15);\n    connRef530->setSourceEndpoint(srcPt530);\n    ConnEnd dstPt530(Point(-319.87164351602, 505.756854916126), 1);\n    connRef530->setDestEndpoint(dstPt530);\n    connRef530->setRoutingType((ConnType)2);\n\n    ConnRef *connRef531 = new ConnRef(router, 531);\n    ConnEnd srcPt531(Point(-74.87164351502003, 1551.106854917126), 4);\n    connRef531->setSourceEndpoint(srcPt531);\n    ConnEnd dstPt531(Point(-319.87164351602, 1647.106854917126), 15);\n    connRef531->setDestEndpoint(dstPt531);\n    connRef531->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints531(1);\n    checkpoints531[0] = Checkpoint(Point(-97.87164351502003, 1647.106854917126), (ConnDirFlags) 15, (ConnDirFlags) 4);\n    connRef531->setRoutingCheckpoints(checkpoints531);\n\n    ConnRef *connRef532 = new ConnRef(router, 532);\n    ConnEnd srcPt532(Point(-74.87164351502003, 1626.106854917126), 4);\n    connRef532->setSourceEndpoint(srcPt532);\n    ConnEnd dstPt532(Point(-319.87164351602, 1647.106854917126), 15);\n    connRef532->setDestEndpoint(dstPt532);\n    connRef532->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints532(1);\n    checkpoints532[0] = Checkpoint(Point(-97.87164351502003, 1647.106854917126), (ConnDirFlags) 15, (ConnDirFlags) 4);\n    connRef532->setRoutingCheckpoints(checkpoints532);\n\n    ConnRef *connRef533 = new ConnRef(router, 533);\n    ConnEnd srcPt533(Point(379.62835648698, 1626.106854917126), 4);\n    connRef533->setSourceEndpoint(srcPt533);\n    ConnEnd dstPt533(Point(181.62835648698, 1647.106854917126), 15);\n    connRef533->setDestEndpoint(dstPt533);\n    connRef533->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints533(1);\n    checkpoints533[0] = Checkpoint(Point(356.62835648698, 1647.106854917126), (ConnDirFlags) 15, (ConnDirFlags) 4);\n    connRef533->setRoutingCheckpoints(checkpoints533);\n\n    ConnRef *connRef534 = new ConnRef(router, 534);\n    ConnEnd srcPt534(Point(617.9873402531949, 1626.106854917126), 4);\n    connRef534->setSourceEndpoint(srcPt534);\n    ConnEnd dstPt534(Point(530.62835648798, 1647.106854917126), 15);\n    connRef534->setDestEndpoint(dstPt534);\n    connRef534->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints534(1);\n    checkpoints534[0] = Checkpoint(Point(594.9873402531949, 1647.106854917126), (ConnDirFlags) 15, (ConnDirFlags) 4);\n    connRef534->setRoutingCheckpoints(checkpoints534);\n\n    ConnRef *connRef535 = new ConnRef(router, 535);\n    ConnEnd srcPt535(Point(982.9140707746942, 1647.106854917126), 15);\n    connRef535->setSourceEndpoint(srcPt535);\n    ConnEnd dstPt535(Point(1152.12835648898, 1567.106854916126), 4);\n    connRef535->setDestEndpoint(dstPt535);\n    connRef535->setRoutingType((ConnType)2);\n\n    ConnRef *connRef536 = new ConnRef(router, 536);\n    ConnEnd srcPt536(Point(982.9140707746942, 1647.106854917126), 15);\n    connRef536->setSourceEndpoint(srcPt536);\n    ConnEnd dstPt536(Point(1152.12835648898, 1706.773521583792), 4);\n    connRef536->setDestEndpoint(dstPt536);\n    connRef536->setRoutingType((ConnType)2);\n\n    ConnRef *connRef537 = new ConnRef(router, 537);\n    ConnEnd srcPt537(Point(1700.12835648998, 1309.606854916126), 15);\n    connRef537->setSourceEndpoint(srcPt537);\n    ConnEnd dstPt537(Point(1755.12835649098, 1309.606854916126), 4);\n    connRef537->setDestEndpoint(dstPt537);\n    connRef537->setRoutingType((ConnType)2);\n\n    ConnRef *connRef538 = new ConnRef(router, 538);\n    ConnEnd srcPt538(Point(1134.12835648898, 1433.106854916126), 15);\n    connRef538->setSourceEndpoint(srcPt538);\n    ConnEnd dstPt538(Point(1315.12835648898, 1433.106854916126), 4);\n    connRef538->setDestEndpoint(dstPt538);\n    connRef538->setRoutingType((ConnType)2);\n\n    ConnRef *connRef539 = new ConnRef(router, 539);\n    ConnEnd srcPt539(Point(1700.12835648998, 1647.106854917126), 15);\n    connRef539->setSourceEndpoint(srcPt539);\n    ConnEnd dstPt539(Point(1755.12835649098, 1647.106854917126), 4);\n    connRef539->setDestEndpoint(dstPt539);\n    connRef539->setRoutingType((ConnType)2);\n\n    ConnRef *connRef540 = new ConnRef(router, 540);\n    ConnEnd srcPt540(Point(1873.12835649198, 1647.106854917126), 15);\n    connRef540->setSourceEndpoint(srcPt540);\n    ConnEnd dstPt540(Point(1928.12835649298, 1647.106854917126), 4);\n    connRef540->setDestEndpoint(dstPt540);\n    connRef540->setRoutingType((ConnType)2);\n\n    ConnRef *connRef541 = new ConnRef(router, 541);\n    ConnEnd srcPt541(Point(1700.12835648998, 33.25685491512604), 15);\n    connRef541->setSourceEndpoint(srcPt541);\n    ConnEnd dstPt541(Point(1755.12835649098, 33.25685491512604), 4);\n    connRef541->setDestEndpoint(dstPt541);\n    connRef541->setRoutingType((ConnType)2);\n\n    ConnRef *connRef542 = new ConnRef(router, 542);\n    ConnEnd srcPt542(Point(1873.12835649198, -298.4098117515406), 15);\n    connRef542->setSourceEndpoint(srcPt542);\n    ConnEnd dstPt542(Point(1928.12835649298, -298.4098117515406), 4);\n    connRef542->setDestEndpoint(dstPt542);\n    connRef542->setRoutingType((ConnType)2);\n\n    ConnRef *connRef543 = new ConnRef(router, 543);\n    ConnEnd srcPt543(Point(1700.12835648998, -298.4098117515406), 15);\n    connRef543->setSourceEndpoint(srcPt543);\n    ConnEnd dstPt543(Point(1755.12835649098, -298.4098117515406), 4);\n    connRef543->setDestEndpoint(dstPt543);\n    connRef543->setRoutingType((ConnType)2);\n\n    ConnRef *connRef544 = new ConnRef(router, 544);\n    ConnEnd srcPt544(Point(181.62835648698, 66.25685491512604), 15);\n    connRef544->setSourceEndpoint(srcPt544);\n    ConnEnd dstPt544(Point(181.62835648698, 505.756854916126), 1);\n    connRef544->setDestEndpoint(dstPt544);\n    connRef544->setRoutingType((ConnType)2);\n\n    ConnRef *connRef545 = new ConnRef(router, 545);\n    ConnEnd srcPt545(Point(181.62835648698, 1499.106854916126), 15);\n    connRef545->setSourceEndpoint(srcPt545);\n    ConnEnd dstPt545(Point(181.62835648698, 1390.606854916126), 2);\n    connRef545->setDestEndpoint(dstPt545);\n    connRef545->setRoutingType((ConnType)2);\n\n    ConnRef *connRef546 = new ConnRef(router, 546);\n    ConnEnd srcPt546(Point(115.62835648698, 1466.106854916126), 15);\n    connRef546->setSourceEndpoint(srcPt546);\n    ConnEnd dstPt546(Point(181.62835648698, 1390.606854916126), 2);\n    connRef546->setDestEndpoint(dstPt546);\n    connRef546->setRoutingType((ConnType)2);\n\n    ConnRef *connRef547 = new ConnRef(router, 547);\n    ConnEnd srcPt547(Point(115.62835648698, 1254.856854916126), 15);\n    connRef547->setSourceEndpoint(srcPt547);\n    ConnEnd dstPt547(Point(31.62835648497997, 1360.606854916126), 1);\n    connRef547->setDestEndpoint(dstPt547);\n    connRef547->setRoutingType((ConnType)2);\n\n    ConnRef *connRef548 = new ConnRef(router, 548);\n    ConnEnd srcPt548(Point(86.62835648597996, 1063.856854916126), 4);\n    connRef548->setSourceEndpoint(srcPt548);\n    ConnEnd dstPt548(Point(-319.87164351602, 1143.856854916126), 15);\n    connRef548->setDestEndpoint(dstPt548);\n    connRef548->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints548(1);\n    checkpoints548[0] = Checkpoint(Point(63.62835648597996, 1042.856854916126), (ConnDirFlags) 15, (ConnDirFlags) 4);\n    connRef548->setRoutingCheckpoints(checkpoints548);\n\n    ConnRef *connRef549 = new ConnRef(router, 549);\n    ConnEnd srcPt549(Point(961.9140707746942, 871.8568549171259), 1);\n    connRef549->setSourceEndpoint(srcPt549);\n    ConnEnd dstPt549(Point(982.9140707746942, 738.8568549161259), 15);\n    connRef549->setDestEndpoint(dstPt549);\n    connRef549->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints549(1);\n    checkpoints549[0] = Checkpoint(Point(982.9140707746942, 856.8568549171259), (ConnDirFlags) 15, (ConnDirFlags) 2);\n    connRef549->setRoutingCheckpoints(checkpoints549);\n\n    ConnRef *connRef550 = new ConnRef(router, 550);\n    ConnEnd srcPt550(Point(1003.914070774694, 871.8568549171259), 1);\n    connRef550->setSourceEndpoint(srcPt550);\n    ConnEnd dstPt550(Point(982.9140707746942, 738.8568549161259), 15);\n    connRef550->setDestEndpoint(dstPt550);\n    connRef550->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints550(1);\n    checkpoints550[0] = Checkpoint(Point(982.9140707746942, 856.8568549171259), (ConnDirFlags) 15, (ConnDirFlags) 2);\n    connRef550->setRoutingCheckpoints(checkpoints550);\n\n    ConnRef *connRef551 = new ConnRef(router, 551);\n    ConnEnd srcPt551(Point(181.62835648698, 738.8568549161259), 15);\n    connRef551->setSourceEndpoint(srcPt551);\n    ConnEnd dstPt551(Point(46.62835648497997, 738.8568549161259), 8);\n    connRef551->setDestEndpoint(dstPt551);\n    connRef551->setRoutingType((ConnType)2);\n\n    ConnRef *connRef552 = new ConnRef(router, 552);\n    ConnEnd srcPt552(Point(346.62835648698, 759.8568549161259), 4);\n    connRef552->setSourceEndpoint(srcPt552);\n    ConnEnd dstPt552(Point(181.62835648698, 738.8568549161259), 15);\n    connRef552->setDestEndpoint(dstPt552);\n    connRef552->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints552(1);\n    checkpoints552[0] = Checkpoint(Point(323.62835648698, 738.8568549161259), (ConnDirFlags) 15, (ConnDirFlags) 4);\n    connRef552->setRoutingCheckpoints(checkpoints552);\n\n    ConnRef *connRef553 = new ConnRef(router, 553);\n    ConnEnd srcPt553(Point(-319.87164351602, 738.8568549161259), 15);\n    connRef553->setSourceEndpoint(srcPt553);\n    ConnEnd dstPt553(Point(133.62835648698, 804.8568549161259), 4);\n    connRef553->setDestEndpoint(dstPt553);\n    connRef553->setRoutingType((ConnType)2);\n\n    ConnRef *connRef554 = new ConnRef(router, 554);\n    ConnEnd srcPt554(Point(-435.87164351602, 635.6568549161261), 15);\n    connRef554->setSourceEndpoint(srcPt554);\n    ConnEnd dstPt554(Point(-534.87164351602, 535.756854916126), 2);\n    connRef554->setDestEndpoint(dstPt554);\n    connRef554->setRoutingType((ConnType)2);\n\n    ConnRef *connRef555 = new ConnRef(router, 555);\n    ConnEnd srcPt555(Point(-435.87164351602, 454.7568549161261), 15);\n    connRef555->setSourceEndpoint(srcPt555);\n    ConnEnd dstPt555(Point(-319.87164351602, 505.756854916126), 1);\n    connRef555->setDestEndpoint(dstPt555);\n    connRef555->setRoutingType((ConnType)2);\n\n    ConnRef *connRef556 = new ConnRef(router, 556);\n    ConnEnd srcPt556(Point(115.62835648698, 635.6568549161261), 15);\n    connRef556->setSourceEndpoint(srcPt556);\n    ConnEnd dstPt556(Point(-125.87164351502, 535.756854916126), 2);\n    connRef556->setDestEndpoint(dstPt556);\n    connRef556->setRoutingType((ConnType)2);\n\n    ConnRef *connRef557 = new ConnRef(router, 557);\n    ConnEnd srcPt557(Point(115.62835648698, 454.7568549161261), 15);\n    connRef557->setSourceEndpoint(srcPt557);\n    ConnEnd dstPt557(Point(181.62835648698, 505.756854916126), 1);\n    connRef557->setDestEndpoint(dstPt557);\n    connRef557->setRoutingType((ConnType)2);\n\n    ConnRef *connRef558 = new ConnRef(router, 558);\n    ConnEnd srcPt558(Point(1873.12835649198, -558.5348117525407), 15);\n    connRef558->setSourceEndpoint(srcPt558);\n    ConnEnd dstPt558(Point(1818.12835649098, -558.5348117525407), 8);\n    connRef558->setDestEndpoint(dstPt558);\n    connRef558->setRoutingType((ConnType)2);\n\n    ConnRef *connRef559 = new ConnRef(router, 559);\n    ConnEnd srcPt559(Point(944.62835648898, -681.4098117525407), 15);\n    connRef559->setSourceEndpoint(srcPt559);\n    ConnEnd dstPt559(Point(747.62835648798, -681.4098117525407), 8);\n    connRef559->setDestEndpoint(dstPt559);\n    connRef559->setRoutingType((ConnType)2);\n\n    ConnRef *connRef560 = new ConnRef(router, 560);\n    ConnEnd srcPt560(Point(944.62835648898, -681.4098117525407), 15);\n    connRef560->setSourceEndpoint(srcPt560);\n    ConnEnd dstPt560(Point(166.62835648698, -126.4098117515406), 4);\n    connRef560->setDestEndpoint(dstPt560);\n    connRef560->setRoutingType((ConnType)2);\n\n    ConnRef *connRef561 = new ConnRef(router, 561);\n    ConnEnd srcPt561(Point(944.62835648898, -807.4098117525407), 15);\n    connRef561->setSourceEndpoint(srcPt561);\n    ConnEnd dstPt561(Point(747.62835648798, -807.4098117525407), 8);\n    connRef561->setDestEndpoint(dstPt561);\n    connRef561->setRoutingType((ConnType)2);\n\n    ConnRef *connRef562 = new ConnRef(router, 562);\n    ConnEnd srcPt562(Point(1363.12835648898, -558.5348117525407), 15);\n    connRef562->setSourceEndpoint(srcPt562);\n    ConnEnd dstPt562(Point(1246.12835648898, -558.5348117525407), 8);\n    connRef562->setDestEndpoint(dstPt562);\n    connRef562->setRoutingType((ConnType)2);\n\n    ConnRef *connRef563 = new ConnRef(router, 563);\n    ConnEnd srcPt563(Point(845.62835648898, -20.40981175154064), 15);\n    connRef563->setSourceEndpoint(srcPt563);\n    ConnEnd dstPt563(Point(681.62835648798, -20.40981175154064), 8);\n    connRef563->setDestEndpoint(dstPt563);\n    connRef563->setRoutingType((ConnType)2);\n\n    ConnRef *connRef564 = new ConnRef(router, 564);\n    ConnEnd srcPt564(Point(295.62835648698, 421.7568549161261), 15);\n    connRef564->setSourceEndpoint(srcPt564);\n    ConnEnd dstPt564(Point(478.62835648698, 421.7568549161261), 4);\n    connRef564->setDestEndpoint(dstPt564);\n    connRef564->setRoutingType((ConnType)2);\n\n    ConnRef *connRef565 = new ConnRef(router, 565);\n    ConnEnd srcPt565(Point(181.62835648698, -558.5348117525407), 15);\n    connRef565->setSourceEndpoint(srcPt565);\n    ConnEnd dstPt565(Point(46.62835648497997, -558.5348117525407), 8);\n    connRef565->setDestEndpoint(dstPt565);\n    connRef565->setRoutingType((ConnType)2);\n\n    ConnRef *connRef566 = new ConnRef(router, 566);\n    ConnEnd srcPt566(Point(1667.12835648998, 635.6568549161261), 15);\n    connRef566->setSourceEndpoint(srcPt566);\n    ConnEnd dstPt566(Point(1722.12835649098, 635.6568549161261), 4);\n    connRef566->setDestEndpoint(dstPt566);\n    connRef566->setRoutingType((ConnType)2);\n\n    ConnRef *connRef567 = new ConnRef(router, 567);\n    ConnEnd srcPt567(Point(1573.12835648898, 635.6568549161261), 8);\n    connRef567->setSourceEndpoint(srcPt567);\n    ConnEnd dstPt567(Point(1667.12835648998, 635.6568549161261), 15);\n    connRef567->setDestEndpoint(dstPt567);\n    connRef567->setRoutingType((ConnType)2);\n\n    ConnRef *connRef568 = new ConnRef(router, 568);\n    ConnEnd srcPt568(Point(1752.12835649098, 635.6568549161261), 8);\n    connRef568->setSourceEndpoint(srcPt568);\n    ConnEnd dstPt568(Point(1873.12835649198, 635.6568549161261), 15);\n    connRef568->setDestEndpoint(dstPt568);\n    connRef568->setRoutingType((ConnType)2);\n\n    ConnRef *connRef569 = new ConnRef(router, 569);\n    ConnEnd srcPt569(Point(1752.12835649098, 635.6568549161261), 8);\n    connRef569->setSourceEndpoint(srcPt569);\n    ConnEnd dstPt569(Point(1836.12835649098, 487.756854916126), 15);\n    connRef569->setDestEndpoint(dstPt569);\n    connRef569->setRoutingType((ConnType)2);\n\n    ConnRef *connRef570 = new ConnRef(router, 570);\n    ConnEnd srcPt570(Point(2218.795023162646, 614.6568549161261), 4);\n    connRef570->setSourceEndpoint(srcPt570);\n    ConnEnd dstPt570(Point(2153.795023161646, 635.6568549161261), 15);\n    connRef570->setDestEndpoint(dstPt570);\n    connRef570->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints570(1);\n    checkpoints570[0] = Checkpoint(Point(2195.795023162646, 635.6568549161261), (ConnDirFlags) 15, (ConnDirFlags) 4);\n    connRef570->setRoutingCheckpoints(checkpoints570);\n\n    ConnRef *connRef571 = new ConnRef(router, 571);\n    ConnEnd srcPt571(Point(2218.795023162646, 656.6568549161261), 4);\n    connRef571->setSourceEndpoint(srcPt571);\n    ConnEnd dstPt571(Point(2153.795023161646, 635.6568549161261), 15);\n    connRef571->setDestEndpoint(dstPt571);\n    connRef571->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints571(1);\n    checkpoints571[0] = Checkpoint(Point(2195.795023162646, 635.6568549161261), (ConnDirFlags) 15, (ConnDirFlags) 4);\n    connRef571->setRoutingCheckpoints(checkpoints571);\n\n    ConnRef *connRef572 = new ConnRef(router, 572);\n    ConnEnd srcPt572(Point(2248.795023162646, 614.6568549161261), 8);\n    connRef572->setSourceEndpoint(srcPt572);\n    ConnEnd dstPt572(Point(2313.795023163646, 635.6568549161261), 15);\n    connRef572->setDestEndpoint(dstPt572);\n    connRef572->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints572(1);\n    checkpoints572[0] = Checkpoint(Point(2271.795023162646, 635.6568549161261), (ConnDirFlags) 15, (ConnDirFlags) 8);\n    connRef572->setRoutingCheckpoints(checkpoints572);\n\n    ConnRef *connRef573 = new ConnRef(router, 573);\n    ConnEnd srcPt573(Point(2013.795023159646, 635.6568549161261), 15);\n    connRef573->setSourceEndpoint(srcPt573);\n    ConnEnd dstPt573(Point(2068.795023160646, 635.6568549161261), 4);\n    connRef573->setDestEndpoint(dstPt573);\n    connRef573->setRoutingType((ConnType)2);\n\n    ConnRef *connRef574 = new ConnRef(router, 574);\n    ConnEnd srcPt574(Point(2098.795023160646, 635.6568549161261), 8);\n    connRef574->setSourceEndpoint(srcPt574);\n    ConnEnd dstPt574(Point(2153.795023161646, 635.6568549161261), 15);\n    connRef574->setDestEndpoint(dstPt574);\n    connRef574->setRoutingType((ConnType)2);\n\n    ConnRef *connRef575 = new ConnRef(router, 575);\n    ConnEnd srcPt575(Point(2248.795023162646, 656.6568549161261), 8);\n    connRef575->setSourceEndpoint(srcPt575);\n    ConnEnd dstPt575(Point(2313.795023163646, 635.6568549161261), 15);\n    connRef575->setDestEndpoint(dstPt575);\n    connRef575->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints575(1);\n    checkpoints575[0] = Checkpoint(Point(2271.795023162646, 635.6568549161261), (ConnDirFlags) 15, (ConnDirFlags) 8);\n    connRef575->setRoutingCheckpoints(checkpoints575);\n\n    ConnRef *connRef576 = new ConnRef(router, 576);\n    ConnEnd srcPt576(Point(1667.12835648998, 361.2568549161261), 15);\n    connRef576->setSourceEndpoint(srcPt576);\n    ConnEnd dstPt576(Point(1722.12835649098, 361.2568549161261), 4);\n    connRef576->setDestEndpoint(dstPt576);\n    connRef576->setRoutingType((ConnType)2);\n\n    ConnRef *connRef577 = new ConnRef(router, 577);\n    ConnEnd srcPt577(Point(1752.12835649098, 361.2568549161261), 8);\n    connRef577->setSourceEndpoint(srcPt577);\n    ConnEnd dstPt577(Point(1836.12835649098, 487.756854916126), 15);\n    connRef577->setDestEndpoint(dstPt577);\n    connRef577->setRoutingType((ConnType)2);\n\n    ConnRef *connRef578 = new ConnRef(router, 578);\n    ConnEnd srcPt578(Point(1752.12835649098, 361.2568549161261), 8);\n    connRef578->setSourceEndpoint(srcPt578);\n    ConnEnd dstPt578(Point(2013.795023159646, 635.6568549161261), 15);\n    connRef578->setDestEndpoint(dstPt578);\n    connRef578->setRoutingType((ConnType)2);\n\n    ConnRef *connRef579 = new ConnRef(router, 579);\n    ConnEnd srcPt579(Point(1642.12835648998, -497.4098117525407), 8);\n    connRef579->setSourceEndpoint(srcPt579);\n    ConnEnd dstPt579(Point(1700.12835648998, -558.5348117525407), 15);\n    connRef579->setDestEndpoint(dstPt579);\n    connRef579->setRoutingType((ConnType)2);\n\n    ConnRef *connRef580 = new ConnRef(router, 580);\n    ConnEnd srcPt580(Point(239.62835648698, 1375.606854916126), 4);\n    connRef580->setSourceEndpoint(srcPt580);\n    ConnEnd dstPt580(Point(181.62835648698, 1375.606854916126), 8);\n    connRef580->setDestEndpoint(dstPt580);\n    connRef580->setRoutingType((ConnType)2);\n\n    ConnRef *connRef581 = new ConnRef(router, 581);\n    ConnEnd srcPt581(Point(1943.12835649298, -16.74314508487396), 2);\n    connRef581->setSourceEndpoint(srcPt581);\n    ConnEnd dstPt581(Point(1943.12835649298, 33.25685491512604), 1);\n    connRef581->setDestEndpoint(dstPt581);\n    connRef581->setRoutingType((ConnType)2);\n\n    ConnRef *connRef582 = new ConnRef(router, 582);\n    ConnEnd srcPt582(Point(427.62835648698, -369.4098117515406), 2);\n    connRef582->setSourceEndpoint(srcPt582);\n    ConnEnd dstPt582(Point(427.62835648698, -319.4098117515406), 1);\n    connRef582->setDestEndpoint(dstPt582);\n    connRef582->setRoutingType((ConnType)2);\n\n    ConnRef *connRef583 = new ConnRef(router, 583);\n    ConnEnd srcPt583(Point(31.62835648497997, 895.8568549161259), 2);\n    connRef583->setSourceEndpoint(srcPt583);\n    ConnEnd dstPt583(Point(31.62835648497997, 945.8568549161259), 1);\n    connRef583->setDestEndpoint(dstPt583);\n    connRef583->setRoutingType((ConnType)2);\n\n    ConnRef *connRef584 = new ConnRef(router, 584);\n    ConnEnd srcPt584(Point(451.6283564879799, 1342.606854916126), 8);\n    connRef584->setSourceEndpoint(srcPt584);\n    ConnEnd dstPt584(Point(509.62835648798, 1342.606854916126), 4);\n    connRef584->setDestEndpoint(dstPt584);\n    connRef584->setRoutingType((ConnType)2);\n\n    ConnRef *connRef585 = new ConnRef(router, 585);\n    ConnEnd srcPt585(Point(-948.12164351602, -265.4098117515406), 4);\n    connRef585->setSourceEndpoint(srcPt585);\n    ConnEnd dstPt585(Point(-1006.12164351602, -265.4098117515406), 8);\n    connRef585->setDestEndpoint(dstPt585);\n    connRef585->setRoutingType((ConnType)2);\n\n    ConnRef *connRef586 = new ConnRef(router, 586);\n    ConnEnd srcPt586(Point(-948.12164351602, -497.4098117525407), 4);\n    connRef586->setSourceEndpoint(srcPt586);\n    ConnEnd dstPt586(Point(-1006.12164351602, -497.4098117525407), 8);\n    connRef586->setDestEndpoint(dstPt586);\n    connRef586->setRoutingType((ConnType)2);\n\n    ConnRef *connRef587 = new ConnRef(router, 587);\n    ConnEnd srcPt587(Point(-808.12164351602, -787.9812403239691), 2);\n    connRef587->setSourceEndpoint(srcPt587);\n    ConnEnd dstPt587(Point(-808.12164351602, -737.9812403239691), 1);\n    connRef587->setDestEndpoint(dstPt587);\n    connRef587->setRoutingType((ConnType)2);\n\n    ConnRef *connRef588 = new ConnRef(router, 588);\n    ConnEnd srcPt588(Point(-468.87164351602, -883.9812403239691), 2);\n    connRef588->setSourceEndpoint(srcPt588);\n    ConnEnd dstPt588(Point(-468.87164351602, -833.9812403239691), 1);\n    connRef588->setDestEndpoint(dstPt588);\n    connRef588->setRoutingType((ConnType)2);\n\n    ConnRef *connRef589 = new ConnRef(router, 589);\n    ConnEnd srcPt589(Point(-468.87164351602, -808.9812403239691), 2);\n    connRef589->setSourceEndpoint(srcPt589);\n    ConnEnd dstPt589(Point(-468.87164351602, -758.9812403239691), 1);\n    connRef589->setDestEndpoint(dstPt589);\n    connRef589->setRoutingType((ConnType)2);\n\n    ConnRef *connRef590 = new ConnRef(router, 590);\n    ConnEnd srcPt590(Point(115.62835648698, -787.9812403239691), 2);\n    connRef590->setSourceEndpoint(srcPt590);\n    ConnEnd dstPt590(Point(115.62835648698, -737.9812403239691), 1);\n    connRef590->setDestEndpoint(dstPt590);\n    connRef590->setRoutingType((ConnType)2);\n\n    ConnRef *connRef591 = new ConnRef(router, 591);\n    ConnEnd srcPt591(Point(-501.87164351602, -547.4098117525407), 2);\n    connRef591->setSourceEndpoint(srcPt591);\n    ConnEnd dstPt591(Point(-501.87164351602, -497.4098117525407), 1);\n    connRef591->setDestEndpoint(dstPt591);\n    connRef591->setRoutingType((ConnType)2);\n\n    ConnRef *connRef592 = new ConnRef(router, 592);\n    ConnEnd srcPt592(Point(-501.87164351602, -428.4098117525406), 2);\n    connRef592->setSourceEndpoint(srcPt592);\n    ConnEnd dstPt592(Point(-501.87164351602, -378.4098117525406), 1);\n    connRef592->setDestEndpoint(dstPt592);\n    connRef592->setRoutingType((ConnType)2);\n\n    ConnRef *connRef593 = new ConnRef(router, 593);\n    ConnEnd srcPt593(Point(96.62835648597996, -227.4098117515406), 1);\n    connRef593->setSourceEndpoint(srcPt593);\n    ConnEnd dstPt593(Point(96.62835648597996, -277.4098117515406), 2);\n    connRef593->setDestEndpoint(dstPt593);\n    connRef593->setRoutingType((ConnType)2);\n\n    ConnRef *connRef594 = new ConnRef(router, 594);\n    ConnEnd srcPt594(Point(96.62835648597996, -152.4098117515406), 1);\n    connRef594->setSourceEndpoint(srcPt594);\n    ConnEnd dstPt594(Point(96.62835648597996, -202.4098117515406), 2);\n    connRef594->setDestEndpoint(dstPt594);\n    connRef594->setRoutingType((ConnType)2);\n\n    ConnRef *connRef595 = new ConnRef(router, 595);\n    ConnEnd srcPt595(Point(427.62835648698, -227.4098117515406), 1);\n    connRef595->setSourceEndpoint(srcPt595);\n    ConnEnd dstPt595(Point(427.62835648698, -277.4098117515406), 2);\n    connRef595->setDestEndpoint(dstPt595);\n    connRef595->setRoutingType((ConnType)2);\n\n    ConnRef *connRef596 = new ConnRef(router, 596);\n    ConnEnd srcPt596(Point(427.62835648698, -152.4098117515406), 1);\n    connRef596->setSourceEndpoint(srcPt596);\n    ConnEnd dstPt596(Point(427.62835648698, -202.4098117515406), 2);\n    connRef596->setDestEndpoint(dstPt596);\n    connRef596->setRoutingType((ConnType)2);\n\n    ConnRef *connRef597 = new ConnRef(router, 597);\n    ConnEnd srcPt597(Point(-240.87164351602, -159.4098117515406), 4);\n    connRef597->setSourceEndpoint(srcPt597);\n    ConnEnd dstPt597(Point(-298.87164351602, -159.4098117515406), 8);\n    connRef597->setDestEndpoint(dstPt597);\n    connRef597->setRoutingType((ConnType)2);\n\n    ConnRef *connRef598 = new ConnRef(router, 598);\n    ConnEnd srcPt598(Point(-398.87164351602, -159.4098117515406), 8);\n    connRef598->setSourceEndpoint(srcPt598);\n    ConnEnd dstPt598(Point(-340.87164351602, -159.4098117515406), 4);\n    connRef598->setDestEndpoint(dstPt598);\n    connRef598->setRoutingType((ConnType)2);\n\n    ConnRef *connRef599 = new ConnRef(router, 599);\n    ConnEnd srcPt599(Point(96.62835648597996, -444.4098117515406), 2);\n    connRef599->setSourceEndpoint(srcPt599);\n    ConnEnd dstPt599(Point(96.62835648597996, -394.4098117515406), 1);\n    connRef599->setDestEndpoint(dstPt599);\n    connRef599->setRoutingType((ConnType)2);\n\n    ConnRef *connRef600 = new ConnRef(router, 600);\n    ConnEnd srcPt600(Point(96.62835648597996, -369.4098117515406), 2);\n    connRef600->setSourceEndpoint(srcPt600);\n    ConnEnd dstPt600(Point(96.62835648597996, -319.4098117515406), 1);\n    connRef600->setDestEndpoint(dstPt600);\n    connRef600->setRoutingType((ConnType)2);\n\n    ConnRef *connRef601 = new ConnRef(router, 601);\n    ConnEnd srcPt601(Point(427.62835648698, -519.4098117515407), 2);\n    connRef601->setSourceEndpoint(srcPt601);\n    ConnEnd dstPt601(Point(427.62835648698, -469.4098117515406), 1);\n    connRef601->setDestEndpoint(dstPt601);\n    connRef601->setRoutingType((ConnType)2);\n\n    ConnRef *connRef602 = new ConnRef(router, 602);\n    ConnEnd srcPt602(Point(427.62835648698, -444.4098117515406), 2);\n    connRef602->setSourceEndpoint(srcPt602);\n    ConnEnd dstPt602(Point(427.62835648698, -394.4098117515406), 1);\n    connRef602->setDestEndpoint(dstPt602);\n    connRef602->setRoutingType((ConnType)2);\n\n    ConnRef *connRef603 = new ConnRef(router, 603);\n    ConnEnd srcPt603(Point(845.62835648898, -182.4098117515406), 1);\n    connRef603->setSourceEndpoint(srcPt603);\n    ConnEnd dstPt603(Point(845.62835648898, -232.4098117515406), 2);\n    connRef603->setDestEndpoint(dstPt603);\n    connRef603->setRoutingType((ConnType)2);\n\n    ConnRef *connRef604 = new ConnRef(router, 604);\n    ConnEnd srcPt604(Point(632.9873402531949, -227.4098117515406), 1);\n    connRef604->setSourceEndpoint(srcPt604);\n    ConnEnd dstPt604(Point(632.9873402531949, -277.4098117515406), 2);\n    connRef604->setDestEndpoint(dstPt604);\n    connRef604->setRoutingType((ConnType)2);\n\n    ConnRef *connRef605 = new ConnRef(router, 605);\n    ConnEnd srcPt605(Point(632.9873402531949, -369.4098117515406), 2);\n    connRef605->setSourceEndpoint(srcPt605);\n    ConnEnd dstPt605(Point(632.9873402531949, -319.4098117515406), 1);\n    connRef605->setDestEndpoint(dstPt605);\n    connRef605->setRoutingType((ConnType)2);\n\n    ConnRef *connRef606 = new ConnRef(router, 606);\n    ConnEnd srcPt606(Point(1062.914070775694, -369.4098117515406), 2);\n    connRef606->setSourceEndpoint(srcPt606);\n    ConnEnd dstPt606(Point(1062.914070775694, -319.4098117515406), 1);\n    connRef606->setDestEndpoint(dstPt606);\n    connRef606->setRoutingType((ConnType)2);\n\n    ConnRef *connRef607 = new ConnRef(router, 607);\n    ConnEnd srcPt607(Point(1062.914070775694, -227.4098117515406), 1);\n    connRef607->setSourceEndpoint(srcPt607);\n    ConnEnd dstPt607(Point(1062.914070775694, -277.4098117515406), 2);\n    connRef607->setDestEndpoint(dstPt607);\n    connRef607->setRoutingType((ConnType)2);\n\n    ConnRef *connRef608 = new ConnRef(router, 608);\n    ConnEnd srcPt608(Point(1594.12835648998, -369.4098117515406), 2);\n    connRef608->setSourceEndpoint(srcPt608);\n    ConnEnd dstPt608(Point(1594.12835648998, -319.4098117515406), 1);\n    connRef608->setDestEndpoint(dstPt608);\n    connRef608->setRoutingType((ConnType)2);\n\n    ConnRef *connRef609 = new ConnRef(router, 609);\n    ConnEnd srcPt609(Point(1594.12835648998, -227.4098117515406), 1);\n    connRef609->setSourceEndpoint(srcPt609);\n    ConnEnd dstPt609(Point(1594.12835648998, -277.4098117515406), 2);\n    connRef609->setDestEndpoint(dstPt609);\n    connRef609->setRoutingType((ConnType)2);\n\n    ConnRef *connRef610 = new ConnRef(router, 610);\n    ConnEnd srcPt610(Point(1770.12835649098, -348.4098117515406), 2);\n    connRef610->setSourceEndpoint(srcPt610);\n    ConnEnd dstPt610(Point(1770.12835649098, -298.4098117515406), 1);\n    connRef610->setDestEndpoint(dstPt610);\n    connRef610->setRoutingType((ConnType)2);\n\n    ConnRef *connRef611 = new ConnRef(router, 611);\n    ConnEnd srcPt611(Point(1943.12835649298, -348.4098117515406), 2);\n    connRef611->setSourceEndpoint(srcPt611);\n    ConnEnd dstPt611(Point(1943.12835649298, -298.4098117515406), 1);\n    connRef611->setDestEndpoint(dstPt611);\n    connRef611->setRoutingType((ConnType)2);\n\n    ConnRef *connRef612 = new ConnRef(router, 612);\n    ConnEnd srcPt612(Point(-501.87164351602, 149.256854915126), 1);\n    connRef612->setSourceEndpoint(srcPt612);\n    ConnEnd dstPt612(Point(-501.87164351602, 99.25685491512604), 2);\n    connRef612->setDestEndpoint(dstPt612);\n    connRef612->setRoutingType((ConnType)2);\n\n    ConnRef *connRef613 = new ConnRef(router, 613);\n    ConnEnd srcPt613(Point(-501.87164351602, 251.2568549161261), 1);\n    connRef613->setSourceEndpoint(srcPt613);\n    ConnEnd dstPt613(Point(-501.87164351602, 201.256854916126), 2);\n    connRef613->setDestEndpoint(dstPt613);\n    connRef613->setRoutingType((ConnType)2);\n\n    ConnRef *connRef614 = new ConnRef(router, 614);\n    ConnEnd srcPt614(Point(-26.87164351502003, -4.743145084873959), 2);\n    connRef614->setSourceEndpoint(srcPt614);\n    ConnEnd dstPt614(Point(-26.87164351502003, 45.25685491512604), 1);\n    connRef614->setDestEndpoint(dstPt614);\n    connRef614->setRoutingType((ConnType)2);\n\n    ConnRef *connRef615 = new ConnRef(router, 615);\n    ConnEnd srcPt615(Point(-26.87164351502003, 137.256854915126), 1);\n    connRef615->setSourceEndpoint(srcPt615);\n    ConnEnd dstPt615(Point(-26.87164351502003, 87.25685491512604), 2);\n    connRef615->setDestEndpoint(dstPt615);\n    connRef615->setRoutingType((ConnType)2);\n\n    ConnRef *connRef616 = new ConnRef(router, 616);\n    ConnEnd srcPt616(Point(450.62835648698, 137.256854915126), 1);\n    connRef616->setSourceEndpoint(srcPt616);\n    ConnEnd dstPt616(Point(450.62835648698, 87.25685491512604), 2);\n    connRef616->setDestEndpoint(dstPt616);\n    connRef616->setRoutingType((ConnType)2);\n\n    ConnRef *connRef617 = new ConnRef(router, 617);\n    ConnEnd srcPt617(Point(450.62835648698, -4.743145084873959), 2);\n    connRef617->setSourceEndpoint(srcPt617);\n    ConnEnd dstPt617(Point(450.62835648698, 45.25685491512604), 1);\n    connRef617->setDestEndpoint(dstPt617);\n    connRef617->setRoutingType((ConnType)2);\n\n    ConnRef *connRef618 = new ConnRef(router, 618);\n    ConnEnd srcPt618(Point(765.62835648798, -4.743145084873959), 2);\n    connRef618->setSourceEndpoint(srcPt618);\n    ConnEnd dstPt618(Point(765.62835648798, 45.25685491512604), 1);\n    connRef618->setDestEndpoint(dstPt618);\n    connRef618->setRoutingType((ConnType)2);\n\n    ConnRef *connRef619 = new ConnRef(router, 619);\n    ConnEnd srcPt619(Point(765.62835648798, 137.256854915126), 1);\n    connRef619->setSourceEndpoint(srcPt619);\n    ConnEnd dstPt619(Point(765.62835648798, 87.25685491512604), 2);\n    connRef619->setDestEndpoint(dstPt619);\n    connRef619->setRoutingType((ConnType)2);\n\n    ConnRef *connRef620 = new ConnRef(router, 620);\n    ConnEnd srcPt620(Point(1040.914070774694, -126.4098117515406), 4);\n    connRef620->setSourceEndpoint(srcPt620);\n    ConnEnd dstPt620(Point(982.9140707746942, -126.4098117515406), 8);\n    connRef620->setDestEndpoint(dstPt620);\n    connRef620->setRoutingType((ConnType)2);\n\n    ConnRef *connRef621 = new ConnRef(router, 621);\n    ConnEnd srcPt621(Point(1487.12835648898, -126.4098117515406), 4);\n    connRef621->setSourceEndpoint(srcPt621);\n    ConnEnd dstPt621(Point(1429.12835648898, -126.4098117515406), 8);\n    connRef621->setDestEndpoint(dstPt621);\n    connRef621->setRoutingType((ConnType)2);\n\n    ConnRef *connRef622 = new ConnRef(router, 622);\n    ConnEnd srcPt622(Point(1101.12835648898, -4.743145084873959), 2);\n    connRef622->setSourceEndpoint(srcPt622);\n    ConnEnd dstPt622(Point(1101.12835648898, 45.25685491512604), 1);\n    connRef622->setDestEndpoint(dstPt622);\n    connRef622->setRoutingType((ConnType)2);\n\n    ConnRef *connRef623 = new ConnRef(router, 623);\n    ConnEnd srcPt623(Point(1101.12835648898, 137.256854915126), 1);\n    connRef623->setSourceEndpoint(srcPt623);\n    ConnEnd dstPt623(Point(1101.12835648898, 87.25685491512604), 2);\n    connRef623->setDestEndpoint(dstPt623);\n    connRef623->setRoutingType((ConnType)2);\n\n    ConnRef *connRef624 = new ConnRef(router, 624);\n    ConnEnd srcPt624(Point(699.62835648798, 305.2568549161261), 1);\n    connRef624->setSourceEndpoint(srcPt624);\n    ConnEnd dstPt624(Point(699.62835648798, 255.2568549161261), 2);\n    connRef624->setDestEndpoint(dstPt624);\n    connRef624->setRoutingType((ConnType)2);\n\n    ConnRef *connRef625 = new ConnRef(router, 625);\n    ConnEnd srcPt625(Point(1627.12835648998, -16.74314508487396), 2);\n    connRef625->setSourceEndpoint(srcPt625);\n    ConnEnd dstPt625(Point(1627.12835648998, 33.25685491512604), 1);\n    connRef625->setDestEndpoint(dstPt625);\n    connRef625->setRoutingType((ConnType)2);\n\n    ConnRef *connRef626 = new ConnRef(router, 626);\n    ConnEnd srcPt626(Point(1770.12835649098, -16.74314508487396), 2);\n    connRef626->setSourceEndpoint(srcPt626);\n    ConnEnd dstPt626(Point(1770.12835649098, 33.25685491512604), 1);\n    connRef626->setDestEndpoint(dstPt626);\n    connRef626->setRoutingType((ConnType)2);\n\n    ConnRef *connRef627 = new ConnRef(router, 627);\n    ConnEnd srcPt627(Point(-932.12164351602, 771.8568549161259), 8);\n    connRef627->setSourceEndpoint(srcPt627);\n    ConnEnd dstPt627(Point(-874.12164351602, 771.8568549161259), 4);\n    connRef627->setDestEndpoint(dstPt627);\n    connRef627->setRoutingType((ConnType)2);\n\n    ConnRef *connRef628 = new ConnRef(router, 628);\n    ConnEnd srcPt628(Point(-786.12164351602, 771.8568549161259), 8);\n    connRef628->setSourceEndpoint(srcPt628);\n    ConnEnd dstPt628(Point(-728.12164351602, 771.8568549161259), 4);\n    connRef628->setDestEndpoint(dstPt628);\n    connRef628->setRoutingType((ConnType)2);\n\n    ConnRef *connRef629 = new ConnRef(router, 629);\n    ConnEnd srcPt629(Point(-592.87164351602, 520.756854916126), 8);\n    connRef629->setSourceEndpoint(srcPt629);\n    ConnEnd dstPt629(Point(-534.87164351602, 520.756854916126), 4);\n    connRef629->setDestEndpoint(dstPt629);\n    connRef629->setRoutingType((ConnType)2);\n\n    ConnRef *connRef630 = new ConnRef(router, 630);\n    ConnEnd srcPt630(Point(-261.87164351602, 520.756854916126), 4);\n    connRef630->setSourceEndpoint(srcPt630);\n    ConnEnd dstPt630(Point(-319.87164351602, 520.756854916126), 8);\n    connRef630->setDestEndpoint(dstPt630);\n    connRef630->setRoutingType((ConnType)2);\n\n    ConnRef *connRef631 = new ConnRef(router, 631);\n    ConnEnd srcPt631(Point(-183.87164351502, 520.756854916126), 8);\n    connRef631->setSourceEndpoint(srcPt631);\n    ConnEnd dstPt631(Point(-125.87164351502, 520.756854916126), 4);\n    connRef631->setDestEndpoint(dstPt631);\n    connRef631->setRoutingType((ConnType)2);\n\n    ConnRef *connRef632 = new ConnRef(router, 632);\n    ConnEnd srcPt632(Point(239.62835648698, 520.756854916126), 4);\n    connRef632->setSourceEndpoint(srcPt632);\n    ConnEnd dstPt632(Point(181.62835648698, 520.756854916126), 8);\n    connRef632->setDestEndpoint(dstPt632);\n    connRef632->setRoutingType((ConnType)2);\n\n    ConnRef *connRef633 = new ConnRef(router, 633);\n    ConnEnd srcPt633(Point(31.62835648497997, 688.8568549161259), 2);\n    connRef633->setSourceEndpoint(srcPt633);\n    ConnEnd dstPt633(Point(31.62835648497997, 738.8568549161259), 1);\n    connRef633->setDestEndpoint(dstPt633);\n    connRef633->setRoutingType((ConnType)2);\n\n    ConnRef *connRef634 = new ConnRef(router, 634);\n    ConnEnd srcPt634(Point(-410.87164351602, 978.8568549161259), 8);\n    connRef634->setSourceEndpoint(srcPt634);\n    ConnEnd dstPt634(Point(-352.87164351602, 978.8568549161259), 4);\n    connRef634->setDestEndpoint(dstPt634);\n    connRef634->setRoutingType((ConnType)2);\n\n    ConnRef *connRef635 = new ConnRef(router, 635);\n    ConnEnd srcPt635(Point(-637.12164351602, 1044.856854916126), 4);\n    connRef635->setSourceEndpoint(srcPt635);\n    ConnEnd dstPt635(Point(-695.12164351602, 1044.856854916126), 8);\n    connRef635->setDestEndpoint(dstPt635);\n    connRef635->setRoutingType((ConnType)2);\n\n    ConnRef *connRef636 = new ConnRef(router, 636);\n    ConnEnd srcPt636(Point(361.62835648698, 667.8568549161259), 2);\n    connRef636->setSourceEndpoint(srcPt636);\n    ConnEnd dstPt636(Point(361.62835648698, 717.8568549161259), 1);\n    connRef636->setDestEndpoint(dstPt636);\n    connRef636->setRoutingType((ConnType)2);\n\n    ConnRef *connRef637 = new ConnRef(router, 637);\n    ConnEnd srcPt637(Point(666.62835648798, 529.006854916126), 2);\n    connRef637->setSourceEndpoint(srcPt637);\n    ConnEnd dstPt637(Point(666.62835648798, 579.006854916126), 1);\n    connRef637->setDestEndpoint(dstPt637);\n    connRef637->setRoutingType((ConnType)2);\n\n    ConnRef *connRef638 = new ConnRef(router, 638);\n    ConnEnd srcPt638(Point(148.62835648698, 854.8568549161259), 1);\n    connRef638->setSourceEndpoint(srcPt638);\n    ConnEnd dstPt638(Point(148.62835648698, 804.8568549161259), 2);\n    connRef638->setDestEndpoint(dstPt638);\n    connRef638->setRoutingType((ConnType)2);\n\n    ConnRef *connRef639 = new ConnRef(router, 639);\n    ConnEnd srcPt639(Point(798.62835648798, 667.8568549161259), 2);\n    connRef639->setSourceEndpoint(srcPt639);\n    ConnEnd dstPt639(Point(798.62835648798, 717.8568549161259), 1);\n    connRef639->setDestEndpoint(dstPt639);\n    connRef639->setRoutingType((ConnType)2);\n\n    ConnRef *connRef640 = new ConnRef(router, 640);\n    ConnEnd srcPt640(Point(798.62835648798, 809.8568549161259), 1);\n    connRef640->setSourceEndpoint(srcPt640);\n    ConnEnd dstPt640(Point(798.62835648798, 759.8568549161259), 2);\n    connRef640->setDestEndpoint(dstPt640);\n    connRef640->setRoutingType((ConnType)2);\n\n    ConnRef *connRef641 = new ConnRef(router, 641);\n    ConnEnd srcPt641(Point(654.62835648798, 857.8568549161259), 4);\n    connRef641->setSourceEndpoint(srcPt641);\n    ConnEnd dstPt641(Point(596.62835648798, 857.8568549161259), 8);\n    connRef641->setDestEndpoint(dstPt641);\n    connRef641->setRoutingType((ConnType)2);\n\n    ConnRef *connRef642 = new ConnRef(router, 642);\n    ConnEnd srcPt642(Point(101.62835648598, 971.8568549161259), 2);\n    connRef642->setSourceEndpoint(srcPt642);\n    ConnEnd dstPt642(Point(101.62835648598, 1021.856854916126), 1);\n    connRef642->setDestEndpoint(dstPt642);\n    connRef642->setRoutingType((ConnType)2);\n\n    ConnRef *connRef643 = new ConnRef(router, 643);\n    ConnEnd srcPt643(Point(-92.87164351502003, 1214.856854916126), 1);\n    connRef643->setSourceEndpoint(srcPt643);\n    ConnEnd dstPt643(Point(-92.87164351502003, 1164.856854916126), 2);\n    connRef643->setDestEndpoint(dstPt643);\n    connRef643->setRoutingType((ConnType)2);\n\n    ConnRef *connRef644 = new ConnRef(router, 644);\n    ConnEnd srcPt644(Point(-92.87164351502003, 1072.856854916126), 2);\n    connRef644->setSourceEndpoint(srcPt644);\n    ConnEnd dstPt644(Point(-92.87164351502003, 1122.856854916126), 1);\n    connRef644->setDestEndpoint(dstPt644);\n    connRef644->setRoutingType((ConnType)2);\n\n    ConnRef *connRef645 = new ConnRef(router, 645);\n    ConnEnd srcPt645(Point(328.62835648698, 1072.856854916126), 2);\n    connRef645->setSourceEndpoint(srcPt645);\n    ConnEnd dstPt645(Point(328.62835648698, 1122.856854916126), 1);\n    connRef645->setDestEndpoint(dstPt645);\n    connRef645->setRoutingType((ConnType)2);\n\n    ConnRef *connRef646 = new ConnRef(router, 646);\n    ConnEnd srcPt646(Point(845.62835648898, 1060.856854916126), 2);\n    connRef646->setSourceEndpoint(srcPt646);\n    ConnEnd dstPt646(Point(845.62835648898, 1110.856854916126), 1);\n    connRef646->setDestEndpoint(dstPt646);\n    connRef646->setRoutingType((ConnType)2);\n\n    ConnRef *connRef647 = new ConnRef(router, 647);\n    ConnEnd srcPt647(Point(903.9140707746942, 886.8568549171259), 8);\n    connRef647->setSourceEndpoint(srcPt647);\n    ConnEnd dstPt647(Point(961.9140707746942, 886.8568549171259), 4);\n    connRef647->setDestEndpoint(dstPt647);\n    connRef647->setRoutingType((ConnType)2);\n\n    ConnRef *connRef648 = new ConnRef(router, 648);\n    ConnEnd srcPt648(Point(1225.12835648898, 1011.856854916126), 4);\n    connRef648->setSourceEndpoint(srcPt648);\n    ConnEnd dstPt648(Point(1167.12835648898, 1011.856854916126), 8);\n    connRef648->setDestEndpoint(dstPt648);\n    connRef648->setRoutingType((ConnType)2);\n\n    ConnRef *connRef649 = new ConnRef(router, 649);\n    ConnEnd srcPt649(Point(1225.12835648898, 1110.856854916126), 4);\n    connRef649->setSourceEndpoint(srcPt649);\n    ConnEnd dstPt649(Point(1167.12835648898, 1110.856854916126), 8);\n    connRef649->setDestEndpoint(dstPt649);\n    connRef649->setRoutingType((ConnType)2);\n\n    ConnRef *connRef650 = new ConnRef(router, 650);\n    ConnEnd srcPt650(Point(1167.12835648898, 1226.856854916126), 1);\n    connRef650->setSourceEndpoint(srcPt650);\n    ConnEnd dstPt650(Point(1167.12835648898, 1176.856854916126), 2);\n    connRef650->setDestEndpoint(dstPt650);\n    connRef650->setRoutingType((ConnType)2);\n\n    ConnRef *connRef651 = new ConnRef(router, 651);\n    ConnEnd srcPt651(Point(-26.37164351502003, 1375.606854916126), 8);\n    connRef651->setSourceEndpoint(srcPt651);\n    ConnEnd dstPt651(Point(31.62835648497997, 1375.606854916126), 4);\n    connRef651->setDestEndpoint(dstPt651);\n    connRef651->setRoutingType((ConnType)2);\n\n    ConnRef *connRef652 = new ConnRef(router, 652);\n    ConnEnd srcPt652(Point(609.62835648798, 1342.606854916126), 4);\n    connRef652->setSourceEndpoint(srcPt652);\n    ConnEnd dstPt652(Point(551.62835648798, 1342.606854916126), 8);\n    connRef652->setDestEndpoint(dstPt652);\n    connRef652->setRoutingType((ConnType)2);\n\n    ConnRef *connRef653 = new ConnRef(router, 653);\n    ConnEnd srcPt653(Point(-501.87164351602, 1597.106854917126), 2);\n    connRef653->setSourceEndpoint(srcPt653);\n    ConnEnd dstPt653(Point(-501.87164351602, 1647.106854917126), 1);\n    connRef653->setDestEndpoint(dstPt653);\n    connRef653->setRoutingType((ConnType)2);\n\n    ConnRef *connRef654 = new ConnRef(router, 654);\n    ConnEnd srcPt654(Point(-59.87164351502003, 1718.106854917126), 1);\n    connRef654->setSourceEndpoint(srcPt654);\n    ConnEnd dstPt654(Point(-59.87164351502003, 1668.106854917126), 2);\n    connRef654->setDestEndpoint(dstPt654);\n    connRef654->setRoutingType((ConnType)2);\n\n    ConnRef *connRef655 = new ConnRef(router, 655);\n    ConnEnd srcPt655(Point(-59.87164351502003, 1501.106854917126), 2);\n    connRef655->setSourceEndpoint(srcPt655);\n    ConnEnd dstPt655(Point(-59.87164351502003, 1551.106854917126), 1);\n    connRef655->setDestEndpoint(dstPt655);\n    connRef655->setRoutingType((ConnType)2);\n\n    ConnRef *connRef656 = new ConnRef(router, 656);\n    ConnEnd srcPt656(Point(-59.87164351502003, 1576.106854917126), 2);\n    connRef656->setSourceEndpoint(srcPt656);\n    ConnEnd dstPt656(Point(-59.87164351502003, 1626.106854917126), 1);\n    connRef656->setDestEndpoint(dstPt656);\n    connRef656->setRoutingType((ConnType)2);\n\n    ConnRef *connRef657 = new ConnRef(router, 657);\n    ConnEnd srcPt657(Point(394.62835648698, 1718.106854917126), 1);\n    connRef657->setSourceEndpoint(srcPt657);\n    ConnEnd dstPt657(Point(394.62835648698, 1668.106854917126), 2);\n    connRef657->setDestEndpoint(dstPt657);\n    connRef657->setRoutingType((ConnType)2);\n\n    ConnRef *connRef658 = new ConnRef(router, 658);\n    ConnEnd srcPt658(Point(394.62835648698, 1576.106854917126), 2);\n    connRef658->setSourceEndpoint(srcPt658);\n    ConnEnd dstPt658(Point(394.62835648698, 1626.106854917126), 1);\n    connRef658->setDestEndpoint(dstPt658);\n    connRef658->setRoutingType((ConnType)2);\n\n    ConnRef *connRef659 = new ConnRef(router, 659);\n    ConnEnd srcPt659(Point(632.9873402531949, 1576.106854917126), 2);\n    connRef659->setSourceEndpoint(srcPt659);\n    ConnEnd dstPt659(Point(632.9873402531949, 1626.106854917126), 1);\n    connRef659->setDestEndpoint(dstPt659);\n    connRef659->setRoutingType((ConnType)2);\n\n    ConnRef *connRef660 = new ConnRef(router, 660);\n    ConnEnd srcPt660(Point(632.9873402531949, 1718.106854917126), 1);\n    connRef660->setSourceEndpoint(srcPt660);\n    ConnEnd dstPt660(Point(632.9873402531949, 1668.106854917126), 2);\n    connRef660->setDestEndpoint(dstPt660);\n    connRef660->setRoutingType((ConnType)2);\n\n    ConnRef *connRef661 = new ConnRef(router, 661);\n    ConnEnd srcPt661(Point(1167.12835648898, 1517.106854916126), 2);\n    connRef661->setSourceEndpoint(srcPt661);\n    ConnEnd dstPt661(Point(1167.12835648898, 1567.106854916126), 1);\n    connRef661->setDestEndpoint(dstPt661);\n    connRef661->setRoutingType((ConnType)2);\n\n    ConnRef *connRef662 = new ConnRef(router, 662);\n    ConnEnd srcPt662(Point(1167.12835648898, 1656.773521583792), 2);\n    connRef662->setSourceEndpoint(srcPt662);\n    ConnEnd dstPt662(Point(1167.12835648898, 1706.773521583792), 1);\n    connRef662->setDestEndpoint(dstPt662);\n    connRef662->setRoutingType((ConnType)2);\n\n    ConnRef *connRef663 = new ConnRef(router, 663);\n    ConnEnd srcPt663(Point(1330.12835648898, 1383.106854916126), 2);\n    connRef663->setSourceEndpoint(srcPt663);\n    ConnEnd dstPt663(Point(1330.12835648898, 1433.106854916126), 1);\n    connRef663->setDestEndpoint(dstPt663);\n    connRef663->setRoutingType((ConnType)2);\n\n    ConnRef *connRef664 = new ConnRef(router, 664);\n    ConnEnd srcPt664(Point(1627.12835648998, 1259.606854916126), 2);\n    connRef664->setSourceEndpoint(srcPt664);\n    ConnEnd dstPt664(Point(1627.12835648998, 1309.606854916126), 1);\n    connRef664->setDestEndpoint(dstPt664);\n    connRef664->setRoutingType((ConnType)2);\n\n    ConnRef *connRef665 = new ConnRef(router, 665);\n    ConnEnd srcPt665(Point(1594.12835648998, 1576.106854917126), 2);\n    connRef665->setSourceEndpoint(srcPt665);\n    ConnEnd dstPt665(Point(1594.12835648998, 1626.106854917126), 1);\n    connRef665->setDestEndpoint(dstPt665);\n    connRef665->setRoutingType((ConnType)2);\n\n    ConnRef *connRef666 = new ConnRef(router, 666);\n    ConnEnd srcPt666(Point(1594.12835648998, 1718.106854917126), 1);\n    connRef666->setSourceEndpoint(srcPt666);\n    ConnEnd dstPt666(Point(1594.12835648998, 1668.106854917126), 2);\n    connRef666->setDestEndpoint(dstPt666);\n    connRef666->setRoutingType((ConnType)2);\n\n    ConnRef *connRef667 = new ConnRef(router, 667);\n    ConnEnd srcPt667(Point(1770.12835649098, 1259.606854916126), 2);\n    connRef667->setSourceEndpoint(srcPt667);\n    ConnEnd dstPt667(Point(1770.12835649098, 1309.606854916126), 1);\n    connRef667->setDestEndpoint(dstPt667);\n    connRef667->setRoutingType((ConnType)2);\n\n    ConnRef *connRef668 = new ConnRef(router, 668);\n    ConnEnd srcPt668(Point(1770.12835649098, 1597.106854917126), 2);\n    connRef668->setSourceEndpoint(srcPt668);\n    ConnEnd dstPt668(Point(1770.12835649098, 1647.106854917126), 1);\n    connRef668->setDestEndpoint(dstPt668);\n    connRef668->setRoutingType((ConnType)2);\n\n    ConnRef *connRef669 = new ConnRef(router, 669);\n    ConnEnd srcPt669(Point(1943.12835649298, 1597.106854917126), 2);\n    connRef669->setSourceEndpoint(srcPt669);\n    ConnEnd dstPt669(Point(1943.12835649298, 1647.106854917126), 1);\n    connRef669->setDestEndpoint(dstPt669);\n    connRef669->setRoutingType((ConnType)2);\n\n    ConnRef *connRef670 = new ConnRef(router, 670);\n    ConnEnd srcPt670(Point(-468.87164351602, -666.9812403239691), 1);\n    connRef670->setSourceEndpoint(srcPt670);\n    ConnEnd dstPt670(Point(-468.87164351602, -716.9812403239691), 2);\n    connRef670->setDestEndpoint(dstPt670);\n    connRef670->setRoutingType((ConnType)2);\n\n    ConnRef *connRef671 = new ConnRef(router, 671);\n    ConnEnd srcPt671(Point(361.62835648698, 809.8568549161259), 1);\n    connRef671->setSourceEndpoint(srcPt671);\n    ConnEnd dstPt671(Point(361.62835648698, 759.8568549161259), 2);\n    connRef671->setDestEndpoint(dstPt671);\n    connRef671->setRoutingType((ConnType)2);\n\n    ConnRef *connRef672 = new ConnRef(router, 672);\n    ConnEnd srcPt672(Point(328.62835648698, 1214.856854916126), 1);\n    connRef672->setSourceEndpoint(srcPt672);\n    ConnEnd dstPt672(Point(328.62835648698, 1164.856854916126), 2);\n    connRef672->setDestEndpoint(dstPt672);\n    connRef672->setRoutingType((ConnType)2);\n\n    ConnRef *connRef673 = new ConnRef(router, 673);\n    ConnEnd srcPt673(Point(1061.914070774694, 886.8568549171259), 4);\n    connRef673->setSourceEndpoint(srcPt673);\n    ConnEnd dstPt673(Point(1003.914070774694, 886.8568549171259), 8);\n    connRef673->setDestEndpoint(dstPt673);\n    connRef673->setRoutingType((ConnType)2);\n\n    ConnRef *connRef674 = new ConnRef(router, 674);\n    ConnEnd srcPt674(Point(1627.12835648998, -668.4098117525407), 2);\n    connRef674->setSourceEndpoint(srcPt674);\n    ConnEnd dstPt674(Point(1627.12835648998, -618.4098117525407), 1);\n    connRef674->setDestEndpoint(dstPt674);\n    connRef674->setRoutingType((ConnType)2);\n\n    ConnRef *connRef675 = new ConnRef(router, 675);\n    ConnEnd srcPt675(Point(1803.12835649098, -608.5348117525407), 2);\n    connRef675->setSourceEndpoint(srcPt675);\n    ConnEnd dstPt675(Point(1803.12835649098, -558.5348117525407), 1);\n    connRef675->setDestEndpoint(dstPt675);\n    connRef675->setRoutingType((ConnType)2);\n\n    ConnRef *connRef676 = new ConnRef(router, 676);\n    ConnEnd srcPt676(Point(460.62835648698, -787.9812403239691), 2);\n    connRef676->setSourceEndpoint(srcPt676);\n    ConnEnd dstPt676(Point(460.62835648698, -737.9812403239691), 1);\n    connRef676->setDestEndpoint(dstPt676);\n    connRef676->setRoutingType((ConnType)2);\n\n    ConnRef *connRef677 = new ConnRef(router, 677);\n    ConnEnd srcPt677(Point(732.62835648798, -857.4098117525407), 2);\n    connRef677->setSourceEndpoint(srcPt677);\n    ConnEnd dstPt677(Point(732.62835648798, -807.4098117525407), 1);\n    connRef677->setDestEndpoint(dstPt677);\n    connRef677->setRoutingType((ConnType)2);\n\n    ConnRef *connRef678 = new ConnRef(router, 678);\n    ConnEnd srcPt678(Point(732.62835648798, -731.4098117525407), 2);\n    connRef678->setSourceEndpoint(srcPt678);\n    ConnEnd dstPt678(Point(732.62835648798, -681.4098117525407), 1);\n    connRef678->setDestEndpoint(dstPt678);\n    connRef678->setRoutingType((ConnType)2);\n\n    ConnRef *connRef679 = new ConnRef(router, 679);\n    ConnEnd srcPt679(Point(1040.914070774694, -464.4098117525406), 4);\n    connRef679->setSourceEndpoint(srcPt679);\n    ConnEnd dstPt679(Point(982.9140707746942, -464.4098117525406), 8);\n    connRef679->setDestEndpoint(dstPt679);\n    connRef679->setRoutingType((ConnType)2);\n\n    ConnRef *connRef680 = new ConnRef(router, 680);\n    ConnEnd srcPt680(Point(1231.12835648898, -608.5348117525407), 2);\n    connRef680->setSourceEndpoint(srcPt680);\n    ConnEnd dstPt680(Point(1231.12835648898, -558.5348117525407), 1);\n    connRef680->setDestEndpoint(dstPt680);\n    connRef680->setRoutingType((ConnType)2);\n\n    ConnRef *connRef681 = new ConnRef(router, 681);\n    ConnEnd srcPt681(Point(181.62835648698, -76.40981175154064), 1);\n    connRef681->setSourceEndpoint(srcPt681);\n    ConnEnd dstPt681(Point(181.62835648698, -126.4098117515406), 2);\n    connRef681->setDestEndpoint(dstPt681);\n    connRef681->setRoutingType((ConnType)2);\n\n    ConnRef *connRef682 = new ConnRef(router, 682);\n    ConnEnd srcPt682(Point(666.62835648798, -70.40981175154064), 2);\n    connRef682->setSourceEndpoint(srcPt682);\n    ConnEnd dstPt682(Point(666.62835648798, -20.40981175154064), 1);\n    connRef682->setDestEndpoint(dstPt682);\n    connRef682->setRoutingType((ConnType)2);\n\n    ConnRef *connRef683 = new ConnRef(router, 683);\n    ConnEnd srcPt683(Point(911.62835648898, 371.7568549161261), 2);\n    connRef683->setSourceEndpoint(srcPt683);\n    ConnEnd dstPt683(Point(911.62835648898, 421.7568549161261), 1);\n    connRef683->setDestEndpoint(dstPt683);\n    connRef683->setRoutingType((ConnType)2);\n\n    ConnRef *connRef684 = new ConnRef(router, 684);\n    ConnEnd srcPt684(Point(493.62835648698, 371.7568549161261), 2);\n    connRef684->setSourceEndpoint(srcPt684);\n    ConnEnd dstPt684(Point(493.62835648698, 421.7568549161261), 1);\n    connRef684->setDestEndpoint(dstPt684);\n    connRef684->setRoutingType((ConnType)2);\n\n    ConnRef *connRef685 = new ConnRef(router, 685);\n    ConnEnd srcPt685(Point(101.62835648598, 1113.856854916126), 1);\n    connRef685->setSourceEndpoint(srcPt685);\n    ConnEnd dstPt685(Point(101.62835648598, 1063.856854916126), 2);\n    connRef685->setDestEndpoint(dstPt685);\n    connRef685->setRoutingType((ConnType)2);\n\n    ConnRef *connRef686 = new ConnRef(router, 686);\n    ConnEnd srcPt686(Point(31.62835648497997, -608.5348117525407), 2);\n    connRef686->setSourceEndpoint(srcPt686);\n    ConnEnd dstPt686(Point(31.62835648497997, -558.5348117525407), 1);\n    connRef686->setDestEndpoint(dstPt686);\n    connRef686->setRoutingType((ConnType)2);\n\n    ConnRef *connRef687 = new ConnRef(router, 687);\n    ConnEnd srcPt687(Point(1558.12835648898, 585.6568549161261), 2);\n    connRef687->setSourceEndpoint(srcPt687);\n    ConnEnd dstPt687(Point(1558.12835648898, 635.6568549161261), 1);\n    connRef687->setDestEndpoint(dstPt687);\n    connRef687->setRoutingType((ConnType)2);\n\n    ConnRef *connRef688 = new ConnRef(router, 688);\n    ConnEnd srcPt688(Point(1737.12835649098, 585.6568549161261), 2);\n    connRef688->setSourceEndpoint(srcPt688);\n    ConnEnd dstPt688(Point(1737.12835649098, 635.6568549161261), 1);\n    connRef688->setDestEndpoint(dstPt688);\n    connRef688->setRoutingType((ConnType)2);\n\n    ConnRef *connRef689 = new ConnRef(router, 689);\n    ConnEnd srcPt689(Point(2233.795023162646, 564.6568549161261), 2);\n    connRef689->setSourceEndpoint(srcPt689);\n    ConnEnd dstPt689(Point(2233.795023162646, 614.6568549161261), 1);\n    connRef689->setDestEndpoint(dstPt689);\n    connRef689->setRoutingType((ConnType)2);\n\n    ConnRef *connRef690 = new ConnRef(router, 690);\n    ConnEnd srcPt690(Point(2083.795023160646, 585.6568549161261), 2);\n    connRef690->setSourceEndpoint(srcPt690);\n    ConnEnd dstPt690(Point(2083.795023160646, 635.6568549161261), 1);\n    connRef690->setDestEndpoint(dstPt690);\n    connRef690->setRoutingType((ConnType)2);\n\n    ConnRef *connRef691 = new ConnRef(router, 691);\n    ConnEnd srcPt691(Point(2233.795023162646, 706.6568549161261), 1);\n    connRef691->setSourceEndpoint(srcPt691);\n    ConnEnd dstPt691(Point(2233.795023162646, 656.6568549161261), 2);\n    connRef691->setDestEndpoint(dstPt691);\n    connRef691->setRoutingType((ConnType)2);\n\n    ConnRef *connRef692 = new ConnRef(router, 692);\n    ConnEnd srcPt692(Point(1737.12835649098, 311.2568549161261), 2);\n    connRef692->setSourceEndpoint(srcPt692);\n    ConnEnd dstPt692(Point(1737.12835649098, 361.2568549161261), 1);\n    connRef692->setDestEndpoint(dstPt692);\n    connRef692->setRoutingType((ConnType)2);\n\n    ConnRef *connRef693 = new ConnRef(router, 693);\n    ConnEnd srcPt693(Point(1627.12835648998, -547.4098117525407), 2);\n    connRef693->setSourceEndpoint(srcPt693);\n    ConnEnd dstPt693(Point(1627.12835648998, -497.4098117525407), 1);\n    connRef693->setDestEndpoint(dstPt693);\n    connRef693->setRoutingType((ConnType)2);\n\n    ConnRef *connRef694 = new ConnRef(router, 694);\n    ConnEnd srcPt694(Point(-125.87164351502, -877.4098117525407), 15);\n    connRef694->setSourceEndpoint(srcPt694);\n    ConnEnd dstPt694(Point(-662.12164351602, -876.9098117525407), 8);\n    connRef694->setDestEndpoint(dstPt694);\n    connRef694->setRoutingType((ConnType)2);\n\n    ConnRef *connRef695 = new ConnRef(router, 695);\n    ConnEnd srcPt695(Point(-1006.12164351602, -126.4098117515406), 15);\n    connRef695->setSourceEndpoint(srcPt695);\n    ConnEnd dstPt695(Point(-1005.62164351602, 280.7568549161261), 1);\n    connRef695->setDestEndpoint(dstPt695);\n    connRef695->setRoutingType((ConnType)2);\n\n    ConnRef *connRef696 = new ConnRef(router, 696);\n    ConnEnd srcPt696(Point(2046.795023159646, -298.4098117515406), 15);\n    connRef696->setSourceEndpoint(srcPt696);\n    ConnEnd dstPt696(Point(2035.795023161646, -369.9098117525406), 4);\n    connRef696->setDestEndpoint(dstPt696);\n    connRef696->setRoutingType((ConnType)2);\n\n    ConnRef *connRef697 = new ConnRef(router, 697);\n    ConnEnd srcPt697(Point(2046.795023159646, 1647.106854917126), 15);\n    connRef697->setSourceEndpoint(srcPt697);\n    ConnEnd dstPt697(Point(2035.295023161646, 1575.606854916126), 4);\n    connRef697->setDestEndpoint(dstPt697);\n    connRef697->setRoutingType((ConnType)2);\n\n    ConnRef *connRef698 = new ConnRef(router, 698);\n    ConnEnd srcPt698(Point(-1006.12164351602, -431.4098117525406), 15);\n    connRef698->setSourceEndpoint(srcPt698);\n    ConnEnd dstPt698(Point(-1109.62164351702, -152.4098117515406), 1);\n    connRef698->setDestEndpoint(dstPt698);\n    connRef698->setRoutingType((ConnType)2);\n#endif\n\n    router->processTransaction();\n    router->outputDiagram(\"output/checkpointNudging3\");\n    bool overlap = router->existsOrthogonalSegmentOverlap();\n    delete router;\n    return (overlap) ? 1 : 0;\n};\n"
  },
  {
    "path": "cola/libavoid/tests/checkpoints01.cpp",
    "content": "#include \"libavoid/libavoid.h\"\nusing namespace Avoid;\nint main(void) {\n    Router *router = new Router(OrthogonalRouting);\n    router->setRoutingPenalty((PenaltyType)0, 50);\n    router->setRoutingPenalty((PenaltyType)1, 0);\n    router->setRoutingPenalty((PenaltyType)2, 0);\n    router->setRoutingPenalty((PenaltyType)3, 4000);\n    router->setRoutingPenalty((PenaltyType)4, 105);\n    router->setRoutingParameter(idealNudgingDistance, 25);\n    Rectangle rect478845150(Point(50695, 51070), Point(50705, 51080));\n    JunctionRef *junctionRef478845150 = new JunctionRef(router, \n\t\t    Point(50700, 51075), 478845150);\n    \n    Rectangle rect92712048(Point(51246, 50475), Point(51304, 50585));\n    new ShapeRef(router, rect92712048, 92712048);\n    Rectangle rect23127921(Point(50365, 50766), Point(50485, 50834));\n    new ShapeRef(router, rect23127921, 23127921);\n    Rectangle rect159957148(Point(51740, 50891), Point(51860, 50959));\n    new ShapeRef(router, rect159957148, 159957148);\n    Rectangle rect1350214(Point(50375, 51015), Point(50625, 51135));\n    new ShapeRef(router, rect1350214, 1350214);\n    Rectangle rect247197258(Point(50265, 51046), Point(50375, 51104));\n    new ShapeRef(router, rect247197258, 247197258);\n    Rectangle rect281096654(Point(50700, 50390), Point(51000, 50610));\n    new ShapeRef(router, rect281096654, 281096654);\n    ConnEnd srcPt342420237(Point(50425, 50800), 15);\n    ConnEnd dstPt342420237(Point(50710, 50450), 4);\n    new ConnRef(router, srcPt342420237, dstPt342420237, 342420237);\n    ConnEnd srcPt352019675(Point(50990, 50500), 8);\n    ConnEnd dstPt352019675(junctionRef478845150);\n    //ConnEnd dstPt352019675(Point(50700, 51075), 15);\n    new ConnRef(router, srcPt352019675, dstPt352019675, 352019675);\n    ConnEnd srcPt42699400(junctionRef478845150);\n    //ConnEnd srcPt42699400(Point(50700, 51075), 15);\n    ConnEnd dstPt42699400(Point(50615, 51075), 8);\n    new ConnRef(router, srcPt42699400, dstPt42699400, 42699400);\n    ConnEnd srcPt94712625(Point(50710, 50550), 4);\n    ConnEnd dstPt94712625(junctionRef478845150);\n    //ConnEnd dstPt94712625(Point(50700, 51075), 15);\n    new ConnRef(router, srcPt94712625, dstPt94712625, 94712625);\n    \n    ConnEnd srcPt92802970(Point(50990, 50450), 8);\n    ConnEnd dstPt92802970(Point(51275, 50485), 1);\n    ConnRef *conn = new ConnRef(router, srcPt92802970, dstPt92802970, 92802970);\n    std::vector<Checkpoint> checkpoints;\n    checkpoints.push_back(Point(50000, 50000));\n    checkpoints.push_back(Point(50200, 50000));\n    checkpoints.push_back(Point(50200, 50200));\n    conn->setRoutingCheckpoints(checkpoints);\n    \n    ConnEnd srcPt716502036(Point(50710, 50500), 4);\n    ConnEnd dstPt716502036(Point(51800, 50925), 15);\n    new ConnRef(router, srcPt716502036, dstPt716502036, 716502036);\n    router->processTransaction();\n    router->outputDiagram(\"output/checkpoints01-1\");\n    router->moveJunction(junctionRef478845150, 585, 0);\n    router->processTransaction();\n    router->outputDiagram(\"output/checkpoints01-2\");\n    delete router;\n    return 0;\n};\n"
  },
  {
    "path": "cola/libavoid/tests/checkpoints02.cpp",
    "content": "// This is a regression test checking for a problem where orthogonal c-bends \n// due to checkpoints were being incorrectly limited in one dimension as if \n// they were bending around an obstacle. \n\n#include <cmath>\n\n#include \"libavoid/libavoid.h\"\nusing namespace Avoid;\nint main(void) {\n    Router *router = new Router(OrthogonalRouting);\n    router->setRoutingParameter((RoutingParameter)0, 50);\n    router->setRoutingParameter((RoutingParameter)1, 0);\n    router->setRoutingParameter((RoutingParameter)2, 0);\n    router->setRoutingParameter((RoutingParameter)3, 4000);\n    router->setRoutingParameter((RoutingParameter)4, 0);\n    router->setRoutingParameter((RoutingParameter)5, 100);\n    router->setRoutingParameter((RoutingParameter)6, 0);\n    router->setRoutingParameter((RoutingParameter)7, 4);\n    router->setRoutingOption((RoutingOption)0, true);\n    router->setRoutingOption((RoutingOption)1, true);\n    router->setRoutingOption((RoutingOption)2, false);\n    router->setRoutingOption((RoutingOption)3, false);\n    \n    Polygon poly5(4);\n    poly5.ps[0] = Point(365.3425124847556, 152.0752314071785);\n    poly5.ps[1] = Point(365.3425124847556, 214.0752314071785);\n    poly5.ps[2] = Point(303.3425124847556, 214.0752314071785);\n    poly5.ps[3] = Point(303.3425124847556, 152.0752314071785);\n    new ShapeRef(router, poly5, 5);\n    \n    Polygon poly7(4);\n    poly7.ps[0] = Point(365.3425124847556, 24.07523140617849);\n    poly7.ps[1] = Point(365.3425124847556, 86.07523140617849);\n    poly7.ps[2] = Point(303.3425124847556, 86.07523140617849);\n    poly7.ps[3] = Point(303.3425124847556, 24.07523140617849);\n    new ShapeRef(router, poly7, 7);\n\n    Polygon poly8(4);\n    poly8.ps[0] = Point(541.6758458190889, 24.07523140617849);\n    poly8.ps[1] = Point(541.6758458190889, 44.07523140617849);\n    poly8.ps[2] = Point(509.6758458190889, 44.07523140617849);\n    poly8.ps[3] = Point(509.6758458190889, 24.07523140617849);\n    new ShapeRef(router, poly8, 8);\n\n    Polygon poly10(4);\n    poly10.ps[0] = Point(541.6758458190889, 66.07523140617849);\n    poly10.ps[1] = Point(541.6758458190889, 86.07523140617849);\n    poly10.ps[2] = Point(509.6758458190889, 86.07523140617849);\n    poly10.ps[3] = Point(509.6758458190889, 66.07523140617849);\n    new ShapeRef(router, poly10, 10);\n\n    Polygon poly61(4);\n    poly61.ps[0] = Point(420.3425124847556, 101.0752314061785);\n    poly61.ps[1] = Point(420.3425124847556, 141.0752314061785);\n    poly61.ps[2] = Point(344.3425124847556, 141.0752314061785);\n    poly61.ps[3] = Point(344.3425124847556, 101.0752314061785);\n    new ShapeRef(router, poly61, 61);\n\n    Polygon poly92(4);\n    poly92.ps[0] = Point(563.5758458190888, 34.07523140617849);\n    poly92.ps[1] = Point(563.5758458190888, 76.07523140617849);\n    poly92.ps[2] = Point(487.7758458190889, 76.07523140617849);\n    poly92.ps[3] = Point(487.7758458190889, 34.07523140617849);\n    new ShapeRef(router, poly92, 92);\n\n    ConnRef *connRef109 = new ConnRef(router, 109);\n    ConnEnd srcPt109(Point(510.6758458190889, 34.07523140617849), 4);\n    connRef109->setSourceEndpoint(srcPt109);\n    ConnEnd dstPt109(Point(334.3425124847556, 183.0752314071785), 15);\n    connRef109->setDestEndpoint(dstPt109);\n    connRef109->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints109(1);\n    checkpoints109[0] = Checkpoint(Point(487.6758458190889, 55.07523140617849), (ConnDirFlags) 15, (ConnDirFlags) 4);\n    connRef109->setRoutingCheckpoints(checkpoints109);\n\n    ConnRef *connRef110 = new ConnRef(router, 110);\n    ConnEnd srcPt110(Point(510.6758458190889, 76.07523140617849), 4);\n    connRef110->setSourceEndpoint(srcPt110);\n    ConnEnd dstPt110(Point(334.3425124847556, 183.0752314071785), 15);\n    connRef110->setDestEndpoint(dstPt110);\n    connRef110->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints110(1);\n    checkpoints110[0] = Checkpoint(Point(487.6758458190889, 55.07523140617849), (ConnDirFlags) 15, (ConnDirFlags) 4);\n    connRef110->setRoutingCheckpoints(checkpoints110);\n\n    router->processTransaction();\n    router->outputDiagram(\"output/checkpoints02\");\n\n    bool succeeded = true;\n    double checkpointY = 55.07523140617849;\n    Avoid::PolyLine route109 = connRef109->displayRoute();\n    if (fabs(route109.ps[route109.size() - 3].y - checkpointY) < 2)\n    {\n        succeeded = false;\n    }\n\n    Avoid::PolyLine route110 = connRef110->displayRoute();\n    if (fabs(route110.ps[route110.size() - 3].y - checkpointY) < 2)\n    {\n        succeeded = false;\n    }\n\n    delete router;\n    return (succeeded) ? 0 : 1;\n};\n"
  },
  {
    "path": "cola/libavoid/tests/checkpoints03.cpp",
    "content": "// This is a regression test for a problem where free segments slightly offset\n// from effectively fixed segments going through a checkpoint did not get \n// aligned.\n#include <cmath>\n#include \"libavoid/libavoid.h\"\nusing namespace Avoid;\nint main(void) {\n    Router *router = new Router(\n            PolyLineRouting | OrthogonalRouting);\n    router->setRoutingParameter((RoutingParameter)0, 50);\n    router->setRoutingParameter((RoutingParameter)1, 0);\n    router->setRoutingParameter((RoutingParameter)2, 0);\n    router->setRoutingParameter((RoutingParameter)3, 4000);\n    router->setRoutingParameter((RoutingParameter)4, 0);\n    router->setRoutingParameter((RoutingParameter)5, 100);\n    router->setRoutingParameter((RoutingParameter)6, 0);\n    router->setRoutingParameter((RoutingParameter)7, 4);\n    router->setRoutingOption((RoutingOption)0, true);\n    router->setRoutingOption((RoutingOption)1, true);\n    router->setRoutingOption((RoutingOption)2, false);\n    router->setRoutingOption((RoutingOption)3, false);\n\n    Polygon poly41(4);\n    poly41.ps[0] = Point(918.6758458220888, 441.0752314081785);\n    poly41.ps[1] = Point(918.6758458220888, 503.0752314081785);\n    poly41.ps[2] = Point(856.6758458220888, 503.0752314081785);\n    poly41.ps[3] = Point(856.6758458220888, 441.0752314081785);\n    new ShapeRef(router, poly41, 41);\n\n\n    Polygon poly43(4);\n    poly43.ps[0] = Point(710.6758458200889, 441.0752314081785);\n    poly43.ps[1] = Point(710.6758458200889, 461.0752314081785);\n    poly43.ps[2] = Point(678.6758458200889, 461.0752314081785);\n    poly43.ps[3] = Point(678.6758458200889, 441.0752314081785);\n    new ShapeRef(router, poly43, 43);\n\n    Polygon poly44(4);\n    poly44.ps[0] = Point(710.6758458200889, 483.0752314081785);\n    poly44.ps[1] = Point(710.6758458200889, 503.0752314081785);\n    poly44.ps[2] = Point(678.6758458200889, 503.0752314081785);\n    poly44.ps[3] = Point(678.6758458200889, 483.0752314081785);\n    new ShapeRef(router, poly44, 44);\n\n    ConnRef *connRef149 = new ConnRef(router, 149);\n    ConnEnd srcPt149(Point(709.6758458200889, 451.0752314081785), 8);\n    connRef149->setSourceEndpoint(srcPt149);\n    ConnEnd dstPt149(Point(887.6758458220888, 472.0752314081786), 15);\n    connRef149->setDestEndpoint(dstPt149);\n    connRef149->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints149(1);\n    checkpoints149[0] = Checkpoint(Point(732.6758458200889, 472.0752314081785), (ConnDirFlags) 15, (ConnDirFlags) 8);\n    connRef149->setRoutingCheckpoints(checkpoints149);\n\n    ConnRef *connRef150 = new ConnRef(router, 150);\n    ConnEnd srcPt150(Point(709.6758458200889, 493.0752314081785), 8);\n    connRef150->setSourceEndpoint(srcPt150);\n    ConnEnd dstPt150(Point(887.6758458220888, 472.0752314081786), 15);\n    connRef150->setDestEndpoint(dstPt150);\n    connRef150->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints150(1);\n    checkpoints150[0] = Checkpoint(Point(732.6758458200889, 472.0752314081785), (ConnDirFlags) 15, (ConnDirFlags) 8);\n    connRef150->setRoutingCheckpoints(checkpoints150);\n\n    router->processTransaction();\n    router->outputDiagram(\"output/checkpoints03\");\n\n    bool succeeded = true;\n    Avoid::PolyLine route149 = connRef149->displayRoute();\n    Avoid::PolyLine route150 = connRef150->displayRoute();\n    if (route149.size() > 4 || route150.size() > 4)\n    {\n\t// Five segments weren't merged into three.  The segments in the shape\n\t// on right weren't shifted to align with the segments going through\n\t// the checkpoint.\n\tsucceeded = false;\n    }\n    if (succeeded == true)\n    {\n\t    // The segments were merged by were not centred around the \n\t    // checkpoint.\n\t    double checkpointY = 472.0752314081785;\n\t    if (fabs(route149.ps[route149.size() - 1].y - checkpointY) < 2)\n\t    {\n\t\tsucceeded = false;\n\t    }\n\n\t    if (fabs(route150.ps[route150.size() - 1].y - checkpointY) < 2)\n\t    {\n\t\tsucceeded = false;\n\t    }\n    }\n    delete router;\n    return (succeeded) ? 0 : 1;\n};\n\n"
  },
  {
    "path": "cola/libavoid/tests/complex.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libavoid - Fast, Incremental, Object-avoiding Line Router\n * Copyright (C) 2004-2007  Michael Wybrow <mjwybrow@users.sourceforge.net>\n * Copyright (C) 2009  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * Licensees holding a valid commercial license may use this file in\n * accordance with the commercial license agreement provided with the \n * library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  \n *\n * Author(s):   Michael Wybrow <mjwybrow@users.sourceforge.net>\n*/\n\n#include \"libavoid/libavoid.h\"\n\n    \n\nstatic void connCallback(void *ptr)\n{\n    Avoid::ConnRef *connRef = (Avoid::ConnRef *) ptr; \n\n    printf(\"Connector %u needs rerouting!\\n\", connRef->id());\n\n    const Avoid::PolyLine& route = connRef->route();\n    printf(\"New path: \");\n    for (size_t i = 0; i < route.ps.size(); ++i) \n    {\n        printf(\"%s(%f, %f)\", (i > 0) ? \"-\" : \"\", \n                route.ps[i].x, route.ps[i].y);\n    }\n    printf(\"\\n\");\n}\n\n\nint main(void)\n{\n    Avoid::Router *router = new Avoid::Router(Avoid::OrthogonalRouting |\n            Avoid::PolyLineRouting);\n    \n    Avoid::Point srcPt(1.2, 0.5);\n    Avoid::Point dstPt(1.5, 4);\n    Avoid::ConnRef *connRef = new Avoid::ConnRef(router, srcPt, dstPt);\n    connRef->setCallback(connCallback, connRef);\n    // Force inital callback:\n    router->processTransaction();\n\n    printf(\"\\nAdding a shape.\\n\");\n    // Create the ShapeRef:\n    Avoid::Polygon shapePoly(3);\n    shapePoly.ps[0] = Avoid::Point(1, 1);\n    shapePoly.ps[1] = Avoid::Point(2.5, 1.5);\n    shapePoly.ps[2] = Avoid::Point(1.5, 2.5);\n    Avoid::ShapeRef *shapeRef = new Avoid::ShapeRef(router, shapePoly);\n    router->processTransaction();\n\n    printf(\"\\nShifting endpoint.\\n\");\n    Avoid::Point dstPt2(6, 4.5);\n    connRef->setDestEndpoint(dstPt2);\n    // It's expected you know the connector needs rerouting, so the callback\n    // isn't called.  You can force it to be called though, via:\n    router->processTransaction();\n\n    printf(\"\\nMoving shape right by 0.5.\\n\");\n    router->moveShape(shapeRef, 0.5, 0);\n    router->processTransaction();\n\n    printf(\"\\nChanging type to orthogonal.\\n\");\n    connRef->setRoutingType(Avoid::ConnType_Orthogonal);\n    router->processTransaction();\n\n    printf(\"\\nChanging type back to polyline.\\n\");\n    connRef->setRoutingType(Avoid::ConnType_PolyLine);\n    router->processTransaction();\n\n    router->deleteConnector(connRef);\n    printf(\"\\nRemoving shape.\\n\");\n    router->deleteShape(shapeRef);\n    router->processTransaction();\n\n    printf(\"\\nReadding shape.\\n\");\n    shapeRef = new Avoid::ShapeRef(router, shapePoly);\n    router->processTransaction();\n\n    printf(\"\\nMoving shape right by 0.5.\\n\");\n    router->moveShape(shapeRef, 0.5, 0);\n    router->processTransaction();\n\n    router->deleteShape(shapeRef);\n    shapeRef = nullptr;\n    router->processTransaction();\n\n\trouter->outputDiagram(\"output/complex\");\n    delete router;\n    return 0;\n}\n\n"
  },
  {
    "path": "cola/libavoid/tests/connectionpin01.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libavoid - Fast, Incremental, Object-avoiding Line Router\n * Copyright (C) 2010  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * Licensees holding a valid commercial license may use this file in\n * accordance with the commercial license agreement provided with the \n * library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  \n *\n * Author(s):   Michael Wybrow <mjwybrow@users.sourceforge.net>\n*/\n\n#include \"libavoid/libavoid.h\"\n#include \"libavoid/connectionpin.h\"\n\n// A testcase to check the functionality for connection pins.\n\n\nint main(void)\n{\n    Avoid::Router *router = new Avoid::Router(Avoid::OrthogonalRouting);\n    \n    // Create the ShapeRef:\n    Avoid::Rectangle shapeRect1(Avoid::Point(0, 0), Avoid::Point(10, 10));\n    Avoid::ShapeRef *shapeRef1 = new Avoid::ShapeRef(router, shapeRect1);\n\n    \n    Avoid::Rectangle shapeRect2(Avoid::Point(40, 20), Avoid::Point(50, 30));\n    Avoid::ShapeRef *shapeRef2 = new Avoid::ShapeRef(router, shapeRect2);\n\n    const unsigned int CENTRE = 1;\n    new Avoid::ShapeConnectionPin(shapeRef1, CENTRE, Avoid::ATTACH_POS_CENTRE, \n            Avoid::ATTACH_POS_CENTRE, true, 0.0, Avoid::ConnDirNone);\n    new Avoid::ShapeConnectionPin(shapeRef2, CENTRE, Avoid::ATTACH_POS_CENTRE, \n            Avoid::ATTACH_POS_CENTRE, true, 0.0, Avoid::ConnDirNone);\n\n    Avoid::ConnEnd dstEnd(shapeRef1, CENTRE);\n    Avoid::ConnEnd srcEnd(shapeRef2, CENTRE);\n    new Avoid::ConnRef(router, srcEnd, dstEnd);\n    // Force inital callback:\n    router->processTransaction();\n    router->outputDiagram(\"output/connectionpin01-1\");\n\n    router->moveShape(shapeRef2, 5, 0);\n\n    router->processTransaction();\n    router->outputDiagram(\"output/connectionpin01-2\");\n    \n    router->moveShape(shapeRef1, 0, -10);\n\n    router->processTransaction();\n    router->outputDiagram(\"output/connectionpin01-3\");\n\n    delete router;\n    return 0;\n}\n\n"
  },
  {
    "path": "cola/libavoid/tests/connectionpin02.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libavoid - Fast, Incremental, Object-avoiding Line Router\n * Copyright (C) 2010  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * Licensees holding a valid commercial license may use this file in\n * accordance with the commercial license agreement provided with the \n * library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  \n *\n * Author(s):   Michael Wybrow <mjwybrow@users.sourceforge.net>\n*/\n\n#include \"libavoid/libavoid.h\"\n#include \"libavoid/connectionpin.h\"\n\n// A testcase to check the functionality for connection pins.\n\n\nint main(void)\n{\n    Avoid::Router *router = new Avoid::Router(Avoid::OrthogonalRouting);\n    router->setRoutingPenalty((Avoid::PenaltyType)0, 50);\n    \n    // Create the ShapeRef:\n    Avoid::Rectangle shapeRect1(Avoid::Point(0, 0), Avoid::Point(10, 10));\n    Avoid::ShapeRef *shapeRef1 = new Avoid::ShapeRef(router, shapeRect1);\n    \n    Avoid::Rectangle shapeRect2(Avoid::Point(0, 90), Avoid::Point(20, 100));\n    Avoid::ShapeRef *shapeRef2 = new Avoid::ShapeRef(router, shapeRect2);\n\n    Avoid::Rectangle shapeRect3(Avoid::Point(50, 40), Avoid::Point(90, 80));\n    Avoid::ShapeRef *shapeRef3 = new Avoid::ShapeRef(router, shapeRect3);\n\n    // Create pins two input pins on the left side of shape 3.\n    const unsigned int INPUT = 1;\n    new Avoid::ShapeConnectionPin(shapeRef3, INPUT, 0.25, \n            0.4, true, 0, Avoid::ConnDirLeft);\n    new Avoid::ShapeConnectionPin(shapeRef3, INPUT, 0.75, \n            0.6, true, 0, Avoid::ConnDirLeft);\n    \n    // And centre pins for two other shapes.\n    new Avoid::ShapeConnectionPin(shapeRef1, Avoid::CONNECTIONPIN_CENTRE, \n            Avoid::ATTACH_POS_CENTRE, Avoid::ATTACH_POS_CENTRE, true, 0.0, Avoid::ConnDirNone);\n    new Avoid::ShapeConnectionPin(shapeRef2, Avoid::CONNECTIONPIN_CENTRE, \n            Avoid::ATTACH_POS_CENTRE, Avoid::ATTACH_POS_CENTRE, true, 0.0, Avoid::ConnDirNone);\n\n    // Create connectors from each shape to an input pin on shape 3.\n    Avoid::ConnEnd srcEnd(shapeRef2, Avoid::CONNECTIONPIN_CENTRE);\n    Avoid::ConnEnd dstEnd(shapeRef3, INPUT);\n    new Avoid::ConnRef(router, srcEnd, dstEnd);\n    \n    srcEnd = Avoid::ConnEnd(shapeRef1, Avoid::CONNECTIONPIN_CENTRE);\n    dstEnd = Avoid::ConnEnd(shapeRef3, INPUT);\n    new Avoid::ConnRef(router, srcEnd, dstEnd);\n\n    router->processTransaction();\n    router->outputDiagram(\"output/connectionpin02-1\");\n\n    router->moveShape(shapeRef1, 0, 90);\n    router->moveShape(shapeRef2, 0, -90);\n\n    router->processTransaction();\n    router->outputDiagram(\"output/connectionpin02-2\");\n    \n    router->moveShape(shapeRef3, 0, -60);\n\n    router->processTransaction();\n    router->outputDiagram(\"output/connectionpin02-3\");\n    \n    shapeRef3->transformConnectionPinPositions(Avoid::TransformationType_CW90);\n    /*\n    delete pin1;\n    delete pin2;\n    pin1 = new Avoid::ShapeConnectionPin(shapeRef3, INPUT, \n            Avoid::ATTACH_POS_RIGHT, 0.25, 5, Avoid::ConnDirRight);\n    pin2 = new Avoid::ShapeConnectionPin(shapeRef3, INPUT,\n            Avoid::ATTACH_POS_RIGHT, 0.75, 5, Avoid::ConnDirRight);\n    */\n    \n    router->processTransaction();\n    router->outputDiagram(\"output/connectionpin02-4\");\n    \n    shapeRef3->transformConnectionPinPositions(Avoid::TransformationType_CW180);\n    router->processTransaction();\n    router->outputDiagram(\"output/connectionpin02-5\");\n\n    shapeRef3->transformConnectionPinPositions(Avoid::TransformationType_CW270);\n    router->processTransaction();\n    router->outputDiagram(\"output/connectionpin02-6\");\n\n    shapeRef3->transformConnectionPinPositions(Avoid::TransformationType_FlipX);\n    router->processTransaction();\n    router->outputDiagram(\"output/connectionpin02-7\");\n\n    shapeRef3->transformConnectionPinPositions(Avoid::TransformationType_FlipY);\n    router->processTransaction();\n    router->outputDiagram(\"output/connectionpin02-8\");\n\n    delete router;\n    return 0;\n}\n\n"
  },
  {
    "path": "cola/libavoid/tests/connectionpin03.cpp",
    "content": "#include \"libavoid/libavoid.h\"\nusing namespace Avoid;\nint main(void) {\n    Router *router = new Router(\n            PolyLineRouting | OrthogonalRouting);\n    router->setRoutingPenalty((PenaltyType)0, 50);\n    router->setRoutingPenalty((PenaltyType)1, 0);\n    router->setRoutingPenalty((PenaltyType)2, 200);\n    router->setRoutingPenalty((PenaltyType)3, 4000);\n    router->setRoutingPenalty((PenaltyType)4, 110);\n    router->setRoutingParameter(idealNudgingDistance, 25);\n\n    Polygon poly219926511(4);\n    poly219926511.ps[0] = Point(50760, 51240);\n    poly219926511.ps[1] = Point(50760, 51260);\n    poly219926511.ps[2] = Point(50740, 51260);\n    poly219926511.ps[3] = Point(50740, 51240);\n    ShapeRef *shapeRef219926511 = new ShapeRef(router, poly219926511, 219926511);\n    new ShapeConnectionPin(shapeRef219926511, 2147483646, 0.5, 0.5, true, 0, (ConnDirFlags) 4);\n    new ShapeConnectionPin(shapeRef219926511, 2147483646, 0.5, 0.5, true, 0, (ConnDirFlags) 1);\n    new ShapeConnectionPin(shapeRef219926511, 2147483646, 0.5, 0.5, true, 0, (ConnDirFlags) 8);\n    new ShapeConnectionPin(shapeRef219926511, 2147483646, 0.5, 0.5, true, 0, (ConnDirFlags) 2);\n\n    JunctionRef *shapeRef171026375 = new JunctionRef(router, Point(51075, 51225), 171026375);\n\n    Polygon poly878674(4);\n    poly878674.ps[0] = Point(51454, 51200);\n    poly878674.ps[1] = Point(51454, 51285);\n    poly878674.ps[2] = Point(51396, 51285);\n    poly878674.ps[3] = Point(51396, 51200);\n    new ShapeRef(router, poly878674, 878674);\n\n    Polygon poly286906544(4);\n    poly286906544.ps[0] = Point(50704, 51250);\n    poly286906544.ps[1] = Point(50704, 51335);\n    poly286906544.ps[2] = Point(50646, 51335);\n    poly286906544.ps[3] = Point(50646, 51250);\n    new ShapeRef(router, poly286906544, 286906544);\n\n    Polygon poly170813081(4);\n    poly170813081.ps[0] = Point(51104, 51090);\n    poly170813081.ps[1] = Point(51104, 51175);\n    poly170813081.ps[2] = Point(51046, 51175);\n    poly170813081.ps[3] = Point(51046, 51090);\n    new ShapeRef(router, poly170813081, 170813081);\n\n    Polygon poly342721632(4);\n    poly342721632.ps[0] = Point(51910, 50946);\n    poly342721632.ps[1] = Point(51910, 51004);\n    poly342721632.ps[2] = Point(51825, 51004);\n    poly342721632.ps[3] = Point(51825, 50946);\n    new ShapeRef(router, poly342721632, 342721632);\n\n    Polygon poly223927132(4);\n    poly223927132.ps[0] = Point(51510, 51190);\n    poly223927132.ps[1] = Point(51510, 51210);\n    poly223927132.ps[2] = Point(51490, 51210);\n    poly223927132.ps[3] = Point(51490, 51190);\n    ShapeRef *shapeRef223927132 = new ShapeRef(router, poly223927132, 223927132);\n    new ShapeConnectionPin(shapeRef223927132, 2147483646, 0.5, 0.5, true, 0, (ConnDirFlags) 4);\n    new ShapeConnectionPin(shapeRef223927132, 2147483646, 0.5, 0.5, true, 0, (ConnDirFlags) 1);\n    new ShapeConnectionPin(shapeRef223927132, 2147483646, 0.5, 0.5, true, 0, (ConnDirFlags) 8);\n    new ShapeConnectionPin(shapeRef223927132, 2147483646, 0.5, 0.5, true, 0, (ConnDirFlags) 2);\n\n    JunctionRef *shapeRef102578723 = new JunctionRef(router, Point(51275, 50725), 102578723);\n\n    JunctionRef *shapeRef17922268 = new JunctionRef(router, Point(50850, 50975), 17922268);\n\n    Polygon poly11057158(4);\n    poly11057158.ps[0] = Point(51679, 51200);\n    poly11057158.ps[1] = Point(51679, 51285);\n    poly11057158.ps[2] = Point(51621, 51285);\n    poly11057158.ps[3] = Point(51621, 51200);\n    new ShapeRef(router, poly11057158, 11057158);\n\n    Polygon poly322446045(4);\n    poly322446045.ps[0] = Point(50779, 51240);\n    poly322446045.ps[1] = Point(50779, 51335);\n    poly322446045.ps[2] = Point(50721, 51335);\n    poly322446045.ps[3] = Point(50721, 51240);\n    new ShapeRef(router, poly322446045, 322446045);\n\n    Polygon poly767565928(4);\n    poly767565928.ps[0] = Point(51004, 50741);\n    poly767565928.ps[1] = Point(51004, 50826);\n    poly767565928.ps[2] = Point(50946, 50826);\n    poly767565928.ps[3] = Point(50946, 50741);\n    new ShapeRef(router, poly767565928, 767565928);\n\n    Polygon poly280939374(4);\n    poly280939374.ps[0] = Point(51085, 50971);\n    poly280939374.ps[1] = Point(51085, 51029);\n    poly280939374.ps[2] = Point(51000, 51029);\n    poly280939374.ps[3] = Point(51000, 50971);\n    new ShapeRef(router, poly280939374, 280939374);\n\n    Polygon poly630623707(4);\n    poly630623707.ps[0] = Point(51279, 50925);\n    poly630623707.ps[1] = Point(51279, 51010);\n    poly630623707.ps[2] = Point(51221, 51010);\n    poly630623707.ps[3] = Point(51221, 50925);\n    new ShapeRef(router, poly630623707, 630623707);\n\n    Polygon poly28160455(4);\n    poly28160455.ps[0] = Point(50879, 51250);\n    poly28160455.ps[1] = Point(50879, 51335);\n    poly28160455.ps[2] = Point(50821, 51335);\n    poly28160455.ps[3] = Point(50821, 51250);\n    new ShapeRef(router, poly28160455, 28160455);\n\n    Polygon poly525890448(4);\n    poly525890448.ps[0] = Point(51174, 50721);\n    poly525890448.ps[1] = Point(51174, 50779);\n    poly525890448.ps[2] = Point(51089, 50779);\n    poly525890448.ps[3] = Point(51089, 50721);\n    new ShapeRef(router, poly525890448, 525890448);\n\n    Polygon poly157182552(4);\n    poly157182552.ps[0] = Point(51529, 51190);\n    poly157182552.ps[1] = Point(51529, 51285);\n    poly157182552.ps[2] = Point(51471, 51285);\n    poly157182552.ps[3] = Point(51471, 51190);\n    new ShapeRef(router, poly157182552, 157182552);\n\n    Polygon poly799637520(4);\n    poly799637520.ps[0] = Point(50625, 50896);\n    poly799637520.ps[1] = Point(50625, 50954);\n    poly799637520.ps[2] = Point(50540, 50954);\n    poly799637520.ps[3] = Point(50540, 50896);\n    new ShapeRef(router, poly799637520, 799637520);\n\n    Polygon poly60349320(4);\n    poly60349320.ps[0] = Point(50904, 51025);\n    poly60349320.ps[1] = Point(50904, 51110);\n    poly60349320.ps[2] = Point(50846, 51110);\n    poly60349320.ps[3] = Point(50846, 51025);\n    new ShapeRef(router, poly60349320, 60349320);\n    \n    Polygon poly119851894(4);\n    poly119851894.ps[0] = Point(51179, 51225);\n    poly119851894.ps[1] = Point(51179, 51310);\n    poly119851894.ps[2] = Point(51121, 51310);\n    poly119851894.ps[3] = Point(51121, 51225);\n    new ShapeRef(router, poly119851894, 119851894);\n    \n    Polygon poly233164275(4);\n    poly233164275.ps[0] = Point(51604, 51200);\n    poly233164275.ps[1] = Point(51604, 51285);\n    poly233164275.ps[2] = Point(51546, 51285);\n    poly233164275.ps[3] = Point(51546, 51200);\n    new ShapeRef(router, poly233164275, 233164275);\n    \n    Polygon poly807558175(4);\n    poly807558175.ps[0] = Point(51604, 51000);\n    poly807558175.ps[1] = Point(51604, 51085);\n    poly807558175.ps[2] = Point(51546, 51085);\n    poly807558175.ps[3] = Point(51546, 51000);\n    new ShapeRef(router, poly807558175, 807558175);\n    \n    JunctionRef *shapeRef265539540 = new JunctionRef(router, Point(51625, 50950), 265539540);\n\n    Polygon poly108859552(4);\n    poly108859552.ps[0] = Point(51560, 50721);\n    poly108859552.ps[1] = Point(51560, 50779);\n    poly108859552.ps[2] = Point(51475, 50779);\n    poly108859552.ps[3] = Point(51475, 50721);\n    new ShapeRef(router, poly108859552, 108859552);\n    \n    Polygon poly404900496(4);\n    poly404900496.ps[0] = Point(51525, 50946);\n    poly404900496.ps[1] = Point(51525, 51004);\n    poly404900496.ps[2] = Point(51440, 51004);\n    poly404900496.ps[3] = Point(51440, 50946);\n    new ShapeRef(router, poly404900496, 404900496);\n    \n    Polygon poly620445000(4);\n    poly620445000.ps[0] = Point(51029, 51225);\n    poly620445000.ps[1] = Point(51029, 51310);\n    poly620445000.ps[2] = Point(50971, 51310);\n    poly620445000.ps[3] = Point(50971, 51225);\n    new ShapeRef(router, poly620445000, 620445000);\n    \n    ConnRef *connRef450684531 = new ConnRef(router, 450684531);\n    ConnEnd srcPt450684531(Point(51165, 50750), 8);\n    connRef450684531->setSourceEndpoint(srcPt450684531);\n    ConnEnd dstPt450684531(shapeRef102578723);\n    connRef450684531->setDestEndpoint(dstPt450684531);\n    connRef450684531->setRoutingType((ConnType)2);\n\n    ConnRef *connRef135371350 = new ConnRef(router, 135371350);\n    ConnEnd srcPt135371350(shapeRef102578723);\n    connRef135371350->setSourceEndpoint(srcPt135371350);\n    ConnEnd dstPt135371350(Point(51250, 50935), 1);\n    connRef135371350->setDestEndpoint(dstPt135371350);\n    connRef135371350->setRoutingType((ConnType)2);\n\n    ConnRef *connRef143333770 = new ConnRef(router, 143333770);\n    ConnEnd srcPt143333770(Point(51485, 50750), 4);\n    connRef143333770->setSourceEndpoint(srcPt143333770);\n    ConnEnd dstPt143333770(shapeRef102578723);\n    connRef143333770->setDestEndpoint(dstPt143333770);\n    connRef143333770->setRoutingType((ConnType)2);\n\n    ConnRef *connRef102966575 = new ConnRef(router, 102966575);\n    ConnEnd srcPt102966575(Point(50615, 50925), 8);\n    connRef102966575->setSourceEndpoint(srcPt102966575);\n    ConnEnd dstPt102966575(shapeRef17922268);\n    connRef102966575->setDestEndpoint(dstPt102966575);\n    connRef102966575->setRoutingType((ConnType)2);\n\n    ConnRef *connRef68998920 = new ConnRef(router, 68998920);\n    ConnEnd srcPt68998920(shapeRef17922268);\n    connRef68998920->setSourceEndpoint(srcPt68998920);\n    ConnEnd dstPt68998920(Point(50975, 50815), 2);\n    connRef68998920->setDestEndpoint(dstPt68998920);\n    connRef68998920->setRoutingType((ConnType)2);\n\n    ConnRef *connRef1625709 = new ConnRef(router, 1625709);\n    ConnEnd srcPt1625709(shapeRef17922268);\n    connRef1625709->setSourceEndpoint(srcPt1625709);\n    ConnEnd dstPt1625709(Point(50875, 51035), 1);\n    connRef1625709->setDestEndpoint(dstPt1625709);\n    connRef1625709->setRoutingType((ConnType)2);\n\n    ConnRef *connRef34178450 = new ConnRef(router, 34178450);\n    ConnEnd srcPt34178450(shapeRef17922268);\n    connRef34178450->setSourceEndpoint(srcPt34178450);\n    ConnEnd dstPt34178450(Point(51010, 51000), 4);\n    connRef34178450->setDestEndpoint(dstPt34178450);\n    connRef34178450->setRoutingType((ConnType)2);\n\n    ConnRef *connRef7982176 = new ConnRef(router, 7982176);\n    ConnEnd srcPt7982176(Point(50675, 51260), 1);\n    connRef7982176->setSourceEndpoint(srcPt7982176);\n    ConnEnd dstPt7982176(shapeRef219926511, 2147483646);\n    connRef7982176->setDestEndpoint(dstPt7982176);\n    connRef7982176->setRoutingType((ConnType)2);\n\n    ConnRef *connRef197177982 = new ConnRef(router, 197177982);\n    ConnEnd srcPt197177982(Point(50750, 51250), 15);\n    connRef197177982->setSourceEndpoint(srcPt197177982);\n    ConnEnd dstPt197177982(Point(50750, 51260), 1);\n    connRef197177982->setDestEndpoint(dstPt197177982);\n    connRef197177982->setRoutingType((ConnType)2);\n\n    ConnRef *connRef398066432 = new ConnRef(router, 398066432);\n    ConnEnd srcPt398066432(shapeRef219926511, 2147483646);\n    connRef398066432->setSourceEndpoint(srcPt398066432);\n    ConnEnd dstPt398066432(Point(50850, 51260), 1);\n    connRef398066432->setDestEndpoint(dstPt398066432);\n    connRef398066432->setRoutingType((ConnType)2);\n\n    ConnRef *connRef314512308 = new ConnRef(router, 314512308);\n    ConnEnd srcPt314512308(Point(51000, 51235), 1);\n    connRef314512308->setSourceEndpoint(srcPt314512308);\n    ConnEnd dstPt314512308(shapeRef171026375);\n    connRef314512308->setDestEndpoint(dstPt314512308);\n    connRef314512308->setRoutingType((ConnType)2);\n\n    ConnRef *connRef182776308 = new ConnRef(router, 182776308);\n    ConnEnd srcPt182776308(Point(51075, 51225), 15);\n    connRef182776308->setSourceEndpoint(srcPt182776308);\n    ConnEnd dstPt182776308(Point(51075, 51165), 2);\n    connRef182776308->setDestEndpoint(dstPt182776308);\n    connRef182776308->setRoutingType((ConnType)2);\n\n    ConnRef *connRef96504835 = new ConnRef(router, 96504835);\n    ConnEnd srcPt96504835(Point(51150, 51235), 1);\n    connRef96504835->setSourceEndpoint(srcPt96504835);\n    ConnEnd dstPt96504835(shapeRef171026375);\n    connRef96504835->setDestEndpoint(dstPt96504835);\n    connRef96504835->setRoutingType((ConnType)2);\n\n    ConnRef *connRef118099300 = new ConnRef(router, 118099300);\n    ConnEnd srcPt118099300(Point(51425, 51210), 1);\n    connRef118099300->setSourceEndpoint(srcPt118099300);\n    ConnEnd dstPt118099300(shapeRef223927132, 2147483646);\n    connRef118099300->setDestEndpoint(dstPt118099300);\n    connRef118099300->setRoutingType((ConnType)2);\n\n    ConnRef *connRef176080410 = new ConnRef(router, 176080410);\n    ConnEnd srcPt176080410(shapeRef223927132, 2147483646);\n    connRef176080410->setSourceEndpoint(srcPt176080410);\n    ConnEnd dstPt176080410(Point(51575, 51210), 1);\n    connRef176080410->setDestEndpoint(dstPt176080410);\n    connRef176080410->setRoutingType((ConnType)2);\n\n    ConnRef *connRef426666001 = new ConnRef(router, 426666001);\n    ConnEnd srcPt426666001(Point(51500, 51210), 1);\n    connRef426666001->setSourceEndpoint(srcPt426666001);\n    ConnEnd dstPt426666001(Point(51500, 51200), 15);\n    connRef426666001->setDestEndpoint(dstPt426666001);\n    connRef426666001->setRoutingType((ConnType)2);\n\n    ConnRef *connRef795762792 = new ConnRef(router, 795762792);\n    ConnEnd srcPt795762792(Point(51650, 51210), 1);\n    connRef795762792->setSourceEndpoint(srcPt795762792);\n    ConnEnd dstPt795762792(shapeRef223927132, 2147483646);\n    connRef795762792->setDestEndpoint(dstPt795762792);\n    connRef795762792->setRoutingType((ConnType)2);\n\n    ConnRef *connRef467016913 = new ConnRef(router, 467016913);\n    ConnEnd srcPt467016913(shapeRef265539540);\n    connRef467016913->setSourceEndpoint(srcPt467016913);\n    ConnEnd dstPt467016913(Point(51575, 51010), 1);\n    connRef467016913->setDestEndpoint(dstPt467016913);\n    connRef467016913->setRoutingType((ConnType)2);\n\n    ConnRef *connRef45740440 = new ConnRef(router, 45740440);\n    ConnEnd srcPt45740440(Point(51835, 50975), 4);\n    connRef45740440->setSourceEndpoint(srcPt45740440);\n    ConnEnd dstPt45740440(shapeRef265539540);\n    connRef45740440->setDestEndpoint(dstPt45740440);\n    connRef45740440->setRoutingType((ConnType)2);\n\n    ConnRef *connRef985644192 = new ConnRef(router, 985644192);\n    ConnEnd srcPt985644192(Point(51515, 50975), 8);\n    connRef985644192->setSourceEndpoint(srcPt985644192);\n    ConnEnd dstPt985644192(shapeRef265539540);\n    connRef985644192->setDestEndpoint(dstPt985644192);\n    connRef985644192->setRoutingType((ConnType)2);\n\n    router->processTransaction();\n    router->outputDiagram(\"output/connectionpin03\");\n    delete router;\n    return 0;\n}\n\n"
  },
  {
    "path": "cola/libavoid/tests/connendmove.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libavoid - Fast, Incremental, Object-avoiding Line Router\n * Copyright (C) 2004-2007  Michael Wybrow <mjwybrow@users.sourceforge.net>\n * Copyright (C) 2009  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * Licensees holding a valid commercial license may use this file in\n * accordance with the commercial license agreement provided with the \n * library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  \n *\n * Author(s):   Michael Wybrow <mjwybrow@users.sourceforge.net>\n*/\n\n#include \"libavoid/libavoid.h\"\n\n// Regression test to catch a bug where moving detaching a connected \n// endpoint that was scheduled to move would result in a double free.\n    \n\nint main(void)\n{\n    Avoid::Router *router = new Avoid::Router(Avoid::OrthogonalRouting);\n    \n    // Create the ShapeRef:\n    Avoid::Rectangle shapeRect1(Avoid::Point(0, 0), Avoid::Point(10, 10));\n    Avoid::ShapeRef *shapeRef1 = new Avoid::ShapeRef(router, shapeRect1);\n    const unsigned int CENTRE = 1;\n    new Avoid::ShapeConnectionPin(shapeRef1, CENTRE, \n            Avoid::ATTACH_POS_CENTRE, Avoid::ATTACH_POS_CENTRE, true, 0.0, Avoid::ConnDirNone);\n    \n    Avoid::Rectangle shapeRect2(Avoid::Point(0, 0), Avoid::Point(10, 10));\n    Avoid::ShapeRef *shapeRef2 = new Avoid::ShapeRef(router, shapeRect1);\n\n    Avoid::ConnEnd dstPt(shapeRef1, CENTRE); \n    Avoid::Point srcPt(1.5, 4);\n    Avoid::ConnRef *connRef = new Avoid::ConnRef(router, srcPt, dstPt);\n    // Force inital callback:\n    router->processTransaction();\n    router->outputDiagram(\"output/connendmove-1\");\n\n    Avoid::Point dstPt2(20, 20);\n    connRef->setDestEndpoint(dstPt2);\n    router->moveShape(shapeRef1, 0.5, 0);\n\n    router->processTransaction();\n    router->outputDiagram(\"output/connendmove-2\");\n\n    srcPt.x += 0.5;\n    connRef->setSourceEndpoint(srcPt);\n    router->moveShape(shapeRef1, 0.5, 0);\n    router->moveShape(shapeRef2, 0, 0.5);\n    \n    srcPt.x += 0.5;\n    connRef->setSourceEndpoint(srcPt);\n    router->moveShape(shapeRef1, 0.5, 0);\n    router->moveShape(shapeRef2, 0, 0.5);\n    \n    srcPt.x += 0.5;\n    connRef->setSourceEndpoint(srcPt);\n    router->moveShape(shapeRef1, 0.5, 0);\n    router->moveShape(shapeRef2, 0, 0.5);\n    \n    srcPt.x += 0.5;\n    connRef->setSourceEndpoint(srcPt);\n    router->moveShape(shapeRef1, 0.5, 0);\n    router->moveShape(shapeRef2, 0, 0.5);\n    \n    router->processTransaction();\n    router->outputDiagram(\"output/connendmove-3\");\n\n    delete router;\n    return 0;\n}\n\n"
  },
  {
    "path": "cola/libavoid/tests/corneroverlap01.cpp",
    "content": "// From cornertouching_libavoid-debug bug.\n#include \"libavoid/libavoid.h\"\nusing namespace Avoid;\nint main(void) {\n    Router *router = new Router(\n            PolyLineRouting | OrthogonalRouting);\n    router->setRoutingPenalty((PenaltyType)0, 50);\n    router->setRoutingPenalty((PenaltyType)1, 0);\n    router->setRoutingPenalty((PenaltyType)2, 0);\n    router->setRoutingPenalty((PenaltyType)3, 4000);\n    router->setRoutingPenalty((PenaltyType)4, 110);\n    router->setOrthogonalNudgeDistance(12);\n\n    Polygon poly21424960(4);\n    poly21424960.ps[0] = Point(29950, 27210);\n    poly21424960.ps[1] = Point(29950, 27290);\n    poly21424960.ps[2] = Point(29700, 27290);\n    poly21424960.ps[3] = Point(29700, 27210);\n    new ShapeRef(router, poly21424960, 21424960);\n    \n    Polygon poly435105790(4);\n    poly435105790.ps[0] = Point(29950, 27110);\n    poly435105790.ps[1] = Point(29950, 27190);\n    poly435105790.ps[2] = Point(29700, 27190);\n    poly435105790.ps[3] = Point(29700, 27110);\n    new ShapeRef(router, poly435105790, 435105790);\n    \n    Polygon poly40787191(4);\n    poly40787191.ps[0] = Point(29950, 27010);\n    poly40787191.ps[1] = Point(29950, 27090);\n    poly40787191.ps[2] = Point(29700, 27090);\n    poly40787191.ps[3] = Point(29700, 27010);\n    new ShapeRef(router, poly40787191, 40787191);\n    \n    Polygon poly76911264(4);\n    poly76911264.ps[0] = Point(29950, 26910);\n    poly76911264.ps[1] = Point(29950, 26990);\n    poly76911264.ps[2] = Point(29700, 26990);\n    poly76911264.ps[3] = Point(29700, 26910);\n    new ShapeRef(router, poly76911264, 76911264);\n    \n    Polygon poly506213376(4);\n    poly506213376.ps[0] = Point(29925, 26820);\n    poly506213376.ps[1] = Point(29925, 26880);\n    poly506213376.ps[2] = Point(29675, 26880);\n    poly506213376.ps[3] = Point(29675, 26820);\n    new ShapeRef(router, poly506213376, 506213376);\n    \n    Polygon poly134604636(4);\n    poly134604636.ps[0] = Point(29925, 26720);\n    poly134604636.ps[1] = Point(29925, 26780);\n    poly134604636.ps[2] = Point(29675, 26780);\n    poly134604636.ps[3] = Point(29675, 26720);\n    new ShapeRef(router, poly134604636, 134604636);\n    \n    Polygon poly14353632(4);\n    poly14353632.ps[0] = Point(29600, 26590);\n    poly14353632.ps[1] = Point(29600, 27660);\n    poly14353632.ps[2] = Point(28440, 27660);\n    poly14353632.ps[3] = Point(28440, 26590);\n    new ShapeRef(router, poly14353632, 14353632);\n    \n    ConnRef *connRef70269732 = new ConnRef(router, 70269732);\n    ConnEnd srcPt70269732(Point(29590, 26700), 8);\n    connRef70269732->setSourceEndpoint(srcPt70269732);\n    ConnEnd dstPt70269732(Point(29915, 26750), 8);\n    connRef70269732->setDestEndpoint(dstPt70269732);\n    connRef70269732->setRoutingType((ConnType)2);\n\n    ConnRef *connRef371572709 = new ConnRef(router, 371572709);\n    ConnEnd srcPt371572709(Point(29590, 26800), 8);\n    connRef371572709->setSourceEndpoint(srcPt371572709);\n    ConnEnd dstPt371572709(Point(29915, 26850), 8);\n    connRef371572709->setDestEndpoint(dstPt371572709);\n    connRef371572709->setRoutingType((ConnType)2);\n\n    ConnRef *connRef876797766 = new ConnRef(router, 876797766);\n    ConnEnd srcPt876797766(Point(29590, 26900), 8);\n    connRef876797766->setSourceEndpoint(srcPt876797766);\n    ConnEnd dstPt876797766(Point(29940, 26950), 8);\n    connRef876797766->setDestEndpoint(dstPt876797766);\n    connRef876797766->setRoutingType((ConnType)2);\n\n    ConnRef *connRef134423590 = new ConnRef(router, 134423590);\n    ConnEnd srcPt134423590(Point(29590, 27000), 8);\n    connRef134423590->setSourceEndpoint(srcPt134423590);\n    ConnEnd dstPt134423590(Point(29940, 27050), 8);\n    connRef134423590->setDestEndpoint(dstPt134423590);\n    connRef134423590->setRoutingType((ConnType)2);\n\n    ConnRef *connRef872586669 = new ConnRef(router, 872586669);\n    ConnEnd srcPt872586669(Point(29590, 27100), 8);\n    connRef872586669->setSourceEndpoint(srcPt872586669);\n    ConnEnd dstPt872586669(Point(29940, 27150), 8);\n    connRef872586669->setDestEndpoint(dstPt872586669);\n    connRef872586669->setRoutingType((ConnType)2);\n\n    ConnRef *connRef23601612 = new ConnRef(router, 23601612);\n    ConnEnd srcPt23601612(Point(29590, 27200), 8);\n    connRef23601612->setSourceEndpoint(srcPt23601612);\n    ConnEnd dstPt23601612(Point(29940, 27250), 8);\n    connRef23601612->setDestEndpoint(dstPt23601612);\n    connRef23601612->setRoutingType((ConnType)2);\n\n    ConnRef *connRef737483980 = new ConnRef(router, 737483980);\n    ConnEnd srcPt737483980(Point(29685, 26750), 4);\n    connRef737483980->setSourceEndpoint(srcPt737483980);\n    ConnEnd dstPt737483980(Point(29590, 26650), 8);\n    connRef737483980->setDestEndpoint(dstPt737483980);\n    connRef737483980->setRoutingType((ConnType)2);\n\n    ConnRef *connRef410784855 = new ConnRef(router, 410784855);\n    ConnEnd srcPt410784855(Point(29685, 26850), 4);\n    connRef410784855->setSourceEndpoint(srcPt410784855);\n    ConnEnd dstPt410784855(Point(29590, 26750), 8);\n    connRef410784855->setDestEndpoint(dstPt410784855);\n    connRef410784855->setRoutingType((ConnType)2);\n\n    ConnRef *connRef15771480 = new ConnRef(router, 15771480);\n    ConnEnd srcPt15771480(Point(29710, 26950), 4);\n    connRef15771480->setSourceEndpoint(srcPt15771480);\n    ConnEnd dstPt15771480(Point(29590, 26850), 8);\n    connRef15771480->setDestEndpoint(dstPt15771480);\n    connRef15771480->setRoutingType((ConnType)2);\n\n    ConnRef *connRef34657402 = new ConnRef(router, 34657402);\n    ConnEnd srcPt34657402(Point(29710, 27050), 4);\n    connRef34657402->setSourceEndpoint(srcPt34657402);\n    ConnEnd dstPt34657402(Point(29590, 26950), 8);\n    connRef34657402->setDestEndpoint(dstPt34657402);\n    connRef34657402->setRoutingType((ConnType)2);\n\n    ConnRef *connRef98191218 = new ConnRef(router, 98191218);\n    ConnEnd srcPt98191218(Point(29710, 27150), 4);\n    connRef98191218->setSourceEndpoint(srcPt98191218);\n    ConnEnd dstPt98191218(Point(29590, 27050), 8);\n    connRef98191218->setDestEndpoint(dstPt98191218);\n    connRef98191218->setRoutingType((ConnType)2);\n\n    ConnRef *connRef23433311 = new ConnRef(router, 23433311);\n    ConnEnd srcPt23433311(Point(29710, 27250), 4);\n    connRef23433311->setSourceEndpoint(srcPt23433311);\n    ConnEnd dstPt23433311(Point(29590, 27150), 8);\n    connRef23433311->setDestEndpoint(dstPt23433311);\n    connRef23433311->setRoutingType((ConnType)2);\n\n    router->processTransaction();\n    router->outputDiagram(\"output/corneroverlap01\");\n    bool touching = router->existsOrthogonalTouchingPaths();\n    delete router;\n    return (touching) ? 1 : 0;\n};\n\n\n"
  },
  {
    "path": "cola/libavoid/tests/endlessLoop01.cpp",
    "content": "#include \"libavoid/libavoid.h\"\r\n#include <sstream>\r\nusing namespace Avoid;\r\n\r\nvoid outputDiagram(Avoid::Router * router)\r\n{\r\n\tstatic int counter = 0;\r\n\tstd::ostringstream os;\r\n\tos << (++counter);\r\n\trouter->outputDiagram(os.str());\r\n}\r\n\r\nvoid test()\r\n{\r\n\t// The contents of this function can be replaced by the automatically generated test code from the debug svg file\r\n\tAvoid::ConnEnd end1_0;\r\n\tAvoid::ConnEnd end2_0;\r\n\tAvoid::Polygon poly0;\r\n\tstd::vector<Avoid::Checkpoint> checkpoints_0;\r\n\tAvoid::Router * router0 = new Avoid::Router(Avoid::OrthogonalRouting);\r\n\tAvoid::HyperedgeNewAndDeletedObjectLists newanddeletedobjects_0;\r\n\tAvoid::ConnRefList::const_iterator connit_0;\r\n\tAvoid::JunctionRefList::const_iterator junctionit_0;\r\n\trouter0->setTransactionUse(true);\r\n\trouter0->setRoutingPenalty(Avoid::segmentPenalty);\r\n\trouter0->setRoutingPenalty(Avoid::crossingPenalty);\r\n\trouter0->setRoutingPenalty(Avoid::fixedSharedPathPenalty, 9000);\r\n\trouter0->setRoutingOption(Avoid::penaliseOrthogonalSharedPathsAtConnEnds, true);\r\n\trouter0->setRoutingParameter(Avoid::idealNudgingDistance, 25);\r\n\trouter0->setRoutingOption(Avoid::improveHyperedgeRoutesMovingAddingAndDeletingJunctions, true);\r\n\r\n\tpoly0 = Avoid::Polygon(4);\r\n\tpoly0.setPoint(0, Avoid::Point(50700, 50615));\r\n\tpoly0.setPoint(1, Avoid::Point(50700, 51185));\r\n\tpoly0.setPoint(2, Avoid::Point(50365, 51185));\r\n\tpoly0.setPoint(3, Avoid::Point(50365, 50615));\r\n\tAvoid::ShapeRef * shape0_355243155 = new Avoid::ShapeRef(router0, poly0, 355243155);\r\n\tAvoid::ShapeConnectionPin * pin0_355243155_0 = new Avoid::ShapeConnectionPin(shape0_355243155, 1, 1, 0.149122807018, true, 10, 8);\r\n\tpin0_355243155_0->setExclusive(true);\r\n\tAvoid::ShapeConnectionPin * pin0_355243155_1 = new Avoid::ShapeConnectionPin(shape0_355243155, 2, 1, 0.675438596491, true, 10, 8);\r\n\tpin0_355243155_1->setExclusive(true);\r\n\tAvoid::ShapeConnectionPin * pin0_355243155_2 = new Avoid::ShapeConnectionPin(shape0_355243155, 3, 1, 0.80701754386, true, 10, 8);\r\n\tpin0_355243155_2->setExclusive(true);\r\n\tAvoid::ShapeConnectionPin * pin0_355243155_3 = new Avoid::ShapeConnectionPin(shape0_355243155, 4, 1, 0.543859649123, true, 10, 8);\r\n\tpin0_355243155_3->setExclusive(true);\r\n\tAvoid::ShapeConnectionPin * pin0_355243155_4 = new Avoid::ShapeConnectionPin(shape0_355243155, 5, 1, 0.280701754386, true, 10, 8);\r\n\tpin0_355243155_4->setExclusive(true);\r\n\tAvoid::ShapeConnectionPin * pin0_355243155_5 = new Avoid::ShapeConnectionPin(shape0_355243155, 6, 1, 0.412280701754, true, 10, 8);\r\n\tpin0_355243155_5->setExclusive(true);\r\n\tAvoid::ShapeConnectionPin * pin0_355243155_6 = new Avoid::ShapeConnectionPin(shape0_355243155, 7, 0.477611940299, 0.982456140351, true, 10, 2);\r\n\tpin0_355243155_6->setExclusive(true);\r\n\tAvoid::ShapeConnectionPin * pin0_355243155_7 = new Avoid::ShapeConnectionPin(shape0_355243155, 8, 0.253731343284, 0.982456140351, true, 10, 2);\r\n\tpin0_355243155_7->setExclusive(true);\r\n\tpoly0 = Avoid::Polygon(4);\r\n\tpoly0.setPoint(0, Avoid::Point(51060, 50816));\r\n\tpoly0.setPoint(1, Avoid::Point(51060, 50884));\r\n\tpoly0.setPoint(2, Avoid::Point(50940, 50884));\r\n\tpoly0.setPoint(3, Avoid::Point(50940, 50816));\r\n\tAvoid::ShapeRef * shape0_35177560 = new Avoid::ShapeRef(router0, poly0, 35177560);\r\n\tAvoid::ShapeConnectionPin * pin0_35177560_0 = new Avoid::ShapeConnectionPin(shape0_35177560, 1, 0.5, 0.5, true, 0, 15);\r\n\tpin0_35177560_0->setExclusive(true);\r\n\tpoly0 = Avoid::Polygon(4);\r\n\tpoly0.setPoint(0, Avoid::Point(51060, 50966));\r\n\tpoly0.setPoint(1, Avoid::Point(51060, 51034));\r\n\tpoly0.setPoint(2, Avoid::Point(50940, 51034));\r\n\tpoly0.setPoint(3, Avoid::Point(50940, 50966));\r\n\tAvoid::ShapeRef * shape0_214253640 = new Avoid::ShapeRef(router0, poly0, 214253640);\r\n\tAvoid::ShapeConnectionPin * pin0_214253640_0 = new Avoid::ShapeConnectionPin(shape0_214253640, 1, 0.5, 0.5, true, 0, 15);\r\n\tpin0_214253640_0->setExclusive(true);\r\n\tAvoid::JunctionRef * junction0_636368600 = new Avoid::JunctionRef(router0, Avoid::Point(50875, 50850), 636368600);\r\n\tAvoid::JunctionRef * junction0_503331836 = new Avoid::JunctionRef(router0, Avoid::Point(50875, 51000), 503331836);\r\n\tAvoid::JunctionRef * junction0_46074711 = new Avoid::JunctionRef(router0, Avoid::Point(50775, 51000), 46074711);\r\n\tAvoid::JunctionRef * junction0_390996481 = new Avoid::JunctionRef(router0, Avoid::Point(50775, 50850), 390996481);\r\n\tend1_0 = Avoid::ConnEnd(junction0_636368600);\r\n\tend2_0 = Avoid::ConnEnd(shape0_35177560, 1);\r\n\tAvoid::ConnRef * conn0_929108568 = new Avoid::ConnRef(router0, end1_0, end2_0, 929108568);\r\n\tend1_0 = Avoid::ConnEnd(junction0_503331836);\r\n\tend2_0 = Avoid::ConnEnd(shape0_214253640, 1);\r\n\tAvoid::ConnRef * conn0_627671070 = new Avoid::ConnRef(router0, end1_0, end2_0, 627671070);\r\n\tend1_0 = Avoid::ConnEnd(junction0_636368600);\r\n\tend2_0 = Avoid::ConnEnd(junction0_503331836);\r\n\tAvoid::ConnRef * conn0_510680660 = new Avoid::ConnRef(router0, end1_0, end2_0, 510680660);\r\n\tend1_0 = Avoid::ConnEnd(shape0_355243155, 2);\r\n\tend2_0 = Avoid::ConnEnd(junction0_46074711);\r\n\tAvoid::ConnRef * conn0_175131537 = new Avoid::ConnRef(router0, end1_0, end2_0, 175131537);\r\n\tend1_0 = Avoid::ConnEnd(junction0_46074711);\r\n\tend2_0 = Avoid::ConnEnd(junction0_503331836);\r\n\tAvoid::ConnRef * conn0_545568780 = new Avoid::ConnRef(router0, end1_0, end2_0, 545568780);\r\n\tend1_0 = Avoid::ConnEnd(shape0_355243155, 6);\r\n\tend2_0 = Avoid::ConnEnd(junction0_390996481);\r\n\tAvoid::ConnRef * conn0_17788857 = new Avoid::ConnRef(router0, end1_0, end2_0, 17788857);\r\n\tend1_0 = Avoid::ConnEnd(junction0_390996481);\r\n\tend2_0 = Avoid::ConnEnd(junction0_636368600);\r\n\tAvoid::ConnRef * conn0_160581511 = new Avoid::ConnRef(router0, end1_0, end2_0, 160581511);\r\n\tend1_0 = Avoid::ConnEnd(junction0_46074711);\r\n\tend2_0 = Avoid::ConnEnd(junction0_390996481);\r\n\tAvoid::ConnRef * conn0_92116728 = new Avoid::ConnRef(router0, end1_0, end2_0, 92116728);\r\n\trouter0->processTransaction();\r\n\r\n\tnewanddeletedobjects_0 = router0->newAndDeletedObjectListsFromHyperedgeImprovement();\r\n\toutputDiagram(router0);\r\n\trouter0->deleteConnector(conn0_92116728);\r\n\tconn0_92116728 = nullptr;\r\n\trouter0->deleteConnector(conn0_160581511);\r\n\tconn0_160581511 = nullptr;\r\n\trouter0->deleteConnector(conn0_17788857);\r\n\tconn0_17788857 = nullptr;\r\n\trouter0->deleteJunction(junction0_390996481);\r\n\tjunction0_390996481 = nullptr;\r\n\trouter0->deleteConnector(conn0_545568780);\r\n\tconn0_545568780 = nullptr;\r\n\trouter0->deleteConnector(conn0_175131537);\r\n\tconn0_175131537 = nullptr;\r\n\trouter0->deleteJunction(junction0_46074711);\r\n\tjunction0_46074711 = nullptr;\r\n\trouter0->deleteConnector(conn0_510680660);\r\n\tconn0_510680660 = nullptr;\r\n\trouter0->deleteConnector(conn0_627671070);\r\n\tconn0_627671070 = nullptr;\r\n\trouter0->deleteJunction(junction0_503331836);\r\n\tjunction0_503331836 = nullptr;\r\n\trouter0->deleteConnector(conn0_929108568);\r\n\tconn0_929108568 = nullptr;\r\n\trouter0->deleteJunction(junction0_636368600);\r\n\tjunction0_636368600 = nullptr;\r\n\trouter0->deleteShape(shape0_214253640);\r\n\tshape0_214253640 = nullptr;\r\n\trouter0->deleteShape(shape0_35177560);\r\n\tshape0_35177560 = nullptr;\r\n\trouter0->deleteShape(shape0_355243155);\r\n\tshape0_355243155 = nullptr;\r\n\r\n\trouter0->processTransaction();\r\n\r\n\tdelete router0;\r\n}\r\n\r\nextern \"C\" int main(void)\r\n{\r\n\ttest();\r\n\treturn 0;\r\n}\r\n"
  },
  {
    "path": "cola/libavoid/tests/example.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libavoid - Fast, Incremental, Object-avoiding Line Router\n * Copyright (C) 2004-2007  Michael Wybrow <mjwybrow@users.sourceforge.net>\n * Copyright (C) 2009  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * Licensees holding a valid commercial license may use this file in\n * accordance with the commercial license agreement provided with the \n * library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  \n *\n * Author(s):   Michael Wybrow <mjwybrow@users.sourceforge.net>\n*/\n\n#include \"libavoid/libavoid.h\"\n\n    \n\nstatic void connCallback(void *ptr)\n{\n    Avoid::ConnRef *connRef = (Avoid::ConnRef *) ptr; \n\n    printf(\"Connector %u needs rerouting!\\n\", connRef->id());\n\n    const Avoid::PolyLine& route = connRef->displayRoute();\n    printf(\"New path: \");\n    for (size_t i = 0; i < route.ps.size(); ++i) \n    {\n        printf(\"%s(%f, %f)\", (i > 0) ? \"-\" : \"\", \n                route.ps[i].x, route.ps[i].y);\n    }\n    printf(\"\\n\");\n}\n\n\nint main(void)\n{\n    Avoid::Router *router = new Avoid::Router(Avoid::PolyLineRouting);\n    \n    Avoid::Point srcPt(1.2, 0.5);\n    Avoid::Point dstPt(1.5, 4);\n    Avoid::ConnRef *connRef = new Avoid::ConnRef(router, srcPt, dstPt);\n    connRef->setCallback(connCallback, connRef);\n    // Force inital callback:\n    router->processTransaction();\n\n    printf(\"\\nAdding a shape.\\n\");\n    // Create the ShapeRef:\n    Avoid::Polygon shapePoly(3);\n    shapePoly.ps[0] = Avoid::Point(1, 1);\n    shapePoly.ps[1] = Avoid::Point(2.5, 1.5);\n    shapePoly.ps[2] = Avoid::Point(1.5, 2.5);\n    Avoid::ShapeRef *shapeRef = new Avoid::ShapeRef(router, shapePoly);\n    router->processTransaction();\n\n    printf(\"\\nShifting endpoint.\\n\");\n    Avoid::Point dstPt2(6, 4.5);\n    connRef->setDestEndpoint(dstPt2);\n    // It's expected you know the connector needs rerouting, so the callback\n    // isn't called.  You can force it to be called though, via:\n    router->processTransaction();\n\n    printf(\"\\nMoving shape right by 0.5.\\n\");\n    router->moveShape(shapeRef, 0.5, 0);\n    router->processTransaction();\n\n    router->outputDiagram(\"output/example\");\n    delete router;\n    return 0;\n}\n\n"
  },
  {
    "path": "cola/libavoid/tests/finalSegmentNudging1.cpp",
    "content": "// KEGG -> SBGN example #330\n//\n#include \"libavoid/libavoid.h\"\nusing namespace Avoid;\nint main(void) {\n    Router *router = new Router(\n            PolyLineRouting | OrthogonalRouting);\n    router->setRoutingPenalty((PenaltyType)0, 50);\n    router->setRoutingPenalty((PenaltyType)1, 0);\n    router->setRoutingPenalty((PenaltyType)2, 0);\n    router->setRoutingPenalty((PenaltyType)3, 4000);\n    router->setRoutingPenalty((PenaltyType)4, 0);\n    router->setRoutingPenalty((PenaltyType)5, 100);\n    router->setRoutingOption((RoutingOption)0, true);\n    router->setRoutingOption((RoutingOption)1, true);\n    router->setRoutingOption((RoutingOption)2, false);\n\n    /*\n    Polygon poly1(4);\n    poly1.ps[0] = Point(1337.46, 45);\n    poly1.ps[1] = Point(1337.46, 80);\n    poly1.ps[2] = Point(1028.46, 80);\n    poly1.ps[3] = Point(1028.46, 45);\n    new ShapeRef(router, poly1, 1);\n\n    Polygon poly2(4);\n    poly2.ps[0] = Point(1793.79, 126.5);\n    poly2.ps[1] = Point(1793.79, 188.5);\n    poly2.ps[2] = Point(1731.79, 188.5);\n    poly2.ps[3] = Point(1731.79, 126.5);\n    new ShapeRef(router, poly2, 2);\n\n    Polygon poly3(4);\n    poly3.ps[0] = Point(1416.86, 538.7);\n    poly3.ps[1] = Point(1416.86, 600.7);\n    poly3.ps[2] = Point(1354.86, 600.7);\n    poly3.ps[3] = Point(1354.86, 538.7);\n    new ShapeRef(router, poly3, 3);\n\n    Polygon poly4(4);\n    poly4.ps[0] = Point(2072.79, 538.7);\n    poly4.ps[1] = Point(2072.79, 600.7);\n    poly4.ps[2] = Point(2010.79, 600.7);\n    poly4.ps[3] = Point(2010.79, 538.7);\n    new ShapeRef(router, poly4, 4);\n\n    Polygon poly5(4);\n    poly5.ps[0] = Point(1594.6, 947.5);\n    poly5.ps[1] = Point(1594.6, 1009.5);\n    poly5.ps[2] = Point(1532.6, 1009.5);\n    poly5.ps[3] = Point(1532.6, 947.5);\n    new ShapeRef(router, poly5, 5);\n\n    Polygon poly6(4);\n    poly6.ps[0] = Point(641.333, 802.833);\n    poly6.ps[1] = Point(641.333, 864.833);\n    poly6.ps[2] = Point(579.333, 864.833);\n    poly6.ps[3] = Point(579.333, 802.833);\n    new ShapeRef(router, poly6, 6);\n\n    Polygon poly7(4);\n    poly7.ps[0] = Point(421.333, 2368.05);\n    poly7.ps[1] = Point(421.333, 2430.05);\n    poly7.ps[2] = Point(359.333, 2430.05);\n    poly7.ps[3] = Point(359.333, 2368.05);\n    new ShapeRef(router, poly7, 7);\n\n    Polygon poly8(4);\n    poly8.ps[0] = Point(1594.6, 2368.05);\n    poly8.ps[1] = Point(1594.6, 2430.05);\n    poly8.ps[2] = Point(1532.6, 2430.05);\n    poly8.ps[3] = Point(1532.6, 2368.05);\n    new ShapeRef(router, poly8, 8);\n\n    Polygon poly9(4);\n    poly9.ps[0] = Point(1813.79, 1347.24);\n    poly9.ps[1] = Point(1813.79, 1409.24);\n    poly9.ps[2] = Point(1751.79, 1409.24);\n    poly9.ps[3] = Point(1751.79, 1347.24);\n    new ShapeRef(router, poly9, 9);\n\n    Polygon poly10(4);\n    poly10.ps[0] = Point(1813.79, 1538.64);\n    poly10.ps[1] = Point(1813.79, 1600.64);\n    poly10.ps[2] = Point(1751.79, 1600.64);\n    poly10.ps[3] = Point(1751.79, 1538.64);\n    new ShapeRef(router, poly10, 10);\n\n    Polygon poly11(4);\n    poly11.ps[0] = Point(2072.79, 1538.64);\n    poly11.ps[1] = Point(2072.79, 1600.64);\n    poly11.ps[2] = Point(2010.79, 1600.64);\n    poly11.ps[3] = Point(2010.79, 1538.64);\n    new ShapeRef(router, poly11, 11);\n    */\n\n    Polygon poly12(4);\n    poly12.ps[0] = Point(2072.79, 1841.95);\n    poly12.ps[1] = Point(2072.79, 1903.95);\n    poly12.ps[2] = Point(2010.79, 1903.95);\n    poly12.ps[3] = Point(2010.79, 1841.95);\n    new ShapeRef(router, poly12, 12);\n\n    Polygon poly13(4);\n    poly13.ps[0] = Point(2272.79, 1841.95);\n    poly13.ps[1] = Point(2272.79, 1903.95);\n    poly13.ps[2] = Point(2210.79, 1903.95);\n    poly13.ps[3] = Point(2210.79, 1841.95);\n    new ShapeRef(router, poly13, 13);\n\n    /*\n    Polygon poly14(4);\n    poly14.ps[0] = Point(2578.71, 1841.95);\n    poly14.ps[1] = Point(2578.71, 1903.95);\n    poly14.ps[2] = Point(2516.71, 1903.95);\n    poly14.ps[3] = Point(2516.71, 1841.95);\n    new ShapeRef(router, poly14, 14);\n\n    Polygon poly15(4);\n    poly15.ps[0] = Point(2818.54, 1841.95);\n    poly15.ps[1] = Point(2818.54, 1903.95);\n    poly15.ps[2] = Point(2756.54, 1903.95);\n    poly15.ps[3] = Point(2756.54, 1841.95);\n    new ShapeRef(router, poly15, 15);\n\n    Polygon poly16(4);\n    poly16.ps[0] = Point(3150.9, 1841.95);\n    poly16.ps[1] = Point(3150.9, 1903.95);\n    poly16.ps[2] = Point(3088.9, 1903.95);\n    poly16.ps[3] = Point(3088.9, 1841.95);\n    new ShapeRef(router, poly16, 16);\n\n    Polygon poly17(4);\n    poly17.ps[0] = Point(1346.96, 281.5);\n    poly17.ps[1] = Point(1346.96, 343.5);\n    poly17.ps[2] = Point(1284.96, 343.5);\n    poly17.ps[3] = Point(1284.96, 281.5);\n    new ShapeRef(router, poly17, 17);\n\n    Polygon poly18(4);\n    poly18.ps[0] = Point(2072.79, 281.5);\n    poly18.ps[1] = Point(2072.79, 343.5);\n    poly18.ps[2] = Point(2010.79, 343.5);\n    poly18.ps[3] = Point(2010.79, 281.5);\n    new ShapeRef(router, poly18, 18);\n\n    Polygon poly19(4);\n    poly19.ps[0] = Point(3247.44, 2154.05);\n    poly19.ps[1] = Point(3247.44, 2216.05);\n    poly19.ps[2] = Point(3185.44, 2216.05);\n    poly19.ps[3] = Point(3185.44, 2154.05);\n    new ShapeRef(router, poly19, 19);\n\n    Polygon poly20(4);\n    poly20.ps[0] = Point(2578.71, 2154.05);\n    poly20.ps[1] = Point(2578.71, 2216.05);\n    poly20.ps[2] = Point(2516.71, 2216.05);\n    poly20.ps[3] = Point(2516.71, 2154.05);\n    new ShapeRef(router, poly20, 20);\n\n    Polygon poly21(4);\n    poly21.ps[0] = Point(1104.18, 2154.05);\n    poly21.ps[1] = Point(1104.18, 2216.05);\n    poly21.ps[2] = Point(1042.18, 2216.05);\n    poly21.ps[3] = Point(1042.18, 2154.05);\n    new ShapeRef(router, poly21, 21);\n\n    Polygon poly22(4);\n    poly22.ps[0] = Point(1104.18, 1409.24);\n    poly22.ps[1] = Point(1104.18, 1471.24);\n    poly22.ps[2] = Point(1042.18, 1471.24);\n    poly22.ps[3] = Point(1042.18, 1409.24);\n    new ShapeRef(router, poly22, 22);\n\n    Polygon poly23(4);\n    poly23.ps[0] = Point(354, 802.833);\n    poly23.ps[1] = Point(354, 864.833);\n    poly23.ps[2] = Point(292, 864.833);\n    poly23.ps[3] = Point(292, 802.833);\n    new ShapeRef(router, poly23, 23);\n\n    Polygon poly24(4);\n    poly24.ps[0] = Point(641.333, 1245.24);\n    poly24.ps[1] = Point(641.333, 1307.24);\n    poly24.ps[2] = Point(579.333, 1307.24);\n    poly24.ps[3] = Point(579.333, 1245.24);\n    new ShapeRef(router, poly24, 24);\n\n    Polygon poly25(4);\n    poly25.ps[0] = Point(907.358, 1245.24);\n    poly25.ps[1] = Point(907.358, 1307.24);\n    poly25.ps[2] = Point(845.358, 1307.24);\n    poly25.ps[3] = Point(845.358, 1245.24);\n    new ShapeRef(router, poly25, 25);\n\n    Polygon poly26(4);\n    poly26.ps[0] = Point(1104.18, 1245.24);\n    poly26.ps[1] = Point(1104.18, 1307.24);\n    poly26.ps[2] = Point(1042.18, 1307.24);\n    poly26.ps[3] = Point(1042.18, 1245.24);\n    new ShapeRef(router, poly26, 26);\n\n    Polygon poly27(4);\n    poly27.ps[0] = Point(1104.18, 947.5);\n    poly27.ps[1] = Point(1104.18, 1009.5);\n    poly27.ps[2] = Point(1042.18, 1009.5);\n    poly27.ps[3] = Point(1042.18, 947.5);\n    new ShapeRef(router, poly27, 27);\n\n    Polygon poly28(4);\n    poly28.ps[0] = Point(354, 344.5);\n    poly28.ps[1] = Point(354, 406.5);\n    poly28.ps[2] = Point(292, 406.5);\n    poly28.ps[3] = Point(292, 344.5);\n    new ShapeRef(router, poly28, 28);\n\n    Polygon poly29(4);\n    poly29.ps[0] = Point(2272.79, 809.75);\n    poly29.ps[1] = Point(2272.79, 871.75);\n    poly29.ps[2] = Point(2210.79, 871.75);\n    poly29.ps[3] = Point(2210.79, 809.75);\n    new ShapeRef(router, poly29, 29);\n\n    Polygon poly30(4);\n    poly30.ps[0] = Point(2578.71, 809.75);\n    poly30.ps[1] = Point(2578.71, 871.75);\n    poly30.ps[2] = Point(2516.71, 871.75);\n    poly30.ps[3] = Point(2516.71, 809.75);\n    new ShapeRef(router, poly30, 30);\n\n    Polygon poly31(4);\n    poly31.ps[0] = Point(2818.54, 809.75);\n    poly31.ps[1] = Point(2818.54, 871.75);\n    poly31.ps[2] = Point(2756.54, 871.75);\n    poly31.ps[3] = Point(2756.54, 809.75);\n    new ShapeRef(router, poly31, 31);\n\n    Polygon poly32(4);\n    poly32.ps[0] = Point(2999.99, 809.75);\n    poly32.ps[1] = Point(2999.99, 871.75);\n    poly32.ps[2] = Point(2937.99, 871.75);\n    poly32.ps[3] = Point(2937.99, 809.75);\n    new ShapeRef(router, poly32, 32);\n\n    Polygon poly33(4);\n    poly33.ps[0] = Point(2272.79, 189.875);\n    poly33.ps[1] = Point(2272.79, 251.875);\n    poly33.ps[2] = Point(2210.79, 251.875);\n    poly33.ps[3] = Point(2210.79, 189.875);\n    new ShapeRef(router, poly33, 33);\n\n    Polygon poly34(4);\n    poly34.ps[0] = Point(2578.71, 189.875);\n    poly34.ps[1] = Point(2578.71, 251.875);\n    poly34.ps[2] = Point(2516.71, 251.875);\n    poly34.ps[3] = Point(2516.71, 189.875);\n    new ShapeRef(router, poly34, 34);\n\n    Polygon poly35(4);\n    poly35.ps[0] = Point(2818.54, 189.875);\n    poly35.ps[1] = Point(2818.54, 251.875);\n    poly35.ps[2] = Point(2756.54, 251.875);\n    poly35.ps[3] = Point(2756.54, 189.875);\n    new ShapeRef(router, poly35, 35);\n\n    Polygon poly36(4);\n    poly36.ps[0] = Point(3145.24, 189.875);\n    poly36.ps[1] = Point(3145.24, 251.875);\n    poly36.ps[2] = Point(3083.24, 251.875);\n    poly36.ps[3] = Point(3083.24, 189.875);\n    new ShapeRef(router, poly36, 36);\n\n    Polygon poly37(4);\n    poly37.ps[0] = Point(2999.99, 1010.64);\n    poly37.ps[1] = Point(2999.99, 1072.64);\n    poly37.ps[2] = Point(2937.99, 1072.64);\n    poly37.ps[3] = Point(2937.99, 1010.64);\n    new ShapeRef(router, poly37, 37);\n\n    Polygon poly38(4);\n    poly38.ps[0] = Point(3145.24, 406.7);\n    poly38.ps[1] = Point(3145.24, 468.7);\n    poly38.ps[2] = Point(3083.24, 468.7);\n    poly38.ps[3] = Point(3083.24, 406.7);\n    new ShapeRef(router, poly38, 38);\n\n    Polygon poly39(4);\n    poly39.ps[0] = Point(2818.54, 406.7);\n    poly39.ps[1] = Point(2818.54, 468.7);\n    poly39.ps[2] = Point(2756.54, 468.7);\n    poly39.ps[3] = Point(2756.54, 406.7);\n    new ShapeRef(router, poly39, 39);\n\n    Polygon poly40(4);\n    poly40.ps[0] = Point(2578.71, 406.7);\n    poly40.ps[1] = Point(2578.71, 468.7);\n    poly40.ps[2] = Point(2516.71, 468.7);\n    poly40.ps[3] = Point(2516.71, 406.7);\n    new ShapeRef(router, poly40, 40);\n\n    Polygon poly41(4);\n    poly41.ps[0] = Point(1989.29, 1010.64);\n    poly41.ps[1] = Point(1989.29, 1072.64);\n    poly41.ps[2] = Point(1927.29, 1072.64);\n    poly41.ps[3] = Point(1927.29, 1010.64);\n    new ShapeRef(router, poly41, 41);\n\n    Polygon poly42(4);\n    poly42.ps[0] = Point(2272.79, 1010.64);\n    poly42.ps[1] = Point(2272.79, 1072.64);\n    poly42.ps[2] = Point(2210.79, 1072.64);\n    poly42.ps[3] = Point(2210.79, 1010.64);\n    new ShapeRef(router, poly42, 42);\n\n    Polygon poly43(4);\n    poly43.ps[0] = Point(2578.71, 1010.64);\n    poly43.ps[1] = Point(2578.71, 1072.64);\n    poly43.ps[2] = Point(2516.71, 1072.64);\n    poly43.ps[3] = Point(2516.71, 1010.64);\n    new ShapeRef(router, poly43, 43);\n\n    Polygon poly44(4);\n    poly44.ps[0] = Point(2272.79, 1538.64);\n    poly44.ps[1] = Point(2272.79, 1600.64);\n    poly44.ps[2] = Point(2210.79, 1600.64);\n    poly44.ps[3] = Point(2210.79, 1538.64);\n    new ShapeRef(router, poly44, 44);\n\n    Polygon poly45(4);\n    poly45.ps[0] = Point(2578.71, 1538.64);\n    poly45.ps[1] = Point(2578.71, 1600.64);\n    poly45.ps[2] = Point(2516.71, 1600.64);\n    poly45.ps[3] = Point(2516.71, 1538.64);\n    new ShapeRef(router, poly45, 45);\n\n    Polygon poly46(4);\n    poly46.ps[0] = Point(2272.79, 1347.24);\n    poly46.ps[1] = Point(2272.79, 1409.24);\n    poly46.ps[2] = Point(2210.79, 1409.24);\n    poly46.ps[3] = Point(2210.79, 1347.24);\n    new ShapeRef(router, poly46, 46);\n\n    Polygon poly47(4);\n    poly47.ps[0] = Point(2072.79, 1992.95);\n    poly47.ps[1] = Point(2072.79, 2054.95);\n    poly47.ps[2] = Point(2010.79, 2054.95);\n    poly47.ps[3] = Point(2010.79, 1992.95);\n    new ShapeRef(router, poly47, 47);\n\n    Polygon poly48(4);\n    poly48.ps[0] = Point(2272.79, 1992.95);\n    poly48.ps[1] = Point(2272.79, 2054.95);\n    poly48.ps[2] = Point(2210.79, 2054.95);\n    poly48.ps[3] = Point(2210.79, 1992.95);\n    new ShapeRef(router, poly48, 48);\n\n    Polygon poly49(4);\n    poly49.ps[0] = Point(2999.99, 1700.64);\n    poly49.ps[1] = Point(2999.99, 1762.64);\n    poly49.ps[2] = Point(2937.99, 1762.64);\n    poly49.ps[3] = Point(2937.99, 1700.64);\n    new ShapeRef(router, poly49, 49);\n\n    Polygon poly50(4);\n    poly50.ps[0] = Point(2766.54, 331.5);\n    poly50.ps[1] = Point(2766.54, 393.5);\n    poly50.ps[2] = Point(2704.54, 393.5);\n    poly50.ps[3] = Point(2704.54, 331.5);\n    new ShapeRef(router, poly50, 50);\n\n    Polygon poly51(4);\n    poly51.ps[0] = Point(1594.6, 2914.3);\n    poly51.ps[1] = Point(1594.6, 2976.3);\n    poly51.ps[2] = Point(1532.6, 2976.3);\n    poly51.ps[3] = Point(1532.6, 2914.3);\n    new ShapeRef(router, poly51, 51);\n\n    Polygon poly52(4);\n    poly52.ps[0] = Point(1594.6, 3382.3);\n    poly52.ps[1] = Point(1594.6, 3444.3);\n    poly52.ps[2] = Point(1532.6, 3444.3);\n    poly52.ps[3] = Point(1532.6, 3382.3);\n    new ShapeRef(router, poly52, 52);\n\n    Polygon poly53(4);\n    poly53.ps[0] = Point(641.333, 2498.3);\n    poly53.ps[1] = Point(641.333, 2560.3);\n    poly53.ps[2] = Point(579.333, 2560.3);\n    poly53.ps[3] = Point(579.333, 2498.3);\n    new ShapeRef(router, poly53, 53);\n\n    Polygon poly54(4);\n    poly54.ps[0] = Point(641.333, 2643.3);\n    poly54.ps[1] = Point(641.333, 2705.3);\n    poly54.ps[2] = Point(579.333, 2705.3);\n    poly54.ps[3] = Point(579.333, 2643.3);\n    new ShapeRef(router, poly54, 54);\n\n    Polygon poly55(4);\n    poly55.ps[0] = Point(641.333, 2914.3);\n    poly55.ps[1] = Point(641.333, 2976.3);\n    poly55.ps[2] = Point(579.333, 2976.3);\n    poly55.ps[3] = Point(579.333, 2914.3);\n    new ShapeRef(router, poly55, 55);\n\n    Polygon poly56(4);\n    poly56.ps[0] = Point(2272.79, 2914.3);\n    poly56.ps[1] = Point(2272.79, 2976.3);\n    poly56.ps[2] = Point(2210.79, 2976.3);\n    poly56.ps[3] = Point(2210.79, 2914.3);\n    new ShapeRef(router, poly56, 56);\n\n    Polygon poly57(4);\n    poly57.ps[0] = Point(2353.71, 2643.3);\n    poly57.ps[1] = Point(2353.71, 2705.3);\n    poly57.ps[2] = Point(2291.71, 2705.3);\n    poly57.ps[3] = Point(2291.71, 2643.3);\n    new ShapeRef(router, poly57, 57);\n\n    Polygon poly58(4);\n    poly58.ps[0] = Point(2578.71, 2914.3);\n    poly58.ps[1] = Point(2578.71, 2976.3);\n    poly58.ps[2] = Point(2516.71, 2976.3);\n    poly58.ps[3] = Point(2516.71, 2914.3);\n    new ShapeRef(router, poly58, 58);\n\n    Polygon poly59(4);\n    poly59.ps[0] = Point(2353.71, 2498.3);\n    poly59.ps[1] = Point(2353.71, 2560.3);\n    poly59.ps[2] = Point(2291.71, 2560.3);\n    poly59.ps[3] = Point(2291.71, 2498.3);\n    new ShapeRef(router, poly59, 59);\n\n    Polygon poly60(4);\n    poly60.ps[0] = Point(907.358, 2498.3);\n    poly60.ps[1] = Point(907.358, 2560.3);\n    poly60.ps[2] = Point(845.358, 2560.3);\n    poly60.ps[3] = Point(845.358, 2498.3);\n    new ShapeRef(router, poly60, 60);\n\n    Polygon poly61(4);\n    poly61.ps[0] = Point(907.358, 2643.3);\n    poly61.ps[1] = Point(907.358, 2705.3);\n    poly61.ps[2] = Point(845.358, 2705.3);\n    poly61.ps[3] = Point(845.358, 2643.3);\n    new ShapeRef(router, poly61, 61);\n\n    Polygon poly62(4);\n    poly62.ps[0] = Point(907.358, 2914.3);\n    poly62.ps[1] = Point(907.358, 2976.3);\n    poly62.ps[2] = Point(845.358, 2976.3);\n    poly62.ps[3] = Point(845.358, 2914.3);\n    new ShapeRef(router, poly62, 62);\n\n    Polygon poly63(4);\n    poly63.ps[0] = Point(3353.24, 2368.05);\n    poly63.ps[1] = Point(3353.24, 2430.05);\n    poly63.ps[2] = Point(3291.24, 2430.05);\n    poly63.ps[3] = Point(3291.24, 2368.05);\n    new ShapeRef(router, poly63, 63);\n\n    Polygon poly64(4);\n    poly64.ps[0] = Point(2999.99, 2266.05);\n    poly64.ps[1] = Point(2999.99, 2328.05);\n    poly64.ps[2] = Point(2937.99, 2328.05);\n    poly64.ps[3] = Point(2937.99, 2266.05);\n    new ShapeRef(router, poly64, 64);\n\n    Polygon poly65(4);\n    poly65.ps[0] = Point(3509.07, 1347.24);\n    poly65.ps[1] = Point(3509.07, 1409.24);\n    poly65.ps[2] = Point(3447.07, 1409.24);\n    poly65.ps[3] = Point(3447.07, 1347.24);\n    new ShapeRef(router, poly65, 65);\n\n    Polygon poly66(4);\n    poly66.ps[0] = Point(3509.07, 3382.3);\n    poly66.ps[1] = Point(3509.07, 3444.3);\n    poly66.ps[2] = Point(3447.07, 3444.3);\n    poly66.ps[3] = Point(3447.07, 3382.3);\n    new ShapeRef(router, poly66, 66);\n\n    Polygon poly67(4);\n    poly67.ps[0] = Point(230, 496.5);\n    poly67.ps[1] = Point(230, 528.5);\n    poly67.ps[2] = Point(210, 528.5);\n    poly67.ps[3] = Point(210, 496.5);\n    new ShapeRef(router, poly67, 67);\n\n    Polygon poly68(4);\n    poly68.ps[0] = Point(141, 632.5);\n    poly68.ps[1] = Point(141, 664.5);\n    poly68.ps[2] = Point(121, 664.5);\n    poly68.ps[3] = Point(121, 632.5);\n    new ShapeRef(router, poly68, 68);\n\n    Polygon poly69(4);\n    poly69.ps[0] = Point(556.333, 698.5);\n    poly69.ps[1] = Point(556.333, 718.5);\n    poly69.ps[2] = Point(524.333, 718.5);\n    poly69.ps[3] = Point(524.333, 698.5);\n    new ShapeRef(router, poly69, 69);\n\n    Polygon poly70(4);\n    poly70.ps[0] = Point(556.333, 823.833);\n    poly70.ps[1] = Point(556.333, 843.833);\n    poly70.ps[2] = Point(524.333, 843.833);\n    poly70.ps[3] = Point(524.333, 823.833);\n    new ShapeRef(router, poly70, 70);\n\n    Polygon poly71(4);\n    poly71.ps[0] = Point(1405.46, 692.5);\n    poly71.ps[1] = Point(1405.46, 724.5);\n    poly71.ps[2] = Point(1385.46, 724.5);\n    poly71.ps[3] = Point(1385.46, 692.5);\n    new ShapeRef(router, poly71, 71);\n\n    Polygon poly72(4);\n    poly72.ps[0] = Point(1558.46, 281.5);\n    poly72.ps[1] = Point(1558.46, 301.5);\n    poly72.ps[2] = Point(1526.46, 301.5);\n    poly72.ps[3] = Point(1526.46, 281.5);\n    new ShapeRef(router, poly72, 72);\n\n    Polygon poly73(4);\n    poly73.ps[0] = Point(1492.46, 57.5);\n    poly73.ps[1] = Point(1492.46, 231.5);\n    poly73.ps[2] = Point(1359.46, 231.5);\n    poly73.ps[3] = Point(1359.46, 57.5);\n    new ShapeRef(router, poly73, 73);\n\n    Polygon poly74(4);\n    poly74.ps[0] = Point(1958.29, 281.5);\n    poly74.ps[1] = Point(1958.29, 301.5);\n    poly74.ps[2] = Point(1926.29, 301.5);\n    poly74.ps[3] = Point(1926.29, 281.5);\n    new ShapeRef(router, poly74, 74);\n\n    Polygon poly75(4);\n    poly75.ps[0] = Point(2042.79, 767.5);\n    poly75.ps[1] = Point(2042.79, 787.5);\n    poly75.ps[2] = Point(2010.79, 787.5);\n    poly75.ps[3] = Point(2010.79, 767.5);\n    new ShapeRef(router, poly75, 75);\n\n    Polygon poly76(4);\n    poly76.ps[0] = Point(556.333, 1266.24);\n    poly76.ps[1] = Point(556.333, 1286.24);\n    poly76.ps[2] = Point(524.333, 1286.24);\n    poly76.ps[3] = Point(524.333, 1266.24);\n    new ShapeRef(router, poly76, 76);\n\n    Polygon poly77(4);\n    poly77.ps[0] = Point(727.958, 1266.24);\n    poly77.ps[1] = Point(727.958, 1286.24);\n    poly77.ps[2] = Point(695.958, 1286.24);\n    poly77.ps[3] = Point(695.958, 1266.24);\n    new ShapeRef(router, poly77, 77);\n\n    Polygon poly78(4);\n    poly78.ps[0] = Point(988.958, 1266.24);\n    poly78.ps[1] = Point(988.958, 1286.24);\n    poly78.ps[2] = Point(956.958, 1286.24);\n    poly78.ps[3] = Point(956.958, 1266.24);\n    new ShapeRef(router, poly78, 78);\n\n    Polygon poly79(4);\n    poly79.ps[0] = Point(1060.96, 1127.64);\n    poly79.ps[1] = Point(1060.96, 1159.64);\n    poly79.ps[2] = Point(1040.96, 1159.64);\n    poly79.ps[3] = Point(1040.96, 1127.64);\n    new ShapeRef(router, poly79, 79);\n\n    Polygon poly80(4);\n    poly80.ps[0] = Point(1401.86, 959.5);\n    poly80.ps[1] = Point(1401.86, 979.5);\n    poly80.ps[2] = Point(1369.86, 979.5);\n    poly80.ps[3] = Point(1369.86, 959.5);\n    new ShapeRef(router, poly80, 80);\n\n    Polygon poly81(4);\n    poly81.ps[0] = Point(1401.86, 1031.64);\n    poly81.ps[1] = Point(1401.86, 1051.64);\n    poly81.ps[2] = Point(1369.86, 1051.64);\n    poly81.ps[3] = Point(1369.86, 1031.64);\n    new ShapeRef(router, poly81, 81);\n\n    Polygon poly82(4);\n    poly82.ps[0] = Point(1401.86, 1133.64);\n    poly82.ps[1] = Point(1401.86, 1153.64);\n    poly82.ps[2] = Point(1369.86, 1153.64);\n    poly82.ps[3] = Point(1369.86, 1133.64);\n    new ShapeRef(router, poly82, 82);\n\n    Polygon poly83(4);\n    poly83.ps[0] = Point(1656.79, 1260.24);\n    poly83.ps[1] = Point(1656.79, 1292.24);\n    poly83.ps[2] = Point(1636.79, 1292.24);\n    poly83.ps[3] = Point(1636.79, 1260.24);\n    new ShapeRef(router, poly83, 83);\n\n    Polygon poly84(4);\n    poly84.ps[0] = Point(1967.87, 1581.64);\n    poly84.ps[1] = Point(1967.87, 1621.64);\n    poly84.ps[2] = Point(1891.87, 1621.64);\n    poly84.ps[3] = Point(1891.87, 1581.64);\n    new ShapeRef(router, poly84, 84);\n\n    Polygon poly85(4);\n    poly85.ps[0] = Point(1942.79, 1643.64);\n    poly85.ps[1] = Point(1942.79, 1663.64);\n    poly85.ps[2] = Point(1910.79, 1663.64);\n    poly85.ps[3] = Point(1910.79, 1643.64);\n    new ShapeRef(router, poly85, 85);\n\n    Polygon poly86(4);\n    poly86.ps[0] = Point(1973.29, 1347.24);\n    poly86.ps[1] = Point(1973.29, 1409.24);\n    poly86.ps[2] = Point(1911.29, 1409.24);\n    poly86.ps[3] = Point(1911.29, 1347.24);\n    new ShapeRef(router, poly86, 86);\n\n    Polygon poly87(4);\n    poly87.ps[0] = Point(1968.29, 1424.24);\n    poly87.ps[1] = Point(1968.29, 1456.24);\n    poly87.ps[2] = Point(1948.29, 1456.24);\n    poly87.ps[3] = Point(1948.29, 1424.24);\n    new ShapeRef(router, poly87, 87);\n\n    Polygon poly88(4);\n    poly88.ps[0] = Point(2004.87, 1914.95);\n    poly88.ps[1] = Point(2004.87, 1954.95);\n    poly88.ps[2] = Point(1948.87, 1954.95);\n    poly88.ps[3] = Point(1948.87, 1914.95);\n    new ShapeRef(router, poly88, 88);\n\n    Polygon poly89(4);\n    poly89.ps[0] = Point(2051.79, 1706.64);\n    poly89.ps[1] = Point(2051.79, 1738.64);\n    poly89.ps[2] = Point(2031.79, 1738.64);\n    poly89.ps[3] = Point(2031.79, 1706.64);\n    new ShapeRef(router, poly89, 89);\n\n    Polygon poly90(4);\n    poly90.ps[0] = Point(2187.79, 1559.64);\n    poly90.ps[1] = Point(2187.79, 1579.64);\n    poly90.ps[2] = Point(2155.79, 1579.64);\n    poly90.ps[3] = Point(2155.79, 1559.64);\n    new ShapeRef(router, poly90, 90);\n\n    Polygon poly91(4);\n    poly91.ps[0] = Point(2056.87, 1487.64);\n    poly91.ps[1] = Point(2056.87, 1527.64);\n    poly91.ps[2] = Point(2000.87, 1527.64);\n    poly91.ps[3] = Point(2000.87, 1487.64);\n    new ShapeRef(router, poly91, 91);\n\n    Polygon poly92(4);\n    poly92.ps[0] = Point(2251.79, 1424.24);\n    poly92.ps[1] = Point(2251.79, 1456.24);\n    poly92.ps[2] = Point(2231.79, 1456.24);\n    poly92.ps[3] = Point(2231.79, 1424.24);\n    new ShapeRef(router, poly92, 92);\n\n    Polygon poly93(4);\n    poly93.ps[0] = Point(2578.71, 1347.24);\n    poly93.ps[1] = Point(2578.71, 1409.24);\n    poly93.ps[2] = Point(2516.71, 1409.24);\n    poly93.ps[3] = Point(2516.71, 1347.24);\n    new ShapeRef(router, poly93, 93);\n\n    Polygon poly94(4);\n    poly94.ps[0] = Point(2493.71, 1499.44);\n    poly94.ps[1] = Point(2493.71, 1519.44);\n    poly94.ps[2] = Point(2461.71, 1519.44);\n    poly94.ps[3] = Point(2461.71, 1499.44);\n    new ShapeRef(router, poly94, 94);\n\n    Polygon poly95(4);\n    poly95.ps[0] = Point(2493.71, 1571.64);\n    poly95.ps[1] = Point(2493.71, 1591.64);\n    poly95.ps[2] = Point(2461.71, 1591.64);\n    poly95.ps[3] = Point(2461.71, 1571.64);\n    new ShapeRef(router, poly95, 95);\n    */\n\n    Polygon poly96(4);\n    poly96.ps[0] = Point(2187.79, 1862.95);\n    poly96.ps[1] = Point(2187.79, 1882.95);\n    poly96.ps[2] = Point(2155.79, 1882.95);\n    poly96.ps[3] = Point(2155.79, 1862.95);\n    new ShapeRef(router, poly96, 96);\n\n    Polygon poly97(4);\n    poly97.ps[0] = Point(2139.79, 1864.95);\n    poly97.ps[1] = Point(2139.79, 1904.95);\n    poly97.ps[2] = Point(2063.79, 1904.95);\n    poly97.ps[3] = Point(2063.79, 1864.95);\n    new ShapeRef(router, poly97, 97);\n\n    /*\n    Polygon poly98(4);\n    poly98.ps[0] = Point(2237.79, 1713.77);\n    poly98.ps[1] = Point(2237.79, 1753.77);\n    poly98.ps[2] = Point(2161.79, 1753.77);\n    poly98.ps[3] = Point(2161.79, 1713.77);\n    new ShapeRef(router, poly98, 98);\n\n    Polygon poly99(4);\n    poly99.ps[0] = Point(2493.71, 2003.95);\n    poly99.ps[1] = Point(2493.71, 2023.95);\n    poly99.ps[2] = Point(2461.71, 2023.95);\n    poly99.ps[3] = Point(2461.71, 2003.95);\n    new ShapeRef(router, poly99, 99);\n\n    Polygon poly100(4);\n    poly100.ps[0] = Point(2493.71, 2045.95);\n    poly100.ps[1] = Point(2493.71, 2065.95);\n    poly100.ps[2] = Point(2461.71, 2065.95);\n    poly100.ps[3] = Point(2461.71, 2045.95);\n    new ShapeRef(router, poly100, 100);\n\n    Polygon poly101(4);\n    poly101.ps[0] = Point(2676.54, 1802.64);\n    poly101.ps[1] = Point(2676.54, 1822.64);\n    poly101.ps[2] = Point(2644.54, 1822.64);\n    poly101.ps[3] = Point(2644.54, 1802.64);\n    new ShapeRef(router, poly101, 101);\n\n    Polygon poly102(4);\n    poly102.ps[0] = Point(2653.54, 1874.95);\n    poly102.ps[1] = Point(2653.54, 1894.95);\n    poly102.ps[2] = Point(2621.54, 1894.95);\n    poly102.ps[3] = Point(2621.54, 1874.95);\n    new ShapeRef(router, poly102, 102);\n\n    Polygon poly103(4);\n    poly103.ps[0] = Point(2751.54, 1874.95);\n    poly103.ps[1] = Point(2751.54, 1894.95);\n    poly103.ps[2] = Point(2719.54, 1894.95);\n    poly103.ps[3] = Point(2719.54, 1874.95);\n    new ShapeRef(router, poly103, 103);\n\n    Polygon poly104(4);\n    poly104.ps[0] = Point(2914.99, 1802.64);\n    poly104.ps[1] = Point(2914.99, 1822.64);\n    poly104.ps[2] = Point(2882.99, 1822.64);\n    poly104.ps[3] = Point(2882.99, 1802.64);\n    new ShapeRef(router, poly104, 104);\n\n    Polygon poly105(4);\n    poly105.ps[0] = Point(2891.99, 1874.95);\n    poly105.ps[1] = Point(2891.99, 1894.95);\n    poly105.ps[2] = Point(2859.99, 1894.95);\n    poly105.ps[3] = Point(2859.99, 1874.95);\n    new ShapeRef(router, poly105, 105);\n\n    Polygon poly106(4);\n    poly106.ps[0] = Point(2969.99, 1874.95);\n    poly106.ps[1] = Point(2969.99, 1894.95);\n    poly106.ps[2] = Point(2937.99, 1894.95);\n    poly106.ps[3] = Point(2937.99, 1874.95);\n    new ShapeRef(router, poly106, 106);\n\n    Polygon poly107(4);\n    poly107.ps[0] = Point(2251.79, 692.5);\n    poly107.ps[1] = Point(2251.79, 724.5);\n    poly107.ps[2] = Point(2231.79, 724.5);\n    poly107.ps[3] = Point(2231.79, 692.5);\n    new ShapeRef(router, poly107, 107);\n\n    Polygon poly108(4);\n    poly108.ps[0] = Point(2557.71, 692.5);\n    poly108.ps[1] = Point(2557.71, 724.5);\n    poly108.ps[2] = Point(2537.71, 724.5);\n    poly108.ps[3] = Point(2537.71, 692.5);\n    new ShapeRef(router, poly108, 108);\n\n    Polygon poly109(4);\n    poly109.ps[0] = Point(2797.54, 692.5);\n    poly109.ps[1] = Point(2797.54, 724.5);\n    poly109.ps[2] = Point(2777.54, 724.5);\n    poly109.ps[3] = Point(2777.54, 692.5);\n    new ShapeRef(router, poly109, 109);\n\n    Polygon poly110(4);\n    poly110.ps[0] = Point(2978.99, 692.5);\n    poly110.ps[1] = Point(2978.99, 724.5);\n    poly110.ps[2] = Point(2958.99, 724.5);\n    poly110.ps[3] = Point(2958.99, 692.5);\n    new ShapeRef(router, poly110, 110);\n\n    Polygon poly111(4);\n    poly111.ps[0] = Point(2978.99, 898.5);\n    poly111.ps[1] = Point(2978.99, 930.5);\n    poly111.ps[2] = Point(2958.99, 930.5);\n    poly111.ps[3] = Point(2958.99, 898.5);\n    new ShapeRef(router, poly111, 111);\n\n    Polygon poly112(4);\n    poly112.ps[0] = Point(2251.79, 285.75);\n    poly112.ps[1] = Point(2251.79, 317.75);\n    poly112.ps[2] = Point(2231.79, 317.75);\n    poly112.ps[3] = Point(2231.79, 285.75);\n    new ShapeRef(router, poly112, 112);\n\n    Polygon poly113(4);\n    poly113.ps[0] = Point(2493.71, 210.875);\n    poly113.ps[1] = Point(2493.71, 230.875);\n    poly113.ps[2] = Point(2461.71, 230.875);\n    poly113.ps[3] = Point(2461.71, 210.875);\n    new ShapeRef(router, poly113, 113);\n\n    Polygon poly114(4);\n    poly114.ps[0] = Point(2557.71, 285.75);\n    poly114.ps[1] = Point(2557.71, 317.75);\n    poly114.ps[2] = Point(2537.71, 317.75);\n    poly114.ps[3] = Point(2537.71, 285.75);\n    new ShapeRef(router, poly114, 114);\n\n    Polygon poly115(4);\n    poly115.ps[0] = Point(2681.54, 210.875);\n    poly115.ps[1] = Point(2681.54, 230.875);\n    poly115.ps[2] = Point(2649.54, 230.875);\n    poly115.ps[3] = Point(2649.54, 210.875);\n    new ShapeRef(router, poly115, 115);\n\n    Polygon poly116(4);\n    poly116.ps[0] = Point(2681.54, 427.7);\n    poly116.ps[1] = Point(2681.54, 447.7);\n    poly116.ps[2] = Point(2649.54, 447.7);\n    poly116.ps[3] = Point(2649.54, 427.7);\n    new ShapeRef(router, poly116, 116);\n\n    Polygon poly117(4);\n    poly117.ps[0] = Point(2935.99, 427.7);\n    poly117.ps[1] = Point(2935.99, 447.7);\n    poly117.ps[2] = Point(2903.99, 447.7);\n    poly117.ps[3] = Point(2903.99, 427.7);\n    new ShapeRef(router, poly117, 117);\n\n    Polygon poly118(4);\n    poly118.ps[0] = Point(3149.24, 285.75);\n    poly118.ps[1] = Point(3149.24, 317.75);\n    poly118.ps[2] = Point(3129.24, 317.75);\n    poly118.ps[3] = Point(3129.24, 285.75);\n    new ShapeRef(router, poly118, 118);\n\n    Polygon poly119(4);\n    poly119.ps[0] = Point(3494.07, 904.5);\n    poly119.ps[1] = Point(3494.07, 924.5);\n    poly119.ps[2] = Point(3462.07, 924.5);\n    poly119.ps[3] = Point(3462.07, 904.5);\n    new ShapeRef(router, poly119, 119);\n\n    Polygon poly120(4);\n    poly120.ps[0] = Point(3488.07, 1856.95);\n    poly120.ps[1] = Point(3488.07, 1888.95);\n    poly120.ps[2] = Point(3468.07, 1888.95);\n    poly120.ps[3] = Point(3468.07, 1856.95);\n    new ShapeRef(router, poly120, 120);\n\n    Polygon poly121(4);\n    poly121.ps[0] = Point(3488.07, 2596.3);\n    poly121.ps[1] = Point(3488.07, 2628.3);\n    poly121.ps[2] = Point(3468.07, 2628.3);\n    poly121.ps[3] = Point(3468.07, 2596.3);\n    new ShapeRef(router, poly121, 121);\n\n    Polygon poly122(4);\n    poly122.ps[0] = Point(2803.54, 3407.3);\n    poly122.ps[1] = Point(2803.54, 3427.3);\n    poly122.ps[2] = Point(2771.54, 3427.3);\n    poly122.ps[3] = Point(2771.54, 3407.3);\n    new ShapeRef(router, poly122, 122);\n\n    Polygon poly123(4);\n    poly123.ps[0] = Point(2803.54, 3509.3);\n    poly123.ps[1] = Point(2803.54, 3529.3);\n    poly123.ps[2] = Point(2771.54, 3529.3);\n    poly123.ps[3] = Point(2771.54, 3509.3);\n    new ShapeRef(router, poly123, 123);\n\n    Polygon poly124(4);\n    poly124.ps[0] = Point(3606.07, 2596.3);\n    poly124.ps[1] = Point(3606.07, 2628.3);\n    poly124.ps[2] = Point(3586.07, 2628.3);\n    poly124.ps[3] = Point(3586.07, 2596.3);\n    new ShapeRef(router, poly124, 124);\n\n    Polygon poly125(4);\n    poly125.ps[0] = Point(3606.07, 898.5);\n    poly125.ps[1] = Point(3606.07, 930.5);\n    poly125.ps[2] = Point(3586.07, 930.5);\n    poly125.ps[3] = Point(3586.07, 898.5);\n    new ShapeRef(router, poly125, 125);\n\n    Polygon poly126(4);\n    poly126.ps[0] = Point(3336.74, 898.5);\n    poly126.ps[1] = Point(3336.74, 930.5);\n    poly126.ps[2] = Point(3316.74, 930.5);\n    poly126.ps[3] = Point(3316.74, 898.5);\n    new ShapeRef(router, poly126, 126);\n\n    Polygon poly127(4);\n    poly127.ps[0] = Point(3232.44, 2389.05);\n    poly127.ps[1] = Point(3232.44, 2409.05);\n    poly127.ps[2] = Point(3200.44, 2409.05);\n    poly127.ps[3] = Point(3200.44, 2389.05);\n    new ShapeRef(router, poly127, 127);\n\n    Polygon poly128(4);\n    poly128.ps[0] = Point(3232.44, 2287.05);\n    poly128.ps[1] = Point(3232.44, 2307.05);\n    poly128.ps[2] = Point(3200.44, 2307.05);\n    poly128.ps[3] = Point(3200.44, 2287.05);\n    new ShapeRef(router, poly128, 128);\n\n    Polygon poly129(4);\n    poly129.ps[0] = Point(2803.54, 2287.05);\n    poly129.ps[1] = Point(2803.54, 2307.05);\n    poly129.ps[2] = Point(2771.54, 2307.05);\n    poly129.ps[3] = Point(2771.54, 2287.05);\n    new ShapeRef(router, poly129, 129);\n\n    Polygon poly130(4);\n    poly130.ps[0] = Point(3232.44, 904.5);\n    poly130.ps[1] = Point(3232.44, 924.5);\n    poly130.ps[2] = Point(3200.44, 924.5);\n    poly130.ps[3] = Point(3200.44, 904.5);\n    new ShapeRef(router, poly130, 130);\n\n    Polygon poly131(4);\n    poly131.ps[0] = Point(2803.54, 2175.05);\n    poly131.ps[1] = Point(2803.54, 2195.05);\n    poly131.ps[2] = Point(2771.54, 2195.05);\n    poly131.ps[3] = Point(2771.54, 2175.05);\n    new ShapeRef(router, poly131, 131);\n\n    Polygon poly132(4);\n    poly132.ps[0] = Point(2415.71, 2175.05);\n    poly132.ps[1] = Point(2415.71, 2195.05);\n    poly132.ps[2] = Point(2383.71, 2195.05);\n    poly132.ps[3] = Point(2383.71, 2175.05);\n    new ShapeRef(router, poly132, 132);\n\n    Polygon poly133(4);\n    poly133.ps[0] = Point(1942.79, 2175.05);\n    poly133.ps[1] = Point(1942.79, 2195.05);\n    poly133.ps[2] = Point(1910.79, 2195.05);\n    poly133.ps[3] = Point(1910.79, 2175.05);\n    new ShapeRef(router, poly133, 133);\n\n    Polygon poly134(4);\n    poly134.ps[0] = Point(727.958, 2175.05);\n    poly134.ps[1] = Point(727.958, 2195.05);\n    poly134.ps[2] = Point(695.958, 2195.05);\n    poly134.ps[3] = Point(695.958, 2175.05);\n    new ShapeRef(router, poly134, 134);\n\n    Polygon poly135(4);\n    poly135.ps[0] = Point(1573.6, 2007.95);\n    poly135.ps[1] = Point(1573.6, 2039.95);\n    poly135.ps[2] = Point(1553.6, 2039.95);\n    poly135.ps[3] = Point(1553.6, 2007.95);\n    new ShapeRef(router, poly135, 135);\n\n    Polygon poly136(4);\n    poly136.ps[0] = Point(727.958, 1368.24);\n    poly136.ps[1] = Point(727.958, 1388.24);\n    poly136.ps[2] = Point(695.958, 1388.24);\n    poly136.ps[3] = Point(695.958, 1368.24);\n    new ShapeRef(router, poly136, 136);\n\n    Polygon poly137(4);\n    poly137.ps[0] = Point(721.958, 1424.24);\n    poly137.ps[1] = Point(721.958, 1456.24);\n    poly137.ps[2] = Point(701.958, 1456.24);\n    poly137.ps[3] = Point(701.958, 1424.24);\n    new ShapeRef(router, poly137, 137);\n\n    Polygon poly138(4);\n    poly138.ps[0] = Point(1395.86, 1424.24);\n    poly138.ps[1] = Point(1395.86, 1456.24);\n    poly138.ps[2] = Point(1375.86, 1456.24);\n    poly138.ps[3] = Point(1375.86, 1424.24);\n    new ShapeRef(router, poly138, 138);\n\n    Polygon poly139(4);\n    poly139.ps[0] = Point(626.333, 2467.3);\n    poly139.ps[1] = Point(626.333, 2487.3);\n    poly139.ps[2] = Point(594.333, 2487.3);\n    poly139.ps[3] = Point(594.333, 2467.3);\n    new ShapeRef(router, poly139, 139);\n\n    Polygon poly140(4);\n    poly140.ps[0] = Point(620.333, 2596.3);\n    poly140.ps[1] = Point(620.333, 2628.3);\n    poly140.ps[2] = Point(600.333, 2628.3);\n    poly140.ps[3] = Point(600.333, 2596.3);\n    new ShapeRef(router, poly140, 140);\n\n    Polygon poly141(4);\n    poly141.ps[0] = Point(1508.87, 2033.77);\n    poly141.ps[1] = Point(1508.87, 2073.77);\n    poly141.ps[2] = Point(1452.87, 2073.77);\n    poly141.ps[3] = Point(1452.87, 2033.77);\n    new ShapeRef(router, poly141, 141);\n\n    Polygon poly142(4);\n    poly142.ps[0] = Point(626.333, 3061.3);\n    poly142.ps[1] = Point(626.333, 3081.3);\n    poly142.ps[2] = Point(594.333, 3081.3);\n    poly142.ps[3] = Point(594.333, 3061.3);\n    new ShapeRef(router, poly142, 142);\n\n    Polygon poly143(4);\n    poly143.ps[0] = Point(1207.96, 2596.3);\n    poly143.ps[1] = Point(1207.96, 2628.3);\n    poly143.ps[2] = Point(1187.96, 2628.3);\n    poly143.ps[3] = Point(1187.96, 2596.3);\n    new ShapeRef(router, poly143, 143);\n\n    Polygon poly144(4);\n    poly144.ps[0] = Point(1325.96, 2596.3);\n    poly144.ps[1] = Point(1325.96, 2628.3);\n    poly144.ps[2] = Point(1305.96, 2628.3);\n    poly144.ps[3] = Point(1305.96, 2596.3);\n    new ShapeRef(router, poly144, 144);\n\n    Polygon poly145(4);\n    poly145.ps[0] = Point(1656.79, 2741.3);\n    poly145.ps[1] = Point(1656.79, 2773.3);\n    poly145.ps[2] = Point(1636.79, 2773.3);\n    poly145.ps[3] = Point(1636.79, 2741.3);\n    new ShapeRef(router, poly145, 145);\n\n    Polygon poly146(4);\n    poly146.ps[0] = Point(1573.6, 2672.3);\n    poly146.ps[1] = Point(1573.6, 2704.3);\n    poly146.ps[2] = Point(1553.6, 2704.3);\n    poly146.ps[3] = Point(1553.6, 2672.3);\n    new ShapeRef(router, poly146, 146);\n\n    Polygon poly147(4);\n    poly147.ps[0] = Point(1548.46, 2741.3);\n    poly147.ps[1] = Point(1548.46, 2773.3);\n    poly147.ps[2] = Point(1528.46, 2773.3);\n    poly147.ps[3] = Point(1528.46, 2741.3);\n    new ShapeRef(router, poly147, 147);\n\n    Polygon poly148(4);\n    poly148.ps[0] = Point(1656.79, 3124.3);\n    poly148.ps[1] = Point(1656.79, 3156.3);\n    poly148.ps[2] = Point(1636.79, 3156.3);\n    poly148.ps[3] = Point(1636.79, 3124.3);\n    new ShapeRef(router, poly148, 148);\n\n    Polygon poly149(4);\n    poly149.ps[0] = Point(1548.46, 3124.3);\n    poly149.ps[1] = Point(1548.46, 3156.3);\n    poly149.ps[2] = Point(1528.46, 3156.3);\n    poly149.ps[3] = Point(1528.46, 3124.3);\n    new ShapeRef(router, poly149, 149);\n\n    Polygon poly150(4);\n    poly150.ps[0] = Point(1573.6, 3055.3);\n    poly150.ps[1] = Point(1573.6, 3087.3);\n    poly150.ps[2] = Point(1553.6, 3087.3);\n    poly150.ps[3] = Point(1553.6, 3055.3);\n    new ShapeRef(router, poly150, 150);\n\n    Polygon poly151(4);\n    poly151.ps[0] = Point(2245.79, 2739.3);\n    poly151.ps[1] = Point(2245.79, 2759.3);\n    poly151.ps[2] = Point(2213.79, 2759.3);\n    poly151.ps[3] = Point(2213.79, 2739.3);\n    new ShapeRef(router, poly151, 151);\n\n    Polygon poly152(4);\n    poly152.ps[0] = Point(2344.71, 2596.3);\n    poly152.ps[1] = Point(2344.71, 2628.3);\n    poly152.ps[2] = Point(2324.71, 2628.3);\n    poly152.ps[3] = Point(2324.71, 2596.3);\n    new ShapeRef(router, poly152, 152);\n\n    Polygon poly153(4);\n    poly153.ps[0] = Point(2493.71, 2945.3);\n    poly153.ps[1] = Point(2493.71, 2965.3);\n    poly153.ps[2] = Point(2461.71, 2965.3);\n    poly153.ps[3] = Point(2461.71, 2945.3);\n    new ShapeRef(router, poly153, 153);\n\n    Polygon poly154(4);\n    poly154.ps[0] = Point(860.958, 2461.3);\n    poly154.ps[1] = Point(860.958, 2493.3);\n    poly154.ps[2] = Point(840.958, 2493.3);\n    poly154.ps[3] = Point(840.958, 2461.3);\n    new ShapeRef(router, poly154, 154);\n\n    Polygon poly155(4);\n    poly155.ps[0] = Point(974.958, 2467.3);\n    poly155.ps[1] = Point(974.958, 2487.3);\n    poly155.ps[2] = Point(942.958, 2487.3);\n    poly155.ps[3] = Point(942.958, 2467.3);\n    new ShapeRef(router, poly155, 155);\n\n    Polygon poly156(4);\n    poly156.ps[0] = Point(886.358, 2596.3);\n    poly156.ps[1] = Point(886.358, 2628.3);\n    poly156.ps[2] = Point(866.358, 2628.3);\n    poly156.ps[3] = Point(866.358, 2596.3);\n    new ShapeRef(router, poly156, 156);\n\n    Polygon poly157(4);\n    poly157.ps[0] = Point(886.358, 2741.3);\n    poly157.ps[1] = Point(886.358, 2773.3);\n    poly157.ps[2] = Point(866.358, 2773.3);\n    poly157.ps[3] = Point(866.358, 2741.3);\n    new ShapeRef(router, poly157, 157);\n\n    Polygon poly158(4);\n    poly158.ps[0] = Point(892.358, 3061.3);\n    poly158.ps[1] = Point(892.358, 3081.3);\n    poly158.ps[2] = Point(860.358, 3081.3);\n    poly158.ps[3] = Point(860.358, 3061.3);\n    new ShapeRef(router, poly158, 158);\n\n    Polygon poly159(4);\n    poly159.ps[0] = Point(2187.79, 1031.64);\n    poly159.ps[1] = Point(2187.79, 1051.64);\n    poly159.ps[2] = Point(2155.79, 1051.64);\n    poly159.ps[3] = Point(2155.79, 1031.64);\n    new ShapeRef(router, poly159, 159);\n\n    Polygon poly160(4);\n    poly160.ps[0] = Point(2493.71, 1031.64);\n    poly160.ps[1] = Point(2493.71, 1051.64);\n    poly160.ps[2] = Point(2461.71, 1051.64);\n    poly160.ps[3] = Point(2461.71, 1031.64);\n    new ShapeRef(router, poly160, 160);\n\n    Polygon poly161(4);\n    poly161.ps[0] = Point(2257.79, 1133.64);\n    poly161.ps[1] = Point(2257.79, 1153.64);\n    poly161.ps[2] = Point(2225.79, 1153.64);\n    poly161.ps[3] = Point(2225.79, 1133.64);\n    new ShapeRef(router, poly161, 161);\n\n    Polygon poly162(4);\n    poly162.ps[0] = Point(1785.79, 496.5);\n    poly162.ps[1] = Point(1785.79, 516.5);\n    poly162.ps[2] = Point(1753.79, 516.5);\n    poly162.ps[3] = Point(1753.79, 496.5);\n    new ShapeRef(router, poly162, 162);\n\n    Polygon poly163(4);\n    poly163.ps[0] = Point(1785.79, 567.5);\n    poly163.ps[1] = Point(1785.79, 587.5);\n    poly163.ps[2] = Point(1753.79, 587.5);\n    poly163.ps[3] = Point(1753.79, 567.5);\n    new ShapeRef(router, poly163, 163);\n\n    Polygon poly164(4);\n    poly164.ps[0] = Point(3509.07, 2154.05);\n    poly164.ps[1] = Point(3509.07, 2216.05);\n    poly164.ps[2] = Point(3447.07, 2216.05);\n    poly164.ps[3] = Point(3447.07, 2154.05);\n    new ShapeRef(router, poly164, 164);\n\n    Polygon poly165(4);\n    poly165.ps[0] = Point(3627.07, 2154.05);\n    poly165.ps[1] = Point(3627.07, 2216.05);\n    poly165.ps[2] = Point(3565.07, 2216.05);\n    poly165.ps[3] = Point(3565.07, 2154.05);\n    new ShapeRef(router, poly165, 165);\n\n    Polygon poly166(4);\n    poly166.ps[0] = Point(2051.79, 1260.24);\n    poly166.ps[1] = Point(2051.79, 1292.24);\n    poly166.ps[2] = Point(2031.79, 1292.24);\n    poly166.ps[3] = Point(2031.79, 1260.24);\n    new ShapeRef(router, poly166, 166);\n\n    Polygon poly167(4);\n    poly167.ps[0] = Point(333, 1109.24);\n    poly167.ps[1] = Point(333, 1141.24);\n    poly167.ps[2] = Point(313, 1141.24);\n    poly167.ps[3] = Point(313, 1109.24);\n    new ShapeRef(router, poly167, 167);\n\n    Polygon poly168(4);\n    poly168.ps[0] = Point(291, 1127.64);\n    poly168.ps[1] = Point(291, 1159.64);\n    poly168.ps[2] = Point(271, 1159.64);\n    poly168.ps[3] = Point(271, 1127.64);\n    new ShapeRef(router, poly168, 168);\n\n    Polygon poly169(4);\n    poly169.ps[0] = Point(475.333, 1127.64);\n    poly169.ps[1] = Point(475.333, 1159.64);\n    poly169.ps[2] = Point(455.333, 1159.64);\n    poly169.ps[3] = Point(455.333, 1127.64);\n    new ShapeRef(router, poly169, 169);\n\n    Polygon poly170(4);\n    poly170.ps[0] = Point(3151.24, 1436.94);\n    poly170.ps[1] = Point(3151.24, 1601.94);\n    poly170.ps[2] = Point(3051.24, 1601.94);\n    poly170.ps[3] = Point(3051.24, 1436.94);\n    new ShapeRef(router, poly170, 170);\n\n    Polygon poly171(4);\n    poly171.ps[0] = Point(2153.8, 354.5);\n    poly171.ps[1] = Point(2153.8, 414.5);\n    poly171.ps[2] = Point(1901.8, 414.5);\n    poly171.ps[3] = Point(1901.8, 354.5);\n    new ShapeRef(router, poly171, 171);\n\n    Polygon poly172(4);\n    poly172.ps[0] = Point(1923.29, 1174.24);\n    poly172.ps[1] = Point(1923.29, 1234.24);\n    poly172.ps[2] = Point(1666.29, 1234.24);\n    poly172.ps[3] = Point(1666.29, 1174.24);\n    new ShapeRef(router, poly172, 172);\n\n    Polygon poly173(4);\n    poly173.ps[0] = Point(1521.6, 2799.3);\n    poly173.ps[1] = Point(1521.6, 2973.3);\n    poly173.ps[2] = Point(1228.6, 2973.3);\n    poly173.ps[3] = Point(1228.6, 2799.3);\n    new ShapeRef(router, poly173, 173);\n\n    Polygon poly174(4);\n    poly174.ps[0] = Point(1273.96, 211.5);\n    poly174.ps[1] = Point(1273.96, 385.5);\n    poly174.ps[2] = Point(1191.96, 385.5);\n    poly174.ps[3] = Point(1191.96, 211.5);\n    new ShapeRef(router, poly174, 174);\n\n    Polygon poly175(4);\n    poly175.ps[0] = Point(1335.86, 902.5);\n    poly175.ps[1] = Point(1335.86, 1076.5);\n    poly175.ps[2] = Point(1253.86, 1076.5);\n    poly175.ps[3] = Point(1253.86, 902.5);\n    new ShapeRef(router, poly175, 175);\n\n    Polygon poly176(4);\n    poly176.ps[0] = Point(2984.99, 1489.44);\n    poly176.ps[1] = Point(2984.99, 1549.44);\n    poly176.ps[2] = Point(2706.99, 1549.44);\n    poly176.ps[3] = Point(2706.99, 1489.44);\n    new ShapeRef(router, poly176, 176);\n\n    Polygon poly177(4);\n    poly177.ps[0] = Point(2646.54, 3113.3);\n    poly177.ps[1] = Point(2646.54, 3287.3);\n    poly177.ps[2] = Point(2566.54, 3287.3);\n    poly177.ps[3] = Point(2566.54, 3113.3);\n    new ShapeRef(router, poly177, 177);\n\n    Polygon poly178(4);\n    poly178.ps[0] = Point(1892.79, 3178.3);\n    poly178.ps[1] = Point(1892.79, 3240.3);\n    poly178.ps[2] = Point(1830.79, 3240.3);\n    poly178.ps[3] = Point(1830.79, 3178.3);\n    new ShapeRef(router, poly178, 178);\n\n    Polygon poly179(4);\n    poly179.ps[0] = Point(1798.79, 3391.3);\n    poly179.ps[1] = Point(1798.79, 3411.3);\n    poly179.ps[2] = Point(1766.79, 3411.3);\n    poly179.ps[3] = Point(1766.79, 3391.3);\n    new ShapeRef(router, poly179, 179);\n\n    Polygon poly180(4);\n    poly180.ps[0] = Point(1798.79, 3187.3);\n    poly180.ps[1] = Point(1798.79, 3207.3);\n    poly180.ps[2] = Point(1766.79, 3207.3);\n    poly180.ps[3] = Point(1766.79, 3187.3);\n    new ShapeRef(router, poly180, 180);\n\n    Polygon poly181(4);\n    poly181.ps[0] = Point(2791.54, 113.5);\n    poly181.ps[1] = Point(2791.54, 133.5);\n    poly181.ps[2] = Point(2759.54, 133.5);\n    poly181.ps[3] = Point(2759.54, 113.5);\n    new ShapeRef(router, poly181, 181);\n\n    Polygon poly182(4);\n    poly182.ps[0] = Point(2858.54, 2843.3);\n    poly182.ps[1] = Point(2858.54, 2903.3);\n    poly182.ps[2] = Point(2624.54, 2903.3);\n    poly182.ps[3] = Point(2624.54, 2843.3);\n    new ShapeRef(router, poly182, 182);\n\n    Polygon poly183(4);\n    poly183.ps[0] = Point(1969.79, 2935.3);\n    poly183.ps[1] = Point(1969.79, 2955.3);\n    poly183.ps[2] = Point(1937.79, 2955.3);\n    poly183.ps[3] = Point(1937.79, 2935.3);\n    new ShapeRef(router, poly183, 183);\n\n    Polygon poly184(4);\n    poly184.ps[0] = Point(2187.79, 210.875);\n    poly184.ps[1] = Point(2187.79, 230.875);\n    poly184.ps[2] = Point(2155.79, 230.875);\n    poly184.ps[3] = Point(2155.79, 210.875);\n    new ShapeRef(router, poly184, 184);\n\n    Polygon poly185(4);\n    poly185.ps[0] = Point(2072.79, 189.875);\n    poly185.ps[1] = Point(2072.79, 251.875);\n    poly185.ps[2] = Point(2010.79, 251.875);\n    poly185.ps[3] = Point(2010.79, 189.875);\n    new ShapeRef(router, poly185, 185);\n\n    Polygon poly186(4);\n    poly186.ps[0] = Point(2072.79, 2154.05);\n    poly186.ps[1] = Point(2072.79, 2216.05);\n    poly186.ps[2] = Point(2010.79, 2216.05);\n    poly186.ps[3] = Point(2010.79, 2154.05);\n    new ShapeRef(router, poly186, 186);\n\n    Polygon poly187(4);\n    poly187.ps[0] = Point(1806.79, 1841.95);\n    poly187.ps[1] = Point(1806.79, 1903.95);\n    poly187.ps[2] = Point(1744.79, 1903.95);\n    poly187.ps[3] = Point(1744.79, 1841.95);\n    new ShapeRef(router, poly187, 187);\n\n    Polygon poly188(4);\n    poly188.ps[0] = Point(1942.79, 1862.95);\n    poly188.ps[1] = Point(1942.79, 1882.95);\n    poly188.ps[2] = Point(1910.79, 1882.95);\n    poly188.ps[3] = Point(1910.79, 1862.95);\n    new ShapeRef(router, poly188, 188);\n\n    Polygon poly189(4);\n    poly189.ps[0] = Point(1104.18, 1841.95);\n    poly189.ps[1] = Point(1104.18, 1903.95);\n    poly189.ps[2] = Point(1042.18, 1903.95);\n    poly189.ps[3] = Point(1042.18, 1841.95);\n    new ShapeRef(router, poly189, 189);\n\n    Polygon poly190(4);\n    poly190.ps[0] = Point(1480.46, 1862.95);\n    poly190.ps[1] = Point(1480.46, 1882.95);\n    poly190.ps[2] = Point(1448.46, 1882.95);\n    poly190.ps[3] = Point(1448.46, 1862.95);\n    new ShapeRef(router, poly190, 190);\n\n    Polygon poly191(4);\n    poly191.ps[0] = Point(907.358, 1841.95);\n    poly191.ps[1] = Point(907.358, 1903.95);\n    poly191.ps[2] = Point(845.358, 1903.95);\n    poly191.ps[3] = Point(845.358, 1841.95);\n    new ShapeRef(router, poly191, 191);\n\n    Polygon poly192(4);\n    poly192.ps[0] = Point(988.958, 1862.95);\n    poly192.ps[1] = Point(988.958, 1882.95);\n    poly192.ps[2] = Point(956.958, 1882.95);\n    poly192.ps[3] = Point(956.958, 1862.95);\n    new ShapeRef(router, poly192, 192);\n\n    Polygon poly193(4);\n    poly193.ps[0] = Point(1104.18, 1700.64);\n    poly193.ps[1] = Point(1104.18, 1762.64);\n    poly193.ps[2] = Point(1042.18, 1762.64);\n    poly193.ps[3] = Point(1042.18, 1700.64);\n    new ShapeRef(router, poly193, 193);\n\n    Polygon poly194(4);\n    poly194.ps[0] = Point(1104.18, 1992.95);\n    poly194.ps[1] = Point(1104.18, 2054.95);\n    poly194.ps[2] = Point(1042.18, 2054.95);\n    poly194.ps[3] = Point(1042.18, 1992.95);\n    new ShapeRef(router, poly194, 194);\n\n    Polygon poly195(4);\n    poly195.ps[0] = Point(1551.87, 1611.77);\n    poly195.ps[1] = Point(1551.87, 1651.77);\n    poly195.ps[2] = Point(1475.87, 1651.77);\n    poly195.ps[3] = Point(1475.87, 1611.77);\n    new ShapeRef(router, poly195, 195);\n\n    Polygon poly196(4);\n    poly196.ps[0] = Point(2578.71, 1617.64);\n    poly196.ps[1] = Point(2578.71, 1679.64);\n    poly196.ps[2] = Point(2516.71, 1679.64);\n    poly196.ps[3] = Point(2516.71, 1617.64);\n    new ShapeRef(router, poly196, 196);\n\n    Polygon poly197(4);\n    poly197.ps[0] = Point(3099.24, 285.75);\n    poly197.ps[1] = Point(3099.24, 317.75);\n    poly197.ps[2] = Point(3079.24, 317.75);\n    poly197.ps[3] = Point(3079.24, 285.75);\n    new ShapeRef(router, poly197, 197);\n\n    Polygon poly198(4);\n    poly198.ps[0] = Point(2732.54, 2489.3);\n    poly198.ps[1] = Point(2732.54, 2533.3);\n    poly198.ps[2] = Point(2592.54, 2533.3);\n    poly198.ps[3] = Point(2592.54, 2489.3);\n    new ShapeRef(router, poly198, 198);\n\n    Polygon poly199(4);\n    poly199.ps[0] = Point(1822.83, 2270.38);\n    poly199.ps[1] = Point(1822.83, 2330.38);\n    poly199.ps[2] = Point(1504.83, 2330.38);\n    poly199.ps[3] = Point(1504.83, 2270.38);\n    new ShapeRef(router, poly199, 199);\n\n    Polygon poly200(4);\n    poly200.ps[0] = Point(2072.79, 2643.3);\n    poly200.ps[1] = Point(2072.79, 2705.3);\n    poly200.ps[2] = Point(2010.79, 2705.3);\n    poly200.ps[3] = Point(2010.79, 2643.3);\n    new ShapeRef(router, poly200, 200);\n\n    Polygon poly201(4);\n    poly201.ps[0] = Point(2051.79, 2733.3);\n    poly201.ps[1] = Point(2051.79, 2765.3);\n    poly201.ps[2] = Point(2031.79, 2765.3);\n    poly201.ps[3] = Point(2031.79, 2733.3);\n    new ShapeRef(router, poly201, 201);\n\n    Polygon poly202(4);\n    poly202.ps[0] = Point(1892.79, 2460.3);\n    poly202.ps[1] = Point(1892.79, 2522.3);\n    poly202.ps[2] = Point(1830.79, 2522.3);\n    poly202.ps[3] = Point(1830.79, 2460.3);\n    new ShapeRef(router, poly202, 202);\n\n    Polygon poly203(4);\n    poly203.ps[0] = Point(1892.79, 2643.3);\n    poly203.ps[1] = Point(1892.79, 2705.3);\n    poly203.ps[2] = Point(1830.79, 2705.3);\n    poly203.ps[3] = Point(1830.79, 2643.3);\n    new ShapeRef(router, poly203, 203);\n\n    Polygon poly204(4);\n    poly204.ps[0] = Point(1871.79, 2733.3);\n    poly204.ps[1] = Point(1871.79, 2765.3);\n    poly204.ps[2] = Point(1851.79, 2765.3);\n    poly204.ps[3] = Point(1851.79, 2733.3);\n    new ShapeRef(router, poly204, 204);\n\n    Polygon poly205(4);\n    poly205.ps[0] = Point(1892.79, 2780.3);\n    poly205.ps[1] = Point(1892.79, 2842.3);\n    poly205.ps[2] = Point(1830.79, 2842.3);\n    poly205.ps[3] = Point(1830.79, 2780.3);\n    new ShapeRef(router, poly205, 205);\n\n    Polygon poly206(4);\n    poly206.ps[0] = Point(1830.79, 2498.3);\n    poly206.ps[1] = Point(1830.79, 2560.3);\n    poly206.ps[2] = Point(1768.79, 2560.3);\n    poly206.ps[3] = Point(1768.79, 2498.3);\n    new ShapeRef(router, poly206, 206);\n\n    Polygon poly207(4);\n    poly207.ps[0] = Point(1793.79, 1914.95);\n    poly207.ps[1] = Point(1793.79, 1958.95);\n    poly207.ps[2] = Point(1713.79, 1958.95);\n    poly207.ps[3] = Point(1713.79, 1914.95);\n    new ShapeRef(router, poly207, 207);\n\n    Polygon poly208(4);\n    poly208.ps[0] = Point(1104.18, 538.7);\n    poly208.ps[1] = Point(1104.18, 600.7);\n    poly208.ps[2] = Point(1042.18, 600.7);\n    poly208.ps[3] = Point(1042.18, 538.7);\n    new ShapeRef(router, poly208, 208);\n\n    Polygon poly209(4);\n    poly209.ps[0] = Point(1083.18, 692.5);\n    poly209.ps[1] = Point(1083.18, 724.5);\n    poly209.ps[2] = Point(1063.18, 724.5);\n    poly209.ps[3] = Point(1063.18, 692.5);\n    new ShapeRef(router, poly209, 209);\n\n    Polygon poly210(4);\n    poly210.ps[0] = Point(1245.46, 559.7);\n    poly210.ps[1] = Point(1245.46, 579.7);\n    poly210.ps[2] = Point(1213.46, 579.7);\n    poly210.ps[3] = Point(1213.46, 559.7);\n    new ShapeRef(router, poly210, 210);\n\n    Polygon poly211(4);\n    poly211.ps[0] = Point(907.358, 344.5);\n    poly211.ps[1] = Point(907.358, 406.5);\n    poly211.ps[2] = Point(845.358, 406.5);\n    poly211.ps[3] = Point(845.358, 344.5);\n    new ShapeRef(router, poly211, 211);\n\n    Polygon poly212(4);\n    poly212.ps[0] = Point(886.358, 553.7);\n    poly212.ps[1] = Point(886.358, 585.7);\n    poly212.ps[2] = Point(866.358, 585.7);\n    poly212.ps[3] = Point(866.358, 553.7);\n    new ShapeRef(router, poly212, 212);\n\n    Polygon poly213(4);\n    poly213.ps[0] = Point(812.958, 684.5);\n    poly213.ps[1] = Point(812.958, 746.5);\n    poly213.ps[2] = Point(750.958, 746.5);\n    poly213.ps[3] = Point(750.958, 684.5);\n    new ShapeRef(router, poly213, 213);\n\n    Polygon poly214(4);\n    poly214.ps[0] = Point(414.333, 496.5);\n    poly214.ps[1] = Point(414.333, 528.5);\n    poly214.ps[2] = Point(394.333, 528.5);\n    poly214.ps[3] = Point(394.333, 496.5);\n    new ShapeRef(router, poly214, 214);\n\n    Polygon poly215(4);\n    poly215.ps[0] = Point(2493.71, 2854.3);\n    poly215.ps[1] = Point(2493.71, 2874.3);\n    poly215.ps[2] = Point(2461.71, 2874.3);\n    poly215.ps[3] = Point(2461.71, 2854.3);\n    new ShapeRef(router, poly215, 215);\n\n    Polygon poly216(4);\n    poly216.ps[0] = Point(3150.9, 2498.3);\n    poly216.ps[1] = Point(3150.9, 2560.3);\n    poly216.ps[2] = Point(3088.9, 2560.3);\n    poly216.ps[3] = Point(3088.9, 2498.3);\n    new ShapeRef(router, poly216, 216);\n\n    Polygon poly217(4);\n    poly217.ps[0] = Point(2999.99, 2643.3);\n    poly217.ps[1] = Point(2999.99, 2705.3);\n    poly217.ps[2] = Point(2937.99, 2705.3);\n    poly217.ps[3] = Point(2937.99, 2643.3);\n    new ShapeRef(router, poly217, 217);\n\n    Polygon poly218(4);\n    poly218.ps[0] = Point(2926.99, 2602.3);\n    poly218.ps[1] = Point(2926.99, 2622.3);\n    poly218.ps[2] = Point(2894.99, 2622.3);\n    poly218.ps[3] = Point(2894.99, 2602.3);\n    new ShapeRef(router, poly218, 218);\n\n    Polygon poly219(4);\n    poly219.ps[0] = Point(3150.9, 2841.3);\n    poly219.ps[1] = Point(3150.9, 2903.3);\n    poly219.ps[2] = Point(3088.9, 2903.3);\n    poly219.ps[3] = Point(3088.9, 2841.3);\n    new ShapeRef(router, poly219, 219);\n\n    Polygon poly220(4);\n    poly220.ps[0] = Point(2999.99, 3178.3);\n    poly220.ps[1] = Point(2999.99, 3240.3);\n    poly220.ps[2] = Point(2937.99, 3240.3);\n    poly220.ps[3] = Point(2937.99, 3178.3);\n    new ShapeRef(router, poly220, 220);\n\n    Polygon poly221(4);\n    poly221.ps[0] = Point(3252.24, 2643.3);\n    poly221.ps[1] = Point(3252.24, 2705.3);\n    poly221.ps[2] = Point(3190.24, 2705.3);\n    poly221.ps[3] = Point(3190.24, 2643.3);\n    new ShapeRef(router, poly221, 221);\n\n    Polygon poly222(4);\n    poly222.ps[0] = Point(3247.44, 3178.3);\n    poly222.ps[1] = Point(3247.44, 3240.3);\n    poly222.ps[2] = Point(3185.44, 3240.3);\n    poly222.ps[3] = Point(3185.44, 3178.3);\n    new ShapeRef(router, poly222, 222);\n\n    Polygon poly223(4);\n    poly223.ps[0] = Point(3252.24, 2596.3);\n    poly223.ps[1] = Point(3252.24, 2628.3);\n    poly223.ps[2] = Point(3232.24, 2628.3);\n    poly223.ps[3] = Point(3232.24, 2596.3);\n    new ShapeRef(router, poly223, 223);\n\n    Polygon poly224(4);\n    poly224.ps[0] = Point(2900.99, 3061.3);\n    poly224.ps[1] = Point(2900.99, 3081.3);\n    poly224.ps[2] = Point(2868.99, 3081.3);\n    poly224.ps[3] = Point(2868.99, 3061.3);\n    new ShapeRef(router, poly224, 224);\n\n    Polygon poly225(4);\n    poly225.ps[0] = Point(3336.74, 3055.3);\n    poly225.ps[1] = Point(3336.74, 3087.3);\n    poly225.ps[2] = Point(3316.74, 3087.3);\n    poly225.ps[3] = Point(3316.74, 3055.3);\n    new ShapeRef(router, poly225, 225);\n\n    Polygon poly226(4);\n    poly226.ps[0] = Point(1798.79, 3289.3);\n    poly226.ps[1] = Point(1798.79, 3309.3);\n    poly226.ps[2] = Point(1766.79, 3309.3);\n    poly226.ps[3] = Point(1766.79, 3289.3);\n    new ShapeRef(router, poly226, 226);\n\n    Polygon poly227(4);\n    poly227.ps[0] = Point(210, 492.5);\n    poly227.ps[1] = Point(210, 532.5);\n    poly227.ps[2] = Point(134, 532.5);\n    poly227.ps[3] = Point(134, 492.5);\n    new ShapeRef(router, poly227, 227);\n\n    Polygon poly228(4);\n    poly228.ps[0] = Point(121, 628.5);\n    poly228.ps[1] = Point(121, 668.5);\n    poly228.ps[2] = Point(45, 668.5);\n    poly228.ps[3] = Point(45, 628.5);\n    new ShapeRef(router, poly228, 228);\n\n    Polygon poly229(4);\n    poly229.ps[0] = Point(568.333, 638.5);\n    poly229.ps[1] = Point(568.333, 698.5);\n    poly229.ps[2] = Point(512.333, 698.5);\n    poly229.ps[3] = Point(512.333, 638.5);\n    new ShapeRef(router, poly229, 229);\n\n    Polygon poly230(4);\n    poly230.ps[0] = Point(568.333, 763.833);\n    poly230.ps[1] = Point(568.333, 823.833);\n    poly230.ps[2] = Point(512.333, 823.833);\n    poly230.ps[3] = Point(512.333, 763.833);\n    new ShapeRef(router, poly230, 230);\n\n    Polygon poly231(4);\n    poly231.ps[0] = Point(1481.46, 688.5);\n    poly231.ps[1] = Point(1481.46, 728.5);\n    poly231.ps[2] = Point(1405.46, 728.5);\n    poly231.ps[3] = Point(1405.46, 688.5);\n    new ShapeRef(router, poly231, 231);\n\n    Polygon poly232(4);\n    poly232.ps[0] = Point(1570.46, 221.5);\n    poly232.ps[1] = Point(1570.46, 281.5);\n    poly232.ps[2] = Point(1514.46, 281.5);\n    poly232.ps[3] = Point(1514.46, 221.5);\n    new ShapeRef(router, poly232, 232);\n\n    Polygon poly233(4);\n    poly233.ps[0] = Point(1970.29, 221.5);\n    poly233.ps[1] = Point(1970.29, 281.5);\n    poly233.ps[2] = Point(1914.29, 281.5);\n    poly233.ps[3] = Point(1914.29, 221.5);\n    new ShapeRef(router, poly233, 233);\n\n    Polygon poly234(4);\n    poly234.ps[0] = Point(2054.79, 707.5);\n    poly234.ps[1] = Point(2054.79, 767.5);\n    poly234.ps[2] = Point(1998.79, 767.5);\n    poly234.ps[3] = Point(1998.79, 707.5);\n    new ShapeRef(router, poly234, 234);\n\n    Polygon poly235(4);\n    poly235.ps[0] = Point(568.333, 1206.24);\n    poly235.ps[1] = Point(568.333, 1266.24);\n    poly235.ps[2] = Point(512.333, 1266.24);\n    poly235.ps[3] = Point(512.333, 1206.24);\n    new ShapeRef(router, poly235, 235);\n\n    Polygon poly236(4);\n    poly236.ps[0] = Point(739.958, 1206.24);\n    poly236.ps[1] = Point(739.958, 1266.24);\n    poly236.ps[2] = Point(683.958, 1266.24);\n    poly236.ps[3] = Point(683.958, 1206.24);\n    new ShapeRef(router, poly236, 236);\n\n    Polygon poly237(4);\n    poly237.ps[0] = Point(1000.96, 1206.24);\n    poly237.ps[1] = Point(1000.96, 1266.24);\n    poly237.ps[2] = Point(944.958, 1266.24);\n    poly237.ps[3] = Point(944.958, 1206.24);\n    new ShapeRef(router, poly237, 237);\n\n    Polygon poly238(4);\n    poly238.ps[0] = Point(1040.96, 1123.64);\n    poly238.ps[1] = Point(1040.96, 1163.64);\n    poly238.ps[2] = Point(964.958, 1163.64);\n    poly238.ps[3] = Point(964.958, 1123.64);\n    new ShapeRef(router, poly238, 238);\n\n    Polygon poly239(4);\n    poly239.ps[0] = Point(1413.86, 899.5);\n    poly239.ps[1] = Point(1413.86, 959.5);\n    poly239.ps[2] = Point(1357.86, 959.5);\n    poly239.ps[3] = Point(1357.86, 899.5);\n    new ShapeRef(router, poly239, 239);\n\n    Polygon poly240(4);\n    poly240.ps[0] = Point(1413.86, 1051.64);\n    poly240.ps[1] = Point(1413.86, 1111.64);\n    poly240.ps[2] = Point(1357.86, 1111.64);\n    poly240.ps[3] = Point(1357.86, 1051.64);\n    new ShapeRef(router, poly240, 240);\n\n    Polygon poly241(4);\n    poly241.ps[0] = Point(1413.86, 1153.64);\n    poly241.ps[1] = Point(1413.86, 1213.64);\n    poly241.ps[2] = Point(1357.86, 1213.64);\n    poly241.ps[3] = Point(1357.86, 1153.64);\n    new ShapeRef(router, poly241, 241);\n\n    Polygon poly242(4);\n    poly242.ps[0] = Point(1732.79, 1256.24);\n    poly242.ps[1] = Point(1732.79, 1296.24);\n    poly242.ps[2] = Point(1656.79, 1296.24);\n    poly242.ps[3] = Point(1656.79, 1256.24);\n    new ShapeRef(router, poly242, 242);\n\n    Polygon poly243(4);\n    poly243.ps[0] = Point(1954.79, 1663.64);\n    poly243.ps[1] = Point(1954.79, 1723.64);\n    poly243.ps[2] = Point(1898.79, 1723.64);\n    poly243.ps[3] = Point(1898.79, 1663.64);\n    new ShapeRef(router, poly243, 243);\n\n    Polygon poly244(4);\n    poly244.ps[0] = Point(2044.29, 1420.24);\n    poly244.ps[1] = Point(2044.29, 1460.24);\n    poly244.ps[2] = Point(1968.29, 1460.24);\n    poly244.ps[3] = Point(1968.29, 1420.24);\n    new ShapeRef(router, poly244, 244);\n\n    Polygon poly245(4);\n    poly245.ps[0] = Point(2127.79, 1702.64);\n    poly245.ps[1] = Point(2127.79, 1742.64);\n    poly245.ps[2] = Point(2051.79, 1742.64);\n    poly245.ps[3] = Point(2051.79, 1702.64);\n    new ShapeRef(router, poly245, 245);\n\n    Polygon poly246(4);\n    poly246.ps[0] = Point(2199.79, 1499.64);\n    poly246.ps[1] = Point(2199.79, 1559.64);\n    poly246.ps[2] = Point(2143.79, 1559.64);\n    poly246.ps[3] = Point(2143.79, 1499.64);\n    new ShapeRef(router, poly246, 246);\n\n    Polygon poly247(4);\n    poly247.ps[0] = Point(2327.79, 1420.24);\n    poly247.ps[1] = Point(2327.79, 1460.24);\n    poly247.ps[2] = Point(2251.79, 1460.24);\n    poly247.ps[3] = Point(2251.79, 1420.24);\n    new ShapeRef(router, poly247, 247);\n\n    Polygon poly248(4);\n    poly248.ps[0] = Point(2505.71, 1439.44);\n    poly248.ps[1] = Point(2505.71, 1499.44);\n    poly248.ps[2] = Point(2449.71, 1499.44);\n    poly248.ps[3] = Point(2449.71, 1439.44);\n    new ShapeRef(router, poly248, 248);\n\n    Polygon poly249(4);\n    poly249.ps[0] = Point(2505.71, 1591.64);\n    poly249.ps[1] = Point(2505.71, 1651.64);\n    poly249.ps[2] = Point(2449.71, 1651.64);\n    poly249.ps[3] = Point(2449.71, 1591.64);\n    new ShapeRef(router, poly249, 249);\n    */\n\n    Polygon poly250(4);\n    poly250.ps[0] = Point(2199.79, 1802.95);\n    poly250.ps[1] = Point(2199.79, 1862.95);\n    poly250.ps[2] = Point(2143.79, 1862.95);\n    poly250.ps[3] = Point(2143.79, 1802.95);\n    new ShapeRef(router, poly250, 250);\n\n    /*\n    Polygon poly251(4);\n    poly251.ps[0] = Point(2505.71, 1943.95);\n    poly251.ps[1] = Point(2505.71, 2003.95);\n    poly251.ps[2] = Point(2449.71, 2003.95);\n    poly251.ps[3] = Point(2449.71, 1943.95);\n    new ShapeRef(router, poly251, 251);\n\n    Polygon poly252(4);\n    poly252.ps[0] = Point(2505.71, 2065.95);\n    poly252.ps[1] = Point(2505.71, 2125.95);\n    poly252.ps[2] = Point(2449.71, 2125.95);\n    poly252.ps[3] = Point(2449.71, 2065.95);\n    new ShapeRef(router, poly252, 252);\n\n    Polygon poly253(4);\n    poly253.ps[0] = Point(2688.54, 1742.64);\n    poly253.ps[1] = Point(2688.54, 1802.64);\n    poly253.ps[2] = Point(2632.54, 1802.64);\n    poly253.ps[3] = Point(2632.54, 1742.64);\n    new ShapeRef(router, poly253, 253);\n\n    Polygon poly254(4);\n    poly254.ps[0] = Point(2665.54, 1894.95);\n    poly254.ps[1] = Point(2665.54, 1954.95);\n    poly254.ps[2] = Point(2609.54, 1954.95);\n    poly254.ps[3] = Point(2609.54, 1894.95);\n    new ShapeRef(router, poly254, 254);\n\n    Polygon poly255(4);\n    poly255.ps[0] = Point(2763.54, 1894.95);\n    poly255.ps[1] = Point(2763.54, 1954.95);\n    poly255.ps[2] = Point(2707.54, 1954.95);\n    poly255.ps[3] = Point(2707.54, 1894.95);\n    new ShapeRef(router, poly255, 255);\n\n    Polygon poly256(4);\n    poly256.ps[0] = Point(2926.99, 1742.64);\n    poly256.ps[1] = Point(2926.99, 1802.64);\n    poly256.ps[2] = Point(2870.99, 1802.64);\n    poly256.ps[3] = Point(2870.99, 1742.64);\n    new ShapeRef(router, poly256, 256);\n\n    Polygon poly257(4);\n    poly257.ps[0] = Point(2903.99, 1894.95);\n    poly257.ps[1] = Point(2903.99, 1954.95);\n    poly257.ps[2] = Point(2847.99, 1954.95);\n    poly257.ps[3] = Point(2847.99, 1894.95);\n    new ShapeRef(router, poly257, 257);\n\n    Polygon poly258(4);\n    poly258.ps[0] = Point(2981.99, 1894.95);\n    poly258.ps[1] = Point(2981.99, 1954.95);\n    poly258.ps[2] = Point(2925.99, 1954.95);\n    poly258.ps[3] = Point(2925.99, 1894.95);\n    new ShapeRef(router, poly258, 258);\n\n    Polygon poly259(4);\n    poly259.ps[0] = Point(2327.79, 688.5);\n    poly259.ps[1] = Point(2327.79, 728.5);\n    poly259.ps[2] = Point(2251.79, 728.5);\n    poly259.ps[3] = Point(2251.79, 688.5);\n    new ShapeRef(router, poly259, 259);\n\n    Polygon poly260(4);\n    poly260.ps[0] = Point(2633.71, 688.5);\n    poly260.ps[1] = Point(2633.71, 728.5);\n    poly260.ps[2] = Point(2557.71, 728.5);\n    poly260.ps[3] = Point(2557.71, 688.5);\n    new ShapeRef(router, poly260, 260);\n\n    Polygon poly261(4);\n    poly261.ps[0] = Point(2873.54, 688.5);\n    poly261.ps[1] = Point(2873.54, 728.5);\n    poly261.ps[2] = Point(2797.54, 728.5);\n    poly261.ps[3] = Point(2797.54, 688.5);\n    new ShapeRef(router, poly261, 261);\n\n    Polygon poly262(4);\n    poly262.ps[0] = Point(3054.99, 688.5);\n    poly262.ps[1] = Point(3054.99, 728.5);\n    poly262.ps[2] = Point(2978.99, 728.5);\n    poly262.ps[3] = Point(2978.99, 688.5);\n    new ShapeRef(router, poly262, 262);\n\n    Polygon poly263(4);\n    poly263.ps[0] = Point(3054.99, 894.5);\n    poly263.ps[1] = Point(3054.99, 934.5);\n    poly263.ps[2] = Point(2978.99, 934.5);\n    poly263.ps[3] = Point(2978.99, 894.5);\n    new ShapeRef(router, poly263, 263);\n\n    Polygon poly264(4);\n    poly264.ps[0] = Point(2327.79, 281.75);\n    poly264.ps[1] = Point(2327.79, 321.75);\n    poly264.ps[2] = Point(2251.79, 321.75);\n    poly264.ps[3] = Point(2251.79, 281.75);\n    new ShapeRef(router, poly264, 264);\n\n    Polygon poly265(4);\n    poly265.ps[0] = Point(2505.71, 150.875);\n    poly265.ps[1] = Point(2505.71, 210.875);\n    poly265.ps[2] = Point(2449.71, 210.875);\n    poly265.ps[3] = Point(2449.71, 150.875);\n    new ShapeRef(router, poly265, 265);\n\n    Polygon poly266(4);\n    poly266.ps[0] = Point(2633.71, 281.75);\n    poly266.ps[1] = Point(2633.71, 321.75);\n    poly266.ps[2] = Point(2557.71, 321.75);\n    poly266.ps[3] = Point(2557.71, 281.75);\n    new ShapeRef(router, poly266, 266);\n\n    Polygon poly267(4);\n    poly267.ps[0] = Point(2693.54, 150.875);\n    poly267.ps[1] = Point(2693.54, 210.875);\n    poly267.ps[2] = Point(2637.54, 210.875);\n    poly267.ps[3] = Point(2637.54, 150.875);\n    new ShapeRef(router, poly267, 267);\n\n    Polygon poly268(4);\n    poly268.ps[0] = Point(2693.54, 367.7);\n    poly268.ps[1] = Point(2693.54, 427.7);\n    poly268.ps[2] = Point(2637.54, 427.7);\n    poly268.ps[3] = Point(2637.54, 367.7);\n    new ShapeRef(router, poly268, 268);\n\n    Polygon poly269(4);\n    poly269.ps[0] = Point(2947.99, 367.7);\n    poly269.ps[1] = Point(2947.99, 427.7);\n    poly269.ps[2] = Point(2891.99, 427.7);\n    poly269.ps[3] = Point(2891.99, 367.7);\n    new ShapeRef(router, poly269, 269);\n\n    Polygon poly270(4);\n    poly270.ps[0] = Point(3225.24, 281.75);\n    poly270.ps[1] = Point(3225.24, 321.75);\n    poly270.ps[2] = Point(3149.24, 321.75);\n    poly270.ps[3] = Point(3149.24, 281.75);\n    new ShapeRef(router, poly270, 270);\n\n    Polygon poly271(4);\n    poly271.ps[0] = Point(3506.07, 844.5);\n    poly271.ps[1] = Point(3506.07, 904.5);\n    poly271.ps[2] = Point(3450.07, 904.5);\n    poly271.ps[3] = Point(3450.07, 844.5);\n    new ShapeRef(router, poly271, 271);\n\n    Polygon poly272(4);\n    poly272.ps[0] = Point(3564.07, 1852.95);\n    poly272.ps[1] = Point(3564.07, 1892.95);\n    poly272.ps[2] = Point(3488.07, 1892.95);\n    poly272.ps[3] = Point(3488.07, 1852.95);\n    new ShapeRef(router, poly272, 272);\n\n    Polygon poly273(4);\n    poly273.ps[0] = Point(3564.07, 2592.3);\n    poly273.ps[1] = Point(3564.07, 2632.3);\n    poly273.ps[2] = Point(3488.07, 2632.3);\n    poly273.ps[3] = Point(3488.07, 2592.3);\n    new ShapeRef(router, poly273, 273);\n\n    Polygon poly274(4);\n    poly274.ps[0] = Point(2815.54, 3427.3);\n    poly274.ps[1] = Point(2815.54, 3487.3);\n    poly274.ps[2] = Point(2759.54, 3487.3);\n    poly274.ps[3] = Point(2759.54, 3427.3);\n    new ShapeRef(router, poly274, 274);\n\n    Polygon poly275(4);\n    poly275.ps[0] = Point(2815.54, 3529.3);\n    poly275.ps[1] = Point(2815.54, 3589.3);\n    poly275.ps[2] = Point(2759.54, 3589.3);\n    poly275.ps[3] = Point(2759.54, 3529.3);\n    new ShapeRef(router, poly275, 275);\n\n    Polygon poly276(4);\n    poly276.ps[0] = Point(3682.07, 2592.3);\n    poly276.ps[1] = Point(3682.07, 2632.3);\n    poly276.ps[2] = Point(3606.07, 2632.3);\n    poly276.ps[3] = Point(3606.07, 2592.3);\n    new ShapeRef(router, poly276, 276);\n\n    Polygon poly277(4);\n    poly277.ps[0] = Point(3682.07, 894.5);\n    poly277.ps[1] = Point(3682.07, 934.5);\n    poly277.ps[2] = Point(3606.07, 934.5);\n    poly277.ps[3] = Point(3606.07, 894.5);\n    new ShapeRef(router, poly277, 277);\n\n    Polygon poly278(4);\n    poly278.ps[0] = Point(3412.74, 894.5);\n    poly278.ps[1] = Point(3412.74, 934.5);\n    poly278.ps[2] = Point(3336.74, 934.5);\n    poly278.ps[3] = Point(3336.74, 894.5);\n    new ShapeRef(router, poly278, 278);\n\n    Polygon poly279(4);\n    poly279.ps[0] = Point(3244.44, 2329.05);\n    poly279.ps[1] = Point(3244.44, 2389.05);\n    poly279.ps[2] = Point(3188.44, 2389.05);\n    poly279.ps[3] = Point(3188.44, 2329.05);\n    new ShapeRef(router, poly279, 279);\n\n    Polygon poly280(4);\n    poly280.ps[0] = Point(3244.44, 2227.05);\n    poly280.ps[1] = Point(3244.44, 2287.05);\n    poly280.ps[2] = Point(3188.44, 2287.05);\n    poly280.ps[3] = Point(3188.44, 2227.05);\n    new ShapeRef(router, poly280, 280);\n\n    Polygon poly281(4);\n    poly281.ps[0] = Point(2815.54, 2227.05);\n    poly281.ps[1] = Point(2815.54, 2287.05);\n    poly281.ps[2] = Point(2759.54, 2287.05);\n    poly281.ps[3] = Point(2759.54, 2227.05);\n    new ShapeRef(router, poly281, 281);\n\n    Polygon poly282(4);\n    poly282.ps[0] = Point(3244.44, 844.5);\n    poly282.ps[1] = Point(3244.44, 904.5);\n    poly282.ps[2] = Point(3188.44, 904.5);\n    poly282.ps[3] = Point(3188.44, 844.5);\n    new ShapeRef(router, poly282, 282);\n\n    Polygon poly283(4);\n    poly283.ps[0] = Point(2815.54, 2115.05);\n    poly283.ps[1] = Point(2815.54, 2175.05);\n    poly283.ps[2] = Point(2759.54, 2175.05);\n    poly283.ps[3] = Point(2759.54, 2115.05);\n    new ShapeRef(router, poly283, 283);\n\n    Polygon poly284(4);\n    poly284.ps[0] = Point(2427.71, 2115.05);\n    poly284.ps[1] = Point(2427.71, 2175.05);\n    poly284.ps[2] = Point(2371.71, 2175.05);\n    poly284.ps[3] = Point(2371.71, 2115.05);\n    new ShapeRef(router, poly284, 284);\n\n    Polygon poly285(4);\n    poly285.ps[0] = Point(1954.79, 2115.05);\n    poly285.ps[1] = Point(1954.79, 2175.05);\n    poly285.ps[2] = Point(1898.79, 2175.05);\n    poly285.ps[3] = Point(1898.79, 2115.05);\n    new ShapeRef(router, poly285, 285);\n\n    Polygon poly286(4);\n    poly286.ps[0] = Point(739.958, 2115.05);\n    poly286.ps[1] = Point(739.958, 2175.05);\n    poly286.ps[2] = Point(683.958, 2175.05);\n    poly286.ps[3] = Point(683.958, 2115.05);\n    new ShapeRef(router, poly286, 286);\n\n    Polygon poly287(4);\n    poly287.ps[0] = Point(1649.6, 2003.95);\n    poly287.ps[1] = Point(1649.6, 2043.95);\n    poly287.ps[2] = Point(1573.6, 2043.95);\n    poly287.ps[3] = Point(1573.6, 2003.95);\n    new ShapeRef(router, poly287, 287);\n\n    Polygon poly288(4);\n    poly288.ps[0] = Point(739.958, 1308.24);\n    poly288.ps[1] = Point(739.958, 1368.24);\n    poly288.ps[2] = Point(683.958, 1368.24);\n    poly288.ps[3] = Point(683.958, 1308.24);\n    new ShapeRef(router, poly288, 288);\n\n    Polygon poly289(4);\n    poly289.ps[0] = Point(797.958, 1420.24);\n    poly289.ps[1] = Point(797.958, 1460.24);\n    poly289.ps[2] = Point(721.958, 1460.24);\n    poly289.ps[3] = Point(721.958, 1420.24);\n    new ShapeRef(router, poly289, 289);\n\n    Polygon poly290(4);\n    poly290.ps[0] = Point(1375.86, 1420.24);\n    poly290.ps[1] = Point(1375.86, 1460.24);\n    poly290.ps[2] = Point(1299.86, 1460.24);\n    poly290.ps[3] = Point(1299.86, 1420.24);\n    new ShapeRef(router, poly290, 290);\n\n    Polygon poly291(4);\n    poly291.ps[0] = Point(638.333, 2407.3);\n    poly291.ps[1] = Point(638.333, 2467.3);\n    poly291.ps[2] = Point(582.333, 2467.3);\n    poly291.ps[3] = Point(582.333, 2407.3);\n    new ShapeRef(router, poly291, 291);\n\n    Polygon poly292(4);\n    poly292.ps[0] = Point(696.333, 2592.3);\n    poly292.ps[1] = Point(696.333, 2632.3);\n    poly292.ps[2] = Point(620.333, 2632.3);\n    poly292.ps[3] = Point(620.333, 2592.3);\n    new ShapeRef(router, poly292, 292);\n\n    Polygon poly293(4);\n    poly293.ps[0] = Point(638.333, 3081.3);\n    poly293.ps[1] = Point(638.333, 3141.3);\n    poly293.ps[2] = Point(582.333, 3141.3);\n    poly293.ps[3] = Point(582.333, 3081.3);\n    new ShapeRef(router, poly293, 293);\n\n    Polygon poly294(4);\n    poly294.ps[0] = Point(1187.96, 2592.3);\n    poly294.ps[1] = Point(1187.96, 2632.3);\n    poly294.ps[2] = Point(1111.96, 2632.3);\n    poly294.ps[3] = Point(1111.96, 2592.3);\n    new ShapeRef(router, poly294, 294);\n\n    Polygon poly295(4);\n    poly295.ps[0] = Point(1305.96, 2592.3);\n    poly295.ps[1] = Point(1305.96, 2632.3);\n    poly295.ps[2] = Point(1229.96, 2632.3);\n    poly295.ps[3] = Point(1229.96, 2592.3);\n    new ShapeRef(router, poly295, 295);\n\n    Polygon poly296(4);\n    poly296.ps[0] = Point(1732.79, 2737.3);\n    poly296.ps[1] = Point(1732.79, 2777.3);\n    poly296.ps[2] = Point(1656.79, 2777.3);\n    poly296.ps[3] = Point(1656.79, 2737.3);\n    new ShapeRef(router, poly296, 296);\n\n    Polygon poly297(4);\n    poly297.ps[0] = Point(1649.6, 2668.3);\n    poly297.ps[1] = Point(1649.6, 2708.3);\n    poly297.ps[2] = Point(1573.6, 2708.3);\n    poly297.ps[3] = Point(1573.6, 2668.3);\n    new ShapeRef(router, poly297, 297);\n\n    Polygon poly298(4);\n    poly298.ps[0] = Point(1528.46, 2737.3);\n    poly298.ps[1] = Point(1528.46, 2777.3);\n    poly298.ps[2] = Point(1452.46, 2777.3);\n    poly298.ps[3] = Point(1452.46, 2737.3);\n    new ShapeRef(router, poly298, 298);\n\n    Polygon poly299(4);\n    poly299.ps[0] = Point(1732.79, 3120.3);\n    poly299.ps[1] = Point(1732.79, 3160.3);\n    poly299.ps[2] = Point(1656.79, 3160.3);\n    poly299.ps[3] = Point(1656.79, 3120.3);\n    new ShapeRef(router, poly299, 299);\n\n    Polygon poly300(4);\n    poly300.ps[0] = Point(1528.46, 3120.3);\n    poly300.ps[1] = Point(1528.46, 3160.3);\n    poly300.ps[2] = Point(1452.46, 3160.3);\n    poly300.ps[3] = Point(1452.46, 3120.3);\n    new ShapeRef(router, poly300, 300);\n\n    Polygon poly301(4);\n    poly301.ps[0] = Point(1649.6, 3051.3);\n    poly301.ps[1] = Point(1649.6, 3091.3);\n    poly301.ps[2] = Point(1573.6, 3091.3);\n    poly301.ps[3] = Point(1573.6, 3051.3);\n    new ShapeRef(router, poly301, 301);\n\n    Polygon poly302(4);\n    poly302.ps[0] = Point(2257.79, 2679.3);\n    poly302.ps[1] = Point(2257.79, 2739.3);\n    poly302.ps[2] = Point(2201.79, 2739.3);\n    poly302.ps[3] = Point(2201.79, 2679.3);\n    new ShapeRef(router, poly302, 302);\n\n    Polygon poly303(4);\n    poly303.ps[0] = Point(2420.71, 2592.3);\n    poly303.ps[1] = Point(2420.71, 2632.3);\n    poly303.ps[2] = Point(2344.71, 2632.3);\n    poly303.ps[3] = Point(2344.71, 2592.3);\n    new ShapeRef(router, poly303, 303);\n\n    Polygon poly304(4);\n    poly304.ps[0] = Point(2505.71, 2965.3);\n    poly304.ps[1] = Point(2505.71, 3025.3);\n    poly304.ps[2] = Point(2449.71, 3025.3);\n    poly304.ps[3] = Point(2449.71, 2965.3);\n    new ShapeRef(router, poly304, 304);\n\n    Polygon poly305(4);\n    poly305.ps[0] = Point(840.958, 2457.3);\n    poly305.ps[1] = Point(840.958, 2497.3);\n    poly305.ps[2] = Point(764.958, 2497.3);\n    poly305.ps[3] = Point(764.958, 2457.3);\n    new ShapeRef(router, poly305, 305);\n\n    Polygon poly306(4);\n    poly306.ps[0] = Point(986.958, 2407.3);\n    poly306.ps[1] = Point(986.958, 2467.3);\n    poly306.ps[2] = Point(930.958, 2467.3);\n    poly306.ps[3] = Point(930.958, 2407.3);\n    new ShapeRef(router, poly306, 306);\n\n    Polygon poly307(4);\n    poly307.ps[0] = Point(962.358, 2592.3);\n    poly307.ps[1] = Point(962.358, 2632.3);\n    poly307.ps[2] = Point(886.358, 2632.3);\n    poly307.ps[3] = Point(886.358, 2592.3);\n    new ShapeRef(router, poly307, 307);\n\n    Polygon poly308(4);\n    poly308.ps[0] = Point(962.358, 2737.3);\n    poly308.ps[1] = Point(962.358, 2777.3);\n    poly308.ps[2] = Point(886.358, 2777.3);\n    poly308.ps[3] = Point(886.358, 2737.3);\n    new ShapeRef(router, poly308, 308);\n\n    Polygon poly309(4);\n    poly309.ps[0] = Point(904.358, 3001.3);\n    poly309.ps[1] = Point(904.358, 3061.3);\n    poly309.ps[2] = Point(848.358, 3061.3);\n    poly309.ps[3] = Point(848.358, 3001.3);\n    new ShapeRef(router, poly309, 309);\n\n    Polygon poly310(4);\n    poly310.ps[0] = Point(2199.79, 971.643);\n    poly310.ps[1] = Point(2199.79, 1031.64);\n    poly310.ps[2] = Point(2143.79, 1031.64);\n    poly310.ps[3] = Point(2143.79, 971.643);\n    new ShapeRef(router, poly310, 310);\n\n    Polygon poly311(4);\n    poly311.ps[0] = Point(2505.71, 971.643);\n    poly311.ps[1] = Point(2505.71, 1031.64);\n    poly311.ps[2] = Point(2449.71, 1031.64);\n    poly311.ps[3] = Point(2449.71, 971.643);\n    new ShapeRef(router, poly311, 311);\n\n    Polygon poly312(4);\n    poly312.ps[0] = Point(2269.79, 1153.64);\n    poly312.ps[1] = Point(2269.79, 1213.64);\n    poly312.ps[2] = Point(2213.79, 1213.64);\n    poly312.ps[3] = Point(2213.79, 1153.64);\n    new ShapeRef(router, poly312, 312);\n\n    Polygon poly313(4);\n    poly313.ps[0] = Point(1797.79, 436.5);\n    poly313.ps[1] = Point(1797.79, 496.5);\n    poly313.ps[2] = Point(1741.79, 496.5);\n    poly313.ps[3] = Point(1741.79, 436.5);\n    new ShapeRef(router, poly313, 313);\n\n    Polygon poly314(4);\n    poly314.ps[0] = Point(1797.79, 587.5);\n    poly314.ps[1] = Point(1797.79, 647.5);\n    poly314.ps[2] = Point(1741.79, 647.5);\n    poly314.ps[3] = Point(1741.79, 587.5);\n    new ShapeRef(router, poly314, 314);\n\n    Polygon poly315(4);\n    poly315.ps[0] = Point(2127.79, 1256.24);\n    poly315.ps[1] = Point(2127.79, 1296.24);\n    poly315.ps[2] = Point(2051.79, 1296.24);\n    poly315.ps[3] = Point(2051.79, 1256.24);\n    new ShapeRef(router, poly315, 315);\n\n    Polygon poly316(4);\n    poly316.ps[0] = Point(409, 1105.24);\n    poly316.ps[1] = Point(409, 1145.24);\n    poly316.ps[2] = Point(333, 1145.24);\n    poly316.ps[3] = Point(333, 1105.24);\n    new ShapeRef(router, poly316, 316);\n\n    Polygon poly317(4);\n    poly317.ps[0] = Point(271, 1123.64);\n    poly317.ps[1] = Point(271, 1163.64);\n    poly317.ps[2] = Point(195, 1163.64);\n    poly317.ps[3] = Point(195, 1123.64);\n    new ShapeRef(router, poly317, 317);\n\n    Polygon poly318(4);\n    poly318.ps[0] = Point(551.333, 1123.64);\n    poly318.ps[1] = Point(551.333, 1163.64);\n    poly318.ps[2] = Point(475.333, 1163.64);\n    poly318.ps[3] = Point(475.333, 1123.64);\n    new ShapeRef(router, poly318, 318);\n\n    Polygon poly319(4);\n    poly319.ps[0] = Point(1810.79, 3331.3);\n    poly319.ps[1] = Point(1810.79, 3391.3);\n    poly319.ps[2] = Point(1754.79, 3391.3);\n    poly319.ps[3] = Point(1754.79, 3331.3);\n    new ShapeRef(router, poly319, 319);\n\n    Polygon poly320(4);\n    poly320.ps[0] = Point(1810.79, 3127.3);\n    poly320.ps[1] = Point(1810.79, 3187.3);\n    poly320.ps[2] = Point(1754.79, 3187.3);\n    poly320.ps[3] = Point(1754.79, 3127.3);\n    new ShapeRef(router, poly320, 320);\n\n    Polygon poly321(4);\n    poly321.ps[0] = Point(2803.54, 53.5);\n    poly321.ps[1] = Point(2803.54, 113.5);\n    poly321.ps[2] = Point(2747.54, 113.5);\n    poly321.ps[3] = Point(2747.54, 53.5);\n    new ShapeRef(router, poly321, 321);\n\n    Polygon poly322(4);\n    poly322.ps[0] = Point(1981.79, 2875.3);\n    poly322.ps[1] = Point(1981.79, 2935.3);\n    poly322.ps[2] = Point(1925.79, 2935.3);\n    poly322.ps[3] = Point(1925.79, 2875.3);\n    new ShapeRef(router, poly322, 322);\n\n    Polygon poly323(4);\n    poly323.ps[0] = Point(2199.79, 150.875);\n    poly323.ps[1] = Point(2199.79, 210.875);\n    poly323.ps[2] = Point(2143.79, 210.875);\n    poly323.ps[3] = Point(2143.79, 150.875);\n    new ShapeRef(router, poly323, 323);\n\n    Polygon poly324(4);\n    poly324.ps[0] = Point(1954.79, 1802.95);\n    poly324.ps[1] = Point(1954.79, 1862.95);\n    poly324.ps[2] = Point(1898.79, 1862.95);\n    poly324.ps[3] = Point(1898.79, 1802.95);\n    new ShapeRef(router, poly324, 324);\n\n    Polygon poly325(4);\n    poly325.ps[0] = Point(1492.46, 1802.95);\n    poly325.ps[1] = Point(1492.46, 1862.95);\n    poly325.ps[2] = Point(1436.46, 1862.95);\n    poly325.ps[3] = Point(1436.46, 1802.95);\n    new ShapeRef(router, poly325, 325);\n\n    Polygon poly326(4);\n    poly326.ps[0] = Point(1000.96, 1802.95);\n    poly326.ps[1] = Point(1000.96, 1862.95);\n    poly326.ps[2] = Point(944.958, 1862.95);\n    poly326.ps[3] = Point(944.958, 1802.95);\n    new ShapeRef(router, poly326, 326);\n\n    Polygon poly327(4);\n    poly327.ps[0] = Point(3079.24, 281.75);\n    poly327.ps[1] = Point(3079.24, 321.75);\n    poly327.ps[2] = Point(3003.24, 321.75);\n    poly327.ps[3] = Point(3003.24, 281.75);\n    new ShapeRef(router, poly327, 327);\n\n    Polygon poly328(4);\n    poly328.ps[0] = Point(2127.79, 2729.3);\n    poly328.ps[1] = Point(2127.79, 2769.3);\n    poly328.ps[2] = Point(2051.79, 2769.3);\n    poly328.ps[3] = Point(2051.79, 2729.3);\n    new ShapeRef(router, poly328, 328);\n\n    Polygon poly329(4);\n    poly329.ps[0] = Point(1947.79, 2729.3);\n    poly329.ps[1] = Point(1947.79, 2769.3);\n    poly329.ps[2] = Point(1871.79, 2769.3);\n    poly329.ps[3] = Point(1871.79, 2729.3);\n    new ShapeRef(router, poly329, 329);\n\n    Polygon poly330(4);\n    poly330.ps[0] = Point(1159.18, 688.5);\n    poly330.ps[1] = Point(1159.18, 728.5);\n    poly330.ps[2] = Point(1083.18, 728.5);\n    poly330.ps[3] = Point(1083.18, 688.5);\n    new ShapeRef(router, poly330, 330);\n\n    Polygon poly331(4);\n    poly331.ps[0] = Point(1257.46, 499.7);\n    poly331.ps[1] = Point(1257.46, 559.7);\n    poly331.ps[2] = Point(1201.46, 559.7);\n    poly331.ps[3] = Point(1201.46, 499.7);\n    new ShapeRef(router, poly331, 331);\n\n    Polygon poly332(4);\n    poly332.ps[0] = Point(962.358, 549.7);\n    poly332.ps[1] = Point(962.358, 589.7);\n    poly332.ps[2] = Point(886.358, 589.7);\n    poly332.ps[3] = Point(886.358, 549.7);\n    new ShapeRef(router, poly332, 332);\n\n    Polygon poly333(4);\n    poly333.ps[0] = Point(490.333, 492.5);\n    poly333.ps[1] = Point(490.333, 532.5);\n    poly333.ps[2] = Point(414.333, 532.5);\n    poly333.ps[3] = Point(414.333, 492.5);\n    new ShapeRef(router, poly333, 333);\n\n    Polygon poly334(4);\n    poly334.ps[0] = Point(2505.71, 2794.3);\n    poly334.ps[1] = Point(2505.71, 2854.3);\n    poly334.ps[2] = Point(2449.71, 2854.3);\n    poly334.ps[3] = Point(2449.71, 2794.3);\n    new ShapeRef(router, poly334, 334);\n\n    Polygon poly335(4);\n    poly335.ps[0] = Point(2938.99, 2542.3);\n    poly335.ps[1] = Point(2938.99, 2602.3);\n    poly335.ps[2] = Point(2882.99, 2602.3);\n    poly335.ps[3] = Point(2882.99, 2542.3);\n    new ShapeRef(router, poly335, 335);\n\n    Polygon poly336(4);\n    poly336.ps[0] = Point(3328.24, 2592.3);\n    poly336.ps[1] = Point(3328.24, 2632.3);\n    poly336.ps[2] = Point(3252.24, 2632.3);\n    poly336.ps[3] = Point(3252.24, 2592.3);\n    new ShapeRef(router, poly336, 336);\n\n    Polygon poly337(4);\n    poly337.ps[0] = Point(2912.99, 3001.3);\n    poly337.ps[1] = Point(2912.99, 3061.3);\n    poly337.ps[2] = Point(2856.99, 3061.3);\n    poly337.ps[3] = Point(2856.99, 3001.3);\n    new ShapeRef(router, poly337, 337);\n\n    Polygon poly338(4);\n    poly338.ps[0] = Point(3412.74, 3051.3);\n    poly338.ps[1] = Point(3412.74, 3091.3);\n    poly338.ps[2] = Point(3336.74, 3091.3);\n    poly338.ps[3] = Point(3336.74, 3051.3);\n    new ShapeRef(router, poly338, 338);\n\n    Polygon poly339(4);\n    poly339.ps[0] = Point(1810.79, 3229.3);\n    poly339.ps[1] = Point(1810.79, 3289.3);\n    poly339.ps[2] = Point(1754.79, 3289.3);\n    poly339.ps[3] = Point(1754.79, 3229.3);\n    new ShapeRef(router, poly339, 339);\n\n    Polygon poly340(4);\n    poly340.ps[0] = Point(1446.46, 172);\n    poly340.ps[1] = Point(1446.46, 232);\n    poly340.ps[2] = Point(1406.46, 232);\n    poly340.ps[3] = Point(1406.46, 172);\n    new ShapeRef(router, poly340, 340);\n\n    Polygon poly341(4);\n    poly341.ps[0] = Point(3101.74, 1542.44);\n    poly341.ps[1] = Point(3101.74, 1602.44);\n    poly341.ps[2] = Point(3061.74, 1602.44);\n    poly341.ps[3] = Point(3061.74, 1542.44);\n    new ShapeRef(router, poly341, 341);\n\n    Polygon poly342(4);\n    poly342.ps[0] = Point(3141.74, 1542.44);\n    poly342.ps[1] = Point(3141.74, 1602.44);\n    poly342.ps[2] = Point(3101.74, 1602.44);\n    poly342.ps[3] = Point(3101.74, 1542.44);\n    new ShapeRef(router, poly342, 342);\n\n    Polygon poly343(4);\n    poly343.ps[0] = Point(1962.3, 365);\n    poly343.ps[1] = Point(1962.3, 405);\n    poly343.ps[2] = Point(1902.3, 405);\n    poly343.ps[3] = Point(1902.3, 365);\n    new ShapeRef(router, poly343, 343);\n\n    Polygon poly344(4);\n    poly344.ps[0] = Point(1726.79, 1184.74);\n    poly344.ps[1] = Point(1726.79, 1224.74);\n    poly344.ps[2] = Point(1666.79, 1224.74);\n    poly344.ps[3] = Point(1666.79, 1184.74);\n    new ShapeRef(router, poly344, 344);\n\n    Polygon poly345(4);\n    poly345.ps[0] = Point(1923.79, 1184.74);\n    poly345.ps[1] = Point(1923.79, 1224.74);\n    poly345.ps[2] = Point(1863.79, 1224.74);\n    poly345.ps[3] = Point(1863.79, 1184.74);\n    new ShapeRef(router, poly345, 345);\n\n    Polygon poly346(4);\n    poly346.ps[0] = Point(1522.1, 2866.8);\n    poly346.ps[1] = Point(1522.1, 2906.8);\n    poly346.ps[2] = Point(1462.1, 2906.8);\n    poly346.ps[3] = Point(1462.1, 2866.8);\n    new ShapeRef(router, poly346, 346);\n\n    Polygon poly347(4);\n    poly347.ps[0] = Point(1395.6, 2799.8);\n    poly347.ps[1] = Point(1395.6, 2859.8);\n    poly347.ps[2] = Point(1355.6, 2859.8);\n    poly347.ps[3] = Point(1355.6, 2799.8);\n    new ShapeRef(router, poly347, 347);\n\n    Polygon poly348(4);\n    poly348.ps[0] = Point(1253.46, 326);\n    poly348.ps[1] = Point(1253.46, 386);\n    poly348.ps[2] = Point(1213.46, 386);\n    poly348.ps[3] = Point(1213.46, 326);\n    new ShapeRef(router, poly348, 348);\n\n    Polygon poly349(4);\n    poly349.ps[0] = Point(1315.36, 903);\n    poly349.ps[1] = Point(1315.36, 963);\n    poly349.ps[2] = Point(1275.36, 963);\n    poly349.ps[3] = Point(1275.36, 903);\n    new ShapeRef(router, poly349, 349);\n\n    Polygon poly350(4);\n    poly350.ps[0] = Point(2767.49, 1499.94);\n    poly350.ps[1] = Point(2767.49, 1539.94);\n    poly350.ps[2] = Point(2707.49, 1539.94);\n    poly350.ps[3] = Point(2707.49, 1499.94);\n    new ShapeRef(router, poly350, 350);\n\n    Polygon poly351(4);\n    poly351.ps[0] = Point(2627.04, 3113.8);\n    poly351.ps[1] = Point(2627.04, 3173.8);\n    poly351.ps[2] = Point(2587.04, 3173.8);\n    poly351.ps[3] = Point(2587.04, 3113.8);\n    new ShapeRef(router, poly351, 351);\n\n    Polygon poly352(4);\n    poly352.ps[0] = Point(2685.04, 2853.8);\n    poly352.ps[1] = Point(2685.04, 2893.8);\n    poly352.ps[2] = Point(2625.04, 2893.8);\n    poly352.ps[3] = Point(2625.04, 2853.8);\n    new ShapeRef(router, poly352, 352);\n\n    Polygon poly353(4);\n    poly353.ps[0] = Point(1823.33, 2280.88);\n    poly353.ps[1] = Point(1823.33, 2320.88);\n    poly353.ps[2] = Point(1763.33, 2320.88);\n    poly353.ps[3] = Point(1763.33, 2280.88);\n    new ShapeRef(router, poly353, 353);\n\n    ConnRef *connRef354 = new ConnRef(router, 354);\n    ConnEnd srcPt354(Point(1762.79, 157.5), 15);\n    connRef354->setSourceEndpoint(srcPt354);\n    ConnEnd dstPt354(Point(1927.29, 291.5), 4);\n    connRef354->setDestEndpoint(dstPt354);\n    connRef354->setRoutingType((ConnType)2);\n\n    ConnRef *connRef355 = new ConnRef(router, 355);\n    ConnEnd srcPt355(Point(1395.46, 693.5), 1);\n    connRef355->setSourceEndpoint(srcPt355);\n    ConnEnd dstPt355(Point(1385.86, 569.7), 15);\n    connRef355->setDestEndpoint(dstPt355);\n    connRef355->setRoutingType((ConnType)2);\n\n    ConnRef *connRef356 = new ConnRef(router, 356);\n    ConnEnd srcPt356(Point(1385.86, 569.7), 15);\n    connRef356->setSourceEndpoint(srcPt356);\n    ConnEnd dstPt356(Point(1527.46, 291.5), 4);\n    connRef356->setDestEndpoint(dstPt356);\n    connRef356->setRoutingType((ConnType)2);\n\n    ConnRef *connRef357 = new ConnRef(router, 357);\n    ConnEnd srcPt357(Point(1754.79, 506.5), 4);\n    connRef357->setSourceEndpoint(srcPt357);\n    ConnEnd dstPt357(Point(1385.86, 569.7), 15);\n    connRef357->setDestEndpoint(dstPt357);\n    connRef357->setRoutingType((ConnType)2);\n\n    ConnRef *connRef358 = new ConnRef(router, 358);\n    ConnEnd srcPt358(Point(1754.79, 577.5), 4);\n    connRef358->setSourceEndpoint(srcPt358);\n    ConnEnd dstPt358(Point(1385.86, 569.7), 15);\n    connRef358->setDestEndpoint(dstPt358);\n    connRef358->setRoutingType((ConnType)2);\n\n    ConnRef *connRef359 = new ConnRef(router, 359);\n    ConnEnd srcPt359(Point(1244.46, 569.7), 8);\n    connRef359->setSourceEndpoint(srcPt359);\n    ConnEnd dstPt359(Point(1385.86, 569.7), 15);\n    connRef359->setDestEndpoint(dstPt359);\n    connRef359->setRoutingType((ConnType)2);\n\n    ConnRef *connRef360 = new ConnRef(router, 360);\n    ConnEnd srcPt360(Point(1957.29, 291.5), 8);\n    connRef360->setSourceEndpoint(srcPt360);\n    ConnEnd dstPt360(Point(2041.79, 569.7), 15);\n    connRef360->setDestEndpoint(dstPt360);\n    connRef360->setRoutingType((ConnType)2);\n\n    ConnRef *connRef361 = new ConnRef(router, 361);\n    ConnEnd srcPt361(Point(2041.79, 569.7), 15);\n    connRef361->setSourceEndpoint(srcPt361);\n    ConnEnd dstPt361(Point(2041.79, 777.5), 8);\n    connRef361->setDestEndpoint(dstPt361);\n    connRef361->setRoutingType((ConnType)2);\n\n    ConnRef *connRef362 = new ConnRef(router, 362);\n    ConnEnd srcPt362(Point(2241.79, 693.5), 1);\n    connRef362->setSourceEndpoint(srcPt362);\n    ConnEnd dstPt362(Point(2041.79, 569.7), 15);\n    connRef362->setDestEndpoint(dstPt362);\n    connRef362->setRoutingType((ConnType)2);\n\n    ConnRef *connRef363 = new ConnRef(router, 363);\n    ConnEnd srcPt363(Point(2547.71, 693.5), 1);\n    connRef363->setSourceEndpoint(srcPt363);\n    ConnEnd dstPt363(Point(2041.79, 569.7), 15);\n    connRef363->setDestEndpoint(dstPt363);\n    connRef363->setRoutingType((ConnType)2);\n\n    ConnRef *connRef364 = new ConnRef(router, 364);\n    ConnEnd srcPt364(Point(2041.79, 569.7), 15);\n    connRef364->setSourceEndpoint(srcPt364);\n    ConnEnd dstPt364(Point(2787.54, 693.5), 1);\n    connRef364->setDestEndpoint(dstPt364);\n    connRef364->setRoutingType((ConnType)2);\n\n    ConnRef *connRef365 = new ConnRef(router, 365);\n    ConnEnd srcPt365(Point(2041.79, 569.7), 15);\n    connRef365->setSourceEndpoint(srcPt365);\n    ConnEnd dstPt365(Point(2968.99, 693.5), 1);\n    connRef365->setDestEndpoint(dstPt365);\n    connRef365->setRoutingType((ConnType)2);\n\n    ConnRef *connRef366 = new ConnRef(router, 366);\n    ConnEnd srcPt366(Point(2241.79, 316.75), 2);\n    connRef366->setSourceEndpoint(srcPt366);\n    ConnEnd dstPt366(Point(2041.79, 569.7), 15);\n    connRef366->setDestEndpoint(dstPt366);\n    connRef366->setRoutingType((ConnType)2);\n\n    ConnRef *connRef367 = new ConnRef(router, 367);\n    ConnEnd srcPt367(Point(2041.79, 569.7), 15);\n    connRef367->setSourceEndpoint(srcPt367);\n    ConnEnd dstPt367(Point(3463.07, 914.5), 4);\n    connRef367->setDestEndpoint(dstPt367);\n    connRef367->setRoutingType((ConnType)2);\n\n    ConnRef *connRef368 = new ConnRef(router, 368);\n    ConnEnd srcPt368(Point(2041.79, 569.7), 15);\n    connRef368->setSourceEndpoint(srcPt368);\n    ConnEnd dstPt368(Point(3596.07, 899.5), 1);\n    connRef368->setDestEndpoint(dstPt368);\n    connRef368->setRoutingType((ConnType)2);\n\n    ConnRef *connRef369 = new ConnRef(router, 369);\n    ConnEnd srcPt369(Point(2041.79, 569.7), 15);\n    connRef369->setSourceEndpoint(srcPt369);\n    ConnEnd dstPt369(Point(3326.74, 899.5), 1);\n    connRef369->setDestEndpoint(dstPt369);\n    connRef369->setRoutingType((ConnType)2);\n\n    ConnRef *connRef370 = new ConnRef(router, 370);\n    ConnEnd srcPt370(Point(2041.79, 569.7), 15);\n    connRef370->setSourceEndpoint(srcPt370);\n    ConnEnd dstPt370(Point(3201.44, 914.5), 4);\n    connRef370->setDestEndpoint(dstPt370);\n    connRef370->setRoutingType((ConnType)2);\n\n    ConnRef *connRef371 = new ConnRef(router, 371);\n    ConnEnd srcPt371(Point(1784.79, 506.5), 8);\n    connRef371->setSourceEndpoint(srcPt371);\n    ConnEnd dstPt371(Point(2041.79, 569.7), 15);\n    connRef371->setDestEndpoint(dstPt371);\n    connRef371->setRoutingType((ConnType)2);\n\n    ConnRef *connRef372 = new ConnRef(router, 372);\n    ConnEnd srcPt372(Point(1784.79, 577.5), 8);\n    connRef372->setSourceEndpoint(srcPt372);\n    ConnEnd dstPt372(Point(2041.79, 569.7), 15);\n    connRef372->setDestEndpoint(dstPt372);\n    connRef372->setRoutingType((ConnType)2);\n\n    ConnRef *connRef373 = new ConnRef(router, 373);\n    ConnEnd srcPt373(Point(1563.6, 978.5), 15);\n    connRef373->setSourceEndpoint(srcPt373);\n    ConnEnd dstPt373(Point(1395.46, 723.5), 2);\n    connRef373->setDestEndpoint(dstPt373);\n    connRef373->setRoutingType((ConnType)2);\n\n    ConnRef *connRef374 = new ConnRef(router, 374);\n    ConnEnd srcPt374(Point(2011.79, 777.5), 4);\n    connRef374->setSourceEndpoint(srcPt374);\n    ConnEnd dstPt374(Point(1563.6, 978.5), 15);\n    connRef374->setDestEndpoint(dstPt374);\n    connRef374->setRoutingType((ConnType)2);\n\n    ConnRef *connRef375 = new ConnRef(router, 375);\n    ConnEnd srcPt375(Point(1400.86, 969.5), 8);\n    connRef375->setSourceEndpoint(srcPt375);\n    ConnEnd dstPt375(Point(1563.6, 978.5), 15);\n    connRef375->setDestEndpoint(dstPt375);\n    connRef375->setRoutingType((ConnType)2);\n\n    ConnRef *connRef376 = new ConnRef(router, 376);\n    ConnEnd srcPt376(Point(1400.86, 1041.64), 8);\n    connRef376->setSourceEndpoint(srcPt376);\n    ConnEnd dstPt376(Point(1563.6, 978.5), 15);\n    connRef376->setDestEndpoint(dstPt376);\n    connRef376->setRoutingType((ConnType)2);\n\n    ConnRef *connRef377 = new ConnRef(router, 377);\n    ConnEnd srcPt377(Point(1400.86, 1143.64), 8);\n    connRef377->setSourceEndpoint(srcPt377);\n    ConnEnd dstPt377(Point(1563.6, 978.5), 15);\n    connRef377->setDestEndpoint(dstPt377);\n    connRef377->setRoutingType((ConnType)2);\n\n    ConnRef *connRef378 = new ConnRef(router, 378);\n    ConnEnd srcPt378(Point(1646.79, 1261.24), 1);\n    connRef378->setSourceEndpoint(srcPt378);\n    ConnEnd dstPt378(Point(1563.6, 978.5), 15);\n    connRef378->setDestEndpoint(dstPt378);\n    connRef378->setRoutingType((ConnType)2);\n\n    ConnRef *connRef379 = new ConnRef(router, 379);\n    ConnEnd srcPt379(Point(1563.6, 978.5), 15);\n    connRef379->setSourceEndpoint(srcPt379);\n    ConnEnd dstPt379(Point(1563.6, 2008.95), 1);\n    connRef379->setDestEndpoint(dstPt379);\n    connRef379->setRoutingType((ConnType)2);\n\n    ConnRef *connRef380 = new ConnRef(router, 380);\n    ConnEnd srcPt380(Point(2041.79, 1261.24), 1);\n    connRef380->setSourceEndpoint(srcPt380);\n    ConnEnd dstPt380(Point(1563.6, 978.5), 15);\n    connRef380->setDestEndpoint(dstPt380);\n    connRef380->setRoutingType((ConnType)2);\n\n    ConnRef *connRef381 = new ConnRef(router, 381);\n    ConnEnd srcPt381(Point(555.333, 708.5), 8);\n    connRef381->setSourceEndpoint(srcPt381);\n    ConnEnd dstPt381(Point(610.333, 833.833), 15);\n    connRef381->setDestEndpoint(dstPt381);\n    connRef381->setRoutingType((ConnType)2);\n\n    ConnRef *connRef382 = new ConnRef(router, 382);\n    ConnEnd srcPt382(Point(555.333, 833.833), 8);\n    connRef382->setSourceEndpoint(srcPt382);\n    ConnEnd dstPt382(Point(610.333, 833.833), 15);\n    connRef382->setDestEndpoint(dstPt382);\n    connRef382->setRoutingType((ConnType)2);\n\n    ConnRef *connRef383 = new ConnRef(router, 383);\n    ConnEnd srcPt383(Point(610.333, 833.833), 15);\n    connRef383->setSourceEndpoint(srcPt383);\n    ConnEnd dstPt383(Point(1395.46, 723.5), 2);\n    connRef383->setDestEndpoint(dstPt383);\n    connRef383->setRoutingType((ConnType)2);\n\n    ConnRef *connRef384 = new ConnRef(router, 384);\n    ConnEnd srcPt384(Point(610.333, 833.833), 15);\n    connRef384->setSourceEndpoint(srcPt384);\n    ConnEnd dstPt384(Point(1073.18, 723.5), 2);\n    connRef384->setDestEndpoint(dstPt384);\n    connRef384->setRoutingType((ConnType)2);\n\n    ConnRef *connRef385 = new ConnRef(router, 385);\n    ConnEnd srcPt385(Point(610.333, 833.833), 15);\n    connRef385->setSourceEndpoint(srcPt385);\n    ConnEnd dstPt385(Point(876.358, 584.7), 2);\n    connRef385->setDestEndpoint(dstPt385);\n    connRef385->setRoutingType((ConnType)2);\n\n    ConnRef *connRef386 = new ConnRef(router, 386);\n    ConnEnd srcPt386(Point(390.333, 2399.05), 15);\n    connRef386->setSourceEndpoint(srcPt386);\n    ConnEnd dstPt386(Point(525.333, 1276.24), 4);\n    connRef386->setDestEndpoint(dstPt386);\n    connRef386->setRoutingType((ConnType)2);\n\n    ConnRef *connRef387 = new ConnRef(router, 387);\n    ConnEnd srcPt387(Point(696.958, 2185.05), 4);\n    connRef387->setSourceEndpoint(srcPt387);\n    ConnEnd dstPt387(Point(390.333, 2399.05), 15);\n    connRef387->setDestEndpoint(dstPt387);\n    connRef387->setRoutingType((ConnType)2);\n\n    ConnRef *connRef388 = new ConnRef(router, 388);\n    ConnEnd srcPt388(Point(696.958, 1378.24), 4);\n    connRef388->setSourceEndpoint(srcPt388);\n    ConnEnd dstPt388(Point(390.333, 2399.05), 15);\n    connRef388->setDestEndpoint(dstPt388);\n    connRef388->setRoutingType((ConnType)2);\n\n    ConnRef *connRef389 = new ConnRef(router, 389);\n    ConnEnd srcPt389(Point(390.333, 2399.05), 15);\n    connRef389->setSourceEndpoint(srcPt389);\n    ConnEnd dstPt389(Point(711.958, 1455.24), 2);\n    connRef389->setDestEndpoint(dstPt389);\n    connRef389->setRoutingType((ConnType)2);\n\n    ConnRef *connRef390 = new ConnRef(router, 390);\n    ConnEnd srcPt390(Point(390.333, 2399.05), 15);\n    connRef390->setSourceEndpoint(srcPt390);\n    ConnEnd dstPt390(Point(625.333, 2477.3), 8);\n    connRef390->setDestEndpoint(dstPt390);\n    connRef390->setRoutingType((ConnType)2);\n\n    ConnRef *connRef391 = new ConnRef(router, 391);\n    ConnEnd srcPt391(Point(625.333, 3071.3), 8);\n    connRef391->setSourceEndpoint(srcPt391);\n    ConnEnd dstPt391(Point(390.333, 2399.05), 15);\n    connRef391->setDestEndpoint(dstPt391);\n    connRef391->setRoutingType((ConnType)2);\n\n    ConnRef *connRef392 = new ConnRef(router, 392);\n    ConnEnd srcPt392(Point(323, 1140.24), 2);\n    connRef392->setSourceEndpoint(srcPt392);\n    ConnEnd dstPt392(Point(390.333, 2399.05), 15);\n    connRef392->setDestEndpoint(dstPt392);\n    connRef392->setRoutingType((ConnType)2);\n\n    ConnRef *connRef393 = new ConnRef(router, 393);\n    ConnEnd srcPt393(Point(281, 1158.64), 2);\n    connRef393->setSourceEndpoint(srcPt393);\n    ConnEnd dstPt393(Point(390.333, 2399.05), 15);\n    connRef393->setDestEndpoint(dstPt393);\n    connRef393->setRoutingType((ConnType)2);\n\n    ConnRef *connRef394 = new ConnRef(router, 394);\n    ConnEnd srcPt394(Point(465.333, 1158.64), 2);\n    connRef394->setSourceEndpoint(srcPt394);\n    ConnEnd dstPt394(Point(390.333, 2399.05), 15);\n    connRef394->setDestEndpoint(dstPt394);\n    connRef394->setRoutingType((ConnType)2);\n\n    ConnRef *connRef395 = new ConnRef(router, 395);\n    ConnEnd srcPt395(Point(1523.87, 1631.77), 15);\n    connRef395->setSourceEndpoint(srcPt395);\n    ConnEnd dstPt395(Point(390.333, 2399.05), 15);\n    connRef395->setDestEndpoint(dstPt395);\n    connRef395->setRoutingType((ConnType)2);\n\n    ConnRef *connRef396 = new ConnRef(router, 396);\n    ConnEnd srcPt396(Point(3201.44, 2399.05), 4);\n    connRef396->setSourceEndpoint(srcPt396);\n    ConnEnd dstPt396(Point(1563.6, 2399.05), 15);\n    connRef396->setDestEndpoint(dstPt396);\n    connRef396->setRoutingType((ConnType)2);\n\n    ConnRef *connRef397 = new ConnRef(router, 397);\n    ConnEnd srcPt397(Point(2772.54, 2297.05), 4);\n    connRef397->setSourceEndpoint(srcPt397);\n    ConnEnd dstPt397(Point(1563.6, 2399.05), 15);\n    connRef397->setDestEndpoint(dstPt397);\n    connRef397->setRoutingType((ConnType)2);\n\n    ConnRef *connRef398 = new ConnRef(router, 398);\n    ConnEnd srcPt398(Point(1563.6, 2038.95), 2);\n    connRef398->setSourceEndpoint(srcPt398);\n    ConnEnd dstPt398(Point(1563.6, 2399.05), 15);\n    connRef398->setDestEndpoint(dstPt398);\n    connRef398->setRoutingType((ConnType)2);\n\n    ConnRef *connRef399 = new ConnRef(router, 399);\n    ConnEnd srcPt399(Point(1563.6, 2399.05), 15);\n    connRef399->setSourceEndpoint(srcPt399);\n    ConnEnd dstPt399(Point(625.333, 2477.3), 8);\n    connRef399->setDestEndpoint(dstPt399);\n    connRef399->setRoutingType((ConnType)2);\n\n    ConnRef *connRef400 = new ConnRef(router, 400);\n    ConnEnd srcPt400(Point(1563.6, 2399.05), 15);\n    connRef400->setSourceEndpoint(srcPt400);\n    ConnEnd dstPt400(Point(1646.79, 2742.3), 1);\n    connRef400->setDestEndpoint(dstPt400);\n    connRef400->setRoutingType((ConnType)2);\n\n    ConnRef *connRef401 = new ConnRef(router, 401);\n    ConnEnd srcPt401(Point(1563.6, 2399.05), 15);\n    connRef401->setSourceEndpoint(srcPt401);\n    ConnEnd dstPt401(Point(2214.79, 2749.3), 4);\n    connRef401->setDestEndpoint(dstPt401);\n    connRef401->setRoutingType((ConnType)2);\n\n    ConnRef *connRef402 = new ConnRef(router, 402);\n    ConnEnd srcPt402(Point(1563.6, 2399.05), 15);\n    connRef402->setSourceEndpoint(srcPt402);\n    ConnEnd dstPt402(Point(850.958, 2462.3), 1);\n    connRef402->setDestEndpoint(dstPt402);\n    connRef402->setRoutingType((ConnType)2);\n\n    ConnRef *connRef403 = new ConnRef(router, 403);\n    ConnEnd srcPt403(Point(1563.6, 2399.05), 15);\n    connRef403->setSourceEndpoint(srcPt403);\n    ConnEnd dstPt403(Point(973.958, 2477.3), 8);\n    connRef403->setDestEndpoint(dstPt403);\n    connRef403->setRoutingType((ConnType)2);\n\n    ConnRef *connRef404 = new ConnRef(router, 404);\n    ConnEnd srcPt404(Point(1563.6, 2399.05), 15);\n    connRef404->setSourceEndpoint(srcPt404);\n    ConnEnd dstPt404(Point(2895.99, 2612.3), 4);\n    connRef404->setDestEndpoint(dstPt404);\n    connRef404->setRoutingType((ConnType)2);\n\n    ConnRef *connRef405 = new ConnRef(router, 405);\n    ConnEnd srcPt405(Point(1563.6, 2399.05), 15);\n    connRef405->setSourceEndpoint(srcPt405);\n    ConnEnd dstPt405(Point(2869.99, 3071.3), 4);\n    connRef405->setDestEndpoint(dstPt405);\n    connRef405->setRoutingType((ConnType)2);\n\n    ConnRef *connRef406 = new ConnRef(router, 406);\n    ConnEnd srcPt406(Point(726.958, 1378.24), 8);\n    connRef406->setSourceEndpoint(srcPt406);\n    ConnEnd dstPt406(Point(1782.79, 1378.24), 15);\n    connRef406->setDestEndpoint(dstPt406);\n    connRef406->setRoutingType((ConnType)2);\n\n    ConnRef *connRef407 = new ConnRef(router, 407);\n    ConnEnd srcPt407(Point(1782.79, 1569.64), 15);\n    connRef407->setSourceEndpoint(srcPt407);\n    ConnEnd dstPt407(Point(1385.86, 1455.24), 2);\n    connRef407->setDestEndpoint(dstPt407);\n    connRef407->setRoutingType((ConnType)2);\n\n    ConnRef *connRef408 = new ConnRef(router, 408);\n    ConnEnd srcPt408(Point(1919.87, 1601.64), 15);\n    connRef408->setSourceEndpoint(srcPt408);\n    ConnEnd dstPt408(Point(2041.79, 1569.64), 15);\n    connRef408->setDestEndpoint(dstPt408);\n    connRef408->setRoutingType((ConnType)2);\n\n    ConnRef *connRef409 = new ConnRef(router, 409);\n    ConnEnd srcPt409(Point(2041.79, 1569.64), 15);\n    connRef409->setSourceEndpoint(srcPt409);\n    ConnEnd dstPt409(Point(1941.79, 1653.64), 8);\n    connRef409->setDestEndpoint(dstPt409);\n    connRef409->setRoutingType((ConnType)2);\n\n    ConnRef *connRef410 = new ConnRef(router, 410);\n    ConnEnd srcPt410(Point(1958.29, 1455.24), 2);\n    connRef410->setSourceEndpoint(srcPt410);\n    ConnEnd dstPt410(Point(2041.79, 1569.64), 15);\n    connRef410->setDestEndpoint(dstPt410);\n    connRef410->setRoutingType((ConnType)2);\n\n    ConnRef *connRef411 = new ConnRef(router, 411);\n    ConnEnd srcPt411(Point(2041.79, 1569.64), 15);\n    connRef411->setSourceEndpoint(srcPt411);\n    ConnEnd dstPt411(Point(2041.79, 1707.64), 1);\n    connRef411->setDestEndpoint(dstPt411);\n    connRef411->setRoutingType((ConnType)2);\n\n    ConnRef *connRef412 = new ConnRef(router, 412);\n    ConnEnd srcPt412(Point(2041.79, 1569.64), 15);\n    connRef412->setSourceEndpoint(srcPt412);\n    ConnEnd dstPt412(Point(2156.79, 1569.64), 4);\n    connRef412->setDestEndpoint(dstPt412);\n    connRef412->setRoutingType((ConnType)2);\n\n    ConnRef *connRef413 = new ConnRef(router, 413);\n    ConnEnd srcPt413(Point(2041.79, 1569.64), 15);\n    connRef413->setSourceEndpoint(srcPt413);\n    ConnEnd dstPt413(Point(2028.87, 1507.64), 15);\n    connRef413->setDestEndpoint(dstPt413);\n    connRef413->setRoutingType((ConnType)2);\n\n    ConnRef *connRef414 = new ConnRef(router, 414);\n    ConnEnd srcPt414(Point(1976.87, 1934.95), 15);\n    connRef414->setSourceEndpoint(srcPt414);\n    ConnEnd dstPt414(Point(2041.79, 1872.95), 15);\n    connRef414->setDestEndpoint(dstPt414);\n    connRef414->setRoutingType((ConnType)2);\n\n    ConnRef *connRef415 = new ConnRef(router, 415);\n    ConnEnd srcPt415(Point(2041.79, 1737.64), 2);\n    connRef415->setSourceEndpoint(srcPt415);\n    ConnEnd dstPt415(Point(2041.79, 1872.95), 15);\n    connRef415->setDestEndpoint(dstPt415);\n    connRef415->setRoutingType((ConnType)2);\n    */\n\n    ConnRef *connRef416 = new ConnRef(router, 416);\n    ConnEnd srcPt416(Point(2041.79, 1872.95), 15);\n    connRef416->setSourceEndpoint(srcPt416);\n    ConnEnd dstPt416(Point(2156.79, 1872.95), 4);\n    connRef416->setDestEndpoint(dstPt416);\n    connRef416->setRoutingType((ConnType)2);\n\n    /*\n    ConnRef *connRef417 = new ConnRef(router, 417);\n    ConnEnd srcPt417(Point(2111.79, 1884.95), 15);\n    connRef417->setSourceEndpoint(srcPt417);\n    ConnEnd dstPt417(Point(2041.79, 1872.95), 15);\n    connRef417->setDestEndpoint(dstPt417);\n    connRef417->setRoutingType((ConnType)2);\n\n    ConnRef *connRef418 = new ConnRef(router, 418);\n    ConnEnd srcPt418(Point(1941.79, 1872.95), 8);\n    connRef418->setSourceEndpoint(srcPt418);\n    ConnEnd dstPt418(Point(2041.79, 1872.95), 15);\n    connRef418->setDestEndpoint(dstPt418);\n    connRef418->setRoutingType((ConnType)2);\n\n    ConnRef *connRef419 = new ConnRef(router, 419);\n    ConnEnd srcPt419(Point(2189.79, 1733.77), 15);\n    connRef419->setSourceEndpoint(srcPt419);\n    ConnEnd dstPt419(Point(2547.71, 1872.95), 15);\n    connRef419->setDestEndpoint(dstPt419);\n    connRef419->setRoutingType((ConnType)2);\n\n    ConnRef *connRef420 = new ConnRef(router, 420);\n    ConnEnd srcPt420(Point(2492.71, 2013.95), 8);\n    connRef420->setSourceEndpoint(srcPt420);\n    ConnEnd dstPt420(Point(2547.71, 1872.95), 15);\n    connRef420->setDestEndpoint(dstPt420);\n    connRef420->setRoutingType((ConnType)2);\n\n    ConnRef *connRef421 = new ConnRef(router, 421);\n    ConnEnd srcPt421(Point(2492.71, 2055.95), 8);\n    connRef421->setSourceEndpoint(srcPt421);\n    ConnEnd dstPt421(Point(2547.71, 1872.95), 15);\n    connRef421->setDestEndpoint(dstPt421);\n    connRef421->setRoutingType((ConnType)2);\n\n    ConnRef *connRef422 = new ConnRef(router, 422);\n    ConnEnd srcPt422(Point(2547.71, 1872.95), 15);\n    connRef422->setSourceEndpoint(srcPt422);\n    ConnEnd dstPt422(Point(2645.54, 1812.64), 4);\n    connRef422->setDestEndpoint(dstPt422);\n    connRef422->setRoutingType((ConnType)2);\n\n    ConnRef *connRef423 = new ConnRef(router, 423);\n    ConnEnd srcPt423(Point(2547.71, 1872.95), 15);\n    connRef423->setSourceEndpoint(srcPt423);\n    ConnEnd dstPt423(Point(2622.54, 1884.95), 4);\n    connRef423->setDestEndpoint(dstPt423);\n    connRef423->setRoutingType((ConnType)2);\n\n    ConnRef *connRef424 = new ConnRef(router, 424);\n    ConnEnd srcPt424(Point(2547.71, 1872.95), 15);\n    connRef424->setSourceEndpoint(srcPt424);\n    ConnEnd dstPt424(Point(2720.54, 1884.95), 4);\n    connRef424->setDestEndpoint(dstPt424);\n    connRef424->setRoutingType((ConnType)2);\n\n    ConnRef *connRef425 = new ConnRef(router, 425);\n    ConnEnd srcPt425(Point(2787.54, 1872.95), 15);\n    connRef425->setSourceEndpoint(srcPt425);\n    ConnEnd dstPt425(Point(2883.99, 1812.64), 4);\n    connRef425->setDestEndpoint(dstPt425);\n    connRef425->setRoutingType((ConnType)2);\n\n    ConnRef *connRef426 = new ConnRef(router, 426);\n    ConnEnd srcPt426(Point(2787.54, 1872.95), 15);\n    connRef426->setSourceEndpoint(srcPt426);\n    ConnEnd dstPt426(Point(2860.99, 1884.95), 4);\n    connRef426->setDestEndpoint(dstPt426);\n    connRef426->setRoutingType((ConnType)2);\n\n    ConnRef *connRef427 = new ConnRef(router, 427);\n    ConnEnd srcPt427(Point(2787.54, 1872.95), 15);\n    connRef427->setSourceEndpoint(srcPt427);\n    ConnEnd dstPt427(Point(2938.99, 1884.95), 4);\n    connRef427->setDestEndpoint(dstPt427);\n    connRef427->setRoutingType((ConnType)2);\n\n    ConnRef *connRef428 = new ConnRef(router, 428);\n    ConnEnd srcPt428(Point(1315.96, 312.5), 15);\n    connRef428->setSourceEndpoint(srcPt428);\n    ConnEnd dstPt428(Point(1527.46, 291.5), 4);\n    connRef428->setDestEndpoint(dstPt428);\n    connRef428->setRoutingType((ConnType)2);\n\n    ConnRef *connRef429 = new ConnRef(router, 429);\n    ConnEnd srcPt429(Point(3216.44, 2185.05), 15);\n    connRef429->setSourceEndpoint(srcPt429);\n    ConnEnd dstPt429(Point(2802.54, 2185.05), 8);\n    connRef429->setDestEndpoint(dstPt429);\n    connRef429->setRoutingType((ConnType)2);\n\n    ConnRef *connRef430 = new ConnRef(router, 430);\n    ConnEnd srcPt430(Point(2772.54, 2185.05), 4);\n    connRef430->setSourceEndpoint(srcPt430);\n    ConnEnd dstPt430(Point(2547.71, 2185.05), 15);\n    connRef430->setDestEndpoint(dstPt430);\n    connRef430->setRoutingType((ConnType)2);\n\n    ConnRef *connRef431 = new ConnRef(router, 431);\n    ConnEnd srcPt431(Point(2547.71, 2185.05), 15);\n    connRef431->setSourceEndpoint(srcPt431);\n    ConnEnd dstPt431(Point(2414.71, 2185.05), 8);\n    connRef431->setDestEndpoint(dstPt431);\n    connRef431->setRoutingType((ConnType)2);\n\n    ConnRef *connRef432 = new ConnRef(router, 432);\n    ConnEnd srcPt432(Point(1911.79, 2185.05), 4);\n    connRef432->setSourceEndpoint(srcPt432);\n    ConnEnd dstPt432(Point(1073.18, 2185.05), 15);\n    connRef432->setDestEndpoint(dstPt432);\n    connRef432->setRoutingType((ConnType)2);\n\n    ConnRef *connRef433 = new ConnRef(router, 433);\n    ConnEnd srcPt433(Point(1073.18, 2185.05), 15);\n    connRef433->setSourceEndpoint(srcPt433);\n    ConnEnd dstPt433(Point(726.958, 2185.05), 8);\n    connRef433->setDestEndpoint(dstPt433);\n    connRef433->setRoutingType((ConnType)2);\n\n    ConnRef *connRef434 = new ConnRef(router, 434);\n    ConnEnd srcPt434(Point(1073.18, 1440.24), 15);\n    connRef434->setSourceEndpoint(srcPt434);\n    ConnEnd dstPt434(Point(1385.86, 1455.24), 2);\n    connRef434->setDestEndpoint(dstPt434);\n    connRef434->setRoutingType((ConnType)2);\n\n    ConnRef *connRef435 = new ConnRef(router, 435);\n    ConnEnd srcPt435(Point(323, 833.833), 15);\n    connRef435->setSourceEndpoint(srcPt435);\n    ConnEnd dstPt435(Point(131, 663.5), 2);\n    connRef435->setDestEndpoint(dstPt435);\n    connRef435->setRoutingType((ConnType)2);\n\n    ConnRef *connRef436 = new ConnRef(router, 436);\n    ConnEnd srcPt436(Point(525.333, 708.5), 4);\n    connRef436->setSourceEndpoint(srcPt436);\n    ConnEnd dstPt436(Point(323, 833.833), 15);\n    connRef436->setDestEndpoint(dstPt436);\n    connRef436->setRoutingType((ConnType)2);\n\n    ConnRef *connRef437 = new ConnRef(router, 437);\n    ConnEnd srcPt437(Point(323, 833.833), 15);\n    connRef437->setSourceEndpoint(srcPt437);\n    ConnEnd dstPt437(Point(525.333, 833.833), 4);\n    connRef437->setDestEndpoint(dstPt437);\n    connRef437->setRoutingType((ConnType)2);\n\n    ConnRef *connRef438 = new ConnRef(router, 438);\n    ConnEnd srcPt438(Point(323, 1110.24), 1);\n    connRef438->setSourceEndpoint(srcPt438);\n    ConnEnd dstPt438(Point(323, 833.833), 15);\n    connRef438->setDestEndpoint(dstPt438);\n    connRef438->setRoutingType((ConnType)2);\n\n    ConnRef *connRef439 = new ConnRef(router, 439);\n    ConnEnd srcPt439(Point(281, 1128.64), 1);\n    connRef439->setSourceEndpoint(srcPt439);\n    ConnEnd dstPt439(Point(323, 833.833), 15);\n    connRef439->setDestEndpoint(dstPt439);\n    connRef439->setRoutingType((ConnType)2);\n\n    ConnRef *connRef440 = new ConnRef(router, 440);\n    ConnEnd srcPt440(Point(465.333, 1128.64), 1);\n    connRef440->setSourceEndpoint(srcPt440);\n    ConnEnd dstPt440(Point(323, 833.833), 15);\n    connRef440->setDestEndpoint(dstPt440);\n    connRef440->setRoutingType((ConnType)2);\n\n    ConnRef *connRef441 = new ConnRef(router, 441);\n    ConnEnd srcPt441(Point(610.333, 1276.24), 15);\n    connRef441->setSourceEndpoint(srcPt441);\n    ConnEnd dstPt441(Point(696.958, 1276.24), 4);\n    connRef441->setDestEndpoint(dstPt441);\n    connRef441->setRoutingType((ConnType)2);\n\n    ConnRef *connRef442 = new ConnRef(router, 442);\n    ConnEnd srcPt442(Point(876.358, 1276.24), 15);\n    connRef442->setSourceEndpoint(srcPt442);\n    ConnEnd dstPt442(Point(957.958, 1276.24), 4);\n    connRef442->setDestEndpoint(dstPt442);\n    connRef442->setRoutingType((ConnType)2);\n\n    ConnRef *connRef443 = new ConnRef(router, 443);\n    ConnEnd srcPt443(Point(1073.18, 1276.24), 15);\n    connRef443->setSourceEndpoint(srcPt443);\n    ConnEnd dstPt443(Point(1050.96, 1158.64), 2);\n    connRef443->setDestEndpoint(dstPt443);\n    connRef443->setRoutingType((ConnType)2);\n\n    ConnRef *connRef444 = new ConnRef(router, 444);\n    ConnEnd srcPt444(Point(1073.18, 978.5), 15);\n    connRef444->setSourceEndpoint(srcPt444);\n    ConnEnd dstPt444(Point(1370.86, 969.5), 4);\n    connRef444->setDestEndpoint(dstPt444);\n    connRef444->setRoutingType((ConnType)2);\n\n    ConnRef *connRef445 = new ConnRef(router, 445);\n    ConnEnd srcPt445(Point(1073.18, 978.5), 15);\n    connRef445->setSourceEndpoint(srcPt445);\n    ConnEnd dstPt445(Point(1370.86, 1041.64), 4);\n    connRef445->setDestEndpoint(dstPt445);\n    connRef445->setRoutingType((ConnType)2);\n\n    ConnRef *connRef446 = new ConnRef(router, 446);\n    ConnEnd srcPt446(Point(1370.86, 1143.64), 4);\n    connRef446->setSourceEndpoint(srcPt446);\n    ConnEnd dstPt446(Point(1073.18, 978.5), 15);\n    connRef446->setDestEndpoint(dstPt446);\n    connRef446->setRoutingType((ConnType)2);\n\n    ConnRef *connRef447 = new ConnRef(router, 447);\n    ConnEnd srcPt447(Point(1073.18, 978.5), 15);\n    connRef447->setSourceEndpoint(srcPt447);\n    ConnEnd dstPt447(Point(1073.18, 723.5), 2);\n    connRef447->setDestEndpoint(dstPt447);\n    connRef447->setRoutingType((ConnType)2);\n\n    ConnRef *connRef448 = new ConnRef(router, 448);\n    ConnEnd srcPt448(Point(220, 497.5), 1);\n    connRef448->setSourceEndpoint(srcPt448);\n    ConnEnd dstPt448(Point(323, 375.5), 15);\n    connRef448->setDestEndpoint(dstPt448);\n    connRef448->setRoutingType((ConnType)2);\n\n    ConnRef *connRef449 = new ConnRef(router, 449);\n    ConnEnd srcPt449(Point(404.333, 497.5), 1);\n    connRef449->setSourceEndpoint(srcPt449);\n    ConnEnd dstPt449(Point(323, 375.5), 15);\n    connRef449->setDestEndpoint(dstPt449);\n    connRef449->setRoutingType((ConnType)2);\n\n    ConnRef *connRef450 = new ConnRef(router, 450);\n    ConnEnd srcPt450(Point(2241.79, 723.5), 2);\n    connRef450->setSourceEndpoint(srcPt450);\n    ConnEnd dstPt450(Point(2241.79, 840.75), 15);\n    connRef450->setDestEndpoint(dstPt450);\n    connRef450->setRoutingType((ConnType)2);\n\n    ConnRef *connRef451 = new ConnRef(router, 451);\n    ConnEnd srcPt451(Point(2968.99, 840.75), 15);\n    connRef451->setSourceEndpoint(srcPt451);\n    ConnEnd dstPt451(Point(2968.99, 899.5), 1);\n    connRef451->setDestEndpoint(dstPt451);\n    connRef451->setRoutingType((ConnType)2);\n\n    ConnRef *connRef452 = new ConnRef(router, 452);\n    ConnEnd srcPt452(Point(2241.79, 286.75), 1);\n    connRef452->setSourceEndpoint(srcPt452);\n    ConnEnd dstPt452(Point(2241.79, 220.875), 15);\n    connRef452->setDestEndpoint(dstPt452);\n    connRef452->setRoutingType((ConnType)2);\n\n    ConnRef *connRef453 = new ConnRef(router, 453);\n    ConnEnd srcPt453(Point(2241.79, 220.875), 15);\n    connRef453->setSourceEndpoint(srcPt453);\n    ConnEnd dstPt453(Point(2462.71, 220.875), 4);\n    connRef453->setDestEndpoint(dstPt453);\n    connRef453->setRoutingType((ConnType)2);\n\n    ConnRef *connRef454 = new ConnRef(router, 454);\n    ConnEnd srcPt454(Point(2186.79, 220.875), 8);\n    connRef454->setSourceEndpoint(srcPt454);\n    ConnEnd dstPt454(Point(2241.79, 220.875), 15);\n    connRef454->setDestEndpoint(dstPt454);\n    connRef454->setRoutingType((ConnType)2);\n\n    ConnRef *connRef455 = new ConnRef(router, 455);\n    ConnEnd srcPt455(Point(2547.71, 220.875), 15);\n    connRef455->setSourceEndpoint(srcPt455);\n    ConnEnd dstPt455(Point(2547.71, 286.75), 1);\n    connRef455->setDestEndpoint(dstPt455);\n    connRef455->setRoutingType((ConnType)2);\n\n    ConnRef *connRef456 = new ConnRef(router, 456);\n    ConnEnd srcPt456(Point(2547.71, 220.875), 15);\n    connRef456->setSourceEndpoint(srcPt456);\n    ConnEnd dstPt456(Point(2650.54, 220.875), 4);\n    connRef456->setDestEndpoint(dstPt456);\n    connRef456->setRoutingType((ConnType)2);\n\n    ConnRef *connRef457 = new ConnRef(router, 457);\n    ConnEnd srcPt457(Point(3114.24, 220.875), 15);\n    connRef457->setSourceEndpoint(srcPt457);\n    ConnEnd dstPt457(Point(3139.24, 286.75), 1);\n    connRef457->setDestEndpoint(dstPt457);\n    connRef457->setRoutingType((ConnType)2);\n\n    ConnRef *connRef458 = new ConnRef(router, 458);\n    ConnEnd srcPt458(Point(2790.54, 123.5), 8);\n    connRef458->setSourceEndpoint(srcPt458);\n    ConnEnd dstPt458(Point(3114.24, 220.875), 15);\n    connRef458->setDestEndpoint(dstPt458);\n    connRef458->setRoutingType((ConnType)2);\n\n    ConnRef *connRef459 = new ConnRef(router, 459);\n    ConnEnd srcPt459(Point(3114.24, 220.875), 15);\n    connRef459->setSourceEndpoint(srcPt459);\n    ConnEnd dstPt459(Point(3089.24, 286.75), 1);\n    connRef459->setDestEndpoint(dstPt459);\n    connRef459->setRoutingType((ConnType)2);\n\n    ConnRef *connRef460 = new ConnRef(router, 460);\n    ConnEnd srcPt460(Point(2934.99, 437.7), 8);\n    connRef460->setSourceEndpoint(srcPt460);\n    ConnEnd dstPt460(Point(3114.24, 437.7), 15);\n    connRef460->setDestEndpoint(dstPt460);\n    connRef460->setRoutingType((ConnType)2);\n\n    ConnRef *connRef461 = new ConnRef(router, 461);\n    ConnEnd srcPt461(Point(3139.24, 316.75), 2);\n    connRef461->setSourceEndpoint(srcPt461);\n    ConnEnd dstPt461(Point(3114.24, 437.7), 15);\n    connRef461->setDestEndpoint(dstPt461);\n    connRef461->setRoutingType((ConnType)2);\n\n    ConnRef *connRef462 = new ConnRef(router, 462);\n    ConnEnd srcPt462(Point(2787.54, 437.7), 15);\n    connRef462->setSourceEndpoint(srcPt462);\n    ConnEnd dstPt462(Point(2680.54, 437.7), 8);\n    connRef462->setDestEndpoint(dstPt462);\n    connRef462->setRoutingType((ConnType)2);\n\n    ConnRef *connRef463 = new ConnRef(router, 463);\n    ConnEnd srcPt463(Point(2904.99, 437.7), 4);\n    connRef463->setSourceEndpoint(srcPt463);\n    ConnEnd dstPt463(Point(2787.54, 437.7), 15);\n    connRef463->setDestEndpoint(dstPt463);\n    connRef463->setRoutingType((ConnType)2);\n\n    ConnRef *connRef464 = new ConnRef(router, 464);\n    ConnEnd srcPt464(Point(2650.54, 437.7), 4);\n    connRef464->setSourceEndpoint(srcPt464);\n    ConnEnd dstPt464(Point(2547.71, 437.7), 15);\n    connRef464->setDestEndpoint(dstPt464);\n    connRef464->setRoutingType((ConnType)2);\n\n    ConnRef *connRef465 = new ConnRef(router, 465);\n    ConnEnd srcPt465(Point(2156.79, 1041.64), 4);\n    connRef465->setSourceEndpoint(srcPt465);\n    ConnEnd dstPt465(Point(1958.29, 1041.64), 15);\n    connRef465->setDestEndpoint(dstPt465);\n    connRef465->setRoutingType((ConnType)2);\n\n    ConnRef *connRef466 = new ConnRef(router, 466);\n    ConnEnd srcPt466(Point(1958.29, 1041.64), 15);\n    connRef466->setSourceEndpoint(srcPt466);\n    ConnEnd dstPt466(Point(2226.79, 1143.64), 4);\n    connRef466->setDestEndpoint(dstPt466);\n    connRef466->setRoutingType((ConnType)2);\n\n    ConnRef *connRef467 = new ConnRef(router, 467);\n    ConnEnd srcPt467(Point(2241.79, 1041.64), 15);\n    connRef467->setSourceEndpoint(srcPt467);\n    ConnEnd dstPt467(Point(2462.71, 1041.64), 4);\n    connRef467->setDestEndpoint(dstPt467);\n    connRef467->setRoutingType((ConnType)2);\n\n    ConnRef *connRef468 = new ConnRef(router, 468);\n    ConnEnd srcPt468(Point(2256.79, 1143.64), 8);\n    connRef468->setSourceEndpoint(srcPt468);\n    ConnEnd dstPt468(Point(2547.71, 1041.64), 15);\n    connRef468->setDestEndpoint(dstPt468);\n    connRef468->setRoutingType((ConnType)2);\n\n    ConnRef *connRef469 = new ConnRef(router, 469);\n    ConnEnd srcPt469(Point(2186.79, 1569.64), 8);\n    connRef469->setSourceEndpoint(srcPt469);\n    ConnEnd dstPt469(Point(2241.79, 1569.64), 15);\n    connRef469->setDestEndpoint(dstPt469);\n    connRef469->setRoutingType((ConnType)2);\n\n    ConnRef *connRef470 = new ConnRef(router, 470);\n    ConnEnd srcPt470(Point(2241.79, 1569.64), 15);\n    connRef470->setSourceEndpoint(srcPt470);\n    ConnEnd dstPt470(Point(2241.79, 1455.24), 2);\n    connRef470->setDestEndpoint(dstPt470);\n    connRef470->setRoutingType((ConnType)2);\n\n    ConnRef *connRef471 = new ConnRef(router, 471);\n    ConnEnd srcPt471(Point(2241.79, 1569.64), 15);\n    connRef471->setSourceEndpoint(srcPt471);\n    ConnEnd dstPt471(Point(2462.71, 1509.44), 4);\n    connRef471->setDestEndpoint(dstPt471);\n    connRef471->setRoutingType((ConnType)2);\n\n    ConnRef *connRef472 = new ConnRef(router, 472);\n    ConnEnd srcPt472(Point(2241.79, 1569.64), 15);\n    connRef472->setSourceEndpoint(srcPt472);\n    ConnEnd dstPt472(Point(2462.71, 1581.64), 4);\n    connRef472->setDestEndpoint(dstPt472);\n    connRef472->setRoutingType((ConnType)2);\n\n    ConnRef *connRef473 = new ConnRef(router, 473);\n    ConnEnd srcPt473(Point(2241.79, 1425.24), 1);\n    connRef473->setSourceEndpoint(srcPt473);\n    ConnEnd dstPt473(Point(2241.79, 1378.24), 15);\n    connRef473->setDestEndpoint(dstPt473);\n    connRef473->setRoutingType((ConnType)2);\n\n    ConnRef *connRef474 = new ConnRef(router, 474);\n    ConnEnd srcPt474(Point(2041.79, 2023.95), 15);\n    connRef474->setSourceEndpoint(srcPt474);\n    ConnEnd dstPt474(Point(1976.87, 1934.95), 15);\n    connRef474->setDestEndpoint(dstPt474);\n    connRef474->setRoutingType((ConnType)2);\n\n    ConnRef *connRef475 = new ConnRef(router, 475);\n    ConnEnd srcPt475(Point(2241.79, 2023.95), 15);\n    connRef475->setSourceEndpoint(srcPt475);\n    ConnEnd dstPt475(Point(2462.71, 2013.95), 4);\n    connRef475->setDestEndpoint(dstPt475);\n    connRef475->setRoutingType((ConnType)2);\n\n    ConnRef *connRef476 = new ConnRef(router, 476);\n    ConnEnd srcPt476(Point(2241.79, 2023.95), 15);\n    connRef476->setSourceEndpoint(srcPt476);\n    ConnEnd dstPt476(Point(2462.71, 2055.95), 4);\n    connRef476->setDestEndpoint(dstPt476);\n    connRef476->setRoutingType((ConnType)2);\n\n    ConnRef *connRef477 = new ConnRef(router, 477);\n    ConnEnd srcPt477(Point(1563.6, 2945.3), 15);\n    connRef477->setSourceEndpoint(srcPt477);\n    ConnEnd dstPt477(Point(1646.79, 3125.3), 1);\n    connRef477->setDestEndpoint(dstPt477);\n    connRef477->setRoutingType((ConnType)2);\n\n    ConnRef *connRef478 = new ConnRef(router, 478);\n    ConnEnd srcPt478(Point(1563.6, 2945.3), 15);\n    connRef478->setSourceEndpoint(srcPt478);\n    ConnEnd dstPt478(Point(1538.46, 3125.3), 1);\n    connRef478->setDestEndpoint(dstPt478);\n    connRef478->setRoutingType((ConnType)2);\n\n    ConnRef *connRef479 = new ConnRef(router, 479);\n    ConnEnd srcPt479(Point(1563.6, 2945.3), 15);\n    connRef479->setSourceEndpoint(srcPt479);\n    ConnEnd dstPt479(Point(1563.6, 3056.3), 1);\n    connRef479->setDestEndpoint(dstPt479);\n    connRef479->setRoutingType((ConnType)2);\n\n    ConnRef *connRef480 = new ConnRef(router, 480);\n    ConnEnd srcPt480(Point(1938.79, 2945.3), 4);\n    connRef480->setSourceEndpoint(srcPt480);\n    ConnEnd dstPt480(Point(1563.6, 2945.3), 15);\n    connRef480->setDestEndpoint(dstPt480);\n    connRef480->setRoutingType((ConnType)2);\n\n    ConnRef *connRef481 = new ConnRef(router, 481);\n    ConnEnd srcPt481(Point(2772.54, 3417.3), 4);\n    connRef481->setSourceEndpoint(srcPt481);\n    ConnEnd dstPt481(Point(1563.6, 3413.3), 15);\n    connRef481->setDestEndpoint(dstPt481);\n    connRef481->setRoutingType((ConnType)2);\n\n    ConnRef *connRef482 = new ConnRef(router, 482);\n    ConnEnd srcPt482(Point(1563.6, 3413.3), 15);\n    connRef482->setSourceEndpoint(srcPt482);\n    ConnEnd dstPt482(Point(2772.54, 3519.3), 4);\n    connRef482->setDestEndpoint(dstPt482);\n    connRef482->setRoutingType((ConnType)2);\n\n    ConnRef *connRef483 = new ConnRef(router, 483);\n    ConnEnd srcPt483(Point(625.333, 3071.3), 8);\n    connRef483->setSourceEndpoint(srcPt483);\n    ConnEnd dstPt483(Point(1563.6, 3413.3), 15);\n    connRef483->setDestEndpoint(dstPt483);\n    connRef483->setRoutingType((ConnType)2);\n\n    ConnRef *connRef484 = new ConnRef(router, 484);\n    ConnEnd srcPt484(Point(1646.79, 3155.3), 2);\n    connRef484->setSourceEndpoint(srcPt484);\n    ConnEnd dstPt484(Point(1563.6, 3413.3), 15);\n    connRef484->setDestEndpoint(dstPt484);\n    connRef484->setRoutingType((ConnType)2);\n\n    ConnRef *connRef485 = new ConnRef(router, 485);\n    ConnEnd srcPt485(Point(1538.46, 3155.3), 2);\n    connRef485->setSourceEndpoint(srcPt485);\n    ConnEnd dstPt485(Point(1563.6, 3413.3), 15);\n    connRef485->setDestEndpoint(dstPt485);\n    connRef485->setRoutingType((ConnType)2);\n\n    ConnRef *connRef486 = new ConnRef(router, 486);\n    ConnEnd srcPt486(Point(1563.6, 3086.3), 2);\n    connRef486->setSourceEndpoint(srcPt486);\n    ConnEnd dstPt486(Point(1563.6, 3413.3), 15);\n    connRef486->setDestEndpoint(dstPt486);\n    connRef486->setRoutingType((ConnType)2);\n\n    ConnRef *connRef487 = new ConnRef(router, 487);\n    ConnEnd srcPt487(Point(891.358, 3071.3), 8);\n    connRef487->setSourceEndpoint(srcPt487);\n    ConnEnd dstPt487(Point(1563.6, 3413.3), 15);\n    connRef487->setDestEndpoint(dstPt487);\n    connRef487->setRoutingType((ConnType)2);\n\n    ConnRef *connRef488 = new ConnRef(router, 488);\n    ConnEnd srcPt488(Point(1767.79, 3401.3), 4);\n    connRef488->setSourceEndpoint(srcPt488);\n    ConnEnd dstPt488(Point(1563.6, 3413.3), 15);\n    connRef488->setDestEndpoint(dstPt488);\n    connRef488->setRoutingType((ConnType)2);\n\n    ConnRef *connRef489 = new ConnRef(router, 489);\n    ConnEnd srcPt489(Point(1563.6, 3413.3), 15);\n    connRef489->setSourceEndpoint(srcPt489);\n    ConnEnd dstPt489(Point(1767.79, 3197.3), 4);\n    connRef489->setDestEndpoint(dstPt489);\n    connRef489->setRoutingType((ConnType)2);\n\n    ConnRef *connRef490 = new ConnRef(router, 490);\n    ConnEnd srcPt490(Point(1563.6, 3413.3), 15);\n    connRef490->setSourceEndpoint(srcPt490);\n    ConnEnd dstPt490(Point(1767.79, 3299.3), 4);\n    connRef490->setDestEndpoint(dstPt490);\n    connRef490->setRoutingType((ConnType)2);\n\n    ConnRef *connRef491 = new ConnRef(router, 491);\n    ConnEnd srcPt491(Point(610.333, 2529.3), 15);\n    connRef491->setSourceEndpoint(srcPt491);\n    ConnEnd dstPt491(Point(610.333, 2597.3), 1);\n    connRef491->setDestEndpoint(dstPt491);\n    connRef491->setRoutingType((ConnType)2);\n\n    ConnRef *connRef492 = new ConnRef(router, 492);\n    ConnEnd srcPt492(Point(610.333, 2674.3), 15);\n    connRef492->setSourceEndpoint(srcPt492);\n    ConnEnd dstPt492(Point(1480.87, 2053.77), 15);\n    connRef492->setDestEndpoint(dstPt492);\n    connRef492->setRoutingType((ConnType)2);\n\n    ConnRef *connRef493 = new ConnRef(router, 493);\n    ConnEnd srcPt493(Point(610.333, 2945.3), 15);\n    connRef493->setSourceEndpoint(srcPt493);\n    ConnEnd dstPt493(Point(595.333, 3071.3), 4);\n    connRef493->setDestEndpoint(dstPt493);\n    connRef493->setRoutingType((ConnType)2);\n\n    ConnRef *connRef494 = new ConnRef(router, 494);\n    ConnEnd srcPt494(Point(2244.79, 2749.3), 8);\n    connRef494->setSourceEndpoint(srcPt494);\n    ConnEnd dstPt494(Point(2241.79, 2945.3), 15);\n    connRef494->setDestEndpoint(dstPt494);\n    connRef494->setRoutingType((ConnType)2);\n\n    ConnRef *connRef495 = new ConnRef(router, 495);\n    ConnEnd srcPt495(Point(2241.79, 2945.3), 15);\n    connRef495->setSourceEndpoint(srcPt495);\n    ConnEnd dstPt495(Point(2462.71, 2955.3), 4);\n    connRef495->setDestEndpoint(dstPt495);\n    connRef495->setRoutingType((ConnType)2);\n\n    ConnRef *connRef496 = new ConnRef(router, 496);\n    ConnEnd srcPt496(Point(2241.79, 2945.3), 15);\n    connRef496->setSourceEndpoint(srcPt496);\n    ConnEnd dstPt496(Point(1968.79, 2945.3), 8);\n    connRef496->setDestEndpoint(dstPt496);\n    connRef496->setRoutingType((ConnType)2);\n\n    ConnRef *connRef497 = new ConnRef(router, 497);\n    ConnEnd srcPt497(Point(2241.79, 2945.3), 15);\n    connRef497->setSourceEndpoint(srcPt497);\n    ConnEnd dstPt497(Point(2462.71, 2864.3), 4);\n    connRef497->setDestEndpoint(dstPt497);\n    connRef497->setRoutingType((ConnType)2);\n\n    ConnRef *connRef498 = new ConnRef(router, 498);\n    ConnEnd srcPt498(Point(2322.71, 2674.3), 15);\n    connRef498->setSourceEndpoint(srcPt498);\n    ConnEnd dstPt498(Point(2214.79, 2749.3), 4);\n    connRef498->setDestEndpoint(dstPt498);\n    connRef498->setRoutingType((ConnType)2);\n\n    ConnRef *connRef499 = new ConnRef(router, 499);\n    ConnEnd srcPt499(Point(2334.71, 2627.3), 2);\n    connRef499->setSourceEndpoint(srcPt499);\n    ConnEnd dstPt499(Point(2322.71, 2674.3), 15);\n    connRef499->setDestEndpoint(dstPt499);\n    connRef499->setRoutingType((ConnType)2);\n\n    ConnRef *connRef500 = new ConnRef(router, 500);\n    ConnEnd srcPt500(Point(2322.71, 2674.3), 15);\n    connRef500->setSourceEndpoint(srcPt500);\n    ConnEnd dstPt500(Point(2462.71, 2955.3), 4);\n    connRef500->setDestEndpoint(dstPt500);\n    connRef500->setRoutingType((ConnType)2);\n\n    ConnRef *connRef501 = new ConnRef(router, 501);\n    ConnEnd srcPt501(Point(2322.71, 2674.3), 15);\n    connRef501->setSourceEndpoint(srcPt501);\n    ConnEnd dstPt501(Point(2462.71, 2864.3), 4);\n    connRef501->setDestEndpoint(dstPt501);\n    connRef501->setRoutingType((ConnType)2);\n\n    ConnRef *connRef502 = new ConnRef(router, 502);\n    ConnEnd srcPt502(Point(2322.71, 2529.3), 15);\n    connRef502->setSourceEndpoint(srcPt502);\n    ConnEnd dstPt502(Point(2334.71, 2597.3), 1);\n    connRef502->setDestEndpoint(dstPt502);\n    connRef502->setRoutingType((ConnType)2);\n\n    ConnRef *connRef503 = new ConnRef(router, 503);\n    ConnEnd srcPt503(Point(876.358, 2529.3), 15);\n    connRef503->setSourceEndpoint(srcPt503);\n    ConnEnd dstPt503(Point(876.358, 2597.3), 1);\n    connRef503->setDestEndpoint(dstPt503);\n    connRef503->setRoutingType((ConnType)2);\n\n    ConnRef *connRef504 = new ConnRef(router, 504);\n    ConnEnd srcPt504(Point(876.358, 2674.3), 15);\n    connRef504->setSourceEndpoint(srcPt504);\n    ConnEnd dstPt504(Point(876.358, 2742.3), 1);\n    connRef504->setDestEndpoint(dstPt504);\n    connRef504->setRoutingType((ConnType)2);\n\n    ConnRef *connRef505 = new ConnRef(router, 505);\n    ConnEnd srcPt505(Point(876.358, 2945.3), 15);\n    connRef505->setSourceEndpoint(srcPt505);\n    ConnEnd dstPt505(Point(861.358, 3071.3), 4);\n    connRef505->setDestEndpoint(dstPt505);\n    connRef505->setRoutingType((ConnType)2);\n\n    ConnRef *connRef506 = new ConnRef(router, 506);\n    ConnEnd srcPt506(Point(3322.24, 2399.05), 15);\n    connRef506->setSourceEndpoint(srcPt506);\n    ConnEnd dstPt506(Point(3231.44, 2399.05), 8);\n    connRef506->setDestEndpoint(dstPt506);\n    connRef506->setRoutingType((ConnType)2);\n\n    ConnRef *connRef507 = new ConnRef(router, 507);\n    ConnEnd srcPt507(Point(3322.24, 2399.05), 15);\n    connRef507->setSourceEndpoint(srcPt507);\n    ConnEnd dstPt507(Point(3231.44, 2297.05), 8);\n    connRef507->setDestEndpoint(dstPt507);\n    connRef507->setRoutingType((ConnType)2);\n\n    ConnRef *connRef508 = new ConnRef(router, 508);\n    ConnEnd srcPt508(Point(3322.24, 2399.05), 15);\n    connRef508->setSourceEndpoint(srcPt508);\n    ConnEnd dstPt508(Point(3242.24, 2597.3), 1);\n    connRef508->setDestEndpoint(dstPt508);\n    connRef508->setRoutingType((ConnType)2);\n\n    ConnRef *connRef509 = new ConnRef(router, 509);\n    ConnEnd srcPt509(Point(3322.24, 2399.05), 15);\n    connRef509->setSourceEndpoint(srcPt509);\n    ConnEnd dstPt509(Point(3326.74, 3056.3), 1);\n    connRef509->setDestEndpoint(dstPt509);\n    connRef509->setRoutingType((ConnType)2);\n\n    ConnRef *connRef510 = new ConnRef(router, 510);\n    ConnEnd srcPt510(Point(2968.99, 2297.05), 15);\n    connRef510->setSourceEndpoint(srcPt510);\n    ConnEnd dstPt510(Point(2802.54, 2297.05), 8);\n    connRef510->setDestEndpoint(dstPt510);\n    connRef510->setRoutingType((ConnType)2);\n\n    ConnRef *connRef511 = new ConnRef(router, 511);\n    ConnEnd srcPt511(Point(3478.07, 1378.24), 15);\n    connRef511->setSourceEndpoint(srcPt511);\n    ConnEnd dstPt511(Point(3478.07, 1857.95), 1);\n    connRef511->setDestEndpoint(dstPt511);\n    connRef511->setRoutingType((ConnType)2);\n\n    ConnRef *connRef512 = new ConnRef(router, 512);\n    ConnEnd srcPt512(Point(3478.07, 2627.3), 2);\n    connRef512->setSourceEndpoint(srcPt512);\n    ConnEnd dstPt512(Point(3478.07, 3413.3), 15);\n    connRef512->setDestEndpoint(dstPt512);\n    connRef512->setRoutingType((ConnType)2);\n\n    ConnRef *connRef513 = new ConnRef(router, 513);\n    ConnEnd srcPt513(Point(2802.54, 3417.3), 8);\n    connRef513->setSourceEndpoint(srcPt513);\n    ConnEnd dstPt513(Point(3478.07, 3413.3), 15);\n    connRef513->setDestEndpoint(dstPt513);\n    connRef513->setRoutingType((ConnType)2);\n\n    ConnRef *connRef514 = new ConnRef(router, 514);\n    ConnEnd srcPt514(Point(3596.07, 2627.3), 2);\n    connRef514->setSourceEndpoint(srcPt514);\n    ConnEnd dstPt514(Point(3478.07, 3413.3), 15);\n    connRef514->setDestEndpoint(dstPt514);\n    connRef514->setRoutingType((ConnType)2);\n\n    ConnRef *connRef515 = new ConnRef(router, 515);\n    ConnEnd srcPt515(Point(220, 527.5), 2);\n    connRef515->setSourceEndpoint(srcPt515);\n    ConnEnd dstPt515(Point(323, 833.833), 15);\n    connRef515->setDestEndpoint(dstPt515);\n    connRef515->setRoutingType((ConnType)2);\n\n    ConnRef *connRef516 = new ConnRef(router, 516);\n    ConnEnd srcPt516(Point(131, 633.5), 1);\n    connRef516->setSourceEndpoint(srcPt516);\n    ConnEnd dstPt516(Point(323, 375.5), 15);\n    connRef516->setDestEndpoint(dstPt516);\n    connRef516->setRoutingType((ConnType)2);\n\n    ConnRef *connRef517 = new ConnRef(router, 517);\n    ConnEnd srcPt517(Point(1557.46, 291.5), 8);\n    connRef517->setSourceEndpoint(srcPt517);\n    ConnEnd dstPt517(Point(1762.79, 157.5), 15);\n    connRef517->setDestEndpoint(dstPt517);\n    connRef517->setRoutingType((ConnType)2);\n\n    ConnRef *connRef518 = new ConnRef(router, 518);\n    ConnEnd srcPt518(Point(1957.29, 291.5), 8);\n    connRef518->setSourceEndpoint(srcPt518);\n    ConnEnd dstPt518(Point(2041.79, 312.5), 15);\n    connRef518->setDestEndpoint(dstPt518);\n    connRef518->setRoutingType((ConnType)2);\n\n    ConnRef *connRef519 = new ConnRef(router, 519);\n    ConnEnd srcPt519(Point(2011.79, 777.5), 4);\n    connRef519->setSourceEndpoint(srcPt519);\n    ConnEnd dstPt519(Point(1958.29, 1041.64), 15);\n    connRef519->setDestEndpoint(dstPt519);\n    connRef519->setRoutingType((ConnType)2);\n\n    ConnRef *connRef520 = new ConnRef(router, 520);\n    ConnEnd srcPt520(Point(555.333, 1276.24), 8);\n    connRef520->setSourceEndpoint(srcPt520);\n    ConnEnd dstPt520(Point(610.333, 1276.24), 15);\n    connRef520->setDestEndpoint(dstPt520);\n    connRef520->setRoutingType((ConnType)2);\n\n    ConnRef *connRef521 = new ConnRef(router, 521);\n    ConnEnd srcPt521(Point(726.958, 1276.24), 8);\n    connRef521->setSourceEndpoint(srcPt521);\n    ConnEnd dstPt521(Point(876.358, 1276.24), 15);\n    connRef521->setDestEndpoint(dstPt521);\n    connRef521->setRoutingType((ConnType)2);\n\n    ConnRef *connRef522 = new ConnRef(router, 522);\n    ConnEnd srcPt522(Point(987.958, 1276.24), 8);\n    connRef522->setSourceEndpoint(srcPt522);\n    ConnEnd dstPt522(Point(1073.18, 1276.24), 15);\n    connRef522->setDestEndpoint(dstPt522);\n    connRef522->setRoutingType((ConnType)2);\n\n    ConnRef *connRef523 = new ConnRef(router, 523);\n    ConnEnd srcPt523(Point(1050.96, 1128.64), 1);\n    connRef523->setSourceEndpoint(srcPt523);\n    ConnEnd dstPt523(Point(1073.18, 978.5), 15);\n    connRef523->setDestEndpoint(dstPt523);\n    connRef523->setRoutingType((ConnType)2);\n\n    ConnRef *connRef524 = new ConnRef(router, 524);\n    ConnEnd srcPt524(Point(1646.79, 1291.24), 2);\n    connRef524->setSourceEndpoint(srcPt524);\n    ConnEnd dstPt524(Point(1782.79, 1378.24), 15);\n    connRef524->setDestEndpoint(dstPt524);\n    connRef524->setRoutingType((ConnType)2);\n\n    ConnRef *connRef525 = new ConnRef(router, 525);\n    ConnEnd srcPt525(Point(1919.87, 1601.64), 15);\n    connRef525->setSourceEndpoint(srcPt525);\n    ConnEnd dstPt525(Point(1782.79, 1569.64), 15);\n    connRef525->setDestEndpoint(dstPt525);\n    connRef525->setRoutingType((ConnType)2);\n\n    ConnRef *connRef526 = new ConnRef(router, 526);\n    ConnEnd srcPt526(Point(1911.79, 1653.64), 4);\n    connRef526->setSourceEndpoint(srcPt526);\n    ConnEnd dstPt526(Point(1782.79, 1569.64), 15);\n    connRef526->setDestEndpoint(dstPt526);\n    connRef526->setRoutingType((ConnType)2);\n\n    ConnRef *connRef527 = new ConnRef(router, 527);\n    ConnEnd srcPt527(Point(1942.29, 1378.24), 15);\n    connRef527->setSourceEndpoint(srcPt527);\n    ConnEnd dstPt527(Point(1958.29, 1425.24), 1);\n    connRef527->setDestEndpoint(dstPt527);\n    connRef527->setRoutingType((ConnType)2);\n\n    ConnRef *connRef528 = new ConnRef(router, 528);\n    ConnEnd srcPt528(Point(2028.87, 1507.64), 15);\n    connRef528->setSourceEndpoint(srcPt528);\n    ConnEnd dstPt528(Point(2241.79, 1378.24), 15);\n    connRef528->setDestEndpoint(dstPt528);\n    connRef528->setRoutingType((ConnType)2);\n\n    ConnRef *connRef529 = new ConnRef(router, 529);\n    ConnEnd srcPt529(Point(2492.71, 1509.44), 8);\n    connRef529->setSourceEndpoint(srcPt529);\n    ConnEnd dstPt529(Point(2547.71, 1569.64), 15);\n    connRef529->setDestEndpoint(dstPt529);\n    connRef529->setRoutingType((ConnType)2);\n\n    ConnRef *connRef530 = new ConnRef(router, 530);\n    ConnEnd srcPt530(Point(2492.71, 1581.64), 8);\n    connRef530->setSourceEndpoint(srcPt530);\n    ConnEnd dstPt530(Point(2547.71, 1569.64), 15);\n    connRef530->setDestEndpoint(dstPt530);\n    connRef530->setRoutingType((ConnType)2);\n    */\n\n    ConnRef *connRef531 = new ConnRef(router, 531);\n    ConnEnd srcPt531(Point(2186.79, 1872.95), 8);\n    connRef531->setSourceEndpoint(srcPt531);\n    ConnEnd dstPt531(Point(2241.79, 1872.95), 15);\n    connRef531->setDestEndpoint(dstPt531);\n    connRef531->setRoutingType((ConnType)2);\n\n    /*\n    ConnRef *connRef532 = new ConnRef(router, 532);\n    ConnEnd srcPt532(Point(2675.54, 1812.64), 8);\n    connRef532->setSourceEndpoint(srcPt532);\n    ConnEnd dstPt532(Point(2787.54, 1872.95), 15);\n    connRef532->setDestEndpoint(dstPt532);\n    connRef532->setRoutingType((ConnType)2);\n\n    ConnRef *connRef533 = new ConnRef(router, 533);\n    ConnEnd srcPt533(Point(2652.54, 1884.95), 8);\n    connRef533->setSourceEndpoint(srcPt533);\n    ConnEnd dstPt533(Point(2787.54, 1872.95), 15);\n    connRef533->setDestEndpoint(dstPt533);\n    connRef533->setRoutingType((ConnType)2);\n\n    ConnRef *connRef534 = new ConnRef(router, 534);\n    ConnEnd srcPt534(Point(2750.54, 1884.95), 8);\n    connRef534->setSourceEndpoint(srcPt534);\n    ConnEnd dstPt534(Point(2787.54, 1872.95), 15);\n    connRef534->setDestEndpoint(dstPt534);\n    connRef534->setRoutingType((ConnType)2);\n\n    ConnRef *connRef535 = new ConnRef(router, 535);\n    ConnEnd srcPt535(Point(2913.99, 1812.64), 8);\n    connRef535->setSourceEndpoint(srcPt535);\n    ConnEnd dstPt535(Point(3119.9, 1872.95), 15);\n    connRef535->setDestEndpoint(dstPt535);\n    connRef535->setRoutingType((ConnType)2);\n\n    ConnRef *connRef536 = new ConnRef(router, 536);\n    ConnEnd srcPt536(Point(2913.99, 1812.64), 8);\n    connRef536->setSourceEndpoint(srcPt536);\n    ConnEnd dstPt536(Point(2968.99, 1731.64), 15);\n    connRef536->setDestEndpoint(dstPt536);\n    connRef536->setRoutingType((ConnType)2);\n\n    ConnRef *connRef537 = new ConnRef(router, 537);\n    ConnEnd srcPt537(Point(2890.99, 1884.95), 8);\n    connRef537->setSourceEndpoint(srcPt537);\n    ConnEnd dstPt537(Point(3119.9, 1872.95), 15);\n    connRef537->setDestEndpoint(dstPt537);\n    connRef537->setRoutingType((ConnType)2);\n\n    ConnRef *connRef538 = new ConnRef(router, 538);\n    ConnEnd srcPt538(Point(2890.99, 1884.95), 8);\n    connRef538->setSourceEndpoint(srcPt538);\n    ConnEnd dstPt538(Point(2968.99, 1731.64), 15);\n    connRef538->setDestEndpoint(dstPt538);\n    connRef538->setRoutingType((ConnType)2);\n\n    ConnRef *connRef539 = new ConnRef(router, 539);\n    ConnEnd srcPt539(Point(2968.99, 1884.95), 8);\n    connRef539->setSourceEndpoint(srcPt539);\n    ConnEnd dstPt539(Point(3119.9, 1872.95), 15);\n    connRef539->setDestEndpoint(dstPt539);\n    connRef539->setRoutingType((ConnType)2);\n\n    ConnRef *connRef540 = new ConnRef(router, 540);\n    ConnEnd srcPt540(Point(2968.99, 1884.95), 8);\n    connRef540->setSourceEndpoint(srcPt540);\n    ConnEnd dstPt540(Point(2968.99, 1731.64), 15);\n    connRef540->setDestEndpoint(dstPt540);\n    connRef540->setRoutingType((ConnType)2);\n\n    ConnRef *connRef541 = new ConnRef(router, 541);\n    ConnEnd srcPt541(Point(2547.71, 723.5), 2);\n    connRef541->setSourceEndpoint(srcPt541);\n    ConnEnd dstPt541(Point(2547.71, 840.75), 15);\n    connRef541->setDestEndpoint(dstPt541);\n    connRef541->setRoutingType((ConnType)2);\n\n    ConnRef *connRef542 = new ConnRef(router, 542);\n    ConnEnd srcPt542(Point(2787.54, 723.5), 2);\n    connRef542->setSourceEndpoint(srcPt542);\n    ConnEnd dstPt542(Point(2787.54, 840.75), 15);\n    connRef542->setDestEndpoint(dstPt542);\n    connRef542->setRoutingType((ConnType)2);\n\n    ConnRef *connRef543 = new ConnRef(router, 543);\n    ConnEnd srcPt543(Point(2968.99, 723.5), 2);\n    connRef543->setSourceEndpoint(srcPt543);\n    ConnEnd dstPt543(Point(2968.99, 840.75), 15);\n    connRef543->setDestEndpoint(dstPt543);\n    connRef543->setRoutingType((ConnType)2);\n\n    ConnRef *connRef544 = new ConnRef(router, 544);\n    ConnEnd srcPt544(Point(2968.99, 929.5), 2);\n    connRef544->setSourceEndpoint(srcPt544);\n    ConnEnd dstPt544(Point(2968.99, 1041.64), 15);\n    connRef544->setDestEndpoint(dstPt544);\n    connRef544->setRoutingType((ConnType)2);\n\n    ConnRef *connRef545 = new ConnRef(router, 545);\n    ConnEnd srcPt545(Point(2492.71, 220.875), 8);\n    connRef545->setSourceEndpoint(srcPt545);\n    ConnEnd dstPt545(Point(2547.71, 220.875), 15);\n    connRef545->setDestEndpoint(dstPt545);\n    connRef545->setRoutingType((ConnType)2);\n\n    ConnRef *connRef546 = new ConnRef(router, 546);\n    ConnEnd srcPt546(Point(2547.71, 316.75), 2);\n    connRef546->setSourceEndpoint(srcPt546);\n    ConnEnd dstPt546(Point(2547.71, 437.7), 15);\n    connRef546->setDestEndpoint(dstPt546);\n    connRef546->setRoutingType((ConnType)2);\n\n    ConnRef *connRef547 = new ConnRef(router, 547);\n    ConnEnd srcPt547(Point(2547.71, 316.75), 2);\n    connRef547->setSourceEndpoint(srcPt547);\n    ConnEnd dstPt547(Point(2735.54, 362.5), 15);\n    connRef547->setDestEndpoint(dstPt547);\n    connRef547->setRoutingType((ConnType)2);\n\n    ConnRef *connRef548 = new ConnRef(router, 548);\n    ConnEnd srcPt548(Point(2680.54, 220.875), 8);\n    connRef548->setSourceEndpoint(srcPt548);\n    ConnEnd dstPt548(Point(2787.54, 220.875), 15);\n    connRef548->setDestEndpoint(dstPt548);\n    connRef548->setRoutingType((ConnType)2);\n\n    ConnRef *connRef549 = new ConnRef(router, 549);\n    ConnEnd srcPt549(Point(3493.07, 914.5), 8);\n    connRef549->setSourceEndpoint(srcPt549);\n    ConnEnd dstPt549(Point(3478.07, 1378.24), 15);\n    connRef549->setDestEndpoint(dstPt549);\n    connRef549->setRoutingType((ConnType)2);\n\n    ConnRef *connRef550 = new ConnRef(router, 550);\n    ConnEnd srcPt550(Point(3478.07, 1887.95), 2);\n    connRef550->setSourceEndpoint(srcPt550);\n    ConnEnd dstPt550(Point(3478.07, 2185.05), 15);\n    connRef550->setDestEndpoint(dstPt550);\n    connRef550->setRoutingType((ConnType)2);\n\n    ConnRef *connRef551 = new ConnRef(router, 551);\n    ConnEnd srcPt551(Point(2802.54, 3519.3), 8);\n    connRef551->setSourceEndpoint(srcPt551);\n    ConnEnd dstPt551(Point(3478.07, 3413.3), 15);\n    connRef551->setDestEndpoint(dstPt551);\n    connRef551->setRoutingType((ConnType)2);\n\n    ConnRef *connRef552 = new ConnRef(router, 552);\n    ConnEnd srcPt552(Point(3596.07, 929.5), 2);\n    connRef552->setSourceEndpoint(srcPt552);\n    ConnEnd dstPt552(Point(3596.07, 2185.05), 15);\n    connRef552->setDestEndpoint(dstPt552);\n    connRef552->setRoutingType((ConnType)2);\n\n    ConnRef *connRef553 = new ConnRef(router, 553);\n    ConnEnd srcPt553(Point(3326.74, 929.5), 2);\n    connRef553->setSourceEndpoint(srcPt553);\n    ConnEnd dstPt553(Point(3322.24, 2399.05), 15);\n    connRef553->setDestEndpoint(dstPt553);\n    connRef553->setRoutingType((ConnType)2);\n\n    ConnRef *connRef554 = new ConnRef(router, 554);\n    ConnEnd srcPt554(Point(3201.44, 2297.05), 4);\n    connRef554->setSourceEndpoint(srcPt554);\n    ConnEnd dstPt554(Point(2968.99, 2297.05), 15);\n    connRef554->setDestEndpoint(dstPt554);\n    connRef554->setRoutingType((ConnType)2);\n\n    ConnRef *connRef555 = new ConnRef(router, 555);\n    ConnEnd srcPt555(Point(3231.44, 914.5), 8);\n    connRef555->setSourceEndpoint(srcPt555);\n    ConnEnd dstPt555(Point(3216.44, 2185.05), 15);\n    connRef555->setDestEndpoint(dstPt555);\n    connRef555->setRoutingType((ConnType)2);\n\n    ConnRef *connRef556 = new ConnRef(router, 556);\n    ConnEnd srcPt556(Point(2384.71, 2185.05), 4);\n    connRef556->setSourceEndpoint(srcPt556);\n    ConnEnd dstPt556(Point(2041.79, 2185.05), 15);\n    connRef556->setDestEndpoint(dstPt556);\n    connRef556->setRoutingType((ConnType)2);\n\n    ConnRef *connRef557 = new ConnRef(router, 557);\n    ConnEnd srcPt557(Point(711.958, 1425.24), 1);\n    connRef557->setSourceEndpoint(srcPt557);\n    ConnEnd dstPt557(Point(1073.18, 1440.24), 15);\n    connRef557->setDestEndpoint(dstPt557);\n    connRef557->setRoutingType((ConnType)2);\n\n    ConnRef *connRef558 = new ConnRef(router, 558);\n    ConnEnd srcPt558(Point(1385.86, 1425.24), 1);\n    connRef558->setSourceEndpoint(srcPt558);\n    ConnEnd dstPt558(Point(1782.79, 1378.24), 15);\n    connRef558->setDestEndpoint(dstPt558);\n    connRef558->setRoutingType((ConnType)2);\n\n    ConnRef *connRef559 = new ConnRef(router, 559);\n    ConnEnd srcPt559(Point(595.333, 2477.3), 4);\n    connRef559->setSourceEndpoint(srcPt559);\n    ConnEnd dstPt559(Point(610.333, 2529.3), 15);\n    connRef559->setDestEndpoint(dstPt559);\n    connRef559->setRoutingType((ConnType)2);\n\n    ConnRef *connRef560 = new ConnRef(router, 560);\n    ConnEnd srcPt560(Point(610.333, 2627.3), 2);\n    connRef560->setSourceEndpoint(srcPt560);\n    ConnEnd dstPt560(Point(610.333, 2674.3), 15);\n    connRef560->setDestEndpoint(dstPt560);\n    connRef560->setRoutingType((ConnType)2);\n\n    ConnRef *connRef561 = new ConnRef(router, 561);\n    ConnEnd srcPt561(Point(1480.87, 2053.77), 15);\n    connRef561->setSourceEndpoint(srcPt561);\n    ConnEnd dstPt561(Point(610.333, 2945.3), 15);\n    connRef561->setDestEndpoint(dstPt561);\n    connRef561->setRoutingType((ConnType)2);\n\n    ConnRef *connRef562 = new ConnRef(router, 562);\n    ConnEnd srcPt562(Point(1197.96, 2627.3), 2);\n    connRef562->setSourceEndpoint(srcPt562);\n    ConnEnd dstPt562(Point(1563.6, 2945.3), 15);\n    connRef562->setDestEndpoint(dstPt562);\n    connRef562->setRoutingType((ConnType)2);\n\n    ConnRef *connRef563 = new ConnRef(router, 563);\n    ConnEnd srcPt563(Point(1315.96, 2627.3), 2);\n    connRef563->setSourceEndpoint(srcPt563);\n    ConnEnd dstPt563(Point(1563.6, 2945.3), 15);\n    connRef563->setDestEndpoint(dstPt563);\n    connRef563->setRoutingType((ConnType)2);\n\n    ConnRef *connRef564 = new ConnRef(router, 564);\n    ConnEnd srcPt564(Point(1646.79, 2772.3), 2);\n    connRef564->setSourceEndpoint(srcPt564);\n    ConnEnd dstPt564(Point(1563.6, 2945.3), 15);\n    connRef564->setDestEndpoint(dstPt564);\n    connRef564->setRoutingType((ConnType)2);\n\n    ConnRef *connRef565 = new ConnRef(router, 565);\n    ConnEnd srcPt565(Point(1563.6, 2703.3), 2);\n    connRef565->setSourceEndpoint(srcPt565);\n    ConnEnd dstPt565(Point(1563.6, 2945.3), 15);\n    connRef565->setDestEndpoint(dstPt565);\n    connRef565->setRoutingType((ConnType)2);\n\n    ConnRef *connRef566 = new ConnRef(router, 566);\n    ConnEnd srcPt566(Point(1538.46, 2772.3), 2);\n    connRef566->setSourceEndpoint(srcPt566);\n    ConnEnd dstPt566(Point(1563.6, 2945.3), 15);\n    connRef566->setDestEndpoint(dstPt566);\n    connRef566->setRoutingType((ConnType)2);\n\n    ConnRef *connRef567 = new ConnRef(router, 567);\n    ConnEnd srcPt567(Point(2492.71, 2955.3), 8);\n    connRef567->setSourceEndpoint(srcPt567);\n    ConnEnd dstPt567(Point(2547.71, 2945.3), 15);\n    connRef567->setDestEndpoint(dstPt567);\n    connRef567->setRoutingType((ConnType)2);\n\n    ConnRef *connRef568 = new ConnRef(router, 568);\n    ConnEnd srcPt568(Point(850.958, 2492.3), 2);\n    connRef568->setSourceEndpoint(srcPt568);\n    ConnEnd dstPt568(Point(876.358, 2529.3), 15);\n    connRef568->setDestEndpoint(dstPt568);\n    connRef568->setRoutingType((ConnType)2);\n\n    ConnRef *connRef569 = new ConnRef(router, 569);\n    ConnEnd srcPt569(Point(943.958, 2477.3), 4);\n    connRef569->setSourceEndpoint(srcPt569);\n    ConnEnd dstPt569(Point(876.358, 2529.3), 15);\n    connRef569->setDestEndpoint(dstPt569);\n    connRef569->setRoutingType((ConnType)2);\n\n    ConnRef *connRef570 = new ConnRef(router, 570);\n    ConnEnd srcPt570(Point(876.358, 2627.3), 2);\n    connRef570->setSourceEndpoint(srcPt570);\n    ConnEnd dstPt570(Point(876.358, 2674.3), 15);\n    connRef570->setDestEndpoint(dstPt570);\n    connRef570->setRoutingType((ConnType)2);\n\n    ConnRef *connRef571 = new ConnRef(router, 571);\n    ConnEnd srcPt571(Point(876.358, 2772.3), 2);\n    connRef571->setSourceEndpoint(srcPt571);\n    ConnEnd dstPt571(Point(876.358, 2945.3), 15);\n    connRef571->setDestEndpoint(dstPt571);\n    connRef571->setRoutingType((ConnType)2);\n\n    ConnRef *connRef572 = new ConnRef(router, 572);\n    ConnEnd srcPt572(Point(2186.79, 1041.64), 8);\n    connRef572->setSourceEndpoint(srcPt572);\n    ConnEnd dstPt572(Point(2241.79, 1041.64), 15);\n    connRef572->setDestEndpoint(dstPt572);\n    connRef572->setRoutingType((ConnType)2);\n\n    ConnRef *connRef573 = new ConnRef(router, 573);\n    ConnEnd srcPt573(Point(2492.71, 1041.64), 8);\n    connRef573->setSourceEndpoint(srcPt573);\n    ConnEnd dstPt573(Point(2547.71, 1041.64), 15);\n    connRef573->setDestEndpoint(dstPt573);\n    connRef573->setRoutingType((ConnType)2);\n\n    ConnRef *connRef574 = new ConnRef(router, 574);\n    ConnEnd srcPt574(Point(3478.07, 2185.05), 15);\n    connRef574->setSourceEndpoint(srcPt574);\n    ConnEnd dstPt574(Point(3478.07, 2597.3), 1);\n    connRef574->setDestEndpoint(dstPt574);\n    connRef574->setRoutingType((ConnType)2);\n\n    ConnRef *connRef575 = new ConnRef(router, 575);\n    ConnEnd srcPt575(Point(3596.07, 2185.05), 15);\n    connRef575->setSourceEndpoint(srcPt575);\n    ConnEnd dstPt575(Point(3596.07, 2597.3), 1);\n    connRef575->setDestEndpoint(dstPt575);\n    connRef575->setRoutingType((ConnType)2);\n\n    ConnRef *connRef576 = new ConnRef(router, 576);\n    ConnEnd srcPt576(Point(2041.79, 1291.24), 2);\n    connRef576->setSourceEndpoint(srcPt576);\n    ConnEnd dstPt576(Point(2041.79, 1569.64), 15);\n    connRef576->setDestEndpoint(dstPt576);\n    connRef576->setRoutingType((ConnType)2);\n\n    ConnRef *connRef577 = new ConnRef(router, 577);\n    ConnEnd srcPt577(Point(1797.79, 3401.3), 8);\n    connRef577->setSourceEndpoint(srcPt577);\n    ConnEnd dstPt577(Point(1861.79, 3209.3), 15);\n    connRef577->setDestEndpoint(dstPt577);\n    connRef577->setRoutingType((ConnType)2);\n\n    ConnRef *connRef578 = new ConnRef(router, 578);\n    ConnEnd srcPt578(Point(1797.79, 3197.3), 8);\n    connRef578->setSourceEndpoint(srcPt578);\n    ConnEnd dstPt578(Point(1861.79, 3209.3), 15);\n    connRef578->setDestEndpoint(dstPt578);\n    connRef578->setRoutingType((ConnType)2);\n\n    ConnRef *connRef579 = new ConnRef(router, 579);\n    ConnEnd srcPt579(Point(2760.54, 123.5), 4);\n    connRef579->setSourceEndpoint(srcPt579);\n    ConnEnd dstPt579(Point(2241.79, 220.875), 15);\n    connRef579->setDestEndpoint(dstPt579);\n    connRef579->setRoutingType((ConnType)2);\n\n    ConnRef *connRef580 = new ConnRef(router, 580);\n    ConnEnd srcPt580(Point(2760.54, 123.5), 4);\n    connRef580->setSourceEndpoint(srcPt580);\n    ConnEnd dstPt580(Point(2547.71, 220.875), 15);\n    connRef580->setDestEndpoint(dstPt580);\n    connRef580->setRoutingType((ConnType)2);\n\n    ConnRef *connRef581 = new ConnRef(router, 581);\n    ConnEnd srcPt581(Point(2156.79, 220.875), 4);\n    connRef581->setSourceEndpoint(srcPt581);\n    ConnEnd dstPt581(Point(2041.79, 220.875), 15);\n    connRef581->setDestEndpoint(dstPt581);\n    connRef581->setRoutingType((ConnType)2);\n\n    ConnRef *connRef582 = new ConnRef(router, 582);\n    ConnEnd srcPt582(Point(2041.79, 2185.05), 15);\n    connRef582->setSourceEndpoint(srcPt582);\n    ConnEnd dstPt582(Point(1941.79, 2185.05), 8);\n    connRef582->setDestEndpoint(dstPt582);\n    connRef582->setRoutingType((ConnType)2);\n\n    ConnRef *connRef583 = new ConnRef(router, 583);\n    ConnEnd srcPt583(Point(1775.79, 1872.95), 15);\n    connRef583->setSourceEndpoint(srcPt583);\n    ConnEnd dstPt583(Point(1479.46, 1872.95), 8);\n    connRef583->setDestEndpoint(dstPt583);\n    connRef583->setRoutingType((ConnType)2);\n\n    ConnRef *connRef584 = new ConnRef(router, 584);\n    ConnEnd srcPt584(Point(1911.79, 1872.95), 4);\n    connRef584->setSourceEndpoint(srcPt584);\n    ConnEnd dstPt584(Point(1775.79, 1872.95), 15);\n    connRef584->setDestEndpoint(dstPt584);\n    connRef584->setRoutingType((ConnType)2);\n\n    ConnRef *connRef585 = new ConnRef(router, 585);\n    ConnEnd srcPt585(Point(1449.46, 1872.95), 4);\n    connRef585->setSourceEndpoint(srcPt585);\n    ConnEnd dstPt585(Point(1073.18, 1872.95), 15);\n    connRef585->setDestEndpoint(dstPt585);\n    connRef585->setRoutingType((ConnType)2);\n\n    ConnRef *connRef586 = new ConnRef(router, 586);\n    ConnEnd srcPt586(Point(1073.18, 1872.95), 15);\n    connRef586->setSourceEndpoint(srcPt586);\n    ConnEnd dstPt586(Point(987.958, 1872.95), 8);\n    connRef586->setDestEndpoint(dstPt586);\n    connRef586->setRoutingType((ConnType)2);\n\n    ConnRef *connRef587 = new ConnRef(router, 587);\n    ConnEnd srcPt587(Point(957.958, 1872.95), 4);\n    connRef587->setSourceEndpoint(srcPt587);\n    ConnEnd dstPt587(Point(876.358, 1872.95), 15);\n    connRef587->setDestEndpoint(dstPt587);\n    connRef587->setRoutingType((ConnType)2);\n\n    ConnRef *connRef588 = new ConnRef(router, 588);\n    ConnEnd srcPt588(Point(3089.24, 316.75), 2);\n    connRef588->setSourceEndpoint(srcPt588);\n    ConnEnd dstPt588(Point(3114.24, 437.7), 15);\n    connRef588->setDestEndpoint(dstPt588);\n    connRef588->setRoutingType((ConnType)2);\n\n    ConnRef *connRef589 = new ConnRef(router, 589);\n    ConnEnd srcPt589(Point(2041.79, 2674.3), 15);\n    connRef589->setSourceEndpoint(srcPt589);\n    ConnEnd dstPt589(Point(2041.79, 2734.3), 1);\n    connRef589->setDestEndpoint(dstPt589);\n    connRef589->setRoutingType((ConnType)2);\n\n    ConnRef *connRef590 = new ConnRef(router, 590);\n    ConnEnd srcPt590(Point(2041.79, 2764.3), 2);\n    connRef590->setSourceEndpoint(srcPt590);\n    ConnEnd dstPt590(Point(2241.79, 2945.3), 15);\n    connRef590->setDestEndpoint(dstPt590);\n    connRef590->setRoutingType((ConnType)2);\n\n    ConnRef *connRef591 = new ConnRef(router, 591);\n    ConnEnd srcPt591(Point(1861.79, 2674.3), 15);\n    connRef591->setSourceEndpoint(srcPt591);\n    ConnEnd dstPt591(Point(1861.79, 2734.3), 1);\n    connRef591->setDestEndpoint(dstPt591);\n    connRef591->setRoutingType((ConnType)2);\n\n    ConnRef *connRef592 = new ConnRef(router, 592);\n    ConnEnd srcPt592(Point(1861.79, 2764.3), 2);\n    connRef592->setSourceEndpoint(srcPt592);\n    ConnEnd dstPt592(Point(1861.79, 2811.3), 15);\n    connRef592->setDestEndpoint(dstPt592);\n    connRef592->setRoutingType((ConnType)2);\n\n    ConnRef *connRef593 = new ConnRef(router, 593);\n    ConnEnd srcPt593(Point(1073.18, 569.7), 15);\n    connRef593->setSourceEndpoint(srcPt593);\n    ConnEnd dstPt593(Point(1214.46, 569.7), 4);\n    connRef593->setDestEndpoint(dstPt593);\n    connRef593->setRoutingType((ConnType)2);\n\n    ConnRef *connRef594 = new ConnRef(router, 594);\n    ConnEnd srcPt594(Point(1073.18, 693.5), 1);\n    connRef594->setSourceEndpoint(srcPt594);\n    ConnEnd dstPt594(Point(1073.18, 569.7), 15);\n    connRef594->setDestEndpoint(dstPt594);\n    connRef594->setRoutingType((ConnType)2);\n\n    ConnRef *connRef595 = new ConnRef(router, 595);\n    ConnEnd srcPt595(Point(876.358, 554.7), 1);\n    connRef595->setSourceEndpoint(srcPt595);\n    ConnEnd dstPt595(Point(876.358, 375.5), 15);\n    connRef595->setDestEndpoint(dstPt595);\n    connRef595->setRoutingType((ConnType)2);\n\n    ConnRef *connRef596 = new ConnRef(router, 596);\n    ConnEnd srcPt596(Point(781.958, 715.5), 15);\n    connRef596->setSourceEndpoint(srcPt596);\n    ConnEnd dstPt596(Point(876.358, 584.7), 2);\n    connRef596->setDestEndpoint(dstPt596);\n    connRef596->setRoutingType((ConnType)2);\n\n    ConnRef *connRef597 = new ConnRef(router, 597);\n    ConnEnd srcPt597(Point(404.333, 527.5), 2);\n    connRef597->setSourceEndpoint(srcPt597);\n    ConnEnd dstPt597(Point(323, 833.833), 15);\n    connRef597->setDestEndpoint(dstPt597);\n    connRef597->setRoutingType((ConnType)2);\n\n    ConnRef *connRef598 = new ConnRef(router, 598);\n    ConnEnd srcPt598(Point(2492.71, 2864.3), 8);\n    connRef598->setSourceEndpoint(srcPt598);\n    ConnEnd dstPt598(Point(2547.71, 2945.3), 15);\n    connRef598->setDestEndpoint(dstPt598);\n    connRef598->setRoutingType((ConnType)2);\n\n    ConnRef *connRef599 = new ConnRef(router, 599);\n    ConnEnd srcPt599(Point(3119.9, 2529.3), 15);\n    connRef599->setSourceEndpoint(srcPt599);\n    ConnEnd dstPt599(Point(2895.99, 2612.3), 4);\n    connRef599->setDestEndpoint(dstPt599);\n    connRef599->setRoutingType((ConnType)2);\n\n    ConnRef *connRef600 = new ConnRef(router, 600);\n    ConnEnd srcPt600(Point(3119.9, 2529.3), 15);\n    connRef600->setSourceEndpoint(srcPt600);\n    ConnEnd dstPt600(Point(3242.24, 2597.3), 1);\n    connRef600->setDestEndpoint(dstPt600);\n    connRef600->setRoutingType((ConnType)2);\n\n    ConnRef *connRef601 = new ConnRef(router, 601);\n    ConnEnd srcPt601(Point(2925.99, 2612.3), 8);\n    connRef601->setSourceEndpoint(srcPt601);\n    ConnEnd dstPt601(Point(2968.99, 2674.3), 15);\n    connRef601->setDestEndpoint(dstPt601);\n    connRef601->setRoutingType((ConnType)2);\n\n    ConnRef *connRef602 = new ConnRef(router, 602);\n    ConnEnd srcPt602(Point(3119.9, 2872.3), 15);\n    connRef602->setSourceEndpoint(srcPt602);\n    ConnEnd dstPt602(Point(2869.99, 3071.3), 4);\n    connRef602->setDestEndpoint(dstPt602);\n    connRef602->setRoutingType((ConnType)2);\n\n    ConnRef *connRef603 = new ConnRef(router, 603);\n    ConnEnd srcPt603(Point(3119.9, 2872.3), 15);\n    connRef603->setSourceEndpoint(srcPt603);\n    ConnEnd dstPt603(Point(3326.74, 3056.3), 1);\n    connRef603->setDestEndpoint(dstPt603);\n    connRef603->setRoutingType((ConnType)2);\n\n    ConnRef *connRef604 = new ConnRef(router, 604);\n    ConnEnd srcPt604(Point(3242.24, 2627.3), 2);\n    connRef604->setSourceEndpoint(srcPt604);\n    ConnEnd dstPt604(Point(3221.24, 2674.3), 15);\n    connRef604->setDestEndpoint(dstPt604);\n    connRef604->setRoutingType((ConnType)2);\n\n    ConnRef *connRef605 = new ConnRef(router, 605);\n    ConnEnd srcPt605(Point(2899.99, 3071.3), 8);\n    connRef605->setSourceEndpoint(srcPt605);\n    ConnEnd dstPt605(Point(2968.99, 3209.3), 15);\n    connRef605->setDestEndpoint(dstPt605);\n    connRef605->setRoutingType((ConnType)2);\n\n    ConnRef *connRef606 = new ConnRef(router, 606);\n    ConnEnd srcPt606(Point(3326.74, 3086.3), 2);\n    connRef606->setSourceEndpoint(srcPt606);\n    ConnEnd dstPt606(Point(3216.44, 3209.3), 15);\n    connRef606->setDestEndpoint(dstPt606);\n    connRef606->setRoutingType((ConnType)2);\n\n    ConnRef *connRef607 = new ConnRef(router, 607);\n    ConnEnd srcPt607(Point(1797.79, 3299.3), 8);\n    connRef607->setSourceEndpoint(srcPt607);\n    ConnEnd dstPt607(Point(1861.79, 3209.3), 15);\n    connRef607->setDestEndpoint(dstPt607);\n    connRef607->setRoutingType((ConnType)2);\n\n    ConnRef *connRef608 = new ConnRef(router, 608);\n    ConnEnd srcPt608(Point(162, 512.5), 8);\n    connRef608->setSourceEndpoint(srcPt608);\n    ConnEnd dstPt608(Point(220, 512.5), 4);\n    connRef608->setDestEndpoint(dstPt608);\n    connRef608->setRoutingType((ConnType)2);\n\n    ConnRef *connRef609 = new ConnRef(router, 609);\n    ConnEnd srcPt609(Point(73, 648.5), 8);\n    connRef609->setSourceEndpoint(srcPt609);\n    ConnEnd dstPt609(Point(131, 648.5), 4);\n    connRef609->setDestEndpoint(dstPt609);\n    connRef609->setRoutingType((ConnType)2);\n\n    ConnRef *connRef610 = new ConnRef(router, 610);\n    ConnEnd srcPt610(Point(540.333, 658.5), 2);\n    connRef610->setSourceEndpoint(srcPt610);\n    ConnEnd dstPt610(Point(540.333, 708.5), 1);\n    connRef610->setDestEndpoint(dstPt610);\n    connRef610->setRoutingType((ConnType)2);\n\n    ConnRef *connRef611 = new ConnRef(router, 611);\n    ConnEnd srcPt611(Point(540.333, 783.833), 2);\n    connRef611->setSourceEndpoint(srcPt611);\n    ConnEnd dstPt611(Point(540.333, 833.833), 1);\n    connRef611->setDestEndpoint(dstPt611);\n    connRef611->setRoutingType((ConnType)2);\n\n    ConnRef *connRef612 = new ConnRef(router, 612);\n    ConnEnd srcPt612(Point(1453.46, 708.5), 4);\n    connRef612->setSourceEndpoint(srcPt612);\n    ConnEnd dstPt612(Point(1395.46, 708.5), 8);\n    connRef612->setDestEndpoint(dstPt612);\n    connRef612->setRoutingType((ConnType)2);\n\n    ConnRef *connRef613 = new ConnRef(router, 613);\n    ConnEnd srcPt613(Point(1542.46, 241.5), 2);\n    connRef613->setSourceEndpoint(srcPt613);\n    ConnEnd dstPt613(Point(1542.46, 291.5), 1);\n    connRef613->setDestEndpoint(dstPt613);\n    connRef613->setRoutingType((ConnType)2);\n\n    ConnRef *connRef614 = new ConnRef(router, 614);\n    ConnEnd srcPt614(Point(1942.29, 241.5), 2);\n    connRef614->setSourceEndpoint(srcPt614);\n    ConnEnd dstPt614(Point(1942.29, 291.5), 1);\n    connRef614->setDestEndpoint(dstPt614);\n    connRef614->setRoutingType((ConnType)2);\n\n    ConnRef *connRef615 = new ConnRef(router, 615);\n    ConnEnd srcPt615(Point(2026.79, 727.5), 2);\n    connRef615->setSourceEndpoint(srcPt615);\n    ConnEnd dstPt615(Point(2026.79, 777.5), 1);\n    connRef615->setDestEndpoint(dstPt615);\n    connRef615->setRoutingType((ConnType)2);\n\n    ConnRef *connRef616 = new ConnRef(router, 616);\n    ConnEnd srcPt616(Point(540.333, 1226.24), 2);\n    connRef616->setSourceEndpoint(srcPt616);\n    ConnEnd dstPt616(Point(540.333, 1276.24), 1);\n    connRef616->setDestEndpoint(dstPt616);\n    connRef616->setRoutingType((ConnType)2);\n\n    ConnRef *connRef617 = new ConnRef(router, 617);\n    ConnEnd srcPt617(Point(711.958, 1226.24), 2);\n    connRef617->setSourceEndpoint(srcPt617);\n    ConnEnd dstPt617(Point(711.958, 1276.24), 1);\n    connRef617->setDestEndpoint(dstPt617);\n    connRef617->setRoutingType((ConnType)2);\n\n    ConnRef *connRef618 = new ConnRef(router, 618);\n    ConnEnd srcPt618(Point(972.958, 1226.24), 2);\n    connRef618->setSourceEndpoint(srcPt618);\n    ConnEnd dstPt618(Point(972.958, 1276.24), 1);\n    connRef618->setDestEndpoint(dstPt618);\n    connRef618->setRoutingType((ConnType)2);\n\n    ConnRef *connRef619 = new ConnRef(router, 619);\n    ConnEnd srcPt619(Point(992.958, 1143.64), 8);\n    connRef619->setSourceEndpoint(srcPt619);\n    ConnEnd dstPt619(Point(1050.96, 1143.64), 4);\n    connRef619->setDestEndpoint(dstPt619);\n    connRef619->setRoutingType((ConnType)2);\n\n    ConnRef *connRef620 = new ConnRef(router, 620);\n    ConnEnd srcPt620(Point(1385.86, 919.5), 2);\n    connRef620->setSourceEndpoint(srcPt620);\n    ConnEnd dstPt620(Point(1385.86, 969.5), 1);\n    connRef620->setDestEndpoint(dstPt620);\n    connRef620->setRoutingType((ConnType)2);\n\n    ConnRef *connRef621 = new ConnRef(router, 621);\n    ConnEnd srcPt621(Point(1385.86, 1091.64), 1);\n    connRef621->setSourceEndpoint(srcPt621);\n    ConnEnd dstPt621(Point(1385.86, 1041.64), 2);\n    connRef621->setDestEndpoint(dstPt621);\n    connRef621->setRoutingType((ConnType)2);\n\n    ConnRef *connRef622 = new ConnRef(router, 622);\n    ConnEnd srcPt622(Point(1385.86, 1193.64), 1);\n    connRef622->setSourceEndpoint(srcPt622);\n    ConnEnd dstPt622(Point(1385.86, 1143.64), 2);\n    connRef622->setDestEndpoint(dstPt622);\n    connRef622->setRoutingType((ConnType)2);\n\n    ConnRef *connRef623 = new ConnRef(router, 623);\n    ConnEnd srcPt623(Point(1704.79, 1276.24), 4);\n    connRef623->setSourceEndpoint(srcPt623);\n    ConnEnd dstPt623(Point(1646.79, 1276.24), 8);\n    connRef623->setDestEndpoint(dstPt623);\n    connRef623->setRoutingType((ConnType)2);\n\n    ConnRef *connRef624 = new ConnRef(router, 624);\n    ConnEnd srcPt624(Point(1926.79, 1703.64), 1);\n    connRef624->setSourceEndpoint(srcPt624);\n    ConnEnd dstPt624(Point(1926.79, 1653.64), 2);\n    connRef624->setDestEndpoint(dstPt624);\n    connRef624->setRoutingType((ConnType)2);\n\n    ConnRef *connRef625 = new ConnRef(router, 625);\n    ConnEnd srcPt625(Point(2016.29, 1440.24), 4);\n    connRef625->setSourceEndpoint(srcPt625);\n    ConnEnd dstPt625(Point(1958.29, 1440.24), 8);\n    connRef625->setDestEndpoint(dstPt625);\n    connRef625->setRoutingType((ConnType)2);\n\n    ConnRef *connRef626 = new ConnRef(router, 626);\n    ConnEnd srcPt626(Point(2099.79, 1722.64), 4);\n    connRef626->setSourceEndpoint(srcPt626);\n    ConnEnd dstPt626(Point(2041.79, 1722.64), 8);\n    connRef626->setDestEndpoint(dstPt626);\n    connRef626->setRoutingType((ConnType)2);\n\n    ConnRef *connRef627 = new ConnRef(router, 627);\n    ConnEnd srcPt627(Point(2171.79, 1519.64), 2);\n    connRef627->setSourceEndpoint(srcPt627);\n    ConnEnd dstPt627(Point(2171.79, 1569.64), 1);\n    connRef627->setDestEndpoint(dstPt627);\n    connRef627->setRoutingType((ConnType)2);\n\n    ConnRef *connRef628 = new ConnRef(router, 628);\n    ConnEnd srcPt628(Point(2299.79, 1440.24), 4);\n    connRef628->setSourceEndpoint(srcPt628);\n    ConnEnd dstPt628(Point(2241.79, 1440.24), 8);\n    connRef628->setDestEndpoint(dstPt628);\n    connRef628->setRoutingType((ConnType)2);\n\n    ConnRef *connRef629 = new ConnRef(router, 629);\n    ConnEnd srcPt629(Point(2477.71, 1459.44), 2);\n    connRef629->setSourceEndpoint(srcPt629);\n    ConnEnd dstPt629(Point(2477.71, 1509.44), 1);\n    connRef629->setDestEndpoint(dstPt629);\n    connRef629->setRoutingType((ConnType)2);\n\n    ConnRef *connRef630 = new ConnRef(router, 630);\n    ConnEnd srcPt630(Point(2477.71, 1631.64), 1);\n    connRef630->setSourceEndpoint(srcPt630);\n    ConnEnd dstPt630(Point(2477.71, 1581.64), 2);\n    connRef630->setDestEndpoint(dstPt630);\n    connRef630->setRoutingType((ConnType)2);\n\n    ConnRef *connRef631 = new ConnRef(router, 631);\n    ConnEnd srcPt631(Point(2171.79, 1822.95), 2);\n    connRef631->setSourceEndpoint(srcPt631);\n    ConnEnd dstPt631(Point(2171.79, 1872.95), 1);\n    connRef631->setDestEndpoint(dstPt631);\n    connRef631->setRoutingType((ConnType)2);\n\n    ConnRef *connRef632 = new ConnRef(router, 632);\n    ConnEnd srcPt632(Point(2477.71, 1963.95), 2);\n    connRef632->setSourceEndpoint(srcPt632);\n    ConnEnd dstPt632(Point(2477.71, 2013.95), 1);\n    connRef632->setDestEndpoint(dstPt632);\n    connRef632->setRoutingType((ConnType)2);\n\n    ConnRef *connRef633 = new ConnRef(router, 633);\n    ConnEnd srcPt633(Point(2477.71, 2105.95), 1);\n    connRef633->setSourceEndpoint(srcPt633);\n    ConnEnd dstPt633(Point(2477.71, 2055.95), 2);\n    connRef633->setDestEndpoint(dstPt633);\n    connRef633->setRoutingType((ConnType)2);\n\n    ConnRef *connRef634 = new ConnRef(router, 634);\n    ConnEnd srcPt634(Point(2660.54, 1762.64), 2);\n    connRef634->setSourceEndpoint(srcPt634);\n    ConnEnd dstPt634(Point(2660.54, 1812.64), 1);\n    connRef634->setDestEndpoint(dstPt634);\n    connRef634->setRoutingType((ConnType)2);\n\n    ConnRef *connRef635 = new ConnRef(router, 635);\n    ConnEnd srcPt635(Point(2637.54, 1934.95), 1);\n    connRef635->setSourceEndpoint(srcPt635);\n    ConnEnd dstPt635(Point(2637.54, 1884.95), 2);\n    connRef635->setDestEndpoint(dstPt635);\n    connRef635->setRoutingType((ConnType)2);\n\n    ConnRef *connRef636 = new ConnRef(router, 636);\n    ConnEnd srcPt636(Point(2735.54, 1934.95), 1);\n    connRef636->setSourceEndpoint(srcPt636);\n    ConnEnd dstPt636(Point(2735.54, 1884.95), 2);\n    connRef636->setDestEndpoint(dstPt636);\n    connRef636->setRoutingType((ConnType)2);\n\n    ConnRef *connRef637 = new ConnRef(router, 637);\n    ConnEnd srcPt637(Point(2898.99, 1762.64), 2);\n    connRef637->setSourceEndpoint(srcPt637);\n    ConnEnd dstPt637(Point(2898.99, 1812.64), 1);\n    connRef637->setDestEndpoint(dstPt637);\n    connRef637->setRoutingType((ConnType)2);\n\n    ConnRef *connRef638 = new ConnRef(router, 638);\n    ConnEnd srcPt638(Point(2875.99, 1934.95), 1);\n    connRef638->setSourceEndpoint(srcPt638);\n    ConnEnd dstPt638(Point(2875.99, 1884.95), 2);\n    connRef638->setDestEndpoint(dstPt638);\n    connRef638->setRoutingType((ConnType)2);\n\n    ConnRef *connRef639 = new ConnRef(router, 639);\n    ConnEnd srcPt639(Point(2953.99, 1934.95), 1);\n    connRef639->setSourceEndpoint(srcPt639);\n    ConnEnd dstPt639(Point(2953.99, 1884.95), 2);\n    connRef639->setDestEndpoint(dstPt639);\n    connRef639->setRoutingType((ConnType)2);\n\n    ConnRef *connRef640 = new ConnRef(router, 640);\n    ConnEnd srcPt640(Point(2299.79, 708.5), 4);\n    connRef640->setSourceEndpoint(srcPt640);\n    ConnEnd dstPt640(Point(2241.79, 708.5), 8);\n    connRef640->setDestEndpoint(dstPt640);\n    connRef640->setRoutingType((ConnType)2);\n\n    ConnRef *connRef641 = new ConnRef(router, 641);\n    ConnEnd srcPt641(Point(2605.71, 708.5), 4);\n    connRef641->setSourceEndpoint(srcPt641);\n    ConnEnd dstPt641(Point(2547.71, 708.5), 8);\n    connRef641->setDestEndpoint(dstPt641);\n    connRef641->setRoutingType((ConnType)2);\n\n    ConnRef *connRef642 = new ConnRef(router, 642);\n    ConnEnd srcPt642(Point(2845.54, 708.5), 4);\n    connRef642->setSourceEndpoint(srcPt642);\n    ConnEnd dstPt642(Point(2787.54, 708.5), 8);\n    connRef642->setDestEndpoint(dstPt642);\n    connRef642->setRoutingType((ConnType)2);\n\n    ConnRef *connRef643 = new ConnRef(router, 643);\n    ConnEnd srcPt643(Point(3026.99, 708.5), 4);\n    connRef643->setSourceEndpoint(srcPt643);\n    ConnEnd dstPt643(Point(2968.99, 708.5), 8);\n    connRef643->setDestEndpoint(dstPt643);\n    connRef643->setRoutingType((ConnType)2);\n\n    ConnRef *connRef644 = new ConnRef(router, 644);\n    ConnEnd srcPt644(Point(3026.99, 914.5), 4);\n    connRef644->setSourceEndpoint(srcPt644);\n    ConnEnd dstPt644(Point(2968.99, 914.5), 8);\n    connRef644->setDestEndpoint(dstPt644);\n    connRef644->setRoutingType((ConnType)2);\n\n    ConnRef *connRef645 = new ConnRef(router, 645);\n    ConnEnd srcPt645(Point(2299.79, 301.75), 4);\n    connRef645->setSourceEndpoint(srcPt645);\n    ConnEnd dstPt645(Point(2241.79, 301.75), 8);\n    connRef645->setDestEndpoint(dstPt645);\n    connRef645->setRoutingType((ConnType)2);\n\n    ConnRef *connRef646 = new ConnRef(router, 646);\n    ConnEnd srcPt646(Point(2477.71, 170.875), 2);\n    connRef646->setSourceEndpoint(srcPt646);\n    ConnEnd dstPt646(Point(2477.71, 220.875), 1);\n    connRef646->setDestEndpoint(dstPt646);\n    connRef646->setRoutingType((ConnType)2);\n\n    ConnRef *connRef647 = new ConnRef(router, 647);\n    ConnEnd srcPt647(Point(2605.71, 301.75), 4);\n    connRef647->setSourceEndpoint(srcPt647);\n    ConnEnd dstPt647(Point(2547.71, 301.75), 8);\n    connRef647->setDestEndpoint(dstPt647);\n    connRef647->setRoutingType((ConnType)2);\n\n    ConnRef *connRef648 = new ConnRef(router, 648);\n    ConnEnd srcPt648(Point(2665.54, 170.875), 2);\n    connRef648->setSourceEndpoint(srcPt648);\n    ConnEnd dstPt648(Point(2665.54, 220.875), 1);\n    connRef648->setDestEndpoint(dstPt648);\n    connRef648->setRoutingType((ConnType)2);\n\n    ConnRef *connRef649 = new ConnRef(router, 649);\n    ConnEnd srcPt649(Point(2665.54, 387.7), 2);\n    connRef649->setSourceEndpoint(srcPt649);\n    ConnEnd dstPt649(Point(2665.54, 437.7), 1);\n    connRef649->setDestEndpoint(dstPt649);\n    connRef649->setRoutingType((ConnType)2);\n\n    ConnRef *connRef650 = new ConnRef(router, 650);\n    ConnEnd srcPt650(Point(2919.99, 387.7), 2);\n    connRef650->setSourceEndpoint(srcPt650);\n    ConnEnd dstPt650(Point(2919.99, 437.7), 1);\n    connRef650->setDestEndpoint(dstPt650);\n    connRef650->setRoutingType((ConnType)2);\n\n    ConnRef *connRef651 = new ConnRef(router, 651);\n    ConnEnd srcPt651(Point(3197.24, 301.75), 4);\n    connRef651->setSourceEndpoint(srcPt651);\n    ConnEnd dstPt651(Point(3139.24, 301.75), 8);\n    connRef651->setDestEndpoint(dstPt651);\n    connRef651->setRoutingType((ConnType)2);\n\n    ConnRef *connRef652 = new ConnRef(router, 652);\n    ConnEnd srcPt652(Point(3478.07, 864.5), 2);\n    connRef652->setSourceEndpoint(srcPt652);\n    ConnEnd dstPt652(Point(3478.07, 914.5), 1);\n    connRef652->setDestEndpoint(dstPt652);\n    connRef652->setRoutingType((ConnType)2);\n\n    ConnRef *connRef653 = new ConnRef(router, 653);\n    ConnEnd srcPt653(Point(3536.07, 1872.95), 4);\n    connRef653->setSourceEndpoint(srcPt653);\n    ConnEnd dstPt653(Point(3478.07, 1872.95), 8);\n    connRef653->setDestEndpoint(dstPt653);\n    connRef653->setRoutingType((ConnType)2);\n\n    ConnRef *connRef654 = new ConnRef(router, 654);\n    ConnEnd srcPt654(Point(3536.07, 2612.3), 4);\n    connRef654->setSourceEndpoint(srcPt654);\n    ConnEnd dstPt654(Point(3478.07, 2612.3), 8);\n    connRef654->setDestEndpoint(dstPt654);\n    connRef654->setRoutingType((ConnType)2);\n\n    ConnRef *connRef655 = new ConnRef(router, 655);\n    ConnEnd srcPt655(Point(2787.54, 3467.3), 1);\n    connRef655->setSourceEndpoint(srcPt655);\n    ConnEnd dstPt655(Point(2787.54, 3417.3), 2);\n    connRef655->setDestEndpoint(dstPt655);\n    connRef655->setRoutingType((ConnType)2);\n\n    ConnRef *connRef656 = new ConnRef(router, 656);\n    ConnEnd srcPt656(Point(2787.54, 3569.3), 1);\n    connRef656->setSourceEndpoint(srcPt656);\n    ConnEnd dstPt656(Point(2787.54, 3519.3), 2);\n    connRef656->setDestEndpoint(dstPt656);\n    connRef656->setRoutingType((ConnType)2);\n\n    ConnRef *connRef657 = new ConnRef(router, 657);\n    ConnEnd srcPt657(Point(3654.07, 2612.3), 4);\n    connRef657->setSourceEndpoint(srcPt657);\n    ConnEnd dstPt657(Point(3596.07, 2612.3), 8);\n    connRef657->setDestEndpoint(dstPt657);\n    connRef657->setRoutingType((ConnType)2);\n\n    ConnRef *connRef658 = new ConnRef(router, 658);\n    ConnEnd srcPt658(Point(3654.07, 914.5), 4);\n    connRef658->setSourceEndpoint(srcPt658);\n    ConnEnd dstPt658(Point(3596.07, 914.5), 8);\n    connRef658->setDestEndpoint(dstPt658);\n    connRef658->setRoutingType((ConnType)2);\n\n    ConnRef *connRef659 = new ConnRef(router, 659);\n    ConnEnd srcPt659(Point(3384.74, 914.5), 4);\n    connRef659->setSourceEndpoint(srcPt659);\n    ConnEnd dstPt659(Point(3326.74, 914.5), 8);\n    connRef659->setDestEndpoint(dstPt659);\n    connRef659->setRoutingType((ConnType)2);\n\n    ConnRef *connRef660 = new ConnRef(router, 660);\n    ConnEnd srcPt660(Point(3216.44, 2349.05), 2);\n    connRef660->setSourceEndpoint(srcPt660);\n    ConnEnd dstPt660(Point(3216.44, 2399.05), 1);\n    connRef660->setDestEndpoint(dstPt660);\n    connRef660->setRoutingType((ConnType)2);\n\n    ConnRef *connRef661 = new ConnRef(router, 661);\n    ConnEnd srcPt661(Point(3216.44, 2247.05), 2);\n    connRef661->setSourceEndpoint(srcPt661);\n    ConnEnd dstPt661(Point(3216.44, 2297.05), 1);\n    connRef661->setDestEndpoint(dstPt661);\n    connRef661->setRoutingType((ConnType)2);\n\n    ConnRef *connRef662 = new ConnRef(router, 662);\n    ConnEnd srcPt662(Point(2787.54, 2247.05), 2);\n    connRef662->setSourceEndpoint(srcPt662);\n    ConnEnd dstPt662(Point(2787.54, 2297.05), 1);\n    connRef662->setDestEndpoint(dstPt662);\n    connRef662->setRoutingType((ConnType)2);\n\n    ConnRef *connRef663 = new ConnRef(router, 663);\n    ConnEnd srcPt663(Point(3216.44, 864.5), 2);\n    connRef663->setSourceEndpoint(srcPt663);\n    ConnEnd dstPt663(Point(3216.44, 914.5), 1);\n    connRef663->setDestEndpoint(dstPt663);\n    connRef663->setRoutingType((ConnType)2);\n\n    ConnRef *connRef664 = new ConnRef(router, 664);\n    ConnEnd srcPt664(Point(2787.54, 2135.05), 2);\n    connRef664->setSourceEndpoint(srcPt664);\n    ConnEnd dstPt664(Point(2787.54, 2185.05), 1);\n    connRef664->setDestEndpoint(dstPt664);\n    connRef664->setRoutingType((ConnType)2);\n\n    ConnRef *connRef665 = new ConnRef(router, 665);\n    ConnEnd srcPt665(Point(2399.71, 2135.05), 2);\n    connRef665->setSourceEndpoint(srcPt665);\n    ConnEnd dstPt665(Point(2399.71, 2185.05), 1);\n    connRef665->setDestEndpoint(dstPt665);\n    connRef665->setRoutingType((ConnType)2);\n\n    ConnRef *connRef666 = new ConnRef(router, 666);\n    ConnEnd srcPt666(Point(1926.79, 2135.05), 2);\n    connRef666->setSourceEndpoint(srcPt666);\n    ConnEnd dstPt666(Point(1926.79, 2185.05), 1);\n    connRef666->setDestEndpoint(dstPt666);\n    connRef666->setRoutingType((ConnType)2);\n\n    ConnRef *connRef667 = new ConnRef(router, 667);\n    ConnEnd srcPt667(Point(711.958, 2135.05), 2);\n    connRef667->setSourceEndpoint(srcPt667);\n    ConnEnd dstPt667(Point(711.958, 2185.05), 1);\n    connRef667->setDestEndpoint(dstPt667);\n    connRef667->setRoutingType((ConnType)2);\n\n    ConnRef *connRef668 = new ConnRef(router, 668);\n    ConnEnd srcPt668(Point(1621.6, 2023.95), 4);\n    connRef668->setSourceEndpoint(srcPt668);\n    ConnEnd dstPt668(Point(1563.6, 2023.95), 8);\n    connRef668->setDestEndpoint(dstPt668);\n    connRef668->setRoutingType((ConnType)2);\n\n    ConnRef *connRef669 = new ConnRef(router, 669);\n    ConnEnd srcPt669(Point(711.958, 1328.24), 2);\n    connRef669->setSourceEndpoint(srcPt669);\n    ConnEnd dstPt669(Point(711.958, 1378.24), 1);\n    connRef669->setDestEndpoint(dstPt669);\n    connRef669->setRoutingType((ConnType)2);\n\n    ConnRef *connRef670 = new ConnRef(router, 670);\n    ConnEnd srcPt670(Point(769.958, 1440.24), 4);\n    connRef670->setSourceEndpoint(srcPt670);\n    ConnEnd dstPt670(Point(711.958, 1440.24), 8);\n    connRef670->setDestEndpoint(dstPt670);\n    connRef670->setRoutingType((ConnType)2);\n\n    ConnRef *connRef671 = new ConnRef(router, 671);\n    ConnEnd srcPt671(Point(1327.86, 1440.24), 8);\n    connRef671->setSourceEndpoint(srcPt671);\n    ConnEnd dstPt671(Point(1385.86, 1440.24), 4);\n    connRef671->setDestEndpoint(dstPt671);\n    connRef671->setRoutingType((ConnType)2);\n\n    ConnRef *connRef672 = new ConnRef(router, 672);\n    ConnEnd srcPt672(Point(610.333, 2427.3), 2);\n    connRef672->setSourceEndpoint(srcPt672);\n    ConnEnd dstPt672(Point(610.333, 2477.3), 1);\n    connRef672->setDestEndpoint(dstPt672);\n    connRef672->setRoutingType((ConnType)2);\n\n    ConnRef *connRef673 = new ConnRef(router, 673);\n    ConnEnd srcPt673(Point(668.333, 2612.3), 4);\n    connRef673->setSourceEndpoint(srcPt673);\n    ConnEnd dstPt673(Point(610.333, 2612.3), 8);\n    connRef673->setDestEndpoint(dstPt673);\n    connRef673->setRoutingType((ConnType)2);\n\n    ConnRef *connRef674 = new ConnRef(router, 674);\n    ConnEnd srcPt674(Point(610.333, 3121.3), 1);\n    connRef674->setSourceEndpoint(srcPt674);\n    ConnEnd dstPt674(Point(610.333, 3071.3), 2);\n    connRef674->setDestEndpoint(dstPt674);\n    connRef674->setRoutingType((ConnType)2);\n\n    ConnRef *connRef675 = new ConnRef(router, 675);\n    ConnEnd srcPt675(Point(1139.96, 2612.3), 8);\n    connRef675->setSourceEndpoint(srcPt675);\n    ConnEnd dstPt675(Point(1197.96, 2612.3), 4);\n    connRef675->setDestEndpoint(dstPt675);\n    connRef675->setRoutingType((ConnType)2);\n\n    ConnRef *connRef676 = new ConnRef(router, 676);\n    ConnEnd srcPt676(Point(1257.96, 2612.3), 8);\n    connRef676->setSourceEndpoint(srcPt676);\n    ConnEnd dstPt676(Point(1315.96, 2612.3), 4);\n    connRef676->setDestEndpoint(dstPt676);\n    connRef676->setRoutingType((ConnType)2);\n\n    ConnRef *connRef677 = new ConnRef(router, 677);\n    ConnEnd srcPt677(Point(1704.79, 2757.3), 4);\n    connRef677->setSourceEndpoint(srcPt677);\n    ConnEnd dstPt677(Point(1646.79, 2757.3), 8);\n    connRef677->setDestEndpoint(dstPt677);\n    connRef677->setRoutingType((ConnType)2);\n\n    ConnRef *connRef678 = new ConnRef(router, 678);\n    ConnEnd srcPt678(Point(1621.6, 2688.3), 4);\n    connRef678->setSourceEndpoint(srcPt678);\n    ConnEnd dstPt678(Point(1563.6, 2688.3), 8);\n    connRef678->setDestEndpoint(dstPt678);\n    connRef678->setRoutingType((ConnType)2);\n\n    ConnRef *connRef679 = new ConnRef(router, 679);\n    ConnEnd srcPt679(Point(1480.46, 2757.3), 8);\n    connRef679->setSourceEndpoint(srcPt679);\n    ConnEnd dstPt679(Point(1538.46, 2757.3), 4);\n    connRef679->setDestEndpoint(dstPt679);\n    connRef679->setRoutingType((ConnType)2);\n\n    ConnRef *connRef680 = new ConnRef(router, 680);\n    ConnEnd srcPt680(Point(1704.79, 3140.3), 4);\n    connRef680->setSourceEndpoint(srcPt680);\n    ConnEnd dstPt680(Point(1646.79, 3140.3), 8);\n    connRef680->setDestEndpoint(dstPt680);\n    connRef680->setRoutingType((ConnType)2);\n\n    ConnRef *connRef681 = new ConnRef(router, 681);\n    ConnEnd srcPt681(Point(1480.46, 3140.3), 8);\n    connRef681->setSourceEndpoint(srcPt681);\n    ConnEnd dstPt681(Point(1538.46, 3140.3), 4);\n    connRef681->setDestEndpoint(dstPt681);\n    connRef681->setRoutingType((ConnType)2);\n\n    ConnRef *connRef682 = new ConnRef(router, 682);\n    ConnEnd srcPt682(Point(1621.6, 3071.3), 4);\n    connRef682->setSourceEndpoint(srcPt682);\n    ConnEnd dstPt682(Point(1563.6, 3071.3), 8);\n    connRef682->setDestEndpoint(dstPt682);\n    connRef682->setRoutingType((ConnType)2);\n\n    ConnRef *connRef683 = new ConnRef(router, 683);\n    ConnEnd srcPt683(Point(2229.79, 2699.3), 2);\n    connRef683->setSourceEndpoint(srcPt683);\n    ConnEnd dstPt683(Point(2229.79, 2749.3), 1);\n    connRef683->setDestEndpoint(dstPt683);\n    connRef683->setRoutingType((ConnType)2);\n\n    ConnRef *connRef684 = new ConnRef(router, 684);\n    ConnEnd srcPt684(Point(2392.71, 2612.3), 4);\n    connRef684->setSourceEndpoint(srcPt684);\n    ConnEnd dstPt684(Point(2334.71, 2612.3), 8);\n    connRef684->setDestEndpoint(dstPt684);\n    connRef684->setRoutingType((ConnType)2);\n\n    ConnRef *connRef685 = new ConnRef(router, 685);\n    ConnEnd srcPt685(Point(2477.71, 3005.3), 1);\n    connRef685->setSourceEndpoint(srcPt685);\n    ConnEnd dstPt685(Point(2477.71, 2955.3), 2);\n    connRef685->setDestEndpoint(dstPt685);\n    connRef685->setRoutingType((ConnType)2);\n\n    ConnRef *connRef686 = new ConnRef(router, 686);\n    ConnEnd srcPt686(Point(792.958, 2477.3), 8);\n    connRef686->setSourceEndpoint(srcPt686);\n    ConnEnd dstPt686(Point(850.958, 2477.3), 4);\n    connRef686->setDestEndpoint(dstPt686);\n    connRef686->setRoutingType((ConnType)2);\n\n    ConnRef *connRef687 = new ConnRef(router, 687);\n    ConnEnd srcPt687(Point(958.958, 2427.3), 2);\n    connRef687->setSourceEndpoint(srcPt687);\n    ConnEnd dstPt687(Point(958.958, 2477.3), 1);\n    connRef687->setDestEndpoint(dstPt687);\n    connRef687->setRoutingType((ConnType)2);\n\n    ConnRef *connRef688 = new ConnRef(router, 688);\n    ConnEnd srcPt688(Point(934.358, 2612.3), 4);\n    connRef688->setSourceEndpoint(srcPt688);\n    ConnEnd dstPt688(Point(876.358, 2612.3), 8);\n    connRef688->setDestEndpoint(dstPt688);\n    connRef688->setRoutingType((ConnType)2);\n\n    ConnRef *connRef689 = new ConnRef(router, 689);\n    ConnEnd srcPt689(Point(934.358, 2757.3), 4);\n    connRef689->setSourceEndpoint(srcPt689);\n    ConnEnd dstPt689(Point(876.358, 2757.3), 8);\n    connRef689->setDestEndpoint(dstPt689);\n    connRef689->setRoutingType((ConnType)2);\n\n    ConnRef *connRef690 = new ConnRef(router, 690);\n    ConnEnd srcPt690(Point(876.358, 3021.3), 2);\n    connRef690->setSourceEndpoint(srcPt690);\n    ConnEnd dstPt690(Point(876.358, 3071.3), 1);\n    connRef690->setDestEndpoint(dstPt690);\n    connRef690->setRoutingType((ConnType)2);\n\n    ConnRef *connRef691 = new ConnRef(router, 691);\n    ConnEnd srcPt691(Point(2171.79, 991.643), 2);\n    connRef691->setSourceEndpoint(srcPt691);\n    ConnEnd dstPt691(Point(2171.79, 1041.64), 1);\n    connRef691->setDestEndpoint(dstPt691);\n    connRef691->setRoutingType((ConnType)2);\n\n    ConnRef *connRef692 = new ConnRef(router, 692);\n    ConnEnd srcPt692(Point(2477.71, 991.643), 2);\n    connRef692->setSourceEndpoint(srcPt692);\n    ConnEnd dstPt692(Point(2477.71, 1041.64), 1);\n    connRef692->setDestEndpoint(dstPt692);\n    connRef692->setRoutingType((ConnType)2);\n\n    ConnRef *connRef693 = new ConnRef(router, 693);\n    ConnEnd srcPt693(Point(2241.79, 1193.64), 1);\n    connRef693->setSourceEndpoint(srcPt693);\n    ConnEnd dstPt693(Point(2241.79, 1143.64), 2);\n    connRef693->setDestEndpoint(dstPt693);\n    connRef693->setRoutingType((ConnType)2);\n\n    ConnRef *connRef694 = new ConnRef(router, 694);\n    ConnEnd srcPt694(Point(1769.79, 456.5), 2);\n    connRef694->setSourceEndpoint(srcPt694);\n    ConnEnd dstPt694(Point(1769.79, 506.5), 1);\n    connRef694->setDestEndpoint(dstPt694);\n    connRef694->setRoutingType((ConnType)2);\n\n    ConnRef *connRef695 = new ConnRef(router, 695);\n    ConnEnd srcPt695(Point(1769.79, 627.5), 1);\n    connRef695->setSourceEndpoint(srcPt695);\n    ConnEnd dstPt695(Point(1769.79, 577.5), 2);\n    connRef695->setDestEndpoint(dstPt695);\n    connRef695->setRoutingType((ConnType)2);\n\n    ConnRef *connRef696 = new ConnRef(router, 696);\n    ConnEnd srcPt696(Point(2099.79, 1276.24), 4);\n    connRef696->setSourceEndpoint(srcPt696);\n    ConnEnd dstPt696(Point(2041.79, 1276.24), 8);\n    connRef696->setDestEndpoint(dstPt696);\n    connRef696->setRoutingType((ConnType)2);\n\n    ConnRef *connRef697 = new ConnRef(router, 697);\n    ConnEnd srcPt697(Point(381, 1125.24), 4);\n    connRef697->setSourceEndpoint(srcPt697);\n    ConnEnd dstPt697(Point(323, 1125.24), 8);\n    connRef697->setDestEndpoint(dstPt697);\n    connRef697->setRoutingType((ConnType)2);\n\n    ConnRef *connRef698 = new ConnRef(router, 698);\n    ConnEnd srcPt698(Point(223, 1143.64), 8);\n    connRef698->setSourceEndpoint(srcPt698);\n    ConnEnd dstPt698(Point(281, 1143.64), 4);\n    connRef698->setDestEndpoint(dstPt698);\n    connRef698->setRoutingType((ConnType)2);\n\n    ConnRef *connRef699 = new ConnRef(router, 699);\n    ConnEnd srcPt699(Point(523.333, 1143.64), 4);\n    connRef699->setSourceEndpoint(srcPt699);\n    ConnEnd dstPt699(Point(465.333, 1143.64), 8);\n    connRef699->setDestEndpoint(dstPt699);\n    connRef699->setRoutingType((ConnType)2);\n\n    ConnRef *connRef700 = new ConnRef(router, 700);\n    ConnEnd srcPt700(Point(1782.79, 3351.3), 2);\n    connRef700->setSourceEndpoint(srcPt700);\n    ConnEnd dstPt700(Point(1782.79, 3401.3), 1);\n    connRef700->setDestEndpoint(dstPt700);\n    connRef700->setRoutingType((ConnType)2);\n\n    ConnRef *connRef701 = new ConnRef(router, 701);\n    ConnEnd srcPt701(Point(1782.79, 3147.3), 2);\n    connRef701->setSourceEndpoint(srcPt701);\n    ConnEnd dstPt701(Point(1782.79, 3197.3), 1);\n    connRef701->setDestEndpoint(dstPt701);\n    connRef701->setRoutingType((ConnType)2);\n\n    ConnRef *connRef702 = new ConnRef(router, 702);\n    ConnEnd srcPt702(Point(2775.54, 73.5), 2);\n    connRef702->setSourceEndpoint(srcPt702);\n    ConnEnd dstPt702(Point(2775.54, 123.5), 1);\n    connRef702->setDestEndpoint(dstPt702);\n    connRef702->setRoutingType((ConnType)2);\n\n    ConnRef *connRef703 = new ConnRef(router, 703);\n    ConnEnd srcPt703(Point(1953.79, 2895.3), 2);\n    connRef703->setSourceEndpoint(srcPt703);\n    ConnEnd dstPt703(Point(1953.79, 2945.3), 1);\n    connRef703->setDestEndpoint(dstPt703);\n    connRef703->setRoutingType((ConnType)2);\n\n    ConnRef *connRef704 = new ConnRef(router, 704);\n    ConnEnd srcPt704(Point(2171.79, 170.875), 2);\n    connRef704->setSourceEndpoint(srcPt704);\n    ConnEnd dstPt704(Point(2171.79, 220.875), 1);\n    connRef704->setDestEndpoint(dstPt704);\n    connRef704->setRoutingType((ConnType)2);\n\n    ConnRef *connRef705 = new ConnRef(router, 705);\n    ConnEnd srcPt705(Point(1926.79, 1822.95), 2);\n    connRef705->setSourceEndpoint(srcPt705);\n    ConnEnd dstPt705(Point(1926.79, 1872.95), 1);\n    connRef705->setDestEndpoint(dstPt705);\n    connRef705->setRoutingType((ConnType)2);\n\n    ConnRef *connRef706 = new ConnRef(router, 706);\n    ConnEnd srcPt706(Point(1464.46, 1822.95), 2);\n    connRef706->setSourceEndpoint(srcPt706);\n    ConnEnd dstPt706(Point(1464.46, 1872.95), 1);\n    connRef706->setDestEndpoint(dstPt706);\n    connRef706->setRoutingType((ConnType)2);\n\n    ConnRef *connRef707 = new ConnRef(router, 707);\n    ConnEnd srcPt707(Point(972.958, 1822.95), 2);\n    connRef707->setSourceEndpoint(srcPt707);\n    ConnEnd dstPt707(Point(972.958, 1872.95), 1);\n    connRef707->setDestEndpoint(dstPt707);\n    connRef707->setRoutingType((ConnType)2);\n\n    ConnRef *connRef708 = new ConnRef(router, 708);\n    ConnEnd srcPt708(Point(3031.24, 301.75), 8);\n    connRef708->setSourceEndpoint(srcPt708);\n    ConnEnd dstPt708(Point(3089.24, 301.75), 4);\n    connRef708->setDestEndpoint(dstPt708);\n    connRef708->setRoutingType((ConnType)2);\n\n    ConnRef *connRef709 = new ConnRef(router, 709);\n    ConnEnd srcPt709(Point(2099.79, 2749.3), 4);\n    connRef709->setSourceEndpoint(srcPt709);\n    ConnEnd dstPt709(Point(2041.79, 2749.3), 8);\n    connRef709->setDestEndpoint(dstPt709);\n    connRef709->setRoutingType((ConnType)2);\n\n    ConnRef *connRef710 = new ConnRef(router, 710);\n    ConnEnd srcPt710(Point(1919.79, 2749.3), 4);\n    connRef710->setSourceEndpoint(srcPt710);\n    ConnEnd dstPt710(Point(1861.79, 2749.3), 8);\n    connRef710->setDestEndpoint(dstPt710);\n    connRef710->setRoutingType((ConnType)2);\n\n    ConnRef *connRef711 = new ConnRef(router, 711);\n    ConnEnd srcPt711(Point(1131.18, 708.5), 4);\n    connRef711->setSourceEndpoint(srcPt711);\n    ConnEnd dstPt711(Point(1073.18, 708.5), 8);\n    connRef711->setDestEndpoint(dstPt711);\n    connRef711->setRoutingType((ConnType)2);\n\n    ConnRef *connRef712 = new ConnRef(router, 712);\n    ConnEnd srcPt712(Point(1229.46, 519.7), 2);\n    connRef712->setSourceEndpoint(srcPt712);\n    ConnEnd dstPt712(Point(1229.46, 569.7), 1);\n    connRef712->setDestEndpoint(dstPt712);\n    connRef712->setRoutingType((ConnType)2);\n\n    ConnRef *connRef713 = new ConnRef(router, 713);\n    ConnEnd srcPt713(Point(934.358, 569.7), 4);\n    connRef713->setSourceEndpoint(srcPt713);\n    ConnEnd dstPt713(Point(876.358, 569.7), 8);\n    connRef713->setDestEndpoint(dstPt713);\n    connRef713->setRoutingType((ConnType)2);\n\n    ConnRef *connRef714 = new ConnRef(router, 714);\n    ConnEnd srcPt714(Point(462.333, 512.5), 4);\n    connRef714->setSourceEndpoint(srcPt714);\n    ConnEnd dstPt714(Point(404.333, 512.5), 8);\n    connRef714->setDestEndpoint(dstPt714);\n    connRef714->setRoutingType((ConnType)2);\n\n    ConnRef *connRef715 = new ConnRef(router, 715);\n    ConnEnd srcPt715(Point(2477.71, 2814.3), 2);\n    connRef715->setSourceEndpoint(srcPt715);\n    ConnEnd dstPt715(Point(2477.71, 2864.3), 1);\n    connRef715->setDestEndpoint(dstPt715);\n    connRef715->setRoutingType((ConnType)2);\n\n    ConnRef *connRef716 = new ConnRef(router, 716);\n    ConnEnd srcPt716(Point(2910.99, 2562.3), 2);\n    connRef716->setSourceEndpoint(srcPt716);\n    ConnEnd dstPt716(Point(2910.99, 2612.3), 1);\n    connRef716->setDestEndpoint(dstPt716);\n    connRef716->setRoutingType((ConnType)2);\n\n    ConnRef *connRef717 = new ConnRef(router, 717);\n    ConnEnd srcPt717(Point(3300.24, 2612.3), 4);\n    connRef717->setSourceEndpoint(srcPt717);\n    ConnEnd dstPt717(Point(3242.24, 2612.3), 8);\n    connRef717->setDestEndpoint(dstPt717);\n    connRef717->setRoutingType((ConnType)2);\n\n    ConnRef *connRef718 = new ConnRef(router, 718);\n    ConnEnd srcPt718(Point(2884.99, 3021.3), 2);\n    connRef718->setSourceEndpoint(srcPt718);\n    ConnEnd dstPt718(Point(2884.99, 3071.3), 1);\n    connRef718->setDestEndpoint(dstPt718);\n    connRef718->setRoutingType((ConnType)2);\n\n    ConnRef *connRef719 = new ConnRef(router, 719);\n    ConnEnd srcPt719(Point(3384.74, 3071.3), 4);\n    connRef719->setSourceEndpoint(srcPt719);\n    ConnEnd dstPt719(Point(3326.74, 3071.3), 8);\n    connRef719->setDestEndpoint(dstPt719);\n    connRef719->setRoutingType((ConnType)2);\n\n    ConnRef *connRef720 = new ConnRef(router, 720);\n    ConnEnd srcPt720(Point(1782.79, 3249.3), 2);\n    connRef720->setSourceEndpoint(srcPt720);\n    ConnEnd dstPt720(Point(1782.79, 3299.3), 1);\n    connRef720->setDestEndpoint(dstPt720);\n    connRef720->setRoutingType((ConnType)2);\n\n    ConnRef *connRef721 = new ConnRef(router, 721);\n    ConnEnd srcPt721(Point(1563.6, 2399.05), 15);\n    connRef721->setSourceEndpoint(srcPt721);\n    ConnEnd dstPt721(Point(1197.96, 2597.3), 1);\n    connRef721->setDestEndpoint(dstPt721);\n    connRef721->setRoutingType((ConnType)2);\n\n    ConnRef *connRef722 = new ConnRef(router, 722);\n    ConnEnd srcPt722(Point(1563.6, 2399.05), 15);\n    connRef722->setSourceEndpoint(srcPt722);\n    ConnEnd dstPt722(Point(1315.96, 2597.3), 1);\n    connRef722->setDestEndpoint(dstPt722);\n    connRef722->setRoutingType((ConnType)2);\n\n    ConnRef *connRef723 = new ConnRef(router, 723);\n    ConnEnd srcPt723(Point(1563.6, 2399.05), 15);\n    connRef723->setSourceEndpoint(srcPt723);\n    ConnEnd dstPt723(Point(1563.6, 2673.3), 1);\n    connRef723->setDestEndpoint(dstPt723);\n    connRef723->setRoutingType((ConnType)2);\n\n    ConnRef *connRef724 = new ConnRef(router, 724);\n    ConnEnd srcPt724(Point(1563.6, 2399.05), 15);\n    connRef724->setSourceEndpoint(srcPt724);\n    ConnEnd dstPt724(Point(1538.46, 2742.3), 1);\n    connRef724->setDestEndpoint(dstPt724);\n    connRef724->setRoutingType((ConnType)2);\n\n    ConnRef *connRef725 = new ConnRef(router, 725);\n    ConnEnd srcPt725(Point(1523.87, 1631.77), 15);\n    connRef725->setSourceEndpoint(srcPt725);\n    ConnEnd dstPt725(Point(1782.79, 1569.64), 15);\n    connRef725->setDestEndpoint(dstPt725);\n    connRef725->setRoutingType((ConnType)2);\n    */\n\n    ConnRef *connRef726 = new ConnRef(router, 726);\n    ConnEnd srcPt726(Point(2111.79, 1884.95), 15);\n    connRef726->setSourceEndpoint(srcPt726);\n    ConnEnd dstPt726(Point(2241.79, 1872.95), 15);\n    connRef726->setDestEndpoint(dstPt726);\n    connRef726->setRoutingType((ConnType)2);\n\n    /*\n    ConnRef *connRef727 = new ConnRef(router, 727);\n    ConnEnd srcPt727(Point(2189.79, 1733.77), 15);\n    connRef727->setSourceEndpoint(srcPt727);\n    ConnEnd dstPt727(Point(2241.79, 1872.95), 15);\n    connRef727->setDestEndpoint(dstPt727);\n    connRef727->setRoutingType((ConnType)2);\n\n    ConnRef *connRef728 = new ConnRef(router, 728);\n    ConnEnd srcPt728(Point(1315.96, 312.5), 15);\n    connRef728->setSourceEndpoint(srcPt728);\n    ConnEnd dstPt728(Point(1426.46, 227), 2);\n    connRef728->setDestEndpoint(dstPt728);\n    connRef728->setRoutingType((ConnType)2);\n\n    ConnRef *connRef729 = new ConnRef(router, 729);\n    ConnEnd srcPt729(Point(2968.99, 1731.64), 15);\n    connRef729->setSourceEndpoint(srcPt729);\n    ConnEnd dstPt729(Point(3081.74, 1597.44), 2);\n    connRef729->setDestEndpoint(dstPt729);\n    connRef729->setRoutingType((ConnType)2);\n\n    ConnRef *connRef730 = new ConnRef(router, 730);\n    ConnEnd srcPt730(Point(3119.9, 1872.95), 15);\n    connRef730->setSourceEndpoint(srcPt730);\n    ConnEnd dstPt730(Point(3121.74, 1597.44), 2);\n    connRef730->setDestEndpoint(dstPt730);\n    connRef730->setRoutingType((ConnType)2);\n\n    ConnRef *connRef731 = new ConnRef(router, 731);\n    ConnEnd srcPt731(Point(2041.79, 312.5), 15);\n    connRef731->setSourceEndpoint(srcPt731);\n    ConnEnd dstPt731(Point(1907.3, 385), 4);\n    connRef731->setDestEndpoint(dstPt731);\n    connRef731->setRoutingType((ConnType)2);\n\n    ConnRef *connRef732 = new ConnRef(router, 732);\n    ConnEnd srcPt732(Point(1563.6, 978.5), 15);\n    connRef732->setSourceEndpoint(srcPt732);\n    ConnEnd dstPt732(Point(1671.79, 1204.74), 4);\n    connRef732->setDestEndpoint(dstPt732);\n    connRef732->setRoutingType((ConnType)2);\n\n    ConnRef *connRef733 = new ConnRef(router, 733);\n    ConnEnd srcPt733(Point(2041.79, 569.7), 15);\n    connRef733->setSourceEndpoint(srcPt733);\n    ConnEnd dstPt733(Point(1918.79, 1204.74), 8);\n    connRef733->setDestEndpoint(dstPt733);\n    connRef733->setRoutingType((ConnType)2);\n\n    ConnRef *connRef734 = new ConnRef(router, 734);\n    ConnEnd srcPt734(Point(1563.6, 3413.3), 15);\n    connRef734->setSourceEndpoint(srcPt734);\n    ConnEnd dstPt734(Point(1517.1, 2886.8), 8);\n    connRef734->setDestEndpoint(dstPt734);\n    connRef734->setRoutingType((ConnType)2);\n\n    ConnRef *connRef735 = new ConnRef(router, 735);\n    ConnEnd srcPt735(Point(390.333, 2399.05), 15);\n    connRef735->setSourceEndpoint(srcPt735);\n    ConnEnd dstPt735(Point(1375.6, 2804.8), 1);\n    connRef735->setDestEndpoint(dstPt735);\n    connRef735->setRoutingType((ConnType)2);\n\n    ConnRef *connRef736 = new ConnRef(router, 736);\n    ConnEnd srcPt736(Point(610.333, 833.833), 15);\n    connRef736->setSourceEndpoint(srcPt736);\n    ConnEnd dstPt736(Point(1233.46, 381), 2);\n    connRef736->setDestEndpoint(dstPt736);\n    connRef736->setRoutingType((ConnType)2);\n\n    ConnRef *connRef737 = new ConnRef(router, 737);\n    ConnEnd srcPt737(Point(610.333, 833.833), 15);\n    connRef737->setSourceEndpoint(srcPt737);\n    ConnEnd dstPt737(Point(1295.36, 908), 1);\n    connRef737->setDestEndpoint(dstPt737);\n    connRef737->setRoutingType((ConnType)2);\n\n    ConnRef *connRef738 = new ConnRef(router, 738);\n    ConnEnd srcPt738(Point(2547.71, 1569.64), 15);\n    connRef738->setSourceEndpoint(srcPt738);\n    ConnEnd dstPt738(Point(2712.49, 1519.94), 4);\n    connRef738->setDestEndpoint(dstPt738);\n    connRef738->setRoutingType((ConnType)2);\n\n    ConnRef *connRef739 = new ConnRef(router, 739);\n    ConnEnd srcPt739(Point(2547.71, 2945.3), 15);\n    connRef739->setSourceEndpoint(srcPt739);\n    ConnEnd dstPt739(Point(2607.04, 3118.8), 1);\n    connRef739->setDestEndpoint(dstPt739);\n    connRef739->setRoutingType((ConnType)2);\n\n    ConnRef *connRef740 = new ConnRef(router, 740);\n    ConnEnd srcPt740(Point(2547.71, 2945.3), 15);\n    connRef740->setSourceEndpoint(srcPt740);\n    ConnEnd dstPt740(Point(2630.04, 2873.8), 4);\n    connRef740->setDestEndpoint(dstPt740);\n    connRef740->setRoutingType((ConnType)2);\n\n    ConnRef *connRef741 = new ConnRef(router, 741);\n    ConnEnd srcPt741(Point(1563.6, 2399.05), 15);\n    connRef741->setSourceEndpoint(srcPt741);\n    ConnEnd dstPt741(Point(1818.33, 2300.88), 8);\n    connRef741->setDestEndpoint(dstPt741);\n    connRef741->setRoutingType((ConnType)2);\n    */\n\n    router->processTransaction();\n    router->outputDiagram(\"output/finalSegmentNudging1\");\n\n    bool optimisedForConnectorType = true;\n    int crossings = router->existsCrossings(optimisedForConnectorType);\n\n    delete router;\n    return (crossings > 0) ? 1 : 0;\n};\n"
  },
  {
    "path": "cola/libavoid/tests/finalSegmentNudging2.cpp",
    "content": "// KEGG -> SBGN example #072\n//\n#include \"libavoid/libavoid.h\"\nusing namespace Avoid;\nint main(void) {\n    Router *router = new Router(\n            PolyLineRouting | OrthogonalRouting);\n    router->setRoutingPenalty((PenaltyType)0, 50);\n    router->setRoutingPenalty((PenaltyType)1, 0);\n    router->setRoutingPenalty((PenaltyType)2, 0);\n    router->setRoutingPenalty((PenaltyType)3, 4000);\n    router->setRoutingPenalty((PenaltyType)4, 0);\n    router->setRoutingPenalty((PenaltyType)5, 100);\n    router->setRoutingOption((RoutingOption)0, true);\n    router->setRoutingOption((RoutingOption)1, true);\n    router->setRoutingOption((RoutingOption)2, false);\n\n    /*\n    Polygon poly1(4);\n    poly1.ps[0] = Point(541.101, 45);\n    poly1.ps[1] = Point(541.101, 89);\n    poly1.ps[2] = Point(274.101, 89);\n    poly1.ps[3] = Point(274.101, 45);\n    new ShapeRef(router, poly1, 1);\n\n    Polygon poly2(4);\n    poly2.ps[0] = Point(445.857, 111);\n    poly2.ps[1] = Point(445.857, 276);\n    poly2.ps[2] = Point(309.857, 276);\n    poly2.ps[3] = Point(309.857, 111);\n    new ShapeRef(router, poly2, 2);\n    */\n\n    Polygon poly3(4);\n    poly3.ps[0] = Point(328, 368);\n    poly3.ps[1] = Point(328, 400);\n    poly3.ps[2] = Point(308, 400);\n    poly3.ps[3] = Point(308, 368);\n    new ShapeRef(router, poly3, 3);\n\n    Polygon poly4(4);\n    poly4.ps[0] = Point(328, 492);\n    poly4.ps[1] = Point(328, 524);\n    poly4.ps[2] = Point(308, 524);\n    poly4.ps[3] = Point(308, 492);\n    new ShapeRef(router, poly4, 4);\n\n    /*\n    Polygon poly5(4);\n    poly5.ps[0] = Point(328, 629);\n    poly5.ps[1] = Point(328, 661);\n    poly5.ps[2] = Point(308, 661);\n    poly5.ps[3] = Point(308, 629);\n    new ShapeRef(router, poly5, 5);\n\n    Polygon poly6(4);\n    poly6.ps[0] = Point(511.857, 308);\n    poly6.ps[1] = Point(511.857, 328);\n    poly6.ps[2] = Point(479.857, 328);\n    poly6.ps[3] = Point(479.857, 308);\n    new ShapeRef(router, poly6, 6);\n\n    Polygon poly7(4);\n    poly7.ps[0] = Point(518.357, 629);\n    poly7.ps[1] = Point(518.357, 661);\n    poly7.ps[2] = Point(498.357, 661);\n    poly7.ps[3] = Point(498.357, 629);\n    new ShapeRef(router, poly7, 7);\n\n    Polygon poly8(4);\n    poly8.ps[0] = Point(827.857, 210);\n    poly8.ps[1] = Point(827.857, 270);\n    poly8.ps[2] = Point(545.857, 270);\n    poly8.ps[3] = Point(545.857, 210);\n    new ShapeRef(router, poly8, 8);\n\n    Polygon poly9(4);\n    poly9.ps[0] = Point(805.357, 409);\n    poly9.ps[1] = Point(805.357, 469);\n    poly9.ps[2] = Point(572.357, 469);\n    poly9.ps[3] = Point(572.357, 409);\n    new ShapeRef(router, poly9, 9);\n\n    Polygon poly10(4);\n    poly10.ps[0] = Point(157.5, 426);\n    poly10.ps[1] = Point(157.5, 458);\n    poly10.ps[2] = Point(137.5, 458);\n    poly10.ps[3] = Point(137.5, 426);\n    new ShapeRef(router, poly10, 10);\n\n    Polygon poly11(4);\n    poly11.ps[0] = Point(276, 597.655);\n    poly11.ps[1] = Point(276, 657.655);\n    poly11.ps[2] = Point(45, 657.655);\n    poly11.ps[3] = Point(45, 597.655);\n    new ShapeRef(router, poly11, 11);\n\n    Polygon poly12(4);\n    poly12.ps[0] = Point(349, 287);\n    poly12.ps[1] = Point(349, 349);\n    poly12.ps[2] = Point(287, 349);\n    poly12.ps[3] = Point(287, 287);\n    new ShapeRef(router, poly12, 12);\n    */\n\n    Polygon poly13(4);\n    poly13.ps[0] = Point(349, 415);\n    poly13.ps[1] = Point(349, 477);\n    poly13.ps[2] = Point(287, 477);\n    poly13.ps[3] = Point(287, 415);\n    new ShapeRef(router, poly13, 13);\n\n    /*\n    Polygon poly14(4);\n    poly14.ps[0] = Point(349, 676);\n    poly14.ps[1] = Point(349, 738);\n    poly14.ps[2] = Point(287, 738);\n    poly14.ps[3] = Point(287, 676);\n    new ShapeRef(router, poly14, 14);\n\n    Polygon poly15(4);\n    poly15.ps[0] = Point(349, 552);\n    poly15.ps[1] = Point(349, 614);\n    poly15.ps[2] = Point(287, 614);\n    poly15.ps[3] = Point(287, 552);\n    new ShapeRef(router, poly15, 15);\n\n    Polygon poly16(4);\n    poly16.ps[0] = Point(539.357, 676);\n    poly16.ps[1] = Point(539.357, 738);\n    poly16.ps[2] = Point(477.357, 738);\n    poly16.ps[3] = Point(477.357, 676);\n    new ShapeRef(router, poly16, 16);\n    */\n\n    Polygon poly17(4);\n    poly17.ps[0] = Point(640.857, 336);\n    poly17.ps[1] = Point(640.857, 398);\n    poly17.ps[2] = Point(578.857, 398);\n    poly17.ps[3] = Point(578.857, 336);\n    new ShapeRef(router, poly17, 17);\n\n    Polygon poly18(4);\n    poly18.ps[0] = Point(404, 364);\n    poly18.ps[1] = Point(404, 404);\n    poly18.ps[2] = Point(328, 404);\n    poly18.ps[3] = Point(328, 364);\n    new ShapeRef(router, poly18, 18);\n\n    Polygon poly19(4);\n    poly19.ps[0] = Point(404, 488);\n    poly19.ps[1] = Point(404, 528);\n    poly19.ps[2] = Point(328, 528);\n    poly19.ps[3] = Point(328, 488);\n    new ShapeRef(router, poly19, 19);\n\n    /*\n    Polygon poly20(4);\n    poly20.ps[0] = Point(404, 625);\n    poly20.ps[1] = Point(404, 665);\n    poly20.ps[2] = Point(328, 665);\n    poly20.ps[3] = Point(328, 625);\n    new ShapeRef(router, poly20, 20);\n\n    Polygon poly21(4);\n    poly21.ps[0] = Point(523.857, 248);\n    poly21.ps[1] = Point(523.857, 308);\n    poly21.ps[2] = Point(467.857, 308);\n    poly21.ps[3] = Point(467.857, 248);\n    new ShapeRef(router, poly21, 21);\n\n    Polygon poly22(4);\n    poly22.ps[0] = Point(594.357, 625);\n    poly22.ps[1] = Point(594.357, 665);\n    poly22.ps[2] = Point(518.357, 665);\n    poly22.ps[3] = Point(518.357, 625);\n    new ShapeRef(router, poly22, 22);\n\n    Polygon poly23(4);\n    poly23.ps[0] = Point(137.5, 422);\n    poly23.ps[1] = Point(137.5, 462);\n    poly23.ps[2] = Point(61.5, 462);\n    poly23.ps[3] = Point(61.5, 422);\n    new ShapeRef(router, poly23, 23);\n\n    Polygon poly24(4);\n    poly24.ps[0] = Point(398.357, 216.5);\n    poly24.ps[1] = Point(398.357, 276.5);\n    poly24.ps[2] = Point(358.357, 276.5);\n    poly24.ps[3] = Point(358.357, 216.5);\n    new ShapeRef(router, poly24, 24);\n\n    Polygon poly25(4);\n    poly25.ps[0] = Point(606.357, 220.5);\n    poly25.ps[1] = Point(606.357, 260.5);\n    poly25.ps[2] = Point(546.357, 260.5);\n    poly25.ps[3] = Point(546.357, 220.5);\n    new ShapeRef(router, poly25, 25);\n    */\n\n    Polygon poly26(4);\n    poly26.ps[0] = Point(632.857, 419.5);\n    poly26.ps[1] = Point(632.857, 459.5);\n    poly26.ps[2] = Point(572.857, 459.5);\n    poly26.ps[3] = Point(572.857, 419.5);\n    new ShapeRef(router, poly26, 26);\n\n    /*\n    Polygon poly27(4);\n    poly27.ps[0] = Point(276.5, 608.155);\n    poly27.ps[1] = Point(276.5, 648.155);\n    poly27.ps[2] = Point(216.5, 648.155);\n    poly27.ps[3] = Point(216.5, 608.155);\n    new ShapeRef(router, poly27, 27);\n\n    ConnRef *connRef28 = new ConnRef(router, 28);\n    ConnEnd srcPt28(Point(318, 399), 2);\n    connRef28->setSourceEndpoint(srcPt28);\n    ConnEnd dstPt28(Point(318, 446), 15);\n    connRef28->setDestEndpoint(dstPt28);\n    connRef28->setRoutingType((ConnType)2);\n\n    ConnRef *connRef29 = new ConnRef(router, 29);\n    ConnEnd srcPt29(Point(318, 523), 2);\n    connRef29->setSourceEndpoint(srcPt29);\n    ConnEnd dstPt29(Point(318, 583), 15);\n    connRef29->setDestEndpoint(dstPt29);\n    connRef29->setRoutingType((ConnType)2);\n    */\n\n    ConnRef *connRef30 = new ConnRef(router, 30);\n    ConnEnd srcPt30(Point(318, 523), 2);\n    connRef30->setSourceEndpoint(srcPt30);\n    ConnEnd dstPt30(Point(609.857, 367), 15);\n    connRef30->setDestEndpoint(dstPt30);\n    connRef30->setRoutingType((ConnType)2);\n\n    /*\n    ConnRef *connRef31 = new ConnRef(router, 31);\n    ConnEnd srcPt31(Point(318, 660), 2);\n    connRef31->setSourceEndpoint(srcPt31);\n    ConnEnd dstPt31(Point(318, 707), 15);\n    connRef31->setDestEndpoint(dstPt31);\n    connRef31->setRoutingType((ConnType)2);\n\n    ConnRef *connRef32 = new ConnRef(router, 32);\n    ConnEnd srcPt32(Point(480.857, 318), 4);\n    connRef32->setSourceEndpoint(srcPt32);\n    ConnEnd dstPt32(Point(318, 318), 15);\n    connRef32->setDestEndpoint(dstPt32);\n    connRef32->setRoutingType((ConnType)2);\n\n    ConnRef *connRef33 = new ConnRef(router, 33);\n    ConnEnd srcPt33(Point(510.857, 318), 8);\n    connRef33->setSourceEndpoint(srcPt33);\n    ConnEnd dstPt33(Point(609.857, 367), 15);\n    connRef33->setDestEndpoint(dstPt33);\n    connRef33->setRoutingType((ConnType)2);\n\n    ConnRef *connRef34 = new ConnRef(router, 34);\n    ConnEnd srcPt34(Point(508.357, 630), 1);\n    connRef34->setSourceEndpoint(srcPt34);\n    ConnEnd dstPt34(Point(318, 583), 15);\n    connRef34->setDestEndpoint(dstPt34);\n    connRef34->setRoutingType((ConnType)2);\n\n    ConnRef *connRef35 = new ConnRef(router, 35);\n    ConnEnd srcPt35(Point(147.5, 427), 1);\n    connRef35->setSourceEndpoint(srcPt35);\n    ConnEnd dstPt35(Point(318, 318), 15);\n    connRef35->setDestEndpoint(dstPt35);\n    connRef35->setRoutingType((ConnType)2);\n\n    ConnRef *connRef36 = new ConnRef(router, 36);\n    ConnEnd srcPt36(Point(147.5, 457), 2);\n    connRef36->setSourceEndpoint(srcPt36);\n    ConnEnd dstPt36(Point(318, 583), 15);\n    connRef36->setDestEndpoint(dstPt36);\n    connRef36->setRoutingType((ConnType)2);\n\n    ConnRef *connRef37 = new ConnRef(router, 37);\n    ConnEnd srcPt37(Point(318, 446), 15);\n    connRef37->setSourceEndpoint(srcPt37);\n    ConnEnd dstPt37(Point(318, 493), 1);\n    connRef37->setDestEndpoint(dstPt37);\n    connRef37->setRoutingType((ConnType)2);\n\n    ConnRef *connRef38 = new ConnRef(router, 38);\n    ConnEnd srcPt38(Point(508.357, 660), 2);\n    connRef38->setSourceEndpoint(srcPt38);\n    ConnEnd dstPt38(Point(508.357, 707), 15);\n    connRef38->setDestEndpoint(dstPt38);\n    connRef38->setRoutingType((ConnType)2);\n\n    ConnRef *connRef39 = new ConnRef(router, 39);\n    ConnEnd srcPt39(Point(376, 384), 4);\n    connRef39->setSourceEndpoint(srcPt39);\n    ConnEnd dstPt39(Point(318, 384), 8);\n    connRef39->setDestEndpoint(dstPt39);\n    connRef39->setRoutingType((ConnType)2);\n\n    ConnRef *connRef40 = new ConnRef(router, 40);\n    ConnEnd srcPt40(Point(376, 508), 4);\n    connRef40->setSourceEndpoint(srcPt40);\n    ConnEnd dstPt40(Point(318, 508), 8);\n    connRef40->setDestEndpoint(dstPt40);\n    connRef40->setRoutingType((ConnType)2);\n\n    ConnRef *connRef41 = new ConnRef(router, 41);\n    ConnEnd srcPt41(Point(376, 645), 4);\n    connRef41->setSourceEndpoint(srcPt41);\n    ConnEnd dstPt41(Point(318, 645), 8);\n    connRef41->setDestEndpoint(dstPt41);\n    connRef41->setRoutingType((ConnType)2);\n\n    ConnRef *connRef42 = new ConnRef(router, 42);\n    ConnEnd srcPt42(Point(495.857, 268), 2);\n    connRef42->setSourceEndpoint(srcPt42);\n    ConnEnd dstPt42(Point(495.857, 318), 1);\n    connRef42->setDestEndpoint(dstPt42);\n    connRef42->setRoutingType((ConnType)2);\n\n    ConnRef *connRef43 = new ConnRef(router, 43);\n    ConnEnd srcPt43(Point(566.357, 645), 4);\n    connRef43->setSourceEndpoint(srcPt43);\n    ConnEnd dstPt43(Point(508.357, 645), 8);\n    connRef43->setDestEndpoint(dstPt43);\n    connRef43->setRoutingType((ConnType)2);\n\n    ConnRef *connRef44 = new ConnRef(router, 44);\n    ConnEnd srcPt44(Point(89.5, 442), 8);\n    connRef44->setSourceEndpoint(srcPt44);\n    ConnEnd dstPt44(Point(147.5, 442), 4);\n    connRef44->setDestEndpoint(dstPt44);\n    connRef44->setRoutingType((ConnType)2);\n\n    ConnRef *connRef45 = new ConnRef(router, 45);\n    ConnEnd srcPt45(Point(318, 318), 15);\n    connRef45->setSourceEndpoint(srcPt45);\n    ConnEnd dstPt45(Point(318, 369), 1);\n    connRef45->setDestEndpoint(dstPt45);\n    connRef45->setRoutingType((ConnType)2);\n    */\n\n    ConnRef *connRef46 = new ConnRef(router, 46);\n    ConnEnd srcPt46(Point(609.857, 367), 15);\n    connRef46->setSourceEndpoint(srcPt46);\n    ConnEnd dstPt46(Point(318, 369), 1);\n    connRef46->setDestEndpoint(dstPt46);\n    connRef46->setRoutingType((ConnType)2);\n\n    /*\n    ConnRef *connRef47 = new ConnRef(router, 47);\n    ConnEnd srcPt47(Point(318, 583), 15);\n    connRef47->setSourceEndpoint(srcPt47);\n    ConnEnd dstPt47(Point(318, 630), 1);\n    connRef47->setDestEndpoint(dstPt47);\n    connRef47->setRoutingType((ConnType)2);\n\n    ConnRef *connRef48 = new ConnRef(router, 48);\n    ConnEnd srcPt48(Point(318, 318), 15);\n    connRef48->setSourceEndpoint(srcPt48);\n    ConnEnd dstPt48(Point(378.357, 271.5), 2);\n    connRef48->setDestEndpoint(dstPt48);\n    connRef48->setRoutingType((ConnType)2);\n\n    ConnRef *connRef49 = new ConnRef(router, 49);\n    ConnEnd srcPt49(Point(318, 318), 15);\n    connRef49->setSourceEndpoint(srcPt49);\n    ConnEnd dstPt49(Point(551.357, 240.5), 4);\n    connRef49->setDestEndpoint(dstPt49);\n    connRef49->setRoutingType((ConnType)2);\n    */\n\n    ConnRef *connRef50 = new ConnRef(router, 50);\n    ConnEnd srcPt50(Point(609.857, 367), 15);\n    connRef50->setSourceEndpoint(srcPt50);\n    ConnEnd dstPt50(Point(577.857, 439.5), 4);\n    connRef50->setDestEndpoint(dstPt50);\n    connRef50->setRoutingType((ConnType)2);\n\n    /*\n    ConnRef *connRef51 = new ConnRef(router, 51);\n    ConnEnd srcPt51(Point(318, 583), 15);\n    connRef51->setSourceEndpoint(srcPt51);\n    ConnEnd dstPt51(Point(271.5, 628.155), 8);\n    connRef51->setDestEndpoint(dstPt51);\n    connRef51->setRoutingType((ConnType)2);\n    */\n\n    router->processTransaction();\n    router->outputDiagram(\"output/finalSegmentNudging2\");\n    bool atEnds = true;\n    bool overlap = router->existsOrthogonalFixedSegmentOverlap(atEnds);\n    delete router;\n    return (overlap) ? 1 : 0;\n};\n"
  },
  {
    "path": "cola/libavoid/tests/finalSegmentNudging3.cpp",
    "content": "#include \"libavoid/libavoid.h\"\nusing namespace Avoid;\nint main(void) {\n    Router *router = new Router(\n            PolyLineRouting | OrthogonalRouting);\n    router->setRoutingParameter((RoutingParameter)0, 50);\n    router->setRoutingParameter((RoutingParameter)1, 0);\n    router->setRoutingParameter((RoutingParameter)2, 0);\n    router->setRoutingParameter((RoutingParameter)3, 4000);\n    router->setRoutingParameter((RoutingParameter)4, 0);\n    router->setRoutingParameter((RoutingParameter)5, 100);\n    router->setRoutingOption((RoutingOption)0, true);\n    router->setRoutingOption((RoutingOption)1, true);\n    router->setRoutingOption((RoutingOption)2, false);\n    router->setRoutingOption((RoutingOption)3, false);\n\n#ifdef ALL\n    Polygon poly1(4);\n    poly1.ps[0] = Point(1339.5, 943.25);\n    poly1.ps[1] = Point(1339.5, 975.25);\n    poly1.ps[2] = Point(1319.5, 975.25);\n    poly1.ps[3] = Point(1319.5, 943.25);\n    new ShapeRef(router, poly1, 1);\n\n    Polygon poly2(4);\n    poly2.ps[0] = Point(661.5, 2238.92);\n    poly2.ps[1] = Point(661.5, 2258.92);\n    poly2.ps[2] = Point(629.5, 2258.92);\n    poly2.ps[3] = Point(629.5, 2238.92);\n    new ShapeRef(router, poly2, 2);\n\n    Polygon poly3(4);\n    poly3.ps[0] = Point(282.5, 2053.92);\n    poly3.ps[1] = Point(282.5, 2085.92);\n    poly3.ps[2] = Point(262.5, 2085.92);\n    poly3.ps[3] = Point(262.5, 2053.92);\n    new ShapeRef(router, poly3, 3);\n\n    Polygon poly4(4);\n    poly4.ps[0] = Point(661.5, 2280.92);\n    poly4.ps[1] = Point(661.5, 2300.92);\n    poly4.ps[2] = Point(629.5, 2300.92);\n    poly4.ps[3] = Point(629.5, 2280.92);\n    new ShapeRef(router, poly4, 4);\n\n    Polygon poly5(4);\n    poly5.ps[0] = Point(282.5, 2238.92);\n    poly5.ps[1] = Point(282.5, 2300.92);\n    poly5.ps[2] = Point(220.5, 2300.92);\n    poly5.ps[3] = Point(220.5, 2238.92);\n    new ShapeRef(router, poly5, 5);\n\n    Polygon poly6(4);\n    poly6.ps[0] = Point(1771.5, 551.5);\n    poly6.ps[1] = Point(1771.5, 928.5);\n    poly6.ps[2] = Point(1549.5, 928.5);\n    poly6.ps[3] = Point(1549.5, 551.5);\n    new ShapeRef(router, poly6, 6);\n\n    Polygon poly7(4);\n    poly7.ps[0] = Point(1449.5, 45);\n    poly7.ps[1] = Point(1449.5, 219);\n    poly7.ps[2] = Point(1329.5, 219);\n    poly7.ps[3] = Point(1329.5, 45);\n    new ShapeRef(router, poly7, 7);\n\n    Polygon poly8(4);\n    poly8.ps[0] = Point(977.5, 2191.92);\n    poly8.ps[1] = Point(977.5, 2223.92);\n    poly8.ps[2] = Point(957.5, 2223.92);\n    poly8.ps[3] = Point(957.5, 2191.92);\n    new ShapeRef(router, poly8, 8);\n\n    Polygon poly9(4);\n    poly9.ps[0] = Point(1297.5, 2163.92);\n    poly9.ps[1] = Point(1297.5, 2183.92);\n    poly9.ps[2] = Point(1265.5, 2183.92);\n    poly9.ps[3] = Point(1265.5, 2163.92);\n    new ShapeRef(router, poly9, 9);\n\n    Polygon poly10(4);\n    poly10.ps[0] = Point(1297.5, 2238.92);\n    poly10.ps[1] = Point(1297.5, 2258.92);\n    poly10.ps[2] = Point(1265.5, 2258.92);\n    poly10.ps[3] = Point(1265.5, 2238.92);\n    new ShapeRef(router, poly10, 10);\n\n    Polygon poly11(4);\n    poly11.ps[0] = Point(1173.5, 2031.92);\n    poly11.ps[1] = Point(1173.5, 2051.92);\n    poly11.ps[2] = Point(1141.5, 2051.92);\n    poly11.ps[3] = Point(1141.5, 2031.92);\n    new ShapeRef(router, poly11, 11);\n\n    Polygon poly12(4);\n    poly12.ps[0] = Point(1167.5, 1909.92);\n    poly12.ps[1] = Point(1167.5, 1941.92);\n    poly12.ps[2] = Point(1147.5, 1941.92);\n    poly12.ps[3] = Point(1147.5, 1909.92);\n    new ShapeRef(router, poly12, 12);\n#endif\n\n    Polygon poly13(4);\n    poly13.ps[0] = Point(851.5, 1998.92);\n    poly13.ps[1] = Point(851.5, 2018.92);\n    poly13.ps[2] = Point(819.5, 2018.92);\n    poly13.ps[3] = Point(819.5, 1998.92);\n    new ShapeRef(router, poly13, 13);\n\n#ifdef ALL\n    Polygon poly14(4);\n    poly14.ps[0] = Point(426.5, 1998.92);\n    poly14.ps[1] = Point(426.5, 2018.92);\n    poly14.ps[2] = Point(394.5, 2018.92);\n    poly14.ps[3] = Point(394.5, 1998.92);\n    new ShapeRef(router, poly14, 14);\n\n    Polygon poly15(4);\n    poly15.ps[0] = Point(1514.5, 1998.92);\n    poly15.ps[1] = Point(1514.5, 2018.92);\n    poly15.ps[2] = Point(1482.5, 2018.92);\n    poly15.ps[3] = Point(1482.5, 1998.92);\n    new ShapeRef(router, poly15, 15);\n\n    Polygon poly16(4);\n    poly16.ps[0] = Point(1075.5, 1719.92);\n    poly16.ps[1] = Point(1075.5, 1763.92);\n    poly16.ps[2] = Point(987.5, 1763.92);\n    poly16.ps[3] = Point(987.5, 1719.92);\n    new ShapeRef(router, poly16, 16);\n\n    Polygon poly17(4);\n    poly17.ps[0] = Point(1339.5, 1760.92);\n    poly17.ps[1] = Point(1339.5, 1792.92);\n    poly17.ps[2] = Point(1319.5, 1792.92);\n    poly17.ps[3] = Point(1319.5, 1760.92);\n    new ShapeRef(router, poly17, 17);\n\n    Polygon poly18(4);\n    poly18.ps[0] = Point(252, 1782.92);\n    poly18.ps[1] = Point(252, 1946.92);\n    poly18.ps[2] = Point(45, 1946.92);\n    poly18.ps[3] = Point(45, 1782.92);\n    new ShapeRef(router, poly18, 18);\n\n    Polygon poly19(4);\n    poly19.ps[0] = Point(1339.5, 1636.92);\n    poly19.ps[1] = Point(1339.5, 1668.92);\n    poly19.ps[2] = Point(1319.5, 1668.92);\n    poly19.ps[3] = Point(1319.5, 1636.92);\n    new ShapeRef(router, poly19, 19);\n\n    Polygon poly20(4);\n    poly20.ps[0] = Point(1339.5, 1512.92);\n    poly20.ps[1] = Point(1339.5, 1544.92);\n    poly20.ps[2] = Point(1319.5, 1544.92);\n    poly20.ps[3] = Point(1319.5, 1512.92);\n    new ShapeRef(router, poly20, 20);\n\n    Polygon poly21(4);\n    poly21.ps[0] = Point(1318.5, 1098.92);\n    poly21.ps[1] = Point(1318.5, 1130.92);\n    poly21.ps[2] = Point(1298.5, 1130.92);\n    poly21.ps[3] = Point(1298.5, 1098.92);\n    new ShapeRef(router, poly21, 21);\n\n    Polygon poly22(4);\n    poly22.ps[0] = Point(867, 1443.92);\n    poly22.ps[1] = Point(867, 1503.92);\n    poly22.ps[2] = Point(554, 1503.92);\n    poly22.ps[3] = Point(554, 1443.92);\n    new ShapeRef(router, poly22, 22);\n\n    Polygon poly23(4);\n    poly23.ps[0] = Point(1140.5, 1043.92);\n    poly23.ps[1] = Point(1140.5, 1063.92);\n    poly23.ps[2] = Point(1108.5, 1063.92);\n    poly23.ps[3] = Point(1108.5, 1043.92);\n    new ShapeRef(router, poly23, 23);\n\n    Polygon poly24(4);\n    poly24.ps[0] = Point(1318.5, 761.25);\n    poly24.ps[1] = Point(1318.5, 793.25);\n    poly24.ps[2] = Point(1298.5, 793.25);\n    poly24.ps[3] = Point(1298.5, 761.25);\n    new ShapeRef(router, poly24, 24);\n\n    Polygon poly25(4);\n    poly25.ps[0] = Point(1451.5, 761.25);\n    poly25.ps[1] = Point(1451.5, 793.25);\n    poly25.ps[2] = Point(1431.5, 793.25);\n    poly25.ps[3] = Point(1431.5, 761.25);\n    new ShapeRef(router, poly25, 25);\n\n    Polygon poly26(4);\n    poly26.ps[0] = Point(1481.5, 461);\n    poly26.ps[1] = Point(1481.5, 481);\n    poly26.ps[2] = Point(1449.5, 481);\n    poly26.ps[3] = Point(1449.5, 461);\n    new ShapeRef(router, poly26, 26);\n\n    Polygon poly27(4);\n    poly27.ps[0] = Point(1339.5, 573.75);\n    poly27.ps[1] = Point(1339.5, 605.75);\n    poly27.ps[2] = Point(1319.5, 605.75);\n    poly27.ps[3] = Point(1319.5, 573.75);\n    new ShapeRef(router, poly27, 27);\n\n    Polygon poly28(4);\n    poly28.ps[0] = Point(1339.5, 372);\n    poly28.ps[1] = Point(1339.5, 404);\n    poly28.ps[2] = Point(1319.5, 404);\n    poly28.ps[3] = Point(1319.5, 372);\n    new ShapeRef(router, poly28, 28);\n\n    Polygon poly29(4);\n    poly29.ps[0] = Point(1074.5, 667.25);\n    poly29.ps[1] = Point(1074.5, 687.25);\n    poly29.ps[2] = Point(1042.5, 687.25);\n    poly29.ps[3] = Point(1042.5, 667.25);\n    new ShapeRef(router, poly29, 29);\n\n    Polygon poly30(4);\n    poly30.ps[0] = Point(529.5, 571.25);\n    poly30.ps[1] = Point(529.5, 591.25);\n    poly30.ps[2] = Point(497.5, 591.25);\n    poly30.ps[3] = Point(497.5, 571.25);\n    new ShapeRef(router, poly30, 30);\n\n    Polygon poly31(4);\n    poly31.ps[0] = Point(529.5, 646.25);\n    poly31.ps[1] = Point(529.5, 666.25);\n    poly31.ps[2] = Point(497.5, 666.25);\n    poly31.ps[3] = Point(497.5, 646.25);\n    new ShapeRef(router, poly31, 31);\n\n    Polygon poly32(4);\n    poly32.ps[0] = Point(950.5, 579.75);\n    poly32.ps[1] = Point(950.5, 599.75);\n    poly32.ps[2] = Point(918.5, 599.75);\n    poly32.ps[3] = Point(918.5, 579.75);\n    new ShapeRef(router, poly32, 32);\n\n    Polygon poly33(4);\n    poly33.ps[0] = Point(779.5, 573.75);\n    poly33.ps[1] = Point(779.5, 605.75);\n    poly33.ps[2] = Point(759.5, 605.75);\n    poly33.ps[3] = Point(759.5, 573.75);\n    new ShapeRef(router, poly33, 33);\n\n    Polygon poly34(4);\n    poly34.ps[0] = Point(296.5, 573.75);\n    poly34.ps[1] = Point(296.5, 605.75);\n    poly34.ps[2] = Point(276.5, 605.75);\n    poly34.ps[3] = Point(276.5, 573.75);\n    new ShapeRef(router, poly34, 34);\n\n    Polygon poly35(4);\n    poly35.ps[0] = Point(628.5, 323.5);\n    poly35.ps[1] = Point(628.5, 343.5);\n    poly35.ps[2] = Point(596.5, 343.5);\n    poly35.ps[3] = Point(596.5, 323.5);\n    new ShapeRef(router, poly35, 35);\n\n    Polygon poly36(4);\n    poly36.ps[0] = Point(628.5, 398.5);\n    poly36.ps[1] = Point(628.5, 418.5);\n    poly36.ps[2] = Point(596.5, 418.5);\n    poly36.ps[3] = Point(596.5, 398.5);\n    new ShapeRef(router, poly36, 36);\n\n    Polygon poly37(4);\n    poly37.ps[0] = Point(628.5, 590.5);\n    poly37.ps[1] = Point(628.5, 610.5);\n    poly37.ps[2] = Point(596.5, 610.5);\n    poly37.ps[3] = Point(596.5, 590.5);\n    new ShapeRef(router, poly37, 37);\n\n    Polygon poly38(4);\n    poly38.ps[0] = Point(917.5, 345);\n    poly38.ps[1] = Point(917.5, 365);\n    poly38.ps[2] = Point(885.5, 365);\n    poly38.ps[3] = Point(885.5, 345);\n    new ShapeRef(router, poly38, 38);\n\n    Polygon poly39(4);\n    poly39.ps[0] = Point(917.5, 229);\n    poly39.ps[1] = Point(917.5, 249);\n    poly39.ps[2] = Point(885.5, 249);\n    poly39.ps[3] = Point(885.5, 229);\n    new ShapeRef(router, poly39, 39);\n\n    Polygon poly40(4);\n    poly40.ps[0] = Point(402, 96.5);\n    poly40.ps[1] = Point(402, 131.5);\n    poly40.ps[2] = Point(141, 131.5);\n    poly40.ps[3] = Point(141, 96.5);\n    new ShapeRef(router, poly40, 40);\n\n    Polygon poly41(4);\n    poly41.ps[0] = Point(562.5, 2164.92);\n    poly41.ps[1] = Point(562.5, 2184.92);\n    poly41.ps[2] = Point(530.5, 2184.92);\n    poly41.ps[3] = Point(530.5, 2164.92);\n    new ShapeRef(router, poly41, 41);\n\n    Polygon poly42(4);\n    poly42.ps[0] = Point(1339.5, 1334.92);\n    poly42.ps[1] = Point(1339.5, 1366.92);\n    poly42.ps[2] = Point(1319.5, 1366.92);\n    poly42.ps[3] = Point(1319.5, 1334.92);\n    new ShapeRef(router, poly42, 42);\n\n    Polygon poly43(4);\n    poly43.ps[0] = Point(628.5, 473.5);\n    poly43.ps[1] = Point(628.5, 493.5);\n    poly43.ps[2] = Point(596.5, 493.5);\n    poly43.ps[3] = Point(596.5, 473.5);\n    new ShapeRef(router, poly43, 43);\n\n    Polygon poly44(4);\n    poly44.ps[0] = Point(529.5, 688.25);\n    poly44.ps[1] = Point(529.5, 708.25);\n    poly44.ps[2] = Point(497.5, 708.25);\n    poly44.ps[3] = Point(497.5, 688.25);\n    new ShapeRef(router, poly44, 44);\n\n    Polygon poly45(4);\n    poly45.ps[0] = Point(302.5, 800.25);\n    poly45.ps[1] = Point(302.5, 820.25);\n    poly45.ps[2] = Point(270.5, 820.25);\n    poly45.ps[3] = Point(270.5, 800.25);\n    new ShapeRef(router, poly45, 45);\n\n    Polygon poly46(4);\n    poly46.ps[0] = Point(302.5, 916.25);\n    poly46.ps[1] = Point(302.5, 936.25);\n    poly46.ps[2] = Point(270.5, 936.25);\n    poly46.ps[3] = Point(270.5, 916.25);\n    new ShapeRef(router, poly46, 46);\n\n    Polygon poly47(4);\n    poly47.ps[0] = Point(694.5, 800.25);\n    poly47.ps[1] = Point(694.5, 820.25);\n    poly47.ps[2] = Point(662.5, 820.25);\n    poly47.ps[3] = Point(662.5, 800.25);\n    new ShapeRef(router, poly47, 47);\n\n    Polygon poly48(4);\n    poly48.ps[0] = Point(694.5, 916.25);\n    poly48.ps[1] = Point(694.5, 936.25);\n    poly48.ps[2] = Point(662.5, 936.25);\n    poly48.ps[3] = Point(662.5, 916.25);\n    new ShapeRef(router, poly48, 48);\n\n    Polygon poly49(4);\n    poly49.ps[0] = Point(1572.5, 440);\n    poly49.ps[1] = Point(1572.5, 502);\n    poly49.ps[2] = Point(1510.5, 502);\n    poly49.ps[3] = Point(1510.5, 440);\n    new ShapeRef(router, poly49, 49);\n\n    Polygon poly50(4);\n    poly50.ps[0] = Point(1360.5, 241);\n    poly50.ps[1] = Point(1360.5, 303);\n    poly50.ps[2] = Point(1298.5, 303);\n    poly50.ps[3] = Point(1298.5, 241);\n    new ShapeRef(router, poly50, 50);\n\n    Polygon poly51(4);\n    poly51.ps[0] = Point(1360.5, 1559.92);\n    poly51.ps[1] = Point(1360.5, 1621.92);\n    poly51.ps[2] = Point(1298.5, 1621.92);\n    poly51.ps[3] = Point(1298.5, 1559.92);\n    new ShapeRef(router, poly51, 51);\n\n    Polygon poly52(4);\n    poly52.ps[0] = Point(317.5, 473.5);\n    poly52.ps[1] = Point(317.5, 535.5);\n    poly52.ps[2] = Point(255.5, 535.5);\n    poly52.ps[3] = Point(255.5, 473.5);\n    new ShapeRef(router, poly52, 52);\n\n    Polygon poly53(4);\n    poly53.ps[0] = Point(317.5, 646.25);\n    poly53.ps[1] = Point(317.5, 708.25);\n    poly53.ps[2] = Point(255.5, 708.25);\n    poly53.ps[3] = Point(255.5, 646.25);\n    new ShapeRef(router, poly53, 53);\n\n    Polygon poly54(4);\n    poly54.ps[0] = Point(899.5, 1022.92);\n    poly54.ps[1] = Point(899.5, 1084.92);\n    poly54.ps[2] = Point(837.5, 1084.92);\n    poly54.ps[3] = Point(837.5, 1022.92);\n    new ShapeRef(router, poly54, 54);\n\n    Polygon poly55(4);\n    poly55.ps[0] = Point(899.5, 646.25);\n    poly55.ps[1] = Point(899.5, 708.25);\n    poly55.ps[2] = Point(837.5, 708.25);\n    poly55.ps[3] = Point(837.5, 646.25);\n    new ShapeRef(router, poly55, 55);\n\n    Polygon poly56(4);\n    poly56.ps[0] = Point(1360.5, 473.5);\n    poly56.ps[1] = Point(1360.5, 535.5);\n    poly56.ps[2] = Point(1298.5, 535.5);\n    poly56.ps[3] = Point(1298.5, 473.5);\n    new ShapeRef(router, poly56, 56);\n\n    Polygon poly57(4);\n    poly57.ps[0] = Point(1360.5, 646.25);\n    poly57.ps[1] = Point(1360.5, 708.25);\n    poly57.ps[2] = Point(1298.5, 708.25);\n    poly57.ps[3] = Point(1298.5, 646.25);\n    new ShapeRef(router, poly57, 57);\n\n    Polygon poly58(4);\n    poly58.ps[0] = Point(1360.5, 1683.92);\n    poly58.ps[1] = Point(1360.5, 1745.92);\n    poly58.ps[2] = Point(1298.5, 1745.92);\n    poly58.ps[3] = Point(1298.5, 1683.92);\n    new ShapeRef(router, poly58, 58);\n\n    Polygon poly59(4);\n    poly59.ps[0] = Point(1360.5, 1435.92);\n    poly59.ps[1] = Point(1360.5, 1497.92);\n    poly59.ps[2] = Point(1298.5, 1497.92);\n    poly59.ps[3] = Point(1298.5, 1435.92);\n    new ShapeRef(router, poly59, 59);\n\n    Polygon poly60(4);\n    poly60.ps[0] = Point(1360.5, 1195.92);\n    poly60.ps[1] = Point(1360.5, 1257.92);\n    poly60.ps[2] = Point(1298.5, 1257.92);\n    poly60.ps[3] = Point(1298.5, 1195.92);\n    new ShapeRef(router, poly60, 60);\n\n    Polygon poly61(4);\n    poly61.ps[0] = Point(1605.5, 1977.92);\n    poly61.ps[1] = Point(1605.5, 2039.92);\n    poly61.ps[2] = Point(1543.5, 2039.92);\n    poly61.ps[3] = Point(1543.5, 1977.92);\n    new ShapeRef(router, poly61, 61);\n\n    Polygon poly62(4);\n    poly62.ps[0] = Point(833.5, 2143.92);\n    poly62.ps[1] = Point(833.5, 2205.92);\n    poly62.ps[2] = Point(771.5, 2205.92);\n    poly62.ps[3] = Point(771.5, 2143.92);\n    new ShapeRef(router, poly62, 62);\n\n    Polygon poly63(4);\n    poly63.ps[0] = Point(1496.5, 2238.92);\n    poly63.ps[1] = Point(1496.5, 2300.92);\n    poly63.ps[2] = Point(1434.5, 2300.92);\n    poly63.ps[3] = Point(1434.5, 2238.92);\n    new ShapeRef(router, poly63, 63);\n\n    Polygon poly64(4);\n    poly64.ps[0] = Point(1360.5, 1977.92);\n    poly64.ps[1] = Point(1360.5, 2039.92);\n    poly64.ps[2] = Point(1298.5, 2039.92);\n    poly64.ps[3] = Point(1298.5, 1977.92);\n    new ShapeRef(router, poly64, 64);\n#endif\n\n    Polygon poly65(4);\n    poly65.ps[0] = Point(998.5, 1977.92);\n    poly65.ps[1] = Point(998.5, 2039.92);\n    poly65.ps[2] = Point(936.5, 2039.92);\n    poly65.ps[3] = Point(936.5, 1977.92);\n    new ShapeRef(router, poly65, 65);\n\n#ifdef ALL\n    Polygon poly66(4);\n    poly66.ps[0] = Point(282.5, 1977.92);\n    poly66.ps[1] = Point(282.5, 2039.92);\n    poly66.ps[2] = Point(220.5, 2039.92);\n    poly66.ps[3] = Point(220.5, 1977.92);\n    new ShapeRef(router, poly66, 66);\n\n    Polygon poly67(4);\n    poly67.ps[0] = Point(998.5, 2238.92);\n    poly67.ps[1] = Point(998.5, 2300.92);\n    poly67.ps[2] = Point(936.5, 2300.92);\n    poly67.ps[3] = Point(936.5, 2238.92);\n    new ShapeRef(router, poly67, 67);\n#endif\n\n    Polygon poly68(4);\n    poly68.ps[0] = Point(610.5, 1977.92);\n    poly68.ps[1] = Point(610.5, 2039.92);\n    poly68.ps[2] = Point(548.5, 2039.92);\n    poly68.ps[3] = Point(548.5, 1977.92);\n    new ShapeRef(router, poly68, 68);\n\n#ifdef ALL\n    Polygon poly69(4);\n    poly69.ps[0] = Point(441.5, 2143.92);\n    poly69.ps[1] = Point(441.5, 2205.92);\n    poly69.ps[2] = Point(379.5, 2205.92);\n    poly69.ps[3] = Point(379.5, 2143.92);\n    new ShapeRef(router, poly69, 69);\n\n    Polygon poly70(4);\n    poly70.ps[0] = Point(1360.5, 812.25);\n    poly70.ps[1] = Point(1360.5, 874.25);\n    poly70.ps[2] = Point(1298.5, 874.25);\n    poly70.ps[3] = Point(1298.5, 812.25);\n    new ShapeRef(router, poly70, 70);\n\n    Polygon poly71(4);\n    poly71.ps[0] = Point(247.5, 779.25);\n    poly71.ps[1] = Point(247.5, 841.25);\n    poly71.ps[2] = Point(185.5, 841.25);\n    poly71.ps[3] = Point(185.5, 779.25);\n    new ShapeRef(router, poly71, 71);\n\n    Polygon poly72(4);\n    poly72.ps[0] = Point(474.5, 779.25);\n    poly72.ps[1] = Point(474.5, 841.25);\n    poly72.ps[2] = Point(412.5, 841.25);\n    poly72.ps[3] = Point(412.5, 779.25);\n    new ShapeRef(router, poly72, 72);\n\n    Polygon poly73(4);\n    poly73.ps[0] = Point(474.5, 895.25);\n    poly73.ps[1] = Point(474.5, 957.25);\n    poly73.ps[2] = Point(412.5, 957.25);\n    poly73.ps[3] = Point(412.5, 895.25);\n    new ShapeRef(router, poly73, 73);\n\n    Polygon poly74(4);\n    poly74.ps[0] = Point(247.5, 895.25);\n    poly74.ps[1] = Point(247.5, 957.25);\n    poly74.ps[2] = Point(185.5, 957.25);\n    poly74.ps[3] = Point(185.5, 895.25);\n    new ShapeRef(router, poly74, 74);\n\n    Polygon poly75(4);\n    poly75.ps[0] = Point(393.5, 1683.92);\n    poly75.ps[1] = Point(393.5, 1703.92);\n    poly75.ps[2] = Point(361.5, 1703.92);\n    poly75.ps[3] = Point(361.5, 1683.92);\n    new ShapeRef(router, poly75, 75);\n\n    Polygon poly76(4);\n    poly76.ps[0] = Point(282.5, 1683.92);\n    poly76.ps[1] = Point(282.5, 1745.92);\n    poly76.ps[2] = Point(220.5, 1745.92);\n    poly76.ps[3] = Point(220.5, 1683.92);\n    new ShapeRef(router, poly76, 76);\n\n    Polygon poly77(4);\n    poly77.ps[0] = Point(1297.5, 2280.92);\n    poly77.ps[1] = Point(1297.5, 2300.92);\n    poly77.ps[2] = Point(1265.5, 2300.92);\n    poly77.ps[3] = Point(1265.5, 2280.92);\n    new ShapeRef(router, poly77, 77);\n\n    Polygon poly78(4);\n    poly78.ps[0] = Point(393.5, 1725.92);\n    poly78.ps[1] = Point(393.5, 1745.92);\n    poly78.ps[2] = Point(361.5, 1745.92);\n    poly78.ps[3] = Point(361.5, 1725.92);\n    new ShapeRef(router, poly78, 78);\n\n    Polygon poly79(4);\n    poly79.ps[0] = Point(1645, 2133.42);\n    poly79.ps[1] = Point(1645, 2298.42);\n    poly79.ps[2] = Point(1508, 2298.42);\n    poly79.ps[3] = Point(1508, 2133.42);\n    new ShapeRef(router, poly79, 79);\n\n    Polygon poly80(4);\n    poly80.ps[0] = Point(1360.5, 1098.92);\n    poly80.ps[1] = Point(1360.5, 1130.92);\n    poly80.ps[2] = Point(1340.5, 1130.92);\n    poly80.ps[3] = Point(1340.5, 1098.92);\n    new ShapeRef(router, poly80, 80);\n\n    Polygon poly81(4);\n    poly81.ps[0] = Point(1446.5, 1272.92);\n    poly81.ps[1] = Point(1446.5, 1304.92);\n    poly81.ps[2] = Point(1426.5, 1304.92);\n    poly81.ps[3] = Point(1426.5, 1272.92);\n    new ShapeRef(router, poly81, 81);\n\n    Polygon poly82(4);\n    poly82.ps[0] = Point(1488.5, 1272.92);\n    poly82.ps[1] = Point(1488.5, 1304.92);\n    poly82.ps[2] = Point(1468.5, 1304.92);\n    poly82.ps[3] = Point(1468.5, 1272.92);\n    new ShapeRef(router, poly82, 82);\n\n    Polygon poly83(4);\n    poly83.ps[0] = Point(694.5, 1849.92);\n    poly83.ps[1] = Point(694.5, 1869.92);\n    poly83.ps[2] = Point(662.5, 1869.92);\n    poly83.ps[3] = Point(662.5, 1849.92);\n    new ShapeRef(router, poly83, 83);\n\n    Polygon poly84(4);\n    poly84.ps[0] = Point(1579.5, 1272.92);\n    poly84.ps[1] = Point(1579.5, 1304.92);\n    poly84.ps[2] = Point(1559.5, 1304.92);\n    poly84.ps[3] = Point(1559.5, 1272.92);\n    new ShapeRef(router, poly84, 84);\n\n    Polygon poly85(4);\n    poly85.ps[0] = Point(1122.5, 1319.92);\n    poly85.ps[1] = Point(1122.5, 1381.92);\n    poly85.ps[2] = Point(1060.5, 1381.92);\n    poly85.ps[3] = Point(1060.5, 1319.92);\n    new ShapeRef(router, poly85, 85);\n\n    Polygon poly86(4);\n    poly86.ps[0] = Point(1264.5, 1423.92);\n    poly86.ps[1] = Point(1264.5, 1443.92);\n    poly86.ps[2] = Point(1232.5, 1443.92);\n    poly86.ps[3] = Point(1232.5, 1423.92);\n    new ShapeRef(router, poly86, 86);\n\n    Polygon poly87(4);\n    poly87.ps[0] = Point(1264.5, 1216.92);\n    poly87.ps[1] = Point(1264.5, 1236.92);\n    poly87.ps[2] = Point(1232.5, 1236.92);\n    poly87.ps[3] = Point(1232.5, 1216.92);\n    new ShapeRef(router, poly87, 87);\n\n    Polygon poly88(4);\n    poly88.ps[0] = Point(1360.5, 1022.92);\n    poly88.ps[1] = Point(1360.5, 1084.92);\n    poly88.ps[2] = Point(1298.5, 1084.92);\n    poly88.ps[3] = Point(1298.5, 1022.92);\n    new ShapeRef(router, poly88, 88);\n\n    Polygon poly89(4);\n    poly89.ps[0] = Point(240.5, 2053.92);\n    poly89.ps[1] = Point(240.5, 2085.92);\n    poly89.ps[2] = Point(220.5, 2085.92);\n    poly89.ps[3] = Point(220.5, 2053.92);\n    new ShapeRef(router, poly89, 89);\n\n    Polygon poly90(4);\n    poly90.ps[0] = Point(1360.5, 761.25);\n    poly90.ps[1] = Point(1360.5, 793.25);\n    poly90.ps[2] = Point(1340.5, 793.25);\n    poly90.ps[3] = Point(1340.5, 761.25);\n    new ShapeRef(router, poly90, 90);\n\n    Polygon poly91(4);\n    poly91.ps[0] = Point(628.5, 515.5);\n    poly91.ps[1] = Point(628.5, 535.5);\n    poly91.ps[2] = Point(596.5, 535.5);\n    poly91.ps[3] = Point(596.5, 515.5);\n    new ShapeRef(router, poly91, 91);\n\n    Polygon poly92(4);\n    poly92.ps[0] = Point(529.5, 763.25);\n    poly92.ps[1] = Point(529.5, 783.25);\n    poly92.ps[2] = Point(497.5, 783.25);\n    poly92.ps[3] = Point(497.5, 763.25);\n    new ShapeRef(router, poly92, 92);\n\n    Polygon poly93(4);\n    poly93.ps[0] = Point(1297.5, 2355.92);\n    poly93.ps[1] = Point(1297.5, 2375.92);\n    poly93.ps[2] = Point(1265.5, 2375.92);\n    poly93.ps[3] = Point(1265.5, 2355.92);\n    new ShapeRef(router, poly93, 93);\n#endif\n\n    Polygon poly94(4);\n    poly94.ps[0] = Point(998.5, 1861.92);\n    poly94.ps[1] = Point(998.5, 1923.92);\n    poly94.ps[2] = Point(936.5, 1923.92);\n    poly94.ps[3] = Point(936.5, 1861.92);\n    new ShapeRef(router, poly94, 94);\n\n#ifdef ALL\n    Polygon poly95(4);\n    poly95.ps[0] = Point(1415.5, 939.25);\n    poly95.ps[1] = Point(1415.5, 979.25);\n    poly95.ps[2] = Point(1339.5, 979.25);\n    poly95.ps[3] = Point(1339.5, 939.25);\n    new ShapeRef(router, poly95, 95);\n\n    Polygon poly96(4);\n    poly96.ps[0] = Point(673.5, 2178.92);\n    poly96.ps[1] = Point(673.5, 2238.92);\n    poly96.ps[2] = Point(617.5, 2238.92);\n    poly96.ps[3] = Point(617.5, 2178.92);\n    new ShapeRef(router, poly96, 96);\n\n    Polygon poly97(4);\n    poly97.ps[0] = Point(358.5, 2049.92);\n    poly97.ps[1] = Point(358.5, 2089.92);\n    poly97.ps[2] = Point(282.5, 2089.92);\n    poly97.ps[3] = Point(282.5, 2049.92);\n    new ShapeRef(router, poly97, 97);\n\n    Polygon poly98(4);\n    poly98.ps[0] = Point(673.5, 2300.92);\n    poly98.ps[1] = Point(673.5, 2360.92);\n    poly98.ps[2] = Point(617.5, 2360.92);\n    poly98.ps[3] = Point(617.5, 2300.92);\n    new ShapeRef(router, poly98, 98);\n\n    Polygon poly99(4);\n    poly99.ps[0] = Point(1053.5, 2187.92);\n    poly99.ps[1] = Point(1053.5, 2227.92);\n    poly99.ps[2] = Point(977.5, 2227.92);\n    poly99.ps[3] = Point(977.5, 2187.92);\n    new ShapeRef(router, poly99, 99);\n\n    Polygon poly100(4);\n    poly100.ps[0] = Point(1309.5, 2103.92);\n    poly100.ps[1] = Point(1309.5, 2163.92);\n    poly100.ps[2] = Point(1253.5, 2163.92);\n    poly100.ps[3] = Point(1253.5, 2103.92);\n    new ShapeRef(router, poly100, 100);\n\n    Polygon poly101(4);\n    poly101.ps[0] = Point(1309.5, 2178.92);\n    poly101.ps[1] = Point(1309.5, 2238.92);\n    poly101.ps[2] = Point(1253.5, 2238.92);\n    poly101.ps[3] = Point(1253.5, 2178.92);\n    new ShapeRef(router, poly101, 101);\n\n    Polygon poly102(4);\n    poly102.ps[0] = Point(1185.5, 2051.92);\n    poly102.ps[1] = Point(1185.5, 2111.92);\n    poly102.ps[2] = Point(1129.5, 2111.92);\n    poly102.ps[3] = Point(1129.5, 2051.92);\n    new ShapeRef(router, poly102, 102);\n\n    Polygon poly103(4);\n    poly103.ps[0] = Point(1243.5, 1905.92);\n    poly103.ps[1] = Point(1243.5, 1945.92);\n    poly103.ps[2] = Point(1167.5, 1945.92);\n    poly103.ps[3] = Point(1167.5, 1905.92);\n    new ShapeRef(router, poly103, 103);\n#endif\n\n    Polygon poly104(4);\n    poly104.ps[0] = Point(863.5, 1938.92);\n    poly104.ps[1] = Point(863.5, 1998.92);\n    poly104.ps[2] = Point(807.5, 1998.92);\n    poly104.ps[3] = Point(807.5, 1938.92);\n    new ShapeRef(router, poly104, 104);\n\n#ifdef ALL\n    Polygon poly105(4);\n    poly105.ps[0] = Point(438.5, 1938.92);\n    poly105.ps[1] = Point(438.5, 1998.92);\n    poly105.ps[2] = Point(382.5, 1998.92);\n    poly105.ps[3] = Point(382.5, 1938.92);\n    new ShapeRef(router, poly105, 105);\n\n    Polygon poly106(4);\n    poly106.ps[0] = Point(1526.5, 1938.92);\n    poly106.ps[1] = Point(1526.5, 1998.92);\n    poly106.ps[2] = Point(1470.5, 1998.92);\n    poly106.ps[3] = Point(1470.5, 1938.92);\n    new ShapeRef(router, poly106, 106);\n\n    Polygon poly107(4);\n    poly107.ps[0] = Point(1415.5, 1756.92);\n    poly107.ps[1] = Point(1415.5, 1796.92);\n    poly107.ps[2] = Point(1339.5, 1796.92);\n    poly107.ps[3] = Point(1339.5, 1756.92);\n    new ShapeRef(router, poly107, 107);\n\n    Polygon poly108(4);\n    poly108.ps[0] = Point(1415.5, 1632.92);\n    poly108.ps[1] = Point(1415.5, 1672.92);\n    poly108.ps[2] = Point(1339.5, 1672.92);\n    poly108.ps[3] = Point(1339.5, 1632.92);\n    new ShapeRef(router, poly108, 108);\n\n    Polygon poly109(4);\n    poly109.ps[0] = Point(1415.5, 1508.92);\n    poly109.ps[1] = Point(1415.5, 1548.92);\n    poly109.ps[2] = Point(1339.5, 1548.92);\n    poly109.ps[3] = Point(1339.5, 1508.92);\n    new ShapeRef(router, poly109, 109);\n\n    Polygon poly110(4);\n    poly110.ps[0] = Point(1298.5, 1094.92);\n    poly110.ps[1] = Point(1298.5, 1134.92);\n    poly110.ps[2] = Point(1222.5, 1134.92);\n    poly110.ps[3] = Point(1222.5, 1094.92);\n    new ShapeRef(router, poly110, 110);\n\n    Polygon poly111(4);\n    poly111.ps[0] = Point(1152.5, 983.917);\n    poly111.ps[1] = Point(1152.5, 1043.92);\n    poly111.ps[2] = Point(1096.5, 1043.92);\n    poly111.ps[3] = Point(1096.5, 983.917);\n    new ShapeRef(router, poly111, 111);\n\n    Polygon poly112(4);\n    poly112.ps[0] = Point(1298.5, 757.25);\n    poly112.ps[1] = Point(1298.5, 797.25);\n    poly112.ps[2] = Point(1222.5, 797.25);\n    poly112.ps[3] = Point(1222.5, 757.25);\n    new ShapeRef(router, poly112, 112);\n\n    Polygon poly113(4);\n    poly113.ps[0] = Point(1527.5, 757.25);\n    poly113.ps[1] = Point(1527.5, 797.25);\n    poly113.ps[2] = Point(1451.5, 797.25);\n    poly113.ps[3] = Point(1451.5, 757.25);\n    new ShapeRef(router, poly113, 113);\n\n    Polygon poly114(4);\n    poly114.ps[0] = Point(1493.5, 401);\n    poly114.ps[1] = Point(1493.5, 461);\n    poly114.ps[2] = Point(1437.5, 461);\n    poly114.ps[3] = Point(1437.5, 401);\n    new ShapeRef(router, poly114, 114);\n\n    Polygon poly115(4);\n    poly115.ps[0] = Point(1415.5, 569.75);\n    poly115.ps[1] = Point(1415.5, 609.75);\n    poly115.ps[2] = Point(1339.5, 609.75);\n    poly115.ps[3] = Point(1339.5, 569.75);\n    new ShapeRef(router, poly115, 115);\n\n    Polygon poly116(4);\n    poly116.ps[0] = Point(1415.5, 368);\n    poly116.ps[1] = Point(1415.5, 408);\n    poly116.ps[2] = Point(1339.5, 408);\n    poly116.ps[3] = Point(1339.5, 368);\n    new ShapeRef(router, poly116, 116);\n\n    Polygon poly117(4);\n    poly117.ps[0] = Point(1086.5, 607.25);\n    poly117.ps[1] = Point(1086.5, 667.25);\n    poly117.ps[2] = Point(1030.5, 667.25);\n    poly117.ps[3] = Point(1030.5, 607.25);\n    new ShapeRef(router, poly117, 117);\n\n    Polygon poly118(4);\n    poly118.ps[0] = Point(541.5, 511.25);\n    poly118.ps[1] = Point(541.5, 571.25);\n    poly118.ps[2] = Point(485.5, 571.25);\n    poly118.ps[3] = Point(485.5, 511.25);\n    new ShapeRef(router, poly118, 118);\n\n    Polygon poly119(4);\n    poly119.ps[0] = Point(541.5, 586.25);\n    poly119.ps[1] = Point(541.5, 646.25);\n    poly119.ps[2] = Point(485.5, 646.25);\n    poly119.ps[3] = Point(485.5, 586.25);\n    new ShapeRef(router, poly119, 119);\n\n    Polygon poly120(4);\n    poly120.ps[0] = Point(962.5, 519.75);\n    poly120.ps[1] = Point(962.5, 579.75);\n    poly120.ps[2] = Point(906.5, 579.75);\n    poly120.ps[3] = Point(906.5, 519.75);\n    new ShapeRef(router, poly120, 120);\n\n    Polygon poly121(4);\n    poly121.ps[0] = Point(759.5, 569.75);\n    poly121.ps[1] = Point(759.5, 609.75);\n    poly121.ps[2] = Point(683.5, 609.75);\n    poly121.ps[3] = Point(683.5, 569.75);\n    new ShapeRef(router, poly121, 121);\n\n    Polygon poly122(4);\n    poly122.ps[0] = Point(372.5, 569.75);\n    poly122.ps[1] = Point(372.5, 609.75);\n    poly122.ps[2] = Point(296.5, 609.75);\n    poly122.ps[3] = Point(296.5, 569.75);\n    new ShapeRef(router, poly122, 122);\n\n    Polygon poly123(4);\n    poly123.ps[0] = Point(640.5, 263.5);\n    poly123.ps[1] = Point(640.5, 323.5);\n    poly123.ps[2] = Point(584.5, 323.5);\n    poly123.ps[3] = Point(584.5, 263.5);\n    new ShapeRef(router, poly123, 123);\n\n    Polygon poly124(4);\n    poly124.ps[0] = Point(640.5, 338.5);\n    poly124.ps[1] = Point(640.5, 398.5);\n    poly124.ps[2] = Point(584.5, 398.5);\n    poly124.ps[3] = Point(584.5, 338.5);\n    new ShapeRef(router, poly124, 124);\n\n    Polygon poly125(4);\n    poly125.ps[0] = Point(640.5, 610.5);\n    poly125.ps[1] = Point(640.5, 670.5);\n    poly125.ps[2] = Point(584.5, 670.5);\n    poly125.ps[3] = Point(584.5, 610.5);\n    new ShapeRef(router, poly125, 125);\n\n    Polygon poly126(4);\n    poly126.ps[0] = Point(929.5, 285);\n    poly126.ps[1] = Point(929.5, 345);\n    poly126.ps[2] = Point(873.5, 345);\n    poly126.ps[3] = Point(873.5, 285);\n    new ShapeRef(router, poly126, 126);\n\n    Polygon poly127(4);\n    poly127.ps[0] = Point(929.5, 169);\n    poly127.ps[1] = Point(929.5, 229);\n    poly127.ps[2] = Point(873.5, 229);\n    poly127.ps[3] = Point(873.5, 169);\n    new ShapeRef(router, poly127, 127);\n\n    Polygon poly128(4);\n    poly128.ps[0] = Point(574.5, 2104.92);\n    poly128.ps[1] = Point(574.5, 2164.92);\n    poly128.ps[2] = Point(518.5, 2164.92);\n    poly128.ps[3] = Point(518.5, 2104.92);\n    new ShapeRef(router, poly128, 128);\n\n    Polygon poly129(4);\n    poly129.ps[0] = Point(1415.5, 1330.92);\n    poly129.ps[1] = Point(1415.5, 1370.92);\n    poly129.ps[2] = Point(1339.5, 1370.92);\n    poly129.ps[3] = Point(1339.5, 1330.92);\n    new ShapeRef(router, poly129, 129);\n\n    Polygon poly130(4);\n    poly130.ps[0] = Point(640.5, 413.5);\n    poly130.ps[1] = Point(640.5, 473.5);\n    poly130.ps[2] = Point(584.5, 473.5);\n    poly130.ps[3] = Point(584.5, 413.5);\n    new ShapeRef(router, poly130, 130);\n\n    Polygon poly131(4);\n    poly131.ps[0] = Point(541.5, 708.25);\n    poly131.ps[1] = Point(541.5, 768.25);\n    poly131.ps[2] = Point(485.5, 768.25);\n    poly131.ps[3] = Point(485.5, 708.25);\n    new ShapeRef(router, poly131, 131);\n\n    Polygon poly132(4);\n    poly132.ps[0] = Point(314.5, 740.25);\n    poly132.ps[1] = Point(314.5, 800.25);\n    poly132.ps[2] = Point(258.5, 800.25);\n    poly132.ps[3] = Point(258.5, 740.25);\n    new ShapeRef(router, poly132, 132);\n\n    Polygon poly133(4);\n    poly133.ps[0] = Point(314.5, 856.25);\n    poly133.ps[1] = Point(314.5, 916.25);\n    poly133.ps[2] = Point(258.5, 916.25);\n    poly133.ps[3] = Point(258.5, 856.25);\n    new ShapeRef(router, poly133, 133);\n\n    Polygon poly134(4);\n    poly134.ps[0] = Point(706.5, 740.25);\n    poly134.ps[1] = Point(706.5, 800.25);\n    poly134.ps[2] = Point(650.5, 800.25);\n    poly134.ps[3] = Point(650.5, 740.25);\n    new ShapeRef(router, poly134, 134);\n\n    Polygon poly135(4);\n    poly135.ps[0] = Point(706.5, 856.25);\n    poly135.ps[1] = Point(706.5, 916.25);\n    poly135.ps[2] = Point(650.5, 916.25);\n    poly135.ps[3] = Point(650.5, 856.25);\n    new ShapeRef(router, poly135, 135);\n\n    Polygon poly136(4);\n    poly136.ps[0] = Point(405.5, 1623.92);\n    poly136.ps[1] = Point(405.5, 1683.92);\n    poly136.ps[2] = Point(349.5, 1683.92);\n    poly136.ps[3] = Point(349.5, 1623.92);\n    new ShapeRef(router, poly136, 136);\n\n    Polygon poly137(4);\n    poly137.ps[0] = Point(1309.5, 2300.92);\n    poly137.ps[1] = Point(1309.5, 2360.92);\n    poly137.ps[2] = Point(1253.5, 2360.92);\n    poly137.ps[3] = Point(1253.5, 2300.92);\n    new ShapeRef(router, poly137, 137);\n\n    Polygon poly138(4);\n    poly138.ps[0] = Point(405.5, 1745.92);\n    poly138.ps[1] = Point(405.5, 1805.92);\n    poly138.ps[2] = Point(349.5, 1805.92);\n    poly138.ps[3] = Point(349.5, 1745.92);\n    new ShapeRef(router, poly138, 138);\n\n    Polygon poly139(4);\n    poly139.ps[0] = Point(1436.5, 1094.92);\n    poly139.ps[1] = Point(1436.5, 1134.92);\n    poly139.ps[2] = Point(1360.5, 1134.92);\n    poly139.ps[3] = Point(1360.5, 1094.92);\n    new ShapeRef(router, poly139, 139);\n\n    Polygon poly140(4);\n    poly140.ps[0] = Point(1426.5, 1268.92);\n    poly140.ps[1] = Point(1426.5, 1308.92);\n    poly140.ps[2] = Point(1350.5, 1308.92);\n    poly140.ps[3] = Point(1350.5, 1268.92);\n    new ShapeRef(router, poly140, 140);\n\n    Polygon poly141(4);\n    poly141.ps[0] = Point(1564.5, 1268.92);\n    poly141.ps[1] = Point(1564.5, 1308.92);\n    poly141.ps[2] = Point(1488.5, 1308.92);\n    poly141.ps[3] = Point(1488.5, 1268.92);\n    new ShapeRef(router, poly141, 141);\n\n    Polygon poly142(4);\n    poly142.ps[0] = Point(706.5, 1789.92);\n    poly142.ps[1] = Point(706.5, 1849.92);\n    poly142.ps[2] = Point(650.5, 1849.92);\n    poly142.ps[3] = Point(650.5, 1789.92);\n    new ShapeRef(router, poly142, 142);\n\n    Polygon poly143(4);\n    poly143.ps[0] = Point(1655.5, 1268.92);\n    poly143.ps[1] = Point(1655.5, 1308.92);\n    poly143.ps[2] = Point(1579.5, 1308.92);\n    poly143.ps[3] = Point(1579.5, 1268.92);\n    new ShapeRef(router, poly143, 143);\n\n    Polygon poly144(4);\n    poly144.ps[0] = Point(1276.5, 1363.92);\n    poly144.ps[1] = Point(1276.5, 1423.92);\n    poly144.ps[2] = Point(1220.5, 1423.92);\n    poly144.ps[3] = Point(1220.5, 1363.92);\n    new ShapeRef(router, poly144, 144);\n\n    Polygon poly145(4);\n    poly145.ps[0] = Point(1276.5, 1156.92);\n    poly145.ps[1] = Point(1276.5, 1216.92);\n    poly145.ps[2] = Point(1220.5, 1216.92);\n    poly145.ps[3] = Point(1220.5, 1156.92);\n    new ShapeRef(router, poly145, 145);\n\n    Polygon poly146(4);\n    poly146.ps[0] = Point(220.5, 2049.92);\n    poly146.ps[1] = Point(220.5, 2089.92);\n    poly146.ps[2] = Point(144.5, 2089.92);\n    poly146.ps[3] = Point(144.5, 2049.92);\n    new ShapeRef(router, poly146, 146);\n\n    Polygon poly147(4);\n    poly147.ps[0] = Point(1436.5, 757.25);\n    poly147.ps[1] = Point(1436.5, 797.25);\n    poly147.ps[2] = Point(1360.5, 797.25);\n    poly147.ps[3] = Point(1360.5, 757.25);\n    new ShapeRef(router, poly147, 147);\n\n    Polygon poly148(4);\n    poly148.ps[0] = Point(640.5, 535.5);\n    poly148.ps[1] = Point(640.5, 595.5);\n    poly148.ps[2] = Point(584.5, 595.5);\n    poly148.ps[3] = Point(584.5, 535.5);\n    new ShapeRef(router, poly148, 148);\n\n    Polygon poly149(4);\n    poly149.ps[0] = Point(541.5, 783.25);\n    poly149.ps[1] = Point(541.5, 843.25);\n    poly149.ps[2] = Point(485.5, 843.25);\n    poly149.ps[3] = Point(485.5, 783.25);\n    new ShapeRef(router, poly149, 149);\n\n    Polygon poly150(4);\n    poly150.ps[0] = Point(1309.5, 2375.92);\n    poly150.ps[1] = Point(1309.5, 2435.92);\n    poly150.ps[2] = Point(1253.5, 2435.92);\n    poly150.ps[3] = Point(1253.5, 2375.92);\n    new ShapeRef(router, poly150, 150);\n\n    Polygon poly151(4);\n    poly151.ps[0] = Point(1610, 700.5);\n    poly151.ps[1] = Point(1610, 740.5);\n    poly151.ps[2] = Point(1550, 740.5);\n    poly151.ps[3] = Point(1550, 700.5);\n    new ShapeRef(router, poly151, 151);\n\n    Polygon poly152(4);\n    poly152.ps[0] = Point(1610, 740.5);\n    poly152.ps[1] = Point(1610, 780.5);\n    poly152.ps[2] = Point(1550, 780.5);\n    poly152.ps[3] = Point(1550, 740.5);\n    new ShapeRef(router, poly152, 152);\n\n    Polygon poly153(4);\n    poly153.ps[0] = Point(1661, 869);\n    poly153.ps[1] = Point(1661, 929);\n    poly153.ps[2] = Point(1621, 929);\n    poly153.ps[3] = Point(1621, 869);\n    new ShapeRef(router, poly153, 153);\n\n    Polygon poly154(4);\n    poly154.ps[0] = Point(1701, 869);\n    poly154.ps[1] = Point(1701, 929);\n    poly154.ps[2] = Point(1661, 929);\n    poly154.ps[3] = Point(1661, 869);\n    new ShapeRef(router, poly154, 154);\n\n    Polygon poly155(4);\n    poly155.ps[0] = Point(1410, 159.5);\n    poly155.ps[1] = Point(1410, 219.5);\n    poly155.ps[2] = Point(1370, 219.5);\n    poly155.ps[3] = Point(1370, 159.5);\n    new ShapeRef(router, poly155, 155);\n\n    Polygon poly156(4);\n    poly156.ps[0] = Point(252.5, 1825.42);\n    poly156.ps[1] = Point(252.5, 1865.42);\n    poly156.ps[2] = Point(192.5, 1865.42);\n    poly156.ps[3] = Point(192.5, 1825.42);\n    new ShapeRef(router, poly156, 156);\n\n    Polygon poly157(4);\n    poly157.ps[0] = Point(252.5, 1865.42);\n    poly157.ps[1] = Point(252.5, 1905.42);\n    poly157.ps[2] = Point(192.5, 1905.42);\n    poly157.ps[3] = Point(192.5, 1865.42);\n    new ShapeRef(router, poly157, 157);\n\n    Polygon poly158(4);\n    poly158.ps[0] = Point(867.5, 1454.42);\n    poly158.ps[1] = Point(867.5, 1494.42);\n    poly158.ps[2] = Point(807.5, 1494.42);\n    poly158.ps[3] = Point(807.5, 1454.42);\n    new ShapeRef(router, poly158, 158);\n\n    Polygon poly159(4);\n    poly159.ps[0] = Point(1597, 2133.92);\n    poly159.ps[1] = Point(1597, 2193.92);\n    poly159.ps[2] = Point(1557, 2193.92);\n    poly159.ps[3] = Point(1557, 2133.92);\n    new ShapeRef(router, poly159, 159);\n\n    Polygon poly160(4);\n    poly160.ps[0] = Point(675.5, 2248.92);\n    poly160.ps[1] = Point(675.5, 2290.92);\n    poly160.ps[2] = Point(607.5, 2290.92);\n    poly160.ps[3] = Point(607.5, 2248.92);\n    new ShapeRef(router, poly160, 160);\n\n    Polygon poly161(4);\n    poly161.ps[0] = Point(272.5, 2039.92);\n    poly161.ps[1] = Point(272.5, 2099.92);\n    poly161.ps[2] = Point(230.5, 2099.92);\n    poly161.ps[3] = Point(230.5, 2039.92);\n    new ShapeRef(router, poly161, 161);\n\n    Polygon poly162(4);\n    poly162.ps[0] = Point(642.5, 333.5);\n    poly162.ps[1] = Point(642.5, 600.5);\n    poly162.ps[2] = Point(574.5, 600.5);\n    poly162.ps[3] = Point(574.5, 333.5);\n    new ShapeRef(router, poly162, 162);\n\n    Polygon poly163(4);\n    poly163.ps[0] = Point(543.5, 581.25);\n    poly163.ps[1] = Point(543.5, 773.25);\n    poly163.ps[2] = Point(475.5, 773.25);\n    poly163.ps[3] = Point(475.5, 581.25);\n    new ShapeRef(router, poly163, 163);\n\n    Polygon poly164(4);\n    poly164.ps[0] = Point(1441.5, 747.25);\n    poly164.ps[1] = Point(1441.5, 807.25);\n    poly164.ps[2] = Point(1308.5, 807.25);\n    poly164.ps[3] = Point(1308.5, 747.25);\n    new ShapeRef(router, poly164, 164);\n\n    Polygon poly165(4);\n    poly165.ps[0] = Point(407.5, 1693.92);\n    poly165.ps[1] = Point(407.5, 1735.92);\n    poly165.ps[2] = Point(339.5, 1735.92);\n    poly165.ps[3] = Point(339.5, 1693.92);\n    new ShapeRef(router, poly165, 165);\n\n    Polygon poly166(4);\n    poly166.ps[0] = Point(1569.5, 1258.92);\n    poly166.ps[1] = Point(1569.5, 1318.92);\n    poly166.ps[2] = Point(1436.5, 1318.92);\n    poly166.ps[3] = Point(1436.5, 1258.92);\n    new ShapeRef(router, poly166, 166);\n\n    Polygon poly167(4);\n    poly167.ps[0] = Point(1350.5, 1084.92);\n    poly167.ps[1] = Point(1350.5, 1144.92);\n    poly167.ps[2] = Point(1308.5, 1144.92);\n    poly167.ps[3] = Point(1308.5, 1084.92);\n    new ShapeRef(router, poly167, 167);\n\n    Polygon poly168(4);\n    poly168.ps[0] = Point(1311.5, 2173.92);\n    poly168.ps[1] = Point(1311.5, 2365.92);\n    poly168.ps[2] = Point(1243.5, 2365.92);\n    poly168.ps[3] = Point(1243.5, 2173.92);\n    new ShapeRef(router, poly168, 168);\n\n    ConnRef *connRef169 = new ConnRef(router, 169);\n    ConnEnd srcPt169(Point(1329.5, 974.25), 2);\n    connRef169->setSourceEndpoint(srcPt169);\n    ConnEnd dstPt169(Point(868.5, 1053.92), 15);\n    connRef169->setDestEndpoint(dstPt169);\n    connRef169->setRoutingType((ConnType)2);\n\n    ConnRef *connRef170 = new ConnRef(router, 170);\n    ConnEnd srcPt170(Point(1329.5, 944.25), 1);\n    connRef170->setSourceEndpoint(srcPt170);\n    ConnEnd dstPt170(Point(1329.5, 843.25), 15);\n    connRef170->setDestEndpoint(dstPt170);\n    connRef170->setRoutingType((ConnType)2);\n\n    ConnRef *connRef171 = new ConnRef(router, 171);\n    ConnEnd srcPt171(Point(1329.5, 974.25), 2);\n    connRef171->setSourceEndpoint(srcPt171);\n    ConnEnd dstPt171(Point(1329.5, 1053.92), 15);\n    connRef171->setDestEndpoint(dstPt171);\n    connRef171->setRoutingType((ConnType)2);\n\n    ConnRef *connRef172 = new ConnRef(router, 172);\n    ConnEnd srcPt172(Point(630.5, 2248.92), 4);\n    connRef172->setSourceEndpoint(srcPt172);\n    ConnEnd dstPt172(Point(251.5, 2269.92), 15);\n    connRef172->setDestEndpoint(dstPt172);\n    connRef172->setRoutingType((ConnType)2);\n    std::vector<Point> checkpoints172(1);\n    checkpoints172[0] = Point(607.5, 2269.92);\n    connRef172->setRoutingCheckpoints(checkpoints172);\n\n    ConnRef *connRef173 = new ConnRef(router, 173);\n    ConnEnd srcPt173(Point(660.5, 2248.92), 8);\n    connRef173->setSourceEndpoint(srcPt173);\n    ConnEnd dstPt173(Point(967.5, 2269.92), 15);\n    connRef173->setDestEndpoint(dstPt173);\n    connRef173->setRoutingType((ConnType)2);\n    std::vector<Point> checkpoints173(1);\n    checkpoints173[0] = Point(683.5, 2269.92);\n    connRef173->setRoutingCheckpoints(checkpoints173);\n\n    ConnRef *connRef174 = new ConnRef(router, 174);\n    ConnEnd srcPt174(Point(272.5, 2084.92), 2);\n    connRef174->setSourceEndpoint(srcPt174);\n    ConnEnd dstPt174(Point(251.5, 2269.92), 15);\n    connRef174->setDestEndpoint(dstPt174);\n    connRef174->setRoutingType((ConnType)2);\n    std::vector<Point> checkpoints174(1);\n    checkpoints174[0] = Point(251.5, 2099.92);\n    connRef174->setRoutingCheckpoints(checkpoints174);\n\n    ConnRef *connRef175 = new ConnRef(router, 175);\n    ConnEnd srcPt175(Point(630.5, 2290.92), 4);\n    connRef175->setSourceEndpoint(srcPt175);\n    ConnEnd dstPt175(Point(251.5, 2269.92), 15);\n    connRef175->setDestEndpoint(dstPt175);\n    connRef175->setRoutingType((ConnType)2);\n    std::vector<Point> checkpoints175(1);\n    checkpoints175[0] = Point(607.5, 2269.92);\n    connRef175->setRoutingCheckpoints(checkpoints175);\n\n    ConnRef *connRef176 = new ConnRef(router, 176);\n    ConnEnd srcPt176(Point(660.5, 2290.92), 8);\n    connRef176->setSourceEndpoint(srcPt176);\n    ConnEnd dstPt176(Point(967.5, 2269.92), 15);\n    connRef176->setDestEndpoint(dstPt176);\n    connRef176->setRoutingType((ConnType)2);\n    std::vector<Point> checkpoints176(1);\n    checkpoints176[0] = Point(683.5, 2269.92);\n    connRef176->setRoutingCheckpoints(checkpoints176);\n\n    ConnRef *connRef177 = new ConnRef(router, 177);\n    ConnEnd srcPt177(Point(251.5, 2269.92), 15);\n    connRef177->setSourceEndpoint(srcPt177);\n    ConnEnd dstPt177(Point(230.5, 2084.92), 2);\n    connRef177->setDestEndpoint(dstPt177);\n    connRef177->setRoutingType((ConnType)2);\n    std::vector<Point> checkpoints177(1);\n    checkpoints177[0] = Point(251.5, 2099.92);\n    connRef177->setRoutingCheckpoints(checkpoints177);\n\n    ConnRef *connRef178 = new ConnRef(router, 178);\n    ConnEnd srcPt178(Point(967.5, 2222.92), 2);\n    connRef178->setSourceEndpoint(srcPt178);\n    ConnEnd dstPt178(Point(967.5, 2269.92), 15);\n    connRef178->setDestEndpoint(dstPt178);\n    connRef178->setRoutingType((ConnType)2);\n\n    ConnRef *connRef179 = new ConnRef(router, 179);\n    ConnEnd srcPt179(Point(1266.5, 2173.92), 4);\n    connRef179->setSourceEndpoint(srcPt179);\n    ConnEnd dstPt179(Point(967.5, 2269.92), 15);\n    connRef179->setDestEndpoint(dstPt179);\n    connRef179->setRoutingType((ConnType)2);\n    std::vector<Point> checkpoints179(1);\n    checkpoints179[0] = Point(1243.5, 2269.92);\n    connRef179->setRoutingCheckpoints(checkpoints179);\n\n    ConnRef *connRef180 = new ConnRef(router, 180);\n    ConnEnd srcPt180(Point(1266.5, 2248.92), 4);\n    connRef180->setSourceEndpoint(srcPt180);\n    ConnEnd dstPt180(Point(967.5, 2269.92), 15);\n    connRef180->setDestEndpoint(dstPt180);\n    connRef180->setRoutingType((ConnType)2);\n    std::vector<Point> checkpoints180(1);\n    checkpoints180[0] = Point(1243.5, 2269.92);\n    connRef180->setRoutingCheckpoints(checkpoints180);\n\n    ConnRef *connRef181 = new ConnRef(router, 181);\n    ConnEnd srcPt181(Point(1142.5, 2041.92), 4);\n    connRef181->setSourceEndpoint(srcPt181);\n    ConnEnd dstPt181(Point(967.5, 2008.92), 15);\n    connRef181->setDestEndpoint(dstPt181);\n    connRef181->setRoutingType((ConnType)2);\n\n    ConnRef *connRef182 = new ConnRef(router, 182);\n    ConnEnd srcPt182(Point(1157.5, 1940.92), 2);\n    connRef182->setSourceEndpoint(srcPt182);\n    ConnEnd dstPt182(Point(967.5, 2008.92), 15);\n    connRef182->setDestEndpoint(dstPt182);\n    connRef182->setRoutingType((ConnType)2);\n#endif\n\n    ConnRef *connRef183 = new ConnRef(router, 183);\n    ConnEnd srcPt183(Point(820.5, 2008.92), 4);\n    connRef183->setSourceEndpoint(srcPt183);\n    ConnEnd dstPt183(Point(579.5, 2008.92), 15);\n    connRef183->setDestEndpoint(dstPt183);\n    connRef183->setRoutingType((ConnType)2);\n\n    ConnRef *connRef184 = new ConnRef(router, 184);\n    ConnEnd srcPt184(Point(820.5, 2008.92), 4);\n    connRef184->setSourceEndpoint(srcPt184);\n    ConnEnd dstPt184(Point(967.5, 1892.92), 15);\n    connRef184->setDestEndpoint(dstPt184);\n    connRef184->setRoutingType((ConnType)2);\n\n#ifdef ALL\n    ConnRef *connRef185 = new ConnRef(router, 185);\n    ConnEnd srcPt185(Point(395.5, 2008.92), 4);\n    connRef185->setSourceEndpoint(srcPt185);\n    ConnEnd dstPt185(Point(251.5, 2008.92), 15);\n    connRef185->setDestEndpoint(dstPt185);\n    connRef185->setRoutingType((ConnType)2);\n\n    ConnRef *connRef186 = new ConnRef(router, 186);\n    ConnEnd srcPt186(Point(425.5, 2008.92), 8);\n    connRef186->setSourceEndpoint(srcPt186);\n    ConnEnd dstPt186(Point(579.5, 2008.92), 15);\n    connRef186->setDestEndpoint(dstPt186);\n    connRef186->setRoutingType((ConnType)2);\n\n    ConnRef *connRef187 = new ConnRef(router, 187);\n    ConnEnd srcPt187(Point(395.5, 2008.92), 4);\n    connRef187->setSourceEndpoint(srcPt187);\n    ConnEnd dstPt187(Point(410.5, 2174.92), 15);\n    connRef187->setDestEndpoint(dstPt187);\n    connRef187->setRoutingType((ConnType)2);\n\n    ConnRef *connRef188 = new ConnRef(router, 188);\n    ConnEnd srcPt188(Point(1513.5, 2008.92), 8);\n    connRef188->setSourceEndpoint(srcPt188);\n    ConnEnd dstPt188(Point(1574.5, 2008.92), 15);\n    connRef188->setDestEndpoint(dstPt188);\n    connRef188->setRoutingType((ConnType)2);\n\n    ConnRef *connRef189 = new ConnRef(router, 189);\n    ConnEnd srcPt189(Point(1483.5, 2008.92), 4);\n    connRef189->setSourceEndpoint(srcPt189);\n    ConnEnd dstPt189(Point(1329.5, 2008.92), 15);\n    connRef189->setDestEndpoint(dstPt189);\n    connRef189->setRoutingType((ConnType)2);\n\n    ConnRef *connRef190 = new ConnRef(router, 190);\n    ConnEnd srcPt190(Point(1329.5, 1791.92), 2);\n    connRef190->setSourceEndpoint(srcPt190);\n    ConnEnd dstPt190(Point(1329.5, 2008.92), 15);\n    connRef190->setDestEndpoint(dstPt190);\n    connRef190->setRoutingType((ConnType)2);\n\n    ConnRef *connRef191 = new ConnRef(router, 191);\n    ConnEnd srcPt191(Point(1329.5, 1637.92), 1);\n    connRef191->setSourceEndpoint(srcPt191);\n    ConnEnd dstPt191(Point(1329.5, 1590.92), 15);\n    connRef191->setDestEndpoint(dstPt191);\n    connRef191->setRoutingType((ConnType)2);\n\n    ConnRef *connRef192 = new ConnRef(router, 192);\n    ConnEnd srcPt192(Point(1329.5, 1667.92), 2);\n    connRef192->setSourceEndpoint(srcPt192);\n    ConnEnd dstPt192(Point(1329.5, 1714.92), 15);\n    connRef192->setDestEndpoint(dstPt192);\n    connRef192->setRoutingType((ConnType)2);\n\n    ConnRef *connRef193 = new ConnRef(router, 193);\n    ConnEnd srcPt193(Point(1329.5, 1543.92), 2);\n    connRef193->setSourceEndpoint(srcPt193);\n    ConnEnd dstPt193(Point(1329.5, 1590.92), 15);\n    connRef193->setDestEndpoint(dstPt193);\n    connRef193->setRoutingType((ConnType)2);\n\n    ConnRef *connRef194 = new ConnRef(router, 194);\n    ConnEnd srcPt194(Point(1329.5, 1513.92), 1);\n    connRef194->setSourceEndpoint(srcPt194);\n    ConnEnd dstPt194(Point(1329.5, 1466.92), 15);\n    connRef194->setDestEndpoint(dstPt194);\n    connRef194->setRoutingType((ConnType)2);\n\n    ConnRef *connRef195 = new ConnRef(router, 195);\n    ConnEnd srcPt195(Point(1308.5, 1129.92), 2);\n    connRef195->setSourceEndpoint(srcPt195);\n    ConnEnd dstPt195(Point(1329.5, 1226.92), 15);\n    connRef195->setDestEndpoint(dstPt195);\n    connRef195->setRoutingType((ConnType)2);\n    std::vector<Point> checkpoints195(1);\n    checkpoints195[0] = Point(1329.5, 1144.92);\n    connRef195->setRoutingCheckpoints(checkpoints195);\n\n    ConnRef *connRef196 = new ConnRef(router, 196);\n    ConnEnd srcPt196(Point(1308.5, 1099.92), 1);\n    connRef196->setSourceEndpoint(srcPt196);\n    ConnEnd dstPt196(Point(1329.5, 1053.92), 15);\n    connRef196->setDestEndpoint(dstPt196);\n    connRef196->setRoutingType((ConnType)2);\n    std::vector<Point> checkpoints196(1);\n    checkpoints196[0] = Point(1329.5, 1084.92);\n    connRef196->setRoutingCheckpoints(checkpoints196);\n\n    ConnRef *connRef197 = new ConnRef(router, 197);\n    ConnEnd srcPt197(Point(1109.5, 1053.92), 4);\n    connRef197->setSourceEndpoint(srcPt197);\n    ConnEnd dstPt197(Point(868.5, 1053.92), 15);\n    connRef197->setDestEndpoint(dstPt197);\n    connRef197->setRoutingType((ConnType)2);\n\n    ConnRef *connRef198 = new ConnRef(router, 198);\n    ConnEnd srcPt198(Point(1139.5, 1053.92), 8);\n    connRef198->setSourceEndpoint(srcPt198);\n    ConnEnd dstPt198(Point(1329.5, 1053.92), 15);\n    connRef198->setDestEndpoint(dstPt198);\n    connRef198->setRoutingType((ConnType)2);\n\n    ConnRef *connRef199 = new ConnRef(router, 199);\n    ConnEnd srcPt199(Point(1308.5, 792.25), 2);\n    connRef199->setSourceEndpoint(srcPt199);\n    ConnEnd dstPt199(Point(1329.5, 843.25), 15);\n    connRef199->setDestEndpoint(dstPt199);\n    connRef199->setRoutingType((ConnType)2);\n    std::vector<Point> checkpoints199(1);\n    checkpoints199[0] = Point(1329.5, 807.25);\n    connRef199->setRoutingCheckpoints(checkpoints199);\n\n    ConnRef *connRef200 = new ConnRef(router, 200);\n    ConnEnd srcPt200(Point(1441.5, 762.25), 1);\n    connRef200->setSourceEndpoint(srcPt200);\n    ConnEnd dstPt200(Point(1329.5, 677.25), 15);\n    connRef200->setDestEndpoint(dstPt200);\n    connRef200->setRoutingType((ConnType)2);\n    std::vector<Point> checkpoints200(1);\n    checkpoints200[0] = Point(1329.5, 747.25);\n    connRef200->setRoutingCheckpoints(checkpoints200);\n\n    ConnRef *connRef201 = new ConnRef(router, 201);\n    ConnEnd srcPt201(Point(1450.5, 471), 4);\n    connRef201->setSourceEndpoint(srcPt201);\n    ConnEnd dstPt201(Point(1329.5, 504.5), 15);\n    connRef201->setDestEndpoint(dstPt201);\n    connRef201->setRoutingType((ConnType)2);\n\n    ConnRef *connRef202 = new ConnRef(router, 202);\n    ConnEnd srcPt202(Point(1329.5, 574.75), 1);\n    connRef202->setSourceEndpoint(srcPt202);\n    ConnEnd dstPt202(Point(1329.5, 504.5), 15);\n    connRef202->setDestEndpoint(dstPt202);\n    connRef202->setRoutingType((ConnType)2);\n\n    ConnRef *connRef203 = new ConnRef(router, 203);\n    ConnEnd srcPt203(Point(1329.5, 604.75), 2);\n    connRef203->setSourceEndpoint(srcPt203);\n    ConnEnd dstPt203(Point(1329.5, 677.25), 15);\n    connRef203->setDestEndpoint(dstPt203);\n    connRef203->setRoutingType((ConnType)2);\n\n    ConnRef *connRef204 = new ConnRef(router, 204);\n    ConnEnd srcPt204(Point(1329.5, 373), 1);\n    connRef204->setSourceEndpoint(srcPt204);\n    ConnEnd dstPt204(Point(1329.5, 272), 15);\n    connRef204->setDestEndpoint(dstPt204);\n    connRef204->setRoutingType((ConnType)2);\n\n    ConnRef *connRef205 = new ConnRef(router, 205);\n    ConnEnd srcPt205(Point(1329.5, 403), 2);\n    connRef205->setSourceEndpoint(srcPt205);\n    ConnEnd dstPt205(Point(1329.5, 504.5), 15);\n    connRef205->setDestEndpoint(dstPt205);\n    connRef205->setRoutingType((ConnType)2);\n\n    ConnRef *connRef206 = new ConnRef(router, 206);\n    ConnEnd srcPt206(Point(1043.5, 677.25), 4);\n    connRef206->setSourceEndpoint(srcPt206);\n    ConnEnd dstPt206(Point(868.5, 677.25), 15);\n    connRef206->setDestEndpoint(dstPt206);\n    connRef206->setRoutingType((ConnType)2);\n\n    ConnRef *connRef207 = new ConnRef(router, 207);\n    ConnEnd srcPt207(Point(1073.5, 677.25), 8);\n    connRef207->setSourceEndpoint(srcPt207);\n    ConnEnd dstPt207(Point(1329.5, 677.25), 15);\n    connRef207->setDestEndpoint(dstPt207);\n    connRef207->setRoutingType((ConnType)2);\n\n    ConnRef *connRef208 = new ConnRef(router, 208);\n    ConnEnd srcPt208(Point(528.5, 581.25), 8);\n    connRef208->setSourceEndpoint(srcPt208);\n    ConnEnd dstPt208(Point(868.5, 677.25), 15);\n    connRef208->setDestEndpoint(dstPt208);\n    connRef208->setRoutingType((ConnType)2);\n    std::vector<Point> checkpoints208(1);\n    checkpoints208[0] = Point(551.5, 677.25);\n    connRef208->setRoutingCheckpoints(checkpoints208);\n\n    ConnRef *connRef209 = new ConnRef(router, 209);\n    ConnEnd srcPt209(Point(528.5, 656.25), 8);\n    connRef209->setSourceEndpoint(srcPt209);\n    ConnEnd dstPt209(Point(868.5, 677.25), 15);\n    connRef209->setDestEndpoint(dstPt209);\n    connRef209->setRoutingType((ConnType)2);\n    std::vector<Point> checkpoints209(1);\n    checkpoints209[0] = Point(551.5, 677.25);\n    connRef209->setRoutingCheckpoints(checkpoints209);\n\n    ConnRef *connRef210 = new ConnRef(router, 210);\n    ConnEnd srcPt210(Point(919.5, 589.75), 4);\n    connRef210->setSourceEndpoint(srcPt210);\n    ConnEnd dstPt210(Point(868.5, 677.25), 15);\n    connRef210->setDestEndpoint(dstPt210);\n    connRef210->setRoutingType((ConnType)2);\n\n    ConnRef *connRef211 = new ConnRef(router, 211);\n    ConnEnd srcPt211(Point(949.5, 589.75), 8);\n    connRef211->setSourceEndpoint(srcPt211);\n    ConnEnd dstPt211(Point(1329.5, 504.5), 15);\n    connRef211->setDestEndpoint(dstPt211);\n    connRef211->setRoutingType((ConnType)2);\n\n    ConnRef *connRef212 = new ConnRef(router, 212);\n    ConnEnd srcPt212(Point(769.5, 604.75), 2);\n    connRef212->setSourceEndpoint(srcPt212);\n    ConnEnd dstPt212(Point(868.5, 677.25), 15);\n    connRef212->setDestEndpoint(dstPt212);\n    connRef212->setRoutingType((ConnType)2);\n\n    ConnRef *connRef213 = new ConnRef(router, 213);\n    ConnEnd srcPt213(Point(769.5, 574.75), 1);\n    connRef213->setSourceEndpoint(srcPt213);\n    ConnEnd dstPt213(Point(1329.5, 504.5), 15);\n    connRef213->setDestEndpoint(dstPt213);\n    connRef213->setRoutingType((ConnType)2);\n\n    ConnRef *connRef214 = new ConnRef(router, 214);\n    ConnEnd srcPt214(Point(286.5, 574.75), 1);\n    connRef214->setSourceEndpoint(srcPt214);\n    ConnEnd dstPt214(Point(286.5, 504.5), 15);\n    connRef214->setDestEndpoint(dstPt214);\n    connRef214->setRoutingType((ConnType)2);\n\n    ConnRef *connRef215 = new ConnRef(router, 215);\n    ConnEnd srcPt215(Point(286.5, 604.75), 2);\n    connRef215->setSourceEndpoint(srcPt215);\n    ConnEnd dstPt215(Point(286.5, 677.25), 15);\n    connRef215->setDestEndpoint(dstPt215);\n    connRef215->setRoutingType((ConnType)2);\n\n    ConnRef *connRef216 = new ConnRef(router, 216);\n    ConnEnd srcPt216(Point(627.5, 333.5), 8);\n    connRef216->setSourceEndpoint(srcPt216);\n    ConnEnd dstPt216(Point(1329.5, 504.5), 15);\n    connRef216->setDestEndpoint(dstPt216);\n    connRef216->setRoutingType((ConnType)2);\n    std::vector<Point> checkpoints216(1);\n    checkpoints216[0] = Point(650.5, 504.5);\n    connRef216->setRoutingCheckpoints(checkpoints216);\n\n    ConnRef *connRef217 = new ConnRef(router, 217);\n    ConnEnd srcPt217(Point(627.5, 408.5), 8);\n    connRef217->setSourceEndpoint(srcPt217);\n    ConnEnd dstPt217(Point(1329.5, 504.5), 15);\n    connRef217->setDestEndpoint(dstPt217);\n    connRef217->setRoutingType((ConnType)2);\n    std::vector<Point> checkpoints217(1);\n    checkpoints217[0] = Point(650.5, 504.5);\n    connRef217->setRoutingCheckpoints(checkpoints217);\n\n    ConnRef *connRef218 = new ConnRef(router, 218);\n    ConnEnd srcPt218(Point(597.5, 600.5), 4);\n    connRef218->setSourceEndpoint(srcPt218);\n    ConnEnd dstPt218(Point(286.5, 504.5), 15);\n    connRef218->setDestEndpoint(dstPt218);\n    connRef218->setRoutingType((ConnType)2);\n    std::vector<Point> checkpoints218(1);\n    checkpoints218[0] = Point(574.5, 504.5);\n    connRef218->setRoutingCheckpoints(checkpoints218);\n\n    ConnRef *connRef219 = new ConnRef(router, 219);\n    ConnEnd srcPt219(Point(886.5, 355), 4);\n    connRef219->setSourceEndpoint(srcPt219);\n    ConnEnd dstPt219(Point(286.5, 504.5), 15);\n    connRef219->setDestEndpoint(dstPt219);\n    connRef219->setRoutingType((ConnType)2);\n\n    ConnRef *connRef220 = new ConnRef(router, 220);\n    ConnEnd srcPt220(Point(886.5, 239), 4);\n    connRef220->setSourceEndpoint(srcPt220);\n    ConnEnd dstPt220(Point(286.5, 504.5), 15);\n    connRef220->setDestEndpoint(dstPt220);\n    connRef220->setRoutingType((ConnType)2);\n\n    ConnRef *connRef221 = new ConnRef(router, 221);\n    ConnEnd srcPt221(Point(561.5, 2174.92), 8);\n    connRef221->setSourceEndpoint(srcPt221);\n    ConnEnd dstPt221(Point(802.5, 2174.92), 15);\n    connRef221->setDestEndpoint(dstPt221);\n    connRef221->setRoutingType((ConnType)2);\n\n    ConnRef *connRef222 = new ConnRef(router, 222);\n    ConnEnd srcPt222(Point(1329.5, 1365.92), 2);\n    connRef222->setSourceEndpoint(srcPt222);\n    ConnEnd dstPt222(Point(1329.5, 1466.92), 15);\n    connRef222->setDestEndpoint(dstPt222);\n    connRef222->setRoutingType((ConnType)2);\n\n    ConnRef *connRef223 = new ConnRef(router, 223);\n    ConnEnd srcPt223(Point(1329.5, 1335.92), 1);\n    connRef223->setSourceEndpoint(srcPt223);\n    ConnEnd dstPt223(Point(1329.5, 1226.92), 15);\n    connRef223->setDestEndpoint(dstPt223);\n    connRef223->setRoutingType((ConnType)2);\n\n    ConnRef *connRef224 = new ConnRef(router, 224);\n    ConnEnd srcPt224(Point(627.5, 483.5), 8);\n    connRef224->setSourceEndpoint(srcPt224);\n    ConnEnd dstPt224(Point(1329.5, 504.5), 15);\n    connRef224->setDestEndpoint(dstPt224);\n    connRef224->setRoutingType((ConnType)2);\n    std::vector<Point> checkpoints224(1);\n    checkpoints224[0] = Point(650.5, 504.5);\n    connRef224->setRoutingCheckpoints(checkpoints224);\n\n    ConnRef *connRef225 = new ConnRef(router, 225);\n    ConnEnd srcPt225(Point(528.5, 698.25), 8);\n    connRef225->setSourceEndpoint(srcPt225);\n    ConnEnd dstPt225(Point(868.5, 677.25), 15);\n    connRef225->setDestEndpoint(dstPt225);\n    connRef225->setRoutingType((ConnType)2);\n    std::vector<Point> checkpoints225(1);\n    checkpoints225[0] = Point(551.5, 677.25);\n    connRef225->setRoutingCheckpoints(checkpoints225);\n\n    ConnRef *connRef226 = new ConnRef(router, 226);\n    ConnEnd srcPt226(Point(301.5, 810.25), 8);\n    connRef226->setSourceEndpoint(srcPt226);\n    ConnEnd dstPt226(Point(443.5, 810.25), 15);\n    connRef226->setDestEndpoint(dstPt226);\n    connRef226->setRoutingType((ConnType)2);\n\n    ConnRef *connRef227 = new ConnRef(router, 227);\n    ConnEnd srcPt227(Point(301.5, 926.25), 8);\n    connRef227->setSourceEndpoint(srcPt227);\n    ConnEnd dstPt227(Point(443.5, 926.25), 15);\n    connRef227->setDestEndpoint(dstPt227);\n    connRef227->setRoutingType((ConnType)2);\n\n    ConnRef *connRef228 = new ConnRef(router, 228);\n    ConnEnd srcPt228(Point(693.5, 810.25), 8);\n    connRef228->setSourceEndpoint(srcPt228);\n    ConnEnd dstPt228(Point(868.5, 677.25), 15);\n    connRef228->setDestEndpoint(dstPt228);\n    connRef228->setRoutingType((ConnType)2);\n\n    ConnRef *connRef229 = new ConnRef(router, 229);\n    ConnEnd srcPt229(Point(693.5, 926.25), 8);\n    connRef229->setSourceEndpoint(srcPt229);\n    ConnEnd dstPt229(Point(868.5, 677.25), 15);\n    connRef229->setDestEndpoint(dstPt229);\n    connRef229->setRoutingType((ConnType)2);\n\n    ConnRef *connRef230 = new ConnRef(router, 230);\n    ConnEnd srcPt230(Point(1541.5, 471), 15);\n    connRef230->setSourceEndpoint(srcPt230);\n    ConnEnd dstPt230(Point(1480.5, 471), 8);\n    connRef230->setDestEndpoint(dstPt230);\n    connRef230->setRoutingType((ConnType)2);\n\n    ConnRef *connRef231 = new ConnRef(router, 231);\n    ConnEnd srcPt231(Point(286.5, 504.5), 15);\n    connRef231->setSourceEndpoint(srcPt231);\n    ConnEnd dstPt231(Point(597.5, 483.5), 4);\n    connRef231->setDestEndpoint(dstPt231);\n    connRef231->setRoutingType((ConnType)2);\n    std::vector<Point> checkpoints231(1);\n    checkpoints231[0] = Point(574.5, 504.5);\n    connRef231->setRoutingCheckpoints(checkpoints231);\n\n    ConnRef *connRef232 = new ConnRef(router, 232);\n    ConnEnd srcPt232(Point(286.5, 504.5), 15);\n    connRef232->setSourceEndpoint(srcPt232);\n    ConnEnd dstPt232(Point(597.5, 525.5), 4);\n    connRef232->setDestEndpoint(dstPt232);\n    connRef232->setRoutingType((ConnType)2);\n    std::vector<Point> checkpoints232(1);\n    checkpoints232[0] = Point(574.5, 504.5);\n    connRef232->setRoutingCheckpoints(checkpoints232);\n\n    ConnRef *connRef233 = new ConnRef(router, 233);\n    ConnEnd srcPt233(Point(286.5, 677.25), 15);\n    connRef233->setSourceEndpoint(srcPt233);\n    ConnEnd dstPt233(Point(498.5, 698.25), 4);\n    connRef233->setDestEndpoint(dstPt233);\n    connRef233->setRoutingType((ConnType)2);\n    std::vector<Point> checkpoints233(1);\n    checkpoints233[0] = Point(475.5, 677.25);\n    connRef233->setRoutingCheckpoints(checkpoints233);\n\n    ConnRef *connRef234 = new ConnRef(router, 234);\n    ConnEnd srcPt234(Point(498.5, 773.25), 4);\n    connRef234->setSourceEndpoint(srcPt234);\n    ConnEnd dstPt234(Point(286.5, 677.25), 15);\n    connRef234->setDestEndpoint(dstPt234);\n    connRef234->setRoutingType((ConnType)2);\n    std::vector<Point> checkpoints234(1);\n    checkpoints234[0] = Point(475.5, 677.25);\n    connRef234->setRoutingCheckpoints(checkpoints234);\n\n    ConnRef *connRef235 = new ConnRef(router, 235);\n    ConnEnd srcPt235(Point(528.5, 773.25), 8);\n    connRef235->setSourceEndpoint(srcPt235);\n    ConnEnd dstPt235(Point(868.5, 677.25), 15);\n    connRef235->setDestEndpoint(dstPt235);\n    connRef235->setRoutingType((ConnType)2);\n    std::vector<Point> checkpoints235(1);\n    checkpoints235[0] = Point(551.5, 677.25);\n    connRef235->setRoutingCheckpoints(checkpoints235);\n\n    ConnRef *connRef236 = new ConnRef(router, 236);\n    ConnEnd srcPt236(Point(1329.5, 677.25), 15);\n    connRef236->setSourceEndpoint(srcPt236);\n    ConnEnd dstPt236(Point(1350.5, 762.25), 1);\n    connRef236->setDestEndpoint(dstPt236);\n    connRef236->setRoutingType((ConnType)2);\n    std::vector<Point> checkpoints236(1);\n    checkpoints236[0] = Point(1329.5, 747.25);\n    connRef236->setRoutingCheckpoints(checkpoints236);\n\n    ConnRef *connRef237 = new ConnRef(router, 237);\n    ConnEnd srcPt237(Point(392.5, 1735.92), 8);\n    connRef237->setSourceEndpoint(srcPt237);\n    ConnEnd dstPt237(Point(1329.5, 1714.92), 15);\n    connRef237->setDestEndpoint(dstPt237);\n    connRef237->setRoutingType((ConnType)2);\n    std::vector<Point> checkpoints237(1);\n    checkpoints237[0] = Point(415.5, 1714.92);\n    connRef237->setRoutingCheckpoints(checkpoints237);\n\n    ConnRef *connRef238 = new ConnRef(router, 238);\n    ConnEnd srcPt238(Point(1436.5, 1303.92), 2);\n    connRef238->setSourceEndpoint(srcPt238);\n    ConnEnd dstPt238(Point(1329.5, 1466.92), 15);\n    connRef238->setDestEndpoint(dstPt238);\n    connRef238->setRoutingType((ConnType)2);\n    std::vector<Point> checkpoints238(1);\n    checkpoints238[0] = Point(1457.5, 1318.92);\n    connRef238->setRoutingCheckpoints(checkpoints238);\n\n    ConnRef *connRef239 = new ConnRef(router, 239);\n    ConnEnd srcPt239(Point(1478.5, 1303.92), 2);\n    connRef239->setSourceEndpoint(srcPt239);\n    ConnEnd dstPt239(Point(1329.5, 1466.92), 15);\n    connRef239->setDestEndpoint(dstPt239);\n    connRef239->setRoutingType((ConnType)2);\n    std::vector<Point> checkpoints239(1);\n    checkpoints239[0] = Point(1457.5, 1318.92);\n    connRef239->setRoutingCheckpoints(checkpoints239);\n\n    ConnRef *connRef240 = new ConnRef(router, 240);\n    ConnEnd srcPt240(Point(1569.5, 1303.92), 2);\n    connRef240->setSourceEndpoint(srcPt240);\n    ConnEnd dstPt240(Point(1329.5, 1466.92), 15);\n    connRef240->setDestEndpoint(dstPt240);\n    connRef240->setRoutingType((ConnType)2);\n    std::vector<Point> checkpoints240(1);\n    checkpoints240[0] = Point(1457.5, 1318.92);\n    connRef240->setRoutingCheckpoints(checkpoints240);\n\n    ConnRef *connRef241 = new ConnRef(router, 241);\n    ConnEnd srcPt241(Point(1350.5, 1129.92), 2);\n    connRef241->setSourceEndpoint(srcPt241);\n    ConnEnd dstPt241(Point(1329.5, 1226.92), 15);\n    connRef241->setDestEndpoint(dstPt241);\n    connRef241->setRoutingType((ConnType)2);\n    std::vector<Point> checkpoints241(1);\n    checkpoints241[0] = Point(1329.5, 1144.92);\n    connRef241->setRoutingCheckpoints(checkpoints241);\n\n    ConnRef *connRef242 = new ConnRef(router, 242);\n    ConnEnd srcPt242(Point(1263.5, 1226.92), 8);\n    connRef242->setSourceEndpoint(srcPt242);\n    ConnEnd dstPt242(Point(1329.5, 1226.92), 15);\n    connRef242->setDestEndpoint(dstPt242);\n    connRef242->setRoutingType((ConnType)2);\n\n    ConnRef *connRef243 = new ConnRef(router, 243);\n    ConnEnd srcPt243(Point(1296.5, 2173.92), 8);\n    connRef243->setSourceEndpoint(srcPt243);\n    ConnEnd dstPt243(Point(1465.5, 2269.92), 15);\n    connRef243->setDestEndpoint(dstPt243);\n    connRef243->setRoutingType((ConnType)2);\n    std::vector<Point> checkpoints243(1);\n    checkpoints243[0] = Point(1319.5, 2269.92);\n    connRef243->setRoutingCheckpoints(checkpoints243);\n\n    ConnRef *connRef244 = new ConnRef(router, 244);\n    ConnEnd srcPt244(Point(1296.5, 2248.92), 8);\n    connRef244->setSourceEndpoint(srcPt244);\n    ConnEnd dstPt244(Point(1465.5, 2269.92), 15);\n    connRef244->setDestEndpoint(dstPt244);\n    connRef244->setRoutingType((ConnType)2);\n    std::vector<Point> checkpoints244(1);\n    checkpoints244[0] = Point(1319.5, 2269.92);\n    connRef244->setRoutingCheckpoints(checkpoints244);\n\n    ConnRef *connRef245 = new ConnRef(router, 245);\n    ConnEnd srcPt245(Point(1296.5, 2290.92), 8);\n    connRef245->setSourceEndpoint(srcPt245);\n    ConnEnd dstPt245(Point(1465.5, 2269.92), 15);\n    connRef245->setDestEndpoint(dstPt245);\n    connRef245->setRoutingType((ConnType)2);\n    std::vector<Point> checkpoints245(1);\n    checkpoints245[0] = Point(1319.5, 2269.92);\n    connRef245->setRoutingCheckpoints(checkpoints245);\n\n    ConnRef *connRef246 = new ConnRef(router, 246);\n    ConnEnd srcPt246(Point(1296.5, 2365.92), 8);\n    connRef246->setSourceEndpoint(srcPt246);\n    ConnEnd dstPt246(Point(1465.5, 2269.92), 15);\n    connRef246->setDestEndpoint(dstPt246);\n    connRef246->setRoutingType((ConnType)2);\n    std::vector<Point> checkpoints246(1);\n    checkpoints246[0] = Point(1319.5, 2269.92);\n    connRef246->setRoutingCheckpoints(checkpoints246);\n\n    ConnRef *connRef247 = new ConnRef(router, 247);\n    ConnEnd srcPt247(Point(693.5, 1859.92), 8);\n    connRef247->setSourceEndpoint(srcPt247);\n    ConnEnd dstPt247(Point(1329.5, 2008.92), 15);\n    connRef247->setDestEndpoint(dstPt247);\n    connRef247->setRoutingType((ConnType)2);\n\n    ConnRef *connRef248 = new ConnRef(router, 248);\n    ConnEnd srcPt248(Point(967.5, 2008.92), 15);\n    connRef248->setSourceEndpoint(srcPt248);\n    ConnEnd dstPt248(Point(967.5, 2192.92), 1);\n    connRef248->setDestEndpoint(dstPt248);\n    connRef248->setRoutingType((ConnType)2);\n\n    ConnRef *connRef249 = new ConnRef(router, 249);\n    ConnEnd srcPt249(Point(663.5, 1859.92), 4);\n    connRef249->setSourceEndpoint(srcPt249);\n    ConnEnd dstPt249(Point(251.5, 2008.92), 15);\n    connRef249->setDestEndpoint(dstPt249);\n    connRef249->setRoutingType((ConnType)2);\n\n    ConnRef *connRef250 = new ConnRef(router, 250);\n    ConnEnd srcPt250(Point(1266.5, 2290.92), 4);\n    connRef250->setSourceEndpoint(srcPt250);\n    ConnEnd dstPt250(Point(967.5, 2269.92), 15);\n    connRef250->setDestEndpoint(dstPt250);\n    connRef250->setRoutingType((ConnType)2);\n    std::vector<Point> checkpoints250(1);\n    checkpoints250[0] = Point(1243.5, 2269.92);\n    connRef250->setRoutingCheckpoints(checkpoints250);\n\n    ConnRef *connRef251 = new ConnRef(router, 251);\n    ConnEnd srcPt251(Point(1266.5, 2365.92), 4);\n    connRef251->setSourceEndpoint(srcPt251);\n    ConnEnd dstPt251(Point(967.5, 2269.92), 15);\n    connRef251->setDestEndpoint(dstPt251);\n    connRef251->setRoutingType((ConnType)2);\n    std::vector<Point> checkpoints251(1);\n    checkpoints251[0] = Point(1243.5, 2269.92);\n    connRef251->setRoutingCheckpoints(checkpoints251);\n\n    ConnRef *connRef252 = new ConnRef(router, 252);\n    ConnEnd srcPt252(Point(531.5, 2174.92), 4);\n    connRef252->setSourceEndpoint(srcPt252);\n    ConnEnd dstPt252(Point(410.5, 2174.92), 15);\n    connRef252->setDestEndpoint(dstPt252);\n    connRef252->setRoutingType((ConnType)2);\n\n    ConnRef *connRef253 = new ConnRef(router, 253);\n    ConnEnd srcPt253(Point(1329.5, 843.25), 15);\n    connRef253->setSourceEndpoint(srcPt253);\n    ConnEnd dstPt253(Point(1441.5, 792.25), 2);\n    connRef253->setDestEndpoint(dstPt253);\n    connRef253->setRoutingType((ConnType)2);\n    std::vector<Point> checkpoints253(1);\n    checkpoints253[0] = Point(1329.5, 807.25);\n    connRef253->setRoutingCheckpoints(checkpoints253);\n\n    ConnRef *connRef254 = new ConnRef(router, 254);\n    ConnEnd srcPt254(Point(216.5, 810.25), 15);\n    connRef254->setSourceEndpoint(srcPt254);\n    ConnEnd dstPt254(Point(271.5, 810.25), 4);\n    connRef254->setDestEndpoint(dstPt254);\n    connRef254->setRoutingType((ConnType)2);\n\n    ConnRef *connRef255 = new ConnRef(router, 255);\n    ConnEnd srcPt255(Point(443.5, 810.25), 15);\n    connRef255->setSourceEndpoint(srcPt255);\n    ConnEnd dstPt255(Point(663.5, 810.25), 4);\n    connRef255->setDestEndpoint(dstPt255);\n    connRef255->setRoutingType((ConnType)2);\n\n    ConnRef *connRef256 = new ConnRef(router, 256);\n    ConnEnd srcPt256(Point(443.5, 926.25), 15);\n    connRef256->setSourceEndpoint(srcPt256);\n    ConnEnd dstPt256(Point(663.5, 926.25), 4);\n    connRef256->setDestEndpoint(dstPt256);\n    connRef256->setRoutingType((ConnType)2);\n\n    ConnRef *connRef257 = new ConnRef(router, 257);\n    ConnEnd srcPt257(Point(216.5, 926.25), 15);\n    connRef257->setSourceEndpoint(srcPt257);\n    ConnEnd dstPt257(Point(271.5, 926.25), 4);\n    connRef257->setDestEndpoint(dstPt257);\n    connRef257->setRoutingType((ConnType)2);\n\n    ConnRef *connRef258 = new ConnRef(router, 258);\n    ConnEnd srcPt258(Point(392.5, 1693.92), 8);\n    connRef258->setSourceEndpoint(srcPt258);\n    ConnEnd dstPt258(Point(1329.5, 1714.92), 15);\n    connRef258->setDestEndpoint(dstPt258);\n    connRef258->setRoutingType((ConnType)2);\n    std::vector<Point> checkpoints258(1);\n    checkpoints258[0] = Point(415.5, 1714.92);\n    connRef258->setRoutingCheckpoints(checkpoints258);\n\n    ConnRef *connRef259 = new ConnRef(router, 259);\n    ConnEnd srcPt259(Point(251.5, 1714.92), 15);\n    connRef259->setSourceEndpoint(srcPt259);\n    ConnEnd dstPt259(Point(362.5, 1693.92), 4);\n    connRef259->setDestEndpoint(dstPt259);\n    connRef259->setRoutingType((ConnType)2);\n    std::vector<Point> checkpoints259(1);\n    checkpoints259[0] = Point(339.5, 1714.92);\n    connRef259->setRoutingCheckpoints(checkpoints259);\n\n    ConnRef *connRef260 = new ConnRef(router, 260);\n    ConnEnd srcPt260(Point(251.5, 1714.92), 15);\n    connRef260->setSourceEndpoint(srcPt260);\n    ConnEnd dstPt260(Point(362.5, 1735.92), 4);\n    connRef260->setDestEndpoint(dstPt260);\n    connRef260->setRoutingType((ConnType)2);\n    std::vector<Point> checkpoints260(1);\n    checkpoints260[0] = Point(339.5, 1714.92);\n    connRef260->setRoutingCheckpoints(checkpoints260);\n\n    ConnRef *connRef261 = new ConnRef(router, 261);\n    ConnEnd srcPt261(Point(1350.5, 1099.92), 1);\n    connRef261->setSourceEndpoint(srcPt261);\n    ConnEnd dstPt261(Point(1329.5, 1053.92), 15);\n    connRef261->setDestEndpoint(dstPt261);\n    connRef261->setRoutingType((ConnType)2);\n    std::vector<Point> checkpoints261(1);\n    checkpoints261[0] = Point(1329.5, 1084.92);\n    connRef261->setRoutingCheckpoints(checkpoints261);\n\n    ConnRef *connRef262 = new ConnRef(router, 262);\n    ConnEnd srcPt262(Point(1233.5, 1433.92), 4);\n    connRef262->setSourceEndpoint(srcPt262);\n    ConnEnd dstPt262(Point(1091.5, 1350.92), 15);\n    connRef262->setDestEndpoint(dstPt262);\n    connRef262->setRoutingType((ConnType)2);\n\n    ConnRef *connRef263 = new ConnRef(router, 263);\n    ConnEnd srcPt263(Point(1263.5, 1433.92), 8);\n    connRef263->setSourceEndpoint(srcPt263);\n    ConnEnd dstPt263(Point(1329.5, 1466.92), 15);\n    connRef263->setDestEndpoint(dstPt263);\n    connRef263->setRoutingType((ConnType)2);\n\n    ConnRef *connRef264 = new ConnRef(router, 264);\n    ConnEnd srcPt264(Point(1233.5, 1226.92), 4);\n    connRef264->setSourceEndpoint(srcPt264);\n    ConnEnd dstPt264(Point(1091.5, 1350.92), 15);\n    connRef264->setDestEndpoint(dstPt264);\n    connRef264->setRoutingType((ConnType)2);\n\n    ConnRef *connRef265 = new ConnRef(router, 265);\n    ConnEnd srcPt265(Point(1329.5, 1053.92), 15);\n    connRef265->setSourceEndpoint(srcPt265);\n    ConnEnd dstPt265(Point(1436.5, 1273.92), 1);\n    connRef265->setDestEndpoint(dstPt265);\n    connRef265->setRoutingType((ConnType)2);\n    std::vector<Point> checkpoints265(1);\n    checkpoints265[0] = Point(1457.5, 1258.92);\n    connRef265->setRoutingCheckpoints(checkpoints265);\n\n    ConnRef *connRef266 = new ConnRef(router, 266);\n    ConnEnd srcPt266(Point(1329.5, 1053.92), 15);\n    connRef266->setSourceEndpoint(srcPt266);\n    ConnEnd dstPt266(Point(1478.5, 1273.92), 1);\n    connRef266->setDestEndpoint(dstPt266);\n    connRef266->setRoutingType((ConnType)2);\n    std::vector<Point> checkpoints266(1);\n    checkpoints266[0] = Point(1457.5, 1258.92);\n    connRef266->setRoutingCheckpoints(checkpoints266);\n\n    ConnRef *connRef267 = new ConnRef(router, 267);\n    ConnEnd srcPt267(Point(1329.5, 1053.92), 15);\n    connRef267->setSourceEndpoint(srcPt267);\n    ConnEnd dstPt267(Point(1569.5, 1273.92), 1);\n    connRef267->setDestEndpoint(dstPt267);\n    connRef267->setRoutingType((ConnType)2);\n    std::vector<Point> checkpoints267(1);\n    checkpoints267[0] = Point(1457.5, 1258.92);\n    connRef267->setRoutingCheckpoints(checkpoints267);\n\n    ConnRef *connRef268 = new ConnRef(router, 268);\n    ConnEnd srcPt268(Point(230.5, 2054.92), 1);\n    connRef268->setSourceEndpoint(srcPt268);\n    ConnEnd dstPt268(Point(251.5, 2008.92), 15);\n    connRef268->setDestEndpoint(dstPt268);\n    connRef268->setRoutingType((ConnType)2);\n    std::vector<Point> checkpoints268(1);\n    checkpoints268[0] = Point(251.5, 2039.92);\n    connRef268->setRoutingCheckpoints(checkpoints268);\n\n    ConnRef *connRef269 = new ConnRef(router, 269);\n    ConnEnd srcPt269(Point(1350.5, 792.25), 2);\n    connRef269->setSourceEndpoint(srcPt269);\n    ConnEnd dstPt269(Point(1329.5, 843.25), 15);\n    connRef269->setDestEndpoint(dstPt269);\n    connRef269->setRoutingType((ConnType)2);\n    std::vector<Point> checkpoints269(1);\n    checkpoints269[0] = Point(1329.5, 807.25);\n    connRef269->setRoutingCheckpoints(checkpoints269);\n\n    ConnRef *connRef270 = new ConnRef(router, 270);\n    ConnEnd srcPt270(Point(627.5, 525.5), 8);\n    connRef270->setSourceEndpoint(srcPt270);\n    ConnEnd dstPt270(Point(1329.5, 504.5), 15);\n    connRef270->setDestEndpoint(dstPt270);\n    connRef270->setRoutingType((ConnType)2);\n    std::vector<Point> checkpoints270(1);\n    checkpoints270[0] = Point(650.5, 504.5);\n    connRef270->setRoutingCheckpoints(checkpoints270);\n\n    ConnRef *connRef271 = new ConnRef(router, 271);\n    ConnEnd srcPt271(Point(967.5, 1892.92), 15);\n    connRef271->setSourceEndpoint(srcPt271);\n    ConnEnd dstPt271(Point(1172.5, 2041.92), 8);\n    connRef271->setDestEndpoint(dstPt271);\n    connRef271->setRoutingType((ConnType)2);\n\n    ConnRef *connRef272 = new ConnRef(router, 272);\n    ConnEnd srcPt272(Point(967.5, 1892.92), 15);\n    connRef272->setSourceEndpoint(srcPt272);\n    ConnEnd dstPt272(Point(1157.5, 1910.92), 1);\n    connRef272->setDestEndpoint(dstPt272);\n    connRef272->setRoutingType((ConnType)2);\n\n    ConnRef *connRef273 = new ConnRef(router, 273);\n    ConnEnd srcPt273(Point(1387.5, 959.25), 4);\n    connRef273->setSourceEndpoint(srcPt273);\n    ConnEnd dstPt273(Point(1329.5, 959.25), 8);\n    connRef273->setDestEndpoint(dstPt273);\n    connRef273->setRoutingType((ConnType)2);\n\n    ConnRef *connRef274 = new ConnRef(router, 274);\n    ConnEnd srcPt274(Point(645.5, 2198.92), 2);\n    connRef274->setSourceEndpoint(srcPt274);\n    ConnEnd dstPt274(Point(645.5, 2248.92), 1);\n    connRef274->setDestEndpoint(dstPt274);\n    connRef274->setRoutingType((ConnType)2);\n\n    ConnRef *connRef275 = new ConnRef(router, 275);\n    ConnEnd srcPt275(Point(330.5, 2069.92), 4);\n    connRef275->setSourceEndpoint(srcPt275);\n    ConnEnd dstPt275(Point(272.5, 2069.92), 8);\n    connRef275->setDestEndpoint(dstPt275);\n    connRef275->setRoutingType((ConnType)2);\n\n    ConnRef *connRef276 = new ConnRef(router, 276);\n    ConnEnd srcPt276(Point(645.5, 2340.92), 1);\n    connRef276->setSourceEndpoint(srcPt276);\n    ConnEnd dstPt276(Point(645.5, 2290.92), 2);\n    connRef276->setDestEndpoint(dstPt276);\n    connRef276->setRoutingType((ConnType)2);\n\n    ConnRef *connRef277 = new ConnRef(router, 277);\n    ConnEnd srcPt277(Point(1025.5, 2207.92), 4);\n    connRef277->setSourceEndpoint(srcPt277);\n    ConnEnd dstPt277(Point(967.5, 2207.92), 8);\n    connRef277->setDestEndpoint(dstPt277);\n    connRef277->setRoutingType((ConnType)2);\n\n    ConnRef *connRef278 = new ConnRef(router, 278);\n    ConnEnd srcPt278(Point(1281.5, 2123.92), 2);\n    connRef278->setSourceEndpoint(srcPt278);\n    ConnEnd dstPt278(Point(1281.5, 2173.92), 1);\n    connRef278->setDestEndpoint(dstPt278);\n    connRef278->setRoutingType((ConnType)2);\n\n    ConnRef *connRef279 = new ConnRef(router, 279);\n    ConnEnd srcPt279(Point(1281.5, 2198.92), 2);\n    connRef279->setSourceEndpoint(srcPt279);\n    ConnEnd dstPt279(Point(1281.5, 2248.92), 1);\n    connRef279->setDestEndpoint(dstPt279);\n    connRef279->setRoutingType((ConnType)2);\n\n    ConnRef *connRef280 = new ConnRef(router, 280);\n    ConnEnd srcPt280(Point(1157.5, 2091.92), 1);\n    connRef280->setSourceEndpoint(srcPt280);\n    ConnEnd dstPt280(Point(1157.5, 2041.92), 2);\n    connRef280->setDestEndpoint(dstPt280);\n    connRef280->setRoutingType((ConnType)2);\n\n    ConnRef *connRef281 = new ConnRef(router, 281);\n    ConnEnd srcPt281(Point(1215.5, 1925.92), 4);\n    connRef281->setSourceEndpoint(srcPt281);\n    ConnEnd dstPt281(Point(1157.5, 1925.92), 8);\n    connRef281->setDestEndpoint(dstPt281);\n    connRef281->setRoutingType((ConnType)2);\n\n    ConnRef *connRef282 = new ConnRef(router, 282);\n    ConnEnd srcPt282(Point(835.5, 1958.92), 2);\n    connRef282->setSourceEndpoint(srcPt282);\n    ConnEnd dstPt282(Point(835.5, 2008.92), 1);\n    connRef282->setDestEndpoint(dstPt282);\n    connRef282->setRoutingType((ConnType)2);\n\n    ConnRef *connRef283 = new ConnRef(router, 283);\n    ConnEnd srcPt283(Point(410.5, 1958.92), 2);\n    connRef283->setSourceEndpoint(srcPt283);\n    ConnEnd dstPt283(Point(410.5, 2008.92), 1);\n    connRef283->setDestEndpoint(dstPt283);\n    connRef283->setRoutingType((ConnType)2);\n\n    ConnRef *connRef284 = new ConnRef(router, 284);\n    ConnEnd srcPt284(Point(1498.5, 1958.92), 2);\n    connRef284->setSourceEndpoint(srcPt284);\n    ConnEnd dstPt284(Point(1498.5, 2008.92), 1);\n    connRef284->setDestEndpoint(dstPt284);\n    connRef284->setRoutingType((ConnType)2);\n\n    ConnRef *connRef285 = new ConnRef(router, 285);\n    ConnEnd srcPt285(Point(1387.5, 1776.92), 4);\n    connRef285->setSourceEndpoint(srcPt285);\n    ConnEnd dstPt285(Point(1329.5, 1776.92), 8);\n    connRef285->setDestEndpoint(dstPt285);\n    connRef285->setRoutingType((ConnType)2);\n\n    ConnRef *connRef286 = new ConnRef(router, 286);\n    ConnEnd srcPt286(Point(1387.5, 1652.92), 4);\n    connRef286->setSourceEndpoint(srcPt286);\n    ConnEnd dstPt286(Point(1329.5, 1652.92), 8);\n    connRef286->setDestEndpoint(dstPt286);\n    connRef286->setRoutingType((ConnType)2);\n\n    ConnRef *connRef287 = new ConnRef(router, 287);\n    ConnEnd srcPt287(Point(1387.5, 1528.92), 4);\n    connRef287->setSourceEndpoint(srcPt287);\n    ConnEnd dstPt287(Point(1329.5, 1528.92), 8);\n    connRef287->setDestEndpoint(dstPt287);\n    connRef287->setRoutingType((ConnType)2);\n\n    ConnRef *connRef288 = new ConnRef(router, 288);\n    ConnEnd srcPt288(Point(1250.5, 1114.92), 8);\n    connRef288->setSourceEndpoint(srcPt288);\n    ConnEnd dstPt288(Point(1308.5, 1114.92), 4);\n    connRef288->setDestEndpoint(dstPt288);\n    connRef288->setRoutingType((ConnType)2);\n\n    ConnRef *connRef289 = new ConnRef(router, 289);\n    ConnEnd srcPt289(Point(1124.5, 1003.92), 2);\n    connRef289->setSourceEndpoint(srcPt289);\n    ConnEnd dstPt289(Point(1124.5, 1053.92), 1);\n    connRef289->setDestEndpoint(dstPt289);\n    connRef289->setRoutingType((ConnType)2);\n\n    ConnRef *connRef290 = new ConnRef(router, 290);\n    ConnEnd srcPt290(Point(1250.5, 777.25), 8);\n    connRef290->setSourceEndpoint(srcPt290);\n    ConnEnd dstPt290(Point(1308.5, 777.25), 4);\n    connRef290->setDestEndpoint(dstPt290);\n    connRef290->setRoutingType((ConnType)2);\n\n    ConnRef *connRef291 = new ConnRef(router, 291);\n    ConnEnd srcPt291(Point(1499.5, 777.25), 4);\n    connRef291->setSourceEndpoint(srcPt291);\n    ConnEnd dstPt291(Point(1441.5, 777.25), 8);\n    connRef291->setDestEndpoint(dstPt291);\n    connRef291->setRoutingType((ConnType)2);\n\n    ConnRef *connRef292 = new ConnRef(router, 292);\n    ConnEnd srcPt292(Point(1465.5, 421), 2);\n    connRef292->setSourceEndpoint(srcPt292);\n    ConnEnd dstPt292(Point(1465.5, 471), 1);\n    connRef292->setDestEndpoint(dstPt292);\n    connRef292->setRoutingType((ConnType)2);\n\n    ConnRef *connRef293 = new ConnRef(router, 293);\n    ConnEnd srcPt293(Point(1387.5, 589.75), 4);\n    connRef293->setSourceEndpoint(srcPt293);\n    ConnEnd dstPt293(Point(1329.5, 589.75), 8);\n    connRef293->setDestEndpoint(dstPt293);\n    connRef293->setRoutingType((ConnType)2);\n\n    ConnRef *connRef294 = new ConnRef(router, 294);\n    ConnEnd srcPt294(Point(1387.5, 388), 4);\n    connRef294->setSourceEndpoint(srcPt294);\n    ConnEnd dstPt294(Point(1329.5, 388), 8);\n    connRef294->setDestEndpoint(dstPt294);\n    connRef294->setRoutingType((ConnType)2);\n\n    ConnRef *connRef295 = new ConnRef(router, 295);\n    ConnEnd srcPt295(Point(1058.5, 627.25), 2);\n    connRef295->setSourceEndpoint(srcPt295);\n    ConnEnd dstPt295(Point(1058.5, 677.25), 1);\n    connRef295->setDestEndpoint(dstPt295);\n    connRef295->setRoutingType((ConnType)2);\n\n    ConnRef *connRef296 = new ConnRef(router, 296);\n    ConnEnd srcPt296(Point(513.5, 531.25), 2);\n    connRef296->setSourceEndpoint(srcPt296);\n    ConnEnd dstPt296(Point(513.5, 581.25), 1);\n    connRef296->setDestEndpoint(dstPt296);\n    connRef296->setRoutingType((ConnType)2);\n\n    ConnRef *connRef297 = new ConnRef(router, 297);\n    ConnEnd srcPt297(Point(513.5, 606.25), 2);\n    connRef297->setSourceEndpoint(srcPt297);\n    ConnEnd dstPt297(Point(513.5, 656.25), 1);\n    connRef297->setDestEndpoint(dstPt297);\n    connRef297->setRoutingType((ConnType)2);\n\n    ConnRef *connRef298 = new ConnRef(router, 298);\n    ConnEnd srcPt298(Point(934.5, 539.75), 2);\n    connRef298->setSourceEndpoint(srcPt298);\n    ConnEnd dstPt298(Point(934.5, 589.75), 1);\n    connRef298->setDestEndpoint(dstPt298);\n    connRef298->setRoutingType((ConnType)2);\n\n    ConnRef *connRef299 = new ConnRef(router, 299);\n    ConnEnd srcPt299(Point(711.5, 589.75), 8);\n    connRef299->setSourceEndpoint(srcPt299);\n    ConnEnd dstPt299(Point(769.5, 589.75), 4);\n    connRef299->setDestEndpoint(dstPt299);\n    connRef299->setRoutingType((ConnType)2);\n\n    ConnRef *connRef300 = new ConnRef(router, 300);\n    ConnEnd srcPt300(Point(344.5, 589.75), 4);\n    connRef300->setSourceEndpoint(srcPt300);\n    ConnEnd dstPt300(Point(286.5, 589.75), 8);\n    connRef300->setDestEndpoint(dstPt300);\n    connRef300->setRoutingType((ConnType)2);\n\n    ConnRef *connRef301 = new ConnRef(router, 301);\n    ConnEnd srcPt301(Point(612.5, 283.5), 2);\n    connRef301->setSourceEndpoint(srcPt301);\n    ConnEnd dstPt301(Point(612.5, 333.5), 1);\n    connRef301->setDestEndpoint(dstPt301);\n    connRef301->setRoutingType((ConnType)2);\n\n    ConnRef *connRef302 = new ConnRef(router, 302);\n    ConnEnd srcPt302(Point(612.5, 358.5), 2);\n    connRef302->setSourceEndpoint(srcPt302);\n    ConnEnd dstPt302(Point(612.5, 408.5), 1);\n    connRef302->setDestEndpoint(dstPt302);\n    connRef302->setRoutingType((ConnType)2);\n\n    ConnRef *connRef303 = new ConnRef(router, 303);\n    ConnEnd srcPt303(Point(612.5, 650.5), 1);\n    connRef303->setSourceEndpoint(srcPt303);\n    ConnEnd dstPt303(Point(612.5, 600.5), 2);\n    connRef303->setDestEndpoint(dstPt303);\n    connRef303->setRoutingType((ConnType)2);\n\n    ConnRef *connRef304 = new ConnRef(router, 304);\n    ConnEnd srcPt304(Point(901.5, 305), 2);\n    connRef304->setSourceEndpoint(srcPt304);\n    ConnEnd dstPt304(Point(901.5, 355), 1);\n    connRef304->setDestEndpoint(dstPt304);\n    connRef304->setRoutingType((ConnType)2);\n\n    ConnRef *connRef305 = new ConnRef(router, 305);\n    ConnEnd srcPt305(Point(901.5, 189), 2);\n    connRef305->setSourceEndpoint(srcPt305);\n    ConnEnd dstPt305(Point(901.5, 239), 1);\n    connRef305->setDestEndpoint(dstPt305);\n    connRef305->setRoutingType((ConnType)2);\n\n    ConnRef *connRef306 = new ConnRef(router, 306);\n    ConnEnd srcPt306(Point(546.5, 2124.92), 2);\n    connRef306->setSourceEndpoint(srcPt306);\n    ConnEnd dstPt306(Point(546.5, 2174.92), 1);\n    connRef306->setDestEndpoint(dstPt306);\n    connRef306->setRoutingType((ConnType)2);\n\n    ConnRef *connRef307 = new ConnRef(router, 307);\n    ConnEnd srcPt307(Point(1387.5, 1350.92), 4);\n    connRef307->setSourceEndpoint(srcPt307);\n    ConnEnd dstPt307(Point(1329.5, 1350.92), 8);\n    connRef307->setDestEndpoint(dstPt307);\n    connRef307->setRoutingType((ConnType)2);\n\n    ConnRef *connRef308 = new ConnRef(router, 308);\n    ConnEnd srcPt308(Point(612.5, 433.5), 2);\n    connRef308->setSourceEndpoint(srcPt308);\n    ConnEnd dstPt308(Point(612.5, 483.5), 1);\n    connRef308->setDestEndpoint(dstPt308);\n    connRef308->setRoutingType((ConnType)2);\n\n    ConnRef *connRef309 = new ConnRef(router, 309);\n    ConnEnd srcPt309(Point(513.5, 748.25), 1);\n    connRef309->setSourceEndpoint(srcPt309);\n    ConnEnd dstPt309(Point(513.5, 698.25), 2);\n    connRef309->setDestEndpoint(dstPt309);\n    connRef309->setRoutingType((ConnType)2);\n\n    ConnRef *connRef310 = new ConnRef(router, 310);\n    ConnEnd srcPt310(Point(286.5, 760.25), 2);\n    connRef310->setSourceEndpoint(srcPt310);\n    ConnEnd dstPt310(Point(286.5, 810.25), 1);\n    connRef310->setDestEndpoint(dstPt310);\n    connRef310->setRoutingType((ConnType)2);\n\n    ConnRef *connRef311 = new ConnRef(router, 311);\n    ConnEnd srcPt311(Point(286.5, 876.25), 2);\n    connRef311->setSourceEndpoint(srcPt311);\n    ConnEnd dstPt311(Point(286.5, 926.25), 1);\n    connRef311->setDestEndpoint(dstPt311);\n    connRef311->setRoutingType((ConnType)2);\n\n    ConnRef *connRef312 = new ConnRef(router, 312);\n    ConnEnd srcPt312(Point(678.5, 760.25), 2);\n    connRef312->setSourceEndpoint(srcPt312);\n    ConnEnd dstPt312(Point(678.5, 810.25), 1);\n    connRef312->setDestEndpoint(dstPt312);\n    connRef312->setRoutingType((ConnType)2);\n\n    ConnRef *connRef313 = new ConnRef(router, 313);\n    ConnEnd srcPt313(Point(678.5, 876.25), 2);\n    connRef313->setSourceEndpoint(srcPt313);\n    ConnEnd dstPt313(Point(678.5, 926.25), 1);\n    connRef313->setDestEndpoint(dstPt313);\n    connRef313->setRoutingType((ConnType)2);\n\n    ConnRef *connRef314 = new ConnRef(router, 314);\n    ConnEnd srcPt314(Point(377.5, 1643.92), 2);\n    connRef314->setSourceEndpoint(srcPt314);\n    ConnEnd dstPt314(Point(377.5, 1693.92), 1);\n    connRef314->setDestEndpoint(dstPt314);\n    connRef314->setRoutingType((ConnType)2);\n\n    ConnRef *connRef315 = new ConnRef(router, 315);\n    ConnEnd srcPt315(Point(1281.5, 2340.92), 1);\n    connRef315->setSourceEndpoint(srcPt315);\n    ConnEnd dstPt315(Point(1281.5, 2290.92), 2);\n    connRef315->setDestEndpoint(dstPt315);\n    connRef315->setRoutingType((ConnType)2);\n\n    ConnRef *connRef316 = new ConnRef(router, 316);\n    ConnEnd srcPt316(Point(377.5, 1785.92), 1);\n    connRef316->setSourceEndpoint(srcPt316);\n    ConnEnd dstPt316(Point(377.5, 1735.92), 2);\n    connRef316->setDestEndpoint(dstPt316);\n    connRef316->setRoutingType((ConnType)2);\n\n    ConnRef *connRef317 = new ConnRef(router, 317);\n    ConnEnd srcPt317(Point(1408.5, 1114.92), 4);\n    connRef317->setSourceEndpoint(srcPt317);\n    ConnEnd dstPt317(Point(1350.5, 1114.92), 8);\n    connRef317->setDestEndpoint(dstPt317);\n    connRef317->setRoutingType((ConnType)2);\n\n    ConnRef *connRef318 = new ConnRef(router, 318);\n    ConnEnd srcPt318(Point(1378.5, 1288.92), 8);\n    connRef318->setSourceEndpoint(srcPt318);\n    ConnEnd dstPt318(Point(1436.5, 1288.92), 4);\n    connRef318->setDestEndpoint(dstPt318);\n    connRef318->setRoutingType((ConnType)2);\n\n    ConnRef *connRef319 = new ConnRef(router, 319);\n    ConnEnd srcPt319(Point(1536.5, 1288.92), 4);\n    connRef319->setSourceEndpoint(srcPt319);\n    ConnEnd dstPt319(Point(1478.5, 1288.92), 8);\n    connRef319->setDestEndpoint(dstPt319);\n    connRef319->setRoutingType((ConnType)2);\n\n    ConnRef *connRef320 = new ConnRef(router, 320);\n    ConnEnd srcPt320(Point(678.5, 1809.92), 2);\n    connRef320->setSourceEndpoint(srcPt320);\n    ConnEnd dstPt320(Point(678.5, 1859.92), 1);\n    connRef320->setDestEndpoint(dstPt320);\n    connRef320->setRoutingType((ConnType)2);\n\n    ConnRef *connRef321 = new ConnRef(router, 321);\n    ConnEnd srcPt321(Point(1627.5, 1288.92), 4);\n    connRef321->setSourceEndpoint(srcPt321);\n    ConnEnd dstPt321(Point(1569.5, 1288.92), 8);\n    connRef321->setDestEndpoint(dstPt321);\n    connRef321->setRoutingType((ConnType)2);\n\n    ConnRef *connRef322 = new ConnRef(router, 322);\n    ConnEnd srcPt322(Point(1248.5, 1383.92), 2);\n    connRef322->setSourceEndpoint(srcPt322);\n    ConnEnd dstPt322(Point(1248.5, 1433.92), 1);\n    connRef322->setDestEndpoint(dstPt322);\n    connRef322->setRoutingType((ConnType)2);\n\n    ConnRef *connRef323 = new ConnRef(router, 323);\n    ConnEnd srcPt323(Point(1248.5, 1176.92), 2);\n    connRef323->setSourceEndpoint(srcPt323);\n    ConnEnd dstPt323(Point(1248.5, 1226.92), 1);\n    connRef323->setDestEndpoint(dstPt323);\n    connRef323->setRoutingType((ConnType)2);\n\n    ConnRef *connRef324 = new ConnRef(router, 324);\n    ConnEnd srcPt324(Point(172.5, 2069.92), 8);\n    connRef324->setSourceEndpoint(srcPt324);\n    ConnEnd dstPt324(Point(230.5, 2069.92), 4);\n    connRef324->setDestEndpoint(dstPt324);\n    connRef324->setRoutingType((ConnType)2);\n\n    ConnRef *connRef325 = new ConnRef(router, 325);\n    ConnEnd srcPt325(Point(1408.5, 777.25), 4);\n    connRef325->setSourceEndpoint(srcPt325);\n    ConnEnd dstPt325(Point(1350.5, 777.25), 8);\n    connRef325->setDestEndpoint(dstPt325);\n    connRef325->setRoutingType((ConnType)2);\n\n    ConnRef *connRef326 = new ConnRef(router, 326);\n    ConnEnd srcPt326(Point(612.5, 575.5), 1);\n    connRef326->setSourceEndpoint(srcPt326);\n    ConnEnd dstPt326(Point(612.5, 525.5), 2);\n    connRef326->setDestEndpoint(dstPt326);\n    connRef326->setRoutingType((ConnType)2);\n\n    ConnRef *connRef327 = new ConnRef(router, 327);\n    ConnEnd srcPt327(Point(513.5, 823.25), 1);\n    connRef327->setSourceEndpoint(srcPt327);\n    ConnEnd dstPt327(Point(513.5, 773.25), 2);\n    connRef327->setDestEndpoint(dstPt327);\n    connRef327->setRoutingType((ConnType)2);\n\n    ConnRef *connRef328 = new ConnRef(router, 328);\n    ConnEnd srcPt328(Point(1281.5, 2415.92), 1);\n    connRef328->setSourceEndpoint(srcPt328);\n    ConnEnd dstPt328(Point(1281.5, 2365.92), 2);\n    connRef328->setDestEndpoint(dstPt328);\n    connRef328->setRoutingType((ConnType)2);\n\n    ConnRef *connRef329 = new ConnRef(router, 329);\n    ConnEnd srcPt329(Point(251.5, 2008.92), 15);\n    connRef329->setSourceEndpoint(srcPt329);\n    ConnEnd dstPt329(Point(272.5, 2054.92), 1);\n    connRef329->setDestEndpoint(dstPt329);\n    connRef329->setRoutingType((ConnType)2);\n    std::vector<Point> checkpoints329(1);\n    checkpoints329[0] = Point(251.5, 2039.92);\n    connRef329->setRoutingCheckpoints(checkpoints329);\n\n    ConnRef *connRef330 = new ConnRef(router, 330);\n    ConnEnd srcPt330(Point(1329.5, 2008.92), 15);\n    connRef330->setSourceEndpoint(srcPt330);\n    ConnEnd dstPt330(Point(1172.5, 2041.92), 8);\n    connRef330->setDestEndpoint(dstPt330);\n    connRef330->setRoutingType((ConnType)2);\n\n    ConnRef *connRef331 = new ConnRef(router, 331);\n    ConnEnd srcPt331(Point(1329.5, 2008.92), 15);\n    connRef331->setSourceEndpoint(srcPt331);\n    ConnEnd dstPt331(Point(1157.5, 1910.92), 1);\n    connRef331->setDestEndpoint(dstPt331);\n    connRef331->setRoutingType((ConnType)2);\n\n    ConnRef *connRef332 = new ConnRef(router, 332);\n    ConnEnd srcPt332(Point(802.5, 2174.92), 15);\n    connRef332->setSourceEndpoint(srcPt332);\n    ConnEnd dstPt332(Point(850.5, 2008.92), 8);\n    connRef332->setDestEndpoint(dstPt332);\n    connRef332->setRoutingType((ConnType)2);\n\n    ConnRef *connRef333 = new ConnRef(router, 333);\n    ConnEnd srcPt333(Point(967.5, 2008.92), 15);\n    connRef333->setSourceEndpoint(srcPt333);\n    ConnEnd dstPt333(Point(850.5, 2008.92), 8);\n    connRef333->setDestEndpoint(dstPt333);\n    connRef333->setRoutingType((ConnType)2);\n\n    ConnRef *connRef334 = new ConnRef(router, 334);\n    ConnEnd srcPt334(Point(1329.5, 1714.92), 15);\n    connRef334->setSourceEndpoint(srcPt334);\n    ConnEnd dstPt334(Point(1329.5, 1761.92), 1);\n    connRef334->setDestEndpoint(dstPt334);\n    connRef334->setRoutingType((ConnType)2);\n\n    ConnRef *connRef335 = new ConnRef(router, 335);\n    ConnEnd srcPt335(Point(1329.5, 677.25), 15);\n    connRef335->setSourceEndpoint(srcPt335);\n    ConnEnd dstPt335(Point(1308.5, 762.25), 1);\n    connRef335->setDestEndpoint(dstPt335);\n    connRef335->setRoutingType((ConnType)2);\n    std::vector<Point> checkpoints335(1);\n    checkpoints335[0] = Point(1329.5, 747.25);\n    connRef335->setRoutingCheckpoints(checkpoints335);\n\n    ConnRef *connRef336 = new ConnRef(router, 336);\n    ConnEnd srcPt336(Point(286.5, 677.25), 15);\n    connRef336->setSourceEndpoint(srcPt336);\n    ConnEnd dstPt336(Point(498.5, 581.25), 4);\n    connRef336->setDestEndpoint(dstPt336);\n    connRef336->setRoutingType((ConnType)2);\n    std::vector<Point> checkpoints336(1);\n    checkpoints336[0] = Point(475.5, 677.25);\n    connRef336->setRoutingCheckpoints(checkpoints336);\n\n    ConnRef *connRef337 = new ConnRef(router, 337);\n    ConnEnd srcPt337(Point(286.5, 677.25), 15);\n    connRef337->setSourceEndpoint(srcPt337);\n    ConnEnd dstPt337(Point(498.5, 656.25), 4);\n    connRef337->setDestEndpoint(dstPt337);\n    connRef337->setRoutingType((ConnType)2);\n    std::vector<Point> checkpoints337(1);\n    checkpoints337[0] = Point(475.5, 677.25);\n    connRef337->setRoutingCheckpoints(checkpoints337);\n\n    ConnRef *connRef338 = new ConnRef(router, 338);\n    ConnEnd srcPt338(Point(286.5, 504.5), 15);\n    connRef338->setSourceEndpoint(srcPt338);\n    ConnEnd dstPt338(Point(597.5, 333.5), 4);\n    connRef338->setDestEndpoint(dstPt338);\n    connRef338->setRoutingType((ConnType)2);\n    std::vector<Point> checkpoints338(1);\n    checkpoints338[0] = Point(574.5, 504.5);\n    connRef338->setRoutingCheckpoints(checkpoints338);\n\n    ConnRef *connRef339 = new ConnRef(router, 339);\n    ConnEnd srcPt339(Point(286.5, 504.5), 15);\n    connRef339->setSourceEndpoint(srcPt339);\n    ConnEnd dstPt339(Point(597.5, 408.5), 4);\n    connRef339->setDestEndpoint(dstPt339);\n    connRef339->setRoutingType((ConnType)2);\n    std::vector<Point> checkpoints339(1);\n    checkpoints339[0] = Point(574.5, 504.5);\n    connRef339->setRoutingCheckpoints(checkpoints339);\n\n    ConnRef *connRef340 = new ConnRef(router, 340);\n    ConnEnd srcPt340(Point(1329.5, 504.5), 15);\n    connRef340->setSourceEndpoint(srcPt340);\n    ConnEnd dstPt340(Point(627.5, 600.5), 8);\n    connRef340->setDestEndpoint(dstPt340);\n    connRef340->setRoutingType((ConnType)2);\n    std::vector<Point> checkpoints340(1);\n    checkpoints340[0] = Point(650.5, 504.5);\n    connRef340->setRoutingCheckpoints(checkpoints340);\n\n    ConnRef *connRef341 = new ConnRef(router, 341);\n    ConnEnd srcPt341(Point(1329.5, 272), 15);\n    connRef341->setSourceEndpoint(srcPt341);\n    ConnEnd dstPt341(Point(916.5, 355), 8);\n    connRef341->setDestEndpoint(dstPt341);\n    connRef341->setRoutingType((ConnType)2);\n\n    ConnRef *connRef342 = new ConnRef(router, 342);\n    ConnEnd srcPt342(Point(1329.5, 272), 15);\n    connRef342->setSourceEndpoint(srcPt342);\n    ConnEnd dstPt342(Point(916.5, 239), 8);\n    connRef342->setDestEndpoint(dstPt342);\n    connRef342->setRoutingType((ConnType)2);\n\n    ConnRef *connRef343 = new ConnRef(router, 343);\n    ConnEnd srcPt343(Point(1329.5, 504.5), 15);\n    connRef343->setSourceEndpoint(srcPt343);\n    ConnEnd dstPt343(Point(1555, 720.5), 4);\n    connRef343->setDestEndpoint(dstPt343);\n    connRef343->setRoutingType((ConnType)2);\n\n    ConnRef *connRef344 = new ConnRef(router, 344);\n    ConnEnd srcPt344(Point(1329.5, 1053.92), 15);\n    connRef344->setSourceEndpoint(srcPt344);\n    ConnEnd dstPt344(Point(1555, 760.5), 4);\n    connRef344->setDestEndpoint(dstPt344);\n    connRef344->setRoutingType((ConnType)2);\n\n    ConnRef *connRef345 = new ConnRef(router, 345);\n    ConnEnd srcPt345(Point(1329.5, 1590.92), 15);\n    connRef345->setSourceEndpoint(srcPt345);\n    ConnEnd dstPt345(Point(1641, 924), 2);\n    connRef345->setDestEndpoint(dstPt345);\n    connRef345->setRoutingType((ConnType)2);\n\n    ConnRef *connRef346 = new ConnRef(router, 346);\n    ConnEnd srcPt346(Point(1329.5, 2008.92), 15);\n    connRef346->setSourceEndpoint(srcPt346);\n    ConnEnd dstPt346(Point(1681, 924), 2);\n    connRef346->setDestEndpoint(dstPt346);\n    connRef346->setRoutingType((ConnType)2);\n\n    ConnRef *connRef347 = new ConnRef(router, 347);\n    ConnEnd srcPt347(Point(1329.5, 272), 15);\n    connRef347->setSourceEndpoint(srcPt347);\n    ConnEnd dstPt347(Point(1390, 214.5), 2);\n    connRef347->setDestEndpoint(dstPt347);\n    connRef347->setRoutingType((ConnType)2);\n\n    ConnRef *connRef348 = new ConnRef(router, 348);\n    ConnEnd srcPt348(Point(251.5, 1714.92), 15);\n    connRef348->setSourceEndpoint(srcPt348);\n    ConnEnd dstPt348(Point(247.5, 1845.42), 8);\n    connRef348->setDestEndpoint(dstPt348);\n    connRef348->setRoutingType((ConnType)2);\n\n    ConnRef *connRef349 = new ConnRef(router, 349);\n    ConnEnd srcPt349(Point(251.5, 2008.92), 15);\n    connRef349->setSourceEndpoint(srcPt349);\n    ConnEnd dstPt349(Point(247.5, 1885.42), 8);\n    connRef349->setDestEndpoint(dstPt349);\n    connRef349->setRoutingType((ConnType)2);\n\n    ConnRef *connRef350 = new ConnRef(router, 350);\n    ConnEnd srcPt350(Point(1329.5, 1466.92), 15);\n    connRef350->setSourceEndpoint(srcPt350);\n    ConnEnd dstPt350(Point(862.5, 1474.42), 8);\n    connRef350->setDestEndpoint(dstPt350);\n    connRef350->setRoutingType((ConnType)2);\n\n    ConnRef *connRef351 = new ConnRef(router, 351);\n    ConnEnd srcPt351(Point(1574.5, 2008.92), 15);\n    connRef351->setSourceEndpoint(srcPt351);\n    ConnEnd dstPt351(Point(1577, 2138.92), 1);\n    connRef351->setDestEndpoint(dstPt351);\n    connRef351->setRoutingType((ConnType)2);\n#endif\n\n    router->processTransaction();\n    router->outputDiagram(\"output/finalSegmentNudging3\");\n\n    bool optimisedForConnectorType = false;\n    int crossings = router->existsCrossings(optimisedForConnectorType);\n\n    delete router;\n    return (crossings > 0) ? 1 : 0;\n};\n"
  },
  {
    "path": "cola/libavoid/tests/forwardFlowingConnectors01.cpp",
    "content": "#include \"libavoid/libavoid.h\"\r\nusing namespace Avoid;\r\nint main(void) {\r\n    Router *router = new Router(OrthogonalRouting);\r\n    router->setRoutingParameter((RoutingParameter)0, 10);\r\n    router->setRoutingParameter((RoutingParameter)1, 0);\r\n    router->setRoutingParameter((RoutingParameter)2, 1000);\r\n    router->setRoutingParameter((RoutingParameter)3, 4000);\r\n    router->setRoutingParameter((RoutingParameter)4, 0);\r\n    router->setRoutingParameter((RoutingParameter)5, 100);\r\n    router->setRoutingParameter((RoutingParameter)6, 1);\r\n    router->setRoutingParameter((RoutingParameter)7, 10);\r\n    router->setRoutingParameter(reverseDirectionPenalty, 500);\r\n    router->setRoutingOption((RoutingOption)0, false);\r\n    router->setRoutingOption((RoutingOption)1, true);\r\n    router->setRoutingOption((RoutingOption)2, false);\r\n    router->setRoutingOption((RoutingOption)3, false);\r\n    router->setRoutingOption((RoutingOption)4, true);\r\n    router->setRoutingOption((RoutingOption)5, true);\r\n    Polygon polygon;\r\n    ConnRef *connRef = nullptr;\r\n    ConnEnd srcPt;\r\n    ConnEnd dstPt;\r\n    PolyLine newRoute;\r\n    // shapeRef1\r\n    polygon = Polygon(4);\r\n    polygon.ps[0] = Point(0, 0);\r\n    polygon.ps[1] = Point(0, 0);\r\n    polygon.ps[2] = Point(0, 0);\r\n    polygon.ps[3] = Point(0, 0);\r\n    new ShapeRef(router, polygon, 1);\r\n\r\n    // shapeRef2\r\n    polygon = Polygon(4);\r\n    polygon.ps[0] = Point(0, 0);\r\n    polygon.ps[1] = Point(0, 0);\r\n    polygon.ps[2] = Point(0, 0);\r\n    polygon.ps[3] = Point(0, 0);\r\n    new ShapeRef(router, polygon, 2);\r\n\r\n    // shapeRef3\r\n    polygon = Polygon(4);\r\n    polygon.ps[0] = Point(0, 0);\r\n    polygon.ps[1] = Point(0, 0);\r\n    polygon.ps[2] = Point(0, 0);\r\n    polygon.ps[3] = Point(0, 0);\r\n    new ShapeRef(router, polygon, 3);\r\n\r\n    // shapeRef4\r\n    polygon = Polygon(4);\r\n    polygon.ps[0] = Point(0, 0);\r\n    polygon.ps[1] = Point(0, 0);\r\n    polygon.ps[2] = Point(0, 0);\r\n    polygon.ps[3] = Point(0, 0);\r\n    new ShapeRef(router, polygon, 4);\r\n\r\n    // shapeRef5\r\n    polygon = Polygon(4);\r\n    polygon.ps[0] = Point(501, 345);\r\n    polygon.ps[1] = Point(501, 404);\r\n    polygon.ps[2] = Point(421, 404);\r\n    polygon.ps[3] = Point(421, 345);\r\n    ShapeRef *shapeRef5 = new ShapeRef(router, polygon, 5);\r\n    new ShapeConnectionPin(shapeRef5, 5, 1, 0.652542, true, 0, (ConnDirFlags) 8);\r\n    new ShapeConnectionPin(shapeRef5, 6, 0, 0.79096, true, 0, (ConnDirFlags) 4);\r\n    new ShapeConnectionPin(shapeRef5, 7, 0, 0.514124, true, 0, (ConnDirFlags) 4);\r\n\r\n    // shapeRef6\r\n    polygon = Polygon(4);\r\n    polygon.ps[0] = Point(94, 251.5);\r\n    polygon.ps[1] = Point(94, 315.5);\r\n    polygon.ps[2] = Point(12, 315.5);\r\n    polygon.ps[3] = Point(12, 251.5);\r\n    ShapeRef *shapeRef6 = new ShapeRef(router, polygon, 6);\r\n    new ShapeConnectionPin(shapeRef6, 8, 1, 0.640625, true, 0, (ConnDirFlags) 8);\r\n    new ShapeConnectionPin(shapeRef6, 9, 0, 0.640625, true, 0, (ConnDirFlags) 4);\r\n\r\n    // shapeRef7\r\n    polygon = Polygon(4);\r\n    polygon.ps[0] = Point(634.366, 262);\r\n    polygon.ps[1] = Point(634.366, 305);\r\n    polygon.ps[2] = Point(416.366, 305);\r\n    polygon.ps[3] = Point(416.366, 262);\r\n    ShapeRef *shapeRef7 = new ShapeRef(router, polygon, 7);\r\n    new ShapeConnectionPin(shapeRef7, 10, 1, 0.709302, true, 0, (ConnDirFlags) 8);\r\n    new ShapeConnectionPin(shapeRef7, 11, 0, 0.709302, true, 0, (ConnDirFlags) 4);\r\n\r\n    // shapeRef8\r\n    polygon = Polygon(4);\r\n    polygon.ps[0] = Point(324, 147.167);\r\n    polygon.ps[1] = Point(324, 206.167);\r\n    polygon.ps[2] = Point(236, 206.167);\r\n    polygon.ps[3] = Point(236, 147.167);\r\n    ShapeRef *shapeRef8 = new ShapeRef(router, polygon, 8);\r\n    new ShapeConnectionPin(shapeRef8, 12, 1, 0.652542, true, 0, (ConnDirFlags) 8);\r\n    new ShapeConnectionPin(shapeRef8, 13, 0, 0.79096, true, 0, (ConnDirFlags) 4);\r\n    new ShapeConnectionPin(shapeRef8, 14, 0, 0.514124, true, 0, (ConnDirFlags) 4);\r\n\r\n    // shapeRef9\r\n    polygon = Polygon(4);\r\n    polygon.ps[0] = Point(816, 353.167);\r\n    polygon.ps[1] = Point(816, 412.167);\r\n    polygon.ps[2] = Point(735, 412.167);\r\n    polygon.ps[3] = Point(735, 353.167);\r\n    ShapeRef *shapeRef9 = new ShapeRef(router, polygon, 9);\r\n    new ShapeConnectionPin(shapeRef9, 15, 1, 0.514124, true, 0, (ConnDirFlags) 8);\r\n    new ShapeConnectionPin(shapeRef9, 16, 1, 0.79096, true, 0, (ConnDirFlags) 8);\r\n    new ShapeConnectionPin(shapeRef9, 17, 0, 0.79096, true, 0, (ConnDirFlags) 4);\r\n    new ShapeConnectionPin(shapeRef9, 18, 0, 0.514124, true, 0, (ConnDirFlags) 4);\r\n\r\n    // shapeRef10\r\n    polygon = Polygon(4);\r\n    polygon.ps[0] = Point(981, 263.833);\r\n    polygon.ps[1] = Point(981, 321.833);\r\n    polygon.ps[2] = Point(828, 321.833);\r\n    polygon.ps[3] = Point(828, 263.833);\r\n    ShapeRef *shapeRef10 = new ShapeRef(router, polygon, 10);\r\n    new ShapeConnectionPin(shapeRef10, 19, 0, 0.655172, true, 0, (ConnDirFlags) 4);\r\n\r\n    // shapeRef11\r\n    polygon = Polygon(4);\r\n    polygon.ps[0] = Point(1011.49, 361.833);\r\n    polygon.ps[1] = Point(1011.49, 419.833);\r\n    polygon.ps[2] = Point(834.489, 419.833);\r\n    polygon.ps[3] = Point(834.489, 361.833);\r\n    ShapeRef *shapeRef11 = new ShapeRef(router, polygon, 11);\r\n    new ShapeConnectionPin(shapeRef11, 20, 0, 0.655172, true, 0, (ConnDirFlags) 4);\r\n\r\n    // shapeRef12\r\n    polygon = Polygon(4);\r\n    polygon.ps[0] = Point(511, 155.333);\r\n    polygon.ps[1] = Point(511, 214.333);\r\n    polygon.ps[2] = Point(422, 214.333);\r\n    polygon.ps[3] = Point(422, 155.333);\r\n    ShapeRef *shapeRef12 = new ShapeRef(router, polygon, 12);\r\n    new ShapeConnectionPin(shapeRef12, 21, 1, 0.514124, true, 0, (ConnDirFlags) 8);\r\n    new ShapeConnectionPin(shapeRef12, 22, 1, 0.79096, true, 0, (ConnDirFlags) 8);\r\n    new ShapeConnectionPin(shapeRef12, 23, 0, 0.79096, true, 0, (ConnDirFlags) 4);\r\n    new ShapeConnectionPin(shapeRef12, 24, 0, 0.514124, true, 0, (ConnDirFlags) 4);\r\n\r\n    // shapeRef13\r\n    polygon = Polygon(4);\r\n    polygon.ps[0] = Point(690, 66);\r\n    polygon.ps[1] = Point(690, 124);\r\n    polygon.ps[2] = Point(523, 124);\r\n    polygon.ps[3] = Point(523, 66);\r\n    ShapeRef *shapeRef13 = new ShapeRef(router, polygon, 13);\r\n    new ShapeConnectionPin(shapeRef13, 25, 0, 0.655172, true, 0, (ConnDirFlags) 4);\r\n\r\n    // shapeRef14\r\n    polygon = Polygon(4);\r\n    polygon.ps[0] = Point(720.212, 164);\r\n    polygon.ps[1] = Point(720.212, 222);\r\n    polygon.ps[2] = Point(529.212, 222);\r\n    polygon.ps[3] = Point(529.212, 164);\r\n    ShapeRef *shapeRef14 = new ShapeRef(router, polygon, 14);\r\n    new ShapeConnectionPin(shapeRef14, 26, 0, 0.655172, true, 0, (ConnDirFlags) 4);\r\n\r\n    // shapeRef15\r\n    polygon = Polygon(4);\r\n    polygon.ps[0] = Point(217, 336.833);\r\n    polygon.ps[1] = Point(217, 395.833);\r\n    polygon.ps[2] = Point(98, 395.833);\r\n    polygon.ps[3] = Point(98, 336.833);\r\n    ShapeRef *shapeRef15 = new ShapeRef(router, polygon, 15);\r\n    new ShapeConnectionPin(shapeRef15, 27, 1, 0.652542, true, 0, (ConnDirFlags) 8);\r\n    new ShapeConnectionPin(shapeRef15, 28, 0, 0.652542, true, 0, (ConnDirFlags) 4);\r\n\r\n    // shapeRef16\r\n    polygon = Polygon(4);\r\n    polygon.ps[0] = Point(413, 147.167);\r\n    polygon.ps[1] = Point(413, 206.167);\r\n    polygon.ps[2] = Point(336, 206.167);\r\n    polygon.ps[3] = Point(336, 147.167);\r\n    ShapeRef *shapeRef16 = new ShapeRef(router, polygon, 16);\r\n    new ShapeConnectionPin(shapeRef16, 29, 1, 0.652542, true, 0, (ConnDirFlags) 8);\r\n    new ShapeConnectionPin(shapeRef16, 30, 0, 0.652542, true, 0, (ConnDirFlags) 4);\r\n\r\n    // shapeRef17\r\n    polygon = Polygon(4);\r\n    polygon.ps[0] = Point(306, 336.833);\r\n    polygon.ps[1] = Point(306, 395.833);\r\n    polygon.ps[2] = Point(229, 395.833);\r\n    polygon.ps[3] = Point(229, 336.833);\r\n    ShapeRef *shapeRef17 = new ShapeRef(router, polygon, 17);\r\n    new ShapeConnectionPin(shapeRef17, 31, 1, 0.652542, true, 0, (ConnDirFlags) 8);\r\n    new ShapeConnectionPin(shapeRef17, 32, 0, 0.652542, true, 0, (ConnDirFlags) 4);\r\n\r\n    // shapeRef18\r\n    polygon = Polygon(4);\r\n    polygon.ps[0] = Point(175, 139);\r\n    polygon.ps[1] = Point(175, 198);\r\n    polygon.ps[2] = Point(98, 198);\r\n    polygon.ps[3] = Point(98, 139);\r\n    ShapeRef *shapeRef18 = new ShapeRef(router, polygon, 18);\r\n    new ShapeConnectionPin(shapeRef18, 33, 1, 0.652542, true, 0, (ConnDirFlags) 8);\r\n    new ShapeConnectionPin(shapeRef18, 34, 0, 0.652542, true, 0, (ConnDirFlags) 4);\r\n\r\n    // shapeRef19\r\n    polygon = Polygon(4);\r\n    polygon.ps[0] = Point(409, 399.333);\r\n    polygon.ps[1] = Point(409, 458.333);\r\n    polygon.ps[2] = Point(298, 458.333);\r\n    polygon.ps[3] = Point(298, 399.333);\r\n    ShapeRef *shapeRef19 = new ShapeRef(router, polygon, 19);\r\n    new ShapeConnectionPin(shapeRef19, 35, 1, 0.652542, true, 0, (ConnDirFlags) 8);\r\n\r\n    // shapeRef20\r\n    polygon = Polygon(4);\r\n    polygon.ps[0] = Point(224, 40);\r\n    polygon.ps[1] = Point(224, 99);\r\n    polygon.ps[2] = Point(106, 99);\r\n    polygon.ps[3] = Point(106, 40);\r\n    ShapeRef *shapeRef20 = new ShapeRef(router, polygon, 20);\r\n    new ShapeConnectionPin(shapeRef20, 36, 1, 0.652542, true, 0, (ConnDirFlags) 8);\r\n\r\n    // shapeRef21\r\n    polygon = Polygon(4);\r\n    polygon.ps[0] = Point(604, 345);\r\n    polygon.ps[1] = Point(604, 404);\r\n    polygon.ps[2] = Point(513, 404);\r\n    polygon.ps[3] = Point(513, 345);\r\n    ShapeRef *shapeRef21 = new ShapeRef(router, polygon, 21);\r\n    new ShapeConnectionPin(shapeRef21, 37, 1, 0.652542, true, 0, (ConnDirFlags) 8);\r\n    new ShapeConnectionPin(shapeRef21, 38, 0, 0.652542, true, 0, (ConnDirFlags) 4);\r\n\r\n    // connRef1\r\n    connRef = new ConnRef(router, 1);\r\n    srcPt = ConnEnd(shapeRef5, 5);\r\n    connRef->setSourceEndpoint(srcPt);\r\n    dstPt = ConnEnd(shapeRef21, 38);\r\n    connRef->setDestEndpoint(dstPt);\r\n    connRef->setRoutingType((ConnType)2);\r\n\r\n    // connRef2\r\n    connRef = new ConnRef(router, 2);\r\n    srcPt = ConnEnd(shapeRef6, 8);\r\n    connRef->setSourceEndpoint(srcPt);\r\n    dstPt = ConnEnd(shapeRef18, 34);\r\n    connRef->setDestEndpoint(dstPt);\r\n    connRef->setRoutingType((ConnType)2);\r\n\r\n    // connRef3\r\n    connRef = new ConnRef(router, 3);\r\n    srcPt = ConnEnd(shapeRef6, 8);\r\n    connRef->setSourceEndpoint(srcPt);\r\n    dstPt = ConnEnd(shapeRef15, 28);\r\n    connRef->setDestEndpoint(dstPt);\r\n    connRef->setRoutingType((ConnType)2);\r\n\r\n    // connRef4\r\n    connRef = new ConnRef(router, 4);\r\n    srcPt = ConnEnd(shapeRef6, 8);\r\n    connRef->setSourceEndpoint(srcPt);\r\n    dstPt = ConnEnd(shapeRef12, 23);\r\n    connRef->setDestEndpoint(dstPt);\r\n    connRef->setRoutingType((ConnType)2);\r\n\r\n    // connRef5\r\n    connRef = new ConnRef(router, 5);\r\n    srcPt = ConnEnd(shapeRef6, 8);\r\n    connRef->setSourceEndpoint(srcPt);\r\n    dstPt = ConnEnd(shapeRef7, 11);\r\n    connRef->setDestEndpoint(dstPt);\r\n    connRef->setRoutingType((ConnType)2);\r\n\r\n    // connRef6\r\n    connRef = new ConnRef(router, 6);\r\n    srcPt = ConnEnd(shapeRef7, 10);\r\n    connRef->setSourceEndpoint(srcPt);\r\n    dstPt = ConnEnd(shapeRef9, 17);\r\n    connRef->setDestEndpoint(dstPt);\r\n    connRef->setRoutingType((ConnType)2);\r\n    ConnRef *connector6 = connRef;\r\n\r\n    // connRef7\r\n    connRef = new ConnRef(router, 7);\r\n    srcPt = ConnEnd(shapeRef8, 12);\r\n    connRef->setSourceEndpoint(srcPt);\r\n    dstPt = ConnEnd(shapeRef16, 30);\r\n    connRef->setDestEndpoint(dstPt);\r\n    connRef->setRoutingType((ConnType)2);\r\n\r\n    // connRef8\r\n    connRef = new ConnRef(router, 8);\r\n    srcPt = ConnEnd(shapeRef9, 15);\r\n    connRef->setSourceEndpoint(srcPt);\r\n    dstPt = ConnEnd(shapeRef10, 19);\r\n    connRef->setDestEndpoint(dstPt);\r\n    connRef->setRoutingType((ConnType)2);\r\n\r\n    // connRef9\r\n    connRef = new ConnRef(router, 9);\r\n    srcPt = ConnEnd(shapeRef9, 16);\r\n    connRef->setSourceEndpoint(srcPt);\r\n    dstPt = ConnEnd(shapeRef11, 20);\r\n    connRef->setDestEndpoint(dstPt);\r\n    connRef->setRoutingType((ConnType)2);\r\n\r\n    // connRef10\r\n    connRef = new ConnRef(router, 10);\r\n    srcPt = ConnEnd(shapeRef12, 21);\r\n    connRef->setSourceEndpoint(srcPt);\r\n    dstPt = ConnEnd(shapeRef13, 25);\r\n    connRef->setDestEndpoint(dstPt);\r\n    connRef->setRoutingType((ConnType)2);\r\n\r\n    // connRef11\r\n    connRef = new ConnRef(router, 11);\r\n    srcPt = ConnEnd(shapeRef12, 22);\r\n    connRef->setSourceEndpoint(srcPt);\r\n    dstPt = ConnEnd(shapeRef14, 26);\r\n    connRef->setDestEndpoint(dstPt);\r\n    connRef->setRoutingType((ConnType)2);\r\n\r\n    // connRef12\r\n    connRef = new ConnRef(router, 12);\r\n    srcPt = ConnEnd(shapeRef15, 27);\r\n    connRef->setSourceEndpoint(srcPt);\r\n    dstPt = ConnEnd(shapeRef17, 32);\r\n    connRef->setDestEndpoint(dstPt);\r\n    connRef->setRoutingType((ConnType)2);\r\n\r\n    // connRef13\r\n    connRef = new ConnRef(router, 13);\r\n    srcPt = ConnEnd(shapeRef16, 29);\r\n    connRef->setSourceEndpoint(srcPt);\r\n    dstPt = ConnEnd(shapeRef12, 24);\r\n    connRef->setDestEndpoint(dstPt);\r\n    connRef->setRoutingType((ConnType)2);\r\n\r\n    // connRef14\r\n    connRef = new ConnRef(router, 14);\r\n    srcPt = ConnEnd(shapeRef17, 31);\r\n    connRef->setSourceEndpoint(srcPt);\r\n    dstPt = ConnEnd(shapeRef5, 7);\r\n    connRef->setDestEndpoint(dstPt);\r\n    connRef->setRoutingType((ConnType)2);\r\n\r\n    // connRef15\r\n    connRef = new ConnRef(router, 15);\r\n    srcPt = ConnEnd(shapeRef18, 33);\r\n    connRef->setSourceEndpoint(srcPt);\r\n    dstPt = ConnEnd(shapeRef8, 14);\r\n    connRef->setDestEndpoint(dstPt);\r\n    connRef->setRoutingType((ConnType)2);\r\n\r\n    // connRef16\r\n    connRef = new ConnRef(router, 16);\r\n    srcPt = ConnEnd(shapeRef19, 35);\r\n    connRef->setSourceEndpoint(srcPt);\r\n    dstPt = ConnEnd(shapeRef5, 7);\r\n    connRef->setDestEndpoint(dstPt);\r\n    connRef->setRoutingType((ConnType)2);\r\n\r\n    // connRef17\r\n    connRef = new ConnRef(router, 17);\r\n    srcPt = ConnEnd(shapeRef20, 36);\r\n    connRef->setSourceEndpoint(srcPt);\r\n    dstPt = ConnEnd(shapeRef8, 14);\r\n    connRef->setDestEndpoint(dstPt);\r\n    connRef->setRoutingType((ConnType)2);\r\n\r\n    // connRef18\r\n    connRef = new ConnRef(router, 18);\r\n    srcPt = ConnEnd(shapeRef21, 37);\r\n    connRef->setSourceEndpoint(srcPt);\r\n    dstPt = ConnEnd(shapeRef9, 18);\r\n    connRef->setDestEndpoint(dstPt);\r\n    connRef->setRoutingType((ConnType)2);\r\n\r\n    router->processTransaction();\r\n    // Test that connector 6 has three segments and doesnt loop right\r\n    // around the shapes on the right due to the crossing penalty.\r\n    bool suceeds = (connector6->displayRoute().size() == 4);\r\n\r\n    //router->outputDiagram(\"output/forwardFlowingConnectors01\");\r\n    delete router;\r\n    return (suceeds ? 0 : 1);\r\n};\r\n"
  },
  {
    "path": "cola/libavoid/tests/freeFloatingDirection01.cpp",
    "content": "#include \"libavoid/libavoid.h\"\nusing namespace Avoid;\nint main(void) {\n    Router *router = new Router(\n            PolyLineRouting | OrthogonalRouting);\n    router->setRoutingPenalty((PenaltyType)0, 50);\n    router->setRoutingPenalty((PenaltyType)1, 0);\n    router->setRoutingPenalty((PenaltyType)2, 0);\n    router->setRoutingPenalty((PenaltyType)3, 4000);\n    router->setRoutingPenalty((PenaltyType)4, 0);\n\n    Polygon poly2(4);\n    poly2.ps[0] = Point(348, 1286.05);\n    poly2.ps[1] = Point(348, 1304.05);\n    poly2.ps[2] = Point(330, 1304.05);\n    poly2.ps[3] = Point(330, 1286.05);\n    new ShapeRef(router, poly2, 2);\n    \n    Polygon poly153(4);\n    poly153.ps[0] = Point(495, 1032.05);\n    poly153.ps[1] = Point(495, 1070.05);\n    poly153.ps[2] = Point(440, 1070.05);\n    poly153.ps[3] = Point(440, 1032.05);\n    new ShapeRef(router, poly153, 153);\n    \n    Polygon poly154(4);\n    poly154.ps[0] = Point(613, 959.545);\n    poly154.ps[1] = Point(613, 997.545);\n    poly154.ps[2] = Point(559, 997.545);\n    poly154.ps[3] = Point(559, 959.545);\n    new ShapeRef(router, poly154, 154);\n    \n    Polygon poly155(4);\n    poly155.ps[0] = Point(596, 1134.05);\n    poly155.ps[1] = Point(596, 1172.05);\n    poly155.ps[2] = Point(542, 1172.05);\n    poly155.ps[3] = Point(542, 1134.05);\n    new ShapeRef(router, poly155, 155);\n    \n    Polygon poly156(4);\n    poly156.ps[0] = Point(762, 377);\n    poly156.ps[1] = Point(762, 415);\n    poly156.ps[2] = Point(708, 415);\n    poly156.ps[3] = Point(708, 377);\n    new ShapeRef(router, poly156, 156);\n    \n    Polygon poly157(4);\n    poly157.ps[0] = Point(888, 377);\n    poly157.ps[1] = Point(888, 415);\n    poly157.ps[2] = Point(834, 415);\n    poly157.ps[3] = Point(834, 377);\n    new ShapeRef(router, poly157, 157);\n    \n    Polygon poly158(4);\n    poly158.ps[0] = Point(545, 515.545);\n    poly158.ps[1] = Point(545, 553.545);\n    poly158.ps[2] = Point(491, 553.545);\n    poly158.ps[3] = Point(491, 515.545);\n    new ShapeRef(router, poly158, 158);\n    \n    Polygon poly159(4);\n    poly159.ps[0] = Point(819.5, 753.545);\n    poly159.ps[1] = Point(819.5, 791.545);\n    poly159.ps[2] = Point(765.5, 791.545);\n    poly159.ps[3] = Point(765.5, 753.545);\n    new ShapeRef(router, poly159, 159);\n    \n    Polygon poly160(4);\n    poly160.ps[0] = Point(824, 959.545);\n    poly160.ps[1] = Point(824, 997.545);\n    poly160.ps[2] = Point(770, 997.545);\n    poly160.ps[3] = Point(770, 959.545);\n    new ShapeRef(router, poly160, 160);\n    \n    Polygon poly161(4);\n    poly161.ps[0] = Point(868, 1104.55);\n    poly161.ps[1] = Point(868, 1142.55);\n    poly161.ps[2] = Point(814, 1142.55);\n    poly161.ps[3] = Point(814, 1104.55);\n    new ShapeRef(router, poly161, 161);\n    \n    Polygon poly162(4);\n    poly162.ps[0] = Point(819.5, 617.545);\n    poly162.ps[1] = Point(819.5, 655.545);\n    poly162.ps[2] = Point(765.5, 655.545);\n    poly162.ps[3] = Point(765.5, 617.545);\n    new ShapeRef(router, poly162, 162);\n    \n    Polygon poly163(4);\n    poly163.ps[0] = Point(826, 1156.55);\n    poly163.ps[1] = Point(826, 1194.55);\n    poly163.ps[2] = Point(772, 1194.55);\n    poly163.ps[3] = Point(772, 1156.55);\n    new ShapeRef(router, poly163, 163);\n    \n    Polygon poly164(4);\n    poly164.ps[0] = Point(897, 1391.71);\n    poly164.ps[1] = Point(897, 1429.71);\n    poly164.ps[2] = Point(843, 1429.71);\n    poly164.ps[3] = Point(843, 1391.71);\n    new ShapeRef(router, poly164, 164);\n    \n    Polygon poly165(4);\n    poly165.ps[0] = Point(781, 1524.71);\n    poly165.ps[1] = Point(781, 1562.71);\n    poly165.ps[2] = Point(727, 1562.71);\n    poly165.ps[3] = Point(727, 1524.71);\n    new ShapeRef(router, poly165, 165);\n    \n    Polygon poly166(4);\n    poly166.ps[0] = Point(853, 1657.71);\n    poly166.ps[1] = Point(853, 1695.71);\n    poly166.ps[2] = Point(799, 1695.71);\n    poly166.ps[3] = Point(799, 1657.71);\n    new ShapeRef(router, poly166, 166);\n    \n    Polygon poly167(4);\n    poly167.ps[0] = Point(1014, 241);\n    poly167.ps[1] = Point(1014, 279);\n    poly167.ps[2] = Point(960, 279);\n    poly167.ps[3] = Point(960, 241);\n    new ShapeRef(router, poly167, 167);\n    \n    Polygon poly168(4);\n    poly168.ps[0] = Point(1014, 325);\n    poly168.ps[1] = Point(1014, 363);\n    poly168.ps[2] = Point(960, 363);\n    poly168.ps[3] = Point(960, 325);\n    new ShapeRef(router, poly168, 168);\n    \n    Polygon poly169(4);\n    poly169.ps[0] = Point(1014, 660.045);\n    poly169.ps[1] = Point(1014, 698.045);\n    poly169.ps[2] = Point(960, 698.045);\n    poly169.ps[3] = Point(960, 660.045);\n    new ShapeRef(router, poly169, 169);\n    \n    Polygon poly170(4);\n    poly170.ps[0] = Point(1014, 913.545);\n    poly170.ps[1] = Point(1014, 951.545);\n    poly170.ps[2] = Point(960, 951.545);\n    poly170.ps[3] = Point(960, 913.545);\n    new ShapeRef(router, poly170, 170);\n    \n    Polygon poly171(4);\n    poly171.ps[0] = Point(1012, 46);\n    poly171.ps[1] = Point(1012, 84);\n    poly171.ps[2] = Point(958, 84);\n    poly171.ps[3] = Point(958, 46);\n    new ShapeRef(router, poly171, 171);\n    \n    Polygon poly172(4);\n    poly172.ps[0] = Point(1017, 377);\n    poly172.ps[1] = Point(1017, 415);\n    poly172.ps[2] = Point(963, 415);\n    poly172.ps[3] = Point(963, 377);\n    new ShapeRef(router, poly172, 172);\n    \n    Polygon poly173(4);\n    poly173.ps[0] = Point(1199, 377);\n    poly173.ps[1] = Point(1199, 415);\n    poly173.ps[2] = Point(1145, 415);\n    poly173.ps[3] = Point(1145, 377);\n    new ShapeRef(router, poly173, 173);\n    \n    Polygon poly174(4);\n    poly174.ps[0] = Point(1179, 691.379);\n    poly174.ps[1] = Point(1179, 729.379);\n    poly174.ps[2] = Point(1125, 729.379);\n    poly174.ps[3] = Point(1125, 691.379);\n    new ShapeRef(router, poly174, 174);\n    \n    Polygon poly130(4);\n    poly130.ps[0] = Point(119, 565.545);\n    poly130.ps[1] = Point(119, 603.545);\n    poly130.ps[2] = Point(81, 603.545);\n    poly130.ps[3] = Point(81, 565.545);\n    new ShapeRef(router, poly130, 130);\n    \n    Polygon poly131(4);\n    poly131.ps[0] = Point(239, 565.545);\n    poly131.ps[1] = Point(239, 603.545);\n    poly131.ps[2] = Point(201, 603.545);\n    poly131.ps[3] = Point(201, 565.545);\n    new ShapeRef(router, poly131, 131);\n    \n    Polygon poly132(4);\n    poly132.ps[0] = Point(1517.53, 1758.71);\n    poly132.ps[1] = Point(1517.53, 1796.71);\n    poly132.ps[2] = Point(1479.53, 1796.71);\n    poly132.ps[3] = Point(1479.53, 1758.71);\n    new ShapeRef(router, poly132, 132);\n    \n    Polygon poly133(4);\n    poly133.ps[0] = Point(1627.2, 1758.71);\n    poly133.ps[1] = Point(1627.2, 1796.71);\n    poly133.ps[2] = Point(1589.2, 1796.71);\n    poly133.ps[3] = Point(1589.2, 1758.71);\n    new ShapeRef(router, poly133, 133);\n    \n    Polygon poly134(4);\n    poly134.ps[0] = Point(1364, 1758.71);\n    poly134.ps[1] = Point(1364, 1796.71);\n    poly134.ps[2] = Point(1326, 1796.71);\n    poly134.ps[3] = Point(1326, 1758.71);\n    new ShapeRef(router, poly134, 134);\n    \n    Polygon poly135(4);\n    poly135.ps[0] = Point(1238, 1758.71);\n    poly135.ps[1] = Point(1238, 1796.71);\n    poly135.ps[2] = Point(1200, 1796.71);\n    poly135.ps[3] = Point(1200, 1758.71);\n    new ShapeRef(router, poly135, 135);\n    \n    Polygon poly136(4);\n    poly136.ps[0] = Point(1153, 1758.71);\n    poly136.ps[1] = Point(1153, 1796.71);\n    poly136.ps[2] = Point(1115, 1796.71);\n    poly136.ps[3] = Point(1115, 1758.71);\n    new ShapeRef(router, poly136, 136);\n    \n    Polygon poly137(4);\n    poly137.ps[0] = Point(1563.49, 1033.05);\n    poly137.ps[1] = Point(1563.49, 1071.05);\n    poly137.ps[2] = Point(1525.49, 1071.05);\n    poly137.ps[3] = Point(1525.49, 1033.05);\n    new ShapeRef(router, poly137, 137);\n    \n    Polygon poly138(4);\n    poly138.ps[0] = Point(1563.49, 1635.71);\n    poly138.ps[1] = Point(1563.49, 1673.71);\n    poly138.ps[2] = Point(1525.49, 1673.71);\n    poly138.ps[3] = Point(1525.49, 1635.71);\n    new ShapeRef(router, poly138, 138);\n    \n    Polygon poly139(4);\n    poly139.ps[0] = Point(648, 565.545);\n    poly139.ps[1] = Point(648, 603.545);\n    poly139.ps[2] = Point(610, 603.545);\n    poly139.ps[3] = Point(610, 565.545);\n    new ShapeRef(router, poly139, 139);\n    \n    Polygon poly140(4);\n    poly140.ps[0] = Point(665, 1208.55);\n    poly140.ps[1] = Point(665, 1246.55);\n    poly140.ps[2] = Point(627, 1246.55);\n    poly140.ps[3] = Point(627, 1208.55);\n    new ShapeRef(router, poly140, 140);\n    \n    Polygon poly141(4);\n    poly141.ps[0] = Point(777, 1328.05);\n    poly141.ps[1] = Point(777, 1386.05);\n    poly141.ps[2] = Point(466, 1386.05);\n    poly141.ps[3] = Point(466, 1328.05);\n    new ShapeRef(router, poly141, 141);\n    \n    Polygon poly142(4);\n    poly142.ps[0] = Point(892, 305);\n    poly142.ps[1] = Point(892, 363);\n    poly142.ps[2] = Point(581, 363);\n    poly142.ps[3] = Point(581, 305);\n    new ShapeRef(router, poly142, 142);\n    \n    Polygon poly143(4);\n    poly143.ps[0] = Point(366, 1226.05);\n    poly143.ps[1] = Point(366, 1264.05);\n    poly143.ps[2] = Point(312, 1264.05);\n    poly143.ps[3] = Point(312, 1226.05);\n    new ShapeRef(router, poly143, 143);\n    \n    Polygon poly144(4);\n    poly144.ps[0] = Point(366, 1134.05);\n    poly144.ps[1] = Point(366, 1172.05);\n    poly144.ps[2] = Point(312, 1172.05);\n    poly144.ps[3] = Point(312, 1134.05);\n    new ShapeRef(router, poly144, 144);\n    \n    Polygon poly145(4);\n    poly145.ps[0] = Point(100, 1130.05);\n    poly145.ps[1] = Point(100, 1168.05);\n    poly145.ps[2] = Point(46, 1168.05);\n    poly145.ps[3] = Point(46, 1130.05);\n    new ShapeRef(router, poly145, 145);\n    \n    Polygon poly146(4);\n    poly146.ps[0] = Point(1497.2, 669.545);\n    poly146.ps[1] = Point(1497.2, 707.545);\n    poly146.ps[2] = Point(1443.2, 707.545);\n    poly146.ps[3] = Point(1443.2, 669.545);\n    new ShapeRef(router, poly146, 146);\n    \n    Polygon poly147(4);\n    poly147.ps[0] = Point(545, 377);\n    poly147.ps[1] = Point(545, 415);\n    poly147.ps[2] = Point(491, 415);\n    poly147.ps[3] = Point(491, 377);\n    new ShapeRef(router, poly147, 147);\n    \n    Polygon poly148(4);\n    poly148.ps[0] = Point(361.2, 617.545);\n    poly148.ps[1] = Point(361.2, 655.545);\n    poly148.ps[2] = Point(307.2, 655.545);\n    poly148.ps[3] = Point(307.2, 617.545);\n    new ShapeRef(router, poly148, 148);\n    \n    Polygon poly149(4);\n    poly149.ps[0] = Point(218, 1080.05);\n    poly149.ps[1] = Point(218, 1118.05);\n    poly149.ps[2] = Point(164, 1118.05);\n    poly149.ps[3] = Point(164, 1080.05);\n    new ShapeRef(router, poly149, 149);\n    \n    Polygon poly150(4);\n    poly150.ps[0] = Point(423.2, 751.545);\n    poly150.ps[1] = Point(423.2, 789.545);\n    poly150.ps[2] = Point(369.2, 789.545);\n    poly150.ps[3] = Point(369.2, 751.545);\n    new ShapeRef(router, poly150, 150);\n    \n    Polygon poly151(4);\n    poly151.ps[0] = Point(423.2, 803.545);\n    poly151.ps[1] = Point(423.2, 841.545);\n    poly151.ps[2] = Point(369.2, 841.545);\n    poly151.ps[3] = Point(369.2, 803.545);\n    new ShapeRef(router, poly151, 151);\n    \n    Polygon poly152(4);\n    poly152.ps[0] = Point(423.2, 855.545);\n    poly152.ps[1] = Point(423.2, 893.545);\n    poly152.ps[2] = Point(369.2, 893.545);\n    poly152.ps[3] = Point(369.2, 855.545);\n    new ShapeRef(router, poly152, 152);\n    \n    Polygon poly3(4);\n    poly3.ps[0] = Point(348, 1194.05);\n    poly3.ps[1] = Point(348, 1212.05);\n    poly3.ps[2] = Point(330, 1212.05);\n    poly3.ps[3] = Point(330, 1194.05);\n    new ShapeRef(router, poly3, 3);\n    \n    Polygon poly198(4);\n    poly198.ps[0] = Point(1291, 1134.05);\n    poly198.ps[1] = Point(1291, 1172.05);\n    poly198.ps[2] = Point(1237, 1172.05);\n    poly198.ps[3] = Point(1237, 1134.05);\n    new ShapeRef(router, poly198, 198);\n    \n    Polygon poly199(4);\n    poly199.ps[0] = Point(1700.2, 1287.71);\n    poly199.ps[1] = Point(1700.2, 1325.71);\n    poly199.ps[2] = Point(1646.2, 1325.71);\n    poly199.ps[3] = Point(1646.2, 1287.71);\n    new ShapeRef(router, poly199, 199);\n    \n    Polygon poly200(4);\n    poly200.ps[0] = Point(586.5, 855.545);\n    poly200.ps[1] = Point(586.5, 893.545);\n    poly200.ps[2] = Point(532.5, 893.545);\n    poly200.ps[3] = Point(532.5, 855.545);\n    new ShapeRef(router, poly200, 200);\n    \n    Polygon poly201(4);\n    poly201.ps[0] = Point(787, 855.545);\n    poly201.ps[1] = Point(787, 893.545);\n    poly201.ps[2] = Point(733, 893.545);\n    poly201.ps[3] = Point(733, 855.545);\n    new ShapeRef(router, poly201, 201);\n    \n    Polygon poly202(4);\n    poly202.ps[0] = Point(496, 907.545);\n    poly202.ps[1] = Point(496, 945.545);\n    poly202.ps[2] = Point(442, 945.545);\n    poly202.ps[3] = Point(442, 907.545);\n    new ShapeRef(router, poly202, 202);\n    \n    Polygon poly203(4);\n    poly203.ps[0] = Point(1223, 1088.21);\n    poly203.ps[1] = Point(1223, 1126.21);\n    poly203.ps[2] = Point(1169, 1126.21);\n    poly203.ps[3] = Point(1169, 1088.21);\n    new ShapeRef(router, poly203, 203);\n    \n    Polygon poly204(4);\n    poly204.ps[0] = Point(1841.2, 1593.71);\n    poly204.ps[1] = Point(1841.2, 1631.71);\n    poly204.ps[2] = Point(1787.2, 1631.71);\n    poly204.ps[3] = Point(1787.2, 1593.71);\n    new ShapeRef(router, poly204, 204);\n    \n    Polygon poly205(4);\n    poly205.ps[0] = Point(658, 1260.55);\n    poly205.ps[1] = Point(658, 1298.55);\n    poly205.ps[2] = Point(604, 1298.55);\n    poly205.ps[3] = Point(604, 1260.55);\n    new ShapeRef(router, poly205, 205);\n    \n    Polygon poly206(4);\n    poly206.ps[0] = Point(545, 980.045);\n    poly206.ps[1] = Point(545, 1018.05);\n    poly206.ps[2] = Point(491, 1018.05);\n    poly206.ps[3] = Point(491, 980.045);\n    new ShapeRef(router, poly206, 206);\n    \n    Polygon poly207(4);\n    poly207.ps[0] = Point(357, 565.545);\n    poly207.ps[1] = Point(357, 603.545);\n    poly207.ps[2] = Point(303, 603.545);\n    poly207.ps[3] = Point(303, 565.545);\n    new ShapeRef(router, poly207, 207);\n    \n    Polygon poly208(4);\n    poly208.ps[0] = Point(187, 515.545);\n    poly208.ps[1] = Point(187, 553.545);\n    poly208.ps[2] = Point(133, 553.545);\n    poly208.ps[3] = Point(133, 515.545);\n    new ShapeRef(router, poly208, 208);\n    \n    Polygon poly209(4);\n    poly209.ps[0] = Point(1025.8, 976.045);\n    poly209.ps[1] = Point(1025.8, 1014.05);\n    poly209.ps[2] = Point(971.8, 1014.05);\n    poly209.ps[3] = Point(971.8, 976.045);\n    new ShapeRef(router, poly209, 209);\n    \n    Polygon poly210(4);\n    poly210.ps[0] = Point(1654.2, 1339.71);\n    poly210.ps[1] = Point(1654.2, 1377.71);\n    poly210.ps[2] = Point(1600.2, 1377.71);\n    poly210.ps[3] = Point(1600.2, 1339.71);\n    new ShapeRef(router, poly210, 210);\n    \n    Polygon poly211(4);\n    poly211.ps[0] = Point(1466.53, 1339.71);\n    poly211.ps[1] = Point(1466.53, 1377.71);\n    poly211.ps[2] = Point(1412.53, 1377.71);\n    poly211.ps[3] = Point(1412.53, 1339.71);\n    new ShapeRef(router, poly211, 211);\n    \n    Polygon poly212(4);\n    poly212.ps[0] = Point(1633.49, 1593.71);\n    poly212.ps[1] = Point(1633.49, 1631.71);\n    poly212.ps[2] = Point(1579.49, 1631.71);\n    poly212.ps[3] = Point(1579.49, 1593.71);\n    new ShapeRef(router, poly212, 212);\n    \n    Polygon poly213(4);\n    poly213.ps[0] = Point(1429.2, 840.545);\n    poly213.ps[1] = Point(1429.2, 878.545);\n    poly213.ps[2] = Point(1375.2, 878.545);\n    poly213.ps[3] = Point(1375.2, 840.545);\n    new ShapeRef(router, poly213, 213);\n    \n    Polygon poly214(4);\n    poly214.ps[0] = Point(1633.49, 975.545);\n    poly214.ps[1] = Point(1633.49, 1013.55);\n    poly214.ps[2] = Point(1579.49, 1013.55);\n    poly214.ps[3] = Point(1579.49, 975.545);\n    new ShapeRef(router, poly214, 214);\n    \n    Polygon poly215(4);\n    poly215.ps[0] = Point(1505.53, 925.545);\n    poly215.ps[1] = Point(1505.53, 963.545);\n    poly215.ps[2] = Point(1451.53, 963.545);\n    poly215.ps[3] = Point(1451.53, 925.545);\n    new ShapeRef(router, poly215, 215);\n    \n    Polygon poly216(4);\n    poly216.ps[0] = Point(1099.8, 1595.71);\n    poly216.ps[1] = Point(1099.8, 1633.71);\n    poly216.ps[2] = Point(1041.8, 1633.71);\n    poly216.ps[3] = Point(1041.8, 1595.71);\n    new ShapeRef(router, poly216, 216);\n    \n    Polygon poly217(4);\n    poly217.ps[0] = Point(1207, 325);\n    poly217.ps[1] = Point(1207, 363);\n    poly217.ps[2] = Point(1149, 363);\n    poly217.ps[3] = Point(1149, 325);\n    new ShapeRef(router, poly217, 217);\n    \n    Polygon poly218(4);\n    poly218.ps[0] = Point(1259, 305);\n    poly218.ps[1] = Point(1259, 363);\n    poly218.ps[2] = Point(1221, 363);\n    poly218.ps[3] = Point(1221, 305);\n    new ShapeRef(router, poly218, 218);\n    \n    Polygon poly219(4);\n    poly219.ps[0] = Point(342, 463.545);\n    poly219.ps[1] = Point(342, 501.545);\n    poly219.ps[2] = Point(284, 501.545);\n    poly219.ps[3] = Point(284, 463.545);\n    new ShapeRef(router, poly219, 219);\n    \n    Polygon poly220(4);\n    poly220.ps[0] = Point(1066.83, 731.462);\n    poly220.ps[1] = Point(1066.83, 789.462);\n    poly220.ps[2] = Point(1028.83, 789.462);\n    poly220.ps[3] = Point(1028.83, 731.462);\n    new ShapeRef(router, poly220, 220);\n    \n    Polygon poly221(4);\n    poly221.ps[0] = Point(777, 1328.05);\n    poly221.ps[1] = Point(777, 1366.05);\n    poly221.ps[2] = Point(719, 1366.05);\n    poly221.ps[3] = Point(719, 1328.05);\n    new ShapeRef(router, poly221, 221);\n    \n    Polygon poly222(4);\n    poly222.ps[0] = Point(892, 325);\n    poly222.ps[1] = Point(892, 363);\n    poly222.ps[2] = Point(834, 363);\n    poly222.ps[3] = Point(834, 325);\n    new ShapeRef(router, poly222, 222);\n    \n    Polygon poly63(4);\n    poly63.ps[0] = Point(1620.2, 1297.71);\n    poly63.ps[1] = Point(1620.2, 1315.71);\n    poly63.ps[2] = Point(1602.2, 1315.71);\n    poly63.ps[3] = Point(1602.2, 1297.71);\n    new ShapeRef(router, poly63, 63);\n    \n    Polygon poly64(4);\n    poly64.ps[0] = Point(630.5, 865.545);\n    poly64.ps[1] = Point(630.5, 883.545);\n    poly64.ps[2] = Point(612.5, 883.545);\n    poly64.ps[3] = Point(612.5, 865.545);\n    new ShapeRef(router, poly64, 64);\n    \n    Polygon poly65(4);\n    poly65.ps[0] = Point(707, 865.545);\n    poly65.ps[1] = Point(707, 883.545);\n    poly65.ps[2] = Point(689, 883.545);\n    poly65.ps[3] = Point(689, 865.545);\n    new ShapeRef(router, poly65, 65);\n    \n    Polygon poly66(4);\n    poly66.ps[0] = Point(416, 917.545);\n    poly66.ps[1] = Point(416, 935.545);\n    poly66.ps[2] = Point(398, 935.545);\n    poly66.ps[3] = Point(398, 917.545);\n    new ShapeRef(router, poly66, 66);\n    \n    Polygon poly67(4);\n    poly67.ps[0] = Point(1143, 1098.21);\n    poly67.ps[1] = Point(1143, 1116.21);\n    poly67.ps[2] = Point(1125, 1116.21);\n    poly67.ps[3] = Point(1125, 1098.21);\n    new ShapeRef(router, poly67, 67);\n    \n    Polygon poly68(4);\n    poly68.ps[0] = Point(1761.2, 1603.71);\n    poly68.ps[1] = Point(1761.2, 1621.71);\n    poly68.ps[2] = Point(1743.2, 1621.71);\n    poly68.ps[3] = Point(1743.2, 1603.71);\n    new ShapeRef(router, poly68, 68);\n    \n    Polygon poly69(4);\n    poly69.ps[0] = Point(578, 1270.55);\n    poly69.ps[1] = Point(578, 1288.55);\n    poly69.ps[2] = Point(560, 1288.55);\n    poly69.ps[3] = Point(560, 1270.55);\n    new ShapeRef(router, poly69, 69);\n    \n    Polygon poly70(4);\n    poly70.ps[0] = Point(527, 1040.05);\n    poly70.ps[1] = Point(527, 1058.05);\n    poly70.ps[2] = Point(509, 1058.05);\n    poly70.ps[3] = Point(509, 1040.05);\n    new ShapeRef(router, poly70, 70);\n    \n    Polygon poly71(4);\n    poly71.ps[0] = Point(277, 575.545);\n    poly71.ps[1] = Point(277, 593.545);\n    poly71.ps[2] = Point(259, 593.545);\n    poly71.ps[3] = Point(259, 575.545);\n    new ShapeRef(router, poly71, 71);\n    \n    Polygon poly72(4);\n    poly72.ps[0] = Point(169, 575.545);\n    poly72.ps[1] = Point(169, 593.545);\n    poly72.ps[2] = Point(151, 593.545);\n    poly72.ps[3] = Point(151, 575.545);\n    new ShapeRef(router, poly72, 72);\n    \n    Polygon poly73(4);\n    poly73.ps[0] = Point(1007.8, 1036.05);\n    poly73.ps[1] = Point(1007.8, 1054.05);\n    poly73.ps[2] = Point(989.8, 1054.05);\n    poly73.ps[3] = Point(989.8, 1036.05);\n    new ShapeRef(router, poly73, 73);\n    \n    Polygon poly74(4);\n    poly74.ps[0] = Point(1574.2, 1349.71);\n    poly74.ps[1] = Point(1574.2, 1367.71);\n    poly74.ps[2] = Point(1556.2, 1367.71);\n    poly74.ps[3] = Point(1556.2, 1349.71);\n    new ShapeRef(router, poly74, 74);\n    \n    Polygon poly75(4);\n    poly75.ps[0] = Point(1510.53, 1349.71);\n    poly75.ps[1] = Point(1510.53, 1367.71);\n    poly75.ps[2] = Point(1492.53, 1367.71);\n    poly75.ps[3] = Point(1492.53, 1349.71);\n    new ShapeRef(router, poly75, 75);\n    \n    Polygon poly76(4);\n    poly76.ps[0] = Point(1553.49, 1603.71);\n    poly76.ps[1] = Point(1553.49, 1621.71);\n    poly76.ps[2] = Point(1535.49, 1621.71);\n    poly76.ps[3] = Point(1535.49, 1603.71);\n    new ShapeRef(router, poly76, 76);\n    \n    Polygon poly77(4);\n    poly77.ps[0] = Point(1349.2, 850.545);\n    poly77.ps[1] = Point(1349.2, 868.545);\n    poly77.ps[2] = Point(1331.2, 868.545);\n    poly77.ps[3] = Point(1331.2, 850.545);\n    new ShapeRef(router, poly77, 77);\n    \n    Polygon poly78(4);\n    poly78.ps[0] = Point(1553.49, 985.545);\n    poly78.ps[1] = Point(1553.49, 1003.55);\n    poly78.ps[2] = Point(1535.49, 1003.55);\n    poly78.ps[3] = Point(1535.49, 985.545);\n    new ShapeRef(router, poly78, 78);\n    \n    Polygon poly79(4);\n    poly79.ps[0] = Point(1487.53, 985.545);\n    poly79.ps[1] = Point(1487.53, 1003.55);\n    poly79.ps[2] = Point(1469.53, 1003.55);\n    poly79.ps[3] = Point(1469.53, 985.545);\n    new ShapeRef(router, poly79, 79);\n    \n    Polygon poly80(4);\n    poly80.ps[0] = Point(119, 667.545);\n    poly80.ps[1] = Point(119, 705.545);\n    poly80.ps[2] = Point(81, 705.545);\n    poly80.ps[3] = Point(81, 667.545);\n    new ShapeRef(router, poly80, 80);\n    \n    Polygon poly81(4);\n    poly81.ps[0] = Point(179, 803.545);\n    poly81.ps[1] = Point(179, 841.545);\n    poly81.ps[2] = Point(141, 841.545);\n    poly81.ps[3] = Point(141, 803.545);\n    new ShapeRef(router, poly81, 81);\n    \n    Polygon poly82(4);\n    poly82.ps[0] = Point(394, 427);\n    poly82.ps[1] = Point(394, 465);\n    poly82.ps[2] = Point(356, 465);\n    poly82.ps[3] = Point(356, 427);\n    new ShapeRef(router, poly82, 82);\n    \n    Polygon poly83(4);\n    poly83.ps[0] = Point(658.5, 427);\n    poly83.ps[1] = Point(658.5, 465);\n    poly83.ps[2] = Point(620.5, 465);\n    poly83.ps[3] = Point(620.5, 427);\n    new ShapeRef(router, poly83, 83);\n    \n    Polygon poly84(4);\n    poly84.ps[0] = Point(820, 427);\n    poly84.ps[1] = Point(820, 465);\n    poly84.ps[2] = Point(782, 465);\n    poly84.ps[3] = Point(782, 427);\n    new ShapeRef(router, poly84, 84);\n    \n    Polygon poly22(4);\n    poly22.ps[0] = Point(801.5, 677.545);\n    poly22.ps[1] = Point(801.5, 695.545);\n    poly22.ps[2] = Point(783.5, 695.545);\n    poly22.ps[3] = Point(783.5, 677.545);\n    new ShapeRef(router, poly22, 22);\n    \n    Polygon poly23(4);\n    poly23.ps[0] = Point(870, 1166.55);\n    poly23.ps[1] = Point(870, 1184.55);\n    poly23.ps[2] = Point(852, 1184.55);\n    poly23.ps[3] = Point(852, 1166.55);\n    new ShapeRef(router, poly23, 23);\n    \n    Polygon poly24(4);\n    poly24.ps[0] = Point(879, 1451.71);\n    poly24.ps[1] = Point(879, 1469.71);\n    poly24.ps[2] = Point(861, 1469.71);\n    poly24.ps[3] = Point(861, 1451.71);\n    new ShapeRef(router, poly24, 24);\n    \n    Polygon poly25(4);\n    poly25.ps[0] = Point(763, 1584.71);\n    poly25.ps[1] = Point(763, 1602.71);\n    poly25.ps[2] = Point(745, 1602.71);\n    poly25.ps[3] = Point(745, 1584.71);\n    new ShapeRef(router, poly25, 25);\n    \n    Polygon poly26(4);\n    poly26.ps[0] = Point(835, 1617.71);\n    poly26.ps[1] = Point(835, 1635.71);\n    poly26.ps[2] = Point(817, 1635.71);\n    poly26.ps[3] = Point(817, 1617.71);\n    new ShapeRef(router, poly26, 26);\n    \n    Polygon poly27(4);\n    poly27.ps[0] = Point(934, 251);\n    poly27.ps[1] = Point(934, 269);\n    poly27.ps[2] = Point(916, 269);\n    poly27.ps[3] = Point(916, 251);\n    new ShapeRef(router, poly27, 27);\n    \n    Polygon poly28(4);\n    poly28.ps[0] = Point(934, 335);\n    poly28.ps[1] = Point(934, 353);\n    poly28.ps[2] = Point(916, 353);\n    poly28.ps[3] = Point(916, 335);\n    new ShapeRef(router, poly28, 28);\n    \n    Polygon poly29(4);\n    poly29.ps[0] = Point(934, 670.045);\n    poly29.ps[1] = Point(934, 688.045);\n    poly29.ps[2] = Point(916, 688.045);\n    poly29.ps[3] = Point(916, 670.045);\n    new ShapeRef(router, poly29, 29);\n    \n    Polygon poly30(4);\n    poly30.ps[0] = Point(934, 923.545);\n    poly30.ps[1] = Point(934, 941.545);\n    poly30.ps[2] = Point(916, 941.545);\n    poly30.ps[3] = Point(916, 923.545);\n    new ShapeRef(router, poly30, 30);\n    \n    Polygon poly31(4);\n    poly31.ps[0] = Point(994, 106);\n    poly31.ps[1] = Point(994, 124);\n    poly31.ps[2] = Point(976, 124);\n    poly31.ps[3] = Point(976, 106);\n    new ShapeRef(router, poly31, 31);\n    \n    Polygon poly32(4);\n    poly32.ps[0] = Point(999, 437);\n    poly32.ps[1] = Point(999, 455);\n    poly32.ps[2] = Point(981, 455);\n    poly32.ps[3] = Point(981, 437);\n    new ShapeRef(router, poly32, 32);\n    \n    Polygon poly33(4);\n    poly33.ps[0] = Point(1181, 437);\n    poly33.ps[1] = Point(1181, 455);\n    poly33.ps[2] = Point(1163, 455);\n    poly33.ps[3] = Point(1163, 437);\n    new ShapeRef(router, poly33, 33);\n    \n    Polygon poly34(4);\n    poly34.ps[0] = Point(1161, 751.379);\n    poly34.ps[1] = Point(1161, 769.379);\n    poly34.ps[2] = Point(1143, 769.379);\n    poly34.ps[3] = Point(1143, 751.379);\n    new ShapeRef(router, poly34, 34);\n    \n    Polygon poly35(4);\n    poly35.ps[0] = Point(1107, 813.545);\n    poly35.ps[1] = Point(1107, 831.545);\n    poly35.ps[2] = Point(1089, 831.545);\n    poly35.ps[3] = Point(1089, 813.545);\n    new ShapeRef(router, poly35, 35);\n    \n    Polygon poly36(4);\n    poly36.ps[0] = Point(979, 1098.21);\n    poly36.ps[1] = Point(979, 1116.21);\n    poly36.ps[2] = Point(961, 1116.21);\n    poly36.ps[3] = Point(961, 1098.21);\n    new ShapeRef(router, poly36, 36);\n    \n    Polygon poly37(4);\n    poly37.ps[0] = Point(947.8, 1620.71);\n    poly37.ps[1] = Point(947.8, 1638.71);\n    poly37.ps[2] = Point(929.8, 1638.71);\n    poly37.ps[3] = Point(929.8, 1620.71);\n    new ShapeRef(router, poly37, 37);\n    \n    Polygon poly38(4);\n    poly38.ps[0] = Point(1299.8, 1595.71);\n    poly38.ps[1] = Point(1299.8, 1653.71);\n    poly38.ps[2] = Point(1041.8, 1653.71);\n    poly38.ps[3] = Point(1041.8, 1595.71);\n    new ShapeRef(router, poly38, 38);\n    \n    Polygon poly39(4);\n    poly39.ps[0] = Point(767, 1676.71);\n    poly39.ps[1] = Point(767, 1694.71);\n    poly39.ps[2] = Point(749, 1694.71);\n    poly39.ps[3] = Point(749, 1676.71);\n    new ShapeRef(router, poly39, 39);\n    \n    Polygon poly40(4);\n    poly40.ps[0] = Point(767, 1768.71);\n    poly40.ps[1] = Point(767, 1786.71);\n    poly40.ps[2] = Point(749, 1786.71);\n    poly40.ps[3] = Point(749, 1768.71);\n    new ShapeRef(router, poly40, 40);\n    \n    Polygon poly85(4);\n    poly85.ps[0] = Point(944, 96);\n    poly85.ps[1] = Point(944, 134);\n    poly85.ps[2] = Point(906, 134);\n    poly85.ps[3] = Point(906, 96);\n    new ShapeRef(router, poly85, 85);\n    \n    Polygon poly86(4);\n    poly86.ps[0] = Point(1120, 96);\n    poly86.ps[1] = Point(1120, 134);\n    poly86.ps[2] = Point(1082, 134);\n    poly86.ps[3] = Point(1082, 96);\n    new ShapeRef(router, poly86, 86);\n    \n    Polygon poly87(4);\n    poly87.ps[0] = Point(1120, 283);\n    poly87.ps[1] = Point(1120, 321);\n    poly87.ps[2] = Point(1082, 321);\n    poly87.ps[3] = Point(1082, 283);\n    new ShapeRef(router, poly87, 87);\n    \n    Polygon poly88(4);\n    poly88.ps[0] = Point(944, 283);\n    poly88.ps[1] = Point(944, 321);\n    poly88.ps[2] = Point(906, 321);\n    poly88.ps[3] = Point(906, 283);\n    new ShapeRef(router, poly88, 88);\n    \n    Polygon poly89(4);\n    poly89.ps[0] = Point(353.2, 709.545);\n    poly89.ps[1] = Point(353.2, 747.545);\n    poly89.ps[2] = Point(315.2, 747.545);\n    poly89.ps[3] = Point(315.2, 709.545);\n    new ShapeRef(router, poly89, 89);\n    \n    Polygon poly90(4);\n    poly90.ps[0] = Point(665, 667.545);\n    poly90.ps[1] = Point(665, 705.545);\n    poly90.ps[2] = Point(627, 705.545);\n    poly90.ps[3] = Point(627, 667.545);\n    new ShapeRef(router, poly90, 90);\n    \n    Polygon poly91(4);\n    poly91.ps[0] = Point(665, 803.545);\n    poly91.ps[1] = Point(665, 841.545);\n    poly91.ps[2] = Point(627, 841.545);\n    poly91.ps[3] = Point(627, 803.545);\n    new ShapeRef(router, poly91, 91);\n    \n    Polygon poly92(4);\n    poly92.ps[0] = Point(944, 427);\n    poly92.ps[1] = Point(944, 465);\n    poly92.ps[2] = Point(906, 465);\n    poly92.ps[3] = Point(906, 427);\n    new ShapeRef(router, poly92, 92);\n    \n    Polygon poly93(4);\n    poly93.ps[0] = Point(1131, 427);\n    poly93.ps[1] = Point(1131, 465);\n    poly93.ps[2] = Point(1093, 465);\n    poly93.ps[3] = Point(1093, 427);\n    new ShapeRef(router, poly93, 93);\n    \n    Polygon poly94(4);\n    poly94.ps[0] = Point(1254, 427);\n    poly94.ps[1] = Point(1254, 465);\n    poly94.ps[2] = Point(1216, 465);\n    poly94.ps[3] = Point(1216, 427);\n    new ShapeRef(router, poly94, 94);\n    \n    Polygon poly95(4);\n    poly95.ps[0] = Point(944, 803.545);\n    poly95.ps[1] = Point(944, 841.545);\n    poly95.ps[2] = Point(906, 841.545);\n    poly95.ps[3] = Point(906, 803.545);\n    new ShapeRef(router, poly95, 95);\n    \n    Polygon poly96(4);\n    poly96.ps[0] = Point(270, 1082.05);\n    poly96.ps[1] = Point(270, 1120.05);\n    poly96.ps[2] = Point(232, 1120.05);\n    poly96.ps[3] = Point(232, 1082.05);\n    new ShapeRef(router, poly96, 96);\n    \n    Polygon poly97(4);\n    poly97.ps[0] = Point(426, 1009.55);\n    poly97.ps[1] = Point(426, 1047.55);\n    poly97.ps[2] = Point(388, 1047.55);\n    poly97.ps[3] = Point(388, 1009.55);\n    new ShapeRef(router, poly97, 97);\n    \n    Polygon poly98(4);\n    poly98.ps[0] = Point(262, 1276.05);\n    poly98.ps[1] = Point(262, 1314.05);\n    poly98.ps[2] = Point(224, 1314.05);\n    poly98.ps[3] = Point(224, 1276.05);\n    new ShapeRef(router, poly98, 98);\n    \n    Polygon poly99(4);\n    poly99.ps[0] = Point(957.8, 1832.71);\n    poly99.ps[1] = Point(957.8, 1870.71);\n    poly99.ps[2] = Point(919.8, 1870.71);\n    poly99.ps[3] = Point(919.8, 1832.71);\n    new ShapeRef(router, poly99, 99);\n    \n    Polygon poly100(4);\n    poly100.ps[0] = Point(957.8, 1666.71);\n    poly100.ps[1] = Point(957.8, 1704.71);\n    poly100.ps[2] = Point(919.8, 1704.71);\n    poly100.ps[3] = Point(919.8, 1666.71);\n    new ShapeRef(router, poly100, 100);\n    \n    Polygon poly101(4);\n    poly101.ps[0] = Point(568, 1767.85);\n    poly101.ps[1] = Point(568, 1805.85);\n    poly101.ps[2] = Point(530, 1805.85);\n    poly101.ps[3] = Point(530, 1767.85);\n    new ShapeRef(router, poly101, 101);\n    \n    Polygon poly102(4);\n    poly102.ps[0] = Point(717, 1596.71);\n    poly102.ps[1] = Point(717, 1634.71);\n    poly102.ps[2] = Point(679, 1634.71);\n    poly102.ps[3] = Point(679, 1596.71);\n    new ShapeRef(router, poly102, 102);\n    \n    Polygon poly103(4);\n    poly103.ps[0] = Point(829, 1441.71);\n    poly103.ps[1] = Point(829, 1479.71);\n    poly103.ps[2] = Point(791, 1479.71);\n    poly103.ps[3] = Point(791, 1441.71);\n    new ShapeRef(router, poly103, 103);\n    \n    Polygon poly104(4);\n    poly104.ps[0] = Point(949, 1208.55);\n    poly104.ps[1] = Point(949, 1246.55);\n    poly104.ps[2] = Point(911, 1246.55);\n    poly104.ps[3] = Point(911, 1208.55);\n    new ShapeRef(router, poly104, 104);\n    \n    Polygon poly105(4);\n    poly105.ps[0] = Point(804, 1208.55);\n    poly105.ps[1] = Point(804, 1246.55);\n    poly105.ps[2] = Point(766, 1246.55);\n    poly105.ps[3] = Point(766, 1208.55);\n    new ShapeRef(router, poly105, 105);\n    \n    Polygon poly106(4);\n    poly106.ps[0] = Point(717, 1009.55);\n    poly106.ps[1] = Point(717, 1047.55);\n    poly106.ps[2] = Point(679, 1047.55);\n    poly106.ps[3] = Point(679, 1009.55);\n    new ShapeRef(router, poly106, 106);\n    \n    Polygon poly107(4);\n    poly107.ps[0] = Point(1111, 1088.21);\n    poly107.ps[1] = Point(1111, 1126.21);\n    poly107.ps[2] = Point(1073, 1126.21);\n    poly107.ps[3] = Point(1073, 1088.21);\n    new ShapeRef(router, poly107, 107);\n    \n    Polygon poly4(4);\n    poly4.ps[0] = Point(144, 1140.05);\n    poly4.ps[1] = Point(144, 1158.05);\n    poly4.ps[2] = Point(126, 1158.05);\n    poly4.ps[3] = Point(126, 1140.05);\n    new ShapeRef(router, poly4, 4);\n    \n    Polygon poly1(4);\n    poly1.ps[0] = Point(1563.49, 741.379);\n    poly1.ps[1] = Point(1563.49, 779.379);\n    poly1.ps[2] = Point(1525.49, 779.379);\n    poly1.ps[3] = Point(1525.49, 741.379);\n    new ShapeRef(router, poly1, 1);\n    \n    Polygon poly7(4);\n    poly7.ps[0] = Point(527, 437);\n    poly7.ps[1] = Point(527, 455);\n    poly7.ps[2] = Point(509, 455);\n    poly7.ps[3] = Point(509, 437);\n    new ShapeRef(router, poly7, 7);\n    \n    Polygon poly8(4);\n    poly8.ps[0] = Point(343.2, 677.545);\n    poly8.ps[1] = Point(343.2, 695.545);\n    poly8.ps[2] = Point(325.2, 695.545);\n    poly8.ps[3] = Point(325.2, 677.545);\n    new ShapeRef(router, poly8, 8);\n    \n    Polygon poly9(4);\n    poly9.ps[0] = Point(200, 1140.05);\n    poly9.ps[1] = Point(200, 1158.05);\n    poly9.ps[2] = Point(182, 1158.05);\n    poly9.ps[3] = Point(182, 1140.05);\n    new ShapeRef(router, poly9, 9);\n    \n    Polygon poly10(4);\n    poly10.ps[0] = Point(343.2, 761.545);\n    poly10.ps[1] = Point(343.2, 779.545);\n    poly10.ps[2] = Point(325.2, 779.545);\n    poly10.ps[3] = Point(325.2, 761.545);\n    new ShapeRef(router, poly10, 10);\n    \n    Polygon poly11(4);\n    poly11.ps[0] = Point(343.2, 813.545);\n    poly11.ps[1] = Point(343.2, 831.545);\n    poly11.ps[2] = Point(325.2, 831.545);\n    poly11.ps[3] = Point(325.2, 813.545);\n    new ShapeRef(router, poly11, 11);\n    \n    Polygon poly12(4);\n    poly12.ps[0] = Point(343.2, 865.545);\n    poly12.ps[1] = Point(343.2, 883.545);\n    poly12.ps[2] = Point(325.2, 883.545);\n    poly12.ps[3] = Point(325.2, 865.545);\n    new ShapeRef(router, poly12, 12);\n    \n    Polygon poly13(4);\n    poly13.ps[0] = Point(476.5, 1092.05);\n    poly13.ps[1] = Point(476.5, 1110.05);\n    poly13.ps[2] = Point(458.5, 1110.05);\n    poly13.ps[3] = Point(458.5, 1092.05);\n    new ShapeRef(router, poly13, 13);\n    \n    Polygon poly14(4);\n    poly14.ps[0] = Point(595, 1019.55);\n    poly14.ps[1] = Point(595, 1037.55);\n    poly14.ps[2] = Point(577, 1037.55);\n    poly14.ps[3] = Point(577, 1019.55);\n    new ShapeRef(router, poly14, 14);\n    \n    Polygon poly15(4);\n    poly15.ps[0] = Point(578, 1194.05);\n    poly15.ps[1] = Point(578, 1212.05);\n    poly15.ps[2] = Point(560, 1212.05);\n    poly15.ps[3] = Point(560, 1194.05);\n    new ShapeRef(router, poly15, 15);\n    \n    Polygon poly16(4);\n    poly16.ps[0] = Point(744, 437);\n    poly16.ps[1] = Point(744, 455);\n    poly16.ps[2] = Point(726, 455);\n    poly16.ps[3] = Point(726, 437);\n    new ShapeRef(router, poly16, 16);\n    \n    Polygon poly17(4);\n    poly17.ps[0] = Point(870, 437);\n    poly17.ps[1] = Point(870, 455);\n    poly17.ps[2] = Point(852, 455);\n    poly17.ps[3] = Point(852, 437);\n    new ShapeRef(router, poly17, 17);\n    \n    Polygon poly18(4);\n    poly18.ps[0] = Point(527, 575.545);\n    poly18.ps[1] = Point(527, 593.545);\n    poly18.ps[2] = Point(509, 593.545);\n    poly18.ps[3] = Point(509, 575.545);\n    new ShapeRef(router, poly18, 18);\n    \n    Polygon poly19(4);\n    poly19.ps[0] = Point(801.5, 813.545);\n    poly19.ps[1] = Point(801.5, 831.545);\n    poly19.ps[2] = Point(783.5, 831.545);\n    poly19.ps[3] = Point(783.5, 813.545);\n    new ShapeRef(router, poly19, 19);\n    \n    Polygon poly20(4);\n    poly20.ps[0] = Point(806, 1019.55);\n    poly20.ps[1] = Point(806, 1037.55);\n    poly20.ps[2] = Point(788, 1037.55);\n    poly20.ps[3] = Point(788, 1019.55);\n    new ShapeRef(router, poly20, 20);\n    \n    Polygon poly21(4);\n    poly21.ps[0] = Point(788, 1114.55);\n    poly21.ps[1] = Point(788, 1132.55);\n    poly21.ps[2] = Point(770, 1132.55);\n    poly21.ps[3] = Point(770, 1114.55);\n    new ShapeRef(router, poly21, 21);\n    \n    Polygon poly5(4);\n    poly5.ps[0] = Point(1479.2, 729.545);\n    poly5.ps[1] = Point(1479.2, 747.545);\n    poly5.ps[2] = Point(1461.2, 747.545);\n    poly5.ps[3] = Point(1461.2, 729.545);\n    new ShapeRef(router, poly5, 5);\n    \n    Polygon poly6(4);\n    poly6.ps[0] = Point(687.327, 258);\n    poly6.ps[1] = Point(687.327, 291);\n    poly6.ps[2] = Point(393.327, 291);\n    poly6.ps[3] = Point(393.327, 258);\n    new ShapeRef(router, poly6, 6);\n    \n    Polygon poly175(4);\n    poly175.ps[0] = Point(1187, 803.545);\n    poly175.ps[1] = Point(1187, 841.545);\n    poly175.ps[2] = Point(1133, 841.545);\n    poly175.ps[3] = Point(1133, 803.545);\n    new ShapeRef(router, poly175, 175);\n    \n    Polygon poly176(4);\n    poly176.ps[0] = Point(1059, 1088.21);\n    poly176.ps[1] = Point(1059, 1126.21);\n    poly176.ps[2] = Point(1005, 1126.21);\n    poly176.ps[3] = Point(1005, 1088.21);\n    new ShapeRef(router, poly176, 176);\n    \n    Polygon poly177(4);\n    poly177.ps[0] = Point(1027.8, 1610.71);\n    poly177.ps[1] = Point(1027.8, 1648.71);\n    poly177.ps[2] = Point(973.8, 1648.71);\n    poly177.ps[3] = Point(973.8, 1610.71);\n    new ShapeRef(router, poly177, 177);\n    \n    Polygon poly178(4);\n    poly178.ps[0] = Point(785, 1616.71);\n    poly178.ps[1] = Point(785, 1654.71);\n    poly178.ps[2] = Point(731, 1654.71);\n    poly178.ps[3] = Point(731, 1616.71);\n    new ShapeRef(router, poly178, 178);\n    \n    Polygon poly179(4);\n    poly179.ps[0] = Point(785, 1708.71);\n    poly179.ps[1] = Point(785, 1746.71);\n    poly179.ps[2] = Point(731, 1746.71);\n    poly179.ps[3] = Point(731, 1708.71);\n    new ShapeRef(router, poly179, 179);\n    \n    Polygon poly180(4);\n    poly180.ps[0] = Point(785, 1840.71);\n    poly180.ps[1] = Point(785, 1878.71);\n    poly180.ps[2] = Point(731, 1878.71);\n    poly180.ps[3] = Point(731, 1840.71);\n    new ShapeRef(router, poly180, 180);\n    \n    Polygon poly181(4);\n    poly181.ps[0] = Point(1027.8, 1790.71);\n    poly181.ps[1] = Point(1027.8, 1828.71);\n    poly181.ps[2] = Point(973.8, 1828.71);\n    poly181.ps[3] = Point(973.8, 1790.71);\n    new ShapeRef(router, poly181, 181);\n    \n    Polygon poly182(4);\n    poly182.ps[0] = Point(1193, 1543.71);\n    poly182.ps[1] = Point(1193, 1581.71);\n    poly182.ps[2] = Point(1139, 1581.71);\n    poly182.ps[3] = Point(1139, 1543.71);\n    new ShapeRef(router, poly182, 182);\n    \n    Polygon poly183(4);\n    poly183.ps[0] = Point(1255, 1491.71);\n    poly183.ps[1] = Point(1255, 1529.71);\n    poly183.ps[2] = Point(1201, 1529.71);\n    poly183.ps[3] = Point(1201, 1491.71);\n    new ShapeRef(router, poly183, 183);\n    \n    Polygon poly184(4);\n    poly184.ps[0] = Point(1429.2, 663.045);\n    poly184.ps[1] = Point(1429.2, 701.045);\n    poly184.ps[2] = Point(1375.2, 701.045);\n    poly184.ps[3] = Point(1375.2, 663.045);\n    new ShapeRef(router, poly184, 184);\n    \n    Polygon poly185(4);\n    poly185.ps[0] = Point(1444.33, 1082.05);\n    poly185.ps[1] = Point(1444.33, 1120.05);\n    poly185.ps[2] = Point(1390.33, 1120.05);\n    poly185.ps[3] = Point(1390.33, 1082.05);\n    new ShapeRef(router, poly185, 185);\n    \n    Polygon poly186(4);\n    poly186.ps[0] = Point(1557.2, 383.545);\n    poly186.ps[1] = Point(1557.2, 421.545);\n    poly186.ps[2] = Point(1503.2, 421.545);\n    poly186.ps[3] = Point(1503.2, 383.545);\n    new ShapeRef(router, poly186, 186);\n    \n    Polygon poly187(4);\n    poly187.ps[0] = Point(1557.2, 475.545);\n    poly187.ps[1] = Point(1557.2, 513.545);\n    poly187.ps[2] = Point(1503.2, 513.545);\n    poly187.ps[3] = Point(1503.2, 475.545);\n    new ShapeRef(router, poly187, 187);\n    \n    Polygon poly188(4);\n    poly188.ps[0] = Point(1497.2, 801.545);\n    poly188.ps[1] = Point(1497.2, 839.545);\n    poly188.ps[2] = Point(1443.2, 839.545);\n    poly188.ps[3] = Point(1443.2, 801.545);\n    new ShapeRef(router, poly188, 188);\n    \n    Polygon poly189(4);\n    poly189.ps[0] = Point(1557.2, 567.545);\n    poly189.ps[1] = Point(1557.2, 605.545);\n    poly189.ps[2] = Point(1503.2, 605.545);\n    poly189.ps[3] = Point(1503.2, 567.545);\n    new ShapeRef(router, poly189, 189);\n    \n    Polygon poly190(4);\n    poly190.ps[0] = Point(1633.49, 840.545);\n    poly190.ps[1] = Point(1633.49, 878.545);\n    poly190.ps[2] = Point(1579.49, 878.545);\n    poly190.ps[3] = Point(1579.49, 840.545);\n    new ShapeRef(router, poly190, 190);\n    \n    Polygon poly191(4);\n    poly191.ps[0] = Point(1745.49, 840.545);\n    poly191.ps[1] = Point(1745.49, 878.545);\n    poly191.ps[2] = Point(1691.49, 878.545);\n    poly191.ps[3] = Point(1691.49, 840.545);\n    new ShapeRef(router, poly191, 191);\n    \n    Polygon poly192(4);\n    poly192.ps[0] = Point(1497.2, 1134.05);\n    poly192.ps[1] = Point(1497.2, 1172.05);\n    poly192.ps[2] = Point(1443.2, 1172.05);\n    poly192.ps[3] = Point(1443.2, 1134.05);\n    new ShapeRef(router, poly192, 192);\n    \n    Polygon poly193(4);\n    poly193.ps[0] = Point(1497.2, 1230.21);\n    poly193.ps[1] = Point(1497.2, 1268.21);\n    poly193.ps[2] = Point(1443.2, 1268.21);\n    poly193.ps[3] = Point(1443.2, 1230.21);\n    new ShapeRef(router, poly193, 193);\n    \n    Polygon poly194(4);\n    poly194.ps[0] = Point(1497.2, 1391.71);\n    poly194.ps[1] = Point(1497.2, 1429.71);\n    poly194.ps[2] = Point(1443.2, 1429.71);\n    poly194.ps[3] = Point(1443.2, 1391.71);\n    new ShapeRef(router, poly194, 194);\n    \n    Polygon poly195(4);\n    poly195.ps[0] = Point(1812.2, 1287.71);\n    poly195.ps[1] = Point(1812.2, 1325.71);\n    poly195.ps[2] = Point(1758.2, 1325.71);\n    poly195.ps[3] = Point(1758.2, 1287.71);\n    new ShapeRef(router, poly195, 195);\n    \n    Polygon poly196(4);\n    poly196.ps[0] = Point(1215, 148);\n    poly196.ps[1] = Point(1215, 186);\n    poly196.ps[2] = Point(1161, 186);\n    poly196.ps[3] = Point(1161, 148);\n    new ShapeRef(router, poly196, 196);\n    \n    Polygon poly197(4);\n    poly197.ps[0] = Point(981.8, 148);\n    poly197.ps[1] = Point(981.8, 186);\n    poly197.ps[2] = Point(927.8, 186);\n    poly197.ps[3] = Point(927.8, 148);\n    new ShapeRef(router, poly197, 197);\n    \n    Polygon poly41(4);\n    poly41.ps[0] = Point(767, 1800.71);\n    poly41.ps[1] = Point(767, 1818.71);\n    poly41.ps[2] = Point(749, 1818.71);\n    poly41.ps[3] = Point(749, 1800.71);\n    new ShapeRef(router, poly41, 41);\n    \n    Polygon poly42(4);\n    poly42.ps[0] = Point(947.8, 1800.71);\n    poly42.ps[1] = Point(947.8, 1818.71);\n    poly42.ps[2] = Point(929.8, 1818.71);\n    poly42.ps[3] = Point(929.8, 1800.71);\n    new ShapeRef(router, poly42, 42);\n    \n    Polygon poly43(4);\n    poly43.ps[0] = Point(1237, 1553.71);\n    poly43.ps[1] = Point(1237, 1571.71);\n    poly43.ps[2] = Point(1219, 1571.71);\n    poly43.ps[3] = Point(1219, 1553.71);\n    new ShapeRef(router, poly43, 43);\n    \n    Polygon poly44(4);\n    poly44.ps[0] = Point(1237, 1451.71);\n    poly44.ps[1] = Point(1237, 1469.71);\n    poly44.ps[2] = Point(1219, 1469.71);\n    poly44.ps[3] = Point(1219, 1451.71);\n    new ShapeRef(router, poly44, 44);\n    \n    Polygon poly45(4);\n    poly45.ps[0] = Point(1349.2, 673.045);\n    poly45.ps[1] = Point(1349.2, 691.045);\n    poly45.ps[2] = Point(1331.2, 691.045);\n    poly45.ps[3] = Point(1331.2, 673.045);\n    new ShapeRef(router, poly45, 45);\n    \n    Polygon poly46(4);\n    poly46.ps[0] = Point(1364.33, 1092.05);\n    poly46.ps[1] = Point(1364.33, 1110.05);\n    poly46.ps[2] = Point(1346.33, 1110.05);\n    poly46.ps[3] = Point(1346.33, 1092.05);\n    new ShapeRef(router, poly46, 46);\n    \n    Polygon poly47(4);\n    poly47.ps[0] = Point(1539.2, 443.545);\n    poly47.ps[1] = Point(1539.2, 461.545);\n    poly47.ps[2] = Point(1521.2, 461.545);\n    poly47.ps[3] = Point(1521.2, 443.545);\n    new ShapeRef(router, poly47, 47);\n    \n    Polygon poly48(4);\n    poly48.ps[0] = Point(1539.2, 535.545);\n    poly48.ps[1] = Point(1539.2, 553.545);\n    poly48.ps[2] = Point(1521.2, 553.545);\n    poly48.ps[3] = Point(1521.2, 535.545);\n    new ShapeRef(router, poly48, 48);\n    \n    Polygon poly49(4);\n    poly49.ps[0] = Point(1479.2, 761.545);\n    poly49.ps[1] = Point(1479.2, 779.545);\n    poly49.ps[2] = Point(1461.2, 779.545);\n    poly49.ps[3] = Point(1461.2, 761.545);\n    new ShapeRef(router, poly49, 49);\n    \n    Polygon poly50(4);\n    poly50.ps[0] = Point(1539.2, 627.545);\n    poly50.ps[1] = Point(1539.2, 645.545);\n    poly50.ps[2] = Point(1521.2, 645.545);\n    poly50.ps[3] = Point(1521.2, 627.545);\n    new ShapeRef(router, poly50, 50);\n    \n    Polygon poly51(4);\n    poly51.ps[0] = Point(1553.49, 850.545);\n    poly51.ps[1] = Point(1553.49, 868.545);\n    poly51.ps[2] = Point(1535.49, 868.545);\n    poly51.ps[3] = Point(1535.49, 850.545);\n    new ShapeRef(router, poly51, 51);\n    \n    Polygon poly52(4);\n    poly52.ps[0] = Point(1665.49, 850.545);\n    poly52.ps[1] = Point(1665.49, 868.545);\n    poly52.ps[2] = Point(1647.49, 868.545);\n    poly52.ps[3] = Point(1647.49, 850.545);\n    new ShapeRef(router, poly52, 52);\n    \n    Polygon poly53(4);\n    poly53.ps[0] = Point(1479.2, 1194.05);\n    poly53.ps[1] = Point(1479.2, 1212.05);\n    poly53.ps[2] = Point(1461.2, 1212.05);\n    poly53.ps[3] = Point(1461.2, 1194.05);\n    new ShapeRef(router, poly53, 53);\n    \n    Polygon poly54(4);\n    poly54.ps[0] = Point(1479.2, 1290.21);\n    poly54.ps[1] = Point(1479.2, 1308.21);\n    poly54.ps[2] = Point(1461.2, 1308.21);\n    poly54.ps[3] = Point(1461.2, 1290.21);\n    new ShapeRef(router, poly54, 54);\n    \n    Polygon poly55(4);\n    poly55.ps[0] = Point(1479.2, 1451.71);\n    poly55.ps[1] = Point(1479.2, 1469.71);\n    poly55.ps[2] = Point(1461.2, 1469.71);\n    poly55.ps[3] = Point(1461.2, 1451.71);\n    new ShapeRef(router, poly55, 55);\n    \n    Polygon poly56(4);\n    poly56.ps[0] = Point(1732.2, 1297.71);\n    poly56.ps[1] = Point(1732.2, 1315.71);\n    poly56.ps[2] = Point(1714.2, 1315.71);\n    poly56.ps[3] = Point(1714.2, 1297.71);\n    new ShapeRef(router, poly56, 56);\n    \n    Polygon poly57(4);\n    poly57.ps[0] = Point(1441, 200);\n    poly57.ps[1] = Point(1441, 363);\n    poly57.ps[2] = Point(1149, 363);\n    poly57.ps[3] = Point(1149, 200);\n    new ShapeRef(router, poly57, 57);\n    \n    Polygon poly58(4);\n    poly58.ps[0] = Point(342, 443.545);\n    poly58.ps[1] = Point(342, 501.545);\n    poly58.ps[2] = Point(49, 501.545);\n    poly58.ps[3] = Point(49, 443.545);\n    new ShapeRef(router, poly58, 58);\n    \n    Polygon poly59(4);\n    poly59.ps[0] = Point(1111, 617.545);\n    poly59.ps[1] = Point(1111, 789.545);\n    poly59.ps[2] = Point(1028, 789.545);\n    poly59.ps[3] = Point(1028, 617.545);\n    new ShapeRef(router, poly59, 59);\n    \n    Polygon poly60(4);\n    poly60.ps[0] = Point(1135, 158);\n    poly60.ps[1] = Point(1135, 176);\n    poly60.ps[2] = Point(1117, 176);\n    poly60.ps[3] = Point(1117, 158);\n    new ShapeRef(router, poly60, 60);\n    \n    Polygon poly61(4);\n    poly61.ps[0] = Point(1025.8, 158);\n    poly61.ps[1] = Point(1025.8, 176);\n    poly61.ps[2] = Point(1007.8, 176);\n    poly61.ps[3] = Point(1007.8, 158);\n    new ShapeRef(router, poly61, 61);\n    \n    Polygon poly62(4);\n    poly62.ps[0] = Point(1273, 1194.05);\n    poly62.ps[1] = Point(1273, 1212.05);\n    poly62.ps[2] = Point(1255, 1212.05);\n    poly62.ps[3] = Point(1255, 1194.05);\n    new ShapeRef(router, poly62, 62);\n    \n    Polygon poly108(4);\n    poly108.ps[0] = Point(1678.49, 1184.05);\n    poly108.ps[1] = Point(1678.49, 1222.05);\n    poly108.ps[2] = Point(1640.49, 1222.05);\n    poly108.ps[3] = Point(1640.49, 1184.05);\n    new ShapeRef(router, poly108, 108);\n    \n    Polygon poly109(4);\n    poly109.ps[0] = Point(1559.2, 1280.21);\n    poly109.ps[1] = Point(1559.2, 1318.21);\n    poly109.ps[2] = Point(1521.2, 1318.21);\n    poly109.ps[3] = Point(1521.2, 1280.21);\n    new ShapeRef(router, poly109, 109);\n    \n    Polygon poly110(4);\n    poly110.ps[0] = Point(1374.33, 1124.05);\n    poly110.ps[1] = Point(1374.33, 1162.05);\n    poly110.ps[2] = Point(1336.33, 1162.05);\n    poly110.ps[3] = Point(1336.33, 1124.05);\n    new ShapeRef(router, poly110, 110);\n    \n    Polygon poly111(4);\n    poly111.ps[0] = Point(1374.33, 1026.05);\n    poly111.ps[1] = Point(1374.33, 1064.05);\n    poly111.ps[2] = Point(1336.33, 1064.05);\n    poly111.ps[3] = Point(1336.33, 1026.05);\n    new ShapeRef(router, poly111, 111);\n    \n    Polygon poly112(4);\n    poly112.ps[0] = Point(1489.2, 617.545);\n    poly112.ps[1] = Point(1489.2, 655.545);\n    poly112.ps[2] = Point(1451.2, 655.545);\n    poly112.ps[3] = Point(1451.2, 617.545);\n    new ShapeRef(router, poly112, 112);\n    \n    Polygon poly113(4);\n    poly113.ps[0] = Point(1359.2, 741.379);\n    poly113.ps[1] = Point(1359.2, 779.379);\n    poly113.ps[2] = Point(1321.2, 779.379);\n    poly113.ps[3] = Point(1321.2, 741.379);\n    new ShapeRef(router, poly113, 113);\n    \n    Polygon poly114(4);\n    poly114.ps[0] = Point(1359.2, 525.545);\n    poly114.ps[1] = Point(1359.2, 563.545);\n    poly114.ps[2] = Point(1321.2, 563.545);\n    poly114.ps[3] = Point(1321.2, 525.545);\n    new ShapeRef(router, poly114, 114);\n    \n    Polygon poly115(4);\n    poly115.ps[0] = Point(1609.2, 617.545);\n    poly115.ps[1] = Point(1609.2, 655.545);\n    poly115.ps[2] = Point(1571.2, 655.545);\n    poly115.ps[3] = Point(1571.2, 617.545);\n    new ShapeRef(router, poly115, 115);\n    \n    Polygon poly116(4);\n    poly116.ps[0] = Point(1678.49, 525.545);\n    poly116.ps[1] = Point(1678.49, 563.545);\n    poly116.ps[2] = Point(1640.49, 563.545);\n    poly116.ps[3] = Point(1640.49, 525.545);\n    new ShapeRef(router, poly116, 116);\n    \n    Polygon poly117(4);\n    poly117.ps[0] = Point(1563.49, 907.545);\n    poly117.ps[1] = Point(1563.49, 945.545);\n    poly117.ps[2] = Point(1525.49, 945.545);\n    poly117.ps[3] = Point(1525.49, 907.545);\n    new ShapeRef(router, poly117, 117);\n    \n    Polygon poly118(4);\n    poly118.ps[0] = Point(409, 565.545);\n    poly118.ps[1] = Point(409, 603.545);\n    poly118.ps[2] = Point(371, 603.545);\n    poly118.ps[3] = Point(371, 565.545);\n    new ShapeRef(router, poly118, 118);\n    \n    Polygon poly119(4);\n    poly119.ps[0] = Point(1359.2, 904.545);\n    poly119.ps[1] = Point(1359.2, 942.545);\n    poly119.ps[2] = Point(1321.2, 942.545);\n    poly119.ps[3] = Point(1321.2, 904.545);\n    new ShapeRef(router, poly119, 119);\n    \n    Polygon poly120(4);\n    poly120.ps[0] = Point(648, 1082.05);\n    poly120.ps[1] = Point(648, 1120.05);\n    poly120.ps[2] = Point(610, 1120.05);\n    poly120.ps[3] = Point(610, 1082.05);\n    new ShapeRef(router, poly120, 120);\n    \n    Polygon poly121(4);\n    poly121.ps[0] = Point(1196, 1297.71);\n    poly121.ps[1] = Point(1196, 1335.71);\n    poly121.ps[2] = Point(1158, 1335.71);\n    poly121.ps[3] = Point(1158, 1297.71);\n    new ShapeRef(router, poly121, 121);\n    \n    Polygon poly122(4);\n    poly122.ps[0] = Point(1343, 1184.05);\n    poly122.ps[1] = Point(1343, 1222.05);\n    poly122.ps[2] = Point(1305, 1222.05);\n    poly122.ps[3] = Point(1305, 1184.05);\n    new ShapeRef(router, poly122, 122);\n    \n    Polygon poly123(4);\n    poly123.ps[0] = Point(1559.2, 1441.71);\n    poly123.ps[1] = Point(1559.2, 1479.71);\n    poly123.ps[2] = Point(1521.2, 1479.71);\n    poly123.ps[3] = Point(1521.2, 1441.71);\n    new ShapeRef(router, poly123, 123);\n    \n    Polygon poly124(4);\n    poly124.ps[0] = Point(1771.2, 1758.71);\n    poly124.ps[1] = Point(1771.2, 1796.71);\n    poly124.ps[2] = Point(1733.2, 1796.71);\n    poly124.ps[3] = Point(1733.2, 1758.71);\n    new ShapeRef(router, poly124, 124);\n    \n    Polygon poly125(4);\n    poly125.ps[0] = Point(957.8, 965.545);\n    poly125.ps[1] = Point(957.8, 1003.55);\n    poly125.ps[2] = Point(919.8, 1003.55);\n    poly125.ps[3] = Point(919.8, 965.545);\n    new ShapeRef(router, poly125, 125);\n    \n    Polygon poly126(4);\n    poly126.ps[0] = Point(1131, 1026.05);\n    poly126.ps[1] = Point(1131, 1064.05);\n    poly126.ps[2] = Point(1093, 1064.05);\n    poly126.ps[3] = Point(1093, 1026.05);\n    new ShapeRef(router, poly126, 126);\n    \n    Polygon poly127(4);\n    poly127.ps[0] = Point(665, 939.925);\n    poly127.ps[1] = Point(665, 977.925);\n    poly127.ps[2] = Point(627, 977.925);\n    poly127.ps[3] = Point(627, 939.925);\n    new ShapeRef(router, poly127, 127);\n    \n    Polygon poly128(4);\n    poly128.ps[0] = Point(418, 1184.05);\n    poly128.ps[1] = Point(418, 1222.05);\n    poly128.ps[2] = Point(380, 1222.05);\n    poly128.ps[3] = Point(380, 1184.05);\n    new ShapeRef(router, poly128, 128);\n    \n    Polygon poly129(4);\n    poly129.ps[0] = Point(418, 1276.05);\n    poly129.ps[1] = Point(418, 1314.05);\n    poly129.ps[2] = Point(380, 1314.05);\n    poly129.ps[3] = Point(380, 1276.05);\n    new ShapeRef(router, poly129, 129);\n    \n    ConnRef *connRef223 = new ConnRef(router, 223);\n    ConnEnd srcPt223(Point(1544.49, 849.545), 1);\n    connRef223->setSourceEndpoint(srcPt223);\n    ConnEnd dstPt223(Point(1544.49, 760.379), 15);\n    connRef223->setDestEndpoint(dstPt223);\n    connRef223->setRoutingType((ConnType)2);\n\n    ConnRef *connRef224 = new ConnRef(router, 224);\n    ConnEnd srcPt224(Point(329, 1295.05), 4);\n    connRef224->setSourceEndpoint(srcPt224);\n    ConnEnd dstPt224(Point(243, 1295.05), 15);\n    connRef224->setDestEndpoint(dstPt224);\n    connRef224->setRoutingType((ConnType)2);\n\n    ConnRef *connRef225 = new ConnRef(router, 225);\n    ConnEnd srcPt225(Point(329, 1203.05), 4);\n    connRef225->setSourceEndpoint(srcPt225);\n    ConnEnd dstPt225(Point(243, 1295.05), 15);\n    connRef225->setDestEndpoint(dstPt225);\n    connRef225->setRoutingType((ConnType)2);\n\n    ConnRef *connRef226 = new ConnRef(router, 226);\n    ConnEnd srcPt226(Point(135, 1159.05), 2);\n    connRef226->setSourceEndpoint(srcPt226);\n    ConnEnd dstPt226(Point(938.8, 1851.71), 15);\n    connRef226->setDestEndpoint(dstPt226);\n    connRef226->setRoutingType((ConnType)2);\n\n    ConnRef *connRef227 = new ConnRef(router, 227);\n    ConnEnd srcPt227(Point(1480.2, 738.545), 8);\n    connRef227->setSourceEndpoint(srcPt227);\n    ConnEnd dstPt227(Point(1544.49, 760.379), 15);\n    connRef227->setDestEndpoint(dstPt227);\n    connRef227->setRoutingType((ConnType)2);\n\n    ConnRef *connRef228 = new ConnRef(router, 228);\n    ConnEnd srcPt228(Point(508, 446), 4);\n    connRef228->setSourceEndpoint(srcPt228);\n    ConnEnd dstPt228(Point(375, 446), 15);\n    connRef228->setDestEndpoint(dstPt228);\n    connRef228->setRoutingType((ConnType)2);\n\n    ConnRef *connRef229 = new ConnRef(router, 229);\n    ConnEnd srcPt229(Point(324.2, 686.545), 4);\n    connRef229->setSourceEndpoint(srcPt229);\n    ConnEnd dstPt229(Point(100, 686.545), 15);\n    connRef229->setDestEndpoint(dstPt229);\n    connRef229->setRoutingType((ConnType)2);\n\n    ConnRef *connRef230 = new ConnRef(router, 230);\n    ConnEnd srcPt230(Point(324.2, 686.545), 4);\n    connRef230->setSourceEndpoint(srcPt230);\n    ConnEnd dstPt230(Point(160, 822.545), 15);\n    connRef230->setDestEndpoint(dstPt230);\n    connRef230->setRoutingType((ConnType)2);\n\n    ConnRef *connRef231 = new ConnRef(router, 231);\n    ConnEnd srcPt231(Point(324.2, 686.545), 4);\n    connRef231->setSourceEndpoint(srcPt231);\n    ConnEnd dstPt231(Point(646, 686.545), 15);\n    connRef231->setDestEndpoint(dstPt231);\n    connRef231->setRoutingType((ConnType)2);\n\n    ConnRef *connRef232 = new ConnRef(router, 232);\n    ConnEnd srcPt232(Point(201, 1149.05), 8);\n    connRef232->setSourceEndpoint(srcPt232);\n    ConnEnd dstPt232(Point(938.8, 1851.71), 15);\n    connRef232->setDestEndpoint(dstPt232);\n    connRef232->setRoutingType((ConnType)2);\n\n    ConnRef *connRef233 = new ConnRef(router, 233);\n    ConnEnd srcPt233(Point(334.2, 780.545), 2);\n    connRef233->setSourceEndpoint(srcPt233);\n    ConnEnd dstPt233(Point(160, 822.545), 15);\n    connRef233->setDestEndpoint(dstPt233);\n    connRef233->setRoutingType((ConnType)2);\n\n    ConnRef *connRef234 = new ConnRef(router, 234);\n    ConnEnd srcPt234(Point(334.2, 780.545), 2);\n    connRef234->setSourceEndpoint(srcPt234);\n    ConnEnd dstPt234(Point(646, 822.545), 15);\n    connRef234->setDestEndpoint(dstPt234);\n    connRef234->setRoutingType((ConnType)2);\n\n    ConnRef *connRef235 = new ConnRef(router, 235);\n    ConnEnd srcPt235(Point(334.2, 780.545), 2);\n    connRef235->setSourceEndpoint(srcPt235);\n    ConnEnd dstPt235(Point(251, 1101.05), 15);\n    connRef235->setDestEndpoint(dstPt235);\n    connRef235->setRoutingType((ConnType)2);\n\n    ConnRef *connRef236 = new ConnRef(router, 236);\n    ConnEnd srcPt236(Point(334.2, 832.545), 2);\n    connRef236->setSourceEndpoint(srcPt236);\n    ConnEnd dstPt236(Point(160, 822.545), 15);\n    connRef236->setDestEndpoint(dstPt236);\n    connRef236->setRoutingType((ConnType)2);\n\n    ConnRef *connRef237 = new ConnRef(router, 237);\n    ConnEnd srcPt237(Point(334.2, 832.545), 2);\n    connRef237->setSourceEndpoint(srcPt237);\n    ConnEnd dstPt237(Point(646, 822.545), 15);\n    connRef237->setDestEndpoint(dstPt237);\n    connRef237->setRoutingType((ConnType)2);\n\n    ConnRef *connRef238 = new ConnRef(router, 238);\n    ConnEnd srcPt238(Point(334.2, 832.545), 2);\n    connRef238->setSourceEndpoint(srcPt238);\n    ConnEnd dstPt238(Point(251, 1101.05), 15);\n    connRef238->setDestEndpoint(dstPt238);\n    connRef238->setRoutingType((ConnType)2);\n\n    ConnRef *connRef239 = new ConnRef(router, 239);\n    ConnEnd srcPt239(Point(334.2, 884.545), 2);\n    connRef239->setSourceEndpoint(srcPt239);\n    ConnEnd dstPt239(Point(160, 822.545), 15);\n    connRef239->setDestEndpoint(dstPt239);\n    connRef239->setRoutingType((ConnType)2);\n\n    ConnRef *connRef240 = new ConnRef(router, 240);\n    ConnEnd srcPt240(Point(334.2, 884.545), 2);\n    connRef240->setSourceEndpoint(srcPt240);\n    ConnEnd dstPt240(Point(646, 822.545), 15);\n    connRef240->setDestEndpoint(dstPt240);\n    connRef240->setRoutingType((ConnType)2);\n\n    ConnRef *connRef241 = new ConnRef(router, 241);\n    ConnEnd srcPt241(Point(334.2, 884.545), 2);\n    connRef241->setSourceEndpoint(srcPt241);\n    ConnEnd dstPt241(Point(251, 1101.05), 15);\n    connRef241->setDestEndpoint(dstPt241);\n    connRef241->setRoutingType((ConnType)2);\n\n    ConnRef *connRef242 = new ConnRef(router, 242);\n    ConnEnd srcPt242(Point(457.5, 1101.05), 4);\n    connRef242->setSourceEndpoint(srcPt242);\n    ConnEnd dstPt242(Point(251, 1101.05), 15);\n    connRef242->setDestEndpoint(dstPt242);\n    connRef242->setRoutingType((ConnType)2);\n\n    ConnRef *connRef243 = new ConnRef(router, 243);\n    ConnEnd srcPt243(Point(576, 1028.55), 4);\n    connRef243->setSourceEndpoint(srcPt243);\n    ConnEnd dstPt243(Point(407, 1028.55), 15);\n    connRef243->setDestEndpoint(dstPt243);\n    connRef243->setRoutingType((ConnType)2);\n\n    ConnRef *connRef244 = new ConnRef(router, 244);\n    ConnEnd srcPt244(Point(579, 1203.05), 8);\n    connRef244->setSourceEndpoint(srcPt244);\n    ConnEnd dstPt244(Point(399, 1203.05), 15);\n    connRef244->setDestEndpoint(dstPt244);\n    connRef244->setRoutingType((ConnType)2);\n\n    ConnRef *connRef245 = new ConnRef(router, 245);\n    ConnEnd srcPt245(Point(579, 1203.05), 8);\n    connRef245->setSourceEndpoint(srcPt245);\n    ConnEnd dstPt245(Point(646, 1227.55), 15);\n    connRef245->setDestEndpoint(dstPt245);\n    connRef245->setRoutingType((ConnType)2);\n\n    ConnRef *connRef246 = new ConnRef(router, 246);\n    ConnEnd srcPt246(Point(725, 446), 4);\n    connRef246->setSourceEndpoint(srcPt246);\n    ConnEnd dstPt246(Point(639.5, 446), 15);\n    connRef246->setDestEndpoint(dstPt246);\n    connRef246->setRoutingType((ConnType)2);\n\n    ConnRef *connRef247 = new ConnRef(router, 247);\n    ConnEnd srcPt247(Point(851, 446), 4);\n    connRef247->setSourceEndpoint(srcPt247);\n    ConnEnd dstPt247(Point(801, 446), 15);\n    connRef247->setDestEndpoint(dstPt247);\n    connRef247->setRoutingType((ConnType)2);\n\n    ConnRef *connRef248 = new ConnRef(router, 248);\n    ConnEnd srcPt248(Point(528, 584.545), 8);\n    connRef248->setSourceEndpoint(srcPt248);\n    ConnEnd dstPt248(Point(646, 686.545), 15);\n    connRef248->setDestEndpoint(dstPt248);\n    connRef248->setRoutingType((ConnType)2);\n\n    ConnRef *connRef249 = new ConnRef(router, 249);\n    ConnEnd srcPt249(Point(528, 584.545), 8);\n    connRef249->setSourceEndpoint(srcPt249);\n    ConnEnd dstPt249(Point(629, 584.545), 15);\n    connRef249->setDestEndpoint(dstPt249);\n    connRef249->setRoutingType((ConnType)2);\n\n    ConnRef *connRef250 = new ConnRef(router, 250);\n    ConnEnd srcPt250(Point(782.5, 822.545), 4);\n    connRef250->setSourceEndpoint(srcPt250);\n    ConnEnd dstPt250(Point(646, 822.545), 15);\n    connRef250->setDestEndpoint(dstPt250);\n    connRef250->setRoutingType((ConnType)2);\n\n    ConnRef *connRef251 = new ConnRef(router, 251);\n    ConnEnd srcPt251(Point(787, 1028.55), 4);\n    connRef251->setSourceEndpoint(srcPt251);\n    ConnEnd dstPt251(Point(698, 1028.55), 15);\n    connRef251->setDestEndpoint(dstPt251);\n    connRef251->setRoutingType((ConnType)2);\n\n    ConnRef *connRef252 = new ConnRef(router, 252);\n    ConnEnd srcPt252(Point(779, 1133.55), 2);\n    connRef252->setSourceEndpoint(srcPt252);\n    ConnEnd dstPt252(Point(646, 1227.55), 15);\n    connRef252->setDestEndpoint(dstPt252);\n    connRef252->setRoutingType((ConnType)2);\n\n    ConnRef *connRef253 = new ConnRef(router, 253);\n    ConnEnd srcPt253(Point(782.5, 686.545), 4);\n    connRef253->setSourceEndpoint(srcPt253);\n    ConnEnd dstPt253(Point(646, 686.545), 15);\n    connRef253->setDestEndpoint(dstPt253);\n    connRef253->setRoutingType((ConnType)2);\n\n    ConnRef *connRef254 = new ConnRef(router, 254);\n    ConnEnd srcPt254(Point(861, 1185.55), 2);\n    connRef254->setSourceEndpoint(srcPt254);\n    ConnEnd dstPt254(Point(930, 1227.55), 15);\n    connRef254->setDestEndpoint(dstPt254);\n    connRef254->setRoutingType((ConnType)2);\n\n    ConnRef *connRef255 = new ConnRef(router, 255);\n    ConnEnd srcPt255(Point(860, 1460.71), 4);\n    connRef255->setSourceEndpoint(srcPt255);\n    ConnEnd dstPt255(Point(810, 1460.71), 15);\n    connRef255->setDestEndpoint(dstPt255);\n    connRef255->setRoutingType((ConnType)2);\n\n    ConnRef *connRef256 = new ConnRef(router, 256);\n    ConnEnd srcPt256(Point(880, 1460.71), 8);\n    connRef256->setSourceEndpoint(srcPt256);\n    ConnEnd dstPt256(Point(930, 1227.55), 15);\n    connRef256->setDestEndpoint(dstPt256);\n    connRef256->setRoutingType((ConnType)2);\n\n    ConnRef *connRef257 = new ConnRef(router, 257);\n    ConnEnd srcPt257(Point(744, 1593.71), 4);\n    connRef257->setSourceEndpoint(srcPt257);\n    ConnEnd dstPt257(Point(549, 1786.85), 15);\n    connRef257->setDestEndpoint(dstPt257);\n    connRef257->setRoutingType((ConnType)2);\n\n    ConnRef *connRef258 = new ConnRef(router, 258);\n    ConnEnd srcPt258(Point(744, 1593.71), 4);\n    connRef258->setSourceEndpoint(srcPt258);\n    ConnEnd dstPt258(Point(698, 1615.71), 15);\n    connRef258->setDestEndpoint(dstPt258);\n    connRef258->setRoutingType((ConnType)2);\n\n    ConnRef *connRef259 = new ConnRef(router, 259);\n    ConnEnd srcPt259(Point(816, 1626.71), 4);\n    connRef259->setSourceEndpoint(srcPt259);\n    ConnEnd dstPt259(Point(698, 1615.71), 15);\n    connRef259->setDestEndpoint(dstPt259);\n    connRef259->setRoutingType((ConnType)2);\n\n    ConnRef *connRef260 = new ConnRef(router, 260);\n    ConnEnd srcPt260(Point(925, 250), 1);\n    connRef260->setSourceEndpoint(srcPt260);\n    ConnEnd dstPt260(Point(925, 115), 15);\n    connRef260->setDestEndpoint(dstPt260);\n    connRef260->setRoutingType((ConnType)2);\n\n    ConnRef *connRef261 = new ConnRef(router, 261);\n    ConnEnd srcPt261(Point(925, 334), 1);\n    connRef261->setSourceEndpoint(srcPt261);\n    ConnEnd dstPt261(Point(925, 302), 15);\n    connRef261->setDestEndpoint(dstPt261);\n    connRef261->setRoutingType((ConnType)2);\n\n    ConnRef *connRef262 = new ConnRef(router, 262);\n    ConnEnd srcPt262(Point(925, 354), 2);\n    connRef262->setSourceEndpoint(srcPt262);\n    ConnEnd dstPt262(Point(925, 446), 15);\n    connRef262->setDestEndpoint(dstPt262);\n    connRef262->setRoutingType((ConnType)2);\n\n    ConnRef *connRef263 = new ConnRef(router, 263);\n    ConnEnd srcPt263(Point(925, 669.045), 1);\n    connRef263->setSourceEndpoint(srcPt263);\n    ConnEnd dstPt263(Point(925, 446), 15);\n    connRef263->setDestEndpoint(dstPt263);\n    connRef263->setRoutingType((ConnType)2);\n\n    ConnRef *connRef264 = new ConnRef(router, 264);\n    ConnEnd srcPt264(Point(925, 922.545), 1);\n    connRef264->setSourceEndpoint(srcPt264);\n    ConnEnd dstPt264(Point(925, 822.545), 15);\n    connRef264->setDestEndpoint(dstPt264);\n    connRef264->setRoutingType((ConnType)2);\n\n    ConnRef *connRef265 = new ConnRef(router, 265);\n    ConnEnd srcPt265(Point(995, 115), 8);\n    connRef265->setSourceEndpoint(srcPt265);\n    ConnEnd dstPt265(Point(1101, 115), 15);\n    connRef265->setDestEndpoint(dstPt265);\n    connRef265->setRoutingType((ConnType)2);\n\n    ConnRef *connRef266 = new ConnRef(router, 266);\n    ConnEnd srcPt266(Point(1000, 446), 8);\n    connRef266->setSourceEndpoint(srcPt266);\n    ConnEnd dstPt266(Point(1112, 446), 15);\n    connRef266->setDestEndpoint(dstPt266);\n    connRef266->setRoutingType((ConnType)2);\n\n    ConnRef *connRef267 = new ConnRef(router, 267);\n    ConnEnd srcPt267(Point(1182, 446), 8);\n    connRef267->setSourceEndpoint(srcPt267);\n    ConnEnd dstPt267(Point(1235, 446), 15);\n    connRef267->setDestEndpoint(dstPt267);\n    connRef267->setRoutingType((ConnType)2);\n\n    ConnRef *connRef268 = new ConnRef(router, 268);\n    ConnEnd srcPt268(Point(1162, 760.379), 8);\n    connRef268->setSourceEndpoint(srcPt268);\n    ConnEnd dstPt268(Point(1340.2, 760.379), 15);\n    connRef268->setDestEndpoint(dstPt268);\n    connRef268->setRoutingType((ConnType)2);\n\n    ConnRef *connRef269 = new ConnRef(router, 269);\n    ConnEnd srcPt269(Point(1098, 832.545), 2);\n    connRef269->setSourceEndpoint(srcPt269);\n    ConnEnd dstPt269(Point(1177, 1316.71), 15);\n    connRef269->setDestEndpoint(dstPt269);\n    connRef269->setRoutingType((ConnType)2);\n\n    ConnRef *connRef270 = new ConnRef(router, 270);\n    ConnEnd srcPt270(Point(970, 1097.21), 1);\n    connRef270->setSourceEndpoint(srcPt270);\n    ConnEnd dstPt270(Point(1092, 1107.21), 15);\n    connRef270->setDestEndpoint(dstPt270);\n    connRef270->setRoutingType((ConnType)2);\n\n    ConnRef *connRef271 = new ConnRef(router, 271);\n    ConnEnd srcPt271(Point(938.8, 1639.71), 2);\n    connRef271->setSourceEndpoint(srcPt271);\n    ConnEnd dstPt271(Point(938.8, 1685.71), 15);\n    connRef271->setDestEndpoint(dstPt271);\n    connRef271->setRoutingType((ConnType)2);\n\n    ConnRef *connRef272 = new ConnRef(router, 272);\n    ConnEnd srcPt272(Point(938.8, 1619.71), 1);\n    connRef272->setSourceEndpoint(srcPt272);\n    ConnEnd dstPt272(Point(930, 1227.55), 15);\n    connRef272->setDestEndpoint(dstPt272);\n    connRef272->setRoutingType((ConnType)2);\n\n    ConnRef *connRef273 = new ConnRef(router, 273);\n    ConnEnd srcPt273(Point(768, 1685.71), 8);\n    connRef273->setSourceEndpoint(srcPt273);\n    ConnEnd dstPt273(Point(938.8, 1685.71), 15);\n    connRef273->setDestEndpoint(dstPt273);\n    connRef273->setRoutingType((ConnType)2);\n\n    ConnRef *connRef274 = new ConnRef(router, 274);\n    ConnEnd srcPt274(Point(748, 1685.71), 4);\n    connRef274->setSourceEndpoint(srcPt274);\n    ConnEnd dstPt274(Point(549, 1786.85), 15);\n    connRef274->setDestEndpoint(dstPt274);\n    connRef274->setRoutingType((ConnType)2);\n\n    ConnRef *connRef275 = new ConnRef(router, 275);\n    ConnEnd srcPt275(Point(768, 1777.71), 8);\n    connRef275->setSourceEndpoint(srcPt275);\n    ConnEnd dstPt275(Point(938.8, 1685.71), 15);\n    connRef275->setDestEndpoint(dstPt275);\n    connRef275->setRoutingType((ConnType)2);\n\n    ConnRef *connRef276 = new ConnRef(router, 276);\n    ConnEnd srcPt276(Point(768, 1809.71), 8);\n    connRef276->setSourceEndpoint(srcPt276);\n    ConnEnd dstPt276(Point(938.8, 1685.71), 15);\n    connRef276->setDestEndpoint(dstPt276);\n    connRef276->setRoutingType((ConnType)2);\n\n    ConnRef *connRef277 = new ConnRef(router, 277);\n    ConnEnd srcPt277(Point(938.8, 1819.71), 2);\n    connRef277->setSourceEndpoint(srcPt277);\n    ConnEnd dstPt277(Point(938.8, 1851.71), 15);\n    connRef277->setDestEndpoint(dstPt277);\n    connRef277->setRoutingType((ConnType)2);\n\n    ConnRef *connRef278 = new ConnRef(router, 278);\n    ConnEnd srcPt278(Point(1228, 1572.71), 2);\n    connRef278->setSourceEndpoint(srcPt278);\n    ConnEnd dstPt278(Point(1177, 1316.71), 15);\n    connRef278->setDestEndpoint(dstPt278);\n    connRef278->setRoutingType((ConnType)2);\n\n    ConnRef *connRef279 = new ConnRef(router, 279);\n    ConnEnd srcPt279(Point(1228, 1552.71), 1);\n    connRef279->setSourceEndpoint(srcPt279);\n    ConnEnd dstPt279(Point(1324, 1203.05), 15);\n    connRef279->setDestEndpoint(dstPt279);\n    connRef279->setRoutingType((ConnType)2);\n\n    ConnRef *connRef280 = new ConnRef(router, 280);\n    ConnEnd srcPt280(Point(1228, 1572.71), 2);\n    connRef280->setSourceEndpoint(srcPt280);\n    ConnEnd dstPt280(Point(1540.2, 1460.71), 15);\n    connRef280->setDestEndpoint(dstPt280);\n    connRef280->setRoutingType((ConnType)2);\n\n    ConnRef *connRef281 = new ConnRef(router, 281);\n    ConnEnd srcPt281(Point(1238, 1460.71), 8);\n    connRef281->setSourceEndpoint(srcPt281);\n    ConnEnd dstPt281(Point(1324, 1203.05), 15);\n    connRef281->setDestEndpoint(dstPt281);\n    connRef281->setRoutingType((ConnType)2);\n\n    ConnRef *connRef282 = new ConnRef(router, 282);\n    ConnEnd srcPt282(Point(1340.2, 672.045), 1);\n    connRef282->setSourceEndpoint(srcPt282);\n    ConnEnd dstPt282(Point(1340.2, 544.545), 15);\n    connRef282->setDestEndpoint(dstPt282);\n    connRef282->setRoutingType((ConnType)2);\n\n    ConnRef *connRef283 = new ConnRef(router, 283);\n    ConnEnd srcPt283(Point(1355.33, 1111.05), 2);\n    connRef283->setSourceEndpoint(srcPt283);\n    ConnEnd dstPt283(Point(1355.33, 1143.05), 15);\n    connRef283->setDestEndpoint(dstPt283);\n    connRef283->setRoutingType((ConnType)2);\n\n    ConnRef *connRef284 = new ConnRef(router, 284);\n    ConnEnd srcPt284(Point(1540.2, 452.545), 8);\n    connRef284->setSourceEndpoint(srcPt284);\n    ConnEnd dstPt284(Point(1659.49, 544.545), 15);\n    connRef284->setDestEndpoint(dstPt284);\n    connRef284->setRoutingType((ConnType)2);\n\n    ConnRef *connRef285 = new ConnRef(router, 285);\n    ConnEnd srcPt285(Point(1540.2, 544.545), 8);\n    connRef285->setSourceEndpoint(srcPt285);\n    ConnEnd dstPt285(Point(1590.2, 636.545), 15);\n    connRef285->setDestEndpoint(dstPt285);\n    connRef285->setRoutingType((ConnType)2);\n\n    ConnRef *connRef286 = new ConnRef(router, 286);\n    ConnEnd srcPt286(Point(1540.2, 544.545), 8);\n    connRef286->setSourceEndpoint(srcPt286);\n    ConnEnd dstPt286(Point(1659.49, 544.545), 15);\n    connRef286->setDestEndpoint(dstPt286);\n    connRef286->setRoutingType((ConnType)2);\n\n    ConnRef *connRef287 = new ConnRef(router, 287);\n    ConnEnd srcPt287(Point(1480.2, 770.545), 8);\n    connRef287->setSourceEndpoint(srcPt287);\n    ConnEnd dstPt287(Point(1544.49, 760.379), 15);\n    connRef287->setDestEndpoint(dstPt287);\n    connRef287->setRoutingType((ConnType)2);\n\n    ConnRef *connRef288 = new ConnRef(router, 288);\n    ConnEnd srcPt288(Point(1520.2, 636.545), 4);\n    connRef288->setSourceEndpoint(srcPt288);\n    ConnEnd dstPt288(Point(1470.2, 636.545), 15);\n    connRef288->setDestEndpoint(dstPt288);\n    connRef288->setRoutingType((ConnType)2);\n\n    ConnRef *connRef289 = new ConnRef(router, 289);\n    ConnEnd srcPt289(Point(1540.2, 636.545), 8);\n    connRef289->setSourceEndpoint(srcPt289);\n    ConnEnd dstPt289(Point(1590.2, 636.545), 15);\n    connRef289->setDestEndpoint(dstPt289);\n    connRef289->setRoutingType((ConnType)2);\n\n    ConnRef *connRef290 = new ConnRef(router, 290);\n    ConnEnd srcPt290(Point(1544.49, 869.545), 2);\n    connRef290->setSourceEndpoint(srcPt290);\n    ConnEnd dstPt290(Point(1544.49, 926.545), 15);\n    connRef290->setDestEndpoint(dstPt290);\n    connRef290->setRoutingType((ConnType)2);\n\n    ConnRef *connRef291 = new ConnRef(router, 291);\n    ConnEnd srcPt291(Point(1656.49, 849.545), 1);\n    connRef291->setSourceEndpoint(srcPt291);\n    ConnEnd dstPt291(Point(1659.49, 1203.05), 15);\n    connRef291->setDestEndpoint(dstPt291);\n    connRef291->setRoutingType((ConnType)2);\n\n    ConnRef *connRef292 = new ConnRef(router, 292);\n    ConnEnd srcPt292(Point(1656.49, 849.545), 1);\n    connRef292->setSourceEndpoint(srcPt292);\n    ConnEnd dstPt292(Point(1590.2, 636.545), 15);\n    connRef292->setDestEndpoint(dstPt292);\n    connRef292->setRoutingType((ConnType)2);\n\n    ConnRef *connRef293 = new ConnRef(router, 293);\n    ConnEnd srcPt293(Point(1656.49, 849.545), 1);\n    connRef293->setSourceEndpoint(srcPt293);\n    ConnEnd dstPt293(Point(1659.49, 544.545), 15);\n    connRef293->setDestEndpoint(dstPt293);\n    connRef293->setRoutingType((ConnType)2);\n\n    ConnRef *connRef294 = new ConnRef(router, 294);\n    ConnEnd srcPt294(Point(1480.2, 1203.05), 8);\n    connRef294->setSourceEndpoint(srcPt294);\n    ConnEnd dstPt294(Point(1659.49, 1203.05), 15);\n    connRef294->setDestEndpoint(dstPt294);\n    connRef294->setRoutingType((ConnType)2);\n\n    ConnRef *connRef295 = new ConnRef(router, 295);\n    ConnEnd srcPt295(Point(1480.2, 1203.05), 8);\n    connRef295->setSourceEndpoint(srcPt295);\n    ConnEnd dstPt295(Point(1355.33, 1143.05), 15);\n    connRef295->setDestEndpoint(dstPt295);\n    connRef295->setRoutingType((ConnType)2);\n\n    ConnRef *connRef296 = new ConnRef(router, 296);\n    ConnEnd srcPt296(Point(1480.2, 1203.05), 8);\n    connRef296->setSourceEndpoint(srcPt296);\n    ConnEnd dstPt296(Point(1544.49, 1052.05), 15);\n    connRef296->setDestEndpoint(dstPt296);\n    connRef296->setRoutingType((ConnType)2);\n\n    ConnRef *connRef297 = new ConnRef(router, 297);\n    ConnEnd srcPt297(Point(1480.2, 1299.21), 8);\n    connRef297->setSourceEndpoint(srcPt297);\n    ConnEnd dstPt297(Point(1540.2, 1299.21), 15);\n    connRef297->setDestEndpoint(dstPt297);\n    connRef297->setRoutingType((ConnType)2);\n\n    ConnRef *connRef298 = new ConnRef(router, 298);\n    ConnEnd srcPt298(Point(1480.2, 1460.71), 8);\n    connRef298->setSourceEndpoint(srcPt298);\n    ConnEnd dstPt298(Point(1540.2, 1460.71), 15);\n    connRef298->setDestEndpoint(dstPt298);\n    connRef298->setRoutingType((ConnType)2);\n\n    ConnRef *connRef299 = new ConnRef(router, 299);\n    ConnEnd srcPt299(Point(1723.2, 1316.71), 2);\n    connRef299->setSourceEndpoint(srcPt299);\n    ConnEnd dstPt299(Point(1540.2, 1460.71), 15);\n    connRef299->setDestEndpoint(dstPt299);\n    connRef299->setRoutingType((ConnType)2);\n\n    ConnRef *connRef300 = new ConnRef(router, 300);\n    ConnEnd srcPt300(Point(1126, 177), 2);\n    connRef300->setSourceEndpoint(srcPt300);\n    ConnEnd dstPt300(Point(1101, 302), 15);\n    connRef300->setDestEndpoint(dstPt300);\n    connRef300->setRoutingType((ConnType)2);\n\n    ConnRef *connRef301 = new ConnRef(router, 301);\n    ConnEnd srcPt301(Point(1016.8, 177), 2);\n    connRef301->setSourceEndpoint(srcPt301);\n    ConnEnd dstPt301(Point(1101, 302), 15);\n    connRef301->setDestEndpoint(dstPt301);\n    connRef301->setRoutingType((ConnType)2);\n\n    ConnRef *connRef302 = new ConnRef(router, 302);\n    ConnEnd srcPt302(Point(1254, 1203.05), 4);\n    connRef302->setSourceEndpoint(srcPt302);\n    ConnEnd dstPt302(Point(930, 1227.55), 15);\n    connRef302->setDestEndpoint(dstPt302);\n    connRef302->setRoutingType((ConnType)2);\n\n    ConnRef *connRef303 = new ConnRef(router, 303);\n    ConnEnd srcPt303(Point(1254, 1203.05), 4);\n    connRef303->setSourceEndpoint(srcPt303);\n    ConnEnd dstPt303(Point(1177, 1316.71), 15);\n    connRef303->setDestEndpoint(dstPt303);\n    connRef303->setRoutingType((ConnType)2);\n\n    ConnRef *connRef304 = new ConnRef(router, 304);\n    ConnEnd srcPt304(Point(1611.2, 1316.71), 2);\n    connRef304->setSourceEndpoint(srcPt304);\n    ConnEnd dstPt304(Point(1659.49, 1203.05), 15);\n    connRef304->setDestEndpoint(dstPt304);\n    connRef304->setRoutingType((ConnType)2);\n\n    ConnRef *connRef305 = new ConnRef(router, 305);\n    ConnEnd srcPt305(Point(1611.2, 1316.71), 2);\n    connRef305->setSourceEndpoint(srcPt305);\n    ConnEnd dstPt305(Point(1540.2, 1460.71), 15);\n    connRef305->setDestEndpoint(dstPt305);\n    connRef305->setRoutingType((ConnType)2);\n\n    ConnRef *connRef306 = new ConnRef(router, 306);\n    ConnEnd srcPt306(Point(621.5, 884.545), 2);\n    connRef306->setSourceEndpoint(srcPt306);\n    ConnEnd dstPt306(Point(646, 958.925), 15);\n    connRef306->setDestEndpoint(dstPt306);\n    connRef306->setRoutingType((ConnType)2);\n\n    ConnRef *connRef307 = new ConnRef(router, 307);\n    ConnEnd srcPt307(Point(698, 884.545), 2);\n    connRef307->setSourceEndpoint(srcPt307);\n    ConnEnd dstPt307(Point(646, 958.925), 15);\n    connRef307->setDestEndpoint(dstPt307);\n    connRef307->setRoutingType((ConnType)2);\n\n    ConnRef *connRef308 = new ConnRef(router, 308);\n    ConnEnd srcPt308(Point(407, 936.545), 2);\n    connRef308->setSourceEndpoint(srcPt308);\n    ConnEnd dstPt308(Point(646, 822.545), 15);\n    connRef308->setDestEndpoint(dstPt308);\n    connRef308->setRoutingType((ConnType)2);\n\n    ConnRef *connRef309 = new ConnRef(router, 309);\n    ConnEnd srcPt309(Point(407, 936.545), 2);\n    connRef309->setSourceEndpoint(srcPt309);\n    ConnEnd dstPt309(Point(407, 1028.55), 15);\n    connRef309->setDestEndpoint(dstPt309);\n    connRef309->setRoutingType((ConnType)2);\n\n    ConnRef *connRef310 = new ConnRef(router, 310);\n    ConnEnd srcPt310(Point(1134, 1117.21), 2);\n    connRef310->setSourceEndpoint(srcPt310);\n    ConnEnd dstPt310(Point(1177, 1316.71), 15);\n    connRef310->setDestEndpoint(dstPt310);\n    connRef310->setRoutingType((ConnType)2);\n\n    ConnRef *connRef311 = new ConnRef(router, 311);\n    ConnEnd srcPt311(Point(1752.2, 1602.71), 1);\n    connRef311->setSourceEndpoint(srcPt311);\n    ConnEnd dstPt311(Point(930, 1227.55), 15);\n    connRef311->setDestEndpoint(dstPt311);\n    connRef311->setRoutingType((ConnType)2);\n\n    ConnRef *connRef312 = new ConnRef(router, 312);\n    ConnEnd srcPt312(Point(1752.2, 1602.71), 1);\n    connRef312->setSourceEndpoint(srcPt312);\n    ConnEnd dstPt312(Point(1659.49, 544.545), 15);\n    connRef312->setDestEndpoint(dstPt312);\n    connRef312->setRoutingType((ConnType)2);\n\n    ConnRef *connRef313 = new ConnRef(router, 313);\n    ConnEnd srcPt313(Point(569, 1269.55), 1);\n    connRef313->setSourceEndpoint(srcPt313);\n    ConnEnd dstPt313(Point(399, 1203.05), 15);\n    connRef313->setDestEndpoint(dstPt313);\n    connRef313->setRoutingType((ConnType)2);\n\n    ConnRef *connRef314 = new ConnRef(router, 314);\n    ConnEnd srcPt314(Point(569, 1269.55), 1);\n    connRef314->setSourceEndpoint(srcPt314);\n    ConnEnd dstPt314(Point(646, 1227.55), 15);\n    connRef314->setDestEndpoint(dstPt314);\n    connRef314->setRoutingType((ConnType)2);\n\n    ConnRef *connRef315 = new ConnRef(router, 315);\n    ConnEnd srcPt315(Point(508, 1049.05), 4);\n    connRef315->setSourceEndpoint(srcPt315);\n    ConnEnd dstPt315(Point(251, 1101.05), 15);\n    connRef315->setDestEndpoint(dstPt315);\n    connRef315->setRoutingType((ConnType)2);\n\n    ConnRef *connRef316 = new ConnRef(router, 316);\n    ConnEnd srcPt316(Point(268, 594.545), 2);\n    connRef316->setSourceEndpoint(srcPt316);\n    ConnEnd dstPt316(Point(407, 1028.55), 15);\n    connRef316->setDestEndpoint(dstPt316);\n    connRef316->setRoutingType((ConnType)2);\n\n    ConnRef *connRef317 = new ConnRef(router, 317);\n    ConnEnd srcPt317(Point(268, 594.545), 2);\n    connRef317->setSourceEndpoint(srcPt317);\n    ConnEnd dstPt317(Point(390, 584.545), 15);\n    connRef317->setDestEndpoint(dstPt317);\n    connRef317->setRoutingType((ConnType)2);\n\n    ConnRef *connRef318 = new ConnRef(router, 318);\n    ConnEnd srcPt318(Point(268, 574.545), 1);\n    connRef318->setSourceEndpoint(srcPt318);\n    ConnEnd dstPt318(Point(220, 584.545), 15);\n    connRef318->setDestEndpoint(dstPt318);\n    connRef318->setRoutingType((ConnType)2);\n\n    ConnRef *connRef319 = new ConnRef(router, 319);\n    ConnEnd srcPt319(Point(150, 584.545), 4);\n    connRef319->setSourceEndpoint(srcPt319);\n    ConnEnd dstPt319(Point(100, 584.545), 15);\n    connRef319->setDestEndpoint(dstPt319);\n    connRef319->setRoutingType((ConnType)2);\n\n    ConnRef *connRef320 = new ConnRef(router, 320);\n    ConnEnd srcPt320(Point(988.8, 1045.05), 4);\n    connRef320->setSourceEndpoint(srcPt320);\n    ConnEnd dstPt320(Point(930, 1227.55), 15);\n    connRef320->setDestEndpoint(dstPt320);\n    connRef320->setRoutingType((ConnType)2);\n\n    ConnRef *connRef321 = new ConnRef(router, 321);\n    ConnEnd srcPt321(Point(988.8, 1045.05), 4);\n    connRef321->setSourceEndpoint(srcPt321);\n    ConnEnd dstPt321(Point(938.8, 984.545), 15);\n    connRef321->setDestEndpoint(dstPt321);\n    connRef321->setRoutingType((ConnType)2);\n\n    ConnRef *connRef322 = new ConnRef(router, 322);\n    ConnEnd srcPt322(Point(1565.2, 1368.71), 2);\n    connRef322->setSourceEndpoint(srcPt322);\n    ConnEnd dstPt322(Point(1540.2, 1460.71), 15);\n    connRef322->setDestEndpoint(dstPt322);\n    connRef322->setRoutingType((ConnType)2);\n\n    ConnRef *connRef323 = new ConnRef(router, 323);\n    ConnEnd srcPt323(Point(1501.53, 1368.71), 2);\n    connRef323->setSourceEndpoint(srcPt323);\n    ConnEnd dstPt323(Point(1540.2, 1460.71), 15);\n    connRef323->setDestEndpoint(dstPt323);\n    connRef323->setRoutingType((ConnType)2);\n\n    ConnRef *connRef324 = new ConnRef(router, 324);\n    ConnEnd srcPt324(Point(1544.49, 1602.71), 1);\n    connRef324->setSourceEndpoint(srcPt324);\n    ConnEnd dstPt324(Point(1540.2, 1460.71), 15);\n    connRef324->setDestEndpoint(dstPt324);\n    connRef324->setRoutingType((ConnType)2);\n\n    ConnRef *connRef325 = new ConnRef(router, 325);\n    ConnEnd srcPt325(Point(1340.2, 849.545), 1);\n    connRef325->setSourceEndpoint(srcPt325);\n    ConnEnd dstPt325(Point(1340.2, 760.379), 15);\n    connRef325->setDestEndpoint(dstPt325);\n    connRef325->setRoutingType((ConnType)2);\n\n    ConnRef *connRef326 = new ConnRef(router, 326);\n    ConnEnd srcPt326(Point(1544.49, 984.545), 1);\n    connRef326->setSourceEndpoint(srcPt326);\n    ConnEnd dstPt326(Point(1544.49, 926.545), 15);\n    connRef326->setDestEndpoint(dstPt326);\n    connRef326->setRoutingType((ConnType)2);\n\n    ConnRef *connRef327 = new ConnRef(router, 327);\n    ConnEnd srcPt327(Point(1468.53, 994.545), 4);\n    connRef327->setSourceEndpoint(srcPt327);\n    ConnEnd dstPt327(Point(1340.2, 923.545), 15);\n    connRef327->setDestEndpoint(dstPt327);\n    connRef327->setRoutingType((ConnType)2);\n\n    ConnRef *connRef328 = new ConnRef(router, 328);\n    ConnEnd srcPt328(Point(135, 1139.05), 1);\n    connRef328->setSourceEndpoint(srcPt328);\n    ConnEnd dstPt328(Point(160, 822.545), 15);\n    connRef328->setDestEndpoint(dstPt328);\n    connRef328->setRoutingType((ConnType)2);\n\n    ConnRef *connRef329 = new ConnRef(router, 329);\n    ConnEnd srcPt329(Point(181, 1149.05), 4);\n    connRef329->setSourceEndpoint(srcPt329);\n    ConnEnd dstPt329(Point(160, 822.545), 15);\n    connRef329->setDestEndpoint(dstPt329);\n    connRef329->setRoutingType((ConnType)2);\n\n    ConnRef *connRef330 = new ConnRef(router, 330);\n    ConnEnd srcPt330(Point(925, 115), 15);\n    connRef330->setSourceEndpoint(srcPt330);\n    ConnEnd dstPt330(Point(975, 115), 4);\n    connRef330->setDestEndpoint(dstPt330);\n    connRef330->setRoutingType((ConnType)2);\n\n    ConnRef *connRef331 = new ConnRef(router, 331);\n    ConnEnd srcPt331(Point(1101, 115), 15);\n    connRef331->setSourceEndpoint(srcPt331);\n    ConnEnd dstPt331(Point(1126, 157), 1);\n    connRef331->setDestEndpoint(dstPt331);\n    connRef331->setRoutingType((ConnType)2);\n\n    ConnRef *connRef332 = new ConnRef(router, 332);\n    ConnEnd srcPt332(Point(1101, 115), 15);\n    connRef332->setSourceEndpoint(srcPt332);\n    ConnEnd dstPt332(Point(1016.8, 157), 1);\n    connRef332->setDestEndpoint(dstPt332);\n    connRef332->setRoutingType((ConnType)2);\n\n    ConnRef *connRef333 = new ConnRef(router, 333);\n    ConnEnd srcPt333(Point(925, 446), 15);\n    connRef333->setSourceEndpoint(srcPt333);\n    ConnEnd dstPt333(Point(980, 446), 4);\n    connRef333->setDestEndpoint(dstPt333);\n    connRef333->setRoutingType((ConnType)2);\n\n    ConnRef *connRef411 = new ConnRef(router, 411);\n    ConnEnd srcPt411(Point(1470.2, 1249.21), 15);\n    connRef411->setSourceEndpoint(srcPt411);\n    ConnEnd dstPt411(Point(1470.2, 1299.21), 15);\n    connRef411->setDestEndpoint(dstPt411);\n    connRef411->setRoutingType((ConnType)2);\n\n    ConnRef *connRef412 = new ConnRef(router, 412);\n    ConnEnd srcPt412(Point(1470.2, 1410.71), 15);\n    connRef412->setSourceEndpoint(srcPt412);\n    ConnEnd dstPt412(Point(1470.2, 1460.71), 15);\n    connRef412->setDestEndpoint(dstPt412);\n    connRef412->setRoutingType((ConnType)2);\n\n    ConnRef *connRef413 = new ConnRef(router, 413);\n    ConnEnd srcPt413(Point(1785.2, 1306.71), 15);\n    connRef413->setSourceEndpoint(srcPt413);\n    ConnEnd dstPt413(Point(1723.2, 1306.71), 15);\n    connRef413->setDestEndpoint(dstPt413);\n    connRef413->setRoutingType((ConnType)2);\n\n    ConnRef *connRef414 = new ConnRef(router, 414);\n    ConnEnd srcPt414(Point(1188, 167), 15);\n    connRef414->setSourceEndpoint(srcPt414);\n    ConnEnd dstPt414(Point(1126, 167), 15);\n    connRef414->setDestEndpoint(dstPt414);\n    connRef414->setRoutingType((ConnType)2);\n\n    ConnRef *connRef415 = new ConnRef(router, 415);\n    ConnEnd srcPt415(Point(954.8, 167), 15);\n    connRef415->setSourceEndpoint(srcPt415);\n    ConnEnd dstPt415(Point(1016.8, 167), 15);\n    connRef415->setDestEndpoint(dstPt415);\n    connRef415->setRoutingType((ConnType)2);\n\n    ConnRef *connRef416 = new ConnRef(router, 416);\n    ConnEnd srcPt416(Point(1264, 1153.05), 15);\n    connRef416->setSourceEndpoint(srcPt416);\n    ConnEnd dstPt416(Point(1264, 1203.05), 15);\n    connRef416->setDestEndpoint(dstPt416);\n    connRef416->setRoutingType((ConnType)2);\n\n    ConnRef *connRef417 = new ConnRef(router, 417);\n    ConnEnd srcPt417(Point(1673.2, 1306.71), 15);\n    connRef417->setSourceEndpoint(srcPt417);\n    ConnEnd dstPt417(Point(1611.2, 1306.71), 15);\n    connRef417->setDestEndpoint(dstPt417);\n    connRef417->setRoutingType((ConnType)2);\n\n    ConnRef *connRef418 = new ConnRef(router, 418);\n    ConnEnd srcPt418(Point(559.5, 874.545), 15);\n    connRef418->setSourceEndpoint(srcPt418);\n    ConnEnd dstPt418(Point(621.5, 874.545), 15);\n    connRef418->setDestEndpoint(dstPt418);\n    connRef418->setRoutingType((ConnType)2);\n\n    ConnRef *connRef419 = new ConnRef(router, 419);\n    ConnEnd srcPt419(Point(760, 874.545), 15);\n    connRef419->setSourceEndpoint(srcPt419);\n    ConnEnd dstPt419(Point(698, 874.545), 15);\n    connRef419->setDestEndpoint(dstPt419);\n    connRef419->setRoutingType((ConnType)2);\n\n    ConnRef *connRef420 = new ConnRef(router, 420);\n    ConnEnd srcPt420(Point(469, 926.545), 15);\n    connRef420->setSourceEndpoint(srcPt420);\n    ConnEnd dstPt420(Point(407, 926.545), 15);\n    connRef420->setDestEndpoint(dstPt420);\n    connRef420->setRoutingType((ConnType)2);\n\n    ConnRef *connRef421 = new ConnRef(router, 421);\n    ConnEnd srcPt421(Point(1196, 1107.21), 15);\n    connRef421->setSourceEndpoint(srcPt421);\n    ConnEnd dstPt421(Point(1134, 1107.21), 15);\n    connRef421->setDestEndpoint(dstPt421);\n    connRef421->setRoutingType((ConnType)2);\n\n    ConnRef *connRef422 = new ConnRef(router, 422);\n    ConnEnd srcPt422(Point(1814.2, 1612.71), 15);\n    connRef422->setSourceEndpoint(srcPt422);\n    ConnEnd dstPt422(Point(1752.2, 1612.71), 15);\n    connRef422->setDestEndpoint(dstPt422);\n    connRef422->setRoutingType((ConnType)2);\n\n    ConnRef *connRef423 = new ConnRef(router, 423);\n    ConnEnd srcPt423(Point(631, 1279.55), 15);\n    connRef423->setSourceEndpoint(srcPt423);\n    ConnEnd dstPt423(Point(569, 1279.55), 15);\n    connRef423->setDestEndpoint(dstPt423);\n    connRef423->setRoutingType((ConnType)2);\n\n    ConnRef *connRef424 = new ConnRef(router, 424);\n    ConnEnd srcPt424(Point(518, 999.045), 15);\n    connRef424->setSourceEndpoint(srcPt424);\n    ConnEnd dstPt424(Point(518, 1049.05), 15);\n    connRef424->setDestEndpoint(dstPt424);\n    connRef424->setRoutingType((ConnType)2);\n\n    ConnRef *connRef425 = new ConnRef(router, 425);\n    ConnEnd srcPt425(Point(330, 584.545), 15);\n    connRef425->setSourceEndpoint(srcPt425);\n    ConnEnd dstPt425(Point(268, 584.545), 15);\n    connRef425->setDestEndpoint(dstPt425);\n    connRef425->setRoutingType((ConnType)2);\n\n    ConnRef *connRef426 = new ConnRef(router, 426);\n    ConnEnd srcPt426(Point(160, 534.545), 15);\n    connRef426->setSourceEndpoint(srcPt426);\n    ConnEnd dstPt426(Point(160, 584.545), 15);\n    connRef426->setDestEndpoint(dstPt426);\n    connRef426->setRoutingType((ConnType)2);\n\n    ConnRef *connRef427 = new ConnRef(router, 427);\n    ConnEnd srcPt427(Point(998.8, 995.045), 15);\n    connRef427->setSourceEndpoint(srcPt427);\n    ConnEnd dstPt427(Point(998.8, 1045.05), 15);\n    connRef427->setDestEndpoint(dstPt427);\n    connRef427->setRoutingType((ConnType)2);\n\n    ConnRef *connRef428 = new ConnRef(router, 428);\n    ConnEnd srcPt428(Point(1627.2, 1358.71), 15);\n    connRef428->setSourceEndpoint(srcPt428);\n    ConnEnd dstPt428(Point(1565.2, 1358.71), 15);\n    connRef428->setDestEndpoint(dstPt428);\n    connRef428->setRoutingType((ConnType)2);\n\n    ConnRef *connRef429 = new ConnRef(router, 429);\n    ConnEnd srcPt429(Point(1439.53, 1358.71), 15);\n    connRef429->setSourceEndpoint(srcPt429);\n    ConnEnd dstPt429(Point(1501.53, 1358.71), 15);\n    connRef429->setDestEndpoint(dstPt429);\n    connRef429->setRoutingType((ConnType)2);\n\n    ConnRef *connRef430 = new ConnRef(router, 430);\n    ConnEnd srcPt430(Point(1606.49, 1612.71), 15);\n    connRef430->setSourceEndpoint(srcPt430);\n    ConnEnd dstPt430(Point(1544.49, 1612.71), 15);\n    connRef430->setDestEndpoint(dstPt430);\n    connRef430->setRoutingType((ConnType)2);\n\n    ConnRef *connRef431 = new ConnRef(router, 431);\n    ConnEnd srcPt431(Point(1402.2, 859.545), 15);\n    connRef431->setSourceEndpoint(srcPt431);\n    ConnEnd dstPt431(Point(1340.2, 859.545), 15);\n    connRef431->setDestEndpoint(dstPt431);\n    connRef431->setRoutingType((ConnType)2);\n\n    ConnRef *connRef432 = new ConnRef(router, 432);\n    ConnEnd srcPt432(Point(1606.49, 994.545), 15);\n    connRef432->setSourceEndpoint(srcPt432);\n    ConnEnd dstPt432(Point(1544.49, 994.545), 15);\n    connRef432->setDestEndpoint(dstPt432);\n    connRef432->setRoutingType((ConnType)2);\n\n    ConnRef *connRef433 = new ConnRef(router, 433);\n    ConnEnd srcPt433(Point(1478.53, 944.545), 15);\n    connRef433->setSourceEndpoint(srcPt433);\n    ConnEnd dstPt433(Point(1478.53, 994.545), 15);\n    connRef433->setDestEndpoint(dstPt433);\n    connRef433->setRoutingType((ConnType)2);\n\n    ConnRef *connRef434 = new ConnRef(router, 434);\n    ConnEnd srcPt434(Point(399, 1295.05), 15);\n    connRef434->setSourceEndpoint(srcPt434);\n    ConnEnd dstPt434(Point(349, 1295.05), 8);\n    connRef434->setDestEndpoint(dstPt434);\n    connRef434->setRoutingType((ConnType)2);\n\n    ConnRef *connRef435 = new ConnRef(router, 435);\n    ConnEnd srcPt435(Point(399, 1203.05), 15);\n    connRef435->setSourceEndpoint(srcPt435);\n    ConnEnd dstPt435(Point(349, 1203.05), 8);\n    connRef435->setDestEndpoint(dstPt435);\n    connRef435->setRoutingType((ConnType)2);\n\n    ConnRef *connRef436 = new ConnRef(router, 436);\n    ConnEnd srcPt436(Point(1340.2, 760.379), 15);\n    connRef436->setSourceEndpoint(srcPt436);\n    ConnEnd dstPt436(Point(1460.2, 738.545), 4);\n    connRef436->setDestEndpoint(dstPt436);\n    connRef436->setRoutingType((ConnType)2);\n\n    ConnRef *connRef437 = new ConnRef(router, 437);\n    ConnEnd srcPt437(Point(639.5, 446), 15);\n    connRef437->setSourceEndpoint(srcPt437);\n    ConnEnd dstPt437(Point(528, 446), 8);\n    connRef437->setDestEndpoint(dstPt437);\n    connRef437->setRoutingType((ConnType)2);\n\n    ConnRef *connRef438 = new ConnRef(router, 438);\n    ConnEnd srcPt438(Point(698, 1028.55), 15);\n    connRef438->setSourceEndpoint(srcPt438);\n    ConnEnd dstPt438(Point(596, 1028.55), 8);\n    connRef438->setDestEndpoint(dstPt438);\n    connRef438->setRoutingType((ConnType)2);\n\n    ConnRef *connRef439 = new ConnRef(router, 439);\n    ConnEnd srcPt439(Point(801, 446), 15);\n    connRef439->setSourceEndpoint(srcPt439);\n    ConnEnd dstPt439(Point(745, 446), 8);\n    connRef439->setDestEndpoint(dstPt439);\n    connRef439->setRoutingType((ConnType)2);\n\n    ConnRef *connRef440 = new ConnRef(router, 440);\n    ConnEnd srcPt440(Point(925, 446), 15);\n    connRef440->setSourceEndpoint(srcPt440);\n    ConnEnd dstPt440(Point(871, 446), 8);\n    connRef440->setDestEndpoint(dstPt440);\n    connRef440->setRoutingType((ConnType)2);\n\n    ConnRef *connRef441 = new ConnRef(router, 441);\n    ConnEnd srcPt441(Point(390, 584.545), 15);\n    connRef441->setSourceEndpoint(srcPt441);\n    ConnEnd dstPt441(Point(508, 584.545), 4);\n    connRef441->setDestEndpoint(dstPt441);\n    connRef441->setRoutingType((ConnType)2);\n\n    ConnRef *connRef442 = new ConnRef(router, 442);\n    ConnEnd srcPt442(Point(925, 822.545), 15);\n    connRef442->setSourceEndpoint(srcPt442);\n    ConnEnd dstPt442(Point(802.5, 822.545), 8);\n    connRef442->setDestEndpoint(dstPt442);\n    connRef442->setRoutingType((ConnType)2);\n\n    ConnRef *connRef443 = new ConnRef(router, 443);\n    ConnEnd srcPt443(Point(925, 822.545), 15);\n    connRef443->setSourceEndpoint(srcPt443);\n    ConnEnd dstPt443(Point(807, 1028.55), 8);\n    connRef443->setDestEndpoint(dstPt443);\n    connRef443->setRoutingType((ConnType)2);\n\n    ConnRef *connRef444 = new ConnRef(router, 444);\n    ConnEnd srcPt444(Point(925, 822.545), 15);\n    connRef444->setSourceEndpoint(srcPt444);\n    ConnEnd dstPt444(Point(779, 1113.55), 1);\n    connRef444->setDestEndpoint(dstPt444);\n    connRef444->setRoutingType((ConnType)2);\n\n    ConnRef *connRef445 = new ConnRef(router, 445);\n    ConnEnd srcPt445(Point(925, 822.545), 15);\n    connRef445->setSourceEndpoint(srcPt445);\n    ConnEnd dstPt445(Point(802.5, 686.545), 8);\n    connRef445->setDestEndpoint(dstPt445);\n    connRef445->setRoutingType((ConnType)2);\n\n    ConnRef *connRef446 = new ConnRef(router, 446);\n    ConnEnd srcPt446(Point(925, 822.545), 15);\n    connRef446->setSourceEndpoint(srcPt446);\n    ConnEnd dstPt446(Point(861, 1165.55), 1);\n    connRef446->setDestEndpoint(dstPt446);\n    connRef446->setRoutingType((ConnType)2);\n\n    ConnRef *connRef447 = new ConnRef(router, 447);\n    ConnEnd srcPt447(Point(930, 1227.55), 15);\n    connRef447->setSourceEndpoint(srcPt447);\n    ConnEnd dstPt447(Point(764, 1593.71), 8);\n    connRef447->setDestEndpoint(dstPt447);\n    connRef447->setRoutingType((ConnType)2);\n\n    ConnRef *connRef448 = new ConnRef(router, 448);\n    ConnEnd srcPt448(Point(930, 1227.55), 15);\n    connRef448->setSourceEndpoint(srcPt448);\n    ConnEnd dstPt448(Point(836, 1626.71), 8);\n    connRef448->setDestEndpoint(dstPt448);\n    connRef448->setRoutingType((ConnType)2);\n\n    ConnRef *connRef449 = new ConnRef(router, 449);\n    ConnEnd srcPt449(Point(925, 302), 15);\n    connRef449->setSourceEndpoint(srcPt449);\n    ConnEnd dstPt449(Point(925, 270), 2);\n    connRef449->setDestEndpoint(dstPt449);\n    connRef449->setRoutingType((ConnType)2);\n\n    ConnRef *connRef450 = new ConnRef(router, 450);\n    ConnEnd srcPt450(Point(925, 822.545), 15);\n    connRef450->setSourceEndpoint(srcPt450);\n    ConnEnd dstPt450(Point(925, 689.045), 2);\n    connRef450->setDestEndpoint(dstPt450);\n    connRef450->setRoutingType((ConnType)2);\n\n    ConnRef *connRef451 = new ConnRef(router, 451);\n    ConnEnd srcPt451(Point(930, 1227.55), 15);\n    connRef451->setSourceEndpoint(srcPt451);\n    ConnEnd dstPt451(Point(925, 942.545), 2);\n    connRef451->setDestEndpoint(dstPt451);\n    connRef451->setRoutingType((ConnType)2);\n\n    ConnRef *connRef452 = new ConnRef(router, 452);\n    ConnEnd srcPt452(Point(1112, 446), 15);\n    connRef452->setSourceEndpoint(srcPt452);\n    ConnEnd dstPt452(Point(1162, 446), 4);\n    connRef452->setDestEndpoint(dstPt452);\n    connRef452->setRoutingType((ConnType)2);\n\n    ConnRef *connRef453 = new ConnRef(router, 453);\n    ConnEnd srcPt453(Point(925, 822.545), 15);\n    connRef453->setSourceEndpoint(srcPt453);\n    ConnEnd dstPt453(Point(1142, 760.379), 4);\n    connRef453->setDestEndpoint(dstPt453);\n    connRef453->setRoutingType((ConnType)2);\n\n    ConnRef *connRef454 = new ConnRef(router, 454);\n    ConnEnd srcPt454(Point(930, 1227.55), 15);\n    connRef454->setSourceEndpoint(srcPt454);\n    ConnEnd dstPt454(Point(970, 1117.21), 2);\n    connRef454->setDestEndpoint(dstPt454);\n    connRef454->setRoutingType((ConnType)2);\n\n    ConnRef *connRef455 = new ConnRef(router, 455);\n    ConnEnd srcPt455(Point(1177, 1316.71), 15);\n    connRef455->setSourceEndpoint(srcPt455);\n    ConnEnd dstPt455(Point(1218, 1460.71), 4);\n    connRef455->setDestEndpoint(dstPt455);\n    connRef455->setRoutingType((ConnType)2);\n\n    ConnRef *connRef456 = new ConnRef(router, 456);\n    ConnEnd srcPt456(Point(1340.2, 760.379), 15);\n    connRef456->setSourceEndpoint(srcPt456);\n    ConnEnd dstPt456(Point(1340.2, 692.045), 2);\n    connRef456->setDestEndpoint(dstPt456);\n    connRef456->setRoutingType((ConnType)2);\n\n    ConnRef *connRef457 = new ConnRef(router, 457);\n    ConnEnd srcPt457(Point(1340.2, 760.379), 15);\n    connRef457->setSourceEndpoint(srcPt457);\n    ConnEnd dstPt457(Point(1460.2, 770.545), 4);\n    connRef457->setDestEndpoint(dstPt457);\n    connRef457->setRoutingType((ConnType)2);\n\n    ConnRef *connRef458 = new ConnRef(router, 458);\n    ConnEnd srcPt458(Point(1324, 1203.05), 15);\n    connRef458->setSourceEndpoint(srcPt458);\n    ConnEnd dstPt458(Point(1460.2, 1203.05), 4);\n    connRef458->setDestEndpoint(dstPt458);\n    connRef458->setRoutingType((ConnType)2);\n\n    ConnRef *connRef459 = new ConnRef(router, 459);\n    ConnEnd srcPt459(Point(1324, 1203.05), 15);\n    connRef459->setSourceEndpoint(srcPt459);\n    ConnEnd dstPt459(Point(1460.2, 1299.21), 4);\n    connRef459->setDestEndpoint(dstPt459);\n    connRef459->setRoutingType((ConnType)2);\n\n    ConnRef *connRef460 = new ConnRef(router, 460);\n    ConnEnd srcPt460(Point(646, 822.545), 15);\n    connRef460->setSourceEndpoint(srcPt460);\n    ConnEnd dstPt460(Point(621.5, 864.545), 1);\n    connRef460->setDestEndpoint(dstPt460);\n    connRef460->setRoutingType((ConnType)2);\n\n    ConnRef *connRef461 = new ConnRef(router, 461);\n    ConnEnd srcPt461(Point(646, 822.545), 15);\n    connRef461->setSourceEndpoint(srcPt461);\n    ConnEnd dstPt461(Point(698, 864.545), 1);\n    connRef461->setDestEndpoint(dstPt461);\n    connRef461->setRoutingType((ConnType)2);\n\n    ConnRef *connRef462 = new ConnRef(router, 462);\n    ConnEnd srcPt462(Point(1340.2, 923.545), 15);\n    connRef462->setSourceEndpoint(srcPt462);\n    ConnEnd dstPt462(Point(1340.2, 869.545), 2);\n    connRef462->setDestEndpoint(dstPt462);\n    connRef462->setRoutingType((ConnType)2);\n\n    ConnRef *connRef463 = new ConnRef(router, 463);\n    ConnEnd srcPt463(Point(1544.49, 1052.05), 15);\n    connRef463->setSourceEndpoint(srcPt463);\n    ConnEnd dstPt463(Point(1544.49, 1004.55), 2);\n    connRef463->setDestEndpoint(dstPt463);\n    connRef463->setRoutingType((ConnType)2);\n\n    ConnRef *connRef464 = new ConnRef(router, 464);\n    ConnEnd srcPt464(Point(549, 1786.85), 15);\n    connRef464->setSourceEndpoint(srcPt464);\n    ConnEnd dstPt464(Point(748, 1777.71), 4);\n    connRef464->setDestEndpoint(dstPt464);\n    connRef464->setRoutingType((ConnType)2);\n\n    ConnRef *connRef465 = new ConnRef(router, 465);\n    ConnEnd srcPt465(Point(549, 1786.85), 15);\n    connRef465->setSourceEndpoint(srcPt465);\n    ConnEnd dstPt465(Point(748, 1809.71), 4);\n    connRef465->setDestEndpoint(dstPt465);\n    connRef465->setRoutingType((ConnType)2);\n\n    ConnRef *connRef466 = new ConnRef(router, 466);\n    ConnEnd srcPt466(Point(930, 1227.55), 15);\n    connRef466->setSourceEndpoint(srcPt466);\n    ConnEnd dstPt466(Point(1045.8, 1614.71), 4);\n    connRef466->setDestEndpoint(dstPt466);\n    connRef466->setRoutingType((ConnType)2);\n\n    ConnRef *connRef467 = new ConnRef(router, 467);\n    ConnEnd srcPt467(Point(1101, 302), 15);\n    connRef467->setSourceEndpoint(srcPt467);\n    ConnEnd dstPt467(Point(1153, 344), 4);\n    connRef467->setDestEndpoint(dstPt467);\n    connRef467->setRoutingType((ConnType)2);\n\n    ConnRef *connRef468 = new ConnRef(router, 468);\n    ConnEnd srcPt468(Point(1235, 446), 15);\n    connRef468->setSourceEndpoint(srcPt468);\n    ConnEnd dstPt468(Point(1240, 359), 2);\n    connRef468->setDestEndpoint(dstPt468);\n    connRef468->setRoutingType((ConnType)2);\n\n    ConnRef *connRef469 = new ConnRef(router, 469);\n    ConnEnd srcPt469(Point(375, 446), 15);\n    connRef469->setSourceEndpoint(srcPt469);\n    ConnEnd dstPt469(Point(338, 482.545), 8);\n    connRef469->setDestEndpoint(dstPt469);\n    connRef469->setRoutingType((ConnType)2);\n\n    ConnRef *connRef470 = new ConnRef(router, 470);\n    ConnEnd srcPt470(Point(1112, 446), 15);\n    connRef470->setSourceEndpoint(srcPt470);\n    ConnEnd dstPt470(Point(1047.83, 735.462), 1);\n    connRef470->setDestEndpoint(dstPt470);\n    connRef470->setRoutingType((ConnType)2);\n\n    ConnRef *connRef471 = new ConnRef(router, 471);\n    ConnEnd srcPt471(Point(810, 1460.71), 15);\n    connRef471->setSourceEndpoint(srcPt471);\n    ConnEnd dstPt471(Point(773, 1347.05), 8);\n    connRef471->setDestEndpoint(dstPt471);\n    connRef471->setRoutingType((ConnType)2);\n\n    ConnRef *connRef472 = new ConnRef(router, 472);\n    ConnEnd srcPt472(Point(925, 302), 15);\n    connRef472->setSourceEndpoint(srcPt472);\n    ConnEnd dstPt472(Point(888, 344), 8);\n    connRef472->setDestEndpoint(dstPt472);\n    connRef472->setRoutingType((ConnType)2);\n\n    ConnRef *connRef334 = new ConnRef(router, 334);\n    ConnEnd srcPt334(Point(925, 822.545), 15);\n    connRef334->setSourceEndpoint(srcPt334);\n    ConnEnd dstPt334(Point(1098, 812.545), 1);\n    connRef334->setDestEndpoint(dstPt334);\n    connRef334->setRoutingType((ConnType)2);\n\n    ConnRef *connRef335 = new ConnRef(router, 335);\n    ConnEnd srcPt335(Point(938.8, 1799.71), 1);\n    connRef335->setSourceEndpoint(srcPt335);\n    ConnEnd dstPt335(Point(938.8, 1685.71), 15);\n    connRef335->setDestEndpoint(dstPt335);\n    connRef335->setRoutingType((ConnType)2);\n\n    ConnRef *connRef336 = new ConnRef(router, 336);\n    ConnEnd srcPt336(Point(698, 1028.55), 15);\n    connRef336->setSourceEndpoint(srcPt336);\n    ConnEnd dstPt336(Point(528, 1049.05), 8);\n    connRef336->setDestEndpoint(dstPt336);\n    connRef336->setRoutingType((ConnType)2);\n\n    ConnRef *connRef337 = new ConnRef(router, 337);\n    ConnEnd srcPt337(Point(1092, 1107.21), 15);\n    connRef337->setSourceEndpoint(srcPt337);\n    ConnEnd dstPt337(Point(1134, 1097.21), 1);\n    connRef337->setDestEndpoint(dstPt337);\n    connRef337->setRoutingType((ConnType)2);\n\n    ConnRef *connRef338 = new ConnRef(router, 338);\n    ConnEnd srcPt338(Point(1659.49, 1203.05), 15);\n    connRef338->setSourceEndpoint(srcPt338);\n    ConnEnd dstPt338(Point(1723.2, 1296.71), 1);\n    connRef338->setDestEndpoint(dstPt338);\n    connRef338->setRoutingType((ConnType)2);\n\n    ConnRef *connRef339 = new ConnRef(router, 339);\n    ConnEnd srcPt339(Point(1540.2, 1299.21), 15);\n    connRef339->setSourceEndpoint(srcPt339);\n    ConnEnd dstPt339(Point(1565.2, 1348.71), 1);\n    connRef339->setDestEndpoint(dstPt339);\n    connRef339->setRoutingType((ConnType)2);\n\n    ConnRef *connRef340 = new ConnRef(router, 340);\n    ConnEnd srcPt340(Point(1540.2, 1299.21), 15);\n    connRef340->setSourceEndpoint(srcPt340);\n    ConnEnd dstPt340(Point(1501.53, 1348.71), 1);\n    connRef340->setDestEndpoint(dstPt340);\n    connRef340->setRoutingType((ConnType)2);\n\n    ConnRef *connRef341 = new ConnRef(router, 341);\n    ConnEnd srcPt341(Point(1355.33, 1045.05), 15);\n    connRef341->setSourceEndpoint(srcPt341);\n    ConnEnd dstPt341(Point(1355.33, 1091.05), 1);\n    connRef341->setDestEndpoint(dstPt341);\n    connRef341->setRoutingType((ConnType)2);\n\n    ConnRef *connRef342 = new ConnRef(router, 342);\n    ConnEnd srcPt342(Point(1340.2, 544.545), 15);\n    connRef342->setSourceEndpoint(srcPt342);\n    ConnEnd dstPt342(Point(1520.2, 452.545), 4);\n    connRef342->setDestEndpoint(dstPt342);\n    connRef342->setRoutingType((ConnType)2);\n\n    ConnRef *connRef343 = new ConnRef(router, 343);\n    ConnEnd srcPt343(Point(1340.2, 544.545), 15);\n    connRef343->setSourceEndpoint(srcPt343);\n    ConnEnd dstPt343(Point(1520.2, 544.545), 4);\n    connRef343->setDestEndpoint(dstPt343);\n    connRef343->setRoutingType((ConnType)2);\n\n    ConnRef *connRef344 = new ConnRef(router, 344);\n    ConnEnd srcPt344(Point(1659.49, 544.545), 15);\n    connRef344->setSourceEndpoint(srcPt344);\n    ConnEnd dstPt344(Point(1611.2, 1296.71), 1);\n    connRef344->setDestEndpoint(dstPt344);\n    connRef344->setRoutingType((ConnType)2);\n\n    ConnRef *connRef345 = new ConnRef(router, 345);\n    ConnEnd srcPt345(Point(390, 584.545), 15);\n    connRef345->setSourceEndpoint(srcPt345);\n    ConnEnd dstPt345(Point(334.2, 760.545), 1);\n    connRef345->setDestEndpoint(dstPt345);\n    connRef345->setRoutingType((ConnType)2);\n\n    ConnRef *connRef346 = new ConnRef(router, 346);\n    ConnEnd srcPt346(Point(390, 584.545), 15);\n    connRef346->setSourceEndpoint(srcPt346);\n    ConnEnd dstPt346(Point(334.2, 812.545), 1);\n    connRef346->setDestEndpoint(dstPt346);\n    connRef346->setRoutingType((ConnType)2);\n\n    ConnRef *connRef347 = new ConnRef(router, 347);\n    ConnEnd srcPt347(Point(390, 584.545), 15);\n    connRef347->setSourceEndpoint(srcPt347);\n    ConnEnd dstPt347(Point(334.2, 864.545), 1);\n    connRef347->setDestEndpoint(dstPt347);\n    connRef347->setRoutingType((ConnType)2);\n\n    ConnRef *connRef348 = new ConnRef(router, 348);\n    ConnEnd srcPt348(Point(629, 1101.05), 15);\n    connRef348->setSourceEndpoint(srcPt348);\n    ConnEnd dstPt348(Point(477.5, 1101.05), 8);\n    connRef348->setDestEndpoint(dstPt348);\n    connRef348->setRoutingType((ConnType)2);\n\n    ConnRef *connRef349 = new ConnRef(router, 349);\n    ConnEnd srcPt349(Point(1324, 1203.05), 15);\n    connRef349->setSourceEndpoint(srcPt349);\n    ConnEnd dstPt349(Point(1460.2, 1460.71), 4);\n    connRef349->setDestEndpoint(dstPt349);\n    connRef349->setRoutingType((ConnType)2);\n\n    ConnRef *connRef350 = new ConnRef(router, 350);\n    ConnEnd srcPt350(Point(1324, 1203.05), 15);\n    connRef350->setSourceEndpoint(srcPt350);\n    ConnEnd dstPt350(Point(1274, 1203.05), 8);\n    connRef350->setDestEndpoint(dstPt350);\n    connRef350->setRoutingType((ConnType)2);\n\n    ConnRef *connRef351 = new ConnRef(router, 351);\n    ConnEnd srcPt351(Point(1752.2, 1622.71), 2);\n    connRef351->setSourceEndpoint(srcPt351);\n    ConnEnd dstPt351(Point(1752.2, 1777.71), 15);\n    connRef351->setDestEndpoint(dstPt351);\n    connRef351->setRoutingType((ConnType)2);\n\n    ConnRef *connRef352 = new ConnRef(router, 352);\n    ConnEnd srcPt352(Point(1008.8, 1045.05), 8);\n    connRef352->setSourceEndpoint(srcPt352);\n    ConnEnd dstPt352(Point(1112, 1045.05), 15);\n    connRef352->setDestEndpoint(dstPt352);\n    connRef352->setRoutingType((ConnType)2);\n\n    ConnRef *connRef353 = new ConnRef(router, 353);\n    ConnEnd srcPt353(Point(399, 1295.05), 15);\n    connRef353->setSourceEndpoint(srcPt353);\n    ConnEnd dstPt353(Point(559, 1203.05), 4);\n    connRef353->setDestEndpoint(dstPt353);\n    connRef353->setRoutingType((ConnType)2);\n\n    ConnRef *connRef354 = new ConnRef(router, 354);\n    ConnEnd srcPt354(Point(399, 1295.05), 15);\n    connRef354->setSourceEndpoint(srcPt354);\n    ConnEnd dstPt354(Point(569, 1289.55), 2);\n    connRef354->setDestEndpoint(dstPt354);\n    connRef354->setRoutingType((ConnType)2);\n\n    ConnRef *connRef355 = new ConnRef(router, 355);\n    ConnEnd srcPt355(Point(407, 916.545), 1);\n    connRef355->setSourceEndpoint(srcPt355);\n    ConnEnd dstPt355(Point(220, 584.545), 15);\n    connRef355->setDestEndpoint(dstPt355);\n    connRef355->setRoutingType((ConnType)2);\n\n    ConnRef *connRef356 = new ConnRef(router, 356);\n    ConnEnd srcPt356(Point(220, 584.545), 15);\n    connRef356->setSourceEndpoint(srcPt356);\n    ConnEnd dstPt356(Point(170, 584.545), 8);\n    connRef356->setDestEndpoint(dstPt356);\n    connRef356->setRoutingType((ConnType)2);\n\n    ConnRef *connRef357 = new ConnRef(router, 357);\n    ConnEnd srcPt357(Point(1544.49, 1052.05), 15);\n    connRef357->setSourceEndpoint(srcPt357);\n    ConnEnd dstPt357(Point(1656.49, 869.545), 2);\n    connRef357->setDestEndpoint(dstPt357);\n    connRef357->setRoutingType((ConnType)2);\n\n    ConnRef *connRef358 = new ConnRef(router, 358);\n    ConnEnd srcPt358(Point(1488.53, 994.545), 8);\n    connRef358->setSourceEndpoint(srcPt358);\n    ConnEnd dstPt358(Point(1544.49, 1052.05), 15);\n    connRef358->setDestEndpoint(dstPt358);\n    connRef358->setRoutingType((ConnType)2);\n\n    ConnRef *connRef359 = new ConnRef(router, 359);\n    ConnEnd srcPt359(Point(1544.49, 1654.71), 15);\n    connRef359->setSourceEndpoint(srcPt359);\n    ConnEnd dstPt359(Point(1544.49, 1622.71), 2);\n    connRef359->setDestEndpoint(dstPt359);\n    connRef359->setRoutingType((ConnType)2);\n\n    ConnRef *connRef360 = new ConnRef(router, 360);\n    ConnEnd srcPt360(Point(344.2, 686.545), 8);\n    connRef360->setSourceEndpoint(srcPt360);\n    ConnEnd dstPt360(Point(629, 584.545), 15);\n    connRef360->setDestEndpoint(dstPt360);\n    connRef360->setRoutingType((ConnType)2);\n\n    ConnRef *connRef361 = new ConnRef(router, 361);\n    ConnEnd srcPt361(Point(339, 1245.05), 15);\n    connRef361->setSourceEndpoint(srcPt361);\n    ConnEnd dstPt361(Point(339, 1295.05), 15);\n    connRef361->setDestEndpoint(dstPt361);\n    connRef361->setRoutingType((ConnType)2);\n\n    ConnRef *connRef362 = new ConnRef(router, 362);\n    ConnEnd srcPt362(Point(339, 1153.05), 15);\n    connRef362->setSourceEndpoint(srcPt362);\n    ConnEnd dstPt362(Point(339, 1203.05), 15);\n    connRef362->setDestEndpoint(dstPt362);\n    connRef362->setRoutingType((ConnType)2);\n\n    ConnRef *connRef363 = new ConnRef(router, 363);\n    ConnEnd srcPt363(Point(73, 1149.05), 15);\n    connRef363->setSourceEndpoint(srcPt363);\n    ConnEnd dstPt363(Point(135, 1149.05), 15);\n    connRef363->setDestEndpoint(dstPt363);\n    connRef363->setRoutingType((ConnType)2);\n\n    ConnRef *connRef364 = new ConnRef(router, 364);\n    ConnEnd srcPt364(Point(1470.2, 688.545), 15);\n    connRef364->setSourceEndpoint(srcPt364);\n    ConnEnd dstPt364(Point(1470.2, 738.545), 15);\n    connRef364->setDestEndpoint(dstPt364);\n    connRef364->setRoutingType((ConnType)2);\n\n    ConnRef *connRef365 = new ConnRef(router, 365);\n    ConnEnd srcPt365(Point(518, 396), 15);\n    connRef365->setSourceEndpoint(srcPt365);\n    ConnEnd dstPt365(Point(518, 446), 15);\n    connRef365->setDestEndpoint(dstPt365);\n    connRef365->setRoutingType((ConnType)2);\n\n    ConnRef *connRef366 = new ConnRef(router, 366);\n    ConnEnd srcPt366(Point(334.2, 636.545), 15);\n    connRef366->setSourceEndpoint(srcPt366);\n    ConnEnd dstPt366(Point(334.2, 686.545), 15);\n    connRef366->setDestEndpoint(dstPt366);\n    connRef366->setRoutingType((ConnType)2);\n\n    ConnRef *connRef367 = new ConnRef(router, 367);\n    ConnEnd srcPt367(Point(191, 1099.05), 15);\n    connRef367->setSourceEndpoint(srcPt367);\n    ConnEnd dstPt367(Point(191, 1149.05), 15);\n    connRef367->setDestEndpoint(dstPt367);\n    connRef367->setRoutingType((ConnType)2);\n\n    ConnRef *connRef368 = new ConnRef(router, 368);\n    ConnEnd srcPt368(Point(396.2, 770.545), 15);\n    connRef368->setSourceEndpoint(srcPt368);\n    ConnEnd dstPt368(Point(334.2, 770.545), 15);\n    connRef368->setDestEndpoint(dstPt368);\n    connRef368->setRoutingType((ConnType)2);\n\n    ConnRef *connRef369 = new ConnRef(router, 369);\n    ConnEnd srcPt369(Point(396.2, 822.545), 15);\n    connRef369->setSourceEndpoint(srcPt369);\n    ConnEnd dstPt369(Point(334.2, 822.545), 15);\n    connRef369->setDestEndpoint(dstPt369);\n    connRef369->setRoutingType((ConnType)2);\n\n    ConnRef *connRef370 = new ConnRef(router, 370);\n    ConnEnd srcPt370(Point(396.2, 874.545), 15);\n    connRef370->setSourceEndpoint(srcPt370);\n    ConnEnd dstPt370(Point(334.2, 874.545), 15);\n    connRef370->setDestEndpoint(dstPt370);\n    connRef370->setRoutingType((ConnType)2);\n\n    ConnRef *connRef371 = new ConnRef(router, 371);\n    ConnEnd srcPt371(Point(467.5, 1051.05), 15);\n    connRef371->setSourceEndpoint(srcPt371);\n    ConnEnd dstPt371(Point(467.5, 1101.05), 15);\n    connRef371->setDestEndpoint(dstPt371);\n    connRef371->setRoutingType((ConnType)2);\n\n    ConnRef *connRef372 = new ConnRef(router, 372);\n    ConnEnd srcPt372(Point(586, 978.545), 15);\n    connRef372->setSourceEndpoint(srcPt372);\n    ConnEnd dstPt372(Point(586, 1028.55), 15);\n    connRef372->setDestEndpoint(dstPt372);\n    connRef372->setRoutingType((ConnType)2);\n\n    ConnRef *connRef373 = new ConnRef(router, 373);\n    ConnEnd srcPt373(Point(569, 1153.05), 15);\n    connRef373->setSourceEndpoint(srcPt373);\n    ConnEnd dstPt373(Point(569, 1203.05), 15);\n    connRef373->setDestEndpoint(dstPt373);\n    connRef373->setRoutingType((ConnType)2);\n\n    ConnRef *connRef374 = new ConnRef(router, 374);\n    ConnEnd srcPt374(Point(735, 396), 15);\n    connRef374->setSourceEndpoint(srcPt374);\n    ConnEnd dstPt374(Point(735, 446), 15);\n    connRef374->setDestEndpoint(dstPt374);\n    connRef374->setRoutingType((ConnType)2);\n\n    ConnRef *connRef375 = new ConnRef(router, 375);\n    ConnEnd srcPt375(Point(861, 396), 15);\n    connRef375->setSourceEndpoint(srcPt375);\n    ConnEnd dstPt375(Point(861, 446), 15);\n    connRef375->setDestEndpoint(dstPt375);\n    connRef375->setRoutingType((ConnType)2);\n\n    ConnRef *connRef376 = new ConnRef(router, 376);\n    ConnEnd srcPt376(Point(518, 534.545), 15);\n    connRef376->setSourceEndpoint(srcPt376);\n    ConnEnd dstPt376(Point(518, 584.545), 15);\n    connRef376->setDestEndpoint(dstPt376);\n    connRef376->setRoutingType((ConnType)2);\n\n    ConnRef *connRef377 = new ConnRef(router, 377);\n    ConnEnd srcPt377(Point(792.5, 772.545), 15);\n    connRef377->setSourceEndpoint(srcPt377);\n    ConnEnd dstPt377(Point(792.5, 822.545), 15);\n    connRef377->setDestEndpoint(dstPt377);\n    connRef377->setRoutingType((ConnType)2);\n\n    ConnRef *connRef378 = new ConnRef(router, 378);\n    ConnEnd srcPt378(Point(797, 978.545), 15);\n    connRef378->setSourceEndpoint(srcPt378);\n    ConnEnd dstPt378(Point(797, 1028.55), 15);\n    connRef378->setDestEndpoint(dstPt378);\n    connRef378->setRoutingType((ConnType)2);\n\n    ConnRef *connRef379 = new ConnRef(router, 379);\n    ConnEnd srcPt379(Point(841, 1123.55), 15);\n    connRef379->setSourceEndpoint(srcPt379);\n    ConnEnd dstPt379(Point(779, 1123.55), 15);\n    connRef379->setDestEndpoint(dstPt379);\n    connRef379->setRoutingType((ConnType)2);\n\n    ConnRef *connRef380 = new ConnRef(router, 380);\n    ConnEnd srcPt380(Point(792.5, 636.545), 15);\n    connRef380->setSourceEndpoint(srcPt380);\n    ConnEnd dstPt380(Point(792.5, 686.545), 15);\n    connRef380->setDestEndpoint(dstPt380);\n    connRef380->setRoutingType((ConnType)2);\n\n    ConnRef *connRef381 = new ConnRef(router, 381);\n    ConnEnd srcPt381(Point(799, 1175.55), 15);\n    connRef381->setSourceEndpoint(srcPt381);\n    ConnEnd dstPt381(Point(861, 1175.55), 15);\n    connRef381->setDestEndpoint(dstPt381);\n    connRef381->setRoutingType((ConnType)2);\n\n    ConnRef *connRef382 = new ConnRef(router, 382);\n    ConnEnd srcPt382(Point(870, 1410.71), 15);\n    connRef382->setSourceEndpoint(srcPt382);\n    ConnEnd dstPt382(Point(870, 1460.71), 15);\n    connRef382->setDestEndpoint(dstPt382);\n    connRef382->setRoutingType((ConnType)2);\n\n    ConnRef *connRef383 = new ConnRef(router, 383);\n    ConnEnd srcPt383(Point(754, 1543.71), 15);\n    connRef383->setSourceEndpoint(srcPt383);\n    ConnEnd dstPt383(Point(754, 1593.71), 15);\n    connRef383->setDestEndpoint(dstPt383);\n    connRef383->setRoutingType((ConnType)2);\n\n    ConnRef *connRef384 = new ConnRef(router, 384);\n    ConnEnd srcPt384(Point(826, 1676.71), 15);\n    connRef384->setSourceEndpoint(srcPt384);\n    ConnEnd dstPt384(Point(826, 1626.71), 15);\n    connRef384->setDestEndpoint(dstPt384);\n    connRef384->setRoutingType((ConnType)2);\n\n    ConnRef *connRef385 = new ConnRef(router, 385);\n    ConnEnd srcPt385(Point(987, 260), 15);\n    connRef385->setSourceEndpoint(srcPt385);\n    ConnEnd dstPt385(Point(925, 260), 15);\n    connRef385->setDestEndpoint(dstPt385);\n    connRef385->setRoutingType((ConnType)2);\n\n    ConnRef *connRef386 = new ConnRef(router, 386);\n    ConnEnd srcPt386(Point(987, 344), 15);\n    connRef386->setSourceEndpoint(srcPt386);\n    ConnEnd dstPt386(Point(925, 344), 15);\n    connRef386->setDestEndpoint(dstPt386);\n    connRef386->setRoutingType((ConnType)2);\n\n    ConnRef *connRef387 = new ConnRef(router, 387);\n    ConnEnd srcPt387(Point(987, 679.045), 15);\n    connRef387->setSourceEndpoint(srcPt387);\n    ConnEnd dstPt387(Point(925, 679.045), 15);\n    connRef387->setDestEndpoint(dstPt387);\n    connRef387->setRoutingType((ConnType)2);\n\n    ConnRef *connRef388 = new ConnRef(router, 388);\n    ConnEnd srcPt388(Point(987, 932.545), 15);\n    connRef388->setSourceEndpoint(srcPt388);\n    ConnEnd dstPt388(Point(925, 932.545), 15);\n    connRef388->setDestEndpoint(dstPt388);\n    connRef388->setRoutingType((ConnType)2);\n\n    ConnRef *connRef389 = new ConnRef(router, 389);\n    ConnEnd srcPt389(Point(985, 65), 15);\n    connRef389->setSourceEndpoint(srcPt389);\n    ConnEnd dstPt389(Point(985, 115), 15);\n    connRef389->setDestEndpoint(dstPt389);\n    connRef389->setRoutingType((ConnType)2);\n\n    ConnRef *connRef390 = new ConnRef(router, 390);\n    ConnEnd srcPt390(Point(990, 396), 15);\n    connRef390->setSourceEndpoint(srcPt390);\n    ConnEnd dstPt390(Point(990, 446), 15);\n    connRef390->setDestEndpoint(dstPt390);\n    connRef390->setRoutingType((ConnType)2);\n\n    ConnRef *connRef391 = new ConnRef(router, 391);\n    ConnEnd srcPt391(Point(1172, 396), 15);\n    connRef391->setSourceEndpoint(srcPt391);\n    ConnEnd dstPt391(Point(1172, 446), 15);\n    connRef391->setDestEndpoint(dstPt391);\n    connRef391->setRoutingType((ConnType)2);\n\n    ConnRef *connRef392 = new ConnRef(router, 392);\n    ConnEnd srcPt392(Point(1152, 710.379), 15);\n    connRef392->setSourceEndpoint(srcPt392);\n    ConnEnd dstPt392(Point(1152, 760.379), 15);\n    connRef392->setDestEndpoint(dstPt392);\n    connRef392->setRoutingType((ConnType)2);\n\n    ConnRef *connRef393 = new ConnRef(router, 393);\n    ConnEnd srcPt393(Point(1160, 822.545), 15);\n    connRef393->setSourceEndpoint(srcPt393);\n    ConnEnd dstPt393(Point(1098, 822.545), 15);\n    connRef393->setDestEndpoint(dstPt393);\n    connRef393->setRoutingType((ConnType)2);\n\n    ConnRef *connRef394 = new ConnRef(router, 394);\n    ConnEnd srcPt394(Point(1032, 1107.21), 15);\n    connRef394->setSourceEndpoint(srcPt394);\n    ConnEnd dstPt394(Point(970, 1107.21), 15);\n    connRef394->setDestEndpoint(dstPt394);\n    connRef394->setRoutingType((ConnType)2);\n\n    ConnRef *connRef395 = new ConnRef(router, 395);\n    ConnEnd srcPt395(Point(1000.8, 1629.71), 15);\n    connRef395->setSourceEndpoint(srcPt395);\n    ConnEnd dstPt395(Point(938.8, 1629.71), 15);\n    connRef395->setDestEndpoint(dstPt395);\n    connRef395->setRoutingType((ConnType)2);\n\n    ConnRef *connRef396 = new ConnRef(router, 396);\n    ConnEnd srcPt396(Point(758, 1635.71), 15);\n    connRef396->setSourceEndpoint(srcPt396);\n    ConnEnd dstPt396(Point(758, 1685.71), 15);\n    connRef396->setDestEndpoint(dstPt396);\n    connRef396->setRoutingType((ConnType)2);\n\n    ConnRef *connRef397 = new ConnRef(router, 397);\n    ConnEnd srcPt397(Point(758, 1727.71), 15);\n    connRef397->setSourceEndpoint(srcPt397);\n    ConnEnd dstPt397(Point(758, 1777.71), 15);\n    connRef397->setDestEndpoint(dstPt397);\n    connRef397->setRoutingType((ConnType)2);\n\n    ConnRef *connRef398 = new ConnRef(router, 398);\n    ConnEnd srcPt398(Point(758, 1859.71), 15);\n    connRef398->setSourceEndpoint(srcPt398);\n    ConnEnd dstPt398(Point(758, 1809.71), 15);\n    connRef398->setDestEndpoint(dstPt398);\n    connRef398->setRoutingType((ConnType)2);\n\n    ConnRef *connRef399 = new ConnRef(router, 399);\n    ConnEnd srcPt399(Point(1000.8, 1809.71), 15);\n    connRef399->setSourceEndpoint(srcPt399);\n    ConnEnd dstPt399(Point(938.8, 1809.71), 15);\n    connRef399->setDestEndpoint(dstPt399);\n    connRef399->setRoutingType((ConnType)2);\n\n    ConnRef *connRef400 = new ConnRef(router, 400);\n    ConnEnd srcPt400(Point(1166, 1562.71), 15);\n    connRef400->setSourceEndpoint(srcPt400);\n    ConnEnd dstPt400(Point(1228, 1562.71), 15);\n    connRef400->setDestEndpoint(dstPt400);\n    connRef400->setRoutingType((ConnType)2);\n\n    ConnRef *connRef401 = new ConnRef(router, 401);\n    ConnEnd srcPt401(Point(1228, 1510.71), 15);\n    connRef401->setSourceEndpoint(srcPt401);\n    ConnEnd dstPt401(Point(1228, 1460.71), 15);\n    connRef401->setDestEndpoint(dstPt401);\n    connRef401->setRoutingType((ConnType)2);\n\n    ConnRef *connRef402 = new ConnRef(router, 402);\n    ConnEnd srcPt402(Point(1402.2, 682.045), 15);\n    connRef402->setSourceEndpoint(srcPt402);\n    ConnEnd dstPt402(Point(1340.2, 682.045), 15);\n    connRef402->setDestEndpoint(dstPt402);\n    connRef402->setRoutingType((ConnType)2);\n\n    ConnRef *connRef403 = new ConnRef(router, 403);\n    ConnEnd srcPt403(Point(1417.33, 1101.05), 15);\n    connRef403->setSourceEndpoint(srcPt403);\n    ConnEnd dstPt403(Point(1355.33, 1101.05), 15);\n    connRef403->setDestEndpoint(dstPt403);\n    connRef403->setRoutingType((ConnType)2);\n\n    ConnRef *connRef404 = new ConnRef(router, 404);\n    ConnEnd srcPt404(Point(1530.2, 402.545), 15);\n    connRef404->setSourceEndpoint(srcPt404);\n    ConnEnd dstPt404(Point(1530.2, 452.545), 15);\n    connRef404->setDestEndpoint(dstPt404);\n    connRef404->setRoutingType((ConnType)2);\n\n    ConnRef *connRef405 = new ConnRef(router, 405);\n    ConnEnd srcPt405(Point(1530.2, 494.545), 15);\n    connRef405->setSourceEndpoint(srcPt405);\n    ConnEnd dstPt405(Point(1530.2, 544.545), 15);\n    connRef405->setDestEndpoint(dstPt405);\n    connRef405->setRoutingType((ConnType)2);\n\n    ConnRef *connRef406 = new ConnRef(router, 406);\n    ConnEnd srcPt406(Point(1470.2, 820.545), 15);\n    connRef406->setSourceEndpoint(srcPt406);\n    ConnEnd dstPt406(Point(1470.2, 770.545), 15);\n    connRef406->setDestEndpoint(dstPt406);\n    connRef406->setRoutingType((ConnType)2);\n\n    ConnRef *connRef407 = new ConnRef(router, 407);\n    ConnEnd srcPt407(Point(1530.2, 586.545), 15);\n    connRef407->setSourceEndpoint(srcPt407);\n    ConnEnd dstPt407(Point(1530.2, 636.545), 15);\n    connRef407->setDestEndpoint(dstPt407);\n    connRef407->setRoutingType((ConnType)2);\n\n    ConnRef *connRef408 = new ConnRef(router, 408);\n    ConnEnd srcPt408(Point(1606.49, 859.545), 15);\n    connRef408->setSourceEndpoint(srcPt408);\n    ConnEnd dstPt408(Point(1544.49, 859.545), 15);\n    connRef408->setDestEndpoint(dstPt408);\n    connRef408->setRoutingType((ConnType)2);\n\n    ConnRef *connRef409 = new ConnRef(router, 409);\n    ConnEnd srcPt409(Point(1718.49, 859.545), 15);\n    connRef409->setSourceEndpoint(srcPt409);\n    ConnEnd dstPt409(Point(1656.49, 859.545), 15);\n    connRef409->setDestEndpoint(dstPt409);\n    connRef409->setRoutingType((ConnType)2);\n\n    ConnRef *connRef410 = new ConnRef(router, 410);\n    ConnEnd srcPt410(Point(1470.2, 1153.05), 15);\n    connRef410->setSourceEndpoint(srcPt410);\n    ConnEnd dstPt410(Point(1470.2, 1203.05), 15);\n    connRef410->setDestEndpoint(dstPt410);\n    connRef410->setRoutingType((ConnType)2);\n\n    router->processTransaction();\n    router->outputDiagram(\"output/freeFloatingDirection01\");\n    assert(connRef239->displayRoute().size() == 4);\n    delete router;\n    return 0;\n};\n"
  },
  {
    "path": "cola/libavoid/tests/hola01.cpp",
    "content": "// Regression test exercises a problem with nudging that would result in the \n// following assertion if a sub-problem was unsatisfiable because the right \n// channel edge but not the left had moved.\n//    Assertion failed: (unsatisfiedRanges.size() > 0)\n// Reported by Steve Kieffer and Tobias Czauderna.\n//\n// Problem happens if EDGE128 is defined.\n\n#include \"libavoid/libavoid.h\"\n\nusing namespace Avoid;\nint main(void) {\n    Router *router = new Router(OrthogonalRouting);\n    router->setRoutingParameter((RoutingParameter)0, 30);\n    router->setRoutingParameter((RoutingParameter)1, 0);\n    router->setRoutingParameter((RoutingParameter)2, 120);\n    router->setRoutingParameter((RoutingParameter)3, 4000);\n    router->setRoutingParameter((RoutingParameter)4, 0);\n    router->setRoutingParameter((RoutingParameter)5, 0);\n    router->setRoutingParameter((RoutingParameter)6, 7.5);\n    router->setRoutingParameter((RoutingParameter)7, 4);\n    router->setRoutingParameter((RoutingParameter)8, 0);\n    router->setRoutingOption((RoutingOption)0, false);\n    router->setRoutingOption((RoutingOption)1, true);\n    router->setRoutingOption((RoutingOption)2, false);\n    router->setRoutingOption((RoutingOption)3, false);\n    router->setRoutingOption((RoutingOption)4, true);\n    router->setRoutingOption((RoutingOption)5, false);\n    router->setRoutingOption((RoutingOption)6, false);\n    Polygon polygon;\n    ConnRef *connRef = nullptr;\n    ConnEnd srcPt;\n    ConnEnd dstPt;\n    ConnEnd heConnPt;\n    PolyLine newRoute;\n    ShapeConnectionPin *connPin = nullptr;\n\n    // shapeRef1\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(274.03, 356.334);\n    polygon.ps[1] = Point(304.03, 356.334);\n    polygon.ps[2] = Point(304.03, 386.334);\n    polygon.ps[3] = Point(274.03, 386.334);\n    new ShapeRef(router, polygon, 1);\n\n    // shapeRef1\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(214.034, 356.334);\n    polygon.ps[1] = Point(244.034, 356.334);\n    polygon.ps[2] = Point(244.034, 386.334);\n    polygon.ps[3] = Point(214.034, 386.334);\n    new ShapeRef(router, polygon, 1);\n\n    // shapeRef2\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(214.034, 439.168);\n    polygon.ps[1] = Point(244.034, 439.168);\n    polygon.ps[2] = Point(244.034, 469.168);\n    polygon.ps[3] = Point(214.034, 469.168);\n    new ShapeRef(router, polygon, 2);\n\n    // shapeRef3\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(354.024, 416.334);\n    polygon.ps[1] = Point(384.024, 416.334);\n    polygon.ps[2] = Point(384.024, 446.334);\n    polygon.ps[3] = Point(354.024, 446.334);\n    new ShapeRef(router, polygon, 3);\n\n    // shapeRef4\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(274.03, 276.334);\n    polygon.ps[1] = Point(304.03, 276.334);\n    polygon.ps[2] = Point(304.03, 306.334);\n    polygon.ps[3] = Point(274.03, 306.334);\n    new ShapeRef(router, polygon, 4);\n\n    // shapeRef5\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(534.011, 276.334);\n    polygon.ps[1] = Point(564.011, 276.334);\n    polygon.ps[2] = Point(564.011, 306.334);\n    polygon.ps[3] = Point(534.011, 306.334);\n    new ShapeRef(router, polygon, 5);\n\n    // shapeRef6\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(414.023, 416.334);\n    polygon.ps[1] = Point(444.023, 416.334);\n    polygon.ps[2] = Point(444.023, 446.334);\n    polygon.ps[3] = Point(414.023, 446.334);\n    new ShapeRef(router, polygon, 6);\n\n    // shapeRef7\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(594.052, 276.334);\n    polygon.ps[1] = Point(624.052, 276.334);\n    polygon.ps[2] = Point(624.052, 306.334);\n    polygon.ps[3] = Point(594.052, 306.334);\n    new ShapeRef(router, polygon, 7);\n\n    // shapeRef8\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(254.052, 386.334);\n    polygon.ps[1] = Point(284.052, 386.334);\n    polygon.ps[2] = Point(284.052, 416.334);\n    polygon.ps[3] = Point(254.052, 416.334);\n    new ShapeRef(router, polygon, 8);\n\n    // shapeRef9\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(474.011, 416.334);\n    polygon.ps[1] = Point(504.011, 416.334);\n    polygon.ps[2] = Point(504.011, 446.334);\n    polygon.ps[3] = Point(474.011, 446.334);\n    new ShapeRef(router, polygon, 9);\n\n    // shapeRef10\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(274.03, 76.3341);\n    polygon.ps[1] = Point(304.03, 76.3341);\n    polygon.ps[2] = Point(304.03, 106.334);\n    polygon.ps[3] = Point(274.03, 106.334);\n    new ShapeRef(router, polygon, 10);\n\n    // shapeRef11\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(354.034, 536.334);\n    polygon.ps[1] = Point(384.034, 536.334);\n    polygon.ps[2] = Point(384.034, 566.334);\n    polygon.ps[3] = Point(354.034, 566.334);\n    new ShapeRef(router, polygon, 11);\n\n    // shapeRef12\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(414.023, 476.334);\n    polygon.ps[1] = Point(444.023, 476.334);\n    polygon.ps[2] = Point(444.023, 506.334);\n    polygon.ps[3] = Point(414.023, 506.334);\n    new ShapeRef(router, polygon, 12);\n\n    // shapeRef13\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(354.034, 596.334);\n    polygon.ps[1] = Point(384.034, 596.334);\n    polygon.ps[2] = Point(384.034, 626.334);\n    polygon.ps[3] = Point(354.034, 626.334);\n    new ShapeRef(router, polygon, 13);\n\n    // shapeRef14\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(274.03, 446.334);\n    polygon.ps[1] = Point(304.03, 446.334);\n    polygon.ps[2] = Point(304.03, 476.334);\n    polygon.ps[3] = Point(274.03, 476.334);\n    new ShapeRef(router, polygon, 14);\n\n    // shapeRef15\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(131.696, 276.334);\n    polygon.ps[1] = Point(161.696, 276.334);\n    polygon.ps[2] = Point(161.696, 306.334);\n    polygon.ps[3] = Point(131.696, 306.334);\n    new ShapeRef(router, polygon, 15);\n\n    // shapeRef16\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(564.023, 416.334);\n    polygon.ps[1] = Point(594.023, 416.334);\n    polygon.ps[2] = Point(594.023, 446.334);\n    polygon.ps[3] = Point(564.023, 446.334);\n    new ShapeRef(router, polygon, 16);\n\n    // shapeRef17\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8.56882, 276.334);\n    polygon.ps[1] = Point(38.5688, 276.334);\n    polygon.ps[2] = Point(38.5688, 306.334);\n    polygon.ps[3] = Point(8.56882, 306.334);\n    new ShapeRef(router, polygon, 17);\n\n    // shapeRef18\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(474.011, 216.334);\n    polygon.ps[1] = Point(504.011, 216.334);\n    polygon.ps[2] = Point(504.011, 246.334);\n    polygon.ps[3] = Point(474.011, 246.334);\n    new ShapeRef(router, polygon, 18);\n\n    // shapeRef19\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(474.011, 156.334);\n    polygon.ps[1] = Point(504.011, 156.334);\n    polygon.ps[2] = Point(504.011, 186.334);\n    polygon.ps[3] = Point(474.011, 186.334);\n    new ShapeRef(router, polygon, 19);\n\n    // shapeRef20\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(534.011, 216.334);\n    polygon.ps[1] = Point(564.011, 216.334);\n    polygon.ps[2] = Point(564.011, 246.334);\n    polygon.ps[3] = Point(534.011, 246.334);\n    new ShapeRef(router, polygon, 20);\n\n    // shapeRef21\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(474.011, 96.3341);\n    polygon.ps[1] = Point(504.011, 96.3341);\n    polygon.ps[2] = Point(504.011, 126.334);\n    polygon.ps[3] = Point(474.011, 126.334);\n    new ShapeRef(router, polygon, 21);\n\n    // shapeRef22\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(334.035, 356.334);\n    polygon.ps[1] = Point(364.035, 356.334);\n    polygon.ps[2] = Point(364.035, 386.334);\n    polygon.ps[3] = Point(334.035, 386.334);\n    new ShapeRef(router, polygon, 22);\n\n    // shapeRef23\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(414.023, 536.334);\n    polygon.ps[1] = Point(444.023, 536.334);\n    polygon.ps[2] = Point(444.023, 566.334);\n    polygon.ps[3] = Point(414.023, 566.334);\n    new ShapeRef(router, polygon, 23);\n\n    // shapeRef25\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(564.052, 180.582);\n    polygon.ps[1] = Point(594.052, 180.582);\n    polygon.ps[2] = Point(594.052, 210.582);\n    polygon.ps[3] = Point(564.052, 210.582);\n    new ShapeRef(router, polygon, 25);\n\n    // shapeRef26\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(154.041, 476.334);\n    polygon.ps[1] = Point(184.041, 476.334);\n    polygon.ps[2] = Point(184.041, 506.334);\n    polygon.ps[3] = Point(154.041, 506.334);\n    new ShapeRef(router, polygon, 26);\n\n    // shapeRef27\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(474.011, 300.457);\n    polygon.ps[1] = Point(504.011, 300.457);\n    polygon.ps[2] = Point(504.011, 330.457);\n    polygon.ps[3] = Point(474.011, 330.457);\n    new ShapeRef(router, polygon, 27);\n\n    // shapeRef28\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(134.045, 306.334);\n    polygon.ps[1] = Point(164.045, 306.334);\n    polygon.ps[2] = Point(164.045, 336.334);\n    polygon.ps[3] = Point(134.045, 336.334);\n    new ShapeRef(router, polygon, 28);\n\n    // shapeRef29\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(254.039, 216.334);\n    polygon.ps[1] = Point(284.039, 216.334);\n    polygon.ps[2] = Point(284.039, 246.334);\n    polygon.ps[3] = Point(254.039, 246.334);\n    new ShapeRef(router, polygon, 29);\n\n    // shapeRef30\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(134.045, 386.334);\n    polygon.ps[1] = Point(164.045, 386.334);\n    polygon.ps[2] = Point(164.045, 416.334);\n    polygon.ps[3] = Point(134.045, 416.334);\n    new ShapeRef(router, polygon, 30);\n\n    // shapeRef31\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(74.0462, 386.334);\n    polygon.ps[1] = Point(104.046, 386.334);\n    polygon.ps[2] = Point(104.046, 416.334);\n    polygon.ps[3] = Point(74.0462, 416.334);\n    new ShapeRef(router, polygon, 31);\n\n    // shapeRef32\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(594.052, 596.334);\n    polygon.ps[1] = Point(624.052, 596.334);\n    polygon.ps[2] = Point(624.052, 626.334);\n    polygon.ps[3] = Point(594.052, 626.334);\n    new ShapeRef(router, polygon, 32);\n\n    // shapeRef34\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(154.041, 356.334);\n    polygon.ps[1] = Point(184.041, 356.334);\n    polygon.ps[2] = Point(184.041, 386.334);\n    polygon.ps[3] = Point(154.041, 386.334);\n    new ShapeRef(router, polygon, 34);\n\n    // shapeRef35\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(474.011, 36.3341);\n    polygon.ps[1] = Point(504.011, 36.3341);\n    polygon.ps[2] = Point(504.011, 66.3341);\n    polygon.ps[3] = Point(474.011, 66.3341);\n    new ShapeRef(router, polygon, 35);\n\n    // shapeRef38\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(534.011, 386.334);\n    polygon.ps[1] = Point(564.011, 386.334);\n    polygon.ps[2] = Point(564.011, 416.334);\n    polygon.ps[3] = Point(534.011, 416.334);\n    new ShapeRef(router, polygon, 38);\n\n    // shapeRef39\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(564.023, 343.278);\n    polygon.ps[1] = Point(594.023, 343.278);\n    polygon.ps[2] = Point(594.023, 373.278);\n    polygon.ps[3] = Point(564.023, 373.278);\n    new ShapeRef(router, polygon, 39);\n\n    // shapeRef40\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(74.0462, 156.334);\n    polygon.ps[1] = Point(104.046, 156.334);\n    polygon.ps[2] = Point(104.046, 186.334);\n    polygon.ps[3] = Point(74.0462, 186.334);\n    new ShapeRef(router, polygon, 40);\n\n    // shapeRef41\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(214.034, 76.3341);\n    polygon.ps[1] = Point(244.034, 76.3341);\n    polygon.ps[2] = Point(244.034, 106.334);\n    polygon.ps[3] = Point(214.034, 106.334);\n    new ShapeRef(router, polygon, 41);\n\n    // shapeRef42\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(334.035, 136.334);\n    polygon.ps[1] = Point(364.035, 136.334);\n    polygon.ps[2] = Point(364.035, 166.334);\n    polygon.ps[3] = Point(334.035, 166.334);\n    new ShapeRef(router, polygon, 42);\n\n    // shapeRef45\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(354.024, 300.457);\n    polygon.ps[1] = Point(384.024, 300.457);\n    polygon.ps[2] = Point(384.024, 330.457);\n    polygon.ps[3] = Point(354.024, 330.457);\n    new ShapeRef(router, polygon, 45);\n\n    // shapeRef46\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(154.041, 416.334);\n    polygon.ps[1] = Point(184.041, 416.334);\n    polygon.ps[2] = Point(184.041, 446.334);\n    polygon.ps[3] = Point(154.041, 446.334);\n    new ShapeRef(router, polygon, 46);\n\n    // shapeRef47\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(214.034, 136.334);\n    polygon.ps[1] = Point(244.034, 136.334);\n    polygon.ps[2] = Point(244.034, 166.334);\n    polygon.ps[3] = Point(214.034, 166.334);\n    new ShapeRef(router, polygon, 47);\n\n    // shapeRef48\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(214.034, 296.334);\n    polygon.ps[1] = Point(244.034, 296.334);\n    polygon.ps[2] = Point(244.034, 326.334);\n    polygon.ps[3] = Point(214.034, 326.334);\n    new ShapeRef(router, polygon, 48);\n\n    // shapeRef50\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(74.0462, 296.334);\n    polygon.ps[1] = Point(104.046, 296.334);\n    polygon.ps[2] = Point(104.046, 326.334);\n    polygon.ps[3] = Point(74.0462, 326.334);\n    new ShapeRef(router, polygon, 50);\n\n    // shapeRef51\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(354.024, 36.3341);\n    polygon.ps[1] = Point(384.024, 36.3341);\n    polygon.ps[2] = Point(384.024, 66.3341);\n    polygon.ps[3] = Point(354.024, 66.3341);\n    new ShapeRef(router, polygon, 51);\n\n    // shapeRef53\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(354.024, 180.582);\n    polygon.ps[1] = Point(384.024, 180.582);\n    polygon.ps[2] = Point(384.024, 210.582);\n    polygon.ps[3] = Point(354.024, 210.582);\n    new ShapeRef(router, polygon, 53);\n\n    // shapeRef54\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(534.011, 596.334);\n    polygon.ps[1] = Point(564.011, 596.334);\n    polygon.ps[2] = Point(564.011, 626.334);\n    polygon.ps[3] = Point(534.011, 626.334);\n    new ShapeRef(router, polygon, 54);\n\n    // shapeRef55\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8.56882, 156.334);\n    polygon.ps[1] = Point(38.5688, 156.334);\n    polygon.ps[2] = Point(38.5688, 186.334);\n    polygon.ps[3] = Point(8.56882, 186.334);\n    new ShapeRef(router, polygon, 55);\n\n    // shapeRef57\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(281.314, 476.334);\n    polygon.ps[1] = Point(311.314, 476.334);\n    polygon.ps[2] = Point(311.314, 506.334);\n    polygon.ps[3] = Point(281.314, 506.334);\n    new ShapeRef(router, polygon, 57);\n\n    // shapeRef58\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(254.039, 312.99);\n    polygon.ps[1] = Point(284.039, 312.99);\n    polygon.ps[2] = Point(284.039, 342.99);\n    polygon.ps[3] = Point(254.039, 342.99);\n    new ShapeRef(router, polygon, 58);\n\n    // connRef59\n    connRef = new ConnRef(router, 59);\n    srcPt = ConnEnd(Point(229.034, 371.334), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(289.03, 371.334), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef60\n    connRef = new ConnRef(router, 60);\n    srcPt = ConnEnd(Point(169.041, 491.334), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(169.041, 431.334), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef61\n    connRef = new ConnRef(router, 61);\n    srcPt = ConnEnd(Point(369.024, 315.457), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(369.024, 431.334), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef62\n    connRef = new ConnRef(router, 62);\n    srcPt = ConnEnd(Point(23.5688, 291.334), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(23.5688, 171.334), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef63\n    connRef = new ConnRef(router, 63);\n    srcPt = ConnEnd(Point(429.023, 551.334), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(429.023, 491.334), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef64\n    connRef = new ConnRef(router, 64);\n    srcPt = ConnEnd(Point(549.011, 611.334), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(369.034, 611.334), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef65\n    connRef = new ConnRef(router, 65);\n    srcPt = ConnEnd(Point(369.024, 431.334), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(229.034, 454.168), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef66\n    connRef = new ConnRef(router, 66);\n    srcPt = ConnEnd(Point(429.023, 551.334), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(579.023, 431.334), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef67\n    connRef = new ConnRef(router, 67);\n    srcPt = ConnEnd(Point(489.011, 231.334), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(269.039, 231.334), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef68\n    connRef = new ConnRef(router, 68);\n    srcPt = ConnEnd(Point(369.034, 551.334), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(429.023, 551.334), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef69\n    connRef = new ConnRef(router, 69);\n    srcPt = ConnEnd(Point(169.041, 371.334), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(149.045, 401.334), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef70\n    connRef = new ConnRef(router, 70);\n    srcPt = ConnEnd(Point(169.041, 491.334), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(229.034, 371.334), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef71\n    connRef = new ConnRef(router, 71);\n    srcPt = ConnEnd(Point(149.045, 401.334), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(149.045, 321.334), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef72\n    connRef = new ConnRef(router, 72);\n    srcPt = ConnEnd(Point(489.011, 231.334), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(549.011, 291.334), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef73\n    connRef = new ConnRef(router, 73);\n    srcPt = ConnEnd(Point(229.034, 91.3341), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(289.03, 91.3341), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef74\n    connRef = new ConnRef(router, 74);\n    srcPt = ConnEnd(Point(369.024, 315.457), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(369.024, 195.582), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef75\n    connRef = new ConnRef(router, 75);\n    srcPt = ConnEnd(Point(489.011, 171.334), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(489.011, 231.334), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef76\n    connRef = new ConnRef(router, 76);\n    srcPt = ConnEnd(Point(146.696, 291.334), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(289.03, 291.334), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef77\n    connRef = new ConnRef(router, 77);\n    srcPt = ConnEnd(Point(23.5688, 291.334), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(146.696, 291.334), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef78\n    connRef = new ConnRef(router, 78);\n    srcPt = ConnEnd(Point(609.052, 611.334), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(289.03, 461.334), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef79\n    connRef = new ConnRef(router, 79);\n    srcPt = ConnEnd(Point(489.011, 431.334), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(429.023, 431.334), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef80\n    connRef = new ConnRef(router, 80);\n    srcPt = ConnEnd(Point(489.011, 315.457), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(489.011, 231.334), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef81\n    connRef = new ConnRef(router, 81);\n    srcPt = ConnEnd(Point(229.034, 371.334), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(169.041, 371.334), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef82\n    connRef = new ConnRef(router, 82);\n    srcPt = ConnEnd(Point(489.011, 431.334), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(489.011, 315.457), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef83\n    connRef = new ConnRef(router, 83);\n    srcPt = ConnEnd(Point(89.0462, 171.334), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(489.011, 171.334), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef84\n    connRef = new ConnRef(router, 84);\n    srcPt = ConnEnd(Point(229.034, 151.334), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(229.034, 91.3341), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef85\n    connRef = new ConnRef(router, 85);\n    srcPt = ConnEnd(Point(289.03, 91.3341), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(289.03, 291.334), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef86\n    connRef = new ConnRef(router, 86);\n    srcPt = ConnEnd(Point(89.0462, 311.334), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(89.0462, 171.334), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef87\n    connRef = new ConnRef(router, 87);\n    srcPt = ConnEnd(Point(149.045, 321.334), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(489.011, 171.334), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef88\n    connRef = new ConnRef(router, 88);\n    srcPt = ConnEnd(Point(489.011, 315.457), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(609.052, 291.334), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef89\n    connRef = new ConnRef(router, 89);\n    srcPt = ConnEnd(Point(369.024, 195.582), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(369.024, 51.3341), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef90\n    connRef = new ConnRef(router, 90);\n    srcPt = ConnEnd(Point(289.03, 461.334), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(289.03, 371.334), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef91\n    connRef = new ConnRef(router, 91);\n    srcPt = ConnEnd(Point(296.314, 491.334), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(429.023, 491.334), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef92\n    connRef = new ConnRef(router, 92);\n    srcPt = ConnEnd(Point(369.034, 611.334), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(369.034, 551.334), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef93\n    connRef = new ConnRef(router, 93);\n    srcPt = ConnEnd(Point(609.052, 291.334), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(549.011, 291.334), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef94\n    connRef = new ConnRef(router, 94);\n    srcPt = ConnEnd(Point(579.023, 431.334), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(579.023, 358.278), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef95\n    connRef = new ConnRef(router, 95);\n    srcPt = ConnEnd(Point(549.011, 231.334), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(549.011, 291.334), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef96\n    connRef = new ConnRef(router, 96);\n    srcPt = ConnEnd(Point(579.052, 195.582), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(549.011, 291.334), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef97\n    connRef = new ConnRef(router, 97);\n    srcPt = ConnEnd(Point(489.011, 231.334), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(549.011, 231.334), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef98\n    connRef = new ConnRef(router, 98);\n    srcPt = ConnEnd(Point(549.011, 291.334), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(289.03, 291.334), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef99\n    connRef = new ConnRef(router, 99);\n    srcPt = ConnEnd(Point(149.045, 401.334), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(269.052, 401.334), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef100\n    connRef = new ConnRef(router, 100);\n    srcPt = ConnEnd(Point(579.023, 431.334), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(489.011, 431.334), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef101\n    connRef = new ConnRef(router, 101);\n    srcPt = ConnEnd(Point(229.034, 454.168), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(229.034, 371.334), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef102\n    connRef = new ConnRef(router, 102);\n    srcPt = ConnEnd(Point(489.011, 111.334), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(489.011, 171.334), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef103\n    connRef = new ConnRef(router, 103);\n    srcPt = ConnEnd(Point(369.024, 315.457), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(489.011, 315.457), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef104\n    connRef = new ConnRef(router, 104);\n    srcPt = ConnEnd(Point(349.035, 371.334), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(489.011, 111.334), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef105\n    connRef = new ConnRef(router, 105);\n    srcPt = ConnEnd(Point(429.023, 431.334), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(289.03, 291.334), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef106\n    connRef = new ConnRef(router, 106);\n    srcPt = ConnEnd(Point(269.039, 231.334), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(349.035, 371.334), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef107\n    connRef = new ConnRef(router, 107);\n    srcPt = ConnEnd(Point(289.03, 371.334), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(349.035, 371.334), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef108\n    connRef = new ConnRef(router, 108);\n    srcPt = ConnEnd(Point(579.023, 358.278), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(549.011, 291.334), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef109\n    connRef = new ConnRef(router, 109);\n    srcPt = ConnEnd(Point(429.023, 431.334), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(369.024, 431.334), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef110\n    connRef = new ConnRef(router, 110);\n    srcPt = ConnEnd(Point(369.024, 51.3341), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(489.011, 51.3341), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef111\n    connRef = new ConnRef(router, 111);\n    srcPt = ConnEnd(Point(296.314, 491.334), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(169.041, 491.334), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef112\n    connRef = new ConnRef(router, 112);\n    srcPt = ConnEnd(Point(349.035, 151.334), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(349.035, 371.334), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef113\n    connRef = new ConnRef(router, 113);\n    srcPt = ConnEnd(Point(229.034, 311.334), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(229.034, 371.334), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef114\n    connRef = new ConnRef(router, 114);\n    srcPt = ConnEnd(Point(269.039, 327.99), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(169.041, 431.334), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef115\n    connRef = new ConnRef(router, 115);\n    srcPt = ConnEnd(Point(369.034, 551.334), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(229.034, 371.334), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef116\n    connRef = new ConnRef(router, 116);\n    srcPt = ConnEnd(Point(429.023, 491.334), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(429.023, 431.334), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef117\n    connRef = new ConnRef(router, 117);\n    srcPt = ConnEnd(Point(89.0462, 401.334), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(149.045, 401.334), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef118\n    connRef = new ConnRef(router, 118);\n    srcPt = ConnEnd(Point(349.035, 151.334), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(229.034, 151.334), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef119\n    connRef = new ConnRef(router, 119);\n    srcPt = ConnEnd(Point(549.011, 401.334), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(549.011, 611.334), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef120\n    connRef = new ConnRef(router, 120);\n    srcPt = ConnEnd(Point(369.024, 195.582), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(579.052, 195.582), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef121\n    connRef = new ConnRef(router, 121);\n    srcPt = ConnEnd(Point(269.039, 327.99), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(269.039, 231.334), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef122\n    connRef = new ConnRef(router, 122);\n    srcPt = ConnEnd(Point(169.041, 431.334), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(169.041, 371.334), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef123\n    connRef = new ConnRef(router, 123);\n    srcPt = ConnEnd(Point(369.024, 431.334), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(169.041, 431.334), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef124\n    connRef = new ConnRef(router, 124);\n    srcPt = ConnEnd(Point(229.034, 151.334), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(229.034, 311.334), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef125\n    connRef = new ConnRef(router, 125);\n    srcPt = ConnEnd(Point(549.011, 401.334), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(269.052, 401.334), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef126\n    connRef = new ConnRef(router, 126);\n    srcPt = ConnEnd(Point(549.011, 401.334), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(549.011, 291.334), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef127\n    connRef = new ConnRef(router, 127);\n    srcPt = ConnEnd(Point(269.052, 401.334), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(289.03, 291.334), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n#define EDGE128\n#ifdef EDGE128\n    // connRef128\n    connRef = new ConnRef(router, 128);\n    srcPt = ConnEnd(Point(289.03, 291.334), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(289.03, 371.334), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n#endif\n\n    router->processTransaction();\n    router->outputDiagram(\"output/hola01\");\n    delete router;\n    return 0;\n};\n\n"
  },
  {
    "path": "cola/libavoid/tests/hyperedge01.cpp",
    "content": "#include \"libavoid/libavoid.h\"\nusing namespace Avoid;\nint main(void) {\n    Router *router = new Router(\n            OrthogonalRouting);\n    router->setRoutingPenalty((PenaltyType)0, 50);\n    router->setRoutingPenalty((PenaltyType)1, 0);\n    //router->setRoutingPenalty((PenaltyType)2, 200);\n    router->setRoutingPenalty((PenaltyType)3, 4000);\n    //router->setRoutingPenalty((PenaltyType)4, 110);\n    router->setRoutingParameter(idealNudgingDistance, 25);\n\n    JunctionRef *shapeRef171026375 = new JunctionRef(router, Point(51075, 51225), 171026375);\n\n    Polygon poly878674(4);\n    poly878674.ps[0] = Point(51454, 51200);\n    poly878674.ps[1] = Point(51454, 51285);\n    poly878674.ps[2] = Point(51396, 51285);\n    poly878674.ps[3] = Point(51396, 51200);\n    new ShapeRef(router, poly878674, 878674);\n\n    Polygon poly286906544(4);\n    poly286906544.ps[0] = Point(50704, 51250);\n    poly286906544.ps[1] = Point(50704, 51335);\n    poly286906544.ps[2] = Point(50646, 51335);\n    poly286906544.ps[3] = Point(50646, 51250);\n    new ShapeRef(router, poly286906544, 286906544);\n\n    Polygon poly170813081(4);\n    poly170813081.ps[0] = Point(51104, 51090);\n    poly170813081.ps[1] = Point(51104, 51175);\n    poly170813081.ps[2] = Point(51046, 51175);\n    poly170813081.ps[3] = Point(51046, 51090);\n    new ShapeRef(router, poly170813081, 170813081);\n\n    Polygon poly342721632(4);\n    poly342721632.ps[0] = Point(51910, 50946);\n    poly342721632.ps[1] = Point(51910, 51004);\n    poly342721632.ps[2] = Point(51825, 51004);\n    poly342721632.ps[3] = Point(51825, 50946);\n    new ShapeRef(router, poly342721632, 342721632);\n\n    JunctionRef *shapeRef102578723 = new JunctionRef(router, Point(51275, 50725), 102578723);\n\n    JunctionRef *shapeRef17922268 = new JunctionRef(router, Point(50850, 50975), 17922268);\n\n    Polygon poly11057158(4);\n    poly11057158.ps[0] = Point(51679, 51200);\n    poly11057158.ps[1] = Point(51679, 51285);\n    poly11057158.ps[2] = Point(51621, 51285);\n    poly11057158.ps[3] = Point(51621, 51200);\n    new ShapeRef(router, poly11057158, 11057158);\n\n    Polygon poly322446045(4);\n    poly322446045.ps[0] = Point(50779, 51240);\n    poly322446045.ps[1] = Point(50779, 51335);\n    poly322446045.ps[2] = Point(50721, 51335);\n    poly322446045.ps[3] = Point(50721, 51240);\n    new ShapeRef(router, poly322446045, 322446045);\n\n    Polygon poly767565928(4);\n    poly767565928.ps[0] = Point(51004, 50741);\n    poly767565928.ps[1] = Point(51004, 50826);\n    poly767565928.ps[2] = Point(50946, 50826);\n    poly767565928.ps[3] = Point(50946, 50741);\n    new ShapeRef(router, poly767565928, 767565928);\n\n    Polygon poly280939374(4);\n    poly280939374.ps[0] = Point(51085, 50971);\n    poly280939374.ps[1] = Point(51085, 51029);\n    poly280939374.ps[2] = Point(51000, 51029);\n    poly280939374.ps[3] = Point(51000, 50971);\n    new ShapeRef(router, poly280939374, 280939374);\n\n    Polygon poly630623707(4);\n    poly630623707.ps[0] = Point(51279, 50925);\n    poly630623707.ps[1] = Point(51279, 51010);\n    poly630623707.ps[2] = Point(51221, 51010);\n    poly630623707.ps[3] = Point(51221, 50925);\n    new ShapeRef(router, poly630623707, 630623707);\n\n    Polygon poly28160455(4);\n    poly28160455.ps[0] = Point(50879, 51250);\n    poly28160455.ps[1] = Point(50879, 51335);\n    poly28160455.ps[2] = Point(50821, 51335);\n    poly28160455.ps[3] = Point(50821, 51250);\n    new ShapeRef(router, poly28160455, 28160455);\n\n    Polygon poly525890448(4);\n    poly525890448.ps[0] = Point(51174, 50721);\n    poly525890448.ps[1] = Point(51174, 50779);\n    poly525890448.ps[2] = Point(51089, 50779);\n    poly525890448.ps[3] = Point(51089, 50721);\n    new ShapeRef(router, poly525890448, 525890448);\n\n    Polygon poly157182552(4);\n    poly157182552.ps[0] = Point(51529, 51190);\n    poly157182552.ps[1] = Point(51529, 51285);\n    poly157182552.ps[2] = Point(51471, 51285);\n    poly157182552.ps[3] = Point(51471, 51190);\n    new ShapeRef(router, poly157182552, 157182552);\n\n    Polygon poly799637520(4);\n    poly799637520.ps[0] = Point(50625, 50896);\n    poly799637520.ps[1] = Point(50625, 50954);\n    poly799637520.ps[2] = Point(50540, 50954);\n    poly799637520.ps[3] = Point(50540, 50896);\n    new ShapeRef(router, poly799637520, 799637520);\n\n    Polygon poly60349320(4);\n    poly60349320.ps[0] = Point(50904, 51025);\n    poly60349320.ps[1] = Point(50904, 51110);\n    poly60349320.ps[2] = Point(50846, 51110);\n    poly60349320.ps[3] = Point(50846, 51025);\n    new ShapeRef(router, poly60349320, 60349320);\n    \n    Polygon poly119851894(4);\n    poly119851894.ps[0] = Point(51179, 51225);\n    poly119851894.ps[1] = Point(51179, 51310);\n    poly119851894.ps[2] = Point(51121, 51310);\n    poly119851894.ps[3] = Point(51121, 51225);\n    new ShapeRef(router, poly119851894, 119851894);\n    \n    Polygon poly233164275(4);\n    poly233164275.ps[0] = Point(51604, 51200);\n    poly233164275.ps[1] = Point(51604, 51285);\n    poly233164275.ps[2] = Point(51546, 51285);\n    poly233164275.ps[3] = Point(51546, 51200);\n    new ShapeRef(router, poly233164275, 233164275);\n    \n    Polygon poly807558175(4);\n    poly807558175.ps[0] = Point(51604, 51000);\n    poly807558175.ps[1] = Point(51604, 51085);\n    poly807558175.ps[2] = Point(51546, 51085);\n    poly807558175.ps[3] = Point(51546, 51000);\n    new ShapeRef(router, poly807558175, 807558175);\n    \n    JunctionRef *shapeRef265539540 = new JunctionRef(router, Point(51625, 50950), 265539540);\n\n    Polygon poly108859552(4);\n    poly108859552.ps[0] = Point(51560, 50721);\n    poly108859552.ps[1] = Point(51560, 50779);\n    poly108859552.ps[2] = Point(51475, 50779);\n    poly108859552.ps[3] = Point(51475, 50721);\n    new ShapeRef(router, poly108859552, 108859552);\n    \n    Polygon poly404900496(4);\n    poly404900496.ps[0] = Point(51525, 50946);\n    poly404900496.ps[1] = Point(51525, 51004);\n    poly404900496.ps[2] = Point(51440, 51004);\n    poly404900496.ps[3] = Point(51440, 50946);\n    new ShapeRef(router, poly404900496, 404900496);\n    \n    Polygon poly620445000(4);\n    poly620445000.ps[0] = Point(51029, 51225);\n    poly620445000.ps[1] = Point(51029, 51310);\n    poly620445000.ps[2] = Point(50971, 51310);\n    poly620445000.ps[3] = Point(50971, 51225);\n    new ShapeRef(router, poly620445000, 620445000);\n    \n    ConnRef *connRef450684531 = new ConnRef(router, 450684531);\n    ConnEnd srcPt450684531(Point(51165, 50750), 8);\n    connRef450684531->setSourceEndpoint(srcPt450684531);\n    ConnEnd dstPt450684531(shapeRef102578723);\n    connRef450684531->setDestEndpoint(dstPt450684531);\n    connRef450684531->setRoutingType((ConnType)2);\n\n    ConnRef *connRef135371350 = new ConnRef(router, 135371350);\n    ConnEnd srcPt135371350(shapeRef102578723);\n    connRef135371350->setSourceEndpoint(srcPt135371350);\n    ConnEnd dstPt135371350(Point(51250, 50935), 1);\n    connRef135371350->setDestEndpoint(dstPt135371350);\n    connRef135371350->setRoutingType((ConnType)2);\n\n    ConnRef *connRef143333770 = new ConnRef(router, 143333770);\n    ConnEnd srcPt143333770(Point(51485, 50750), 4);\n    connRef143333770->setSourceEndpoint(srcPt143333770);\n    ConnEnd dstPt143333770(shapeRef102578723);\n    connRef143333770->setDestEndpoint(dstPt143333770);\n    connRef143333770->setRoutingType((ConnType)2);\n\n    ConnRef *connRef102966575 = new ConnRef(router, 102966575);\n    ConnEnd srcPt102966575(Point(50615, 50925), 8);\n    connRef102966575->setSourceEndpoint(srcPt102966575);\n    ConnEnd dstPt102966575(shapeRef17922268);\n    connRef102966575->setDestEndpoint(dstPt102966575);\n    connRef102966575->setRoutingType((ConnType)2);\n\n    ConnRef *connRef68998920 = new ConnRef(router, 68998920);\n    ConnEnd srcPt68998920(shapeRef17922268);\n    connRef68998920->setSourceEndpoint(srcPt68998920);\n    ConnEnd dstPt68998920(Point(50975, 50815), 2);\n    connRef68998920->setDestEndpoint(dstPt68998920);\n    connRef68998920->setRoutingType((ConnType)2);\n\n    ConnRef *connRef1625709 = new ConnRef(router, 1625709);\n    ConnEnd srcPt1625709(shapeRef17922268);\n    connRef1625709->setSourceEndpoint(srcPt1625709);\n    ConnEnd dstPt1625709(Point(50875, 51035), 1);\n    connRef1625709->setDestEndpoint(dstPt1625709);\n    connRef1625709->setRoutingType((ConnType)2);\n\n    ConnRef *connRef34178450 = new ConnRef(router, 34178450);\n    ConnEnd srcPt34178450(shapeRef17922268);\n    connRef34178450->setSourceEndpoint(srcPt34178450);\n    ConnEnd dstPt34178450(Point(51010, 51000), 4);\n    connRef34178450->setDestEndpoint(dstPt34178450);\n    connRef34178450->setRoutingType((ConnType)2);\n\n    ConnRef *connRef314512308 = new ConnRef(router, 314512308);\n    ConnEnd srcPt314512308(Point(51000, 51235), 1);\n    connRef314512308->setSourceEndpoint(srcPt314512308);\n    ConnEnd dstPt314512308(shapeRef171026375);\n    connRef314512308->setDestEndpoint(dstPt314512308);\n    connRef314512308->setRoutingType((ConnType)2);\n\n    ConnRef *connRef182776308 = new ConnRef(router, 182776308);\n    ConnEnd srcPt182776308(shapeRef171026375);\n    connRef182776308->setSourceEndpoint(srcPt182776308);\n    ConnEnd dstPt182776308(Point(51075, 51165), 2);\n    connRef182776308->setDestEndpoint(dstPt182776308);\n    connRef182776308->setRoutingType((ConnType)2);\n\n    ConnRef *connRef96504835 = new ConnRef(router, 96504835);\n    ConnEnd srcPt96504835(Point(51150, 51235), 1);\n    connRef96504835->setSourceEndpoint(srcPt96504835);\n    ConnEnd dstPt96504835(shapeRef171026375);\n    connRef96504835->setDestEndpoint(dstPt96504835);\n    connRef96504835->setRoutingType((ConnType)2);\n\n    ConnRef *connRef467016913 = new ConnRef(router, 467016913);\n    ConnEnd srcPt467016913(shapeRef265539540);\n    connRef467016913->setSourceEndpoint(srcPt467016913);\n    ConnEnd dstPt467016913(Point(51575, 51010), 1);\n    connRef467016913->setDestEndpoint(dstPt467016913);\n    connRef467016913->setRoutingType((ConnType)2);\n\n    ConnRef *connRef45740440 = new ConnRef(router, 45740440);\n    ConnEnd srcPt45740440(Point(51835, 50975), 4);\n    connRef45740440->setSourceEndpoint(srcPt45740440);\n    ConnEnd dstPt45740440(shapeRef265539540);\n    connRef45740440->setDestEndpoint(dstPt45740440);\n    connRef45740440->setRoutingType((ConnType)2);\n\n    ConnRef *connRef985644192 = new ConnRef(router, 985644192);\n    ConnEnd srcPt985644192(Point(51515, 50975), 8);\n    connRef985644192->setSourceEndpoint(srcPt985644192);\n    ConnEnd dstPt985644192(shapeRef265539540);\n    connRef985644192->setDestEndpoint(dstPt985644192);\n    connRef985644192->setRoutingType((ConnType)2);\n\n    ConnRef *connRef1 = new ConnRef(router, 1);\n    ConnEnd srcPt1(shapeRef102578723);\n    connRef1->setSourceEndpoint(srcPt1);\n    ConnEnd dstPt1(shapeRef171026375);\n    connRef1->setDestEndpoint(dstPt1);\n    connRef1->setRoutingType((ConnType)2);\n\n    ConnRef *connRef2 = new ConnRef(router, 2);\n    ConnEnd srcPt2(shapeRef102578723);\n    connRef2->setSourceEndpoint(srcPt2);\n    ConnEnd dstPt2(shapeRef17922268);\n    connRef2->setDestEndpoint(dstPt2);\n    connRef2->setRoutingType((ConnType)2);\n\n    ConnRef *connRef3 = new ConnRef(router, 3);\n    ConnEnd srcPt3(shapeRef102578723);\n    connRef3->setSourceEndpoint(srcPt3);\n    ConnEnd dstPt3(shapeRef265539540);\n    connRef3->setDestEndpoint(dstPt3);\n    connRef3->setRoutingType((ConnType)2);\n\n    router->processTransaction();\n    router->outputDiagram(\"output/hyperedge01-1\");\n\n    HyperedgeRerouter *hyperedgeRerouter = router->hyperedgeRerouter();\n    hyperedgeRerouter->registerHyperedgeForRerouting(shapeRef102578723);\n    \n    router->processTransaction();\n    router->outputDiagram(\"output/hyperedge01-2\");\n\n    delete router;\n    return 0;\n}\n\n"
  },
  {
    "path": "cola/libavoid/tests/hyperedge02.cpp",
    "content": "#include \"libavoid/libavoid.h\"\nusing namespace Avoid;\nint main(void) {\n    ConnEndList hyperedgeTerminals;\n    Router *router = new Router(OrthogonalRouting);\n    /*\n    router->setRoutingPenalty((PenaltyType)0, 78.7234);\n    router->setRoutingPenalty((PenaltyType)1, 0);\n    router->setRoutingPenalty((PenaltyType)2, 0);\n    router->setRoutingPenalty((PenaltyType)3, 0);\n    router->setRoutingPenalty((PenaltyType)4, 0);\n    router->setRoutingPenalty((PenaltyType)5, 100);\n    router->setRoutingOption((RoutingOption)0, true);\n    router->setOrthogonalNudgeDistance(4);\n    */\n\n    Polygon poly1(4);\n    poly1.ps[0] = Point(461.05, 1.66648);\n    poly1.ps[1] = Point(461.05, 65.6665);\n    poly1.ps[2] = Point(376.05, 65.6665);\n    poly1.ps[3] = Point(376.05, 1.66648);\n    ShapeRef *shapeRef1 = new ShapeRef(router, poly1, 1);\n    new ShapeConnectionPin(shapeRef1, 102, 0.5, 1, true, 10, (ConnDirFlags) 2);\n    hyperedgeTerminals.push_back(ConnEnd(shapeRef1, 102));\n\n    Polygon poly2(4);\n    poly2.ps[0] = Point(404, 166);\n    poly2.ps[1] = Point(404, 227);\n    poly2.ps[2] = Point(320, 227);\n    poly2.ps[3] = Point(320, 166);\n    ShapeRef *shapeRef2 = new ShapeRef(router, poly2, 2);\n    new ShapeConnectionPin(shapeRef2, 102, 0, 0.5, true, 10, (ConnDirFlags) 4);\n    hyperedgeTerminals.push_back(ConnEnd(shapeRef2, 102));\n\n    Polygon poly3(4);\n    poly3.ps[0] = Point(240.001, 185);\n    poly3.ps[1] = Point(240.001, 227);\n    poly3.ps[2] = Point(178.001, 227);\n    poly3.ps[3] = Point(178.001, 185);\n    ShapeRef *shapeRef3 = new ShapeRef(router, poly3, 3);\n    new ShapeConnectionPin(shapeRef3, 102, 1, 0.5, true, 10, (ConnDirFlags) 8);\n    hyperedgeTerminals.push_back(ConnEnd(shapeRef3, 102));\n\n    Polygon poly4(4);\n    poly4.ps[0] = Point(274.526, 132);\n    poly4.ps[1] = Point(274.526, 174);\n    poly4.ps[2] = Point(90.526, 174);\n    poly4.ps[3] = Point(90.526, 132);\n    new ShapeRef(router, poly4, 4);\n\n    Polygon poly5(4);\n    poly5.ps[0] = Point(152.526, 1.66648);\n    poly5.ps[1] = Point(152.526, 40);\n    poly5.ps[2] = Point(90.526, 40);\n    poly5.ps[3] = Point(90.526, 1.66648);\n    ShapeRef *shapeRef5 = new ShapeRef(router, poly5, 5);\n    new ShapeConnectionPin(shapeRef5, 102, 0.5, 1, true, 10, (ConnDirFlags) 2);\n    hyperedgeTerminals.push_back(ConnEnd(shapeRef5, 102));\n\n    Polygon poly6(4);\n    poly6.ps[0] = Point(366.925, 1.66648);\n    poly6.ps[1] = Point(366.925, 92.6665);\n    poly6.ps[2] = Point(304.925, 92.6665);\n    poly6.ps[3] = Point(304.925, 1.66648);\n    new ShapeRef(router, poly6, 6);\n\n    Polygon poly8(4);\n    poly8.ps[0] = Point(345, 115);\n    poly8.ps[1] = Point(345, 140);\n    poly8.ps[2] = Point(320, 140);\n    poly8.ps[3] = Point(320, 115);\n    new ShapeRef(router, poly8, 8);\n\n    Polygon poly7(4);\n    poly7.ps[0] = Point(223.675, 1.66648);\n    poly7.ps[1] = Point(223.675, 50.3333);\n    poly7.ps[2] = Point(161.675, 50.3333);\n    poly7.ps[3] = Point(161.675, 1.66648);\n    ShapeRef *shapeRef7 = new ShapeRef(router, poly7, 7);\n    new ShapeConnectionPin(shapeRef7, 102, 0.5, 1, true, 10, (ConnDirFlags) 2);\n    hyperedgeTerminals.push_back(ConnEnd(shapeRef7, 102));\n\n    Polygon poly10(4);\n    poly10.ps[0] = Point(295.3, 1.66648);\n    poly10.ps[1] = Point(295.3, 40);\n    poly10.ps[2] = Point(233.3, 40);\n    poly10.ps[3] = Point(233.3, 1.66648);\n    ShapeRef *shapeRef10 = new ShapeRef(router, poly10, 10);\n    new ShapeConnectionPin(shapeRef10, 102, 0.5, 1, true, 10, (ConnDirFlags) 2);\n    hyperedgeTerminals.push_back(ConnEnd(shapeRef10, 102));\n\n    HyperedgeRerouter *hyperedgeRerouter = router->hyperedgeRerouter();\n    hyperedgeRerouter->registerHyperedgeForRerouting(hyperedgeTerminals);\n\n    router->processTransaction();\n    router->outputDiagram(\"output/hyperedge02\");\n    delete router;\n    return 0;\n};\n"
  },
  {
    "path": "cola/libavoid/tests/hyperedgeLoop1.cpp",
    "content": "// THis is a regression test for an infinite loop in the hyperedge improvement.\r\n\r\n#include \"libavoid/libavoid.h\"\r\n#include <sstream>\r\nusing namespace Avoid;\r\n\r\nvoid test()\r\n{\r\n\tAvoid::ConnEnd end1;\r\n\tAvoid::ConnEnd end2;\r\n\tAvoid::Polygon poly;\r\n\tAvoid::Router * router1 = new Avoid::Router(Avoid::OrthogonalRouting);\r\n\trouter1->setTransactionUse(true);\r\n\trouter1->setRoutingPenalty(Avoid::segmentPenalty);\r\n\trouter1->setRoutingPenalty(Avoid::crossingPenalty);\r\n\trouter1->setRoutingPenalty(Avoid::fixedSharedPathPenalty, 9000);\r\n\trouter1->setRoutingParameter(idealNudgingDistance, 25);\r\n\r\n\tpoly = Avoid::Polygon(4);\r\n\tpoly.setPoint(0, Avoid::Point(50760, 50620));\r\n\tpoly.setPoint(1, Avoid::Point(50760, 50680));\r\n\tpoly.setPoint(2, Avoid::Point(50590, 50680));\r\n\tpoly.setPoint(3, Avoid::Point(50590, 50620));\r\n\tAvoid::ShapeRef * shape147006780 = new Avoid::ShapeRef(router1, poly, 147006780);\r\n\tAvoid::ShapeConnectionPin * pin147006780_1 = new Avoid::ShapeConnectionPin(shape147006780, 2, 0.941176, 0.5, true, 10, 8);\r\n\tpin147006780_1->setExclusive(true);\r\n\r\n\tpoly = Avoid::Polygon(4);\r\n\tpoly.setPoint(0, Avoid::Point(50585, 50765));\r\n\tpoly.setPoint(1, Avoid::Point(50585, 50935));\r\n\tpoly.setPoint(2, Avoid::Point(50365, 50935));\r\n\tpoly.setPoint(3, Avoid::Point(50365, 50765));\r\n\tAvoid::ShapeRef * shape69758810 = new Avoid::ShapeRef(router1, poly, 69758810);\r\n\tAvoid::ShapeConnectionPin * pin69758810_1 = new Avoid::ShapeConnectionPin(shape69758810, 2, 0.954545, 0.5, true, 10, 8);\r\n\tpin69758810_1->setExclusive(true);\r\n\r\n\tpoly = Avoid::Polygon(4);\r\n\tpoly.setPoint(0, Avoid::Point(51060, 51020));\r\n\tpoly.setPoint(1, Avoid::Point(51060, 51080));\r\n\tpoly.setPoint(2, Avoid::Point(50890, 51080));\r\n\tpoly.setPoint(3, Avoid::Point(50890, 51020));\r\n\tAvoid::ShapeRef * shape149922619 = new Avoid::ShapeRef(router1, poly, 149922619);\r\n\tAvoid::ShapeConnectionPin * pin149922619_1 = new Avoid::ShapeConnectionPin(shape149922619, 2, 0.941176, 0.5, true, 10, 8);\r\n\tpin149922619_1->setExclusive(true);\r\n\r\n\tAvoid::JunctionRef * junction228834480 = new Avoid::JunctionRef(router1, Avoid::Point(51050, 51050), 228834480);\r\n\tend1 = Avoid::ConnEnd(shape69758810, 2);\r\n\tend2 = Avoid::ConnEnd(junction228834480);\r\n\tAvoid::ConnRef * conn159270000 = new Avoid::ConnRef(router1, end1, end2);\r\n\tconn159270000->makePathInvalid();\r\n\tend1 = Avoid::ConnEnd(junction228834480);\r\n\tend2 = Avoid::ConnEnd(shape149922619, 2);\r\n\tAvoid::ConnRef * conn199495942 = new Avoid::ConnRef(router1, end1, end2);\r\n\trouter1->processTransaction();\r\n\r\n\trouter1->outputDiagram(\"output/hyperedgeLoop1-1\");\r\n\tend1 = Avoid::ConnEnd(shape147006780, 2);\r\n\tend2 = Avoid::ConnEnd(junction228834480);\r\n\tAvoid::ConnRef * conn8326760 = new Avoid::ConnRef(router1, end1, end2);\r\n\tconn8326760->makePathInvalid();\r\n\trouter1->processTransaction(); // infinite\r\n\r\n\trouter1->outputDiagram(\"output/hyperedgeLoop1-2\");\r\n\trouter1->deleteShape(shape147006780);\r\n\tshape147006780 = nullptr;\r\n\trouter1->deleteShape(shape69758810);\r\n\tshape69758810 = nullptr;\r\n\trouter1->deleteShape(shape149922619);\r\n\tshape149922619 = nullptr;\r\n\trouter1->deleteJunction(junction228834480);\r\n\tjunction228834480 = nullptr;\r\n\trouter1->deleteConnector(conn159270000);\r\n\tconn159270000 = nullptr;\r\n\trouter1->deleteConnector(conn199495942);\r\n\tconn199495942 = nullptr;\r\n\trouter1->deleteConnector(conn8326760);\r\n\tconn8326760 = nullptr;\r\n\trouter1->processTransaction();\r\n\r\n\tdelete router1;\r\n}\r\n\r\nextern \"C\" int main(void)\r\n{\r\n\ttest();\r\n\treturn 0;\r\n}\r\n"
  },
  {
    "path": "cola/libavoid/tests/hyperedgeRerouting01.cpp",
    "content": "// Based on 33004heap_corruption.cpp\r\n//\r\n#include \"libavoid/libavoid.h\"\r\n#include <sstream>\r\n\r\nvoid outputDiagram(Avoid::Router * router)\r\n{\r\n\tstatic int counter = 0;\r\n\tstd::ostringstream os;\r\n\tos << (++counter);\r\n\t//router->outputDiagram(os.str());\r\n}\r\n\r\nint test()\r\n{\r\n\t// The contents of this function can be replaced by the automatically generated test code from the debug svg file\r\n\tAvoid::ConnEnd end1_0;\r\n\tAvoid::ConnEnd end2_0;\r\n\tAvoid::Polygon poly0;\r\n\tAvoid::Router * router0 = new Avoid::Router(Avoid::OrthogonalRouting);\r\n\tAvoid::HyperedgeNewAndDeletedObjectLists newanddeletedobjects_0;\r\n\tAvoid::ConnRefList::const_iterator connit_0;\r\n\tAvoid::JunctionRefList::const_iterator junctionit_0;\r\n\trouter0->setTransactionUse(true);\r\n\trouter0->setRoutingPenalty(Avoid::segmentPenalty);\r\n\trouter0->setRoutingPenalty(Avoid::crossingPenalty);\r\n\trouter0->setRoutingPenalty(Avoid::fixedSharedPathPenalty, 9000);\r\n\trouter0->setRoutingOption(Avoid::penaliseOrthogonalSharedPathsAtConnEnds, true);\r\n\trouter0->setRoutingParameter(Avoid::idealNudgingDistance, 25);\r\n\trouter0->setRoutingOption(Avoid::improveHyperedgeRoutesMovingAddingAndDeletingJunctions, true);\r\n\r\n\tpoly0 = Avoid::Polygon(4);\r\n\tpoly0.setPoint(0, Avoid::Point(27350, 26040));\r\n\tpoly0.setPoint(1, Avoid::Point(27350, 26450));\r\n\tpoly0.setPoint(2, Avoid::Point(26925, 26450));\r\n\tpoly0.setPoint(3, Avoid::Point(26925, 26040));\r\n\tAvoid::ShapeRef * shape0_478041183 = new Avoid::ShapeRef(router0, poly0, 478041183);\r\n\tAvoid::ShapeConnectionPin * pin0_478041183_0 = new Avoid::ShapeConnectionPin(shape0_478041183, 1, 0, 85, false, 10, 4);\r\n\tpin0_478041183_0->setExclusive(true);\r\n\tAvoid::ShapeConnectionPin * pin0_478041183_1 = new Avoid::ShapeConnectionPin(shape0_478041183, 2, 100, -1, false, 10, 2);\r\n\tpin0_478041183_1->setExclusive(true);\r\n\tAvoid::ShapeConnectionPin * pin0_478041183_2 = new Avoid::ShapeConnectionPin(shape0_478041183, 3, -1, 85, false, 10, 8);\r\n\tpin0_478041183_2->setExclusive(true);\r\n\tAvoid::ShapeConnectionPin * pin0_478041183_3 = new Avoid::ShapeConnectionPin(shape0_478041183, 4, 250, -1, false, 10, 2);\r\n\tpin0_478041183_3->setExclusive(true);\r\n\tAvoid::ShapeConnectionPin * pin0_478041183_4 = new Avoid::ShapeConnectionPin(shape0_478041183, 5, 0, 235, false, 10, 4);\r\n\tpin0_478041183_4->setExclusive(true);\r\n\tAvoid::ShapeConnectionPin * pin0_478041183_5 = new Avoid::ShapeConnectionPin(shape0_478041183, 6, 0, 160, false, 10, 4);\r\n\tpin0_478041183_5->setExclusive(true);\r\n\tAvoid::ShapeConnectionPin * pin0_478041183_6 = new Avoid::ShapeConnectionPin(shape0_478041183, 7, 175, -1, false, 10, 2);\r\n\tpin0_478041183_6->setExclusive(true);\r\n\tAvoid::ShapeConnectionPin * pin0_478041183_7 = new Avoid::ShapeConnectionPin(shape0_478041183, 8, -1, 160, false, 10, 8);\r\n\tpin0_478041183_7->setExclusive(true);\r\n\tAvoid::ShapeConnectionPin * pin0_478041183_8 = new Avoid::ShapeConnectionPin(shape0_478041183, 9, 325, -1, false, 10, 2);\r\n\tpin0_478041183_8->setExclusive(true);\r\n\tAvoid::ShapeConnectionPin * pin0_478041183_9 = new Avoid::ShapeConnectionPin(shape0_478041183, 10, 0, 310, false, 10, 4);\r\n\tpin0_478041183_9->setExclusive(true);\r\n\tpoly0 = Avoid::Polygon(4);\r\n\tpoly0.setPoint(0, Avoid::Point(27030, 26900));\r\n\tpoly0.setPoint(1, Avoid::Point(27030, 27050));\r\n\tpoly0.setPoint(2, Avoid::Point(26970, 27050));\r\n\tpoly0.setPoint(3, Avoid::Point(26970, 26900));\r\n\tAvoid::ShapeRef * shape0_646972128 = new Avoid::ShapeRef(router0, poly0, 646972128);\r\n\tAvoid::ShapeConnectionPin * pin0_646972128_0 = new Avoid::ShapeConnectionPin(shape0_646972128, 1, 25, -1, false, 10, 2);\r\n\tpin0_646972128_0->setExclusive(true);\r\n\tAvoid::ShapeConnectionPin * pin0_646972128_1 = new Avoid::ShapeConnectionPin(shape0_646972128, 2, 25, 0, false, 10, 1);\r\n\tpin0_646972128_1->setExclusive(true);\r\n\tpoly0 = Avoid::Polygon(4);\r\n\tpoly0.setPoint(0, Avoid::Point(26480, 26350));\r\n\tpoly0.setPoint(1, Avoid::Point(26480, 26500));\r\n\tpoly0.setPoint(2, Avoid::Point(26420, 26500));\r\n\tpoly0.setPoint(3, Avoid::Point(26420, 26350));\r\n\tAvoid::ShapeRef * shape0_53041512 = new Avoid::ShapeRef(router0, poly0, 53041512);\r\n\tAvoid::ShapeConnectionPin * pin0_53041512_0 = new Avoid::ShapeConnectionPin(shape0_53041512, 1, 30, 0, false, 10, 1);\r\n\tpin0_53041512_0->setExclusive(true);\r\n\tAvoid::ShapeConnectionPin * pin0_53041512_1 = new Avoid::ShapeConnectionPin(shape0_53041512, 2, 30, -1, false, 10, 2);\r\n\tpin0_53041512_1->setExclusive(true);\r\n\tpoly0 = Avoid::Polygon(4);\r\n\tpoly0.setPoint(0, Avoid::Point(26860, 26900));\r\n\tpoly0.setPoint(1, Avoid::Point(26860, 27050));\r\n\tpoly0.setPoint(2, Avoid::Point(26790, 27050));\r\n\tpoly0.setPoint(3, Avoid::Point(26790, 26900));\r\n\tAvoid::ShapeRef * shape0_241539284 = new Avoid::ShapeRef(router0, poly0, 241539284);\r\n\tAvoid::ShapeConnectionPin * pin0_241539284_0 = new Avoid::ShapeConnectionPin(shape0_241539284, 1, 35, -1, false, 10, 2);\r\n\tpin0_241539284_0->setExclusive(true);\r\n\tAvoid::ShapeConnectionPin * pin0_241539284_1 = new Avoid::ShapeConnectionPin(shape0_241539284, 2, 35, 0, false, 10, 1);\r\n\tpin0_241539284_1->setExclusive(true);\r\n\tAvoid::JunctionRef * junction0_16268769 = new Avoid::JunctionRef(router0, Avoid::Point(27000, 27075), 16268769);\r\n\tjunction0_16268769->setPositionFixed(true);\r\n\tAvoid::JunctionRef * junction0_142222080 = new Avoid::JunctionRef(router0, Avoid::Point(27200, 26450), 142222080);\r\n\tjunction0_142222080->setPositionFixed(true);\r\n\tAvoid::JunctionRef * junction0_471289251 = new Avoid::JunctionRef(router0, Avoid::Point(26350, 26325), 471289251);\r\n\tjunction0_471289251->setPositionFixed(true);\r\n\t\r\n\t\r\n\tend1_0 = Avoid::ConnEnd(shape0_646972128, 1);\r\n\tend2_0 = Avoid::ConnEnd(junction0_16268769);\r\n\tAvoid::ConnRef * conn0_64950216 = new Avoid::ConnRef(router0, end1_0, end2_0, 64950216);\r\n\tend1_0 = Avoid::ConnEnd(junction0_16268769);\r\n\tend2_0 = Avoid::ConnEnd(shape0_478041183, 7);\r\n\tAvoid::ConnRef * conn0_278089510 = new Avoid::ConnRef(router0, end1_0, end2_0, 278089510);\r\n\tend1_0 = Avoid::ConnEnd(shape0_241539284, 1);\r\n\tend2_0 = Avoid::ConnEnd(junction0_16268769);\r\n\tAvoid::ConnRef * conn0_41268690 = new Avoid::ConnRef(router0, end1_0, end2_0, 41268690);\r\n\r\n\tend1_0 = Avoid::ConnEnd(shape0_478041183, 9);\r\n\tend2_0 = Avoid::ConnEnd(junction0_142222080);\r\n\tAvoid::ConnRef * conn0_60256130 = new Avoid::ConnRef(router0, end1_0, end2_0, 60256130);\r\n\tend1_0 = Avoid::ConnEnd(shape0_478041183, 3);\r\n\tend2_0 = Avoid::ConnEnd(junction0_142222080);\r\n\tAvoid::ConnRef * conn0_73835204 = new Avoid::ConnRef(router0, end1_0, end2_0, 73835204);\r\n\tend1_0 = Avoid::ConnEnd(shape0_478041183, 4);\r\n\tend2_0 = Avoid::ConnEnd(junction0_142222080);\r\n\tAvoid::ConnRef * conn0_93872527 = new Avoid::ConnRef(router0, end1_0, end2_0, 93872527);\r\n\r\n\tend1_0 = Avoid::ConnEnd(shape0_53041512, 1);\r\n\tend2_0 = Avoid::ConnEnd(junction0_471289251);\r\n\tAvoid::ConnRef * conn0_448284384 = new Avoid::ConnRef(router0, end1_0, end2_0, 448284384);\r\n\tend1_0 = Avoid::ConnEnd(shape0_478041183, 1);\r\n\tend2_0 = Avoid::ConnEnd(junction0_471289251);\r\n\tAvoid::ConnRef * conn0_392836745 = new Avoid::ConnRef(router0, end1_0, end2_0, 392836745);\r\n\tend1_0 = Avoid::ConnEnd(shape0_241539284, 2);\r\n\tend2_0 = Avoid::ConnEnd(junction0_471289251);\r\n\tAvoid::ConnRef * conn0_836242673 = new Avoid::ConnRef(router0, end1_0, end2_0, 836242673);\r\n\r\n\trouter0->processTransaction();\r\n\r\n\tnewanddeletedobjects_0 = router0->newAndDeletedObjectListsFromHyperedgeImprovement();\r\n\toutputDiagram(router0);\r\n\t\r\n\tjunction0_16268769->setPositionFixed(false);\r\n\tjunction0_142222080->setPositionFixed(false);\r\n\tjunction0_471289251->setPositionFixed(false);\r\n\t\r\n\trouter0->hyperedgeRerouter()->registerHyperedgeForRerouting(junction0_16268769);\r\n\trouter0->hyperedgeRerouter()->registerHyperedgeForRerouting(junction0_142222080);\r\n\trouter0->hyperedgeRerouter()->registerHyperedgeForRerouting(junction0_471289251);\r\n\t\r\n\trouter0->processTransaction();\r\n\toutputDiagram(router0);\r\n\r\n    int result = router0->existsInvalidOrthogonalPaths();\r\n    delete router0;\r\n    return result;\r\n}\r\n\r\nextern \"C\" int main(int argc, char* argv[])\r\n{\r\n\treturn test();\r\n}\r\n"
  },
  {
    "path": "cola/libavoid/tests/improveHyperedge01.cpp",
    "content": "#include \"libavoid/libavoid.h\"\n#include <sstream>\nusing namespace Avoid;\n\nint test()\n{\n\t// The contents of this function can be replaced by the automatically generated test code from the debug svg file\n\tAvoid::ConnEnd end1;\n\tAvoid::ConnEnd end2;\n\tAvoid::Polygon poly;\n\tAvoid::Router * router = new Avoid::Router(Avoid::OrthogonalRouting);\n\trouter->setTransactionUse(true);\n\trouter->setRoutingPenalty(Avoid::segmentPenalty);\n\trouter->setRoutingPenalty(Avoid::crossingPenalty);\n\trouter->setRoutingPenalty(Avoid::fixedSharedPathPenalty);\n\trouter->setRoutingParameter(idealNudgingDistance, 25);\n\trouter->setRoutingOption(Avoid::improveHyperedgeRoutesMovingJunctions, true);\n\tpoly = Avoid::Polygon(4);\n\tpoly.setPoint(0, Avoid::Point(51160, 50670));\n\tpoly.setPoint(1, Avoid::Point(51160, 50730));\n\tpoly.setPoint(2, Avoid::Point(50950, 50730));\n\tpoly.setPoint(3, Avoid::Point(50950, 50670));\n\tAvoid::ShapeRef * shape341041314 = new Avoid::ShapeRef(router, poly, 341041314);\n\tAvoid::ShapeConnectionPin * pin341041314_0 = new Avoid::ShapeConnectionPin(shape341041314, 1, 0.952381, 0.5, true, 10, 8);\n\tpin341041314_0->setExclusive(true);\n\tAvoid::ShapeConnectionPin * pin341041314_1 = new Avoid::ShapeConnectionPin(shape341041314, 2, 0, 0.5, true, 10, 4);\n\tpin341041314_1->setExclusive(true);\n\tpoly = Avoid::Polygon(4);\n\tpoly.setPoint(0, Avoid::Point(51160, 50395));\n\tpoly.setPoint(1, Avoid::Point(51160, 50455));\n\tpoly.setPoint(2, Avoid::Point(50950, 50455));\n\tpoly.setPoint(3, Avoid::Point(50950, 50395));\n\tAvoid::ShapeRef * shape47540376 = new Avoid::ShapeRef(router, poly, 47540376);\n\tAvoid::ShapeConnectionPin * pin47540376_0 = new Avoid::ShapeConnectionPin(shape47540376, 1, 0.952381, 0.5, true, 10, 8);\n\tpin47540376_0->setExclusive(true);\n\tAvoid::ShapeConnectionPin * pin47540376_1 = new Avoid::ShapeConnectionPin(shape47540376, 2, 0, 0.5, true, 10, 4);\n\tpin47540376_1->setExclusive(true);\n\tpoly = Avoid::Polygon(4);\n\tpoly.setPoint(0, Avoid::Point(50850, 50770));\n\tpoly.setPoint(1, Avoid::Point(50850, 50830));\n\tpoly.setPoint(2, Avoid::Point(50665, 50830));\n\tpoly.setPoint(3, Avoid::Point(50665, 50770));\n\tAvoid::ShapeRef * shape81920772 = new Avoid::ShapeRef(router, poly, 81920772);\n\tAvoid::ShapeConnectionPin * pin81920772_0 = new Avoid::ShapeConnectionPin(shape81920772, 1, 0.047619, 0.5, true, 10, 4);\n\tpin81920772_0->setExclusive(true);\n\tAvoid::ShapeConnectionPin * pin81920772_1 = new Avoid::ShapeConnectionPin(shape81920772, 2, 1, 0.5, true, 10, 8);\n\tpin81920772_1->setExclusive(true);\n\tAvoid::JunctionRef * junction878282342 = new Avoid::JunctionRef(router, Avoid::Point(50875, 50700), 878282342);\n\tjunction878282342->setPositionFixed(false);\n\tpoly = Avoid::Polygon(4);\n\tpoly.setPoint(0, Avoid::Point(50850, 50470));\n\tpoly.setPoint(1, Avoid::Point(50850, 50530));\n\tpoly.setPoint(2, Avoid::Point(50665, 50530));\n\tpoly.setPoint(3, Avoid::Point(50665, 50470));\n\tAvoid::ShapeRef * shape206564314 = new Avoid::ShapeRef(router, poly, 206564314);\n\tAvoid::ShapeConnectionPin * pin206564314_0 = new Avoid::ShapeConnectionPin(shape206564314, 1, 0.047619, 0.5, true, 10, 4);\n\tpin206564314_0->setExclusive(true);\n\tAvoid::ShapeConnectionPin * pin206564314_1 = new Avoid::ShapeConnectionPin(shape206564314, 2, 1, 0.5, true, 10, 8);\n\tpin206564314_1->setExclusive(true);\n\tAvoid::JunctionRef * junction213455341 = new Avoid::JunctionRef(router, Avoid::Point(50875, 50500), 213455341);\n\tjunction213455341->setPositionFixed(false);\n\tend1 = Avoid::ConnEnd(junction878282342);\n\tend2 = Avoid::ConnEnd(shape341041314, 2);\n\tAvoid::ConnRef * conn290033688 = new Avoid::ConnRef(router, end1, end2);\n\tconn290033688->makePathInvalid();\n\tend1 = Avoid::ConnEnd(shape81920772, 2);\n\tend2 = Avoid::ConnEnd(junction878282342);\n\tAvoid::ConnRef * conn281807178 = new Avoid::ConnRef(router, end1, end2);\n\tconn281807178->makePathInvalid();\n\tend1 = Avoid::ConnEnd(shape47540376, 2);\n\tend2 = Avoid::ConnEnd(junction213455341);\n\tAvoid::ConnRef * conn762966660 = new Avoid::ConnRef(router, end1, end2);\n\tconn762966660->makePathInvalid();\n\tend1 = Avoid::ConnEnd(junction213455341);\n\tend2 = Avoid::ConnEnd(junction878282342);\n\tAvoid::ConnRef * conn46508714 = new Avoid::ConnRef(router, end1, end2);\n\tconn46508714->makePathInvalid();\n\tend1 = Avoid::ConnEnd(shape206564314, 2);\n\tend2 = Avoid::ConnEnd(junction213455341);\n\tAvoid::ConnRef * conn385831514 = new Avoid::ConnRef(router, end1, end2);\n\tconn385831514->makePathInvalid();\n\trouter->processTransaction();\n\n\trouter->outputDiagram(\"output/improveHyperedge01-1\");\n\tpoly = Avoid::Polygon(4);\n\tpoly.setPoint(0, Avoid::Point(51160, 50645));\n\tpoly.setPoint(1, Avoid::Point(51160, 50705));\n\tpoly.setPoint(2, Avoid::Point(50950, 50705));\n\tpoly.setPoint(3, Avoid::Point(50950, 50645));\n\trouter->moveShape(shape341041314, poly);\n\tconn290033688->makePathInvalid();\n\tconn281807178->makePathInvalid();\n\tconn46508714->makePathInvalid();\n\tconn762966660->makePathInvalid();\n\trouter->processTransaction();\n\n\trouter->outputDiagram(\"output/improveHyperedge01-2\");\n\tAvoid::Point junctionPos = junction878282342->recommendedPosition();\n\n\tdelete router;\n\t\n\t// Regression test to check that a junction is correctly moved.\n\treturn (junctionPos.y == 50675) ? 0 : 1; \n}\n\nint main(void)\n{\n\treturn test();\n}\n"
  },
  {
    "path": "cola/libavoid/tests/improveHyperedge02.cpp",
    "content": "#include \"libavoid/libavoid.h\"\r\nusing namespace Avoid;\r\nint main(void) {\r\n    Router *router = new Router(\r\n            PolyLineRouting | OrthogonalRouting);\r\n    router->setRoutingPenalty((PenaltyType)0, 50);\r\n    router->setRoutingPenalty((PenaltyType)1, 0);\r\n    router->setRoutingPenalty((PenaltyType)2, 200);\r\n    router->setRoutingPenalty((PenaltyType)3, 4000);\r\n    router->setRoutingPenalty((PenaltyType)4, 9000);\r\n    router->setRoutingPenalty((PenaltyType)5, 100);\r\n    router->setRoutingOption((RoutingOption)0, false);\r\n    router->setRoutingOption((RoutingOption)1, true);\r\n    router->setRoutingOption((RoutingOption)2, true);\r\n    router->setRoutingOption(improveHyperedgeRoutesMovingAddingAndDeletingJunctions, true);\r\n    router->setRoutingParameter(idealNudgingDistance, 25);\r\n\r\n    Polygon poly39761567(4);\r\n    poly39761567.ps[0] = Point(50754, 50975);\r\n    poly39761567.ps[1] = Point(50754, 51060);\r\n    poly39761567.ps[2] = Point(50696, 51060);\r\n    poly39761567.ps[3] = Point(50696, 50975);\r\n    ShapeRef *shapeRef39761567 = new ShapeRef(router, poly39761567, 39761567);\r\n    new ShapeConnectionPin(shapeRef39761567, 1, 0.5, 0, true, 10, (ConnDirFlags) 1);\r\n\r\n    Polygon poly115776716(4);\r\n    poly115776716.ps[0] = Point(51504, 50975);\r\n    poly115776716.ps[1] = Point(51504, 51060);\r\n    poly115776716.ps[2] = Point(51446, 51060);\r\n    poly115776716.ps[3] = Point(51446, 50975);\r\n    ShapeRef *shapeRef115776716 = new ShapeRef(router, poly115776716, 115776716);\r\n    new ShapeConnectionPin(shapeRef115776716, 1, 0.5, 0, true, 10, (ConnDirFlags) 1);\r\n\r\n    Polygon poly238475293(4);\r\n    poly238475293.ps[0] = Point(50554, 50975);\r\n    poly238475293.ps[1] = Point(50554, 51060);\r\n    poly238475293.ps[2] = Point(50496, 51060);\r\n    poly238475293.ps[3] = Point(50496, 50975);\r\n    ShapeRef *shapeRef238475293 = new ShapeRef(router, poly238475293, 238475293);\r\n    new ShapeConnectionPin(shapeRef238475293, 1, 0.5, 0, true, 10, (ConnDirFlags) 1);\r\n\r\n    Polygon poly430971008(4);\r\n    poly430971008.ps[0] = Point(51004, 50465);\r\n    poly430971008.ps[1] = Point(51004, 50550);\r\n    poly430971008.ps[2] = Point(50946, 50550);\r\n    poly430971008.ps[3] = Point(50946, 50465);\r\n    ShapeRef *shapeRef430971008 = new ShapeRef(router, poly430971008, 430971008);\r\n    new ShapeConnectionPin(shapeRef430971008, 1, 0.5, 1, true, 10, (ConnDirFlags) 2);\r\n\r\n    JunctionRef *junctionRef513246008 = new JunctionRef(router, Point(50925, 50725), 513246008);\r\n    /*\r\n    // This may be useful if junction pins are modified.\r\n    new ShapeConnectionPin(junctionRef513246008, 2147483646, (ConnDirFlags) 15);\r\n    */\r\n\r\n    ConnRef *connRef513246009 = new ConnRef(router, 513246009);\r\n    ConnEnd srcPt513246009(shapeRef39761567, 1);\r\n    connRef513246009->setSourceEndpoint(srcPt513246009);\r\n    ConnEnd dstPt513246009(junctionRef513246008);\r\n    connRef513246009->setDestEndpoint(dstPt513246009);\r\n    connRef513246009->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef513246010 = new ConnRef(router, 513246010);\r\n    ConnEnd srcPt513246010(junctionRef513246008);\r\n    connRef513246010->setSourceEndpoint(srcPt513246010);\r\n    ConnEnd dstPt513246010(shapeRef430971008, 1);\r\n    connRef513246010->setDestEndpoint(dstPt513246010);\r\n    connRef513246010->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef513246011 = new ConnRef(router, 513246011);\r\n    ConnEnd srcPt513246011(junctionRef513246008);\r\n    connRef513246011->setSourceEndpoint(srcPt513246011);\r\n    ConnEnd dstPt513246011(shapeRef238475293, 1);\r\n    connRef513246011->setDestEndpoint(dstPt513246011);\r\n    connRef513246011->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef513246012 = new ConnRef(router, 513246012);\r\n    ConnEnd srcPt513246012(shapeRef115776716, 1);\r\n    connRef513246012->setSourceEndpoint(srcPt513246012);\r\n    ConnEnd dstPt513246012(junctionRef513246008);\r\n    connRef513246012->setDestEndpoint(dstPt513246012);\r\n    connRef513246012->setRoutingType((ConnType)2);\r\n\r\n    router->processTransaction();\r\n    router->outputDiagram(\"output/improveHyperedge02\");\r\n\r\n    bool overlaps = router->existsOrthogonalSegmentOverlap(true);\r\n    delete router;\r\n    return (overlaps) ? 1 : 0;\r\n};\r\n"
  },
  {
    "path": "cola/libavoid/tests/improveHyperedge03.cpp",
    "content": "#include \"libavoid/libavoid.h\"\r\nusing namespace Avoid;\r\nint main(void) {\r\n    Router *router = new Router(\r\n            PolyLineRouting | OrthogonalRouting);\r\n    router->setRoutingPenalty((PenaltyType)0, 50);\r\n    router->setRoutingPenalty((PenaltyType)1, 0);\r\n    router->setRoutingPenalty((PenaltyType)2, 200);\r\n    router->setRoutingPenalty((PenaltyType)3, 4000);\r\n    router->setRoutingPenalty((PenaltyType)4, 9000);\r\n    router->setRoutingPenalty((PenaltyType)5, 100);\r\n    router->setRoutingOption((RoutingOption)0, false);\r\n    router->setRoutingOption((RoutingOption)1, true);\r\n    router->setRoutingOption((RoutingOption)2, true);\r\n    router->setRoutingOption(improveHyperedgeRoutesMovingAddingAndDeletingJunctions, true);\r\n    router->setRoutingParameter(idealNudgingDistance, 25);\r\n\r\n    Polygon poly39761567(4);\r\n    poly39761567.ps[0] = Point(50754, 50975);\r\n    poly39761567.ps[1] = Point(50754, 51060);\r\n    poly39761567.ps[2] = Point(50696, 51060);\r\n    poly39761567.ps[3] = Point(50696, 50975);\r\n    ShapeRef *shapeRef39761567 = new ShapeRef(router, poly39761567, 39761567);\r\n    new ShapeConnectionPin(shapeRef39761567, 1, 0.5, 0, true, 10, (ConnDirFlags) 1);\r\n\r\n    Polygon poly115776716(4);\r\n    poly115776716.ps[0] = Point(51504, 50975);\r\n    poly115776716.ps[1] = Point(51504, 51060);\r\n    poly115776716.ps[2] = Point(51446, 51060);\r\n    poly115776716.ps[3] = Point(51446, 50975);\r\n    ShapeRef *shapeRef115776716 = new ShapeRef(router, poly115776716, 115776716);\r\n    new ShapeConnectionPin(shapeRef115776716, 1, 0.5, 0, true, 10, (ConnDirFlags) 1);\r\n\r\n    Polygon poly238475293(4);\r\n    poly238475293.ps[0] = Point(50554, 50975);\r\n    poly238475293.ps[1] = Point(50554, 51060);\r\n    poly238475293.ps[2] = Point(50496, 51060);\r\n    poly238475293.ps[3] = Point(50496, 50975);\r\n    ShapeRef *shapeRef238475293 = new ShapeRef(router, poly238475293, 238475293);\r\n    new ShapeConnectionPin(shapeRef238475293, 1, 0.5, 0, true, 10, (ConnDirFlags) 1);\r\n\r\n    Polygon poly430971008(4);\r\n    poly430971008.ps[0] = Point(51004, 50975);\r\n    poly430971008.ps[1] = Point(51004, 51060);\r\n    poly430971008.ps[2] = Point(50946, 51060);\r\n    poly430971008.ps[3] = Point(50946, 50975);\r\n    ShapeRef *shapeRef430971008 = new ShapeRef(router, poly430971008, 430971008);\r\n    new ShapeConnectionPin(shapeRef430971008, 1, 0.5, 0, true, 10, (ConnDirFlags) 1);\r\n\r\n    JunctionRef *junctionRef513246008 = new JunctionRef(router, Point(50925, 50725), 513246008);\r\n    /*\r\n    // This may be useful if junction pins are modified.\r\n    new ShapeConnectionPin(junctionRef513246008, 2147483646, (ConnDirFlags) 15);\r\n    */\r\n\r\n    ConnRef *connRef513246009 = new ConnRef(router, 513246009);\r\n    ConnEnd srcPt513246009(shapeRef39761567, 1);\r\n    connRef513246009->setSourceEndpoint(srcPt513246009);\r\n    ConnEnd dstPt513246009(junctionRef513246008);\r\n    connRef513246009->setDestEndpoint(dstPt513246009);\r\n    connRef513246009->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef513246010 = new ConnRef(router, 513246010);\r\n    ConnEnd srcPt513246010(junctionRef513246008);\r\n    connRef513246010->setSourceEndpoint(srcPt513246010);\r\n    ConnEnd dstPt513246010(shapeRef430971008, 1);\r\n    connRef513246010->setDestEndpoint(dstPt513246010);\r\n    connRef513246010->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef513246011 = new ConnRef(router, 513246011);\r\n    ConnEnd srcPt513246011(junctionRef513246008);\r\n    connRef513246011->setSourceEndpoint(srcPt513246011);\r\n    ConnEnd dstPt513246011(shapeRef238475293, 1);\r\n    connRef513246011->setDestEndpoint(dstPt513246011);\r\n    connRef513246011->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef513246012 = new ConnRef(router, 513246012);\r\n    ConnEnd srcPt513246012(shapeRef115776716, 1);\r\n    connRef513246012->setSourceEndpoint(srcPt513246012);\r\n    ConnEnd dstPt513246012(junctionRef513246008);\r\n    connRef513246012->setDestEndpoint(dstPt513246012);\r\n    connRef513246012->setRoutingType((ConnType)2);\r\n\r\n    router->processTransaction();\r\n    router->outputDiagram(\"output/improveHyperedge03\");\r\n\r\n    bool overlaps = router->existsOrthogonalSegmentOverlap(true);\r\n    delete router;\r\n    return (overlaps) ? 1 : 0;\r\n};\r\n"
  },
  {
    "path": "cola/libavoid/tests/improveHyperedge04.cpp",
    "content": "#include \"libavoid/libavoid.h\"\r\nusing namespace Avoid;\r\nint main(void) {\r\n    Router *router = new Router(\r\n            PolyLineRouting | OrthogonalRouting);\r\n    router->setRoutingPenalty((PenaltyType)0, 50);\r\n    router->setRoutingPenalty((PenaltyType)1, 0);\r\n    router->setRoutingPenalty((PenaltyType)2, 200);\r\n    router->setRoutingPenalty((PenaltyType)3, 4000);\r\n    router->setRoutingPenalty((PenaltyType)4, 9000);\r\n    router->setRoutingPenalty((PenaltyType)5, 100);\r\n    router->setRoutingOption((RoutingOption)0, false);\r\n    router->setRoutingOption((RoutingOption)1, true);\r\n    router->setRoutingOption((RoutingOption)2, true);\r\n    router->setRoutingOption(improveHyperedgeRoutesMovingJunctions, false);\r\n    router->setRoutingOption(improveHyperedgeRoutesMovingAddingAndDeletingJunctions, true);\r\n    router->setRoutingParameter(idealNudgingDistance, 25);\r\n\r\n    Polygon poly2(4);\r\n    poly2.ps[0] = Point(50354, 50975);\r\n    poly2.ps[1] = Point(50354, 51060);\r\n    poly2.ps[2] = Point(50296, 51060);\r\n    poly2.ps[3] = Point(50296, 50975);\r\n    ShapeRef *shapeRef2 = new ShapeRef(router, poly2, 2);\r\n    new ShapeConnectionPin(shapeRef2, 1, 0.5, 1, true, 10, (ConnDirFlags) 1);\r\n\r\n    Polygon poly39761567(4);\r\n    poly39761567.ps[0] = Point(50754, 50975);\r\n    poly39761567.ps[1] = Point(50754, 51060);\r\n    poly39761567.ps[2] = Point(50696, 51060);\r\n    poly39761567.ps[3] = Point(50696, 50975);\r\n    ShapeRef *shapeRef39761567 = new ShapeRef(router, poly39761567, 39761567);\r\n    new ShapeConnectionPin(shapeRef39761567, 1, 0.5, 0, true, 10, (ConnDirFlags) 1);\r\n\r\n    Polygon poly115776716(4);\r\n    poly115776716.ps[0] = Point(51504, 50975);\r\n    poly115776716.ps[1] = Point(51504, 51060);\r\n    poly115776716.ps[2] = Point(51446, 51060);\r\n    poly115776716.ps[3] = Point(51446, 50975);\r\n    ShapeRef *shapeRef115776716 = new ShapeRef(router, poly115776716, 115776716);\r\n    new ShapeConnectionPin(shapeRef115776716, 1, 0.5, 0, true, 10, (ConnDirFlags) 1);\r\n\r\n    Polygon poly238475293(4);\r\n    poly238475293.ps[0] = Point(50554, 50975);\r\n    poly238475293.ps[1] = Point(50554, 51060);\r\n    poly238475293.ps[2] = Point(50496, 51060);\r\n    poly238475293.ps[3] = Point(50496, 50975);\r\n    ShapeRef *shapeRef238475293 = new ShapeRef(router, poly238475293, 238475293);\r\n    new ShapeConnectionPin(shapeRef238475293, 1, 0.5, 0, true, 10, (ConnDirFlags) 1);\r\n\r\n    Polygon poly430971008(4);\r\n    poly430971008.ps[0] = Point(51004, 50975);\r\n    poly430971008.ps[1] = Point(51004, 51060);\r\n    poly430971008.ps[2] = Point(50946, 51060);\r\n    poly430971008.ps[3] = Point(50946, 50975);\r\n    ShapeRef *shapeRef430971008 = new ShapeRef(router, poly430971008, 430971008);\r\n    new ShapeConnectionPin(shapeRef430971008, 1, 0.5, 0, true, 10, (ConnDirFlags) 1);\r\n\r\n    JunctionRef *junctionRef513246008 = new JunctionRef(router, Point(50925, 50700), 513246008);\r\n    /*\r\n    // This may be useful if junction pins are modified.\r\n    new ShapeConnectionPin(junctionRef513246008, 2147483646, (ConnDirFlags) 15);\r\n    */\r\n    JunctionRef *junctionRef4 = new JunctionRef(router, Point(50725, 50725), 4);\r\n\r\n    ConnRef *connRef3 = new ConnRef(router, 3);\r\n    ConnEnd srcPt3(shapeRef2, 1);\r\n    connRef3->setSourceEndpoint(srcPt3);\r\n    ConnEnd dstPt3(junctionRef513246008);\r\n    connRef3->setDestEndpoint(dstPt3);\r\n    connRef3->setRoutingType((ConnType)2);\r\n    \r\n    ConnRef *connRef5 = new ConnRef(router, 5);\r\n    ConnEnd srcPt5(junctionRef4);\r\n    connRef5->setSourceEndpoint(srcPt5);\r\n    ConnEnd dstPt5(junctionRef513246008);\r\n    connRef5->setDestEndpoint(dstPt5);\r\n    connRef5->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef513246009 = new ConnRef(router, 513246009);\r\n    ConnEnd srcPt513246009(shapeRef39761567, 1);\r\n    connRef513246009->setSourceEndpoint(srcPt513246009);\r\n    ConnEnd dstPt513246009(junctionRef4);\r\n    connRef513246009->setDestEndpoint(dstPt513246009);\r\n    connRef513246009->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef513246010 = new ConnRef(router, 513246010);\r\n    ConnEnd srcPt513246010(junctionRef513246008);\r\n    connRef513246010->setSourceEndpoint(srcPt513246010);\r\n    ConnEnd dstPt513246010(shapeRef430971008, 1);\r\n    connRef513246010->setDestEndpoint(dstPt513246010);\r\n    connRef513246010->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef513246011 = new ConnRef(router, 513246011);\r\n    ConnEnd srcPt513246011(junctionRef4);\r\n    connRef513246011->setSourceEndpoint(srcPt513246011);\r\n    ConnEnd dstPt513246011(shapeRef238475293, 1);\r\n    connRef513246011->setDestEndpoint(dstPt513246011);\r\n    connRef513246011->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef513246012 = new ConnRef(router, 513246012);\r\n    ConnEnd srcPt513246012(shapeRef115776716, 1);\r\n    connRef513246012->setSourceEndpoint(srcPt513246012);\r\n    ConnEnd dstPt513246012(junctionRef513246008);\r\n    connRef513246012->setDestEndpoint(dstPt513246012);\r\n    connRef513246012->setRoutingType((ConnType)2);\r\n    router->processTransaction();\r\n    router->outputDiagram(\"output/improveHyperedge04\");\r\n\r\n    bool overlaps = router->existsOrthogonalSegmentOverlap(true);\r\n    delete router;\r\n    return (overlaps) ? 1 : 0;\r\n};\r\n"
  },
  {
    "path": "cola/libavoid/tests/improveHyperedge05.cpp",
    "content": "#include \"libavoid/libavoid.h\"\r\n#include <sstream>\r\nusing namespace Avoid;\r\n\r\nvoid outputDiagram(Avoid::Router * router)\r\n{\r\n\tstatic int counter = 0;\r\n\tstd::ostringstream os;\r\n\tos << \"output/improveHyperedge05-\" << (++counter);\r\n\trouter->outputDiagram(os.str());\r\n}\r\n\r\nvoid test()\r\n{\r\n\t// The contents of this function can be replaced by the automatically generated test code from the debug svg file\r\n\tAvoid::ConnEnd end1_0;\r\n\tAvoid::ConnEnd end2_0;\r\n\tAvoid::Polygon poly0;\r\n\tstd::vector<Avoid::Checkpoint> checkpoints_0;\r\n\tAvoid::Router * router0 = new Avoid::Router(Avoid::OrthogonalRouting);\r\n\tAvoid::HyperedgeNewAndDeletedObjectLists newanddeletedobjects_0;\r\n\tAvoid::ConnRefList::const_iterator connit_0;\r\n\tAvoid::JunctionRefList::const_iterator junctionit_0;\r\n\trouter0->setTransactionUse(true);\r\n\trouter0->setRoutingPenalty(Avoid::segmentPenalty);\r\n\trouter0->setRoutingPenalty(Avoid::crossingPenalty);\r\n\trouter0->setRoutingPenalty(Avoid::fixedSharedPathPenalty, 9000);\r\n\trouter0->setRoutingOption(Avoid::penaliseOrthogonalSharedPathsAtConnEnds, true);\r\n\trouter0->setRoutingParameter(Avoid::idealNudgingDistance, 25);\r\n\trouter0->setRoutingOption(Avoid::improveHyperedgeRoutesMovingAddingAndDeletingJunctions, true);\r\n\trouter0->processTransaction();\r\n\r\n\tnewanddeletedobjects_0 = router0->newAndDeletedObjectListsFromHyperedgeImprovement();\r\n\toutputDiagram(router0);\r\n\r\n\tpoly0 = Avoid::Polygon(4);\r\n\tpoly0.setPoint(0, Avoid::Point(51885, 50715));\r\n\tpoly0.setPoint(1, Avoid::Point(51885, 50935));\r\n\tpoly0.setPoint(2, Avoid::Point(51700, 50935));\r\n\tpoly0.setPoint(3, Avoid::Point(51700, 50715));\r\n\tAvoid::ShapeRef * shape0_68611488 = new Avoid::ShapeRef(router0, poly0, 68611488);\r\n\tAvoid::ShapeConnectionPin * pin0_68611488_0 = new Avoid::ShapeConnectionPin(shape0_68611488, 1, 0.810810810811, 0.0454545454545, true, 10, 1);\r\n\tpin0_68611488_0->setExclusive(true);\r\n\tAvoid::ShapeConnectionPin * pin0_68611488_1 = new Avoid::ShapeConnectionPin(shape0_68611488, 2, 0, 0.5, true, 10, 4);\r\n\tpin0_68611488_1->setExclusive(true);\r\n\tAvoid::ShapeConnectionPin * pin0_68611488_2 = new Avoid::ShapeConnectionPin(shape0_68611488, 3, 0.810810810811, 0.954545454545, true, 10, 2);\r\n\tpin0_68611488_2->setExclusive(true);\r\n\tpoly0 = Avoid::Polygon(4);\r\n\tpoly0.setPoint(0, Avoid::Point(51600, 50795));\r\n\tpoly0.setPoint(1, Avoid::Point(51600, 50855));\r\n\tpoly0.setPoint(2, Avoid::Point(51440, 50855));\r\n\tpoly0.setPoint(3, Avoid::Point(51440, 50795));\r\n\tAvoid::ShapeRef * shape0_84988680 = new Avoid::ShapeRef(router0, poly0, 84988680);\r\n\tAvoid::ShapeConnectionPin * pin0_84988680_0 = new Avoid::ShapeConnectionPin(shape0_84988680, 1, 0.0625, 0.5, true, 10, 4);\r\n\tpin0_84988680_0->setExclusive(true);\r\n\tAvoid::ShapeConnectionPin * pin0_84988680_1 = new Avoid::ShapeConnectionPin(shape0_84988680, 2, 1, 0.5, true, 10, 8);\r\n\tpin0_84988680_1->setExclusive(true);\r\n\tpoly0 = Avoid::Polygon(4);\r\n\tpoly0.setPoint(0, Avoid::Point(51705, 50640));\r\n\tpoly0.setPoint(1, Avoid::Point(51705, 50800));\r\n\tpoly0.setPoint(2, Avoid::Point(51645, 50800));\r\n\tpoly0.setPoint(3, Avoid::Point(51645, 50640));\r\n\tAvoid::ShapeRef * shape0_170757006 = new Avoid::ShapeRef(router0, poly0, 170757006);\r\n\tAvoid::ShapeConnectionPin * pin0_170757006_0 = new Avoid::ShapeConnectionPin(shape0_170757006, 1, 0.5, 1, true, 10, 2);\r\n\tpin0_170757006_0->setExclusive(true);\r\n\tAvoid::ShapeConnectionPin * pin0_170757006_1 = new Avoid::ShapeConnectionPin(shape0_170757006, 2, 0.5, 0.0625, true, 10, 1);\r\n\tpin0_170757006_1->setExclusive(true);\r\n\tAvoid::JunctionRef * junction0_185122667 = new Avoid::JunctionRef(router0, Avoid::Point(51675, 50825), 185122667);\r\n\tpoly0 = Avoid::Polygon(4);\r\n\tpoly0.setPoint(0, Avoid::Point(51705, 50925));\r\n\tpoly0.setPoint(1, Avoid::Point(51705, 51085));\r\n\tpoly0.setPoint(2, Avoid::Point(51645, 51085));\r\n\tpoly0.setPoint(3, Avoid::Point(51645, 50925));\r\n\tAvoid::ShapeRef * shape0_300278382 = new Avoid::ShapeRef(router0, poly0, 300278382);\r\n\tAvoid::ShapeConnectionPin * pin0_300278382_0 = new Avoid::ShapeConnectionPin(shape0_300278382, 1, 0.5, 0.9375, true, 10, 2);\r\n\tpin0_300278382_0->setExclusive(true);\r\n\tAvoid::ShapeConnectionPin * pin0_300278382_1 = new Avoid::ShapeConnectionPin(shape0_300278382, 2, 0.5, 0, true, 10, 1);\r\n\tpin0_300278382_1->setExclusive(true);\r\n\tend1_0 = Avoid::ConnEnd(shape0_84988680, 2);\r\n\tend2_0 = Avoid::ConnEnd(junction0_185122667);\r\n\tnew Avoid::ConnRef(router0, end1_0, end2_0, 70922320);\r\n\tend1_0 = Avoid::ConnEnd(junction0_185122667);\r\n\tend2_0 = Avoid::ConnEnd(shape0_68611488, 2);\r\n\tnew Avoid::ConnRef(router0, end1_0, end2_0, 141698060);\r\n\tend1_0 = Avoid::ConnEnd(shape0_170757006, 1);\r\n\tend2_0 = Avoid::ConnEnd(junction0_185122667);\r\n\tnew Avoid::ConnRef(router0, end1_0, end2_0, 27983869);\r\n\tend1_0 = Avoid::ConnEnd(shape0_300278382, 2);\r\n\tend2_0 = Avoid::ConnEnd(junction0_185122667);\r\n\tnew Avoid::ConnRef(router0, end1_0, end2_0, 197910572);\r\n\trouter0->processTransaction();\r\n\t//printf(\"%d\\n\", junction0_185122667->attachedConnectors().size());\r\n\tCOLA_ASSERT(junction0_185122667->attachedConnectors().size() == 4);\r\n\r\n\tnewanddeletedobjects_0 = router0->newAndDeletedObjectListsFromHyperedgeImprovement();\r\n\toutputDiagram(router0);\r\n\tprintf(\"\\n\\n\\n\");\r\n\tpoly0 = Avoid::Polygon(4);\r\n\tpoly0.setPoint(0, Avoid::Point(51305, 50690));\r\n\tpoly0.setPoint(1, Avoid::Point(51305, 50850));\r\n\tpoly0.setPoint(2, Avoid::Point(51245, 50850));\r\n\tpoly0.setPoint(3, Avoid::Point(51245, 50690));\r\n\trouter0->moveShape(shape0_170757006, poly0);\r\n\trouter0->processTransaction();\r\n\r\n\tnewanddeletedobjects_0 = router0->newAndDeletedObjectListsFromHyperedgeImprovement();\r\n\tjunctionit_0 = newanddeletedobjects_0.newJunctionList.begin();\r\n\tAvoid::JunctionRef * junction0_436653030 = *junctionit_0;\r\n\tjunction0_436653030->position();\r\n\t//printf(\"%d %d\\n\", junction0_185122667->attachedConnectors().size(),\r\n\t//\t\tjunction0_436653030->attachedConnectors().size());\r\n\tCOLA_ASSERT(junction0_185122667->attachedConnectors().size() == 3);\r\n\tCOLA_ASSERT(junction0_436653030->attachedConnectors().size() == 3);\r\n\r\n\tjunction0_436653030->attachedConnectors();\r\n\tjunction0_436653030->setPositionFixed(true);\r\n\tjunctionit_0++;\r\n\tCOLA_ASSERT(junctionit_0 == newanddeletedobjects_0.newJunctionList.end());\r\n\tconnit_0 = newanddeletedobjects_0.newConnectorList.begin();\r\n\tAvoid::ConnRef * conn0_400977693 = *connit_0;\r\n\tconn0_400977693->endpointConnEnds();\r\n\tconnit_0++;\r\n\tCOLA_ASSERT(connit_0 == newanddeletedobjects_0.newConnectorList.end());\r\n\toutputDiagram(router0);\r\n\t\r\n\tconn0_400977693->makePathInvalid();\r\n\trouter0->processTransaction();\r\n\t\r\n\toutputDiagram(router0);\r\n\treturn;\t\r\n/*\r\n        // INCORRECT\r\n\tnewanddeletedobjects_0 = router0->newAndDeletedObjectListsFromHyperedgeImprovement();\r\n\tjunctionit_0 = newanddeletedobjects_0.newJunctionList.begin();\r\n\tAvoid::JunctionRef * junction0_112970070 = *junctionit_0;\r\n\tjunction0_112970070->position();\r\n\tjunction0_112970070->attachedConnectors();\r\n\tjunction0_112970070->setPositionFixed(true);\r\n\tjunctionit_0++;\r\n\tCOLA_ASSERT(junctionit_0 == newanddeletedobjects_0.newJunctionList.end());\r\n\tconnit_0 = newanddeletedobjects_0.newConnectorList.begin();\r\n\tAvoid::ConnRef * conn0_152820633 = *connit_0;\r\n\tconn0_152820633->endpointConnEnds();\r\n\tconnit_0++;\r\n\tCOLA_ASSERT(connit_0 == newanddeletedobjects_0.newConnectorList.end());\r\n\toutputDiagram(router0);\r\n\t*/\r\n}\r\n\r\nextern \"C\" int main(void)\r\n{\r\n\ttest();\r\n\treturn 0;\r\n}\r\n"
  },
  {
    "path": "cola/libavoid/tests/improveHyperedge06.cpp",
    "content": "#include \"libavoid/libavoid.h\"\r\nusing namespace Avoid;\r\nint main(void) {\r\n    Router *router = new Router(\r\n            PolyLineRouting | OrthogonalRouting);\r\n    router->setRoutingPenalty((PenaltyType)0, 50);\r\n    router->setRoutingPenalty((PenaltyType)1, 0);\r\n    router->setRoutingPenalty((PenaltyType)2, 200);\r\n    router->setRoutingPenalty((PenaltyType)3, 4000);\r\n    router->setRoutingPenalty((PenaltyType)4, 9000);\r\n    router->setRoutingPenalty((PenaltyType)5, 100);\r\n    router->setRoutingOption((RoutingOption)0, false);\r\n    router->setRoutingOption((RoutingOption)1, true);\r\n    router->setRoutingOption((RoutingOption)2, true);\r\n    router->setRoutingOption(improveHyperedgeRoutesMovingAddingAndDeletingJunctions, true);\r\n    router->setRoutingParameter(idealNudgingDistance, 25);\r\n\r\n    Polygon poly39761567(4);\r\n    poly39761567.ps[0] = Point(50754, 50975);\r\n    poly39761567.ps[1] = Point(50754, 51060);\r\n    poly39761567.ps[2] = Point(50696, 51060);\r\n    poly39761567.ps[3] = Point(50696, 50975);\r\n    ShapeRef *shapeRef39761567 = new ShapeRef(router, poly39761567, 39761567);\r\n    new ShapeConnectionPin(shapeRef39761567, 1, 0.5, 0, true, 10, (ConnDirFlags) 1);\r\n\r\n    Polygon poly115776716(4);\r\n    poly115776716.ps[0] = Point(51504, 50975);\r\n    poly115776716.ps[1] = Point(51504, 51060);\r\n    poly115776716.ps[2] = Point(51446, 51060);\r\n    poly115776716.ps[3] = Point(51446, 50975);\r\n    ShapeRef *shapeRef115776716 = new ShapeRef(router, poly115776716, 115776716);\r\n    new ShapeConnectionPin(shapeRef115776716, 1, 0.5, 0, true, 10, (ConnDirFlags) 1);\r\n\r\n    Polygon poly238475293(4);\r\n    poly238475293.ps[0] = Point(50554, 50975);\r\n    poly238475293.ps[1] = Point(50554, 51060);\r\n    poly238475293.ps[2] = Point(50496, 51060);\r\n    poly238475293.ps[3] = Point(50496, 50975);\r\n    ShapeRef *shapeRef238475293 = new ShapeRef(router, poly238475293, 238475293);\r\n    new ShapeConnectionPin(shapeRef238475293, 1, 0.5, 0, true, 10, (ConnDirFlags) 1);\r\n\r\n    Polygon poly430971008(4);\r\n    poly430971008.ps[0] = Point(51004, 50465);\r\n    poly430971008.ps[1] = Point(51004, 50550);\r\n    poly430971008.ps[2] = Point(50946, 50550);\r\n    poly430971008.ps[3] = Point(50946, 50465);\r\n    ShapeRef *shapeRef430971008 = new ShapeRef(router, poly430971008, 430971008);\r\n    new ShapeConnectionPin(shapeRef430971008, 1, 0.5, 1, true, 10, (ConnDirFlags) 2);\r\n\r\n    JunctionRef *junctionRef513246008 = new JunctionRef(router, Point(50925, 50725), 513246008);\r\n    junctionRef513246008->setPositionFixed(true);\r\n\r\n    /*\r\n    // This may be useful if junction pins are modified.\r\n    new ShapeConnectionPin(junctionRef513246008, 2147483646, (ConnDirFlags) 15);\r\n    */\r\n\r\n    ConnRef *connRef513246009 = new ConnRef(router, 513246009);\r\n    ConnEnd srcPt513246009(shapeRef39761567, 1);\r\n    connRef513246009->setSourceEndpoint(srcPt513246009);\r\n    ConnEnd dstPt513246009(junctionRef513246008);\r\n    connRef513246009->setDestEndpoint(dstPt513246009);\r\n    connRef513246009->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef513246010 = new ConnRef(router, 513246010);\r\n    ConnEnd srcPt513246010(junctionRef513246008);\r\n    connRef513246010->setSourceEndpoint(srcPt513246010);\r\n    ConnEnd dstPt513246010(shapeRef430971008, 1);\r\n    connRef513246010->setDestEndpoint(dstPt513246010);\r\n    connRef513246010->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef513246011 = new ConnRef(router, 513246011);\r\n    ConnEnd srcPt513246011(junctionRef513246008);\r\n    connRef513246011->setSourceEndpoint(srcPt513246011);\r\n    ConnEnd dstPt513246011(shapeRef238475293, 1);\r\n    connRef513246011->setDestEndpoint(dstPt513246011);\r\n    connRef513246011->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef513246012 = new ConnRef(router, 513246012);\r\n    ConnEnd srcPt513246012(shapeRef115776716, 1);\r\n    connRef513246012->setSourceEndpoint(srcPt513246012);\r\n    ConnEnd dstPt513246012(junctionRef513246008);\r\n    connRef513246012->setDestEndpoint(dstPt513246012);\r\n    connRef513246012->setRoutingType((ConnType)2);\r\n\r\n    router->processTransaction();\r\n    router->outputDiagram(\"output/improveHyperedge06\");\r\n\r\n    bool overlaps = router->existsOrthogonalSegmentOverlap(true);\r\n    delete router;\r\n    return (overlaps) ? 1 : 0;\r\n};\r\n"
  },
  {
    "path": "cola/libavoid/tests/infinity.cpp",
    "content": "#include \"libavoid/libavoid.h\"\nusing namespace Avoid;\nint main(void) {\n    Router *router = new Router(OrthogonalRouting);\n    router->setRoutingPenalty(segmentPenalty, 50);\n    router->setRoutingParameter(idealNudgingDistance, 10);\n    Rectangle rect47(Point(51145, 50195), Point(51145+360, 50195+685));\n    new ShapeRef(router, rect47);\n    Rectangle rect46(Point(51920, 49770), Point(51920+360, 49770+310));\n    new ShapeRef(router, rect46);\n    Rectangle rect45(Point(51151, 49770), Point(51151+360, 49770+310));\n    new ShapeRef(router, rect45);\n    ConnEnd srcPt53(Point(51150,49850), 4);\n    ConnEnd dstPt53(Point(51500,50350), 8);\n    new ConnRef(router, srcPt53, dstPt53);\n    ConnEnd srcPt52(Point(52275,49850), 8);\n    ConnEnd dstPt52(Point(51150,49925), 4);\n    new ConnRef(router, srcPt52, dstPt52);\n    ConnEnd srcPt6(Point(51150,50500), 4);\n    ConnEnd dstPt6(Point(51925,50000), 4);\n    new ConnRef(router, srcPt6, dstPt6, 6);\n    router->processTransaction();\n    router->outputDiagram(\"output/infinity\");\n    delete router;\n    return 0;\n};\n"
  },
  {
    "path": "cola/libavoid/tests/inline.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libavoid - Fast, Incremental, Object-avoiding Line Router\n * Copyright (C) 2004-2007  Michael Wybrow <mjwybrow@users.sourceforge.net>\n * Copyright (C) 2009  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * Licensees holding a valid commercial license may use this file in\n * accordance with the commercial license agreement provided with the \n * library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  \n *\n * Author(s):   Michael Wybrow <mjwybrow@users.sourceforge.net>\n*/\n\n#include \"libavoid/libavoid.h\"\n\nusing Avoid::ConnDirUp;\nusing Avoid::ConnDirDown;\nusing Avoid::ConnDirLeft;\nusing Avoid::ConnDirRight;\n\nint main(void)\n{\n    Avoid::Router *router = new Avoid::Router(Avoid::OrthogonalRouting);\n    \n    // Create the ShapeRef:\n    Avoid::Rectangle shapePoly(Avoid::Point(0, 0), Avoid::Point(100, 100));\n    new Avoid::ShapeRef(router, shapePoly);\n\n    Avoid::ConnEnd srcPt(Avoid::Point(200, 200));\n\n    Avoid::ConnEnd dstPt(Avoid::Point(95, 25), \n            ConnDirUp | ConnDirRight | ConnDirDown);\n    new Avoid::ConnRef(router, srcPt, dstPt);\n    \n    dstPt = Avoid::ConnEnd(Avoid::Point(95, 75), \n            ConnDirUp | ConnDirRight | ConnDirDown);\n    new Avoid::ConnRef(router, srcPt, dstPt);\n    \n    // Up goes towards negative coordinates.\n    dstPt = Avoid::ConnEnd(Avoid::Point(25, 5), \n            ConnDirLeft | ConnDirRight | ConnDirUp);\n    new Avoid::ConnRef(router, srcPt, dstPt);\n    \n    dstPt = Avoid::ConnEnd(Avoid::Point(75, 5), \n            ConnDirLeft | ConnDirRight | ConnDirUp);\n    new Avoid::ConnRef(router, srcPt, dstPt);\n\n    dstPt = Avoid::ConnEnd(Avoid::Point(25, 95), \n            ConnDirLeft | ConnDirRight | ConnDirDown);\n    new Avoid::ConnRef(router, srcPt, dstPt);\n    \n    dstPt = Avoid::ConnEnd(Avoid::Point(75, 95), \n            ConnDirLeft | ConnDirRight | ConnDirDown);\n    new Avoid::ConnRef(router, srcPt, dstPt);\n    \n    router->processTransaction();\n    router->outputDiagram(\"output/inline\");\n\n    delete router;\n    return 0;\n}\n\n"
  },
  {
    "path": "cola/libavoid/tests/inlineOverlap09.cpp",
    "content": "#include \"libavoid/libavoid.h\"\r\nusing namespace Avoid;\r\nint main(void) {\r\n    Router *router = new Router(\r\n            PolyLineRouting | OrthogonalRouting);\r\n    router->setRoutingParameter((RoutingParameter)0, 10);\r\n    router->setRoutingParameter((RoutingParameter)1, 0);\r\n    router->setRoutingParameter((RoutingParameter)2, 100);\r\n    router->setRoutingParameter((RoutingParameter)3, 4000);\r\n    router->setRoutingParameter((RoutingParameter)4, 1000);\r\n    router->setRoutingParameter((RoutingParameter)5, 100);\r\n    router->setRoutingParameter((RoutingParameter)6, 20);\r\n    router->setRoutingParameter((RoutingParameter)7, 40);\r\n    router->setRoutingOption((RoutingOption)0, false);\r\n    router->setRoutingOption((RoutingOption)1, true);\r\n    router->setRoutingOption((RoutingOption)2, false);\r\n    router->setRoutingOption((RoutingOption)3, false);\r\n    Polygon poly1(4);\r\n    poly1.ps[0] = Point(3.43711e+006, 6.73107e+006);\r\n    poly1.ps[1] = Point(3.43711e+006, 6.73108e+006);\r\n    poly1.ps[2] = Point(3.4371e+006, 6.73108e+006);\r\n    poly1.ps[3] = Point(3.4371e+006, 6.73107e+006);\r\n    new ShapeRef(router, poly1, 1);\r\n\r\n    Polygon poly2(4);\r\n    poly2.ps[0] = Point(3.43536e+006, 6.73107e+006);\r\n    poly2.ps[1] = Point(3.43536e+006, 6.73108e+006);\r\n    poly2.ps[2] = Point(3.43535e+006, 6.73108e+006);\r\n    poly2.ps[3] = Point(3.43535e+006, 6.73107e+006);\r\n    new ShapeRef(router, poly2, 2);\r\n\r\n    Polygon poly3(4);\r\n    poly3.ps[0] = Point(3.43786e+006, 6.73107e+006);\r\n    poly3.ps[1] = Point(3.43786e+006, 6.73108e+006);\r\n    poly3.ps[2] = Point(3.43785e+006, 6.73108e+006);\r\n    poly3.ps[3] = Point(3.43785e+006, 6.73107e+006);\r\n    new ShapeRef(router, poly3, 3);\r\n\r\n    Polygon poly4(4);\r\n    poly4.ps[0] = Point(3.43736e+006, 6.73107e+006);\r\n    poly4.ps[1] = Point(3.43736e+006, 6.73108e+006);\r\n    poly4.ps[2] = Point(3.43735e+006, 6.73108e+006);\r\n    poly4.ps[3] = Point(3.43735e+006, 6.73107e+006);\r\n    new ShapeRef(router, poly4, 4);\r\n\r\n    Polygon poly5(4);\r\n    poly5.ps[0] = Point(3.4349e+006, 6.73107e+006);\r\n    poly5.ps[1] = Point(3.4349e+006, 6.73108e+006);\r\n    poly5.ps[2] = Point(3.43489e+006, 6.73108e+006);\r\n    poly5.ps[3] = Point(3.43489e+006, 6.73107e+006);\r\n    new ShapeRef(router, poly5, 5);\r\n\r\n    Polygon poly6(4);\r\n    poly6.ps[0] = Point(3.43573e+006, 6.73052e+006);\r\n    poly6.ps[1] = Point(3.43573e+006, 6.73053e+006);\r\n    poly6.ps[2] = Point(3.43572e+006, 6.73053e+006);\r\n    poly6.ps[3] = Point(3.43572e+006, 6.73052e+006);\r\n    new ShapeRef(router, poly6, 6);\r\n\r\n    Polygon poly7(4);\r\n    poly7.ps[0] = Point(3.43636e+006, 6.73107e+006);\r\n    poly7.ps[1] = Point(3.43636e+006, 6.73108e+006);\r\n    poly7.ps[2] = Point(3.43635e+006, 6.73108e+006);\r\n    poly7.ps[3] = Point(3.43635e+006, 6.73107e+006);\r\n    new ShapeRef(router, poly7, 7);\r\n\r\n    Polygon poly8(4);\r\n    poly8.ps[0] = Point(3.43769e+006, 6.73107e+006);\r\n    poly8.ps[1] = Point(3.43769e+006, 6.73108e+006);\r\n    poly8.ps[2] = Point(3.43768e+006, 6.73108e+006);\r\n    poly8.ps[3] = Point(3.43768e+006, 6.73107e+006);\r\n    new ShapeRef(router, poly8, 8);\r\n\r\n    Polygon poly9(4);\r\n    poly9.ps[0] = Point(3.43761e+006, 6.73107e+006);\r\n    poly9.ps[1] = Point(3.43761e+006, 6.73108e+006);\r\n    poly9.ps[2] = Point(3.4376e+006, 6.73108e+006);\r\n    poly9.ps[3] = Point(3.4376e+006, 6.73107e+006);\r\n    new ShapeRef(router, poly9, 9);\r\n\r\n    Polygon poly10(4);\r\n    poly10.ps[0] = Point(3.43661e+006, 6.73107e+006);\r\n    poly10.ps[1] = Point(3.43661e+006, 6.73108e+006);\r\n    poly10.ps[2] = Point(3.4366e+006, 6.73108e+006);\r\n    poly10.ps[3] = Point(3.4366e+006, 6.73107e+006);\r\n    new ShapeRef(router, poly10, 10);\r\n\r\n    Polygon poly11(4);\r\n    poly11.ps[0] = Point(3.4369e+006, 6.73107e+006);\r\n    poly11.ps[1] = Point(3.4369e+006, 6.73108e+006);\r\n    poly11.ps[2] = Point(3.43689e+006, 6.73108e+006);\r\n    poly11.ps[3] = Point(3.43689e+006, 6.73107e+006);\r\n    new ShapeRef(router, poly11, 11);\r\n\r\n    Polygon poly12(4);\r\n    poly12.ps[0] = Point(3.43619e+006, 6.73107e+006);\r\n    poly12.ps[1] = Point(3.43619e+006, 6.73108e+006);\r\n    poly12.ps[2] = Point(3.43618e+006, 6.73108e+006);\r\n    poly12.ps[3] = Point(3.43618e+006, 6.73107e+006);\r\n    new ShapeRef(router, poly12, 12);\r\n\r\n    Polygon poly13(4);\r\n    poly13.ps[0] = Point(3.43611e+006, 6.73107e+006);\r\n    poly13.ps[1] = Point(3.43611e+006, 6.73108e+006);\r\n    poly13.ps[2] = Point(3.4361e+006, 6.73108e+006);\r\n    poly13.ps[3] = Point(3.4361e+006, 6.73107e+006);\r\n    new ShapeRef(router, poly13, 13);\r\n\r\n    Polygon poly14(4);\r\n    poly14.ps[0] = Point(3.43461e+006, 6.73107e+006);\r\n    poly14.ps[1] = Point(3.43461e+006, 6.73108e+006);\r\n    poly14.ps[2] = Point(3.4346e+006, 6.73108e+006);\r\n    poly14.ps[3] = Point(3.4346e+006, 6.73107e+006);\r\n    new ShapeRef(router, poly14, 14);\r\n\r\n    Polygon poly15(4);\r\n    poly15.ps[0] = Point(3.43476e+006, 6.73128e+006);\r\n    poly15.ps[1] = Point(3.43476e+006, 6.73148e+006);\r\n    poly15.ps[2] = Point(3.43456e+006, 6.73148e+006);\r\n    poly15.ps[3] = Point(3.43456e+006, 6.73128e+006);\r\n    new ShapeRef(router, poly15, 15);\r\n\r\n    Polygon poly16(4);\r\n    poly16.ps[0] = Point(3.43476e+006, 6.73013e+006);\r\n    poly16.ps[1] = Point(3.43476e+006, 6.73033e+006);\r\n    poly16.ps[2] = Point(3.43456e+006, 6.73033e+006);\r\n    poly16.ps[3] = Point(3.43456e+006, 6.73013e+006);\r\n    new ShapeRef(router, poly16, 16);\r\n\r\n    Polygon poly17(4);\r\n    poly17.ps[0] = Point(3.43501e+006, 6.73013e+006);\r\n    poly17.ps[1] = Point(3.43501e+006, 6.73033e+006);\r\n    poly17.ps[2] = Point(3.43481e+006, 6.73033e+006);\r\n    poly17.ps[3] = Point(3.43481e+006, 6.73013e+006);\r\n    new ShapeRef(router, poly17, 17);\r\n\r\n    Polygon poly18(4);\r\n    poly18.ps[0] = Point(3.43526e+006, 6.73013e+006);\r\n    poly18.ps[1] = Point(3.43526e+006, 6.73033e+006);\r\n    poly18.ps[2] = Point(3.43506e+006, 6.73033e+006);\r\n    poly18.ps[3] = Point(3.43506e+006, 6.73013e+006);\r\n    new ShapeRef(router, poly18, 18);\r\n\r\n    Polygon poly19(4);\r\n    poly19.ps[0] = Point(3.43551e+006, 6.73013e+006);\r\n    poly19.ps[1] = Point(3.43551e+006, 6.73033e+006);\r\n    poly19.ps[2] = Point(3.43531e+006, 6.73033e+006);\r\n    poly19.ps[3] = Point(3.43531e+006, 6.73013e+006);\r\n    new ShapeRef(router, poly19, 19);\r\n\r\n    Polygon poly20(4);\r\n    poly20.ps[0] = Point(3.43501e+006, 6.73128e+006);\r\n    poly20.ps[1] = Point(3.43501e+006, 6.73148e+006);\r\n    poly20.ps[2] = Point(3.43481e+006, 6.73148e+006);\r\n    poly20.ps[3] = Point(3.43481e+006, 6.73128e+006);\r\n    new ShapeRef(router, poly20, 20);\r\n\r\n    Polygon poly21(4);\r\n    poly21.ps[0] = Point(3.43526e+006, 6.73128e+006);\r\n    poly21.ps[1] = Point(3.43526e+006, 6.73148e+006);\r\n    poly21.ps[2] = Point(3.43506e+006, 6.73148e+006);\r\n    poly21.ps[3] = Point(3.43506e+006, 6.73128e+006);\r\n    new ShapeRef(router, poly21, 21);\r\n\r\n    Polygon poly22(4);\r\n    poly22.ps[0] = Point(3.43551e+006, 6.73128e+006);\r\n    poly22.ps[1] = Point(3.43551e+006, 6.73148e+006);\r\n    poly22.ps[2] = Point(3.43531e+006, 6.73148e+006);\r\n    poly22.ps[3] = Point(3.43531e+006, 6.73128e+006);\r\n    new ShapeRef(router, poly22, 22);\r\n\r\n    Polygon poly23(4);\r\n    poly23.ps[0] = Point(3.43576e+006, 6.73128e+006);\r\n    poly23.ps[1] = Point(3.43576e+006, 6.73148e+006);\r\n    poly23.ps[2] = Point(3.43556e+006, 6.73148e+006);\r\n    poly23.ps[3] = Point(3.43556e+006, 6.73128e+006);\r\n    new ShapeRef(router, poly23, 23);\r\n\r\n    Polygon poly24(4);\r\n    poly24.ps[0] = Point(3.43601e+006, 6.73128e+006);\r\n    poly24.ps[1] = Point(3.43601e+006, 6.73148e+006);\r\n    poly24.ps[2] = Point(3.43581e+006, 6.73148e+006);\r\n    poly24.ps[3] = Point(3.43581e+006, 6.73128e+006);\r\n    new ShapeRef(router, poly24, 24);\r\n\r\n    Polygon poly25(4);\r\n    poly25.ps[0] = Point(3.43626e+006, 6.73128e+006);\r\n    poly25.ps[1] = Point(3.43626e+006, 6.73148e+006);\r\n    poly25.ps[2] = Point(3.43606e+006, 6.73148e+006);\r\n    poly25.ps[3] = Point(3.43606e+006, 6.73128e+006);\r\n    new ShapeRef(router, poly25, 25);\r\n\r\n    Polygon poly26(4);\r\n    poly26.ps[0] = Point(3.43651e+006, 6.73128e+006);\r\n    poly26.ps[1] = Point(3.43651e+006, 6.73148e+006);\r\n    poly26.ps[2] = Point(3.43631e+006, 6.73148e+006);\r\n    poly26.ps[3] = Point(3.43631e+006, 6.73128e+006);\r\n    new ShapeRef(router, poly26, 26);\r\n\r\n    Polygon poly27(4);\r\n    poly27.ps[0] = Point(3.43676e+006, 6.73128e+006);\r\n    poly27.ps[1] = Point(3.43676e+006, 6.73148e+006);\r\n    poly27.ps[2] = Point(3.43656e+006, 6.73148e+006);\r\n    poly27.ps[3] = Point(3.43656e+006, 6.73128e+006);\r\n    new ShapeRef(router, poly27, 27);\r\n\r\n    Polygon poly28(4);\r\n    poly28.ps[0] = Point(3.43701e+006, 6.73128e+006);\r\n    poly28.ps[1] = Point(3.43701e+006, 6.73148e+006);\r\n    poly28.ps[2] = Point(3.43681e+006, 6.73148e+006);\r\n    poly28.ps[3] = Point(3.43681e+006, 6.73128e+006);\r\n    new ShapeRef(router, poly28, 28);\r\n\r\n    Polygon poly29(4);\r\n    poly29.ps[0] = Point(3.43726e+006, 6.73128e+006);\r\n    poly29.ps[1] = Point(3.43726e+006, 6.73148e+006);\r\n    poly29.ps[2] = Point(3.43706e+006, 6.73148e+006);\r\n    poly29.ps[3] = Point(3.43706e+006, 6.73128e+006);\r\n    new ShapeRef(router, poly29, 29);\r\n\r\n    Polygon poly30(4);\r\n    poly30.ps[0] = Point(3.43751e+006, 6.73128e+006);\r\n    poly30.ps[1] = Point(3.43751e+006, 6.73148e+006);\r\n    poly30.ps[2] = Point(3.43731e+006, 6.73148e+006);\r\n    poly30.ps[3] = Point(3.43731e+006, 6.73128e+006);\r\n    new ShapeRef(router, poly30, 30);\r\n\r\n    Polygon poly31(4);\r\n    poly31.ps[0] = Point(3.43776e+006, 6.73128e+006);\r\n    poly31.ps[1] = Point(3.43776e+006, 6.73148e+006);\r\n    poly31.ps[2] = Point(3.43756e+006, 6.73148e+006);\r\n    poly31.ps[3] = Point(3.43756e+006, 6.73128e+006);\r\n    new ShapeRef(router, poly31, 31);\r\n\r\n    Polygon poly32(4);\r\n    poly32.ps[0] = Point(3.43576e+006, 6.73013e+006);\r\n    poly32.ps[1] = Point(3.43576e+006, 6.73033e+006);\r\n    poly32.ps[2] = Point(3.43556e+006, 6.73033e+006);\r\n    poly32.ps[3] = Point(3.43556e+006, 6.73013e+006);\r\n    new ShapeRef(router, poly32, 32);\r\n\r\n    Polygon poly33(4);\r\n    poly33.ps[0] = Point(3.43801e+006, 6.73128e+006);\r\n    poly33.ps[1] = Point(3.43801e+006, 6.73148e+006);\r\n    poly33.ps[2] = Point(3.43781e+006, 6.73148e+006);\r\n    poly33.ps[3] = Point(3.43781e+006, 6.73128e+006);\r\n    new ShapeRef(router, poly33, 33);\r\n\r\n    ConnRef *connRef34 = new ConnRef(router, 34);\r\n    ConnEnd srcPt34(Point(3.4351e+006, 6.73033e+006), 2);\r\n    connRef34->setSourceEndpoint(srcPt34);\r\n    ConnEnd dstPt34(Point(3.4356e+006, 6.73128e+006), 1);\r\n    connRef34->setDestEndpoint(dstPt34);\r\n    connRef34->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef35 = new ConnRef(router, 35);\r\n    ConnEnd srcPt35(Point(3.43485e+006, 6.73033e+006), 2);\r\n    connRef35->setSourceEndpoint(srcPt35);\r\n    ConnEnd dstPt35(Point(3.4351e+006, 6.73128e+006), 1);\r\n    connRef35->setDestEndpoint(dstPt35);\r\n    connRef35->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef36 = new ConnRef(router, 36);\r\n    ConnEnd srcPt36(Point(3.4346e+006, 6.73033e+006), 2);\r\n    connRef36->setSourceEndpoint(srcPt36);\r\n    ConnEnd dstPt36(Point(3.43485e+006, 6.73128e+006), 1);\r\n    connRef36->setDestEndpoint(dstPt36);\r\n    connRef36->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef37 = new ConnRef(router, 37);\r\n    ConnEnd srcPt37(Point(3.4356e+006, 6.73033e+006), 2);\r\n    connRef37->setSourceEndpoint(srcPt37);\r\n    ConnEnd dstPt37(Point(3.43685e+006, 6.73128e+006), 1);\r\n    connRef37->setDestEndpoint(dstPt37);\r\n    connRef37->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef38 = new ConnRef(router, 38);\r\n    ConnEnd srcPt38(Point(3.43564e+006, 6.73033e+006), 2);\r\n    connRef38->setSourceEndpoint(srcPt38);\r\n    ConnEnd dstPt38(Point(3.43764e+006, 6.73128e+006), 1);\r\n    connRef38->setDestEndpoint(dstPt38);\r\n    connRef38->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef39 = new ConnRef(router, 39);\r\n    ConnEnd srcPt39(Point(3.43568e+006, 6.73033e+006), 2);\r\n    connRef39->setSourceEndpoint(srcPt39);\r\n    ConnEnd dstPt39(Point(3.43614e+006, 6.73128e+006), 1);\r\n    connRef39->setDestEndpoint(dstPt39);\r\n    connRef39->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef40 = new ConnRef(router, 40);\r\n    ConnEnd srcPt40(Point(3.43572e+006, 6.73033e+006), 2);\r\n    connRef40->setSourceEndpoint(srcPt40);\r\n    ConnEnd dstPt40(Point(3.43572e+006, 6.73052e+006), 1);\r\n    connRef40->setDestEndpoint(dstPt40);\r\n    connRef40->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef41 = new ConnRef(router, 41);\r\n    ConnEnd srcPt41(Point(3.43535e+006, 6.73033e+006), 2);\r\n    connRef41->setSourceEndpoint(srcPt41);\r\n    ConnEnd dstPt41(Point(3.43585e+006, 6.73128e+006), 1);\r\n    connRef41->setDestEndpoint(dstPt41);\r\n    connRef41->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef42 = new ConnRef(router, 42);\r\n    ConnEnd srcPt42(Point(3.43535e+006, 6.73128e+006), 1);\r\n    connRef42->setSourceEndpoint(srcPt42);\r\n    ConnEnd dstPt42(Point(3.43535e+006, 6.73108e+006), 2);\r\n    connRef42->setDestEndpoint(dstPt42);\r\n    connRef42->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef43 = new ConnRef(router, 43);\r\n    ConnEnd srcPt43(Point(3.4366e+006, 6.73128e+006), 1);\r\n    connRef43->setSourceEndpoint(srcPt43);\r\n    ConnEnd dstPt43(Point(3.4366e+006, 6.73108e+006), 2);\r\n    connRef43->setDestEndpoint(dstPt43);\r\n    connRef43->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef44 = new ConnRef(router, 44);\r\n    ConnEnd srcPt44(Point(3.43489e+006, 6.73128e+006), 1);\r\n    connRef44->setSourceEndpoint(srcPt44);\r\n    ConnEnd dstPt44(Point(3.43489e+006, 6.73108e+006), 2);\r\n    connRef44->setDestEndpoint(dstPt44);\r\n    connRef44->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef45 = new ConnRef(router, 45);\r\n    ConnEnd srcPt45(Point(3.43689e+006, 6.73128e+006), 1);\r\n    connRef45->setSourceEndpoint(srcPt45);\r\n    ConnEnd dstPt45(Point(3.43689e+006, 6.73108e+006), 2);\r\n    connRef45->setDestEndpoint(dstPt45);\r\n    connRef45->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef46 = new ConnRef(router, 46);\r\n    ConnEnd srcPt46(Point(3.4361e+006, 6.73128e+006), 1);\r\n    connRef46->setSourceEndpoint(srcPt46);\r\n    ConnEnd dstPt46(Point(3.4361e+006, 6.73108e+006), 2);\r\n    connRef46->setDestEndpoint(dstPt46);\r\n    connRef46->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef47 = new ConnRef(router, 47);\r\n    ConnEnd srcPt47(Point(3.43618e+006, 6.73128e+006), 1);\r\n    connRef47->setSourceEndpoint(srcPt47);\r\n    ConnEnd dstPt47(Point(3.43618e+006, 6.73108e+006), 2);\r\n    connRef47->setDestEndpoint(dstPt47);\r\n    connRef47->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef48 = new ConnRef(router, 48);\r\n    ConnEnd srcPt48(Point(3.4371e+006, 6.73128e+006), 1);\r\n    connRef48->setSourceEndpoint(srcPt48);\r\n    ConnEnd dstPt48(Point(3.4371e+006, 6.73108e+006), 2);\r\n    connRef48->setDestEndpoint(dstPt48);\r\n    connRef48->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef49 = new ConnRef(router, 49);\r\n    ConnEnd srcPt49(Point(3.43735e+006, 6.73128e+006), 1);\r\n    connRef49->setSourceEndpoint(srcPt49);\r\n    ConnEnd dstPt49(Point(3.43735e+006, 6.73108e+006), 2);\r\n    connRef49->setDestEndpoint(dstPt49);\r\n    connRef49->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef50 = new ConnRef(router, 50);\r\n    ConnEnd srcPt50(Point(3.4376e+006, 6.73128e+006), 1);\r\n    connRef50->setSourceEndpoint(srcPt50);\r\n    ConnEnd dstPt50(Point(3.4376e+006, 6.73108e+006), 2);\r\n    connRef50->setDestEndpoint(dstPt50);\r\n    connRef50->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef51 = new ConnRef(router, 51);\r\n    ConnEnd srcPt51(Point(3.43768e+006, 6.73128e+006), 1);\r\n    connRef51->setSourceEndpoint(srcPt51);\r\n    ConnEnd dstPt51(Point(3.43768e+006, 6.73108e+006), 2);\r\n    connRef51->setDestEndpoint(dstPt51);\r\n    connRef51->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef52 = new ConnRef(router, 52);\r\n    ConnEnd srcPt52(Point(3.4346e+006, 6.73128e+006), 1);\r\n    connRef52->setSourceEndpoint(srcPt52);\r\n    ConnEnd dstPt52(Point(3.4346e+006, 6.73108e+006), 2);\r\n    connRef52->setDestEndpoint(dstPt52);\r\n    connRef52->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef53 = new ConnRef(router, 53);\r\n    ConnEnd srcPt53(Point(3.43635e+006, 6.73128e+006), 1);\r\n    connRef53->setSourceEndpoint(srcPt53);\r\n    ConnEnd dstPt53(Point(3.43635e+006, 6.73108e+006), 2);\r\n    connRef53->setDestEndpoint(dstPt53);\r\n    connRef53->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef54 = new ConnRef(router, 54);\r\n    ConnEnd srcPt54(Point(3.43785e+006, 6.73128e+006), 1);\r\n    connRef54->setSourceEndpoint(srcPt54);\r\n    ConnEnd dstPt54(Point(3.43785e+006, 6.73108e+006), 2);\r\n    connRef54->setDestEndpoint(dstPt54);\r\n    connRef54->setRoutingType((ConnType)2);\r\n\r\n    router->processTransaction();\r\n    router->outputDiagram(\"output/inlineOverlap09\");\r\n    bool overlap = router->existsOrthogonalFixedSegmentOverlap();\r\n    delete router;\r\n    return (overlap) ? 1 : 0;\r\n};\r\n"
  },
  {
    "path": "cola/libavoid/tests/inlineOverlap10.cpp",
    "content": "#include \"libavoid/libavoid.h\"\r\nusing namespace Avoid;\r\nint main(void) {\r\n    Router *router = new Router(OrthogonalRouting);\r\n    router->setRoutingParameter((RoutingParameter)0, 50);\r\n    router->setRoutingParameter((RoutingParameter)1, 0);\r\n    router->setRoutingParameter((RoutingParameter)2, 200);\r\n    router->setRoutingParameter((RoutingParameter)3, 4000);\r\n    router->setRoutingParameter((RoutingParameter)4, 20000);\r\n    router->setRoutingParameter((RoutingParameter)5, 100);\r\n    router->setRoutingParameter((RoutingParameter)6, 0);\r\n    router->setRoutingParameter((RoutingParameter)7, 25);\r\n    router->setRoutingOption((RoutingOption)0, false);\r\n    router->setRoutingOption((RoutingOption)1, true);\r\n    router->setRoutingOption((RoutingOption)2, true);\r\n    router->setRoutingOption((RoutingOption)3, false);\r\n    router->setRoutingOption((RoutingOption)4, true);\r\n    router->setRoutingOption((RoutingOption)5, true);\r\n    Polygon polygon;\r\n    ConnRef *connRef = nullptr;\r\n    ConnEnd srcPt;\r\n    ConnEnd dstPt;\r\n    PolyLine newRoute;\r\n    // shapeRef320077872\r\n    polygon = Polygon(4);\r\n    polygon.ps[0] = Point(51000, 50740);\r\n    polygon.ps[1] = Point(51000, 51135);\r\n    polygon.ps[2] = Point(50650, 51135);\r\n    polygon.ps[3] = Point(50650, 50740);\r\n    ShapeRef *shapeRef320077872 = new ShapeRef(router, polygon, 320077872);\r\n    new ShapeConnectionPin(shapeRef320077872, 1, 0, 0.21519, true, 10, (ConnDirFlags) 4);\r\n    new ShapeConnectionPin(shapeRef320077872, 2, 1, 0.21519, true, 10, (ConnDirFlags) 8);\r\n    new ShapeConnectionPin(shapeRef320077872, 3, 0.0714286, 0.405063, true, 10, (ConnDirFlags) 4);\r\n    new ShapeConnectionPin(shapeRef320077872, 4, 1, 0.405063, true, 10, (ConnDirFlags) 8);\r\n    new ShapeConnectionPin(shapeRef320077872, 5, 0.0714286, 0.594937, true, 10, (ConnDirFlags) 4);\r\n    new ShapeConnectionPin(shapeRef320077872, 6, 1, 0.594937, true, 10, (ConnDirFlags) 8);\r\n    new ShapeConnectionPin(shapeRef320077872, 7, 0, 0.78481, true, 10, (ConnDirFlags) 4);\r\n    new ShapeConnectionPin(shapeRef320077872, 8, 1, 0.78481, true, 10, (ConnDirFlags) 8);\r\n\r\n    // shapeRef346216920\r\n    polygon = Polygon(4);\r\n    polygon.ps[0] = Point(51650, 50740);\r\n    polygon.ps[1] = Point(51650, 51135);\r\n    polygon.ps[2] = Point(51300, 51135);\r\n    polygon.ps[3] = Point(51300, 50740);\r\n    ShapeRef *shapeRef346216920 = new ShapeRef(router, polygon, 346216920);\r\n    new ShapeConnectionPin(shapeRef346216920, 1, 0, 0.21519, true, 10, (ConnDirFlags) 4);\r\n    new ShapeConnectionPin(shapeRef346216920, 2, 1, 0.21519, true, 10, (ConnDirFlags) 8);\r\n    new ShapeConnectionPin(shapeRef346216920, 3, 0, 0.405063, true, 10, (ConnDirFlags) 4);\r\n    new ShapeConnectionPin(shapeRef346216920, 4, 0.928571, 0.405063, true, 10, (ConnDirFlags) 8);\r\n    new ShapeConnectionPin(shapeRef346216920, 5, 0, 0.594937, true, 10, (ConnDirFlags) 4);\r\n    new ShapeConnectionPin(shapeRef346216920, 6, 0.928571, 0.594937, true, 10, (ConnDirFlags) 8);\r\n    new ShapeConnectionPin(shapeRef346216920, 7, 0, 0.78481, true, 10, (ConnDirFlags) 4);\r\n    new ShapeConnectionPin(shapeRef346216920, 8, 1, 0.78481, true, 10, (ConnDirFlags) 8);\r\n\r\n    // connRef13958908\r\n    connRef = new ConnRef(router, 13958908);\r\n    srcPt = ConnEnd(shapeRef346216920, 3);\r\n    connRef->setSourceEndpoint(srcPt);\r\n    dstPt = ConnEnd(shapeRef320077872, 6);\r\n    connRef->setDestEndpoint(dstPt);\r\n    connRef->setRoutingType((ConnType)2);\r\n\r\n    // connRef81482716\r\n    connRef = new ConnRef(router, 81482716);\r\n    srcPt = ConnEnd(shapeRef320077872, 8);\r\n    connRef->setSourceEndpoint(srcPt);\r\n    dstPt = ConnEnd(shapeRef346216920, 7);\r\n    connRef->setDestEndpoint(dstPt);\r\n    connRef->setRoutingType((ConnType)2);\r\n\r\n    // connRef180721992\r\n    connRef = new ConnRef(router, 180721992);\r\n    srcPt = ConnEnd(shapeRef320077872, 4);\r\n    connRef->setSourceEndpoint(srcPt);\r\n    dstPt = ConnEnd(shapeRef346216920, 5);\r\n    connRef->setDestEndpoint(dstPt);\r\n    connRef->setRoutingType((ConnType)2);\r\n\r\n    // connRef273666240\r\n    connRef = new ConnRef(router, 273666240);\r\n    srcPt = ConnEnd(shapeRef320077872, 2);\r\n    connRef->setSourceEndpoint(srcPt);\r\n    dstPt = ConnEnd(shapeRef346216920, 1);\r\n    connRef->setDestEndpoint(dstPt);\r\n    connRef->setRoutingType((ConnType)2);\r\n\r\n    router->processTransaction();\r\n    router->outputDiagram(\"output/inlineoverlap10\");\r\n    bool overlap = router->existsOrthogonalFixedSegmentOverlap();\r\n    delete router;\r\n    return (overlap) ? 1 : 0;\r\n};\r\n"
  },
  {
    "path": "cola/libavoid/tests/inlineOverlap11.cpp",
    "content": "// From endpointOverlap.cpp\r\n#include \"libavoid/libavoid.h\"\r\n#include <sstream>\r\n\r\nextern \"C\" int main(void)\r\n{\r\n\t// The contents of this function can be replaced by the automatically generated test code from the debug svg file\r\n\tAvoid::ConnEnd end1_0;\r\n\tAvoid::ConnEnd end2_0;\r\n\tAvoid::Polygon poly0;\r\n\tAvoid::Router * router0 = new Avoid::Router(Avoid::OrthogonalRouting);\r\n\tAvoid::HyperedgeNewAndDeletedObjectLists newanddeletedobjects_0;\r\n\tAvoid::ConnRefList::const_iterator connit_0;\r\n\tAvoid::JunctionRefList::const_iterator junctionit_0;\r\n\trouter0->setTransactionUse(true);\r\n\trouter0->setRoutingPenalty(Avoid::segmentPenalty);\r\n\trouter0->setRoutingParameter(Avoid::portDirectionPenalty, 100);\r\n\trouter0->setRoutingParameter(Avoid::idealNudgingDistance, 25);\r\n\trouter0->setRoutingOption(Avoid::improveHyperedgeRoutesMovingAddingAndDeletingJunctions, true);\r\n\trouter0->setRoutingPenalty(Avoid::fixedSharedPathPenalty, 9000);\r\n\trouter0->setRoutingOption(Avoid::penaliseOrthogonalSharedPathsAtConnEnds, true);\r\n\trouter0->setRoutingParameter(Avoid::crossingPenalty);\r\n\trouter0->setRoutingOption(Avoid::performUnifyingNudgingPreprocessingStep, true);\r\n\tpoly0 = Avoid::Polygon(4);\r\n\tpoly0.setPoint(0, Avoid::Point(50410, 50115));\r\n\tpoly0.setPoint(1, Avoid::Point(50410, 51860));\r\n\tpoly0.setPoint(2, Avoid::Point(50050, 51860));\r\n\tpoly0.setPoint(3, Avoid::Point(50050, 50115));\r\n\tAvoid::ShapeRef * shape0_288069558 = new Avoid::ShapeRef(router0, poly0, 288069558);\r\n\tAvoid::ShapeConnectionPin * pin0_288069558_0 = new Avoid::ShapeConnectionPin(shape0_288069558, 1, 0, 85, false, 10, 4);\r\n\tpin0_288069558_0->setExclusive(true);\r\n\tAvoid::ShapeConnectionPin * pin0_288069558_1 = new Avoid::ShapeConnectionPin(shape0_288069558, 2, 0, 160, false, 10, 4);\r\n\tpin0_288069558_1->setExclusive(true);\r\n\tAvoid::ShapeConnectionPin * pin0_288069558_2 = new Avoid::ShapeConnectionPin(shape0_288069558, 3, 0, 235, false, 10, 4);\r\n\tpin0_288069558_2->setExclusive(true);\r\n\tAvoid::ShapeConnectionPin * pin0_288069558_3 = new Avoid::ShapeConnectionPin(shape0_288069558, 4, 0, 310, false, 10, 4);\r\n\tpin0_288069558_3->setExclusive(true);\r\n\tAvoid::ShapeConnectionPin * pin0_288069558_4 = new Avoid::ShapeConnectionPin(shape0_288069558, 5, 0, 385, false, 10, 4);\r\n\tpin0_288069558_4->setExclusive(true);\r\n\tAvoid::ShapeConnectionPin * pin0_288069558_5 = new Avoid::ShapeConnectionPin(shape0_288069558, 6, 0, 460, false, 10, 4);\r\n\tpin0_288069558_5->setExclusive(true);\r\n\tAvoid::ShapeConnectionPin * pin0_288069558_6 = new Avoid::ShapeConnectionPin(shape0_288069558, 7, 0, 535, false, 10, 4);\r\n\tpin0_288069558_6->setExclusive(true);\r\n\tAvoid::ShapeConnectionPin * pin0_288069558_7 = new Avoid::ShapeConnectionPin(shape0_288069558, 8, 0, 610, false, 10, 4);\r\n\tpin0_288069558_7->setExclusive(true);\r\n\tAvoid::ShapeConnectionPin * pin0_288069558_8 = new Avoid::ShapeConnectionPin(shape0_288069558, 9, 0, 685, false, 10, 4);\r\n\tpin0_288069558_8->setExclusive(true);\r\n\tAvoid::ShapeConnectionPin * pin0_288069558_9 = new Avoid::ShapeConnectionPin(shape0_288069558, 10, 0, 760, false, 10, 4);\r\n\tpin0_288069558_9->setExclusive(true);\r\n\tAvoid::ShapeConnectionPin * pin0_288069558_10 = new Avoid::ShapeConnectionPin(shape0_288069558, 11, 0, 835, false, 10, 4);\r\n\tpin0_288069558_10->setExclusive(true);\r\n\tAvoid::ShapeConnectionPin * pin0_288069558_11 = new Avoid::ShapeConnectionPin(shape0_288069558, 12, 0, 910, false, 10, 4);\r\n\tpin0_288069558_11->setExclusive(true);\r\n\tAvoid::ShapeConnectionPin * pin0_288069558_12 = new Avoid::ShapeConnectionPin(shape0_288069558, 13, 0, 985, false, 10, 4);\r\n\tpin0_288069558_12->setExclusive(true);\r\n\tAvoid::ShapeConnectionPin * pin0_288069558_13 = new Avoid::ShapeConnectionPin(shape0_288069558, 14, 0, 1060, false, 10, 4);\r\n\tpin0_288069558_13->setExclusive(true);\r\n\tAvoid::ShapeConnectionPin * pin0_288069558_14 = new Avoid::ShapeConnectionPin(shape0_288069558, 15, 0, 1135, false, 10, 4);\r\n\tpin0_288069558_14->setExclusive(true);\r\n\tAvoid::ShapeConnectionPin * pin0_288069558_15 = new Avoid::ShapeConnectionPin(shape0_288069558, 16, 0, 1210, false, 10, 4);\r\n\tpin0_288069558_15->setExclusive(true);\r\n\tAvoid::ShapeConnectionPin * pin0_288069558_16 = new Avoid::ShapeConnectionPin(shape0_288069558, 17, 0, 1285, false, 10, 4);\r\n\tpin0_288069558_16->setExclusive(true);\r\n\tAvoid::ShapeConnectionPin * pin0_288069558_17 = new Avoid::ShapeConnectionPin(shape0_288069558, 18, 0, 1360, false, 10, 4);\r\n\tpin0_288069558_17->setExclusive(true);\r\n\tAvoid::ShapeConnectionPin * pin0_288069558_18 = new Avoid::ShapeConnectionPin(shape0_288069558, 19, 0, 1435, false, 10, 4);\r\n\tpin0_288069558_18->setExclusive(true);\r\n\tAvoid::ShapeConnectionPin * pin0_288069558_19 = new Avoid::ShapeConnectionPin(shape0_288069558, 20, 0, 1510, false, 10, 4);\r\n\tpin0_288069558_19->setExclusive(true);\r\n\tAvoid::ShapeConnectionPin * pin0_288069558_20 = new Avoid::ShapeConnectionPin(shape0_288069558, 21, 0, 1585, false, 10, 4);\r\n\tpin0_288069558_20->setExclusive(true);\r\n\tAvoid::ShapeConnectionPin * pin0_288069558_21 = new Avoid::ShapeConnectionPin(shape0_288069558, 22, 0, 1660, false, 10, 4);\r\n\tpin0_288069558_21->setExclusive(true);\r\n\tAvoid::ShapeConnectionPin * pin0_288069558_22 = new Avoid::ShapeConnectionPin(shape0_288069558, 23, 350, 85, false, 10, 8);\r\n\tpin0_288069558_22->setExclusive(true);\r\n\tAvoid::ShapeConnectionPin * pin0_288069558_23 = new Avoid::ShapeConnectionPin(shape0_288069558, 24, 350, 160, false, 10, 8);\r\n\tpin0_288069558_23->setExclusive(true);\r\n\tAvoid::ShapeConnectionPin * pin0_288069558_24 = new Avoid::ShapeConnectionPin(shape0_288069558, 25, 350, 235, false, 10, 8);\r\n\tpin0_288069558_24->setExclusive(true);\r\n\tAvoid::ShapeConnectionPin * pin0_288069558_25 = new Avoid::ShapeConnectionPin(shape0_288069558, 26, 350, 310, false, 10, 8);\r\n\tpin0_288069558_25->setExclusive(true);\r\n\tAvoid::ShapeConnectionPin * pin0_288069558_26 = new Avoid::ShapeConnectionPin(shape0_288069558, 27, 350, 385, false, 10, 8);\r\n\tpin0_288069558_26->setExclusive(true);\r\n\tAvoid::ShapeConnectionPin * pin0_288069558_27 = new Avoid::ShapeConnectionPin(shape0_288069558, 28, 350, 460, false, 10, 8);\r\n\tpin0_288069558_27->setExclusive(true);\r\n\tAvoid::ShapeConnectionPin * pin0_288069558_28 = new Avoid::ShapeConnectionPin(shape0_288069558, 29, 350, 535, false, 10, 8);\r\n\tpin0_288069558_28->setExclusive(true);\r\n\tAvoid::ShapeConnectionPin * pin0_288069558_29 = new Avoid::ShapeConnectionPin(shape0_288069558, 30, 350, 610, false, 10, 8);\r\n\tpin0_288069558_29->setExclusive(true);\r\n\tAvoid::ShapeConnectionPin * pin0_288069558_30 = new Avoid::ShapeConnectionPin(shape0_288069558, 31, 350, 685, false, 10, 8);\r\n\tpin0_288069558_30->setExclusive(true);\r\n\tAvoid::ShapeConnectionPin * pin0_288069558_31 = new Avoid::ShapeConnectionPin(shape0_288069558, 32, 350, 760, false, 10, 8);\r\n\tpin0_288069558_31->setExclusive(true);\r\n\tAvoid::ShapeConnectionPin * pin0_288069558_32 = new Avoid::ShapeConnectionPin(shape0_288069558, 33, 350, 835, false, 10, 8);\r\n\tpin0_288069558_32->setExclusive(true);\r\n\tAvoid::ShapeConnectionPin * pin0_288069558_33 = new Avoid::ShapeConnectionPin(shape0_288069558, 34, 350, 910, false, 10, 8);\r\n\tpin0_288069558_33->setExclusive(true);\r\n\tAvoid::ShapeConnectionPin * pin0_288069558_34 = new Avoid::ShapeConnectionPin(shape0_288069558, 35, 350, 985, false, 10, 8);\r\n\tpin0_288069558_34->setExclusive(true);\r\n\tAvoid::ShapeConnectionPin * pin0_288069558_35 = new Avoid::ShapeConnectionPin(shape0_288069558, 36, 350, 1060, false, 10, 8);\r\n\tpin0_288069558_35->setExclusive(true);\r\n\tAvoid::ShapeConnectionPin * pin0_288069558_36 = new Avoid::ShapeConnectionPin(shape0_288069558, 37, 350, 1135, false, 10, 8);\r\n\tpin0_288069558_36->setExclusive(true);\r\n\tAvoid::ShapeConnectionPin * pin0_288069558_37 = new Avoid::ShapeConnectionPin(shape0_288069558, 38, 350, 1210, false, 10, 8);\r\n\tpin0_288069558_37->setExclusive(true);\r\n\tAvoid::ShapeConnectionPin * pin0_288069558_38 = new Avoid::ShapeConnectionPin(shape0_288069558, 39, 350, 1285, false, 10, 8);\r\n\tpin0_288069558_38->setExclusive(true);\r\n\tAvoid::ShapeConnectionPin * pin0_288069558_39 = new Avoid::ShapeConnectionPin(shape0_288069558, 40, 350, 1360, false, 10, 8);\r\n\tpin0_288069558_39->setExclusive(true);\r\n\tAvoid::ShapeConnectionPin * pin0_288069558_40 = new Avoid::ShapeConnectionPin(shape0_288069558, 41, 350, 1435, false, 10, 8);\r\n\tpin0_288069558_40->setExclusive(true);\r\n\tAvoid::ShapeConnectionPin * pin0_288069558_41 = new Avoid::ShapeConnectionPin(shape0_288069558, 42, 350, 1510, false, 10, 8);\r\n\tpin0_288069558_41->setExclusive(true);\r\n\tAvoid::ShapeConnectionPin * pin0_288069558_42 = new Avoid::ShapeConnectionPin(shape0_288069558, 43, 350, 1585, false, 10, 8);\r\n\tpin0_288069558_42->setExclusive(true);\r\n\tpoly0 = Avoid::Polygon(4);\r\n\tpoly0.setPoint(0, Avoid::Point(49500, 50920));\r\n\tpoly0.setPoint(1, Avoid::Point(49500, 50980));\r\n\tpoly0.setPoint(2, Avoid::Point(49340, 50980));\r\n\tpoly0.setPoint(3, Avoid::Point(49340, 50920));\r\n\tAvoid::ShapeRef * shape0_59726400 = new Avoid::ShapeRef(router0, poly0, 59726400);\r\n\tAvoid::ShapeConnectionPin * pin0_59726400_0 = new Avoid::ShapeConnectionPin(shape0_59726400, 1, 10, 30, false, 10, 4);\r\n\tpin0_59726400_0->setExclusive(true);\r\n\tAvoid::ShapeConnectionPin * pin0_59726400_1 = new Avoid::ShapeConnectionPin(shape0_59726400, 2, -1, 30, false, 10, 8);\r\n\tpin0_59726400_1->setExclusive(true);\r\n\tpoly0 = Avoid::Polygon(4);\r\n\tpoly0.setPoint(0, Avoid::Point(49500, 50845));\r\n\tpoly0.setPoint(1, Avoid::Point(49500, 50905));\r\n\tpoly0.setPoint(2, Avoid::Point(49340, 50905));\r\n\tpoly0.setPoint(3, Avoid::Point(49340, 50845));\r\n\tAvoid::ShapeRef * shape0_574489840 = new Avoid::ShapeRef(router0, poly0, 574489840);\r\n\tAvoid::ShapeConnectionPin * pin0_574489840_0 = new Avoid::ShapeConnectionPin(shape0_574489840, 1, 10, 30, false, 10, 4);\r\n\tpin0_574489840_0->setExclusive(true);\r\n\tAvoid::ShapeConnectionPin * pin0_574489840_1 = new Avoid::ShapeConnectionPin(shape0_574489840, 2, -1, 30, false, 10, 8);\r\n\tpin0_574489840_1->setExclusive(true);\r\n\tpoly0 = Avoid::Polygon(4);\r\n\tpoly0.setPoint(0, Avoid::Point(49500, 50695));\r\n\tpoly0.setPoint(1, Avoid::Point(49500, 50755));\r\n\tpoly0.setPoint(2, Avoid::Point(49340, 50755));\r\n\tpoly0.setPoint(3, Avoid::Point(49340, 50695));\r\n\tAvoid::ShapeRef * shape0_482418284 = new Avoid::ShapeRef(router0, poly0, 482418284);\r\n\tAvoid::ShapeConnectionPin * pin0_482418284_0 = new Avoid::ShapeConnectionPin(shape0_482418284, 1, 10, 30, false, 10, 4);\r\n\tpin0_482418284_0->setExclusive(true);\r\n\tAvoid::ShapeConnectionPin * pin0_482418284_1 = new Avoid::ShapeConnectionPin(shape0_482418284, 2, -1, 30, false, 10, 8);\r\n\tpin0_482418284_1->setExclusive(true);\r\n\tpoly0 = Avoid::Polygon(4);\r\n\tpoly0.setPoint(0, Avoid::Point(49500, 50770));\r\n\tpoly0.setPoint(1, Avoid::Point(49500, 50830));\r\n\tpoly0.setPoint(2, Avoid::Point(49340, 50830));\r\n\tpoly0.setPoint(3, Avoid::Point(49340, 50770));\r\n\tAvoid::ShapeRef * shape0_100128936 = new Avoid::ShapeRef(router0, poly0, 100128936);\r\n\tAvoid::ShapeConnectionPin * pin0_100128936_0 = new Avoid::ShapeConnectionPin(shape0_100128936, 1, 10, 30, false, 10, 4);\r\n\tpin0_100128936_0->setExclusive(true);\r\n\tAvoid::ShapeConnectionPin * pin0_100128936_1 = new Avoid::ShapeConnectionPin(shape0_100128936, 2, -1, 30, false, 10, 8);\r\n\tpin0_100128936_1->setExclusive(true);\r\n\tend1_0 = Avoid::ConnEnd(shape0_100128936, 2);\r\n\tend2_0 = Avoid::ConnEnd(shape0_288069558, 12);\r\n\tnew Avoid::ConnRef(router0, end1_0, end2_0, 105958336);\r\n\tend1_0 = Avoid::ConnEnd(shape0_574489840, 2);\r\n\tend2_0 = Avoid::ConnEnd(shape0_288069558, 13);\r\n\tnew Avoid::ConnRef(router0, end1_0, end2_0, 377294085);\r\n\tend1_0 = Avoid::ConnEnd(shape0_59726400, 2);\r\n\tend2_0 = Avoid::ConnEnd(shape0_288069558, 14);\r\n\tnew Avoid::ConnRef(router0, end1_0, end2_0, 870686312);\r\n\trouter0->processTransaction();\r\n\r\n\tpoly0 = Avoid::Polygon(4);\r\n\tpoly0.setPoint(0, Avoid::Point(49518, 50707));\r\n\tpoly0.setPoint(1, Avoid::Point(49518, 50743));\r\n\tpoly0.setPoint(2, Avoid::Point(49482, 50743));\r\n\tpoly0.setPoint(3, Avoid::Point(49482, 50707));\r\n\tAvoid::ShapeRef * shape0_91346832 = new Avoid::ShapeRef(router0, poly0, 91346832);\r\n\tAvoid::ShapeConnectionPin * pin0_91346832_0 = new Avoid::ShapeConnectionPin(shape0_91346832, 2147483646, 18, 18, false, 0, 15);\r\n\tpin0_91346832_0->setExclusive(false);\r\n\tend1_0 = Avoid::ConnEnd(shape0_91346832, Avoid::CONNECTIONPIN_CENTRE);\r\n\tend2_0 = Avoid::ConnEnd(shape0_288069558, 11);\r\n\tnew Avoid::ConnRef(router0, end1_0, end2_0, 214417907);\r\n\trouter0->processTransaction();\r\n\r\n\trouter0->outputDiagram(\"output/inlineOverlap11\");\r\n\r\n\tbool optimisedForConnectorType = false;\r\n\tint crossings = router0->existsCrossings(optimisedForConnectorType);\r\n\tdelete router0;\r\n\treturn (crossings > 0) ? 1 : 0;\r\n}\r\n\r\n"
  },
  {
    "path": "cola/libavoid/tests/inlineShapes.cpp",
    "content": "#include \"libavoid/libavoid.h\"\nusing namespace Avoid;\nint main(void) {\n    Router *router = new Router(OrthogonalRouting);\n    router->setRoutingPenalty((PenaltyType)0, 50);\n    router->setRoutingPenalty((PenaltyType)1, 0);\n    router->setRoutingPenalty((PenaltyType)2, 0);\n    router->setRoutingPenalty((PenaltyType)3, 4000);\n    router->setRoutingPenalty((PenaltyType)4, 0);\n\n    Polygon poly1(4);\n    poly1.ps[0] = Point(52, 188);\n    poly1.ps[1] = Point(52, 292);\n    poly1.ps[2] = Point(-52, 292);\n    poly1.ps[3] = Point(-52, 188);\n    ShapeRef *shapeRef1 = new ShapeRef(router, poly1, 1);\n    new ShapeConnectionPin(shapeRef1, 544, 0.5, 0.5, true, 10, (ConnDirFlags) 0);\n\n    Polygon poly2(4);\n    poly2.ps[0] = Point(52, -52);\n    poly2.ps[1] = Point(52, 52);\n    poly2.ps[2] = Point(-52, 52);\n    poly2.ps[3] = Point(-52, -52);\n    ShapeRef *shapeRef2 = new ShapeRef(router, poly2, 2);\n    new ShapeConnectionPin(shapeRef2, 544, 0.5, 0.5, true, 10, (ConnDirFlags) 0);\n\n    Polygon poly3(4);\n    poly3.ps[0] = Point(52, 428);\n    poly3.ps[1] = Point(52, 532);\n    poly3.ps[2] = Point(-52, 532);\n    poly3.ps[3] = Point(-52, 428);\n    ShapeRef *shapeRef3 = new ShapeRef(router, poly3, 3);\n    new ShapeConnectionPin(shapeRef3, 544, 0.5, 0.5, true, 10, (ConnDirFlags) 0);\n\n    Polygon poly4(4);\n    poly4.ps[0] = Point(52, 68);\n    poly4.ps[1] = Point(52, 172);\n    poly4.ps[2] = Point(-52, 172);\n    poly4.ps[3] = Point(-52, 68);\n    ShapeRef *shapeRef4 = new ShapeRef(router, poly4, 4);\n    new ShapeConnectionPin(shapeRef4, 544, 0.5, 0.5, true, 10, (ConnDirFlags) 0);\n\n    Polygon poly5(4);\n    poly5.ps[0] = Point(52, 308);\n    poly5.ps[1] = Point(52, 412);\n    poly5.ps[2] = Point(-52, 412);\n    poly5.ps[3] = Point(-52, 308);\n    ShapeRef *shapeRef5 = new ShapeRef(router, poly5, 5);\n    new ShapeConnectionPin(shapeRef5, 544, 0.5, 0.5, true, 10, (ConnDirFlags) 0);\n\n    ConnRef *connRef6 = new ConnRef(router, 6);\n    ConnEnd srcPt6(shapeRef2, 544);\n    connRef6->setSourceEndpoint(srcPt6);\n    ConnEnd dstPt6(shapeRef5, 544);\n    connRef6->setDestEndpoint(dstPt6);\n    connRef6->setRoutingType((ConnType)2);\n\n    ConnRef *connRef7 = new ConnRef(router, 7);\n    ConnEnd srcPt7(shapeRef5, 544);\n    connRef7->setSourceEndpoint(srcPt7);\n    ConnEnd dstPt7(shapeRef4, 544);\n    connRef7->setDestEndpoint(dstPt7);\n    connRef7->setRoutingType((ConnType)2);\n\n    ConnRef *connRef8 = new ConnRef(router, 8);\n    ConnEnd srcPt8(shapeRef1, 544);\n    connRef8->setSourceEndpoint(srcPt8);\n    ConnEnd dstPt8(shapeRef5, 544);\n    connRef8->setDestEndpoint(dstPt8);\n    connRef8->setRoutingType((ConnType)2);\n\n    ConnRef *connRef9 = new ConnRef(router, 9);\n    ConnEnd srcPt9(shapeRef2, 544);\n    connRef9->setSourceEndpoint(srcPt9);\n    ConnEnd dstPt9(shapeRef3, 544);\n    connRef9->setDestEndpoint(dstPt9);\n    connRef9->setRoutingType((ConnType)2);\n\n    ConnRef *connRef10 = new ConnRef(router, 10);\n    ConnEnd srcPt10(shapeRef3, 544);\n    connRef10->setSourceEndpoint(srcPt10);\n    ConnEnd dstPt10(shapeRef4, 544);\n    connRef10->setDestEndpoint(dstPt10);\n    connRef10->setRoutingType((ConnType)2);\n\n    ConnRef *connRef11 = new ConnRef(router, 11);\n    ConnEnd srcPt11(shapeRef1, 544);\n    connRef11->setSourceEndpoint(srcPt11);\n    ConnEnd dstPt11(shapeRef3, 544);\n    connRef11->setDestEndpoint(dstPt11);\n    connRef11->setRoutingType((ConnType)2);\n    \n    router->processTransaction();\n    router->outputDiagram(\"output/inlineShapes\");\n    delete router;\n    return 0;\n};\n"
  },
  {
    "path": "cola/libavoid/tests/inlineoverlap01.cpp",
    "content": "#include \"libavoid/libavoid.h\"\nusing namespace Avoid;\nint main(void) {\n    Router *router = new Router(OrthogonalRouting);\n    router->setRoutingPenalty(segmentPenalty);\n    router->setRoutingPenalty(fixedSharedPathPenalty);\n    router->setRoutingParameter(idealNudgingDistance, 20);\n    Rectangle rect335855988(Point(51140, 50190), Point(51510, 50885));\n    new ShapeRef(router, rect335855988, 335855988);\n    Rectangle rect548374163(Point(51915, 50415), Point(52285, 50885));\n    new ShapeRef(router, rect548374163, 548374163);\n    Rectangle rect942733064(Point(51771, 50790), Point(51829, 50885));\n    new ShapeRef(router, rect942733064, 942733064);\n    ConnEnd srcPt100850179(Point(51925, 50800), 4);\n    ConnEnd dstPt100850179(Point(51500, 50650), 8);\n    new ConnRef(router, srcPt100850179, dstPt100850179, 100850179);\n    ConnEnd srcPt240732432(Point(51925, 50650), 4);\n    ConnEnd dstPt240732432(Point(51800, 50800), 1);\n    new ConnRef(router, srcPt240732432, dstPt240732432, 240732432);\n    router->processTransaction();\n    router->outputDiagram(\"output/inlineoverlap01\");\n    bool overlap = router->existsOrthogonalTouchingPaths();\n    delete router;\n    return (overlap) ? 1 : 0;\n};\n"
  },
  {
    "path": "cola/libavoid/tests/inlineoverlap02.cpp",
    "content": "// From p-overlap bug.\n#include \"libavoid/libavoid.h\"\nusing namespace Avoid;\nint main(void) {\n    Router *router = new Router(\n            PolyLineRouting | OrthogonalRouting);\n    router->setRoutingPenalty((PenaltyType)0, 50);\n    router->setRoutingPenalty((PenaltyType)1, 0);\n    router->setRoutingPenalty((PenaltyType)2, 0);\n    router->setRoutingPenalty((PenaltyType)3, 4000);\n    router->setRoutingPenalty((PenaltyType)4, 110);\n    router->setRoutingParameter(idealNudgingDistance, 25);\n\n    Polygon poly548374163(4);\n    poly548374163.ps[0] = Point(52285, 50415);\n    poly548374163.ps[1] = Point(52285, 50885);\n    poly548374163.ps[2] = Point(51915, 50885);\n    poly548374163.ps[3] = Point(51915, 50415);\n    new ShapeRef(router, poly548374163, 548374163);\n\n    Polygon poly942733064(4);\n    poly942733064.ps[0] = Point(51829, 50800);\n    poly942733064.ps[1] = Point(51829, 50885);\n    poly942733064.ps[2] = Point(51771, 50885);\n    poly942733064.ps[3] = Point(51771, 50800);\n    new ShapeRef(router, poly942733064, 942733064);\n\n    Polygon poly335855988(4);\n    poly335855988.ps[0] = Point(51510, 50190);\n    poly335855988.ps[1] = Point(51510, 50885);\n    poly335855988.ps[2] = Point(51140, 50885);\n    poly335855988.ps[3] = Point(51140, 50190);\n    new ShapeRef(router, poly335855988, 335855988);\n\n    ConnRef *connRef240732432 = new ConnRef(router, 240732432);\n    ConnEnd srcPt240732432(Point(51935, 50650), 4);\n    connRef240732432->setSourceEndpoint(srcPt240732432);\n    ConnEnd dstPt240732432(Point(51800, 50810), 1);\n    connRef240732432->setDestEndpoint(dstPt240732432);\n    connRef240732432->setRoutingType((ConnType)2);\n\n    ConnRef *connRef148374725 = new ConnRef(router, 148374725);\n    ConnEnd srcPt148374725(Point(51935, 50500), 4);\n    connRef148374725->setSourceEndpoint(srcPt148374725);\n    ConnEnd dstPt148374725(Point(51490, 50800), 8);\n    connRef148374725->setDestEndpoint(dstPt148374725);\n    connRef148374725->setRoutingType((ConnType)2);\n\n    ConnRef *connRef100850179 = new ConnRef(router, 100850179);\n    ConnEnd srcPt100850179(Point(51935, 50800), 4);\n    connRef100850179->setSourceEndpoint(srcPt100850179);\n    ConnEnd dstPt100850179(Point(51490, 50650), 8);\n    connRef100850179->setDestEndpoint(dstPt100850179);\n    connRef100850179->setRoutingType((ConnType)2);\n\n    router->processTransaction();\n    router->outputDiagram(\"output/inlineoverlap02\");\n    bool overlap = router->existsOrthogonalFixedSegmentOverlap();\n    delete router;\n    return (overlap) ? 1 : 0;\n};\n\n"
  },
  {
    "path": "cola/libavoid/tests/inlineoverlap03.cpp",
    "content": "// From diffport-pins-overlap-reduced_libavoid-debug_4 bug.\n#include \"libavoid/libavoid.h\"\nusing namespace Avoid;\nint main(void) {\n    Router *router = new Router(\n            PolyLineRouting | OrthogonalRouting);\n    router->setRoutingPenalty((PenaltyType)0, 50);\n    router->setRoutingPenalty((PenaltyType)1, 0);\n    router->setRoutingPenalty((PenaltyType)2, 0);\n    router->setRoutingPenalty((PenaltyType)3, 4000);\n    router->setRoutingPenalty((PenaltyType)4, 110);\n    router->setRoutingParameter(idealNudgingDistance, 25);\n\n    Polygon poly421433292(4);\n    poly421433292.ps[0] = Point(51335, 50215);\n    poly421433292.ps[1] = Point(51335, 50385);\n    poly421433292.ps[2] = Point(51065, 50385);\n    poly421433292.ps[3] = Point(51065, 50215);\n    new ShapeRef(router, poly421433292, 421433292);\n\n    Polygon poly174734866(4);\n    poly174734866.ps[0] = Point(51335, 50490);\n    poly174734866.ps[1] = Point(51335, 50660);\n    poly174734866.ps[2] = Point(51065, 50660);\n    poly174734866.ps[3] = Point(51065, 50490);\n    new ShapeRef(router, poly174734866, 174734866);\n\n    Polygon poly564884274(4);\n    poly564884274.ps[0] = Point(50635, 50500);\n    poly564884274.ps[1] = Point(50635, 50583);\n    poly564884274.ps[2] = Point(50515, 50583);\n    poly564884274.ps[3] = Point(50515, 50500);\n    new ShapeRef(router, poly564884274, 564884274);\n\n    ConnRef *connRef103176525 = new ConnRef(router, 103176525);\n    ConnEnd srcPt103176525(Point(51085, 50550), 4);\n    connRef103176525->setSourceEndpoint(srcPt103176525);\n    ConnEnd dstPt103176525(Point(50575, 50510), 1);\n    connRef103176525->setDestEndpoint(dstPt103176525);\n    connRef103176525->setRoutingType((ConnType)2);\n\n    ConnRef *connRef223495632 = new ConnRef(router, 223495632);\n    ConnEnd srcPt223495632(Point(51085, 50325), 4);\n    connRef223495632->setSourceEndpoint(srcPt223495632);\n    ConnEnd dstPt223495632(Point(50575, 50550), 14);\n    connRef223495632->setDestEndpoint(dstPt223495632);\n    connRef223495632->setRoutingType((ConnType)2);\n\n    router->processTransaction();\n    router->outputDiagram(\"output/inlineoverlap03\");\n    bool overlap = router->existsOrthogonalFixedSegmentOverlap();\n    delete router;\n    return (overlap) ? 1 : 0;\n};\n\n"
  },
  {
    "path": "cola/libavoid/tests/inlineoverlap04.cpp",
    "content": "// From Routing_2a_libavoid-debug.\n#include \"libavoid/libavoid.h\"\nusing namespace Avoid;\nint main(void) {\n    Router *router = new Router(\n            PolyLineRouting | OrthogonalRouting);\n    router->setRoutingPenalty((PenaltyType)0, 50);\n    router->setRoutingPenalty((PenaltyType)1, 0);\n    router->setRoutingPenalty((PenaltyType)2, 0);\n    router->setRoutingPenalty((PenaltyType)3, 4000);\n    router->setRoutingPenalty((PenaltyType)4, 110);\n    router->setRoutingParameter(idealNudgingDistance, 25);\n\n    Polygon poly170253204(4);\n    poly170253204.ps[0] = Point(50450, 50190);\n    poly170253204.ps[1] = Point(50450, 50360);\n    poly170253204.ps[2] = Point(50265, 50360);\n    poly170253204.ps[3] = Point(50265, 50190);\n    new ShapeRef(router, poly170253204, 170253204);\n\n    Polygon poly914700248(4);\n    poly914700248.ps[0] = Point(50800, 50390);\n    poly914700248.ps[1] = Point(50800, 50560);\n    poly914700248.ps[2] = Point(50615, 50560);\n    poly914700248.ps[3] = Point(50615, 50390);\n    new ShapeRef(router, poly914700248, 914700248);\n\n    Polygon poly285103539(4);\n    poly285103539.ps[0] = Point(51385, 50390);\n    poly285103539.ps[1] = Point(51385, 50560);\n    poly285103539.ps[2] = Point(51200, 50560);\n    poly285103539.ps[3] = Point(51200, 50390);\n    new ShapeRef(router, poly285103539, 285103539);\n\n    Polygon poly252459412(4);\n    poly252459412.ps[0] = Point(51360, 50190);\n    poly252459412.ps[1] = Point(51360, 50360);\n    poly252459412.ps[2] = Point(51175, 50360);\n    poly252459412.ps[3] = Point(51175, 50190);\n    new ShapeRef(router, poly252459412, 252459412);\n\n    ConnRef *connRef573390636 = new ConnRef(router, 573390636);\n    ConnEnd srcPt573390636(Point(50790, 50475), 8);\n    connRef573390636->setSourceEndpoint(srcPt573390636);\n    ConnEnd dstPt573390636(Point(51185, 50275), 4);\n    connRef573390636->setDestEndpoint(dstPt573390636);\n    connRef573390636->setRoutingType((ConnType)2);\n\n    ConnRef *connRef214207623 = new ConnRef(router, 214207623);\n    ConnEnd srcPt214207623(Point(51210, 50475), 4);\n    connRef214207623->setSourceEndpoint(srcPt214207623);\n    ConnEnd dstPt214207623(Point(50440, 50275), 8);\n    connRef214207623->setDestEndpoint(dstPt214207623);\n    connRef214207623->setRoutingType((ConnType)2);\n\n    router->processTransaction();\n    router->outputDiagram(\"output/inlineoverlap04\");\n    bool overlap = router->existsOrthogonalFixedSegmentOverlap();\n    delete router;\n    return (overlap) ? 1 : 0;\n};\n\n"
  },
  {
    "path": "cola/libavoid/tests/inlineoverlap05.cpp",
    "content": "// From Diplexer-reduced2_libavoid-debug.\n#include \"libavoid/libavoid.h\"\nusing namespace Avoid;\nint main(void) {\n    Router *router = new Router(\n            PolyLineRouting | OrthogonalRouting);\n    router->setRoutingPenalty((PenaltyType)0, 50);\n    router->setRoutingPenalty((PenaltyType)1, 0);\n    router->setRoutingPenalty((PenaltyType)2, 0);\n    router->setRoutingPenalty((PenaltyType)3, 4000);\n    router->setRoutingPenalty((PenaltyType)4, 110);\n    router->setRoutingParameter(idealNudgingDistance, 25);\n\n    Polygon poly231469760(4);\n    poly231469760.ps[0] = Point(6385, 9390);\n    poly231469760.ps[1] = Point(6385, 9560);\n    poly231469760.ps[2] = Point(6200, 9560);\n    poly231469760.ps[3] = Point(6200, 9390);\n    new ShapeRef(router, poly231469760, 231469760);\n\n    Polygon poly7136376(4);\n    poly7136376.ps[0] = Point(6560, 9290);\n    poly7136376.ps[1] = Point(6560, 9460);\n    poly7136376.ps[2] = Point(6375, 9460);\n    poly7136376.ps[3] = Point(6375, 9290);\n    new ShapeRef(router, poly7136376, 7136376);\n\n    Polygon poly215821749(4);\n    poly215821749.ps[0] = Point(6510, 9540);\n    poly215821749.ps[1] = Point(6510, 9710);\n    poly215821749.ps[2] = Point(6325, 9710);\n    poly215821749.ps[3] = Point(6325, 9540);\n    new ShapeRef(router, poly215821749, 215821749);\n\n    Polygon poly83086994(4);\n    poly83086994.ps[0] = Point(5925, 9240);\n    poly83086994.ps[1] = Point(5925, 10085);\n    poly83086994.ps[2] = Point(5575, 10085);\n    poly83086994.ps[3] = Point(5575, 9240);\n    new ShapeRef(router, poly83086994, 83086994);\n\n    ConnRef *connRef292408794 = new ConnRef(router, 292408794);\n    ConnEnd srcPt292408794(Point(5915, 9625), 8);\n    connRef292408794->setSourceEndpoint(srcPt292408794);\n    ConnEnd dstPt292408794(Point(6210, 9475), 4);\n    connRef292408794->setDestEndpoint(dstPt292408794);\n    connRef292408794->setRoutingType((ConnType)2);\n\n    ConnRef *connRef40917776 = new ConnRef(router, 40917776);\n    ConnEnd srcPt40917776(Point(5915, 9550), 8);\n    connRef40917776->setSourceEndpoint(srcPt40917776);\n    ConnEnd dstPt40917776(Point(6385, 9375), 4);\n    connRef40917776->setDestEndpoint(dstPt40917776);\n    connRef40917776->setRoutingType((ConnType)2);\n\n    ConnRef *connRef629564142 = new ConnRef(router, 629564142);\n    ConnEnd srcPt629564142(Point(5915, 9475), 8);\n    connRef629564142->setSourceEndpoint(srcPt629564142);\n    ConnEnd dstPt629564142(Point(6335, 9625), 4);\n    connRef629564142->setDestEndpoint(dstPt629564142);\n    connRef629564142->setRoutingType((ConnType)2);\n\n    router->processTransaction();\n    router->outputDiagram(\"output/inlineoverlap05\");\n    bool overlap = router->existsOrthogonalFixedSegmentOverlap();\n    delete router;\n    return (overlap) ? 1 : 0;\n};\n\n"
  },
  {
    "path": "cola/libavoid/tests/inlineoverlap06.cpp",
    "content": "// From Routing_2a-broken_libavoid-debug.\n#include \"libavoid/libavoid.h\"\nusing namespace Avoid;\nint main(void) {\n    Router *router = new Router(\n            PolyLineRouting | OrthogonalRouting);\n    router->setRoutingPenalty((PenaltyType)0, 50);\n    router->setRoutingPenalty((PenaltyType)1, 0);\n    router->setRoutingPenalty((PenaltyType)2, 0);\n    router->setRoutingPenalty((PenaltyType)3, 4000);\n    router->setRoutingPenalty((PenaltyType)4, 210);\n    router->setRoutingParameter(idealNudgingDistance, 25);\n\n    Polygon poly170253204(4);\n    poly170253204.ps[0] = Point(50450, 50190);\n    poly170253204.ps[1] = Point(50450, 50360);\n    poly170253204.ps[2] = Point(50265, 50360);\n    poly170253204.ps[3] = Point(50265, 50190);\n    new ShapeRef(router, poly170253204, 170253204);\n\n    Polygon poly285103539(4);\n    poly285103539.ps[0] = Point(51385, 50390);\n    poly285103539.ps[1] = Point(51385, 50560);\n    poly285103539.ps[2] = Point(51200, 50560);\n    poly285103539.ps[3] = Point(51200, 50390);\n    new ShapeRef(router, poly285103539, 285103539);\n\n    Polygon poly252459412(4);\n    poly252459412.ps[0] = Point(51360, 50190);\n    poly252459412.ps[1] = Point(51360, 50360);\n    poly252459412.ps[2] = Point(51175, 50360);\n    poly252459412.ps[3] = Point(51175, 50190);\n    new ShapeRef(router, poly252459412, 252459412);\n\n    Polygon poly914700248(4);\n    poly914700248.ps[0] = Point(50800, 50390);\n    poly914700248.ps[1] = Point(50800, 50560);\n    poly914700248.ps[2] = Point(50615, 50560);\n    poly914700248.ps[3] = Point(50615, 50390);\n    new ShapeRef(router, poly914700248, 914700248);\n\n    ConnRef *connRef214207623 = new ConnRef(router, 214207623);\n    ConnEnd srcPt214207623(Point(51210, 50475), 4);\n    connRef214207623->setSourceEndpoint(srcPt214207623);\n    ConnEnd dstPt214207623(Point(50440, 50275), 8);\n    connRef214207623->setDestEndpoint(dstPt214207623);\n    connRef214207623->setRoutingType((ConnType)2);\n\n    ConnRef *connRef573390636 = new ConnRef(router, 573390636);\n    ConnEnd srcPt573390636(Point(50790, 50475), 8);\n    connRef573390636->setSourceEndpoint(srcPt573390636);\n    ConnEnd dstPt573390636(Point(51185, 50275), 4);\n    connRef573390636->setDestEndpoint(dstPt573390636);\n    connRef573390636->setRoutingType((ConnType)2);\n\n    router->processTransaction();\n    router->outputDiagram(\"output/inlineoverlap06\");\n    bool overlap = router->existsOrthogonalFixedSegmentOverlap();\n    delete router;\n    return (overlap) ? 1 : 0;\n};\n\n"
  },
  {
    "path": "cola/libavoid/tests/inlineoverlap07.cpp",
    "content": "#include \"libavoid/libavoid.h\"\nusing namespace Avoid;\nint main(void) {\n    Router *router = new Router(\n            PolyLineRouting | OrthogonalRouting);\n    router->setRoutingPenalty((PenaltyType)0, 50);\n    router->setRoutingPenalty((PenaltyType)1, 0);\n    router->setRoutingPenalty((PenaltyType)2, 200);\n    router->setRoutingPenalty((PenaltyType)3, 4000);\n    router->setRoutingPenalty((PenaltyType)4, 110);\n    router->setRoutingPenalty((PenaltyType)5, 100);\n    router->setRoutingParameter(idealNudgingDistance, 25);\n\n    Polygon poly186982048(4);\n    poly186982048.ps[0] = Point(52660, 50490);\n    poly186982048.ps[1] = Point(52660, 50960);\n    poly186982048.ps[2] = Point(52100, 50960);\n    poly186982048.ps[3] = Point(52100, 50490);\n    new ShapeRef(router, poly186982048, 186982048);\n    \n    Polygon poly193989760(4);\n    poly193989760.ps[0] = Point(51850, 50665);\n    poly193989760.ps[1] = Point(51850, 50835);\n    poly193989760.ps[2] = Point(51590, 50835);\n    poly193989760.ps[3] = Point(51590, 50665);\n    new ShapeRef(router, poly193989760, 193989760);\n    \n    Polygon poly276825384(4);\n    poly276825384.ps[0] = Point(51825, 51040);\n    poly276825384.ps[1] = Point(51825, 51210);\n    poly276825384.ps[2] = Point(51565, 51210);\n    poly276825384.ps[3] = Point(51565, 51040);\n    new ShapeRef(router, poly276825384, 276825384);\n    \n    Polygon poly190150804(4);\n    poly190150804.ps[0] = Point(50460, 51340);\n    poly190150804.ps[1] = Point(50460, 51510);\n    poly190150804.ps[2] = Point(50290, 51510);\n    poly190150804.ps[3] = Point(50290, 51340);\n    new ShapeRef(router, poly190150804, 190150804);\n    \n    ConnRef *connRef562170592 = new ConnRef(router, 562170592);\n    ConnEnd srcPt562170592(Point(52110, 50800), 4);\n    connRef562170592->setSourceEndpoint(srcPt562170592);\n    ConnEnd dstPt562170592(Point(51815, 51100), 8);\n    connRef562170592->setDestEndpoint(dstPt562170592);\n    connRef562170592->setRoutingType((ConnType)2);\n\n    ConnRef *connRef171593006 = new ConnRef(router, 171593006);\n    ConnEnd srcPt171593006(Point(52110, 50750), 4);\n    connRef171593006->setSourceEndpoint(srcPt171593006);\n    ConnEnd dstPt171593006(Point(51840, 50725), 8);\n    connRef171593006->setDestEndpoint(dstPt171593006);\n    connRef171593006->setRoutingType((ConnType)2);\n\n    ConnRef *connRef172593160 = new ConnRef(router, 172593160);\n    ConnEnd srcPt172593160(Point(51815, 51150), 8);\n    connRef172593160->setSourceEndpoint(srcPt172593160);\n    ConnEnd dstPt172593160(Point(52110, 50900), 4);\n    connRef172593160->setDestEndpoint(dstPt172593160);\n    connRef172593160->setRoutingType((ConnType)2);\n\n    ConnRef *connRef116944564 = new ConnRef(router, 116944564);\n    ConnEnd srcPt116944564(Point(51840, 50775), 8);\n    connRef116944564->setSourceEndpoint(srcPt116944564);\n    ConnEnd dstPt116944564(Point(52110, 50850), 4);\n    connRef116944564->setDestEndpoint(dstPt116944564);\n    connRef116944564->setRoutingType((ConnType)2);\n\n    router->processTransaction();\n    router->outputDiagram(\"output/inlineoverlap07\");\n    delete router;\n    return 0;\n};\n\n"
  },
  {
    "path": "cola/libavoid/tests/inlineoverlap08.cpp",
    "content": "#include \"libavoid/libavoid.h\"\nusing namespace Avoid;\nint main(void) {\n    Router *router = new Router(\n            PolyLineRouting | OrthogonalRouting);\n    router->setRoutingParameter((RoutingParameter)0, 10);\n    router->setRoutingParameter((RoutingParameter)1, 0);\n    router->setRoutingParameter((RoutingParameter)2, 0);\n    router->setRoutingParameter((RoutingParameter)3, 4000);\n    router->setRoutingParameter((RoutingParameter)4, 400);\n    router->setRoutingParameter((RoutingParameter)5, 100);\n    router->setRoutingOption((RoutingOption)0, false);\n    router->setRoutingOption((RoutingOption)1, true);\n    router->setRoutingOption((RoutingOption)2, false);\n    router->setRoutingOption((RoutingOption)3, false);\n\n    Polygon poly1(4);\n    poly1.ps[0] = Point(99, -20);\n    poly1.ps[1] = Point(99, 0);\n    poly1.ps[2] = Point(55, 0);\n    poly1.ps[3] = Point(55, -20);\n    new ShapeRef(router, poly1, 1);\n\n    Polygon poly2(4);\n    poly2.ps[0] = Point(20, -65);\n    poly2.ps[1] = Point(20, -45);\n    poly2.ps[2] = Point(0, -45);\n    poly2.ps[3] = Point(0, -65);\n    new ShapeRef(router, poly2, 2);\n\n    Polygon poly3(4);\n    poly3.ps[0] = Point(20, -90);\n    poly3.ps[1] = Point(20, -70);\n    poly3.ps[2] = Point(0, -70);\n    poly3.ps[3] = Point(0, -90);\n    new ShapeRef(router, poly3, 3);\n\n    Polygon poly4(4);\n    poly4.ps[0] = Point(20, -115);\n    poly4.ps[1] = Point(20, -95);\n    poly4.ps[2] = Point(0, -95);\n    poly4.ps[3] = Point(0, -115);\n    new ShapeRef(router, poly4, 4);\n\n    Polygon poly5(4);\n    poly5.ps[0] = Point(20, -140);\n    poly5.ps[1] = Point(20, -120);\n    poly5.ps[2] = Point(0, -120);\n    poly5.ps[3] = Point(0, -140);\n    new ShapeRef(router, poly5, 5);\n\n    Polygon poly6(4);\n    poly6.ps[0] = Point(75, -185);\n    poly6.ps[1] = Point(75, -165);\n    poly6.ps[2] = Point(55, -165);\n    poly6.ps[3] = Point(55, -185);\n    new ShapeRef(router, poly6, 6);\n\n    Polygon poly7(4);\n    poly7.ps[0] = Point(100, -185);\n    poly7.ps[1] = Point(100, -165);\n    poly7.ps[2] = Point(80, -165);\n    poly7.ps[3] = Point(80, -185);\n    new ShapeRef(router, poly7, 7);\n\n    Polygon poly8(4);\n    poly8.ps[0] = Point(125, -185);\n    poly8.ps[1] = Point(125, -165);\n    poly8.ps[2] = Point(105, -165);\n    poly8.ps[3] = Point(105, -185);\n    new ShapeRef(router, poly8, 8);\n\n    Polygon poly9(4);\n    poly9.ps[0] = Point(150, -185);\n    poly9.ps[1] = Point(150, -165);\n    poly9.ps[2] = Point(130, -165);\n    poly9.ps[3] = Point(130, -185);\n    new ShapeRef(router, poly9, 9);\n\n    Polygon poly10(4);\n    poly10.ps[0] = Point(175, -185);\n    poly10.ps[1] = Point(175, -165);\n    poly10.ps[2] = Point(155, -165);\n    poly10.ps[3] = Point(155, -185);\n    new ShapeRef(router, poly10, 10);\n\n    ConnRef *connRef11 = new ConnRef(router, 11);\n    ConnEnd srcPt11(Point(20, -47), 15);\n    connRef11->setSourceEndpoint(srcPt11);\n    ConnEnd dstPt11(Point(57, -165), 15);\n    connRef11->setDestEndpoint(dstPt11);\n    connRef11->setRoutingType((ConnType)2);\n\n    ConnRef *connRef12 = new ConnRef(router, 12);\n    ConnEnd srcPt12(Point(61, -165), 15);\n    connRef12->setSourceEndpoint(srcPt12);\n    ConnEnd dstPt12(Point(57, -20), 15);\n    connRef12->setDestEndpoint(dstPt12);\n    connRef12->setRoutingType((ConnType)2);\n\n    ConnRef *connRef13 = new ConnRef(router, 13);\n    ConnEnd srcPt13(Point(15, -74), 15);\n    connRef13->setSourceEndpoint(srcPt13);\n    ConnEnd dstPt13(Point(65, -20), 15);\n    connRef13->setDestEndpoint(dstPt13);\n    connRef13->setRoutingType((ConnType)2);\n\n    ConnRef *connRef14 = new ConnRef(router, 14);\n    ConnEnd srcPt14(Point(61, -20), 15);\n    connRef14->setSourceEndpoint(srcPt14);\n    ConnEnd dstPt14(Point(61, -24), 15);\n    connRef14->setDestEndpoint(dstPt14);\n    connRef14->setRoutingType((ConnType)2);\n\n    router->processTransaction();\n    router->outputDiagram(\"output/inlineoverlap08\");\n    bool overlap = router->existsOrthogonalFixedSegmentOverlap();\n    delete router;\n    return (overlap) ? 1 : 0;\n};\n"
  },
  {
    "path": "cola/libavoid/tests/junction01.cpp",
    "content": "#include \"libavoid/libavoid.h\"\nusing namespace Avoid;\nint main(void) {\n    Router *router = new Router(OrthogonalRouting);\n    router->setRoutingPenalty((PenaltyType)0, 50);\n    router->setRoutingPenalty((PenaltyType)1, 0);\n    router->setRoutingPenalty((PenaltyType)2, 0);\n    router->setRoutingPenalty((PenaltyType)3, 4000);\n    router->setRoutingPenalty((PenaltyType)4, 105);\n    router->setRoutingParameter(idealNudgingDistance, 25);\n    Rectangle rect478845150(Point(50695, 51070), Point(50705, 51080));\n    ShapeRef *shapeRef478845150 = new ShapeRef(router, rect478845150, 478845150);\n    ShapeConnectionPin *pin = new Avoid::ShapeConnectionPin(shapeRef478845150, \n\t    Avoid::CONNECTIONPIN_CENTRE, Avoid::ATTACH_POS_CENTRE, \n\t    Avoid::ATTACH_POS_CENTRE, true, 0.0, Avoid::ConnDirNone);\n    pin->setExclusive(false);\n    \n    Rectangle rect92712048(Point(51246, 50475), Point(51304, 50585));\n    new ShapeRef(router, rect92712048, 92712048);\n    Rectangle rect23127921(Point(50365, 50766), Point(50485, 50834));\n    new ShapeRef(router, rect23127921, 23127921);\n    Rectangle rect159957148(Point(51740, 50891), Point(51860, 50959));\n    new ShapeRef(router, rect159957148, 159957148);\n    Rectangle rect1350214(Point(50375, 51015), Point(50625, 51135));\n    new ShapeRef(router, rect1350214, 1350214);\n    Rectangle rect247197258(Point(50265, 51046), Point(50375, 51104));\n    new ShapeRef(router, rect247197258, 247197258);\n    Rectangle rect281096654(Point(50700, 50390), Point(51000, 50610));\n    new ShapeRef(router, rect281096654, 281096654);\n    ConnEnd srcPt342420237(Point(50425, 50800), 15);\n    ConnEnd dstPt342420237(Point(50710, 50450), 4);\n    new ConnRef(router, srcPt342420237, dstPt342420237, 342420237);\n    ConnEnd srcPt352019675(Point(50990, 50500), 8);\n    ConnEnd dstPt352019675(shapeRef478845150, Avoid::CONNECTIONPIN_CENTRE);\n    //ConnEnd dstPt352019675(Point(50700, 51075), 15);\n    new ConnRef(router, srcPt352019675, dstPt352019675, 352019675);\n    ConnEnd srcPt42699400(shapeRef478845150, Avoid::CONNECTIONPIN_CENTRE);\n    //ConnEnd srcPt42699400(Point(50700, 51075), 15);\n    ConnEnd dstPt42699400(Point(50615, 51075), 8);\n    new ConnRef(router, srcPt42699400, dstPt42699400, 42699400);\n    ConnEnd srcPt94712625(Point(50710, 50550), 4);\n    ConnEnd dstPt94712625(shapeRef478845150, Avoid::CONNECTIONPIN_CENTRE);\n    //ConnEnd dstPt94712625(Point(50700, 51075), 15);\n    new ConnRef(router, srcPt94712625, dstPt94712625, 94712625);\n    ConnEnd srcPt92802970(Point(50990, 50450), 8);\n    ConnEnd dstPt92802970(Point(51275, 50485), 1);\n    new ConnRef(router, srcPt92802970, dstPt92802970, 92802970);\n    ConnEnd srcPt716502036(Point(50710, 50500), 4);\n    ConnEnd dstPt716502036(Point(51800, 50925), 15);\n    new ConnRef(router, srcPt716502036, dstPt716502036, 716502036);\n    router->processTransaction();\n    router->outputDiagram(\"output/junction01\");\n    delete router;\n    return 0;\n};\n"
  },
  {
    "path": "cola/libavoid/tests/junction02.cpp",
    "content": "#include \"libavoid/libavoid.h\"\nusing namespace Avoid;\nint main(void) {\n    Router *router = new Router(OrthogonalRouting);\n    router->setRoutingPenalty((PenaltyType)0, 50);\n    router->setRoutingPenalty((PenaltyType)1, 0);\n    router->setRoutingPenalty((PenaltyType)2, 0);\n    router->setRoutingPenalty((PenaltyType)3, 4000);\n    router->setRoutingPenalty((PenaltyType)4, 105);\n    router->setRoutingParameter(idealNudgingDistance, 25);\n\n    JunctionRef *junction478845150 = new JunctionRef(router, Point(50700, 51075));\n    \n    Rectangle rect92712048(Point(51246, 50475), Point(51304, 50585));\n    new ShapeRef(router, rect92712048, 92712048);\n    Rectangle rect23127921(Point(50365, 50766), Point(50485, 50834));\n    new ShapeRef(router, rect23127921, 23127921);\n    Rectangle rect159957148(Point(51740, 50891), Point(51860, 50959));\n    new ShapeRef(router, rect159957148, 159957148);\n    Rectangle rect1350214(Point(50375, 51015), Point(50625, 51135));\n    new ShapeRef(router, rect1350214, 1350214);\n    Rectangle rect247197258(Point(50265, 51046), Point(50375, 51104));\n    new ShapeRef(router, rect247197258, 247197258);\n    Rectangle rect281096654(Point(50700, 50390), Point(51000, 50610));\n    new ShapeRef(router, rect281096654, 281096654);\n    ConnEnd srcPt342420237(Point(50425, 50800), 15);\n    ConnEnd dstPt342420237(Point(50710, 50450), 4);\n    new ConnRef(router, srcPt342420237, dstPt342420237, 342420237);\n    ConnEnd srcPt352019675(Point(50990, 50500), 8);\n    ConnEnd dstPt352019675(junction478845150);\n    //ConnEnd dstPt352019675(Point(50700, 51075), 15);\n    new ConnRef(router, srcPt352019675, dstPt352019675, 352019675);\n    ConnEnd srcPt42699400(junction478845150);\n    //ConnEnd srcPt42699400(Point(50700, 51075), 15);\n    ConnEnd dstPt42699400(Point(50615, 51075), 8);\n    new ConnRef(router, srcPt42699400, dstPt42699400, 42699400);\n    ConnEnd srcPt94712625(Point(50710, 50550), 4);\n    ConnEnd dstPt94712625(junction478845150);\n    //ConnEnd dstPt94712625(Point(50700, 51075), 15);\n    new ConnRef(router, srcPt94712625, dstPt94712625, 94712625);\n    ConnEnd srcPt92802970(Point(50990, 50450), 8);\n    ConnEnd dstPt92802970(Point(51275, 50485), 1);\n    new ConnRef(router, srcPt92802970, dstPt92802970, 92802970);\n    ConnEnd srcPt716502036(Point(50710, 50500), 4);\n    ConnEnd dstPt716502036(Point(51800, 50925), 15);\n    new ConnRef(router, srcPt716502036, dstPt716502036, 716502036);\n    router->processTransaction();\n    router->outputDiagram(\"output/junction02-1\");\n    router->moveJunction(junction478845150, 585, 0);\n    router->processTransaction();\n    router->outputDiagram(\"output/junction02-2\");\n    delete router;\n    return 0;\n};\n\n"
  },
  {
    "path": "cola/libavoid/tests/junction03.cpp",
    "content": "#include \"libavoid/libavoid.h\"\nusing namespace Avoid;\nint main(void) {\n    Router *router = new Router(OrthogonalRouting);\n    router->setRoutingPenalty((PenaltyType)0, 50);\n    router->setRoutingPenalty((PenaltyType)1, 0);\n    router->setRoutingPenalty((PenaltyType)2, 0);\n    router->setRoutingPenalty((PenaltyType)3, 4000);\n    router->setRoutingPenalty((PenaltyType)4, 105);\n    router->setRoutingParameter(idealNudgingDistance, 25);\n    Rectangle rect478845150(Point(50695, 51070), Point(50705, 51080));\n    JunctionRef *junctionRef478845150 = new JunctionRef(router, \n\t\t    Point(50700, 51075), 478845150);\n    \n    Rectangle rect92712048(Point(51246, 50475), Point(51304, 50585));\n    new ShapeRef(router, rect92712048, 92712048);\n    Rectangle rect23127921(Point(50365, 50766), Point(50485, 50834));\n    new ShapeRef(router, rect23127921, 23127921);\n    Rectangle rect159957148(Point(51740, 50891), Point(51860, 50959));\n    new ShapeRef(router, rect159957148, 159957148);\n    Rectangle rect1350214(Point(50375, 51015), Point(50625, 51135));\n    new ShapeRef(router, rect1350214, 1350214);\n    Rectangle rect247197258(Point(50265, 51046), Point(50375, 51104));\n    new ShapeRef(router, rect247197258, 247197258);\n    Rectangle rect281096654(Point(50700, 50390), Point(51000, 50610));\n    new ShapeRef(router, rect281096654, 281096654);\n    ConnEnd srcPt342420237(Point(50425, 50800), 15);\n    ConnEnd dstPt342420237(Point(50710, 50450), 4);\n    new ConnRef(router, srcPt342420237, dstPt342420237, 342420237);\n    ConnEnd srcPt352019675(Point(50990, 50500), 8);\n    ConnEnd dstPt352019675(junctionRef478845150);\n    //ConnEnd dstPt352019675(Point(50700, 51075), 15);\n    new ConnRef(router, srcPt352019675, dstPt352019675, 352019675);\n    ConnEnd srcPt42699400(junctionRef478845150);\n    //ConnEnd srcPt42699400(Point(50700, 51075), 15);\n    ConnEnd dstPt42699400(Point(50615, 51075), 8);\n    new ConnRef(router, srcPt42699400, dstPt42699400, 42699400);\n    ConnEnd srcPt94712625(Point(50710, 50550), 4);\n    ConnEnd dstPt94712625(junctionRef478845150);\n    //ConnEnd dstPt94712625(Point(50700, 51075), 15);\n    new ConnRef(router, srcPt94712625, dstPt94712625, 94712625);\n    ConnEnd srcPt92802970(Point(50990, 50450), 8);\n    ConnEnd dstPt92802970(Point(51275, 50485), 1);\n    new ConnRef(router, srcPt92802970, dstPt92802970, 92802970);\n    ConnEnd srcPt716502036(Point(50710, 50500), 4);\n    ConnEnd dstPt716502036(Point(51800, 50925), 15);\n    new ConnRef(router, srcPt716502036, dstPt716502036, 716502036);\n    router->processTransaction();\n    router->outputDiagram(\"output/junction03-1\");\n    router->moveJunction(junctionRef478845150, 585, 0);\n    router->processTransaction();\n    router->outputDiagram(\"output/junction03-2\");\n    delete router;\n    return 0;\n};\n"
  },
  {
    "path": "cola/libavoid/tests/junction04.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libavoid - Fast, Incremental, Object-avoiding Line Router\n * Copyright (C) 2010  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * Licensees holding a valid commercial license may use this file in\n * accordance with the commercial license agreement provided with the \n * library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  \n *\n * Author(s):   Michael Wybrow <mjwybrow@users.sourceforge.net>\n*/\n\n#include \"libavoid/libavoid.h\"\n\n// Another testcase to check the functionality for connection pins.\n\n\nint main(void)\n{\n    Avoid::Router *router = new Avoid::Router(Avoid::OrthogonalRouting);\n    router->setRoutingPenalty((Avoid::PenaltyType)0, 50);\n    \n    Avoid::Rectangle shapeRect1(Avoid::Point(0, 0), Avoid::Point(30, 20));\n    Avoid::ShapeRef *shapeRef1 = new Avoid::ShapeRef(router, shapeRect1);\n    \n    Avoid::Rectangle shapeRect2(Avoid::Point(70, 7), Avoid::Point(100, 27));\n    new Avoid::ShapeRef(router, shapeRect2);\n    \n    Avoid::Rectangle shapeRect3(Avoid::Point(50, 60), Avoid::Point(80, 155));\n    new Avoid::ShapeRef(router, shapeRect3);\n    \n    Avoid::Rectangle shapeRect4(Avoid::Point(125, 60), Avoid::Point(155, 80));\n    new Avoid::ShapeRef(router, shapeRect4);\n    \n    Avoid::Rectangle shapeRect5(Avoid::Point(15, 150), Avoid::Point(45, 170));\n    Avoid::ShapeRef *shapeRef5 = new Avoid::ShapeRef(router, shapeRect5);\n    \n    Avoid::Rectangle shapeRect6(Avoid::Point(130, 130), Avoid::Point(160, 150));\n    Avoid::ShapeRef *shapeRef6 = new Avoid::ShapeRef(router, shapeRect6);\n    \n    // Add a centre connection pin for the three shapes we'll be using.\n    new Avoid::ShapeConnectionPin(shapeRef1, Avoid::CONNECTIONPIN_CENTRE, \n            Avoid::ATTACH_POS_CENTRE, Avoid::ATTACH_POS_CENTRE, true, 0.0, Avoid::ConnDirNone);\n    new Avoid::ShapeConnectionPin(shapeRef5, Avoid::CONNECTIONPIN_CENTRE, \n            Avoid::ATTACH_POS_CENTRE, Avoid::ATTACH_POS_CENTRE, true, 0.0, Avoid::ConnDirNone);\n    new Avoid::ShapeConnectionPin(shapeRef6, Avoid::CONNECTIONPIN_CENTRE, \n            Avoid::ATTACH_POS_CENTRE, Avoid::ATTACH_POS_CENTRE, true, 0.0, Avoid::ConnDirNone);\n\n    Avoid::ConnEnd srcEnd(shapeRef1, Avoid::CONNECTIONPIN_CENTRE);\n    Avoid::ConnEnd dstEnd(shapeRef6, Avoid::CONNECTIONPIN_CENTRE);\n    Avoid::ConnRef *conn1= new Avoid::ConnRef(router, srcEnd, dstEnd);\n    \n    router->processTransaction();\n    router->outputDiagram(\"output/junction04-1\");\n\n    // Split the connector on its second segment and add a junction point.\n    std::pair<Avoid::JunctionRef *, Avoid::ConnRef *> newObjs = \n            conn1->splitAtSegment(2);\n\n    router->processTransaction();\n    router->outputDiagram(\"output/junction04-2\");\n\n    // Create a connector from the centre of shape 5 that connects to \n    // the junction.\n    Avoid::ConnEnd srcEnd3(shapeRef5, Avoid::CONNECTIONPIN_CENTRE);\n    Avoid::ConnEnd dstEnd3(newObjs.first);\n    new Avoid::ConnRef(router, srcEnd3, dstEnd3);\n\n    router->processTransaction();\n    router->outputDiagram(\"output/junction04-3\");\n\n    // Delete one half of the original connector, up to the junction.\n    router->deleteConnector(conn1);\n    conn1 = nullptr;\n\n    router->processTransaction();\n    router->outputDiagram(\"output/junction04-4\");\n    \n    // The junction just has two connector now, so merge these into one.\n    newObjs.first->removeJunctionAndMergeConnectors();\n    router->processTransaction();\n    router->outputDiagram(\"output/junction04-5\");\n    \n    router->processTransaction();\n\n    delete router;\n    return 0;\n}\n\n"
  },
  {
    "path": "cola/libavoid/tests/latesetup.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libavoid - Fast, Incremental, Object-avoiding Line Router\n * Copyright (C) 2004-2007  Michael Wybrow <mjwybrow@users.sourceforge.net>\n * Copyright (C) 2009  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * Licensees holding a valid commercial license may use this file in\n * accordance with the commercial license agreement provided with the \n * library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  \n *\n * Author(s):   Michael Wybrow <mjwybrow@users.sourceforge.net>\n*/\n\n#include \"libavoid/libavoid.h\"\n\n    \n\nstatic void connCallback(void *ptr)\n{\n    Avoid::ConnRef *connRef = (Avoid::ConnRef *) ptr; \n\n    printf(\"Connector %u needs rerouting!\\n\", connRef->id());\n\n    const Avoid::PolyLine& route = connRef->route();\n    printf(\"New path: \");\n    for (size_t i = 0; i < route.ps.size(); ++i) \n    {\n        printf(\"%s(%f, %f)\", (i > 0) ? \"-\" : \"\", \n                route.ps[i].x, route.ps[i].y);\n    }\n    printf(\"\\n\");\n}\n\n\nint main(void)\n{\n    Avoid::Router *router = new Avoid::Router(Avoid::PolyLineRouting);\n    router->setTransactionUse(false);\n\n    printf(\"\\nCreate connector.\\n\");\n    Avoid::Point srcPt(1.2, 0.5);\n    Avoid::Point dstPt(1.5, 4);\n    Avoid::ConnRef *connRef = new Avoid::ConnRef(router);\n    connRef->setCallback(connCallback, connRef);\n    // Force inital callback:\n    router->processTransaction();\n\n    Avoid::ConnRef *connRef2 = new Avoid::ConnRef(router);\n    connRef2->setCallback(connCallback, connRef2);\n    router->processTransaction();\n\n    router->deleteConnector(connRef2);\n    connRef2 = nullptr;\n    router->processTransaction();\n\n    printf(\"\\nAdd endpoints.\\n\");\n    connRef->setEndpoints(srcPt, dstPt);\n    router->processTransaction();\n    \n    printf(\"\\nAdding a shape.\\n\");\n    // Create the ShapeRef:\n    Avoid::Polygon shapePoly(3);\n    shapePoly.ps[0] = Avoid::Point(1, 1);\n    shapePoly.ps[1] = Avoid::Point(2.5, 1.5);\n    shapePoly.ps[2] = Avoid::Point(1.5, 2.5);\n    Avoid::ShapeRef *shapeRef = new Avoid::ShapeRef(router, shapePoly);\n    router->processTransaction();\n\n    printf(\"\\nShifting endpoint.\\n\");\n    Avoid::Point dstPt2(6, 4.5);\n    connRef->setDestEndpoint(dstPt2);\n    // It's expected you know the connector needs rerouting, so the callback\n    // isn't called.  You can force it to be called though, via:\n    router->processTransaction();\n\n    printf(\"\\nMoving shape right by 0.5.\\n\");\n    router->moveShape(shapeRef, 0.5, 0);\n    router->processTransaction();\n\n    delete router;\n    return 0;\n}\n\n"
  },
  {
    "path": "cola/libavoid/tests/lineSegWrapperCrash1.cpp",
    "content": "#include \"libavoid/libavoid.h\"\nusing namespace Avoid;\nint main(void) {\n    Router *router = new Router(OrthogonalRouting);\n    router->setRoutingPenalty((PenaltyType)0, 50);\n    router->setRoutingPenalty((PenaltyType)1, 0);\n    router->setRoutingPenalty((PenaltyType)2, 0);\n    router->setRoutingPenalty((PenaltyType)3, 4000);\n    router->setRoutingPenalty((PenaltyType)4, 0);\n\n    Polygon poly29(4);\n    poly29.ps[0] = Point(1038.92, 415.557);\n    poly29.ps[1] = Point(1038.92, 455.557);\n    poly29.ps[2] = Point(998.924, 455.557);\n    poly29.ps[3] = Point(998.924, 415.557);\n    new ShapeRef(router, poly29, 29);\n    \n    Polygon poly23(4);\n    poly23.ps[0] = Point(337.924, 141.557);\n    poly23.ps[1] = Point(337.924, 181.557);\n    poly23.ps[2] = Point(297.924, 181.557);\n    poly23.ps[3] = Point(297.924, 141.557);\n    new ShapeRef(router, poly23, 23);\n    \n    Polygon poly45(4);\n    poly45.ps[0] = Point(577.924, 34.8422);\n    poly45.ps[1] = Point(577.924, 74.8422);\n    poly45.ps[2] = Point(537.924, 74.8422);\n    poly45.ps[3] = Point(537.924, 34.8422);\n    new ShapeRef(router, poly45, 45);\n    \n    Polygon poly18(4);\n    poly18.ps[0] = Point(217.924, 743.557);\n    poly18.ps[1] = Point(217.924, 783.557);\n    poly18.ps[2] = Point(177.924, 783.557);\n    poly18.ps[3] = Point(177.924, 743.557);\n    new ShapeRef(router, poly18, 18);\n    \n    Polygon poly60(4);\n    poly60.ps[0] = Point(937.924, 1.84222);\n    poly60.ps[1] = Point(937.924, 41.8422);\n    poly60.ps[2] = Point(897.924, 41.8422);\n    poly60.ps[3] = Point(897.924, 1.84222);\n    new ShapeRef(router, poly60, 60);\n    \n    Polygon poly61(4);\n    poly61.ps[0] = Point(577.924, -44.6578);\n    poly61.ps[1] = Point(577.924, -4.65778);\n    poly61.ps[2] = Point(537.924, -4.65778);\n    poly61.ps[3] = Point(537.924, -44.6578);\n    new ShapeRef(router, poly61, 61);\n    \n    Polygon poly62(4);\n    poly62.ps[0] = Point(577.924, 629.557);\n    poly62.ps[1] = Point(577.924, 669.557);\n    poly62.ps[2] = Point(537.924, 669.557);\n    poly62.ps[3] = Point(537.924, 629.557);\n    new ShapeRef(router, poly62, 62);\n    \n    Polygon poly63(4);\n    poly63.ps[0] = Point(457.924, 507.557);\n    poly63.ps[1] = Point(457.924, 547.557);\n    poly63.ps[2] = Point(417.924, 547.557);\n    poly63.ps[3] = Point(417.924, 507.557);\n    new ShapeRef(router, poly63, 63);\n    \n    Polygon poly64(4);\n    poly64.ps[0] = Point(817.924, 554.057);\n    poly64.ps[1] = Point(817.924, 594.057);\n    poly64.ps[2] = Point(777.924, 594.057);\n    poly64.ps[3] = Point(777.924, 554.057);\n    new ShapeRef(router, poly64, 64);\n    \n    Polygon poly65(4);\n    poly65.ps[0] = Point(97.9242, 599.557);\n    poly65.ps[1] = Point(97.9242, 639.557);\n    poly65.ps[2] = Point(57.9242, 639.557);\n    poly65.ps[3] = Point(57.9242, 599.557);\n    new ShapeRef(router, poly65, 65);\n    \n    Polygon poly66(4);\n    poly66.ps[0] = Point(747.924, -70.6578);\n    poly66.ps[1] = Point(747.924, -50.6578);\n    poly66.ps[2] = Point(727.924, -50.6578);\n    poly66.ps[3] = Point(727.924, -70.6578);\n    new ShapeRef(router, poly66, 66);\n    \n    Polygon poly67(4);\n    poly67.ps[0] = Point(147.924, 24.8422);\n    poly67.ps[1] = Point(147.924, 44.8422);\n    poly67.ps[2] = Point(127.924, 44.8422);\n    poly67.ps[3] = Point(127.924, 24.8422);\n    new ShapeRef(router, poly67, 67);\n    \n    Polygon poly68(4);\n    poly68.ps[0] = Point(147.924, 151.557);\n    poly68.ps[1] = Point(147.924, 171.557);\n    poly68.ps[2] = Point(127.924, 171.557);\n    poly68.ps[3] = Point(127.924, 151.557);\n    new ShapeRef(router, poly68, 68);\n    \n    Polygon poly69(4);\n    poly69.ps[0] = Point(267.924, 151.557);\n    poly69.ps[1] = Point(267.924, 171.557);\n    poly69.ps[2] = Point(247.924, 171.557);\n    poly69.ps[3] = Point(247.924, 151.557);\n    new ShapeRef(router, poly69, 69);\n    \n    Polygon poly36(4);\n    poly36.ps[0] = Point(697.924, 507.557);\n    poly36.ps[1] = Point(697.924, 547.557);\n    poly36.ps[2] = Point(657.924, 547.557);\n    poly36.ps[3] = Point(657.924, 507.557);\n    new ShapeRef(router, poly36, 36);\n    \n    Polygon poly12(4);\n    poly12.ps[0] = Point(1038.92, 260.557);\n    poly12.ps[1] = Point(1038.92, 300.557);\n    poly12.ps[2] = Point(998.924, 300.557);\n    poly12.ps[3] = Point(998.924, 260.557);\n    new ShapeRef(router, poly12, 12);\n    \n    Polygon poly15(4);\n    poly15.ps[0] = Point(1158.92, 415.557);\n    poly15.ps[1] = Point(1158.92, 455.557);\n    poly15.ps[2] = Point(1118.92, 455.557);\n    poly15.ps[3] = Point(1118.92, 415.557);\n    new ShapeRef(router, poly15, 15);\n    \n    Polygon poly7(4);\n    poly7.ps[0] = Point(1278.92, -80.6578);\n    poly7.ps[1] = Point(1278.92, -40.6578);\n    poly7.ps[2] = Point(1238.92, -40.6578);\n    poly7.ps[3] = Point(1238.92, -80.6578);\n    new ShapeRef(router, poly7, 7);\n    \n    Polygon poly16(4);\n    poly16.ps[0] = Point(337.924, 743.557);\n    poly16.ps[1] = Point(337.924, 783.557);\n    poly16.ps[2] = Point(297.924, 783.557);\n    poly16.ps[3] = Point(297.924, 743.557);\n    new ShapeRef(router, poly16, 16);\n    \n    Polygon poly19(4);\n    poly19.ps[0] = Point(217.924, 141.557);\n    poly19.ps[1] = Point(217.924, 181.557);\n    poly19.ps[2] = Point(177.924, 181.557);\n    poly19.ps[3] = Point(177.924, 141.557);\n    new ShapeRef(router, poly19, 19);\n    \n    Polygon poly47(4);\n    poly47.ps[0] = Point(697.924, 271.557);\n    poly47.ps[1] = Point(697.924, 311.557);\n    poly47.ps[2] = Point(657.924, 311.557);\n    poly47.ps[3] = Point(657.924, 271.557);\n    new ShapeRef(router, poly47, 47);\n    \n    Polygon poly8(4);\n    poly8.ps[0] = Point(1158.92, -80.6578);\n    poly8.ps[1] = Point(1158.92, -40.6578);\n    poly8.ps[2] = Point(1118.92, -40.6578);\n    poly8.ps[3] = Point(1118.92, -80.6578);\n    new ShapeRef(router, poly8, 8);\n    \n    Polygon poly32(4);\n    poly32.ps[0] = Point(1038.92, 141.557);\n    poly32.ps[1] = Point(1038.92, 181.557);\n    poly32.ps[2] = Point(998.924, 181.557);\n    poly32.ps[3] = Point(998.924, 141.557);\n    new ShapeRef(router, poly32, 32);\n    \n    Polygon poly51(4);\n    poly51.ps[0] = Point(1038.92, 323.557);\n    poly51.ps[1] = Point(1038.92, 363.557);\n    poly51.ps[2] = Point(998.924, 363.557);\n    poly51.ps[3] = Point(998.924, 323.557);\n    new ShapeRef(router, poly51, 51);\n    \n    Polygon poly52(4);\n    poly52.ps[0] = Point(217.924, 295.557);\n    poly52.ps[1] = Point(217.924, 335.557);\n    poly52.ps[2] = Point(177.924, 335.557);\n    poly52.ps[3] = Point(177.924, 295.557);\n    new ShapeRef(router, poly52, 52);\n    \n    Polygon poly53(4);\n    poly53.ps[0] = Point(577.924, 323.557);\n    poly53.ps[1] = Point(577.924, 363.557);\n    poly53.ps[2] = Point(537.924, 363.557);\n    poly53.ps[3] = Point(537.924, 323.557);\n    new ShapeRef(router, poly53, 53);\n    \n    Polygon poly22(4);\n    poly22.ps[0] = Point(697.924, 34.8422);\n    poly22.ps[1] = Point(697.924, 74.8422);\n    poly22.ps[2] = Point(657.924, 74.8422);\n    poly22.ps[3] = Point(657.924, 34.8422);\n    new ShapeRef(router, poly22, 22);\n    \n    Polygon poly4(4);\n    poly4.ps[0] = Point(1371.92, 29.8422);\n    poly4.ps[1] = Point(1371.92, 69.8422);\n    poly4.ps[2] = Point(1331.92, 69.8422);\n    poly4.ps[3] = Point(1331.92, 29.8422);\n    new ShapeRef(router, poly4, 4);\n    \n    Polygon poly6(4);\n    poly6.ps[0] = Point(1371.92, -80.6578);\n    poly6.ps[1] = Point(1371.92, -40.6578);\n    poly6.ps[2] = Point(1331.92, -40.6578);\n    poly6.ps[3] = Point(1331.92, -80.6578);\n    new ShapeRef(router, poly6, 6);\n    \n    Polygon poly44(4);\n    poly44.ps[0] = Point(97.9242, 507.557);\n    poly44.ps[1] = Point(97.9242, 547.557);\n    poly44.ps[2] = Point(57.9242, 547.557);\n    poly44.ps[3] = Point(57.9242, 507.557);\n    new ShapeRef(router, poly44, 44);\n    \n    Polygon poly54(4);\n    poly54.ps[0] = Point(697.924, 323.557);\n    poly54.ps[1] = Point(697.924, 363.557);\n    poly54.ps[2] = Point(657.924, 363.557);\n    poly54.ps[3] = Point(657.924, 323.557);\n    new ShapeRef(router, poly54, 54);\n    \n    Polygon poly55(4);\n    poly55.ps[0] = Point(457.924, 7.34222);\n    poly55.ps[1] = Point(457.924, 47.3422);\n    poly55.ps[2] = Point(417.924, 47.3422);\n    poly55.ps[3] = Point(417.924, 7.34222);\n    new ShapeRef(router, poly55, 55);\n    \n    Polygon poly56(4);\n    poly56.ps[0] = Point(457.924, -44.6578);\n    poly56.ps[1] = Point(457.924, -4.65778);\n    poly56.ps[2] = Point(417.924, -4.65778);\n    poly56.ps[3] = Point(417.924, -44.6578);\n    new ShapeRef(router, poly56, 56);\n    \n    Polygon poly57(4);\n    poly57.ps[0] = Point(817.924, 141.557);\n    poly57.ps[1] = Point(817.924, 181.557);\n    poly57.ps[2] = Point(777.924, 181.557);\n    poly57.ps[3] = Point(777.924, 141.557);\n    new ShapeRef(router, poly57, 57);\n    \n    Polygon poly58(4);\n    poly58.ps[0] = Point(97.9242, 14.8422);\n    poly58.ps[1] = Point(97.9242, 54.8422);\n    poly58.ps[2] = Point(57.9242, 54.8422);\n    poly58.ps[3] = Point(57.9242, 14.8422);\n    new ShapeRef(router, poly58, 58);\n    \n    Polygon poly59(4);\n    poly59.ps[0] = Point(937.924, 323.557);\n    poly59.ps[1] = Point(937.924, 363.557);\n    poly59.ps[2] = Point(897.924, 363.557);\n    poly59.ps[3] = Point(897.924, 323.557);\n    new ShapeRef(router, poly59, 59);\n    \n    Polygon poly25(4);\n    poly25.ps[0] = Point(697.924, 883.057);\n    poly25.ps[1] = Point(697.924, 923.057);\n    poly25.ps[2] = Point(657.924, 923.057);\n    poly25.ps[3] = Point(657.924, 883.057);\n    new ShapeRef(router, poly25, 25);\n    \n    Polygon poly24(4);\n    poly24.ps[0] = Point(457.924, 743.557);\n    poly24.ps[1] = Point(457.924, 783.557);\n    poly24.ps[2] = Point(417.924, 783.557);\n    poly24.ps[3] = Point(417.924, 743.557);\n    new ShapeRef(router, poly24, 24);\n    \n    Polygon poly39(4);\n    poly39.ps[0] = Point(457.924, 141.557);\n    poly39.ps[1] = Point(457.924, 181.557);\n    poly39.ps[2] = Point(417.924, 181.557);\n    poly39.ps[3] = Point(417.924, 141.557);\n    new ShapeRef(router, poly39, 39);\n    \n    Polygon poly35(4);\n    poly35.ps[0] = Point(1158.92, 40.3422);\n    poly35.ps[1] = Point(1158.92, 80.3422);\n    poly35.ps[2] = Point(1118.92, 80.3422);\n    poly35.ps[3] = Point(1118.92, 40.3422);\n    new ShapeRef(router, poly35, 35);\n    \n    Polygon poly34(4);\n    poly34.ps[0] = Point(1278.92, 323.557);\n    poly34.ps[1] = Point(1278.92, 363.557);\n    poly34.ps[2] = Point(1238.92, 363.557);\n    poly34.ps[3] = Point(1238.92, 323.557);\n    new ShapeRef(router, poly34, 34);\n    \n    Polygon poly42(4);\n    poly42.ps[0] = Point(697.924, 415.557);\n    poly42.ps[1] = Point(697.924, 455.557);\n    poly42.ps[2] = Point(657.924, 455.557);\n    poly42.ps[3] = Point(657.924, 415.557);\n    new ShapeRef(router, poly42, 42);\n    \n    Polygon poly40(4);\n    poly40.ps[0] = Point(97.9242, 141.557);\n    poly40.ps[1] = Point(97.9242, 181.557);\n    poly40.ps[2] = Point(57.9242, 181.557);\n    poly40.ps[3] = Point(57.9242, 141.557);\n    new ShapeRef(router, poly40, 40);\n    \n    Polygon poly123(4);\n    poly123.ps[0] = Point(645.924, 833.057);\n    poly123.ps[1] = Point(645.924, 873.057);\n    poly123.ps[2] = Point(589.924, 873.057);\n    poly123.ps[3] = Point(589.924, 833.057);\n    new ShapeRef(router, poly123, 123);\n    \n    Polygon poly124(4);\n    poly124.ps[0] = Point(405.924, 91.5565);\n    poly124.ps[1] = Point(405.924, 131.557);\n    poly124.ps[2] = Point(349.924, 131.557);\n    poly124.ps[3] = Point(349.924, 91.5565);\n    new ShapeRef(router, poly124, 124);\n    \n    Polygon poly125(4);\n    poly125.ps[0] = Point(405.924, -42.6578);\n    poly125.ps[1] = Point(405.924, -2.65778);\n    poly125.ps[2] = Point(349.924, -2.65778);\n    poly125.ps[3] = Point(349.924, -42.6578);\n    new ShapeRef(router, poly125, 125);\n    \n    Polygon poly126(4);\n    poly126.ps[0] = Point(525.924, -24.1578);\n    poly126.ps[1] = Point(525.924, 15.8422);\n    poly126.ps[2] = Point(469.924, 15.8422);\n    poly126.ps[3] = Point(469.924, -24.1578);\n    new ShapeRef(router, poly126, 126);\n    \n    Polygon poly127(4);\n    poly127.ps[0] = Point(645.924, -24.1578);\n    poly127.ps[1] = Point(645.924, 15.8422);\n    poly127.ps[2] = Point(589.924, 15.8422);\n    poly127.ps[3] = Point(589.924, -24.1578);\n    new ShapeRef(router, poly127, 127);\n    \n    Polygon poly128(4);\n    poly128.ps[0] = Point(765.924, 504.057);\n    poly128.ps[1] = Point(765.924, 544.057);\n    poly128.ps[2] = Point(709.924, 544.057);\n    poly128.ps[3] = Point(709.924, 504.057);\n    new ShapeRef(router, poly128, 128);\n    \n    Polygon poly129(4);\n    poly129.ps[0] = Point(525.924, 457.557);\n    poly129.ps[1] = Point(525.924, 497.557);\n    poly129.ps[2] = Point(469.924, 497.557);\n    poly129.ps[3] = Point(469.924, 457.557);\n    new ShapeRef(router, poly129, 129);\n    \n    Polygon poly130(4);\n    poly130.ps[0] = Point(525.924, 365.557);\n    poly130.ps[1] = Point(525.924, 405.557);\n    poly130.ps[2] = Point(469.924, 405.557);\n    poly130.ps[3] = Point(469.924, 365.557);\n    new ShapeRef(router, poly130, 130);\n    \n    Polygon poly131(4);\n    poly131.ps[0] = Point(645.924, 457.557);\n    poly131.ps[1] = Point(645.924, 497.557);\n    poly131.ps[2] = Point(589.924, 497.557);\n    poly131.ps[3] = Point(589.924, 457.557);\n    new ShapeRef(router, poly131, 131);\n    \n    Polygon poly132(4);\n    poly132.ps[0] = Point(645.924, 365.557);\n    poly132.ps[1] = Point(645.924, 405.557);\n    poly132.ps[2] = Point(589.924, 405.557);\n    poly132.ps[3] = Point(589.924, 365.557);\n    new ShapeRef(router, poly132, 132);\n    \n    Polygon poly133(4);\n    poly133.ps[0] = Point(885.924, 273.557);\n    poly133.ps[1] = Point(885.924, 313.557);\n    poly133.ps[2] = Point(829.924, 313.557);\n    poly133.ps[3] = Point(829.924, 273.557);\n    new ShapeRef(router, poly133, 133);\n    \n    Polygon poly134(4);\n    poly134.ps[0] = Point(885.924, 365.557);\n    poly134.ps[1] = Point(885.924, 405.557);\n    poly134.ps[2] = Point(829.924, 405.557);\n    poly134.ps[3] = Point(829.924, 365.557);\n    new ShapeRef(router, poly134, 134);\n    \n    Polygon poly135(4);\n    poly135.ps[0] = Point(885.924, 91.5565);\n    poly135.ps[1] = Point(885.924, 131.557);\n    poly135.ps[2] = Point(829.924, 131.557);\n    poly135.ps[3] = Point(829.924, 91.5565);\n    new ShapeRef(router, poly135, 135);\n    \n    Polygon poly136(4);\n    poly136.ps[0] = Point(765.924, 273.557);\n    poly136.ps[1] = Point(765.924, 313.557);\n    poly136.ps[2] = Point(709.924, 313.557);\n    poly136.ps[3] = Point(709.924, 273.557);\n    new ShapeRef(router, poly136, 136);\n    \n    Polygon poly137(4);\n    poly137.ps[0] = Point(1106.92, 318.557);\n    poly137.ps[1] = Point(1106.92, 358.557);\n    poly137.ps[2] = Point(1050.92, 358.557);\n    poly137.ps[3] = Point(1050.92, 318.557);\n    new ShapeRef(router, poly137, 137);\n    \n    Polygon poly138(4);\n    poly138.ps[0] = Point(1226.92, 318.557);\n    poly138.ps[1] = Point(1226.92, 358.557);\n    poly138.ps[2] = Point(1170.92, 358.557);\n    poly138.ps[3] = Point(1170.92, 318.557);\n    new ShapeRef(router, poly138, 138);\n    \n    Polygon poly139(4);\n    poly139.ps[0] = Point(1106.92, 82.3422);\n    poly139.ps[1] = Point(1106.92, 122.342);\n    poly139.ps[2] = Point(1050.92, 122.342);\n    poly139.ps[3] = Point(1050.92, 82.3422);\n    new ShapeRef(router, poly139, 139);\n    \n    Polygon poly140(4);\n    poly140.ps[0] = Point(1106.92, -9.65778);\n    poly140.ps[1] = Point(1106.92, 30.3422);\n    poly140.ps[2] = Point(1050.92, 30.3422);\n    poly140.ps[3] = Point(1050.92, -9.65778);\n    new ShapeRef(router, poly140, 140);\n    \n    Polygon poly141(4);\n    poly141.ps[0] = Point(1226.92, 82.3422);\n    poly141.ps[1] = Point(1226.92, 122.342);\n    poly141.ps[2] = Point(1170.92, 122.342);\n    poly141.ps[3] = Point(1170.92, 82.3422);\n    new ShapeRef(router, poly141, 141);\n    \n    Polygon poly142(4);\n    poly142.ps[0] = Point(1106.92, -130.658);\n    poly142.ps[1] = Point(1106.92, -90.6578);\n    poly142.ps[2] = Point(1050.92, -90.6578);\n    poly142.ps[3] = Point(1050.92, -130.658);\n    new ShapeRef(router, poly142, 142);\n    \n    Polygon poly143(4);\n    poly143.ps[0] = Point(986.924, 210.557);\n    poly143.ps[1] = Point(986.924, 250.557);\n    poly143.ps[2] = Point(930.924, 250.557);\n    poly143.ps[3] = Point(930.924, 210.557);\n    new ShapeRef(router, poly143, 143);\n    \n    Polygon poly144(4);\n    poly144.ps[0] = Point(765.924, 91.5565);\n    poly144.ps[1] = Point(765.924, 131.557);\n    poly144.ps[2] = Point(709.924, 131.557);\n    poly144.ps[3] = Point(709.924, 91.5565);\n    new ShapeRef(router, poly144, 144);\n    \n    Polygon poly145(4);\n    poly145.ps[0] = Point(765.924, 790.057);\n    poly145.ps[1] = Point(765.924, 830.057);\n    poly145.ps[2] = Point(709.924, 830.057);\n    poly145.ps[3] = Point(709.924, 790.057);\n    new ShapeRef(router, poly145, 145);\n    \n    Polygon poly146(4);\n    poly146.ps[0] = Point(45.9242, 232.5);\n    poly146.ps[1] = Point(45.9242, 272.5);\n    poly146.ps[2] = Point(-14.0758, 272.5);\n    poly146.ps[3] = Point(-14.0758, 232.5);\n    new ShapeRef(router, poly146, 146);\n    \n    Polygon poly147(4);\n    poly147.ps[0] = Point(-26.0758, 274.75);\n    poly147.ps[1] = Point(-26.0758, 334.75);\n    poly147.ps[2] = Point(-66.0758, 334.75);\n    poly147.ps[3] = Point(-66.0758, 274.75);\n    new ShapeRef(router, poly147, 147);\n    \n    Polygon poly70(4);\n    poly70.ps[0] = Point(207.924, 203.557);\n    poly70.ps[1] = Point(207.924, 223.557);\n    poly70.ps[2] = Point(187.924, 223.557);\n    poly70.ps[3] = Point(187.924, 203.557);\n    new ShapeRef(router, poly70, 70);\n    \n    Polygon poly71(4);\n    poly71.ps[0] = Point(267.924, 305.557);\n    poly71.ps[1] = Point(267.924, 325.557);\n    poly71.ps[2] = Point(247.924, 325.557);\n    poly71.ps[3] = Point(247.924, 305.557);\n    new ShapeRef(router, poly71, 71);\n    \n    Polygon poly72(4);\n    poly72.ps[0] = Point(87.9242, 357.557);\n    poly72.ps[1] = Point(87.9242, 377.557);\n    poly72.ps[2] = Point(67.9242, 377.557);\n    poly72.ps[3] = Point(67.9242, 357.557);\n    new ShapeRef(router, poly72, 72);\n    \n    Polygon poly73(4);\n    poly73.ps[0] = Point(147.924, 517.557);\n    poly73.ps[1] = Point(147.924, 537.557);\n    poly73.ps[2] = Point(127.924, 537.557);\n    poly73.ps[3] = Point(127.924, 517.557);\n    new ShapeRef(router, poly73, 73);\n    \n    Polygon poly74(4);\n    poly74.ps[0] = Point(147.924, 609.557);\n    poly74.ps[1] = Point(147.924, 629.557);\n    poly74.ps[2] = Point(127.924, 629.557);\n    poly74.ps[3] = Point(127.924, 609.557);\n    new ShapeRef(router, poly74, 74);\n    \n    Polygon poly75(4);\n    poly75.ps[0] = Point(87.9242, 651.557);\n    poly75.ps[1] = Point(87.9242, 671.557);\n    poly75.ps[2] = Point(67.9242, 671.557);\n    poly75.ps[3] = Point(67.9242, 651.557);\n    new ShapeRef(router, poly75, 75);\n    \n    Polygon poly76(4);\n    poly76.ps[0] = Point(147.924, 753.557);\n    poly76.ps[1] = Point(147.924, 773.557);\n    poly76.ps[2] = Point(127.924, 773.557);\n    poly76.ps[3] = Point(127.924, 753.557);\n    new ShapeRef(router, poly76, 76);\n    \n    Polygon poly77(4);\n    poly77.ps[0] = Point(267.924, 753.557);\n    poly77.ps[1] = Point(267.924, 773.557);\n    poly77.ps[2] = Point(247.924, 773.557);\n    poly77.ps[3] = Point(247.924, 753.557);\n    new ShapeRef(router, poly77, 77);\n    \n    Polygon poly78(4);\n    poly78.ps[0] = Point(387.924, 617.557);\n    poly78.ps[1] = Point(387.924, 637.557);\n    poly78.ps[2] = Point(367.924, 637.557);\n    poly78.ps[3] = Point(367.924, 617.557);\n    new ShapeRef(router, poly78, 78);\n    \n    Polygon poly79(4);\n    poly79.ps[0] = Point(387.924, 753.557);\n    poly79.ps[1] = Point(387.924, 773.557);\n    poly79.ps[2] = Point(367.924, 773.557);\n    poly79.ps[3] = Point(367.924, 753.557);\n    new ShapeRef(router, poly79, 79);\n    \n    Polygon poly80(4);\n    poly80.ps[0] = Point(507.924, 753.557);\n    poly80.ps[1] = Point(507.924, 773.557);\n    poly80.ps[2] = Point(487.924, 773.557);\n    poly80.ps[3] = Point(487.924, 753.557);\n    new ShapeRef(router, poly80, 80);\n    \n    Polygon poly81(4);\n    poly81.ps[0] = Point(627.924, 753.557);\n    poly81.ps[1] = Point(627.924, 773.557);\n    poly81.ps[2] = Point(607.924, 773.557);\n    poly81.ps[3] = Point(607.924, 753.557);\n    new ShapeRef(router, poly81, 81);\n    \n    Polygon poly82(4);\n    poly82.ps[0] = Point(507.924, 893.057);\n    poly82.ps[1] = Point(507.924, 913.057);\n    poly82.ps[2] = Point(487.924, 913.057);\n    poly82.ps[3] = Point(487.924, 893.057);\n    new ShapeRef(router, poly82, 82);\n    \n    Polygon poly83(4);\n    poly83.ps[0] = Point(627.924, 893.057);\n    poly83.ps[1] = Point(627.924, 913.057);\n    poly83.ps[2] = Point(607.924, 913.057);\n    poly83.ps[3] = Point(607.924, 893.057);\n    new ShapeRef(router, poly83, 83);\n    \n    Polygon poly84(4);\n    poly84.ps[0] = Point(387.924, 151.557);\n    poly84.ps[1] = Point(387.924, 171.557);\n    poly84.ps[2] = Point(367.924, 171.557);\n    poly84.ps[3] = Point(367.924, 151.557);\n    new ShapeRef(router, poly84, 84);\n    \n    Polygon poly85(4);\n    poly85.ps[0] = Point(387.924, 17.3422);\n    poly85.ps[1] = Point(387.924, 37.3422);\n    poly85.ps[2] = Point(367.924, 37.3422);\n    poly85.ps[3] = Point(367.924, 17.3422);\n    new ShapeRef(router, poly85, 85);\n    \n    Polygon poly86(4);\n    poly86.ps[0] = Point(507.924, 35.8422);\n    poly86.ps[1] = Point(507.924, 55.8422);\n    poly86.ps[2] = Point(487.924, 55.8422);\n    poly86.ps[3] = Point(487.924, 35.8422);\n    new ShapeRef(router, poly86, 86);\n    \n    Polygon poly87(4);\n    poly87.ps[0] = Point(627.924, 35.8422);\n    poly87.ps[1] = Point(627.924, 55.8422);\n    poly87.ps[2] = Point(607.924, 55.8422);\n    poly87.ps[3] = Point(607.924, 35.8422);\n    new ShapeRef(router, poly87, 87);\n    \n    Polygon poly88(4);\n    poly88.ps[0] = Point(747.924, 564.057);\n    poly88.ps[1] = Point(747.924, 584.057);\n    poly88.ps[2] = Point(727.924, 584.057);\n    poly88.ps[3] = Point(727.924, 564.057);\n    new ShapeRef(router, poly88, 88);\n    \n    Polygon poly89(4);\n    poly89.ps[0] = Point(507.924, 517.557);\n    poly89.ps[1] = Point(507.924, 537.557);\n    poly89.ps[2] = Point(487.924, 537.557);\n    poly89.ps[3] = Point(487.924, 517.557);\n    new ShapeRef(router, poly89, 89);\n    \n    Polygon poly90(4);\n    poly90.ps[0] = Point(507.924, 425.557);\n    poly90.ps[1] = Point(507.924, 445.557);\n    poly90.ps[2] = Point(487.924, 445.557);\n    poly90.ps[3] = Point(487.924, 425.557);\n    new ShapeRef(router, poly90, 90);\n    \n    Polygon poly91(4);\n    poly91.ps[0] = Point(627.924, 517.557);\n    poly91.ps[1] = Point(627.924, 537.557);\n    poly91.ps[2] = Point(607.924, 537.557);\n    poly91.ps[3] = Point(607.924, 517.557);\n    new ShapeRef(router, poly91, 91);\n    \n    Polygon poly92(4);\n    poly92.ps[0] = Point(627.924, 425.557);\n    poly92.ps[1] = Point(627.924, 445.557);\n    poly92.ps[2] = Point(607.924, 445.557);\n    poly92.ps[3] = Point(607.924, 425.557);\n    new ShapeRef(router, poly92, 92);\n    \n    Polygon poly93(4);\n    poly93.ps[0] = Point(867.924, 333.557);\n    poly93.ps[1] = Point(867.924, 353.557);\n    poly93.ps[2] = Point(847.924, 353.557);\n    poly93.ps[3] = Point(847.924, 333.557);\n    new ShapeRef(router, poly93, 93);\n    \n    Polygon poly94(4);\n    poly94.ps[0] = Point(867.924, 425.557);\n    poly94.ps[1] = Point(867.924, 445.557);\n    poly94.ps[2] = Point(847.924, 445.557);\n    poly94.ps[3] = Point(847.924, 425.557);\n    new ShapeRef(router, poly94, 94);\n    \n    Polygon poly95(4);\n    poly95.ps[0] = Point(867.924, 151.557);\n    poly95.ps[1] = Point(867.924, 171.557);\n    poly95.ps[2] = Point(847.924, 171.557);\n    poly95.ps[3] = Point(847.924, 151.557);\n    new ShapeRef(router, poly95, 95);\n    \n    Polygon poly96(4);\n    poly96.ps[0] = Point(747.924, 333.557);\n    poly96.ps[1] = Point(747.924, 353.557);\n    poly96.ps[2] = Point(727.924, 353.557);\n    poly96.ps[3] = Point(727.924, 333.557);\n    new ShapeRef(router, poly96, 96);\n    \n    Polygon poly97(4);\n    poly97.ps[0] = Point(1088.92, 378.557);\n    poly97.ps[1] = Point(1088.92, 398.557);\n    poly97.ps[2] = Point(1068.92, 398.557);\n    poly97.ps[3] = Point(1068.92, 378.557);\n    new ShapeRef(router, poly97, 97);\n    \n    Polygon poly98(4);\n    poly98.ps[0] = Point(1208.92, 378.557);\n    poly98.ps[1] = Point(1208.92, 398.557);\n    poly98.ps[2] = Point(1188.92, 398.557);\n    poly98.ps[3] = Point(1188.92, 378.557);\n    new ShapeRef(router, poly98, 98);\n    \n    Polygon poly99(4);\n    poly99.ps[0] = Point(1088.92, 142.342);\n    poly99.ps[1] = Point(1088.92, 162.342);\n    poly99.ps[2] = Point(1068.92, 162.342);\n    poly99.ps[3] = Point(1068.92, 142.342);\n    new ShapeRef(router, poly99, 99);\n    \n    Polygon poly100(4);\n    poly100.ps[0] = Point(1088.92, 50.3422);\n    poly100.ps[1] = Point(1088.92, 70.3422);\n    poly100.ps[2] = Point(1068.92, 70.3422);\n    poly100.ps[3] = Point(1068.92, 50.3422);\n    new ShapeRef(router, poly100, 100);\n    \n    Polygon poly101(4);\n    poly101.ps[0] = Point(1208.92, 142.342);\n    poly101.ps[1] = Point(1208.92, 162.342);\n    poly101.ps[2] = Point(1188.92, 162.342);\n    poly101.ps[3] = Point(1188.92, 142.342);\n    new ShapeRef(router, poly101, 101);\n    \n    Polygon poly102(4);\n    poly102.ps[0] = Point(1088.92, -70.6578);\n    poly102.ps[1] = Point(1088.92, -50.6578);\n    poly102.ps[2] = Point(1068.92, -50.6578);\n    poly102.ps[3] = Point(1068.92, -70.6578);\n    new ShapeRef(router, poly102, 102);\n    \n    Polygon poly103(4);\n    poly103.ps[0] = Point(968.924, 270.557);\n    poly103.ps[1] = Point(968.924, 290.557);\n    poly103.ps[2] = Point(948.924, 290.557);\n    poly103.ps[3] = Point(948.924, 270.557);\n    new ShapeRef(router, poly103, 103);\n    \n    Polygon poly11(4);\n    poly11.ps[0] = Point(817.924, -80.6578);\n    poly11.ps[1] = Point(817.924, -40.6578);\n    poly11.ps[2] = Point(777.924, -40.6578);\n    poly11.ps[3] = Point(777.924, -80.6578);\n    new ShapeRef(router, poly11, 11);\n    \n    Polygon poly20(4);\n    poly20.ps[0] = Point(337.924, 507.557);\n    poly20.ps[1] = Point(337.924, 547.557);\n    poly20.ps[2] = Point(297.924, 547.557);\n    poly20.ps[3] = Point(297.924, 507.557);\n    new ShapeRef(router, poly20, 20);\n    \n    Polygon poly33(4);\n    poly33.ps[0] = Point(937.924, 415.557);\n    poly33.ps[1] = Point(937.924, 455.557);\n    poly33.ps[2] = Point(897.924, 455.557);\n    poly33.ps[3] = Point(897.924, 415.557);\n    new ShapeRef(router, poly33, 33);\n    \n    Polygon poly27(4);\n    poly27.ps[0] = Point(577.924, 507.557);\n    poly27.ps[1] = Point(577.924, 547.557);\n    poly27.ps[2] = Point(537.924, 547.557);\n    poly27.ps[3] = Point(537.924, 507.557);\n    new ShapeRef(router, poly27, 27);\n    \n    Polygon poly1(4);\n    poly1.ps[0] = Point(817.924, 840.057);\n    poly1.ps[1] = Point(817.924, 880.057);\n    poly1.ps[2] = Point(777.924, 880.057);\n    poly1.ps[3] = Point(777.924, 840.057);\n    new ShapeRef(router, poly1, 1);\n    \n    Polygon poly104(4);\n    poly104.ps[0] = Point(747.924, 151.557);\n    poly104.ps[1] = Point(747.924, 171.557);\n    poly104.ps[2] = Point(727.924, 171.557);\n    poly104.ps[3] = Point(727.924, 151.557);\n    new ShapeRef(router, poly104, 104);\n    \n    Polygon poly105(4);\n    poly105.ps[0] = Point(747.924, 850.057);\n    poly105.ps[1] = Point(747.924, 870.057);\n    poly105.ps[2] = Point(727.924, 870.057);\n    poly105.ps[3] = Point(727.924, 850.057);\n    new ShapeRef(router, poly105, 105);\n    \n    Polygon poly106(4);\n    poly106.ps[0] = Point(765.924, -130.658);\n    poly106.ps[1] = Point(765.924, -90.6578);\n    poly106.ps[2] = Point(709.924, -90.6578);\n    poly106.ps[3] = Point(709.924, -130.658);\n    new ShapeRef(router, poly106, 106);\n    \n    Polygon poly107(4);\n    poly107.ps[0] = Point(165.924, -35.1578);\n    poly107.ps[1] = Point(165.924, 4.84222);\n    poly107.ps[2] = Point(109.924, 4.84222);\n    poly107.ps[3] = Point(109.924, -35.1578);\n    new ShapeRef(router, poly107, 107);\n    \n    Polygon poly108(4);\n    poly108.ps[0] = Point(165.924, 91.5565);\n    poly108.ps[1] = Point(165.924, 131.557);\n    poly108.ps[2] = Point(109.924, 131.557);\n    poly108.ps[3] = Point(109.924, 91.5565);\n    new ShapeRef(router, poly108, 108);\n    \n    Polygon poly109(4);\n    poly109.ps[0] = Point(285.924, 91.5565);\n    poly109.ps[1] = Point(285.924, 131.557);\n    poly109.ps[2] = Point(229.924, 131.557);\n    poly109.ps[3] = Point(229.924, 91.5565);\n    new ShapeRef(router, poly109, 109);\n    \n    Polygon poly110(4);\n    poly110.ps[0] = Point(287.924, 193.557);\n    poly110.ps[1] = Point(287.924, 233.557);\n    poly110.ps[2] = Point(231.924, 233.557);\n    poly110.ps[3] = Point(231.924, 193.557);\n    new ShapeRef(router, poly110, 110);\n    \n    Polygon poly111(4);\n    poly111.ps[0] = Point(285.924, 245.557);\n    poly111.ps[1] = Point(285.924, 285.557);\n    poly111.ps[2] = Point(229.924, 285.557);\n    poly111.ps[3] = Point(229.924, 245.557);\n    new ShapeRef(router, poly111, 111);\n    \n    Polygon poly112(4);\n    poly112.ps[0] = Point(167.924, 347.557);\n    poly112.ps[1] = Point(167.924, 387.557);\n    poly112.ps[2] = Point(111.924, 387.557);\n    poly112.ps[3] = Point(111.924, 347.557);\n    new ShapeRef(router, poly112, 112);\n    \n    Polygon poly113(4);\n    poly113.ps[0] = Point(165.924, 457.557);\n    poly113.ps[1] = Point(165.924, 497.557);\n    poly113.ps[2] = Point(109.924, 497.557);\n    poly113.ps[3] = Point(109.924, 457.557);\n    new ShapeRef(router, poly113, 113);\n    \n    Polygon poly114(4);\n    poly114.ps[0] = Point(165.924, 549.557);\n    poly114.ps[1] = Point(165.924, 589.557);\n    poly114.ps[2] = Point(109.924, 589.557);\n    poly114.ps[3] = Point(109.924, 549.557);\n    new ShapeRef(router, poly114, 114);\n    \n    Polygon poly115(4);\n    poly115.ps[0] = Point(167.924, 641.557);\n    poly115.ps[1] = Point(167.924, 681.557);\n    poly115.ps[2] = Point(111.924, 681.557);\n    poly115.ps[3] = Point(111.924, 641.557);\n    new ShapeRef(router, poly115, 115);\n    \n    Polygon poly116(4);\n    poly116.ps[0] = Point(165.924, 693.557);\n    poly116.ps[1] = Point(165.924, 733.557);\n    poly116.ps[2] = Point(109.924, 733.557);\n    poly116.ps[3] = Point(109.924, 693.557);\n    new ShapeRef(router, poly116, 116);\n    \n    Polygon poly117(4);\n    poly117.ps[0] = Point(285.924, 693.557);\n    poly117.ps[1] = Point(285.924, 733.557);\n    poly117.ps[2] = Point(229.924, 733.557);\n    poly117.ps[3] = Point(229.924, 693.557);\n    new ShapeRef(router, poly117, 117);\n    \n    Polygon poly118(4);\n    poly118.ps[0] = Point(405.924, 557.557);\n    poly118.ps[1] = Point(405.924, 597.557);\n    poly118.ps[2] = Point(349.924, 597.557);\n    poly118.ps[3] = Point(349.924, 557.557);\n    new ShapeRef(router, poly118, 118);\n    \n    Polygon poly119(4);\n    poly119.ps[0] = Point(405.924, 693.557);\n    poly119.ps[1] = Point(405.924, 733.557);\n    poly119.ps[2] = Point(349.924, 733.557);\n    poly119.ps[3] = Point(349.924, 693.557);\n    new ShapeRef(router, poly119, 119);\n    \n    Polygon poly120(4);\n    poly120.ps[0] = Point(525.924, 693.557);\n    poly120.ps[1] = Point(525.924, 733.557);\n    poly120.ps[2] = Point(469.924, 733.557);\n    poly120.ps[3] = Point(469.924, 693.557);\n    new ShapeRef(router, poly120, 120);\n    \n    Polygon poly121(4);\n    poly121.ps[0] = Point(645.924, 693.557);\n    poly121.ps[1] = Point(645.924, 733.557);\n    poly121.ps[2] = Point(589.924, 733.557);\n    poly121.ps[3] = Point(589.924, 693.557);\n    new ShapeRef(router, poly121, 121);\n    \n    Polygon poly122(4);\n    poly122.ps[0] = Point(525.924, 833.057);\n    poly122.ps[1] = Point(525.924, 873.057);\n    poly122.ps[2] = Point(469.924, 873.057);\n    poly122.ps[3] = Point(469.924, 833.057);\n    new ShapeRef(router, poly122, 122);\n    \n    Polygon poly13(4);\n    poly13.ps[0] = Point(1158.92, 323.557);\n    poly13.ps[1] = Point(1158.92, 363.557);\n    poly13.ps[2] = Point(1118.92, 363.557);\n    poly13.ps[3] = Point(1118.92, 323.557);\n    new ShapeRef(router, poly13, 13);\n    \n    Polygon poly9(4);\n    poly9.ps[0] = Point(1038.92, -80.6578);\n    poly9.ps[1] = Point(1038.92, -40.6578);\n    poly9.ps[2] = Point(998.924, -40.6578);\n    poly9.ps[3] = Point(998.924, -80.6578);\n    new ShapeRef(router, poly9, 9);\n    \n    Polygon poly26(4);\n    poly26.ps[0] = Point(697.924, 743.557);\n    poly26.ps[1] = Point(697.924, 783.557);\n    poly26.ps[2] = Point(657.924, 783.557);\n    poly26.ps[3] = Point(657.924, 743.557);\n    new ShapeRef(router, poly26, 26);\n    \n    Polygon poly37(4);\n    poly37.ps[0] = Point(457.924, 607.557);\n    poly37.ps[1] = Point(457.924, 647.557);\n    poly37.ps[2] = Point(417.924, 647.557);\n    poly37.ps[3] = Point(417.924, 607.557);\n    new ShapeRef(router, poly37, 37);\n    \n    Polygon poly17(4);\n    poly17.ps[0] = Point(577.924, 883.057);\n    poly17.ps[1] = Point(577.924, 923.057);\n    poly17.ps[2] = Point(537.924, 923.057);\n    poly17.ps[3] = Point(537.924, 883.057);\n    new ShapeRef(router, poly17, 17);\n    \n    Polygon poly38(4);\n    poly38.ps[0] = Point(217.924, 507.557);\n    poly38.ps[1] = Point(217.924, 547.557);\n    poly38.ps[2] = Point(177.924, 547.557);\n    poly38.ps[3] = Point(177.924, 507.557);\n    new ShapeRef(router, poly38, 38);\n    \n    Polygon poly41(4);\n    poly41.ps[0] = Point(577.924, 743.557);\n    poly41.ps[1] = Point(577.924, 783.557);\n    poly41.ps[2] = Point(537.924, 783.557);\n    poly41.ps[3] = Point(537.924, 743.557);\n    new ShapeRef(router, poly41, 41);\n    \n    Polygon poly28(4);\n    poly28.ps[0] = Point(817.924, 323.557);\n    poly28.ps[1] = Point(817.924, 363.557);\n    poly28.ps[2] = Point(777.924, 363.557);\n    poly28.ps[3] = Point(777.924, 323.557);\n    new ShapeRef(router, poly28, 28);\n    \n    Polygon poly21(4);\n    poly21.ps[0] = Point(937.924, 141.557);\n    poly21.ps[1] = Point(937.924, 181.557);\n    poly21.ps[2] = Point(897.924, 181.557);\n    poly21.ps[3] = Point(897.924, 141.557);\n    new ShapeRef(router, poly21, 21);\n    \n    Polygon poly48(4);\n    poly48.ps[0] = Point(97.9242, 743.557);\n    poly48.ps[1] = Point(97.9242, 783.557);\n    poly48.ps[2] = Point(57.9242, 783.557);\n    poly48.ps[3] = Point(57.9242, 743.557);\n    new ShapeRef(router, poly48, 48);\n    \n    Polygon poly49(4);\n    poly49.ps[0] = Point(45.9242, 169.75);\n    poly49.ps[1] = Point(45.9242, 334.75);\n    poly49.ps[2] = Point(-242.076, 334.75);\n    poly49.ps[3] = Point(-242.076, 169.75);\n    new ShapeRef(router, poly49, 49);\n    \n    Polygon poly50(4);\n    poly50.ps[0] = Point(272.5, -82.1578);\n    poly50.ps[1] = Point(272.5, -47.1578);\n    poly50.ps[2] = Point(35.5, -47.1578);\n    poly50.ps[3] = Point(35.5, -82.1578);\n    new ShapeRef(router, poly50, 50);\n    \n    Polygon poly3(4);\n    poly3.ps[0] = Point(1278.92, -22.1578);\n    poly3.ps[1] = Point(1278.92, 17.8422);\n    poly3.ps[2] = Point(1238.92, 17.8422);\n    poly3.ps[3] = Point(1238.92, -22.1578);\n    new ShapeRef(router, poly3, 3);\n    \n    Polygon poly43(4);\n    poly43.ps[0] = Point(1038.92, 1.84222);\n    poly43.ps[1] = Point(1038.92, 41.8422);\n    poly43.ps[2] = Point(998.924, 41.8422);\n    poly43.ps[3] = Point(998.924, 1.84222);\n    new ShapeRef(router, poly43, 43);\n    \n    Polygon poly30(4);\n    poly30.ps[0] = Point(1278.92, 415.557);\n    poly30.ps[1] = Point(1278.92, 455.557);\n    poly30.ps[2] = Point(1238.92, 455.557);\n    poly30.ps[3] = Point(1238.92, 415.557);\n    new ShapeRef(router, poly30, 30);\n    \n    Polygon poly31(4);\n    poly31.ps[0] = Point(1278.92, 141.557);\n    poly31.ps[1] = Point(1278.92, 181.557);\n    poly31.ps[2] = Point(1238.92, 181.557);\n    poly31.ps[3] = Point(1238.92, 141.557);\n    new ShapeRef(router, poly31, 31);\n    \n    Polygon poly46(4);\n    poly46.ps[0] = Point(577.924, 415.557);\n    poly46.ps[1] = Point(577.924, 455.557);\n    poly46.ps[2] = Point(537.924, 455.557);\n    poly46.ps[3] = Point(537.924, 415.557);\n    new ShapeRef(router, poly46, 46);\n    \n    Polygon poly14(4);\n    poly14.ps[0] = Point(1158.92, 141.557);\n    poly14.ps[1] = Point(1158.92, 181.557);\n    poly14.ps[2] = Point(1118.92, 181.557);\n    poly14.ps[3] = Point(1118.92, 141.557);\n    new ShapeRef(router, poly14, 14);\n    \n    Polygon poly2(4);\n    poly2.ps[0] = Point(577.924, 795.557);\n    poly2.ps[1] = Point(577.924, 835.557);\n    poly2.ps[2] = Point(537.924, 835.557);\n    poly2.ps[3] = Point(537.924, 795.557);\n    new ShapeRef(router, poly2, 2);\n    \n    Polygon poly5(4);\n    poly5.ps[0] = Point(1371.92, -22.1578);\n    poly5.ps[1] = Point(1371.92, 17.8422);\n    poly5.ps[2] = Point(1331.92, 17.8422);\n    poly5.ps[3] = Point(1331.92, -22.1578);\n    new ShapeRef(router, poly5, 5);\n    \n    Polygon poly10(4);\n    poly10.ps[0] = Point(937.924, -80.6578);\n    poly10.ps[1] = Point(937.924, -40.6578);\n    poly10.ps[2] = Point(897.924, -40.6578);\n    poly10.ps[3] = Point(897.924, -80.6578);\n    new ShapeRef(router, poly10, 10);\n    \n    ConnRef *connRef248 = new ConnRef(router, 248);\n    ConnEnd srcPt248(Point(737.924, 524.057), 15);\n    connRef248->setSourceEndpoint(srcPt248);\n    ConnEnd dstPt248(Point(737.924, 574.057), 15);\n    connRef248->setDestEndpoint(dstPt248);\n    connRef248->setRoutingType((ConnType)2);\n\n    ConnRef *connRef249 = new ConnRef(router, 249);\n    ConnEnd srcPt249(Point(497.924, 477.557), 15);\n    connRef249->setSourceEndpoint(srcPt249);\n    ConnEnd dstPt249(Point(497.924, 527.557), 15);\n    connRef249->setDestEndpoint(dstPt249);\n    connRef249->setRoutingType((ConnType)2);\n\n    ConnRef *connRef250 = new ConnRef(router, 250);\n    ConnEnd srcPt250(Point(497.924, 385.557), 15);\n    connRef250->setSourceEndpoint(srcPt250);\n    ConnEnd dstPt250(Point(497.924, 435.557), 15);\n    connRef250->setDestEndpoint(dstPt250);\n    connRef250->setRoutingType((ConnType)2);\n\n    ConnRef *connRef251 = new ConnRef(router, 251);\n    ConnEnd srcPt251(Point(617.924, 477.557), 15);\n    connRef251->setSourceEndpoint(srcPt251);\n    ConnEnd dstPt251(Point(617.924, 527.557), 15);\n    connRef251->setDestEndpoint(dstPt251);\n    connRef251->setRoutingType((ConnType)2);\n\n    ConnRef *connRef252 = new ConnRef(router, 252);\n    ConnEnd srcPt252(Point(617.924, 385.557), 15);\n    connRef252->setSourceEndpoint(srcPt252);\n    ConnEnd dstPt252(Point(617.924, 435.557), 15);\n    connRef252->setDestEndpoint(dstPt252);\n    connRef252->setRoutingType((ConnType)2);\n\n    ConnRef *connRef253 = new ConnRef(router, 253);\n    ConnEnd srcPt253(Point(857.924, 293.557), 15);\n    connRef253->setSourceEndpoint(srcPt253);\n    ConnEnd dstPt253(Point(857.924, 343.557), 15);\n    connRef253->setDestEndpoint(dstPt253);\n    connRef253->setRoutingType((ConnType)2);\n\n    ConnRef *connRef254 = new ConnRef(router, 254);\n    ConnEnd srcPt254(Point(857.924, 385.557), 15);\n    connRef254->setSourceEndpoint(srcPt254);\n    ConnEnd dstPt254(Point(857.924, 435.557), 15);\n    connRef254->setDestEndpoint(dstPt254);\n    connRef254->setRoutingType((ConnType)2);\n\n    ConnRef *connRef255 = new ConnRef(router, 255);\n    ConnEnd srcPt255(Point(857.924, 111.557), 15);\n    connRef255->setSourceEndpoint(srcPt255);\n    ConnEnd dstPt255(Point(857.924, 161.557), 15);\n    connRef255->setDestEndpoint(dstPt255);\n    connRef255->setRoutingType((ConnType)2);\n\n    ConnRef *connRef256 = new ConnRef(router, 256);\n    ConnEnd srcPt256(Point(737.924, 293.557), 15);\n    connRef256->setSourceEndpoint(srcPt256);\n    ConnEnd dstPt256(Point(737.924, 343.557), 15);\n    connRef256->setDestEndpoint(dstPt256);\n    connRef256->setRoutingType((ConnType)2);\n\n    ConnRef *connRef257 = new ConnRef(router, 257);\n    ConnEnd srcPt257(Point(1078.92, 338.557), 15);\n    connRef257->setSourceEndpoint(srcPt257);\n    ConnEnd dstPt257(Point(1078.92, 388.557), 15);\n    connRef257->setDestEndpoint(dstPt257);\n    connRef257->setRoutingType((ConnType)2);\n\n    ConnRef *connRef258 = new ConnRef(router, 258);\n    ConnEnd srcPt258(Point(1198.92, 338.557), 15);\n    connRef258->setSourceEndpoint(srcPt258);\n    ConnEnd dstPt258(Point(1198.92, 388.557), 15);\n    connRef258->setDestEndpoint(dstPt258);\n    connRef258->setRoutingType((ConnType)2);\n\n    ConnRef *connRef259 = new ConnRef(router, 259);\n    ConnEnd srcPt259(Point(1078.92, 102.342), 15);\n    connRef259->setSourceEndpoint(srcPt259);\n    ConnEnd dstPt259(Point(1078.92, 152.342), 15);\n    connRef259->setDestEndpoint(dstPt259);\n    connRef259->setRoutingType((ConnType)2);\n\n    ConnRef *connRef260 = new ConnRef(router, 260);\n    ConnEnd srcPt260(Point(1078.92, 10.3422), 15);\n    connRef260->setSourceEndpoint(srcPt260);\n    ConnEnd dstPt260(Point(1078.92, 60.3422), 15);\n    connRef260->setDestEndpoint(dstPt260);\n    connRef260->setRoutingType((ConnType)2);\n\n    ConnRef *connRef261 = new ConnRef(router, 261);\n    ConnEnd srcPt261(Point(1198.92, 102.342), 15);\n    connRef261->setSourceEndpoint(srcPt261);\n    ConnEnd dstPt261(Point(1198.92, 152.342), 15);\n    connRef261->setDestEndpoint(dstPt261);\n    connRef261->setRoutingType((ConnType)2);\n\n    ConnRef *connRef262 = new ConnRef(router, 262);\n    ConnEnd srcPt262(Point(1078.92, -110.658), 15);\n    connRef262->setSourceEndpoint(srcPt262);\n    ConnEnd dstPt262(Point(1078.92, -60.6578), 15);\n    connRef262->setDestEndpoint(dstPt262);\n    connRef262->setRoutingType((ConnType)2);\n\n    ConnRef *connRef263 = new ConnRef(router, 263);\n    ConnEnd srcPt263(Point(958.924, 230.557), 15);\n    connRef263->setSourceEndpoint(srcPt263);\n    ConnEnd dstPt263(Point(958.924, 280.557), 15);\n    connRef263->setDestEndpoint(dstPt263);\n    connRef263->setRoutingType((ConnType)2);\n\n    ConnRef *connRef264 = new ConnRef(router, 264);\n    ConnEnd srcPt264(Point(737.924, 111.557), 15);\n    connRef264->setSourceEndpoint(srcPt264);\n    ConnEnd dstPt264(Point(737.924, 161.557), 15);\n    connRef264->setDestEndpoint(dstPt264);\n    connRef264->setRoutingType((ConnType)2);\n\n    ConnRef *connRef265 = new ConnRef(router, 265);\n    ConnEnd srcPt265(Point(737.924, 810.057), 15);\n    connRef265->setSourceEndpoint(srcPt265);\n    ConnEnd dstPt265(Point(737.924, 860.057), 15);\n    connRef265->setDestEndpoint(dstPt265);\n    connRef265->setRoutingType((ConnType)2);\n\n    ConnRef *connRef266 = new ConnRef(router, 266);\n    ConnEnd srcPt266(Point(77.9242, 161.557), 15);\n    connRef266->setSourceEndpoint(srcPt266);\n    ConnEnd dstPt266(Point(40.9242, 252.5), 15);\n    connRef266->setDestEndpoint(dstPt266);\n    connRef266->setRoutingType((ConnType)2);\n\n    ConnRef *connRef267 = new ConnRef(router, 267);\n    ConnEnd srcPt267(Point(77.9242, 763.557), 15);\n    connRef267->setSourceEndpoint(srcPt267);\n    ConnEnd dstPt267(Point(-46.0758, 329.75), 15);\n    connRef267->setDestEndpoint(dstPt267);\n    connRef267->setRoutingType((ConnType)2);\n\n    ConnRef *connRef148 = new ConnRef(router, 148);\n    ConnEnd srcPt148(Point(1018.92, -60.6578), 15);\n    connRef148->setSourceEndpoint(srcPt148);\n    ConnEnd dstPt148(Point(1068.92, -60.6578), 15);\n    connRef148->setDestEndpoint(dstPt148);\n    connRef148->setRoutingType((ConnType)2);\n\n    ConnRef *connRef149 = new ConnRef(router, 149);\n    ConnEnd srcPt149(Point(1138.92, 161.557), 15);\n    connRef149->setSourceEndpoint(srcPt149);\n    ConnEnd dstPt149(Point(1188.92, 152.342), 15);\n    connRef149->setDestEndpoint(dstPt149);\n    connRef149->setRoutingType((ConnType)2);\n\n    ConnRef *connRef150 = new ConnRef(router, 150);\n    ConnEnd srcPt150(Point(1138.92, 435.557), 15);\n    connRef150->setSourceEndpoint(srcPt150);\n    ConnEnd dstPt150(Point(1188.92, 388.557), 15);\n    connRef150->setDestEndpoint(dstPt150);\n    connRef150->setRoutingType((ConnType)2);\n\n    ConnRef *connRef151 = new ConnRef(router, 151);\n    ConnEnd srcPt151(Point(317.924, 763.557), 15);\n    connRef151->setSourceEndpoint(srcPt151);\n    ConnEnd dstPt151(Point(367.924, 627.557), 15);\n    connRef151->setDestEndpoint(dstPt151);\n    connRef151->setRoutingType((ConnType)2);\n\n    ConnRef *connRef152 = new ConnRef(router, 152);\n    ConnEnd srcPt152(Point(317.924, 763.557), 15);\n    connRef152->setSourceEndpoint(srcPt152);\n    ConnEnd dstPt152(Point(367.924, 763.557), 15);\n    connRef152->setDestEndpoint(dstPt152);\n    connRef152->setRoutingType((ConnType)2);\n\n    ConnRef *connRef153 = new ConnRef(router, 153);\n    ConnEnd srcPt153(Point(317.924, 763.557), 15);\n    connRef153->setSourceEndpoint(srcPt153);\n    ConnEnd dstPt153(Point(487.924, 903.057), 15);\n    connRef153->setDestEndpoint(dstPt153);\n    connRef153->setRoutingType((ConnType)2);\n\n    ConnRef *connRef154 = new ConnRef(router, 154);\n    ConnEnd srcPt154(Point(317.924, 763.557), 15);\n    connRef154->setSourceEndpoint(srcPt154);\n    ConnEnd dstPt154(Point(727.924, 574.057), 15);\n    connRef154->setDestEndpoint(dstPt154);\n    connRef154->setRoutingType((ConnType)2);\n\n    ConnRef *connRef155 = new ConnRef(router, 155);\n    ConnEnd srcPt155(Point(557.924, 903.057), 15);\n    connRef155->setSourceEndpoint(srcPt155);\n    ConnEnd dstPt155(Point(607.924, 903.057), 15);\n    connRef155->setDestEndpoint(dstPt155);\n    connRef155->setRoutingType((ConnType)2);\n\n    ConnRef *connRef156 = new ConnRef(router, 156);\n    ConnEnd srcPt156(Point(197.924, 763.557), 15);\n    connRef156->setSourceEndpoint(srcPt156);\n    ConnEnd dstPt156(Point(247.924, 763.557), 15);\n    connRef156->setDestEndpoint(dstPt156);\n    connRef156->setRoutingType((ConnType)2);\n\n    ConnRef *connRef157 = new ConnRef(router, 157);\n    ConnEnd srcPt157(Point(147.924, 161.557), 15);\n    connRef157->setSourceEndpoint(srcPt157);\n    ConnEnd dstPt157(Point(197.924, 161.557), 15);\n    connRef157->setDestEndpoint(dstPt157);\n    connRef157->setRoutingType((ConnType)2);\n\n    ConnRef *connRef158 = new ConnRef(router, 158);\n    ConnEnd srcPt158(Point(197.924, 161.557), 15);\n    connRef158->setSourceEndpoint(srcPt158);\n    ConnEnd dstPt158(Point(247.924, 161.557), 15);\n    connRef158->setDestEndpoint(dstPt158);\n    connRef158->setRoutingType((ConnType)2);\n\n    ConnRef *connRef159 = new ConnRef(router, 159);\n    ConnEnd srcPt159(Point(197.924, 161.557), 15);\n    connRef159->setSourceEndpoint(srcPt159);\n    ConnEnd dstPt159(Point(197.924, 203.557), 15);\n    connRef159->setDestEndpoint(dstPt159);\n    connRef159->setRoutingType((ConnType)2);\n\n    ConnRef *connRef160 = new ConnRef(router, 160);\n    ConnEnd srcPt160(Point(317.924, 161.557), 15);\n    connRef160->setSourceEndpoint(srcPt160);\n    ConnEnd dstPt160(Point(727.924, -60.6578), 15);\n    connRef160->setDestEndpoint(dstPt160);\n    connRef160->setRoutingType((ConnType)2);\n\n    ConnRef *connRef161 = new ConnRef(router, 161);\n    ConnEnd srcPt161(Point(317.924, 161.557), 15);\n    connRef161->setSourceEndpoint(srcPt161);\n    ConnEnd dstPt161(Point(367.924, 161.557), 15);\n    connRef161->setDestEndpoint(dstPt161);\n    connRef161->setRoutingType((ConnType)2);\n\n    ConnRef *connRef162 = new ConnRef(router, 162);\n    ConnEnd srcPt162(Point(317.924, 161.557), 15);\n    connRef162->setSourceEndpoint(srcPt162);\n    ConnEnd dstPt162(Point(367.924, 27.3422), 15);\n    connRef162->setDestEndpoint(dstPt162);\n    connRef162->setRoutingType((ConnType)2);\n\n    ConnRef *connRef163 = new ConnRef(router, 163);\n    ConnEnd srcPt163(Point(317.924, 161.557), 15);\n    connRef163->setSourceEndpoint(srcPt163);\n    ConnEnd dstPt163(Point(487.924, 435.557), 15);\n    connRef163->setDestEndpoint(dstPt163);\n    connRef163->setRoutingType((ConnType)2);\n\n    ConnRef *connRef164 = new ConnRef(router, 164);\n    ConnEnd srcPt164(Point(437.924, 763.557), 15);\n    connRef164->setSourceEndpoint(srcPt164);\n    ConnEnd dstPt164(Point(487.924, 763.557), 15);\n    connRef164->setDestEndpoint(dstPt164);\n    connRef164->setRoutingType((ConnType)2);\n\n    ConnRef *connRef165 = new ConnRef(router, 165);\n    ConnEnd srcPt165(Point(437.924, 763.557), 15);\n    connRef165->setSourceEndpoint(srcPt165);\n    ConnEnd dstPt165(Point(727.924, 860.057), 15);\n    connRef165->setDestEndpoint(dstPt165);\n    connRef165->setRoutingType((ConnType)2);\n\n    ConnRef *connRef166 = new ConnRef(router, 166);\n    ConnEnd srcPt166(Point(557.924, 527.557), 15);\n    connRef166->setSourceEndpoint(srcPt166);\n    ConnEnd dstPt166(Point(607.924, 527.557), 15);\n    connRef166->setDestEndpoint(dstPt166);\n    connRef166->setRoutingType((ConnType)2);\n\n    ConnRef *connRef167 = new ConnRef(router, 167);\n    ConnEnd srcPt167(Point(797.924, 343.557), 15);\n    connRef167->setSourceEndpoint(srcPt167);\n    ConnEnd dstPt167(Point(847.924, 343.557), 15);\n    connRef167->setDestEndpoint(dstPt167);\n    connRef167->setRoutingType((ConnType)2);\n\n    ConnRef *connRef168 = new ConnRef(router, 168);\n    ConnEnd srcPt168(Point(797.924, 343.557), 15);\n    connRef168->setSourceEndpoint(srcPt168);\n    ConnEnd dstPt168(Point(847.924, 435.557), 15);\n    connRef168->setDestEndpoint(dstPt168);\n    connRef168->setRoutingType((ConnType)2);\n\n    ConnRef *connRef169 = new ConnRef(router, 169);\n    ConnEnd srcPt169(Point(1018.92, 435.557), 15);\n    connRef169->setSourceEndpoint(srcPt169);\n    ConnEnd dstPt169(Point(1068.92, 388.557), 15);\n    connRef169->setDestEndpoint(dstPt169);\n    connRef169->setRoutingType((ConnType)2);\n\n    ConnRef *connRef208 = new ConnRef(router, 208);\n    ConnEnd srcPt208(Point(627.924, 45.8422), 15);\n    connRef208->setSourceEndpoint(srcPt208);\n    ConnEnd dstPt208(Point(677.924, 54.8422), 15);\n    connRef208->setDestEndpoint(dstPt208);\n    connRef208->setRoutingType((ConnType)2);\n\n    ConnRef *connRef209 = new ConnRef(router, 209);\n    ConnEnd srcPt209(Point(747.924, 574.057), 15);\n    connRef209->setSourceEndpoint(srcPt209);\n    ConnEnd dstPt209(Point(797.924, 574.057), 15);\n    connRef209->setDestEndpoint(dstPt209);\n    connRef209->setRoutingType((ConnType)2);\n\n    ConnRef *connRef210 = new ConnRef(router, 210);\n    ConnEnd srcPt210(Point(507.924, 527.557), 15);\n    connRef210->setSourceEndpoint(srcPt210);\n    ConnEnd dstPt210(Point(557.924, 527.557), 15);\n    connRef210->setDestEndpoint(dstPt210);\n    connRef210->setRoutingType((ConnType)2);\n\n    ConnRef *connRef211 = new ConnRef(router, 211);\n    ConnEnd srcPt211(Point(507.924, 435.557), 15);\n    connRef211->setSourceEndpoint(srcPt211);\n    ConnEnd dstPt211(Point(557.924, 435.557), 15);\n    connRef211->setDestEndpoint(dstPt211);\n    connRef211->setRoutingType((ConnType)2);\n\n    ConnRef *connRef212 = new ConnRef(router, 212);\n    ConnEnd srcPt212(Point(627.924, 527.557), 15);\n    connRef212->setSourceEndpoint(srcPt212);\n    ConnEnd dstPt212(Point(677.924, 527.557), 15);\n    connRef212->setDestEndpoint(dstPt212);\n    connRef212->setRoutingType((ConnType)2);\n\n    ConnRef *connRef213 = new ConnRef(router, 213);\n    ConnEnd srcPt213(Point(627.924, 435.557), 15);\n    connRef213->setSourceEndpoint(srcPt213);\n    ConnEnd dstPt213(Point(677.924, 435.557), 15);\n    connRef213->setDestEndpoint(dstPt213);\n    connRef213->setRoutingType((ConnType)2);\n\n    ConnRef *connRef214 = new ConnRef(router, 214);\n    ConnEnd srcPt214(Point(867.924, 343.557), 15);\n    connRef214->setSourceEndpoint(srcPt214);\n    ConnEnd dstPt214(Point(917.924, 343.557), 15);\n    connRef214->setDestEndpoint(dstPt214);\n    connRef214->setRoutingType((ConnType)2);\n\n    ConnRef *connRef215 = new ConnRef(router, 215);\n    ConnEnd srcPt215(Point(867.924, 435.557), 15);\n    connRef215->setSourceEndpoint(srcPt215);\n    ConnEnd dstPt215(Point(917.924, 435.557), 15);\n    connRef215->setDestEndpoint(dstPt215);\n    connRef215->setRoutingType((ConnType)2);\n\n    ConnRef *connRef216 = new ConnRef(router, 216);\n    ConnEnd srcPt216(Point(867.924, 161.557), 15);\n    connRef216->setSourceEndpoint(srcPt216);\n    ConnEnd dstPt216(Point(917.924, 161.557), 15);\n    connRef216->setDestEndpoint(dstPt216);\n    connRef216->setRoutingType((ConnType)2);\n\n    ConnRef *connRef217 = new ConnRef(router, 217);\n    ConnEnd srcPt217(Point(747.924, 343.557), 15);\n    connRef217->setSourceEndpoint(srcPt217);\n    ConnEnd dstPt217(Point(797.924, 343.557), 15);\n    connRef217->setDestEndpoint(dstPt217);\n    connRef217->setRoutingType((ConnType)2);\n\n    ConnRef *connRef218 = new ConnRef(router, 218);\n    ConnEnd srcPt218(Point(1088.92, 388.557), 15);\n    connRef218->setSourceEndpoint(srcPt218);\n    ConnEnd dstPt218(Point(1138.92, 435.557), 15);\n    connRef218->setDestEndpoint(dstPt218);\n    connRef218->setRoutingType((ConnType)2);\n\n    ConnRef *connRef219 = new ConnRef(router, 219);\n    ConnEnd srcPt219(Point(1208.92, 388.557), 15);\n    connRef219->setSourceEndpoint(srcPt219);\n    ConnEnd dstPt219(Point(1258.92, 435.557), 15);\n    connRef219->setDestEndpoint(dstPt219);\n    connRef219->setRoutingType((ConnType)2);\n\n    ConnRef *connRef220 = new ConnRef(router, 220);\n    ConnEnd srcPt220(Point(1088.92, 152.342), 15);\n    connRef220->setSourceEndpoint(srcPt220);\n    ConnEnd dstPt220(Point(1138.92, 161.557), 15);\n    connRef220->setDestEndpoint(dstPt220);\n    connRef220->setRoutingType((ConnType)2);\n\n    ConnRef *connRef221 = new ConnRef(router, 221);\n    ConnEnd srcPt221(Point(1088.92, 60.3422), 15);\n    connRef221->setSourceEndpoint(srcPt221);\n    ConnEnd dstPt221(Point(1138.92, 60.3422), 15);\n    connRef221->setDestEndpoint(dstPt221);\n    connRef221->setRoutingType((ConnType)2);\n\n    ConnRef *connRef222 = new ConnRef(router, 222);\n    ConnEnd srcPt222(Point(1208.92, 152.342), 15);\n    connRef222->setSourceEndpoint(srcPt222);\n    ConnEnd dstPt222(Point(1258.92, 161.557), 15);\n    connRef222->setDestEndpoint(dstPt222);\n    connRef222->setRoutingType((ConnType)2);\n\n    ConnRef *connRef223 = new ConnRef(router, 223);\n    ConnEnd srcPt223(Point(1088.92, -60.6578), 15);\n    connRef223->setSourceEndpoint(srcPt223);\n    ConnEnd dstPt223(Point(1138.92, -60.6578), 15);\n    connRef223->setDestEndpoint(dstPt223);\n    connRef223->setRoutingType((ConnType)2);\n\n    ConnRef *connRef224 = new ConnRef(router, 224);\n    ConnEnd srcPt224(Point(747.924, 161.557), 15);\n    connRef224->setSourceEndpoint(srcPt224);\n    ConnEnd dstPt224(Point(797.924, 161.557), 15);\n    connRef224->setDestEndpoint(dstPt224);\n    connRef224->setRoutingType((ConnType)2);\n\n    ConnRef *connRef225 = new ConnRef(router, 225);\n    ConnEnd srcPt225(Point(747.924, 860.057), 15);\n    connRef225->setSourceEndpoint(srcPt225);\n    ConnEnd dstPt225(Point(797.924, 860.057), 15);\n    connRef225->setDestEndpoint(dstPt225);\n    connRef225->setRoutingType((ConnType)2);\n\n    ConnRef *connRef226 = new ConnRef(router, 226);\n    ConnEnd srcPt226(Point(737.924, -110.658), 15);\n    connRef226->setSourceEndpoint(srcPt226);\n    ConnEnd dstPt226(Point(737.924, -60.6578), 15);\n    connRef226->setDestEndpoint(dstPt226);\n    connRef226->setRoutingType((ConnType)2);\n\n    ConnRef *connRef227 = new ConnRef(router, 227);\n    ConnEnd srcPt227(Point(137.924, -15.1578), 15);\n    connRef227->setSourceEndpoint(srcPt227);\n    ConnEnd dstPt227(Point(137.924, 34.8422), 15);\n    connRef227->setDestEndpoint(dstPt227);\n    connRef227->setRoutingType((ConnType)2);\n\n    ConnRef *connRef228 = new ConnRef(router, 228);\n    ConnEnd srcPt228(Point(137.924, 111.557), 15);\n    connRef228->setSourceEndpoint(srcPt228);\n    ConnEnd dstPt228(Point(137.924, 161.557), 15);\n    connRef228->setDestEndpoint(dstPt228);\n    connRef228->setRoutingType((ConnType)2);\n\n    ConnRef *connRef229 = new ConnRef(router, 229);\n    ConnEnd srcPt229(Point(257.924, 111.557), 15);\n    connRef229->setSourceEndpoint(srcPt229);\n    ConnEnd dstPt229(Point(257.924, 161.557), 15);\n    connRef229->setDestEndpoint(dstPt229);\n    connRef229->setRoutingType((ConnType)2);\n\n    ConnRef *connRef230 = new ConnRef(router, 230);\n    ConnEnd srcPt230(Point(259.924, 213.557), 15);\n    connRef230->setSourceEndpoint(srcPt230);\n    ConnEnd dstPt230(Point(197.924, 213.557), 15);\n    connRef230->setDestEndpoint(dstPt230);\n    connRef230->setRoutingType((ConnType)2);\n\n    ConnRef *connRef231 = new ConnRef(router, 231);\n    ConnEnd srcPt231(Point(257.924, 265.557), 15);\n    connRef231->setSourceEndpoint(srcPt231);\n    ConnEnd dstPt231(Point(257.924, 315.557), 15);\n    connRef231->setDestEndpoint(dstPt231);\n    connRef231->setRoutingType((ConnType)2);\n\n    ConnRef *connRef232 = new ConnRef(router, 232);\n    ConnEnd srcPt232(Point(139.924, 367.557), 15);\n    connRef232->setSourceEndpoint(srcPt232);\n    ConnEnd dstPt232(Point(77.9242, 367.557), 15);\n    connRef232->setDestEndpoint(dstPt232);\n    connRef232->setRoutingType((ConnType)2);\n\n    ConnRef *connRef233 = new ConnRef(router, 233);\n    ConnEnd srcPt233(Point(137.924, 477.557), 15);\n    connRef233->setSourceEndpoint(srcPt233);\n    ConnEnd dstPt233(Point(137.924, 527.557), 15);\n    connRef233->setDestEndpoint(dstPt233);\n    connRef233->setRoutingType((ConnType)2);\n\n    ConnRef *connRef234 = new ConnRef(router, 234);\n    ConnEnd srcPt234(Point(137.924, 569.557), 15);\n    connRef234->setSourceEndpoint(srcPt234);\n    ConnEnd dstPt234(Point(137.924, 619.557), 15);\n    connRef234->setDestEndpoint(dstPt234);\n    connRef234->setRoutingType((ConnType)2);\n\n    ConnRef *connRef235 = new ConnRef(router, 235);\n    ConnEnd srcPt235(Point(139.924, 661.557), 15);\n    connRef235->setSourceEndpoint(srcPt235);\n    ConnEnd dstPt235(Point(77.9242, 661.557), 15);\n    connRef235->setDestEndpoint(dstPt235);\n    connRef235->setRoutingType((ConnType)2);\n\n    ConnRef *connRef236 = new ConnRef(router, 236);\n    ConnEnd srcPt236(Point(137.924, 713.557), 15);\n    connRef236->setSourceEndpoint(srcPt236);\n    ConnEnd dstPt236(Point(137.924, 763.557), 15);\n    connRef236->setDestEndpoint(dstPt236);\n    connRef236->setRoutingType((ConnType)2);\n\n    ConnRef *connRef237 = new ConnRef(router, 237);\n    ConnEnd srcPt237(Point(257.924, 713.557), 15);\n    connRef237->setSourceEndpoint(srcPt237);\n    ConnEnd dstPt237(Point(257.924, 763.557), 15);\n    connRef237->setDestEndpoint(dstPt237);\n    connRef237->setRoutingType((ConnType)2);\n\n    ConnRef *connRef238 = new ConnRef(router, 238);\n    ConnEnd srcPt238(Point(377.924, 577.557), 15);\n    connRef238->setSourceEndpoint(srcPt238);\n    ConnEnd dstPt238(Point(377.924, 627.557), 15);\n    connRef238->setDestEndpoint(dstPt238);\n    connRef238->setRoutingType((ConnType)2);\n\n    ConnRef *connRef239 = new ConnRef(router, 239);\n    ConnEnd srcPt239(Point(377.924, 713.557), 15);\n    connRef239->setSourceEndpoint(srcPt239);\n    ConnEnd dstPt239(Point(377.924, 763.557), 15);\n    connRef239->setDestEndpoint(dstPt239);\n    connRef239->setRoutingType((ConnType)2);\n\n    ConnRef *connRef240 = new ConnRef(router, 240);\n    ConnEnd srcPt240(Point(497.924, 713.557), 15);\n    connRef240->setSourceEndpoint(srcPt240);\n    ConnEnd dstPt240(Point(497.924, 763.557), 15);\n    connRef240->setDestEndpoint(dstPt240);\n    connRef240->setRoutingType((ConnType)2);\n\n    ConnRef *connRef241 = new ConnRef(router, 241);\n    ConnEnd srcPt241(Point(617.924, 713.557), 15);\n    connRef241->setSourceEndpoint(srcPt241);\n    ConnEnd dstPt241(Point(617.924, 763.557), 15);\n    connRef241->setDestEndpoint(dstPt241);\n    connRef241->setRoutingType((ConnType)2);\n\n    ConnRef *connRef242 = new ConnRef(router, 242);\n    ConnEnd srcPt242(Point(497.924, 853.057), 15);\n    connRef242->setSourceEndpoint(srcPt242);\n    ConnEnd dstPt242(Point(497.924, 903.057), 15);\n    connRef242->setDestEndpoint(dstPt242);\n    connRef242->setRoutingType((ConnType)2);\n\n    ConnRef *connRef243 = new ConnRef(router, 243);\n    ConnEnd srcPt243(Point(617.924, 853.057), 15);\n    connRef243->setSourceEndpoint(srcPt243);\n    ConnEnd dstPt243(Point(617.924, 903.057), 15);\n    connRef243->setDestEndpoint(dstPt243);\n    connRef243->setRoutingType((ConnType)2);\n\n    ConnRef *connRef244 = new ConnRef(router, 244);\n    ConnEnd srcPt244(Point(377.924, 111.557), 15);\n    connRef244->setSourceEndpoint(srcPt244);\n    ConnEnd dstPt244(Point(377.924, 161.557), 15);\n    connRef244->setDestEndpoint(dstPt244);\n    connRef244->setRoutingType((ConnType)2);\n\n    ConnRef *connRef245 = new ConnRef(router, 245);\n    ConnEnd srcPt245(Point(377.924, -22.6578), 15);\n    connRef245->setSourceEndpoint(srcPt245);\n    ConnEnd dstPt245(Point(377.924, 27.3422), 15);\n    connRef245->setDestEndpoint(dstPt245);\n    connRef245->setRoutingType((ConnType)2);\n\n    ConnRef *connRef246 = new ConnRef(router, 246);\n    ConnEnd srcPt246(Point(497.924, -4.15778), 15);\n    connRef246->setSourceEndpoint(srcPt246);\n    ConnEnd dstPt246(Point(497.924, 45.8422), 15);\n    connRef246->setDestEndpoint(dstPt246);\n    connRef246->setRoutingType((ConnType)2);\n\n    ConnRef *connRef247 = new ConnRef(router, 247);\n    ConnEnd srcPt247(Point(617.924, -4.15778), 15);\n    connRef247->setSourceEndpoint(srcPt247);\n    ConnEnd dstPt247(Point(617.924, 45.8422), 15);\n    connRef247->setDestEndpoint(dstPt247);\n    connRef247->setRoutingType((ConnType)2);\n\n    ConnRef *connRef170 = new ConnRef(router, 170);\n    ConnEnd srcPt170(Point(1018.92, 161.557), 15);\n    connRef170->setSourceEndpoint(srcPt170);\n    ConnEnd dstPt170(Point(1068.92, 152.342), 15);\n    connRef170->setDestEndpoint(dstPt170);\n    connRef170->setRoutingType((ConnType)2);\n\n    ConnRef *connRef171 = new ConnRef(router, 171);\n    ConnEnd srcPt171(Point(1018.92, 161.557), 15);\n    connRef171->setSourceEndpoint(srcPt171);\n    ConnEnd dstPt171(Point(1068.92, 60.3422), 15);\n    connRef171->setDestEndpoint(dstPt171);\n    connRef171->setRoutingType((ConnType)2);\n\n    ConnRef *connRef172 = new ConnRef(router, 172);\n    ConnEnd srcPt172(Point(267.924, 315.557), 15);\n    connRef172->setSourceEndpoint(srcPt172);\n    ConnEnd dstPt172(Point(437.924, 161.557), 15);\n    connRef172->setDestEndpoint(dstPt172);\n    connRef172->setRoutingType((ConnType)2);\n\n    ConnRef *connRef173 = new ConnRef(router, 173);\n    ConnEnd srcPt173(Point(437.924, 161.557), 15);\n    connRef173->setSourceEndpoint(srcPt173);\n    ConnEnd dstPt173(Point(487.924, 45.8422), 15);\n    connRef173->setDestEndpoint(dstPt173);\n    connRef173->setRoutingType((ConnType)2);\n\n    ConnRef *connRef174 = new ConnRef(router, 174);\n    ConnEnd srcPt174(Point(437.924, 161.557), 15);\n    connRef174->setSourceEndpoint(srcPt174);\n    ConnEnd dstPt174(Point(727.924, 161.557), 15);\n    connRef174->setDestEndpoint(dstPt174);\n    connRef174->setRoutingType((ConnType)2);\n\n    ConnRef *connRef175 = new ConnRef(router, 175);\n    ConnEnd srcPt175(Point(77.9242, 161.557), 15);\n    connRef175->setSourceEndpoint(srcPt175);\n    ConnEnd dstPt175(Point(127.924, 161.557), 15);\n    connRef175->setDestEndpoint(dstPt175);\n    connRef175->setRoutingType((ConnType)2);\n\n    ConnRef *connRef176 = new ConnRef(router, 176);\n    ConnEnd srcPt176(Point(77.9242, 161.557), 15);\n    connRef176->setSourceEndpoint(srcPt176);\n    ConnEnd dstPt176(Point(77.9242, 357.557), 15);\n    connRef176->setDestEndpoint(dstPt176);\n    connRef176->setRoutingType((ConnType)2);\n\n    ConnRef *connRef177 = new ConnRef(router, 177);\n    ConnEnd srcPt177(Point(557.924, 763.557), 15);\n    connRef177->setSourceEndpoint(srcPt177);\n    ConnEnd dstPt177(Point(607.924, 763.557), 15);\n    connRef177->setDestEndpoint(dstPt177);\n    connRef177->setRoutingType((ConnType)2);\n\n    ConnRef *connRef178 = new ConnRef(router, 178);\n    ConnEnd srcPt178(Point(77.9242, 527.557), 15);\n    connRef178->setSourceEndpoint(srcPt178);\n    ConnEnd dstPt178(Point(127.924, 527.557), 15);\n    connRef178->setDestEndpoint(dstPt178);\n    connRef178->setRoutingType((ConnType)2);\n\n    ConnRef *connRef179 = new ConnRef(router, 179);\n    ConnEnd srcPt179(Point(557.924, 54.8422), 15);\n    connRef179->setSourceEndpoint(srcPt179);\n    ConnEnd dstPt179(Point(607.924, 45.8422), 15);\n    connRef179->setDestEndpoint(dstPt179);\n    connRef179->setRoutingType((ConnType)2);\n\n    ConnRef *connRef180 = new ConnRef(router, 180);\n    ConnEnd srcPt180(Point(557.924, 435.557), 15);\n    connRef180->setSourceEndpoint(srcPt180);\n    ConnEnd dstPt180(Point(607.924, 435.557), 15);\n    connRef180->setDestEndpoint(dstPt180);\n    connRef180->setRoutingType((ConnType)2);\n\n    ConnRef *connRef181 = new ConnRef(router, 181);\n    ConnEnd srcPt181(Point(77.9242, 763.557), 15);\n    connRef181->setSourceEndpoint(srcPt181);\n    ConnEnd dstPt181(Point(77.9242, 671.557), 15);\n    connRef181->setDestEndpoint(dstPt181);\n    connRef181->setRoutingType((ConnType)2);\n\n    ConnRef *connRef182 = new ConnRef(router, 182);\n    ConnEnd srcPt182(Point(77.9242, 763.557), 15);\n    connRef182->setSourceEndpoint(srcPt182);\n    ConnEnd dstPt182(Point(127.924, 763.557), 15);\n    connRef182->setDestEndpoint(dstPt182);\n    connRef182->setRoutingType((ConnType)2);\n\n    ConnRef *connRef183 = new ConnRef(router, 183);\n    ConnEnd srcPt183(Point(197.924, 315.557), 15);\n    connRef183->setSourceEndpoint(srcPt183);\n    ConnEnd dstPt183(Point(247.924, 315.557), 15);\n    connRef183->setDestEndpoint(dstPt183);\n    connRef183->setRoutingType((ConnType)2);\n\n    ConnRef *connRef184 = new ConnRef(router, 184);\n    ConnEnd srcPt184(Point(677.924, 343.557), 15);\n    connRef184->setSourceEndpoint(srcPt184);\n    ConnEnd dstPt184(Point(727.924, 343.557), 15);\n    connRef184->setDestEndpoint(dstPt184);\n    connRef184->setRoutingType((ConnType)2);\n\n    ConnRef *connRef185 = new ConnRef(router, 185);\n    ConnEnd srcPt185(Point(797.924, 161.557), 15);\n    connRef185->setSourceEndpoint(srcPt185);\n    ConnEnd dstPt185(Point(847.924, 161.557), 15);\n    connRef185->setDestEndpoint(dstPt185);\n    connRef185->setRoutingType((ConnType)2);\n\n    ConnRef *connRef186 = new ConnRef(router, 186);\n    ConnEnd srcPt186(Point(77.9242, 34.8422), 15);\n    connRef186->setSourceEndpoint(srcPt186);\n    ConnEnd dstPt186(Point(127.924, 34.8422), 15);\n    connRef186->setDestEndpoint(dstPt186);\n    connRef186->setRoutingType((ConnType)2);\n\n    ConnRef *connRef187 = new ConnRef(router, 187);\n    ConnEnd srcPt187(Point(437.924, 527.557), 15);\n    connRef187->setSourceEndpoint(srcPt187);\n    ConnEnd dstPt187(Point(487.924, 527.557), 15);\n    connRef187->setDestEndpoint(dstPt187);\n    connRef187->setRoutingType((ConnType)2);\n\n    ConnRef *connRef188 = new ConnRef(router, 188);\n    ConnEnd srcPt188(Point(77.9242, 619.557), 15);\n    connRef188->setSourceEndpoint(srcPt188);\n    ConnEnd dstPt188(Point(127.924, 619.557), 15);\n    connRef188->setDestEndpoint(dstPt188);\n    connRef188->setRoutingType((ConnType)2);\n\n    ConnRef *connRef189 = new ConnRef(router, 189);\n    ConnEnd srcPt189(Point(747.924, -60.6578), 15);\n    connRef189->setSourceEndpoint(srcPt189);\n    ConnEnd dstPt189(Point(797.924, -60.6578), 15);\n    connRef189->setDestEndpoint(dstPt189);\n    connRef189->setRoutingType((ConnType)2);\n\n    ConnRef *connRef190 = new ConnRef(router, 190);\n    ConnEnd srcPt190(Point(147.924, 34.8422), 15);\n    connRef190->setSourceEndpoint(srcPt190);\n    ConnEnd dstPt190(Point(197.924, 161.557), 15);\n    connRef190->setDestEndpoint(dstPt190);\n    connRef190->setRoutingType((ConnType)2);\n\n    ConnRef *connRef191 = new ConnRef(router, 191);\n    ConnEnd srcPt191(Point(267.924, 161.557), 15);\n    connRef191->setSourceEndpoint(srcPt191);\n    ConnEnd dstPt191(Point(317.924, 161.557), 15);\n    connRef191->setDestEndpoint(dstPt191);\n    connRef191->setRoutingType((ConnType)2);\n\n    ConnRef *connRef192 = new ConnRef(router, 192);\n    ConnEnd srcPt192(Point(197.924, 223.557), 15);\n    connRef192->setSourceEndpoint(srcPt192);\n    ConnEnd dstPt192(Point(197.924, 315.557), 15);\n    connRef192->setDestEndpoint(dstPt192);\n    connRef192->setRoutingType((ConnType)2);\n\n    ConnRef *connRef193 = new ConnRef(router, 193);\n    ConnEnd srcPt193(Point(77.9242, 377.557), 15);\n    connRef193->setSourceEndpoint(srcPt193);\n    ConnEnd dstPt193(Point(77.9242, 527.557), 15);\n    connRef193->setDestEndpoint(dstPt193);\n    connRef193->setRoutingType((ConnType)2);\n\n    ConnRef *connRef194 = new ConnRef(router, 194);\n    ConnEnd srcPt194(Point(147.924, 527.557), 15);\n    connRef194->setSourceEndpoint(srcPt194);\n    ConnEnd dstPt194(Point(197.924, 527.557), 15);\n    connRef194->setDestEndpoint(dstPt194);\n    connRef194->setRoutingType((ConnType)2);\n\n    ConnRef *connRef195 = new ConnRef(router, 195);\n    ConnEnd srcPt195(Point(147.924, 619.557), 15);\n    connRef195->setSourceEndpoint(srcPt195);\n    ConnEnd dstPt195(Point(197.924, 763.557), 15);\n    connRef195->setDestEndpoint(dstPt195);\n    connRef195->setRoutingType((ConnType)2);\n\n    ConnRef *connRef196 = new ConnRef(router, 196);\n    ConnEnd srcPt196(Point(77.9242, 651.557), 15);\n    connRef196->setSourceEndpoint(srcPt196);\n    ConnEnd dstPt196(Point(77.9242, 619.557), 15);\n    connRef196->setDestEndpoint(dstPt196);\n    connRef196->setRoutingType((ConnType)2);\n\n    ConnRef *connRef197 = new ConnRef(router, 197);\n    ConnEnd srcPt197(Point(147.924, 763.557), 15);\n    connRef197->setSourceEndpoint(srcPt197);\n    ConnEnd dstPt197(Point(197.924, 763.557), 15);\n    connRef197->setDestEndpoint(dstPt197);\n    connRef197->setRoutingType((ConnType)2);\n\n    ConnRef *connRef198 = new ConnRef(router, 198);\n    ConnEnd srcPt198(Point(267.924, 763.557), 15);\n    connRef198->setSourceEndpoint(srcPt198);\n    ConnEnd dstPt198(Point(317.924, 763.557), 15);\n    connRef198->setDestEndpoint(dstPt198);\n    connRef198->setRoutingType((ConnType)2);\n\n    ConnRef *connRef199 = new ConnRef(router, 199);\n    ConnEnd srcPt199(Point(387.924, 627.557), 15);\n    connRef199->setSourceEndpoint(srcPt199);\n    ConnEnd dstPt199(Point(437.924, 627.557), 15);\n    connRef199->setDestEndpoint(dstPt199);\n    connRef199->setRoutingType((ConnType)2);\n\n    ConnRef *connRef200 = new ConnRef(router, 200);\n    ConnEnd srcPt200(Point(387.924, 763.557), 15);\n    connRef200->setSourceEndpoint(srcPt200);\n    ConnEnd dstPt200(Point(437.924, 763.557), 15);\n    connRef200->setDestEndpoint(dstPt200);\n    connRef200->setRoutingType((ConnType)2);\n\n    ConnRef *connRef201 = new ConnRef(router, 201);\n    ConnEnd srcPt201(Point(507.924, 763.557), 15);\n    connRef201->setSourceEndpoint(srcPt201);\n    ConnEnd dstPt201(Point(557.924, 763.557), 15);\n    connRef201->setDestEndpoint(dstPt201);\n    connRef201->setRoutingType((ConnType)2);\n\n    ConnRef *connRef202 = new ConnRef(router, 202);\n    ConnEnd srcPt202(Point(627.924, 763.557), 15);\n    connRef202->setSourceEndpoint(srcPt202);\n    ConnEnd dstPt202(Point(677.924, 763.557), 15);\n    connRef202->setDestEndpoint(dstPt202);\n    connRef202->setRoutingType((ConnType)2);\n\n    ConnRef *connRef203 = new ConnRef(router, 203);\n    ConnEnd srcPt203(Point(507.924, 903.057), 15);\n    connRef203->setSourceEndpoint(srcPt203);\n    ConnEnd dstPt203(Point(557.924, 903.057), 15);\n    connRef203->setDestEndpoint(dstPt203);\n    connRef203->setRoutingType((ConnType)2);\n\n    ConnRef *connRef204 = new ConnRef(router, 204);\n    ConnEnd srcPt204(Point(627.924, 903.057), 15);\n    connRef204->setSourceEndpoint(srcPt204);\n    ConnEnd dstPt204(Point(677.924, 903.057), 15);\n    connRef204->setDestEndpoint(dstPt204);\n    connRef204->setRoutingType((ConnType)2);\n\n    ConnRef *connRef205 = new ConnRef(router, 205);\n    ConnEnd srcPt205(Point(387.924, 161.557), 15);\n    connRef205->setSourceEndpoint(srcPt205);\n    ConnEnd dstPt205(Point(437.924, 161.557), 15);\n    connRef205->setDestEndpoint(dstPt205);\n    connRef205->setRoutingType((ConnType)2);\n\n    ConnRef *connRef206 = new ConnRef(router, 206);\n    ConnEnd srcPt206(Point(387.924, 27.3422), 15);\n    connRef206->setSourceEndpoint(srcPt206);\n    ConnEnd dstPt206(Point(437.924, 27.3422), 15);\n    connRef206->setDestEndpoint(dstPt206);\n    connRef206->setRoutingType((ConnType)2);\n\n    ConnRef *connRef207 = new ConnRef(router, 207);\n    ConnEnd srcPt207(Point(507.924, 45.8422), 15);\n    connRef207->setSourceEndpoint(srcPt207);\n    ConnEnd dstPt207(Point(557.924, 54.8422), 15);\n    connRef207->setDestEndpoint(dstPt207);\n    connRef207->setRoutingType((ConnType)2);\n\n    router->processTransaction();\n    router->outputDiagram(\"output/lineSegWrapperCrash1\");\n    delete router;\n    return 0;\n};\n"
  },
  {
    "path": "cola/libavoid/tests/lineSegWrapperCrash2.cpp",
    "content": "#include \"libavoid/libavoid.h\"\nusing namespace Avoid;\nint main(void) {\n    Router *router = new Router(OrthogonalRouting);\n    router->setRoutingPenalty((PenaltyType)0, 50);\n    router->setRoutingPenalty((PenaltyType)1, 0);\n    router->setRoutingPenalty((PenaltyType)2, 0);\n    router->setRoutingPenalty((PenaltyType)3, 4000);\n    router->setRoutingPenalty((PenaltyType)4, 0);\n\n    Polygon poly95(4);\n    poly95.ps[0] = Point(867.924, 151.557);\n    poly95.ps[1] = Point(867.924, 171.557);\n    poly95.ps[2] = Point(847.924, 171.557);\n    poly95.ps[3] = Point(847.924, 151.557);\n    new ShapeRef(router, poly95, 95);\n    \n    Polygon poly96(4);\n    poly96.ps[0] = Point(747.924, 333.557);\n    poly96.ps[1] = Point(747.924, 353.557);\n    poly96.ps[2] = Point(727.924, 353.557);\n    poly96.ps[3] = Point(727.924, 333.557);\n    new ShapeRef(router, poly96, 96);\n    \n    Polygon poly97(4);\n    poly97.ps[0] = Point(1088.92, 378.557);\n    poly97.ps[1] = Point(1088.92, 398.557);\n    poly97.ps[2] = Point(1068.92, 398.557);\n    poly97.ps[3] = Point(1068.92, 378.557);\n    new ShapeRef(router, poly97, 97);\n    \n    Polygon poly98(4);\n    poly98.ps[0] = Point(1208.92, 378.557);\n    poly98.ps[1] = Point(1208.92, 398.557);\n    poly98.ps[2] = Point(1188.92, 398.557);\n    poly98.ps[3] = Point(1188.92, 378.557);\n    new ShapeRef(router, poly98, 98);\n    \n    Polygon poly99(4);\n    poly99.ps[0] = Point(1088.92, 142.342);\n    poly99.ps[1] = Point(1088.92, 162.342);\n    poly99.ps[2] = Point(1068.92, 162.342);\n    poly99.ps[3] = Point(1068.92, 142.342);\n    new ShapeRef(router, poly99, 99);\n    \n    Polygon poly100(4);\n    poly100.ps[0] = Point(1088.92, 50.3422);\n    poly100.ps[1] = Point(1088.92, 70.3422);\n    poly100.ps[2] = Point(1068.92, 70.3422);\n    poly100.ps[3] = Point(1068.92, 50.3422);\n    new ShapeRef(router, poly100, 100);\n    \n    Polygon poly101(4);\n    poly101.ps[0] = Point(1208.92, 142.342);\n    poly101.ps[1] = Point(1208.92, 162.342);\n    poly101.ps[2] = Point(1188.92, 162.342);\n    poly101.ps[3] = Point(1188.92, 142.342);\n    new ShapeRef(router, poly101, 101);\n    \n    Polygon poly73(4);\n    poly73.ps[0] = Point(147.924, 517.557);\n    poly73.ps[1] = Point(147.924, 537.557);\n    poly73.ps[2] = Point(127.924, 537.557);\n    poly73.ps[3] = Point(127.924, 517.557);\n    new ShapeRef(router, poly73, 73);\n    \n    Polygon poly75(4);\n    poly75.ps[0] = Point(87.9242, 651.557);\n    poly75.ps[1] = Point(87.9242, 671.557);\n    poly75.ps[2] = Point(67.9242, 671.557);\n    poly75.ps[3] = Point(67.9242, 651.557);\n    new ShapeRef(router, poly75, 75);\n    \n    Polygon poly85(4);\n    poly85.ps[0] = Point(387.924, 17.3422);\n    poly85.ps[1] = Point(387.924, 37.3422);\n    poly85.ps[2] = Point(367.924, 37.3422);\n    poly85.ps[3] = Point(367.924, 17.3422);\n    new ShapeRef(router, poly85, 85);\n    \n    Polygon poly86(4);\n    poly86.ps[0] = Point(507.924, 35.8422);\n    poly86.ps[1] = Point(507.924, 55.8422);\n    poly86.ps[2] = Point(487.924, 55.8422);\n    poly86.ps[3] = Point(487.924, 35.8422);\n    new ShapeRef(router, poly86, 86);\n    \n    Polygon poly87(4);\n    poly87.ps[0] = Point(627.924, 35.8422);\n    poly87.ps[1] = Point(627.924, 55.8422);\n    poly87.ps[2] = Point(607.924, 55.8422);\n    poly87.ps[3] = Point(607.924, 35.8422);\n    new ShapeRef(router, poly87, 87);\n    \n    Polygon poly88(4);\n    poly88.ps[0] = Point(747.924, 564.057);\n    poly88.ps[1] = Point(747.924, 584.057);\n    poly88.ps[2] = Point(727.924, 584.057);\n    poly88.ps[3] = Point(727.924, 564.057);\n    new ShapeRef(router, poly88, 88);\n    \n    Polygon poly24(4);\n    poly24.ps[0] = Point(457.924, 743.557);\n    poly24.ps[1] = Point(457.924, 783.557);\n    poly24.ps[2] = Point(417.924, 783.557);\n    poly24.ps[3] = Point(417.924, 743.557);\n    new ShapeRef(router, poly24, 24);\n    \n    Polygon poly42(4);\n    poly42.ps[0] = Point(697.924, 415.557);\n    poly42.ps[1] = Point(697.924, 455.557);\n    poly42.ps[2] = Point(657.924, 455.557);\n    poly42.ps[3] = Point(657.924, 415.557);\n    new ShapeRef(router, poly42, 42);\n    \n    Polygon poly23(4);\n    poly23.ps[0] = Point(337.924, 141.557);\n    poly23.ps[1] = Point(337.924, 181.557);\n    poly23.ps[2] = Point(297.924, 181.557);\n    poly23.ps[3] = Point(297.924, 141.557);\n    new ShapeRef(router, poly23, 23);\n    \n    Polygon poly54(4);\n    poly54.ps[0] = Point(697.924, 323.557);\n    poly54.ps[1] = Point(697.924, 363.557);\n    poly54.ps[2] = Point(657.924, 363.557);\n    poly54.ps[3] = Point(657.924, 323.557);\n    new ShapeRef(router, poly54, 54);\n    \n    Polygon poly19(4);\n    poly19.ps[0] = Point(217.924, 141.557);\n    poly19.ps[1] = Point(217.924, 181.557);\n    poly19.ps[2] = Point(177.924, 181.557);\n    poly19.ps[3] = Point(177.924, 141.557);\n    new ShapeRef(router, poly19, 19);\n    \n    Polygon poly8(4);\n    poly8.ps[0] = Point(1158.92, -80.6578);\n    poly8.ps[1] = Point(1158.92, -40.6578);\n    poly8.ps[2] = Point(1118.92, -40.6578);\n    poly8.ps[3] = Point(1118.92, -80.6578);\n    new ShapeRef(router, poly8, 8);\n    \n    Polygon poly25(4);\n    poly25.ps[0] = Point(697.924, 883.057);\n    poly25.ps[1] = Point(697.924, 923.057);\n    poly25.ps[2] = Point(657.924, 923.057);\n    poly25.ps[3] = Point(657.924, 883.057);\n    new ShapeRef(router, poly25, 25);\n    \n    Polygon poly18(4);\n    poly18.ps[0] = Point(217.924, 743.557);\n    poly18.ps[1] = Point(217.924, 783.557);\n    poly18.ps[2] = Point(177.924, 783.557);\n    poly18.ps[3] = Point(177.924, 743.557);\n    new ShapeRef(router, poly18, 18);\n    \n    Polygon poly3(4);\n    poly3.ps[0] = Point(1278.92, -22.1578);\n    poly3.ps[1] = Point(1278.92, 17.8422);\n    poly3.ps[2] = Point(1238.92, 17.8422);\n    poly3.ps[3] = Point(1238.92, -22.1578);\n    new ShapeRef(router, poly3, 3);\n    \n    Polygon poly30(4);\n    poly30.ps[0] = Point(1278.92, 415.557);\n    poly30.ps[1] = Point(1278.92, 455.557);\n    poly30.ps[2] = Point(1238.92, 455.557);\n    poly30.ps[3] = Point(1238.92, 415.557);\n    new ShapeRef(router, poly30, 30);\n    \n    Polygon poly58(4);\n    poly58.ps[0] = Point(97.9242, 14.8422);\n    poly58.ps[1] = Point(97.9242, 54.8422);\n    poly58.ps[2] = Point(57.9242, 54.8422);\n    poly58.ps[3] = Point(57.9242, 14.8422);\n    new ShapeRef(router, poly58, 58);\n    \n    Polygon poly47(4);\n    poly47.ps[0] = Point(697.924, 271.557);\n    poly47.ps[1] = Point(697.924, 311.557);\n    poly47.ps[2] = Point(657.924, 311.557);\n    poly47.ps[3] = Point(657.924, 271.557);\n    new ShapeRef(router, poly47, 47);\n    \n    Polygon poly61(4);\n    poly61.ps[0] = Point(577.924, -44.6578);\n    poly61.ps[1] = Point(577.924, -4.65778);\n    poly61.ps[2] = Point(537.924, -4.65778);\n    poly61.ps[3] = Point(537.924, -44.6578);\n    new ShapeRef(router, poly61, 61);\n    \n    Polygon poly49(4);\n    poly49.ps[0] = Point(45.9242, 169.75);\n    poly49.ps[1] = Point(45.9242, 334.75);\n    poly49.ps[2] = Point(-242.076, 334.75);\n    poly49.ps[3] = Point(-242.076, 169.75);\n    new ShapeRef(router, poly49, 49);\n    \n    Polygon poly2(4);\n    poly2.ps[0] = Point(577.924, 795.557);\n    poly2.ps[1] = Point(577.924, 835.557);\n    poly2.ps[2] = Point(537.924, 835.557);\n    poly2.ps[3] = Point(537.924, 795.557);\n    new ShapeRef(router, poly2, 2);\n    \n    Polygon poly66(4);\n    poly66.ps[0] = Point(747.924, -70.6578);\n    poly66.ps[1] = Point(747.924, -50.6578);\n    poly66.ps[2] = Point(727.924, -50.6578);\n    poly66.ps[3] = Point(727.924, -70.6578);\n    new ShapeRef(router, poly66, 66);\n    \n    Polygon poly1(4);\n    poly1.ps[0] = Point(817.924, 840.057);\n    poly1.ps[1] = Point(817.924, 880.057);\n    poly1.ps[2] = Point(777.924, 880.057);\n    poly1.ps[3] = Point(777.924, 840.057);\n    new ShapeRef(router, poly1, 1);\n    \n    Polygon poly60(4);\n    poly60.ps[0] = Point(937.924, 1.84222);\n    poly60.ps[1] = Point(937.924, 41.8422);\n    poly60.ps[2] = Point(897.924, 41.8422);\n    poly60.ps[3] = Point(897.924, 1.84222);\n    new ShapeRef(router, poly60, 60);\n    \n    Polygon poly89(4);\n    poly89.ps[0] = Point(507.924, 517.557);\n    poly89.ps[1] = Point(507.924, 537.557);\n    poly89.ps[2] = Point(487.924, 537.557);\n    poly89.ps[3] = Point(487.924, 517.557);\n    new ShapeRef(router, poly89, 89);\n    \n    Polygon poly90(4);\n    poly90.ps[0] = Point(507.924, 425.557);\n    poly90.ps[1] = Point(507.924, 445.557);\n    poly90.ps[2] = Point(487.924, 445.557);\n    poly90.ps[3] = Point(487.924, 425.557);\n    new ShapeRef(router, poly90, 90);\n    \n    Polygon poly91(4);\n    poly91.ps[0] = Point(627.924, 517.557);\n    poly91.ps[1] = Point(627.924, 537.557);\n    poly91.ps[2] = Point(607.924, 537.557);\n    poly91.ps[3] = Point(607.924, 517.557);\n    new ShapeRef(router, poly91, 91);\n    \n    Polygon poly92(4);\n    poly92.ps[0] = Point(627.924, 425.557);\n    poly92.ps[1] = Point(627.924, 445.557);\n    poly92.ps[2] = Point(607.924, 445.557);\n    poly92.ps[3] = Point(607.924, 425.557);\n    new ShapeRef(router, poly92, 92);\n    \n    Polygon poly93(4);\n    poly93.ps[0] = Point(867.924, 333.557);\n    poly93.ps[1] = Point(867.924, 353.557);\n    poly93.ps[2] = Point(847.924, 353.557);\n    poly93.ps[3] = Point(847.924, 333.557);\n    new ShapeRef(router, poly93, 93);\n    \n    Polygon poly94(4);\n    poly94.ps[0] = Point(867.924, 425.557);\n    poly94.ps[1] = Point(867.924, 445.557);\n    poly94.ps[2] = Point(847.924, 445.557);\n    poly94.ps[3] = Point(847.924, 425.557);\n    new ShapeRef(router, poly94, 94);\n    \n    Polygon poly59(4);\n    poly59.ps[0] = Point(937.924, 323.557);\n    poly59.ps[1] = Point(937.924, 363.557);\n    poly59.ps[2] = Point(897.924, 363.557);\n    poly59.ps[3] = Point(897.924, 323.557);\n    new ShapeRef(router, poly59, 59);\n    \n    Polygon poly116(4);\n    poly116.ps[0] = Point(165.924, 693.557);\n    poly116.ps[1] = Point(165.924, 733.557);\n    poly116.ps[2] = Point(109.924, 733.557);\n    poly116.ps[3] = Point(109.924, 693.557);\n    new ShapeRef(router, poly116, 116);\n    \n    Polygon poly117(4);\n    poly117.ps[0] = Point(285.924, 693.557);\n    poly117.ps[1] = Point(285.924, 733.557);\n    poly117.ps[2] = Point(229.924, 733.557);\n    poly117.ps[3] = Point(229.924, 693.557);\n    new ShapeRef(router, poly117, 117);\n    \n    Polygon poly118(4);\n    poly118.ps[0] = Point(405.924, 557.557);\n    poly118.ps[1] = Point(405.924, 597.557);\n    poly118.ps[2] = Point(349.924, 597.557);\n    poly118.ps[3] = Point(349.924, 557.557);\n    new ShapeRef(router, poly118, 118);\n    \n    Polygon poly119(4);\n    poly119.ps[0] = Point(405.924, 693.557);\n    poly119.ps[1] = Point(405.924, 733.557);\n    poly119.ps[2] = Point(349.924, 733.557);\n    poly119.ps[3] = Point(349.924, 693.557);\n    new ShapeRef(router, poly119, 119);\n    \n    Polygon poly120(4);\n    poly120.ps[0] = Point(525.924, 693.557);\n    poly120.ps[1] = Point(525.924, 733.557);\n    poly120.ps[2] = Point(469.924, 733.557);\n    poly120.ps[3] = Point(469.924, 693.557);\n    new ShapeRef(router, poly120, 120);\n    \n    Polygon poly121(4);\n    poly121.ps[0] = Point(645.924, 693.557);\n    poly121.ps[1] = Point(645.924, 733.557);\n    poly121.ps[2] = Point(589.924, 733.557);\n    poly121.ps[3] = Point(589.924, 693.557);\n    new ShapeRef(router, poly121, 121);\n    \n    Polygon poly122(4);\n    poly122.ps[0] = Point(525.924, 833.057);\n    poly122.ps[1] = Point(525.924, 873.057);\n    poly122.ps[2] = Point(469.924, 873.057);\n    poly122.ps[3] = Point(469.924, 833.057);\n    new ShapeRef(router, poly122, 122);\n    \n    Polygon poly123(4);\n    poly123.ps[0] = Point(645.924, 833.057);\n    poly123.ps[1] = Point(645.924, 873.057);\n    poly123.ps[2] = Point(589.924, 873.057);\n    poly123.ps[3] = Point(589.924, 833.057);\n    new ShapeRef(router, poly123, 123);\n    \n    Polygon poly124(4);\n    poly124.ps[0] = Point(405.924, 91.5565);\n    poly124.ps[1] = Point(405.924, 131.557);\n    poly124.ps[2] = Point(349.924, 131.557);\n    poly124.ps[3] = Point(349.924, 91.5565);\n    new ShapeRef(router, poly124, 124);\n    \n    Polygon poly125(4);\n    poly125.ps[0] = Point(405.924, -42.6578);\n    poly125.ps[1] = Point(405.924, -2.65778);\n    poly125.ps[2] = Point(349.924, -2.65778);\n    poly125.ps[3] = Point(349.924, -42.6578);\n    new ShapeRef(router, poly125, 125);\n    \n    Polygon poly126(4);\n    poly126.ps[0] = Point(525.924, -24.1578);\n    poly126.ps[1] = Point(525.924, 15.8422);\n    poly126.ps[2] = Point(469.924, 15.8422);\n    poly126.ps[3] = Point(469.924, -24.1578);\n    new ShapeRef(router, poly126, 126);\n    \n    Polygon poly127(4);\n    poly127.ps[0] = Point(645.924, -24.1578);\n    poly127.ps[1] = Point(645.924, 15.8422);\n    poly127.ps[2] = Point(589.924, 15.8422);\n    poly127.ps[3] = Point(589.924, -24.1578);\n    new ShapeRef(router, poly127, 127);\n    \n    Polygon poly128(4);\n    poly128.ps[0] = Point(765.924, 504.057);\n    poly128.ps[1] = Point(765.924, 544.057);\n    poly128.ps[2] = Point(709.924, 544.057);\n    poly128.ps[3] = Point(709.924, 504.057);\n    new ShapeRef(router, poly128, 128);\n    \n    Polygon poly129(4);\n    poly129.ps[0] = Point(525.924, 457.557);\n    poly129.ps[1] = Point(525.924, 497.557);\n    poly129.ps[2] = Point(469.924, 497.557);\n    poly129.ps[3] = Point(469.924, 457.557);\n    new ShapeRef(router, poly129, 129);\n    \n    Polygon poly37(4);\n    poly37.ps[0] = Point(457.924, 607.557);\n    poly37.ps[1] = Point(457.924, 647.557);\n    poly37.ps[2] = Point(417.924, 647.557);\n    poly37.ps[3] = Point(417.924, 607.557);\n    new ShapeRef(router, poly37, 37);\n    \n    Polygon poly36(4);\n    poly36.ps[0] = Point(697.924, 507.557);\n    poly36.ps[1] = Point(697.924, 547.557);\n    poly36.ps[2] = Point(657.924, 547.557);\n    poly36.ps[3] = Point(657.924, 507.557);\n    new ShapeRef(router, poly36, 36);\n    \n    Polygon poly9(4);\n    poly9.ps[0] = Point(1038.92, -80.6578);\n    poly9.ps[1] = Point(1038.92, -40.6578);\n    poly9.ps[2] = Point(998.924, -40.6578);\n    poly9.ps[3] = Point(998.924, -80.6578);\n    new ShapeRef(router, poly9, 9);\n    \n    Polygon poly52(4);\n    poly52.ps[0] = Point(217.924, 295.557);\n    poly52.ps[1] = Point(217.924, 335.557);\n    poly52.ps[2] = Point(177.924, 335.557);\n    poly52.ps[3] = Point(177.924, 295.557);\n    new ShapeRef(router, poly52, 52);\n    \n    Polygon poly82(4);\n    poly82.ps[0] = Point(507.924, 893.057);\n    poly82.ps[1] = Point(507.924, 913.057);\n    poly82.ps[2] = Point(487.924, 913.057);\n    poly82.ps[3] = Point(487.924, 893.057);\n    new ShapeRef(router, poly82, 82);\n    \n    Polygon poly83(4);\n    poly83.ps[0] = Point(627.924, 893.057);\n    poly83.ps[1] = Point(627.924, 913.057);\n    poly83.ps[2] = Point(607.924, 913.057);\n    poly83.ps[3] = Point(607.924, 893.057);\n    new ShapeRef(router, poly83, 83);\n    \n    Polygon poly84(4);\n    poly84.ps[0] = Point(387.924, 151.557);\n    poly84.ps[1] = Point(387.924, 171.557);\n    poly84.ps[2] = Point(367.924, 171.557);\n    poly84.ps[3] = Point(367.924, 151.557);\n    new ShapeRef(router, poly84, 84);\n    \n    Polygon poly79(4);\n    poly79.ps[0] = Point(387.924, 753.557);\n    poly79.ps[1] = Point(387.924, 773.557);\n    poly79.ps[2] = Point(367.924, 773.557);\n    poly79.ps[3] = Point(367.924, 753.557);\n    new ShapeRef(router, poly79, 79);\n    \n    Polygon poly80(4);\n    poly80.ps[0] = Point(507.924, 753.557);\n    poly80.ps[1] = Point(507.924, 773.557);\n    poly80.ps[2] = Point(487.924, 773.557);\n    poly80.ps[3] = Point(487.924, 753.557);\n    new ShapeRef(router, poly80, 80);\n    \n    Polygon poly81(4);\n    poly81.ps[0] = Point(627.924, 753.557);\n    poly81.ps[1] = Point(627.924, 773.557);\n    poly81.ps[2] = Point(607.924, 773.557);\n    poly81.ps[3] = Point(607.924, 753.557);\n    new ShapeRef(router, poly81, 81);\n    \n    Polygon poly21(4);\n    poly21.ps[0] = Point(937.924, 141.557);\n    poly21.ps[1] = Point(937.924, 181.557);\n    poly21.ps[2] = Point(897.924, 181.557);\n    poly21.ps[3] = Point(897.924, 141.557);\n    new ShapeRef(router, poly21, 21);\n    \n    Polygon poly7(4);\n    poly7.ps[0] = Point(1278.92, -80.6578);\n    poly7.ps[1] = Point(1278.92, -40.6578);\n    poly7.ps[2] = Point(1238.92, -40.6578);\n    poly7.ps[3] = Point(1238.92, -80.6578);\n    new ShapeRef(router, poly7, 7);\n    \n    Polygon poly45(4);\n    poly45.ps[0] = Point(577.924, 34.8422);\n    poly45.ps[1] = Point(577.924, 74.8422);\n    poly45.ps[2] = Point(537.924, 74.8422);\n    poly45.ps[3] = Point(537.924, 34.8422);\n    new ShapeRef(router, poly45, 45);\n    \n    Polygon poly76(4);\n    poly76.ps[0] = Point(147.924, 753.557);\n    poly76.ps[1] = Point(147.924, 773.557);\n    poly76.ps[2] = Point(127.924, 773.557);\n    poly76.ps[3] = Point(127.924, 753.557);\n    new ShapeRef(router, poly76, 76);\n    \n    Polygon poly77(4);\n    poly77.ps[0] = Point(267.924, 753.557);\n    poly77.ps[1] = Point(267.924, 773.557);\n    poly77.ps[2] = Point(247.924, 773.557);\n    poly77.ps[3] = Point(247.924, 753.557);\n    new ShapeRef(router, poly77, 77);\n    \n    Polygon poly78(4);\n    poly78.ps[0] = Point(387.924, 617.557);\n    poly78.ps[1] = Point(387.924, 637.557);\n    poly78.ps[2] = Point(367.924, 637.557);\n    poly78.ps[3] = Point(367.924, 617.557);\n    new ShapeRef(router, poly78, 78);\n    \n    Polygon poly130(4);\n    poly130.ps[0] = Point(525.924, 365.557);\n    poly130.ps[1] = Point(525.924, 405.557);\n    poly130.ps[2] = Point(469.924, 405.557);\n    poly130.ps[3] = Point(469.924, 365.557);\n    new ShapeRef(router, poly130, 130);\n    \n    Polygon poly131(4);\n    poly131.ps[0] = Point(645.924, 457.557);\n    poly131.ps[1] = Point(645.924, 497.557);\n    poly131.ps[2] = Point(589.924, 497.557);\n    poly131.ps[3] = Point(589.924, 457.557);\n    new ShapeRef(router, poly131, 131);\n    \n    Polygon poly132(4);\n    poly132.ps[0] = Point(645.924, 365.557);\n    poly132.ps[1] = Point(645.924, 405.557);\n    poly132.ps[2] = Point(589.924, 405.557);\n    poly132.ps[3] = Point(589.924, 365.557);\n    new ShapeRef(router, poly132, 132);\n    \n    Polygon poly133(4);\n    poly133.ps[0] = Point(885.924, 273.557);\n    poly133.ps[1] = Point(885.924, 313.557);\n    poly133.ps[2] = Point(829.924, 313.557);\n    poly133.ps[3] = Point(829.924, 273.557);\n    new ShapeRef(router, poly133, 133);\n    \n    Polygon poly134(4);\n    poly134.ps[0] = Point(885.924, 365.557);\n    poly134.ps[1] = Point(885.924, 405.557);\n    poly134.ps[2] = Point(829.924, 405.557);\n    poly134.ps[3] = Point(829.924, 365.557);\n    new ShapeRef(router, poly134, 134);\n    \n    Polygon poly135(4);\n    poly135.ps[0] = Point(885.924, 91.5565);\n    poly135.ps[1] = Point(885.924, 131.557);\n    poly135.ps[2] = Point(829.924, 131.557);\n    poly135.ps[3] = Point(829.924, 91.5565);\n    new ShapeRef(router, poly135, 135);\n    \n    Polygon poly136(4);\n    poly136.ps[0] = Point(765.924, 273.557);\n    poly136.ps[1] = Point(765.924, 313.557);\n    poly136.ps[2] = Point(709.924, 313.557);\n    poly136.ps[3] = Point(709.924, 273.557);\n    new ShapeRef(router, poly136, 136);\n    \n    Polygon poly137(4);\n    poly137.ps[0] = Point(1106.92, 318.557);\n    poly137.ps[1] = Point(1106.92, 358.557);\n    poly137.ps[2] = Point(1050.92, 358.557);\n    poly137.ps[3] = Point(1050.92, 318.557);\n    new ShapeRef(router, poly137, 137);\n    \n    Polygon poly138(4);\n    poly138.ps[0] = Point(1226.92, 318.557);\n    poly138.ps[1] = Point(1226.92, 358.557);\n    poly138.ps[2] = Point(1170.92, 358.557);\n    poly138.ps[3] = Point(1170.92, 318.557);\n    new ShapeRef(router, poly138, 138);\n    \n    Polygon poly139(4);\n    poly139.ps[0] = Point(1106.92, 82.3422);\n    poly139.ps[1] = Point(1106.92, 122.342);\n    poly139.ps[2] = Point(1050.92, 122.342);\n    poly139.ps[3] = Point(1050.92, 82.3422);\n    new ShapeRef(router, poly139, 139);\n    \n    Polygon poly140(4);\n    poly140.ps[0] = Point(1106.92, -9.65778);\n    poly140.ps[1] = Point(1106.92, 30.3422);\n    poly140.ps[2] = Point(1050.92, 30.3422);\n    poly140.ps[3] = Point(1050.92, -9.65778);\n    new ShapeRef(router, poly140, 140);\n    \n    Polygon poly141(4);\n    poly141.ps[0] = Point(1226.92, 82.3422);\n    poly141.ps[1] = Point(1226.92, 122.342);\n    poly141.ps[2] = Point(1170.92, 122.342);\n    poly141.ps[3] = Point(1170.92, 82.3422);\n    new ShapeRef(router, poly141, 141);\n    \n    Polygon poly142(4);\n    poly142.ps[0] = Point(1106.92, -130.658);\n    poly142.ps[1] = Point(1106.92, -90.6578);\n    poly142.ps[2] = Point(1050.92, -90.6578);\n    poly142.ps[3] = Point(1050.92, -130.658);\n    new ShapeRef(router, poly142, 142);\n    \n    Polygon poly143(4);\n    poly143.ps[0] = Point(986.924, 210.557);\n    poly143.ps[1] = Point(986.924, 250.557);\n    poly143.ps[2] = Point(930.924, 250.557);\n    poly143.ps[3] = Point(930.924, 210.557);\n    new ShapeRef(router, poly143, 143);\n    \n    Polygon poly144(4);\n    poly144.ps[0] = Point(765.924, 91.5565);\n    poly144.ps[1] = Point(765.924, 131.557);\n    poly144.ps[2] = Point(709.924, 131.557);\n    poly144.ps[3] = Point(709.924, 91.5565);\n    new ShapeRef(router, poly144, 144);\n    \n    Polygon poly145(4);\n    poly145.ps[0] = Point(765.924, 790.057);\n    poly145.ps[1] = Point(765.924, 830.057);\n    poly145.ps[2] = Point(709.924, 830.057);\n    poly145.ps[3] = Point(709.924, 790.057);\n    new ShapeRef(router, poly145, 145);\n    \n    Polygon poly146(4);\n    poly146.ps[0] = Point(45.9242, 232.5);\n    poly146.ps[1] = Point(45.9242, 272.5);\n    poly146.ps[2] = Point(-14.0758, 272.5);\n    poly146.ps[3] = Point(-14.0758, 232.5);\n    new ShapeRef(router, poly146, 146);\n    \n    Polygon poly147(4);\n    poly147.ps[0] = Point(-26.0758, 274.75);\n    poly147.ps[1] = Point(-26.0758, 334.75);\n    poly147.ps[2] = Point(-66.0758, 334.75);\n    poly147.ps[3] = Point(-66.0758, 274.75);\n    new ShapeRef(router, poly147, 147);\n    \n    Polygon poly69(4);\n    poly69.ps[0] = Point(267.924, 151.557);\n    poly69.ps[1] = Point(267.924, 171.557);\n    poly69.ps[2] = Point(247.924, 171.557);\n    poly69.ps[3] = Point(247.924, 151.557);\n    new ShapeRef(router, poly69, 69);\n    \n    Polygon poly102(4);\n    poly102.ps[0] = Point(1088.92, -70.6578);\n    poly102.ps[1] = Point(1088.92, -50.6578);\n    poly102.ps[2] = Point(1068.92, -50.6578);\n    poly102.ps[3] = Point(1068.92, -70.6578);\n    new ShapeRef(router, poly102, 102);\n    \n    Polygon poly103(4);\n    poly103.ps[0] = Point(968.924, 270.557);\n    poly103.ps[1] = Point(968.924, 290.557);\n    poly103.ps[2] = Point(948.924, 290.557);\n    poly103.ps[3] = Point(948.924, 270.557);\n    new ShapeRef(router, poly103, 103);\n    \n    Polygon poly104(4);\n    poly104.ps[0] = Point(747.924, 151.557);\n    poly104.ps[1] = Point(747.924, 171.557);\n    poly104.ps[2] = Point(727.924, 171.557);\n    poly104.ps[3] = Point(727.924, 151.557);\n    new ShapeRef(router, poly104, 104);\n    \n    Polygon poly105(4);\n    poly105.ps[0] = Point(747.924, 850.057);\n    poly105.ps[1] = Point(747.924, 870.057);\n    poly105.ps[2] = Point(727.924, 870.057);\n    poly105.ps[3] = Point(727.924, 850.057);\n    new ShapeRef(router, poly105, 105);\n    \n    Polygon poly106(4);\n    poly106.ps[0] = Point(765.924, -130.658);\n    poly106.ps[1] = Point(765.924, -90.6578);\n    poly106.ps[2] = Point(709.924, -90.6578);\n    poly106.ps[3] = Point(709.924, -130.658);\n    new ShapeRef(router, poly106, 106);\n    \n    Polygon poly107(4);\n    poly107.ps[0] = Point(165.924, -35.1578);\n    poly107.ps[1] = Point(165.924, 4.84222);\n    poly107.ps[2] = Point(109.924, 4.84222);\n    poly107.ps[3] = Point(109.924, -35.1578);\n    new ShapeRef(router, poly107, 107);\n    \n    Polygon poly108(4);\n    poly108.ps[0] = Point(165.924, 91.5565);\n    poly108.ps[1] = Point(165.924, 131.557);\n    poly108.ps[2] = Point(109.924, 131.557);\n    poly108.ps[3] = Point(109.924, 91.5565);\n    new ShapeRef(router, poly108, 108);\n    \n    Polygon poly109(4);\n    poly109.ps[0] = Point(285.924, 91.5565);\n    poly109.ps[1] = Point(285.924, 131.557);\n    poly109.ps[2] = Point(229.924, 131.557);\n    poly109.ps[3] = Point(229.924, 91.5565);\n    new ShapeRef(router, poly109, 109);\n    \n    Polygon poly110(4);\n    poly110.ps[0] = Point(287.924, 193.557);\n    poly110.ps[1] = Point(287.924, 233.557);\n    poly110.ps[2] = Point(231.924, 233.557);\n    poly110.ps[3] = Point(231.924, 193.557);\n    new ShapeRef(router, poly110, 110);\n    \n    Polygon poly111(4);\n    poly111.ps[0] = Point(285.924, 245.557);\n    poly111.ps[1] = Point(285.924, 285.557);\n    poly111.ps[2] = Point(229.924, 285.557);\n    poly111.ps[3] = Point(229.924, 245.557);\n    new ShapeRef(router, poly111, 111);\n    \n    Polygon poly112(4);\n    poly112.ps[0] = Point(167.924, 347.557);\n    poly112.ps[1] = Point(167.924, 387.557);\n    poly112.ps[2] = Point(111.924, 387.557);\n    poly112.ps[3] = Point(111.924, 347.557);\n    new ShapeRef(router, poly112, 112);\n    \n    Polygon poly113(4);\n    poly113.ps[0] = Point(165.924, 457.557);\n    poly113.ps[1] = Point(165.924, 497.557);\n    poly113.ps[2] = Point(109.924, 497.557);\n    poly113.ps[3] = Point(109.924, 457.557);\n    new ShapeRef(router, poly113, 113);\n    \n    Polygon poly114(4);\n    poly114.ps[0] = Point(165.924, 549.557);\n    poly114.ps[1] = Point(165.924, 589.557);\n    poly114.ps[2] = Point(109.924, 589.557);\n    poly114.ps[3] = Point(109.924, 549.557);\n    new ShapeRef(router, poly114, 114);\n    \n    Polygon poly115(4);\n    poly115.ps[0] = Point(167.924, 641.557);\n    poly115.ps[1] = Point(167.924, 681.557);\n    poly115.ps[2] = Point(111.924, 681.557);\n    poly115.ps[3] = Point(111.924, 641.557);\n    new ShapeRef(router, poly115, 115);\n    \n    Polygon poly20(4);\n    poly20.ps[0] = Point(337.924, 507.557);\n    poly20.ps[1] = Point(337.924, 547.557);\n    poly20.ps[2] = Point(297.924, 547.557);\n    poly20.ps[3] = Point(297.924, 507.557);\n    new ShapeRef(router, poly20, 20);\n    \n    Polygon poly44(4);\n    poly44.ps[0] = Point(97.9242, 507.557);\n    poly44.ps[1] = Point(97.9242, 547.557);\n    poly44.ps[2] = Point(57.9242, 547.557);\n    poly44.ps[3] = Point(57.9242, 507.557);\n    new ShapeRef(router, poly44, 44);\n    \n    Polygon poly11(4);\n    poly11.ps[0] = Point(817.924, -80.6578);\n    poly11.ps[1] = Point(817.924, -40.6578);\n    poly11.ps[2] = Point(777.924, -40.6578);\n    poly11.ps[3] = Point(777.924, -80.6578);\n    new ShapeRef(router, poly11, 11);\n    \n    Polygon poly16(4);\n    poly16.ps[0] = Point(337.924, 743.557);\n    poly16.ps[1] = Point(337.924, 783.557);\n    poly16.ps[2] = Point(297.924, 783.557);\n    poly16.ps[3] = Point(297.924, 743.557);\n    new ShapeRef(router, poly16, 16);\n    \n    Polygon poly13(4);\n    poly13.ps[0] = Point(1158.92, 323.557);\n    poly13.ps[1] = Point(1158.92, 363.557);\n    poly13.ps[2] = Point(1118.92, 363.557);\n    poly13.ps[3] = Point(1118.92, 323.557);\n    new ShapeRef(router, poly13, 13);\n    \n    Polygon poly74(4);\n    poly74.ps[0] = Point(147.924, 609.557);\n    poly74.ps[1] = Point(147.924, 629.557);\n    poly74.ps[2] = Point(127.924, 629.557);\n    poly74.ps[3] = Point(127.924, 609.557);\n    new ShapeRef(router, poly74, 74);\n    \n    Polygon poly41(4);\n    poly41.ps[0] = Point(577.924, 743.557);\n    poly41.ps[1] = Point(577.924, 783.557);\n    poly41.ps[2] = Point(537.924, 783.557);\n    poly41.ps[3] = Point(537.924, 743.557);\n    new ShapeRef(router, poly41, 41);\n    \n    Polygon poly72(4);\n    poly72.ps[0] = Point(87.9242, 357.557);\n    poly72.ps[1] = Point(87.9242, 377.557);\n    poly72.ps[2] = Point(67.9242, 377.557);\n    poly72.ps[3] = Point(67.9242, 357.557);\n    new ShapeRef(router, poly72, 72);\n    \n    Polygon poly27(4);\n    poly27.ps[0] = Point(577.924, 507.557);\n    poly27.ps[1] = Point(577.924, 547.557);\n    poly27.ps[2] = Point(537.924, 547.557);\n    poly27.ps[3] = Point(537.924, 507.557);\n    new ShapeRef(router, poly27, 27);\n    \n    Polygon poly28(4);\n    poly28.ps[0] = Point(817.924, 323.557);\n    poly28.ps[1] = Point(817.924, 363.557);\n    poly28.ps[2] = Point(777.924, 363.557);\n    poly28.ps[3] = Point(777.924, 323.557);\n    new ShapeRef(router, poly28, 28);\n    \n    Polygon poly48(4);\n    poly48.ps[0] = Point(97.9242, 743.557);\n    poly48.ps[1] = Point(97.9242, 783.557);\n    poly48.ps[2] = Point(57.9242, 783.557);\n    poly48.ps[3] = Point(57.9242, 743.557);\n    new ShapeRef(router, poly48, 48);\n    \n    Polygon poly6(4);\n    poly6.ps[0] = Point(1371.92, -80.6578);\n    poly6.ps[1] = Point(1371.92, -40.6578);\n    poly6.ps[2] = Point(1331.92, -40.6578);\n    poly6.ps[3] = Point(1331.92, -80.6578);\n    new ShapeRef(router, poly6, 6);\n    \n    Polygon poly10(4);\n    poly10.ps[0] = Point(937.924, -80.6578);\n    poly10.ps[1] = Point(937.924, -40.6578);\n    poly10.ps[2] = Point(897.924, -40.6578);\n    poly10.ps[3] = Point(897.924, -80.6578);\n    new ShapeRef(router, poly10, 10);\n    \n    Polygon poly64(4);\n    poly64.ps[0] = Point(817.924, 554.057);\n    poly64.ps[1] = Point(817.924, 594.057);\n    poly64.ps[2] = Point(777.924, 594.057);\n    poly64.ps[3] = Point(777.924, 554.057);\n    new ShapeRef(router, poly64, 64);\n    \n    Polygon poly46(4);\n    poly46.ps[0] = Point(577.924, 415.557);\n    poly46.ps[1] = Point(577.924, 455.557);\n    poly46.ps[2] = Point(537.924, 455.557);\n    poly46.ps[3] = Point(537.924, 415.557);\n    new ShapeRef(router, poly46, 46);\n    \n    Polygon poly34(4);\n    poly34.ps[0] = Point(1278.92, 323.557);\n    poly34.ps[1] = Point(1278.92, 363.557);\n    poly34.ps[2] = Point(1238.92, 363.557);\n    poly34.ps[3] = Point(1238.92, 323.557);\n    new ShapeRef(router, poly34, 34);\n    \n    Polygon poly40(4);\n    poly40.ps[0] = Point(97.9242, 141.557);\n    poly40.ps[1] = Point(97.9242, 181.557);\n    poly40.ps[2] = Point(57.9242, 181.557);\n    poly40.ps[3] = Point(57.9242, 141.557);\n    new ShapeRef(router, poly40, 40);\n    \n    Polygon poly31(4);\n    poly31.ps[0] = Point(1278.92, 141.557);\n    poly31.ps[1] = Point(1278.92, 181.557);\n    poly31.ps[2] = Point(1238.92, 181.557);\n    poly31.ps[3] = Point(1238.92, 141.557);\n    new ShapeRef(router, poly31, 31);\n    \n    Polygon poly56(4);\n    poly56.ps[0] = Point(457.924, -44.6578);\n    poly56.ps[1] = Point(457.924, -4.65778);\n    poly56.ps[2] = Point(417.924, -4.65778);\n    poly56.ps[3] = Point(417.924, -44.6578);\n    new ShapeRef(router, poly56, 56);\n    \n    Polygon poly63(4);\n    poly63.ps[0] = Point(457.924, 507.557);\n    poly63.ps[1] = Point(457.924, 547.557);\n    poly63.ps[2] = Point(417.924, 547.557);\n    poly63.ps[3] = Point(417.924, 507.557);\n    new ShapeRef(router, poly63, 63);\n    \n    Polygon poly14(4);\n    poly14.ps[0] = Point(1158.92, 141.557);\n    poly14.ps[1] = Point(1158.92, 181.557);\n    poly14.ps[2] = Point(1118.92, 181.557);\n    poly14.ps[3] = Point(1118.92, 141.557);\n    new ShapeRef(router, poly14, 14);\n    \n    Polygon poly43(4);\n    poly43.ps[0] = Point(1038.92, 1.84222);\n    poly43.ps[1] = Point(1038.92, 41.8422);\n    poly43.ps[2] = Point(998.924, 41.8422);\n    poly43.ps[3] = Point(998.924, 1.84222);\n    new ShapeRef(router, poly43, 43);\n    \n    Polygon poly32(4);\n    poly32.ps[0] = Point(1038.92, 141.557);\n    poly32.ps[1] = Point(1038.92, 181.557);\n    poly32.ps[2] = Point(998.924, 181.557);\n    poly32.ps[3] = Point(998.924, 141.557);\n    new ShapeRef(router, poly32, 32);\n    \n    Polygon poly67(4);\n    poly67.ps[0] = Point(147.924, 24.8422);\n    poly67.ps[1] = Point(147.924, 44.8422);\n    poly67.ps[2] = Point(127.924, 44.8422);\n    poly67.ps[3] = Point(127.924, 24.8422);\n    new ShapeRef(router, poly67, 67);\n    \n    Polygon poly68(4);\n    poly68.ps[0] = Point(147.924, 151.557);\n    poly68.ps[1] = Point(147.924, 171.557);\n    poly68.ps[2] = Point(127.924, 171.557);\n    poly68.ps[3] = Point(127.924, 151.557);\n    new ShapeRef(router, poly68, 68);\n    \n    Polygon poly57(4);\n    poly57.ps[0] = Point(817.924, 141.557);\n    poly57.ps[1] = Point(817.924, 181.557);\n    poly57.ps[2] = Point(777.924, 181.557);\n    poly57.ps[3] = Point(777.924, 141.557);\n    new ShapeRef(router, poly57, 57);\n    \n    Polygon poly71(4);\n    poly71.ps[0] = Point(267.924, 305.557);\n    poly71.ps[1] = Point(267.924, 325.557);\n    poly71.ps[2] = Point(247.924, 325.557);\n    poly71.ps[3] = Point(247.924, 305.557);\n    new ShapeRef(router, poly71, 71);\n    \n    Polygon poly39(4);\n    poly39.ps[0] = Point(457.924, 141.557);\n    poly39.ps[1] = Point(457.924, 181.557);\n    poly39.ps[2] = Point(417.924, 181.557);\n    poly39.ps[3] = Point(417.924, 141.557);\n    new ShapeRef(router, poly39, 39);\n    \n    Polygon poly38(4);\n    poly38.ps[0] = Point(217.924, 507.557);\n    poly38.ps[1] = Point(217.924, 547.557);\n    poly38.ps[2] = Point(177.924, 547.557);\n    poly38.ps[3] = Point(177.924, 507.557);\n    new ShapeRef(router, poly38, 38);\n    \n    Polygon poly29(4);\n    poly29.ps[0] = Point(1038.92, 415.557);\n    poly29.ps[1] = Point(1038.92, 455.557);\n    poly29.ps[2] = Point(998.924, 455.557);\n    poly29.ps[3] = Point(998.924, 415.557);\n    new ShapeRef(router, poly29, 29);\n    \n    Polygon poly5(4);\n    poly5.ps[0] = Point(1371.92, -22.1578);\n    poly5.ps[1] = Point(1371.92, 17.8422);\n    poly5.ps[2] = Point(1331.92, 17.8422);\n    poly5.ps[3] = Point(1331.92, -22.1578);\n    new ShapeRef(router, poly5, 5);\n    \n    Polygon poly65(4);\n    poly65.ps[0] = Point(97.9242, 599.557);\n    poly65.ps[1] = Point(97.9242, 639.557);\n    poly65.ps[2] = Point(57.9242, 639.557);\n    poly65.ps[3] = Point(57.9242, 599.557);\n    new ShapeRef(router, poly65, 65);\n    \n    Polygon poly15(4);\n    poly15.ps[0] = Point(1158.92, 415.557);\n    poly15.ps[1] = Point(1158.92, 455.557);\n    poly15.ps[2] = Point(1118.92, 455.557);\n    poly15.ps[3] = Point(1118.92, 415.557);\n    new ShapeRef(router, poly15, 15);\n    \n    Polygon poly4(4);\n    poly4.ps[0] = Point(1371.92, 29.8422);\n    poly4.ps[1] = Point(1371.92, 69.8422);\n    poly4.ps[2] = Point(1331.92, 69.8422);\n    poly4.ps[3] = Point(1331.92, 29.8422);\n    new ShapeRef(router, poly4, 4);\n    \n    Polygon poly55(4);\n    poly55.ps[0] = Point(457.924, 7.34222);\n    poly55.ps[1] = Point(457.924, 47.3422);\n    poly55.ps[2] = Point(417.924, 47.3422);\n    poly55.ps[3] = Point(417.924, 7.34222);\n    new ShapeRef(router, poly55, 55);\n    \n    Polygon poly35(4);\n    poly35.ps[0] = Point(1158.92, 40.3422);\n    poly35.ps[1] = Point(1158.92, 80.3422);\n    poly35.ps[2] = Point(1118.92, 80.3422);\n    poly35.ps[3] = Point(1118.92, 40.3422);\n    new ShapeRef(router, poly35, 35);\n    \n    Polygon poly70(4);\n    poly70.ps[0] = Point(207.924, 203.557);\n    poly70.ps[1] = Point(207.924, 223.557);\n    poly70.ps[2] = Point(187.924, 223.557);\n    poly70.ps[3] = Point(187.924, 203.557);\n    new ShapeRef(router, poly70, 70);\n    \n    Polygon poly50(4);\n    poly50.ps[0] = Point(272.5, -82.1578);\n    poly50.ps[1] = Point(272.5, -47.1578);\n    poly50.ps[2] = Point(35.5, -47.1578);\n    poly50.ps[3] = Point(35.5, -82.1578);\n    new ShapeRef(router, poly50, 50);\n    \n    Polygon poly33(4);\n    poly33.ps[0] = Point(937.924, 415.557);\n    poly33.ps[1] = Point(937.924, 455.557);\n    poly33.ps[2] = Point(897.924, 455.557);\n    poly33.ps[3] = Point(897.924, 415.557);\n    new ShapeRef(router, poly33, 33);\n    \n    Polygon poly12(4);\n    poly12.ps[0] = Point(1038.92, 260.557);\n    poly12.ps[1] = Point(1038.92, 300.557);\n    poly12.ps[2] = Point(998.924, 300.557);\n    poly12.ps[3] = Point(998.924, 260.557);\n    new ShapeRef(router, poly12, 12);\n    \n    Polygon poly51(4);\n    poly51.ps[0] = Point(1038.92, 323.557);\n    poly51.ps[1] = Point(1038.92, 363.557);\n    poly51.ps[2] = Point(998.924, 363.557);\n    poly51.ps[3] = Point(998.924, 323.557);\n    new ShapeRef(router, poly51, 51);\n    \n    Polygon poly62(4);\n    poly62.ps[0] = Point(577.924, 629.557);\n    poly62.ps[1] = Point(577.924, 669.557);\n    poly62.ps[2] = Point(537.924, 669.557);\n    poly62.ps[3] = Point(537.924, 629.557);\n    new ShapeRef(router, poly62, 62);\n    \n    Polygon poly53(4);\n    poly53.ps[0] = Point(577.924, 323.557);\n    poly53.ps[1] = Point(577.924, 363.557);\n    poly53.ps[2] = Point(537.924, 363.557);\n    poly53.ps[3] = Point(537.924, 323.557);\n    new ShapeRef(router, poly53, 53);\n    \n    Polygon poly17(4);\n    poly17.ps[0] = Point(577.924, 883.057);\n    poly17.ps[1] = Point(577.924, 923.057);\n    poly17.ps[2] = Point(537.924, 923.057);\n    poly17.ps[3] = Point(537.924, 883.057);\n    new ShapeRef(router, poly17, 17);\n    \n    Polygon poly22(4);\n    poly22.ps[0] = Point(697.924, 34.8422);\n    poly22.ps[1] = Point(697.924, 74.8422);\n    poly22.ps[2] = Point(657.924, 74.8422);\n    poly22.ps[3] = Point(657.924, 34.8422);\n    new ShapeRef(router, poly22, 22);\n    \n    Polygon poly26(4);\n    poly26.ps[0] = Point(697.924, 743.557);\n    poly26.ps[1] = Point(697.924, 783.557);\n    poly26.ps[2] = Point(657.924, 783.557);\n    poly26.ps[3] = Point(657.924, 743.557);\n    new ShapeRef(router, poly26, 26);\n    \n    ConnRef *connRef256 = new ConnRef(router, 256);\n    ConnEnd srcPt256(Point(737.924, 293.557), 15);\n    connRef256->setSourceEndpoint(srcPt256);\n    ConnEnd dstPt256(Point(737.924, 343.557), 15);\n    connRef256->setDestEndpoint(dstPt256);\n    connRef256->setRoutingType((ConnType)2);\n\n    ConnRef *connRef257 = new ConnRef(router, 257);\n    ConnEnd srcPt257(Point(1078.92, 338.557), 15);\n    connRef257->setSourceEndpoint(srcPt257);\n    ConnEnd dstPt257(Point(1078.92, 388.557), 15);\n    connRef257->setDestEndpoint(dstPt257);\n    connRef257->setRoutingType((ConnType)2);\n\n    ConnRef *connRef258 = new ConnRef(router, 258);\n    ConnEnd srcPt258(Point(1198.92, 338.557), 15);\n    connRef258->setSourceEndpoint(srcPt258);\n    ConnEnd dstPt258(Point(1198.92, 388.557), 15);\n    connRef258->setDestEndpoint(dstPt258);\n    connRef258->setRoutingType((ConnType)2);\n\n    ConnRef *connRef259 = new ConnRef(router, 259);\n    ConnEnd srcPt259(Point(1078.92, 102.342), 15);\n    connRef259->setSourceEndpoint(srcPt259);\n    ConnEnd dstPt259(Point(1078.92, 152.342), 15);\n    connRef259->setDestEndpoint(dstPt259);\n    connRef259->setRoutingType((ConnType)2);\n\n    ConnRef *connRef260 = new ConnRef(router, 260);\n    ConnEnd srcPt260(Point(1078.92, 10.3422), 15);\n    connRef260->setSourceEndpoint(srcPt260);\n    ConnEnd dstPt260(Point(1078.92, 60.3422), 15);\n    connRef260->setDestEndpoint(dstPt260);\n    connRef260->setRoutingType((ConnType)2);\n\n    ConnRef *connRef261 = new ConnRef(router, 261);\n    ConnEnd srcPt261(Point(1198.92, 102.342), 15);\n    connRef261->setSourceEndpoint(srcPt261);\n    ConnEnd dstPt261(Point(1198.92, 152.342), 15);\n    connRef261->setDestEndpoint(dstPt261);\n    connRef261->setRoutingType((ConnType)2);\n\n    ConnRef *connRef262 = new ConnRef(router, 262);\n    ConnEnd srcPt262(Point(1078.92, -110.658), 15);\n    connRef262->setSourceEndpoint(srcPt262);\n    ConnEnd dstPt262(Point(1078.92, -60.6578), 15);\n    connRef262->setDestEndpoint(dstPt262);\n    connRef262->setRoutingType((ConnType)2);\n\n    ConnRef *connRef263 = new ConnRef(router, 263);\n    ConnEnd srcPt263(Point(958.924, 230.557), 15);\n    connRef263->setSourceEndpoint(srcPt263);\n    ConnEnd dstPt263(Point(958.924, 280.557), 15);\n    connRef263->setDestEndpoint(dstPt263);\n    connRef263->setRoutingType((ConnType)2);\n\n    ConnRef *connRef264 = new ConnRef(router, 264);\n    ConnEnd srcPt264(Point(737.924, 111.557), 15);\n    connRef264->setSourceEndpoint(srcPt264);\n    ConnEnd dstPt264(Point(737.924, 161.557), 15);\n    connRef264->setDestEndpoint(dstPt264);\n    connRef264->setRoutingType((ConnType)2);\n\n    ConnRef *connRef265 = new ConnRef(router, 265);\n    ConnEnd srcPt265(Point(737.924, 810.057), 15);\n    connRef265->setSourceEndpoint(srcPt265);\n    ConnEnd dstPt265(Point(737.924, 860.057), 15);\n    connRef265->setDestEndpoint(dstPt265);\n    connRef265->setRoutingType((ConnType)2);\n\n    ConnRef *connRef266 = new ConnRef(router, 266);\n    ConnEnd srcPt266(Point(77.9242, 161.557), 15);\n    connRef266->setSourceEndpoint(srcPt266);\n    ConnEnd dstPt266(Point(40.9242, 252.5), 15);\n    connRef266->setDestEndpoint(dstPt266);\n    connRef266->setRoutingType((ConnType)2);\n\n    ConnRef *connRef267 = new ConnRef(router, 267);\n    ConnEnd srcPt267(Point(77.9242, 763.557), 15);\n    connRef267->setSourceEndpoint(srcPt267);\n    ConnEnd dstPt267(Point(-46.0758, 329.75), 15);\n    connRef267->setDestEndpoint(dstPt267);\n    connRef267->setRoutingType((ConnType)2);\n\n    ConnRef *connRef148 = new ConnRef(router, 148);\n    ConnEnd srcPt148(Point(1018.92, -60.6578), 15);\n    connRef148->setSourceEndpoint(srcPt148);\n    ConnEnd dstPt148(Point(1068.92, -60.6578), 15);\n    connRef148->setDestEndpoint(dstPt148);\n    connRef148->setRoutingType((ConnType)2);\n\n    ConnRef *connRef149 = new ConnRef(router, 149);\n    ConnEnd srcPt149(Point(1138.92, 161.557), 15);\n    connRef149->setSourceEndpoint(srcPt149);\n    ConnEnd dstPt149(Point(1188.92, 152.342), 15);\n    connRef149->setDestEndpoint(dstPt149);\n    connRef149->setRoutingType((ConnType)2);\n\n    ConnRef *connRef150 = new ConnRef(router, 150);\n    ConnEnd srcPt150(Point(1138.92, 435.557), 15);\n    connRef150->setSourceEndpoint(srcPt150);\n    ConnEnd dstPt150(Point(1188.92, 388.557), 15);\n    connRef150->setDestEndpoint(dstPt150);\n    connRef150->setRoutingType((ConnType)2);\n\n    ConnRef *connRef151 = new ConnRef(router, 151);\n    ConnEnd srcPt151(Point(317.924, 763.557), 15);\n    connRef151->setSourceEndpoint(srcPt151);\n    ConnEnd dstPt151(Point(367.924, 627.557), 15);\n    connRef151->setDestEndpoint(dstPt151);\n    connRef151->setRoutingType((ConnType)2);\n\n    ConnRef *connRef152 = new ConnRef(router, 152);\n    ConnEnd srcPt152(Point(317.924, 763.557), 15);\n    connRef152->setSourceEndpoint(srcPt152);\n    ConnEnd dstPt152(Point(367.924, 763.557), 15);\n    connRef152->setDestEndpoint(dstPt152);\n    connRef152->setRoutingType((ConnType)2);\n\n    ConnRef *connRef153 = new ConnRef(router, 153);\n    ConnEnd srcPt153(Point(317.924, 763.557), 15);\n    connRef153->setSourceEndpoint(srcPt153);\n    ConnEnd dstPt153(Point(487.924, 903.057), 15);\n    connRef153->setDestEndpoint(dstPt153);\n    connRef153->setRoutingType((ConnType)2);\n\n    ConnRef *connRef154 = new ConnRef(router, 154);\n    ConnEnd srcPt154(Point(317.924, 763.557), 15);\n    connRef154->setSourceEndpoint(srcPt154);\n    ConnEnd dstPt154(Point(727.924, 574.057), 15);\n    connRef154->setDestEndpoint(dstPt154);\n    connRef154->setRoutingType((ConnType)2);\n\n    ConnRef *connRef155 = new ConnRef(router, 155);\n    ConnEnd srcPt155(Point(557.924, 903.057), 15);\n    connRef155->setSourceEndpoint(srcPt155);\n    ConnEnd dstPt155(Point(607.924, 903.057), 15);\n    connRef155->setDestEndpoint(dstPt155);\n    connRef155->setRoutingType((ConnType)2);\n\n    ConnRef *connRef156 = new ConnRef(router, 156);\n    ConnEnd srcPt156(Point(197.924, 763.557), 15);\n    connRef156->setSourceEndpoint(srcPt156);\n    ConnEnd dstPt156(Point(247.924, 763.557), 15);\n    connRef156->setDestEndpoint(dstPt156);\n    connRef156->setRoutingType((ConnType)2);\n\n    ConnRef *connRef157 = new ConnRef(router, 157);\n    ConnEnd srcPt157(Point(147.924, 161.557), 15);\n    connRef157->setSourceEndpoint(srcPt157);\n    ConnEnd dstPt157(Point(197.924, 161.557), 15);\n    connRef157->setDestEndpoint(dstPt157);\n    connRef157->setRoutingType((ConnType)2);\n\n    ConnRef *connRef158 = new ConnRef(router, 158);\n    ConnEnd srcPt158(Point(197.924, 161.557), 15);\n    connRef158->setSourceEndpoint(srcPt158);\n    ConnEnd dstPt158(Point(247.924, 161.557), 15);\n    connRef158->setDestEndpoint(dstPt158);\n    connRef158->setRoutingType((ConnType)2);\n\n    ConnRef *connRef159 = new ConnRef(router, 159);\n    ConnEnd srcPt159(Point(197.924, 161.557), 15);\n    connRef159->setSourceEndpoint(srcPt159);\n    ConnEnd dstPt159(Point(197.924, 203.557), 15);\n    connRef159->setDestEndpoint(dstPt159);\n    connRef159->setRoutingType((ConnType)2);\n\n    ConnRef *connRef160 = new ConnRef(router, 160);\n    ConnEnd srcPt160(Point(317.924, 161.557), 15);\n    connRef160->setSourceEndpoint(srcPt160);\n    ConnEnd dstPt160(Point(727.924, -60.6578), 15);\n    connRef160->setDestEndpoint(dstPt160);\n    connRef160->setRoutingType((ConnType)2);\n\n    ConnRef *connRef161 = new ConnRef(router, 161);\n    ConnEnd srcPt161(Point(317.924, 161.557), 15);\n    connRef161->setSourceEndpoint(srcPt161);\n    ConnEnd dstPt161(Point(367.924, 161.557), 15);\n    connRef161->setDestEndpoint(dstPt161);\n    connRef161->setRoutingType((ConnType)2);\n\n    ConnRef *connRef162 = new ConnRef(router, 162);\n    ConnEnd srcPt162(Point(317.924, 161.557), 15);\n    connRef162->setSourceEndpoint(srcPt162);\n    ConnEnd dstPt162(Point(367.924, 27.3422), 15);\n    connRef162->setDestEndpoint(dstPt162);\n    connRef162->setRoutingType((ConnType)2);\n\n    ConnRef *connRef163 = new ConnRef(router, 163);\n    ConnEnd srcPt163(Point(317.924, 161.557), 15);\n    connRef163->setSourceEndpoint(srcPt163);\n    ConnEnd dstPt163(Point(487.924, 435.557), 15);\n    connRef163->setDestEndpoint(dstPt163);\n    connRef163->setRoutingType((ConnType)2);\n\n    ConnRef *connRef164 = new ConnRef(router, 164);\n    ConnEnd srcPt164(Point(437.924, 763.557), 15);\n    connRef164->setSourceEndpoint(srcPt164);\n    ConnEnd dstPt164(Point(487.924, 763.557), 15);\n    connRef164->setDestEndpoint(dstPt164);\n    connRef164->setRoutingType((ConnType)2);\n\n    ConnRef *connRef165 = new ConnRef(router, 165);\n    ConnEnd srcPt165(Point(437.924, 763.557), 15);\n    connRef165->setSourceEndpoint(srcPt165);\n    ConnEnd dstPt165(Point(727.924, 860.057), 15);\n    connRef165->setDestEndpoint(dstPt165);\n    connRef165->setRoutingType((ConnType)2);\n\n    ConnRef *connRef166 = new ConnRef(router, 166);\n    ConnEnd srcPt166(Point(557.924, 527.557), 15);\n    connRef166->setSourceEndpoint(srcPt166);\n    ConnEnd dstPt166(Point(607.924, 527.557), 15);\n    connRef166->setDestEndpoint(dstPt166);\n    connRef166->setRoutingType((ConnType)2);\n\n    ConnRef *connRef167 = new ConnRef(router, 167);\n    ConnEnd srcPt167(Point(797.924, 343.557), 15);\n    connRef167->setSourceEndpoint(srcPt167);\n    ConnEnd dstPt167(Point(847.924, 343.557), 15);\n    connRef167->setDestEndpoint(dstPt167);\n    connRef167->setRoutingType((ConnType)2);\n\n    ConnRef *connRef168 = new ConnRef(router, 168);\n    ConnEnd srcPt168(Point(797.924, 343.557), 15);\n    connRef168->setSourceEndpoint(srcPt168);\n    ConnEnd dstPt168(Point(847.924, 435.557), 15);\n    connRef168->setDestEndpoint(dstPt168);\n    connRef168->setRoutingType((ConnType)2);\n\n    ConnRef *connRef169 = new ConnRef(router, 169);\n    ConnEnd srcPt169(Point(1018.92, 435.557), 15);\n    connRef169->setSourceEndpoint(srcPt169);\n    ConnEnd dstPt169(Point(1068.92, 388.557), 15);\n    connRef169->setDestEndpoint(dstPt169);\n    connRef169->setRoutingType((ConnType)2);\n\n    ConnRef *connRef170 = new ConnRef(router, 170);\n    ConnEnd srcPt170(Point(1018.92, 161.557), 15);\n    connRef170->setSourceEndpoint(srcPt170);\n    ConnEnd dstPt170(Point(1068.92, 152.342), 15);\n    connRef170->setDestEndpoint(dstPt170);\n    connRef170->setRoutingType((ConnType)2);\n\n    ConnRef *connRef171 = new ConnRef(router, 171);\n    ConnEnd srcPt171(Point(1018.92, 161.557), 15);\n    connRef171->setSourceEndpoint(srcPt171);\n    ConnEnd dstPt171(Point(1068.92, 60.3422), 15);\n    connRef171->setDestEndpoint(dstPt171);\n    connRef171->setRoutingType((ConnType)2);\n\n    ConnRef *connRef172 = new ConnRef(router, 172);\n    ConnEnd srcPt172(Point(267.924, 315.557), 15);\n    connRef172->setSourceEndpoint(srcPt172);\n    ConnEnd dstPt172(Point(437.924, 161.557), 15);\n    connRef172->setDestEndpoint(dstPt172);\n    connRef172->setRoutingType((ConnType)2);\n\n    ConnRef *connRef173 = new ConnRef(router, 173);\n    ConnEnd srcPt173(Point(437.924, 161.557), 15);\n    connRef173->setSourceEndpoint(srcPt173);\n    ConnEnd dstPt173(Point(487.924, 45.8422), 15);\n    connRef173->setDestEndpoint(dstPt173);\n    connRef173->setRoutingType((ConnType)2);\n\n    ConnRef *connRef174 = new ConnRef(router, 174);\n    ConnEnd srcPt174(Point(437.924, 161.557), 15);\n    connRef174->setSourceEndpoint(srcPt174);\n    ConnEnd dstPt174(Point(727.924, 161.557), 15);\n    connRef174->setDestEndpoint(dstPt174);\n    connRef174->setRoutingType((ConnType)2);\n\n    ConnRef *connRef175 = new ConnRef(router, 175);\n    ConnEnd srcPt175(Point(77.9242, 161.557), 15);\n    connRef175->setSourceEndpoint(srcPt175);\n    ConnEnd dstPt175(Point(127.924, 161.557), 15);\n    connRef175->setDestEndpoint(dstPt175);\n    connRef175->setRoutingType((ConnType)2);\n\n    ConnRef *connRef176 = new ConnRef(router, 176);\n    ConnEnd srcPt176(Point(77.9242, 161.557), 15);\n    connRef176->setSourceEndpoint(srcPt176);\n    ConnEnd dstPt176(Point(77.9242, 357.557), 15);\n    connRef176->setDestEndpoint(dstPt176);\n    connRef176->setRoutingType((ConnType)2);\n\n    ConnRef *connRef177 = new ConnRef(router, 177);\n    ConnEnd srcPt177(Point(557.924, 763.557), 15);\n    connRef177->setSourceEndpoint(srcPt177);\n    ConnEnd dstPt177(Point(607.924, 763.557), 15);\n    connRef177->setDestEndpoint(dstPt177);\n    connRef177->setRoutingType((ConnType)2);\n\n    ConnRef *connRef178 = new ConnRef(router, 178);\n    ConnEnd srcPt178(Point(77.9242, 527.557), 15);\n    connRef178->setSourceEndpoint(srcPt178);\n    ConnEnd dstPt178(Point(127.924, 527.557), 15);\n    connRef178->setDestEndpoint(dstPt178);\n    connRef178->setRoutingType((ConnType)2);\n\n    ConnRef *connRef179 = new ConnRef(router, 179);\n    ConnEnd srcPt179(Point(557.924, 54.8422), 15);\n    connRef179->setSourceEndpoint(srcPt179);\n    ConnEnd dstPt179(Point(607.924, 45.8422), 15);\n    connRef179->setDestEndpoint(dstPt179);\n    connRef179->setRoutingType((ConnType)2);\n\n    ConnRef *connRef180 = new ConnRef(router, 180);\n    ConnEnd srcPt180(Point(557.924, 435.557), 15);\n    connRef180->setSourceEndpoint(srcPt180);\n    ConnEnd dstPt180(Point(607.924, 435.557), 15);\n    connRef180->setDestEndpoint(dstPt180);\n    connRef180->setRoutingType((ConnType)2);\n\n    ConnRef *connRef181 = new ConnRef(router, 181);\n    ConnEnd srcPt181(Point(77.9242, 763.557), 15);\n    connRef181->setSourceEndpoint(srcPt181);\n    ConnEnd dstPt181(Point(77.9242, 671.557), 15);\n    connRef181->setDestEndpoint(dstPt181);\n    connRef181->setRoutingType((ConnType)2);\n\n    ConnRef *connRef182 = new ConnRef(router, 182);\n    ConnEnd srcPt182(Point(77.9242, 763.557), 15);\n    connRef182->setSourceEndpoint(srcPt182);\n    ConnEnd dstPt182(Point(127.924, 763.557), 15);\n    connRef182->setDestEndpoint(dstPt182);\n    connRef182->setRoutingType((ConnType)2);\n\n    ConnRef *connRef183 = new ConnRef(router, 183);\n    ConnEnd srcPt183(Point(197.924, 315.557), 15);\n    connRef183->setSourceEndpoint(srcPt183);\n    ConnEnd dstPt183(Point(247.924, 315.557), 15);\n    connRef183->setDestEndpoint(dstPt183);\n    connRef183->setRoutingType((ConnType)2);\n\n    ConnRef *connRef184 = new ConnRef(router, 184);\n    ConnEnd srcPt184(Point(677.924, 343.557), 15);\n    connRef184->setSourceEndpoint(srcPt184);\n    ConnEnd dstPt184(Point(727.924, 343.557), 15);\n    connRef184->setDestEndpoint(dstPt184);\n    connRef184->setRoutingType((ConnType)2);\n\n    ConnRef *connRef185 = new ConnRef(router, 185);\n    ConnEnd srcPt185(Point(797.924, 161.557), 15);\n    connRef185->setSourceEndpoint(srcPt185);\n    ConnEnd dstPt185(Point(847.924, 161.557), 15);\n    connRef185->setDestEndpoint(dstPt185);\n    connRef185->setRoutingType((ConnType)2);\n\n    ConnRef *connRef186 = new ConnRef(router, 186);\n    ConnEnd srcPt186(Point(77.9242, 34.8422), 15);\n    connRef186->setSourceEndpoint(srcPt186);\n    ConnEnd dstPt186(Point(127.924, 34.8422), 15);\n    connRef186->setDestEndpoint(dstPt186);\n    connRef186->setRoutingType((ConnType)2);\n\n    ConnRef *connRef187 = new ConnRef(router, 187);\n    ConnEnd srcPt187(Point(437.924, 527.557), 15);\n    connRef187->setSourceEndpoint(srcPt187);\n    ConnEnd dstPt187(Point(487.924, 527.557), 15);\n    connRef187->setDestEndpoint(dstPt187);\n    connRef187->setRoutingType((ConnType)2);\n\n    ConnRef *connRef188 = new ConnRef(router, 188);\n    ConnEnd srcPt188(Point(77.9242, 619.557), 15);\n    connRef188->setSourceEndpoint(srcPt188);\n    ConnEnd dstPt188(Point(127.924, 619.557), 15);\n    connRef188->setDestEndpoint(dstPt188);\n    connRef188->setRoutingType((ConnType)2);\n\n    ConnRef *connRef189 = new ConnRef(router, 189);\n    ConnEnd srcPt189(Point(747.924, -60.6578), 15);\n    connRef189->setSourceEndpoint(srcPt189);\n    ConnEnd dstPt189(Point(797.924, -60.6578), 15);\n    connRef189->setDestEndpoint(dstPt189);\n    connRef189->setRoutingType((ConnType)2);\n\n    ConnRef *connRef190 = new ConnRef(router, 190);\n    ConnEnd srcPt190(Point(147.924, 34.8422), 15);\n    connRef190->setSourceEndpoint(srcPt190);\n    ConnEnd dstPt190(Point(197.924, 161.557), 15);\n    connRef190->setDestEndpoint(dstPt190);\n    connRef190->setRoutingType((ConnType)2);\n\n    ConnRef *connRef191 = new ConnRef(router, 191);\n    ConnEnd srcPt191(Point(267.924, 161.557), 15);\n    connRef191->setSourceEndpoint(srcPt191);\n    ConnEnd dstPt191(Point(317.924, 161.557), 15);\n    connRef191->setDestEndpoint(dstPt191);\n    connRef191->setRoutingType((ConnType)2);\n\n    ConnRef *connRef192 = new ConnRef(router, 192);\n    ConnEnd srcPt192(Point(197.924, 223.557), 15);\n    connRef192->setSourceEndpoint(srcPt192);\n    ConnEnd dstPt192(Point(197.924, 315.557), 15);\n    connRef192->setDestEndpoint(dstPt192);\n    connRef192->setRoutingType((ConnType)2);\n\n    ConnRef *connRef193 = new ConnRef(router, 193);\n    ConnEnd srcPt193(Point(77.9242, 377.557), 15);\n    connRef193->setSourceEndpoint(srcPt193);\n    ConnEnd dstPt193(Point(77.9242, 527.557), 15);\n    connRef193->setDestEndpoint(dstPt193);\n    connRef193->setRoutingType((ConnType)2);\n\n    ConnRef *connRef194 = new ConnRef(router, 194);\n    ConnEnd srcPt194(Point(147.924, 527.557), 15);\n    connRef194->setSourceEndpoint(srcPt194);\n    ConnEnd dstPt194(Point(197.924, 527.557), 15);\n    connRef194->setDestEndpoint(dstPt194);\n    connRef194->setRoutingType((ConnType)2);\n\n    ConnRef *connRef195 = new ConnRef(router, 195);\n    ConnEnd srcPt195(Point(147.924, 619.557), 15);\n    connRef195->setSourceEndpoint(srcPt195);\n    ConnEnd dstPt195(Point(197.924, 763.557), 15);\n    connRef195->setDestEndpoint(dstPt195);\n    connRef195->setRoutingType((ConnType)2);\n\n    ConnRef *connRef196 = new ConnRef(router, 196);\n    ConnEnd srcPt196(Point(77.9242, 651.557), 15);\n    connRef196->setSourceEndpoint(srcPt196);\n    ConnEnd dstPt196(Point(77.9242, 619.557), 15);\n    connRef196->setDestEndpoint(dstPt196);\n    connRef196->setRoutingType((ConnType)2);\n\n    ConnRef *connRef197 = new ConnRef(router, 197);\n    ConnEnd srcPt197(Point(147.924, 763.557), 15);\n    connRef197->setSourceEndpoint(srcPt197);\n    ConnEnd dstPt197(Point(197.924, 763.557), 15);\n    connRef197->setDestEndpoint(dstPt197);\n    connRef197->setRoutingType((ConnType)2);\n\n    ConnRef *connRef198 = new ConnRef(router, 198);\n    ConnEnd srcPt198(Point(267.924, 763.557), 15);\n    connRef198->setSourceEndpoint(srcPt198);\n    ConnEnd dstPt198(Point(317.924, 763.557), 15);\n    connRef198->setDestEndpoint(dstPt198);\n    connRef198->setRoutingType((ConnType)2);\n\n    ConnRef *connRef199 = new ConnRef(router, 199);\n    ConnEnd srcPt199(Point(387.924, 627.557), 15);\n    connRef199->setSourceEndpoint(srcPt199);\n    ConnEnd dstPt199(Point(437.924, 627.557), 15);\n    connRef199->setDestEndpoint(dstPt199);\n    connRef199->setRoutingType((ConnType)2);\n\n    ConnRef *connRef200 = new ConnRef(router, 200);\n    ConnEnd srcPt200(Point(387.924, 763.557), 15);\n    connRef200->setSourceEndpoint(srcPt200);\n    ConnEnd dstPt200(Point(437.924, 763.557), 15);\n    connRef200->setDestEndpoint(dstPt200);\n    connRef200->setRoutingType((ConnType)2);\n\n    ConnRef *connRef201 = new ConnRef(router, 201);\n    ConnEnd srcPt201(Point(507.924, 763.557), 15);\n    connRef201->setSourceEndpoint(srcPt201);\n    ConnEnd dstPt201(Point(557.924, 763.557), 15);\n    connRef201->setDestEndpoint(dstPt201);\n    connRef201->setRoutingType((ConnType)2);\n\n    ConnRef *connRef202 = new ConnRef(router, 202);\n    ConnEnd srcPt202(Point(627.924, 763.557), 15);\n    connRef202->setSourceEndpoint(srcPt202);\n    ConnEnd dstPt202(Point(677.924, 763.557), 15);\n    connRef202->setDestEndpoint(dstPt202);\n    connRef202->setRoutingType((ConnType)2);\n\n    ConnRef *connRef203 = new ConnRef(router, 203);\n    ConnEnd srcPt203(Point(507.924, 903.057), 15);\n    connRef203->setSourceEndpoint(srcPt203);\n    ConnEnd dstPt203(Point(557.924, 903.057), 15);\n    connRef203->setDestEndpoint(dstPt203);\n    connRef203->setRoutingType((ConnType)2);\n\n    ConnRef *connRef204 = new ConnRef(router, 204);\n    ConnEnd srcPt204(Point(627.924, 903.057), 15);\n    connRef204->setSourceEndpoint(srcPt204);\n    ConnEnd dstPt204(Point(677.924, 903.057), 15);\n    connRef204->setDestEndpoint(dstPt204);\n    connRef204->setRoutingType((ConnType)2);\n\n    ConnRef *connRef205 = new ConnRef(router, 205);\n    ConnEnd srcPt205(Point(387.924, 161.557), 15);\n    connRef205->setSourceEndpoint(srcPt205);\n    ConnEnd dstPt205(Point(437.924, 161.557), 15);\n    connRef205->setDestEndpoint(dstPt205);\n    connRef205->setRoutingType((ConnType)2);\n\n    ConnRef *connRef206 = new ConnRef(router, 206);\n    ConnEnd srcPt206(Point(387.924, 27.3422), 15);\n    connRef206->setSourceEndpoint(srcPt206);\n    ConnEnd dstPt206(Point(437.924, 27.3422), 15);\n    connRef206->setDestEndpoint(dstPt206);\n    connRef206->setRoutingType((ConnType)2);\n\n    ConnRef *connRef207 = new ConnRef(router, 207);\n    ConnEnd srcPt207(Point(507.924, 45.8422), 15);\n    connRef207->setSourceEndpoint(srcPt207);\n    ConnEnd dstPt207(Point(557.924, 54.8422), 15);\n    connRef207->setDestEndpoint(dstPt207);\n    connRef207->setRoutingType((ConnType)2);\n\n    ConnRef *connRef208 = new ConnRef(router, 208);\n    ConnEnd srcPt208(Point(627.924, 45.8422), 15);\n    connRef208->setSourceEndpoint(srcPt208);\n    ConnEnd dstPt208(Point(677.924, 54.8422), 15);\n    connRef208->setDestEndpoint(dstPt208);\n    connRef208->setRoutingType((ConnType)2);\n\n    ConnRef *connRef209 = new ConnRef(router, 209);\n    ConnEnd srcPt209(Point(747.924, 574.057), 15);\n    connRef209->setSourceEndpoint(srcPt209);\n    ConnEnd dstPt209(Point(797.924, 574.057), 15);\n    connRef209->setDestEndpoint(dstPt209);\n    connRef209->setRoutingType((ConnType)2);\n\n    ConnRef *connRef210 = new ConnRef(router, 210);\n    ConnEnd srcPt210(Point(507.924, 527.557), 15);\n    connRef210->setSourceEndpoint(srcPt210);\n    ConnEnd dstPt210(Point(557.924, 527.557), 15);\n    connRef210->setDestEndpoint(dstPt210);\n    connRef210->setRoutingType((ConnType)2);\n\n    ConnRef *connRef211 = new ConnRef(router, 211);\n    ConnEnd srcPt211(Point(507.924, 435.557), 15);\n    connRef211->setSourceEndpoint(srcPt211);\n    ConnEnd dstPt211(Point(557.924, 435.557), 15);\n    connRef211->setDestEndpoint(dstPt211);\n    connRef211->setRoutingType((ConnType)2);\n\n    ConnRef *connRef212 = new ConnRef(router, 212);\n    ConnEnd srcPt212(Point(627.924, 527.557), 15);\n    connRef212->setSourceEndpoint(srcPt212);\n    ConnEnd dstPt212(Point(677.924, 527.557), 15);\n    connRef212->setDestEndpoint(dstPt212);\n    connRef212->setRoutingType((ConnType)2);\n\n    ConnRef *connRef213 = new ConnRef(router, 213);\n    ConnEnd srcPt213(Point(627.924, 435.557), 15);\n    connRef213->setSourceEndpoint(srcPt213);\n    ConnEnd dstPt213(Point(677.924, 435.557), 15);\n    connRef213->setDestEndpoint(dstPt213);\n    connRef213->setRoutingType((ConnType)2);\n\n    ConnRef *connRef214 = new ConnRef(router, 214);\n    ConnEnd srcPt214(Point(867.924, 343.557), 15);\n    connRef214->setSourceEndpoint(srcPt214);\n    ConnEnd dstPt214(Point(917.924, 343.557), 15);\n    connRef214->setDestEndpoint(dstPt214);\n    connRef214->setRoutingType((ConnType)2);\n\n    ConnRef *connRef215 = new ConnRef(router, 215);\n    ConnEnd srcPt215(Point(867.924, 435.557), 15);\n    connRef215->setSourceEndpoint(srcPt215);\n    ConnEnd dstPt215(Point(917.924, 435.557), 15);\n    connRef215->setDestEndpoint(dstPt215);\n    connRef215->setRoutingType((ConnType)2);\n\n    ConnRef *connRef216 = new ConnRef(router, 216);\n    ConnEnd srcPt216(Point(867.924, 161.557), 15);\n    connRef216->setSourceEndpoint(srcPt216);\n    ConnEnd dstPt216(Point(917.924, 161.557), 15);\n    connRef216->setDestEndpoint(dstPt216);\n    connRef216->setRoutingType((ConnType)2);\n\n    ConnRef *connRef217 = new ConnRef(router, 217);\n    ConnEnd srcPt217(Point(747.924, 343.557), 15);\n    connRef217->setSourceEndpoint(srcPt217);\n    ConnEnd dstPt217(Point(797.924, 343.557), 15);\n    connRef217->setDestEndpoint(dstPt217);\n    connRef217->setRoutingType((ConnType)2);\n\n    ConnRef *connRef218 = new ConnRef(router, 218);\n    ConnEnd srcPt218(Point(1088.92, 388.557), 15);\n    connRef218->setSourceEndpoint(srcPt218);\n    ConnEnd dstPt218(Point(1138.92, 435.557), 15);\n    connRef218->setDestEndpoint(dstPt218);\n    connRef218->setRoutingType((ConnType)2);\n\n    ConnRef *connRef219 = new ConnRef(router, 219);\n    ConnEnd srcPt219(Point(1208.92, 388.557), 15);\n    connRef219->setSourceEndpoint(srcPt219);\n    ConnEnd dstPt219(Point(1258.92, 435.557), 15);\n    connRef219->setDestEndpoint(dstPt219);\n    connRef219->setRoutingType((ConnType)2);\n\n    ConnRef *connRef220 = new ConnRef(router, 220);\n    ConnEnd srcPt220(Point(1088.92, 152.342), 15);\n    connRef220->setSourceEndpoint(srcPt220);\n    ConnEnd dstPt220(Point(1138.92, 161.557), 15);\n    connRef220->setDestEndpoint(dstPt220);\n    connRef220->setRoutingType((ConnType)2);\n\n    ConnRef *connRef221 = new ConnRef(router, 221);\n    ConnEnd srcPt221(Point(1088.92, 60.3422), 15);\n    connRef221->setSourceEndpoint(srcPt221);\n    ConnEnd dstPt221(Point(1138.92, 60.3422), 15);\n    connRef221->setDestEndpoint(dstPt221);\n    connRef221->setRoutingType((ConnType)2);\n\n    ConnRef *connRef222 = new ConnRef(router, 222);\n    ConnEnd srcPt222(Point(1208.92, 152.342), 15);\n    connRef222->setSourceEndpoint(srcPt222);\n    ConnEnd dstPt222(Point(1258.92, 161.557), 15);\n    connRef222->setDestEndpoint(dstPt222);\n    connRef222->setRoutingType((ConnType)2);\n\n    ConnRef *connRef223 = new ConnRef(router, 223);\n    ConnEnd srcPt223(Point(1088.92, -60.6578), 15);\n    connRef223->setSourceEndpoint(srcPt223);\n    ConnEnd dstPt223(Point(1138.92, -60.6578), 15);\n    connRef223->setDestEndpoint(dstPt223);\n    connRef223->setRoutingType((ConnType)2);\n\n    ConnRef *connRef224 = new ConnRef(router, 224);\n    ConnEnd srcPt224(Point(747.924, 161.557), 15);\n    connRef224->setSourceEndpoint(srcPt224);\n    ConnEnd dstPt224(Point(797.924, 161.557), 15);\n    connRef224->setDestEndpoint(dstPt224);\n    connRef224->setRoutingType((ConnType)2);\n\n    ConnRef *connRef225 = new ConnRef(router, 225);\n    ConnEnd srcPt225(Point(747.924, 860.057), 15);\n    connRef225->setSourceEndpoint(srcPt225);\n    ConnEnd dstPt225(Point(797.924, 860.057), 15);\n    connRef225->setDestEndpoint(dstPt225);\n    connRef225->setRoutingType((ConnType)2);\n\n    ConnRef *connRef226 = new ConnRef(router, 226);\n    ConnEnd srcPt226(Point(737.924, -110.658), 15);\n    connRef226->setSourceEndpoint(srcPt226);\n    ConnEnd dstPt226(Point(737.924, -60.6578), 15);\n    connRef226->setDestEndpoint(dstPt226);\n    connRef226->setRoutingType((ConnType)2);\n\n    ConnRef *connRef227 = new ConnRef(router, 227);\n    ConnEnd srcPt227(Point(137.924, -15.1578), 15);\n    connRef227->setSourceEndpoint(srcPt227);\n    ConnEnd dstPt227(Point(137.924, 34.8422), 15);\n    connRef227->setDestEndpoint(dstPt227);\n    connRef227->setRoutingType((ConnType)2);\n\n    ConnRef *connRef228 = new ConnRef(router, 228);\n    ConnEnd srcPt228(Point(137.924, 111.557), 15);\n    connRef228->setSourceEndpoint(srcPt228);\n    ConnEnd dstPt228(Point(137.924, 161.557), 15);\n    connRef228->setDestEndpoint(dstPt228);\n    connRef228->setRoutingType((ConnType)2);\n\n    ConnRef *connRef229 = new ConnRef(router, 229);\n    ConnEnd srcPt229(Point(257.924, 111.557), 15);\n    connRef229->setSourceEndpoint(srcPt229);\n    ConnEnd dstPt229(Point(257.924, 161.557), 15);\n    connRef229->setDestEndpoint(dstPt229);\n    connRef229->setRoutingType((ConnType)2);\n\n    ConnRef *connRef230 = new ConnRef(router, 230);\n    ConnEnd srcPt230(Point(259.924, 213.557), 15);\n    connRef230->setSourceEndpoint(srcPt230);\n    ConnEnd dstPt230(Point(197.924, 213.557), 15);\n    connRef230->setDestEndpoint(dstPt230);\n    connRef230->setRoutingType((ConnType)2);\n\n    ConnRef *connRef231 = new ConnRef(router, 231);\n    ConnEnd srcPt231(Point(257.924, 265.557), 15);\n    connRef231->setSourceEndpoint(srcPt231);\n    ConnEnd dstPt231(Point(257.924, 315.557), 15);\n    connRef231->setDestEndpoint(dstPt231);\n    connRef231->setRoutingType((ConnType)2);\n\n    ConnRef *connRef232 = new ConnRef(router, 232);\n    ConnEnd srcPt232(Point(139.924, 367.557), 15);\n    connRef232->setSourceEndpoint(srcPt232);\n    ConnEnd dstPt232(Point(77.9242, 367.557), 15);\n    connRef232->setDestEndpoint(dstPt232);\n    connRef232->setRoutingType((ConnType)2);\n\n    ConnRef *connRef233 = new ConnRef(router, 233);\n    ConnEnd srcPt233(Point(137.924, 477.557), 15);\n    connRef233->setSourceEndpoint(srcPt233);\n    ConnEnd dstPt233(Point(137.924, 527.557), 15);\n    connRef233->setDestEndpoint(dstPt233);\n    connRef233->setRoutingType((ConnType)2);\n\n    ConnRef *connRef234 = new ConnRef(router, 234);\n    ConnEnd srcPt234(Point(137.924, 569.557), 15);\n    connRef234->setSourceEndpoint(srcPt234);\n    ConnEnd dstPt234(Point(137.924, 619.557), 15);\n    connRef234->setDestEndpoint(dstPt234);\n    connRef234->setRoutingType((ConnType)2);\n\n    ConnRef *connRef235 = new ConnRef(router, 235);\n    ConnEnd srcPt235(Point(139.924, 661.557), 15);\n    connRef235->setSourceEndpoint(srcPt235);\n    ConnEnd dstPt235(Point(77.9242, 661.557), 15);\n    connRef235->setDestEndpoint(dstPt235);\n    connRef235->setRoutingType((ConnType)2);\n\n    ConnRef *connRef236 = new ConnRef(router, 236);\n    ConnEnd srcPt236(Point(137.924, 713.557), 15);\n    connRef236->setSourceEndpoint(srcPt236);\n    ConnEnd dstPt236(Point(137.924, 763.557), 15);\n    connRef236->setDestEndpoint(dstPt236);\n    connRef236->setRoutingType((ConnType)2);\n\n    ConnRef *connRef237 = new ConnRef(router, 237);\n    ConnEnd srcPt237(Point(257.924, 713.557), 15);\n    connRef237->setSourceEndpoint(srcPt237);\n    ConnEnd dstPt237(Point(257.924, 763.557), 15);\n    connRef237->setDestEndpoint(dstPt237);\n    connRef237->setRoutingType((ConnType)2);\n\n    ConnRef *connRef238 = new ConnRef(router, 238);\n    ConnEnd srcPt238(Point(377.924, 577.557), 15);\n    connRef238->setSourceEndpoint(srcPt238);\n    ConnEnd dstPt238(Point(377.924, 627.557), 15);\n    connRef238->setDestEndpoint(dstPt238);\n    connRef238->setRoutingType((ConnType)2);\n\n    ConnRef *connRef239 = new ConnRef(router, 239);\n    ConnEnd srcPt239(Point(377.924, 713.557), 15);\n    connRef239->setSourceEndpoint(srcPt239);\n    ConnEnd dstPt239(Point(377.924, 763.557), 15);\n    connRef239->setDestEndpoint(dstPt239);\n    connRef239->setRoutingType((ConnType)2);\n\n    ConnRef *connRef240 = new ConnRef(router, 240);\n    ConnEnd srcPt240(Point(497.924, 713.557), 15);\n    connRef240->setSourceEndpoint(srcPt240);\n    ConnEnd dstPt240(Point(497.924, 763.557), 15);\n    connRef240->setDestEndpoint(dstPt240);\n    connRef240->setRoutingType((ConnType)2);\n\n    ConnRef *connRef241 = new ConnRef(router, 241);\n    ConnEnd srcPt241(Point(617.924, 713.557), 15);\n    connRef241->setSourceEndpoint(srcPt241);\n    ConnEnd dstPt241(Point(617.924, 763.557), 15);\n    connRef241->setDestEndpoint(dstPt241);\n    connRef241->setRoutingType((ConnType)2);\n\n    ConnRef *connRef242 = new ConnRef(router, 242);\n    ConnEnd srcPt242(Point(497.924, 853.057), 15);\n    connRef242->setSourceEndpoint(srcPt242);\n    ConnEnd dstPt242(Point(497.924, 903.057), 15);\n    connRef242->setDestEndpoint(dstPt242);\n    connRef242->setRoutingType((ConnType)2);\n\n    ConnRef *connRef243 = new ConnRef(router, 243);\n    ConnEnd srcPt243(Point(617.924, 853.057), 15);\n    connRef243->setSourceEndpoint(srcPt243);\n    ConnEnd dstPt243(Point(617.924, 903.057), 15);\n    connRef243->setDestEndpoint(dstPt243);\n    connRef243->setRoutingType((ConnType)2);\n\n    ConnRef *connRef244 = new ConnRef(router, 244);\n    ConnEnd srcPt244(Point(377.924, 111.557), 15);\n    connRef244->setSourceEndpoint(srcPt244);\n    ConnEnd dstPt244(Point(377.924, 161.557), 15);\n    connRef244->setDestEndpoint(dstPt244);\n    connRef244->setRoutingType((ConnType)2);\n\n    ConnRef *connRef245 = new ConnRef(router, 245);\n    ConnEnd srcPt245(Point(377.924, -22.6578), 15);\n    connRef245->setSourceEndpoint(srcPt245);\n    ConnEnd dstPt245(Point(377.924, 27.3422), 15);\n    connRef245->setDestEndpoint(dstPt245);\n    connRef245->setRoutingType((ConnType)2);\n\n    ConnRef *connRef246 = new ConnRef(router, 246);\n    ConnEnd srcPt246(Point(497.924, -4.15778), 15);\n    connRef246->setSourceEndpoint(srcPt246);\n    ConnEnd dstPt246(Point(497.924, 45.8422), 15);\n    connRef246->setDestEndpoint(dstPt246);\n    connRef246->setRoutingType((ConnType)2);\n\n    ConnRef *connRef247 = new ConnRef(router, 247);\n    ConnEnd srcPt247(Point(617.924, -4.15778), 15);\n    connRef247->setSourceEndpoint(srcPt247);\n    ConnEnd dstPt247(Point(617.924, 45.8422), 15);\n    connRef247->setDestEndpoint(dstPt247);\n    connRef247->setRoutingType((ConnType)2);\n\n    ConnRef *connRef248 = new ConnRef(router, 248);\n    ConnEnd srcPt248(Point(737.924, 524.057), 15);\n    connRef248->setSourceEndpoint(srcPt248);\n    ConnEnd dstPt248(Point(737.924, 574.057), 15);\n    connRef248->setDestEndpoint(dstPt248);\n    connRef248->setRoutingType((ConnType)2);\n\n    ConnRef *connRef249 = new ConnRef(router, 249);\n    ConnEnd srcPt249(Point(497.924, 477.557), 15);\n    connRef249->setSourceEndpoint(srcPt249);\n    ConnEnd dstPt249(Point(497.924, 527.557), 15);\n    connRef249->setDestEndpoint(dstPt249);\n    connRef249->setRoutingType((ConnType)2);\n\n    ConnRef *connRef250 = new ConnRef(router, 250);\n    ConnEnd srcPt250(Point(497.924, 385.557), 15);\n    connRef250->setSourceEndpoint(srcPt250);\n    ConnEnd dstPt250(Point(497.924, 435.557), 15);\n    connRef250->setDestEndpoint(dstPt250);\n    connRef250->setRoutingType((ConnType)2);\n\n    ConnRef *connRef251 = new ConnRef(router, 251);\n    ConnEnd srcPt251(Point(617.924, 477.557), 15);\n    connRef251->setSourceEndpoint(srcPt251);\n    ConnEnd dstPt251(Point(617.924, 527.557), 15);\n    connRef251->setDestEndpoint(dstPt251);\n    connRef251->setRoutingType((ConnType)2);\n\n    ConnRef *connRef252 = new ConnRef(router, 252);\n    ConnEnd srcPt252(Point(617.924, 385.557), 15);\n    connRef252->setSourceEndpoint(srcPt252);\n    ConnEnd dstPt252(Point(617.924, 435.557), 15);\n    connRef252->setDestEndpoint(dstPt252);\n    connRef252->setRoutingType((ConnType)2);\n\n    ConnRef *connRef253 = new ConnRef(router, 253);\n    ConnEnd srcPt253(Point(857.924, 293.557), 15);\n    connRef253->setSourceEndpoint(srcPt253);\n    ConnEnd dstPt253(Point(857.924, 343.557), 15);\n    connRef253->setDestEndpoint(dstPt253);\n    connRef253->setRoutingType((ConnType)2);\n\n    ConnRef *connRef254 = new ConnRef(router, 254);\n    ConnEnd srcPt254(Point(857.924, 385.557), 15);\n    connRef254->setSourceEndpoint(srcPt254);\n    ConnEnd dstPt254(Point(857.924, 435.557), 15);\n    connRef254->setDestEndpoint(dstPt254);\n    connRef254->setRoutingType((ConnType)2);\n\n    ConnRef *connRef255 = new ConnRef(router, 255);\n    ConnEnd srcPt255(Point(857.924, 111.557), 15);\n    connRef255->setSourceEndpoint(srcPt255);\n    ConnEnd dstPt255(Point(857.924, 161.557), 15);\n    connRef255->setDestEndpoint(dstPt255);\n    connRef255->setRoutingType((ConnType)2);\n\n    router->processTransaction();\n    router->outputDiagram(\"output/lineSegWrapperCrash2\");\n    delete router;\n    return 0;\n};\n"
  },
  {
    "path": "cola/libavoid/tests/lineSegWrapperCrash3.cpp",
    "content": "#include \"libavoid/libavoid.h\"\nusing namespace Avoid;\nint main(void) {\n    Router *router = new Router(OrthogonalRouting);\n    router->setRoutingPenalty((PenaltyType)0, 50);\n    router->setRoutingPenalty((PenaltyType)1, 0);\n    router->setRoutingPenalty((PenaltyType)2, 0);\n    router->setRoutingPenalty((PenaltyType)3, 4000);\n    router->setRoutingPenalty((PenaltyType)4, 0);\n\n    Polygon poly46(4);\n    poly46.ps[0] = Point(577.924, 415.557);\n    poly46.ps[1] = Point(577.924, 455.557);\n    poly46.ps[2] = Point(537.924, 455.557);\n    poly46.ps[3] = Point(537.924, 415.557);\n    new ShapeRef(router, poly46, 46);\n    \n    Polygon poly69(4);\n    poly69.ps[0] = Point(267.924, 151.557);\n    poly69.ps[1] = Point(267.924, 171.557);\n    poly69.ps[2] = Point(247.924, 171.557);\n    poly69.ps[3] = Point(247.924, 151.557);\n    new ShapeRef(router, poly69, 69);\n    \n    Polygon poly3(4);\n    poly3.ps[0] = Point(1278.92, -22.1578);\n    poly3.ps[1] = Point(1278.92, 17.8422);\n    poly3.ps[2] = Point(1238.92, 17.8422);\n    poly3.ps[3] = Point(1238.92, -22.1578);\n    new ShapeRef(router, poly3, 3);\n    \n    Polygon poly1(4);\n    poly1.ps[0] = Point(817.924, 840.057);\n    poly1.ps[1] = Point(817.924, 880.057);\n    poly1.ps[2] = Point(777.924, 880.057);\n    poly1.ps[3] = Point(777.924, 840.057);\n    new ShapeRef(router, poly1, 1);\n    \n    Polygon poly117(4);\n    poly117.ps[0] = Point(285.924, 693.557);\n    poly117.ps[1] = Point(285.924, 733.557);\n    poly117.ps[2] = Point(229.924, 733.557);\n    poly117.ps[3] = Point(229.924, 693.557);\n    new ShapeRef(router, poly117, 117);\n    \n    Polygon poly118(4);\n    poly118.ps[0] = Point(405.924, 557.557);\n    poly118.ps[1] = Point(405.924, 597.557);\n    poly118.ps[2] = Point(349.924, 597.557);\n    poly118.ps[3] = Point(349.924, 557.557);\n    new ShapeRef(router, poly118, 118);\n    \n    Polygon poly119(4);\n    poly119.ps[0] = Point(405.924, 693.557);\n    poly119.ps[1] = Point(405.924, 733.557);\n    poly119.ps[2] = Point(349.924, 733.557);\n    poly119.ps[3] = Point(349.924, 693.557);\n    new ShapeRef(router, poly119, 119);\n    \n    Polygon poly120(4);\n    poly120.ps[0] = Point(525.924, 693.557);\n    poly120.ps[1] = Point(525.924, 733.557);\n    poly120.ps[2] = Point(469.924, 733.557);\n    poly120.ps[3] = Point(469.924, 693.557);\n    new ShapeRef(router, poly120, 120);\n    \n    Polygon poly121(4);\n    poly121.ps[0] = Point(645.924, 693.557);\n    poly121.ps[1] = Point(645.924, 733.557);\n    poly121.ps[2] = Point(589.924, 733.557);\n    poly121.ps[3] = Point(589.924, 693.557);\n    new ShapeRef(router, poly121, 121);\n    \n    Polygon poly122(4);\n    poly122.ps[0] = Point(525.924, 833.057);\n    poly122.ps[1] = Point(525.924, 873.057);\n    poly122.ps[2] = Point(469.924, 873.057);\n    poly122.ps[3] = Point(469.924, 833.057);\n    new ShapeRef(router, poly122, 122);\n    \n    Polygon poly123(4);\n    poly123.ps[0] = Point(645.924, 833.057);\n    poly123.ps[1] = Point(645.924, 873.057);\n    poly123.ps[2] = Point(589.924, 873.057);\n    poly123.ps[3] = Point(589.924, 833.057);\n    new ShapeRef(router, poly123, 123);\n    \n    Polygon poly124(4);\n    poly124.ps[0] = Point(405.924, 91.5565);\n    poly124.ps[1] = Point(405.924, 131.557);\n    poly124.ps[2] = Point(349.924, 131.557);\n    poly124.ps[3] = Point(349.924, 91.5565);\n    new ShapeRef(router, poly124, 124);\n    \n    Polygon poly125(4);\n    poly125.ps[0] = Point(405.924, -42.6578);\n    poly125.ps[1] = Point(405.924, -2.65778);\n    poly125.ps[2] = Point(349.924, -2.65778);\n    poly125.ps[3] = Point(349.924, -42.6578);\n    new ShapeRef(router, poly125, 125);\n    \n    Polygon poly126(4);\n    poly126.ps[0] = Point(525.924, -24.1578);\n    poly126.ps[1] = Point(525.924, 15.8422);\n    poly126.ps[2] = Point(469.924, 15.8422);\n    poly126.ps[3] = Point(469.924, -24.1578);\n    new ShapeRef(router, poly126, 126);\n    \n    Polygon poly127(4);\n    poly127.ps[0] = Point(645.924, -24.1578);\n    poly127.ps[1] = Point(645.924, 15.8422);\n    poly127.ps[2] = Point(589.924, 15.8422);\n    poly127.ps[3] = Point(589.924, -24.1578);\n    new ShapeRef(router, poly127, 127);\n    \n    Polygon poly128(4);\n    poly128.ps[0] = Point(765.924, 504.057);\n    poly128.ps[1] = Point(765.924, 544.057);\n    poly128.ps[2] = Point(709.924, 544.057);\n    poly128.ps[3] = Point(709.924, 504.057);\n    new ShapeRef(router, poly128, 128);\n    \n    Polygon poly6(4);\n    poly6.ps[0] = Point(1371.92, -80.6578);\n    poly6.ps[1] = Point(1371.92, -40.6578);\n    poly6.ps[2] = Point(1331.92, -40.6578);\n    poly6.ps[3] = Point(1331.92, -80.6578);\n    new ShapeRef(router, poly6, 6);\n    \n    Polygon poly52(4);\n    poly52.ps[0] = Point(217.924, 295.557);\n    poly52.ps[1] = Point(217.924, 335.557);\n    poly52.ps[2] = Point(177.924, 335.557);\n    poly52.ps[3] = Point(177.924, 295.557);\n    new ShapeRef(router, poly52, 52);\n    \n    Polygon poly65(4);\n    poly65.ps[0] = Point(97.9242, 599.557);\n    poly65.ps[1] = Point(97.9242, 639.557);\n    poly65.ps[2] = Point(57.9242, 639.557);\n    poly65.ps[3] = Point(57.9242, 599.557);\n    new ShapeRef(router, poly65, 65);\n    \n    Polygon poly56(4);\n    poly56.ps[0] = Point(457.924, -44.6578);\n    poly56.ps[1] = Point(457.924, -4.65778);\n    poly56.ps[2] = Point(417.924, -4.65778);\n    poly56.ps[3] = Point(417.924, -44.6578);\n    new ShapeRef(router, poly56, 56);\n    \n    Polygon poly96(4);\n    poly96.ps[0] = Point(747.924, 333.557);\n    poly96.ps[1] = Point(747.924, 353.557);\n    poly96.ps[2] = Point(727.924, 353.557);\n    poly96.ps[3] = Point(727.924, 333.557);\n    new ShapeRef(router, poly96, 96);\n    \n    Polygon poly97(4);\n    poly97.ps[0] = Point(1088.92, 378.557);\n    poly97.ps[1] = Point(1088.92, 398.557);\n    poly97.ps[2] = Point(1068.92, 398.557);\n    poly97.ps[3] = Point(1068.92, 378.557);\n    new ShapeRef(router, poly97, 97);\n    \n    Polygon poly98(4);\n    poly98.ps[0] = Point(1208.92, 378.557);\n    poly98.ps[1] = Point(1208.92, 398.557);\n    poly98.ps[2] = Point(1188.92, 398.557);\n    poly98.ps[3] = Point(1188.92, 378.557);\n    new ShapeRef(router, poly98, 98);\n    \n    Polygon poly99(4);\n    poly99.ps[0] = Point(1088.92, 142.342);\n    poly99.ps[1] = Point(1088.92, 162.342);\n    poly99.ps[2] = Point(1068.92, 162.342);\n    poly99.ps[3] = Point(1068.92, 142.342);\n    new ShapeRef(router, poly99, 99);\n    \n    Polygon poly100(4);\n    poly100.ps[0] = Point(1088.92, 50.3422);\n    poly100.ps[1] = Point(1088.92, 70.3422);\n    poly100.ps[2] = Point(1068.92, 70.3422);\n    poly100.ps[3] = Point(1068.92, 50.3422);\n    new ShapeRef(router, poly100, 100);\n    \n    Polygon poly101(4);\n    poly101.ps[0] = Point(1208.92, 142.342);\n    poly101.ps[1] = Point(1208.92, 162.342);\n    poly101.ps[2] = Point(1188.92, 162.342);\n    poly101.ps[3] = Point(1188.92, 142.342);\n    new ShapeRef(router, poly101, 101);\n    \n    Polygon poly102(4);\n    poly102.ps[0] = Point(1088.92, -70.6578);\n    poly102.ps[1] = Point(1088.92, -50.6578);\n    poly102.ps[2] = Point(1068.92, -50.6578);\n    poly102.ps[3] = Point(1068.92, -70.6578);\n    new ShapeRef(router, poly102, 102);\n    \n    Polygon poly103(4);\n    poly103.ps[0] = Point(968.924, 270.557);\n    poly103.ps[1] = Point(968.924, 290.557);\n    poly103.ps[2] = Point(948.924, 290.557);\n    poly103.ps[3] = Point(948.924, 270.557);\n    new ShapeRef(router, poly103, 103);\n    \n    Polygon poly104(4);\n    poly104.ps[0] = Point(747.924, 151.557);\n    poly104.ps[1] = Point(747.924, 171.557);\n    poly104.ps[2] = Point(727.924, 171.557);\n    poly104.ps[3] = Point(727.924, 151.557);\n    new ShapeRef(router, poly104, 104);\n    \n    Polygon poly143(4);\n    poly143.ps[0] = Point(986.924, 210.557);\n    poly143.ps[1] = Point(986.924, 250.557);\n    poly143.ps[2] = Point(930.924, 250.557);\n    poly143.ps[3] = Point(930.924, 210.557);\n    new ShapeRef(router, poly143, 143);\n    \n    Polygon poly144(4);\n    poly144.ps[0] = Point(765.924, 91.5565);\n    poly144.ps[1] = Point(765.924, 131.557);\n    poly144.ps[2] = Point(709.924, 131.557);\n    poly144.ps[3] = Point(709.924, 91.5565);\n    new ShapeRef(router, poly144, 144);\n    \n    Polygon poly145(4);\n    poly145.ps[0] = Point(765.924, 790.057);\n    poly145.ps[1] = Point(765.924, 830.057);\n    poly145.ps[2] = Point(709.924, 830.057);\n    poly145.ps[3] = Point(709.924, 790.057);\n    new ShapeRef(router, poly145, 145);\n    \n    Polygon poly146(4);\n    poly146.ps[0] = Point(45.9242, 232.5);\n    poly146.ps[1] = Point(45.9242, 272.5);\n    poly146.ps[2] = Point(-14.0758, 272.5);\n    poly146.ps[3] = Point(-14.0758, 232.5);\n    new ShapeRef(router, poly146, 146);\n    \n    Polygon poly147(4);\n    poly147.ps[0] = Point(-26.0758, 274.75);\n    poly147.ps[1] = Point(-26.0758, 334.75);\n    poly147.ps[2] = Point(-66.0758, 334.75);\n    poly147.ps[3] = Point(-66.0758, 274.75);\n    new ShapeRef(router, poly147, 147);\n    \n    Polygon poly60(4);\n    poly60.ps[0] = Point(937.924, 1.84222);\n    poly60.ps[1] = Point(937.924, 41.8422);\n    poly60.ps[2] = Point(897.924, 41.8422);\n    poly60.ps[3] = Point(897.924, 1.84222);\n    new ShapeRef(router, poly60, 60);\n    \n    Polygon poly61(4);\n    poly61.ps[0] = Point(577.924, -44.6578);\n    poly61.ps[1] = Point(577.924, -4.65778);\n    poly61.ps[2] = Point(537.924, -4.65778);\n    poly61.ps[3] = Point(537.924, -44.6578);\n    new ShapeRef(router, poly61, 61);\n    \n    Polygon poly26(4);\n    poly26.ps[0] = Point(697.924, 743.557);\n    poly26.ps[1] = Point(697.924, 783.557);\n    poly26.ps[2] = Point(657.924, 783.557);\n    poly26.ps[3] = Point(657.924, 743.557);\n    new ShapeRef(router, poly26, 26);\n    \n    Polygon poly11(4);\n    poly11.ps[0] = Point(817.924, -80.6578);\n    poly11.ps[1] = Point(817.924, -40.6578);\n    poly11.ps[2] = Point(777.924, -40.6578);\n    poly11.ps[3] = Point(777.924, -80.6578);\n    new ShapeRef(router, poly11, 11);\n    \n    Polygon poly5(4);\n    poly5.ps[0] = Point(1371.92, -22.1578);\n    poly5.ps[1] = Point(1371.92, 17.8422);\n    poly5.ps[2] = Point(1331.92, 17.8422);\n    poly5.ps[3] = Point(1331.92, -22.1578);\n    new ShapeRef(router, poly5, 5);\n    \n    Polygon poly13(4);\n    poly13.ps[0] = Point(1158.92, 323.557);\n    poly13.ps[1] = Point(1158.92, 363.557);\n    poly13.ps[2] = Point(1118.92, 363.557);\n    poly13.ps[3] = Point(1118.92, 323.557);\n    new ShapeRef(router, poly13, 13);\n    \n    Polygon poly45(4);\n    poly45.ps[0] = Point(577.924, 34.8422);\n    poly45.ps[1] = Point(577.924, 74.8422);\n    poly45.ps[2] = Point(537.924, 74.8422);\n    poly45.ps[3] = Point(537.924, 34.8422);\n    new ShapeRef(router, poly45, 45);\n    \n    Polygon poly55(4);\n    poly55.ps[0] = Point(457.924, 7.34222);\n    poly55.ps[1] = Point(457.924, 47.3422);\n    poly55.ps[2] = Point(417.924, 47.3422);\n    poly55.ps[3] = Point(417.924, 7.34222);\n    new ShapeRef(router, poly55, 55);\n    \n    Polygon poly50(4);\n    poly50.ps[0] = Point(272.5, -82.1578);\n    poly50.ps[1] = Point(272.5, -47.1578);\n    poly50.ps[2] = Point(35.5, -47.1578);\n    poly50.ps[3] = Point(35.5, -82.1578);\n    new ShapeRef(router, poly50, 50);\n    \n    Polygon poly70(4);\n    poly70.ps[0] = Point(207.924, 203.557);\n    poly70.ps[1] = Point(207.924, 223.557);\n    poly70.ps[2] = Point(187.924, 223.557);\n    poly70.ps[3] = Point(187.924, 203.557);\n    new ShapeRef(router, poly70, 70);\n    \n    Polygon poly71(4);\n    poly71.ps[0] = Point(267.924, 305.557);\n    poly71.ps[1] = Point(267.924, 325.557);\n    poly71.ps[2] = Point(247.924, 325.557);\n    poly71.ps[3] = Point(247.924, 305.557);\n    new ShapeRef(router, poly71, 71);\n    \n    Polygon poly75(4);\n    poly75.ps[0] = Point(87.9242, 651.557);\n    poly75.ps[1] = Point(87.9242, 671.557);\n    poly75.ps[2] = Point(67.9242, 671.557);\n    poly75.ps[3] = Point(67.9242, 651.557);\n    new ShapeRef(router, poly75, 75);\n    \n    Polygon poly76(4);\n    poly76.ps[0] = Point(147.924, 753.557);\n    poly76.ps[1] = Point(147.924, 773.557);\n    poly76.ps[2] = Point(127.924, 773.557);\n    poly76.ps[3] = Point(127.924, 753.557);\n    new ShapeRef(router, poly76, 76);\n    \n    Polygon poly77(4);\n    poly77.ps[0] = Point(267.924, 753.557);\n    poly77.ps[1] = Point(267.924, 773.557);\n    poly77.ps[2] = Point(247.924, 773.557);\n    poly77.ps[3] = Point(247.924, 753.557);\n    new ShapeRef(router, poly77, 77);\n    \n    Polygon poly78(4);\n    poly78.ps[0] = Point(387.924, 617.557);\n    poly78.ps[1] = Point(387.924, 637.557);\n    poly78.ps[2] = Point(367.924, 637.557);\n    poly78.ps[3] = Point(367.924, 617.557);\n    new ShapeRef(router, poly78, 78);\n    \n    Polygon poly79(4);\n    poly79.ps[0] = Point(387.924, 753.557);\n    poly79.ps[1] = Point(387.924, 773.557);\n    poly79.ps[2] = Point(367.924, 773.557);\n    poly79.ps[3] = Point(367.924, 753.557);\n    new ShapeRef(router, poly79, 79);\n    \n    Polygon poly80(4);\n    poly80.ps[0] = Point(507.924, 753.557);\n    poly80.ps[1] = Point(507.924, 773.557);\n    poly80.ps[2] = Point(487.924, 773.557);\n    poly80.ps[3] = Point(487.924, 753.557);\n    new ShapeRef(router, poly80, 80);\n    \n    Polygon poly81(4);\n    poly81.ps[0] = Point(627.924, 753.557);\n    poly81.ps[1] = Point(627.924, 773.557);\n    poly81.ps[2] = Point(607.924, 773.557);\n    poly81.ps[3] = Point(607.924, 753.557);\n    new ShapeRef(router, poly81, 81);\n    \n    Polygon poly82(4);\n    poly82.ps[0] = Point(507.924, 893.057);\n    poly82.ps[1] = Point(507.924, 913.057);\n    poly82.ps[2] = Point(487.924, 913.057);\n    poly82.ps[3] = Point(487.924, 893.057);\n    new ShapeRef(router, poly82, 82);\n    \n    Polygon poly83(4);\n    poly83.ps[0] = Point(627.924, 893.057);\n    poly83.ps[1] = Point(627.924, 913.057);\n    poly83.ps[2] = Point(607.924, 913.057);\n    poly83.ps[3] = Point(607.924, 893.057);\n    new ShapeRef(router, poly83, 83);\n    \n    Polygon poly84(4);\n    poly84.ps[0] = Point(387.924, 151.557);\n    poly84.ps[1] = Point(387.924, 171.557);\n    poly84.ps[2] = Point(367.924, 171.557);\n    poly84.ps[3] = Point(367.924, 151.557);\n    new ShapeRef(router, poly84, 84);\n    \n    Polygon poly85(4);\n    poly85.ps[0] = Point(387.924, 17.3422);\n    poly85.ps[1] = Point(387.924, 37.3422);\n    poly85.ps[2] = Point(367.924, 37.3422);\n    poly85.ps[3] = Point(367.924, 17.3422);\n    new ShapeRef(router, poly85, 85);\n    \n    Polygon poly2(4);\n    poly2.ps[0] = Point(577.924, 795.557);\n    poly2.ps[1] = Point(577.924, 835.557);\n    poly2.ps[2] = Point(537.924, 835.557);\n    poly2.ps[3] = Point(537.924, 795.557);\n    new ShapeRef(router, poly2, 2);\n    \n    Polygon poly17(4);\n    poly17.ps[0] = Point(577.924, 883.057);\n    poly17.ps[1] = Point(577.924, 923.057);\n    poly17.ps[2] = Point(537.924, 923.057);\n    poly17.ps[3] = Point(537.924, 883.057);\n    new ShapeRef(router, poly17, 17);\n    \n    Polygon poly25(4);\n    poly25.ps[0] = Point(697.924, 883.057);\n    poly25.ps[1] = Point(697.924, 923.057);\n    poly25.ps[2] = Point(657.924, 923.057);\n    poly25.ps[3] = Point(657.924, 883.057);\n    new ShapeRef(router, poly25, 25);\n    \n    Polygon poly59(4);\n    poly59.ps[0] = Point(937.924, 323.557);\n    poly59.ps[1] = Point(937.924, 363.557);\n    poly59.ps[2] = Point(897.924, 363.557);\n    poly59.ps[3] = Point(897.924, 323.557);\n    new ShapeRef(router, poly59, 59);\n    \n    Polygon poly42(4);\n    poly42.ps[0] = Point(697.924, 415.557);\n    poly42.ps[1] = Point(697.924, 455.557);\n    poly42.ps[2] = Point(657.924, 455.557);\n    poly42.ps[3] = Point(657.924, 415.557);\n    new ShapeRef(router, poly42, 42);\n    \n    Polygon poly57(4);\n    poly57.ps[0] = Point(817.924, 141.557);\n    poly57.ps[1] = Point(817.924, 181.557);\n    poly57.ps[2] = Point(777.924, 181.557);\n    poly57.ps[3] = Point(777.924, 141.557);\n    new ShapeRef(router, poly57, 57);\n    \n    Polygon poly62(4);\n    poly62.ps[0] = Point(577.924, 629.557);\n    poly62.ps[1] = Point(577.924, 669.557);\n    poly62.ps[2] = Point(537.924, 669.557);\n    poly62.ps[3] = Point(537.924, 629.557);\n    new ShapeRef(router, poly62, 62);\n    \n    Polygon poly34(4);\n    poly34.ps[0] = Point(1278.92, 323.557);\n    poly34.ps[1] = Point(1278.92, 363.557);\n    poly34.ps[2] = Point(1238.92, 363.557);\n    poly34.ps[3] = Point(1238.92, 323.557);\n    new ShapeRef(router, poly34, 34);\n    \n    Polygon poly10(4);\n    poly10.ps[0] = Point(937.924, -80.6578);\n    poly10.ps[1] = Point(937.924, -40.6578);\n    poly10.ps[2] = Point(897.924, -40.6578);\n    poly10.ps[3] = Point(897.924, -80.6578);\n    new ShapeRef(router, poly10, 10);\n    \n    Polygon poly18(4);\n    poly18.ps[0] = Point(217.924, 743.557);\n    poly18.ps[1] = Point(217.924, 783.557);\n    poly18.ps[2] = Point(177.924, 783.557);\n    poly18.ps[3] = Point(177.924, 743.557);\n    new ShapeRef(router, poly18, 18);\n    \n    Polygon poly41(4);\n    poly41.ps[0] = Point(577.924, 743.557);\n    poly41.ps[1] = Point(577.924, 783.557);\n    poly41.ps[2] = Point(537.924, 783.557);\n    poly41.ps[3] = Point(537.924, 743.557);\n    new ShapeRef(router, poly41, 41);\n    \n    Polygon poly30(4);\n    poly30.ps[0] = Point(1278.92, 415.557);\n    poly30.ps[1] = Point(1278.92, 455.557);\n    poly30.ps[2] = Point(1238.92, 455.557);\n    poly30.ps[3] = Point(1238.92, 415.557);\n    new ShapeRef(router, poly30, 30);\n    \n    Polygon poly28(4);\n    poly28.ps[0] = Point(817.924, 323.557);\n    poly28.ps[1] = Point(817.924, 363.557);\n    poly28.ps[2] = Point(777.924, 363.557);\n    poly28.ps[3] = Point(777.924, 323.557);\n    new ShapeRef(router, poly28, 28);\n    \n    Polygon poly7(4);\n    poly7.ps[0] = Point(1278.92, -80.6578);\n    poly7.ps[1] = Point(1278.92, -40.6578);\n    poly7.ps[2] = Point(1238.92, -40.6578);\n    poly7.ps[3] = Point(1238.92, -80.6578);\n    new ShapeRef(router, poly7, 7);\n    \n    Polygon poly86(4);\n    poly86.ps[0] = Point(507.924, 35.8422);\n    poly86.ps[1] = Point(507.924, 55.8422);\n    poly86.ps[2] = Point(487.924, 55.8422);\n    poly86.ps[3] = Point(487.924, 35.8422);\n    new ShapeRef(router, poly86, 86);\n    \n    Polygon poly87(4);\n    poly87.ps[0] = Point(627.924, 35.8422);\n    poly87.ps[1] = Point(627.924, 55.8422);\n    poly87.ps[2] = Point(607.924, 55.8422);\n    poly87.ps[3] = Point(607.924, 35.8422);\n    new ShapeRef(router, poly87, 87);\n    \n    Polygon poly88(4);\n    poly88.ps[0] = Point(747.924, 564.057);\n    poly88.ps[1] = Point(747.924, 584.057);\n    poly88.ps[2] = Point(727.924, 584.057);\n    poly88.ps[3] = Point(727.924, 564.057);\n    new ShapeRef(router, poly88, 88);\n    \n    Polygon poly89(4);\n    poly89.ps[0] = Point(507.924, 517.557);\n    poly89.ps[1] = Point(507.924, 537.557);\n    poly89.ps[2] = Point(487.924, 537.557);\n    poly89.ps[3] = Point(487.924, 517.557);\n    new ShapeRef(router, poly89, 89);\n    \n    Polygon poly90(4);\n    poly90.ps[0] = Point(507.924, 425.557);\n    poly90.ps[1] = Point(507.924, 445.557);\n    poly90.ps[2] = Point(487.924, 445.557);\n    poly90.ps[3] = Point(487.924, 425.557);\n    new ShapeRef(router, poly90, 90);\n    \n    Polygon poly91(4);\n    poly91.ps[0] = Point(627.924, 517.557);\n    poly91.ps[1] = Point(627.924, 537.557);\n    poly91.ps[2] = Point(607.924, 537.557);\n    poly91.ps[3] = Point(607.924, 517.557);\n    new ShapeRef(router, poly91, 91);\n    \n    Polygon poly92(4);\n    poly92.ps[0] = Point(627.924, 425.557);\n    poly92.ps[1] = Point(627.924, 445.557);\n    poly92.ps[2] = Point(607.924, 445.557);\n    poly92.ps[3] = Point(607.924, 425.557);\n    new ShapeRef(router, poly92, 92);\n    \n    Polygon poly93(4);\n    poly93.ps[0] = Point(867.924, 333.557);\n    poly93.ps[1] = Point(867.924, 353.557);\n    poly93.ps[2] = Point(847.924, 353.557);\n    poly93.ps[3] = Point(847.924, 333.557);\n    new ShapeRef(router, poly93, 93);\n    \n    Polygon poly94(4);\n    poly94.ps[0] = Point(867.924, 425.557);\n    poly94.ps[1] = Point(867.924, 445.557);\n    poly94.ps[2] = Point(847.924, 445.557);\n    poly94.ps[3] = Point(847.924, 425.557);\n    new ShapeRef(router, poly94, 94);\n    \n    Polygon poly95(4);\n    poly95.ps[0] = Point(867.924, 151.557);\n    poly95.ps[1] = Point(867.924, 171.557);\n    poly95.ps[2] = Point(847.924, 171.557);\n    poly95.ps[3] = Point(847.924, 151.557);\n    new ShapeRef(router, poly95, 95);\n    \n    Polygon poly72(4);\n    poly72.ps[0] = Point(87.9242, 357.557);\n    poly72.ps[1] = Point(87.9242, 377.557);\n    poly72.ps[2] = Point(67.9242, 377.557);\n    poly72.ps[3] = Point(67.9242, 357.557);\n    new ShapeRef(router, poly72, 72);\n    \n    Polygon poly73(4);\n    poly73.ps[0] = Point(147.924, 517.557);\n    poly73.ps[1] = Point(147.924, 537.557);\n    poly73.ps[2] = Point(127.924, 537.557);\n    poly73.ps[3] = Point(127.924, 517.557);\n    new ShapeRef(router, poly73, 73);\n    \n    Polygon poly74(4);\n    poly74.ps[0] = Point(147.924, 609.557);\n    poly74.ps[1] = Point(147.924, 629.557);\n    poly74.ps[2] = Point(127.924, 629.557);\n    poly74.ps[3] = Point(127.924, 609.557);\n    new ShapeRef(router, poly74, 74);\n    \n    Polygon poly36(4);\n    poly36.ps[0] = Point(697.924, 507.557);\n    poly36.ps[1] = Point(697.924, 547.557);\n    poly36.ps[2] = Point(657.924, 547.557);\n    poly36.ps[3] = Point(657.924, 507.557);\n    new ShapeRef(router, poly36, 36);\n    \n    Polygon poly129(4);\n    poly129.ps[0] = Point(525.924, 457.557);\n    poly129.ps[1] = Point(525.924, 497.557);\n    poly129.ps[2] = Point(469.924, 497.557);\n    poly129.ps[3] = Point(469.924, 457.557);\n    new ShapeRef(router, poly129, 129);\n    \n    Polygon poly130(4);\n    poly130.ps[0] = Point(525.924, 365.557);\n    poly130.ps[1] = Point(525.924, 405.557);\n    poly130.ps[2] = Point(469.924, 405.557);\n    poly130.ps[3] = Point(469.924, 365.557);\n    new ShapeRef(router, poly130, 130);\n    \n    Polygon poly131(4);\n    poly131.ps[0] = Point(645.924, 457.557);\n    poly131.ps[1] = Point(645.924, 497.557);\n    poly131.ps[2] = Point(589.924, 497.557);\n    poly131.ps[3] = Point(589.924, 457.557);\n    new ShapeRef(router, poly131, 131);\n    \n    Polygon poly132(4);\n    poly132.ps[0] = Point(645.924, 365.557);\n    poly132.ps[1] = Point(645.924, 405.557);\n    poly132.ps[2] = Point(589.924, 405.557);\n    poly132.ps[3] = Point(589.924, 365.557);\n    new ShapeRef(router, poly132, 132);\n    \n    Polygon poly133(4);\n    poly133.ps[0] = Point(885.924, 273.557);\n    poly133.ps[1] = Point(885.924, 313.557);\n    poly133.ps[2] = Point(829.924, 313.557);\n    poly133.ps[3] = Point(829.924, 273.557);\n    new ShapeRef(router, poly133, 133);\n    \n    Polygon poly134(4);\n    poly134.ps[0] = Point(885.924, 365.557);\n    poly134.ps[1] = Point(885.924, 405.557);\n    poly134.ps[2] = Point(829.924, 405.557);\n    poly134.ps[3] = Point(829.924, 365.557);\n    new ShapeRef(router, poly134, 134);\n    \n    Polygon poly135(4);\n    poly135.ps[0] = Point(885.924, 91.5565);\n    poly135.ps[1] = Point(885.924, 131.557);\n    poly135.ps[2] = Point(829.924, 131.557);\n    poly135.ps[3] = Point(829.924, 91.5565);\n    new ShapeRef(router, poly135, 135);\n    \n    Polygon poly136(4);\n    poly136.ps[0] = Point(765.924, 273.557);\n    poly136.ps[1] = Point(765.924, 313.557);\n    poly136.ps[2] = Point(709.924, 313.557);\n    poly136.ps[3] = Point(709.924, 273.557);\n    new ShapeRef(router, poly136, 136);\n    \n    Polygon poly137(4);\n    poly137.ps[0] = Point(1106.92, 318.557);\n    poly137.ps[1] = Point(1106.92, 358.557);\n    poly137.ps[2] = Point(1050.92, 358.557);\n    poly137.ps[3] = Point(1050.92, 318.557);\n    new ShapeRef(router, poly137, 137);\n    \n    Polygon poly138(4);\n    poly138.ps[0] = Point(1226.92, 318.557);\n    poly138.ps[1] = Point(1226.92, 358.557);\n    poly138.ps[2] = Point(1170.92, 358.557);\n    poly138.ps[3] = Point(1170.92, 318.557);\n    new ShapeRef(router, poly138, 138);\n    \n    Polygon poly139(4);\n    poly139.ps[0] = Point(1106.92, 82.3422);\n    poly139.ps[1] = Point(1106.92, 122.342);\n    poly139.ps[2] = Point(1050.92, 122.342);\n    poly139.ps[3] = Point(1050.92, 82.3422);\n    new ShapeRef(router, poly139, 139);\n    \n    Polygon poly140(4);\n    poly140.ps[0] = Point(1106.92, -9.65778);\n    poly140.ps[1] = Point(1106.92, 30.3422);\n    poly140.ps[2] = Point(1050.92, 30.3422);\n    poly140.ps[3] = Point(1050.92, -9.65778);\n    new ShapeRef(router, poly140, 140);\n    \n    Polygon poly141(4);\n    poly141.ps[0] = Point(1226.92, 82.3422);\n    poly141.ps[1] = Point(1226.92, 122.342);\n    poly141.ps[2] = Point(1170.92, 122.342);\n    poly141.ps[3] = Point(1170.92, 82.3422);\n    new ShapeRef(router, poly141, 141);\n    \n    Polygon poly142(4);\n    poly142.ps[0] = Point(1106.92, -130.658);\n    poly142.ps[1] = Point(1106.92, -90.6578);\n    poly142.ps[2] = Point(1050.92, -90.6578);\n    poly142.ps[3] = Point(1050.92, -130.658);\n    new ShapeRef(router, poly142, 142);\n    \n    Polygon poly27(4);\n    poly27.ps[0] = Point(577.924, 507.557);\n    poly27.ps[1] = Point(577.924, 547.557);\n    poly27.ps[2] = Point(537.924, 547.557);\n    poly27.ps[3] = Point(537.924, 507.557);\n    new ShapeRef(router, poly27, 27);\n    \n    Polygon poly47(4);\n    poly47.ps[0] = Point(697.924, 271.557);\n    poly47.ps[1] = Point(697.924, 311.557);\n    poly47.ps[2] = Point(657.924, 311.557);\n    poly47.ps[3] = Point(657.924, 271.557);\n    new ShapeRef(router, poly47, 47);\n    \n    Polygon poly22(4);\n    poly22.ps[0] = Point(697.924, 34.8422);\n    poly22.ps[1] = Point(697.924, 74.8422);\n    poly22.ps[2] = Point(657.924, 74.8422);\n    poly22.ps[3] = Point(657.924, 34.8422);\n    new ShapeRef(router, poly22, 22);\n    \n    Polygon poly66(4);\n    poly66.ps[0] = Point(747.924, -70.6578);\n    poly66.ps[1] = Point(747.924, -50.6578);\n    poly66.ps[2] = Point(727.924, -50.6578);\n    poly66.ps[3] = Point(727.924, -70.6578);\n    new ShapeRef(router, poly66, 66);\n    \n    Polygon poly49(4);\n    poly49.ps[0] = Point(45.9242, 169.75);\n    poly49.ps[1] = Point(45.9242, 334.75);\n    poly49.ps[2] = Point(-242.076, 334.75);\n    poly49.ps[3] = Point(-242.076, 169.75);\n    new ShapeRef(router, poly49, 49);\n    \n    Polygon poly32(4);\n    poly32.ps[0] = Point(1038.92, 141.557);\n    poly32.ps[1] = Point(1038.92, 181.557);\n    poly32.ps[2] = Point(998.924, 181.557);\n    poly32.ps[3] = Point(998.924, 141.557);\n    new ShapeRef(router, poly32, 32);\n    \n    Polygon poly105(4);\n    poly105.ps[0] = Point(747.924, 850.057);\n    poly105.ps[1] = Point(747.924, 870.057);\n    poly105.ps[2] = Point(727.924, 870.057);\n    poly105.ps[3] = Point(727.924, 850.057);\n    new ShapeRef(router, poly105, 105);\n    \n    Polygon poly106(4);\n    poly106.ps[0] = Point(765.924, -130.658);\n    poly106.ps[1] = Point(765.924, -90.6578);\n    poly106.ps[2] = Point(709.924, -90.6578);\n    poly106.ps[3] = Point(709.924, -130.658);\n    new ShapeRef(router, poly106, 106);\n    \n    Polygon poly107(4);\n    poly107.ps[0] = Point(165.924, -35.1578);\n    poly107.ps[1] = Point(165.924, 4.84222);\n    poly107.ps[2] = Point(109.924, 4.84222);\n    poly107.ps[3] = Point(109.924, -35.1578);\n    new ShapeRef(router, poly107, 107);\n    \n    Polygon poly108(4);\n    poly108.ps[0] = Point(165.924, 91.5565);\n    poly108.ps[1] = Point(165.924, 131.557);\n    poly108.ps[2] = Point(109.924, 131.557);\n    poly108.ps[3] = Point(109.924, 91.5565);\n    new ShapeRef(router, poly108, 108);\n    \n    Polygon poly109(4);\n    poly109.ps[0] = Point(285.924, 91.5565);\n    poly109.ps[1] = Point(285.924, 131.557);\n    poly109.ps[2] = Point(229.924, 131.557);\n    poly109.ps[3] = Point(229.924, 91.5565);\n    new ShapeRef(router, poly109, 109);\n    \n    Polygon poly110(4);\n    poly110.ps[0] = Point(287.924, 193.557);\n    poly110.ps[1] = Point(287.924, 233.557);\n    poly110.ps[2] = Point(231.924, 233.557);\n    poly110.ps[3] = Point(231.924, 193.557);\n    new ShapeRef(router, poly110, 110);\n    \n    Polygon poly111(4);\n    poly111.ps[0] = Point(285.924, 245.557);\n    poly111.ps[1] = Point(285.924, 285.557);\n    poly111.ps[2] = Point(229.924, 285.557);\n    poly111.ps[3] = Point(229.924, 245.557);\n    new ShapeRef(router, poly111, 111);\n    \n    Polygon poly112(4);\n    poly112.ps[0] = Point(167.924, 347.557);\n    poly112.ps[1] = Point(167.924, 387.557);\n    poly112.ps[2] = Point(111.924, 387.557);\n    poly112.ps[3] = Point(111.924, 347.557);\n    new ShapeRef(router, poly112, 112);\n    \n    Polygon poly113(4);\n    poly113.ps[0] = Point(165.924, 457.557);\n    poly113.ps[1] = Point(165.924, 497.557);\n    poly113.ps[2] = Point(109.924, 497.557);\n    poly113.ps[3] = Point(109.924, 457.557);\n    new ShapeRef(router, poly113, 113);\n    \n    Polygon poly114(4);\n    poly114.ps[0] = Point(165.924, 549.557);\n    poly114.ps[1] = Point(165.924, 589.557);\n    poly114.ps[2] = Point(109.924, 589.557);\n    poly114.ps[3] = Point(109.924, 549.557);\n    new ShapeRef(router, poly114, 114);\n    \n    Polygon poly115(4);\n    poly115.ps[0] = Point(167.924, 641.557);\n    poly115.ps[1] = Point(167.924, 681.557);\n    poly115.ps[2] = Point(111.924, 681.557);\n    poly115.ps[3] = Point(111.924, 641.557);\n    new ShapeRef(router, poly115, 115);\n    \n    Polygon poly116(4);\n    poly116.ps[0] = Point(165.924, 693.557);\n    poly116.ps[1] = Point(165.924, 733.557);\n    poly116.ps[2] = Point(109.924, 733.557);\n    poly116.ps[3] = Point(109.924, 693.557);\n    new ShapeRef(router, poly116, 116);\n    \n    Polygon poly31(4);\n    poly31.ps[0] = Point(1278.92, 141.557);\n    poly31.ps[1] = Point(1278.92, 181.557);\n    poly31.ps[2] = Point(1238.92, 181.557);\n    poly31.ps[3] = Point(1238.92, 141.557);\n    new ShapeRef(router, poly31, 31);\n    \n    Polygon poly23(4);\n    poly23.ps[0] = Point(337.924, 141.557);\n    poly23.ps[1] = Point(337.924, 181.557);\n    poly23.ps[2] = Point(297.924, 181.557);\n    poly23.ps[3] = Point(297.924, 141.557);\n    new ShapeRef(router, poly23, 23);\n    \n    Polygon poly44(4);\n    poly44.ps[0] = Point(97.9242, 507.557);\n    poly44.ps[1] = Point(97.9242, 547.557);\n    poly44.ps[2] = Point(57.9242, 547.557);\n    poly44.ps[3] = Point(57.9242, 507.557);\n    new ShapeRef(router, poly44, 44);\n    \n    Polygon poly40(4);\n    poly40.ps[0] = Point(97.9242, 141.557);\n    poly40.ps[1] = Point(97.9242, 181.557);\n    poly40.ps[2] = Point(57.9242, 181.557);\n    poly40.ps[3] = Point(57.9242, 141.557);\n    new ShapeRef(router, poly40, 40);\n    \n    Polygon poly48(4);\n    poly48.ps[0] = Point(97.9242, 743.557);\n    poly48.ps[1] = Point(97.9242, 783.557);\n    poly48.ps[2] = Point(57.9242, 783.557);\n    poly48.ps[3] = Point(57.9242, 743.557);\n    new ShapeRef(router, poly48, 48);\n    \n    Polygon poly64(4);\n    poly64.ps[0] = Point(817.924, 554.057);\n    poly64.ps[1] = Point(817.924, 594.057);\n    poly64.ps[2] = Point(777.924, 594.057);\n    poly64.ps[3] = Point(777.924, 554.057);\n    new ShapeRef(router, poly64, 64);\n    \n    Polygon poly58(4);\n    poly58.ps[0] = Point(97.9242, 14.8422);\n    poly58.ps[1] = Point(97.9242, 54.8422);\n    poly58.ps[2] = Point(57.9242, 54.8422);\n    poly58.ps[3] = Point(57.9242, 14.8422);\n    new ShapeRef(router, poly58, 58);\n    \n    Polygon poly39(4);\n    poly39.ps[0] = Point(457.924, 141.557);\n    poly39.ps[1] = Point(457.924, 181.557);\n    poly39.ps[2] = Point(417.924, 181.557);\n    poly39.ps[3] = Point(417.924, 141.557);\n    new ShapeRef(router, poly39, 39);\n    \n    Polygon poly53(4);\n    poly53.ps[0] = Point(577.924, 323.557);\n    poly53.ps[1] = Point(577.924, 363.557);\n    poly53.ps[2] = Point(537.924, 363.557);\n    poly53.ps[3] = Point(537.924, 323.557);\n    new ShapeRef(router, poly53, 53);\n    \n    Polygon poly16(4);\n    poly16.ps[0] = Point(337.924, 743.557);\n    poly16.ps[1] = Point(337.924, 783.557);\n    poly16.ps[2] = Point(297.924, 783.557);\n    poly16.ps[3] = Point(297.924, 743.557);\n    new ShapeRef(router, poly16, 16);\n    \n    Polygon poly14(4);\n    poly14.ps[0] = Point(1158.92, 141.557);\n    poly14.ps[1] = Point(1158.92, 181.557);\n    poly14.ps[2] = Point(1118.92, 181.557);\n    poly14.ps[3] = Point(1118.92, 141.557);\n    new ShapeRef(router, poly14, 14);\n    \n    Polygon poly19(4);\n    poly19.ps[0] = Point(217.924, 141.557);\n    poly19.ps[1] = Point(217.924, 181.557);\n    poly19.ps[2] = Point(177.924, 181.557);\n    poly19.ps[3] = Point(177.924, 141.557);\n    new ShapeRef(router, poly19, 19);\n    \n    Polygon poly35(4);\n    poly35.ps[0] = Point(1158.92, 40.3422);\n    poly35.ps[1] = Point(1158.92, 80.3422);\n    poly35.ps[2] = Point(1118.92, 80.3422);\n    poly35.ps[3] = Point(1118.92, 40.3422);\n    new ShapeRef(router, poly35, 35);\n    \n    Polygon poly8(4);\n    poly8.ps[0] = Point(1158.92, -80.6578);\n    poly8.ps[1] = Point(1158.92, -40.6578);\n    poly8.ps[2] = Point(1118.92, -40.6578);\n    poly8.ps[3] = Point(1118.92, -80.6578);\n    new ShapeRef(router, poly8, 8);\n    \n    Polygon poly4(4);\n    poly4.ps[0] = Point(1371.92, 29.8422);\n    poly4.ps[1] = Point(1371.92, 69.8422);\n    poly4.ps[2] = Point(1331.92, 69.8422);\n    poly4.ps[3] = Point(1331.92, 29.8422);\n    new ShapeRef(router, poly4, 4);\n    \n    Polygon poly15(4);\n    poly15.ps[0] = Point(1158.92, 415.557);\n    poly15.ps[1] = Point(1158.92, 455.557);\n    poly15.ps[2] = Point(1118.92, 455.557);\n    poly15.ps[3] = Point(1118.92, 415.557);\n    new ShapeRef(router, poly15, 15);\n    \n    Polygon poly33(4);\n    poly33.ps[0] = Point(937.924, 415.557);\n    poly33.ps[1] = Point(937.924, 455.557);\n    poly33.ps[2] = Point(897.924, 455.557);\n    poly33.ps[3] = Point(897.924, 415.557);\n    new ShapeRef(router, poly33, 33);\n    \n    Polygon poly51(4);\n    poly51.ps[0] = Point(1038.92, 323.557);\n    poly51.ps[1] = Point(1038.92, 363.557);\n    poly51.ps[2] = Point(998.924, 363.557);\n    poly51.ps[3] = Point(998.924, 323.557);\n    new ShapeRef(router, poly51, 51);\n    \n    Polygon poly29(4);\n    poly29.ps[0] = Point(1038.92, 415.557);\n    poly29.ps[1] = Point(1038.92, 455.557);\n    poly29.ps[2] = Point(998.924, 455.557);\n    poly29.ps[3] = Point(998.924, 415.557);\n    new ShapeRef(router, poly29, 29);\n    \n    Polygon poly9(4);\n    poly9.ps[0] = Point(1038.92, -80.6578);\n    poly9.ps[1] = Point(1038.92, -40.6578);\n    poly9.ps[2] = Point(998.924, -40.6578);\n    poly9.ps[3] = Point(998.924, -80.6578);\n    new ShapeRef(router, poly9, 9);\n    \n    Polygon poly20(4);\n    poly20.ps[0] = Point(337.924, 507.557);\n    poly20.ps[1] = Point(337.924, 547.557);\n    poly20.ps[2] = Point(297.924, 547.557);\n    poly20.ps[3] = Point(297.924, 507.557);\n    new ShapeRef(router, poly20, 20);\n    \n    Polygon poly63(4);\n    poly63.ps[0] = Point(457.924, 507.557);\n    poly63.ps[1] = Point(457.924, 547.557);\n    poly63.ps[2] = Point(417.924, 547.557);\n    poly63.ps[3] = Point(417.924, 507.557);\n    new ShapeRef(router, poly63, 63);\n    \n    Polygon poly21(4);\n    poly21.ps[0] = Point(937.924, 141.557);\n    poly21.ps[1] = Point(937.924, 181.557);\n    poly21.ps[2] = Point(897.924, 181.557);\n    poly21.ps[3] = Point(897.924, 141.557);\n    new ShapeRef(router, poly21, 21);\n    \n    Polygon poly24(4);\n    poly24.ps[0] = Point(457.924, 743.557);\n    poly24.ps[1] = Point(457.924, 783.557);\n    poly24.ps[2] = Point(417.924, 783.557);\n    poly24.ps[3] = Point(417.924, 743.557);\n    new ShapeRef(router, poly24, 24);\n    \n    Polygon poly43(4);\n    poly43.ps[0] = Point(1038.92, 1.84222);\n    poly43.ps[1] = Point(1038.92, 41.8422);\n    poly43.ps[2] = Point(998.924, 41.8422);\n    poly43.ps[3] = Point(998.924, 1.84222);\n    new ShapeRef(router, poly43, 43);\n    \n    Polygon poly38(4);\n    poly38.ps[0] = Point(217.924, 507.557);\n    poly38.ps[1] = Point(217.924, 547.557);\n    poly38.ps[2] = Point(177.924, 547.557);\n    poly38.ps[3] = Point(177.924, 507.557);\n    new ShapeRef(router, poly38, 38);\n    \n    Polygon poly12(4);\n    poly12.ps[0] = Point(1038.92, 260.557);\n    poly12.ps[1] = Point(1038.92, 300.557);\n    poly12.ps[2] = Point(998.924, 300.557);\n    poly12.ps[3] = Point(998.924, 260.557);\n    new ShapeRef(router, poly12, 12);\n    \n    Polygon poly37(4);\n    poly37.ps[0] = Point(457.924, 607.557);\n    poly37.ps[1] = Point(457.924, 647.557);\n    poly37.ps[2] = Point(417.924, 647.557);\n    poly37.ps[3] = Point(417.924, 607.557);\n    new ShapeRef(router, poly37, 37);\n    \n    Polygon poly54(4);\n    poly54.ps[0] = Point(697.924, 323.557);\n    poly54.ps[1] = Point(697.924, 363.557);\n    poly54.ps[2] = Point(657.924, 363.557);\n    poly54.ps[3] = Point(657.924, 323.557);\n    new ShapeRef(router, poly54, 54);\n    \n    Polygon poly67(4);\n    poly67.ps[0] = Point(147.924, 24.8422);\n    poly67.ps[1] = Point(147.924, 44.8422);\n    poly67.ps[2] = Point(127.924, 44.8422);\n    poly67.ps[3] = Point(127.924, 24.8422);\n    new ShapeRef(router, poly67, 67);\n    \n    Polygon poly68(4);\n    poly68.ps[0] = Point(147.924, 151.557);\n    poly68.ps[1] = Point(147.924, 171.557);\n    poly68.ps[2] = Point(127.924, 171.557);\n    poly68.ps[3] = Point(127.924, 151.557);\n    new ShapeRef(router, poly68, 68);\n    \n    ConnRef *connRef148 = new ConnRef(router, 148);\n    ConnEnd srcPt148(Point(1018.92, -60.6578), 15);\n    connRef148->setSourceEndpoint(srcPt148);\n    ConnEnd dstPt148(Point(1068.92, -60.6578), 15);\n    connRef148->setDestEndpoint(dstPt148);\n    connRef148->setRoutingType((ConnType)2);\n\n    ConnRef *connRef149 = new ConnRef(router, 149);\n    ConnEnd srcPt149(Point(1138.92, 161.557), 15);\n    connRef149->setSourceEndpoint(srcPt149);\n    ConnEnd dstPt149(Point(1188.92, 152.342), 15);\n    connRef149->setDestEndpoint(dstPt149);\n    connRef149->setRoutingType((ConnType)2);\n\n    ConnRef *connRef150 = new ConnRef(router, 150);\n    ConnEnd srcPt150(Point(1138.92, 435.557), 15);\n    connRef150->setSourceEndpoint(srcPt150);\n    ConnEnd dstPt150(Point(1188.92, 388.557), 15);\n    connRef150->setDestEndpoint(dstPt150);\n    connRef150->setRoutingType((ConnType)2);\n\n    ConnRef *connRef151 = new ConnRef(router, 151);\n    ConnEnd srcPt151(Point(317.924, 763.557), 15);\n    connRef151->setSourceEndpoint(srcPt151);\n    ConnEnd dstPt151(Point(367.924, 627.557), 15);\n    connRef151->setDestEndpoint(dstPt151);\n    connRef151->setRoutingType((ConnType)2);\n\n    ConnRef *connRef152 = new ConnRef(router, 152);\n    ConnEnd srcPt152(Point(317.924, 763.557), 15);\n    connRef152->setSourceEndpoint(srcPt152);\n    ConnEnd dstPt152(Point(367.924, 763.557), 15);\n    connRef152->setDestEndpoint(dstPt152);\n    connRef152->setRoutingType((ConnType)2);\n\n    ConnRef *connRef153 = new ConnRef(router, 153);\n    ConnEnd srcPt153(Point(317.924, 763.557), 15);\n    connRef153->setSourceEndpoint(srcPt153);\n    ConnEnd dstPt153(Point(487.924, 903.057), 15);\n    connRef153->setDestEndpoint(dstPt153);\n    connRef153->setRoutingType((ConnType)2);\n\n    ConnRef *connRef154 = new ConnRef(router, 154);\n    ConnEnd srcPt154(Point(317.924, 763.557), 15);\n    connRef154->setSourceEndpoint(srcPt154);\n    ConnEnd dstPt154(Point(727.924, 574.057), 15);\n    connRef154->setDestEndpoint(dstPt154);\n    connRef154->setRoutingType((ConnType)2);\n\n    ConnRef *connRef155 = new ConnRef(router, 155);\n    ConnEnd srcPt155(Point(557.924, 903.057), 15);\n    connRef155->setSourceEndpoint(srcPt155);\n    ConnEnd dstPt155(Point(607.924, 903.057), 15);\n    connRef155->setDestEndpoint(dstPt155);\n    connRef155->setRoutingType((ConnType)2);\n\n    ConnRef *connRef156 = new ConnRef(router, 156);\n    ConnEnd srcPt156(Point(197.924, 763.557), 15);\n    connRef156->setSourceEndpoint(srcPt156);\n    ConnEnd dstPt156(Point(247.924, 763.557), 15);\n    connRef156->setDestEndpoint(dstPt156);\n    connRef156->setRoutingType((ConnType)2);\n\n    ConnRef *connRef157 = new ConnRef(router, 157);\n    ConnEnd srcPt157(Point(147.924, 161.557), 15);\n    connRef157->setSourceEndpoint(srcPt157);\n    ConnEnd dstPt157(Point(197.924, 161.557), 15);\n    connRef157->setDestEndpoint(dstPt157);\n    connRef157->setRoutingType((ConnType)2);\n\n    ConnRef *connRef158 = new ConnRef(router, 158);\n    ConnEnd srcPt158(Point(197.924, 161.557), 15);\n    connRef158->setSourceEndpoint(srcPt158);\n    ConnEnd dstPt158(Point(247.924, 161.557), 15);\n    connRef158->setDestEndpoint(dstPt158);\n    connRef158->setRoutingType((ConnType)2);\n\n    ConnRef *connRef159 = new ConnRef(router, 159);\n    ConnEnd srcPt159(Point(197.924, 161.557), 15);\n    connRef159->setSourceEndpoint(srcPt159);\n    ConnEnd dstPt159(Point(197.924, 203.557), 15);\n    connRef159->setDestEndpoint(dstPt159);\n    connRef159->setRoutingType((ConnType)2);\n\n    ConnRef *connRef160 = new ConnRef(router, 160);\n    ConnEnd srcPt160(Point(317.924, 161.557), 15);\n    connRef160->setSourceEndpoint(srcPt160);\n    ConnEnd dstPt160(Point(727.924, -60.6578), 15);\n    connRef160->setDestEndpoint(dstPt160);\n    connRef160->setRoutingType((ConnType)2);\n\n    ConnRef *connRef161 = new ConnRef(router, 161);\n    ConnEnd srcPt161(Point(317.924, 161.557), 15);\n    connRef161->setSourceEndpoint(srcPt161);\n    ConnEnd dstPt161(Point(367.924, 161.557), 15);\n    connRef161->setDestEndpoint(dstPt161);\n    connRef161->setRoutingType((ConnType)2);\n\n    ConnRef *connRef162 = new ConnRef(router, 162);\n    ConnEnd srcPt162(Point(317.924, 161.557), 15);\n    connRef162->setSourceEndpoint(srcPt162);\n    ConnEnd dstPt162(Point(367.924, 27.3422), 15);\n    connRef162->setDestEndpoint(dstPt162);\n    connRef162->setRoutingType((ConnType)2);\n\n    ConnRef *connRef163 = new ConnRef(router, 163);\n    ConnEnd srcPt163(Point(317.924, 161.557), 15);\n    connRef163->setSourceEndpoint(srcPt163);\n    ConnEnd dstPt163(Point(487.924, 435.557), 15);\n    connRef163->setDestEndpoint(dstPt163);\n    connRef163->setRoutingType((ConnType)2);\n\n    ConnRef *connRef164 = new ConnRef(router, 164);\n    ConnEnd srcPt164(Point(437.924, 763.557), 15);\n    connRef164->setSourceEndpoint(srcPt164);\n    ConnEnd dstPt164(Point(487.924, 763.557), 15);\n    connRef164->setDestEndpoint(dstPt164);\n    connRef164->setRoutingType((ConnType)2);\n\n    ConnRef *connRef165 = new ConnRef(router, 165);\n    ConnEnd srcPt165(Point(437.924, 763.557), 15);\n    connRef165->setSourceEndpoint(srcPt165);\n    ConnEnd dstPt165(Point(727.924, 860.057), 15);\n    connRef165->setDestEndpoint(dstPt165);\n    connRef165->setRoutingType((ConnType)2);\n\n    ConnRef *connRef166 = new ConnRef(router, 166);\n    ConnEnd srcPt166(Point(557.924, 527.557), 15);\n    connRef166->setSourceEndpoint(srcPt166);\n    ConnEnd dstPt166(Point(607.924, 527.557), 15);\n    connRef166->setDestEndpoint(dstPt166);\n    connRef166->setRoutingType((ConnType)2);\n\n    ConnRef *connRef167 = new ConnRef(router, 167);\n    ConnEnd srcPt167(Point(797.924, 343.557), 15);\n    connRef167->setSourceEndpoint(srcPt167);\n    ConnEnd dstPt167(Point(847.924, 343.557), 15);\n    connRef167->setDestEndpoint(dstPt167);\n    connRef167->setRoutingType((ConnType)2);\n\n    ConnRef *connRef168 = new ConnRef(router, 168);\n    ConnEnd srcPt168(Point(797.924, 343.557), 15);\n    connRef168->setSourceEndpoint(srcPt168);\n    ConnEnd dstPt168(Point(847.924, 435.557), 15);\n    connRef168->setDestEndpoint(dstPt168);\n    connRef168->setRoutingType((ConnType)2);\n\n    ConnRef *connRef169 = new ConnRef(router, 169);\n    ConnEnd srcPt169(Point(1018.92, 435.557), 15);\n    connRef169->setSourceEndpoint(srcPt169);\n    ConnEnd dstPt169(Point(1068.92, 388.557), 15);\n    connRef169->setDestEndpoint(dstPt169);\n    connRef169->setRoutingType((ConnType)2);\n\n    ConnRef *connRef198 = new ConnRef(router, 198);\n    ConnEnd srcPt198(Point(267.924, 763.557), 15);\n    connRef198->setSourceEndpoint(srcPt198);\n    ConnEnd dstPt198(Point(317.924, 763.557), 15);\n    connRef198->setDestEndpoint(dstPt198);\n    connRef198->setRoutingType((ConnType)2);\n\n    ConnRef *connRef199 = new ConnRef(router, 199);\n    ConnEnd srcPt199(Point(387.924, 627.557), 15);\n    connRef199->setSourceEndpoint(srcPt199);\n    ConnEnd dstPt199(Point(437.924, 627.557), 15);\n    connRef199->setDestEndpoint(dstPt199);\n    connRef199->setRoutingType((ConnType)2);\n\n    ConnRef *connRef200 = new ConnRef(router, 200);\n    ConnEnd srcPt200(Point(387.924, 763.557), 15);\n    connRef200->setSourceEndpoint(srcPt200);\n    ConnEnd dstPt200(Point(437.924, 763.557), 15);\n    connRef200->setDestEndpoint(dstPt200);\n    connRef200->setRoutingType((ConnType)2);\n\n    ConnRef *connRef201 = new ConnRef(router, 201);\n    ConnEnd srcPt201(Point(507.924, 763.557), 15);\n    connRef201->setSourceEndpoint(srcPt201);\n    ConnEnd dstPt201(Point(557.924, 763.557), 15);\n    connRef201->setDestEndpoint(dstPt201);\n    connRef201->setRoutingType((ConnType)2);\n\n    ConnRef *connRef202 = new ConnRef(router, 202);\n    ConnEnd srcPt202(Point(627.924, 763.557), 15);\n    connRef202->setSourceEndpoint(srcPt202);\n    ConnEnd dstPt202(Point(677.924, 763.557), 15);\n    connRef202->setDestEndpoint(dstPt202);\n    connRef202->setRoutingType((ConnType)2);\n\n    ConnRef *connRef203 = new ConnRef(router, 203);\n    ConnEnd srcPt203(Point(507.924, 903.057), 15);\n    connRef203->setSourceEndpoint(srcPt203);\n    ConnEnd dstPt203(Point(557.924, 903.057), 15);\n    connRef203->setDestEndpoint(dstPt203);\n    connRef203->setRoutingType((ConnType)2);\n\n    ConnRef *connRef204 = new ConnRef(router, 204);\n    ConnEnd srcPt204(Point(627.924, 903.057), 15);\n    connRef204->setSourceEndpoint(srcPt204);\n    ConnEnd dstPt204(Point(677.924, 903.057), 15);\n    connRef204->setDestEndpoint(dstPt204);\n    connRef204->setRoutingType((ConnType)2);\n\n    ConnRef *connRef205 = new ConnRef(router, 205);\n    ConnEnd srcPt205(Point(387.924, 161.557), 15);\n    connRef205->setSourceEndpoint(srcPt205);\n    ConnEnd dstPt205(Point(437.924, 161.557), 15);\n    connRef205->setDestEndpoint(dstPt205);\n    connRef205->setRoutingType((ConnType)2);\n\n    ConnRef *connRef206 = new ConnRef(router, 206);\n    ConnEnd srcPt206(Point(387.924, 27.3422), 15);\n    connRef206->setSourceEndpoint(srcPt206);\n    ConnEnd dstPt206(Point(437.924, 27.3422), 15);\n    connRef206->setDestEndpoint(dstPt206);\n    connRef206->setRoutingType((ConnType)2);\n\n    ConnRef *connRef207 = new ConnRef(router, 207);\n    ConnEnd srcPt207(Point(507.924, 45.8422), 15);\n    connRef207->setSourceEndpoint(srcPt207);\n    ConnEnd dstPt207(Point(557.924, 54.8422), 15);\n    connRef207->setDestEndpoint(dstPt207);\n    connRef207->setRoutingType((ConnType)2);\n\n    ConnRef *connRef208 = new ConnRef(router, 208);\n    ConnEnd srcPt208(Point(627.924, 45.8422), 15);\n    connRef208->setSourceEndpoint(srcPt208);\n    ConnEnd dstPt208(Point(677.924, 54.8422), 15);\n    connRef208->setDestEndpoint(dstPt208);\n    connRef208->setRoutingType((ConnType)2);\n\n    ConnRef *connRef209 = new ConnRef(router, 209);\n    ConnEnd srcPt209(Point(747.924, 574.057), 15);\n    connRef209->setSourceEndpoint(srcPt209);\n    ConnEnd dstPt209(Point(797.924, 574.057), 15);\n    connRef209->setDestEndpoint(dstPt209);\n    connRef209->setRoutingType((ConnType)2);\n\n    ConnRef *connRef210 = new ConnRef(router, 210);\n    ConnEnd srcPt210(Point(507.924, 527.557), 15);\n    connRef210->setSourceEndpoint(srcPt210);\n    ConnEnd dstPt210(Point(557.924, 527.557), 15);\n    connRef210->setDestEndpoint(dstPt210);\n    connRef210->setRoutingType((ConnType)2);\n\n    ConnRef *connRef211 = new ConnRef(router, 211);\n    ConnEnd srcPt211(Point(507.924, 435.557), 15);\n    connRef211->setSourceEndpoint(srcPt211);\n    ConnEnd dstPt211(Point(557.924, 435.557), 15);\n    connRef211->setDestEndpoint(dstPt211);\n    connRef211->setRoutingType((ConnType)2);\n\n    ConnRef *connRef212 = new ConnRef(router, 212);\n    ConnEnd srcPt212(Point(627.924, 527.557), 15);\n    connRef212->setSourceEndpoint(srcPt212);\n    ConnEnd dstPt212(Point(677.924, 527.557), 15);\n    connRef212->setDestEndpoint(dstPt212);\n    connRef212->setRoutingType((ConnType)2);\n\n    ConnRef *connRef213 = new ConnRef(router, 213);\n    ConnEnd srcPt213(Point(627.924, 435.557), 15);\n    connRef213->setSourceEndpoint(srcPt213);\n    ConnEnd dstPt213(Point(677.924, 435.557), 15);\n    connRef213->setDestEndpoint(dstPt213);\n    connRef213->setRoutingType((ConnType)2);\n\n    ConnRef *connRef214 = new ConnRef(router, 214);\n    ConnEnd srcPt214(Point(867.924, 343.557), 15);\n    connRef214->setSourceEndpoint(srcPt214);\n    ConnEnd dstPt214(Point(917.924, 343.557), 15);\n    connRef214->setDestEndpoint(dstPt214);\n    connRef214->setRoutingType((ConnType)2);\n\n    ConnRef *connRef215 = new ConnRef(router, 215);\n    ConnEnd srcPt215(Point(867.924, 435.557), 15);\n    connRef215->setSourceEndpoint(srcPt215);\n    ConnEnd dstPt215(Point(917.924, 435.557), 15);\n    connRef215->setDestEndpoint(dstPt215);\n    connRef215->setRoutingType((ConnType)2);\n\n    ConnRef *connRef216 = new ConnRef(router, 216);\n    ConnEnd srcPt216(Point(867.924, 161.557), 15);\n    connRef216->setSourceEndpoint(srcPt216);\n    ConnEnd dstPt216(Point(917.924, 161.557), 15);\n    connRef216->setDestEndpoint(dstPt216);\n    connRef216->setRoutingType((ConnType)2);\n\n    ConnRef *connRef217 = new ConnRef(router, 217);\n    ConnEnd srcPt217(Point(747.924, 343.557), 15);\n    connRef217->setSourceEndpoint(srcPt217);\n    ConnEnd dstPt217(Point(797.924, 343.557), 15);\n    connRef217->setDestEndpoint(dstPt217);\n    connRef217->setRoutingType((ConnType)2);\n\n    ConnRef *connRef218 = new ConnRef(router, 218);\n    ConnEnd srcPt218(Point(1088.92, 388.557), 15);\n    connRef218->setSourceEndpoint(srcPt218);\n    ConnEnd dstPt218(Point(1138.92, 435.557), 15);\n    connRef218->setDestEndpoint(dstPt218);\n    connRef218->setRoutingType((ConnType)2);\n\n    ConnRef *connRef219 = new ConnRef(router, 219);\n    ConnEnd srcPt219(Point(1208.92, 388.557), 15);\n    connRef219->setSourceEndpoint(srcPt219);\n    ConnEnd dstPt219(Point(1258.92, 435.557), 15);\n    connRef219->setDestEndpoint(dstPt219);\n    connRef219->setRoutingType((ConnType)2);\n\n    ConnRef *connRef220 = new ConnRef(router, 220);\n    ConnEnd srcPt220(Point(1088.92, 152.342), 15);\n    connRef220->setSourceEndpoint(srcPt220);\n    ConnEnd dstPt220(Point(1138.92, 161.557), 15);\n    connRef220->setDestEndpoint(dstPt220);\n    connRef220->setRoutingType((ConnType)2);\n\n    ConnRef *connRef221 = new ConnRef(router, 221);\n    ConnEnd srcPt221(Point(1088.92, 60.3422), 15);\n    connRef221->setSourceEndpoint(srcPt221);\n    ConnEnd dstPt221(Point(1138.92, 60.3422), 15);\n    connRef221->setDestEndpoint(dstPt221);\n    connRef221->setRoutingType((ConnType)2);\n\n    ConnRef *connRef222 = new ConnRef(router, 222);\n    ConnEnd srcPt222(Point(1208.92, 152.342), 15);\n    connRef222->setSourceEndpoint(srcPt222);\n    ConnEnd dstPt222(Point(1258.92, 161.557), 15);\n    connRef222->setDestEndpoint(dstPt222);\n    connRef222->setRoutingType((ConnType)2);\n\n    ConnRef *connRef223 = new ConnRef(router, 223);\n    ConnEnd srcPt223(Point(1088.92, -60.6578), 15);\n    connRef223->setSourceEndpoint(srcPt223);\n    ConnEnd dstPt223(Point(1138.92, -60.6578), 15);\n    connRef223->setDestEndpoint(dstPt223);\n    connRef223->setRoutingType((ConnType)2);\n\n    ConnRef *connRef224 = new ConnRef(router, 224);\n    ConnEnd srcPt224(Point(747.924, 161.557), 15);\n    connRef224->setSourceEndpoint(srcPt224);\n    ConnEnd dstPt224(Point(797.924, 161.557), 15);\n    connRef224->setDestEndpoint(dstPt224);\n    connRef224->setRoutingType((ConnType)2);\n\n    ConnRef *connRef225 = new ConnRef(router, 225);\n    ConnEnd srcPt225(Point(747.924, 860.057), 15);\n    connRef225->setSourceEndpoint(srcPt225);\n    ConnEnd dstPt225(Point(797.924, 860.057), 15);\n    connRef225->setDestEndpoint(dstPt225);\n    connRef225->setRoutingType((ConnType)2);\n\n    ConnRef *connRef254 = new ConnRef(router, 254);\n    ConnEnd srcPt254(Point(857.924, 385.557), 15);\n    connRef254->setSourceEndpoint(srcPt254);\n    ConnEnd dstPt254(Point(857.924, 435.557), 15);\n    connRef254->setDestEndpoint(dstPt254);\n    connRef254->setRoutingType((ConnType)2);\n\n    ConnRef *connRef255 = new ConnRef(router, 255);\n    ConnEnd srcPt255(Point(857.924, 111.557), 15);\n    connRef255->setSourceEndpoint(srcPt255);\n    ConnEnd dstPt255(Point(857.924, 161.557), 15);\n    connRef255->setDestEndpoint(dstPt255);\n    connRef255->setRoutingType((ConnType)2);\n\n    ConnRef *connRef256 = new ConnRef(router, 256);\n    ConnEnd srcPt256(Point(737.924, 293.557), 15);\n    connRef256->setSourceEndpoint(srcPt256);\n    ConnEnd dstPt256(Point(737.924, 343.557), 15);\n    connRef256->setDestEndpoint(dstPt256);\n    connRef256->setRoutingType((ConnType)2);\n\n    ConnRef *connRef257 = new ConnRef(router, 257);\n    ConnEnd srcPt257(Point(1078.92, 338.557), 15);\n    connRef257->setSourceEndpoint(srcPt257);\n    ConnEnd dstPt257(Point(1078.92, 388.557), 15);\n    connRef257->setDestEndpoint(dstPt257);\n    connRef257->setRoutingType((ConnType)2);\n\n    ConnRef *connRef258 = new ConnRef(router, 258);\n    ConnEnd srcPt258(Point(1198.92, 338.557), 15);\n    connRef258->setSourceEndpoint(srcPt258);\n    ConnEnd dstPt258(Point(1198.92, 388.557), 15);\n    connRef258->setDestEndpoint(dstPt258);\n    connRef258->setRoutingType((ConnType)2);\n\n    ConnRef *connRef259 = new ConnRef(router, 259);\n    ConnEnd srcPt259(Point(1078.92, 102.342), 15);\n    connRef259->setSourceEndpoint(srcPt259);\n    ConnEnd dstPt259(Point(1078.92, 152.342), 15);\n    connRef259->setDestEndpoint(dstPt259);\n    connRef259->setRoutingType((ConnType)2);\n\n    ConnRef *connRef260 = new ConnRef(router, 260);\n    ConnEnd srcPt260(Point(1078.92, 10.3422), 15);\n    connRef260->setSourceEndpoint(srcPt260);\n    ConnEnd dstPt260(Point(1078.92, 60.3422), 15);\n    connRef260->setDestEndpoint(dstPt260);\n    connRef260->setRoutingType((ConnType)2);\n\n    ConnRef *connRef261 = new ConnRef(router, 261);\n    ConnEnd srcPt261(Point(1198.92, 102.342), 15);\n    connRef261->setSourceEndpoint(srcPt261);\n    ConnEnd dstPt261(Point(1198.92, 152.342), 15);\n    connRef261->setDestEndpoint(dstPt261);\n    connRef261->setRoutingType((ConnType)2);\n\n    ConnRef *connRef262 = new ConnRef(router, 262);\n    ConnEnd srcPt262(Point(1078.92, -110.658), 15);\n    connRef262->setSourceEndpoint(srcPt262);\n    ConnEnd dstPt262(Point(1078.92, -60.6578), 15);\n    connRef262->setDestEndpoint(dstPt262);\n    connRef262->setRoutingType((ConnType)2);\n\n    ConnRef *connRef263 = new ConnRef(router, 263);\n    ConnEnd srcPt263(Point(958.924, 230.557), 15);\n    connRef263->setSourceEndpoint(srcPt263);\n    ConnEnd dstPt263(Point(958.924, 280.557), 15);\n    connRef263->setDestEndpoint(dstPt263);\n    connRef263->setRoutingType((ConnType)2);\n\n    ConnRef *connRef264 = new ConnRef(router, 264);\n    ConnEnd srcPt264(Point(737.924, 111.557), 15);\n    connRef264->setSourceEndpoint(srcPt264);\n    ConnEnd dstPt264(Point(737.924, 161.557), 15);\n    connRef264->setDestEndpoint(dstPt264);\n    connRef264->setRoutingType((ConnType)2);\n\n    ConnRef *connRef265 = new ConnRef(router, 265);\n    ConnEnd srcPt265(Point(737.924, 810.057), 15);\n    connRef265->setSourceEndpoint(srcPt265);\n    ConnEnd dstPt265(Point(737.924, 860.057), 15);\n    connRef265->setDestEndpoint(dstPt265);\n    connRef265->setRoutingType((ConnType)2);\n\n    ConnRef *connRef266 = new ConnRef(router, 266);\n    ConnEnd srcPt266(Point(77.9242, 161.557), 15);\n    connRef266->setSourceEndpoint(srcPt266);\n    ConnEnd dstPt266(Point(40.9242, 252.5), 15);\n    connRef266->setDestEndpoint(dstPt266);\n    connRef266->setRoutingType((ConnType)2);\n\n    ConnRef *connRef267 = new ConnRef(router, 267);\n    ConnEnd srcPt267(Point(77.9242, 763.557), 15);\n    connRef267->setSourceEndpoint(srcPt267);\n    ConnEnd dstPt267(Point(-46.0758, 329.75), 15);\n    connRef267->setDestEndpoint(dstPt267);\n    connRef267->setRoutingType((ConnType)2);\n\n    ConnRef *connRef226 = new ConnRef(router, 226);\n    ConnEnd srcPt226(Point(737.924, -110.658), 15);\n    connRef226->setSourceEndpoint(srcPt226);\n    ConnEnd dstPt226(Point(737.924, -60.6578), 15);\n    connRef226->setDestEndpoint(dstPt226);\n    connRef226->setRoutingType((ConnType)2);\n\n    ConnRef *connRef227 = new ConnRef(router, 227);\n    ConnEnd srcPt227(Point(137.924, -15.1578), 15);\n    connRef227->setSourceEndpoint(srcPt227);\n    ConnEnd dstPt227(Point(137.924, 34.8422), 15);\n    connRef227->setDestEndpoint(dstPt227);\n    connRef227->setRoutingType((ConnType)2);\n\n    ConnRef *connRef228 = new ConnRef(router, 228);\n    ConnEnd srcPt228(Point(137.924, 111.557), 15);\n    connRef228->setSourceEndpoint(srcPt228);\n    ConnEnd dstPt228(Point(137.924, 161.557), 15);\n    connRef228->setDestEndpoint(dstPt228);\n    connRef228->setRoutingType((ConnType)2);\n\n    ConnRef *connRef229 = new ConnRef(router, 229);\n    ConnEnd srcPt229(Point(257.924, 111.557), 15);\n    connRef229->setSourceEndpoint(srcPt229);\n    ConnEnd dstPt229(Point(257.924, 161.557), 15);\n    connRef229->setDestEndpoint(dstPt229);\n    connRef229->setRoutingType((ConnType)2);\n\n    ConnRef *connRef230 = new ConnRef(router, 230);\n    ConnEnd srcPt230(Point(259.924, 213.557), 15);\n    connRef230->setSourceEndpoint(srcPt230);\n    ConnEnd dstPt230(Point(197.924, 213.557), 15);\n    connRef230->setDestEndpoint(dstPt230);\n    connRef230->setRoutingType((ConnType)2);\n\n    ConnRef *connRef231 = new ConnRef(router, 231);\n    ConnEnd srcPt231(Point(257.924, 265.557), 15);\n    connRef231->setSourceEndpoint(srcPt231);\n    ConnEnd dstPt231(Point(257.924, 315.557), 15);\n    connRef231->setDestEndpoint(dstPt231);\n    connRef231->setRoutingType((ConnType)2);\n\n    ConnRef *connRef232 = new ConnRef(router, 232);\n    ConnEnd srcPt232(Point(139.924, 367.557), 15);\n    connRef232->setSourceEndpoint(srcPt232);\n    ConnEnd dstPt232(Point(77.9242, 367.557), 15);\n    connRef232->setDestEndpoint(dstPt232);\n    connRef232->setRoutingType((ConnType)2);\n\n    ConnRef *connRef233 = new ConnRef(router, 233);\n    ConnEnd srcPt233(Point(137.924, 477.557), 15);\n    connRef233->setSourceEndpoint(srcPt233);\n    ConnEnd dstPt233(Point(137.924, 527.557), 15);\n    connRef233->setDestEndpoint(dstPt233);\n    connRef233->setRoutingType((ConnType)2);\n\n    ConnRef *connRef234 = new ConnRef(router, 234);\n    ConnEnd srcPt234(Point(137.924, 569.557), 15);\n    connRef234->setSourceEndpoint(srcPt234);\n    ConnEnd dstPt234(Point(137.924, 619.557), 15);\n    connRef234->setDestEndpoint(dstPt234);\n    connRef234->setRoutingType((ConnType)2);\n\n    ConnRef *connRef235 = new ConnRef(router, 235);\n    ConnEnd srcPt235(Point(139.924, 661.557), 15);\n    connRef235->setSourceEndpoint(srcPt235);\n    ConnEnd dstPt235(Point(77.9242, 661.557), 15);\n    connRef235->setDestEndpoint(dstPt235);\n    connRef235->setRoutingType((ConnType)2);\n\n    ConnRef *connRef236 = new ConnRef(router, 236);\n    ConnEnd srcPt236(Point(137.924, 713.557), 15);\n    connRef236->setSourceEndpoint(srcPt236);\n    ConnEnd dstPt236(Point(137.924, 763.557), 15);\n    connRef236->setDestEndpoint(dstPt236);\n    connRef236->setRoutingType((ConnType)2);\n\n    ConnRef *connRef237 = new ConnRef(router, 237);\n    ConnEnd srcPt237(Point(257.924, 713.557), 15);\n    connRef237->setSourceEndpoint(srcPt237);\n    ConnEnd dstPt237(Point(257.924, 763.557), 15);\n    connRef237->setDestEndpoint(dstPt237);\n    connRef237->setRoutingType((ConnType)2);\n\n    ConnRef *connRef238 = new ConnRef(router, 238);\n    ConnEnd srcPt238(Point(377.924, 577.557), 15);\n    connRef238->setSourceEndpoint(srcPt238);\n    ConnEnd dstPt238(Point(377.924, 627.557), 15);\n    connRef238->setDestEndpoint(dstPt238);\n    connRef238->setRoutingType((ConnType)2);\n\n    ConnRef *connRef239 = new ConnRef(router, 239);\n    ConnEnd srcPt239(Point(377.924, 713.557), 15);\n    connRef239->setSourceEndpoint(srcPt239);\n    ConnEnd dstPt239(Point(377.924, 763.557), 15);\n    connRef239->setDestEndpoint(dstPt239);\n    connRef239->setRoutingType((ConnType)2);\n\n    ConnRef *connRef240 = new ConnRef(router, 240);\n    ConnEnd srcPt240(Point(497.924, 713.557), 15);\n    connRef240->setSourceEndpoint(srcPt240);\n    ConnEnd dstPt240(Point(497.924, 763.557), 15);\n    connRef240->setDestEndpoint(dstPt240);\n    connRef240->setRoutingType((ConnType)2);\n\n    ConnRef *connRef241 = new ConnRef(router, 241);\n    ConnEnd srcPt241(Point(617.924, 713.557), 15);\n    connRef241->setSourceEndpoint(srcPt241);\n    ConnEnd dstPt241(Point(617.924, 763.557), 15);\n    connRef241->setDestEndpoint(dstPt241);\n    connRef241->setRoutingType((ConnType)2);\n\n    ConnRef *connRef242 = new ConnRef(router, 242);\n    ConnEnd srcPt242(Point(497.924, 853.057), 15);\n    connRef242->setSourceEndpoint(srcPt242);\n    ConnEnd dstPt242(Point(497.924, 903.057), 15);\n    connRef242->setDestEndpoint(dstPt242);\n    connRef242->setRoutingType((ConnType)2);\n\n    ConnRef *connRef243 = new ConnRef(router, 243);\n    ConnEnd srcPt243(Point(617.924, 853.057), 15);\n    connRef243->setSourceEndpoint(srcPt243);\n    ConnEnd dstPt243(Point(617.924, 903.057), 15);\n    connRef243->setDestEndpoint(dstPt243);\n    connRef243->setRoutingType((ConnType)2);\n\n    ConnRef *connRef244 = new ConnRef(router, 244);\n    ConnEnd srcPt244(Point(377.924, 111.557), 15);\n    connRef244->setSourceEndpoint(srcPt244);\n    ConnEnd dstPt244(Point(377.924, 161.557), 15);\n    connRef244->setDestEndpoint(dstPt244);\n    connRef244->setRoutingType((ConnType)2);\n\n    ConnRef *connRef245 = new ConnRef(router, 245);\n    ConnEnd srcPt245(Point(377.924, -22.6578), 15);\n    connRef245->setSourceEndpoint(srcPt245);\n    ConnEnd dstPt245(Point(377.924, 27.3422), 15);\n    connRef245->setDestEndpoint(dstPt245);\n    connRef245->setRoutingType((ConnType)2);\n\n    ConnRef *connRef246 = new ConnRef(router, 246);\n    ConnEnd srcPt246(Point(497.924, -4.15778), 15);\n    connRef246->setSourceEndpoint(srcPt246);\n    ConnEnd dstPt246(Point(497.924, 45.8422), 15);\n    connRef246->setDestEndpoint(dstPt246);\n    connRef246->setRoutingType((ConnType)2);\n\n    ConnRef *connRef247 = new ConnRef(router, 247);\n    ConnEnd srcPt247(Point(617.924, -4.15778), 15);\n    connRef247->setSourceEndpoint(srcPt247);\n    ConnEnd dstPt247(Point(617.924, 45.8422), 15);\n    connRef247->setDestEndpoint(dstPt247);\n    connRef247->setRoutingType((ConnType)2);\n\n    ConnRef *connRef248 = new ConnRef(router, 248);\n    ConnEnd srcPt248(Point(737.924, 524.057), 15);\n    connRef248->setSourceEndpoint(srcPt248);\n    ConnEnd dstPt248(Point(737.924, 574.057), 15);\n    connRef248->setDestEndpoint(dstPt248);\n    connRef248->setRoutingType((ConnType)2);\n\n    ConnRef *connRef249 = new ConnRef(router, 249);\n    ConnEnd srcPt249(Point(497.924, 477.557), 15);\n    connRef249->setSourceEndpoint(srcPt249);\n    ConnEnd dstPt249(Point(497.924, 527.557), 15);\n    connRef249->setDestEndpoint(dstPt249);\n    connRef249->setRoutingType((ConnType)2);\n\n    ConnRef *connRef250 = new ConnRef(router, 250);\n    ConnEnd srcPt250(Point(497.924, 385.557), 15);\n    connRef250->setSourceEndpoint(srcPt250);\n    ConnEnd dstPt250(Point(497.924, 435.557), 15);\n    connRef250->setDestEndpoint(dstPt250);\n    connRef250->setRoutingType((ConnType)2);\n\n    ConnRef *connRef251 = new ConnRef(router, 251);\n    ConnEnd srcPt251(Point(617.924, 477.557), 15);\n    connRef251->setSourceEndpoint(srcPt251);\n    ConnEnd dstPt251(Point(617.924, 527.557), 15);\n    connRef251->setDestEndpoint(dstPt251);\n    connRef251->setRoutingType((ConnType)2);\n\n    ConnRef *connRef252 = new ConnRef(router, 252);\n    ConnEnd srcPt252(Point(617.924, 385.557), 15);\n    connRef252->setSourceEndpoint(srcPt252);\n    ConnEnd dstPt252(Point(617.924, 435.557), 15);\n    connRef252->setDestEndpoint(dstPt252);\n    connRef252->setRoutingType((ConnType)2);\n\n    ConnRef *connRef253 = new ConnRef(router, 253);\n    ConnEnd srcPt253(Point(857.924, 293.557), 15);\n    connRef253->setSourceEndpoint(srcPt253);\n    ConnEnd dstPt253(Point(857.924, 343.557), 15);\n    connRef253->setDestEndpoint(dstPt253);\n    connRef253->setRoutingType((ConnType)2);\n\n    ConnRef *connRef170 = new ConnRef(router, 170);\n    ConnEnd srcPt170(Point(1018.92, 161.557), 15);\n    connRef170->setSourceEndpoint(srcPt170);\n    ConnEnd dstPt170(Point(1068.92, 152.342), 15);\n    connRef170->setDestEndpoint(dstPt170);\n    connRef170->setRoutingType((ConnType)2);\n\n    ConnRef *connRef171 = new ConnRef(router, 171);\n    ConnEnd srcPt171(Point(1018.92, 161.557), 15);\n    connRef171->setSourceEndpoint(srcPt171);\n    ConnEnd dstPt171(Point(1068.92, 60.3422), 15);\n    connRef171->setDestEndpoint(dstPt171);\n    connRef171->setRoutingType((ConnType)2);\n\n    ConnRef *connRef172 = new ConnRef(router, 172);\n    ConnEnd srcPt172(Point(267.924, 315.557), 15);\n    connRef172->setSourceEndpoint(srcPt172);\n    ConnEnd dstPt172(Point(437.924, 161.557), 15);\n    connRef172->setDestEndpoint(dstPt172);\n    connRef172->setRoutingType((ConnType)2);\n\n    ConnRef *connRef173 = new ConnRef(router, 173);\n    ConnEnd srcPt173(Point(437.924, 161.557), 15);\n    connRef173->setSourceEndpoint(srcPt173);\n    ConnEnd dstPt173(Point(487.924, 45.8422), 15);\n    connRef173->setDestEndpoint(dstPt173);\n    connRef173->setRoutingType((ConnType)2);\n\n    ConnRef *connRef174 = new ConnRef(router, 174);\n    ConnEnd srcPt174(Point(437.924, 161.557), 15);\n    connRef174->setSourceEndpoint(srcPt174);\n    ConnEnd dstPt174(Point(727.924, 161.557), 15);\n    connRef174->setDestEndpoint(dstPt174);\n    connRef174->setRoutingType((ConnType)2);\n\n    ConnRef *connRef175 = new ConnRef(router, 175);\n    ConnEnd srcPt175(Point(77.9242, 161.557), 15);\n    connRef175->setSourceEndpoint(srcPt175);\n    ConnEnd dstPt175(Point(127.924, 161.557), 15);\n    connRef175->setDestEndpoint(dstPt175);\n    connRef175->setRoutingType((ConnType)2);\n\n    ConnRef *connRef176 = new ConnRef(router, 176);\n    ConnEnd srcPt176(Point(77.9242, 161.557), 15);\n    connRef176->setSourceEndpoint(srcPt176);\n    ConnEnd dstPt176(Point(77.9242, 357.557), 15);\n    connRef176->setDestEndpoint(dstPt176);\n    connRef176->setRoutingType((ConnType)2);\n\n    ConnRef *connRef177 = new ConnRef(router, 177);\n    ConnEnd srcPt177(Point(557.924, 763.557), 15);\n    connRef177->setSourceEndpoint(srcPt177);\n    ConnEnd dstPt177(Point(607.924, 763.557), 15);\n    connRef177->setDestEndpoint(dstPt177);\n    connRef177->setRoutingType((ConnType)2);\n\n    ConnRef *connRef178 = new ConnRef(router, 178);\n    ConnEnd srcPt178(Point(77.9242, 527.557), 15);\n    connRef178->setSourceEndpoint(srcPt178);\n    ConnEnd dstPt178(Point(127.924, 527.557), 15);\n    connRef178->setDestEndpoint(dstPt178);\n    connRef178->setRoutingType((ConnType)2);\n\n    ConnRef *connRef179 = new ConnRef(router, 179);\n    ConnEnd srcPt179(Point(557.924, 54.8422), 15);\n    connRef179->setSourceEndpoint(srcPt179);\n    ConnEnd dstPt179(Point(607.924, 45.8422), 15);\n    connRef179->setDestEndpoint(dstPt179);\n    connRef179->setRoutingType((ConnType)2);\n\n    ConnRef *connRef180 = new ConnRef(router, 180);\n    ConnEnd srcPt180(Point(557.924, 435.557), 15);\n    connRef180->setSourceEndpoint(srcPt180);\n    ConnEnd dstPt180(Point(607.924, 435.557), 15);\n    connRef180->setDestEndpoint(dstPt180);\n    connRef180->setRoutingType((ConnType)2);\n\n    ConnRef *connRef181 = new ConnRef(router, 181);\n    ConnEnd srcPt181(Point(77.9242, 763.557), 15);\n    connRef181->setSourceEndpoint(srcPt181);\n    ConnEnd dstPt181(Point(77.9242, 671.557), 15);\n    connRef181->setDestEndpoint(dstPt181);\n    connRef181->setRoutingType((ConnType)2);\n\n    ConnRef *connRef182 = new ConnRef(router, 182);\n    ConnEnd srcPt182(Point(77.9242, 763.557), 15);\n    connRef182->setSourceEndpoint(srcPt182);\n    ConnEnd dstPt182(Point(127.924, 763.557), 15);\n    connRef182->setDestEndpoint(dstPt182);\n    connRef182->setRoutingType((ConnType)2);\n\n    ConnRef *connRef183 = new ConnRef(router, 183);\n    ConnEnd srcPt183(Point(197.924, 315.557), 15);\n    connRef183->setSourceEndpoint(srcPt183);\n    ConnEnd dstPt183(Point(247.924, 315.557), 15);\n    connRef183->setDestEndpoint(dstPt183);\n    connRef183->setRoutingType((ConnType)2);\n\n    ConnRef *connRef184 = new ConnRef(router, 184);\n    ConnEnd srcPt184(Point(677.924, 343.557), 15);\n    connRef184->setSourceEndpoint(srcPt184);\n    ConnEnd dstPt184(Point(727.924, 343.557), 15);\n    connRef184->setDestEndpoint(dstPt184);\n    connRef184->setRoutingType((ConnType)2);\n\n    ConnRef *connRef185 = new ConnRef(router, 185);\n    ConnEnd srcPt185(Point(797.924, 161.557), 15);\n    connRef185->setSourceEndpoint(srcPt185);\n    ConnEnd dstPt185(Point(847.924, 161.557), 15);\n    connRef185->setDestEndpoint(dstPt185);\n    connRef185->setRoutingType((ConnType)2);\n\n    ConnRef *connRef186 = new ConnRef(router, 186);\n    ConnEnd srcPt186(Point(77.9242, 34.8422), 15);\n    connRef186->setSourceEndpoint(srcPt186);\n    ConnEnd dstPt186(Point(127.924, 34.8422), 15);\n    connRef186->setDestEndpoint(dstPt186);\n    connRef186->setRoutingType((ConnType)2);\n\n    ConnRef *connRef187 = new ConnRef(router, 187);\n    ConnEnd srcPt187(Point(437.924, 527.557), 15);\n    connRef187->setSourceEndpoint(srcPt187);\n    ConnEnd dstPt187(Point(487.924, 527.557), 15);\n    connRef187->setDestEndpoint(dstPt187);\n    connRef187->setRoutingType((ConnType)2);\n\n    ConnRef *connRef188 = new ConnRef(router, 188);\n    ConnEnd srcPt188(Point(77.9242, 619.557), 15);\n    connRef188->setSourceEndpoint(srcPt188);\n    ConnEnd dstPt188(Point(127.924, 619.557), 15);\n    connRef188->setDestEndpoint(dstPt188);\n    connRef188->setRoutingType((ConnType)2);\n\n    ConnRef *connRef189 = new ConnRef(router, 189);\n    ConnEnd srcPt189(Point(747.924, -60.6578), 15);\n    connRef189->setSourceEndpoint(srcPt189);\n    ConnEnd dstPt189(Point(797.924, -60.6578), 15);\n    connRef189->setDestEndpoint(dstPt189);\n    connRef189->setRoutingType((ConnType)2);\n\n    ConnRef *connRef190 = new ConnRef(router, 190);\n    ConnEnd srcPt190(Point(147.924, 34.8422), 15);\n    connRef190->setSourceEndpoint(srcPt190);\n    ConnEnd dstPt190(Point(197.924, 161.557), 15);\n    connRef190->setDestEndpoint(dstPt190);\n    connRef190->setRoutingType((ConnType)2);\n\n    ConnRef *connRef191 = new ConnRef(router, 191);\n    ConnEnd srcPt191(Point(267.924, 161.557), 15);\n    connRef191->setSourceEndpoint(srcPt191);\n    ConnEnd dstPt191(Point(317.924, 161.557), 15);\n    connRef191->setDestEndpoint(dstPt191);\n    connRef191->setRoutingType((ConnType)2);\n\n    ConnRef *connRef192 = new ConnRef(router, 192);\n    ConnEnd srcPt192(Point(197.924, 223.557), 15);\n    connRef192->setSourceEndpoint(srcPt192);\n    ConnEnd dstPt192(Point(197.924, 315.557), 15);\n    connRef192->setDestEndpoint(dstPt192);\n    connRef192->setRoutingType((ConnType)2);\n\n    ConnRef *connRef193 = new ConnRef(router, 193);\n    ConnEnd srcPt193(Point(77.9242, 377.557), 15);\n    connRef193->setSourceEndpoint(srcPt193);\n    ConnEnd dstPt193(Point(77.9242, 527.557), 15);\n    connRef193->setDestEndpoint(dstPt193);\n    connRef193->setRoutingType((ConnType)2);\n\n    ConnRef *connRef194 = new ConnRef(router, 194);\n    ConnEnd srcPt194(Point(147.924, 527.557), 15);\n    connRef194->setSourceEndpoint(srcPt194);\n    ConnEnd dstPt194(Point(197.924, 527.557), 15);\n    connRef194->setDestEndpoint(dstPt194);\n    connRef194->setRoutingType((ConnType)2);\n\n    ConnRef *connRef195 = new ConnRef(router, 195);\n    ConnEnd srcPt195(Point(147.924, 619.557), 15);\n    connRef195->setSourceEndpoint(srcPt195);\n    ConnEnd dstPt195(Point(197.924, 763.557), 15);\n    connRef195->setDestEndpoint(dstPt195);\n    connRef195->setRoutingType((ConnType)2);\n\n    ConnRef *connRef196 = new ConnRef(router, 196);\n    ConnEnd srcPt196(Point(77.9242, 651.557), 15);\n    connRef196->setSourceEndpoint(srcPt196);\n    ConnEnd dstPt196(Point(77.9242, 619.557), 15);\n    connRef196->setDestEndpoint(dstPt196);\n    connRef196->setRoutingType((ConnType)2);\n\n    ConnRef *connRef197 = new ConnRef(router, 197);\n    ConnEnd srcPt197(Point(147.924, 763.557), 15);\n    connRef197->setSourceEndpoint(srcPt197);\n    ConnEnd dstPt197(Point(197.924, 763.557), 15);\n    connRef197->setDestEndpoint(dstPt197);\n    connRef197->setRoutingType((ConnType)2);\n\n    router->processTransaction();\n    router->outputDiagram(\"output/lineSegWrapperCrash3\");\n    delete router;\n    return 0;\n};\n"
  },
  {
    "path": "cola/libavoid/tests/lineSegWrapperCrash4.cpp",
    "content": "#include \"libavoid/libavoid.h\"\nusing namespace Avoid;\nint main(void) {\n    Router *router = new Router(OrthogonalRouting);\n    router->setRoutingPenalty((PenaltyType)0, 50);\n    router->setRoutingPenalty((PenaltyType)1, 0);\n    router->setRoutingPenalty((PenaltyType)2, 0);\n    router->setRoutingPenalty((PenaltyType)3, 4000);\n    router->setRoutingPenalty((PenaltyType)4, 0);\n\n    Polygon poly45(4);\n    poly45.ps[0] = Point(577.924, 34.8422);\n    poly45.ps[1] = Point(577.924, 74.8422);\n    poly45.ps[2] = Point(537.924, 74.8422);\n    poly45.ps[3] = Point(537.924, 34.8422);\n    new ShapeRef(router, poly45, 45);\n    \n    Polygon poly137(4);\n    poly137.ps[0] = Point(1106.92, 318.557);\n    poly137.ps[1] = Point(1106.92, 358.557);\n    poly137.ps[2] = Point(1050.92, 358.557);\n    poly137.ps[3] = Point(1050.92, 318.557);\n    new ShapeRef(router, poly137, 137);\n    \n    Polygon poly138(4);\n    poly138.ps[0] = Point(1226.92, 318.557);\n    poly138.ps[1] = Point(1226.92, 358.557);\n    poly138.ps[2] = Point(1170.92, 358.557);\n    poly138.ps[3] = Point(1170.92, 318.557);\n    new ShapeRef(router, poly138, 138);\n    \n    Polygon poly139(4);\n    poly139.ps[0] = Point(1106.92, 82.3422);\n    poly139.ps[1] = Point(1106.92, 122.342);\n    poly139.ps[2] = Point(1050.92, 122.342);\n    poly139.ps[3] = Point(1050.92, 82.3422);\n    new ShapeRef(router, poly139, 139);\n    \n    Polygon poly140(4);\n    poly140.ps[0] = Point(1106.92, -9.65778);\n    poly140.ps[1] = Point(1106.92, 30.3422);\n    poly140.ps[2] = Point(1050.92, 30.3422);\n    poly140.ps[3] = Point(1050.92, -9.65778);\n    new ShapeRef(router, poly140, 140);\n    \n    Polygon poly141(4);\n    poly141.ps[0] = Point(1226.92, 82.3422);\n    poly141.ps[1] = Point(1226.92, 122.342);\n    poly141.ps[2] = Point(1170.92, 122.342);\n    poly141.ps[3] = Point(1170.92, 82.3422);\n    new ShapeRef(router, poly141, 141);\n    \n    Polygon poly142(4);\n    poly142.ps[0] = Point(1106.92, -130.658);\n    poly142.ps[1] = Point(1106.92, -90.6578);\n    poly142.ps[2] = Point(1050.92, -90.6578);\n    poly142.ps[3] = Point(1050.92, -130.658);\n    new ShapeRef(router, poly142, 142);\n    \n    Polygon poly143(4);\n    poly143.ps[0] = Point(986.924, 210.557);\n    poly143.ps[1] = Point(986.924, 250.557);\n    poly143.ps[2] = Point(930.924, 250.557);\n    poly143.ps[3] = Point(930.924, 210.557);\n    new ShapeRef(router, poly143, 143);\n    \n    Polygon poly144(4);\n    poly144.ps[0] = Point(765.924, 91.5565);\n    poly144.ps[1] = Point(765.924, 131.557);\n    poly144.ps[2] = Point(709.924, 131.557);\n    poly144.ps[3] = Point(709.924, 91.5565);\n    new ShapeRef(router, poly144, 144);\n    \n    Polygon poly145(4);\n    poly145.ps[0] = Point(765.924, 790.057);\n    poly145.ps[1] = Point(765.924, 830.057);\n    poly145.ps[2] = Point(709.924, 830.057);\n    poly145.ps[3] = Point(709.924, 790.057);\n    new ShapeRef(router, poly145, 145);\n    \n    Polygon poly146(4);\n    poly146.ps[0] = Point(45.9242, 232.5);\n    poly146.ps[1] = Point(45.9242, 272.5);\n    poly146.ps[2] = Point(-14.0758, 272.5);\n    poly146.ps[3] = Point(-14.0758, 232.5);\n    new ShapeRef(router, poly146, 146);\n    \n    Polygon poly147(4);\n    poly147.ps[0] = Point(-26.0758, 274.75);\n    poly147.ps[1] = Point(-26.0758, 334.75);\n    poly147.ps[2] = Point(-66.0758, 334.75);\n    poly147.ps[3] = Point(-66.0758, 274.75);\n    new ShapeRef(router, poly147, 147);\n    \n    Polygon poly10(4);\n    poly10.ps[0] = Point(937.924, -80.6578);\n    poly10.ps[1] = Point(937.924, -40.6578);\n    poly10.ps[2] = Point(897.924, -40.6578);\n    poly10.ps[3] = Point(897.924, -80.6578);\n    new ShapeRef(router, poly10, 10);\n    \n    Polygon poly33(4);\n    poly33.ps[0] = Point(937.924, 415.557);\n    poly33.ps[1] = Point(937.924, 455.557);\n    poly33.ps[2] = Point(897.924, 455.557);\n    poly33.ps[3] = Point(897.924, 415.557);\n    new ShapeRef(router, poly33, 33);\n    \n    Polygon poly114(4);\n    poly114.ps[0] = Point(165.924, 549.557);\n    poly114.ps[1] = Point(165.924, 589.557);\n    poly114.ps[2] = Point(109.924, 589.557);\n    poly114.ps[3] = Point(109.924, 549.557);\n    new ShapeRef(router, poly114, 114);\n    \n    Polygon poly115(4);\n    poly115.ps[0] = Point(167.924, 641.557);\n    poly115.ps[1] = Point(167.924, 681.557);\n    poly115.ps[2] = Point(111.924, 681.557);\n    poly115.ps[3] = Point(111.924, 641.557);\n    new ShapeRef(router, poly115, 115);\n    \n    Polygon poly116(4);\n    poly116.ps[0] = Point(165.924, 693.557);\n    poly116.ps[1] = Point(165.924, 733.557);\n    poly116.ps[2] = Point(109.924, 733.557);\n    poly116.ps[3] = Point(109.924, 693.557);\n    new ShapeRef(router, poly116, 116);\n    \n    Polygon poly117(4);\n    poly117.ps[0] = Point(285.924, 693.557);\n    poly117.ps[1] = Point(285.924, 733.557);\n    poly117.ps[2] = Point(229.924, 733.557);\n    poly117.ps[3] = Point(229.924, 693.557);\n    new ShapeRef(router, poly117, 117);\n    \n    Polygon poly118(4);\n    poly118.ps[0] = Point(405.924, 557.557);\n    poly118.ps[1] = Point(405.924, 597.557);\n    poly118.ps[2] = Point(349.924, 597.557);\n    poly118.ps[3] = Point(349.924, 557.557);\n    new ShapeRef(router, poly118, 118);\n    \n    Polygon poly119(4);\n    poly119.ps[0] = Point(405.924, 693.557);\n    poly119.ps[1] = Point(405.924, 733.557);\n    poly119.ps[2] = Point(349.924, 733.557);\n    poly119.ps[3] = Point(349.924, 693.557);\n    new ShapeRef(router, poly119, 119);\n    \n    Polygon poly120(4);\n    poly120.ps[0] = Point(525.924, 693.557);\n    poly120.ps[1] = Point(525.924, 733.557);\n    poly120.ps[2] = Point(469.924, 733.557);\n    poly120.ps[3] = Point(469.924, 693.557);\n    new ShapeRef(router, poly120, 120);\n    \n    Polygon poly121(4);\n    poly121.ps[0] = Point(645.924, 693.557);\n    poly121.ps[1] = Point(645.924, 733.557);\n    poly121.ps[2] = Point(589.924, 733.557);\n    poly121.ps[3] = Point(589.924, 693.557);\n    new ShapeRef(router, poly121, 121);\n    \n    Polygon poly122(4);\n    poly122.ps[0] = Point(525.924, 833.057);\n    poly122.ps[1] = Point(525.924, 873.057);\n    poly122.ps[2] = Point(469.924, 873.057);\n    poly122.ps[3] = Point(469.924, 833.057);\n    new ShapeRef(router, poly122, 122);\n    \n    Polygon poly123(4);\n    poly123.ps[0] = Point(645.924, 833.057);\n    poly123.ps[1] = Point(645.924, 873.057);\n    poly123.ps[2] = Point(589.924, 873.057);\n    poly123.ps[3] = Point(589.924, 833.057);\n    new ShapeRef(router, poly123, 123);\n    \n    Polygon poly124(4);\n    poly124.ps[0] = Point(405.924, 91.5565);\n    poly124.ps[1] = Point(405.924, 131.557);\n    poly124.ps[2] = Point(349.924, 131.557);\n    poly124.ps[3] = Point(349.924, 91.5565);\n    new ShapeRef(router, poly124, 124);\n    \n    Polygon poly125(4);\n    poly125.ps[0] = Point(405.924, -42.6578);\n    poly125.ps[1] = Point(405.924, -2.65778);\n    poly125.ps[2] = Point(349.924, -2.65778);\n    poly125.ps[3] = Point(349.924, -42.6578);\n    new ShapeRef(router, poly125, 125);\n    \n    Polygon poly126(4);\n    poly126.ps[0] = Point(525.924, -24.1578);\n    poly126.ps[1] = Point(525.924, 15.8422);\n    poly126.ps[2] = Point(469.924, 15.8422);\n    poly126.ps[3] = Point(469.924, -24.1578);\n    new ShapeRef(router, poly126, 126);\n    \n    Polygon poly127(4);\n    poly127.ps[0] = Point(645.924, -24.1578);\n    poly127.ps[1] = Point(645.924, 15.8422);\n    poly127.ps[2] = Point(589.924, 15.8422);\n    poly127.ps[3] = Point(589.924, -24.1578);\n    new ShapeRef(router, poly127, 127);\n    \n    Polygon poly128(4);\n    poly128.ps[0] = Point(765.924, 504.057);\n    poly128.ps[1] = Point(765.924, 544.057);\n    poly128.ps[2] = Point(709.924, 544.057);\n    poly128.ps[3] = Point(709.924, 504.057);\n    new ShapeRef(router, poly128, 128);\n    \n    Polygon poly129(4);\n    poly129.ps[0] = Point(525.924, 457.557);\n    poly129.ps[1] = Point(525.924, 497.557);\n    poly129.ps[2] = Point(469.924, 497.557);\n    poly129.ps[3] = Point(469.924, 457.557);\n    new ShapeRef(router, poly129, 129);\n    \n    Polygon poly130(4);\n    poly130.ps[0] = Point(525.924, 365.557);\n    poly130.ps[1] = Point(525.924, 405.557);\n    poly130.ps[2] = Point(469.924, 405.557);\n    poly130.ps[3] = Point(469.924, 365.557);\n    new ShapeRef(router, poly130, 130);\n    \n    Polygon poly131(4);\n    poly131.ps[0] = Point(645.924, 457.557);\n    poly131.ps[1] = Point(645.924, 497.557);\n    poly131.ps[2] = Point(589.924, 497.557);\n    poly131.ps[3] = Point(589.924, 457.557);\n    new ShapeRef(router, poly131, 131);\n    \n    Polygon poly132(4);\n    poly132.ps[0] = Point(645.924, 365.557);\n    poly132.ps[1] = Point(645.924, 405.557);\n    poly132.ps[2] = Point(589.924, 405.557);\n    poly132.ps[3] = Point(589.924, 365.557);\n    new ShapeRef(router, poly132, 132);\n    \n    Polygon poly133(4);\n    poly133.ps[0] = Point(885.924, 273.557);\n    poly133.ps[1] = Point(885.924, 313.557);\n    poly133.ps[2] = Point(829.924, 313.557);\n    poly133.ps[3] = Point(829.924, 273.557);\n    new ShapeRef(router, poly133, 133);\n    \n    Polygon poly134(4);\n    poly134.ps[0] = Point(885.924, 365.557);\n    poly134.ps[1] = Point(885.924, 405.557);\n    poly134.ps[2] = Point(829.924, 405.557);\n    poly134.ps[3] = Point(829.924, 365.557);\n    new ShapeRef(router, poly134, 134);\n    \n    Polygon poly135(4);\n    poly135.ps[0] = Point(885.924, 91.5565);\n    poly135.ps[1] = Point(885.924, 131.557);\n    poly135.ps[2] = Point(829.924, 131.557);\n    poly135.ps[3] = Point(829.924, 91.5565);\n    new ShapeRef(router, poly135, 135);\n    \n    Polygon poly136(4);\n    poly136.ps[0] = Point(765.924, 273.557);\n    poly136.ps[1] = Point(765.924, 313.557);\n    poly136.ps[2] = Point(709.924, 313.557);\n    poly136.ps[3] = Point(709.924, 273.557);\n    new ShapeRef(router, poly136, 136);\n    \n    Polygon poly41(4);\n    poly41.ps[0] = Point(577.924, 743.557);\n    poly41.ps[1] = Point(577.924, 783.557);\n    poly41.ps[2] = Point(537.924, 783.557);\n    poly41.ps[3] = Point(537.924, 743.557);\n    new ShapeRef(router, poly41, 41);\n    \n    Polygon poly35(4);\n    poly35.ps[0] = Point(1158.92, 40.3422);\n    poly35.ps[1] = Point(1158.92, 80.3422);\n    poly35.ps[2] = Point(1118.92, 80.3422);\n    poly35.ps[3] = Point(1118.92, 40.3422);\n    new ShapeRef(router, poly35, 35);\n    \n    Polygon poly6(4);\n    poly6.ps[0] = Point(1371.92, -80.6578);\n    poly6.ps[1] = Point(1371.92, -40.6578);\n    poly6.ps[2] = Point(1331.92, -40.6578);\n    poly6.ps[3] = Point(1331.92, -80.6578);\n    new ShapeRef(router, poly6, 6);\n    \n    Polygon poly43(4);\n    poly43.ps[0] = Point(1038.92, 1.84222);\n    poly43.ps[1] = Point(1038.92, 41.8422);\n    poly43.ps[2] = Point(998.924, 41.8422);\n    poly43.ps[3] = Point(998.924, 1.84222);\n    new ShapeRef(router, poly43, 43);\n    \n    Polygon poly53(4);\n    poly53.ps[0] = Point(577.924, 323.557);\n    poly53.ps[1] = Point(577.924, 363.557);\n    poly53.ps[2] = Point(537.924, 363.557);\n    poly53.ps[3] = Point(537.924, 323.557);\n    new ShapeRef(router, poly53, 53);\n    \n    Polygon poly31(4);\n    poly31.ps[0] = Point(1278.92, 141.557);\n    poly31.ps[1] = Point(1278.92, 181.557);\n    poly31.ps[2] = Point(1238.92, 181.557);\n    poly31.ps[3] = Point(1238.92, 141.557);\n    new ShapeRef(router, poly31, 31);\n    \n    Polygon poly42(4);\n    poly42.ps[0] = Point(697.924, 415.557);\n    poly42.ps[1] = Point(697.924, 455.557);\n    poly42.ps[2] = Point(657.924, 455.557);\n    poly42.ps[3] = Point(657.924, 415.557);\n    new ShapeRef(router, poly42, 42);\n    \n    Polygon poly28(4);\n    poly28.ps[0] = Point(817.924, 323.557);\n    poly28.ps[1] = Point(817.924, 363.557);\n    poly28.ps[2] = Point(777.924, 363.557);\n    poly28.ps[3] = Point(777.924, 323.557);\n    new ShapeRef(router, poly28, 28);\n    \n    Polygon poly34(4);\n    poly34.ps[0] = Point(1278.92, 323.557);\n    poly34.ps[1] = Point(1278.92, 363.557);\n    poly34.ps[2] = Point(1238.92, 363.557);\n    poly34.ps[3] = Point(1238.92, 323.557);\n    new ShapeRef(router, poly34, 34);\n    \n    Polygon poly36(4);\n    poly36.ps[0] = Point(697.924, 507.557);\n    poly36.ps[1] = Point(697.924, 547.557);\n    poly36.ps[2] = Point(657.924, 547.557);\n    poly36.ps[3] = Point(657.924, 507.557);\n    new ShapeRef(router, poly36, 36);\n    \n    Polygon poly30(4);\n    poly30.ps[0] = Point(1278.92, 415.557);\n    poly30.ps[1] = Point(1278.92, 455.557);\n    poly30.ps[2] = Point(1238.92, 455.557);\n    poly30.ps[3] = Point(1238.92, 415.557);\n    new ShapeRef(router, poly30, 30);\n    \n    Polygon poly77(4);\n    poly77.ps[0] = Point(267.924, 753.557);\n    poly77.ps[1] = Point(267.924, 773.557);\n    poly77.ps[2] = Point(247.924, 773.557);\n    poly77.ps[3] = Point(247.924, 753.557);\n    new ShapeRef(router, poly77, 77);\n    \n    Polygon poly78(4);\n    poly78.ps[0] = Point(387.924, 617.557);\n    poly78.ps[1] = Point(387.924, 637.557);\n    poly78.ps[2] = Point(367.924, 637.557);\n    poly78.ps[3] = Point(367.924, 617.557);\n    new ShapeRef(router, poly78, 78);\n    \n    Polygon poly79(4);\n    poly79.ps[0] = Point(387.924, 753.557);\n    poly79.ps[1] = Point(387.924, 773.557);\n    poly79.ps[2] = Point(367.924, 773.557);\n    poly79.ps[3] = Point(367.924, 753.557);\n    new ShapeRef(router, poly79, 79);\n    \n    Polygon poly80(4);\n    poly80.ps[0] = Point(507.924, 753.557);\n    poly80.ps[1] = Point(507.924, 773.557);\n    poly80.ps[2] = Point(487.924, 773.557);\n    poly80.ps[3] = Point(487.924, 753.557);\n    new ShapeRef(router, poly80, 80);\n    \n    Polygon poly81(4);\n    poly81.ps[0] = Point(627.924, 753.557);\n    poly81.ps[1] = Point(627.924, 773.557);\n    poly81.ps[2] = Point(607.924, 773.557);\n    poly81.ps[3] = Point(607.924, 753.557);\n    new ShapeRef(router, poly81, 81);\n    \n    Polygon poly11(4);\n    poly11.ps[0] = Point(817.924, -80.6578);\n    poly11.ps[1] = Point(817.924, -40.6578);\n    poly11.ps[2] = Point(777.924, -40.6578);\n    poly11.ps[3] = Point(777.924, -80.6578);\n    new ShapeRef(router, poly11, 11);\n    \n    Polygon poly25(4);\n    poly25.ps[0] = Point(697.924, 883.057);\n    poly25.ps[1] = Point(697.924, 923.057);\n    poly25.ps[2] = Point(657.924, 923.057);\n    poly25.ps[3] = Point(657.924, 883.057);\n    new ShapeRef(router, poly25, 25);\n    \n    Polygon poly49(4);\n    poly49.ps[0] = Point(45.9242, 169.75);\n    poly49.ps[1] = Point(45.9242, 334.75);\n    poly49.ps[2] = Point(-242.076, 334.75);\n    poly49.ps[3] = Point(-242.076, 169.75);\n    new ShapeRef(router, poly49, 49);\n    \n    Polygon poly52(4);\n    poly52.ps[0] = Point(217.924, 295.557);\n    poly52.ps[1] = Point(217.924, 335.557);\n    poly52.ps[2] = Point(177.924, 335.557);\n    poly52.ps[3] = Point(177.924, 295.557);\n    new ShapeRef(router, poly52, 52);\n    \n    Polygon poly50(4);\n    poly50.ps[0] = Point(272.5, -82.1578);\n    poly50.ps[1] = Point(272.5, -47.1578);\n    poly50.ps[2] = Point(35.5, -47.1578);\n    poly50.ps[3] = Point(35.5, -82.1578);\n    new ShapeRef(router, poly50, 50);\n    \n    Polygon poly8(4);\n    poly8.ps[0] = Point(1158.92, -80.6578);\n    poly8.ps[1] = Point(1158.92, -40.6578);\n    poly8.ps[2] = Point(1118.92, -40.6578);\n    poly8.ps[3] = Point(1118.92, -80.6578);\n    new ShapeRef(router, poly8, 8);\n    \n    Polygon poly44(4);\n    poly44.ps[0] = Point(97.9242, 507.557);\n    poly44.ps[1] = Point(97.9242, 547.557);\n    poly44.ps[2] = Point(57.9242, 547.557);\n    poly44.ps[3] = Point(57.9242, 507.557);\n    new ShapeRef(router, poly44, 44);\n    \n    Polygon poly18(4);\n    poly18.ps[0] = Point(217.924, 743.557);\n    poly18.ps[1] = Point(217.924, 783.557);\n    poly18.ps[2] = Point(177.924, 783.557);\n    poly18.ps[3] = Point(177.924, 743.557);\n    new ShapeRef(router, poly18, 18);\n    \n    Polygon poly1(4);\n    poly1.ps[0] = Point(817.924, 840.057);\n    poly1.ps[1] = Point(817.924, 880.057);\n    poly1.ps[2] = Point(777.924, 880.057);\n    poly1.ps[3] = Point(777.924, 840.057);\n    new ShapeRef(router, poly1, 1);\n    \n    Polygon poly21(4);\n    poly21.ps[0] = Point(937.924, 141.557);\n    poly21.ps[1] = Point(937.924, 181.557);\n    poly21.ps[2] = Point(897.924, 181.557);\n    poly21.ps[3] = Point(897.924, 141.557);\n    new ShapeRef(router, poly21, 21);\n    \n    Polygon poly38(4);\n    poly38.ps[0] = Point(217.924, 507.557);\n    poly38.ps[1] = Point(217.924, 547.557);\n    poly38.ps[2] = Point(177.924, 547.557);\n    poly38.ps[3] = Point(177.924, 507.557);\n    new ShapeRef(router, poly38, 38);\n    \n    Polygon poly24(4);\n    poly24.ps[0] = Point(457.924, 743.557);\n    poly24.ps[1] = Point(457.924, 783.557);\n    poly24.ps[2] = Point(417.924, 783.557);\n    poly24.ps[3] = Point(417.924, 743.557);\n    new ShapeRef(router, poly24, 24);\n    \n    Polygon poly39(4);\n    poly39.ps[0] = Point(457.924, 141.557);\n    poly39.ps[1] = Point(457.924, 181.557);\n    poly39.ps[2] = Point(417.924, 181.557);\n    poly39.ps[3] = Point(417.924, 141.557);\n    new ShapeRef(router, poly39, 39);\n    \n    Polygon poly7(4);\n    poly7.ps[0] = Point(1278.92, -80.6578);\n    poly7.ps[1] = Point(1278.92, -40.6578);\n    poly7.ps[2] = Point(1238.92, -40.6578);\n    poly7.ps[3] = Point(1238.92, -80.6578);\n    new ShapeRef(router, poly7, 7);\n    \n    Polygon poly51(4);\n    poly51.ps[0] = Point(1038.92, 323.557);\n    poly51.ps[1] = Point(1038.92, 363.557);\n    poly51.ps[2] = Point(998.924, 363.557);\n    poly51.ps[3] = Point(998.924, 323.557);\n    new ShapeRef(router, poly51, 51);\n    \n    Polygon poly27(4);\n    poly27.ps[0] = Point(577.924, 507.557);\n    poly27.ps[1] = Point(577.924, 547.557);\n    poly27.ps[2] = Point(537.924, 547.557);\n    poly27.ps[3] = Point(537.924, 507.557);\n    new ShapeRef(router, poly27, 27);\n    \n    Polygon poly9(4);\n    poly9.ps[0] = Point(1038.92, -80.6578);\n    poly9.ps[1] = Point(1038.92, -40.6578);\n    poly9.ps[2] = Point(998.924, -40.6578);\n    poly9.ps[3] = Point(998.924, -80.6578);\n    new ShapeRef(router, poly9, 9);\n    \n    Polygon poly15(4);\n    poly15.ps[0] = Point(1158.92, 415.557);\n    poly15.ps[1] = Point(1158.92, 455.557);\n    poly15.ps[2] = Point(1118.92, 455.557);\n    poly15.ps[3] = Point(1118.92, 415.557);\n    new ShapeRef(router, poly15, 15);\n    \n    Polygon poly19(4);\n    poly19.ps[0] = Point(217.924, 141.557);\n    poly19.ps[1] = Point(217.924, 181.557);\n    poly19.ps[2] = Point(177.924, 181.557);\n    poly19.ps[3] = Point(177.924, 141.557);\n    new ShapeRef(router, poly19, 19);\n    \n    Polygon poly16(4);\n    poly16.ps[0] = Point(337.924, 743.557);\n    poly16.ps[1] = Point(337.924, 783.557);\n    poly16.ps[2] = Point(297.924, 783.557);\n    poly16.ps[3] = Point(297.924, 743.557);\n    new ShapeRef(router, poly16, 16);\n    \n    Polygon poly54(4);\n    poly54.ps[0] = Point(697.924, 323.557);\n    poly54.ps[1] = Point(697.924, 363.557);\n    poly54.ps[2] = Point(657.924, 363.557);\n    poly54.ps[3] = Point(657.924, 323.557);\n    new ShapeRef(router, poly54, 54);\n    \n    Polygon poly29(4);\n    poly29.ps[0] = Point(1038.92, 415.557);\n    poly29.ps[1] = Point(1038.92, 455.557);\n    poly29.ps[2] = Point(998.924, 455.557);\n    poly29.ps[3] = Point(998.924, 415.557);\n    new ShapeRef(router, poly29, 29);\n    \n    Polygon poly40(4);\n    poly40.ps[0] = Point(97.9242, 141.557);\n    poly40.ps[1] = Point(97.9242, 181.557);\n    poly40.ps[2] = Point(57.9242, 181.557);\n    poly40.ps[3] = Point(57.9242, 141.557);\n    new ShapeRef(router, poly40, 40);\n    \n    Polygon poly75(4);\n    poly75.ps[0] = Point(87.9242, 651.557);\n    poly75.ps[1] = Point(87.9242, 671.557);\n    poly75.ps[2] = Point(67.9242, 671.557);\n    poly75.ps[3] = Point(67.9242, 651.557);\n    new ShapeRef(router, poly75, 75);\n    \n    Polygon poly76(4);\n    poly76.ps[0] = Point(147.924, 753.557);\n    poly76.ps[1] = Point(147.924, 773.557);\n    poly76.ps[2] = Point(127.924, 773.557);\n    poly76.ps[3] = Point(127.924, 753.557);\n    new ShapeRef(router, poly76, 76);\n    \n    Polygon poly92(4);\n    poly92.ps[0] = Point(627.924, 425.557);\n    poly92.ps[1] = Point(627.924, 445.557);\n    poly92.ps[2] = Point(607.924, 445.557);\n    poly92.ps[3] = Point(607.924, 425.557);\n    new ShapeRef(router, poly92, 92);\n    \n    Polygon poly93(4);\n    poly93.ps[0] = Point(867.924, 333.557);\n    poly93.ps[1] = Point(867.924, 353.557);\n    poly93.ps[2] = Point(847.924, 353.557);\n    poly93.ps[3] = Point(847.924, 333.557);\n    new ShapeRef(router, poly93, 93);\n    \n    Polygon poly94(4);\n    poly94.ps[0] = Point(867.924, 425.557);\n    poly94.ps[1] = Point(867.924, 445.557);\n    poly94.ps[2] = Point(847.924, 445.557);\n    poly94.ps[3] = Point(847.924, 425.557);\n    new ShapeRef(router, poly94, 94);\n    \n    Polygon poly95(4);\n    poly95.ps[0] = Point(867.924, 151.557);\n    poly95.ps[1] = Point(867.924, 171.557);\n    poly95.ps[2] = Point(847.924, 171.557);\n    poly95.ps[3] = Point(847.924, 151.557);\n    new ShapeRef(router, poly95, 95);\n    \n    Polygon poly96(4);\n    poly96.ps[0] = Point(747.924, 333.557);\n    poly96.ps[1] = Point(747.924, 353.557);\n    poly96.ps[2] = Point(727.924, 353.557);\n    poly96.ps[3] = Point(727.924, 333.557);\n    new ShapeRef(router, poly96, 96);\n    \n    Polygon poly97(4);\n    poly97.ps[0] = Point(1088.92, 378.557);\n    poly97.ps[1] = Point(1088.92, 398.557);\n    poly97.ps[2] = Point(1068.92, 398.557);\n    poly97.ps[3] = Point(1068.92, 378.557);\n    new ShapeRef(router, poly97, 97);\n    \n    Polygon poly98(4);\n    poly98.ps[0] = Point(1208.92, 378.557);\n    poly98.ps[1] = Point(1208.92, 398.557);\n    poly98.ps[2] = Point(1188.92, 398.557);\n    poly98.ps[3] = Point(1188.92, 378.557);\n    new ShapeRef(router, poly98, 98);\n    \n    Polygon poly99(4);\n    poly99.ps[0] = Point(1088.92, 142.342);\n    poly99.ps[1] = Point(1088.92, 162.342);\n    poly99.ps[2] = Point(1068.92, 162.342);\n    poly99.ps[3] = Point(1068.92, 142.342);\n    new ShapeRef(router, poly99, 99);\n    \n    Polygon poly100(4);\n    poly100.ps[0] = Point(1088.92, 50.3422);\n    poly100.ps[1] = Point(1088.92, 70.3422);\n    poly100.ps[2] = Point(1068.92, 70.3422);\n    poly100.ps[3] = Point(1068.92, 50.3422);\n    new ShapeRef(router, poly100, 100);\n    \n    Polygon poly101(4);\n    poly101.ps[0] = Point(1208.92, 142.342);\n    poly101.ps[1] = Point(1208.92, 162.342);\n    poly101.ps[2] = Point(1188.92, 162.342);\n    poly101.ps[3] = Point(1188.92, 142.342);\n    new ShapeRef(router, poly101, 101);\n    \n    Polygon poly102(4);\n    poly102.ps[0] = Point(1088.92, -70.6578);\n    poly102.ps[1] = Point(1088.92, -50.6578);\n    poly102.ps[2] = Point(1068.92, -50.6578);\n    poly102.ps[3] = Point(1068.92, -70.6578);\n    new ShapeRef(router, poly102, 102);\n    \n    Polygon poly103(4);\n    poly103.ps[0] = Point(968.924, 270.557);\n    poly103.ps[1] = Point(968.924, 290.557);\n    poly103.ps[2] = Point(948.924, 290.557);\n    poly103.ps[3] = Point(948.924, 270.557);\n    new ShapeRef(router, poly103, 103);\n    \n    Polygon poly104(4);\n    poly104.ps[0] = Point(747.924, 151.557);\n    poly104.ps[1] = Point(747.924, 171.557);\n    poly104.ps[2] = Point(727.924, 171.557);\n    poly104.ps[3] = Point(727.924, 151.557);\n    new ShapeRef(router, poly104, 104);\n    \n    Polygon poly105(4);\n    poly105.ps[0] = Point(747.924, 850.057);\n    poly105.ps[1] = Point(747.924, 870.057);\n    poly105.ps[2] = Point(727.924, 870.057);\n    poly105.ps[3] = Point(727.924, 850.057);\n    new ShapeRef(router, poly105, 105);\n    \n    Polygon poly106(4);\n    poly106.ps[0] = Point(765.924, -130.658);\n    poly106.ps[1] = Point(765.924, -90.6578);\n    poly106.ps[2] = Point(709.924, -90.6578);\n    poly106.ps[3] = Point(709.924, -130.658);\n    new ShapeRef(router, poly106, 106);\n    \n    Polygon poly107(4);\n    poly107.ps[0] = Point(165.924, -35.1578);\n    poly107.ps[1] = Point(165.924, 4.84222);\n    poly107.ps[2] = Point(109.924, 4.84222);\n    poly107.ps[3] = Point(109.924, -35.1578);\n    new ShapeRef(router, poly107, 107);\n    \n    Polygon poly108(4);\n    poly108.ps[0] = Point(165.924, 91.5565);\n    poly108.ps[1] = Point(165.924, 131.557);\n    poly108.ps[2] = Point(109.924, 131.557);\n    poly108.ps[3] = Point(109.924, 91.5565);\n    new ShapeRef(router, poly108, 108);\n    \n    Polygon poly109(4);\n    poly109.ps[0] = Point(285.924, 91.5565);\n    poly109.ps[1] = Point(285.924, 131.557);\n    poly109.ps[2] = Point(229.924, 131.557);\n    poly109.ps[3] = Point(229.924, 91.5565);\n    new ShapeRef(router, poly109, 109);\n    \n    Polygon poly110(4);\n    poly110.ps[0] = Point(287.924, 193.557);\n    poly110.ps[1] = Point(287.924, 233.557);\n    poly110.ps[2] = Point(231.924, 233.557);\n    poly110.ps[3] = Point(231.924, 193.557);\n    new ShapeRef(router, poly110, 110);\n    \n    Polygon poly111(4);\n    poly111.ps[0] = Point(285.924, 245.557);\n    poly111.ps[1] = Point(285.924, 285.557);\n    poly111.ps[2] = Point(229.924, 285.557);\n    poly111.ps[3] = Point(229.924, 245.557);\n    new ShapeRef(router, poly111, 111);\n    \n    Polygon poly112(4);\n    poly112.ps[0] = Point(167.924, 347.557);\n    poly112.ps[1] = Point(167.924, 387.557);\n    poly112.ps[2] = Point(111.924, 387.557);\n    poly112.ps[3] = Point(111.924, 347.557);\n    new ShapeRef(router, poly112, 112);\n    \n    Polygon poly113(4);\n    poly113.ps[0] = Point(165.924, 457.557);\n    poly113.ps[1] = Point(165.924, 497.557);\n    poly113.ps[2] = Point(109.924, 497.557);\n    poly113.ps[3] = Point(109.924, 457.557);\n    new ShapeRef(router, poly113, 113);\n    \n    Polygon poly17(4);\n    poly17.ps[0] = Point(577.924, 883.057);\n    poly17.ps[1] = Point(577.924, 923.057);\n    poly17.ps[2] = Point(537.924, 923.057);\n    poly17.ps[3] = Point(537.924, 883.057);\n    new ShapeRef(router, poly17, 17);\n    \n    Polygon poly32(4);\n    poly32.ps[0] = Point(1038.92, 141.557);\n    poly32.ps[1] = Point(1038.92, 181.557);\n    poly32.ps[2] = Point(998.924, 181.557);\n    poly32.ps[3] = Point(998.924, 141.557);\n    new ShapeRef(router, poly32, 32);\n    \n    Polygon poly2(4);\n    poly2.ps[0] = Point(577.924, 795.557);\n    poly2.ps[1] = Point(577.924, 835.557);\n    poly2.ps[2] = Point(537.924, 835.557);\n    poly2.ps[3] = Point(537.924, 795.557);\n    new ShapeRef(router, poly2, 2);\n    \n    Polygon poly4(4);\n    poly4.ps[0] = Point(1371.92, 29.8422);\n    poly4.ps[1] = Point(1371.92, 69.8422);\n    poly4.ps[2] = Point(1331.92, 69.8422);\n    poly4.ps[3] = Point(1331.92, 29.8422);\n    new ShapeRef(router, poly4, 4);\n    \n    Polygon poly20(4);\n    poly20.ps[0] = Point(337.924, 507.557);\n    poly20.ps[1] = Point(337.924, 547.557);\n    poly20.ps[2] = Point(297.924, 547.557);\n    poly20.ps[3] = Point(297.924, 507.557);\n    new ShapeRef(router, poly20, 20);\n    \n    Polygon poly48(4);\n    poly48.ps[0] = Point(97.9242, 743.557);\n    poly48.ps[1] = Point(97.9242, 783.557);\n    poly48.ps[2] = Point(57.9242, 783.557);\n    poly48.ps[3] = Point(57.9242, 743.557);\n    new ShapeRef(router, poly48, 48);\n    \n    Polygon poly22(4);\n    poly22.ps[0] = Point(697.924, 34.8422);\n    poly22.ps[1] = Point(697.924, 74.8422);\n    poly22.ps[2] = Point(657.924, 74.8422);\n    poly22.ps[3] = Point(657.924, 34.8422);\n    new ShapeRef(router, poly22, 22);\n    \n    Polygon poly23(4);\n    poly23.ps[0] = Point(337.924, 141.557);\n    poly23.ps[1] = Point(337.924, 181.557);\n    poly23.ps[2] = Point(297.924, 181.557);\n    poly23.ps[3] = Point(297.924, 141.557);\n    new ShapeRef(router, poly23, 23);\n    \n    Polygon poly47(4);\n    poly47.ps[0] = Point(697.924, 271.557);\n    poly47.ps[1] = Point(697.924, 311.557);\n    poly47.ps[2] = Point(657.924, 311.557);\n    poly47.ps[3] = Point(657.924, 271.557);\n    new ShapeRef(router, poly47, 47);\n    \n    Polygon poly13(4);\n    poly13.ps[0] = Point(1158.92, 323.557);\n    poly13.ps[1] = Point(1158.92, 363.557);\n    poly13.ps[2] = Point(1118.92, 363.557);\n    poly13.ps[3] = Point(1118.92, 323.557);\n    new ShapeRef(router, poly13, 13);\n    \n    Polygon poly46(4);\n    poly46.ps[0] = Point(577.924, 415.557);\n    poly46.ps[1] = Point(577.924, 455.557);\n    poly46.ps[2] = Point(537.924, 455.557);\n    poly46.ps[3] = Point(537.924, 415.557);\n    new ShapeRef(router, poly46, 46);\n    \n    Polygon poly5(4);\n    poly5.ps[0] = Point(1371.92, -22.1578);\n    poly5.ps[1] = Point(1371.92, 17.8422);\n    poly5.ps[2] = Point(1331.92, 17.8422);\n    poly5.ps[3] = Point(1331.92, -22.1578);\n    new ShapeRef(router, poly5, 5);\n    \n    Polygon poly56(4);\n    poly56.ps[0] = Point(457.924, -44.6578);\n    poly56.ps[1] = Point(457.924, -4.65778);\n    poly56.ps[2] = Point(417.924, -4.65778);\n    poly56.ps[3] = Point(417.924, -44.6578);\n    new ShapeRef(router, poly56, 56);\n    \n    Polygon poly57(4);\n    poly57.ps[0] = Point(817.924, 141.557);\n    poly57.ps[1] = Point(817.924, 181.557);\n    poly57.ps[2] = Point(777.924, 181.557);\n    poly57.ps[3] = Point(777.924, 141.557);\n    new ShapeRef(router, poly57, 57);\n    \n    Polygon poly58(4);\n    poly58.ps[0] = Point(97.9242, 14.8422);\n    poly58.ps[1] = Point(97.9242, 54.8422);\n    poly58.ps[2] = Point(57.9242, 54.8422);\n    poly58.ps[3] = Point(57.9242, 14.8422);\n    new ShapeRef(router, poly58, 58);\n    \n    Polygon poly59(4);\n    poly59.ps[0] = Point(937.924, 323.557);\n    poly59.ps[1] = Point(937.924, 363.557);\n    poly59.ps[2] = Point(897.924, 363.557);\n    poly59.ps[3] = Point(897.924, 323.557);\n    new ShapeRef(router, poly59, 59);\n    \n    Polygon poly69(4);\n    poly69.ps[0] = Point(267.924, 151.557);\n    poly69.ps[1] = Point(267.924, 171.557);\n    poly69.ps[2] = Point(247.924, 171.557);\n    poly69.ps[3] = Point(247.924, 151.557);\n    new ShapeRef(router, poly69, 69);\n    \n    Polygon poly63(4);\n    poly63.ps[0] = Point(457.924, 507.557);\n    poly63.ps[1] = Point(457.924, 547.557);\n    poly63.ps[2] = Point(417.924, 547.557);\n    poly63.ps[3] = Point(417.924, 507.557);\n    new ShapeRef(router, poly63, 63);\n    \n    Polygon poly70(4);\n    poly70.ps[0] = Point(207.924, 203.557);\n    poly70.ps[1] = Point(207.924, 223.557);\n    poly70.ps[2] = Point(187.924, 223.557);\n    poly70.ps[3] = Point(187.924, 203.557);\n    new ShapeRef(router, poly70, 70);\n    \n    Polygon poly60(4);\n    poly60.ps[0] = Point(937.924, 1.84222);\n    poly60.ps[1] = Point(937.924, 41.8422);\n    poly60.ps[2] = Point(897.924, 41.8422);\n    poly60.ps[3] = Point(897.924, 1.84222);\n    new ShapeRef(router, poly60, 60);\n    \n    Polygon poly61(4);\n    poly61.ps[0] = Point(577.924, -44.6578);\n    poly61.ps[1] = Point(577.924, -4.65778);\n    poly61.ps[2] = Point(537.924, -4.65778);\n    poly61.ps[3] = Point(537.924, -44.6578);\n    new ShapeRef(router, poly61, 61);\n    \n    Polygon poly62(4);\n    poly62.ps[0] = Point(577.924, 629.557);\n    poly62.ps[1] = Point(577.924, 669.557);\n    poly62.ps[2] = Point(537.924, 669.557);\n    poly62.ps[3] = Point(537.924, 629.557);\n    new ShapeRef(router, poly62, 62);\n    \n    Polygon poly66(4);\n    poly66.ps[0] = Point(747.924, -70.6578);\n    poly66.ps[1] = Point(747.924, -50.6578);\n    poly66.ps[2] = Point(727.924, -50.6578);\n    poly66.ps[3] = Point(727.924, -70.6578);\n    new ShapeRef(router, poly66, 66);\n    \n    Polygon poly67(4);\n    poly67.ps[0] = Point(147.924, 24.8422);\n    poly67.ps[1] = Point(147.924, 44.8422);\n    poly67.ps[2] = Point(127.924, 44.8422);\n    poly67.ps[3] = Point(127.924, 24.8422);\n    new ShapeRef(router, poly67, 67);\n    \n    Polygon poly68(4);\n    poly68.ps[0] = Point(147.924, 151.557);\n    poly68.ps[1] = Point(147.924, 171.557);\n    poly68.ps[2] = Point(127.924, 171.557);\n    poly68.ps[3] = Point(127.924, 151.557);\n    new ShapeRef(router, poly68, 68);\n    \n    Polygon poly72(4);\n    poly72.ps[0] = Point(87.9242, 357.557);\n    poly72.ps[1] = Point(87.9242, 377.557);\n    poly72.ps[2] = Point(67.9242, 377.557);\n    poly72.ps[3] = Point(67.9242, 357.557);\n    new ShapeRef(router, poly72, 72);\n    \n    Polygon poly65(4);\n    poly65.ps[0] = Point(97.9242, 599.557);\n    poly65.ps[1] = Point(97.9242, 639.557);\n    poly65.ps[2] = Point(57.9242, 639.557);\n    poly65.ps[3] = Point(57.9242, 599.557);\n    new ShapeRef(router, poly65, 65);\n    \n    Polygon poly64(4);\n    poly64.ps[0] = Point(817.924, 554.057);\n    poly64.ps[1] = Point(817.924, 594.057);\n    poly64.ps[2] = Point(777.924, 594.057);\n    poly64.ps[3] = Point(777.924, 554.057);\n    new ShapeRef(router, poly64, 64);\n    \n    Polygon poly14(4);\n    poly14.ps[0] = Point(1158.92, 141.557);\n    poly14.ps[1] = Point(1158.92, 181.557);\n    poly14.ps[2] = Point(1118.92, 181.557);\n    poly14.ps[3] = Point(1118.92, 141.557);\n    new ShapeRef(router, poly14, 14);\n    \n    Polygon poly71(4);\n    poly71.ps[0] = Point(267.924, 305.557);\n    poly71.ps[1] = Point(267.924, 325.557);\n    poly71.ps[2] = Point(247.924, 325.557);\n    poly71.ps[3] = Point(247.924, 305.557);\n    new ShapeRef(router, poly71, 71);\n    \n    Polygon poly73(4);\n    poly73.ps[0] = Point(147.924, 517.557);\n    poly73.ps[1] = Point(147.924, 537.557);\n    poly73.ps[2] = Point(127.924, 537.557);\n    poly73.ps[3] = Point(127.924, 517.557);\n    new ShapeRef(router, poly73, 73);\n    \n    Polygon poly74(4);\n    poly74.ps[0] = Point(147.924, 609.557);\n    poly74.ps[1] = Point(147.924, 629.557);\n    poly74.ps[2] = Point(127.924, 629.557);\n    poly74.ps[3] = Point(127.924, 609.557);\n    new ShapeRef(router, poly74, 74);\n    \n    Polygon poly37(4);\n    poly37.ps[0] = Point(457.924, 607.557);\n    poly37.ps[1] = Point(457.924, 647.557);\n    poly37.ps[2] = Point(417.924, 647.557);\n    poly37.ps[3] = Point(417.924, 607.557);\n    new ShapeRef(router, poly37, 37);\n    \n    Polygon poly82(4);\n    poly82.ps[0] = Point(507.924, 893.057);\n    poly82.ps[1] = Point(507.924, 913.057);\n    poly82.ps[2] = Point(487.924, 913.057);\n    poly82.ps[3] = Point(487.924, 893.057);\n    new ShapeRef(router, poly82, 82);\n    \n    Polygon poly83(4);\n    poly83.ps[0] = Point(627.924, 893.057);\n    poly83.ps[1] = Point(627.924, 913.057);\n    poly83.ps[2] = Point(607.924, 913.057);\n    poly83.ps[3] = Point(607.924, 893.057);\n    new ShapeRef(router, poly83, 83);\n    \n    Polygon poly84(4);\n    poly84.ps[0] = Point(387.924, 151.557);\n    poly84.ps[1] = Point(387.924, 171.557);\n    poly84.ps[2] = Point(367.924, 171.557);\n    poly84.ps[3] = Point(367.924, 151.557);\n    new ShapeRef(router, poly84, 84);\n    \n    Polygon poly85(4);\n    poly85.ps[0] = Point(387.924, 17.3422);\n    poly85.ps[1] = Point(387.924, 37.3422);\n    poly85.ps[2] = Point(367.924, 37.3422);\n    poly85.ps[3] = Point(367.924, 17.3422);\n    new ShapeRef(router, poly85, 85);\n    \n    Polygon poly86(4);\n    poly86.ps[0] = Point(507.924, 35.8422);\n    poly86.ps[1] = Point(507.924, 55.8422);\n    poly86.ps[2] = Point(487.924, 55.8422);\n    poly86.ps[3] = Point(487.924, 35.8422);\n    new ShapeRef(router, poly86, 86);\n    \n    Polygon poly87(4);\n    poly87.ps[0] = Point(627.924, 35.8422);\n    poly87.ps[1] = Point(627.924, 55.8422);\n    poly87.ps[2] = Point(607.924, 55.8422);\n    poly87.ps[3] = Point(607.924, 35.8422);\n    new ShapeRef(router, poly87, 87);\n    \n    Polygon poly88(4);\n    poly88.ps[0] = Point(747.924, 564.057);\n    poly88.ps[1] = Point(747.924, 584.057);\n    poly88.ps[2] = Point(727.924, 584.057);\n    poly88.ps[3] = Point(727.924, 564.057);\n    new ShapeRef(router, poly88, 88);\n    \n    Polygon poly89(4);\n    poly89.ps[0] = Point(507.924, 517.557);\n    poly89.ps[1] = Point(507.924, 537.557);\n    poly89.ps[2] = Point(487.924, 537.557);\n    poly89.ps[3] = Point(487.924, 517.557);\n    new ShapeRef(router, poly89, 89);\n    \n    Polygon poly90(4);\n    poly90.ps[0] = Point(507.924, 425.557);\n    poly90.ps[1] = Point(507.924, 445.557);\n    poly90.ps[2] = Point(487.924, 445.557);\n    poly90.ps[3] = Point(487.924, 425.557);\n    new ShapeRef(router, poly90, 90);\n    \n    Polygon poly91(4);\n    poly91.ps[0] = Point(627.924, 517.557);\n    poly91.ps[1] = Point(627.924, 537.557);\n    poly91.ps[2] = Point(607.924, 537.557);\n    poly91.ps[3] = Point(607.924, 517.557);\n    new ShapeRef(router, poly91, 91);\n    \n    Polygon poly26(4);\n    poly26.ps[0] = Point(697.924, 743.557);\n    poly26.ps[1] = Point(697.924, 783.557);\n    poly26.ps[2] = Point(657.924, 783.557);\n    poly26.ps[3] = Point(657.924, 743.557);\n    new ShapeRef(router, poly26, 26);\n    \n    Polygon poly12(4);\n    poly12.ps[0] = Point(1038.92, 260.557);\n    poly12.ps[1] = Point(1038.92, 300.557);\n    poly12.ps[2] = Point(998.924, 300.557);\n    poly12.ps[3] = Point(998.924, 260.557);\n    new ShapeRef(router, poly12, 12);\n    \n    Polygon poly3(4);\n    poly3.ps[0] = Point(1278.92, -22.1578);\n    poly3.ps[1] = Point(1278.92, 17.8422);\n    poly3.ps[2] = Point(1238.92, 17.8422);\n    poly3.ps[3] = Point(1238.92, -22.1578);\n    new ShapeRef(router, poly3, 3);\n    \n    Polygon poly55(4);\n    poly55.ps[0] = Point(457.924, 7.34222);\n    poly55.ps[1] = Point(457.924, 47.3422);\n    poly55.ps[2] = Point(417.924, 47.3422);\n    poly55.ps[3] = Point(417.924, 7.34222);\n    new ShapeRef(router, poly55, 55);\n    \n    ConnRef *connRef148 = new ConnRef(router, 148);\n    ConnEnd srcPt148(Point(1018.92, -60.6578), 15);\n    connRef148->setSourceEndpoint(srcPt148);\n    ConnEnd dstPt148(Point(1068.92, -60.6578), 15);\n    connRef148->setDestEndpoint(dstPt148);\n    connRef148->setRoutingType((ConnType)2);\n\n    ConnRef *connRef149 = new ConnRef(router, 149);\n    ConnEnd srcPt149(Point(1138.92, 161.557), 15);\n    connRef149->setSourceEndpoint(srcPt149);\n    ConnEnd dstPt149(Point(1188.92, 152.342), 15);\n    connRef149->setDestEndpoint(dstPt149);\n    connRef149->setRoutingType((ConnType)2);\n\n    ConnRef *connRef150 = new ConnRef(router, 150);\n    ConnEnd srcPt150(Point(1138.92, 435.557), 15);\n    connRef150->setSourceEndpoint(srcPt150);\n    ConnEnd dstPt150(Point(1188.92, 388.557), 15);\n    connRef150->setDestEndpoint(dstPt150);\n    connRef150->setRoutingType((ConnType)2);\n\n    ConnRef *connRef151 = new ConnRef(router, 151);\n    ConnEnd srcPt151(Point(317.924, 763.557), 15);\n    connRef151->setSourceEndpoint(srcPt151);\n    ConnEnd dstPt151(Point(367.924, 627.557), 15);\n    connRef151->setDestEndpoint(dstPt151);\n    connRef151->setRoutingType((ConnType)2);\n\n    ConnRef *connRef152 = new ConnRef(router, 152);\n    ConnEnd srcPt152(Point(317.924, 763.557), 15);\n    connRef152->setSourceEndpoint(srcPt152);\n    ConnEnd dstPt152(Point(367.924, 763.557), 15);\n    connRef152->setDestEndpoint(dstPt152);\n    connRef152->setRoutingType((ConnType)2);\n\n    ConnRef *connRef153 = new ConnRef(router, 153);\n    ConnEnd srcPt153(Point(317.924, 763.557), 15);\n    connRef153->setSourceEndpoint(srcPt153);\n    ConnEnd dstPt153(Point(487.924, 903.057), 15);\n    connRef153->setDestEndpoint(dstPt153);\n    connRef153->setRoutingType((ConnType)2);\n\n    ConnRef *connRef154 = new ConnRef(router, 154);\n    ConnEnd srcPt154(Point(317.924, 763.557), 15);\n    connRef154->setSourceEndpoint(srcPt154);\n    ConnEnd dstPt154(Point(727.924, 574.057), 15);\n    connRef154->setDestEndpoint(dstPt154);\n    connRef154->setRoutingType((ConnType)2);\n\n    ConnRef *connRef155 = new ConnRef(router, 155);\n    ConnEnd srcPt155(Point(557.924, 903.057), 15);\n    connRef155->setSourceEndpoint(srcPt155);\n    ConnEnd dstPt155(Point(607.924, 903.057), 15);\n    connRef155->setDestEndpoint(dstPt155);\n    connRef155->setRoutingType((ConnType)2);\n\n    ConnRef *connRef156 = new ConnRef(router, 156);\n    ConnEnd srcPt156(Point(197.924, 763.557), 15);\n    connRef156->setSourceEndpoint(srcPt156);\n    ConnEnd dstPt156(Point(247.924, 763.557), 15);\n    connRef156->setDestEndpoint(dstPt156);\n    connRef156->setRoutingType((ConnType)2);\n\n    ConnRef *connRef157 = new ConnRef(router, 157);\n    ConnEnd srcPt157(Point(147.924, 161.557), 15);\n    connRef157->setSourceEndpoint(srcPt157);\n    ConnEnd dstPt157(Point(197.924, 161.557), 15);\n    connRef157->setDestEndpoint(dstPt157);\n    connRef157->setRoutingType((ConnType)2);\n\n    ConnRef *connRef158 = new ConnRef(router, 158);\n    ConnEnd srcPt158(Point(197.924, 161.557), 15);\n    connRef158->setSourceEndpoint(srcPt158);\n    ConnEnd dstPt158(Point(247.924, 161.557), 15);\n    connRef158->setDestEndpoint(dstPt158);\n    connRef158->setRoutingType((ConnType)2);\n\n    ConnRef *connRef159 = new ConnRef(router, 159);\n    ConnEnd srcPt159(Point(197.924, 161.557), 15);\n    connRef159->setSourceEndpoint(srcPt159);\n    ConnEnd dstPt159(Point(197.924, 203.557), 15);\n    connRef159->setDestEndpoint(dstPt159);\n    connRef159->setRoutingType((ConnType)2);\n\n    ConnRef *connRef160 = new ConnRef(router, 160);\n    ConnEnd srcPt160(Point(317.924, 161.557), 15);\n    connRef160->setSourceEndpoint(srcPt160);\n    ConnEnd dstPt160(Point(727.924, -60.6578), 15);\n    connRef160->setDestEndpoint(dstPt160);\n    connRef160->setRoutingType((ConnType)2);\n\n    ConnRef *connRef161 = new ConnRef(router, 161);\n    ConnEnd srcPt161(Point(317.924, 161.557), 15);\n    connRef161->setSourceEndpoint(srcPt161);\n    ConnEnd dstPt161(Point(367.924, 161.557), 15);\n    connRef161->setDestEndpoint(dstPt161);\n    connRef161->setRoutingType((ConnType)2);\n\n    ConnRef *connRef162 = new ConnRef(router, 162);\n    ConnEnd srcPt162(Point(317.924, 161.557), 15);\n    connRef162->setSourceEndpoint(srcPt162);\n    ConnEnd dstPt162(Point(367.924, 27.3422), 15);\n    connRef162->setDestEndpoint(dstPt162);\n    connRef162->setRoutingType((ConnType)2);\n\n    ConnRef *connRef163 = new ConnRef(router, 163);\n    ConnEnd srcPt163(Point(317.924, 161.557), 15);\n    connRef163->setSourceEndpoint(srcPt163);\n    ConnEnd dstPt163(Point(487.924, 435.557), 15);\n    connRef163->setDestEndpoint(dstPt163);\n    connRef163->setRoutingType((ConnType)2);\n\n    ConnRef *connRef164 = new ConnRef(router, 164);\n    ConnEnd srcPt164(Point(437.924, 763.557), 15);\n    connRef164->setSourceEndpoint(srcPt164);\n    ConnEnd dstPt164(Point(487.924, 763.557), 15);\n    connRef164->setDestEndpoint(dstPt164);\n    connRef164->setRoutingType((ConnType)2);\n\n    ConnRef *connRef165 = new ConnRef(router, 165);\n    ConnEnd srcPt165(Point(437.924, 763.557), 15);\n    connRef165->setSourceEndpoint(srcPt165);\n    ConnEnd dstPt165(Point(727.924, 860.057), 15);\n    connRef165->setDestEndpoint(dstPt165);\n    connRef165->setRoutingType((ConnType)2);\n\n    ConnRef *connRef166 = new ConnRef(router, 166);\n    ConnEnd srcPt166(Point(557.924, 527.557), 15);\n    connRef166->setSourceEndpoint(srcPt166);\n    ConnEnd dstPt166(Point(607.924, 527.557), 15);\n    connRef166->setDestEndpoint(dstPt166);\n    connRef166->setRoutingType((ConnType)2);\n\n    ConnRef *connRef167 = new ConnRef(router, 167);\n    ConnEnd srcPt167(Point(797.924, 343.557), 15);\n    connRef167->setSourceEndpoint(srcPt167);\n    ConnEnd dstPt167(Point(847.924, 343.557), 15);\n    connRef167->setDestEndpoint(dstPt167);\n    connRef167->setRoutingType((ConnType)2);\n\n    ConnRef *connRef247 = new ConnRef(router, 247);\n    ConnEnd srcPt247(Point(617.924, -4.15778), 15);\n    connRef247->setSourceEndpoint(srcPt247);\n    ConnEnd dstPt247(Point(617.924, 45.8422), 15);\n    connRef247->setDestEndpoint(dstPt247);\n    connRef247->setRoutingType((ConnType)2);\n\n    ConnRef *connRef248 = new ConnRef(router, 248);\n    ConnEnd srcPt248(Point(737.924, 524.057), 15);\n    connRef248->setSourceEndpoint(srcPt248);\n    ConnEnd dstPt248(Point(737.924, 574.057), 15);\n    connRef248->setDestEndpoint(dstPt248);\n    connRef248->setRoutingType((ConnType)2);\n\n    ConnRef *connRef249 = new ConnRef(router, 249);\n    ConnEnd srcPt249(Point(497.924, 477.557), 15);\n    connRef249->setSourceEndpoint(srcPt249);\n    ConnEnd dstPt249(Point(497.924, 527.557), 15);\n    connRef249->setDestEndpoint(dstPt249);\n    connRef249->setRoutingType((ConnType)2);\n\n    ConnRef *connRef250 = new ConnRef(router, 250);\n    ConnEnd srcPt250(Point(497.924, 385.557), 15);\n    connRef250->setSourceEndpoint(srcPt250);\n    ConnEnd dstPt250(Point(497.924, 435.557), 15);\n    connRef250->setDestEndpoint(dstPt250);\n    connRef250->setRoutingType((ConnType)2);\n\n    ConnRef *connRef251 = new ConnRef(router, 251);\n    ConnEnd srcPt251(Point(617.924, 477.557), 15);\n    connRef251->setSourceEndpoint(srcPt251);\n    ConnEnd dstPt251(Point(617.924, 527.557), 15);\n    connRef251->setDestEndpoint(dstPt251);\n    connRef251->setRoutingType((ConnType)2);\n\n    ConnRef *connRef252 = new ConnRef(router, 252);\n    ConnEnd srcPt252(Point(617.924, 385.557), 15);\n    connRef252->setSourceEndpoint(srcPt252);\n    ConnEnd dstPt252(Point(617.924, 435.557), 15);\n    connRef252->setDestEndpoint(dstPt252);\n    connRef252->setRoutingType((ConnType)2);\n\n    ConnRef *connRef253 = new ConnRef(router, 253);\n    ConnEnd srcPt253(Point(857.924, 293.557), 15);\n    connRef253->setSourceEndpoint(srcPt253);\n    ConnEnd dstPt253(Point(857.924, 343.557), 15);\n    connRef253->setDestEndpoint(dstPt253);\n    connRef253->setRoutingType((ConnType)2);\n\n    ConnRef *connRef254 = new ConnRef(router, 254);\n    ConnEnd srcPt254(Point(857.924, 385.557), 15);\n    connRef254->setSourceEndpoint(srcPt254);\n    ConnEnd dstPt254(Point(857.924, 435.557), 15);\n    connRef254->setDestEndpoint(dstPt254);\n    connRef254->setRoutingType((ConnType)2);\n\n    ConnRef *connRef255 = new ConnRef(router, 255);\n    ConnEnd srcPt255(Point(857.924, 111.557), 15);\n    connRef255->setSourceEndpoint(srcPt255);\n    ConnEnd dstPt255(Point(857.924, 161.557), 15);\n    connRef255->setDestEndpoint(dstPt255);\n    connRef255->setRoutingType((ConnType)2);\n\n    ConnRef *connRef256 = new ConnRef(router, 256);\n    ConnEnd srcPt256(Point(737.924, 293.557), 15);\n    connRef256->setSourceEndpoint(srcPt256);\n    ConnEnd dstPt256(Point(737.924, 343.557), 15);\n    connRef256->setDestEndpoint(dstPt256);\n    connRef256->setRoutingType((ConnType)2);\n\n    ConnRef *connRef257 = new ConnRef(router, 257);\n    ConnEnd srcPt257(Point(1078.92, 338.557), 15);\n    connRef257->setSourceEndpoint(srcPt257);\n    ConnEnd dstPt257(Point(1078.92, 388.557), 15);\n    connRef257->setDestEndpoint(dstPt257);\n    connRef257->setRoutingType((ConnType)2);\n\n    ConnRef *connRef258 = new ConnRef(router, 258);\n    ConnEnd srcPt258(Point(1198.92, 338.557), 15);\n    connRef258->setSourceEndpoint(srcPt258);\n    ConnEnd dstPt258(Point(1198.92, 388.557), 15);\n    connRef258->setDestEndpoint(dstPt258);\n    connRef258->setRoutingType((ConnType)2);\n\n    ConnRef *connRef259 = new ConnRef(router, 259);\n    ConnEnd srcPt259(Point(1078.92, 102.342), 15);\n    connRef259->setSourceEndpoint(srcPt259);\n    ConnEnd dstPt259(Point(1078.92, 152.342), 15);\n    connRef259->setDestEndpoint(dstPt259);\n    connRef259->setRoutingType((ConnType)2);\n\n    ConnRef *connRef260 = new ConnRef(router, 260);\n    ConnEnd srcPt260(Point(1078.92, 10.3422), 15);\n    connRef260->setSourceEndpoint(srcPt260);\n    ConnEnd dstPt260(Point(1078.92, 60.3422), 15);\n    connRef260->setDestEndpoint(dstPt260);\n    connRef260->setRoutingType((ConnType)2);\n\n    ConnRef *connRef261 = new ConnRef(router, 261);\n    ConnEnd srcPt261(Point(1198.92, 102.342), 15);\n    connRef261->setSourceEndpoint(srcPt261);\n    ConnEnd dstPt261(Point(1198.92, 152.342), 15);\n    connRef261->setDestEndpoint(dstPt261);\n    connRef261->setRoutingType((ConnType)2);\n\n    ConnRef *connRef262 = new ConnRef(router, 262);\n    ConnEnd srcPt262(Point(1078.92, -110.658), 15);\n    connRef262->setSourceEndpoint(srcPt262);\n    ConnEnd dstPt262(Point(1078.92, -60.6578), 15);\n    connRef262->setDestEndpoint(dstPt262);\n    connRef262->setRoutingType((ConnType)2);\n\n    ConnRef *connRef263 = new ConnRef(router, 263);\n    ConnEnd srcPt263(Point(958.924, 230.557), 15);\n    connRef263->setSourceEndpoint(srcPt263);\n    ConnEnd dstPt263(Point(958.924, 280.557), 15);\n    connRef263->setDestEndpoint(dstPt263);\n    connRef263->setRoutingType((ConnType)2);\n\n    ConnRef *connRef264 = new ConnRef(router, 264);\n    ConnEnd srcPt264(Point(737.924, 111.557), 15);\n    connRef264->setSourceEndpoint(srcPt264);\n    ConnEnd dstPt264(Point(737.924, 161.557), 15);\n    connRef264->setDestEndpoint(dstPt264);\n    connRef264->setRoutingType((ConnType)2);\n\n    ConnRef *connRef265 = new ConnRef(router, 265);\n    ConnEnd srcPt265(Point(737.924, 810.057), 15);\n    connRef265->setSourceEndpoint(srcPt265);\n    ConnEnd dstPt265(Point(737.924, 860.057), 15);\n    connRef265->setDestEndpoint(dstPt265);\n    connRef265->setRoutingType((ConnType)2);\n\n    ConnRef *connRef266 = new ConnRef(router, 266);\n    ConnEnd srcPt266(Point(77.9242, 161.557), 15);\n    connRef266->setSourceEndpoint(srcPt266);\n    ConnEnd dstPt266(Point(40.9242, 252.5), 15);\n    connRef266->setDestEndpoint(dstPt266);\n    connRef266->setRoutingType((ConnType)2);\n\n    ConnRef *connRef267 = new ConnRef(router, 267);\n    ConnEnd srcPt267(Point(77.9242, 763.557), 15);\n    connRef267->setSourceEndpoint(srcPt267);\n    ConnEnd dstPt267(Point(-46.0758, 329.75), 15);\n    connRef267->setDestEndpoint(dstPt267);\n    connRef267->setRoutingType((ConnType)2);\n\n    ConnRef *connRef168 = new ConnRef(router, 168);\n    ConnEnd srcPt168(Point(797.924, 343.557), 15);\n    connRef168->setSourceEndpoint(srcPt168);\n    ConnEnd dstPt168(Point(847.924, 435.557), 15);\n    connRef168->setDestEndpoint(dstPt168);\n    connRef168->setRoutingType((ConnType)2);\n\n    ConnRef *connRef169 = new ConnRef(router, 169);\n    ConnEnd srcPt169(Point(1018.92, 435.557), 15);\n    connRef169->setSourceEndpoint(srcPt169);\n    ConnEnd dstPt169(Point(1068.92, 388.557), 15);\n    connRef169->setDestEndpoint(dstPt169);\n    connRef169->setRoutingType((ConnType)2);\n\n    ConnRef *connRef170 = new ConnRef(router, 170);\n    ConnEnd srcPt170(Point(1018.92, 161.557), 15);\n    connRef170->setSourceEndpoint(srcPt170);\n    ConnEnd dstPt170(Point(1068.92, 152.342), 15);\n    connRef170->setDestEndpoint(dstPt170);\n    connRef170->setRoutingType((ConnType)2);\n\n    ConnRef *connRef171 = new ConnRef(router, 171);\n    ConnEnd srcPt171(Point(1018.92, 161.557), 15);\n    connRef171->setSourceEndpoint(srcPt171);\n    ConnEnd dstPt171(Point(1068.92, 60.3422), 15);\n    connRef171->setDestEndpoint(dstPt171);\n    connRef171->setRoutingType((ConnType)2);\n\n    ConnRef *connRef172 = new ConnRef(router, 172);\n    ConnEnd srcPt172(Point(267.924, 315.557), 15);\n    connRef172->setSourceEndpoint(srcPt172);\n    ConnEnd dstPt172(Point(437.924, 161.557), 15);\n    connRef172->setDestEndpoint(dstPt172);\n    connRef172->setRoutingType((ConnType)2);\n\n    ConnRef *connRef173 = new ConnRef(router, 173);\n    ConnEnd srcPt173(Point(437.924, 161.557), 15);\n    connRef173->setSourceEndpoint(srcPt173);\n    ConnEnd dstPt173(Point(487.924, 45.8422), 15);\n    connRef173->setDestEndpoint(dstPt173);\n    connRef173->setRoutingType((ConnType)2);\n\n    ConnRef *connRef174 = new ConnRef(router, 174);\n    ConnEnd srcPt174(Point(437.924, 161.557), 15);\n    connRef174->setSourceEndpoint(srcPt174);\n    ConnEnd dstPt174(Point(727.924, 161.557), 15);\n    connRef174->setDestEndpoint(dstPt174);\n    connRef174->setRoutingType((ConnType)2);\n\n    ConnRef *connRef175 = new ConnRef(router, 175);\n    ConnEnd srcPt175(Point(77.9242, 161.557), 15);\n    connRef175->setSourceEndpoint(srcPt175);\n    ConnEnd dstPt175(Point(127.924, 161.557), 15);\n    connRef175->setDestEndpoint(dstPt175);\n    connRef175->setRoutingType((ConnType)2);\n\n    ConnRef *connRef176 = new ConnRef(router, 176);\n    ConnEnd srcPt176(Point(77.9242, 161.557), 15);\n    connRef176->setSourceEndpoint(srcPt176);\n    ConnEnd dstPt176(Point(77.9242, 357.557), 15);\n    connRef176->setDestEndpoint(dstPt176);\n    connRef176->setRoutingType((ConnType)2);\n\n    ConnRef *connRef177 = new ConnRef(router, 177);\n    ConnEnd srcPt177(Point(557.924, 763.557), 15);\n    connRef177->setSourceEndpoint(srcPt177);\n    ConnEnd dstPt177(Point(607.924, 763.557), 15);\n    connRef177->setDestEndpoint(dstPt177);\n    connRef177->setRoutingType((ConnType)2);\n\n    ConnRef *connRef178 = new ConnRef(router, 178);\n    ConnEnd srcPt178(Point(77.9242, 527.557), 15);\n    connRef178->setSourceEndpoint(srcPt178);\n    ConnEnd dstPt178(Point(127.924, 527.557), 15);\n    connRef178->setDestEndpoint(dstPt178);\n    connRef178->setRoutingType((ConnType)2);\n\n    ConnRef *connRef179 = new ConnRef(router, 179);\n    ConnEnd srcPt179(Point(557.924, 54.8422), 15);\n    connRef179->setSourceEndpoint(srcPt179);\n    ConnEnd dstPt179(Point(607.924, 45.8422), 15);\n    connRef179->setDestEndpoint(dstPt179);\n    connRef179->setRoutingType((ConnType)2);\n\n    ConnRef *connRef180 = new ConnRef(router, 180);\n    ConnEnd srcPt180(Point(557.924, 435.557), 15);\n    connRef180->setSourceEndpoint(srcPt180);\n    ConnEnd dstPt180(Point(607.924, 435.557), 15);\n    connRef180->setDestEndpoint(dstPt180);\n    connRef180->setRoutingType((ConnType)2);\n\n    ConnRef *connRef181 = new ConnRef(router, 181);\n    ConnEnd srcPt181(Point(77.9242, 763.557), 15);\n    connRef181->setSourceEndpoint(srcPt181);\n    ConnEnd dstPt181(Point(77.9242, 671.557), 15);\n    connRef181->setDestEndpoint(dstPt181);\n    connRef181->setRoutingType((ConnType)2);\n\n    ConnRef *connRef182 = new ConnRef(router, 182);\n    ConnEnd srcPt182(Point(77.9242, 763.557), 15);\n    connRef182->setSourceEndpoint(srcPt182);\n    ConnEnd dstPt182(Point(127.924, 763.557), 15);\n    connRef182->setDestEndpoint(dstPt182);\n    connRef182->setRoutingType((ConnType)2);\n\n    ConnRef *connRef183 = new ConnRef(router, 183);\n    ConnEnd srcPt183(Point(197.924, 315.557), 15);\n    connRef183->setSourceEndpoint(srcPt183);\n    ConnEnd dstPt183(Point(247.924, 315.557), 15);\n    connRef183->setDestEndpoint(dstPt183);\n    connRef183->setRoutingType((ConnType)2);\n\n    ConnRef *connRef184 = new ConnRef(router, 184);\n    ConnEnd srcPt184(Point(677.924, 343.557), 15);\n    connRef184->setSourceEndpoint(srcPt184);\n    ConnEnd dstPt184(Point(727.924, 343.557), 15);\n    connRef184->setDestEndpoint(dstPt184);\n    connRef184->setRoutingType((ConnType)2);\n\n    ConnRef *connRef185 = new ConnRef(router, 185);\n    ConnEnd srcPt185(Point(797.924, 161.557), 15);\n    connRef185->setSourceEndpoint(srcPt185);\n    ConnEnd dstPt185(Point(847.924, 161.557), 15);\n    connRef185->setDestEndpoint(dstPt185);\n    connRef185->setRoutingType((ConnType)2);\n\n    ConnRef *connRef186 = new ConnRef(router, 186);\n    ConnEnd srcPt186(Point(77.9242, 34.8422), 15);\n    connRef186->setSourceEndpoint(srcPt186);\n    ConnEnd dstPt186(Point(127.924, 34.8422), 15);\n    connRef186->setDestEndpoint(dstPt186);\n    connRef186->setRoutingType((ConnType)2);\n\n    ConnRef *connRef187 = new ConnRef(router, 187);\n    ConnEnd srcPt187(Point(437.924, 527.557), 15);\n    connRef187->setSourceEndpoint(srcPt187);\n    ConnEnd dstPt187(Point(487.924, 527.557), 15);\n    connRef187->setDestEndpoint(dstPt187);\n    connRef187->setRoutingType((ConnType)2);\n\n    ConnRef *connRef188 = new ConnRef(router, 188);\n    ConnEnd srcPt188(Point(77.9242, 619.557), 15);\n    connRef188->setSourceEndpoint(srcPt188);\n    ConnEnd dstPt188(Point(127.924, 619.557), 15);\n    connRef188->setDestEndpoint(dstPt188);\n    connRef188->setRoutingType((ConnType)2);\n\n    ConnRef *connRef189 = new ConnRef(router, 189);\n    ConnEnd srcPt189(Point(747.924, -60.6578), 15);\n    connRef189->setSourceEndpoint(srcPt189);\n    ConnEnd dstPt189(Point(797.924, -60.6578), 15);\n    connRef189->setDestEndpoint(dstPt189);\n    connRef189->setRoutingType((ConnType)2);\n\n    ConnRef *connRef190 = new ConnRef(router, 190);\n    ConnEnd srcPt190(Point(147.924, 34.8422), 15);\n    connRef190->setSourceEndpoint(srcPt190);\n    ConnEnd dstPt190(Point(197.924, 161.557), 15);\n    connRef190->setDestEndpoint(dstPt190);\n    connRef190->setRoutingType((ConnType)2);\n\n    ConnRef *connRef191 = new ConnRef(router, 191);\n    ConnEnd srcPt191(Point(267.924, 161.557), 15);\n    connRef191->setSourceEndpoint(srcPt191);\n    ConnEnd dstPt191(Point(317.924, 161.557), 15);\n    connRef191->setDestEndpoint(dstPt191);\n    connRef191->setRoutingType((ConnType)2);\n\n    ConnRef *connRef192 = new ConnRef(router, 192);\n    ConnEnd srcPt192(Point(197.924, 223.557), 15);\n    connRef192->setSourceEndpoint(srcPt192);\n    ConnEnd dstPt192(Point(197.924, 315.557), 15);\n    connRef192->setDestEndpoint(dstPt192);\n    connRef192->setRoutingType((ConnType)2);\n\n    ConnRef *connRef193 = new ConnRef(router, 193);\n    ConnEnd srcPt193(Point(77.9242, 377.557), 15);\n    connRef193->setSourceEndpoint(srcPt193);\n    ConnEnd dstPt193(Point(77.9242, 527.557), 15);\n    connRef193->setDestEndpoint(dstPt193);\n    connRef193->setRoutingType((ConnType)2);\n\n    ConnRef *connRef194 = new ConnRef(router, 194);\n    ConnEnd srcPt194(Point(147.924, 527.557), 15);\n    connRef194->setSourceEndpoint(srcPt194);\n    ConnEnd dstPt194(Point(197.924, 527.557), 15);\n    connRef194->setDestEndpoint(dstPt194);\n    connRef194->setRoutingType((ConnType)2);\n\n    ConnRef *connRef195 = new ConnRef(router, 195);\n    ConnEnd srcPt195(Point(147.924, 619.557), 15);\n    connRef195->setSourceEndpoint(srcPt195);\n    ConnEnd dstPt195(Point(197.924, 763.557), 15);\n    connRef195->setDestEndpoint(dstPt195);\n    connRef195->setRoutingType((ConnType)2);\n\n    ConnRef *connRef196 = new ConnRef(router, 196);\n    ConnEnd srcPt196(Point(77.9242, 651.557), 15);\n    connRef196->setSourceEndpoint(srcPt196);\n    ConnEnd dstPt196(Point(77.9242, 619.557), 15);\n    connRef196->setDestEndpoint(dstPt196);\n    connRef196->setRoutingType((ConnType)2);\n\n    ConnRef *connRef197 = new ConnRef(router, 197);\n    ConnEnd srcPt197(Point(147.924, 763.557), 15);\n    connRef197->setSourceEndpoint(srcPt197);\n    ConnEnd dstPt197(Point(197.924, 763.557), 15);\n    connRef197->setDestEndpoint(dstPt197);\n    connRef197->setRoutingType((ConnType)2);\n\n    ConnRef *connRef198 = new ConnRef(router, 198);\n    ConnEnd srcPt198(Point(267.924, 763.557), 15);\n    connRef198->setSourceEndpoint(srcPt198);\n    ConnEnd dstPt198(Point(317.924, 763.557), 15);\n    connRef198->setDestEndpoint(dstPt198);\n    connRef198->setRoutingType((ConnType)2);\n\n    ConnRef *connRef199 = new ConnRef(router, 199);\n    ConnEnd srcPt199(Point(387.924, 627.557), 15);\n    connRef199->setSourceEndpoint(srcPt199);\n    ConnEnd dstPt199(Point(437.924, 627.557), 15);\n    connRef199->setDestEndpoint(dstPt199);\n    connRef199->setRoutingType((ConnType)2);\n\n    ConnRef *connRef200 = new ConnRef(router, 200);\n    ConnEnd srcPt200(Point(387.924, 763.557), 15);\n    connRef200->setSourceEndpoint(srcPt200);\n    ConnEnd dstPt200(Point(437.924, 763.557), 15);\n    connRef200->setDestEndpoint(dstPt200);\n    connRef200->setRoutingType((ConnType)2);\n\n    ConnRef *connRef201 = new ConnRef(router, 201);\n    ConnEnd srcPt201(Point(507.924, 763.557), 15);\n    connRef201->setSourceEndpoint(srcPt201);\n    ConnEnd dstPt201(Point(557.924, 763.557), 15);\n    connRef201->setDestEndpoint(dstPt201);\n    connRef201->setRoutingType((ConnType)2);\n\n    ConnRef *connRef202 = new ConnRef(router, 202);\n    ConnEnd srcPt202(Point(627.924, 763.557), 15);\n    connRef202->setSourceEndpoint(srcPt202);\n    ConnEnd dstPt202(Point(677.924, 763.557), 15);\n    connRef202->setDestEndpoint(dstPt202);\n    connRef202->setRoutingType((ConnType)2);\n\n    ConnRef *connRef203 = new ConnRef(router, 203);\n    ConnEnd srcPt203(Point(507.924, 903.057), 15);\n    connRef203->setSourceEndpoint(srcPt203);\n    ConnEnd dstPt203(Point(557.924, 903.057), 15);\n    connRef203->setDestEndpoint(dstPt203);\n    connRef203->setRoutingType((ConnType)2);\n\n    ConnRef *connRef204 = new ConnRef(router, 204);\n    ConnEnd srcPt204(Point(627.924, 903.057), 15);\n    connRef204->setSourceEndpoint(srcPt204);\n    ConnEnd dstPt204(Point(677.924, 903.057), 15);\n    connRef204->setDestEndpoint(dstPt204);\n    connRef204->setRoutingType((ConnType)2);\n\n    ConnRef *connRef205 = new ConnRef(router, 205);\n    ConnEnd srcPt205(Point(387.924, 161.557), 15);\n    connRef205->setSourceEndpoint(srcPt205);\n    ConnEnd dstPt205(Point(437.924, 161.557), 15);\n    connRef205->setDestEndpoint(dstPt205);\n    connRef205->setRoutingType((ConnType)2);\n\n    ConnRef *connRef206 = new ConnRef(router, 206);\n    ConnEnd srcPt206(Point(387.924, 27.3422), 15);\n    connRef206->setSourceEndpoint(srcPt206);\n    ConnEnd dstPt206(Point(437.924, 27.3422), 15);\n    connRef206->setDestEndpoint(dstPt206);\n    connRef206->setRoutingType((ConnType)2);\n\n    ConnRef *connRef207 = new ConnRef(router, 207);\n    ConnEnd srcPt207(Point(507.924, 45.8422), 15);\n    connRef207->setSourceEndpoint(srcPt207);\n    ConnEnd dstPt207(Point(557.924, 54.8422), 15);\n    connRef207->setDestEndpoint(dstPt207);\n    connRef207->setRoutingType((ConnType)2);\n\n    ConnRef *connRef208 = new ConnRef(router, 208);\n    ConnEnd srcPt208(Point(627.924, 45.8422), 15);\n    connRef208->setSourceEndpoint(srcPt208);\n    ConnEnd dstPt208(Point(677.924, 54.8422), 15);\n    connRef208->setDestEndpoint(dstPt208);\n    connRef208->setRoutingType((ConnType)2);\n\n    ConnRef *connRef209 = new ConnRef(router, 209);\n    ConnEnd srcPt209(Point(747.924, 574.057), 15);\n    connRef209->setSourceEndpoint(srcPt209);\n    ConnEnd dstPt209(Point(797.924, 574.057), 15);\n    connRef209->setDestEndpoint(dstPt209);\n    connRef209->setRoutingType((ConnType)2);\n\n    ConnRef *connRef210 = new ConnRef(router, 210);\n    ConnEnd srcPt210(Point(507.924, 527.557), 15);\n    connRef210->setSourceEndpoint(srcPt210);\n    ConnEnd dstPt210(Point(557.924, 527.557), 15);\n    connRef210->setDestEndpoint(dstPt210);\n    connRef210->setRoutingType((ConnType)2);\n\n    ConnRef *connRef211 = new ConnRef(router, 211);\n    ConnEnd srcPt211(Point(507.924, 435.557), 15);\n    connRef211->setSourceEndpoint(srcPt211);\n    ConnEnd dstPt211(Point(557.924, 435.557), 15);\n    connRef211->setDestEndpoint(dstPt211);\n    connRef211->setRoutingType((ConnType)2);\n\n    ConnRef *connRef212 = new ConnRef(router, 212);\n    ConnEnd srcPt212(Point(627.924, 527.557), 15);\n    connRef212->setSourceEndpoint(srcPt212);\n    ConnEnd dstPt212(Point(677.924, 527.557), 15);\n    connRef212->setDestEndpoint(dstPt212);\n    connRef212->setRoutingType((ConnType)2);\n\n    ConnRef *connRef213 = new ConnRef(router, 213);\n    ConnEnd srcPt213(Point(627.924, 435.557), 15);\n    connRef213->setSourceEndpoint(srcPt213);\n    ConnEnd dstPt213(Point(677.924, 435.557), 15);\n    connRef213->setDestEndpoint(dstPt213);\n    connRef213->setRoutingType((ConnType)2);\n\n    ConnRef *connRef214 = new ConnRef(router, 214);\n    ConnEnd srcPt214(Point(867.924, 343.557), 15);\n    connRef214->setSourceEndpoint(srcPt214);\n    ConnEnd dstPt214(Point(917.924, 343.557), 15);\n    connRef214->setDestEndpoint(dstPt214);\n    connRef214->setRoutingType((ConnType)2);\n\n    ConnRef *connRef215 = new ConnRef(router, 215);\n    ConnEnd srcPt215(Point(867.924, 435.557), 15);\n    connRef215->setSourceEndpoint(srcPt215);\n    ConnEnd dstPt215(Point(917.924, 435.557), 15);\n    connRef215->setDestEndpoint(dstPt215);\n    connRef215->setRoutingType((ConnType)2);\n\n    ConnRef *connRef216 = new ConnRef(router, 216);\n    ConnEnd srcPt216(Point(867.924, 161.557), 15);\n    connRef216->setSourceEndpoint(srcPt216);\n    ConnEnd dstPt216(Point(917.924, 161.557), 15);\n    connRef216->setDestEndpoint(dstPt216);\n    connRef216->setRoutingType((ConnType)2);\n\n    ConnRef *connRef217 = new ConnRef(router, 217);\n    ConnEnd srcPt217(Point(747.924, 343.557), 15);\n    connRef217->setSourceEndpoint(srcPt217);\n    ConnEnd dstPt217(Point(797.924, 343.557), 15);\n    connRef217->setDestEndpoint(dstPt217);\n    connRef217->setRoutingType((ConnType)2);\n\n    ConnRef *connRef218 = new ConnRef(router, 218);\n    ConnEnd srcPt218(Point(1088.92, 388.557), 15);\n    connRef218->setSourceEndpoint(srcPt218);\n    ConnEnd dstPt218(Point(1138.92, 435.557), 15);\n    connRef218->setDestEndpoint(dstPt218);\n    connRef218->setRoutingType((ConnType)2);\n\n    ConnRef *connRef219 = new ConnRef(router, 219);\n    ConnEnd srcPt219(Point(1208.92, 388.557), 15);\n    connRef219->setSourceEndpoint(srcPt219);\n    ConnEnd dstPt219(Point(1258.92, 435.557), 15);\n    connRef219->setDestEndpoint(dstPt219);\n    connRef219->setRoutingType((ConnType)2);\n\n    ConnRef *connRef220 = new ConnRef(router, 220);\n    ConnEnd srcPt220(Point(1088.92, 152.342), 15);\n    connRef220->setSourceEndpoint(srcPt220);\n    ConnEnd dstPt220(Point(1138.92, 161.557), 15);\n    connRef220->setDestEndpoint(dstPt220);\n    connRef220->setRoutingType((ConnType)2);\n\n    ConnRef *connRef221 = new ConnRef(router, 221);\n    ConnEnd srcPt221(Point(1088.92, 60.3422), 15);\n    connRef221->setSourceEndpoint(srcPt221);\n    ConnEnd dstPt221(Point(1138.92, 60.3422), 15);\n    connRef221->setDestEndpoint(dstPt221);\n    connRef221->setRoutingType((ConnType)2);\n\n    ConnRef *connRef222 = new ConnRef(router, 222);\n    ConnEnd srcPt222(Point(1208.92, 152.342), 15);\n    connRef222->setSourceEndpoint(srcPt222);\n    ConnEnd dstPt222(Point(1258.92, 161.557), 15);\n    connRef222->setDestEndpoint(dstPt222);\n    connRef222->setRoutingType((ConnType)2);\n\n    ConnRef *connRef223 = new ConnRef(router, 223);\n    ConnEnd srcPt223(Point(1088.92, -60.6578), 15);\n    connRef223->setSourceEndpoint(srcPt223);\n    ConnEnd dstPt223(Point(1138.92, -60.6578), 15);\n    connRef223->setDestEndpoint(dstPt223);\n    connRef223->setRoutingType((ConnType)2);\n\n    ConnRef *connRef224 = new ConnRef(router, 224);\n    ConnEnd srcPt224(Point(747.924, 161.557), 15);\n    connRef224->setSourceEndpoint(srcPt224);\n    ConnEnd dstPt224(Point(797.924, 161.557), 15);\n    connRef224->setDestEndpoint(dstPt224);\n    connRef224->setRoutingType((ConnType)2);\n\n    ConnRef *connRef225 = new ConnRef(router, 225);\n    ConnEnd srcPt225(Point(747.924, 860.057), 15);\n    connRef225->setSourceEndpoint(srcPt225);\n    ConnEnd dstPt225(Point(797.924, 860.057), 15);\n    connRef225->setDestEndpoint(dstPt225);\n    connRef225->setRoutingType((ConnType)2);\n\n    ConnRef *connRef226 = new ConnRef(router, 226);\n    ConnEnd srcPt226(Point(737.924, -110.658), 15);\n    connRef226->setSourceEndpoint(srcPt226);\n    ConnEnd dstPt226(Point(737.924, -60.6578), 15);\n    connRef226->setDestEndpoint(dstPt226);\n    connRef226->setRoutingType((ConnType)2);\n\n    ConnRef *connRef227 = new ConnRef(router, 227);\n    ConnEnd srcPt227(Point(137.924, -15.1578), 15);\n    connRef227->setSourceEndpoint(srcPt227);\n    ConnEnd dstPt227(Point(137.924, 34.8422), 15);\n    connRef227->setDestEndpoint(dstPt227);\n    connRef227->setRoutingType((ConnType)2);\n\n    ConnRef *connRef228 = new ConnRef(router, 228);\n    ConnEnd srcPt228(Point(137.924, 111.557), 15);\n    connRef228->setSourceEndpoint(srcPt228);\n    ConnEnd dstPt228(Point(137.924, 161.557), 15);\n    connRef228->setDestEndpoint(dstPt228);\n    connRef228->setRoutingType((ConnType)2);\n\n    ConnRef *connRef229 = new ConnRef(router, 229);\n    ConnEnd srcPt229(Point(257.924, 111.557), 15);\n    connRef229->setSourceEndpoint(srcPt229);\n    ConnEnd dstPt229(Point(257.924, 161.557), 15);\n    connRef229->setDestEndpoint(dstPt229);\n    connRef229->setRoutingType((ConnType)2);\n\n    ConnRef *connRef230 = new ConnRef(router, 230);\n    ConnEnd srcPt230(Point(259.924, 213.557), 15);\n    connRef230->setSourceEndpoint(srcPt230);\n    ConnEnd dstPt230(Point(197.924, 213.557), 15);\n    connRef230->setDestEndpoint(dstPt230);\n    connRef230->setRoutingType((ConnType)2);\n\n    ConnRef *connRef231 = new ConnRef(router, 231);\n    ConnEnd srcPt231(Point(257.924, 265.557), 15);\n    connRef231->setSourceEndpoint(srcPt231);\n    ConnEnd dstPt231(Point(257.924, 315.557), 15);\n    connRef231->setDestEndpoint(dstPt231);\n    connRef231->setRoutingType((ConnType)2);\n\n    ConnRef *connRef232 = new ConnRef(router, 232);\n    ConnEnd srcPt232(Point(139.924, 367.557), 15);\n    connRef232->setSourceEndpoint(srcPt232);\n    ConnEnd dstPt232(Point(77.9242, 367.557), 15);\n    connRef232->setDestEndpoint(dstPt232);\n    connRef232->setRoutingType((ConnType)2);\n\n    ConnRef *connRef233 = new ConnRef(router, 233);\n    ConnEnd srcPt233(Point(137.924, 477.557), 15);\n    connRef233->setSourceEndpoint(srcPt233);\n    ConnEnd dstPt233(Point(137.924, 527.557), 15);\n    connRef233->setDestEndpoint(dstPt233);\n    connRef233->setRoutingType((ConnType)2);\n\n    ConnRef *connRef234 = new ConnRef(router, 234);\n    ConnEnd srcPt234(Point(137.924, 569.557), 15);\n    connRef234->setSourceEndpoint(srcPt234);\n    ConnEnd dstPt234(Point(137.924, 619.557), 15);\n    connRef234->setDestEndpoint(dstPt234);\n    connRef234->setRoutingType((ConnType)2);\n\n    ConnRef *connRef235 = new ConnRef(router, 235);\n    ConnEnd srcPt235(Point(139.924, 661.557), 15);\n    connRef235->setSourceEndpoint(srcPt235);\n    ConnEnd dstPt235(Point(77.9242, 661.557), 15);\n    connRef235->setDestEndpoint(dstPt235);\n    connRef235->setRoutingType((ConnType)2);\n\n    ConnRef *connRef236 = new ConnRef(router, 236);\n    ConnEnd srcPt236(Point(137.924, 713.557), 15);\n    connRef236->setSourceEndpoint(srcPt236);\n    ConnEnd dstPt236(Point(137.924, 763.557), 15);\n    connRef236->setDestEndpoint(dstPt236);\n    connRef236->setRoutingType((ConnType)2);\n\n    ConnRef *connRef237 = new ConnRef(router, 237);\n    ConnEnd srcPt237(Point(257.924, 713.557), 15);\n    connRef237->setSourceEndpoint(srcPt237);\n    ConnEnd dstPt237(Point(257.924, 763.557), 15);\n    connRef237->setDestEndpoint(dstPt237);\n    connRef237->setRoutingType((ConnType)2);\n\n    ConnRef *connRef238 = new ConnRef(router, 238);\n    ConnEnd srcPt238(Point(377.924, 577.557), 15);\n    connRef238->setSourceEndpoint(srcPt238);\n    ConnEnd dstPt238(Point(377.924, 627.557), 15);\n    connRef238->setDestEndpoint(dstPt238);\n    connRef238->setRoutingType((ConnType)2);\n\n    ConnRef *connRef239 = new ConnRef(router, 239);\n    ConnEnd srcPt239(Point(377.924, 713.557), 15);\n    connRef239->setSourceEndpoint(srcPt239);\n    ConnEnd dstPt239(Point(377.924, 763.557), 15);\n    connRef239->setDestEndpoint(dstPt239);\n    connRef239->setRoutingType((ConnType)2);\n\n    ConnRef *connRef240 = new ConnRef(router, 240);\n    ConnEnd srcPt240(Point(497.924, 713.557), 15);\n    connRef240->setSourceEndpoint(srcPt240);\n    ConnEnd dstPt240(Point(497.924, 763.557), 15);\n    connRef240->setDestEndpoint(dstPt240);\n    connRef240->setRoutingType((ConnType)2);\n\n    ConnRef *connRef241 = new ConnRef(router, 241);\n    ConnEnd srcPt241(Point(617.924, 713.557), 15);\n    connRef241->setSourceEndpoint(srcPt241);\n    ConnEnd dstPt241(Point(617.924, 763.557), 15);\n    connRef241->setDestEndpoint(dstPt241);\n    connRef241->setRoutingType((ConnType)2);\n\n    ConnRef *connRef242 = new ConnRef(router, 242);\n    ConnEnd srcPt242(Point(497.924, 853.057), 15);\n    connRef242->setSourceEndpoint(srcPt242);\n    ConnEnd dstPt242(Point(497.924, 903.057), 15);\n    connRef242->setDestEndpoint(dstPt242);\n    connRef242->setRoutingType((ConnType)2);\n\n    ConnRef *connRef243 = new ConnRef(router, 243);\n    ConnEnd srcPt243(Point(617.924, 853.057), 15);\n    connRef243->setSourceEndpoint(srcPt243);\n    ConnEnd dstPt243(Point(617.924, 903.057), 15);\n    connRef243->setDestEndpoint(dstPt243);\n    connRef243->setRoutingType((ConnType)2);\n\n    ConnRef *connRef244 = new ConnRef(router, 244);\n    ConnEnd srcPt244(Point(377.924, 111.557), 15);\n    connRef244->setSourceEndpoint(srcPt244);\n    ConnEnd dstPt244(Point(377.924, 161.557), 15);\n    connRef244->setDestEndpoint(dstPt244);\n    connRef244->setRoutingType((ConnType)2);\n\n    ConnRef *connRef245 = new ConnRef(router, 245);\n    ConnEnd srcPt245(Point(377.924, -22.6578), 15);\n    connRef245->setSourceEndpoint(srcPt245);\n    ConnEnd dstPt245(Point(377.924, 27.3422), 15);\n    connRef245->setDestEndpoint(dstPt245);\n    connRef245->setRoutingType((ConnType)2);\n\n    ConnRef *connRef246 = new ConnRef(router, 246);\n    ConnEnd srcPt246(Point(497.924, -4.15778), 15);\n    connRef246->setSourceEndpoint(srcPt246);\n    ConnEnd dstPt246(Point(497.924, 45.8422), 15);\n    connRef246->setDestEndpoint(dstPt246);\n    connRef246->setRoutingType((ConnType)2);\n\n    router->processTransaction();\n    router->outputDiagram(\"output/lineSegWrapperCrash4\");\n    delete router;\n    return 0;\n};\n"
  },
  {
    "path": "cola/libavoid/tests/lineSegWrapperCrash5.cpp",
    "content": "#include \"libavoid/libavoid.h\"\nusing namespace Avoid;\nint main(void) {\n    Router *router = new Router(OrthogonalRouting);\n    router->setRoutingPenalty((PenaltyType)0, 50);\n    router->setRoutingPenalty((PenaltyType)1, 0);\n    router->setRoutingPenalty((PenaltyType)2, 0);\n    router->setRoutingPenalty((PenaltyType)3, 4000);\n    router->setRoutingPenalty((PenaltyType)4, 0);\n\n    Polygon poly134(4);\n    poly134.ps[0] = Point(885.924, 365.557);\n    poly134.ps[1] = Point(885.924, 405.557);\n    poly134.ps[2] = Point(829.924, 405.557);\n    poly134.ps[3] = Point(829.924, 365.557);\n    new ShapeRef(router, poly134, 134);\n    \n    Polygon poly135(4);\n    poly135.ps[0] = Point(885.924, 91.5565);\n    poly135.ps[1] = Point(885.924, 131.557);\n    poly135.ps[2] = Point(829.924, 131.557);\n    poly135.ps[3] = Point(829.924, 91.5565);\n    new ShapeRef(router, poly135, 135);\n    \n    Polygon poly136(4);\n    poly136.ps[0] = Point(765.924, 273.557);\n    poly136.ps[1] = Point(765.924, 313.557);\n    poly136.ps[2] = Point(709.924, 313.557);\n    poly136.ps[3] = Point(709.924, 273.557);\n    new ShapeRef(router, poly136, 136);\n    \n    Polygon poly137(4);\n    poly137.ps[0] = Point(1106.92, 318.557);\n    poly137.ps[1] = Point(1106.92, 358.557);\n    poly137.ps[2] = Point(1050.92, 358.557);\n    poly137.ps[3] = Point(1050.92, 318.557);\n    new ShapeRef(router, poly137, 137);\n    \n    Polygon poly138(4);\n    poly138.ps[0] = Point(1226.92, 318.557);\n    poly138.ps[1] = Point(1226.92, 358.557);\n    poly138.ps[2] = Point(1170.92, 358.557);\n    poly138.ps[3] = Point(1170.92, 318.557);\n    new ShapeRef(router, poly138, 138);\n    \n    Polygon poly139(4);\n    poly139.ps[0] = Point(1106.92, 82.3422);\n    poly139.ps[1] = Point(1106.92, 122.342);\n    poly139.ps[2] = Point(1050.92, 122.342);\n    poly139.ps[3] = Point(1050.92, 82.3422);\n    new ShapeRef(router, poly139, 139);\n    \n    Polygon poly140(4);\n    poly140.ps[0] = Point(1106.92, -9.65778);\n    poly140.ps[1] = Point(1106.92, 30.3422);\n    poly140.ps[2] = Point(1050.92, 30.3422);\n    poly140.ps[3] = Point(1050.92, -9.65778);\n    new ShapeRef(router, poly140, 140);\n    \n    Polygon poly141(4);\n    poly141.ps[0] = Point(1226.92, 82.3422);\n    poly141.ps[1] = Point(1226.92, 122.342);\n    poly141.ps[2] = Point(1170.92, 122.342);\n    poly141.ps[3] = Point(1170.92, 82.3422);\n    new ShapeRef(router, poly141, 141);\n    \n    Polygon poly142(4);\n    poly142.ps[0] = Point(1106.92, -130.658);\n    poly142.ps[1] = Point(1106.92, -90.6578);\n    poly142.ps[2] = Point(1050.92, -90.6578);\n    poly142.ps[3] = Point(1050.92, -130.658);\n    new ShapeRef(router, poly142, 142);\n    \n    Polygon poly22(4);\n    poly22.ps[0] = Point(697.924, 34.8422);\n    poly22.ps[1] = Point(697.924, 74.8422);\n    poly22.ps[2] = Point(657.924, 74.8422);\n    poly22.ps[3] = Point(657.924, 34.8422);\n    new ShapeRef(router, poly22, 22);\n    \n    Polygon poly21(4);\n    poly21.ps[0] = Point(937.924, 141.557);\n    poly21.ps[1] = Point(937.924, 181.557);\n    poly21.ps[2] = Point(897.924, 181.557);\n    poly21.ps[3] = Point(897.924, 141.557);\n    new ShapeRef(router, poly21, 21);\n    \n    Polygon poly109(4);\n    poly109.ps[0] = Point(285.924, 91.5565);\n    poly109.ps[1] = Point(285.924, 131.557);\n    poly109.ps[2] = Point(229.924, 131.557);\n    poly109.ps[3] = Point(229.924, 91.5565);\n    new ShapeRef(router, poly109, 109);\n    \n    Polygon poly42(4);\n    poly42.ps[0] = Point(697.924, 415.557);\n    poly42.ps[1] = Point(697.924, 455.557);\n    poly42.ps[2] = Point(657.924, 455.557);\n    poly42.ps[3] = Point(657.924, 415.557);\n    new ShapeRef(router, poly42, 42);\n    \n    Polygon poly124(4);\n    poly124.ps[0] = Point(405.924, 91.5565);\n    poly124.ps[1] = Point(405.924, 131.557);\n    poly124.ps[2] = Point(349.924, 131.557);\n    poly124.ps[3] = Point(349.924, 91.5565);\n    new ShapeRef(router, poly124, 124);\n    \n    Polygon poly125(4);\n    poly125.ps[0] = Point(405.924, -42.6578);\n    poly125.ps[1] = Point(405.924, -2.65778);\n    poly125.ps[2] = Point(349.924, -2.65778);\n    poly125.ps[3] = Point(349.924, -42.6578);\n    new ShapeRef(router, poly125, 125);\n    \n    Polygon poly52(4);\n    poly52.ps[0] = Point(217.924, 295.557);\n    poly52.ps[1] = Point(217.924, 335.557);\n    poly52.ps[2] = Point(177.924, 335.557);\n    poly52.ps[3] = Point(177.924, 295.557);\n    new ShapeRef(router, poly52, 52);\n    \n    Polygon poly51(4);\n    poly51.ps[0] = Point(1038.92, 323.557);\n    poly51.ps[1] = Point(1038.92, 363.557);\n    poly51.ps[2] = Point(998.924, 363.557);\n    poly51.ps[3] = Point(998.924, 323.557);\n    new ShapeRef(router, poly51, 51);\n    \n    Polygon poly50(4);\n    poly50.ps[0] = Point(272.5, -82.1578);\n    poly50.ps[1] = Point(272.5, -47.1578);\n    poly50.ps[2] = Point(35.5, -47.1578);\n    poly50.ps[3] = Point(35.5, -82.1578);\n    new ShapeRef(router, poly50, 50);\n    \n    Polygon poly49(4);\n    poly49.ps[0] = Point(45.9242, 169.75);\n    poly49.ps[1] = Point(45.9242, 334.75);\n    poly49.ps[2] = Point(-242.076, 334.75);\n    poly49.ps[3] = Point(-242.076, 169.75);\n    new ShapeRef(router, poly49, 49);\n    \n    Polygon poly64(4);\n    poly64.ps[0] = Point(817.924, 554.057);\n    poly64.ps[1] = Point(817.924, 594.057);\n    poly64.ps[2] = Point(777.924, 594.057);\n    poly64.ps[3] = Point(777.924, 554.057);\n    new ShapeRef(router, poly64, 64);\n    \n    Polygon poly70(4);\n    poly70.ps[0] = Point(207.924, 203.557);\n    poly70.ps[1] = Point(207.924, 223.557);\n    poly70.ps[2] = Point(187.924, 223.557);\n    poly70.ps[3] = Point(187.924, 203.557);\n    new ShapeRef(router, poly70, 70);\n    \n    Polygon poly68(4);\n    poly68.ps[0] = Point(147.924, 151.557);\n    poly68.ps[1] = Point(147.924, 171.557);\n    poly68.ps[2] = Point(127.924, 171.557);\n    poly68.ps[3] = Point(127.924, 151.557);\n    new ShapeRef(router, poly68, 68);\n    \n    Polygon poly40(4);\n    poly40.ps[0] = Point(97.9242, 141.557);\n    poly40.ps[1] = Point(97.9242, 181.557);\n    poly40.ps[2] = Point(57.9242, 181.557);\n    poly40.ps[3] = Point(57.9242, 141.557);\n    new ShapeRef(router, poly40, 40);\n    \n    Polygon poly99(4);\n    poly99.ps[0] = Point(1088.92, 142.342);\n    poly99.ps[1] = Point(1088.92, 162.342);\n    poly99.ps[2] = Point(1068.92, 162.342);\n    poly99.ps[3] = Point(1068.92, 142.342);\n    new ShapeRef(router, poly99, 99);\n    \n    Polygon poly67(4);\n    poly67.ps[0] = Point(147.924, 24.8422);\n    poly67.ps[1] = Point(147.924, 44.8422);\n    poly67.ps[2] = Point(127.924, 44.8422);\n    poly67.ps[3] = Point(127.924, 24.8422);\n    new ShapeRef(router, poly67, 67);\n    \n    Polygon poly6(4);\n    poly6.ps[0] = Point(1371.92, -80.6578);\n    poly6.ps[1] = Point(1371.92, -40.6578);\n    poly6.ps[2] = Point(1331.92, -40.6578);\n    poly6.ps[3] = Point(1331.92, -80.6578);\n    new ShapeRef(router, poly6, 6);\n    \n    Polygon poly7(4);\n    poly7.ps[0] = Point(1278.92, -80.6578);\n    poly7.ps[1] = Point(1278.92, -40.6578);\n    poly7.ps[2] = Point(1238.92, -40.6578);\n    poly7.ps[3] = Point(1238.92, -80.6578);\n    new ShapeRef(router, poly7, 7);\n    \n    Polygon poly39(4);\n    poly39.ps[0] = Point(457.924, 141.557);\n    poly39.ps[1] = Point(457.924, 181.557);\n    poly39.ps[2] = Point(417.924, 181.557);\n    poly39.ps[3] = Point(417.924, 141.557);\n    new ShapeRef(router, poly39, 39);\n    \n    Polygon poly88(4);\n    poly88.ps[0] = Point(747.924, 564.057);\n    poly88.ps[1] = Point(747.924, 584.057);\n    poly88.ps[2] = Point(727.924, 584.057);\n    poly88.ps[3] = Point(727.924, 564.057);\n    new ShapeRef(router, poly88, 88);\n    \n    Polygon poly2(4);\n    poly2.ps[0] = Point(577.924, 795.557);\n    poly2.ps[1] = Point(577.924, 835.557);\n    poly2.ps[2] = Point(537.924, 835.557);\n    poly2.ps[3] = Point(537.924, 795.557);\n    new ShapeRef(router, poly2, 2);\n    \n    Polygon poly27(4);\n    poly27.ps[0] = Point(577.924, 507.557);\n    poly27.ps[1] = Point(577.924, 547.557);\n    poly27.ps[2] = Point(537.924, 547.557);\n    poly27.ps[3] = Point(537.924, 507.557);\n    new ShapeRef(router, poly27, 27);\n    \n    Polygon poly45(4);\n    poly45.ps[0] = Point(577.924, 34.8422);\n    poly45.ps[1] = Point(577.924, 74.8422);\n    poly45.ps[2] = Point(537.924, 74.8422);\n    poly45.ps[3] = Point(537.924, 34.8422);\n    new ShapeRef(router, poly45, 45);\n    \n    Polygon poly20(4);\n    poly20.ps[0] = Point(337.924, 507.557);\n    poly20.ps[1] = Point(337.924, 547.557);\n    poly20.ps[2] = Point(297.924, 547.557);\n    poly20.ps[3] = Point(297.924, 507.557);\n    new ShapeRef(router, poly20, 20);\n    \n    Polygon poly19(4);\n    poly19.ps[0] = Point(217.924, 141.557);\n    poly19.ps[1] = Point(217.924, 181.557);\n    poly19.ps[2] = Point(177.924, 181.557);\n    poly19.ps[3] = Point(177.924, 141.557);\n    new ShapeRef(router, poly19, 19);\n    \n    Polygon poly53(4);\n    poly53.ps[0] = Point(577.924, 323.557);\n    poly53.ps[1] = Point(577.924, 363.557);\n    poly53.ps[2] = Point(537.924, 363.557);\n    poly53.ps[3] = Point(537.924, 323.557);\n    new ShapeRef(router, poly53, 53);\n    \n    Polygon poly38(4);\n    poly38.ps[0] = Point(217.924, 507.557);\n    poly38.ps[1] = Point(217.924, 547.557);\n    poly38.ps[2] = Point(177.924, 547.557);\n    poly38.ps[3] = Point(177.924, 507.557);\n    new ShapeRef(router, poly38, 38);\n    \n    Polygon poly18(4);\n    poly18.ps[0] = Point(217.924, 743.557);\n    poly18.ps[1] = Point(217.924, 783.557);\n    poly18.ps[2] = Point(177.924, 783.557);\n    poly18.ps[3] = Point(177.924, 743.557);\n    new ShapeRef(router, poly18, 18);\n    \n    Polygon poly17(4);\n    poly17.ps[0] = Point(577.924, 883.057);\n    poly17.ps[1] = Point(577.924, 923.057);\n    poly17.ps[2] = Point(537.924, 923.057);\n    poly17.ps[3] = Point(537.924, 883.057);\n    new ShapeRef(router, poly17, 17);\n    \n    Polygon poly1(4);\n    poly1.ps[0] = Point(817.924, 840.057);\n    poly1.ps[1] = Point(817.924, 880.057);\n    poly1.ps[2] = Point(777.924, 880.057);\n    poly1.ps[3] = Point(777.924, 840.057);\n    new ShapeRef(router, poly1, 1);\n    \n    Polygon poly16(4);\n    poly16.ps[0] = Point(337.924, 743.557);\n    poly16.ps[1] = Point(337.924, 783.557);\n    poly16.ps[2] = Point(297.924, 783.557);\n    poly16.ps[3] = Point(297.924, 743.557);\n    new ShapeRef(router, poly16, 16);\n    \n    Polygon poly143(4);\n    poly143.ps[0] = Point(986.924, 210.557);\n    poly143.ps[1] = Point(986.924, 250.557);\n    poly143.ps[2] = Point(930.924, 250.557);\n    poly143.ps[3] = Point(930.924, 210.557);\n    new ShapeRef(router, poly143, 143);\n    \n    Polygon poly144(4);\n    poly144.ps[0] = Point(765.924, 91.5565);\n    poly144.ps[1] = Point(765.924, 131.557);\n    poly144.ps[2] = Point(709.924, 131.557);\n    poly144.ps[3] = Point(709.924, 91.5565);\n    new ShapeRef(router, poly144, 144);\n    \n    Polygon poly145(4);\n    poly145.ps[0] = Point(765.924, 790.057);\n    poly145.ps[1] = Point(765.924, 830.057);\n    poly145.ps[2] = Point(709.924, 830.057);\n    poly145.ps[3] = Point(709.924, 790.057);\n    new ShapeRef(router, poly145, 145);\n    \n    Polygon poly146(4);\n    poly146.ps[0] = Point(45.9242, 232.5);\n    poly146.ps[1] = Point(45.9242, 272.5);\n    poly146.ps[2] = Point(-14.0758, 272.5);\n    poly146.ps[3] = Point(-14.0758, 232.5);\n    new ShapeRef(router, poly146, 146);\n    \n    Polygon poly147(4);\n    poly147.ps[0] = Point(-26.0758, 274.75);\n    poly147.ps[1] = Point(-26.0758, 334.75);\n    poly147.ps[2] = Point(-66.0758, 334.75);\n    poly147.ps[3] = Point(-66.0758, 274.75);\n    new ShapeRef(router, poly147, 147);\n    \n    Polygon poly47(4);\n    poly47.ps[0] = Point(697.924, 271.557);\n    poly47.ps[1] = Point(697.924, 311.557);\n    poly47.ps[2] = Point(657.924, 311.557);\n    poly47.ps[3] = Point(657.924, 271.557);\n    new ShapeRef(router, poly47, 47);\n    \n    Polygon poly63(4);\n    poly63.ps[0] = Point(457.924, 507.557);\n    poly63.ps[1] = Point(457.924, 547.557);\n    poly63.ps[2] = Point(417.924, 547.557);\n    poly63.ps[3] = Point(417.924, 507.557);\n    new ShapeRef(router, poly63, 63);\n    \n    Polygon poly43(4);\n    poly43.ps[0] = Point(1038.92, 1.84222);\n    poly43.ps[1] = Point(1038.92, 41.8422);\n    poly43.ps[2] = Point(998.924, 41.8422);\n    poly43.ps[3] = Point(998.924, 1.84222);\n    new ShapeRef(router, poly43, 43);\n    \n    Polygon poly48(4);\n    poly48.ps[0] = Point(97.9242, 743.557);\n    poly48.ps[1] = Point(97.9242, 783.557);\n    poly48.ps[2] = Point(57.9242, 783.557);\n    poly48.ps[3] = Point(57.9242, 743.557);\n    new ShapeRef(router, poly48, 48);\n    \n    Polygon poly87(4);\n    poly87.ps[0] = Point(627.924, 35.8422);\n    poly87.ps[1] = Point(627.924, 55.8422);\n    poly87.ps[2] = Point(607.924, 55.8422);\n    poly87.ps[3] = Point(607.924, 35.8422);\n    new ShapeRef(router, poly87, 87);\n    \n    Polygon poly98(4);\n    poly98.ps[0] = Point(1208.92, 378.557);\n    poly98.ps[1] = Point(1208.92, 398.557);\n    poly98.ps[2] = Point(1188.92, 398.557);\n    poly98.ps[3] = Point(1188.92, 378.557);\n    new ShapeRef(router, poly98, 98);\n    \n    Polygon poly66(4);\n    poly66.ps[0] = Point(747.924, -70.6578);\n    poly66.ps[1] = Point(747.924, -50.6578);\n    poly66.ps[2] = Point(727.924, -50.6578);\n    poly66.ps[3] = Point(727.924, -70.6578);\n    new ShapeRef(router, poly66, 66);\n    \n    Polygon poly58(4);\n    poly58.ps[0] = Point(97.9242, 14.8422);\n    poly58.ps[1] = Point(97.9242, 54.8422);\n    poly58.ps[2] = Point(57.9242, 54.8422);\n    poly58.ps[3] = Point(57.9242, 14.8422);\n    new ShapeRef(router, poly58, 58);\n    \n    Polygon poly128(4);\n    poly128.ps[0] = Point(765.924, 504.057);\n    poly128.ps[1] = Point(765.924, 544.057);\n    poly128.ps[2] = Point(709.924, 544.057);\n    poly128.ps[3] = Point(709.924, 504.057);\n    new ShapeRef(router, poly128, 128);\n    \n    Polygon poly129(4);\n    poly129.ps[0] = Point(525.924, 457.557);\n    poly129.ps[1] = Point(525.924, 497.557);\n    poly129.ps[2] = Point(469.924, 497.557);\n    poly129.ps[3] = Point(469.924, 457.557);\n    new ShapeRef(router, poly129, 129);\n    \n    Polygon poly54(4);\n    poly54.ps[0] = Point(697.924, 323.557);\n    poly54.ps[1] = Point(697.924, 363.557);\n    poly54.ps[2] = Point(657.924, 363.557);\n    poly54.ps[3] = Point(657.924, 323.557);\n    new ShapeRef(router, poly54, 54);\n    \n    Polygon poly15(4);\n    poly15.ps[0] = Point(1158.92, 415.557);\n    poly15.ps[1] = Point(1158.92, 455.557);\n    poly15.ps[2] = Point(1118.92, 455.557);\n    poly15.ps[3] = Point(1118.92, 415.557);\n    new ShapeRef(router, poly15, 15);\n    \n    Polygon poly117(4);\n    poly117.ps[0] = Point(285.924, 693.557);\n    poly117.ps[1] = Point(285.924, 733.557);\n    poly117.ps[2] = Point(229.924, 733.557);\n    poly117.ps[3] = Point(229.924, 693.557);\n    new ShapeRef(router, poly117, 117);\n    \n    Polygon poly8(4);\n    poly8.ps[0] = Point(1158.92, -80.6578);\n    poly8.ps[1] = Point(1158.92, -40.6578);\n    poly8.ps[2] = Point(1118.92, -40.6578);\n    poly8.ps[3] = Point(1118.92, -80.6578);\n    new ShapeRef(router, poly8, 8);\n    \n    Polygon poly57(4);\n    poly57.ps[0] = Point(817.924, 141.557);\n    poly57.ps[1] = Point(817.924, 181.557);\n    poly57.ps[2] = Point(777.924, 181.557);\n    poly57.ps[3] = Point(777.924, 141.557);\n    new ShapeRef(router, poly57, 57);\n    \n    Polygon poly62(4);\n    poly62.ps[0] = Point(577.924, 629.557);\n    poly62.ps[1] = Point(577.924, 669.557);\n    poly62.ps[2] = Point(537.924, 669.557);\n    poly62.ps[3] = Point(537.924, 629.557);\n    new ShapeRef(router, poly62, 62);\n    \n    Polygon poly24(4);\n    poly24.ps[0] = Point(457.924, 743.557);\n    poly24.ps[1] = Point(457.924, 783.557);\n    poly24.ps[2] = Point(417.924, 783.557);\n    poly24.ps[3] = Point(417.924, 743.557);\n    new ShapeRef(router, poly24, 24);\n    \n    Polygon poly100(4);\n    poly100.ps[0] = Point(1088.92, 50.3422);\n    poly100.ps[1] = Point(1088.92, 70.3422);\n    poly100.ps[2] = Point(1068.92, 70.3422);\n    poly100.ps[3] = Point(1068.92, 50.3422);\n    new ShapeRef(router, poly100, 100);\n    \n    Polygon poly28(4);\n    poly28.ps[0] = Point(817.924, 323.557);\n    poly28.ps[1] = Point(817.924, 363.557);\n    poly28.ps[2] = Point(777.924, 363.557);\n    poly28.ps[3] = Point(777.924, 323.557);\n    new ShapeRef(router, poly28, 28);\n    \n    Polygon poly55(4);\n    poly55.ps[0] = Point(457.924, 7.34222);\n    poly55.ps[1] = Point(457.924, 47.3422);\n    poly55.ps[2] = Point(417.924, 47.3422);\n    poly55.ps[3] = Point(417.924, 7.34222);\n    new ShapeRef(router, poly55, 55);\n    \n    Polygon poly60(4);\n    poly60.ps[0] = Point(937.924, 1.84222);\n    poly60.ps[1] = Point(937.924, 41.8422);\n    poly60.ps[2] = Point(897.924, 41.8422);\n    poly60.ps[3] = Point(897.924, 1.84222);\n    new ShapeRef(router, poly60, 60);\n    \n    Polygon poly105(4);\n    poly105.ps[0] = Point(747.924, 850.057);\n    poly105.ps[1] = Point(747.924, 870.057);\n    poly105.ps[2] = Point(727.924, 870.057);\n    poly105.ps[3] = Point(727.924, 850.057);\n    new ShapeRef(router, poly105, 105);\n    \n    Polygon poly5(4);\n    poly5.ps[0] = Point(1371.92, -22.1578);\n    poly5.ps[1] = Point(1371.92, 17.8422);\n    poly5.ps[2] = Point(1331.92, 17.8422);\n    poly5.ps[3] = Point(1331.92, -22.1578);\n    new ShapeRef(router, poly5, 5);\n    \n    Polygon poly84(4);\n    poly84.ps[0] = Point(387.924, 151.557);\n    poly84.ps[1] = Point(387.924, 171.557);\n    poly84.ps[2] = Point(367.924, 171.557);\n    poly84.ps[3] = Point(367.924, 151.557);\n    new ShapeRef(router, poly84, 84);\n    \n    Polygon poly130(4);\n    poly130.ps[0] = Point(525.924, 365.557);\n    poly130.ps[1] = Point(525.924, 405.557);\n    poly130.ps[2] = Point(469.924, 405.557);\n    poly130.ps[3] = Point(469.924, 365.557);\n    new ShapeRef(router, poly130, 130);\n    \n    Polygon poly131(4);\n    poly131.ps[0] = Point(645.924, 457.557);\n    poly131.ps[1] = Point(645.924, 497.557);\n    poly131.ps[2] = Point(589.924, 497.557);\n    poly131.ps[3] = Point(589.924, 457.557);\n    new ShapeRef(router, poly131, 131);\n    \n    Polygon poly132(4);\n    poly132.ps[0] = Point(645.924, 365.557);\n    poly132.ps[1] = Point(645.924, 405.557);\n    poly132.ps[2] = Point(589.924, 405.557);\n    poly132.ps[3] = Point(589.924, 365.557);\n    new ShapeRef(router, poly132, 132);\n    \n    Polygon poly133(4);\n    poly133.ps[0] = Point(885.924, 273.557);\n    poly133.ps[1] = Point(885.924, 313.557);\n    poly133.ps[2] = Point(829.924, 313.557);\n    poly133.ps[3] = Point(829.924, 273.557);\n    new ShapeRef(router, poly133, 133);\n    \n    Polygon poly73(4);\n    poly73.ps[0] = Point(147.924, 517.557);\n    poly73.ps[1] = Point(147.924, 537.557);\n    poly73.ps[2] = Point(127.924, 537.557);\n    poly73.ps[3] = Point(127.924, 517.557);\n    new ShapeRef(router, poly73, 73);\n    \n    Polygon poly86(4);\n    poly86.ps[0] = Point(507.924, 35.8422);\n    poly86.ps[1] = Point(507.924, 55.8422);\n    poly86.ps[2] = Point(487.924, 55.8422);\n    poly86.ps[3] = Point(487.924, 35.8422);\n    new ShapeRef(router, poly86, 86);\n    \n    Polygon poly14(4);\n    poly14.ps[0] = Point(1158.92, 141.557);\n    poly14.ps[1] = Point(1158.92, 181.557);\n    poly14.ps[2] = Point(1118.92, 181.557);\n    poly14.ps[3] = Point(1118.92, 141.557);\n    new ShapeRef(router, poly14, 14);\n    \n    Polygon poly13(4);\n    poly13.ps[0] = Point(1158.92, 323.557);\n    poly13.ps[1] = Point(1158.92, 363.557);\n    poly13.ps[2] = Point(1118.92, 363.557);\n    poly13.ps[3] = Point(1118.92, 323.557);\n    new ShapeRef(router, poly13, 13);\n    \n    Polygon poly61(4);\n    poly61.ps[0] = Point(577.924, -44.6578);\n    poly61.ps[1] = Point(577.924, -4.65778);\n    poly61.ps[2] = Point(537.924, -4.65778);\n    poly61.ps[3] = Point(537.924, -44.6578);\n    new ShapeRef(router, poly61, 61);\n    \n    Polygon poly101(4);\n    poly101.ps[0] = Point(1208.92, 142.342);\n    poly101.ps[1] = Point(1208.92, 162.342);\n    poly101.ps[2] = Point(1188.92, 162.342);\n    poly101.ps[3] = Point(1188.92, 142.342);\n    new ShapeRef(router, poly101, 101);\n    \n    Polygon poly72(4);\n    poly72.ps[0] = Point(87.9242, 357.557);\n    poly72.ps[1] = Point(87.9242, 377.557);\n    poly72.ps[2] = Point(67.9242, 377.557);\n    poly72.ps[3] = Point(67.9242, 357.557);\n    new ShapeRef(router, poly72, 72);\n    \n    Polygon poly41(4);\n    poly41.ps[0] = Point(577.924, 743.557);\n    poly41.ps[1] = Point(577.924, 783.557);\n    poly41.ps[2] = Point(537.924, 783.557);\n    poly41.ps[3] = Point(537.924, 743.557);\n    new ShapeRef(router, poly41, 41);\n    \n    Polygon poly30(4);\n    poly30.ps[0] = Point(1278.92, 415.557);\n    poly30.ps[1] = Point(1278.92, 455.557);\n    poly30.ps[2] = Point(1238.92, 455.557);\n    poly30.ps[3] = Point(1238.92, 415.557);\n    new ShapeRef(router, poly30, 30);\n    \n    Polygon poly65(4);\n    poly65.ps[0] = Point(97.9242, 599.557);\n    poly65.ps[1] = Point(97.9242, 639.557);\n    poly65.ps[2] = Point(57.9242, 639.557);\n    poly65.ps[3] = Point(57.9242, 599.557);\n    new ShapeRef(router, poly65, 65);\n    \n    Polygon poly37(4);\n    poly37.ps[0] = Point(457.924, 607.557);\n    poly37.ps[1] = Point(457.924, 647.557);\n    poly37.ps[2] = Point(417.924, 647.557);\n    poly37.ps[3] = Point(417.924, 607.557);\n    new ShapeRef(router, poly37, 37);\n    \n    Polygon poly35(4);\n    poly35.ps[0] = Point(1158.92, 40.3422);\n    poly35.ps[1] = Point(1158.92, 80.3422);\n    poly35.ps[2] = Point(1118.92, 80.3422);\n    poly35.ps[3] = Point(1118.92, 40.3422);\n    new ShapeRef(router, poly35, 35);\n    \n    Polygon poly26(4);\n    poly26.ps[0] = Point(697.924, 743.557);\n    poly26.ps[1] = Point(697.924, 783.557);\n    poly26.ps[2] = Point(657.924, 783.557);\n    poly26.ps[3] = Point(657.924, 743.557);\n    new ShapeRef(router, poly26, 26);\n    \n    Polygon poly80(4);\n    poly80.ps[0] = Point(507.924, 753.557);\n    poly80.ps[1] = Point(507.924, 773.557);\n    poly80.ps[2] = Point(487.924, 773.557);\n    poly80.ps[3] = Point(487.924, 753.557);\n    new ShapeRef(router, poly80, 80);\n    \n    Polygon poly81(4);\n    poly81.ps[0] = Point(627.924, 753.557);\n    poly81.ps[1] = Point(627.924, 773.557);\n    poly81.ps[2] = Point(607.924, 773.557);\n    poly81.ps[3] = Point(607.924, 753.557);\n    new ShapeRef(router, poly81, 81);\n    \n    Polygon poly79(4);\n    poly79.ps[0] = Point(387.924, 753.557);\n    poly79.ps[1] = Point(387.924, 773.557);\n    poly79.ps[2] = Point(367.924, 773.557);\n    poly79.ps[3] = Point(367.924, 753.557);\n    new ShapeRef(router, poly79, 79);\n    \n    Polygon poly78(4);\n    poly78.ps[0] = Point(387.924, 617.557);\n    poly78.ps[1] = Point(387.924, 637.557);\n    poly78.ps[2] = Point(367.924, 637.557);\n    poly78.ps[3] = Point(367.924, 617.557);\n    new ShapeRef(router, poly78, 78);\n    \n    Polygon poly77(4);\n    poly77.ps[0] = Point(267.924, 753.557);\n    poly77.ps[1] = Point(267.924, 773.557);\n    poly77.ps[2] = Point(247.924, 773.557);\n    poly77.ps[3] = Point(247.924, 753.557);\n    new ShapeRef(router, poly77, 77);\n    \n    Polygon poly12(4);\n    poly12.ps[0] = Point(1038.92, 260.557);\n    poly12.ps[1] = Point(1038.92, 300.557);\n    poly12.ps[2] = Point(998.924, 300.557);\n    poly12.ps[3] = Point(998.924, 260.557);\n    new ShapeRef(router, poly12, 12);\n    \n    Polygon poly76(4);\n    poly76.ps[0] = Point(147.924, 753.557);\n    poly76.ps[1] = Point(147.924, 773.557);\n    poly76.ps[2] = Point(127.924, 773.557);\n    poly76.ps[3] = Point(127.924, 753.557);\n    new ShapeRef(router, poly76, 76);\n    \n    Polygon poly75(4);\n    poly75.ps[0] = Point(87.9242, 651.557);\n    poly75.ps[1] = Point(87.9242, 671.557);\n    poly75.ps[2] = Point(67.9242, 671.557);\n    poly75.ps[3] = Point(67.9242, 651.557);\n    new ShapeRef(router, poly75, 75);\n    \n    Polygon poly32(4);\n    poly32.ps[0] = Point(1038.92, 141.557);\n    poly32.ps[1] = Point(1038.92, 181.557);\n    poly32.ps[2] = Point(998.924, 181.557);\n    poly32.ps[3] = Point(998.924, 141.557);\n    new ShapeRef(router, poly32, 32);\n    \n    Polygon poly11(4);\n    poly11.ps[0] = Point(817.924, -80.6578);\n    poly11.ps[1] = Point(817.924, -40.6578);\n    poly11.ps[2] = Point(777.924, -40.6578);\n    poly11.ps[3] = Point(777.924, -80.6578);\n    new ShapeRef(router, poly11, 11);\n    \n    Polygon poly36(4);\n    poly36.ps[0] = Point(697.924, 507.557);\n    poly36.ps[1] = Point(697.924, 547.557);\n    poly36.ps[2] = Point(657.924, 547.557);\n    poly36.ps[3] = Point(657.924, 507.557);\n    new ShapeRef(router, poly36, 36);\n    \n    Polygon poly126(4);\n    poly126.ps[0] = Point(525.924, -24.1578);\n    poly126.ps[1] = Point(525.924, 15.8422);\n    poly126.ps[2] = Point(469.924, 15.8422);\n    poly126.ps[3] = Point(469.924, -24.1578);\n    new ShapeRef(router, poly126, 126);\n    \n    Polygon poly127(4);\n    poly127.ps[0] = Point(645.924, -24.1578);\n    poly127.ps[1] = Point(645.924, 15.8422);\n    poly127.ps[2] = Point(589.924, 15.8422);\n    poly127.ps[3] = Point(589.924, -24.1578);\n    new ShapeRef(router, poly127, 127);\n    \n    Polygon poly4(4);\n    poly4.ps[0] = Point(1371.92, 29.8422);\n    poly4.ps[1] = Point(1371.92, 69.8422);\n    poly4.ps[2] = Point(1331.92, 69.8422);\n    poly4.ps[3] = Point(1331.92, 29.8422);\n    new ShapeRef(router, poly4, 4);\n    \n    Polygon poly97(4);\n    poly97.ps[0] = Point(1088.92, 378.557);\n    poly97.ps[1] = Point(1088.92, 398.557);\n    poly97.ps[2] = Point(1068.92, 398.557);\n    poly97.ps[3] = Point(1068.92, 378.557);\n    new ShapeRef(router, poly97, 97);\n    \n    Polygon poly103(4);\n    poly103.ps[0] = Point(968.924, 270.557);\n    poly103.ps[1] = Point(968.924, 290.557);\n    poly103.ps[2] = Point(948.924, 290.557);\n    poly103.ps[3] = Point(948.924, 270.557);\n    new ShapeRef(router, poly103, 103);\n    \n    Polygon poly121(4);\n    poly121.ps[0] = Point(645.924, 693.557);\n    poly121.ps[1] = Point(645.924, 733.557);\n    poly121.ps[2] = Point(589.924, 733.557);\n    poly121.ps[3] = Point(589.924, 693.557);\n    new ShapeRef(router, poly121, 121);\n    \n    Polygon poly104(4);\n    poly104.ps[0] = Point(747.924, 151.557);\n    poly104.ps[1] = Point(747.924, 171.557);\n    poly104.ps[2] = Point(727.924, 171.557);\n    poly104.ps[3] = Point(727.924, 151.557);\n    new ShapeRef(router, poly104, 104);\n    \n    Polygon poly71(4);\n    poly71.ps[0] = Point(267.924, 305.557);\n    poly71.ps[1] = Point(267.924, 325.557);\n    poly71.ps[2] = Point(247.924, 325.557);\n    poly71.ps[3] = Point(247.924, 305.557);\n    new ShapeRef(router, poly71, 71);\n    \n    Polygon poly10(4);\n    poly10.ps[0] = Point(937.924, -80.6578);\n    poly10.ps[1] = Point(937.924, -40.6578);\n    poly10.ps[2] = Point(897.924, -40.6578);\n    poly10.ps[3] = Point(897.924, -80.6578);\n    new ShapeRef(router, poly10, 10);\n    \n    Polygon poly116(4);\n    poly116.ps[0] = Point(165.924, 693.557);\n    poly116.ps[1] = Point(165.924, 733.557);\n    poly116.ps[2] = Point(109.924, 733.557);\n    poly116.ps[3] = Point(109.924, 693.557);\n    new ShapeRef(router, poly116, 116);\n    \n    Polygon poly23(4);\n    poly23.ps[0] = Point(337.924, 141.557);\n    poly23.ps[1] = Point(337.924, 181.557);\n    poly23.ps[2] = Point(297.924, 181.557);\n    poly23.ps[3] = Point(297.924, 141.557);\n    new ShapeRef(router, poly23, 23);\n    \n    Polygon poly115(4);\n    poly115.ps[0] = Point(167.924, 641.557);\n    poly115.ps[1] = Point(167.924, 681.557);\n    poly115.ps[2] = Point(111.924, 681.557);\n    poly115.ps[3] = Point(111.924, 641.557);\n    new ShapeRef(router, poly115, 115);\n    \n    Polygon poly83(4);\n    poly83.ps[0] = Point(627.924, 893.057);\n    poly83.ps[1] = Point(627.924, 913.057);\n    poly83.ps[2] = Point(607.924, 913.057);\n    poly83.ps[3] = Point(607.924, 893.057);\n    new ShapeRef(router, poly83, 83);\n    \n    Polygon poly94(4);\n    poly94.ps[0] = Point(867.924, 425.557);\n    poly94.ps[1] = Point(867.924, 445.557);\n    poly94.ps[2] = Point(847.924, 445.557);\n    poly94.ps[3] = Point(847.924, 425.557);\n    new ShapeRef(router, poly94, 94);\n    \n    Polygon poly106(4);\n    poly106.ps[0] = Point(765.924, -130.658);\n    poly106.ps[1] = Point(765.924, -90.6578);\n    poly106.ps[2] = Point(709.924, -90.6578);\n    poly106.ps[3] = Point(709.924, -130.658);\n    new ShapeRef(router, poly106, 106);\n    \n    Polygon poly113(4);\n    poly113.ps[0] = Point(165.924, 457.557);\n    poly113.ps[1] = Point(165.924, 497.557);\n    poly113.ps[2] = Point(109.924, 497.557);\n    poly113.ps[3] = Point(109.924, 457.557);\n    new ShapeRef(router, poly113, 113);\n    \n    Polygon poly92(4);\n    poly92.ps[0] = Point(627.924, 425.557);\n    poly92.ps[1] = Point(627.924, 445.557);\n    poly92.ps[2] = Point(607.924, 445.557);\n    poly92.ps[3] = Point(607.924, 425.557);\n    new ShapeRef(router, poly92, 92);\n    \n    Polygon poly46(4);\n    poly46.ps[0] = Point(577.924, 415.557);\n    poly46.ps[1] = Point(577.924, 455.557);\n    poly46.ps[2] = Point(537.924, 455.557);\n    poly46.ps[3] = Point(537.924, 415.557);\n    new ShapeRef(router, poly46, 46);\n    \n    Polygon poly102(4);\n    poly102.ps[0] = Point(1088.92, -70.6578);\n    poly102.ps[1] = Point(1088.92, -50.6578);\n    poly102.ps[2] = Point(1068.92, -50.6578);\n    poly102.ps[3] = Point(1068.92, -70.6578);\n    new ShapeRef(router, poly102, 102);\n    \n    Polygon poly122(4);\n    poly122.ps[0] = Point(525.924, 833.057);\n    poly122.ps[1] = Point(525.924, 873.057);\n    poly122.ps[2] = Point(469.924, 873.057);\n    poly122.ps[3] = Point(469.924, 833.057);\n    new ShapeRef(router, poly122, 122);\n    \n    Polygon poly114(4);\n    poly114.ps[0] = Point(165.924, 549.557);\n    poly114.ps[1] = Point(165.924, 589.557);\n    poly114.ps[2] = Point(109.924, 589.557);\n    poly114.ps[3] = Point(109.924, 549.557);\n    new ShapeRef(router, poly114, 114);\n    \n    Polygon poly9(4);\n    poly9.ps[0] = Point(1038.92, -80.6578);\n    poly9.ps[1] = Point(1038.92, -40.6578);\n    poly9.ps[2] = Point(998.924, -40.6578);\n    poly9.ps[3] = Point(998.924, -80.6578);\n    new ShapeRef(router, poly9, 9);\n    \n    Polygon poly123(4);\n    poly123.ps[0] = Point(645.924, 833.057);\n    poly123.ps[1] = Point(645.924, 873.057);\n    poly123.ps[2] = Point(589.924, 873.057);\n    poly123.ps[3] = Point(589.924, 833.057);\n    new ShapeRef(router, poly123, 123);\n    \n    Polygon poly95(4);\n    poly95.ps[0] = Point(867.924, 151.557);\n    poly95.ps[1] = Point(867.924, 171.557);\n    poly95.ps[2] = Point(847.924, 171.557);\n    poly95.ps[3] = Point(847.924, 151.557);\n    new ShapeRef(router, poly95, 95);\n    \n    Polygon poly82(4);\n    poly82.ps[0] = Point(507.924, 893.057);\n    poly82.ps[1] = Point(507.924, 913.057);\n    poly82.ps[2] = Point(487.924, 913.057);\n    poly82.ps[3] = Point(487.924, 893.057);\n    new ShapeRef(router, poly82, 82);\n    \n    Polygon poly111(4);\n    poly111.ps[0] = Point(285.924, 245.557);\n    poly111.ps[1] = Point(285.924, 285.557);\n    poly111.ps[2] = Point(229.924, 285.557);\n    poly111.ps[3] = Point(229.924, 245.557);\n    new ShapeRef(router, poly111, 111);\n    \n    Polygon poly85(4);\n    poly85.ps[0] = Point(387.924, 17.3422);\n    poly85.ps[1] = Point(387.924, 37.3422);\n    poly85.ps[2] = Point(367.924, 37.3422);\n    poly85.ps[3] = Point(367.924, 17.3422);\n    new ShapeRef(router, poly85, 85);\n    \n    Polygon poly93(4);\n    poly93.ps[0] = Point(867.924, 333.557);\n    poly93.ps[1] = Point(867.924, 353.557);\n    poly93.ps[2] = Point(847.924, 353.557);\n    poly93.ps[3] = Point(847.924, 333.557);\n    new ShapeRef(router, poly93, 93);\n    \n    Polygon poly119(4);\n    poly119.ps[0] = Point(405.924, 693.557);\n    poly119.ps[1] = Point(405.924, 733.557);\n    poly119.ps[2] = Point(349.924, 733.557);\n    poly119.ps[3] = Point(349.924, 693.557);\n    new ShapeRef(router, poly119, 119);\n    \n    Polygon poly120(4);\n    poly120.ps[0] = Point(525.924, 693.557);\n    poly120.ps[1] = Point(525.924, 733.557);\n    poly120.ps[2] = Point(469.924, 733.557);\n    poly120.ps[3] = Point(469.924, 693.557);\n    new ShapeRef(router, poly120, 120);\n    \n    Polygon poly118(4);\n    poly118.ps[0] = Point(405.924, 557.557);\n    poly118.ps[1] = Point(405.924, 597.557);\n    poly118.ps[2] = Point(349.924, 597.557);\n    poly118.ps[3] = Point(349.924, 557.557);\n    new ShapeRef(router, poly118, 118);\n    \n    Polygon poly91(4);\n    poly91.ps[0] = Point(627.924, 517.557);\n    poly91.ps[1] = Point(627.924, 537.557);\n    poly91.ps[2] = Point(607.924, 537.557);\n    poly91.ps[3] = Point(607.924, 517.557);\n    new ShapeRef(router, poly91, 91);\n    \n    Polygon poly112(4);\n    poly112.ps[0] = Point(167.924, 347.557);\n    poly112.ps[1] = Point(167.924, 387.557);\n    poly112.ps[2] = Point(111.924, 387.557);\n    poly112.ps[3] = Point(111.924, 347.557);\n    new ShapeRef(router, poly112, 112);\n    \n    Polygon poly89(4);\n    poly89.ps[0] = Point(507.924, 517.557);\n    poly89.ps[1] = Point(507.924, 537.557);\n    poly89.ps[2] = Point(487.924, 537.557);\n    poly89.ps[3] = Point(487.924, 517.557);\n    new ShapeRef(router, poly89, 89);\n    \n    Polygon poly110(4);\n    poly110.ps[0] = Point(287.924, 193.557);\n    poly110.ps[1] = Point(287.924, 233.557);\n    poly110.ps[2] = Point(231.924, 233.557);\n    poly110.ps[3] = Point(231.924, 193.557);\n    new ShapeRef(router, poly110, 110);\n    \n    Polygon poly107(4);\n    poly107.ps[0] = Point(165.924, -35.1578);\n    poly107.ps[1] = Point(165.924, 4.84222);\n    poly107.ps[2] = Point(109.924, 4.84222);\n    poly107.ps[3] = Point(109.924, -35.1578);\n    new ShapeRef(router, poly107, 107);\n    \n    Polygon poly31(4);\n    poly31.ps[0] = Point(1278.92, 141.557);\n    poly31.ps[1] = Point(1278.92, 181.557);\n    poly31.ps[2] = Point(1238.92, 181.557);\n    poly31.ps[3] = Point(1238.92, 141.557);\n    new ShapeRef(router, poly31, 31);\n    \n    Polygon poly29(4);\n    poly29.ps[0] = Point(1038.92, 415.557);\n    poly29.ps[1] = Point(1038.92, 455.557);\n    poly29.ps[2] = Point(998.924, 455.557);\n    poly29.ps[3] = Point(998.924, 415.557);\n    new ShapeRef(router, poly29, 29);\n    \n    Polygon poly34(4);\n    poly34.ps[0] = Point(1278.92, 323.557);\n    poly34.ps[1] = Point(1278.92, 363.557);\n    poly34.ps[2] = Point(1238.92, 363.557);\n    poly34.ps[3] = Point(1238.92, 323.557);\n    new ShapeRef(router, poly34, 34);\n    \n    Polygon poly108(4);\n    poly108.ps[0] = Point(165.924, 91.5565);\n    poly108.ps[1] = Point(165.924, 131.557);\n    poly108.ps[2] = Point(109.924, 131.557);\n    poly108.ps[3] = Point(109.924, 91.5565);\n    new ShapeRef(router, poly108, 108);\n    \n    Polygon poly74(4);\n    poly74.ps[0] = Point(147.924, 609.557);\n    poly74.ps[1] = Point(147.924, 629.557);\n    poly74.ps[2] = Point(127.924, 629.557);\n    poly74.ps[3] = Point(127.924, 609.557);\n    new ShapeRef(router, poly74, 74);\n    \n    Polygon poly96(4);\n    poly96.ps[0] = Point(747.924, 333.557);\n    poly96.ps[1] = Point(747.924, 353.557);\n    poly96.ps[2] = Point(727.924, 353.557);\n    poly96.ps[3] = Point(727.924, 333.557);\n    new ShapeRef(router, poly96, 96);\n    \n    Polygon poly69(4);\n    poly69.ps[0] = Point(267.924, 151.557);\n    poly69.ps[1] = Point(267.924, 171.557);\n    poly69.ps[2] = Point(247.924, 171.557);\n    poly69.ps[3] = Point(247.924, 151.557);\n    new ShapeRef(router, poly69, 69);\n    \n    Polygon poly44(4);\n    poly44.ps[0] = Point(97.9242, 507.557);\n    poly44.ps[1] = Point(97.9242, 547.557);\n    poly44.ps[2] = Point(57.9242, 547.557);\n    poly44.ps[3] = Point(57.9242, 507.557);\n    new ShapeRef(router, poly44, 44);\n    \n    Polygon poly90(4);\n    poly90.ps[0] = Point(507.924, 425.557);\n    poly90.ps[1] = Point(507.924, 445.557);\n    poly90.ps[2] = Point(487.924, 445.557);\n    poly90.ps[3] = Point(487.924, 425.557);\n    new ShapeRef(router, poly90, 90);\n    \n    Polygon poly56(4);\n    poly56.ps[0] = Point(457.924, -44.6578);\n    poly56.ps[1] = Point(457.924, -4.65778);\n    poly56.ps[2] = Point(417.924, -4.65778);\n    poly56.ps[3] = Point(417.924, -44.6578);\n    new ShapeRef(router, poly56, 56);\n    \n    Polygon poly25(4);\n    poly25.ps[0] = Point(697.924, 883.057);\n    poly25.ps[1] = Point(697.924, 923.057);\n    poly25.ps[2] = Point(657.924, 923.057);\n    poly25.ps[3] = Point(657.924, 883.057);\n    new ShapeRef(router, poly25, 25);\n    \n    Polygon poly33(4);\n    poly33.ps[0] = Point(937.924, 415.557);\n    poly33.ps[1] = Point(937.924, 455.557);\n    poly33.ps[2] = Point(897.924, 455.557);\n    poly33.ps[3] = Point(897.924, 415.557);\n    new ShapeRef(router, poly33, 33);\n    \n    Polygon poly59(4);\n    poly59.ps[0] = Point(937.924, 323.557);\n    poly59.ps[1] = Point(937.924, 363.557);\n    poly59.ps[2] = Point(897.924, 363.557);\n    poly59.ps[3] = Point(897.924, 323.557);\n    new ShapeRef(router, poly59, 59);\n    \n    Polygon poly3(4);\n    poly3.ps[0] = Point(1278.92, -22.1578);\n    poly3.ps[1] = Point(1278.92, 17.8422);\n    poly3.ps[2] = Point(1238.92, 17.8422);\n    poly3.ps[3] = Point(1238.92, -22.1578);\n    new ShapeRef(router, poly3, 3);\n    \n    ConnRef *connRef211 = new ConnRef(router, 211);\n    ConnEnd srcPt211(Point(507.924, 435.557), 15);\n    connRef211->setSourceEndpoint(srcPt211);\n    ConnEnd dstPt211(Point(557.924, 435.557), 15);\n    connRef211->setDestEndpoint(dstPt211);\n    connRef211->setRoutingType((ConnType)2);\n\n    ConnRef *connRef212 = new ConnRef(router, 212);\n    ConnEnd srcPt212(Point(627.924, 527.557), 15);\n    connRef212->setSourceEndpoint(srcPt212);\n    ConnEnd dstPt212(Point(677.924, 527.557), 15);\n    connRef212->setDestEndpoint(dstPt212);\n    connRef212->setRoutingType((ConnType)2);\n\n    ConnRef *connRef213 = new ConnRef(router, 213);\n    ConnEnd srcPt213(Point(627.924, 435.557), 15);\n    connRef213->setSourceEndpoint(srcPt213);\n    ConnEnd dstPt213(Point(677.924, 435.557), 15);\n    connRef213->setDestEndpoint(dstPt213);\n    connRef213->setRoutingType((ConnType)2);\n\n    ConnRef *connRef214 = new ConnRef(router, 214);\n    ConnEnd srcPt214(Point(867.924, 343.557), 15);\n    connRef214->setSourceEndpoint(srcPt214);\n    ConnEnd dstPt214(Point(917.924, 343.557), 15);\n    connRef214->setDestEndpoint(dstPt214);\n    connRef214->setRoutingType((ConnType)2);\n\n    ConnRef *connRef215 = new ConnRef(router, 215);\n    ConnEnd srcPt215(Point(867.924, 435.557), 15);\n    connRef215->setSourceEndpoint(srcPt215);\n    ConnEnd dstPt215(Point(917.924, 435.557), 15);\n    connRef215->setDestEndpoint(dstPt215);\n    connRef215->setRoutingType((ConnType)2);\n\n    ConnRef *connRef216 = new ConnRef(router, 216);\n    ConnEnd srcPt216(Point(867.924, 161.557), 15);\n    connRef216->setSourceEndpoint(srcPt216);\n    ConnEnd dstPt216(Point(917.924, 161.557), 15);\n    connRef216->setDestEndpoint(dstPt216);\n    connRef216->setRoutingType((ConnType)2);\n\n    ConnRef *connRef217 = new ConnRef(router, 217);\n    ConnEnd srcPt217(Point(747.924, 343.557), 15);\n    connRef217->setSourceEndpoint(srcPt217);\n    ConnEnd dstPt217(Point(797.924, 343.557), 15);\n    connRef217->setDestEndpoint(dstPt217);\n    connRef217->setRoutingType((ConnType)2);\n\n    ConnRef *connRef218 = new ConnRef(router, 218);\n    ConnEnd srcPt218(Point(1088.92, 388.557), 15);\n    connRef218->setSourceEndpoint(srcPt218);\n    ConnEnd dstPt218(Point(1138.92, 435.557), 15);\n    connRef218->setDestEndpoint(dstPt218);\n    connRef218->setRoutingType((ConnType)2);\n\n    ConnRef *connRef219 = new ConnRef(router, 219);\n    ConnEnd srcPt219(Point(1208.92, 388.557), 15);\n    connRef219->setSourceEndpoint(srcPt219);\n    ConnEnd dstPt219(Point(1258.92, 435.557), 15);\n    connRef219->setDestEndpoint(dstPt219);\n    connRef219->setRoutingType((ConnType)2);\n\n    ConnRef *connRef220 = new ConnRef(router, 220);\n    ConnEnd srcPt220(Point(1088.92, 152.342), 15);\n    connRef220->setSourceEndpoint(srcPt220);\n    ConnEnd dstPt220(Point(1138.92, 161.557), 15);\n    connRef220->setDestEndpoint(dstPt220);\n    connRef220->setRoutingType((ConnType)2);\n\n    ConnRef *connRef221 = new ConnRef(router, 221);\n    ConnEnd srcPt221(Point(1088.92, 60.3422), 15);\n    connRef221->setSourceEndpoint(srcPt221);\n    ConnEnd dstPt221(Point(1138.92, 60.3422), 15);\n    connRef221->setDestEndpoint(dstPt221);\n    connRef221->setRoutingType((ConnType)2);\n\n    ConnRef *connRef222 = new ConnRef(router, 222);\n    ConnEnd srcPt222(Point(1208.92, 152.342), 15);\n    connRef222->setSourceEndpoint(srcPt222);\n    ConnEnd dstPt222(Point(1258.92, 161.557), 15);\n    connRef222->setDestEndpoint(dstPt222);\n    connRef222->setRoutingType((ConnType)2);\n\n    ConnRef *connRef223 = new ConnRef(router, 223);\n    ConnEnd srcPt223(Point(1088.92, -60.6578), 15);\n    connRef223->setSourceEndpoint(srcPt223);\n    ConnEnd dstPt223(Point(1138.92, -60.6578), 15);\n    connRef223->setDestEndpoint(dstPt223);\n    connRef223->setRoutingType((ConnType)2);\n\n    ConnRef *connRef224 = new ConnRef(router, 224);\n    ConnEnd srcPt224(Point(747.924, 161.557), 15);\n    connRef224->setSourceEndpoint(srcPt224);\n    ConnEnd dstPt224(Point(797.924, 161.557), 15);\n    connRef224->setDestEndpoint(dstPt224);\n    connRef224->setRoutingType((ConnType)2);\n\n    ConnRef *connRef225 = new ConnRef(router, 225);\n    ConnEnd srcPt225(Point(747.924, 860.057), 15);\n    connRef225->setSourceEndpoint(srcPt225);\n    ConnEnd dstPt225(Point(797.924, 860.057), 15);\n    connRef225->setDestEndpoint(dstPt225);\n    connRef225->setRoutingType((ConnType)2);\n\n    ConnRef *connRef226 = new ConnRef(router, 226);\n    ConnEnd srcPt226(Point(737.924, -110.658), 15);\n    connRef226->setSourceEndpoint(srcPt226);\n    ConnEnd dstPt226(Point(737.924, -60.6578), 15);\n    connRef226->setDestEndpoint(dstPt226);\n    connRef226->setRoutingType((ConnType)2);\n\n    ConnRef *connRef227 = new ConnRef(router, 227);\n    ConnEnd srcPt227(Point(137.924, -15.1578), 15);\n    connRef227->setSourceEndpoint(srcPt227);\n    ConnEnd dstPt227(Point(137.924, 34.8422), 15);\n    connRef227->setDestEndpoint(dstPt227);\n    connRef227->setRoutingType((ConnType)2);\n\n    ConnRef *connRef228 = new ConnRef(router, 228);\n    ConnEnd srcPt228(Point(137.924, 111.557), 15);\n    connRef228->setSourceEndpoint(srcPt228);\n    ConnEnd dstPt228(Point(137.924, 161.557), 15);\n    connRef228->setDestEndpoint(dstPt228);\n    connRef228->setRoutingType((ConnType)2);\n\n    ConnRef *connRef229 = new ConnRef(router, 229);\n    ConnEnd srcPt229(Point(257.924, 111.557), 15);\n    connRef229->setSourceEndpoint(srcPt229);\n    ConnEnd dstPt229(Point(257.924, 161.557), 15);\n    connRef229->setDestEndpoint(dstPt229);\n    connRef229->setRoutingType((ConnType)2);\n\n    ConnRef *connRef230 = new ConnRef(router, 230);\n    ConnEnd srcPt230(Point(259.924, 213.557), 15);\n    connRef230->setSourceEndpoint(srcPt230);\n    ConnEnd dstPt230(Point(197.924, 213.557), 15);\n    connRef230->setDestEndpoint(dstPt230);\n    connRef230->setRoutingType((ConnType)2);\n\n    ConnRef *connRef231 = new ConnRef(router, 231);\n    ConnEnd srcPt231(Point(257.924, 265.557), 15);\n    connRef231->setSourceEndpoint(srcPt231);\n    ConnEnd dstPt231(Point(257.924, 315.557), 15);\n    connRef231->setDestEndpoint(dstPt231);\n    connRef231->setRoutingType((ConnType)2);\n\n    ConnRef *connRef232 = new ConnRef(router, 232);\n    ConnEnd srcPt232(Point(139.924, 367.557), 15);\n    connRef232->setSourceEndpoint(srcPt232);\n    ConnEnd dstPt232(Point(77.9242, 367.557), 15);\n    connRef232->setDestEndpoint(dstPt232);\n    connRef232->setRoutingType((ConnType)2);\n\n    ConnRef *connRef233 = new ConnRef(router, 233);\n    ConnEnd srcPt233(Point(137.924, 477.557), 15);\n    connRef233->setSourceEndpoint(srcPt233);\n    ConnEnd dstPt233(Point(137.924, 527.557), 15);\n    connRef233->setDestEndpoint(dstPt233);\n    connRef233->setRoutingType((ConnType)2);\n\n    ConnRef *connRef234 = new ConnRef(router, 234);\n    ConnEnd srcPt234(Point(137.924, 569.557), 15);\n    connRef234->setSourceEndpoint(srcPt234);\n    ConnEnd dstPt234(Point(137.924, 619.557), 15);\n    connRef234->setDestEndpoint(dstPt234);\n    connRef234->setRoutingType((ConnType)2);\n\n    ConnRef *connRef235 = new ConnRef(router, 235);\n    ConnEnd srcPt235(Point(139.924, 661.557), 15);\n    connRef235->setSourceEndpoint(srcPt235);\n    ConnEnd dstPt235(Point(77.9242, 661.557), 15);\n    connRef235->setDestEndpoint(dstPt235);\n    connRef235->setRoutingType((ConnType)2);\n\n    ConnRef *connRef236 = new ConnRef(router, 236);\n    ConnEnd srcPt236(Point(137.924, 713.557), 15);\n    connRef236->setSourceEndpoint(srcPt236);\n    ConnEnd dstPt236(Point(137.924, 763.557), 15);\n    connRef236->setDestEndpoint(dstPt236);\n    connRef236->setRoutingType((ConnType)2);\n\n    ConnRef *connRef237 = new ConnRef(router, 237);\n    ConnEnd srcPt237(Point(257.924, 713.557), 15);\n    connRef237->setSourceEndpoint(srcPt237);\n    ConnEnd dstPt237(Point(257.924, 763.557), 15);\n    connRef237->setDestEndpoint(dstPt237);\n    connRef237->setRoutingType((ConnType)2);\n\n    ConnRef *connRef238 = new ConnRef(router, 238);\n    ConnEnd srcPt238(Point(377.924, 577.557), 15);\n    connRef238->setSourceEndpoint(srcPt238);\n    ConnEnd dstPt238(Point(377.924, 627.557), 15);\n    connRef238->setDestEndpoint(dstPt238);\n    connRef238->setRoutingType((ConnType)2);\n\n    ConnRef *connRef239 = new ConnRef(router, 239);\n    ConnEnd srcPt239(Point(377.924, 713.557), 15);\n    connRef239->setSourceEndpoint(srcPt239);\n    ConnEnd dstPt239(Point(377.924, 763.557), 15);\n    connRef239->setDestEndpoint(dstPt239);\n    connRef239->setRoutingType((ConnType)2);\n\n    ConnRef *connRef240 = new ConnRef(router, 240);\n    ConnEnd srcPt240(Point(497.924, 713.557), 15);\n    connRef240->setSourceEndpoint(srcPt240);\n    ConnEnd dstPt240(Point(497.924, 763.557), 15);\n    connRef240->setDestEndpoint(dstPt240);\n    connRef240->setRoutingType((ConnType)2);\n\n    ConnRef *connRef241 = new ConnRef(router, 241);\n    ConnEnd srcPt241(Point(617.924, 713.557), 15);\n    connRef241->setSourceEndpoint(srcPt241);\n    ConnEnd dstPt241(Point(617.924, 763.557), 15);\n    connRef241->setDestEndpoint(dstPt241);\n    connRef241->setRoutingType((ConnType)2);\n\n    ConnRef *connRef242 = new ConnRef(router, 242);\n    ConnEnd srcPt242(Point(497.924, 853.057), 15);\n    connRef242->setSourceEndpoint(srcPt242);\n    ConnEnd dstPt242(Point(497.924, 903.057), 15);\n    connRef242->setDestEndpoint(dstPt242);\n    connRef242->setRoutingType((ConnType)2);\n\n    ConnRef *connRef243 = new ConnRef(router, 243);\n    ConnEnd srcPt243(Point(617.924, 853.057), 15);\n    connRef243->setSourceEndpoint(srcPt243);\n    ConnEnd dstPt243(Point(617.924, 903.057), 15);\n    connRef243->setDestEndpoint(dstPt243);\n    connRef243->setRoutingType((ConnType)2);\n\n    ConnRef *connRef244 = new ConnRef(router, 244);\n    ConnEnd srcPt244(Point(377.924, 111.557), 15);\n    connRef244->setSourceEndpoint(srcPt244);\n    ConnEnd dstPt244(Point(377.924, 161.557), 15);\n    connRef244->setDestEndpoint(dstPt244);\n    connRef244->setRoutingType((ConnType)2);\n\n    ConnRef *connRef245 = new ConnRef(router, 245);\n    ConnEnd srcPt245(Point(377.924, -22.6578), 15);\n    connRef245->setSourceEndpoint(srcPt245);\n    ConnEnd dstPt245(Point(377.924, 27.3422), 15);\n    connRef245->setDestEndpoint(dstPt245);\n    connRef245->setRoutingType((ConnType)2);\n\n    ConnRef *connRef246 = new ConnRef(router, 246);\n    ConnEnd srcPt246(Point(497.924, -4.15778), 15);\n    connRef246->setSourceEndpoint(srcPt246);\n    ConnEnd dstPt246(Point(497.924, 45.8422), 15);\n    connRef246->setDestEndpoint(dstPt246);\n    connRef246->setRoutingType((ConnType)2);\n\n    ConnRef *connRef247 = new ConnRef(router, 247);\n    ConnEnd srcPt247(Point(617.924, -4.15778), 15);\n    connRef247->setSourceEndpoint(srcPt247);\n    ConnEnd dstPt247(Point(617.924, 45.8422), 15);\n    connRef247->setDestEndpoint(dstPt247);\n    connRef247->setRoutingType((ConnType)2);\n\n    ConnRef *connRef248 = new ConnRef(router, 248);\n    ConnEnd srcPt248(Point(737.924, 524.057), 15);\n    connRef248->setSourceEndpoint(srcPt248);\n    ConnEnd dstPt248(Point(737.924, 574.057), 15);\n    connRef248->setDestEndpoint(dstPt248);\n    connRef248->setRoutingType((ConnType)2);\n\n    ConnRef *connRef249 = new ConnRef(router, 249);\n    ConnEnd srcPt249(Point(497.924, 477.557), 15);\n    connRef249->setSourceEndpoint(srcPt249);\n    ConnEnd dstPt249(Point(497.924, 527.557), 15);\n    connRef249->setDestEndpoint(dstPt249);\n    connRef249->setRoutingType((ConnType)2);\n\n    ConnRef *connRef250 = new ConnRef(router, 250);\n    ConnEnd srcPt250(Point(497.924, 385.557), 15);\n    connRef250->setSourceEndpoint(srcPt250);\n    ConnEnd dstPt250(Point(497.924, 435.557), 15);\n    connRef250->setDestEndpoint(dstPt250);\n    connRef250->setRoutingType((ConnType)2);\n\n    ConnRef *connRef251 = new ConnRef(router, 251);\n    ConnEnd srcPt251(Point(617.924, 477.557), 15);\n    connRef251->setSourceEndpoint(srcPt251);\n    ConnEnd dstPt251(Point(617.924, 527.557), 15);\n    connRef251->setDestEndpoint(dstPt251);\n    connRef251->setRoutingType((ConnType)2);\n\n    ConnRef *connRef252 = new ConnRef(router, 252);\n    ConnEnd srcPt252(Point(617.924, 385.557), 15);\n    connRef252->setSourceEndpoint(srcPt252);\n    ConnEnd dstPt252(Point(617.924, 435.557), 15);\n    connRef252->setDestEndpoint(dstPt252);\n    connRef252->setRoutingType((ConnType)2);\n\n    ConnRef *connRef253 = new ConnRef(router, 253);\n    ConnEnd srcPt253(Point(857.924, 293.557), 15);\n    connRef253->setSourceEndpoint(srcPt253);\n    ConnEnd dstPt253(Point(857.924, 343.557), 15);\n    connRef253->setDestEndpoint(dstPt253);\n    connRef253->setRoutingType((ConnType)2);\n\n    ConnRef *connRef254 = new ConnRef(router, 254);\n    ConnEnd srcPt254(Point(857.924, 385.557), 15);\n    connRef254->setSourceEndpoint(srcPt254);\n    ConnEnd dstPt254(Point(857.924, 435.557), 15);\n    connRef254->setDestEndpoint(dstPt254);\n    connRef254->setRoutingType((ConnType)2);\n\n    ConnRef *connRef255 = new ConnRef(router, 255);\n    ConnEnd srcPt255(Point(857.924, 111.557), 15);\n    connRef255->setSourceEndpoint(srcPt255);\n    ConnEnd dstPt255(Point(857.924, 161.557), 15);\n    connRef255->setDestEndpoint(dstPt255);\n    connRef255->setRoutingType((ConnType)2);\n\n    ConnRef *connRef256 = new ConnRef(router, 256);\n    ConnEnd srcPt256(Point(737.924, 293.557), 15);\n    connRef256->setSourceEndpoint(srcPt256);\n    ConnEnd dstPt256(Point(737.924, 343.557), 15);\n    connRef256->setDestEndpoint(dstPt256);\n    connRef256->setRoutingType((ConnType)2);\n\n    ConnRef *connRef257 = new ConnRef(router, 257);\n    ConnEnd srcPt257(Point(1078.92, 338.557), 15);\n    connRef257->setSourceEndpoint(srcPt257);\n    ConnEnd dstPt257(Point(1078.92, 388.557), 15);\n    connRef257->setDestEndpoint(dstPt257);\n    connRef257->setRoutingType((ConnType)2);\n\n    ConnRef *connRef258 = new ConnRef(router, 258);\n    ConnEnd srcPt258(Point(1198.92, 338.557), 15);\n    connRef258->setSourceEndpoint(srcPt258);\n    ConnEnd dstPt258(Point(1198.92, 388.557), 15);\n    connRef258->setDestEndpoint(dstPt258);\n    connRef258->setRoutingType((ConnType)2);\n\n    ConnRef *connRef259 = new ConnRef(router, 259);\n    ConnEnd srcPt259(Point(1078.92, 102.342), 15);\n    connRef259->setSourceEndpoint(srcPt259);\n    ConnEnd dstPt259(Point(1078.92, 152.342), 15);\n    connRef259->setDestEndpoint(dstPt259);\n    connRef259->setRoutingType((ConnType)2);\n\n    ConnRef *connRef260 = new ConnRef(router, 260);\n    ConnEnd srcPt260(Point(1078.92, 10.3422), 15);\n    connRef260->setSourceEndpoint(srcPt260);\n    ConnEnd dstPt260(Point(1078.92, 60.3422), 15);\n    connRef260->setDestEndpoint(dstPt260);\n    connRef260->setRoutingType((ConnType)2);\n\n    ConnRef *connRef261 = new ConnRef(router, 261);\n    ConnEnd srcPt261(Point(1198.92, 102.342), 15);\n    connRef261->setSourceEndpoint(srcPt261);\n    ConnEnd dstPt261(Point(1198.92, 152.342), 15);\n    connRef261->setDestEndpoint(dstPt261);\n    connRef261->setRoutingType((ConnType)2);\n\n    ConnRef *connRef262 = new ConnRef(router, 262);\n    ConnEnd srcPt262(Point(1078.92, -110.658), 15);\n    connRef262->setSourceEndpoint(srcPt262);\n    ConnEnd dstPt262(Point(1078.92, -60.6578), 15);\n    connRef262->setDestEndpoint(dstPt262);\n    connRef262->setRoutingType((ConnType)2);\n\n    ConnRef *connRef263 = new ConnRef(router, 263);\n    ConnEnd srcPt263(Point(958.924, 230.557), 15);\n    connRef263->setSourceEndpoint(srcPt263);\n    ConnEnd dstPt263(Point(958.924, 280.557), 15);\n    connRef263->setDestEndpoint(dstPt263);\n    connRef263->setRoutingType((ConnType)2);\n\n    ConnRef *connRef264 = new ConnRef(router, 264);\n    ConnEnd srcPt264(Point(737.924, 111.557), 15);\n    connRef264->setSourceEndpoint(srcPt264);\n    ConnEnd dstPt264(Point(737.924, 161.557), 15);\n    connRef264->setDestEndpoint(dstPt264);\n    connRef264->setRoutingType((ConnType)2);\n\n    ConnRef *connRef265 = new ConnRef(router, 265);\n    ConnEnd srcPt265(Point(737.924, 810.057), 15);\n    connRef265->setSourceEndpoint(srcPt265);\n    ConnEnd dstPt265(Point(737.924, 860.057), 15);\n    connRef265->setDestEndpoint(dstPt265);\n    connRef265->setRoutingType((ConnType)2);\n\n    ConnRef *connRef266 = new ConnRef(router, 266);\n    ConnEnd srcPt266(Point(77.9242, 161.557), 15);\n    connRef266->setSourceEndpoint(srcPt266);\n    ConnEnd dstPt266(Point(40.9242, 252.5), 15);\n    connRef266->setDestEndpoint(dstPt266);\n    connRef266->setRoutingType((ConnType)2);\n\n    ConnRef *connRef267 = new ConnRef(router, 267);\n    ConnEnd srcPt267(Point(77.9242, 763.557), 15);\n    connRef267->setSourceEndpoint(srcPt267);\n    ConnEnd dstPt267(Point(-46.0758, 329.75), 15);\n    connRef267->setDestEndpoint(dstPt267);\n    connRef267->setRoutingType((ConnType)2);\n\n    ConnRef *connRef148 = new ConnRef(router, 148);\n    ConnEnd srcPt148(Point(1018.92, -60.6578), 15);\n    connRef148->setSourceEndpoint(srcPt148);\n    ConnEnd dstPt148(Point(1068.92, -60.6578), 15);\n    connRef148->setDestEndpoint(dstPt148);\n    connRef148->setRoutingType((ConnType)2);\n\n    ConnRef *connRef149 = new ConnRef(router, 149);\n    ConnEnd srcPt149(Point(1138.92, 161.557), 15);\n    connRef149->setSourceEndpoint(srcPt149);\n    ConnEnd dstPt149(Point(1188.92, 152.342), 15);\n    connRef149->setDestEndpoint(dstPt149);\n    connRef149->setRoutingType((ConnType)2);\n\n    ConnRef *connRef150 = new ConnRef(router, 150);\n    ConnEnd srcPt150(Point(1138.92, 435.557), 15);\n    connRef150->setSourceEndpoint(srcPt150);\n    ConnEnd dstPt150(Point(1188.92, 388.557), 15);\n    connRef150->setDestEndpoint(dstPt150);\n    connRef150->setRoutingType((ConnType)2);\n\n    ConnRef *connRef151 = new ConnRef(router, 151);\n    ConnEnd srcPt151(Point(317.924, 763.557), 15);\n    connRef151->setSourceEndpoint(srcPt151);\n    ConnEnd dstPt151(Point(367.924, 627.557), 15);\n    connRef151->setDestEndpoint(dstPt151);\n    connRef151->setRoutingType((ConnType)2);\n\n    ConnRef *connRef152 = new ConnRef(router, 152);\n    ConnEnd srcPt152(Point(317.924, 763.557), 15);\n    connRef152->setSourceEndpoint(srcPt152);\n    ConnEnd dstPt152(Point(367.924, 763.557), 15);\n    connRef152->setDestEndpoint(dstPt152);\n    connRef152->setRoutingType((ConnType)2);\n\n    ConnRef *connRef153 = new ConnRef(router, 153);\n    ConnEnd srcPt153(Point(317.924, 763.557), 15);\n    connRef153->setSourceEndpoint(srcPt153);\n    ConnEnd dstPt153(Point(487.924, 903.057), 15);\n    connRef153->setDestEndpoint(dstPt153);\n    connRef153->setRoutingType((ConnType)2);\n\n    ConnRef *connRef154 = new ConnRef(router, 154);\n    ConnEnd srcPt154(Point(317.924, 763.557), 15);\n    connRef154->setSourceEndpoint(srcPt154);\n    ConnEnd dstPt154(Point(727.924, 574.057), 15);\n    connRef154->setDestEndpoint(dstPt154);\n    connRef154->setRoutingType((ConnType)2);\n\n    ConnRef *connRef155 = new ConnRef(router, 155);\n    ConnEnd srcPt155(Point(557.924, 903.057), 15);\n    connRef155->setSourceEndpoint(srcPt155);\n    ConnEnd dstPt155(Point(607.924, 903.057), 15);\n    connRef155->setDestEndpoint(dstPt155);\n    connRef155->setRoutingType((ConnType)2);\n\n    ConnRef *connRef156 = new ConnRef(router, 156);\n    ConnEnd srcPt156(Point(197.924, 763.557), 15);\n    connRef156->setSourceEndpoint(srcPt156);\n    ConnEnd dstPt156(Point(247.924, 763.557), 15);\n    connRef156->setDestEndpoint(dstPt156);\n    connRef156->setRoutingType((ConnType)2);\n\n    ConnRef *connRef157 = new ConnRef(router, 157);\n    ConnEnd srcPt157(Point(147.924, 161.557), 15);\n    connRef157->setSourceEndpoint(srcPt157);\n    ConnEnd dstPt157(Point(197.924, 161.557), 15);\n    connRef157->setDestEndpoint(dstPt157);\n    connRef157->setRoutingType((ConnType)2);\n\n    ConnRef *connRef158 = new ConnRef(router, 158);\n    ConnEnd srcPt158(Point(197.924, 161.557), 15);\n    connRef158->setSourceEndpoint(srcPt158);\n    ConnEnd dstPt158(Point(247.924, 161.557), 15);\n    connRef158->setDestEndpoint(dstPt158);\n    connRef158->setRoutingType((ConnType)2);\n\n    ConnRef *connRef159 = new ConnRef(router, 159);\n    ConnEnd srcPt159(Point(197.924, 161.557), 15);\n    connRef159->setSourceEndpoint(srcPt159);\n    ConnEnd dstPt159(Point(197.924, 203.557), 15);\n    connRef159->setDestEndpoint(dstPt159);\n    connRef159->setRoutingType((ConnType)2);\n\n    ConnRef *connRef160 = new ConnRef(router, 160);\n    ConnEnd srcPt160(Point(317.924, 161.557), 15);\n    connRef160->setSourceEndpoint(srcPt160);\n    ConnEnd dstPt160(Point(727.924, -60.6578), 15);\n    connRef160->setDestEndpoint(dstPt160);\n    connRef160->setRoutingType((ConnType)2);\n\n    ConnRef *connRef161 = new ConnRef(router, 161);\n    ConnEnd srcPt161(Point(317.924, 161.557), 15);\n    connRef161->setSourceEndpoint(srcPt161);\n    ConnEnd dstPt161(Point(367.924, 161.557), 15);\n    connRef161->setDestEndpoint(dstPt161);\n    connRef161->setRoutingType((ConnType)2);\n\n    ConnRef *connRef162 = new ConnRef(router, 162);\n    ConnEnd srcPt162(Point(317.924, 161.557), 15);\n    connRef162->setSourceEndpoint(srcPt162);\n    ConnEnd dstPt162(Point(367.924, 27.3422), 15);\n    connRef162->setDestEndpoint(dstPt162);\n    connRef162->setRoutingType((ConnType)2);\n\n    ConnRef *connRef163 = new ConnRef(router, 163);\n    ConnEnd srcPt163(Point(317.924, 161.557), 15);\n    connRef163->setSourceEndpoint(srcPt163);\n    ConnEnd dstPt163(Point(487.924, 435.557), 15);\n    connRef163->setDestEndpoint(dstPt163);\n    connRef163->setRoutingType((ConnType)2);\n\n    ConnRef *connRef164 = new ConnRef(router, 164);\n    ConnEnd srcPt164(Point(437.924, 763.557), 15);\n    connRef164->setSourceEndpoint(srcPt164);\n    ConnEnd dstPt164(Point(487.924, 763.557), 15);\n    connRef164->setDestEndpoint(dstPt164);\n    connRef164->setRoutingType((ConnType)2);\n\n    ConnRef *connRef165 = new ConnRef(router, 165);\n    ConnEnd srcPt165(Point(437.924, 763.557), 15);\n    connRef165->setSourceEndpoint(srcPt165);\n    ConnEnd dstPt165(Point(727.924, 860.057), 15);\n    connRef165->setDestEndpoint(dstPt165);\n    connRef165->setRoutingType((ConnType)2);\n\n    ConnRef *connRef166 = new ConnRef(router, 166);\n    ConnEnd srcPt166(Point(557.924, 527.557), 15);\n    connRef166->setSourceEndpoint(srcPt166);\n    ConnEnd dstPt166(Point(607.924, 527.557), 15);\n    connRef166->setDestEndpoint(dstPt166);\n    connRef166->setRoutingType((ConnType)2);\n\n    ConnRef *connRef167 = new ConnRef(router, 167);\n    ConnEnd srcPt167(Point(797.924, 343.557), 15);\n    connRef167->setSourceEndpoint(srcPt167);\n    ConnEnd dstPt167(Point(847.924, 343.557), 15);\n    connRef167->setDestEndpoint(dstPt167);\n    connRef167->setRoutingType((ConnType)2);\n\n    ConnRef *connRef168 = new ConnRef(router, 168);\n    ConnEnd srcPt168(Point(797.924, 343.557), 15);\n    connRef168->setSourceEndpoint(srcPt168);\n    ConnEnd dstPt168(Point(847.924, 435.557), 15);\n    connRef168->setDestEndpoint(dstPt168);\n    connRef168->setRoutingType((ConnType)2);\n\n    ConnRef *connRef169 = new ConnRef(router, 169);\n    ConnEnd srcPt169(Point(1018.92, 435.557), 15);\n    connRef169->setSourceEndpoint(srcPt169);\n    ConnEnd dstPt169(Point(1068.92, 388.557), 15);\n    connRef169->setDestEndpoint(dstPt169);\n    connRef169->setRoutingType((ConnType)2);\n\n    ConnRef *connRef170 = new ConnRef(router, 170);\n    ConnEnd srcPt170(Point(1018.92, 161.557), 15);\n    connRef170->setSourceEndpoint(srcPt170);\n    ConnEnd dstPt170(Point(1068.92, 152.342), 15);\n    connRef170->setDestEndpoint(dstPt170);\n    connRef170->setRoutingType((ConnType)2);\n\n    ConnRef *connRef171 = new ConnRef(router, 171);\n    ConnEnd srcPt171(Point(1018.92, 161.557), 15);\n    connRef171->setSourceEndpoint(srcPt171);\n    ConnEnd dstPt171(Point(1068.92, 60.3422), 15);\n    connRef171->setDestEndpoint(dstPt171);\n    connRef171->setRoutingType((ConnType)2);\n\n    ConnRef *connRef172 = new ConnRef(router, 172);\n    ConnEnd srcPt172(Point(267.924, 315.557), 15);\n    connRef172->setSourceEndpoint(srcPt172);\n    ConnEnd dstPt172(Point(437.924, 161.557), 15);\n    connRef172->setDestEndpoint(dstPt172);\n    connRef172->setRoutingType((ConnType)2);\n\n    ConnRef *connRef173 = new ConnRef(router, 173);\n    ConnEnd srcPt173(Point(437.924, 161.557), 15);\n    connRef173->setSourceEndpoint(srcPt173);\n    ConnEnd dstPt173(Point(487.924, 45.8422), 15);\n    connRef173->setDestEndpoint(dstPt173);\n    connRef173->setRoutingType((ConnType)2);\n\n    ConnRef *connRef174 = new ConnRef(router, 174);\n    ConnEnd srcPt174(Point(437.924, 161.557), 15);\n    connRef174->setSourceEndpoint(srcPt174);\n    ConnEnd dstPt174(Point(727.924, 161.557), 15);\n    connRef174->setDestEndpoint(dstPt174);\n    connRef174->setRoutingType((ConnType)2);\n\n    ConnRef *connRef175 = new ConnRef(router, 175);\n    ConnEnd srcPt175(Point(77.9242, 161.557), 15);\n    connRef175->setSourceEndpoint(srcPt175);\n    ConnEnd dstPt175(Point(127.924, 161.557), 15);\n    connRef175->setDestEndpoint(dstPt175);\n    connRef175->setRoutingType((ConnType)2);\n\n    ConnRef *connRef176 = new ConnRef(router, 176);\n    ConnEnd srcPt176(Point(77.9242, 161.557), 15);\n    connRef176->setSourceEndpoint(srcPt176);\n    ConnEnd dstPt176(Point(77.9242, 357.557), 15);\n    connRef176->setDestEndpoint(dstPt176);\n    connRef176->setRoutingType((ConnType)2);\n\n    ConnRef *connRef177 = new ConnRef(router, 177);\n    ConnEnd srcPt177(Point(557.924, 763.557), 15);\n    connRef177->setSourceEndpoint(srcPt177);\n    ConnEnd dstPt177(Point(607.924, 763.557), 15);\n    connRef177->setDestEndpoint(dstPt177);\n    connRef177->setRoutingType((ConnType)2);\n\n    ConnRef *connRef178 = new ConnRef(router, 178);\n    ConnEnd srcPt178(Point(77.9242, 527.557), 15);\n    connRef178->setSourceEndpoint(srcPt178);\n    ConnEnd dstPt178(Point(127.924, 527.557), 15);\n    connRef178->setDestEndpoint(dstPt178);\n    connRef178->setRoutingType((ConnType)2);\n\n    ConnRef *connRef179 = new ConnRef(router, 179);\n    ConnEnd srcPt179(Point(557.924, 54.8422), 15);\n    connRef179->setSourceEndpoint(srcPt179);\n    ConnEnd dstPt179(Point(607.924, 45.8422), 15);\n    connRef179->setDestEndpoint(dstPt179);\n    connRef179->setRoutingType((ConnType)2);\n\n    ConnRef *connRef180 = new ConnRef(router, 180);\n    ConnEnd srcPt180(Point(557.924, 435.557), 15);\n    connRef180->setSourceEndpoint(srcPt180);\n    ConnEnd dstPt180(Point(607.924, 435.557), 15);\n    connRef180->setDestEndpoint(dstPt180);\n    connRef180->setRoutingType((ConnType)2);\n\n    ConnRef *connRef181 = new ConnRef(router, 181);\n    ConnEnd srcPt181(Point(77.9242, 763.557), 15);\n    connRef181->setSourceEndpoint(srcPt181);\n    ConnEnd dstPt181(Point(77.9242, 671.557), 15);\n    connRef181->setDestEndpoint(dstPt181);\n    connRef181->setRoutingType((ConnType)2);\n\n    ConnRef *connRef182 = new ConnRef(router, 182);\n    ConnEnd srcPt182(Point(77.9242, 763.557), 15);\n    connRef182->setSourceEndpoint(srcPt182);\n    ConnEnd dstPt182(Point(127.924, 763.557), 15);\n    connRef182->setDestEndpoint(dstPt182);\n    connRef182->setRoutingType((ConnType)2);\n\n    ConnRef *connRef183 = new ConnRef(router, 183);\n    ConnEnd srcPt183(Point(197.924, 315.557), 15);\n    connRef183->setSourceEndpoint(srcPt183);\n    ConnEnd dstPt183(Point(247.924, 315.557), 15);\n    connRef183->setDestEndpoint(dstPt183);\n    connRef183->setRoutingType((ConnType)2);\n\n    ConnRef *connRef184 = new ConnRef(router, 184);\n    ConnEnd srcPt184(Point(677.924, 343.557), 15);\n    connRef184->setSourceEndpoint(srcPt184);\n    ConnEnd dstPt184(Point(727.924, 343.557), 15);\n    connRef184->setDestEndpoint(dstPt184);\n    connRef184->setRoutingType((ConnType)2);\n\n    ConnRef *connRef185 = new ConnRef(router, 185);\n    ConnEnd srcPt185(Point(797.924, 161.557), 15);\n    connRef185->setSourceEndpoint(srcPt185);\n    ConnEnd dstPt185(Point(847.924, 161.557), 15);\n    connRef185->setDestEndpoint(dstPt185);\n    connRef185->setRoutingType((ConnType)2);\n\n    ConnRef *connRef186 = new ConnRef(router, 186);\n    ConnEnd srcPt186(Point(77.9242, 34.8422), 15);\n    connRef186->setSourceEndpoint(srcPt186);\n    ConnEnd dstPt186(Point(127.924, 34.8422), 15);\n    connRef186->setDestEndpoint(dstPt186);\n    connRef186->setRoutingType((ConnType)2);\n\n    ConnRef *connRef187 = new ConnRef(router, 187);\n    ConnEnd srcPt187(Point(437.924, 527.557), 15);\n    connRef187->setSourceEndpoint(srcPt187);\n    ConnEnd dstPt187(Point(487.924, 527.557), 15);\n    connRef187->setDestEndpoint(dstPt187);\n    connRef187->setRoutingType((ConnType)2);\n\n    ConnRef *connRef188 = new ConnRef(router, 188);\n    ConnEnd srcPt188(Point(77.9242, 619.557), 15);\n    connRef188->setSourceEndpoint(srcPt188);\n    ConnEnd dstPt188(Point(127.924, 619.557), 15);\n    connRef188->setDestEndpoint(dstPt188);\n    connRef188->setRoutingType((ConnType)2);\n\n    ConnRef *connRef189 = new ConnRef(router, 189);\n    ConnEnd srcPt189(Point(747.924, -60.6578), 15);\n    connRef189->setSourceEndpoint(srcPt189);\n    ConnEnd dstPt189(Point(797.924, -60.6578), 15);\n    connRef189->setDestEndpoint(dstPt189);\n    connRef189->setRoutingType((ConnType)2);\n\n    ConnRef *connRef190 = new ConnRef(router, 190);\n    ConnEnd srcPt190(Point(147.924, 34.8422), 15);\n    connRef190->setSourceEndpoint(srcPt190);\n    ConnEnd dstPt190(Point(197.924, 161.557), 15);\n    connRef190->setDestEndpoint(dstPt190);\n    connRef190->setRoutingType((ConnType)2);\n\n    ConnRef *connRef191 = new ConnRef(router, 191);\n    ConnEnd srcPt191(Point(267.924, 161.557), 15);\n    connRef191->setSourceEndpoint(srcPt191);\n    ConnEnd dstPt191(Point(317.924, 161.557), 15);\n    connRef191->setDestEndpoint(dstPt191);\n    connRef191->setRoutingType((ConnType)2);\n\n    ConnRef *connRef192 = new ConnRef(router, 192);\n    ConnEnd srcPt192(Point(197.924, 223.557), 15);\n    connRef192->setSourceEndpoint(srcPt192);\n    ConnEnd dstPt192(Point(197.924, 315.557), 15);\n    connRef192->setDestEndpoint(dstPt192);\n    connRef192->setRoutingType((ConnType)2);\n\n    ConnRef *connRef193 = new ConnRef(router, 193);\n    ConnEnd srcPt193(Point(77.9242, 377.557), 15);\n    connRef193->setSourceEndpoint(srcPt193);\n    ConnEnd dstPt193(Point(77.9242, 527.557), 15);\n    connRef193->setDestEndpoint(dstPt193);\n    connRef193->setRoutingType((ConnType)2);\n\n    ConnRef *connRef194 = new ConnRef(router, 194);\n    ConnEnd srcPt194(Point(147.924, 527.557), 15);\n    connRef194->setSourceEndpoint(srcPt194);\n    ConnEnd dstPt194(Point(197.924, 527.557), 15);\n    connRef194->setDestEndpoint(dstPt194);\n    connRef194->setRoutingType((ConnType)2);\n\n    ConnRef *connRef195 = new ConnRef(router, 195);\n    ConnEnd srcPt195(Point(147.924, 619.557), 15);\n    connRef195->setSourceEndpoint(srcPt195);\n    ConnEnd dstPt195(Point(197.924, 763.557), 15);\n    connRef195->setDestEndpoint(dstPt195);\n    connRef195->setRoutingType((ConnType)2);\n\n    ConnRef *connRef196 = new ConnRef(router, 196);\n    ConnEnd srcPt196(Point(77.9242, 651.557), 15);\n    connRef196->setSourceEndpoint(srcPt196);\n    ConnEnd dstPt196(Point(77.9242, 619.557), 15);\n    connRef196->setDestEndpoint(dstPt196);\n    connRef196->setRoutingType((ConnType)2);\n\n    ConnRef *connRef197 = new ConnRef(router, 197);\n    ConnEnd srcPt197(Point(147.924, 763.557), 15);\n    connRef197->setSourceEndpoint(srcPt197);\n    ConnEnd dstPt197(Point(197.924, 763.557), 15);\n    connRef197->setDestEndpoint(dstPt197);\n    connRef197->setRoutingType((ConnType)2);\n\n    ConnRef *connRef198 = new ConnRef(router, 198);\n    ConnEnd srcPt198(Point(267.924, 763.557), 15);\n    connRef198->setSourceEndpoint(srcPt198);\n    ConnEnd dstPt198(Point(317.924, 763.557), 15);\n    connRef198->setDestEndpoint(dstPt198);\n    connRef198->setRoutingType((ConnType)2);\n\n    ConnRef *connRef199 = new ConnRef(router, 199);\n    ConnEnd srcPt199(Point(387.924, 627.557), 15);\n    connRef199->setSourceEndpoint(srcPt199);\n    ConnEnd dstPt199(Point(437.924, 627.557), 15);\n    connRef199->setDestEndpoint(dstPt199);\n    connRef199->setRoutingType((ConnType)2);\n\n    ConnRef *connRef200 = new ConnRef(router, 200);\n    ConnEnd srcPt200(Point(387.924, 763.557), 15);\n    connRef200->setSourceEndpoint(srcPt200);\n    ConnEnd dstPt200(Point(437.924, 763.557), 15);\n    connRef200->setDestEndpoint(dstPt200);\n    connRef200->setRoutingType((ConnType)2);\n\n    ConnRef *connRef201 = new ConnRef(router, 201);\n    ConnEnd srcPt201(Point(507.924, 763.557), 15);\n    connRef201->setSourceEndpoint(srcPt201);\n    ConnEnd dstPt201(Point(557.924, 763.557), 15);\n    connRef201->setDestEndpoint(dstPt201);\n    connRef201->setRoutingType((ConnType)2);\n\n    ConnRef *connRef202 = new ConnRef(router, 202);\n    ConnEnd srcPt202(Point(627.924, 763.557), 15);\n    connRef202->setSourceEndpoint(srcPt202);\n    ConnEnd dstPt202(Point(677.924, 763.557), 15);\n    connRef202->setDestEndpoint(dstPt202);\n    connRef202->setRoutingType((ConnType)2);\n\n    ConnRef *connRef203 = new ConnRef(router, 203);\n    ConnEnd srcPt203(Point(507.924, 903.057), 15);\n    connRef203->setSourceEndpoint(srcPt203);\n    ConnEnd dstPt203(Point(557.924, 903.057), 15);\n    connRef203->setDestEndpoint(dstPt203);\n    connRef203->setRoutingType((ConnType)2);\n\n    ConnRef *connRef204 = new ConnRef(router, 204);\n    ConnEnd srcPt204(Point(627.924, 903.057), 15);\n    connRef204->setSourceEndpoint(srcPt204);\n    ConnEnd dstPt204(Point(677.924, 903.057), 15);\n    connRef204->setDestEndpoint(dstPt204);\n    connRef204->setRoutingType((ConnType)2);\n\n    ConnRef *connRef205 = new ConnRef(router, 205);\n    ConnEnd srcPt205(Point(387.924, 161.557), 15);\n    connRef205->setSourceEndpoint(srcPt205);\n    ConnEnd dstPt205(Point(437.924, 161.557), 15);\n    connRef205->setDestEndpoint(dstPt205);\n    connRef205->setRoutingType((ConnType)2);\n\n    ConnRef *connRef206 = new ConnRef(router, 206);\n    ConnEnd srcPt206(Point(387.924, 27.3422), 15);\n    connRef206->setSourceEndpoint(srcPt206);\n    ConnEnd dstPt206(Point(437.924, 27.3422), 15);\n    connRef206->setDestEndpoint(dstPt206);\n    connRef206->setRoutingType((ConnType)2);\n\n    ConnRef *connRef207 = new ConnRef(router, 207);\n    ConnEnd srcPt207(Point(507.924, 45.8422), 15);\n    connRef207->setSourceEndpoint(srcPt207);\n    ConnEnd dstPt207(Point(557.924, 54.8422), 15);\n    connRef207->setDestEndpoint(dstPt207);\n    connRef207->setRoutingType((ConnType)2);\n\n    ConnRef *connRef208 = new ConnRef(router, 208);\n    ConnEnd srcPt208(Point(627.924, 45.8422), 15);\n    connRef208->setSourceEndpoint(srcPt208);\n    ConnEnd dstPt208(Point(677.924, 54.8422), 15);\n    connRef208->setDestEndpoint(dstPt208);\n    connRef208->setRoutingType((ConnType)2);\n\n    ConnRef *connRef209 = new ConnRef(router, 209);\n    ConnEnd srcPt209(Point(747.924, 574.057), 15);\n    connRef209->setSourceEndpoint(srcPt209);\n    ConnEnd dstPt209(Point(797.924, 574.057), 15);\n    connRef209->setDestEndpoint(dstPt209);\n    connRef209->setRoutingType((ConnType)2);\n\n    ConnRef *connRef210 = new ConnRef(router, 210);\n    ConnEnd srcPt210(Point(507.924, 527.557), 15);\n    connRef210->setSourceEndpoint(srcPt210);\n    ConnEnd dstPt210(Point(557.924, 527.557), 15);\n    connRef210->setDestEndpoint(dstPt210);\n    connRef210->setRoutingType((ConnType)2);\n\n    router->processTransaction();\n    router->outputDiagram(\"output/lineSegWrapperCrash5\");\n    delete router;\n    return 0;\n};\n"
  },
  {
    "path": "cola/libavoid/tests/lineSegWrapperCrash6.cpp",
    "content": "#include \"libavoid/libavoid.h\"\nusing namespace Avoid;\nint main(void) {\n    Router *router = new Router(OrthogonalRouting);\n    router->setRoutingPenalty((PenaltyType)0, 50);\n    router->setRoutingPenalty((PenaltyType)1, 0);\n    router->setRoutingPenalty((PenaltyType)2, 0);\n    router->setRoutingPenalty((PenaltyType)3, 4000);\n    router->setRoutingPenalty((PenaltyType)4, 0);\n\n    Polygon poly121(4);\n    poly121.ps[0] = Point(645.924, 693.557);\n    poly121.ps[1] = Point(645.924, 733.557);\n    poly121.ps[2] = Point(589.924, 733.557);\n    poly121.ps[3] = Point(589.924, 693.557);\n    new ShapeRef(router, poly121, 121);\n    \n    Polygon poly30(4);\n    poly30.ps[0] = Point(1278.92, 415.557);\n    poly30.ps[1] = Point(1278.92, 455.557);\n    poly30.ps[2] = Point(1238.92, 455.557);\n    poly30.ps[3] = Point(1238.92, 415.557);\n    new ShapeRef(router, poly30, 30);\n    \n    Polygon poly29(4);\n    poly29.ps[0] = Point(1038.92, 415.557);\n    poly29.ps[1] = Point(1038.92, 455.557);\n    poly29.ps[2] = Point(998.924, 455.557);\n    poly29.ps[3] = Point(998.924, 415.557);\n    new ShapeRef(router, poly29, 29);\n    \n    Polygon poly32(4);\n    poly32.ps[0] = Point(1038.92, 141.557);\n    poly32.ps[1] = Point(1038.92, 181.557);\n    poly32.ps[2] = Point(998.924, 181.557);\n    poly32.ps[3] = Point(998.924, 141.557);\n    new ShapeRef(router, poly32, 32);\n    \n    Polygon poly34(4);\n    poly34.ps[0] = Point(1278.92, 323.557);\n    poly34.ps[1] = Point(1278.92, 363.557);\n    poly34.ps[2] = Point(1238.92, 363.557);\n    poly34.ps[3] = Point(1238.92, 323.557);\n    new ShapeRef(router, poly34, 34);\n    \n    Polygon poly134(4);\n    poly134.ps[0] = Point(885.924, 365.557);\n    poly134.ps[1] = Point(885.924, 405.557);\n    poly134.ps[2] = Point(829.924, 405.557);\n    poly134.ps[3] = Point(829.924, 365.557);\n    new ShapeRef(router, poly134, 134);\n    \n    Polygon poly51(4);\n    poly51.ps[0] = Point(1038.92, 323.557);\n    poly51.ps[1] = Point(1038.92, 363.557);\n    poly51.ps[2] = Point(998.924, 363.557);\n    poly51.ps[3] = Point(998.924, 323.557);\n    new ShapeRef(router, poly51, 51);\n    \n    Polygon poly45(4);\n    poly45.ps[0] = Point(577.924, 34.8422);\n    poly45.ps[1] = Point(577.924, 74.8422);\n    poly45.ps[2] = Point(537.924, 74.8422);\n    poly45.ps[3] = Point(537.924, 34.8422);\n    new ShapeRef(router, poly45, 45);\n    \n    Polygon poly141(4);\n    poly141.ps[0] = Point(1226.92, 82.3422);\n    poly141.ps[1] = Point(1226.92, 122.342);\n    poly141.ps[2] = Point(1170.92, 122.342);\n    poly141.ps[3] = Point(1170.92, 82.3422);\n    new ShapeRef(router, poly141, 141);\n    \n    Polygon poly33(4);\n    poly33.ps[0] = Point(937.924, 415.557);\n    poly33.ps[1] = Point(937.924, 455.557);\n    poly33.ps[2] = Point(897.924, 455.557);\n    poly33.ps[3] = Point(897.924, 415.557);\n    new ShapeRef(router, poly33, 33);\n    \n    Polygon poly46(4);\n    poly46.ps[0] = Point(577.924, 415.557);\n    poly46.ps[1] = Point(577.924, 455.557);\n    poly46.ps[2] = Point(537.924, 455.557);\n    poly46.ps[3] = Point(537.924, 415.557);\n    new ShapeRef(router, poly46, 46);\n    \n    Polygon poly31(4);\n    poly31.ps[0] = Point(1278.92, 141.557);\n    poly31.ps[1] = Point(1278.92, 181.557);\n    poly31.ps[2] = Point(1238.92, 181.557);\n    poly31.ps[3] = Point(1238.92, 141.557);\n    new ShapeRef(router, poly31, 31);\n    \n    Polygon poly100(4);\n    poly100.ps[0] = Point(1088.92, 50.3422);\n    poly100.ps[1] = Point(1088.92, 70.3422);\n    poly100.ps[2] = Point(1068.92, 70.3422);\n    poly100.ps[3] = Point(1068.92, 50.3422);\n    new ShapeRef(router, poly100, 100);\n    \n    Polygon poly27(4);\n    poly27.ps[0] = Point(577.924, 507.557);\n    poly27.ps[1] = Point(577.924, 547.557);\n    poly27.ps[2] = Point(537.924, 547.557);\n    poly27.ps[3] = Point(537.924, 507.557);\n    new ShapeRef(router, poly27, 27);\n    \n    Polygon poly21(4);\n    poly21.ps[0] = Point(937.924, 141.557);\n    poly21.ps[1] = Point(937.924, 181.557);\n    poly21.ps[2] = Point(897.924, 181.557);\n    poly21.ps[3] = Point(897.924, 141.557);\n    new ShapeRef(router, poly21, 21);\n    \n    Polygon poly82(4);\n    poly82.ps[0] = Point(507.924, 893.057);\n    poly82.ps[1] = Point(507.924, 913.057);\n    poly82.ps[2] = Point(487.924, 913.057);\n    poly82.ps[3] = Point(487.924, 893.057);\n    new ShapeRef(router, poly82, 82);\n    \n    Polygon poly123(4);\n    poly123.ps[0] = Point(645.924, 833.057);\n    poly123.ps[1] = Point(645.924, 873.057);\n    poly123.ps[2] = Point(589.924, 873.057);\n    poly123.ps[3] = Point(589.924, 833.057);\n    new ShapeRef(router, poly123, 123);\n    \n    Polygon poly86(4);\n    poly86.ps[0] = Point(507.924, 35.8422);\n    poly86.ps[1] = Point(507.924, 55.8422);\n    poly86.ps[2] = Point(487.924, 55.8422);\n    poly86.ps[3] = Point(487.924, 35.8422);\n    new ShapeRef(router, poly86, 86);\n    \n    Polygon poly23(4);\n    poly23.ps[0] = Point(337.924, 141.557);\n    poly23.ps[1] = Point(337.924, 181.557);\n    poly23.ps[2] = Point(297.924, 181.557);\n    poly23.ps[3] = Point(297.924, 141.557);\n    new ShapeRef(router, poly23, 23);\n    \n    Polygon poly28(4);\n    poly28.ps[0] = Point(817.924, 323.557);\n    poly28.ps[1] = Point(817.924, 363.557);\n    poly28.ps[2] = Point(777.924, 363.557);\n    poly28.ps[3] = Point(777.924, 323.557);\n    new ShapeRef(router, poly28, 28);\n    \n    Polygon poly20(4);\n    poly20.ps[0] = Point(337.924, 507.557);\n    poly20.ps[1] = Point(337.924, 547.557);\n    poly20.ps[2] = Point(297.924, 547.557);\n    poly20.ps[3] = Point(297.924, 507.557);\n    new ShapeRef(router, poly20, 20);\n    \n    Polygon poly19(4);\n    poly19.ps[0] = Point(217.924, 141.557);\n    poly19.ps[1] = Point(217.924, 181.557);\n    poly19.ps[2] = Point(177.924, 181.557);\n    poly19.ps[3] = Point(177.924, 141.557);\n    new ShapeRef(router, poly19, 19);\n    \n    Polygon poly59(4);\n    poly59.ps[0] = Point(937.924, 323.557);\n    poly59.ps[1] = Point(937.924, 363.557);\n    poly59.ps[2] = Point(897.924, 363.557);\n    poly59.ps[3] = Point(897.924, 323.557);\n    new ShapeRef(router, poly59, 59);\n    \n    Polygon poly60(4);\n    poly60.ps[0] = Point(937.924, 1.84222);\n    poly60.ps[1] = Point(937.924, 41.8422);\n    poly60.ps[2] = Point(897.924, 41.8422);\n    poly60.ps[3] = Point(897.924, 1.84222);\n    new ShapeRef(router, poly60, 60);\n    \n    Polygon poly18(4);\n    poly18.ps[0] = Point(217.924, 743.557);\n    poly18.ps[1] = Point(217.924, 783.557);\n    poly18.ps[2] = Point(177.924, 783.557);\n    poly18.ps[3] = Point(177.924, 743.557);\n    new ShapeRef(router, poly18, 18);\n    \n    Polygon poly108(4);\n    poly108.ps[0] = Point(165.924, 91.5565);\n    poly108.ps[1] = Point(165.924, 131.557);\n    poly108.ps[2] = Point(109.924, 131.557);\n    poly108.ps[3] = Point(109.924, 91.5565);\n    new ShapeRef(router, poly108, 108);\n    \n    Polygon poly38(4);\n    poly38.ps[0] = Point(217.924, 507.557);\n    poly38.ps[1] = Point(217.924, 547.557);\n    poly38.ps[2] = Point(177.924, 547.557);\n    poly38.ps[3] = Point(177.924, 507.557);\n    new ShapeRef(router, poly38, 38);\n    \n    Polygon poly17(4);\n    poly17.ps[0] = Point(577.924, 883.057);\n    poly17.ps[1] = Point(577.924, 923.057);\n    poly17.ps[2] = Point(537.924, 923.057);\n    poly17.ps[3] = Point(537.924, 883.057);\n    new ShapeRef(router, poly17, 17);\n    \n    Polygon poly129(4);\n    poly129.ps[0] = Point(525.924, 457.557);\n    poly129.ps[1] = Point(525.924, 497.557);\n    poly129.ps[2] = Point(469.924, 497.557);\n    poly129.ps[3] = Point(469.924, 457.557);\n    new ShapeRef(router, poly129, 129);\n    \n    Polygon poly24(4);\n    poly24.ps[0] = Point(457.924, 743.557);\n    poly24.ps[1] = Point(457.924, 783.557);\n    poly24.ps[2] = Point(417.924, 783.557);\n    poly24.ps[3] = Point(417.924, 743.557);\n    new ShapeRef(router, poly24, 24);\n    \n    Polygon poly94(4);\n    poly94.ps[0] = Point(867.924, 425.557);\n    poly94.ps[1] = Point(867.924, 445.557);\n    poly94.ps[2] = Point(847.924, 445.557);\n    poly94.ps[3] = Point(847.924, 425.557);\n    new ShapeRef(router, poly94, 94);\n    \n    Polygon poly16(4);\n    poly16.ps[0] = Point(337.924, 743.557);\n    poly16.ps[1] = Point(337.924, 783.557);\n    poly16.ps[2] = Point(297.924, 783.557);\n    poly16.ps[3] = Point(297.924, 743.557);\n    new ShapeRef(router, poly16, 16);\n    \n    Polygon poly15(4);\n    poly15.ps[0] = Point(1158.92, 415.557);\n    poly15.ps[1] = Point(1158.92, 455.557);\n    poly15.ps[2] = Point(1118.92, 455.557);\n    poly15.ps[3] = Point(1118.92, 415.557);\n    new ShapeRef(router, poly15, 15);\n    \n    Polygon poly81(4);\n    poly81.ps[0] = Point(627.924, 753.557);\n    poly81.ps[1] = Point(627.924, 773.557);\n    poly81.ps[2] = Point(607.924, 773.557);\n    poly81.ps[3] = Point(607.924, 753.557);\n    new ShapeRef(router, poly81, 81);\n    \n    Polygon poly44(4);\n    poly44.ps[0] = Point(97.9242, 507.557);\n    poly44.ps[1] = Point(97.9242, 547.557);\n    poly44.ps[2] = Point(57.9242, 547.557);\n    poly44.ps[3] = Point(57.9242, 507.557);\n    new ShapeRef(router, poly44, 44);\n    \n    Polygon poly56(4);\n    poly56.ps[0] = Point(457.924, -44.6578);\n    poly56.ps[1] = Point(457.924, -4.65778);\n    poly56.ps[2] = Point(417.924, -4.65778);\n    poly56.ps[3] = Point(417.924, -44.6578);\n    new ShapeRef(router, poly56, 56);\n    \n    Polygon poly90(4);\n    poly90.ps[0] = Point(507.924, 425.557);\n    poly90.ps[1] = Point(507.924, 445.557);\n    poly90.ps[2] = Point(487.924, 445.557);\n    poly90.ps[3] = Point(487.924, 425.557);\n    new ShapeRef(router, poly90, 90);\n    \n    Polygon poly113(4);\n    poly113.ps[0] = Point(165.924, 457.557);\n    poly113.ps[1] = Point(165.924, 497.557);\n    poly113.ps[2] = Point(109.924, 497.557);\n    poly113.ps[3] = Point(109.924, 457.557);\n    new ShapeRef(router, poly113, 113);\n    \n    Polygon poly4(4);\n    poly4.ps[0] = Point(1371.92, 29.8422);\n    poly4.ps[1] = Point(1371.92, 69.8422);\n    poly4.ps[2] = Point(1331.92, 69.8422);\n    poly4.ps[3] = Point(1331.92, 29.8422);\n    new ShapeRef(router, poly4, 4);\n    \n    Polygon poly83(4);\n    poly83.ps[0] = Point(627.924, 893.057);\n    poly83.ps[1] = Point(627.924, 913.057);\n    poly83.ps[2] = Point(607.924, 913.057);\n    poly83.ps[3] = Point(607.924, 893.057);\n    new ShapeRef(router, poly83, 83);\n    \n    Polygon poly130(4);\n    poly130.ps[0] = Point(525.924, 365.557);\n    poly130.ps[1] = Point(525.924, 405.557);\n    poly130.ps[2] = Point(469.924, 405.557);\n    poly130.ps[3] = Point(469.924, 365.557);\n    new ShapeRef(router, poly130, 130);\n    \n    Polygon poly133(4);\n    poly133.ps[0] = Point(885.924, 273.557);\n    poly133.ps[1] = Point(885.924, 313.557);\n    poly133.ps[2] = Point(829.924, 313.557);\n    poly133.ps[3] = Point(829.924, 273.557);\n    new ShapeRef(router, poly133, 133);\n    \n    Polygon poly48(4);\n    poly48.ps[0] = Point(97.9242, 743.557);\n    poly48.ps[1] = Point(97.9242, 783.557);\n    poly48.ps[2] = Point(57.9242, 783.557);\n    poly48.ps[3] = Point(57.9242, 743.557);\n    new ShapeRef(router, poly48, 48);\n    \n    Polygon poly115(4);\n    poly115.ps[0] = Point(167.924, 641.557);\n    poly115.ps[1] = Point(167.924, 681.557);\n    poly115.ps[2] = Point(111.924, 681.557);\n    poly115.ps[3] = Point(111.924, 641.557);\n    new ShapeRef(router, poly115, 115);\n    \n    Polygon poly73(4);\n    poly73.ps[0] = Point(147.924, 517.557);\n    poly73.ps[1] = Point(147.924, 537.557);\n    poly73.ps[2] = Point(127.924, 537.557);\n    poly73.ps[3] = Point(127.924, 517.557);\n    new ShapeRef(router, poly73, 73);\n    \n    Polygon poly119(4);\n    poly119.ps[0] = Point(405.924, 693.557);\n    poly119.ps[1] = Point(405.924, 733.557);\n    poly119.ps[2] = Point(349.924, 733.557);\n    poly119.ps[3] = Point(349.924, 693.557);\n    new ShapeRef(router, poly119, 119);\n    \n    Polygon poly70(4);\n    poly70.ps[0] = Point(207.924, 203.557);\n    poly70.ps[1] = Point(207.924, 223.557);\n    poly70.ps[2] = Point(187.924, 223.557);\n    poly70.ps[3] = Point(187.924, 203.557);\n    new ShapeRef(router, poly70, 70);\n    \n    Polygon poly116(4);\n    poly116.ps[0] = Point(165.924, 693.557);\n    poly116.ps[1] = Point(165.924, 733.557);\n    poly116.ps[2] = Point(109.924, 733.557);\n    poly116.ps[3] = Point(109.924, 693.557);\n    new ShapeRef(router, poly116, 116);\n    \n    Polygon poly64(4);\n    poly64.ps[0] = Point(817.924, 554.057);\n    poly64.ps[1] = Point(817.924, 594.057);\n    poly64.ps[2] = Point(777.924, 594.057);\n    poly64.ps[3] = Point(777.924, 554.057);\n    new ShapeRef(router, poly64, 64);\n    \n    Polygon poly61(4);\n    poly61.ps[0] = Point(577.924, -44.6578);\n    poly61.ps[1] = Point(577.924, -4.65778);\n    poly61.ps[2] = Point(537.924, -4.65778);\n    poly61.ps[3] = Point(537.924, -44.6578);\n    new ShapeRef(router, poly61, 61);\n    \n    Polygon poly93(4);\n    poly93.ps[0] = Point(867.924, 333.557);\n    poly93.ps[1] = Point(867.924, 353.557);\n    poly93.ps[2] = Point(847.924, 353.557);\n    poly93.ps[3] = Point(847.924, 333.557);\n    new ShapeRef(router, poly93, 93);\n    \n    Polygon poly67(4);\n    poly67.ps[0] = Point(147.924, 24.8422);\n    poly67.ps[1] = Point(147.924, 44.8422);\n    poly67.ps[2] = Point(127.924, 44.8422);\n    poly67.ps[3] = Point(127.924, 24.8422);\n    new ShapeRef(router, poly67, 67);\n    \n    Polygon poly74(4);\n    poly74.ps[0] = Point(147.924, 609.557);\n    poly74.ps[1] = Point(147.924, 629.557);\n    poly74.ps[2] = Point(127.924, 629.557);\n    poly74.ps[3] = Point(127.924, 609.557);\n    new ShapeRef(router, poly74, 74);\n    \n    Polygon poly35(4);\n    poly35.ps[0] = Point(1158.92, 40.3422);\n    poly35.ps[1] = Point(1158.92, 80.3422);\n    poly35.ps[2] = Point(1118.92, 80.3422);\n    poly35.ps[3] = Point(1118.92, 40.3422);\n    new ShapeRef(router, poly35, 35);\n    \n    Polygon poly136(4);\n    poly136.ps[0] = Point(765.924, 273.557);\n    poly136.ps[1] = Point(765.924, 313.557);\n    poly136.ps[2] = Point(709.924, 313.557);\n    poly136.ps[3] = Point(709.924, 273.557);\n    new ShapeRef(router, poly136, 136);\n    \n    Polygon poly120(4);\n    poly120.ps[0] = Point(525.924, 693.557);\n    poly120.ps[1] = Point(525.924, 733.557);\n    poly120.ps[2] = Point(469.924, 733.557);\n    poly120.ps[3] = Point(469.924, 693.557);\n    new ShapeRef(router, poly120, 120);\n    \n    Polygon poly71(4);\n    poly71.ps[0] = Point(267.924, 305.557);\n    poly71.ps[1] = Point(267.924, 325.557);\n    poly71.ps[2] = Point(247.924, 325.557);\n    poly71.ps[3] = Point(247.924, 305.557);\n    new ShapeRef(router, poly71, 71);\n    \n    Polygon poly79(4);\n    poly79.ps[0] = Point(387.924, 753.557);\n    poly79.ps[1] = Point(387.924, 773.557);\n    poly79.ps[2] = Point(367.924, 773.557);\n    poly79.ps[3] = Point(367.924, 753.557);\n    new ShapeRef(router, poly79, 79);\n    \n    Polygon poly72(4);\n    poly72.ps[0] = Point(87.9242, 357.557);\n    poly72.ps[1] = Point(87.9242, 377.557);\n    poly72.ps[2] = Point(67.9242, 377.557);\n    poly72.ps[3] = Point(67.9242, 357.557);\n    new ShapeRef(router, poly72, 72);\n    \n    Polygon poly66(4);\n    poly66.ps[0] = Point(747.924, -70.6578);\n    poly66.ps[1] = Point(747.924, -50.6578);\n    poly66.ps[2] = Point(727.924, -50.6578);\n    poly66.ps[3] = Point(727.924, -70.6578);\n    new ShapeRef(router, poly66, 66);\n    \n    Polygon poly75(4);\n    poly75.ps[0] = Point(87.9242, 651.557);\n    poly75.ps[1] = Point(87.9242, 671.557);\n    poly75.ps[2] = Point(67.9242, 671.557);\n    poly75.ps[3] = Point(67.9242, 651.557);\n    new ShapeRef(router, poly75, 75);\n    \n    Polygon poly3(4);\n    poly3.ps[0] = Point(1278.92, -22.1578);\n    poly3.ps[1] = Point(1278.92, 17.8422);\n    poly3.ps[2] = Point(1238.92, 17.8422);\n    poly3.ps[3] = Point(1238.92, -22.1578);\n    new ShapeRef(router, poly3, 3);\n    \n    Polygon poly117(4);\n    poly117.ps[0] = Point(285.924, 693.557);\n    poly117.ps[1] = Point(285.924, 733.557);\n    poly117.ps[2] = Point(229.924, 733.557);\n    poly117.ps[3] = Point(229.924, 693.557);\n    new ShapeRef(router, poly117, 117);\n    \n    Polygon poly97(4);\n    poly97.ps[0] = Point(1088.92, 378.557);\n    poly97.ps[1] = Point(1088.92, 398.557);\n    poly97.ps[2] = Point(1068.92, 398.557);\n    poly97.ps[3] = Point(1068.92, 378.557);\n    new ShapeRef(router, poly97, 97);\n    \n    Polygon poly41(4);\n    poly41.ps[0] = Point(577.924, 743.557);\n    poly41.ps[1] = Point(577.924, 783.557);\n    poly41.ps[2] = Point(537.924, 783.557);\n    poly41.ps[3] = Point(537.924, 743.557);\n    new ShapeRef(router, poly41, 41);\n    \n    Polygon poly101(4);\n    poly101.ps[0] = Point(1208.92, 142.342);\n    poly101.ps[1] = Point(1208.92, 162.342);\n    poly101.ps[2] = Point(1188.92, 162.342);\n    poly101.ps[3] = Point(1188.92, 142.342);\n    new ShapeRef(router, poly101, 101);\n    \n    Polygon poly77(4);\n    poly77.ps[0] = Point(267.924, 753.557);\n    poly77.ps[1] = Point(267.924, 773.557);\n    poly77.ps[2] = Point(247.924, 773.557);\n    poly77.ps[3] = Point(247.924, 753.557);\n    new ShapeRef(router, poly77, 77);\n    \n    Polygon poly53(4);\n    poly53.ps[0] = Point(577.924, 323.557);\n    poly53.ps[1] = Point(577.924, 363.557);\n    poly53.ps[2] = Point(537.924, 363.557);\n    poly53.ps[3] = Point(537.924, 323.557);\n    new ShapeRef(router, poly53, 53);\n    \n    Polygon poly106(4);\n    poly106.ps[0] = Point(765.924, -130.658);\n    poly106.ps[1] = Point(765.924, -90.6578);\n    poly106.ps[2] = Point(709.924, -90.6578);\n    poly106.ps[3] = Point(709.924, -130.658);\n    new ShapeRef(router, poly106, 106);\n    \n    Polygon poly80(4);\n    poly80.ps[0] = Point(507.924, 753.557);\n    poly80.ps[1] = Point(507.924, 773.557);\n    poly80.ps[2] = Point(487.924, 773.557);\n    poly80.ps[3] = Point(487.924, 753.557);\n    new ShapeRef(router, poly80, 80);\n    \n    Polygon poly88(4);\n    poly88.ps[0] = Point(747.924, 564.057);\n    poly88.ps[1] = Point(747.924, 584.057);\n    poly88.ps[2] = Point(727.924, 584.057);\n    poly88.ps[3] = Point(727.924, 564.057);\n    new ShapeRef(router, poly88, 88);\n    \n    Polygon poly36(4);\n    poly36.ps[0] = Point(697.924, 507.557);\n    poly36.ps[1] = Point(697.924, 547.557);\n    poly36.ps[2] = Point(657.924, 547.557);\n    poly36.ps[3] = Point(657.924, 507.557);\n    new ShapeRef(router, poly36, 36);\n    \n    Polygon poly98(4);\n    poly98.ps[0] = Point(1208.92, 378.557);\n    poly98.ps[1] = Point(1208.92, 398.557);\n    poly98.ps[2] = Point(1188.92, 398.557);\n    poly98.ps[3] = Point(1188.92, 378.557);\n    new ShapeRef(router, poly98, 98);\n    \n    Polygon poly63(4);\n    poly63.ps[0] = Point(457.924, 507.557);\n    poly63.ps[1] = Point(457.924, 547.557);\n    poly63.ps[2] = Point(417.924, 547.557);\n    poly63.ps[3] = Point(417.924, 507.557);\n    new ShapeRef(router, poly63, 63);\n    \n    Polygon poly111(4);\n    poly111.ps[0] = Point(285.924, 245.557);\n    poly111.ps[1] = Point(285.924, 285.557);\n    poly111.ps[2] = Point(229.924, 285.557);\n    poly111.ps[3] = Point(229.924, 245.557);\n    new ShapeRef(router, poly111, 111);\n    \n    Polygon poly110(4);\n    poly110.ps[0] = Point(287.924, 193.557);\n    poly110.ps[1] = Point(287.924, 233.557);\n    poly110.ps[2] = Point(231.924, 233.557);\n    poly110.ps[3] = Point(231.924, 193.557);\n    new ShapeRef(router, poly110, 110);\n    \n    Polygon poly69(4);\n    poly69.ps[0] = Point(267.924, 151.557);\n    poly69.ps[1] = Point(267.924, 171.557);\n    poly69.ps[2] = Point(247.924, 171.557);\n    poly69.ps[3] = Point(247.924, 151.557);\n    new ShapeRef(router, poly69, 69);\n    \n    Polygon poly139(4);\n    poly139.ps[0] = Point(1106.92, 82.3422);\n    poly139.ps[1] = Point(1106.92, 122.342);\n    poly139.ps[2] = Point(1050.92, 122.342);\n    poly139.ps[3] = Point(1050.92, 82.3422);\n    new ShapeRef(router, poly139, 139);\n    \n    Polygon poly22(4);\n    poly22.ps[0] = Point(697.924, 34.8422);\n    poly22.ps[1] = Point(697.924, 74.8422);\n    poly22.ps[2] = Point(657.924, 74.8422);\n    poly22.ps[3] = Point(657.924, 34.8422);\n    new ShapeRef(router, poly22, 22);\n    \n    Polygon poly14(4);\n    poly14.ps[0] = Point(1158.92, 141.557);\n    poly14.ps[1] = Point(1158.92, 181.557);\n    poly14.ps[2] = Point(1118.92, 181.557);\n    poly14.ps[3] = Point(1118.92, 141.557);\n    new ShapeRef(router, poly14, 14);\n    \n    Polygon poly13(4);\n    poly13.ps[0] = Point(1158.92, 323.557);\n    poly13.ps[1] = Point(1158.92, 363.557);\n    poly13.ps[2] = Point(1118.92, 363.557);\n    poly13.ps[3] = Point(1118.92, 323.557);\n    new ShapeRef(router, poly13, 13);\n    \n    Polygon poly65(4);\n    poly65.ps[0] = Point(97.9242, 599.557);\n    poly65.ps[1] = Point(97.9242, 639.557);\n    poly65.ps[2] = Point(57.9242, 639.557);\n    poly65.ps[3] = Point(57.9242, 599.557);\n    new ShapeRef(router, poly65, 65);\n    \n    Polygon poly131(4);\n    poly131.ps[0] = Point(645.924, 457.557);\n    poly131.ps[1] = Point(645.924, 497.557);\n    poly131.ps[2] = Point(589.924, 497.557);\n    poly131.ps[3] = Point(589.924, 457.557);\n    new ShapeRef(router, poly131, 131);\n    \n    Polygon poly99(4);\n    poly99.ps[0] = Point(1088.92, 142.342);\n    poly99.ps[1] = Point(1088.92, 162.342);\n    poly99.ps[2] = Point(1068.92, 162.342);\n    poly99.ps[3] = Point(1068.92, 142.342);\n    new ShapeRef(router, poly99, 99);\n    \n    Polygon poly5(4);\n    poly5.ps[0] = Point(1371.92, -22.1578);\n    poly5.ps[1] = Point(1371.92, 17.8422);\n    poly5.ps[2] = Point(1331.92, 17.8422);\n    poly5.ps[3] = Point(1331.92, -22.1578);\n    new ShapeRef(router, poly5, 5);\n    \n    Polygon poly87(4);\n    poly87.ps[0] = Point(627.924, 35.8422);\n    poly87.ps[1] = Point(627.924, 55.8422);\n    poly87.ps[2] = Point(607.924, 55.8422);\n    poly87.ps[3] = Point(607.924, 35.8422);\n    new ShapeRef(router, poly87, 87);\n    \n    Polygon poly2(4);\n    poly2.ps[0] = Point(577.924, 795.557);\n    poly2.ps[1] = Point(577.924, 835.557);\n    poly2.ps[2] = Point(537.924, 835.557);\n    poly2.ps[3] = Point(537.924, 795.557);\n    new ShapeRef(router, poly2, 2);\n    \n    Polygon poly78(4);\n    poly78.ps[0] = Point(387.924, 617.557);\n    poly78.ps[1] = Point(387.924, 637.557);\n    poly78.ps[2] = Point(367.924, 637.557);\n    poly78.ps[3] = Point(367.924, 617.557);\n    new ShapeRef(router, poly78, 78);\n    \n    Polygon poly137(4);\n    poly137.ps[0] = Point(1106.92, 318.557);\n    poly137.ps[1] = Point(1106.92, 358.557);\n    poly137.ps[2] = Point(1050.92, 358.557);\n    poly137.ps[3] = Point(1050.92, 318.557);\n    new ShapeRef(router, poly137, 137);\n    \n    Polygon poly50(4);\n    poly50.ps[0] = Point(272.5, -82.1578);\n    poly50.ps[1] = Point(272.5, -47.1578);\n    poly50.ps[2] = Point(35.5, -47.1578);\n    poly50.ps[3] = Point(35.5, -82.1578);\n    new ShapeRef(router, poly50, 50);\n    \n    Polygon poly144(4);\n    poly144.ps[0] = Point(765.924, 91.5565);\n    poly144.ps[1] = Point(765.924, 131.557);\n    poly144.ps[2] = Point(709.924, 131.557);\n    poly144.ps[3] = Point(709.924, 91.5565);\n    new ShapeRef(router, poly144, 144);\n    \n    Polygon poly12(4);\n    poly12.ps[0] = Point(1038.92, 260.557);\n    poly12.ps[1] = Point(1038.92, 300.557);\n    poly12.ps[2] = Point(998.924, 300.557);\n    poly12.ps[3] = Point(998.924, 260.557);\n    new ShapeRef(router, poly12, 12);\n    \n    Polygon poly102(4);\n    poly102.ps[0] = Point(1088.92, -70.6578);\n    poly102.ps[1] = Point(1088.92, -50.6578);\n    poly102.ps[2] = Point(1068.92, -50.6578);\n    poly102.ps[3] = Point(1068.92, -70.6578);\n    new ShapeRef(router, poly102, 102);\n    \n    Polygon poly11(4);\n    poly11.ps[0] = Point(817.924, -80.6578);\n    poly11.ps[1] = Point(817.924, -40.6578);\n    poly11.ps[2] = Point(777.924, -40.6578);\n    poly11.ps[3] = Point(777.924, -80.6578);\n    new ShapeRef(router, poly11, 11);\n    \n    Polygon poly96(4);\n    poly96.ps[0] = Point(747.924, 333.557);\n    poly96.ps[1] = Point(747.924, 353.557);\n    poly96.ps[2] = Point(727.924, 353.557);\n    poly96.ps[3] = Point(727.924, 333.557);\n    new ShapeRef(router, poly96, 96);\n    \n    Polygon poly135(4);\n    poly135.ps[0] = Point(885.924, 91.5565);\n    poly135.ps[1] = Point(885.924, 131.557);\n    poly135.ps[2] = Point(829.924, 131.557);\n    poly135.ps[3] = Point(829.924, 91.5565);\n    new ShapeRef(router, poly135, 135);\n    \n    Polygon poly1(4);\n    poly1.ps[0] = Point(817.924, 840.057);\n    poly1.ps[1] = Point(817.924, 880.057);\n    poly1.ps[2] = Point(777.924, 880.057);\n    poly1.ps[3] = Point(777.924, 840.057);\n    new ShapeRef(router, poly1, 1);\n    \n    Polygon poly126(4);\n    poly126.ps[0] = Point(525.924, -24.1578);\n    poly126.ps[1] = Point(525.924, 15.8422);\n    poly126.ps[2] = Point(469.924, 15.8422);\n    poly126.ps[3] = Point(469.924, -24.1578);\n    new ShapeRef(router, poly126, 126);\n    \n    Polygon poly54(4);\n    poly54.ps[0] = Point(697.924, 323.557);\n    poly54.ps[1] = Point(697.924, 363.557);\n    poly54.ps[2] = Point(657.924, 363.557);\n    poly54.ps[3] = Point(657.924, 323.557);\n    new ShapeRef(router, poly54, 54);\n    \n    Polygon poly43(4);\n    poly43.ps[0] = Point(1038.92, 1.84222);\n    poly43.ps[1] = Point(1038.92, 41.8422);\n    poly43.ps[2] = Point(998.924, 41.8422);\n    poly43.ps[3] = Point(998.924, 1.84222);\n    new ShapeRef(router, poly43, 43);\n    \n    Polygon poly85(4);\n    poly85.ps[0] = Point(387.924, 17.3422);\n    poly85.ps[1] = Point(387.924, 37.3422);\n    poly85.ps[2] = Point(367.924, 37.3422);\n    poly85.ps[3] = Point(367.924, 17.3422);\n    new ShapeRef(router, poly85, 85);\n    \n    Polygon poly55(4);\n    poly55.ps[0] = Point(457.924, 7.34222);\n    poly55.ps[1] = Point(457.924, 47.3422);\n    poly55.ps[2] = Point(417.924, 47.3422);\n    poly55.ps[3] = Point(417.924, 7.34222);\n    new ShapeRef(router, poly55, 55);\n    \n    Polygon poly127(4);\n    poly127.ps[0] = Point(645.924, -24.1578);\n    poly127.ps[1] = Point(645.924, 15.8422);\n    poly127.ps[2] = Point(589.924, 15.8422);\n    poly127.ps[3] = Point(589.924, -24.1578);\n    new ShapeRef(router, poly127, 127);\n    \n    Polygon poly49(4);\n    poly49.ps[0] = Point(45.9242, 169.75);\n    poly49.ps[1] = Point(45.9242, 334.75);\n    poly49.ps[2] = Point(-242.076, 334.75);\n    poly49.ps[3] = Point(-242.076, 169.75);\n    new ShapeRef(router, poly49, 49);\n    \n    Polygon poly57(4);\n    poly57.ps[0] = Point(817.924, 141.557);\n    poly57.ps[1] = Point(817.924, 181.557);\n    poly57.ps[2] = Point(777.924, 181.557);\n    poly57.ps[3] = Point(777.924, 141.557);\n    new ShapeRef(router, poly57, 57);\n    \n    Polygon poly25(4);\n    poly25.ps[0] = Point(697.924, 883.057);\n    poly25.ps[1] = Point(697.924, 923.057);\n    poly25.ps[2] = Point(657.924, 923.057);\n    poly25.ps[3] = Point(657.924, 883.057);\n    new ShapeRef(router, poly25, 25);\n    \n    Polygon poly37(4);\n    poly37.ps[0] = Point(457.924, 607.557);\n    poly37.ps[1] = Point(457.924, 647.557);\n    poly37.ps[2] = Point(417.924, 647.557);\n    poly37.ps[3] = Point(417.924, 607.557);\n    new ShapeRef(router, poly37, 37);\n    \n    Polygon poly143(4);\n    poly143.ps[0] = Point(986.924, 210.557);\n    poly143.ps[1] = Point(986.924, 250.557);\n    poly143.ps[2] = Point(930.924, 250.557);\n    poly143.ps[3] = Point(930.924, 210.557);\n    new ShapeRef(router, poly143, 143);\n    \n    Polygon poly138(4);\n    poly138.ps[0] = Point(1226.92, 318.557);\n    poly138.ps[1] = Point(1226.92, 358.557);\n    poly138.ps[2] = Point(1170.92, 358.557);\n    poly138.ps[3] = Point(1170.92, 318.557);\n    new ShapeRef(router, poly138, 138);\n    \n    Polygon poly140(4);\n    poly140.ps[0] = Point(1106.92, -9.65778);\n    poly140.ps[1] = Point(1106.92, 30.3422);\n    poly140.ps[2] = Point(1050.92, 30.3422);\n    poly140.ps[3] = Point(1050.92, -9.65778);\n    new ShapeRef(router, poly140, 140);\n    \n    Polygon poly147(4);\n    poly147.ps[0] = Point(-26.0758, 274.75);\n    poly147.ps[1] = Point(-26.0758, 334.75);\n    poly147.ps[2] = Point(-66.0758, 334.75);\n    poly147.ps[3] = Point(-66.0758, 274.75);\n    new ShapeRef(router, poly147, 147);\n    \n    Polygon poly146(4);\n    poly146.ps[0] = Point(45.9242, 232.5);\n    poly146.ps[1] = Point(45.9242, 272.5);\n    poly146.ps[2] = Point(-14.0758, 272.5);\n    poly146.ps[3] = Point(-14.0758, 232.5);\n    new ShapeRef(router, poly146, 146);\n    \n    Polygon poly103(4);\n    poly103.ps[0] = Point(968.924, 270.557);\n    poly103.ps[1] = Point(968.924, 290.557);\n    poly103.ps[2] = Point(948.924, 290.557);\n    poly103.ps[3] = Point(948.924, 270.557);\n    new ShapeRef(router, poly103, 103);\n    \n    Polygon poly68(4);\n    poly68.ps[0] = Point(147.924, 151.557);\n    poly68.ps[1] = Point(147.924, 171.557);\n    poly68.ps[2] = Point(127.924, 171.557);\n    poly68.ps[3] = Point(127.924, 151.557);\n    new ShapeRef(router, poly68, 68);\n    \n    Polygon poly10(4);\n    poly10.ps[0] = Point(937.924, -80.6578);\n    poly10.ps[1] = Point(937.924, -40.6578);\n    poly10.ps[2] = Point(897.924, -40.6578);\n    poly10.ps[3] = Point(897.924, -80.6578);\n    new ShapeRef(router, poly10, 10);\n    \n    Polygon poly118(4);\n    poly118.ps[0] = Point(405.924, 557.557);\n    poly118.ps[1] = Point(405.924, 597.557);\n    poly118.ps[2] = Point(349.924, 597.557);\n    poly118.ps[3] = Point(349.924, 557.557);\n    new ShapeRef(router, poly118, 118);\n    \n    Polygon poly128(4);\n    poly128.ps[0] = Point(765.924, 504.057);\n    poly128.ps[1] = Point(765.924, 544.057);\n    poly128.ps[2] = Point(709.924, 544.057);\n    poly128.ps[3] = Point(709.924, 504.057);\n    new ShapeRef(router, poly128, 128);\n    \n    Polygon poly9(4);\n    poly9.ps[0] = Point(1038.92, -80.6578);\n    poly9.ps[1] = Point(1038.92, -40.6578);\n    poly9.ps[2] = Point(998.924, -40.6578);\n    poly9.ps[3] = Point(998.924, -80.6578);\n    new ShapeRef(router, poly9, 9);\n    \n    Polygon poly91(4);\n    poly91.ps[0] = Point(627.924, 517.557);\n    poly91.ps[1] = Point(627.924, 537.557);\n    poly91.ps[2] = Point(607.924, 537.557);\n    poly91.ps[3] = Point(607.924, 517.557);\n    new ShapeRef(router, poly91, 91);\n    \n    Polygon poly52(4);\n    poly52.ps[0] = Point(217.924, 295.557);\n    poly52.ps[1] = Point(217.924, 335.557);\n    poly52.ps[2] = Point(177.924, 335.557);\n    poly52.ps[3] = Point(177.924, 295.557);\n    new ShapeRef(router, poly52, 52);\n    \n    Polygon poly39(4);\n    poly39.ps[0] = Point(457.924, 141.557);\n    poly39.ps[1] = Point(457.924, 181.557);\n    poly39.ps[2] = Point(417.924, 181.557);\n    poly39.ps[3] = Point(417.924, 141.557);\n    new ShapeRef(router, poly39, 39);\n    \n    Polygon poly76(4);\n    poly76.ps[0] = Point(147.924, 753.557);\n    poly76.ps[1] = Point(147.924, 773.557);\n    poly76.ps[2] = Point(127.924, 773.557);\n    poly76.ps[3] = Point(127.924, 753.557);\n    new ShapeRef(router, poly76, 76);\n    \n    Polygon poly62(4);\n    poly62.ps[0] = Point(577.924, 629.557);\n    poly62.ps[1] = Point(577.924, 669.557);\n    poly62.ps[2] = Point(537.924, 669.557);\n    poly62.ps[3] = Point(537.924, 629.557);\n    new ShapeRef(router, poly62, 62);\n    \n    Polygon poly105(4);\n    poly105.ps[0] = Point(747.924, 850.057);\n    poly105.ps[1] = Point(747.924, 870.057);\n    poly105.ps[2] = Point(727.924, 870.057);\n    poly105.ps[3] = Point(727.924, 850.057);\n    new ShapeRef(router, poly105, 105);\n    \n    Polygon poly8(4);\n    poly8.ps[0] = Point(1158.92, -80.6578);\n    poly8.ps[1] = Point(1158.92, -40.6578);\n    poly8.ps[2] = Point(1118.92, -40.6578);\n    poly8.ps[3] = Point(1118.92, -80.6578);\n    new ShapeRef(router, poly8, 8);\n    \n    Polygon poly95(4);\n    poly95.ps[0] = Point(867.924, 151.557);\n    poly95.ps[1] = Point(867.924, 171.557);\n    poly95.ps[2] = Point(847.924, 171.557);\n    poly95.ps[3] = Point(847.924, 151.557);\n    new ShapeRef(router, poly95, 95);\n    \n    Polygon poly125(4);\n    poly125.ps[0] = Point(405.924, -42.6578);\n    poly125.ps[1] = Point(405.924, -2.65778);\n    poly125.ps[2] = Point(349.924, -2.65778);\n    poly125.ps[3] = Point(349.924, -42.6578);\n    new ShapeRef(router, poly125, 125);\n    \n    Polygon poly7(4);\n    poly7.ps[0] = Point(1278.92, -80.6578);\n    poly7.ps[1] = Point(1278.92, -40.6578);\n    poly7.ps[2] = Point(1238.92, -40.6578);\n    poly7.ps[3] = Point(1238.92, -80.6578);\n    new ShapeRef(router, poly7, 7);\n    \n    Polygon poly114(4);\n    poly114.ps[0] = Point(165.924, 549.557);\n    poly114.ps[1] = Point(165.924, 589.557);\n    poly114.ps[2] = Point(109.924, 589.557);\n    poly114.ps[3] = Point(109.924, 549.557);\n    new ShapeRef(router, poly114, 114);\n    \n    Polygon poly132(4);\n    poly132.ps[0] = Point(645.924, 365.557);\n    poly132.ps[1] = Point(645.924, 405.557);\n    poly132.ps[2] = Point(589.924, 405.557);\n    poly132.ps[3] = Point(589.924, 365.557);\n    new ShapeRef(router, poly132, 132);\n    \n    Polygon poly112(4);\n    poly112.ps[0] = Point(167.924, 347.557);\n    poly112.ps[1] = Point(167.924, 387.557);\n    poly112.ps[2] = Point(111.924, 387.557);\n    poly112.ps[3] = Point(111.924, 347.557);\n    new ShapeRef(router, poly112, 112);\n    \n    Polygon poly40(4);\n    poly40.ps[0] = Point(97.9242, 141.557);\n    poly40.ps[1] = Point(97.9242, 181.557);\n    poly40.ps[2] = Point(57.9242, 181.557);\n    poly40.ps[3] = Point(57.9242, 141.557);\n    new ShapeRef(router, poly40, 40);\n    \n    Polygon poly92(4);\n    poly92.ps[0] = Point(627.924, 425.557);\n    poly92.ps[1] = Point(627.924, 445.557);\n    poly92.ps[2] = Point(607.924, 445.557);\n    poly92.ps[3] = Point(607.924, 425.557);\n    new ShapeRef(router, poly92, 92);\n    \n    Polygon poly104(4);\n    poly104.ps[0] = Point(747.924, 151.557);\n    poly104.ps[1] = Point(747.924, 171.557);\n    poly104.ps[2] = Point(727.924, 171.557);\n    poly104.ps[3] = Point(727.924, 151.557);\n    new ShapeRef(router, poly104, 104);\n    \n    Polygon poly89(4);\n    poly89.ps[0] = Point(507.924, 517.557);\n    poly89.ps[1] = Point(507.924, 537.557);\n    poly89.ps[2] = Point(487.924, 537.557);\n    poly89.ps[3] = Point(487.924, 517.557);\n    new ShapeRef(router, poly89, 89);\n    \n    Polygon poly84(4);\n    poly84.ps[0] = Point(387.924, 151.557);\n    poly84.ps[1] = Point(387.924, 171.557);\n    poly84.ps[2] = Point(367.924, 171.557);\n    poly84.ps[3] = Point(367.924, 151.557);\n    new ShapeRef(router, poly84, 84);\n    \n    Polygon poly26(4);\n    poly26.ps[0] = Point(697.924, 743.557);\n    poly26.ps[1] = Point(697.924, 783.557);\n    poly26.ps[2] = Point(657.924, 783.557);\n    poly26.ps[3] = Point(657.924, 743.557);\n    new ShapeRef(router, poly26, 26);\n    \n    Polygon poly107(4);\n    poly107.ps[0] = Point(165.924, -35.1578);\n    poly107.ps[1] = Point(165.924, 4.84222);\n    poly107.ps[2] = Point(109.924, 4.84222);\n    poly107.ps[3] = Point(109.924, -35.1578);\n    new ShapeRef(router, poly107, 107);\n    \n    Polygon poly142(4);\n    poly142.ps[0] = Point(1106.92, -130.658);\n    poly142.ps[1] = Point(1106.92, -90.6578);\n    poly142.ps[2] = Point(1050.92, -90.6578);\n    poly142.ps[3] = Point(1050.92, -130.658);\n    new ShapeRef(router, poly142, 142);\n    \n    Polygon poly47(4);\n    poly47.ps[0] = Point(697.924, 271.557);\n    poly47.ps[1] = Point(697.924, 311.557);\n    poly47.ps[2] = Point(657.924, 311.557);\n    poly47.ps[3] = Point(657.924, 271.557);\n    new ShapeRef(router, poly47, 47);\n    \n    Polygon poly109(4);\n    poly109.ps[0] = Point(285.924, 91.5565);\n    poly109.ps[1] = Point(285.924, 131.557);\n    poly109.ps[2] = Point(229.924, 131.557);\n    poly109.ps[3] = Point(229.924, 91.5565);\n    new ShapeRef(router, poly109, 109);\n    \n    Polygon poly145(4);\n    poly145.ps[0] = Point(765.924, 790.057);\n    poly145.ps[1] = Point(765.924, 830.057);\n    poly145.ps[2] = Point(709.924, 830.057);\n    poly145.ps[3] = Point(709.924, 790.057);\n    new ShapeRef(router, poly145, 145);\n    \n    Polygon poly122(4);\n    poly122.ps[0] = Point(525.924, 833.057);\n    poly122.ps[1] = Point(525.924, 873.057);\n    poly122.ps[2] = Point(469.924, 873.057);\n    poly122.ps[3] = Point(469.924, 833.057);\n    new ShapeRef(router, poly122, 122);\n    \n    Polygon poly58(4);\n    poly58.ps[0] = Point(97.9242, 14.8422);\n    poly58.ps[1] = Point(97.9242, 54.8422);\n    poly58.ps[2] = Point(57.9242, 54.8422);\n    poly58.ps[3] = Point(57.9242, 14.8422);\n    new ShapeRef(router, poly58, 58);\n    \n    Polygon poly124(4);\n    poly124.ps[0] = Point(405.924, 91.5565);\n    poly124.ps[1] = Point(405.924, 131.557);\n    poly124.ps[2] = Point(349.924, 131.557);\n    poly124.ps[3] = Point(349.924, 91.5565);\n    new ShapeRef(router, poly124, 124);\n    \n    Polygon poly42(4);\n    poly42.ps[0] = Point(697.924, 415.557);\n    poly42.ps[1] = Point(697.924, 455.557);\n    poly42.ps[2] = Point(657.924, 455.557);\n    poly42.ps[3] = Point(657.924, 415.557);\n    new ShapeRef(router, poly42, 42);\n    \n    Polygon poly6(4);\n    poly6.ps[0] = Point(1371.92, -80.6578);\n    poly6.ps[1] = Point(1371.92, -40.6578);\n    poly6.ps[2] = Point(1331.92, -40.6578);\n    poly6.ps[3] = Point(1331.92, -80.6578);\n    new ShapeRef(router, poly6, 6);\n    \n    ConnRef *connRef162 = new ConnRef(router, 162);\n    ConnEnd srcPt162(Point(317.924, 161.557), 15);\n    connRef162->setSourceEndpoint(srcPt162);\n    ConnEnd dstPt162(Point(367.924, 27.3422), 15);\n    connRef162->setDestEndpoint(dstPt162);\n    connRef162->setRoutingType((ConnType)2);\n\n    ConnRef *connRef163 = new ConnRef(router, 163);\n    ConnEnd srcPt163(Point(317.924, 161.557), 15);\n    connRef163->setSourceEndpoint(srcPt163);\n    ConnEnd dstPt163(Point(487.924, 435.557), 15);\n    connRef163->setDestEndpoint(dstPt163);\n    connRef163->setRoutingType((ConnType)2);\n\n    ConnRef *connRef191 = new ConnRef(router, 191);\n    ConnEnd srcPt191(Point(267.924, 161.557), 15);\n    connRef191->setSourceEndpoint(srcPt191);\n    ConnEnd dstPt191(Point(317.924, 161.557), 15);\n    connRef191->setDestEndpoint(dstPt191);\n    connRef191->setRoutingType((ConnType)2);\n\n    ConnRef *connRef192 = new ConnRef(router, 192);\n    ConnEnd srcPt192(Point(197.924, 223.557), 15);\n    connRef192->setSourceEndpoint(srcPt192);\n    ConnEnd dstPt192(Point(197.924, 315.557), 15);\n    connRef192->setDestEndpoint(dstPt192);\n    connRef192->setRoutingType((ConnType)2);\n\n    ConnRef *connRef193 = new ConnRef(router, 193);\n    ConnEnd srcPt193(Point(77.9242, 377.557), 15);\n    connRef193->setSourceEndpoint(srcPt193);\n    ConnEnd dstPt193(Point(77.9242, 527.557), 15);\n    connRef193->setDestEndpoint(dstPt193);\n    connRef193->setRoutingType((ConnType)2);\n\n    ConnRef *connRef194 = new ConnRef(router, 194);\n    ConnEnd srcPt194(Point(147.924, 527.557), 15);\n    connRef194->setSourceEndpoint(srcPt194);\n    ConnEnd dstPt194(Point(197.924, 527.557), 15);\n    connRef194->setDestEndpoint(dstPt194);\n    connRef194->setRoutingType((ConnType)2);\n\n    ConnRef *connRef195 = new ConnRef(router, 195);\n    ConnEnd srcPt195(Point(147.924, 619.557), 15);\n    connRef195->setSourceEndpoint(srcPt195);\n    ConnEnd dstPt195(Point(197.924, 763.557), 15);\n    connRef195->setDestEndpoint(dstPt195);\n    connRef195->setRoutingType((ConnType)2);\n\n    ConnRef *connRef196 = new ConnRef(router, 196);\n    ConnEnd srcPt196(Point(77.9242, 651.557), 15);\n    connRef196->setSourceEndpoint(srcPt196);\n    ConnEnd dstPt196(Point(77.9242, 619.557), 15);\n    connRef196->setDestEndpoint(dstPt196);\n    connRef196->setRoutingType((ConnType)2);\n\n    ConnRef *connRef152 = new ConnRef(router, 152);\n    ConnEnd srcPt152(Point(317.924, 763.557), 15);\n    connRef152->setSourceEndpoint(srcPt152);\n    ConnEnd dstPt152(Point(367.924, 763.557), 15);\n    connRef152->setDestEndpoint(dstPt152);\n    connRef152->setRoutingType((ConnType)2);\n\n    ConnRef *connRef153 = new ConnRef(router, 153);\n    ConnEnd srcPt153(Point(317.924, 763.557), 15);\n    connRef153->setSourceEndpoint(srcPt153);\n    ConnEnd dstPt153(Point(487.924, 903.057), 15);\n    connRef153->setDestEndpoint(dstPt153);\n    connRef153->setRoutingType((ConnType)2);\n\n    ConnRef *connRef150 = new ConnRef(router, 150);\n    ConnEnd srcPt150(Point(1138.92, 435.557), 15);\n    connRef150->setSourceEndpoint(srcPt150);\n    ConnEnd dstPt150(Point(1188.92, 388.557), 15);\n    connRef150->setDestEndpoint(dstPt150);\n    connRef150->setRoutingType((ConnType)2);\n\n    ConnRef *connRef151 = new ConnRef(router, 151);\n    ConnEnd srcPt151(Point(317.924, 763.557), 15);\n    connRef151->setSourceEndpoint(srcPt151);\n    ConnEnd dstPt151(Point(367.924, 627.557), 15);\n    connRef151->setDestEndpoint(dstPt151);\n    connRef151->setRoutingType((ConnType)2);\n\n    ConnRef *connRef156 = new ConnRef(router, 156);\n    ConnEnd srcPt156(Point(197.924, 763.557), 15);\n    connRef156->setSourceEndpoint(srcPt156);\n    ConnEnd dstPt156(Point(247.924, 763.557), 15);\n    connRef156->setDestEndpoint(dstPt156);\n    connRef156->setRoutingType((ConnType)2);\n\n    ConnRef *connRef157 = new ConnRef(router, 157);\n    ConnEnd srcPt157(Point(147.924, 161.557), 15);\n    connRef157->setSourceEndpoint(srcPt157);\n    ConnEnd dstPt157(Point(197.924, 161.557), 15);\n    connRef157->setDestEndpoint(dstPt157);\n    connRef157->setRoutingType((ConnType)2);\n\n    ConnRef *connRef158 = new ConnRef(router, 158);\n    ConnEnd srcPt158(Point(197.924, 161.557), 15);\n    connRef158->setSourceEndpoint(srcPt158);\n    ConnEnd dstPt158(Point(247.924, 161.557), 15);\n    connRef158->setDestEndpoint(dstPt158);\n    connRef158->setRoutingType((ConnType)2);\n\n    ConnRef *connRef159 = new ConnRef(router, 159);\n    ConnEnd srcPt159(Point(197.924, 161.557), 15);\n    connRef159->setSourceEndpoint(srcPt159);\n    ConnEnd dstPt159(Point(197.924, 203.557), 15);\n    connRef159->setDestEndpoint(dstPt159);\n    connRef159->setRoutingType((ConnType)2);\n\n    ConnRef *connRef154 = new ConnRef(router, 154);\n    ConnEnd srcPt154(Point(317.924, 763.557), 15);\n    connRef154->setSourceEndpoint(srcPt154);\n    ConnEnd dstPt154(Point(727.924, 574.057), 15);\n    connRef154->setDestEndpoint(dstPt154);\n    connRef154->setRoutingType((ConnType)2);\n\n    ConnRef *connRef155 = new ConnRef(router, 155);\n    ConnEnd srcPt155(Point(557.924, 903.057), 15);\n    connRef155->setSourceEndpoint(srcPt155);\n    ConnEnd dstPt155(Point(607.924, 903.057), 15);\n    connRef155->setDestEndpoint(dstPt155);\n    connRef155->setRoutingType((ConnType)2);\n\n    ConnRef *connRef229 = new ConnRef(router, 229);\n    ConnEnd srcPt229(Point(257.924, 111.557), 15);\n    connRef229->setSourceEndpoint(srcPt229);\n    ConnEnd dstPt229(Point(257.924, 161.557), 15);\n    connRef229->setDestEndpoint(dstPt229);\n    connRef229->setRoutingType((ConnType)2);\n\n    ConnRef *connRef230 = new ConnRef(router, 230);\n    ConnEnd srcPt230(Point(259.924, 213.557), 15);\n    connRef230->setSourceEndpoint(srcPt230);\n    ConnEnd dstPt230(Point(197.924, 213.557), 15);\n    connRef230->setDestEndpoint(dstPt230);\n    connRef230->setRoutingType((ConnType)2);\n\n    ConnRef *connRef231 = new ConnRef(router, 231);\n    ConnEnd srcPt231(Point(257.924, 265.557), 15);\n    connRef231->setSourceEndpoint(srcPt231);\n    ConnEnd dstPt231(Point(257.924, 315.557), 15);\n    connRef231->setDestEndpoint(dstPt231);\n    connRef231->setRoutingType((ConnType)2);\n\n    ConnRef *connRef232 = new ConnRef(router, 232);\n    ConnEnd srcPt232(Point(139.924, 367.557), 15);\n    connRef232->setSourceEndpoint(srcPt232);\n    ConnEnd dstPt232(Point(77.9242, 367.557), 15);\n    connRef232->setDestEndpoint(dstPt232);\n    connRef232->setRoutingType((ConnType)2);\n\n    ConnRef *connRef233 = new ConnRef(router, 233);\n    ConnEnd srcPt233(Point(137.924, 477.557), 15);\n    connRef233->setSourceEndpoint(srcPt233);\n    ConnEnd dstPt233(Point(137.924, 527.557), 15);\n    connRef233->setDestEndpoint(dstPt233);\n    connRef233->setRoutingType((ConnType)2);\n\n    ConnRef *connRef234 = new ConnRef(router, 234);\n    ConnEnd srcPt234(Point(137.924, 569.557), 15);\n    connRef234->setSourceEndpoint(srcPt234);\n    ConnEnd dstPt234(Point(137.924, 619.557), 15);\n    connRef234->setDestEndpoint(dstPt234);\n    connRef234->setRoutingType((ConnType)2);\n\n    ConnRef *connRef235 = new ConnRef(router, 235);\n    ConnEnd srcPt235(Point(139.924, 661.557), 15);\n    connRef235->setSourceEndpoint(srcPt235);\n    ConnEnd dstPt235(Point(77.9242, 661.557), 15);\n    connRef235->setDestEndpoint(dstPt235);\n    connRef235->setRoutingType((ConnType)2);\n\n    ConnRef *connRef236 = new ConnRef(router, 236);\n    ConnEnd srcPt236(Point(137.924, 713.557), 15);\n    connRef236->setSourceEndpoint(srcPt236);\n    ConnEnd dstPt236(Point(137.924, 763.557), 15);\n    connRef236->setDestEndpoint(dstPt236);\n    connRef236->setRoutingType((ConnType)2);\n\n    ConnRef *connRef237 = new ConnRef(router, 237);\n    ConnEnd srcPt237(Point(257.924, 713.557), 15);\n    connRef237->setSourceEndpoint(srcPt237);\n    ConnEnd dstPt237(Point(257.924, 763.557), 15);\n    connRef237->setDestEndpoint(dstPt237);\n    connRef237->setRoutingType((ConnType)2);\n\n    ConnRef *connRef238 = new ConnRef(router, 238);\n    ConnEnd srcPt238(Point(377.924, 577.557), 15);\n    connRef238->setSourceEndpoint(srcPt238);\n    ConnEnd dstPt238(Point(377.924, 627.557), 15);\n    connRef238->setDestEndpoint(dstPt238);\n    connRef238->setRoutingType((ConnType)2);\n\n    ConnRef *connRef239 = new ConnRef(router, 239);\n    ConnEnd srcPt239(Point(377.924, 713.557), 15);\n    connRef239->setSourceEndpoint(srcPt239);\n    ConnEnd dstPt239(Point(377.924, 763.557), 15);\n    connRef239->setDestEndpoint(dstPt239);\n    connRef239->setRoutingType((ConnType)2);\n\n    ConnRef *connRef240 = new ConnRef(router, 240);\n    ConnEnd srcPt240(Point(497.924, 713.557), 15);\n    connRef240->setSourceEndpoint(srcPt240);\n    ConnEnd dstPt240(Point(497.924, 763.557), 15);\n    connRef240->setDestEndpoint(dstPt240);\n    connRef240->setRoutingType((ConnType)2);\n\n    ConnRef *connRef241 = new ConnRef(router, 241);\n    ConnEnd srcPt241(Point(617.924, 713.557), 15);\n    connRef241->setSourceEndpoint(srcPt241);\n    ConnEnd dstPt241(Point(617.924, 763.557), 15);\n    connRef241->setDestEndpoint(dstPt241);\n    connRef241->setRoutingType((ConnType)2);\n\n    ConnRef *connRef242 = new ConnRef(router, 242);\n    ConnEnd srcPt242(Point(497.924, 853.057), 15);\n    connRef242->setSourceEndpoint(srcPt242);\n    ConnEnd dstPt242(Point(497.924, 903.057), 15);\n    connRef242->setDestEndpoint(dstPt242);\n    connRef242->setRoutingType((ConnType)2);\n\n    ConnRef *connRef243 = new ConnRef(router, 243);\n    ConnEnd srcPt243(Point(617.924, 853.057), 15);\n    connRef243->setSourceEndpoint(srcPt243);\n    ConnEnd dstPt243(Point(617.924, 903.057), 15);\n    connRef243->setDestEndpoint(dstPt243);\n    connRef243->setRoutingType((ConnType)2);\n\n    ConnRef *connRef244 = new ConnRef(router, 244);\n    ConnEnd srcPt244(Point(377.924, 111.557), 15);\n    connRef244->setSourceEndpoint(srcPt244);\n    ConnEnd dstPt244(Point(377.924, 161.557), 15);\n    connRef244->setDestEndpoint(dstPt244);\n    connRef244->setRoutingType((ConnType)2);\n\n    ConnRef *connRef245 = new ConnRef(router, 245);\n    ConnEnd srcPt245(Point(377.924, -22.6578), 15);\n    connRef245->setSourceEndpoint(srcPt245);\n    ConnEnd dstPt245(Point(377.924, 27.3422), 15);\n    connRef245->setDestEndpoint(dstPt245);\n    connRef245->setRoutingType((ConnType)2);\n\n    ConnRef *connRef246 = new ConnRef(router, 246);\n    ConnEnd srcPt246(Point(497.924, -4.15778), 15);\n    connRef246->setSourceEndpoint(srcPt246);\n    ConnEnd dstPt246(Point(497.924, 45.8422), 15);\n    connRef246->setDestEndpoint(dstPt246);\n    connRef246->setRoutingType((ConnType)2);\n\n    ConnRef *connRef247 = new ConnRef(router, 247);\n    ConnEnd srcPt247(Point(617.924, -4.15778), 15);\n    connRef247->setSourceEndpoint(srcPt247);\n    ConnEnd dstPt247(Point(617.924, 45.8422), 15);\n    connRef247->setDestEndpoint(dstPt247);\n    connRef247->setRoutingType((ConnType)2);\n\n    ConnRef *connRef248 = new ConnRef(router, 248);\n    ConnEnd srcPt248(Point(737.924, 524.057), 15);\n    connRef248->setSourceEndpoint(srcPt248);\n    ConnEnd dstPt248(Point(737.924, 574.057), 15);\n    connRef248->setDestEndpoint(dstPt248);\n    connRef248->setRoutingType((ConnType)2);\n\n    ConnRef *connRef249 = new ConnRef(router, 249);\n    ConnEnd srcPt249(Point(497.924, 477.557), 15);\n    connRef249->setSourceEndpoint(srcPt249);\n    ConnEnd dstPt249(Point(497.924, 527.557), 15);\n    connRef249->setDestEndpoint(dstPt249);\n    connRef249->setRoutingType((ConnType)2);\n\n    ConnRef *connRef250 = new ConnRef(router, 250);\n    ConnEnd srcPt250(Point(497.924, 385.557), 15);\n    connRef250->setSourceEndpoint(srcPt250);\n    ConnEnd dstPt250(Point(497.924, 435.557), 15);\n    connRef250->setDestEndpoint(dstPt250);\n    connRef250->setRoutingType((ConnType)2);\n\n    ConnRef *connRef251 = new ConnRef(router, 251);\n    ConnEnd srcPt251(Point(617.924, 477.557), 15);\n    connRef251->setSourceEndpoint(srcPt251);\n    ConnEnd dstPt251(Point(617.924, 527.557), 15);\n    connRef251->setDestEndpoint(dstPt251);\n    connRef251->setRoutingType((ConnType)2);\n\n    ConnRef *connRef252 = new ConnRef(router, 252);\n    ConnEnd srcPt252(Point(617.924, 385.557), 15);\n    connRef252->setSourceEndpoint(srcPt252);\n    ConnEnd dstPt252(Point(617.924, 435.557), 15);\n    connRef252->setDestEndpoint(dstPt252);\n    connRef252->setRoutingType((ConnType)2);\n\n    ConnRef *connRef253 = new ConnRef(router, 253);\n    ConnEnd srcPt253(Point(857.924, 293.557), 15);\n    connRef253->setSourceEndpoint(srcPt253);\n    ConnEnd dstPt253(Point(857.924, 343.557), 15);\n    connRef253->setDestEndpoint(dstPt253);\n    connRef253->setRoutingType((ConnType)2);\n\n    ConnRef *connRef254 = new ConnRef(router, 254);\n    ConnEnd srcPt254(Point(857.924, 385.557), 15);\n    connRef254->setSourceEndpoint(srcPt254);\n    ConnEnd dstPt254(Point(857.924, 435.557), 15);\n    connRef254->setDestEndpoint(dstPt254);\n    connRef254->setRoutingType((ConnType)2);\n\n    ConnRef *connRef255 = new ConnRef(router, 255);\n    ConnEnd srcPt255(Point(857.924, 111.557), 15);\n    connRef255->setSourceEndpoint(srcPt255);\n    ConnEnd dstPt255(Point(857.924, 161.557), 15);\n    connRef255->setDestEndpoint(dstPt255);\n    connRef255->setRoutingType((ConnType)2);\n\n    ConnRef *connRef256 = new ConnRef(router, 256);\n    ConnEnd srcPt256(Point(737.924, 293.557), 15);\n    connRef256->setSourceEndpoint(srcPt256);\n    ConnEnd dstPt256(Point(737.924, 343.557), 15);\n    connRef256->setDestEndpoint(dstPt256);\n    connRef256->setRoutingType((ConnType)2);\n\n    ConnRef *connRef257 = new ConnRef(router, 257);\n    ConnEnd srcPt257(Point(1078.92, 338.557), 15);\n    connRef257->setSourceEndpoint(srcPt257);\n    ConnEnd dstPt257(Point(1078.92, 388.557), 15);\n    connRef257->setDestEndpoint(dstPt257);\n    connRef257->setRoutingType((ConnType)2);\n\n    ConnRef *connRef258 = new ConnRef(router, 258);\n    ConnEnd srcPt258(Point(1198.92, 338.557), 15);\n    connRef258->setSourceEndpoint(srcPt258);\n    ConnEnd dstPt258(Point(1198.92, 388.557), 15);\n    connRef258->setDestEndpoint(dstPt258);\n    connRef258->setRoutingType((ConnType)2);\n\n    ConnRef *connRef259 = new ConnRef(router, 259);\n    ConnEnd srcPt259(Point(1078.92, 102.342), 15);\n    connRef259->setSourceEndpoint(srcPt259);\n    ConnEnd dstPt259(Point(1078.92, 152.342), 15);\n    connRef259->setDestEndpoint(dstPt259);\n    connRef259->setRoutingType((ConnType)2);\n\n    ConnRef *connRef260 = new ConnRef(router, 260);\n    ConnEnd srcPt260(Point(1078.92, 10.3422), 15);\n    connRef260->setSourceEndpoint(srcPt260);\n    ConnEnd dstPt260(Point(1078.92, 60.3422), 15);\n    connRef260->setDestEndpoint(dstPt260);\n    connRef260->setRoutingType((ConnType)2);\n\n    ConnRef *connRef261 = new ConnRef(router, 261);\n    ConnEnd srcPt261(Point(1198.92, 102.342), 15);\n    connRef261->setSourceEndpoint(srcPt261);\n    ConnEnd dstPt261(Point(1198.92, 152.342), 15);\n    connRef261->setDestEndpoint(dstPt261);\n    connRef261->setRoutingType((ConnType)2);\n\n    ConnRef *connRef262 = new ConnRef(router, 262);\n    ConnEnd srcPt262(Point(1078.92, -110.658), 15);\n    connRef262->setSourceEndpoint(srcPt262);\n    ConnEnd dstPt262(Point(1078.92, -60.6578), 15);\n    connRef262->setDestEndpoint(dstPt262);\n    connRef262->setRoutingType((ConnType)2);\n\n    ConnRef *connRef263 = new ConnRef(router, 263);\n    ConnEnd srcPt263(Point(958.924, 230.557), 15);\n    connRef263->setSourceEndpoint(srcPt263);\n    ConnEnd dstPt263(Point(958.924, 280.557), 15);\n    connRef263->setDestEndpoint(dstPt263);\n    connRef263->setRoutingType((ConnType)2);\n\n    ConnRef *connRef264 = new ConnRef(router, 264);\n    ConnEnd srcPt264(Point(737.924, 111.557), 15);\n    connRef264->setSourceEndpoint(srcPt264);\n    ConnEnd dstPt264(Point(737.924, 161.557), 15);\n    connRef264->setDestEndpoint(dstPt264);\n    connRef264->setRoutingType((ConnType)2);\n\n    ConnRef *connRef265 = new ConnRef(router, 265);\n    ConnEnd srcPt265(Point(737.924, 810.057), 15);\n    connRef265->setSourceEndpoint(srcPt265);\n    ConnEnd dstPt265(Point(737.924, 860.057), 15);\n    connRef265->setDestEndpoint(dstPt265);\n    connRef265->setRoutingType((ConnType)2);\n\n    ConnRef *connRef266 = new ConnRef(router, 266);\n    ConnEnd srcPt266(Point(77.9242, 161.557), 15);\n    connRef266->setSourceEndpoint(srcPt266);\n    ConnEnd dstPt266(Point(40.9242, 252.5), 15);\n    connRef266->setDestEndpoint(dstPt266);\n    connRef266->setRoutingType((ConnType)2);\n\n    ConnRef *connRef267 = new ConnRef(router, 267);\n    ConnEnd srcPt267(Point(77.9242, 763.557), 15);\n    connRef267->setSourceEndpoint(srcPt267);\n    ConnEnd dstPt267(Point(-46.0758, 329.75), 15);\n    connRef267->setDestEndpoint(dstPt267);\n    connRef267->setRoutingType((ConnType)2);\n\n    ConnRef *connRef172 = new ConnRef(router, 172);\n    ConnEnd srcPt172(Point(267.924, 315.557), 15);\n    connRef172->setSourceEndpoint(srcPt172);\n    ConnEnd dstPt172(Point(437.924, 161.557), 15);\n    connRef172->setDestEndpoint(dstPt172);\n    connRef172->setRoutingType((ConnType)2);\n\n    ConnRef *connRef173 = new ConnRef(router, 173);\n    ConnEnd srcPt173(Point(437.924, 161.557), 15);\n    connRef173->setSourceEndpoint(srcPt173);\n    ConnEnd dstPt173(Point(487.924, 45.8422), 15);\n    connRef173->setDestEndpoint(dstPt173);\n    connRef173->setRoutingType((ConnType)2);\n\n    ConnRef *connRef178 = new ConnRef(router, 178);\n    ConnEnd srcPt178(Point(77.9242, 527.557), 15);\n    connRef178->setSourceEndpoint(srcPt178);\n    ConnEnd dstPt178(Point(127.924, 527.557), 15);\n    connRef178->setDestEndpoint(dstPt178);\n    connRef178->setRoutingType((ConnType)2);\n\n    ConnRef *connRef179 = new ConnRef(router, 179);\n    ConnEnd srcPt179(Point(557.924, 54.8422), 15);\n    connRef179->setSourceEndpoint(srcPt179);\n    ConnEnd dstPt179(Point(607.924, 45.8422), 15);\n    connRef179->setDestEndpoint(dstPt179);\n    connRef179->setRoutingType((ConnType)2);\n\n    ConnRef *connRef180 = new ConnRef(router, 180);\n    ConnEnd srcPt180(Point(557.924, 435.557), 15);\n    connRef180->setSourceEndpoint(srcPt180);\n    ConnEnd dstPt180(Point(607.924, 435.557), 15);\n    connRef180->setDestEndpoint(dstPt180);\n    connRef180->setRoutingType((ConnType)2);\n\n    ConnRef *connRef181 = new ConnRef(router, 181);\n    ConnEnd srcPt181(Point(77.9242, 763.557), 15);\n    connRef181->setSourceEndpoint(srcPt181);\n    ConnEnd dstPt181(Point(77.9242, 671.557), 15);\n    connRef181->setDestEndpoint(dstPt181);\n    connRef181->setRoutingType((ConnType)2);\n\n    ConnRef *connRef197 = new ConnRef(router, 197);\n    ConnEnd srcPt197(Point(147.924, 763.557), 15);\n    connRef197->setSourceEndpoint(srcPt197);\n    ConnEnd dstPt197(Point(197.924, 763.557), 15);\n    connRef197->setDestEndpoint(dstPt197);\n    connRef197->setRoutingType((ConnType)2);\n\n    ConnRef *connRef198 = new ConnRef(router, 198);\n    ConnEnd srcPt198(Point(267.924, 763.557), 15);\n    connRef198->setSourceEndpoint(srcPt198);\n    ConnEnd dstPt198(Point(317.924, 763.557), 15);\n    connRef198->setDestEndpoint(dstPt198);\n    connRef198->setRoutingType((ConnType)2);\n\n    ConnRef *connRef199 = new ConnRef(router, 199);\n    ConnEnd srcPt199(Point(387.924, 627.557), 15);\n    connRef199->setSourceEndpoint(srcPt199);\n    ConnEnd dstPt199(Point(437.924, 627.557), 15);\n    connRef199->setDestEndpoint(dstPt199);\n    connRef199->setRoutingType((ConnType)2);\n\n    ConnRef *connRef200 = new ConnRef(router, 200);\n    ConnEnd srcPt200(Point(387.924, 763.557), 15);\n    connRef200->setSourceEndpoint(srcPt200);\n    ConnEnd dstPt200(Point(437.924, 763.557), 15);\n    connRef200->setDestEndpoint(dstPt200);\n    connRef200->setRoutingType((ConnType)2);\n\n    ConnRef *connRef201 = new ConnRef(router, 201);\n    ConnEnd srcPt201(Point(507.924, 763.557), 15);\n    connRef201->setSourceEndpoint(srcPt201);\n    ConnEnd dstPt201(Point(557.924, 763.557), 15);\n    connRef201->setDestEndpoint(dstPt201);\n    connRef201->setRoutingType((ConnType)2);\n\n    ConnRef *connRef202 = new ConnRef(router, 202);\n    ConnEnd srcPt202(Point(627.924, 763.557), 15);\n    connRef202->setSourceEndpoint(srcPt202);\n    ConnEnd dstPt202(Point(677.924, 763.557), 15);\n    connRef202->setDestEndpoint(dstPt202);\n    connRef202->setRoutingType((ConnType)2);\n\n    ConnRef *connRef148 = new ConnRef(router, 148);\n    ConnEnd srcPt148(Point(1018.92, -60.6578), 15);\n    connRef148->setSourceEndpoint(srcPt148);\n    ConnEnd dstPt148(Point(1068.92, -60.6578), 15);\n    connRef148->setDestEndpoint(dstPt148);\n    connRef148->setRoutingType((ConnType)2);\n\n    ConnRef *connRef203 = new ConnRef(router, 203);\n    ConnEnd srcPt203(Point(507.924, 903.057), 15);\n    connRef203->setSourceEndpoint(srcPt203);\n    ConnEnd dstPt203(Point(557.924, 903.057), 15);\n    connRef203->setDestEndpoint(dstPt203);\n    connRef203->setRoutingType((ConnType)2);\n\n    ConnRef *connRef204 = new ConnRef(router, 204);\n    ConnEnd srcPt204(Point(627.924, 903.057), 15);\n    connRef204->setSourceEndpoint(srcPt204);\n    ConnEnd dstPt204(Point(677.924, 903.057), 15);\n    connRef204->setDestEndpoint(dstPt204);\n    connRef204->setRoutingType((ConnType)2);\n\n    ConnRef *connRef205 = new ConnRef(router, 205);\n    ConnEnd srcPt205(Point(387.924, 161.557), 15);\n    connRef205->setSourceEndpoint(srcPt205);\n    ConnEnd dstPt205(Point(437.924, 161.557), 15);\n    connRef205->setDestEndpoint(dstPt205);\n    connRef205->setRoutingType((ConnType)2);\n\n    ConnRef *connRef206 = new ConnRef(router, 206);\n    ConnEnd srcPt206(Point(387.924, 27.3422), 15);\n    connRef206->setSourceEndpoint(srcPt206);\n    ConnEnd dstPt206(Point(437.924, 27.3422), 15);\n    connRef206->setDestEndpoint(dstPt206);\n    connRef206->setRoutingType((ConnType)2);\n\n    ConnRef *connRef207 = new ConnRef(router, 207);\n    ConnEnd srcPt207(Point(507.924, 45.8422), 15);\n    connRef207->setSourceEndpoint(srcPt207);\n    ConnEnd dstPt207(Point(557.924, 54.8422), 15);\n    connRef207->setDestEndpoint(dstPt207);\n    connRef207->setRoutingType((ConnType)2);\n\n    ConnRef *connRef176 = new ConnRef(router, 176);\n    ConnEnd srcPt176(Point(77.9242, 161.557), 15);\n    connRef176->setSourceEndpoint(srcPt176);\n    ConnEnd dstPt176(Point(77.9242, 357.557), 15);\n    connRef176->setDestEndpoint(dstPt176);\n    connRef176->setRoutingType((ConnType)2);\n\n    ConnRef *connRef177 = new ConnRef(router, 177);\n    ConnEnd srcPt177(Point(557.924, 763.557), 15);\n    connRef177->setSourceEndpoint(srcPt177);\n    ConnEnd dstPt177(Point(607.924, 763.557), 15);\n    connRef177->setDestEndpoint(dstPt177);\n    connRef177->setRoutingType((ConnType)2);\n\n    ConnRef *connRef189 = new ConnRef(router, 189);\n    ConnEnd srcPt189(Point(747.924, -60.6578), 15);\n    connRef189->setSourceEndpoint(srcPt189);\n    ConnEnd dstPt189(Point(797.924, -60.6578), 15);\n    connRef189->setDestEndpoint(dstPt189);\n    connRef189->setRoutingType((ConnType)2);\n\n    ConnRef *connRef190 = new ConnRef(router, 190);\n    ConnEnd srcPt190(Point(147.924, 34.8422), 15);\n    connRef190->setSourceEndpoint(srcPt190);\n    ConnEnd dstPt190(Point(197.924, 161.557), 15);\n    connRef190->setDestEndpoint(dstPt190);\n    connRef190->setRoutingType((ConnType)2);\n\n    ConnRef *connRef174 = new ConnRef(router, 174);\n    ConnEnd srcPt174(Point(437.924, 161.557), 15);\n    connRef174->setSourceEndpoint(srcPt174);\n    ConnEnd dstPt174(Point(727.924, 161.557), 15);\n    connRef174->setDestEndpoint(dstPt174);\n    connRef174->setRoutingType((ConnType)2);\n\n    ConnRef *connRef175 = new ConnRef(router, 175);\n    ConnEnd srcPt175(Point(77.9242, 161.557), 15);\n    connRef175->setSourceEndpoint(srcPt175);\n    ConnEnd dstPt175(Point(127.924, 161.557), 15);\n    connRef175->setDestEndpoint(dstPt175);\n    connRef175->setRoutingType((ConnType)2);\n\n    ConnRef *connRef170 = new ConnRef(router, 170);\n    ConnEnd srcPt170(Point(1018.92, 161.557), 15);\n    connRef170->setSourceEndpoint(srcPt170);\n    ConnEnd dstPt170(Point(1068.92, 152.342), 15);\n    connRef170->setDestEndpoint(dstPt170);\n    connRef170->setRoutingType((ConnType)2);\n\n    ConnRef *connRef171 = new ConnRef(router, 171);\n    ConnEnd srcPt171(Point(1018.92, 161.557), 15);\n    connRef171->setSourceEndpoint(srcPt171);\n    ConnEnd dstPt171(Point(1068.92, 60.3422), 15);\n    connRef171->setDestEndpoint(dstPt171);\n    connRef171->setRoutingType((ConnType)2);\n\n    ConnRef *connRef166 = new ConnRef(router, 166);\n    ConnEnd srcPt166(Point(557.924, 527.557), 15);\n    connRef166->setSourceEndpoint(srcPt166);\n    ConnEnd dstPt166(Point(607.924, 527.557), 15);\n    connRef166->setDestEndpoint(dstPt166);\n    connRef166->setRoutingType((ConnType)2);\n\n    ConnRef *connRef167 = new ConnRef(router, 167);\n    ConnEnd srcPt167(Point(797.924, 343.557), 15);\n    connRef167->setSourceEndpoint(srcPt167);\n    ConnEnd dstPt167(Point(847.924, 343.557), 15);\n    connRef167->setDestEndpoint(dstPt167);\n    connRef167->setRoutingType((ConnType)2);\n\n    ConnRef *connRef168 = new ConnRef(router, 168);\n    ConnEnd srcPt168(Point(797.924, 343.557), 15);\n    connRef168->setSourceEndpoint(srcPt168);\n    ConnEnd dstPt168(Point(847.924, 435.557), 15);\n    connRef168->setDestEndpoint(dstPt168);\n    connRef168->setRoutingType((ConnType)2);\n\n    ConnRef *connRef169 = new ConnRef(router, 169);\n    ConnEnd srcPt169(Point(1018.92, 435.557), 15);\n    connRef169->setSourceEndpoint(srcPt169);\n    ConnEnd dstPt169(Point(1068.92, 388.557), 15);\n    connRef169->setDestEndpoint(dstPt169);\n    connRef169->setRoutingType((ConnType)2);\n\n    ConnRef *connRef160 = new ConnRef(router, 160);\n    ConnEnd srcPt160(Point(317.924, 161.557), 15);\n    connRef160->setSourceEndpoint(srcPt160);\n    ConnEnd dstPt160(Point(727.924, -60.6578), 15);\n    connRef160->setDestEndpoint(dstPt160);\n    connRef160->setRoutingType((ConnType)2);\n\n    ConnRef *connRef161 = new ConnRef(router, 161);\n    ConnEnd srcPt161(Point(317.924, 161.557), 15);\n    connRef161->setSourceEndpoint(srcPt161);\n    ConnEnd dstPt161(Point(367.924, 161.557), 15);\n    connRef161->setDestEndpoint(dstPt161);\n    connRef161->setRoutingType((ConnType)2);\n\n    ConnRef *connRef186 = new ConnRef(router, 186);\n    ConnEnd srcPt186(Point(77.9242, 34.8422), 15);\n    connRef186->setSourceEndpoint(srcPt186);\n    ConnEnd dstPt186(Point(127.924, 34.8422), 15);\n    connRef186->setDestEndpoint(dstPt186);\n    connRef186->setRoutingType((ConnType)2);\n\n    ConnRef *connRef187 = new ConnRef(router, 187);\n    ConnEnd srcPt187(Point(437.924, 527.557), 15);\n    connRef187->setSourceEndpoint(srcPt187);\n    ConnEnd dstPt187(Point(487.924, 527.557), 15);\n    connRef187->setDestEndpoint(dstPt187);\n    connRef187->setRoutingType((ConnType)2);\n\n    ConnRef *connRef188 = new ConnRef(router, 188);\n    ConnEnd srcPt188(Point(77.9242, 619.557), 15);\n    connRef188->setSourceEndpoint(srcPt188);\n    ConnEnd dstPt188(Point(127.924, 619.557), 15);\n    connRef188->setDestEndpoint(dstPt188);\n    connRef188->setRoutingType((ConnType)2);\n\n    ConnRef *connRef184 = new ConnRef(router, 184);\n    ConnEnd srcPt184(Point(677.924, 343.557), 15);\n    connRef184->setSourceEndpoint(srcPt184);\n    ConnEnd dstPt184(Point(727.924, 343.557), 15);\n    connRef184->setDestEndpoint(dstPt184);\n    connRef184->setRoutingType((ConnType)2);\n\n    ConnRef *connRef185 = new ConnRef(router, 185);\n    ConnEnd srcPt185(Point(797.924, 161.557), 15);\n    connRef185->setSourceEndpoint(srcPt185);\n    ConnEnd dstPt185(Point(847.924, 161.557), 15);\n    connRef185->setDestEndpoint(dstPt185);\n    connRef185->setRoutingType((ConnType)2);\n\n    ConnRef *connRef208 = new ConnRef(router, 208);\n    ConnEnd srcPt208(Point(627.924, 45.8422), 15);\n    connRef208->setSourceEndpoint(srcPt208);\n    ConnEnd dstPt208(Point(677.924, 54.8422), 15);\n    connRef208->setDestEndpoint(dstPt208);\n    connRef208->setRoutingType((ConnType)2);\n\n    ConnRef *connRef209 = new ConnRef(router, 209);\n    ConnEnd srcPt209(Point(747.924, 574.057), 15);\n    connRef209->setSourceEndpoint(srcPt209);\n    ConnEnd dstPt209(Point(797.924, 574.057), 15);\n    connRef209->setDestEndpoint(dstPt209);\n    connRef209->setRoutingType((ConnType)2);\n\n    ConnRef *connRef210 = new ConnRef(router, 210);\n    ConnEnd srcPt210(Point(507.924, 527.557), 15);\n    connRef210->setSourceEndpoint(srcPt210);\n    ConnEnd dstPt210(Point(557.924, 527.557), 15);\n    connRef210->setDestEndpoint(dstPt210);\n    connRef210->setRoutingType((ConnType)2);\n\n    ConnRef *connRef211 = new ConnRef(router, 211);\n    ConnEnd srcPt211(Point(507.924, 435.557), 15);\n    connRef211->setSourceEndpoint(srcPt211);\n    ConnEnd dstPt211(Point(557.924, 435.557), 15);\n    connRef211->setDestEndpoint(dstPt211);\n    connRef211->setRoutingType((ConnType)2);\n\n    ConnRef *connRef212 = new ConnRef(router, 212);\n    ConnEnd srcPt212(Point(627.924, 527.557), 15);\n    connRef212->setSourceEndpoint(srcPt212);\n    ConnEnd dstPt212(Point(677.924, 527.557), 15);\n    connRef212->setDestEndpoint(dstPt212);\n    connRef212->setRoutingType((ConnType)2);\n\n    ConnRef *connRef213 = new ConnRef(router, 213);\n    ConnEnd srcPt213(Point(627.924, 435.557), 15);\n    connRef213->setSourceEndpoint(srcPt213);\n    ConnEnd dstPt213(Point(677.924, 435.557), 15);\n    connRef213->setDestEndpoint(dstPt213);\n    connRef213->setRoutingType((ConnType)2);\n\n    ConnRef *connRef214 = new ConnRef(router, 214);\n    ConnEnd srcPt214(Point(867.924, 343.557), 15);\n    connRef214->setSourceEndpoint(srcPt214);\n    ConnEnd dstPt214(Point(917.924, 343.557), 15);\n    connRef214->setDestEndpoint(dstPt214);\n    connRef214->setRoutingType((ConnType)2);\n\n    ConnRef *connRef215 = new ConnRef(router, 215);\n    ConnEnd srcPt215(Point(867.924, 435.557), 15);\n    connRef215->setSourceEndpoint(srcPt215);\n    ConnEnd dstPt215(Point(917.924, 435.557), 15);\n    connRef215->setDestEndpoint(dstPt215);\n    connRef215->setRoutingType((ConnType)2);\n\n    ConnRef *connRef216 = new ConnRef(router, 216);\n    ConnEnd srcPt216(Point(867.924, 161.557), 15);\n    connRef216->setSourceEndpoint(srcPt216);\n    ConnEnd dstPt216(Point(917.924, 161.557), 15);\n    connRef216->setDestEndpoint(dstPt216);\n    connRef216->setRoutingType((ConnType)2);\n\n    ConnRef *connRef217 = new ConnRef(router, 217);\n    ConnEnd srcPt217(Point(747.924, 343.557), 15);\n    connRef217->setSourceEndpoint(srcPt217);\n    ConnEnd dstPt217(Point(797.924, 343.557), 15);\n    connRef217->setDestEndpoint(dstPt217);\n    connRef217->setRoutingType((ConnType)2);\n\n    ConnRef *connRef218 = new ConnRef(router, 218);\n    ConnEnd srcPt218(Point(1088.92, 388.557), 15);\n    connRef218->setSourceEndpoint(srcPt218);\n    ConnEnd dstPt218(Point(1138.92, 435.557), 15);\n    connRef218->setDestEndpoint(dstPt218);\n    connRef218->setRoutingType((ConnType)2);\n\n    ConnRef *connRef219 = new ConnRef(router, 219);\n    ConnEnd srcPt219(Point(1208.92, 388.557), 15);\n    connRef219->setSourceEndpoint(srcPt219);\n    ConnEnd dstPt219(Point(1258.92, 435.557), 15);\n    connRef219->setDestEndpoint(dstPt219);\n    connRef219->setRoutingType((ConnType)2);\n\n    ConnRef *connRef220 = new ConnRef(router, 220);\n    ConnEnd srcPt220(Point(1088.92, 152.342), 15);\n    connRef220->setSourceEndpoint(srcPt220);\n    ConnEnd dstPt220(Point(1138.92, 161.557), 15);\n    connRef220->setDestEndpoint(dstPt220);\n    connRef220->setRoutingType((ConnType)2);\n\n    ConnRef *connRef221 = new ConnRef(router, 221);\n    ConnEnd srcPt221(Point(1088.92, 60.3422), 15);\n    connRef221->setSourceEndpoint(srcPt221);\n    ConnEnd dstPt221(Point(1138.92, 60.3422), 15);\n    connRef221->setDestEndpoint(dstPt221);\n    connRef221->setRoutingType((ConnType)2);\n\n    ConnRef *connRef222 = new ConnRef(router, 222);\n    ConnEnd srcPt222(Point(1208.92, 152.342), 15);\n    connRef222->setSourceEndpoint(srcPt222);\n    ConnEnd dstPt222(Point(1258.92, 161.557), 15);\n    connRef222->setDestEndpoint(dstPt222);\n    connRef222->setRoutingType((ConnType)2);\n\n    ConnRef *connRef223 = new ConnRef(router, 223);\n    ConnEnd srcPt223(Point(1088.92, -60.6578), 15);\n    connRef223->setSourceEndpoint(srcPt223);\n    ConnEnd dstPt223(Point(1138.92, -60.6578), 15);\n    connRef223->setDestEndpoint(dstPt223);\n    connRef223->setRoutingType((ConnType)2);\n\n    ConnRef *connRef224 = new ConnRef(router, 224);\n    ConnEnd srcPt224(Point(747.924, 161.557), 15);\n    connRef224->setSourceEndpoint(srcPt224);\n    ConnEnd dstPt224(Point(797.924, 161.557), 15);\n    connRef224->setDestEndpoint(dstPt224);\n    connRef224->setRoutingType((ConnType)2);\n\n    ConnRef *connRef225 = new ConnRef(router, 225);\n    ConnEnd srcPt225(Point(747.924, 860.057), 15);\n    connRef225->setSourceEndpoint(srcPt225);\n    ConnEnd dstPt225(Point(797.924, 860.057), 15);\n    connRef225->setDestEndpoint(dstPt225);\n    connRef225->setRoutingType((ConnType)2);\n\n    ConnRef *connRef226 = new ConnRef(router, 226);\n    ConnEnd srcPt226(Point(737.924, -110.658), 15);\n    connRef226->setSourceEndpoint(srcPt226);\n    ConnEnd dstPt226(Point(737.924, -60.6578), 15);\n    connRef226->setDestEndpoint(dstPt226);\n    connRef226->setRoutingType((ConnType)2);\n\n    ConnRef *connRef227 = new ConnRef(router, 227);\n    ConnEnd srcPt227(Point(137.924, -15.1578), 15);\n    connRef227->setSourceEndpoint(srcPt227);\n    ConnEnd dstPt227(Point(137.924, 34.8422), 15);\n    connRef227->setDestEndpoint(dstPt227);\n    connRef227->setRoutingType((ConnType)2);\n\n    ConnRef *connRef228 = new ConnRef(router, 228);\n    ConnEnd srcPt228(Point(137.924, 111.557), 15);\n    connRef228->setSourceEndpoint(srcPt228);\n    ConnEnd dstPt228(Point(137.924, 161.557), 15);\n    connRef228->setDestEndpoint(dstPt228);\n    connRef228->setRoutingType((ConnType)2);\n\n    ConnRef *connRef149 = new ConnRef(router, 149);\n    ConnEnd srcPt149(Point(1138.92, 161.557), 15);\n    connRef149->setSourceEndpoint(srcPt149);\n    ConnEnd dstPt149(Point(1188.92, 152.342), 15);\n    connRef149->setDestEndpoint(dstPt149);\n    connRef149->setRoutingType((ConnType)2);\n\n    ConnRef *connRef164 = new ConnRef(router, 164);\n    ConnEnd srcPt164(Point(437.924, 763.557), 15);\n    connRef164->setSourceEndpoint(srcPt164);\n    ConnEnd dstPt164(Point(487.924, 763.557), 15);\n    connRef164->setDestEndpoint(dstPt164);\n    connRef164->setRoutingType((ConnType)2);\n\n    ConnRef *connRef165 = new ConnRef(router, 165);\n    ConnEnd srcPt165(Point(437.924, 763.557), 15);\n    connRef165->setSourceEndpoint(srcPt165);\n    ConnEnd dstPt165(Point(727.924, 860.057), 15);\n    connRef165->setDestEndpoint(dstPt165);\n    connRef165->setRoutingType((ConnType)2);\n\n    ConnRef *connRef182 = new ConnRef(router, 182);\n    ConnEnd srcPt182(Point(77.9242, 763.557), 15);\n    connRef182->setSourceEndpoint(srcPt182);\n    ConnEnd dstPt182(Point(127.924, 763.557), 15);\n    connRef182->setDestEndpoint(dstPt182);\n    connRef182->setRoutingType((ConnType)2);\n\n    ConnRef *connRef183 = new ConnRef(router, 183);\n    ConnEnd srcPt183(Point(197.924, 315.557), 15);\n    connRef183->setSourceEndpoint(srcPt183);\n    ConnEnd dstPt183(Point(247.924, 315.557), 15);\n    connRef183->setDestEndpoint(dstPt183);\n    connRef183->setRoutingType((ConnType)2);\n\n    router->processTransaction();\n    router->outputDiagram(\"output/lineSegWrapperCrash6\");\n    delete router;\n    return 0;\n};\n"
  },
  {
    "path": "cola/libavoid/tests/lineSegWrapperCrash7.cpp",
    "content": "#include \"libavoid/libavoid.h\"\nusing namespace Avoid;\nint main(void) {\n    Router *router = new Router(OrthogonalRouting);\n    router->setRoutingPenalty((PenaltyType)0, 50);\n    router->setRoutingPenalty((PenaltyType)1, 0);\n    router->setRoutingPenalty((PenaltyType)2, 0);\n    router->setRoutingPenalty((PenaltyType)3, 4000);\n    router->setRoutingPenalty((PenaltyType)4, 0);\n\n    Polygon poly51(4);\n    poly51.ps[0] = Point(1038.92, 323.557);\n    poly51.ps[1] = Point(1038.92, 363.557);\n    poly51.ps[2] = Point(998.924, 363.557);\n    poly51.ps[3] = Point(998.924, 323.557);\n    new ShapeRef(router, poly51, 51);\n    \n    Polygon poly50(4);\n    poly50.ps[0] = Point(272.5, -82.1578);\n    poly50.ps[1] = Point(272.5, -47.1578);\n    poly50.ps[2] = Point(35.5, -47.1578);\n    poly50.ps[3] = Point(35.5, -82.1578);\n    new ShapeRef(router, poly50, 50);\n    \n    Polygon poly49(4);\n    poly49.ps[0] = Point(45.9242, 169.75);\n    poly49.ps[1] = Point(45.9242, 334.75);\n    poly49.ps[2] = Point(-242.076, 334.75);\n    poly49.ps[3] = Point(-242.076, 169.75);\n    new ShapeRef(router, poly49, 49);\n    \n    Polygon poly48(4);\n    poly48.ps[0] = Point(97.9242, 743.557);\n    poly48.ps[1] = Point(97.9242, 783.557);\n    poly48.ps[2] = Point(57.9242, 783.557);\n    poly48.ps[3] = Point(57.9242, 743.557);\n    new ShapeRef(router, poly48, 48);\n    \n    Polygon poly74(4);\n    poly74.ps[0] = Point(147.924, 609.557);\n    poly74.ps[1] = Point(147.924, 629.557);\n    poly74.ps[2] = Point(127.924, 629.557);\n    poly74.ps[3] = Point(127.924, 609.557);\n    new ShapeRef(router, poly74, 74);\n    \n    Polygon poly47(4);\n    poly47.ps[0] = Point(697.924, 271.557);\n    poly47.ps[1] = Point(697.924, 311.557);\n    poly47.ps[2] = Point(657.924, 311.557);\n    poly47.ps[3] = Point(657.924, 271.557);\n    new ShapeRef(router, poly47, 47);\n    \n    Polygon poly136(4);\n    poly136.ps[0] = Point(765.924, 273.557);\n    poly136.ps[1] = Point(765.924, 313.557);\n    poly136.ps[2] = Point(709.924, 313.557);\n    poly136.ps[3] = Point(709.924, 273.557);\n    new ShapeRef(router, poly136, 136);\n    \n    Polygon poly46(4);\n    poly46.ps[0] = Point(577.924, 415.557);\n    poly46.ps[1] = Point(577.924, 455.557);\n    poly46.ps[2] = Point(537.924, 455.557);\n    poly46.ps[3] = Point(537.924, 415.557);\n    new ShapeRef(router, poly46, 46);\n    \n    Polygon poly80(4);\n    poly80.ps[0] = Point(507.924, 753.557);\n    poly80.ps[1] = Point(507.924, 773.557);\n    poly80.ps[2] = Point(487.924, 773.557);\n    poly80.ps[3] = Point(487.924, 753.557);\n    new ShapeRef(router, poly80, 80);\n    \n    Polygon poly45(4);\n    poly45.ps[0] = Point(577.924, 34.8422);\n    poly45.ps[1] = Point(577.924, 74.8422);\n    poly45.ps[2] = Point(537.924, 74.8422);\n    poly45.ps[3] = Point(537.924, 34.8422);\n    new ShapeRef(router, poly45, 45);\n    \n    Polygon poly76(4);\n    poly76.ps[0] = Point(147.924, 753.557);\n    poly76.ps[1] = Point(147.924, 773.557);\n    poly76.ps[2] = Point(127.924, 773.557);\n    poly76.ps[3] = Point(127.924, 753.557);\n    new ShapeRef(router, poly76, 76);\n    \n    Polygon poly105(4);\n    poly105.ps[0] = Point(747.924, 850.057);\n    poly105.ps[1] = Point(747.924, 870.057);\n    poly105.ps[2] = Point(727.924, 870.057);\n    poly105.ps[3] = Point(727.924, 850.057);\n    new ShapeRef(router, poly105, 105);\n    \n    Polygon poly44(4);\n    poly44.ps[0] = Point(97.9242, 507.557);\n    poly44.ps[1] = Point(97.9242, 547.557);\n    poly44.ps[2] = Point(57.9242, 547.557);\n    poly44.ps[3] = Point(57.9242, 507.557);\n    new ShapeRef(router, poly44, 44);\n    \n    Polygon poly43(4);\n    poly43.ps[0] = Point(1038.92, 1.84222);\n    poly43.ps[1] = Point(1038.92, 41.8422);\n    poly43.ps[2] = Point(998.924, 41.8422);\n    poly43.ps[3] = Point(998.924, 1.84222);\n    new ShapeRef(router, poly43, 43);\n    \n    Polygon poly42(4);\n    poly42.ps[0] = Point(697.924, 415.557);\n    poly42.ps[1] = Point(697.924, 455.557);\n    poly42.ps[2] = Point(657.924, 455.557);\n    poly42.ps[3] = Point(657.924, 415.557);\n    new ShapeRef(router, poly42, 42);\n    \n    Polygon poly41(4);\n    poly41.ps[0] = Point(577.924, 743.557);\n    poly41.ps[1] = Point(577.924, 783.557);\n    poly41.ps[2] = Point(537.924, 783.557);\n    poly41.ps[3] = Point(537.924, 743.557);\n    new ShapeRef(router, poly41, 41);\n    \n    Polygon poly68(4);\n    poly68.ps[0] = Point(147.924, 151.557);\n    poly68.ps[1] = Point(147.924, 171.557);\n    poly68.ps[2] = Point(127.924, 171.557);\n    poly68.ps[3] = Point(127.924, 151.557);\n    new ShapeRef(router, poly68, 68);\n    \n    Polygon poly3(4);\n    poly3.ps[0] = Point(1278.92, -22.1578);\n    poly3.ps[1] = Point(1278.92, 17.8422);\n    poly3.ps[2] = Point(1238.92, 17.8422);\n    poly3.ps[3] = Point(1238.92, -22.1578);\n    new ShapeRef(router, poly3, 3);\n    \n    Polygon poly71(4);\n    poly71.ps[0] = Point(267.924, 305.557);\n    poly71.ps[1] = Point(267.924, 325.557);\n    poly71.ps[2] = Point(247.924, 325.557);\n    poly71.ps[3] = Point(247.924, 305.557);\n    new ShapeRef(router, poly71, 71);\n    \n    Polygon poly4(4);\n    poly4.ps[0] = Point(1371.92, 29.8422);\n    poly4.ps[1] = Point(1371.92, 69.8422);\n    poly4.ps[2] = Point(1331.92, 69.8422);\n    poly4.ps[3] = Point(1331.92, 29.8422);\n    new ShapeRef(router, poly4, 4);\n    \n    Polygon poly56(4);\n    poly56.ps[0] = Point(457.924, -44.6578);\n    poly56.ps[1] = Point(457.924, -4.65778);\n    poly56.ps[2] = Point(417.924, -4.65778);\n    poly56.ps[3] = Point(417.924, -44.6578);\n    new ShapeRef(router, poly56, 56);\n    \n    Polygon poly40(4);\n    poly40.ps[0] = Point(97.9242, 141.557);\n    poly40.ps[1] = Point(97.9242, 181.557);\n    poly40.ps[2] = Point(57.9242, 181.557);\n    poly40.ps[3] = Point(57.9242, 141.557);\n    new ShapeRef(router, poly40, 40);\n    \n    Polygon poly60(4);\n    poly60.ps[0] = Point(937.924, 1.84222);\n    poly60.ps[1] = Point(937.924, 41.8422);\n    poly60.ps[2] = Point(897.924, 41.8422);\n    poly60.ps[3] = Point(897.924, 1.84222);\n    new ShapeRef(router, poly60, 60);\n    \n    Polygon poly39(4);\n    poly39.ps[0] = Point(457.924, 141.557);\n    poly39.ps[1] = Point(457.924, 181.557);\n    poly39.ps[2] = Point(417.924, 181.557);\n    poly39.ps[3] = Point(417.924, 141.557);\n    new ShapeRef(router, poly39, 39);\n    \n    Polygon poly38(4);\n    poly38.ps[0] = Point(217.924, 507.557);\n    poly38.ps[1] = Point(217.924, 547.557);\n    poly38.ps[2] = Point(177.924, 547.557);\n    poly38.ps[3] = Point(177.924, 507.557);\n    new ShapeRef(router, poly38, 38);\n    \n    Polygon poly77(4);\n    poly77.ps[0] = Point(267.924, 753.557);\n    poly77.ps[1] = Point(267.924, 773.557);\n    poly77.ps[2] = Point(247.924, 773.557);\n    poly77.ps[3] = Point(247.924, 753.557);\n    new ShapeRef(router, poly77, 77);\n    \n    Polygon poly37(4);\n    poly37.ps[0] = Point(457.924, 607.557);\n    poly37.ps[1] = Point(457.924, 647.557);\n    poly37.ps[2] = Point(417.924, 647.557);\n    poly37.ps[3] = Point(417.924, 607.557);\n    new ShapeRef(router, poly37, 37);\n    \n    Polygon poly116(4);\n    poly116.ps[0] = Point(165.924, 693.557);\n    poly116.ps[1] = Point(165.924, 733.557);\n    poly116.ps[2] = Point(109.924, 733.557);\n    poly116.ps[3] = Point(109.924, 693.557);\n    new ShapeRef(router, poly116, 116);\n    \n    Polygon poly119(4);\n    poly119.ps[0] = Point(405.924, 693.557);\n    poly119.ps[1] = Point(405.924, 733.557);\n    poly119.ps[2] = Point(349.924, 733.557);\n    poly119.ps[3] = Point(349.924, 693.557);\n    new ShapeRef(router, poly119, 119);\n    \n    Polygon poly117(4);\n    poly117.ps[0] = Point(285.924, 693.557);\n    poly117.ps[1] = Point(285.924, 733.557);\n    poly117.ps[2] = Point(229.924, 733.557);\n    poly117.ps[3] = Point(229.924, 693.557);\n    new ShapeRef(router, poly117, 117);\n    \n    Polygon poly102(4);\n    poly102.ps[0] = Point(1088.92, -70.6578);\n    poly102.ps[1] = Point(1088.92, -50.6578);\n    poly102.ps[2] = Point(1068.92, -50.6578);\n    poly102.ps[3] = Point(1068.92, -70.6578);\n    new ShapeRef(router, poly102, 102);\n    \n    Polygon poly118(4);\n    poly118.ps[0] = Point(405.924, 557.557);\n    poly118.ps[1] = Point(405.924, 597.557);\n    poly118.ps[2] = Point(349.924, 597.557);\n    poly118.ps[3] = Point(349.924, 557.557);\n    new ShapeRef(router, poly118, 118);\n    \n    Polygon poly130(4);\n    poly130.ps[0] = Point(525.924, 365.557);\n    poly130.ps[1] = Point(525.924, 405.557);\n    poly130.ps[2] = Point(469.924, 405.557);\n    poly130.ps[3] = Point(469.924, 365.557);\n    new ShapeRef(router, poly130, 130);\n    \n    Polygon poly122(4);\n    poly122.ps[0] = Point(525.924, 833.057);\n    poly122.ps[1] = Point(525.924, 873.057);\n    poly122.ps[2] = Point(469.924, 873.057);\n    poly122.ps[3] = Point(469.924, 833.057);\n    new ShapeRef(router, poly122, 122);\n    \n    Polygon poly123(4);\n    poly123.ps[0] = Point(645.924, 833.057);\n    poly123.ps[1] = Point(645.924, 873.057);\n    poly123.ps[2] = Point(589.924, 873.057);\n    poly123.ps[3] = Point(589.924, 833.057);\n    new ShapeRef(router, poly123, 123);\n    \n    Polygon poly124(4);\n    poly124.ps[0] = Point(405.924, 91.5565);\n    poly124.ps[1] = Point(405.924, 131.557);\n    poly124.ps[2] = Point(349.924, 131.557);\n    poly124.ps[3] = Point(349.924, 91.5565);\n    new ShapeRef(router, poly124, 124);\n    \n    Polygon poly146(4);\n    poly146.ps[0] = Point(45.9242, 232.5);\n    poly146.ps[1] = Point(45.9242, 272.5);\n    poly146.ps[2] = Point(-14.0758, 272.5);\n    poly146.ps[3] = Point(-14.0758, 232.5);\n    new ShapeRef(router, poly146, 146);\n    \n    Polygon poly134(4);\n    poly134.ps[0] = Point(885.924, 365.557);\n    poly134.ps[1] = Point(885.924, 405.557);\n    poly134.ps[2] = Point(829.924, 405.557);\n    poly134.ps[3] = Point(829.924, 365.557);\n    new ShapeRef(router, poly134, 134);\n    \n    Polygon poly7(4);\n    poly7.ps[0] = Point(1278.92, -80.6578);\n    poly7.ps[1] = Point(1278.92, -40.6578);\n    poly7.ps[2] = Point(1238.92, -40.6578);\n    poly7.ps[3] = Point(1238.92, -80.6578);\n    new ShapeRef(router, poly7, 7);\n    \n    Polygon poly98(4);\n    poly98.ps[0] = Point(1208.92, 378.557);\n    poly98.ps[1] = Point(1208.92, 398.557);\n    poly98.ps[2] = Point(1188.92, 398.557);\n    poly98.ps[3] = Point(1188.92, 378.557);\n    new ShapeRef(router, poly98, 98);\n    \n    Polygon poly139(4);\n    poly139.ps[0] = Point(1106.92, 82.3422);\n    poly139.ps[1] = Point(1106.92, 122.342);\n    poly139.ps[2] = Point(1050.92, 122.342);\n    poly139.ps[3] = Point(1050.92, 82.3422);\n    new ShapeRef(router, poly139, 139);\n    \n    Polygon poly140(4);\n    poly140.ps[0] = Point(1106.92, -9.65778);\n    poly140.ps[1] = Point(1106.92, 30.3422);\n    poly140.ps[2] = Point(1050.92, 30.3422);\n    poly140.ps[3] = Point(1050.92, -9.65778);\n    new ShapeRef(router, poly140, 140);\n    \n    Polygon poly91(4);\n    poly91.ps[0] = Point(627.924, 517.557);\n    poly91.ps[1] = Point(627.924, 537.557);\n    poly91.ps[2] = Point(607.924, 537.557);\n    poly91.ps[3] = Point(607.924, 517.557);\n    new ShapeRef(router, poly91, 91);\n    \n    Polygon poly8(4);\n    poly8.ps[0] = Point(1158.92, -80.6578);\n    poly8.ps[1] = Point(1158.92, -40.6578);\n    poly8.ps[2] = Point(1118.92, -40.6578);\n    poly8.ps[3] = Point(1118.92, -80.6578);\n    new ShapeRef(router, poly8, 8);\n    \n    Polygon poly87(4);\n    poly87.ps[0] = Point(627.924, 35.8422);\n    poly87.ps[1] = Point(627.924, 55.8422);\n    poly87.ps[2] = Point(607.924, 55.8422);\n    poly87.ps[3] = Point(607.924, 35.8422);\n    new ShapeRef(router, poly87, 87);\n    \n    Polygon poly72(4);\n    poly72.ps[0] = Point(87.9242, 357.557);\n    poly72.ps[1] = Point(87.9242, 377.557);\n    poly72.ps[2] = Point(67.9242, 377.557);\n    poly72.ps[3] = Point(67.9242, 357.557);\n    new ShapeRef(router, poly72, 72);\n    \n    Polygon poly94(4);\n    poly94.ps[0] = Point(867.924, 425.557);\n    poly94.ps[1] = Point(867.924, 445.557);\n    poly94.ps[2] = Point(847.924, 445.557);\n    poly94.ps[3] = Point(847.924, 425.557);\n    new ShapeRef(router, poly94, 94);\n    \n    Polygon poly92(4);\n    poly92.ps[0] = Point(627.924, 425.557);\n    poly92.ps[1] = Point(627.924, 445.557);\n    poly92.ps[2] = Point(607.924, 445.557);\n    poly92.ps[3] = Point(607.924, 425.557);\n    new ShapeRef(router, poly92, 92);\n    \n    Polygon poly81(4);\n    poly81.ps[0] = Point(627.924, 753.557);\n    poly81.ps[1] = Point(627.924, 773.557);\n    poly81.ps[2] = Point(607.924, 773.557);\n    poly81.ps[3] = Point(607.924, 753.557);\n    new ShapeRef(router, poly81, 81);\n    \n    Polygon poly6(4);\n    poly6.ps[0] = Point(1371.92, -80.6578);\n    poly6.ps[1] = Point(1371.92, -40.6578);\n    poly6.ps[2] = Point(1331.92, -40.6578);\n    poly6.ps[3] = Point(1331.92, -80.6578);\n    new ShapeRef(router, poly6, 6);\n    \n    Polygon poly97(4);\n    poly97.ps[0] = Point(1088.92, 378.557);\n    poly97.ps[1] = Point(1088.92, 398.557);\n    poly97.ps[2] = Point(1068.92, 398.557);\n    poly97.ps[3] = Point(1068.92, 378.557);\n    new ShapeRef(router, poly97, 97);\n    \n    Polygon poly36(4);\n    poly36.ps[0] = Point(697.924, 507.557);\n    poly36.ps[1] = Point(697.924, 547.557);\n    poly36.ps[2] = Point(657.924, 547.557);\n    poly36.ps[3] = Point(657.924, 507.557);\n    new ShapeRef(router, poly36, 36);\n    \n    Polygon poly35(4);\n    poly35.ps[0] = Point(1158.92, 40.3422);\n    poly35.ps[1] = Point(1158.92, 80.3422);\n    poly35.ps[2] = Point(1118.92, 80.3422);\n    poly35.ps[3] = Point(1118.92, 40.3422);\n    new ShapeRef(router, poly35, 35);\n    \n    Polygon poly125(4);\n    poly125.ps[0] = Point(405.924, -42.6578);\n    poly125.ps[1] = Point(405.924, -2.65778);\n    poly125.ps[2] = Point(349.924, -2.65778);\n    poly125.ps[3] = Point(349.924, -42.6578);\n    new ShapeRef(router, poly125, 125);\n    \n    Polygon poly126(4);\n    poly126.ps[0] = Point(525.924, -24.1578);\n    poly126.ps[1] = Point(525.924, 15.8422);\n    poly126.ps[2] = Point(469.924, 15.8422);\n    poly126.ps[3] = Point(469.924, -24.1578);\n    new ShapeRef(router, poly126, 126);\n    \n    Polygon poly127(4);\n    poly127.ps[0] = Point(645.924, -24.1578);\n    poly127.ps[1] = Point(645.924, 15.8422);\n    poly127.ps[2] = Point(589.924, 15.8422);\n    poly127.ps[3] = Point(589.924, -24.1578);\n    new ShapeRef(router, poly127, 127);\n    \n    Polygon poly128(4);\n    poly128.ps[0] = Point(765.924, 504.057);\n    poly128.ps[1] = Point(765.924, 544.057);\n    poly128.ps[2] = Point(709.924, 544.057);\n    poly128.ps[3] = Point(709.924, 504.057);\n    new ShapeRef(router, poly128, 128);\n    \n    Polygon poly129(4);\n    poly129.ps[0] = Point(525.924, 457.557);\n    poly129.ps[1] = Point(525.924, 497.557);\n    poly129.ps[2] = Point(469.924, 497.557);\n    poly129.ps[3] = Point(469.924, 457.557);\n    new ShapeRef(router, poly129, 129);\n    \n    Polygon poly109(4);\n    poly109.ps[0] = Point(285.924, 91.5565);\n    poly109.ps[1] = Point(285.924, 131.557);\n    poly109.ps[2] = Point(229.924, 131.557);\n    poly109.ps[3] = Point(229.924, 91.5565);\n    new ShapeRef(router, poly109, 109);\n    \n    Polygon poly103(4);\n    poly103.ps[0] = Point(968.924, 270.557);\n    poly103.ps[1] = Point(968.924, 290.557);\n    poly103.ps[2] = Point(948.924, 290.557);\n    poly103.ps[3] = Point(948.924, 270.557);\n    new ShapeRef(router, poly103, 103);\n    \n    Polygon poly96(4);\n    poly96.ps[0] = Point(747.924, 333.557);\n    poly96.ps[1] = Point(747.924, 353.557);\n    poly96.ps[2] = Point(727.924, 353.557);\n    poly96.ps[3] = Point(727.924, 333.557);\n    new ShapeRef(router, poly96, 96);\n    \n    Polygon poly143(4);\n    poly143.ps[0] = Point(986.924, 210.557);\n    poly143.ps[1] = Point(986.924, 250.557);\n    poly143.ps[2] = Point(930.924, 250.557);\n    poly143.ps[3] = Point(930.924, 210.557);\n    new ShapeRef(router, poly143, 143);\n    \n    Polygon poly53(4);\n    poly53.ps[0] = Point(577.924, 323.557);\n    poly53.ps[1] = Point(577.924, 363.557);\n    poly53.ps[2] = Point(537.924, 363.557);\n    poly53.ps[3] = Point(537.924, 323.557);\n    new ShapeRef(router, poly53, 53);\n    \n    Polygon poly75(4);\n    poly75.ps[0] = Point(87.9242, 651.557);\n    poly75.ps[1] = Point(87.9242, 671.557);\n    poly75.ps[2] = Point(67.9242, 671.557);\n    poly75.ps[3] = Point(67.9242, 651.557);\n    new ShapeRef(router, poly75, 75);\n    \n    Polygon poly55(4);\n    poly55.ps[0] = Point(457.924, 7.34222);\n    poly55.ps[1] = Point(457.924, 47.3422);\n    poly55.ps[2] = Point(417.924, 47.3422);\n    poly55.ps[3] = Point(417.924, 7.34222);\n    new ShapeRef(router, poly55, 55);\n    \n    Polygon poly34(4);\n    poly34.ps[0] = Point(1278.92, 323.557);\n    poly34.ps[1] = Point(1278.92, 363.557);\n    poly34.ps[2] = Point(1238.92, 363.557);\n    poly34.ps[3] = Point(1238.92, 323.557);\n    new ShapeRef(router, poly34, 34);\n    \n    Polygon poly93(4);\n    poly93.ps[0] = Point(867.924, 333.557);\n    poly93.ps[1] = Point(867.924, 353.557);\n    poly93.ps[2] = Point(847.924, 353.557);\n    poly93.ps[3] = Point(847.924, 333.557);\n    new ShapeRef(router, poly93, 93);\n    \n    Polygon poly100(4);\n    poly100.ps[0] = Point(1088.92, 50.3422);\n    poly100.ps[1] = Point(1088.92, 70.3422);\n    poly100.ps[2] = Point(1068.92, 70.3422);\n    poly100.ps[3] = Point(1068.92, 50.3422);\n    new ShapeRef(router, poly100, 100);\n    \n    Polygon poly70(4);\n    poly70.ps[0] = Point(207.924, 203.557);\n    poly70.ps[1] = Point(207.924, 223.557);\n    poly70.ps[2] = Point(187.924, 223.557);\n    poly70.ps[3] = Point(187.924, 203.557);\n    new ShapeRef(router, poly70, 70);\n    \n    Polygon poly110(4);\n    poly110.ps[0] = Point(287.924, 193.557);\n    poly110.ps[1] = Point(287.924, 233.557);\n    poly110.ps[2] = Point(231.924, 233.557);\n    poly110.ps[3] = Point(231.924, 193.557);\n    new ShapeRef(router, poly110, 110);\n    \n    Polygon poly111(4);\n    poly111.ps[0] = Point(285.924, 245.557);\n    poly111.ps[1] = Point(285.924, 285.557);\n    poly111.ps[2] = Point(229.924, 285.557);\n    poly111.ps[3] = Point(229.924, 245.557);\n    new ShapeRef(router, poly111, 111);\n    \n    Polygon poly135(4);\n    poly135.ps[0] = Point(885.924, 91.5565);\n    poly135.ps[1] = Point(885.924, 131.557);\n    poly135.ps[2] = Point(829.924, 131.557);\n    poly135.ps[3] = Point(829.924, 91.5565);\n    new ShapeRef(router, poly135, 135);\n    \n    Polygon poly1(4);\n    poly1.ps[0] = Point(817.924, 840.057);\n    poly1.ps[1] = Point(817.924, 880.057);\n    poly1.ps[2] = Point(777.924, 880.057);\n    poly1.ps[3] = Point(777.924, 840.057);\n    new ShapeRef(router, poly1, 1);\n    \n    Polygon poly67(4);\n    poly67.ps[0] = Point(147.924, 24.8422);\n    poly67.ps[1] = Point(147.924, 44.8422);\n    poly67.ps[2] = Point(127.924, 44.8422);\n    poly67.ps[3] = Point(127.924, 24.8422);\n    new ShapeRef(router, poly67, 67);\n    \n    Polygon poly59(4);\n    poly59.ps[0] = Point(937.924, 323.557);\n    poly59.ps[1] = Point(937.924, 363.557);\n    poly59.ps[2] = Point(897.924, 363.557);\n    poly59.ps[3] = Point(897.924, 323.557);\n    new ShapeRef(router, poly59, 59);\n    \n    Polygon poly89(4);\n    poly89.ps[0] = Point(507.924, 517.557);\n    poly89.ps[1] = Point(507.924, 537.557);\n    poly89.ps[2] = Point(487.924, 537.557);\n    poly89.ps[3] = Point(487.924, 517.557);\n    new ShapeRef(router, poly89, 89);\n    \n    Polygon poly144(4);\n    poly144.ps[0] = Point(765.924, 91.5565);\n    poly144.ps[1] = Point(765.924, 131.557);\n    poly144.ps[2] = Point(709.924, 131.557);\n    poly144.ps[3] = Point(709.924, 91.5565);\n    new ShapeRef(router, poly144, 144);\n    \n    Polygon poly33(4);\n    poly33.ps[0] = Point(937.924, 415.557);\n    poly33.ps[1] = Point(937.924, 455.557);\n    poly33.ps[2] = Point(897.924, 455.557);\n    poly33.ps[3] = Point(897.924, 415.557);\n    new ShapeRef(router, poly33, 33);\n    \n    Polygon poly66(4);\n    poly66.ps[0] = Point(747.924, -70.6578);\n    poly66.ps[1] = Point(747.924, -50.6578);\n    poly66.ps[2] = Point(727.924, -50.6578);\n    poly66.ps[3] = Point(727.924, -70.6578);\n    new ShapeRef(router, poly66, 66);\n    \n    Polygon poly145(4);\n    poly145.ps[0] = Point(765.924, 790.057);\n    poly145.ps[1] = Point(765.924, 830.057);\n    poly145.ps[2] = Point(709.924, 830.057);\n    poly145.ps[3] = Point(709.924, 790.057);\n    new ShapeRef(router, poly145, 145);\n    \n    Polygon poly82(4);\n    poly82.ps[0] = Point(507.924, 893.057);\n    poly82.ps[1] = Point(507.924, 913.057);\n    poly82.ps[2] = Point(487.924, 913.057);\n    poly82.ps[3] = Point(487.924, 893.057);\n    new ShapeRef(router, poly82, 82);\n    \n    Polygon poly32(4);\n    poly32.ps[0] = Point(1038.92, 141.557);\n    poly32.ps[1] = Point(1038.92, 181.557);\n    poly32.ps[2] = Point(998.924, 181.557);\n    poly32.ps[3] = Point(998.924, 141.557);\n    new ShapeRef(router, poly32, 32);\n    \n    Polygon poly61(4);\n    poly61.ps[0] = Point(577.924, -44.6578);\n    poly61.ps[1] = Point(577.924, -4.65778);\n    poly61.ps[2] = Point(537.924, -4.65778);\n    poly61.ps[3] = Point(537.924, -44.6578);\n    new ShapeRef(router, poly61, 61);\n    \n    Polygon poly138(4);\n    poly138.ps[0] = Point(1226.92, 318.557);\n    poly138.ps[1] = Point(1226.92, 358.557);\n    poly138.ps[2] = Point(1170.92, 358.557);\n    poly138.ps[3] = Point(1170.92, 318.557);\n    new ShapeRef(router, poly138, 138);\n    \n    Polygon poly54(4);\n    poly54.ps[0] = Point(697.924, 323.557);\n    poly54.ps[1] = Point(697.924, 363.557);\n    poly54.ps[2] = Point(657.924, 363.557);\n    poly54.ps[3] = Point(657.924, 323.557);\n    new ShapeRef(router, poly54, 54);\n    \n    Polygon poly142(4);\n    poly142.ps[0] = Point(1106.92, -130.658);\n    poly142.ps[1] = Point(1106.92, -90.6578);\n    poly142.ps[2] = Point(1050.92, -90.6578);\n    poly142.ps[3] = Point(1050.92, -130.658);\n    new ShapeRef(router, poly142, 142);\n    \n    Polygon poly31(4);\n    poly31.ps[0] = Point(1278.92, 141.557);\n    poly31.ps[1] = Point(1278.92, 181.557);\n    poly31.ps[2] = Point(1238.92, 181.557);\n    poly31.ps[3] = Point(1238.92, 141.557);\n    new ShapeRef(router, poly31, 31);\n    \n    Polygon poly78(4);\n    poly78.ps[0] = Point(387.924, 617.557);\n    poly78.ps[1] = Point(387.924, 637.557);\n    poly78.ps[2] = Point(367.924, 637.557);\n    poly78.ps[3] = Point(367.924, 617.557);\n    new ShapeRef(router, poly78, 78);\n    \n    Polygon poly104(4);\n    poly104.ps[0] = Point(747.924, 151.557);\n    poly104.ps[1] = Point(747.924, 171.557);\n    poly104.ps[2] = Point(727.924, 171.557);\n    poly104.ps[3] = Point(727.924, 151.557);\n    new ShapeRef(router, poly104, 104);\n    \n    Polygon poly58(4);\n    poly58.ps[0] = Point(97.9242, 14.8422);\n    poly58.ps[1] = Point(97.9242, 54.8422);\n    poly58.ps[2] = Point(57.9242, 54.8422);\n    poly58.ps[3] = Point(57.9242, 14.8422);\n    new ShapeRef(router, poly58, 58);\n    \n    Polygon poly30(4);\n    poly30.ps[0] = Point(1278.92, 415.557);\n    poly30.ps[1] = Point(1278.92, 455.557);\n    poly30.ps[2] = Point(1238.92, 455.557);\n    poly30.ps[3] = Point(1238.92, 415.557);\n    new ShapeRef(router, poly30, 30);\n    \n    Polygon poly64(4);\n    poly64.ps[0] = Point(817.924, 554.057);\n    poly64.ps[1] = Point(817.924, 594.057);\n    poly64.ps[2] = Point(777.924, 594.057);\n    poly64.ps[3] = Point(777.924, 554.057);\n    new ShapeRef(router, poly64, 64);\n    \n    Polygon poly85(4);\n    poly85.ps[0] = Point(387.924, 17.3422);\n    poly85.ps[1] = Point(387.924, 37.3422);\n    poly85.ps[2] = Point(367.924, 37.3422);\n    poly85.ps[3] = Point(367.924, 17.3422);\n    new ShapeRef(router, poly85, 85);\n    \n    Polygon poly83(4);\n    poly83.ps[0] = Point(627.924, 893.057);\n    poly83.ps[1] = Point(627.924, 913.057);\n    poly83.ps[2] = Point(607.924, 913.057);\n    poly83.ps[3] = Point(607.924, 893.057);\n    new ShapeRef(router, poly83, 83);\n    \n    Polygon poly108(4);\n    poly108.ps[0] = Point(165.924, 91.5565);\n    poly108.ps[1] = Point(165.924, 131.557);\n    poly108.ps[2] = Point(109.924, 131.557);\n    poly108.ps[3] = Point(109.924, 91.5565);\n    new ShapeRef(router, poly108, 108);\n    \n    Polygon poly5(4);\n    poly5.ps[0] = Point(1371.92, -22.1578);\n    poly5.ps[1] = Point(1371.92, 17.8422);\n    poly5.ps[2] = Point(1331.92, 17.8422);\n    poly5.ps[3] = Point(1331.92, -22.1578);\n    new ShapeRef(router, poly5, 5);\n    \n    Polygon poly131(4);\n    poly131.ps[0] = Point(645.924, 457.557);\n    poly131.ps[1] = Point(645.924, 497.557);\n    poly131.ps[2] = Point(589.924, 497.557);\n    poly131.ps[3] = Point(589.924, 457.557);\n    new ShapeRef(router, poly131, 131);\n    \n    Polygon poly106(4);\n    poly106.ps[0] = Point(765.924, -130.658);\n    poly106.ps[1] = Point(765.924, -90.6578);\n    poly106.ps[2] = Point(709.924, -90.6578);\n    poly106.ps[3] = Point(709.924, -130.658);\n    new ShapeRef(router, poly106, 106);\n    \n    Polygon poly86(4);\n    poly86.ps[0] = Point(507.924, 35.8422);\n    poly86.ps[1] = Point(507.924, 55.8422);\n    poly86.ps[2] = Point(487.924, 55.8422);\n    poly86.ps[3] = Point(487.924, 35.8422);\n    new ShapeRef(router, poly86, 86);\n    \n    Polygon poly84(4);\n    poly84.ps[0] = Point(387.924, 151.557);\n    poly84.ps[1] = Point(387.924, 171.557);\n    poly84.ps[2] = Point(367.924, 171.557);\n    poly84.ps[3] = Point(367.924, 151.557);\n    new ShapeRef(router, poly84, 84);\n    \n    Polygon poly88(4);\n    poly88.ps[0] = Point(747.924, 564.057);\n    poly88.ps[1] = Point(747.924, 584.057);\n    poly88.ps[2] = Point(727.924, 584.057);\n    poly88.ps[3] = Point(727.924, 564.057);\n    new ShapeRef(router, poly88, 88);\n    \n    Polygon poly107(4);\n    poly107.ps[0] = Point(165.924, -35.1578);\n    poly107.ps[1] = Point(165.924, 4.84222);\n    poly107.ps[2] = Point(109.924, 4.84222);\n    poly107.ps[3] = Point(109.924, -35.1578);\n    new ShapeRef(router, poly107, 107);\n    \n    Polygon poly29(4);\n    poly29.ps[0] = Point(1038.92, 415.557);\n    poly29.ps[1] = Point(1038.92, 455.557);\n    poly29.ps[2] = Point(998.924, 455.557);\n    poly29.ps[3] = Point(998.924, 415.557);\n    new ShapeRef(router, poly29, 29);\n    \n    Polygon poly28(4);\n    poly28.ps[0] = Point(817.924, 323.557);\n    poly28.ps[1] = Point(817.924, 363.557);\n    poly28.ps[2] = Point(777.924, 363.557);\n    poly28.ps[3] = Point(777.924, 323.557);\n    new ShapeRef(router, poly28, 28);\n    \n    Polygon poly27(4);\n    poly27.ps[0] = Point(577.924, 507.557);\n    poly27.ps[1] = Point(577.924, 547.557);\n    poly27.ps[2] = Point(537.924, 547.557);\n    poly27.ps[3] = Point(537.924, 507.557);\n    new ShapeRef(router, poly27, 27);\n    \n    Polygon poly99(4);\n    poly99.ps[0] = Point(1088.92, 142.342);\n    poly99.ps[1] = Point(1088.92, 162.342);\n    poly99.ps[2] = Point(1068.92, 162.342);\n    poly99.ps[3] = Point(1068.92, 142.342);\n    new ShapeRef(router, poly99, 99);\n    \n    Polygon poly57(4);\n    poly57.ps[0] = Point(817.924, 141.557);\n    poly57.ps[1] = Point(817.924, 181.557);\n    poly57.ps[2] = Point(777.924, 181.557);\n    poly57.ps[3] = Point(777.924, 141.557);\n    new ShapeRef(router, poly57, 57);\n    \n    Polygon poly26(4);\n    poly26.ps[0] = Point(697.924, 743.557);\n    poly26.ps[1] = Point(697.924, 783.557);\n    poly26.ps[2] = Point(657.924, 783.557);\n    poly26.ps[3] = Point(657.924, 743.557);\n    new ShapeRef(router, poly26, 26);\n    \n    Polygon poly133(4);\n    poly133.ps[0] = Point(885.924, 273.557);\n    poly133.ps[1] = Point(885.924, 313.557);\n    poly133.ps[2] = Point(829.924, 313.557);\n    poly133.ps[3] = Point(829.924, 273.557);\n    new ShapeRef(router, poly133, 133);\n    \n    Polygon poly25(4);\n    poly25.ps[0] = Point(697.924, 883.057);\n    poly25.ps[1] = Point(697.924, 923.057);\n    poly25.ps[2] = Point(657.924, 923.057);\n    poly25.ps[3] = Point(657.924, 883.057);\n    new ShapeRef(router, poly25, 25);\n    \n    Polygon poly69(4);\n    poly69.ps[0] = Point(267.924, 151.557);\n    poly69.ps[1] = Point(267.924, 171.557);\n    poly69.ps[2] = Point(247.924, 171.557);\n    poly69.ps[3] = Point(247.924, 151.557);\n    new ShapeRef(router, poly69, 69);\n    \n    Polygon poly24(4);\n    poly24.ps[0] = Point(457.924, 743.557);\n    poly24.ps[1] = Point(457.924, 783.557);\n    poly24.ps[2] = Point(417.924, 783.557);\n    poly24.ps[3] = Point(417.924, 743.557);\n    new ShapeRef(router, poly24, 24);\n    \n    Polygon poly141(4);\n    poly141.ps[0] = Point(1226.92, 82.3422);\n    poly141.ps[1] = Point(1226.92, 122.342);\n    poly141.ps[2] = Point(1170.92, 122.342);\n    poly141.ps[3] = Point(1170.92, 82.3422);\n    new ShapeRef(router, poly141, 141);\n    \n    Polygon poly23(4);\n    poly23.ps[0] = Point(337.924, 141.557);\n    poly23.ps[1] = Point(337.924, 181.557);\n    poly23.ps[2] = Point(297.924, 181.557);\n    poly23.ps[3] = Point(297.924, 141.557);\n    new ShapeRef(router, poly23, 23);\n    \n    Polygon poly137(4);\n    poly137.ps[0] = Point(1106.92, 318.557);\n    poly137.ps[1] = Point(1106.92, 358.557);\n    poly137.ps[2] = Point(1050.92, 358.557);\n    poly137.ps[3] = Point(1050.92, 318.557);\n    new ShapeRef(router, poly137, 137);\n    \n    Polygon poly22(4);\n    poly22.ps[0] = Point(697.924, 34.8422);\n    poly22.ps[1] = Point(697.924, 74.8422);\n    poly22.ps[2] = Point(657.924, 74.8422);\n    poly22.ps[3] = Point(657.924, 34.8422);\n    new ShapeRef(router, poly22, 22);\n    \n    Polygon poly121(4);\n    poly121.ps[0] = Point(645.924, 693.557);\n    poly121.ps[1] = Point(645.924, 733.557);\n    poly121.ps[2] = Point(589.924, 733.557);\n    poly121.ps[3] = Point(589.924, 693.557);\n    new ShapeRef(router, poly121, 121);\n    \n    Polygon poly112(4);\n    poly112.ps[0] = Point(167.924, 347.557);\n    poly112.ps[1] = Point(167.924, 387.557);\n    poly112.ps[2] = Point(111.924, 387.557);\n    poly112.ps[3] = Point(111.924, 347.557);\n    new ShapeRef(router, poly112, 112);\n    \n    Polygon poly113(4);\n    poly113.ps[0] = Point(165.924, 457.557);\n    poly113.ps[1] = Point(165.924, 497.557);\n    poly113.ps[2] = Point(109.924, 497.557);\n    poly113.ps[3] = Point(109.924, 457.557);\n    new ShapeRef(router, poly113, 113);\n    \n    Polygon poly120(4);\n    poly120.ps[0] = Point(525.924, 693.557);\n    poly120.ps[1] = Point(525.924, 733.557);\n    poly120.ps[2] = Point(469.924, 733.557);\n    poly120.ps[3] = Point(469.924, 693.557);\n    new ShapeRef(router, poly120, 120);\n    \n    Polygon poly114(4);\n    poly114.ps[0] = Point(165.924, 549.557);\n    poly114.ps[1] = Point(165.924, 589.557);\n    poly114.ps[2] = Point(109.924, 589.557);\n    poly114.ps[3] = Point(109.924, 549.557);\n    new ShapeRef(router, poly114, 114);\n    \n    Polygon poly115(4);\n    poly115.ps[0] = Point(167.924, 641.557);\n    poly115.ps[1] = Point(167.924, 681.557);\n    poly115.ps[2] = Point(111.924, 681.557);\n    poly115.ps[3] = Point(111.924, 641.557);\n    new ShapeRef(router, poly115, 115);\n    \n    Polygon poly101(4);\n    poly101.ps[0] = Point(1208.92, 142.342);\n    poly101.ps[1] = Point(1208.92, 162.342);\n    poly101.ps[2] = Point(1188.92, 162.342);\n    poly101.ps[3] = Point(1188.92, 142.342);\n    new ShapeRef(router, poly101, 101);\n    \n    Polygon poly21(4);\n    poly21.ps[0] = Point(937.924, 141.557);\n    poly21.ps[1] = Point(937.924, 181.557);\n    poly21.ps[2] = Point(897.924, 181.557);\n    poly21.ps[3] = Point(897.924, 141.557);\n    new ShapeRef(router, poly21, 21);\n    \n    Polygon poly20(4);\n    poly20.ps[0] = Point(337.924, 507.557);\n    poly20.ps[1] = Point(337.924, 547.557);\n    poly20.ps[2] = Point(297.924, 547.557);\n    poly20.ps[3] = Point(297.924, 507.557);\n    new ShapeRef(router, poly20, 20);\n    \n    Polygon poly79(4);\n    poly79.ps[0] = Point(387.924, 753.557);\n    poly79.ps[1] = Point(387.924, 773.557);\n    poly79.ps[2] = Point(367.924, 773.557);\n    poly79.ps[3] = Point(367.924, 753.557);\n    new ShapeRef(router, poly79, 79);\n    \n    Polygon poly62(4);\n    poly62.ps[0] = Point(577.924, 629.557);\n    poly62.ps[1] = Point(577.924, 669.557);\n    poly62.ps[2] = Point(537.924, 669.557);\n    poly62.ps[3] = Point(537.924, 629.557);\n    new ShapeRef(router, poly62, 62);\n    \n    Polygon poly65(4);\n    poly65.ps[0] = Point(97.9242, 599.557);\n    poly65.ps[1] = Point(97.9242, 639.557);\n    poly65.ps[2] = Point(57.9242, 639.557);\n    poly65.ps[3] = Point(57.9242, 599.557);\n    new ShapeRef(router, poly65, 65);\n    \n    Polygon poly2(4);\n    poly2.ps[0] = Point(577.924, 795.557);\n    poly2.ps[1] = Point(577.924, 835.557);\n    poly2.ps[2] = Point(537.924, 835.557);\n    poly2.ps[3] = Point(537.924, 795.557);\n    new ShapeRef(router, poly2, 2);\n    \n    Polygon poly19(4);\n    poly19.ps[0] = Point(217.924, 141.557);\n    poly19.ps[1] = Point(217.924, 181.557);\n    poly19.ps[2] = Point(177.924, 181.557);\n    poly19.ps[3] = Point(177.924, 141.557);\n    new ShapeRef(router, poly19, 19);\n    \n    Polygon poly147(4);\n    poly147.ps[0] = Point(-26.0758, 274.75);\n    poly147.ps[1] = Point(-26.0758, 334.75);\n    poly147.ps[2] = Point(-66.0758, 334.75);\n    poly147.ps[3] = Point(-66.0758, 274.75);\n    new ShapeRef(router, poly147, 147);\n    \n    Polygon poly18(4);\n    poly18.ps[0] = Point(217.924, 743.557);\n    poly18.ps[1] = Point(217.924, 783.557);\n    poly18.ps[2] = Point(177.924, 783.557);\n    poly18.ps[3] = Point(177.924, 743.557);\n    new ShapeRef(router, poly18, 18);\n    \n    Polygon poly17(4);\n    poly17.ps[0] = Point(577.924, 883.057);\n    poly17.ps[1] = Point(577.924, 923.057);\n    poly17.ps[2] = Point(537.924, 923.057);\n    poly17.ps[3] = Point(537.924, 883.057);\n    new ShapeRef(router, poly17, 17);\n    \n    Polygon poly95(4);\n    poly95.ps[0] = Point(867.924, 151.557);\n    poly95.ps[1] = Point(867.924, 171.557);\n    poly95.ps[2] = Point(847.924, 171.557);\n    poly95.ps[3] = Point(847.924, 151.557);\n    new ShapeRef(router, poly95, 95);\n    \n    Polygon poly16(4);\n    poly16.ps[0] = Point(337.924, 743.557);\n    poly16.ps[1] = Point(337.924, 783.557);\n    poly16.ps[2] = Point(297.924, 783.557);\n    poly16.ps[3] = Point(297.924, 743.557);\n    new ShapeRef(router, poly16, 16);\n    \n    Polygon poly15(4);\n    poly15.ps[0] = Point(1158.92, 415.557);\n    poly15.ps[1] = Point(1158.92, 455.557);\n    poly15.ps[2] = Point(1118.92, 455.557);\n    poly15.ps[3] = Point(1118.92, 415.557);\n    new ShapeRef(router, poly15, 15);\n    \n    Polygon poly14(4);\n    poly14.ps[0] = Point(1158.92, 141.557);\n    poly14.ps[1] = Point(1158.92, 181.557);\n    poly14.ps[2] = Point(1118.92, 181.557);\n    poly14.ps[3] = Point(1118.92, 141.557);\n    new ShapeRef(router, poly14, 14);\n    \n    Polygon poly63(4);\n    poly63.ps[0] = Point(457.924, 507.557);\n    poly63.ps[1] = Point(457.924, 547.557);\n    poly63.ps[2] = Point(417.924, 547.557);\n    poly63.ps[3] = Point(417.924, 507.557);\n    new ShapeRef(router, poly63, 63);\n    \n    Polygon poly73(4);\n    poly73.ps[0] = Point(147.924, 517.557);\n    poly73.ps[1] = Point(147.924, 537.557);\n    poly73.ps[2] = Point(127.924, 537.557);\n    poly73.ps[3] = Point(127.924, 517.557);\n    new ShapeRef(router, poly73, 73);\n    \n    Polygon poly13(4);\n    poly13.ps[0] = Point(1158.92, 323.557);\n    poly13.ps[1] = Point(1158.92, 363.557);\n    poly13.ps[2] = Point(1118.92, 363.557);\n    poly13.ps[3] = Point(1118.92, 323.557);\n    new ShapeRef(router, poly13, 13);\n    \n    Polygon poly52(4);\n    poly52.ps[0] = Point(217.924, 295.557);\n    poly52.ps[1] = Point(217.924, 335.557);\n    poly52.ps[2] = Point(177.924, 335.557);\n    poly52.ps[3] = Point(177.924, 295.557);\n    new ShapeRef(router, poly52, 52);\n    \n    Polygon poly132(4);\n    poly132.ps[0] = Point(645.924, 365.557);\n    poly132.ps[1] = Point(645.924, 405.557);\n    poly132.ps[2] = Point(589.924, 405.557);\n    poly132.ps[3] = Point(589.924, 365.557);\n    new ShapeRef(router, poly132, 132);\n    \n    Polygon poly90(4);\n    poly90.ps[0] = Point(507.924, 425.557);\n    poly90.ps[1] = Point(507.924, 445.557);\n    poly90.ps[2] = Point(487.924, 445.557);\n    poly90.ps[3] = Point(487.924, 425.557);\n    new ShapeRef(router, poly90, 90);\n    \n    Polygon poly12(4);\n    poly12.ps[0] = Point(1038.92, 260.557);\n    poly12.ps[1] = Point(1038.92, 300.557);\n    poly12.ps[2] = Point(998.924, 300.557);\n    poly12.ps[3] = Point(998.924, 260.557);\n    new ShapeRef(router, poly12, 12);\n    \n    Polygon poly11(4);\n    poly11.ps[0] = Point(817.924, -80.6578);\n    poly11.ps[1] = Point(817.924, -40.6578);\n    poly11.ps[2] = Point(777.924, -40.6578);\n    poly11.ps[3] = Point(777.924, -80.6578);\n    new ShapeRef(router, poly11, 11);\n    \n    Polygon poly10(4);\n    poly10.ps[0] = Point(937.924, -80.6578);\n    poly10.ps[1] = Point(937.924, -40.6578);\n    poly10.ps[2] = Point(897.924, -40.6578);\n    poly10.ps[3] = Point(897.924, -80.6578);\n    new ShapeRef(router, poly10, 10);\n    \n    Polygon poly9(4);\n    poly9.ps[0] = Point(1038.92, -80.6578);\n    poly9.ps[1] = Point(1038.92, -40.6578);\n    poly9.ps[2] = Point(998.924, -40.6578);\n    poly9.ps[3] = Point(998.924, -80.6578);\n    new ShapeRef(router, poly9, 9);\n    \n    ConnRef *connRef200 = new ConnRef(router, 200);\n    ConnEnd srcPt200(Point(387.924, 763.557), 15);\n    connRef200->setSourceEndpoint(srcPt200);\n    ConnEnd dstPt200(Point(437.924, 763.557), 15);\n    connRef200->setDestEndpoint(dstPt200);\n    connRef200->setRoutingType((ConnType)2);\n\n    ConnRef *connRef181 = new ConnRef(router, 181);\n    ConnEnd srcPt181(Point(77.9242, 763.557), 15);\n    connRef181->setSourceEndpoint(srcPt181);\n    ConnEnd dstPt181(Point(77.9242, 671.557), 15);\n    connRef181->setDestEndpoint(dstPt181);\n    connRef181->setRoutingType((ConnType)2);\n\n    ConnRef *connRef263 = new ConnRef(router, 263);\n    ConnEnd srcPt263(Point(958.924, 230.557), 15);\n    connRef263->setSourceEndpoint(srcPt263);\n    ConnEnd dstPt263(Point(958.924, 280.557), 15);\n    connRef263->setDestEndpoint(dstPt263);\n    connRef263->setRoutingType((ConnType)2);\n\n    ConnRef *connRef264 = new ConnRef(router, 264);\n    ConnEnd srcPt264(Point(737.924, 111.557), 15);\n    connRef264->setSourceEndpoint(srcPt264);\n    ConnEnd dstPt264(Point(737.924, 161.557), 15);\n    connRef264->setDestEndpoint(dstPt264);\n    connRef264->setRoutingType((ConnType)2);\n\n    ConnRef *connRef265 = new ConnRef(router, 265);\n    ConnEnd srcPt265(Point(737.924, 810.057), 15);\n    connRef265->setSourceEndpoint(srcPt265);\n    ConnEnd dstPt265(Point(737.924, 860.057), 15);\n    connRef265->setDestEndpoint(dstPt265);\n    connRef265->setRoutingType((ConnType)2);\n\n    ConnRef *connRef266 = new ConnRef(router, 266);\n    ConnEnd srcPt266(Point(77.9242, 161.557), 15);\n    connRef266->setSourceEndpoint(srcPt266);\n    ConnEnd dstPt266(Point(40.9242, 252.5), 15);\n    connRef266->setDestEndpoint(dstPt266);\n    connRef266->setRoutingType((ConnType)2);\n\n    ConnRef *connRef267 = new ConnRef(router, 267);\n    ConnEnd srcPt267(Point(77.9242, 763.557), 15);\n    connRef267->setSourceEndpoint(srcPt267);\n    ConnEnd dstPt267(Point(-46.0758, 329.75), 15);\n    connRef267->setDestEndpoint(dstPt267);\n    connRef267->setRoutingType((ConnType)2);\n\n    ConnRef *connRef202 = new ConnRef(router, 202);\n    ConnEnd srcPt202(Point(627.924, 763.557), 15);\n    connRef202->setSourceEndpoint(srcPt202);\n    ConnEnd dstPt202(Point(677.924, 763.557), 15);\n    connRef202->setDestEndpoint(dstPt202);\n    connRef202->setRoutingType((ConnType)2);\n\n    ConnRef *connRef161 = new ConnRef(router, 161);\n    ConnEnd srcPt161(Point(317.924, 161.557), 15);\n    connRef161->setSourceEndpoint(srcPt161);\n    ConnEnd dstPt161(Point(367.924, 161.557), 15);\n    connRef161->setDestEndpoint(dstPt161);\n    connRef161->setRoutingType((ConnType)2);\n\n    ConnRef *connRef162 = new ConnRef(router, 162);\n    ConnEnd srcPt162(Point(317.924, 161.557), 15);\n    connRef162->setSourceEndpoint(srcPt162);\n    ConnEnd dstPt162(Point(367.924, 27.3422), 15);\n    connRef162->setDestEndpoint(dstPt162);\n    connRef162->setRoutingType((ConnType)2);\n\n    ConnRef *connRef148 = new ConnRef(router, 148);\n    ConnEnd srcPt148(Point(1018.92, -60.6578), 15);\n    connRef148->setSourceEndpoint(srcPt148);\n    ConnEnd dstPt148(Point(1068.92, -60.6578), 15);\n    connRef148->setDestEndpoint(dstPt148);\n    connRef148->setRoutingType((ConnType)2);\n\n    ConnRef *connRef205 = new ConnRef(router, 205);\n    ConnEnd srcPt205(Point(387.924, 161.557), 15);\n    connRef205->setSourceEndpoint(srcPt205);\n    ConnEnd dstPt205(Point(437.924, 161.557), 15);\n    connRef205->setDestEndpoint(dstPt205);\n    connRef205->setRoutingType((ConnType)2);\n\n    ConnRef *connRef227 = new ConnRef(router, 227);\n    ConnEnd srcPt227(Point(137.924, -15.1578), 15);\n    connRef227->setSourceEndpoint(srcPt227);\n    ConnEnd dstPt227(Point(137.924, 34.8422), 15);\n    connRef227->setDestEndpoint(dstPt227);\n    connRef227->setRoutingType((ConnType)2);\n\n    ConnRef *connRef228 = new ConnRef(router, 228);\n    ConnEnd srcPt228(Point(137.924, 111.557), 15);\n    connRef228->setSourceEndpoint(srcPt228);\n    ConnEnd dstPt228(Point(137.924, 161.557), 15);\n    connRef228->setDestEndpoint(dstPt228);\n    connRef228->setRoutingType((ConnType)2);\n\n    ConnRef *connRef231 = new ConnRef(router, 231);\n    ConnEnd srcPt231(Point(257.924, 265.557), 15);\n    connRef231->setSourceEndpoint(srcPt231);\n    ConnEnd dstPt231(Point(257.924, 315.557), 15);\n    connRef231->setDestEndpoint(dstPt231);\n    connRef231->setRoutingType((ConnType)2);\n\n    ConnRef *connRef232 = new ConnRef(router, 232);\n    ConnEnd srcPt232(Point(139.924, 367.557), 15);\n    connRef232->setSourceEndpoint(srcPt232);\n    ConnEnd dstPt232(Point(77.9242, 367.557), 15);\n    connRef232->setDestEndpoint(dstPt232);\n    connRef232->setRoutingType((ConnType)2);\n\n    ConnRef *connRef225 = new ConnRef(router, 225);\n    ConnEnd srcPt225(Point(747.924, 860.057), 15);\n    connRef225->setSourceEndpoint(srcPt225);\n    ConnEnd dstPt225(Point(797.924, 860.057), 15);\n    connRef225->setDestEndpoint(dstPt225);\n    connRef225->setRoutingType((ConnType)2);\n\n    ConnRef *connRef226 = new ConnRef(router, 226);\n    ConnEnd srcPt226(Point(737.924, -110.658), 15);\n    connRef226->setSourceEndpoint(srcPt226);\n    ConnEnd dstPt226(Point(737.924, -60.6578), 15);\n    connRef226->setDestEndpoint(dstPt226);\n    connRef226->setRoutingType((ConnType)2);\n\n    ConnRef *connRef240 = new ConnRef(router, 240);\n    ConnEnd srcPt240(Point(497.924, 713.557), 15);\n    connRef240->setSourceEndpoint(srcPt240);\n    ConnEnd dstPt240(Point(497.924, 763.557), 15);\n    connRef240->setDestEndpoint(dstPt240);\n    connRef240->setRoutingType((ConnType)2);\n\n    ConnRef *connRef241 = new ConnRef(router, 241);\n    ConnEnd srcPt241(Point(617.924, 713.557), 15);\n    connRef241->setSourceEndpoint(srcPt241);\n    ConnEnd dstPt241(Point(617.924, 763.557), 15);\n    connRef241->setDestEndpoint(dstPt241);\n    connRef241->setRoutingType((ConnType)2);\n\n    ConnRef *connRef242 = new ConnRef(router, 242);\n    ConnEnd srcPt242(Point(497.924, 853.057), 15);\n    connRef242->setSourceEndpoint(srcPt242);\n    ConnEnd dstPt242(Point(497.924, 903.057), 15);\n    connRef242->setDestEndpoint(dstPt242);\n    connRef242->setRoutingType((ConnType)2);\n\n    ConnRef *connRef203 = new ConnRef(router, 203);\n    ConnEnd srcPt203(Point(507.924, 903.057), 15);\n    connRef203->setSourceEndpoint(srcPt203);\n    ConnEnd dstPt203(Point(557.924, 903.057), 15);\n    connRef203->setDestEndpoint(dstPt203);\n    connRef203->setRoutingType((ConnType)2);\n\n    ConnRef *connRef221 = new ConnRef(router, 221);\n    ConnEnd srcPt221(Point(1088.92, 60.3422), 15);\n    connRef221->setSourceEndpoint(srcPt221);\n    ConnEnd dstPt221(Point(1138.92, 60.3422), 15);\n    connRef221->setDestEndpoint(dstPt221);\n    connRef221->setRoutingType((ConnType)2);\n\n    ConnRef *connRef207 = new ConnRef(router, 207);\n    ConnEnd srcPt207(Point(507.924, 45.8422), 15);\n    connRef207->setSourceEndpoint(srcPt207);\n    ConnEnd dstPt207(Point(557.924, 54.8422), 15);\n    connRef207->setDestEndpoint(dstPt207);\n    connRef207->setRoutingType((ConnType)2);\n\n    ConnRef *connRef188 = new ConnRef(router, 188);\n    ConnEnd srcPt188(Point(77.9242, 619.557), 15);\n    connRef188->setSourceEndpoint(srcPt188);\n    ConnEnd dstPt188(Point(127.924, 619.557), 15);\n    connRef188->setDestEndpoint(dstPt188);\n    connRef188->setRoutingType((ConnType)2);\n\n    ConnRef *connRef209 = new ConnRef(router, 209);\n    ConnEnd srcPt209(Point(747.924, 574.057), 15);\n    connRef209->setSourceEndpoint(srcPt209);\n    ConnEnd dstPt209(Point(797.924, 574.057), 15);\n    connRef209->setDestEndpoint(dstPt209);\n    connRef209->setRoutingType((ConnType)2);\n\n    ConnRef *connRef210 = new ConnRef(router, 210);\n    ConnEnd srcPt210(Point(507.924, 527.557), 15);\n    connRef210->setSourceEndpoint(srcPt210);\n    ConnEnd dstPt210(Point(557.924, 527.557), 15);\n    connRef210->setDestEndpoint(dstPt210);\n    connRef210->setRoutingType((ConnType)2);\n\n    ConnRef *connRef155 = new ConnRef(router, 155);\n    ConnEnd srcPt155(Point(557.924, 903.057), 15);\n    connRef155->setSourceEndpoint(srcPt155);\n    ConnEnd dstPt155(Point(607.924, 903.057), 15);\n    connRef155->setDestEndpoint(dstPt155);\n    connRef155->setRoutingType((ConnType)2);\n\n    ConnRef *connRef222 = new ConnRef(router, 222);\n    ConnEnd srcPt222(Point(1208.92, 152.342), 15);\n    connRef222->setSourceEndpoint(srcPt222);\n    ConnEnd dstPt222(Point(1258.92, 161.557), 15);\n    connRef222->setDestEndpoint(dstPt222);\n    connRef222->setRoutingType((ConnType)2);\n\n    ConnRef *connRef223 = new ConnRef(router, 223);\n    ConnEnd srcPt223(Point(1088.92, -60.6578), 15);\n    connRef223->setSourceEndpoint(srcPt223);\n    ConnEnd dstPt223(Point(1138.92, -60.6578), 15);\n    connRef223->setDestEndpoint(dstPt223);\n    connRef223->setRoutingType((ConnType)2);\n\n    ConnRef *connRef215 = new ConnRef(router, 215);\n    ConnEnd srcPt215(Point(867.924, 435.557), 15);\n    connRef215->setSourceEndpoint(srcPt215);\n    ConnEnd dstPt215(Point(917.924, 435.557), 15);\n    connRef215->setDestEndpoint(dstPt215);\n    connRef215->setRoutingType((ConnType)2);\n\n    ConnRef *connRef216 = new ConnRef(router, 216);\n    ConnEnd srcPt216(Point(867.924, 161.557), 15);\n    connRef216->setSourceEndpoint(srcPt216);\n    ConnEnd dstPt216(Point(917.924, 161.557), 15);\n    connRef216->setDestEndpoint(dstPt216);\n    connRef216->setRoutingType((ConnType)2);\n\n    ConnRef *connRef213 = new ConnRef(router, 213);\n    ConnEnd srcPt213(Point(627.924, 435.557), 15);\n    connRef213->setSourceEndpoint(srcPt213);\n    ConnEnd dstPt213(Point(677.924, 435.557), 15);\n    connRef213->setDestEndpoint(dstPt213);\n    connRef213->setRoutingType((ConnType)2);\n\n    ConnRef *connRef214 = new ConnRef(router, 214);\n    ConnEnd srcPt214(Point(867.924, 343.557), 15);\n    connRef214->setSourceEndpoint(srcPt214);\n    ConnEnd dstPt214(Point(917.924, 343.557), 15);\n    connRef214->setDestEndpoint(dstPt214);\n    connRef214->setRoutingType((ConnType)2);\n\n    ConnRef *connRef171 = new ConnRef(router, 171);\n    ConnEnd srcPt171(Point(1018.92, 161.557), 15);\n    connRef171->setSourceEndpoint(srcPt171);\n    ConnEnd dstPt171(Point(1068.92, 60.3422), 15);\n    connRef171->setDestEndpoint(dstPt171);\n    connRef171->setRoutingType((ConnType)2);\n\n    ConnRef *connRef198 = new ConnRef(router, 198);\n    ConnEnd srcPt198(Point(267.924, 763.557), 15);\n    connRef198->setSourceEndpoint(srcPt198);\n    ConnEnd dstPt198(Point(317.924, 763.557), 15);\n    connRef198->setDestEndpoint(dstPt198);\n    connRef198->setRoutingType((ConnType)2);\n\n    ConnRef *connRef164 = new ConnRef(router, 164);\n    ConnEnd srcPt164(Point(437.924, 763.557), 15);\n    connRef164->setSourceEndpoint(srcPt164);\n    ConnEnd dstPt164(Point(487.924, 763.557), 15);\n    connRef164->setDestEndpoint(dstPt164);\n    connRef164->setRoutingType((ConnType)2);\n\n    ConnRef *connRef165 = new ConnRef(router, 165);\n    ConnEnd srcPt165(Point(437.924, 763.557), 15);\n    connRef165->setSourceEndpoint(srcPt165);\n    ConnEnd dstPt165(Point(727.924, 860.057), 15);\n    connRef165->setDestEndpoint(dstPt165);\n    connRef165->setRoutingType((ConnType)2);\n\n    ConnRef *connRef219 = new ConnRef(router, 219);\n    ConnEnd srcPt219(Point(1208.92, 388.557), 15);\n    connRef219->setSourceEndpoint(srcPt219);\n    ConnEnd dstPt219(Point(1258.92, 435.557), 15);\n    connRef219->setDestEndpoint(dstPt219);\n    connRef219->setRoutingType((ConnType)2);\n\n    ConnRef *connRef220 = new ConnRef(router, 220);\n    ConnEnd srcPt220(Point(1088.92, 152.342), 15);\n    connRef220->setSourceEndpoint(srcPt220);\n    ConnEnd dstPt220(Point(1138.92, 161.557), 15);\n    connRef220->setDestEndpoint(dstPt220);\n    connRef220->setRoutingType((ConnType)2);\n\n    ConnRef *connRef233 = new ConnRef(router, 233);\n    ConnEnd srcPt233(Point(137.924, 477.557), 15);\n    connRef233->setSourceEndpoint(srcPt233);\n    ConnEnd dstPt233(Point(137.924, 527.557), 15);\n    connRef233->setDestEndpoint(dstPt233);\n    connRef233->setRoutingType((ConnType)2);\n\n    ConnRef *connRef234 = new ConnRef(router, 234);\n    ConnEnd srcPt234(Point(137.924, 569.557), 15);\n    connRef234->setSourceEndpoint(srcPt234);\n    ConnEnd dstPt234(Point(137.924, 619.557), 15);\n    connRef234->setDestEndpoint(dstPt234);\n    connRef234->setRoutingType((ConnType)2);\n\n    ConnRef *connRef229 = new ConnRef(router, 229);\n    ConnEnd srcPt229(Point(257.924, 111.557), 15);\n    connRef229->setSourceEndpoint(srcPt229);\n    ConnEnd dstPt229(Point(257.924, 161.557), 15);\n    connRef229->setDestEndpoint(dstPt229);\n    connRef229->setRoutingType((ConnType)2);\n\n    ConnRef *connRef230 = new ConnRef(router, 230);\n    ConnEnd srcPt230(Point(259.924, 213.557), 15);\n    connRef230->setSourceEndpoint(srcPt230);\n    ConnEnd dstPt230(Point(197.924, 213.557), 15);\n    connRef230->setDestEndpoint(dstPt230);\n    connRef230->setRoutingType((ConnType)2);\n\n    ConnRef *connRef199 = new ConnRef(router, 199);\n    ConnEnd srcPt199(Point(387.924, 627.557), 15);\n    connRef199->setSourceEndpoint(srcPt199);\n    ConnEnd dstPt199(Point(437.924, 627.557), 15);\n    connRef199->setDestEndpoint(dstPt199);\n    connRef199->setRoutingType((ConnType)2);\n\n    ConnRef *connRef166 = new ConnRef(router, 166);\n    ConnEnd srcPt166(Point(557.924, 527.557), 15);\n    connRef166->setSourceEndpoint(srcPt166);\n    ConnEnd dstPt166(Point(607.924, 527.557), 15);\n    connRef166->setDestEndpoint(dstPt166);\n    connRef166->setRoutingType((ConnType)2);\n\n    ConnRef *connRef249 = new ConnRef(router, 249);\n    ConnEnd srcPt249(Point(497.924, 477.557), 15);\n    connRef249->setSourceEndpoint(srcPt249);\n    ConnEnd dstPt249(Point(497.924, 527.557), 15);\n    connRef249->setDestEndpoint(dstPt249);\n    connRef249->setRoutingType((ConnType)2);\n\n    ConnRef *connRef250 = new ConnRef(router, 250);\n    ConnEnd srcPt250(Point(497.924, 385.557), 15);\n    connRef250->setSourceEndpoint(srcPt250);\n    ConnEnd dstPt250(Point(497.924, 435.557), 15);\n    connRef250->setDestEndpoint(dstPt250);\n    connRef250->setRoutingType((ConnType)2);\n\n    ConnRef *connRef251 = new ConnRef(router, 251);\n    ConnEnd srcPt251(Point(617.924, 477.557), 15);\n    connRef251->setSourceEndpoint(srcPt251);\n    ConnEnd dstPt251(Point(617.924, 527.557), 15);\n    connRef251->setDestEndpoint(dstPt251);\n    connRef251->setRoutingType((ConnType)2);\n\n    ConnRef *connRef160 = new ConnRef(router, 160);\n    ConnEnd srcPt160(Point(317.924, 161.557), 15);\n    connRef160->setSourceEndpoint(srcPt160);\n    ConnEnd dstPt160(Point(727.924, -60.6578), 15);\n    connRef160->setDestEndpoint(dstPt160);\n    connRef160->setRoutingType((ConnType)2);\n\n    ConnRef *connRef149 = new ConnRef(router, 149);\n    ConnEnd srcPt149(Point(1138.92, 161.557), 15);\n    connRef149->setSourceEndpoint(srcPt149);\n    ConnEnd dstPt149(Point(1188.92, 152.342), 15);\n    connRef149->setDestEndpoint(dstPt149);\n    connRef149->setRoutingType((ConnType)2);\n\n    ConnRef *connRef246 = new ConnRef(router, 246);\n    ConnEnd srcPt246(Point(497.924, -4.15778), 15);\n    connRef246->setSourceEndpoint(srcPt246);\n    ConnEnd dstPt246(Point(497.924, 45.8422), 15);\n    connRef246->setDestEndpoint(dstPt246);\n    connRef246->setRoutingType((ConnType)2);\n\n    ConnRef *connRef247 = new ConnRef(router, 247);\n    ConnEnd srcPt247(Point(617.924, -4.15778), 15);\n    connRef247->setSourceEndpoint(srcPt247);\n    ConnEnd dstPt247(Point(617.924, 45.8422), 15);\n    connRef247->setDestEndpoint(dstPt247);\n    connRef247->setRoutingType((ConnType)2);\n\n    ConnRef *connRef248 = new ConnRef(router, 248);\n    ConnEnd srcPt248(Point(737.924, 524.057), 15);\n    connRef248->setSourceEndpoint(srcPt248);\n    ConnEnd dstPt248(Point(737.924, 574.057), 15);\n    connRef248->setDestEndpoint(dstPt248);\n    connRef248->setRoutingType((ConnType)2);\n\n    ConnRef *connRef201 = new ConnRef(router, 201);\n    ConnEnd srcPt201(Point(507.924, 763.557), 15);\n    connRef201->setSourceEndpoint(srcPt201);\n    ConnEnd dstPt201(Point(557.924, 763.557), 15);\n    connRef201->setDestEndpoint(dstPt201);\n    connRef201->setRoutingType((ConnType)2);\n\n    ConnRef *connRef152 = new ConnRef(router, 152);\n    ConnEnd srcPt152(Point(317.924, 763.557), 15);\n    connRef152->setSourceEndpoint(srcPt152);\n    ConnEnd dstPt152(Point(367.924, 763.557), 15);\n    connRef152->setDestEndpoint(dstPt152);\n    connRef152->setRoutingType((ConnType)2);\n\n    ConnRef *connRef185 = new ConnRef(router, 185);\n    ConnEnd srcPt185(Point(797.924, 161.557), 15);\n    connRef185->setSourceEndpoint(srcPt185);\n    ConnEnd dstPt185(Point(847.924, 161.557), 15);\n    connRef185->setDestEndpoint(dstPt185);\n    connRef185->setRoutingType((ConnType)2);\n\n    ConnRef *connRef178 = new ConnRef(router, 178);\n    ConnEnd srcPt178(Point(77.9242, 527.557), 15);\n    connRef178->setSourceEndpoint(srcPt178);\n    ConnEnd dstPt178(Point(127.924, 527.557), 15);\n    connRef178->setDestEndpoint(dstPt178);\n    connRef178->setRoutingType((ConnType)2);\n\n    ConnRef *connRef235 = new ConnRef(router, 235);\n    ConnEnd srcPt235(Point(139.924, 661.557), 15);\n    connRef235->setSourceEndpoint(srcPt235);\n    ConnEnd dstPt235(Point(77.9242, 661.557), 15);\n    connRef235->setDestEndpoint(dstPt235);\n    connRef235->setRoutingType((ConnType)2);\n\n    ConnRef *connRef236 = new ConnRef(router, 236);\n    ConnEnd srcPt236(Point(137.924, 713.557), 15);\n    connRef236->setSourceEndpoint(srcPt236);\n    ConnEnd dstPt236(Point(137.924, 763.557), 15);\n    connRef236->setDestEndpoint(dstPt236);\n    connRef236->setRoutingType((ConnType)2);\n\n    ConnRef *connRef237 = new ConnRef(router, 237);\n    ConnEnd srcPt237(Point(257.924, 713.557), 15);\n    connRef237->setSourceEndpoint(srcPt237);\n    ConnEnd dstPt237(Point(257.924, 763.557), 15);\n    connRef237->setDestEndpoint(dstPt237);\n    connRef237->setRoutingType((ConnType)2);\n\n    ConnRef *connRef217 = new ConnRef(router, 217);\n    ConnEnd srcPt217(Point(747.924, 343.557), 15);\n    connRef217->setSourceEndpoint(srcPt217);\n    ConnEnd dstPt217(Point(797.924, 343.557), 15);\n    connRef217->setDestEndpoint(dstPt217);\n    connRef217->setRoutingType((ConnType)2);\n\n    ConnRef *connRef218 = new ConnRef(router, 218);\n    ConnEnd srcPt218(Point(1088.92, 388.557), 15);\n    connRef218->setSourceEndpoint(srcPt218);\n    ConnEnd dstPt218(Point(1138.92, 435.557), 15);\n    connRef218->setDestEndpoint(dstPt218);\n    connRef218->setRoutingType((ConnType)2);\n\n    ConnRef *connRef189 = new ConnRef(router, 189);\n    ConnEnd srcPt189(Point(747.924, -60.6578), 15);\n    connRef189->setSourceEndpoint(srcPt189);\n    ConnEnd dstPt189(Point(797.924, -60.6578), 15);\n    connRef189->setDestEndpoint(dstPt189);\n    connRef189->setRoutingType((ConnType)2);\n\n    ConnRef *connRef252 = new ConnRef(router, 252);\n    ConnEnd srcPt252(Point(617.924, 385.557), 15);\n    connRef252->setSourceEndpoint(srcPt252);\n    ConnEnd dstPt252(Point(617.924, 435.557), 15);\n    connRef252->setDestEndpoint(dstPt252);\n    connRef252->setRoutingType((ConnType)2);\n\n    ConnRef *connRef253 = new ConnRef(router, 253);\n    ConnEnd srcPt253(Point(857.924, 293.557), 15);\n    connRef253->setSourceEndpoint(srcPt253);\n    ConnEnd dstPt253(Point(857.924, 343.557), 15);\n    connRef253->setDestEndpoint(dstPt253);\n    connRef253->setRoutingType((ConnType)2);\n\n    ConnRef *connRef254 = new ConnRef(router, 254);\n    ConnEnd srcPt254(Point(857.924, 385.557), 15);\n    connRef254->setSourceEndpoint(srcPt254);\n    ConnEnd dstPt254(Point(857.924, 435.557), 15);\n    connRef254->setDestEndpoint(dstPt254);\n    connRef254->setRoutingType((ConnType)2);\n\n    ConnRef *connRef255 = new ConnRef(router, 255);\n    ConnEnd srcPt255(Point(857.924, 111.557), 15);\n    connRef255->setSourceEndpoint(srcPt255);\n    ConnEnd dstPt255(Point(857.924, 161.557), 15);\n    connRef255->setDestEndpoint(dstPt255);\n    connRef255->setRoutingType((ConnType)2);\n\n    ConnRef *connRef256 = new ConnRef(router, 256);\n    ConnEnd srcPt256(Point(737.924, 293.557), 15);\n    connRef256->setSourceEndpoint(srcPt256);\n    ConnEnd dstPt256(Point(737.924, 343.557), 15);\n    connRef256->setDestEndpoint(dstPt256);\n    connRef256->setRoutingType((ConnType)2);\n\n    ConnRef *connRef257 = new ConnRef(router, 257);\n    ConnEnd srcPt257(Point(1078.92, 338.557), 15);\n    connRef257->setSourceEndpoint(srcPt257);\n    ConnEnd dstPt257(Point(1078.92, 388.557), 15);\n    connRef257->setDestEndpoint(dstPt257);\n    connRef257->setRoutingType((ConnType)2);\n\n    ConnRef *connRef258 = new ConnRef(router, 258);\n    ConnEnd srcPt258(Point(1198.92, 338.557), 15);\n    connRef258->setSourceEndpoint(srcPt258);\n    ConnEnd dstPt258(Point(1198.92, 388.557), 15);\n    connRef258->setDestEndpoint(dstPt258);\n    connRef258->setRoutingType((ConnType)2);\n\n    ConnRef *connRef259 = new ConnRef(router, 259);\n    ConnEnd srcPt259(Point(1078.92, 102.342), 15);\n    connRef259->setSourceEndpoint(srcPt259);\n    ConnEnd dstPt259(Point(1078.92, 152.342), 15);\n    connRef259->setDestEndpoint(dstPt259);\n    connRef259->setRoutingType((ConnType)2);\n\n    ConnRef *connRef260 = new ConnRef(router, 260);\n    ConnEnd srcPt260(Point(1078.92, 10.3422), 15);\n    connRef260->setSourceEndpoint(srcPt260);\n    ConnEnd dstPt260(Point(1078.92, 60.3422), 15);\n    connRef260->setDestEndpoint(dstPt260);\n    connRef260->setRoutingType((ConnType)2);\n\n    ConnRef *connRef261 = new ConnRef(router, 261);\n    ConnEnd srcPt261(Point(1198.92, 102.342), 15);\n    connRef261->setSourceEndpoint(srcPt261);\n    ConnEnd dstPt261(Point(1198.92, 152.342), 15);\n    connRef261->setDestEndpoint(dstPt261);\n    connRef261->setRoutingType((ConnType)2);\n\n    ConnRef *connRef262 = new ConnRef(router, 262);\n    ConnEnd srcPt262(Point(1078.92, -110.658), 15);\n    connRef262->setSourceEndpoint(srcPt262);\n    ConnEnd dstPt262(Point(1078.92, -60.6578), 15);\n    connRef262->setDestEndpoint(dstPt262);\n    connRef262->setRoutingType((ConnType)2);\n\n    ConnRef *connRef176 = new ConnRef(router, 176);\n    ConnEnd srcPt176(Point(77.9242, 161.557), 15);\n    connRef176->setSourceEndpoint(srcPt176);\n    ConnEnd dstPt176(Point(77.9242, 357.557), 15);\n    connRef176->setDestEndpoint(dstPt176);\n    connRef176->setRoutingType((ConnType)2);\n\n    ConnRef *connRef175 = new ConnRef(router, 175);\n    ConnEnd srcPt175(Point(77.9242, 161.557), 15);\n    connRef175->setSourceEndpoint(srcPt175);\n    ConnEnd dstPt175(Point(127.924, 161.557), 15);\n    connRef175->setDestEndpoint(dstPt175);\n    connRef175->setRoutingType((ConnType)2);\n\n    ConnRef *connRef183 = new ConnRef(router, 183);\n    ConnEnd srcPt183(Point(197.924, 315.557), 15);\n    connRef183->setSourceEndpoint(srcPt183);\n    ConnEnd dstPt183(Point(247.924, 315.557), 15);\n    connRef183->setDestEndpoint(dstPt183);\n    connRef183->setRoutingType((ConnType)2);\n\n    ConnRef *connRef184 = new ConnRef(router, 184);\n    ConnEnd srcPt184(Point(677.924, 343.557), 15);\n    connRef184->setSourceEndpoint(srcPt184);\n    ConnEnd dstPt184(Point(727.924, 343.557), 15);\n    connRef184->setDestEndpoint(dstPt184);\n    connRef184->setRoutingType((ConnType)2);\n\n    ConnRef *connRef156 = new ConnRef(router, 156);\n    ConnEnd srcPt156(Point(197.924, 763.557), 15);\n    connRef156->setSourceEndpoint(srcPt156);\n    ConnEnd dstPt156(Point(247.924, 763.557), 15);\n    connRef156->setDestEndpoint(dstPt156);\n    connRef156->setRoutingType((ConnType)2);\n\n    ConnRef *connRef169 = new ConnRef(router, 169);\n    ConnEnd srcPt169(Point(1018.92, 435.557), 15);\n    connRef169->setSourceEndpoint(srcPt169);\n    ConnEnd dstPt169(Point(1068.92, 388.557), 15);\n    connRef169->setDestEndpoint(dstPt169);\n    connRef169->setRoutingType((ConnType)2);\n\n    ConnRef *connRef192 = new ConnRef(router, 192);\n    ConnEnd srcPt192(Point(197.924, 223.557), 15);\n    connRef192->setSourceEndpoint(srcPt192);\n    ConnEnd dstPt192(Point(197.924, 315.557), 15);\n    connRef192->setDestEndpoint(dstPt192);\n    connRef192->setRoutingType((ConnType)2);\n\n    ConnRef *connRef224 = new ConnRef(router, 224);\n    ConnEnd srcPt224(Point(747.924, 161.557), 15);\n    connRef224->setSourceEndpoint(srcPt224);\n    ConnEnd dstPt224(Point(797.924, 161.557), 15);\n    connRef224->setDestEndpoint(dstPt224);\n    connRef224->setRoutingType((ConnType)2);\n\n    ConnRef *connRef170 = new ConnRef(router, 170);\n    ConnEnd srcPt170(Point(1018.92, 161.557), 15);\n    connRef170->setSourceEndpoint(srcPt170);\n    ConnEnd dstPt170(Point(1068.92, 152.342), 15);\n    connRef170->setDestEndpoint(dstPt170);\n    connRef170->setRoutingType((ConnType)2);\n\n    ConnRef *connRef211 = new ConnRef(router, 211);\n    ConnEnd srcPt211(Point(507.924, 435.557), 15);\n    connRef211->setSourceEndpoint(srcPt211);\n    ConnEnd dstPt211(Point(557.924, 435.557), 15);\n    connRef211->setDestEndpoint(dstPt211);\n    connRef211->setRoutingType((ConnType)2);\n\n    ConnRef *connRef212 = new ConnRef(router, 212);\n    ConnEnd srcPt212(Point(627.924, 527.557), 15);\n    connRef212->setSourceEndpoint(srcPt212);\n    ConnEnd dstPt212(Point(677.924, 527.557), 15);\n    connRef212->setDestEndpoint(dstPt212);\n    connRef212->setRoutingType((ConnType)2);\n\n    ConnRef *connRef243 = new ConnRef(router, 243);\n    ConnEnd srcPt243(Point(617.924, 853.057), 15);\n    connRef243->setSourceEndpoint(srcPt243);\n    ConnEnd dstPt243(Point(617.924, 903.057), 15);\n    connRef243->setDestEndpoint(dstPt243);\n    connRef243->setRoutingType((ConnType)2);\n\n    ConnRef *connRef244 = new ConnRef(router, 244);\n    ConnEnd srcPt244(Point(377.924, 111.557), 15);\n    connRef244->setSourceEndpoint(srcPt244);\n    ConnEnd dstPt244(Point(377.924, 161.557), 15);\n    connRef244->setDestEndpoint(dstPt244);\n    connRef244->setRoutingType((ConnType)2);\n\n    ConnRef *connRef245 = new ConnRef(router, 245);\n    ConnEnd srcPt245(Point(377.924, -22.6578), 15);\n    connRef245->setSourceEndpoint(srcPt245);\n    ConnEnd dstPt245(Point(377.924, 27.3422), 15);\n    connRef245->setDestEndpoint(dstPt245);\n    connRef245->setRoutingType((ConnType)2);\n\n    ConnRef *connRef154 = new ConnRef(router, 154);\n    ConnEnd srcPt154(Point(317.924, 763.557), 15);\n    connRef154->setSourceEndpoint(srcPt154);\n    ConnEnd dstPt154(Point(727.924, 574.057), 15);\n    connRef154->setDestEndpoint(dstPt154);\n    connRef154->setRoutingType((ConnType)2);\n\n    ConnRef *connRef208 = new ConnRef(router, 208);\n    ConnEnd srcPt208(Point(627.924, 45.8422), 15);\n    connRef208->setSourceEndpoint(srcPt208);\n    ConnEnd dstPt208(Point(677.924, 54.8422), 15);\n    connRef208->setDestEndpoint(dstPt208);\n    connRef208->setRoutingType((ConnType)2);\n\n    ConnRef *connRef238 = new ConnRef(router, 238);\n    ConnEnd srcPt238(Point(377.924, 577.557), 15);\n    connRef238->setSourceEndpoint(srcPt238);\n    ConnEnd dstPt238(Point(377.924, 627.557), 15);\n    connRef238->setDestEndpoint(dstPt238);\n    connRef238->setRoutingType((ConnType)2);\n\n    ConnRef *connRef239 = new ConnRef(router, 239);\n    ConnEnd srcPt239(Point(377.924, 713.557), 15);\n    connRef239->setSourceEndpoint(srcPt239);\n    ConnEnd dstPt239(Point(377.924, 763.557), 15);\n    connRef239->setDestEndpoint(dstPt239);\n    connRef239->setRoutingType((ConnType)2);\n\n    ConnRef *connRef187 = new ConnRef(router, 187);\n    ConnEnd srcPt187(Point(437.924, 527.557), 15);\n    connRef187->setSourceEndpoint(srcPt187);\n    ConnEnd dstPt187(Point(487.924, 527.557), 15);\n    connRef187->setDestEndpoint(dstPt187);\n    connRef187->setRoutingType((ConnType)2);\n\n    ConnRef *connRef194 = new ConnRef(router, 194);\n    ConnEnd srcPt194(Point(147.924, 527.557), 15);\n    connRef194->setSourceEndpoint(srcPt194);\n    ConnEnd dstPt194(Point(197.924, 527.557), 15);\n    connRef194->setDestEndpoint(dstPt194);\n    connRef194->setRoutingType((ConnType)2);\n\n    ConnRef *connRef195 = new ConnRef(router, 195);\n    ConnEnd srcPt195(Point(147.924, 619.557), 15);\n    connRef195->setSourceEndpoint(srcPt195);\n    ConnEnd dstPt195(Point(197.924, 763.557), 15);\n    connRef195->setDestEndpoint(dstPt195);\n    connRef195->setRoutingType((ConnType)2);\n\n    ConnRef *connRef177 = new ConnRef(router, 177);\n    ConnEnd srcPt177(Point(557.924, 763.557), 15);\n    connRef177->setSourceEndpoint(srcPt177);\n    ConnEnd dstPt177(Point(607.924, 763.557), 15);\n    connRef177->setDestEndpoint(dstPt177);\n    connRef177->setRoutingType((ConnType)2);\n\n    ConnRef *connRef179 = new ConnRef(router, 179);\n    ConnEnd srcPt179(Point(557.924, 54.8422), 15);\n    connRef179->setSourceEndpoint(srcPt179);\n    ConnEnd dstPt179(Point(607.924, 45.8422), 15);\n    connRef179->setDestEndpoint(dstPt179);\n    connRef179->setRoutingType((ConnType)2);\n\n    ConnRef *connRef191 = new ConnRef(router, 191);\n    ConnEnd srcPt191(Point(267.924, 161.557), 15);\n    connRef191->setSourceEndpoint(srcPt191);\n    ConnEnd dstPt191(Point(317.924, 161.557), 15);\n    connRef191->setDestEndpoint(dstPt191);\n    connRef191->setRoutingType((ConnType)2);\n\n    ConnRef *connRef174 = new ConnRef(router, 174);\n    ConnEnd srcPt174(Point(437.924, 161.557), 15);\n    connRef174->setSourceEndpoint(srcPt174);\n    ConnEnd dstPt174(Point(727.924, 161.557), 15);\n    connRef174->setDestEndpoint(dstPt174);\n    connRef174->setRoutingType((ConnType)2);\n\n    ConnRef *connRef158 = new ConnRef(router, 158);\n    ConnEnd srcPt158(Point(197.924, 161.557), 15);\n    connRef158->setSourceEndpoint(srcPt158);\n    ConnEnd dstPt158(Point(247.924, 161.557), 15);\n    connRef158->setDestEndpoint(dstPt158);\n    connRef158->setRoutingType((ConnType)2);\n\n    ConnRef *connRef151 = new ConnRef(router, 151);\n    ConnEnd srcPt151(Point(317.924, 763.557), 15);\n    connRef151->setSourceEndpoint(srcPt151);\n    ConnEnd dstPt151(Point(367.924, 627.557), 15);\n    connRef151->setDestEndpoint(dstPt151);\n    connRef151->setRoutingType((ConnType)2);\n\n    ConnRef *connRef206 = new ConnRef(router, 206);\n    ConnEnd srcPt206(Point(387.924, 27.3422), 15);\n    connRef206->setSourceEndpoint(srcPt206);\n    ConnEnd dstPt206(Point(437.924, 27.3422), 15);\n    connRef206->setDestEndpoint(dstPt206);\n    connRef206->setRoutingType((ConnType)2);\n\n    ConnRef *connRef168 = new ConnRef(router, 168);\n    ConnEnd srcPt168(Point(797.924, 343.557), 15);\n    connRef168->setSourceEndpoint(srcPt168);\n    ConnEnd dstPt168(Point(847.924, 435.557), 15);\n    connRef168->setDestEndpoint(dstPt168);\n    connRef168->setRoutingType((ConnType)2);\n\n    ConnRef *connRef193 = new ConnRef(router, 193);\n    ConnEnd srcPt193(Point(77.9242, 377.557), 15);\n    connRef193->setSourceEndpoint(srcPt193);\n    ConnEnd dstPt193(Point(77.9242, 527.557), 15);\n    connRef193->setDestEndpoint(dstPt193);\n    connRef193->setRoutingType((ConnType)2);\n\n    ConnRef *connRef197 = new ConnRef(router, 197);\n    ConnEnd srcPt197(Point(147.924, 763.557), 15);\n    connRef197->setSourceEndpoint(srcPt197);\n    ConnEnd dstPt197(Point(197.924, 763.557), 15);\n    connRef197->setDestEndpoint(dstPt197);\n    connRef197->setRoutingType((ConnType)2);\n\n    ConnRef *connRef182 = new ConnRef(router, 182);\n    ConnEnd srcPt182(Point(77.9242, 763.557), 15);\n    connRef182->setSourceEndpoint(srcPt182);\n    ConnEnd dstPt182(Point(127.924, 763.557), 15);\n    connRef182->setDestEndpoint(dstPt182);\n    connRef182->setRoutingType((ConnType)2);\n\n    ConnRef *connRef150 = new ConnRef(router, 150);\n    ConnEnd srcPt150(Point(1138.92, 435.557), 15);\n    connRef150->setSourceEndpoint(srcPt150);\n    ConnEnd dstPt150(Point(1188.92, 388.557), 15);\n    connRef150->setDestEndpoint(dstPt150);\n    connRef150->setRoutingType((ConnType)2);\n\n    ConnRef *connRef190 = new ConnRef(router, 190);\n    ConnEnd srcPt190(Point(147.924, 34.8422), 15);\n    connRef190->setSourceEndpoint(srcPt190);\n    ConnEnd dstPt190(Point(197.924, 161.557), 15);\n    connRef190->setDestEndpoint(dstPt190);\n    connRef190->setRoutingType((ConnType)2);\n\n    ConnRef *connRef196 = new ConnRef(router, 196);\n    ConnEnd srcPt196(Point(77.9242, 651.557), 15);\n    connRef196->setSourceEndpoint(srcPt196);\n    ConnEnd dstPt196(Point(77.9242, 619.557), 15);\n    connRef196->setDestEndpoint(dstPt196);\n    connRef196->setRoutingType((ConnType)2);\n\n    ConnRef *connRef157 = new ConnRef(router, 157);\n    ConnEnd srcPt157(Point(147.924, 161.557), 15);\n    connRef157->setSourceEndpoint(srcPt157);\n    ConnEnd dstPt157(Point(197.924, 161.557), 15);\n    connRef157->setDestEndpoint(dstPt157);\n    connRef157->setRoutingType((ConnType)2);\n\n    ConnRef *connRef173 = new ConnRef(router, 173);\n    ConnEnd srcPt173(Point(437.924, 161.557), 15);\n    connRef173->setSourceEndpoint(srcPt173);\n    ConnEnd dstPt173(Point(487.924, 45.8422), 15);\n    connRef173->setDestEndpoint(dstPt173);\n    connRef173->setRoutingType((ConnType)2);\n\n    ConnRef *connRef159 = new ConnRef(router, 159);\n    ConnEnd srcPt159(Point(197.924, 161.557), 15);\n    connRef159->setSourceEndpoint(srcPt159);\n    ConnEnd dstPt159(Point(197.924, 203.557), 15);\n    connRef159->setDestEndpoint(dstPt159);\n    connRef159->setRoutingType((ConnType)2);\n\n    ConnRef *connRef153 = new ConnRef(router, 153);\n    ConnEnd srcPt153(Point(317.924, 763.557), 15);\n    connRef153->setSourceEndpoint(srcPt153);\n    ConnEnd dstPt153(Point(487.924, 903.057), 15);\n    connRef153->setDestEndpoint(dstPt153);\n    connRef153->setRoutingType((ConnType)2);\n\n    ConnRef *connRef163 = new ConnRef(router, 163);\n    ConnEnd srcPt163(Point(317.924, 161.557), 15);\n    connRef163->setSourceEndpoint(srcPt163);\n    ConnEnd dstPt163(Point(487.924, 435.557), 15);\n    connRef163->setDestEndpoint(dstPt163);\n    connRef163->setRoutingType((ConnType)2);\n\n    ConnRef *connRef180 = new ConnRef(router, 180);\n    ConnEnd srcPt180(Point(557.924, 435.557), 15);\n    connRef180->setSourceEndpoint(srcPt180);\n    ConnEnd dstPt180(Point(607.924, 435.557), 15);\n    connRef180->setDestEndpoint(dstPt180);\n    connRef180->setRoutingType((ConnType)2);\n\n    ConnRef *connRef204 = new ConnRef(router, 204);\n    ConnEnd srcPt204(Point(627.924, 903.057), 15);\n    connRef204->setSourceEndpoint(srcPt204);\n    ConnEnd dstPt204(Point(677.924, 903.057), 15);\n    connRef204->setDestEndpoint(dstPt204);\n    connRef204->setRoutingType((ConnType)2);\n\n    ConnRef *connRef186 = new ConnRef(router, 186);\n    ConnEnd srcPt186(Point(77.9242, 34.8422), 15);\n    connRef186->setSourceEndpoint(srcPt186);\n    ConnEnd dstPt186(Point(127.924, 34.8422), 15);\n    connRef186->setDestEndpoint(dstPt186);\n    connRef186->setRoutingType((ConnType)2);\n\n    ConnRef *connRef167 = new ConnRef(router, 167);\n    ConnEnd srcPt167(Point(797.924, 343.557), 15);\n    connRef167->setSourceEndpoint(srcPt167);\n    ConnEnd dstPt167(Point(847.924, 343.557), 15);\n    connRef167->setDestEndpoint(dstPt167);\n    connRef167->setRoutingType((ConnType)2);\n\n    ConnRef *connRef172 = new ConnRef(router, 172);\n    ConnEnd srcPt172(Point(267.924, 315.557), 15);\n    connRef172->setSourceEndpoint(srcPt172);\n    ConnEnd dstPt172(Point(437.924, 161.557), 15);\n    connRef172->setDestEndpoint(dstPt172);\n    connRef172->setRoutingType((ConnType)2);\n\n    router->processTransaction();\n    router->outputDiagram(\"output/lineSegWrapperCrash7\");\n    delete router;\n    return 0;\n};\n"
  },
  {
    "path": "cola/libavoid/tests/lineSegWrapperCrash8.cpp",
    "content": "#include \"libavoid/libavoid.h\"\nusing namespace Avoid;\nint main(void) {\n    Router *router = new Router(OrthogonalRouting);\n    router->setRoutingPenalty((PenaltyType)0, 50);\n    router->setRoutingPenalty((PenaltyType)1, 0);\n    router->setRoutingPenalty((PenaltyType)2, 0);\n    router->setRoutingPenalty((PenaltyType)3, 4000);\n    router->setRoutingPenalty((PenaltyType)4, 0);\n\n    Polygon poly79(4);\n    poly79.ps[0] = Point(387.924, 753.557);\n    poly79.ps[1] = Point(387.924, 773.557);\n    poly79.ps[2] = Point(367.924, 773.557);\n    poly79.ps[3] = Point(367.924, 753.557);\n    new ShapeRef(router, poly79, 79);\n    \n    Polygon poly58(4);\n    poly58.ps[0] = Point(97.9242, 14.8422);\n    poly58.ps[1] = Point(97.9242, 54.8422);\n    poly58.ps[2] = Point(57.9242, 54.8422);\n    poly58.ps[3] = Point(57.9242, 14.8422);\n    new ShapeRef(router, poly58, 58);\n    \n    Polygon poly62(4);\n    poly62.ps[0] = Point(577.924, 629.557);\n    poly62.ps[1] = Point(577.924, 669.557);\n    poly62.ps[2] = Point(537.924, 669.557);\n    poly62.ps[3] = Point(537.924, 629.557);\n    new ShapeRef(router, poly62, 62);\n    \n    Polygon poly63(4);\n    poly63.ps[0] = Point(457.924, 507.557);\n    poly63.ps[1] = Point(457.924, 547.557);\n    poly63.ps[2] = Point(417.924, 547.557);\n    poly63.ps[3] = Point(417.924, 507.557);\n    new ShapeRef(router, poly63, 63);\n    \n    Polygon poly19(4);\n    poly19.ps[0] = Point(217.924, 141.557);\n    poly19.ps[1] = Point(217.924, 181.557);\n    poly19.ps[2] = Point(177.924, 181.557);\n    poly19.ps[3] = Point(177.924, 141.557);\n    new ShapeRef(router, poly19, 19);\n    \n    Polygon poly48(4);\n    poly48.ps[0] = Point(97.9242, 743.557);\n    poly48.ps[1] = Point(97.9242, 783.557);\n    poly48.ps[2] = Point(57.9242, 783.557);\n    poly48.ps[3] = Point(57.9242, 743.557);\n    new ShapeRef(router, poly48, 48);\n    \n    Polygon poly8(4);\n    poly8.ps[0] = Point(1158.92, -80.6578);\n    poly8.ps[1] = Point(1158.92, -40.6578);\n    poly8.ps[2] = Point(1118.92, -40.6578);\n    poly8.ps[3] = Point(1118.92, -80.6578);\n    new ShapeRef(router, poly8, 8);\n    \n    Polygon poly1(4);\n    poly1.ps[0] = Point(817.924, 840.057);\n    poly1.ps[1] = Point(817.924, 880.057);\n    poly1.ps[2] = Point(777.924, 880.057);\n    poly1.ps[3] = Point(777.924, 840.057);\n    new ShapeRef(router, poly1, 1);\n    \n    Polygon poly24(4);\n    poly24.ps[0] = Point(457.924, 743.557);\n    poly24.ps[1] = Point(457.924, 783.557);\n    poly24.ps[2] = Point(417.924, 783.557);\n    poly24.ps[3] = Point(417.924, 743.557);\n    new ShapeRef(router, poly24, 24);\n    \n    Polygon poly69(4);\n    poly69.ps[0] = Point(267.924, 151.557);\n    poly69.ps[1] = Point(267.924, 171.557);\n    poly69.ps[2] = Point(247.924, 171.557);\n    poly69.ps[3] = Point(247.924, 151.557);\n    new ShapeRef(router, poly69, 69);\n    \n    Polygon poly125(4);\n    poly125.ps[0] = Point(405.924, -42.6578);\n    poly125.ps[1] = Point(405.924, -2.65778);\n    poly125.ps[2] = Point(349.924, -2.65778);\n    poly125.ps[3] = Point(349.924, -42.6578);\n    new ShapeRef(router, poly125, 125);\n    \n    Polygon poly126(4);\n    poly126.ps[0] = Point(525.924, -24.1578);\n    poly126.ps[1] = Point(525.924, 15.8422);\n    poly126.ps[2] = Point(469.924, 15.8422);\n    poly126.ps[3] = Point(469.924, -24.1578);\n    new ShapeRef(router, poly126, 126);\n    \n    Polygon poly127(4);\n    poly127.ps[0] = Point(645.924, -24.1578);\n    poly127.ps[1] = Point(645.924, 15.8422);\n    poly127.ps[2] = Point(589.924, 15.8422);\n    poly127.ps[3] = Point(589.924, -24.1578);\n    new ShapeRef(router, poly127, 127);\n    \n    Polygon poly109(4);\n    poly109.ps[0] = Point(285.924, 91.5565);\n    poly109.ps[1] = Point(285.924, 131.557);\n    poly109.ps[2] = Point(229.924, 131.557);\n    poly109.ps[3] = Point(229.924, 91.5565);\n    new ShapeRef(router, poly109, 109);\n    \n    Polygon poly80(4);\n    poly80.ps[0] = Point(507.924, 753.557);\n    poly80.ps[1] = Point(507.924, 773.557);\n    poly80.ps[2] = Point(487.924, 773.557);\n    poly80.ps[3] = Point(487.924, 753.557);\n    new ShapeRef(router, poly80, 80);\n    \n    Polygon poly29(4);\n    poly29.ps[0] = Point(1038.92, 415.557);\n    poly29.ps[1] = Point(1038.92, 455.557);\n    poly29.ps[2] = Point(998.924, 455.557);\n    poly29.ps[3] = Point(998.924, 415.557);\n    new ShapeRef(router, poly29, 29);\n    \n    Polygon poly10(4);\n    poly10.ps[0] = Point(937.924, -80.6578);\n    poly10.ps[1] = Point(937.924, -40.6578);\n    poly10.ps[2] = Point(897.924, -40.6578);\n    poly10.ps[3] = Point(897.924, -80.6578);\n    new ShapeRef(router, poly10, 10);\n    \n    Polygon poly4(4);\n    poly4.ps[0] = Point(1371.92, 29.8422);\n    poly4.ps[1] = Point(1371.92, 69.8422);\n    poly4.ps[2] = Point(1331.92, 69.8422);\n    poly4.ps[3] = Point(1331.92, 29.8422);\n    new ShapeRef(router, poly4, 4);\n    \n    Polygon poly12(4);\n    poly12.ps[0] = Point(1038.92, 260.557);\n    poly12.ps[1] = Point(1038.92, 300.557);\n    poly12.ps[2] = Point(998.924, 300.557);\n    poly12.ps[3] = Point(998.924, 260.557);\n    new ShapeRef(router, poly12, 12);\n    \n    Polygon poly16(4);\n    poly16.ps[0] = Point(337.924, 743.557);\n    poly16.ps[1] = Point(337.924, 783.557);\n    poly16.ps[2] = Point(297.924, 783.557);\n    poly16.ps[3] = Point(297.924, 743.557);\n    new ShapeRef(router, poly16, 16);\n    \n    Polygon poly91(4);\n    poly91.ps[0] = Point(627.924, 517.557);\n    poly91.ps[1] = Point(627.924, 537.557);\n    poly91.ps[2] = Point(607.924, 537.557);\n    poly91.ps[3] = Point(607.924, 517.557);\n    new ShapeRef(router, poly91, 91);\n    \n    Polygon poly90(4);\n    poly90.ps[0] = Point(507.924, 425.557);\n    poly90.ps[1] = Point(507.924, 445.557);\n    poly90.ps[2] = Point(487.924, 445.557);\n    poly90.ps[3] = Point(487.924, 425.557);\n    new ShapeRef(router, poly90, 90);\n    \n    Polygon poly119(4);\n    poly119.ps[0] = Point(405.924, 693.557);\n    poly119.ps[1] = Point(405.924, 733.557);\n    poly119.ps[2] = Point(349.924, 733.557);\n    poly119.ps[3] = Point(349.924, 693.557);\n    new ShapeRef(router, poly119, 119);\n    \n    Polygon poly120(4);\n    poly120.ps[0] = Point(525.924, 693.557);\n    poly120.ps[1] = Point(525.924, 733.557);\n    poly120.ps[2] = Point(469.924, 733.557);\n    poly120.ps[3] = Point(469.924, 693.557);\n    new ShapeRef(router, poly120, 120);\n    \n    Polygon poly89(4);\n    poly89.ps[0] = Point(507.924, 517.557);\n    poly89.ps[1] = Point(507.924, 537.557);\n    poly89.ps[2] = Point(487.924, 537.557);\n    poly89.ps[3] = Point(487.924, 517.557);\n    new ShapeRef(router, poly89, 89);\n    \n    Polygon poly88(4);\n    poly88.ps[0] = Point(747.924, 564.057);\n    poly88.ps[1] = Point(747.924, 584.057);\n    poly88.ps[2] = Point(727.924, 584.057);\n    poly88.ps[3] = Point(727.924, 564.057);\n    new ShapeRef(router, poly88, 88);\n    \n    Polygon poly87(4);\n    poly87.ps[0] = Point(627.924, 35.8422);\n    poly87.ps[1] = Point(627.924, 55.8422);\n    poly87.ps[2] = Point(607.924, 55.8422);\n    poly87.ps[3] = Point(607.924, 35.8422);\n    new ShapeRef(router, poly87, 87);\n    \n    Polygon poly86(4);\n    poly86.ps[0] = Point(507.924, 35.8422);\n    poly86.ps[1] = Point(507.924, 55.8422);\n    poly86.ps[2] = Point(487.924, 55.8422);\n    poly86.ps[3] = Point(487.924, 35.8422);\n    new ShapeRef(router, poly86, 86);\n    \n    Polygon poly85(4);\n    poly85.ps[0] = Point(387.924, 17.3422);\n    poly85.ps[1] = Point(387.924, 37.3422);\n    poly85.ps[2] = Point(367.924, 37.3422);\n    poly85.ps[3] = Point(367.924, 17.3422);\n    new ShapeRef(router, poly85, 85);\n    \n    Polygon poly74(4);\n    poly74.ps[0] = Point(147.924, 609.557);\n    poly74.ps[1] = Point(147.924, 629.557);\n    poly74.ps[2] = Point(127.924, 629.557);\n    poly74.ps[3] = Point(127.924, 609.557);\n    new ShapeRef(router, poly74, 74);\n    \n    Polygon poly28(4);\n    poly28.ps[0] = Point(817.924, 323.557);\n    poly28.ps[1] = Point(817.924, 363.557);\n    poly28.ps[2] = Point(777.924, 363.557);\n    poly28.ps[3] = Point(777.924, 323.557);\n    new ShapeRef(router, poly28, 28);\n    \n    Polygon poly61(4);\n    poly61.ps[0] = Point(577.924, -44.6578);\n    poly61.ps[1] = Point(577.924, -4.65778);\n    poly61.ps[2] = Point(537.924, -4.65778);\n    poly61.ps[3] = Point(537.924, -44.6578);\n    new ShapeRef(router, poly61, 61);\n    \n    Polygon poly15(4);\n    poly15.ps[0] = Point(1158.92, 415.557);\n    poly15.ps[1] = Point(1158.92, 455.557);\n    poly15.ps[2] = Point(1118.92, 455.557);\n    poly15.ps[3] = Point(1118.92, 415.557);\n    new ShapeRef(router, poly15, 15);\n    \n    Polygon poly49(4);\n    poly49.ps[0] = Point(45.9242, 169.75);\n    poly49.ps[1] = Point(45.9242, 334.75);\n    poly49.ps[2] = Point(-242.076, 334.75);\n    poly49.ps[3] = Point(-242.076, 169.75);\n    new ShapeRef(router, poly49, 49);\n    \n    Polygon poly20(4);\n    poly20.ps[0] = Point(337.924, 507.557);\n    poly20.ps[1] = Point(337.924, 547.557);\n    poly20.ps[2] = Point(297.924, 547.557);\n    poly20.ps[3] = Point(297.924, 507.557);\n    new ShapeRef(router, poly20, 20);\n    \n    Polygon poly66(4);\n    poly66.ps[0] = Point(747.924, -70.6578);\n    poly66.ps[1] = Point(747.924, -50.6578);\n    poly66.ps[2] = Point(727.924, -50.6578);\n    poly66.ps[3] = Point(727.924, -70.6578);\n    new ShapeRef(router, poly66, 66);\n    \n    Polygon poly21(4);\n    poly21.ps[0] = Point(937.924, 141.557);\n    poly21.ps[1] = Point(937.924, 181.557);\n    poly21.ps[2] = Point(897.924, 181.557);\n    poly21.ps[3] = Point(897.924, 141.557);\n    new ShapeRef(router, poly21, 21);\n    \n    Polygon poly68(4);\n    poly68.ps[0] = Point(147.924, 151.557);\n    poly68.ps[1] = Point(147.924, 171.557);\n    poly68.ps[2] = Point(127.924, 171.557);\n    poly68.ps[3] = Point(127.924, 151.557);\n    new ShapeRef(router, poly68, 68);\n    \n    Polygon poly70(4);\n    poly70.ps[0] = Point(207.924, 203.557);\n    poly70.ps[1] = Point(207.924, 223.557);\n    poly70.ps[2] = Point(187.924, 223.557);\n    poly70.ps[3] = Point(187.924, 203.557);\n    new ShapeRef(router, poly70, 70);\n    \n    Polygon poly38(4);\n    poly38.ps[0] = Point(217.924, 507.557);\n    poly38.ps[1] = Point(217.924, 547.557);\n    poly38.ps[2] = Point(177.924, 547.557);\n    poly38.ps[3] = Point(177.924, 507.557);\n    new ShapeRef(router, poly38, 38);\n    \n    Polygon poly51(4);\n    poly51.ps[0] = Point(1038.92, 323.557);\n    poly51.ps[1] = Point(1038.92, 363.557);\n    poly51.ps[2] = Point(998.924, 363.557);\n    poly51.ps[3] = Point(998.924, 323.557);\n    new ShapeRef(router, poly51, 51);\n    \n    Polygon poly42(4);\n    poly42.ps[0] = Point(697.924, 415.557);\n    poly42.ps[1] = Point(697.924, 455.557);\n    poly42.ps[2] = Point(657.924, 455.557);\n    poly42.ps[3] = Point(657.924, 415.557);\n    new ShapeRef(router, poly42, 42);\n    \n    Polygon poly59(4);\n    poly59.ps[0] = Point(937.924, 323.557);\n    poly59.ps[1] = Point(937.924, 363.557);\n    poly59.ps[2] = Point(897.924, 363.557);\n    poly59.ps[3] = Point(897.924, 323.557);\n    new ShapeRef(router, poly59, 59);\n    \n    Polygon poly32(4);\n    poly32.ps[0] = Point(1038.92, 141.557);\n    poly32.ps[1] = Point(1038.92, 181.557);\n    poly32.ps[2] = Point(998.924, 181.557);\n    poly32.ps[3] = Point(998.924, 141.557);\n    new ShapeRef(router, poly32, 32);\n    \n    Polygon poly6(4);\n    poly6.ps[0] = Point(1371.92, -80.6578);\n    poly6.ps[1] = Point(1371.92, -40.6578);\n    poly6.ps[2] = Point(1331.92, -40.6578);\n    poly6.ps[3] = Point(1331.92, -80.6578);\n    new ShapeRef(router, poly6, 6);\n    \n    Polygon poly40(4);\n    poly40.ps[0] = Point(97.9242, 141.557);\n    poly40.ps[1] = Point(97.9242, 181.557);\n    poly40.ps[2] = Point(57.9242, 181.557);\n    poly40.ps[3] = Point(57.9242, 141.557);\n    new ShapeRef(router, poly40, 40);\n    \n    Polygon poly43(4);\n    poly43.ps[0] = Point(1038.92, 1.84222);\n    poly43.ps[1] = Point(1038.92, 41.8422);\n    poly43.ps[2] = Point(998.924, 41.8422);\n    poly43.ps[3] = Point(998.924, 1.84222);\n    new ShapeRef(router, poly43, 43);\n    \n    Polygon poly35(4);\n    poly35.ps[0] = Point(1158.92, 40.3422);\n    poly35.ps[1] = Point(1158.92, 80.3422);\n    poly35.ps[2] = Point(1118.92, 80.3422);\n    poly35.ps[3] = Point(1118.92, 40.3422);\n    new ShapeRef(router, poly35, 35);\n    \n    Polygon poly81(4);\n    poly81.ps[0] = Point(627.924, 753.557);\n    poly81.ps[1] = Point(627.924, 773.557);\n    poly81.ps[2] = Point(607.924, 773.557);\n    poly81.ps[3] = Point(607.924, 753.557);\n    new ShapeRef(router, poly81, 81);\n    \n    Polygon poly111(4);\n    poly111.ps[0] = Point(285.924, 245.557);\n    poly111.ps[1] = Point(285.924, 285.557);\n    poly111.ps[2] = Point(229.924, 285.557);\n    poly111.ps[3] = Point(229.924, 245.557);\n    new ShapeRef(router, poly111, 111);\n    \n    Polygon poly128(4);\n    poly128.ps[0] = Point(765.924, 504.057);\n    poly128.ps[1] = Point(765.924, 544.057);\n    poly128.ps[2] = Point(709.924, 544.057);\n    poly128.ps[3] = Point(709.924, 504.057);\n    new ShapeRef(router, poly128, 128);\n    \n    Polygon poly129(4);\n    poly129.ps[0] = Point(525.924, 457.557);\n    poly129.ps[1] = Point(525.924, 497.557);\n    poly129.ps[2] = Point(469.924, 497.557);\n    poly129.ps[3] = Point(469.924, 457.557);\n    new ShapeRef(router, poly129, 129);\n    \n    Polygon poly130(4);\n    poly130.ps[0] = Point(525.924, 365.557);\n    poly130.ps[1] = Point(525.924, 405.557);\n    poly130.ps[2] = Point(469.924, 405.557);\n    poly130.ps[3] = Point(469.924, 365.557);\n    new ShapeRef(router, poly130, 130);\n    \n    Polygon poly18(4);\n    poly18.ps[0] = Point(217.924, 743.557);\n    poly18.ps[1] = Point(217.924, 783.557);\n    poly18.ps[2] = Point(177.924, 783.557);\n    poly18.ps[3] = Point(177.924, 743.557);\n    new ShapeRef(router, poly18, 18);\n    \n    Polygon poly34(4);\n    poly34.ps[0] = Point(1278.92, 323.557);\n    poly34.ps[1] = Point(1278.92, 363.557);\n    poly34.ps[2] = Point(1238.92, 363.557);\n    poly34.ps[3] = Point(1238.92, 323.557);\n    new ShapeRef(router, poly34, 34);\n    \n    Polygon poly57(4);\n    poly57.ps[0] = Point(817.924, 141.557);\n    poly57.ps[1] = Point(817.924, 181.557);\n    poly57.ps[2] = Point(777.924, 181.557);\n    poly57.ps[3] = Point(777.924, 141.557);\n    new ShapeRef(router, poly57, 57);\n    \n    Polygon poly83(4);\n    poly83.ps[0] = Point(627.924, 893.057);\n    poly83.ps[1] = Point(627.924, 913.057);\n    poly83.ps[2] = Point(607.924, 913.057);\n    poly83.ps[3] = Point(607.924, 893.057);\n    new ShapeRef(router, poly83, 83);\n    \n    Polygon poly123(4);\n    poly123.ps[0] = Point(645.924, 833.057);\n    poly123.ps[1] = Point(645.924, 873.057);\n    poly123.ps[2] = Point(589.924, 873.057);\n    poly123.ps[3] = Point(589.924, 833.057);\n    new ShapeRef(router, poly123, 123);\n    \n    Polygon poly124(4);\n    poly124.ps[0] = Point(405.924, 91.5565);\n    poly124.ps[1] = Point(405.924, 131.557);\n    poly124.ps[2] = Point(349.924, 131.557);\n    poly124.ps[3] = Point(349.924, 91.5565);\n    new ShapeRef(router, poly124, 124);\n    \n    Polygon poly7(4);\n    poly7.ps[0] = Point(1278.92, -80.6578);\n    poly7.ps[1] = Point(1278.92, -40.6578);\n    poly7.ps[2] = Point(1238.92, -40.6578);\n    poly7.ps[3] = Point(1238.92, -80.6578);\n    new ShapeRef(router, poly7, 7);\n    \n    Polygon poly44(4);\n    poly44.ps[0] = Point(97.9242, 507.557);\n    poly44.ps[1] = Point(97.9242, 547.557);\n    poly44.ps[2] = Point(57.9242, 547.557);\n    poly44.ps[3] = Point(57.9242, 507.557);\n    new ShapeRef(router, poly44, 44);\n    \n    Polygon poly30(4);\n    poly30.ps[0] = Point(1278.92, 415.557);\n    poly30.ps[1] = Point(1278.92, 455.557);\n    poly30.ps[2] = Point(1238.92, 455.557);\n    poly30.ps[3] = Point(1238.92, 415.557);\n    new ShapeRef(router, poly30, 30);\n    \n    Polygon poly71(4);\n    poly71.ps[0] = Point(267.924, 305.557);\n    poly71.ps[1] = Point(267.924, 325.557);\n    poly71.ps[2] = Point(247.924, 325.557);\n    poly71.ps[3] = Point(247.924, 305.557);\n    new ShapeRef(router, poly71, 71);\n    \n    Polygon poly41(4);\n    poly41.ps[0] = Point(577.924, 743.557);\n    poly41.ps[1] = Point(577.924, 783.557);\n    poly41.ps[2] = Point(537.924, 783.557);\n    poly41.ps[3] = Point(537.924, 743.557);\n    new ShapeRef(router, poly41, 41);\n    \n    Polygon poly39(4);\n    poly39.ps[0] = Point(457.924, 141.557);\n    poly39.ps[1] = Point(457.924, 181.557);\n    poly39.ps[2] = Point(417.924, 181.557);\n    poly39.ps[3] = Point(417.924, 141.557);\n    new ShapeRef(router, poly39, 39);\n    \n    Polygon poly47(4);\n    poly47.ps[0] = Point(697.924, 271.557);\n    poly47.ps[1] = Point(697.924, 311.557);\n    poly47.ps[2] = Point(657.924, 311.557);\n    poly47.ps[3] = Point(657.924, 271.557);\n    new ShapeRef(router, poly47, 47);\n    \n    Polygon poly73(4);\n    poly73.ps[0] = Point(147.924, 517.557);\n    poly73.ps[1] = Point(147.924, 537.557);\n    poly73.ps[2] = Point(127.924, 537.557);\n    poly73.ps[3] = Point(127.924, 517.557);\n    new ShapeRef(router, poly73, 73);\n    \n    Polygon poly11(4);\n    poly11.ps[0] = Point(817.924, -80.6578);\n    poly11.ps[1] = Point(817.924, -40.6578);\n    poly11.ps[2] = Point(777.924, -40.6578);\n    poly11.ps[3] = Point(777.924, -80.6578);\n    new ShapeRef(router, poly11, 11);\n    \n    Polygon poly75(4);\n    poly75.ps[0] = Point(87.9242, 651.557);\n    poly75.ps[1] = Point(87.9242, 671.557);\n    poly75.ps[2] = Point(67.9242, 671.557);\n    poly75.ps[3] = Point(67.9242, 651.557);\n    new ShapeRef(router, poly75, 75);\n    \n    Polygon poly27(4);\n    poly27.ps[0] = Point(577.924, 507.557);\n    poly27.ps[1] = Point(577.924, 547.557);\n    poly27.ps[2] = Point(537.924, 547.557);\n    poly27.ps[3] = Point(537.924, 507.557);\n    new ShapeRef(router, poly27, 27);\n    \n    Polygon poly31(4);\n    poly31.ps[0] = Point(1278.92, 141.557);\n    poly31.ps[1] = Point(1278.92, 181.557);\n    poly31.ps[2] = Point(1238.92, 181.557);\n    poly31.ps[3] = Point(1238.92, 141.557);\n    new ShapeRef(router, poly31, 31);\n    \n    Polygon poly67(4);\n    poly67.ps[0] = Point(147.924, 24.8422);\n    poly67.ps[1] = Point(147.924, 44.8422);\n    poly67.ps[2] = Point(127.924, 44.8422);\n    poly67.ps[3] = Point(127.924, 24.8422);\n    new ShapeRef(router, poly67, 67);\n    \n    Polygon poly50(4);\n    poly50.ps[0] = Point(272.5, -82.1578);\n    poly50.ps[1] = Point(272.5, -47.1578);\n    poly50.ps[2] = Point(35.5, -47.1578);\n    poly50.ps[3] = Point(35.5, -82.1578);\n    new ShapeRef(router, poly50, 50);\n    \n    Polygon poly46(4);\n    poly46.ps[0] = Point(577.924, 415.557);\n    poly46.ps[1] = Point(577.924, 455.557);\n    poly46.ps[2] = Point(537.924, 455.557);\n    poly46.ps[3] = Point(537.924, 415.557);\n    new ShapeRef(router, poly46, 46);\n    \n    Polygon poly64(4);\n    poly64.ps[0] = Point(817.924, 554.057);\n    poly64.ps[1] = Point(817.924, 594.057);\n    poly64.ps[2] = Point(777.924, 594.057);\n    poly64.ps[3] = Point(777.924, 554.057);\n    new ShapeRef(router, poly64, 64);\n    \n    Polygon poly23(4);\n    poly23.ps[0] = Point(337.924, 141.557);\n    poly23.ps[1] = Point(337.924, 181.557);\n    poly23.ps[2] = Point(297.924, 181.557);\n    poly23.ps[3] = Point(297.924, 141.557);\n    new ShapeRef(router, poly23, 23);\n    \n    Polygon poly72(4);\n    poly72.ps[0] = Point(87.9242, 357.557);\n    poly72.ps[1] = Point(87.9242, 377.557);\n    poly72.ps[2] = Point(67.9242, 377.557);\n    poly72.ps[3] = Point(67.9242, 357.557);\n    new ShapeRef(router, poly72, 72);\n    \n    Polygon poly14(4);\n    poly14.ps[0] = Point(1158.92, 141.557);\n    poly14.ps[1] = Point(1158.92, 181.557);\n    poly14.ps[2] = Point(1118.92, 181.557);\n    poly14.ps[3] = Point(1118.92, 141.557);\n    new ShapeRef(router, poly14, 14);\n    \n    Polygon poly45(4);\n    poly45.ps[0] = Point(577.924, 34.8422);\n    poly45.ps[1] = Point(577.924, 74.8422);\n    poly45.ps[2] = Point(537.924, 74.8422);\n    poly45.ps[3] = Point(537.924, 34.8422);\n    new ShapeRef(router, poly45, 45);\n    \n    Polygon poly82(4);\n    poly82.ps[0] = Point(507.924, 893.057);\n    poly82.ps[1] = Point(507.924, 913.057);\n    poly82.ps[2] = Point(487.924, 913.057);\n    poly82.ps[3] = Point(487.924, 893.057);\n    new ShapeRef(router, poly82, 82);\n    \n    Polygon poly56(4);\n    poly56.ps[0] = Point(457.924, -44.6578);\n    poly56.ps[1] = Point(457.924, -4.65778);\n    poly56.ps[2] = Point(417.924, -4.65778);\n    poly56.ps[3] = Point(417.924, -44.6578);\n    new ShapeRef(router, poly56, 56);\n    \n    Polygon poly17(4);\n    poly17.ps[0] = Point(577.924, 883.057);\n    poly17.ps[1] = Point(577.924, 923.057);\n    poly17.ps[2] = Point(537.924, 923.057);\n    poly17.ps[3] = Point(537.924, 883.057);\n    new ShapeRef(router, poly17, 17);\n    \n    Polygon poly33(4);\n    poly33.ps[0] = Point(937.924, 415.557);\n    poly33.ps[1] = Point(937.924, 455.557);\n    poly33.ps[2] = Point(897.924, 455.557);\n    poly33.ps[3] = Point(897.924, 415.557);\n    new ShapeRef(router, poly33, 33);\n    \n    Polygon poly22(4);\n    poly22.ps[0] = Point(697.924, 34.8422);\n    poly22.ps[1] = Point(697.924, 74.8422);\n    poly22.ps[2] = Point(657.924, 74.8422);\n    poly22.ps[3] = Point(657.924, 34.8422);\n    new ShapeRef(router, poly22, 22);\n    \n    Polygon poly13(4);\n    poly13.ps[0] = Point(1158.92, 323.557);\n    poly13.ps[1] = Point(1158.92, 363.557);\n    poly13.ps[2] = Point(1118.92, 363.557);\n    poly13.ps[3] = Point(1118.92, 323.557);\n    new ShapeRef(router, poly13, 13);\n    \n    Polygon poly52(4);\n    poly52.ps[0] = Point(217.924, 295.557);\n    poly52.ps[1] = Point(217.924, 335.557);\n    poly52.ps[2] = Point(177.924, 335.557);\n    poly52.ps[3] = Point(177.924, 295.557);\n    new ShapeRef(router, poly52, 52);\n    \n    Polygon poly84(4);\n    poly84.ps[0] = Point(387.924, 151.557);\n    poly84.ps[1] = Point(387.924, 171.557);\n    poly84.ps[2] = Point(367.924, 171.557);\n    poly84.ps[3] = Point(367.924, 151.557);\n    new ShapeRef(router, poly84, 84);\n    \n    Polygon poly78(4);\n    poly78.ps[0] = Point(387.924, 617.557);\n    poly78.ps[1] = Point(387.924, 637.557);\n    poly78.ps[2] = Point(367.924, 637.557);\n    poly78.ps[3] = Point(367.924, 617.557);\n    new ShapeRef(router, poly78, 78);\n    \n    Polygon poly114(4);\n    poly114.ps[0] = Point(165.924, 549.557);\n    poly114.ps[1] = Point(165.924, 589.557);\n    poly114.ps[2] = Point(109.924, 589.557);\n    poly114.ps[3] = Point(109.924, 549.557);\n    new ShapeRef(router, poly114, 114);\n    \n    Polygon poly107(4);\n    poly107.ps[0] = Point(165.924, -35.1578);\n    poly107.ps[1] = Point(165.924, 4.84222);\n    poly107.ps[2] = Point(109.924, 4.84222);\n    poly107.ps[3] = Point(109.924, -35.1578);\n    new ShapeRef(router, poly107, 107);\n    \n    Polygon poly106(4);\n    poly106.ps[0] = Point(765.924, -130.658);\n    poly106.ps[1] = Point(765.924, -90.6578);\n    poly106.ps[2] = Point(709.924, -90.6578);\n    poly106.ps[3] = Point(709.924, -130.658);\n    new ShapeRef(router, poly106, 106);\n    \n    Polygon poly105(4);\n    poly105.ps[0] = Point(747.924, 850.057);\n    poly105.ps[1] = Point(747.924, 870.057);\n    poly105.ps[2] = Point(727.924, 870.057);\n    poly105.ps[3] = Point(727.924, 850.057);\n    new ShapeRef(router, poly105, 105);\n    \n    Polygon poly104(4);\n    poly104.ps[0] = Point(747.924, 151.557);\n    poly104.ps[1] = Point(747.924, 171.557);\n    poly104.ps[2] = Point(727.924, 171.557);\n    poly104.ps[3] = Point(727.924, 151.557);\n    new ShapeRef(router, poly104, 104);\n    \n    Polygon poly103(4);\n    poly103.ps[0] = Point(968.924, 270.557);\n    poly103.ps[1] = Point(968.924, 290.557);\n    poly103.ps[2] = Point(948.924, 290.557);\n    poly103.ps[3] = Point(948.924, 270.557);\n    new ShapeRef(router, poly103, 103);\n    \n    Polygon poly102(4);\n    poly102.ps[0] = Point(1088.92, -70.6578);\n    poly102.ps[1] = Point(1088.92, -50.6578);\n    poly102.ps[2] = Point(1068.92, -50.6578);\n    poly102.ps[3] = Point(1068.92, -70.6578);\n    new ShapeRef(router, poly102, 102);\n    \n    Polygon poly101(4);\n    poly101.ps[0] = Point(1208.92, 142.342);\n    poly101.ps[1] = Point(1208.92, 162.342);\n    poly101.ps[2] = Point(1188.92, 162.342);\n    poly101.ps[3] = Point(1188.92, 142.342);\n    new ShapeRef(router, poly101, 101);\n    \n    Polygon poly100(4);\n    poly100.ps[0] = Point(1088.92, 50.3422);\n    poly100.ps[1] = Point(1088.92, 70.3422);\n    poly100.ps[2] = Point(1068.92, 70.3422);\n    poly100.ps[3] = Point(1068.92, 50.3422);\n    new ShapeRef(router, poly100, 100);\n    \n    Polygon poly115(4);\n    poly115.ps[0] = Point(167.924, 641.557);\n    poly115.ps[1] = Point(167.924, 681.557);\n    poly115.ps[2] = Point(111.924, 681.557);\n    poly115.ps[3] = Point(111.924, 641.557);\n    new ShapeRef(router, poly115, 115);\n    \n    Polygon poly116(4);\n    poly116.ps[0] = Point(165.924, 693.557);\n    poly116.ps[1] = Point(165.924, 733.557);\n    poly116.ps[2] = Point(109.924, 733.557);\n    poly116.ps[3] = Point(109.924, 693.557);\n    new ShapeRef(router, poly116, 116);\n    \n    Polygon poly99(4);\n    poly99.ps[0] = Point(1088.92, 142.342);\n    poly99.ps[1] = Point(1088.92, 162.342);\n    poly99.ps[2] = Point(1068.92, 162.342);\n    poly99.ps[3] = Point(1068.92, 142.342);\n    new ShapeRef(router, poly99, 99);\n    \n    Polygon poly98(4);\n    poly98.ps[0] = Point(1208.92, 378.557);\n    poly98.ps[1] = Point(1208.92, 398.557);\n    poly98.ps[2] = Point(1188.92, 398.557);\n    poly98.ps[3] = Point(1188.92, 378.557);\n    new ShapeRef(router, poly98, 98);\n    \n    Polygon poly97(4);\n    poly97.ps[0] = Point(1088.92, 378.557);\n    poly97.ps[1] = Point(1088.92, 398.557);\n    poly97.ps[2] = Point(1068.92, 398.557);\n    poly97.ps[3] = Point(1068.92, 378.557);\n    new ShapeRef(router, poly97, 97);\n    \n    Polygon poly96(4);\n    poly96.ps[0] = Point(747.924, 333.557);\n    poly96.ps[1] = Point(747.924, 353.557);\n    poly96.ps[2] = Point(727.924, 353.557);\n    poly96.ps[3] = Point(727.924, 333.557);\n    new ShapeRef(router, poly96, 96);\n    \n    Polygon poly95(4);\n    poly95.ps[0] = Point(867.924, 151.557);\n    poly95.ps[1] = Point(867.924, 171.557);\n    poly95.ps[2] = Point(847.924, 171.557);\n    poly95.ps[3] = Point(847.924, 151.557);\n    new ShapeRef(router, poly95, 95);\n    \n    Polygon poly94(4);\n    poly94.ps[0] = Point(867.924, 425.557);\n    poly94.ps[1] = Point(867.924, 445.557);\n    poly94.ps[2] = Point(847.924, 445.557);\n    poly94.ps[3] = Point(847.924, 425.557);\n    new ShapeRef(router, poly94, 94);\n    \n    Polygon poly93(4);\n    poly93.ps[0] = Point(867.924, 333.557);\n    poly93.ps[1] = Point(867.924, 353.557);\n    poly93.ps[2] = Point(847.924, 353.557);\n    poly93.ps[3] = Point(847.924, 333.557);\n    new ShapeRef(router, poly93, 93);\n    \n    Polygon poly92(4);\n    poly92.ps[0] = Point(627.924, 425.557);\n    poly92.ps[1] = Point(627.924, 445.557);\n    poly92.ps[2] = Point(607.924, 445.557);\n    poly92.ps[3] = Point(607.924, 425.557);\n    new ShapeRef(router, poly92, 92);\n    \n    Polygon poly117(4);\n    poly117.ps[0] = Point(285.924, 693.557);\n    poly117.ps[1] = Point(285.924, 733.557);\n    poly117.ps[2] = Point(229.924, 733.557);\n    poly117.ps[3] = Point(229.924, 693.557);\n    new ShapeRef(router, poly117, 117);\n    \n    Polygon poly118(4);\n    poly118.ps[0] = Point(405.924, 557.557);\n    poly118.ps[1] = Point(405.924, 597.557);\n    poly118.ps[2] = Point(349.924, 597.557);\n    poly118.ps[3] = Point(349.924, 557.557);\n    new ShapeRef(router, poly118, 118);\n    \n    Polygon poly36(4);\n    poly36.ps[0] = Point(697.924, 507.557);\n    poly36.ps[1] = Point(697.924, 547.557);\n    poly36.ps[2] = Point(657.924, 547.557);\n    poly36.ps[3] = Point(657.924, 507.557);\n    new ShapeRef(router, poly36, 36);\n    \n    Polygon poly55(4);\n    poly55.ps[0] = Point(457.924, 7.34222);\n    poly55.ps[1] = Point(457.924, 47.3422);\n    poly55.ps[2] = Point(417.924, 47.3422);\n    poly55.ps[3] = Point(417.924, 7.34222);\n    new ShapeRef(router, poly55, 55);\n    \n    Polygon poly26(4);\n    poly26.ps[0] = Point(697.924, 743.557);\n    poly26.ps[1] = Point(697.924, 783.557);\n    poly26.ps[2] = Point(657.924, 783.557);\n    poly26.ps[3] = Point(657.924, 743.557);\n    new ShapeRef(router, poly26, 26);\n    \n    Polygon poly37(4);\n    poly37.ps[0] = Point(457.924, 607.557);\n    poly37.ps[1] = Point(457.924, 647.557);\n    poly37.ps[2] = Point(417.924, 647.557);\n    poly37.ps[3] = Point(417.924, 607.557);\n    new ShapeRef(router, poly37, 37);\n    \n    Polygon poly77(4);\n    poly77.ps[0] = Point(267.924, 753.557);\n    poly77.ps[1] = Point(267.924, 773.557);\n    poly77.ps[2] = Point(247.924, 773.557);\n    poly77.ps[3] = Point(247.924, 753.557);\n    new ShapeRef(router, poly77, 77);\n    \n    Polygon poly60(4);\n    poly60.ps[0] = Point(937.924, 1.84222);\n    poly60.ps[1] = Point(937.924, 41.8422);\n    poly60.ps[2] = Point(897.924, 41.8422);\n    poly60.ps[3] = Point(897.924, 1.84222);\n    new ShapeRef(router, poly60, 60);\n    \n    Polygon poly65(4);\n    poly65.ps[0] = Point(97.9242, 599.557);\n    poly65.ps[1] = Point(97.9242, 639.557);\n    poly65.ps[2] = Point(57.9242, 639.557);\n    poly65.ps[3] = Point(57.9242, 599.557);\n    new ShapeRef(router, poly65, 65);\n    \n    Polygon poly108(4);\n    poly108.ps[0] = Point(165.924, 91.5565);\n    poly108.ps[1] = Point(165.924, 131.557);\n    poly108.ps[2] = Point(109.924, 131.557);\n    poly108.ps[3] = Point(109.924, 91.5565);\n    new ShapeRef(router, poly108, 108);\n    \n    Polygon poly54(4);\n    poly54.ps[0] = Point(697.924, 323.557);\n    poly54.ps[1] = Point(697.924, 363.557);\n    poly54.ps[2] = Point(657.924, 363.557);\n    poly54.ps[3] = Point(657.924, 323.557);\n    new ShapeRef(router, poly54, 54);\n    \n    Polygon poly112(4);\n    poly112.ps[0] = Point(167.924, 347.557);\n    poly112.ps[1] = Point(167.924, 387.557);\n    poly112.ps[2] = Point(111.924, 387.557);\n    poly112.ps[3] = Point(111.924, 347.557);\n    new ShapeRef(router, poly112, 112);\n    \n    Polygon poly113(4);\n    poly113.ps[0] = Point(165.924, 457.557);\n    poly113.ps[1] = Point(165.924, 497.557);\n    poly113.ps[2] = Point(109.924, 497.557);\n    poly113.ps[3] = Point(109.924, 457.557);\n    new ShapeRef(router, poly113, 113);\n    \n    Polygon poly110(4);\n    poly110.ps[0] = Point(287.924, 193.557);\n    poly110.ps[1] = Point(287.924, 233.557);\n    poly110.ps[2] = Point(231.924, 233.557);\n    poly110.ps[3] = Point(231.924, 193.557);\n    new ShapeRef(router, poly110, 110);\n    \n    Polygon poly25(4);\n    poly25.ps[0] = Point(697.924, 883.057);\n    poly25.ps[1] = Point(697.924, 923.057);\n    poly25.ps[2] = Point(657.924, 923.057);\n    poly25.ps[3] = Point(657.924, 883.057);\n    new ShapeRef(router, poly25, 25);\n    \n    Polygon poly53(4);\n    poly53.ps[0] = Point(577.924, 323.557);\n    poly53.ps[1] = Point(577.924, 363.557);\n    poly53.ps[2] = Point(537.924, 363.557);\n    poly53.ps[3] = Point(537.924, 323.557);\n    new ShapeRef(router, poly53, 53);\n    \n    Polygon poly3(4);\n    poly3.ps[0] = Point(1278.92, -22.1578);\n    poly3.ps[1] = Point(1278.92, 17.8422);\n    poly3.ps[2] = Point(1238.92, 17.8422);\n    poly3.ps[3] = Point(1238.92, -22.1578);\n    new ShapeRef(router, poly3, 3);\n    \n    Polygon poly141(4);\n    poly141.ps[0] = Point(1226.92, 82.3422);\n    poly141.ps[1] = Point(1226.92, 122.342);\n    poly141.ps[2] = Point(1170.92, 122.342);\n    poly141.ps[3] = Point(1170.92, 82.3422);\n    new ShapeRef(router, poly141, 141);\n    \n    Polygon poly142(4);\n    poly142.ps[0] = Point(1106.92, -130.658);\n    poly142.ps[1] = Point(1106.92, -90.6578);\n    poly142.ps[2] = Point(1050.92, -90.6578);\n    poly142.ps[3] = Point(1050.92, -130.658);\n    new ShapeRef(router, poly142, 142);\n    \n    Polygon poly143(4);\n    poly143.ps[0] = Point(986.924, 210.557);\n    poly143.ps[1] = Point(986.924, 250.557);\n    poly143.ps[2] = Point(930.924, 250.557);\n    poly143.ps[3] = Point(930.924, 210.557);\n    new ShapeRef(router, poly143, 143);\n    \n    Polygon poly144(4);\n    poly144.ps[0] = Point(765.924, 91.5565);\n    poly144.ps[1] = Point(765.924, 131.557);\n    poly144.ps[2] = Point(709.924, 131.557);\n    poly144.ps[3] = Point(709.924, 91.5565);\n    new ShapeRef(router, poly144, 144);\n    \n    Polygon poly145(4);\n    poly145.ps[0] = Point(765.924, 790.057);\n    poly145.ps[1] = Point(765.924, 830.057);\n    poly145.ps[2] = Point(709.924, 830.057);\n    poly145.ps[3] = Point(709.924, 790.057);\n    new ShapeRef(router, poly145, 145);\n    \n    Polygon poly146(4);\n    poly146.ps[0] = Point(45.9242, 232.5);\n    poly146.ps[1] = Point(45.9242, 272.5);\n    poly146.ps[2] = Point(-14.0758, 272.5);\n    poly146.ps[3] = Point(-14.0758, 232.5);\n    new ShapeRef(router, poly146, 146);\n    \n    Polygon poly147(4);\n    poly147.ps[0] = Point(-26.0758, 274.75);\n    poly147.ps[1] = Point(-26.0758, 334.75);\n    poly147.ps[2] = Point(-66.0758, 334.75);\n    poly147.ps[3] = Point(-66.0758, 274.75);\n    new ShapeRef(router, poly147, 147);\n    \n    Polygon poly5(4);\n    poly5.ps[0] = Point(1371.92, -22.1578);\n    poly5.ps[1] = Point(1371.92, 17.8422);\n    poly5.ps[2] = Point(1331.92, 17.8422);\n    poly5.ps[3] = Point(1331.92, -22.1578);\n    new ShapeRef(router, poly5, 5);\n    \n    Polygon poly131(4);\n    poly131.ps[0] = Point(645.924, 457.557);\n    poly131.ps[1] = Point(645.924, 497.557);\n    poly131.ps[2] = Point(589.924, 497.557);\n    poly131.ps[3] = Point(589.924, 457.557);\n    new ShapeRef(router, poly131, 131);\n    \n    Polygon poly132(4);\n    poly132.ps[0] = Point(645.924, 365.557);\n    poly132.ps[1] = Point(645.924, 405.557);\n    poly132.ps[2] = Point(589.924, 405.557);\n    poly132.ps[3] = Point(589.924, 365.557);\n    new ShapeRef(router, poly132, 132);\n    \n    Polygon poly133(4);\n    poly133.ps[0] = Point(885.924, 273.557);\n    poly133.ps[1] = Point(885.924, 313.557);\n    poly133.ps[2] = Point(829.924, 313.557);\n    poly133.ps[3] = Point(829.924, 273.557);\n    new ShapeRef(router, poly133, 133);\n    \n    Polygon poly121(4);\n    poly121.ps[0] = Point(645.924, 693.557);\n    poly121.ps[1] = Point(645.924, 733.557);\n    poly121.ps[2] = Point(589.924, 733.557);\n    poly121.ps[3] = Point(589.924, 693.557);\n    new ShapeRef(router, poly121, 121);\n    \n    Polygon poly122(4);\n    poly122.ps[0] = Point(525.924, 833.057);\n    poly122.ps[1] = Point(525.924, 873.057);\n    poly122.ps[2] = Point(469.924, 873.057);\n    poly122.ps[3] = Point(469.924, 833.057);\n    new ShapeRef(router, poly122, 122);\n    \n    Polygon poly134(4);\n    poly134.ps[0] = Point(885.924, 365.557);\n    poly134.ps[1] = Point(885.924, 405.557);\n    poly134.ps[2] = Point(829.924, 405.557);\n    poly134.ps[3] = Point(829.924, 365.557);\n    new ShapeRef(router, poly134, 134);\n    \n    Polygon poly135(4);\n    poly135.ps[0] = Point(885.924, 91.5565);\n    poly135.ps[1] = Point(885.924, 131.557);\n    poly135.ps[2] = Point(829.924, 131.557);\n    poly135.ps[3] = Point(829.924, 91.5565);\n    new ShapeRef(router, poly135, 135);\n    \n    Polygon poly136(4);\n    poly136.ps[0] = Point(765.924, 273.557);\n    poly136.ps[1] = Point(765.924, 313.557);\n    poly136.ps[2] = Point(709.924, 313.557);\n    poly136.ps[3] = Point(709.924, 273.557);\n    new ShapeRef(router, poly136, 136);\n    \n    Polygon poly137(4);\n    poly137.ps[0] = Point(1106.92, 318.557);\n    poly137.ps[1] = Point(1106.92, 358.557);\n    poly137.ps[2] = Point(1050.92, 358.557);\n    poly137.ps[3] = Point(1050.92, 318.557);\n    new ShapeRef(router, poly137, 137);\n    \n    Polygon poly138(4);\n    poly138.ps[0] = Point(1226.92, 318.557);\n    poly138.ps[1] = Point(1226.92, 358.557);\n    poly138.ps[2] = Point(1170.92, 358.557);\n    poly138.ps[3] = Point(1170.92, 318.557);\n    new ShapeRef(router, poly138, 138);\n    \n    Polygon poly139(4);\n    poly139.ps[0] = Point(1106.92, 82.3422);\n    poly139.ps[1] = Point(1106.92, 122.342);\n    poly139.ps[2] = Point(1050.92, 122.342);\n    poly139.ps[3] = Point(1050.92, 82.3422);\n    new ShapeRef(router, poly139, 139);\n    \n    Polygon poly140(4);\n    poly140.ps[0] = Point(1106.92, -9.65778);\n    poly140.ps[1] = Point(1106.92, 30.3422);\n    poly140.ps[2] = Point(1050.92, 30.3422);\n    poly140.ps[3] = Point(1050.92, -9.65778);\n    new ShapeRef(router, poly140, 140);\n    \n    Polygon poly76(4);\n    poly76.ps[0] = Point(147.924, 753.557);\n    poly76.ps[1] = Point(147.924, 773.557);\n    poly76.ps[2] = Point(127.924, 773.557);\n    poly76.ps[3] = Point(127.924, 753.557);\n    new ShapeRef(router, poly76, 76);\n    \n    Polygon poly9(4);\n    poly9.ps[0] = Point(1038.92, -80.6578);\n    poly9.ps[1] = Point(1038.92, -40.6578);\n    poly9.ps[2] = Point(998.924, -40.6578);\n    poly9.ps[3] = Point(998.924, -80.6578);\n    new ShapeRef(router, poly9, 9);\n    \n    Polygon poly2(4);\n    poly2.ps[0] = Point(577.924, 795.557);\n    poly2.ps[1] = Point(577.924, 835.557);\n    poly2.ps[2] = Point(537.924, 835.557);\n    poly2.ps[3] = Point(537.924, 795.557);\n    new ShapeRef(router, poly2, 2);\n    \n    ConnRef *connRef207 = new ConnRef(router, 207);\n    ConnEnd srcPt207(Point(507.924, 45.8422), 15);\n    connRef207->setSourceEndpoint(srcPt207);\n    ConnEnd dstPt207(Point(557.924, 54.8422), 15);\n    connRef207->setDestEndpoint(dstPt207);\n    connRef207->setRoutingType((ConnType)2);\n\n    ConnRef *connRef208 = new ConnRef(router, 208);\n    ConnEnd srcPt208(Point(627.924, 45.8422), 15);\n    connRef208->setSourceEndpoint(srcPt208);\n    ConnEnd dstPt208(Point(677.924, 54.8422), 15);\n    connRef208->setDestEndpoint(dstPt208);\n    connRef208->setRoutingType((ConnType)2);\n\n    ConnRef *connRef209 = new ConnRef(router, 209);\n    ConnEnd srcPt209(Point(747.924, 574.057), 15);\n    connRef209->setSourceEndpoint(srcPt209);\n    ConnEnd dstPt209(Point(797.924, 574.057), 15);\n    connRef209->setDestEndpoint(dstPt209);\n    connRef209->setRoutingType((ConnType)2);\n\n    ConnRef *connRef210 = new ConnRef(router, 210);\n    ConnEnd srcPt210(Point(507.924, 527.557), 15);\n    connRef210->setSourceEndpoint(srcPt210);\n    ConnEnd dstPt210(Point(557.924, 527.557), 15);\n    connRef210->setDestEndpoint(dstPt210);\n    connRef210->setRoutingType((ConnType)2);\n\n    ConnRef *connRef211 = new ConnRef(router, 211);\n    ConnEnd srcPt211(Point(507.924, 435.557), 15);\n    connRef211->setSourceEndpoint(srcPt211);\n    ConnEnd dstPt211(Point(557.924, 435.557), 15);\n    connRef211->setDestEndpoint(dstPt211);\n    connRef211->setRoutingType((ConnType)2);\n\n    ConnRef *connRef212 = new ConnRef(router, 212);\n    ConnEnd srcPt212(Point(627.924, 527.557), 15);\n    connRef212->setSourceEndpoint(srcPt212);\n    ConnEnd dstPt212(Point(677.924, 527.557), 15);\n    connRef212->setDestEndpoint(dstPt212);\n    connRef212->setRoutingType((ConnType)2);\n\n    ConnRef *connRef213 = new ConnRef(router, 213);\n    ConnEnd srcPt213(Point(627.924, 435.557), 15);\n    connRef213->setSourceEndpoint(srcPt213);\n    ConnEnd dstPt213(Point(677.924, 435.557), 15);\n    connRef213->setDestEndpoint(dstPt213);\n    connRef213->setRoutingType((ConnType)2);\n\n    ConnRef *connRef214 = new ConnRef(router, 214);\n    ConnEnd srcPt214(Point(867.924, 343.557), 15);\n    connRef214->setSourceEndpoint(srcPt214);\n    ConnEnd dstPt214(Point(917.924, 343.557), 15);\n    connRef214->setDestEndpoint(dstPt214);\n    connRef214->setRoutingType((ConnType)2);\n\n    ConnRef *connRef215 = new ConnRef(router, 215);\n    ConnEnd srcPt215(Point(867.924, 435.557), 15);\n    connRef215->setSourceEndpoint(srcPt215);\n    ConnEnd dstPt215(Point(917.924, 435.557), 15);\n    connRef215->setDestEndpoint(dstPt215);\n    connRef215->setRoutingType((ConnType)2);\n\n    ConnRef *connRef216 = new ConnRef(router, 216);\n    ConnEnd srcPt216(Point(867.924, 161.557), 15);\n    connRef216->setSourceEndpoint(srcPt216);\n    ConnEnd dstPt216(Point(917.924, 161.557), 15);\n    connRef216->setDestEndpoint(dstPt216);\n    connRef216->setRoutingType((ConnType)2);\n\n    ConnRef *connRef217 = new ConnRef(router, 217);\n    ConnEnd srcPt217(Point(747.924, 343.557), 15);\n    connRef217->setSourceEndpoint(srcPt217);\n    ConnEnd dstPt217(Point(797.924, 343.557), 15);\n    connRef217->setDestEndpoint(dstPt217);\n    connRef217->setRoutingType((ConnType)2);\n\n    ConnRef *connRef218 = new ConnRef(router, 218);\n    ConnEnd srcPt218(Point(1088.92, 388.557), 15);\n    connRef218->setSourceEndpoint(srcPt218);\n    ConnEnd dstPt218(Point(1138.92, 435.557), 15);\n    connRef218->setDestEndpoint(dstPt218);\n    connRef218->setRoutingType((ConnType)2);\n\n    ConnRef *connRef219 = new ConnRef(router, 219);\n    ConnEnd srcPt219(Point(1208.92, 388.557), 15);\n    connRef219->setSourceEndpoint(srcPt219);\n    ConnEnd dstPt219(Point(1258.92, 435.557), 15);\n    connRef219->setDestEndpoint(dstPt219);\n    connRef219->setRoutingType((ConnType)2);\n\n    ConnRef *connRef220 = new ConnRef(router, 220);\n    ConnEnd srcPt220(Point(1088.92, 152.342), 15);\n    connRef220->setSourceEndpoint(srcPt220);\n    ConnEnd dstPt220(Point(1138.92, 161.557), 15);\n    connRef220->setDestEndpoint(dstPt220);\n    connRef220->setRoutingType((ConnType)2);\n\n    ConnRef *connRef221 = new ConnRef(router, 221);\n    ConnEnd srcPt221(Point(1088.92, 60.3422), 15);\n    connRef221->setSourceEndpoint(srcPt221);\n    ConnEnd dstPt221(Point(1138.92, 60.3422), 15);\n    connRef221->setDestEndpoint(dstPt221);\n    connRef221->setRoutingType((ConnType)2);\n\n    ConnRef *connRef222 = new ConnRef(router, 222);\n    ConnEnd srcPt222(Point(1208.92, 152.342), 15);\n    connRef222->setSourceEndpoint(srcPt222);\n    ConnEnd dstPt222(Point(1258.92, 161.557), 15);\n    connRef222->setDestEndpoint(dstPt222);\n    connRef222->setRoutingType((ConnType)2);\n\n    ConnRef *connRef223 = new ConnRef(router, 223);\n    ConnEnd srcPt223(Point(1088.92, -60.6578), 15);\n    connRef223->setSourceEndpoint(srcPt223);\n    ConnEnd dstPt223(Point(1138.92, -60.6578), 15);\n    connRef223->setDestEndpoint(dstPt223);\n    connRef223->setRoutingType((ConnType)2);\n\n    ConnRef *connRef224 = new ConnRef(router, 224);\n    ConnEnd srcPt224(Point(747.924, 161.557), 15);\n    connRef224->setSourceEndpoint(srcPt224);\n    ConnEnd dstPt224(Point(797.924, 161.557), 15);\n    connRef224->setDestEndpoint(dstPt224);\n    connRef224->setRoutingType((ConnType)2);\n\n    ConnRef *connRef225 = new ConnRef(router, 225);\n    ConnEnd srcPt225(Point(747.924, 860.057), 15);\n    connRef225->setSourceEndpoint(srcPt225);\n    ConnEnd dstPt225(Point(797.924, 860.057), 15);\n    connRef225->setDestEndpoint(dstPt225);\n    connRef225->setRoutingType((ConnType)2);\n\n    ConnRef *connRef226 = new ConnRef(router, 226);\n    ConnEnd srcPt226(Point(737.924, -110.658), 15);\n    connRef226->setSourceEndpoint(srcPt226);\n    ConnEnd dstPt226(Point(737.924, -60.6578), 15);\n    connRef226->setDestEndpoint(dstPt226);\n    connRef226->setRoutingType((ConnType)2);\n\n    ConnRef *connRef227 = new ConnRef(router, 227);\n    ConnEnd srcPt227(Point(137.924, -15.1578), 15);\n    connRef227->setSourceEndpoint(srcPt227);\n    ConnEnd dstPt227(Point(137.924, 34.8422), 15);\n    connRef227->setDestEndpoint(dstPt227);\n    connRef227->setRoutingType((ConnType)2);\n\n    ConnRef *connRef228 = new ConnRef(router, 228);\n    ConnEnd srcPt228(Point(137.924, 111.557), 15);\n    connRef228->setSourceEndpoint(srcPt228);\n    ConnEnd dstPt228(Point(137.924, 161.557), 15);\n    connRef228->setDestEndpoint(dstPt228);\n    connRef228->setRoutingType((ConnType)2);\n\n    ConnRef *connRef229 = new ConnRef(router, 229);\n    ConnEnd srcPt229(Point(257.924, 111.557), 15);\n    connRef229->setSourceEndpoint(srcPt229);\n    ConnEnd dstPt229(Point(257.924, 161.557), 15);\n    connRef229->setDestEndpoint(dstPt229);\n    connRef229->setRoutingType((ConnType)2);\n\n    ConnRef *connRef230 = new ConnRef(router, 230);\n    ConnEnd srcPt230(Point(259.924, 213.557), 15);\n    connRef230->setSourceEndpoint(srcPt230);\n    ConnEnd dstPt230(Point(197.924, 213.557), 15);\n    connRef230->setDestEndpoint(dstPt230);\n    connRef230->setRoutingType((ConnType)2);\n\n    ConnRef *connRef231 = new ConnRef(router, 231);\n    ConnEnd srcPt231(Point(257.924, 265.557), 15);\n    connRef231->setSourceEndpoint(srcPt231);\n    ConnEnd dstPt231(Point(257.924, 315.557), 15);\n    connRef231->setDestEndpoint(dstPt231);\n    connRef231->setRoutingType((ConnType)2);\n\n    ConnRef *connRef184 = new ConnRef(router, 184);\n    ConnEnd srcPt184(Point(677.924, 343.557), 15);\n    connRef184->setSourceEndpoint(srcPt184);\n    ConnEnd dstPt184(Point(727.924, 343.557), 15);\n    connRef184->setDestEndpoint(dstPt184);\n    connRef184->setRoutingType((ConnType)2);\n\n    ConnRef *connRef185 = new ConnRef(router, 185);\n    ConnEnd srcPt185(Point(797.924, 161.557), 15);\n    connRef185->setSourceEndpoint(srcPt185);\n    ConnEnd dstPt185(Point(847.924, 161.557), 15);\n    connRef185->setDestEndpoint(dstPt185);\n    connRef185->setRoutingType((ConnType)2);\n\n    ConnRef *connRef186 = new ConnRef(router, 186);\n    ConnEnd srcPt186(Point(77.9242, 34.8422), 15);\n    connRef186->setSourceEndpoint(srcPt186);\n    ConnEnd dstPt186(Point(127.924, 34.8422), 15);\n    connRef186->setDestEndpoint(dstPt186);\n    connRef186->setRoutingType((ConnType)2);\n\n    ConnRef *connRef187 = new ConnRef(router, 187);\n    ConnEnd srcPt187(Point(437.924, 527.557), 15);\n    connRef187->setSourceEndpoint(srcPt187);\n    ConnEnd dstPt187(Point(487.924, 527.557), 15);\n    connRef187->setDestEndpoint(dstPt187);\n    connRef187->setRoutingType((ConnType)2);\n\n    ConnRef *connRef188 = new ConnRef(router, 188);\n    ConnEnd srcPt188(Point(77.9242, 619.557), 15);\n    connRef188->setSourceEndpoint(srcPt188);\n    ConnEnd dstPt188(Point(127.924, 619.557), 15);\n    connRef188->setDestEndpoint(dstPt188);\n    connRef188->setRoutingType((ConnType)2);\n\n    ConnRef *connRef189 = new ConnRef(router, 189);\n    ConnEnd srcPt189(Point(747.924, -60.6578), 15);\n    connRef189->setSourceEndpoint(srcPt189);\n    ConnEnd dstPt189(Point(797.924, -60.6578), 15);\n    connRef189->setDestEndpoint(dstPt189);\n    connRef189->setRoutingType((ConnType)2);\n\n    ConnRef *connRef190 = new ConnRef(router, 190);\n    ConnEnd srcPt190(Point(147.924, 34.8422), 15);\n    connRef190->setSourceEndpoint(srcPt190);\n    ConnEnd dstPt190(Point(197.924, 161.557), 15);\n    connRef190->setDestEndpoint(dstPt190);\n    connRef190->setRoutingType((ConnType)2);\n\n    ConnRef *connRef191 = new ConnRef(router, 191);\n    ConnEnd srcPt191(Point(267.924, 161.557), 15);\n    connRef191->setSourceEndpoint(srcPt191);\n    ConnEnd dstPt191(Point(317.924, 161.557), 15);\n    connRef191->setDestEndpoint(dstPt191);\n    connRef191->setRoutingType((ConnType)2);\n\n    ConnRef *connRef192 = new ConnRef(router, 192);\n    ConnEnd srcPt192(Point(197.924, 223.557), 15);\n    connRef192->setSourceEndpoint(srcPt192);\n    ConnEnd dstPt192(Point(197.924, 315.557), 15);\n    connRef192->setDestEndpoint(dstPt192);\n    connRef192->setRoutingType((ConnType)2);\n\n    ConnRef *connRef193 = new ConnRef(router, 193);\n    ConnEnd srcPt193(Point(77.9242, 377.557), 15);\n    connRef193->setSourceEndpoint(srcPt193);\n    ConnEnd dstPt193(Point(77.9242, 527.557), 15);\n    connRef193->setDestEndpoint(dstPt193);\n    connRef193->setRoutingType((ConnType)2);\n\n    ConnRef *connRef194 = new ConnRef(router, 194);\n    ConnEnd srcPt194(Point(147.924, 527.557), 15);\n    connRef194->setSourceEndpoint(srcPt194);\n    ConnEnd dstPt194(Point(197.924, 527.557), 15);\n    connRef194->setDestEndpoint(dstPt194);\n    connRef194->setRoutingType((ConnType)2);\n\n    ConnRef *connRef195 = new ConnRef(router, 195);\n    ConnEnd srcPt195(Point(147.924, 619.557), 15);\n    connRef195->setSourceEndpoint(srcPt195);\n    ConnEnd dstPt195(Point(197.924, 763.557), 15);\n    connRef195->setDestEndpoint(dstPt195);\n    connRef195->setRoutingType((ConnType)2);\n\n    ConnRef *connRef196 = new ConnRef(router, 196);\n    ConnEnd srcPt196(Point(77.9242, 651.557), 15);\n    connRef196->setSourceEndpoint(srcPt196);\n    ConnEnd dstPt196(Point(77.9242, 619.557), 15);\n    connRef196->setDestEndpoint(dstPt196);\n    connRef196->setRoutingType((ConnType)2);\n\n    ConnRef *connRef197 = new ConnRef(router, 197);\n    ConnEnd srcPt197(Point(147.924, 763.557), 15);\n    connRef197->setSourceEndpoint(srcPt197);\n    ConnEnd dstPt197(Point(197.924, 763.557), 15);\n    connRef197->setDestEndpoint(dstPt197);\n    connRef197->setRoutingType((ConnType)2);\n\n    ConnRef *connRef198 = new ConnRef(router, 198);\n    ConnEnd srcPt198(Point(267.924, 763.557), 15);\n    connRef198->setSourceEndpoint(srcPt198);\n    ConnEnd dstPt198(Point(317.924, 763.557), 15);\n    connRef198->setDestEndpoint(dstPt198);\n    connRef198->setRoutingType((ConnType)2);\n\n    ConnRef *connRef199 = new ConnRef(router, 199);\n    ConnEnd srcPt199(Point(387.924, 627.557), 15);\n    connRef199->setSourceEndpoint(srcPt199);\n    ConnEnd dstPt199(Point(437.924, 627.557), 15);\n    connRef199->setDestEndpoint(dstPt199);\n    connRef199->setRoutingType((ConnType)2);\n\n    ConnRef *connRef200 = new ConnRef(router, 200);\n    ConnEnd srcPt200(Point(387.924, 763.557), 15);\n    connRef200->setSourceEndpoint(srcPt200);\n    ConnEnd dstPt200(Point(437.924, 763.557), 15);\n    connRef200->setDestEndpoint(dstPt200);\n    connRef200->setRoutingType((ConnType)2);\n\n    ConnRef *connRef201 = new ConnRef(router, 201);\n    ConnEnd srcPt201(Point(507.924, 763.557), 15);\n    connRef201->setSourceEndpoint(srcPt201);\n    ConnEnd dstPt201(Point(557.924, 763.557), 15);\n    connRef201->setDestEndpoint(dstPt201);\n    connRef201->setRoutingType((ConnType)2);\n\n    ConnRef *connRef202 = new ConnRef(router, 202);\n    ConnEnd srcPt202(Point(627.924, 763.557), 15);\n    connRef202->setSourceEndpoint(srcPt202);\n    ConnEnd dstPt202(Point(677.924, 763.557), 15);\n    connRef202->setDestEndpoint(dstPt202);\n    connRef202->setRoutingType((ConnType)2);\n\n    ConnRef *connRef203 = new ConnRef(router, 203);\n    ConnEnd srcPt203(Point(507.924, 903.057), 15);\n    connRef203->setSourceEndpoint(srcPt203);\n    ConnEnd dstPt203(Point(557.924, 903.057), 15);\n    connRef203->setDestEndpoint(dstPt203);\n    connRef203->setRoutingType((ConnType)2);\n\n    ConnRef *connRef204 = new ConnRef(router, 204);\n    ConnEnd srcPt204(Point(627.924, 903.057), 15);\n    connRef204->setSourceEndpoint(srcPt204);\n    ConnEnd dstPt204(Point(677.924, 903.057), 15);\n    connRef204->setDestEndpoint(dstPt204);\n    connRef204->setRoutingType((ConnType)2);\n\n    ConnRef *connRef205 = new ConnRef(router, 205);\n    ConnEnd srcPt205(Point(387.924, 161.557), 15);\n    connRef205->setSourceEndpoint(srcPt205);\n    ConnEnd dstPt205(Point(437.924, 161.557), 15);\n    connRef205->setDestEndpoint(dstPt205);\n    connRef205->setRoutingType((ConnType)2);\n\n    ConnRef *connRef206 = new ConnRef(router, 206);\n    ConnEnd srcPt206(Point(387.924, 27.3422), 15);\n    connRef206->setSourceEndpoint(srcPt206);\n    ConnEnd dstPt206(Point(437.924, 27.3422), 15);\n    connRef206->setDestEndpoint(dstPt206);\n    connRef206->setRoutingType((ConnType)2);\n\n    ConnRef *connRef232 = new ConnRef(router, 232);\n    ConnEnd srcPt232(Point(139.924, 367.557), 15);\n    connRef232->setSourceEndpoint(srcPt232);\n    ConnEnd dstPt232(Point(77.9242, 367.557), 15);\n    connRef232->setDestEndpoint(dstPt232);\n    connRef232->setRoutingType((ConnType)2);\n\n    ConnRef *connRef233 = new ConnRef(router, 233);\n    ConnEnd srcPt233(Point(137.924, 477.557), 15);\n    connRef233->setSourceEndpoint(srcPt233);\n    ConnEnd dstPt233(Point(137.924, 527.557), 15);\n    connRef233->setDestEndpoint(dstPt233);\n    connRef233->setRoutingType((ConnType)2);\n\n    ConnRef *connRef234 = new ConnRef(router, 234);\n    ConnEnd srcPt234(Point(137.924, 569.557), 15);\n    connRef234->setSourceEndpoint(srcPt234);\n    ConnEnd dstPt234(Point(137.924, 619.557), 15);\n    connRef234->setDestEndpoint(dstPt234);\n    connRef234->setRoutingType((ConnType)2);\n\n    ConnRef *connRef235 = new ConnRef(router, 235);\n    ConnEnd srcPt235(Point(139.924, 661.557), 15);\n    connRef235->setSourceEndpoint(srcPt235);\n    ConnEnd dstPt235(Point(77.9242, 661.557), 15);\n    connRef235->setDestEndpoint(dstPt235);\n    connRef235->setRoutingType((ConnType)2);\n\n    ConnRef *connRef236 = new ConnRef(router, 236);\n    ConnEnd srcPt236(Point(137.924, 713.557), 15);\n    connRef236->setSourceEndpoint(srcPt236);\n    ConnEnd dstPt236(Point(137.924, 763.557), 15);\n    connRef236->setDestEndpoint(dstPt236);\n    connRef236->setRoutingType((ConnType)2);\n\n    ConnRef *connRef237 = new ConnRef(router, 237);\n    ConnEnd srcPt237(Point(257.924, 713.557), 15);\n    connRef237->setSourceEndpoint(srcPt237);\n    ConnEnd dstPt237(Point(257.924, 763.557), 15);\n    connRef237->setDestEndpoint(dstPt237);\n    connRef237->setRoutingType((ConnType)2);\n\n    ConnRef *connRef238 = new ConnRef(router, 238);\n    ConnEnd srcPt238(Point(377.924, 577.557), 15);\n    connRef238->setSourceEndpoint(srcPt238);\n    ConnEnd dstPt238(Point(377.924, 627.557), 15);\n    connRef238->setDestEndpoint(dstPt238);\n    connRef238->setRoutingType((ConnType)2);\n\n    ConnRef *connRef239 = new ConnRef(router, 239);\n    ConnEnd srcPt239(Point(377.924, 713.557), 15);\n    connRef239->setSourceEndpoint(srcPt239);\n    ConnEnd dstPt239(Point(377.924, 763.557), 15);\n    connRef239->setDestEndpoint(dstPt239);\n    connRef239->setRoutingType((ConnType)2);\n\n    ConnRef *connRef240 = new ConnRef(router, 240);\n    ConnEnd srcPt240(Point(497.924, 713.557), 15);\n    connRef240->setSourceEndpoint(srcPt240);\n    ConnEnd dstPt240(Point(497.924, 763.557), 15);\n    connRef240->setDestEndpoint(dstPt240);\n    connRef240->setRoutingType((ConnType)2);\n\n    ConnRef *connRef241 = new ConnRef(router, 241);\n    ConnEnd srcPt241(Point(617.924, 713.557), 15);\n    connRef241->setSourceEndpoint(srcPt241);\n    ConnEnd dstPt241(Point(617.924, 763.557), 15);\n    connRef241->setDestEndpoint(dstPt241);\n    connRef241->setRoutingType((ConnType)2);\n\n    ConnRef *connRef242 = new ConnRef(router, 242);\n    ConnEnd srcPt242(Point(497.924, 853.057), 15);\n    connRef242->setSourceEndpoint(srcPt242);\n    ConnEnd dstPt242(Point(497.924, 903.057), 15);\n    connRef242->setDestEndpoint(dstPt242);\n    connRef242->setRoutingType((ConnType)2);\n\n    ConnRef *connRef243 = new ConnRef(router, 243);\n    ConnEnd srcPt243(Point(617.924, 853.057), 15);\n    connRef243->setSourceEndpoint(srcPt243);\n    ConnEnd dstPt243(Point(617.924, 903.057), 15);\n    connRef243->setDestEndpoint(dstPt243);\n    connRef243->setRoutingType((ConnType)2);\n\n    ConnRef *connRef244 = new ConnRef(router, 244);\n    ConnEnd srcPt244(Point(377.924, 111.557), 15);\n    connRef244->setSourceEndpoint(srcPt244);\n    ConnEnd dstPt244(Point(377.924, 161.557), 15);\n    connRef244->setDestEndpoint(dstPt244);\n    connRef244->setRoutingType((ConnType)2);\n\n    ConnRef *connRef245 = new ConnRef(router, 245);\n    ConnEnd srcPt245(Point(377.924, -22.6578), 15);\n    connRef245->setSourceEndpoint(srcPt245);\n    ConnEnd dstPt245(Point(377.924, 27.3422), 15);\n    connRef245->setDestEndpoint(dstPt245);\n    connRef245->setRoutingType((ConnType)2);\n\n    ConnRef *connRef246 = new ConnRef(router, 246);\n    ConnEnd srcPt246(Point(497.924, -4.15778), 15);\n    connRef246->setSourceEndpoint(srcPt246);\n    ConnEnd dstPt246(Point(497.924, 45.8422), 15);\n    connRef246->setDestEndpoint(dstPt246);\n    connRef246->setRoutingType((ConnType)2);\n\n    ConnRef *connRef247 = new ConnRef(router, 247);\n    ConnEnd srcPt247(Point(617.924, -4.15778), 15);\n    connRef247->setSourceEndpoint(srcPt247);\n    ConnEnd dstPt247(Point(617.924, 45.8422), 15);\n    connRef247->setDestEndpoint(dstPt247);\n    connRef247->setRoutingType((ConnType)2);\n\n    ConnRef *connRef248 = new ConnRef(router, 248);\n    ConnEnd srcPt248(Point(737.924, 524.057), 15);\n    connRef248->setSourceEndpoint(srcPt248);\n    ConnEnd dstPt248(Point(737.924, 574.057), 15);\n    connRef248->setDestEndpoint(dstPt248);\n    connRef248->setRoutingType((ConnType)2);\n\n    ConnRef *connRef249 = new ConnRef(router, 249);\n    ConnEnd srcPt249(Point(497.924, 477.557), 15);\n    connRef249->setSourceEndpoint(srcPt249);\n    ConnEnd dstPt249(Point(497.924, 527.557), 15);\n    connRef249->setDestEndpoint(dstPt249);\n    connRef249->setRoutingType((ConnType)2);\n\n    ConnRef *connRef250 = new ConnRef(router, 250);\n    ConnEnd srcPt250(Point(497.924, 385.557), 15);\n    connRef250->setSourceEndpoint(srcPt250);\n    ConnEnd dstPt250(Point(497.924, 435.557), 15);\n    connRef250->setDestEndpoint(dstPt250);\n    connRef250->setRoutingType((ConnType)2);\n\n    ConnRef *connRef251 = new ConnRef(router, 251);\n    ConnEnd srcPt251(Point(617.924, 477.557), 15);\n    connRef251->setSourceEndpoint(srcPt251);\n    ConnEnd dstPt251(Point(617.924, 527.557), 15);\n    connRef251->setDestEndpoint(dstPt251);\n    connRef251->setRoutingType((ConnType)2);\n\n    ConnRef *connRef252 = new ConnRef(router, 252);\n    ConnEnd srcPt252(Point(617.924, 385.557), 15);\n    connRef252->setSourceEndpoint(srcPt252);\n    ConnEnd dstPt252(Point(617.924, 435.557), 15);\n    connRef252->setDestEndpoint(dstPt252);\n    connRef252->setRoutingType((ConnType)2);\n\n    ConnRef *connRef253 = new ConnRef(router, 253);\n    ConnEnd srcPt253(Point(857.924, 293.557), 15);\n    connRef253->setSourceEndpoint(srcPt253);\n    ConnEnd dstPt253(Point(857.924, 343.557), 15);\n    connRef253->setDestEndpoint(dstPt253);\n    connRef253->setRoutingType((ConnType)2);\n\n    ConnRef *connRef254 = new ConnRef(router, 254);\n    ConnEnd srcPt254(Point(857.924, 385.557), 15);\n    connRef254->setSourceEndpoint(srcPt254);\n    ConnEnd dstPt254(Point(857.924, 435.557), 15);\n    connRef254->setDestEndpoint(dstPt254);\n    connRef254->setRoutingType((ConnType)2);\n\n    ConnRef *connRef255 = new ConnRef(router, 255);\n    ConnEnd srcPt255(Point(857.924, 111.557), 15);\n    connRef255->setSourceEndpoint(srcPt255);\n    ConnEnd dstPt255(Point(857.924, 161.557), 15);\n    connRef255->setDestEndpoint(dstPt255);\n    connRef255->setRoutingType((ConnType)2);\n\n    ConnRef *connRef256 = new ConnRef(router, 256);\n    ConnEnd srcPt256(Point(737.924, 293.557), 15);\n    connRef256->setSourceEndpoint(srcPt256);\n    ConnEnd dstPt256(Point(737.924, 343.557), 15);\n    connRef256->setDestEndpoint(dstPt256);\n    connRef256->setRoutingType((ConnType)2);\n\n    ConnRef *connRef257 = new ConnRef(router, 257);\n    ConnEnd srcPt257(Point(1078.92, 338.557), 15);\n    connRef257->setSourceEndpoint(srcPt257);\n    ConnEnd dstPt257(Point(1078.92, 388.557), 15);\n    connRef257->setDestEndpoint(dstPt257);\n    connRef257->setRoutingType((ConnType)2);\n\n    ConnRef *connRef258 = new ConnRef(router, 258);\n    ConnEnd srcPt258(Point(1198.92, 338.557), 15);\n    connRef258->setSourceEndpoint(srcPt258);\n    ConnEnd dstPt258(Point(1198.92, 388.557), 15);\n    connRef258->setDestEndpoint(dstPt258);\n    connRef258->setRoutingType((ConnType)2);\n\n    ConnRef *connRef259 = new ConnRef(router, 259);\n    ConnEnd srcPt259(Point(1078.92, 102.342), 15);\n    connRef259->setSourceEndpoint(srcPt259);\n    ConnEnd dstPt259(Point(1078.92, 152.342), 15);\n    connRef259->setDestEndpoint(dstPt259);\n    connRef259->setRoutingType((ConnType)2);\n\n    ConnRef *connRef260 = new ConnRef(router, 260);\n    ConnEnd srcPt260(Point(1078.92, 10.3422), 15);\n    connRef260->setSourceEndpoint(srcPt260);\n    ConnEnd dstPt260(Point(1078.92, 60.3422), 15);\n    connRef260->setDestEndpoint(dstPt260);\n    connRef260->setRoutingType((ConnType)2);\n\n    ConnRef *connRef261 = new ConnRef(router, 261);\n    ConnEnd srcPt261(Point(1198.92, 102.342), 15);\n    connRef261->setSourceEndpoint(srcPt261);\n    ConnEnd dstPt261(Point(1198.92, 152.342), 15);\n    connRef261->setDestEndpoint(dstPt261);\n    connRef261->setRoutingType((ConnType)2);\n\n    ConnRef *connRef262 = new ConnRef(router, 262);\n    ConnEnd srcPt262(Point(1078.92, -110.658), 15);\n    connRef262->setSourceEndpoint(srcPt262);\n    ConnEnd dstPt262(Point(1078.92, -60.6578), 15);\n    connRef262->setDestEndpoint(dstPt262);\n    connRef262->setRoutingType((ConnType)2);\n\n    ConnRef *connRef263 = new ConnRef(router, 263);\n    ConnEnd srcPt263(Point(958.924, 230.557), 15);\n    connRef263->setSourceEndpoint(srcPt263);\n    ConnEnd dstPt263(Point(958.924, 280.557), 15);\n    connRef263->setDestEndpoint(dstPt263);\n    connRef263->setRoutingType((ConnType)2);\n\n    ConnRef *connRef264 = new ConnRef(router, 264);\n    ConnEnd srcPt264(Point(737.924, 111.557), 15);\n    connRef264->setSourceEndpoint(srcPt264);\n    ConnEnd dstPt264(Point(737.924, 161.557), 15);\n    connRef264->setDestEndpoint(dstPt264);\n    connRef264->setRoutingType((ConnType)2);\n\n    ConnRef *connRef265 = new ConnRef(router, 265);\n    ConnEnd srcPt265(Point(737.924, 810.057), 15);\n    connRef265->setSourceEndpoint(srcPt265);\n    ConnEnd dstPt265(Point(737.924, 860.057), 15);\n    connRef265->setDestEndpoint(dstPt265);\n    connRef265->setRoutingType((ConnType)2);\n\n    ConnRef *connRef266 = new ConnRef(router, 266);\n    ConnEnd srcPt266(Point(77.9242, 161.557), 15);\n    connRef266->setSourceEndpoint(srcPt266);\n    ConnEnd dstPt266(Point(40.9242, 252.5), 15);\n    connRef266->setDestEndpoint(dstPt266);\n    connRef266->setRoutingType((ConnType)2);\n\n    ConnRef *connRef267 = new ConnRef(router, 267);\n    ConnEnd srcPt267(Point(77.9242, 763.557), 15);\n    connRef267->setSourceEndpoint(srcPt267);\n    ConnEnd dstPt267(Point(-46.0758, 329.75), 15);\n    connRef267->setDestEndpoint(dstPt267);\n    connRef267->setRoutingType((ConnType)2);\n\n    ConnRef *connRef168 = new ConnRef(router, 168);\n    ConnEnd srcPt168(Point(797.924, 343.557), 15);\n    connRef168->setSourceEndpoint(srcPt168);\n    ConnEnd dstPt168(Point(847.924, 435.557), 15);\n    connRef168->setDestEndpoint(dstPt168);\n    connRef168->setRoutingType((ConnType)2);\n\n    ConnRef *connRef169 = new ConnRef(router, 169);\n    ConnEnd srcPt169(Point(1018.92, 435.557), 15);\n    connRef169->setSourceEndpoint(srcPt169);\n    ConnEnd dstPt169(Point(1068.92, 388.557), 15);\n    connRef169->setDestEndpoint(dstPt169);\n    connRef169->setRoutingType((ConnType)2);\n\n    ConnRef *connRef170 = new ConnRef(router, 170);\n    ConnEnd srcPt170(Point(1018.92, 161.557), 15);\n    connRef170->setSourceEndpoint(srcPt170);\n    ConnEnd dstPt170(Point(1068.92, 152.342), 15);\n    connRef170->setDestEndpoint(dstPt170);\n    connRef170->setRoutingType((ConnType)2);\n\n    ConnRef *connRef171 = new ConnRef(router, 171);\n    ConnEnd srcPt171(Point(1018.92, 161.557), 15);\n    connRef171->setSourceEndpoint(srcPt171);\n    ConnEnd dstPt171(Point(1068.92, 60.3422), 15);\n    connRef171->setDestEndpoint(dstPt171);\n    connRef171->setRoutingType((ConnType)2);\n\n    ConnRef *connRef172 = new ConnRef(router, 172);\n    ConnEnd srcPt172(Point(267.924, 315.557), 15);\n    connRef172->setSourceEndpoint(srcPt172);\n    ConnEnd dstPt172(Point(437.924, 161.557), 15);\n    connRef172->setDestEndpoint(dstPt172);\n    connRef172->setRoutingType((ConnType)2);\n\n    ConnRef *connRef173 = new ConnRef(router, 173);\n    ConnEnd srcPt173(Point(437.924, 161.557), 15);\n    connRef173->setSourceEndpoint(srcPt173);\n    ConnEnd dstPt173(Point(487.924, 45.8422), 15);\n    connRef173->setDestEndpoint(dstPt173);\n    connRef173->setRoutingType((ConnType)2);\n\n    ConnRef *connRef174 = new ConnRef(router, 174);\n    ConnEnd srcPt174(Point(437.924, 161.557), 15);\n    connRef174->setSourceEndpoint(srcPt174);\n    ConnEnd dstPt174(Point(727.924, 161.557), 15);\n    connRef174->setDestEndpoint(dstPt174);\n    connRef174->setRoutingType((ConnType)2);\n\n    ConnRef *connRef175 = new ConnRef(router, 175);\n    ConnEnd srcPt175(Point(77.9242, 161.557), 15);\n    connRef175->setSourceEndpoint(srcPt175);\n    ConnEnd dstPt175(Point(127.924, 161.557), 15);\n    connRef175->setDestEndpoint(dstPt175);\n    connRef175->setRoutingType((ConnType)2);\n\n    ConnRef *connRef176 = new ConnRef(router, 176);\n    ConnEnd srcPt176(Point(77.9242, 161.557), 15);\n    connRef176->setSourceEndpoint(srcPt176);\n    ConnEnd dstPt176(Point(77.9242, 357.557), 15);\n    connRef176->setDestEndpoint(dstPt176);\n    connRef176->setRoutingType((ConnType)2);\n\n    ConnRef *connRef177 = new ConnRef(router, 177);\n    ConnEnd srcPt177(Point(557.924, 763.557), 15);\n    connRef177->setSourceEndpoint(srcPt177);\n    ConnEnd dstPt177(Point(607.924, 763.557), 15);\n    connRef177->setDestEndpoint(dstPt177);\n    connRef177->setRoutingType((ConnType)2);\n\n    ConnRef *connRef178 = new ConnRef(router, 178);\n    ConnEnd srcPt178(Point(77.9242, 527.557), 15);\n    connRef178->setSourceEndpoint(srcPt178);\n    ConnEnd dstPt178(Point(127.924, 527.557), 15);\n    connRef178->setDestEndpoint(dstPt178);\n    connRef178->setRoutingType((ConnType)2);\n\n    ConnRef *connRef179 = new ConnRef(router, 179);\n    ConnEnd srcPt179(Point(557.924, 54.8422), 15);\n    connRef179->setSourceEndpoint(srcPt179);\n    ConnEnd dstPt179(Point(607.924, 45.8422), 15);\n    connRef179->setDestEndpoint(dstPt179);\n    connRef179->setRoutingType((ConnType)2);\n\n    ConnRef *connRef180 = new ConnRef(router, 180);\n    ConnEnd srcPt180(Point(557.924, 435.557), 15);\n    connRef180->setSourceEndpoint(srcPt180);\n    ConnEnd dstPt180(Point(607.924, 435.557), 15);\n    connRef180->setDestEndpoint(dstPt180);\n    connRef180->setRoutingType((ConnType)2);\n\n    ConnRef *connRef181 = new ConnRef(router, 181);\n    ConnEnd srcPt181(Point(77.9242, 763.557), 15);\n    connRef181->setSourceEndpoint(srcPt181);\n    ConnEnd dstPt181(Point(77.9242, 671.557), 15);\n    connRef181->setDestEndpoint(dstPt181);\n    connRef181->setRoutingType((ConnType)2);\n\n    ConnRef *connRef182 = new ConnRef(router, 182);\n    ConnEnd srcPt182(Point(77.9242, 763.557), 15);\n    connRef182->setSourceEndpoint(srcPt182);\n    ConnEnd dstPt182(Point(127.924, 763.557), 15);\n    connRef182->setDestEndpoint(dstPt182);\n    connRef182->setRoutingType((ConnType)2);\n\n    ConnRef *connRef183 = new ConnRef(router, 183);\n    ConnEnd srcPt183(Point(197.924, 315.557), 15);\n    connRef183->setSourceEndpoint(srcPt183);\n    ConnEnd dstPt183(Point(247.924, 315.557), 15);\n    connRef183->setDestEndpoint(dstPt183);\n    connRef183->setRoutingType((ConnType)2);\n\n    ConnRef *connRef148 = new ConnRef(router, 148);\n    ConnEnd srcPt148(Point(1018.92, -60.6578), 15);\n    connRef148->setSourceEndpoint(srcPt148);\n    ConnEnd dstPt148(Point(1068.92, -60.6578), 15);\n    connRef148->setDestEndpoint(dstPt148);\n    connRef148->setRoutingType((ConnType)2);\n\n    ConnRef *connRef149 = new ConnRef(router, 149);\n    ConnEnd srcPt149(Point(1138.92, 161.557), 15);\n    connRef149->setSourceEndpoint(srcPt149);\n    ConnEnd dstPt149(Point(1188.92, 152.342), 15);\n    connRef149->setDestEndpoint(dstPt149);\n    connRef149->setRoutingType((ConnType)2);\n\n    ConnRef *connRef150 = new ConnRef(router, 150);\n    ConnEnd srcPt150(Point(1138.92, 435.557), 15);\n    connRef150->setSourceEndpoint(srcPt150);\n    ConnEnd dstPt150(Point(1188.92, 388.557), 15);\n    connRef150->setDestEndpoint(dstPt150);\n    connRef150->setRoutingType((ConnType)2);\n\n    ConnRef *connRef151 = new ConnRef(router, 151);\n    ConnEnd srcPt151(Point(317.924, 763.557), 15);\n    connRef151->setSourceEndpoint(srcPt151);\n    ConnEnd dstPt151(Point(367.924, 627.557), 15);\n    connRef151->setDestEndpoint(dstPt151);\n    connRef151->setRoutingType((ConnType)2);\n\n    ConnRef *connRef152 = new ConnRef(router, 152);\n    ConnEnd srcPt152(Point(317.924, 763.557), 15);\n    connRef152->setSourceEndpoint(srcPt152);\n    ConnEnd dstPt152(Point(367.924, 763.557), 15);\n    connRef152->setDestEndpoint(dstPt152);\n    connRef152->setRoutingType((ConnType)2);\n\n    ConnRef *connRef153 = new ConnRef(router, 153);\n    ConnEnd srcPt153(Point(317.924, 763.557), 15);\n    connRef153->setSourceEndpoint(srcPt153);\n    ConnEnd dstPt153(Point(487.924, 903.057), 15);\n    connRef153->setDestEndpoint(dstPt153);\n    connRef153->setRoutingType((ConnType)2);\n\n    ConnRef *connRef154 = new ConnRef(router, 154);\n    ConnEnd srcPt154(Point(317.924, 763.557), 15);\n    connRef154->setSourceEndpoint(srcPt154);\n    ConnEnd dstPt154(Point(727.924, 574.057), 15);\n    connRef154->setDestEndpoint(dstPt154);\n    connRef154->setRoutingType((ConnType)2);\n\n    ConnRef *connRef155 = new ConnRef(router, 155);\n    ConnEnd srcPt155(Point(557.924, 903.057), 15);\n    connRef155->setSourceEndpoint(srcPt155);\n    ConnEnd dstPt155(Point(607.924, 903.057), 15);\n    connRef155->setDestEndpoint(dstPt155);\n    connRef155->setRoutingType((ConnType)2);\n\n    ConnRef *connRef156 = new ConnRef(router, 156);\n    ConnEnd srcPt156(Point(197.924, 763.557), 15);\n    connRef156->setSourceEndpoint(srcPt156);\n    ConnEnd dstPt156(Point(247.924, 763.557), 15);\n    connRef156->setDestEndpoint(dstPt156);\n    connRef156->setRoutingType((ConnType)2);\n\n    ConnRef *connRef157 = new ConnRef(router, 157);\n    ConnEnd srcPt157(Point(147.924, 161.557), 15);\n    connRef157->setSourceEndpoint(srcPt157);\n    ConnEnd dstPt157(Point(197.924, 161.557), 15);\n    connRef157->setDestEndpoint(dstPt157);\n    connRef157->setRoutingType((ConnType)2);\n\n    ConnRef *connRef158 = new ConnRef(router, 158);\n    ConnEnd srcPt158(Point(197.924, 161.557), 15);\n    connRef158->setSourceEndpoint(srcPt158);\n    ConnEnd dstPt158(Point(247.924, 161.557), 15);\n    connRef158->setDestEndpoint(dstPt158);\n    connRef158->setRoutingType((ConnType)2);\n\n    ConnRef *connRef159 = new ConnRef(router, 159);\n    ConnEnd srcPt159(Point(197.924, 161.557), 15);\n    connRef159->setSourceEndpoint(srcPt159);\n    ConnEnd dstPt159(Point(197.924, 203.557), 15);\n    connRef159->setDestEndpoint(dstPt159);\n    connRef159->setRoutingType((ConnType)2);\n\n    ConnRef *connRef160 = new ConnRef(router, 160);\n    ConnEnd srcPt160(Point(317.924, 161.557), 15);\n    connRef160->setSourceEndpoint(srcPt160);\n    ConnEnd dstPt160(Point(727.924, -60.6578), 15);\n    connRef160->setDestEndpoint(dstPt160);\n    connRef160->setRoutingType((ConnType)2);\n\n    ConnRef *connRef161 = new ConnRef(router, 161);\n    ConnEnd srcPt161(Point(317.924, 161.557), 15);\n    connRef161->setSourceEndpoint(srcPt161);\n    ConnEnd dstPt161(Point(367.924, 161.557), 15);\n    connRef161->setDestEndpoint(dstPt161);\n    connRef161->setRoutingType((ConnType)2);\n\n    ConnRef *connRef162 = new ConnRef(router, 162);\n    ConnEnd srcPt162(Point(317.924, 161.557), 15);\n    connRef162->setSourceEndpoint(srcPt162);\n    ConnEnd dstPt162(Point(367.924, 27.3422), 15);\n    connRef162->setDestEndpoint(dstPt162);\n    connRef162->setRoutingType((ConnType)2);\n\n    ConnRef *connRef163 = new ConnRef(router, 163);\n    ConnEnd srcPt163(Point(317.924, 161.557), 15);\n    connRef163->setSourceEndpoint(srcPt163);\n    ConnEnd dstPt163(Point(487.924, 435.557), 15);\n    connRef163->setDestEndpoint(dstPt163);\n    connRef163->setRoutingType((ConnType)2);\n\n    ConnRef *connRef164 = new ConnRef(router, 164);\n    ConnEnd srcPt164(Point(437.924, 763.557), 15);\n    connRef164->setSourceEndpoint(srcPt164);\n    ConnEnd dstPt164(Point(487.924, 763.557), 15);\n    connRef164->setDestEndpoint(dstPt164);\n    connRef164->setRoutingType((ConnType)2);\n\n    ConnRef *connRef165 = new ConnRef(router, 165);\n    ConnEnd srcPt165(Point(437.924, 763.557), 15);\n    connRef165->setSourceEndpoint(srcPt165);\n    ConnEnd dstPt165(Point(727.924, 860.057), 15);\n    connRef165->setDestEndpoint(dstPt165);\n    connRef165->setRoutingType((ConnType)2);\n\n    ConnRef *connRef166 = new ConnRef(router, 166);\n    ConnEnd srcPt166(Point(557.924, 527.557), 15);\n    connRef166->setSourceEndpoint(srcPt166);\n    ConnEnd dstPt166(Point(607.924, 527.557), 15);\n    connRef166->setDestEndpoint(dstPt166);\n    connRef166->setRoutingType((ConnType)2);\n\n    ConnRef *connRef167 = new ConnRef(router, 167);\n    ConnEnd srcPt167(Point(797.924, 343.557), 15);\n    connRef167->setSourceEndpoint(srcPt167);\n    ConnEnd dstPt167(Point(847.924, 343.557), 15);\n    connRef167->setDestEndpoint(dstPt167);\n    connRef167->setRoutingType((ConnType)2);\n\n    router->processTransaction();\n    router->outputDiagram(\"output/lineSegWrapperCrash8\");\n    delete router;\n    return 0;\n};\n"
  },
  {
    "path": "cola/libavoid/tests/msctests/2junctions.vcxproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project DefaultTargets=\"Build\" ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n  <ItemGroup Label=\"ProjectConfigurations\">\r\n    <ProjectConfiguration Include=\"Debug|Win32\">\r\n      <Configuration>Debug</Configuration>\r\n      <Platform>Win32</Platform>\r\n    </ProjectConfiguration>\r\n    <ProjectConfiguration Include=\"Debug|x64\">\r\n      <Configuration>Debug</Configuration>\r\n      <Platform>x64</Platform>\r\n    </ProjectConfiguration>\r\n    <ProjectConfiguration Include=\"Release|Win32\">\r\n      <Configuration>Release</Configuration>\r\n      <Platform>Win32</Platform>\r\n    </ProjectConfiguration>\r\n    <ProjectConfiguration Include=\"Release|x64\">\r\n      <Configuration>Release</Configuration>\r\n      <Platform>x64</Platform>\r\n    </ProjectConfiguration>\r\n  </ItemGroup>\r\n  <PropertyGroup Label=\"Globals\">\r\n    <ProjectGuid>{4C07F666-EB74-44E9-811C-57CFCCC553C8}</ProjectGuid>\r\n    <Keyword>Win32Proj</Keyword>\r\n    <RootNamespace>My2junctions</RootNamespace>\r\n  </PropertyGroup>\r\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.Default.props\" />\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"Configuration\">\r\n    <ConfigurationType>Application</ConfigurationType>\r\n    <UseDebugLibraries>true</UseDebugLibraries>\r\n    <CharacterSet>Unicode</CharacterSet>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" Label=\"Configuration\">\r\n    <ConfigurationType>Application</ConfigurationType>\r\n    <UseDebugLibraries>true</UseDebugLibraries>\r\n    <CharacterSet>Unicode</CharacterSet>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"Configuration\">\r\n    <ConfigurationType>Application</ConfigurationType>\r\n    <UseDebugLibraries>false</UseDebugLibraries>\r\n    <WholeProgramOptimization>true</WholeProgramOptimization>\r\n    <CharacterSet>Unicode</CharacterSet>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" Label=\"Configuration\">\r\n    <ConfigurationType>Application</ConfigurationType>\r\n    <UseDebugLibraries>false</UseDebugLibraries>\r\n    <WholeProgramOptimization>true</WholeProgramOptimization>\r\n    <CharacterSet>Unicode</CharacterSet>\r\n  </PropertyGroup>\r\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.props\" />\r\n  <ImportGroup Label=\"ExtensionSettings\">\r\n  </ImportGroup>\r\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\r\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\r\n  </ImportGroup>\r\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" Label=\"PropertySheets\">\r\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\r\n  </ImportGroup>\r\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\r\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\r\n  </ImportGroup>\r\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" Label=\"PropertySheets\">\r\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\r\n  </ImportGroup>\r\n  <PropertyGroup Label=\"UserMacros\" />\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\r\n    <LinkIncremental>true</LinkIncremental>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">\r\n    <LinkIncremental>true</LinkIncremental>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\r\n    <LinkIncremental>false</LinkIncremental>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">\r\n    <LinkIncremental>false</LinkIncremental>\r\n  </PropertyGroup>\r\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\r\n    <ClCompile>\r\n      <PrecompiledHeader>\r\n      </PrecompiledHeader>\r\n      <WarningLevel>Level3</WarningLevel>\r\n      <Optimization>Disabled</Optimization>\r\n      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n      <AdditionalIncludeDirectories>$(SolutionDir)..</AdditionalIncludeDirectories>\r\n    </ClCompile>\r\n    <Link>\r\n      <SubSystem>Console</SubSystem>\r\n      <GenerateDebugInformation>true</GenerateDebugInformation>\r\n    </Link>\r\n  </ItemDefinitionGroup>\r\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">\r\n    <ClCompile>\r\n      <PrecompiledHeader>\r\n      </PrecompiledHeader>\r\n      <WarningLevel>Level3</WarningLevel>\r\n      <Optimization>Disabled</Optimization>\r\n      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n      <AdditionalIncludeDirectories>$(SolutionDir)..</AdditionalIncludeDirectories>\r\n    </ClCompile>\r\n    <Link>\r\n      <SubSystem>Console</SubSystem>\r\n      <GenerateDebugInformation>true</GenerateDebugInformation>\r\n    </Link>\r\n  </ItemDefinitionGroup>\r\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\r\n    <ClCompile>\r\n      <WarningLevel>Level3</WarningLevel>\r\n      <PrecompiledHeader>\r\n      </PrecompiledHeader>\r\n      <Optimization>MaxSpeed</Optimization>\r\n      <FunctionLevelLinking>true</FunctionLevelLinking>\r\n      <IntrinsicFunctions>true</IntrinsicFunctions>\r\n      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n      <AdditionalIncludeDirectories>$(SolutionDir)..</AdditionalIncludeDirectories>\r\n    </ClCompile>\r\n    <Link>\r\n      <SubSystem>Console</SubSystem>\r\n      <GenerateDebugInformation>true</GenerateDebugInformation>\r\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r\n      <OptimizeReferences>true</OptimizeReferences>\r\n    </Link>\r\n  </ItemDefinitionGroup>\r\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">\r\n    <ClCompile>\r\n      <WarningLevel>Level3</WarningLevel>\r\n      <PrecompiledHeader>\r\n      </PrecompiledHeader>\r\n      <Optimization>MaxSpeed</Optimization>\r\n      <FunctionLevelLinking>true</FunctionLevelLinking>\r\n      <IntrinsicFunctions>true</IntrinsicFunctions>\r\n      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n      <AdditionalIncludeDirectories>$(SolutionDir)..</AdditionalIncludeDirectories>\r\n    </ClCompile>\r\n    <Link>\r\n      <SubSystem>Console</SubSystem>\r\n      <GenerateDebugInformation>true</GenerateDebugInformation>\r\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r\n      <OptimizeReferences>true</OptimizeReferences>\r\n    </Link>\r\n  </ItemDefinitionGroup>\r\n  <ItemGroup>\r\n    <ClCompile Include=\"..\\2junctions.cpp\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <ProjectReference Include=\"..\\..\\libavoid.vcxproj\">\r\n      <Project>{798c3d94-bf71-4c72-a29d-0e74c2eb296a}</Project>\r\n    </ProjectReference>\r\n  </ItemGroup>\r\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.targets\" />\r\n  <ImportGroup Label=\"ExtensionTargets\">\r\n  </ImportGroup>\r\n</Project>"
  },
  {
    "path": "cola/libavoid/tests/msctests/buildOrthogonalChannelInfo1.vcxproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project DefaultTargets=\"Build\" ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n  <ItemGroup Label=\"ProjectConfigurations\">\r\n    <ProjectConfiguration Include=\"Debug|Win32\">\r\n      <Configuration>Debug</Configuration>\r\n      <Platform>Win32</Platform>\r\n    </ProjectConfiguration>\r\n    <ProjectConfiguration Include=\"Debug|x64\">\r\n      <Configuration>Debug</Configuration>\r\n      <Platform>x64</Platform>\r\n    </ProjectConfiguration>\r\n    <ProjectConfiguration Include=\"Release|Win32\">\r\n      <Configuration>Release</Configuration>\r\n      <Platform>Win32</Platform>\r\n    </ProjectConfiguration>\r\n    <ProjectConfiguration Include=\"Release|x64\">\r\n      <Configuration>Release</Configuration>\r\n      <Platform>x64</Platform>\r\n    </ProjectConfiguration>\r\n  </ItemGroup>\r\n  <PropertyGroup Label=\"Globals\">\r\n    <ProjectGuid>{022C18E8-4B2A-4CF0-8660-9B691473C20E}</ProjectGuid>\r\n    <Keyword>Win32Proj</Keyword>\r\n    <RootNamespace>buildOrthogonalChannelInfo1</RootNamespace>\r\n  </PropertyGroup>\r\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.Default.props\" />\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"Configuration\">\r\n    <ConfigurationType>Application</ConfigurationType>\r\n    <UseDebugLibraries>true</UseDebugLibraries>\r\n    <CharacterSet>Unicode</CharacterSet>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" Label=\"Configuration\">\r\n    <ConfigurationType>Application</ConfigurationType>\r\n    <UseDebugLibraries>true</UseDebugLibraries>\r\n    <CharacterSet>Unicode</CharacterSet>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"Configuration\">\r\n    <ConfigurationType>Application</ConfigurationType>\r\n    <UseDebugLibraries>false</UseDebugLibraries>\r\n    <WholeProgramOptimization>true</WholeProgramOptimization>\r\n    <CharacterSet>Unicode</CharacterSet>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" Label=\"Configuration\">\r\n    <ConfigurationType>Application</ConfigurationType>\r\n    <UseDebugLibraries>false</UseDebugLibraries>\r\n    <WholeProgramOptimization>true</WholeProgramOptimization>\r\n    <CharacterSet>Unicode</CharacterSet>\r\n  </PropertyGroup>\r\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.props\" />\r\n  <ImportGroup Label=\"ExtensionSettings\">\r\n  </ImportGroup>\r\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\r\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\r\n  </ImportGroup>\r\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" Label=\"PropertySheets\">\r\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\r\n  </ImportGroup>\r\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\r\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\r\n  </ImportGroup>\r\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" Label=\"PropertySheets\">\r\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\r\n  </ImportGroup>\r\n  <PropertyGroup Label=\"UserMacros\" />\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\r\n    <LinkIncremental>true</LinkIncremental>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">\r\n    <LinkIncremental>true</LinkIncremental>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\r\n    <LinkIncremental>false</LinkIncremental>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">\r\n    <LinkIncremental>false</LinkIncremental>\r\n  </PropertyGroup>\r\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\r\n    <ClCompile>\r\n      <PrecompiledHeader>\r\n      </PrecompiledHeader>\r\n      <WarningLevel>Level3</WarningLevel>\r\n      <Optimization>Disabled</Optimization>\r\n      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n      <AdditionalIncludeDirectories>$(SolutionDir)..</AdditionalIncludeDirectories>\r\n    </ClCompile>\r\n    <Link>\r\n      <SubSystem>Console</SubSystem>\r\n      <GenerateDebugInformation>true</GenerateDebugInformation>\r\n    </Link>\r\n  </ItemDefinitionGroup>\r\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">\r\n    <ClCompile>\r\n      <PrecompiledHeader>\r\n      </PrecompiledHeader>\r\n      <WarningLevel>Level3</WarningLevel>\r\n      <Optimization>Disabled</Optimization>\r\n      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n      <AdditionalIncludeDirectories>$(SolutionDir)..</AdditionalIncludeDirectories>\r\n    </ClCompile>\r\n    <Link>\r\n      <SubSystem>Console</SubSystem>\r\n      <GenerateDebugInformation>true</GenerateDebugInformation>\r\n    </Link>\r\n  </ItemDefinitionGroup>\r\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\r\n    <ClCompile>\r\n      <WarningLevel>Level3</WarningLevel>\r\n      <PrecompiledHeader>\r\n      </PrecompiledHeader>\r\n      <Optimization>MaxSpeed</Optimization>\r\n      <FunctionLevelLinking>true</FunctionLevelLinking>\r\n      <IntrinsicFunctions>true</IntrinsicFunctions>\r\n      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n      <AdditionalIncludeDirectories>$(SolutionDir)..</AdditionalIncludeDirectories>\r\n    </ClCompile>\r\n    <Link>\r\n      <SubSystem>Console</SubSystem>\r\n      <GenerateDebugInformation>true</GenerateDebugInformation>\r\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r\n      <OptimizeReferences>true</OptimizeReferences>\r\n    </Link>\r\n  </ItemDefinitionGroup>\r\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">\r\n    <ClCompile>\r\n      <WarningLevel>Level3</WarningLevel>\r\n      <PrecompiledHeader>\r\n      </PrecompiledHeader>\r\n      <Optimization>MaxSpeed</Optimization>\r\n      <FunctionLevelLinking>true</FunctionLevelLinking>\r\n      <IntrinsicFunctions>true</IntrinsicFunctions>\r\n      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n      <AdditionalIncludeDirectories>$(SolutionDir)..</AdditionalIncludeDirectories>\r\n    </ClCompile>\r\n    <Link>\r\n      <SubSystem>Console</SubSystem>\r\n      <GenerateDebugInformation>true</GenerateDebugInformation>\r\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r\n      <OptimizeReferences>true</OptimizeReferences>\r\n    </Link>\r\n  </ItemDefinitionGroup>\r\n  <ItemGroup>\r\n    <ClCompile Include=\"..\\buildOrthogonalChannelInfo1.cpp\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <ProjectReference Include=\"..\\..\\libavoid.vcxproj\">\r\n      <Project>{798c3d94-bf71-4c72-a29d-0e74c2eb296a}</Project>\r\n    </ProjectReference>\r\n  </ItemGroup>\r\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.targets\" />\r\n  <ImportGroup Label=\"ExtensionTargets\">\r\n  </ImportGroup>\r\n</Project>"
  },
  {
    "path": "cola/libavoid/tests/msctests/checkpointNudging1.vcxproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project DefaultTargets=\"Build\" ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n  <ItemGroup Label=\"ProjectConfigurations\">\r\n    <ProjectConfiguration Include=\"Debug|Win32\">\r\n      <Configuration>Debug</Configuration>\r\n      <Platform>Win32</Platform>\r\n    </ProjectConfiguration>\r\n    <ProjectConfiguration Include=\"Debug|x64\">\r\n      <Configuration>Debug</Configuration>\r\n      <Platform>x64</Platform>\r\n    </ProjectConfiguration>\r\n    <ProjectConfiguration Include=\"Release|Win32\">\r\n      <Configuration>Release</Configuration>\r\n      <Platform>Win32</Platform>\r\n    </ProjectConfiguration>\r\n    <ProjectConfiguration Include=\"Release|x64\">\r\n      <Configuration>Release</Configuration>\r\n      <Platform>x64</Platform>\r\n    </ProjectConfiguration>\r\n  </ItemGroup>\r\n  <PropertyGroup Label=\"Globals\">\r\n    <ProjectGuid>{33240DD8-FDA7-4157-B022-C71E0B29467B}</ProjectGuid>\r\n    <Keyword>Win32Proj</Keyword>\r\n    <RootNamespace>checkpointNudging1</RootNamespace>\r\n  </PropertyGroup>\r\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.Default.props\" />\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"Configuration\">\r\n    <ConfigurationType>Application</ConfigurationType>\r\n    <UseDebugLibraries>true</UseDebugLibraries>\r\n    <CharacterSet>Unicode</CharacterSet>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" Label=\"Configuration\">\r\n    <ConfigurationType>Application</ConfigurationType>\r\n    <UseDebugLibraries>true</UseDebugLibraries>\r\n    <CharacterSet>Unicode</CharacterSet>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"Configuration\">\r\n    <ConfigurationType>Application</ConfigurationType>\r\n    <UseDebugLibraries>false</UseDebugLibraries>\r\n    <WholeProgramOptimization>true</WholeProgramOptimization>\r\n    <CharacterSet>Unicode</CharacterSet>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" Label=\"Configuration\">\r\n    <ConfigurationType>Application</ConfigurationType>\r\n    <UseDebugLibraries>false</UseDebugLibraries>\r\n    <WholeProgramOptimization>true</WholeProgramOptimization>\r\n    <CharacterSet>Unicode</CharacterSet>\r\n  </PropertyGroup>\r\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.props\" />\r\n  <ImportGroup Label=\"ExtensionSettings\">\r\n  </ImportGroup>\r\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\r\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\r\n  </ImportGroup>\r\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" Label=\"PropertySheets\">\r\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\r\n  </ImportGroup>\r\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\r\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\r\n  </ImportGroup>\r\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" Label=\"PropertySheets\">\r\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\r\n  </ImportGroup>\r\n  <PropertyGroup Label=\"UserMacros\" />\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\r\n    <LinkIncremental>true</LinkIncremental>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">\r\n    <LinkIncremental>true</LinkIncremental>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\r\n    <LinkIncremental>false</LinkIncremental>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">\r\n    <LinkIncremental>false</LinkIncremental>\r\n  </PropertyGroup>\r\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\r\n    <ClCompile>\r\n      <PrecompiledHeader>\r\n      </PrecompiledHeader>\r\n      <WarningLevel>Level3</WarningLevel>\r\n      <Optimization>Disabled</Optimization>\r\n      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n      <AdditionalIncludeDirectories>$(SolutionDir)..</AdditionalIncludeDirectories>\r\n    </ClCompile>\r\n    <Link>\r\n      <SubSystem>Console</SubSystem>\r\n      <GenerateDebugInformation>true</GenerateDebugInformation>\r\n    </Link>\r\n  </ItemDefinitionGroup>\r\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">\r\n    <ClCompile>\r\n      <PrecompiledHeader>\r\n      </PrecompiledHeader>\r\n      <WarningLevel>Level3</WarningLevel>\r\n      <Optimization>Disabled</Optimization>\r\n      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n      <AdditionalIncludeDirectories>$(SolutionDir)..</AdditionalIncludeDirectories>\r\n    </ClCompile>\r\n    <Link>\r\n      <SubSystem>Console</SubSystem>\r\n      <GenerateDebugInformation>true</GenerateDebugInformation>\r\n    </Link>\r\n  </ItemDefinitionGroup>\r\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\r\n    <ClCompile>\r\n      <WarningLevel>Level3</WarningLevel>\r\n      <PrecompiledHeader>\r\n      </PrecompiledHeader>\r\n      <Optimization>MaxSpeed</Optimization>\r\n      <FunctionLevelLinking>true</FunctionLevelLinking>\r\n      <IntrinsicFunctions>true</IntrinsicFunctions>\r\n      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n      <AdditionalIncludeDirectories>$(SolutionDir)..</AdditionalIncludeDirectories>\r\n    </ClCompile>\r\n    <Link>\r\n      <SubSystem>Console</SubSystem>\r\n      <GenerateDebugInformation>true</GenerateDebugInformation>\r\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r\n      <OptimizeReferences>true</OptimizeReferences>\r\n    </Link>\r\n  </ItemDefinitionGroup>\r\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">\r\n    <ClCompile>\r\n      <WarningLevel>Level3</WarningLevel>\r\n      <PrecompiledHeader>\r\n      </PrecompiledHeader>\r\n      <Optimization>MaxSpeed</Optimization>\r\n      <FunctionLevelLinking>true</FunctionLevelLinking>\r\n      <IntrinsicFunctions>true</IntrinsicFunctions>\r\n      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n      <AdditionalIncludeDirectories>$(SolutionDir)..</AdditionalIncludeDirectories>\r\n    </ClCompile>\r\n    <Link>\r\n      <SubSystem>Console</SubSystem>\r\n      <GenerateDebugInformation>true</GenerateDebugInformation>\r\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r\n      <OptimizeReferences>true</OptimizeReferences>\r\n    </Link>\r\n  </ItemDefinitionGroup>\r\n  <ItemGroup>\r\n    <ClCompile Include=\"..\\checkpointNudging1.cpp\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <ProjectReference Include=\"..\\..\\libavoid.vcxproj\">\r\n      <Project>{798c3d94-bf71-4c72-a29d-0e74c2eb296a}</Project>\r\n    </ProjectReference>\r\n  </ItemGroup>\r\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.targets\" />\r\n  <ImportGroup Label=\"ExtensionTargets\">\r\n  </ImportGroup>\r\n</Project>"
  },
  {
    "path": "cola/libavoid/tests/msctests/checkpointNudging2.vcxproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project DefaultTargets=\"Build\" ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n  <ItemGroup Label=\"ProjectConfigurations\">\r\n    <ProjectConfiguration Include=\"Debug|Win32\">\r\n      <Configuration>Debug</Configuration>\r\n      <Platform>Win32</Platform>\r\n    </ProjectConfiguration>\r\n    <ProjectConfiguration Include=\"Debug|x64\">\r\n      <Configuration>Debug</Configuration>\r\n      <Platform>x64</Platform>\r\n    </ProjectConfiguration>\r\n    <ProjectConfiguration Include=\"Release|Win32\">\r\n      <Configuration>Release</Configuration>\r\n      <Platform>Win32</Platform>\r\n    </ProjectConfiguration>\r\n    <ProjectConfiguration Include=\"Release|x64\">\r\n      <Configuration>Release</Configuration>\r\n      <Platform>x64</Platform>\r\n    </ProjectConfiguration>\r\n  </ItemGroup>\r\n  <PropertyGroup Label=\"Globals\">\r\n    <ProjectGuid>{97CCD32F-F345-4B41-BC79-50EE7644FCCD}</ProjectGuid>\r\n    <Keyword>Win32Proj</Keyword>\r\n    <RootNamespace>checkpointNudging2</RootNamespace>\r\n  </PropertyGroup>\r\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.Default.props\" />\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"Configuration\">\r\n    <ConfigurationType>Application</ConfigurationType>\r\n    <UseDebugLibraries>true</UseDebugLibraries>\r\n    <CharacterSet>Unicode</CharacterSet>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" Label=\"Configuration\">\r\n    <ConfigurationType>Application</ConfigurationType>\r\n    <UseDebugLibraries>true</UseDebugLibraries>\r\n    <CharacterSet>Unicode</CharacterSet>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"Configuration\">\r\n    <ConfigurationType>Application</ConfigurationType>\r\n    <UseDebugLibraries>false</UseDebugLibraries>\r\n    <WholeProgramOptimization>true</WholeProgramOptimization>\r\n    <CharacterSet>Unicode</CharacterSet>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" Label=\"Configuration\">\r\n    <ConfigurationType>Application</ConfigurationType>\r\n    <UseDebugLibraries>false</UseDebugLibraries>\r\n    <WholeProgramOptimization>true</WholeProgramOptimization>\r\n    <CharacterSet>Unicode</CharacterSet>\r\n  </PropertyGroup>\r\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.props\" />\r\n  <ImportGroup Label=\"ExtensionSettings\">\r\n  </ImportGroup>\r\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\r\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\r\n  </ImportGroup>\r\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" Label=\"PropertySheets\">\r\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\r\n  </ImportGroup>\r\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\r\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\r\n  </ImportGroup>\r\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" Label=\"PropertySheets\">\r\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\r\n  </ImportGroup>\r\n  <PropertyGroup Label=\"UserMacros\" />\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\r\n    <LinkIncremental>true</LinkIncremental>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">\r\n    <LinkIncremental>true</LinkIncremental>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\r\n    <LinkIncremental>false</LinkIncremental>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">\r\n    <LinkIncremental>false</LinkIncremental>\r\n  </PropertyGroup>\r\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\r\n    <ClCompile>\r\n      <PrecompiledHeader>\r\n      </PrecompiledHeader>\r\n      <WarningLevel>Level3</WarningLevel>\r\n      <Optimization>Disabled</Optimization>\r\n      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n      <AdditionalIncludeDirectories>$(SolutionDir)..</AdditionalIncludeDirectories>\r\n    </ClCompile>\r\n    <Link>\r\n      <SubSystem>Console</SubSystem>\r\n      <GenerateDebugInformation>true</GenerateDebugInformation>\r\n    </Link>\r\n  </ItemDefinitionGroup>\r\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">\r\n    <ClCompile>\r\n      <PrecompiledHeader>\r\n      </PrecompiledHeader>\r\n      <WarningLevel>Level3</WarningLevel>\r\n      <Optimization>Disabled</Optimization>\r\n      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n      <AdditionalIncludeDirectories>$(SolutionDir)..</AdditionalIncludeDirectories>\r\n    </ClCompile>\r\n    <Link>\r\n      <SubSystem>Console</SubSystem>\r\n      <GenerateDebugInformation>true</GenerateDebugInformation>\r\n    </Link>\r\n  </ItemDefinitionGroup>\r\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\r\n    <ClCompile>\r\n      <WarningLevel>Level3</WarningLevel>\r\n      <PrecompiledHeader>\r\n      </PrecompiledHeader>\r\n      <Optimization>MaxSpeed</Optimization>\r\n      <FunctionLevelLinking>true</FunctionLevelLinking>\r\n      <IntrinsicFunctions>true</IntrinsicFunctions>\r\n      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n      <AdditionalIncludeDirectories>$(SolutionDir)..</AdditionalIncludeDirectories>\r\n    </ClCompile>\r\n    <Link>\r\n      <SubSystem>Console</SubSystem>\r\n      <GenerateDebugInformation>true</GenerateDebugInformation>\r\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r\n      <OptimizeReferences>true</OptimizeReferences>\r\n    </Link>\r\n  </ItemDefinitionGroup>\r\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">\r\n    <ClCompile>\r\n      <WarningLevel>Level3</WarningLevel>\r\n      <PrecompiledHeader>\r\n      </PrecompiledHeader>\r\n      <Optimization>MaxSpeed</Optimization>\r\n      <FunctionLevelLinking>true</FunctionLevelLinking>\r\n      <IntrinsicFunctions>true</IntrinsicFunctions>\r\n      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n      <AdditionalIncludeDirectories>$(SolutionDir)..</AdditionalIncludeDirectories>\r\n    </ClCompile>\r\n    <Link>\r\n      <SubSystem>Console</SubSystem>\r\n      <GenerateDebugInformation>true</GenerateDebugInformation>\r\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r\n      <OptimizeReferences>true</OptimizeReferences>\r\n    </Link>\r\n  </ItemDefinitionGroup>\r\n  <ItemGroup>\r\n    <ClCompile Include=\"..\\checkpointNudging2.cpp\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <ProjectReference Include=\"..\\..\\libavoid.vcxproj\">\r\n      <Project>{798c3d94-bf71-4c72-a29d-0e74c2eb296a}</Project>\r\n    </ProjectReference>\r\n  </ItemGroup>\r\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.targets\" />\r\n  <ImportGroup Label=\"ExtensionTargets\">\r\n  </ImportGroup>\r\n</Project>"
  },
  {
    "path": "cola/libavoid/tests/msctests/checkpoints01.vcxproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project DefaultTargets=\"Build\" ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n  <ItemGroup Label=\"ProjectConfigurations\">\r\n    <ProjectConfiguration Include=\"Debug|Win32\">\r\n      <Configuration>Debug</Configuration>\r\n      <Platform>Win32</Platform>\r\n    </ProjectConfiguration>\r\n    <ProjectConfiguration Include=\"Debug|x64\">\r\n      <Configuration>Debug</Configuration>\r\n      <Platform>x64</Platform>\r\n    </ProjectConfiguration>\r\n    <ProjectConfiguration Include=\"Release|Win32\">\r\n      <Configuration>Release</Configuration>\r\n      <Platform>Win32</Platform>\r\n    </ProjectConfiguration>\r\n    <ProjectConfiguration Include=\"Release|x64\">\r\n      <Configuration>Release</Configuration>\r\n      <Platform>x64</Platform>\r\n    </ProjectConfiguration>\r\n  </ItemGroup>\r\n  <PropertyGroup Label=\"Globals\">\r\n    <ProjectGuid>{6C2BA2FB-CD3A-409E-B87B-6A105C7CCA48}</ProjectGuid>\r\n    <Keyword>Win32Proj</Keyword>\r\n    <RootNamespace>checkpoints01</RootNamespace>\r\n  </PropertyGroup>\r\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.Default.props\" />\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"Configuration\">\r\n    <ConfigurationType>Application</ConfigurationType>\r\n    <UseDebugLibraries>true</UseDebugLibraries>\r\n    <CharacterSet>Unicode</CharacterSet>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" Label=\"Configuration\">\r\n    <ConfigurationType>Application</ConfigurationType>\r\n    <UseDebugLibraries>true</UseDebugLibraries>\r\n    <CharacterSet>Unicode</CharacterSet>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"Configuration\">\r\n    <ConfigurationType>Application</ConfigurationType>\r\n    <UseDebugLibraries>false</UseDebugLibraries>\r\n    <WholeProgramOptimization>true</WholeProgramOptimization>\r\n    <CharacterSet>Unicode</CharacterSet>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" Label=\"Configuration\">\r\n    <ConfigurationType>Application</ConfigurationType>\r\n    <UseDebugLibraries>false</UseDebugLibraries>\r\n    <WholeProgramOptimization>true</WholeProgramOptimization>\r\n    <CharacterSet>Unicode</CharacterSet>\r\n  </PropertyGroup>\r\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.props\" />\r\n  <ImportGroup Label=\"ExtensionSettings\">\r\n  </ImportGroup>\r\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\r\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\r\n  </ImportGroup>\r\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" Label=\"PropertySheets\">\r\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\r\n  </ImportGroup>\r\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\r\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\r\n  </ImportGroup>\r\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" Label=\"PropertySheets\">\r\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\r\n  </ImportGroup>\r\n  <PropertyGroup Label=\"UserMacros\" />\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\r\n    <LinkIncremental>true</LinkIncremental>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">\r\n    <LinkIncremental>true</LinkIncremental>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\r\n    <LinkIncremental>false</LinkIncremental>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">\r\n    <LinkIncremental>false</LinkIncremental>\r\n  </PropertyGroup>\r\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\r\n    <ClCompile>\r\n      <PrecompiledHeader>\r\n      </PrecompiledHeader>\r\n      <WarningLevel>Level3</WarningLevel>\r\n      <Optimization>Disabled</Optimization>\r\n      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n      <AdditionalIncludeDirectories>$(SolutionDir)..</AdditionalIncludeDirectories>\r\n    </ClCompile>\r\n    <Link>\r\n      <SubSystem>Console</SubSystem>\r\n      <GenerateDebugInformation>true</GenerateDebugInformation>\r\n    </Link>\r\n  </ItemDefinitionGroup>\r\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">\r\n    <ClCompile>\r\n      <PrecompiledHeader>\r\n      </PrecompiledHeader>\r\n      <WarningLevel>Level3</WarningLevel>\r\n      <Optimization>Disabled</Optimization>\r\n      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n      <AdditionalIncludeDirectories>$(SolutionDir)..</AdditionalIncludeDirectories>\r\n    </ClCompile>\r\n    <Link>\r\n      <SubSystem>Console</SubSystem>\r\n      <GenerateDebugInformation>true</GenerateDebugInformation>\r\n    </Link>\r\n  </ItemDefinitionGroup>\r\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\r\n    <ClCompile>\r\n      <WarningLevel>Level3</WarningLevel>\r\n      <PrecompiledHeader>\r\n      </PrecompiledHeader>\r\n      <Optimization>MaxSpeed</Optimization>\r\n      <FunctionLevelLinking>true</FunctionLevelLinking>\r\n      <IntrinsicFunctions>true</IntrinsicFunctions>\r\n      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n      <AdditionalIncludeDirectories>$(SolutionDir)..</AdditionalIncludeDirectories>\r\n    </ClCompile>\r\n    <Link>\r\n      <SubSystem>Console</SubSystem>\r\n      <GenerateDebugInformation>true</GenerateDebugInformation>\r\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r\n      <OptimizeReferences>true</OptimizeReferences>\r\n    </Link>\r\n  </ItemDefinitionGroup>\r\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">\r\n    <ClCompile>\r\n      <WarningLevel>Level3</WarningLevel>\r\n      <PrecompiledHeader>\r\n      </PrecompiledHeader>\r\n      <Optimization>MaxSpeed</Optimization>\r\n      <FunctionLevelLinking>true</FunctionLevelLinking>\r\n      <IntrinsicFunctions>true</IntrinsicFunctions>\r\n      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n      <AdditionalIncludeDirectories>$(SolutionDir)..</AdditionalIncludeDirectories>\r\n    </ClCompile>\r\n    <Link>\r\n      <SubSystem>Console</SubSystem>\r\n      <GenerateDebugInformation>true</GenerateDebugInformation>\r\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r\n      <OptimizeReferences>true</OptimizeReferences>\r\n    </Link>\r\n  </ItemDefinitionGroup>\r\n  <ItemGroup>\r\n    <ClCompile Include=\"..\\checkpoints01.cpp\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <ProjectReference Include=\"..\\..\\libavoid.vcxproj\">\r\n      <Project>{798c3d94-bf71-4c72-a29d-0e74c2eb296a}</Project>\r\n    </ProjectReference>\r\n  </ItemGroup>\r\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.targets\" />\r\n  <ImportGroup Label=\"ExtensionTargets\">\r\n  </ImportGroup>\r\n</Project>"
  },
  {
    "path": "cola/libavoid/tests/msctests/connectionpin01.vcxproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project DefaultTargets=\"Build\" ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n  <ItemGroup Label=\"ProjectConfigurations\">\r\n    <ProjectConfiguration Include=\"Debug|Win32\">\r\n      <Configuration>Debug</Configuration>\r\n      <Platform>Win32</Platform>\r\n    </ProjectConfiguration>\r\n    <ProjectConfiguration Include=\"Debug|x64\">\r\n      <Configuration>Debug</Configuration>\r\n      <Platform>x64</Platform>\r\n    </ProjectConfiguration>\r\n    <ProjectConfiguration Include=\"Release|Win32\">\r\n      <Configuration>Release</Configuration>\r\n      <Platform>Win32</Platform>\r\n    </ProjectConfiguration>\r\n    <ProjectConfiguration Include=\"Release|x64\">\r\n      <Configuration>Release</Configuration>\r\n      <Platform>x64</Platform>\r\n    </ProjectConfiguration>\r\n  </ItemGroup>\r\n  <PropertyGroup Label=\"Globals\">\r\n    <ProjectGuid>{F77FA86C-07F5-468C-A162-479EEE7AEC45}</ProjectGuid>\r\n    <Keyword>Win32Proj</Keyword>\r\n    <RootNamespace>connectionpin01</RootNamespace>\r\n  </PropertyGroup>\r\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.Default.props\" />\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"Configuration\">\r\n    <ConfigurationType>Application</ConfigurationType>\r\n    <UseDebugLibraries>true</UseDebugLibraries>\r\n    <CharacterSet>Unicode</CharacterSet>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" Label=\"Configuration\">\r\n    <ConfigurationType>Application</ConfigurationType>\r\n    <UseDebugLibraries>true</UseDebugLibraries>\r\n    <CharacterSet>Unicode</CharacterSet>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"Configuration\">\r\n    <ConfigurationType>Application</ConfigurationType>\r\n    <UseDebugLibraries>false</UseDebugLibraries>\r\n    <WholeProgramOptimization>true</WholeProgramOptimization>\r\n    <CharacterSet>Unicode</CharacterSet>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" Label=\"Configuration\">\r\n    <ConfigurationType>Application</ConfigurationType>\r\n    <UseDebugLibraries>false</UseDebugLibraries>\r\n    <WholeProgramOptimization>true</WholeProgramOptimization>\r\n    <CharacterSet>Unicode</CharacterSet>\r\n  </PropertyGroup>\r\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.props\" />\r\n  <ImportGroup Label=\"ExtensionSettings\">\r\n  </ImportGroup>\r\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\r\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\r\n  </ImportGroup>\r\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" Label=\"PropertySheets\">\r\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\r\n  </ImportGroup>\r\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\r\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\r\n  </ImportGroup>\r\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" Label=\"PropertySheets\">\r\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\r\n  </ImportGroup>\r\n  <PropertyGroup Label=\"UserMacros\" />\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\r\n    <LinkIncremental>true</LinkIncremental>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">\r\n    <LinkIncremental>true</LinkIncremental>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\r\n    <LinkIncremental>false</LinkIncremental>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">\r\n    <LinkIncremental>false</LinkIncremental>\r\n  </PropertyGroup>\r\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\r\n    <ClCompile>\r\n      <PrecompiledHeader>\r\n      </PrecompiledHeader>\r\n      <WarningLevel>Level3</WarningLevel>\r\n      <Optimization>Disabled</Optimization>\r\n      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n      <AdditionalIncludeDirectories>$(SolutionDir)..</AdditionalIncludeDirectories>\r\n    </ClCompile>\r\n    <Link>\r\n      <SubSystem>Console</SubSystem>\r\n      <GenerateDebugInformation>true</GenerateDebugInformation>\r\n    </Link>\r\n  </ItemDefinitionGroup>\r\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">\r\n    <ClCompile>\r\n      <PrecompiledHeader>\r\n      </PrecompiledHeader>\r\n      <WarningLevel>Level3</WarningLevel>\r\n      <Optimization>Disabled</Optimization>\r\n      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n      <AdditionalIncludeDirectories>$(SolutionDir)..</AdditionalIncludeDirectories>\r\n    </ClCompile>\r\n    <Link>\r\n      <SubSystem>Console</SubSystem>\r\n      <GenerateDebugInformation>true</GenerateDebugInformation>\r\n    </Link>\r\n  </ItemDefinitionGroup>\r\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\r\n    <ClCompile>\r\n      <WarningLevel>Level3</WarningLevel>\r\n      <PrecompiledHeader>\r\n      </PrecompiledHeader>\r\n      <Optimization>MaxSpeed</Optimization>\r\n      <FunctionLevelLinking>true</FunctionLevelLinking>\r\n      <IntrinsicFunctions>true</IntrinsicFunctions>\r\n      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n      <AdditionalIncludeDirectories>$(SolutionDir)..</AdditionalIncludeDirectories>\r\n    </ClCompile>\r\n    <Link>\r\n      <SubSystem>Console</SubSystem>\r\n      <GenerateDebugInformation>true</GenerateDebugInformation>\r\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r\n      <OptimizeReferences>true</OptimizeReferences>\r\n    </Link>\r\n  </ItemDefinitionGroup>\r\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">\r\n    <ClCompile>\r\n      <WarningLevel>Level3</WarningLevel>\r\n      <PrecompiledHeader>\r\n      </PrecompiledHeader>\r\n      <Optimization>MaxSpeed</Optimization>\r\n      <FunctionLevelLinking>true</FunctionLevelLinking>\r\n      <IntrinsicFunctions>true</IntrinsicFunctions>\r\n      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n      <AdditionalIncludeDirectories>$(SolutionDir)..</AdditionalIncludeDirectories>\r\n    </ClCompile>\r\n    <Link>\r\n      <SubSystem>Console</SubSystem>\r\n      <GenerateDebugInformation>true</GenerateDebugInformation>\r\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r\n      <OptimizeReferences>true</OptimizeReferences>\r\n    </Link>\r\n  </ItemDefinitionGroup>\r\n  <ItemGroup>\r\n    <ClCompile Include=\"..\\connectionpin01.cpp\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <ProjectReference Include=\"..\\..\\libavoid.vcxproj\">\r\n      <Project>{798c3d94-bf71-4c72-a29d-0e74c2eb296a}</Project>\r\n    </ProjectReference>\r\n  </ItemGroup>\r\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.targets\" />\r\n  <ImportGroup Label=\"ExtensionTargets\">\r\n  </ImportGroup>\r\n</Project>"
  },
  {
    "path": "cola/libavoid/tests/msctests/connectionpin02.vcxproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project DefaultTargets=\"Build\" ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n  <ItemGroup Label=\"ProjectConfigurations\">\r\n    <ProjectConfiguration Include=\"Debug|Win32\">\r\n      <Configuration>Debug</Configuration>\r\n      <Platform>Win32</Platform>\r\n    </ProjectConfiguration>\r\n    <ProjectConfiguration Include=\"Debug|x64\">\r\n      <Configuration>Debug</Configuration>\r\n      <Platform>x64</Platform>\r\n    </ProjectConfiguration>\r\n    <ProjectConfiguration Include=\"Release|Win32\">\r\n      <Configuration>Release</Configuration>\r\n      <Platform>Win32</Platform>\r\n    </ProjectConfiguration>\r\n    <ProjectConfiguration Include=\"Release|x64\">\r\n      <Configuration>Release</Configuration>\r\n      <Platform>x64</Platform>\r\n    </ProjectConfiguration>\r\n  </ItemGroup>\r\n  <PropertyGroup Label=\"Globals\">\r\n    <ProjectGuid>{E570E7C6-CFF4-4639-855E-4C1E02F0DD85}</ProjectGuid>\r\n    <Keyword>Win32Proj</Keyword>\r\n    <RootNamespace>connectionpin02</RootNamespace>\r\n  </PropertyGroup>\r\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.Default.props\" />\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"Configuration\">\r\n    <ConfigurationType>Application</ConfigurationType>\r\n    <UseDebugLibraries>true</UseDebugLibraries>\r\n    <CharacterSet>Unicode</CharacterSet>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" Label=\"Configuration\">\r\n    <ConfigurationType>Application</ConfigurationType>\r\n    <UseDebugLibraries>true</UseDebugLibraries>\r\n    <CharacterSet>Unicode</CharacterSet>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"Configuration\">\r\n    <ConfigurationType>Application</ConfigurationType>\r\n    <UseDebugLibraries>false</UseDebugLibraries>\r\n    <WholeProgramOptimization>true</WholeProgramOptimization>\r\n    <CharacterSet>Unicode</CharacterSet>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" Label=\"Configuration\">\r\n    <ConfigurationType>Application</ConfigurationType>\r\n    <UseDebugLibraries>false</UseDebugLibraries>\r\n    <WholeProgramOptimization>true</WholeProgramOptimization>\r\n    <CharacterSet>Unicode</CharacterSet>\r\n  </PropertyGroup>\r\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.props\" />\r\n  <ImportGroup Label=\"ExtensionSettings\">\r\n  </ImportGroup>\r\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\r\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\r\n  </ImportGroup>\r\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" Label=\"PropertySheets\">\r\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\r\n  </ImportGroup>\r\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\r\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\r\n  </ImportGroup>\r\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" Label=\"PropertySheets\">\r\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\r\n  </ImportGroup>\r\n  <PropertyGroup Label=\"UserMacros\" />\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\r\n    <LinkIncremental>true</LinkIncremental>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">\r\n    <LinkIncremental>true</LinkIncremental>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\r\n    <LinkIncremental>false</LinkIncremental>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">\r\n    <LinkIncremental>false</LinkIncremental>\r\n  </PropertyGroup>\r\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\r\n    <ClCompile>\r\n      <PrecompiledHeader>\r\n      </PrecompiledHeader>\r\n      <WarningLevel>Level3</WarningLevel>\r\n      <Optimization>Disabled</Optimization>\r\n      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n      <AdditionalIncludeDirectories>$(SolutionDir)..</AdditionalIncludeDirectories>\r\n    </ClCompile>\r\n    <Link>\r\n      <SubSystem>Console</SubSystem>\r\n      <GenerateDebugInformation>true</GenerateDebugInformation>\r\n    </Link>\r\n  </ItemDefinitionGroup>\r\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">\r\n    <ClCompile>\r\n      <PrecompiledHeader>\r\n      </PrecompiledHeader>\r\n      <WarningLevel>Level3</WarningLevel>\r\n      <Optimization>Disabled</Optimization>\r\n      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n      <AdditionalIncludeDirectories>$(SolutionDir)..</AdditionalIncludeDirectories>\r\n    </ClCompile>\r\n    <Link>\r\n      <SubSystem>Console</SubSystem>\r\n      <GenerateDebugInformation>true</GenerateDebugInformation>\r\n    </Link>\r\n  </ItemDefinitionGroup>\r\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\r\n    <ClCompile>\r\n      <WarningLevel>Level3</WarningLevel>\r\n      <PrecompiledHeader>\r\n      </PrecompiledHeader>\r\n      <Optimization>MaxSpeed</Optimization>\r\n      <FunctionLevelLinking>true</FunctionLevelLinking>\r\n      <IntrinsicFunctions>true</IntrinsicFunctions>\r\n      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n      <AdditionalIncludeDirectories>$(SolutionDir)..</AdditionalIncludeDirectories>\r\n    </ClCompile>\r\n    <Link>\r\n      <SubSystem>Console</SubSystem>\r\n      <GenerateDebugInformation>true</GenerateDebugInformation>\r\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r\n      <OptimizeReferences>true</OptimizeReferences>\r\n    </Link>\r\n  </ItemDefinitionGroup>\r\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">\r\n    <ClCompile>\r\n      <WarningLevel>Level3</WarningLevel>\r\n      <PrecompiledHeader>\r\n      </PrecompiledHeader>\r\n      <Optimization>MaxSpeed</Optimization>\r\n      <FunctionLevelLinking>true</FunctionLevelLinking>\r\n      <IntrinsicFunctions>true</IntrinsicFunctions>\r\n      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n      <AdditionalIncludeDirectories>$(SolutionDir)..</AdditionalIncludeDirectories>\r\n    </ClCompile>\r\n    <Link>\r\n      <SubSystem>Console</SubSystem>\r\n      <GenerateDebugInformation>true</GenerateDebugInformation>\r\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r\n      <OptimizeReferences>true</OptimizeReferences>\r\n    </Link>\r\n  </ItemDefinitionGroup>\r\n  <ItemGroup>\r\n    <ClCompile Include=\"..\\connectionpin02.cpp\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <ProjectReference Include=\"..\\..\\libavoid.vcxproj\">\r\n      <Project>{798c3d94-bf71-4c72-a29d-0e74c2eb296a}</Project>\r\n    </ProjectReference>\r\n  </ItemGroup>\r\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.targets\" />\r\n  <ImportGroup Label=\"ExtensionTargets\">\r\n  </ImportGroup>\r\n</Project>"
  },
  {
    "path": "cola/libavoid/tests/msctests/connectionpin03.vcxproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project DefaultTargets=\"Build\" ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n  <ItemGroup Label=\"ProjectConfigurations\">\r\n    <ProjectConfiguration Include=\"Debug|Win32\">\r\n      <Configuration>Debug</Configuration>\r\n      <Platform>Win32</Platform>\r\n    </ProjectConfiguration>\r\n    <ProjectConfiguration Include=\"Debug|x64\">\r\n      <Configuration>Debug</Configuration>\r\n      <Platform>x64</Platform>\r\n    </ProjectConfiguration>\r\n    <ProjectConfiguration Include=\"Release|Win32\">\r\n      <Configuration>Release</Configuration>\r\n      <Platform>Win32</Platform>\r\n    </ProjectConfiguration>\r\n    <ProjectConfiguration Include=\"Release|x64\">\r\n      <Configuration>Release</Configuration>\r\n      <Platform>x64</Platform>\r\n    </ProjectConfiguration>\r\n  </ItemGroup>\r\n  <PropertyGroup Label=\"Globals\">\r\n    <ProjectGuid>{69ED412A-63E6-4057-9517-D06A55DD99B0}</ProjectGuid>\r\n    <Keyword>Win32Proj</Keyword>\r\n    <RootNamespace>connectionpin03</RootNamespace>\r\n  </PropertyGroup>\r\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.Default.props\" />\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"Configuration\">\r\n    <ConfigurationType>Application</ConfigurationType>\r\n    <UseDebugLibraries>true</UseDebugLibraries>\r\n    <CharacterSet>Unicode</CharacterSet>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" Label=\"Configuration\">\r\n    <ConfigurationType>Application</ConfigurationType>\r\n    <UseDebugLibraries>true</UseDebugLibraries>\r\n    <CharacterSet>Unicode</CharacterSet>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"Configuration\">\r\n    <ConfigurationType>Application</ConfigurationType>\r\n    <UseDebugLibraries>false</UseDebugLibraries>\r\n    <WholeProgramOptimization>true</WholeProgramOptimization>\r\n    <CharacterSet>Unicode</CharacterSet>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" Label=\"Configuration\">\r\n    <ConfigurationType>Application</ConfigurationType>\r\n    <UseDebugLibraries>false</UseDebugLibraries>\r\n    <WholeProgramOptimization>true</WholeProgramOptimization>\r\n    <CharacterSet>Unicode</CharacterSet>\r\n  </PropertyGroup>\r\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.props\" />\r\n  <ImportGroup Label=\"ExtensionSettings\">\r\n  </ImportGroup>\r\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\r\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\r\n  </ImportGroup>\r\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" Label=\"PropertySheets\">\r\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\r\n  </ImportGroup>\r\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\r\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\r\n  </ImportGroup>\r\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" Label=\"PropertySheets\">\r\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\r\n  </ImportGroup>\r\n  <PropertyGroup Label=\"UserMacros\" />\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\r\n    <LinkIncremental>true</LinkIncremental>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">\r\n    <LinkIncremental>true</LinkIncremental>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\r\n    <LinkIncremental>false</LinkIncremental>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">\r\n    <LinkIncremental>false</LinkIncremental>\r\n  </PropertyGroup>\r\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\r\n    <ClCompile>\r\n      <PrecompiledHeader>\r\n      </PrecompiledHeader>\r\n      <WarningLevel>Level3</WarningLevel>\r\n      <Optimization>Disabled</Optimization>\r\n      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n      <AdditionalIncludeDirectories>$(SolutionDir)..</AdditionalIncludeDirectories>\r\n    </ClCompile>\r\n    <Link>\r\n      <SubSystem>Console</SubSystem>\r\n      <GenerateDebugInformation>true</GenerateDebugInformation>\r\n    </Link>\r\n  </ItemDefinitionGroup>\r\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">\r\n    <ClCompile>\r\n      <PrecompiledHeader>\r\n      </PrecompiledHeader>\r\n      <WarningLevel>Level3</WarningLevel>\r\n      <Optimization>Disabled</Optimization>\r\n      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n      <AdditionalIncludeDirectories>$(SolutionDir)..</AdditionalIncludeDirectories>\r\n    </ClCompile>\r\n    <Link>\r\n      <SubSystem>Console</SubSystem>\r\n      <GenerateDebugInformation>true</GenerateDebugInformation>\r\n    </Link>\r\n  </ItemDefinitionGroup>\r\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\r\n    <ClCompile>\r\n      <WarningLevel>Level3</WarningLevel>\r\n      <PrecompiledHeader>\r\n      </PrecompiledHeader>\r\n      <Optimization>MaxSpeed</Optimization>\r\n      <FunctionLevelLinking>true</FunctionLevelLinking>\r\n      <IntrinsicFunctions>true</IntrinsicFunctions>\r\n      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n      <AdditionalIncludeDirectories>$(SolutionDir)..</AdditionalIncludeDirectories>\r\n    </ClCompile>\r\n    <Link>\r\n      <SubSystem>Console</SubSystem>\r\n      <GenerateDebugInformation>true</GenerateDebugInformation>\r\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r\n      <OptimizeReferences>true</OptimizeReferences>\r\n    </Link>\r\n  </ItemDefinitionGroup>\r\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">\r\n    <ClCompile>\r\n      <WarningLevel>Level3</WarningLevel>\r\n      <PrecompiledHeader>\r\n      </PrecompiledHeader>\r\n      <Optimization>MaxSpeed</Optimization>\r\n      <FunctionLevelLinking>true</FunctionLevelLinking>\r\n      <IntrinsicFunctions>true</IntrinsicFunctions>\r\n      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n      <AdditionalIncludeDirectories>$(SolutionDir)..</AdditionalIncludeDirectories>\r\n    </ClCompile>\r\n    <Link>\r\n      <SubSystem>Console</SubSystem>\r\n      <GenerateDebugInformation>true</GenerateDebugInformation>\r\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r\n      <OptimizeReferences>true</OptimizeReferences>\r\n    </Link>\r\n  </ItemDefinitionGroup>\r\n  <ItemGroup>\r\n    <ClCompile Include=\"..\\connectionpin03.cpp\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <ProjectReference Include=\"..\\..\\libavoid.vcxproj\">\r\n      <Project>{798c3d94-bf71-4c72-a29d-0e74c2eb296a}</Project>\r\n    </ProjectReference>\r\n  </ItemGroup>\r\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.targets\" />\r\n  <ImportGroup Label=\"ExtensionTargets\">\r\n  </ImportGroup>\r\n</Project>"
  },
  {
    "path": "cola/libavoid/tests/msctests/connendmove.vcxproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project DefaultTargets=\"Build\" ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n  <ItemGroup Label=\"ProjectConfigurations\">\r\n    <ProjectConfiguration Include=\"Debug|Win32\">\r\n      <Configuration>Debug</Configuration>\r\n      <Platform>Win32</Platform>\r\n    </ProjectConfiguration>\r\n    <ProjectConfiguration Include=\"Debug|x64\">\r\n      <Configuration>Debug</Configuration>\r\n      <Platform>x64</Platform>\r\n    </ProjectConfiguration>\r\n    <ProjectConfiguration Include=\"Release|Win32\">\r\n      <Configuration>Release</Configuration>\r\n      <Platform>Win32</Platform>\r\n    </ProjectConfiguration>\r\n    <ProjectConfiguration Include=\"Release|x64\">\r\n      <Configuration>Release</Configuration>\r\n      <Platform>x64</Platform>\r\n    </ProjectConfiguration>\r\n  </ItemGroup>\r\n  <PropertyGroup Label=\"Globals\">\r\n    <ProjectGuid>{980B4C23-428F-48A1-9111-40AA4777C246}</ProjectGuid>\r\n    <Keyword>Win32Proj</Keyword>\r\n    <RootNamespace>connendmove</RootNamespace>\r\n  </PropertyGroup>\r\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.Default.props\" />\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"Configuration\">\r\n    <ConfigurationType>Application</ConfigurationType>\r\n    <UseDebugLibraries>true</UseDebugLibraries>\r\n    <CharacterSet>Unicode</CharacterSet>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" Label=\"Configuration\">\r\n    <ConfigurationType>Application</ConfigurationType>\r\n    <UseDebugLibraries>true</UseDebugLibraries>\r\n    <CharacterSet>Unicode</CharacterSet>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"Configuration\">\r\n    <ConfigurationType>Application</ConfigurationType>\r\n    <UseDebugLibraries>false</UseDebugLibraries>\r\n    <WholeProgramOptimization>true</WholeProgramOptimization>\r\n    <CharacterSet>Unicode</CharacterSet>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" Label=\"Configuration\">\r\n    <ConfigurationType>Application</ConfigurationType>\r\n    <UseDebugLibraries>false</UseDebugLibraries>\r\n    <WholeProgramOptimization>true</WholeProgramOptimization>\r\n    <CharacterSet>Unicode</CharacterSet>\r\n  </PropertyGroup>\r\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.props\" />\r\n  <ImportGroup Label=\"ExtensionSettings\">\r\n  </ImportGroup>\r\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\r\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\r\n  </ImportGroup>\r\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" Label=\"PropertySheets\">\r\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\r\n  </ImportGroup>\r\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\r\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\r\n  </ImportGroup>\r\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" Label=\"PropertySheets\">\r\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\r\n  </ImportGroup>\r\n  <PropertyGroup Label=\"UserMacros\" />\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\r\n    <LinkIncremental>true</LinkIncremental>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">\r\n    <LinkIncremental>true</LinkIncremental>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\r\n    <LinkIncremental>false</LinkIncremental>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">\r\n    <LinkIncremental>false</LinkIncremental>\r\n  </PropertyGroup>\r\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\r\n    <ClCompile>\r\n      <PrecompiledHeader>\r\n      </PrecompiledHeader>\r\n      <WarningLevel>Level3</WarningLevel>\r\n      <Optimization>Disabled</Optimization>\r\n      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n      <AdditionalIncludeDirectories>$(SolutionDir)..</AdditionalIncludeDirectories>\r\n    </ClCompile>\r\n    <Link>\r\n      <SubSystem>Console</SubSystem>\r\n      <GenerateDebugInformation>true</GenerateDebugInformation>\r\n    </Link>\r\n  </ItemDefinitionGroup>\r\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">\r\n    <ClCompile>\r\n      <PrecompiledHeader>\r\n      </PrecompiledHeader>\r\n      <WarningLevel>Level3</WarningLevel>\r\n      <Optimization>Disabled</Optimization>\r\n      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n      <AdditionalIncludeDirectories>$(SolutionDir)..</AdditionalIncludeDirectories>\r\n    </ClCompile>\r\n    <Link>\r\n      <SubSystem>Console</SubSystem>\r\n      <GenerateDebugInformation>true</GenerateDebugInformation>\r\n    </Link>\r\n  </ItemDefinitionGroup>\r\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\r\n    <ClCompile>\r\n      <WarningLevel>Level3</WarningLevel>\r\n      <PrecompiledHeader>\r\n      </PrecompiledHeader>\r\n      <Optimization>MaxSpeed</Optimization>\r\n      <FunctionLevelLinking>true</FunctionLevelLinking>\r\n      <IntrinsicFunctions>true</IntrinsicFunctions>\r\n      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n      <AdditionalIncludeDirectories>$(SolutionDir)..</AdditionalIncludeDirectories>\r\n    </ClCompile>\r\n    <Link>\r\n      <SubSystem>Console</SubSystem>\r\n      <GenerateDebugInformation>true</GenerateDebugInformation>\r\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r\n      <OptimizeReferences>true</OptimizeReferences>\r\n    </Link>\r\n  </ItemDefinitionGroup>\r\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">\r\n    <ClCompile>\r\n      <WarningLevel>Level3</WarningLevel>\r\n      <PrecompiledHeader>\r\n      </PrecompiledHeader>\r\n      <Optimization>MaxSpeed</Optimization>\r\n      <FunctionLevelLinking>true</FunctionLevelLinking>\r\n      <IntrinsicFunctions>true</IntrinsicFunctions>\r\n      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n      <AdditionalIncludeDirectories>$(SolutionDir)..</AdditionalIncludeDirectories>\r\n    </ClCompile>\r\n    <Link>\r\n      <SubSystem>Console</SubSystem>\r\n      <GenerateDebugInformation>true</GenerateDebugInformation>\r\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r\n      <OptimizeReferences>true</OptimizeReferences>\r\n    </Link>\r\n  </ItemDefinitionGroup>\r\n  <ItemGroup>\r\n    <ClCompile Include=\"..\\connendmove.cpp\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <ProjectReference Include=\"..\\..\\libavoid.vcxproj\">\r\n      <Project>{798c3d94-bf71-4c72-a29d-0e74c2eb296a}</Project>\r\n    </ProjectReference>\r\n  </ItemGroup>\r\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.targets\" />\r\n  <ImportGroup Label=\"ExtensionTargets\">\r\n  </ImportGroup>\r\n</Project>"
  },
  {
    "path": "cola/libavoid/tests/msctests/corneroverlap01.vcxproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project DefaultTargets=\"Build\" ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n  <ItemGroup Label=\"ProjectConfigurations\">\r\n    <ProjectConfiguration Include=\"Debug|Win32\">\r\n      <Configuration>Debug</Configuration>\r\n      <Platform>Win32</Platform>\r\n    </ProjectConfiguration>\r\n    <ProjectConfiguration Include=\"Debug|x64\">\r\n      <Configuration>Debug</Configuration>\r\n      <Platform>x64</Platform>\r\n    </ProjectConfiguration>\r\n    <ProjectConfiguration Include=\"Release|Win32\">\r\n      <Configuration>Release</Configuration>\r\n      <Platform>Win32</Platform>\r\n    </ProjectConfiguration>\r\n    <ProjectConfiguration Include=\"Release|x64\">\r\n      <Configuration>Release</Configuration>\r\n      <Platform>x64</Platform>\r\n    </ProjectConfiguration>\r\n  </ItemGroup>\r\n  <PropertyGroup Label=\"Globals\">\r\n    <ProjectGuid>{8E4B6939-A58A-4DF0-B799-5662E25B7BAD}</ProjectGuid>\r\n    <Keyword>Win32Proj</Keyword>\r\n    <RootNamespace>corneroverlap01</RootNamespace>\r\n  </PropertyGroup>\r\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.Default.props\" />\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"Configuration\">\r\n    <ConfigurationType>Application</ConfigurationType>\r\n    <UseDebugLibraries>true</UseDebugLibraries>\r\n    <CharacterSet>Unicode</CharacterSet>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" Label=\"Configuration\">\r\n    <ConfigurationType>Application</ConfigurationType>\r\n    <UseDebugLibraries>true</UseDebugLibraries>\r\n    <CharacterSet>Unicode</CharacterSet>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"Configuration\">\r\n    <ConfigurationType>Application</ConfigurationType>\r\n    <UseDebugLibraries>false</UseDebugLibraries>\r\n    <WholeProgramOptimization>true</WholeProgramOptimization>\r\n    <CharacterSet>Unicode</CharacterSet>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" Label=\"Configuration\">\r\n    <ConfigurationType>Application</ConfigurationType>\r\n    <UseDebugLibraries>false</UseDebugLibraries>\r\n    <WholeProgramOptimization>true</WholeProgramOptimization>\r\n    <CharacterSet>Unicode</CharacterSet>\r\n  </PropertyGroup>\r\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.props\" />\r\n  <ImportGroup Label=\"ExtensionSettings\">\r\n  </ImportGroup>\r\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\r\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\r\n  </ImportGroup>\r\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" Label=\"PropertySheets\">\r\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\r\n  </ImportGroup>\r\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\r\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\r\n  </ImportGroup>\r\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" Label=\"PropertySheets\">\r\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\r\n  </ImportGroup>\r\n  <PropertyGroup Label=\"UserMacros\" />\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\r\n    <LinkIncremental>true</LinkIncremental>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">\r\n    <LinkIncremental>true</LinkIncremental>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\r\n    <LinkIncremental>false</LinkIncremental>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">\r\n    <LinkIncremental>false</LinkIncremental>\r\n  </PropertyGroup>\r\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\r\n    <ClCompile>\r\n      <PrecompiledHeader>\r\n      </PrecompiledHeader>\r\n      <WarningLevel>Level3</WarningLevel>\r\n      <Optimization>Disabled</Optimization>\r\n      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n      <AdditionalIncludeDirectories>$(SolutionDir)..</AdditionalIncludeDirectories>\r\n    </ClCompile>\r\n    <Link>\r\n      <SubSystem>Console</SubSystem>\r\n      <GenerateDebugInformation>true</GenerateDebugInformation>\r\n    </Link>\r\n  </ItemDefinitionGroup>\r\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">\r\n    <ClCompile>\r\n      <PrecompiledHeader>\r\n      </PrecompiledHeader>\r\n      <WarningLevel>Level3</WarningLevel>\r\n      <Optimization>Disabled</Optimization>\r\n      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n      <AdditionalIncludeDirectories>$(SolutionDir)..</AdditionalIncludeDirectories>\r\n    </ClCompile>\r\n    <Link>\r\n      <SubSystem>Console</SubSystem>\r\n      <GenerateDebugInformation>true</GenerateDebugInformation>\r\n    </Link>\r\n  </ItemDefinitionGroup>\r\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\r\n    <ClCompile>\r\n      <WarningLevel>Level3</WarningLevel>\r\n      <PrecompiledHeader>\r\n      </PrecompiledHeader>\r\n      <Optimization>MaxSpeed</Optimization>\r\n      <FunctionLevelLinking>true</FunctionLevelLinking>\r\n      <IntrinsicFunctions>true</IntrinsicFunctions>\r\n      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n      <AdditionalIncludeDirectories>$(SolutionDir)..</AdditionalIncludeDirectories>\r\n    </ClCompile>\r\n    <Link>\r\n      <SubSystem>Console</SubSystem>\r\n      <GenerateDebugInformation>true</GenerateDebugInformation>\r\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r\n      <OptimizeReferences>true</OptimizeReferences>\r\n    </Link>\r\n  </ItemDefinitionGroup>\r\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">\r\n    <ClCompile>\r\n      <WarningLevel>Level3</WarningLevel>\r\n      <PrecompiledHeader>\r\n      </PrecompiledHeader>\r\n      <Optimization>MaxSpeed</Optimization>\r\n      <FunctionLevelLinking>true</FunctionLevelLinking>\r\n      <IntrinsicFunctions>true</IntrinsicFunctions>\r\n      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n      <AdditionalIncludeDirectories>$(SolutionDir)..</AdditionalIncludeDirectories>\r\n    </ClCompile>\r\n    <Link>\r\n      <SubSystem>Console</SubSystem>\r\n      <GenerateDebugInformation>true</GenerateDebugInformation>\r\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r\n      <OptimizeReferences>true</OptimizeReferences>\r\n    </Link>\r\n  </ItemDefinitionGroup>\r\n  <ItemGroup>\r\n    <ClCompile Include=\"..\\corneroverlap01.cpp\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <ProjectReference Include=\"..\\..\\libavoid.vcxproj\">\r\n      <Project>{798c3d94-bf71-4c72-a29d-0e74c2eb296a}</Project>\r\n    </ProjectReference>\r\n  </ItemGroup>\r\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.targets\" />\r\n  <ImportGroup Label=\"ExtensionTargets\">\r\n  </ImportGroup>\r\n</Project>"
  },
  {
    "path": "cola/libavoid/tests/msctests/example.vcxproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project DefaultTargets=\"Build\" ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n  <ItemGroup Label=\"ProjectConfigurations\">\r\n    <ProjectConfiguration Include=\"Debug|Win32\">\r\n      <Configuration>Debug</Configuration>\r\n      <Platform>Win32</Platform>\r\n    </ProjectConfiguration>\r\n    <ProjectConfiguration Include=\"Debug|x64\">\r\n      <Configuration>Debug</Configuration>\r\n      <Platform>x64</Platform>\r\n    </ProjectConfiguration>\r\n    <ProjectConfiguration Include=\"Release|Win32\">\r\n      <Configuration>Release</Configuration>\r\n      <Platform>Win32</Platform>\r\n    </ProjectConfiguration>\r\n    <ProjectConfiguration Include=\"Release|x64\">\r\n      <Configuration>Release</Configuration>\r\n      <Platform>x64</Platform>\r\n    </ProjectConfiguration>\r\n  </ItemGroup>\r\n  <PropertyGroup Label=\"Globals\">\r\n    <ProjectGuid>{6943E11D-22DE-4F6A-A30E-C7D23681B507}</ProjectGuid>\r\n    <Keyword>Win32Proj</Keyword>\r\n    <RootNamespace>example</RootNamespace>\r\n  </PropertyGroup>\r\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.Default.props\" />\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"Configuration\">\r\n    <ConfigurationType>Application</ConfigurationType>\r\n    <UseDebugLibraries>true</UseDebugLibraries>\r\n    <CharacterSet>Unicode</CharacterSet>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" Label=\"Configuration\">\r\n    <ConfigurationType>Application</ConfigurationType>\r\n    <UseDebugLibraries>true</UseDebugLibraries>\r\n    <CharacterSet>Unicode</CharacterSet>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"Configuration\">\r\n    <ConfigurationType>Application</ConfigurationType>\r\n    <UseDebugLibraries>false</UseDebugLibraries>\r\n    <WholeProgramOptimization>true</WholeProgramOptimization>\r\n    <CharacterSet>Unicode</CharacterSet>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" Label=\"Configuration\">\r\n    <ConfigurationType>Application</ConfigurationType>\r\n    <UseDebugLibraries>false</UseDebugLibraries>\r\n    <WholeProgramOptimization>true</WholeProgramOptimization>\r\n    <CharacterSet>Unicode</CharacterSet>\r\n  </PropertyGroup>\r\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.props\" />\r\n  <ImportGroup Label=\"ExtensionSettings\">\r\n  </ImportGroup>\r\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\r\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\r\n  </ImportGroup>\r\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" Label=\"PropertySheets\">\r\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\r\n  </ImportGroup>\r\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\r\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\r\n  </ImportGroup>\r\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" Label=\"PropertySheets\">\r\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\r\n  </ImportGroup>\r\n  <PropertyGroup Label=\"UserMacros\" />\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\r\n    <LinkIncremental>true</LinkIncremental>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">\r\n    <LinkIncremental>true</LinkIncremental>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\r\n    <LinkIncremental>false</LinkIncremental>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">\r\n    <LinkIncremental>false</LinkIncremental>\r\n  </PropertyGroup>\r\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\r\n    <ClCompile>\r\n      <PrecompiledHeader>\r\n      </PrecompiledHeader>\r\n      <WarningLevel>Level3</WarningLevel>\r\n      <Optimization>Disabled</Optimization>\r\n      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n      <AdditionalIncludeDirectories>$(SolutionDir)..</AdditionalIncludeDirectories>\r\n    </ClCompile>\r\n    <Link>\r\n      <SubSystem>Console</SubSystem>\r\n      <GenerateDebugInformation>true</GenerateDebugInformation>\r\n    </Link>\r\n  </ItemDefinitionGroup>\r\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">\r\n    <ClCompile>\r\n      <PrecompiledHeader>\r\n      </PrecompiledHeader>\r\n      <WarningLevel>Level3</WarningLevel>\r\n      <Optimization>Disabled</Optimization>\r\n      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n      <AdditionalIncludeDirectories>$(SolutionDir)..</AdditionalIncludeDirectories>\r\n    </ClCompile>\r\n    <Link>\r\n      <SubSystem>Console</SubSystem>\r\n      <GenerateDebugInformation>true</GenerateDebugInformation>\r\n    </Link>\r\n  </ItemDefinitionGroup>\r\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\r\n    <ClCompile>\r\n      <WarningLevel>Level3</WarningLevel>\r\n      <PrecompiledHeader>\r\n      </PrecompiledHeader>\r\n      <Optimization>MaxSpeed</Optimization>\r\n      <FunctionLevelLinking>true</FunctionLevelLinking>\r\n      <IntrinsicFunctions>true</IntrinsicFunctions>\r\n      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n      <AdditionalIncludeDirectories>$(SolutionDir)..</AdditionalIncludeDirectories>\r\n    </ClCompile>\r\n    <Link>\r\n      <SubSystem>Console</SubSystem>\r\n      <GenerateDebugInformation>true</GenerateDebugInformation>\r\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r\n      <OptimizeReferences>true</OptimizeReferences>\r\n    </Link>\r\n  </ItemDefinitionGroup>\r\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">\r\n    <ClCompile>\r\n      <WarningLevel>Level3</WarningLevel>\r\n      <PrecompiledHeader>\r\n      </PrecompiledHeader>\r\n      <Optimization>MaxSpeed</Optimization>\r\n      <FunctionLevelLinking>true</FunctionLevelLinking>\r\n      <IntrinsicFunctions>true</IntrinsicFunctions>\r\n      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n      <AdditionalIncludeDirectories>$(SolutionDir)..</AdditionalIncludeDirectories>\r\n    </ClCompile>\r\n    <Link>\r\n      <SubSystem>Console</SubSystem>\r\n      <GenerateDebugInformation>true</GenerateDebugInformation>\r\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r\n      <OptimizeReferences>true</OptimizeReferences>\r\n    </Link>\r\n  </ItemDefinitionGroup>\r\n  <ItemGroup>\r\n    <ClCompile Include=\"..\\example.cpp\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <ProjectReference Include=\"..\\..\\libavoid.vcxproj\">\r\n      <Project>{798c3d94-bf71-4c72-a29d-0e74c2eb296a}</Project>\r\n    </ProjectReference>\r\n  </ItemGroup>\r\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.targets\" />\r\n  <ImportGroup Label=\"ExtensionTargets\">\r\n  </ImportGroup>\r\n</Project>"
  },
  {
    "path": "cola/libavoid/tests/msctests/finalSegmentNudging1.vcxproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project DefaultTargets=\"Build\" ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n  <ItemGroup Label=\"ProjectConfigurations\">\r\n    <ProjectConfiguration Include=\"Debug|Win32\">\r\n      <Configuration>Debug</Configuration>\r\n      <Platform>Win32</Platform>\r\n    </ProjectConfiguration>\r\n    <ProjectConfiguration Include=\"Debug|x64\">\r\n      <Configuration>Debug</Configuration>\r\n      <Platform>x64</Platform>\r\n    </ProjectConfiguration>\r\n    <ProjectConfiguration Include=\"Release|Win32\">\r\n      <Configuration>Release</Configuration>\r\n      <Platform>Win32</Platform>\r\n    </ProjectConfiguration>\r\n    <ProjectConfiguration Include=\"Release|x64\">\r\n      <Configuration>Release</Configuration>\r\n      <Platform>x64</Platform>\r\n    </ProjectConfiguration>\r\n  </ItemGroup>\r\n  <PropertyGroup Label=\"Globals\">\r\n    <ProjectGuid>{DDD617A0-FFE1-4C05-8144-06F637FB1C7B}</ProjectGuid>\r\n    <Keyword>Win32Proj</Keyword>\r\n    <RootNamespace>finalSegmentNudging1</RootNamespace>\r\n  </PropertyGroup>\r\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.Default.props\" />\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"Configuration\">\r\n    <ConfigurationType>Application</ConfigurationType>\r\n    <UseDebugLibraries>true</UseDebugLibraries>\r\n    <CharacterSet>Unicode</CharacterSet>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" Label=\"Configuration\">\r\n    <ConfigurationType>Application</ConfigurationType>\r\n    <UseDebugLibraries>true</UseDebugLibraries>\r\n    <CharacterSet>Unicode</CharacterSet>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"Configuration\">\r\n    <ConfigurationType>Application</ConfigurationType>\r\n    <UseDebugLibraries>false</UseDebugLibraries>\r\n    <WholeProgramOptimization>true</WholeProgramOptimization>\r\n    <CharacterSet>Unicode</CharacterSet>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" Label=\"Configuration\">\r\n    <ConfigurationType>Application</ConfigurationType>\r\n    <UseDebugLibraries>false</UseDebugLibraries>\r\n    <WholeProgramOptimization>true</WholeProgramOptimization>\r\n    <CharacterSet>Unicode</CharacterSet>\r\n  </PropertyGroup>\r\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.props\" />\r\n  <ImportGroup Label=\"ExtensionSettings\">\r\n  </ImportGroup>\r\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\r\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\r\n  </ImportGroup>\r\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" Label=\"PropertySheets\">\r\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\r\n  </ImportGroup>\r\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\r\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\r\n  </ImportGroup>\r\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" Label=\"PropertySheets\">\r\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\r\n  </ImportGroup>\r\n  <PropertyGroup Label=\"UserMacros\" />\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\r\n    <LinkIncremental>true</LinkIncremental>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">\r\n    <LinkIncremental>true</LinkIncremental>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\r\n    <LinkIncremental>false</LinkIncremental>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">\r\n    <LinkIncremental>false</LinkIncremental>\r\n  </PropertyGroup>\r\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\r\n    <ClCompile>\r\n      <PrecompiledHeader>\r\n      </PrecompiledHeader>\r\n      <WarningLevel>Level3</WarningLevel>\r\n      <Optimization>Disabled</Optimization>\r\n      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n      <AdditionalIncludeDirectories>$(SolutionDir)..</AdditionalIncludeDirectories>\r\n    </ClCompile>\r\n    <Link>\r\n      <SubSystem>Console</SubSystem>\r\n      <GenerateDebugInformation>true</GenerateDebugInformation>\r\n    </Link>\r\n  </ItemDefinitionGroup>\r\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">\r\n    <ClCompile>\r\n      <PrecompiledHeader>\r\n      </PrecompiledHeader>\r\n      <WarningLevel>Level3</WarningLevel>\r\n      <Optimization>Disabled</Optimization>\r\n      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n      <AdditionalIncludeDirectories>$(SolutionDir)..</AdditionalIncludeDirectories>\r\n    </ClCompile>\r\n    <Link>\r\n      <SubSystem>Console</SubSystem>\r\n      <GenerateDebugInformation>true</GenerateDebugInformation>\r\n    </Link>\r\n  </ItemDefinitionGroup>\r\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\r\n    <ClCompile>\r\n      <WarningLevel>Level3</WarningLevel>\r\n      <PrecompiledHeader>\r\n      </PrecompiledHeader>\r\n      <Optimization>MaxSpeed</Optimization>\r\n      <FunctionLevelLinking>true</FunctionLevelLinking>\r\n      <IntrinsicFunctions>true</IntrinsicFunctions>\r\n      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n      <AdditionalIncludeDirectories>$(SolutionDir)..</AdditionalIncludeDirectories>\r\n    </ClCompile>\r\n    <Link>\r\n      <SubSystem>Console</SubSystem>\r\n      <GenerateDebugInformation>true</GenerateDebugInformation>\r\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r\n      <OptimizeReferences>true</OptimizeReferences>\r\n    </Link>\r\n  </ItemDefinitionGroup>\r\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">\r\n    <ClCompile>\r\n      <WarningLevel>Level3</WarningLevel>\r\n      <PrecompiledHeader>\r\n      </PrecompiledHeader>\r\n      <Optimization>MaxSpeed</Optimization>\r\n      <FunctionLevelLinking>true</FunctionLevelLinking>\r\n      <IntrinsicFunctions>true</IntrinsicFunctions>\r\n      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n      <AdditionalIncludeDirectories>$(SolutionDir)..</AdditionalIncludeDirectories>\r\n    </ClCompile>\r\n    <Link>\r\n      <SubSystem>Console</SubSystem>\r\n      <GenerateDebugInformation>true</GenerateDebugInformation>\r\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r\n      <OptimizeReferences>true</OptimizeReferences>\r\n    </Link>\r\n  </ItemDefinitionGroup>\r\n  <ItemGroup>\r\n    <ClCompile Include=\"..\\finalSegmentNudging1.cpp\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <ProjectReference Include=\"..\\..\\libavoid.vcxproj\">\r\n      <Project>{798c3d94-bf71-4c72-a29d-0e74c2eb296a}</Project>\r\n    </ProjectReference>\r\n  </ItemGroup>\r\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.targets\" />\r\n  <ImportGroup Label=\"ExtensionTargets\">\r\n  </ImportGroup>\r\n</Project>"
  },
  {
    "path": "cola/libavoid/tests/msctests/finalSegmentNudging2.vcxproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project DefaultTargets=\"Build\" ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n  <ItemGroup Label=\"ProjectConfigurations\">\r\n    <ProjectConfiguration Include=\"Debug|Win32\">\r\n      <Configuration>Debug</Configuration>\r\n      <Platform>Win32</Platform>\r\n    </ProjectConfiguration>\r\n    <ProjectConfiguration Include=\"Debug|x64\">\r\n      <Configuration>Debug</Configuration>\r\n      <Platform>x64</Platform>\r\n    </ProjectConfiguration>\r\n    <ProjectConfiguration Include=\"Release|Win32\">\r\n      <Configuration>Release</Configuration>\r\n      <Platform>Win32</Platform>\r\n    </ProjectConfiguration>\r\n    <ProjectConfiguration Include=\"Release|x64\">\r\n      <Configuration>Release</Configuration>\r\n      <Platform>x64</Platform>\r\n    </ProjectConfiguration>\r\n  </ItemGroup>\r\n  <PropertyGroup Label=\"Globals\">\r\n    <ProjectGuid>{A5A5A67A-A961-4AA1-A248-196D91406169}</ProjectGuid>\r\n    <Keyword>Win32Proj</Keyword>\r\n    <RootNamespace>finalSegmentNudging2</RootNamespace>\r\n  </PropertyGroup>\r\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.Default.props\" />\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"Configuration\">\r\n    <ConfigurationType>Application</ConfigurationType>\r\n    <UseDebugLibraries>true</UseDebugLibraries>\r\n    <CharacterSet>Unicode</CharacterSet>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" Label=\"Configuration\">\r\n    <ConfigurationType>Application</ConfigurationType>\r\n    <UseDebugLibraries>true</UseDebugLibraries>\r\n    <CharacterSet>Unicode</CharacterSet>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"Configuration\">\r\n    <ConfigurationType>Application</ConfigurationType>\r\n    <UseDebugLibraries>false</UseDebugLibraries>\r\n    <WholeProgramOptimization>true</WholeProgramOptimization>\r\n    <CharacterSet>Unicode</CharacterSet>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" Label=\"Configuration\">\r\n    <ConfigurationType>Application</ConfigurationType>\r\n    <UseDebugLibraries>false</UseDebugLibraries>\r\n    <WholeProgramOptimization>true</WholeProgramOptimization>\r\n    <CharacterSet>Unicode</CharacterSet>\r\n  </PropertyGroup>\r\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.props\" />\r\n  <ImportGroup Label=\"ExtensionSettings\">\r\n  </ImportGroup>\r\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\r\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\r\n  </ImportGroup>\r\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" Label=\"PropertySheets\">\r\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\r\n  </ImportGroup>\r\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\r\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\r\n  </ImportGroup>\r\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" Label=\"PropertySheets\">\r\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\r\n  </ImportGroup>\r\n  <PropertyGroup Label=\"UserMacros\" />\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\r\n    <LinkIncremental>true</LinkIncremental>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">\r\n    <LinkIncremental>true</LinkIncremental>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\r\n    <LinkIncremental>false</LinkIncremental>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">\r\n    <LinkIncremental>false</LinkIncremental>\r\n  </PropertyGroup>\r\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\r\n    <ClCompile>\r\n      <PrecompiledHeader>\r\n      </PrecompiledHeader>\r\n      <WarningLevel>Level3</WarningLevel>\r\n      <Optimization>Disabled</Optimization>\r\n      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n      <AdditionalIncludeDirectories>$(SolutionDir)..</AdditionalIncludeDirectories>\r\n    </ClCompile>\r\n    <Link>\r\n      <SubSystem>Console</SubSystem>\r\n      <GenerateDebugInformation>true</GenerateDebugInformation>\r\n    </Link>\r\n  </ItemDefinitionGroup>\r\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">\r\n    <ClCompile>\r\n      <PrecompiledHeader>\r\n      </PrecompiledHeader>\r\n      <WarningLevel>Level3</WarningLevel>\r\n      <Optimization>Disabled</Optimization>\r\n      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n      <AdditionalIncludeDirectories>$(SolutionDir)..</AdditionalIncludeDirectories>\r\n    </ClCompile>\r\n    <Link>\r\n      <SubSystem>Console</SubSystem>\r\n      <GenerateDebugInformation>true</GenerateDebugInformation>\r\n    </Link>\r\n  </ItemDefinitionGroup>\r\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\r\n    <ClCompile>\r\n      <WarningLevel>Level3</WarningLevel>\r\n      <PrecompiledHeader>\r\n      </PrecompiledHeader>\r\n      <Optimization>MaxSpeed</Optimization>\r\n      <FunctionLevelLinking>true</FunctionLevelLinking>\r\n      <IntrinsicFunctions>true</IntrinsicFunctions>\r\n      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n      <AdditionalIncludeDirectories>$(SolutionDir)..</AdditionalIncludeDirectories>\r\n    </ClCompile>\r\n    <Link>\r\n      <SubSystem>Console</SubSystem>\r\n      <GenerateDebugInformation>true</GenerateDebugInformation>\r\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r\n      <OptimizeReferences>true</OptimizeReferences>\r\n    </Link>\r\n  </ItemDefinitionGroup>\r\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">\r\n    <ClCompile>\r\n      <WarningLevel>Level3</WarningLevel>\r\n      <PrecompiledHeader>\r\n      </PrecompiledHeader>\r\n      <Optimization>MaxSpeed</Optimization>\r\n      <FunctionLevelLinking>true</FunctionLevelLinking>\r\n      <IntrinsicFunctions>true</IntrinsicFunctions>\r\n      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n      <AdditionalIncludeDirectories>$(SolutionDir)..</AdditionalIncludeDirectories>\r\n    </ClCompile>\r\n    <Link>\r\n      <SubSystem>Console</SubSystem>\r\n      <GenerateDebugInformation>true</GenerateDebugInformation>\r\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r\n      <OptimizeReferences>true</OptimizeReferences>\r\n    </Link>\r\n  </ItemDefinitionGroup>\r\n  <ItemGroup>\r\n    <ClCompile Include=\"..\\finalSegmentNudging2.cpp\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <ProjectReference Include=\"..\\..\\libavoid.vcxproj\">\r\n      <Project>{798c3d94-bf71-4c72-a29d-0e74c2eb296a}</Project>\r\n    </ProjectReference>\r\n  </ItemGroup>\r\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.targets\" />\r\n  <ImportGroup Label=\"ExtensionTargets\">\r\n  </ImportGroup>\r\n</Project>"
  },
  {
    "path": "cola/libavoid/tests/msctests/finalSegmentNudging3.vcxproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project DefaultTargets=\"Build\" ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n  <ItemGroup Label=\"ProjectConfigurations\">\r\n    <ProjectConfiguration Include=\"Debug|Win32\">\r\n      <Configuration>Debug</Configuration>\r\n      <Platform>Win32</Platform>\r\n    </ProjectConfiguration>\r\n    <ProjectConfiguration Include=\"Debug|x64\">\r\n      <Configuration>Debug</Configuration>\r\n      <Platform>x64</Platform>\r\n    </ProjectConfiguration>\r\n    <ProjectConfiguration Include=\"Release|Win32\">\r\n      <Configuration>Release</Configuration>\r\n      <Platform>Win32</Platform>\r\n    </ProjectConfiguration>\r\n    <ProjectConfiguration Include=\"Release|x64\">\r\n      <Configuration>Release</Configuration>\r\n      <Platform>x64</Platform>\r\n    </ProjectConfiguration>\r\n  </ItemGroup>\r\n  <PropertyGroup Label=\"Globals\">\r\n    <ProjectGuid>{6C94F0E2-5A2C-4D6D-93FC-43B9A5A578AF}</ProjectGuid>\r\n    <Keyword>Win32Proj</Keyword>\r\n    <RootNamespace>finalSegmentNudging3</RootNamespace>\r\n  </PropertyGroup>\r\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.Default.props\" />\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"Configuration\">\r\n    <ConfigurationType>Application</ConfigurationType>\r\n    <UseDebugLibraries>true</UseDebugLibraries>\r\n    <CharacterSet>Unicode</CharacterSet>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" Label=\"Configuration\">\r\n    <ConfigurationType>Application</ConfigurationType>\r\n    <UseDebugLibraries>true</UseDebugLibraries>\r\n    <CharacterSet>Unicode</CharacterSet>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"Configuration\">\r\n    <ConfigurationType>Application</ConfigurationType>\r\n    <UseDebugLibraries>false</UseDebugLibraries>\r\n    <WholeProgramOptimization>true</WholeProgramOptimization>\r\n    <CharacterSet>Unicode</CharacterSet>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" Label=\"Configuration\">\r\n    <ConfigurationType>Application</ConfigurationType>\r\n    <UseDebugLibraries>false</UseDebugLibraries>\r\n    <WholeProgramOptimization>true</WholeProgramOptimization>\r\n    <CharacterSet>Unicode</CharacterSet>\r\n  </PropertyGroup>\r\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.props\" />\r\n  <ImportGroup Label=\"ExtensionSettings\">\r\n  </ImportGroup>\r\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\r\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\r\n  </ImportGroup>\r\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" Label=\"PropertySheets\">\r\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\r\n  </ImportGroup>\r\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\r\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\r\n  </ImportGroup>\r\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" Label=\"PropertySheets\">\r\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\r\n  </ImportGroup>\r\n  <PropertyGroup Label=\"UserMacros\" />\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\r\n    <LinkIncremental>true</LinkIncremental>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">\r\n    <LinkIncremental>true</LinkIncremental>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\r\n    <LinkIncremental>false</LinkIncremental>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">\r\n    <LinkIncremental>false</LinkIncremental>\r\n  </PropertyGroup>\r\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\r\n    <ClCompile>\r\n      <PrecompiledHeader>\r\n      </PrecompiledHeader>\r\n      <WarningLevel>Level3</WarningLevel>\r\n      <Optimization>Disabled</Optimization>\r\n      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n      <AdditionalIncludeDirectories>$(SolutionDir)..</AdditionalIncludeDirectories>\r\n    </ClCompile>\r\n    <Link>\r\n      <SubSystem>Console</SubSystem>\r\n      <GenerateDebugInformation>true</GenerateDebugInformation>\r\n    </Link>\r\n  </ItemDefinitionGroup>\r\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">\r\n    <ClCompile>\r\n      <PrecompiledHeader>\r\n      </PrecompiledHeader>\r\n      <WarningLevel>Level3</WarningLevel>\r\n      <Optimization>Disabled</Optimization>\r\n      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n      <AdditionalIncludeDirectories>$(SolutionDir)..</AdditionalIncludeDirectories>\r\n    </ClCompile>\r\n    <Link>\r\n      <SubSystem>Console</SubSystem>\r\n      <GenerateDebugInformation>true</GenerateDebugInformation>\r\n    </Link>\r\n  </ItemDefinitionGroup>\r\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\r\n    <ClCompile>\r\n      <WarningLevel>Level3</WarningLevel>\r\n      <PrecompiledHeader>\r\n      </PrecompiledHeader>\r\n      <Optimization>MaxSpeed</Optimization>\r\n      <FunctionLevelLinking>true</FunctionLevelLinking>\r\n      <IntrinsicFunctions>true</IntrinsicFunctions>\r\n      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n      <AdditionalIncludeDirectories>$(SolutionDir)..</AdditionalIncludeDirectories>\r\n    </ClCompile>\r\n    <Link>\r\n      <SubSystem>Console</SubSystem>\r\n      <GenerateDebugInformation>true</GenerateDebugInformation>\r\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r\n      <OptimizeReferences>true</OptimizeReferences>\r\n    </Link>\r\n  </ItemDefinitionGroup>\r\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">\r\n    <ClCompile>\r\n      <WarningLevel>Level3</WarningLevel>\r\n      <PrecompiledHeader>\r\n      </PrecompiledHeader>\r\n      <Optimization>MaxSpeed</Optimization>\r\n      <FunctionLevelLinking>true</FunctionLevelLinking>\r\n      <IntrinsicFunctions>true</IntrinsicFunctions>\r\n      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n      <AdditionalIncludeDirectories>$(SolutionDir)..</AdditionalIncludeDirectories>\r\n    </ClCompile>\r\n    <Link>\r\n      <SubSystem>Console</SubSystem>\r\n      <GenerateDebugInformation>true</GenerateDebugInformation>\r\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r\n      <OptimizeReferences>true</OptimizeReferences>\r\n    </Link>\r\n  </ItemDefinitionGroup>\r\n  <ItemGroup>\r\n    <ClCompile Include=\"..\\finalSegmentNudging3.cpp\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <ProjectReference Include=\"..\\..\\libavoid.vcxproj\">\r\n      <Project>{798c3d94-bf71-4c72-a29d-0e74c2eb296a}</Project>\r\n    </ProjectReference>\r\n  </ItemGroup>\r\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.targets\" />\r\n  <ImportGroup Label=\"ExtensionTargets\">\r\n  </ImportGroup>\r\n</Project>"
  },
  {
    "path": "cola/libavoid/tests/msctests/freeFloatingDirection01.vcxproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project DefaultTargets=\"Build\" ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n  <ItemGroup Label=\"ProjectConfigurations\">\r\n    <ProjectConfiguration Include=\"Debug|Win32\">\r\n      <Configuration>Debug</Configuration>\r\n      <Platform>Win32</Platform>\r\n    </ProjectConfiguration>\r\n    <ProjectConfiguration Include=\"Debug|x64\">\r\n      <Configuration>Debug</Configuration>\r\n      <Platform>x64</Platform>\r\n    </ProjectConfiguration>\r\n    <ProjectConfiguration Include=\"Release|Win32\">\r\n      <Configuration>Release</Configuration>\r\n      <Platform>Win32</Platform>\r\n    </ProjectConfiguration>\r\n    <ProjectConfiguration Include=\"Release|x64\">\r\n      <Configuration>Release</Configuration>\r\n      <Platform>x64</Platform>\r\n    </ProjectConfiguration>\r\n  </ItemGroup>\r\n  <PropertyGroup Label=\"Globals\">\r\n    <ProjectGuid>{8DB197B1-20B2-485D-B89E-D9A7674193BD}</ProjectGuid>\r\n    <Keyword>Win32Proj</Keyword>\r\n    <RootNamespace>freeFloatingDirection01</RootNamespace>\r\n  </PropertyGroup>\r\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.Default.props\" />\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"Configuration\">\r\n    <ConfigurationType>Application</ConfigurationType>\r\n    <UseDebugLibraries>true</UseDebugLibraries>\r\n    <CharacterSet>Unicode</CharacterSet>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" Label=\"Configuration\">\r\n    <ConfigurationType>Application</ConfigurationType>\r\n    <UseDebugLibraries>true</UseDebugLibraries>\r\n    <CharacterSet>Unicode</CharacterSet>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"Configuration\">\r\n    <ConfigurationType>Application</ConfigurationType>\r\n    <UseDebugLibraries>false</UseDebugLibraries>\r\n    <WholeProgramOptimization>true</WholeProgramOptimization>\r\n    <CharacterSet>Unicode</CharacterSet>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" Label=\"Configuration\">\r\n    <ConfigurationType>Application</ConfigurationType>\r\n    <UseDebugLibraries>false</UseDebugLibraries>\r\n    <WholeProgramOptimization>true</WholeProgramOptimization>\r\n    <CharacterSet>Unicode</CharacterSet>\r\n  </PropertyGroup>\r\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.props\" />\r\n  <ImportGroup Label=\"ExtensionSettings\">\r\n  </ImportGroup>\r\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\r\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\r\n  </ImportGroup>\r\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" Label=\"PropertySheets\">\r\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\r\n  </ImportGroup>\r\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\r\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\r\n  </ImportGroup>\r\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" Label=\"PropertySheets\">\r\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\r\n  </ImportGroup>\r\n  <PropertyGroup Label=\"UserMacros\" />\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\r\n    <LinkIncremental>true</LinkIncremental>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">\r\n    <LinkIncremental>true</LinkIncremental>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\r\n    <LinkIncremental>false</LinkIncremental>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">\r\n    <LinkIncremental>false</LinkIncremental>\r\n  </PropertyGroup>\r\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\r\n    <ClCompile>\r\n      <PrecompiledHeader>\r\n      </PrecompiledHeader>\r\n      <WarningLevel>Level3</WarningLevel>\r\n      <Optimization>Disabled</Optimization>\r\n      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n      <AdditionalIncludeDirectories>$(SolutionDir)..</AdditionalIncludeDirectories>\r\n    </ClCompile>\r\n    <Link>\r\n      <SubSystem>Console</SubSystem>\r\n      <GenerateDebugInformation>true</GenerateDebugInformation>\r\n    </Link>\r\n  </ItemDefinitionGroup>\r\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">\r\n    <ClCompile>\r\n      <PrecompiledHeader>\r\n      </PrecompiledHeader>\r\n      <WarningLevel>Level3</WarningLevel>\r\n      <Optimization>Disabled</Optimization>\r\n      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n      <AdditionalIncludeDirectories>$(SolutionDir)..</AdditionalIncludeDirectories>\r\n    </ClCompile>\r\n    <Link>\r\n      <SubSystem>Console</SubSystem>\r\n      <GenerateDebugInformation>true</GenerateDebugInformation>\r\n    </Link>\r\n  </ItemDefinitionGroup>\r\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\r\n    <ClCompile>\r\n      <WarningLevel>Level3</WarningLevel>\r\n      <PrecompiledHeader>\r\n      </PrecompiledHeader>\r\n      <Optimization>MaxSpeed</Optimization>\r\n      <FunctionLevelLinking>true</FunctionLevelLinking>\r\n      <IntrinsicFunctions>true</IntrinsicFunctions>\r\n      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n      <AdditionalIncludeDirectories>$(SolutionDir)..</AdditionalIncludeDirectories>\r\n    </ClCompile>\r\n    <Link>\r\n      <SubSystem>Console</SubSystem>\r\n      <GenerateDebugInformation>true</GenerateDebugInformation>\r\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r\n      <OptimizeReferences>true</OptimizeReferences>\r\n    </Link>\r\n  </ItemDefinitionGroup>\r\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">\r\n    <ClCompile>\r\n      <WarningLevel>Level3</WarningLevel>\r\n      <PrecompiledHeader>\r\n      </PrecompiledHeader>\r\n      <Optimization>MaxSpeed</Optimization>\r\n      <FunctionLevelLinking>true</FunctionLevelLinking>\r\n      <IntrinsicFunctions>true</IntrinsicFunctions>\r\n      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n      <AdditionalIncludeDirectories>$(SolutionDir)..</AdditionalIncludeDirectories>\r\n    </ClCompile>\r\n    <Link>\r\n      <SubSystem>Console</SubSystem>\r\n      <GenerateDebugInformation>true</GenerateDebugInformation>\r\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r\n      <OptimizeReferences>true</OptimizeReferences>\r\n    </Link>\r\n  </ItemDefinitionGroup>\r\n  <ItemGroup>\r\n    <ClCompile Include=\"..\\freeFloatingDirection01.cpp\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <ProjectReference Include=\"..\\..\\libavoid.vcxproj\">\r\n      <Project>{798c3d94-bf71-4c72-a29d-0e74c2eb296a}</Project>\r\n    </ProjectReference>\r\n  </ItemGroup>\r\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.targets\" />\r\n  <ImportGroup Label=\"ExtensionTargets\">\r\n  </ImportGroup>\r\n</Project>"
  },
  {
    "path": "cola/libavoid/tests/msctests/junction01.vcxproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project DefaultTargets=\"Build\" ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n  <ItemGroup Label=\"ProjectConfigurations\">\r\n    <ProjectConfiguration Include=\"Debug|Win32\">\r\n      <Configuration>Debug</Configuration>\r\n      <Platform>Win32</Platform>\r\n    </ProjectConfiguration>\r\n    <ProjectConfiguration Include=\"Debug|x64\">\r\n      <Configuration>Debug</Configuration>\r\n      <Platform>x64</Platform>\r\n    </ProjectConfiguration>\r\n    <ProjectConfiguration Include=\"Release|Win32\">\r\n      <Configuration>Release</Configuration>\r\n      <Platform>Win32</Platform>\r\n    </ProjectConfiguration>\r\n    <ProjectConfiguration Include=\"Release|x64\">\r\n      <Configuration>Release</Configuration>\r\n      <Platform>x64</Platform>\r\n    </ProjectConfiguration>\r\n  </ItemGroup>\r\n  <PropertyGroup Label=\"Globals\">\r\n    <ProjectGuid>{35D83117-8DA7-495E-A045-DFDC555227C8}</ProjectGuid>\r\n    <Keyword>Win32Proj</Keyword>\r\n    <RootNamespace>junction01</RootNamespace>\r\n  </PropertyGroup>\r\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.Default.props\" />\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"Configuration\">\r\n    <ConfigurationType>Application</ConfigurationType>\r\n    <UseDebugLibraries>true</UseDebugLibraries>\r\n    <CharacterSet>Unicode</CharacterSet>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" Label=\"Configuration\">\r\n    <ConfigurationType>Application</ConfigurationType>\r\n    <UseDebugLibraries>true</UseDebugLibraries>\r\n    <CharacterSet>Unicode</CharacterSet>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"Configuration\">\r\n    <ConfigurationType>Application</ConfigurationType>\r\n    <UseDebugLibraries>false</UseDebugLibraries>\r\n    <WholeProgramOptimization>true</WholeProgramOptimization>\r\n    <CharacterSet>Unicode</CharacterSet>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" Label=\"Configuration\">\r\n    <ConfigurationType>Application</ConfigurationType>\r\n    <UseDebugLibraries>false</UseDebugLibraries>\r\n    <WholeProgramOptimization>true</WholeProgramOptimization>\r\n    <CharacterSet>Unicode</CharacterSet>\r\n  </PropertyGroup>\r\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.props\" />\r\n  <ImportGroup Label=\"ExtensionSettings\">\r\n  </ImportGroup>\r\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\r\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\r\n  </ImportGroup>\r\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" Label=\"PropertySheets\">\r\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\r\n  </ImportGroup>\r\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\r\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\r\n  </ImportGroup>\r\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" Label=\"PropertySheets\">\r\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\r\n  </ImportGroup>\r\n  <PropertyGroup Label=\"UserMacros\" />\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\r\n    <LinkIncremental>true</LinkIncremental>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">\r\n    <LinkIncremental>true</LinkIncremental>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\r\n    <LinkIncremental>false</LinkIncremental>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">\r\n    <LinkIncremental>false</LinkIncremental>\r\n  </PropertyGroup>\r\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\r\n    <ClCompile>\r\n      <PrecompiledHeader>\r\n      </PrecompiledHeader>\r\n      <WarningLevel>Level3</WarningLevel>\r\n      <Optimization>Disabled</Optimization>\r\n      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n      <AdditionalIncludeDirectories>$(SolutionDir)..</AdditionalIncludeDirectories>\r\n    </ClCompile>\r\n    <Link>\r\n      <SubSystem>Console</SubSystem>\r\n      <GenerateDebugInformation>true</GenerateDebugInformation>\r\n    </Link>\r\n  </ItemDefinitionGroup>\r\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">\r\n    <ClCompile>\r\n      <PrecompiledHeader>\r\n      </PrecompiledHeader>\r\n      <WarningLevel>Level3</WarningLevel>\r\n      <Optimization>Disabled</Optimization>\r\n      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n      <AdditionalIncludeDirectories>$(SolutionDir)..</AdditionalIncludeDirectories>\r\n    </ClCompile>\r\n    <Link>\r\n      <SubSystem>Console</SubSystem>\r\n      <GenerateDebugInformation>true</GenerateDebugInformation>\r\n    </Link>\r\n  </ItemDefinitionGroup>\r\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\r\n    <ClCompile>\r\n      <WarningLevel>Level3</WarningLevel>\r\n      <PrecompiledHeader>\r\n      </PrecompiledHeader>\r\n      <Optimization>MaxSpeed</Optimization>\r\n      <FunctionLevelLinking>true</FunctionLevelLinking>\r\n      <IntrinsicFunctions>true</IntrinsicFunctions>\r\n      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n      <AdditionalIncludeDirectories>$(SolutionDir)..</AdditionalIncludeDirectories>\r\n    </ClCompile>\r\n    <Link>\r\n      <SubSystem>Console</SubSystem>\r\n      <GenerateDebugInformation>true</GenerateDebugInformation>\r\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r\n      <OptimizeReferences>true</OptimizeReferences>\r\n    </Link>\r\n  </ItemDefinitionGroup>\r\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">\r\n    <ClCompile>\r\n      <WarningLevel>Level3</WarningLevel>\r\n      <PrecompiledHeader>\r\n      </PrecompiledHeader>\r\n      <Optimization>MaxSpeed</Optimization>\r\n      <FunctionLevelLinking>true</FunctionLevelLinking>\r\n      <IntrinsicFunctions>true</IntrinsicFunctions>\r\n      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n      <AdditionalIncludeDirectories>$(SolutionDir)..</AdditionalIncludeDirectories>\r\n    </ClCompile>\r\n    <Link>\r\n      <SubSystem>Console</SubSystem>\r\n      <GenerateDebugInformation>true</GenerateDebugInformation>\r\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r\n      <OptimizeReferences>true</OptimizeReferences>\r\n    </Link>\r\n  </ItemDefinitionGroup>\r\n  <ItemGroup>\r\n    <ClCompile Include=\"..\\junction01.cpp\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <ProjectReference Include=\"..\\..\\libavoid.vcxproj\">\r\n      <Project>{798c3d94-bf71-4c72-a29d-0e74c2eb296a}</Project>\r\n    </ProjectReference>\r\n  </ItemGroup>\r\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.targets\" />\r\n  <ImportGroup Label=\"ExtensionTargets\">\r\n  </ImportGroup>\r\n</Project>"
  },
  {
    "path": "cola/libavoid/tests/multiconnact.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libavoid - Fast, Incremental, Object-avoiding Line Router\n * Copyright (C) 2004-2007  Michael Wybrow <mjwybrow@users.sourceforge.net>\n * Copyright (C) 2009  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * Licensees holding a valid commercial license may use this file in\n * accordance with the commercial license agreement provided with the \n * library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  \n *\n * Author(s):   Michael Wybrow <mjwybrow@users.sourceforge.net>\n*/\n\n#include \"libavoid/libavoid.h\"\n\n    \n\nstatic void connCallback(void *ptr)\n{\n    Avoid::ConnRef *connRef = (Avoid::ConnRef *) ptr; \n\n    printf(\"Connector %u needs rerouting!\\n\", connRef->id());\n\n    const Avoid::PolyLine& route = connRef->displayRoute();\n    printf(\"New path: \");\n    for (size_t i = 0; i < route.ps.size(); ++i) \n    {\n        printf(\"%s(%f, %f)\", (i > 0) ? \"-\" : \"\", \n                route.ps[i].x, route.ps[i].y);\n    }\n    printf(\"\\n\");\n}\n\n\nint main(void)\n{\n    Avoid::Router *router = new Avoid::Router(Avoid::OrthogonalRouting);\n    \n    Avoid::Point srcPt(0,400);\n    Avoid::Point dstPt(775,400);\n    Avoid::ConnRef *connRef = new Avoid::ConnRef(router, srcPt, dstPt);\n    connRef->setCallback(connCallback, connRef);\n\n    Avoid::Point srcPt2(775,625);\n    Avoid::Point dstPt2(350,475);\n    Avoid::ConnRef *connRef2 = new Avoid::ConnRef(router, srcPt2, dstPt2);\n    connRef2->setCallback(connCallback, connRef2);\n    \n    router->processTransaction();\n\n    printf(\"\\nShifting endpoint.\\n\");\n    connRef->setEndpoints(Avoid::Point(0,375), Avoid::Point(775,400));\n    connRef2->setEndpoints(Avoid::Point(775,625), Avoid::Point(350,450));\n    router->processTransaction();\n\n    printf(\"\\nShifting endpoint.\\n\");\n    connRef->setEndpoints(Avoid::Point(0,400), Avoid::Point(775,400));\n    connRef2->setEndpoints(Avoid::Point(775,625), Avoid::Point(350,475));\n    router->processTransaction();\n\n    delete router;\n    return 0;\n}\n\n"
  },
  {
    "path": "cola/libavoid/tests/node1.cpp",
    "content": "#include \"libavoid/libavoid.h\"\nusing namespace Avoid;\nint main(void) {\n    Router *router = new Router(\n            PolyLineRouting | OrthogonalRouting);\n    router->setRoutingPenalty((PenaltyType)0, 50);\n    router->setRoutingPenalty((PenaltyType)1, 0);\n    router->setRoutingPenalty((PenaltyType)2, 200);\n    router->setRoutingPenalty((PenaltyType)3, 4000);\n    //router->setRoutingPenalty((PenaltyType)4, 110);\n    router->setRoutingParameter(idealNudgingDistance, 25);\n\n    double buffer = 4;\n    Polygon poly342721632(4);\n    poly342721632.ps[0] = Point(51910, 50946);\n    poly342721632.ps[1] = Point(51910, 51004);\n    poly342721632.ps[2] = Point(51825, 51004);\n    poly342721632.ps[3] = Point(51825, 50946);\n    ShapeRef *shapeRef342721632 = new ShapeRef(router, poly342721632, 342721632);\n    new ShapeConnectionPin(shapeRef342721632, 1, \n            ATTACH_POS_LEFT, ATTACH_POS_CENTRE, true, buffer, ConnDirLeft);\n\n    Polygon poly807558175(4);\n    poly807558175.ps[0] = Point(51604, 51000);\n    poly807558175.ps[1] = Point(51604, 51085);\n    poly807558175.ps[2] = Point(51546, 51085);\n    poly807558175.ps[3] = Point(51546, 51000);\n    ShapeRef *shapeRef807558175 = new ShapeRef(router, poly807558175, 807558175);\n    new ShapeConnectionPin(shapeRef807558175, 1, \n\t    ATTACH_POS_CENTRE, ATTACH_POS_TOP, true, buffer, ConnDirNone);\n\n    Polygon poly404900496(4);\n    poly404900496.ps[0] = Point(51525, 50946);\n    poly404900496.ps[1] = Point(51525, 51004);\n    poly404900496.ps[2] = Point(51440, 51004);\n    poly404900496.ps[3] = Point(51440, 50946);\n    ShapeRef *shapeRef404900496 = new ShapeRef(router, poly404900496, 404900496);\n    new ShapeConnectionPin(shapeRef404900496, 1, \n\t    ATTACH_POS_RIGHT, ATTACH_POS_CENTRE, true, buffer, (ConnDirFlags) 8);\n\n    JunctionRef *junctionRef265539540 = new JunctionRef(router, Point(51625, 50950), 265539540);\n\n    ConnRef *connRef985644192 = new ConnRef(router, 985644192);\n    ConnEnd srcPt985644192(shapeRef404900496, 1);\n    connRef985644192->setSourceEndpoint(srcPt985644192);\n    ConnEnd dstPt985644192(junctionRef265539540);\n    connRef985644192->setDestEndpoint(dstPt985644192);\n    connRef985644192->setRoutingType((ConnType)2);\n\n    ConnRef *connRef467016913 = new ConnRef(router, 467016913);\n    ConnEnd srcPt467016913(junctionRef265539540);\n    connRef467016913->setSourceEndpoint(srcPt467016913);\n    ConnEnd dstPt467016913(shapeRef807558175, 1);\n    connRef467016913->setDestEndpoint(dstPt467016913);\n    connRef467016913->setRoutingType((ConnType)2);\n\n    ConnRef *connRef45740440 = new ConnRef(router, 45740440);\n    ConnEnd srcPt45740440(shapeRef342721632, 1);\n    connRef45740440->setSourceEndpoint(srcPt45740440);\n    ConnEnd dstPt45740440(junctionRef265539540);\n    connRef45740440->setDestEndpoint(dstPt45740440);\n    connRef45740440->setRoutingType((ConnType)2);\n\n    router->processTransaction();\n    router->outputDiagram(\"output/node1\");\n    delete router;\n    return 0;\n};\n"
  },
  {
    "path": "cola/libavoid/tests/nudgeCrossing01.cpp",
    "content": "// #00010\n//\n// Regression test to catch a crossing that could be intriduced during\n// nudging when the centring step could previously change the ordering\n// of some segments.  It now unifies them, rather than centring.\n//\n#include \"libavoid/libavoid.h\"\n#include \"libcola/cola.h\"\nusing namespace cola;\nusing namespace Avoid;\nint main(void) {\n    Router *router = new Router(\n            PolyLineRouting | OrthogonalRouting);\n    router->setRoutingParameter((RoutingParameter)0, 50);\n    router->setRoutingParameter((RoutingParameter)1, 0);\n    router->setRoutingParameter((RoutingParameter)2, 0);\n    router->setRoutingParameter((RoutingParameter)3, 4000);\n    router->setRoutingParameter((RoutingParameter)4, 0);\n    router->setRoutingParameter((RoutingParameter)5, 100);\n    router->setRoutingOption((RoutingOption)0, true);\n    router->setRoutingOption((RoutingOption)1, true);\n    router->setRoutingOption((RoutingOption)2, false);\n    router->setRoutingOption((RoutingOption)3, false);\n\n#if 0\n    Polygon poly1(4);\n    poly1.ps[0] = Point(1299.5, 855.5);\n    poly1.ps[1] = Point(1299.5, 887.5);\n    poly1.ps[2] = Point(1279.5, 887.5);\n    poly1.ps[3] = Point(1279.5, 855.5);\n    new ShapeRef(router, poly1, 1);\n\n    Polygon poly2(4);\n    poly2.ps[0] = Point(647.5, 2048.54);\n    poly2.ps[1] = Point(647.5, 2068.54);\n    poly2.ps[2] = Point(615.5, 2068.54);\n    poly2.ps[3] = Point(615.5, 2048.54);\n    new ShapeRef(router, poly2, 2);\n\n    Polygon poly3(4);\n    poly3.ps[0] = Point(282.5, 1914.17);\n    poly3.ps[1] = Point(282.5, 1946.17);\n    poly3.ps[2] = Point(262.5, 1946.17);\n    poly3.ps[3] = Point(262.5, 1914.17);\n    new ShapeRef(router, poly3, 3);\n\n    Polygon poly4(4);\n    poly4.ps[0] = Point(647.5, 2090.54);\n    poly4.ps[1] = Point(647.5, 2110.54);\n    poly4.ps[2] = Point(615.5, 2110.54);\n    poly4.ps[3] = Point(615.5, 2090.54);\n    new ShapeRef(router, poly4, 4);\n\n    Polygon poly5(4);\n    poly5.ps[0] = Point(282.5, 2048.54);\n    poly5.ps[1] = Point(282.5, 2110.54);\n    poly5.ps[2] = Point(220.5, 2110.54);\n    poly5.ps[3] = Point(220.5, 2048.54);\n    new ShapeRef(router, poly5, 5);\n\n    Polygon poly6(4);\n    poly6.ps[0] = Point(1731.5, 492);\n    poly6.ps[1] = Point(1731.5, 869);\n    poly6.ps[2] = Point(1509.5, 869);\n    poly6.ps[3] = Point(1509.5, 492);\n    new ShapeRef(router, poly6, 6);\n\n    Polygon poly7(4);\n    poly7.ps[0] = Point(1409.5, 45);\n    poly7.ps[1] = Point(1409.5, 219);\n    poly7.ps[2] = Point(1289.5, 219);\n    poly7.ps[3] = Point(1289.5, 45);\n    new ShapeRef(router, poly7, 7);\n\n    Polygon poly8(4);\n    poly8.ps[0] = Point(947.5, 2001.54);\n    poly8.ps[1] = Point(947.5, 2033.54);\n    poly8.ps[2] = Point(927.5, 2033.54);\n    poly8.ps[3] = Point(927.5, 2001.54);\n    new ShapeRef(router, poly8, 8);\n\n    Polygon poly9(4);\n    poly9.ps[0] = Point(1255.5, 1973.54);\n    poly9.ps[1] = Point(1255.5, 1993.54);\n    poly9.ps[2] = Point(1223.5, 1993.54);\n    poly9.ps[3] = Point(1223.5, 1973.54);\n    new ShapeRef(router, poly9, 9);\n\n    Polygon poly10(4);\n    poly10.ps[0] = Point(1255.5, 2048.54);\n    poly10.ps[1] = Point(1255.5, 2068.54);\n    poly10.ps[2] = Point(1223.5, 2068.54);\n    poly10.ps[3] = Point(1223.5, 2048.54);\n    new ShapeRef(router, poly10, 10);\n\n    Polygon poly11(4);\n    poly11.ps[0] = Point(1135.5, 1869.54);\n    poly11.ps[1] = Point(1135.5, 1889.54);\n    poly11.ps[2] = Point(1103.5, 1889.54);\n    poly11.ps[3] = Point(1103.5, 1869.54);\n    new ShapeRef(router, poly11, 11);\n\n    Polygon poly12(4);\n    poly12.ps[0] = Point(1129.5, 1782.17);\n    poly12.ps[1] = Point(1129.5, 1814.17);\n    poly12.ps[2] = Point(1109.5, 1814.17);\n    poly12.ps[3] = Point(1109.5, 1782.17);\n    new ShapeRef(router, poly12, 12);\n\n    Polygon poly13(4);\n    poly13.ps[0] = Point(829.5, 1859.17);\n    poly13.ps[1] = Point(829.5, 1879.17);\n    poly13.ps[2] = Point(797.5, 1879.17);\n    poly13.ps[3] = Point(797.5, 1859.17);\n    new ShapeRef(router, poly13, 13);\n\n    Polygon poly14(4);\n    poly14.ps[0] = Point(422.5, 1859.17);\n    poly14.ps[1] = Point(422.5, 1879.17);\n    poly14.ps[2] = Point(390.5, 1879.17);\n    poly14.ps[3] = Point(390.5, 1859.17);\n    new ShapeRef(router, poly14, 14);\n\n    Polygon poly15(4);\n    poly15.ps[0] = Point(1472.5, 1859.17);\n    poly15.ps[1] = Point(1472.5, 1879.17);\n    poly15.ps[2] = Point(1440.5, 1879.17);\n    poly15.ps[3] = Point(1440.5, 1859.17);\n    new ShapeRef(router, poly15, 15);\n\n    Polygon poly16(4);\n    poly16.ps[0] = Point(979.028, 1370.55);\n    poly16.ps[1] = Point(979.028, 1414.55);\n    poly16.ps[2] = Point(891.028, 1414.55);\n    poly16.ps[3] = Point(891.028, 1370.55);\n    new ShapeRef(router, poly16, 16);\n\n    Polygon poly17(4);\n    poly17.ps[0] = Point(1299.5, 1649.17);\n    poly17.ps[1] = Point(1299.5, 1681.17);\n    poly17.ps[2] = Point(1279.5, 1681.17);\n    poly17.ps[3] = Point(1279.5, 1649.17);\n    new ShapeRef(router, poly17, 17);\n\n    Polygon poly18(4);\n    poly18.ps[0] = Point(252, 1663.17);\n    poly18.ps[1] = Point(252, 1827.17);\n    poly18.ps[2] = Point(45, 1827.17);\n    poly18.ps[3] = Point(45, 1663.17);\n    new ShapeRef(router, poly18, 18);\n\n    Polygon poly19(4);\n    poly19.ps[0] = Point(1299.5, 1525.17);\n    poly19.ps[1] = Point(1299.5, 1557.17);\n    poly19.ps[2] = Point(1279.5, 1557.17);\n    poly19.ps[3] = Point(1279.5, 1525.17);\n    new ShapeRef(router, poly19, 19);\n\n    Polygon poly20(4);\n    poly20.ps[0] = Point(1299.5, 1401.17);\n    poly20.ps[1] = Point(1299.5, 1433.17);\n    poly20.ps[2] = Point(1279.5, 1433.17);\n    poly20.ps[3] = Point(1279.5, 1401.17);\n    new ShapeRef(router, poly20, 20);\n\n    Polygon poly21(4);\n    poly21.ps[0] = Point(1278.5, 1011.17);\n    poly21.ps[1] = Point(1278.5, 1043.17);\n    poly21.ps[2] = Point(1258.5, 1043.17);\n    poly21.ps[3] = Point(1258.5, 1011.17);\n    new ShapeRef(router, poly21, 21);\n\n    Polygon poly22(4);\n    poly22.ps[0] = Point(849, 1332.17);\n    poly22.ps[1] = Point(849, 1392.17);\n    poly22.ps[2] = Point(536, 1392.17);\n    poly22.ps[3] = Point(536, 1332.17);\n    new ShapeRef(router, poly22, 22);\n\n    Polygon poly23(4);\n    poly23.ps[0] = Point(1104.5, 956.167);\n    poly23.ps[1] = Point(1104.5, 976.167);\n    poly23.ps[2] = Point(1072.5, 976.167);\n    poly23.ps[3] = Point(1072.5, 956.167);\n    new ShapeRef(router, poly23, 23);\n\n    Polygon poly24(4);\n    poly24.ps[0] = Point(1278.5, 713.5);\n    poly24.ps[1] = Point(1278.5, 745.5);\n    poly24.ps[2] = Point(1258.5, 745.5);\n    poly24.ps[3] = Point(1258.5, 713.5);\n    new ShapeRef(router, poly24, 24);\n\n    Polygon poly25(4);\n    poly25.ps[0] = Point(1411.5, 713.5);\n    poly25.ps[1] = Point(1411.5, 745.5);\n    poly25.ps[2] = Point(1391.5, 745.5);\n    poly25.ps[3] = Point(1391.5, 713.5);\n    new ShapeRef(router, poly25, 25);\n\n    Polygon poly26(4);\n    poly26.ps[0] = Point(1441.5, 422.5);\n    poly26.ps[1] = Point(1441.5, 442.5);\n    poly26.ps[2] = Point(1409.5, 442.5);\n    poly26.ps[3] = Point(1409.5, 422.5);\n    new ShapeRef(router, poly26, 26);\n\n    Polygon poly27(4);\n    poly27.ps[0] = Point(1299.5, 535.25);\n    poly27.ps[1] = Point(1299.5, 567.25);\n    poly27.ps[2] = Point(1279.5, 567.25);\n    poly27.ps[3] = Point(1279.5, 535.25);\n    new ShapeRef(router, poly27, 27);\n\n    Polygon poly28(4);\n    poly28.ps[0] = Point(1299.5, 344);\n    poly28.ps[1] = Point(1299.5, 376);\n    poly28.ps[2] = Point(1279.5, 376);\n    poly28.ps[3] = Point(1279.5, 344);\n    new ShapeRef(router, poly28, 28);\n\n    Polygon poly29(4);\n    poly29.ps[0] = Point(1042.5, 628.75);\n    poly29.ps[1] = Point(1042.5, 648.75);\n    poly29.ps[2] = Point(1010.5, 648.75);\n    poly29.ps[3] = Point(1010.5, 628.75);\n    new ShapeRef(router, poly29, 29);\n\n    Polygon poly30(4);\n    poly30.ps[0] = Point(523.5, 532.75);\n    poly30.ps[1] = Point(523.5, 552.75);\n    poly30.ps[2] = Point(491.5, 552.75);\n    poly30.ps[3] = Point(491.5, 532.75);\n    new ShapeRef(router, poly30, 30);\n\n    Polygon poly31(4);\n    poly31.ps[0] = Point(523.5, 607.75);\n    poly31.ps[1] = Point(523.5, 627.75);\n    poly31.ps[2] = Point(491.5, 627.75);\n    poly31.ps[3] = Point(491.5, 607.75);\n    new ShapeRef(router, poly31, 31);\n\n    Polygon poly32(4);\n    poly32.ps[0] = Point(922.5, 541.25);\n    poly32.ps[1] = Point(922.5, 561.25);\n    poly32.ps[2] = Point(890.5, 561.25);\n    poly32.ps[3] = Point(890.5, 541.25);\n    new ShapeRef(router, poly32, 32);\n\n    Polygon poly33(4);\n    poly33.ps[0] = Point(761.5, 535.25);\n    poly33.ps[1] = Point(761.5, 567.25);\n    poly33.ps[2] = Point(741.5, 567.25);\n    poly33.ps[3] = Point(741.5, 535.25);\n    new ShapeRef(router, poly33, 33);\n\n    Polygon poly34(4);\n    poly34.ps[0] = Point(296.5, 535.25);\n    poly34.ps[1] = Point(296.5, 567.25);\n    poly34.ps[2] = Point(276.5, 567.25);\n    poly34.ps[3] = Point(276.5, 535.25);\n    new ShapeRef(router, poly34, 34);\n#endif\n\n    Polygon poly35(4);\n    poly35.ps[0] = Point(616.5, 285);\n    poly35.ps[1] = Point(616.5, 305);\n    poly35.ps[2] = Point(584.5, 305);\n    poly35.ps[3] = Point(584.5, 285);\n    new ShapeRef(router, poly35, 35);\n\n#if 0\n    Polygon poly36(4);\n    poly36.ps[0] = Point(616.5, 360);\n    poly36.ps[1] = Point(616.5, 380);\n    poly36.ps[2] = Point(584.5, 380);\n    poly36.ps[3] = Point(584.5, 360);\n    new ShapeRef(router, poly36, 36);\n\n    Polygon poly37(4);\n    poly37.ps[0] = Point(616.5, 552);\n    poly37.ps[1] = Point(616.5, 572);\n    poly37.ps[2] = Point(584.5, 572);\n    poly37.ps[3] = Point(584.5, 552);\n    new ShapeRef(router, poly37, 37);\n#endif\n\n    Polygon poly38(4);\n    poly38.ps[0] = Point(891.5, 331);\n    poly38.ps[1] = Point(891.5, 351);\n    poly38.ps[2] = Point(859.5, 351);\n    poly38.ps[3] = Point(859.5, 331);\n    new ShapeRef(router, poly38, 38);\n\n    Polygon poly39(4);\n    poly39.ps[0] = Point(891.5, 229);\n    poly39.ps[1] = Point(891.5, 249);\n    poly39.ps[2] = Point(859.5, 249);\n    poly39.ps[3] = Point(859.5, 229);\n    new ShapeRef(router, poly39, 39);\n\n#if 0\n    Polygon poly40(4);\n    poly40.ps[0] = Point(402, 96.5);\n    poly40.ps[1] = Point(402, 131.5);\n    poly40.ps[2] = Point(141, 131.5);\n    poly40.ps[3] = Point(141, 96.5);\n    new ShapeRef(router, poly40, 40);\n\n    Polygon poly41(4);\n    poly41.ps[0] = Point(554.5, 2002.21);\n    poly41.ps[1] = Point(554.5, 2022.21);\n    poly41.ps[2] = Point(522.5, 2022.21);\n    poly41.ps[3] = Point(522.5, 2002.21);\n    new ShapeRef(router, poly41, 41);\n\n    Polygon poly42(4);\n    poly42.ps[0] = Point(1299.5, 1247.17);\n    poly42.ps[1] = Point(1299.5, 1279.17);\n    poly42.ps[2] = Point(1279.5, 1279.17);\n    poly42.ps[3] = Point(1279.5, 1247.17);\n    new ShapeRef(router, poly42, 42);\n\n    Polygon poly43(4);\n    poly43.ps[0] = Point(616.5, 435);\n    poly43.ps[1] = Point(616.5, 455);\n    poly43.ps[2] = Point(584.5, 455);\n    poly43.ps[3] = Point(584.5, 435);\n    new ShapeRef(router, poly43, 43);\n\n    Polygon poly44(4);\n    poly44.ps[0] = Point(523.5, 649.75);\n    poly44.ps[1] = Point(523.5, 669.75);\n    poly44.ps[2] = Point(491.5, 669.75);\n    poly44.ps[3] = Point(491.5, 649.75);\n    new ShapeRef(router, poly44, 44);\n\n    Polygon poly45(4);\n    poly45.ps[0] = Point(302.5, 740.75);\n    poly45.ps[1] = Point(302.5, 760.75);\n    poly45.ps[2] = Point(270.5, 760.75);\n    poly45.ps[3] = Point(270.5, 740.75);\n    new ShapeRef(router, poly45, 45);\n\n    Polygon poly46(4);\n    poly46.ps[0] = Point(302.5, 842.75);\n    poly46.ps[1] = Point(302.5, 862.75);\n    poly46.ps[2] = Point(270.5, 862.75);\n    poly46.ps[3] = Point(270.5, 842.75);\n    new ShapeRef(router, poly46, 46);\n\n    Polygon poly47(4);\n    poly47.ps[0] = Point(678.5, 740.75);\n    poly47.ps[1] = Point(678.5, 760.75);\n    poly47.ps[2] = Point(646.5, 760.75);\n    poly47.ps[3] = Point(646.5, 740.75);\n    new ShapeRef(router, poly47, 47);\n\n    Polygon poly48(4);\n    poly48.ps[0] = Point(678.5, 842.75);\n    poly48.ps[1] = Point(678.5, 862.75);\n    poly48.ps[2] = Point(646.5, 862.75);\n    poly48.ps[3] = Point(646.5, 842.75);\n    new ShapeRef(router, poly48, 48);\n\n    Polygon poly49(4);\n    poly49.ps[0] = Point(1530.5, 401.5);\n    poly49.ps[1] = Point(1530.5, 463.5);\n    poly49.ps[2] = Point(1468.5, 463.5);\n    poly49.ps[3] = Point(1468.5, 401.5);\n    new ShapeRef(router, poly49, 49);\n\n    Polygon poly50(4);\n    poly50.ps[0] = Point(1320.5, 249);\n    poly50.ps[1] = Point(1320.5, 311);\n    poly50.ps[2] = Point(1258.5, 311);\n    poly50.ps[3] = Point(1258.5, 249);\n    new ShapeRef(router, poly50, 50);\n\n    Polygon poly51(4);\n    poly51.ps[0] = Point(1320.5, 1448.17);\n    poly51.ps[1] = Point(1320.5, 1510.17);\n    poly51.ps[2] = Point(1258.5, 1510.17);\n    poly51.ps[3] = Point(1258.5, 1448.17);\n    new ShapeRef(router, poly51, 51);\n#endif\n    Polygon poly52(4);\n    poly52.ps[0] = Point(317.5, 435);\n    poly52.ps[1] = Point(317.5, 497);\n    poly52.ps[2] = Point(255.5, 497);\n    poly52.ps[3] = Point(255.5, 435);\n    new ShapeRef(router, poly52, 52);\n#if 0\n    Polygon poly53(4);\n    poly53.ps[0] = Point(317.5, 607.75);\n    poly53.ps[1] = Point(317.5, 669.75);\n    poly53.ps[2] = Point(255.5, 669.75);\n    poly53.ps[3] = Point(255.5, 607.75);\n    new ShapeRef(router, poly53, 53);\n\n    Polygon poly54(4);\n    poly54.ps[0] = Point(875.5, 935.167);\n    poly54.ps[1] = Point(875.5, 997.167);\n    poly54.ps[2] = Point(813.5, 997.167);\n    poly54.ps[3] = Point(813.5, 935.167);\n    new ShapeRef(router, poly54, 54);\n\n    Polygon poly55(4);\n    poly55.ps[0] = Point(875.5, 607.75);\n    poly55.ps[1] = Point(875.5, 669.75);\n    poly55.ps[2] = Point(813.5, 669.75);\n    poly55.ps[3] = Point(813.5, 607.75);\n    new ShapeRef(router, poly55, 55);\n\n    Polygon poly56(4);\n    poly56.ps[0] = Point(1320.5, 435);\n    poly56.ps[1] = Point(1320.5, 497);\n    poly56.ps[2] = Point(1258.5, 497);\n    poly56.ps[3] = Point(1258.5, 435);\n    new ShapeRef(router, poly56, 56);\n\n    Polygon poly57(4);\n    poly57.ps[0] = Point(1320.5, 607.75);\n    poly57.ps[1] = Point(1320.5, 669.75);\n    poly57.ps[2] = Point(1258.5, 669.75);\n    poly57.ps[3] = Point(1258.5, 607.75);\n    new ShapeRef(router, poly57, 57);\n\n    Polygon poly58(4);\n    poly58.ps[0] = Point(1320.5, 1572.17);\n    poly58.ps[1] = Point(1320.5, 1634.17);\n    poly58.ps[2] = Point(1258.5, 1634.17);\n    poly58.ps[3] = Point(1258.5, 1572.17);\n    new ShapeRef(router, poly58, 58);\n\n    Polygon poly59(4);\n    poly59.ps[0] = Point(1320.5, 1324.17);\n    poly59.ps[1] = Point(1320.5, 1386.17);\n    poly59.ps[2] = Point(1258.5, 1386.17);\n    poly59.ps[3] = Point(1258.5, 1324.17);\n    new ShapeRef(router, poly59, 59);\n\n    Polygon poly60(4);\n    poly60.ps[0] = Point(1320.5, 1108.17);\n    poly60.ps[1] = Point(1320.5, 1170.17);\n    poly60.ps[2] = Point(1258.5, 1170.17);\n    poly60.ps[3] = Point(1258.5, 1108.17);\n    new ShapeRef(router, poly60, 60);\n\n    Polygon poly61(4);\n    poly61.ps[0] = Point(1561.5, 1838.17);\n    poly61.ps[1] = Point(1561.5, 1900.17);\n    poly61.ps[2] = Point(1499.5, 1900.17);\n    poly61.ps[3] = Point(1499.5, 1838.17);\n    new ShapeRef(router, poly61, 61);\n\n    Polygon poly62(4);\n    poly62.ps[0] = Point(813.5, 1981.21);\n    poly62.ps[1] = Point(813.5, 2043.21);\n    poly62.ps[2] = Point(751.5, 2043.21);\n    poly62.ps[3] = Point(751.5, 1981.21);\n    new ShapeRef(router, poly62, 62);\n\n    Polygon poly63(4);\n    poly63.ps[0] = Point(1456.5, 2048.54);\n    poly63.ps[1] = Point(1456.5, 2110.54);\n    poly63.ps[2] = Point(1394.5, 2110.54);\n    poly63.ps[3] = Point(1394.5, 2048.54);\n    new ShapeRef(router, poly63, 63);\n\n    Polygon poly64(4);\n    poly64.ps[0] = Point(1320.5, 1838.17);\n    poly64.ps[1] = Point(1320.5, 1900.17);\n    poly64.ps[2] = Point(1258.5, 1900.17);\n    poly64.ps[3] = Point(1258.5, 1838.17);\n    new ShapeRef(router, poly64, 64);\n\n    Polygon poly65(4);\n    poly65.ps[0] = Point(968.5, 1838.17);\n    poly65.ps[1] = Point(968.5, 1900.17);\n    poly65.ps[2] = Point(906.5, 1900.17);\n    poly65.ps[3] = Point(906.5, 1838.17);\n    new ShapeRef(router, poly65, 65);\n\n    Polygon poly66(4);\n    poly66.ps[0] = Point(282.5, 1838.17);\n    poly66.ps[1] = Point(282.5, 1900.17);\n    poly66.ps[2] = Point(220.5, 1900.17);\n    poly66.ps[3] = Point(220.5, 1838.17);\n    new ShapeRef(router, poly66, 66);\n\n    Polygon poly67(4);\n    poly67.ps[0] = Point(968.5, 2048.54);\n    poly67.ps[1] = Point(968.5, 2110.54);\n    poly67.ps[2] = Point(906.5, 2110.54);\n    poly67.ps[3] = Point(906.5, 2048.54);\n    new ShapeRef(router, poly67, 67);\n\n    Polygon poly68(4);\n    poly68.ps[0] = Point(600.5, 1838.17);\n    poly68.ps[1] = Point(600.5, 1900.17);\n    poly68.ps[2] = Point(538.5, 1900.17);\n    poly68.ps[3] = Point(538.5, 1838.17);\n    new ShapeRef(router, poly68, 68);\n\n    Polygon poly69(4);\n    poly69.ps[0] = Point(437.5, 1981.21);\n    poly69.ps[1] = Point(437.5, 2043.21);\n    poly69.ps[2] = Point(375.5, 2043.21);\n    poly69.ps[3] = Point(375.5, 1981.21);\n    new ShapeRef(router, poly69, 69);\n\n    Polygon poly70(4);\n    poly70.ps[0] = Point(1320.5, 759.5);\n    poly70.ps[1] = Point(1320.5, 821.5);\n    poly70.ps[2] = Point(1258.5, 821.5);\n    poly70.ps[3] = Point(1258.5, 759.5);\n    new ShapeRef(router, poly70, 70);\n\n    Polygon poly71(4);\n    poly71.ps[0] = Point(247.5, 719.75);\n    poly71.ps[1] = Point(247.5, 781.75);\n    poly71.ps[2] = Point(185.5, 781.75);\n    poly71.ps[3] = Point(185.5, 719.75);\n    new ShapeRef(router, poly71, 71);\n\n    Polygon poly72(4);\n    poly72.ps[0] = Point(468.5, 719.75);\n    poly72.ps[1] = Point(468.5, 781.75);\n    poly72.ps[2] = Point(406.5, 781.75);\n    poly72.ps[3] = Point(406.5, 719.75);\n    new ShapeRef(router, poly72, 72);\n\n    Polygon poly73(4);\n    poly73.ps[0] = Point(468.5, 821.75);\n    poly73.ps[1] = Point(468.5, 883.75);\n    poly73.ps[2] = Point(406.5, 883.75);\n    poly73.ps[3] = Point(406.5, 821.75);\n    new ShapeRef(router, poly73, 73);\n\n    Polygon poly74(4);\n    poly74.ps[0] = Point(247.5, 821.75);\n    poly74.ps[1] = Point(247.5, 883.75);\n    poly74.ps[2] = Point(185.5, 883.75);\n    poly74.ps[3] = Point(185.5, 821.75);\n    new ShapeRef(router, poly74, 74);\n\n    Polygon poly75(4);\n    poly75.ps[0] = Point(391.5, 1572.17);\n    poly75.ps[1] = Point(391.5, 1592.17);\n    poly75.ps[2] = Point(359.5, 1592.17);\n    poly75.ps[3] = Point(359.5, 1572.17);\n    new ShapeRef(router, poly75, 75);\n\n    Polygon poly76(4);\n    poly76.ps[0] = Point(282.5, 1572.17);\n    poly76.ps[1] = Point(282.5, 1634.17);\n    poly76.ps[2] = Point(220.5, 1634.17);\n    poly76.ps[3] = Point(220.5, 1572.17);\n    new ShapeRef(router, poly76, 76);\n\n    Polygon poly77(4);\n    poly77.ps[0] = Point(1255.5, 2090.54);\n    poly77.ps[1] = Point(1255.5, 2110.54);\n    poly77.ps[2] = Point(1223.5, 2110.54);\n    poly77.ps[3] = Point(1223.5, 2090.54);\n    new ShapeRef(router, poly77, 77);\n\n    Polygon poly78(4);\n    poly78.ps[0] = Point(391.5, 1614.17);\n    poly78.ps[1] = Point(391.5, 1634.17);\n    poly78.ps[2] = Point(359.5, 1634.17);\n    poly78.ps[3] = Point(359.5, 1614.17);\n    new ShapeRef(router, poly78, 78);\n\n    Polygon poly79(4);\n    poly79.ps[0] = Point(1604.5, 1943.04);\n    poly79.ps[1] = Point(1604.5, 2108.04);\n    poly79.ps[2] = Point(1467.5, 2108.04);\n    poly79.ps[3] = Point(1467.5, 1943.04);\n    new ShapeRef(router, poly79, 79);\n\n    Polygon poly80(4);\n    poly80.ps[0] = Point(1320.5, 1011.17);\n    poly80.ps[1] = Point(1320.5, 1043.17);\n    poly80.ps[2] = Point(1300.5, 1043.17);\n    poly80.ps[3] = Point(1300.5, 1011.17);\n    new ShapeRef(router, poly80, 80);\n\n    Polygon poly81(4);\n    poly81.ps[0] = Point(1406.5, 1185.17);\n    poly81.ps[1] = Point(1406.5, 1217.17);\n    poly81.ps[2] = Point(1386.5, 1217.17);\n    poly81.ps[3] = Point(1386.5, 1185.17);\n    new ShapeRef(router, poly81, 81);\n\n    Polygon poly82(4);\n    poly82.ps[0] = Point(1448.5, 1185.17);\n    poly82.ps[1] = Point(1448.5, 1217.17);\n    poly82.ps[2] = Point(1428.5, 1217.17);\n    poly82.ps[3] = Point(1428.5, 1185.17);\n    new ShapeRef(router, poly82, 82);\n\n    Polygon poly83(4);\n    poly83.ps[0] = Point(678.5, 1730.17);\n    poly83.ps[1] = Point(678.5, 1750.17);\n    poly83.ps[2] = Point(646.5, 1750.17);\n    poly83.ps[3] = Point(646.5, 1730.17);\n    new ShapeRef(router, poly83, 83);\n\n    Polygon poly84(4);\n    poly84.ps[0] = Point(1539.5, 1185.17);\n    poly84.ps[1] = Point(1539.5, 1217.17);\n    poly84.ps[2] = Point(1519.5, 1217.17);\n    poly84.ps[3] = Point(1519.5, 1185.17);\n    new ShapeRef(router, poly84, 84);\n\n    Polygon poly85(4);\n    poly85.ps[0] = Point(1088.5, 1232.17);\n    poly85.ps[1] = Point(1088.5, 1294.17);\n    poly85.ps[2] = Point(1026.5, 1294.17);\n    poly85.ps[3] = Point(1026.5, 1232.17);\n    new ShapeRef(router, poly85, 85);\n\n    Polygon poly86(4);\n    poly86.ps[0] = Point(1224.5, 1333.17);\n    poly86.ps[1] = Point(1224.5, 1353.17);\n    poly86.ps[2] = Point(1192.5, 1353.17);\n    poly86.ps[3] = Point(1192.5, 1333.17);\n    new ShapeRef(router, poly86, 86);\n\n    Polygon poly87(4);\n    poly87.ps[0] = Point(1224.5, 1129.17);\n    poly87.ps[1] = Point(1224.5, 1149.17);\n    poly87.ps[2] = Point(1192.5, 1149.17);\n    poly87.ps[3] = Point(1192.5, 1129.17);\n    new ShapeRef(router, poly87, 87);\n\n    Polygon poly88(4);\n    poly88.ps[0] = Point(1320.5, 935.167);\n    poly88.ps[1] = Point(1320.5, 997.167);\n    poly88.ps[2] = Point(1258.5, 997.167);\n    poly88.ps[3] = Point(1258.5, 935.167);\n    new ShapeRef(router, poly88, 88);\n\n    Polygon poly89(4);\n    poly89.ps[0] = Point(240.5, 1914.17);\n    poly89.ps[1] = Point(240.5, 1946.17);\n    poly89.ps[2] = Point(220.5, 1946.17);\n    poly89.ps[3] = Point(220.5, 1914.17);\n    new ShapeRef(router, poly89, 89);\n\n    Polygon poly90(4);\n    poly90.ps[0] = Point(1320.5, 713.5);\n    poly90.ps[1] = Point(1320.5, 745.5);\n    poly90.ps[2] = Point(1300.5, 745.5);\n    poly90.ps[3] = Point(1300.5, 713.5);\n    new ShapeRef(router, poly90, 90);\n\n    Polygon poly91(4);\n    poly91.ps[0] = Point(616.5, 477);\n    poly91.ps[1] = Point(616.5, 497);\n    poly91.ps[2] = Point(584.5, 497);\n    poly91.ps[3] = Point(584.5, 477);\n    new ShapeRef(router, poly91, 91);\n\n    Polygon poly92(4);\n    poly92.ps[0] = Point(523.5, 724.75);\n    poly92.ps[1] = Point(523.5, 744.75);\n    poly92.ps[2] = Point(491.5, 744.75);\n    poly92.ps[3] = Point(491.5, 724.75);\n    new ShapeRef(router, poly92, 92);\n\n    Polygon poly93(4);\n    poly93.ps[0] = Point(1255.5, 2165.54);\n    poly93.ps[1] = Point(1255.5, 2185.54);\n    poly93.ps[2] = Point(1223.5, 2185.54);\n    poly93.ps[3] = Point(1223.5, 2165.54);\n    new ShapeRef(router, poly93, 93);\n\n    Polygon poly94(4);\n    poly94.ps[0] = Point(968.5, 1734.17);\n    poly94.ps[1] = Point(968.5, 1796.17);\n    poly94.ps[2] = Point(906.5, 1796.17);\n    poly94.ps[3] = Point(906.5, 1734.17);\n    new ShapeRef(router, poly94, 94);\n\n    Polygon poly95(4);\n    poly95.ps[0] = Point(1375.5, 851.5);\n    poly95.ps[1] = Point(1375.5, 891.5);\n    poly95.ps[2] = Point(1299.5, 891.5);\n    poly95.ps[3] = Point(1299.5, 851.5);\n    new ShapeRef(router, poly95, 95);\n\n    Polygon poly96(4);\n    poly96.ps[0] = Point(659.5, 1988.54);\n    poly96.ps[1] = Point(659.5, 2048.54);\n    poly96.ps[2] = Point(603.5, 2048.54);\n    poly96.ps[3] = Point(603.5, 1988.54);\n    new ShapeRef(router, poly96, 96);\n\n    Polygon poly97(4);\n    poly97.ps[0] = Point(358.5, 1910.17);\n    poly97.ps[1] = Point(358.5, 1950.17);\n    poly97.ps[2] = Point(282.5, 1950.17);\n    poly97.ps[3] = Point(282.5, 1910.17);\n    new ShapeRef(router, poly97, 97);\n\n    Polygon poly98(4);\n    poly98.ps[0] = Point(659.5, 2110.54);\n    poly98.ps[1] = Point(659.5, 2170.54);\n    poly98.ps[2] = Point(603.5, 2170.54);\n    poly98.ps[3] = Point(603.5, 2110.54);\n    new ShapeRef(router, poly98, 98);\n\n    Polygon poly99(4);\n    poly99.ps[0] = Point(1023.5, 1997.54);\n    poly99.ps[1] = Point(1023.5, 2037.54);\n    poly99.ps[2] = Point(947.5, 2037.54);\n    poly99.ps[3] = Point(947.5, 1997.54);\n    new ShapeRef(router, poly99, 99);\n\n    Polygon poly100(4);\n    poly100.ps[0] = Point(1267.5, 1913.54);\n    poly100.ps[1] = Point(1267.5, 1973.54);\n    poly100.ps[2] = Point(1211.5, 1973.54);\n    poly100.ps[3] = Point(1211.5, 1913.54);\n    new ShapeRef(router, poly100, 100);\n\n    Polygon poly101(4);\n    poly101.ps[0] = Point(1267.5, 1988.54);\n    poly101.ps[1] = Point(1267.5, 2048.54);\n    poly101.ps[2] = Point(1211.5, 2048.54);\n    poly101.ps[3] = Point(1211.5, 1988.54);\n    new ShapeRef(router, poly101, 101);\n\n    Polygon poly102(4);\n    poly102.ps[0] = Point(1147.5, 1889.54);\n    poly102.ps[1] = Point(1147.5, 1949.54);\n    poly102.ps[2] = Point(1091.5, 1949.54);\n    poly102.ps[3] = Point(1091.5, 1889.54);\n    new ShapeRef(router, poly102, 102);\n\n    Polygon poly103(4);\n    poly103.ps[0] = Point(1205.5, 1778.17);\n    poly103.ps[1] = Point(1205.5, 1818.17);\n    poly103.ps[2] = Point(1129.5, 1818.17);\n    poly103.ps[3] = Point(1129.5, 1778.17);\n    new ShapeRef(router, poly103, 103);\n\n    Polygon poly104(4);\n    poly104.ps[0] = Point(841.5, 1799.17);\n    poly104.ps[1] = Point(841.5, 1859.17);\n    poly104.ps[2] = Point(785.5, 1859.17);\n    poly104.ps[3] = Point(785.5, 1799.17);\n    new ShapeRef(router, poly104, 104);\n\n    Polygon poly105(4);\n    poly105.ps[0] = Point(434.5, 1799.17);\n    poly105.ps[1] = Point(434.5, 1859.17);\n    poly105.ps[2] = Point(378.5, 1859.17);\n    poly105.ps[3] = Point(378.5, 1799.17);\n    new ShapeRef(router, poly105, 105);\n\n    Polygon poly106(4);\n    poly106.ps[0] = Point(1484.5, 1799.17);\n    poly106.ps[1] = Point(1484.5, 1859.17);\n    poly106.ps[2] = Point(1428.5, 1859.17);\n    poly106.ps[3] = Point(1428.5, 1799.17);\n    new ShapeRef(router, poly106, 106);\n\n    Polygon poly107(4);\n    poly107.ps[0] = Point(1375.5, 1645.17);\n    poly107.ps[1] = Point(1375.5, 1685.17);\n    poly107.ps[2] = Point(1299.5, 1685.17);\n    poly107.ps[3] = Point(1299.5, 1645.17);\n    new ShapeRef(router, poly107, 107);\n\n    Polygon poly108(4);\n    poly108.ps[0] = Point(1375.5, 1521.17);\n    poly108.ps[1] = Point(1375.5, 1561.17);\n    poly108.ps[2] = Point(1299.5, 1561.17);\n    poly108.ps[3] = Point(1299.5, 1521.17);\n    new ShapeRef(router, poly108, 108);\n\n    Polygon poly109(4);\n    poly109.ps[0] = Point(1375.5, 1397.17);\n    poly109.ps[1] = Point(1375.5, 1437.17);\n    poly109.ps[2] = Point(1299.5, 1437.17);\n    poly109.ps[3] = Point(1299.5, 1397.17);\n    new ShapeRef(router, poly109, 109);\n\n    Polygon poly110(4);\n    poly110.ps[0] = Point(1258.5, 1007.17);\n    poly110.ps[1] = Point(1258.5, 1047.17);\n    poly110.ps[2] = Point(1182.5, 1047.17);\n    poly110.ps[3] = Point(1182.5, 1007.17);\n    new ShapeRef(router, poly110, 110);\n\n    Polygon poly111(4);\n    poly111.ps[0] = Point(1116.5, 896.167);\n    poly111.ps[1] = Point(1116.5, 956.167);\n    poly111.ps[2] = Point(1060.5, 956.167);\n    poly111.ps[3] = Point(1060.5, 896.167);\n    new ShapeRef(router, poly111, 111);\n\n    Polygon poly112(4);\n    poly112.ps[0] = Point(1258.5, 709.5);\n    poly112.ps[1] = Point(1258.5, 749.5);\n    poly112.ps[2] = Point(1182.5, 749.5);\n    poly112.ps[3] = Point(1182.5, 709.5);\n    new ShapeRef(router, poly112, 112);\n\n    Polygon poly113(4);\n    poly113.ps[0] = Point(1487.5, 709.5);\n    poly113.ps[1] = Point(1487.5, 749.5);\n    poly113.ps[2] = Point(1411.5, 749.5);\n    poly113.ps[3] = Point(1411.5, 709.5);\n    new ShapeRef(router, poly113, 113);\n\n    Polygon poly114(4);\n    poly114.ps[0] = Point(1453.5, 362.5);\n    poly114.ps[1] = Point(1453.5, 422.5);\n    poly114.ps[2] = Point(1397.5, 422.5);\n    poly114.ps[3] = Point(1397.5, 362.5);\n    new ShapeRef(router, poly114, 114);\n\n    Polygon poly115(4);\n    poly115.ps[0] = Point(1375.5, 531.25);\n    poly115.ps[1] = Point(1375.5, 571.25);\n    poly115.ps[2] = Point(1299.5, 571.25);\n    poly115.ps[3] = Point(1299.5, 531.25);\n    new ShapeRef(router, poly115, 115);\n\n    Polygon poly116(4);\n    poly116.ps[0] = Point(1375.5, 340);\n    poly116.ps[1] = Point(1375.5, 380);\n    poly116.ps[2] = Point(1299.5, 380);\n    poly116.ps[3] = Point(1299.5, 340);\n    new ShapeRef(router, poly116, 116);\n\n    Polygon poly117(4);\n    poly117.ps[0] = Point(1054.5, 568.75);\n    poly117.ps[1] = Point(1054.5, 628.75);\n    poly117.ps[2] = Point(998.5, 628.75);\n    poly117.ps[3] = Point(998.5, 568.75);\n    new ShapeRef(router, poly117, 117);\n\n    Polygon poly118(4);\n    poly118.ps[0] = Point(535.5, 472.75);\n    poly118.ps[1] = Point(535.5, 532.75);\n    poly118.ps[2] = Point(479.5, 532.75);\n    poly118.ps[3] = Point(479.5, 472.75);\n    new ShapeRef(router, poly118, 118);\n\n    Polygon poly119(4);\n    poly119.ps[0] = Point(535.5, 547.75);\n    poly119.ps[1] = Point(535.5, 607.75);\n    poly119.ps[2] = Point(479.5, 607.75);\n    poly119.ps[3] = Point(479.5, 547.75);\n    new ShapeRef(router, poly119, 119);\n\n    Polygon poly120(4);\n    poly120.ps[0] = Point(934.5, 481.25);\n    poly120.ps[1] = Point(934.5, 541.25);\n    poly120.ps[2] = Point(878.5, 541.25);\n    poly120.ps[3] = Point(878.5, 481.25);\n    new ShapeRef(router, poly120, 120);\n\n    Polygon poly121(4);\n    poly121.ps[0] = Point(741.5, 531.25);\n    poly121.ps[1] = Point(741.5, 571.25);\n    poly121.ps[2] = Point(665.5, 571.25);\n    poly121.ps[3] = Point(665.5, 531.25);\n    new ShapeRef(router, poly121, 121);\n\n    Polygon poly122(4);\n    poly122.ps[0] = Point(372.5, 531.25);\n    poly122.ps[1] = Point(372.5, 571.25);\n    poly122.ps[2] = Point(296.5, 571.25);\n    poly122.ps[3] = Point(296.5, 531.25);\n    new ShapeRef(router, poly122, 122);\n#endif\n\n    Polygon poly123(4);\n    poly123.ps[0] = Point(628.5, 225);\n    poly123.ps[1] = Point(628.5, 285);\n    poly123.ps[2] = Point(572.5, 285);\n    poly123.ps[3] = Point(572.5, 225);\n    new ShapeRef(router, poly123, 123);\n\n#if 0\n    Polygon poly124(4);\n    poly124.ps[0] = Point(628.5, 300);\n    poly124.ps[1] = Point(628.5, 360);\n    poly124.ps[2] = Point(572.5, 360);\n    poly124.ps[3] = Point(572.5, 300);\n    new ShapeRef(router, poly124, 124);\n\n    Polygon poly125(4);\n    poly125.ps[0] = Point(628.5, 572);\n    poly125.ps[1] = Point(628.5, 632);\n    poly125.ps[2] = Point(572.5, 632);\n    poly125.ps[3] = Point(572.5, 572);\n    new ShapeRef(router, poly125, 125);\n\n    Polygon poly126(4);\n    poly126.ps[0] = Point(903.5, 271);\n    poly126.ps[1] = Point(903.5, 331);\n    poly126.ps[2] = Point(847.5, 331);\n    poly126.ps[3] = Point(847.5, 271);\n    new ShapeRef(router, poly126, 126);\n\n    Polygon poly127(4);\n    poly127.ps[0] = Point(903.5, 169);\n    poly127.ps[1] = Point(903.5, 229);\n    poly127.ps[2] = Point(847.5, 229);\n    poly127.ps[3] = Point(847.5, 169);\n    new ShapeRef(router, poly127, 127);\n\n    Polygon poly128(4);\n    poly128.ps[0] = Point(566.5, 1942.21);\n    poly128.ps[1] = Point(566.5, 2002.21);\n    poly128.ps[2] = Point(510.5, 2002.21);\n    poly128.ps[3] = Point(510.5, 1942.21);\n    new ShapeRef(router, poly128, 128);\n\n    Polygon poly129(4);\n    poly129.ps[0] = Point(1375.5, 1243.17);\n    poly129.ps[1] = Point(1375.5, 1283.17);\n    poly129.ps[2] = Point(1299.5, 1283.17);\n    poly129.ps[3] = Point(1299.5, 1243.17);\n    new ShapeRef(router, poly129, 129);\n\n    Polygon poly130(4);\n    poly130.ps[0] = Point(628.5, 375);\n    poly130.ps[1] = Point(628.5, 435);\n    poly130.ps[2] = Point(572.5, 435);\n    poly130.ps[3] = Point(572.5, 375);\n    new ShapeRef(router, poly130, 130);\n\n    Polygon poly131(4);\n    poly131.ps[0] = Point(535.5, 669.75);\n    poly131.ps[1] = Point(535.5, 729.75);\n    poly131.ps[2] = Point(479.5, 729.75);\n    poly131.ps[3] = Point(479.5, 669.75);\n    new ShapeRef(router, poly131, 131);\n\n    Polygon poly132(4);\n    poly132.ps[0] = Point(314.5, 680.75);\n    poly132.ps[1] = Point(314.5, 740.75);\n    poly132.ps[2] = Point(258.5, 740.75);\n    poly132.ps[3] = Point(258.5, 680.75);\n    new ShapeRef(router, poly132, 132);\n\n    Polygon poly133(4);\n    poly133.ps[0] = Point(314.5, 782.75);\n    poly133.ps[1] = Point(314.5, 842.75);\n    poly133.ps[2] = Point(258.5, 842.75);\n    poly133.ps[3] = Point(258.5, 782.75);\n    new ShapeRef(router, poly133, 133);\n\n    Polygon poly134(4);\n    poly134.ps[0] = Point(690.5, 680.75);\n    poly134.ps[1] = Point(690.5, 740.75);\n    poly134.ps[2] = Point(634.5, 740.75);\n    poly134.ps[3] = Point(634.5, 680.75);\n    new ShapeRef(router, poly134, 134);\n\n    Polygon poly135(4);\n    poly135.ps[0] = Point(690.5, 782.75);\n    poly135.ps[1] = Point(690.5, 842.75);\n    poly135.ps[2] = Point(634.5, 842.75);\n    poly135.ps[3] = Point(634.5, 782.75);\n    new ShapeRef(router, poly135, 135);\n\n    Polygon poly136(4);\n    poly136.ps[0] = Point(403.5, 1512.17);\n    poly136.ps[1] = Point(403.5, 1572.17);\n    poly136.ps[2] = Point(347.5, 1572.17);\n    poly136.ps[3] = Point(347.5, 1512.17);\n    new ShapeRef(router, poly136, 136);\n\n    Polygon poly137(4);\n    poly137.ps[0] = Point(1267.5, 2110.54);\n    poly137.ps[1] = Point(1267.5, 2170.54);\n    poly137.ps[2] = Point(1211.5, 2170.54);\n    poly137.ps[3] = Point(1211.5, 2110.54);\n    new ShapeRef(router, poly137, 137);\n\n    Polygon poly138(4);\n    poly138.ps[0] = Point(403.5, 1634.17);\n    poly138.ps[1] = Point(403.5, 1694.17);\n    poly138.ps[2] = Point(347.5, 1694.17);\n    poly138.ps[3] = Point(347.5, 1634.17);\n    new ShapeRef(router, poly138, 138);\n\n    Polygon poly139(4);\n    poly139.ps[0] = Point(1396.5, 1007.17);\n    poly139.ps[1] = Point(1396.5, 1047.17);\n    poly139.ps[2] = Point(1320.5, 1047.17);\n    poly139.ps[3] = Point(1320.5, 1007.17);\n    new ShapeRef(router, poly139, 139);\n\n    Polygon poly140(4);\n    poly140.ps[0] = Point(1386.5, 1181.17);\n    poly140.ps[1] = Point(1386.5, 1221.17);\n    poly140.ps[2] = Point(1310.5, 1221.17);\n    poly140.ps[3] = Point(1310.5, 1181.17);\n    new ShapeRef(router, poly140, 140);\n\n    Polygon poly141(4);\n    poly141.ps[0] = Point(1524.5, 1181.17);\n    poly141.ps[1] = Point(1524.5, 1221.17);\n    poly141.ps[2] = Point(1448.5, 1221.17);\n    poly141.ps[3] = Point(1448.5, 1181.17);\n    new ShapeRef(router, poly141, 141);\n\n    Polygon poly142(4);\n    poly142.ps[0] = Point(690.5, 1670.17);\n    poly142.ps[1] = Point(690.5, 1730.17);\n    poly142.ps[2] = Point(634.5, 1730.17);\n    poly142.ps[3] = Point(634.5, 1670.17);\n    new ShapeRef(router, poly142, 142);\n\n    Polygon poly143(4);\n    poly143.ps[0] = Point(1615.5, 1181.17);\n    poly143.ps[1] = Point(1615.5, 1221.17);\n    poly143.ps[2] = Point(1539.5, 1221.17);\n    poly143.ps[3] = Point(1539.5, 1181.17);\n    new ShapeRef(router, poly143, 143);\n\n    Polygon poly144(4);\n    poly144.ps[0] = Point(1236.5, 1273.17);\n    poly144.ps[1] = Point(1236.5, 1333.17);\n    poly144.ps[2] = Point(1180.5, 1333.17);\n    poly144.ps[3] = Point(1180.5, 1273.17);\n    new ShapeRef(router, poly144, 144);\n\n    Polygon poly145(4);\n    poly145.ps[0] = Point(1236.5, 1069.17);\n    poly145.ps[1] = Point(1236.5, 1129.17);\n    poly145.ps[2] = Point(1180.5, 1129.17);\n    poly145.ps[3] = Point(1180.5, 1069.17);\n    new ShapeRef(router, poly145, 145);\n\n    Polygon poly146(4);\n    poly146.ps[0] = Point(220.5, 1910.17);\n    poly146.ps[1] = Point(220.5, 1950.17);\n    poly146.ps[2] = Point(144.5, 1950.17);\n    poly146.ps[3] = Point(144.5, 1910.17);\n    new ShapeRef(router, poly146, 146);\n\n    Polygon poly147(4);\n    poly147.ps[0] = Point(1396.5, 709.5);\n    poly147.ps[1] = Point(1396.5, 749.5);\n    poly147.ps[2] = Point(1320.5, 749.5);\n    poly147.ps[3] = Point(1320.5, 709.5);\n    new ShapeRef(router, poly147, 147);\n\n    Polygon poly148(4);\n    poly148.ps[0] = Point(628.5, 497);\n    poly148.ps[1] = Point(628.5, 557);\n    poly148.ps[2] = Point(572.5, 557);\n    poly148.ps[3] = Point(572.5, 497);\n    new ShapeRef(router, poly148, 148);\n\n    Polygon poly149(4);\n    poly149.ps[0] = Point(535.5, 744.75);\n    poly149.ps[1] = Point(535.5, 804.75);\n    poly149.ps[2] = Point(479.5, 804.75);\n    poly149.ps[3] = Point(479.5, 744.75);\n    new ShapeRef(router, poly149, 149);\n\n    Polygon poly150(4);\n    poly150.ps[0] = Point(1267.5, 2185.54);\n    poly150.ps[1] = Point(1267.5, 2245.54);\n    poly150.ps[2] = Point(1211.5, 2245.54);\n    poly150.ps[3] = Point(1211.5, 2185.54);\n    new ShapeRef(router, poly150, 150);\n\n    Polygon poly151(4);\n    poly151.ps[0] = Point(1570, 641);\n    poly151.ps[1] = Point(1570, 681);\n    poly151.ps[2] = Point(1510, 681);\n    poly151.ps[3] = Point(1510, 641);\n    new ShapeRef(router, poly151, 151);\n\n    Polygon poly152(4);\n    poly152.ps[0] = Point(1570, 681);\n    poly152.ps[1] = Point(1570, 721);\n    poly152.ps[2] = Point(1510, 721);\n    poly152.ps[3] = Point(1510, 681);\n    new ShapeRef(router, poly152, 152);\n\n    Polygon poly153(4);\n    poly153.ps[0] = Point(1621, 809.5);\n    poly153.ps[1] = Point(1621, 869.5);\n    poly153.ps[2] = Point(1581, 869.5);\n    poly153.ps[3] = Point(1581, 809.5);\n    new ShapeRef(router, poly153, 153);\n\n    Polygon poly154(4);\n    poly154.ps[0] = Point(1661, 809.5);\n    poly154.ps[1] = Point(1661, 869.5);\n    poly154.ps[2] = Point(1621, 869.5);\n    poly154.ps[3] = Point(1621, 809.5);\n    new ShapeRef(router, poly154, 154);\n\n    Polygon poly155(4);\n    poly155.ps[0] = Point(1370, 159.5);\n    poly155.ps[1] = Point(1370, 219.5);\n    poly155.ps[2] = Point(1330, 219.5);\n    poly155.ps[3] = Point(1330, 159.5);\n    new ShapeRef(router, poly155, 155);\n\n    Polygon poly156(4);\n    poly156.ps[0] = Point(252.5, 1705.67);\n    poly156.ps[1] = Point(252.5, 1745.67);\n    poly156.ps[2] = Point(192.5, 1745.67);\n    poly156.ps[3] = Point(192.5, 1705.67);\n    new ShapeRef(router, poly156, 156);\n\n    Polygon poly157(4);\n    poly157.ps[0] = Point(252.5, 1745.67);\n    poly157.ps[1] = Point(252.5, 1785.67);\n    poly157.ps[2] = Point(192.5, 1785.67);\n    poly157.ps[3] = Point(192.5, 1745.67);\n    new ShapeRef(router, poly157, 157);\n\n    Polygon poly158(4);\n    poly158.ps[0] = Point(849.5, 1342.67);\n    poly158.ps[1] = Point(849.5, 1382.67);\n    poly158.ps[2] = Point(789.5, 1382.67);\n    poly158.ps[3] = Point(789.5, 1342.67);\n    new ShapeRef(router, poly158, 158);\n\n    Polygon poly159(4);\n    poly159.ps[0] = Point(1556.5, 1943.54);\n    poly159.ps[1] = Point(1556.5, 2003.54);\n    poly159.ps[2] = Point(1516.5, 2003.54);\n    poly159.ps[3] = Point(1516.5, 1943.54);\n    new ShapeRef(router, poly159, 159);\n\n    Polygon poly160(4);\n    poly160.ps[0] = Point(661.5, 2058.54);\n    poly160.ps[1] = Point(661.5, 2100.54);\n    poly160.ps[2] = Point(593.5, 2100.54);\n    poly160.ps[3] = Point(593.5, 2058.54);\n    new ShapeRef(router, poly160, 160);\n\n    Polygon poly161(4);\n    poly161.ps[0] = Point(272.5, 1900.17);\n    poly161.ps[1] = Point(272.5, 1960.17);\n    poly161.ps[2] = Point(230.5, 1960.17);\n    poly161.ps[3] = Point(230.5, 1900.17);\n    new ShapeRef(router, poly161, 161);\n#endif\n\n    Polygon poly162(4);\n    poly162.ps[0] = Point(630.5, 295);\n    poly162.ps[1] = Point(630.5, 562);\n    poly162.ps[2] = Point(562.5, 562);\n    poly162.ps[3] = Point(562.5, 295);\n    new ShapeRef(router, poly162, 162);\n\n    Polygon poly163(4);\n    poly163.ps[0] = Point(537.5, 542.75);\n    poly163.ps[1] = Point(537.5, 734.75);\n    poly163.ps[2] = Point(469.5, 734.75);\n    poly163.ps[3] = Point(469.5, 542.75);\n    new ShapeRef(router, poly163, 163);\n\n#if 0\n    Polygon poly164(4);\n    poly164.ps[0] = Point(1401.5, 699.5);\n    poly164.ps[1] = Point(1401.5, 759.5);\n    poly164.ps[2] = Point(1268.5, 759.5);\n    poly164.ps[3] = Point(1268.5, 699.5);\n    new ShapeRef(router, poly164, 164);\n\n    Polygon poly165(4);\n    poly165.ps[0] = Point(405.5, 1582.17);\n    poly165.ps[1] = Point(405.5, 1624.17);\n    poly165.ps[2] = Point(337.5, 1624.17);\n    poly165.ps[3] = Point(337.5, 1582.17);\n    new ShapeRef(router, poly165, 165);\n\n    Polygon poly166(4);\n    poly166.ps[0] = Point(1529.5, 1171.17);\n    poly166.ps[1] = Point(1529.5, 1231.17);\n    poly166.ps[2] = Point(1396.5, 1231.17);\n    poly166.ps[3] = Point(1396.5, 1171.17);\n    new ShapeRef(router, poly166, 166);\n\n    Polygon poly167(4);\n    poly167.ps[0] = Point(1310.5, 997.167);\n    poly167.ps[1] = Point(1310.5, 1057.17);\n    poly167.ps[2] = Point(1268.5, 1057.17);\n    poly167.ps[3] = Point(1268.5, 997.167);\n    new ShapeRef(router, poly167, 167);\n\n    Polygon poly168(4);\n    poly168.ps[0] = Point(1269.5, 1983.54);\n    poly168.ps[1] = Point(1269.5, 2175.54);\n    poly168.ps[2] = Point(1201.5, 2175.54);\n    poly168.ps[3] = Point(1201.5, 1983.54);\n    new ShapeRef(router, poly168, 168);\n\n    ConnRef *connRef169 = new ConnRef(router, 169);\n    ConnEnd srcPt169(Point(1289.5, 886.5), 2);\n    connRef169->setSourceEndpoint(srcPt169);\n    ConnEnd dstPt169(Point(844.5, 966.167), 15);\n    connRef169->setDestEndpoint(dstPt169);\n    connRef169->setRoutingType((ConnType)2);\n\n    ConnRef *connRef170 = new ConnRef(router, 170);\n    ConnEnd srcPt170(Point(1289.5, 856.5), 1);\n    connRef170->setSourceEndpoint(srcPt170);\n    ConnEnd dstPt170(Point(1289.5, 790.5), 15);\n    connRef170->setDestEndpoint(dstPt170);\n    connRef170->setRoutingType((ConnType)2);\n\n    ConnRef *connRef171 = new ConnRef(router, 171);\n    ConnEnd srcPt171(Point(1289.5, 886.5), 2);\n    connRef171->setSourceEndpoint(srcPt171);\n    ConnEnd dstPt171(Point(1289.5, 966.167), 15);\n    connRef171->setDestEndpoint(dstPt171);\n    connRef171->setRoutingType((ConnType)2);\n\n    ConnRef *connRef172 = new ConnRef(router, 172);\n    ConnEnd srcPt172(Point(616.5, 2058.54), 4);\n    connRef172->setSourceEndpoint(srcPt172);\n    ConnEnd dstPt172(Point(251.5, 2079.54), 15);\n    connRef172->setDestEndpoint(dstPt172);\n    connRef172->setRoutingType((ConnType)2);\n    std::vector<Point> checkpoints172(1);\n    checkpoints172[0] = Point(593.5, 2079.54);\n    connRef172->setRoutingCheckpoints(checkpoints172);\n\n    ConnRef *connRef173 = new ConnRef(router, 173);\n    ConnEnd srcPt173(Point(646.5, 2058.54), 8);\n    connRef173->setSourceEndpoint(srcPt173);\n    ConnEnd dstPt173(Point(937.5, 2079.54), 15);\n    connRef173->setDestEndpoint(dstPt173);\n    connRef173->setRoutingType((ConnType)2);\n    std::vector<Point> checkpoints173(1);\n    checkpoints173[0] = Point(669.5, 2079.54);\n    connRef173->setRoutingCheckpoints(checkpoints173);\n\n    ConnRef *connRef174 = new ConnRef(router, 174);\n    ConnEnd srcPt174(Point(272.5, 1945.17), 2);\n    connRef174->setSourceEndpoint(srcPt174);\n    ConnEnd dstPt174(Point(251.5, 2079.54), 15);\n    connRef174->setDestEndpoint(dstPt174);\n    connRef174->setRoutingType((ConnType)2);\n    std::vector<Point> checkpoints174(1);\n    checkpoints174[0] = Point(251.5, 1960.17);\n    connRef174->setRoutingCheckpoints(checkpoints174);\n\n    ConnRef *connRef175 = new ConnRef(router, 175);\n    ConnEnd srcPt175(Point(616.5, 2100.54), 4);\n    connRef175->setSourceEndpoint(srcPt175);\n    ConnEnd dstPt175(Point(251.5, 2079.54), 15);\n    connRef175->setDestEndpoint(dstPt175);\n    connRef175->setRoutingType((ConnType)2);\n    std::vector<Point> checkpoints175(1);\n    checkpoints175[0] = Point(593.5, 2079.54);\n    connRef175->setRoutingCheckpoints(checkpoints175);\n\n    ConnRef *connRef176 = new ConnRef(router, 176);\n    ConnEnd srcPt176(Point(646.5, 2100.54), 8);\n    connRef176->setSourceEndpoint(srcPt176);\n    ConnEnd dstPt176(Point(937.5, 2079.54), 15);\n    connRef176->setDestEndpoint(dstPt176);\n    connRef176->setRoutingType((ConnType)2);\n    std::vector<Point> checkpoints176(1);\n    checkpoints176[0] = Point(669.5, 2079.54);\n    connRef176->setRoutingCheckpoints(checkpoints176);\n\n    ConnRef *connRef177 = new ConnRef(router, 177);\n    ConnEnd srcPt177(Point(251.5, 2079.54), 15);\n    connRef177->setSourceEndpoint(srcPt177);\n    ConnEnd dstPt177(Point(230.5, 1945.17), 2);\n    connRef177->setDestEndpoint(dstPt177);\n    connRef177->setRoutingType((ConnType)2);\n    std::vector<Point> checkpoints177(1);\n    checkpoints177[0] = Point(251.5, 1960.17);\n    connRef177->setRoutingCheckpoints(checkpoints177);\n\n    ConnRef *connRef178 = new ConnRef(router, 178);\n    ConnEnd srcPt178(Point(937.5, 2032.54), 2);\n    connRef178->setSourceEndpoint(srcPt178);\n    ConnEnd dstPt178(Point(937.5, 2079.54), 15);\n    connRef178->setDestEndpoint(dstPt178);\n    connRef178->setRoutingType((ConnType)2);\n\n    ConnRef *connRef179 = new ConnRef(router, 179);\n    ConnEnd srcPt179(Point(1224.5, 1983.54), 4);\n    connRef179->setSourceEndpoint(srcPt179);\n    ConnEnd dstPt179(Point(937.5, 2079.54), 15);\n    connRef179->setDestEndpoint(dstPt179);\n    connRef179->setRoutingType((ConnType)2);\n    std::vector<Point> checkpoints179(1);\n    checkpoints179[0] = Point(1201.5, 2079.54);\n    connRef179->setRoutingCheckpoints(checkpoints179);\n\n    ConnRef *connRef180 = new ConnRef(router, 180);\n    ConnEnd srcPt180(Point(1224.5, 2058.54), 4);\n    connRef180->setSourceEndpoint(srcPt180);\n    ConnEnd dstPt180(Point(937.5, 2079.54), 15);\n    connRef180->setDestEndpoint(dstPt180);\n    connRef180->setRoutingType((ConnType)2);\n    std::vector<Point> checkpoints180(1);\n    checkpoints180[0] = Point(1201.5, 2079.54);\n    connRef180->setRoutingCheckpoints(checkpoints180);\n\n    ConnRef *connRef181 = new ConnRef(router, 181);\n    ConnEnd srcPt181(Point(1104.5, 1879.54), 4);\n    connRef181->setSourceEndpoint(srcPt181);\n    ConnEnd dstPt181(Point(937.5, 1869.17), 15);\n    connRef181->setDestEndpoint(dstPt181);\n    connRef181->setRoutingType((ConnType)2);\n\n    ConnRef *connRef182 = new ConnRef(router, 182);\n    ConnEnd srcPt182(Point(1119.5, 1813.17), 2);\n    connRef182->setSourceEndpoint(srcPt182);\n    ConnEnd dstPt182(Point(937.5, 1869.17), 15);\n    connRef182->setDestEndpoint(dstPt182);\n    connRef182->setRoutingType((ConnType)2);\n\n    ConnRef *connRef183 = new ConnRef(router, 183);\n    ConnEnd srcPt183(Point(798.5, 1869.17), 4);\n    connRef183->setSourceEndpoint(srcPt183);\n    ConnEnd dstPt183(Point(569.5, 1869.17), 15);\n    connRef183->setDestEndpoint(dstPt183);\n    connRef183->setRoutingType((ConnType)2);\n\n    ConnRef *connRef184 = new ConnRef(router, 184);\n    ConnEnd srcPt184(Point(798.5, 1869.17), 4);\n    connRef184->setSourceEndpoint(srcPt184);\n    ConnEnd dstPt184(Point(937.5, 1765.17), 15);\n    connRef184->setDestEndpoint(dstPt184);\n    connRef184->setRoutingType((ConnType)2);\n\n    ConnRef *connRef185 = new ConnRef(router, 185);\n    ConnEnd srcPt185(Point(391.5, 1869.17), 4);\n    connRef185->setSourceEndpoint(srcPt185);\n    ConnEnd dstPt185(Point(251.5, 1869.17), 15);\n    connRef185->setDestEndpoint(dstPt185);\n    connRef185->setRoutingType((ConnType)2);\n\n    ConnRef *connRef186 = new ConnRef(router, 186);\n    ConnEnd srcPt186(Point(421.5, 1869.17), 8);\n    connRef186->setSourceEndpoint(srcPt186);\n    ConnEnd dstPt186(Point(569.5, 1869.17), 15);\n    connRef186->setDestEndpoint(dstPt186);\n    connRef186->setRoutingType((ConnType)2);\n\n    ConnRef *connRef187 = new ConnRef(router, 187);\n    ConnEnd srcPt187(Point(391.5, 1869.17), 4);\n    connRef187->setSourceEndpoint(srcPt187);\n    ConnEnd dstPt187(Point(406.5, 2012.21), 15);\n    connRef187->setDestEndpoint(dstPt187);\n    connRef187->setRoutingType((ConnType)2);\n\n    ConnRef *connRef188 = new ConnRef(router, 188);\n    ConnEnd srcPt188(Point(1471.5, 1869.17), 8);\n    connRef188->setSourceEndpoint(srcPt188);\n    ConnEnd dstPt188(Point(1530.5, 1869.17), 15);\n    connRef188->setDestEndpoint(dstPt188);\n    connRef188->setRoutingType((ConnType)2);\n\n    ConnRef *connRef189 = new ConnRef(router, 189);\n    ConnEnd srcPt189(Point(1441.5, 1869.17), 4);\n    connRef189->setSourceEndpoint(srcPt189);\n    ConnEnd dstPt189(Point(1289.5, 1869.17), 15);\n    connRef189->setDestEndpoint(dstPt189);\n    connRef189->setRoutingType((ConnType)2);\n\n    ConnRef *connRef190 = new ConnRef(router, 190);\n    ConnEnd srcPt190(Point(1289.5, 1680.17), 2);\n    connRef190->setSourceEndpoint(srcPt190);\n    ConnEnd dstPt190(Point(1289.5, 1869.17), 15);\n    connRef190->setDestEndpoint(dstPt190);\n    connRef190->setRoutingType((ConnType)2);\n\n    ConnRef *connRef191 = new ConnRef(router, 191);\n    ConnEnd srcPt191(Point(1289.5, 1526.17), 1);\n    connRef191->setSourceEndpoint(srcPt191);\n    ConnEnd dstPt191(Point(1289.5, 1479.17), 15);\n    connRef191->setDestEndpoint(dstPt191);\n    connRef191->setRoutingType((ConnType)2);\n\n    ConnRef *connRef192 = new ConnRef(router, 192);\n    ConnEnd srcPt192(Point(1289.5, 1556.17), 2);\n    connRef192->setSourceEndpoint(srcPt192);\n    ConnEnd dstPt192(Point(1289.5, 1603.17), 15);\n    connRef192->setDestEndpoint(dstPt192);\n    connRef192->setRoutingType((ConnType)2);\n\n    ConnRef *connRef193 = new ConnRef(router, 193);\n    ConnEnd srcPt193(Point(1289.5, 1432.17), 2);\n    connRef193->setSourceEndpoint(srcPt193);\n    ConnEnd dstPt193(Point(1289.5, 1479.17), 15);\n    connRef193->setDestEndpoint(dstPt193);\n    connRef193->setRoutingType((ConnType)2);\n\n    ConnRef *connRef194 = new ConnRef(router, 194);\n    ConnEnd srcPt194(Point(1289.5, 1402.17), 1);\n    connRef194->setSourceEndpoint(srcPt194);\n    ConnEnd dstPt194(Point(1289.5, 1355.17), 15);\n    connRef194->setDestEndpoint(dstPt194);\n    connRef194->setRoutingType((ConnType)2);\n\n    ConnRef *connRef195 = new ConnRef(router, 195);\n    ConnEnd srcPt195(Point(1268.5, 1042.17), 2);\n    connRef195->setSourceEndpoint(srcPt195);\n    ConnEnd dstPt195(Point(1289.5, 1139.17), 15);\n    connRef195->setDestEndpoint(dstPt195);\n    connRef195->setRoutingType((ConnType)2);\n    std::vector<Point> checkpoints195(1);\n    checkpoints195[0] = Point(1289.5, 1057.17);\n    connRef195->setRoutingCheckpoints(checkpoints195);\n\n    ConnRef *connRef196 = new ConnRef(router, 196);\n    ConnEnd srcPt196(Point(1268.5, 1012.17), 1);\n    connRef196->setSourceEndpoint(srcPt196);\n    ConnEnd dstPt196(Point(1289.5, 966.167), 15);\n    connRef196->setDestEndpoint(dstPt196);\n    connRef196->setRoutingType((ConnType)2);\n    std::vector<Point> checkpoints196(1);\n    checkpoints196[0] = Point(1289.5, 997.167);\n    connRef196->setRoutingCheckpoints(checkpoints196);\n\n    ConnRef *connRef197 = new ConnRef(router, 197);\n    ConnEnd srcPt197(Point(1073.5, 966.167), 4);\n    connRef197->setSourceEndpoint(srcPt197);\n    ConnEnd dstPt197(Point(844.5, 966.167), 15);\n    connRef197->setDestEndpoint(dstPt197);\n    connRef197->setRoutingType((ConnType)2);\n\n    ConnRef *connRef198 = new ConnRef(router, 198);\n    ConnEnd srcPt198(Point(1103.5, 966.167), 8);\n    connRef198->setSourceEndpoint(srcPt198);\n    ConnEnd dstPt198(Point(1289.5, 966.167), 15);\n    connRef198->setDestEndpoint(dstPt198);\n    connRef198->setRoutingType((ConnType)2);\n\n    ConnRef *connRef199 = new ConnRef(router, 199);\n    ConnEnd srcPt199(Point(1268.5, 744.5), 2);\n    connRef199->setSourceEndpoint(srcPt199);\n    ConnEnd dstPt199(Point(1289.5, 790.5), 15);\n    connRef199->setDestEndpoint(dstPt199);\n    connRef199->setRoutingType((ConnType)2);\n    std::vector<Point> checkpoints199(1);\n    checkpoints199[0] = Point(1289.5, 759.5);\n    connRef199->setRoutingCheckpoints(checkpoints199);\n\n    ConnRef *connRef200 = new ConnRef(router, 200);\n    ConnEnd srcPt200(Point(1401.5, 714.5), 1);\n    connRef200->setSourceEndpoint(srcPt200);\n    ConnEnd dstPt200(Point(1289.5, 638.75), 15);\n    connRef200->setDestEndpoint(dstPt200);\n    connRef200->setRoutingType((ConnType)2);\n    std::vector<Point> checkpoints200(1);\n    checkpoints200[0] = Point(1289.5, 699.5);\n    connRef200->setRoutingCheckpoints(checkpoints200);\n\n    ConnRef *connRef201 = new ConnRef(router, 201);\n    ConnEnd srcPt201(Point(1410.5, 432.5), 4);\n    connRef201->setSourceEndpoint(srcPt201);\n    ConnEnd dstPt201(Point(1289.5, 466), 15);\n    connRef201->setDestEndpoint(dstPt201);\n    connRef201->setRoutingType((ConnType)2);\n\n    ConnRef *connRef202 = new ConnRef(router, 202);\n    ConnEnd srcPt202(Point(1289.5, 536.25), 1);\n    connRef202->setSourceEndpoint(srcPt202);\n    ConnEnd dstPt202(Point(1289.5, 466), 15);\n    connRef202->setDestEndpoint(dstPt202);\n    connRef202->setRoutingType((ConnType)2);\n\n    ConnRef *connRef203 = new ConnRef(router, 203);\n    ConnEnd srcPt203(Point(1289.5, 566.25), 2);\n    connRef203->setSourceEndpoint(srcPt203);\n    ConnEnd dstPt203(Point(1289.5, 638.75), 15);\n    connRef203->setDestEndpoint(dstPt203);\n    connRef203->setRoutingType((ConnType)2);\n\n    ConnRef *connRef204 = new ConnRef(router, 204);\n    ConnEnd srcPt204(Point(1289.5, 345), 1);\n    connRef204->setSourceEndpoint(srcPt204);\n    ConnEnd dstPt204(Point(1289.5, 280), 15);\n    connRef204->setDestEndpoint(dstPt204);\n    connRef204->setRoutingType((ConnType)2);\n\n    ConnRef *connRef205 = new ConnRef(router, 205);\n    ConnEnd srcPt205(Point(1289.5, 375), 2);\n    connRef205->setSourceEndpoint(srcPt205);\n    ConnEnd dstPt205(Point(1289.5, 466), 15);\n    connRef205->setDestEndpoint(dstPt205);\n    connRef205->setRoutingType((ConnType)2);\n\n    ConnRef *connRef206 = new ConnRef(router, 206);\n    ConnEnd srcPt206(Point(1011.5, 638.75), 4);\n    connRef206->setSourceEndpoint(srcPt206);\n    ConnEnd dstPt206(Point(844.5, 638.75), 15);\n    connRef206->setDestEndpoint(dstPt206);\n    connRef206->setRoutingType((ConnType)2);\n\n    ConnRef *connRef207 = new ConnRef(router, 207);\n    ConnEnd srcPt207(Point(1041.5, 638.75), 8);\n    connRef207->setSourceEndpoint(srcPt207);\n    ConnEnd dstPt207(Point(1289.5, 638.75), 15);\n    connRef207->setDestEndpoint(dstPt207);\n    connRef207->setRoutingType((ConnType)2);\n\n    ConnRef *connRef208 = new ConnRef(router, 208);\n    ConnEnd srcPt208(Point(522.5, 542.75), 8);\n    connRef208->setSourceEndpoint(srcPt208);\n    ConnEnd dstPt208(Point(844.5, 638.75), 15);\n    connRef208->setDestEndpoint(dstPt208);\n    connRef208->setRoutingType((ConnType)2);\n    std::vector<Point> checkpoints208(1);\n    checkpoints208[0] = Point(545.5, 638.75);\n    connRef208->setRoutingCheckpoints(checkpoints208);\n\n    ConnRef *connRef209 = new ConnRef(router, 209);\n    ConnEnd srcPt209(Point(522.5, 617.75), 8);\n    connRef209->setSourceEndpoint(srcPt209);\n    ConnEnd dstPt209(Point(844.5, 638.75), 15);\n    connRef209->setDestEndpoint(dstPt209);\n    connRef209->setRoutingType((ConnType)2);\n    std::vector<Point> checkpoints209(1);\n    checkpoints209[0] = Point(545.5, 638.75);\n    connRef209->setRoutingCheckpoints(checkpoints209);\n\n    ConnRef *connRef210 = new ConnRef(router, 210);\n    ConnEnd srcPt210(Point(891.5, 551.25), 4);\n    connRef210->setSourceEndpoint(srcPt210);\n    ConnEnd dstPt210(Point(844.5, 638.75), 15);\n    connRef210->setDestEndpoint(dstPt210);\n    connRef210->setRoutingType((ConnType)2);\n\n    ConnRef *connRef211 = new ConnRef(router, 211);\n    ConnEnd srcPt211(Point(921.5, 551.25), 8);\n    connRef211->setSourceEndpoint(srcPt211);\n    ConnEnd dstPt211(Point(1289.5, 466), 15);\n    connRef211->setDestEndpoint(dstPt211);\n    connRef211->setRoutingType((ConnType)2);\n\n    ConnRef *connRef212 = new ConnRef(router, 212);\n    ConnEnd srcPt212(Point(751.5, 566.25), 2);\n    connRef212->setSourceEndpoint(srcPt212);\n    ConnEnd dstPt212(Point(844.5, 638.75), 15);\n    connRef212->setDestEndpoint(dstPt212);\n    connRef212->setRoutingType((ConnType)2);\n\n    ConnRef *connRef213 = new ConnRef(router, 213);\n    ConnEnd srcPt213(Point(751.5, 536.25), 1);\n    connRef213->setSourceEndpoint(srcPt213);\n    ConnEnd dstPt213(Point(1289.5, 466), 15);\n    connRef213->setDestEndpoint(dstPt213);\n    connRef213->setRoutingType((ConnType)2);\n\n    ConnRef *connRef214 = new ConnRef(router, 214);\n    ConnEnd srcPt214(Point(286.5, 536.25), 1);\n    connRef214->setSourceEndpoint(srcPt214);\n    ConnEnd dstPt214(Point(286.5, 466), 15);\n    connRef214->setDestEndpoint(dstPt214);\n    connRef214->setRoutingType((ConnType)2);\n\n    ConnRef *connRef215 = new ConnRef(router, 215);\n    ConnEnd srcPt215(Point(286.5, 566.25), 2);\n    connRef215->setSourceEndpoint(srcPt215);\n    ConnEnd dstPt215(Point(286.5, 638.75), 15);\n    connRef215->setDestEndpoint(dstPt215);\n    connRef215->setRoutingType((ConnType)2);\n\n    ConnRef *connRef216 = new ConnRef(router, 216);\n    ConnEnd srcPt216(Point(615.5, 295), 8);\n    connRef216->setSourceEndpoint(srcPt216);\n    ConnEnd dstPt216(Point(1289.5, 466), 15);\n    connRef216->setDestEndpoint(dstPt216);\n    connRef216->setRoutingType((ConnType)2);\n    std::vector<Point> checkpoints216(1);\n    checkpoints216[0] = Point(638.5, 466);\n    connRef216->setRoutingCheckpoints(checkpoints216);\n\n    ConnRef *connRef217 = new ConnRef(router, 217);\n    ConnEnd srcPt217(Point(615.5, 370), 8);\n    connRef217->setSourceEndpoint(srcPt217);\n    ConnEnd dstPt217(Point(1289.5, 466), 15);\n    connRef217->setDestEndpoint(dstPt217);\n    connRef217->setRoutingType((ConnType)2);\n    std::vector<Point> checkpoints217(1);\n    checkpoints217[0] = Point(638.5, 466);\n    connRef217->setRoutingCheckpoints(checkpoints217);\n\n    ConnRef *connRef218 = new ConnRef(router, 218);\n    ConnEnd srcPt218(Point(585.5, 562), 4);\n    connRef218->setSourceEndpoint(srcPt218);\n    ConnEnd dstPt218(Point(286.5, 466), 15);\n    connRef218->setDestEndpoint(dstPt218);\n    connRef218->setRoutingType((ConnType)2);\n    std::vector<Point> checkpoints218(1);\n    checkpoints218[0] = Point(562.5, 466);\n    connRef218->setRoutingCheckpoints(checkpoints218);\n#endif\n\n    ConnRef *connRef219 = new ConnRef(router, 219);\n    ConnEnd srcPt219(Point(860.5, 341), 4);\n    connRef219->setSourceEndpoint(srcPt219);\n    ConnEnd dstPt219(Point(286.5, 466), 15);\n    connRef219->setDestEndpoint(dstPt219);\n    connRef219->setRoutingType((ConnType)2);\n\n    ConnRef *connRef220 = new ConnRef(router, 220);\n    ConnEnd srcPt220(Point(860.5, 239), 4);\n    connRef220->setSourceEndpoint(srcPt220);\n    ConnEnd dstPt220(Point(286.5, 466), 15);\n    connRef220->setDestEndpoint(dstPt220);\n    connRef220->setRoutingType((ConnType)2);\n\n#if 0\n    ConnRef *connRef221 = new ConnRef(router, 221);\n    ConnEnd srcPt221(Point(553.5, 2012.21), 8);\n    connRef221->setSourceEndpoint(srcPt221);\n    ConnEnd dstPt221(Point(782.5, 2012.21), 15);\n    connRef221->setDestEndpoint(dstPt221);\n    connRef221->setRoutingType((ConnType)2);\n\n    ConnRef *connRef222 = new ConnRef(router, 222);\n    ConnEnd srcPt222(Point(1289.5, 1278.17), 2);\n    connRef222->setSourceEndpoint(srcPt222);\n    ConnEnd dstPt222(Point(1289.5, 1355.17), 15);\n    connRef222->setDestEndpoint(dstPt222);\n    connRef222->setRoutingType((ConnType)2);\n\n    ConnRef *connRef223 = new ConnRef(router, 223);\n    ConnEnd srcPt223(Point(1289.5, 1248.17), 1);\n    connRef223->setSourceEndpoint(srcPt223);\n    ConnEnd dstPt223(Point(1289.5, 1139.17), 15);\n    connRef223->setDestEndpoint(dstPt223);\n    connRef223->setRoutingType((ConnType)2);\n\n    ConnRef *connRef224 = new ConnRef(router, 224);\n    ConnEnd srcPt224(Point(615.5, 445), 8);\n    connRef224->setSourceEndpoint(srcPt224);\n    ConnEnd dstPt224(Point(1289.5, 466), 15);\n    connRef224->setDestEndpoint(dstPt224);\n    connRef224->setRoutingType((ConnType)2);\n    std::vector<Point> checkpoints224(1);\n    checkpoints224[0] = Point(638.5, 466);\n    connRef224->setRoutingCheckpoints(checkpoints224);\n\n    ConnRef *connRef225 = new ConnRef(router, 225);\n    ConnEnd srcPt225(Point(522.5, 659.75), 8);\n    connRef225->setSourceEndpoint(srcPt225);\n    ConnEnd dstPt225(Point(844.5, 638.75), 15);\n    connRef225->setDestEndpoint(dstPt225);\n    connRef225->setRoutingType((ConnType)2);\n    std::vector<Point> checkpoints225(1);\n    checkpoints225[0] = Point(545.5, 638.75);\n    connRef225->setRoutingCheckpoints(checkpoints225);\n\n    ConnRef *connRef226 = new ConnRef(router, 226);\n    ConnEnd srcPt226(Point(301.5, 750.75), 8);\n    connRef226->setSourceEndpoint(srcPt226);\n    ConnEnd dstPt226(Point(437.5, 750.75), 15);\n    connRef226->setDestEndpoint(dstPt226);\n    connRef226->setRoutingType((ConnType)2);\n\n    ConnRef *connRef227 = new ConnRef(router, 227);\n    ConnEnd srcPt227(Point(301.5, 852.75), 8);\n    connRef227->setSourceEndpoint(srcPt227);\n    ConnEnd dstPt227(Point(437.5, 852.75), 15);\n    connRef227->setDestEndpoint(dstPt227);\n    connRef227->setRoutingType((ConnType)2);\n\n    ConnRef *connRef228 = new ConnRef(router, 228);\n    ConnEnd srcPt228(Point(677.5, 750.75), 8);\n    connRef228->setSourceEndpoint(srcPt228);\n    ConnEnd dstPt228(Point(844.5, 638.75), 15);\n    connRef228->setDestEndpoint(dstPt228);\n    connRef228->setRoutingType((ConnType)2);\n\n    ConnRef *connRef229 = new ConnRef(router, 229);\n    ConnEnd srcPt229(Point(677.5, 852.75), 8);\n    connRef229->setSourceEndpoint(srcPt229);\n    ConnEnd dstPt229(Point(844.5, 638.75), 15);\n    connRef229->setDestEndpoint(dstPt229);\n    connRef229->setRoutingType((ConnType)2);\n\n    ConnRef *connRef230 = new ConnRef(router, 230);\n    ConnEnd srcPt230(Point(1499.5, 432.5), 15);\n    connRef230->setSourceEndpoint(srcPt230);\n    ConnEnd dstPt230(Point(1440.5, 432.5), 8);\n    connRef230->setDestEndpoint(dstPt230);\n    connRef230->setRoutingType((ConnType)2);\n\n    ConnRef *connRef231 = new ConnRef(router, 231);\n    ConnEnd srcPt231(Point(286.5, 466), 15);\n    connRef231->setSourceEndpoint(srcPt231);\n    ConnEnd dstPt231(Point(585.5, 445), 4);\n    connRef231->setDestEndpoint(dstPt231);\n    connRef231->setRoutingType((ConnType)2);\n    std::vector<Point> checkpoints231(1);\n    checkpoints231[0] = Point(562.5, 466);\n    connRef231->setRoutingCheckpoints(checkpoints231);\n\n    ConnRef *connRef232 = new ConnRef(router, 232);\n    ConnEnd srcPt232(Point(286.5, 466), 15);\n    connRef232->setSourceEndpoint(srcPt232);\n    ConnEnd dstPt232(Point(585.5, 487), 4);\n    connRef232->setDestEndpoint(dstPt232);\n    connRef232->setRoutingType((ConnType)2);\n    std::vector<Point> checkpoints232(1);\n    checkpoints232[0] = Point(562.5, 466);\n    connRef232->setRoutingCheckpoints(checkpoints232);\n\n    ConnRef *connRef233 = new ConnRef(router, 233);\n    ConnEnd srcPt233(Point(286.5, 638.75), 15);\n    connRef233->setSourceEndpoint(srcPt233);\n    ConnEnd dstPt233(Point(492.5, 659.75), 4);\n    connRef233->setDestEndpoint(dstPt233);\n    connRef233->setRoutingType((ConnType)2);\n    std::vector<Point> checkpoints233(1);\n    checkpoints233[0] = Point(469.5, 638.75);\n    connRef233->setRoutingCheckpoints(checkpoints233);\n\n    ConnRef *connRef234 = new ConnRef(router, 234);\n    ConnEnd srcPt234(Point(492.5, 734.75), 4);\n    connRef234->setSourceEndpoint(srcPt234);\n    ConnEnd dstPt234(Point(286.5, 638.75), 15);\n    connRef234->setDestEndpoint(dstPt234);\n    connRef234->setRoutingType((ConnType)2);\n    std::vector<Point> checkpoints234(1);\n    checkpoints234[0] = Point(469.5, 638.75);\n    connRef234->setRoutingCheckpoints(checkpoints234);\n\n    ConnRef *connRef235 = new ConnRef(router, 235);\n    ConnEnd srcPt235(Point(522.5, 734.75), 8);\n    connRef235->setSourceEndpoint(srcPt235);\n    ConnEnd dstPt235(Point(844.5, 638.75), 15);\n    connRef235->setDestEndpoint(dstPt235);\n    connRef235->setRoutingType((ConnType)2);\n    std::vector<Point> checkpoints235(1);\n    checkpoints235[0] = Point(545.5, 638.75);\n    connRef235->setRoutingCheckpoints(checkpoints235);\n\n    ConnRef *connRef236 = new ConnRef(router, 236);\n    ConnEnd srcPt236(Point(1289.5, 638.75), 15);\n    connRef236->setSourceEndpoint(srcPt236);\n    ConnEnd dstPt236(Point(1310.5, 714.5), 1);\n    connRef236->setDestEndpoint(dstPt236);\n    connRef236->setRoutingType((ConnType)2);\n    std::vector<Point> checkpoints236(1);\n    checkpoints236[0] = Point(1289.5, 699.5);\n    connRef236->setRoutingCheckpoints(checkpoints236);\n\n    ConnRef *connRef237 = new ConnRef(router, 237);\n    ConnEnd srcPt237(Point(390.5, 1624.17), 8);\n    connRef237->setSourceEndpoint(srcPt237);\n    ConnEnd dstPt237(Point(1289.5, 1603.17), 15);\n    connRef237->setDestEndpoint(dstPt237);\n    connRef237->setRoutingType((ConnType)2);\n    std::vector<Point> checkpoints237(1);\n    checkpoints237[0] = Point(413.5, 1603.17);\n    connRef237->setRoutingCheckpoints(checkpoints237);\n\n    ConnRef *connRef238 = new ConnRef(router, 238);\n    ConnEnd srcPt238(Point(1396.5, 1216.17), 2);\n    connRef238->setSourceEndpoint(srcPt238);\n    ConnEnd dstPt238(Point(1289.5, 1355.17), 15);\n    connRef238->setDestEndpoint(dstPt238);\n    connRef238->setRoutingType((ConnType)2);\n    std::vector<Point> checkpoints238(1);\n    checkpoints238[0] = Point(1417.5, 1231.17);\n    connRef238->setRoutingCheckpoints(checkpoints238);\n\n    ConnRef *connRef239 = new ConnRef(router, 239);\n    ConnEnd srcPt239(Point(1438.5, 1216.17), 2);\n    connRef239->setSourceEndpoint(srcPt239);\n    ConnEnd dstPt239(Point(1289.5, 1355.17), 15);\n    connRef239->setDestEndpoint(dstPt239);\n    connRef239->setRoutingType((ConnType)2);\n    std::vector<Point> checkpoints239(1);\n    checkpoints239[0] = Point(1417.5, 1231.17);\n    connRef239->setRoutingCheckpoints(checkpoints239);\n\n    ConnRef *connRef240 = new ConnRef(router, 240);\n    ConnEnd srcPt240(Point(1529.5, 1216.17), 2);\n    connRef240->setSourceEndpoint(srcPt240);\n    ConnEnd dstPt240(Point(1289.5, 1355.17), 15);\n    connRef240->setDestEndpoint(dstPt240);\n    connRef240->setRoutingType((ConnType)2);\n    std::vector<Point> checkpoints240(1);\n    checkpoints240[0] = Point(1417.5, 1231.17);\n    connRef240->setRoutingCheckpoints(checkpoints240);\n\n    ConnRef *connRef241 = new ConnRef(router, 241);\n    ConnEnd srcPt241(Point(1310.5, 1042.17), 2);\n    connRef241->setSourceEndpoint(srcPt241);\n    ConnEnd dstPt241(Point(1289.5, 1139.17), 15);\n    connRef241->setDestEndpoint(dstPt241);\n    connRef241->setRoutingType((ConnType)2);\n    std::vector<Point> checkpoints241(1);\n    checkpoints241[0] = Point(1289.5, 1057.17);\n    connRef241->setRoutingCheckpoints(checkpoints241);\n\n    ConnRef *connRef242 = new ConnRef(router, 242);\n    ConnEnd srcPt242(Point(1223.5, 1139.17), 8);\n    connRef242->setSourceEndpoint(srcPt242);\n    ConnEnd dstPt242(Point(1289.5, 1139.17), 15);\n    connRef242->setDestEndpoint(dstPt242);\n    connRef242->setRoutingType((ConnType)2);\n\n    ConnRef *connRef243 = new ConnRef(router, 243);\n    ConnEnd srcPt243(Point(1254.5, 1983.54), 8);\n    connRef243->setSourceEndpoint(srcPt243);\n    ConnEnd dstPt243(Point(1425.5, 2079.54), 15);\n    connRef243->setDestEndpoint(dstPt243);\n    connRef243->setRoutingType((ConnType)2);\n    std::vector<Point> checkpoints243(1);\n    checkpoints243[0] = Point(1277.5, 2079.54);\n    connRef243->setRoutingCheckpoints(checkpoints243);\n\n    ConnRef *connRef244 = new ConnRef(router, 244);\n    ConnEnd srcPt244(Point(1254.5, 2058.54), 8);\n    connRef244->setSourceEndpoint(srcPt244);\n    ConnEnd dstPt244(Point(1425.5, 2079.54), 15);\n    connRef244->setDestEndpoint(dstPt244);\n    connRef244->setRoutingType((ConnType)2);\n    std::vector<Point> checkpoints244(1);\n    checkpoints244[0] = Point(1277.5, 2079.54);\n    connRef244->setRoutingCheckpoints(checkpoints244);\n\n    ConnRef *connRef245 = new ConnRef(router, 245);\n    ConnEnd srcPt245(Point(1254.5, 2100.54), 8);\n    connRef245->setSourceEndpoint(srcPt245);\n    ConnEnd dstPt245(Point(1425.5, 2079.54), 15);\n    connRef245->setDestEndpoint(dstPt245);\n    connRef245->setRoutingType((ConnType)2);\n    std::vector<Point> checkpoints245(1);\n    checkpoints245[0] = Point(1277.5, 2079.54);\n    connRef245->setRoutingCheckpoints(checkpoints245);\n\n    ConnRef *connRef246 = new ConnRef(router, 246);\n    ConnEnd srcPt246(Point(1254.5, 2175.54), 8);\n    connRef246->setSourceEndpoint(srcPt246);\n    ConnEnd dstPt246(Point(1425.5, 2079.54), 15);\n    connRef246->setDestEndpoint(dstPt246);\n    connRef246->setRoutingType((ConnType)2);\n    std::vector<Point> checkpoints246(1);\n    checkpoints246[0] = Point(1277.5, 2079.54);\n    connRef246->setRoutingCheckpoints(checkpoints246);\n\n    ConnRef *connRef247 = new ConnRef(router, 247);\n    ConnEnd srcPt247(Point(677.5, 1740.17), 8);\n    connRef247->setSourceEndpoint(srcPt247);\n    ConnEnd dstPt247(Point(1289.5, 1869.17), 15);\n    connRef247->setDestEndpoint(dstPt247);\n    connRef247->setRoutingType((ConnType)2);\n\n    ConnRef *connRef248 = new ConnRef(router, 248);\n    ConnEnd srcPt248(Point(937.5, 1869.17), 15);\n    connRef248->setSourceEndpoint(srcPt248);\n    ConnEnd dstPt248(Point(937.5, 2002.54), 1);\n    connRef248->setDestEndpoint(dstPt248);\n    connRef248->setRoutingType((ConnType)2);\n\n    ConnRef *connRef249 = new ConnRef(router, 249);\n    ConnEnd srcPt249(Point(647.5, 1740.17), 4);\n    connRef249->setSourceEndpoint(srcPt249);\n    ConnEnd dstPt249(Point(251.5, 1869.17), 15);\n    connRef249->setDestEndpoint(dstPt249);\n    connRef249->setRoutingType((ConnType)2);\n\n    ConnRef *connRef250 = new ConnRef(router, 250);\n    ConnEnd srcPt250(Point(1224.5, 2100.54), 4);\n    connRef250->setSourceEndpoint(srcPt250);\n    ConnEnd dstPt250(Point(937.5, 2079.54), 15);\n    connRef250->setDestEndpoint(dstPt250);\n    connRef250->setRoutingType((ConnType)2);\n    std::vector<Point> checkpoints250(1);\n    checkpoints250[0] = Point(1201.5, 2079.54);\n    connRef250->setRoutingCheckpoints(checkpoints250);\n\n    ConnRef *connRef251 = new ConnRef(router, 251);\n    ConnEnd srcPt251(Point(1224.5, 2175.54), 4);\n    connRef251->setSourceEndpoint(srcPt251);\n    ConnEnd dstPt251(Point(937.5, 2079.54), 15);\n    connRef251->setDestEndpoint(dstPt251);\n    connRef251->setRoutingType((ConnType)2);\n    std::vector<Point> checkpoints251(1);\n    checkpoints251[0] = Point(1201.5, 2079.54);\n    connRef251->setRoutingCheckpoints(checkpoints251);\n\n    ConnRef *connRef252 = new ConnRef(router, 252);\n    ConnEnd srcPt252(Point(523.5, 2012.21), 4);\n    connRef252->setSourceEndpoint(srcPt252);\n    ConnEnd dstPt252(Point(406.5, 2012.21), 15);\n    connRef252->setDestEndpoint(dstPt252);\n    connRef252->setRoutingType((ConnType)2);\n\n    ConnRef *connRef253 = new ConnRef(router, 253);\n    ConnEnd srcPt253(Point(1289.5, 790.5), 15);\n    connRef253->setSourceEndpoint(srcPt253);\n    ConnEnd dstPt253(Point(1401.5, 744.5), 2);\n    connRef253->setDestEndpoint(dstPt253);\n    connRef253->setRoutingType((ConnType)2);\n    std::vector<Point> checkpoints253(1);\n    checkpoints253[0] = Point(1289.5, 759.5);\n    connRef253->setRoutingCheckpoints(checkpoints253);\n\n    ConnRef *connRef254 = new ConnRef(router, 254);\n    ConnEnd srcPt254(Point(216.5, 750.75), 15);\n    connRef254->setSourceEndpoint(srcPt254);\n    ConnEnd dstPt254(Point(271.5, 750.75), 4);\n    connRef254->setDestEndpoint(dstPt254);\n    connRef254->setRoutingType((ConnType)2);\n\n    ConnRef *connRef255 = new ConnRef(router, 255);\n    ConnEnd srcPt255(Point(437.5, 750.75), 15);\n    connRef255->setSourceEndpoint(srcPt255);\n    ConnEnd dstPt255(Point(647.5, 750.75), 4);\n    connRef255->setDestEndpoint(dstPt255);\n    connRef255->setRoutingType((ConnType)2);\n\n    ConnRef *connRef256 = new ConnRef(router, 256);\n    ConnEnd srcPt256(Point(437.5, 852.75), 15);\n    connRef256->setSourceEndpoint(srcPt256);\n    ConnEnd dstPt256(Point(647.5, 852.75), 4);\n    connRef256->setDestEndpoint(dstPt256);\n    connRef256->setRoutingType((ConnType)2);\n\n    ConnRef *connRef257 = new ConnRef(router, 257);\n    ConnEnd srcPt257(Point(216.5, 852.75), 15);\n    connRef257->setSourceEndpoint(srcPt257);\n    ConnEnd dstPt257(Point(271.5, 852.75), 4);\n    connRef257->setDestEndpoint(dstPt257);\n    connRef257->setRoutingType((ConnType)2);\n\n    ConnRef *connRef258 = new ConnRef(router, 258);\n    ConnEnd srcPt258(Point(390.5, 1582.17), 8);\n    connRef258->setSourceEndpoint(srcPt258);\n    ConnEnd dstPt258(Point(1289.5, 1603.17), 15);\n    connRef258->setDestEndpoint(dstPt258);\n    connRef258->setRoutingType((ConnType)2);\n    std::vector<Point> checkpoints258(1);\n    checkpoints258[0] = Point(413.5, 1603.17);\n    connRef258->setRoutingCheckpoints(checkpoints258);\n\n    ConnRef *connRef259 = new ConnRef(router, 259);\n    ConnEnd srcPt259(Point(251.5, 1603.17), 15);\n    connRef259->setSourceEndpoint(srcPt259);\n    ConnEnd dstPt259(Point(360.5, 1582.17), 4);\n    connRef259->setDestEndpoint(dstPt259);\n    connRef259->setRoutingType((ConnType)2);\n    std::vector<Point> checkpoints259(1);\n    checkpoints259[0] = Point(337.5, 1603.17);\n    connRef259->setRoutingCheckpoints(checkpoints259);\n\n    ConnRef *connRef260 = new ConnRef(router, 260);\n    ConnEnd srcPt260(Point(251.5, 1603.17), 15);\n    connRef260->setSourceEndpoint(srcPt260);\n    ConnEnd dstPt260(Point(360.5, 1624.17), 4);\n    connRef260->setDestEndpoint(dstPt260);\n    connRef260->setRoutingType((ConnType)2);\n    std::vector<Point> checkpoints260(1);\n    checkpoints260[0] = Point(337.5, 1603.17);\n    connRef260->setRoutingCheckpoints(checkpoints260);\n\n    ConnRef *connRef261 = new ConnRef(router, 261);\n    ConnEnd srcPt261(Point(1310.5, 1012.17), 1);\n    connRef261->setSourceEndpoint(srcPt261);\n    ConnEnd dstPt261(Point(1289.5, 966.167), 15);\n    connRef261->setDestEndpoint(dstPt261);\n    connRef261->setRoutingType((ConnType)2);\n    std::vector<Point> checkpoints261(1);\n    checkpoints261[0] = Point(1289.5, 997.167);\n    connRef261->setRoutingCheckpoints(checkpoints261);\n\n    ConnRef *connRef262 = new ConnRef(router, 262);\n    ConnEnd srcPt262(Point(1193.5, 1343.17), 4);\n    connRef262->setSourceEndpoint(srcPt262);\n    ConnEnd dstPt262(Point(1057.5, 1263.17), 15);\n    connRef262->setDestEndpoint(dstPt262);\n    connRef262->setRoutingType((ConnType)2);\n\n    ConnRef *connRef263 = new ConnRef(router, 263);\n    ConnEnd srcPt263(Point(1223.5, 1343.17), 8);\n    connRef263->setSourceEndpoint(srcPt263);\n    ConnEnd dstPt263(Point(1289.5, 1355.17), 15);\n    connRef263->setDestEndpoint(dstPt263);\n    connRef263->setRoutingType((ConnType)2);\n\n    ConnRef *connRef264 = new ConnRef(router, 264);\n    ConnEnd srcPt264(Point(1193.5, 1139.17), 4);\n    connRef264->setSourceEndpoint(srcPt264);\n    ConnEnd dstPt264(Point(1057.5, 1263.17), 15);\n    connRef264->setDestEndpoint(dstPt264);\n    connRef264->setRoutingType((ConnType)2);\n\n    ConnRef *connRef265 = new ConnRef(router, 265);\n    ConnEnd srcPt265(Point(1289.5, 966.167), 15);\n    connRef265->setSourceEndpoint(srcPt265);\n    ConnEnd dstPt265(Point(1396.5, 1186.17), 1);\n    connRef265->setDestEndpoint(dstPt265);\n    connRef265->setRoutingType((ConnType)2);\n    std::vector<Point> checkpoints265(1);\n    checkpoints265[0] = Point(1417.5, 1171.17);\n    connRef265->setRoutingCheckpoints(checkpoints265);\n\n    ConnRef *connRef266 = new ConnRef(router, 266);\n    ConnEnd srcPt266(Point(1289.5, 966.167), 15);\n    connRef266->setSourceEndpoint(srcPt266);\n    ConnEnd dstPt266(Point(1438.5, 1186.17), 1);\n    connRef266->setDestEndpoint(dstPt266);\n    connRef266->setRoutingType((ConnType)2);\n    std::vector<Point> checkpoints266(1);\n    checkpoints266[0] = Point(1417.5, 1171.17);\n    connRef266->setRoutingCheckpoints(checkpoints266);\n\n    ConnRef *connRef267 = new ConnRef(router, 267);\n    ConnEnd srcPt267(Point(1289.5, 966.167), 15);\n    connRef267->setSourceEndpoint(srcPt267);\n    ConnEnd dstPt267(Point(1529.5, 1186.17), 1);\n    connRef267->setDestEndpoint(dstPt267);\n    connRef267->setRoutingType((ConnType)2);\n    std::vector<Point> checkpoints267(1);\n    checkpoints267[0] = Point(1417.5, 1171.17);\n    connRef267->setRoutingCheckpoints(checkpoints267);\n\n    ConnRef *connRef268 = new ConnRef(router, 268);\n    ConnEnd srcPt268(Point(230.5, 1915.17), 1);\n    connRef268->setSourceEndpoint(srcPt268);\n    ConnEnd dstPt268(Point(251.5, 1869.17), 15);\n    connRef268->setDestEndpoint(dstPt268);\n    connRef268->setRoutingType((ConnType)2);\n    std::vector<Point> checkpoints268(1);\n    checkpoints268[0] = Point(251.5, 1900.17);\n    connRef268->setRoutingCheckpoints(checkpoints268);\n\n    ConnRef *connRef269 = new ConnRef(router, 269);\n    ConnEnd srcPt269(Point(1310.5, 744.5), 2);\n    connRef269->setSourceEndpoint(srcPt269);\n    ConnEnd dstPt269(Point(1289.5, 790.5), 15);\n    connRef269->setDestEndpoint(dstPt269);\n    connRef269->setRoutingType((ConnType)2);\n    std::vector<Point> checkpoints269(1);\n    checkpoints269[0] = Point(1289.5, 759.5);\n    connRef269->setRoutingCheckpoints(checkpoints269);\n\n    ConnRef *connRef270 = new ConnRef(router, 270);\n    ConnEnd srcPt270(Point(615.5, 487), 8);\n    connRef270->setSourceEndpoint(srcPt270);\n    ConnEnd dstPt270(Point(1289.5, 466), 15);\n    connRef270->setDestEndpoint(dstPt270);\n    connRef270->setRoutingType((ConnType)2);\n    std::vector<Point> checkpoints270(1);\n    checkpoints270[0] = Point(638.5, 466);\n    connRef270->setRoutingCheckpoints(checkpoints270);\n\n    ConnRef *connRef271 = new ConnRef(router, 271);\n    ConnEnd srcPt271(Point(937.5, 1765.17), 15);\n    connRef271->setSourceEndpoint(srcPt271);\n    ConnEnd dstPt271(Point(1134.5, 1879.54), 8);\n    connRef271->setDestEndpoint(dstPt271);\n    connRef271->setRoutingType((ConnType)2);\n\n    ConnRef *connRef272 = new ConnRef(router, 272);\n    ConnEnd srcPt272(Point(937.5, 1765.17), 15);\n    connRef272->setSourceEndpoint(srcPt272);\n    ConnEnd dstPt272(Point(1119.5, 1783.17), 1);\n    connRef272->setDestEndpoint(dstPt272);\n    connRef272->setRoutingType((ConnType)2);\n\n    ConnRef *connRef273 = new ConnRef(router, 273);\n    ConnEnd srcPt273(Point(1347.5, 871.5), 4);\n    connRef273->setSourceEndpoint(srcPt273);\n    ConnEnd dstPt273(Point(1289.5, 871.5), 8);\n    connRef273->setDestEndpoint(dstPt273);\n    connRef273->setRoutingType((ConnType)2);\n\n    ConnRef *connRef274 = new ConnRef(router, 274);\n    ConnEnd srcPt274(Point(631.5, 2008.54), 2);\n    connRef274->setSourceEndpoint(srcPt274);\n    ConnEnd dstPt274(Point(631.5, 2058.54), 1);\n    connRef274->setDestEndpoint(dstPt274);\n    connRef274->setRoutingType((ConnType)2);\n\n    ConnRef *connRef275 = new ConnRef(router, 275);\n    ConnEnd srcPt275(Point(330.5, 1930.17), 4);\n    connRef275->setSourceEndpoint(srcPt275);\n    ConnEnd dstPt275(Point(272.5, 1930.17), 8);\n    connRef275->setDestEndpoint(dstPt275);\n    connRef275->setRoutingType((ConnType)2);\n\n    ConnRef *connRef276 = new ConnRef(router, 276);\n    ConnEnd srcPt276(Point(631.5, 2150.54), 1);\n    connRef276->setSourceEndpoint(srcPt276);\n    ConnEnd dstPt276(Point(631.5, 2100.54), 2);\n    connRef276->setDestEndpoint(dstPt276);\n    connRef276->setRoutingType((ConnType)2);\n\n    ConnRef *connRef277 = new ConnRef(router, 277);\n    ConnEnd srcPt277(Point(995.5, 2017.54), 4);\n    connRef277->setSourceEndpoint(srcPt277);\n    ConnEnd dstPt277(Point(937.5, 2017.54), 8);\n    connRef277->setDestEndpoint(dstPt277);\n    connRef277->setRoutingType((ConnType)2);\n\n    ConnRef *connRef278 = new ConnRef(router, 278);\n    ConnEnd srcPt278(Point(1239.5, 1933.54), 2);\n    connRef278->setSourceEndpoint(srcPt278);\n    ConnEnd dstPt278(Point(1239.5, 1983.54), 1);\n    connRef278->setDestEndpoint(dstPt278);\n    connRef278->setRoutingType((ConnType)2);\n\n    ConnRef *connRef279 = new ConnRef(router, 279);\n    ConnEnd srcPt279(Point(1239.5, 2008.54), 2);\n    connRef279->setSourceEndpoint(srcPt279);\n    ConnEnd dstPt279(Point(1239.5, 2058.54), 1);\n    connRef279->setDestEndpoint(dstPt279);\n    connRef279->setRoutingType((ConnType)2);\n\n    ConnRef *connRef280 = new ConnRef(router, 280);\n    ConnEnd srcPt280(Point(1119.5, 1929.54), 1);\n    connRef280->setSourceEndpoint(srcPt280);\n    ConnEnd dstPt280(Point(1119.5, 1879.54), 2);\n    connRef280->setDestEndpoint(dstPt280);\n    connRef280->setRoutingType((ConnType)2);\n\n    ConnRef *connRef281 = new ConnRef(router, 281);\n    ConnEnd srcPt281(Point(1177.5, 1798.17), 4);\n    connRef281->setSourceEndpoint(srcPt281);\n    ConnEnd dstPt281(Point(1119.5, 1798.17), 8);\n    connRef281->setDestEndpoint(dstPt281);\n    connRef281->setRoutingType((ConnType)2);\n\n    ConnRef *connRef282 = new ConnRef(router, 282);\n    ConnEnd srcPt282(Point(813.5, 1819.17), 2);\n    connRef282->setSourceEndpoint(srcPt282);\n    ConnEnd dstPt282(Point(813.5, 1869.17), 1);\n    connRef282->setDestEndpoint(dstPt282);\n    connRef282->setRoutingType((ConnType)2);\n\n    ConnRef *connRef283 = new ConnRef(router, 283);\n    ConnEnd srcPt283(Point(406.5, 1819.17), 2);\n    connRef283->setSourceEndpoint(srcPt283);\n    ConnEnd dstPt283(Point(406.5, 1869.17), 1);\n    connRef283->setDestEndpoint(dstPt283);\n    connRef283->setRoutingType((ConnType)2);\n\n    ConnRef *connRef284 = new ConnRef(router, 284);\n    ConnEnd srcPt284(Point(1456.5, 1819.17), 2);\n    connRef284->setSourceEndpoint(srcPt284);\n    ConnEnd dstPt284(Point(1456.5, 1869.17), 1);\n    connRef284->setDestEndpoint(dstPt284);\n    connRef284->setRoutingType((ConnType)2);\n\n    ConnRef *connRef285 = new ConnRef(router, 285);\n    ConnEnd srcPt285(Point(1347.5, 1665.17), 4);\n    connRef285->setSourceEndpoint(srcPt285);\n    ConnEnd dstPt285(Point(1289.5, 1665.17), 8);\n    connRef285->setDestEndpoint(dstPt285);\n    connRef285->setRoutingType((ConnType)2);\n\n    ConnRef *connRef286 = new ConnRef(router, 286);\n    ConnEnd srcPt286(Point(1347.5, 1541.17), 4);\n    connRef286->setSourceEndpoint(srcPt286);\n    ConnEnd dstPt286(Point(1289.5, 1541.17), 8);\n    connRef286->setDestEndpoint(dstPt286);\n    connRef286->setRoutingType((ConnType)2);\n\n    ConnRef *connRef287 = new ConnRef(router, 287);\n    ConnEnd srcPt287(Point(1347.5, 1417.17), 4);\n    connRef287->setSourceEndpoint(srcPt287);\n    ConnEnd dstPt287(Point(1289.5, 1417.17), 8);\n    connRef287->setDestEndpoint(dstPt287);\n    connRef287->setRoutingType((ConnType)2);\n\n    ConnRef *connRef288 = new ConnRef(router, 288);\n    ConnEnd srcPt288(Point(1210.5, 1027.17), 8);\n    connRef288->setSourceEndpoint(srcPt288);\n    ConnEnd dstPt288(Point(1268.5, 1027.17), 4);\n    connRef288->setDestEndpoint(dstPt288);\n    connRef288->setRoutingType((ConnType)2);\n\n    ConnRef *connRef289 = new ConnRef(router, 289);\n    ConnEnd srcPt289(Point(1088.5, 916.167), 2);\n    connRef289->setSourceEndpoint(srcPt289);\n    ConnEnd dstPt289(Point(1088.5, 966.167), 1);\n    connRef289->setDestEndpoint(dstPt289);\n    connRef289->setRoutingType((ConnType)2);\n\n    ConnRef *connRef290 = new ConnRef(router, 290);\n    ConnEnd srcPt290(Point(1210.5, 729.5), 8);\n    connRef290->setSourceEndpoint(srcPt290);\n    ConnEnd dstPt290(Point(1268.5, 729.5), 4);\n    connRef290->setDestEndpoint(dstPt290);\n    connRef290->setRoutingType((ConnType)2);\n\n    ConnRef *connRef291 = new ConnRef(router, 291);\n    ConnEnd srcPt291(Point(1459.5, 729.5), 4);\n    connRef291->setSourceEndpoint(srcPt291);\n    ConnEnd dstPt291(Point(1401.5, 729.5), 8);\n    connRef291->setDestEndpoint(dstPt291);\n    connRef291->setRoutingType((ConnType)2);\n\n    ConnRef *connRef292 = new ConnRef(router, 292);\n    ConnEnd srcPt292(Point(1425.5, 382.5), 2);\n    connRef292->setSourceEndpoint(srcPt292);\n    ConnEnd dstPt292(Point(1425.5, 432.5), 1);\n    connRef292->setDestEndpoint(dstPt292);\n    connRef292->setRoutingType((ConnType)2);\n\n    ConnRef *connRef293 = new ConnRef(router, 293);\n    ConnEnd srcPt293(Point(1347.5, 551.25), 4);\n    connRef293->setSourceEndpoint(srcPt293);\n    ConnEnd dstPt293(Point(1289.5, 551.25), 8);\n    connRef293->setDestEndpoint(dstPt293);\n    connRef293->setRoutingType((ConnType)2);\n\n    ConnRef *connRef294 = new ConnRef(router, 294);\n    ConnEnd srcPt294(Point(1347.5, 360), 4);\n    connRef294->setSourceEndpoint(srcPt294);\n    ConnEnd dstPt294(Point(1289.5, 360), 8);\n    connRef294->setDestEndpoint(dstPt294);\n    connRef294->setRoutingType((ConnType)2);\n\n    ConnRef *connRef295 = new ConnRef(router, 295);\n    ConnEnd srcPt295(Point(1026.5, 588.75), 2);\n    connRef295->setSourceEndpoint(srcPt295);\n    ConnEnd dstPt295(Point(1026.5, 638.75), 1);\n    connRef295->setDestEndpoint(dstPt295);\n    connRef295->setRoutingType((ConnType)2);\n\n    ConnRef *connRef296 = new ConnRef(router, 296);\n    ConnEnd srcPt296(Point(507.5, 492.75), 2);\n    connRef296->setSourceEndpoint(srcPt296);\n    ConnEnd dstPt296(Point(507.5, 542.75), 1);\n    connRef296->setDestEndpoint(dstPt296);\n    connRef296->setRoutingType((ConnType)2);\n\n    ConnRef *connRef297 = new ConnRef(router, 297);\n    ConnEnd srcPt297(Point(507.5, 567.75), 2);\n    connRef297->setSourceEndpoint(srcPt297);\n    ConnEnd dstPt297(Point(507.5, 617.75), 1);\n    connRef297->setDestEndpoint(dstPt297);\n    connRef297->setRoutingType((ConnType)2);\n\n    ConnRef *connRef298 = new ConnRef(router, 298);\n    ConnEnd srcPt298(Point(906.5, 501.25), 2);\n    connRef298->setSourceEndpoint(srcPt298);\n    ConnEnd dstPt298(Point(906.5, 551.25), 1);\n    connRef298->setDestEndpoint(dstPt298);\n    connRef298->setRoutingType((ConnType)2);\n\n    ConnRef *connRef299 = new ConnRef(router, 299);\n    ConnEnd srcPt299(Point(693.5, 551.25), 8);\n    connRef299->setSourceEndpoint(srcPt299);\n    ConnEnd dstPt299(Point(751.5, 551.25), 4);\n    connRef299->setDestEndpoint(dstPt299);\n    connRef299->setRoutingType((ConnType)2);\n\n    ConnRef *connRef300 = new ConnRef(router, 300);\n    ConnEnd srcPt300(Point(344.5, 551.25), 4);\n    connRef300->setSourceEndpoint(srcPt300);\n    ConnEnd dstPt300(Point(286.5, 551.25), 8);\n    connRef300->setDestEndpoint(dstPt300);\n    connRef300->setRoutingType((ConnType)2);\n\n    ConnRef *connRef301 = new ConnRef(router, 301);\n    ConnEnd srcPt301(Point(600.5, 245), 2);\n    connRef301->setSourceEndpoint(srcPt301);\n    ConnEnd dstPt301(Point(600.5, 295), 1);\n    connRef301->setDestEndpoint(dstPt301);\n    connRef301->setRoutingType((ConnType)2);\n\n    ConnRef *connRef302 = new ConnRef(router, 302);\n    ConnEnd srcPt302(Point(600.5, 320), 2);\n    connRef302->setSourceEndpoint(srcPt302);\n    ConnEnd dstPt302(Point(600.5, 370), 1);\n    connRef302->setDestEndpoint(dstPt302);\n    connRef302->setRoutingType((ConnType)2);\n\n    ConnRef *connRef303 = new ConnRef(router, 303);\n    ConnEnd srcPt303(Point(600.5, 612), 1);\n    connRef303->setSourceEndpoint(srcPt303);\n    ConnEnd dstPt303(Point(600.5, 562), 2);\n    connRef303->setDestEndpoint(dstPt303);\n    connRef303->setRoutingType((ConnType)2);\n\n    ConnRef *connRef304 = new ConnRef(router, 304);\n    ConnEnd srcPt304(Point(875.5, 291), 2);\n    connRef304->setSourceEndpoint(srcPt304);\n    ConnEnd dstPt304(Point(875.5, 341), 1);\n    connRef304->setDestEndpoint(dstPt304);\n    connRef304->setRoutingType((ConnType)2);\n\n    ConnRef *connRef305 = new ConnRef(router, 305);\n    ConnEnd srcPt305(Point(875.5, 189), 2);\n    connRef305->setSourceEndpoint(srcPt305);\n    ConnEnd dstPt305(Point(875.5, 239), 1);\n    connRef305->setDestEndpoint(dstPt305);\n    connRef305->setRoutingType((ConnType)2);\n\n    ConnRef *connRef306 = new ConnRef(router, 306);\n    ConnEnd srcPt306(Point(538.5, 1962.21), 2);\n    connRef306->setSourceEndpoint(srcPt306);\n    ConnEnd dstPt306(Point(538.5, 2012.21), 1);\n    connRef306->setDestEndpoint(dstPt306);\n    connRef306->setRoutingType((ConnType)2);\n\n    ConnRef *connRef307 = new ConnRef(router, 307);\n    ConnEnd srcPt307(Point(1347.5, 1263.17), 4);\n    connRef307->setSourceEndpoint(srcPt307);\n    ConnEnd dstPt307(Point(1289.5, 1263.17), 8);\n    connRef307->setDestEndpoint(dstPt307);\n    connRef307->setRoutingType((ConnType)2);\n\n    ConnRef *connRef308 = new ConnRef(router, 308);\n    ConnEnd srcPt308(Point(600.5, 395), 2);\n    connRef308->setSourceEndpoint(srcPt308);\n    ConnEnd dstPt308(Point(600.5, 445), 1);\n    connRef308->setDestEndpoint(dstPt308);\n    connRef308->setRoutingType((ConnType)2);\n\n    ConnRef *connRef309 = new ConnRef(router, 309);\n    ConnEnd srcPt309(Point(507.5, 709.75), 1);\n    connRef309->setSourceEndpoint(srcPt309);\n    ConnEnd dstPt309(Point(507.5, 659.75), 2);\n    connRef309->setDestEndpoint(dstPt309);\n    connRef309->setRoutingType((ConnType)2);\n\n    ConnRef *connRef310 = new ConnRef(router, 310);\n    ConnEnd srcPt310(Point(286.5, 700.75), 2);\n    connRef310->setSourceEndpoint(srcPt310);\n    ConnEnd dstPt310(Point(286.5, 750.75), 1);\n    connRef310->setDestEndpoint(dstPt310);\n    connRef310->setRoutingType((ConnType)2);\n\n    ConnRef *connRef311 = new ConnRef(router, 311);\n    ConnEnd srcPt311(Point(286.5, 802.75), 2);\n    connRef311->setSourceEndpoint(srcPt311);\n    ConnEnd dstPt311(Point(286.5, 852.75), 1);\n    connRef311->setDestEndpoint(dstPt311);\n    connRef311->setRoutingType((ConnType)2);\n\n    ConnRef *connRef312 = new ConnRef(router, 312);\n    ConnEnd srcPt312(Point(662.5, 700.75), 2);\n    connRef312->setSourceEndpoint(srcPt312);\n    ConnEnd dstPt312(Point(662.5, 750.75), 1);\n    connRef312->setDestEndpoint(dstPt312);\n    connRef312->setRoutingType((ConnType)2);\n\n    ConnRef *connRef313 = new ConnRef(router, 313);\n    ConnEnd srcPt313(Point(662.5, 802.75), 2);\n    connRef313->setSourceEndpoint(srcPt313);\n    ConnEnd dstPt313(Point(662.5, 852.75), 1);\n    connRef313->setDestEndpoint(dstPt313);\n    connRef313->setRoutingType((ConnType)2);\n\n    ConnRef *connRef314 = new ConnRef(router, 314);\n    ConnEnd srcPt314(Point(375.5, 1532.17), 2);\n    connRef314->setSourceEndpoint(srcPt314);\n    ConnEnd dstPt314(Point(375.5, 1582.17), 1);\n    connRef314->setDestEndpoint(dstPt314);\n    connRef314->setRoutingType((ConnType)2);\n\n    ConnRef *connRef315 = new ConnRef(router, 315);\n    ConnEnd srcPt315(Point(1239.5, 2150.54), 1);\n    connRef315->setSourceEndpoint(srcPt315);\n    ConnEnd dstPt315(Point(1239.5, 2100.54), 2);\n    connRef315->setDestEndpoint(dstPt315);\n    connRef315->setRoutingType((ConnType)2);\n\n    ConnRef *connRef316 = new ConnRef(router, 316);\n    ConnEnd srcPt316(Point(375.5, 1674.17), 1);\n    connRef316->setSourceEndpoint(srcPt316);\n    ConnEnd dstPt316(Point(375.5, 1624.17), 2);\n    connRef316->setDestEndpoint(dstPt316);\n    connRef316->setRoutingType((ConnType)2);\n\n    ConnRef *connRef317 = new ConnRef(router, 317);\n    ConnEnd srcPt317(Point(1368.5, 1027.17), 4);\n    connRef317->setSourceEndpoint(srcPt317);\n    ConnEnd dstPt317(Point(1310.5, 1027.17), 8);\n    connRef317->setDestEndpoint(dstPt317);\n    connRef317->setRoutingType((ConnType)2);\n\n    ConnRef *connRef318 = new ConnRef(router, 318);\n    ConnEnd srcPt318(Point(1338.5, 1201.17), 8);\n    connRef318->setSourceEndpoint(srcPt318);\n    ConnEnd dstPt318(Point(1396.5, 1201.17), 4);\n    connRef318->setDestEndpoint(dstPt318);\n    connRef318->setRoutingType((ConnType)2);\n\n    ConnRef *connRef319 = new ConnRef(router, 319);\n    ConnEnd srcPt319(Point(1496.5, 1201.17), 4);\n    connRef319->setSourceEndpoint(srcPt319);\n    ConnEnd dstPt319(Point(1438.5, 1201.17), 8);\n    connRef319->setDestEndpoint(dstPt319);\n    connRef319->setRoutingType((ConnType)2);\n\n    ConnRef *connRef320 = new ConnRef(router, 320);\n    ConnEnd srcPt320(Point(662.5, 1690.17), 2);\n    connRef320->setSourceEndpoint(srcPt320);\n    ConnEnd dstPt320(Point(662.5, 1740.17), 1);\n    connRef320->setDestEndpoint(dstPt320);\n    connRef320->setRoutingType((ConnType)2);\n\n    ConnRef *connRef321 = new ConnRef(router, 321);\n    ConnEnd srcPt321(Point(1587.5, 1201.17), 4);\n    connRef321->setSourceEndpoint(srcPt321);\n    ConnEnd dstPt321(Point(1529.5, 1201.17), 8);\n    connRef321->setDestEndpoint(dstPt321);\n    connRef321->setRoutingType((ConnType)2);\n\n    ConnRef *connRef322 = new ConnRef(router, 322);\n    ConnEnd srcPt322(Point(1208.5, 1293.17), 2);\n    connRef322->setSourceEndpoint(srcPt322);\n    ConnEnd dstPt322(Point(1208.5, 1343.17), 1);\n    connRef322->setDestEndpoint(dstPt322);\n    connRef322->setRoutingType((ConnType)2);\n\n    ConnRef *connRef323 = new ConnRef(router, 323);\n    ConnEnd srcPt323(Point(1208.5, 1089.17), 2);\n    connRef323->setSourceEndpoint(srcPt323);\n    ConnEnd dstPt323(Point(1208.5, 1139.17), 1);\n    connRef323->setDestEndpoint(dstPt323);\n    connRef323->setRoutingType((ConnType)2);\n\n    ConnRef *connRef324 = new ConnRef(router, 324);\n    ConnEnd srcPt324(Point(172.5, 1930.17), 8);\n    connRef324->setSourceEndpoint(srcPt324);\n    ConnEnd dstPt324(Point(230.5, 1930.17), 4);\n    connRef324->setDestEndpoint(dstPt324);\n    connRef324->setRoutingType((ConnType)2);\n\n    ConnRef *connRef325 = new ConnRef(router, 325);\n    ConnEnd srcPt325(Point(1368.5, 729.5), 4);\n    connRef325->setSourceEndpoint(srcPt325);\n    ConnEnd dstPt325(Point(1310.5, 729.5), 8);\n    connRef325->setDestEndpoint(dstPt325);\n    connRef325->setRoutingType((ConnType)2);\n\n    ConnRef *connRef326 = new ConnRef(router, 326);\n    ConnEnd srcPt326(Point(600.5, 537), 1);\n    connRef326->setSourceEndpoint(srcPt326);\n    ConnEnd dstPt326(Point(600.5, 487), 2);\n    connRef326->setDestEndpoint(dstPt326);\n    connRef326->setRoutingType((ConnType)2);\n\n    ConnRef *connRef327 = new ConnRef(router, 327);\n    ConnEnd srcPt327(Point(507.5, 784.75), 1);\n    connRef327->setSourceEndpoint(srcPt327);\n    ConnEnd dstPt327(Point(507.5, 734.75), 2);\n    connRef327->setDestEndpoint(dstPt327);\n    connRef327->setRoutingType((ConnType)2);\n\n    ConnRef *connRef328 = new ConnRef(router, 328);\n    ConnEnd srcPt328(Point(1239.5, 2225.54), 1);\n    connRef328->setSourceEndpoint(srcPt328);\n    ConnEnd dstPt328(Point(1239.5, 2175.54), 2);\n    connRef328->setDestEndpoint(dstPt328);\n    connRef328->setRoutingType((ConnType)2);\n\n    ConnRef *connRef329 = new ConnRef(router, 329);\n    ConnEnd srcPt329(Point(251.5, 1869.17), 15);\n    connRef329->setSourceEndpoint(srcPt329);\n    ConnEnd dstPt329(Point(272.5, 1915.17), 1);\n    connRef329->setDestEndpoint(dstPt329);\n    connRef329->setRoutingType((ConnType)2);\n    std::vector<Point> checkpoints329(1);\n    checkpoints329[0] = Point(251.5, 1900.17);\n    connRef329->setRoutingCheckpoints(checkpoints329);\n\n    ConnRef *connRef330 = new ConnRef(router, 330);\n    ConnEnd srcPt330(Point(1289.5, 1869.17), 15);\n    connRef330->setSourceEndpoint(srcPt330);\n    ConnEnd dstPt330(Point(1134.5, 1879.54), 8);\n    connRef330->setDestEndpoint(dstPt330);\n    connRef330->setRoutingType((ConnType)2);\n\n    ConnRef *connRef331 = new ConnRef(router, 331);\n    ConnEnd srcPt331(Point(1289.5, 1869.17), 15);\n    connRef331->setSourceEndpoint(srcPt331);\n    ConnEnd dstPt331(Point(1119.5, 1783.17), 1);\n    connRef331->setDestEndpoint(dstPt331);\n    connRef331->setRoutingType((ConnType)2);\n\n    ConnRef *connRef332 = new ConnRef(router, 332);\n    ConnEnd srcPt332(Point(782.5, 2012.21), 15);\n    connRef332->setSourceEndpoint(srcPt332);\n    ConnEnd dstPt332(Point(828.5, 1869.17), 8);\n    connRef332->setDestEndpoint(dstPt332);\n    connRef332->setRoutingType((ConnType)2);\n\n    ConnRef *connRef333 = new ConnRef(router, 333);\n    ConnEnd srcPt333(Point(937.5, 1869.17), 15);\n    connRef333->setSourceEndpoint(srcPt333);\n    ConnEnd dstPt333(Point(828.5, 1869.17), 8);\n    connRef333->setDestEndpoint(dstPt333);\n    connRef333->setRoutingType((ConnType)2);\n\n    ConnRef *connRef334 = new ConnRef(router, 334);\n    ConnEnd srcPt334(Point(1289.5, 1603.17), 15);\n    connRef334->setSourceEndpoint(srcPt334);\n    ConnEnd dstPt334(Point(1289.5, 1650.17), 1);\n    connRef334->setDestEndpoint(dstPt334);\n    connRef334->setRoutingType((ConnType)2);\n\n    ConnRef *connRef335 = new ConnRef(router, 335);\n    ConnEnd srcPt335(Point(1289.5, 638.75), 15);\n    connRef335->setSourceEndpoint(srcPt335);\n    ConnEnd dstPt335(Point(1268.5, 714.5), 1);\n    connRef335->setDestEndpoint(dstPt335);\n    connRef335->setRoutingType((ConnType)2);\n    std::vector<Point> checkpoints335(1);\n    checkpoints335[0] = Point(1289.5, 699.5);\n    connRef335->setRoutingCheckpoints(checkpoints335);\n\n    ConnRef *connRef336 = new ConnRef(router, 336);\n    ConnEnd srcPt336(Point(286.5, 638.75), 15);\n    connRef336->setSourceEndpoint(srcPt336);\n    ConnEnd dstPt336(Point(492.5, 542.75), 4);\n    connRef336->setDestEndpoint(dstPt336);\n    connRef336->setRoutingType((ConnType)2);\n    std::vector<Point> checkpoints336(1);\n    checkpoints336[0] = Point(469.5, 638.75);\n    connRef336->setRoutingCheckpoints(checkpoints336);\n\n    ConnRef *connRef337 = new ConnRef(router, 337);\n    ConnEnd srcPt337(Point(286.5, 638.75), 15);\n    connRef337->setSourceEndpoint(srcPt337);\n    ConnEnd dstPt337(Point(492.5, 617.75), 4);\n    connRef337->setDestEndpoint(dstPt337);\n    connRef337->setRoutingType((ConnType)2);\n    std::vector<Point> checkpoints337(1);\n    checkpoints337[0] = Point(469.5, 638.75);\n    connRef337->setRoutingCheckpoints(checkpoints337);\n\n    ConnRef *connRef338 = new ConnRef(router, 338);\n    ConnEnd srcPt338(Point(286.5, 466), 15);\n    connRef338->setSourceEndpoint(srcPt338);\n    ConnEnd dstPt338(Point(585.5, 295), 4);\n    connRef338->setDestEndpoint(dstPt338);\n    connRef338->setRoutingType((ConnType)2);\n    std::vector<Point> checkpoints338(1);\n    checkpoints338[0] = Point(562.5, 466);\n    connRef338->setRoutingCheckpoints(checkpoints338);\n\n    ConnRef *connRef339 = new ConnRef(router, 339);\n    ConnEnd srcPt339(Point(286.5, 466), 15);\n    connRef339->setSourceEndpoint(srcPt339);\n    ConnEnd dstPt339(Point(585.5, 370), 4);\n    connRef339->setDestEndpoint(dstPt339);\n    connRef339->setRoutingType((ConnType)2);\n    std::vector<Point> checkpoints339(1);\n    checkpoints339[0] = Point(562.5, 466);\n    connRef339->setRoutingCheckpoints(checkpoints339);\n\n    ConnRef *connRef340 = new ConnRef(router, 340);\n    ConnEnd srcPt340(Point(1289.5, 466), 15);\n    connRef340->setSourceEndpoint(srcPt340);\n    ConnEnd dstPt340(Point(615.5, 562), 8);\n    connRef340->setDestEndpoint(dstPt340);\n    connRef340->setRoutingType((ConnType)2);\n    std::vector<Point> checkpoints340(1);\n    checkpoints340[0] = Point(638.5, 466);\n    connRef340->setRoutingCheckpoints(checkpoints340);\n\n    ConnRef *connRef341 = new ConnRef(router, 341);\n    ConnEnd srcPt341(Point(1289.5, 280), 15);\n    connRef341->setSourceEndpoint(srcPt341);\n    ConnEnd dstPt341(Point(890.5, 341), 8);\n    connRef341->setDestEndpoint(dstPt341);\n    connRef341->setRoutingType((ConnType)2);\n\n    ConnRef *connRef342 = new ConnRef(router, 342);\n    ConnEnd srcPt342(Point(1289.5, 280), 15);\n    connRef342->setSourceEndpoint(srcPt342);\n    ConnEnd dstPt342(Point(890.5, 239), 8);\n    connRef342->setDestEndpoint(dstPt342);\n    connRef342->setRoutingType((ConnType)2);\n\n    ConnRef *connRef343 = new ConnRef(router, 343);\n    ConnEnd srcPt343(Point(1289.5, 466), 15);\n    connRef343->setSourceEndpoint(srcPt343);\n    ConnEnd dstPt343(Point(1515, 661), 4);\n    connRef343->setDestEndpoint(dstPt343);\n    connRef343->setRoutingType((ConnType)2);\n\n    ConnRef *connRef344 = new ConnRef(router, 344);\n    ConnEnd srcPt344(Point(1289.5, 966.167), 15);\n    connRef344->setSourceEndpoint(srcPt344);\n    ConnEnd dstPt344(Point(1515, 701), 4);\n    connRef344->setDestEndpoint(dstPt344);\n    connRef344->setRoutingType((ConnType)2);\n\n    ConnRef *connRef345 = new ConnRef(router, 345);\n    ConnEnd srcPt345(Point(1289.5, 1479.17), 15);\n    connRef345->setSourceEndpoint(srcPt345);\n    ConnEnd dstPt345(Point(1601, 864.5), 2);\n    connRef345->setDestEndpoint(dstPt345);\n    connRef345->setRoutingType((ConnType)2);\n\n    ConnRef *connRef346 = new ConnRef(router, 346);\n    ConnEnd srcPt346(Point(1289.5, 1869.17), 15);\n    connRef346->setSourceEndpoint(srcPt346);\n    ConnEnd dstPt346(Point(1641, 864.5), 2);\n    connRef346->setDestEndpoint(dstPt346);\n    connRef346->setRoutingType((ConnType)2);\n\n    ConnRef *connRef347 = new ConnRef(router, 347);\n    ConnEnd srcPt347(Point(1289.5, 280), 15);\n    connRef347->setSourceEndpoint(srcPt347);\n    ConnEnd dstPt347(Point(1350, 214.5), 2);\n    connRef347->setDestEndpoint(dstPt347);\n    connRef347->setRoutingType((ConnType)2);\n\n    ConnRef *connRef348 = new ConnRef(router, 348);\n    ConnEnd srcPt348(Point(251.5, 1603.17), 15);\n    connRef348->setSourceEndpoint(srcPt348);\n    ConnEnd dstPt348(Point(247.5, 1725.67), 8);\n    connRef348->setDestEndpoint(dstPt348);\n    connRef348->setRoutingType((ConnType)2);\n\n    ConnRef *connRef349 = new ConnRef(router, 349);\n    ConnEnd srcPt349(Point(251.5, 1869.17), 15);\n    connRef349->setSourceEndpoint(srcPt349);\n    ConnEnd dstPt349(Point(247.5, 1765.67), 8);\n    connRef349->setDestEndpoint(dstPt349);\n    connRef349->setRoutingType((ConnType)2);\n\n    ConnRef *connRef350 = new ConnRef(router, 350);\n    ConnEnd srcPt350(Point(1289.5, 1355.17), 15);\n    connRef350->setSourceEndpoint(srcPt350);\n    ConnEnd dstPt350(Point(844.5, 1362.67), 8);\n    connRef350->setDestEndpoint(dstPt350);\n    connRef350->setRoutingType((ConnType)2);\n\n    ConnRef *connRef351 = new ConnRef(router, 351);\n    ConnEnd srcPt351(Point(1530.5, 1869.17), 15);\n    connRef351->setSourceEndpoint(srcPt351);\n    ConnEnd dstPt351(Point(1536.5, 1948.54), 1);\n    connRef351->setDestEndpoint(dstPt351);\n    connRef351->setRoutingType((ConnType)2);\n#endif\n\n    router->processTransaction();\n    router->outputDiagram(\"output/nudgeCrossing01\");\n\n    bool optimisedForConnectorType = false;\n    int crossings = router->existsCrossings(optimisedForConnectorType);\n\n    delete router;\n    return crossings;\n};\n\n"
  },
  {
    "path": "cola/libavoid/tests/nudgeintobug.cpp",
    "content": "#include \"libavoid/libavoid.h\"\nusing namespace Avoid;\nint main(void) {\n    Router *router = new Router(OrthogonalRouting);\n    router->setRoutingPenalty((Avoid::PenaltyType)0, 50);\n    router->setRoutingPenalty((Avoid::PenaltyType)1, 0);\n    router->setRoutingPenalty((Avoid::PenaltyType)2, 200);\n    router->setRoutingPenalty((Avoid::PenaltyType)3, 4000);\n    router->setRoutingPenalty((Avoid::PenaltyType)4, 110);\n    router->setRoutingParameter(idealNudgingDistance, 25);\n    Rectangle rect548374163(Point(51900, 50400), Point(52300, 50900));\n    new ShapeRef(router, rect548374163, 548374163);\n    Rectangle rect901116812(Point(51131, 49750), Point(51531, 50100));\n    new ShapeRef(router, rect901116812, 901116812);\n    Rectangle rect335855988(Point(51125, 50175), Point(51525, 50900));\n    new ShapeRef(router, rect335855988, 335855988);\n    Rectangle rect448725420(Point(52375, 50750), Point(52575, 50900));\n    new ShapeRef(router, rect448725420, 448725420);\n    Rectangle rect74263573(Point(51900, 49750), Point(52300, 50100));\n    new ShapeRef(router, rect74263573, 74263573);\n    ConnEnd srcPt463223880(Point(51500, 50275), 8);\n    ConnEnd dstPt463223880(Point(51150, 50275), 4);\n    ConnEnd srcPt144520410(Point(51150, 49850), 4);\n    ConnEnd dstPt144520410(Point(51500, 50350), 8);\n    ConnEnd srcPt45398340(Point(52400, 50825), 4);\n    ConnEnd dstPt45398340(Point(51500, 49925), 8);\n    ConnEnd srcPt29344262(Point(51150, 50500), 4);\n    ConnEnd dstPt29344262(Point(51925, 50000), 4);\n    new ConnRef(router, srcPt29344262, dstPt29344262, 29344262);\n    new ConnRef(router, srcPt45398340, dstPt45398340, 45398340);\n    new ConnRef(router, srcPt144520410, dstPt144520410, 144520410);\n    new ConnRef(router, srcPt463223880, dstPt463223880, 463223880);\n    router->processTransaction();\n    router->outputDiagram(\"output/nudgeintobug\");\n    bool overlap = router->existsOrthogonalFixedSegmentOverlap();\n    bool touching = router->existsOrthogonalTouchingPaths();\n    delete router;\n    return (overlap || touching) ? 1 : 0;\n};\n\n"
  },
  {
    "path": "cola/libavoid/tests/nudgeold.cpp",
    "content": "#include \"libavoid/libavoid.h\"\nusing namespace Avoid;\nint main(void) {\n    Router *router = new Router(\n            PolyLineRouting | OrthogonalRouting);\n    router->setRoutingPenalty((PenaltyType)0, 50);\n    router->setRoutingPenalty((PenaltyType)1, 0);\n    router->setRoutingPenalty((PenaltyType)2, 0);\n    router->setRoutingPenalty((PenaltyType)3, 4000);\n    router->setRoutingPenalty((PenaltyType)4, 110);\n    router->setRoutingParameter(idealNudgingDistance, 25);\n\n    Polygon poly426345871(4);\n    poly426345871.ps[0] = Point(7200, 5240);\n    poly426345871.ps[1] = Point(7200, 5660);\n    poly426345871.ps[2] = Point(6690, 5660);\n    poly426345871.ps[3] = Point(6690, 5240);\n    new ShapeRef(router, poly426345871, 426345871);\n    \n    Polygon poly596896212(4);\n    poly596896212.ps[0] = Point(7200, 5740);\n    poly596896212.ps[1] = Point(7200, 6160);\n    poly596896212.ps[2] = Point(6690, 6160);\n    poly596896212.ps[3] = Point(6690, 5740);\n    new ShapeRef(router, poly596896212, 596896212);\n    \n    ConnRef *connRef20026701 = new ConnRef(router, 20026701);\n    ConnEnd srcPt20026701(Point(7190, 5600), 8);\n    connRef20026701->setSourceEndpoint(srcPt20026701);\n    ConnEnd dstPt20026701(Point(7190, 5800), 8);\n    connRef20026701->setDestEndpoint(dstPt20026701);\n    connRef20026701->setRoutingType((ConnType)2);\n\n    ConnRef *connRef124776000 = new ConnRef(router, 124776000);\n    ConnEnd srcPt124776000(Point(7190, 5550), 8);\n    connRef124776000->setSourceEndpoint(srcPt124776000);\n    ConnEnd dstPt124776000(Point(7190, 5850), 8);\n    connRef124776000->setDestEndpoint(dstPt124776000);\n    connRef124776000->setRoutingType((ConnType)2);\n\n    ConnRef *connRef162425002 = new ConnRef(router, 162425002);\n    ConnEnd srcPt162425002(Point(7190, 5500), 8);\n    connRef162425002->setSourceEndpoint(srcPt162425002);\n    ConnEnd dstPt162425002(Point(7190, 5900), 8);\n    connRef162425002->setDestEndpoint(dstPt162425002);\n    connRef162425002->setRoutingType((ConnType)2);\n\n    ConnRef *connRef445102866 = new ConnRef(router, 445102866);\n    ConnEnd srcPt445102866(Point(7190, 5450), 8);\n    connRef445102866->setSourceEndpoint(srcPt445102866);\n    ConnEnd dstPt445102866(Point(7190, 5950), 8);\n    connRef445102866->setDestEndpoint(dstPt445102866);\n    connRef445102866->setRoutingType((ConnType)2);\n\n    ConnRef *connRef472520508 = new ConnRef(router, 472520508);\n    ConnEnd srcPt472520508(Point(7190, 5400), 8);\n    connRef472520508->setSourceEndpoint(srcPt472520508);\n    ConnEnd dstPt472520508(Point(7190, 6000), 8);\n    connRef472520508->setDestEndpoint(dstPt472520508);\n    connRef472520508->setRoutingType((ConnType)2);\n\n    ConnRef *connRef406587600 = new ConnRef(router, 406587600);\n    ConnEnd srcPt406587600(Point(7190, 5350), 8);\n    connRef406587600->setSourceEndpoint(srcPt406587600);\n    ConnEnd dstPt406587600(Point(7190, 6050), 8);\n    connRef406587600->setDestEndpoint(dstPt406587600);\n    connRef406587600->setRoutingType((ConnType)2);\n\n    ConnRef *connRef41657796 = new ConnRef(router, 41657796);\n    ConnEnd srcPt41657796(Point(7190, 5300), 8);\n    connRef41657796->setSourceEndpoint(srcPt41657796);\n    ConnEnd dstPt41657796(Point(7190, 6100), 8);\n    connRef41657796->setDestEndpoint(dstPt41657796);\n    connRef41657796->setRoutingType((ConnType)2);\n\n    router->processTransaction();\n    router->outputDiagram(\"output/nudgeold\");\n    delete router;\n    return 0;\n};\n"
  },
  {
    "path": "cola/libavoid/tests/nudgingSkipsCheckpoint01.cpp",
    "content": "// Regression test to catch problem where orthogonal segments from the same \n// connector were being merged with others going through checkpoints and \n// being simplified so as not to pass the checkpoint anymore.\n// Based on ec00232.\n#include \"libavoid/libavoid.h\"\nusing namespace Avoid;\nint main(void) {\n    Router *router = new Router(\n            PolyLineRouting | OrthogonalRouting);\n    router->setRoutingParameter((RoutingParameter)0, 50);\n    router->setRoutingParameter((RoutingParameter)1, 0);\n    router->setRoutingParameter((RoutingParameter)2, 0);\n    router->setRoutingParameter((RoutingParameter)3, 4000);\n    router->setRoutingParameter((RoutingParameter)4, 0);\n    router->setRoutingParameter((RoutingParameter)5, 100);\n    router->setRoutingParameter((RoutingParameter)6, 0);\n    router->setRoutingParameter((RoutingParameter)7, 4);\n    router->setRoutingOption((RoutingOption)0, true);\n    router->setRoutingOption((RoutingOption)1, true);\n    router->setRoutingOption((RoutingOption)2, false);\n    router->setRoutingOption((RoutingOption)3, false);\n    Polygon polygon;\n    ConnRef *connRef = nullptr;\n    ConnEnd srcPt;\n    ConnEnd dstPt;\n#if ALL\n    // shapeRef1\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(-80.18071812011561, 825.315092940984);\n    polygon.ps[1] = Point(-80.18071812011561, 887.315092940984);\n    polygon.ps[2] = Point(-142.1807181201156, 887.315092940984);\n    polygon.ps[3] = Point(-142.1807181201156, 825.315092940984);\n    new ShapeRef(router, polygon, 1);\n#endif\n\n    // shapeRef2\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(620.1049961655988, -86.0182403953493);\n    polygon.ps[1] = Point(620.1049961655988, -24.0182403953493);\n    polygon.ps[2] = Point(558.1049961655988, -24.0182403953493);\n    polygon.ps[3] = Point(558.1049961655988, -86.0182403953493);\n    new ShapeRef(router, polygon, 2);\n\n#if ALL\n    // shapeRef3\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(1044.504996167599, 719.315092940984);\n    polygon.ps[1] = Point(1044.504996167599, 781.315092940984);\n    polygon.ps[2] = Point(982.5049961675986, 781.315092940984);\n    polygon.ps[3] = Point(982.5049961675986, 719.315092940984);\n    new ShapeRef(router, polygon, 3);\n\n    // shapeRef4\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(1153.104996167599, 759.315092940984);\n    polygon.ps[1] = Point(1153.104996167599, 821.315092940984);\n    polygon.ps[2] = Point(1091.104996167599, 821.315092940984);\n    polygon.ps[3] = Point(1091.104996167599, 759.315092940984);\n    new ShapeRef(router, polygon, 4);\n\n    // shapeRef5\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(1044.504996167599, 495.9817596066507);\n    polygon.ps[1] = Point(1044.504996167599, 557.9817596066507);\n    polygon.ps[2] = Point(982.5049961675986, 557.9817596066507);\n    polygon.ps[3] = Point(982.5049961675986, 495.9817596066507);\n    new ShapeRef(router, polygon, 5);\n\n    // shapeRef6\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(968.1049961675988, 759.315092940984);\n    polygon.ps[1] = Point(968.1049961675988, 821.315092940984);\n    polygon.ps[2] = Point(906.1049961675988, 821.315092940984);\n    polygon.ps[3] = Point(906.1049961675988, 759.315092940984);\n    new ShapeRef(router, polygon, 6);\n\n    // shapeRef7\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(1044.504996167599, 792.315092940984);\n    polygon.ps[1] = Point(1044.504996167599, 854.315092940984);\n    polygon.ps[2] = Point(982.5049961675986, 854.315092940984);\n    polygon.ps[3] = Point(982.5049961675986, 792.315092940984);\n    new ShapeRef(router, polygon, 7);\n\n    // shapeRef8\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(349.8192818798844, 1008.815092941984);\n    polygon.ps[1] = Point(349.8192818798844, 1070.815092941984);\n    polygon.ps[2] = Point(287.8192818798844, 1070.815092941984);\n    polygon.ps[3] = Point(287.8192818798844, 1008.815092941984);\n    new ShapeRef(router, polygon, 8);\n\n    // shapeRef9\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(349.8192818798844, 617.315092940984);\n    polygon.ps[1] = Point(349.8192818798844, 679.315092940984);\n    polygon.ps[2] = Point(287.8192818798844, 679.315092940984);\n    polygon.ps[3] = Point(287.8192818798844, 617.315092940984);\n    new ShapeRef(router, polygon, 9);\n\n    // shapeRef10\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(288.8192818798844, 371.9817596066507);\n    polygon.ps[1] = Point(288.8192818798844, 433.9817596066507);\n    polygon.ps[2] = Point(226.8192818798844, 433.9817596066507);\n    polygon.ps[3] = Point(226.8192818798844, 371.9817596066507);\n    new ShapeRef(router, polygon, 10);\n#endif\n\n    // shapeRef11\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(103.8192818798844, 975.8150929419839);\n    polygon.ps[1] = Point(103.8192818798844, 995.8150929419839);\n    polygon.ps[2] = Point(71.81928187988439, 995.8150929419839);\n    polygon.ps[3] = Point(71.81928187988439, 975.8150929419839);\n    new ShapeRef(router, polygon, 11);\n\n    // shapeRef12\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(103.8192818798844, 1017.815092941984);\n    polygon.ps[1] = Point(103.8192818798844, 1037.815092941984);\n    polygon.ps[2] = Point(71.81928187988439, 1037.815092941984);\n    polygon.ps[3] = Point(71.81928187988439, 1017.815092941984);\n    new ShapeRef(router, polygon, 12);\n\n#if ALL\n    // shapeRef13\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(328.8192818798844, 957.8150929419839);\n    polygon.ps[1] = Point(328.8192818798844, 989.8150929419839);\n    polygon.ps[2] = Point(308.8192818798844, 989.8150929419839);\n    polygon.ps[3] = Point(308.8192818798844, 957.8150929419839);\n    new ShapeRef(router, polygon, 13);\n\n    // shapeRef14\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(12.81928187988439, 901.815092940984);\n    polygon.ps[1] = Point(12.81928187988439, 921.815092940984);\n    polygon.ps[2] = Point(-19.18071812011561, 921.815092940984);\n    polygon.ps[3] = Point(-19.18071812011561, 901.815092940984);\n    new ShapeRef(router, polygon, 14);\n\n    // shapeRef15\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(466.8192818798844, 840.315092940984);\n    polygon.ps[1] = Point(466.8192818798844, 872.315092940984);\n    polygon.ps[2] = Point(446.8192818798844, 872.315092940984);\n    polygon.ps[3] = Point(446.8192818798844, 840.315092940984);\n    new ShapeRef(router, polygon, 15);\n\n    // shapeRef16\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(1023.504996167599, 572.9817596076507);\n    polygon.ps[1] = Point(1023.504996167599, 604.9817596076507);\n    polygon.ps[2] = Point(1003.504996167599, 604.9817596076507);\n    polygon.ps[3] = Point(1003.504996167599, 572.9817596076507);\n    new ShapeRef(router, polygon, 16);\n\n    // shapeRef17\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(887.1049961675988, 638.315092940984);\n    polygon.ps[1] = Point(887.1049961675988, 658.315092940984);\n    polygon.ps[2] = Point(855.1049961675988, 658.315092940984);\n    polygon.ps[3] = Point(855.1049961675988, 638.315092940984);\n    new ShapeRef(router, polygon, 17);\n\n    // shapeRef18\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(472.8192818798844, 671.315092940984);\n    polygon.ps[1] = Point(472.8192818798844, 691.315092940984);\n    polygon.ps[2] = Point(440.8192818798844, 691.315092940984);\n    polygon.ps[3] = Point(440.8192818798844, 671.315092940984);\n    new ShapeRef(router, polygon, 18);\n\n    // shapeRef19\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(142.8192818798844, 638.315092940984);\n    polygon.ps[1] = Point(142.8192818798844, 658.315092940984);\n    polygon.ps[2] = Point(110.8192818798844, 658.315092940984);\n    polygon.ps[3] = Point(110.8192818798844, 638.315092940984);\n    new ShapeRef(router, polygon, 19);\n\n    // shapeRef20\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(599.1049961655988, 419.9817596066507);\n    polygon.ps[1] = Point(599.1049961655988, 451.9817596066507);\n    polygon.ps[2] = Point(579.1049961655988, 451.9817596066507);\n    polygon.ps[3] = Point(579.1049961655988, 419.9817596066507);\n    new ShapeRef(router, polygon, 20);\n\n    // shapeRef21\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(472.8192818798844, 483.9817596066507);\n    polygon.ps[1] = Point(472.8192818798844, 503.9817596066507);\n    polygon.ps[2] = Point(440.8192818798844, 503.9817596066507);\n    polygon.ps[3] = Point(440.8192818798844, 483.9817596066507);\n    new ShapeRef(router, polygon, 21);\n\n    // shapeRef22\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(472.8192818798844, 134.9817596056507);\n    polygon.ps[1] = Point(472.8192818798844, 154.9817596056507);\n    polygon.ps[2] = Point(440.8192818798844, 154.9817596056507);\n    polygon.ps[3] = Point(440.8192818798844, 134.9817596056507);\n    new ShapeRef(router, polygon, 22);\n\n    // shapeRef23\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(1023.504996167599, 419.9817596066507);\n    polygon.ps[1] = Point(1023.504996167599, 451.9817596066507);\n    polygon.ps[2] = Point(1003.504996167599, 451.9817596066507);\n    polygon.ps[3] = Point(1003.504996167599, 419.9817596066507);\n    new ShapeRef(router, polygon, 23);\n\n    // shapeRef24\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(751.1049961665988, 276.9817596056507);\n    polygon.ps[1] = Point(751.1049961665988, 296.9817596056507);\n    polygon.ps[2] = Point(719.1049961665988, 296.9817596056507);\n    polygon.ps[3] = Point(719.1049961665988, 276.9817596056507);\n    new ShapeRef(router, polygon, 24);\n\n    // shapeRef25\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(472.8192818798844, 209.9817596056507);\n    polygon.ps[1] = Point(472.8192818798844, 229.9817596056507);\n    polygon.ps[2] = Point(440.8192818798844, 229.9817596056507);\n    polygon.ps[3] = Point(440.8192818798844, 209.9817596056507);\n    new ShapeRef(router, polygon, 25);\n\n    // shapeRef26\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(751.1049961665988, 318.9817596056507);\n    polygon.ps[1] = Point(751.1049961665988, 338.9817596056507);\n    polygon.ps[2] = Point(719.1049961665988, 338.9817596056507);\n    polygon.ps[3] = Point(719.1049961665988, 318.9817596056507);\n    new ShapeRef(router, polygon, 26);\n\n    // shapeRef27\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(472.8192818798844, -181.0182403963493);\n    polygon.ps[1] = Point(472.8192818798844, -161.0182403963493);\n    polygon.ps[2] = Point(440.8192818798844, -161.0182403963493);\n    polygon.ps[3] = Point(440.8192818798844, -181.0182403963493);\n    new ShapeRef(router, polygon, 27);\n\n    // shapeRef28\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(599.1049961655988, -199.0182403963493);\n    polygon.ps[1] = Point(599.1049961655988, -167.0182403963493);\n    polygon.ps[2] = Point(579.1049961655988, -167.0182403963493);\n    polygon.ps[3] = Point(579.1049961655988, -199.0182403963493);\n    new ShapeRef(router, polygon, 28);\n\n    // shapeRef29\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(472.8192818798844, 251.9817596056507);\n    polygon.ps[1] = Point(472.8192818798844, 271.9817596056507);\n    polygon.ps[2] = Point(440.8192818798844, 271.9817596056507);\n    polygon.ps[3] = Point(440.8192818798844, 251.9817596056507);\n    new ShapeRef(router, polygon, 29);\n\n    // shapeRef30\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(142.8192818798844, -65.0182403953493);\n    polygon.ps[1] = Point(142.8192818798844, -45.0182403953493);\n    polygon.ps[2] = Point(110.8192818798844, -45.0182403953493);\n    polygon.ps[3] = Point(110.8192818798844, -65.0182403953493);\n    new ShapeRef(router, polygon, 30);\n\n    // shapeRef31\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(-20.18071812011561, -65.0182403953493);\n    polygon.ps[1] = Point(-20.18071812011561, -45.0182403953493);\n    polygon.ps[2] = Point(-52.18071812011561, -45.0182403953493);\n    polygon.ps[3] = Point(-52.18071812011561, -65.0182403953493);\n    new ShapeRef(router, polygon, 31);\n\n    // shapeRef32\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(267.8192818798844, 324.9817596056507);\n    polygon.ps[1] = Point(267.8192818798844, 356.9817596056507);\n    polygon.ps[2] = Point(247.8192818798844, 356.9817596056507);\n    polygon.ps[3] = Point(247.8192818798844, 324.9817596056507);\n    new ShapeRef(router, polygon, 32);\n\n    // shapeRef33\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(136.8192818798844, 258.9817596056507);\n    polygon.ps[1] = Point(136.8192818798844, 290.9817596056507);\n    polygon.ps[2] = Point(116.8192818798844, 290.9817596056507);\n    polygon.ps[3] = Point(116.8192818798844, 258.9817596056507);\n    new ShapeRef(router, polygon, 33);\n\n    // shapeRef34\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(472.8192818798844, -32.0182403953493);\n    polygon.ps[1] = Point(472.8192818798844, -12.0182403953493);\n    polygon.ps[2] = Point(440.8192818798844, -12.0182403953493);\n    polygon.ps[3] = Point(440.8192818798844, -32.0182403953493);\n    new ShapeRef(router, polygon, 34);\n\n    // shapeRef35\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(1001.104996167599, 276.9817596056507);\n    polygon.ps[1] = Point(1001.104996167599, 338.9817596056507);\n    polygon.ps[2] = Point(939.1049961675988, 338.9817596056507);\n    polygon.ps[3] = Point(939.1049961675988, 276.9817596056507);\n    new ShapeRef(router, polygon, 35);\n\n    // shapeRef36\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(854.1049961675988, 144.9817596056507);\n    polygon.ps[1] = Point(854.1049961675988, 164.9817596056507);\n    polygon.ps[2] = Point(822.1049961675988, 164.9817596056507);\n    polygon.ps[3] = Point(822.1049961675988, 144.9817596056507);\n    new ShapeRef(router, polygon, 36);\n\n    // shapeRef37\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(854.1049961675988, 186.9817596056507);\n    polygon.ps[1] = Point(854.1049961675988, 206.9817596056507);\n    polygon.ps[2] = Point(822.1049961675988, 206.9817596056507);\n    polygon.ps[3] = Point(822.1049961675988, 186.9817596056507);\n    new ShapeRef(router, polygon, 37);\n\n    // shapeRef38\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(472.8192818798844, -139.0182403963493);\n    polygon.ps[1] = Point(472.8192818798844, -119.0182403963493);\n    polygon.ps[2] = Point(440.8192818798844, -119.0182403963493);\n    polygon.ps[3] = Point(440.8192818798844, -139.0182403963493);\n    new ShapeRef(router, polygon, 38);\n\n    // shapeRef39\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(854.1049961675988, 69.98175960565069);\n    polygon.ps[1] = Point(854.1049961675988, 89.98175960565069);\n    polygon.ps[2] = Point(822.1049961675988, 89.98175960565069);\n    polygon.ps[3] = Point(822.1049961675988, 69.98175960565069);\n    new ShapeRef(router, polygon, 39);\n\n    // shapeRef40\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(-51.68071812011561, 455.4817596066507);\n    polygon.ps[1] = Point(-51.68071812011561, 619.4817596066507);\n    polygon.ps[2] = Point(-170.6807181201156, 619.4817596066507);\n    polygon.ps[3] = Point(-170.6807181201156, 455.4817596066507);\n    new ShapeRef(router, polygon, 40);\n\n    // shapeRef41\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(31.81928187988439, -317.5182403973492);\n    polygon.ps[1] = Point(31.81928187988439, -282.5182403973492);\n    polygon.ps[2] = Point(-164.1807181201156, -282.5182403973492);\n    polygon.ps[3] = Point(-164.1807181201156, -317.5182403973492);\n    new ShapeRef(router, polygon, 41);\n\n    // shapeRef42\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(752.8192818798843, 768.315092940984);\n    polygon.ps[1] = Point(752.8192818798843, 812.315092940984);\n    polygon.ps[2] = Point(664.8192818798843, 812.315092940984);\n    polygon.ps[3] = Point(664.8192818798843, 768.315092940984);\n    new ShapeRef(router, polygon, 42);\n\n    // shapeRef43\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(349.8192818798844, 880.815092940984);\n    polygon.ps[1] = Point(349.8192818798844, 942.815092940984);\n    polygon.ps[2] = Point(287.8192818798844, 942.815092940984);\n    polygon.ps[3] = Point(287.8192818798844, 880.815092940984);\n    new ShapeRef(router, polygon, 43);\n\n    // shapeRef44\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(349.8192818798844, -181.0182403963493);\n    polygon.ps[1] = Point(349.8192818798844, -119.0182403963493);\n    polygon.ps[2] = Point(287.8192818798844, -119.0182403963493);\n    polygon.ps[3] = Point(287.8192818798844, -181.0182403963493);\n    new ShapeRef(router, polygon, 44);\n\n    // shapeRef45\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(935.1049961675988, -276.0182403973492);\n    polygon.ps[1] = Point(935.1049961675988, -214.0182403973492);\n    polygon.ps[2] = Point(873.1049961675988, -214.0182403973492);\n    polygon.ps[3] = Point(873.1049961675988, -276.0182403973492);\n    new ShapeRef(router, polygon, 45);\n\n    // shapeRef46\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(620.1049961655988, 276.9817596056507);\n    polygon.ps[1] = Point(620.1049961655988, 338.9817596056507);\n    polygon.ps[2] = Point(558.1049961655988, 338.9817596056507);\n    polygon.ps[3] = Point(558.1049961655988, 276.9817596056507);\n    new ShapeRef(router, polygon, 46);\n\n    // shapeRef47\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(620.1049961655988, 617.315092940984);\n    polygon.ps[1] = Point(620.1049961655988, 679.315092940984);\n    polygon.ps[2] = Point(558.1049961655988, 679.315092940984);\n    polygon.ps[3] = Point(558.1049961655988, 617.315092940984);\n    new ShapeRef(router, polygon, 47);\n#endif\n\n    // shapeRef48\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(78.81928187988439, -86.0182403953493);\n    polygon.ps[1] = Point(78.81928187988439, -24.0182403953493);\n    polygon.ps[2] = Point(16.81928187988439, -24.0182403953493);\n    polygon.ps[3] = Point(16.81928187988439, -86.0182403953493);\n    new ShapeRef(router, polygon, 48);\n\n#if ALL\n    // shapeRef49\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(-80.18071812011561, -86.0182403953493);\n    polygon.ps[1] = Point(-80.18071812011561, -24.0182403953493);\n    polygon.ps[2] = Point(-142.1807181201156, -24.0182403953493);\n    polygon.ps[3] = Point(-142.1807181201156, -86.0182403953493);\n    new ShapeRef(router, polygon, 49);\n\n    // shapeRef50\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(620.1049961655988, -276.0182403973492);\n    polygon.ps[1] = Point(620.1049961655988, -214.0182403973492);\n    polygon.ps[2] = Point(558.1049961655988, -214.0182403973492);\n    polygon.ps[3] = Point(558.1049961655988, -276.0182403973492);\n    new ShapeRef(router, polygon, 50);\n\n    // shapeRef51\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(349.8192818798844, -86.0182403953493);\n    polygon.ps[1] = Point(349.8192818798844, -24.0182403953493);\n    polygon.ps[2] = Point(287.8192818798844, -24.0182403953493);\n    polygon.ps[3] = Point(287.8192818798844, -86.0182403953493);\n    new ShapeRef(router, polygon, 51);\n\n    // shapeRef52\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(620.1049961655988, 495.9817596066507);\n    polygon.ps[1] = Point(620.1049961655988, 557.9817596066507);\n    polygon.ps[2] = Point(558.1049961655988, 557.9817596066507);\n    polygon.ps[3] = Point(558.1049961655988, 495.9817596066507);\n    new ShapeRef(router, polygon, 52);\n\n    // shapeRef53\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(115.8192818798844, 915.8150929419839);\n    polygon.ps[1] = Point(115.8192818798844, 975.8150929419839);\n    polygon.ps[2] = Point(59.81928187988439, 975.8150929419839);\n    polygon.ps[3] = Point(59.81928187988439, 915.8150929419839);\n    new ShapeRef(router, polygon, 53);\n\n    // shapeRef54\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(115.8192818798844, 1037.815092941984);\n    polygon.ps[1] = Point(115.8192818798844, 1097.815092941984);\n    polygon.ps[2] = Point(59.81928187988439, 1097.815092941984);\n    polygon.ps[3] = Point(59.81928187988439, 1037.815092941984);\n    new ShapeRef(router, polygon, 54);\n\n    // shapeRef55\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(404.8192818798844, 953.8150929419839);\n    polygon.ps[1] = Point(404.8192818798844, 993.8150929419839);\n    polygon.ps[2] = Point(328.8192818798844, 993.8150929419839);\n    polygon.ps[3] = Point(328.8192818798844, 953.8150929419839);\n    new ShapeRef(router, polygon, 55);\n#endif\n\n    // shapeRef56\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(24.81928187988439, 841.815092940984);\n    polygon.ps[1] = Point(24.81928187988439, 901.815092940984);\n    polygon.ps[2] = Point(-31.18071812011561, 901.815092940984);\n    polygon.ps[3] = Point(-31.18071812011561, 841.815092940984);\n    new ShapeRef(router, polygon, 56);\n\n#if ALL\n    // shapeRef57\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(542.8192818798843, 836.315092940984);\n    polygon.ps[1] = Point(542.8192818798843, 876.315092940984);\n    polygon.ps[2] = Point(466.8192818798844, 876.315092940984);\n    polygon.ps[3] = Point(466.8192818798844, 836.315092940984);\n    new ShapeRef(router, polygon, 57);\n\n    // shapeRef58\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(1099.504996167599, 568.9817596076507);\n    polygon.ps[1] = Point(1099.504996167599, 608.9817596076507);\n    polygon.ps[2] = Point(1023.504996167599, 608.9817596076507);\n    polygon.ps[3] = Point(1023.504996167599, 568.9817596076507);\n    new ShapeRef(router, polygon, 58);\n\n    // shapeRef59\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(899.1049961675988, 578.315092940984);\n    polygon.ps[1] = Point(899.1049961675988, 638.315092940984);\n    polygon.ps[2] = Point(843.1049961675988, 638.315092940984);\n    polygon.ps[3] = Point(843.1049961675988, 578.315092940984);\n    new ShapeRef(router, polygon, 59);\n\n    // shapeRef60\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(484.8192818798844, 691.315092940984);\n    polygon.ps[1] = Point(484.8192818798844, 751.315092940984);\n    polygon.ps[2] = Point(428.8192818798844, 751.315092940984);\n    polygon.ps[3] = Point(428.8192818798844, 691.315092940984);\n    new ShapeRef(router, polygon, 60);\n\n    // shapeRef61\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(154.8192818798844, 578.315092940984);\n    polygon.ps[1] = Point(154.8192818798844, 638.315092940984);\n    polygon.ps[2] = Point(98.81928187988439, 638.315092940984);\n    polygon.ps[3] = Point(98.81928187988439, 578.315092940984);\n    new ShapeRef(router, polygon, 61);\n\n    // shapeRef62\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(675.1049961655988, 415.9817596066507);\n    polygon.ps[1] = Point(675.1049961655988, 455.9817596066507);\n    polygon.ps[2] = Point(599.1049961655988, 455.9817596066507);\n    polygon.ps[3] = Point(599.1049961655988, 415.9817596066507);\n    new ShapeRef(router, polygon, 62);\n\n    // shapeRef63\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(484.8192818798844, 423.9817596066507);\n    polygon.ps[1] = Point(484.8192818798844, 483.9817596066507);\n    polygon.ps[2] = Point(428.8192818798844, 483.9817596066507);\n    polygon.ps[3] = Point(428.8192818798844, 423.9817596066507);\n    new ShapeRef(router, polygon, 63);\n\n    // shapeRef64\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(484.8192818798844, 74.98175960565069);\n    polygon.ps[1] = Point(484.8192818798844, 134.9817596056507);\n    polygon.ps[2] = Point(428.8192818798844, 134.9817596056507);\n    polygon.ps[3] = Point(428.8192818798844, 74.98175960565069);\n    new ShapeRef(router, polygon, 64);\n\n    // shapeRef65\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(1099.504996167599, 415.9817596066507);\n    polygon.ps[1] = Point(1099.504996167599, 455.9817596066507);\n    polygon.ps[2] = Point(1023.504996167599, 455.9817596066507);\n    polygon.ps[3] = Point(1023.504996167599, 415.9817596066507);\n    new ShapeRef(router, polygon, 65);\n\n    // shapeRef66\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(763.1049961665988, 216.9817596056507);\n    polygon.ps[1] = Point(763.1049961665988, 276.9817596056507);\n    polygon.ps[2] = Point(707.1049961665988, 276.9817596056507);\n    polygon.ps[3] = Point(707.1049961665988, 216.9817596056507);\n    new ShapeRef(router, polygon, 66);\n\n    // shapeRef67\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(484.8192818798844, 149.9817596056507);\n    polygon.ps[1] = Point(484.8192818798844, 209.9817596056507);\n    polygon.ps[2] = Point(428.8192818798844, 209.9817596056507);\n    polygon.ps[3] = Point(428.8192818798844, 149.9817596056507);\n    new ShapeRef(router, polygon, 67);\n\n    // shapeRef68\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(763.1049961665988, 338.9817596056507);\n    polygon.ps[1] = Point(763.1049961665988, 398.9817596056507);\n    polygon.ps[2] = Point(707.1049961665988, 398.9817596056507);\n    polygon.ps[3] = Point(707.1049961665988, 338.9817596056507);\n    new ShapeRef(router, polygon, 68);\n\n    // shapeRef69\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(484.8192818798844, -241.0182403963493);\n    polygon.ps[1] = Point(484.8192818798844, -181.0182403963493);\n    polygon.ps[2] = Point(428.8192818798844, -181.0182403963493);\n    polygon.ps[3] = Point(428.8192818798844, -241.0182403963493);\n    new ShapeRef(router, polygon, 69);\n\n    // shapeRef70\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(675.1049961655988, -203.0182403963493);\n    polygon.ps[1] = Point(675.1049961655988, -163.0182403963493);\n    polygon.ps[2] = Point(599.1049961655988, -163.0182403963493);\n    polygon.ps[3] = Point(599.1049961655988, -203.0182403963493);\n    new ShapeRef(router, polygon, 70);\n\n    // shapeRef71\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(484.8192818798844, 271.9817596056507);\n    polygon.ps[1] = Point(484.8192818798844, 331.9817596056507);\n    polygon.ps[2] = Point(428.8192818798844, 331.9817596056507);\n    polygon.ps[3] = Point(428.8192818798844, 271.9817596056507);\n    new ShapeRef(router, polygon, 71);\n\n    // shapeRef72\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(154.8192818798844, -125.0182403953493);\n    polygon.ps[1] = Point(154.8192818798844, -65.0182403953493);\n    polygon.ps[2] = Point(98.81928187988439, -65.0182403953493);\n    polygon.ps[3] = Point(98.81928187988439, -125.0182403953493);\n    new ShapeRef(router, polygon, 72);\n\n    // shapeRef73\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(-8.180718120115614, -125.0182403953493);\n    polygon.ps[1] = Point(-8.180718120115614, -65.0182403953493);\n    polygon.ps[2] = Point(-64.18071812011561, -65.0182403953493);\n    polygon.ps[3] = Point(-64.18071812011561, -125.0182403953493);\n    new ShapeRef(router, polygon, 73);\n\n    // shapeRef74\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(343.8192818798844, 320.9817596056507);\n    polygon.ps[1] = Point(343.8192818798844, 360.9817596056507);\n    polygon.ps[2] = Point(267.8192818798844, 360.9817596056507);\n    polygon.ps[3] = Point(267.8192818798844, 320.9817596056507);\n    new ShapeRef(router, polygon, 74);\n\n    // shapeRef75\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(212.8192818798844, 254.9817596056507);\n    polygon.ps[1] = Point(212.8192818798844, 294.9817596056507);\n    polygon.ps[2] = Point(136.8192818798844, 294.9817596056507);\n    polygon.ps[3] = Point(136.8192818798844, 254.9817596056507);\n    new ShapeRef(router, polygon, 75);\n\n    // shapeRef76\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(484.8192818798844, -12.0182403953493);\n    polygon.ps[1] = Point(484.8192818798844, 47.9817596046507);\n    polygon.ps[2] = Point(428.8192818798844, 47.9817596046507);\n    polygon.ps[3] = Point(428.8192818798844, -12.0182403953493);\n    new ShapeRef(router, polygon, 76);\n\n    // shapeRef77\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(866.1049961675988, 84.98175960565069);\n    polygon.ps[1] = Point(866.1049961675988, 144.9817596056507);\n    polygon.ps[2] = Point(810.1049961675988, 144.9817596056507);\n    polygon.ps[3] = Point(810.1049961675988, 84.98175960565069);\n    new ShapeRef(router, polygon, 77);\n\n    // shapeRef78\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(866.1049961675988, 206.9817596056507);\n    polygon.ps[1] = Point(866.1049961675988, 266.9817596056507);\n    polygon.ps[2] = Point(810.1049961675988, 266.9817596056507);\n    polygon.ps[3] = Point(810.1049961675988, 206.9817596056507);\n    new ShapeRef(router, polygon, 78);\n\n    // shapeRef79\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(484.8192818798844, -119.0182403963493);\n    polygon.ps[1] = Point(484.8192818798844, -59.01824039634928);\n    polygon.ps[2] = Point(428.8192818798844, -59.01824039634928);\n    polygon.ps[3] = Point(428.8192818798844, -119.0182403963493);\n    new ShapeRef(router, polygon, 79);\n\n    // shapeRef80\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(866.1049961675988, 9.981759605650694);\n    polygon.ps[1] = Point(866.1049961675988, 69.98175960565069);\n    polygon.ps[2] = Point(810.1049961675988, 69.98175960565069);\n    polygon.ps[3] = Point(810.1049961675988, 9.981759605650694);\n    new ShapeRef(router, polygon, 80);\n\n    // shapeRef81\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(-91.18071812011561, 455.9817596066507);\n    polygon.ps[1] = Point(-91.18071812011561, 515.9817596066507);\n    polygon.ps[2] = Point(-131.1807181201156, 515.9817596066507);\n    polygon.ps[3] = Point(-131.1807181201156, 455.9817596066507);\n    new ShapeRef(router, polygon, 81);\n\n    // shapeRef82\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(-91.18071812011561, 559.9817596066507);\n    polygon.ps[1] = Point(-91.18071812011561, 619.9817596066507);\n    polygon.ps[2] = Point(-131.1807181201156, 619.9817596066507);\n    polygon.ps[3] = Point(-131.1807181201156, 559.9817596066507);\n    new ShapeRef(router, polygon, 82);\n\n    // shapeRef83\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(876.0049961675987, 79.98175960565069);\n    polygon.ps[1] = Point(876.0049961675987, 196.9817596056507);\n    polygon.ps[2] = Point(800.2049961675988, 196.9817596056507);\n    polygon.ps[3] = Point(800.2049961675988, 79.98175960565069);\n    new ShapeRef(router, polygon, 83);\n#endif\n\n    // shapeRef84\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(125.7192818798844, 985.8150929419839);\n    polygon.ps[1] = Point(125.7192818798844, 1027.815092941984);\n    polygon.ps[2] = Point(49.91928187988439, 1027.815092941984);\n    polygon.ps[3] = Point(49.91928187988439, 985.8150929419839);\n    new ShapeRef(router, polygon, 84);\n\n#if ALL\n    // shapeRef85\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(494.7192818798844, -171.0182403963493);\n    polygon.ps[1] = Point(494.7192818798844, -129.0182403963493);\n    polygon.ps[2] = Point(418.9192818798844, -129.0182403963493);\n    polygon.ps[3] = Point(418.9192818798844, -171.0182403963493);\n    new ShapeRef(router, polygon, 85);\n\n    // shapeRef86\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(773.0049961665987, 286.9817596056507);\n    polygon.ps[1] = Point(773.0049961665987, 328.9817596056507);\n    polygon.ps[2] = Point(697.2049961665988, 328.9817596056507);\n    polygon.ps[3] = Point(697.2049961665988, 286.9817596056507);\n    new ShapeRef(router, polygon, 86);\n\n    // shapeRef87\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(494.7192818798844, 144.9817596056507);\n    polygon.ps[1] = Point(494.7192818798844, 261.9817596056507);\n    polygon.ps[2] = Point(418.9192818798844, 261.9817596056507);\n    polygon.ps[3] = Point(418.9192818798844, 144.9817596056507);\n    new ShapeRef(router, polygon, 87);\n\n    // connRef88\n    connRef = new ConnRef(router, 88);\n    srcPt = ConnEnd(Point(111.8192818798844, 648.315092940984), 4);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(-111.1807181201156, 856.315092940984), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef89\n    connRef = new ConnRef(router, 89);\n    srcPt = ConnEnd(Point(126.8192818798844, 289.9817596056507), 2);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(-111.1807181201156, 856.315092940984), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n#endif\n\n    // connRef90\n    connRef = new ConnRef(router, 90);\n    srcPt = ConnEnd(Point(72.81928187988439, 985.8150929419839), 4);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(589.1049961655988, -55.0182403953493), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints90(1);\n    checkpoints90[0] = Checkpoint(Point(49.81928187988439, 1006.815092941984), (ConnDirFlags) 15, (ConnDirFlags) 4);\n    connRef->setRoutingCheckpoints(checkpoints90);\n    Avoid::ConnRef *connRef90 = connRef;\n\n    // connRef91\n    connRef = new ConnRef(router, 91);\n    srcPt = ConnEnd(Point(72.81928187988439, 1027.815092941984), 4);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(589.1049961655988, -55.0182403953493), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints91(1);\n    checkpoints91[0] = Checkpoint(Point(49.81928187988439, 1006.815092941984), (ConnDirFlags) 15, (ConnDirFlags) 4);\n    connRef->setRoutingCheckpoints(checkpoints91);\n    Avoid::ConnRef *connRef91 = connRef;\n\n#if ALL\n    // connRef92\n    connRef = new ConnRef(router, 92);\n    srcPt = ConnEnd(Point(471.8192818798844, -171.0182403963493), 8);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(589.1049961655988, -55.0182403953493), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints92(1);\n    checkpoints92[0] = Checkpoint(Point(494.8192818798844, -150.0182403963493), (ConnDirFlags) 15, (ConnDirFlags) 8);\n    connRef->setRoutingCheckpoints(checkpoints92);\n\n    // connRef93\n    connRef = new ConnRef(router, 93);\n    srcPt = ConnEnd(Point(589.1049961655988, -55.0182403953493), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(589.1049961655988, -168.0182403963493), 2);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef94\n    connRef = new ConnRef(router, 94);\n    srcPt = ConnEnd(Point(589.1049961655988, -55.0182403953493), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(471.8192818798844, -22.0182403953493), 8);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef95\n    connRef = new ConnRef(router, 95);\n    srcPt = ConnEnd(Point(823.1049961675988, 154.9817596056507), 4);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(589.1049961655988, -55.0182403953493), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints95(1);\n    checkpoints95[0] = Checkpoint(Point(800.1049961675988, 175.9817596056507), (ConnDirFlags) 15, (ConnDirFlags) 4);\n    connRef->setRoutingCheckpoints(checkpoints95);\n\n    // connRef96\n    connRef = new ConnRef(router, 96);\n    srcPt = ConnEnd(Point(823.1049961675988, 196.9817596056507), 4);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(589.1049961655988, -55.0182403953493), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints96(1);\n    checkpoints96[0] = Checkpoint(Point(800.1049961675988, 175.9817596056507), (ConnDirFlags) 15, (ConnDirFlags) 4);\n    connRef->setRoutingCheckpoints(checkpoints96);\n\n    // connRef97\n    connRef = new ConnRef(router, 97);\n    srcPt = ConnEnd(Point(471.8192818798844, -129.0182403963493), 8);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(589.1049961655988, -55.0182403953493), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints97(1);\n    checkpoints97[0] = Checkpoint(Point(494.8192818798844, -150.0182403963493), (ConnDirFlags) 15, (ConnDirFlags) 8);\n    connRef->setRoutingCheckpoints(checkpoints97);\n\n    // connRef98\n    connRef = new ConnRef(router, 98);\n    srcPt = ConnEnd(Point(823.1049961675988, 79.98175960565069), 4);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(589.1049961655988, -55.0182403953493), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints98(1);\n    checkpoints98[0] = Checkpoint(Point(800.1049961675988, 175.9817596056507), (ConnDirFlags) 15, (ConnDirFlags) 4);\n    connRef->setRoutingCheckpoints(checkpoints98);\n\n    // connRef99\n    connRef = new ConnRef(router, 99);\n    srcPt = ConnEnd(Point(1013.504996167599, 526.9817596066507), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(1013.504996167599, 573.9817596076507), 1);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef100\n    connRef = new ConnRef(router, 100);\n    srcPt = ConnEnd(Point(1013.504996167599, 450.9817596066507), 2);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(1013.504996167599, 526.9817596066507), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef101\n    connRef = new ConnRef(router, 101);\n    srcPt = ConnEnd(Point(318.8192818798844, 648.315092940984), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(141.8192818798844, 648.315092940984), 8);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef102\n    connRef = new ConnRef(router, 102);\n    srcPt = ConnEnd(Point(441.8192818798844, 493.9817596066507), 4);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(318.8192818798844, 648.315092940984), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef103\n    connRef = new ConnRef(router, 103);\n    srcPt = ConnEnd(Point(102.8192818798844, 985.8150929419839), 8);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(318.8192818798844, 911.815092940984), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints103(1);\n    checkpoints103[0] = Checkpoint(Point(125.8192818798844, 1006.815092941984), (ConnDirFlags) 15, (ConnDirFlags) 8);\n    connRef->setRoutingCheckpoints(checkpoints103);\n\n    // connRef104\n    connRef = new ConnRef(router, 104);\n    srcPt = ConnEnd(Point(102.8192818798844, 1027.815092941984), 8);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(318.8192818798844, 911.815092940984), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints104(1);\n    checkpoints104[0] = Checkpoint(Point(125.8192818798844, 1006.815092941984), (ConnDirFlags) 15, (ConnDirFlags) 8);\n    connRef->setRoutingCheckpoints(checkpoints104);\n\n    // connRef105\n    connRef = new ConnRef(router, 105);\n    srcPt = ConnEnd(Point(318.8192818798844, 988.8150929419839), 2);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(318.8192818798844, 1039.815092941984), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef106\n    connRef = new ConnRef(router, 106);\n    srcPt = ConnEnd(Point(318.8192818798844, 911.815092940984), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(318.8192818798844, 958.8150929419839), 1);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef107\n    connRef = new ConnRef(router, 107);\n    srcPt = ConnEnd(Point(-18.18071812011561, 911.815092940984), 4);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(-111.1807181201156, 856.315092940984), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef108\n    connRef = new ConnRef(router, 108);\n    srcPt = ConnEnd(Point(318.8192818798844, 911.815092940984), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(11.81928187988439, 911.815092940984), 8);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef109\n    connRef = new ConnRef(router, 109);\n    srcPt = ConnEnd(Point(456.8192818798844, 871.315092940984), 2);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(318.8192818798844, 911.815092940984), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef110\n    connRef = new ConnRef(router, 110);\n    srcPt = ConnEnd(Point(589.1049961655988, 648.315092940984), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(456.8192818798844, 841.315092940984), 1);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef111\n    connRef = new ConnRef(router, 111);\n    srcPt = ConnEnd(Point(1013.504996167599, 603.9817596076507), 2);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(1013.504996167599, 750.315092940984), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef112\n    connRef = new ConnRef(router, 112);\n    srcPt = ConnEnd(Point(970.1049961675988, 307.9817596056507), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(886.1049961675988, 648.315092940984), 8);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef113\n    connRef = new ConnRef(router, 113);\n    srcPt = ConnEnd(Point(856.1049961675988, 648.315092940984), 4);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(589.1049961655988, 648.315092940984), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef114\n    connRef = new ConnRef(router, 114);\n    srcPt = ConnEnd(Point(441.8192818798844, 681.315092940984), 4);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(318.8192818798844, 648.315092940984), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef115\n    connRef = new ConnRef(router, 115);\n    srcPt = ConnEnd(Point(589.1049961655988, 307.9817596056507), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(589.1049961655988, 420.9817596066507), 1);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef116\n    connRef = new ConnRef(router, 116);\n    srcPt = ConnEnd(Point(589.1049961655988, 450.9817596066507), 2);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(589.1049961655988, 526.9817596066507), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef117\n    connRef = new ConnRef(router, 117);\n    srcPt = ConnEnd(Point(589.1049961655988, 307.9817596056507), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(471.8192818798844, 493.9817596066507), 8);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef118\n    connRef = new ConnRef(router, 118);\n    srcPt = ConnEnd(Point(471.8192818798844, 144.9817596056507), 8);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(589.1049961655988, 307.9817596056507), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints118(1);\n    checkpoints118[0] = Checkpoint(Point(494.8192818798844, 240.9817596056507), (ConnDirFlags) 15, (ConnDirFlags) 8);\n    connRef->setRoutingCheckpoints(checkpoints118);\n\n    // connRef119\n    connRef = new ConnRef(router, 119);\n    srcPt = ConnEnd(Point(441.8192818798844, 144.9817596056507), 4);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(318.8192818798844, -55.0182403953493), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints119(1);\n    checkpoints119[0] = Checkpoint(Point(418.8192818798844, 240.9817596056507), (ConnDirFlags) 15, (ConnDirFlags) 4);\n    connRef->setRoutingCheckpoints(checkpoints119);\n\n    // connRef120\n    connRef = new ConnRef(router, 120);\n    srcPt = ConnEnd(Point(970.1049961675988, 307.9817596056507), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(1013.504996167599, 420.9817596066507), 1);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef121\n    connRef = new ConnRef(router, 121);\n    srcPt = ConnEnd(Point(750.1049961665988, 286.9817596056507), 8);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(970.1049961675988, 307.9817596056507), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints121(1);\n    checkpoints121[0] = Checkpoint(Point(773.1049961665988, 307.9817596056507), (ConnDirFlags) 15, (ConnDirFlags) 8);\n    connRef->setRoutingCheckpoints(checkpoints121);\n\n    // connRef122\n    connRef = new ConnRef(router, 122);\n    srcPt = ConnEnd(Point(720.1049961665988, 286.9817596056507), 4);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(589.1049961655988, 307.9817596056507), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints122(1);\n    checkpoints122[0] = Checkpoint(Point(697.1049961665988, 307.9817596056507), (ConnDirFlags) 15, (ConnDirFlags) 4);\n    connRef->setRoutingCheckpoints(checkpoints122);\n\n    // connRef123\n    connRef = new ConnRef(router, 123);\n    srcPt = ConnEnd(Point(471.8192818798844, 219.9817596056507), 8);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(589.1049961655988, 307.9817596056507), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints123(1);\n    checkpoints123[0] = Checkpoint(Point(494.8192818798844, 240.9817596056507), (ConnDirFlags) 15, (ConnDirFlags) 8);\n    connRef->setRoutingCheckpoints(checkpoints123);\n\n    // connRef124\n    connRef = new ConnRef(router, 124);\n    srcPt = ConnEnd(Point(441.8192818798844, 219.9817596056507), 4);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(318.8192818798844, -55.0182403953493), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints124(1);\n    checkpoints124[0] = Checkpoint(Point(418.8192818798844, 240.9817596056507), (ConnDirFlags) 15, (ConnDirFlags) 4);\n    connRef->setRoutingCheckpoints(checkpoints124);\n\n    // connRef125\n    connRef = new ConnRef(router, 125);\n    srcPt = ConnEnd(Point(750.1049961665988, 328.9817596056507), 8);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(970.1049961675988, 307.9817596056507), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints125(1);\n    checkpoints125[0] = Checkpoint(Point(773.1049961665988, 307.9817596056507), (ConnDirFlags) 15, (ConnDirFlags) 8);\n    connRef->setRoutingCheckpoints(checkpoints125);\n\n    // connRef126\n    connRef = new ConnRef(router, 126);\n    srcPt = ConnEnd(Point(441.8192818798844, -171.0182403963493), 4);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(318.8192818798844, -150.0182403963493), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints126(1);\n    checkpoints126[0] = Checkpoint(Point(418.8192818798844, -150.0182403963493), (ConnDirFlags) 15, (ConnDirFlags) 4);\n    connRef->setRoutingCheckpoints(checkpoints126);\n\n    // connRef127\n    connRef = new ConnRef(router, 127);\n    srcPt = ConnEnd(Point(589.1049961655988, -198.0182403963493), 1);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(589.1049961655988, -245.0182403973492), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef128\n    connRef = new ConnRef(router, 128);\n    srcPt = ConnEnd(Point(471.8192818798844, 261.9817596056507), 8);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(589.1049961655988, 307.9817596056507), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints128(1);\n    checkpoints128[0] = Checkpoint(Point(494.8192818798844, 240.9817596056507), (ConnDirFlags) 15, (ConnDirFlags) 8);\n    connRef->setRoutingCheckpoints(checkpoints128);\n\n    // connRef129\n    connRef = new ConnRef(router, 129);\n    srcPt = ConnEnd(Point(441.8192818798844, 261.9817596056507), 4);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(318.8192818798844, -55.0182403953493), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints129(1);\n    checkpoints129[0] = Checkpoint(Point(418.8192818798844, 240.9817596056507), (ConnDirFlags) 15, (ConnDirFlags) 4);\n    connRef->setRoutingCheckpoints(checkpoints129);\n#endif\n\n    // connRef130\n    connRef = new ConnRef(router, 130);\n    srcPt = ConnEnd(Point(47.81928187988439, -55.0182403953493), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(111.8192818798844, -55.0182403953493), 4);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n#if ALL\n    // connRef131\n    connRef = new ConnRef(router, 131);\n    srcPt = ConnEnd(Point(141.8192818798844, -55.0182403953493), 8);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(318.8192818798844, -55.0182403953493), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef132\n    connRef = new ConnRef(router, 132);\n    srcPt = ConnEnd(Point(-21.18071812011561, -55.0182403953493), 8);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(47.81928187988439, -55.0182403953493), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef133\n    connRef = new ConnRef(router, 133);\n    srcPt = ConnEnd(Point(-111.1807181201156, -55.0182403953493), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(-51.18071812011561, -55.0182403953493), 4);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef134\n    connRef = new ConnRef(router, 134);\n    srcPt = ConnEnd(Point(257.8192818798844, 355.9817596056507), 2);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(257.8192818798844, 402.9817596066507), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef135\n    connRef = new ConnRef(router, 135);\n    srcPt = ConnEnd(Point(318.8192818798844, -55.0182403953493), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(257.8192818798844, 325.9817596056507), 1);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef136\n    connRef = new ConnRef(router, 136);\n    srcPt = ConnEnd(Point(318.8192818798844, -55.0182403953493), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(126.8192818798844, 259.9817596056507), 1);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef137\n    connRef = new ConnRef(router, 137);\n    srcPt = ConnEnd(Point(441.8192818798844, -22.0182403953493), 4);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(318.8192818798844, -55.0182403953493), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef138\n    connRef = new ConnRef(router, 138);\n    srcPt = ConnEnd(Point(853.1049961675988, 154.9817596056507), 8);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(970.1049961675988, 307.9817596056507), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints138(1);\n    checkpoints138[0] = Checkpoint(Point(876.1049961675988, 175.9817596056507), (ConnDirFlags) 15, (ConnDirFlags) 8);\n    connRef->setRoutingCheckpoints(checkpoints138);\n\n    // connRef139\n    connRef = new ConnRef(router, 139);\n    srcPt = ConnEnd(Point(853.1049961675988, 196.9817596056507), 8);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(970.1049961675988, 307.9817596056507), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints139(1);\n    checkpoints139[0] = Checkpoint(Point(876.1049961675988, 175.9817596056507), (ConnDirFlags) 15, (ConnDirFlags) 8);\n    connRef->setRoutingCheckpoints(checkpoints139);\n\n    // connRef140\n    connRef = new ConnRef(router, 140);\n    srcPt = ConnEnd(Point(853.1049961675988, 79.98175960565069), 8);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(970.1049961675988, 307.9817596056507), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints140(1);\n    checkpoints140[0] = Checkpoint(Point(876.1049961675988, 175.9817596056507), (ConnDirFlags) 15, (ConnDirFlags) 8);\n    connRef->setRoutingCheckpoints(checkpoints140);\n\n    // connRef141\n    connRef = new ConnRef(router, 141);\n    srcPt = ConnEnd(Point(441.8192818798844, -129.0182403963493), 4);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(318.8192818798844, -150.0182403963493), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints141(1);\n    checkpoints141[0] = Checkpoint(Point(418.8192818798844, -150.0182403963493), (ConnDirFlags) 15, (ConnDirFlags) 4);\n    connRef->setRoutingCheckpoints(checkpoints141);\n\n    // connRef142\n    connRef = new ConnRef(router, 142);\n    srcPt = ConnEnd(Point(720.1049961665988, 328.9817596056507), 4);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(589.1049961655988, 307.9817596056507), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints142(1);\n    checkpoints142[0] = Checkpoint(Point(697.1049961665988, 307.9817596056507), (ConnDirFlags) 15, (ConnDirFlags) 4);\n    connRef->setRoutingCheckpoints(checkpoints142);\n\n    // connRef143\n    connRef = new ConnRef(router, 143);\n    srcPt = ConnEnd(Point(589.1049961655988, 648.315092940984), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(471.8192818798844, 681.315092940984), 8);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef144\n    connRef = new ConnRef(router, 144);\n    srcPt = ConnEnd(Point(87.81928187988439, 935.8150929419839), 2);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(87.81928187988439, 985.8150929419839), 1);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef145\n    connRef = new ConnRef(router, 145);\n    srcPt = ConnEnd(Point(87.81928187988439, 1077.815092941984), 1);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(87.81928187988439, 1027.815092941984), 2);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef146\n    connRef = new ConnRef(router, 146);\n    srcPt = ConnEnd(Point(376.8192818798844, 973.8150929419839), 4);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(318.8192818798844, 973.8150929419839), 8);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef147\n    connRef = new ConnRef(router, 147);\n    srcPt = ConnEnd(Point(-3.180718120115614, 861.815092940984), 2);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(-3.180718120115614, 911.815092940984), 1);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef148\n    connRef = new ConnRef(router, 148);\n    srcPt = ConnEnd(Point(514.8192818798843, 856.315092940984), 4);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(456.8192818798844, 856.315092940984), 8);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef149\n    connRef = new ConnRef(router, 149);\n    srcPt = ConnEnd(Point(1071.504996167599, 588.9817596076507), 4);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(1013.504996167599, 588.9817596076507), 8);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef150\n    connRef = new ConnRef(router, 150);\n    srcPt = ConnEnd(Point(871.1049961675988, 598.315092940984), 2);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(871.1049961675988, 648.315092940984), 1);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef151\n    connRef = new ConnRef(router, 151);\n    srcPt = ConnEnd(Point(456.8192818798844, 731.315092940984), 1);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(456.8192818798844, 681.315092940984), 2);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef152\n    connRef = new ConnRef(router, 152);\n    srcPt = ConnEnd(Point(126.8192818798844, 598.315092940984), 2);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(126.8192818798844, 648.315092940984), 1);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef153\n    connRef = new ConnRef(router, 153);\n    srcPt = ConnEnd(Point(647.1049961655988, 435.9817596066507), 4);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(589.1049961655988, 435.9817596066507), 8);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef154\n    connRef = new ConnRef(router, 154);\n    srcPt = ConnEnd(Point(456.8192818798844, 443.9817596066507), 2);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(456.8192818798844, 493.9817596066507), 1);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef155\n    connRef = new ConnRef(router, 155);\n    srcPt = ConnEnd(Point(456.8192818798844, 94.98175960565069), 2);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(456.8192818798844, 144.9817596056507), 1);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef156\n    connRef = new ConnRef(router, 156);\n    srcPt = ConnEnd(Point(1071.504996167599, 435.9817596066507), 4);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(1013.504996167599, 435.9817596066507), 8);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef157\n    connRef = new ConnRef(router, 157);\n    srcPt = ConnEnd(Point(735.1049961665988, 236.9817596056507), 2);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(735.1049961665988, 286.9817596056507), 1);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef158\n    connRef = new ConnRef(router, 158);\n    srcPt = ConnEnd(Point(456.8192818798844, 169.9817596056507), 2);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(456.8192818798844, 219.9817596056507), 1);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef159\n    connRef = new ConnRef(router, 159);\n    srcPt = ConnEnd(Point(735.1049961665988, 378.9817596056507), 1);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(735.1049961665988, 328.9817596056507), 2);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef160\n    connRef = new ConnRef(router, 160);\n    srcPt = ConnEnd(Point(456.8192818798844, -221.0182403963493), 2);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(456.8192818798844, -171.0182403963493), 1);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef161\n    connRef = new ConnRef(router, 161);\n    srcPt = ConnEnd(Point(647.1049961655988, -183.0182403963493), 4);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(589.1049961655988, -183.0182403963493), 8);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef162\n    connRef = new ConnRef(router, 162);\n    srcPt = ConnEnd(Point(456.8192818798844, 311.9817596056507), 1);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(456.8192818798844, 261.9817596056507), 2);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef163\n    connRef = new ConnRef(router, 163);\n    srcPt = ConnEnd(Point(126.8192818798844, -105.0182403953493), 2);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(126.8192818798844, -55.0182403953493), 1);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef164\n    connRef = new ConnRef(router, 164);\n    srcPt = ConnEnd(Point(-36.18071812011561, -105.0182403953493), 2);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(-36.18071812011561, -55.0182403953493), 1);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef165\n    connRef = new ConnRef(router, 165);\n    srcPt = ConnEnd(Point(315.8192818798844, 340.9817596056507), 4);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(257.8192818798844, 340.9817596056507), 8);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef166\n    connRef = new ConnRef(router, 166);\n    srcPt = ConnEnd(Point(184.8192818798844, 274.9817596056507), 4);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(126.8192818798844, 274.9817596056507), 8);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef167\n    connRef = new ConnRef(router, 167);\n    srcPt = ConnEnd(Point(456.8192818798844, 27.9817596046507), 1);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(456.8192818798844, -22.0182403953493), 2);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef168\n    connRef = new ConnRef(router, 168);\n    srcPt = ConnEnd(Point(838.1049961675988, 104.9817596056507), 2);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(838.1049961675988, 154.9817596056507), 1);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef169\n    connRef = new ConnRef(router, 169);\n    srcPt = ConnEnd(Point(838.1049961675988, 246.9817596056507), 1);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(838.1049961675988, 196.9817596056507), 2);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef170\n    connRef = new ConnRef(router, 170);\n    srcPt = ConnEnd(Point(456.8192818798844, -79.01824039634928), 1);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(456.8192818798844, -129.0182403963493), 2);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef171\n    connRef = new ConnRef(router, 171);\n    srcPt = ConnEnd(Point(838.1049961675988, 29.98175960565069), 2);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(838.1049961675988, 79.98175960565069), 1);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef172\n    connRef = new ConnRef(router, 172);\n    srcPt = ConnEnd(Point(-111.1807181201156, -55.0182403953493), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(-111.1807181201156, 460.9817596066507), 1);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef173\n    connRef = new ConnRef(router, 173);\n    srcPt = ConnEnd(Point(-111.1807181201156, 856.315092940984), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(-111.1807181201156, 614.9817596066507), 2);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n#endif\n\n    router->processTransaction();\n    router->outputDiagram(\"output/nudgingSkipsCheckpoint01\");\n    Avoid::PolyLine route90 = connRef90->displayRoute();\n    Avoid::PolyLine route91 = connRef91->displayRoute();\n    \n    delete router;\n    return (route90.size() == 7 && route91.size() == 7) ? 0 : 1;\n};\n"
  },
  {
    "path": "cola/libavoid/tests/nudgingSkipsCheckpoint02.cpp",
    "content": "// Regression test to catch problem where orthogonal segments from the same \n// connector were being merged with others going through checkpoints and \n// being simplified so as not to pass the checkpoint anymore.\n// Based on ec00480.\n#include \"libavoid/libavoid.h\"\nusing namespace Avoid;\nint main(void) {\n    Router *router = new Router(\n            PolyLineRouting | OrthogonalRouting);\n    router->setRoutingParameter((RoutingParameter)0, 50);\n    router->setRoutingParameter((RoutingParameter)1, 0);\n    router->setRoutingParameter((RoutingParameter)2, 0);\n    router->setRoutingParameter((RoutingParameter)3, 4000);\n    router->setRoutingParameter((RoutingParameter)4, 0);\n    router->setRoutingParameter((RoutingParameter)5, 100);\n    router->setRoutingParameter((RoutingParameter)6, 0);\n    router->setRoutingParameter((RoutingParameter)7, 4);\n    router->setRoutingOption((RoutingOption)0, true);\n    router->setRoutingOption((RoutingOption)1, true);\n    router->setRoutingOption((RoutingOption)2, false);\n    router->setRoutingOption((RoutingOption)3, false);\n\n#ifdef ALL\n    Polygon poly1(4);\n    poly1.ps[0] = Point(1395.728847251115, 277.2282734381338);\n    poly1.ps[1] = Point(1395.728847251115, 339.2282734381338);\n    poly1.ps[2] = Point(1333.728847251115, 339.2282734381338);\n    poly1.ps[3] = Point(1333.728847251115, 277.2282734381338);\n    new ShapeRef(router, poly1, 1);\n\n    Polygon poly2(4);\n    poly2.ps[0] = Point(-406.4508064345389, -754.3431551372947);\n    poly2.ps[1] = Point(-406.4508064345389, -719.3431551372947);\n    poly2.ps[2] = Point(-635.4508064345389, -719.3431551372947);\n    poly2.ps[3] = Point(-635.4508064345389, -754.3431551372947);\n    new ShapeRef(router, poly2, 2);\n\n    Polygon poly3(4);\n    poly3.ps[0] = Point(887.7288472481148, -474.3431551372947);\n    poly3.ps[1] = Point(887.7288472481148, -310.3431551372947);\n    poly3.ps[2] = Point(803.7288472481148, -310.3431551372947);\n    poly3.ps[3] = Point(803.7288472481148, -474.3431551372947);\n    new ShapeRef(router, poly3, 3);\n\n    Polygon poly4(4);\n    poly4.ps[0] = Point(723.2288472481148, -439.8431551372947);\n    poly4.ps[1] = Point(723.2288472481148, -384.8431551372947);\n    poly4.ps[2] = Point(515.2288472481148, -384.8431551372947);\n    poly4.ps[3] = Point(515.2288472481148, -439.8431551372947);\n    new ShapeRef(router, poly4, 4);\n\n    Polygon poly5(4);\n    poly5.ps[0] = Point(543.4431329624006, -281.3431551362947);\n    poly5.ps[1] = Point(543.4431329624006, -231.3431551362947);\n    poly5.ps[2] = Point(301.4431329624006, -231.3431551362947);\n    poly5.ps[3] = Point(301.4431329624006, -281.3431551362947);\n    new ShapeRef(router, poly5, 5);\n\n    Polygon poly6(4);\n    poly6.ps[0] = Point(261.4431329624006, -444.8431551372947);\n    poly6.ps[1] = Point(261.4431329624006, -389.8431551372947);\n    poly6.ps[2] = Point(49.44313296240057, -389.8431551372947);\n    poly6.ps[3] = Point(49.44313296240057, -444.8431551372947);\n    new ShapeRef(router, poly6, 6);\n\n    Polygon poly7(4);\n    poly7.ps[0] = Point(976.7288472491148, 236.2282734371338);\n    poly7.ps[1] = Point(976.7288472491148, 256.2282734371338);\n    poly7.ps[2] = Point(944.7288472491148, 256.2282734371338);\n    poly7.ps[3] = Point(944.7288472491148, 236.2282734371338);\n    new ShapeRef(router, poly7, 7);\n\n    Polygon poly8(4);\n    poly8.ps[0] = Point(865.7288472481148, 364.561606771467);\n    poly8.ps[1] = Point(865.7288472481148, 384.561606771467);\n    poly8.ps[2] = Point(833.7288472481148, 384.561606771467);\n    poly8.ps[3] = Point(833.7288472481148, 364.561606771467);\n    new ShapeRef(router, poly8, 8);\n\n    Polygon poly9(4);\n    poly9.ps[0] = Point(634.7288472481148, 424.9901782000385);\n    poly9.ps[1] = Point(634.7288472481148, 444.9901782000385);\n    poly9.ps[2] = Point(602.7288472481148, 444.9901782000385);\n    poly9.ps[3] = Point(602.7288472481148, 424.9901782000385);\n    new ShapeRef(router, poly9, 9);\n#endif\n\n    Polygon poly10(4);\n    poly10.ps[0] = Point(-264.9508064325389, 376.2282734371338);\n    poly10.ps[1] = Point(-264.9508064325389, 396.2282734371338);\n    poly10.ps[2] = Point(-296.9508064325389, 396.2282734371338);\n    poly10.ps[3] = Point(-296.9508064325389, 376.2282734371338);\n    new ShapeRef(router, poly10, 10);\n\n    Polygon poly11(4);\n    poly11.ps[0] = Point(-264.9508064325389, 451.2282734371338);\n    poly11.ps[1] = Point(-264.9508064325389, 471.2282734371338);\n    poly11.ps[2] = Point(-296.9508064325389, 471.2282734371338);\n    poly11.ps[3] = Point(-296.9508064325389, 451.2282734371338);\n    new ShapeRef(router, poly11, 11);\n\n    Polygon poly12(4);\n    poly12.ps[0] = Point(-264.9508064325389, 526.2282734371338);\n    poly12.ps[1] = Point(-264.9508064325389, 546.2282734371338);\n    poly12.ps[2] = Point(-296.9508064325389, 546.2282734371338);\n    poly12.ps[3] = Point(-296.9508064325389, 526.2282734371338);\n    new ShapeRef(router, poly12, 12);\n\n    Polygon poly13(4);\n    poly13.ps[0] = Point(-264.9508064325389, 601.2282734371338);\n    poly13.ps[1] = Point(-264.9508064325389, 621.2282734371338);\n    poly13.ps[2] = Point(-296.9508064325389, 621.2282734371338);\n    poly13.ps[3] = Point(-296.9508064325389, 601.2282734371338);\n    new ShapeRef(router, poly13, 13);\n\n    Polygon poly14(4);\n    poly14.ps[0] = Point(-264.9508064325389, 676.2282734371338);\n    poly14.ps[1] = Point(-264.9508064325389, 696.2282734371338);\n    poly14.ps[2] = Point(-296.9508064325389, 696.2282734371338);\n    poly14.ps[3] = Point(-296.9508064325389, 676.2282734371338);\n    new ShapeRef(router, poly14, 14);\n\n    Polygon poly15(4);\n    poly15.ps[0] = Point(-264.9508064325389, 943.2282734371338);\n    poly15.ps[1] = Point(-264.9508064325389, 963.2282734371338);\n    poly15.ps[2] = Point(-296.9508064325389, 963.2282734371338);\n    poly15.ps[3] = Point(-296.9508064325389, 943.2282734371338);\n    new ShapeRef(router, poly15, 15);\n\n    Polygon poly16(4);\n    poly16.ps[0] = Point(-264.9508064325389, 751.2282734371338);\n    poly16.ps[1] = Point(-264.9508064325389, 771.2282734371338);\n    poly16.ps[2] = Point(-296.9508064325389, 771.2282734371338);\n    poly16.ps[3] = Point(-296.9508064325389, 751.2282734371338);\n    new ShapeRef(router, poly16, 16);\n\n    Polygon poly17(4);\n    poly17.ps[0] = Point(-264.9508064325389, 793.2282734371338);\n    poly17.ps[1] = Point(-264.9508064325389, 813.2282734371338);\n    poly17.ps[2] = Point(-296.9508064325389, 813.2282734371338);\n    poly17.ps[3] = Point(-296.9508064325389, 793.2282734371338);\n    new ShapeRef(router, poly17, 17);\n\n    Polygon poly18(4);\n    poly18.ps[0] = Point(-264.9508064325389, 868.2282734371338);\n    poly18.ps[1] = Point(-264.9508064325389, 888.2282734371338);\n    poly18.ps[2] = Point(-296.9508064325389, 888.2282734371338);\n    poly18.ps[3] = Point(-296.9508064325389, 868.2282734371338);\n    new ShapeRef(router, poly18, 18);\n\n    Polygon poly19(4);\n    poly19.ps[0] = Point(-264.9508064325389, 1018.228273437134);\n    poly19.ps[1] = Point(-264.9508064325389, 1038.228273437134);\n    poly19.ps[2] = Point(-296.9508064325389, 1038.228273437134);\n    poly19.ps[3] = Point(-296.9508064325389, 1018.228273437134);\n    new ShapeRef(router, poly19, 19);\n\n#ifdef ALL\n    Polygon poly20(4);\n    poly20.ps[0] = Point(-392.9508064335388, 202.2282734381338);\n    poly20.ps[1] = Point(-392.9508064335388, 222.2282734381338);\n    poly20.ps[2] = Point(-424.9508064335388, 222.2282734381338);\n    poly20.ps[3] = Point(-424.9508064335388, 202.2282734381338);\n    new ShapeRef(router, poly20, 20);\n\n    Polygon poly21(4);\n    poly21.ps[0] = Point(-392.9508064335388, 277.2282734381338);\n    poly21.ps[1] = Point(-392.9508064335388, 297.2282734381338);\n    poly21.ps[2] = Point(-424.9508064335388, 297.2282734381338);\n    poly21.ps[3] = Point(-424.9508064335388, 277.2282734381338);\n    new ShapeRef(router, poly21, 21);\n\n    Polygon poly22(4);\n    poly22.ps[0] = Point(-392.9508064335388, 319.2282734381338);\n    poly22.ps[1] = Point(-392.9508064335388, 339.2282734381338);\n    poly22.ps[2] = Point(-424.9508064335388, 339.2282734381338);\n    poly22.ps[3] = Point(-424.9508064335388, 319.2282734381338);\n    new ShapeRef(router, poly22, 22);\n\n    Polygon poly23(4);\n    poly23.ps[0] = Point(601.7288472481148, 236.2282734371338);\n    poly23.ps[1] = Point(601.7288472481148, 256.2282734371338);\n    poly23.ps[2] = Point(569.7288472481148, 256.2282734371338);\n    poly23.ps[3] = Point(569.7288472481148, 236.2282734371338);\n    new ShapeRef(router, poly23, 23);\n\n    Polygon poly24(4);\n    poly24.ps[0] = Point(727.7288472481148, -284.3431551362947);\n    poly24.ps[1] = Point(727.7288472481148, -252.3431551362947);\n    poly24.ps[2] = Point(707.7288472481148, -252.3431551362947);\n    poly24.ps[3] = Point(707.7288472481148, -284.3431551362947);\n    new ShapeRef(router, poly24, 24);\n\n    Polygon poly25(4);\n    poly25.ps[0] = Point(168.7764662957339, 153.6568448657052);\n    poly25.ps[1] = Point(168.7764662957339, 185.6568448657052);\n    poly25.ps[2] = Point(148.7764662957339, 185.6568448657052);\n    poly25.ps[3] = Point(148.7764662957339, 153.6568448657052);\n    new ShapeRef(router, poly25, 25);\n\n    Polygon poly26(4);\n    poly26.ps[0] = Point(257.9431329624006, -143.3431551362948);\n    poly26.ps[1] = Point(257.9431329624006, -123.3431551362948);\n    poly26.ps[2] = Point(225.9431329624006, -123.3431551362948);\n    poly26.ps[3] = Point(225.9431329624006, -143.3431551362948);\n    new ShapeRef(router, poly26, 26);\n\n    Polygon poly27(4);\n    poly27.ps[0] = Point(354.4431329624006, -561.3431551372947);\n    poly27.ps[1] = Point(354.4431329624006, -541.3431551372947);\n    poly27.ps[2] = Point(322.4431329624006, -541.3431551372947);\n    poly27.ps[3] = Point(322.4431329624006, -561.3431551372947);\n    new ShapeRef(router, poly27, 27);\n\n    Polygon poly28(4);\n    poly28.ps[0] = Point(568.7288472481148, -651.8431551372947);\n    poly28.ps[1] = Point(568.7288472481148, -631.8431551372947);\n    poly28.ps[2] = Point(536.7288472481148, -631.8431551372947);\n    poly28.ps[3] = Point(536.7288472481148, -651.8431551372947);\n    new ShapeRef(router, poly28, 28);\n\n    Polygon poly29(4);\n    poly29.ps[0] = Point(-210.9735337052661, 120.6568448657052);\n    poly29.ps[1] = Point(-210.9735337052661, 152.6568448657052);\n    poly29.ps[2] = Point(-230.9735337052661, 152.6568448657052);\n    poly29.ps[3] = Point(-230.9735337052661, 120.6568448657052);\n    new ShapeRef(router, poly29, 29);\n\n    Polygon poly30(4);\n    poly30.ps[0] = Point(-210.9735337052661, -372.3431551372947);\n    poly30.ps[1] = Point(-210.9735337052661, -340.3431551372947);\n    poly30.ps[2] = Point(-230.9735337052661, -340.3431551372947);\n    poly30.ps[3] = Point(-230.9735337052661, -372.3431551372947);\n    new ShapeRef(router, poly30, 30);\n\n    Polygon poly31(4);\n    poly31.ps[0] = Point(1446.728847251115, 424.9901782000385);\n    poly31.ps[1] = Point(1446.728847251115, 444.9901782000385);\n    poly31.ps[2] = Point(1414.728847251115, 444.9901782000385);\n    poly31.ps[3] = Point(1414.728847251115, 424.9901782000385);\n    new ShapeRef(router, poly31, 31);\n\n    Polygon poly32(4);\n    poly32.ps[0] = Point(420.4431329624006, 424.9901782000385);\n    poly32.ps[1] = Point(420.4431329624006, 444.9901782000385);\n    poly32.ps[2] = Point(388.4431329624006, 444.9901782000385);\n    poly32.ps[3] = Point(388.4431329624006, 424.9901782000385);\n    new ShapeRef(router, poly32, 32);\n\n    Polygon poly33(4);\n    poly33.ps[0] = Point(447.4431329624006, 869.3235115333719);\n    poly33.ps[1] = Point(447.4431329624006, 901.3235115333719);\n    poly33.ps[2] = Point(427.4431329624006, 901.3235115333719);\n    poly33.ps[3] = Point(427.4431329624006, 869.3235115333719);\n    new ShapeRef(router, poly33, 33);\n\n    Polygon poly34(4);\n    poly34.ps[0] = Point(447.4431329624006, 578.9901782000385);\n    poly34.ps[1] = Point(447.4431329624006, 610.9901782000385);\n    poly34.ps[2] = Point(427.4431329624006, 610.9901782000385);\n    poly34.ps[3] = Point(427.4431329624006, 578.9901782000385);\n    new ShapeRef(router, poly34, 34);\n\n    Polygon poly35(4);\n    poly35.ps[0] = Point(-555.9508064345389, -439.3431551372947);\n    poly35.ps[1] = Point(-555.9508064345389, -377.3431551372947);\n    poly35.ps[2] = Point(-617.9508064345389, -377.3431551372947);\n    poly35.ps[3] = Point(-617.9508064345389, -439.3431551372947);\n    new ShapeRef(router, poly35, 35);\n\n    Polygon poly36(4);\n    poly36.ps[0] = Point(-189.9735337052661, -582.3431551372947);\n    poly36.ps[1] = Point(-189.9735337052661, -520.3431551372947);\n    poly36.ps[2] = Point(-251.9735337052661, -520.3431551372947);\n    poly36.ps[3] = Point(-251.9735337052661, -582.3431551372947);\n    new ShapeRef(router, poly36, 36);\n\n    Polygon poly37(4);\n    poly37.ps[0] = Point(468.4431329624006, -354.3431551372947);\n    poly37.ps[1] = Point(468.4431329624006, -292.3431551372947);\n    poly37.ps[2] = Point(406.4431329624006, -292.3431551372947);\n    poly37.ps[3] = Point(406.4431329624006, -354.3431551372947);\n    new ShapeRef(router, poly37, 37);\n\n    Polygon poly38(4);\n    poly38.ps[0] = Point(748.7288472481148, -549.3431551372947);\n    poly38.ps[1] = Point(748.7288472481148, -487.3431551372947);\n    poly38.ps[2] = Point(686.7288472481148, -487.3431551372947);\n    poly38.ps[3] = Point(686.7288472481148, -549.3431551372947);\n    new ShapeRef(router, poly38, 38);\n\n    Polygon poly39(4);\n    poly39.ps[0] = Point(649.7288472481148, -233.3431551362948);\n    poly39.ps[1] = Point(649.7288472481148, -171.3431551362948);\n    poly39.ps[2] = Point(587.7288472481148, -171.3431551362948);\n    poly39.ps[3] = Point(587.7288472481148, -233.3431551362948);\n    new ShapeRef(router, poly39, 39);\n\n    Polygon poly40(4);\n    poly40.ps[0] = Point(189.7764662957339, 72.65684486570521);\n    poly40.ps[1] = Point(189.7764662957339, 134.6568448657052);\n    poly40.ps[2] = Point(127.7764662957339, 134.6568448657052);\n    poly40.ps[3] = Point(127.7764662957339, 72.65684486570521);\n    new ShapeRef(router, poly40, 40);\n\n    Polygon poly41(4);\n    poly41.ps[0] = Point(-189.9735337052661, -266.3431551362947);\n    poly41.ps[1] = Point(-189.9735337052661, -204.3431551362947);\n    poly41.ps[2] = Point(-251.9735337052661, -204.3431551362947);\n    poly41.ps[3] = Point(-251.9735337052661, -266.3431551362947);\n    new ShapeRef(router, poly41, 41);\n#endif\n\n    Polygon poly42(4);\n    poly42.ps[0] = Point(189.7764662957339, 215.2282734371338);\n    poly42.ps[1] = Point(189.7764662957339, 277.2282734371338);\n    poly42.ps[2] = Point(127.7764662957339, 277.2282734371338);\n    poly42.ps[3] = Point(127.7764662957339, 215.2282734371338);\n    new ShapeRef(router, poly42, 42);\n\n#ifdef ALL\n    Polygon poly43(4);\n    poly43.ps[0] = Point(748.7288472481148, 215.2282734371338);\n    poly43.ps[1] = Point(748.7288472481148, 277.2282734371338);\n    poly43.ps[2] = Point(686.7288472481148, 277.2282734371338);\n    poly43.ps[3] = Point(686.7288472481148, 215.2282734371338);\n    new ShapeRef(router, poly43, 43);\n\n    Polygon poly44(4);\n    poly44.ps[0] = Point(1329.728847251115, 215.2282734371338);\n    poly44.ps[1] = Point(1329.728847251115, 277.2282734371338);\n    poly44.ps[2] = Point(1267.728847251115, 277.2282734371338);\n    poly44.ps[3] = Point(1267.728847251115, 215.2282734371338);\n    new ShapeRef(router, poly44, 44);\n\n    Polygon poly45(4);\n    poly45.ps[0] = Point(-594.9508064345389, 215.2282734371338);\n    poly45.ps[1] = Point(-594.9508064345389, 277.2282734371338);\n    poly45.ps[2] = Point(-656.9508064345389, 277.2282734371338);\n    poly45.ps[3] = Point(-656.9508064345389, 215.2282734371338);\n    new ShapeRef(router, poly45, 45);\n\n    Polygon poly46(4);\n    poly46.ps[0] = Point(-522.9508064345389, 277.2282734381338);\n    poly46.ps[1] = Point(-522.9508064345389, 339.2282734381338);\n    poly46.ps[2] = Point(-584.9508064345389, 339.2282734381338);\n    poly46.ps[3] = Point(-584.9508064345389, 277.2282734381338);\n    new ShapeRef(router, poly46, 46);\n\n    Polygon poly47(4);\n    poly47.ps[0] = Point(0.776466294733865, 277.2282734381338);\n    poly47.ps[1] = Point(0.776466294733865, 339.2282734381338);\n    poly47.ps[2] = Point(-61.22353370526614, 339.2282734381338);\n    poly47.ps[3] = Point(-61.22353370526614, 277.2282734381338);\n    new ShapeRef(router, poly47, 47);\n\n    Polygon poly48(4);\n    poly48.ps[0] = Point(272.9431329624006, 277.2282734381338);\n    poly48.ps[1] = Point(272.9431329624006, 339.2282734381338);\n    poly48.ps[2] = Point(210.9431329624006, 339.2282734381338);\n    poly48.ps[3] = Point(210.9431329624006, 277.2282734381338);\n    new ShapeRef(router, poly48, 48);\n\n    Polygon poly49(4);\n    poly49.ps[0] = Point(550.7288472481148, 403.9901782000385);\n    poly49.ps[1] = Point(550.7288472481148, 465.9901782000385);\n    poly49.ps[2] = Point(488.7288472481148, 465.9901782000385);\n    poly49.ps[3] = Point(488.7288472481148, 403.9901782000385);\n    new ShapeRef(router, poly49, 49);\n\n    Polygon poly50(4);\n    poly50.ps[0] = Point(682.7288472481148, 887.3235115333719);\n    poly50.ps[1] = Point(682.7288472481148, 949.3235115333719);\n    poly50.ps[2] = Point(620.7288472481148, 949.3235115333719);\n    poly50.ps[3] = Point(620.7288472481148, 887.3235115333719);\n    new ShapeRef(router, poly50, 50);\n\n    Polygon poly51(4);\n    poly51.ps[0] = Point(715.7288472481148, 277.2282734381338);\n    poly51.ps[1] = Point(715.7288472481148, 339.2282734381338);\n    poly51.ps[2] = Point(653.7288472481148, 339.2282734381338);\n    poly51.ps[3] = Point(653.7288472481148, 277.2282734381338);\n    new ShapeRef(router, poly51, 51);\n\n    Polygon poly52(4);\n    poly52.ps[0] = Point(812.7288472481148, 403.9901782000385);\n    poly52.ps[1] = Point(812.7288472481148, 465.9901782000385);\n    poly52.ps[2] = Point(750.7288472481148, 465.9901782000385);\n    poly52.ps[3] = Point(750.7288472481148, 403.9901782000385);\n    new ShapeRef(router, poly52, 52);\n\n    Polygon poly53(4);\n    poly53.ps[0] = Point(1160.728847250115, 277.2282734381338);\n    poly53.ps[1] = Point(1160.728847250115, 339.2282734381338);\n    poly53.ps[2] = Point(1098.728847250115, 339.2282734381338);\n    poly53.ps[3] = Point(1098.728847250115, 277.2282734381338);\n    new ShapeRef(router, poly53, 53);\n\n    Polygon poly54(4);\n    poly54.ps[0] = Point(1362.728847251115, 403.9901782000385);\n    poly54.ps[1] = Point(1362.728847251115, 465.9901782000385);\n    poly54.ps[2] = Point(1300.728847251115, 465.9901782000385);\n    poly54.ps[3] = Point(1300.728847251115, 403.9901782000385);\n    new ShapeRef(router, poly54, 54);\n\n    Polygon poly55(4);\n    poly55.ps[0] = Point(1542.728847251115, 403.9901782000385);\n    poly55.ps[1] = Point(1542.728847251115, 465.9901782000385);\n    poly55.ps[2] = Point(1480.728847251115, 465.9901782000385);\n    poly55.ps[3] = Point(1480.728847251115, 403.9901782000385);\n    new ShapeRef(router, poly55, 55);\n\n    Polygon poly56(4);\n    poly56.ps[0] = Point(-485.9508064345389, 236.2282734371338);\n    poly56.ps[1] = Point(-485.9508064345389, 256.2282734371338);\n    poly56.ps[2] = Point(-517.9508064345389, 256.2282734371338);\n    poly56.ps[3] = Point(-517.9508064345389, 236.2282734371338);\n    new ShapeRef(router, poly56, 56);\n#endif\n\n    Polygon poly57(4);\n    poly57.ps[0] = Point(-264.9508064325389, 1093.228273437134);\n    poly57.ps[1] = Point(-264.9508064325389, 1113.228273437134);\n    poly57.ps[2] = Point(-296.9508064325389, 1113.228273437134);\n    poly57.ps[3] = Point(-296.9508064325389, 1093.228273437134);\n    new ShapeRef(router, poly57, 57);\n\n#ifdef ALL\n    Polygon poly58(4);\n    poly58.ps[0] = Point(-119.8902003719328, 990.3235115333719);\n    poly58.ps[1] = Point(-119.8902003719328, 1052.323511533372);\n    poly58.ps[2] = Point(-181.8902003719328, 1052.323511533372);\n    poly58.ps[3] = Point(-181.8902003719328, 990.3235115333719);\n    new ShapeRef(router, poly58, 58);\n#endif\n\n    Polygon poly59(4);\n    poly59.ps[0] = Point(-119.8902003719328, 765.3235115333719);\n    poly59.ps[1] = Point(-119.8902003719328, 827.3235115333719);\n    poly59.ps[2] = Point(-181.8902003719328, 827.3235115333719);\n    poly59.ps[3] = Point(-181.8902003719328, 765.3235115333719);\n    new ShapeRef(router, poly59, 59);\n\n#ifdef ALL\n    Polygon poly60(4);\n    poly60.ps[0] = Point(402.4431329624006, 765.3235115333719);\n    poly60.ps[1] = Point(402.4431329624006, 827.3235115333719);\n    poly60.ps[2] = Point(340.4431329624006, 827.3235115333719);\n    poly60.ps[3] = Point(340.4431329624006, 765.3235115333719);\n    new ShapeRef(router, poly60, 60);\n\n    Polygon poly61(4);\n    poly61.ps[0] = Point(925.7288472491148, 887.3235115333719);\n    poly61.ps[1] = Point(925.7288472491148, 949.3235115333719);\n    poly61.ps[2] = Point(863.7288472491148, 949.3235115333719);\n    poly61.ps[3] = Point(863.7288472491148, 887.3235115333719);\n    new ShapeRef(router, poly61, 61);\n\n    Polygon poly62(4);\n    poly62.ps[0] = Point(1509.728847251115, 887.3235115333719);\n    poly62.ps[1] = Point(1509.728847251115, 949.3235115333719);\n    poly62.ps[2] = Point(1447.728847251115, 949.3235115333719);\n    poly62.ps[3] = Point(1447.728847251115, 887.3235115333719);\n    new ShapeRef(router, poly62, 62);\n\n    Polygon poly63(4);\n    poly63.ps[0] = Point(1428.728847251115, 530.9901782000385);\n    poly63.ps[1] = Point(1428.728847251115, 592.9901782000385);\n    poly63.ps[2] = Point(1366.728847251115, 592.9901782000385);\n    poly63.ps[3] = Point(1366.728847251115, 530.9901782000385);\n    new ShapeRef(router, poly63, 63);\n\n    Polygon poly64(4);\n    poly64.ps[0] = Point(1127.728847250115, 530.9901782000385);\n    poly64.ps[1] = Point(1127.728847250115, 592.9901782000385);\n    poly64.ps[2] = Point(1065.728847250115, 592.9901782000385);\n    poly64.ps[3] = Point(1065.728847250115, 530.9901782000385);\n    new ShapeRef(router, poly64, 64);\n\n    Polygon poly65(4);\n    poly65.ps[0] = Point(1024.728847249115, 821.3235115333719);\n    poly65.ps[1] = Point(1024.728847249115, 883.3235115333719);\n    poly65.ps[2] = Point(962.7288472491148, 883.3235115333719);\n    poly65.ps[3] = Point(962.7288472491148, 821.3235115333719);\n    new ShapeRef(router, poly65, 65);\n\n    Polygon poly66(4);\n    poly66.ps[0] = Point(1461.728847251115, 821.3235115333719);\n    poly66.ps[1] = Point(1461.728847251115, 883.3235115333719);\n    poly66.ps[2] = Point(1399.728847251115, 883.3235115333719);\n    poly66.ps[3] = Point(1399.728847251115, 821.3235115333719);\n    new ShapeRef(router, poly66, 66);\n\n    Polygon poly67(4);\n    poly67.ps[0] = Point(1024.728847249115, 1023.323511533372);\n    poly67.ps[1] = Point(1024.728847249115, 1085.323511533372);\n    poly67.ps[2] = Point(962.7288472491148, 1085.323511533372);\n    poly67.ps[3] = Point(962.7288472491148, 1023.323511533372);\n    new ShapeRef(router, poly67, 67);\n\n    Polygon poly68(4);\n    poly68.ps[0] = Point(1461.728847251115, 1023.323511533372);\n    poly68.ps[1] = Point(1461.728847251115, 1085.323511533372);\n    poly68.ps[2] = Point(1399.728847251115, 1085.323511533372);\n    poly68.ps[3] = Point(1399.728847251115, 1023.323511533372);\n    new ShapeRef(router, poly68, 68);\n\n    Polygon poly69(4);\n    poly69.ps[0] = Point(305.9431329624006, 1120.323511533372);\n    poly69.ps[1] = Point(305.9431329624006, 1182.323511533372);\n    poly69.ps[2] = Point(243.9431329624006, 1182.323511533372);\n    poly69.ps[3] = Point(243.9431329624006, 1120.323511533372);\n    new ShapeRef(router, poly69, 69);\n\n    Polygon poly70(4);\n    poly70.ps[0] = Point(682.7288472481148, 1293.723511533372);\n    poly70.ps[1] = Point(682.7288472481148, 1355.723511533372);\n    poly70.ps[2] = Point(620.7288472481148, 1355.723511533372);\n    poly70.ps[3] = Point(620.7288472481148, 1293.723511533372);\n    new ShapeRef(router, poly70, 70);\n\n    Polygon poly71(4);\n    poly71.ps[0] = Point(925.7288472491148, 1293.723511533372);\n    poly71.ps[1] = Point(925.7288472491148, 1355.723511533372);\n    poly71.ps[2] = Point(863.7288472491148, 1355.723511533372);\n    poly71.ps[3] = Point(863.7288472491148, 1293.723511533372);\n    new ShapeRef(router, poly71, 71);\n\n    Polygon poly72(4);\n    poly72.ps[0] = Point(1509.728847251115, 1293.723511533372);\n    poly72.ps[1] = Point(1509.728847251115, 1355.723511533372);\n    poly72.ps[2] = Point(1447.728847251115, 1355.723511533372);\n    poly72.ps[3] = Point(1447.728847251115, 1293.723511533372);\n    new ShapeRef(router, poly72, 72);\n\n    Polygon poly73(4);\n    poly73.ps[0] = Point(-410.9508064335388, 1449.609225819086);\n    poly73.ps[1] = Point(-410.9508064335388, 1511.609225819086);\n    poly73.ps[2] = Point(-472.9508064335388, 1511.609225819086);\n    poly73.ps[3] = Point(-472.9508064335388, 1449.609225819086);\n    new ShapeRef(router, poly73, 73);\n\n    Polygon poly74(4);\n    poly74.ps[0] = Point(66.77646629473389, 1449.609225819086);\n    poly74.ps[1] = Point(66.77646629473389, 1511.609225819086);\n    poly74.ps[2] = Point(4.776466294733893, 1511.609225819086);\n    poly74.ps[3] = Point(4.776466294733893, 1449.609225819086);\n    new ShapeRef(router, poly74, 74);\n\n    Polygon poly75(4);\n    poly75.ps[0] = Point(682.7288472481148, 1449.609225819086);\n    poly75.ps[1] = Point(682.7288472481148, 1511.609225819086);\n    poly75.ps[2] = Point(620.7288472481148, 1511.609225819086);\n    poly75.ps[3] = Point(620.7288472481148, 1449.609225819086);\n    new ShapeRef(router, poly75, 75);\n\n    Polygon poly76(4);\n    poly76.ps[0] = Point(925.7288472491148, 1449.609225819086);\n    poly76.ps[1] = Point(925.7288472491148, 1511.609225819086);\n    poly76.ps[2] = Point(863.7288472491148, 1511.609225819086);\n    poly76.ps[3] = Point(863.7288472491148, 1449.609225819086);\n    new ShapeRef(router, poly76, 76);\n\n    Polygon poly77(4);\n    poly77.ps[0] = Point(1509.728847251115, 1449.609225819086);\n    poly77.ps[1] = Point(1509.728847251115, 1511.609225819086);\n    poly77.ps[2] = Point(1447.728847251115, 1511.609225819086);\n    poly77.ps[3] = Point(1447.728847251115, 1449.609225819086);\n    new ShapeRef(router, poly77, 77);\n\n    Polygon poly78(4);\n    poly78.ps[0] = Point(-392.9508064335388, 394.2282734381338);\n    poly78.ps[1] = Point(-392.9508064335388, 414.2282734381338);\n    poly78.ps[2] = Point(-424.9508064335388, 414.2282734381338);\n    poly78.ps[3] = Point(-424.9508064335388, 394.2282734381338);\n    new ShapeRef(router, poly78, 78);\n\n    Polygon poly79(4);\n    poly79.ps[0] = Point(-140.8902003719328, 902.3235115333719);\n    poly79.ps[1] = Point(-140.8902003719328, 934.3235115333719);\n    poly79.ps[2] = Point(-160.8902003719328, 934.3235115333719);\n    poly79.ps[3] = Point(-160.8902003719328, 902.3235115333719);\n    new ShapeRef(router, poly79, 79);\n\n    Polygon poly80(4);\n    poly80.ps[0] = Point(18.77646629473389, 786.3235115333719);\n    poly80.ps[1] = Point(18.77646629473389, 806.3235115333719);\n    poly80.ps[2] = Point(-13.22353370526611, 806.3235115333719);\n    poly80.ps[3] = Point(-13.22353370526611, 786.3235115333719);\n    new ShapeRef(router, poly80, 80);\n\n    Polygon poly81(4);\n    poly81.ps[0] = Point(453.4431329624006, 705.9901782000385);\n    poly81.ps[1] = Point(453.4431329624006, 725.9901782000385);\n    poly81.ps[2] = Point(421.4431329624006, 725.9901782000385);\n    poly81.ps[3] = Point(421.4431329624006, 705.9901782000385);\n    new ShapeRef(router, poly81, 81);\n\n    Polygon poly82(4);\n    poly82.ps[0] = Point(453.4431329624006, 941.3235115333719);\n    poly82.ps[1] = Point(453.4431329624006, 961.3235115333719);\n    poly82.ps[2] = Point(421.4431329624006, 961.3235115333719);\n    poly82.ps[3] = Point(421.4431329624006, 941.3235115333719);\n    new ShapeRef(router, poly82, 82);\n\n    Polygon poly83(4);\n    poly83.ps[0] = Point(830.7288472481148, 929.3235115333719);\n    poly83.ps[1] = Point(830.7288472481148, 949.3235115333719);\n    poly83.ps[2] = Point(798.7288472481148, 949.3235115333719);\n    poly83.ps[3] = Point(798.7288472481148, 929.3235115333719);\n    new ShapeRef(router, poly83, 83);\n\n    Polygon poly84(4);\n    poly84.ps[0] = Point(830.7288472481148, 887.3235115333719);\n    poly84.ps[1] = Point(830.7288472481148, 907.3235115333719);\n    poly84.ps[2] = Point(798.7288472481148, 907.3235115333719);\n    poly84.ps[3] = Point(798.7288472481148, 887.3235115333719);\n    new ShapeRef(router, poly84, 84);\n\n    Polygon poly85(4);\n    poly85.ps[0] = Point(284.9431329624006, 1071.323511533372);\n    poly85.ps[1] = Point(284.9431329624006, 1103.323511533372);\n    poly85.ps[2] = Point(264.9431329624006, 1103.323511533372);\n    poly85.ps[3] = Point(264.9431329624006, 1071.323511533372);\n    new ShapeRef(router, poly85, 85);\n\n    Polygon poly86(4);\n    poly86.ps[0] = Point(453.4431329624006, 1314.723511533372);\n    poly86.ps[1] = Point(453.4431329624006, 1334.723511533372);\n    poly86.ps[2] = Point(421.4431329624006, 1334.723511533372);\n    poly86.ps[3] = Point(421.4431329624006, 1314.723511533372);\n    new ShapeRef(router, poly86, 86);\n\n    Polygon poly87(4);\n    poly87.ps[0] = Point(830.7288472481148, 1314.723511533372);\n    poly87.ps[1] = Point(830.7288472481148, 1334.723511533372);\n    poly87.ps[2] = Point(798.7288472481148, 1334.723511533372);\n    poly87.ps[3] = Point(798.7288472481148, 1314.723511533372);\n    new ShapeRef(router, poly87, 87);\n\n    Polygon poly88(4);\n    poly88.ps[0] = Point(-47.22353370526614, 1470.609225819086);\n    poly88.ps[1] = Point(-47.22353370526614, 1490.609225819086);\n    poly88.ps[2] = Point(-79.22353370526614, 1490.609225819086);\n    poly88.ps[3] = Point(-79.22353370526614, 1470.609225819086);\n    new ShapeRef(router, poly88, 88);\n\n    Polygon poly89(4);\n    poly89.ps[0] = Point(453.4431329624006, 1470.609225819086);\n    poly89.ps[1] = Point(453.4431329624006, 1490.609225819086);\n    poly89.ps[2] = Point(421.4431329624006, 1490.609225819086);\n    poly89.ps[3] = Point(421.4431329624006, 1470.609225819086);\n    new ShapeRef(router, poly89, 89);\n\n    Polygon poly90(4);\n    poly90.ps[0] = Point(830.7288472481148, 1449.609225819086);\n    poly90.ps[1] = Point(830.7288472481148, 1469.609225819086);\n    poly90.ps[2] = Point(798.7288472481148, 1469.609225819086);\n    poly90.ps[3] = Point(798.7288472481148, 1449.609225819086);\n    new ShapeRef(router, poly90, 90);\n\n    Polygon poly91(4);\n    poly91.ps[0] = Point(830.7288472481148, 1491.609225819086);\n    poly91.ps[1] = Point(830.7288472481148, 1511.609225819086);\n    poly91.ps[2] = Point(798.7288472481148, 1511.609225819086);\n    poly91.ps[3] = Point(798.7288472481148, 1491.609225819086);\n    new ShapeRef(router, poly91, 91);\n\n    Polygon poly92(4);\n    poly92.ps[0] = Point(1281.728847251115, 842.3235115333719);\n    poly92.ps[1] = Point(1281.728847251115, 862.3235115333719);\n    poly92.ps[2] = Point(1249.728847251115, 862.3235115333719);\n    poly92.ps[3] = Point(1249.728847251115, 842.3235115333719);\n    new ShapeRef(router, poly92, 92);\n\n    Polygon poly93(4);\n    poly93.ps[0] = Point(1281.728847251115, 645.9901782000385);\n    poly93.ps[1] = Point(1281.728847251115, 665.9901782000385);\n    poly93.ps[2] = Point(1249.728847251115, 665.9901782000385);\n    poly93.ps[3] = Point(1249.728847251115, 645.9901782000385);\n    new ShapeRef(router, poly93, 93);\n\n    Polygon poly94(4);\n    poly94.ps[0] = Point(1178.728847250115, 948.3235115333719);\n    poly94.ps[1] = Point(1178.728847250115, 968.3235115333719);\n    poly94.ps[2] = Point(1146.728847250115, 968.3235115333719);\n    poly94.ps[3] = Point(1146.728847250115, 948.3235115333719);\n    new ShapeRef(router, poly94, 94);\n\n    Polygon poly95(4);\n    poly95.ps[0] = Point(1178.728847250115, 1023.323511533372);\n    poly95.ps[1] = Point(1178.728847250115, 1043.323511533372);\n    poly95.ps[2] = Point(1146.728847250115, 1043.323511533372);\n    poly95.ps[3] = Point(1146.728847250115, 1023.323511533372);\n    new ShapeRef(router, poly95, 95);\n\n    Polygon poly96(4);\n    poly96.ps[0] = Point(1281.728847251115, 1043.323511533372);\n    poly96.ps[1] = Point(1281.728847251115, 1063.323511533372);\n    poly96.ps[2] = Point(1249.728847251115, 1063.323511533372);\n    poly96.ps[3] = Point(1249.728847251115, 1043.323511533372);\n    new ShapeRef(router, poly96, 96);\n\n    Polygon poly97(4);\n    poly97.ps[0] = Point(1281.728847251115, 1085.323511533372);\n    poly97.ps[1] = Point(1281.728847251115, 1105.323511533372);\n    poly97.ps[2] = Point(1249.728847251115, 1105.323511533372);\n    poly97.ps[3] = Point(1249.728847251115, 1085.323511533372);\n    new ShapeRef(router, poly97, 97);\n\n    Polygon poly98(4);\n    poly98.ps[0] = Point(1281.728847251115, 1257.323511533372);\n    poly98.ps[1] = Point(1281.728847251115, 1277.323511533372);\n    poly98.ps[2] = Point(1249.728847251115, 1277.323511533372);\n    poly98.ps[3] = Point(1249.728847251115, 1257.323511533372);\n    new ShapeRef(router, poly98, 98);\n\n    Polygon poly99(4);\n    poly99.ps[0] = Point(1281.728847251115, 1413.323511533372);\n    poly99.ps[1] = Point(1281.728847251115, 1433.323511533372);\n    poly99.ps[2] = Point(1249.728847251115, 1433.323511533372);\n    poly99.ps[3] = Point(1249.728847251115, 1413.323511533372);\n    new ShapeRef(router, poly99, 99);\n\n    Polygon poly100(4);\n    poly100.ps[0] = Point(-27.22353370526614, 1116.323511533372);\n    poly100.ps[1] = Point(-27.22353370526614, 1160.323511533372);\n    poly100.ps[2] = Point(-157.2235337052661, 1160.323511533372);\n    poly100.ps[3] = Point(-157.2235337052661, 1116.323511533372);\n    new ShapeRef(router, poly100, 100);\n\n    Polygon poly101(4);\n    poly101.ps[0] = Point(116.7764662947339, -149.3431551362948);\n    poly101.ps[1] = Point(116.7764662947339, -117.3431551362948);\n    poly101.ps[2] = Point(96.77646629473389, -117.3431551362948);\n    poly101.ps[3] = Point(96.77646629473389, -149.3431551362948);\n    new ShapeRef(router, poly101, 101);\n\n    Polygon poly102(4);\n    poly102.ps[0] = Point(865.7288472481148, 457.9901782000385);\n    poly102.ps[1] = Point(865.7288472481148, 477.9901782000385);\n    poly102.ps[2] = Point(833.7288472481148, 477.9901782000385);\n    poly102.ps[3] = Point(833.7288472481148, 457.9901782000385);\n    new ShapeRef(router, poly102, 102);\n\n    Polygon poly103(4);\n    poly103.ps[0] = Point(116.7764662947339, -47.34315513529478);\n    poly103.ps[1] = Point(116.7764662947339, -15.34315513529478);\n    poly103.ps[2] = Point(96.77646629473389, -15.34315513529478);\n    poly103.ps[3] = Point(96.77646629473389, -47.34315513529478);\n    new ShapeRef(router, poly103, 103);\n\n    Polygon poly104(4);\n    poly104.ps[0] = Point(943.7288472491148, 457.9901782000385);\n    poly104.ps[1] = Point(943.7288472491148, 477.9901782000385);\n    poly104.ps[2] = Point(911.7288472491148, 477.9901782000385);\n    poly104.ps[3] = Point(911.7288472491148, 457.9901782000385);\n    new ShapeRef(router, poly104, 104);\n\n    Polygon poly105(4);\n    poly105.ps[0] = Point(116.7764662947339, 54.65684486570521);\n    poly105.ps[1] = Point(116.7764662947339, 86.65684486570521);\n    poly105.ps[2] = Point(96.77646629473389, 86.65684486570521);\n    poly105.ps[3] = Point(96.77646629473389, 54.65684486570521);\n    new ShapeRef(router, poly105, 105);\n\n    Polygon poly106(4);\n    poly106.ps[0] = Point(1042.728847249115, 457.9901782000385);\n    poly106.ps[1] = Point(1042.728847249115, 477.9901782000385);\n    poly106.ps[2] = Point(1010.728847249115, 477.9901782000385);\n    poly106.ps[3] = Point(1010.728847249115, 457.9901782000385);\n    new ShapeRef(router, poly106, 106);\n\n    Polygon poly107(4);\n    poly107.ps[0] = Point(257.9431329624006, -41.34315513529478);\n    poly107.ps[1] = Point(257.9431329624006, -21.34315513529478);\n    poly107.ps[2] = Point(225.9431329624006, -21.34315513529478);\n    poly107.ps[3] = Point(225.9431329624006, -41.34315513529478);\n    new ShapeRef(router, poly107, 107);\n\n    Polygon poly108(4);\n    poly108.ps[0] = Point(943.7288472491148, 364.561606771467);\n    poly108.ps[1] = Point(943.7288472491148, 384.561606771467);\n    poly108.ps[2] = Point(911.7288472491148, 384.561606771467);\n    poly108.ps[3] = Point(911.7288472491148, 364.561606771467);\n    new ShapeRef(router, poly108, 108);\n\n    Polygon poly109(4);\n    poly109.ps[0] = Point(1178.728847250115, 1065.323511533372);\n    poly109.ps[1] = Point(1178.728847250115, 1085.323511533372);\n    poly109.ps[2] = Point(1146.728847250115, 1085.323511533372);\n    poly109.ps[3] = Point(1146.728847250115, 1065.323511533372);\n    new ShapeRef(router, poly109, 109);\n\n    Polygon poly110(4);\n    poly110.ps[0] = Point(257.9431329624006, 60.65684486570521);\n    poly110.ps[1] = Point(257.9431329624006, 80.65684486570521);\n    poly110.ps[2] = Point(225.9431329624006, 80.65684486570521);\n    poly110.ps[3] = Point(225.9431329624006, 60.65684486570521);\n    new ShapeRef(router, poly110, 110);\n\n    Polygon poly111(4);\n    poly111.ps[0] = Point(1042.728847249115, 364.561606771467);\n    poly111.ps[1] = Point(1042.728847249115, 384.561606771467);\n    poly111.ps[2] = Point(1010.728847249115, 384.561606771467);\n    poly111.ps[3] = Point(1010.728847249115, 364.561606771467);\n    new ShapeRef(router, poly111, 111);\n\n    Polygon poly112(4);\n    poly112.ps[0] = Point(988.7288472491148, 176.2282734371338);\n    poly112.ps[1] = Point(988.7288472491148, 236.2282734371338);\n    poly112.ps[2] = Point(932.7288472491148, 236.2282734371338);\n    poly112.ps[3] = Point(932.7288472491148, 176.2282734371338);\n    new ShapeRef(router, poly112, 112);\n\n    Polygon poly113(4);\n    poly113.ps[0] = Point(877.7288472481148, 304.561606771467);\n    poly113.ps[1] = Point(877.7288472481148, 364.561606771467);\n    poly113.ps[2] = Point(821.7288472481148, 364.561606771467);\n    poly113.ps[3] = Point(821.7288472481148, 304.561606771467);\n    new ShapeRef(router, poly113, 113);\n\n    Polygon poly114(4);\n    poly114.ps[0] = Point(646.7288472481148, 364.9901782000385);\n    poly114.ps[1] = Point(646.7288472481148, 424.9901782000385);\n    poly114.ps[2] = Point(590.7288472481148, 424.9901782000385);\n    poly114.ps[3] = Point(590.7288472481148, 364.9901782000385);\n    new ShapeRef(router, poly114, 114);\n\n    Polygon poly115(4);\n    poly115.ps[0] = Point(-252.9508064325389, 316.2282734371338);\n    poly115.ps[1] = Point(-252.9508064325389, 376.2282734371338);\n    poly115.ps[2] = Point(-308.9508064325389, 376.2282734371338);\n    poly115.ps[3] = Point(-308.9508064325389, 316.2282734371338);\n    new ShapeRef(router, poly115, 115);\n\n    Polygon poly116(4);\n    poly116.ps[0] = Point(-252.9508064325389, 391.2282734371338);\n    poly116.ps[1] = Point(-252.9508064325389, 451.2282734371338);\n    poly116.ps[2] = Point(-308.9508064325389, 451.2282734371338);\n    poly116.ps[3] = Point(-308.9508064325389, 391.2282734371338);\n    new ShapeRef(router, poly116, 116);\n\n    Polygon poly117(4);\n    poly117.ps[0] = Point(-252.9508064325389, 466.2282734371338);\n    poly117.ps[1] = Point(-252.9508064325389, 526.2282734371338);\n    poly117.ps[2] = Point(-308.9508064325389, 526.2282734371338);\n    poly117.ps[3] = Point(-308.9508064325389, 466.2282734371338);\n    new ShapeRef(router, poly117, 117);\n\n    Polygon poly118(4);\n    poly118.ps[0] = Point(-252.9508064325389, 541.2282734371338);\n    poly118.ps[1] = Point(-252.9508064325389, 601.2282734371338);\n    poly118.ps[2] = Point(-308.9508064325389, 601.2282734371338);\n    poly118.ps[3] = Point(-308.9508064325389, 541.2282734371338);\n    new ShapeRef(router, poly118, 118);\n\n    Polygon poly119(4);\n    poly119.ps[0] = Point(-252.9508064325389, 616.2282734371338);\n    poly119.ps[1] = Point(-252.9508064325389, 676.2282734371338);\n    poly119.ps[2] = Point(-308.9508064325389, 676.2282734371338);\n    poly119.ps[3] = Point(-308.9508064325389, 616.2282734371338);\n    new ShapeRef(router, poly119, 119);\n\n    Polygon poly120(4);\n    poly120.ps[0] = Point(-252.9508064325389, 963.2282734371338);\n    poly120.ps[1] = Point(-252.9508064325389, 1023.228273437134);\n    poly120.ps[2] = Point(-308.9508064325389, 1023.228273437134);\n    poly120.ps[3] = Point(-308.9508064325389, 963.2282734371338);\n    new ShapeRef(router, poly120, 120);\n\n    Polygon poly121(4);\n    poly121.ps[0] = Point(-252.9508064325389, 691.2282734371338);\n    poly121.ps[1] = Point(-252.9508064325389, 751.2282734371338);\n    poly121.ps[2] = Point(-308.9508064325389, 751.2282734371338);\n    poly121.ps[3] = Point(-308.9508064325389, 691.2282734371338);\n    new ShapeRef(router, poly121, 121);\n\n    Polygon poly122(4);\n    poly122.ps[0] = Point(-252.9508064325389, 813.2282734371338);\n    poly122.ps[1] = Point(-252.9508064325389, 873.2282734371338);\n    poly122.ps[2] = Point(-308.9508064325389, 873.2282734371338);\n    poly122.ps[3] = Point(-308.9508064325389, 813.2282734371338);\n    new ShapeRef(router, poly122, 122);\n\n    Polygon poly123(4);\n    poly123.ps[0] = Point(-252.9508064325389, 888.2282734371338);\n    poly123.ps[1] = Point(-252.9508064325389, 948.2282734371338);\n    poly123.ps[2] = Point(-308.9508064325389, 948.2282734371338);\n    poly123.ps[3] = Point(-308.9508064325389, 888.2282734371338);\n    new ShapeRef(router, poly123, 123);\n\n    Polygon poly124(4);\n    poly124.ps[0] = Point(-252.9508064325389, 1038.228273437134);\n    poly124.ps[1] = Point(-252.9508064325389, 1098.228273437134);\n    poly124.ps[2] = Point(-308.9508064325389, 1098.228273437134);\n    poly124.ps[3] = Point(-308.9508064325389, 1038.228273437134);\n    new ShapeRef(router, poly124, 124);\n\n    Polygon poly125(4);\n    poly125.ps[0] = Point(-380.9508064335388, 142.2282734381338);\n    poly125.ps[1] = Point(-380.9508064335388, 202.2282734381338);\n    poly125.ps[2] = Point(-436.9508064335388, 202.2282734381338);\n    poly125.ps[3] = Point(-436.9508064335388, 142.2282734381338);\n    new ShapeRef(router, poly125, 125);\n\n    Polygon poly126(4);\n    poly126.ps[0] = Point(-380.9508064335388, 217.2282734381338);\n    poly126.ps[1] = Point(-380.9508064335388, 277.2282734381338);\n    poly126.ps[2] = Point(-436.9508064335388, 277.2282734381338);\n    poly126.ps[3] = Point(-436.9508064335388, 217.2282734381338);\n    new ShapeRef(router, poly126, 126);\n\n    Polygon poly127(4);\n    poly127.ps[0] = Point(-380.9508064335388, 339.2282734381338);\n    poly127.ps[1] = Point(-380.9508064335388, 399.2282734381338);\n    poly127.ps[2] = Point(-436.9508064335388, 399.2282734381338);\n    poly127.ps[3] = Point(-436.9508064335388, 339.2282734381338);\n    new ShapeRef(router, poly127, 127);\n\n    Polygon poly128(4);\n    poly128.ps[0] = Point(613.7288472481148, 176.2282734371338);\n    poly128.ps[1] = Point(613.7288472481148, 236.2282734371338);\n    poly128.ps[2] = Point(557.7288472481148, 236.2282734371338);\n    poly128.ps[3] = Point(557.7288472481148, 176.2282734371338);\n    new ShapeRef(router, poly128, 128);\n\n    Polygon poly129(4);\n    poly129.ps[0] = Point(803.7288472481148, -288.3431551362947);\n    poly129.ps[1] = Point(803.7288472481148, -248.3431551362947);\n    poly129.ps[2] = Point(727.7288472481148, -248.3431551362947);\n    poly129.ps[3] = Point(727.7288472481148, -288.3431551362947);\n    new ShapeRef(router, poly129, 129);\n\n    Polygon poly130(4);\n    poly130.ps[0] = Point(244.7764662957339, 149.6568448657052);\n    poly130.ps[1] = Point(244.7764662957339, 189.6568448657052);\n    poly130.ps[2] = Point(168.7764662957339, 189.6568448657052);\n    poly130.ps[3] = Point(168.7764662957339, 149.6568448657052);\n    new ShapeRef(router, poly130, 130);\n\n    Polygon poly131(4);\n    poly131.ps[0] = Point(269.9431329624006, -203.3431551362948);\n    poly131.ps[1] = Point(269.9431329624006, -143.3431551362948);\n    poly131.ps[2] = Point(213.9431329624006, -143.3431551362948);\n    poly131.ps[3] = Point(213.9431329624006, -203.3431551362948);\n    new ShapeRef(router, poly131, 131);\n\n    Polygon poly132(4);\n    poly132.ps[0] = Point(366.4431329624006, -621.3431551372947);\n    poly132.ps[1] = Point(366.4431329624006, -561.3431551372947);\n    poly132.ps[2] = Point(310.4431329624006, -561.3431551372947);\n    poly132.ps[3] = Point(310.4431329624006, -621.3431551372947);\n    new ShapeRef(router, poly132, 132);\n\n    Polygon poly133(4);\n    poly133.ps[0] = Point(580.7288472481148, -711.8431551372947);\n    poly133.ps[1] = Point(580.7288472481148, -651.8431551372947);\n    poly133.ps[2] = Point(524.7288472481148, -651.8431551372947);\n    poly133.ps[3] = Point(524.7288472481148, -711.8431551372947);\n    new ShapeRef(router, poly133, 133);\n\n    Polygon poly134(4);\n    poly134.ps[0] = Point(-230.9735337052661, 116.6568448657052);\n    poly134.ps[1] = Point(-230.9735337052661, 156.6568448657052);\n    poly134.ps[2] = Point(-306.9735337052662, 156.6568448657052);\n    poly134.ps[3] = Point(-306.9735337052662, 116.6568448657052);\n    new ShapeRef(router, poly134, 134);\n\n    Polygon poly135(4);\n    poly135.ps[0] = Point(-134.9735337052661, -376.3431551372947);\n    poly135.ps[1] = Point(-134.9735337052661, -336.3431551372947);\n    poly135.ps[2] = Point(-210.9735337052661, -336.3431551372947);\n    poly135.ps[3] = Point(-210.9735337052661, -376.3431551372947);\n    new ShapeRef(router, poly135, 135);\n\n    Polygon poly136(4);\n    poly136.ps[0] = Point(1458.728847251115, 364.9901782000385);\n    poly136.ps[1] = Point(1458.728847251115, 424.9901782000385);\n    poly136.ps[2] = Point(1402.728847251115, 424.9901782000385);\n    poly136.ps[3] = Point(1402.728847251115, 364.9901782000385);\n    new ShapeRef(router, poly136, 136);\n\n    Polygon poly137(4);\n    poly137.ps[0] = Point(432.4431329624006, 364.9901782000385);\n    poly137.ps[1] = Point(432.4431329624006, 424.9901782000385);\n    poly137.ps[2] = Point(376.4431329624006, 424.9901782000385);\n    poly137.ps[3] = Point(376.4431329624006, 364.9901782000385);\n    new ShapeRef(router, poly137, 137);\n\n    Polygon poly138(4);\n    poly138.ps[0] = Point(523.4431329624006, 865.3235115333719);\n    poly138.ps[1] = Point(523.4431329624006, 905.3235115333719);\n    poly138.ps[2] = Point(447.4431329624006, 905.3235115333719);\n    poly138.ps[3] = Point(447.4431329624006, 865.3235115333719);\n    new ShapeRef(router, poly138, 138);\n\n    Polygon poly139(4);\n    poly139.ps[0] = Point(523.4431329624006, 574.9901782000385);\n    poly139.ps[1] = Point(523.4431329624006, 614.9901782000385);\n    poly139.ps[2] = Point(447.4431329624006, 614.9901782000385);\n    poly139.ps[3] = Point(447.4431329624006, 574.9901782000385);\n    new ShapeRef(router, poly139, 139);\n\n    Polygon poly140(4);\n    poly140.ps[0] = Point(-473.9508064345389, 176.2282734371338);\n    poly140.ps[1] = Point(-473.9508064345389, 236.2282734371338);\n    poly140.ps[2] = Point(-529.9508064345389, 236.2282734371338);\n    poly140.ps[3] = Point(-529.9508064345389, 176.2282734371338);\n    new ShapeRef(router, poly140, 140);\n\n    Polygon poly141(4);\n    poly141.ps[0] = Point(-252.9508064325389, 1113.228273437134);\n    poly141.ps[1] = Point(-252.9508064325389, 1173.228273437134);\n    poly141.ps[2] = Point(-308.9508064325389, 1173.228273437134);\n    poly141.ps[3] = Point(-308.9508064325389, 1113.228273437134);\n    new ShapeRef(router, poly141, 141);\n\n    Polygon poly142(4);\n    poly142.ps[0] = Point(-380.9508064335388, 414.2282734381338);\n    poly142.ps[1] = Point(-380.9508064335388, 474.2282734381338);\n    poly142.ps[2] = Point(-436.9508064335388, 474.2282734381338);\n    poly142.ps[3] = Point(-436.9508064335388, 414.2282734381338);\n    new ShapeRef(router, poly142, 142);\n\n    Polygon poly143(4);\n    poly143.ps[0] = Point(-64.89020037193279, 898.3235115333719);\n    poly143.ps[1] = Point(-64.89020037193279, 938.3235115333719);\n    poly143.ps[2] = Point(-140.8902003719328, 938.3235115333719);\n    poly143.ps[3] = Point(-140.8902003719328, 898.3235115333719);\n    new ShapeRef(router, poly143, 143);\n\n    Polygon poly144(4);\n    poly144.ps[0] = Point(30.77646629473389, 726.3235115333719);\n    poly144.ps[1] = Point(30.77646629473389, 786.3235115333719);\n    poly144.ps[2] = Point(-25.22353370526611, 786.3235115333719);\n    poly144.ps[3] = Point(-25.22353370526611, 726.3235115333719);\n    new ShapeRef(router, poly144, 144);\n\n    Polygon poly145(4);\n    poly145.ps[0] = Point(465.4431329624006, 645.9901782000385);\n    poly145.ps[1] = Point(465.4431329624006, 705.9901782000385);\n    poly145.ps[2] = Point(409.4431329624006, 705.9901782000385);\n    poly145.ps[3] = Point(409.4431329624006, 645.9901782000385);\n    new ShapeRef(router, poly145, 145);\n\n    Polygon poly146(4);\n    poly146.ps[0] = Point(465.4431329624006, 961.3235115333719);\n    poly146.ps[1] = Point(465.4431329624006, 1021.323511533372);\n    poly146.ps[2] = Point(409.4431329624006, 1021.323511533372);\n    poly146.ps[3] = Point(409.4431329624006, 961.3235115333719);\n    new ShapeRef(router, poly146, 146);\n\n    Polygon poly147(4);\n    poly147.ps[0] = Point(842.7288472481148, 949.3235115333719);\n    poly147.ps[1] = Point(842.7288472481148, 1009.323511533372);\n    poly147.ps[2] = Point(786.7288472481148, 1009.323511533372);\n    poly147.ps[3] = Point(786.7288472481148, 949.3235115333719);\n    new ShapeRef(router, poly147, 147);\n\n    Polygon poly148(4);\n    poly148.ps[0] = Point(842.7288472481148, 827.3235115333719);\n    poly148.ps[1] = Point(842.7288472481148, 887.3235115333719);\n    poly148.ps[2] = Point(786.7288472481148, 887.3235115333719);\n    poly148.ps[3] = Point(786.7288472481148, 827.3235115333719);\n    new ShapeRef(router, poly148, 148);\n\n    Polygon poly149(4);\n    poly149.ps[0] = Point(360.9431329624006, 1067.323511533372);\n    poly149.ps[1] = Point(360.9431329624006, 1107.323511533372);\n    poly149.ps[2] = Point(284.9431329624006, 1107.323511533372);\n    poly149.ps[3] = Point(284.9431329624006, 1067.323511533372);\n    new ShapeRef(router, poly149, 149);\n\n    Polygon poly150(4);\n    poly150.ps[0] = Point(465.4431329624006, 1254.723511533372);\n    poly150.ps[1] = Point(465.4431329624006, 1314.723511533372);\n    poly150.ps[2] = Point(409.4431329624006, 1314.723511533372);\n    poly150.ps[3] = Point(409.4431329624006, 1254.723511533372);\n    new ShapeRef(router, poly150, 150);\n\n    Polygon poly151(4);\n    poly151.ps[0] = Point(842.7288472481148, 1254.723511533372);\n    poly151.ps[1] = Point(842.7288472481148, 1314.723511533372);\n    poly151.ps[2] = Point(786.7288472481148, 1314.723511533372);\n    poly151.ps[3] = Point(786.7288472481148, 1254.723511533372);\n    new ShapeRef(router, poly151, 151);\n\n    Polygon poly152(4);\n    poly152.ps[0] = Point(-35.22353370526614, 1410.609225819086);\n    poly152.ps[1] = Point(-35.22353370526614, 1470.609225819086);\n    poly152.ps[2] = Point(-91.22353370526614, 1470.609225819086);\n    poly152.ps[3] = Point(-91.22353370526614, 1410.609225819086);\n    new ShapeRef(router, poly152, 152);\n\n    Polygon poly153(4);\n    poly153.ps[0] = Point(465.4431329624006, 1410.609225819086);\n    poly153.ps[1] = Point(465.4431329624006, 1470.609225819086);\n    poly153.ps[2] = Point(409.4431329624006, 1470.609225819086);\n    poly153.ps[3] = Point(409.4431329624006, 1410.609225819086);\n    new ShapeRef(router, poly153, 153);\n\n    Polygon poly154(4);\n    poly154.ps[0] = Point(842.7288472481148, 1389.609225819086);\n    poly154.ps[1] = Point(842.7288472481148, 1449.609225819086);\n    poly154.ps[2] = Point(786.7288472481148, 1449.609225819086);\n    poly154.ps[3] = Point(786.7288472481148, 1389.609225819086);\n    new ShapeRef(router, poly154, 154);\n\n    Polygon poly155(4);\n    poly155.ps[0] = Point(842.7288472481148, 1511.609225819086);\n    poly155.ps[1] = Point(842.7288472481148, 1571.609225819086);\n    poly155.ps[2] = Point(786.7288472481148, 1571.609225819086);\n    poly155.ps[3] = Point(786.7288472481148, 1511.609225819086);\n    new ShapeRef(router, poly155, 155);\n\n    Polygon poly156(4);\n    poly156.ps[0] = Point(1293.728847251115, 782.3235115333719);\n    poly156.ps[1] = Point(1293.728847251115, 842.3235115333719);\n    poly156.ps[2] = Point(1237.728847251115, 842.3235115333719);\n    poly156.ps[3] = Point(1237.728847251115, 782.3235115333719);\n    new ShapeRef(router, poly156, 156);\n\n    Polygon poly157(4);\n    poly157.ps[0] = Point(1293.728847251115, 585.9901782000385);\n    poly157.ps[1] = Point(1293.728847251115, 645.9901782000385);\n    poly157.ps[2] = Point(1237.728847251115, 645.9901782000385);\n    poly157.ps[3] = Point(1237.728847251115, 585.9901782000385);\n    new ShapeRef(router, poly157, 157);\n\n    Polygon poly158(4);\n    poly158.ps[0] = Point(1190.728847250115, 888.3235115333719);\n    poly158.ps[1] = Point(1190.728847250115, 948.3235115333719);\n    poly158.ps[2] = Point(1134.728847250115, 948.3235115333719);\n    poly158.ps[3] = Point(1134.728847250115, 888.3235115333719);\n    new ShapeRef(router, poly158, 158);\n\n    Polygon poly159(4);\n    poly159.ps[0] = Point(1190.728847250115, 963.3235115333719);\n    poly159.ps[1] = Point(1190.728847250115, 1023.323511533372);\n    poly159.ps[2] = Point(1134.728847250115, 1023.323511533372);\n    poly159.ps[3] = Point(1134.728847250115, 963.3235115333719);\n    new ShapeRef(router, poly159, 159);\n\n    Polygon poly160(4);\n    poly160.ps[0] = Point(1293.728847251115, 983.3235115333719);\n    poly160.ps[1] = Point(1293.728847251115, 1043.323511533372);\n    poly160.ps[2] = Point(1237.728847251115, 1043.323511533372);\n    poly160.ps[3] = Point(1237.728847251115, 983.3235115333719);\n    new ShapeRef(router, poly160, 160);\n\n    Polygon poly161(4);\n    poly161.ps[0] = Point(1293.728847251115, 1105.323511533372);\n    poly161.ps[1] = Point(1293.728847251115, 1165.323511533372);\n    poly161.ps[2] = Point(1237.728847251115, 1165.323511533372);\n    poly161.ps[3] = Point(1237.728847251115, 1105.323511533372);\n    new ShapeRef(router, poly161, 161);\n\n    Polygon poly162(4);\n    poly162.ps[0] = Point(1293.728847251115, 1197.323511533372);\n    poly162.ps[1] = Point(1293.728847251115, 1257.323511533372);\n    poly162.ps[2] = Point(1237.728847251115, 1257.323511533372);\n    poly162.ps[3] = Point(1237.728847251115, 1197.323511533372);\n    new ShapeRef(router, poly162, 162);\n\n    Polygon poly163(4);\n    poly163.ps[0] = Point(1293.728847251115, 1353.323511533372);\n    poly163.ps[1] = Point(1293.728847251115, 1413.323511533372);\n    poly163.ps[2] = Point(1237.728847251115, 1413.323511533372);\n    poly163.ps[3] = Point(1237.728847251115, 1353.323511533372);\n    new ShapeRef(router, poly163, 163);\n\n    Polygon poly164(4);\n    poly164.ps[0] = Point(96.77646629473389, -153.3431551362948);\n    poly164.ps[1] = Point(96.77646629473389, -113.3431551362948);\n    poly164.ps[2] = Point(20.77646629473389, -113.3431551362948);\n    poly164.ps[3] = Point(20.77646629473389, -153.3431551362948);\n    new ShapeRef(router, poly164, 164);\n\n    Polygon poly165(4);\n    poly165.ps[0] = Point(877.7288472481148, 477.9901782000385);\n    poly165.ps[1] = Point(877.7288472481148, 537.9901782000385);\n    poly165.ps[2] = Point(821.7288472481148, 537.9901782000385);\n    poly165.ps[3] = Point(821.7288472481148, 477.9901782000385);\n    new ShapeRef(router, poly165, 165);\n\n    Polygon poly166(4);\n    poly166.ps[0] = Point(96.77646629473389, -51.34315513529478);\n    poly166.ps[1] = Point(96.77646629473389, -11.34315513529478);\n    poly166.ps[2] = Point(20.77646629473389, -11.34315513529478);\n    poly166.ps[3] = Point(20.77646629473389, -51.34315513529478);\n    new ShapeRef(router, poly166, 166);\n\n    Polygon poly167(4);\n    poly167.ps[0] = Point(955.7288472491148, 477.9901782000385);\n    poly167.ps[1] = Point(955.7288472491148, 537.9901782000385);\n    poly167.ps[2] = Point(899.7288472491148, 537.9901782000385);\n    poly167.ps[3] = Point(899.7288472491148, 477.9901782000385);\n    new ShapeRef(router, poly167, 167);\n\n    Polygon poly168(4);\n    poly168.ps[0] = Point(96.77646629473389, 50.65684486570521);\n    poly168.ps[1] = Point(96.77646629473389, 90.65684486570521);\n    poly168.ps[2] = Point(20.77646629473389, 90.65684486570521);\n    poly168.ps[3] = Point(20.77646629473389, 50.65684486570521);\n    new ShapeRef(router, poly168, 168);\n\n    Polygon poly169(4);\n    poly169.ps[0] = Point(1054.728847249115, 477.9901782000385);\n    poly169.ps[1] = Point(1054.728847249115, 537.9901782000385);\n    poly169.ps[2] = Point(998.7288472491148, 537.9901782000385);\n    poly169.ps[3] = Point(998.7288472491148, 477.9901782000385);\n    new ShapeRef(router, poly169, 169);\n\n    Polygon poly170(4);\n    poly170.ps[0] = Point(269.9431329624006, -101.3431551352948);\n    poly170.ps[1] = Point(269.9431329624006, -41.34315513529478);\n    poly170.ps[2] = Point(213.9431329624006, -41.34315513529478);\n    poly170.ps[3] = Point(213.9431329624006, -101.3431551352948);\n    new ShapeRef(router, poly170, 170);\n\n    Polygon poly171(4);\n    poly171.ps[0] = Point(955.7288472491148, 304.561606771467);\n    poly171.ps[1] = Point(955.7288472491148, 364.561606771467);\n    poly171.ps[2] = Point(899.7288472491148, 364.561606771467);\n    poly171.ps[3] = Point(899.7288472491148, 304.561606771467);\n    new ShapeRef(router, poly171, 171);\n\n    Polygon poly172(4);\n    poly172.ps[0] = Point(1190.728847250115, 1085.323511533372);\n    poly172.ps[1] = Point(1190.728847250115, 1145.323511533372);\n    poly172.ps[2] = Point(1134.728847250115, 1145.323511533372);\n    poly172.ps[3] = Point(1134.728847250115, 1085.323511533372);\n    new ShapeRef(router, poly172, 172);\n\n    Polygon poly173(4);\n    poly173.ps[0] = Point(269.9431329624006, 0.6568448657052102);\n    poly173.ps[1] = Point(269.9431329624006, 60.65684486570521);\n    poly173.ps[2] = Point(213.9431329624006, 60.65684486570521);\n    poly173.ps[3] = Point(213.9431329624006, 0.6568448657052102);\n    new ShapeRef(router, poly173, 173);\n\n    Polygon poly174(4);\n    poly174.ps[0] = Point(1054.728847249115, 304.561606771467);\n    poly174.ps[1] = Point(1054.728847249115, 364.561606771467);\n    poly174.ps[2] = Point(998.7288472491148, 364.561606771467);\n    poly174.ps[3] = Point(998.7288472491148, 304.561606771467);\n    new ShapeRef(router, poly174, 174);\n\n    Polygon poly175(4);\n    poly175.ps[0] = Point(865.7288472481148, -473.8431551372947);\n    poly175.ps[1] = Point(865.7288472481148, -413.8431551372947);\n    poly175.ps[2] = Point(825.7288472481148, -413.8431551372947);\n    poly175.ps[3] = Point(825.7288472481148, -473.8431551372947);\n    new ShapeRef(router, poly175, 175);\n\n    Polygon poly176(4);\n    poly176.ps[0] = Point(575.7288472481148, -432.3431551372947);\n    poly176.ps[1] = Point(575.7288472481148, -392.3431551372947);\n    poly176.ps[2] = Point(515.7288472481148, -392.3431551372947);\n    poly176.ps[3] = Point(515.7288472481148, -432.3431551372947);\n    new ShapeRef(router, poly176, 176);\n\n    Polygon poly177(4);\n    poly177.ps[0] = Point(543.9431329624006, -276.3431551362947);\n    poly177.ps[1] = Point(543.9431329624006, -236.3431551362947);\n    poly177.ps[2] = Point(483.9431329624006, -236.3431551362947);\n    poly177.ps[3] = Point(483.9431329624006, -276.3431551362947);\n    new ShapeRef(router, poly177, 177);\n\n    Polygon poly178(4);\n    poly178.ps[0] = Point(261.9431329624006, -437.3431551372947);\n    poly178.ps[1] = Point(261.9431329624006, -397.3431551372947);\n    poly178.ps[2] = Point(201.9431329624006, -397.3431551372947);\n    poly178.ps[3] = Point(201.9431329624006, -437.3431551372947);\n    new ShapeRef(router, poly178, 178);\n\n    Polygon poly179(4);\n    poly179.ps[0] = Point(-243.0508064325388, 386.2282734371338);\n    poly179.ps[1] = Point(-243.0508064325388, 1103.228273437134);\n    poly179.ps[2] = Point(-318.8508064325388, 1103.228273437134);\n    poly179.ps[3] = Point(-318.8508064325388, 386.2282734371338);\n    new ShapeRef(router, poly179, 179);\n\n    Polygon poly180(4);\n    poly180.ps[0] = Point(-371.0508064335389, 212.2282734381338);\n    poly180.ps[1] = Point(-371.0508064335389, 404.2282734381338);\n    poly180.ps[2] = Point(-446.8508064335388, 404.2282734381338);\n    poly180.ps[3] = Point(-446.8508064335388, 212.2282734381338);\n    new ShapeRef(router, poly180, 180);\n\n    Polygon poly181(4);\n    poly181.ps[0] = Point(852.6288472481148, 897.3235115333719);\n    poly181.ps[1] = Point(852.6288472481148, 939.3235115333719);\n    poly181.ps[2] = Point(776.8288472481148, 939.3235115333719);\n    poly181.ps[3] = Point(776.8288472481148, 897.3235115333719);\n    new ShapeRef(router, poly181, 181);\n\n    Polygon poly182(4);\n    poly182.ps[0] = Point(1303.628847251115, 1053.323511533372);\n    poly182.ps[1] = Point(1303.628847251115, 1095.323511533372);\n    poly182.ps[2] = Point(1227.828847251115, 1095.323511533372);\n    poly182.ps[3] = Point(1227.828847251115, 1053.323511533372);\n    new ShapeRef(router, poly182, 182);\n\n    Polygon poly183(4);\n    poly183.ps[0] = Point(1200.628847250115, 958.3235115333719);\n    poly183.ps[1] = Point(1200.628847250115, 1075.323511533372);\n    poly183.ps[2] = Point(1124.828847250115, 1075.323511533372);\n    poly183.ps[3] = Point(1124.828847250115, 958.3235115333719);\n    new ShapeRef(router, poly183, 183);\n\n    Polygon poly184(4);\n    poly184.ps[0] = Point(852.6288472481148, 1459.609225819086);\n    poly184.ps[1] = Point(852.6288472481148, 1501.609225819086);\n    poly184.ps[2] = Point(776.8288472481148, 1501.609225819086);\n    poly184.ps[3] = Point(776.8288472481148, 1459.609225819086);\n    new ShapeRef(router, poly184, 184);\n\n    ConnRef *connRef185 = new ConnRef(router, 185);\n    ConnEnd srcPt185(Point(1364.728847251115, 308.2282734381338), 15);\n    connRef185->setSourceEndpoint(srcPt185);\n    ConnEnd dstPt185(Point(1415.728847251115, 434.9901782000385), 4);\n    connRef185->setDestEndpoint(dstPt185);\n    connRef185->setRoutingType((ConnType)2);\n\n    ConnRef *connRef186 = new ConnRef(router, 186);\n    ConnEnd srcPt186(Point(717.7288472481148, 246.2282734371338), 15);\n    connRef186->setSourceEndpoint(srcPt186);\n    ConnEnd dstPt186(Point(945.7288472491148, 246.2282734371338), 4);\n    connRef186->setDestEndpoint(dstPt186);\n    connRef186->setRoutingType((ConnType)2);\n\n    ConnRef *connRef187 = new ConnRef(router, 187);\n    ConnEnd srcPt187(Point(975.7288472491148, 246.2282734371338), 8);\n    connRef187->setSourceEndpoint(srcPt187);\n    ConnEnd dstPt187(Point(1298.728847251115, 246.2282734371338), 15);\n    connRef187->setDestEndpoint(dstPt187);\n    connRef187->setRoutingType((ConnType)2);\n\n    ConnRef *connRef188 = new ConnRef(router, 188);\n    ConnEnd srcPt188(Point(864.7288472481148, 374.561606771467), 8);\n    connRef188->setSourceEndpoint(srcPt188);\n    ConnEnd dstPt188(Point(1129.728847250115, 308.2282734381338), 15);\n    connRef188->setDestEndpoint(dstPt188);\n    connRef188->setRoutingType((ConnType)2);\n\n    ConnRef *connRef189 = new ConnRef(router, 189);\n    ConnEnd srcPt189(Point(864.7288472481148, 374.561606771467), 8);\n    connRef189->setSourceEndpoint(srcPt189);\n    ConnEnd dstPt189(Point(1331.728847251115, 434.9901782000385), 15);\n    connRef189->setDestEndpoint(dstPt189);\n    connRef189->setRoutingType((ConnType)2);\n\n    ConnRef *connRef190 = new ConnRef(router, 190);\n    ConnEnd srcPt190(Point(633.7288472481148, 434.9901782000385), 8);\n    connRef190->setSourceEndpoint(srcPt190);\n    ConnEnd dstPt190(Point(684.7288472481148, 308.2282734381338), 15);\n    connRef190->setDestEndpoint(dstPt190);\n    connRef190->setRoutingType((ConnType)2);\n\n    ConnRef *connRef191 = new ConnRef(router, 191);\n    ConnEnd srcPt191(Point(633.7288472481148, 434.9901782000385), 8);\n    connRef191->setSourceEndpoint(srcPt191);\n    ConnEnd dstPt191(Point(781.7288472481148, 434.9901782000385), 15);\n    connRef191->setDestEndpoint(dstPt191);\n    connRef191->setRoutingType((ConnType)2);\n\n    ConnRef *connRef192 = new ConnRef(router, 192);\n    ConnEnd srcPt192(Point(-295.9508064325389, 386.2282734371338), 4);\n    connRef192->setSourceEndpoint(srcPt192);\n    ConnEnd dstPt192(Point(-625.9508064345389, 246.2282734371338), 15);\n    connRef192->setDestEndpoint(dstPt192);\n    connRef192->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints192(1);\n    checkpoints192[0] = Checkpoint(Point(-318.9508064325389, 782.2282734371338), (ConnDirFlags) 15, (ConnDirFlags) 4);\n    connRef192->setRoutingCheckpoints(checkpoints192);\n\n    ConnRef *connRef193 = new ConnRef(router, 193);\n    ConnEnd srcPt193(Point(-295.9508064325389, 461.2282734371338), 4);\n    connRef193->setSourceEndpoint(srcPt193);\n    ConnEnd dstPt193(Point(-625.9508064345389, 246.2282734371338), 15);\n    connRef193->setDestEndpoint(dstPt193);\n    connRef193->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints193(1);\n    checkpoints193[0] = Checkpoint(Point(-318.9508064325389, 782.2282734371338), (ConnDirFlags) 15, (ConnDirFlags) 4);\n    connRef193->setRoutingCheckpoints(checkpoints193);\n\n    ConnRef *connRef194 = new ConnRef(router, 194);\n    ConnEnd srcPt194(Point(-295.9508064325389, 536.2282734371338), 4);\n    connRef194->setSourceEndpoint(srcPt194);\n    ConnEnd dstPt194(Point(-625.9508064345389, 246.2282734371338), 15);\n    connRef194->setDestEndpoint(dstPt194);\n    connRef194->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints194(1);\n    checkpoints194[0] = Checkpoint(Point(-318.9508064325389, 782.2282734371338), (ConnDirFlags) 15, (ConnDirFlags) 4);\n    connRef194->setRoutingCheckpoints(checkpoints194);\n\n    ConnRef *connRef195 = new ConnRef(router, 195);\n    ConnEnd srcPt195(Point(-295.9508064325389, 611.2282734371338), 4);\n    connRef195->setSourceEndpoint(srcPt195);\n    ConnEnd dstPt195(Point(-625.9508064345389, 246.2282734371338), 15);\n    connRef195->setDestEndpoint(dstPt195);\n    connRef195->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints195(1);\n    checkpoints195[0] = Checkpoint(Point(-318.9508064325389, 782.2282734371338), (ConnDirFlags) 15, (ConnDirFlags) 4);\n    connRef195->setRoutingCheckpoints(checkpoints195);\n\n    ConnRef *connRef196 = new ConnRef(router, 196);\n    ConnEnd srcPt196(Point(-295.9508064325389, 686.2282734371338), 4);\n    connRef196->setSourceEndpoint(srcPt196);\n    ConnEnd dstPt196(Point(-625.9508064345389, 246.2282734371338), 15);\n    connRef196->setDestEndpoint(dstPt196);\n    connRef196->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints196(1);\n    checkpoints196[0] = Checkpoint(Point(-318.9508064325389, 782.2282734371338), (ConnDirFlags) 15, (ConnDirFlags) 4);\n    connRef196->setRoutingCheckpoints(checkpoints196);\n#endif\n\n    ConnRef *connRef197 = new ConnRef(router, 197);\n    ConnEnd srcPt197(Point(-265.9508064325389, 953.2282734371338), 8);\n    connRef197->setSourceEndpoint(srcPt197);\n    ConnEnd dstPt197(Point(158.7764662957339, 246.2282734371338), 15);\n    connRef197->setDestEndpoint(dstPt197);\n    connRef197->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints197(1);\n    checkpoints197[0] = Checkpoint(Point(-242.9508064325389, 782.2282734371338), (ConnDirFlags) 15, (ConnDirFlags) 8);\n    connRef197->setRoutingCheckpoints(checkpoints197);\n\n#ifdef ALL\n    ConnRef *connRef198 = new ConnRef(router, 198);\n    ConnEnd srcPt198(Point(-295.9508064325389, 761.2282734371338), 4);\n    connRef198->setSourceEndpoint(srcPt198);\n    ConnEnd dstPt198(Point(-625.9508064345389, 246.2282734371338), 15);\n    connRef198->setDestEndpoint(dstPt198);\n    connRef198->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints198(1);\n    checkpoints198[0] = Checkpoint(Point(-318.9508064325389, 782.2282734371338), (ConnDirFlags) 15, (ConnDirFlags) 4);\n    connRef198->setRoutingCheckpoints(checkpoints198);\n\n    ConnRef *connRef199 = new ConnRef(router, 199);\n    ConnEnd srcPt199(Point(-295.9508064325389, 803.2282734371338), 4);\n    connRef199->setSourceEndpoint(srcPt199);\n    ConnEnd dstPt199(Point(-625.9508064345389, 246.2282734371338), 15);\n    connRef199->setDestEndpoint(dstPt199);\n    connRef199->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints199(1);\n    checkpoints199[0] = Checkpoint(Point(-318.9508064325389, 782.2282734371338), (ConnDirFlags) 15, (ConnDirFlags) 4);\n    connRef199->setRoutingCheckpoints(checkpoints199);\n\n    ConnRef *connRef200 = new ConnRef(router, 200);\n    ConnEnd srcPt200(Point(-295.9508064325389, 878.2282734371338), 4);\n    connRef200->setSourceEndpoint(srcPt200);\n    ConnEnd dstPt200(Point(-625.9508064345389, 246.2282734371338), 15);\n    connRef200->setDestEndpoint(dstPt200);\n    connRef200->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints200(1);\n    checkpoints200[0] = Checkpoint(Point(-318.9508064325389, 782.2282734371338), (ConnDirFlags) 15, (ConnDirFlags) 4);\n    connRef200->setRoutingCheckpoints(checkpoints200);\n#endif\n\n    ConnRef *connRef201 = new ConnRef(router, 201);\n    ConnEnd srcPt201(Point(-265.9508064325389, 1028.228273437134), 8);\n    connRef201->setSourceEndpoint(srcPt201);\n    ConnEnd dstPt201(Point(158.7764662957339, 246.2282734371338), 15);\n    connRef201->setDestEndpoint(dstPt201);\n    connRef201->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints201(1);\n    checkpoints201[0] = Checkpoint(Point(-242.9508064325389, 782.2282734371338), (ConnDirFlags) 15, (ConnDirFlags) 8);\n    connRef201->setRoutingCheckpoints(checkpoints201);\n\n#ifdef ALL\n    ConnRef *connRef202 = new ConnRef(router, 202);\n    ConnEnd srcPt202(Point(-423.9508064335388, 212.2282734381338), 4);\n    connRef202->setSourceEndpoint(srcPt202);\n    ConnEnd dstPt202(Point(-553.9508064345389, 308.2282734381338), 15);\n    connRef202->setDestEndpoint(dstPt202);\n    connRef202->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints202(1);\n    checkpoints202[0] = Checkpoint(Point(-446.9508064335388, 308.2282734381338), (ConnDirFlags) 15, (ConnDirFlags) 4);\n    connRef202->setRoutingCheckpoints(checkpoints202);\n\n    ConnRef *connRef203 = new ConnRef(router, 203);\n    ConnEnd srcPt203(Point(-423.9508064335388, 287.2282734381338), 4);\n    connRef203->setSourceEndpoint(srcPt203);\n    ConnEnd dstPt203(Point(-553.9508064345389, 308.2282734381338), 15);\n    connRef203->setDestEndpoint(dstPt203);\n    connRef203->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints203(1);\n    checkpoints203[0] = Checkpoint(Point(-446.9508064335388, 308.2282734381338), (ConnDirFlags) 15, (ConnDirFlags) 4);\n    connRef203->setRoutingCheckpoints(checkpoints203);\n\n    ConnRef *connRef204 = new ConnRef(router, 204);\n    ConnEnd srcPt204(Point(-423.9508064335388, 329.2282734381338), 4);\n    connRef204->setSourceEndpoint(srcPt204);\n    ConnEnd dstPt204(Point(-553.9508064345389, 308.2282734381338), 15);\n    connRef204->setDestEndpoint(dstPt204);\n    connRef204->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints204(1);\n    checkpoints204[0] = Checkpoint(Point(-446.9508064335388, 308.2282734381338), (ConnDirFlags) 15, (ConnDirFlags) 4);\n    connRef204->setRoutingCheckpoints(checkpoints204);\n\n    ConnRef *connRef205 = new ConnRef(router, 205);\n    ConnEnd srcPt205(Point(618.7288472481148, -202.3431551362948), 15);\n    connRef205->setSourceEndpoint(srcPt205);\n    ConnEnd dstPt205(Point(600.7288472481148, 246.2282734371338), 8);\n    connRef205->setDestEndpoint(dstPt205);\n    connRef205->setRoutingType((ConnType)2);\n\n    ConnRef *connRef206 = new ConnRef(router, 206);\n    ConnEnd srcPt206(Point(570.7288472481148, 246.2282734371338), 4);\n    connRef206->setSourceEndpoint(srcPt206);\n    ConnEnd dstPt206(Point(158.7764662957339, 246.2282734371338), 15);\n    connRef206->setDestEndpoint(dstPt206);\n    connRef206->setRoutingType((ConnType)2);\n\n    ConnRef *connRef207 = new ConnRef(router, 207);\n    ConnEnd srcPt207(Point(717.7288472481148, 246.2282734371338), 15);\n    connRef207->setSourceEndpoint(srcPt207);\n    ConnEnd dstPt207(Point(600.7288472481148, 246.2282734371338), 8);\n    connRef207->setDestEndpoint(dstPt207);\n    connRef207->setRoutingType((ConnType)2);\n\n    ConnRef *connRef208 = new ConnRef(router, 208);\n    ConnEnd srcPt208(Point(437.4431329624006, -323.3431551372947), 15);\n    connRef208->setSourceEndpoint(srcPt208);\n    ConnEnd dstPt208(Point(717.7288472481148, -283.3431551362947), 1);\n    connRef208->setDestEndpoint(dstPt208);\n    connRef208->setRoutingType((ConnType)2);\n\n    ConnRef *connRef209 = new ConnRef(router, 209);\n    ConnEnd srcPt209(Point(717.7288472481148, -518.3431551372947), 15);\n    connRef209->setSourceEndpoint(srcPt209);\n    ConnEnd dstPt209(Point(717.7288472481148, -283.3431551362947), 1);\n    connRef209->setDestEndpoint(dstPt209);\n    connRef209->setRoutingType((ConnType)2);\n\n    ConnRef *connRef210 = new ConnRef(router, 210);\n    ConnEnd srcPt210(Point(717.7288472481148, -253.3431551362947), 2);\n    connRef210->setSourceEndpoint(srcPt210);\n    ConnEnd dstPt210(Point(717.7288472481148, 246.2282734371338), 15);\n    connRef210->setDestEndpoint(dstPt210);\n    connRef210->setRoutingType((ConnType)2);\n\n    ConnRef *connRef211 = new ConnRef(router, 211);\n    ConnEnd srcPt211(Point(158.7764662957339, 154.6568448657052), 1);\n    connRef211->setSourceEndpoint(srcPt211);\n    ConnEnd dstPt211(Point(717.7288472481148, -518.3431551372947), 15);\n    connRef211->setDestEndpoint(dstPt211);\n    connRef211->setRoutingType((ConnType)2);\n\n    ConnRef *connRef212 = new ConnRef(router, 212);\n    ConnEnd srcPt212(Point(158.7764662957339, 154.6568448657052), 1);\n    connRef212->setSourceEndpoint(srcPt212);\n    ConnEnd dstPt212(Point(158.7764662957339, 103.6568448657052), 15);\n    connRef212->setDestEndpoint(dstPt212);\n    connRef212->setRoutingType((ConnType)2);\n\n    ConnRef *connRef213 = new ConnRef(router, 213);\n    ConnEnd srcPt213(Point(158.7764662957339, 246.2282734371338), 15);\n    connRef213->setSourceEndpoint(srcPt213);\n    ConnEnd dstPt213(Point(158.7764662957339, 184.6568448657052), 2);\n    connRef213->setDestEndpoint(dstPt213);\n    connRef213->setRoutingType((ConnType)2);\n\n    ConnRef *connRef214 = new ConnRef(router, 214);\n    ConnEnd srcPt214(Point(256.9431329624006, -133.3431551362948), 8);\n    connRef214->setSourceEndpoint(srcPt214);\n    ConnEnd dstPt214(Point(437.4431329624006, -323.3431551372947), 15);\n    connRef214->setDestEndpoint(dstPt214);\n    connRef214->setRoutingType((ConnType)2);\n\n    ConnRef *connRef215 = new ConnRef(router, 215);\n    ConnEnd srcPt215(Point(256.9431329624006, -133.3431551362948), 8);\n    connRef215->setSourceEndpoint(srcPt215);\n    ConnEnd dstPt215(Point(618.7288472481148, -202.3431551362948), 15);\n    connRef215->setDestEndpoint(dstPt215);\n    connRef215->setRoutingType((ConnType)2);\n\n    ConnRef *connRef216 = new ConnRef(router, 216);\n    ConnEnd srcPt216(Point(158.7764662957339, 103.6568448657052), 15);\n    connRef216->setSourceEndpoint(srcPt216);\n    ConnEnd dstPt216(Point(226.9431329624006, -133.3431551362948), 4);\n    connRef216->setDestEndpoint(dstPt216);\n    connRef216->setRoutingType((ConnType)2);\n\n    ConnRef *connRef217 = new ConnRef(router, 217);\n    ConnEnd srcPt217(Point(-220.9735337052661, -551.3431551372947), 15);\n    connRef217->setSourceEndpoint(srcPt217);\n    ConnEnd dstPt217(Point(323.4431329624006, -551.3431551372947), 4);\n    connRef217->setDestEndpoint(dstPt217);\n    connRef217->setRoutingType((ConnType)2);\n\n    ConnRef *connRef218 = new ConnRef(router, 218);\n    ConnEnd srcPt218(Point(353.4431329624006, -551.3431551372947), 8);\n    connRef218->setSourceEndpoint(srcPt218);\n    ConnEnd dstPt218(Point(717.7288472481148, -518.3431551372947), 15);\n    connRef218->setDestEndpoint(dstPt218);\n    connRef218->setRoutingType((ConnType)2);\n\n    ConnRef *connRef219 = new ConnRef(router, 219);\n    ConnEnd srcPt219(Point(537.7288472481148, -641.8431551372947), 4);\n    connRef219->setSourceEndpoint(srcPt219);\n    ConnEnd dstPt219(Point(-220.9735337052661, -551.3431551372947), 15);\n    connRef219->setDestEndpoint(dstPt219);\n    connRef219->setRoutingType((ConnType)2);\n\n    ConnRef *connRef220 = new ConnRef(router, 220);\n    ConnEnd srcPt220(Point(537.7288472481148, -641.8431551372947), 4);\n    connRef220->setSourceEndpoint(srcPt220);\n    ConnEnd dstPt220(Point(437.4431329624006, -323.3431551372947), 15);\n    connRef220->setDestEndpoint(dstPt220);\n    connRef220->setRoutingType((ConnType)2);\n\n    ConnRef *connRef221 = new ConnRef(router, 221);\n    ConnEnd srcPt221(Point(-220.9735337052661, 121.6568448657052), 1);\n    connRef221->setSourceEndpoint(srcPt221);\n    ConnEnd dstPt221(Point(158.7764662957339, 103.6568448657052), 15);\n    connRef221->setDestEndpoint(dstPt221);\n    connRef221->setRoutingType((ConnType)2);\n\n    ConnRef *connRef222 = new ConnRef(router, 222);\n    ConnEnd srcPt222(Point(-220.9735337052661, 121.6568448657052), 1);\n    connRef222->setSourceEndpoint(srcPt222);\n    ConnEnd dstPt222(Point(-220.9735337052661, -235.3431551362947), 15);\n    connRef222->setDestEndpoint(dstPt222);\n    connRef222->setRoutingType((ConnType)2);\n\n    ConnRef *connRef223 = new ConnRef(router, 223);\n    ConnEnd srcPt223(Point(158.7764662957339, 246.2282734371338), 15);\n    connRef223->setSourceEndpoint(srcPt223);\n    ConnEnd dstPt223(Point(-220.9735337052661, 151.6568448657052), 2);\n    connRef223->setDestEndpoint(dstPt223);\n    connRef223->setRoutingType((ConnType)2);\n\n    ConnRef *connRef224 = new ConnRef(router, 224);\n    ConnEnd srcPt224(Point(-220.9735337052661, -371.3431551372947), 1);\n    connRef224->setSourceEndpoint(srcPt224);\n    ConnEnd dstPt224(Point(-586.9508064345389, -408.3431551372947), 15);\n    connRef224->setDestEndpoint(dstPt224);\n    connRef224->setRoutingType((ConnType)2);\n\n    ConnRef *connRef225 = new ConnRef(router, 225);\n    ConnEnd srcPt225(Point(-220.9735337052661, -371.3431551372947), 1);\n    connRef225->setSourceEndpoint(srcPt225);\n    ConnEnd dstPt225(Point(-220.9735337052661, -551.3431551372947), 15);\n    connRef225->setDestEndpoint(dstPt225);\n    connRef225->setRoutingType((ConnType)2);\n\n    ConnRef *connRef226 = new ConnRef(router, 226);\n    ConnEnd srcPt226(Point(-220.9735337052661, -235.3431551362947), 15);\n    connRef226->setSourceEndpoint(srcPt226);\n    ConnEnd dstPt226(Point(-220.9735337052661, -341.3431551372947), 2);\n    connRef226->setDestEndpoint(dstPt226);\n    connRef226->setRoutingType((ConnType)2);\n\n    ConnRef *connRef227 = new ConnRef(router, 227);\n    ConnEnd srcPt227(Point(1331.728847251115, 434.9901782000385), 15);\n    connRef227->setSourceEndpoint(srcPt227);\n    ConnEnd dstPt227(Point(1415.728847251115, 434.9901782000385), 4);\n    connRef227->setDestEndpoint(dstPt227);\n    connRef227->setRoutingType((ConnType)2);\n\n    ConnRef *connRef228 = new ConnRef(router, 228);\n    ConnEnd srcPt228(Point(1445.728847251115, 434.9901782000385), 8);\n    connRef228->setSourceEndpoint(srcPt228);\n    ConnEnd dstPt228(Point(1511.728847251115, 434.9901782000385), 15);\n    connRef228->setDestEndpoint(dstPt228);\n    connRef228->setRoutingType((ConnType)2);\n\n    ConnRef *connRef229 = new ConnRef(router, 229);\n    ConnEnd srcPt229(Point(158.7764662957339, 246.2282734371338), 15);\n    connRef229->setSourceEndpoint(srcPt229);\n    ConnEnd dstPt229(Point(389.4431329624006, 434.9901782000385), 4);\n    connRef229->setDestEndpoint(dstPt229);\n    connRef229->setRoutingType((ConnType)2);\n\n    ConnRef *connRef230 = new ConnRef(router, 230);\n    ConnEnd srcPt230(Point(419.4431329624006, 434.9901782000385), 8);\n    connRef230->setSourceEndpoint(srcPt230);\n    ConnEnd dstPt230(Point(519.7288472481148, 434.9901782000385), 15);\n    connRef230->setDestEndpoint(dstPt230);\n    connRef230->setRoutingType((ConnType)2);\n\n    ConnRef *connRef231 = new ConnRef(router, 231);\n    ConnEnd srcPt231(Point(158.7764662957339, 246.2282734371338), 15);\n    connRef231->setSourceEndpoint(srcPt231);\n    ConnEnd dstPt231(Point(437.4431329624006, 870.3235115333719), 1);\n    connRef231->setDestEndpoint(dstPt231);\n    connRef231->setRoutingType((ConnType)2);\n\n    ConnRef *connRef232 = new ConnRef(router, 232);\n    ConnEnd srcPt232(Point(437.4431329624006, 900.3235115333719), 2);\n    connRef232->setSourceEndpoint(srcPt232);\n    ConnEnd dstPt232(Point(651.7288472481148, 918.3235115333719), 15);\n    connRef232->setDestEndpoint(dstPt232);\n    connRef232->setRoutingType((ConnType)2);\n\n    ConnRef *connRef233 = new ConnRef(router, 233);\n    ConnEnd srcPt233(Point(371.4431329624006, 796.3235115333719), 15);\n    connRef233->setSourceEndpoint(srcPt233);\n    ConnEnd dstPt233(Point(437.4431329624006, 870.3235115333719), 1);\n    connRef233->setDestEndpoint(dstPt233);\n    connRef233->setRoutingType((ConnType)2);\n\n    ConnRef *connRef234 = new ConnRef(router, 234);\n    ConnEnd srcPt234(Point(437.4431329624006, 579.9901782000385), 1);\n    connRef234->setSourceEndpoint(srcPt234);\n    ConnEnd dstPt234(Point(158.7764662957339, 246.2282734371338), 15);\n    connRef234->setDestEndpoint(dstPt234);\n    connRef234->setRoutingType((ConnType)2);\n\n    ConnRef *connRef235 = new ConnRef(router, 235);\n    ConnEnd srcPt235(Point(651.7288472481148, 918.3235115333719), 15);\n    connRef235->setSourceEndpoint(srcPt235);\n    ConnEnd dstPt235(Point(437.4431329624006, 609.9901782000385), 2);\n    connRef235->setDestEndpoint(dstPt235);\n    connRef235->setRoutingType((ConnType)2);\n\n    ConnRef *connRef236 = new ConnRef(router, 236);\n    ConnEnd srcPt236(Point(437.4431329624006, 579.9901782000385), 1);\n    connRef236->setSourceEndpoint(srcPt236);\n    ConnEnd dstPt236(Point(371.4431329624006, 796.3235115333719), 15);\n    connRef236->setDestEndpoint(dstPt236);\n    connRef236->setRoutingType((ConnType)2);\n\n    ConnRef *connRef237 = new ConnRef(router, 237);\n    ConnEnd srcPt237(Point(-586.9508064345389, -408.3431551372947), 15);\n    connRef237->setSourceEndpoint(srcPt237);\n    ConnEnd dstPt237(Point(-220.9735337052661, 151.6568448657052), 2);\n    connRef237->setDestEndpoint(dstPt237);\n    connRef237->setRoutingType((ConnType)2);\n\n    ConnRef *connRef238 = new ConnRef(router, 238);\n    ConnEnd srcPt238(Point(256.9431329624006, 70.65684486570521), 8);\n    connRef238->setSourceEndpoint(srcPt238);\n    ConnEnd dstPt238(Point(437.4431329624006, -323.3431551372947), 15);\n    connRef238->setDestEndpoint(dstPt238);\n    connRef238->setRoutingType((ConnType)2);\n\n    ConnRef *connRef239 = new ConnRef(router, 239);\n    ConnEnd srcPt239(Point(106.7764662947339, -148.3431551362948), 1);\n    connRef239->setSourceEndpoint(srcPt239);\n    ConnEnd dstPt239(Point(618.7288472481148, -202.3431551362948), 15);\n    connRef239->setDestEndpoint(dstPt239);\n    connRef239->setRoutingType((ConnType)2);\n\n    ConnRef *connRef240 = new ConnRef(router, 240);\n    ConnEnd srcPt240(Point(106.7764662947339, -46.34315513529478), 1);\n    connRef240->setSourceEndpoint(srcPt240);\n    ConnEnd dstPt240(Point(618.7288472481148, -202.3431551362948), 15);\n    connRef240->setDestEndpoint(dstPt240);\n    connRef240->setRoutingType((ConnType)2);\n\n    ConnRef *connRef241 = new ConnRef(router, 241);\n    ConnEnd srcPt241(Point(106.7764662947339, 55.65684486570521), 1);\n    connRef241->setSourceEndpoint(srcPt241);\n    ConnEnd dstPt241(Point(618.7288472481148, -202.3431551362948), 15);\n    connRef241->setDestEndpoint(dstPt241);\n    connRef241->setRoutingType((ConnType)2);\n\n    ConnRef *connRef242 = new ConnRef(router, 242);\n    ConnEnd srcPt242(Point(256.9431329624006, -31.34315513529478), 8);\n    connRef242->setSourceEndpoint(srcPt242);\n    ConnEnd dstPt242(Point(618.7288472481148, -202.3431551362948), 15);\n    connRef242->setDestEndpoint(dstPt242);\n    connRef242->setRoutingType((ConnType)2);\n\n    ConnRef *connRef243 = new ConnRef(router, 243);\n    ConnEnd srcPt243(Point(256.9431329624006, 70.65684486570521), 8);\n    connRef243->setSourceEndpoint(srcPt243);\n    ConnEnd dstPt243(Point(618.7288472481148, -202.3431551362948), 15);\n    connRef243->setDestEndpoint(dstPt243);\n    connRef243->setRoutingType((ConnType)2);\n\n    ConnRef *connRef244 = new ConnRef(router, 244);\n    ConnEnd srcPt244(Point(158.7764662957339, 103.6568448657052), 15);\n    connRef244->setSourceEndpoint(srcPt244);\n    ConnEnd dstPt244(Point(106.7764662947339, -118.3431551362948), 2);\n    connRef244->setDestEndpoint(dstPt244);\n    connRef244->setRoutingType((ConnType)2);\n\n    ConnRef *connRef245 = new ConnRef(router, 245);\n    ConnEnd srcPt245(Point(158.7764662957339, 103.6568448657052), 15);\n    connRef245->setSourceEndpoint(srcPt245);\n    ConnEnd dstPt245(Point(106.7764662947339, -16.34315513529478), 2);\n    connRef245->setDestEndpoint(dstPt245);\n    connRef245->setRoutingType((ConnType)2);\n\n    ConnRef *connRef246 = new ConnRef(router, 246);\n    ConnEnd srcPt246(Point(158.7764662957339, 103.6568448657052), 15);\n    connRef246->setSourceEndpoint(srcPt246);\n    ConnEnd dstPt246(Point(106.7764662947339, 85.65684486570521), 2);\n    connRef246->setDestEndpoint(dstPt246);\n    connRef246->setRoutingType((ConnType)2);\n\n    ConnRef *connRef247 = new ConnRef(router, 247);\n    ConnEnd srcPt247(Point(158.7764662957339, 103.6568448657052), 15);\n    connRef247->setSourceEndpoint(srcPt247);\n    ConnEnd dstPt247(Point(226.9431329624006, -31.34315513529478), 4);\n    connRef247->setDestEndpoint(dstPt247);\n    connRef247->setRoutingType((ConnType)2);\n\n    ConnRef *connRef248 = new ConnRef(router, 248);\n    ConnEnd srcPt248(Point(158.7764662957339, 103.6568448657052), 15);\n    connRef248->setSourceEndpoint(srcPt248);\n    ConnEnd dstPt248(Point(226.9431329624006, 70.65684486570521), 4);\n    connRef248->setDestEndpoint(dstPt248);\n    connRef248->setRoutingType((ConnType)2);\n#endif\n\n    ConnRef *connRef249 = new ConnRef(router, 249);\n    ConnEnd srcPt249(Point(-265.9508064325389, 386.2282734371338), 8);\n    connRef249->setSourceEndpoint(srcPt249);\n    ConnEnd dstPt249(Point(158.7764662957339, 246.2282734371338), 15);\n    connRef249->setDestEndpoint(dstPt249);\n    connRef249->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints249(1);\n    checkpoints249[0] = Checkpoint(Point(-242.9508064325389, 782.2282734371338), (ConnDirFlags) 15, (ConnDirFlags) 8);\n    connRef249->setRoutingCheckpoints(checkpoints249);\n\n    ConnRef *connRef250 = new ConnRef(router, 250);\n    ConnEnd srcPt250(Point(-265.9508064325389, 461.2282734371338), 8);\n    connRef250->setSourceEndpoint(srcPt250);\n    ConnEnd dstPt250(Point(158.7764662957339, 246.2282734371338), 15);\n    connRef250->setDestEndpoint(dstPt250);\n    connRef250->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints250(1);\n    checkpoints250[0] = Checkpoint(Point(-242.9508064325389, 782.2282734371338), (ConnDirFlags) 15, (ConnDirFlags) 8);\n    connRef250->setRoutingCheckpoints(checkpoints250);\n\n    ConnRef *connRef251 = new ConnRef(router, 251);\n    ConnEnd srcPt251(Point(-265.9508064325389, 536.2282734371338), 8);\n    connRef251->setSourceEndpoint(srcPt251);\n    ConnEnd dstPt251(Point(158.7764662957339, 246.2282734371338), 15);\n    connRef251->setDestEndpoint(dstPt251);\n    connRef251->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints251(1);\n    checkpoints251[0] = Checkpoint(Point(-242.9508064325389, 782.2282734371338), (ConnDirFlags) 15, (ConnDirFlags) 8);\n    connRef251->setRoutingCheckpoints(checkpoints251);\n\n    ConnRef *connRef252 = new ConnRef(router, 252);\n    ConnEnd srcPt252(Point(-265.9508064325389, 611.2282734371338), 8);\n    connRef252->setSourceEndpoint(srcPt252);\n    ConnEnd dstPt252(Point(158.7764662957339, 246.2282734371338), 15);\n    connRef252->setDestEndpoint(dstPt252);\n    connRef252->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints252(1);\n    checkpoints252[0] = Checkpoint(Point(-242.9508064325389, 782.2282734371338), (ConnDirFlags) 15, (ConnDirFlags) 8);\n    connRef252->setRoutingCheckpoints(checkpoints252);\n\n    ConnRef *connRef253 = new ConnRef(router, 253);\n    ConnEnd srcPt253(Point(-265.9508064325389, 686.2282734371338), 8);\n    connRef253->setSourceEndpoint(srcPt253);\n    ConnEnd dstPt253(Point(158.7764662957339, 246.2282734371338), 15);\n    connRef253->setDestEndpoint(dstPt253);\n    connRef253->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints253(1);\n    checkpoints253[0] = Checkpoint(Point(-242.9508064325389, 782.2282734371338), (ConnDirFlags) 15, (ConnDirFlags) 8);\n    connRef253->setRoutingCheckpoints(checkpoints253);\n\n    ConnRef *connRef254 = new ConnRef(router, 254);\n    ConnEnd srcPt254(Point(-265.9508064325389, 761.2282734371338), 8);\n    connRef254->setSourceEndpoint(srcPt254);\n    ConnEnd dstPt254(Point(158.7764662957339, 246.2282734371338), 15);\n    connRef254->setDestEndpoint(dstPt254);\n    connRef254->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints254(1);\n    checkpoints254[0] = Checkpoint(Point(-242.9508064325389, 782.2282734371338), (ConnDirFlags) 15, (ConnDirFlags) 8);\n    connRef254->setRoutingCheckpoints(checkpoints254);\n\n    ConnRef *connRef255 = new ConnRef(router, 255);\n    ConnEnd srcPt255(Point(-265.9508064325389, 803.2282734371338), 8);\n    connRef255->setSourceEndpoint(srcPt255);\n    ConnEnd dstPt255(Point(158.7764662957339, 246.2282734371338), 15);\n    connRef255->setDestEndpoint(dstPt255);\n    connRef255->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints255(1);\n    checkpoints255[0] = Checkpoint(Point(-242.9508064325389, 782.2282734371338), (ConnDirFlags) 15, (ConnDirFlags) 8);\n    connRef255->setRoutingCheckpoints(checkpoints255);\n\n    ConnRef *connRef256 = new ConnRef(router, 256);\n    ConnEnd srcPt256(Point(-265.9508064325389, 878.2282734371338), 8);\n    connRef256->setSourceEndpoint(srcPt256);\n    ConnEnd dstPt256(Point(158.7764662957339, 246.2282734371338), 15);\n    connRef256->setDestEndpoint(dstPt256);\n    connRef256->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints256(1);\n    checkpoints256[0] = Checkpoint(Point(-242.9508064325389, 782.2282734371338), (ConnDirFlags) 15, (ConnDirFlags) 8);\n    connRef256->setRoutingCheckpoints(checkpoints256);\n\n#ifdef ALL\n    ConnRef *connRef257 = new ConnRef(router, 257);\n    ConnEnd srcPt257(Point(-486.9508064345389, 246.2282734371338), 8);\n    connRef257->setSourceEndpoint(srcPt257);\n    ConnEnd dstPt257(Point(158.7764662957339, 246.2282734371338), 15);\n    connRef257->setDestEndpoint(dstPt257);\n    connRef257->setRoutingType((ConnType)2);\n#endif\n\n    ConnRef *connRef258 = new ConnRef(router, 258);\n    ConnEnd srcPt258(Point(-265.9508064325389, 1103.228273437134), 8);\n    connRef258->setSourceEndpoint(srcPt258);\n    ConnEnd dstPt258(Point(158.7764662957339, 246.2282734371338), 15);\n    connRef258->setDestEndpoint(dstPt258);\n    connRef258->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints258(1);\n    checkpoints258[0] = Checkpoint(Point(-242.9508064325389, 782.2282734371338), (ConnDirFlags) 15, (ConnDirFlags) 8);\n    connRef258->setRoutingCheckpoints(checkpoints258);\n\n#ifdef ALL\n    ConnRef *connRef259 = new ConnRef(router, 259);\n    ConnEnd srcPt259(Point(422.4431329624006, 715.9901782000385), 4);\n    connRef259->setSourceEndpoint(srcPt259);\n    ConnEnd dstPt259(Point(158.7764662957339, 246.2282734371338), 15);\n    connRef259->setDestEndpoint(dstPt259);\n    connRef259->setRoutingType((ConnType)2);\n\n    ConnRef *connRef260 = new ConnRef(router, 260);\n    ConnEnd srcPt260(Point(158.7764662957339, 246.2282734371338), 15);\n    connRef260->setSourceEndpoint(srcPt260);\n    ConnEnd dstPt260(Point(422.4431329624006, 951.3235115333719), 4);\n    connRef260->setDestEndpoint(dstPt260);\n    connRef260->setRoutingType((ConnType)2);\n\n    ConnRef *connRef261 = new ConnRef(router, 261);\n    ConnEnd srcPt261(Point(158.7764662957339, 246.2282734371338), 15);\n    connRef261->setSourceEndpoint(srcPt261);\n    ConnEnd dstPt261(Point(422.4431329624006, 1324.723511533372), 4);\n    connRef261->setDestEndpoint(dstPt261);\n    connRef261->setRoutingType((ConnType)2);\n\n    ConnRef *connRef262 = new ConnRef(router, 262);\n    ConnEnd srcPt262(Point(158.7764662957339, 246.2282734371338), 15);\n    connRef262->setSourceEndpoint(srcPt262);\n    ConnEnd dstPt262(Point(422.4431329624006, 1480.609225819086), 4);\n    connRef262->setDestEndpoint(dstPt262);\n    connRef262->setRoutingType((ConnType)2);\n\n    ConnRef *connRef263 = new ConnRef(router, 263);\n    ConnEnd srcPt263(Point(717.7288472481148, 246.2282734371338), 15);\n    connRef263->setSourceEndpoint(srcPt263);\n    ConnEnd dstPt263(Point(567.7288472481148, -641.8431551372947), 8);\n    connRef263->setDestEndpoint(dstPt263);\n    connRef263->setRoutingType((ConnType)2);\n\n    ConnRef *connRef264 = new ConnRef(router, 264);\n    ConnEnd srcPt264(Point(-295.9508064325389, 953.2282734371338), 4);\n    connRef264->setSourceEndpoint(srcPt264);\n    ConnEnd dstPt264(Point(-625.9508064345389, 246.2282734371338), 15);\n    connRef264->setDestEndpoint(dstPt264);\n    connRef264->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints264(1);\n    checkpoints264[0] = Checkpoint(Point(-318.9508064325389, 782.2282734371338), (ConnDirFlags) 15, (ConnDirFlags) 4);\n    connRef264->setRoutingCheckpoints(checkpoints264);\n\n    ConnRef *connRef265 = new ConnRef(router, 265);\n    ConnEnd srcPt265(Point(-295.9508064325389, 1028.228273437134), 4);\n    connRef265->setSourceEndpoint(srcPt265);\n    ConnEnd dstPt265(Point(-625.9508064345389, 246.2282734371338), 15);\n    connRef265->setDestEndpoint(dstPt265);\n    connRef265->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints265(1);\n    checkpoints265[0] = Checkpoint(Point(-318.9508064325389, 782.2282734371338), (ConnDirFlags) 15, (ConnDirFlags) 4);\n    connRef265->setRoutingCheckpoints(checkpoints265);\n\n    ConnRef *connRef266 = new ConnRef(router, 266);\n    ConnEnd srcPt266(Point(-625.9508064345389, 246.2282734371338), 15);\n    connRef266->setSourceEndpoint(srcPt266);\n    ConnEnd dstPt266(Point(-516.9508064345389, 246.2282734371338), 4);\n    connRef266->setDestEndpoint(dstPt266);\n    connRef266->setRoutingType((ConnType)2);\n\n    ConnRef *connRef267 = new ConnRef(router, 267);\n    ConnEnd srcPt267(Point(-295.9508064325389, 1103.228273437134), 4);\n    connRef267->setSourceEndpoint(srcPt267);\n    ConnEnd dstPt267(Point(-625.9508064345389, 246.2282734371338), 15);\n    connRef267->setDestEndpoint(dstPt267);\n    connRef267->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints267(1);\n    checkpoints267[0] = Checkpoint(Point(-318.9508064325389, 782.2282734371338), (ConnDirFlags) 15, (ConnDirFlags) 4);\n    connRef267->setRoutingCheckpoints(checkpoints267);\n\n    ConnRef *connRef268 = new ConnRef(router, 268);\n    ConnEnd srcPt268(Point(-553.9508064345389, 308.2282734381338), 15);\n    connRef268->setSourceEndpoint(srcPt268);\n    ConnEnd dstPt268(Point(-516.9508064345389, 246.2282734371338), 4);\n    connRef268->setDestEndpoint(dstPt268);\n    connRef268->setRoutingType((ConnType)2);\n\n    ConnRef *connRef269 = new ConnRef(router, 269);\n    ConnEnd srcPt269(Point(-393.9508064335388, 212.2282734381338), 8);\n    connRef269->setSourceEndpoint(srcPt269);\n    ConnEnd dstPt269(Point(-30.22353370526614, 308.2282734381338), 15);\n    connRef269->setDestEndpoint(dstPt269);\n    connRef269->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints269(1);\n    checkpoints269[0] = Checkpoint(Point(-370.9508064335388, 308.2282734381338), (ConnDirFlags) 15, (ConnDirFlags) 8);\n    connRef269->setRoutingCheckpoints(checkpoints269);\n\n    ConnRef *connRef270 = new ConnRef(router, 270);\n    ConnEnd srcPt270(Point(-393.9508064335388, 287.2282734381338), 8);\n    connRef270->setSourceEndpoint(srcPt270);\n    ConnEnd dstPt270(Point(-30.22353370526614, 308.2282734381338), 15);\n    connRef270->setDestEndpoint(dstPt270);\n    connRef270->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints270(1);\n    checkpoints270[0] = Checkpoint(Point(-370.9508064335388, 308.2282734381338), (ConnDirFlags) 15, (ConnDirFlags) 8);\n    connRef270->setRoutingCheckpoints(checkpoints270);\n\n    ConnRef *connRef271 = new ConnRef(router, 271);\n    ConnEnd srcPt271(Point(-393.9508064335388, 329.2282734381338), 8);\n    connRef271->setSourceEndpoint(srcPt271);\n    ConnEnd dstPt271(Point(-30.22353370526614, 308.2282734381338), 15);\n    connRef271->setDestEndpoint(dstPt271);\n    connRef271->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints271(1);\n    checkpoints271[0] = Checkpoint(Point(-370.9508064335388, 308.2282734381338), (ConnDirFlags) 15, (ConnDirFlags) 8);\n    connRef271->setRoutingCheckpoints(checkpoints271);\n\n    ConnRef *connRef272 = new ConnRef(router, 272);\n    ConnEnd srcPt272(Point(-393.9508064335388, 404.2282734381338), 8);\n    connRef272->setSourceEndpoint(srcPt272);\n    ConnEnd dstPt272(Point(-30.22353370526614, 308.2282734381338), 15);\n    connRef272->setDestEndpoint(dstPt272);\n    connRef272->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints272(1);\n    checkpoints272[0] = Checkpoint(Point(-370.9508064335388, 308.2282734381338), (ConnDirFlags) 15, (ConnDirFlags) 8);\n    connRef272->setRoutingCheckpoints(checkpoints272);\n\n    ConnRef *connRef273 = new ConnRef(router, 273);\n    ConnEnd srcPt273(Point(241.9431329624006, 308.2282734381338), 15);\n    connRef273->setSourceEndpoint(srcPt273);\n    ConnEnd dstPt273(Point(389.4431329624006, 434.9901782000385), 4);\n    connRef273->setDestEndpoint(dstPt273);\n    connRef273->setRoutingType((ConnType)2);\n\n    ConnRef *connRef274 = new ConnRef(router, 274);\n    ConnEnd srcPt274(Point(519.7288472481148, 434.9901782000385), 15);\n    connRef274->setSourceEndpoint(srcPt274);\n    ConnEnd dstPt274(Point(603.7288472481148, 434.9901782000385), 4);\n    connRef274->setDestEndpoint(dstPt274);\n    connRef274->setRoutingType((ConnType)2);\n\n    ConnRef *connRef275 = new ConnRef(router, 275);\n    ConnEnd srcPt275(Point(651.7288472481148, 918.3235115333719), 15);\n    connRef275->setSourceEndpoint(srcPt275);\n    ConnEnd dstPt275(Point(452.4431329624006, 715.9901782000385), 8);\n    connRef275->setDestEndpoint(dstPt275);\n    connRef275->setRoutingType((ConnType)2);\n\n    ConnRef *connRef276 = new ConnRef(router, 276);\n    ConnEnd srcPt276(Point(799.7288472481148, 939.3235115333719), 4);\n    connRef276->setSourceEndpoint(srcPt276);\n    ConnEnd dstPt276(Point(651.7288472481148, 918.3235115333719), 15);\n    connRef276->setDestEndpoint(dstPt276);\n    connRef276->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints276(1);\n    checkpoints276[0] = Checkpoint(Point(776.7288472481148, 918.3235115333719), (ConnDirFlags) 15, (ConnDirFlags) 4);\n    connRef276->setRoutingCheckpoints(checkpoints276);\n\n    ConnRef *connRef277 = new ConnRef(router, 277);\n    ConnEnd srcPt277(Point(799.7288472481148, 897.3235115333719), 4);\n    connRef277->setSourceEndpoint(srcPt277);\n    ConnEnd dstPt277(Point(651.7288472481148, 918.3235115333719), 15);\n    connRef277->setDestEndpoint(dstPt277);\n    connRef277->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints277(1);\n    checkpoints277[0] = Checkpoint(Point(776.7288472481148, 918.3235115333719), (ConnDirFlags) 15, (ConnDirFlags) 4);\n    connRef277->setRoutingCheckpoints(checkpoints277);\n\n    ConnRef *connRef278 = new ConnRef(router, 278);\n    ConnEnd srcPt278(Point(781.7288472481148, 434.9901782000385), 15);\n    connRef278->setSourceEndpoint(srcPt278);\n    ConnEnd dstPt278(Point(834.7288472481148, 374.561606771467), 4);\n    connRef278->setDestEndpoint(dstPt278);\n    connRef278->setRoutingType((ConnType)2);\n\n    ConnRef *connRef279 = new ConnRef(router, 279);\n    ConnEnd srcPt279(Point(781.7288472481148, 434.9901782000385), 15);\n    connRef279->setSourceEndpoint(srcPt279);\n    ConnEnd dstPt279(Point(834.7288472481148, 467.9901782000385), 4);\n    connRef279->setDestEndpoint(dstPt279);\n    connRef279->setRoutingType((ConnType)2);\n\n    ConnRef *connRef280 = new ConnRef(router, 280);\n    ConnEnd srcPt280(Point(781.7288472481148, 434.9901782000385), 15);\n    connRef280->setSourceEndpoint(srcPt280);\n    ConnEnd dstPt280(Point(912.7288472491148, 467.9901782000385), 4);\n    connRef280->setDestEndpoint(dstPt280);\n    connRef280->setRoutingType((ConnType)2);\n\n    ConnRef *connRef281 = new ConnRef(router, 281);\n    ConnEnd srcPt281(Point(781.7288472481148, 434.9901782000385), 15);\n    connRef281->setSourceEndpoint(srcPt281);\n    ConnEnd dstPt281(Point(1011.728847249115, 467.9901782000385), 4);\n    connRef281->setDestEndpoint(dstPt281);\n    connRef281->setRoutingType((ConnType)2);\n\n    ConnRef *connRef282 = new ConnRef(router, 282);\n    ConnEnd srcPt282(Point(781.7288472481148, 434.9901782000385), 15);\n    connRef282->setSourceEndpoint(srcPt282);\n    ConnEnd dstPt282(Point(912.7288472491148, 374.561606771467), 4);\n    connRef282->setDestEndpoint(dstPt282);\n    connRef282->setRoutingType((ConnType)2);\n\n    ConnRef *connRef283 = new ConnRef(router, 283);\n    ConnEnd srcPt283(Point(781.7288472481148, 434.9901782000385), 15);\n    connRef283->setSourceEndpoint(srcPt283);\n    ConnEnd dstPt283(Point(1011.728847249115, 374.561606771467), 4);\n    connRef283->setDestEndpoint(dstPt283);\n    connRef283->setRoutingType((ConnType)2);\n\n    ConnRef *connRef284 = new ConnRef(router, 284);\n    ConnEnd srcPt284(Point(864.7288472481148, 467.9901782000385), 8);\n    connRef284->setSourceEndpoint(srcPt284);\n    ConnEnd dstPt284(Point(1331.728847251115, 434.9901782000385), 15);\n    connRef284->setDestEndpoint(dstPt284);\n    connRef284->setRoutingType((ConnType)2);\n\n    ConnRef *connRef285 = new ConnRef(router, 285);\n    ConnEnd srcPt285(Point(942.7288472491148, 467.9901782000385), 8);\n    connRef285->setSourceEndpoint(srcPt285);\n    ConnEnd dstPt285(Point(1331.728847251115, 434.9901782000385), 15);\n    connRef285->setDestEndpoint(dstPt285);\n    connRef285->setRoutingType((ConnType)2);\n\n    ConnRef *connRef286 = new ConnRef(router, 286);\n    ConnEnd srcPt286(Point(1041.728847249115, 467.9901782000385), 8);\n    connRef286->setSourceEndpoint(srcPt286);\n    ConnEnd dstPt286(Point(1331.728847251115, 434.9901782000385), 15);\n    connRef286->setDestEndpoint(dstPt286);\n    connRef286->setRoutingType((ConnType)2);\n\n    ConnRef *connRef287 = new ConnRef(router, 287);\n    ConnEnd srcPt287(Point(942.7288472491148, 374.561606771467), 8);\n    connRef287->setSourceEndpoint(srcPt287);\n    ConnEnd dstPt287(Point(1331.728847251115, 434.9901782000385), 15);\n    connRef287->setDestEndpoint(dstPt287);\n    connRef287->setRoutingType((ConnType)2);\n\n    ConnRef *connRef288 = new ConnRef(router, 288);\n    ConnEnd srcPt288(Point(-486.9508064345389, 246.2282734371338), 8);\n    connRef288->setSourceEndpoint(srcPt288);\n    ConnEnd dstPt288(Point(-30.22353370526614, 308.2282734381338), 15);\n    connRef288->setDestEndpoint(dstPt288);\n    connRef288->setRoutingType((ConnType)2);\n\n    ConnRef *connRef289 = new ConnRef(router, 289);\n    ConnEnd srcPt289(Point(-150.8902003719328, 1021.323511533372), 15);\n    connRef289->setSourceEndpoint(srcPt289);\n    ConnEnd dstPt289(Point(-150.8902003719328, 933.3235115333719), 2);\n    connRef289->setDestEndpoint(dstPt289);\n    connRef289->setRoutingType((ConnType)2);\n\n    ConnRef *connRef290 = new ConnRef(router, 290);\n    ConnEnd srcPt290(Point(-150.8902003719328, 796.3235115333719), 15);\n    connRef290->setSourceEndpoint(srcPt290);\n    ConnEnd dstPt290(Point(-12.22353370526611, 796.3235115333719), 4);\n    connRef290->setDestEndpoint(dstPt290);\n    connRef290->setRoutingType((ConnType)2);\n\n    ConnRef *connRef291 = new ConnRef(router, 291);\n    ConnEnd srcPt291(Point(17.77646629473389, 796.3235115333719), 8);\n    connRef291->setSourceEndpoint(srcPt291);\n    ConnEnd dstPt291(Point(371.4431329624006, 796.3235115333719), 15);\n    connRef291->setDestEndpoint(dstPt291);\n    connRef291->setRoutingType((ConnType)2);\n\n    ConnRef *connRef292 = new ConnRef(router, 292);\n    ConnEnd srcPt292(Point(371.4431329624006, 796.3235115333719), 15);\n    connRef292->setSourceEndpoint(srcPt292);\n    ConnEnd dstPt292(Point(422.4431329624006, 951.3235115333719), 4);\n    connRef292->setDestEndpoint(dstPt292);\n    connRef292->setRoutingType((ConnType)2);\n\n    ConnRef *connRef293 = new ConnRef(router, 293);\n    ConnEnd srcPt293(Point(371.4431329624006, 796.3235115333719), 15);\n    connRef293->setSourceEndpoint(srcPt293);\n    ConnEnd dstPt293(Point(274.9431329624006, 1072.323511533372), 1);\n    connRef293->setDestEndpoint(dstPt293);\n    connRef293->setRoutingType((ConnType)2);\n\n    ConnRef *connRef294 = new ConnRef(router, 294);\n    ConnEnd srcPt294(Point(829.7288472481148, 939.3235115333719), 8);\n    connRef294->setSourceEndpoint(srcPt294);\n    ConnEnd dstPt294(Point(894.7288472491148, 918.3235115333719), 15);\n    connRef294->setDestEndpoint(dstPt294);\n    connRef294->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints294(1);\n    checkpoints294[0] = Checkpoint(Point(852.7288472481148, 918.3235115333719), (ConnDirFlags) 15, (ConnDirFlags) 8);\n    connRef294->setRoutingCheckpoints(checkpoints294);\n\n    ConnRef *connRef295 = new ConnRef(router, 295);\n    ConnEnd srcPt295(Point(1250.728847251115, 655.9901782000385), 4);\n    connRef295->setSourceEndpoint(srcPt295);\n    ConnEnd dstPt295(Point(894.7288472491148, 918.3235115333719), 15);\n    connRef295->setDestEndpoint(dstPt295);\n    connRef295->setRoutingType((ConnType)2);\n\n    ConnRef *connRef296 = new ConnRef(router, 296);\n    ConnEnd srcPt296(Point(1250.728847251115, 1053.323511533372), 4);\n    connRef296->setSourceEndpoint(srcPt296);\n    ConnEnd dstPt296(Point(894.7288472491148, 918.3235115333719), 15);\n    connRef296->setDestEndpoint(dstPt296);\n    connRef296->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints296(1);\n    checkpoints296[0] = Checkpoint(Point(1227.728847251115, 1074.323511533372), (ConnDirFlags) 15, (ConnDirFlags) 4);\n    connRef296->setRoutingCheckpoints(checkpoints296);\n\n    ConnRef *connRef297 = new ConnRef(router, 297);\n    ConnEnd srcPt297(Point(1250.728847251115, 1095.323511533372), 4);\n    connRef297->setSourceEndpoint(srcPt297);\n    ConnEnd dstPt297(Point(894.7288472491148, 918.3235115333719), 15);\n    connRef297->setDestEndpoint(dstPt297);\n    connRef297->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints297(1);\n    checkpoints297[0] = Checkpoint(Point(1227.728847251115, 1074.323511533372), (ConnDirFlags) 15, (ConnDirFlags) 4);\n    connRef297->setRoutingCheckpoints(checkpoints297);\n\n    ConnRef *connRef298 = new ConnRef(router, 298);\n    ConnEnd srcPt298(Point(1478.728847251115, 918.3235115333719), 15);\n    connRef298->setSourceEndpoint(srcPt298);\n    ConnEnd dstPt298(Point(1280.728847251115, 655.9901782000385), 8);\n    connRef298->setDestEndpoint(dstPt298);\n    connRef298->setRoutingType((ConnType)2);\n\n    ConnRef *connRef299 = new ConnRef(router, 299);\n    ConnEnd srcPt299(Point(1397.728847251115, 561.9901782000385), 15);\n    connRef299->setSourceEndpoint(srcPt299);\n    ConnEnd dstPt299(Point(1280.728847251115, 655.9901782000385), 8);\n    connRef299->setDestEndpoint(dstPt299);\n    connRef299->setRoutingType((ConnType)2);\n\n    ConnRef *connRef300 = new ConnRef(router, 300);\n    ConnEnd srcPt300(Point(1430.728847251115, 852.3235115333719), 15);\n    connRef300->setSourceEndpoint(srcPt300);\n    ConnEnd dstPt300(Point(1280.728847251115, 852.3235115333719), 8);\n    connRef300->setDestEndpoint(dstPt300);\n    connRef300->setRoutingType((ConnType)2);\n\n    ConnRef *connRef301 = new ConnRef(router, 301);\n    ConnEnd srcPt301(Point(1177.728847250115, 958.3235115333719), 8);\n    connRef301->setSourceEndpoint(srcPt301);\n    ConnEnd dstPt301(Point(1430.728847251115, 1054.323511533372), 15);\n    connRef301->setDestEndpoint(dstPt301);\n    connRef301->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints301(1);\n    checkpoints301[0] = Checkpoint(Point(1200.728847250115, 1054.323511533372), (ConnDirFlags) 15, (ConnDirFlags) 8);\n    connRef301->setRoutingCheckpoints(checkpoints301);\n\n    ConnRef *connRef302 = new ConnRef(router, 302);\n    ConnEnd srcPt302(Point(1177.728847250115, 1033.323511533372), 8);\n    connRef302->setSourceEndpoint(srcPt302);\n    ConnEnd dstPt302(Point(1430.728847251115, 1054.323511533372), 15);\n    connRef302->setDestEndpoint(dstPt302);\n    connRef302->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints302(1);\n    checkpoints302[0] = Checkpoint(Point(1200.728847250115, 1054.323511533372), (ConnDirFlags) 15, (ConnDirFlags) 8);\n    connRef302->setRoutingCheckpoints(checkpoints302);\n\n    ConnRef *connRef303 = new ConnRef(router, 303);\n    ConnEnd srcPt303(Point(1177.728847250115, 1075.323511533372), 8);\n    connRef303->setSourceEndpoint(srcPt303);\n    ConnEnd dstPt303(Point(1430.728847251115, 1054.323511533372), 15);\n    connRef303->setDestEndpoint(dstPt303);\n    connRef303->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints303(1);\n    checkpoints303[0] = Checkpoint(Point(1200.728847250115, 1054.323511533372), (ConnDirFlags) 15, (ConnDirFlags) 8);\n    connRef303->setRoutingCheckpoints(checkpoints303);\n\n    ConnRef *connRef304 = new ConnRef(router, 304);\n    ConnEnd srcPt304(Point(274.9431329624006, 1151.323511533372), 15);\n    connRef304->setSourceEndpoint(srcPt304);\n    ConnEnd dstPt304(Point(422.4431329624006, 1324.723511533372), 4);\n    connRef304->setDestEndpoint(dstPt304);\n    connRef304->setRoutingType((ConnType)2);\n\n    ConnRef *connRef305 = new ConnRef(router, 305);\n    ConnEnd srcPt305(Point(651.7288472481148, 1324.723511533372), 15);\n    connRef305->setSourceEndpoint(srcPt305);\n    ConnEnd dstPt305(Point(799.7288472481148, 1324.723511533372), 4);\n    connRef305->setDestEndpoint(dstPt305);\n    connRef305->setRoutingType((ConnType)2);\n\n    ConnRef *connRef306 = new ConnRef(router, 306);\n    ConnEnd srcPt306(Point(1250.728847251115, 1267.323511533372), 4);\n    connRef306->setSourceEndpoint(srcPt306);\n    ConnEnd dstPt306(Point(894.7288472491148, 1324.723511533372), 15);\n    connRef306->setDestEndpoint(dstPt306);\n    connRef306->setRoutingType((ConnType)2);\n\n    ConnRef *connRef307 = new ConnRef(router, 307);\n    ConnEnd srcPt307(Point(1478.728847251115, 1324.723511533372), 15);\n    connRef307->setSourceEndpoint(srcPt307);\n    ConnEnd dstPt307(Point(1280.728847251115, 1267.323511533372), 8);\n    connRef307->setDestEndpoint(dstPt307);\n    connRef307->setRoutingType((ConnType)2);\n\n    ConnRef *connRef308 = new ConnRef(router, 308);\n    ConnEnd srcPt308(Point(-441.9508064335388, 1480.609225819086), 15);\n    connRef308->setSourceEndpoint(srcPt308);\n    ConnEnd dstPt308(Point(-78.22353370526614, 1480.609225819086), 4);\n    connRef308->setDestEndpoint(dstPt308);\n    connRef308->setRoutingType((ConnType)2);\n\n    ConnRef *connRef309 = new ConnRef(router, 309);\n    ConnEnd srcPt309(Point(35.77646629473389, 1480.609225819086), 15);\n    connRef309->setSourceEndpoint(srcPt309);\n    ConnEnd dstPt309(Point(422.4431329624006, 1480.609225819086), 4);\n    connRef309->setDestEndpoint(dstPt309);\n    connRef309->setRoutingType((ConnType)2);\n\n    ConnRef *connRef310 = new ConnRef(router, 310);\n    ConnEnd srcPt310(Point(799.7288472481148, 1459.609225819086), 4);\n    connRef310->setSourceEndpoint(srcPt310);\n    ConnEnd dstPt310(Point(651.7288472481148, 1480.609225819086), 15);\n    connRef310->setDestEndpoint(dstPt310);\n    connRef310->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints310(1);\n    checkpoints310[0] = Checkpoint(Point(776.7288472481148, 1480.609225819086), (ConnDirFlags) 15, (ConnDirFlags) 4);\n    connRef310->setRoutingCheckpoints(checkpoints310);\n\n    ConnRef *connRef311 = new ConnRef(router, 311);\n    ConnEnd srcPt311(Point(829.7288472481148, 1501.609225819086), 8);\n    connRef311->setSourceEndpoint(srcPt311);\n    ConnEnd dstPt311(Point(894.7288472491148, 1480.609225819086), 15);\n    connRef311->setDestEndpoint(dstPt311);\n    connRef311->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints311(1);\n    checkpoints311[0] = Checkpoint(Point(852.7288472481148, 1480.609225819086), (ConnDirFlags) 15, (ConnDirFlags) 8);\n    connRef311->setRoutingCheckpoints(checkpoints311);\n\n    ConnRef *connRef312 = new ConnRef(router, 312);\n    ConnEnd srcPt312(Point(1250.728847251115, 1423.323511533372), 4);\n    connRef312->setSourceEndpoint(srcPt312);\n    ConnEnd dstPt312(Point(894.7288472491148, 1480.609225819086), 15);\n    connRef312->setDestEndpoint(dstPt312);\n    connRef312->setRoutingType((ConnType)2);\n\n    ConnRef *connRef313 = new ConnRef(router, 313);\n    ConnEnd srcPt313(Point(1478.728847251115, 1480.609225819086), 15);\n    connRef313->setSourceEndpoint(srcPt313);\n    ConnEnd dstPt313(Point(1280.728847251115, 1423.323511533372), 8);\n    connRef313->setDestEndpoint(dstPt313);\n    connRef313->setRoutingType((ConnType)2);\n\n    ConnRef *connRef314 = new ConnRef(router, 314);\n    ConnEnd srcPt314(Point(-423.9508064335388, 404.2282734381338), 4);\n    connRef314->setSourceEndpoint(srcPt314);\n    ConnEnd dstPt314(Point(-553.9508064345389, 308.2282734381338), 15);\n    connRef314->setDestEndpoint(dstPt314);\n    connRef314->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints314(1);\n    checkpoints314[0] = Checkpoint(Point(-446.9508064335388, 308.2282734381338), (ConnDirFlags) 15, (ConnDirFlags) 4);\n    connRef314->setRoutingCheckpoints(checkpoints314);\n\n    ConnRef *connRef315 = new ConnRef(router, 315);\n    ConnEnd srcPt315(Point(-150.8902003719328, 903.3235115333719), 1);\n    connRef315->setSourceEndpoint(srcPt315);\n    ConnEnd dstPt315(Point(-150.8902003719328, 796.3235115333719), 15);\n    connRef315->setDestEndpoint(dstPt315);\n    connRef315->setRoutingType((ConnType)2);\n\n    ConnRef *connRef316 = new ConnRef(router, 316);\n    ConnEnd srcPt316(Point(422.4431329624006, 715.9901782000385), 4);\n    connRef316->setSourceEndpoint(srcPt316);\n    ConnEnd dstPt316(Point(371.4431329624006, 796.3235115333719), 15);\n    connRef316->setDestEndpoint(dstPt316);\n    connRef316->setRoutingType((ConnType)2);\n\n    ConnRef *connRef317 = new ConnRef(router, 317);\n    ConnEnd srcPt317(Point(452.4431329624006, 951.3235115333719), 8);\n    connRef317->setSourceEndpoint(srcPt317);\n    ConnEnd dstPt317(Point(651.7288472481148, 918.3235115333719), 15);\n    connRef317->setDestEndpoint(dstPt317);\n    connRef317->setRoutingType((ConnType)2);\n\n    ConnRef *connRef318 = new ConnRef(router, 318);\n    ConnEnd srcPt318(Point(829.7288472481148, 897.3235115333719), 8);\n    connRef318->setSourceEndpoint(srcPt318);\n    ConnEnd dstPt318(Point(894.7288472491148, 918.3235115333719), 15);\n    connRef318->setDestEndpoint(dstPt318);\n    connRef318->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints318(1);\n    checkpoints318[0] = Checkpoint(Point(852.7288472481148, 918.3235115333719), (ConnDirFlags) 15, (ConnDirFlags) 8);\n    connRef318->setRoutingCheckpoints(checkpoints318);\n\n    ConnRef *connRef319 = new ConnRef(router, 319);\n    ConnEnd srcPt319(Point(274.9431329624006, 1102.323511533372), 2);\n    connRef319->setSourceEndpoint(srcPt319);\n    ConnEnd dstPt319(Point(274.9431329624006, 1151.323511533372), 15);\n    connRef319->setDestEndpoint(dstPt319);\n    connRef319->setRoutingType((ConnType)2);\n\n    ConnRef *connRef320 = new ConnRef(router, 320);\n    ConnEnd srcPt320(Point(452.4431329624006, 1324.723511533372), 8);\n    connRef320->setSourceEndpoint(srcPt320);\n    ConnEnd dstPt320(Point(651.7288472481148, 1324.723511533372), 15);\n    connRef320->setDestEndpoint(dstPt320);\n    connRef320->setRoutingType((ConnType)2);\n\n    ConnRef *connRef321 = new ConnRef(router, 321);\n    ConnEnd srcPt321(Point(829.7288472481148, 1324.723511533372), 8);\n    connRef321->setSourceEndpoint(srcPt321);\n    ConnEnd dstPt321(Point(894.7288472491148, 1324.723511533372), 15);\n    connRef321->setDestEndpoint(dstPt321);\n    connRef321->setRoutingType((ConnType)2);\n\n    ConnRef *connRef322 = new ConnRef(router, 322);\n    ConnEnd srcPt322(Point(-48.22353370526614, 1480.609225819086), 8);\n    connRef322->setSourceEndpoint(srcPt322);\n    ConnEnd dstPt322(Point(35.77646629473389, 1480.609225819086), 15);\n    connRef322->setDestEndpoint(dstPt322);\n    connRef322->setRoutingType((ConnType)2);\n\n    ConnRef *connRef323 = new ConnRef(router, 323);\n    ConnEnd srcPt323(Point(452.4431329624006, 1480.609225819086), 8);\n    connRef323->setSourceEndpoint(srcPt323);\n    ConnEnd dstPt323(Point(651.7288472481148, 1480.609225819086), 15);\n    connRef323->setDestEndpoint(dstPt323);\n    connRef323->setRoutingType((ConnType)2);\n\n    ConnRef *connRef324 = new ConnRef(router, 324);\n    ConnEnd srcPt324(Point(829.7288472481148, 1459.609225819086), 8);\n    connRef324->setSourceEndpoint(srcPt324);\n    ConnEnd dstPt324(Point(894.7288472491148, 1480.609225819086), 15);\n    connRef324->setDestEndpoint(dstPt324);\n    connRef324->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints324(1);\n    checkpoints324[0] = Checkpoint(Point(852.7288472481148, 1480.609225819086), (ConnDirFlags) 15, (ConnDirFlags) 8);\n    connRef324->setRoutingCheckpoints(checkpoints324);\n\n    ConnRef *connRef325 = new ConnRef(router, 325);\n    ConnEnd srcPt325(Point(799.7288472481148, 1501.609225819086), 4);\n    connRef325->setSourceEndpoint(srcPt325);\n    ConnEnd dstPt325(Point(651.7288472481148, 1480.609225819086), 15);\n    connRef325->setDestEndpoint(dstPt325);\n    connRef325->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints325(1);\n    checkpoints325[0] = Checkpoint(Point(776.7288472481148, 1480.609225819086), (ConnDirFlags) 15, (ConnDirFlags) 4);\n    connRef325->setRoutingCheckpoints(checkpoints325);\n\n    ConnRef *connRef326 = new ConnRef(router, 326);\n    ConnEnd srcPt326(Point(1250.728847251115, 852.3235115333719), 4);\n    connRef326->setSourceEndpoint(srcPt326);\n    ConnEnd dstPt326(Point(993.7288472491148, 852.3235115333719), 15);\n    connRef326->setDestEndpoint(dstPt326);\n    connRef326->setRoutingType((ConnType)2);\n\n    ConnRef *connRef327 = new ConnRef(router, 327);\n    ConnEnd srcPt327(Point(1250.728847251115, 655.9901782000385), 4);\n    connRef327->setSourceEndpoint(srcPt327);\n    ConnEnd dstPt327(Point(1096.728847250115, 561.9901782000385), 15);\n    connRef327->setDestEndpoint(dstPt327);\n    connRef327->setRoutingType((ConnType)2);\n\n    ConnRef *connRef328 = new ConnRef(router, 328);\n    ConnEnd srcPt328(Point(1147.728847250115, 958.3235115333719), 4);\n    connRef328->setSourceEndpoint(srcPt328);\n    ConnEnd dstPt328(Point(993.7288472491148, 1054.323511533372), 15);\n    connRef328->setDestEndpoint(dstPt328);\n    connRef328->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints328(1);\n    checkpoints328[0] = Checkpoint(Point(1124.728847250115, 1054.323511533372), (ConnDirFlags) 15, (ConnDirFlags) 4);\n    connRef328->setRoutingCheckpoints(checkpoints328);\n\n    ConnRef *connRef329 = new ConnRef(router, 329);\n    ConnEnd srcPt329(Point(1147.728847250115, 1033.323511533372), 4);\n    connRef329->setSourceEndpoint(srcPt329);\n    ConnEnd dstPt329(Point(993.7288472491148, 1054.323511533372), 15);\n    connRef329->setDestEndpoint(dstPt329);\n    connRef329->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints329(1);\n    checkpoints329[0] = Checkpoint(Point(1124.728847250115, 1054.323511533372), (ConnDirFlags) 15, (ConnDirFlags) 4);\n    connRef329->setRoutingCheckpoints(checkpoints329);\n\n    ConnRef *connRef330 = new ConnRef(router, 330);\n    ConnEnd srcPt330(Point(1280.728847251115, 1053.323511533372), 8);\n    connRef330->setSourceEndpoint(srcPt330);\n    ConnEnd dstPt330(Point(1478.728847251115, 918.3235115333719), 15);\n    connRef330->setDestEndpoint(dstPt330);\n    connRef330->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints330(1);\n    checkpoints330[0] = Checkpoint(Point(1303.728847251115, 1074.323511533372), (ConnDirFlags) 15, (ConnDirFlags) 8);\n    connRef330->setRoutingCheckpoints(checkpoints330);\n\n    ConnRef *connRef331 = new ConnRef(router, 331);\n    ConnEnd srcPt331(Point(1280.728847251115, 1095.323511533372), 8);\n    connRef331->setSourceEndpoint(srcPt331);\n    ConnEnd dstPt331(Point(1478.728847251115, 918.3235115333719), 15);\n    connRef331->setDestEndpoint(dstPt331);\n    connRef331->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints331(1);\n    checkpoints331[0] = Checkpoint(Point(1303.728847251115, 1074.323511533372), (ConnDirFlags) 15, (ConnDirFlags) 8);\n    connRef331->setRoutingCheckpoints(checkpoints331);\n\n    ConnRef *connRef332 = new ConnRef(router, 332);\n    ConnEnd srcPt332(Point(106.7764662947339, -148.3431551362948), 1);\n    connRef332->setSourceEndpoint(srcPt332);\n    ConnEnd dstPt332(Point(437.4431329624006, -323.3431551372947), 15);\n    connRef332->setDestEndpoint(dstPt332);\n    connRef332->setRoutingType((ConnType)2);\n\n    ConnRef *connRef333 = new ConnRef(router, 333);\n    ConnEnd srcPt333(Point(864.7288472481148, 467.9901782000385), 8);\n    connRef333->setSourceEndpoint(srcPt333);\n    ConnEnd dstPt333(Point(1129.728847250115, 308.2282734381338), 15);\n    connRef333->setDestEndpoint(dstPt333);\n    connRef333->setRoutingType((ConnType)2);\n\n    ConnRef *connRef334 = new ConnRef(router, 334);\n    ConnEnd srcPt334(Point(106.7764662947339, -46.34315513529478), 1);\n    connRef334->setSourceEndpoint(srcPt334);\n    ConnEnd dstPt334(Point(437.4431329624006, -323.3431551372947), 15);\n    connRef334->setDestEndpoint(dstPt334);\n    connRef334->setRoutingType((ConnType)2);\n\n    ConnRef *connRef335 = new ConnRef(router, 335);\n    ConnEnd srcPt335(Point(942.7288472491148, 467.9901782000385), 8);\n    connRef335->setSourceEndpoint(srcPt335);\n    ConnEnd dstPt335(Point(1129.728847250115, 308.2282734381338), 15);\n    connRef335->setDestEndpoint(dstPt335);\n    connRef335->setRoutingType((ConnType)2);\n\n    ConnRef *connRef336 = new ConnRef(router, 336);\n    ConnEnd srcPt336(Point(106.7764662947339, 55.65684486570521), 1);\n    connRef336->setSourceEndpoint(srcPt336);\n    ConnEnd dstPt336(Point(437.4431329624006, -323.3431551372947), 15);\n    connRef336->setDestEndpoint(dstPt336);\n    connRef336->setRoutingType((ConnType)2);\n\n    ConnRef *connRef337 = new ConnRef(router, 337);\n    ConnEnd srcPt337(Point(1041.728847249115, 467.9901782000385), 8);\n    connRef337->setSourceEndpoint(srcPt337);\n    ConnEnd dstPt337(Point(1129.728847250115, 308.2282734381338), 15);\n    connRef337->setDestEndpoint(dstPt337);\n    connRef337->setRoutingType((ConnType)2);\n\n    ConnRef *connRef338 = new ConnRef(router, 338);\n    ConnEnd srcPt338(Point(256.9431329624006, -31.34315513529478), 8);\n    connRef338->setSourceEndpoint(srcPt338);\n    ConnEnd dstPt338(Point(437.4431329624006, -323.3431551372947), 15);\n    connRef338->setDestEndpoint(dstPt338);\n    connRef338->setRoutingType((ConnType)2);\n\n    ConnRef *connRef339 = new ConnRef(router, 339);\n    ConnEnd srcPt339(Point(942.7288472491148, 374.561606771467), 8);\n    connRef339->setSourceEndpoint(srcPt339);\n    ConnEnd dstPt339(Point(1129.728847250115, 308.2282734381338), 15);\n    connRef339->setDestEndpoint(dstPt339);\n    connRef339->setRoutingType((ConnType)2);\n\n    ConnRef *connRef340 = new ConnRef(router, 340);\n    ConnEnd srcPt340(Point(1147.728847250115, 1075.323511533372), 4);\n    connRef340->setSourceEndpoint(srcPt340);\n    ConnEnd dstPt340(Point(993.7288472491148, 1054.323511533372), 15);\n    connRef340->setDestEndpoint(dstPt340);\n    connRef340->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints340(1);\n    checkpoints340[0] = Checkpoint(Point(1124.728847250115, 1054.323511533372), (ConnDirFlags) 15, (ConnDirFlags) 4);\n    connRef340->setRoutingCheckpoints(checkpoints340);\n\n    ConnRef *connRef341 = new ConnRef(router, 341);\n    ConnEnd srcPt341(Point(1041.728847249115, 374.561606771467), 8);\n    connRef341->setSourceEndpoint(srcPt341);\n    ConnEnd dstPt341(Point(1129.728847250115, 308.2282734381338), 15);\n    connRef341->setDestEndpoint(dstPt341);\n    connRef341->setRoutingType((ConnType)2);\n\n    ConnRef *connRef342 = new ConnRef(router, 342);\n    ConnEnd srcPt342(Point(1041.728847249115, 374.561606771467), 8);\n    connRef342->setSourceEndpoint(srcPt342);\n    ConnEnd dstPt342(Point(1331.728847251115, 434.9901782000385), 15);\n    connRef342->setDestEndpoint(dstPt342);\n    connRef342->setRoutingType((ConnType)2);\n\n    ConnRef *connRef343 = new ConnRef(router, 343);\n    ConnEnd srcPt343(Point(960.7288472491148, 196.2282734371338), 2);\n    connRef343->setSourceEndpoint(srcPt343);\n    ConnEnd dstPt343(Point(960.7288472491148, 246.2282734371338), 1);\n    connRef343->setDestEndpoint(dstPt343);\n    connRef343->setRoutingType((ConnType)2);\n\n    ConnRef *connRef344 = new ConnRef(router, 344);\n    ConnEnd srcPt344(Point(849.7288472481148, 324.561606771467), 2);\n    connRef344->setSourceEndpoint(srcPt344);\n    ConnEnd dstPt344(Point(849.7288472481148, 374.561606771467), 1);\n    connRef344->setDestEndpoint(dstPt344);\n    connRef344->setRoutingType((ConnType)2);\n\n    ConnRef *connRef345 = new ConnRef(router, 345);\n    ConnEnd srcPt345(Point(618.7288472481148, 384.9901782000385), 2);\n    connRef345->setSourceEndpoint(srcPt345);\n    ConnEnd dstPt345(Point(618.7288472481148, 434.9901782000385), 1);\n    connRef345->setDestEndpoint(dstPt345);\n    connRef345->setRoutingType((ConnType)2);\n\n    ConnRef *connRef346 = new ConnRef(router, 346);\n    ConnEnd srcPt346(Point(-280.9508064325389, 336.2282734371338), 2);\n    connRef346->setSourceEndpoint(srcPt346);\n    ConnEnd dstPt346(Point(-280.9508064325389, 386.2282734371338), 1);\n    connRef346->setDestEndpoint(dstPt346);\n    connRef346->setRoutingType((ConnType)2);\n\n    ConnRef *connRef347 = new ConnRef(router, 347);\n    ConnEnd srcPt347(Point(-280.9508064325389, 411.2282734371338), 2);\n    connRef347->setSourceEndpoint(srcPt347);\n    ConnEnd dstPt347(Point(-280.9508064325389, 461.2282734371338), 1);\n    connRef347->setDestEndpoint(dstPt347);\n    connRef347->setRoutingType((ConnType)2);\n\n    ConnRef *connRef348 = new ConnRef(router, 348);\n    ConnEnd srcPt348(Point(-280.9508064325389, 486.2282734371338), 2);\n    connRef348->setSourceEndpoint(srcPt348);\n    ConnEnd dstPt348(Point(-280.9508064325389, 536.2282734371338), 1);\n    connRef348->setDestEndpoint(dstPt348);\n    connRef348->setRoutingType((ConnType)2);\n\n    ConnRef *connRef349 = new ConnRef(router, 349);\n    ConnEnd srcPt349(Point(-280.9508064325389, 561.2282734371338), 2);\n    connRef349->setSourceEndpoint(srcPt349);\n    ConnEnd dstPt349(Point(-280.9508064325389, 611.2282734371338), 1);\n    connRef349->setDestEndpoint(dstPt349);\n    connRef349->setRoutingType((ConnType)2);\n\n    ConnRef *connRef350 = new ConnRef(router, 350);\n    ConnEnd srcPt350(Point(-280.9508064325389, 636.2282734371338), 2);\n    connRef350->setSourceEndpoint(srcPt350);\n    ConnEnd dstPt350(Point(-280.9508064325389, 686.2282734371338), 1);\n    connRef350->setDestEndpoint(dstPt350);\n    connRef350->setRoutingType((ConnType)2);\n\n    ConnRef *connRef351 = new ConnRef(router, 351);\n    ConnEnd srcPt351(Point(-280.9508064325389, 1003.228273437134), 1);\n    connRef351->setSourceEndpoint(srcPt351);\n    ConnEnd dstPt351(Point(-280.9508064325389, 953.2282734371338), 2);\n    connRef351->setDestEndpoint(dstPt351);\n    connRef351->setRoutingType((ConnType)2);\n\n    ConnRef *connRef352 = new ConnRef(router, 352);\n    ConnEnd srcPt352(Point(-280.9508064325389, 711.2282734371338), 2);\n    connRef352->setSourceEndpoint(srcPt352);\n    ConnEnd dstPt352(Point(-280.9508064325389, 761.2282734371338), 1);\n    connRef352->setDestEndpoint(dstPt352);\n    connRef352->setRoutingType((ConnType)2);\n\n    ConnRef *connRef353 = new ConnRef(router, 353);\n    ConnEnd srcPt353(Point(-280.9508064325389, 853.2282734371338), 1);\n    connRef353->setSourceEndpoint(srcPt353);\n    ConnEnd dstPt353(Point(-280.9508064325389, 803.2282734371338), 2);\n    connRef353->setDestEndpoint(dstPt353);\n    connRef353->setRoutingType((ConnType)2);\n\n    ConnRef *connRef354 = new ConnRef(router, 354);\n    ConnEnd srcPt354(Point(-280.9508064325389, 928.2282734371338), 1);\n    connRef354->setSourceEndpoint(srcPt354);\n    ConnEnd dstPt354(Point(-280.9508064325389, 878.2282734371338), 2);\n    connRef354->setDestEndpoint(dstPt354);\n    connRef354->setRoutingType((ConnType)2);\n\n    ConnRef *connRef355 = new ConnRef(router, 355);\n    ConnEnd srcPt355(Point(-280.9508064325389, 1078.228273437134), 1);\n    connRef355->setSourceEndpoint(srcPt355);\n    ConnEnd dstPt355(Point(-280.9508064325389, 1028.228273437134), 2);\n    connRef355->setDestEndpoint(dstPt355);\n    connRef355->setRoutingType((ConnType)2);\n\n    ConnRef *connRef356 = new ConnRef(router, 356);\n    ConnEnd srcPt356(Point(-408.9508064335388, 162.2282734381338), 2);\n    connRef356->setSourceEndpoint(srcPt356);\n    ConnEnd dstPt356(Point(-408.9508064335388, 212.2282734381338), 1);\n    connRef356->setDestEndpoint(dstPt356);\n    connRef356->setRoutingType((ConnType)2);\n\n    ConnRef *connRef357 = new ConnRef(router, 357);\n    ConnEnd srcPt357(Point(-408.9508064335388, 237.2282734381338), 2);\n    connRef357->setSourceEndpoint(srcPt357);\n    ConnEnd dstPt357(Point(-408.9508064335388, 287.2282734381338), 1);\n    connRef357->setDestEndpoint(dstPt357);\n    connRef357->setRoutingType((ConnType)2);\n\n    ConnRef *connRef358 = new ConnRef(router, 358);\n    ConnEnd srcPt358(Point(-408.9508064335388, 379.2282734381338), 1);\n    connRef358->setSourceEndpoint(srcPt358);\n    ConnEnd dstPt358(Point(-408.9508064335388, 329.2282734381338), 2);\n    connRef358->setDestEndpoint(dstPt358);\n    connRef358->setRoutingType((ConnType)2);\n\n    ConnRef *connRef359 = new ConnRef(router, 359);\n    ConnEnd srcPt359(Point(585.7288472481148, 196.2282734371338), 2);\n    connRef359->setSourceEndpoint(srcPt359);\n    ConnEnd dstPt359(Point(585.7288472481148, 246.2282734371338), 1);\n    connRef359->setDestEndpoint(dstPt359);\n    connRef359->setRoutingType((ConnType)2);\n\n    ConnRef *connRef360 = new ConnRef(router, 360);\n    ConnEnd srcPt360(Point(775.7288472481148, -268.3431551362947), 4);\n    connRef360->setSourceEndpoint(srcPt360);\n    ConnEnd dstPt360(Point(717.7288472481148, -268.3431551362947), 8);\n    connRef360->setDestEndpoint(dstPt360);\n    connRef360->setRoutingType((ConnType)2);\n\n    ConnRef *connRef361 = new ConnRef(router, 361);\n    ConnEnd srcPt361(Point(216.7764662957339, 169.6568448657052), 4);\n    connRef361->setSourceEndpoint(srcPt361);\n    ConnEnd dstPt361(Point(158.7764662957339, 169.6568448657052), 8);\n    connRef361->setDestEndpoint(dstPt361);\n    connRef361->setRoutingType((ConnType)2);\n\n    ConnRef *connRef362 = new ConnRef(router, 362);\n    ConnEnd srcPt362(Point(241.9431329624006, -183.3431551362948), 2);\n    connRef362->setSourceEndpoint(srcPt362);\n    ConnEnd dstPt362(Point(241.9431329624006, -133.3431551362948), 1);\n    connRef362->setDestEndpoint(dstPt362);\n    connRef362->setRoutingType((ConnType)2);\n\n    ConnRef *connRef363 = new ConnRef(router, 363);\n    ConnEnd srcPt363(Point(338.4431329624006, -601.3431551372947), 2);\n    connRef363->setSourceEndpoint(srcPt363);\n    ConnEnd dstPt363(Point(338.4431329624006, -551.3431551372947), 1);\n    connRef363->setDestEndpoint(dstPt363);\n    connRef363->setRoutingType((ConnType)2);\n\n    ConnRef *connRef364 = new ConnRef(router, 364);\n    ConnEnd srcPt364(Point(552.7288472481148, -691.8431551372947), 2);\n    connRef364->setSourceEndpoint(srcPt364);\n    ConnEnd dstPt364(Point(552.7288472481148, -641.8431551372947), 1);\n    connRef364->setDestEndpoint(dstPt364);\n    connRef364->setRoutingType((ConnType)2);\n\n    ConnRef *connRef365 = new ConnRef(router, 365);\n    ConnEnd srcPt365(Point(-278.9735337052662, 136.6568448657052), 8);\n    connRef365->setSourceEndpoint(srcPt365);\n    ConnEnd dstPt365(Point(-220.9735337052661, 136.6568448657052), 4);\n    connRef365->setDestEndpoint(dstPt365);\n    connRef365->setRoutingType((ConnType)2);\n\n    ConnRef *connRef366 = new ConnRef(router, 366);\n    ConnEnd srcPt366(Point(-162.9735337052661, -356.3431551372947), 4);\n    connRef366->setSourceEndpoint(srcPt366);\n    ConnEnd dstPt366(Point(-220.9735337052661, -356.3431551372947), 8);\n    connRef366->setDestEndpoint(dstPt366);\n    connRef366->setRoutingType((ConnType)2);\n\n    ConnRef *connRef367 = new ConnRef(router, 367);\n    ConnEnd srcPt367(Point(1430.728847251115, 384.9901782000385), 2);\n    connRef367->setSourceEndpoint(srcPt367);\n    ConnEnd dstPt367(Point(1430.728847251115, 434.9901782000385), 1);\n    connRef367->setDestEndpoint(dstPt367);\n    connRef367->setRoutingType((ConnType)2);\n\n    ConnRef *connRef368 = new ConnRef(router, 368);\n    ConnEnd srcPt368(Point(404.4431329624006, 384.9901782000385), 2);\n    connRef368->setSourceEndpoint(srcPt368);\n    ConnEnd dstPt368(Point(404.4431329624006, 434.9901782000385), 1);\n    connRef368->setDestEndpoint(dstPt368);\n    connRef368->setRoutingType((ConnType)2);\n\n    ConnRef *connRef369 = new ConnRef(router, 369);\n    ConnEnd srcPt369(Point(495.4431329624006, 885.3235115333719), 4);\n    connRef369->setSourceEndpoint(srcPt369);\n    ConnEnd dstPt369(Point(437.4431329624006, 885.3235115333719), 8);\n    connRef369->setDestEndpoint(dstPt369);\n    connRef369->setRoutingType((ConnType)2);\n\n    ConnRef *connRef370 = new ConnRef(router, 370);\n    ConnEnd srcPt370(Point(495.4431329624006, 594.9901782000385), 4);\n    connRef370->setSourceEndpoint(srcPt370);\n    ConnEnd dstPt370(Point(437.4431329624006, 594.9901782000385), 8);\n    connRef370->setDestEndpoint(dstPt370);\n    connRef370->setRoutingType((ConnType)2);\n\n    ConnRef *connRef371 = new ConnRef(router, 371);\n    ConnEnd srcPt371(Point(-501.9508064345389, 196.2282734371338), 2);\n    connRef371->setSourceEndpoint(srcPt371);\n    ConnEnd dstPt371(Point(-501.9508064345389, 246.2282734371338), 1);\n    connRef371->setDestEndpoint(dstPt371);\n    connRef371->setRoutingType((ConnType)2);\n\n    ConnRef *connRef372 = new ConnRef(router, 372);\n    ConnEnd srcPt372(Point(-280.9508064325389, 1153.228273437134), 1);\n    connRef372->setSourceEndpoint(srcPt372);\n    ConnEnd dstPt372(Point(-280.9508064325389, 1103.228273437134), 2);\n    connRef372->setDestEndpoint(dstPt372);\n    connRef372->setRoutingType((ConnType)2);\n\n    ConnRef *connRef373 = new ConnRef(router, 373);\n    ConnEnd srcPt373(Point(-408.9508064335388, 454.2282734381338), 1);\n    connRef373->setSourceEndpoint(srcPt373);\n    ConnEnd dstPt373(Point(-408.9508064335388, 404.2282734381338), 2);\n    connRef373->setDestEndpoint(dstPt373);\n    connRef373->setRoutingType((ConnType)2);\n\n    ConnRef *connRef374 = new ConnRef(router, 374);\n    ConnEnd srcPt374(Point(-92.89020037193279, 918.3235115333719), 4);\n    connRef374->setSourceEndpoint(srcPt374);\n    ConnEnd dstPt374(Point(-150.8902003719328, 918.3235115333719), 8);\n    connRef374->setDestEndpoint(dstPt374);\n    connRef374->setRoutingType((ConnType)2);\n\n    ConnRef *connRef375 = new ConnRef(router, 375);\n    ConnEnd srcPt375(Point(2.776466294733893, 746.3235115333719), 2);\n    connRef375->setSourceEndpoint(srcPt375);\n    ConnEnd dstPt375(Point(2.776466294733893, 796.3235115333719), 1);\n    connRef375->setDestEndpoint(dstPt375);\n    connRef375->setRoutingType((ConnType)2);\n\n    ConnRef *connRef376 = new ConnRef(router, 376);\n    ConnEnd srcPt376(Point(437.4431329624006, 665.9901782000385), 2);\n    connRef376->setSourceEndpoint(srcPt376);\n    ConnEnd dstPt376(Point(437.4431329624006, 715.9901782000385), 1);\n    connRef376->setDestEndpoint(dstPt376);\n    connRef376->setRoutingType((ConnType)2);\n\n    ConnRef *connRef377 = new ConnRef(router, 377);\n    ConnEnd srcPt377(Point(437.4431329624006, 1001.323511533372), 1);\n    connRef377->setSourceEndpoint(srcPt377);\n    ConnEnd dstPt377(Point(437.4431329624006, 951.3235115333719), 2);\n    connRef377->setDestEndpoint(dstPt377);\n    connRef377->setRoutingType((ConnType)2);\n\n    ConnRef *connRef378 = new ConnRef(router, 378);\n    ConnEnd srcPt378(Point(814.7288472481148, 989.3235115333719), 1);\n    connRef378->setSourceEndpoint(srcPt378);\n    ConnEnd dstPt378(Point(814.7288472481148, 939.3235115333719), 2);\n    connRef378->setDestEndpoint(dstPt378);\n    connRef378->setRoutingType((ConnType)2);\n\n    ConnRef *connRef379 = new ConnRef(router, 379);\n    ConnEnd srcPt379(Point(814.7288472481148, 847.3235115333719), 2);\n    connRef379->setSourceEndpoint(srcPt379);\n    ConnEnd dstPt379(Point(814.7288472481148, 897.3235115333719), 1);\n    connRef379->setDestEndpoint(dstPt379);\n    connRef379->setRoutingType((ConnType)2);\n\n    ConnRef *connRef380 = new ConnRef(router, 380);\n    ConnEnd srcPt380(Point(332.9431329624006, 1087.323511533372), 4);\n    connRef380->setSourceEndpoint(srcPt380);\n    ConnEnd dstPt380(Point(274.9431329624006, 1087.323511533372), 8);\n    connRef380->setDestEndpoint(dstPt380);\n    connRef380->setRoutingType((ConnType)2);\n\n    ConnRef *connRef381 = new ConnRef(router, 381);\n    ConnEnd srcPt381(Point(437.4431329624006, 1274.723511533372), 2);\n    connRef381->setSourceEndpoint(srcPt381);\n    ConnEnd dstPt381(Point(437.4431329624006, 1324.723511533372), 1);\n    connRef381->setDestEndpoint(dstPt381);\n    connRef381->setRoutingType((ConnType)2);\n\n    ConnRef *connRef382 = new ConnRef(router, 382);\n    ConnEnd srcPt382(Point(814.7288472481148, 1274.723511533372), 2);\n    connRef382->setSourceEndpoint(srcPt382);\n    ConnEnd dstPt382(Point(814.7288472481148, 1324.723511533372), 1);\n    connRef382->setDestEndpoint(dstPt382);\n    connRef382->setRoutingType((ConnType)2);\n\n    ConnRef *connRef383 = new ConnRef(router, 383);\n    ConnEnd srcPt383(Point(-63.22353370526614, 1430.609225819086), 2);\n    connRef383->setSourceEndpoint(srcPt383);\n    ConnEnd dstPt383(Point(-63.22353370526614, 1480.609225819086), 1);\n    connRef383->setDestEndpoint(dstPt383);\n    connRef383->setRoutingType((ConnType)2);\n\n    ConnRef *connRef384 = new ConnRef(router, 384);\n    ConnEnd srcPt384(Point(437.4431329624006, 1430.609225819086), 2);\n    connRef384->setSourceEndpoint(srcPt384);\n    ConnEnd dstPt384(Point(437.4431329624006, 1480.609225819086), 1);\n    connRef384->setDestEndpoint(dstPt384);\n    connRef384->setRoutingType((ConnType)2);\n\n    ConnRef *connRef385 = new ConnRef(router, 385);\n    ConnEnd srcPt385(Point(814.7288472481148, 1409.609225819086), 2);\n    connRef385->setSourceEndpoint(srcPt385);\n    ConnEnd dstPt385(Point(814.7288472481148, 1459.609225819086), 1);\n    connRef385->setDestEndpoint(dstPt385);\n    connRef385->setRoutingType((ConnType)2);\n\n    ConnRef *connRef386 = new ConnRef(router, 386);\n    ConnEnd srcPt386(Point(814.7288472481148, 1551.609225819086), 1);\n    connRef386->setSourceEndpoint(srcPt386);\n    ConnEnd dstPt386(Point(814.7288472481148, 1501.609225819086), 2);\n    connRef386->setDestEndpoint(dstPt386);\n    connRef386->setRoutingType((ConnType)2);\n\n    ConnRef *connRef387 = new ConnRef(router, 387);\n    ConnEnd srcPt387(Point(1265.728847251115, 802.3235115333719), 2);\n    connRef387->setSourceEndpoint(srcPt387);\n    ConnEnd dstPt387(Point(1265.728847251115, 852.3235115333719), 1);\n    connRef387->setDestEndpoint(dstPt387);\n    connRef387->setRoutingType((ConnType)2);\n\n    ConnRef *connRef388 = new ConnRef(router, 388);\n    ConnEnd srcPt388(Point(1265.728847251115, 605.9901782000385), 2);\n    connRef388->setSourceEndpoint(srcPt388);\n    ConnEnd dstPt388(Point(1265.728847251115, 655.9901782000385), 1);\n    connRef388->setDestEndpoint(dstPt388);\n    connRef388->setRoutingType((ConnType)2);\n\n    ConnRef *connRef389 = new ConnRef(router, 389);\n    ConnEnd srcPt389(Point(1162.728847250115, 908.3235115333719), 2);\n    connRef389->setSourceEndpoint(srcPt389);\n    ConnEnd dstPt389(Point(1162.728847250115, 958.3235115333719), 1);\n    connRef389->setDestEndpoint(dstPt389);\n    connRef389->setRoutingType((ConnType)2);\n\n    ConnRef *connRef390 = new ConnRef(router, 390);\n    ConnEnd srcPt390(Point(1162.728847250115, 983.3235115333719), 2);\n    connRef390->setSourceEndpoint(srcPt390);\n    ConnEnd dstPt390(Point(1162.728847250115, 1033.323511533372), 1);\n    connRef390->setDestEndpoint(dstPt390);\n    connRef390->setRoutingType((ConnType)2);\n\n    ConnRef *connRef391 = new ConnRef(router, 391);\n    ConnEnd srcPt391(Point(1265.728847251115, 1003.323511533372), 2);\n    connRef391->setSourceEndpoint(srcPt391);\n    ConnEnd dstPt391(Point(1265.728847251115, 1053.323511533372), 1);\n    connRef391->setDestEndpoint(dstPt391);\n    connRef391->setRoutingType((ConnType)2);\n\n    ConnRef *connRef392 = new ConnRef(router, 392);\n    ConnEnd srcPt392(Point(1265.728847251115, 1145.323511533372), 1);\n    connRef392->setSourceEndpoint(srcPt392);\n    ConnEnd dstPt392(Point(1265.728847251115, 1095.323511533372), 2);\n    connRef392->setDestEndpoint(dstPt392);\n    connRef392->setRoutingType((ConnType)2);\n\n    ConnRef *connRef393 = new ConnRef(router, 393);\n    ConnEnd srcPt393(Point(1265.728847251115, 1217.323511533372), 2);\n    connRef393->setSourceEndpoint(srcPt393);\n    ConnEnd dstPt393(Point(1265.728847251115, 1267.323511533372), 1);\n    connRef393->setDestEndpoint(dstPt393);\n    connRef393->setRoutingType((ConnType)2);\n\n    ConnRef *connRef394 = new ConnRef(router, 394);\n    ConnEnd srcPt394(Point(1265.728847251115, 1373.323511533372), 2);\n    connRef394->setSourceEndpoint(srcPt394);\n    ConnEnd dstPt394(Point(1265.728847251115, 1423.323511533372), 1);\n    connRef394->setDestEndpoint(dstPt394);\n    connRef394->setRoutingType((ConnType)2);\n\n    ConnRef *connRef395 = new ConnRef(router, 395);\n    ConnEnd srcPt395(Point(48.77646629473389, -133.3431551362948), 8);\n    connRef395->setSourceEndpoint(srcPt395);\n    ConnEnd dstPt395(Point(106.7764662947339, -133.3431551362948), 4);\n    connRef395->setDestEndpoint(dstPt395);\n    connRef395->setRoutingType((ConnType)2);\n\n    ConnRef *connRef396 = new ConnRef(router, 396);\n    ConnEnd srcPt396(Point(849.7288472481148, 517.9901782000385), 1);\n    connRef396->setSourceEndpoint(srcPt396);\n    ConnEnd dstPt396(Point(849.7288472481148, 467.9901782000385), 2);\n    connRef396->setDestEndpoint(dstPt396);\n    connRef396->setRoutingType((ConnType)2);\n\n    ConnRef *connRef397 = new ConnRef(router, 397);\n    ConnEnd srcPt397(Point(48.77646629473389, -31.34315513529478), 8);\n    connRef397->setSourceEndpoint(srcPt397);\n    ConnEnd dstPt397(Point(106.7764662947339, -31.34315513529478), 4);\n    connRef397->setDestEndpoint(dstPt397);\n    connRef397->setRoutingType((ConnType)2);\n\n    ConnRef *connRef398 = new ConnRef(router, 398);\n    ConnEnd srcPt398(Point(927.7288472491148, 517.9901782000385), 1);\n    connRef398->setSourceEndpoint(srcPt398);\n    ConnEnd dstPt398(Point(927.7288472491148, 467.9901782000385), 2);\n    connRef398->setDestEndpoint(dstPt398);\n    connRef398->setRoutingType((ConnType)2);\n\n    ConnRef *connRef399 = new ConnRef(router, 399);\n    ConnEnd srcPt399(Point(48.77646629473389, 70.65684486570521), 8);\n    connRef399->setSourceEndpoint(srcPt399);\n    ConnEnd dstPt399(Point(106.7764662947339, 70.65684486570521), 4);\n    connRef399->setDestEndpoint(dstPt399);\n    connRef399->setRoutingType((ConnType)2);\n\n    ConnRef *connRef400 = new ConnRef(router, 400);\n    ConnEnd srcPt400(Point(1026.728847249115, 517.9901782000385), 1);\n    connRef400->setSourceEndpoint(srcPt400);\n    ConnEnd dstPt400(Point(1026.728847249115, 467.9901782000385), 2);\n    connRef400->setDestEndpoint(dstPt400);\n    connRef400->setRoutingType((ConnType)2);\n\n    ConnRef *connRef401 = new ConnRef(router, 401);\n    ConnEnd srcPt401(Point(241.9431329624006, -81.34315513529478), 2);\n    connRef401->setSourceEndpoint(srcPt401);\n    ConnEnd dstPt401(Point(241.9431329624006, -31.34315513529478), 1);\n    connRef401->setDestEndpoint(dstPt401);\n    connRef401->setRoutingType((ConnType)2);\n\n    ConnRef *connRef402 = new ConnRef(router, 402);\n    ConnEnd srcPt402(Point(927.7288472491148, 324.561606771467), 2);\n    connRef402->setSourceEndpoint(srcPt402);\n    ConnEnd dstPt402(Point(927.7288472491148, 374.561606771467), 1);\n    connRef402->setDestEndpoint(dstPt402);\n    connRef402->setRoutingType((ConnType)2);\n\n    ConnRef *connRef403 = new ConnRef(router, 403);\n    ConnEnd srcPt403(Point(1162.728847250115, 1125.323511533372), 1);\n    connRef403->setSourceEndpoint(srcPt403);\n    ConnEnd dstPt403(Point(1162.728847250115, 1075.323511533372), 2);\n    connRef403->setDestEndpoint(dstPt403);\n    connRef403->setRoutingType((ConnType)2);\n\n    ConnRef *connRef404 = new ConnRef(router, 404);\n    ConnEnd srcPt404(Point(241.9431329624006, 20.65684486570521), 2);\n    connRef404->setSourceEndpoint(srcPt404);\n    ConnEnd dstPt404(Point(241.9431329624006, 70.65684486570521), 1);\n    connRef404->setDestEndpoint(dstPt404);\n    connRef404->setRoutingType((ConnType)2);\n\n    ConnRef *connRef405 = new ConnRef(router, 405);\n    ConnEnd srcPt405(Point(1026.728847249115, 324.561606771467), 2);\n    connRef405->setSourceEndpoint(srcPt405);\n    ConnEnd dstPt405(Point(1026.728847249115, 374.561606771467), 1);\n    connRef405->setDestEndpoint(dstPt405);\n    connRef405->setRoutingType((ConnType)2);\n\n    ConnRef *connRef406 = new ConnRef(router, 406);\n    ConnEnd srcPt406(Point(717.7288472481148, -518.3431551372947), 15);\n    connRef406->setSourceEndpoint(srcPt406);\n    ConnEnd dstPt406(Point(845.7288472481148, -468.8431551372947), 1);\n    connRef406->setDestEndpoint(dstPt406);\n    connRef406->setRoutingType((ConnType)2);\n\n    ConnRef *connRef407 = new ConnRef(router, 407);\n    ConnEnd srcPt407(Point(437.4431329624006, -323.3431551372947), 15);\n    connRef407->setSourceEndpoint(srcPt407);\n    ConnEnd dstPt407(Point(520.7288472481148, -412.3431551372947), 4);\n    connRef407->setDestEndpoint(dstPt407);\n    connRef407->setRoutingType((ConnType)2);\n\n    ConnRef *connRef408 = new ConnRef(router, 408);\n    ConnEnd srcPt408(Point(618.7288472481148, -202.3431551362948), 15);\n    connRef408->setSourceEndpoint(srcPt408);\n    ConnEnd dstPt408(Point(538.9431329624006, -256.3431551362947), 8);\n    connRef408->setDestEndpoint(dstPt408);\n    connRef408->setRoutingType((ConnType)2);\n\n    ConnRef *connRef409 = new ConnRef(router, 409);\n    ConnEnd srcPt409(Point(437.4431329624006, -323.3431551372947), 15);\n    connRef409->setSourceEndpoint(srcPt409);\n    ConnEnd dstPt409(Point(256.9431329624006, -417.3431551372947), 8);\n    connRef409->setDestEndpoint(dstPt409);\n    connRef409->setRoutingType((ConnType)2);\n#endif\n\n    router->processTransaction();\n    router->outputDiagram(\"output/nudgingSkipsCheckpoint02\");\n    Avoid::PolyLine route249 = connRef249->displayRoute();\n    \n    delete router;\n    return (route249.size() == 6) ? 0 : 1;\n};\n"
  },
  {
    "path": "cola/libavoid/tests/orderassertion.cpp",
    "content": "// Test case that triggers the orderSwapped after a second call \n// to the PtOrder::addPoints method.\n\n#include \"libavoid/libavoid.h\"\nusing namespace Avoid;\nint main(void) {\n    Router *router = new Router(\n            PolyLineRouting | OrthogonalRouting);\n    router->setRoutingPenalty((PenaltyType)0, 50);\n    router->setRoutingPenalty((PenaltyType)1, 0);\n    router->setRoutingPenalty((PenaltyType)2, 0);\n    router->setRoutingPenalty((PenaltyType)3, 4000);\n    router->setRoutingPenalty((PenaltyType)4, 0);\n\n    Polygon poly73(4);\n    poly73.ps[0] = Point(232, 362);\n    poly73.ps[1] = Point(232, 402);\n    poly73.ps[2] = Point(192, 402);\n    poly73.ps[3] = Point(192, 362);\n    new ShapeRef(router, poly73, 73);\n    \n    Polygon poly74(4);\n    poly74.ps[0] = Point(125, 362);\n    poly74.ps[1] = Point(125, 402);\n    poly74.ps[2] = Point(85, 402);\n    poly74.ps[3] = Point(85, 362);\n    new ShapeRef(router, poly74, 74);\n    \n    Polygon poly75(4);\n    poly75.ps[0] = Point(77.5, 716);\n    poly75.ps[1] = Point(77.5, 880);\n    poly75.ps[2] = Point(20.5, 880);\n    poly75.ps[3] = Point(20.5, 716);\n    new ShapeRef(router, poly75, 75);\n    \n    Polygon poly76(4);\n    poly76.ps[0] = Point(187, 713);\n    poly76.ps[1] = Point(187, 733);\n    poly76.ps[2] = Point(167, 733);\n    poly76.ps[3] = Point(167, 713);\n    new ShapeRef(router, poly76, 76);\n    \n    Polygon poly77(4);\n    poly77.ps[0] = Point(139, 714);\n    poly77.ps[1] = Point(139, 754);\n    poly77.ps[2] = Point(99, 754);\n    poly77.ps[3] = Point(99, 714);\n    new ShapeRef(router, poly77, 77);\n    \n    Polygon poly78(4);\n    poly78.ps[0] = Point(422, 951);\n    poly78.ps[1] = Point(422, 971);\n    poly78.ps[2] = Point(402, 971);\n    poly78.ps[3] = Point(402, 951);\n    new ShapeRef(router, poly78, 78);\n    \n    Polygon poly79(4);\n    poly79.ps[0] = Point(187, 734);\n    poly79.ps[1] = Point(187, 754);\n    poly79.ps[2] = Point(167, 754);\n    poly79.ps[3] = Point(167, 734);\n    new ShapeRef(router, poly79, 79);\n    \n    Polygon poly80(4);\n    poly80.ps[0] = Point(470, 951);\n    poly80.ps[1] = Point(470, 971);\n    poly80.ps[2] = Point(450, 971);\n    poly80.ps[3] = Point(450, 951);\n    new ShapeRef(router, poly80, 80);\n    \n    Polygon poly81(4);\n    poly81.ps[0] = Point(669.5, 899.5);\n    poly81.ps[1] = Point(669.5, 934.5);\n    poly81.ps[2] = Point(532.5, 934.5);\n    poly81.ps[3] = Point(532.5, 899.5);\n    new ShapeRef(router, poly81, 81);\n    \n    Polygon poly82(4);\n    poly82.ps[0] = Point(491, 471);\n    poly82.ps[1] = Point(491, 491);\n    poly82.ps[2] = Point(471, 491);\n    poly82.ps[3] = Point(471, 471);\n    new ShapeRef(router, poly82, 82);\n    \n    Polygon poly83(4);\n    poly83.ps[0] = Point(565, 512);\n    poly83.ps[1] = Point(565, 532);\n    poly83.ps[2] = Point(545, 532);\n    poly83.ps[3] = Point(545, 512);\n    new ShapeRef(router, poly83, 83);\n    \n    Polygon poly84(4);\n    poly84.ps[0] = Point(538, 531);\n    poly84.ps[1] = Point(538, 551);\n    poly84.ps[2] = Point(518, 551);\n    poly84.ps[3] = Point(518, 531);\n    new ShapeRef(router, poly84, 84);\n    \n    Polygon poly85(4);\n    poly85.ps[0] = Point(272, 782);\n    poly85.ps[1] = Point(272, 802);\n    poly85.ps[2] = Point(252, 802);\n    poly85.ps[3] = Point(252, 782);\n    new ShapeRef(router, poly85, 85);\n    \n    Polygon poly86(4);\n    poly86.ps[0] = Point(515, 512);\n    poly86.ps[1] = Point(515, 532);\n    poly86.ps[2] = Point(495, 532);\n    poly86.ps[3] = Point(495, 512);\n    new ShapeRef(router, poly86, 86);\n    \n    Polygon poly87(4);\n    poly87.ps[0] = Point(391, 534);\n    poly87.ps[1] = Point(391, 574);\n    poly87.ps[2] = Point(351, 574);\n    poly87.ps[3] = Point(351, 534);\n    new ShapeRef(router, poly87, 87);\n    \n    Polygon poly88(4);\n    poly88.ps[0] = Point(420, 573);\n    poly88.ps[1] = Point(420, 593);\n    poly88.ps[2] = Point(400, 593);\n    poly88.ps[3] = Point(400, 573);\n    new ShapeRef(router, poly88, 88);\n    \n    Polygon poly89(4);\n    poly89.ps[0] = Point(421, 509);\n    poly89.ps[1] = Point(421, 529);\n    poly89.ps[2] = Point(401, 529);\n    poly89.ps[3] = Point(401, 509);\n    new ShapeRef(router, poly89, 89);\n    \n    Polygon poly90(4);\n    poly90.ps[0] = Point(476, 426);\n    poly90.ps[1] = Point(476, 466);\n    poly90.ps[2] = Point(436, 466);\n    poly90.ps[3] = Point(436, 426);\n    new ShapeRef(router, poly90, 90);\n    \n    Polygon poly91(4);\n    poly91.ps[0] = Point(290, 970);\n    poly91.ps[1] = Point(290, 1010);\n    poly91.ps[2] = Point(234, 1010);\n    poly91.ps[3] = Point(234, 970);\n    new ShapeRef(router, poly91, 91);\n    \n    Polygon poly92(4);\n    poly92.ps[0] = Point(77, 888);\n    poly92.ps[1] = Point(77, 928);\n    poly92.ps[2] = Point(21, 928);\n    poly92.ps[3] = Point(21, 888);\n    new ShapeRef(router, poly92, 92);\n    \n    Polygon poly93(4);\n    poly93.ps[0] = Point(360, 991);\n    poly93.ps[1] = Point(360, 1031);\n    poly93.ps[2] = Point(304, 1031);\n    poly93.ps[3] = Point(304, 991);\n    new ShapeRef(router, poly93, 93);\n    \n    Polygon poly94(4);\n    poly94.ps[0] = Point(449, 889);\n    poly94.ps[1] = Point(449, 929);\n    poly94.ps[2] = Point(393, 929);\n    poly94.ps[3] = Point(393, 889);\n    new ShapeRef(router, poly94, 94);\n    \n    Polygon poly95(4);\n    poly95.ps[0] = Point(488, 970);\n    poly95.ps[1] = Point(488, 1010);\n    poly95.ps[2] = Point(432, 1010);\n    poly95.ps[3] = Point(432, 970);\n    new ShapeRef(router, poly95, 95);\n    \n    Polygon poly96(4);\n    poly96.ps[0] = Point(440, 970);\n    poly96.ps[1] = Point(440, 1010);\n    poly96.ps[2] = Point(384, 1010);\n    poly96.ps[3] = Point(384, 970);\n    new ShapeRef(router, poly96, 96);\n    \n    Polygon poly97(4);\n    poly97.ps[0] = Point(432, 801);\n    poly97.ps[1] = Point(432, 841);\n    poly97.ps[2] = Point(376, 841);\n    poly97.ps[3] = Point(376, 801);\n    new ShapeRef(router, poly97, 97);\n    \n    Polygon poly98(4);\n    poly98.ps[0] = Point(502, 780);\n    poly98.ps[1] = Point(502, 820);\n    poly98.ps[2] = Point(446, 820);\n    poly98.ps[3] = Point(446, 780);\n    new ShapeRef(router, poly98, 98);\n    \n    Polygon poly99(4);\n    poly99.ps[0] = Point(320, 792);\n    poly99.ps[1] = Point(320, 832);\n    poly99.ps[2] = Point(264, 832);\n    poly99.ps[3] = Point(264, 792);\n    new ShapeRef(router, poly99, 99);\n    \n    Polygon poly100(4);\n    poly100.ps[0] = Point(211, 792);\n    poly100.ps[1] = Point(211, 832);\n    poly100.ps[2] = Point(155, 832);\n    poly100.ps[3] = Point(155, 792);\n    new ShapeRef(router, poly100, 100);\n    \n    Polygon poly101(4);\n    poly101.ps[0] = Point(559, 791);\n    poly101.ps[1] = Point(559, 831);\n    poly101.ps[2] = Point(503, 831);\n    poly101.ps[3] = Point(503, 791);\n    new ShapeRef(router, poly101, 101);\n    \n    Polygon poly102(4);\n    poly102.ps[0] = Point(554, 747);\n    poly102.ps[1] = Point(554, 787);\n    poly102.ps[2] = Point(498, 787);\n    poly102.ps[3] = Point(498, 747);\n    new ShapeRef(router, poly102, 102);\n    \n    Polygon poly103(4);\n    poly103.ps[0] = Point(554, 678);\n    poly103.ps[1] = Point(554, 718);\n    poly103.ps[2] = Point(498, 718);\n    poly103.ps[3] = Point(498, 678);\n    new ShapeRef(router, poly103, 103);\n    \n    Polygon poly104(4);\n    poly104.ps[0] = Point(555, 606);\n    poly104.ps[1] = Point(555, 646);\n    poly104.ps[2] = Point(499, 646);\n    poly104.ps[3] = Point(499, 606);\n    new ShapeRef(router, poly104, 104);\n    \n    Polygon poly105(4);\n    poly105.ps[0] = Point(389, 461);\n    poly105.ps[1] = Point(389, 501);\n    poly105.ps[2] = Point(333, 501);\n    poly105.ps[3] = Point(333, 461);\n    new ShapeRef(router, poly105, 105);\n    \n    Polygon poly106(4);\n    poly106.ps[0] = Point(404, 377);\n    poly106.ps[1] = Point(404, 417);\n    poly106.ps[2] = Point(348, 417);\n    poly106.ps[3] = Point(348, 377);\n    new ShapeRef(router, poly106, 106);\n    \n    Polygon poly107(4);\n    poly107.ps[0] = Point(554, 381);\n    poly107.ps[1] = Point(554, 421);\n    poly107.ps[2] = Point(498, 421);\n    poly107.ps[3] = Point(498, 381);\n    new ShapeRef(router, poly107, 107);\n    \n    Polygon poly108(4);\n    poly108.ps[0] = Point(554, 315);\n    poly108.ps[1] = Point(554, 355);\n    poly108.ps[2] = Point(498, 355);\n    poly108.ps[3] = Point(498, 315);\n    new ShapeRef(router, poly108, 108);\n    \n    Polygon poly109(4);\n    poly109.ps[0] = Point(431, 265);\n    poly109.ps[1] = Point(431, 305);\n    poly109.ps[2] = Point(375, 305);\n    poly109.ps[3] = Point(375, 265);\n    new ShapeRef(router, poly109, 109);\n    \n    Polygon poly110(4);\n    poly110.ps[0] = Point(553, 122);\n    poly110.ps[1] = Point(553, 162);\n    poly110.ps[2] = Point(497, 162);\n    poly110.ps[3] = Point(497, 122);\n    new ShapeRef(router, poly110, 110);\n    \n    Polygon poly111(4);\n    poly111.ps[0] = Point(554, 245);\n    poly111.ps[1] = Point(554, 285);\n    poly111.ps[2] = Point(498, 285);\n    poly111.ps[3] = Point(498, 245);\n    new ShapeRef(router, poly111, 111);\n    \n    Polygon poly112(4);\n    poly112.ps[0] = Point(414, 150);\n    poly112.ps[1] = Point(414, 190);\n    poly112.ps[2] = Point(358, 190);\n    poly112.ps[3] = Point(358, 150);\n    new ShapeRef(router, poly112, 112);\n    \n    Polygon poly113(4);\n    poly113.ps[0] = Point(404, 229);\n    poly113.ps[1] = Point(404, 269);\n    poly113.ps[2] = Point(348, 269);\n    poly113.ps[3] = Point(348, 229);\n    new ShapeRef(router, poly113, 113);\n    \n    Polygon poly114(4);\n    poly114.ps[0] = Point(319, 310);\n    poly114.ps[1] = Point(319, 350);\n    poly114.ps[2] = Point(263, 350);\n    poly114.ps[3] = Point(263, 310);\n    new ShapeRef(router, poly114, 114);\n    \n    Polygon poly115(4);\n    poly115.ps[0] = Point(249, 229);\n    poly115.ps[1] = Point(249, 269);\n    poly115.ps[2] = Point(193, 269);\n    poly115.ps[3] = Point(193, 229);\n    new ShapeRef(router, poly115, 115);\n    \n    Polygon poly116(4);\n    poly116.ps[0] = Point(358, 196);\n    poly116.ps[1] = Point(358, 236);\n    poly116.ps[2] = Point(302, 236);\n    poly116.ps[3] = Point(302, 196);\n    new ShapeRef(router, poly116, 116);\n    \n    Polygon poly117(4);\n    poly117.ps[0] = Point(308, 196);\n    poly117.ps[1] = Point(308, 236);\n    poly117.ps[2] = Point(252, 236);\n    poly117.ps[3] = Point(252, 196);\n    new ShapeRef(router, poly117, 117);\n    \n    Polygon poly118(4);\n    poly118.ps[0] = Point(112, 241);\n    poly118.ps[1] = Point(112, 281);\n    poly118.ps[2] = Point(56, 281);\n    poly118.ps[3] = Point(56, 241);\n    new ShapeRef(router, poly118, 118);\n    \n    Polygon poly119(4);\n    poly119.ps[0] = Point(249, 154);\n    poly119.ps[1] = Point(249, 194);\n    poly119.ps[2] = Point(193, 194);\n    poly119.ps[3] = Point(193, 154);\n    new ShapeRef(router, poly119, 119);\n    \n    Polygon poly120(4);\n    poly120.ps[0] = Point(249, 135);\n    poly120.ps[1] = Point(249, 175);\n    poly120.ps[2] = Point(193, 175);\n    poly120.ps[3] = Point(193, 135);\n    new ShapeRef(router, poly120, 120);\n    \n    Polygon poly121(4);\n    poly121.ps[0] = Point(317, 113);\n    poly121.ps[1] = Point(317, 153);\n    poly121.ps[2] = Point(261, 153);\n    poly121.ps[3] = Point(261, 113);\n    new ShapeRef(router, poly121, 121);\n    \n    Polygon poly122(4);\n    poly122.ps[0] = Point(344, 81);\n    poly122.ps[1] = Point(344, 121);\n    poly122.ps[2] = Point(288, 121);\n    poly122.ps[3] = Point(288, 81);\n    new ShapeRef(router, poly122, 122);\n    \n    Polygon poly123(4);\n    poly123.ps[0] = Point(344, 160);\n    poly123.ps[1] = Point(344, 200);\n    poly123.ps[2] = Point(288, 200);\n    poly123.ps[3] = Point(288, 160);\n    new ShapeRef(router, poly123, 123);\n    \n    Polygon poly124(4);\n    poly124.ps[0] = Point(263, 835);\n    poly124.ps[1] = Point(263, 875);\n    poly124.ps[2] = Point(207, 875);\n    poly124.ps[3] = Point(207, 835);\n    new ShapeRef(router, poly124, 124);\n    \n    Polygon poly125(4);\n    poly125.ps[0] = Point(554, 533);\n    poly125.ps[1] = Point(554, 573);\n    poly125.ps[2] = Point(498, 573);\n    poly125.ps[3] = Point(498, 533);\n    new ShapeRef(router, poly125, 125);\n    \n    Polygon poly126(4);\n    poly126.ps[0] = Point(249, 173);\n    poly126.ps[1] = Point(249, 213);\n    poly126.ps[2] = Point(193, 213);\n    poly126.ps[3] = Point(193, 173);\n    new ShapeRef(router, poly126, 126);\n    \n    Polygon poly127(4);\n    poly127.ps[0] = Point(319, 248);\n    poly127.ps[1] = Point(319, 288);\n    poly127.ps[2] = Point(263, 288);\n    poly127.ps[3] = Point(263, 248);\n    new ShapeRef(router, poly127, 127);\n    \n    Polygon poly128(4);\n    poly128.ps[0] = Point(182, 287);\n    poly128.ps[1] = Point(182, 327);\n    poly128.ps[2] = Point(126, 327);\n    poly128.ps[3] = Point(126, 287);\n    new ShapeRef(router, poly128, 128);\n    \n    Polygon poly129(4);\n    poly129.ps[0] = Point(182, 413);\n    poly129.ps[1] = Point(182, 453);\n    poly129.ps[2] = Point(126, 453);\n    poly129.ps[3] = Point(126, 413);\n    new ShapeRef(router, poly129, 129);\n    \n    Polygon poly130(4);\n    poly130.ps[0] = Point(292, 286);\n    poly130.ps[1] = Point(292, 326);\n    poly130.ps[2] = Point(236, 326);\n    poly130.ps[3] = Point(236, 286);\n    new ShapeRef(router, poly130, 130);\n    \n    Polygon poly131(4);\n    poly131.ps[0] = Point(292, 412);\n    poly131.ps[1] = Point(292, 452);\n    poly131.ps[2] = Point(236, 452);\n    poly131.ps[3] = Point(236, 412);\n    new ShapeRef(router, poly131, 131);\n    \n    Polygon poly132(4);\n    poly132.ps[0] = Point(205, 653);\n    poly132.ps[1] = Point(205, 693);\n    poly132.ps[2] = Point(149, 693);\n    poly132.ps[3] = Point(149, 653);\n    new ShapeRef(router, poly132, 132);\n    \n    Polygon poly133(4);\n    poly133.ps[0] = Point(510, 891);\n    poly133.ps[1] = Point(510, 931);\n    poly133.ps[2] = Point(454, 931);\n    poly133.ps[3] = Point(454, 891);\n    new ShapeRef(router, poly133, 133);\n    \n    Polygon poly134(4);\n    poly134.ps[0] = Point(275, 674);\n    poly134.ps[1] = Point(275, 714);\n    poly134.ps[2] = Point(219, 714);\n    poly134.ps[3] = Point(219, 674);\n    new ShapeRef(router, poly134, 134);\n    \n    Polygon poly135(4);\n    poly135.ps[0] = Point(488, 891);\n    poly135.ps[1] = Point(488, 931);\n    poly135.ps[2] = Point(432, 931);\n    poly135.ps[3] = Point(432, 891);\n    new ShapeRef(router, poly135, 135);\n    \n    Polygon poly136(4);\n    poly136.ps[0] = Point(579, 461);\n    poly136.ps[1] = Point(579, 501);\n    poly136.ps[2] = Point(523, 501);\n    poly136.ps[3] = Point(523, 461);\n    new ShapeRef(router, poly136, 136);\n    \n    Polygon poly137(4);\n    poly137.ps[0] = Point(583, 452);\n    poly137.ps[1] = Point(583, 492);\n    poly137.ps[2] = Point(527, 492);\n    poly137.ps[3] = Point(527, 452);\n    new ShapeRef(router, poly137, 137);\n    \n    Polygon poly138(4);\n    poly138.ps[0] = Point(556, 571);\n    poly138.ps[1] = Point(556, 611);\n    poly138.ps[2] = Point(500, 611);\n    poly138.ps[3] = Point(500, 571);\n    new ShapeRef(router, poly138, 138);\n    \n    Polygon poly139(4);\n    poly139.ps[0] = Point(290, 722);\n    poly139.ps[1] = Point(290, 762);\n    poly139.ps[2] = Point(234, 762);\n    poly139.ps[3] = Point(234, 722);\n    new ShapeRef(router, poly139, 139);\n    \n    Polygon poly140(4);\n    poly140.ps[0] = Point(603, 502);\n    poly140.ps[1] = Point(603, 542);\n    poly140.ps[2] = Point(547, 542);\n    poly140.ps[3] = Point(547, 502);\n    new ShapeRef(router, poly140, 140);\n    \n    Polygon poly141(4);\n    poly141.ps[0] = Point(438, 613);\n    poly141.ps[1] = Point(438, 653);\n    poly141.ps[2] = Point(382, 653);\n    poly141.ps[3] = Point(382, 613);\n    new ShapeRef(router, poly141, 141);\n    \n    Polygon poly142(4);\n    poly142.ps[0] = Point(439, 449);\n    poly142.ps[1] = Point(439, 489);\n    poly142.ps[2] = Point(383, 489);\n    poly142.ps[3] = Point(383, 449);\n    new ShapeRef(router, poly142, 142);\n    \n    ConnRef *connRef143 = new ConnRef(router, 143);\n    ConnEnd srcPt143(Point(262, 940), 15);\n    connRef143->setSourceEndpoint(srcPt143);\n    ConnEnd dstPt143(Point(119, 951), 15);\n    connRef143->setDestEndpoint(dstPt143);\n    connRef143->setRoutingType((ConnType)2);\n\n    ConnRef *connRef144 = new ConnRef(router, 144);\n    ConnEnd srcPt144(Point(262, 940), 15);\n    connRef144->setSourceEndpoint(srcPt144);\n    ConnEnd dstPt144(Point(351, 951), 15);\n    connRef144->setDestEndpoint(dstPt144);\n    connRef144->setRoutingType((ConnType)2);\n\n    ConnRef *connRef145 = new ConnRef(router, 145);\n    ConnEnd srcPt145(Point(119, 908), 15);\n    connRef145->setSourceEndpoint(srcPt145);\n    ConnEnd dstPt145(Point(119, 951), 15);\n    connRef145->setDestEndpoint(dstPt145);\n    connRef145->setRoutingType((ConnType)2);\n\n    ConnRef *connRef146 = new ConnRef(router, 146);\n    ConnEnd srcPt146(Point(119, 908), 15);\n    connRef146->setSourceEndpoint(srcPt146);\n    ConnEnd dstPt146(Point(119, 861), 15);\n    connRef146->setDestEndpoint(dstPt146);\n    connRef146->setRoutingType((ConnType)2);\n\n    ConnRef *connRef147 = new ConnRef(router, 147);\n    ConnEnd srcPt147(Point(262, 961), 15);\n    connRef147->setSourceEndpoint(srcPt147);\n    ConnEnd dstPt147(Point(119, 951), 15);\n    connRef147->setDestEndpoint(dstPt147);\n    connRef147->setRoutingType((ConnType)2);\n\n    ConnRef *connRef148 = new ConnRef(router, 148);\n    ConnEnd srcPt148(Point(262, 961), 15);\n    connRef148->setSourceEndpoint(srcPt148);\n    ConnEnd dstPt148(Point(351, 951), 15);\n    connRef148->setDestEndpoint(dstPt148);\n    connRef148->setRoutingType((ConnType)2);\n\n    ConnRef *connRef149 = new ConnRef(router, 149);\n    ConnEnd srcPt149(Point(629, 336), 15);\n    connRef149->setSourceEndpoint(srcPt149);\n    ConnEnd dstPt149(Point(456, 446), 15);\n    connRef149->setDestEndpoint(dstPt149);\n    connRef149->setRoutingType((ConnType)2);\n\n    ConnRef *connRef150 = new ConnRef(router, 150);\n    ConnEnd srcPt150(Point(351, 909), 15);\n    connRef150->setSourceEndpoint(srcPt150);\n    ConnEnd dstPt150(Point(351, 951), 15);\n    connRef150->setDestEndpoint(dstPt150);\n    connRef150->setRoutingType((ConnType)2);\n\n    ConnRef *connRef151 = new ConnRef(router, 151);\n    ConnEnd srcPt151(Point(460, 940), 15);\n    connRef151->setSourceEndpoint(srcPt151);\n    ConnEnd dstPt151(Point(351, 951), 15);\n    connRef151->setDestEndpoint(dstPt151);\n    connRef151->setRoutingType((ConnType)2);\n\n    ConnRef *connRef152 = new ConnRef(router, 152);\n    ConnEnd srcPt152(Point(412, 940), 15);\n    connRef152->setSourceEndpoint(srcPt152);\n    ConnEnd dstPt152(Point(351, 951), 15);\n    connRef152->setDestEndpoint(dstPt152);\n    connRef152->setRoutingType((ConnType)2);\n\n    ConnRef *connRef153 = new ConnRef(router, 153);\n    ConnEnd srcPt153(Point(404, 871), 15);\n    connRef153->setSourceEndpoint(srcPt153);\n    ConnEnd dstPt153(Point(456, 861), 15);\n    connRef153->setDestEndpoint(dstPt153);\n    connRef153->setRoutingType((ConnType)2);\n\n    ConnRef *connRef154 = new ConnRef(router, 154);\n    ConnEnd srcPt154(Point(404, 871), 15);\n    connRef154->setSourceEndpoint(srcPt154);\n    ConnEnd dstPt154(Point(351, 861), 15);\n    connRef154->setDestEndpoint(dstPt154);\n    connRef154->setRoutingType((ConnType)2);\n\n    ConnRef *connRef155 = new ConnRef(router, 155);\n    ConnEnd srcPt155(Point(404, 850), 15);\n    connRef155->setSourceEndpoint(srcPt155);\n    ConnEnd dstPt155(Point(456, 861), 15);\n    connRef155->setDestEndpoint(dstPt155);\n    connRef155->setRoutingType((ConnType)2);\n\n    ConnRef *connRef156 = new ConnRef(router, 156);\n    ConnEnd srcPt156(Point(404, 850), 15);\n    connRef156->setSourceEndpoint(srcPt156);\n    ConnEnd dstPt156(Point(351, 861), 15);\n    connRef156->setDestEndpoint(dstPt156);\n    connRef156->setRoutingType((ConnType)2);\n\n    ConnRef *connRef157 = new ConnRef(router, 157);\n    ConnEnd srcPt157(Point(292, 862), 15);\n    connRef157->setSourceEndpoint(srcPt157);\n    ConnEnd dstPt157(Point(287, 904), 15);\n    connRef157->setDestEndpoint(dstPt157);\n    connRef157->setRoutingType((ConnType)2);\n\n    ConnRef *connRef158 = new ConnRef(router, 158);\n    ConnEnd srcPt158(Point(292, 862), 15);\n    connRef158->setSourceEndpoint(srcPt158);\n    ConnEnd dstPt158(Point(351, 861), 15);\n    connRef158->setDestEndpoint(dstPt158);\n    connRef158->setRoutingType((ConnType)2);\n\n    ConnRef *connRef159 = new ConnRef(router, 159);\n    ConnEnd srcPt159(Point(292, 862), 15);\n    connRef159->setSourceEndpoint(srcPt159);\n    ConnEnd dstPt159(Point(351, 818), 15);\n    connRef159->setDestEndpoint(dstPt159);\n    connRef159->setRoutingType((ConnType)2);\n\n    ConnRef *connRef160 = new ConnRef(router, 160);\n    ConnEnd srcPt160(Point(292, 862), 15);\n    connRef160->setSourceEndpoint(srcPt160);\n    ConnEnd dstPt160(Point(238, 861), 15);\n    connRef160->setDestEndpoint(dstPt160);\n    connRef160->setRoutingType((ConnType)2);\n\n    ConnRef *connRef161 = new ConnRef(router, 161);\n    ConnEnd srcPt161(Point(183, 862), 15);\n    connRef161->setSourceEndpoint(srcPt161);\n    ConnEnd dstPt161(Point(119, 861), 15);\n    connRef161->setDestEndpoint(dstPt161);\n    connRef161->setRoutingType((ConnType)2);\n\n    ConnRef *connRef162 = new ConnRef(router, 162);\n    ConnEnd srcPt162(Point(183, 862), 15);\n    connRef162->setSourceEndpoint(srcPt162);\n    ConnEnd dstPt162(Point(238, 861), 15);\n    connRef162->setDestEndpoint(dstPt162);\n    connRef162->setRoutingType((ConnType)2);\n\n    ConnRef *connRef163 = new ConnRef(router, 163);\n    ConnEnd srcPt163(Point(183, 862), 15);\n    connRef163->setSourceEndpoint(srcPt163);\n    ConnEnd dstPt163(Point(185, 904), 15);\n    connRef163->setDestEndpoint(dstPt163);\n    connRef163->setRoutingType((ConnType)2);\n\n    ConnRef *connRef164 = new ConnRef(router, 164);\n    ConnEnd srcPt164(Point(531, 861), 15);\n    connRef164->setSourceEndpoint(srcPt164);\n    ConnEnd dstPt164(Point(600, 861), 15);\n    connRef164->setDestEndpoint(dstPt164);\n    connRef164->setRoutingType((ConnType)2);\n\n    ConnRef *connRef165 = new ConnRef(router, 165);\n    ConnEnd srcPt165(Point(531, 861), 15);\n    connRef165->setSourceEndpoint(srcPt165);\n    ConnEnd dstPt165(Point(456, 861), 15);\n    connRef165->setDestEndpoint(dstPt165);\n    connRef165->setRoutingType((ConnType)2);\n\n    ConnRef *connRef166 = new ConnRef(router, 166);\n    ConnEnd srcPt166(Point(456, 767), 15);\n    connRef166->setSourceEndpoint(srcPt166);\n    ConnEnd dstPt166(Point(456, 734), 15);\n    connRef166->setDestEndpoint(dstPt166);\n    connRef166->setRoutingType((ConnType)2);\n\n    ConnRef *connRef167 = new ConnRef(router, 167);\n    ConnEnd srcPt167(Point(456, 767), 15);\n    connRef167->setSourceEndpoint(srcPt167);\n    ConnEnd dstPt167(Point(456, 861), 15);\n    connRef167->setDestEndpoint(dstPt167);\n    connRef167->setRoutingType((ConnType)2);\n\n    ConnRef *connRef168 = new ConnRef(router, 168);\n    ConnEnd srcPt168(Point(456, 698), 15);\n    connRef168->setSourceEndpoint(srcPt168);\n    ConnEnd dstPt168(Point(456, 662), 15);\n    connRef168->setDestEndpoint(dstPt168);\n    connRef168->setRoutingType((ConnType)2);\n\n    ConnRef *connRef169 = new ConnRef(router, 169);\n    ConnEnd srcPt169(Point(456, 698), 15);\n    connRef169->setSourceEndpoint(srcPt169);\n    ConnEnd dstPt169(Point(456, 734), 15);\n    connRef169->setDestEndpoint(dstPt169);\n    connRef169->setRoutingType((ConnType)2);\n\n    ConnRef *connRef170 = new ConnRef(router, 170);\n    ConnEnd srcPt170(Point(457, 626), 15);\n    connRef170->setSourceEndpoint(srcPt170);\n    ConnEnd dstPt170(Point(456, 662), 15);\n    connRef170->setDestEndpoint(dstPt170);\n    connRef170->setRoutingType((ConnType)2);\n\n    ConnRef *connRef171 = new ConnRef(router, 171);\n    ConnEnd srcPt171(Point(457, 626), 15);\n    connRef171->setSourceEndpoint(srcPt171);\n    ConnEnd dstPt171(Point(456, 590), 15);\n    connRef171->setDestEndpoint(dstPt171);\n    connRef171->setRoutingType((ConnType)2);\n\n    ConnRef *connRef172 = new ConnRef(router, 172);\n    ConnEnd srcPt172(Point(431, 481), 15);\n    connRef172->setSourceEndpoint(srcPt172);\n    ConnEnd dstPt172(Point(456, 518), 15);\n    connRef172->setDestEndpoint(dstPt172);\n    connRef172->setRoutingType((ConnType)2);\n\n    ConnRef *connRef173 = new ConnRef(router, 173);\n    ConnEnd srcPt173(Point(431, 481), 15);\n    connRef173->setSourceEndpoint(srcPt173);\n    ConnEnd dstPt173(Point(456, 446), 15);\n    connRef173->setDestEndpoint(dstPt173);\n    connRef173->setRoutingType((ConnType)2);\n\n    ConnRef *connRef174 = new ConnRef(router, 174);\n    ConnEnd srcPt174(Point(376, 447), 15);\n    connRef174->setSourceEndpoint(srcPt174);\n    ConnEnd dstPt174(Point(305, 446), 15);\n    connRef174->setDestEndpoint(dstPt174);\n    connRef174->setRoutingType((ConnType)2);\n\n    ConnRef *connRef175 = new ConnRef(router, 175);\n    ConnEnd srcPt175(Point(376, 447), 15);\n    connRef175->setSourceEndpoint(srcPt175);\n    ConnEnd dstPt175(Point(456, 446), 15);\n    connRef175->setDestEndpoint(dstPt175);\n    connRef175->setRoutingType((ConnType)2);\n\n    ConnRef *connRef176 = new ConnRef(router, 176);\n    ConnEnd srcPt176(Point(456, 401), 15);\n    connRef176->setSourceEndpoint(srcPt176);\n    ConnEnd dstPt176(Point(305, 446), 15);\n    connRef176->setDestEndpoint(dstPt176);\n    connRef176->setRoutingType((ConnType)2);\n\n    ConnRef *connRef177 = new ConnRef(router, 177);\n    ConnEnd srcPt177(Point(456, 401), 15);\n    connRef177->setSourceEndpoint(srcPt177);\n    ConnEnd dstPt177(Point(456, 371), 15);\n    connRef177->setDestEndpoint(dstPt177);\n    connRef177->setRoutingType((ConnType)2);\n\n    ConnRef *connRef178 = new ConnRef(router, 178);\n    ConnEnd srcPt178(Point(456, 401), 15);\n    connRef178->setSourceEndpoint(srcPt178);\n    ConnEnd dstPt178(Point(456, 446), 15);\n    connRef178->setDestEndpoint(dstPt178);\n    connRef178->setRoutingType((ConnType)2);\n\n    ConnRef *connRef179 = new ConnRef(router, 179);\n    ConnEnd srcPt179(Point(456, 335), 15);\n    connRef179->setSourceEndpoint(srcPt179);\n    ConnEnd dstPt179(Point(456, 301), 15);\n    connRef179->setDestEndpoint(dstPt179);\n    connRef179->setRoutingType((ConnType)2);\n\n    ConnRef *connRef180 = new ConnRef(router, 180);\n    ConnEnd srcPt180(Point(456, 335), 15);\n    connRef180->setSourceEndpoint(srcPt180);\n    ConnEnd dstPt180(Point(456, 371), 15);\n    connRef180->setDestEndpoint(dstPt180);\n    connRef180->setRoutingType((ConnType)2);\n\n    ConnRef *connRef181 = new ConnRef(router, 181);\n    ConnEnd srcPt181(Point(403, 335), 15);\n    connRef181->setSourceEndpoint(srcPt181);\n    ConnEnd dstPt181(Point(456, 301), 15);\n    connRef181->setDestEndpoint(dstPt181);\n    connRef181->setRoutingType((ConnType)2);\n\n    ConnRef *connRef182 = new ConnRef(router, 182);\n    ConnEnd srcPt182(Point(525, 192), 15);\n    connRef182->setSourceEndpoint(srcPt182);\n    ConnEnd dstPt182(Point(456, 228), 15);\n    connRef182->setDestEndpoint(dstPt182);\n    connRef182->setRoutingType((ConnType)2);\n\n    ConnRef *connRef183 = new ConnRef(router, 183);\n    ConnEnd srcPt183(Point(456, 265), 15);\n    connRef183->setSourceEndpoint(srcPt183);\n    ConnEnd dstPt183(Point(456, 228), 15);\n    connRef183->setDestEndpoint(dstPt183);\n    connRef183->setRoutingType((ConnType)2);\n\n    ConnRef *connRef184 = new ConnRef(router, 184);\n    ConnEnd srcPt184(Point(456, 265), 15);\n    connRef184->setSourceEndpoint(srcPt184);\n    ConnEnd dstPt184(Point(456, 301), 15);\n    connRef184->setDestEndpoint(dstPt184);\n    connRef184->setRoutingType((ConnType)2);\n\n    ConnRef *connRef185 = new ConnRef(router, 185);\n    ConnEnd srcPt185(Point(456, 170), 15);\n    connRef185->setSourceEndpoint(srcPt185);\n    ConnEnd dstPt185(Point(456, 141), 15);\n    connRef185->setDestEndpoint(dstPt185);\n    connRef185->setRoutingType((ConnType)2);\n\n    ConnRef *connRef186 = new ConnRef(router, 186);\n    ConnEnd srcPt186(Point(456, 170), 15);\n    connRef186->setSourceEndpoint(srcPt186);\n    ConnEnd dstPt186(Point(456, 228), 15);\n    connRef186->setDestEndpoint(dstPt186);\n    connRef186->setRoutingType((ConnType)2);\n\n    ConnRef *connRef187 = new ConnRef(router, 187);\n    ConnEnd srcPt187(Point(376, 299), 15);\n    connRef187->setSourceEndpoint(srcPt187);\n    ConnEnd dstPt187(Point(305, 299), 15);\n    connRef187->setDestEndpoint(dstPt187);\n    connRef187->setRoutingType((ConnType)2);\n\n    ConnRef *connRef188 = new ConnRef(router, 188);\n    ConnEnd srcPt188(Point(376, 299), 15);\n    connRef188->setSourceEndpoint(srcPt188);\n    ConnEnd dstPt188(Point(456, 301), 15);\n    connRef188->setDestEndpoint(dstPt188);\n    connRef188->setRoutingType((ConnType)2);\n\n    ConnRef *connRef189 = new ConnRef(router, 189);\n    ConnEnd srcPt189(Point(221, 280), 15);\n    connRef189->setSourceEndpoint(srcPt189);\n    ConnEnd dstPt189(Point(154, 299), 15);\n    connRef189->setDestEndpoint(dstPt189);\n    connRef189->setRoutingType((ConnType)2);\n\n    ConnRef *connRef190 = new ConnRef(router, 190);\n    ConnEnd srcPt190(Point(221, 280), 15);\n    connRef190->setSourceEndpoint(srcPt190);\n    ConnEnd dstPt190(Point(305, 299), 15);\n    connRef190->setDestEndpoint(dstPt190);\n    connRef190->setRoutingType((ConnType)2);\n\n    ConnRef *connRef191 = new ConnRef(router, 191);\n    ConnEnd srcPt191(Point(221, 299), 15);\n    connRef191->setSourceEndpoint(srcPt191);\n    ConnEnd dstPt191(Point(154, 299), 15);\n    connRef191->setDestEndpoint(dstPt191);\n    connRef191->setRoutingType((ConnType)2);\n\n    ConnRef *connRef192 = new ConnRef(router, 192);\n    ConnEnd srcPt192(Point(221, 299), 15);\n    connRef192->setSourceEndpoint(srcPt192);\n    ConnEnd dstPt192(Point(305, 299), 15);\n    connRef192->setDestEndpoint(dstPt192);\n    connRef192->setRoutingType((ConnType)2);\n\n    ConnRef *connRef193 = new ConnRef(router, 193);\n    ConnEnd srcPt193(Point(330, 266), 15);\n    connRef193->setSourceEndpoint(srcPt193);\n    ConnEnd dstPt193(Point(305, 299), 15);\n    connRef193->setDestEndpoint(dstPt193);\n    connRef193->setRoutingType((ConnType)2);\n\n    ConnRef *connRef194 = new ConnRef(router, 194);\n    ConnEnd srcPt194(Point(330, 266), 15);\n    connRef194->setSourceEndpoint(srcPt194);\n    ConnEnd dstPt194(Point(456, 228), 15);\n    connRef194->setDestEndpoint(dstPt194);\n    connRef194->setRoutingType((ConnType)2);\n\n    ConnRef *connRef195 = new ConnRef(router, 195);\n    ConnEnd srcPt195(Point(280, 266), 15);\n    connRef195->setSourceEndpoint(srcPt195);\n    ConnEnd dstPt195(Point(305, 299), 15);\n    connRef195->setDestEndpoint(dstPt195);\n    connRef195->setRoutingType((ConnType)2);\n\n    ConnRef *connRef196 = new ConnRef(router, 196);\n    ConnEnd srcPt196(Point(280, 266), 15);\n    connRef196->setSourceEndpoint(srcPt196);\n    ConnEnd dstPt196(Point(456, 228), 15);\n    connRef196->setDestEndpoint(dstPt196);\n    connRef196->setRoutingType((ConnType)2);\n\n    ConnRef *connRef197 = new ConnRef(router, 197);\n    ConnEnd srcPt197(Point(154, 261), 15);\n    connRef197->setSourceEndpoint(srcPt197);\n    ConnEnd dstPt197(Point(154, 226), 15);\n    connRef197->setDestEndpoint(dstPt197);\n    connRef197->setRoutingType((ConnType)2);\n\n    ConnRef *connRef198 = new ConnRef(router, 198);\n    ConnEnd srcPt198(Point(154, 261), 15);\n    connRef198->setSourceEndpoint(srcPt198);\n    ConnEnd dstPt198(Point(154, 299), 15);\n    connRef198->setDestEndpoint(dstPt198);\n    connRef198->setRoutingType((ConnType)2);\n\n    ConnRef *connRef199 = new ConnRef(router, 199);\n    ConnEnd srcPt199(Point(221, 224), 15);\n    connRef199->setSourceEndpoint(srcPt199);\n    ConnEnd dstPt199(Point(154, 226), 15);\n    connRef199->setDestEndpoint(dstPt199);\n    connRef199->setRoutingType((ConnType)2);\n\n    ConnRef *connRef200 = new ConnRef(router, 200);\n    ConnEnd srcPt200(Point(221, 224), 15);\n    connRef200->setSourceEndpoint(srcPt200);\n    ConnEnd dstPt200(Point(456, 228), 15);\n    connRef200->setDestEndpoint(dstPt200);\n    connRef200->setRoutingType((ConnType)2);\n\n    ConnRef *connRef201 = new ConnRef(router, 201);\n    ConnEnd srcPt201(Point(221, 205), 15);\n    connRef201->setSourceEndpoint(srcPt201);\n    ConnEnd dstPt201(Point(154, 226), 15);\n    connRef201->setDestEndpoint(dstPt201);\n    connRef201->setRoutingType((ConnType)2);\n\n    ConnRef *connRef202 = new ConnRef(router, 202);\n    ConnEnd srcPt202(Point(221, 205), 15);\n    connRef202->setSourceEndpoint(srcPt202);\n    ConnEnd dstPt202(Point(456, 228), 15);\n    connRef202->setDestEndpoint(dstPt202);\n    connRef202->setRoutingType((ConnType)2);\n\n    ConnRef *connRef203 = new ConnRef(router, 203);\n    ConnEnd srcPt203(Point(289, 183), 15);\n    connRef203->setSourceEndpoint(srcPt203);\n    ConnEnd dstPt203(Point(154, 226), 15);\n    connRef203->setDestEndpoint(dstPt203);\n    connRef203->setRoutingType((ConnType)2);\n\n    ConnRef *connRef204 = new ConnRef(router, 204);\n    ConnEnd srcPt204(Point(289, 183), 15);\n    connRef204->setSourceEndpoint(srcPt204);\n    ConnEnd dstPt204(Point(456, 228), 15);\n    connRef204->setDestEndpoint(dstPt204);\n    connRef204->setRoutingType((ConnType)2);\n\n    ConnRef *connRef205 = new ConnRef(router, 205);\n    ConnEnd srcPt205(Point(316, 151), 15);\n    connRef205->setSourceEndpoint(srcPt205);\n    ConnEnd dstPt205(Point(456, 141), 15);\n    connRef205->setDestEndpoint(dstPt205);\n    connRef205->setRoutingType((ConnType)2);\n\n    ConnRef *connRef206 = new ConnRef(router, 206);\n    ConnEnd srcPt206(Point(316, 151), 15);\n    connRef206->setSourceEndpoint(srcPt206);\n    ConnEnd dstPt206(Point(154, 226), 15);\n    connRef206->setDestEndpoint(dstPt206);\n    connRef206->setRoutingType((ConnType)2);\n\n    ConnRef *connRef207 = new ConnRef(router, 207);\n    ConnEnd srcPt207(Point(316, 130), 15);\n    connRef207->setSourceEndpoint(srcPt207);\n    ConnEnd dstPt207(Point(456, 141), 15);\n    connRef207->setDestEndpoint(dstPt207);\n    connRef207->setRoutingType((ConnType)2);\n\n    ConnRef *connRef208 = new ConnRef(router, 208);\n    ConnEnd srcPt208(Point(316, 130), 15);\n    connRef208->setSourceEndpoint(srcPt208);\n    ConnEnd dstPt208(Point(154, 226), 15);\n    connRef208->setDestEndpoint(dstPt208);\n    connRef208->setRoutingType((ConnType)2);\n\n    ConnRef *connRef209 = new ConnRef(router, 209);\n    ConnEnd srcPt209(Point(235, 905), 15);\n    connRef209->setSourceEndpoint(srcPt209);\n    ConnEnd dstPt209(Point(287, 904), 15);\n    connRef209->setDestEndpoint(dstPt209);\n    connRef209->setRoutingType((ConnType)2);\n\n    ConnRef *connRef210 = new ConnRef(router, 210);\n    ConnEnd srcPt210(Point(456, 553), 15);\n    connRef210->setSourceEndpoint(srcPt210);\n    ConnEnd dstPt210(Point(456, 590), 15);\n    connRef210->setDestEndpoint(dstPt210);\n    connRef210->setRoutingType((ConnType)2);\n\n    ConnRef *connRef211 = new ConnRef(router, 211);\n    ConnEnd srcPt211(Point(456, 553), 15);\n    connRef211->setSourceEndpoint(srcPt211);\n    ConnEnd dstPt211(Point(456, 518), 15);\n    connRef211->setDestEndpoint(dstPt211);\n    connRef211->setRoutingType((ConnType)2);\n\n    ConnRef *connRef212 = new ConnRef(router, 212);\n    ConnEnd srcPt212(Point(221, 243), 15);\n    connRef212->setSourceEndpoint(srcPt212);\n    ConnEnd dstPt212(Point(456, 228), 15);\n    connRef212->setDestEndpoint(dstPt212);\n    connRef212->setRoutingType((ConnType)2);\n\n    ConnRef *connRef213 = new ConnRef(router, 213);\n    ConnEnd srcPt213(Point(221, 318), 15);\n    connRef213->setSourceEndpoint(srcPt213);\n    ConnEnd dstPt213(Point(305, 299), 15);\n    connRef213->setDestEndpoint(dstPt213);\n    connRef213->setRoutingType((ConnType)2);\n\n    ConnRef *connRef214 = new ConnRef(router, 214);\n    ConnEnd srcPt214(Point(154, 357), 15);\n    connRef214->setSourceEndpoint(srcPt214);\n    ConnEnd dstPt214(Point(212, 356), 15);\n    connRef214->setDestEndpoint(dstPt214);\n    connRef214->setRoutingType((ConnType)2);\n\n    ConnRef *connRef215 = new ConnRef(router, 215);\n    ConnEnd srcPt215(Point(154, 383), 15);\n    connRef215->setSourceEndpoint(srcPt215);\n    ConnEnd dstPt215(Point(212, 382), 15);\n    connRef215->setDestEndpoint(dstPt215);\n    connRef215->setRoutingType((ConnType)2);\n\n    ConnRef *connRef216 = new ConnRef(router, 216);\n    ConnEnd srcPt216(Point(264, 356), 15);\n    connRef216->setSourceEndpoint(srcPt216);\n    ConnEnd dstPt216(Point(305, 299), 15);\n    connRef216->setDestEndpoint(dstPt216);\n    connRef216->setRoutingType((ConnType)2);\n\n    ConnRef *connRef217 = new ConnRef(router, 217);\n    ConnEnd srcPt217(Point(264, 382), 15);\n    connRef217->setSourceEndpoint(srcPt217);\n    ConnEnd dstPt217(Point(305, 299), 15);\n    connRef217->setDestEndpoint(dstPt217);\n    connRef217->setRoutingType((ConnType)2);\n\n    ConnRef *connRef218 = new ConnRef(router, 218);\n    ConnEnd srcPt218(Point(574, 193), 15);\n    connRef218->setSourceEndpoint(srcPt218);\n    ConnEnd dstPt218(Point(525, 192), 15);\n    connRef218->setDestEndpoint(dstPt218);\n    connRef218->setRoutingType((ConnType)2);\n\n    ConnRef *connRef219 = new ConnRef(router, 219);\n    ConnEnd srcPt219(Point(456, 141), 15);\n    connRef219->setSourceEndpoint(srcPt219);\n    ConnEnd dstPt219(Point(458, 74), 15);\n    connRef219->setDestEndpoint(dstPt219);\n    connRef219->setRoutingType((ConnType)2);\n\n    ConnRef *connRef220 = new ConnRef(router, 220);\n    ConnEnd srcPt220(Point(456, 662), 15);\n    connRef220->setSourceEndpoint(srcPt220);\n    ConnEnd dstPt220(Point(629, 336), 15);\n    connRef220->setDestEndpoint(dstPt220);\n    connRef220->setRoutingType((ConnType)2);\n\n    ConnRef *connRef221 = new ConnRef(router, 221);\n    ConnEnd srcPt221(Point(154, 226), 15);\n    connRef221->setSourceEndpoint(srcPt221);\n    ConnEnd dstPt221(Point(221, 243), 15);\n    connRef221->setDestEndpoint(dstPt221);\n    connRef221->setRoutingType((ConnType)2);\n\n    ConnRef *connRef222 = new ConnRef(router, 222);\n    ConnEnd srcPt222(Point(221, 318), 15);\n    connRef222->setSourceEndpoint(srcPt222);\n    ConnEnd dstPt222(Point(154, 299), 15);\n    connRef222->setDestEndpoint(dstPt222);\n    connRef222->setRoutingType((ConnType)2);\n\n    ConnRef *connRef223 = new ConnRef(router, 223);\n    ConnEnd srcPt223(Point(456, 228), 15);\n    connRef223->setSourceEndpoint(srcPt223);\n    ConnEnd dstPt223(Point(629, 336), 15);\n    connRef223->setDestEndpoint(dstPt223);\n    connRef223->setRoutingType((ConnType)2);\n\n    ConnRef *connRef224 = new ConnRef(router, 224);\n    ConnEnd srcPt224(Point(456, 734), 15);\n    connRef224->setSourceEndpoint(srcPt224);\n    ConnEnd dstPt224(Point(49, 798), 15);\n    connRef224->setDestEndpoint(dstPt224);\n    connRef224->setRoutingType((ConnType)2);\n\n    ConnRef *connRef225 = new ConnRef(router, 225);\n    ConnEnd srcPt225(Point(177, 744), 15);\n    connRef225->setSourceEndpoint(srcPt225);\n    ConnEnd dstPt225(Point(456, 734), 15);\n    connRef225->setDestEndpoint(dstPt225);\n    connRef225->setRoutingType((ConnType)2);\n\n    ConnRef *connRef226 = new ConnRef(router, 226);\n    ConnEnd srcPt226(Point(456, 590), 15);\n    connRef226->setSourceEndpoint(srcPt226);\n    ConnEnd dstPt226(Point(278, 597), 15);\n    connRef226->setDestEndpoint(dstPt226);\n    connRef226->setRoutingType((ConnType)2);\n\n    ConnRef *connRef227 = new ConnRef(router, 227);\n    ConnEnd srcPt227(Point(555, 522), 15);\n    connRef227->setSourceEndpoint(srcPt227);\n    ConnEnd dstPt227(Point(456, 590), 15);\n    connRef227->setDestEndpoint(dstPt227);\n    connRef227->setRoutingType((ConnType)2);\n\n    ConnRef *connRef228 = new ConnRef(router, 228);\n    ConnEnd srcPt228(Point(528, 541), 15);\n    connRef228->setSourceEndpoint(srcPt228);\n    ConnEnd dstPt228(Point(456, 590), 15);\n    connRef228->setDestEndpoint(dstPt228);\n    connRef228->setRoutingType((ConnType)2);\n\n    ConnRef *connRef229 = new ConnRef(router, 229);\n    ConnEnd srcPt229(Point(505, 522), 15);\n    connRef229->setSourceEndpoint(srcPt229);\n    ConnEnd dstPt229(Point(456, 590), 15);\n    connRef229->setDestEndpoint(dstPt229);\n    connRef229->setRoutingType((ConnType)2);\n\n    ConnRef *connRef230 = new ConnRef(router, 230);\n    ConnEnd srcPt230(Point(481, 481), 15);\n    connRef230->setSourceEndpoint(srcPt230);\n    ConnEnd dstPt230(Point(456, 518), 15);\n    connRef230->setDestEndpoint(dstPt230);\n    connRef230->setRoutingType((ConnType)2);\n\n    ConnRef *connRef231 = new ConnRef(router, 231);\n    ConnEnd srcPt231(Point(411, 519), 15);\n    connRef231->setSourceEndpoint(srcPt231);\n    ConnEnd dstPt231(Point(456, 518), 15);\n    connRef231->setDestEndpoint(dstPt231);\n    connRef231->setRoutingType((ConnType)2);\n\n    ConnRef *connRef232 = new ConnRef(router, 232);\n    ConnEnd srcPt232(Point(600, 861), 15);\n    connRef232->setSourceEndpoint(srcPt232);\n    ConnEnd dstPt232(Point(601, 917), 15);\n    connRef232->setDestEndpoint(dstPt232);\n    connRef232->setRoutingType((ConnType)2);\n\n    ConnRef *connRef233 = new ConnRef(router, 233);\n    ConnEnd srcPt233(Point(460, 940), 15);\n    connRef233->setSourceEndpoint(srcPt233);\n    ConnEnd dstPt233(Point(523, 951), 15);\n    connRef233->setDestEndpoint(dstPt233);\n    connRef233->setRoutingType((ConnType)2);\n\n    ConnRef *connRef234 = new ConnRef(router, 234);\n    ConnEnd srcPt234(Point(412, 940), 15);\n    connRef234->setSourceEndpoint(srcPt234);\n    ConnEnd dstPt234(Point(523, 951), 15);\n    connRef234->setDestEndpoint(dstPt234);\n    connRef234->setRoutingType((ConnType)2);\n\n    ConnRef *connRef235 = new ConnRef(router, 235);\n    ConnEnd srcPt235(Point(523, 951), 15);\n    connRef235->setSourceEndpoint(srcPt235);\n    ConnEnd dstPt235(Point(412, 961), 15);\n    connRef235->setDestEndpoint(dstPt235);\n    connRef235->setRoutingType((ConnType)2);\n\n    ConnRef *connRef236 = new ConnRef(router, 236);\n    ConnEnd srcPt236(Point(460, 961), 15);\n    connRef236->setSourceEndpoint(srcPt236);\n    ConnEnd dstPt236(Point(523, 951), 15);\n    connRef236->setDestEndpoint(dstPt236);\n    connRef236->setRoutingType((ConnType)2);\n\n    ConnRef *connRef237 = new ConnRef(router, 237);\n    ConnEnd srcPt237(Point(456, 861), 15);\n    connRef237->setSourceEndpoint(srcPt237);\n    ConnEnd dstPt237(Point(629, 336), 15);\n    connRef237->setDestEndpoint(dstPt237);\n    connRef237->setRoutingType((ConnType)2);\n\n    ConnRef *connRef238 = new ConnRef(router, 238);\n    ConnEnd srcPt238(Point(456, 861), 15);\n    connRef238->setSourceEndpoint(srcPt238);\n    ConnEnd dstPt238(Point(49, 798), 15);\n    connRef238->setDestEndpoint(dstPt238);\n    connRef238->setRoutingType((ConnType)2);\n\n    ConnRef *connRef239 = new ConnRef(router, 239);\n    ConnEnd srcPt239(Point(262, 792), 15);\n    connRef239->setSourceEndpoint(srcPt239);\n    ConnEnd dstPt239(Point(456, 861), 15);\n    connRef239->setDestEndpoint(dstPt239);\n    connRef239->setRoutingType((ConnType)2);\n\n    ConnRef *connRef240 = new ConnRef(router, 240);\n    ConnEnd srcPt240(Point(351, 861), 15);\n    connRef240->setSourceEndpoint(srcPt240);\n    ConnEnd dstPt240(Point(351, 909), 15);\n    connRef240->setDestEndpoint(dstPt240);\n    connRef240->setRoutingType((ConnType)2);\n\n    ConnRef *connRef241 = new ConnRef(router, 241);\n    ConnEnd srcPt241(Point(351, 818), 15);\n    connRef241->setSourceEndpoint(srcPt241);\n    ConnEnd dstPt241(Point(404, 871), 15);\n    connRef241->setDestEndpoint(dstPt241);\n    connRef241->setRoutingType((ConnType)2);\n\n    ConnRef *connRef242 = new ConnRef(router, 242);\n    ConnEnd srcPt242(Point(351, 818), 15);\n    connRef242->setSourceEndpoint(srcPt242);\n    ConnEnd dstPt242(Point(404, 850), 15);\n    connRef242->setDestEndpoint(dstPt242);\n    connRef242->setRoutingType((ConnType)2);\n\n    ConnRef *connRef243 = new ConnRef(router, 243);\n    ConnEnd srcPt243(Point(119, 861), 15);\n    connRef243->setSourceEndpoint(srcPt243);\n    ConnEnd dstPt243(Point(49, 798), 15);\n    connRef243->setDestEndpoint(dstPt243);\n    connRef243->setRoutingType((ConnType)2);\n\n    ConnRef *connRef244 = new ConnRef(router, 244);\n    ConnEnd srcPt244(Point(262, 792), 15);\n    connRef244->setSourceEndpoint(srcPt244);\n    ConnEnd dstPt244(Point(119, 861), 15);\n    connRef244->setDestEndpoint(dstPt244);\n    connRef244->setRoutingType((ConnType)2);\n\n    ConnRef *connRef245 = new ConnRef(router, 245);\n    ConnEnd srcPt245(Point(412, 961), 15);\n    connRef245->setSourceEndpoint(srcPt245);\n    ConnEnd dstPt245(Point(351, 951), 15);\n    connRef245->setDestEndpoint(dstPt245);\n    connRef245->setRoutingType((ConnType)2);\n\n    ConnRef *connRef246 = new ConnRef(router, 246);\n    ConnEnd srcPt246(Point(460, 961), 15);\n    connRef246->setSourceEndpoint(srcPt246);\n    ConnEnd dstPt246(Point(351, 951), 15);\n    connRef246->setDestEndpoint(dstPt246);\n    connRef246->setRoutingType((ConnType)2);\n\n    ConnRef *connRef247 = new ConnRef(router, 247);\n    ConnEnd srcPt247(Point(235, 905), 15);\n    connRef247->setSourceEndpoint(srcPt247);\n    ConnEnd dstPt247(Point(185, 904), 15);\n    connRef247->setDestEndpoint(dstPt247);\n    connRef247->setRoutingType((ConnType)2);\n\n    ConnRef *connRef248 = new ConnRef(router, 248);\n    ConnEnd srcPt248(Point(456, 371), 15);\n    connRef248->setSourceEndpoint(srcPt248);\n    ConnEnd dstPt248(Point(403, 335), 15);\n    connRef248->setDestEndpoint(dstPt248);\n    connRef248->setRoutingType((ConnType)2);\n\n    ConnRef *connRef249 = new ConnRef(router, 249);\n    ConnEnd srcPt249(Point(105, 356), 15);\n    connRef249->setSourceEndpoint(srcPt249);\n    ConnEnd dstPt249(Point(154, 357), 15);\n    connRef249->setDestEndpoint(dstPt249);\n    connRef249->setRoutingType((ConnType)2);\n\n    ConnRef *connRef250 = new ConnRef(router, 250);\n    ConnEnd srcPt250(Point(212, 356), 15);\n    connRef250->setSourceEndpoint(srcPt250);\n    ConnEnd dstPt250(Point(264, 356), 15);\n    connRef250->setDestEndpoint(dstPt250);\n    connRef250->setRoutingType((ConnType)2);\n\n    ConnRef *connRef251 = new ConnRef(router, 251);\n    ConnEnd srcPt251(Point(212, 382), 15);\n    connRef251->setSourceEndpoint(srcPt251);\n    ConnEnd dstPt251(Point(264, 382), 15);\n    connRef251->setDestEndpoint(dstPt251);\n    connRef251->setRoutingType((ConnType)2);\n\n    ConnRef *connRef252 = new ConnRef(router, 252);\n    ConnEnd srcPt252(Point(105, 382), 15);\n    connRef252->setSourceEndpoint(srcPt252);\n    ConnEnd dstPt252(Point(154, 383), 15);\n    connRef252->setDestEndpoint(dstPt252);\n    connRef252->setRoutingType((ConnType)2);\n\n    ConnRef *connRef253 = new ConnRef(router, 253);\n    ConnEnd srcPt253(Point(49, 798), 15);\n    connRef253->setSourceEndpoint(srcPt253);\n    ConnEnd dstPt253(Point(119, 734), 15);\n    connRef253->setDestEndpoint(dstPt253);\n    connRef253->setRoutingType((ConnType)2);\n\n    ConnRef *connRef254 = new ConnRef(router, 254);\n    ConnEnd srcPt254(Point(177, 723), 15);\n    connRef254->setSourceEndpoint(srcPt254);\n    ConnEnd dstPt254(Point(456, 734), 15);\n    connRef254->setDestEndpoint(dstPt254);\n    connRef254->setRoutingType((ConnType)2);\n\n    ConnRef *connRef255 = new ConnRef(router, 255);\n    ConnEnd srcPt255(Point(119, 734), 15);\n    connRef255->setSourceEndpoint(srcPt255);\n    ConnEnd dstPt255(Point(177, 723), 15);\n    connRef255->setDestEndpoint(dstPt255);\n    connRef255->setRoutingType((ConnType)2);\n\n    ConnRef *connRef256 = new ConnRef(router, 256);\n    ConnEnd srcPt256(Point(119, 734), 15);\n    connRef256->setSourceEndpoint(srcPt256);\n    ConnEnd dstPt256(Point(177, 744), 15);\n    connRef256->setDestEndpoint(dstPt256);\n    connRef256->setRoutingType((ConnType)2);\n\n    ConnRef *connRef257 = new ConnRef(router, 257);\n    ConnEnd srcPt257(Point(481, 481), 15);\n    connRef257->setSourceEndpoint(srcPt257);\n    ConnEnd dstPt257(Point(456, 446), 15);\n    connRef257->setDestEndpoint(dstPt257);\n    connRef257->setRoutingType((ConnType)2);\n\n    ConnRef *connRef258 = new ConnRef(router, 258);\n    ConnEnd srcPt258(Point(410, 583), 15);\n    connRef258->setSourceEndpoint(srcPt258);\n    ConnEnd dstPt258(Point(371, 554), 15);\n    connRef258->setDestEndpoint(dstPt258);\n    connRef258->setRoutingType((ConnType)2);\n\n    ConnRef *connRef259 = new ConnRef(router, 259);\n    ConnEnd srcPt259(Point(410, 583), 15);\n    connRef259->setSourceEndpoint(srcPt259);\n    ConnEnd dstPt259(Point(456, 590), 15);\n    connRef259->setDestEndpoint(dstPt259);\n    connRef259->setRoutingType((ConnType)2);\n\n    ConnRef *connRef260 = new ConnRef(router, 260);\n    ConnEnd srcPt260(Point(411, 519), 15);\n    connRef260->setSourceEndpoint(srcPt260);\n    ConnEnd dstPt260(Point(371, 554), 15);\n    connRef260->setDestEndpoint(dstPt260);\n    connRef260->setRoutingType((ConnType)2);\n\n    ConnRef *connRef261 = new ConnRef(router, 261);\n    ConnEnd srcPt261(Point(456, 446), 15);\n    connRef261->setSourceEndpoint(srcPt261);\n    ConnEnd dstPt261(Point(555, 522), 15);\n    connRef261->setDestEndpoint(dstPt261);\n    connRef261->setRoutingType((ConnType)2);\n\n    ConnRef *connRef262 = new ConnRef(router, 262);\n    ConnEnd srcPt262(Point(456, 446), 15);\n    connRef262->setSourceEndpoint(srcPt262);\n    ConnEnd dstPt262(Point(528, 541), 15);\n    connRef262->setDestEndpoint(dstPt262);\n    connRef262->setRoutingType((ConnType)2);\n\n    ConnRef *connRef263 = new ConnRef(router, 263);\n    ConnEnd srcPt263(Point(456, 446), 15);\n    connRef263->setSourceEndpoint(srcPt263);\n    ConnEnd dstPt263(Point(505, 522), 15);\n    connRef263->setDestEndpoint(dstPt263);\n    connRef263->setRoutingType((ConnType)2);\n\n    ConnRef *connRef264 = new ConnRef(router, 264);\n    ConnEnd srcPt264(Point(262, 990), 15);\n    connRef264->setSourceEndpoint(srcPt264);\n    ConnEnd dstPt264(Point(262, 940), 15);\n    connRef264->setDestEndpoint(dstPt264);\n    connRef264->setRoutingType((ConnType)2);\n\n    ConnRef *connRef265 = new ConnRef(router, 265);\n    ConnEnd srcPt265(Point(49, 908), 15);\n    connRef265->setSourceEndpoint(srcPt265);\n    ConnEnd dstPt265(Point(119, 908), 15);\n    connRef265->setDestEndpoint(dstPt265);\n    connRef265->setRoutingType((ConnType)2);\n\n    ConnRef *connRef266 = new ConnRef(router, 266);\n    ConnEnd srcPt266(Point(332, 1011), 15);\n    connRef266->setSourceEndpoint(srcPt266);\n    ConnEnd dstPt266(Point(262, 961), 15);\n    connRef266->setDestEndpoint(dstPt266);\n    connRef266->setRoutingType((ConnType)2);\n\n    ConnRef *connRef267 = new ConnRef(router, 267);\n    ConnEnd srcPt267(Point(421, 909), 15);\n    connRef267->setSourceEndpoint(srcPt267);\n    ConnEnd dstPt267(Point(351, 909), 15);\n    connRef267->setDestEndpoint(dstPt267);\n    connRef267->setRoutingType((ConnType)2);\n\n    ConnRef *connRef268 = new ConnRef(router, 268);\n    ConnEnd srcPt268(Point(460, 990), 15);\n    connRef268->setSourceEndpoint(srcPt268);\n    ConnEnd dstPt268(Point(460, 940), 15);\n    connRef268->setDestEndpoint(dstPt268);\n    connRef268->setRoutingType((ConnType)2);\n\n    ConnRef *connRef269 = new ConnRef(router, 269);\n    ConnEnd srcPt269(Point(412, 990), 15);\n    connRef269->setSourceEndpoint(srcPt269);\n    ConnEnd dstPt269(Point(412, 940), 15);\n    connRef269->setDestEndpoint(dstPt269);\n    connRef269->setRoutingType((ConnType)2);\n\n    ConnRef *connRef270 = new ConnRef(router, 270);\n    ConnEnd srcPt270(Point(404, 821), 15);\n    connRef270->setSourceEndpoint(srcPt270);\n    ConnEnd dstPt270(Point(404, 871), 15);\n    connRef270->setDestEndpoint(dstPt270);\n    connRef270->setRoutingType((ConnType)2);\n\n    ConnRef *connRef271 = new ConnRef(router, 271);\n    ConnEnd srcPt271(Point(474, 800), 15);\n    connRef271->setSourceEndpoint(srcPt271);\n    ConnEnd dstPt271(Point(404, 850), 15);\n    connRef271->setDestEndpoint(dstPt271);\n    connRef271->setRoutingType((ConnType)2);\n\n    ConnRef *connRef272 = new ConnRef(router, 272);\n    ConnEnd srcPt272(Point(292, 812), 15);\n    connRef272->setSourceEndpoint(srcPt272);\n    ConnEnd dstPt272(Point(292, 862), 15);\n    connRef272->setDestEndpoint(dstPt272);\n    connRef272->setRoutingType((ConnType)2);\n\n    ConnRef *connRef273 = new ConnRef(router, 273);\n    ConnEnd srcPt273(Point(183, 812), 15);\n    connRef273->setSourceEndpoint(srcPt273);\n    ConnEnd dstPt273(Point(183, 862), 15);\n    connRef273->setDestEndpoint(dstPt273);\n    connRef273->setRoutingType((ConnType)2);\n\n    ConnRef *connRef274 = new ConnRef(router, 274);\n    ConnEnd srcPt274(Point(531, 811), 15);\n    connRef274->setSourceEndpoint(srcPt274);\n    ConnEnd dstPt274(Point(531, 861), 15);\n    connRef274->setDestEndpoint(dstPt274);\n    connRef274->setRoutingType((ConnType)2);\n\n    ConnRef *connRef275 = new ConnRef(router, 275);\n    ConnEnd srcPt275(Point(526, 767), 15);\n    connRef275->setSourceEndpoint(srcPt275);\n    ConnEnd dstPt275(Point(456, 767), 15);\n    connRef275->setDestEndpoint(dstPt275);\n    connRef275->setRoutingType((ConnType)2);\n\n    ConnRef *connRef276 = new ConnRef(router, 276);\n    ConnEnd srcPt276(Point(526, 698), 15);\n    connRef276->setSourceEndpoint(srcPt276);\n    ConnEnd dstPt276(Point(456, 698), 15);\n    connRef276->setDestEndpoint(dstPt276);\n    connRef276->setRoutingType((ConnType)2);\n\n    ConnRef *connRef277 = new ConnRef(router, 277);\n    ConnEnd srcPt277(Point(527, 626), 15);\n    connRef277->setSourceEndpoint(srcPt277);\n    ConnEnd dstPt277(Point(457, 626), 15);\n    connRef277->setDestEndpoint(dstPt277);\n    connRef277->setRoutingType((ConnType)2);\n\n    ConnRef *connRef278 = new ConnRef(router, 278);\n    ConnEnd srcPt278(Point(361, 481), 15);\n    connRef278->setSourceEndpoint(srcPt278);\n    ConnEnd dstPt278(Point(431, 481), 15);\n    connRef278->setDestEndpoint(dstPt278);\n    connRef278->setRoutingType((ConnType)2);\n\n    ConnRef *connRef279 = new ConnRef(router, 279);\n    ConnEnd srcPt279(Point(376, 397), 15);\n    connRef279->setSourceEndpoint(srcPt279);\n    ConnEnd dstPt279(Point(376, 447), 15);\n    connRef279->setDestEndpoint(dstPt279);\n    connRef279->setRoutingType((ConnType)2);\n\n    ConnRef *connRef280 = new ConnRef(router, 280);\n    ConnEnd srcPt280(Point(526, 401), 15);\n    connRef280->setSourceEndpoint(srcPt280);\n    ConnEnd dstPt280(Point(456, 401), 15);\n    connRef280->setDestEndpoint(dstPt280);\n    connRef280->setRoutingType((ConnType)2);\n\n    ConnRef *connRef281 = new ConnRef(router, 281);\n    ConnEnd srcPt281(Point(526, 335), 15);\n    connRef281->setSourceEndpoint(srcPt281);\n    ConnEnd dstPt281(Point(456, 335), 15);\n    connRef281->setDestEndpoint(dstPt281);\n    connRef281->setRoutingType((ConnType)2);\n\n    ConnRef *connRef282 = new ConnRef(router, 282);\n    ConnEnd srcPt282(Point(403, 285), 15);\n    connRef282->setSourceEndpoint(srcPt282);\n    ConnEnd dstPt282(Point(403, 335), 15);\n    connRef282->setDestEndpoint(dstPt282);\n    connRef282->setRoutingType((ConnType)2);\n\n    ConnRef *connRef283 = new ConnRef(router, 283);\n    ConnEnd srcPt283(Point(525, 142), 15);\n    connRef283->setSourceEndpoint(srcPt283);\n    ConnEnd dstPt283(Point(525, 192), 15);\n    connRef283->setDestEndpoint(dstPt283);\n    connRef283->setRoutingType((ConnType)2);\n\n    ConnRef *connRef284 = new ConnRef(router, 284);\n    ConnEnd srcPt284(Point(526, 265), 15);\n    connRef284->setSourceEndpoint(srcPt284);\n    ConnEnd dstPt284(Point(456, 265), 15);\n    connRef284->setDestEndpoint(dstPt284);\n    connRef284->setRoutingType((ConnType)2);\n\n    ConnRef *connRef285 = new ConnRef(router, 285);\n    ConnEnd srcPt285(Point(386, 170), 15);\n    connRef285->setSourceEndpoint(srcPt285);\n    ConnEnd dstPt285(Point(456, 170), 15);\n    connRef285->setDestEndpoint(dstPt285);\n    connRef285->setRoutingType((ConnType)2);\n\n    ConnRef *connRef286 = new ConnRef(router, 286);\n    ConnEnd srcPt286(Point(376, 249), 15);\n    connRef286->setSourceEndpoint(srcPt286);\n    ConnEnd dstPt286(Point(376, 299), 15);\n    connRef286->setDestEndpoint(dstPt286);\n    connRef286->setRoutingType((ConnType)2);\n\n    ConnRef *connRef287 = new ConnRef(router, 287);\n    ConnEnd srcPt287(Point(291, 330), 15);\n    connRef287->setSourceEndpoint(srcPt287);\n    ConnEnd dstPt287(Point(221, 280), 15);\n    connRef287->setDestEndpoint(dstPt287);\n    connRef287->setRoutingType((ConnType)2);\n\n    ConnRef *connRef288 = new ConnRef(router, 288);\n    ConnEnd srcPt288(Point(221, 249), 15);\n    connRef288->setSourceEndpoint(srcPt288);\n    ConnEnd dstPt288(Point(221, 299), 15);\n    connRef288->setDestEndpoint(dstPt288);\n    connRef288->setRoutingType((ConnType)2);\n\n    ConnRef *connRef289 = new ConnRef(router, 289);\n    ConnEnd srcPt289(Point(330, 216), 15);\n    connRef289->setSourceEndpoint(srcPt289);\n    ConnEnd dstPt289(Point(330, 266), 15);\n    connRef289->setDestEndpoint(dstPt289);\n    connRef289->setRoutingType((ConnType)2);\n\n    ConnRef *connRef290 = new ConnRef(router, 290);\n    ConnEnd srcPt290(Point(280, 216), 15);\n    connRef290->setSourceEndpoint(srcPt290);\n    ConnEnd dstPt290(Point(280, 266), 15);\n    connRef290->setDestEndpoint(dstPt290);\n    connRef290->setRoutingType((ConnType)2);\n\n    ConnRef *connRef291 = new ConnRef(router, 291);\n    ConnEnd srcPt291(Point(84, 261), 15);\n    connRef291->setSourceEndpoint(srcPt291);\n    ConnEnd dstPt291(Point(154, 261), 15);\n    connRef291->setDestEndpoint(dstPt291);\n    connRef291->setRoutingType((ConnType)2);\n\n    ConnRef *connRef292 = new ConnRef(router, 292);\n    ConnEnd srcPt292(Point(221, 174), 15);\n    connRef292->setSourceEndpoint(srcPt292);\n    ConnEnd dstPt292(Point(221, 224), 15);\n    connRef292->setDestEndpoint(dstPt292);\n    connRef292->setRoutingType((ConnType)2);\n\n    ConnRef *connRef293 = new ConnRef(router, 293);\n    ConnEnd srcPt293(Point(221, 155), 15);\n    connRef293->setSourceEndpoint(srcPt293);\n    ConnEnd dstPt293(Point(221, 205), 15);\n    connRef293->setDestEndpoint(dstPt293);\n    connRef293->setRoutingType((ConnType)2);\n\n    ConnRef *connRef294 = new ConnRef(router, 294);\n    ConnEnd srcPt294(Point(289, 133), 15);\n    connRef294->setSourceEndpoint(srcPt294);\n    ConnEnd dstPt294(Point(289, 183), 15);\n    connRef294->setDestEndpoint(dstPt294);\n    connRef294->setRoutingType((ConnType)2);\n\n    ConnRef *connRef295 = new ConnRef(router, 295);\n    ConnEnd srcPt295(Point(316, 101), 15);\n    connRef295->setSourceEndpoint(srcPt295);\n    ConnEnd dstPt295(Point(316, 151), 15);\n    connRef295->setDestEndpoint(dstPt295);\n    connRef295->setRoutingType((ConnType)2);\n\n    ConnRef *connRef296 = new ConnRef(router, 296);\n    ConnEnd srcPt296(Point(316, 180), 15);\n    connRef296->setSourceEndpoint(srcPt296);\n    ConnEnd dstPt296(Point(316, 130), 15);\n    connRef296->setDestEndpoint(dstPt296);\n    connRef296->setRoutingType((ConnType)2);\n\n    ConnRef *connRef297 = new ConnRef(router, 297);\n    ConnEnd srcPt297(Point(235, 855), 15);\n    connRef297->setSourceEndpoint(srcPt297);\n    ConnEnd dstPt297(Point(235, 905), 15);\n    connRef297->setDestEndpoint(dstPt297);\n    connRef297->setRoutingType((ConnType)2);\n\n    ConnRef *connRef298 = new ConnRef(router, 298);\n    ConnEnd srcPt298(Point(526, 553), 15);\n    connRef298->setSourceEndpoint(srcPt298);\n    ConnEnd dstPt298(Point(456, 553), 15);\n    connRef298->setDestEndpoint(dstPt298);\n    connRef298->setRoutingType((ConnType)2);\n\n    ConnRef *connRef299 = new ConnRef(router, 299);\n    ConnEnd srcPt299(Point(221, 193), 15);\n    connRef299->setSourceEndpoint(srcPt299);\n    ConnEnd dstPt299(Point(221, 243), 15);\n    connRef299->setDestEndpoint(dstPt299);\n    connRef299->setRoutingType((ConnType)2);\n\n    ConnRef *connRef300 = new ConnRef(router, 300);\n    ConnEnd srcPt300(Point(291, 268), 15);\n    connRef300->setSourceEndpoint(srcPt300);\n    ConnEnd dstPt300(Point(221, 318), 15);\n    connRef300->setDestEndpoint(dstPt300);\n    connRef300->setRoutingType((ConnType)2);\n\n    ConnRef *connRef301 = new ConnRef(router, 301);\n    ConnEnd srcPt301(Point(154, 307), 15);\n    connRef301->setSourceEndpoint(srcPt301);\n    ConnEnd dstPt301(Point(154, 357), 15);\n    connRef301->setDestEndpoint(dstPt301);\n    connRef301->setRoutingType((ConnType)2);\n\n    ConnRef *connRef302 = new ConnRef(router, 302);\n    ConnEnd srcPt302(Point(154, 433), 15);\n    connRef302->setSourceEndpoint(srcPt302);\n    ConnEnd dstPt302(Point(154, 383), 15);\n    connRef302->setDestEndpoint(dstPt302);\n    connRef302->setRoutingType((ConnType)2);\n\n    ConnRef *connRef303 = new ConnRef(router, 303);\n    ConnEnd srcPt303(Point(264, 306), 15);\n    connRef303->setSourceEndpoint(srcPt303);\n    ConnEnd dstPt303(Point(264, 356), 15);\n    connRef303->setDestEndpoint(dstPt303);\n    connRef303->setRoutingType((ConnType)2);\n\n    ConnRef *connRef304 = new ConnRef(router, 304);\n    ConnEnd srcPt304(Point(264, 432), 15);\n    connRef304->setSourceEndpoint(srcPt304);\n    ConnEnd dstPt304(Point(264, 382), 15);\n    connRef304->setDestEndpoint(dstPt304);\n    connRef304->setRoutingType((ConnType)2);\n\n    ConnRef *connRef305 = new ConnRef(router, 305);\n    ConnEnd srcPt305(Point(177, 673), 15);\n    connRef305->setSourceEndpoint(srcPt305);\n    ConnEnd dstPt305(Point(177, 723), 15);\n    connRef305->setDestEndpoint(dstPt305);\n    connRef305->setRoutingType((ConnType)2);\n\n    ConnRef *connRef306 = new ConnRef(router, 306);\n    ConnEnd srcPt306(Point(482, 911), 15);\n    connRef306->setSourceEndpoint(srcPt306);\n    ConnEnd dstPt306(Point(412, 961), 15);\n    connRef306->setDestEndpoint(dstPt306);\n    connRef306->setRoutingType((ConnType)2);\n\n    ConnRef *connRef307 = new ConnRef(router, 307);\n    ConnEnd srcPt307(Point(247, 694), 15);\n    connRef307->setSourceEndpoint(srcPt307);\n    ConnEnd dstPt307(Point(177, 744), 15);\n    connRef307->setDestEndpoint(dstPt307);\n    connRef307->setRoutingType((ConnType)2);\n\n    ConnRef *connRef308 = new ConnRef(router, 308);\n    ConnEnd srcPt308(Point(460, 911), 15);\n    connRef308->setSourceEndpoint(srcPt308);\n    ConnEnd dstPt308(Point(460, 961), 15);\n    connRef308->setDestEndpoint(dstPt308);\n    connRef308->setRoutingType((ConnType)2);\n\n    ConnRef *connRef309 = new ConnRef(router, 309);\n    ConnEnd srcPt309(Point(551, 481), 15);\n    connRef309->setSourceEndpoint(srcPt309);\n    ConnEnd dstPt309(Point(481, 481), 15);\n    connRef309->setDestEndpoint(dstPt309);\n    connRef309->setRoutingType((ConnType)2);\n\n    ConnRef *connRef310 = new ConnRef(router, 310);\n    ConnEnd srcPt310(Point(555, 472), 15);\n    connRef310->setSourceEndpoint(srcPt310);\n    ConnEnd dstPt310(Point(555, 522), 15);\n    connRef310->setDestEndpoint(dstPt310);\n    connRef310->setRoutingType((ConnType)2);\n\n    ConnRef *connRef311 = new ConnRef(router, 311);\n    ConnEnd srcPt311(Point(528, 591), 15);\n    connRef311->setSourceEndpoint(srcPt311);\n    ConnEnd dstPt311(Point(528, 541), 15);\n    connRef311->setDestEndpoint(dstPt311);\n    connRef311->setRoutingType((ConnType)2);\n\n    ConnRef *connRef312 = new ConnRef(router, 312);\n    ConnEnd srcPt312(Point(262, 742), 15);\n    connRef312->setSourceEndpoint(srcPt312);\n    ConnEnd dstPt312(Point(262, 792), 15);\n    connRef312->setDestEndpoint(dstPt312);\n    connRef312->setRoutingType((ConnType)2);\n\n    ConnRef *connRef313 = new ConnRef(router, 313);\n    ConnEnd srcPt313(Point(575, 522), 15);\n    connRef313->setSourceEndpoint(srcPt313);\n    ConnEnd dstPt313(Point(505, 522), 15);\n    connRef313->setDestEndpoint(dstPt313);\n    connRef313->setRoutingType((ConnType)2);\n\n    ConnRef *connRef314 = new ConnRef(router, 314);\n    ConnEnd srcPt314(Point(410, 633), 15);\n    connRef314->setSourceEndpoint(srcPt314);\n    ConnEnd dstPt314(Point(410, 583), 15);\n    connRef314->setDestEndpoint(dstPt314);\n    connRef314->setRoutingType((ConnType)2);\n\n    ConnRef *connRef315 = new ConnRef(router, 315);\n    ConnEnd srcPt315(Point(411, 469), 15);\n    connRef315->setSourceEndpoint(srcPt315);\n    ConnEnd dstPt315(Point(411, 519), 15);\n    connRef315->setDestEndpoint(dstPt315);\n    connRef315->setRoutingType((ConnType)2);\n\n    router->processTransaction();\n    router->outputDiagram(\"output/orderassertion\");\n    delete router;\n    return 0;\n};\n"
  },
  {
    "path": "cola/libavoid/tests/orthordering01.cpp",
    "content": "// From bandgap_1_nooverlap_reduced_libavoid-debug.\n#include \"libavoid/libavoid.h\"\nusing namespace Avoid;\nint main(void) {\n    Router *router = new Router(\n            PolyLineRouting | OrthogonalRouting);\n    router->setRoutingPenalty((PenaltyType)0, 50);\n    router->setRoutingPenalty((PenaltyType)1, 0);\n    router->setRoutingPenalty((PenaltyType)2, 400);\n    router->setRoutingPenalty((PenaltyType)3, 4000);\n    router->setRoutingPenalty((PenaltyType)4, 110);\n    router->setRoutingParameter(idealNudgingDistance, 25);\n\n    Polygon poly143407352(4);\n    poly143407352.ps[0] = Point(5810, 4340);\n    poly143407352.ps[1] = Point(5810, 5035);\n    poly143407352.ps[2] = Point(5450, 5035);\n    poly143407352.ps[3] = Point(5450, 4340);\n    new ShapeRef(router, poly143407352, 143407352);\n    \n    Polygon poly124950386(4);\n    poly124950386.ps[0] = Point(4900, 4090);\n    poly124950386.ps[1] = Point(4900, 4785);\n    poly124950386.ps[2] = Point(4540, 4785);\n    poly124950386.ps[3] = Point(4540, 4090);\n    new ShapeRef(router, poly124950386, 124950386);\n    \n    ConnRef *connRef373967044 = new ConnRef(router, 373967044);\n    ConnEnd srcPt373967044(Point(4890, 4250), 8);\n    connRef373967044->setSourceEndpoint(srcPt373967044);\n    ConnEnd dstPt373967044(Point(5460, 4500), 4);\n    connRef373967044->setDestEndpoint(dstPt373967044);\n    connRef373967044->setRoutingType((ConnType)2);\n\n    ConnRef *connRef681881486 = new ConnRef(router, 681881486);\n    ConnEnd srcPt681881486(Point(4890, 4325), 8);\n    connRef681881486->setSourceEndpoint(srcPt681881486);\n    ConnEnd dstPt681881486(Point(5460, 4575), 4);\n    connRef681881486->setDestEndpoint(dstPt681881486);\n    connRef681881486->setRoutingType((ConnType)2);\n\n    ConnRef *connRef829752 = new ConnRef(router, 829752);\n    ConnEnd srcPt829752(Point(4890, 4400), 8);\n    connRef829752->setSourceEndpoint(srcPt829752);\n    ConnEnd dstPt829752(Point(5460, 4650), 4);\n    connRef829752->setDestEndpoint(dstPt829752);\n    connRef829752->setRoutingType((ConnType)2);\n\n    ConnRef *connRef17625739 = new ConnRef(router, 17625739);\n    ConnEnd srcPt17625739(Point(4890, 4475), 8);\n    connRef17625739->setSourceEndpoint(srcPt17625739);\n    ConnEnd dstPt17625739(Point(5460, 4725), 4);\n    connRef17625739->setDestEndpoint(dstPt17625739);\n    connRef17625739->setRoutingType((ConnType)2);\n\n    ConnRef *connRef223864175 = new ConnRef(router, 223864175);\n    ConnEnd srcPt223864175(Point(4890, 4550), 8);\n    connRef223864175->setSourceEndpoint(srcPt223864175);\n    ConnEnd dstPt223864175(Point(5460, 4800), 4);\n    connRef223864175->setDestEndpoint(dstPt223864175);\n    connRef223864175->setRoutingType((ConnType)2);\n\n    ConnRef *connRef98144280 = new ConnRef(router, 98144280);\n    ConnEnd srcPt98144280(Point(4890, 4625), 8);\n    connRef98144280->setSourceEndpoint(srcPt98144280);\n    ConnEnd dstPt98144280(Point(5460, 4875), 4);\n    connRef98144280->setDestEndpoint(dstPt98144280);\n    connRef98144280->setRoutingType((ConnType)2);\n\n    ConnRef *connRef283100856 = new ConnRef(router, 283100856);\n    ConnEnd srcPt283100856(Point(4890, 4700), 8);\n    connRef283100856->setSourceEndpoint(srcPt283100856);\n    ConnEnd dstPt283100856(Point(5460, 4950), 4);\n    connRef283100856->setDestEndpoint(dstPt283100856);\n    connRef283100856->setRoutingType((ConnType)2);\n\n    ConnRef *connRef387080925 = new ConnRef(router, 387080925);\n    ConnEnd srcPt387080925(Point(5460, 4425), 4);\n    connRef387080925->setSourceEndpoint(srcPt387080925);\n    ConnEnd dstPt387080925(Point(4890, 4175), 8);\n    connRef387080925->setDestEndpoint(dstPt387080925);\n    connRef387080925->setRoutingType((ConnType)2);\n\n    router->processTransaction();\n    router->outputDiagram(\"output/orthordering-01\");\n    \n    int crossings = router->existsCrossings();\n\n    delete router;\n    return (crossings > 0) ? 1 : 0;\n};\n\n"
  },
  {
    "path": "cola/libavoid/tests/orthordering02.cpp",
    "content": "// From bandgap_1_overlap_reduced_libavoid-debug.svg.\n#include \"libavoid/libavoid.h\"\nusing namespace Avoid;\nint main(void) {\n    Router *router = new Router(\n            PolyLineRouting | OrthogonalRouting);\n    router->setRoutingPenalty((PenaltyType)0, 50);\n    router->setRoutingPenalty((PenaltyType)1, 0);\n    router->setRoutingPenalty((PenaltyType)2, 50);\n    router->setRoutingPenalty((PenaltyType)3, 4000);\n    router->setRoutingPenalty((PenaltyType)4, 110);\n    router->setRoutingParameter(idealNudgingDistance, 25);\n\n    Polygon poly143407352(4);\n    poly143407352.ps[0] = Point(6035, 4390);\n    poly143407352.ps[1] = Point(6035, 5085);\n    poly143407352.ps[2] = Point(5675, 5085);\n    poly143407352.ps[3] = Point(5675, 4390);\n    new ShapeRef(router, poly143407352, 143407352);\n    \n    Polygon poly124950386(4);\n    poly124950386.ps[0] = Point(4900, 4090);\n    poly124950386.ps[1] = Point(4900, 4785);\n    poly124950386.ps[2] = Point(4540, 4785);\n    poly124950386.ps[3] = Point(4540, 4090);\n    new ShapeRef(router, poly124950386, 124950386);\n    \n    ConnRef *connRef373967044 = new ConnRef(router, 373967044);\n    ConnEnd srcPt373967044(Point(4890, 4250), 8);\n    connRef373967044->setSourceEndpoint(srcPt373967044);\n    ConnEnd dstPt373967044(Point(5685, 4550), 4);\n    connRef373967044->setDestEndpoint(dstPt373967044);\n    connRef373967044->setRoutingType((ConnType)2);\n\n    ConnRef *connRef681881486 = new ConnRef(router, 681881486);\n    ConnEnd srcPt681881486(Point(4890, 4325), 8);\n    connRef681881486->setSourceEndpoint(srcPt681881486);\n    ConnEnd dstPt681881486(Point(5685, 4625), 4);\n    connRef681881486->setDestEndpoint(dstPt681881486);\n    connRef681881486->setRoutingType((ConnType)2);\n\n    ConnRef *connRef829752 = new ConnRef(router, 829752);\n    ConnEnd srcPt829752(Point(4890, 4400), 8);\n    connRef829752->setSourceEndpoint(srcPt829752);\n    ConnEnd dstPt829752(Point(5685, 4700), 4);\n    connRef829752->setDestEndpoint(dstPt829752);\n    connRef829752->setRoutingType((ConnType)2);\n\n    ConnRef *connRef17625739 = new ConnRef(router, 17625739);\n    ConnEnd srcPt17625739(Point(4890, 4475), 8);\n    connRef17625739->setSourceEndpoint(srcPt17625739);\n    ConnEnd dstPt17625739(Point(5685, 4775), 4);\n    connRef17625739->setDestEndpoint(dstPt17625739);\n    connRef17625739->setRoutingType((ConnType)2);\n\n    ConnRef *connRef223864175 = new ConnRef(router, 223864175);\n    ConnEnd srcPt223864175(Point(4890, 4550), 8);\n    connRef223864175->setSourceEndpoint(srcPt223864175);\n    ConnEnd dstPt223864175(Point(5685, 4850), 4);\n    connRef223864175->setDestEndpoint(dstPt223864175);\n    connRef223864175->setRoutingType((ConnType)2);\n\n    ConnRef *connRef98144280 = new ConnRef(router, 98144280);\n    ConnEnd srcPt98144280(Point(4890, 4625), 8);\n    connRef98144280->setSourceEndpoint(srcPt98144280);\n    ConnEnd dstPt98144280(Point(5685, 4925), 4);\n    connRef98144280->setDestEndpoint(dstPt98144280);\n    connRef98144280->setRoutingType((ConnType)2);\n\n    ConnRef *connRef283100856 = new ConnRef(router, 283100856);\n    ConnEnd srcPt283100856(Point(4890, 4700), 8);\n    connRef283100856->setSourceEndpoint(srcPt283100856);\n    ConnEnd dstPt283100856(Point(5685, 5000), 4);\n    connRef283100856->setDestEndpoint(dstPt283100856);\n    connRef283100856->setRoutingType((ConnType)2);\n\n    ConnRef *connRef387080925 = new ConnRef(router, 387080925);\n    ConnEnd srcPt387080925(Point(5685, 4475), 4);\n    connRef387080925->setSourceEndpoint(srcPt387080925);\n    ConnEnd dstPt387080925(Point(4890, 4175), 8);\n    connRef387080925->setDestEndpoint(dstPt387080925);\n    connRef387080925->setRoutingType((ConnType)2);\n\n    router->processTransaction();\n    router->outputDiagram(\"output/orthordering-02\");\n    \n    int crossings = router->existsCrossings();\n\n    delete router;\n    return (crossings > 0) ? 1 : 0;\n};\n\n"
  },
  {
    "path": "cola/libavoid/tests/output/README.txt",
    "content": "This directory is used to for output debug svg files from the testcases.\n"
  },
  {
    "path": "cola/libavoid/tests/overlappingRects.cpp",
    "content": "#include \"libavoid/libavoid.h\"\nusing namespace Avoid;\nint main(void) {\n    Router *router = new Router(\n            PolyLineRouting | OrthogonalRouting);\n    router->setRoutingPenalty((PenaltyType)0, 50);\n    router->setRoutingPenalty((PenaltyType)1, 0);\n    router->setRoutingPenalty((PenaltyType)2, 0);\n    router->setRoutingPenalty((PenaltyType)3, 4000);\n    router->setRoutingPenalty((PenaltyType)4, 0);\n    router->setRoutingOption(nudgeOrthogonalSegmentsConnectedToShapes, true);\n\n    Polygon poly57(4);\n    poly57.ps[0] = Point(-66.016, 38.6079);\n    poly57.ps[1] = Point(-66.016, 58.6079);\n    poly57.ps[2] = Point(-86.016, 58.6079);\n    poly57.ps[3] = Point(-86.016, 38.6079);\n    new ShapeRef(router, poly57, 57);\n    \n    Polygon poly114(4);\n    poly114.ps[0] = Point(886.746, 359.608);\n    poly114.ps[1] = Point(886.746, 399.608);\n    poly114.ps[2] = Point(830.746, 399.608);\n    poly114.ps[3] = Point(830.746, 359.608);\n    new ShapeRef(router, poly114, 114);\n    \n    Polygon poly126(4);\n    poly126.ps[0] = Point(510.984, 767.608);\n    poly126.ps[1] = Point(510.984, 807.608);\n    poly126.ps[2] = Point(454.984, 807.608);\n    poly126.ps[3] = Point(454.984, 767.608);\n    new ShapeRef(router, poly126, 126);\n    \n    Polygon poly142(4);\n    poly142.ps[0] = Point(149.984, 62.6079);\n    poly142.ps[1] = Point(149.984, 102.608);\n    poly142.ps[2] = Point(93.984, 102.608);\n    poly142.ps[3] = Point(93.984, 62.6079);\n    new ShapeRef(router, poly142, 142);\n    \n    Polygon poly115(4);\n    poly115.ps[0] = Point(539.534, 166.608);\n    poly115.ps[1] = Point(539.534, 206.608);\n    poly115.ps[2] = Point(483.534, 206.608);\n    poly115.ps[3] = Point(483.534, 166.608);\n    new ShapeRef(router, poly115, 115);\n    \n    Polygon poly107(4);\n    poly107.ps[0] = Point(484.984, 500.608);\n    poly107.ps[1] = Point(484.984, 540.608);\n    poly107.ps[2] = Point(444.984, 540.608);\n    poly107.ps[3] = Point(444.984, 500.608);\n    new ShapeRef(router, poly107, 107);\n    \n    Polygon poly164(4);\n    poly164.ps[0] = Point(388.984, 1086.01);\n    poly164.ps[1] = Point(388.984, 1126.01);\n    poly164.ps[2] = Point(328.984, 1126.01);\n    poly164.ps[3] = Point(328.984, 1086.01);\n    new ShapeRef(router, poly164, 164);\n    \n    Polygon poly40(4);\n    poly40.ps[0] = Point(131.984, -13.3921);\n    poly40.ps[1] = Point(131.984, 6.60786);\n    poly40.ps[2] = Point(111.984, 6.60786);\n    poly40.ps[3] = Point(111.984, -13.3921);\n    new ShapeRef(router, poly40, 40);\n    \n    Polygon poly161(4);\n    poly161.ps[0] = Point(785.5, 24.6079);\n    poly161.ps[1] = Point(785.5, 64.6079);\n    poly161.ps[2] = Point(725.5, 64.6079);\n    poly161.ps[3] = Point(725.5, 24.6079);\n    new ShapeRef(router, poly161, 161);\n    \n    Polygon poly82(4);\n    poly82.ps[0] = Point(813.984, 1031.01);\n    poly82.ps[1] = Point(813.984, 1071.01);\n    poly82.ps[2] = Point(773.984, 1071.01);\n    poly82.ps[3] = Point(773.984, 1031.01);\n    new ShapeRef(router, poly82, 82);\n    \n    Polygon poly146(4);\n    poly146.ps[0] = Point(530.584, -65.3921);\n    poly146.ps[1] = Point(530.584, -25.3921);\n    poly146.ps[2] = Point(474.584, -25.3921);\n    poly146.ps[3] = Point(474.584, -65.3921);\n    new ShapeRef(router, poly146, 146);\n    \n    Polygon poly151(4);\n    poly151.ps[0] = Point(97.984, -229.392);\n    poly151.ps[1] = Point(97.984, -189.392);\n    poly151.ps[2] = Point(41.984, -189.392);\n    poly151.ps[3] = Point(41.984, -229.392);\n    new ShapeRef(router, poly151, 151);\n    \n    Polygon poly23(4);\n    poly23.ps[0] = Point(691.984, 725.608);\n    poly23.ps[1] = Point(691.984, 745.608);\n    poly23.ps[2] = Point(671.984, 745.608);\n    poly23.ps[3] = Point(671.984, 725.608);\n    new ShapeRef(router, poly23, 23);\n    \n    Polygon poly121(4);\n    poly121.ps[0] = Point(709.984, 1063.01);\n    poly121.ps[1] = Point(709.984, 1103.01);\n    poly121.ps[2] = Point(653.984, 1103.01);\n    poly121.ps[3] = Point(653.984, 1063.01);\n    new ShapeRef(router, poly121, 121);\n    \n    Polygon poly68(4);\n    poly68.ps[0] = Point(460.584, 164.608);\n    poly68.ps[1] = Point(460.584, 204.608);\n    poly68.ps[2] = Point(420.584, 204.608);\n    poly68.ps[3] = Point(420.584, 164.608);\n    new ShapeRef(router, poly68, 68);\n    \n    Polygon poly53(4);\n    poly53.ps[0] = Point(450.584, -424.392);\n    poly53.ps[1] = Point(450.584, -404.392);\n    poly53.ps[2] = Point(430.584, -404.392);\n    poly53.ps[3] = Point(430.584, -424.392);\n    new ShapeRef(router, poly53, 53);\n    \n    Polygon poly29(4);\n    poly29.ps[0] = Point(808.746, 229.608);\n    poly29.ps[1] = Point(808.746, 249.608);\n    poly29.ps[2] = Point(788.746, 249.608);\n    poly29.ps[3] = Point(788.746, 229.608);\n    new ShapeRef(router, poly29, 29);\n    \n    Polygon poly88(4);\n    poly88.ps[0] = Point(1085.98, 883.608);\n    poly88.ps[1] = Point(1085.98, 923.608);\n    poly88.ps[2] = Point(1045.98, 923.608);\n    poly88.ps[3] = Point(1045.98, 883.608);\n    new ShapeRef(router, poly88, 88);\n    \n    Polygon poly141(4);\n    poly141.ps[0] = Point(390.984, 62.6079);\n    poly141.ps[1] = Point(390.984, 102.608);\n    poly141.ps[2] = Point(334.984, 102.608);\n    poly141.ps[3] = Point(334.984, 62.6079);\n    new ShapeRef(router, poly141, 141);\n    \n    Polygon poly118(4);\n    poly118.ps[0] = Point(1155.98, 739.608);\n    poly118.ps[1] = Point(1155.98, 779.608);\n    poly118.ps[2] = Point(1099.98, 779.608);\n    poly118.ps[3] = Point(1099.98, 739.608);\n    new ShapeRef(router, poly118, 118);\n    \n    Polygon poly31(4);\n    poly31.ps[0] = Point(1.98401, 363.608);\n    poly31.ps[1] = Point(1.98401, 383.608);\n    poly31.ps[2] = Point(-18.016, 383.608);\n    poly31.ps[3] = Point(-18.016, 363.608);\n    new ShapeRef(router, poly31, 31);\n    \n    Polygon poly137(4);\n    poly137.ps[0] = Point(408.584, 166.608);\n    poly137.ps[1] = Point(408.584, 206.608);\n    poly137.ps[2] = Point(352.584, 206.608);\n    poly137.ps[3] = Point(352.584, 166.608);\n    new ShapeRef(router, poly137, 137);\n    \n    Polygon poly159(4);\n    poly159.ps[0] = Point(622.984, 330.5);\n    poly159.ps[1] = Point(622.984, 390.5);\n    poly159.ps[2] = Point(582.984, 390.5);\n    poly159.ps[3] = Point(582.984, 330.5);\n    new ShapeRef(router, poly159, 159);\n    \n    Polygon poly169(4);\n    poly169.ps[0] = Point(1089.98, 243.608);\n    poly169.ps[1] = Point(1089.98, 303.608);\n    poly169.ps[2] = Point(1049.98, 303.608);\n    poly169.ps[3] = Point(1049.98, 243.608);\n    new ShapeRef(router, poly169, 169);\n    \n    Polygon poly13(4);\n    poly13.ps[0] = Point(763.984, 1145.01);\n    poly13.ps[1] = Point(763.984, 1165.01);\n    poly13.ps[2] = Point(743.984, 1165.01);\n    poly13.ps[3] = Point(743.984, 1145.01);\n    new ShapeRef(router, poly13, 13);\n    \n    Polygon poly33(4);\n    poly33.ps[0] = Point(327.084, 309.608);\n    poly33.ps[1] = Point(327.084, 329.608);\n    poly33.ps[2] = Point(307.084, 329.608);\n    poly33.ps[3] = Point(307.084, 309.608);\n    new ShapeRef(router, poly33, 33);\n    \n    Polygon poly60(4);\n    poly60.ps[0] = Point(11.984, -23.3921);\n    poly60.ps[1] = Point(11.984, 16.6079);\n    poly60.ps[2] = Point(-28.016, 16.6079);\n    poly60.ps[3] = Point(-28.016, -23.3921);\n    new ShapeRef(router, poly60, 60);\n    \n    Polygon poly145(4);\n    poly145.ps[0] = Point(149.984, -73.3921);\n    poly145.ps[1] = Point(149.984, -33.3921);\n    poly145.ps[2] = Point(93.984, -33.3921);\n    poly145.ps[3] = Point(93.984, -73.3921);\n    new ShapeRef(router, poly145, 145);\n    \n    Polygon poly134(4);\n    poly134.ps[0] = Point(888.746, 219.608);\n    poly134.ps[1] = Point(888.746, 259.608);\n    poly134.ps[2] = Point(832.746, 259.608);\n    poly134.ps[3] = Point(832.746, 219.608);\n    new ShapeRef(router, poly134, 134);\n    \n    Polygon poly160(4);\n    poly160.ps[0] = Point(785.5, -27.3921);\n    poly160.ps[1] = Point(785.5, 12.6079);\n    poly160.ps[2] = Point(725.5, 12.6079);\n    poly160.ps[3] = Point(725.5, -27.3921);\n    new ShapeRef(router, poly160, 160);\n    \n    Polygon poly117(4);\n    poly117.ps[0] = Point(646.484, 1203.01);\n    poly117.ps[1] = Point(646.484, 1243.01);\n    poly117.ps[2] = Point(590.484, 1243.01);\n    poly117.ps[3] = Point(590.484, 1203.01);\n    new ShapeRef(router, poly117, 117);\n    \n    Polygon poly170(4);\n    poly170.ps[0] = Point(322.984, 536.5);\n    poly170.ps[1] = Point(322.984, 596.5);\n    poly170.ps[2] = Point(282.984, 596.5);\n    poly170.ps[3] = Point(282.984, 536.5);\n    new ShapeRef(router, poly170, 170);\n    \n    Polygon poly36(4);\n    poly36.ps[0] = Point(372.984, 122.608);\n    poly36.ps[1] = Point(372.984, 142.608);\n    poly36.ps[2] = Point(352.984, 142.608);\n    poly36.ps[3] = Point(352.984, 122.608);\n    new ShapeRef(router, poly36, 36);\n    \n    Polygon poly19(4);\n    poly19.ps[0] = Point(803.984, 869.608);\n    poly19.ps[1] = Point(803.984, 889.608);\n    poly19.ps[2] = Point(783.984, 889.608);\n    poly19.ps[3] = Point(783.984, 869.608);\n    new ShapeRef(router, poly19, 19);\n    \n    Polygon poly116(4);\n    poly116.ps[0] = Point(456.984, 1213.01);\n    poly116.ps[1] = Point(456.984, 1253.01);\n    poly116.ps[2] = Point(400.984, 1253.01);\n    poly116.ps[3] = Point(400.984, 1213.01);\n    new ShapeRef(router, poly116, 116);\n    \n    Polygon poly52(4);\n    poly52.ps[0] = Point(450.584, -271.392);\n    poly52.ps[1] = Point(450.584, -251.392);\n    poly52.ps[2] = Point(430.584, -251.392);\n    poly52.ps[3] = Point(430.584, -271.392);\n    new ShapeRef(router, poly52, 52);\n    \n    Polygon poly99(4);\n    poly99.ps[0] = Point(307.984, -334.392);\n    poly99.ps[1] = Point(307.984, -294.392);\n    poly99.ps[2] = Point(267.984, -294.392);\n    poly99.ps[3] = Point(267.984, -334.392);\n    new ShapeRef(router, poly99, 99);\n    \n    Polygon poly154(4);\n    poly154.ps[0] = Point(570.984, 450.608);\n    poly154.ps[1] = Point(570.984, 490.608);\n    poly154.ps[2] = Point(514.984, 490.608);\n    poly154.ps[3] = Point(514.984, 450.608);\n    new ShapeRef(router, poly154, 154);\n    \n    Polygon poly150(4);\n    poly150.ps[0] = Point(377.984, -281.392);\n    poly150.ps[1] = Point(377.984, -241.392);\n    poly150.ps[2] = Point(321.984, -241.392);\n    poly150.ps[3] = Point(321.984, -281.392);\n    new ShapeRef(router, poly150, 150);\n    \n    Polygon poly153(4);\n    poly153.ps[0] = Point(767.984, 450.608);\n    poly153.ps[1] = Point(767.984, 490.608);\n    poly153.ps[2] = Point(711.984, 490.608);\n    poly153.ps[3] = Point(711.984, 450.608);\n    new ShapeRef(router, poly153, 153);\n    \n    Polygon poly104(4);\n    poly104.ps[0] = Point(965.984, 164.608);\n    poly104.ps[1] = Point(965.984, 204.608);\n    poly104.ps[2] = Point(925.984, 204.608);\n    poly104.ps[3] = Point(925.984, 164.608);\n    new ShapeRef(router, poly104, 104);\n    \n    Polygon poly75(4);\n    poly75.ps[0] = Point(442.984, 663.608);\n    poly75.ps[1] = Point(442.984, 703.608);\n    poly75.ps[2] = Point(402.984, 703.608);\n    poly75.ps[3] = Point(402.984, 663.608);\n    new ShapeRef(router, poly75, 75);\n    \n    Polygon poly51(4);\n    poly51.ps[0] = Point(450.584, -55.3921);\n    poly51.ps[1] = Point(450.584, -35.3921);\n    poly51.ps[2] = Point(430.584, -35.3921);\n    poly51.ps[3] = Point(430.584, -55.3921);\n    new ShapeRef(router, poly51, 51);\n    \n    Polygon poly112(4);\n    poly112.ps[0] = Point(539.534, -229.392);\n    poly112.ps[1] = Point(539.534, -189.392);\n    poly112.ps[2] = Point(483.534, -189.392);\n    poly112.ps[3] = Point(483.534, -229.392);\n    new ShapeRef(router, poly112, 112);\n    \n    Polygon poly61(4);\n    poly61.ps[0] = Point(337.084, 425.608);\n    poly61.ps[1] = Point(337.084, 465.608);\n    poly61.ps[2] = Point(297.084, 465.608);\n    poly61.ps[3] = Point(297.084, 425.608);\n    new ShapeRef(router, poly61, 61);\n    \n    Polygon poly158(4);\n    poly158.ps[0] = Point(285.084, 425.608);\n    poly158.ps[1] = Point(285.084, 465.608);\n    poly158.ps[2] = Point(225.084, 465.608);\n    poly158.ps[3] = Point(225.084, 425.608);\n    new ShapeRef(router, poly158, 158);\n    \n    Polygon poly162(4);\n    poly162.ps[0] = Point(785.5, 76.6079);\n    poly162.ps[1] = Point(785.5, 116.608);\n    poly162.ps[2] = Point(725.5, 116.608);\n    poly162.ps[3] = Point(725.5, 76.6079);\n    new ShapeRef(router, poly162, 162);\n    \n    Polygon poly103(4);\n    poly103.ps[0] = Point(965.984, 315.608);\n    poly103.ps[1] = Point(965.984, 355.608);\n    poly103.ps[2] = Point(925.984, 355.608);\n    poly103.ps[3] = Point(925.984, 315.608);\n    new ShapeRef(router, poly103, 103);\n    \n    Polygon poly90(4);\n    poly90.ps[0] = Point(813.984, 817.608);\n    poly90.ps[1] = Point(813.984, 857.608);\n    poly90.ps[2] = Point(773.984, 857.608);\n    poly90.ps[3] = Point(773.984, 817.608);\n    new ShapeRef(router, poly90, 90);\n    \n    Polygon poly70(4);\n    poly70.ps[0] = Point(340.584, 164.608);\n    poly70.ps[1] = Point(340.584, 204.608);\n    poly70.ps[2] = Point(300.584, 204.608);\n    poly70.ps[3] = Point(300.584, 164.608);\n    new ShapeRef(router, poly70, 70);\n    \n    Polygon poly50(4);\n    poly50.ps[0] = Point(886.746, 307.608);\n    poly50.ps[1] = Point(886.746, 347.608);\n    poly50.ps[2] = Point(830.746, 347.608);\n    poly50.ps[3] = Point(830.746, 307.608);\n    new ShapeRef(router, poly50, 50);\n    \n    Polygon poly49(4);\n    poly49.ps[0] = Point(1115.98, 1187.01);\n    poly49.ps[1] = Point(1115.98, 1247.01);\n    poly49.ps[2] = Point(825.984, 1247.01);\n    poly49.ps[3] = Point(825.984, 1187.01);\n    new ShapeRef(router, poly49, 49);\n    \n    Polygon poly37(4);\n    poly37.ps[0] = Point(131.984, 122.608);\n    poly37.ps[1] = Point(131.984, 142.608);\n    poly37.ps[2] = Point(111.984, 142.608);\n    poly37.ps[3] = Point(111.984, 122.608);\n    new ShapeRef(router, poly37, 37);\n    \n    Polygon poly120(4);\n    poly120.ps[0] = Point(843.984, 1135.01);\n    poly120.ps[1] = Point(843.984, 1175.01);\n    poly120.ps[2] = Point(787.984, 1175.01);\n    poly120.ps[3] = Point(787.984, 1135.01);\n    new ShapeRef(router, poly120, 120);\n    \n    Polygon poly28(4);\n    poly28.ps[0] = Point(372.984, 673.608);\n    poly28.ps[1] = Point(372.984, 693.608);\n    poly28.ps[2] = Point(352.984, 693.608);\n    poly28.ps[3] = Point(352.984, 673.608);\n    new ShapeRef(router, poly28, 28);\n    \n    Polygon poly136(4);\n    poly136.ps[0] = Point(81.984, 353.608);\n    poly136.ps[1] = Point(81.984, 393.608);\n    poly136.ps[2] = Point(25.984, 393.608);\n    poly136.ps[3] = Point(25.984, 353.608);\n    new ShapeRef(router, poly136, 136);\n    \n    Polygon poly12(4);\n    poly12.ps[0] = Point(933.984, 939.008);\n    poly12.ps[1] = Point(933.984, 959.008);\n    poly12.ps[2] = Point(913.984, 959.008);\n    poly12.ps[3] = Point(913.984, 939.008);\n    new ShapeRef(router, poly12, 12);\n    \n    Polygon poly131(4);\n    poly131.ps[0] = Point(390.984, 715.608);\n    poly131.ps[1] = Point(390.984, 755.608);\n    poly131.ps[2] = Point(334.984, 755.608);\n    poly131.ps[3] = Point(334.984, 715.608);\n    new ShapeRef(router, poly131, 131);\n    \n    Polygon poly78(4);\n    poly78.ps[0] = Point(302.984, 1031.01);\n    poly78.ps[1] = Point(302.984, 1071.01);\n    poly78.ps[2] = Point(262.984, 1071.01);\n    poly78.ps[3] = Point(262.984, 1031.01);\n    new ShapeRef(router, poly78, 78);\n    \n    Polygon poly3(4);\n    poly3.ps[0] = Point(944.984, 516.108);\n    poly3.ps[1] = Point(944.984, 536.108);\n    poly3.ps[2] = Point(924.984, 536.108);\n    poly3.ps[3] = Point(924.984, 516.108);\n    new ShapeRef(router, poly3, 3);\n    \n    Polygon poly17(4);\n    poly17.ps[0] = Point(691.984, 939.008);\n    poly17.ps[1] = Point(691.984, 959.008);\n    poly17.ps[2] = Point(671.984, 959.008);\n    poly17.ps[3] = Point(671.984, 939.008);\n    new ShapeRef(router, poly17, 17);\n    \n    Polygon poly66(4);\n    poly66.ps[0] = Point(11.984, 229.608);\n    poly66.ps[1] = Point(11.984, 269.608);\n    poly66.ps[2] = Point(-28.016, 269.608);\n    poly66.ps[3] = Point(-28.016, 229.608);\n    new ShapeRef(router, poly66, 66);\n    \n    Polygon poly15(4);\n    poly15.ps[0] = Point(691.984, 1031.01);\n    poly15.ps[1] = Point(691.984, 1051.01);\n    poly15.ps[2] = Point(671.984, 1051.01);\n    poly15.ps[3] = Point(671.984, 1031.01);\n    new ShapeRef(router, poly15, 15);\n    \n    Polygon poly4(4);\n    poly4.ps[0] = Point(868.746, 419.608);\n    poly4.ps[1] = Point(868.746, 439.608);\n    poly4.ps[2] = Point(848.746, 439.608);\n    poly4.ps[3] = Point(848.746, 419.608);\n    new ShapeRef(router, poly4, 4);\n    \n    Polygon poly22(4);\n    poly22.ps[0] = Point(803.984, 725.608);\n    poly22.ps[1] = Point(803.984, 745.608);\n    poly22.ps[2] = Point(783.984, 745.608);\n    poly22.ps[3] = Point(783.984, 725.608);\n    new ShapeRef(router, poly22, 22);\n    \n    Polygon poly119(4);\n    poly119.ps[0] = Point(951.984, 879.008);\n    poly119.ps[1] = Point(951.984, 919.008);\n    poly119.ps[2] = Point(895.984, 919.008);\n    poly119.ps[3] = Point(895.984, 879.008);\n    new ShapeRef(router, poly119, 119);\n    \n    Polygon poly130(4);\n    poly130.ps[0] = Point(512.984, 715.608);\n    poly130.ps[1] = Point(512.984, 755.608);\n    poly130.ps[2] = Point(456.984, 755.608);\n    poly130.ps[3] = Point(456.984, 715.608);\n    new ShapeRef(router, poly130, 130);\n    \n    Polygon poly138(4);\n    poly138.ps[0] = Point(407.084, 299.608);\n    poly138.ps[1] = Point(407.084, 339.608);\n    poly138.ps[2] = Point(351.084, 339.608);\n    poly138.ps[3] = Point(351.084, 299.608);\n    new ShapeRef(router, poly138, 138);\n    \n    Polygon poly97(4);\n    poly97.ps[0] = Point(460.584, -334.392);\n    poly97.ps[1] = Point(460.584, -294.392);\n    poly97.ps[2] = Point(420.584, -294.392);\n    poly97.ps[3] = Point(420.584, -334.392);\n    new ShapeRef(router, poly97, 97);\n    \n    Polygon poly156(4);\n    poly156.ps[0] = Point(190.984, 624.465);\n    poly156.ps[1] = Point(190.984, 664.465);\n    poly156.ps[2] = Point(134.984, 664.465);\n    poly156.ps[3] = Point(134.984, 624.465);\n    new ShapeRef(router, poly156, 156);\n    \n    Polygon poly11(4);\n    poly11.ps[0] = Point(1075.98, 749.608);\n    poly11.ps[1] = Point(1075.98, 769.608);\n    poly11.ps[2] = Point(1055.98, 769.608);\n    poly11.ps[3] = Point(1055.98, 749.608);\n    new ShapeRef(router, poly11, 11);\n    \n    Polygon poly152(4);\n    poly152.ps[0] = Point(13.984, 28.6079);\n    poly152.ps[1] = Point(13.984, 68.6079);\n    poly152.ps[2] = Point(-42.016, 68.6079);\n    poly152.ps[3] = Point(-42.016, 28.6079);\n    new ShapeRef(router, poly152, 152);\n    \n    Polygon poly81(4);\n    poly81.ps[0] = Point(122.984, 817.608);\n    poly81.ps[1] = Point(122.984, 857.608);\n    poly81.ps[2] = Point(82.984, 857.608);\n    poly81.ps[3] = Point(82.984, 817.608);\n    new ShapeRef(router, poly81, 81);\n    \n    Polygon poly109(4);\n    poly109.ps[0] = Point(372.984, -313.392);\n    poly109.ps[1] = Point(372.984, -293.392);\n    poly109.ps[2] = Point(352.984, -293.392);\n    poly109.ps[3] = Point(352.984, -313.392);\n    new ShapeRef(router, poly109, 109);\n    \n    Polygon poly101(4);\n    poly101.ps[0] = Point(-81.016, -179.392);\n    poly101.ps[1] = Point(-81.016, -139.392);\n    poly101.ps[2] = Point(-121.016, -139.392);\n    poly101.ps[3] = Point(-121.016, -179.392);\n    new ShapeRef(router, poly101, 101);\n    \n    Polygon poly64(4);\n    poly64.ps[0] = Point(307.984, 112.608);\n    poly64.ps[1] = Point(307.984, 152.608);\n    poly64.ps[2] = Point(267.984, 152.608);\n    poly64.ps[3] = Point(267.984, 112.608);\n    new ShapeRef(router, poly64, 64);\n    \n    Polygon poly92(4);\n    poly92.ps[0] = Point(813.984, 929.008);\n    poly92.ps[1] = Point(813.984, 969.008);\n    poly92.ps[2] = Point(773.984, 969.008);\n    poly92.ps[3] = Point(773.984, 929.008);\n    new ShapeRef(router, poly92, 92);\n    \n    Polygon poly27(4);\n    poly27.ps[0] = Point(542.984, 680.465);\n    poly27.ps[1] = Point(542.984, 700.465);\n    poly27.ps[2] = Point(522.984, 700.465);\n    poly27.ps[3] = Point(522.984, 680.465);\n    new ShapeRef(router, poly27, 27);\n    \n    Polygon poly9(4);\n    poly9.ps[0] = Point(438.984, 1273.01);\n    poly9.ps[1] = Point(438.984, 1293.01);\n    poly9.ps[2] = Point(418.984, 1293.01);\n    poly9.ps[3] = Point(418.984, 1273.01);\n    new ShapeRef(router, poly9, 9);\n    \n    Polygon poly171(4);\n    poly171.ps[0] = Point(885.984, 1187.01);\n    poly171.ps[1] = Point(885.984, 1227.01);\n    poly171.ps[2] = Point(825.984, 1227.01);\n    poly171.ps[3] = Point(825.984, 1187.01);\n    new ShapeRef(router, poly171, 171);\n    \n    Polygon poly26(4);\n    poly26.ps[0] = Point(852, 549);\n    poly26.ps[1] = Point(852, 589);\n    poly26.ps[2] = Point(796, 589);\n    poly26.ps[3] = Point(796, 549);\n    new ShapeRef(router, poly26, 26);\n    \n    Polygon poly95(4);\n    poly95.ps[0] = Point(818.746, 315.608);\n    poly95.ps[1] = Point(818.746, 355.608);\n    poly95.ps[2] = Point(778.746, 355.608);\n    poly95.ps[3] = Point(778.746, 315.608);\n    new ShapeRef(router, poly95, 95);\n    \n    Polygon poly72(4);\n    poly72.ps[0] = Point(813.984, 663.608);\n    poly72.ps[1] = Point(813.984, 703.608);\n    poly72.ps[2] = Point(773.984, 703.608);\n    poly72.ps[3] = Point(773.984, 663.608);\n    new ShapeRef(router, poly72, 72);\n    \n    Polygon poly16(4);\n    poly16.ps[0] = Point(561.984, 981.008);\n    poly16.ps[1] = Point(561.984, 1001.01);\n    poly16.ps[2] = Point(541.984, 1001.01);\n    poly16.ps[3] = Point(541.984, 981.008);\n    new ShapeRef(router, poly16, 16);\n    \n    Polygon poly35(4);\n    poly35.ps[0] = Point(521.534, 122.608);\n    poly35.ps[1] = Point(521.534, 142.608);\n    poly35.ps[2] = Point(501.534, 142.608);\n    poly35.ps[3] = Point(501.534, 122.608);\n    new ShapeRef(router, poly35, 35);\n    \n    Polygon poly34(4);\n    poly34.ps[0] = Point(1.98401, 197.608);\n    poly34.ps[1] = Point(1.98401, 217.608);\n    poly34.ps[2] = Point(-18.016, 217.608);\n    poly34.ps[3] = Point(-18.016, 197.608);\n    new ShapeRef(router, poly34, 34);\n    \n    Polygon poly86(4);\n    poly86.ps[0] = Point(571.984, 1031.01);\n    poly86.ps[1] = Point(571.984, 1071.01);\n    poly86.ps[2] = Point(531.984, 1071.01);\n    poly86.ps[3] = Point(531.984, 1031.01);\n    new ShapeRef(router, poly86, 86);\n    \n    Polygon poly140(4);\n    poly140.ps[0] = Point(539.534, 62.6079);\n    poly140.ps[1] = Point(539.534, 102.608);\n    poly140.ps[2] = Point(483.534, 102.608);\n    poly140.ps[3] = Point(483.534, 62.6079);\n    new ShapeRef(router, poly140, 140);\n    \n    Polygon poly69(4);\n    poly69.ps[0] = Point(591.534, 164.608);\n    poly69.ps[1] = Point(591.534, 204.608);\n    poly69.ps[2] = Point(551.534, 204.608);\n    poly69.ps[3] = Point(551.534, 164.608);\n    new ShapeRef(router, poly69, 69);\n    \n    Polygon poly48(4);\n    poly48.ps[0] = Point(322.984, 477.608);\n    poly48.ps[1] = Point(322.984, 651.608);\n    poly48.ps[2] = Point(202.984, 651.608);\n    poly48.ps[3] = Point(202.984, 477.608);\n    new ShapeRef(router, poly48, 48);\n    \n    Polygon poly100(4);\n    poly100.ps[0] = Point(307.984, -179.392);\n    poly100.ps[1] = Point(307.984, -139.392);\n    poly100.ps[2] = Point(267.984, -139.392);\n    poly100.ps[3] = Point(267.984, -179.392);\n    new ShapeRef(router, poly100, 100);\n    \n    Polygon poly54(4);\n    poly54.ps[0] = Point(372.984, -405.392);\n    poly54.ps[1] = Point(372.984, -385.392);\n    poly54.ps[2] = Point(352.984, -385.392);\n    poly54.ps[3] = Point(352.984, -405.392);\n    new ShapeRef(router, poly54, 54);\n    \n    Polygon poly113(4);\n    poly113.ps[0] = Point(1024.98, 506.108);\n    poly113.ps[1] = Point(1024.98, 546.108);\n    poly113.ps[2] = Point(968.984, 546.108);\n    poly113.ps[3] = Point(968.984, 506.108);\n    new ShapeRef(router, poly113, 113);\n    \n    Polygon poly155(4);\n    poly155.ps[0] = Point(390.984, -373.392);\n    poly155.ps[1] = Point(390.984, -333.392);\n    poly155.ps[2] = Point(334.984, -333.392);\n    poly155.ps[3] = Point(334.984, -373.392);\n    new ShapeRef(router, poly155, 155);\n    \n    Polygon poly87(4);\n    poly87.ps[0] = Point(376.184, 939.758);\n    poly87.ps[1] = Point(376.184, 979.758);\n    poly87.ps[2] = Point(336.184, 979.758);\n    poly87.ps[3] = Point(336.184, 939.758);\n    new ShapeRef(router, poly87, 87);\n    \n    Polygon poly63(4);\n    poly63.ps[0] = Point(460.584, 112.608);\n    poly63.ps[1] = Point(460.584, 152.608);\n    poly63.ps[2] = Point(420.584, 152.608);\n    poly63.ps[3] = Point(420.584, 112.608);\n    new ShapeRef(router, poly63, 63);\n    \n    Polygon poly129(4);\n    poly129.ps[0] = Point(771.984, 715.608);\n    poly129.ps[1] = Point(771.984, 755.608);\n    poly129.ps[2] = Point(715.984, 755.608);\n    poly129.ps[3] = Point(715.984, 715.608);\n    new ShapeRef(router, poly129, 129);\n    \n    Polygon poly76(4);\n    poly76.ps[0] = Point(320.984, 663.608);\n    poly76.ps[1] = Point(320.984, 703.608);\n    poly76.ps[2] = Point(280.984, 703.608);\n    poly76.ps[3] = Point(280.984, 663.608);\n    new ShapeRef(router, poly76, 76);\n    \n    Polygon poly93(4);\n    poly93.ps[0] = Point(1085.98, 663.608);\n    poly93.ps[1] = Point(1085.98, 703.608);\n    poly93.ps[2] = Point(1045.98, 703.608);\n    poly93.ps[3] = Point(1045.98, 663.608);\n    new ShapeRef(router, poly93, 93);\n    \n    Polygon poly157(4);\n    poly157.ps[0] = Point(213, 425.608);\n    poly157.ps[1] = Point(213, 465.608);\n    poly157.ps[2] = Point(153, 465.608);\n    poly157.ps[3] = Point(153, 425.608);\n    new ShapeRef(router, poly157, 157);\n    \n    Polygon poly147(4);\n    poly147.ps[0] = Point(530.584, -281.392);\n    poly147.ps[1] = Point(530.584, -241.392);\n    poly147.ps[2] = Point(474.584, -241.392);\n    poly147.ps[3] = Point(474.584, -281.392);\n    new ShapeRef(router, poly147, 147);\n    \n    Polygon poly80(4);\n    poly80.ps[0] = Point(122.984, 933.758);\n    poly80.ps[1] = Point(122.984, 973.758);\n    poly80.ps[2] = Point(82.984, 973.758);\n    poly80.ps[3] = Point(82.984, 933.758);\n    new ShapeRef(router, poly80, 80);\n    \n    Polygon poly7(4);\n    poly7.ps[0] = Point(326.584, 1263.01);\n    poly7.ps[1] = Point(326.584, 1303.01);\n    poly7.ps[2] = Point(286.584, 1303.01);\n    poly7.ps[3] = Point(286.584, 1263.01);\n    new ShapeRef(router, poly7, 7);\n    \n    Polygon poly5(4);\n    poly5.ps[0] = Point(460.584, 216.608);\n    poly5.ps[1] = Point(460.584, 256.608);\n    poly5.ps[2] = Point(420.584, 256.608);\n    poly5.ps[3] = Point(420.584, 216.608);\n    new ShapeRef(router, poly5, 5);\n    \n    Polygon poly148(4);\n    poly148.ps[0] = Point(530.584, -434.392);\n    poly148.ps[1] = Point(530.584, -394.392);\n    poly148.ps[2] = Point(474.584, -394.392);\n    poly148.ps[3] = Point(474.584, -434.392);\n    new ShapeRef(router, poly148, 148);\n    \n    Polygon poly166(4);\n    poly166.ps[0] = Point(316.984, 1158.01);\n    poly166.ps[1] = Point(316.984, 1218.01);\n    poly166.ps[2] = Point(276.984, 1218.01);\n    poly166.ps[3] = Point(276.984, 1158.01);\n    new ShapeRef(router, poly166, 166);\n    \n    Polygon poly139(4);\n    poly139.ps[0] = Point(81.984, 187.608);\n    poly139.ps[1] = Point(81.984, 227.608);\n    poly139.ps[2] = Point(25.984, 227.608);\n    poly139.ps[3] = Point(25.984, 187.608);\n    new ShapeRef(router, poly139, 139);\n    \n    Polygon poly91(4);\n    poly91.ps[0] = Point(701.984, 827.008);\n    poly91.ps[1] = Point(701.984, 867.008);\n    poly91.ps[2] = Point(661.984, 867.008);\n    poly91.ps[3] = Point(661.984, 827.008);\n    new ShapeRef(router, poly91, 91);\n    \n    Polygon poly122(4);\n    poly122.ps[0] = Point(709.984, 971.008);\n    poly122.ps[1] = Point(709.984, 1011.01);\n    poly122.ps[2] = Point(653.984, 1011.01);\n    poly122.ps[3] = Point(653.984, 971.008);\n    new ShapeRef(router, poly122, 122);\n    \n    Polygon poly6(4);\n    poly6.ps[0] = Point(521.534, 226.608);\n    poly6.ps[1] = Point(521.534, 246.608);\n    poly6.ps[2] = Point(501.534, 246.608);\n    poly6.ps[3] = Point(501.534, 226.608);\n    new ShapeRef(router, poly6, 6);\n    \n    Polygon poly18(4);\n    poly18.ps[0] = Point(517, 916.608);\n    poly18.ps[1] = Point(517, 956.608);\n    poly18.ps[2] = Point(461, 956.608);\n    poly18.ps[3] = Point(461, 916.608);\n    new ShapeRef(router, poly18, 18);\n    \n    Polygon poly39(4);\n    poly39.ps[0] = Point(372.984, -13.3921);\n    poly39.ps[1] = Point(372.984, 6.60786);\n    poly39.ps[2] = Point(352.984, 6.60786);\n    poly39.ps[3] = Point(352.984, -13.3921);\n    new ShapeRef(router, poly39, 39);\n    \n    Polygon poly25(4);\n    poly25.ps[0] = Point(310.984, 725.608);\n    poly25.ps[1] = Point(310.984, 745.608);\n    poly25.ps[2] = Point(290.984, 745.608);\n    poly25.ps[3] = Point(290.984, 725.608);\n    new ShapeRef(router, poly25, 25);\n    \n    Polygon poly56(4);\n    poly56.ps[0] = Point(79.984, -169.392);\n    poly56.ps[1] = Point(79.984, -149.392);\n    poly56.ps[2] = Point(59.984, -149.392);\n    poly56.ps[3] = Point(59.984, -169.392);\n    new ShapeRef(router, poly56, 56);\n    \n    Polygon poly21(4);\n    poly21.ps[0] = Point(432.984, 874.608);\n    poly21.ps[1] = Point(432.984, 894.608);\n    poly21.ps[2] = Point(412.984, 894.608);\n    poly21.ps[3] = Point(412.984, 874.608);\n    new ShapeRef(router, poly21, 21);\n    \n    Polygon poly47(4);\n    poly47.ps[0] = Point(1291.98, 128.608);\n    poly47.ps[1] = Point(1291.98, 303.608);\n    poly47.ps[2] = Point(977.984, 303.608);\n    poly47.ps[3] = Point(977.984, 128.608);\n    new ShapeRef(router, poly47, 47);\n    \n    Polygon poly62(4);\n    poly62.ps[0] = Point(460.584, -23.3921);\n    poly62.ps[1] = Point(460.584, 16.6079);\n    poly62.ps[2] = Point(420.584, 16.6079);\n    poly62.ps[3] = Point(420.584, -23.3921);\n    new ShapeRef(router, poly62, 62);\n    \n    Polygon poly74(4);\n    poly74.ps[0] = Point(11.984, 425.608);\n    poly74.ps[1] = Point(11.984, 465.608);\n    poly74.ps[2] = Point(-28.016, 465.608);\n    poly74.ps[3] = Point(-28.016, 425.608);\n    new ShapeRef(router, poly74, 74);\n    \n    Polygon poly89(4);\n    poly89.ps[0] = Point(979.984, 663.608);\n    poly89.ps[1] = Point(979.984, 703.608);\n    poly89.ps[2] = Point(939.984, 703.608);\n    poly89.ps[3] = Point(939.984, 663.608);\n    new ShapeRef(router, poly89, 89);\n    \n    Polygon poly143(4);\n    poly143.ps[0] = Point(81.984, 70.6079);\n    poly143.ps[1] = Point(81.984, 110.608);\n    poly143.ps[2] = Point(25.984, 110.608);\n    poly143.ps[3] = Point(25.984, 70.6079);\n    new ShapeRef(router, poly143, 143);\n    \n    Polygon poly135(4);\n    poly135.ps[0] = Point(407.084, 383.608);\n    poly135.ps[1] = Point(407.084, 423.608);\n    poly135.ps[2] = Point(351.084, 423.608);\n    poly135.ps[3] = Point(351.084, 383.608);\n    new ShapeRef(router, poly135, 135);\n    \n    Polygon poly46(4);\n    poly46.ps[0] = Point(285.084, 281.608);\n    poly46.ps[1] = Point(285.084, 341.608);\n    poly46.ps[2] = Point(49.084, 341.608);\n    poly46.ps[3] = Point(49.084, 281.608);\n    new ShapeRef(router, poly46, 46);\n    \n    Polygon poly144(4);\n    poly144.ps[0] = Point(390.984, -73.3921);\n    poly144.ps[1] = Point(390.984, -33.3921);\n    poly144.ps[2] = Point(334.984, -33.3921);\n    poly144.ps[3] = Point(334.984, -73.3921);\n    new ShapeRef(router, poly144, 144);\n    \n    Polygon poly128(4);\n    poly128.ps[0] = Point(883.984, 715.608);\n    poly128.ps[1] = Point(883.984, 755.608);\n    poly128.ps[2] = Point(827.984, 755.608);\n    poly128.ps[3] = Point(827.984, 715.608);\n    new ShapeRef(router, poly128, 128);\n    \n    Polygon poly111(4);\n    poly111.ps[0] = Point(172.984, 684.465);\n    poly111.ps[1] = Point(172.984, 704.465);\n    poly111.ps[2] = Point(152.984, 704.465);\n    poly111.ps[3] = Point(152.984, 684.465);\n    new ShapeRef(router, poly111, 111);\n    \n    Polygon poly45(4);\n    poly45.ps[0] = Point(388.984, 1086.01);\n    poly45.ps[1] = Point(388.984, 1251.01);\n    poly45.ps[2] = Point(73.984, 1251.01);\n    poly45.ps[3] = Point(73.984, 1086.01);\n    new ShapeRef(router, poly45, 45);\n    \n    Polygon poly172(4);\n    poly172.ps[0] = Point(532.584, -117.392);\n    poly172.ps[1] = Point(532.584, -77.3921);\n    poly172.ps[2] = Point(472.584, -77.3921);\n    poly172.ps[3] = Point(472.584, -117.392);\n    new ShapeRef(router, poly172, 172);\n    \n    Polygon poly83(4);\n    poly83.ps[0] = Point(813.984, 1187.01);\n    poly83.ps[1] = Point(813.984, 1227.01);\n    poly83.ps[2] = Point(773.984, 1227.01);\n    poly83.ps[3] = Point(773.984, 1187.01);\n    new ShapeRef(router, poly83, 83);\n    \n    Polygon poly58(4);\n    poly58.ps[0] = Point(749.984, 510.608);\n    poly58.ps[1] = Point(749.984, 530.608);\n    poly58.ps[2] = Point(729.984, 530.608);\n    poly58.ps[3] = Point(729.984, 510.608);\n    new ShapeRef(router, poly58, 58);\n    \n    Polygon poly106(4);\n    poly106.ps[0] = Point(502.984, 448.608);\n    poly106.ps[1] = Point(502.984, 488.608);\n    poly106.ps[2] = Point(462.984, 488.608);\n    poly106.ps[3] = Point(462.984, 448.608);\n    new ShapeRef(router, poly106, 106);\n    \n    Polygon poly41(4);\n    poly41.ps[0] = Point(285.084, 405.608);\n    poly41.ps[1] = Point(285.084, 465.608);\n    poly41.ps[2] = Point(52.084, 465.608);\n    poly41.ps[3] = Point(52.084, 405.608);\n    new ShapeRef(router, poly41, 41);\n    \n    Polygon poly132(4);\n    poly132.ps[0] = Point(560.984, 620.465);\n    poly132.ps[1] = Point(560.984, 660.465);\n    poly132.ps[2] = Point(504.984, 660.465);\n    poly132.ps[3] = Point(504.984, 620.465);\n    new ShapeRef(router, poly132, 132);\n    \n    Polygon poly127(4);\n    poly127.ps[0] = Point(512.984, 864.608);\n    poly127.ps[1] = Point(512.984, 904.608);\n    poly127.ps[2] = Point(456.984, 904.608);\n    poly127.ps[3] = Point(456.984, 864.608);\n    new ShapeRef(router, poly127, 127);\n    \n    Polygon poly124(4);\n    poly124.ps[0] = Point(709.984, 879.008);\n    poly124.ps[1] = Point(709.984, 919.008);\n    poly124.ps[2] = Point(653.984, 919.008);\n    poly124.ps[3] = Point(653.984, 879.008);\n    new ShapeRef(router, poly124, 124);\n    \n    Polygon poly168(4);\n    poly168.ps[0] = Point(1037.98, 263.5);\n    poly168.ps[1] = Point(1037.98, 303.5);\n    poly168.ps[2] = Point(977.984, 303.5);\n    poly168.ps[3] = Point(977.984, 263.5);\n    new ShapeRef(router, poly168, 168);\n    \n    Polygon poly85(4);\n    poly85.ps[0] = Point(442.984, 817.608);\n    poly85.ps[1] = Point(442.984, 857.608);\n    poly85.ps[2] = Point(402.984, 857.608);\n    poly85.ps[3] = Point(402.984, 817.608);\n    new ShapeRef(router, poly85, 85);\n    \n    Polygon poly149(4);\n    poly149.ps[0] = Point(390.984, -465.392);\n    poly149.ps[1] = Point(390.984, -425.392);\n    poly149.ps[2] = Point(334.984, -425.392);\n    poly149.ps[3] = Point(334.984, -465.392);\n    new ShapeRef(router, poly149, 149);\n    \n    Polygon poly79(4);\n    poly79.ps[0] = Point(122.984, 1034.01);\n    poly79.ps[1] = Point(122.984, 1074.01);\n    poly79.ps[2] = Point(82.984, 1074.01);\n    poly79.ps[3] = Point(82.984, 1034.01);\n    new ShapeRef(router, poly79, 79);\n    \n    Polygon poly133(4);\n    poly133.ps[0] = Point(390.984, 613.608);\n    poly133.ps[1] = Point(390.984, 653.608);\n    poly133.ps[2] = Point(334.984, 653.608);\n    poly133.ps[3] = Point(334.984, 613.608);\n    new ShapeRef(router, poly133, 133);\n    \n    Polygon poly14(4);\n    poly14.ps[0] = Point(691.984, 1123.01);\n    poly14.ps[1] = Point(691.984, 1143.01);\n    poly14.ps[2] = Point(671.984, 1143.01);\n    poly14.ps[3] = Point(671.984, 1123.01);\n    new ShapeRef(router, poly14, 14);\n    \n    Polygon poly30(4);\n    poly30.ps[0] = Point(327.084, 393.608);\n    poly30.ps[1] = Point(327.084, 413.608);\n    poly30.ps[2] = Point(307.084, 413.608);\n    poly30.ps[3] = Point(307.084, 393.608);\n    new ShapeRef(router, poly30, 30);\n    \n    Polygon poly20(4);\n    poly20.ps[0] = Point(492.984, 827.608);\n    poly20.ps[1] = Point(492.984, 847.608);\n    poly20.ps[2] = Point(472.984, 847.608);\n    poly20.ps[3] = Point(472.984, 827.608);\n    new ShapeRef(router, poly20, 20);\n    \n    Polygon poly38(4);\n    poly38.ps[0] = Point(1.98401, 80.6079);\n    poly38.ps[1] = Point(1.98401, 100.608);\n    poly38.ps[2] = Point(-18.016, 100.608);\n    poly38.ps[3] = Point(-18.016, 80.6079);\n    new ShapeRef(router, poly38, 38);\n    \n    Polygon poly44(4);\n    poly44.ps[0] = Point(408.584, -512.392);\n    poly44.ps[1] = Point(408.584, -477.392);\n    poly44.ps[2] = Point(20.584, -477.392);\n    poly44.ps[3] = Point(20.584, -512.392);\n    new ShapeRef(router, poly44, 44);\n    \n    Polygon poly94(4);\n    poly94.ps[0] = Point(585.984, 817.608);\n    poly94.ps[1] = Point(585.984, 857.608);\n    poly94.ps[2] = Point(545.984, 857.608);\n    poly94.ps[3] = Point(545.984, 817.608);\n    new ShapeRef(router, poly94, 94);\n    \n    Polygon poly32(4);\n    poly32.ps[0] = Point(390.584, 226.608);\n    poly32.ps[1] = Point(390.584, 246.608);\n    poly32.ps[2] = Point(370.584, 246.608);\n    poly32.ps[3] = Point(370.584, 226.608);\n    new ShapeRef(router, poly32, 32);\n    \n    Polygon poly8(4);\n    poly8.ps[0] = Point(576.484, 1263.01);\n    poly8.ps[1] = Point(576.484, 1303.01);\n    poly8.ps[2] = Point(536.484, 1303.01);\n    poly8.ps[3] = Point(536.484, 1263.01);\n    new ShapeRef(router, poly8, 8);\n    \n    Polygon poly59(4);\n    poly59.ps[0] = Point(552.984, 510.608);\n    poly59.ps[1] = Point(552.984, 530.608);\n    poly59.ps[2] = Point(532.984, 530.608);\n    poly59.ps[3] = Point(532.984, 510.608);\n    new ShapeRef(router, poly59, 59);\n    \n    Polygon poly102(4);\n    poly102.ps[0] = Point(1047.98, 315.608);\n    poly102.ps[1] = Point(1047.98, 355.608);\n    poly102.ps[2] = Point(1007.98, 355.608);\n    poly102.ps[3] = Point(1007.98, 315.608);\n    new ShapeRef(router, poly102, 102);\n    \n    Polygon poly67(4);\n    poly67.ps[0] = Point(818.746, 164.608);\n    poly67.ps[1] = Point(818.746, 204.608);\n    poly67.ps[2] = Point(778.746, 204.608);\n    poly67.ps[3] = Point(778.746, 164.608);\n    new ShapeRef(router, poly67, 67);\n    \n    Polygon poly77(4);\n    poly77.ps[0] = Point(429.484, 1031.01);\n    poly77.ps[1] = Point(429.484, 1071.01);\n    poly77.ps[2] = Point(389.484, 1071.01);\n    poly77.ps[3] = Point(389.484, 1031.01);\n    new ShapeRef(router, poly77, 77);\n    \n    Polygon poly163(4);\n    poly163.ps[0] = Point(886.5, 56.6079);\n    poly163.ps[1] = Point(886.5, 116.608);\n    poly163.ps[2] = Point(846.5, 116.608);\n    poly163.ps[3] = Point(846.5, 56.6079);\n    new ShapeRef(router, poly163, 163);\n    \n    Polygon poly2(4);\n    poly2.ps[0] = Point(954.984, 442.608);\n    poly2.ps[1] = Point(954.984, 482.608);\n    poly2.ps[2] = Point(914.984, 482.608);\n    poly2.ps[3] = Point(914.984, 442.608);\n    new ShapeRef(router, poly2, 2);\n    \n    Polygon poly73(4);\n    poly73.ps[0] = Point(122.984, 663.608);\n    poly73.ps[1] = Point(122.984, 703.608);\n    poly73.ps[2] = Point(82.984, 703.608);\n    poly73.ps[3] = Point(82.984, 663.608);\n    new ShapeRef(router, poly73, 73);\n    \n    Polygon poly65(4);\n    poly65.ps[0] = Point(307.984, -23.3921);\n    poly65.ps[1] = Point(307.984, 16.6079);\n    poly65.ps[2] = Point(267.984, 16.6079);\n    poly65.ps[3] = Point(267.984, -23.3921);\n    new ShapeRef(router, poly65, 65);\n    \n    Polygon poly71(4);\n    poly71.ps[0] = Point(337.084, 341.608);\n    poly71.ps[1] = Point(337.084, 381.608);\n    poly71.ps[2] = Point(297.084, 381.608);\n    poly71.ps[3] = Point(297.084, 341.608);\n    new ShapeRef(router, poly71, 71);\n    \n    Polygon poly110(4);\n    poly110.ps[0] = Point(786.584, -137.392);\n    poly110.ps[1] = Point(786.584, -77.3921);\n    poly110.ps[2] = Point(472.584, -77.3921);\n    poly110.ps[3] = Point(472.584, -137.392);\n    new ShapeRef(router, poly110, 110);\n    \n    Polygon poly84(4);\n    poly84.ps[0] = Point(571.984, 929.008);\n    poly84.ps[1] = Point(571.984, 969.008);\n    poly84.ps[2] = Point(531.984, 969.008);\n    poly84.ps[3] = Point(531.984, 929.008);\n    new ShapeRef(router, poly84, 84);\n    \n    Polygon poly125(4);\n    poly125.ps[0] = Point(883.984, 859.608);\n    poly125.ps[1] = Point(883.984, 899.608);\n    poly125.ps[2] = Point(827.984, 899.608);\n    poly125.ps[3] = Point(827.984, 859.608);\n    new ShapeRef(router, poly125, 125);\n    \n    Polygon poly96(4);\n    poly96.ps[0] = Point(460.584, -476.392);\n    poly96.ps[1] = Point(460.584, -436.392);\n    poly96.ps[2] = Point(420.584, -436.392);\n    poly96.ps[3] = Point(420.584, -476.392);\n    new ShapeRef(router, poly96, 96);\n    \n    Polygon poly167(4);\n    poly167.ps[0] = Point(285.084, 301.608);\n    poly167.ps[1] = Point(285.084, 341.608);\n    poly167.ps[2] = Point(225.084, 341.608);\n    poly167.ps[3] = Point(225.084, 301.608);\n    new ShapeRef(router, poly167, 167);\n    \n    Polygon poly43(4);\n    poly43.ps[0] = Point(1007, -57.3921);\n    poly43.ps[1] = Point(1007, 116.608);\n    poly43.ps[2] = Point(725, 116.608);\n    poly43.ps[3] = Point(725, -57.3921);\n    new ShapeRef(router, poly43, 43);\n    \n    Polygon poly55(4);\n    poly55.ps[0] = Point(297.984, -271.392);\n    poly55.ps[1] = Point(297.984, -251.392);\n    poly55.ps[2] = Point(277.984, -251.392);\n    poly55.ps[3] = Point(277.984, -271.392);\n    new ShapeRef(router, poly55, 55);\n    \n    Polygon poly98(4);\n    poly98.ps[0] = Point(460.584, -179.392);\n    poly98.ps[1] = Point(460.584, -139.392);\n    poly98.ps[2] = Point(420.584, -139.392);\n    poly98.ps[3] = Point(420.584, -179.392);\n    new ShapeRef(router, poly98, 98);\n    \n    Polygon poly42(4);\n    poly42.ps[0] = Point(699.984, 314.608);\n    poly42.ps[1] = Point(699.984, 488.608);\n    poly42.ps[2] = Point(582.984, 488.608);\n    poly42.ps[3] = Point(582.984, 314.608);\n    new ShapeRef(router, poly42, 42);\n    \n    Polygon poly105(4);\n    poly105.ps[0] = Point(622.984, 500.608);\n    poly105.ps[1] = Point(622.984, 540.608);\n    poly105.ps[2] = Point(582.984, 540.608);\n    poly105.ps[3] = Point(582.984, 500.608);\n    new ShapeRef(router, poly105, 105);\n    \n    Polygon poly1(4);\n    poly1.ps[0] = Point(521.534, -169.392);\n    poly1.ps[1] = Point(521.534, -149.392);\n    poly1.ps[2] = Point(501.534, -149.392);\n    poly1.ps[3] = Point(501.534, -169.392);\n    new ShapeRef(router, poly1, 1);\n    \n    Polygon poly165(4);\n    poly165.ps[0] = Point(316.984, 1086.01);\n    poly165.ps[1] = Point(316.984, 1146.01);\n    poly165.ps[2] = Point(276.984, 1146.01);\n    poly165.ps[3] = Point(276.984, 1086.01);\n    new ShapeRef(router, poly165, 165);\n    \n    Polygon poly10(4);\n    poly10.ps[0] = Point(566.484, 1213.01);\n    poly10.ps[1] = Point(566.484, 1233.01);\n    poly10.ps[2] = Point(546.484, 1233.01);\n    poly10.ps[3] = Point(546.484, 1213.01);\n    new ShapeRef(router, poly10, 10);\n    \n    Polygon poly24(4);\n    poly24.ps[0] = Point(432.984, 725.608);\n    poly24.ps[1] = Point(432.984, 745.608);\n    poly24.ps[2] = Point(412.984, 745.608);\n    poly24.ps[3] = Point(412.984, 725.608);\n    new ShapeRef(router, poly24, 24);\n    \n    Polygon poly108(4);\n    poly108.ps[0] = Point(11.984, 112.608);\n    poly108.ps[1] = Point(11.984, 152.608);\n    poly108.ps[2] = Point(-28.016, 152.608);\n    poly108.ps[3] = Point(-28.016, 112.608);\n    new ShapeRef(router, poly108, 108);\n    \n    Polygon poly123(4);\n    poly123.ps[0] = Point(641.984, 971.008);\n    poly123.ps[1] = Point(641.984, 1011.01);\n    poly123.ps[2] = Point(585.984, 1011.01);\n    poly123.ps[3] = Point(585.984, 971.008);\n    new ShapeRef(router, poly123, 123);\n    \n    ConnRef *connRef279 = new ConnRef(router, 279);\n    ConnEnd srcPt279(Point(743.984, 735.608), 15);\n    connRef279->setSourceEndpoint(srcPt279);\n    ConnEnd dstPt279(Point(681.984, 735.608), 15);\n    connRef279->setDestEndpoint(dstPt279);\n    connRef279->setRoutingType((ConnType)2);\n\n    ConnRef *connRef280 = new ConnRef(router, 280);\n    ConnEnd srcPt280(Point(484.984, 735.608), 15);\n    connRef280->setSourceEndpoint(srcPt280);\n    ConnEnd dstPt280(Point(422.984, 735.608), 15);\n    connRef280->setDestEndpoint(dstPt280);\n    connRef280->setRoutingType((ConnType)2);\n\n    ConnRef *connRef327 = new ConnRef(router, 327);\n    ConnEnd srcPt327(Point(1065.98, 683.608), 15);\n    connRef327->setSourceEndpoint(srcPt327);\n    ConnEnd dstPt327(Point(1069.98, 298.608), 2);\n    connRef327->setDestEndpoint(dstPt327);\n    connRef327->setRoutingType((ConnType)2);\n\n    ConnRef *connRef330 = new ConnRef(router, 330);\n    ConnEnd srcPt330(Point(440.584, -3.39214), 15);\n    connRef330->setSourceEndpoint(srcPt330);\n    ConnEnd dstPt330(Point(477.584, -97.3921), 4);\n    connRef330->setDestEndpoint(dstPt330);\n    connRef330->setRoutingType((ConnType)2);\n\n    ConnRef *connRef176 = new ConnRef(router, 176);\n    ConnEnd srcPt176(Point(934.984, 536.108), 15);\n    connRef176->setSourceEndpoint(srcPt176);\n    ConnEnd dstPt176(Point(793.984, 837.608), 15);\n    connRef176->setDestEndpoint(dstPt176);\n    connRef176->setRoutingType((ConnType)2);\n\n    ConnRef *connRef177 = new ConnRef(router, 177);\n    ConnEnd srcPt177(Point(440.584, 236.608), 15);\n    connRef177->setSourceEndpoint(srcPt177);\n    ConnEnd dstPt177(Point(501.534, 236.608), 15);\n    connRef177->setDestEndpoint(dstPt177);\n    connRef177->setRoutingType((ConnType)2);\n\n    ConnRef *connRef312 = new ConnRef(router, 312);\n    ConnEnd srcPt312(Point(440.584, -159.392), 15);\n    connRef312->setSourceEndpoint(srcPt312);\n    ConnEnd dstPt312(Point(440.584, -55.3921), 15);\n    connRef312->setDestEndpoint(dstPt312);\n    connRef312->setRoutingType((ConnType)2);\n\n    ConnRef *connRef306 = new ConnRef(router, 306);\n    ConnEnd srcPt306(Point(162.984, 644.465), 15);\n    connRef306->setSourceEndpoint(srcPt306);\n    ConnEnd dstPt306(Point(162.984, 694.465), 15);\n    connRef306->setDestEndpoint(dstPt306);\n    connRef306->setRoutingType((ConnType)2);\n\n    ConnRef *connRef198 = new ConnRef(router, 198);\n    ConnEnd srcPt198(Point(422.984, 894.608), 15);\n    connRef198->setSourceEndpoint(srcPt198);\n    ConnEnd dstPt198(Point(551.984, 949.008), 15);\n    connRef198->setDestEndpoint(dstPt198);\n    connRef198->setRoutingType((ConnType)2);\n\n    ConnRef *connRef199 = new ConnRef(router, 199);\n    ConnEnd srcPt199(Point(422.984, 874.608), 15);\n    connRef199->setSourceEndpoint(srcPt199);\n    ConnEnd dstPt199(Point(422.984, 837.608), 15);\n    connRef199->setDestEndpoint(dstPt199);\n    connRef199->setRoutingType((ConnType)2);\n\n    ConnRef *connRef282 = new ConnRef(router, 282);\n    ConnEnd srcPt282(Point(532.984, 640.465), 15);\n    connRef282->setSourceEndpoint(srcPt282);\n    ConnEnd dstPt282(Point(532.984, 690.465), 15);\n    connRef282->setDestEndpoint(dstPt282);\n    connRef282->setRoutingType((ConnType)2);\n\n    ConnRef *connRef283 = new ConnRef(router, 283);\n    ConnEnd srcPt283(Point(362.984, 633.608), 15);\n    connRef283->setSourceEndpoint(srcPt283);\n    ConnEnd dstPt283(Point(362.984, 683.608), 15);\n    connRef283->setDestEndpoint(dstPt283);\n    connRef283->setRoutingType((ConnType)2);\n\n    ConnRef *connRef186 = new ConnRef(router, 186);\n    ConnEnd srcPt186(Point(913.984, 949.008), 15);\n    connRef186->setSourceEndpoint(srcPt186);\n    ConnEnd dstPt186(Point(793.984, 949.008), 15);\n    connRef186->setDestEndpoint(dstPt186);\n    connRef186->setRoutingType((ConnType)2);\n\n    ConnRef *connRef187 = new ConnRef(router, 187);\n    ConnEnd srcPt187(Point(753.984, 1145.01), 15);\n    connRef187->setSourceEndpoint(srcPt187);\n    ConnEnd dstPt187(Point(793.984, 1051.01), 15);\n    connRef187->setDestEndpoint(dstPt187);\n    connRef187->setRoutingType((ConnType)2);\n\n    ConnRef *connRef222 = new ConnRef(router, 222);\n    ConnEnd srcPt222(Point(501.534, 132.608), 15);\n    connRef222->setSourceEndpoint(srcPt222);\n    ConnEnd dstPt222(Point(440.584, 132.608), 15);\n    connRef222->setDestEndpoint(dstPt222);\n    connRef222->setRoutingType((ConnType)2);\n\n    ConnRef *connRef223 = new ConnRef(router, 223);\n    ConnEnd srcPt223(Point(521.534, 132.608), 15);\n    connRef223->setSourceEndpoint(srcPt223);\n    ConnEnd dstPt223(Point(571.534, 184.608), 15);\n    connRef223->setDestEndpoint(dstPt223);\n    connRef223->setRoutingType((ConnType)2);\n\n    ConnRef *connRef284 = new ConnRef(router, 284);\n    ConnEnd srcPt284(Point(860.746, 239.608), 15);\n    connRef284->setSourceEndpoint(srcPt284);\n    ConnEnd dstPt284(Point(798.746, 239.608), 15);\n    connRef284->setDestEndpoint(dstPt284);\n    connRef284->setRoutingType((ConnType)2);\n\n    ConnRef *connRef174 = new ConnRef(router, 174);\n    ConnEnd srcPt174(Point(934.984, 462.608), 15);\n    connRef174->setSourceEndpoint(srcPt174);\n    ConnEnd dstPt174(Point(934.984, 516.108), 15);\n    connRef174->setDestEndpoint(dstPt174);\n    connRef174->setRoutingType((ConnType)2);\n\n    ConnRef *connRef175 = new ConnRef(router, 175);\n    ConnEnd srcPt175(Point(868.746, 429.608), 15);\n    connRef175->setSourceEndpoint(srcPt175);\n    ConnEnd dstPt175(Point(934.984, 462.608), 15);\n    connRef175->setDestEndpoint(dstPt175);\n    connRef175->setRoutingType((ConnType)2);\n\n    ConnRef *connRef188 = new ConnRef(router, 188);\n    ConnEnd srcPt188(Point(753.984, 1165.01), 15);\n    connRef188->setSourceEndpoint(srcPt188);\n    ConnEnd dstPt188(Point(793.984, 1207.01), 15);\n    connRef188->setDestEndpoint(dstPt188);\n    connRef188->setRoutingType((ConnType)2);\n\n    ConnRef *connRef189 = new ConnRef(router, 189);\n    ConnEnd srcPt189(Point(671.984, 1133.01), 15);\n    connRef189->setSourceEndpoint(srcPt189);\n    ConnEnd dstPt189(Point(551.984, 1051.01), 15);\n    connRef189->setDestEndpoint(dstPt189);\n    connRef189->setRoutingType((ConnType)2);\n\n    ConnRef *connRef252 = new ConnRef(router, 252);\n    ConnEnd srcPt252(Point(492.984, 837.608), 15);\n    connRef252->setSourceEndpoint(srcPt252);\n    ConnEnd dstPt252(Point(565.984, 837.608), 15);\n    connRef252->setDestEndpoint(dstPt252);\n    connRef252->setRoutingType((ConnType)2);\n\n    ConnRef *connRef253 = new ConnRef(router, 253);\n    ConnEnd srcPt253(Point(798.746, 335.608), 15);\n    connRef253->setSourceEndpoint(srcPt253);\n    ConnEnd dstPt253(Point(858.746, 327.608), 15);\n    connRef253->setDestEndpoint(dstPt253);\n    connRef253->setRoutingType((ConnType)2);\n\n    ConnRef *connRef315 = new ConnRef(router, 315);\n    ConnEnd srcPt315(Point(-8.01599, 445.608), 15);\n    connRef315->setSourceEndpoint(srcPt315);\n    ConnEnd dstPt315(Point(158, 445.608), 4);\n    connRef315->setDestEndpoint(dstPt315);\n    connRef315->setRoutingType((ConnType)2);\n\n    ConnRef *connRef321 = new ConnRef(router, 321);\n    ConnEnd srcPt321(Point(1065.98, 683.608), 15);\n    connRef321->setSourceEndpoint(srcPt321);\n    ConnEnd dstPt321(Point(866.5, 111.608), 2);\n    connRef321->setDestEndpoint(dstPt321);\n    connRef321->setRoutingType((ConnType)2);\n\n    ConnRef *connRef180 = new ConnRef(router, 180);\n    ConnEnd srcPt180(Point(438.984, 1283.01), 15);\n    connRef180->setSourceEndpoint(srcPt180);\n    ConnEnd dstPt180(Point(556.484, 1283.01), 15);\n    connRef180->setDestEndpoint(dstPt180);\n    connRef180->setRoutingType((ConnType)2);\n\n    ConnRef *connRef181 = new ConnRef(router, 181);\n    ConnEnd srcPt181(Point(556.484, 1233.01), 15);\n    connRef181->setSourceEndpoint(srcPt181);\n    ConnEnd dstPt181(Point(556.484, 1283.01), 15);\n    connRef181->setDestEndpoint(dstPt181);\n    connRef181->setRoutingType((ConnType)2);\n\n    ConnRef *connRef288 = new ConnRef(router, 288);\n    ConnEnd srcPt288(Point(379.084, 319.608), 15);\n    connRef288->setSourceEndpoint(srcPt288);\n    ConnEnd dstPt288(Point(317.084, 319.608), 15);\n    connRef288->setDestEndpoint(dstPt288);\n    connRef288->setRoutingType((ConnType)2);\n\n    ConnRef *connRef289 = new ConnRef(router, 289);\n    ConnEnd srcPt289(Point(53.984, 207.608), 15);\n    connRef289->setSourceEndpoint(srcPt289);\n    ConnEnd dstPt289(Point(-8.01599, 207.608), 15);\n    connRef289->setDestEndpoint(dstPt289);\n    connRef289->setRoutingType((ConnType)2);\n\n    ConnRef *connRef328 = new ConnRef(router, 328);\n    ConnEnd srcPt328(Point(300.984, 683.608), 15);\n    connRef328->setSourceEndpoint(srcPt328);\n    ConnEnd dstPt328(Point(302.984, 591.5), 2);\n    connRef328->setDestEndpoint(dstPt328);\n    connRef328->setRoutingType((ConnType)2);\n\n    ConnRef *connRef329 = new ConnRef(router, 329);\n    ConnEnd srcPt329(Point(793.984, 1207.01), 15);\n    connRef329->setSourceEndpoint(srcPt329);\n    ConnEnd dstPt329(Point(830.984, 1207.01), 4);\n    connRef329->setDestEndpoint(dstPt329);\n    connRef329->setRoutingType((ConnType)2);\n\n    ConnRef *connRef192 = new ConnRef(router, 192);\n    ConnEnd srcPt192(Point(551.984, 1001.01), 15);\n    connRef192->setSourceEndpoint(srcPt192);\n    ConnEnd dstPt192(Point(551.984, 1051.01), 15);\n    connRef192->setDestEndpoint(dstPt192);\n    connRef192->setRoutingType((ConnType)2);\n\n    ConnRef *connRef193 = new ConnRef(router, 193);\n    ConnEnd srcPt193(Point(671.984, 949.008), 15);\n    connRef193->setSourceEndpoint(srcPt193);\n    ConnEnd dstPt193(Point(551.984, 949.008), 15);\n    connRef193->setDestEndpoint(dstPt193);\n    connRef193->setRoutingType((ConnType)2);\n\n    ConnRef *connRef215 = new ConnRef(router, 215);\n    ConnEnd srcPt215(Point(-8.01599, 363.608), 15);\n    connRef215->setSourceEndpoint(srcPt215);\n    ConnEnd dstPt215(Point(-8.01599, 249.608), 15);\n    connRef215->setDestEndpoint(dstPt215);\n    connRef215->setRoutingType((ConnType)2);\n\n    ConnRef *connRef276 = new ConnRef(router, 276);\n    ConnEnd srcPt276(Point(482.984, 787.608), 15);\n    connRef276->setSourceEndpoint(srcPt276);\n    ConnEnd dstPt276(Point(482.984, 837.608), 15);\n    connRef276->setDestEndpoint(dstPt276);\n    connRef276->setRoutingType((ConnType)2);\n\n    ConnRef *connRef277 = new ConnRef(router, 277);\n    ConnEnd srcPt277(Point(484.984, 884.608), 15);\n    connRef277->setSourceEndpoint(srcPt277);\n    ConnEnd dstPt277(Point(422.984, 884.608), 15);\n    connRef277->setDestEndpoint(dstPt277);\n    connRef277->setRoutingType((ConnType)2);\n\n    ConnRef *connRef273 = new ConnRef(router, 273);\n    ConnEnd srcPt273(Point(613.984, 991.008), 15);\n    connRef273->setSourceEndpoint(srcPt273);\n    ConnEnd dstPt273(Point(551.984, 991.008), 15);\n    connRef273->setDestEndpoint(dstPt273);\n    connRef273->setRoutingType((ConnType)2);\n\n    ConnRef *connRef274 = new ConnRef(router, 274);\n    ConnEnd srcPt274(Point(681.984, 899.008), 15);\n    connRef274->setSourceEndpoint(srcPt274);\n    ConnEnd dstPt274(Point(681.984, 949.008), 15);\n    connRef274->setDestEndpoint(dstPt274);\n    connRef274->setRoutingType((ConnType)2);\n\n    ConnRef *connRef313 = new ConnRef(router, 313);\n    ConnEnd srcPt313(Point(440.584, -314.392), 15);\n    connRef313->setSourceEndpoint(srcPt313);\n    ConnEnd dstPt313(Point(440.584, -271.392), 15);\n    connRef313->setDestEndpoint(dstPt313);\n    connRef313->setRoutingType((ConnType)2);\n\n    ConnRef *connRef314 = new ConnRef(router, 314);\n    ConnEnd srcPt314(Point(287.984, -314.392), 15);\n    connRef314->setSourceEndpoint(srcPt314);\n    ConnEnd dstPt314(Point(287.984, -271.392), 15);\n    connRef314->setDestEndpoint(dstPt314);\n    connRef314->setRoutingType((ConnType)2);\n\n    ConnRef *connRef248 = new ConnRef(router, 248);\n    ConnEnd srcPt248(Point(691.984, 1041.01), 15);\n    connRef248->setSourceEndpoint(srcPt248);\n    ConnEnd dstPt248(Point(793.984, 1051.01), 15);\n    connRef248->setDestEndpoint(dstPt248);\n    connRef248->setRoutingType((ConnType)2);\n\n    ConnRef *connRef309 = new ConnRef(router, 309);\n    ConnEnd srcPt309(Point(317.084, 445.608), 15);\n    connRef309->setSourceEndpoint(srcPt309);\n    ConnEnd dstPt309(Point(317.084, 413.608), 15);\n    connRef309->setDestEndpoint(dstPt309);\n    connRef309->setRoutingType((ConnType)2);\n\n    ConnRef *connRef203 = new ConnRef(router, 203);\n    ConnEnd srcPt203(Point(681.984, 745.608), 15);\n    connRef203->setSourceEndpoint(srcPt203);\n    ConnEnd dstPt203(Point(681.984, 847.008), 15);\n    connRef203->setDestEndpoint(dstPt203);\n    connRef203->setRoutingType((ConnType)2);\n\n    ConnRef *connRef239 = new ConnRef(router, 239);\n    ConnEnd srcPt239(Point(532.984, 520.608), 15);\n    connRef239->setSourceEndpoint(srcPt239);\n    ConnEnd dstPt239(Point(482.984, 468.608), 15);\n    connRef239->setDestEndpoint(dstPt239);\n    connRef239->setRoutingType((ConnType)2);\n\n    ConnRef *connRef316 = new ConnRef(router, 316);\n    ConnEnd srcPt316(Point(317.084, 445.608), 15);\n    connRef316->setSourceEndpoint(srcPt316);\n    ConnEnd dstPt316(Point(280.084, 445.608), 8);\n    connRef316->setDestEndpoint(dstPt316);\n    connRef316->setRoutingType((ConnType)2);\n\n    ConnRef *connRef317 = new ConnRef(router, 317);\n    ConnEnd srcPt317(Point(571.534, 184.608), 15);\n    connRef317->setSourceEndpoint(srcPt317);\n    ConnEnd dstPt317(Point(602.984, 335.5), 1);\n    connRef317->setDestEndpoint(dstPt317);\n    connRef317->setRoutingType((ConnType)2);\n\n    ConnRef *connRef234 = new ConnRef(router, 234);\n    ConnEnd srcPt234(Point(287.984, -251.392), 15);\n    connRef234->setSourceEndpoint(srcPt234);\n    ConnEnd dstPt234(Point(287.984, -159.392), 15);\n    connRef234->setDestEndpoint(dstPt234);\n    connRef234->setRoutingType((ConnType)2);\n\n    ConnRef *connRef235 = new ConnRef(router, 235);\n    ConnEnd srcPt235(Point(59.984, -159.392), 15);\n    connRef235->setSourceEndpoint(srcPt235);\n    ConnEnd dstPt235(Point(-101.016, -159.392), 15);\n    connRef235->setDestEndpoint(dstPt235);\n    connRef235->setRoutingType((ConnType)2);\n\n    ConnRef *connRef322 = new ConnRef(router, 322);\n    ConnEnd srcPt322(Point(551.984, 1051.01), 15);\n    connRef322->setSourceEndpoint(srcPt322);\n    ConnEnd dstPt322(Point(383.984, 1106.01), 8);\n    connRef322->setDestEndpoint(dstPt322);\n    connRef322->setRoutingType((ConnType)2);\n\n    ConnRef *connRef323 = new ConnRef(router, 323);\n    ConnEnd srcPt323(Point(-8.01599, 132.608), 15);\n    connRef323->setSourceEndpoint(srcPt323);\n    ConnEnd dstPt323(Point(296.984, 1091.01), 1);\n    connRef323->setDestEndpoint(dstPt323);\n    connRef323->setRoutingType((ConnType)2);\n\n    ConnRef *connRef213 = new ConnRef(router, 213);\n    ConnEnd srcPt213(Point(798.746, 249.608), 15);\n    connRef213->setSourceEndpoint(srcPt213);\n    ConnEnd dstPt213(Point(798.746, 335.608), 15);\n    connRef213->setDestEndpoint(dstPt213);\n    connRef213->setRoutingType((ConnType)2);\n\n    ConnRef *connRef214 = new ConnRef(router, 214);\n    ConnEnd srcPt214(Point(317.084, 393.608), 15);\n    connRef214->setSourceEndpoint(srcPt214);\n    ConnEnd dstPt214(Point(317.084, 361.608), 15);\n    connRef214->setDestEndpoint(dstPt214);\n    connRef214->setRoutingType((ConnType)2);\n\n    ConnRef *connRef243 = new ConnRef(router, 243);\n    ConnEnd srcPt243(Point(749.984, 520.608), 15);\n    connRef243->setSourceEndpoint(srcPt243);\n    ConnEnd dstPt243(Point(793.984, 683.608), 15);\n    connRef243->setDestEndpoint(dstPt243);\n    connRef243->setRoutingType((ConnType)2);\n\n    ConnRef *connRef244 = new ConnRef(router, 244);\n    ConnEnd srcPt244(Point(372.984, 683.608), 15);\n    connRef244->setSourceEndpoint(srcPt244);\n    ConnEnd dstPt244(Point(422.984, 683.608), 15);\n    connRef244->setDestEndpoint(dstPt244);\n    connRef244->setRoutingType((ConnType)2);\n\n    ConnRef *connRef272 = new ConnRef(router, 272);\n    ConnEnd srcPt272(Point(681.984, 991.008), 15);\n    connRef272->setSourceEndpoint(srcPt272);\n    ConnEnd dstPt272(Point(681.984, 1041.01), 15);\n    connRef272->setDestEndpoint(dstPt272);\n    connRef272->setRoutingType((ConnType)2);\n\n    ConnRef *connRef210 = new ConnRef(router, 210);\n    ConnEnd srcPt210(Point(522.984, 690.465), 15);\n    connRef210->setSourceEndpoint(srcPt210);\n    ConnEnd dstPt210(Point(422.984, 683.608), 15);\n    connRef210->setDestEndpoint(dstPt210);\n    connRef210->setRoutingType((ConnType)2);\n\n    ConnRef *connRef211 = new ConnRef(router, 211);\n    ConnEnd srcPt211(Point(352.984, 683.608), 15);\n    connRef211->setSourceEndpoint(srcPt211);\n    ConnEnd dstPt211(Point(300.984, 683.608), 15);\n    connRef211->setDestEndpoint(dstPt211);\n    connRef211->setRoutingType((ConnType)2);\n\n    ConnRef *connRef245 = new ConnRef(router, 245);\n    ConnEnd srcPt245(Point(300.984, 683.608), 15);\n    connRef245->setSourceEndpoint(srcPt245);\n    ConnEnd dstPt245(Point(172.984, 694.465), 15);\n    connRef245->setDestEndpoint(dstPt245);\n    connRef245->setRoutingType((ConnType)2);\n\n    ConnRef *connRef178 = new ConnRef(router, 178);\n    ConnEnd srcPt178(Point(390.584, 236.608), 15);\n    connRef178->setSourceEndpoint(srcPt178);\n    ConnEnd dstPt178(Point(440.584, 236.608), 15);\n    connRef178->setDestEndpoint(dstPt178);\n    connRef178->setRoutingType((ConnType)2);\n\n    ConnRef *connRef179 = new ConnRef(router, 179);\n    ConnEnd srcPt179(Point(521.534, 236.608), 15);\n    connRef179->setSourceEndpoint(srcPt179);\n    ConnEnd dstPt179(Point(571.534, 184.608), 15);\n    connRef179->setDestEndpoint(dstPt179);\n    connRef179->setRoutingType((ConnType)2);\n\n    ConnRef *connRef194 = new ConnRef(router, 194);\n    ConnEnd srcPt194(Point(691.984, 949.008), 15);\n    connRef194->setSourceEndpoint(srcPt194);\n    ConnEnd dstPt194(Point(793.984, 949.008), 15);\n    connRef194->setDestEndpoint(dstPt194);\n    connRef194->setRoutingType((ConnType)2);\n\n    ConnRef *connRef296 = new ConnRef(router, 296);\n    ConnEnd srcPt296(Point(502.584, -45.3921), 15);\n    connRef296->setSourceEndpoint(srcPt296);\n    ConnEnd dstPt296(Point(440.584, -45.3921), 15);\n    connRef296->setDestEndpoint(dstPt296);\n    connRef296->setRoutingType((ConnType)2);\n\n    ConnRef *connRef230 = new ConnRef(router, 230);\n    ConnEnd srcPt230(Point(440.584, -35.3921), 15);\n    connRef230->setSourceEndpoint(srcPt230);\n    ConnEnd dstPt230(Point(440.584, -3.39214), 15);\n    connRef230->setDestEndpoint(dstPt230);\n    connRef230->setRoutingType((ConnType)2);\n\n    ConnRef *connRef246 = new ConnRef(router, 246);\n    ConnEnd srcPt246(Point(409.484, 1051.01), 15);\n    connRef246->setSourceEndpoint(srcPt246);\n    ConnEnd dstPt246(Point(551.984, 1051.01), 15);\n    connRef246->setDestEndpoint(dstPt246);\n    connRef246->setRoutingType((ConnType)2);\n\n    ConnRef *connRef247 = new ConnRef(router, 247);\n    ConnEnd srcPt247(Point(691.984, 1133.01), 15);\n    connRef247->setSourceEndpoint(srcPt247);\n    ConnEnd dstPt247(Point(793.984, 1051.01), 15);\n    connRef247->setDestEndpoint(dstPt247);\n    connRef247->setRoutingType((ConnType)2);\n\n    ConnRef *connRef269 = new ConnRef(router, 269);\n    ConnEnd srcPt269(Point(923.984, 899.008), 15);\n    connRef269->setSourceEndpoint(srcPt269);\n    ConnEnd dstPt269(Point(923.984, 949.008), 15);\n    connRef269->setDestEndpoint(dstPt269);\n    connRef269->setRoutingType((ConnType)2);\n\n    ConnRef *connRef240 = new ConnRef(router, 240);\n    ConnEnd srcPt240(Point(532.984, 520.608), 15);\n    connRef240->setSourceEndpoint(srcPt240);\n    ConnEnd dstPt240(Point(464.984, 520.608), 15);\n    connRef240->setDestEndpoint(dstPt240);\n    connRef240->setRoutingType((ConnType)2);\n\n    ConnRef *connRef241 = new ConnRef(router, 241);\n    ConnEnd srcPt241(Point(131.984, 132.608), 15);\n    connRef241->setSourceEndpoint(srcPt241);\n    ConnEnd dstPt241(Point(287.984, 132.608), 15);\n    connRef241->setDestEndpoint(dstPt241);\n    connRef241->setRoutingType((ConnType)2);\n\n    ConnRef *connRef201 = new ConnRef(router, 201);\n    ConnEnd srcPt201(Point(793.984, 745.608), 15);\n    connRef201->setSourceEndpoint(srcPt201);\n    ConnEnd dstPt201(Point(793.984, 837.608), 15);\n    connRef201->setDestEndpoint(dstPt201);\n    connRef201->setRoutingType((ConnType)2);\n\n    ConnRef *connRef202 = new ConnRef(router, 202);\n    ConnEnd srcPt202(Point(681.984, 725.608), 15);\n    connRef202->setSourceEndpoint(srcPt202);\n    ConnEnd dstPt202(Point(793.984, 683.608), 15);\n    connRef202->setDestEndpoint(dstPt202);\n    connRef202->setRoutingType((ConnType)2);\n\n    ConnRef *connRef324 = new ConnRef(router, 324);\n    ConnEnd srcPt324(Point(306.584, 1283.01), 15);\n    connRef324->setSourceEndpoint(srcPt324);\n    ConnEnd dstPt324(Point(296.984, 1213.01), 2);\n    connRef324->setDestEndpoint(dstPt324);\n    connRef324->setRoutingType((ConnType)2);\n\n    ConnRef *connRef182 = new ConnRef(router, 182);\n    ConnEnd srcPt182(Point(418.984, 1283.01), 15);\n    connRef182->setSourceEndpoint(srcPt182);\n    ConnEnd dstPt182(Point(306.584, 1283.01), 15);\n    connRef182->setDestEndpoint(dstPt182);\n    connRef182->setRoutingType((ConnType)2);\n\n    ConnRef *connRef183 = new ConnRef(router, 183);\n    ConnEnd srcPt183(Point(556.484, 1213.01), 15);\n    connRef183->setSourceEndpoint(srcPt183);\n    ConnEnd dstPt183(Point(551.984, 1051.01), 15);\n    connRef183->setDestEndpoint(dstPt183);\n    connRef183->setRoutingType((ConnType)2);\n\n    ConnRef *connRef190 = new ConnRef(router, 190);\n    ConnEnd srcPt190(Point(671.984, 1041.01), 15);\n    connRef190->setSourceEndpoint(srcPt190);\n    ConnEnd dstPt190(Point(551.984, 1051.01), 15);\n    connRef190->setDestEndpoint(dstPt190);\n    connRef190->setRoutingType((ConnType)2);\n\n    ConnRef *connRef191 = new ConnRef(router, 191);\n    ConnEnd srcPt191(Point(551.984, 981.008), 15);\n    connRef191->setSourceEndpoint(srcPt191);\n    ConnEnd dstPt191(Point(551.984, 949.008), 15);\n    connRef191->setDestEndpoint(dstPt191);\n    connRef191->setRoutingType((ConnType)2);\n\n    ConnRef *connRef285 = new ConnRef(router, 285);\n    ConnEnd srcPt285(Point(379.084, 403.608), 15);\n    connRef285->setSourceEndpoint(srcPt285);\n    ConnEnd dstPt285(Point(317.084, 403.608), 15);\n    connRef285->setDestEndpoint(dstPt285);\n    connRef285->setRoutingType((ConnType)2);\n\n    ConnRef *connRef286 = new ConnRef(router, 286);\n    ConnEnd srcPt286(Point(53.984, 373.608), 15);\n    connRef286->setSourceEndpoint(srcPt286);\n    ConnEnd dstPt286(Point(-8.01599, 373.608), 15);\n    connRef286->setDestEndpoint(dstPt286);\n    connRef286->setRoutingType((ConnType)2);\n\n    ConnRef *connRef291 = new ConnRef(router, 291);\n    ConnEnd srcPt291(Point(362.984, 82.6079), 15);\n    connRef291->setSourceEndpoint(srcPt291);\n    ConnEnd dstPt291(Point(362.984, 132.608), 15);\n    connRef291->setDestEndpoint(dstPt291);\n    connRef291->setRoutingType((ConnType)2);\n\n    ConnRef *connRef292 = new ConnRef(router, 292);\n    ConnEnd srcPt292(Point(121.984, 82.6079), 15);\n    connRef292->setSourceEndpoint(srcPt292);\n    ConnEnd dstPt292(Point(121.984, 132.608), 15);\n    connRef292->setDestEndpoint(dstPt292);\n    connRef292->setRoutingType((ConnType)2);\n\n    ConnRef *connRef325 = new ConnRef(router, 325);\n    ConnEnd srcPt325(Point(317.084, 361.608), 15);\n    connRef325->setSourceEndpoint(srcPt325);\n    ConnEnd dstPt325(Point(280.084, 321.608), 8);\n    connRef325->setDestEndpoint(dstPt325);\n    connRef325->setRoutingType((ConnType)2);\n\n    ConnRef *connRef326 = new ConnRef(router, 326);\n    ConnEnd srcPt326(Point(571.534, 184.608), 15);\n    connRef326->setSourceEndpoint(srcPt326);\n    ConnEnd dstPt326(Point(982.984, 283.5), 4);\n    connRef326->setDestEndpoint(dstPt326);\n    connRef326->setRoutingType((ConnType)2);\n\n    ConnRef *connRef219 = new ConnRef(router, 219);\n    ConnEnd srcPt219(Point(317.084, 329.608), 15);\n    connRef219->setSourceEndpoint(srcPt219);\n    ConnEnd dstPt219(Point(317.084, 361.608), 15);\n    connRef219->setDestEndpoint(dstPt219);\n    connRef219->setRoutingType((ConnType)2);\n\n    ConnRef *connRef220 = new ConnRef(router, 220);\n    ConnEnd srcPt220(Point(-8.01599, 217.608), 15);\n    connRef220->setSourceEndpoint(srcPt220);\n    ConnEnd dstPt220(Point(-8.01599, 249.608), 15);\n    connRef220->setDestEndpoint(dstPt220);\n    connRef220->setRoutingType((ConnType)2);\n\n    ConnRef *connRef224 = new ConnRef(router, 224);\n    ConnEnd srcPt224(Point(372.984, 132.608), 15);\n    connRef224->setSourceEndpoint(srcPt224);\n    ConnEnd dstPt224(Point(440.584, 132.608), 15);\n    connRef224->setDestEndpoint(dstPt224);\n    connRef224->setRoutingType((ConnType)2);\n\n    ConnRef *connRef173 = new ConnRef(router, 173);\n    ConnEnd srcPt173(Point(511.534, -149.392), 15);\n    connRef173->setSourceEndpoint(srcPt173);\n    ConnEnd dstPt173(Point(440.584, -3.39214), 15);\n    connRef173->setDestEndpoint(dstPt173);\n    connRef173->setRoutingType((ConnType)2);\n\n    ConnRef *connRef260 = new ConnRef(router, 260);\n    ConnEnd srcPt260(Point(552.984, 520.608), 15);\n    connRef260->setSourceEndpoint(srcPt260);\n    ConnEnd dstPt260(Point(602.984, 520.608), 15);\n    connRef260->setDestEndpoint(dstPt260);\n    connRef260->setRoutingType((ConnType)2);\n\n    ConnRef *connRef197 = new ConnRef(router, 197);\n    ConnEnd srcPt197(Point(472.984, 837.608), 15);\n    connRef197->setSourceEndpoint(srcPt197);\n    ConnEnd dstPt197(Point(422.984, 837.608), 15);\n    connRef197->setDestEndpoint(dstPt197);\n    connRef197->setRoutingType((ConnType)2);\n\n    ConnRef *connRef206 = new ConnRef(router, 206);\n    ConnEnd srcPt206(Point(300.984, 725.608), 15);\n    connRef206->setSourceEndpoint(srcPt206);\n    ConnEnd dstPt206(Point(300.984, 683.608), 15);\n    connRef206->setDestEndpoint(dstPt206);\n    connRef206->setRoutingType((ConnType)2);\n\n    ConnRef *connRef255 = new ConnRef(router, 255);\n    ConnEnd srcPt255(Point(440.584, -456.392), 15);\n    connRef255->setSourceEndpoint(srcPt255);\n    ConnEnd dstPt255(Point(440.584, -424.392), 15);\n    connRef255->setDestEndpoint(dstPt255);\n    connRef255->setRoutingType((ConnType)2);\n\n    ConnRef *connRef256 = new ConnRef(router, 256);\n    ConnEnd srcPt256(Point(440.584, -314.392), 15);\n    connRef256->setSourceEndpoint(srcPt256);\n    ConnEnd dstPt256(Point(362.984, -405.392), 15);\n    connRef256->setDestEndpoint(dstPt256);\n    connRef256->setRoutingType((ConnType)2);\n\n    ConnRef *connRef225 = new ConnRef(router, 225);\n    ConnEnd srcPt225(Point(352.984, 132.608), 15);\n    connRef225->setSourceEndpoint(srcPt225);\n    ConnEnd dstPt225(Point(287.984, 132.608), 15);\n    connRef225->setDestEndpoint(dstPt225);\n    connRef225->setRoutingType((ConnType)2);\n\n    ConnRef *connRef226 = new ConnRef(router, 226);\n    ConnEnd srcPt226(Point(111.984, 132.608), 15);\n    connRef226->setSourceEndpoint(srcPt226);\n    ConnEnd dstPt226(Point(-8.01599, 132.608), 15);\n    connRef226->setDestEndpoint(dstPt226);\n    connRef226->setRoutingType((ConnType)2);\n\n    ConnRef *connRef236 = new ConnRef(router, 236);\n    ConnEnd srcPt236(Point(-76.016, 38.6079), 15);\n    connRef236->setSourceEndpoint(srcPt236);\n    ConnEnd dstPt236(Point(-101.016, -159.392), 15);\n    connRef236->setDestEndpoint(dstPt236);\n    connRef236->setRoutingType((ConnType)2);\n\n    ConnRef *connRef184 = new ConnRef(router, 184);\n    ConnEnd srcPt184(Point(1065.98, 769.608), 15);\n    connRef184->setSourceEndpoint(srcPt184);\n    ConnEnd dstPt184(Point(1065.98, 903.608), 15);\n    connRef184->setDestEndpoint(dstPt184);\n    connRef184->setRoutingType((ConnType)2);\n\n    ConnRef *connRef185 = new ConnRef(router, 185);\n    ConnEnd srcPt185(Point(1065.98, 749.608), 15);\n    connRef185->setSourceEndpoint(srcPt185);\n    ConnEnd dstPt185(Point(1065.98, 683.608), 15);\n    connRef185->setDestEndpoint(dstPt185);\n    connRef185->setRoutingType((ConnType)2);\n\n    ConnRef *connRef212 = new ConnRef(router, 212);\n    ConnEnd srcPt212(Point(798.746, 229.608), 15);\n    connRef212->setSourceEndpoint(srcPt212);\n    ConnEnd dstPt212(Point(798.746, 184.608), 15);\n    connRef212->setDestEndpoint(dstPt212);\n    connRef212->setRoutingType((ConnType)2);\n\n    ConnRef *connRef195 = new ConnRef(router, 195);\n    ConnEnd srcPt195(Point(489, 936.608), 15);\n    connRef195->setSourceEndpoint(srcPt195);\n    ConnEnd dstPt195(Point(551.984, 1051.01), 15);\n    connRef195->setDestEndpoint(dstPt195);\n    connRef195->setRoutingType((ConnType)2);\n\n    ConnRef *connRef196 = new ConnRef(router, 196);\n    ConnEnd srcPt196(Point(793.984, 869.608), 15);\n    connRef196->setSourceEndpoint(srcPt196);\n    ConnEnd dstPt196(Point(793.984, 837.608), 15);\n    connRef196->setDestEndpoint(dstPt196);\n    connRef196->setRoutingType((ConnType)2);\n\n    ConnRef *connRef294 = new ConnRef(router, 294);\n    ConnEnd srcPt294(Point(362.984, -53.3921), 15);\n    connRef294->setSourceEndpoint(srcPt294);\n    ConnEnd dstPt294(Point(362.984, -3.39214), 15);\n    connRef294->setDestEndpoint(dstPt294);\n    connRef294->setRoutingType((ConnType)2);\n\n    ConnRef *connRef295 = new ConnRef(router, 295);\n    ConnEnd srcPt295(Point(121.984, -53.3921), 15);\n    connRef295->setSourceEndpoint(srcPt295);\n    ConnEnd dstPt295(Point(121.984, -3.39214), 15);\n    connRef295->setDestEndpoint(dstPt295);\n    connRef295->setRoutingType((ConnType)2);\n\n    ConnRef *connRef254 = new ConnRef(router, 254);\n    ConnEnd srcPt254(Point(798.746, 335.608), 15);\n    connRef254->setSourceEndpoint(srcPt254);\n    ConnEnd dstPt254(Point(945.984, 335.608), 15);\n    connRef254->setDestEndpoint(dstPt254);\n    connRef254->setRoutingType((ConnType)2);\n\n    ConnRef *connRef264 = new ConnRef(router, 264);\n    ConnEnd srcPt264(Point(858.746, 379.608), 15);\n    connRef264->setSourceEndpoint(srcPt264);\n    ConnEnd dstPt264(Point(858.746, 429.608), 15);\n    connRef264->setDestEndpoint(dstPt264);\n    connRef264->setRoutingType((ConnType)2);\n\n    ConnRef *connRef265 = new ConnRef(router, 265);\n    ConnEnd srcPt265(Point(511.534, 186.608), 15);\n    connRef265->setSourceEndpoint(srcPt265);\n    ConnEnd dstPt265(Point(511.534, 236.608), 15);\n    connRef265->setDestEndpoint(dstPt265);\n    connRef265->setRoutingType((ConnType)2);\n\n    ConnRef *connRef266 = new ConnRef(router, 266);\n    ConnEnd srcPt266(Point(428.984, 1233.01), 15);\n    connRef266->setSourceEndpoint(srcPt266);\n    ConnEnd dstPt266(Point(428.984, 1283.01), 15);\n    connRef266->setDestEndpoint(dstPt266);\n    connRef266->setRoutingType((ConnType)2);\n\n    ConnRef *connRef290 = new ConnRef(router, 290);\n    ConnEnd srcPt290(Point(511.534, 82.6079), 15);\n    connRef290->setSourceEndpoint(srcPt290);\n    ConnEnd dstPt290(Point(511.534, 132.608), 15);\n    connRef290->setDestEndpoint(dstPt290);\n    connRef290->setRoutingType((ConnType)2);\n\n    ConnRef *connRef270 = new ConnRef(router, 270);\n    ConnEnd srcPt270(Point(815.984, 1155.01), 15);\n    connRef270->setSourceEndpoint(srcPt270);\n    ConnEnd dstPt270(Point(753.984, 1155.01), 15);\n    connRef270->setDestEndpoint(dstPt270);\n    connRef270->setRoutingType((ConnType)2);\n\n    ConnRef *connRef271 = new ConnRef(router, 271);\n    ConnEnd srcPt271(Point(681.984, 1083.01), 15);\n    connRef271->setSourceEndpoint(srcPt271);\n    ConnEnd dstPt271(Point(681.984, 1133.01), 15);\n    connRef271->setDestEndpoint(dstPt271);\n    connRef271->setRoutingType((ConnType)2);\n\n    ConnRef *connRef301 = new ConnRef(router, 301);\n    ConnEnd srcPt301(Point(69.984, -209.392), 15);\n    connRef301->setSourceEndpoint(srcPt301);\n    ConnEnd dstPt301(Point(69.984, -159.392), 15);\n    connRef301->setDestEndpoint(dstPt301);\n    connRef301->setRoutingType((ConnType)2);\n\n    ConnRef *connRef228 = new ConnRef(router, 228);\n    ConnEnd srcPt228(Point(352.984, -3.39214), 15);\n    connRef228->setSourceEndpoint(srcPt228);\n    ConnEnd dstPt228(Point(287.984, -3.39214), 15);\n    connRef228->setDestEndpoint(dstPt228);\n    connRef228->setRoutingType((ConnType)2);\n\n    ConnRef *connRef229 = new ConnRef(router, 229);\n    ConnEnd srcPt229(Point(111.984, -3.39214), 15);\n    connRef229->setSourceEndpoint(srcPt229);\n    ConnEnd dstPt229(Point(-8.01599, -3.39214), 15);\n    connRef229->setDestEndpoint(dstPt229);\n    connRef229->setRoutingType((ConnType)2);\n\n    ConnRef *connRef237 = new ConnRef(router, 237);\n    ConnEnd srcPt237(Point(-76.016, 58.6079), 15);\n    connRef237->setSourceEndpoint(srcPt237);\n    ConnEnd dstPt237(Point(-8.01599, 132.608), 15);\n    connRef237->setDestEndpoint(dstPt237);\n    connRef237->setRoutingType((ConnType)2);\n\n    ConnRef *connRef238 = new ConnRef(router, 238);\n    ConnEnd srcPt238(Point(729.984, 520.608), 15);\n    connRef238->setSourceEndpoint(srcPt238);\n    ConnEnd dstPt238(Point(602.984, 520.608), 15);\n    connRef238->setDestEndpoint(dstPt238);\n    connRef238->setRoutingType((ConnType)2);\n\n    ConnRef *connRef227 = new ConnRef(router, 227);\n    ConnEnd srcPt227(Point(-8.01599, 100.608), 15);\n    connRef227->setSourceEndpoint(srcPt227);\n    ConnEnd dstPt227(Point(-8.01599, 132.608), 15);\n    connRef227->setDestEndpoint(dstPt227);\n    connRef227->setRoutingType((ConnType)2);\n\n    ConnRef *connRef281 = new ConnRef(router, 281);\n    ConnEnd srcPt281(Point(362.984, 735.608), 15);\n    connRef281->setSourceEndpoint(srcPt281);\n    ConnEnd dstPt281(Point(300.984, 735.608), 15);\n    connRef281->setDestEndpoint(dstPt281);\n    connRef281->setRoutingType((ConnType)2);\n\n    ConnRef *connRef221 = new ConnRef(router, 221);\n    ConnEnd srcPt221(Point(-8.01599, 197.608), 15);\n    connRef221->setSourceEndpoint(srcPt221);\n    ConnEnd dstPt221(Point(-8.01599, 132.608), 15);\n    connRef221->setDestEndpoint(dstPt221);\n    connRef221->setRoutingType((ConnType)2);\n\n    ConnRef *connRef304 = new ConnRef(router, 304);\n    ConnEnd srcPt304(Point(542.984, 470.608), 15);\n    connRef304->setSourceEndpoint(srcPt304);\n    ConnEnd dstPt304(Point(542.984, 520.608), 15);\n    connRef304->setDestEndpoint(dstPt304);\n    connRef304->setRoutingType((ConnType)2);\n\n    ConnRef *connRef305 = new ConnRef(router, 305);\n    ConnEnd srcPt305(Point(362.984, -353.392), 15);\n    connRef305->setSourceEndpoint(srcPt305);\n    ConnEnd dstPt305(Point(362.984, -303.392), 15);\n    connRef305->setDestEndpoint(dstPt305);\n    connRef305->setRoutingType((ConnType)2);\n\n    ConnRef *connRef319 = new ConnRef(router, 319);\n    ConnEnd srcPt319(Point(571.534, 184.608), 15);\n    connRef319->setSourceEndpoint(srcPt319);\n    ConnEnd dstPt319(Point(730.5, 44.6079), 4);\n    connRef319->setDestEndpoint(dstPt319);\n    connRef319->setRoutingType((ConnType)2);\n\n    ConnRef *connRef320 = new ConnRef(router, 320);\n    ConnEnd srcPt320(Point(798.746, 184.608), 15);\n    connRef320->setSourceEndpoint(srcPt320);\n    ConnEnd dstPt320(Point(730.5, 96.6079), 4);\n    connRef320->setDestEndpoint(dstPt320);\n    connRef320->setRoutingType((ConnType)2);\n\n    ConnRef *connRef251 = new ConnRef(router, 251);\n    ConnEnd srcPt251(Point(793.984, 889.608), 15);\n    connRef251->setSourceEndpoint(srcPt251);\n    ConnEnd dstPt251(Point(793.984, 949.008), 15);\n    connRef251->setDestEndpoint(dstPt251);\n    connRef251->setRoutingType((ConnType)2);\n\n    ConnRef *connRef261 = new ConnRef(router, 261);\n    ConnEnd srcPt261(Point(152.984, 694.465), 15);\n    connRef261->setSourceEndpoint(srcPt261);\n    ConnEnd dstPt261(Point(102.984, 683.608), 15);\n    connRef261->setDestEndpoint(dstPt261);\n    connRef261->setRoutingType((ConnType)2);\n\n    ConnRef *connRef262 = new ConnRef(router, 262);\n    ConnEnd srcPt262(Point(511.534, -209.392), 15);\n    connRef262->setSourceEndpoint(srcPt262);\n    ConnEnd dstPt262(Point(511.534, -159.392), 15);\n    connRef262->setDestEndpoint(dstPt262);\n    connRef262->setRoutingType((ConnType)2);\n\n    ConnRef *connRef257 = new ConnRef(router, 257);\n    ConnEnd srcPt257(Point(440.584, -314.392), 15);\n    connRef257->setSourceEndpoint(srcPt257);\n    ConnEnd dstPt257(Point(372.984, -303.392), 15);\n    connRef257->setDestEndpoint(dstPt257);\n    connRef257->setRoutingType((ConnType)2);\n\n    ConnRef *connRef233 = new ConnRef(router, 233);\n    ConnEnd srcPt233(Point(362.984, -385.392), 15);\n    connRef233->setSourceEndpoint(srcPt233);\n    ConnEnd dstPt233(Point(287.984, -314.392), 15);\n    connRef233->setDestEndpoint(dstPt233);\n    connRef233->setRoutingType((ConnType)2);\n\n    ConnRef *connRef263 = new ConnRef(router, 263);\n    ConnEnd srcPt263(Point(996.984, 526.108), 15);\n    connRef263->setSourceEndpoint(srcPt263);\n    ConnEnd dstPt263(Point(934.984, 526.108), 15);\n    connRef263->setDestEndpoint(dstPt263);\n    connRef263->setRoutingType((ConnType)2);\n\n    ConnRef *connRef287 = new ConnRef(router, 287);\n    ConnEnd srcPt287(Point(380.584, 186.608), 15);\n    connRef287->setSourceEndpoint(srcPt287);\n    ConnEnd dstPt287(Point(380.584, 236.608), 15);\n    connRef287->setDestEndpoint(dstPt287);\n    connRef287->setRoutingType((ConnType)2);\n\n    ConnRef *connRef218 = new ConnRef(router, 218);\n    ConnEnd srcPt218(Point(317.084, 309.608), 15);\n    connRef218->setSourceEndpoint(srcPt218);\n    ConnEnd dstPt218(Point(320.584, 184.608), 15);\n    connRef218->setDestEndpoint(dstPt218);\n    connRef218->setRoutingType((ConnType)2);\n\n    ConnRef *connRef267 = new ConnRef(router, 267);\n    ConnEnd srcPt267(Point(618.484, 1223.01), 15);\n    connRef267->setSourceEndpoint(srcPt267);\n    ConnEnd dstPt267(Point(556.484, 1223.01), 15);\n    connRef267->setDestEndpoint(dstPt267);\n    connRef267->setRoutingType((ConnType)2);\n\n    ConnRef *connRef268 = new ConnRef(router, 268);\n    ConnEnd srcPt268(Point(1127.98, 759.608), 15);\n    connRef268->setSourceEndpoint(srcPt268);\n    ConnEnd dstPt268(Point(1065.98, 759.608), 15);\n    connRef268->setDestEndpoint(dstPt268);\n    connRef268->setRoutingType((ConnType)2);\n\n    ConnRef *connRef278 = new ConnRef(router, 278);\n    ConnEnd srcPt278(Point(855.984, 735.608), 15);\n    connRef278->setSourceEndpoint(srcPt278);\n    ConnEnd dstPt278(Point(793.984, 735.608), 15);\n    connRef278->setDestEndpoint(dstPt278);\n    connRef278->setRoutingType((ConnType)2);\n\n    ConnRef *connRef299 = new ConnRef(router, 299);\n    ConnEnd srcPt299(Point(362.984, -445.392), 15);\n    connRef299->setSourceEndpoint(srcPt299);\n    ConnEnd dstPt299(Point(362.984, -395.392), 15);\n    connRef299->setDestEndpoint(dstPt299);\n    connRef299->setRoutingType((ConnType)2);\n\n    ConnRef *connRef300 = new ConnRef(router, 300);\n    ConnEnd srcPt300(Point(349.984, -261.392), 15);\n    connRef300->setSourceEndpoint(srcPt300);\n    ConnEnd dstPt300(Point(287.984, -261.392), 15);\n    connRef300->setDestEndpoint(dstPt300);\n    connRef300->setRoutingType((ConnType)2);\n\n    ConnRef *connRef302 = new ConnRef(router, 302);\n    ConnEnd srcPt302(Point(-14.016, 48.6079), 15);\n    connRef302->setSourceEndpoint(srcPt302);\n    ConnEnd dstPt302(Point(-76.016, 48.6079), 15);\n    connRef302->setDestEndpoint(dstPt302);\n    connRef302->setRoutingType((ConnType)2);\n\n    ConnRef *connRef303 = new ConnRef(router, 303);\n    ConnEnd srcPt303(Point(739.984, 470.608), 15);\n    connRef303->setSourceEndpoint(srcPt303);\n    ConnEnd dstPt303(Point(739.984, 520.608), 15);\n    connRef303->setDestEndpoint(dstPt303);\n    connRef303->setRoutingType((ConnType)2);\n\n    ConnRef *connRef204 = new ConnRef(router, 204);\n    ConnEnd srcPt204(Point(422.984, 725.608), 15);\n    connRef204->setSourceEndpoint(srcPt204);\n    ConnEnd dstPt204(Point(422.984, 683.608), 15);\n    connRef204->setDestEndpoint(dstPt204);\n    connRef204->setRoutingType((ConnType)2);\n\n    ConnRef *connRef205 = new ConnRef(router, 205);\n    ConnEnd srcPt205(Point(422.984, 745.608), 15);\n    connRef205->setSourceEndpoint(srcPt205);\n    ConnEnd dstPt205(Point(422.984, 837.608), 15);\n    connRef205->setDestEndpoint(dstPt205);\n    connRef205->setRoutingType((ConnType)2);\n\n    ConnRef *connRef207 = new ConnRef(router, 207);\n    ConnEnd srcPt207(Point(300.984, 745.608), 15);\n    connRef207->setSourceEndpoint(srcPt207);\n    ConnEnd dstPt207(Point(422.984, 837.608), 15);\n    connRef207->setDestEndpoint(dstPt207);\n    connRef207->setRoutingType((ConnType)2);\n\n    ConnRef *connRef208 = new ConnRef(router, 208);\n    ConnEnd srcPt208(Point(824, 569), 15);\n    connRef208->setSourceEndpoint(srcPt208);\n    ConnEnd dstPt208(Point(1065.98, 683.608), 15);\n    connRef208->setDestEndpoint(dstPt208);\n    connRef208->setRoutingType((ConnType)2);\n\n    ConnRef *connRef258 = new ConnRef(router, 258);\n    ConnEnd srcPt258(Point(352.984, -303.392), 15);\n    connRef258->setSourceEndpoint(srcPt258);\n    ConnEnd dstPt258(Point(287.984, -314.392), 15);\n    connRef258->setDestEndpoint(dstPt258);\n    connRef258->setRoutingType((ConnType)2);\n\n    ConnRef *connRef259 = new ConnRef(router, 259);\n    ConnEnd srcPt259(Point(79.984, -159.392), 15);\n    connRef259->setSourceEndpoint(srcPt259);\n    ConnEnd dstPt259(Point(287.984, -159.392), 15);\n    connRef259->setDestEndpoint(dstPt259);\n    connRef259->setRoutingType((ConnType)2);\n\n    ConnRef *connRef200 = new ConnRef(router, 200);\n    ConnEnd srcPt200(Point(793.984, 725.608), 15);\n    connRef200->setSourceEndpoint(srcPt200);\n    ConnEnd dstPt200(Point(793.984, 683.608), 15);\n    connRef200->setDestEndpoint(dstPt200);\n    connRef200->setRoutingType((ConnType)2);\n\n    ConnRef *connRef231 = new ConnRef(router, 231);\n    ConnEnd srcPt231(Point(440.584, -251.392), 15);\n    connRef231->setSourceEndpoint(srcPt231);\n    ConnEnd dstPt231(Point(440.584, -159.392), 15);\n    connRef231->setDestEndpoint(dstPt231);\n    connRef231->setRoutingType((ConnType)2);\n\n    ConnRef *connRef232 = new ConnRef(router, 232);\n    ConnEnd srcPt232(Point(440.584, -404.392), 15);\n    connRef232->setSourceEndpoint(srcPt232);\n    ConnEnd dstPt232(Point(440.584, -314.392), 15);\n    connRef232->setDestEndpoint(dstPt232);\n    connRef232->setRoutingType((ConnType)2);\n\n    ConnRef *connRef318 = new ConnRef(router, 318);\n    ConnEnd srcPt318(Point(440.584, -3.39214), 15);\n    connRef318->setSourceEndpoint(srcPt318);\n    ConnEnd dstPt318(Point(730.5, -7.39214), 4);\n    connRef318->setDestEndpoint(dstPt318);\n    connRef318->setRoutingType((ConnType)2);\n\n    ConnRef *connRef293 = new ConnRef(router, 293);\n    ConnEnd srcPt293(Point(53.984, 90.6079), 15);\n    connRef293->setSourceEndpoint(srcPt293);\n    ConnEnd dstPt293(Point(-8.01599, 90.6079), 15);\n    connRef293->setDestEndpoint(dstPt293);\n    connRef293->setRoutingType((ConnType)2);\n\n    ConnRef *connRef310 = new ConnRef(router, 310);\n    ConnEnd srcPt310(Point(-8.01599, -3.39214), 15);\n    connRef310->setSourceEndpoint(srcPt310);\n    ConnEnd dstPt310(Point(-8.01599, 80.6079), 15);\n    connRef310->setDestEndpoint(dstPt310);\n    connRef310->setRoutingType((ConnType)2);\n\n    ConnRef *connRef311 = new ConnRef(router, 311);\n    ConnEnd srcPt311(Point(440.584, -3.39214), 15);\n    connRef311->setSourceEndpoint(srcPt311);\n    ConnEnd dstPt311(Point(372.984, -3.39214), 15);\n    connRef311->setDestEndpoint(dstPt311);\n    connRef311->setRoutingType((ConnType)2);\n\n    ConnRef *connRef249 = new ConnRef(router, 249);\n    ConnEnd srcPt249(Point(933.984, 949.008), 15);\n    connRef249->setSourceEndpoint(srcPt249);\n    ConnEnd dstPt249(Point(1065.98, 903.608), 15);\n    connRef249->setDestEndpoint(dstPt249);\n    connRef249->setRoutingType((ConnType)2);\n\n    ConnRef *connRef250 = new ConnRef(router, 250);\n    ConnEnd srcPt250(Point(959.984, 683.608), 15);\n    connRef250->setSourceEndpoint(srcPt250);\n    ConnEnd dstPt250(Point(1065.98, 683.608), 15);\n    connRef250->setDestEndpoint(dstPt250);\n    connRef250->setRoutingType((ConnType)2);\n\n    ConnRef *connRef242 = new ConnRef(router, 242);\n    ConnEnd srcPt242(Point(287.984, -3.39214), 15);\n    connRef242->setSourceEndpoint(srcPt242);\n    ConnEnd dstPt242(Point(131.984, -3.39214), 15);\n    connRef242->setDestEndpoint(dstPt242);\n    connRef242->setRoutingType((ConnType)2);\n\n    ConnRef *connRef275 = new ConnRef(router, 275);\n    ConnEnd srcPt275(Point(855.984, 879.608), 15);\n    connRef275->setSourceEndpoint(srcPt275);\n    ConnEnd dstPt275(Point(793.984, 879.608), 15);\n    connRef275->setDestEndpoint(dstPt275);\n    connRef275->setRoutingType((ConnType)2);\n\n    ConnRef *connRef307 = new ConnRef(router, 307);\n    ConnEnd srcPt307(Point(440.584, -314.392), 15);\n    connRef307->setSourceEndpoint(srcPt307);\n    ConnEnd dstPt307(Point(511.534, -169.392), 15);\n    connRef307->setDestEndpoint(dstPt307);\n    connRef307->setRoutingType((ConnType)2);\n\n    ConnRef *connRef308 = new ConnRef(router, 308);\n    ConnEnd srcPt308(Point(798.746, 335.608), 15);\n    connRef308->setSourceEndpoint(srcPt308);\n    ConnEnd dstPt308(Point(848.746, 429.608), 15);\n    connRef308->setDestEndpoint(dstPt308);\n    connRef308->setRoutingType((ConnType)2);\n\n    ConnRef *connRef297 = new ConnRef(router, 297);\n    ConnEnd srcPt297(Point(502.584, -261.392), 15);\n    connRef297->setSourceEndpoint(srcPt297);\n    ConnEnd dstPt297(Point(440.584, -261.392), 15);\n    connRef297->setDestEndpoint(dstPt297);\n    connRef297->setRoutingType((ConnType)2);\n\n    ConnRef *connRef298 = new ConnRef(router, 298);\n    ConnEnd srcPt298(Point(502.584, -414.392), 15);\n    connRef298->setSourceEndpoint(srcPt298);\n    ConnEnd dstPt298(Point(440.584, -414.392), 15);\n    connRef298->setDestEndpoint(dstPt298);\n    connRef298->setRoutingType((ConnType)2);\n\n    ConnRef *connRef216 = new ConnRef(router, 216);\n    ConnEnd srcPt216(Point(-8.01599, 383.608), 15);\n    connRef216->setSourceEndpoint(srcPt216);\n    ConnEnd dstPt216(Point(-8.01599, 445.608), 15);\n    connRef216->setDestEndpoint(dstPt216);\n    connRef216->setRoutingType((ConnType)2);\n\n    ConnRef *connRef217 = new ConnRef(router, 217);\n    ConnEnd srcPt217(Point(370.584, 236.608), 15);\n    connRef217->setSourceEndpoint(srcPt217);\n    ConnEnd dstPt217(Point(320.584, 184.608), 15);\n    connRef217->setDestEndpoint(dstPt217);\n    connRef217->setRoutingType((ConnType)2);\n\n    ConnRef *connRef209 = new ConnRef(router, 209);\n    ConnEnd srcPt209(Point(542.984, 690.465), 15);\n    connRef209->setSourceEndpoint(srcPt209);\n    ConnEnd dstPt209(Point(793.984, 683.608), 15);\n    connRef209->setDestEndpoint(dstPt209);\n    connRef209->setRoutingType((ConnType)2);\n\n    router->processTransaction();\n    router->outputDiagram(\"output/overlappingRects\");\n    delete router;\n    return 0;\n};\n"
  },
  {
    "path": "cola/libavoid/tests/penaltyRerouting01.cpp",
    "content": "#include \"libavoid/libavoid.h\"\nusing namespace Avoid;\nint main(void) {\n    Router *router = new Router(OrthogonalRouting);\n    router->setRoutingParameter((RoutingParameter)0, 10);\n    router->setRoutingParameter((RoutingParameter)1, 0);\n    router->setRoutingParameter((RoutingParameter)2, 1e+09);\n    router->setRoutingParameter((RoutingParameter)3, 4000);\n    router->setRoutingParameter((RoutingParameter)4, 0);\n    router->setRoutingParameter((RoutingParameter)5, 0);\n    router->setRoutingParameter((RoutingParameter)6, 0);\n    router->setRoutingParameter((RoutingParameter)7, 4);\n    router->setRoutingParameter((RoutingParameter)8, 0);\n    router->setRoutingOption((RoutingOption)0, false);\n    router->setRoutingOption((RoutingOption)1, true);\n    router->setRoutingOption((RoutingOption)2, false);\n    router->setRoutingOption((RoutingOption)3, false);\n    router->setRoutingOption((RoutingOption)4, true);\n    router->setRoutingOption((RoutingOption)5, false);\n    router->setRoutingOption((RoutingOption)6, true);\n    Polygon polygon;\n    ConnRef *connRef = nullptr;\n    ConnEnd srcPt;\n    ConnEnd dstPt;\n    ConnEnd heConnPt;\n    PolyLine newRoute;\n\n    // shapeRef1\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(449, 491);\n    polygon.ps[1] = Point(479, 491);\n    polygon.ps[2] = Point(479, 521);\n    polygon.ps[3] = Point(449, 521);\n    new ShapeRef(router, polygon, 1);\n\n    // shapeRef1\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(449, 583);\n    polygon.ps[1] = Point(479, 583);\n    polygon.ps[2] = Point(479, 613);\n    polygon.ps[3] = Point(449, 613);\n    new ShapeRef(router, polygon, 1);\n\n    // shapeRef2\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(354, 583);\n    polygon.ps[1] = Point(384, 583);\n    polygon.ps[2] = Point(384, 613);\n    polygon.ps[3] = Point(354, 613);\n    new ShapeRef(router, polygon, 2);\n\n    // shapeRef3\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(354, 354);\n    polygon.ps[1] = Point(384, 354);\n    polygon.ps[2] = Point(384, 384);\n    polygon.ps[3] = Point(354, 384);\n    new ShapeRef(router, polygon, 3);\n\n    // shapeRef4\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(252.5, 354);\n    polygon.ps[1] = Point(282.5, 354);\n    polygon.ps[2] = Point(282.5, 384);\n    polygon.ps[3] = Point(252.5, 384);\n    new ShapeRef(router, polygon, 4);\n\n    // shapeRef5\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(252.5, 583);\n    polygon.ps[1] = Point(282.5, 583);\n    polygon.ps[2] = Point(282.5, 613);\n    polygon.ps[3] = Point(252.5, 613);\n    new ShapeRef(router, polygon, 5);\n\n    // shapeRef6\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(151, 583);\n    polygon.ps[1] = Point(181, 583);\n    polygon.ps[2] = Point(181, 613);\n    polygon.ps[3] = Point(151, 613);\n    new ShapeRef(router, polygon, 6);\n\n    // shapeRef7\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(151, 130);\n    polygon.ps[1] = Point(181, 130);\n    polygon.ps[2] = Point(181, 160);\n    polygon.ps[3] = Point(151, 160);\n    new ShapeRef(router, polygon, 7);\n\n    // shapeRef8\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(520, 491);\n    polygon.ps[1] = Point(550, 491);\n    polygon.ps[2] = Point(550, 521);\n    polygon.ps[3] = Point(520, 521);\n    new ShapeRef(router, polygon, 8);\n\n    // shapeRef9\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(520, 354);\n    polygon.ps[1] = Point(550, 354);\n    polygon.ps[2] = Point(550, 384);\n    polygon.ps[3] = Point(520, 384);\n    new ShapeRef(router, polygon, 9);\n\n    // shapeRef10\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(633, 354);\n    polygon.ps[1] = Point(663, 354);\n    polygon.ps[2] = Point(663, 384);\n    polygon.ps[3] = Point(633, 384);\n    new ShapeRef(router, polygon, 10);\n\n    // shapeRef11\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(633, 583);\n    polygon.ps[1] = Point(663, 583);\n    polygon.ps[2] = Point(663, 613);\n    polygon.ps[3] = Point(633, 613);\n    new ShapeRef(router, polygon, 11);\n\n    // shapeRef12\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(741, 583);\n    polygon.ps[1] = Point(771, 583);\n    polygon.ps[2] = Point(771, 613);\n    polygon.ps[3] = Point(741, 613);\n    new ShapeRef(router, polygon, 12);\n\n    // shapeRef13\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(741, 130);\n    polygon.ps[1] = Point(771, 130);\n    polygon.ps[2] = Point(771, 160);\n    polygon.ps[3] = Point(741, 160);\n    new ShapeRef(router, polygon, 13);\n\n    // shapeRef14\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(459.495, 481.99);\n    polygon.ps[1] = Point(468.505, 481.99);\n    polygon.ps[2] = Point(468.505, 491);\n    polygon.ps[3] = Point(459.495, 491);\n    new ShapeRef(router, polygon, 14);\n\n    // shapeRef15\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(212.495, 481.99);\n    polygon.ps[1] = Point(221.505, 481.99);\n    polygon.ps[2] = Point(221.505, 491);\n    polygon.ps[3] = Point(212.495, 491);\n    new ShapeRef(router, polygon, 15);\n\n    // shapeRef16\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(701.99, 481.99);\n    polygon.ps[1] = Point(711, 481.99);\n    polygon.ps[2] = Point(711, 491);\n    polygon.ps[3] = Point(701.99, 491);\n    new ShapeRef(router, polygon, 16);\n\n    // connRef17\n    connRef = new ConnRef(router, 17);\n    srcPt = ConnEnd(Point(464, 598), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(369, 598), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n    newRoute._id = 17;\n    newRoute.ps.resize(2);\n    newRoute.ps[0] = Point(464, 598);\n    newRoute.ps[1] = Point(369, 598);\n    connRef->setFixedRoute(newRoute);\n\n    // connRef18\n    connRef = new ConnRef(router, 18);\n    srcPt = ConnEnd(Point(267.5, 598), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(166, 598), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n    newRoute._id = 18;\n    newRoute.ps.resize(2);\n    newRoute.ps[0] = Point(267.5, 598);\n    newRoute.ps[1] = Point(166, 598);\n    connRef->setFixedRoute(newRoute);\n\n    // connRef19\n    connRef = new ConnRef(router, 19);\n    srcPt = ConnEnd(Point(369, 598), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(369, 369), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n    newRoute._id = 19;\n    newRoute.ps.resize(2);\n    newRoute.ps[0] = Point(369, 598);\n    newRoute.ps[1] = Point(369, 369);\n    connRef->setFixedRoute(newRoute);\n\n    // connRef20\n    connRef = new ConnRef(router, 20);\n    srcPt = ConnEnd(Point(464, 506), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(464, 598), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n    newRoute._id = 20;\n    newRoute.ps.resize(2);\n    newRoute.ps[0] = Point(464, 506);\n    newRoute.ps[1] = Point(464, 598);\n    connRef->setFixedRoute(newRoute);\n\n    // connRef21\n    connRef = new ConnRef(router, 21);\n    srcPt = ConnEnd(Point(756, 598), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(756, 145), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n    newRoute._id = 21;\n    newRoute.ps.resize(2);\n    newRoute.ps[0] = Point(756, 598);\n    newRoute.ps[1] = Point(756, 145);\n    connRef->setFixedRoute(newRoute);\n\n    // connRef22\n    connRef = new ConnRef(router, 22);\n    srcPt = ConnEnd(Point(369, 369), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(267.5, 369), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n    newRoute._id = 22;\n    newRoute.ps.resize(2);\n    newRoute.ps[0] = Point(369, 369);\n    newRoute.ps[1] = Point(267.5, 369);\n    connRef->setFixedRoute(newRoute);\n\n    // connRef23\n    connRef = new ConnRef(router, 23);\n    srcPt = ConnEnd(Point(166, 145), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(756, 145), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n    newRoute._id = 23;\n    newRoute.ps.resize(2);\n    newRoute.ps[0] = Point(166, 145);\n    newRoute.ps[1] = Point(756, 145);\n    connRef->setFixedRoute(newRoute);\n\n    // connRef24\n    connRef = new ConnRef(router, 24);\n    srcPt = ConnEnd(Point(464, 486.495), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(706.495, 486.495), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef25\n    connRef = new ConnRef(router, 25);\n    srcPt = ConnEnd(Point(535, 369), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(535, 506), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n    newRoute._id = 25;\n    newRoute.ps.resize(2);\n    newRoute.ps[0] = Point(535, 369);\n    newRoute.ps[1] = Point(535, 506);\n    connRef->setFixedRoute(newRoute);\n\n    // connRef26\n    connRef = new ConnRef(router, 26);\n    srcPt = ConnEnd(Point(648, 598), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(648, 369), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n    newRoute._id = 26;\n    newRoute.ps.resize(2);\n    newRoute.ps[0] = Point(648, 598);\n    newRoute.ps[1] = Point(648, 369);\n    connRef->setFixedRoute(newRoute);\n\n    // connRef27\n    connRef = new ConnRef(router, 27);\n    srcPt = ConnEnd(Point(464, 486.495), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(217, 486.495), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef28\n    connRef = new ConnRef(router, 28);\n    srcPt = ConnEnd(Point(648, 598), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(756, 598), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n    newRoute._id = 28;\n    newRoute.ps.resize(2);\n    newRoute.ps[0] = Point(648, 598);\n    newRoute.ps[1] = Point(756, 598);\n    connRef->setFixedRoute(newRoute);\n\n    // connRef29\n    connRef = new ConnRef(router, 29);\n    srcPt = ConnEnd(Point(166, 598), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(166, 145), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n    newRoute._id = 29;\n    newRoute.ps.resize(2);\n    newRoute.ps[0] = Point(166, 598);\n    newRoute.ps[1] = Point(166, 145);\n    connRef->setFixedRoute(newRoute);\n\n    // connRef30\n    connRef = new ConnRef(router, 30);\n    srcPt = ConnEnd(Point(648, 369), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(535, 369), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n    newRoute._id = 30;\n    newRoute.ps.resize(2);\n    newRoute.ps[0] = Point(648, 369);\n    newRoute.ps[1] = Point(535, 369);\n    connRef->setFixedRoute(newRoute);\n\n    // connRef31\n    connRef = new ConnRef(router, 31);\n    srcPt = ConnEnd(Point(267.5, 369), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(267.5, 598), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n    newRoute._id = 31;\n    newRoute.ps.resize(2);\n    newRoute.ps[0] = Point(267.5, 369);\n    newRoute.ps[1] = Point(267.5, 598);\n    connRef->setFixedRoute(newRoute);\n\n    // connRef32\n    connRef = new ConnRef(router, 32);\n    srcPt = ConnEnd(Point(535, 506), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(464, 506), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n    newRoute._id = 32;\n    newRoute.ps.resize(2);\n    newRoute.ps[0] = Point(535, 506);\n    newRoute.ps[1] = Point(464, 506);\n    connRef->setFixedRoute(newRoute);\n\n    router->processTransaction();\n    router->outputDiagram(\"output/penaltyRerouting01\");\n\n    int crossings = router->existsCrossings();\n\n    delete router;\n    return (crossings > 0) ? 1 : 0;\n};\n"
  },
  {
    "path": "cola/libavoid/tests/performance01.cpp",
    "content": "#include \"libavoid/libavoid.h\"\nusing namespace Avoid;\nint main(void) {\n    Router *router = new Router(OrthogonalRouting);\n    router->setRoutingParameter((RoutingParameter)0, 50);\n    router->setRoutingParameter((RoutingParameter)1, 0);\n    router->setRoutingParameter((RoutingParameter)2, 0);\n    router->setRoutingParameter((RoutingParameter)3, 4000);\n    router->setRoutingParameter((RoutingParameter)4, 0);\n    router->setRoutingParameter((RoutingParameter)5, 100);\n    router->setRoutingParameter((RoutingParameter)6, 0);\n    router->setRoutingParameter((RoutingParameter)7, 4);\n    router->setRoutingOption((RoutingOption)0, false);\n    router->setRoutingOption((RoutingOption)1, true);\n    router->setRoutingOption((RoutingOption)2, false);\n    router->setRoutingOption((RoutingOption)3, false);\n    Polygon polygon;\n    ConnRef *connRef = nullptr;\n    ConnEnd srcPt;\n    ConnEnd dstPt;\n    // shapeRef1\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(1015.25, 612.918);\n    polygon.ps[1] = Point(1015.25, 632.918);\n    polygon.ps[2] = Point(995.246, 632.918);\n    polygon.ps[3] = Point(995.246, 612.918);\n    new ShapeRef(router, polygon, 1);\n\n    // shapeRef2\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(859.246, 612.918);\n    polygon.ps[1] = Point(859.246, 632.918);\n    polygon.ps[2] = Point(839.246, 632.918);\n    polygon.ps[3] = Point(839.246, 612.918);\n    new ShapeRef(router, polygon, 2);\n\n    // shapeRef3\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(703.246, 612.918);\n    polygon.ps[1] = Point(703.246, 632.918);\n    polygon.ps[2] = Point(683.246, 632.918);\n    polygon.ps[3] = Point(683.246, 612.918);\n    new ShapeRef(router, polygon, 3);\n\n    // shapeRef4\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(547.246, 612.918);\n    polygon.ps[1] = Point(547.246, 632.918);\n    polygon.ps[2] = Point(527.246, 632.918);\n    polygon.ps[3] = Point(527.246, 612.918);\n    new ShapeRef(router, polygon, 4);\n\n    // shapeRef5\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(391.246, 612.918);\n    polygon.ps[1] = Point(391.246, 632.918);\n    polygon.ps[2] = Point(371.246, 632.918);\n    polygon.ps[3] = Point(371.246, 612.918);\n    new ShapeRef(router, polygon, 5);\n\n    // shapeRef6\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(235.246, 612.918);\n    polygon.ps[1] = Point(235.246, 632.918);\n    polygon.ps[2] = Point(215.246, 632.918);\n    polygon.ps[3] = Point(215.246, 612.918);\n    new ShapeRef(router, polygon, 6);\n\n    // shapeRef7\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(77.2456, 644.918);\n    polygon.ps[1] = Point(77.2456, 664.918);\n    polygon.ps[2] = Point(57.2456, 664.918);\n    polygon.ps[3] = Point(57.2456, 644.918);\n    new ShapeRef(router, polygon, 7);\n\n    // shapeRef8\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(1223.25, 656.918);\n    polygon.ps[1] = Point(1223.25, 696.918);\n    polygon.ps[2] = Point(1183.25, 696.918);\n    polygon.ps[3] = Point(1183.25, 656.918);\n    new ShapeRef(router, polygon, 8);\n\n    // shapeRef9\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(1223.25, 538.918);\n    polygon.ps[1] = Point(1223.25, 578.918);\n    polygon.ps[2] = Point(1183.25, 578.918);\n    polygon.ps[3] = Point(1183.25, 538.918);\n    new ShapeRef(router, polygon, 9);\n\n    // shapeRef10\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(1223.25, 427.955);\n    polygon.ps[1] = Point(1223.25, 467.955);\n    polygon.ps[2] = Point(1183.25, 467.955);\n    polygon.ps[3] = Point(1183.25, 427.955);\n    new ShapeRef(router, polygon, 10);\n\n    // shapeRef11\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(1223.25, 312.918);\n    polygon.ps[1] = Point(1223.25, 352.918);\n    polygon.ps[2] = Point(1183.25, 352.918);\n    polygon.ps[3] = Point(1183.25, 312.918);\n    new ShapeRef(router, polygon, 11);\n\n    // shapeRef12\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(1469.25, 730.918);\n    polygon.ps[1] = Point(1469.25, 770.918);\n    polygon.ps[2] = Point(1429.25, 770.918);\n    polygon.ps[3] = Point(1429.25, 730.918);\n    new ShapeRef(router, polygon, 12);\n\n    // shapeRef13\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(1223.25, 730.918);\n    polygon.ps[1] = Point(1223.25, 770.918);\n    polygon.ps[2] = Point(1183.25, 770.918);\n    polygon.ps[3] = Point(1183.25, 730.918);\n    new ShapeRef(router, polygon, 13);\n\n    // shapeRef14\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(1191.25, 730.918);\n    polygon.ps[1] = Point(1191.25, 770.918);\n    polygon.ps[2] = Point(1151.25, 770.918);\n    polygon.ps[3] = Point(1151.25, 730.918);\n    new ShapeRef(router, polygon, 14);\n\n    // shapeRef15\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(1469.25, 656.918);\n    polygon.ps[1] = Point(1469.25, 696.918);\n    polygon.ps[2] = Point(1429.25, 696.918);\n    polygon.ps[3] = Point(1429.25, 656.918);\n    new ShapeRef(router, polygon, 15);\n\n    // shapeRef16\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(1191.25, 656.918);\n    polygon.ps[1] = Point(1191.25, 696.918);\n    polygon.ps[2] = Point(1151.25, 696.918);\n    polygon.ps[3] = Point(1151.25, 656.918);\n    new ShapeRef(router, polygon, 16);\n\n    // shapeRef17\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(843.246, 730.918);\n    polygon.ps[1] = Point(843.246, 770.918);\n    polygon.ps[2] = Point(803.246, 770.918);\n    polygon.ps[3] = Point(803.246, 730.918);\n    new ShapeRef(router, polygon, 17);\n\n    // shapeRef18\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(693.933, 730.918);\n    polygon.ps[1] = Point(693.933, 770.918);\n    polygon.ps[2] = Point(653.933, 770.918);\n    polygon.ps[3] = Point(653.933, 730.918);\n    new ShapeRef(router, polygon, 18);\n\n    // shapeRef19\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(547.246, 730.918);\n    polygon.ps[1] = Point(547.246, 770.918);\n    polygon.ps[2] = Point(507.246, 770.918);\n    polygon.ps[3] = Point(507.246, 730.918);\n    new ShapeRef(router, polygon, 19);\n\n    // shapeRef20\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(391.246, 730.918);\n    polygon.ps[1] = Point(391.246, 770.918);\n    polygon.ps[2] = Point(351.246, 770.918);\n    polygon.ps[3] = Point(351.246, 730.918);\n    new ShapeRef(router, polygon, 20);\n\n    // shapeRef21\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(811.246, 708.918);\n    polygon.ps[1] = Point(811.246, 728.918);\n    polygon.ps[2] = Point(791.246, 728.918);\n    polygon.ps[3] = Point(791.246, 708.918);\n    new ShapeRef(router, polygon, 21);\n\n    // shapeRef22\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(1171.25, 708.918);\n    polygon.ps[1] = Point(1171.25, 728.918);\n    polygon.ps[2] = Point(1151.25, 728.918);\n    polygon.ps[3] = Point(1151.25, 708.918);\n    new ShapeRef(router, polygon, 22);\n\n    // shapeRef23\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(1183.25, 708.918);\n    polygon.ps[1] = Point(1183.25, 728.918);\n    polygon.ps[2] = Point(1163.25, 728.918);\n    polygon.ps[3] = Point(1163.25, 708.918);\n    new ShapeRef(router, polygon, 23);\n\n    // shapeRef24\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(537.246, 708.918);\n    polygon.ps[1] = Point(537.246, 728.918);\n    polygon.ps[2] = Point(517.246, 728.918);\n    polygon.ps[3] = Point(517.246, 708.918);\n    new ShapeRef(router, polygon, 24);\n\n    // shapeRef25\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(381.246, 708.918);\n    polygon.ps[1] = Point(381.246, 728.918);\n    polygon.ps[2] = Point(361.246, 728.918);\n    polygon.ps[3] = Point(361.246, 708.918);\n    new ShapeRef(router, polygon, 25);\n\n    // shapeRef26\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(1381.25, 666.918);\n    polygon.ps[1] = Point(1381.25, 686.918);\n    polygon.ps[2] = Point(1361.25, 686.918);\n    polygon.ps[3] = Point(1361.25, 666.918);\n    new ShapeRef(router, polygon, 26);\n\n    // shapeRef27\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(1303.25, 565.942);\n    polygon.ps[1] = Point(1303.25, 585.942);\n    polygon.ps[2] = Point(1283.25, 585.942);\n    polygon.ps[3] = Point(1283.25, 565.942);\n    new ShapeRef(router, polygon, 27);\n\n    // shapeRef28\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(1015.25, 644.918);\n    polygon.ps[1] = Point(1015.25, 664.918);\n    polygon.ps[2] = Point(995.246, 664.918);\n    polygon.ps[3] = Point(995.246, 644.918);\n    new ShapeRef(router, polygon, 28);\n\n    // shapeRef29\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(859.246, 644.918);\n    polygon.ps[1] = Point(859.246, 664.918);\n    polygon.ps[2] = Point(839.246, 664.918);\n    polygon.ps[3] = Point(839.246, 644.918);\n    new ShapeRef(router, polygon, 29);\n\n    // shapeRef30\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(703.246, 644.918);\n    polygon.ps[1] = Point(703.246, 664.918);\n    polygon.ps[2] = Point(683.246, 664.918);\n    polygon.ps[3] = Point(683.246, 644.918);\n    new ShapeRef(router, polygon, 30);\n\n    // shapeRef31\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(547.246, 644.918);\n    polygon.ps[1] = Point(547.246, 664.918);\n    polygon.ps[2] = Point(527.246, 664.918);\n    polygon.ps[3] = Point(527.246, 644.918);\n    new ShapeRef(router, polygon, 31);\n\n    // shapeRef32\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(391.246, 644.918);\n    polygon.ps[1] = Point(391.246, 664.918);\n    polygon.ps[2] = Point(371.246, 664.918);\n    polygon.ps[3] = Point(371.246, 644.918);\n    new ShapeRef(router, polygon, 32);\n\n    // shapeRef33\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(235.246, 644.918);\n    polygon.ps[1] = Point(235.246, 664.918);\n    polygon.ps[2] = Point(215.246, 664.918);\n    polygon.ps[3] = Point(215.246, 644.918);\n    new ShapeRef(router, polygon, 33);\n\n    // shapeRef34\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(77.2456, 612.918);\n    polygon.ps[1] = Point(77.2456, 632.918);\n    polygon.ps[2] = Point(57.2456, 632.918);\n    polygon.ps[3] = Point(57.2456, 612.918);\n    new ShapeRef(router, polygon, 34);\n\n    // shapeRef35\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(1303.25, 504.918);\n    polygon.ps[1] = Point(1303.25, 524.918);\n    polygon.ps[2] = Point(1283.25, 524.918);\n    polygon.ps[3] = Point(1283.25, 504.918);\n    new ShapeRef(router, polygon, 35);\n\n    // shapeRef36\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(1015.25, 526.918);\n    polygon.ps[1] = Point(1015.25, 546.918);\n    polygon.ps[2] = Point(995.246, 546.918);\n    polygon.ps[3] = Point(995.246, 526.918);\n    new ShapeRef(router, polygon, 36);\n\n    // shapeRef37\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(859.246, 526.918);\n    polygon.ps[1] = Point(859.246, 546.918);\n    polygon.ps[2] = Point(839.246, 546.918);\n    polygon.ps[3] = Point(839.246, 526.918);\n    new ShapeRef(router, polygon, 37);\n\n    // shapeRef38\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(703.246, 526.918);\n    polygon.ps[1] = Point(703.246, 546.918);\n    polygon.ps[2] = Point(683.246, 546.918);\n    polygon.ps[3] = Point(683.246, 526.918);\n    new ShapeRef(router, polygon, 38);\n\n    // shapeRef39\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(547.246, 526.918);\n    polygon.ps[1] = Point(547.246, 546.918);\n    polygon.ps[2] = Point(527.246, 546.918);\n    polygon.ps[3] = Point(527.246, 526.918);\n    new ShapeRef(router, polygon, 39);\n\n    // shapeRef40\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(391.246, 526.918);\n    polygon.ps[1] = Point(391.246, 546.918);\n    polygon.ps[2] = Point(371.246, 546.918);\n    polygon.ps[3] = Point(371.246, 526.918);\n    new ShapeRef(router, polygon, 40);\n\n    // shapeRef41\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(235.246, 526.918);\n    polygon.ps[1] = Point(235.246, 546.918);\n    polygon.ps[2] = Point(215.246, 546.918);\n    polygon.ps[3] = Point(215.246, 526.918);\n    new ShapeRef(router, polygon, 41);\n\n    // shapeRef42\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(77.2456, 526.918);\n    polygon.ps[1] = Point(77.2456, 546.918);\n    polygon.ps[2] = Point(57.2456, 546.918);\n    polygon.ps[3] = Point(57.2456, 526.918);\n    new ShapeRef(router, polygon, 42);\n\n    // shapeRef43\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(1303.25, 278.918);\n    polygon.ps[1] = Point(1303.25, 298.918);\n    polygon.ps[2] = Point(1283.25, 298.918);\n    polygon.ps[3] = Point(1283.25, 278.918);\n    new ShapeRef(router, polygon, 43);\n\n    // shapeRef44\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(1093.25, 666.918);\n    polygon.ps[1] = Point(1093.25, 686.918);\n    polygon.ps[2] = Point(1073.25, 686.918);\n    polygon.ps[3] = Point(1073.25, 666.918);\n    new ShapeRef(router, polygon, 44);\n\n    // shapeRef45\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(1303.25, 408.918);\n    polygon.ps[1] = Point(1303.25, 428.918);\n    polygon.ps[2] = Point(1283.25, 428.918);\n    polygon.ps[3] = Point(1283.25, 408.918);\n    new ShapeRef(router, polygon, 45);\n\n    // shapeRef46\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(1303.25, 708.918);\n    polygon.ps[1] = Point(1303.25, 728.918);\n    polygon.ps[2] = Point(1283.25, 728.918);\n    polygon.ps[3] = Point(1283.25, 708.918);\n    new ShapeRef(router, polygon, 46);\n\n    // shapeRef47\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(1459.25, 708.918);\n    polygon.ps[1] = Point(1459.25, 728.918);\n    polygon.ps[2] = Point(1439.25, 728.918);\n    polygon.ps[3] = Point(1439.25, 708.918);\n    new ShapeRef(router, polygon, 47);\n\n    // shapeRef48\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(655.246, 708.918);\n    polygon.ps[1] = Point(655.246, 728.918);\n    polygon.ps[2] = Point(635.246, 728.918);\n    polygon.ps[3] = Point(635.246, 708.918);\n    new ShapeRef(router, polygon, 48);\n\n    // shapeRef49\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(859.246, 708.918);\n    polygon.ps[1] = Point(859.246, 728.918);\n    polygon.ps[2] = Point(839.246, 728.918);\n    polygon.ps[3] = Point(839.246, 708.918);\n    new ShapeRef(router, polygon, 49);\n\n    // shapeRef50\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(77.2456, 22.9179);\n    polygon.ps[1] = Point(77.2456, 42.9179);\n    polygon.ps[2] = Point(57.2456, 42.9179);\n    polygon.ps[3] = Point(57.2456, 22.9179);\n    new ShapeRef(router, polygon, 50);\n\n    // shapeRef51\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(77.2456, 300.918);\n    polygon.ps[1] = Point(77.2456, 320.918);\n    polygon.ps[2] = Point(57.2456, 320.918);\n    polygon.ps[3] = Point(57.2456, 300.918);\n    new ShapeRef(router, polygon, 51);\n\n    // shapeRef52\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(1015.25, 278.918);\n    polygon.ps[1] = Point(1015.25, 298.918);\n    polygon.ps[2] = Point(995.246, 298.918);\n    polygon.ps[3] = Point(995.246, 278.918);\n    new ShapeRef(router, polygon, 52);\n\n    // shapeRef53\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(859.246, 278.918);\n    polygon.ps[1] = Point(859.246, 298.918);\n    polygon.ps[2] = Point(839.246, 298.918);\n    polygon.ps[3] = Point(839.246, 278.918);\n    new ShapeRef(router, polygon, 53);\n\n    // shapeRef54\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(703.246, 278.918);\n    polygon.ps[1] = Point(703.246, 298.918);\n    polygon.ps[2] = Point(683.246, 298.918);\n    polygon.ps[3] = Point(683.246, 278.918);\n    new ShapeRef(router, polygon, 54);\n\n    // shapeRef55\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(547.246, 278.918);\n    polygon.ps[1] = Point(547.246, 298.918);\n    polygon.ps[2] = Point(527.246, 298.918);\n    polygon.ps[3] = Point(527.246, 278.918);\n    new ShapeRef(router, polygon, 55);\n\n    // shapeRef56\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(391.246, 278.918);\n    polygon.ps[1] = Point(391.246, 298.918);\n    polygon.ps[2] = Point(371.246, 298.918);\n    polygon.ps[3] = Point(371.246, 278.918);\n    new ShapeRef(router, polygon, 56);\n\n    // shapeRef57\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(235.246, 278.918);\n    polygon.ps[1] = Point(235.246, 298.918);\n    polygon.ps[2] = Point(215.246, 298.918);\n    polygon.ps[3] = Point(215.246, 278.918);\n    new ShapeRef(router, polygon, 57);\n\n    // shapeRef58\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(1047.75, 767.422);\n    polygon.ps[1] = Point(1047.75, 802.422);\n    polygon.ps[2] = Point(910.746, 802.422);\n    polygon.ps[3] = Point(910.746, 767.422);\n    new ShapeRef(router, polygon, 58);\n\n    // shapeRef59\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(207.246, -128.082);\n    polygon.ps[1] = Point(207.246, -93.0821);\n    polygon.ps[2] = Point(-12.7544, -93.0821);\n    polygon.ps[3] = Point(-12.7544, -128.082);\n    new ShapeRef(router, polygon, 59);\n\n    // shapeRef60\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(590.455, 4.91795);\n    polygon.ps[1] = Point(590.455, 64.9179);\n    polygon.ps[2] = Point(312.455, 64.9179);\n    polygon.ps[3] = Point(312.455, 4.91795);\n    new ShapeRef(router, polygon, 60);\n\n    // shapeRef61\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(222.246, -101.082);\n    polygon.ps[1] = Point(222.246, -41.0821);\n    polygon.ps[2] = Point(-12.7544, -41.0821);\n    polygon.ps[3] = Point(-12.7544, -101.082);\n    new ShapeRef(router, polygon, 61);\n\n    // shapeRef62\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(1015.25, 708.918);\n    polygon.ps[1] = Point(1015.25, 728.918);\n    polygon.ps[2] = Point(995.246, 728.918);\n    polygon.ps[3] = Point(995.246, 708.918);\n    new ShapeRef(router, polygon, 62);\n\n    // shapeRef63\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(967.246, 676.918);\n    polygon.ps[1] = Point(967.246, 696.918);\n    polygon.ps[2] = Point(947.246, 696.918);\n    polygon.ps[3] = Point(947.246, 676.918);\n    new ShapeRef(router, polygon, 63);\n\n    // shapeRef64\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(1015.25, 580.918);\n    polygon.ps[1] = Point(1015.25, 600.918);\n    polygon.ps[2] = Point(995.246, 600.918);\n    polygon.ps[3] = Point(995.246, 580.918);\n    new ShapeRef(router, polygon, 64);\n\n    // shapeRef65\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(967.246, 612.918);\n    polygon.ps[1] = Point(967.246, 632.918);\n    polygon.ps[2] = Point(947.246, 632.918);\n    polygon.ps[3] = Point(947.246, 612.918);\n    new ShapeRef(router, polygon, 65);\n\n    // shapeRef66\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(967.246, 580.918);\n    polygon.ps[1] = Point(967.246, 600.918);\n    polygon.ps[2] = Point(947.246, 600.918);\n    polygon.ps[3] = Point(947.246, 580.918);\n    new ShapeRef(router, polygon, 66);\n\n    // shapeRef67\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(967.246, 504.918);\n    polygon.ps[1] = Point(967.246, 524.918);\n    polygon.ps[2] = Point(947.246, 524.918);\n    polygon.ps[3] = Point(947.246, 504.918);\n    new ShapeRef(router, polygon, 67);\n\n    // shapeRef68\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(967.246, 472.918);\n    polygon.ps[1] = Point(967.246, 492.918);\n    polygon.ps[2] = Point(947.246, 492.918);\n    polygon.ps[3] = Point(947.246, 472.918);\n    new ShapeRef(router, polygon, 68);\n\n    // shapeRef69\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(1015.25, 408.918);\n    polygon.ps[1] = Point(1015.25, 428.918);\n    polygon.ps[2] = Point(995.246, 428.918);\n    polygon.ps[3] = Point(995.246, 408.918);\n    new ShapeRef(router, polygon, 69);\n\n    // shapeRef70\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(967.246, 408.918);\n    polygon.ps[1] = Point(967.246, 428.918);\n    polygon.ps[2] = Point(947.246, 428.918);\n    polygon.ps[3] = Point(947.246, 408.918);\n    new ShapeRef(router, polygon, 70);\n\n    // shapeRef71\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(967.246, 376.918);\n    polygon.ps[1] = Point(967.246, 396.918);\n    polygon.ps[2] = Point(947.246, 396.918);\n    polygon.ps[3] = Point(947.246, 376.918);\n    new ShapeRef(router, polygon, 71);\n\n    // shapeRef72\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(1015.25, 246.918);\n    polygon.ps[1] = Point(1015.25, 266.918);\n    polygon.ps[2] = Point(995.246, 266.918);\n    polygon.ps[3] = Point(995.246, 246.918);\n    new ShapeRef(router, polygon, 72);\n\n    // shapeRef73\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(967.246, 268.918);\n    polygon.ps[1] = Point(967.246, 288.918);\n    polygon.ps[2] = Point(947.246, 288.918);\n    polygon.ps[3] = Point(947.246, 268.918);\n    new ShapeRef(router, polygon, 73);\n\n    // shapeRef74\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(967.246, 236.918);\n    polygon.ps[1] = Point(967.246, 256.918);\n    polygon.ps[2] = Point(947.246, 256.918);\n    polygon.ps[3] = Point(947.246, 236.918);\n    new ShapeRef(router, polygon, 74);\n\n    // shapeRef75\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(859.246, 580.918);\n    polygon.ps[1] = Point(859.246, 600.918);\n    polygon.ps[2] = Point(839.246, 600.918);\n    polygon.ps[3] = Point(839.246, 580.918);\n    new ShapeRef(router, polygon, 75);\n\n    // shapeRef76\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(811.246, 612.918);\n    polygon.ps[1] = Point(811.246, 632.918);\n    polygon.ps[2] = Point(791.246, 632.918);\n    polygon.ps[3] = Point(791.246, 612.918);\n    new ShapeRef(router, polygon, 76);\n\n    // shapeRef77\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(811.246, 580.918);\n    polygon.ps[1] = Point(811.246, 600.918);\n    polygon.ps[2] = Point(791.246, 600.918);\n    polygon.ps[3] = Point(791.246, 580.918);\n    new ShapeRef(router, polygon, 77);\n\n    // shapeRef78\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(811.246, 504.918);\n    polygon.ps[1] = Point(811.246, 524.918);\n    polygon.ps[2] = Point(791.246, 524.918);\n    polygon.ps[3] = Point(791.246, 504.918);\n    new ShapeRef(router, polygon, 78);\n\n    // shapeRef79\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(811.246, 472.918);\n    polygon.ps[1] = Point(811.246, 492.918);\n    polygon.ps[2] = Point(791.246, 492.918);\n    polygon.ps[3] = Point(791.246, 472.918);\n    new ShapeRef(router, polygon, 79);\n\n    // shapeRef80\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(859.246, 408.918);\n    polygon.ps[1] = Point(859.246, 428.918);\n    polygon.ps[2] = Point(839.246, 428.918);\n    polygon.ps[3] = Point(839.246, 408.918);\n    new ShapeRef(router, polygon, 80);\n\n    // shapeRef81\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(811.246, 408.918);\n    polygon.ps[1] = Point(811.246, 428.918);\n    polygon.ps[2] = Point(791.246, 428.918);\n    polygon.ps[3] = Point(791.246, 408.918);\n    new ShapeRef(router, polygon, 81);\n\n    // shapeRef82\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(811.246, 376.918);\n    polygon.ps[1] = Point(811.246, 396.918);\n    polygon.ps[2] = Point(791.246, 396.918);\n    polygon.ps[3] = Point(791.246, 376.918);\n    new ShapeRef(router, polygon, 82);\n\n    // shapeRef83\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(859.246, 246.918);\n    polygon.ps[1] = Point(859.246, 266.918);\n    polygon.ps[2] = Point(839.246, 266.918);\n    polygon.ps[3] = Point(839.246, 246.918);\n    new ShapeRef(router, polygon, 83);\n\n    // shapeRef84\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(811.246, 268.918);\n    polygon.ps[1] = Point(811.246, 288.918);\n    polygon.ps[2] = Point(791.246, 288.918);\n    polygon.ps[3] = Point(791.246, 268.918);\n    new ShapeRef(router, polygon, 84);\n\n    // shapeRef85\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(811.246, 236.918);\n    polygon.ps[1] = Point(811.246, 256.918);\n    polygon.ps[2] = Point(791.246, 256.918);\n    polygon.ps[3] = Point(791.246, 236.918);\n    new ShapeRef(router, polygon, 85);\n\n    // shapeRef86\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(703.246, 580.918);\n    polygon.ps[1] = Point(703.246, 600.918);\n    polygon.ps[2] = Point(683.246, 600.918);\n    polygon.ps[3] = Point(683.246, 580.918);\n    new ShapeRef(router, polygon, 86);\n\n    // shapeRef87\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(655.246, 612.918);\n    polygon.ps[1] = Point(655.246, 632.918);\n    polygon.ps[2] = Point(635.246, 632.918);\n    polygon.ps[3] = Point(635.246, 612.918);\n    new ShapeRef(router, polygon, 87);\n\n    // shapeRef88\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(655.246, 580.918);\n    polygon.ps[1] = Point(655.246, 600.918);\n    polygon.ps[2] = Point(635.246, 600.918);\n    polygon.ps[3] = Point(635.246, 580.918);\n    new ShapeRef(router, polygon, 88);\n\n    // shapeRef89\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(655.246, 504.918);\n    polygon.ps[1] = Point(655.246, 524.918);\n    polygon.ps[2] = Point(635.246, 524.918);\n    polygon.ps[3] = Point(635.246, 504.918);\n    new ShapeRef(router, polygon, 89);\n\n    // shapeRef90\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(655.246, 472.918);\n    polygon.ps[1] = Point(655.246, 492.918);\n    polygon.ps[2] = Point(635.246, 492.918);\n    polygon.ps[3] = Point(635.246, 472.918);\n    new ShapeRef(router, polygon, 90);\n\n    // shapeRef91\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(703.246, 408.918);\n    polygon.ps[1] = Point(703.246, 428.918);\n    polygon.ps[2] = Point(683.246, 428.918);\n    polygon.ps[3] = Point(683.246, 408.918);\n    new ShapeRef(router, polygon, 91);\n\n    // shapeRef92\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(655.246, 408.918);\n    polygon.ps[1] = Point(655.246, 428.918);\n    polygon.ps[2] = Point(635.246, 428.918);\n    polygon.ps[3] = Point(635.246, 408.918);\n    new ShapeRef(router, polygon, 92);\n\n    // shapeRef93\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(655.246, 376.918);\n    polygon.ps[1] = Point(655.246, 396.918);\n    polygon.ps[2] = Point(635.246, 396.918);\n    polygon.ps[3] = Point(635.246, 376.918);\n    new ShapeRef(router, polygon, 93);\n\n    // shapeRef94\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(703.246, 246.918);\n    polygon.ps[1] = Point(703.246, 266.918);\n    polygon.ps[2] = Point(683.246, 266.918);\n    polygon.ps[3] = Point(683.246, 246.918);\n    new ShapeRef(router, polygon, 94);\n\n    // shapeRef95\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(655.246, 268.918);\n    polygon.ps[1] = Point(655.246, 288.918);\n    polygon.ps[2] = Point(635.246, 288.918);\n    polygon.ps[3] = Point(635.246, 268.918);\n    new ShapeRef(router, polygon, 95);\n\n    // shapeRef96\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(655.246, 236.918);\n    polygon.ps[1] = Point(655.246, 256.918);\n    polygon.ps[2] = Point(635.246, 256.918);\n    polygon.ps[3] = Point(635.246, 236.918);\n    new ShapeRef(router, polygon, 96);\n\n    // shapeRef97\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(547.246, 580.918);\n    polygon.ps[1] = Point(547.246, 600.918);\n    polygon.ps[2] = Point(527.246, 600.918);\n    polygon.ps[3] = Point(527.246, 580.918);\n    new ShapeRef(router, polygon, 97);\n\n    // shapeRef98\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(499.246, 612.918);\n    polygon.ps[1] = Point(499.246, 632.918);\n    polygon.ps[2] = Point(479.246, 632.918);\n    polygon.ps[3] = Point(479.246, 612.918);\n    new ShapeRef(router, polygon, 98);\n\n    // shapeRef99\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(499.246, 580.918);\n    polygon.ps[1] = Point(499.246, 600.918);\n    polygon.ps[2] = Point(479.246, 600.918);\n    polygon.ps[3] = Point(479.246, 580.918);\n    new ShapeRef(router, polygon, 99);\n\n    // shapeRef100\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(547.246, 476.951);\n    polygon.ps[1] = Point(547.246, 496.951);\n    polygon.ps[2] = Point(527.246, 496.951);\n    polygon.ps[3] = Point(527.246, 476.951);\n    new ShapeRef(router, polygon, 100);\n\n    // shapeRef101\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(499.246, 504.918);\n    polygon.ps[1] = Point(499.246, 524.918);\n    polygon.ps[2] = Point(479.246, 524.918);\n    polygon.ps[3] = Point(479.246, 504.918);\n    new ShapeRef(router, polygon, 101);\n\n    // shapeRef102\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(499.246, 472.918);\n    polygon.ps[1] = Point(499.246, 492.918);\n    polygon.ps[2] = Point(479.246, 492.918);\n    polygon.ps[3] = Point(479.246, 472.918);\n    new ShapeRef(router, polygon, 102);\n\n    // shapeRef103\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(547.246, 408.918);\n    polygon.ps[1] = Point(547.246, 428.918);\n    polygon.ps[2] = Point(527.246, 428.918);\n    polygon.ps[3] = Point(527.246, 408.918);\n    new ShapeRef(router, polygon, 103);\n\n    // shapeRef104\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(499.246, 408.918);\n    polygon.ps[1] = Point(499.246, 428.918);\n    polygon.ps[2] = Point(479.246, 428.918);\n    polygon.ps[3] = Point(479.246, 408.918);\n    new ShapeRef(router, polygon, 104);\n\n    // shapeRef105\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(499.246, 376.918);\n    polygon.ps[1] = Point(499.246, 396.918);\n    polygon.ps[2] = Point(479.246, 396.918);\n    polygon.ps[3] = Point(479.246, 376.918);\n    new ShapeRef(router, polygon, 105);\n\n    // shapeRef106\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(547.246, 246.918);\n    polygon.ps[1] = Point(547.246, 266.918);\n    polygon.ps[2] = Point(527.246, 266.918);\n    polygon.ps[3] = Point(527.246, 246.918);\n    new ShapeRef(router, polygon, 106);\n\n    // shapeRef107\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(499.246, 268.918);\n    polygon.ps[1] = Point(499.246, 288.918);\n    polygon.ps[2] = Point(479.246, 288.918);\n    polygon.ps[3] = Point(479.246, 268.918);\n    new ShapeRef(router, polygon, 107);\n\n    // shapeRef108\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(499.246, 236.918);\n    polygon.ps[1] = Point(499.246, 256.918);\n    polygon.ps[2] = Point(479.246, 256.918);\n    polygon.ps[3] = Point(479.246, 236.918);\n    new ShapeRef(router, polygon, 108);\n\n    // shapeRef109\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(391.246, 580.918);\n    polygon.ps[1] = Point(391.246, 600.918);\n    polygon.ps[2] = Point(371.246, 600.918);\n    polygon.ps[3] = Point(371.246, 580.918);\n    new ShapeRef(router, polygon, 109);\n\n    // shapeRef110\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(343.246, 612.918);\n    polygon.ps[1] = Point(343.246, 632.918);\n    polygon.ps[2] = Point(323.246, 632.918);\n    polygon.ps[3] = Point(323.246, 612.918);\n    new ShapeRef(router, polygon, 110);\n\n    // shapeRef111\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(343.246, 580.918);\n    polygon.ps[1] = Point(343.246, 600.918);\n    polygon.ps[2] = Point(323.246, 600.918);\n    polygon.ps[3] = Point(323.246, 580.918);\n    new ShapeRef(router, polygon, 111);\n\n    // shapeRef112\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(343.246, 504.918);\n    polygon.ps[1] = Point(343.246, 524.918);\n    polygon.ps[2] = Point(323.246, 524.918);\n    polygon.ps[3] = Point(323.246, 504.918);\n    new ShapeRef(router, polygon, 112);\n\n    // shapeRef113\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(343.246, 472.918);\n    polygon.ps[1] = Point(343.246, 492.918);\n    polygon.ps[2] = Point(323.246, 492.918);\n    polygon.ps[3] = Point(323.246, 472.918);\n    new ShapeRef(router, polygon, 113);\n\n    // shapeRef114\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(391.246, 408.918);\n    polygon.ps[1] = Point(391.246, 428.918);\n    polygon.ps[2] = Point(371.246, 428.918);\n    polygon.ps[3] = Point(371.246, 408.918);\n    new ShapeRef(router, polygon, 114);\n\n    // shapeRef115\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(343.246, 408.918);\n    polygon.ps[1] = Point(343.246, 428.918);\n    polygon.ps[2] = Point(323.246, 428.918);\n    polygon.ps[3] = Point(323.246, 408.918);\n    new ShapeRef(router, polygon, 115);\n\n    // shapeRef116\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(343.246, 376.918);\n    polygon.ps[1] = Point(343.246, 396.918);\n    polygon.ps[2] = Point(323.246, 396.918);\n    polygon.ps[3] = Point(323.246, 376.918);\n    new ShapeRef(router, polygon, 116);\n\n    // shapeRef117\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(391.246, 246.918);\n    polygon.ps[1] = Point(391.246, 266.918);\n    polygon.ps[2] = Point(371.246, 266.918);\n    polygon.ps[3] = Point(371.246, 246.918);\n    new ShapeRef(router, polygon, 117);\n\n    // shapeRef118\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(343.246, 268.918);\n    polygon.ps[1] = Point(343.246, 288.918);\n    polygon.ps[2] = Point(323.246, 288.918);\n    polygon.ps[3] = Point(323.246, 268.918);\n    new ShapeRef(router, polygon, 118);\n\n    // shapeRef119\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(343.246, 236.918);\n    polygon.ps[1] = Point(343.246, 256.918);\n    polygon.ps[2] = Point(323.246, 256.918);\n    polygon.ps[3] = Point(323.246, 236.918);\n    new ShapeRef(router, polygon, 119);\n\n    // shapeRef120\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(235.246, 580.918);\n    polygon.ps[1] = Point(235.246, 600.918);\n    polygon.ps[2] = Point(215.246, 600.918);\n    polygon.ps[3] = Point(215.246, 580.918);\n    new ShapeRef(router, polygon, 120);\n\n    // shapeRef121\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(203.246, 612.918);\n    polygon.ps[1] = Point(203.246, 632.918);\n    polygon.ps[2] = Point(183.246, 632.918);\n    polygon.ps[3] = Point(183.246, 612.918);\n    new ShapeRef(router, polygon, 121);\n\n    // shapeRef122\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(203.246, 580.918);\n    polygon.ps[1] = Point(203.246, 600.918);\n    polygon.ps[2] = Point(183.246, 600.918);\n    polygon.ps[3] = Point(183.246, 580.918);\n    new ShapeRef(router, polygon, 122);\n\n    // shapeRef123\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(203.246, 504.918);\n    polygon.ps[1] = Point(203.246, 524.918);\n    polygon.ps[2] = Point(183.246, 524.918);\n    polygon.ps[3] = Point(183.246, 504.918);\n    new ShapeRef(router, polygon, 123);\n\n    // shapeRef124\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(203.246, 472.918);\n    polygon.ps[1] = Point(203.246, 492.918);\n    polygon.ps[2] = Point(183.246, 492.918);\n    polygon.ps[3] = Point(183.246, 472.918);\n    new ShapeRef(router, polygon, 124);\n\n    // shapeRef125\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(235.246, 408.918);\n    polygon.ps[1] = Point(235.246, 428.918);\n    polygon.ps[2] = Point(215.246, 428.918);\n    polygon.ps[3] = Point(215.246, 408.918);\n    new ShapeRef(router, polygon, 125);\n\n    // shapeRef126\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(203.246, 408.918);\n    polygon.ps[1] = Point(203.246, 428.918);\n    polygon.ps[2] = Point(183.246, 428.918);\n    polygon.ps[3] = Point(183.246, 408.918);\n    new ShapeRef(router, polygon, 126);\n\n    // shapeRef127\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(203.246, 376.918);\n    polygon.ps[1] = Point(203.246, 396.918);\n    polygon.ps[2] = Point(183.246, 396.918);\n    polygon.ps[3] = Point(183.246, 376.918);\n    new ShapeRef(router, polygon, 127);\n\n    // shapeRef128\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(235.246, 246.918);\n    polygon.ps[1] = Point(235.246, 266.918);\n    polygon.ps[2] = Point(215.246, 266.918);\n    polygon.ps[3] = Point(215.246, 246.918);\n    new ShapeRef(router, polygon, 128);\n\n    // shapeRef129\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(203.246, 236.918);\n    polygon.ps[1] = Point(203.246, 256.918);\n    polygon.ps[2] = Point(183.246, 256.918);\n    polygon.ps[3] = Point(183.246, 236.918);\n    new ShapeRef(router, polygon, 129);\n\n    // shapeRef130\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(203.246, 268.918);\n    polygon.ps[1] = Point(203.246, 288.918);\n    polygon.ps[2] = Point(183.246, 288.918);\n    polygon.ps[3] = Point(183.246, 268.918);\n    new ShapeRef(router, polygon, 130);\n\n    // shapeRef131\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(77.2456, 580.918);\n    polygon.ps[1] = Point(77.2456, 600.918);\n    polygon.ps[2] = Point(57.2456, 600.918);\n    polygon.ps[3] = Point(57.2456, 580.918);\n    new ShapeRef(router, polygon, 131);\n\n    // shapeRef132\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(27.2456, 612.918);\n    polygon.ps[1] = Point(27.2456, 632.918);\n    polygon.ps[2] = Point(7.24557, 632.918);\n    polygon.ps[3] = Point(7.24557, 612.918);\n    new ShapeRef(router, polygon, 132);\n\n    // shapeRef133\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(27.2456, 580.918);\n    polygon.ps[1] = Point(27.2456, 600.918);\n    polygon.ps[2] = Point(7.24557, 600.918);\n    polygon.ps[3] = Point(7.24557, 580.918);\n    new ShapeRef(router, polygon, 133);\n\n    // shapeRef134\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(27.2456, 504.918);\n    polygon.ps[1] = Point(27.2456, 524.918);\n    polygon.ps[2] = Point(7.24557, 524.918);\n    polygon.ps[3] = Point(7.24557, 504.918);\n    new ShapeRef(router, polygon, 134);\n\n    // shapeRef135\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(27.2456, 472.918);\n    polygon.ps[1] = Point(27.2456, 492.918);\n    polygon.ps[2] = Point(7.24557, 492.918);\n    polygon.ps[3] = Point(7.24557, 472.918);\n    new ShapeRef(router, polygon, 135);\n\n    // shapeRef136\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(77.2456, 408.918);\n    polygon.ps[1] = Point(77.2456, 428.918);\n    polygon.ps[2] = Point(57.2456, 428.918);\n    polygon.ps[3] = Point(57.2456, 408.918);\n    new ShapeRef(router, polygon, 136);\n\n    // shapeRef137\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(27.2456, 408.918);\n    polygon.ps[1] = Point(27.2456, 428.918);\n    polygon.ps[2] = Point(7.24557, 428.918);\n    polygon.ps[3] = Point(7.24557, 408.918);\n    new ShapeRef(router, polygon, 137);\n\n    // shapeRef138\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(27.2456, 376.918);\n    polygon.ps[1] = Point(27.2456, 396.918);\n    polygon.ps[2] = Point(7.24557, 396.918);\n    polygon.ps[3] = Point(7.24557, 376.918);\n    new ShapeRef(router, polygon, 138);\n\n    // shapeRef139\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(27.2456, 268.918);\n    polygon.ps[1] = Point(27.2456, 288.918);\n    polygon.ps[2] = Point(7.24557, 288.918);\n    polygon.ps[3] = Point(7.24557, 268.918);\n    new ShapeRef(router, polygon, 139);\n\n    // shapeRef140\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(27.2456, 236.918);\n    polygon.ps[1] = Point(27.2456, 256.918);\n    polygon.ps[2] = Point(7.24557, 256.918);\n    polygon.ps[3] = Point(7.24557, 236.918);\n    new ShapeRef(router, polygon, 140);\n\n    // shapeRef141\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(254.976, 160.918);\n    polygon.ps[1] = Point(254.976, 180.918);\n    polygon.ps[2] = Point(234.976, 180.918);\n    polygon.ps[3] = Point(234.976, 160.918);\n    new ShapeRef(router, polygon, 141);\n\n    // shapeRef142\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(155.246, 76.9179);\n    polygon.ps[1] = Point(155.246, 96.9179);\n    polygon.ps[2] = Point(135.246, 96.9179);\n    polygon.ps[3] = Point(135.246, 76.9179);\n    new ShapeRef(router, polygon, 142);\n\n    // shapeRef143\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(155.246, 44.9179);\n    polygon.ps[1] = Point(155.246, 64.9179);\n    polygon.ps[2] = Point(135.246, 64.9179);\n    polygon.ps[3] = Point(135.246, 44.9179);\n    new ShapeRef(router, polygon, 143);\n\n    // shapeRef144\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(27.2456, 160.918);\n    polygon.ps[1] = Point(27.2456, 180.918);\n    polygon.ps[2] = Point(7.24557, 180.918);\n    polygon.ps[3] = Point(7.24557, 160.918);\n    new ShapeRef(router, polygon, 144);\n\n    // shapeRef145\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(27.2456, 22.9179);\n    polygon.ps[1] = Point(27.2456, 42.9179);\n    polygon.ps[2] = Point(7.24557, 42.9179);\n    polygon.ps[3] = Point(7.24557, 22.9179);\n    new ShapeRef(router, polygon, 145);\n\n    // shapeRef146\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(27.2456, -9.08205);\n    polygon.ps[1] = Point(27.2456, 10.9179);\n    polygon.ps[2] = Point(7.24557, 10.9179);\n    polygon.ps[3] = Point(7.24557, -9.08205);\n    new ShapeRef(router, polygon, 146);\n\n    // shapeRef147\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(329.219, -39.0821);\n    polygon.ps[1] = Point(329.219, -19.0821);\n    polygon.ps[2] = Point(309.219, -19.0821);\n    polygon.ps[3] = Point(309.219, -39.0821);\n    new ShapeRef(router, polygon, 147);\n\n    // shapeRef148\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(207.246, -39.0821);\n    polygon.ps[1] = Point(207.246, -19.0821);\n    polygon.ps[2] = Point(187.246, -19.0821);\n    polygon.ps[3] = Point(187.246, -39.0821);\n    new ShapeRef(router, polygon, 148);\n\n    // shapeRef149\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(601.954, 56.9179);\n    polygon.ps[1] = Point(601.954, 116.918);\n    polygon.ps[2] = Point(311.954, 116.918);\n    polygon.ps[3] = Point(311.954, 56.9179);\n    new ShapeRef(router, polygon, 149);\n\n    // shapeRef150\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(77.2456, 105.987);\n    polygon.ps[1] = Point(77.2456, 145.987);\n    polygon.ps[2] = Point(37.2456, 145.987);\n    polygon.ps[3] = Point(37.2456, 105.987);\n    new ShapeRef(router, polygon, 150);\n\n    // shapeRef151\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(339.219, -71.0821);\n    polygon.ps[1] = Point(339.219, -31.0821);\n    polygon.ps[2] = Point(299.219, -31.0821);\n    polygon.ps[3] = Point(299.219, -71.0821);\n    new ShapeRef(router, polygon, 151);\n\n    // shapeRef152\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(339.219, -27.0821);\n    polygon.ps[1] = Point(339.219, 12.9179);\n    polygon.ps[2] = Point(299.219, 12.9179);\n    polygon.ps[3] = Point(299.219, -27.0821);\n    new ShapeRef(router, polygon, 152);\n\n    // shapeRef153\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(217.246, 76.9179);\n    polygon.ps[1] = Point(217.246, 116.918);\n    polygon.ps[2] = Point(177.246, 116.918);\n    polygon.ps[3] = Point(177.246, 76.9179);\n    new ShapeRef(router, polygon, 153);\n\n    // shapeRef154\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(217.246, 140.918);\n    polygon.ps[1] = Point(217.246, 180.918);\n    polygon.ps[2] = Point(177.246, 180.918);\n    polygon.ps[3] = Point(177.246, 140.918);\n    new ShapeRef(router, polygon, 154);\n\n    // shapeRef155\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(77.2456, 140.918);\n    polygon.ps[1] = Point(77.2456, 180.918);\n    polygon.ps[2] = Point(37.2456, 180.918);\n    polygon.ps[3] = Point(37.2456, 140.918);\n    new ShapeRef(router, polygon, 155);\n\n    // shapeRef156\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(77.2456, 312.918);\n    polygon.ps[1] = Point(77.2456, 352.918);\n    polygon.ps[2] = Point(37.2456, 352.918);\n    polygon.ps[3] = Point(37.2456, 312.918);\n    new ShapeRef(router, polygon, 156);\n\n    // shapeRef157\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(77.2456, 427.955);\n    polygon.ps[1] = Point(77.2456, 467.955);\n    polygon.ps[2] = Point(37.2456, 467.955);\n    polygon.ps[3] = Point(37.2456, 427.955);\n    new ShapeRef(router, polygon, 157);\n\n    // shapeRef158\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(77.2456, 538.918);\n    polygon.ps[1] = Point(77.2456, 578.918);\n    polygon.ps[2] = Point(37.2456, 578.918);\n    polygon.ps[3] = Point(37.2456, 538.918);\n    new ShapeRef(router, polygon, 158);\n\n    // shapeRef159\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(77.2456, 656.918);\n    polygon.ps[1] = Point(77.2456, 696.918);\n    polygon.ps[2] = Point(37.2456, 696.918);\n    polygon.ps[3] = Point(37.2456, 656.918);\n    new ShapeRef(router, polygon, 159);\n\n    // shapeRef160\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(45.2456, 76.9179);\n    polygon.ps[1] = Point(45.2456, 116.918);\n    polygon.ps[2] = Point(5.24557, 116.918);\n    polygon.ps[3] = Point(5.24557, 76.9179);\n    new ShapeRef(router, polygon, 160);\n\n    // shapeRef161\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(235.246, 312.918);\n    polygon.ps[1] = Point(235.246, 352.918);\n    polygon.ps[2] = Point(195.246, 352.918);\n    polygon.ps[3] = Point(195.246, 312.918);\n    new ShapeRef(router, polygon, 161);\n\n    // shapeRef162\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(235.246, 427.955);\n    polygon.ps[1] = Point(235.246, 467.955);\n    polygon.ps[2] = Point(195.246, 467.955);\n    polygon.ps[3] = Point(195.246, 427.955);\n    new ShapeRef(router, polygon, 162);\n\n    // shapeRef163\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(235.246, 538.918);\n    polygon.ps[1] = Point(235.246, 578.918);\n    polygon.ps[2] = Point(195.246, 578.918);\n    polygon.ps[3] = Point(195.246, 538.918);\n    new ShapeRef(router, polygon, 163);\n\n    // shapeRef164\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(235.246, 656.918);\n    polygon.ps[1] = Point(235.246, 696.918);\n    polygon.ps[2] = Point(195.246, 696.918);\n    polygon.ps[3] = Point(195.246, 656.918);\n    new ShapeRef(router, polygon, 164);\n\n    // shapeRef165\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(391.246, 656.918);\n    polygon.ps[1] = Point(391.246, 696.918);\n    polygon.ps[2] = Point(351.246, 696.918);\n    polygon.ps[3] = Point(351.246, 656.918);\n    new ShapeRef(router, polygon, 165);\n\n    // shapeRef166\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(391.246, 538.918);\n    polygon.ps[1] = Point(391.246, 578.918);\n    polygon.ps[2] = Point(351.246, 578.918);\n    polygon.ps[3] = Point(351.246, 538.918);\n    new ShapeRef(router, polygon, 166);\n\n    // shapeRef167\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(391.246, 427.955);\n    polygon.ps[1] = Point(391.246, 467.955);\n    polygon.ps[2] = Point(351.246, 467.955);\n    polygon.ps[3] = Point(351.246, 427.955);\n    new ShapeRef(router, polygon, 167);\n\n    // shapeRef168\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(391.246, 312.918);\n    polygon.ps[1] = Point(391.246, 352.918);\n    polygon.ps[2] = Point(351.246, 352.918);\n    polygon.ps[3] = Point(351.246, 312.918);\n    new ShapeRef(router, polygon, 168);\n\n    // shapeRef169\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(547.246, 312.918);\n    polygon.ps[1] = Point(547.246, 352.918);\n    polygon.ps[2] = Point(507.246, 352.918);\n    polygon.ps[3] = Point(507.246, 312.918);\n    new ShapeRef(router, polygon, 169);\n\n    // shapeRef170\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(547.246, 427.955);\n    polygon.ps[1] = Point(547.246, 467.955);\n    polygon.ps[2] = Point(507.246, 467.955);\n    polygon.ps[3] = Point(507.246, 427.955);\n    new ShapeRef(router, polygon, 170);\n\n    // shapeRef171\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(547.246, 538.918);\n    polygon.ps[1] = Point(547.246, 578.918);\n    polygon.ps[2] = Point(507.246, 578.918);\n    polygon.ps[3] = Point(507.246, 538.918);\n    new ShapeRef(router, polygon, 171);\n\n    // shapeRef172\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(547.246, 656.918);\n    polygon.ps[1] = Point(547.246, 696.918);\n    polygon.ps[2] = Point(507.246, 696.918);\n    polygon.ps[3] = Point(507.246, 656.918);\n    new ShapeRef(router, polygon, 172);\n\n    // shapeRef173\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(693.933, 656.918);\n    polygon.ps[1] = Point(693.933, 696.918);\n    polygon.ps[2] = Point(653.933, 696.918);\n    polygon.ps[3] = Point(653.933, 656.918);\n    new ShapeRef(router, polygon, 173);\n\n    // shapeRef174\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(693.933, 538.918);\n    polygon.ps[1] = Point(693.933, 578.918);\n    polygon.ps[2] = Point(653.933, 578.918);\n    polygon.ps[3] = Point(653.933, 538.918);\n    new ShapeRef(router, polygon, 174);\n\n    // shapeRef175\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(693.933, 427.955);\n    polygon.ps[1] = Point(693.933, 467.955);\n    polygon.ps[2] = Point(653.933, 467.955);\n    polygon.ps[3] = Point(653.933, 427.955);\n    new ShapeRef(router, polygon, 175);\n\n    // shapeRef176\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(693.933, 312.918);\n    polygon.ps[1] = Point(693.933, 352.918);\n    polygon.ps[2] = Point(653.933, 352.918);\n    polygon.ps[3] = Point(653.933, 312.918);\n    new ShapeRef(router, polygon, 176);\n\n    // shapeRef177\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(843.246, 312.918);\n    polygon.ps[1] = Point(843.246, 352.918);\n    polygon.ps[2] = Point(803.246, 352.918);\n    polygon.ps[3] = Point(803.246, 312.918);\n    new ShapeRef(router, polygon, 177);\n\n    // shapeRef178\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(843.246, 427.955);\n    polygon.ps[1] = Point(843.246, 467.955);\n    polygon.ps[2] = Point(803.246, 467.955);\n    polygon.ps[3] = Point(803.246, 427.955);\n    new ShapeRef(router, polygon, 178);\n\n    // shapeRef179\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(843.246, 538.918);\n    polygon.ps[1] = Point(843.246, 578.918);\n    polygon.ps[2] = Point(803.246, 578.918);\n    polygon.ps[3] = Point(803.246, 538.918);\n    new ShapeRef(router, polygon, 179);\n\n    // shapeRef180\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(843.246, 656.918);\n    polygon.ps[1] = Point(843.246, 696.918);\n    polygon.ps[2] = Point(803.246, 696.918);\n    polygon.ps[3] = Point(803.246, 656.918);\n    new ShapeRef(router, polygon, 180);\n\n    // shapeRef181\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(999.246, 730.918);\n    polygon.ps[1] = Point(999.246, 770.918);\n    polygon.ps[2] = Point(959.246, 770.918);\n    polygon.ps[3] = Point(959.246, 730.918);\n    new ShapeRef(router, polygon, 181);\n\n    // shapeRef182\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(999.246, 656.918);\n    polygon.ps[1] = Point(999.246, 696.918);\n    polygon.ps[2] = Point(959.246, 696.918);\n    polygon.ps[3] = Point(959.246, 656.918);\n    new ShapeRef(router, polygon, 182);\n\n    // shapeRef183\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(999.246, 538.918);\n    polygon.ps[1] = Point(999.246, 578.918);\n    polygon.ps[2] = Point(959.246, 578.918);\n    polygon.ps[3] = Point(959.246, 538.918);\n    new ShapeRef(router, polygon, 183);\n\n    // shapeRef184\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(999.246, 427.955);\n    polygon.ps[1] = Point(999.246, 467.955);\n    polygon.ps[2] = Point(959.246, 467.955);\n    polygon.ps[3] = Point(959.246, 427.955);\n    new ShapeRef(router, polygon, 184);\n\n    // shapeRef185\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(999.246, 312.918);\n    polygon.ps[1] = Point(999.246, 352.918);\n    polygon.ps[2] = Point(959.246, 352.918);\n    polygon.ps[3] = Point(959.246, 312.918);\n    new ShapeRef(router, polygon, 185);\n\n    // shapeRef186\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(27.2456, 300.918);\n    polygon.ps[1] = Point(27.2456, 320.918);\n    polygon.ps[2] = Point(7.24557, 320.918);\n    polygon.ps[3] = Point(7.24557, 300.918);\n    new ShapeRef(router, polygon, 186);\n\n    // shapeRef187\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(203.246, 300.918);\n    polygon.ps[1] = Point(203.246, 320.918);\n    polygon.ps[2] = Point(183.246, 320.918);\n    polygon.ps[3] = Point(183.246, 300.918);\n    new ShapeRef(router, polygon, 187);\n\n    // shapeRef188\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(343.246, 300.918);\n    polygon.ps[1] = Point(343.246, 320.918);\n    polygon.ps[2] = Point(323.246, 320.918);\n    polygon.ps[3] = Point(323.246, 300.918);\n    new ShapeRef(router, polygon, 188);\n\n    // shapeRef189\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(499.246, 300.918);\n    polygon.ps[1] = Point(499.246, 320.918);\n    polygon.ps[2] = Point(479.246, 320.918);\n    polygon.ps[3] = Point(479.246, 300.918);\n    new ShapeRef(router, polygon, 189);\n\n    // shapeRef190\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(655.246, 300.918);\n    polygon.ps[1] = Point(655.246, 320.918);\n    polygon.ps[2] = Point(635.246, 320.918);\n    polygon.ps[3] = Point(635.246, 300.918);\n    new ShapeRef(router, polygon, 190);\n\n    // shapeRef191\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(811.246, 300.918);\n    polygon.ps[1] = Point(811.246, 320.918);\n    polygon.ps[2] = Point(791.246, 320.918);\n    polygon.ps[3] = Point(791.246, 300.918);\n    new ShapeRef(router, polygon, 191);\n\n    // shapeRef192\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(967.246, 300.918);\n    polygon.ps[1] = Point(967.246, 320.918);\n    polygon.ps[2] = Point(947.246, 320.918);\n    polygon.ps[3] = Point(947.246, 300.918);\n    new ShapeRef(router, polygon, 192);\n\n    // shapeRef193\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(27.2456, 440.918);\n    polygon.ps[1] = Point(27.2456, 460.918);\n    polygon.ps[2] = Point(7.24557, 460.918);\n    polygon.ps[3] = Point(7.24557, 440.918);\n    new ShapeRef(router, polygon, 193);\n\n    // shapeRef194\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(203.246, 440.918);\n    polygon.ps[1] = Point(203.246, 460.918);\n    polygon.ps[2] = Point(183.246, 460.918);\n    polygon.ps[3] = Point(183.246, 440.918);\n    new ShapeRef(router, polygon, 194);\n\n    // shapeRef195\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(343.246, 440.918);\n    polygon.ps[1] = Point(343.246, 460.918);\n    polygon.ps[2] = Point(323.246, 460.918);\n    polygon.ps[3] = Point(323.246, 440.918);\n    new ShapeRef(router, polygon, 195);\n\n    // shapeRef196\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(499.246, 440.918);\n    polygon.ps[1] = Point(499.246, 460.918);\n    polygon.ps[2] = Point(479.246, 460.918);\n    polygon.ps[3] = Point(479.246, 440.918);\n    new ShapeRef(router, polygon, 196);\n\n    // shapeRef197\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(811.246, 440.918);\n    polygon.ps[1] = Point(811.246, 460.918);\n    polygon.ps[2] = Point(791.246, 460.918);\n    polygon.ps[3] = Point(791.246, 440.918);\n    new ShapeRef(router, polygon, 197);\n\n    // shapeRef198\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(967.246, 440.918);\n    polygon.ps[1] = Point(967.246, 460.918);\n    polygon.ps[2] = Point(947.246, 460.918);\n    polygon.ps[3] = Point(947.246, 440.918);\n    new ShapeRef(router, polygon, 198);\n\n    // shapeRef199\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(655.246, 440.918);\n    polygon.ps[1] = Point(655.246, 460.918);\n    polygon.ps[2] = Point(635.246, 460.918);\n    polygon.ps[3] = Point(635.246, 440.918);\n    new ShapeRef(router, polygon, 199);\n\n    // shapeRef200\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(27.2456, 548.918);\n    polygon.ps[1] = Point(27.2456, 568.918);\n    polygon.ps[2] = Point(7.24557, 568.918);\n    polygon.ps[3] = Point(7.24557, 548.918);\n    new ShapeRef(router, polygon, 200);\n\n    // shapeRef201\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(203.246, 548.918);\n    polygon.ps[1] = Point(203.246, 568.918);\n    polygon.ps[2] = Point(183.246, 568.918);\n    polygon.ps[3] = Point(183.246, 548.918);\n    new ShapeRef(router, polygon, 201);\n\n    // shapeRef202\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(343.246, 548.918);\n    polygon.ps[1] = Point(343.246, 568.918);\n    polygon.ps[2] = Point(323.246, 568.918);\n    polygon.ps[3] = Point(323.246, 548.918);\n    new ShapeRef(router, polygon, 202);\n\n    // shapeRef203\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(499.246, 548.918);\n    polygon.ps[1] = Point(499.246, 568.918);\n    polygon.ps[2] = Point(479.246, 568.918);\n    polygon.ps[3] = Point(479.246, 548.918);\n    new ShapeRef(router, polygon, 203);\n\n    // shapeRef204\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(655.246, 548.918);\n    polygon.ps[1] = Point(655.246, 568.918);\n    polygon.ps[2] = Point(635.246, 568.918);\n    polygon.ps[3] = Point(635.246, 548.918);\n    new ShapeRef(router, polygon, 204);\n\n    // shapeRef205\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(811.246, 548.918);\n    polygon.ps[1] = Point(811.246, 568.918);\n    polygon.ps[2] = Point(791.246, 568.918);\n    polygon.ps[3] = Point(791.246, 548.918);\n    new ShapeRef(router, polygon, 205);\n\n    // shapeRef206\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(967.246, 548.918);\n    polygon.ps[1] = Point(967.246, 568.918);\n    polygon.ps[2] = Point(947.246, 568.918);\n    polygon.ps[3] = Point(947.246, 548.918);\n    new ShapeRef(router, polygon, 206);\n\n    // shapeRef207\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(27.2456, 644.918);\n    polygon.ps[1] = Point(27.2456, 664.918);\n    polygon.ps[2] = Point(7.24557, 664.918);\n    polygon.ps[3] = Point(7.24557, 644.918);\n    new ShapeRef(router, polygon, 207);\n\n    // shapeRef208\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(203.246, 644.918);\n    polygon.ps[1] = Point(203.246, 664.918);\n    polygon.ps[2] = Point(183.246, 664.918);\n    polygon.ps[3] = Point(183.246, 644.918);\n    new ShapeRef(router, polygon, 208);\n\n    // shapeRef209\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(343.246, 644.918);\n    polygon.ps[1] = Point(343.246, 664.918);\n    polygon.ps[2] = Point(323.246, 664.918);\n    polygon.ps[3] = Point(323.246, 644.918);\n    new ShapeRef(router, polygon, 209);\n\n    // shapeRef210\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(499.246, 644.918);\n    polygon.ps[1] = Point(499.246, 664.918);\n    polygon.ps[2] = Point(479.246, 664.918);\n    polygon.ps[3] = Point(479.246, 644.918);\n    new ShapeRef(router, polygon, 210);\n\n    // shapeRef211\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(655.246, 644.918);\n    polygon.ps[1] = Point(655.246, 664.918);\n    polygon.ps[2] = Point(635.246, 664.918);\n    polygon.ps[3] = Point(635.246, 644.918);\n    new ShapeRef(router, polygon, 211);\n\n    // shapeRef212\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(811.246, 644.918);\n    polygon.ps[1] = Point(811.246, 664.918);\n    polygon.ps[2] = Point(791.246, 664.918);\n    polygon.ps[3] = Point(791.246, 644.918);\n    new ShapeRef(router, polygon, 212);\n\n    // shapeRef213\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(967.246, 644.918);\n    polygon.ps[1] = Point(967.246, 664.918);\n    polygon.ps[2] = Point(947.246, 664.918);\n    polygon.ps[3] = Point(947.246, 644.918);\n    new ShapeRef(router, polygon, 213);\n\n    // shapeRef214\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(1243.25, 268.918);\n    polygon.ps[1] = Point(1243.25, 288.918);\n    polygon.ps[2] = Point(1223.25, 288.918);\n    polygon.ps[3] = Point(1223.25, 268.918);\n    new ShapeRef(router, polygon, 214);\n\n    // shapeRef215\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(1243.25, 408.918);\n    polygon.ps[1] = Point(1243.25, 428.918);\n    polygon.ps[2] = Point(1223.25, 428.918);\n    polygon.ps[3] = Point(1223.25, 408.918);\n    new ShapeRef(router, polygon, 215);\n\n    // shapeRef216\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(1243.25, 504.918);\n    polygon.ps[1] = Point(1243.25, 524.918);\n    polygon.ps[2] = Point(1223.25, 524.918);\n    polygon.ps[3] = Point(1223.25, 504.918);\n    new ShapeRef(router, polygon, 216);\n\n    // shapeRef217\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(1243.25, 612.918);\n    polygon.ps[1] = Point(1243.25, 632.918);\n    polygon.ps[2] = Point(1223.25, 632.918);\n    polygon.ps[3] = Point(1223.25, 612.918);\n    new ShapeRef(router, polygon, 217);\n\n    // shapeRef218\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(967.246, 708.918);\n    polygon.ps[1] = Point(967.246, 728.918);\n    polygon.ps[2] = Point(947.246, 728.918);\n    polygon.ps[3] = Point(947.246, 708.918);\n    new ShapeRef(router, polygon, 218);\n\n    // shapeRef219\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(967.246, 740.918);\n    polygon.ps[1] = Point(967.246, 760.918);\n    polygon.ps[2] = Point(947.246, 760.918);\n    polygon.ps[3] = Point(947.246, 740.918);\n    new ShapeRef(router, polygon, 219);\n\n    // shapeRef220\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(1243.25, 708.918);\n    polygon.ps[1] = Point(1243.25, 728.918);\n    polygon.ps[2] = Point(1223.25, 728.918);\n    polygon.ps[3] = Point(1223.25, 708.918);\n    new ShapeRef(router, polygon, 220);\n\n    // shapeRef221\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(1303.25, 246.918);\n    polygon.ps[1] = Point(1303.25, 266.918);\n    polygon.ps[2] = Point(1283.25, 266.918);\n    polygon.ps[3] = Point(1283.25, 246.918);\n    new ShapeRef(router, polygon, 221);\n\n    // shapeRef222\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(1303.25, 634.918);\n    polygon.ps[1] = Point(1303.25, 654.918);\n    polygon.ps[2] = Point(1283.25, 654.918);\n    polygon.ps[3] = Point(1283.25, 634.918);\n    new ShapeRef(router, polygon, 222);\n\n    // shapeRef223\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(77.2456, 236.918);\n    polygon.ps[1] = Point(77.2456, 256.918);\n    polygon.ps[2] = Point(57.2456, 256.918);\n    polygon.ps[3] = Point(57.2456, 236.918);\n    new ShapeRef(router, polygon, 223);\n\n    // shapeRef224\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(77.2456, 268.918);\n    polygon.ps[1] = Point(77.2456, 288.918);\n    polygon.ps[2] = Point(57.2456, 288.918);\n    polygon.ps[3] = Point(57.2456, 268.918);\n    new ShapeRef(router, polygon, 224);\n\n    // shapeRef225\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(1159.25, 602.918);\n    polygon.ps[1] = Point(1159.25, 642.918);\n    polygon.ps[2] = Point(1103.25, 642.918);\n    polygon.ps[3] = Point(1103.25, 602.918);\n    new ShapeRef(router, polygon, 225);\n\n    // shapeRef226\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(955.246, 602.918);\n    polygon.ps[1] = Point(955.246, 642.918);\n    polygon.ps[2] = Point(899.246, 642.918);\n    polygon.ps[3] = Point(899.246, 602.918);\n    new ShapeRef(router, polygon, 226);\n\n    // shapeRef227\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(799.246, 602.918);\n    polygon.ps[1] = Point(799.246, 642.918);\n    polygon.ps[2] = Point(743.246, 642.918);\n    polygon.ps[3] = Point(743.246, 602.918);\n    new ShapeRef(router, polygon, 227);\n\n    // shapeRef228\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(643.246, 602.918);\n    polygon.ps[1] = Point(643.246, 642.918);\n    polygon.ps[2] = Point(587.246, 642.918);\n    polygon.ps[3] = Point(587.246, 602.918);\n    new ShapeRef(router, polygon, 228);\n\n    // shapeRef229\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(487.246, 602.918);\n    polygon.ps[1] = Point(487.246, 642.918);\n    polygon.ps[2] = Point(431.246, 642.918);\n    polygon.ps[3] = Point(431.246, 602.918);\n    new ShapeRef(router, polygon, 229);\n\n    // shapeRef230\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(331.246, 602.918);\n    polygon.ps[1] = Point(331.246, 642.918);\n    polygon.ps[2] = Point(275.246, 642.918);\n    polygon.ps[3] = Point(275.246, 602.918);\n    new ShapeRef(router, polygon, 230);\n\n    // shapeRef231\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(173.246, 634.918);\n    polygon.ps[1] = Point(173.246, 674.918);\n    polygon.ps[2] = Point(117.246, 674.918);\n    polygon.ps[3] = Point(117.246, 634.918);\n    new ShapeRef(router, polygon, 231);\n\n    // shapeRef232\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(907.246, 698.918);\n    polygon.ps[1] = Point(907.246, 738.918);\n    polygon.ps[2] = Point(851.246, 738.918);\n    polygon.ps[3] = Point(851.246, 698.918);\n    new ShapeRef(router, polygon, 232);\n\n    // shapeRef233\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(1231.25, 698.918);\n    polygon.ps[1] = Point(1231.25, 738.918);\n    polygon.ps[2] = Point(1175.25, 738.918);\n    polygon.ps[3] = Point(1175.25, 698.918);\n    new ShapeRef(router, polygon, 233);\n\n    // shapeRef234\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(1291.25, 698.918);\n    polygon.ps[1] = Point(1291.25, 738.918);\n    polygon.ps[2] = Point(1235.25, 738.918);\n    polygon.ps[3] = Point(1235.25, 698.918);\n    new ShapeRef(router, polygon, 234);\n\n    // shapeRef235\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(622.941, 698.918);\n    polygon.ps[1] = Point(622.941, 738.918);\n    polygon.ps[2] = Point(566.941, 738.918);\n    polygon.ps[3] = Point(566.941, 698.918);\n    new ShapeRef(router, polygon, 235);\n\n    // shapeRef236\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(479.455, 698.918);\n    polygon.ps[1] = Point(479.455, 738.918);\n    polygon.ps[2] = Point(423.455, 738.918);\n    polygon.ps[3] = Point(423.455, 698.918);\n    new ShapeRef(router, polygon, 236);\n\n    // shapeRef237\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(1399.25, 602.918);\n    polygon.ps[1] = Point(1399.25, 642.918);\n    polygon.ps[2] = Point(1343.25, 642.918);\n    polygon.ps[3] = Point(1343.25, 602.918);\n    new ShapeRef(router, polygon, 237);\n\n    // shapeRef238\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(1447.25, 555.942);\n    polygon.ps[1] = Point(1447.25, 595.942);\n    polygon.ps[2] = Point(1391.25, 595.942);\n    polygon.ps[3] = Point(1391.25, 555.942);\n    new ShapeRef(router, polygon, 238);\n\n    // shapeRef239\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(1159.25, 634.918);\n    polygon.ps[1] = Point(1159.25, 674.918);\n    polygon.ps[2] = Point(1103.25, 674.918);\n    polygon.ps[3] = Point(1103.25, 634.918);\n    new ShapeRef(router, polygon, 239);\n\n    // shapeRef240\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(955.246, 634.918);\n    polygon.ps[1] = Point(955.246, 674.918);\n    polygon.ps[2] = Point(899.246, 674.918);\n    polygon.ps[3] = Point(899.246, 634.918);\n    new ShapeRef(router, polygon, 240);\n\n    // shapeRef241\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(799.246, 634.918);\n    polygon.ps[1] = Point(799.246, 674.918);\n    polygon.ps[2] = Point(743.246, 674.918);\n    polygon.ps[3] = Point(743.246, 634.918);\n    new ShapeRef(router, polygon, 241);\n\n    // shapeRef242\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(643.246, 634.918);\n    polygon.ps[1] = Point(643.246, 674.918);\n    polygon.ps[2] = Point(587.246, 674.918);\n    polygon.ps[3] = Point(587.246, 634.918);\n    new ShapeRef(router, polygon, 242);\n\n    // shapeRef243\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(487.246, 634.918);\n    polygon.ps[1] = Point(487.246, 674.918);\n    polygon.ps[2] = Point(431.246, 674.918);\n    polygon.ps[3] = Point(431.246, 634.918);\n    new ShapeRef(router, polygon, 243);\n\n    // shapeRef244\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(331.246, 634.918);\n    polygon.ps[1] = Point(331.246, 674.918);\n    polygon.ps[2] = Point(275.246, 674.918);\n    polygon.ps[3] = Point(275.246, 634.918);\n    new ShapeRef(router, polygon, 244);\n\n    // shapeRef245\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(173.246, 602.918);\n    polygon.ps[1] = Point(173.246, 642.918);\n    polygon.ps[2] = Point(117.246, 642.918);\n    polygon.ps[3] = Point(117.246, 602.918);\n    new ShapeRef(router, polygon, 245);\n\n    // shapeRef246\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(1447.25, 494.918);\n    polygon.ps[1] = Point(1447.25, 534.918);\n    polygon.ps[2] = Point(1391.25, 534.918);\n    polygon.ps[3] = Point(1391.25, 494.918);\n    new ShapeRef(router, polygon, 246);\n\n    // shapeRef247\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(1159.25, 516.918);\n    polygon.ps[1] = Point(1159.25, 556.918);\n    polygon.ps[2] = Point(1103.25, 556.918);\n    polygon.ps[3] = Point(1103.25, 516.918);\n    new ShapeRef(router, polygon, 247);\n\n    // shapeRef248\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(955.246, 516.918);\n    polygon.ps[1] = Point(955.246, 556.918);\n    polygon.ps[2] = Point(899.246, 556.918);\n    polygon.ps[3] = Point(899.246, 516.918);\n    new ShapeRef(router, polygon, 248);\n\n    // shapeRef249\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(799.246, 516.918);\n    polygon.ps[1] = Point(799.246, 556.918);\n    polygon.ps[2] = Point(743.246, 556.918);\n    polygon.ps[3] = Point(743.246, 516.918);\n    new ShapeRef(router, polygon, 249);\n\n    // shapeRef250\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(643.246, 516.918);\n    polygon.ps[1] = Point(643.246, 556.918);\n    polygon.ps[2] = Point(587.246, 556.918);\n    polygon.ps[3] = Point(587.246, 516.918);\n    new ShapeRef(router, polygon, 250);\n\n    // shapeRef251\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(487.246, 516.918);\n    polygon.ps[1] = Point(487.246, 556.918);\n    polygon.ps[2] = Point(431.246, 556.918);\n    polygon.ps[3] = Point(431.246, 516.918);\n    new ShapeRef(router, polygon, 251);\n\n    // shapeRef252\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(331.246, 516.918);\n    polygon.ps[1] = Point(331.246, 556.918);\n    polygon.ps[2] = Point(275.246, 556.918);\n    polygon.ps[3] = Point(275.246, 516.918);\n    new ShapeRef(router, polygon, 252);\n\n    // shapeRef253\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(173.246, 516.918);\n    polygon.ps[1] = Point(173.246, 556.918);\n    polygon.ps[2] = Point(117.246, 556.918);\n    polygon.ps[3] = Point(117.246, 516.918);\n    new ShapeRef(router, polygon, 253);\n\n    // shapeRef254\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(1321.25, 214.918);\n    polygon.ps[1] = Point(1321.25, 254.918);\n    polygon.ps[2] = Point(1265.25, 254.918);\n    polygon.ps[3] = Point(1265.25, 214.918);\n    new ShapeRef(router, polygon, 254);\n\n    // shapeRef255\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(1111.25, 602.918);\n    polygon.ps[1] = Point(1111.25, 642.918);\n    polygon.ps[2] = Point(1055.25, 642.918);\n    polygon.ps[3] = Point(1055.25, 602.918);\n    new ShapeRef(router, polygon, 255);\n\n    // shapeRef256\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(1447.25, 398.918);\n    polygon.ps[1] = Point(1447.25, 438.918);\n    polygon.ps[2] = Point(1391.25, 438.918);\n    polygon.ps[3] = Point(1391.25, 398.918);\n    new ShapeRef(router, polygon, 256);\n\n    // shapeRef257\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(1447.25, 698.918);\n    polygon.ps[1] = Point(1447.25, 738.918);\n    polygon.ps[2] = Point(1391.25, 738.918);\n    polygon.ps[3] = Point(1391.25, 698.918);\n    new ShapeRef(router, polygon, 257);\n\n    // shapeRef258\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(1507.25, 698.918);\n    polygon.ps[1] = Point(1507.25, 738.918);\n    polygon.ps[2] = Point(1451.25, 738.918);\n    polygon.ps[3] = Point(1451.25, 698.918);\n    new ShapeRef(router, polygon, 258);\n\n    // shapeRef259\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(751.246, 698.918);\n    polygon.ps[1] = Point(751.246, 738.918);\n    polygon.ps[2] = Point(695.246, 738.918);\n    polygon.ps[3] = Point(695.246, 698.918);\n    new ShapeRef(router, polygon, 259);\n\n    // shapeRef260\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(955.246, 698.918);\n    polygon.ps[1] = Point(955.246, 738.918);\n    polygon.ps[2] = Point(899.246, 738.918);\n    polygon.ps[3] = Point(899.246, 698.918);\n    new ShapeRef(router, polygon, 260);\n\n    // shapeRef261\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(173.246, 12.9179);\n    polygon.ps[1] = Point(173.246, 52.9179);\n    polygon.ps[2] = Point(117.246, 52.9179);\n    polygon.ps[3] = Point(117.246, 12.9179);\n    new ShapeRef(router, polygon, 261);\n\n    // shapeRef262\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(173.246, 290.918);\n    polygon.ps[1] = Point(173.246, 330.918);\n    polygon.ps[2] = Point(117.246, 330.918);\n    polygon.ps[3] = Point(117.246, 290.918);\n    new ShapeRef(router, polygon, 262);\n\n    // shapeRef263\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(1033.25, 214.918);\n    polygon.ps[1] = Point(1033.25, 254.918);\n    polygon.ps[2] = Point(977.246, 254.918);\n    polygon.ps[3] = Point(977.246, 214.918);\n    new ShapeRef(router, polygon, 263);\n\n    // shapeRef264\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(877.246, 214.918);\n    polygon.ps[1] = Point(877.246, 254.918);\n    polygon.ps[2] = Point(821.246, 254.918);\n    polygon.ps[3] = Point(821.246, 214.918);\n    new ShapeRef(router, polygon, 264);\n\n    // shapeRef265\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(721.246, 214.918);\n    polygon.ps[1] = Point(721.246, 254.918);\n    polygon.ps[2] = Point(665.246, 254.918);\n    polygon.ps[3] = Point(665.246, 214.918);\n    new ShapeRef(router, polygon, 265);\n\n    // shapeRef266\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(565.246, 214.918);\n    polygon.ps[1] = Point(565.246, 254.918);\n    polygon.ps[2] = Point(509.246, 254.918);\n    polygon.ps[3] = Point(509.246, 214.918);\n    new ShapeRef(router, polygon, 266);\n\n    // shapeRef267\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(409.246, 214.918);\n    polygon.ps[1] = Point(409.246, 254.918);\n    polygon.ps[2] = Point(353.246, 254.918);\n    polygon.ps[3] = Point(353.246, 214.918);\n    new ShapeRef(router, polygon, 267);\n\n    // shapeRef268\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(331.246, 268.918);\n    polygon.ps[1] = Point(331.246, 308.918);\n    polygon.ps[2] = Point(275.246, 308.918);\n    polygon.ps[3] = Point(275.246, 268.918);\n    new ShapeRef(router, polygon, 268);\n\n    // shapeRef269\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(1159.25, 698.918);\n    polygon.ps[1] = Point(1159.25, 738.918);\n    polygon.ps[2] = Point(1103.25, 738.918);\n    polygon.ps[3] = Point(1103.25, 698.918);\n    new ShapeRef(router, polygon, 269);\n\n    // shapeRef270\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(1063.25, 666.918);\n    polygon.ps[1] = Point(1063.25, 706.918);\n    polygon.ps[2] = Point(1007.25, 706.918);\n    polygon.ps[3] = Point(1007.25, 666.918);\n    new ShapeRef(router, polygon, 270);\n\n    // shapeRef271\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(1159.25, 570.918);\n    polygon.ps[1] = Point(1159.25, 610.918);\n    polygon.ps[2] = Point(1103.25, 610.918);\n    polygon.ps[3] = Point(1103.25, 570.918);\n    new ShapeRef(router, polygon, 271);\n\n    // shapeRef272\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(1063.25, 602.918);\n    polygon.ps[1] = Point(1063.25, 642.918);\n    polygon.ps[2] = Point(1007.25, 642.918);\n    polygon.ps[3] = Point(1007.25, 602.918);\n    new ShapeRef(router, polygon, 272);\n\n    // shapeRef273\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(1063.25, 570.918);\n    polygon.ps[1] = Point(1063.25, 610.918);\n    polygon.ps[2] = Point(1007.25, 610.918);\n    polygon.ps[3] = Point(1007.25, 570.918);\n    new ShapeRef(router, polygon, 273);\n\n    // shapeRef274\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(1063.25, 494.918);\n    polygon.ps[1] = Point(1063.25, 534.918);\n    polygon.ps[2] = Point(1007.25, 534.918);\n    polygon.ps[3] = Point(1007.25, 494.918);\n    new ShapeRef(router, polygon, 274);\n\n    // shapeRef275\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(1063.25, 462.918);\n    polygon.ps[1] = Point(1063.25, 502.918);\n    polygon.ps[2] = Point(1007.25, 502.918);\n    polygon.ps[3] = Point(1007.25, 462.918);\n    new ShapeRef(router, polygon, 275);\n\n    // shapeRef276\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(1159.25, 398.918);\n    polygon.ps[1] = Point(1159.25, 438.918);\n    polygon.ps[2] = Point(1103.25, 438.918);\n    polygon.ps[3] = Point(1103.25, 398.918);\n    new ShapeRef(router, polygon, 276);\n\n    // shapeRef277\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(1063.25, 398.918);\n    polygon.ps[1] = Point(1063.25, 438.918);\n    polygon.ps[2] = Point(1007.25, 438.918);\n    polygon.ps[3] = Point(1007.25, 398.918);\n    new ShapeRef(router, polygon, 277);\n\n    // shapeRef278\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(1063.25, 366.918);\n    polygon.ps[1] = Point(1063.25, 406.918);\n    polygon.ps[2] = Point(1007.25, 406.918);\n    polygon.ps[3] = Point(1007.25, 366.918);\n    new ShapeRef(router, polygon, 278);\n\n    // shapeRef279\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(1033.25, 182.918);\n    polygon.ps[1] = Point(1033.25, 222.918);\n    polygon.ps[2] = Point(977.246, 222.918);\n    polygon.ps[3] = Point(977.246, 182.918);\n    new ShapeRef(router, polygon, 279);\n\n    // shapeRef280\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(985.246, 172.918);\n    polygon.ps[1] = Point(985.246, 212.918);\n    polygon.ps[2] = Point(929.246, 212.918);\n    polygon.ps[3] = Point(929.246, 172.918);\n    new ShapeRef(router, polygon, 280);\n\n    // shapeRef281\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(985.246, 108.918);\n    polygon.ps[1] = Point(985.246, 148.918);\n    polygon.ps[2] = Point(929.246, 148.918);\n    polygon.ps[3] = Point(929.246, 108.918);\n    new ShapeRef(router, polygon, 281);\n\n    // shapeRef282\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(955.246, 570.918);\n    polygon.ps[1] = Point(955.246, 610.918);\n    polygon.ps[2] = Point(899.246, 610.918);\n    polygon.ps[3] = Point(899.246, 570.918);\n    new ShapeRef(router, polygon, 282);\n\n    // shapeRef283\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(907.246, 602.918);\n    polygon.ps[1] = Point(907.246, 642.918);\n    polygon.ps[2] = Point(851.246, 642.918);\n    polygon.ps[3] = Point(851.246, 602.918);\n    new ShapeRef(router, polygon, 283);\n\n    // shapeRef284\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(907.246, 570.918);\n    polygon.ps[1] = Point(907.246, 610.918);\n    polygon.ps[2] = Point(851.246, 610.918);\n    polygon.ps[3] = Point(851.246, 570.918);\n    new ShapeRef(router, polygon, 284);\n\n    // shapeRef285\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(907.246, 494.918);\n    polygon.ps[1] = Point(907.246, 534.918);\n    polygon.ps[2] = Point(851.246, 534.918);\n    polygon.ps[3] = Point(851.246, 494.918);\n    new ShapeRef(router, polygon, 285);\n\n    // shapeRef286\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(907.246, 462.918);\n    polygon.ps[1] = Point(907.246, 502.918);\n    polygon.ps[2] = Point(851.246, 502.918);\n    polygon.ps[3] = Point(851.246, 462.918);\n    new ShapeRef(router, polygon, 286);\n\n    // shapeRef287\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(955.246, 398.918);\n    polygon.ps[1] = Point(955.246, 438.918);\n    polygon.ps[2] = Point(899.246, 438.918);\n    polygon.ps[3] = Point(899.246, 398.918);\n    new ShapeRef(router, polygon, 287);\n\n    // shapeRef288\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(907.246, 398.918);\n    polygon.ps[1] = Point(907.246, 438.918);\n    polygon.ps[2] = Point(851.246, 438.918);\n    polygon.ps[3] = Point(851.246, 398.918);\n    new ShapeRef(router, polygon, 288);\n\n    // shapeRef289\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(907.246, 366.918);\n    polygon.ps[1] = Point(907.246, 406.918);\n    polygon.ps[2] = Point(851.246, 406.918);\n    polygon.ps[3] = Point(851.246, 366.918);\n    new ShapeRef(router, polygon, 289);\n\n    // shapeRef290\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(877.246, 182.918);\n    polygon.ps[1] = Point(877.246, 222.918);\n    polygon.ps[2] = Point(821.246, 222.918);\n    polygon.ps[3] = Point(821.246, 182.918);\n    new ShapeRef(router, polygon, 290);\n\n    // shapeRef291\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(829.246, 172.918);\n    polygon.ps[1] = Point(829.246, 212.918);\n    polygon.ps[2] = Point(773.246, 212.918);\n    polygon.ps[3] = Point(773.246, 172.918);\n    new ShapeRef(router, polygon, 291);\n\n    // shapeRef292\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(829.246, 108.918);\n    polygon.ps[1] = Point(829.246, 148.918);\n    polygon.ps[2] = Point(773.246, 148.918);\n    polygon.ps[3] = Point(773.246, 108.918);\n    new ShapeRef(router, polygon, 292);\n\n    // shapeRef293\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(799.246, 570.918);\n    polygon.ps[1] = Point(799.246, 610.918);\n    polygon.ps[2] = Point(743.246, 610.918);\n    polygon.ps[3] = Point(743.246, 570.918);\n    new ShapeRef(router, polygon, 293);\n\n    // shapeRef294\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(751.246, 602.918);\n    polygon.ps[1] = Point(751.246, 642.918);\n    polygon.ps[2] = Point(695.246, 642.918);\n    polygon.ps[3] = Point(695.246, 602.918);\n    new ShapeRef(router, polygon, 294);\n\n    // shapeRef295\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(751.246, 570.918);\n    polygon.ps[1] = Point(751.246, 610.918);\n    polygon.ps[2] = Point(695.246, 610.918);\n    polygon.ps[3] = Point(695.246, 570.918);\n    new ShapeRef(router, polygon, 295);\n\n    // shapeRef296\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(751.246, 494.918);\n    polygon.ps[1] = Point(751.246, 534.918);\n    polygon.ps[2] = Point(695.246, 534.918);\n    polygon.ps[3] = Point(695.246, 494.918);\n    new ShapeRef(router, polygon, 296);\n\n    // shapeRef297\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(751.246, 462.918);\n    polygon.ps[1] = Point(751.246, 502.918);\n    polygon.ps[2] = Point(695.246, 502.918);\n    polygon.ps[3] = Point(695.246, 462.918);\n    new ShapeRef(router, polygon, 297);\n\n    // shapeRef298\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(799.246, 398.918);\n    polygon.ps[1] = Point(799.246, 438.918);\n    polygon.ps[2] = Point(743.246, 438.918);\n    polygon.ps[3] = Point(743.246, 398.918);\n    new ShapeRef(router, polygon, 298);\n\n    // shapeRef299\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(751.246, 398.918);\n    polygon.ps[1] = Point(751.246, 438.918);\n    polygon.ps[2] = Point(695.246, 438.918);\n    polygon.ps[3] = Point(695.246, 398.918);\n    new ShapeRef(router, polygon, 299);\n\n    // shapeRef300\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(751.246, 366.918);\n    polygon.ps[1] = Point(751.246, 406.918);\n    polygon.ps[2] = Point(695.246, 406.918);\n    polygon.ps[3] = Point(695.246, 366.918);\n    new ShapeRef(router, polygon, 300);\n\n    // shapeRef301\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(721.246, 182.918);\n    polygon.ps[1] = Point(721.246, 222.918);\n    polygon.ps[2] = Point(665.246, 222.918);\n    polygon.ps[3] = Point(665.246, 182.918);\n    new ShapeRef(router, polygon, 301);\n\n    // shapeRef302\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(673.246, 172.918);\n    polygon.ps[1] = Point(673.246, 212.918);\n    polygon.ps[2] = Point(617.246, 212.918);\n    polygon.ps[3] = Point(617.246, 172.918);\n    new ShapeRef(router, polygon, 302);\n\n    // shapeRef303\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(673.246, 108.918);\n    polygon.ps[1] = Point(673.246, 148.918);\n    polygon.ps[2] = Point(617.246, 148.918);\n    polygon.ps[3] = Point(617.246, 108.918);\n    new ShapeRef(router, polygon, 303);\n\n    // shapeRef304\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(643.246, 570.918);\n    polygon.ps[1] = Point(643.246, 610.918);\n    polygon.ps[2] = Point(587.246, 610.918);\n    polygon.ps[3] = Point(587.246, 570.918);\n    new ShapeRef(router, polygon, 304);\n\n    // shapeRef305\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(595.246, 602.918);\n    polygon.ps[1] = Point(595.246, 642.918);\n    polygon.ps[2] = Point(539.246, 642.918);\n    polygon.ps[3] = Point(539.246, 602.918);\n    new ShapeRef(router, polygon, 305);\n\n    // shapeRef306\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(595.246, 570.918);\n    polygon.ps[1] = Point(595.246, 610.918);\n    polygon.ps[2] = Point(539.246, 610.918);\n    polygon.ps[3] = Point(539.246, 570.918);\n    new ShapeRef(router, polygon, 306);\n\n    // shapeRef307\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(643.246, 466.951);\n    polygon.ps[1] = Point(643.246, 506.951);\n    polygon.ps[2] = Point(587.246, 506.951);\n    polygon.ps[3] = Point(587.246, 466.951);\n    new ShapeRef(router, polygon, 307);\n\n    // shapeRef308\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(595.246, 494.918);\n    polygon.ps[1] = Point(595.246, 534.918);\n    polygon.ps[2] = Point(539.246, 534.918);\n    polygon.ps[3] = Point(539.246, 494.918);\n    new ShapeRef(router, polygon, 308);\n\n    // shapeRef309\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(595.246, 462.918);\n    polygon.ps[1] = Point(595.246, 502.918);\n    polygon.ps[2] = Point(539.246, 502.918);\n    polygon.ps[3] = Point(539.246, 462.918);\n    new ShapeRef(router, polygon, 309);\n\n    // shapeRef310\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(643.246, 398.918);\n    polygon.ps[1] = Point(643.246, 438.918);\n    polygon.ps[2] = Point(587.246, 438.918);\n    polygon.ps[3] = Point(587.246, 398.918);\n    new ShapeRef(router, polygon, 310);\n\n    // shapeRef311\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(595.246, 398.918);\n    polygon.ps[1] = Point(595.246, 438.918);\n    polygon.ps[2] = Point(539.246, 438.918);\n    polygon.ps[3] = Point(539.246, 398.918);\n    new ShapeRef(router, polygon, 311);\n\n    // shapeRef312\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(595.246, 366.918);\n    polygon.ps[1] = Point(595.246, 406.918);\n    polygon.ps[2] = Point(539.246, 406.918);\n    polygon.ps[3] = Point(539.246, 366.918);\n    new ShapeRef(router, polygon, 312);\n\n    // shapeRef313\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(565.246, 182.918);\n    polygon.ps[1] = Point(565.246, 222.918);\n    polygon.ps[2] = Point(509.246, 222.918);\n    polygon.ps[3] = Point(509.246, 182.918);\n    new ShapeRef(router, polygon, 313);\n\n    // shapeRef314\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(517.246, 172.918);\n    polygon.ps[1] = Point(517.246, 212.918);\n    polygon.ps[2] = Point(461.246, 212.918);\n    polygon.ps[3] = Point(461.246, 172.918);\n    new ShapeRef(router, polygon, 314);\n\n    // shapeRef315\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(517.246, 108.918);\n    polygon.ps[1] = Point(517.246, 148.918);\n    polygon.ps[2] = Point(461.246, 148.918);\n    polygon.ps[3] = Point(461.246, 108.918);\n    new ShapeRef(router, polygon, 315);\n\n    // shapeRef316\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(487.246, 570.918);\n    polygon.ps[1] = Point(487.246, 610.918);\n    polygon.ps[2] = Point(431.246, 610.918);\n    polygon.ps[3] = Point(431.246, 570.918);\n    new ShapeRef(router, polygon, 316);\n\n    // shapeRef317\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(439.246, 602.918);\n    polygon.ps[1] = Point(439.246, 642.918);\n    polygon.ps[2] = Point(383.246, 642.918);\n    polygon.ps[3] = Point(383.246, 602.918);\n    new ShapeRef(router, polygon, 317);\n\n    // shapeRef318\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(439.246, 570.918);\n    polygon.ps[1] = Point(439.246, 610.918);\n    polygon.ps[2] = Point(383.246, 610.918);\n    polygon.ps[3] = Point(383.246, 570.918);\n    new ShapeRef(router, polygon, 318);\n\n    // shapeRef319\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(439.246, 494.918);\n    polygon.ps[1] = Point(439.246, 534.918);\n    polygon.ps[2] = Point(383.246, 534.918);\n    polygon.ps[3] = Point(383.246, 494.918);\n    new ShapeRef(router, polygon, 319);\n\n    // shapeRef320\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(439.246, 462.918);\n    polygon.ps[1] = Point(439.246, 502.918);\n    polygon.ps[2] = Point(383.246, 502.918);\n    polygon.ps[3] = Point(383.246, 462.918);\n    new ShapeRef(router, polygon, 320);\n\n    // shapeRef321\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(487.246, 398.918);\n    polygon.ps[1] = Point(487.246, 438.918);\n    polygon.ps[2] = Point(431.246, 438.918);\n    polygon.ps[3] = Point(431.246, 398.918);\n    new ShapeRef(router, polygon, 321);\n\n    // shapeRef322\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(439.246, 398.918);\n    polygon.ps[1] = Point(439.246, 438.918);\n    polygon.ps[2] = Point(383.246, 438.918);\n    polygon.ps[3] = Point(383.246, 398.918);\n    new ShapeRef(router, polygon, 322);\n\n    // shapeRef323\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(439.246, 366.918);\n    polygon.ps[1] = Point(439.246, 406.918);\n    polygon.ps[2] = Point(383.246, 406.918);\n    polygon.ps[3] = Point(383.246, 366.918);\n    new ShapeRef(router, polygon, 323);\n\n    // shapeRef324\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(409.246, 182.918);\n    polygon.ps[1] = Point(409.246, 222.918);\n    polygon.ps[2] = Point(353.246, 222.918);\n    polygon.ps[3] = Point(353.246, 182.918);\n    new ShapeRef(router, polygon, 324);\n\n    // shapeRef325\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(361.246, 172.918);\n    polygon.ps[1] = Point(361.246, 212.918);\n    polygon.ps[2] = Point(305.246, 212.918);\n    polygon.ps[3] = Point(305.246, 172.918);\n    new ShapeRef(router, polygon, 325);\n\n    // shapeRef326\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(361.246, 108.918);\n    polygon.ps[1] = Point(361.246, 148.918);\n    polygon.ps[2] = Point(305.246, 148.918);\n    polygon.ps[3] = Point(305.246, 108.918);\n    new ShapeRef(router, polygon, 326);\n\n    // shapeRef327\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(331.246, 570.918);\n    polygon.ps[1] = Point(331.246, 610.918);\n    polygon.ps[2] = Point(275.246, 610.918);\n    polygon.ps[3] = Point(275.246, 570.918);\n    new ShapeRef(router, polygon, 327);\n\n    // shapeRef328\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(283.246, 602.918);\n    polygon.ps[1] = Point(283.246, 642.918);\n    polygon.ps[2] = Point(227.246, 642.918);\n    polygon.ps[3] = Point(227.246, 602.918);\n    new ShapeRef(router, polygon, 328);\n\n    // shapeRef329\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(283.246, 570.918);\n    polygon.ps[1] = Point(283.246, 610.918);\n    polygon.ps[2] = Point(227.246, 610.918);\n    polygon.ps[3] = Point(227.246, 570.918);\n    new ShapeRef(router, polygon, 329);\n\n    // shapeRef330\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(283.246, 494.918);\n    polygon.ps[1] = Point(283.246, 534.918);\n    polygon.ps[2] = Point(227.246, 534.918);\n    polygon.ps[3] = Point(227.246, 494.918);\n    new ShapeRef(router, polygon, 330);\n\n    // shapeRef331\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(283.246, 462.918);\n    polygon.ps[1] = Point(283.246, 502.918);\n    polygon.ps[2] = Point(227.246, 502.918);\n    polygon.ps[3] = Point(227.246, 462.918);\n    new ShapeRef(router, polygon, 331);\n\n    // shapeRef332\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(331.246, 398.918);\n    polygon.ps[1] = Point(331.246, 438.918);\n    polygon.ps[2] = Point(275.246, 438.918);\n    polygon.ps[3] = Point(275.246, 398.918);\n    new ShapeRef(router, polygon, 332);\n\n    // shapeRef333\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(283.246, 398.918);\n    polygon.ps[1] = Point(283.246, 438.918);\n    polygon.ps[2] = Point(227.246, 438.918);\n    polygon.ps[3] = Point(227.246, 398.918);\n    new ShapeRef(router, polygon, 333);\n\n    // shapeRef334\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(283.246, 366.918);\n    polygon.ps[1] = Point(283.246, 406.918);\n    polygon.ps[2] = Point(227.246, 406.918);\n    polygon.ps[3] = Point(227.246, 366.918);\n    new ShapeRef(router, polygon, 334);\n\n    // shapeRef335\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(331.246, 236.918);\n    polygon.ps[1] = Point(331.246, 276.918);\n    polygon.ps[2] = Point(275.246, 276.918);\n    polygon.ps[3] = Point(275.246, 236.918);\n    new ShapeRef(router, polygon, 335);\n\n    // shapeRef336\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(221.246, 108.918);\n    polygon.ps[1] = Point(221.246, 148.918);\n    polygon.ps[2] = Point(165.246, 148.918);\n    polygon.ps[3] = Point(165.246, 108.918);\n    new ShapeRef(router, polygon, 336);\n\n    // shapeRef337\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(221.246, 172.918);\n    polygon.ps[1] = Point(221.246, 212.918);\n    polygon.ps[2] = Point(165.246, 212.918);\n    polygon.ps[3] = Point(165.246, 172.918);\n    new ShapeRef(router, polygon, 337);\n\n    // shapeRef338\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(173.246, 570.918);\n    polygon.ps[1] = Point(173.246, 610.918);\n    polygon.ps[2] = Point(117.246, 610.918);\n    polygon.ps[3] = Point(117.246, 570.918);\n    new ShapeRef(router, polygon, 338);\n\n    // shapeRef339\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(125.246, 602.918);\n    polygon.ps[1] = Point(125.246, 642.918);\n    polygon.ps[2] = Point(69.2456, 642.918);\n    polygon.ps[3] = Point(69.2456, 602.918);\n    new ShapeRef(router, polygon, 339);\n\n    // shapeRef340\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(125.246, 570.918);\n    polygon.ps[1] = Point(125.246, 610.918);\n    polygon.ps[2] = Point(69.2456, 610.918);\n    polygon.ps[3] = Point(69.2456, 570.918);\n    new ShapeRef(router, polygon, 340);\n\n    // shapeRef341\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(125.246, 494.918);\n    polygon.ps[1] = Point(125.246, 534.918);\n    polygon.ps[2] = Point(69.2456, 534.918);\n    polygon.ps[3] = Point(69.2456, 494.918);\n    new ShapeRef(router, polygon, 341);\n\n    // shapeRef342\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(125.246, 462.918);\n    polygon.ps[1] = Point(125.246, 502.918);\n    polygon.ps[2] = Point(69.2456, 502.918);\n    polygon.ps[3] = Point(69.2456, 462.918);\n    new ShapeRef(router, polygon, 342);\n\n    // shapeRef343\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(173.246, 398.918);\n    polygon.ps[1] = Point(173.246, 438.918);\n    polygon.ps[2] = Point(117.246, 438.918);\n    polygon.ps[3] = Point(117.246, 398.918);\n    new ShapeRef(router, polygon, 343);\n\n    // shapeRef344\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(125.246, 398.918);\n    polygon.ps[1] = Point(125.246, 438.918);\n    polygon.ps[2] = Point(69.2456, 438.918);\n    polygon.ps[3] = Point(69.2456, 398.918);\n    new ShapeRef(router, polygon, 344);\n\n    // shapeRef345\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(125.246, 366.918);\n    polygon.ps[1] = Point(125.246, 406.918);\n    polygon.ps[2] = Point(69.2456, 406.918);\n    polygon.ps[3] = Point(69.2456, 366.918);\n    new ShapeRef(router, polygon, 345);\n\n    // shapeRef346\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(45.2456, 172.918);\n    polygon.ps[1] = Point(45.2456, 212.918);\n    polygon.ps[2] = Point(-10.7544, 212.918);\n    polygon.ps[3] = Point(-10.7544, 172.918);\n    new ShapeRef(router, polygon, 346);\n\n    // shapeRef347\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(45.2456, 108.918);\n    polygon.ps[1] = Point(45.2456, 148.918);\n    polygon.ps[2] = Point(-10.7544, 148.918);\n    polygon.ps[3] = Point(-10.7544, 108.918);\n    new ShapeRef(router, polygon, 347);\n\n    // shapeRef348\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(313.246, 150.918);\n    polygon.ps[1] = Point(313.246, 190.918);\n    polygon.ps[2] = Point(257.246, 190.918);\n    polygon.ps[3] = Point(257.246, 150.918);\n    new ShapeRef(router, polygon, 348);\n\n    // shapeRef349\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(265.246, 66.9179);\n    polygon.ps[1] = Point(265.246, 106.918);\n    polygon.ps[2] = Point(209.246, 106.918);\n    polygon.ps[3] = Point(209.246, 66.9179);\n    new ShapeRef(router, polygon, 349);\n\n    // shapeRef350\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(265.246, 34.9179);\n    polygon.ps[1] = Point(265.246, 74.9179);\n    polygon.ps[2] = Point(209.246, 74.9179);\n    polygon.ps[3] = Point(209.246, 34.9179);\n    new ShapeRef(router, polygon, 350);\n\n    // shapeRef351\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(125.246, 150.918);\n    polygon.ps[1] = Point(125.246, 190.918);\n    polygon.ps[2] = Point(69.2456, 190.918);\n    polygon.ps[3] = Point(69.2456, 150.918);\n    new ShapeRef(router, polygon, 351);\n\n    // shapeRef352\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(125.246, 12.9179);\n    polygon.ps[1] = Point(125.246, 52.9179);\n    polygon.ps[2] = Point(69.2456, 52.9179);\n    polygon.ps[3] = Point(69.2456, 12.9179);\n    new ShapeRef(router, polygon, 352);\n\n    // shapeRef353\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(125.246, -19.0821);\n    polygon.ps[1] = Point(125.246, 20.9179);\n    polygon.ps[2] = Point(69.2456, 20.9179);\n    polygon.ps[3] = Point(69.2456, -19.0821);\n    new ShapeRef(router, polygon, 353);\n\n    // shapeRef354\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(408.962, -49.0821);\n    polygon.ps[1] = Point(408.962, -9.08205);\n    polygon.ps[2] = Point(352.962, -9.08205);\n    polygon.ps[3] = Point(352.962, -49.0821);\n    new ShapeRef(router, polygon, 354);\n\n    // shapeRef355\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(307.219, -49.0821);\n    polygon.ps[1] = Point(307.219, -9.08205);\n    polygon.ps[2] = Point(251.219, -9.08205);\n    polygon.ps[3] = Point(251.219, -49.0821);\n    new ShapeRef(router, polygon, 355);\n\n    // shapeRef356\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(125.246, 290.918);\n    polygon.ps[1] = Point(125.246, 330.918);\n    polygon.ps[2] = Point(69.2456, 330.918);\n    polygon.ps[3] = Point(69.2456, 290.918);\n    new ShapeRef(router, polygon, 356);\n\n    // shapeRef357\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(221.246, 204.918);\n    polygon.ps[1] = Point(221.246, 244.918);\n    polygon.ps[2] = Point(165.246, 244.918);\n    polygon.ps[3] = Point(165.246, 204.918);\n    new ShapeRef(router, polygon, 357);\n\n    // shapeRef358\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(361.246, 204.918);\n    polygon.ps[1] = Point(361.246, 244.918);\n    polygon.ps[2] = Point(305.246, 244.918);\n    polygon.ps[3] = Point(305.246, 204.918);\n    new ShapeRef(router, polygon, 358);\n\n    // shapeRef359\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(517.246, 204.918);\n    polygon.ps[1] = Point(517.246, 244.918);\n    polygon.ps[2] = Point(461.246, 244.918);\n    polygon.ps[3] = Point(461.246, 204.918);\n    new ShapeRef(router, polygon, 359);\n\n    // shapeRef360\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(673.246, 204.918);\n    polygon.ps[1] = Point(673.246, 244.918);\n    polygon.ps[2] = Point(617.246, 244.918);\n    polygon.ps[3] = Point(617.246, 204.918);\n    new ShapeRef(router, polygon, 360);\n\n    // shapeRef361\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(829.246, 204.918);\n    polygon.ps[1] = Point(829.246, 244.918);\n    polygon.ps[2] = Point(773.246, 244.918);\n    polygon.ps[3] = Point(773.246, 204.918);\n    new ShapeRef(router, polygon, 361);\n\n    // shapeRef362\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(985.246, 204.918);\n    polygon.ps[1] = Point(985.246, 244.918);\n    polygon.ps[2] = Point(929.246, 244.918);\n    polygon.ps[3] = Point(929.246, 204.918);\n    new ShapeRef(router, polygon, 362);\n\n    // shapeRef363\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(45.2456, 344.918);\n    polygon.ps[1] = Point(45.2456, 384.918);\n    polygon.ps[2] = Point(-10.7544, 384.918);\n    polygon.ps[3] = Point(-10.7544, 344.918);\n    new ShapeRef(router, polygon, 363);\n\n    // shapeRef364\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(283.246, 430.918);\n    polygon.ps[1] = Point(283.246, 470.918);\n    polygon.ps[2] = Point(227.246, 470.918);\n    polygon.ps[3] = Point(227.246, 430.918);\n    new ShapeRef(router, polygon, 364);\n\n    // shapeRef365\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(439.246, 430.918);\n    polygon.ps[1] = Point(439.246, 470.918);\n    polygon.ps[2] = Point(383.246, 470.918);\n    polygon.ps[3] = Point(383.246, 430.918);\n    new ShapeRef(router, polygon, 365);\n\n    // shapeRef366\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(595.246, 430.918);\n    polygon.ps[1] = Point(595.246, 470.918);\n    polygon.ps[2] = Point(539.246, 470.918);\n    polygon.ps[3] = Point(539.246, 430.918);\n    new ShapeRef(router, polygon, 366);\n\n    // shapeRef367\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(907.246, 430.918);\n    polygon.ps[1] = Point(907.246, 470.918);\n    polygon.ps[2] = Point(851.246, 470.918);\n    polygon.ps[3] = Point(851.246, 430.918);\n    new ShapeRef(router, polygon, 367);\n\n    // shapeRef368\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(1063.25, 430.918);\n    polygon.ps[1] = Point(1063.25, 470.918);\n    polygon.ps[2] = Point(1007.25, 470.918);\n    polygon.ps[3] = Point(1007.25, 430.918);\n    new ShapeRef(router, polygon, 368);\n\n    // shapeRef369\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(751.246, 430.918);\n    polygon.ps[1] = Point(751.246, 470.918);\n    polygon.ps[2] = Point(695.246, 470.918);\n    polygon.ps[3] = Point(695.246, 430.918);\n    new ShapeRef(router, polygon, 369);\n\n    // shapeRef370\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(125.246, 538.918);\n    polygon.ps[1] = Point(125.246, 578.918);\n    polygon.ps[2] = Point(69.2456, 578.918);\n    polygon.ps[3] = Point(69.2456, 538.918);\n    new ShapeRef(router, polygon, 370);\n\n    // shapeRef371\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(283.246, 538.918);\n    polygon.ps[1] = Point(283.246, 578.918);\n    polygon.ps[2] = Point(227.246, 578.918);\n    polygon.ps[3] = Point(227.246, 538.918);\n    new ShapeRef(router, polygon, 371);\n\n    // shapeRef372\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(439.246, 538.918);\n    polygon.ps[1] = Point(439.246, 578.918);\n    polygon.ps[2] = Point(383.246, 578.918);\n    polygon.ps[3] = Point(383.246, 538.918);\n    new ShapeRef(router, polygon, 372);\n\n    // shapeRef373\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(595.246, 538.918);\n    polygon.ps[1] = Point(595.246, 578.918);\n    polygon.ps[2] = Point(539.246, 578.918);\n    polygon.ps[3] = Point(539.246, 538.918);\n    new ShapeRef(router, polygon, 373);\n\n    // shapeRef374\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(751.246, 538.918);\n    polygon.ps[1] = Point(751.246, 578.918);\n    polygon.ps[2] = Point(695.246, 578.918);\n    polygon.ps[3] = Point(695.246, 538.918);\n    new ShapeRef(router, polygon, 374);\n\n    // shapeRef375\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(907.246, 538.918);\n    polygon.ps[1] = Point(907.246, 578.918);\n    polygon.ps[2] = Point(851.246, 578.918);\n    polygon.ps[3] = Point(851.246, 538.918);\n    new ShapeRef(router, polygon, 375);\n\n    // shapeRef376\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(1063.25, 538.918);\n    polygon.ps[1] = Point(1063.25, 578.918);\n    polygon.ps[2] = Point(1007.25, 578.918);\n    polygon.ps[3] = Point(1007.25, 538.918);\n    new ShapeRef(router, polygon, 376);\n\n    // shapeRef377\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(125.246, 634.918);\n    polygon.ps[1] = Point(125.246, 674.918);\n    polygon.ps[2] = Point(69.2456, 674.918);\n    polygon.ps[3] = Point(69.2456, 634.918);\n    new ShapeRef(router, polygon, 377);\n\n    // shapeRef378\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(283.246, 634.918);\n    polygon.ps[1] = Point(283.246, 674.918);\n    polygon.ps[2] = Point(227.246, 674.918);\n    polygon.ps[3] = Point(227.246, 634.918);\n    new ShapeRef(router, polygon, 378);\n\n    // shapeRef379\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(439.246, 634.918);\n    polygon.ps[1] = Point(439.246, 674.918);\n    polygon.ps[2] = Point(383.246, 674.918);\n    polygon.ps[3] = Point(383.246, 634.918);\n    new ShapeRef(router, polygon, 379);\n\n    // shapeRef380\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(595.246, 634.918);\n    polygon.ps[1] = Point(595.246, 674.918);\n    polygon.ps[2] = Point(539.246, 674.918);\n    polygon.ps[3] = Point(539.246, 634.918);\n    new ShapeRef(router, polygon, 380);\n\n    // shapeRef381\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(751.246, 634.918);\n    polygon.ps[1] = Point(751.246, 674.918);\n    polygon.ps[2] = Point(695.246, 674.918);\n    polygon.ps[3] = Point(695.246, 634.918);\n    new ShapeRef(router, polygon, 381);\n\n    // shapeRef382\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(907.246, 634.918);\n    polygon.ps[1] = Point(907.246, 674.918);\n    polygon.ps[2] = Point(851.246, 674.918);\n    polygon.ps[3] = Point(851.246, 634.918);\n    new ShapeRef(router, polygon, 382);\n\n    // shapeRef383\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(1063.25, 634.918);\n    polygon.ps[1] = Point(1063.25, 674.918);\n    polygon.ps[2] = Point(1007.25, 674.918);\n    polygon.ps[3] = Point(1007.25, 634.918);\n    new ShapeRef(router, polygon, 383);\n\n    // shapeRef384\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(1261.25, 172.918);\n    polygon.ps[1] = Point(1261.25, 212.918);\n    polygon.ps[2] = Point(1205.25, 212.918);\n    polygon.ps[3] = Point(1205.25, 172.918);\n    new ShapeRef(router, polygon, 384);\n\n    // shapeRef385\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(1351.25, 398.918);\n    polygon.ps[1] = Point(1351.25, 438.918);\n    polygon.ps[2] = Point(1295.25, 438.918);\n    polygon.ps[3] = Point(1295.25, 398.918);\n    new ShapeRef(router, polygon, 385);\n\n    // shapeRef386\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(1351.25, 494.918);\n    polygon.ps[1] = Point(1351.25, 534.918);\n    polygon.ps[2] = Point(1295.25, 534.918);\n    polygon.ps[3] = Point(1295.25, 494.918);\n    new ShapeRef(router, polygon, 386);\n\n    // shapeRef387\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(1351.25, 602.918);\n    polygon.ps[1] = Point(1351.25, 642.918);\n    polygon.ps[2] = Point(1295.25, 642.918);\n    polygon.ps[3] = Point(1295.25, 602.918);\n    new ShapeRef(router, polygon, 387);\n\n    // shapeRef388\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(1063.25, 698.918);\n    polygon.ps[1] = Point(1063.25, 738.918);\n    polygon.ps[2] = Point(1007.25, 738.918);\n    polygon.ps[3] = Point(1007.25, 698.918);\n    new ShapeRef(router, polygon, 388);\n\n    // shapeRef389\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(1063.25, 730.918);\n    polygon.ps[1] = Point(1063.25, 770.918);\n    polygon.ps[2] = Point(1007.25, 770.918);\n    polygon.ps[3] = Point(1007.25, 730.918);\n    new ShapeRef(router, polygon, 389);\n\n    // shapeRef390\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(1351.25, 698.918);\n    polygon.ps[1] = Point(1351.25, 738.918);\n    polygon.ps[2] = Point(1295.25, 738.918);\n    polygon.ps[3] = Point(1295.25, 698.918);\n    new ShapeRef(router, polygon, 390);\n\n    // shapeRef391\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(1321.25, 182.918);\n    polygon.ps[1] = Point(1321.25, 222.918);\n    polygon.ps[2] = Point(1265.25, 222.918);\n    polygon.ps[3] = Point(1265.25, 182.918);\n    new ShapeRef(router, polygon, 391);\n\n    // shapeRef392\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(1447.25, 624.918);\n    polygon.ps[1] = Point(1447.25, 664.918);\n    polygon.ps[2] = Point(1391.25, 664.918);\n    polygon.ps[3] = Point(1391.25, 624.918);\n    new ShapeRef(router, polygon, 392);\n\n    // shapeRef393\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(173.246, 226.918);\n    polygon.ps[1] = Point(173.246, 266.918);\n    polygon.ps[2] = Point(117.246, 266.918);\n    polygon.ps[3] = Point(117.246, 226.918);\n    new ShapeRef(router, polygon, 393);\n\n    // shapeRef394\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(173.246, 258.918);\n    polygon.ps[1] = Point(173.246, 298.918);\n    polygon.ps[2] = Point(117.246, 298.918);\n    polygon.ps[3] = Point(117.246, 258.918);\n    new ShapeRef(router, polygon, 394);\n\n    // shapeRef395\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(372.466, 14.9179);\n    polygon.ps[1] = Point(372.466, 54.9179);\n    polygon.ps[2] = Point(312.466, 54.9179);\n    polygon.ps[3] = Point(312.466, 14.9179);\n    new ShapeRef(router, polygon, 395);\n\n    // shapeRef396\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(47.2456, -91.0821);\n    polygon.ps[1] = Point(47.2456, -51.0821);\n    polygon.ps[2] = Point(-12.7544, -51.0821);\n    polygon.ps[3] = Point(-12.7544, -91.0821);\n    new ShapeRef(router, polygon, 396);\n\n    // shapeRef397\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(372.466, 66.9179);\n    polygon.ps[1] = Point(372.466, 106.918);\n    polygon.ps[2] = Point(312.466, 106.918);\n    polygon.ps[3] = Point(312.466, 66.9179);\n    new ShapeRef(router, polygon, 397);\n\n    // connRef398\n    connRef = new ConnRef(router, 398);\n    srcPt = ConnEnd(Point(982, 596), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(979.246, 676.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef399\n    connRef = new ConnRef(router, 399);\n    srcPt = ConnEnd(Point(840, 596), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(823.246, 676.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef400\n    connRef = new ConnRef(router, 400);\n    srcPt = ConnEnd(Point(699, 596), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(673.933, 676.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef401\n    connRef = new ConnRef(router, 401);\n    srcPt = ConnEnd(Point(557, 596), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(527.246, 676.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef402\n    connRef = new ConnRef(router, 402);\n    srcPt = ConnEnd(Point(415, 596), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(371.246, 676.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef403\n    connRef = new ConnRef(router, 403);\n    srcPt = ConnEnd(Point(273, 596), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(215.246, 676.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef404\n    connRef = new ConnRef(router, 404);\n    srcPt = ConnEnd(Point(132, 615), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(57.2456, 676.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef405\n    connRef = new ConnRef(router, 405);\n    srcPt = ConnEnd(Point(1203.25, 676.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(1227, 632), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef406\n    connRef = new ConnRef(router, 406);\n    srcPt = ConnEnd(Point(1209, 586), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(1203.25, 676.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef407\n    connRef = new ConnRef(router, 407);\n    srcPt = ConnEnd(Point(1203.25, 676.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(1209, 667), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef408\n    connRef = new ConnRef(router, 408);\n    srcPt = ConnEnd(Point(1203.25, 676.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(1159, 667), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef409\n    connRef = new ConnRef(router, 409);\n    srcPt = ConnEnd(Point(1209, 566), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(1203.25, 558.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef410\n    connRef = new ConnRef(router, 410);\n    srcPt = ConnEnd(Point(1209, 505), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(1203.25, 558.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef411\n    connRef = new ConnRef(router, 411);\n    srcPt = ConnEnd(Point(1159, 575), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(1203.25, 558.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef412\n    connRef = new ConnRef(router, 412);\n    srcPt = ConnEnd(Point(1209, 585), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(1203.25, 558.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef413\n    connRef = new ConnRef(router, 413);\n    srcPt = ConnEnd(Point(1209, 485), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(1203.25, 447.955), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef414\n    connRef = new ConnRef(router, 414);\n    srcPt = ConnEnd(Point(1209, 414), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(1203.25, 447.955), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef415\n    connRef = new ConnRef(router, 415);\n    srcPt = ConnEnd(Point(1159, 485), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(1203.25, 447.955), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef416\n    connRef = new ConnRef(router, 416);\n    srcPt = ConnEnd(Point(1209, 394), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(1203.25, 332.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef417\n    connRef = new ConnRef(router, 417);\n    srcPt = ConnEnd(Point(1159, 394), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(1203.25, 332.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef418\n    connRef = new ConnRef(router, 418);\n    srcPt = ConnEnd(Point(1449.25, 676.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(1299, 667), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef419\n    connRef = new ConnRef(router, 419);\n    srcPt = ConnEnd(Point(1171.25, 676.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(1059, 667), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef420\n    connRef = new ConnRef(router, 420);\n    srcPt = ConnEnd(Point(1171.25, 676.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(1109, 667), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef421\n    connRef = new ConnRef(router, 421);\n    srcPt = ConnEnd(Point(1050, 634), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(1171.25, 676.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef422\n    connRef = new ConnRef(router, 422);\n    srcPt = ConnEnd(Point(790, 687), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(823.246, 750.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef423\n    connRef = new ConnRef(router, 423);\n    srcPt = ConnEnd(Point(1059, 687), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(1171.25, 750.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef424\n    connRef = new ConnRef(router, 424);\n    srcPt = ConnEnd(Point(1109, 687), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(1171.25, 750.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef425\n    connRef = new ConnRef(router, 425);\n    srcPt = ConnEnd(Point(533, 687), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(527.246, 750.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef426\n    connRef = new ConnRef(router, 426);\n    srcPt = ConnEnd(Point(390, 687), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(371.246, 750.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef427\n    connRef = new ConnRef(router, 427);\n    srcPt = ConnEnd(Point(1247, 632), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(1449.25, 676.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef428\n    connRef = new ConnRef(router, 428);\n    srcPt = ConnEnd(Point(982, 615), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(979.246, 676.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef429\n    connRef = new ConnRef(router, 429);\n    srcPt = ConnEnd(Point(840, 615), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(823.246, 676.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef430\n    connRef = new ConnRef(router, 430);\n    srcPt = ConnEnd(Point(699, 615), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(673.933, 676.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef431\n    connRef = new ConnRef(router, 431);\n    srcPt = ConnEnd(Point(557, 615), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(527.246, 676.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef432\n    connRef = new ConnRef(router, 432);\n    srcPt = ConnEnd(Point(415, 615), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(371.246, 676.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef433\n    connRef = new ConnRef(router, 433);\n    srcPt = ConnEnd(Point(273, 615), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(215.246, 676.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef434\n    connRef = new ConnRef(router, 434);\n    srcPt = ConnEnd(Point(132, 596), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(57.2456, 676.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef435\n    connRef = new ConnRef(router, 435);\n    srcPt = ConnEnd(Point(982, 516), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(979.246, 558.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef436\n    connRef = new ConnRef(router, 436);\n    srcPt = ConnEnd(Point(982, 496), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(979.246, 447.955), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef437\n    connRef = new ConnRef(router, 437);\n    srcPt = ConnEnd(Point(840, 496), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(823.246, 447.955), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef438\n    connRef = new ConnRef(router, 438);\n    srcPt = ConnEnd(Point(840, 516), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(823.246, 558.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef439\n    connRef = new ConnRef(router, 439);\n    srcPt = ConnEnd(Point(699, 516), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(673.933, 558.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef440\n    connRef = new ConnRef(router, 440);\n    srcPt = ConnEnd(Point(699, 496), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(673.933, 447.955), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef441\n    connRef = new ConnRef(router, 441);\n    srcPt = ConnEnd(Point(557, 496), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(527.246, 447.955), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef442\n    connRef = new ConnRef(router, 442);\n    srcPt = ConnEnd(Point(557, 516), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(527.246, 558.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef443\n    connRef = new ConnRef(router, 443);\n    srcPt = ConnEnd(Point(415, 516), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(371.246, 558.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef444\n    connRef = new ConnRef(router, 444);\n    srcPt = ConnEnd(Point(415, 496), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(371.246, 447.955), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef445\n    connRef = new ConnRef(router, 445);\n    srcPt = ConnEnd(Point(273, 496), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(215.246, 447.955), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef446\n    connRef = new ConnRef(router, 446);\n    srcPt = ConnEnd(Point(273, 516), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(215.246, 558.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef447\n    connRef = new ConnRef(router, 447);\n    srcPt = ConnEnd(Point(132, 496), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(57.2456, 447.955), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef448\n    connRef = new ConnRef(router, 448);\n    srcPt = ConnEnd(Point(132, 516), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(57.2456, 558.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef449\n    connRef = new ConnRef(router, 449);\n    srcPt = ConnEnd(Point(1219, 319), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(1203.25, 332.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef450\n    connRef = new ConnRef(router, 450);\n    srcPt = ConnEnd(Point(1199, 319), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(197.246, 160.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef451\n    connRef = new ConnRef(router, 451);\n    srcPt = ConnEnd(Point(1199, 319), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(979.246, 676.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef452\n    connRef = new ConnRef(router, 452);\n    srcPt = ConnEnd(Point(1209, 687), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(1203.25, 750.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef453\n    connRef = new ConnRef(router, 453);\n    srcPt = ConnEnd(Point(1299, 687), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(1449.25, 750.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef454\n    connRef = new ConnRef(router, 454);\n    srcPt = ConnEnd(Point(649, 687), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(673.933, 750.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef455\n    connRef = new ConnRef(router, 455);\n    srcPt = ConnEnd(Point(840, 687), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(823.246, 750.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef456\n    connRef = new ConnRef(router, 456);\n    srcPt = ConnEnd(Point(132, 195), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(57.2456, 160.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef457\n    connRef = new ConnRef(router, 457);\n    srcPt = ConnEnd(Point(132, 338), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(57.2456, 332.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef458\n    connRef = new ConnRef(router, 458);\n    srcPt = ConnEnd(Point(992, 319), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(979.246, 332.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef459\n    connRef = new ConnRef(router, 459);\n    srcPt = ConnEnd(Point(850, 319), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(823.246, 332.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef460\n    connRef = new ConnRef(router, 460);\n    srcPt = ConnEnd(Point(709, 319), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(673.933, 332.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef461\n    connRef = new ConnRef(router, 461);\n    srcPt = ConnEnd(Point(567, 319), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(527.246, 332.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef462\n    connRef = new ConnRef(router, 462);\n    srcPt = ConnEnd(Point(425, 319), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(371.246, 332.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef463\n    connRef = new ConnRef(router, 463);\n    srcPt = ConnEnd(Point(273, 309), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(215.246, 332.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef464\n    connRef = new ConnRef(router, 464);\n    srcPt = ConnEnd(Point(982, 687), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(979.246, 750.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef465\n    connRef = new ConnRef(router, 465);\n    srcPt = ConnEnd(Point(932, 668), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(979.246, 750.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef466\n    connRef = new ConnRef(router, 466);\n    srcPt = ConnEnd(Point(982, 577), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(979.246, 676.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef467\n    connRef = new ConnRef(router, 467);\n    srcPt = ConnEnd(Point(982, 557), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(979.246, 558.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef468\n    connRef = new ConnRef(router, 468);\n    srcPt = ConnEnd(Point(932, 596), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(979.246, 676.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef469\n    connRef = new ConnRef(router, 469);\n    srcPt = ConnEnd(Point(932, 576), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(979.246, 558.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef470\n    connRef = new ConnRef(router, 470);\n    srcPt = ConnEnd(Point(932, 577), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(979.246, 676.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef471\n    connRef = new ConnRef(router, 471);\n    srcPt = ConnEnd(Point(932, 557), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(979.246, 558.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef472\n    connRef = new ConnRef(router, 472);\n    srcPt = ConnEnd(Point(932, 505), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(979.246, 558.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef473\n    connRef = new ConnRef(router, 473);\n    srcPt = ConnEnd(Point(932, 485), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(979.246, 447.955), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef474\n    connRef = new ConnRef(router, 474);\n    srcPt = ConnEnd(Point(932, 486), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(979.246, 558.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef475\n    connRef = new ConnRef(router, 475);\n    srcPt = ConnEnd(Point(932, 466), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(979.246, 447.955), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef476\n    connRef = new ConnRef(router, 476);\n    srcPt = ConnEnd(Point(982, 414), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(979.246, 447.955), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef477\n    connRef = new ConnRef(router, 477);\n    srcPt = ConnEnd(Point(982, 394), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(979.246, 332.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef478\n    connRef = new ConnRef(router, 478);\n    srcPt = ConnEnd(Point(932, 414), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(979.246, 447.955), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef479\n    connRef = new ConnRef(router, 479);\n    srcPt = ConnEnd(Point(932, 394), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(979.246, 332.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef480\n    connRef = new ConnRef(router, 480);\n    srcPt = ConnEnd(Point(932, 395), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(979.246, 447.955), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef481\n    connRef = new ConnRef(router, 481);\n    srcPt = ConnEnd(Point(932, 375), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(979.246, 332.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef482\n    connRef = new ConnRef(router, 482);\n    srcPt = ConnEnd(Point(992, 300), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(979.246, 332.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef483\n    connRef = new ConnRef(router, 483);\n    srcPt = ConnEnd(Point(942, 309), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(979.246, 332.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef484\n    connRef = new ConnRef(router, 484);\n    srcPt = ConnEnd(Point(942, 290), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(979.246, 332.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef485\n    connRef = new ConnRef(router, 485);\n    srcPt = ConnEnd(Point(840, 557), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(823.246, 558.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef486\n    connRef = new ConnRef(router, 486);\n    srcPt = ConnEnd(Point(840, 577), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(823.246, 676.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef487\n    connRef = new ConnRef(router, 487);\n    srcPt = ConnEnd(Point(790, 576), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(823.246, 558.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef488\n    connRef = new ConnRef(router, 488);\n    srcPt = ConnEnd(Point(790, 596), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(823.246, 676.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef489\n    connRef = new ConnRef(router, 489);\n    srcPt = ConnEnd(Point(790, 557), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(823.246, 558.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef490\n    connRef = new ConnRef(router, 490);\n    srcPt = ConnEnd(Point(790, 577), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(823.246, 676.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef491\n    connRef = new ConnRef(router, 491);\n    srcPt = ConnEnd(Point(790, 485), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(823.246, 447.955), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef492\n    connRef = new ConnRef(router, 492);\n    srcPt = ConnEnd(Point(790, 505), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(823.246, 558.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef493\n    connRef = new ConnRef(router, 493);\n    srcPt = ConnEnd(Point(790, 466), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(823.246, 447.955), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef494\n    connRef = new ConnRef(router, 494);\n    srcPt = ConnEnd(Point(790, 486), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(823.246, 558.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef495\n    connRef = new ConnRef(router, 495);\n    srcPt = ConnEnd(Point(840, 394), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(823.246, 332.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef496\n    connRef = new ConnRef(router, 496);\n    srcPt = ConnEnd(Point(840, 414), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(823.246, 447.955), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef497\n    connRef = new ConnRef(router, 497);\n    srcPt = ConnEnd(Point(790, 394), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(823.246, 332.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef498\n    connRef = new ConnRef(router, 498);\n    srcPt = ConnEnd(Point(790, 414), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(823.246, 447.955), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef499\n    connRef = new ConnRef(router, 499);\n    srcPt = ConnEnd(Point(790, 375), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(823.246, 332.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef500\n    connRef = new ConnRef(router, 500);\n    srcPt = ConnEnd(Point(790, 395), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(823.246, 447.955), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef501\n    connRef = new ConnRef(router, 501);\n    srcPt = ConnEnd(Point(850, 300), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(823.246, 332.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef502\n    connRef = new ConnRef(router, 502);\n    srcPt = ConnEnd(Point(800, 309), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(823.246, 332.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef503\n    connRef = new ConnRef(router, 503);\n    srcPt = ConnEnd(Point(800, 290), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(823.246, 332.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef504\n    connRef = new ConnRef(router, 504);\n    srcPt = ConnEnd(Point(699, 577), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(673.933, 676.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef505\n    connRef = new ConnRef(router, 505);\n    srcPt = ConnEnd(Point(699, 557), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(673.933, 558.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef506\n    connRef = new ConnRef(router, 506);\n    srcPt = ConnEnd(Point(649, 596), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(673.933, 676.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef507\n    connRef = new ConnRef(router, 507);\n    srcPt = ConnEnd(Point(649, 576), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(673.933, 558.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef508\n    connRef = new ConnRef(router, 508);\n    srcPt = ConnEnd(Point(649, 577), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(673.933, 676.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef509\n    connRef = new ConnRef(router, 509);\n    srcPt = ConnEnd(Point(649, 557), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(673.933, 558.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef510\n    connRef = new ConnRef(router, 510);\n    srcPt = ConnEnd(Point(649, 505), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(673.933, 558.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef511\n    connRef = new ConnRef(router, 511);\n    srcPt = ConnEnd(Point(649, 485), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(673.933, 447.955), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef512\n    connRef = new ConnRef(router, 512);\n    srcPt = ConnEnd(Point(649, 486), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(673.933, 558.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef513\n    connRef = new ConnRef(router, 513);\n    srcPt = ConnEnd(Point(649, 466), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(673.933, 447.955), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef514\n    connRef = new ConnRef(router, 514);\n    srcPt = ConnEnd(Point(699, 414), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(673.933, 447.955), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef515\n    connRef = new ConnRef(router, 515);\n    srcPt = ConnEnd(Point(699, 394), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(673.933, 332.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef516\n    connRef = new ConnRef(router, 516);\n    srcPt = ConnEnd(Point(649, 414), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(673.933, 447.955), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef517\n    connRef = new ConnRef(router, 517);\n    srcPt = ConnEnd(Point(649, 394), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(673.933, 332.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef518\n    connRef = new ConnRef(router, 518);\n    srcPt = ConnEnd(Point(649, 395), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(673.933, 447.955), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef519\n    connRef = new ConnRef(router, 519);\n    srcPt = ConnEnd(Point(649, 375), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(673.933, 332.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef520\n    connRef = new ConnRef(router, 520);\n    srcPt = ConnEnd(Point(709, 300), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(673.933, 332.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef521\n    connRef = new ConnRef(router, 521);\n    srcPt = ConnEnd(Point(659, 309), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(673.933, 332.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef522\n    connRef = new ConnRef(router, 522);\n    srcPt = ConnEnd(Point(659, 290), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(673.933, 332.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef523\n    connRef = new ConnRef(router, 523);\n    srcPt = ConnEnd(Point(557, 557), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(527.246, 558.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef524\n    connRef = new ConnRef(router, 524);\n    srcPt = ConnEnd(Point(557, 577), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(527.246, 676.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef525\n    connRef = new ConnRef(router, 525);\n    srcPt = ConnEnd(Point(507, 576), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(527.246, 558.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef526\n    connRef = new ConnRef(router, 526);\n    srcPt = ConnEnd(Point(507, 596), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(527.246, 676.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef527\n    connRef = new ConnRef(router, 527);\n    srcPt = ConnEnd(Point(507, 557), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(527.246, 558.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef528\n    connRef = new ConnRef(router, 528);\n    srcPt = ConnEnd(Point(507, 577), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(527.246, 676.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef529\n    connRef = new ConnRef(router, 529);\n    srcPt = ConnEnd(Point(557, 477), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(527.246, 447.955), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef530\n    connRef = new ConnRef(router, 530);\n    srcPt = ConnEnd(Point(557, 497), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(527.246, 558.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef531\n    connRef = new ConnRef(router, 531);\n    srcPt = ConnEnd(Point(507, 485), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(527.246, 447.955), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef532\n    connRef = new ConnRef(router, 532);\n    srcPt = ConnEnd(Point(507, 505), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(527.246, 558.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef533\n    connRef = new ConnRef(router, 533);\n    srcPt = ConnEnd(Point(507, 466), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(527.246, 447.955), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef534\n    connRef = new ConnRef(router, 534);\n    srcPt = ConnEnd(Point(507, 486), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(527.246, 558.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef535\n    connRef = new ConnRef(router, 535);\n    srcPt = ConnEnd(Point(557, 394), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(527.246, 332.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef536\n    connRef = new ConnRef(router, 536);\n    srcPt = ConnEnd(Point(557, 414), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(527.246, 447.955), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef537\n    connRef = new ConnRef(router, 537);\n    srcPt = ConnEnd(Point(507, 394), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(527.246, 332.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef538\n    connRef = new ConnRef(router, 538);\n    srcPt = ConnEnd(Point(507, 414), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(527.246, 447.955), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef539\n    connRef = new ConnRef(router, 539);\n    srcPt = ConnEnd(Point(507, 375), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(527.246, 332.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef540\n    connRef = new ConnRef(router, 540);\n    srcPt = ConnEnd(Point(507, 395), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(527.246, 447.955), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef541\n    connRef = new ConnRef(router, 541);\n    srcPt = ConnEnd(Point(567, 300), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(527.246, 332.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef542\n    connRef = new ConnRef(router, 542);\n    srcPt = ConnEnd(Point(517, 309), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(527.246, 332.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef543\n    connRef = new ConnRef(router, 543);\n    srcPt = ConnEnd(Point(517, 290), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(527.246, 332.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef544\n    connRef = new ConnRef(router, 544);\n    srcPt = ConnEnd(Point(415, 577), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(371.246, 676.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef545\n    connRef = new ConnRef(router, 545);\n    srcPt = ConnEnd(Point(415, 557), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(371.246, 558.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef546\n    connRef = new ConnRef(router, 546);\n    srcPt = ConnEnd(Point(365, 596), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(371.246, 676.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef547\n    connRef = new ConnRef(router, 547);\n    srcPt = ConnEnd(Point(365, 576), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(371.246, 558.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef548\n    connRef = new ConnRef(router, 548);\n    srcPt = ConnEnd(Point(365, 577), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(371.246, 676.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef549\n    connRef = new ConnRef(router, 549);\n    srcPt = ConnEnd(Point(365, 557), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(371.246, 558.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef550\n    connRef = new ConnRef(router, 550);\n    srcPt = ConnEnd(Point(365, 505), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(371.246, 558.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef551\n    connRef = new ConnRef(router, 551);\n    srcPt = ConnEnd(Point(365, 485), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(371.246, 447.955), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef552\n    connRef = new ConnRef(router, 552);\n    srcPt = ConnEnd(Point(365, 486), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(371.246, 558.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef553\n    connRef = new ConnRef(router, 553);\n    srcPt = ConnEnd(Point(365, 466), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(371.246, 447.955), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef554\n    connRef = new ConnRef(router, 554);\n    srcPt = ConnEnd(Point(415, 414), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(371.246, 447.955), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef555\n    connRef = new ConnRef(router, 555);\n    srcPt = ConnEnd(Point(415, 394), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(371.246, 332.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef556\n    connRef = new ConnRef(router, 556);\n    srcPt = ConnEnd(Point(365, 414), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(371.246, 447.955), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef557\n    connRef = new ConnRef(router, 557);\n    srcPt = ConnEnd(Point(365, 394), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(371.246, 332.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef558\n    connRef = new ConnRef(router, 558);\n    srcPt = ConnEnd(Point(365, 395), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(371.246, 447.955), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef559\n    connRef = new ConnRef(router, 559);\n    srcPt = ConnEnd(Point(365, 375), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(371.246, 332.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef560\n    connRef = new ConnRef(router, 560);\n    srcPt = ConnEnd(Point(425, 300), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(371.246, 332.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef561\n    connRef = new ConnRef(router, 561);\n    srcPt = ConnEnd(Point(375, 309), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(371.246, 332.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef562\n    connRef = new ConnRef(router, 562);\n    srcPt = ConnEnd(Point(375, 290), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(371.246, 332.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef563\n    connRef = new ConnRef(router, 563);\n    srcPt = ConnEnd(Point(273, 557), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(215.246, 558.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef564\n    connRef = new ConnRef(router, 564);\n    srcPt = ConnEnd(Point(273, 577), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(215.246, 676.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef565\n    connRef = new ConnRef(router, 565);\n    srcPt = ConnEnd(Point(223, 576), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(215.246, 558.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef566\n    connRef = new ConnRef(router, 566);\n    srcPt = ConnEnd(Point(223, 596), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(215.246, 676.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef567\n    connRef = new ConnRef(router, 567);\n    srcPt = ConnEnd(Point(223, 557), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(215.246, 558.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef568\n    connRef = new ConnRef(router, 568);\n    srcPt = ConnEnd(Point(223, 577), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(215.246, 676.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef569\n    connRef = new ConnRef(router, 569);\n    srcPt = ConnEnd(Point(223, 485), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(215.246, 447.955), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef570\n    connRef = new ConnRef(router, 570);\n    srcPt = ConnEnd(Point(223, 505), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(215.246, 558.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef571\n    connRef = new ConnRef(router, 571);\n    srcPt = ConnEnd(Point(223, 466), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(215.246, 447.955), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef572\n    connRef = new ConnRef(router, 572);\n    srcPt = ConnEnd(Point(223, 486), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(215.246, 558.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef573\n    connRef = new ConnRef(router, 573);\n    srcPt = ConnEnd(Point(273, 394), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(215.246, 332.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef574\n    connRef = new ConnRef(router, 574);\n    srcPt = ConnEnd(Point(273, 414), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(215.246, 447.955), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef575\n    connRef = new ConnRef(router, 575);\n    srcPt = ConnEnd(Point(223, 394), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(215.246, 332.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef576\n    connRef = new ConnRef(router, 576);\n    srcPt = ConnEnd(Point(223, 414), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(215.246, 447.955), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef577\n    connRef = new ConnRef(router, 577);\n    srcPt = ConnEnd(Point(223, 375), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(215.246, 332.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef578\n    connRef = new ConnRef(router, 578);\n    srcPt = ConnEnd(Point(223, 395), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(215.246, 447.955), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef579\n    connRef = new ConnRef(router, 579);\n    srcPt = ConnEnd(Point(273, 290), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(215.246, 332.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef580\n    connRef = new ConnRef(router, 580);\n    srcPt = ConnEnd(Point(233, 290), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(215.246, 332.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef581\n    connRef = new ConnRef(router, 581);\n    srcPt = ConnEnd(Point(233, 309), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(215.246, 332.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef582\n    connRef = new ConnRef(router, 582);\n    srcPt = ConnEnd(Point(132, 557), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(57.2456, 558.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef583\n    connRef = new ConnRef(router, 583);\n    srcPt = ConnEnd(Point(132, 577), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(57.2456, 676.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef584\n    connRef = new ConnRef(router, 584);\n    srcPt = ConnEnd(Point(82, 576), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(57.2456, 558.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef585\n    connRef = new ConnRef(router, 585);\n    srcPt = ConnEnd(Point(82, 596), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(57.2456, 676.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef586\n    connRef = new ConnRef(router, 586);\n    srcPt = ConnEnd(Point(82, 557), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(57.2456, 558.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef587\n    connRef = new ConnRef(router, 587);\n    srcPt = ConnEnd(Point(82, 577), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(57.2456, 676.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef588\n    connRef = new ConnRef(router, 588);\n    srcPt = ConnEnd(Point(82, 485), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(57.2456, 447.955), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef589\n    connRef = new ConnRef(router, 589);\n    srcPt = ConnEnd(Point(82, 505), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(57.2456, 558.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef590\n    connRef = new ConnRef(router, 590);\n    srcPt = ConnEnd(Point(82, 466), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(57.2456, 447.955), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef591\n    connRef = new ConnRef(router, 591);\n    srcPt = ConnEnd(Point(82, 486), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(57.2456, 558.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef592\n    connRef = new ConnRef(router, 592);\n    srcPt = ConnEnd(Point(132, 394), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(57.2456, 332.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef593\n    connRef = new ConnRef(router, 593);\n    srcPt = ConnEnd(Point(132, 414), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(57.2456, 447.955), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef594\n    connRef = new ConnRef(router, 594);\n    srcPt = ConnEnd(Point(82, 394), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(57.2456, 332.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef595\n    connRef = new ConnRef(router, 595);\n    srcPt = ConnEnd(Point(82, 414), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(57.2456, 447.955), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef596\n    connRef = new ConnRef(router, 596);\n    srcPt = ConnEnd(Point(82, 375), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(57.2456, 332.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef597\n    connRef = new ConnRef(router, 597);\n    srcPt = ConnEnd(Point(82, 395), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(57.2456, 447.955), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef598\n    connRef = new ConnRef(router, 598);\n    srcPt = ConnEnd(Point(72, 309), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(57.2456, 332.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef599\n    connRef = new ConnRef(router, 599);\n    srcPt = ConnEnd(Point(72, 290), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(57.2456, 332.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef600\n    connRef = new ConnRef(router, 600);\n    srcPt = ConnEnd(Point(245, 207), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(197.246, 96.9179), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef601\n    connRef = new ConnRef(router, 601);\n    srcPt = ConnEnd(Point(245, 227), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(197.246, 160.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef602\n    connRef = new ConnRef(router, 602);\n    srcPt = ConnEnd(Point(195, 217), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(197.246, 96.9179), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef603\n    connRef = new ConnRef(router, 603);\n    srcPt = ConnEnd(Point(195, 237), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(197.246, 160.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef604\n    connRef = new ConnRef(router, 604);\n    srcPt = ConnEnd(Point(195, 198), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(197.246, 96.9179), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef605\n    connRef = new ConnRef(router, 605);\n    srcPt = ConnEnd(Point(195, 218), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(197.246, 160.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef606\n    connRef = new ConnRef(router, 606);\n    srcPt = ConnEnd(Point(82, 214), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(57.2456, 160.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef607\n    connRef = new ConnRef(router, 607);\n    srcPt = ConnEnd(Point(82, 195), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(57.2456, 160.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef608\n    connRef = new ConnRef(router, 608);\n    srcPt = ConnEnd(Point(82, 176), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(57.2456, 160.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef609\n    connRef = new ConnRef(router, 609);\n    srcPt = ConnEnd(Point(319, 135), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(319.219, -51.0821), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef610\n    connRef = new ConnRef(router, 610);\n    srcPt = ConnEnd(Point(220, 135), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(57.2456, 125.987), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef611\n    connRef = new ConnRef(router, 611);\n    srcPt = ConnEnd(Point(220, 155), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(319.219, -7.08205), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef612\n    connRef = new ConnRef(router, 612);\n    srcPt = ConnEnd(Point(220, 155), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(197.246, 96.9179), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef613\n    connRef = new ConnRef(router, 613);\n    srcPt = ConnEnd(Point(220, 135), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(319.219, -51.0821), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef614\n    connRef = new ConnRef(router, 614);\n    srcPt = ConnEnd(Point(197.246, 160.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(82, 318), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef615\n    connRef = new ConnRef(router, 615);\n    srcPt = ConnEnd(Point(197.246, 160.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(213, 328), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef616\n    connRef = new ConnRef(router, 616);\n    srcPt = ConnEnd(Point(197.246, 160.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(355, 328), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef617\n    connRef = new ConnRef(router, 617);\n    srcPt = ConnEnd(Point(197.246, 160.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(497, 328), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef618\n    connRef = new ConnRef(router, 618);\n    srcPt = ConnEnd(Point(197.246, 160.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(639, 328), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef619\n    connRef = new ConnRef(router, 619);\n    srcPt = ConnEnd(Point(197.246, 160.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(780, 328), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef620\n    connRef = new ConnRef(router, 620);\n    srcPt = ConnEnd(Point(197.246, 160.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(922, 328), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef621\n    connRef = new ConnRef(router, 621);\n    srcPt = ConnEnd(Point(1149, 309), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(197.246, 160.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef622\n    connRef = new ConnRef(router, 622);\n    srcPt = ConnEnd(Point(1199, 300), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(197.246, 160.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef623\n    connRef = new ConnRef(router, 623);\n    srcPt = ConnEnd(Point(197.246, 160.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(132, 280), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef624\n    connRef = new ConnRef(router, 624);\n    srcPt = ConnEnd(Point(197.246, 160.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(132, 299), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef625\n    connRef = new ConnRef(router, 625);\n    srcPt = ConnEnd(Point(57.2456, 160.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(82, 318), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef626\n    connRef = new ConnRef(router, 626);\n    srcPt = ConnEnd(Point(57.2456, 160.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(132, 280), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef627\n    connRef = new ConnRef(router, 627);\n    srcPt = ConnEnd(Point(57.2456, 160.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(132, 299), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef628\n    connRef = new ConnRef(router, 628);\n    srcPt = ConnEnd(Point(72, 423), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(57.2456, 332.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef629\n    connRef = new ConnRef(router, 629);\n    srcPt = ConnEnd(Point(92, 423), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(57.2456, 447.955), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef630\n    connRef = new ConnRef(router, 630);\n    srcPt = ConnEnd(Point(82, 504), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(57.2456, 447.955), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef631\n    connRef = new ConnRef(router, 631);\n    srcPt = ConnEnd(Point(132, 595), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(57.2456, 558.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef632\n    connRef = new ConnRef(router, 632);\n    srcPt = ConnEnd(Point(132, 576), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(57.2456, 558.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef633\n    connRef = new ConnRef(router, 633);\n    srcPt = ConnEnd(Point(82, 595), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(57.2456, 558.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef634\n    connRef = new ConnRef(router, 634);\n    srcPt = ConnEnd(Point(57.2456, 676.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(213, 328), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef635\n    connRef = new ConnRef(router, 635);\n    srcPt = ConnEnd(Point(25.2456, 96.9179), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(132, 175), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef636\n    connRef = new ConnRef(router, 636);\n    srcPt = ConnEnd(Point(25.2456, 96.9179), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(82, 194), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef637\n    connRef = new ConnRef(router, 637);\n    srcPt = ConnEnd(Point(25.2456, 96.9179), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(82, 175), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef638\n    connRef = new ConnRef(router, 638);\n    srcPt = ConnEnd(Point(25.2456, 96.9179), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(82, 156), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef639\n    connRef = new ConnRef(router, 639);\n    srcPt = ConnEnd(Point(223, 413), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(215.246, 332.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef640\n    connRef = new ConnRef(router, 640);\n    srcPt = ConnEnd(Point(223, 504), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(215.246, 447.955), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef641\n    connRef = new ConnRef(router, 641);\n    srcPt = ConnEnd(Point(273, 576), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(215.246, 558.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef642\n    connRef = new ConnRef(router, 642);\n    srcPt = ConnEnd(Point(273, 595), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(215.246, 558.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef643\n    connRef = new ConnRef(router, 643);\n    srcPt = ConnEnd(Point(223, 595), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(215.246, 558.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef644\n    connRef = new ConnRef(router, 644);\n    srcPt = ConnEnd(Point(215.246, 676.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(355, 328), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef645\n    connRef = new ConnRef(router, 645);\n    srcPt = ConnEnd(Point(371.246, 676.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(497, 328), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef646\n    connRef = new ConnRef(router, 646);\n    srcPt = ConnEnd(Point(415, 576), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(371.246, 558.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef647\n    connRef = new ConnRef(router, 647);\n    srcPt = ConnEnd(Point(415, 595), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(371.246, 558.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef648\n    connRef = new ConnRef(router, 648);\n    srcPt = ConnEnd(Point(365, 595), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(371.246, 558.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef649\n    connRef = new ConnRef(router, 649);\n    srcPt = ConnEnd(Point(365, 504), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(371.246, 447.955), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef650\n    connRef = new ConnRef(router, 650);\n    srcPt = ConnEnd(Point(365, 413), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(371.246, 332.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef651\n    connRef = new ConnRef(router, 651);\n    srcPt = ConnEnd(Point(507, 413), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(527.246, 332.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef652\n    connRef = new ConnRef(router, 652);\n    srcPt = ConnEnd(Point(507, 504), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(527.246, 447.955), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef653\n    connRef = new ConnRef(router, 653);\n    srcPt = ConnEnd(Point(557, 576), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(527.246, 558.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef654\n    connRef = new ConnRef(router, 654);\n    srcPt = ConnEnd(Point(557, 595), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(527.246, 558.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef655\n    connRef = new ConnRef(router, 655);\n    srcPt = ConnEnd(Point(507, 595), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(527.246, 558.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef656\n    connRef = new ConnRef(router, 656);\n    srcPt = ConnEnd(Point(527.246, 676.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(639, 328), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef657\n    connRef = new ConnRef(router, 657);\n    srcPt = ConnEnd(Point(673.933, 676.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(780, 328), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef658\n    connRef = new ConnRef(router, 658);\n    srcPt = ConnEnd(Point(699, 576), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(673.933, 558.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef659\n    connRef = new ConnRef(router, 659);\n    srcPt = ConnEnd(Point(699, 595), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(673.933, 558.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef660\n    connRef = new ConnRef(router, 660);\n    srcPt = ConnEnd(Point(649, 595), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(673.933, 558.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef661\n    connRef = new ConnRef(router, 661);\n    srcPt = ConnEnd(Point(649, 504), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(673.933, 447.955), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef662\n    connRef = new ConnRef(router, 662);\n    srcPt = ConnEnd(Point(649, 413), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(673.933, 332.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef663\n    connRef = new ConnRef(router, 663);\n    srcPt = ConnEnd(Point(790, 413), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(823.246, 332.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef664\n    connRef = new ConnRef(router, 664);\n    srcPt = ConnEnd(Point(790, 504), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(823.246, 447.955), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef665\n    connRef = new ConnRef(router, 665);\n    srcPt = ConnEnd(Point(840, 576), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(823.246, 558.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef666\n    connRef = new ConnRef(router, 666);\n    srcPt = ConnEnd(Point(840, 595), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(823.246, 558.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef667\n    connRef = new ConnRef(router, 667);\n    srcPt = ConnEnd(Point(790, 595), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(823.246, 558.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef668\n    connRef = new ConnRef(router, 668);\n    srcPt = ConnEnd(Point(823.246, 676.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(922, 328), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef669\n    connRef = new ConnRef(router, 669);\n    srcPt = ConnEnd(Point(1149, 309), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(979.246, 676.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef670\n    connRef = new ConnRef(router, 670);\n    srcPt = ConnEnd(Point(979.246, 676.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(932, 667), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef671\n    connRef = new ConnRef(router, 671);\n    srcPt = ConnEnd(Point(979.246, 676.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(932, 686), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef672\n    connRef = new ConnRef(router, 672);\n    srcPt = ConnEnd(Point(1199, 300), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(979.246, 676.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef673\n    connRef = new ConnRef(router, 673);\n    srcPt = ConnEnd(Point(982, 576), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(979.246, 558.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef674\n    connRef = new ConnRef(router, 674);\n    srcPt = ConnEnd(Point(982, 595), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(979.246, 558.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef675\n    connRef = new ConnRef(router, 675);\n    srcPt = ConnEnd(Point(932, 595), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(979.246, 558.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef676\n    connRef = new ConnRef(router, 676);\n    srcPt = ConnEnd(Point(932, 504), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(979.246, 447.955), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef677\n    connRef = new ConnRef(router, 677);\n    srcPt = ConnEnd(Point(932, 413), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(979.246, 332.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef678\n    connRef = new ConnRef(router, 678);\n    srcPt = ConnEnd(Point(82, 338), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(57.2456, 332.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef679\n    connRef = new ConnRef(router, 679);\n    srcPt = ConnEnd(Point(233, 328), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(215.246, 332.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef680\n    connRef = new ConnRef(router, 680);\n    srcPt = ConnEnd(Point(375, 328), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(371.246, 332.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef681\n    connRef = new ConnRef(router, 681);\n    srcPt = ConnEnd(Point(517, 328), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(527.246, 332.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef682\n    connRef = new ConnRef(router, 682);\n    srcPt = ConnEnd(Point(659, 328), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(673.933, 332.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef683\n    connRef = new ConnRef(router, 683);\n    srcPt = ConnEnd(Point(800, 328), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(823.246, 332.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef684\n    connRef = new ConnRef(router, 684);\n    srcPt = ConnEnd(Point(942, 328), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(979.246, 332.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef685\n    connRef = new ConnRef(router, 685);\n    srcPt = ConnEnd(Point(223, 433), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(215.246, 447.955), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef686\n    connRef = new ConnRef(router, 686);\n    srcPt = ConnEnd(Point(365, 433), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(371.246, 447.955), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef687\n    connRef = new ConnRef(router, 687);\n    srcPt = ConnEnd(Point(507, 433), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(527.246, 447.955), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef688\n    connRef = new ConnRef(router, 688);\n    srcPt = ConnEnd(Point(790, 433), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(823.246, 447.955), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef689\n    connRef = new ConnRef(router, 689);\n    srcPt = ConnEnd(Point(932, 433), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(979.246, 447.955), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef690\n    connRef = new ConnRef(router, 690);\n    srcPt = ConnEnd(Point(649, 433), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(673.933, 447.955), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef691\n    connRef = new ConnRef(router, 691);\n    srcPt = ConnEnd(Point(82, 524), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(57.2456, 558.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef692\n    connRef = new ConnRef(router, 692);\n    srcPt = ConnEnd(Point(223, 524), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(215.246, 558.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef693\n    connRef = new ConnRef(router, 693);\n    srcPt = ConnEnd(Point(365, 524), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(371.246, 558.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef694\n    connRef = new ConnRef(router, 694);\n    srcPt = ConnEnd(Point(507, 524), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(527.246, 558.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef695\n    connRef = new ConnRef(router, 695);\n    srcPt = ConnEnd(Point(649, 524), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(673.933, 558.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef696\n    connRef = new ConnRef(router, 696);\n    srcPt = ConnEnd(Point(790, 524), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(823.246, 558.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef697\n    connRef = new ConnRef(router, 697);\n    srcPt = ConnEnd(Point(932, 524), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(979.246, 558.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef698\n    connRef = new ConnRef(router, 698);\n    srcPt = ConnEnd(Point(82, 615), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(57.2456, 676.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef699\n    connRef = new ConnRef(router, 699);\n    srcPt = ConnEnd(Point(223, 615), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(215.246, 676.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef700\n    connRef = new ConnRef(router, 700);\n    srcPt = ConnEnd(Point(365, 615), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(371.246, 676.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef701\n    connRef = new ConnRef(router, 701);\n    srcPt = ConnEnd(Point(507, 615), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(527.246, 676.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef702\n    connRef = new ConnRef(router, 702);\n    srcPt = ConnEnd(Point(649, 615), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(673.933, 676.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef703\n    connRef = new ConnRef(router, 703);\n    srcPt = ConnEnd(Point(790, 615), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(823.246, 676.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef704\n    connRef = new ConnRef(router, 704);\n    srcPt = ConnEnd(Point(932, 615), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(979.246, 676.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef705\n    connRef = new ConnRef(router, 705);\n    srcPt = ConnEnd(Point(1169, 309), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(1203.25, 332.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef706\n    connRef = new ConnRef(router, 706);\n    srcPt = ConnEnd(Point(1159, 414), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(1203.25, 447.955), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef707\n    connRef = new ConnRef(router, 707);\n    srcPt = ConnEnd(Point(1159, 505), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(1203.25, 558.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef708\n    connRef = new ConnRef(router, 708);\n    srcPt = ConnEnd(Point(1159, 595), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(1203.25, 676.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef709\n    connRef = new ConnRef(router, 709);\n    srcPt = ConnEnd(Point(932, 687), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(979.246, 750.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef710\n    connRef = new ConnRef(router, 710);\n    srcPt = ConnEnd(Point(932, 706), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(979.246, 750.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef711\n    connRef = new ConnRef(router, 711);\n    srcPt = ConnEnd(Point(1159, 687), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(1203.25, 750.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef712\n    connRef = new ConnRef(router, 712);\n    srcPt = ConnEnd(Point(1219, 300), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(1203.25, 332.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef713\n    connRef = new ConnRef(router, 713);\n    srcPt = ConnEnd(Point(1209, 605), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(1203.25, 676.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef714\n    connRef = new ConnRef(router, 714);\n    srcPt = ConnEnd(Point(132, 300), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(57.2456, 332.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef715\n    connRef = new ConnRef(router, 715);\n    srcPt = ConnEnd(Point(132, 319), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(57.2456, 332.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef716\n    connRef = new ConnRef(router, 716);\n    srcPt = ConnEnd(Point(1131.25, 622.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(1005.25, 622.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef717\n    connRef = new ConnRef(router, 717);\n    srcPt = ConnEnd(Point(927.246, 622.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(849.246, 622.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef718\n    connRef = new ConnRef(router, 718);\n    srcPt = ConnEnd(Point(771.246, 622.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(693.246, 622.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef719\n    connRef = new ConnRef(router, 719);\n    srcPt = ConnEnd(Point(615.246, 622.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(537.246, 622.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef720\n    connRef = new ConnRef(router, 720);\n    srcPt = ConnEnd(Point(459.246, 622.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(381.246, 622.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef721\n    connRef = new ConnRef(router, 721);\n    srcPt = ConnEnd(Point(303.246, 622.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(225.246, 622.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef722\n    connRef = new ConnRef(router, 722);\n    srcPt = ConnEnd(Point(145.246, 654.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(67.2456, 654.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef723\n    connRef = new ConnRef(router, 723);\n    srcPt = ConnEnd(Point(879.246, 718.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(801.246, 718.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef724\n    connRef = new ConnRef(router, 724);\n    srcPt = ConnEnd(Point(1203.25, 718.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(1161.25, 718.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef725\n    connRef = new ConnRef(router, 725);\n    srcPt = ConnEnd(Point(1263.25, 718.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(1173.25, 718.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef726\n    connRef = new ConnRef(router, 726);\n    srcPt = ConnEnd(Point(594.941, 718.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(527.246, 718.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef727\n    connRef = new ConnRef(router, 727);\n    srcPt = ConnEnd(Point(451.455, 718.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(371.246, 718.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef728\n    connRef = new ConnRef(router, 728);\n    srcPt = ConnEnd(Point(1371.25, 622.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(1371.25, 676.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef729\n    connRef = new ConnRef(router, 729);\n    srcPt = ConnEnd(Point(1419.25, 575.942), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(1293.25, 575.942), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef730\n    connRef = new ConnRef(router, 730);\n    srcPt = ConnEnd(Point(1131.25, 654.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(1005.25, 654.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef731\n    connRef = new ConnRef(router, 731);\n    srcPt = ConnEnd(Point(927.246, 654.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(849.246, 654.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef732\n    connRef = new ConnRef(router, 732);\n    srcPt = ConnEnd(Point(771.246, 654.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(693.246, 654.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef733\n    connRef = new ConnRef(router, 733);\n    srcPt = ConnEnd(Point(615.246, 654.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(537.246, 654.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef734\n    connRef = new ConnRef(router, 734);\n    srcPt = ConnEnd(Point(459.246, 654.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(381.246, 654.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef735\n    connRef = new ConnRef(router, 735);\n    srcPt = ConnEnd(Point(303.246, 654.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(225.246, 654.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef736\n    connRef = new ConnRef(router, 736);\n    srcPt = ConnEnd(Point(145.246, 622.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(67.2456, 622.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef737\n    connRef = new ConnRef(router, 737);\n    srcPt = ConnEnd(Point(1419.25, 514.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(1293.25, 514.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef738\n    connRef = new ConnRef(router, 738);\n    srcPt = ConnEnd(Point(1131.25, 536.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(1005.25, 536.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef739\n    connRef = new ConnRef(router, 739);\n    srcPt = ConnEnd(Point(927.246, 536.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(849.246, 536.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef740\n    connRef = new ConnRef(router, 740);\n    srcPt = ConnEnd(Point(771.246, 536.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(693.246, 536.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef741\n    connRef = new ConnRef(router, 741);\n    srcPt = ConnEnd(Point(615.246, 536.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(537.246, 536.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef742\n    connRef = new ConnRef(router, 742);\n    srcPt = ConnEnd(Point(459.246, 536.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(381.246, 536.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef743\n    connRef = new ConnRef(router, 743);\n    srcPt = ConnEnd(Point(303.246, 536.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(225.246, 536.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef744\n    connRef = new ConnRef(router, 744);\n    srcPt = ConnEnd(Point(145.246, 536.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(67.2456, 536.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef745\n    connRef = new ConnRef(router, 745);\n    srcPt = ConnEnd(Point(1293.25, 234.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(1293.25, 288.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef746\n    connRef = new ConnRef(router, 746);\n    srcPt = ConnEnd(Point(1083.25, 622.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(1083.25, 676.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef747\n    connRef = new ConnRef(router, 747);\n    srcPt = ConnEnd(Point(1419.25, 418.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(1293.25, 418.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef748\n    connRef = new ConnRef(router, 748);\n    srcPt = ConnEnd(Point(1419.25, 718.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(1293.25, 718.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef749\n    connRef = new ConnRef(router, 749);\n    srcPt = ConnEnd(Point(1479.25, 718.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(1449.25, 718.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef750\n    connRef = new ConnRef(router, 750);\n    srcPt = ConnEnd(Point(723.246, 718.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(645.246, 718.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef751\n    connRef = new ConnRef(router, 751);\n    srcPt = ConnEnd(Point(927.246, 718.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(849.246, 718.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef752\n    connRef = new ConnRef(router, 752);\n    srcPt = ConnEnd(Point(145.246, 32.9179), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(67.2456, 32.9179), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef753\n    connRef = new ConnRef(router, 753);\n    srcPt = ConnEnd(Point(145.246, 310.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(67.2456, 310.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef754\n    connRef = new ConnRef(router, 754);\n    srcPt = ConnEnd(Point(1005.25, 234.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(1005.25, 288.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef755\n    connRef = new ConnRef(router, 755);\n    srcPt = ConnEnd(Point(849.246, 234.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(849.246, 288.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef756\n    connRef = new ConnRef(router, 756);\n    srcPt = ConnEnd(Point(693.246, 234.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(693.246, 288.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef757\n    connRef = new ConnRef(router, 757);\n    srcPt = ConnEnd(Point(537.246, 234.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(537.246, 288.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef758\n    connRef = new ConnRef(router, 758);\n    srcPt = ConnEnd(Point(381.246, 234.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(381.246, 288.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef759\n    connRef = new ConnRef(router, 759);\n    srcPt = ConnEnd(Point(303.246, 288.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(225.246, 288.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef760\n    connRef = new ConnRef(router, 760);\n    srcPt = ConnEnd(Point(1131.25, 718.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(1005.25, 718.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef761\n    connRef = new ConnRef(router, 761);\n    srcPt = ConnEnd(Point(1035.25, 686.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(957.246, 686.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef762\n    connRef = new ConnRef(router, 762);\n    srcPt = ConnEnd(Point(1131.25, 590.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(1005.25, 590.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef763\n    connRef = new ConnRef(router, 763);\n    srcPt = ConnEnd(Point(1035.25, 622.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(957.246, 622.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef764\n    connRef = new ConnRef(router, 764);\n    srcPt = ConnEnd(Point(1035.25, 590.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(957.246, 590.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef765\n    connRef = new ConnRef(router, 765);\n    srcPt = ConnEnd(Point(1035.25, 514.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(957.246, 514.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef766\n    connRef = new ConnRef(router, 766);\n    srcPt = ConnEnd(Point(1035.25, 482.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(957.246, 482.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef767\n    connRef = new ConnRef(router, 767);\n    srcPt = ConnEnd(Point(1131.25, 418.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(1005.25, 418.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef768\n    connRef = new ConnRef(router, 768);\n    srcPt = ConnEnd(Point(1035.25, 418.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(957.246, 418.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef769\n    connRef = new ConnRef(router, 769);\n    srcPt = ConnEnd(Point(1035.25, 386.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(957.246, 386.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef770\n    connRef = new ConnRef(router, 770);\n    srcPt = ConnEnd(Point(1005.25, 202.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(1005.25, 256.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef771\n    connRef = new ConnRef(router, 771);\n    srcPt = ConnEnd(Point(957.246, 192.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(957.246, 278.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef772\n    connRef = new ConnRef(router, 772);\n    srcPt = ConnEnd(Point(957.246, 128.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(957.246, 246.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef773\n    connRef = new ConnRef(router, 773);\n    srcPt = ConnEnd(Point(927.246, 590.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(849.246, 590.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef774\n    connRef = new ConnRef(router, 774);\n    srcPt = ConnEnd(Point(879.246, 622.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(801.246, 622.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef775\n    connRef = new ConnRef(router, 775);\n    srcPt = ConnEnd(Point(879.246, 590.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(801.246, 590.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef776\n    connRef = new ConnRef(router, 776);\n    srcPt = ConnEnd(Point(879.246, 514.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(801.246, 514.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef777\n    connRef = new ConnRef(router, 777);\n    srcPt = ConnEnd(Point(879.246, 482.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(801.246, 482.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef778\n    connRef = new ConnRef(router, 778);\n    srcPt = ConnEnd(Point(927.246, 418.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(849.246, 418.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef779\n    connRef = new ConnRef(router, 779);\n    srcPt = ConnEnd(Point(879.246, 418.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(801.246, 418.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef780\n    connRef = new ConnRef(router, 780);\n    srcPt = ConnEnd(Point(879.246, 386.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(801.246, 386.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef781\n    connRef = new ConnRef(router, 781);\n    srcPt = ConnEnd(Point(849.246, 202.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(849.246, 256.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef782\n    connRef = new ConnRef(router, 782);\n    srcPt = ConnEnd(Point(801.246, 192.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(801.246, 278.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef783\n    connRef = new ConnRef(router, 783);\n    srcPt = ConnEnd(Point(801.246, 128.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(801.246, 246.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef784\n    connRef = new ConnRef(router, 784);\n    srcPt = ConnEnd(Point(771.246, 590.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(693.246, 590.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef785\n    connRef = new ConnRef(router, 785);\n    srcPt = ConnEnd(Point(723.246, 622.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(645.246, 622.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef786\n    connRef = new ConnRef(router, 786);\n    srcPt = ConnEnd(Point(723.246, 590.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(645.246, 590.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef787\n    connRef = new ConnRef(router, 787);\n    srcPt = ConnEnd(Point(723.246, 514.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(645.246, 514.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef788\n    connRef = new ConnRef(router, 788);\n    srcPt = ConnEnd(Point(723.246, 482.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(645.246, 482.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef789\n    connRef = new ConnRef(router, 789);\n    srcPt = ConnEnd(Point(771.246, 418.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(693.246, 418.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef790\n    connRef = new ConnRef(router, 790);\n    srcPt = ConnEnd(Point(723.246, 418.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(645.246, 418.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef791\n    connRef = new ConnRef(router, 791);\n    srcPt = ConnEnd(Point(723.246, 386.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(645.246, 386.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef792\n    connRef = new ConnRef(router, 792);\n    srcPt = ConnEnd(Point(693.246, 202.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(693.246, 256.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef793\n    connRef = new ConnRef(router, 793);\n    srcPt = ConnEnd(Point(645.246, 192.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(645.246, 278.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef794\n    connRef = new ConnRef(router, 794);\n    srcPt = ConnEnd(Point(645.246, 128.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(645.246, 246.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef795\n    connRef = new ConnRef(router, 795);\n    srcPt = ConnEnd(Point(615.246, 590.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(537.246, 590.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef796\n    connRef = new ConnRef(router, 796);\n    srcPt = ConnEnd(Point(567.246, 622.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(489.246, 622.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef797\n    connRef = new ConnRef(router, 797);\n    srcPt = ConnEnd(Point(567.246, 590.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(489.246, 590.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef798\n    connRef = new ConnRef(router, 798);\n    srcPt = ConnEnd(Point(615.246, 486.951), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(537.246, 486.951), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef799\n    connRef = new ConnRef(router, 799);\n    srcPt = ConnEnd(Point(567.246, 514.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(489.246, 514.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef800\n    connRef = new ConnRef(router, 800);\n    srcPt = ConnEnd(Point(567.246, 482.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(489.246, 482.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef801\n    connRef = new ConnRef(router, 801);\n    srcPt = ConnEnd(Point(615.246, 418.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(537.246, 418.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef802\n    connRef = new ConnRef(router, 802);\n    srcPt = ConnEnd(Point(567.246, 418.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(489.246, 418.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef803\n    connRef = new ConnRef(router, 803);\n    srcPt = ConnEnd(Point(567.246, 386.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(489.246, 386.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef804\n    connRef = new ConnRef(router, 804);\n    srcPt = ConnEnd(Point(537.246, 202.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(537.246, 256.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef805\n    connRef = new ConnRef(router, 805);\n    srcPt = ConnEnd(Point(489.246, 192.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(489.246, 278.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef806\n    connRef = new ConnRef(router, 806);\n    srcPt = ConnEnd(Point(489.246, 128.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(489.246, 246.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef807\n    connRef = new ConnRef(router, 807);\n    srcPt = ConnEnd(Point(459.246, 590.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(381.246, 590.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef808\n    connRef = new ConnRef(router, 808);\n    srcPt = ConnEnd(Point(411.246, 622.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(333.246, 622.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef809\n    connRef = new ConnRef(router, 809);\n    srcPt = ConnEnd(Point(411.246, 590.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(333.246, 590.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef810\n    connRef = new ConnRef(router, 810);\n    srcPt = ConnEnd(Point(411.246, 514.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(333.246, 514.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef811\n    connRef = new ConnRef(router, 811);\n    srcPt = ConnEnd(Point(411.246, 482.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(333.246, 482.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef812\n    connRef = new ConnRef(router, 812);\n    srcPt = ConnEnd(Point(459.246, 418.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(381.246, 418.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef813\n    connRef = new ConnRef(router, 813);\n    srcPt = ConnEnd(Point(411.246, 418.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(333.246, 418.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef814\n    connRef = new ConnRef(router, 814);\n    srcPt = ConnEnd(Point(411.246, 386.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(333.246, 386.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef815\n    connRef = new ConnRef(router, 815);\n    srcPt = ConnEnd(Point(381.246, 202.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(381.246, 256.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef816\n    connRef = new ConnRef(router, 816);\n    srcPt = ConnEnd(Point(333.246, 192.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(333.246, 278.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef817\n    connRef = new ConnRef(router, 817);\n    srcPt = ConnEnd(Point(333.246, 128.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(333.246, 246.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef818\n    connRef = new ConnRef(router, 818);\n    srcPt = ConnEnd(Point(303.246, 590.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(225.246, 590.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef819\n    connRef = new ConnRef(router, 819);\n    srcPt = ConnEnd(Point(255.246, 622.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(193.246, 622.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef820\n    connRef = new ConnRef(router, 820);\n    srcPt = ConnEnd(Point(255.246, 590.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(193.246, 590.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef821\n    connRef = new ConnRef(router, 821);\n    srcPt = ConnEnd(Point(255.246, 514.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(193.246, 514.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef822\n    connRef = new ConnRef(router, 822);\n    srcPt = ConnEnd(Point(255.246, 482.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(193.246, 482.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef823\n    connRef = new ConnRef(router, 823);\n    srcPt = ConnEnd(Point(303.246, 418.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(225.246, 418.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef824\n    connRef = new ConnRef(router, 824);\n    srcPt = ConnEnd(Point(255.246, 418.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(193.246, 418.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef825\n    connRef = new ConnRef(router, 825);\n    srcPt = ConnEnd(Point(255.246, 386.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(193.246, 386.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef826\n    connRef = new ConnRef(router, 826);\n    srcPt = ConnEnd(Point(303.246, 256.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(225.246, 256.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef827\n    connRef = new ConnRef(router, 827);\n    srcPt = ConnEnd(Point(193.246, 128.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(193.246, 246.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef828\n    connRef = new ConnRef(router, 828);\n    srcPt = ConnEnd(Point(193.246, 192.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(193.246, 278.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef829\n    connRef = new ConnRef(router, 829);\n    srcPt = ConnEnd(Point(145.246, 590.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(67.2456, 590.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef830\n    connRef = new ConnRef(router, 830);\n    srcPt = ConnEnd(Point(97.2456, 622.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(17.2456, 622.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef831\n    connRef = new ConnRef(router, 831);\n    srcPt = ConnEnd(Point(97.2456, 590.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(17.2456, 590.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef832\n    connRef = new ConnRef(router, 832);\n    srcPt = ConnEnd(Point(97.2456, 514.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(17.2456, 514.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef833\n    connRef = new ConnRef(router, 833);\n    srcPt = ConnEnd(Point(97.2456, 482.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(17.2456, 482.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef834\n    connRef = new ConnRef(router, 834);\n    srcPt = ConnEnd(Point(145.246, 418.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(67.2456, 418.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef835\n    connRef = new ConnRef(router, 835);\n    srcPt = ConnEnd(Point(97.2456, 418.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(17.2456, 418.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef836\n    connRef = new ConnRef(router, 836);\n    srcPt = ConnEnd(Point(97.2456, 386.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(17.2456, 386.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef837\n    connRef = new ConnRef(router, 837);\n    srcPt = ConnEnd(Point(17.2456, 192.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(17.2456, 278.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef838\n    connRef = new ConnRef(router, 838);\n    srcPt = ConnEnd(Point(17.2456, 128.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(17.2456, 246.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef839\n    connRef = new ConnRef(router, 839);\n    srcPt = ConnEnd(Point(285.246, 170.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(244.976, 170.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef840\n    connRef = new ConnRef(router, 840);\n    srcPt = ConnEnd(Point(237.246, 86.9179), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(145.246, 86.9179), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef841\n    connRef = new ConnRef(router, 841);\n    srcPt = ConnEnd(Point(237.246, 54.9179), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(145.246, 54.9179), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef842\n    connRef = new ConnRef(router, 842);\n    srcPt = ConnEnd(Point(97.2456, 170.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(17.2456, 170.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef843\n    connRef = new ConnRef(router, 843);\n    srcPt = ConnEnd(Point(97.2456, 32.9179), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(17.2456, 32.9179), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef844\n    connRef = new ConnRef(router, 844);\n    srcPt = ConnEnd(Point(97.2456, 0.917947), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(17.2456, 0.917947), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef845\n    connRef = new ConnRef(router, 845);\n    srcPt = ConnEnd(Point(380.962, -29.0821), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(319.219, -29.0821), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef846\n    connRef = new ConnRef(router, 846);\n    srcPt = ConnEnd(Point(279.219, -29.0821), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(197.246, -29.0821), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef847\n    connRef = new ConnRef(router, 847);\n    srcPt = ConnEnd(Point(97.2456, 310.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(17.2456, 310.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef848\n    connRef = new ConnRef(router, 848);\n    srcPt = ConnEnd(Point(193.246, 224.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(193.246, 310.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef849\n    connRef = new ConnRef(router, 849);\n    srcPt = ConnEnd(Point(333.246, 224.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(333.246, 310.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef850\n    connRef = new ConnRef(router, 850);\n    srcPt = ConnEnd(Point(489.246, 224.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(489.246, 310.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef851\n    connRef = new ConnRef(router, 851);\n    srcPt = ConnEnd(Point(645.246, 224.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(645.246, 310.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef852\n    connRef = new ConnRef(router, 852);\n    srcPt = ConnEnd(Point(801.246, 224.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(801.246, 310.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef853\n    connRef = new ConnRef(router, 853);\n    srcPt = ConnEnd(Point(957.246, 224.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(957.246, 310.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef854\n    connRef = new ConnRef(router, 854);\n    srcPt = ConnEnd(Point(17.2456, 364.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(17.2456, 450.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef855\n    connRef = new ConnRef(router, 855);\n    srcPt = ConnEnd(Point(255.246, 450.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(193.246, 450.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef856\n    connRef = new ConnRef(router, 856);\n    srcPt = ConnEnd(Point(411.246, 450.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(333.246, 450.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef857\n    connRef = new ConnRef(router, 857);\n    srcPt = ConnEnd(Point(567.246, 450.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(489.246, 450.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef858\n    connRef = new ConnRef(router, 858);\n    srcPt = ConnEnd(Point(879.246, 450.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(801.246, 450.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef859\n    connRef = new ConnRef(router, 859);\n    srcPt = ConnEnd(Point(1035.25, 450.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(957.246, 450.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef860\n    connRef = new ConnRef(router, 860);\n    srcPt = ConnEnd(Point(723.246, 450.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(645.246, 450.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef861\n    connRef = new ConnRef(router, 861);\n    srcPt = ConnEnd(Point(97.2456, 558.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(17.2456, 558.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef862\n    connRef = new ConnRef(router, 862);\n    srcPt = ConnEnd(Point(255.246, 558.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(193.246, 558.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef863\n    connRef = new ConnRef(router, 863);\n    srcPt = ConnEnd(Point(411.246, 558.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(333.246, 558.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef864\n    connRef = new ConnRef(router, 864);\n    srcPt = ConnEnd(Point(567.246, 558.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(489.246, 558.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef865\n    connRef = new ConnRef(router, 865);\n    srcPt = ConnEnd(Point(723.246, 558.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(645.246, 558.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef866\n    connRef = new ConnRef(router, 866);\n    srcPt = ConnEnd(Point(879.246, 558.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(801.246, 558.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef867\n    connRef = new ConnRef(router, 867);\n    srcPt = ConnEnd(Point(1035.25, 558.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(957.246, 558.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef868\n    connRef = new ConnRef(router, 868);\n    srcPt = ConnEnd(Point(97.2456, 654.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(17.2456, 654.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef869\n    connRef = new ConnRef(router, 869);\n    srcPt = ConnEnd(Point(255.246, 654.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(193.246, 654.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef870\n    connRef = new ConnRef(router, 870);\n    srcPt = ConnEnd(Point(411.246, 654.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(333.246, 654.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef871\n    connRef = new ConnRef(router, 871);\n    srcPt = ConnEnd(Point(567.246, 654.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(489.246, 654.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef872\n    connRef = new ConnRef(router, 872);\n    srcPt = ConnEnd(Point(723.246, 654.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(645.246, 654.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef873\n    connRef = new ConnRef(router, 873);\n    srcPt = ConnEnd(Point(879.246, 654.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(801.246, 654.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef874\n    connRef = new ConnRef(router, 874);\n    srcPt = ConnEnd(Point(1035.25, 654.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(957.246, 654.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef875\n    connRef = new ConnRef(router, 875);\n    srcPt = ConnEnd(Point(1233.25, 192.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(1233.25, 278.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef876\n    connRef = new ConnRef(router, 876);\n    srcPt = ConnEnd(Point(1323.25, 418.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(1233.25, 418.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef877\n    connRef = new ConnRef(router, 877);\n    srcPt = ConnEnd(Point(1323.25, 514.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(1233.25, 514.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef878\n    connRef = new ConnRef(router, 878);\n    srcPt = ConnEnd(Point(1323.25, 622.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(1233.25, 622.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef879\n    connRef = new ConnRef(router, 879);\n    srcPt = ConnEnd(Point(1035.25, 718.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(957.246, 718.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef880\n    connRef = new ConnRef(router, 880);\n    srcPt = ConnEnd(Point(1035.25, 750.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(957.246, 750.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef881\n    connRef = new ConnRef(router, 881);\n    srcPt = ConnEnd(Point(1323.25, 718.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(1233.25, 718.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef882\n    connRef = new ConnRef(router, 882);\n    srcPt = ConnEnd(Point(1293.25, 202.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(1293.25, 256.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef883\n    connRef = new ConnRef(router, 883);\n    srcPt = ConnEnd(Point(1419.25, 644.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(1293.25, 644.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef884\n    connRef = new ConnRef(router, 884);\n    srcPt = ConnEnd(Point(145.246, 246.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(67.2456, 246.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef885\n    connRef = new ConnRef(router, 885);\n    srcPt = ConnEnd(Point(145.246, 278.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(67.2456, 278.918), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef886\n    connRef = new ConnRef(router, 886);\n    srcPt = ConnEnd(Point(823.246, 676.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(790, 667), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef887\n    connRef = new ConnRef(router, 887);\n    srcPt = ConnEnd(Point(527.246, 676.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(533, 667), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef888\n    connRef = new ConnRef(router, 888);\n    srcPt = ConnEnd(Point(371.246, 676.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(390, 667), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef889\n    connRef = new ConnRef(router, 889);\n    srcPt = ConnEnd(Point(979.246, 676.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(1030, 634), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef890\n    connRef = new ConnRef(router, 890);\n    srcPt = ConnEnd(Point(673.933, 676.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(649, 667), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef891\n    connRef = new ConnRef(router, 891);\n    srcPt = ConnEnd(Point(823.246, 676.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(840, 667), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef892\n    connRef = new ConnRef(router, 892);\n    srcPt = ConnEnd(Point(57.2456, 125.987), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(132, 175), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef893\n    connRef = new ConnRef(router, 893);\n    srcPt = ConnEnd(Point(197.246, 160.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(132, 318), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef894\n    connRef = new ConnRef(router, 894);\n    srcPt = ConnEnd(Point(57.2456, 160.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(132, 318), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef895\n    connRef = new ConnRef(router, 895);\n    srcPt = ConnEnd(Point(197.246, 160.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(972, 319), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef896\n    connRef = new ConnRef(router, 896);\n    srcPt = ConnEnd(Point(823.246, 676.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(972, 319), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef897\n    connRef = new ConnRef(router, 897);\n    srcPt = ConnEnd(Point(197.246, 160.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(830, 319), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef898\n    connRef = new ConnRef(router, 898);\n    srcPt = ConnEnd(Point(673.933, 676.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(830, 319), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef899\n    connRef = new ConnRef(router, 899);\n    srcPt = ConnEnd(Point(197.246, 160.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(689, 319), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef900\n    connRef = new ConnRef(router, 900);\n    srcPt = ConnEnd(Point(527.246, 676.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(689, 319), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef901\n    connRef = new ConnRef(router, 901);\n    srcPt = ConnEnd(Point(197.246, 160.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(547, 319), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef902\n    connRef = new ConnRef(router, 902);\n    srcPt = ConnEnd(Point(371.246, 676.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(547, 319), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef903\n    connRef = new ConnRef(router, 903);\n    srcPt = ConnEnd(Point(197.246, 160.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(405, 319), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef904\n    connRef = new ConnRef(router, 904);\n    srcPt = ConnEnd(Point(215.246, 676.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(405, 319), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef905\n    connRef = new ConnRef(router, 905);\n    srcPt = ConnEnd(Point(197.246, 160.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(273, 329), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef906\n    connRef = new ConnRef(router, 906);\n    srcPt = ConnEnd(Point(57.2456, 676.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(273, 329), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef907\n    connRef = new ConnRef(router, 907);\n    srcPt = ConnEnd(Point(979.246, 676.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(982, 667), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef908\n    connRef = new ConnRef(router, 908);\n    srcPt = ConnEnd(Point(979.246, 676.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(932, 648), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef909\n    connRef = new ConnRef(router, 909);\n    srcPt = ConnEnd(Point(197.246, 160.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(972, 300), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef910\n    connRef = new ConnRef(router, 910);\n    srcPt = ConnEnd(Point(823.246, 676.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(972, 300), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef911\n    connRef = new ConnRef(router, 911);\n    srcPt = ConnEnd(Point(197.246, 160.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(922, 309), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef912\n    connRef = new ConnRef(router, 912);\n    srcPt = ConnEnd(Point(823.246, 676.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(922, 309), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef913\n    connRef = new ConnRef(router, 913);\n    srcPt = ConnEnd(Point(197.246, 160.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(922, 290), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef914\n    connRef = new ConnRef(router, 914);\n    srcPt = ConnEnd(Point(823.246, 676.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(922, 290), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef915\n    connRef = new ConnRef(router, 915);\n    srcPt = ConnEnd(Point(197.246, 160.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(830, 300), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef916\n    connRef = new ConnRef(router, 916);\n    srcPt = ConnEnd(Point(673.933, 676.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(830, 300), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef917\n    connRef = new ConnRef(router, 917);\n    srcPt = ConnEnd(Point(197.246, 160.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(780, 309), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef918\n    connRef = new ConnRef(router, 918);\n    srcPt = ConnEnd(Point(673.933, 676.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(780, 309), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef919\n    connRef = new ConnRef(router, 919);\n    srcPt = ConnEnd(Point(197.246, 160.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(780, 290), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef920\n    connRef = new ConnRef(router, 920);\n    srcPt = ConnEnd(Point(673.933, 676.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(780, 290), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef921\n    connRef = new ConnRef(router, 921);\n    srcPt = ConnEnd(Point(197.246, 160.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(689, 300), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef922\n    connRef = new ConnRef(router, 922);\n    srcPt = ConnEnd(Point(527.246, 676.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(689, 300), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef923\n    connRef = new ConnRef(router, 923);\n    srcPt = ConnEnd(Point(197.246, 160.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(639, 309), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef924\n    connRef = new ConnRef(router, 924);\n    srcPt = ConnEnd(Point(527.246, 676.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(639, 309), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef925\n    connRef = new ConnRef(router, 925);\n    srcPt = ConnEnd(Point(197.246, 160.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(639, 290), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef926\n    connRef = new ConnRef(router, 926);\n    srcPt = ConnEnd(Point(527.246, 676.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(639, 290), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef927\n    connRef = new ConnRef(router, 927);\n    srcPt = ConnEnd(Point(197.246, 160.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(547, 300), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef928\n    connRef = new ConnRef(router, 928);\n    srcPt = ConnEnd(Point(371.246, 676.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(547, 300), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef929\n    connRef = new ConnRef(router, 929);\n    srcPt = ConnEnd(Point(197.246, 160.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(497, 309), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef930\n    connRef = new ConnRef(router, 930);\n    srcPt = ConnEnd(Point(371.246, 676.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(497, 309), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef931\n    connRef = new ConnRef(router, 931);\n    srcPt = ConnEnd(Point(197.246, 160.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(497, 290), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef932\n    connRef = new ConnRef(router, 932);\n    srcPt = ConnEnd(Point(371.246, 676.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(497, 290), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef933\n    connRef = new ConnRef(router, 933);\n    srcPt = ConnEnd(Point(197.246, 160.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(405, 300), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef934\n    connRef = new ConnRef(router, 934);\n    srcPt = ConnEnd(Point(215.246, 676.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(405, 300), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef935\n    connRef = new ConnRef(router, 935);\n    srcPt = ConnEnd(Point(197.246, 160.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(355, 309), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef936\n    connRef = new ConnRef(router, 936);\n    srcPt = ConnEnd(Point(215.246, 676.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(355, 309), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef937\n    connRef = new ConnRef(router, 937);\n    srcPt = ConnEnd(Point(197.246, 160.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(355, 290), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef938\n    connRef = new ConnRef(router, 938);\n    srcPt = ConnEnd(Point(215.246, 676.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(355, 290), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef939\n    connRef = new ConnRef(router, 939);\n    srcPt = ConnEnd(Point(197.246, 160.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(273, 310), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef940\n    connRef = new ConnRef(router, 940);\n    srcPt = ConnEnd(Point(57.2456, 676.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(273, 310), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef941\n    connRef = new ConnRef(router, 941);\n    srcPt = ConnEnd(Point(197.246, 160.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(213, 290), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef942\n    connRef = new ConnRef(router, 942);\n    srcPt = ConnEnd(Point(57.2456, 676.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(213, 290), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef943\n    connRef = new ConnRef(router, 943);\n    srcPt = ConnEnd(Point(197.246, 160.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(213, 309), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef944\n    connRef = new ConnRef(router, 944);\n    srcPt = ConnEnd(Point(57.2456, 676.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(213, 309), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef945\n    connRef = new ConnRef(router, 945);\n    srcPt = ConnEnd(Point(197.246, 160.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(92, 309), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef946\n    connRef = new ConnRef(router, 946);\n    srcPt = ConnEnd(Point(57.2456, 160.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(92, 309), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef947\n    connRef = new ConnRef(router, 947);\n    srcPt = ConnEnd(Point(197.246, 160.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(92, 290), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef948\n    connRef = new ConnRef(router, 948);\n    srcPt = ConnEnd(Point(57.2456, 160.918), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(92, 290), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef949\n    connRef = new ConnRef(router, 949);\n    srcPt = ConnEnd(Point(57.2456, 125.987), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(82, 194), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef950\n    connRef = new ConnRef(router, 950);\n    srcPt = ConnEnd(Point(57.2456, 125.987), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(82, 175), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef951\n    connRef = new ConnRef(router, 951);\n    srcPt = ConnEnd(Point(57.2456, 125.987), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(82, 156), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef952\n    connRef = new ConnRef(router, 952);\n    srcPt = ConnEnd(Point(319.219, -7.08205), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(319, 155), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef953\n    connRef = new ConnRef(router, 953);\n    srcPt = ConnEnd(Point(197.246, 96.9179), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(317.466, 34.9179), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef954\n    connRef = new ConnRef(router, 954);\n    srcPt = ConnEnd(Point(57.2456, 125.987), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(-7.75443, -71.0821), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef955\n    connRef = new ConnRef(router, 955);\n    srcPt = ConnEnd(Point(197.246, 96.9179), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(317.466, 86.9179), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    router->processTransaction();\n    router->outputDiagram(\"output/performance01\");\n    delete router;\n    return 0;\n};\n"
  },
  {
    "path": "cola/libavoid/tests/reallyslowrouting.cpp",
    "content": "#include \"libavoid/libavoid.h\"\nusing namespace Avoid;\nint main(void) {\n    Router *router = new Router(\n            OrthogonalRouting);\n    router->setRoutingPenalty((PenaltyType)0, 50);\n    router->setRoutingPenalty((PenaltyType)1, 0);\n    router->setRoutingPenalty((PenaltyType)2, 0);\n    router->setRoutingPenalty((PenaltyType)3, 4000);\n    router->setRoutingPenalty((PenaltyType)4, 0);\n    router->setOrthogonalNudgeDistance(4);\n\n    Polygon poly91(4);\n    poly91.ps[0] = Point(703.246, 408.918);\n    poly91.ps[1] = Point(703.246, 428.918);\n    poly91.ps[2] = Point(683.246, 428.918);\n    poly91.ps[3] = Point(683.246, 408.918);\n    ShapeRef *shapeRef91 = new ShapeRef(router, poly91, 91);\n    router->addShape(shapeRef91);\n\n    Polygon poly84(4);\n    poly84.ps[0] = Point(811.246, 268.918);\n    poly84.ps[1] = Point(811.246, 288.918);\n    poly84.ps[2] = Point(791.246, 288.918);\n    poly84.ps[3] = Point(791.246, 268.918);\n    ShapeRef *shapeRef84 = new ShapeRef(router, poly84, 84);\n    router->addShape(shapeRef84);\n\n    Polygon poly75(4);\n    poly75.ps[0] = Point(859.246, 580.918);\n    poly75.ps[1] = Point(859.246, 600.918);\n    poly75.ps[2] = Point(839.246, 600.918);\n    poly75.ps[3] = Point(839.246, 580.918);\n    ShapeRef *shapeRef75 = new ShapeRef(router, poly75, 75);\n    router->addShape(shapeRef75);\n\n    Polygon poly120(4);\n    poly120.ps[0] = Point(235.246, 580.918);\n    poly120.ps[1] = Point(235.246, 600.918);\n    poly120.ps[2] = Point(215.246, 600.918);\n    poly120.ps[3] = Point(215.246, 580.918);\n    ShapeRef *shapeRef120 = new ShapeRef(router, poly120, 120);\n    router->addShape(shapeRef120);\n\n    Polygon poly157(4);\n    poly157.ps[0] = Point(77.2456, 427.955);\n    poly157.ps[1] = Point(77.2456, 467.955);\n    poly157.ps[2] = Point(37.2456, 467.955);\n    poly157.ps[3] = Point(37.2456, 427.955);\n    ShapeRef *shapeRef157 = new ShapeRef(router, poly157, 157);\n    router->addShape(shapeRef157);\n\n    Polygon poly138(4);\n    poly138.ps[0] = Point(27.2456, 376.918);\n    poly138.ps[1] = Point(27.2456, 396.918);\n    poly138.ps[2] = Point(7.24557, 396.918);\n    poly138.ps[3] = Point(7.24557, 376.918);\n    ShapeRef *shapeRef138 = new ShapeRef(router, poly138, 138);\n    router->addShape(shapeRef138);\n\n    Polygon poly6(4);\n    poly6.ps[0] = Point(235.246, 612.918);\n    poly6.ps[1] = Point(235.246, 632.918);\n    poly6.ps[2] = Point(215.246, 632.918);\n    poly6.ps[3] = Point(215.246, 612.918);\n    ShapeRef *shapeRef6 = new ShapeRef(router, poly6, 6);\n    router->addShape(shapeRef6);\n\n    Polygon poly117(4);\n    poly117.ps[0] = Point(391.246, 246.918);\n    poly117.ps[1] = Point(391.246, 266.918);\n    poly117.ps[2] = Point(371.246, 266.918);\n    poly117.ps[3] = Point(371.246, 246.918);\n    ShapeRef *shapeRef117 = new ShapeRef(router, poly117, 117);\n    router->addShape(shapeRef117);\n\n    Polygon poly177(4);\n    poly177.ps[0] = Point(843.246, 312.918);\n    poly177.ps[1] = Point(843.246, 352.918);\n    poly177.ps[2] = Point(803.246, 352.918);\n    poly177.ps[3] = Point(803.246, 312.918);\n    ShapeRef *shapeRef177 = new ShapeRef(router, poly177, 177);\n    router->addShape(shapeRef177);\n\n    Polygon poly178(4);\n    poly178.ps[0] = Point(843.246, 427.955);\n    poly178.ps[1] = Point(843.246, 467.955);\n    poly178.ps[2] = Point(803.246, 467.955);\n    poly178.ps[3] = Point(803.246, 427.955);\n    ShapeRef *shapeRef178 = new ShapeRef(router, poly178, 178);\n    router->addShape(shapeRef178);\n\n    Polygon poly31(4);\n    poly31.ps[0] = Point(547.246, 644.918);\n    poly31.ps[1] = Point(547.246, 664.918);\n    poly31.ps[2] = Point(527.246, 664.918);\n    poly31.ps[3] = Point(527.246, 644.918);\n    ShapeRef *shapeRef31 = new ShapeRef(router, poly31, 31);\n    router->addShape(shapeRef31);\n\n    Polygon poly124(4);\n    poly124.ps[0] = Point(203.246, 472.918);\n    poly124.ps[1] = Point(203.246, 492.918);\n    poly124.ps[2] = Point(183.246, 492.918);\n    poly124.ps[3] = Point(183.246, 472.918);\n    ShapeRef *shapeRef124 = new ShapeRef(router, poly124, 124);\n    router->addShape(shapeRef124);\n\n    Polygon poly38(4);\n    poly38.ps[0] = Point(703.246, 526.918);\n    poly38.ps[1] = Point(703.246, 546.918);\n    poly38.ps[2] = Point(683.246, 546.918);\n    poly38.ps[3] = Point(683.246, 526.918);\n    ShapeRef *shapeRef38 = new ShapeRef(router, poly38, 38);\n    router->addShape(shapeRef38);\n\n    Polygon poly73(4);\n    poly73.ps[0] = Point(967.246, 268.918);\n    poly73.ps[1] = Point(967.246, 288.918);\n    poly73.ps[2] = Point(947.246, 288.918);\n    poly73.ps[3] = Point(947.246, 268.918);\n    ShapeRef *shapeRef73 = new ShapeRef(router, poly73, 73);\n    router->addShape(shapeRef73);\n\n    Polygon poly165(4);\n    poly165.ps[0] = Point(391.246, 656.918);\n    poly165.ps[1] = Point(391.246, 696.918);\n    poly165.ps[2] = Point(351.246, 696.918);\n    poly165.ps[3] = Point(351.246, 656.918);\n    ShapeRef *shapeRef165 = new ShapeRef(router, poly165, 165);\n    router->addShape(shapeRef165);\n\n    Polygon poly166(4);\n    poly166.ps[0] = Point(391.246, 538.918);\n    poly166.ps[1] = Point(391.246, 578.918);\n    poly166.ps[2] = Point(351.246, 578.918);\n    poly166.ps[3] = Point(351.246, 538.918);\n    ShapeRef *shapeRef166 = new ShapeRef(router, poly166, 166);\n    router->addShape(shapeRef166);\n\n    Polygon poly153(4);\n    poly153.ps[0] = Point(217.246, 76.9179);\n    poly153.ps[1] = Point(217.246, 116.918);\n    poly153.ps[2] = Point(177.246, 116.918);\n    poly153.ps[3] = Point(177.246, 76.9179);\n    ShapeRef *shapeRef153 = new ShapeRef(router, poly153, 153);\n    router->addShape(shapeRef153);\n\n    Polygon poly17(4);\n    poly17.ps[0] = Point(843.246, 730.918);\n    poly17.ps[1] = Point(843.246, 770.918);\n    poly17.ps[2] = Point(803.246, 770.918);\n    poly17.ps[3] = Point(803.246, 730.918);\n    ShapeRef *shapeRef17 = new ShapeRef(router, poly17, 17);\n    router->addShape(shapeRef17);\n\n    Polygon poly48(4);\n    poly48.ps[0] = Point(655.246, 708.918);\n    poly48.ps[1] = Point(655.246, 728.918);\n    poly48.ps[2] = Point(635.246, 728.918);\n    poly48.ps[3] = Point(635.246, 708.918);\n    ShapeRef *shapeRef48 = new ShapeRef(router, poly48, 48);\n    router->addShape(shapeRef48);\n\n    Polygon poly290(4);\n    poly290.ps[0] = Point(877.246, 182.918);\n    poly290.ps[1] = Point(877.246, 222.918);\n    poly290.ps[2] = Point(821.246, 222.918);\n    poly290.ps[3] = Point(821.246, 182.918);\n    ShapeRef *shapeRef290 = new ShapeRef(router, poly290, 290);\n    router->addShape(shapeRef290);\n\n    Polygon poly291(4);\n    poly291.ps[0] = Point(829.246, 172.918);\n    poly291.ps[1] = Point(829.246, 212.918);\n    poly291.ps[2] = Point(773.246, 212.918);\n    poly291.ps[3] = Point(773.246, 172.918);\n    ShapeRef *shapeRef291 = new ShapeRef(router, poly291, 291);\n    router->addShape(shapeRef291);\n\n    Polygon poly292(4);\n    poly292.ps[0] = Point(829.246, 108.918);\n    poly292.ps[1] = Point(829.246, 148.918);\n    poly292.ps[2] = Point(773.246, 148.918);\n    poly292.ps[3] = Point(773.246, 108.918);\n    ShapeRef *shapeRef292 = new ShapeRef(router, poly292, 292);\n    router->addShape(shapeRef292);\n\n    Polygon poly293(4);\n    poly293.ps[0] = Point(799.246, 570.918);\n    poly293.ps[1] = Point(799.246, 610.918);\n    poly293.ps[2] = Point(743.246, 610.918);\n    poly293.ps[3] = Point(743.246, 570.918);\n    ShapeRef *shapeRef293 = new ShapeRef(router, poly293, 293);\n    router->addShape(shapeRef293);\n\n    Polygon poly294(4);\n    poly294.ps[0] = Point(751.246, 602.918);\n    poly294.ps[1] = Point(751.246, 642.918);\n    poly294.ps[2] = Point(695.246, 642.918);\n    poly294.ps[3] = Point(695.246, 602.918);\n    ShapeRef *shapeRef294 = new ShapeRef(router, poly294, 294);\n    router->addShape(shapeRef294);\n\n    Polygon poly295(4);\n    poly295.ps[0] = Point(751.246, 570.918);\n    poly295.ps[1] = Point(751.246, 610.918);\n    poly295.ps[2] = Point(695.246, 610.918);\n    poly295.ps[3] = Point(695.246, 570.918);\n    ShapeRef *shapeRef295 = new ShapeRef(router, poly295, 295);\n    router->addShape(shapeRef295);\n\n    Polygon poly296(4);\n    poly296.ps[0] = Point(751.246, 494.918);\n    poly296.ps[1] = Point(751.246, 534.918);\n    poly296.ps[2] = Point(695.246, 534.918);\n    poly296.ps[3] = Point(695.246, 494.918);\n    ShapeRef *shapeRef296 = new ShapeRef(router, poly296, 296);\n    router->addShape(shapeRef296);\n\n    Polygon poly297(4);\n    poly297.ps[0] = Point(751.246, 462.918);\n    poly297.ps[1] = Point(751.246, 502.918);\n    poly297.ps[2] = Point(695.246, 502.918);\n    poly297.ps[3] = Point(695.246, 462.918);\n    ShapeRef *shapeRef297 = new ShapeRef(router, poly297, 297);\n    router->addShape(shapeRef297);\n\n    Polygon poly298(4);\n    poly298.ps[0] = Point(799.246, 398.918);\n    poly298.ps[1] = Point(799.246, 438.918);\n    poly298.ps[2] = Point(743.246, 438.918);\n    poly298.ps[3] = Point(743.246, 398.918);\n    ShapeRef *shapeRef298 = new ShapeRef(router, poly298, 298);\n    router->addShape(shapeRef298);\n\n    Polygon poly99(4);\n    poly99.ps[0] = Point(499.246, 580.918);\n    poly99.ps[1] = Point(499.246, 600.918);\n    poly99.ps[2] = Point(479.246, 600.918);\n    poly99.ps[3] = Point(479.246, 580.918);\n    ShapeRef *shapeRef99 = new ShapeRef(router, poly99, 99);\n    router->addShape(shapeRef99);\n\n    Polygon poly85(4);\n    poly85.ps[0] = Point(811.246, 236.918);\n    poly85.ps[1] = Point(811.246, 256.918);\n    poly85.ps[2] = Point(791.246, 256.918);\n    poly85.ps[3] = Point(791.246, 236.918);\n    ShapeRef *shapeRef85 = new ShapeRef(router, poly85, 85);\n    router->addShape(shapeRef85);\n\n    Polygon poly24(4);\n    poly24.ps[0] = Point(537.246, 708.918);\n    poly24.ps[1] = Point(537.246, 728.918);\n    poly24.ps[2] = Point(517.246, 728.918);\n    poly24.ps[3] = Point(517.246, 708.918);\n    ShapeRef *shapeRef24 = new ShapeRef(router, poly24, 24);\n    router->addShape(shapeRef24);\n\n    Polygon poly72(4);\n    poly72.ps[0] = Point(1015.25, 246.918);\n    poly72.ps[1] = Point(1015.25, 266.918);\n    poly72.ps[2] = Point(995.246, 266.918);\n    poly72.ps[3] = Point(995.246, 246.918);\n    ShapeRef *shapeRef72 = new ShapeRef(router, poly72, 72);\n    router->addShape(shapeRef72);\n\n    Polygon poly20(4);\n    poly20.ps[0] = Point(391.246, 730.918);\n    poly20.ps[1] = Point(391.246, 770.918);\n    poly20.ps[2] = Point(351.246, 770.918);\n    poly20.ps[3] = Point(351.246, 730.918);\n    ShapeRef *shapeRef20 = new ShapeRef(router, poly20, 20);\n    router->addShape(shapeRef20);\n\n    Polygon poly254(4);\n    poly254.ps[0] = Point(1321.25, 214.918);\n    poly254.ps[1] = Point(1321.25, 254.918);\n    poly254.ps[2] = Point(1265.25, 254.918);\n    poly254.ps[3] = Point(1265.25, 214.918);\n    ShapeRef *shapeRef254 = new ShapeRef(router, poly254, 254);\n    router->addShape(shapeRef254);\n\n    Polygon poly255(4);\n    poly255.ps[0] = Point(1111.25, 602.918);\n    poly255.ps[1] = Point(1111.25, 642.918);\n    poly255.ps[2] = Point(1055.25, 642.918);\n    poly255.ps[3] = Point(1055.25, 602.918);\n    ShapeRef *shapeRef255 = new ShapeRef(router, poly255, 255);\n    router->addShape(shapeRef255);\n\n    Polygon poly256(4);\n    poly256.ps[0] = Point(1447.25, 398.918);\n    poly256.ps[1] = Point(1447.25, 438.918);\n    poly256.ps[2] = Point(1391.25, 438.918);\n    poly256.ps[3] = Point(1391.25, 398.918);\n    ShapeRef *shapeRef256 = new ShapeRef(router, poly256, 256);\n    router->addShape(shapeRef256);\n\n    Polygon poly257(4);\n    poly257.ps[0] = Point(1447.25, 698.918);\n    poly257.ps[1] = Point(1447.25, 738.918);\n    poly257.ps[2] = Point(1391.25, 738.918);\n    poly257.ps[3] = Point(1391.25, 698.918);\n    ShapeRef *shapeRef257 = new ShapeRef(router, poly257, 257);\n    router->addShape(shapeRef257);\n\n    Polygon poly258(4);\n    poly258.ps[0] = Point(1507.25, 698.918);\n    poly258.ps[1] = Point(1507.25, 738.918);\n    poly258.ps[2] = Point(1451.25, 738.918);\n    poly258.ps[3] = Point(1451.25, 698.918);\n    ShapeRef *shapeRef258 = new ShapeRef(router, poly258, 258);\n    router->addShape(shapeRef258);\n\n    Polygon poly259(4);\n    poly259.ps[0] = Point(751.246, 698.918);\n    poly259.ps[1] = Point(751.246, 738.918);\n    poly259.ps[2] = Point(695.246, 738.918);\n    poly259.ps[3] = Point(695.246, 698.918);\n    ShapeRef *shapeRef259 = new ShapeRef(router, poly259, 259);\n    router->addShape(shapeRef259);\n\n    Polygon poly87(4);\n    poly87.ps[0] = Point(655.246, 612.918);\n    poly87.ps[1] = Point(655.246, 632.918);\n    poly87.ps[2] = Point(635.246, 632.918);\n    poly87.ps[3] = Point(635.246, 612.918);\n    ShapeRef *shapeRef87 = new ShapeRef(router, poly87, 87);\n    router->addShape(shapeRef87);\n\n    Polygon poly134(4);\n    poly134.ps[0] = Point(27.2456, 504.918);\n    poly134.ps[1] = Point(27.2456, 524.918);\n    poly134.ps[2] = Point(7.24557, 524.918);\n    poly134.ps[3] = Point(7.24557, 504.918);\n    ShapeRef *shapeRef134 = new ShapeRef(router, poly134, 134);\n    router->addShape(shapeRef134);\n\n    Polygon poly201(4);\n    poly201.ps[0] = Point(203.246, 548.918);\n    poly201.ps[1] = Point(203.246, 568.918);\n    poly201.ps[2] = Point(183.246, 568.918);\n    poly201.ps[3] = Point(183.246, 548.918);\n    ShapeRef *shapeRef201 = new ShapeRef(router, poly201, 201);\n    router->addShape(shapeRef201);\n\n    Polygon poly202(4);\n    poly202.ps[0] = Point(343.246, 548.918);\n    poly202.ps[1] = Point(343.246, 568.918);\n    poly202.ps[2] = Point(323.246, 568.918);\n    poly202.ps[3] = Point(323.246, 548.918);\n    ShapeRef *shapeRef202 = new ShapeRef(router, poly202, 202);\n    router->addShape(shapeRef202);\n\n    Polygon poly203(4);\n    poly203.ps[0] = Point(499.246, 548.918);\n    poly203.ps[1] = Point(499.246, 568.918);\n    poly203.ps[2] = Point(479.246, 568.918);\n    poly203.ps[3] = Point(479.246, 548.918);\n    ShapeRef *shapeRef203 = new ShapeRef(router, poly203, 203);\n    router->addShape(shapeRef203);\n\n    Polygon poly32(4);\n    poly32.ps[0] = Point(391.246, 644.918);\n    poly32.ps[1] = Point(391.246, 664.918);\n    poly32.ps[2] = Point(371.246, 664.918);\n    poly32.ps[3] = Point(371.246, 644.918);\n    ShapeRef *shapeRef32 = new ShapeRef(router, poly32, 32);\n    router->addShape(shapeRef32);\n\n    Polygon poly25(4);\n    poly25.ps[0] = Point(381.246, 708.918);\n    poly25.ps[1] = Point(381.246, 728.918);\n    poly25.ps[2] = Point(361.246, 728.918);\n    poly25.ps[3] = Point(361.246, 708.918);\n    ShapeRef *shapeRef25 = new ShapeRef(router, poly25, 25);\n    router->addShape(shapeRef25);\n\n    Polygon poly210(4);\n    poly210.ps[0] = Point(499.246, 644.918);\n    poly210.ps[1] = Point(499.246, 664.918);\n    poly210.ps[2] = Point(479.246, 664.918);\n    poly210.ps[3] = Point(479.246, 644.918);\n    ShapeRef *shapeRef210 = new ShapeRef(router, poly210, 210);\n    router->addShape(shapeRef210);\n\n    Polygon poly211(4);\n    poly211.ps[0] = Point(655.246, 644.918);\n    poly211.ps[1] = Point(655.246, 664.918);\n    poly211.ps[2] = Point(635.246, 664.918);\n    poly211.ps[3] = Point(635.246, 644.918);\n    ShapeRef *shapeRef211 = new ShapeRef(router, poly211, 211);\n    router->addShape(shapeRef211);\n\n    Polygon poly212(4);\n    poly212.ps[0] = Point(811.246, 644.918);\n    poly212.ps[1] = Point(811.246, 664.918);\n    poly212.ps[2] = Point(791.246, 664.918);\n    poly212.ps[3] = Point(791.246, 644.918);\n    ShapeRef *shapeRef212 = new ShapeRef(router, poly212, 212);\n    router->addShape(shapeRef212);\n\n    Polygon poly98(4);\n    poly98.ps[0] = Point(499.246, 612.918);\n    poly98.ps[1] = Point(499.246, 632.918);\n    poly98.ps[2] = Point(479.246, 632.918);\n    poly98.ps[3] = Point(479.246, 612.918);\n    ShapeRef *shapeRef98 = new ShapeRef(router, poly98, 98);\n    router->addShape(shapeRef98);\n\n    Polygon poly310(4);\n    poly310.ps[0] = Point(643.246, 398.918);\n    poly310.ps[1] = Point(643.246, 438.918);\n    poly310.ps[2] = Point(587.246, 438.918);\n    poly310.ps[3] = Point(587.246, 398.918);\n    ShapeRef *shapeRef310 = new ShapeRef(router, poly310, 310);\n    router->addShape(shapeRef310);\n\n    Polygon poly311(4);\n    poly311.ps[0] = Point(595.246, 398.918);\n    poly311.ps[1] = Point(595.246, 438.918);\n    poly311.ps[2] = Point(539.246, 438.918);\n    poly311.ps[3] = Point(539.246, 398.918);\n    ShapeRef *shapeRef311 = new ShapeRef(router, poly311, 311);\n    router->addShape(shapeRef311);\n\n    Polygon poly312(4);\n    poly312.ps[0] = Point(595.246, 366.918);\n    poly312.ps[1] = Point(595.246, 406.918);\n    poly312.ps[2] = Point(539.246, 406.918);\n    poly312.ps[3] = Point(539.246, 366.918);\n    ShapeRef *shapeRef312 = new ShapeRef(router, poly312, 312);\n    router->addShape(shapeRef312);\n\n    Polygon poly313(4);\n    poly313.ps[0] = Point(565.246, 182.918);\n    poly313.ps[1] = Point(565.246, 222.918);\n    poly313.ps[2] = Point(509.246, 222.918);\n    poly313.ps[3] = Point(509.246, 182.918);\n    ShapeRef *shapeRef313 = new ShapeRef(router, poly313, 313);\n    router->addShape(shapeRef313);\n\n    Polygon poly314(4);\n    poly314.ps[0] = Point(517.246, 172.918);\n    poly314.ps[1] = Point(517.246, 212.918);\n    poly314.ps[2] = Point(461.246, 212.918);\n    poly314.ps[3] = Point(461.246, 172.918);\n    ShapeRef *shapeRef314 = new ShapeRef(router, poly314, 314);\n    router->addShape(shapeRef314);\n\n    Polygon poly315(4);\n    poly315.ps[0] = Point(517.246, 108.918);\n    poly315.ps[1] = Point(517.246, 148.918);\n    poly315.ps[2] = Point(461.246, 148.918);\n    poly315.ps[3] = Point(461.246, 108.918);\n    ShapeRef *shapeRef315 = new ShapeRef(router, poly315, 315);\n    router->addShape(shapeRef315);\n\n    Polygon poly316(4);\n    poly316.ps[0] = Point(487.246, 570.918);\n    poly316.ps[1] = Point(487.246, 610.918);\n    poly316.ps[2] = Point(431.246, 610.918);\n    poly316.ps[3] = Point(431.246, 570.918);\n    ShapeRef *shapeRef316 = new ShapeRef(router, poly316, 316);\n    router->addShape(shapeRef316);\n\n    Polygon poly317(4);\n    poly317.ps[0] = Point(439.246, 602.918);\n    poly317.ps[1] = Point(439.246, 642.918);\n    poly317.ps[2] = Point(383.246, 642.918);\n    poly317.ps[3] = Point(383.246, 602.918);\n    ShapeRef *shapeRef317 = new ShapeRef(router, poly317, 317);\n    router->addShape(shapeRef317);\n\n    Polygon poly318(4);\n    poly318.ps[0] = Point(439.246, 570.918);\n    poly318.ps[1] = Point(439.246, 610.918);\n    poly318.ps[2] = Point(383.246, 610.918);\n    poly318.ps[3] = Point(383.246, 570.918);\n    ShapeRef *shapeRef318 = new ShapeRef(router, poly318, 318);\n    router->addShape(shapeRef318);\n\n    Polygon poly319(4);\n    poly319.ps[0] = Point(439.246, 494.918);\n    poly319.ps[1] = Point(439.246, 534.918);\n    poly319.ps[2] = Point(383.246, 534.918);\n    poly319.ps[3] = Point(383.246, 494.918);\n    ShapeRef *shapeRef319 = new ShapeRef(router, poly319, 319);\n    router->addShape(shapeRef319);\n\n    Polygon poly320(4);\n    poly320.ps[0] = Point(439.246, 462.918);\n    poly320.ps[1] = Point(439.246, 502.918);\n    poly320.ps[2] = Point(383.246, 502.918);\n    poly320.ps[3] = Point(383.246, 462.918);\n    ShapeRef *shapeRef320 = new ShapeRef(router, poly320, 320);\n    router->addShape(shapeRef320);\n\n    Polygon poly321(4);\n    poly321.ps[0] = Point(487.246, 398.918);\n    poly321.ps[1] = Point(487.246, 438.918);\n    poly321.ps[2] = Point(431.246, 438.918);\n    poly321.ps[3] = Point(431.246, 398.918);\n    ShapeRef *shapeRef321 = new ShapeRef(router, poly321, 321);\n    router->addShape(shapeRef321);\n\n    Polygon poly322(4);\n    poly322.ps[0] = Point(439.246, 398.918);\n    poly322.ps[1] = Point(439.246, 438.918);\n    poly322.ps[2] = Point(383.246, 438.918);\n    poly322.ps[3] = Point(383.246, 398.918);\n    ShapeRef *shapeRef322 = new ShapeRef(router, poly322, 322);\n    router->addShape(shapeRef322);\n\n    Polygon poly323(4);\n    poly323.ps[0] = Point(439.246, 366.918);\n    poly323.ps[1] = Point(439.246, 406.918);\n    poly323.ps[2] = Point(383.246, 406.918);\n    poly323.ps[3] = Point(383.246, 366.918);\n    ShapeRef *shapeRef323 = new ShapeRef(router, poly323, 323);\n    router->addShape(shapeRef323);\n\n    Polygon poly324(4);\n    poly324.ps[0] = Point(409.246, 182.918);\n    poly324.ps[1] = Point(409.246, 222.918);\n    poly324.ps[2] = Point(353.246, 222.918);\n    poly324.ps[3] = Point(353.246, 182.918);\n    ShapeRef *shapeRef324 = new ShapeRef(router, poly324, 324);\n    router->addShape(shapeRef324);\n\n    Polygon poly325(4);\n    poly325.ps[0] = Point(361.246, 172.918);\n    poly325.ps[1] = Point(361.246, 212.918);\n    poly325.ps[2] = Point(305.246, 212.918);\n    poly325.ps[3] = Point(305.246, 172.918);\n    ShapeRef *shapeRef325 = new ShapeRef(router, poly325, 325);\n    router->addShape(shapeRef325);\n\n    Polygon poly96(4);\n    poly96.ps[0] = Point(655.246, 236.918);\n    poly96.ps[1] = Point(655.246, 256.918);\n    poly96.ps[2] = Point(635.246, 256.918);\n    poly96.ps[3] = Point(635.246, 236.918);\n    ShapeRef *shapeRef96 = new ShapeRef(router, poly96, 96);\n    router->addShape(shapeRef96);\n\n    Polygon poly144(4);\n    poly144.ps[0] = Point(27.2456, 160.918);\n    poly144.ps[1] = Point(27.2456, 180.918);\n    poly144.ps[2] = Point(7.24557, 180.918);\n    poly144.ps[3] = Point(7.24557, 160.918);\n    ShapeRef *shapeRef144 = new ShapeRef(router, poly144, 144);\n    router->addShape(shapeRef144);\n\n    Polygon poly192(4);\n    poly192.ps[0] = Point(967.246, 300.918);\n    poly192.ps[1] = Point(967.246, 320.918);\n    poly192.ps[2] = Point(947.246, 320.918);\n    poly192.ps[3] = Point(947.246, 300.918);\n    ShapeRef *shapeRef192 = new ShapeRef(router, poly192, 192);\n    router->addShape(shapeRef192);\n\n    Polygon poly193(4);\n    poly193.ps[0] = Point(27.2456, 440.918);\n    poly193.ps[1] = Point(27.2456, 460.918);\n    poly193.ps[2] = Point(7.24557, 460.918);\n    poly193.ps[3] = Point(7.24557, 440.918);\n    ShapeRef *shapeRef193 = new ShapeRef(router, poly193, 193);\n    router->addShape(shapeRef193);\n\n    Polygon poly173(4);\n    poly173.ps[0] = Point(693.933, 656.918);\n    poly173.ps[1] = Point(693.933, 696.918);\n    poly173.ps[2] = Point(653.933, 696.918);\n    poly173.ps[3] = Point(653.933, 656.918);\n    ShapeRef *shapeRef173 = new ShapeRef(router, poly173, 173);\n    router->addShape(shapeRef173);\n\n    Polygon poly174(4);\n    poly174.ps[0] = Point(693.933, 538.918);\n    poly174.ps[1] = Point(693.933, 578.918);\n    poly174.ps[2] = Point(653.933, 578.918);\n    poly174.ps[3] = Point(653.933, 538.918);\n    ShapeRef *shapeRef174 = new ShapeRef(router, poly174, 174);\n    router->addShape(shapeRef174);\n\n    Polygon poly118(4);\n    poly118.ps[0] = Point(343.246, 268.918);\n    poly118.ps[1] = Point(343.246, 288.918);\n    poly118.ps[2] = Point(323.246, 288.918);\n    poly118.ps[3] = Point(323.246, 268.918);\n    ShapeRef *shapeRef118 = new ShapeRef(router, poly118, 118);\n    router->addShape(shapeRef118);\n\n    Polygon poly183(4);\n    poly183.ps[0] = Point(999.246, 538.918);\n    poly183.ps[1] = Point(999.246, 578.918);\n    poly183.ps[2] = Point(959.246, 578.918);\n    poly183.ps[3] = Point(959.246, 538.918);\n    ShapeRef *shapeRef183 = new ShapeRef(router, poly183, 183);\n    router->addShape(shapeRef183);\n\n    Polygon poly184(4);\n    poly184.ps[0] = Point(999.246, 427.955);\n    poly184.ps[1] = Point(999.246, 467.955);\n    poly184.ps[2] = Point(959.246, 467.955);\n    poly184.ps[3] = Point(959.246, 427.955);\n    ShapeRef *shapeRef184 = new ShapeRef(router, poly184, 184);\n    router->addShape(shapeRef184);\n\n    Polygon poly125(4);\n    poly125.ps[0] = Point(235.246, 408.918);\n    poly125.ps[1] = Point(235.246, 428.918);\n    poly125.ps[2] = Point(215.246, 428.918);\n    poly125.ps[3] = Point(215.246, 408.918);\n    ShapeRef *shapeRef125 = new ShapeRef(router, poly125, 125);\n    router->addShape(shapeRef125);\n\n    Polygon poly101(4);\n    poly101.ps[0] = Point(499.246, 504.918);\n    poly101.ps[1] = Point(499.246, 524.918);\n    poly101.ps[2] = Point(479.246, 524.918);\n    poly101.ps[3] = Point(479.246, 504.918);\n    ShapeRef *shapeRef101 = new ShapeRef(router, poly101, 101);\n    router->addShape(shapeRef101);\n\n    Polygon poly139(4);\n    poly139.ps[0] = Point(27.2456, 268.918);\n    poly139.ps[1] = Point(27.2456, 288.918);\n    poly139.ps[2] = Point(7.24557, 288.918);\n    poly139.ps[3] = Point(7.24557, 268.918);\n    ShapeRef *shapeRef139 = new ShapeRef(router, poly139, 139);\n    router->addShape(shapeRef139);\n\n    Polygon poly2(4);\n    poly2.ps[0] = Point(859.246, 612.918);\n    poly2.ps[1] = Point(859.246, 632.918);\n    poly2.ps[2] = Point(839.246, 632.918);\n    poly2.ps[3] = Point(839.246, 612.918);\n    ShapeRef *shapeRef2 = new ShapeRef(router, poly2, 2);\n    router->addShape(shapeRef2);\n\n    Polygon poly1(4);\n    poly1.ps[0] = Point(1015.25, 612.918);\n    poly1.ps[1] = Point(1015.25, 632.918);\n    poly1.ps[2] = Point(995.246, 632.918);\n    poly1.ps[3] = Point(995.246, 612.918);\n    ShapeRef *shapeRef1 = new ShapeRef(router, poly1, 1);\n    router->addShape(shapeRef1);\n\n    Polygon poly105(4);\n    poly105.ps[0] = Point(499.246, 376.918);\n    poly105.ps[1] = Point(499.246, 396.918);\n    poly105.ps[2] = Point(479.246, 396.918);\n    poly105.ps[3] = Point(479.246, 376.918);\n    ShapeRef *shapeRef105 = new ShapeRef(router, poly105, 105);\n    router->addShape(shapeRef105);\n\n    Polygon poly29(4);\n    poly29.ps[0] = Point(859.246, 644.918);\n    poly29.ps[1] = Point(859.246, 664.918);\n    poly29.ps[2] = Point(839.246, 664.918);\n    poly29.ps[3] = Point(839.246, 644.918);\n    ShapeRef *shapeRef29 = new ShapeRef(router, poly29, 29);\n    router->addShape(shapeRef29);\n\n    Polygon poly128(4);\n    poly128.ps[0] = Point(235.246, 246.918);\n    poly128.ps[1] = Point(235.246, 266.918);\n    poly128.ps[2] = Point(215.246, 266.918);\n    poly128.ps[3] = Point(215.246, 246.918);\n    ShapeRef *shapeRef128 = new ShapeRef(router, poly128, 128);\n    router->addShape(shapeRef128);\n\n    Polygon poly45(4);\n    poly45.ps[0] = Point(1303.25, 408.918);\n    poly45.ps[1] = Point(1303.25, 428.918);\n    poly45.ps[2] = Point(1283.25, 428.918);\n    poly45.ps[3] = Point(1283.25, 408.918);\n    ShapeRef *shapeRef45 = new ShapeRef(router, poly45, 45);\n    router->addShape(shapeRef45);\n\n    Polygon poly16(4);\n    poly16.ps[0] = Point(1191.25, 656.918);\n    poly16.ps[1] = Point(1191.25, 696.918);\n    poly16.ps[2] = Point(1151.25, 696.918);\n    poly16.ps[3] = Point(1151.25, 656.918);\n    ShapeRef *shapeRef16 = new ShapeRef(router, poly16, 16);\n    router->addShape(shapeRef16);\n\n    Polygon poly88(4);\n    poly88.ps[0] = Point(655.246, 580.918);\n    poly88.ps[1] = Point(655.246, 600.918);\n    poly88.ps[2] = Point(635.246, 600.918);\n    poly88.ps[3] = Point(635.246, 580.918);\n    ShapeRef *shapeRef88 = new ShapeRef(router, poly88, 88);\n    router->addShape(shapeRef88);\n\n    Polygon poly129(4);\n    poly129.ps[0] = Point(203.246, 236.918);\n    poly129.ps[1] = Point(203.246, 256.918);\n    poly129.ps[2] = Point(183.246, 256.918);\n    poly129.ps[3] = Point(183.246, 236.918);\n    ShapeRef *shapeRef129 = new ShapeRef(router, poly129, 129);\n    router->addShape(shapeRef129);\n\n    Polygon poly107(4);\n    poly107.ps[0] = Point(499.246, 268.918);\n    poly107.ps[1] = Point(499.246, 288.918);\n    poly107.ps[2] = Point(479.246, 288.918);\n    poly107.ps[3] = Point(479.246, 268.918);\n    ShapeRef *shapeRef107 = new ShapeRef(router, poly107, 107);\n    router->addShape(shapeRef107);\n\n    Polygon poly160(4);\n    poly160.ps[0] = Point(45.2456, 76.9179);\n    poly160.ps[1] = Point(45.2456, 116.918);\n    poly160.ps[2] = Point(5.24557, 116.918);\n    poly160.ps[3] = Point(5.24557, 76.9179);\n    ShapeRef *shapeRef160 = new ShapeRef(router, poly160, 160);\n    router->addShape(shapeRef160);\n\n    Polygon poly116(4);\n    poly116.ps[0] = Point(343.246, 376.918);\n    poly116.ps[1] = Point(343.246, 396.918);\n    poly116.ps[2] = Point(323.246, 396.918);\n    poly116.ps[3] = Point(323.246, 376.918);\n    ShapeRef *shapeRef116 = new ShapeRef(router, poly116, 116);\n    router->addShape(shapeRef116);\n\n    Polygon poly127(4);\n    poly127.ps[0] = Point(203.246, 376.918);\n    poly127.ps[1] = Point(203.246, 396.918);\n    poly127.ps[2] = Point(183.246, 396.918);\n    poly127.ps[3] = Point(183.246, 376.918);\n    ShapeRef *shapeRef127 = new ShapeRef(router, poly127, 127);\n    router->addShape(shapeRef127);\n\n    Polygon poly57(4);\n    poly57.ps[0] = Point(235.246, 278.918);\n    poly57.ps[1] = Point(235.246, 298.918);\n    poly57.ps[2] = Point(215.246, 298.918);\n    poly57.ps[3] = Point(215.246, 278.918);\n    ShapeRef *shapeRef57 = new ShapeRef(router, poly57, 57);\n    router->addShape(shapeRef57);\n\n    Polygon poly37(4);\n    poly37.ps[0] = Point(859.246, 526.918);\n    poly37.ps[1] = Point(859.246, 546.918);\n    poly37.ps[2] = Point(839.246, 546.918);\n    poly37.ps[3] = Point(839.246, 526.918);\n    ShapeRef *shapeRef37 = new ShapeRef(router, poly37, 37);\n    router->addShape(shapeRef37);\n\n    Polygon poly167(4);\n    poly167.ps[0] = Point(391.246, 427.955);\n    poly167.ps[1] = Point(391.246, 467.955);\n    poly167.ps[2] = Point(351.246, 467.955);\n    poly167.ps[3] = Point(351.246, 427.955);\n    ShapeRef *shapeRef167 = new ShapeRef(router, poly167, 167);\n    router->addShape(shapeRef167);\n\n    Polygon poly77(4);\n    poly77.ps[0] = Point(811.246, 580.918);\n    poly77.ps[1] = Point(811.246, 600.918);\n    poly77.ps[2] = Point(791.246, 600.918);\n    poly77.ps[3] = Point(791.246, 580.918);\n    ShapeRef *shapeRef77 = new ShapeRef(router, poly77, 77);\n    router->addShape(shapeRef77);\n\n    Polygon poly115(4);\n    poly115.ps[0] = Point(343.246, 408.918);\n    poly115.ps[1] = Point(343.246, 428.918);\n    poly115.ps[2] = Point(323.246, 428.918);\n    poly115.ps[3] = Point(323.246, 408.918);\n    ShapeRef *shapeRef115 = new ShapeRef(router, poly115, 115);\n    router->addShape(shapeRef115);\n\n    Polygon poly97(4);\n    poly97.ps[0] = Point(547.246, 580.918);\n    poly97.ps[1] = Point(547.246, 600.918);\n    poly97.ps[2] = Point(527.246, 600.918);\n    poly97.ps[3] = Point(527.246, 580.918);\n    ShapeRef *shapeRef97 = new ShapeRef(router, poly97, 97);\n    router->addShape(shapeRef97);\n\n    Polygon poly28(4);\n    poly28.ps[0] = Point(1015.25, 644.918);\n    poly28.ps[1] = Point(1015.25, 664.918);\n    poly28.ps[2] = Point(995.246, 664.918);\n    poly28.ps[3] = Point(995.246, 644.918);\n    ShapeRef *shapeRef28 = new ShapeRef(router, poly28, 28);\n    router->addShape(shapeRef28);\n\n    Polygon poly126(4);\n    poly126.ps[0] = Point(203.246, 408.918);\n    poly126.ps[1] = Point(203.246, 428.918);\n    poly126.ps[2] = Point(183.246, 428.918);\n    poly126.ps[3] = Point(183.246, 408.918);\n    ShapeRef *shapeRef126 = new ShapeRef(router, poly126, 126);\n    router->addShape(shapeRef126);\n\n    Polygon poly108(4);\n    poly108.ps[0] = Point(499.246, 236.918);\n    poly108.ps[1] = Point(499.246, 256.918);\n    poly108.ps[2] = Point(479.246, 256.918);\n    poly108.ps[3] = Point(479.246, 236.918);\n    ShapeRef *shapeRef108 = new ShapeRef(router, poly108, 108);\n    router->addShape(shapeRef108);\n\n    Polygon poly161(4);\n    poly161.ps[0] = Point(235.246, 312.918);\n    poly161.ps[1] = Point(235.246, 352.918);\n    poly161.ps[2] = Point(195.246, 352.918);\n    poly161.ps[3] = Point(195.246, 312.918);\n    ShapeRef *shapeRef161 = new ShapeRef(router, poly161, 161);\n    router->addShape(shapeRef161);\n\n    Polygon poly146(4);\n    poly146.ps[0] = Point(27.2456, -9.08205);\n    poly146.ps[1] = Point(27.2456, 10.9179);\n    poly146.ps[2] = Point(7.24557, 10.9179);\n    poly146.ps[3] = Point(7.24557, -9.08205);\n    ShapeRef *shapeRef146 = new ShapeRef(router, poly146, 146);\n    router->addShape(shapeRef146);\n\n    Polygon poly114(4);\n    poly114.ps[0] = Point(391.246, 408.918);\n    poly114.ps[1] = Point(391.246, 428.918);\n    poly114.ps[2] = Point(371.246, 428.918);\n    poly114.ps[3] = Point(371.246, 408.918);\n    ShapeRef *shapeRef114 = new ShapeRef(router, poly114, 114);\n    router->addShape(shapeRef114);\n\n    Polygon poly64(4);\n    poly64.ps[0] = Point(1015.25, 580.918);\n    poly64.ps[1] = Point(1015.25, 600.918);\n    poly64.ps[2] = Point(995.246, 600.918);\n    poly64.ps[3] = Point(995.246, 580.918);\n    ShapeRef *shapeRef64 = new ShapeRef(router, poly64, 64);\n    router->addShape(shapeRef64);\n\n    Polygon poly11(4);\n    poly11.ps[0] = Point(1223.25, 312.918);\n    poly11.ps[1] = Point(1223.25, 352.918);\n    poly11.ps[2] = Point(1183.25, 352.918);\n    poly11.ps[3] = Point(1183.25, 312.918);\n    ShapeRef *shapeRef11 = new ShapeRef(router, poly11, 11);\n    router->addShape(shapeRef11);\n\n    Polygon poly67(4);\n    poly67.ps[0] = Point(967.246, 504.918);\n    poly67.ps[1] = Point(967.246, 524.918);\n    poly67.ps[2] = Point(947.246, 524.918);\n    poly67.ps[3] = Point(947.246, 504.918);\n    ShapeRef *shapeRef67 = new ShapeRef(router, poly67, 67);\n    router->addShape(shapeRef67);\n\n    Polygon poly158(4);\n    poly158.ps[0] = Point(77.2456, 538.918);\n    poly158.ps[1] = Point(77.2456, 578.918);\n    poly158.ps[2] = Point(37.2456, 578.918);\n    poly158.ps[3] = Point(37.2456, 538.918);\n    ShapeRef *shapeRef158 = new ShapeRef(router, poly158, 158);\n    router->addShape(shapeRef158);\n\n    Polygon poly159(4);\n    poly159.ps[0] = Point(77.2456, 656.918);\n    poly159.ps[1] = Point(77.2456, 696.918);\n    poly159.ps[2] = Point(37.2456, 696.918);\n    poly159.ps[3] = Point(37.2456, 656.918);\n    ShapeRef *shapeRef159 = new ShapeRef(router, poly159, 159);\n    router->addShape(shapeRef159);\n\n    Polygon poly94(4);\n    poly94.ps[0] = Point(703.246, 246.918);\n    poly94.ps[1] = Point(703.246, 266.918);\n    poly94.ps[2] = Point(683.246, 266.918);\n    poly94.ps[3] = Point(683.246, 246.918);\n    ShapeRef *shapeRef94 = new ShapeRef(router, poly94, 94);\n    router->addShape(shapeRef94);\n\n    Polygon poly102(4);\n    poly102.ps[0] = Point(499.246, 472.918);\n    poly102.ps[1] = Point(499.246, 492.918);\n    poly102.ps[2] = Point(479.246, 492.918);\n    poly102.ps[3] = Point(479.246, 472.918);\n    ShapeRef *shapeRef102 = new ShapeRef(router, poly102, 102);\n    router->addShape(shapeRef102);\n\n    Polygon poly42(4);\n    poly42.ps[0] = Point(77.2456, 526.918);\n    poly42.ps[1] = Point(77.2456, 546.918);\n    poly42.ps[2] = Point(57.2456, 546.918);\n    poly42.ps[3] = Point(57.2456, 526.918);\n    ShapeRef *shapeRef42 = new ShapeRef(router, poly42, 42);\n    router->addShape(shapeRef42);\n\n    Polygon poly131(4);\n    poly131.ps[0] = Point(77.2456, 580.918);\n    poly131.ps[1] = Point(77.2456, 600.918);\n    poly131.ps[2] = Point(57.2456, 600.918);\n    poly131.ps[3] = Point(57.2456, 580.918);\n    ShapeRef *shapeRef131 = new ShapeRef(router, poly131, 131);\n    router->addShape(shapeRef131);\n\n    Polygon poly149(4);\n    poly149.ps[0] = Point(601.954, 56.9179);\n    poly149.ps[1] = Point(601.954, 116.918);\n    poly149.ps[2] = Point(311.954, 116.918);\n    poly149.ps[3] = Point(311.954, 56.9179);\n    ShapeRef *shapeRef149 = new ShapeRef(router, poly149, 149);\n    router->addShape(shapeRef149);\n\n    Polygon poly150(4);\n    poly150.ps[0] = Point(77.2456, 105.987);\n    poly150.ps[1] = Point(77.2456, 145.987);\n    poly150.ps[2] = Point(37.2456, 145.987);\n    poly150.ps[3] = Point(37.2456, 105.987);\n    ShapeRef *shapeRef150 = new ShapeRef(router, poly150, 150);\n    router->addShape(shapeRef150);\n\n    Polygon poly74(4);\n    poly74.ps[0] = Point(967.246, 236.918);\n    poly74.ps[1] = Point(967.246, 256.918);\n    poly74.ps[2] = Point(947.246, 256.918);\n    poly74.ps[3] = Point(947.246, 236.918);\n    ShapeRef *shapeRef74 = new ShapeRef(router, poly74, 74);\n    router->addShape(shapeRef74);\n\n    Polygon poly34(4);\n    poly34.ps[0] = Point(77.2456, 612.918);\n    poly34.ps[1] = Point(77.2456, 632.918);\n    poly34.ps[2] = Point(57.2456, 632.918);\n    poly34.ps[3] = Point(57.2456, 612.918);\n    ShapeRef *shapeRef34 = new ShapeRef(router, poly34, 34);\n    router->addShape(shapeRef34);\n\n    Polygon poly35(4);\n    poly35.ps[0] = Point(1303.25, 504.918);\n    poly35.ps[1] = Point(1303.25, 524.918);\n    poly35.ps[2] = Point(1283.25, 524.918);\n    poly35.ps[3] = Point(1283.25, 504.918);\n    ShapeRef *shapeRef35 = new ShapeRef(router, poly35, 35);\n    router->addShape(shapeRef35);\n\n    Polygon poly26(4);\n    poly26.ps[0] = Point(1381.25, 666.918);\n    poly26.ps[1] = Point(1381.25, 686.918);\n    poly26.ps[2] = Point(1361.25, 686.918);\n    poly26.ps[3] = Point(1361.25, 666.918);\n    ShapeRef *shapeRef26 = new ShapeRef(router, poly26, 26);\n    router->addShape(shapeRef26);\n\n    Polygon poly36(4);\n    poly36.ps[0] = Point(1015.25, 526.918);\n    poly36.ps[1] = Point(1015.25, 546.918);\n    poly36.ps[2] = Point(995.246, 546.918);\n    poly36.ps[3] = Point(995.246, 526.918);\n    ShapeRef *shapeRef36 = new ShapeRef(router, poly36, 36);\n    router->addShape(shapeRef36);\n\n    Polygon poly110(4);\n    poly110.ps[0] = Point(343.246, 612.918);\n    poly110.ps[1] = Point(343.246, 632.918);\n    poly110.ps[2] = Point(323.246, 632.918);\n    poly110.ps[3] = Point(323.246, 612.918);\n    ShapeRef *shapeRef110 = new ShapeRef(router, poly110, 110);\n    router->addShape(shapeRef110);\n\n    Polygon poly3(4);\n    poly3.ps[0] = Point(703.246, 612.918);\n    poly3.ps[1] = Point(703.246, 632.918);\n    poly3.ps[2] = Point(683.246, 632.918);\n    poly3.ps[3] = Point(683.246, 612.918);\n    ShapeRef *shapeRef3 = new ShapeRef(router, poly3, 3);\n    router->addShape(shapeRef3);\n\n    Polygon poly113(4);\n    poly113.ps[0] = Point(343.246, 472.918);\n    poly113.ps[1] = Point(343.246, 492.918);\n    poly113.ps[2] = Point(323.246, 492.918);\n    poly113.ps[3] = Point(323.246, 472.918);\n    ShapeRef *shapeRef113 = new ShapeRef(router, poly113, 113);\n    router->addShape(shapeRef113);\n\n    Polygon poly137(4);\n    poly137.ps[0] = Point(27.2456, 408.918);\n    poly137.ps[1] = Point(27.2456, 428.918);\n    poly137.ps[2] = Point(7.24557, 428.918);\n    poly137.ps[3] = Point(7.24557, 408.918);\n    ShapeRef *shapeRef137 = new ShapeRef(router, poly137, 137);\n    router->addShape(shapeRef137);\n\n    Polygon poly46(4);\n    poly46.ps[0] = Point(1303.25, 708.918);\n    poly46.ps[1] = Point(1303.25, 728.918);\n    poly46.ps[2] = Point(1283.25, 728.918);\n    poly46.ps[3] = Point(1283.25, 708.918);\n    ShapeRef *shapeRef46 = new ShapeRef(router, poly46, 46);\n    router->addShape(shapeRef46);\n\n    Polygon poly164(4);\n    poly164.ps[0] = Point(235.246, 656.918);\n    poly164.ps[1] = Point(235.246, 696.918);\n    poly164.ps[2] = Point(195.246, 696.918);\n    poly164.ps[3] = Point(195.246, 656.918);\n    ShapeRef *shapeRef164 = new ShapeRef(router, poly164, 164);\n    router->addShape(shapeRef164);\n\n    Polygon poly68(4);\n    poly68.ps[0] = Point(967.246, 472.918);\n    poly68.ps[1] = Point(967.246, 492.918);\n    poly68.ps[2] = Point(947.246, 492.918);\n    poly68.ps[3] = Point(947.246, 472.918);\n    ShapeRef *shapeRef68 = new ShapeRef(router, poly68, 68);\n    router->addShape(shapeRef68);\n\n    Polygon poly22(4);\n    poly22.ps[0] = Point(1171.25, 708.918);\n    poly22.ps[1] = Point(1171.25, 728.918);\n    poly22.ps[2] = Point(1151.25, 728.918);\n    poly22.ps[3] = Point(1151.25, 708.918);\n    ShapeRef *shapeRef22 = new ShapeRef(router, poly22, 22);\n    router->addShape(shapeRef22);\n\n    Polygon poly21(4);\n    poly21.ps[0] = Point(811.246, 708.918);\n    poly21.ps[1] = Point(811.246, 728.918);\n    poly21.ps[2] = Point(791.246, 728.918);\n    poly21.ps[3] = Point(791.246, 708.918);\n    ShapeRef *shapeRef21 = new ShapeRef(router, poly21, 21);\n    router->addShape(shapeRef21);\n\n    Polygon poly162(4);\n    poly162.ps[0] = Point(235.246, 427.955);\n    poly162.ps[1] = Point(235.246, 467.955);\n    poly162.ps[2] = Point(195.246, 467.955);\n    poly162.ps[3] = Point(195.246, 427.955);\n    ShapeRef *shapeRef162 = new ShapeRef(router, poly162, 162);\n    router->addShape(shapeRef162);\n\n    Polygon poly163(4);\n    poly163.ps[0] = Point(235.246, 538.918);\n    poly163.ps[1] = Point(235.246, 578.918);\n    poly163.ps[2] = Point(195.246, 578.918);\n    poly163.ps[3] = Point(195.246, 538.918);\n    ShapeRef *shapeRef163 = new ShapeRef(router, poly163, 163);\n    router->addShape(shapeRef163);\n\n    Polygon poly135(4);\n    poly135.ps[0] = Point(27.2456, 472.918);\n    poly135.ps[1] = Point(27.2456, 492.918);\n    poly135.ps[2] = Point(7.24557, 492.918);\n    poly135.ps[3] = Point(7.24557, 472.918);\n    ShapeRef *shapeRef135 = new ShapeRef(router, poly135, 135);\n    router->addShape(shapeRef135);\n\n    Polygon poly13(4);\n    poly13.ps[0] = Point(1223.25, 730.918);\n    poly13.ps[1] = Point(1223.25, 770.918);\n    poly13.ps[2] = Point(1183.25, 770.918);\n    poly13.ps[3] = Point(1183.25, 730.918);\n    ShapeRef *shapeRef13 = new ShapeRef(router, poly13, 13);\n    router->addShape(shapeRef13);\n\n    Polygon poly93(4);\n    poly93.ps[0] = Point(655.246, 376.918);\n    poly93.ps[1] = Point(655.246, 396.918);\n    poly93.ps[2] = Point(635.246, 396.918);\n    poly93.ps[3] = Point(635.246, 376.918);\n    ShapeRef *shapeRef93 = new ShapeRef(router, poly93, 93);\n    router->addShape(shapeRef93);\n\n    Polygon poly80(4);\n    poly80.ps[0] = Point(859.246, 408.918);\n    poly80.ps[1] = Point(859.246, 428.918);\n    poly80.ps[2] = Point(839.246, 428.918);\n    poly80.ps[3] = Point(839.246, 408.918);\n    ShapeRef *shapeRef80 = new ShapeRef(router, poly80, 80);\n    router->addShape(shapeRef80);\n\n    Polygon poly92(4);\n    poly92.ps[0] = Point(655.246, 408.918);\n    poly92.ps[1] = Point(655.246, 428.918);\n    poly92.ps[2] = Point(635.246, 428.918);\n    poly92.ps[3] = Point(635.246, 408.918);\n    ShapeRef *shapeRef92 = new ShapeRef(router, poly92, 92);\n    router->addShape(shapeRef92);\n\n    Polygon poly59(4);\n    poly59.ps[0] = Point(207.246, -128.082);\n    poly59.ps[1] = Point(207.246, -93.0821);\n    poly59.ps[2] = Point(-12.7544, -93.0821);\n    poly59.ps[3] = Point(-12.7544, -128.082);\n    ShapeRef *shapeRef59 = new ShapeRef(router, poly59, 59);\n    router->addShape(shapeRef59);\n\n    Polygon poly43(4);\n    poly43.ps[0] = Point(1303.25, 278.918);\n    poly43.ps[1] = Point(1303.25, 298.918);\n    poly43.ps[2] = Point(1283.25, 298.918);\n    poly43.ps[3] = Point(1283.25, 278.918);\n    ShapeRef *shapeRef43 = new ShapeRef(router, poly43, 43);\n    router->addShape(shapeRef43);\n\n    Polygon poly106(4);\n    poly106.ps[0] = Point(547.246, 246.918);\n    poly106.ps[1] = Point(547.246, 266.918);\n    poly106.ps[2] = Point(527.246, 266.918);\n    poly106.ps[3] = Point(527.246, 246.918);\n    ShapeRef *shapeRef106 = new ShapeRef(router, poly106, 106);\n    router->addShape(shapeRef106);\n\n    Polygon poly79(4);\n    poly79.ps[0] = Point(811.246, 472.918);\n    poly79.ps[1] = Point(811.246, 492.918);\n    poly79.ps[2] = Point(791.246, 492.918);\n    poly79.ps[3] = Point(791.246, 472.918);\n    ShapeRef *shapeRef79 = new ShapeRef(router, poly79, 79);\n    router->addShape(shapeRef79);\n\n    Polygon poly86(4);\n    poly86.ps[0] = Point(703.246, 580.918);\n    poly86.ps[1] = Point(703.246, 600.918);\n    poly86.ps[2] = Point(683.246, 600.918);\n    poly86.ps[3] = Point(683.246, 580.918);\n    ShapeRef *shapeRef86 = new ShapeRef(router, poly86, 86);\n    router->addShape(shapeRef86);\n\n    Polygon poly112(4);\n    poly112.ps[0] = Point(343.246, 504.918);\n    poly112.ps[1] = Point(343.246, 524.918);\n    poly112.ps[2] = Point(323.246, 524.918);\n    poly112.ps[3] = Point(323.246, 504.918);\n    ShapeRef *shapeRef112 = new ShapeRef(router, poly112, 112);\n    router->addShape(shapeRef112);\n\n    Polygon poly82(4);\n    poly82.ps[0] = Point(811.246, 376.918);\n    poly82.ps[1] = Point(811.246, 396.918);\n    poly82.ps[2] = Point(791.246, 396.918);\n    poly82.ps[3] = Point(791.246, 376.918);\n    ShapeRef *shapeRef82 = new ShapeRef(router, poly82, 82);\n    router->addShape(shapeRef82);\n\n    Polygon poly141(4);\n    poly141.ps[0] = Point(254.976, 160.918);\n    poly141.ps[1] = Point(254.976, 180.918);\n    poly141.ps[2] = Point(234.976, 180.918);\n    poly141.ps[3] = Point(234.976, 160.918);\n    ShapeRef *shapeRef141 = new ShapeRef(router, poly141, 141);\n    router->addShape(shapeRef141);\n\n    Polygon poly15(4);\n    poly15.ps[0] = Point(1469.25, 656.918);\n    poly15.ps[1] = Point(1469.25, 696.918);\n    poly15.ps[2] = Point(1429.25, 696.918);\n    poly15.ps[3] = Point(1429.25, 656.918);\n    ShapeRef *shapeRef15 = new ShapeRef(router, poly15, 15);\n    router->addShape(shapeRef15);\n\n    Polygon poly152(4);\n    poly152.ps[0] = Point(339.219, -27.0821);\n    poly152.ps[1] = Point(339.219, 12.9179);\n    poly152.ps[2] = Point(299.219, 12.9179);\n    poly152.ps[3] = Point(299.219, -27.0821);\n    ShapeRef *shapeRef152 = new ShapeRef(router, poly152, 152);\n    router->addShape(shapeRef152);\n\n    Polygon poly9(4);\n    poly9.ps[0] = Point(1223.25, 538.918);\n    poly9.ps[1] = Point(1223.25, 578.918);\n    poly9.ps[2] = Point(1183.25, 578.918);\n    poly9.ps[3] = Point(1183.25, 538.918);\n    ShapeRef *shapeRef9 = new ShapeRef(router, poly9, 9);\n    router->addShape(shapeRef9);\n\n    Polygon poly148(4);\n    poly148.ps[0] = Point(207.246, -39.0821);\n    poly148.ps[1] = Point(207.246, -19.0821);\n    poly148.ps[2] = Point(187.246, -19.0821);\n    poly148.ps[3] = Point(187.246, -39.0821);\n    ShapeRef *shapeRef148 = new ShapeRef(router, poly148, 148);\n    router->addShape(shapeRef148);\n\n    Polygon poly140(4);\n    poly140.ps[0] = Point(27.2456, 236.918);\n    poly140.ps[1] = Point(27.2456, 256.918);\n    poly140.ps[2] = Point(7.24557, 256.918);\n    poly140.ps[3] = Point(7.24557, 236.918);\n    ShapeRef *shapeRef140 = new ShapeRef(router, poly140, 140);\n    router->addShape(shapeRef140);\n\n    Polygon poly18(4);\n    poly18.ps[0] = Point(693.933, 730.918);\n    poly18.ps[1] = Point(693.933, 770.918);\n    poly18.ps[2] = Point(653.933, 770.918);\n    poly18.ps[3] = Point(653.933, 730.918);\n    ShapeRef *shapeRef18 = new ShapeRef(router, poly18, 18);\n    router->addShape(shapeRef18);\n\n    Polygon poly40(4);\n    poly40.ps[0] = Point(391.246, 526.918);\n    poly40.ps[1] = Point(391.246, 546.918);\n    poly40.ps[2] = Point(371.246, 546.918);\n    poly40.ps[3] = Point(371.246, 526.918);\n    ShapeRef *shapeRef40 = new ShapeRef(router, poly40, 40);\n    router->addShape(shapeRef40);\n\n    Polygon poly122(4);\n    poly122.ps[0] = Point(203.246, 580.918);\n    poly122.ps[1] = Point(203.246, 600.918);\n    poly122.ps[2] = Point(183.246, 600.918);\n    poly122.ps[3] = Point(183.246, 580.918);\n    ShapeRef *shapeRef122 = new ShapeRef(router, poly122, 122);\n    router->addShape(shapeRef122);\n\n    Polygon poly175(4);\n    poly175.ps[0] = Point(693.933, 427.955);\n    poly175.ps[1] = Point(693.933, 467.955);\n    poly175.ps[2] = Point(653.933, 467.955);\n    poly175.ps[3] = Point(653.933, 427.955);\n    ShapeRef *shapeRef175 = new ShapeRef(router, poly175, 175);\n    router->addShape(shapeRef175);\n\n    Polygon poly176(4);\n    poly176.ps[0] = Point(693.933, 312.918);\n    poly176.ps[1] = Point(693.933, 352.918);\n    poly176.ps[2] = Point(653.933, 352.918);\n    poly176.ps[3] = Point(653.933, 312.918);\n    ShapeRef *shapeRef176 = new ShapeRef(router, poly176, 176);\n    router->addShape(shapeRef176);\n\n    Polygon poly132(4);\n    poly132.ps[0] = Point(27.2456, 612.918);\n    poly132.ps[1] = Point(27.2456, 632.918);\n    poly132.ps[2] = Point(7.24557, 632.918);\n    poly132.ps[3] = Point(7.24557, 612.918);\n    ShapeRef *shapeRef132 = new ShapeRef(router, poly132, 132);\n    router->addShape(shapeRef132);\n\n    Polygon poly44(4);\n    poly44.ps[0] = Point(1093.25, 666.918);\n    poly44.ps[1] = Point(1093.25, 686.918);\n    poly44.ps[2] = Point(1073.25, 686.918);\n    poly44.ps[3] = Point(1073.25, 666.918);\n    ShapeRef *shapeRef44 = new ShapeRef(router, poly44, 44);\n    router->addShape(shapeRef44);\n\n    Polygon poly62(4);\n    poly62.ps[0] = Point(1015.25, 708.918);\n    poly62.ps[1] = Point(1015.25, 728.918);\n    poly62.ps[2] = Point(995.246, 728.918);\n    poly62.ps[3] = Point(995.246, 708.918);\n    ShapeRef *shapeRef62 = new ShapeRef(router, poly62, 62);\n    router->addShape(shapeRef62);\n\n    Polygon poly151(4);\n    poly151.ps[0] = Point(339.219, -71.0821);\n    poly151.ps[1] = Point(339.219, -31.0821);\n    poly151.ps[2] = Point(299.219, -31.0821);\n    poly151.ps[3] = Point(299.219, -71.0821);\n    ShapeRef *shapeRef151 = new ShapeRef(router, poly151, 151);\n    router->addShape(shapeRef151);\n\n    Polygon poly70(4);\n    poly70.ps[0] = Point(967.246, 408.918);\n    poly70.ps[1] = Point(967.246, 428.918);\n    poly70.ps[2] = Point(947.246, 428.918);\n    poly70.ps[3] = Point(947.246, 408.918);\n    ShapeRef *shapeRef70 = new ShapeRef(router, poly70, 70);\n    router->addShape(shapeRef70);\n\n    Polygon poly168(4);\n    poly168.ps[0] = Point(391.246, 312.918);\n    poly168.ps[1] = Point(391.246, 352.918);\n    poly168.ps[2] = Point(351.246, 352.918);\n    poly168.ps[3] = Point(351.246, 312.918);\n    ShapeRef *shapeRef168 = new ShapeRef(router, poly168, 168);\n    router->addShape(shapeRef168);\n\n    Polygon poly169(4);\n    poly169.ps[0] = Point(547.246, 312.918);\n    poly169.ps[1] = Point(547.246, 352.918);\n    poly169.ps[2] = Point(507.246, 352.918);\n    poly169.ps[3] = Point(507.246, 312.918);\n    ShapeRef *shapeRef169 = new ShapeRef(router, poly169, 169);\n    router->addShape(shapeRef169);\n\n    Polygon poly189(4);\n    poly189.ps[0] = Point(499.246, 300.918);\n    poly189.ps[1] = Point(499.246, 320.918);\n    poly189.ps[2] = Point(479.246, 320.918);\n    poly189.ps[3] = Point(479.246, 300.918);\n    ShapeRef *shapeRef189 = new ShapeRef(router, poly189, 189);\n    router->addShape(shapeRef189);\n\n    Polygon poly190(4);\n    poly190.ps[0] = Point(655.246, 300.918);\n    poly190.ps[1] = Point(655.246, 320.918);\n    poly190.ps[2] = Point(635.246, 320.918);\n    poly190.ps[3] = Point(635.246, 300.918);\n    ShapeRef *shapeRef190 = new ShapeRef(router, poly190, 190);\n    router->addShape(shapeRef190);\n\n    Polygon poly191(4);\n    poly191.ps[0] = Point(811.246, 300.918);\n    poly191.ps[1] = Point(811.246, 320.918);\n    poly191.ps[2] = Point(791.246, 320.918);\n    poly191.ps[3] = Point(791.246, 300.918);\n    ShapeRef *shapeRef191 = new ShapeRef(router, poly191, 191);\n    router->addShape(shapeRef191);\n\n    Polygon poly207(4);\n    poly207.ps[0] = Point(27.2456, 644.918);\n    poly207.ps[1] = Point(27.2456, 664.918);\n    poly207.ps[2] = Point(7.24557, 664.918);\n    poly207.ps[3] = Point(7.24557, 644.918);\n    ShapeRef *shapeRef207 = new ShapeRef(router, poly207, 207);\n    router->addShape(shapeRef207);\n\n    Polygon poly208(4);\n    poly208.ps[0] = Point(203.246, 644.918);\n    poly208.ps[1] = Point(203.246, 664.918);\n    poly208.ps[2] = Point(183.246, 664.918);\n    poly208.ps[3] = Point(183.246, 644.918);\n    ShapeRef *shapeRef208 = new ShapeRef(router, poly208, 208);\n    router->addShape(shapeRef208);\n\n    Polygon poly209(4);\n    poly209.ps[0] = Point(343.246, 644.918);\n    poly209.ps[1] = Point(343.246, 664.918);\n    poly209.ps[2] = Point(323.246, 664.918);\n    poly209.ps[3] = Point(323.246, 644.918);\n    ShapeRef *shapeRef209 = new ShapeRef(router, poly209, 209);\n    router->addShape(shapeRef209);\n\n    Polygon poly10(4);\n    poly10.ps[0] = Point(1223.25, 427.955);\n    poly10.ps[1] = Point(1223.25, 467.955);\n    poly10.ps[2] = Point(1183.25, 467.955);\n    poly10.ps[3] = Point(1183.25, 427.955);\n    ShapeRef *shapeRef10 = new ShapeRef(router, poly10, 10);\n    router->addShape(shapeRef10);\n\n    Polygon poly30(4);\n    poly30.ps[0] = Point(703.246, 644.918);\n    poly30.ps[1] = Point(703.246, 664.918);\n    poly30.ps[2] = Point(683.246, 664.918);\n    poly30.ps[3] = Point(683.246, 644.918);\n    ShapeRef *shapeRef30 = new ShapeRef(router, poly30, 30);\n    router->addShape(shapeRef30);\n\n    Polygon poly119(4);\n    poly119.ps[0] = Point(343.246, 236.918);\n    poly119.ps[1] = Point(343.246, 256.918);\n    poly119.ps[2] = Point(323.246, 256.918);\n    poly119.ps[3] = Point(323.246, 236.918);\n    ShapeRef *shapeRef119 = new ShapeRef(router, poly119, 119);\n    router->addShape(shapeRef119);\n\n    Polygon poly12(4);\n    poly12.ps[0] = Point(1469.25, 730.918);\n    poly12.ps[1] = Point(1469.25, 770.918);\n    poly12.ps[2] = Point(1429.25, 770.918);\n    poly12.ps[3] = Point(1429.25, 730.918);\n    ShapeRef *shapeRef12 = new ShapeRef(router, poly12, 12);\n    router->addShape(shapeRef12);\n\n    Polygon poly154(4);\n    poly154.ps[0] = Point(217.246, 140.918);\n    poly154.ps[1] = Point(217.246, 180.918);\n    poly154.ps[2] = Point(177.246, 180.918);\n    poly154.ps[3] = Point(177.246, 140.918);\n    ShapeRef *shapeRef154 = new ShapeRef(router, poly154, 154);\n    router->addShape(shapeRef154);\n\n    Polygon poly155(4);\n    poly155.ps[0] = Point(77.2456, 140.918);\n    poly155.ps[1] = Point(77.2456, 180.918);\n    poly155.ps[2] = Point(37.2456, 180.918);\n    poly155.ps[3] = Point(37.2456, 140.918);\n    ShapeRef *shapeRef155 = new ShapeRef(router, poly155, 155);\n    router->addShape(shapeRef155);\n\n    Polygon poly39(4);\n    poly39.ps[0] = Point(547.246, 526.918);\n    poly39.ps[1] = Point(547.246, 546.918);\n    poly39.ps[2] = Point(527.246, 546.918);\n    poly39.ps[3] = Point(527.246, 526.918);\n    ShapeRef *shapeRef39 = new ShapeRef(router, poly39, 39);\n    router->addShape(shapeRef39);\n\n    Polygon poly142(4);\n    poly142.ps[0] = Point(155.246, 76.9179);\n    poly142.ps[1] = Point(155.246, 96.9179);\n    poly142.ps[2] = Point(135.246, 96.9179);\n    poly142.ps[3] = Point(135.246, 76.9179);\n    ShapeRef *shapeRef142 = new ShapeRef(router, poly142, 142);\n    router->addShape(shapeRef142);\n\n    Polygon poly143(4);\n    poly143.ps[0] = Point(155.246, 44.9179);\n    poly143.ps[1] = Point(155.246, 64.9179);\n    poly143.ps[2] = Point(135.246, 64.9179);\n    poly143.ps[3] = Point(135.246, 44.9179);\n    ShapeRef *shapeRef143 = new ShapeRef(router, poly143, 143);\n    router->addShape(shapeRef143);\n\n    Polygon poly76(4);\n    poly76.ps[0] = Point(811.246, 612.918);\n    poly76.ps[1] = Point(811.246, 632.918);\n    poly76.ps[2] = Point(791.246, 632.918);\n    poly76.ps[3] = Point(791.246, 612.918);\n    ShapeRef *shapeRef76 = new ShapeRef(router, poly76, 76);\n    router->addShape(shapeRef76);\n\n    Polygon poly55(4);\n    poly55.ps[0] = Point(547.246, 278.918);\n    poly55.ps[1] = Point(547.246, 298.918);\n    poly55.ps[2] = Point(527.246, 298.918);\n    poly55.ps[3] = Point(527.246, 278.918);\n    ShapeRef *shapeRef55 = new ShapeRef(router, poly55, 55);\n    router->addShape(shapeRef55);\n\n    Polygon poly133(4);\n    poly133.ps[0] = Point(27.2456, 580.918);\n    poly133.ps[1] = Point(27.2456, 600.918);\n    poly133.ps[2] = Point(7.24557, 600.918);\n    poly133.ps[3] = Point(7.24557, 580.918);\n    ShapeRef *shapeRef133 = new ShapeRef(router, poly133, 133);\n    router->addShape(shapeRef133);\n\n    Polygon poly123(4);\n    poly123.ps[0] = Point(203.246, 504.918);\n    poly123.ps[1] = Point(203.246, 524.918);\n    poly123.ps[2] = Point(183.246, 524.918);\n    poly123.ps[3] = Point(183.246, 504.918);\n    ShapeRef *shapeRef123 = new ShapeRef(router, poly123, 123);\n    router->addShape(shapeRef123);\n\n    Polygon poly81(4);\n    poly81.ps[0] = Point(811.246, 408.918);\n    poly81.ps[1] = Point(811.246, 428.918);\n    poly81.ps[2] = Point(791.246, 428.918);\n    poly81.ps[3] = Point(791.246, 408.918);\n    ShapeRef *shapeRef81 = new ShapeRef(router, poly81, 81);\n    router->addShape(shapeRef81);\n\n    Polygon poly170(4);\n    poly170.ps[0] = Point(547.246, 427.955);\n    poly170.ps[1] = Point(547.246, 467.955);\n    poly170.ps[2] = Point(507.246, 467.955);\n    poly170.ps[3] = Point(507.246, 427.955);\n    ShapeRef *shapeRef170 = new ShapeRef(router, poly170, 170);\n    router->addShape(shapeRef170);\n\n    Polygon poly145(4);\n    poly145.ps[0] = Point(27.2456, 22.9179);\n    poly145.ps[1] = Point(27.2456, 42.9179);\n    poly145.ps[2] = Point(7.24557, 42.9179);\n    poly145.ps[3] = Point(7.24557, 22.9179);\n    ShapeRef *shapeRef145 = new ShapeRef(router, poly145, 145);\n    router->addShape(shapeRef145);\n\n    Polygon poly14(4);\n    poly14.ps[0] = Point(1191.25, 730.918);\n    poly14.ps[1] = Point(1191.25, 770.918);\n    poly14.ps[2] = Point(1151.25, 770.918);\n    poly14.ps[3] = Point(1151.25, 730.918);\n    ShapeRef *shapeRef14 = new ShapeRef(router, poly14, 14);\n    router->addShape(shapeRef14);\n\n    Polygon poly111(4);\n    poly111.ps[0] = Point(343.246, 580.918);\n    poly111.ps[1] = Point(343.246, 600.918);\n    poly111.ps[2] = Point(323.246, 600.918);\n    poly111.ps[3] = Point(323.246, 580.918);\n    ShapeRef *shapeRef111 = new ShapeRef(router, poly111, 111);\n    router->addShape(shapeRef111);\n\n    Polygon poly299(4);\n    poly299.ps[0] = Point(751.246, 398.918);\n    poly299.ps[1] = Point(751.246, 438.918);\n    poly299.ps[2] = Point(695.246, 438.918);\n    poly299.ps[3] = Point(695.246, 398.918);\n    ShapeRef *shapeRef299 = new ShapeRef(router, poly299, 299);\n    router->addShape(shapeRef299);\n\n    Polygon poly300(4);\n    poly300.ps[0] = Point(751.246, 366.918);\n    poly300.ps[1] = Point(751.246, 406.918);\n    poly300.ps[2] = Point(695.246, 406.918);\n    poly300.ps[3] = Point(695.246, 366.918);\n    ShapeRef *shapeRef300 = new ShapeRef(router, poly300, 300);\n    router->addShape(shapeRef300);\n\n    Polygon poly301(4);\n    poly301.ps[0] = Point(721.246, 182.918);\n    poly301.ps[1] = Point(721.246, 222.918);\n    poly301.ps[2] = Point(665.246, 222.918);\n    poly301.ps[3] = Point(665.246, 182.918);\n    ShapeRef *shapeRef301 = new ShapeRef(router, poly301, 301);\n    router->addShape(shapeRef301);\n\n    Polygon poly302(4);\n    poly302.ps[0] = Point(673.246, 172.918);\n    poly302.ps[1] = Point(673.246, 212.918);\n    poly302.ps[2] = Point(617.246, 212.918);\n    poly302.ps[3] = Point(617.246, 172.918);\n    ShapeRef *shapeRef302 = new ShapeRef(router, poly302, 302);\n    router->addShape(shapeRef302);\n\n    Polygon poly303(4);\n    poly303.ps[0] = Point(673.246, 108.918);\n    poly303.ps[1] = Point(673.246, 148.918);\n    poly303.ps[2] = Point(617.246, 148.918);\n    poly303.ps[3] = Point(617.246, 108.918);\n    ShapeRef *shapeRef303 = new ShapeRef(router, poly303, 303);\n    router->addShape(shapeRef303);\n\n    Polygon poly304(4);\n    poly304.ps[0] = Point(643.246, 570.918);\n    poly304.ps[1] = Point(643.246, 610.918);\n    poly304.ps[2] = Point(587.246, 610.918);\n    poly304.ps[3] = Point(587.246, 570.918);\n    ShapeRef *shapeRef304 = new ShapeRef(router, poly304, 304);\n    router->addShape(shapeRef304);\n\n    Polygon poly305(4);\n    poly305.ps[0] = Point(595.246, 602.918);\n    poly305.ps[1] = Point(595.246, 642.918);\n    poly305.ps[2] = Point(539.246, 642.918);\n    poly305.ps[3] = Point(539.246, 602.918);\n    ShapeRef *shapeRef305 = new ShapeRef(router, poly305, 305);\n    router->addShape(shapeRef305);\n\n    Polygon poly306(4);\n    poly306.ps[0] = Point(595.246, 570.918);\n    poly306.ps[1] = Point(595.246, 610.918);\n    poly306.ps[2] = Point(539.246, 610.918);\n    poly306.ps[3] = Point(539.246, 570.918);\n    ShapeRef *shapeRef306 = new ShapeRef(router, poly306, 306);\n    router->addShape(shapeRef306);\n\n    Polygon poly307(4);\n    poly307.ps[0] = Point(643.246, 466.951);\n    poly307.ps[1] = Point(643.246, 506.951);\n    poly307.ps[2] = Point(587.246, 506.951);\n    poly307.ps[3] = Point(587.246, 466.951);\n    ShapeRef *shapeRef307 = new ShapeRef(router, poly307, 307);\n    router->addShape(shapeRef307);\n\n    Polygon poly308(4);\n    poly308.ps[0] = Point(595.246, 494.918);\n    poly308.ps[1] = Point(595.246, 534.918);\n    poly308.ps[2] = Point(539.246, 534.918);\n    poly308.ps[3] = Point(539.246, 494.918);\n    ShapeRef *shapeRef308 = new ShapeRef(router, poly308, 308);\n    router->addShape(shapeRef308);\n\n    Polygon poly309(4);\n    poly309.ps[0] = Point(595.246, 462.918);\n    poly309.ps[1] = Point(595.246, 502.918);\n    poly309.ps[2] = Point(539.246, 502.918);\n    poly309.ps[3] = Point(539.246, 462.918);\n    ShapeRef *shapeRef309 = new ShapeRef(router, poly309, 309);\n    router->addShape(shapeRef309);\n\n    Polygon poly51(4);\n    poly51.ps[0] = Point(77.2456, 300.918);\n    poly51.ps[1] = Point(77.2456, 320.918);\n    poly51.ps[2] = Point(57.2456, 320.918);\n    poly51.ps[3] = Point(57.2456, 300.918);\n    ShapeRef *shapeRef51 = new ShapeRef(router, poly51, 51);\n    router->addShape(shapeRef51);\n\n    Polygon poly49(4);\n    poly49.ps[0] = Point(859.246, 708.918);\n    poly49.ps[1] = Point(859.246, 728.918);\n    poly49.ps[2] = Point(839.246, 728.918);\n    poly49.ps[3] = Point(839.246, 708.918);\n    ShapeRef *shapeRef49 = new ShapeRef(router, poly49, 49);\n    router->addShape(shapeRef49);\n\n    Polygon poly267(4);\n    poly267.ps[0] = Point(409.246, 214.918);\n    poly267.ps[1] = Point(409.246, 254.918);\n    poly267.ps[2] = Point(353.246, 254.918);\n    poly267.ps[3] = Point(353.246, 214.918);\n    ShapeRef *shapeRef267 = new ShapeRef(router, poly267, 267);\n    router->addShape(shapeRef267);\n\n    Polygon poly268(4);\n    poly268.ps[0] = Point(331.246, 268.918);\n    poly268.ps[1] = Point(331.246, 308.918);\n    poly268.ps[2] = Point(275.246, 308.918);\n    poly268.ps[3] = Point(275.246, 268.918);\n    ShapeRef *shapeRef268 = new ShapeRef(router, poly268, 268);\n    router->addShape(shapeRef268);\n\n    Polygon poly269(4);\n    poly269.ps[0] = Point(1159.25, 698.918);\n    poly269.ps[1] = Point(1159.25, 738.918);\n    poly269.ps[2] = Point(1103.25, 738.918);\n    poly269.ps[3] = Point(1103.25, 698.918);\n    ShapeRef *shapeRef269 = new ShapeRef(router, poly269, 269);\n    router->addShape(shapeRef269);\n\n    Polygon poly270(4);\n    poly270.ps[0] = Point(1063.25, 666.918);\n    poly270.ps[1] = Point(1063.25, 706.918);\n    poly270.ps[2] = Point(1007.25, 706.918);\n    poly270.ps[3] = Point(1007.25, 666.918);\n    ShapeRef *shapeRef270 = new ShapeRef(router, poly270, 270);\n    router->addShape(shapeRef270);\n\n    Polygon poly271(4);\n    poly271.ps[0] = Point(1159.25, 570.918);\n    poly271.ps[1] = Point(1159.25, 610.918);\n    poly271.ps[2] = Point(1103.25, 610.918);\n    poly271.ps[3] = Point(1103.25, 570.918);\n    ShapeRef *shapeRef271 = new ShapeRef(router, poly271, 271);\n    router->addShape(shapeRef271);\n\n    Polygon poly272(4);\n    poly272.ps[0] = Point(1063.25, 602.918);\n    poly272.ps[1] = Point(1063.25, 642.918);\n    poly272.ps[2] = Point(1007.25, 642.918);\n    poly272.ps[3] = Point(1007.25, 602.918);\n    ShapeRef *shapeRef272 = new ShapeRef(router, poly272, 272);\n    router->addShape(shapeRef272);\n\n    Polygon poly273(4);\n    poly273.ps[0] = Point(1063.25, 570.918);\n    poly273.ps[1] = Point(1063.25, 610.918);\n    poly273.ps[2] = Point(1007.25, 610.918);\n    poly273.ps[3] = Point(1007.25, 570.918);\n    ShapeRef *shapeRef273 = new ShapeRef(router, poly273, 273);\n    router->addShape(shapeRef273);\n\n    Polygon poly199(4);\n    poly199.ps[0] = Point(655.246, 440.918);\n    poly199.ps[1] = Point(655.246, 460.918);\n    poly199.ps[2] = Point(635.246, 460.918);\n    poly199.ps[3] = Point(635.246, 440.918);\n    ShapeRef *shapeRef199 = new ShapeRef(router, poly199, 199);\n    router->addShape(shapeRef199);\n\n    Polygon poly200(4);\n    poly200.ps[0] = Point(27.2456, 548.918);\n    poly200.ps[1] = Point(27.2456, 568.918);\n    poly200.ps[2] = Point(7.24557, 568.918);\n    poly200.ps[3] = Point(7.24557, 548.918);\n    ShapeRef *shapeRef200 = new ShapeRef(router, poly200, 200);\n    router->addShape(shapeRef200);\n\n    Polygon poly227(4);\n    poly227.ps[0] = Point(799.246, 602.918);\n    poly227.ps[1] = Point(799.246, 642.918);\n    poly227.ps[2] = Point(743.246, 642.918);\n    poly227.ps[3] = Point(743.246, 602.918);\n    ShapeRef *shapeRef227 = new ShapeRef(router, poly227, 227);\n    router->addShape(shapeRef227);\n\n    Polygon poly228(4);\n    poly228.ps[0] = Point(643.246, 602.918);\n    poly228.ps[1] = Point(643.246, 642.918);\n    poly228.ps[2] = Point(587.246, 642.918);\n    poly228.ps[3] = Point(587.246, 602.918);\n    ShapeRef *shapeRef228 = new ShapeRef(router, poly228, 228);\n    router->addShape(shapeRef228);\n\n    Polygon poly229(4);\n    poly229.ps[0] = Point(487.246, 602.918);\n    poly229.ps[1] = Point(487.246, 642.918);\n    poly229.ps[2] = Point(431.246, 642.918);\n    poly229.ps[3] = Point(431.246, 602.918);\n    ShapeRef *shapeRef229 = new ShapeRef(router, poly229, 229);\n    router->addShape(shapeRef229);\n\n    Polygon poly230(4);\n    poly230.ps[0] = Point(331.246, 602.918);\n    poly230.ps[1] = Point(331.246, 642.918);\n    poly230.ps[2] = Point(275.246, 642.918);\n    poly230.ps[3] = Point(275.246, 602.918);\n    ShapeRef *shapeRef230 = new ShapeRef(router, poly230, 230);\n    router->addShape(shapeRef230);\n\n    Polygon poly185(4);\n    poly185.ps[0] = Point(999.246, 312.918);\n    poly185.ps[1] = Point(999.246, 352.918);\n    poly185.ps[2] = Point(959.246, 352.918);\n    poly185.ps[3] = Point(959.246, 312.918);\n    ShapeRef *shapeRef185 = new ShapeRef(router, poly185, 185);\n    router->addShape(shapeRef185);\n\n    Polygon poly186(4);\n    poly186.ps[0] = Point(27.2456, 300.918);\n    poly186.ps[1] = Point(27.2456, 320.918);\n    poly186.ps[2] = Point(7.24557, 320.918);\n    poly186.ps[3] = Point(7.24557, 300.918);\n    ShapeRef *shapeRef186 = new ShapeRef(router, poly186, 186);\n    router->addShape(shapeRef186);\n\n    Polygon poly204(4);\n    poly204.ps[0] = Point(655.246, 548.918);\n    poly204.ps[1] = Point(655.246, 568.918);\n    poly204.ps[2] = Point(635.246, 568.918);\n    poly204.ps[3] = Point(635.246, 548.918);\n    ShapeRef *shapeRef204 = new ShapeRef(router, poly204, 204);\n    router->addShape(shapeRef204);\n\n    Polygon poly205(4);\n    poly205.ps[0] = Point(811.246, 548.918);\n    poly205.ps[1] = Point(811.246, 568.918);\n    poly205.ps[2] = Point(791.246, 568.918);\n    poly205.ps[3] = Point(791.246, 548.918);\n    ShapeRef *shapeRef205 = new ShapeRef(router, poly205, 205);\n    router->addShape(shapeRef205);\n\n    Polygon poly206(4);\n    poly206.ps[0] = Point(967.246, 548.918);\n    poly206.ps[1] = Point(967.246, 568.918);\n    poly206.ps[2] = Point(947.246, 568.918);\n    poly206.ps[3] = Point(947.246, 548.918);\n    ShapeRef *shapeRef206 = new ShapeRef(router, poly206, 206);\n    router->addShape(shapeRef206);\n\n    Polygon poly237(4);\n    poly237.ps[0] = Point(1399.25, 602.918);\n    poly237.ps[1] = Point(1399.25, 642.918);\n    poly237.ps[2] = Point(1343.25, 642.918);\n    poly237.ps[3] = Point(1343.25, 602.918);\n    ShapeRef *shapeRef237 = new ShapeRef(router, poly237, 237);\n    router->addShape(shapeRef237);\n\n    Polygon poly238(4);\n    poly238.ps[0] = Point(1447.25, 555.942);\n    poly238.ps[1] = Point(1447.25, 595.942);\n    poly238.ps[2] = Point(1391.25, 595.942);\n    poly238.ps[3] = Point(1391.25, 555.942);\n    ShapeRef *shapeRef238 = new ShapeRef(router, poly238, 238);\n    router->addShape(shapeRef238);\n\n    Polygon poly239(4);\n    poly239.ps[0] = Point(1159.25, 634.918);\n    poly239.ps[1] = Point(1159.25, 674.918);\n    poly239.ps[2] = Point(1103.25, 674.918);\n    poly239.ps[3] = Point(1103.25, 634.918);\n    ShapeRef *shapeRef239 = new ShapeRef(router, poly239, 239);\n    router->addShape(shapeRef239);\n\n    Polygon poly240(4);\n    poly240.ps[0] = Point(955.246, 634.918);\n    poly240.ps[1] = Point(955.246, 674.918);\n    poly240.ps[2] = Point(899.246, 674.918);\n    poly240.ps[3] = Point(899.246, 634.918);\n    ShapeRef *shapeRef240 = new ShapeRef(router, poly240, 240);\n    router->addShape(shapeRef240);\n\n    Polygon poly241(4);\n    poly241.ps[0] = Point(799.246, 634.918);\n    poly241.ps[1] = Point(799.246, 674.918);\n    poly241.ps[2] = Point(743.246, 674.918);\n    poly241.ps[3] = Point(743.246, 634.918);\n    ShapeRef *shapeRef241 = new ShapeRef(router, poly241, 241);\n    router->addShape(shapeRef241);\n\n    Polygon poly71(4);\n    poly71.ps[0] = Point(967.246, 376.918);\n    poly71.ps[1] = Point(967.246, 396.918);\n    poly71.ps[2] = Point(947.246, 396.918);\n    poly71.ps[3] = Point(947.246, 376.918);\n    ShapeRef *shapeRef71 = new ShapeRef(router, poly71, 71);\n    router->addShape(shapeRef71);\n\n    Polygon poly50(4);\n    poly50.ps[0] = Point(77.2456, 22.9179);\n    poly50.ps[1] = Point(77.2456, 42.9179);\n    poly50.ps[2] = Point(57.2456, 42.9179);\n    poly50.ps[3] = Point(57.2456, 22.9179);\n    ShapeRef *shapeRef50 = new ShapeRef(router, poly50, 50);\n    router->addShape(shapeRef50);\n\n    Polygon poly358(4);\n    poly358.ps[0] = Point(361.246, 204.918);\n    poly358.ps[1] = Point(361.246, 244.918);\n    poly358.ps[2] = Point(305.246, 244.918);\n    poly358.ps[3] = Point(305.246, 204.918);\n    ShapeRef *shapeRef358 = new ShapeRef(router, poly358, 358);\n    router->addShape(shapeRef358);\n\n    Polygon poly359(4);\n    poly359.ps[0] = Point(517.246, 204.918);\n    poly359.ps[1] = Point(517.246, 244.918);\n    poly359.ps[2] = Point(461.246, 244.918);\n    poly359.ps[3] = Point(461.246, 204.918);\n    ShapeRef *shapeRef359 = new ShapeRef(router, poly359, 359);\n    router->addShape(shapeRef359);\n\n    Polygon poly360(4);\n    poly360.ps[0] = Point(673.246, 204.918);\n    poly360.ps[1] = Point(673.246, 244.918);\n    poly360.ps[2] = Point(617.246, 244.918);\n    poly360.ps[3] = Point(617.246, 204.918);\n    ShapeRef *shapeRef360 = new ShapeRef(router, poly360, 360);\n    router->addShape(shapeRef360);\n\n    Polygon poly361(4);\n    poly361.ps[0] = Point(829.246, 204.918);\n    poly361.ps[1] = Point(829.246, 244.918);\n    poly361.ps[2] = Point(773.246, 244.918);\n    poly361.ps[3] = Point(773.246, 204.918);\n    ShapeRef *shapeRef361 = new ShapeRef(router, poly361, 361);\n    router->addShape(shapeRef361);\n\n    Polygon poly362(4);\n    poly362.ps[0] = Point(985.246, 204.918);\n    poly362.ps[1] = Point(985.246, 244.918);\n    poly362.ps[2] = Point(929.246, 244.918);\n    poly362.ps[3] = Point(929.246, 204.918);\n    ShapeRef *shapeRef362 = new ShapeRef(router, poly362, 362);\n    router->addShape(shapeRef362);\n\n    Polygon poly363(4);\n    poly363.ps[0] = Point(45.2456, 344.918);\n    poly363.ps[1] = Point(45.2456, 384.918);\n    poly363.ps[2] = Point(-10.7544, 384.918);\n    poly363.ps[3] = Point(-10.7544, 344.918);\n    ShapeRef *shapeRef363 = new ShapeRef(router, poly363, 363);\n    router->addShape(shapeRef363);\n\n    Polygon poly364(4);\n    poly364.ps[0] = Point(283.246, 430.918);\n    poly364.ps[1] = Point(283.246, 470.918);\n    poly364.ps[2] = Point(227.246, 470.918);\n    poly364.ps[3] = Point(227.246, 430.918);\n    ShapeRef *shapeRef364 = new ShapeRef(router, poly364, 364);\n    router->addShape(shapeRef364);\n\n    Polygon poly365(4);\n    poly365.ps[0] = Point(439.246, 430.918);\n    poly365.ps[1] = Point(439.246, 470.918);\n    poly365.ps[2] = Point(383.246, 470.918);\n    poly365.ps[3] = Point(383.246, 430.918);\n    ShapeRef *shapeRef365 = new ShapeRef(router, poly365, 365);\n    router->addShape(shapeRef365);\n\n    Polygon poly366(4);\n    poly366.ps[0] = Point(595.246, 430.918);\n    poly366.ps[1] = Point(595.246, 470.918);\n    poly366.ps[2] = Point(539.246, 470.918);\n    poly366.ps[3] = Point(539.246, 430.918);\n    ShapeRef *shapeRef366 = new ShapeRef(router, poly366, 366);\n    router->addShape(shapeRef366);\n\n    Polygon poly367(4);\n    poly367.ps[0] = Point(907.246, 430.918);\n    poly367.ps[1] = Point(907.246, 470.918);\n    poly367.ps[2] = Point(851.246, 470.918);\n    poly367.ps[3] = Point(851.246, 430.918);\n    ShapeRef *shapeRef367 = new ShapeRef(router, poly367, 367);\n    router->addShape(shapeRef367);\n\n    Polygon poly368(4);\n    poly368.ps[0] = Point(1063.25, 430.918);\n    poly368.ps[1] = Point(1063.25, 470.918);\n    poly368.ps[2] = Point(1007.25, 470.918);\n    poly368.ps[3] = Point(1007.25, 430.918);\n    ShapeRef *shapeRef368 = new ShapeRef(router, poly368, 368);\n    router->addShape(shapeRef368);\n\n    Polygon poly369(4);\n    poly369.ps[0] = Point(751.246, 430.918);\n    poly369.ps[1] = Point(751.246, 470.918);\n    poly369.ps[2] = Point(695.246, 470.918);\n    poly369.ps[3] = Point(695.246, 430.918);\n    ShapeRef *shapeRef369 = new ShapeRef(router, poly369, 369);\n    router->addShape(shapeRef369);\n\n    Polygon poly370(4);\n    poly370.ps[0] = Point(125.246, 538.918);\n    poly370.ps[1] = Point(125.246, 578.918);\n    poly370.ps[2] = Point(69.2456, 578.918);\n    poly370.ps[3] = Point(69.2456, 538.918);\n    ShapeRef *shapeRef370 = new ShapeRef(router, poly370, 370);\n    router->addShape(shapeRef370);\n\n    Polygon poly371(4);\n    poly371.ps[0] = Point(283.246, 538.918);\n    poly371.ps[1] = Point(283.246, 578.918);\n    poly371.ps[2] = Point(227.246, 578.918);\n    poly371.ps[3] = Point(227.246, 538.918);\n    ShapeRef *shapeRef371 = new ShapeRef(router, poly371, 371);\n    router->addShape(shapeRef371);\n\n    Polygon poly372(4);\n    poly372.ps[0] = Point(439.246, 538.918);\n    poly372.ps[1] = Point(439.246, 578.918);\n    poly372.ps[2] = Point(383.246, 578.918);\n    poly372.ps[3] = Point(383.246, 538.918);\n    ShapeRef *shapeRef372 = new ShapeRef(router, poly372, 372);\n    router->addShape(shapeRef372);\n\n    Polygon poly373(4);\n    poly373.ps[0] = Point(595.246, 538.918);\n    poly373.ps[1] = Point(595.246, 578.918);\n    poly373.ps[2] = Point(539.246, 578.918);\n    poly373.ps[3] = Point(539.246, 538.918);\n    ShapeRef *shapeRef373 = new ShapeRef(router, poly373, 373);\n    router->addShape(shapeRef373);\n\n    Polygon poly374(4);\n    poly374.ps[0] = Point(751.246, 538.918);\n    poly374.ps[1] = Point(751.246, 578.918);\n    poly374.ps[2] = Point(695.246, 578.918);\n    poly374.ps[3] = Point(695.246, 538.918);\n    ShapeRef *shapeRef374 = new ShapeRef(router, poly374, 374);\n    router->addShape(shapeRef374);\n\n    Polygon poly375(4);\n    poly375.ps[0] = Point(907.246, 538.918);\n    poly375.ps[1] = Point(907.246, 578.918);\n    poly375.ps[2] = Point(851.246, 578.918);\n    poly375.ps[3] = Point(851.246, 538.918);\n    ShapeRef *shapeRef375 = new ShapeRef(router, poly375, 375);\n    router->addShape(shapeRef375);\n\n    Polygon poly376(4);\n    poly376.ps[0] = Point(1063.25, 538.918);\n    poly376.ps[1] = Point(1063.25, 578.918);\n    poly376.ps[2] = Point(1007.25, 578.918);\n    poly376.ps[3] = Point(1007.25, 538.918);\n    ShapeRef *shapeRef376 = new ShapeRef(router, poly376, 376);\n    router->addShape(shapeRef376);\n\n    Polygon poly377(4);\n    poly377.ps[0] = Point(125.246, 634.918);\n    poly377.ps[1] = Point(125.246, 674.918);\n    poly377.ps[2] = Point(69.2456, 674.918);\n    poly377.ps[3] = Point(69.2456, 634.918);\n    ShapeRef *shapeRef377 = new ShapeRef(router, poly377, 377);\n    router->addShape(shapeRef377);\n\n    Polygon poly378(4);\n    poly378.ps[0] = Point(283.246, 634.918);\n    poly378.ps[1] = Point(283.246, 674.918);\n    poly378.ps[2] = Point(227.246, 674.918);\n    poly378.ps[3] = Point(227.246, 634.918);\n    ShapeRef *shapeRef378 = new ShapeRef(router, poly378, 378);\n    router->addShape(shapeRef378);\n\n    Polygon poly379(4);\n    poly379.ps[0] = Point(439.246, 634.918);\n    poly379.ps[1] = Point(439.246, 674.918);\n    poly379.ps[2] = Point(383.246, 674.918);\n    poly379.ps[3] = Point(383.246, 634.918);\n    ShapeRef *shapeRef379 = new ShapeRef(router, poly379, 379);\n    router->addShape(shapeRef379);\n\n    Polygon poly52(4);\n    poly52.ps[0] = Point(1015.25, 278.918);\n    poly52.ps[1] = Point(1015.25, 298.918);\n    poly52.ps[2] = Point(995.246, 298.918);\n    poly52.ps[3] = Point(995.246, 278.918);\n    ShapeRef *shapeRef52 = new ShapeRef(router, poly52, 52);\n    router->addShape(shapeRef52);\n\n    Polygon poly19(4);\n    poly19.ps[0] = Point(547.246, 730.918);\n    poly19.ps[1] = Point(547.246, 770.918);\n    poly19.ps[2] = Point(507.246, 770.918);\n    poly19.ps[3] = Point(507.246, 730.918);\n    ShapeRef *shapeRef19 = new ShapeRef(router, poly19, 19);\n    router->addShape(shapeRef19);\n\n    Polygon poly89(4);\n    poly89.ps[0] = Point(655.246, 504.918);\n    poly89.ps[1] = Point(655.246, 524.918);\n    poly89.ps[2] = Point(635.246, 524.918);\n    poly89.ps[3] = Point(635.246, 504.918);\n    ShapeRef *shapeRef89 = new ShapeRef(router, poly89, 89);\n    router->addShape(shapeRef89);\n\n    Polygon poly194(4);\n    poly194.ps[0] = Point(203.246, 440.918);\n    poly194.ps[1] = Point(203.246, 460.918);\n    poly194.ps[2] = Point(183.246, 460.918);\n    poly194.ps[3] = Point(183.246, 440.918);\n    ShapeRef *shapeRef194 = new ShapeRef(router, poly194, 194);\n    router->addShape(shapeRef194);\n\n    Polygon poly195(4);\n    poly195.ps[0] = Point(343.246, 440.918);\n    poly195.ps[1] = Point(343.246, 460.918);\n    poly195.ps[2] = Point(323.246, 460.918);\n    poly195.ps[3] = Point(323.246, 440.918);\n    ShapeRef *shapeRef195 = new ShapeRef(router, poly195, 195);\n    router->addShape(shapeRef195);\n\n    Polygon poly5(4);\n    poly5.ps[0] = Point(391.246, 612.918);\n    poly5.ps[1] = Point(391.246, 632.918);\n    poly5.ps[2] = Point(371.246, 632.918);\n    poly5.ps[3] = Point(371.246, 612.918);\n    ShapeRef *shapeRef5 = new ShapeRef(router, poly5, 5);\n    router->addShape(shapeRef5);\n\n    Polygon poly27(4);\n    poly27.ps[0] = Point(1303.25, 565.942);\n    poly27.ps[1] = Point(1303.25, 585.942);\n    poly27.ps[2] = Point(1283.25, 585.942);\n    poly27.ps[3] = Point(1283.25, 565.942);\n    ShapeRef *shapeRef27 = new ShapeRef(router, poly27, 27);\n    router->addShape(shapeRef27);\n\n    Polygon poly147(4);\n    poly147.ps[0] = Point(329.219, -39.0821);\n    poly147.ps[1] = Point(329.219, -19.0821);\n    poly147.ps[2] = Point(309.219, -19.0821);\n    poly147.ps[3] = Point(309.219, -39.0821);\n    ShapeRef *shapeRef147 = new ShapeRef(router, poly147, 147);\n    router->addShape(shapeRef147);\n\n    Polygon poly130(4);\n    poly130.ps[0] = Point(203.246, 268.918);\n    poly130.ps[1] = Point(203.246, 288.918);\n    poly130.ps[2] = Point(183.246, 288.918);\n    poly130.ps[3] = Point(183.246, 268.918);\n    ShapeRef *shapeRef130 = new ShapeRef(router, poly130, 130);\n    router->addShape(shapeRef130);\n\n    Polygon poly216(4);\n    poly216.ps[0] = Point(1243.25, 504.918);\n    poly216.ps[1] = Point(1243.25, 524.918);\n    poly216.ps[2] = Point(1223.25, 524.918);\n    poly216.ps[3] = Point(1223.25, 504.918);\n    ShapeRef *shapeRef216 = new ShapeRef(router, poly216, 216);\n    router->addShape(shapeRef216);\n\n    Polygon poly217(4);\n    poly217.ps[0] = Point(1243.25, 612.918);\n    poly217.ps[1] = Point(1243.25, 632.918);\n    poly217.ps[2] = Point(1223.25, 632.918);\n    poly217.ps[3] = Point(1223.25, 612.918);\n    ShapeRef *shapeRef217 = new ShapeRef(router, poly217, 217);\n    router->addShape(shapeRef217);\n\n    Polygon poly218(4);\n    poly218.ps[0] = Point(967.246, 708.918);\n    poly218.ps[1] = Point(967.246, 728.918);\n    poly218.ps[2] = Point(947.246, 728.918);\n    poly218.ps[3] = Point(947.246, 708.918);\n    ShapeRef *shapeRef218 = new ShapeRef(router, poly218, 218);\n    router->addShape(shapeRef218);\n\n    Polygon poly219(4);\n    poly219.ps[0] = Point(967.246, 740.918);\n    poly219.ps[1] = Point(967.246, 760.918);\n    poly219.ps[2] = Point(947.246, 760.918);\n    poly219.ps[3] = Point(947.246, 740.918);\n    ShapeRef *shapeRef219 = new ShapeRef(router, poly219, 219);\n    router->addShape(shapeRef219);\n\n    Polygon poly41(4);\n    poly41.ps[0] = Point(235.246, 526.918);\n    poly41.ps[1] = Point(235.246, 546.918);\n    poly41.ps[2] = Point(215.246, 546.918);\n    poly41.ps[3] = Point(215.246, 526.918);\n    ShapeRef *shapeRef41 = new ShapeRef(router, poly41, 41);\n    router->addShape(shapeRef41);\n\n    Polygon poly109(4);\n    poly109.ps[0] = Point(391.246, 580.918);\n    poly109.ps[1] = Point(391.246, 600.918);\n    poly109.ps[2] = Point(371.246, 600.918);\n    poly109.ps[3] = Point(371.246, 580.918);\n    ShapeRef *shapeRef109 = new ShapeRef(router, poly109, 109);\n    router->addShape(shapeRef109);\n\n    Polygon poly213(4);\n    poly213.ps[0] = Point(967.246, 644.918);\n    poly213.ps[1] = Point(967.246, 664.918);\n    poly213.ps[2] = Point(947.246, 664.918);\n    poly213.ps[3] = Point(947.246, 644.918);\n    ShapeRef *shapeRef213 = new ShapeRef(router, poly213, 213);\n    router->addShape(shapeRef213);\n\n    Polygon poly214(4);\n    poly214.ps[0] = Point(1243.25, 268.918);\n    poly214.ps[1] = Point(1243.25, 288.918);\n    poly214.ps[2] = Point(1223.25, 288.918);\n    poly214.ps[3] = Point(1223.25, 268.918);\n    ShapeRef *shapeRef214 = new ShapeRef(router, poly214, 214);\n    router->addShape(shapeRef214);\n\n    Polygon poly215(4);\n    poly215.ps[0] = Point(1243.25, 408.918);\n    poly215.ps[1] = Point(1243.25, 428.918);\n    poly215.ps[2] = Point(1223.25, 428.918);\n    poly215.ps[3] = Point(1223.25, 408.918);\n    ShapeRef *shapeRef215 = new ShapeRef(router, poly215, 215);\n    router->addShape(shapeRef215);\n\n    Polygon poly196(4);\n    poly196.ps[0] = Point(499.246, 440.918);\n    poly196.ps[1] = Point(499.246, 460.918);\n    poly196.ps[2] = Point(479.246, 460.918);\n    poly196.ps[3] = Point(479.246, 440.918);\n    ShapeRef *shapeRef196 = new ShapeRef(router, poly196, 196);\n    router->addShape(shapeRef196);\n\n    Polygon poly197(4);\n    poly197.ps[0] = Point(811.246, 440.918);\n    poly197.ps[1] = Point(811.246, 460.918);\n    poly197.ps[2] = Point(791.246, 460.918);\n    poly197.ps[3] = Point(791.246, 440.918);\n    ShapeRef *shapeRef197 = new ShapeRef(router, poly197, 197);\n    router->addShape(shapeRef197);\n\n    Polygon poly198(4);\n    poly198.ps[0] = Point(967.246, 440.918);\n    poly198.ps[1] = Point(967.246, 460.918);\n    poly198.ps[2] = Point(947.246, 460.918);\n    poly198.ps[3] = Point(947.246, 440.918);\n    ShapeRef *shapeRef198 = new ShapeRef(router, poly198, 198);\n    router->addShape(shapeRef198);\n\n    Polygon poly181(4);\n    poly181.ps[0] = Point(999.246, 730.918);\n    poly181.ps[1] = Point(999.246, 770.918);\n    poly181.ps[2] = Point(959.246, 770.918);\n    poly181.ps[3] = Point(959.246, 730.918);\n    ShapeRef *shapeRef181 = new ShapeRef(router, poly181, 181);\n    router->addShape(shapeRef181);\n\n    Polygon poly182(4);\n    poly182.ps[0] = Point(999.246, 656.918);\n    poly182.ps[1] = Point(999.246, 696.918);\n    poly182.ps[2] = Point(959.246, 696.918);\n    poly182.ps[3] = Point(959.246, 656.918);\n    ShapeRef *shapeRef182 = new ShapeRef(router, poly182, 182);\n    router->addShape(shapeRef182);\n\n    Polygon poly223(4);\n    poly223.ps[0] = Point(77.2456, 236.918);\n    poly223.ps[1] = Point(77.2456, 256.918);\n    poly223.ps[2] = Point(57.2456, 256.918);\n    poly223.ps[3] = Point(57.2456, 236.918);\n    ShapeRef *shapeRef223 = new ShapeRef(router, poly223, 223);\n    router->addShape(shapeRef223);\n\n    Polygon poly224(4);\n    poly224.ps[0] = Point(77.2456, 268.918);\n    poly224.ps[1] = Point(77.2456, 288.918);\n    poly224.ps[2] = Point(57.2456, 288.918);\n    poly224.ps[3] = Point(57.2456, 268.918);\n    ShapeRef *shapeRef224 = new ShapeRef(router, poly224, 224);\n    router->addShape(shapeRef224);\n\n    Polygon poly225(4);\n    poly225.ps[0] = Point(1159.25, 602.918);\n    poly225.ps[1] = Point(1159.25, 642.918);\n    poly225.ps[2] = Point(1103.25, 642.918);\n    poly225.ps[3] = Point(1103.25, 602.918);\n    ShapeRef *shapeRef225 = new ShapeRef(router, poly225, 225);\n    router->addShape(shapeRef225);\n\n    Polygon poly226(4);\n    poly226.ps[0] = Point(955.246, 602.918);\n    poly226.ps[1] = Point(955.246, 642.918);\n    poly226.ps[2] = Point(899.246, 642.918);\n    poly226.ps[3] = Point(899.246, 602.918);\n    ShapeRef *shapeRef226 = new ShapeRef(router, poly226, 226);\n    router->addShape(shapeRef226);\n\n    Polygon poly326(4);\n    poly326.ps[0] = Point(361.246, 108.918);\n    poly326.ps[1] = Point(361.246, 148.918);\n    poly326.ps[2] = Point(305.246, 148.918);\n    poly326.ps[3] = Point(305.246, 108.918);\n    ShapeRef *shapeRef326 = new ShapeRef(router, poly326, 326);\n    router->addShape(shapeRef326);\n\n    Polygon poly327(4);\n    poly327.ps[0] = Point(331.246, 570.918);\n    poly327.ps[1] = Point(331.246, 610.918);\n    poly327.ps[2] = Point(275.246, 610.918);\n    poly327.ps[3] = Point(275.246, 570.918);\n    ShapeRef *shapeRef327 = new ShapeRef(router, poly327, 327);\n    router->addShape(shapeRef327);\n\n    Polygon poly328(4);\n    poly328.ps[0] = Point(283.246, 602.918);\n    poly328.ps[1] = Point(283.246, 642.918);\n    poly328.ps[2] = Point(227.246, 642.918);\n    poly328.ps[3] = Point(227.246, 602.918);\n    ShapeRef *shapeRef328 = new ShapeRef(router, poly328, 328);\n    router->addShape(shapeRef328);\n\n    Polygon poly329(4);\n    poly329.ps[0] = Point(283.246, 570.918);\n    poly329.ps[1] = Point(283.246, 610.918);\n    poly329.ps[2] = Point(227.246, 610.918);\n    poly329.ps[3] = Point(227.246, 570.918);\n    ShapeRef *shapeRef329 = new ShapeRef(router, poly329, 329);\n    router->addShape(shapeRef329);\n\n    Polygon poly330(4);\n    poly330.ps[0] = Point(283.246, 494.918);\n    poly330.ps[1] = Point(283.246, 534.918);\n    poly330.ps[2] = Point(227.246, 534.918);\n    poly330.ps[3] = Point(227.246, 494.918);\n    ShapeRef *shapeRef330 = new ShapeRef(router, poly330, 330);\n    router->addShape(shapeRef330);\n\n    Polygon poly331(4);\n    poly331.ps[0] = Point(283.246, 462.918);\n    poly331.ps[1] = Point(283.246, 502.918);\n    poly331.ps[2] = Point(227.246, 502.918);\n    poly331.ps[3] = Point(227.246, 462.918);\n    ShapeRef *shapeRef331 = new ShapeRef(router, poly331, 331);\n    router->addShape(shapeRef331);\n\n    Polygon poly332(4);\n    poly332.ps[0] = Point(331.246, 398.918);\n    poly332.ps[1] = Point(331.246, 438.918);\n    poly332.ps[2] = Point(275.246, 438.918);\n    poly332.ps[3] = Point(275.246, 398.918);\n    ShapeRef *shapeRef332 = new ShapeRef(router, poly332, 332);\n    router->addShape(shapeRef332);\n\n    Polygon poly333(4);\n    poly333.ps[0] = Point(283.246, 398.918);\n    poly333.ps[1] = Point(283.246, 438.918);\n    poly333.ps[2] = Point(227.246, 438.918);\n    poly333.ps[3] = Point(227.246, 398.918);\n    ShapeRef *shapeRef333 = new ShapeRef(router, poly333, 333);\n    router->addShape(shapeRef333);\n\n    Polygon poly334(4);\n    poly334.ps[0] = Point(283.246, 366.918);\n    poly334.ps[1] = Point(283.246, 406.918);\n    poly334.ps[2] = Point(227.246, 406.918);\n    poly334.ps[3] = Point(227.246, 366.918);\n    ShapeRef *shapeRef334 = new ShapeRef(router, poly334, 334);\n    router->addShape(shapeRef334);\n\n    Polygon poly335(4);\n    poly335.ps[0] = Point(331.246, 236.918);\n    poly335.ps[1] = Point(331.246, 276.918);\n    poly335.ps[2] = Point(275.246, 276.918);\n    poly335.ps[3] = Point(275.246, 236.918);\n    ShapeRef *shapeRef335 = new ShapeRef(router, poly335, 335);\n    router->addShape(shapeRef335);\n\n    Polygon poly336(4);\n    poly336.ps[0] = Point(221.246, 108.918);\n    poly336.ps[1] = Point(221.246, 148.918);\n    poly336.ps[2] = Point(165.246, 148.918);\n    poly336.ps[3] = Point(165.246, 108.918);\n    ShapeRef *shapeRef336 = new ShapeRef(router, poly336, 336);\n    router->addShape(shapeRef336);\n\n    Polygon poly337(4);\n    poly337.ps[0] = Point(221.246, 172.918);\n    poly337.ps[1] = Point(221.246, 212.918);\n    poly337.ps[2] = Point(165.246, 212.918);\n    poly337.ps[3] = Point(165.246, 172.918);\n    ShapeRef *shapeRef337 = new ShapeRef(router, poly337, 337);\n    router->addShape(shapeRef337);\n\n    Polygon poly338(4);\n    poly338.ps[0] = Point(173.246, 570.918);\n    poly338.ps[1] = Point(173.246, 610.918);\n    poly338.ps[2] = Point(117.246, 610.918);\n    poly338.ps[3] = Point(117.246, 570.918);\n    ShapeRef *shapeRef338 = new ShapeRef(router, poly338, 338);\n    router->addShape(shapeRef338);\n\n    Polygon poly339(4);\n    poly339.ps[0] = Point(125.246, 602.918);\n    poly339.ps[1] = Point(125.246, 642.918);\n    poly339.ps[2] = Point(69.2456, 642.918);\n    poly339.ps[3] = Point(69.2456, 602.918);\n    ShapeRef *shapeRef339 = new ShapeRef(router, poly339, 339);\n    router->addShape(shapeRef339);\n\n    Polygon poly340(4);\n    poly340.ps[0] = Point(125.246, 570.918);\n    poly340.ps[1] = Point(125.246, 610.918);\n    poly340.ps[2] = Point(69.2456, 610.918);\n    poly340.ps[3] = Point(69.2456, 570.918);\n    ShapeRef *shapeRef340 = new ShapeRef(router, poly340, 340);\n    router->addShape(shapeRef340);\n\n    Polygon poly341(4);\n    poly341.ps[0] = Point(125.246, 494.918);\n    poly341.ps[1] = Point(125.246, 534.918);\n    poly341.ps[2] = Point(69.2456, 534.918);\n    poly341.ps[3] = Point(69.2456, 494.918);\n    ShapeRef *shapeRef341 = new ShapeRef(router, poly341, 341);\n    router->addShape(shapeRef341);\n\n    Polygon poly47(4);\n    poly47.ps[0] = Point(1459.25, 708.918);\n    poly47.ps[1] = Point(1459.25, 728.918);\n    poly47.ps[2] = Point(1439.25, 728.918);\n    poly47.ps[3] = Point(1439.25, 708.918);\n    ShapeRef *shapeRef47 = new ShapeRef(router, poly47, 47);\n    router->addShape(shapeRef47);\n\n    Polygon poly342(4);\n    poly342.ps[0] = Point(125.246, 462.918);\n    poly342.ps[1] = Point(125.246, 502.918);\n    poly342.ps[2] = Point(69.2456, 502.918);\n    poly342.ps[3] = Point(69.2456, 462.918);\n    ShapeRef *shapeRef342 = new ShapeRef(router, poly342, 342);\n    router->addShape(shapeRef342);\n\n    Polygon poly343(4);\n    poly343.ps[0] = Point(173.246, 398.918);\n    poly343.ps[1] = Point(173.246, 438.918);\n    poly343.ps[2] = Point(117.246, 438.918);\n    poly343.ps[3] = Point(117.246, 398.918);\n    ShapeRef *shapeRef343 = new ShapeRef(router, poly343, 343);\n    router->addShape(shapeRef343);\n\n    Polygon poly344(4);\n    poly344.ps[0] = Point(125.246, 398.918);\n    poly344.ps[1] = Point(125.246, 438.918);\n    poly344.ps[2] = Point(69.2456, 438.918);\n    poly344.ps[3] = Point(69.2456, 398.918);\n    ShapeRef *shapeRef344 = new ShapeRef(router, poly344, 344);\n    router->addShape(shapeRef344);\n\n    Polygon poly345(4);\n    poly345.ps[0] = Point(125.246, 366.918);\n    poly345.ps[1] = Point(125.246, 406.918);\n    poly345.ps[2] = Point(69.2456, 406.918);\n    poly345.ps[3] = Point(69.2456, 366.918);\n    ShapeRef *shapeRef345 = new ShapeRef(router, poly345, 345);\n    router->addShape(shapeRef345);\n\n    Polygon poly346(4);\n    poly346.ps[0] = Point(45.2456, 172.918);\n    poly346.ps[1] = Point(45.2456, 212.918);\n    poly346.ps[2] = Point(-10.7544, 212.918);\n    poly346.ps[3] = Point(-10.7544, 172.918);\n    ShapeRef *shapeRef346 = new ShapeRef(router, poly346, 346);\n    router->addShape(shapeRef346);\n\n    Polygon poly347(4);\n    poly347.ps[0] = Point(45.2456, 108.918);\n    poly347.ps[1] = Point(45.2456, 148.918);\n    poly347.ps[2] = Point(-10.7544, 148.918);\n    poly347.ps[3] = Point(-10.7544, 108.918);\n    ShapeRef *shapeRef347 = new ShapeRef(router, poly347, 347);\n    router->addShape(shapeRef347);\n\n    Polygon poly348(4);\n    poly348.ps[0] = Point(313.246, 150.918);\n    poly348.ps[1] = Point(313.246, 190.918);\n    poly348.ps[2] = Point(257.246, 190.918);\n    poly348.ps[3] = Point(257.246, 150.918);\n    ShapeRef *shapeRef348 = new ShapeRef(router, poly348, 348);\n    router->addShape(shapeRef348);\n\n    Polygon poly349(4);\n    poly349.ps[0] = Point(265.246, 66.9179);\n    poly349.ps[1] = Point(265.246, 106.918);\n    poly349.ps[2] = Point(209.246, 106.918);\n    poly349.ps[3] = Point(209.246, 66.9179);\n    ShapeRef *shapeRef349 = new ShapeRef(router, poly349, 349);\n    router->addShape(shapeRef349);\n\n    Polygon poly350(4);\n    poly350.ps[0] = Point(265.246, 34.9179);\n    poly350.ps[1] = Point(265.246, 74.9179);\n    poly350.ps[2] = Point(209.246, 74.9179);\n    poly350.ps[3] = Point(209.246, 34.9179);\n    ShapeRef *shapeRef350 = new ShapeRef(router, poly350, 350);\n    router->addShape(shapeRef350);\n\n    Polygon poly351(4);\n    poly351.ps[0] = Point(125.246, 150.918);\n    poly351.ps[1] = Point(125.246, 190.918);\n    poly351.ps[2] = Point(69.2456, 190.918);\n    poly351.ps[3] = Point(69.2456, 150.918);\n    ShapeRef *shapeRef351 = new ShapeRef(router, poly351, 351);\n    router->addShape(shapeRef351);\n\n    Polygon poly352(4);\n    poly352.ps[0] = Point(125.246, 12.9179);\n    poly352.ps[1] = Point(125.246, 52.9179);\n    poly352.ps[2] = Point(69.2456, 52.9179);\n    poly352.ps[3] = Point(69.2456, 12.9179);\n    ShapeRef *shapeRef352 = new ShapeRef(router, poly352, 352);\n    router->addShape(shapeRef352);\n\n    Polygon poly353(4);\n    poly353.ps[0] = Point(125.246, -19.0821);\n    poly353.ps[1] = Point(125.246, 20.9179);\n    poly353.ps[2] = Point(69.2456, 20.9179);\n    poly353.ps[3] = Point(69.2456, -19.0821);\n    ShapeRef *shapeRef353 = new ShapeRef(router, poly353, 353);\n    router->addShape(shapeRef353);\n\n    Polygon poly354(4);\n    poly354.ps[0] = Point(408.962, -49.0821);\n    poly354.ps[1] = Point(408.962, -9.08205);\n    poly354.ps[2] = Point(352.962, -9.08205);\n    poly354.ps[3] = Point(352.962, -49.0821);\n    ShapeRef *shapeRef354 = new ShapeRef(router, poly354, 354);\n    router->addShape(shapeRef354);\n\n    Polygon poly355(4);\n    poly355.ps[0] = Point(307.219, -49.0821);\n    poly355.ps[1] = Point(307.219, -9.08205);\n    poly355.ps[2] = Point(251.219, -9.08205);\n    poly355.ps[3] = Point(251.219, -49.0821);\n    ShapeRef *shapeRef355 = new ShapeRef(router, poly355, 355);\n    router->addShape(shapeRef355);\n\n    Polygon poly356(4);\n    poly356.ps[0] = Point(125.246, 290.918);\n    poly356.ps[1] = Point(125.246, 330.918);\n    poly356.ps[2] = Point(69.2456, 330.918);\n    poly356.ps[3] = Point(69.2456, 290.918);\n    ShapeRef *shapeRef356 = new ShapeRef(router, poly356, 356);\n    router->addShape(shapeRef356);\n\n    Polygon poly357(4);\n    poly357.ps[0] = Point(221.246, 204.918);\n    poly357.ps[1] = Point(221.246, 244.918);\n    poly357.ps[2] = Point(165.246, 244.918);\n    poly357.ps[3] = Point(165.246, 204.918);\n    ShapeRef *shapeRef357 = new ShapeRef(router, poly357, 357);\n    router->addShape(shapeRef357);\n\n    Polygon poly260(4);\n    poly260.ps[0] = Point(955.246, 698.918);\n    poly260.ps[1] = Point(955.246, 738.918);\n    poly260.ps[2] = Point(899.246, 738.918);\n    poly260.ps[3] = Point(899.246, 698.918);\n    ShapeRef *shapeRef260 = new ShapeRef(router, poly260, 260);\n    router->addShape(shapeRef260);\n\n    Polygon poly261(4);\n    poly261.ps[0] = Point(173.246, 12.9179);\n    poly261.ps[1] = Point(173.246, 52.9179);\n    poly261.ps[2] = Point(117.246, 52.9179);\n    poly261.ps[3] = Point(117.246, 12.9179);\n    ShapeRef *shapeRef261 = new ShapeRef(router, poly261, 261);\n    router->addShape(shapeRef261);\n\n    Polygon poly262(4);\n    poly262.ps[0] = Point(173.246, 290.918);\n    poly262.ps[1] = Point(173.246, 330.918);\n    poly262.ps[2] = Point(117.246, 330.918);\n    poly262.ps[3] = Point(117.246, 290.918);\n    ShapeRef *shapeRef262 = new ShapeRef(router, poly262, 262);\n    router->addShape(shapeRef262);\n\n    Polygon poly263(4);\n    poly263.ps[0] = Point(1033.25, 214.918);\n    poly263.ps[1] = Point(1033.25, 254.918);\n    poly263.ps[2] = Point(977.246, 254.918);\n    poly263.ps[3] = Point(977.246, 214.918);\n    ShapeRef *shapeRef263 = new ShapeRef(router, poly263, 263);\n    router->addShape(shapeRef263);\n\n    Polygon poly264(4);\n    poly264.ps[0] = Point(877.246, 214.918);\n    poly264.ps[1] = Point(877.246, 254.918);\n    poly264.ps[2] = Point(821.246, 254.918);\n    poly264.ps[3] = Point(821.246, 214.918);\n    ShapeRef *shapeRef264 = new ShapeRef(router, poly264, 264);\n    router->addShape(shapeRef264);\n\n    Polygon poly265(4);\n    poly265.ps[0] = Point(721.246, 214.918);\n    poly265.ps[1] = Point(721.246, 254.918);\n    poly265.ps[2] = Point(665.246, 254.918);\n    poly265.ps[3] = Point(665.246, 214.918);\n    ShapeRef *shapeRef265 = new ShapeRef(router, poly265, 265);\n    router->addShape(shapeRef265);\n\n    Polygon poly266(4);\n    poly266.ps[0] = Point(565.246, 214.918);\n    poly266.ps[1] = Point(565.246, 254.918);\n    poly266.ps[2] = Point(509.246, 254.918);\n    poly266.ps[3] = Point(509.246, 214.918);\n    ShapeRef *shapeRef266 = new ShapeRef(router, poly266, 266);\n    router->addShape(shapeRef266);\n\n    Polygon poly179(4);\n    poly179.ps[0] = Point(843.246, 538.918);\n    poly179.ps[1] = Point(843.246, 578.918);\n    poly179.ps[2] = Point(803.246, 578.918);\n    poly179.ps[3] = Point(803.246, 538.918);\n    ShapeRef *shapeRef179 = new ShapeRef(router, poly179, 179);\n    router->addShape(shapeRef179);\n\n    Polygon poly180(4);\n    poly180.ps[0] = Point(843.246, 656.918);\n    poly180.ps[1] = Point(843.246, 696.918);\n    poly180.ps[2] = Point(803.246, 696.918);\n    poly180.ps[3] = Point(803.246, 656.918);\n    ShapeRef *shapeRef180 = new ShapeRef(router, poly180, 180);\n    router->addShape(shapeRef180);\n\n    Polygon poly274(4);\n    poly274.ps[0] = Point(1063.25, 494.918);\n    poly274.ps[1] = Point(1063.25, 534.918);\n    poly274.ps[2] = Point(1007.25, 534.918);\n    poly274.ps[3] = Point(1007.25, 494.918);\n    ShapeRef *shapeRef274 = new ShapeRef(router, poly274, 274);\n    router->addShape(shapeRef274);\n\n    Polygon poly275(4);\n    poly275.ps[0] = Point(1063.25, 462.918);\n    poly275.ps[1] = Point(1063.25, 502.918);\n    poly275.ps[2] = Point(1007.25, 502.918);\n    poly275.ps[3] = Point(1007.25, 462.918);\n    ShapeRef *shapeRef275 = new ShapeRef(router, poly275, 275);\n    router->addShape(shapeRef275);\n\n    Polygon poly276(4);\n    poly276.ps[0] = Point(1159.25, 398.918);\n    poly276.ps[1] = Point(1159.25, 438.918);\n    poly276.ps[2] = Point(1103.25, 438.918);\n    poly276.ps[3] = Point(1103.25, 398.918);\n    ShapeRef *shapeRef276 = new ShapeRef(router, poly276, 276);\n    router->addShape(shapeRef276);\n\n    Polygon poly277(4);\n    poly277.ps[0] = Point(1063.25, 398.918);\n    poly277.ps[1] = Point(1063.25, 438.918);\n    poly277.ps[2] = Point(1007.25, 438.918);\n    poly277.ps[3] = Point(1007.25, 398.918);\n    ShapeRef *shapeRef277 = new ShapeRef(router, poly277, 277);\n    router->addShape(shapeRef277);\n\n    Polygon poly278(4);\n    poly278.ps[0] = Point(1063.25, 366.918);\n    poly278.ps[1] = Point(1063.25, 406.918);\n    poly278.ps[2] = Point(1007.25, 406.918);\n    poly278.ps[3] = Point(1007.25, 366.918);\n    ShapeRef *shapeRef278 = new ShapeRef(router, poly278, 278);\n    router->addShape(shapeRef278);\n\n    Polygon poly279(4);\n    poly279.ps[0] = Point(1033.25, 182.918);\n    poly279.ps[1] = Point(1033.25, 222.918);\n    poly279.ps[2] = Point(977.246, 222.918);\n    poly279.ps[3] = Point(977.246, 182.918);\n    ShapeRef *shapeRef279 = new ShapeRef(router, poly279, 279);\n    router->addShape(shapeRef279);\n\n    Polygon poly280(4);\n    poly280.ps[0] = Point(985.246, 172.918);\n    poly280.ps[1] = Point(985.246, 212.918);\n    poly280.ps[2] = Point(929.246, 212.918);\n    poly280.ps[3] = Point(929.246, 172.918);\n    ShapeRef *shapeRef280 = new ShapeRef(router, poly280, 280);\n    router->addShape(shapeRef280);\n\n    Polygon poly281(4);\n    poly281.ps[0] = Point(985.246, 108.918);\n    poly281.ps[1] = Point(985.246, 148.918);\n    poly281.ps[2] = Point(929.246, 148.918);\n    poly281.ps[3] = Point(929.246, 108.918);\n    ShapeRef *shapeRef281 = new ShapeRef(router, poly281, 281);\n    router->addShape(shapeRef281);\n\n    Polygon poly65(4);\n    poly65.ps[0] = Point(967.246, 612.918);\n    poly65.ps[1] = Point(967.246, 632.918);\n    poly65.ps[2] = Point(947.246, 632.918);\n    poly65.ps[3] = Point(947.246, 612.918);\n    ShapeRef *shapeRef65 = new ShapeRef(router, poly65, 65);\n    router->addShape(shapeRef65);\n\n    Polygon poly53(4);\n    poly53.ps[0] = Point(859.246, 278.918);\n    poly53.ps[1] = Point(859.246, 298.918);\n    poly53.ps[2] = Point(839.246, 298.918);\n    poly53.ps[3] = Point(839.246, 278.918);\n    ShapeRef *shapeRef53 = new ShapeRef(router, poly53, 53);\n    router->addShape(shapeRef53);\n\n    Polygon poly66(4);\n    poly66.ps[0] = Point(967.246, 580.918);\n    poly66.ps[1] = Point(967.246, 600.918);\n    poly66.ps[2] = Point(947.246, 600.918);\n    poly66.ps[3] = Point(947.246, 580.918);\n    ShapeRef *shapeRef66 = new ShapeRef(router, poly66, 66);\n    router->addShape(shapeRef66);\n\n    Polygon poly54(4);\n    poly54.ps[0] = Point(703.246, 278.918);\n    poly54.ps[1] = Point(703.246, 298.918);\n    poly54.ps[2] = Point(683.246, 298.918);\n    poly54.ps[3] = Point(683.246, 278.918);\n    ShapeRef *shapeRef54 = new ShapeRef(router, poly54, 54);\n    router->addShape(shapeRef54);\n\n    Polygon poly171(4);\n    poly171.ps[0] = Point(547.246, 538.918);\n    poly171.ps[1] = Point(547.246, 578.918);\n    poly171.ps[2] = Point(507.246, 578.918);\n    poly171.ps[3] = Point(507.246, 538.918);\n    ShapeRef *shapeRef171 = new ShapeRef(router, poly171, 171);\n    router->addShape(shapeRef171);\n\n    Polygon poly172(4);\n    poly172.ps[0] = Point(547.246, 656.918);\n    poly172.ps[1] = Point(547.246, 696.918);\n    poly172.ps[2] = Point(507.246, 696.918);\n    poly172.ps[3] = Point(507.246, 656.918);\n    ShapeRef *shapeRef172 = new ShapeRef(router, poly172, 172);\n    router->addShape(shapeRef172);\n\n    Polygon poly78(4);\n    poly78.ps[0] = Point(811.246, 504.918);\n    poly78.ps[1] = Point(811.246, 524.918);\n    poly78.ps[2] = Point(791.246, 524.918);\n    poly78.ps[3] = Point(791.246, 504.918);\n    ShapeRef *shapeRef78 = new ShapeRef(router, poly78, 78);\n    router->addShape(shapeRef78);\n\n    Polygon poly95(4);\n    poly95.ps[0] = Point(655.246, 268.918);\n    poly95.ps[1] = Point(655.246, 288.918);\n    poly95.ps[2] = Point(635.246, 288.918);\n    poly95.ps[3] = Point(635.246, 268.918);\n    ShapeRef *shapeRef95 = new ShapeRef(router, poly95, 95);\n    router->addShape(shapeRef95);\n\n    Polygon poly156(4);\n    poly156.ps[0] = Point(77.2456, 312.918);\n    poly156.ps[1] = Point(77.2456, 352.918);\n    poly156.ps[2] = Point(37.2456, 352.918);\n    poly156.ps[3] = Point(37.2456, 312.918);\n    ShapeRef *shapeRef156 = new ShapeRef(router, poly156, 156);\n    router->addShape(shapeRef156);\n\n    Polygon poly187(4);\n    poly187.ps[0] = Point(203.246, 300.918);\n    poly187.ps[1] = Point(203.246, 320.918);\n    poly187.ps[2] = Point(183.246, 320.918);\n    poly187.ps[3] = Point(183.246, 300.918);\n    ShapeRef *shapeRef187 = new ShapeRef(router, poly187, 187);\n    router->addShape(shapeRef187);\n\n    Polygon poly188(4);\n    poly188.ps[0] = Point(343.246, 300.918);\n    poly188.ps[1] = Point(343.246, 320.918);\n    poly188.ps[2] = Point(323.246, 320.918);\n    poly188.ps[3] = Point(323.246, 300.918);\n    ShapeRef *shapeRef188 = new ShapeRef(router, poly188, 188);\n    router->addShape(shapeRef188);\n\n    Polygon poly100(4);\n    poly100.ps[0] = Point(547.246, 476.951);\n    poly100.ps[1] = Point(547.246, 496.951);\n    poly100.ps[2] = Point(527.246, 496.951);\n    poly100.ps[3] = Point(527.246, 476.951);\n    ShapeRef *shapeRef100 = new ShapeRef(router, poly100, 100);\n    router->addShape(shapeRef100);\n\n    Polygon poly56(4);\n    poly56.ps[0] = Point(391.246, 278.918);\n    poly56.ps[1] = Point(391.246, 298.918);\n    poly56.ps[2] = Point(371.246, 298.918);\n    poly56.ps[3] = Point(371.246, 278.918);\n    ShapeRef *shapeRef56 = new ShapeRef(router, poly56, 56);\n    router->addShape(shapeRef56);\n\n    Polygon poly220(4);\n    poly220.ps[0] = Point(1243.25, 708.918);\n    poly220.ps[1] = Point(1243.25, 728.918);\n    poly220.ps[2] = Point(1223.25, 728.918);\n    poly220.ps[3] = Point(1223.25, 708.918);\n    ShapeRef *shapeRef220 = new ShapeRef(router, poly220, 220);\n    router->addShape(shapeRef220);\n\n    Polygon poly221(4);\n    poly221.ps[0] = Point(1303.25, 246.918);\n    poly221.ps[1] = Point(1303.25, 266.918);\n    poly221.ps[2] = Point(1283.25, 266.918);\n    poly221.ps[3] = Point(1283.25, 246.918);\n    ShapeRef *shapeRef221 = new ShapeRef(router, poly221, 221);\n    router->addShape(shapeRef221);\n\n    Polygon poly222(4);\n    poly222.ps[0] = Point(1303.25, 634.918);\n    poly222.ps[1] = Point(1303.25, 654.918);\n    poly222.ps[2] = Point(1283.25, 654.918);\n    poly222.ps[3] = Point(1283.25, 634.918);\n    ShapeRef *shapeRef222 = new ShapeRef(router, poly222, 222);\n    router->addShape(shapeRef222);\n\n    Polygon poly83(4);\n    poly83.ps[0] = Point(859.246, 246.918);\n    poly83.ps[1] = Point(859.246, 266.918);\n    poly83.ps[2] = Point(839.246, 266.918);\n    poly83.ps[3] = Point(839.246, 246.918);\n    ShapeRef *shapeRef83 = new ShapeRef(router, poly83, 83);\n    router->addShape(shapeRef83);\n\n    Polygon poly136(4);\n    poly136.ps[0] = Point(77.2456, 408.918);\n    poly136.ps[1] = Point(77.2456, 428.918);\n    poly136.ps[2] = Point(57.2456, 428.918);\n    poly136.ps[3] = Point(57.2456, 408.918);\n    ShapeRef *shapeRef136 = new ShapeRef(router, poly136, 136);\n    router->addShape(shapeRef136);\n\n    Polygon poly60(4);\n    poly60.ps[0] = Point(590.455, 4.91795);\n    poly60.ps[1] = Point(590.455, 64.9179);\n    poly60.ps[2] = Point(312.455, 64.9179);\n    poly60.ps[3] = Point(312.455, 4.91795);\n    ShapeRef *shapeRef60 = new ShapeRef(router, poly60, 60);\n    router->addShape(shapeRef60);\n\n    Polygon poly104(4);\n    poly104.ps[0] = Point(499.246, 408.918);\n    poly104.ps[1] = Point(499.246, 428.918);\n    poly104.ps[2] = Point(479.246, 428.918);\n    poly104.ps[3] = Point(479.246, 408.918);\n    ShapeRef *shapeRef104 = new ShapeRef(router, poly104, 104);\n    router->addShape(shapeRef104);\n\n    Polygon poly8(4);\n    poly8.ps[0] = Point(1223.25, 656.918);\n    poly8.ps[1] = Point(1223.25, 696.918);\n    poly8.ps[2] = Point(1183.25, 696.918);\n    poly8.ps[3] = Point(1183.25, 656.918);\n    ShapeRef *shapeRef8 = new ShapeRef(router, poly8, 8);\n    router->addShape(shapeRef8);\n\n    Polygon poly121(4);\n    poly121.ps[0] = Point(203.246, 612.918);\n    poly121.ps[1] = Point(203.246, 632.918);\n    poly121.ps[2] = Point(183.246, 632.918);\n    poly121.ps[3] = Point(183.246, 612.918);\n    ShapeRef *shapeRef121 = new ShapeRef(router, poly121, 121);\n    router->addShape(shapeRef121);\n\n    Polygon poly61(4);\n    poly61.ps[0] = Point(222.246, -101.082);\n    poly61.ps[1] = Point(222.246, -41.0821);\n    poly61.ps[2] = Point(-12.7544, -41.0821);\n    poly61.ps[3] = Point(-12.7544, -101.082);\n    ShapeRef *shapeRef61 = new ShapeRef(router, poly61, 61);\n    router->addShape(shapeRef61);\n\n    Polygon poly58(4);\n    poly58.ps[0] = Point(1047.75, 767.422);\n    poly58.ps[1] = Point(1047.75, 802.422);\n    poly58.ps[2] = Point(910.746, 802.422);\n    poly58.ps[3] = Point(910.746, 767.422);\n    ShapeRef *shapeRef58 = new ShapeRef(router, poly58, 58);\n    router->addShape(shapeRef58);\n\n    Polygon poly248(4);\n    poly248.ps[0] = Point(955.246, 516.918);\n    poly248.ps[1] = Point(955.246, 556.918);\n    poly248.ps[2] = Point(899.246, 556.918);\n    poly248.ps[3] = Point(899.246, 516.918);\n    ShapeRef *shapeRef248 = new ShapeRef(router, poly248, 248);\n    router->addShape(shapeRef248);\n\n    Polygon poly249(4);\n    poly249.ps[0] = Point(799.246, 516.918);\n    poly249.ps[1] = Point(799.246, 556.918);\n    poly249.ps[2] = Point(743.246, 556.918);\n    poly249.ps[3] = Point(743.246, 516.918);\n    ShapeRef *shapeRef249 = new ShapeRef(router, poly249, 249);\n    router->addShape(shapeRef249);\n\n    Polygon poly250(4);\n    poly250.ps[0] = Point(643.246, 516.918);\n    poly250.ps[1] = Point(643.246, 556.918);\n    poly250.ps[2] = Point(587.246, 556.918);\n    poly250.ps[3] = Point(587.246, 516.918);\n    ShapeRef *shapeRef250 = new ShapeRef(router, poly250, 250);\n    router->addShape(shapeRef250);\n\n    Polygon poly251(4);\n    poly251.ps[0] = Point(487.246, 516.918);\n    poly251.ps[1] = Point(487.246, 556.918);\n    poly251.ps[2] = Point(431.246, 556.918);\n    poly251.ps[3] = Point(431.246, 516.918);\n    ShapeRef *shapeRef251 = new ShapeRef(router, poly251, 251);\n    router->addShape(shapeRef251);\n\n    Polygon poly252(4);\n    poly252.ps[0] = Point(331.246, 516.918);\n    poly252.ps[1] = Point(331.246, 556.918);\n    poly252.ps[2] = Point(275.246, 556.918);\n    poly252.ps[3] = Point(275.246, 516.918);\n    ShapeRef *shapeRef252 = new ShapeRef(router, poly252, 252);\n    router->addShape(shapeRef252);\n\n    Polygon poly253(4);\n    poly253.ps[0] = Point(173.246, 516.918);\n    poly253.ps[1] = Point(173.246, 556.918);\n    poly253.ps[2] = Point(117.246, 556.918);\n    poly253.ps[3] = Point(117.246, 516.918);\n    ShapeRef *shapeRef253 = new ShapeRef(router, poly253, 253);\n    router->addShape(shapeRef253);\n\n    Polygon poly231(4);\n    poly231.ps[0] = Point(173.246, 634.918);\n    poly231.ps[1] = Point(173.246, 674.918);\n    poly231.ps[2] = Point(117.246, 674.918);\n    poly231.ps[3] = Point(117.246, 634.918);\n    ShapeRef *shapeRef231 = new ShapeRef(router, poly231, 231);\n    router->addShape(shapeRef231);\n\n    Polygon poly232(4);\n    poly232.ps[0] = Point(907.246, 698.918);\n    poly232.ps[1] = Point(907.246, 738.918);\n    poly232.ps[2] = Point(851.246, 738.918);\n    poly232.ps[3] = Point(851.246, 698.918);\n    ShapeRef *shapeRef232 = new ShapeRef(router, poly232, 232);\n    router->addShape(shapeRef232);\n\n    Polygon poly233(4);\n    poly233.ps[0] = Point(1231.25, 698.918);\n    poly233.ps[1] = Point(1231.25, 738.918);\n    poly233.ps[2] = Point(1175.25, 738.918);\n    poly233.ps[3] = Point(1175.25, 698.918);\n    ShapeRef *shapeRef233 = new ShapeRef(router, poly233, 233);\n    router->addShape(shapeRef233);\n\n    Polygon poly234(4);\n    poly234.ps[0] = Point(1291.25, 698.918);\n    poly234.ps[1] = Point(1291.25, 738.918);\n    poly234.ps[2] = Point(1235.25, 738.918);\n    poly234.ps[3] = Point(1235.25, 698.918);\n    ShapeRef *shapeRef234 = new ShapeRef(router, poly234, 234);\n    router->addShape(shapeRef234);\n\n    Polygon poly235(4);\n    poly235.ps[0] = Point(622.941, 698.918);\n    poly235.ps[1] = Point(622.941, 738.918);\n    poly235.ps[2] = Point(566.941, 738.918);\n    poly235.ps[3] = Point(566.941, 698.918);\n    ShapeRef *shapeRef235 = new ShapeRef(router, poly235, 235);\n    router->addShape(shapeRef235);\n\n    Polygon poly236(4);\n    poly236.ps[0] = Point(479.455, 698.918);\n    poly236.ps[1] = Point(479.455, 738.918);\n    poly236.ps[2] = Point(423.455, 738.918);\n    poly236.ps[3] = Point(423.455, 698.918);\n    ShapeRef *shapeRef236 = new ShapeRef(router, poly236, 236);\n    router->addShape(shapeRef236);\n\n    Polygon poly103(4);\n    poly103.ps[0] = Point(547.246, 408.918);\n    poly103.ps[1] = Point(547.246, 428.918);\n    poly103.ps[2] = Point(527.246, 428.918);\n    poly103.ps[3] = Point(527.246, 408.918);\n    ShapeRef *shapeRef103 = new ShapeRef(router, poly103, 103);\n    router->addShape(shapeRef103);\n\n    Polygon poly69(4);\n    poly69.ps[0] = Point(1015.25, 408.918);\n    poly69.ps[1] = Point(1015.25, 428.918);\n    poly69.ps[2] = Point(995.246, 428.918);\n    poly69.ps[3] = Point(995.246, 408.918);\n    ShapeRef *shapeRef69 = new ShapeRef(router, poly69, 69);\n    router->addShape(shapeRef69);\n\n    Polygon poly4(4);\n    poly4.ps[0] = Point(547.246, 612.918);\n    poly4.ps[1] = Point(547.246, 632.918);\n    poly4.ps[2] = Point(527.246, 632.918);\n    poly4.ps[3] = Point(527.246, 612.918);\n    ShapeRef *shapeRef4 = new ShapeRef(router, poly4, 4);\n    router->addShape(shapeRef4);\n\n    Polygon poly7(4);\n    poly7.ps[0] = Point(77.2456, 644.918);\n    poly7.ps[1] = Point(77.2456, 664.918);\n    poly7.ps[2] = Point(57.2456, 664.918);\n    poly7.ps[3] = Point(57.2456, 644.918);\n    ShapeRef *shapeRef7 = new ShapeRef(router, poly7, 7);\n    router->addShape(shapeRef7);\n\n    Polygon poly33(4);\n    poly33.ps[0] = Point(235.246, 644.918);\n    poly33.ps[1] = Point(235.246, 664.918);\n    poly33.ps[2] = Point(215.246, 664.918);\n    poly33.ps[3] = Point(215.246, 644.918);\n    ShapeRef *shapeRef33 = new ShapeRef(router, poly33, 33);\n    router->addShape(shapeRef33);\n\n    Polygon poly380(4);\n    poly380.ps[0] = Point(595.246, 634.918);\n    poly380.ps[1] = Point(595.246, 674.918);\n    poly380.ps[2] = Point(539.246, 674.918);\n    poly380.ps[3] = Point(539.246, 634.918);\n    ShapeRef *shapeRef380 = new ShapeRef(router, poly380, 380);\n    router->addShape(shapeRef380);\n\n    Polygon poly381(4);\n    poly381.ps[0] = Point(751.246, 634.918);\n    poly381.ps[1] = Point(751.246, 674.918);\n    poly381.ps[2] = Point(695.246, 674.918);\n    poly381.ps[3] = Point(695.246, 634.918);\n    ShapeRef *shapeRef381 = new ShapeRef(router, poly381, 381);\n    router->addShape(shapeRef381);\n\n    Polygon poly382(4);\n    poly382.ps[0] = Point(907.246, 634.918);\n    poly382.ps[1] = Point(907.246, 674.918);\n    poly382.ps[2] = Point(851.246, 674.918);\n    poly382.ps[3] = Point(851.246, 634.918);\n    ShapeRef *shapeRef382 = new ShapeRef(router, poly382, 382);\n    router->addShape(shapeRef382);\n\n    Polygon poly383(4);\n    poly383.ps[0] = Point(1063.25, 634.918);\n    poly383.ps[1] = Point(1063.25, 674.918);\n    poly383.ps[2] = Point(1007.25, 674.918);\n    poly383.ps[3] = Point(1007.25, 634.918);\n    ShapeRef *shapeRef383 = new ShapeRef(router, poly383, 383);\n    router->addShape(shapeRef383);\n\n    Polygon poly384(4);\n    poly384.ps[0] = Point(1261.25, 172.918);\n    poly384.ps[1] = Point(1261.25, 212.918);\n    poly384.ps[2] = Point(1205.25, 212.918);\n    poly384.ps[3] = Point(1205.25, 172.918);\n    ShapeRef *shapeRef384 = new ShapeRef(router, poly384, 384);\n    router->addShape(shapeRef384);\n\n    Polygon poly385(4);\n    poly385.ps[0] = Point(1351.25, 398.918);\n    poly385.ps[1] = Point(1351.25, 438.918);\n    poly385.ps[2] = Point(1295.25, 438.918);\n    poly385.ps[3] = Point(1295.25, 398.918);\n    ShapeRef *shapeRef385 = new ShapeRef(router, poly385, 385);\n    router->addShape(shapeRef385);\n\n    Polygon poly386(4);\n    poly386.ps[0] = Point(1351.25, 494.918);\n    poly386.ps[1] = Point(1351.25, 534.918);\n    poly386.ps[2] = Point(1295.25, 534.918);\n    poly386.ps[3] = Point(1295.25, 494.918);\n    ShapeRef *shapeRef386 = new ShapeRef(router, poly386, 386);\n    router->addShape(shapeRef386);\n\n    Polygon poly387(4);\n    poly387.ps[0] = Point(1351.25, 602.918);\n    poly387.ps[1] = Point(1351.25, 642.918);\n    poly387.ps[2] = Point(1295.25, 642.918);\n    poly387.ps[3] = Point(1295.25, 602.918);\n    ShapeRef *shapeRef387 = new ShapeRef(router, poly387, 387);\n    router->addShape(shapeRef387);\n\n    Polygon poly388(4);\n    poly388.ps[0] = Point(1063.25, 698.918);\n    poly388.ps[1] = Point(1063.25, 738.918);\n    poly388.ps[2] = Point(1007.25, 738.918);\n    poly388.ps[3] = Point(1007.25, 698.918);\n    ShapeRef *shapeRef388 = new ShapeRef(router, poly388, 388);\n    router->addShape(shapeRef388);\n\n    Polygon poly389(4);\n    poly389.ps[0] = Point(1063.25, 730.918);\n    poly389.ps[1] = Point(1063.25, 770.918);\n    poly389.ps[2] = Point(1007.25, 770.918);\n    poly389.ps[3] = Point(1007.25, 730.918);\n    ShapeRef *shapeRef389 = new ShapeRef(router, poly389, 389);\n    router->addShape(shapeRef389);\n\n    Polygon poly390(4);\n    poly390.ps[0] = Point(1351.25, 698.918);\n    poly390.ps[1] = Point(1351.25, 738.918);\n    poly390.ps[2] = Point(1295.25, 738.918);\n    poly390.ps[3] = Point(1295.25, 698.918);\n    ShapeRef *shapeRef390 = new ShapeRef(router, poly390, 390);\n    router->addShape(shapeRef390);\n\n    Polygon poly391(4);\n    poly391.ps[0] = Point(1321.25, 182.918);\n    poly391.ps[1] = Point(1321.25, 222.918);\n    poly391.ps[2] = Point(1265.25, 222.918);\n    poly391.ps[3] = Point(1265.25, 182.918);\n    ShapeRef *shapeRef391 = new ShapeRef(router, poly391, 391);\n    router->addShape(shapeRef391);\n\n    Polygon poly392(4);\n    poly392.ps[0] = Point(1447.25, 624.918);\n    poly392.ps[1] = Point(1447.25, 664.918);\n    poly392.ps[2] = Point(1391.25, 664.918);\n    poly392.ps[3] = Point(1391.25, 624.918);\n    ShapeRef *shapeRef392 = new ShapeRef(router, poly392, 392);\n    router->addShape(shapeRef392);\n\n    Polygon poly393(4);\n    poly393.ps[0] = Point(173.246, 226.918);\n    poly393.ps[1] = Point(173.246, 266.918);\n    poly393.ps[2] = Point(117.246, 266.918);\n    poly393.ps[3] = Point(117.246, 226.918);\n    ShapeRef *shapeRef393 = new ShapeRef(router, poly393, 393);\n    router->addShape(shapeRef393);\n\n    Polygon poly394(4);\n    poly394.ps[0] = Point(173.246, 258.918);\n    poly394.ps[1] = Point(173.246, 298.918);\n    poly394.ps[2] = Point(117.246, 298.918);\n    poly394.ps[3] = Point(117.246, 258.918);\n    ShapeRef *shapeRef394 = new ShapeRef(router, poly394, 394);\n    router->addShape(shapeRef394);\n\n    Polygon poly395(4);\n    poly395.ps[0] = Point(372.466, 14.9179);\n    poly395.ps[1] = Point(372.466, 54.9179);\n    poly395.ps[2] = Point(312.466, 54.9179);\n    poly395.ps[3] = Point(312.466, 14.9179);\n    ShapeRef *shapeRef395 = new ShapeRef(router, poly395, 395);\n    router->addShape(shapeRef395);\n\n    Polygon poly396(4);\n    poly396.ps[0] = Point(47.2456, -91.0821);\n    poly396.ps[1] = Point(47.2456, -51.0821);\n    poly396.ps[2] = Point(-12.7544, -51.0821);\n    poly396.ps[3] = Point(-12.7544, -91.0821);\n    ShapeRef *shapeRef396 = new ShapeRef(router, poly396, 396);\n    router->addShape(shapeRef396);\n\n    Polygon poly397(4);\n    poly397.ps[0] = Point(372.466, 66.9179);\n    poly397.ps[1] = Point(372.466, 106.918);\n    poly397.ps[2] = Point(312.466, 106.918);\n    poly397.ps[3] = Point(312.466, 66.9179);\n    ShapeRef *shapeRef397 = new ShapeRef(router, poly397, 397);\n    router->addShape(shapeRef397);\n\n    Polygon poly63(4);\n    poly63.ps[0] = Point(967.246, 676.918);\n    poly63.ps[1] = Point(967.246, 696.918);\n    poly63.ps[2] = Point(947.246, 696.918);\n    poly63.ps[3] = Point(947.246, 676.918);\n    ShapeRef *shapeRef63 = new ShapeRef(router, poly63, 63);\n    router->addShape(shapeRef63);\n\n    Polygon poly90(4);\n    poly90.ps[0] = Point(655.246, 472.918);\n    poly90.ps[1] = Point(655.246, 492.918);\n    poly90.ps[2] = Point(635.246, 492.918);\n    poly90.ps[3] = Point(635.246, 472.918);\n    ShapeRef *shapeRef90 = new ShapeRef(router, poly90, 90);\n    router->addShape(shapeRef90);\n\n    Polygon poly282(4);\n    poly282.ps[0] = Point(955.246, 570.918);\n    poly282.ps[1] = Point(955.246, 610.918);\n    poly282.ps[2] = Point(899.246, 610.918);\n    poly282.ps[3] = Point(899.246, 570.918);\n    ShapeRef *shapeRef282 = new ShapeRef(router, poly282, 282);\n    router->addShape(shapeRef282);\n\n    Polygon poly283(4);\n    poly283.ps[0] = Point(907.246, 602.918);\n    poly283.ps[1] = Point(907.246, 642.918);\n    poly283.ps[2] = Point(851.246, 642.918);\n    poly283.ps[3] = Point(851.246, 602.918);\n    ShapeRef *shapeRef283 = new ShapeRef(router, poly283, 283);\n    router->addShape(shapeRef283);\n\n    Polygon poly284(4);\n    poly284.ps[0] = Point(907.246, 570.918);\n    poly284.ps[1] = Point(907.246, 610.918);\n    poly284.ps[2] = Point(851.246, 610.918);\n    poly284.ps[3] = Point(851.246, 570.918);\n    ShapeRef *shapeRef284 = new ShapeRef(router, poly284, 284);\n    router->addShape(shapeRef284);\n\n    Polygon poly285(4);\n    poly285.ps[0] = Point(907.246, 494.918);\n    poly285.ps[1] = Point(907.246, 534.918);\n    poly285.ps[2] = Point(851.246, 534.918);\n    poly285.ps[3] = Point(851.246, 494.918);\n    ShapeRef *shapeRef285 = new ShapeRef(router, poly285, 285);\n    router->addShape(shapeRef285);\n\n    Polygon poly286(4);\n    poly286.ps[0] = Point(907.246, 462.918);\n    poly286.ps[1] = Point(907.246, 502.918);\n    poly286.ps[2] = Point(851.246, 502.918);\n    poly286.ps[3] = Point(851.246, 462.918);\n    ShapeRef *shapeRef286 = new ShapeRef(router, poly286, 286);\n    router->addShape(shapeRef286);\n\n    Polygon poly287(4);\n    poly287.ps[0] = Point(955.246, 398.918);\n    poly287.ps[1] = Point(955.246, 438.918);\n    poly287.ps[2] = Point(899.246, 438.918);\n    poly287.ps[3] = Point(899.246, 398.918);\n    ShapeRef *shapeRef287 = new ShapeRef(router, poly287, 287);\n    router->addShape(shapeRef287);\n\n    Polygon poly288(4);\n    poly288.ps[0] = Point(907.246, 398.918);\n    poly288.ps[1] = Point(907.246, 438.918);\n    poly288.ps[2] = Point(851.246, 438.918);\n    poly288.ps[3] = Point(851.246, 398.918);\n    ShapeRef *shapeRef288 = new ShapeRef(router, poly288, 288);\n    router->addShape(shapeRef288);\n\n    Polygon poly289(4);\n    poly289.ps[0] = Point(907.246, 366.918);\n    poly289.ps[1] = Point(907.246, 406.918);\n    poly289.ps[2] = Point(851.246, 406.918);\n    poly289.ps[3] = Point(851.246, 366.918);\n    ShapeRef *shapeRef289 = new ShapeRef(router, poly289, 289);\n    router->addShape(shapeRef289);\n\n    Polygon poly242(4);\n    poly242.ps[0] = Point(643.246, 634.918);\n    poly242.ps[1] = Point(643.246, 674.918);\n    poly242.ps[2] = Point(587.246, 674.918);\n    poly242.ps[3] = Point(587.246, 634.918);\n    ShapeRef *shapeRef242 = new ShapeRef(router, poly242, 242);\n    router->addShape(shapeRef242);\n\n    Polygon poly243(4);\n    poly243.ps[0] = Point(487.246, 634.918);\n    poly243.ps[1] = Point(487.246, 674.918);\n    poly243.ps[2] = Point(431.246, 674.918);\n    poly243.ps[3] = Point(431.246, 634.918);\n    ShapeRef *shapeRef243 = new ShapeRef(router, poly243, 243);\n    router->addShape(shapeRef243);\n\n    Polygon poly244(4);\n    poly244.ps[0] = Point(331.246, 634.918);\n    poly244.ps[1] = Point(331.246, 674.918);\n    poly244.ps[2] = Point(275.246, 674.918);\n    poly244.ps[3] = Point(275.246, 634.918);\n    ShapeRef *shapeRef244 = new ShapeRef(router, poly244, 244);\n    router->addShape(shapeRef244);\n\n    Polygon poly245(4);\n    poly245.ps[0] = Point(173.246, 602.918);\n    poly245.ps[1] = Point(173.246, 642.918);\n    poly245.ps[2] = Point(117.246, 642.918);\n    poly245.ps[3] = Point(117.246, 602.918);\n    ShapeRef *shapeRef245 = new ShapeRef(router, poly245, 245);\n    router->addShape(shapeRef245);\n\n    Polygon poly246(4);\n    poly246.ps[0] = Point(1447.25, 494.918);\n    poly246.ps[1] = Point(1447.25, 534.918);\n    poly246.ps[2] = Point(1391.25, 534.918);\n    poly246.ps[3] = Point(1391.25, 494.918);\n    ShapeRef *shapeRef246 = new ShapeRef(router, poly246, 246);\n    router->addShape(shapeRef246);\n\n    Polygon poly247(4);\n    poly247.ps[0] = Point(1159.25, 516.918);\n    poly247.ps[1] = Point(1159.25, 556.918);\n    poly247.ps[2] = Point(1103.25, 556.918);\n    poly247.ps[3] = Point(1103.25, 516.918);\n    ShapeRef *shapeRef247 = new ShapeRef(router, poly247, 247);\n    router->addShape(shapeRef247);\n\n    Polygon poly23(4);\n    poly23.ps[0] = Point(1183.25, 708.918);\n    poly23.ps[1] = Point(1183.25, 728.918);\n    poly23.ps[2] = Point(1163.25, 728.918);\n    poly23.ps[3] = Point(1163.25, 708.918);\n    ShapeRef *shapeRef23 = new ShapeRef(router, poly23, 23);\n    router->addShape(shapeRef23);\n\n    ConnRef *connRef715 = new ConnRef(router, 715);\n    ConnEnd srcPt715(Point(132, 319), 15);\n    connRef715->setSourceEndpoint(srcPt715);\n    ConnEnd dstPt715(Point(57.2456, 332.918), 15);\n    connRef715->setDestEndpoint(dstPt715);\n    connRef715->setRoutingType((ConnType)2);\n\n    ConnRef *connRef716 = new ConnRef(router, 716);\n    ConnEnd srcPt716(Point(1131.25, 622.918), 15);\n    connRef716->setSourceEndpoint(srcPt716);\n    ConnEnd dstPt716(Point(1005.25, 622.918), 15);\n    connRef716->setDestEndpoint(dstPt716);\n    connRef716->setRoutingType((ConnType)2);\n\n    ConnRef *connRef717 = new ConnRef(router, 717);\n    ConnEnd srcPt717(Point(927.246, 622.918), 15);\n    connRef717->setSourceEndpoint(srcPt717);\n    ConnEnd dstPt717(Point(849.246, 622.918), 15);\n    connRef717->setDestEndpoint(dstPt717);\n    connRef717->setRoutingType((ConnType)2);\n\n    ConnRef *connRef718 = new ConnRef(router, 718);\n    ConnEnd srcPt718(Point(771.246, 622.918), 15);\n    connRef718->setSourceEndpoint(srcPt718);\n    ConnEnd dstPt718(Point(693.246, 622.918), 15);\n    connRef718->setDestEndpoint(dstPt718);\n    connRef718->setRoutingType((ConnType)2);\n\n    ConnRef *connRef719 = new ConnRef(router, 719);\n    ConnEnd srcPt719(Point(615.246, 622.918), 15);\n    connRef719->setSourceEndpoint(srcPt719);\n    ConnEnd dstPt719(Point(537.246, 622.918), 15);\n    connRef719->setDestEndpoint(dstPt719);\n    connRef719->setRoutingType((ConnType)2);\n\n    ConnRef *connRef720 = new ConnRef(router, 720);\n    ConnEnd srcPt720(Point(459.246, 622.918), 15);\n    connRef720->setSourceEndpoint(srcPt720);\n    ConnEnd dstPt720(Point(381.246, 622.918), 15);\n    connRef720->setDestEndpoint(dstPt720);\n    connRef720->setRoutingType((ConnType)2);\n\n    ConnRef *connRef721 = new ConnRef(router, 721);\n    ConnEnd srcPt721(Point(303.246, 622.918), 15);\n    connRef721->setSourceEndpoint(srcPt721);\n    ConnEnd dstPt721(Point(225.246, 622.918), 15);\n    connRef721->setDestEndpoint(dstPt721);\n    connRef721->setRoutingType((ConnType)2);\n\n    ConnRef *connRef722 = new ConnRef(router, 722);\n    ConnEnd srcPt722(Point(145.246, 654.918), 15);\n    connRef722->setSourceEndpoint(srcPt722);\n    ConnEnd dstPt722(Point(67.2456, 654.918), 15);\n    connRef722->setDestEndpoint(dstPt722);\n    connRef722->setRoutingType((ConnType)2);\n\n    ConnRef *connRef723 = new ConnRef(router, 723);\n    ConnEnd srcPt723(Point(879.246, 718.918), 15);\n    connRef723->setSourceEndpoint(srcPt723);\n    ConnEnd dstPt723(Point(801.246, 718.918), 15);\n    connRef723->setDestEndpoint(dstPt723);\n    connRef723->setRoutingType((ConnType)2);\n\n    ConnRef *connRef724 = new ConnRef(router, 724);\n    ConnEnd srcPt724(Point(1203.25, 718.918), 15);\n    connRef724->setSourceEndpoint(srcPt724);\n    ConnEnd dstPt724(Point(1161.25, 718.918), 15);\n    connRef724->setDestEndpoint(dstPt724);\n    connRef724->setRoutingType((ConnType)2);\n\n    ConnRef *connRef725 = new ConnRef(router, 725);\n    ConnEnd srcPt725(Point(1263.25, 718.918), 15);\n    connRef725->setSourceEndpoint(srcPt725);\n    ConnEnd dstPt725(Point(1173.25, 718.918), 15);\n    connRef725->setDestEndpoint(dstPt725);\n    connRef725->setRoutingType((ConnType)2);\n\n    ConnRef *connRef726 = new ConnRef(router, 726);\n    ConnEnd srcPt726(Point(594.941, 718.918), 15);\n    connRef726->setSourceEndpoint(srcPt726);\n    ConnEnd dstPt726(Point(527.246, 718.918), 15);\n    connRef726->setDestEndpoint(dstPt726);\n    connRef726->setRoutingType((ConnType)2);\n\n    ConnRef *connRef727 = new ConnRef(router, 727);\n    ConnEnd srcPt727(Point(451.455, 718.918), 15);\n    connRef727->setSourceEndpoint(srcPt727);\n    ConnEnd dstPt727(Point(371.246, 718.918), 15);\n    connRef727->setDestEndpoint(dstPt727);\n    connRef727->setRoutingType((ConnType)2);\n\n    ConnRef *connRef728 = new ConnRef(router, 728);\n    ConnEnd srcPt728(Point(1371.25, 622.918), 15);\n    connRef728->setSourceEndpoint(srcPt728);\n    ConnEnd dstPt728(Point(1371.25, 676.918), 15);\n    connRef728->setDestEndpoint(dstPt728);\n    connRef728->setRoutingType((ConnType)2);\n\n    ConnRef *connRef729 = new ConnRef(router, 729);\n    ConnEnd srcPt729(Point(1419.25, 575.942), 15);\n    connRef729->setSourceEndpoint(srcPt729);\n    ConnEnd dstPt729(Point(1293.25, 575.942), 15);\n    connRef729->setDestEndpoint(dstPt729);\n    connRef729->setRoutingType((ConnType)2);\n\n    ConnRef *connRef730 = new ConnRef(router, 730);\n    ConnEnd srcPt730(Point(1131.25, 654.918), 15);\n    connRef730->setSourceEndpoint(srcPt730);\n    ConnEnd dstPt730(Point(1005.25, 654.918), 15);\n    connRef730->setDestEndpoint(dstPt730);\n    connRef730->setRoutingType((ConnType)2);\n\n    ConnRef *connRef731 = new ConnRef(router, 731);\n    ConnEnd srcPt731(Point(927.246, 654.918), 15);\n    connRef731->setSourceEndpoint(srcPt731);\n    ConnEnd dstPt731(Point(849.246, 654.918), 15);\n    connRef731->setDestEndpoint(dstPt731);\n    connRef731->setRoutingType((ConnType)2);\n\n    ConnRef *connRef732 = new ConnRef(router, 732);\n    ConnEnd srcPt732(Point(771.246, 654.918), 15);\n    connRef732->setSourceEndpoint(srcPt732);\n    ConnEnd dstPt732(Point(693.246, 654.918), 15);\n    connRef732->setDestEndpoint(dstPt732);\n    connRef732->setRoutingType((ConnType)2);\n\n    ConnRef *connRef733 = new ConnRef(router, 733);\n    ConnEnd srcPt733(Point(615.246, 654.918), 15);\n    connRef733->setSourceEndpoint(srcPt733);\n    ConnEnd dstPt733(Point(537.246, 654.918), 15);\n    connRef733->setDestEndpoint(dstPt733);\n    connRef733->setRoutingType((ConnType)2);\n\n    ConnRef *connRef734 = new ConnRef(router, 734);\n    ConnEnd srcPt734(Point(459.246, 654.918), 15);\n    connRef734->setSourceEndpoint(srcPt734);\n    ConnEnd dstPt734(Point(381.246, 654.918), 15);\n    connRef734->setDestEndpoint(dstPt734);\n    connRef734->setRoutingType((ConnType)2);\n\n    ConnRef *connRef735 = new ConnRef(router, 735);\n    ConnEnd srcPt735(Point(303.246, 654.918), 15);\n    connRef735->setSourceEndpoint(srcPt735);\n    ConnEnd dstPt735(Point(225.246, 654.918), 15);\n    connRef735->setDestEndpoint(dstPt735);\n    connRef735->setRoutingType((ConnType)2);\n\n    ConnRef *connRef736 = new ConnRef(router, 736);\n    ConnEnd srcPt736(Point(145.246, 622.918), 15);\n    connRef736->setSourceEndpoint(srcPt736);\n    ConnEnd dstPt736(Point(67.2456, 622.918), 15);\n    connRef736->setDestEndpoint(dstPt736);\n    connRef736->setRoutingType((ConnType)2);\n\n    ConnRef *connRef737 = new ConnRef(router, 737);\n    ConnEnd srcPt737(Point(1419.25, 514.918), 15);\n    connRef737->setSourceEndpoint(srcPt737);\n    ConnEnd dstPt737(Point(1293.25, 514.918), 15);\n    connRef737->setDestEndpoint(dstPt737);\n    connRef737->setRoutingType((ConnType)2);\n\n    ConnRef *connRef738 = new ConnRef(router, 738);\n    ConnEnd srcPt738(Point(1131.25, 536.918), 15);\n    connRef738->setSourceEndpoint(srcPt738);\n    ConnEnd dstPt738(Point(1005.25, 536.918), 15);\n    connRef738->setDestEndpoint(dstPt738);\n    connRef738->setRoutingType((ConnType)2);\n\n    ConnRef *connRef739 = new ConnRef(router, 739);\n    ConnEnd srcPt739(Point(927.246, 536.918), 15);\n    connRef739->setSourceEndpoint(srcPt739);\n    ConnEnd dstPt739(Point(849.246, 536.918), 15);\n    connRef739->setDestEndpoint(dstPt739);\n    connRef739->setRoutingType((ConnType)2);\n\n    ConnRef *connRef740 = new ConnRef(router, 740);\n    ConnEnd srcPt740(Point(771.246, 536.918), 15);\n    connRef740->setSourceEndpoint(srcPt740);\n    ConnEnd dstPt740(Point(693.246, 536.918), 15);\n    connRef740->setDestEndpoint(dstPt740);\n    connRef740->setRoutingType((ConnType)2);\n\n    ConnRef *connRef741 = new ConnRef(router, 741);\n    ConnEnd srcPt741(Point(615.246, 536.918), 15);\n    connRef741->setSourceEndpoint(srcPt741);\n    ConnEnd dstPt741(Point(537.246, 536.918), 15);\n    connRef741->setDestEndpoint(dstPt741);\n    connRef741->setRoutingType((ConnType)2);\n\n    ConnRef *connRef742 = new ConnRef(router, 742);\n    ConnEnd srcPt742(Point(459.246, 536.918), 15);\n    connRef742->setSourceEndpoint(srcPt742);\n    ConnEnd dstPt742(Point(381.246, 536.918), 15);\n    connRef742->setDestEndpoint(dstPt742);\n    connRef742->setRoutingType((ConnType)2);\n\n    ConnRef *connRef743 = new ConnRef(router, 743);\n    ConnEnd srcPt743(Point(303.246, 536.918), 15);\n    connRef743->setSourceEndpoint(srcPt743);\n    ConnEnd dstPt743(Point(225.246, 536.918), 15);\n    connRef743->setDestEndpoint(dstPt743);\n    connRef743->setRoutingType((ConnType)2);\n\n    ConnRef *connRef744 = new ConnRef(router, 744);\n    ConnEnd srcPt744(Point(145.246, 536.918), 15);\n    connRef744->setSourceEndpoint(srcPt744);\n    ConnEnd dstPt744(Point(67.2456, 536.918), 15);\n    connRef744->setDestEndpoint(dstPt744);\n    connRef744->setRoutingType((ConnType)2);\n\n    ConnRef *connRef745 = new ConnRef(router, 745);\n    ConnEnd srcPt745(Point(1293.25, 234.918), 15);\n    connRef745->setSourceEndpoint(srcPt745);\n    ConnEnd dstPt745(Point(1293.25, 288.918), 15);\n    connRef745->setDestEndpoint(dstPt745);\n    connRef745->setRoutingType((ConnType)2);\n\n    ConnRef *connRef746 = new ConnRef(router, 746);\n    ConnEnd srcPt746(Point(1083.25, 622.918), 15);\n    connRef746->setSourceEndpoint(srcPt746);\n    ConnEnd dstPt746(Point(1083.25, 676.918), 15);\n    connRef746->setDestEndpoint(dstPt746);\n    connRef746->setRoutingType((ConnType)2);\n\n    ConnRef *connRef747 = new ConnRef(router, 747);\n    ConnEnd srcPt747(Point(1419.25, 418.918), 15);\n    connRef747->setSourceEndpoint(srcPt747);\n    ConnEnd dstPt747(Point(1293.25, 418.918), 15);\n    connRef747->setDestEndpoint(dstPt747);\n    connRef747->setRoutingType((ConnType)2);\n\n    ConnRef *connRef748 = new ConnRef(router, 748);\n    ConnEnd srcPt748(Point(1419.25, 718.918), 15);\n    connRef748->setSourceEndpoint(srcPt748);\n    ConnEnd dstPt748(Point(1293.25, 718.918), 15);\n    connRef748->setDestEndpoint(dstPt748);\n    connRef748->setRoutingType((ConnType)2);\n\n    ConnRef *connRef749 = new ConnRef(router, 749);\n    ConnEnd srcPt749(Point(1479.25, 718.918), 15);\n    connRef749->setSourceEndpoint(srcPt749);\n    ConnEnd dstPt749(Point(1449.25, 718.918), 15);\n    connRef749->setDestEndpoint(dstPt749);\n    connRef749->setRoutingType((ConnType)2);\n\n    ConnRef *connRef750 = new ConnRef(router, 750);\n    ConnEnd srcPt750(Point(723.246, 718.918), 15);\n    connRef750->setSourceEndpoint(srcPt750);\n    ConnEnd dstPt750(Point(645.246, 718.918), 15);\n    connRef750->setDestEndpoint(dstPt750);\n    connRef750->setRoutingType((ConnType)2);\n\n    ConnRef *connRef751 = new ConnRef(router, 751);\n    ConnEnd srcPt751(Point(927.246, 718.918), 15);\n    connRef751->setSourceEndpoint(srcPt751);\n    ConnEnd dstPt751(Point(849.246, 718.918), 15);\n    connRef751->setDestEndpoint(dstPt751);\n    connRef751->setRoutingType((ConnType)2);\n\n    ConnRef *connRef752 = new ConnRef(router, 752);\n    ConnEnd srcPt752(Point(145.246, 32.9179), 15);\n    connRef752->setSourceEndpoint(srcPt752);\n    ConnEnd dstPt752(Point(67.2456, 32.9179), 15);\n    connRef752->setDestEndpoint(dstPt752);\n    connRef752->setRoutingType((ConnType)2);\n\n    ConnRef *connRef753 = new ConnRef(router, 753);\n    ConnEnd srcPt753(Point(145.246, 310.918), 15);\n    connRef753->setSourceEndpoint(srcPt753);\n    ConnEnd dstPt753(Point(67.2456, 310.918), 15);\n    connRef753->setDestEndpoint(dstPt753);\n    connRef753->setRoutingType((ConnType)2);\n\n    ConnRef *connRef754 = new ConnRef(router, 754);\n    ConnEnd srcPt754(Point(1005.25, 234.918), 15);\n    connRef754->setSourceEndpoint(srcPt754);\n    ConnEnd dstPt754(Point(1005.25, 288.918), 15);\n    connRef754->setDestEndpoint(dstPt754);\n    connRef754->setRoutingType((ConnType)2);\n\n    ConnRef *connRef755 = new ConnRef(router, 755);\n    ConnEnd srcPt755(Point(849.246, 234.918), 15);\n    connRef755->setSourceEndpoint(srcPt755);\n    ConnEnd dstPt755(Point(849.246, 288.918), 15);\n    connRef755->setDestEndpoint(dstPt755);\n    connRef755->setRoutingType((ConnType)2);\n\n    ConnRef *connRef756 = new ConnRef(router, 756);\n    ConnEnd srcPt756(Point(693.246, 234.918), 15);\n    connRef756->setSourceEndpoint(srcPt756);\n    ConnEnd dstPt756(Point(693.246, 288.918), 15);\n    connRef756->setDestEndpoint(dstPt756);\n    connRef756->setRoutingType((ConnType)2);\n\n    ConnRef *connRef757 = new ConnRef(router, 757);\n    ConnEnd srcPt757(Point(537.246, 234.918), 15);\n    connRef757->setSourceEndpoint(srcPt757);\n    ConnEnd dstPt757(Point(537.246, 288.918), 15);\n    connRef757->setDestEndpoint(dstPt757);\n    connRef757->setRoutingType((ConnType)2);\n\n    ConnRef *connRef758 = new ConnRef(router, 758);\n    ConnEnd srcPt758(Point(381.246, 234.918), 15);\n    connRef758->setSourceEndpoint(srcPt758);\n    ConnEnd dstPt758(Point(381.246, 288.918), 15);\n    connRef758->setDestEndpoint(dstPt758);\n    connRef758->setRoutingType((ConnType)2);\n\n    ConnRef *connRef759 = new ConnRef(router, 759);\n    ConnEnd srcPt759(Point(303.246, 288.918), 15);\n    connRef759->setSourceEndpoint(srcPt759);\n    ConnEnd dstPt759(Point(225.246, 288.918), 15);\n    connRef759->setDestEndpoint(dstPt759);\n    connRef759->setRoutingType((ConnType)2);\n\n    ConnRef *connRef760 = new ConnRef(router, 760);\n    ConnEnd srcPt760(Point(1131.25, 718.918), 15);\n    connRef760->setSourceEndpoint(srcPt760);\n    ConnEnd dstPt760(Point(1005.25, 718.918), 15);\n    connRef760->setDestEndpoint(dstPt760);\n    connRef760->setRoutingType((ConnType)2);\n\n    ConnRef *connRef761 = new ConnRef(router, 761);\n    ConnEnd srcPt761(Point(1035.25, 686.918), 15);\n    connRef761->setSourceEndpoint(srcPt761);\n    ConnEnd dstPt761(Point(957.246, 686.918), 15);\n    connRef761->setDestEndpoint(dstPt761);\n    connRef761->setRoutingType((ConnType)2);\n\n    ConnRef *connRef762 = new ConnRef(router, 762);\n    ConnEnd srcPt762(Point(1131.25, 590.918), 15);\n    connRef762->setSourceEndpoint(srcPt762);\n    ConnEnd dstPt762(Point(1005.25, 590.918), 15);\n    connRef762->setDestEndpoint(dstPt762);\n    connRef762->setRoutingType((ConnType)2);\n\n    ConnRef *connRef763 = new ConnRef(router, 763);\n    ConnEnd srcPt763(Point(1035.25, 622.918), 15);\n    connRef763->setSourceEndpoint(srcPt763);\n    ConnEnd dstPt763(Point(957.246, 622.918), 15);\n    connRef763->setDestEndpoint(dstPt763);\n    connRef763->setRoutingType((ConnType)2);\n\n    ConnRef *connRef764 = new ConnRef(router, 764);\n    ConnEnd srcPt764(Point(1035.25, 590.918), 15);\n    connRef764->setSourceEndpoint(srcPt764);\n    ConnEnd dstPt764(Point(957.246, 590.918), 15);\n    connRef764->setDestEndpoint(dstPt764);\n    connRef764->setRoutingType((ConnType)2);\n\n    ConnRef *connRef765 = new ConnRef(router, 765);\n    ConnEnd srcPt765(Point(1035.25, 514.918), 15);\n    connRef765->setSourceEndpoint(srcPt765);\n    ConnEnd dstPt765(Point(957.246, 514.918), 15);\n    connRef765->setDestEndpoint(dstPt765);\n    connRef765->setRoutingType((ConnType)2);\n\n    ConnRef *connRef766 = new ConnRef(router, 766);\n    ConnEnd srcPt766(Point(1035.25, 482.918), 15);\n    connRef766->setSourceEndpoint(srcPt766);\n    ConnEnd dstPt766(Point(957.246, 482.918), 15);\n    connRef766->setDestEndpoint(dstPt766);\n    connRef766->setRoutingType((ConnType)2);\n\n    ConnRef *connRef767 = new ConnRef(router, 767);\n    ConnEnd srcPt767(Point(1131.25, 418.918), 15);\n    connRef767->setSourceEndpoint(srcPt767);\n    ConnEnd dstPt767(Point(1005.25, 418.918), 15);\n    connRef767->setDestEndpoint(dstPt767);\n    connRef767->setRoutingType((ConnType)2);\n\n    ConnRef *connRef768 = new ConnRef(router, 768);\n    ConnEnd srcPt768(Point(1035.25, 418.918), 15);\n    connRef768->setSourceEndpoint(srcPt768);\n    ConnEnd dstPt768(Point(957.246, 418.918), 15);\n    connRef768->setDestEndpoint(dstPt768);\n    connRef768->setRoutingType((ConnType)2);\n\n    ConnRef *connRef769 = new ConnRef(router, 769);\n    ConnEnd srcPt769(Point(1035.25, 386.918), 15);\n    connRef769->setSourceEndpoint(srcPt769);\n    ConnEnd dstPt769(Point(957.246, 386.918), 15);\n    connRef769->setDestEndpoint(dstPt769);\n    connRef769->setRoutingType((ConnType)2);\n\n    ConnRef *connRef770 = new ConnRef(router, 770);\n    ConnEnd srcPt770(Point(1005.25, 202.918), 15);\n    connRef770->setSourceEndpoint(srcPt770);\n    ConnEnd dstPt770(Point(1005.25, 256.918), 15);\n    connRef770->setDestEndpoint(dstPt770);\n    connRef770->setRoutingType((ConnType)2);\n\n    ConnRef *connRef771 = new ConnRef(router, 771);\n    ConnEnd srcPt771(Point(957.246, 192.918), 15);\n    connRef771->setSourceEndpoint(srcPt771);\n    ConnEnd dstPt771(Point(957.246, 278.918), 15);\n    connRef771->setDestEndpoint(dstPt771);\n    connRef771->setRoutingType((ConnType)2);\n\n    ConnRef *connRef772 = new ConnRef(router, 772);\n    ConnEnd srcPt772(Point(957.246, 128.918), 15);\n    connRef772->setSourceEndpoint(srcPt772);\n    ConnEnd dstPt772(Point(957.246, 246.918), 15);\n    connRef772->setDestEndpoint(dstPt772);\n    connRef772->setRoutingType((ConnType)2);\n\n    ConnRef *connRef773 = new ConnRef(router, 773);\n    ConnEnd srcPt773(Point(927.246, 590.918), 15);\n    connRef773->setSourceEndpoint(srcPt773);\n    ConnEnd dstPt773(Point(849.246, 590.918), 15);\n    connRef773->setDestEndpoint(dstPt773);\n    connRef773->setRoutingType((ConnType)2);\n\n    ConnRef *connRef774 = new ConnRef(router, 774);\n    ConnEnd srcPt774(Point(879.246, 622.918), 15);\n    connRef774->setSourceEndpoint(srcPt774);\n    ConnEnd dstPt774(Point(801.246, 622.918), 15);\n    connRef774->setDestEndpoint(dstPt774);\n    connRef774->setRoutingType((ConnType)2);\n\n    ConnRef *connRef775 = new ConnRef(router, 775);\n    ConnEnd srcPt775(Point(879.246, 590.918), 15);\n    connRef775->setSourceEndpoint(srcPt775);\n    ConnEnd dstPt775(Point(801.246, 590.918), 15);\n    connRef775->setDestEndpoint(dstPt775);\n    connRef775->setRoutingType((ConnType)2);\n\n    ConnRef *connRef776 = new ConnRef(router, 776);\n    ConnEnd srcPt776(Point(879.246, 514.918), 15);\n    connRef776->setSourceEndpoint(srcPt776);\n    ConnEnd dstPt776(Point(801.246, 514.918), 15);\n    connRef776->setDestEndpoint(dstPt776);\n    connRef776->setRoutingType((ConnType)2);\n\n    ConnRef *connRef777 = new ConnRef(router, 777);\n    ConnEnd srcPt777(Point(879.246, 482.918), 15);\n    connRef777->setSourceEndpoint(srcPt777);\n    ConnEnd dstPt777(Point(801.246, 482.918), 15);\n    connRef777->setDestEndpoint(dstPt777);\n    connRef777->setRoutingType((ConnType)2);\n\n    ConnRef *connRef778 = new ConnRef(router, 778);\n    ConnEnd srcPt778(Point(927.246, 418.918), 15);\n    connRef778->setSourceEndpoint(srcPt778);\n    ConnEnd dstPt778(Point(849.246, 418.918), 15);\n    connRef778->setDestEndpoint(dstPt778);\n    connRef778->setRoutingType((ConnType)2);\n\n    ConnRef *connRef779 = new ConnRef(router, 779);\n    ConnEnd srcPt779(Point(879.246, 418.918), 15);\n    connRef779->setSourceEndpoint(srcPt779);\n    ConnEnd dstPt779(Point(801.246, 418.918), 15);\n    connRef779->setDestEndpoint(dstPt779);\n    connRef779->setRoutingType((ConnType)2);\n\n    ConnRef *connRef780 = new ConnRef(router, 780);\n    ConnEnd srcPt780(Point(879.246, 386.918), 15);\n    connRef780->setSourceEndpoint(srcPt780);\n    ConnEnd dstPt780(Point(801.246, 386.918), 15);\n    connRef780->setDestEndpoint(dstPt780);\n    connRef780->setRoutingType((ConnType)2);\n\n    ConnRef *connRef781 = new ConnRef(router, 781);\n    ConnEnd srcPt781(Point(849.246, 202.918), 15);\n    connRef781->setSourceEndpoint(srcPt781);\n    ConnEnd dstPt781(Point(849.246, 256.918), 15);\n    connRef781->setDestEndpoint(dstPt781);\n    connRef781->setRoutingType((ConnType)2);\n\n    ConnRef *connRef782 = new ConnRef(router, 782);\n    ConnEnd srcPt782(Point(801.246, 192.918), 15);\n    connRef782->setSourceEndpoint(srcPt782);\n    ConnEnd dstPt782(Point(801.246, 278.918), 15);\n    connRef782->setDestEndpoint(dstPt782);\n    connRef782->setRoutingType((ConnType)2);\n\n    ConnRef *connRef783 = new ConnRef(router, 783);\n    ConnEnd srcPt783(Point(801.246, 128.918), 15);\n    connRef783->setSourceEndpoint(srcPt783);\n    ConnEnd dstPt783(Point(801.246, 246.918), 15);\n    connRef783->setDestEndpoint(dstPt783);\n    connRef783->setRoutingType((ConnType)2);\n\n    ConnRef *connRef784 = new ConnRef(router, 784);\n    ConnEnd srcPt784(Point(771.246, 590.918), 15);\n    connRef784->setSourceEndpoint(srcPt784);\n    ConnEnd dstPt784(Point(693.246, 590.918), 15);\n    connRef784->setDestEndpoint(dstPt784);\n    connRef784->setRoutingType((ConnType)2);\n\n    ConnRef *connRef785 = new ConnRef(router, 785);\n    ConnEnd srcPt785(Point(723.246, 622.918), 15);\n    connRef785->setSourceEndpoint(srcPt785);\n    ConnEnd dstPt785(Point(645.246, 622.918), 15);\n    connRef785->setDestEndpoint(dstPt785);\n    connRef785->setRoutingType((ConnType)2);\n\n    ConnRef *connRef786 = new ConnRef(router, 786);\n    ConnEnd srcPt786(Point(723.246, 590.918), 15);\n    connRef786->setSourceEndpoint(srcPt786);\n    ConnEnd dstPt786(Point(645.246, 590.918), 15);\n    connRef786->setDestEndpoint(dstPt786);\n    connRef786->setRoutingType((ConnType)2);\n\n    ConnRef *connRef787 = new ConnRef(router, 787);\n    ConnEnd srcPt787(Point(723.246, 514.918), 15);\n    connRef787->setSourceEndpoint(srcPt787);\n    ConnEnd dstPt787(Point(645.246, 514.918), 15);\n    connRef787->setDestEndpoint(dstPt787);\n    connRef787->setRoutingType((ConnType)2);\n\n    ConnRef *connRef788 = new ConnRef(router, 788);\n    ConnEnd srcPt788(Point(723.246, 482.918), 15);\n    connRef788->setSourceEndpoint(srcPt788);\n    ConnEnd dstPt788(Point(645.246, 482.918), 15);\n    connRef788->setDestEndpoint(dstPt788);\n    connRef788->setRoutingType((ConnType)2);\n\n    ConnRef *connRef789 = new ConnRef(router, 789);\n    ConnEnd srcPt789(Point(771.246, 418.918), 15);\n    connRef789->setSourceEndpoint(srcPt789);\n    ConnEnd dstPt789(Point(693.246, 418.918), 15);\n    connRef789->setDestEndpoint(dstPt789);\n    connRef789->setRoutingType((ConnType)2);\n\n    ConnRef *connRef790 = new ConnRef(router, 790);\n    ConnEnd srcPt790(Point(723.246, 418.918), 15);\n    connRef790->setSourceEndpoint(srcPt790);\n    ConnEnd dstPt790(Point(645.246, 418.918), 15);\n    connRef790->setDestEndpoint(dstPt790);\n    connRef790->setRoutingType((ConnType)2);\n\n    ConnRef *connRef791 = new ConnRef(router, 791);\n    ConnEnd srcPt791(Point(723.246, 386.918), 15);\n    connRef791->setSourceEndpoint(srcPt791);\n    ConnEnd dstPt791(Point(645.246, 386.918), 15);\n    connRef791->setDestEndpoint(dstPt791);\n    connRef791->setRoutingType((ConnType)2);\n\n    ConnRef *connRef792 = new ConnRef(router, 792);\n    ConnEnd srcPt792(Point(693.246, 202.918), 15);\n    connRef792->setSourceEndpoint(srcPt792);\n    ConnEnd dstPt792(Point(693.246, 256.918), 15);\n    connRef792->setDestEndpoint(dstPt792);\n    connRef792->setRoutingType((ConnType)2);\n\n    ConnRef *connRef793 = new ConnRef(router, 793);\n    ConnEnd srcPt793(Point(645.246, 192.918), 15);\n    connRef793->setSourceEndpoint(srcPt793);\n    ConnEnd dstPt793(Point(645.246, 278.918), 15);\n    connRef793->setDestEndpoint(dstPt793);\n    connRef793->setRoutingType((ConnType)2);\n\n    ConnRef *connRef794 = new ConnRef(router, 794);\n    ConnEnd srcPt794(Point(645.246, 128.918), 15);\n    connRef794->setSourceEndpoint(srcPt794);\n    ConnEnd dstPt794(Point(645.246, 246.918), 15);\n    connRef794->setDestEndpoint(dstPt794);\n    connRef794->setRoutingType((ConnType)2);\n\n    ConnRef *connRef795 = new ConnRef(router, 795);\n    ConnEnd srcPt795(Point(615.246, 590.918), 15);\n    connRef795->setSourceEndpoint(srcPt795);\n    ConnEnd dstPt795(Point(537.246, 590.918), 15);\n    connRef795->setDestEndpoint(dstPt795);\n    connRef795->setRoutingType((ConnType)2);\n\n    ConnRef *connRef796 = new ConnRef(router, 796);\n    ConnEnd srcPt796(Point(567.246, 622.918), 15);\n    connRef796->setSourceEndpoint(srcPt796);\n    ConnEnd dstPt796(Point(489.246, 622.918), 15);\n    connRef796->setDestEndpoint(dstPt796);\n    connRef796->setRoutingType((ConnType)2);\n\n    ConnRef *connRef797 = new ConnRef(router, 797);\n    ConnEnd srcPt797(Point(567.246, 590.918), 15);\n    connRef797->setSourceEndpoint(srcPt797);\n    ConnEnd dstPt797(Point(489.246, 590.918), 15);\n    connRef797->setDestEndpoint(dstPt797);\n    connRef797->setRoutingType((ConnType)2);\n\n    ConnRef *connRef798 = new ConnRef(router, 798);\n    ConnEnd srcPt798(Point(615.246, 486.951), 15);\n    connRef798->setSourceEndpoint(srcPt798);\n    ConnEnd dstPt798(Point(537.246, 486.951), 15);\n    connRef798->setDestEndpoint(dstPt798);\n    connRef798->setRoutingType((ConnType)2);\n\n    ConnRef *connRef799 = new ConnRef(router, 799);\n    ConnEnd srcPt799(Point(567.246, 514.918), 15);\n    connRef799->setSourceEndpoint(srcPt799);\n    ConnEnd dstPt799(Point(489.246, 514.918), 15);\n    connRef799->setDestEndpoint(dstPt799);\n    connRef799->setRoutingType((ConnType)2);\n\n    ConnRef *connRef800 = new ConnRef(router, 800);\n    ConnEnd srcPt800(Point(567.246, 482.918), 15);\n    connRef800->setSourceEndpoint(srcPt800);\n    ConnEnd dstPt800(Point(489.246, 482.918), 15);\n    connRef800->setDestEndpoint(dstPt800);\n    connRef800->setRoutingType((ConnType)2);\n\n    ConnRef *connRef801 = new ConnRef(router, 801);\n    ConnEnd srcPt801(Point(615.246, 418.918), 15);\n    connRef801->setSourceEndpoint(srcPt801);\n    ConnEnd dstPt801(Point(537.246, 418.918), 15);\n    connRef801->setDestEndpoint(dstPt801);\n    connRef801->setRoutingType((ConnType)2);\n\n    ConnRef *connRef802 = new ConnRef(router, 802);\n    ConnEnd srcPt802(Point(567.246, 418.918), 15);\n    connRef802->setSourceEndpoint(srcPt802);\n    ConnEnd dstPt802(Point(489.246, 418.918), 15);\n    connRef802->setDestEndpoint(dstPt802);\n    connRef802->setRoutingType((ConnType)2);\n\n    ConnRef *connRef803 = new ConnRef(router, 803);\n    ConnEnd srcPt803(Point(567.246, 386.918), 15);\n    connRef803->setSourceEndpoint(srcPt803);\n    ConnEnd dstPt803(Point(489.246, 386.918), 15);\n    connRef803->setDestEndpoint(dstPt803);\n    connRef803->setRoutingType((ConnType)2);\n\n    ConnRef *connRef804 = new ConnRef(router, 804);\n    ConnEnd srcPt804(Point(537.246, 202.918), 15);\n    connRef804->setSourceEndpoint(srcPt804);\n    ConnEnd dstPt804(Point(537.246, 256.918), 15);\n    connRef804->setDestEndpoint(dstPt804);\n    connRef804->setRoutingType((ConnType)2);\n\n    ConnRef *connRef805 = new ConnRef(router, 805);\n    ConnEnd srcPt805(Point(489.246, 192.918), 15);\n    connRef805->setSourceEndpoint(srcPt805);\n    ConnEnd dstPt805(Point(489.246, 278.918), 15);\n    connRef805->setDestEndpoint(dstPt805);\n    connRef805->setRoutingType((ConnType)2);\n\n    ConnRef *connRef806 = new ConnRef(router, 806);\n    ConnEnd srcPt806(Point(489.246, 128.918), 15);\n    connRef806->setSourceEndpoint(srcPt806);\n    ConnEnd dstPt806(Point(489.246, 246.918), 15);\n    connRef806->setDestEndpoint(dstPt806);\n    connRef806->setRoutingType((ConnType)2);\n\n    ConnRef *connRef807 = new ConnRef(router, 807);\n    ConnEnd srcPt807(Point(459.246, 590.918), 15);\n    connRef807->setSourceEndpoint(srcPt807);\n    ConnEnd dstPt807(Point(381.246, 590.918), 15);\n    connRef807->setDestEndpoint(dstPt807);\n    connRef807->setRoutingType((ConnType)2);\n\n    ConnRef *connRef808 = new ConnRef(router, 808);\n    ConnEnd srcPt808(Point(411.246, 622.918), 15);\n    connRef808->setSourceEndpoint(srcPt808);\n    ConnEnd dstPt808(Point(333.246, 622.918), 15);\n    connRef808->setDestEndpoint(dstPt808);\n    connRef808->setRoutingType((ConnType)2);\n\n    ConnRef *connRef809 = new ConnRef(router, 809);\n    ConnEnd srcPt809(Point(411.246, 590.918), 15);\n    connRef809->setSourceEndpoint(srcPt809);\n    ConnEnd dstPt809(Point(333.246, 590.918), 15);\n    connRef809->setDestEndpoint(dstPt809);\n    connRef809->setRoutingType((ConnType)2);\n\n    ConnRef *connRef810 = new ConnRef(router, 810);\n    ConnEnd srcPt810(Point(411.246, 514.918), 15);\n    connRef810->setSourceEndpoint(srcPt810);\n    ConnEnd dstPt810(Point(333.246, 514.918), 15);\n    connRef810->setDestEndpoint(dstPt810);\n    connRef810->setRoutingType((ConnType)2);\n\n    ConnRef *connRef811 = new ConnRef(router, 811);\n    ConnEnd srcPt811(Point(411.246, 482.918), 15);\n    connRef811->setSourceEndpoint(srcPt811);\n    ConnEnd dstPt811(Point(333.246, 482.918), 15);\n    connRef811->setDestEndpoint(dstPt811);\n    connRef811->setRoutingType((ConnType)2);\n\n    ConnRef *connRef812 = new ConnRef(router, 812);\n    ConnEnd srcPt812(Point(459.246, 418.918), 15);\n    connRef812->setSourceEndpoint(srcPt812);\n    ConnEnd dstPt812(Point(381.246, 418.918), 15);\n    connRef812->setDestEndpoint(dstPt812);\n    connRef812->setRoutingType((ConnType)2);\n\n    ConnRef *connRef813 = new ConnRef(router, 813);\n    ConnEnd srcPt813(Point(411.246, 418.918), 15);\n    connRef813->setSourceEndpoint(srcPt813);\n    ConnEnd dstPt813(Point(333.246, 418.918), 15);\n    connRef813->setDestEndpoint(dstPt813);\n    connRef813->setRoutingType((ConnType)2);\n\n    ConnRef *connRef814 = new ConnRef(router, 814);\n    ConnEnd srcPt814(Point(411.246, 386.918), 15);\n    connRef814->setSourceEndpoint(srcPt814);\n    ConnEnd dstPt814(Point(333.246, 386.918), 15);\n    connRef814->setDestEndpoint(dstPt814);\n    connRef814->setRoutingType((ConnType)2);\n\n    ConnRef *connRef815 = new ConnRef(router, 815);\n    ConnEnd srcPt815(Point(381.246, 202.918), 15);\n    connRef815->setSourceEndpoint(srcPt815);\n    ConnEnd dstPt815(Point(381.246, 256.918), 15);\n    connRef815->setDestEndpoint(dstPt815);\n    connRef815->setRoutingType((ConnType)2);\n\n    ConnRef *connRef816 = new ConnRef(router, 816);\n    ConnEnd srcPt816(Point(333.246, 192.918), 15);\n    connRef816->setSourceEndpoint(srcPt816);\n    ConnEnd dstPt816(Point(333.246, 278.918), 15);\n    connRef816->setDestEndpoint(dstPt816);\n    connRef816->setRoutingType((ConnType)2);\n\n    ConnRef *connRef817 = new ConnRef(router, 817);\n    ConnEnd srcPt817(Point(333.246, 128.918), 15);\n    connRef817->setSourceEndpoint(srcPt817);\n    ConnEnd dstPt817(Point(333.246, 246.918), 15);\n    connRef817->setDestEndpoint(dstPt817);\n    connRef817->setRoutingType((ConnType)2);\n\n    ConnRef *connRef818 = new ConnRef(router, 818);\n    ConnEnd srcPt818(Point(303.246, 590.918), 15);\n    connRef818->setSourceEndpoint(srcPt818);\n    ConnEnd dstPt818(Point(225.246, 590.918), 15);\n    connRef818->setDestEndpoint(dstPt818);\n    connRef818->setRoutingType((ConnType)2);\n\n    ConnRef *connRef819 = new ConnRef(router, 819);\n    ConnEnd srcPt819(Point(255.246, 622.918), 15);\n    connRef819->setSourceEndpoint(srcPt819);\n    ConnEnd dstPt819(Point(193.246, 622.918), 15);\n    connRef819->setDestEndpoint(dstPt819);\n    connRef819->setRoutingType((ConnType)2);\n\n    ConnRef *connRef820 = new ConnRef(router, 820);\n    ConnEnd srcPt820(Point(255.246, 590.918), 15);\n    connRef820->setSourceEndpoint(srcPt820);\n    ConnEnd dstPt820(Point(193.246, 590.918), 15);\n    connRef820->setDestEndpoint(dstPt820);\n    connRef820->setRoutingType((ConnType)2);\n\n    ConnRef *connRef821 = new ConnRef(router, 821);\n    ConnEnd srcPt821(Point(255.246, 514.918), 15);\n    connRef821->setSourceEndpoint(srcPt821);\n    ConnEnd dstPt821(Point(193.246, 514.918), 15);\n    connRef821->setDestEndpoint(dstPt821);\n    connRef821->setRoutingType((ConnType)2);\n\n    ConnRef *connRef822 = new ConnRef(router, 822);\n    ConnEnd srcPt822(Point(255.246, 482.918), 15);\n    connRef822->setSourceEndpoint(srcPt822);\n    ConnEnd dstPt822(Point(193.246, 482.918), 15);\n    connRef822->setDestEndpoint(dstPt822);\n    connRef822->setRoutingType((ConnType)2);\n\n    ConnRef *connRef823 = new ConnRef(router, 823);\n    ConnEnd srcPt823(Point(303.246, 418.918), 15);\n    connRef823->setSourceEndpoint(srcPt823);\n    ConnEnd dstPt823(Point(225.246, 418.918), 15);\n    connRef823->setDestEndpoint(dstPt823);\n    connRef823->setRoutingType((ConnType)2);\n\n    ConnRef *connRef824 = new ConnRef(router, 824);\n    ConnEnd srcPt824(Point(255.246, 418.918), 15);\n    connRef824->setSourceEndpoint(srcPt824);\n    ConnEnd dstPt824(Point(193.246, 418.918), 15);\n    connRef824->setDestEndpoint(dstPt824);\n    connRef824->setRoutingType((ConnType)2);\n\n    ConnRef *connRef825 = new ConnRef(router, 825);\n    ConnEnd srcPt825(Point(255.246, 386.918), 15);\n    connRef825->setSourceEndpoint(srcPt825);\n    ConnEnd dstPt825(Point(193.246, 386.918), 15);\n    connRef825->setDestEndpoint(dstPt825);\n    connRef825->setRoutingType((ConnType)2);\n\n    ConnRef *connRef826 = new ConnRef(router, 826);\n    ConnEnd srcPt826(Point(303.246, 256.918), 15);\n    connRef826->setSourceEndpoint(srcPt826);\n    ConnEnd dstPt826(Point(225.246, 256.918), 15);\n    connRef826->setDestEndpoint(dstPt826);\n    connRef826->setRoutingType((ConnType)2);\n\n    ConnRef *connRef827 = new ConnRef(router, 827);\n    ConnEnd srcPt827(Point(193.246, 128.918), 15);\n    connRef827->setSourceEndpoint(srcPt827);\n    ConnEnd dstPt827(Point(193.246, 246.918), 15);\n    connRef827->setDestEndpoint(dstPt827);\n    connRef827->setRoutingType((ConnType)2);\n\n    ConnRef *connRef828 = new ConnRef(router, 828);\n    ConnEnd srcPt828(Point(193.246, 192.918), 15);\n    connRef828->setSourceEndpoint(srcPt828);\n    ConnEnd dstPt828(Point(193.246, 278.918), 15);\n    connRef828->setDestEndpoint(dstPt828);\n    connRef828->setRoutingType((ConnType)2);\n\n    ConnRef *connRef829 = new ConnRef(router, 829);\n    ConnEnd srcPt829(Point(145.246, 590.918), 15);\n    connRef829->setSourceEndpoint(srcPt829);\n    ConnEnd dstPt829(Point(67.2456, 590.918), 15);\n    connRef829->setDestEndpoint(dstPt829);\n    connRef829->setRoutingType((ConnType)2);\n\n    ConnRef *connRef830 = new ConnRef(router, 830);\n    ConnEnd srcPt830(Point(97.2456, 622.918), 15);\n    connRef830->setSourceEndpoint(srcPt830);\n    ConnEnd dstPt830(Point(17.2456, 622.918), 15);\n    connRef830->setDestEndpoint(dstPt830);\n    connRef830->setRoutingType((ConnType)2);\n\n    ConnRef *connRef831 = new ConnRef(router, 831);\n    ConnEnd srcPt831(Point(97.2456, 590.918), 15);\n    connRef831->setSourceEndpoint(srcPt831);\n    ConnEnd dstPt831(Point(17.2456, 590.918), 15);\n    connRef831->setDestEndpoint(dstPt831);\n    connRef831->setRoutingType((ConnType)2);\n\n    ConnRef *connRef832 = new ConnRef(router, 832);\n    ConnEnd srcPt832(Point(97.2456, 514.918), 15);\n    connRef832->setSourceEndpoint(srcPt832);\n    ConnEnd dstPt832(Point(17.2456, 514.918), 15);\n    connRef832->setDestEndpoint(dstPt832);\n    connRef832->setRoutingType((ConnType)2);\n\n    ConnRef *connRef833 = new ConnRef(router, 833);\n    ConnEnd srcPt833(Point(97.2456, 482.918), 15);\n    connRef833->setSourceEndpoint(srcPt833);\n    ConnEnd dstPt833(Point(17.2456, 482.918), 15);\n    connRef833->setDestEndpoint(dstPt833);\n    connRef833->setRoutingType((ConnType)2);\n\n    ConnRef *connRef834 = new ConnRef(router, 834);\n    ConnEnd srcPt834(Point(145.246, 418.918), 15);\n    connRef834->setSourceEndpoint(srcPt834);\n    ConnEnd dstPt834(Point(67.2456, 418.918), 15);\n    connRef834->setDestEndpoint(dstPt834);\n    connRef834->setRoutingType((ConnType)2);\n\n    ConnRef *connRef835 = new ConnRef(router, 835);\n    ConnEnd srcPt835(Point(97.2456, 418.918), 15);\n    connRef835->setSourceEndpoint(srcPt835);\n    ConnEnd dstPt835(Point(17.2456, 418.918), 15);\n    connRef835->setDestEndpoint(dstPt835);\n    connRef835->setRoutingType((ConnType)2);\n\n    ConnRef *connRef836 = new ConnRef(router, 836);\n    ConnEnd srcPt836(Point(97.2456, 386.918), 15);\n    connRef836->setSourceEndpoint(srcPt836);\n    ConnEnd dstPt836(Point(17.2456, 386.918), 15);\n    connRef836->setDestEndpoint(dstPt836);\n    connRef836->setRoutingType((ConnType)2);\n\n    ConnRef *connRef837 = new ConnRef(router, 837);\n    ConnEnd srcPt837(Point(17.2456, 192.918), 15);\n    connRef837->setSourceEndpoint(srcPt837);\n    ConnEnd dstPt837(Point(17.2456, 278.918), 15);\n    connRef837->setDestEndpoint(dstPt837);\n    connRef837->setRoutingType((ConnType)2);\n\n    ConnRef *connRef838 = new ConnRef(router, 838);\n    ConnEnd srcPt838(Point(17.2456, 128.918), 15);\n    connRef838->setSourceEndpoint(srcPt838);\n    ConnEnd dstPt838(Point(17.2456, 246.918), 15);\n    connRef838->setDestEndpoint(dstPt838);\n    connRef838->setRoutingType((ConnType)2);\n\n    ConnRef *connRef839 = new ConnRef(router, 839);\n    ConnEnd srcPt839(Point(285.246, 170.918), 15);\n    connRef839->setSourceEndpoint(srcPt839);\n    ConnEnd dstPt839(Point(244.976, 170.918), 15);\n    connRef839->setDestEndpoint(dstPt839);\n    connRef839->setRoutingType((ConnType)2);\n\n    ConnRef *connRef840 = new ConnRef(router, 840);\n    ConnEnd srcPt840(Point(237.246, 86.9179), 15);\n    connRef840->setSourceEndpoint(srcPt840);\n    ConnEnd dstPt840(Point(145.246, 86.9179), 15);\n    connRef840->setDestEndpoint(dstPt840);\n    connRef840->setRoutingType((ConnType)2);\n\n    ConnRef *connRef841 = new ConnRef(router, 841);\n    ConnEnd srcPt841(Point(237.246, 54.9179), 15);\n    connRef841->setSourceEndpoint(srcPt841);\n    ConnEnd dstPt841(Point(145.246, 54.9179), 15);\n    connRef841->setDestEndpoint(dstPt841);\n    connRef841->setRoutingType((ConnType)2);\n\n    ConnRef *connRef842 = new ConnRef(router, 842);\n    ConnEnd srcPt842(Point(97.2456, 170.918), 15);\n    connRef842->setSourceEndpoint(srcPt842);\n    ConnEnd dstPt842(Point(17.2456, 170.918), 15);\n    connRef842->setDestEndpoint(dstPt842);\n    connRef842->setRoutingType((ConnType)2);\n\n    ConnRef *connRef843 = new ConnRef(router, 843);\n    ConnEnd srcPt843(Point(97.2456, 32.9179), 15);\n    connRef843->setSourceEndpoint(srcPt843);\n    ConnEnd dstPt843(Point(17.2456, 32.9179), 15);\n    connRef843->setDestEndpoint(dstPt843);\n    connRef843->setRoutingType((ConnType)2);\n\n    ConnRef *connRef844 = new ConnRef(router, 844);\n    ConnEnd srcPt844(Point(97.2456, 0.917947), 15);\n    connRef844->setSourceEndpoint(srcPt844);\n    ConnEnd dstPt844(Point(17.2456, 0.917947), 15);\n    connRef844->setDestEndpoint(dstPt844);\n    connRef844->setRoutingType((ConnType)2);\n\n    ConnRef *connRef845 = new ConnRef(router, 845);\n    ConnEnd srcPt845(Point(380.962, -29.0821), 15);\n    connRef845->setSourceEndpoint(srcPt845);\n    ConnEnd dstPt845(Point(319.219, -29.0821), 15);\n    connRef845->setDestEndpoint(dstPt845);\n    connRef845->setRoutingType((ConnType)2);\n\n    ConnRef *connRef846 = new ConnRef(router, 846);\n    ConnEnd srcPt846(Point(279.219, -29.0821), 15);\n    connRef846->setSourceEndpoint(srcPt846);\n    ConnEnd dstPt846(Point(197.246, -29.0821), 15);\n    connRef846->setDestEndpoint(dstPt846);\n    connRef846->setRoutingType((ConnType)2);\n\n    ConnRef *connRef847 = new ConnRef(router, 847);\n    ConnEnd srcPt847(Point(97.2456, 310.918), 15);\n    connRef847->setSourceEndpoint(srcPt847);\n    ConnEnd dstPt847(Point(17.2456, 310.918), 15);\n    connRef847->setDestEndpoint(dstPt847);\n    connRef847->setRoutingType((ConnType)2);\n\n    ConnRef *connRef848 = new ConnRef(router, 848);\n    ConnEnd srcPt848(Point(193.246, 224.918), 15);\n    connRef848->setSourceEndpoint(srcPt848);\n    ConnEnd dstPt848(Point(193.246, 310.918), 15);\n    connRef848->setDestEndpoint(dstPt848);\n    connRef848->setRoutingType((ConnType)2);\n\n    ConnRef *connRef849 = new ConnRef(router, 849);\n    ConnEnd srcPt849(Point(333.246, 224.918), 15);\n    connRef849->setSourceEndpoint(srcPt849);\n    ConnEnd dstPt849(Point(333.246, 310.918), 15);\n    connRef849->setDestEndpoint(dstPt849);\n    connRef849->setRoutingType((ConnType)2);\n\n    ConnRef *connRef850 = new ConnRef(router, 850);\n    ConnEnd srcPt850(Point(489.246, 224.918), 15);\n    connRef850->setSourceEndpoint(srcPt850);\n    ConnEnd dstPt850(Point(489.246, 310.918), 15);\n    connRef850->setDestEndpoint(dstPt850);\n    connRef850->setRoutingType((ConnType)2);\n\n    ConnRef *connRef851 = new ConnRef(router, 851);\n    ConnEnd srcPt851(Point(645.246, 224.918), 15);\n    connRef851->setSourceEndpoint(srcPt851);\n    ConnEnd dstPt851(Point(645.246, 310.918), 15);\n    connRef851->setDestEndpoint(dstPt851);\n    connRef851->setRoutingType((ConnType)2);\n\n    ConnRef *connRef852 = new ConnRef(router, 852);\n    ConnEnd srcPt852(Point(801.246, 224.918), 15);\n    connRef852->setSourceEndpoint(srcPt852);\n    ConnEnd dstPt852(Point(801.246, 310.918), 15);\n    connRef852->setDestEndpoint(dstPt852);\n    connRef852->setRoutingType((ConnType)2);\n\n    ConnRef *connRef853 = new ConnRef(router, 853);\n    ConnEnd srcPt853(Point(957.246, 224.918), 15);\n    connRef853->setSourceEndpoint(srcPt853);\n    ConnEnd dstPt853(Point(957.246, 310.918), 15);\n    connRef853->setDestEndpoint(dstPt853);\n    connRef853->setRoutingType((ConnType)2);\n\n    ConnRef *connRef854 = new ConnRef(router, 854);\n    ConnEnd srcPt854(Point(17.2456, 364.918), 15);\n    connRef854->setSourceEndpoint(srcPt854);\n    ConnEnd dstPt854(Point(17.2456, 450.918), 15);\n    connRef854->setDestEndpoint(dstPt854);\n    connRef854->setRoutingType((ConnType)2);\n\n    ConnRef *connRef855 = new ConnRef(router, 855);\n    ConnEnd srcPt855(Point(255.246, 450.918), 15);\n    connRef855->setSourceEndpoint(srcPt855);\n    ConnEnd dstPt855(Point(193.246, 450.918), 15);\n    connRef855->setDestEndpoint(dstPt855);\n    connRef855->setRoutingType((ConnType)2);\n\n    ConnRef *connRef856 = new ConnRef(router, 856);\n    ConnEnd srcPt856(Point(411.246, 450.918), 15);\n    connRef856->setSourceEndpoint(srcPt856);\n    ConnEnd dstPt856(Point(333.246, 450.918), 15);\n    connRef856->setDestEndpoint(dstPt856);\n    connRef856->setRoutingType((ConnType)2);\n\n    ConnRef *connRef857 = new ConnRef(router, 857);\n    ConnEnd srcPt857(Point(567.246, 450.918), 15);\n    connRef857->setSourceEndpoint(srcPt857);\n    ConnEnd dstPt857(Point(489.246, 450.918), 15);\n    connRef857->setDestEndpoint(dstPt857);\n    connRef857->setRoutingType((ConnType)2);\n\n    ConnRef *connRef858 = new ConnRef(router, 858);\n    ConnEnd srcPt858(Point(879.246, 450.918), 15);\n    connRef858->setSourceEndpoint(srcPt858);\n    ConnEnd dstPt858(Point(801.246, 450.918), 15);\n    connRef858->setDestEndpoint(dstPt858);\n    connRef858->setRoutingType((ConnType)2);\n\n    ConnRef *connRef859 = new ConnRef(router, 859);\n    ConnEnd srcPt859(Point(1035.25, 450.918), 15);\n    connRef859->setSourceEndpoint(srcPt859);\n    ConnEnd dstPt859(Point(957.246, 450.918), 15);\n    connRef859->setDestEndpoint(dstPt859);\n    connRef859->setRoutingType((ConnType)2);\n\n    ConnRef *connRef860 = new ConnRef(router, 860);\n    ConnEnd srcPt860(Point(723.246, 450.918), 15);\n    connRef860->setSourceEndpoint(srcPt860);\n    ConnEnd dstPt860(Point(645.246, 450.918), 15);\n    connRef860->setDestEndpoint(dstPt860);\n    connRef860->setRoutingType((ConnType)2);\n\n    ConnRef *connRef861 = new ConnRef(router, 861);\n    ConnEnd srcPt861(Point(97.2456, 558.918), 15);\n    connRef861->setSourceEndpoint(srcPt861);\n    ConnEnd dstPt861(Point(17.2456, 558.918), 15);\n    connRef861->setDestEndpoint(dstPt861);\n    connRef861->setRoutingType((ConnType)2);\n\n    ConnRef *connRef862 = new ConnRef(router, 862);\n    ConnEnd srcPt862(Point(255.246, 558.918), 15);\n    connRef862->setSourceEndpoint(srcPt862);\n    ConnEnd dstPt862(Point(193.246, 558.918), 15);\n    connRef862->setDestEndpoint(dstPt862);\n    connRef862->setRoutingType((ConnType)2);\n\n    ConnRef *connRef863 = new ConnRef(router, 863);\n    ConnEnd srcPt863(Point(411.246, 558.918), 15);\n    connRef863->setSourceEndpoint(srcPt863);\n    ConnEnd dstPt863(Point(333.246, 558.918), 15);\n    connRef863->setDestEndpoint(dstPt863);\n    connRef863->setRoutingType((ConnType)2);\n\n    ConnRef *connRef864 = new ConnRef(router, 864);\n    ConnEnd srcPt864(Point(567.246, 558.918), 15);\n    connRef864->setSourceEndpoint(srcPt864);\n    ConnEnd dstPt864(Point(489.246, 558.918), 15);\n    connRef864->setDestEndpoint(dstPt864);\n    connRef864->setRoutingType((ConnType)2);\n\n    ConnRef *connRef865 = new ConnRef(router, 865);\n    ConnEnd srcPt865(Point(723.246, 558.918), 15);\n    connRef865->setSourceEndpoint(srcPt865);\n    ConnEnd dstPt865(Point(645.246, 558.918), 15);\n    connRef865->setDestEndpoint(dstPt865);\n    connRef865->setRoutingType((ConnType)2);\n\n    ConnRef *connRef866 = new ConnRef(router, 866);\n    ConnEnd srcPt866(Point(879.246, 558.918), 15);\n    connRef866->setSourceEndpoint(srcPt866);\n    ConnEnd dstPt866(Point(801.246, 558.918), 15);\n    connRef866->setDestEndpoint(dstPt866);\n    connRef866->setRoutingType((ConnType)2);\n\n    ConnRef *connRef867 = new ConnRef(router, 867);\n    ConnEnd srcPt867(Point(1035.25, 558.918), 15);\n    connRef867->setSourceEndpoint(srcPt867);\n    ConnEnd dstPt867(Point(957.246, 558.918), 15);\n    connRef867->setDestEndpoint(dstPt867);\n    connRef867->setRoutingType((ConnType)2);\n\n    ConnRef *connRef868 = new ConnRef(router, 868);\n    ConnEnd srcPt868(Point(97.2456, 654.918), 15);\n    connRef868->setSourceEndpoint(srcPt868);\n    ConnEnd dstPt868(Point(17.2456, 654.918), 15);\n    connRef868->setDestEndpoint(dstPt868);\n    connRef868->setRoutingType((ConnType)2);\n\n    ConnRef *connRef869 = new ConnRef(router, 869);\n    ConnEnd srcPt869(Point(255.246, 654.918), 15);\n    connRef869->setSourceEndpoint(srcPt869);\n    ConnEnd dstPt869(Point(193.246, 654.918), 15);\n    connRef869->setDestEndpoint(dstPt869);\n    connRef869->setRoutingType((ConnType)2);\n\n    ConnRef *connRef870 = new ConnRef(router, 870);\n    ConnEnd srcPt870(Point(411.246, 654.918), 15);\n    connRef870->setSourceEndpoint(srcPt870);\n    ConnEnd dstPt870(Point(333.246, 654.918), 15);\n    connRef870->setDestEndpoint(dstPt870);\n    connRef870->setRoutingType((ConnType)2);\n\n    ConnRef *connRef871 = new ConnRef(router, 871);\n    ConnEnd srcPt871(Point(567.246, 654.918), 15);\n    connRef871->setSourceEndpoint(srcPt871);\n    ConnEnd dstPt871(Point(489.246, 654.918), 15);\n    connRef871->setDestEndpoint(dstPt871);\n    connRef871->setRoutingType((ConnType)2);\n\n    ConnRef *connRef872 = new ConnRef(router, 872);\n    ConnEnd srcPt872(Point(723.246, 654.918), 15);\n    connRef872->setSourceEndpoint(srcPt872);\n    ConnEnd dstPt872(Point(645.246, 654.918), 15);\n    connRef872->setDestEndpoint(dstPt872);\n    connRef872->setRoutingType((ConnType)2);\n\n    ConnRef *connRef873 = new ConnRef(router, 873);\n    ConnEnd srcPt873(Point(879.246, 654.918), 15);\n    connRef873->setSourceEndpoint(srcPt873);\n    ConnEnd dstPt873(Point(801.246, 654.918), 15);\n    connRef873->setDestEndpoint(dstPt873);\n    connRef873->setRoutingType((ConnType)2);\n\n    ConnRef *connRef874 = new ConnRef(router, 874);\n    ConnEnd srcPt874(Point(1035.25, 654.918), 15);\n    connRef874->setSourceEndpoint(srcPt874);\n    ConnEnd dstPt874(Point(957.246, 654.918), 15);\n    connRef874->setDestEndpoint(dstPt874);\n    connRef874->setRoutingType((ConnType)2);\n\n    ConnRef *connRef875 = new ConnRef(router, 875);\n    ConnEnd srcPt875(Point(1233.25, 192.918), 15);\n    connRef875->setSourceEndpoint(srcPt875);\n    ConnEnd dstPt875(Point(1233.25, 278.918), 15);\n    connRef875->setDestEndpoint(dstPt875);\n    connRef875->setRoutingType((ConnType)2);\n\n    ConnRef *connRef876 = new ConnRef(router, 876);\n    ConnEnd srcPt876(Point(1323.25, 418.918), 15);\n    connRef876->setSourceEndpoint(srcPt876);\n    ConnEnd dstPt876(Point(1233.25, 418.918), 15);\n    connRef876->setDestEndpoint(dstPt876);\n    connRef876->setRoutingType((ConnType)2);\n\n    ConnRef *connRef877 = new ConnRef(router, 877);\n    ConnEnd srcPt877(Point(1323.25, 514.918), 15);\n    connRef877->setSourceEndpoint(srcPt877);\n    ConnEnd dstPt877(Point(1233.25, 514.918), 15);\n    connRef877->setDestEndpoint(dstPt877);\n    connRef877->setRoutingType((ConnType)2);\n\n    ConnRef *connRef878 = new ConnRef(router, 878);\n    ConnEnd srcPt878(Point(1323.25, 622.918), 15);\n    connRef878->setSourceEndpoint(srcPt878);\n    ConnEnd dstPt878(Point(1233.25, 622.918), 15);\n    connRef878->setDestEndpoint(dstPt878);\n    connRef878->setRoutingType((ConnType)2);\n\n    ConnRef *connRef879 = new ConnRef(router, 879);\n    ConnEnd srcPt879(Point(1035.25, 718.918), 15);\n    connRef879->setSourceEndpoint(srcPt879);\n    ConnEnd dstPt879(Point(957.246, 718.918), 15);\n    connRef879->setDestEndpoint(dstPt879);\n    connRef879->setRoutingType((ConnType)2);\n\n    ConnRef *connRef880 = new ConnRef(router, 880);\n    ConnEnd srcPt880(Point(1035.25, 750.918), 15);\n    connRef880->setSourceEndpoint(srcPt880);\n    ConnEnd dstPt880(Point(957.246, 750.918), 15);\n    connRef880->setDestEndpoint(dstPt880);\n    connRef880->setRoutingType((ConnType)2);\n\n    ConnRef *connRef881 = new ConnRef(router, 881);\n    ConnEnd srcPt881(Point(1323.25, 718.918), 15);\n    connRef881->setSourceEndpoint(srcPt881);\n    ConnEnd dstPt881(Point(1233.25, 718.918), 15);\n    connRef881->setDestEndpoint(dstPt881);\n    connRef881->setRoutingType((ConnType)2);\n\n    ConnRef *connRef882 = new ConnRef(router, 882);\n    ConnEnd srcPt882(Point(1293.25, 202.918), 15);\n    connRef882->setSourceEndpoint(srcPt882);\n    ConnEnd dstPt882(Point(1293.25, 256.918), 15);\n    connRef882->setDestEndpoint(dstPt882);\n    connRef882->setRoutingType((ConnType)2);\n\n    ConnRef *connRef883 = new ConnRef(router, 883);\n    ConnEnd srcPt883(Point(1419.25, 644.918), 15);\n    connRef883->setSourceEndpoint(srcPt883);\n    ConnEnd dstPt883(Point(1293.25, 644.918), 15);\n    connRef883->setDestEndpoint(dstPt883);\n    connRef883->setRoutingType((ConnType)2);\n\n    ConnRef *connRef884 = new ConnRef(router, 884);\n    ConnEnd srcPt884(Point(145.246, 246.918), 15);\n    connRef884->setSourceEndpoint(srcPt884);\n    ConnEnd dstPt884(Point(67.2456, 246.918), 15);\n    connRef884->setDestEndpoint(dstPt884);\n    connRef884->setRoutingType((ConnType)2);\n\n    ConnRef *connRef885 = new ConnRef(router, 885);\n    ConnEnd srcPt885(Point(145.246, 278.918), 15);\n    connRef885->setSourceEndpoint(srcPt885);\n    ConnEnd dstPt885(Point(67.2456, 278.918), 15);\n    connRef885->setDestEndpoint(dstPt885);\n    connRef885->setRoutingType((ConnType)2);\n\n    ConnRef *connRef886 = new ConnRef(router, 886);\n    ConnEnd srcPt886(Point(823.246, 676.918), 15);\n    connRef886->setSourceEndpoint(srcPt886);\n    ConnEnd dstPt886(Point(790, 667), 15);\n    connRef886->setDestEndpoint(dstPt886);\n    connRef886->setRoutingType((ConnType)2);\n\n    ConnRef *connRef887 = new ConnRef(router, 887);\n    ConnEnd srcPt887(Point(527.246, 676.918), 15);\n    connRef887->setSourceEndpoint(srcPt887);\n    ConnEnd dstPt887(Point(533, 667), 15);\n    connRef887->setDestEndpoint(dstPt887);\n    connRef887->setRoutingType((ConnType)2);\n\n    ConnRef *connRef888 = new ConnRef(router, 888);\n    ConnEnd srcPt888(Point(371.246, 676.918), 15);\n    connRef888->setSourceEndpoint(srcPt888);\n    ConnEnd dstPt888(Point(390, 667), 15);\n    connRef888->setDestEndpoint(dstPt888);\n    connRef888->setRoutingType((ConnType)2);\n\n    ConnRef *connRef889 = new ConnRef(router, 889);\n    ConnEnd srcPt889(Point(979.246, 676.918), 15);\n    connRef889->setSourceEndpoint(srcPt889);\n    ConnEnd dstPt889(Point(1030, 634), 15);\n    connRef889->setDestEndpoint(dstPt889);\n    connRef889->setRoutingType((ConnType)2);\n\n    ConnRef *connRef890 = new ConnRef(router, 890);\n    ConnEnd srcPt890(Point(673.933, 676.918), 15);\n    connRef890->setSourceEndpoint(srcPt890);\n    ConnEnd dstPt890(Point(649, 667), 15);\n    connRef890->setDestEndpoint(dstPt890);\n    connRef890->setRoutingType((ConnType)2);\n\n    ConnRef *connRef891 = new ConnRef(router, 891);\n    ConnEnd srcPt891(Point(823.246, 676.918), 15);\n    connRef891->setSourceEndpoint(srcPt891);\n    ConnEnd dstPt891(Point(840, 667), 15);\n    connRef891->setDestEndpoint(dstPt891);\n    connRef891->setRoutingType((ConnType)2);\n\n    ConnRef *connRef892 = new ConnRef(router, 892);\n    ConnEnd srcPt892(Point(57.2456, 125.987), 15);\n    connRef892->setSourceEndpoint(srcPt892);\n    ConnEnd dstPt892(Point(132, 175), 15);\n    connRef892->setDestEndpoint(dstPt892);\n    connRef892->setRoutingType((ConnType)2);\n\n    ConnRef *connRef893 = new ConnRef(router, 893);\n    ConnEnd srcPt893(Point(197.246, 160.918), 15);\n    connRef893->setSourceEndpoint(srcPt893);\n    ConnEnd dstPt893(Point(132, 318), 15);\n    connRef893->setDestEndpoint(dstPt893);\n    connRef893->setRoutingType((ConnType)2);\n\n    ConnRef *connRef894 = new ConnRef(router, 894);\n    ConnEnd srcPt894(Point(57.2456, 160.918), 15);\n    connRef894->setSourceEndpoint(srcPt894);\n    ConnEnd dstPt894(Point(132, 318), 15);\n    connRef894->setDestEndpoint(dstPt894);\n    connRef894->setRoutingType((ConnType)2);\n\n    ConnRef *connRef895 = new ConnRef(router, 895);\n    ConnEnd srcPt895(Point(197.246, 160.918), 15);\n    connRef895->setSourceEndpoint(srcPt895);\n    ConnEnd dstPt895(Point(972, 319), 15);\n    connRef895->setDestEndpoint(dstPt895);\n    connRef895->setRoutingType((ConnType)2);\n\n    ConnRef *connRef896 = new ConnRef(router, 896);\n    ConnEnd srcPt896(Point(823.246, 676.918), 15);\n    connRef896->setSourceEndpoint(srcPt896);\n    ConnEnd dstPt896(Point(972, 319), 15);\n    connRef896->setDestEndpoint(dstPt896);\n    connRef896->setRoutingType((ConnType)2);\n\n    ConnRef *connRef897 = new ConnRef(router, 897);\n    ConnEnd srcPt897(Point(197.246, 160.918), 15);\n    connRef897->setSourceEndpoint(srcPt897);\n    ConnEnd dstPt897(Point(830, 319), 15);\n    connRef897->setDestEndpoint(dstPt897);\n    connRef897->setRoutingType((ConnType)2);\n\n    ConnRef *connRef898 = new ConnRef(router, 898);\n    ConnEnd srcPt898(Point(673.933, 676.918), 15);\n    connRef898->setSourceEndpoint(srcPt898);\n    ConnEnd dstPt898(Point(830, 319), 15);\n    connRef898->setDestEndpoint(dstPt898);\n    connRef898->setRoutingType((ConnType)2);\n\n    ConnRef *connRef899 = new ConnRef(router, 899);\n    ConnEnd srcPt899(Point(197.246, 160.918), 15);\n    connRef899->setSourceEndpoint(srcPt899);\n    ConnEnd dstPt899(Point(689, 319), 15);\n    connRef899->setDestEndpoint(dstPt899);\n    connRef899->setRoutingType((ConnType)2);\n\n    ConnRef *connRef900 = new ConnRef(router, 900);\n    ConnEnd srcPt900(Point(527.246, 676.918), 15);\n    connRef900->setSourceEndpoint(srcPt900);\n    ConnEnd dstPt900(Point(689, 319), 15);\n    connRef900->setDestEndpoint(dstPt900);\n    connRef900->setRoutingType((ConnType)2);\n\n    ConnRef *connRef901 = new ConnRef(router, 901);\n    ConnEnd srcPt901(Point(197.246, 160.918), 15);\n    connRef901->setSourceEndpoint(srcPt901);\n    ConnEnd dstPt901(Point(547, 319), 15);\n    connRef901->setDestEndpoint(dstPt901);\n    connRef901->setRoutingType((ConnType)2);\n\n    ConnRef *connRef902 = new ConnRef(router, 902);\n    ConnEnd srcPt902(Point(371.246, 676.918), 15);\n    connRef902->setSourceEndpoint(srcPt902);\n    ConnEnd dstPt902(Point(547, 319), 15);\n    connRef902->setDestEndpoint(dstPt902);\n    connRef902->setRoutingType((ConnType)2);\n\n    ConnRef *connRef903 = new ConnRef(router, 903);\n    ConnEnd srcPt903(Point(197.246, 160.918), 15);\n    connRef903->setSourceEndpoint(srcPt903);\n    ConnEnd dstPt903(Point(405, 319), 15);\n    connRef903->setDestEndpoint(dstPt903);\n    connRef903->setRoutingType((ConnType)2);\n\n    ConnRef *connRef904 = new ConnRef(router, 904);\n    ConnEnd srcPt904(Point(215.246, 676.918), 15);\n    connRef904->setSourceEndpoint(srcPt904);\n    ConnEnd dstPt904(Point(405, 319), 15);\n    connRef904->setDestEndpoint(dstPt904);\n    connRef904->setRoutingType((ConnType)2);\n\n    ConnRef *connRef905 = new ConnRef(router, 905);\n    ConnEnd srcPt905(Point(197.246, 160.918), 15);\n    connRef905->setSourceEndpoint(srcPt905);\n    ConnEnd dstPt905(Point(273, 329), 15);\n    connRef905->setDestEndpoint(dstPt905);\n    connRef905->setRoutingType((ConnType)2);\n\n    ConnRef *connRef906 = new ConnRef(router, 906);\n    ConnEnd srcPt906(Point(57.2456, 676.918), 15);\n    connRef906->setSourceEndpoint(srcPt906);\n    ConnEnd dstPt906(Point(273, 329), 15);\n    connRef906->setDestEndpoint(dstPt906);\n    connRef906->setRoutingType((ConnType)2);\n\n    ConnRef *connRef907 = new ConnRef(router, 907);\n    ConnEnd srcPt907(Point(979.246, 676.918), 15);\n    connRef907->setSourceEndpoint(srcPt907);\n    ConnEnd dstPt907(Point(982, 667), 15);\n    connRef907->setDestEndpoint(dstPt907);\n    connRef907->setRoutingType((ConnType)2);\n\n    ConnRef *connRef908 = new ConnRef(router, 908);\n    ConnEnd srcPt908(Point(979.246, 676.918), 15);\n    connRef908->setSourceEndpoint(srcPt908);\n    ConnEnd dstPt908(Point(932, 648), 15);\n    connRef908->setDestEndpoint(dstPt908);\n    connRef908->setRoutingType((ConnType)2);\n\n    ConnRef *connRef909 = new ConnRef(router, 909);\n    ConnEnd srcPt909(Point(197.246, 160.918), 15);\n    connRef909->setSourceEndpoint(srcPt909);\n    ConnEnd dstPt909(Point(972, 300), 15);\n    connRef909->setDestEndpoint(dstPt909);\n    connRef909->setRoutingType((ConnType)2);\n\n    ConnRef *connRef910 = new ConnRef(router, 910);\n    ConnEnd srcPt910(Point(823.246, 676.918), 15);\n    connRef910->setSourceEndpoint(srcPt910);\n    ConnEnd dstPt910(Point(972, 300), 15);\n    connRef910->setDestEndpoint(dstPt910);\n    connRef910->setRoutingType((ConnType)2);\n\n    ConnRef *connRef911 = new ConnRef(router, 911);\n    ConnEnd srcPt911(Point(197.246, 160.918), 15);\n    connRef911->setSourceEndpoint(srcPt911);\n    ConnEnd dstPt911(Point(922, 309), 15);\n    connRef911->setDestEndpoint(dstPt911);\n    connRef911->setRoutingType((ConnType)2);\n\n    ConnRef *connRef912 = new ConnRef(router, 912);\n    ConnEnd srcPt912(Point(823.246, 676.918), 15);\n    connRef912->setSourceEndpoint(srcPt912);\n    ConnEnd dstPt912(Point(922, 309), 15);\n    connRef912->setDestEndpoint(dstPt912);\n    connRef912->setRoutingType((ConnType)2);\n\n    ConnRef *connRef913 = new ConnRef(router, 913);\n    ConnEnd srcPt913(Point(197.246, 160.918), 15);\n    connRef913->setSourceEndpoint(srcPt913);\n    ConnEnd dstPt913(Point(922, 290), 15);\n    connRef913->setDestEndpoint(dstPt913);\n    connRef913->setRoutingType((ConnType)2);\n\n    ConnRef *connRef914 = new ConnRef(router, 914);\n    ConnEnd srcPt914(Point(823.246, 676.918), 15);\n    connRef914->setSourceEndpoint(srcPt914);\n    ConnEnd dstPt914(Point(922, 290), 15);\n    connRef914->setDestEndpoint(dstPt914);\n    connRef914->setRoutingType((ConnType)2);\n\n    ConnRef *connRef915 = new ConnRef(router, 915);\n    ConnEnd srcPt915(Point(197.246, 160.918), 15);\n    connRef915->setSourceEndpoint(srcPt915);\n    ConnEnd dstPt915(Point(830, 300), 15);\n    connRef915->setDestEndpoint(dstPt915);\n    connRef915->setRoutingType((ConnType)2);\n\n    ConnRef *connRef916 = new ConnRef(router, 916);\n    ConnEnd srcPt916(Point(673.933, 676.918), 15);\n    connRef916->setSourceEndpoint(srcPt916);\n    ConnEnd dstPt916(Point(830, 300), 15);\n    connRef916->setDestEndpoint(dstPt916);\n    connRef916->setRoutingType((ConnType)2);\n\n    ConnRef *connRef917 = new ConnRef(router, 917);\n    ConnEnd srcPt917(Point(197.246, 160.918), 15);\n    connRef917->setSourceEndpoint(srcPt917);\n    ConnEnd dstPt917(Point(780, 309), 15);\n    connRef917->setDestEndpoint(dstPt917);\n    connRef917->setRoutingType((ConnType)2);\n\n    ConnRef *connRef918 = new ConnRef(router, 918);\n    ConnEnd srcPt918(Point(673.933, 676.918), 15);\n    connRef918->setSourceEndpoint(srcPt918);\n    ConnEnd dstPt918(Point(780, 309), 15);\n    connRef918->setDestEndpoint(dstPt918);\n    connRef918->setRoutingType((ConnType)2);\n\n    ConnRef *connRef919 = new ConnRef(router, 919);\n    ConnEnd srcPt919(Point(197.246, 160.918), 15);\n    connRef919->setSourceEndpoint(srcPt919);\n    ConnEnd dstPt919(Point(780, 290), 15);\n    connRef919->setDestEndpoint(dstPt919);\n    connRef919->setRoutingType((ConnType)2);\n\n    ConnRef *connRef920 = new ConnRef(router, 920);\n    ConnEnd srcPt920(Point(673.933, 676.918), 15);\n    connRef920->setSourceEndpoint(srcPt920);\n    ConnEnd dstPt920(Point(780, 290), 15);\n    connRef920->setDestEndpoint(dstPt920);\n    connRef920->setRoutingType((ConnType)2);\n\n    ConnRef *connRef921 = new ConnRef(router, 921);\n    ConnEnd srcPt921(Point(197.246, 160.918), 15);\n    connRef921->setSourceEndpoint(srcPt921);\n    ConnEnd dstPt921(Point(689, 300), 15);\n    connRef921->setDestEndpoint(dstPt921);\n    connRef921->setRoutingType((ConnType)2);\n\n    ConnRef *connRef922 = new ConnRef(router, 922);\n    ConnEnd srcPt922(Point(527.246, 676.918), 15);\n    connRef922->setSourceEndpoint(srcPt922);\n    ConnEnd dstPt922(Point(689, 300), 15);\n    connRef922->setDestEndpoint(dstPt922);\n    connRef922->setRoutingType((ConnType)2);\n\n    ConnRef *connRef923 = new ConnRef(router, 923);\n    ConnEnd srcPt923(Point(197.246, 160.918), 15);\n    connRef923->setSourceEndpoint(srcPt923);\n    ConnEnd dstPt923(Point(639, 309), 15);\n    connRef923->setDestEndpoint(dstPt923);\n    connRef923->setRoutingType((ConnType)2);\n\n    ConnRef *connRef924 = new ConnRef(router, 924);\n    ConnEnd srcPt924(Point(527.246, 676.918), 15);\n    connRef924->setSourceEndpoint(srcPt924);\n    ConnEnd dstPt924(Point(639, 309), 15);\n    connRef924->setDestEndpoint(dstPt924);\n    connRef924->setRoutingType((ConnType)2);\n\n    ConnRef *connRef925 = new ConnRef(router, 925);\n    ConnEnd srcPt925(Point(197.246, 160.918), 15);\n    connRef925->setSourceEndpoint(srcPt925);\n    ConnEnd dstPt925(Point(639, 290), 15);\n    connRef925->setDestEndpoint(dstPt925);\n    connRef925->setRoutingType((ConnType)2);\n\n    ConnRef *connRef926 = new ConnRef(router, 926);\n    ConnEnd srcPt926(Point(527.246, 676.918), 15);\n    connRef926->setSourceEndpoint(srcPt926);\n    ConnEnd dstPt926(Point(639, 290), 15);\n    connRef926->setDestEndpoint(dstPt926);\n    connRef926->setRoutingType((ConnType)2);\n\n    ConnRef *connRef927 = new ConnRef(router, 927);\n    ConnEnd srcPt927(Point(197.246, 160.918), 15);\n    connRef927->setSourceEndpoint(srcPt927);\n    ConnEnd dstPt927(Point(547, 300), 15);\n    connRef927->setDestEndpoint(dstPt927);\n    connRef927->setRoutingType((ConnType)2);\n\n    ConnRef *connRef928 = new ConnRef(router, 928);\n    ConnEnd srcPt928(Point(371.246, 676.918), 15);\n    connRef928->setSourceEndpoint(srcPt928);\n    ConnEnd dstPt928(Point(547, 300), 15);\n    connRef928->setDestEndpoint(dstPt928);\n    connRef928->setRoutingType((ConnType)2);\n\n    ConnRef *connRef929 = new ConnRef(router, 929);\n    ConnEnd srcPt929(Point(197.246, 160.918), 15);\n    connRef929->setSourceEndpoint(srcPt929);\n    ConnEnd dstPt929(Point(497, 309), 15);\n    connRef929->setDestEndpoint(dstPt929);\n    connRef929->setRoutingType((ConnType)2);\n\n    ConnRef *connRef930 = new ConnRef(router, 930);\n    ConnEnd srcPt930(Point(371.246, 676.918), 15);\n    connRef930->setSourceEndpoint(srcPt930);\n    ConnEnd dstPt930(Point(497, 309), 15);\n    connRef930->setDestEndpoint(dstPt930);\n    connRef930->setRoutingType((ConnType)2);\n\n    ConnRef *connRef931 = new ConnRef(router, 931);\n    ConnEnd srcPt931(Point(197.246, 160.918), 15);\n    connRef931->setSourceEndpoint(srcPt931);\n    ConnEnd dstPt931(Point(497, 290), 15);\n    connRef931->setDestEndpoint(dstPt931);\n    connRef931->setRoutingType((ConnType)2);\n\n    ConnRef *connRef932 = new ConnRef(router, 932);\n    ConnEnd srcPt932(Point(371.246, 676.918), 15);\n    connRef932->setSourceEndpoint(srcPt932);\n    ConnEnd dstPt932(Point(497, 290), 15);\n    connRef932->setDestEndpoint(dstPt932);\n    connRef932->setRoutingType((ConnType)2);\n\n    ConnRef *connRef933 = new ConnRef(router, 933);\n    ConnEnd srcPt933(Point(197.246, 160.918), 15);\n    connRef933->setSourceEndpoint(srcPt933);\n    ConnEnd dstPt933(Point(405, 300), 15);\n    connRef933->setDestEndpoint(dstPt933);\n    connRef933->setRoutingType((ConnType)2);\n\n    ConnRef *connRef934 = new ConnRef(router, 934);\n    ConnEnd srcPt934(Point(215.246, 676.918), 15);\n    connRef934->setSourceEndpoint(srcPt934);\n    ConnEnd dstPt934(Point(405, 300), 15);\n    connRef934->setDestEndpoint(dstPt934);\n    connRef934->setRoutingType((ConnType)2);\n\n    ConnRef *connRef935 = new ConnRef(router, 935);\n    ConnEnd srcPt935(Point(197.246, 160.918), 15);\n    connRef935->setSourceEndpoint(srcPt935);\n    ConnEnd dstPt935(Point(355, 309), 15);\n    connRef935->setDestEndpoint(dstPt935);\n    connRef935->setRoutingType((ConnType)2);\n\n    ConnRef *connRef936 = new ConnRef(router, 936);\n    ConnEnd srcPt936(Point(215.246, 676.918), 15);\n    connRef936->setSourceEndpoint(srcPt936);\n    ConnEnd dstPt936(Point(355, 309), 15);\n    connRef936->setDestEndpoint(dstPt936);\n    connRef936->setRoutingType((ConnType)2);\n\n    ConnRef *connRef937 = new ConnRef(router, 937);\n    ConnEnd srcPt937(Point(197.246, 160.918), 15);\n    connRef937->setSourceEndpoint(srcPt937);\n    ConnEnd dstPt937(Point(355, 290), 15);\n    connRef937->setDestEndpoint(dstPt937);\n    connRef937->setRoutingType((ConnType)2);\n\n    ConnRef *connRef938 = new ConnRef(router, 938);\n    ConnEnd srcPt938(Point(215.246, 676.918), 15);\n    connRef938->setSourceEndpoint(srcPt938);\n    ConnEnd dstPt938(Point(355, 290), 15);\n    connRef938->setDestEndpoint(dstPt938);\n    connRef938->setRoutingType((ConnType)2);\n\n    ConnRef *connRef939 = new ConnRef(router, 939);\n    ConnEnd srcPt939(Point(197.246, 160.918), 15);\n    connRef939->setSourceEndpoint(srcPt939);\n    ConnEnd dstPt939(Point(273, 310), 15);\n    connRef939->setDestEndpoint(dstPt939);\n    connRef939->setRoutingType((ConnType)2);\n\n    ConnRef *connRef940 = new ConnRef(router, 940);\n    ConnEnd srcPt940(Point(57.2456, 676.918), 15);\n    connRef940->setSourceEndpoint(srcPt940);\n    ConnEnd dstPt940(Point(273, 310), 15);\n    connRef940->setDestEndpoint(dstPt940);\n    connRef940->setRoutingType((ConnType)2);\n\n    ConnRef *connRef941 = new ConnRef(router, 941);\n    ConnEnd srcPt941(Point(197.246, 160.918), 15);\n    connRef941->setSourceEndpoint(srcPt941);\n    ConnEnd dstPt941(Point(213, 290), 15);\n    connRef941->setDestEndpoint(dstPt941);\n    connRef941->setRoutingType((ConnType)2);\n\n    ConnRef *connRef942 = new ConnRef(router, 942);\n    ConnEnd srcPt942(Point(57.2456, 676.918), 15);\n    connRef942->setSourceEndpoint(srcPt942);\n    ConnEnd dstPt942(Point(213, 290), 15);\n    connRef942->setDestEndpoint(dstPt942);\n    connRef942->setRoutingType((ConnType)2);\n\n    ConnRef *connRef943 = new ConnRef(router, 943);\n    ConnEnd srcPt943(Point(197.246, 160.918), 15);\n    connRef943->setSourceEndpoint(srcPt943);\n    ConnEnd dstPt943(Point(213, 309), 15);\n    connRef943->setDestEndpoint(dstPt943);\n    connRef943->setRoutingType((ConnType)2);\n\n    ConnRef *connRef944 = new ConnRef(router, 944);\n    ConnEnd srcPt944(Point(57.2456, 676.918), 15);\n    connRef944->setSourceEndpoint(srcPt944);\n    ConnEnd dstPt944(Point(213, 309), 15);\n    connRef944->setDestEndpoint(dstPt944);\n    connRef944->setRoutingType((ConnType)2);\n\n    ConnRef *connRef945 = new ConnRef(router, 945);\n    ConnEnd srcPt945(Point(197.246, 160.918), 15);\n    connRef945->setSourceEndpoint(srcPt945);\n    ConnEnd dstPt945(Point(92, 309), 15);\n    connRef945->setDestEndpoint(dstPt945);\n    connRef945->setRoutingType((ConnType)2);\n\n    ConnRef *connRef946 = new ConnRef(router, 946);\n    ConnEnd srcPt946(Point(57.2456, 160.918), 15);\n    connRef946->setSourceEndpoint(srcPt946);\n    ConnEnd dstPt946(Point(92, 309), 15);\n    connRef946->setDestEndpoint(dstPt946);\n    connRef946->setRoutingType((ConnType)2);\n\n    ConnRef *connRef947 = new ConnRef(router, 947);\n    ConnEnd srcPt947(Point(197.246, 160.918), 15);\n    connRef947->setSourceEndpoint(srcPt947);\n    ConnEnd dstPt947(Point(92, 290), 15);\n    connRef947->setDestEndpoint(dstPt947);\n    connRef947->setRoutingType((ConnType)2);\n\n    ConnRef *connRef948 = new ConnRef(router, 948);\n    ConnEnd srcPt948(Point(57.2456, 160.918), 15);\n    connRef948->setSourceEndpoint(srcPt948);\n    ConnEnd dstPt948(Point(92, 290), 15);\n    connRef948->setDestEndpoint(dstPt948);\n    connRef948->setRoutingType((ConnType)2);\n\n    ConnRef *connRef949 = new ConnRef(router, 949);\n    ConnEnd srcPt949(Point(57.2456, 125.987), 15);\n    connRef949->setSourceEndpoint(srcPt949);\n    ConnEnd dstPt949(Point(82, 194), 15);\n    connRef949->setDestEndpoint(dstPt949);\n    connRef949->setRoutingType((ConnType)2);\n\n    ConnRef *connRef950 = new ConnRef(router, 950);\n    ConnEnd srcPt950(Point(57.2456, 125.987), 15);\n    connRef950->setSourceEndpoint(srcPt950);\n    ConnEnd dstPt950(Point(82, 175), 15);\n    connRef950->setDestEndpoint(dstPt950);\n    connRef950->setRoutingType((ConnType)2);\n\n    ConnRef *connRef951 = new ConnRef(router, 951);\n    ConnEnd srcPt951(Point(57.2456, 125.987), 15);\n    connRef951->setSourceEndpoint(srcPt951);\n    ConnEnd dstPt951(Point(82, 156), 15);\n    connRef951->setDestEndpoint(dstPt951);\n    connRef951->setRoutingType((ConnType)2);\n\n    ConnRef *connRef952 = new ConnRef(router, 952);\n    ConnEnd srcPt952(Point(319.219, -7.08205), 15);\n    connRef952->setSourceEndpoint(srcPt952);\n    ConnEnd dstPt952(Point(319, 155), 15);\n    connRef952->setDestEndpoint(dstPt952);\n    connRef952->setRoutingType((ConnType)2);\n\n    ConnRef *connRef953 = new ConnRef(router, 953);\n    ConnEnd srcPt953(Point(197.246, 96.9179), 15);\n    connRef953->setSourceEndpoint(srcPt953);\n    ConnEnd dstPt953(Point(317.466, 34.9179), 15);\n    connRef953->setDestEndpoint(dstPt953);\n    connRef953->setRoutingType((ConnType)2);\n\n    ConnRef *connRef954 = new ConnRef(router, 954);\n    ConnEnd srcPt954(Point(57.2456, 125.987), 15);\n    connRef954->setSourceEndpoint(srcPt954);\n    ConnEnd dstPt954(Point(-7.75443, -71.0821), 15);\n    connRef954->setDestEndpoint(dstPt954);\n    connRef954->setRoutingType((ConnType)2);\n\n    ConnRef *connRef955 = new ConnRef(router, 955);\n    ConnEnd srcPt955(Point(197.246, 96.9179), 15);\n    connRef955->setSourceEndpoint(srcPt955);\n    ConnEnd dstPt955(Point(317.466, 86.9179), 15);\n    connRef955->setDestEndpoint(dstPt955);\n    connRef955->setRoutingType((ConnType)2);\n\n    ConnRef *connRef398 = new ConnRef(router, 398);\n    ConnEnd srcPt398(Point(982, 596), 15);\n    connRef398->setSourceEndpoint(srcPt398);\n    ConnEnd dstPt398(Point(979.246, 676.918), 15);\n    connRef398->setDestEndpoint(dstPt398);\n    connRef398->setRoutingType((ConnType)2);\n\n    ConnRef *connRef399 = new ConnRef(router, 399);\n    ConnEnd srcPt399(Point(840, 596), 15);\n    connRef399->setSourceEndpoint(srcPt399);\n    ConnEnd dstPt399(Point(823.246, 676.918), 15);\n    connRef399->setDestEndpoint(dstPt399);\n    connRef399->setRoutingType((ConnType)2);\n\n    ConnRef *connRef400 = new ConnRef(router, 400);\n    ConnEnd srcPt400(Point(699, 596), 15);\n    connRef400->setSourceEndpoint(srcPt400);\n    ConnEnd dstPt400(Point(673.933, 676.918), 15);\n    connRef400->setDestEndpoint(dstPt400);\n    connRef400->setRoutingType((ConnType)2);\n\n    ConnRef *connRef401 = new ConnRef(router, 401);\n    ConnEnd srcPt401(Point(557, 596), 15);\n    connRef401->setSourceEndpoint(srcPt401);\n    ConnEnd dstPt401(Point(527.246, 676.918), 15);\n    connRef401->setDestEndpoint(dstPt401);\n    connRef401->setRoutingType((ConnType)2);\n\n    ConnRef *connRef402 = new ConnRef(router, 402);\n    ConnEnd srcPt402(Point(415, 596), 15);\n    connRef402->setSourceEndpoint(srcPt402);\n    ConnEnd dstPt402(Point(371.246, 676.918), 15);\n    connRef402->setDestEndpoint(dstPt402);\n    connRef402->setRoutingType((ConnType)2);\n\n    ConnRef *connRef403 = new ConnRef(router, 403);\n    ConnEnd srcPt403(Point(273, 596), 15);\n    connRef403->setSourceEndpoint(srcPt403);\n    ConnEnd dstPt403(Point(215.246, 676.918), 15);\n    connRef403->setDestEndpoint(dstPt403);\n    connRef403->setRoutingType((ConnType)2);\n\n    ConnRef *connRef404 = new ConnRef(router, 404);\n    ConnEnd srcPt404(Point(132, 615), 15);\n    connRef404->setSourceEndpoint(srcPt404);\n    ConnEnd dstPt404(Point(57.2456, 676.918), 15);\n    connRef404->setDestEndpoint(dstPt404);\n    connRef404->setRoutingType((ConnType)2);\n\n    ConnRef *connRef405 = new ConnRef(router, 405);\n    ConnEnd srcPt405(Point(1203.25, 676.918), 15);\n    connRef405->setSourceEndpoint(srcPt405);\n    ConnEnd dstPt405(Point(1227, 632), 15);\n    connRef405->setDestEndpoint(dstPt405);\n    connRef405->setRoutingType((ConnType)2);\n\n    ConnRef *connRef406 = new ConnRef(router, 406);\n    ConnEnd srcPt406(Point(1209, 586), 15);\n    connRef406->setSourceEndpoint(srcPt406);\n    ConnEnd dstPt406(Point(1203.25, 676.918), 15);\n    connRef406->setDestEndpoint(dstPt406);\n    connRef406->setRoutingType((ConnType)2);\n\n    ConnRef *connRef407 = new ConnRef(router, 407);\n    ConnEnd srcPt407(Point(1203.25, 676.918), 15);\n    connRef407->setSourceEndpoint(srcPt407);\n    ConnEnd dstPt407(Point(1209, 667), 15);\n    connRef407->setDestEndpoint(dstPt407);\n    connRef407->setRoutingType((ConnType)2);\n\n    ConnRef *connRef408 = new ConnRef(router, 408);\n    ConnEnd srcPt408(Point(1203.25, 676.918), 15);\n    connRef408->setSourceEndpoint(srcPt408);\n    ConnEnd dstPt408(Point(1159, 667), 15);\n    connRef408->setDestEndpoint(dstPt408);\n    connRef408->setRoutingType((ConnType)2);\n\n    ConnRef *connRef409 = new ConnRef(router, 409);\n    ConnEnd srcPt409(Point(1209, 566), 15);\n    connRef409->setSourceEndpoint(srcPt409);\n    ConnEnd dstPt409(Point(1203.25, 558.918), 15);\n    connRef409->setDestEndpoint(dstPt409);\n    connRef409->setRoutingType((ConnType)2);\n\n    ConnRef *connRef410 = new ConnRef(router, 410);\n    ConnEnd srcPt410(Point(1209, 505), 15);\n    connRef410->setSourceEndpoint(srcPt410);\n    ConnEnd dstPt410(Point(1203.25, 558.918), 15);\n    connRef410->setDestEndpoint(dstPt410);\n    connRef410->setRoutingType((ConnType)2);\n\n    ConnRef *connRef411 = new ConnRef(router, 411);\n    ConnEnd srcPt411(Point(1159, 575), 15);\n    connRef411->setSourceEndpoint(srcPt411);\n    ConnEnd dstPt411(Point(1203.25, 558.918), 15);\n    connRef411->setDestEndpoint(dstPt411);\n    connRef411->setRoutingType((ConnType)2);\n\n    ConnRef *connRef412 = new ConnRef(router, 412);\n    ConnEnd srcPt412(Point(1209, 585), 15);\n    connRef412->setSourceEndpoint(srcPt412);\n    ConnEnd dstPt412(Point(1203.25, 558.918), 15);\n    connRef412->setDestEndpoint(dstPt412);\n    connRef412->setRoutingType((ConnType)2);\n\n    ConnRef *connRef413 = new ConnRef(router, 413);\n    ConnEnd srcPt413(Point(1209, 485), 15);\n    connRef413->setSourceEndpoint(srcPt413);\n    ConnEnd dstPt413(Point(1203.25, 447.955), 15);\n    connRef413->setDestEndpoint(dstPt413);\n    connRef413->setRoutingType((ConnType)2);\n\n    ConnRef *connRef414 = new ConnRef(router, 414);\n    ConnEnd srcPt414(Point(1209, 414), 15);\n    connRef414->setSourceEndpoint(srcPt414);\n    ConnEnd dstPt414(Point(1203.25, 447.955), 15);\n    connRef414->setDestEndpoint(dstPt414);\n    connRef414->setRoutingType((ConnType)2);\n\n    ConnRef *connRef415 = new ConnRef(router, 415);\n    ConnEnd srcPt415(Point(1159, 485), 15);\n    connRef415->setSourceEndpoint(srcPt415);\n    ConnEnd dstPt415(Point(1203.25, 447.955), 15);\n    connRef415->setDestEndpoint(dstPt415);\n    connRef415->setRoutingType((ConnType)2);\n\n    ConnRef *connRef416 = new ConnRef(router, 416);\n    ConnEnd srcPt416(Point(1209, 394), 15);\n    connRef416->setSourceEndpoint(srcPt416);\n    ConnEnd dstPt416(Point(1203.25, 332.918), 15);\n    connRef416->setDestEndpoint(dstPt416);\n    connRef416->setRoutingType((ConnType)2);\n\n    ConnRef *connRef417 = new ConnRef(router, 417);\n    ConnEnd srcPt417(Point(1159, 394), 15);\n    connRef417->setSourceEndpoint(srcPt417);\n    ConnEnd dstPt417(Point(1203.25, 332.918), 15);\n    connRef417->setDestEndpoint(dstPt417);\n    connRef417->setRoutingType((ConnType)2);\n\n    ConnRef *connRef418 = new ConnRef(router, 418);\n    ConnEnd srcPt418(Point(1449.25, 676.918), 15);\n    connRef418->setSourceEndpoint(srcPt418);\n    ConnEnd dstPt418(Point(1299, 667), 15);\n    connRef418->setDestEndpoint(dstPt418);\n    connRef418->setRoutingType((ConnType)2);\n\n    ConnRef *connRef419 = new ConnRef(router, 419);\n    ConnEnd srcPt419(Point(1171.25, 676.918), 15);\n    connRef419->setSourceEndpoint(srcPt419);\n    ConnEnd dstPt419(Point(1059, 667), 15);\n    connRef419->setDestEndpoint(dstPt419);\n    connRef419->setRoutingType((ConnType)2);\n\n    ConnRef *connRef420 = new ConnRef(router, 420);\n    ConnEnd srcPt420(Point(1171.25, 676.918), 15);\n    connRef420->setSourceEndpoint(srcPt420);\n    ConnEnd dstPt420(Point(1109, 667), 15);\n    connRef420->setDestEndpoint(dstPt420);\n    connRef420->setRoutingType((ConnType)2);\n\n    ConnRef *connRef421 = new ConnRef(router, 421);\n    ConnEnd srcPt421(Point(1050, 634), 15);\n    connRef421->setSourceEndpoint(srcPt421);\n    ConnEnd dstPt421(Point(1171.25, 676.918), 15);\n    connRef421->setDestEndpoint(dstPt421);\n    connRef421->setRoutingType((ConnType)2);\n\n    ConnRef *connRef422 = new ConnRef(router, 422);\n    ConnEnd srcPt422(Point(790, 687), 15);\n    connRef422->setSourceEndpoint(srcPt422);\n    ConnEnd dstPt422(Point(823.246, 750.918), 15);\n    connRef422->setDestEndpoint(dstPt422);\n    connRef422->setRoutingType((ConnType)2);\n\n    ConnRef *connRef423 = new ConnRef(router, 423);\n    ConnEnd srcPt423(Point(1059, 687), 15);\n    connRef423->setSourceEndpoint(srcPt423);\n    ConnEnd dstPt423(Point(1171.25, 750.918), 15);\n    connRef423->setDestEndpoint(dstPt423);\n    connRef423->setRoutingType((ConnType)2);\n\n    ConnRef *connRef424 = new ConnRef(router, 424);\n    ConnEnd srcPt424(Point(1109, 687), 15);\n    connRef424->setSourceEndpoint(srcPt424);\n    ConnEnd dstPt424(Point(1171.25, 750.918), 15);\n    connRef424->setDestEndpoint(dstPt424);\n    connRef424->setRoutingType((ConnType)2);\n\n    ConnRef *connRef425 = new ConnRef(router, 425);\n    ConnEnd srcPt425(Point(533, 687), 15);\n    connRef425->setSourceEndpoint(srcPt425);\n    ConnEnd dstPt425(Point(527.246, 750.918), 15);\n    connRef425->setDestEndpoint(dstPt425);\n    connRef425->setRoutingType((ConnType)2);\n\n    ConnRef *connRef426 = new ConnRef(router, 426);\n    ConnEnd srcPt426(Point(390, 687), 15);\n    connRef426->setSourceEndpoint(srcPt426);\n    ConnEnd dstPt426(Point(371.246, 750.918), 15);\n    connRef426->setDestEndpoint(dstPt426);\n    connRef426->setRoutingType((ConnType)2);\n\n    ConnRef *connRef427 = new ConnRef(router, 427);\n    ConnEnd srcPt427(Point(1247, 632), 15);\n    connRef427->setSourceEndpoint(srcPt427);\n    ConnEnd dstPt427(Point(1449.25, 676.918), 15);\n    connRef427->setDestEndpoint(dstPt427);\n    connRef427->setRoutingType((ConnType)2);\n\n    ConnRef *connRef428 = new ConnRef(router, 428);\n    ConnEnd srcPt428(Point(982, 615), 15);\n    connRef428->setSourceEndpoint(srcPt428);\n    ConnEnd dstPt428(Point(979.246, 676.918), 15);\n    connRef428->setDestEndpoint(dstPt428);\n    connRef428->setRoutingType((ConnType)2);\n\n    ConnRef *connRef429 = new ConnRef(router, 429);\n    ConnEnd srcPt429(Point(840, 615), 15);\n    connRef429->setSourceEndpoint(srcPt429);\n    ConnEnd dstPt429(Point(823.246, 676.918), 15);\n    connRef429->setDestEndpoint(dstPt429);\n    connRef429->setRoutingType((ConnType)2);\n\n    ConnRef *connRef430 = new ConnRef(router, 430);\n    ConnEnd srcPt430(Point(699, 615), 15);\n    connRef430->setSourceEndpoint(srcPt430);\n    ConnEnd dstPt430(Point(673.933, 676.918), 15);\n    connRef430->setDestEndpoint(dstPt430);\n    connRef430->setRoutingType((ConnType)2);\n\n    ConnRef *connRef431 = new ConnRef(router, 431);\n    ConnEnd srcPt431(Point(557, 615), 15);\n    connRef431->setSourceEndpoint(srcPt431);\n    ConnEnd dstPt431(Point(527.246, 676.918), 15);\n    connRef431->setDestEndpoint(dstPt431);\n    connRef431->setRoutingType((ConnType)2);\n\n    ConnRef *connRef432 = new ConnRef(router, 432);\n    ConnEnd srcPt432(Point(415, 615), 15);\n    connRef432->setSourceEndpoint(srcPt432);\n    ConnEnd dstPt432(Point(371.246, 676.918), 15);\n    connRef432->setDestEndpoint(dstPt432);\n    connRef432->setRoutingType((ConnType)2);\n\n    ConnRef *connRef433 = new ConnRef(router, 433);\n    ConnEnd srcPt433(Point(273, 615), 15);\n    connRef433->setSourceEndpoint(srcPt433);\n    ConnEnd dstPt433(Point(215.246, 676.918), 15);\n    connRef433->setDestEndpoint(dstPt433);\n    connRef433->setRoutingType((ConnType)2);\n\n    ConnRef *connRef434 = new ConnRef(router, 434);\n    ConnEnd srcPt434(Point(132, 596), 15);\n    connRef434->setSourceEndpoint(srcPt434);\n    ConnEnd dstPt434(Point(57.2456, 676.918), 15);\n    connRef434->setDestEndpoint(dstPt434);\n    connRef434->setRoutingType((ConnType)2);\n\n    ConnRef *connRef435 = new ConnRef(router, 435);\n    ConnEnd srcPt435(Point(982, 516), 15);\n    connRef435->setSourceEndpoint(srcPt435);\n    ConnEnd dstPt435(Point(979.246, 558.918), 15);\n    connRef435->setDestEndpoint(dstPt435);\n    connRef435->setRoutingType((ConnType)2);\n\n    ConnRef *connRef436 = new ConnRef(router, 436);\n    ConnEnd srcPt436(Point(982, 496), 15);\n    connRef436->setSourceEndpoint(srcPt436);\n    ConnEnd dstPt436(Point(979.246, 447.955), 15);\n    connRef436->setDestEndpoint(dstPt436);\n    connRef436->setRoutingType((ConnType)2);\n\n    ConnRef *connRef437 = new ConnRef(router, 437);\n    ConnEnd srcPt437(Point(840, 496), 15);\n    connRef437->setSourceEndpoint(srcPt437);\n    ConnEnd dstPt437(Point(823.246, 447.955), 15);\n    connRef437->setDestEndpoint(dstPt437);\n    connRef437->setRoutingType((ConnType)2);\n\n    ConnRef *connRef438 = new ConnRef(router, 438);\n    ConnEnd srcPt438(Point(840, 516), 15);\n    connRef438->setSourceEndpoint(srcPt438);\n    ConnEnd dstPt438(Point(823.246, 558.918), 15);\n    connRef438->setDestEndpoint(dstPt438);\n    connRef438->setRoutingType((ConnType)2);\n\n    ConnRef *connRef439 = new ConnRef(router, 439);\n    ConnEnd srcPt439(Point(699, 516), 15);\n    connRef439->setSourceEndpoint(srcPt439);\n    ConnEnd dstPt439(Point(673.933, 558.918), 15);\n    connRef439->setDestEndpoint(dstPt439);\n    connRef439->setRoutingType((ConnType)2);\n\n    ConnRef *connRef440 = new ConnRef(router, 440);\n    ConnEnd srcPt440(Point(699, 496), 15);\n    connRef440->setSourceEndpoint(srcPt440);\n    ConnEnd dstPt440(Point(673.933, 447.955), 15);\n    connRef440->setDestEndpoint(dstPt440);\n    connRef440->setRoutingType((ConnType)2);\n\n    ConnRef *connRef441 = new ConnRef(router, 441);\n    ConnEnd srcPt441(Point(557, 496), 15);\n    connRef441->setSourceEndpoint(srcPt441);\n    ConnEnd dstPt441(Point(527.246, 447.955), 15);\n    connRef441->setDestEndpoint(dstPt441);\n    connRef441->setRoutingType((ConnType)2);\n\n    ConnRef *connRef442 = new ConnRef(router, 442);\n    ConnEnd srcPt442(Point(557, 516), 15);\n    connRef442->setSourceEndpoint(srcPt442);\n    ConnEnd dstPt442(Point(527.246, 558.918), 15);\n    connRef442->setDestEndpoint(dstPt442);\n    connRef442->setRoutingType((ConnType)2);\n\n    ConnRef *connRef443 = new ConnRef(router, 443);\n    ConnEnd srcPt443(Point(415, 516), 15);\n    connRef443->setSourceEndpoint(srcPt443);\n    ConnEnd dstPt443(Point(371.246, 558.918), 15);\n    connRef443->setDestEndpoint(dstPt443);\n    connRef443->setRoutingType((ConnType)2);\n\n    ConnRef *connRef444 = new ConnRef(router, 444);\n    ConnEnd srcPt444(Point(415, 496), 15);\n    connRef444->setSourceEndpoint(srcPt444);\n    ConnEnd dstPt444(Point(371.246, 447.955), 15);\n    connRef444->setDestEndpoint(dstPt444);\n    connRef444->setRoutingType((ConnType)2);\n\n    ConnRef *connRef445 = new ConnRef(router, 445);\n    ConnEnd srcPt445(Point(273, 496), 15);\n    connRef445->setSourceEndpoint(srcPt445);\n    ConnEnd dstPt445(Point(215.246, 447.955), 15);\n    connRef445->setDestEndpoint(dstPt445);\n    connRef445->setRoutingType((ConnType)2);\n\n    ConnRef *connRef446 = new ConnRef(router, 446);\n    ConnEnd srcPt446(Point(273, 516), 15);\n    connRef446->setSourceEndpoint(srcPt446);\n    ConnEnd dstPt446(Point(215.246, 558.918), 15);\n    connRef446->setDestEndpoint(dstPt446);\n    connRef446->setRoutingType((ConnType)2);\n\n    ConnRef *connRef447 = new ConnRef(router, 447);\n    ConnEnd srcPt447(Point(132, 496), 15);\n    connRef447->setSourceEndpoint(srcPt447);\n    ConnEnd dstPt447(Point(57.2456, 447.955), 15);\n    connRef447->setDestEndpoint(dstPt447);\n    connRef447->setRoutingType((ConnType)2);\n\n    ConnRef *connRef448 = new ConnRef(router, 448);\n    ConnEnd srcPt448(Point(132, 516), 15);\n    connRef448->setSourceEndpoint(srcPt448);\n    ConnEnd dstPt448(Point(57.2456, 558.918), 15);\n    connRef448->setDestEndpoint(dstPt448);\n    connRef448->setRoutingType((ConnType)2);\n\n    ConnRef *connRef449 = new ConnRef(router, 449);\n    ConnEnd srcPt449(Point(1219, 319), 15);\n    connRef449->setSourceEndpoint(srcPt449);\n    ConnEnd dstPt449(Point(1203.25, 332.918), 15);\n    connRef449->setDestEndpoint(dstPt449);\n    connRef449->setRoutingType((ConnType)2);\n\n    ConnRef *connRef450 = new ConnRef(router, 450);\n    ConnEnd srcPt450(Point(1199, 319), 15);\n    connRef450->setSourceEndpoint(srcPt450);\n    ConnEnd dstPt450(Point(197.246, 160.918), 15);\n    connRef450->setDestEndpoint(dstPt450);\n    connRef450->setRoutingType((ConnType)2);\n\n    ConnRef *connRef451 = new ConnRef(router, 451);\n    ConnEnd srcPt451(Point(1199, 319), 15);\n    connRef451->setSourceEndpoint(srcPt451);\n    ConnEnd dstPt451(Point(979.246, 676.918), 15);\n    connRef451->setDestEndpoint(dstPt451);\n    connRef451->setRoutingType((ConnType)2);\n\n    ConnRef *connRef452 = new ConnRef(router, 452);\n    ConnEnd srcPt452(Point(1209, 687), 15);\n    connRef452->setSourceEndpoint(srcPt452);\n    ConnEnd dstPt452(Point(1203.25, 750.918), 15);\n    connRef452->setDestEndpoint(dstPt452);\n    connRef452->setRoutingType((ConnType)2);\n\n    ConnRef *connRef453 = new ConnRef(router, 453);\n    ConnEnd srcPt453(Point(1299, 687), 15);\n    connRef453->setSourceEndpoint(srcPt453);\n    ConnEnd dstPt453(Point(1449.25, 750.918), 15);\n    connRef453->setDestEndpoint(dstPt453);\n    connRef453->setRoutingType((ConnType)2);\n\n    ConnRef *connRef454 = new ConnRef(router, 454);\n    ConnEnd srcPt454(Point(649, 687), 15);\n    connRef454->setSourceEndpoint(srcPt454);\n    ConnEnd dstPt454(Point(673.933, 750.918), 15);\n    connRef454->setDestEndpoint(dstPt454);\n    connRef454->setRoutingType((ConnType)2);\n\n    ConnRef *connRef455 = new ConnRef(router, 455);\n    ConnEnd srcPt455(Point(840, 687), 15);\n    connRef455->setSourceEndpoint(srcPt455);\n    ConnEnd dstPt455(Point(823.246, 750.918), 15);\n    connRef455->setDestEndpoint(dstPt455);\n    connRef455->setRoutingType((ConnType)2);\n\n    ConnRef *connRef456 = new ConnRef(router, 456);\n    ConnEnd srcPt456(Point(132, 195), 15);\n    connRef456->setSourceEndpoint(srcPt456);\n    ConnEnd dstPt456(Point(57.2456, 160.918), 15);\n    connRef456->setDestEndpoint(dstPt456);\n    connRef456->setRoutingType((ConnType)2);\n\n    ConnRef *connRef457 = new ConnRef(router, 457);\n    ConnEnd srcPt457(Point(132, 338), 15);\n    connRef457->setSourceEndpoint(srcPt457);\n    ConnEnd dstPt457(Point(57.2456, 332.918), 15);\n    connRef457->setDestEndpoint(dstPt457);\n    connRef457->setRoutingType((ConnType)2);\n\n    ConnRef *connRef458 = new ConnRef(router, 458);\n    ConnEnd srcPt458(Point(992, 319), 15);\n    connRef458->setSourceEndpoint(srcPt458);\n    ConnEnd dstPt458(Point(979.246, 332.918), 15);\n    connRef458->setDestEndpoint(dstPt458);\n    connRef458->setRoutingType((ConnType)2);\n\n    ConnRef *connRef459 = new ConnRef(router, 459);\n    ConnEnd srcPt459(Point(850, 319), 15);\n    connRef459->setSourceEndpoint(srcPt459);\n    ConnEnd dstPt459(Point(823.246, 332.918), 15);\n    connRef459->setDestEndpoint(dstPt459);\n    connRef459->setRoutingType((ConnType)2);\n\n    ConnRef *connRef460 = new ConnRef(router, 460);\n    ConnEnd srcPt460(Point(709, 319), 15);\n    connRef460->setSourceEndpoint(srcPt460);\n    ConnEnd dstPt460(Point(673.933, 332.918), 15);\n    connRef460->setDestEndpoint(dstPt460);\n    connRef460->setRoutingType((ConnType)2);\n\n    ConnRef *connRef461 = new ConnRef(router, 461);\n    ConnEnd srcPt461(Point(567, 319), 15);\n    connRef461->setSourceEndpoint(srcPt461);\n    ConnEnd dstPt461(Point(527.246, 332.918), 15);\n    connRef461->setDestEndpoint(dstPt461);\n    connRef461->setRoutingType((ConnType)2);\n\n    ConnRef *connRef462 = new ConnRef(router, 462);\n    ConnEnd srcPt462(Point(425, 319), 15);\n    connRef462->setSourceEndpoint(srcPt462);\n    ConnEnd dstPt462(Point(371.246, 332.918), 15);\n    connRef462->setDestEndpoint(dstPt462);\n    connRef462->setRoutingType((ConnType)2);\n\n    ConnRef *connRef463 = new ConnRef(router, 463);\n    ConnEnd srcPt463(Point(273, 309), 15);\n    connRef463->setSourceEndpoint(srcPt463);\n    ConnEnd dstPt463(Point(215.246, 332.918), 15);\n    connRef463->setDestEndpoint(dstPt463);\n    connRef463->setRoutingType((ConnType)2);\n\n    ConnRef *connRef464 = new ConnRef(router, 464);\n    ConnEnd srcPt464(Point(982, 687), 15);\n    connRef464->setSourceEndpoint(srcPt464);\n    ConnEnd dstPt464(Point(979.246, 750.918), 15);\n    connRef464->setDestEndpoint(dstPt464);\n    connRef464->setRoutingType((ConnType)2);\n\n    ConnRef *connRef465 = new ConnRef(router, 465);\n    ConnEnd srcPt465(Point(932, 668), 15);\n    connRef465->setSourceEndpoint(srcPt465);\n    ConnEnd dstPt465(Point(979.246, 750.918), 15);\n    connRef465->setDestEndpoint(dstPt465);\n    connRef465->setRoutingType((ConnType)2);\n\n    ConnRef *connRef466 = new ConnRef(router, 466);\n    ConnEnd srcPt466(Point(982, 577), 15);\n    connRef466->setSourceEndpoint(srcPt466);\n    ConnEnd dstPt466(Point(979.246, 676.918), 15);\n    connRef466->setDestEndpoint(dstPt466);\n    connRef466->setRoutingType((ConnType)2);\n\n    ConnRef *connRef467 = new ConnRef(router, 467);\n    ConnEnd srcPt467(Point(982, 557), 15);\n    connRef467->setSourceEndpoint(srcPt467);\n    ConnEnd dstPt467(Point(979.246, 558.918), 15);\n    connRef467->setDestEndpoint(dstPt467);\n    connRef467->setRoutingType((ConnType)2);\n\n    ConnRef *connRef468 = new ConnRef(router, 468);\n    ConnEnd srcPt468(Point(932, 596), 15);\n    connRef468->setSourceEndpoint(srcPt468);\n    ConnEnd dstPt468(Point(979.246, 676.918), 15);\n    connRef468->setDestEndpoint(dstPt468);\n    connRef468->setRoutingType((ConnType)2);\n\n    ConnRef *connRef469 = new ConnRef(router, 469);\n    ConnEnd srcPt469(Point(932, 576), 15);\n    connRef469->setSourceEndpoint(srcPt469);\n    ConnEnd dstPt469(Point(979.246, 558.918), 15);\n    connRef469->setDestEndpoint(dstPt469);\n    connRef469->setRoutingType((ConnType)2);\n\n    ConnRef *connRef470 = new ConnRef(router, 470);\n    ConnEnd srcPt470(Point(932, 577), 15);\n    connRef470->setSourceEndpoint(srcPt470);\n    ConnEnd dstPt470(Point(979.246, 676.918), 15);\n    connRef470->setDestEndpoint(dstPt470);\n    connRef470->setRoutingType((ConnType)2);\n\n    ConnRef *connRef471 = new ConnRef(router, 471);\n    ConnEnd srcPt471(Point(932, 557), 15);\n    connRef471->setSourceEndpoint(srcPt471);\n    ConnEnd dstPt471(Point(979.246, 558.918), 15);\n    connRef471->setDestEndpoint(dstPt471);\n    connRef471->setRoutingType((ConnType)2);\n\n    ConnRef *connRef472 = new ConnRef(router, 472);\n    ConnEnd srcPt472(Point(932, 505), 15);\n    connRef472->setSourceEndpoint(srcPt472);\n    ConnEnd dstPt472(Point(979.246, 558.918), 15);\n    connRef472->setDestEndpoint(dstPt472);\n    connRef472->setRoutingType((ConnType)2);\n\n    ConnRef *connRef473 = new ConnRef(router, 473);\n    ConnEnd srcPt473(Point(932, 485), 15);\n    connRef473->setSourceEndpoint(srcPt473);\n    ConnEnd dstPt473(Point(979.246, 447.955), 15);\n    connRef473->setDestEndpoint(dstPt473);\n    connRef473->setRoutingType((ConnType)2);\n\n    ConnRef *connRef474 = new ConnRef(router, 474);\n    ConnEnd srcPt474(Point(932, 486), 15);\n    connRef474->setSourceEndpoint(srcPt474);\n    ConnEnd dstPt474(Point(979.246, 558.918), 15);\n    connRef474->setDestEndpoint(dstPt474);\n    connRef474->setRoutingType((ConnType)2);\n\n    ConnRef *connRef475 = new ConnRef(router, 475);\n    ConnEnd srcPt475(Point(932, 466), 15);\n    connRef475->setSourceEndpoint(srcPt475);\n    ConnEnd dstPt475(Point(979.246, 447.955), 15);\n    connRef475->setDestEndpoint(dstPt475);\n    connRef475->setRoutingType((ConnType)2);\n\n    ConnRef *connRef476 = new ConnRef(router, 476);\n    ConnEnd srcPt476(Point(982, 414), 15);\n    connRef476->setSourceEndpoint(srcPt476);\n    ConnEnd dstPt476(Point(979.246, 447.955), 15);\n    connRef476->setDestEndpoint(dstPt476);\n    connRef476->setRoutingType((ConnType)2);\n\n    ConnRef *connRef477 = new ConnRef(router, 477);\n    ConnEnd srcPt477(Point(982, 394), 15);\n    connRef477->setSourceEndpoint(srcPt477);\n    ConnEnd dstPt477(Point(979.246, 332.918), 15);\n    connRef477->setDestEndpoint(dstPt477);\n    connRef477->setRoutingType((ConnType)2);\n\n    ConnRef *connRef478 = new ConnRef(router, 478);\n    ConnEnd srcPt478(Point(932, 414), 15);\n    connRef478->setSourceEndpoint(srcPt478);\n    ConnEnd dstPt478(Point(979.246, 447.955), 15);\n    connRef478->setDestEndpoint(dstPt478);\n    connRef478->setRoutingType((ConnType)2);\n\n    ConnRef *connRef479 = new ConnRef(router, 479);\n    ConnEnd srcPt479(Point(932, 394), 15);\n    connRef479->setSourceEndpoint(srcPt479);\n    ConnEnd dstPt479(Point(979.246, 332.918), 15);\n    connRef479->setDestEndpoint(dstPt479);\n    connRef479->setRoutingType((ConnType)2);\n\n    ConnRef *connRef480 = new ConnRef(router, 480);\n    ConnEnd srcPt480(Point(932, 395), 15);\n    connRef480->setSourceEndpoint(srcPt480);\n    ConnEnd dstPt480(Point(979.246, 447.955), 15);\n    connRef480->setDestEndpoint(dstPt480);\n    connRef480->setRoutingType((ConnType)2);\n\n    ConnRef *connRef481 = new ConnRef(router, 481);\n    ConnEnd srcPt481(Point(932, 375), 15);\n    connRef481->setSourceEndpoint(srcPt481);\n    ConnEnd dstPt481(Point(979.246, 332.918), 15);\n    connRef481->setDestEndpoint(dstPt481);\n    connRef481->setRoutingType((ConnType)2);\n\n    ConnRef *connRef482 = new ConnRef(router, 482);\n    ConnEnd srcPt482(Point(992, 300), 15);\n    connRef482->setSourceEndpoint(srcPt482);\n    ConnEnd dstPt482(Point(979.246, 332.918), 15);\n    connRef482->setDestEndpoint(dstPt482);\n    connRef482->setRoutingType((ConnType)2);\n\n    ConnRef *connRef483 = new ConnRef(router, 483);\n    ConnEnd srcPt483(Point(942, 309), 15);\n    connRef483->setSourceEndpoint(srcPt483);\n    ConnEnd dstPt483(Point(979.246, 332.918), 15);\n    connRef483->setDestEndpoint(dstPt483);\n    connRef483->setRoutingType((ConnType)2);\n\n    ConnRef *connRef484 = new ConnRef(router, 484);\n    ConnEnd srcPt484(Point(942, 290), 15);\n    connRef484->setSourceEndpoint(srcPt484);\n    ConnEnd dstPt484(Point(979.246, 332.918), 15);\n    connRef484->setDestEndpoint(dstPt484);\n    connRef484->setRoutingType((ConnType)2);\n\n    ConnRef *connRef485 = new ConnRef(router, 485);\n    ConnEnd srcPt485(Point(840, 557), 15);\n    connRef485->setSourceEndpoint(srcPt485);\n    ConnEnd dstPt485(Point(823.246, 558.918), 15);\n    connRef485->setDestEndpoint(dstPt485);\n    connRef485->setRoutingType((ConnType)2);\n\n    ConnRef *connRef486 = new ConnRef(router, 486);\n    ConnEnd srcPt486(Point(840, 577), 15);\n    connRef486->setSourceEndpoint(srcPt486);\n    ConnEnd dstPt486(Point(823.246, 676.918), 15);\n    connRef486->setDestEndpoint(dstPt486);\n    connRef486->setRoutingType((ConnType)2);\n\n    ConnRef *connRef487 = new ConnRef(router, 487);\n    ConnEnd srcPt487(Point(790, 576), 15);\n    connRef487->setSourceEndpoint(srcPt487);\n    ConnEnd dstPt487(Point(823.246, 558.918), 15);\n    connRef487->setDestEndpoint(dstPt487);\n    connRef487->setRoutingType((ConnType)2);\n\n    ConnRef *connRef488 = new ConnRef(router, 488);\n    ConnEnd srcPt488(Point(790, 596), 15);\n    connRef488->setSourceEndpoint(srcPt488);\n    ConnEnd dstPt488(Point(823.246, 676.918), 15);\n    connRef488->setDestEndpoint(dstPt488);\n    connRef488->setRoutingType((ConnType)2);\n\n    ConnRef *connRef489 = new ConnRef(router, 489);\n    ConnEnd srcPt489(Point(790, 557), 15);\n    connRef489->setSourceEndpoint(srcPt489);\n    ConnEnd dstPt489(Point(823.246, 558.918), 15);\n    connRef489->setDestEndpoint(dstPt489);\n    connRef489->setRoutingType((ConnType)2);\n\n    ConnRef *connRef490 = new ConnRef(router, 490);\n    ConnEnd srcPt490(Point(790, 577), 15);\n    connRef490->setSourceEndpoint(srcPt490);\n    ConnEnd dstPt490(Point(823.246, 676.918), 15);\n    connRef490->setDestEndpoint(dstPt490);\n    connRef490->setRoutingType((ConnType)2);\n\n    ConnRef *connRef491 = new ConnRef(router, 491);\n    ConnEnd srcPt491(Point(790, 485), 15);\n    connRef491->setSourceEndpoint(srcPt491);\n    ConnEnd dstPt491(Point(823.246, 447.955), 15);\n    connRef491->setDestEndpoint(dstPt491);\n    connRef491->setRoutingType((ConnType)2);\n\n    ConnRef *connRef492 = new ConnRef(router, 492);\n    ConnEnd srcPt492(Point(790, 505), 15);\n    connRef492->setSourceEndpoint(srcPt492);\n    ConnEnd dstPt492(Point(823.246, 558.918), 15);\n    connRef492->setDestEndpoint(dstPt492);\n    connRef492->setRoutingType((ConnType)2);\n\n    ConnRef *connRef493 = new ConnRef(router, 493);\n    ConnEnd srcPt493(Point(790, 466), 15);\n    connRef493->setSourceEndpoint(srcPt493);\n    ConnEnd dstPt493(Point(823.246, 447.955), 15);\n    connRef493->setDestEndpoint(dstPt493);\n    connRef493->setRoutingType((ConnType)2);\n\n    ConnRef *connRef494 = new ConnRef(router, 494);\n    ConnEnd srcPt494(Point(790, 486), 15);\n    connRef494->setSourceEndpoint(srcPt494);\n    ConnEnd dstPt494(Point(823.246, 558.918), 15);\n    connRef494->setDestEndpoint(dstPt494);\n    connRef494->setRoutingType((ConnType)2);\n\n    ConnRef *connRef495 = new ConnRef(router, 495);\n    ConnEnd srcPt495(Point(840, 394), 15);\n    connRef495->setSourceEndpoint(srcPt495);\n    ConnEnd dstPt495(Point(823.246, 332.918), 15);\n    connRef495->setDestEndpoint(dstPt495);\n    connRef495->setRoutingType((ConnType)2);\n\n    ConnRef *connRef496 = new ConnRef(router, 496);\n    ConnEnd srcPt496(Point(840, 414), 15);\n    connRef496->setSourceEndpoint(srcPt496);\n    ConnEnd dstPt496(Point(823.246, 447.955), 15);\n    connRef496->setDestEndpoint(dstPt496);\n    connRef496->setRoutingType((ConnType)2);\n\n    ConnRef *connRef497 = new ConnRef(router, 497);\n    ConnEnd srcPt497(Point(790, 394), 15);\n    connRef497->setSourceEndpoint(srcPt497);\n    ConnEnd dstPt497(Point(823.246, 332.918), 15);\n    connRef497->setDestEndpoint(dstPt497);\n    connRef497->setRoutingType((ConnType)2);\n\n    ConnRef *connRef498 = new ConnRef(router, 498);\n    ConnEnd srcPt498(Point(790, 414), 15);\n    connRef498->setSourceEndpoint(srcPt498);\n    ConnEnd dstPt498(Point(823.246, 447.955), 15);\n    connRef498->setDestEndpoint(dstPt498);\n    connRef498->setRoutingType((ConnType)2);\n\n    ConnRef *connRef499 = new ConnRef(router, 499);\n    ConnEnd srcPt499(Point(790, 375), 15);\n    connRef499->setSourceEndpoint(srcPt499);\n    ConnEnd dstPt499(Point(823.246, 332.918), 15);\n    connRef499->setDestEndpoint(dstPt499);\n    connRef499->setRoutingType((ConnType)2);\n\n    ConnRef *connRef500 = new ConnRef(router, 500);\n    ConnEnd srcPt500(Point(790, 395), 15);\n    connRef500->setSourceEndpoint(srcPt500);\n    ConnEnd dstPt500(Point(823.246, 447.955), 15);\n    connRef500->setDestEndpoint(dstPt500);\n    connRef500->setRoutingType((ConnType)2);\n\n    ConnRef *connRef501 = new ConnRef(router, 501);\n    ConnEnd srcPt501(Point(850, 300), 15);\n    connRef501->setSourceEndpoint(srcPt501);\n    ConnEnd dstPt501(Point(823.246, 332.918), 15);\n    connRef501->setDestEndpoint(dstPt501);\n    connRef501->setRoutingType((ConnType)2);\n\n    ConnRef *connRef502 = new ConnRef(router, 502);\n    ConnEnd srcPt502(Point(800, 309), 15);\n    connRef502->setSourceEndpoint(srcPt502);\n    ConnEnd dstPt502(Point(823.246, 332.918), 15);\n    connRef502->setDestEndpoint(dstPt502);\n    connRef502->setRoutingType((ConnType)2);\n\n    ConnRef *connRef503 = new ConnRef(router, 503);\n    ConnEnd srcPt503(Point(800, 290), 15);\n    connRef503->setSourceEndpoint(srcPt503);\n    ConnEnd dstPt503(Point(823.246, 332.918), 15);\n    connRef503->setDestEndpoint(dstPt503);\n    connRef503->setRoutingType((ConnType)2);\n\n    ConnRef *connRef504 = new ConnRef(router, 504);\n    ConnEnd srcPt504(Point(699, 577), 15);\n    connRef504->setSourceEndpoint(srcPt504);\n    ConnEnd dstPt504(Point(673.933, 676.918), 15);\n    connRef504->setDestEndpoint(dstPt504);\n    connRef504->setRoutingType((ConnType)2);\n\n    ConnRef *connRef505 = new ConnRef(router, 505);\n    ConnEnd srcPt505(Point(699, 557), 15);\n    connRef505->setSourceEndpoint(srcPt505);\n    ConnEnd dstPt505(Point(673.933, 558.918), 15);\n    connRef505->setDestEndpoint(dstPt505);\n    connRef505->setRoutingType((ConnType)2);\n\n    ConnRef *connRef506 = new ConnRef(router, 506);\n    ConnEnd srcPt506(Point(649, 596), 15);\n    connRef506->setSourceEndpoint(srcPt506);\n    ConnEnd dstPt506(Point(673.933, 676.918), 15);\n    connRef506->setDestEndpoint(dstPt506);\n    connRef506->setRoutingType((ConnType)2);\n\n    ConnRef *connRef507 = new ConnRef(router, 507);\n    ConnEnd srcPt507(Point(649, 576), 15);\n    connRef507->setSourceEndpoint(srcPt507);\n    ConnEnd dstPt507(Point(673.933, 558.918), 15);\n    connRef507->setDestEndpoint(dstPt507);\n    connRef507->setRoutingType((ConnType)2);\n\n    ConnRef *connRef508 = new ConnRef(router, 508);\n    ConnEnd srcPt508(Point(649, 577), 15);\n    connRef508->setSourceEndpoint(srcPt508);\n    ConnEnd dstPt508(Point(673.933, 676.918), 15);\n    connRef508->setDestEndpoint(dstPt508);\n    connRef508->setRoutingType((ConnType)2);\n\n    ConnRef *connRef509 = new ConnRef(router, 509);\n    ConnEnd srcPt509(Point(649, 557), 15);\n    connRef509->setSourceEndpoint(srcPt509);\n    ConnEnd dstPt509(Point(673.933, 558.918), 15);\n    connRef509->setDestEndpoint(dstPt509);\n    connRef509->setRoutingType((ConnType)2);\n\n    ConnRef *connRef510 = new ConnRef(router, 510);\n    ConnEnd srcPt510(Point(649, 505), 15);\n    connRef510->setSourceEndpoint(srcPt510);\n    ConnEnd dstPt510(Point(673.933, 558.918), 15);\n    connRef510->setDestEndpoint(dstPt510);\n    connRef510->setRoutingType((ConnType)2);\n\n    ConnRef *connRef511 = new ConnRef(router, 511);\n    ConnEnd srcPt511(Point(649, 485), 15);\n    connRef511->setSourceEndpoint(srcPt511);\n    ConnEnd dstPt511(Point(673.933, 447.955), 15);\n    connRef511->setDestEndpoint(dstPt511);\n    connRef511->setRoutingType((ConnType)2);\n\n    ConnRef *connRef512 = new ConnRef(router, 512);\n    ConnEnd srcPt512(Point(649, 486), 15);\n    connRef512->setSourceEndpoint(srcPt512);\n    ConnEnd dstPt512(Point(673.933, 558.918), 15);\n    connRef512->setDestEndpoint(dstPt512);\n    connRef512->setRoutingType((ConnType)2);\n\n    ConnRef *connRef513 = new ConnRef(router, 513);\n    ConnEnd srcPt513(Point(649, 466), 15);\n    connRef513->setSourceEndpoint(srcPt513);\n    ConnEnd dstPt513(Point(673.933, 447.955), 15);\n    connRef513->setDestEndpoint(dstPt513);\n    connRef513->setRoutingType((ConnType)2);\n\n    ConnRef *connRef514 = new ConnRef(router, 514);\n    ConnEnd srcPt514(Point(699, 414), 15);\n    connRef514->setSourceEndpoint(srcPt514);\n    ConnEnd dstPt514(Point(673.933, 447.955), 15);\n    connRef514->setDestEndpoint(dstPt514);\n    connRef514->setRoutingType((ConnType)2);\n\n    ConnRef *connRef515 = new ConnRef(router, 515);\n    ConnEnd srcPt515(Point(699, 394), 15);\n    connRef515->setSourceEndpoint(srcPt515);\n    ConnEnd dstPt515(Point(673.933, 332.918), 15);\n    connRef515->setDestEndpoint(dstPt515);\n    connRef515->setRoutingType((ConnType)2);\n\n    ConnRef *connRef516 = new ConnRef(router, 516);\n    ConnEnd srcPt516(Point(649, 414), 15);\n    connRef516->setSourceEndpoint(srcPt516);\n    ConnEnd dstPt516(Point(673.933, 447.955), 15);\n    connRef516->setDestEndpoint(dstPt516);\n    connRef516->setRoutingType((ConnType)2);\n\n    ConnRef *connRef517 = new ConnRef(router, 517);\n    ConnEnd srcPt517(Point(649, 394), 15);\n    connRef517->setSourceEndpoint(srcPt517);\n    ConnEnd dstPt517(Point(673.933, 332.918), 15);\n    connRef517->setDestEndpoint(dstPt517);\n    connRef517->setRoutingType((ConnType)2);\n\n    ConnRef *connRef518 = new ConnRef(router, 518);\n    ConnEnd srcPt518(Point(649, 395), 15);\n    connRef518->setSourceEndpoint(srcPt518);\n    ConnEnd dstPt518(Point(673.933, 447.955), 15);\n    connRef518->setDestEndpoint(dstPt518);\n    connRef518->setRoutingType((ConnType)2);\n\n    ConnRef *connRef519 = new ConnRef(router, 519);\n    ConnEnd srcPt519(Point(649, 375), 15);\n    connRef519->setSourceEndpoint(srcPt519);\n    ConnEnd dstPt519(Point(673.933, 332.918), 15);\n    connRef519->setDestEndpoint(dstPt519);\n    connRef519->setRoutingType((ConnType)2);\n\n    ConnRef *connRef520 = new ConnRef(router, 520);\n    ConnEnd srcPt520(Point(709, 300), 15);\n    connRef520->setSourceEndpoint(srcPt520);\n    ConnEnd dstPt520(Point(673.933, 332.918), 15);\n    connRef520->setDestEndpoint(dstPt520);\n    connRef520->setRoutingType((ConnType)2);\n\n    ConnRef *connRef521 = new ConnRef(router, 521);\n    ConnEnd srcPt521(Point(659, 309), 15);\n    connRef521->setSourceEndpoint(srcPt521);\n    ConnEnd dstPt521(Point(673.933, 332.918), 15);\n    connRef521->setDestEndpoint(dstPt521);\n    connRef521->setRoutingType((ConnType)2);\n\n    ConnRef *connRef522 = new ConnRef(router, 522);\n    ConnEnd srcPt522(Point(659, 290), 15);\n    connRef522->setSourceEndpoint(srcPt522);\n    ConnEnd dstPt522(Point(673.933, 332.918), 15);\n    connRef522->setDestEndpoint(dstPt522);\n    connRef522->setRoutingType((ConnType)2);\n\n    ConnRef *connRef523 = new ConnRef(router, 523);\n    ConnEnd srcPt523(Point(557, 557), 15);\n    connRef523->setSourceEndpoint(srcPt523);\n    ConnEnd dstPt523(Point(527.246, 558.918), 15);\n    connRef523->setDestEndpoint(dstPt523);\n    connRef523->setRoutingType((ConnType)2);\n\n    ConnRef *connRef524 = new ConnRef(router, 524);\n    ConnEnd srcPt524(Point(557, 577), 15);\n    connRef524->setSourceEndpoint(srcPt524);\n    ConnEnd dstPt524(Point(527.246, 676.918), 15);\n    connRef524->setDestEndpoint(dstPt524);\n    connRef524->setRoutingType((ConnType)2);\n\n    ConnRef *connRef525 = new ConnRef(router, 525);\n    ConnEnd srcPt525(Point(507, 576), 15);\n    connRef525->setSourceEndpoint(srcPt525);\n    ConnEnd dstPt525(Point(527.246, 558.918), 15);\n    connRef525->setDestEndpoint(dstPt525);\n    connRef525->setRoutingType((ConnType)2);\n\n    ConnRef *connRef526 = new ConnRef(router, 526);\n    ConnEnd srcPt526(Point(507, 596), 15);\n    connRef526->setSourceEndpoint(srcPt526);\n    ConnEnd dstPt526(Point(527.246, 676.918), 15);\n    connRef526->setDestEndpoint(dstPt526);\n    connRef526->setRoutingType((ConnType)2);\n\n    ConnRef *connRef527 = new ConnRef(router, 527);\n    ConnEnd srcPt527(Point(507, 557), 15);\n    connRef527->setSourceEndpoint(srcPt527);\n    ConnEnd dstPt527(Point(527.246, 558.918), 15);\n    connRef527->setDestEndpoint(dstPt527);\n    connRef527->setRoutingType((ConnType)2);\n\n    ConnRef *connRef528 = new ConnRef(router, 528);\n    ConnEnd srcPt528(Point(507, 577), 15);\n    connRef528->setSourceEndpoint(srcPt528);\n    ConnEnd dstPt528(Point(527.246, 676.918), 15);\n    connRef528->setDestEndpoint(dstPt528);\n    connRef528->setRoutingType((ConnType)2);\n\n    ConnRef *connRef529 = new ConnRef(router, 529);\n    ConnEnd srcPt529(Point(557, 477), 15);\n    connRef529->setSourceEndpoint(srcPt529);\n    ConnEnd dstPt529(Point(527.246, 447.955), 15);\n    connRef529->setDestEndpoint(dstPt529);\n    connRef529->setRoutingType((ConnType)2);\n\n    ConnRef *connRef530 = new ConnRef(router, 530);\n    ConnEnd srcPt530(Point(557, 497), 15);\n    connRef530->setSourceEndpoint(srcPt530);\n    ConnEnd dstPt530(Point(527.246, 558.918), 15);\n    connRef530->setDestEndpoint(dstPt530);\n    connRef530->setRoutingType((ConnType)2);\n\n    ConnRef *connRef531 = new ConnRef(router, 531);\n    ConnEnd srcPt531(Point(507, 485), 15);\n    connRef531->setSourceEndpoint(srcPt531);\n    ConnEnd dstPt531(Point(527.246, 447.955), 15);\n    connRef531->setDestEndpoint(dstPt531);\n    connRef531->setRoutingType((ConnType)2);\n\n    ConnRef *connRef532 = new ConnRef(router, 532);\n    ConnEnd srcPt532(Point(507, 505), 15);\n    connRef532->setSourceEndpoint(srcPt532);\n    ConnEnd dstPt532(Point(527.246, 558.918), 15);\n    connRef532->setDestEndpoint(dstPt532);\n    connRef532->setRoutingType((ConnType)2);\n\n    ConnRef *connRef533 = new ConnRef(router, 533);\n    ConnEnd srcPt533(Point(507, 466), 15);\n    connRef533->setSourceEndpoint(srcPt533);\n    ConnEnd dstPt533(Point(527.246, 447.955), 15);\n    connRef533->setDestEndpoint(dstPt533);\n    connRef533->setRoutingType((ConnType)2);\n\n    ConnRef *connRef534 = new ConnRef(router, 534);\n    ConnEnd srcPt534(Point(507, 486), 15);\n    connRef534->setSourceEndpoint(srcPt534);\n    ConnEnd dstPt534(Point(527.246, 558.918), 15);\n    connRef534->setDestEndpoint(dstPt534);\n    connRef534->setRoutingType((ConnType)2);\n\n    ConnRef *connRef535 = new ConnRef(router, 535);\n    ConnEnd srcPt535(Point(557, 394), 15);\n    connRef535->setSourceEndpoint(srcPt535);\n    ConnEnd dstPt535(Point(527.246, 332.918), 15);\n    connRef535->setDestEndpoint(dstPt535);\n    connRef535->setRoutingType((ConnType)2);\n\n    ConnRef *connRef536 = new ConnRef(router, 536);\n    ConnEnd srcPt536(Point(557, 414), 15);\n    connRef536->setSourceEndpoint(srcPt536);\n    ConnEnd dstPt536(Point(527.246, 447.955), 15);\n    connRef536->setDestEndpoint(dstPt536);\n    connRef536->setRoutingType((ConnType)2);\n\n    ConnRef *connRef537 = new ConnRef(router, 537);\n    ConnEnd srcPt537(Point(507, 394), 15);\n    connRef537->setSourceEndpoint(srcPt537);\n    ConnEnd dstPt537(Point(527.246, 332.918), 15);\n    connRef537->setDestEndpoint(dstPt537);\n    connRef537->setRoutingType((ConnType)2);\n\n    ConnRef *connRef538 = new ConnRef(router, 538);\n    ConnEnd srcPt538(Point(507, 414), 15);\n    connRef538->setSourceEndpoint(srcPt538);\n    ConnEnd dstPt538(Point(527.246, 447.955), 15);\n    connRef538->setDestEndpoint(dstPt538);\n    connRef538->setRoutingType((ConnType)2);\n\n    ConnRef *connRef539 = new ConnRef(router, 539);\n    ConnEnd srcPt539(Point(507, 375), 15);\n    connRef539->setSourceEndpoint(srcPt539);\n    ConnEnd dstPt539(Point(527.246, 332.918), 15);\n    connRef539->setDestEndpoint(dstPt539);\n    connRef539->setRoutingType((ConnType)2);\n\n    ConnRef *connRef540 = new ConnRef(router, 540);\n    ConnEnd srcPt540(Point(507, 395), 15);\n    connRef540->setSourceEndpoint(srcPt540);\n    ConnEnd dstPt540(Point(527.246, 447.955), 15);\n    connRef540->setDestEndpoint(dstPt540);\n    connRef540->setRoutingType((ConnType)2);\n\n    ConnRef *connRef541 = new ConnRef(router, 541);\n    ConnEnd srcPt541(Point(567, 300), 15);\n    connRef541->setSourceEndpoint(srcPt541);\n    ConnEnd dstPt541(Point(527.246, 332.918), 15);\n    connRef541->setDestEndpoint(dstPt541);\n    connRef541->setRoutingType((ConnType)2);\n\n    ConnRef *connRef542 = new ConnRef(router, 542);\n    ConnEnd srcPt542(Point(517, 309), 15);\n    connRef542->setSourceEndpoint(srcPt542);\n    ConnEnd dstPt542(Point(527.246, 332.918), 15);\n    connRef542->setDestEndpoint(dstPt542);\n    connRef542->setRoutingType((ConnType)2);\n\n    ConnRef *connRef543 = new ConnRef(router, 543);\n    ConnEnd srcPt543(Point(517, 290), 15);\n    connRef543->setSourceEndpoint(srcPt543);\n    ConnEnd dstPt543(Point(527.246, 332.918), 15);\n    connRef543->setDestEndpoint(dstPt543);\n    connRef543->setRoutingType((ConnType)2);\n\n    ConnRef *connRef544 = new ConnRef(router, 544);\n    ConnEnd srcPt544(Point(415, 577), 15);\n    connRef544->setSourceEndpoint(srcPt544);\n    ConnEnd dstPt544(Point(371.246, 676.918), 15);\n    connRef544->setDestEndpoint(dstPt544);\n    connRef544->setRoutingType((ConnType)2);\n\n    ConnRef *connRef545 = new ConnRef(router, 545);\n    ConnEnd srcPt545(Point(415, 557), 15);\n    connRef545->setSourceEndpoint(srcPt545);\n    ConnEnd dstPt545(Point(371.246, 558.918), 15);\n    connRef545->setDestEndpoint(dstPt545);\n    connRef545->setRoutingType((ConnType)2);\n\n    ConnRef *connRef546 = new ConnRef(router, 546);\n    ConnEnd srcPt546(Point(365, 596), 15);\n    connRef546->setSourceEndpoint(srcPt546);\n    ConnEnd dstPt546(Point(371.246, 676.918), 15);\n    connRef546->setDestEndpoint(dstPt546);\n    connRef546->setRoutingType((ConnType)2);\n\n    ConnRef *connRef547 = new ConnRef(router, 547);\n    ConnEnd srcPt547(Point(365, 576), 15);\n    connRef547->setSourceEndpoint(srcPt547);\n    ConnEnd dstPt547(Point(371.246, 558.918), 15);\n    connRef547->setDestEndpoint(dstPt547);\n    connRef547->setRoutingType((ConnType)2);\n\n    ConnRef *connRef548 = new ConnRef(router, 548);\n    ConnEnd srcPt548(Point(365, 577), 15);\n    connRef548->setSourceEndpoint(srcPt548);\n    ConnEnd dstPt548(Point(371.246, 676.918), 15);\n    connRef548->setDestEndpoint(dstPt548);\n    connRef548->setRoutingType((ConnType)2);\n\n    ConnRef *connRef549 = new ConnRef(router, 549);\n    ConnEnd srcPt549(Point(365, 557), 15);\n    connRef549->setSourceEndpoint(srcPt549);\n    ConnEnd dstPt549(Point(371.246, 558.918), 15);\n    connRef549->setDestEndpoint(dstPt549);\n    connRef549->setRoutingType((ConnType)2);\n\n    ConnRef *connRef550 = new ConnRef(router, 550);\n    ConnEnd srcPt550(Point(365, 505), 15);\n    connRef550->setSourceEndpoint(srcPt550);\n    ConnEnd dstPt550(Point(371.246, 558.918), 15);\n    connRef550->setDestEndpoint(dstPt550);\n    connRef550->setRoutingType((ConnType)2);\n\n    ConnRef *connRef551 = new ConnRef(router, 551);\n    ConnEnd srcPt551(Point(365, 485), 15);\n    connRef551->setSourceEndpoint(srcPt551);\n    ConnEnd dstPt551(Point(371.246, 447.955), 15);\n    connRef551->setDestEndpoint(dstPt551);\n    connRef551->setRoutingType((ConnType)2);\n\n    ConnRef *connRef552 = new ConnRef(router, 552);\n    ConnEnd srcPt552(Point(365, 486), 15);\n    connRef552->setSourceEndpoint(srcPt552);\n    ConnEnd dstPt552(Point(371.246, 558.918), 15);\n    connRef552->setDestEndpoint(dstPt552);\n    connRef552->setRoutingType((ConnType)2);\n\n    ConnRef *connRef553 = new ConnRef(router, 553);\n    ConnEnd srcPt553(Point(365, 466), 15);\n    connRef553->setSourceEndpoint(srcPt553);\n    ConnEnd dstPt553(Point(371.246, 447.955), 15);\n    connRef553->setDestEndpoint(dstPt553);\n    connRef553->setRoutingType((ConnType)2);\n\n    ConnRef *connRef554 = new ConnRef(router, 554);\n    ConnEnd srcPt554(Point(415, 414), 15);\n    connRef554->setSourceEndpoint(srcPt554);\n    ConnEnd dstPt554(Point(371.246, 447.955), 15);\n    connRef554->setDestEndpoint(dstPt554);\n    connRef554->setRoutingType((ConnType)2);\n\n    ConnRef *connRef555 = new ConnRef(router, 555);\n    ConnEnd srcPt555(Point(415, 394), 15);\n    connRef555->setSourceEndpoint(srcPt555);\n    ConnEnd dstPt555(Point(371.246, 332.918), 15);\n    connRef555->setDestEndpoint(dstPt555);\n    connRef555->setRoutingType((ConnType)2);\n\n    ConnRef *connRef556 = new ConnRef(router, 556);\n    ConnEnd srcPt556(Point(365, 414), 15);\n    connRef556->setSourceEndpoint(srcPt556);\n    ConnEnd dstPt556(Point(371.246, 447.955), 15);\n    connRef556->setDestEndpoint(dstPt556);\n    connRef556->setRoutingType((ConnType)2);\n\n    ConnRef *connRef557 = new ConnRef(router, 557);\n    ConnEnd srcPt557(Point(365, 394), 15);\n    connRef557->setSourceEndpoint(srcPt557);\n    ConnEnd dstPt557(Point(371.246, 332.918), 15);\n    connRef557->setDestEndpoint(dstPt557);\n    connRef557->setRoutingType((ConnType)2);\n\n    ConnRef *connRef558 = new ConnRef(router, 558);\n    ConnEnd srcPt558(Point(365, 395), 15);\n    connRef558->setSourceEndpoint(srcPt558);\n    ConnEnd dstPt558(Point(371.246, 447.955), 15);\n    connRef558->setDestEndpoint(dstPt558);\n    connRef558->setRoutingType((ConnType)2);\n\n    ConnRef *connRef559 = new ConnRef(router, 559);\n    ConnEnd srcPt559(Point(365, 375), 15);\n    connRef559->setSourceEndpoint(srcPt559);\n    ConnEnd dstPt559(Point(371.246, 332.918), 15);\n    connRef559->setDestEndpoint(dstPt559);\n    connRef559->setRoutingType((ConnType)2);\n\n    ConnRef *connRef560 = new ConnRef(router, 560);\n    ConnEnd srcPt560(Point(425, 300), 15);\n    connRef560->setSourceEndpoint(srcPt560);\n    ConnEnd dstPt560(Point(371.246, 332.918), 15);\n    connRef560->setDestEndpoint(dstPt560);\n    connRef560->setRoutingType((ConnType)2);\n\n    ConnRef *connRef561 = new ConnRef(router, 561);\n    ConnEnd srcPt561(Point(375, 309), 15);\n    connRef561->setSourceEndpoint(srcPt561);\n    ConnEnd dstPt561(Point(371.246, 332.918), 15);\n    connRef561->setDestEndpoint(dstPt561);\n    connRef561->setRoutingType((ConnType)2);\n\n    ConnRef *connRef562 = new ConnRef(router, 562);\n    ConnEnd srcPt562(Point(375, 290), 15);\n    connRef562->setSourceEndpoint(srcPt562);\n    ConnEnd dstPt562(Point(371.246, 332.918), 15);\n    connRef562->setDestEndpoint(dstPt562);\n    connRef562->setRoutingType((ConnType)2);\n\n    ConnRef *connRef563 = new ConnRef(router, 563);\n    ConnEnd srcPt563(Point(273, 557), 15);\n    connRef563->setSourceEndpoint(srcPt563);\n    ConnEnd dstPt563(Point(215.246, 558.918), 15);\n    connRef563->setDestEndpoint(dstPt563);\n    connRef563->setRoutingType((ConnType)2);\n\n    ConnRef *connRef564 = new ConnRef(router, 564);\n    ConnEnd srcPt564(Point(273, 577), 15);\n    connRef564->setSourceEndpoint(srcPt564);\n    ConnEnd dstPt564(Point(215.246, 676.918), 15);\n    connRef564->setDestEndpoint(dstPt564);\n    connRef564->setRoutingType((ConnType)2);\n\n    ConnRef *connRef565 = new ConnRef(router, 565);\n    ConnEnd srcPt565(Point(223, 576), 15);\n    connRef565->setSourceEndpoint(srcPt565);\n    ConnEnd dstPt565(Point(215.246, 558.918), 15);\n    connRef565->setDestEndpoint(dstPt565);\n    connRef565->setRoutingType((ConnType)2);\n\n    ConnRef *connRef566 = new ConnRef(router, 566);\n    ConnEnd srcPt566(Point(223, 596), 15);\n    connRef566->setSourceEndpoint(srcPt566);\n    ConnEnd dstPt566(Point(215.246, 676.918), 15);\n    connRef566->setDestEndpoint(dstPt566);\n    connRef566->setRoutingType((ConnType)2);\n\n    ConnRef *connRef567 = new ConnRef(router, 567);\n    ConnEnd srcPt567(Point(223, 557), 15);\n    connRef567->setSourceEndpoint(srcPt567);\n    ConnEnd dstPt567(Point(215.246, 558.918), 15);\n    connRef567->setDestEndpoint(dstPt567);\n    connRef567->setRoutingType((ConnType)2);\n\n    ConnRef *connRef568 = new ConnRef(router, 568);\n    ConnEnd srcPt568(Point(223, 577), 15);\n    connRef568->setSourceEndpoint(srcPt568);\n    ConnEnd dstPt568(Point(215.246, 676.918), 15);\n    connRef568->setDestEndpoint(dstPt568);\n    connRef568->setRoutingType((ConnType)2);\n\n    ConnRef *connRef569 = new ConnRef(router, 569);\n    ConnEnd srcPt569(Point(223, 485), 15);\n    connRef569->setSourceEndpoint(srcPt569);\n    ConnEnd dstPt569(Point(215.246, 447.955), 15);\n    connRef569->setDestEndpoint(dstPt569);\n    connRef569->setRoutingType((ConnType)2);\n\n    ConnRef *connRef570 = new ConnRef(router, 570);\n    ConnEnd srcPt570(Point(223, 505), 15);\n    connRef570->setSourceEndpoint(srcPt570);\n    ConnEnd dstPt570(Point(215.246, 558.918), 15);\n    connRef570->setDestEndpoint(dstPt570);\n    connRef570->setRoutingType((ConnType)2);\n\n    ConnRef *connRef571 = new ConnRef(router, 571);\n    ConnEnd srcPt571(Point(223, 466), 15);\n    connRef571->setSourceEndpoint(srcPt571);\n    ConnEnd dstPt571(Point(215.246, 447.955), 15);\n    connRef571->setDestEndpoint(dstPt571);\n    connRef571->setRoutingType((ConnType)2);\n\n    ConnRef *connRef572 = new ConnRef(router, 572);\n    ConnEnd srcPt572(Point(223, 486), 15);\n    connRef572->setSourceEndpoint(srcPt572);\n    ConnEnd dstPt572(Point(215.246, 558.918), 15);\n    connRef572->setDestEndpoint(dstPt572);\n    connRef572->setRoutingType((ConnType)2);\n\n    ConnRef *connRef573 = new ConnRef(router, 573);\n    ConnEnd srcPt573(Point(273, 394), 15);\n    connRef573->setSourceEndpoint(srcPt573);\n    ConnEnd dstPt573(Point(215.246, 332.918), 15);\n    connRef573->setDestEndpoint(dstPt573);\n    connRef573->setRoutingType((ConnType)2);\n\n    ConnRef *connRef574 = new ConnRef(router, 574);\n    ConnEnd srcPt574(Point(273, 414), 15);\n    connRef574->setSourceEndpoint(srcPt574);\n    ConnEnd dstPt574(Point(215.246, 447.955), 15);\n    connRef574->setDestEndpoint(dstPt574);\n    connRef574->setRoutingType((ConnType)2);\n\n    ConnRef *connRef575 = new ConnRef(router, 575);\n    ConnEnd srcPt575(Point(223, 394), 15);\n    connRef575->setSourceEndpoint(srcPt575);\n    ConnEnd dstPt575(Point(215.246, 332.918), 15);\n    connRef575->setDestEndpoint(dstPt575);\n    connRef575->setRoutingType((ConnType)2);\n\n    ConnRef *connRef576 = new ConnRef(router, 576);\n    ConnEnd srcPt576(Point(223, 414), 15);\n    connRef576->setSourceEndpoint(srcPt576);\n    ConnEnd dstPt576(Point(215.246, 447.955), 15);\n    connRef576->setDestEndpoint(dstPt576);\n    connRef576->setRoutingType((ConnType)2);\n\n    ConnRef *connRef577 = new ConnRef(router, 577);\n    ConnEnd srcPt577(Point(223, 375), 15);\n    connRef577->setSourceEndpoint(srcPt577);\n    ConnEnd dstPt577(Point(215.246, 332.918), 15);\n    connRef577->setDestEndpoint(dstPt577);\n    connRef577->setRoutingType((ConnType)2);\n\n    ConnRef *connRef578 = new ConnRef(router, 578);\n    ConnEnd srcPt578(Point(223, 395), 15);\n    connRef578->setSourceEndpoint(srcPt578);\n    ConnEnd dstPt578(Point(215.246, 447.955), 15);\n    connRef578->setDestEndpoint(dstPt578);\n    connRef578->setRoutingType((ConnType)2);\n\n    ConnRef *connRef579 = new ConnRef(router, 579);\n    ConnEnd srcPt579(Point(273, 290), 15);\n    connRef579->setSourceEndpoint(srcPt579);\n    ConnEnd dstPt579(Point(215.246, 332.918), 15);\n    connRef579->setDestEndpoint(dstPt579);\n    connRef579->setRoutingType((ConnType)2);\n\n    ConnRef *connRef580 = new ConnRef(router, 580);\n    ConnEnd srcPt580(Point(233, 290), 15);\n    connRef580->setSourceEndpoint(srcPt580);\n    ConnEnd dstPt580(Point(215.246, 332.918), 15);\n    connRef580->setDestEndpoint(dstPt580);\n    connRef580->setRoutingType((ConnType)2);\n\n    ConnRef *connRef581 = new ConnRef(router, 581);\n    ConnEnd srcPt581(Point(233, 309), 15);\n    connRef581->setSourceEndpoint(srcPt581);\n    ConnEnd dstPt581(Point(215.246, 332.918), 15);\n    connRef581->setDestEndpoint(dstPt581);\n    connRef581->setRoutingType((ConnType)2);\n\n    ConnRef *connRef582 = new ConnRef(router, 582);\n    ConnEnd srcPt582(Point(132, 557), 15);\n    connRef582->setSourceEndpoint(srcPt582);\n    ConnEnd dstPt582(Point(57.2456, 558.918), 15);\n    connRef582->setDestEndpoint(dstPt582);\n    connRef582->setRoutingType((ConnType)2);\n\n    ConnRef *connRef583 = new ConnRef(router, 583);\n    ConnEnd srcPt583(Point(132, 577), 15);\n    connRef583->setSourceEndpoint(srcPt583);\n    ConnEnd dstPt583(Point(57.2456, 676.918), 15);\n    connRef583->setDestEndpoint(dstPt583);\n    connRef583->setRoutingType((ConnType)2);\n\n    ConnRef *connRef584 = new ConnRef(router, 584);\n    ConnEnd srcPt584(Point(82, 576), 15);\n    connRef584->setSourceEndpoint(srcPt584);\n    ConnEnd dstPt584(Point(57.2456, 558.918), 15);\n    connRef584->setDestEndpoint(dstPt584);\n    connRef584->setRoutingType((ConnType)2);\n\n    ConnRef *connRef585 = new ConnRef(router, 585);\n    ConnEnd srcPt585(Point(82, 596), 15);\n    connRef585->setSourceEndpoint(srcPt585);\n    ConnEnd dstPt585(Point(57.2456, 676.918), 15);\n    connRef585->setDestEndpoint(dstPt585);\n    connRef585->setRoutingType((ConnType)2);\n\n    ConnRef *connRef586 = new ConnRef(router, 586);\n    ConnEnd srcPt586(Point(82, 557), 15);\n    connRef586->setSourceEndpoint(srcPt586);\n    ConnEnd dstPt586(Point(57.2456, 558.918), 15);\n    connRef586->setDestEndpoint(dstPt586);\n    connRef586->setRoutingType((ConnType)2);\n\n    ConnRef *connRef587 = new ConnRef(router, 587);\n    ConnEnd srcPt587(Point(82, 577), 15);\n    connRef587->setSourceEndpoint(srcPt587);\n    ConnEnd dstPt587(Point(57.2456, 676.918), 15);\n    connRef587->setDestEndpoint(dstPt587);\n    connRef587->setRoutingType((ConnType)2);\n\n    ConnRef *connRef588 = new ConnRef(router, 588);\n    ConnEnd srcPt588(Point(82, 485), 15);\n    connRef588->setSourceEndpoint(srcPt588);\n    ConnEnd dstPt588(Point(57.2456, 447.955), 15);\n    connRef588->setDestEndpoint(dstPt588);\n    connRef588->setRoutingType((ConnType)2);\n\n    ConnRef *connRef589 = new ConnRef(router, 589);\n    ConnEnd srcPt589(Point(82, 505), 15);\n    connRef589->setSourceEndpoint(srcPt589);\n    ConnEnd dstPt589(Point(57.2456, 558.918), 15);\n    connRef589->setDestEndpoint(dstPt589);\n    connRef589->setRoutingType((ConnType)2);\n\n    ConnRef *connRef590 = new ConnRef(router, 590);\n    ConnEnd srcPt590(Point(82, 466), 15);\n    connRef590->setSourceEndpoint(srcPt590);\n    ConnEnd dstPt590(Point(57.2456, 447.955), 15);\n    connRef590->setDestEndpoint(dstPt590);\n    connRef590->setRoutingType((ConnType)2);\n\n    ConnRef *connRef591 = new ConnRef(router, 591);\n    ConnEnd srcPt591(Point(82, 486), 15);\n    connRef591->setSourceEndpoint(srcPt591);\n    ConnEnd dstPt591(Point(57.2456, 558.918), 15);\n    connRef591->setDestEndpoint(dstPt591);\n    connRef591->setRoutingType((ConnType)2);\n\n    ConnRef *connRef592 = new ConnRef(router, 592);\n    ConnEnd srcPt592(Point(132, 394), 15);\n    connRef592->setSourceEndpoint(srcPt592);\n    ConnEnd dstPt592(Point(57.2456, 332.918), 15);\n    connRef592->setDestEndpoint(dstPt592);\n    connRef592->setRoutingType((ConnType)2);\n\n    ConnRef *connRef593 = new ConnRef(router, 593);\n    ConnEnd srcPt593(Point(132, 414), 15);\n    connRef593->setSourceEndpoint(srcPt593);\n    ConnEnd dstPt593(Point(57.2456, 447.955), 15);\n    connRef593->setDestEndpoint(dstPt593);\n    connRef593->setRoutingType((ConnType)2);\n\n    ConnRef *connRef594 = new ConnRef(router, 594);\n    ConnEnd srcPt594(Point(82, 394), 15);\n    connRef594->setSourceEndpoint(srcPt594);\n    ConnEnd dstPt594(Point(57.2456, 332.918), 15);\n    connRef594->setDestEndpoint(dstPt594);\n    connRef594->setRoutingType((ConnType)2);\n\n    ConnRef *connRef595 = new ConnRef(router, 595);\n    ConnEnd srcPt595(Point(82, 414), 15);\n    connRef595->setSourceEndpoint(srcPt595);\n    ConnEnd dstPt595(Point(57.2456, 447.955), 15);\n    connRef595->setDestEndpoint(dstPt595);\n    connRef595->setRoutingType((ConnType)2);\n\n    ConnRef *connRef596 = new ConnRef(router, 596);\n    ConnEnd srcPt596(Point(82, 375), 15);\n    connRef596->setSourceEndpoint(srcPt596);\n    ConnEnd dstPt596(Point(57.2456, 332.918), 15);\n    connRef596->setDestEndpoint(dstPt596);\n    connRef596->setRoutingType((ConnType)2);\n\n    ConnRef *connRef597 = new ConnRef(router, 597);\n    ConnEnd srcPt597(Point(82, 395), 15);\n    connRef597->setSourceEndpoint(srcPt597);\n    ConnEnd dstPt597(Point(57.2456, 447.955), 15);\n    connRef597->setDestEndpoint(dstPt597);\n    connRef597->setRoutingType((ConnType)2);\n\n    ConnRef *connRef598 = new ConnRef(router, 598);\n    ConnEnd srcPt598(Point(72, 309), 15);\n    connRef598->setSourceEndpoint(srcPt598);\n    ConnEnd dstPt598(Point(57.2456, 332.918), 15);\n    connRef598->setDestEndpoint(dstPt598);\n    connRef598->setRoutingType((ConnType)2);\n\n    ConnRef *connRef599 = new ConnRef(router, 599);\n    ConnEnd srcPt599(Point(72, 290), 15);\n    connRef599->setSourceEndpoint(srcPt599);\n    ConnEnd dstPt599(Point(57.2456, 332.918), 15);\n    connRef599->setDestEndpoint(dstPt599);\n    connRef599->setRoutingType((ConnType)2);\n\n    ConnRef *connRef600 = new ConnRef(router, 600);\n    ConnEnd srcPt600(Point(245, 207), 15);\n    connRef600->setSourceEndpoint(srcPt600);\n    ConnEnd dstPt600(Point(197.246, 96.9179), 15);\n    connRef600->setDestEndpoint(dstPt600);\n    connRef600->setRoutingType((ConnType)2);\n\n    ConnRef *connRef601 = new ConnRef(router, 601);\n    ConnEnd srcPt601(Point(245, 227), 15);\n    connRef601->setSourceEndpoint(srcPt601);\n    ConnEnd dstPt601(Point(197.246, 160.918), 15);\n    connRef601->setDestEndpoint(dstPt601);\n    connRef601->setRoutingType((ConnType)2);\n\n    ConnRef *connRef602 = new ConnRef(router, 602);\n    ConnEnd srcPt602(Point(195, 217), 15);\n    connRef602->setSourceEndpoint(srcPt602);\n    ConnEnd dstPt602(Point(197.246, 96.9179), 15);\n    connRef602->setDestEndpoint(dstPt602);\n    connRef602->setRoutingType((ConnType)2);\n\n    ConnRef *connRef603 = new ConnRef(router, 603);\n    ConnEnd srcPt603(Point(195, 237), 15);\n    connRef603->setSourceEndpoint(srcPt603);\n    ConnEnd dstPt603(Point(197.246, 160.918), 15);\n    connRef603->setDestEndpoint(dstPt603);\n    connRef603->setRoutingType((ConnType)2);\n\n    ConnRef *connRef604 = new ConnRef(router, 604);\n    ConnEnd srcPt604(Point(195, 198), 15);\n    connRef604->setSourceEndpoint(srcPt604);\n    ConnEnd dstPt604(Point(197.246, 96.9179), 15);\n    connRef604->setDestEndpoint(dstPt604);\n    connRef604->setRoutingType((ConnType)2);\n\n    ConnRef *connRef605 = new ConnRef(router, 605);\n    ConnEnd srcPt605(Point(195, 218), 15);\n    connRef605->setSourceEndpoint(srcPt605);\n    ConnEnd dstPt605(Point(197.246, 160.918), 15);\n    connRef605->setDestEndpoint(dstPt605);\n    connRef605->setRoutingType((ConnType)2);\n\n    ConnRef *connRef606 = new ConnRef(router, 606);\n    ConnEnd srcPt606(Point(82, 214), 15);\n    connRef606->setSourceEndpoint(srcPt606);\n    ConnEnd dstPt606(Point(57.2456, 160.918), 15);\n    connRef606->setDestEndpoint(dstPt606);\n    connRef606->setRoutingType((ConnType)2);\n\n    ConnRef *connRef607 = new ConnRef(router, 607);\n    ConnEnd srcPt607(Point(82, 195), 15);\n    connRef607->setSourceEndpoint(srcPt607);\n    ConnEnd dstPt607(Point(57.2456, 160.918), 15);\n    connRef607->setDestEndpoint(dstPt607);\n    connRef607->setRoutingType((ConnType)2);\n\n    ConnRef *connRef608 = new ConnRef(router, 608);\n    ConnEnd srcPt608(Point(82, 176), 15);\n    connRef608->setSourceEndpoint(srcPt608);\n    ConnEnd dstPt608(Point(57.2456, 160.918), 15);\n    connRef608->setDestEndpoint(dstPt608);\n    connRef608->setRoutingType((ConnType)2);\n\n    ConnRef *connRef609 = new ConnRef(router, 609);\n    ConnEnd srcPt609(Point(319, 135), 15);\n    connRef609->setSourceEndpoint(srcPt609);\n    ConnEnd dstPt609(Point(319.219, -51.0821), 15);\n    connRef609->setDestEndpoint(dstPt609);\n    connRef609->setRoutingType((ConnType)2);\n\n    ConnRef *connRef610 = new ConnRef(router, 610);\n    ConnEnd srcPt610(Point(220, 135), 15);\n    connRef610->setSourceEndpoint(srcPt610);\n    ConnEnd dstPt610(Point(57.2456, 125.987), 15);\n    connRef610->setDestEndpoint(dstPt610);\n    connRef610->setRoutingType((ConnType)2);\n\n    ConnRef *connRef611 = new ConnRef(router, 611);\n    ConnEnd srcPt611(Point(220, 155), 15);\n    connRef611->setSourceEndpoint(srcPt611);\n    ConnEnd dstPt611(Point(319.219, -7.08205), 15);\n    connRef611->setDestEndpoint(dstPt611);\n    connRef611->setRoutingType((ConnType)2);\n\n    ConnRef *connRef612 = new ConnRef(router, 612);\n    ConnEnd srcPt612(Point(220, 155), 15);\n    connRef612->setSourceEndpoint(srcPt612);\n    ConnEnd dstPt612(Point(197.246, 96.9179), 15);\n    connRef612->setDestEndpoint(dstPt612);\n    connRef612->setRoutingType((ConnType)2);\n\n    ConnRef *connRef613 = new ConnRef(router, 613);\n    ConnEnd srcPt613(Point(220, 135), 15);\n    connRef613->setSourceEndpoint(srcPt613);\n    ConnEnd dstPt613(Point(319.219, -51.0821), 15);\n    connRef613->setDestEndpoint(dstPt613);\n    connRef613->setRoutingType((ConnType)2);\n\n    ConnRef *connRef614 = new ConnRef(router, 614);\n    ConnEnd srcPt614(Point(197.246, 160.918), 15);\n    connRef614->setSourceEndpoint(srcPt614);\n    ConnEnd dstPt614(Point(82, 318), 15);\n    connRef614->setDestEndpoint(dstPt614);\n    connRef614->setRoutingType((ConnType)2);\n\n    ConnRef *connRef615 = new ConnRef(router, 615);\n    ConnEnd srcPt615(Point(197.246, 160.918), 15);\n    connRef615->setSourceEndpoint(srcPt615);\n    ConnEnd dstPt615(Point(213, 328), 15);\n    connRef615->setDestEndpoint(dstPt615);\n    connRef615->setRoutingType((ConnType)2);\n\n    ConnRef *connRef616 = new ConnRef(router, 616);\n    ConnEnd srcPt616(Point(197.246, 160.918), 15);\n    connRef616->setSourceEndpoint(srcPt616);\n    ConnEnd dstPt616(Point(355, 328), 15);\n    connRef616->setDestEndpoint(dstPt616);\n    connRef616->setRoutingType((ConnType)2);\n\n    ConnRef *connRef617 = new ConnRef(router, 617);\n    ConnEnd srcPt617(Point(197.246, 160.918), 15);\n    connRef617->setSourceEndpoint(srcPt617);\n    ConnEnd dstPt617(Point(497, 328), 15);\n    connRef617->setDestEndpoint(dstPt617);\n    connRef617->setRoutingType((ConnType)2);\n\n    ConnRef *connRef618 = new ConnRef(router, 618);\n    ConnEnd srcPt618(Point(197.246, 160.918), 15);\n    connRef618->setSourceEndpoint(srcPt618);\n    ConnEnd dstPt618(Point(639, 328), 15);\n    connRef618->setDestEndpoint(dstPt618);\n    connRef618->setRoutingType((ConnType)2);\n\n    ConnRef *connRef619 = new ConnRef(router, 619);\n    ConnEnd srcPt619(Point(197.246, 160.918), 15);\n    connRef619->setSourceEndpoint(srcPt619);\n    ConnEnd dstPt619(Point(780, 328), 15);\n    connRef619->setDestEndpoint(dstPt619);\n    connRef619->setRoutingType((ConnType)2);\n\n    ConnRef *connRef620 = new ConnRef(router, 620);\n    ConnEnd srcPt620(Point(197.246, 160.918), 15);\n    connRef620->setSourceEndpoint(srcPt620);\n    ConnEnd dstPt620(Point(922, 328), 15);\n    connRef620->setDestEndpoint(dstPt620);\n    connRef620->setRoutingType((ConnType)2);\n\n    ConnRef *connRef621 = new ConnRef(router, 621);\n    ConnEnd srcPt621(Point(1149, 309), 15);\n    connRef621->setSourceEndpoint(srcPt621);\n    ConnEnd dstPt621(Point(197.246, 160.918), 15);\n    connRef621->setDestEndpoint(dstPt621);\n    connRef621->setRoutingType((ConnType)2);\n\n    ConnRef *connRef622 = new ConnRef(router, 622);\n    ConnEnd srcPt622(Point(1199, 300), 15);\n    connRef622->setSourceEndpoint(srcPt622);\n    ConnEnd dstPt622(Point(197.246, 160.918), 15);\n    connRef622->setDestEndpoint(dstPt622);\n    connRef622->setRoutingType((ConnType)2);\n\n    ConnRef *connRef623 = new ConnRef(router, 623);\n    ConnEnd srcPt623(Point(197.246, 160.918), 15);\n    connRef623->setSourceEndpoint(srcPt623);\n    ConnEnd dstPt623(Point(132, 280), 15);\n    connRef623->setDestEndpoint(dstPt623);\n    connRef623->setRoutingType((ConnType)2);\n\n    ConnRef *connRef624 = new ConnRef(router, 624);\n    ConnEnd srcPt624(Point(197.246, 160.918), 15);\n    connRef624->setSourceEndpoint(srcPt624);\n    ConnEnd dstPt624(Point(132, 299), 15);\n    connRef624->setDestEndpoint(dstPt624);\n    connRef624->setRoutingType((ConnType)2);\n\n    ConnRef *connRef625 = new ConnRef(router, 625);\n    ConnEnd srcPt625(Point(57.2456, 160.918), 15);\n    connRef625->setSourceEndpoint(srcPt625);\n    ConnEnd dstPt625(Point(82, 318), 15);\n    connRef625->setDestEndpoint(dstPt625);\n    connRef625->setRoutingType((ConnType)2);\n\n    ConnRef *connRef626 = new ConnRef(router, 626);\n    ConnEnd srcPt626(Point(57.2456, 160.918), 15);\n    connRef626->setSourceEndpoint(srcPt626);\n    ConnEnd dstPt626(Point(132, 280), 15);\n    connRef626->setDestEndpoint(dstPt626);\n    connRef626->setRoutingType((ConnType)2);\n\n    ConnRef *connRef627 = new ConnRef(router, 627);\n    ConnEnd srcPt627(Point(57.2456, 160.918), 15);\n    connRef627->setSourceEndpoint(srcPt627);\n    ConnEnd dstPt627(Point(132, 299), 15);\n    connRef627->setDestEndpoint(dstPt627);\n    connRef627->setRoutingType((ConnType)2);\n\n    ConnRef *connRef628 = new ConnRef(router, 628);\n    ConnEnd srcPt628(Point(72, 423), 15);\n    connRef628->setSourceEndpoint(srcPt628);\n    ConnEnd dstPt628(Point(57.2456, 332.918), 15);\n    connRef628->setDestEndpoint(dstPt628);\n    connRef628->setRoutingType((ConnType)2);\n\n    ConnRef *connRef629 = new ConnRef(router, 629);\n    ConnEnd srcPt629(Point(92, 423), 15);\n    connRef629->setSourceEndpoint(srcPt629);\n    ConnEnd dstPt629(Point(57.2456, 447.955), 15);\n    connRef629->setDestEndpoint(dstPt629);\n    connRef629->setRoutingType((ConnType)2);\n\n    ConnRef *connRef630 = new ConnRef(router, 630);\n    ConnEnd srcPt630(Point(82, 504), 15);\n    connRef630->setSourceEndpoint(srcPt630);\n    ConnEnd dstPt630(Point(57.2456, 447.955), 15);\n    connRef630->setDestEndpoint(dstPt630);\n    connRef630->setRoutingType((ConnType)2);\n\n    ConnRef *connRef631 = new ConnRef(router, 631);\n    ConnEnd srcPt631(Point(132, 595), 15);\n    connRef631->setSourceEndpoint(srcPt631);\n    ConnEnd dstPt631(Point(57.2456, 558.918), 15);\n    connRef631->setDestEndpoint(dstPt631);\n    connRef631->setRoutingType((ConnType)2);\n\n    ConnRef *connRef632 = new ConnRef(router, 632);\n    ConnEnd srcPt632(Point(132, 576), 15);\n    connRef632->setSourceEndpoint(srcPt632);\n    ConnEnd dstPt632(Point(57.2456, 558.918), 15);\n    connRef632->setDestEndpoint(dstPt632);\n    connRef632->setRoutingType((ConnType)2);\n\n    ConnRef *connRef633 = new ConnRef(router, 633);\n    ConnEnd srcPt633(Point(82, 595), 15);\n    connRef633->setSourceEndpoint(srcPt633);\n    ConnEnd dstPt633(Point(57.2456, 558.918), 15);\n    connRef633->setDestEndpoint(dstPt633);\n    connRef633->setRoutingType((ConnType)2);\n\n    ConnRef *connRef634 = new ConnRef(router, 634);\n    ConnEnd srcPt634(Point(57.2456, 676.918), 15);\n    connRef634->setSourceEndpoint(srcPt634);\n    ConnEnd dstPt634(Point(213, 328), 15);\n    connRef634->setDestEndpoint(dstPt634);\n    connRef634->setRoutingType((ConnType)2);\n\n    ConnRef *connRef635 = new ConnRef(router, 635);\n    ConnEnd srcPt635(Point(25.2456, 96.9179), 15);\n    connRef635->setSourceEndpoint(srcPt635);\n    ConnEnd dstPt635(Point(132, 175), 15);\n    connRef635->setDestEndpoint(dstPt635);\n    connRef635->setRoutingType((ConnType)2);\n\n    ConnRef *connRef636 = new ConnRef(router, 636);\n    ConnEnd srcPt636(Point(25.2456, 96.9179), 15);\n    connRef636->setSourceEndpoint(srcPt636);\n    ConnEnd dstPt636(Point(82, 194), 15);\n    connRef636->setDestEndpoint(dstPt636);\n    connRef636->setRoutingType((ConnType)2);\n\n    ConnRef *connRef637 = new ConnRef(router, 637);\n    ConnEnd srcPt637(Point(25.2456, 96.9179), 15);\n    connRef637->setSourceEndpoint(srcPt637);\n    ConnEnd dstPt637(Point(82, 175), 15);\n    connRef637->setDestEndpoint(dstPt637);\n    connRef637->setRoutingType((ConnType)2);\n\n    ConnRef *connRef638 = new ConnRef(router, 638);\n    ConnEnd srcPt638(Point(25.2456, 96.9179), 15);\n    connRef638->setSourceEndpoint(srcPt638);\n    ConnEnd dstPt638(Point(82, 156), 15);\n    connRef638->setDestEndpoint(dstPt638);\n    connRef638->setRoutingType((ConnType)2);\n\n    ConnRef *connRef639 = new ConnRef(router, 639);\n    ConnEnd srcPt639(Point(223, 413), 15);\n    connRef639->setSourceEndpoint(srcPt639);\n    ConnEnd dstPt639(Point(215.246, 332.918), 15);\n    connRef639->setDestEndpoint(dstPt639);\n    connRef639->setRoutingType((ConnType)2);\n\n    ConnRef *connRef640 = new ConnRef(router, 640);\n    ConnEnd srcPt640(Point(223, 504), 15);\n    connRef640->setSourceEndpoint(srcPt640);\n    ConnEnd dstPt640(Point(215.246, 447.955), 15);\n    connRef640->setDestEndpoint(dstPt640);\n    connRef640->setRoutingType((ConnType)2);\n\n    ConnRef *connRef641 = new ConnRef(router, 641);\n    ConnEnd srcPt641(Point(273, 576), 15);\n    connRef641->setSourceEndpoint(srcPt641);\n    ConnEnd dstPt641(Point(215.246, 558.918), 15);\n    connRef641->setDestEndpoint(dstPt641);\n    connRef641->setRoutingType((ConnType)2);\n\n    ConnRef *connRef642 = new ConnRef(router, 642);\n    ConnEnd srcPt642(Point(273, 595), 15);\n    connRef642->setSourceEndpoint(srcPt642);\n    ConnEnd dstPt642(Point(215.246, 558.918), 15);\n    connRef642->setDestEndpoint(dstPt642);\n    connRef642->setRoutingType((ConnType)2);\n\n    ConnRef *connRef643 = new ConnRef(router, 643);\n    ConnEnd srcPt643(Point(223, 595), 15);\n    connRef643->setSourceEndpoint(srcPt643);\n    ConnEnd dstPt643(Point(215.246, 558.918), 15);\n    connRef643->setDestEndpoint(dstPt643);\n    connRef643->setRoutingType((ConnType)2);\n\n    ConnRef *connRef644 = new ConnRef(router, 644);\n    ConnEnd srcPt644(Point(215.246, 676.918), 15);\n    connRef644->setSourceEndpoint(srcPt644);\n    ConnEnd dstPt644(Point(355, 328), 15);\n    connRef644->setDestEndpoint(dstPt644);\n    connRef644->setRoutingType((ConnType)2);\n\n    ConnRef *connRef645 = new ConnRef(router, 645);\n    ConnEnd srcPt645(Point(371.246, 676.918), 15);\n    connRef645->setSourceEndpoint(srcPt645);\n    ConnEnd dstPt645(Point(497, 328), 15);\n    connRef645->setDestEndpoint(dstPt645);\n    connRef645->setRoutingType((ConnType)2);\n\n    ConnRef *connRef646 = new ConnRef(router, 646);\n    ConnEnd srcPt646(Point(415, 576), 15);\n    connRef646->setSourceEndpoint(srcPt646);\n    ConnEnd dstPt646(Point(371.246, 558.918), 15);\n    connRef646->setDestEndpoint(dstPt646);\n    connRef646->setRoutingType((ConnType)2);\n\n    ConnRef *connRef647 = new ConnRef(router, 647);\n    ConnEnd srcPt647(Point(415, 595), 15);\n    connRef647->setSourceEndpoint(srcPt647);\n    ConnEnd dstPt647(Point(371.246, 558.918), 15);\n    connRef647->setDestEndpoint(dstPt647);\n    connRef647->setRoutingType((ConnType)2);\n\n    ConnRef *connRef648 = new ConnRef(router, 648);\n    ConnEnd srcPt648(Point(365, 595), 15);\n    connRef648->setSourceEndpoint(srcPt648);\n    ConnEnd dstPt648(Point(371.246, 558.918), 15);\n    connRef648->setDestEndpoint(dstPt648);\n    connRef648->setRoutingType((ConnType)2);\n\n    ConnRef *connRef649 = new ConnRef(router, 649);\n    ConnEnd srcPt649(Point(365, 504), 15);\n    connRef649->setSourceEndpoint(srcPt649);\n    ConnEnd dstPt649(Point(371.246, 447.955), 15);\n    connRef649->setDestEndpoint(dstPt649);\n    connRef649->setRoutingType((ConnType)2);\n\n    ConnRef *connRef650 = new ConnRef(router, 650);\n    ConnEnd srcPt650(Point(365, 413), 15);\n    connRef650->setSourceEndpoint(srcPt650);\n    ConnEnd dstPt650(Point(371.246, 332.918), 15);\n    connRef650->setDestEndpoint(dstPt650);\n    connRef650->setRoutingType((ConnType)2);\n\n    ConnRef *connRef651 = new ConnRef(router, 651);\n    ConnEnd srcPt651(Point(507, 413), 15);\n    connRef651->setSourceEndpoint(srcPt651);\n    ConnEnd dstPt651(Point(527.246, 332.918), 15);\n    connRef651->setDestEndpoint(dstPt651);\n    connRef651->setRoutingType((ConnType)2);\n\n    ConnRef *connRef652 = new ConnRef(router, 652);\n    ConnEnd srcPt652(Point(507, 504), 15);\n    connRef652->setSourceEndpoint(srcPt652);\n    ConnEnd dstPt652(Point(527.246, 447.955), 15);\n    connRef652->setDestEndpoint(dstPt652);\n    connRef652->setRoutingType((ConnType)2);\n\n    ConnRef *connRef653 = new ConnRef(router, 653);\n    ConnEnd srcPt653(Point(557, 576), 15);\n    connRef653->setSourceEndpoint(srcPt653);\n    ConnEnd dstPt653(Point(527.246, 558.918), 15);\n    connRef653->setDestEndpoint(dstPt653);\n    connRef653->setRoutingType((ConnType)2);\n\n    ConnRef *connRef654 = new ConnRef(router, 654);\n    ConnEnd srcPt654(Point(557, 595), 15);\n    connRef654->setSourceEndpoint(srcPt654);\n    ConnEnd dstPt654(Point(527.246, 558.918), 15);\n    connRef654->setDestEndpoint(dstPt654);\n    connRef654->setRoutingType((ConnType)2);\n\n    ConnRef *connRef655 = new ConnRef(router, 655);\n    ConnEnd srcPt655(Point(507, 595), 15);\n    connRef655->setSourceEndpoint(srcPt655);\n    ConnEnd dstPt655(Point(527.246, 558.918), 15);\n    connRef655->setDestEndpoint(dstPt655);\n    connRef655->setRoutingType((ConnType)2);\n\n    ConnRef *connRef656 = new ConnRef(router, 656);\n    ConnEnd srcPt656(Point(527.246, 676.918), 15);\n    connRef656->setSourceEndpoint(srcPt656);\n    ConnEnd dstPt656(Point(639, 328), 15);\n    connRef656->setDestEndpoint(dstPt656);\n    connRef656->setRoutingType((ConnType)2);\n\n    ConnRef *connRef657 = new ConnRef(router, 657);\n    ConnEnd srcPt657(Point(673.933, 676.918), 15);\n    connRef657->setSourceEndpoint(srcPt657);\n    ConnEnd dstPt657(Point(780, 328), 15);\n    connRef657->setDestEndpoint(dstPt657);\n    connRef657->setRoutingType((ConnType)2);\n\n    ConnRef *connRef658 = new ConnRef(router, 658);\n    ConnEnd srcPt658(Point(699, 576), 15);\n    connRef658->setSourceEndpoint(srcPt658);\n    ConnEnd dstPt658(Point(673.933, 558.918), 15);\n    connRef658->setDestEndpoint(dstPt658);\n    connRef658->setRoutingType((ConnType)2);\n\n    ConnRef *connRef659 = new ConnRef(router, 659);\n    ConnEnd srcPt659(Point(699, 595), 15);\n    connRef659->setSourceEndpoint(srcPt659);\n    ConnEnd dstPt659(Point(673.933, 558.918), 15);\n    connRef659->setDestEndpoint(dstPt659);\n    connRef659->setRoutingType((ConnType)2);\n\n    ConnRef *connRef660 = new ConnRef(router, 660);\n    ConnEnd srcPt660(Point(649, 595), 15);\n    connRef660->setSourceEndpoint(srcPt660);\n    ConnEnd dstPt660(Point(673.933, 558.918), 15);\n    connRef660->setDestEndpoint(dstPt660);\n    connRef660->setRoutingType((ConnType)2);\n\n    ConnRef *connRef661 = new ConnRef(router, 661);\n    ConnEnd srcPt661(Point(649, 504), 15);\n    connRef661->setSourceEndpoint(srcPt661);\n    ConnEnd dstPt661(Point(673.933, 447.955), 15);\n    connRef661->setDestEndpoint(dstPt661);\n    connRef661->setRoutingType((ConnType)2);\n\n    ConnRef *connRef662 = new ConnRef(router, 662);\n    ConnEnd srcPt662(Point(649, 413), 15);\n    connRef662->setSourceEndpoint(srcPt662);\n    ConnEnd dstPt662(Point(673.933, 332.918), 15);\n    connRef662->setDestEndpoint(dstPt662);\n    connRef662->setRoutingType((ConnType)2);\n\n    ConnRef *connRef663 = new ConnRef(router, 663);\n    ConnEnd srcPt663(Point(790, 413), 15);\n    connRef663->setSourceEndpoint(srcPt663);\n    ConnEnd dstPt663(Point(823.246, 332.918), 15);\n    connRef663->setDestEndpoint(dstPt663);\n    connRef663->setRoutingType((ConnType)2);\n\n    ConnRef *connRef664 = new ConnRef(router, 664);\n    ConnEnd srcPt664(Point(790, 504), 15);\n    connRef664->setSourceEndpoint(srcPt664);\n    ConnEnd dstPt664(Point(823.246, 447.955), 15);\n    connRef664->setDestEndpoint(dstPt664);\n    connRef664->setRoutingType((ConnType)2);\n\n    ConnRef *connRef665 = new ConnRef(router, 665);\n    ConnEnd srcPt665(Point(840, 576), 15);\n    connRef665->setSourceEndpoint(srcPt665);\n    ConnEnd dstPt665(Point(823.246, 558.918), 15);\n    connRef665->setDestEndpoint(dstPt665);\n    connRef665->setRoutingType((ConnType)2);\n\n    ConnRef *connRef666 = new ConnRef(router, 666);\n    ConnEnd srcPt666(Point(840, 595), 15);\n    connRef666->setSourceEndpoint(srcPt666);\n    ConnEnd dstPt666(Point(823.246, 558.918), 15);\n    connRef666->setDestEndpoint(dstPt666);\n    connRef666->setRoutingType((ConnType)2);\n\n    ConnRef *connRef667 = new ConnRef(router, 667);\n    ConnEnd srcPt667(Point(790, 595), 15);\n    connRef667->setSourceEndpoint(srcPt667);\n    ConnEnd dstPt667(Point(823.246, 558.918), 15);\n    connRef667->setDestEndpoint(dstPt667);\n    connRef667->setRoutingType((ConnType)2);\n\n    ConnRef *connRef668 = new ConnRef(router, 668);\n    ConnEnd srcPt668(Point(823.246, 676.918), 15);\n    connRef668->setSourceEndpoint(srcPt668);\n    ConnEnd dstPt668(Point(922, 328), 15);\n    connRef668->setDestEndpoint(dstPt668);\n    connRef668->setRoutingType((ConnType)2);\n\n    ConnRef *connRef669 = new ConnRef(router, 669);\n    ConnEnd srcPt669(Point(1149, 309), 15);\n    connRef669->setSourceEndpoint(srcPt669);\n    ConnEnd dstPt669(Point(979.246, 676.918), 15);\n    connRef669->setDestEndpoint(dstPt669);\n    connRef669->setRoutingType((ConnType)2);\n\n    ConnRef *connRef670 = new ConnRef(router, 670);\n    ConnEnd srcPt670(Point(979.246, 676.918), 15);\n    connRef670->setSourceEndpoint(srcPt670);\n    ConnEnd dstPt670(Point(932, 667), 15);\n    connRef670->setDestEndpoint(dstPt670);\n    connRef670->setRoutingType((ConnType)2);\n\n    ConnRef *connRef671 = new ConnRef(router, 671);\n    ConnEnd srcPt671(Point(979.246, 676.918), 15);\n    connRef671->setSourceEndpoint(srcPt671);\n    ConnEnd dstPt671(Point(932, 686), 15);\n    connRef671->setDestEndpoint(dstPt671);\n    connRef671->setRoutingType((ConnType)2);\n\n    ConnRef *connRef672 = new ConnRef(router, 672);\n    ConnEnd srcPt672(Point(1199, 300), 15);\n    connRef672->setSourceEndpoint(srcPt672);\n    ConnEnd dstPt672(Point(979.246, 676.918), 15);\n    connRef672->setDestEndpoint(dstPt672);\n    connRef672->setRoutingType((ConnType)2);\n\n    ConnRef *connRef673 = new ConnRef(router, 673);\n    ConnEnd srcPt673(Point(982, 576), 15);\n    connRef673->setSourceEndpoint(srcPt673);\n    ConnEnd dstPt673(Point(979.246, 558.918), 15);\n    connRef673->setDestEndpoint(dstPt673);\n    connRef673->setRoutingType((ConnType)2);\n\n    ConnRef *connRef674 = new ConnRef(router, 674);\n    ConnEnd srcPt674(Point(982, 595), 15);\n    connRef674->setSourceEndpoint(srcPt674);\n    ConnEnd dstPt674(Point(979.246, 558.918), 15);\n    connRef674->setDestEndpoint(dstPt674);\n    connRef674->setRoutingType((ConnType)2);\n\n    ConnRef *connRef675 = new ConnRef(router, 675);\n    ConnEnd srcPt675(Point(932, 595), 15);\n    connRef675->setSourceEndpoint(srcPt675);\n    ConnEnd dstPt675(Point(979.246, 558.918), 15);\n    connRef675->setDestEndpoint(dstPt675);\n    connRef675->setRoutingType((ConnType)2);\n\n    ConnRef *connRef676 = new ConnRef(router, 676);\n    ConnEnd srcPt676(Point(932, 504), 15);\n    connRef676->setSourceEndpoint(srcPt676);\n    ConnEnd dstPt676(Point(979.246, 447.955), 15);\n    connRef676->setDestEndpoint(dstPt676);\n    connRef676->setRoutingType((ConnType)2);\n\n    ConnRef *connRef677 = new ConnRef(router, 677);\n    ConnEnd srcPt677(Point(932, 413), 15);\n    connRef677->setSourceEndpoint(srcPt677);\n    ConnEnd dstPt677(Point(979.246, 332.918), 15);\n    connRef677->setDestEndpoint(dstPt677);\n    connRef677->setRoutingType((ConnType)2);\n\n    ConnRef *connRef678 = new ConnRef(router, 678);\n    ConnEnd srcPt678(Point(82, 338), 15);\n    connRef678->setSourceEndpoint(srcPt678);\n    ConnEnd dstPt678(Point(57.2456, 332.918), 15);\n    connRef678->setDestEndpoint(dstPt678);\n    connRef678->setRoutingType((ConnType)2);\n\n    ConnRef *connRef679 = new ConnRef(router, 679);\n    ConnEnd srcPt679(Point(233, 328), 15);\n    connRef679->setSourceEndpoint(srcPt679);\n    ConnEnd dstPt679(Point(215.246, 332.918), 15);\n    connRef679->setDestEndpoint(dstPt679);\n    connRef679->setRoutingType((ConnType)2);\n\n    ConnRef *connRef680 = new ConnRef(router, 680);\n    ConnEnd srcPt680(Point(375, 328), 15);\n    connRef680->setSourceEndpoint(srcPt680);\n    ConnEnd dstPt680(Point(371.246, 332.918), 15);\n    connRef680->setDestEndpoint(dstPt680);\n    connRef680->setRoutingType((ConnType)2);\n\n    ConnRef *connRef681 = new ConnRef(router, 681);\n    ConnEnd srcPt681(Point(517, 328), 15);\n    connRef681->setSourceEndpoint(srcPt681);\n    ConnEnd dstPt681(Point(527.246, 332.918), 15);\n    connRef681->setDestEndpoint(dstPt681);\n    connRef681->setRoutingType((ConnType)2);\n\n    ConnRef *connRef682 = new ConnRef(router, 682);\n    ConnEnd srcPt682(Point(659, 328), 15);\n    connRef682->setSourceEndpoint(srcPt682);\n    ConnEnd dstPt682(Point(673.933, 332.918), 15);\n    connRef682->setDestEndpoint(dstPt682);\n    connRef682->setRoutingType((ConnType)2);\n\n    ConnRef *connRef683 = new ConnRef(router, 683);\n    ConnEnd srcPt683(Point(800, 328), 15);\n    connRef683->setSourceEndpoint(srcPt683);\n    ConnEnd dstPt683(Point(823.246, 332.918), 15);\n    connRef683->setDestEndpoint(dstPt683);\n    connRef683->setRoutingType((ConnType)2);\n\n    ConnRef *connRef684 = new ConnRef(router, 684);\n    ConnEnd srcPt684(Point(942, 328), 15);\n    connRef684->setSourceEndpoint(srcPt684);\n    ConnEnd dstPt684(Point(979.246, 332.918), 15);\n    connRef684->setDestEndpoint(dstPt684);\n    connRef684->setRoutingType((ConnType)2);\n\n    ConnRef *connRef685 = new ConnRef(router, 685);\n    ConnEnd srcPt685(Point(223, 433), 15);\n    connRef685->setSourceEndpoint(srcPt685);\n    ConnEnd dstPt685(Point(215.246, 447.955), 15);\n    connRef685->setDestEndpoint(dstPt685);\n    connRef685->setRoutingType((ConnType)2);\n\n    ConnRef *connRef686 = new ConnRef(router, 686);\n    ConnEnd srcPt686(Point(365, 433), 15);\n    connRef686->setSourceEndpoint(srcPt686);\n    ConnEnd dstPt686(Point(371.246, 447.955), 15);\n    connRef686->setDestEndpoint(dstPt686);\n    connRef686->setRoutingType((ConnType)2);\n\n    ConnRef *connRef687 = new ConnRef(router, 687);\n    ConnEnd srcPt687(Point(507, 433), 15);\n    connRef687->setSourceEndpoint(srcPt687);\n    ConnEnd dstPt687(Point(527.246, 447.955), 15);\n    connRef687->setDestEndpoint(dstPt687);\n    connRef687->setRoutingType((ConnType)2);\n\n    ConnRef *connRef688 = new ConnRef(router, 688);\n    ConnEnd srcPt688(Point(790, 433), 15);\n    connRef688->setSourceEndpoint(srcPt688);\n    ConnEnd dstPt688(Point(823.246, 447.955), 15);\n    connRef688->setDestEndpoint(dstPt688);\n    connRef688->setRoutingType((ConnType)2);\n\n    ConnRef *connRef689 = new ConnRef(router, 689);\n    ConnEnd srcPt689(Point(932, 433), 15);\n    connRef689->setSourceEndpoint(srcPt689);\n    ConnEnd dstPt689(Point(979.246, 447.955), 15);\n    connRef689->setDestEndpoint(dstPt689);\n    connRef689->setRoutingType((ConnType)2);\n\n    ConnRef *connRef690 = new ConnRef(router, 690);\n    ConnEnd srcPt690(Point(649, 433), 15);\n    connRef690->setSourceEndpoint(srcPt690);\n    ConnEnd dstPt690(Point(673.933, 447.955), 15);\n    connRef690->setDestEndpoint(dstPt690);\n    connRef690->setRoutingType((ConnType)2);\n\n    ConnRef *connRef691 = new ConnRef(router, 691);\n    ConnEnd srcPt691(Point(82, 524), 15);\n    connRef691->setSourceEndpoint(srcPt691);\n    ConnEnd dstPt691(Point(57.2456, 558.918), 15);\n    connRef691->setDestEndpoint(dstPt691);\n    connRef691->setRoutingType((ConnType)2);\n\n    ConnRef *connRef692 = new ConnRef(router, 692);\n    ConnEnd srcPt692(Point(223, 524), 15);\n    connRef692->setSourceEndpoint(srcPt692);\n    ConnEnd dstPt692(Point(215.246, 558.918), 15);\n    connRef692->setDestEndpoint(dstPt692);\n    connRef692->setRoutingType((ConnType)2);\n\n    ConnRef *connRef693 = new ConnRef(router, 693);\n    ConnEnd srcPt693(Point(365, 524), 15);\n    connRef693->setSourceEndpoint(srcPt693);\n    ConnEnd dstPt693(Point(371.246, 558.918), 15);\n    connRef693->setDestEndpoint(dstPt693);\n    connRef693->setRoutingType((ConnType)2);\n\n    ConnRef *connRef694 = new ConnRef(router, 694);\n    ConnEnd srcPt694(Point(507, 524), 15);\n    connRef694->setSourceEndpoint(srcPt694);\n    ConnEnd dstPt694(Point(527.246, 558.918), 15);\n    connRef694->setDestEndpoint(dstPt694);\n    connRef694->setRoutingType((ConnType)2);\n\n    ConnRef *connRef695 = new ConnRef(router, 695);\n    ConnEnd srcPt695(Point(649, 524), 15);\n    connRef695->setSourceEndpoint(srcPt695);\n    ConnEnd dstPt695(Point(673.933, 558.918), 15);\n    connRef695->setDestEndpoint(dstPt695);\n    connRef695->setRoutingType((ConnType)2);\n\n    ConnRef *connRef696 = new ConnRef(router, 696);\n    ConnEnd srcPt696(Point(790, 524), 15);\n    connRef696->setSourceEndpoint(srcPt696);\n    ConnEnd dstPt696(Point(823.246, 558.918), 15);\n    connRef696->setDestEndpoint(dstPt696);\n    connRef696->setRoutingType((ConnType)2);\n\n    ConnRef *connRef697 = new ConnRef(router, 697);\n    ConnEnd srcPt697(Point(932, 524), 15);\n    connRef697->setSourceEndpoint(srcPt697);\n    ConnEnd dstPt697(Point(979.246, 558.918), 15);\n    connRef697->setDestEndpoint(dstPt697);\n    connRef697->setRoutingType((ConnType)2);\n\n    ConnRef *connRef698 = new ConnRef(router, 698);\n    ConnEnd srcPt698(Point(82, 615), 15);\n    connRef698->setSourceEndpoint(srcPt698);\n    ConnEnd dstPt698(Point(57.2456, 676.918), 15);\n    connRef698->setDestEndpoint(dstPt698);\n    connRef698->setRoutingType((ConnType)2);\n\n    ConnRef *connRef699 = new ConnRef(router, 699);\n    ConnEnd srcPt699(Point(223, 615), 15);\n    connRef699->setSourceEndpoint(srcPt699);\n    ConnEnd dstPt699(Point(215.246, 676.918), 15);\n    connRef699->setDestEndpoint(dstPt699);\n    connRef699->setRoutingType((ConnType)2);\n\n    ConnRef *connRef700 = new ConnRef(router, 700);\n    ConnEnd srcPt700(Point(365, 615), 15);\n    connRef700->setSourceEndpoint(srcPt700);\n    ConnEnd dstPt700(Point(371.246, 676.918), 15);\n    connRef700->setDestEndpoint(dstPt700);\n    connRef700->setRoutingType((ConnType)2);\n\n    ConnRef *connRef701 = new ConnRef(router, 701);\n    ConnEnd srcPt701(Point(507, 615), 15);\n    connRef701->setSourceEndpoint(srcPt701);\n    ConnEnd dstPt701(Point(527.246, 676.918), 15);\n    connRef701->setDestEndpoint(dstPt701);\n    connRef701->setRoutingType((ConnType)2);\n\n    ConnRef *connRef702 = new ConnRef(router, 702);\n    ConnEnd srcPt702(Point(649, 615), 15);\n    connRef702->setSourceEndpoint(srcPt702);\n    ConnEnd dstPt702(Point(673.933, 676.918), 15);\n    connRef702->setDestEndpoint(dstPt702);\n    connRef702->setRoutingType((ConnType)2);\n\n    ConnRef *connRef703 = new ConnRef(router, 703);\n    ConnEnd srcPt703(Point(790, 615), 15);\n    connRef703->setSourceEndpoint(srcPt703);\n    ConnEnd dstPt703(Point(823.246, 676.918), 15);\n    connRef703->setDestEndpoint(dstPt703);\n    connRef703->setRoutingType((ConnType)2);\n\n    ConnRef *connRef704 = new ConnRef(router, 704);\n    ConnEnd srcPt704(Point(932, 615), 15);\n    connRef704->setSourceEndpoint(srcPt704);\n    ConnEnd dstPt704(Point(979.246, 676.918), 15);\n    connRef704->setDestEndpoint(dstPt704);\n    connRef704->setRoutingType((ConnType)2);\n\n    ConnRef *connRef705 = new ConnRef(router, 705);\n    ConnEnd srcPt705(Point(1169, 309), 15);\n    connRef705->setSourceEndpoint(srcPt705);\n    ConnEnd dstPt705(Point(1203.25, 332.918), 15);\n    connRef705->setDestEndpoint(dstPt705);\n    connRef705->setRoutingType((ConnType)2);\n\n    ConnRef *connRef706 = new ConnRef(router, 706);\n    ConnEnd srcPt706(Point(1159, 414), 15);\n    connRef706->setSourceEndpoint(srcPt706);\n    ConnEnd dstPt706(Point(1203.25, 447.955), 15);\n    connRef706->setDestEndpoint(dstPt706);\n    connRef706->setRoutingType((ConnType)2);\n\n    ConnRef *connRef707 = new ConnRef(router, 707);\n    ConnEnd srcPt707(Point(1159, 505), 15);\n    connRef707->setSourceEndpoint(srcPt707);\n    ConnEnd dstPt707(Point(1203.25, 558.918), 15);\n    connRef707->setDestEndpoint(dstPt707);\n    connRef707->setRoutingType((ConnType)2);\n\n    ConnRef *connRef708 = new ConnRef(router, 708);\n    ConnEnd srcPt708(Point(1159, 595), 15);\n    connRef708->setSourceEndpoint(srcPt708);\n    ConnEnd dstPt708(Point(1203.25, 676.918), 15);\n    connRef708->setDestEndpoint(dstPt708);\n    connRef708->setRoutingType((ConnType)2);\n\n    ConnRef *connRef709 = new ConnRef(router, 709);\n    ConnEnd srcPt709(Point(932, 687), 15);\n    connRef709->setSourceEndpoint(srcPt709);\n    ConnEnd dstPt709(Point(979.246, 750.918), 15);\n    connRef709->setDestEndpoint(dstPt709);\n    connRef709->setRoutingType((ConnType)2);\n\n    ConnRef *connRef710 = new ConnRef(router, 710);\n    ConnEnd srcPt710(Point(932, 706), 15);\n    connRef710->setSourceEndpoint(srcPt710);\n    ConnEnd dstPt710(Point(979.246, 750.918), 15);\n    connRef710->setDestEndpoint(dstPt710);\n    connRef710->setRoutingType((ConnType)2);\n\n    ConnRef *connRef711 = new ConnRef(router, 711);\n    ConnEnd srcPt711(Point(1159, 687), 15);\n    connRef711->setSourceEndpoint(srcPt711);\n    ConnEnd dstPt711(Point(1203.25, 750.918), 15);\n    connRef711->setDestEndpoint(dstPt711);\n    connRef711->setRoutingType((ConnType)2);\n\n    ConnRef *connRef712 = new ConnRef(router, 712);\n    ConnEnd srcPt712(Point(1219, 300), 15);\n    connRef712->setSourceEndpoint(srcPt712);\n    ConnEnd dstPt712(Point(1203.25, 332.918), 15);\n    connRef712->setDestEndpoint(dstPt712);\n    connRef712->setRoutingType((ConnType)2);\n\n    ConnRef *connRef713 = new ConnRef(router, 713);\n    ConnEnd srcPt713(Point(1209, 605), 15);\n    connRef713->setSourceEndpoint(srcPt713);\n    ConnEnd dstPt713(Point(1203.25, 676.918), 15);\n    connRef713->setDestEndpoint(dstPt713);\n    connRef713->setRoutingType((ConnType)2);\n\n    ConnRef *connRef714 = new ConnRef(router, 714);\n    ConnEnd srcPt714(Point(132, 300), 15);\n    connRef714->setSourceEndpoint(srcPt714);\n    ConnEnd dstPt714(Point(57.2456, 332.918), 15);\n    connRef714->setDestEndpoint(dstPt714);\n    connRef714->setRoutingType((ConnType)2);\n\n    router->processTransaction();\n    router->outputDiagram(\"output/reallyslowrouting\");\n    delete router;\n    return 0;\n};\n"
  },
  {
    "path": "cola/libavoid/tests/removeJunctions01.cpp",
    "content": "#include \"libavoid/libavoid.h\"\nusing namespace Avoid;\nint main(void) {\n    Router *router = new Router(OrthogonalRouting);\n    router->setRoutingParameter((RoutingParameter)0, 2);\n    router->setRoutingParameter((RoutingParameter)1, 0);\n    router->setRoutingParameter((RoutingParameter)2, 0);\n    router->setRoutingParameter((RoutingParameter)3, 4000);\n    router->setRoutingParameter((RoutingParameter)4, 9000);\n    router->setRoutingParameter((RoutingParameter)5, 0);\n    router->setRoutingParameter((RoutingParameter)6, 0);\n    router->setRoutingParameter((RoutingParameter)7, 16);\n    router->setRoutingParameter((RoutingParameter)8, 0);\n    router->setRoutingOption((RoutingOption)0, false);\n    router->setRoutingOption((RoutingOption)1, true);\n    router->setRoutingOption((RoutingOption)2, false);\n    router->setRoutingOption((RoutingOption)3, false);\n    router->setRoutingOption((RoutingOption)4, true);\n    router->setRoutingOption((RoutingOption)5, false);\n    router->setRoutingOption((RoutingOption)6, true);\n    Polygon polygon;\n    ConnEnd srcPt;\n    ConnEnd dstPt;\n    ConnEnd heConnPt;\n    PolyLine newRoute;\n    ShapeConnectionPin *connPin = nullptr;\n\n    // shapeRef1\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(450, 330);\n    polygon.ps[1] = Point(490, 330);\n    polygon.ps[2] = Point(490, 450);\n    polygon.ps[3] = Point(450, 450);\n    ShapeRef *shapeRef1 = new ShapeRef(router, polygon, 1);\n    connPin = new ShapeConnectionPin(shapeRef1, 1, 0, 0.333333, true, 10, (ConnDirFlags) 0);\n    connPin->setExclusive(false);\n    connPin = new ShapeConnectionPin(shapeRef1, 2, 0, 0.666667, true, 10, (ConnDirFlags) 0);\n    connPin->setExclusive(false);\n    connPin = new ShapeConnectionPin(shapeRef1, 3, 1, 0.5, true, 10, (ConnDirFlags) 0);\n    connPin->setExclusive(false);\n    connPin = new ShapeConnectionPin(shapeRef1, 4, 0.5, 0, true, 10, (ConnDirFlags) 0);\n    connPin->setExclusive(false);\n\n    // shapeRef8\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(502, 237.5);\n    polygon.ps[1] = Point(502, 262.5);\n    polygon.ps[2] = Point(438, 262.5);\n    polygon.ps[3] = Point(438, 237.5);\n    ShapeRef *shapeRef8 = new ShapeRef(router, polygon, 8);\n    connPin = new ShapeConnectionPin(shapeRef8, 1, 0, 0.5, true, 1, (ConnDirFlags) 0);\n    connPin = new ShapeConnectionPin(shapeRef8, 2, 1, 0.5, true, 1, (ConnDirFlags) 0);\n    connPin = new ShapeConnectionPin(shapeRef8, 3, 0.5, 1, true, 1, (ConnDirFlags) 0);\n    connPin = new ShapeConnectionPin(shapeRef8, 4, 0.5, 0, true, 1, (ConnDirFlags) 0);\n\n    JunctionRef *junctionRef6 = new JunctionRef(router, Point(470, 300), 6);\n    /*\n    // This may be useful if junction pins are modified.\n    connPin = new ShapeConnectionPin(junctionRef6, 2147483646, (ConnDirFlags) 15);\n    */\n\n    // connRef9\n    ConnRef *connRef9 = new ConnRef(router, 9);\n    srcPt = ConnEnd(junctionRef6);\n    connRef9->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(shapeRef8, 3);\n    connRef9->setDestEndpoint(dstPt);\n    connRef9->setRoutingType((ConnType)2);\n\n#if 1\n    // connRef10 - WITH BUG\n    ConnRef *connRef10 = new ConnRef(router, 10);\n    srcPt = ConnEnd(junctionRef6);\n    connRef10->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(shapeRef1, 4);\n    connRef10->setDestEndpoint(dstPt);\n    connRef10->setRoutingType((ConnType)2);\n#else\n    // connRef10 - WITHOUT BUG\n    ConnRef *connRef10 = new ConnRef(router, 10);\n    srcPt = ConnEnd(shapeRef1, 4);\n    connRef10->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(junctionRef6);\n    connRef10->setDestEndpoint(dstPt);\n    connRef10->setRoutingType((ConnType)2);\n#endif\n\n    //    router->deleteConnector(connRef5);\n    router->processTransaction();\n\n    ConnRef *mergedConn = junctionRef6->removeJunctionAndMergeConnectors();\n    router->processTransaction();\n    router->outputDiagram(\"output/removeJunctions01\");\n\n    std::pair<ConnEnd, ConnEnd> ends = mergedConn->endpointConnEnds();\n\n    // Expected result: output images should be virtually identical.\n    // Result: An endpoint seems to be disconnected from shapeRef8.\n    bool isConnected = (ends.first.shape() == shapeRef8) || (ends.second.shape() == shapeRef8);\n    \n    delete router;\n    return isConnected ? 0 : 1;\n};\n"
  },
  {
    "path": "cola/libavoid/tests/restrictedNudging.cpp",
    "content": "#include \"libavoid/libavoid.h\"\nusing namespace Avoid;\nint main(void) {\n    Router *router = new Router(\n            PolyLineRouting | OrthogonalRouting);\n    router->setRoutingPenalty((PenaltyType)0, 50);\n    router->setRoutingPenalty((PenaltyType)1, 0);\n    router->setRoutingPenalty((PenaltyType)2, 200);\n    router->setRoutingPenalty((PenaltyType)3, 4000);\n    router->setRoutingPenalty((PenaltyType)4, 110);\n    router->setRoutingParameter(idealNudgingDistance, 25);\n\n    Polygon poly282634758(4);\n    poly282634758.ps[0] = Point(51360, 50215);\n    poly282634758.ps[1] = Point(51360, 50460);\n    poly282634758.ps[2] = Point(51075, 50460);\n    poly282634758.ps[3] = Point(51075, 50215);\n    new ShapeRef(router, poly282634758, 282634758);\n    \n    Polygon poly69386928(4);\n    poly69386928.ps[0] = Point(51050, 50415);\n    poly69386928.ps[1] = Point(51050, 50735);\n    poly69386928.ps[2] = Point(50690, 50735);\n    poly69386928.ps[3] = Point(50690, 50415);\n    new ShapeRef(router, poly69386928, 69386928);\n    \n    Polygon poly11958280(4);\n    poly11958280.ps[0] = Point(50460, 50490);\n    poly11958280.ps[1] = Point(50460, 50660);\n    poly11958280.ps[2] = Point(50290, 50660);\n    poly11958280.ps[3] = Point(50290, 50490);\n    new ShapeRef(router, poly11958280, 11958280);\n    \n    Polygon poly50591298(4);\n    poly50591298.ps[0] = Point(51260, 50015);\n    poly50591298.ps[1] = Point(51260, 50185);\n    poly50591298.ps[2] = Point(51075, 50185);\n    poly50591298.ps[3] = Point(51075, 50015);\n    new ShapeRef(router, poly50591298, 50591298);\n    \n    ConnRef *connRef355676284 = new ConnRef(router, 355676284);\n    ConnEnd srcPt355676284(Point(51040, 50575), 8);\n    connRef355676284->setSourceEndpoint(srcPt355676284);\n    ConnEnd dstPt355676284(Point(51085, 50300), 4);\n    connRef355676284->setDestEndpoint(dstPt355676284);\n    connRef355676284->setRoutingType((ConnType)2);\n\n    ConnRef *connRef33653259 = new ConnRef(router, 33653259);\n    ConnEnd srcPt33653259(Point(51040, 50650), 8);\n    connRef33653259->setSourceEndpoint(srcPt33653259);\n    ConnEnd dstPt33653259(Point(51085, 50375), 4);\n    connRef33653259->setDestEndpoint(dstPt33653259);\n    connRef33653259->setRoutingType((ConnType)2);\n\n    ConnRef *connRef421608980 = new ConnRef(router, 421608980);\n    ConnEnd srcPt421608980(Point(51040, 50500), 8);\n    connRef421608980->setSourceEndpoint(srcPt421608980);\n    ConnEnd dstPt421608980(Point(51085, 50100), 4);\n    connRef421608980->setDestEndpoint(dstPt421608980);\n    connRef421608980->setRoutingType((ConnType)2);\n\n    router->processTransaction();\n    router->outputDiagram(\"output/restrictedNudging\");\n    \n    bool overlap = router->existsOrthogonalTouchingPaths();\n    delete router;\n    return (overlap) ? 1 : 0;\n};\n"
  },
  {
    "path": "cola/libavoid/tests/slowrouting.cpp",
    "content": "#include \"libavoid/libavoid.h\"\nusing namespace Avoid;\nint main(void) {\n    Router *router = new Router(\n            PolyLineRouting | OrthogonalRouting);\n    router->setRoutingPenalty((PenaltyType)0, 50);\n    router->setRoutingPenalty((PenaltyType)1, 0);\n    router->setRoutingPenalty((PenaltyType)2, 0);\n    router->setRoutingPenalty((PenaltyType)3, 0);\n    router->setRoutingPenalty((PenaltyType)4, 110);\n    router->setRoutingPenalty((PenaltyType)5, 100);\n    router->setRoutingOption((RoutingOption)0, false);\n    router->setRoutingParameter(idealNudgingDistance, 25);\n\nJunctionRef *junctionRef1634752 = new JunctionRef(router, Point(24800, 27000), 1634752);\n\n    Polygon poly2807970(4);\n    poly2807970.ps[0] = Point(26175, 26940);\n    poly2807970.ps[1] = Point(26175, 28610);\n    poly2807970.ps[2] = Point(25825, 28610);\n    poly2807970.ps[3] = Point(25825, 26940);\n    new ShapeRef(router, poly2807970, 2807970);\n\nJunctionRef *junctionRef5416208 = new JunctionRef(router, Point(24300, 28050), 5416208);\n\n    Polygon poly8864520(4);\n    poly8864520.ps[0] = Point(24900, 28815);\n    poly8864520.ps[1] = Point(24900, 29135);\n    poly8864520.ps[2] = Point(24550, 29135);\n    poly8864520.ps[3] = Point(24550, 28815);\n    new ShapeRef(router, poly8864520, 8864520);\n\nJunctionRef *junctionRef9420650 = new JunctionRef(router, Point(26675, 28125), 9420650);\n\n    Polygon poly11441468(4);\n    poly11441468.ps[0] = Point(27754, 28275);\n    poly11441468.ps[1] = Point(27754, 28360);\n    poly11441468.ps[2] = Point(27696, 28360);\n    poly11441468.ps[3] = Point(27696, 28275);\n    new ShapeRef(router, poly11441468, 11441468);\n\nJunctionRef *junctionRef12650756 = new JunctionRef(router, Point(24250, 26575), 12650756);\n\n    Polygon poly13550052(4);\n    poly13550052.ps[0] = Point(24304, 29500);\n    poly13550052.ps[1] = Point(24304, 29585);\n    poly13550052.ps[2] = Point(24246, 29585);\n    poly13550052.ps[3] = Point(24246, 29500);\n    new ShapeRef(router, poly13550052, 13550052);\n\nJunctionRef *junctionRef16613420 = new JunctionRef(router, Point(27625, 28750), 16613420);\n\n    Polygon poly16932600(4);\n    poly16932600.ps[0] = Point(27425, 26715);\n    poly16932600.ps[1] = Point(27425, 27035);\n    poly16932600.ps[2] = Point(27075, 27035);\n    poly16932600.ps[3] = Point(27075, 26715);\n    new ShapeRef(router, poly16932600, 16932600);\n\n    Polygon poly17785779(4);\n    poly17785779.ps[0] = Point(25129, 27950);\n    poly17785779.ps[1] = Point(25129, 28035);\n    poly17785779.ps[2] = Point(25071, 28035);\n    poly17785779.ps[3] = Point(25071, 27950);\n    new ShapeRef(router, poly17785779, 17785779);\n\nJunctionRef *junctionRef23132835 = new JunctionRef(router, Point(24450, 26900), 23132835);\n\nJunctionRef *junctionRef26572870 = new JunctionRef(router, Point(23158, 26550), 26572870);\n\n    Polygon poly27045198(4);\n    poly27045198.ps[0] = Point(24279, 27925);\n    poly27045198.ps[1] = Point(24279, 28010);\n    poly27045198.ps[2] = Point(24221, 28010);\n    poly27045198.ps[3] = Point(24221, 27925);\n    new ShapeRef(router, poly27045198, 27045198);\n\n    Polygon poly28607408(4);\n    poly28607408.ps[0] = Point(27500, 28190);\n    poly28607408.ps[1] = Point(27500, 28510);\n    poly28607408.ps[2] = Point(27150, 28510);\n    poly28607408.ps[3] = Point(27150, 28190);\n    new ShapeRef(router, poly28607408, 28607408);\n\n    Polygon poly28892384(4);\n    poly28892384.ps[0] = Point(24950, 29440);\n    poly28892384.ps[1] = Point(24950, 29760);\n    poly28892384.ps[2] = Point(24600, 29760);\n    poly28892384.ps[3] = Point(24600, 29440);\n    new ShapeRef(router, poly28892384, 28892384);\n\nJunctionRef *junctionRef34620300 = new JunctionRef(router, Point(24400, 26200), 34620300);\n\nJunctionRef *junctionRef36814260 = new JunctionRef(router, Point(24994, 28975), 36814260);\n\nJunctionRef *junctionRef39695669 = new JunctionRef(router, Point(24000, 29000), 39695669);\n\n    Polygon poly39757638(4);\n    poly39757638.ps[0] = Point(26135, 26516);\n    poly39757638.ps[1] = Point(26135, 26584);\n    poly39757638.ps[2] = Point(26015, 26584);\n    poly39757638.ps[3] = Point(26015, 26516);\n    new ShapeRef(router, poly39757638, 39757638);\n\nJunctionRef *junctionRef41941580 = new JunctionRef(router, Point(23275, 26700), 41941580);\n\n    Polygon poly44086980(4);\n    poly44086980.ps[0] = Point(23950, 27840);\n    poly44086980.ps[1] = Point(23950, 28160);\n    poly44086980.ps[2] = Point(23600, 28160);\n    poly44086980.ps[3] = Point(23600, 27840);\n    new ShapeRef(router, poly44086980, 44086980);\n\n    Polygon poly45299820(4);\n    poly45299820.ps[0] = Point(25054, 26225);\n    poly45299820.ps[1] = Point(25054, 26310);\n    poly45299820.ps[2] = Point(24996, 26310);\n    poly45299820.ps[3] = Point(24996, 26225);\n    new ShapeRef(router, poly45299820, 45299820);\n\n    Polygon poly45389694(4);\n    poly45389694.ps[0] = Point(24825, 27265);\n    poly45389694.ps[1] = Point(24825, 27585);\n    poly45389694.ps[2] = Point(24475, 27585);\n    poly45389694.ps[3] = Point(24475, 27265);\n    new ShapeRef(router, poly45389694, 45389694);\n\n    Polygon poly53329545(4);\n    poly53329545.ps[0] = Point(22900, 29265);\n    poly53329545.ps[1] = Point(22900, 29385);\n    poly53329545.ps[2] = Point(22750, 29385);\n    poly53329545.ps[3] = Point(22750, 29265);\n    new ShapeRef(router, poly53329545, 53329545);\n\nJunctionRef *junctionRef58465624 = new JunctionRef(router, Point(23200, 28550), 58465624);\n\n    Polygon poly59167974(4);\n    poly59167974.ps[0] = Point(23925, 26465);\n    poly59167974.ps[1] = Point(23925, 26785);\n    poly59167974.ps[2] = Point(23575, 26785);\n    poly59167974.ps[3] = Point(23575, 26465);\n    new ShapeRef(router, poly59167974, 59167974);\n\n    Polygon poly66193481(4);\n    poly66193481.ps[0] = Point(27779, 29625);\n    poly66193481.ps[1] = Point(27779, 29710);\n    poly66193481.ps[2] = Point(27721, 29710);\n    poly66193481.ps[3] = Point(27721, 29625);\n    new ShapeRef(router, poly66193481, 66193481);\n\n    Polygon poly70299198(4);\n    poly70299198.ps[0] = Point(27754, 29100);\n    poly70299198.ps[1] = Point(27754, 29185);\n    poly70299198.ps[2] = Point(27696, 29185);\n    poly70299198.ps[3] = Point(27696, 29100);\n    new ShapeRef(router, poly70299198, 70299198);\n\n    Polygon poly71509898(4);\n    poly71509898.ps[0] = Point(27754, 28675);\n    poly71509898.ps[1] = Point(27754, 28760);\n    poly71509898.ps[2] = Point(27696, 28760);\n    poly71509898.ps[3] = Point(27696, 28675);\n    new ShapeRef(router, poly71509898, 71509898);\n\n    Polygon poly92664994(4);\n    poly92664994.ps[0] = Point(27754, 27175);\n    poly92664994.ps[1] = Point(27754, 27260);\n    poly92664994.ps[2] = Point(27696, 27260);\n    poly92664994.ps[3] = Point(27696, 27175);\n    new ShapeRef(router, poly92664994, 92664994);\n\n    Polygon poly106612990(4);\n    poly106612990.ps[0] = Point(23950, 27265);\n    poly106612990.ps[1] = Point(23950, 27585);\n    poly106612990.ps[2] = Point(23600, 27585);\n    poly106612990.ps[3] = Point(23600, 27265);\n    new ShapeRef(router, poly106612990, 106612990);\n\n    Polygon poly115549720(4);\n    poly115549720.ps[0] = Point(24050, 29415);\n    poly115549720.ps[1] = Point(24050, 29735);\n    poly115549720.ps[2] = Point(23700, 29735);\n    poly115549720.ps[3] = Point(23700, 29415);\n    new ShapeRef(router, poly115549720, 115549720);\n\nJunctionRef *junctionRef117582414 = new JunctionRef(router, Point(24225, 26700), 117582414);\n\n    Polygon poly129015449(4);\n    poly129015449.ps[0] = Point(24254, 28425);\n    poly129015449.ps[1] = Point(24254, 28510);\n    poly129015449.ps[2] = Point(24196, 28510);\n    poly129015449.ps[3] = Point(24196, 28425);\n    new ShapeRef(router, poly129015449, 129015449);\n\nJunctionRef *junctionRef131744632 = new JunctionRef(router, Point(24870, 26650), 131744632);\n\n    Polygon poly132843360(4);\n    poly132843360.ps[0] = Point(27425, 27090);\n    poly132843360.ps[1] = Point(27425, 27410);\n    poly132843360.ps[2] = Point(27075, 27410);\n    poly132843360.ps[3] = Point(27075, 27090);\n    new ShapeRef(router, poly132843360, 132843360);\n\nJunctionRef *junctionRef137263932 = new JunctionRef(router, Point(24250, 27125), 137263932);\n\nJunctionRef *junctionRef137883060 = new JunctionRef(router, Point(25000, 28650), 137883060);\n\nJunctionRef *junctionRef144791664 = new JunctionRef(router, Point(24300, 29050), 144791664);\n\nJunctionRef *junctionRef147481188 = new JunctionRef(router, Point(23208, 28075), 147481188);\n\n    Polygon poly156912624(4);\n    poly156912624.ps[0] = Point(24279, 28925);\n    poly156912624.ps[1] = Point(24279, 29010);\n    poly156912624.ps[2] = Point(24221, 29010);\n    poly156912624.ps[3] = Point(24221, 28925);\n    new ShapeRef(router, poly156912624, 156912624);\n\n    Polygon poly163577296(4);\n    poly163577296.ps[0] = Point(23950, 26115);\n    poly163577296.ps[1] = Point(23950, 26435);\n    poly163577296.ps[2] = Point(23600, 26435);\n    poly163577296.ps[3] = Point(23600, 26115);\n    new ShapeRef(router, poly163577296, 163577296);\n\n    Polygon poly165702672(4);\n    poly165702672.ps[0] = Point(25179, 29500);\n    poly165702672.ps[1] = Point(25179, 29585);\n    poly165702672.ps[2] = Point(25121, 29585);\n    poly165702672.ps[3] = Point(25121, 29500);\n    new ShapeRef(router, poly165702672, 165702672);\n\n    Polygon poly165841098(4);\n    poly165841098.ps[0] = Point(25029, 26575);\n    poly165841098.ps[1] = Point(25029, 26660);\n    poly165841098.ps[2] = Point(24971, 26660);\n    poly165841098.ps[3] = Point(24971, 26575);\n    new ShapeRef(router, poly165841098, 165841098);\n\n    Polygon poly170549060(4);\n    poly170549060.ps[0] = Point(23975, 28340);\n    poly170549060.ps[1] = Point(23975, 28660);\n    poly170549060.ps[2] = Point(23625, 28660);\n    poly170549060.ps[3] = Point(23625, 28340);\n    new ShapeRef(router, poly170549060, 170549060);\n\n    Polygon poly188773123(4);\n    poly188773123.ps[0] = Point(25029, 26975);\n    poly188773123.ps[1] = Point(25029, 27060);\n    poly188773123.ps[2] = Point(24971, 27060);\n    poly188773123.ps[3] = Point(24971, 26975);\n    new ShapeRef(router, poly188773123, 188773123);\n\n    Polygon poly190710960(4);\n    poly190710960.ps[0] = Point(27550, 29540);\n    poly190710960.ps[1] = Point(27550, 29860);\n    poly190710960.ps[2] = Point(27200, 29860);\n    poly190710960.ps[3] = Point(27200, 29540);\n    new ShapeRef(router, poly190710960, 190710960);\n\nJunctionRef *junctionRef195377532 = new JunctionRef(router, Point(27425, 27650), 195377532);\n\nJunctionRef *junctionRef200348672 = new JunctionRef(router, Point(27564, 28000), 200348672);\n\n    Polygon poly200595752(4);\n    poly200595752.ps[0] = Point(24900, 27865);\n    poly200595752.ps[1] = Point(24900, 28185);\n    poly200595752.ps[2] = Point(24550, 28185);\n    poly200595752.ps[3] = Point(24550, 27865);\n    new ShapeRef(router, poly200595752, 200595752);\n\n    Polygon poly208373760(4);\n    poly208373760.ps[0] = Point(24800, 26140);\n    poly208373760.ps[1] = Point(24800, 26460);\n    poly208373760.ps[2] = Point(24450, 26460);\n    poly208373760.ps[3] = Point(24450, 26140);\n    new ShapeRef(router, poly208373760, 208373760);\n\n    Polygon poly208442016(4);\n    poly208442016.ps[0] = Point(27525, 28590);\n    poly208442016.ps[1] = Point(27525, 28910);\n    poly208442016.ps[2] = Point(27175, 28910);\n    poly208442016.ps[3] = Point(27175, 28590);\n    new ShapeRef(router, poly208442016, 208442016);\n\n    Polygon poly214671138(4);\n    poly214671138.ps[0] = Point(24154, 26550);\n    poly214671138.ps[1] = Point(24154, 26635);\n    poly214671138.ps[2] = Point(24096, 26635);\n    poly214671138.ps[3] = Point(24096, 26550);\n    new ShapeRef(router, poly214671138, 214671138);\n\n    Polygon poly215949184(4);\n    poly215949184.ps[0] = Point(24800, 26890);\n    poly215949184.ps[1] = Point(24800, 27210);\n    poly215949184.ps[2] = Point(24450, 27210);\n    poly215949184.ps[3] = Point(24450, 26890);\n    new ShapeRef(router, poly215949184, 215949184);\n\nJunctionRef *junctionRef221746560 = new JunctionRef(router, Point(26702, 28825), 221746560);\n\n    Polygon poly221761830(4);\n    poly221761830.ps[0] = Point(27704, 26800);\n    poly221761830.ps[1] = Point(27704, 26885);\n    poly221761830.ps[2] = Point(27646, 26885);\n    poly221761830.ps[3] = Point(27646, 26800);\n    new ShapeRef(router, poly221761830, 221761830);\n\n    Polygon poly226135532(4);\n    poly226135532.ps[0] = Point(24750, 26490);\n    poly226135532.ps[1] = Point(24750, 26810);\n    poly226135532.ps[2] = Point(24400, 26810);\n    poly226135532.ps[3] = Point(24400, 26490);\n    new ShapeRef(router, poly226135532, 226135532);\n\nJunctionRef *junctionRef228740625 = new JunctionRef(router, Point(24350, 29300), 228740625);\n\n    Polygon poly251291208(4);\n    poly251291208.ps[0] = Point(27425, 27490);\n    poly251291208.ps[1] = Point(27425, 27810);\n    poly251291208.ps[2] = Point(27075, 27810);\n    poly251291208.ps[3] = Point(27075, 27490);\n    new ShapeRef(router, poly251291208, 251291208);\n\nJunctionRef *junctionRef255105144 = new JunctionRef(router, Point(26700, 28425), 255105144);\n\nJunctionRef *junctionRef275948952 = new JunctionRef(router, Point(23281, 27100), 275948952);\n\n    Polygon poly292681455(4);\n    poly292681455.ps[0] = Point(27475, 27840);\n    poly292681455.ps[1] = Point(27475, 28160);\n    poly292681455.ps[2] = Point(27125, 28160);\n    poly292681455.ps[3] = Point(27125, 27840);\n    new ShapeRef(router, poly292681455, 292681455);\n\nJunctionRef *junctionRef295885488 = new JunctionRef(router, Point(23925, 26625), 295885488);\n\nJunctionRef *junctionRef299817832 = new JunctionRef(router, Point(24300, 27500), 299817832);\n\nJunctionRef *junctionRef309723792 = new JunctionRef(router, Point(23575, 26100), 309723792);\n\n    Polygon poly312169746(4);\n    poly312169746.ps[0] = Point(23900, 26865);\n    poly312169746.ps[1] = Point(23900, 27185);\n    poly312169746.ps[2] = Point(23550, 27185);\n    poly312169746.ps[3] = Point(23550, 26865);\n    new ShapeRef(router, poly312169746, 312169746);\n\n    Polygon poly324370200(4);\n    poly324370200.ps[0] = Point(27550, 29015);\n    poly324370200.ps[1] = Point(27550, 29335);\n    poly324370200.ps[2] = Point(27200, 29335);\n    poly324370200.ps[3] = Point(27200, 29015);\n    new ShapeRef(router, poly324370200, 324370200);\n\n    Polygon poly330285180(4);\n    poly330285180.ps[0] = Point(22604, 29350);\n    poly330285180.ps[1] = Point(22604, 29435);\n    poly330285180.ps[2] = Point(22546, 29435);\n    poly330285180.ps[3] = Point(22546, 29350);\n    new ShapeRef(router, poly330285180, 330285180);\n\n    Polygon poly343901696(4);\n    poly343901696.ps[0] = Point(24204, 26200);\n    poly343901696.ps[1] = Point(24204, 26285);\n    poly343901696.ps[2] = Point(24146, 26285);\n    poly343901696.ps[3] = Point(24146, 26200);\n    new ShapeRef(router, poly343901696, 343901696);\n\nJunctionRef *junctionRef350832579 = new JunctionRef(router, Point(25000, 28450), 350832579);\n\n    Polygon poly351751345(4);\n    poly351751345.ps[0] = Point(24000, 28840);\n    poly351751345.ps[1] = Point(24000, 29160);\n    poly351751345.ps[2] = Point(23650, 29160);\n    poly351751345.ps[3] = Point(23650, 28840);\n    new ShapeRef(router, poly351751345, 351751345);\n\nJunctionRef *junctionRef358449734 = new JunctionRef(router, Point(27616, 29175), 358449734);\n\nJunctionRef *junctionRef373450980 = new JunctionRef(router, Point(27525, 27250), 373450980);\n\nJunctionRef *junctionRef391945245 = new JunctionRef(router, Point(27500, 28350), 391945245);\n\nJunctionRef *junctionRef394539723 = new JunctionRef(router, Point(23550, 26350), 394539723);\n\n    Polygon poly396658490(4);\n    poly396658490.ps[0] = Point(27754, 27925);\n    poly396658490.ps[1] = Point(27754, 28010);\n    poly396658490.ps[2] = Point(27696, 28010);\n    poly396658490.ps[3] = Point(27696, 27925);\n    new ShapeRef(router, poly396658490, 396658490);\n\n    Polygon poly408762900(4);\n    poly408762900.ps[0] = Point(24979, 27350);\n    poly408762900.ps[1] = Point(24979, 27435);\n    poly408762900.ps[2] = Point(24921, 27435);\n    poly408762900.ps[3] = Point(24921, 27350);\n    new ShapeRef(router, poly408762900, 408762900);\n\nJunctionRef *junctionRef414982287 = new JunctionRef(router, Point(24406, 26100), 414982287);\n\n    Polygon poly486383940(4);\n    poly486383940.ps[0] = Point(24154, 26950);\n    poly486383940.ps[1] = Point(24154, 27035);\n    poly486383940.ps[2] = Point(24096, 27035);\n    poly486383940.ps[3] = Point(24096, 26950);\n    new ShapeRef(router, poly486383940, 486383940);\n\nJunctionRef *junctionRef495386613 = new JunctionRef(router, Point(23200, 29075), 495386613);\n\nJunctionRef *junctionRef504671094 = new JunctionRef(router, Point(24836, 27425), 504671094);\n\nJunctionRef *junctionRef557043721 = new JunctionRef(router, Point(26702, 29250), 557043721);\n\nJunctionRef *junctionRef619528800 = new JunctionRef(router, Point(24168, 28425), 619528800);\n\n    Polygon poly627663896(4);\n    poly627663896.ps[0] = Point(24179, 27350);\n    poly627663896.ps[1] = Point(24179, 27435);\n    poly627663896.ps[2] = Point(24121, 27435);\n    poly627663896.ps[3] = Point(24121, 27350);\n    new ShapeRef(router, poly627663896, 627663896);\n\nJunctionRef *junctionRef639333280 = new JunctionRef(router, Point(24000, 26450), 639333280);\n\nJunctionRef *junctionRef706194558 = new JunctionRef(router, Point(24300, 28550), 706194558);\n\n    Polygon poly735238470(4);\n    poly735238470.ps[0] = Point(25179, 28400);\n    poly735238470.ps[1] = Point(25179, 28485);\n    poly735238470.ps[2] = Point(25121, 28485);\n    poly735238470.ps[3] = Point(25121, 28400);\n    new ShapeRef(router, poly735238470, 735238470);\n\nJunctionRef *junctionRef736226792 = new JunctionRef(router, Point(23150, 29350), 736226792);\n\n    Polygon poly736682544(4);\n    poly736682544.ps[0] = Point(25229, 28900);\n    poly736682544.ps[1] = Point(25229, 28985);\n    poly736682544.ps[2] = Point(25171, 28985);\n    poly736682544.ps[3] = Point(25171, 28900);\n    new ShapeRef(router, poly736682544, 736682544);\n\n    Polygon poly760051248(4);\n    poly760051248.ps[0] = Point(24875, 28315);\n    poly760051248.ps[1] = Point(24875, 28635);\n    poly760051248.ps[2] = Point(24525, 28635);\n    poly760051248.ps[3] = Point(24525, 28315);\n    new ShapeRef(router, poly760051248, 760051248);\n\nJunctionRef *junctionRef790438915 = new JunctionRef(router, Point(24075, 28500), 790438915);\n\nJunctionRef *junctionRef881601350 = new JunctionRef(router, Point(27692, 29100), 881601350);\n\n    Polygon poly900057885(4);\n    poly900057885.ps[0] = Point(27704, 27575);\n    poly900057885.ps[1] = Point(27704, 27660);\n    poly900057885.ps[2] = Point(27646, 27660);\n    poly900057885.ps[3] = Point(27646, 27575);\n    new ShapeRef(router, poly900057885, 900057885);\n\nJunctionRef *junctionRef990913310 = new JunctionRef(router, Point(24000, 27025), 990913310);\n\n    ConnRef *connRef2650284 = new ConnRef(router, 2650284);\n    ConnEnd srcPt2650284(junctionRef295885488);\n    connRef2650284->setSourceEndpoint(srcPt2650284);\n    ConnEnd dstPt2650284(junctionRef639333280);\n    connRef2650284->setDestEndpoint(dstPt2650284);\n    connRef2650284->setRoutingType((ConnType)2);\n\n    ConnRef *connRef2833330 = new ConnRef(router, 2833330);\n    ConnEnd srcPt2833330(junctionRef221746560);\n    connRef2833330->setSourceEndpoint(srcPt2833330);\n    ConnEnd dstPt2833330(junctionRef255105144);\n    connRef2833330->setDestEndpoint(dstPt2833330);\n    connRef2833330->setRoutingType((ConnType)2);\n\n    ConnRef *connRef4043718 = new ConnRef(router, 4043718);\n    ConnEnd srcPt4043718(Point(27515, 28750), 8);\n    connRef4043718->setSourceEndpoint(srcPt4043718);\n    ConnEnd dstPt4043718(junctionRef16613420);\n    connRef4043718->setDestEndpoint(dstPt4043718);\n    connRef4043718->setRoutingType((ConnType)2);\n\n    ConnRef *connRef9745060 = new ConnRef(router, 9745060);\n    ConnEnd srcPt9745060(Point(23610, 28075), 4);\n    connRef9745060->setSourceEndpoint(srcPt9745060);\n    ConnEnd dstPt9745060(junctionRef147481188);\n    connRef9745060->setDestEndpoint(dstPt9745060);\n    connRef9745060->setRoutingType((ConnType)2);\n\n    ConnRef *connRef10983140 = new ConnRef(router, 10983140);\n    ConnEnd srcPt10983140(Point(23890, 26950), 8);\n    connRef10983140->setSourceEndpoint(srcPt10983140);\n    ConnEnd dstPt10983140(Point(24125, 26960), 1);\n    connRef10983140->setDestEndpoint(dstPt10983140);\n    connRef10983140->setRoutingType((ConnType)2);\n\n    ConnRef *connRef11588500 = new ConnRef(router, 11588500);\n    ConnEnd srcPt11588500(Point(23610, 27425), 4);\n    connRef11588500->setSourceEndpoint(srcPt11588500);\n    ConnEnd dstPt11588500(Point(25835, 27250), 4);\n    connRef11588500->setDestEndpoint(dstPt11588500);\n    connRef11588500->setRoutingType((ConnType)2);\n\n    ConnRef *connRef11844992 = new ConnRef(router, 11844992);\n    ConnEnd srcPt11844992(junctionRef137263932);\n    connRef11844992->setSourceEndpoint(srcPt11844992);\n    ConnEnd dstPt11844992(junctionRef117582414);\n    connRef11844992->setDestEndpoint(dstPt11844992);\n    connRef11844992->setRoutingType((ConnType)2);\n\n    ConnRef *connRef14786845 = new ConnRef(router, 14786845);\n    ConnEnd srcPt14786845(junctionRef736226792);\n    connRef14786845->setSourceEndpoint(srcPt14786845);\n    ConnEnd dstPt14786845(junctionRef495386613);\n    connRef14786845->setDestEndpoint(dstPt14786845);\n    connRef14786845->setRoutingType((ConnType)2);\n\n    ConnRef *connRef16261480 = new ConnRef(router, 16261480);\n    ConnEnd srcPt16261480(junctionRef5416208);\n    connRef16261480->setSourceEndpoint(srcPt16261480);\n    ConnEnd dstPt16261480(junctionRef299817832);\n    connRef16261480->setDestEndpoint(dstPt16261480);\n    connRef16261480->setRoutingType((ConnType)2);\n\n    ConnRef *connRef16390046 = new ConnRef(router, 16390046);\n    ConnEnd srcPt16390046(Point(24040, 29575), 8);\n    connRef16390046->setSourceEndpoint(srcPt16390046);\n    ConnEnd dstPt16390046(junctionRef39695669);\n    connRef16390046->setDestEndpoint(dstPt16390046);\n    connRef16390046->setRoutingType((ConnType)2);\n\n    ConnRef *connRef17931396 = new ConnRef(router, 17931396);\n    ConnEnd srcPt17931396(Point(27210, 29250), 4);\n    connRef17931396->setSourceEndpoint(srcPt17931396);\n    ConnEnd dstPt17931396(junctionRef557043721);\n    connRef17931396->setDestEndpoint(dstPt17931396);\n    connRef17931396->setRoutingType((ConnType)2);\n\n    ConnRef *connRef22109256 = new ConnRef(router, 22109256);\n    ConnEnd srcPt22109256(Point(27210, 29775), 4);\n    connRef22109256->setSourceEndpoint(srcPt22109256);\n    ConnEnd dstPt22109256(junctionRef557043721);\n    connRef22109256->setDestEndpoint(dstPt22109256);\n    connRef22109256->setRoutingType((ConnType)2);\n\n    ConnRef *connRef22594350 = new ConnRef(router, 22594350);\n    ConnEnd srcPt22594350(junctionRef414982287);\n    connRef22594350->setSourceEndpoint(srcPt22594350);\n    ConnEnd dstPt22594350(junctionRef34620300);\n    connRef22594350->setDestEndpoint(dstPt22594350);\n    connRef22594350->setRoutingType((ConnType)2);\n\n    ConnRef *connRef22914582 = new ConnRef(router, 22914582);\n    ConnEnd srcPt22914582(junctionRef350832579);\n    connRef22914582->setSourceEndpoint(srcPt22914582);\n    ConnEnd dstPt22914582(Point(24865, 28475), 8);\n    connRef22914582->setDestEndpoint(dstPt22914582);\n    connRef22914582->setRoutingType((ConnType)2);\n\n    ConnRef *connRef23169708 = new ConnRef(router, 23169708);\n    ConnEnd srcPt23169708(junctionRef358449734);\n    connRef23169708->setSourceEndpoint(srcPt23169708);\n    ConnEnd dstPt23169708(junctionRef881601350);\n    connRef23169708->setDestEndpoint(dstPt23169708);\n    connRef23169708->setRoutingType((ConnType)2);\n\n    ConnRef *connRef23586424 = new ConnRef(router, 23586424);\n    ConnEnd srcPt23586424(Point(23610, 27350), 4);\n    connRef23586424->setSourceEndpoint(srcPt23586424);\n    ConnEnd dstPt23586424(junctionRef26572870);\n    connRef23586424->setDestEndpoint(dstPt23586424);\n    connRef23586424->setRoutingType((ConnType)2);\n\n    ConnRef *connRef24487272 = new ConnRef(router, 24487272);\n    ConnEnd srcPt24487272(junctionRef299817832);\n    connRef24487272->setSourceEndpoint(srcPt24487272);\n    ConnEnd dstPt24487272(junctionRef137263932);\n    connRef24487272->setDestEndpoint(dstPt24487272);\n    connRef24487272->setRoutingType((ConnType)2);\n\n    ConnRef *connRef26971490 = new ConnRef(router, 26971490);\n    ConnEnd srcPt26971490(junctionRef275948952);\n    connRef26971490->setSourceEndpoint(srcPt26971490);\n    ConnEnd dstPt26971490(Point(23610, 27500), 4);\n    connRef26971490->setDestEndpoint(dstPt26971490);\n    connRef26971490->setRoutingType((ConnType)2);\n\n    ConnRef *connRef27342336 = new ConnRef(router, 27342336);\n    ConnEnd srcPt27342336(junctionRef34620300);\n    connRef27342336->setSourceEndpoint(srcPt27342336);\n    ConnEnd dstPt27342336(Point(24460, 26225), 4);\n    connRef27342336->setDestEndpoint(dstPt27342336);\n    connRef27342336->setRoutingType((ConnType)2);\n\n    ConnRef *connRef29036799 = new ConnRef(router, 29036799);\n    ConnEnd srcPt29036799(Point(23890, 27025), 8);\n    connRef29036799->setSourceEndpoint(srcPt29036799);\n    ConnEnd dstPt29036799(junctionRef990913310);\n    connRef29036799->setDestEndpoint(dstPt29036799);\n    connRef29036799->setRoutingType((ConnType)2);\n\n    ConnRef *connRef29965772 = new ConnRef(router, 29965772);\n    ConnEnd srcPt29965772(Point(27675, 26810), 1);\n    connRef29965772->setSourceEndpoint(srcPt29965772);\n    ConnEnd dstPt29965772(Point(27415, 26800), 8);\n    connRef29965772->setDestEndpoint(dstPt29965772);\n    connRef29965772->setRoutingType((ConnType)2);\n\n    ConnRef *connRef31188915 = new ConnRef(router, 31188915);\n    ConnEnd srcPt31188915(Point(24410, 26650), 4);\n    connRef31188915->setSourceEndpoint(srcPt31188915);\n    ConnEnd dstPt31188915(Point(25835, 27400), 4);\n    connRef31188915->setDestEndpoint(dstPt31188915);\n    connRef31188915->setRoutingType((ConnType)2);\n\n    ConnRef *connRef32390545 = new ConnRef(router, 32390545);\n    ConnEnd srcPt32390545(Point(27540, 29175), 8);\n    connRef32390545->setSourceEndpoint(srcPt32390545);\n    ConnEnd dstPt32390545(junctionRef358449734);\n    connRef32390545->setDestEndpoint(dstPt32390545);\n    connRef32390545->setRoutingType((ConnType)2);\n\n    ConnRef *connRef33457066 = new ConnRef(router, 33457066);\n    ConnEnd srcPt33457066(Point(27185, 28825), 4);\n    connRef33457066->setSourceEndpoint(srcPt33457066);\n    ConnEnd dstPt33457066(junctionRef221746560);\n    connRef33457066->setDestEndpoint(dstPt33457066);\n    connRef33457066->setRoutingType((ConnType)2);\n\n    ConnRef *connRef34908836 = new ConnRef(router, 34908836);\n    ConnEnd srcPt34908836(junctionRef9420650);\n    connRef34908836->setSourceEndpoint(srcPt34908836);\n    ConnEnd dstPt34908836(Point(27135, 28075), 4);\n    connRef34908836->setDestEndpoint(dstPt34908836);\n    connRef34908836->setRoutingType((ConnType)2);\n\n    ConnRef *connRef37638287 = new ConnRef(router, 37638287);\n    ConnEnd srcPt37638287(junctionRef790438915);\n    connRef37638287->setSourceEndpoint(srcPt37638287);\n    ConnEnd dstPt37638287(Point(23965, 28500), 8);\n    connRef37638287->setDestEndpoint(dstPt37638287);\n    connRef37638287->setRoutingType((ConnType)2);\n\n    ConnRef *connRef40448457 = new ConnRef(router, 40448457);\n    ConnEnd srcPt40448457(Point(24790, 26975), 8);\n    connRef40448457->setSourceEndpoint(srcPt40448457);\n    ConnEnd dstPt40448457(Point(25000, 26985), 1);\n    connRef40448457->setDestEndpoint(dstPt40448457);\n    connRef40448457->setRoutingType((ConnType)2);\n\n    ConnRef *connRef40882634 = new ConnRef(router, 40882634);\n    ConnEnd srcPt40882634(Point(23560, 26950), 4);\n    connRef40882634->setSourceEndpoint(srcPt40882634);\n    ConnEnd dstPt40882634(junctionRef26572870);\n    connRef40882634->setDestEndpoint(dstPt40882634);\n    connRef40882634->setRoutingType((ConnType)2);\n\n    ConnRef *connRef47717100 = new ConnRef(router, 47717100);\n    ConnEnd srcPt47717100(Point(25200, 28910), 1);\n    connRef47717100->setSourceEndpoint(srcPt47717100);\n    ConnEnd dstPt47717100(Point(24890, 28900), 8);\n    connRef47717100->setDestEndpoint(dstPt47717100);\n    connRef47717100->setRoutingType((ConnType)2);\n\n    ConnRef *connRef56597370 = new ConnRef(router, 56597370);\n    ConnEnd srcPt56597370(Point(27675, 27585), 1);\n    connRef56597370->setSourceEndpoint(srcPt56597370);\n    ConnEnd dstPt56597370(Point(27415, 27575), 8);\n    connRef56597370->setDestEndpoint(dstPt56597370);\n    connRef56597370->setRoutingType((ConnType)2);\n\n    ConnRef *connRef59354933 = new ConnRef(router, 59354933);\n    ConnEnd srcPt59354933(junctionRef309723792);\n    connRef59354933->setSourceEndpoint(srcPt59354933);\n    ConnEnd dstPt59354933(junctionRef414982287);\n    connRef59354933->setDestEndpoint(dstPt59354933);\n    connRef59354933->setRoutingType((ConnType)2);\n\n    ConnRef *connRef77227284 = new ConnRef(router, 77227284);\n    ConnEnd srcPt77227284(Point(24740, 26650), 8);\n    connRef77227284->setSourceEndpoint(srcPt77227284);\n    ConnEnd dstPt77227284(junctionRef131744632);\n    connRef77227284->setDestEndpoint(dstPt77227284);\n    connRef77227284->setRoutingType((ConnType)2);\n\n    ConnRef *connRef79612408 = new ConnRef(router, 79612408);\n    ConnEnd srcPt79612408(Point(23585, 26625), 4);\n    connRef79612408->setSourceEndpoint(srcPt79612408);\n    ConnEnd dstPt79612408(Point(25835, 27100), 4);\n    connRef79612408->setDestEndpoint(dstPt79612408);\n    connRef79612408->setRoutingType((ConnType)2);\n\n    ConnRef *connRef82780868 = new ConnRef(router, 82780868);\n    ConnEnd srcPt82780868(Point(27185, 28750), 4);\n    connRef82780868->setSourceEndpoint(srcPt82780868);\n    ConnEnd dstPt82780868(Point(25835, 28375), 4);\n    connRef82780868->setDestEndpoint(dstPt82780868);\n    connRef82780868->setRoutingType((ConnType)2);\n\n    ConnRef *connRef83092945 = new ConnRef(router, 83092945);\n    ConnEnd srcPt83092945(Point(27085, 27650), 4);\n    connRef83092945->setSourceEndpoint(srcPt83092945);\n    ConnEnd dstPt83092945(Point(26165, 27175), 8);\n    connRef83092945->setDestEndpoint(dstPt83092945);\n    connRef83092945->setRoutingType((ConnType)2);\n\n    ConnRef *connRef88266240 = new ConnRef(router, 88266240);\n    ConnEnd srcPt88266240(junctionRef790438915);\n    connRef88266240->setSourceEndpoint(srcPt88266240);\n    ConnEnd dstPt88266240(junctionRef137883060);\n    connRef88266240->setDestEndpoint(dstPt88266240);\n    connRef88266240->setRoutingType((ConnType)2);\n\n    ConnRef *connRef90460104 = new ConnRef(router, 90460104);\n    ConnEnd srcPt90460104(junctionRef39695669);\n    connRef90460104->setSourceEndpoint(srcPt90460104);\n    ConnEnd dstPt90460104(junctionRef790438915);\n    connRef90460104->setDestEndpoint(dstPt90460104);\n    connRef90460104->setRoutingType((ConnType)2);\n\n    ConnRef *connRef91952388 = new ConnRef(router, 91952388);\n    ConnEnd srcPt91952388(Point(25835, 27475), 4);\n    connRef91952388->setSourceEndpoint(srcPt91952388);\n    ConnEnd dstPt91952388(Point(24460, 27050), 4);\n    connRef91952388->setDestEndpoint(dstPt91952388);\n    connRef91952388->setRoutingType((ConnType)2);\n\n    ConnRef *connRef92256651 = new ConnRef(router, 92256651);\n    ConnEnd srcPt92256651(Point(27135, 28000), 4);\n    connRef92256651->setSourceEndpoint(srcPt92256651);\n    ConnEnd dstPt92256651(Point(25835, 28525), 4);\n    connRef92256651->setDestEndpoint(dstPt92256651);\n    connRef92256651->setRoutingType((ConnType)2);\n\n    ConnRef *connRef95273991 = new ConnRef(router, 95273991);\n    ConnEnd srcPt95273991(Point(27750, 29635), 1);\n    connRef95273991->setSourceEndpoint(srcPt95273991);\n    ConnEnd dstPt95273991(Point(27540, 29625), 8);\n    connRef95273991->setDestEndpoint(dstPt95273991);\n    connRef95273991->setRoutingType((ConnType)2);\n\n    ConnRef *connRef98351958 = new ConnRef(router, 98351958);\n    ConnEnd srcPt98351958(junctionRef41941580);\n    connRef98351958->setSourceEndpoint(srcPt98351958);\n    ConnEnd dstPt98351958(Point(23585, 26700), 4);\n    connRef98351958->setDestEndpoint(dstPt98351958);\n    connRef98351958->setRoutingType((ConnType)2);\n\n    ConnRef *connRef101848175 = new ConnRef(router, 101848175);\n    ConnEnd srcPt101848175(Point(24485, 27350), 4);\n    connRef101848175->setSourceEndpoint(srcPt101848175);\n    ConnEnd dstPt101848175(junctionRef23132835);\n    connRef101848175->setDestEndpoint(dstPt101848175);\n    connRef101848175->setRoutingType((ConnType)2);\n\n    ConnRef *connRef107055166 = new ConnRef(router, 107055166);\n    ConnEnd srcPt107055166(junctionRef200348672);\n    connRef107055166->setSourceEndpoint(srcPt107055166);\n    ConnEnd dstPt107055166(junctionRef195377532);\n    connRef107055166->setDestEndpoint(dstPt107055166);\n    connRef107055166->setRoutingType((ConnType)2);\n\n    ConnRef *connRef126287880 = new ConnRef(router, 126287880);\n    ConnEnd srcPt126287880(junctionRef881601350);\n    connRef126287880->setSourceEndpoint(srcPt126287880);\n    ConnEnd dstPt126287880(Point(27540, 29100), 8);\n    connRef126287880->setDestEndpoint(dstPt126287880);\n    connRef126287880->setRoutingType((ConnType)2);\n\n    ConnRef *connRef149791360 = new ConnRef(router, 149791360);\n    ConnEnd srcPt149791360(Point(24940, 29600), 8);\n    connRef149791360->setSourceEndpoint(srcPt149791360);\n    ConnEnd dstPt149791360(junctionRef36814260);\n    connRef149791360->setDestEndpoint(dstPt149791360);\n    connRef149791360->setRoutingType((ConnType)2);\n\n    ConnRef *connRef152838249 = new ConnRef(router, 152838249);\n    ConnEnd srcPt152838249(Point(24275, 29510), 1);\n    connRef152838249->setSourceEndpoint(srcPt152838249);\n    ConnEnd dstPt152838249(Point(24040, 29500), 8);\n    connRef152838249->setDestEndpoint(dstPt152838249);\n    connRef152838249->setRoutingType((ConnType)2);\n\n    ConnRef *connRef156657228 = new ConnRef(router, 156657228);\n    ConnEnd srcPt156657228(junctionRef619528800);\n    connRef156657228->setSourceEndpoint(srcPt156657228);\n    ConnEnd dstPt156657228(Point(23965, 28425), 8);\n    connRef156657228->setDestEndpoint(dstPt156657228);\n    connRef156657228->setRoutingType((ConnType)2);\n\n    ConnRef *connRef157276356 = new ConnRef(router, 157276356);\n    ConnEnd srcPt157276356(Point(24890, 28025), 8);\n    connRef157276356->setSourceEndpoint(srcPt157276356);\n    ConnEnd dstPt157276356(junctionRef350832579);\n    connRef157276356->setDestEndpoint(dstPt157276356);\n    connRef157276356->setRoutingType((ConnType)2);\n\n    ConnRef *connRef162858434 = new ConnRef(router, 162858434);\n    ConnEnd srcPt162858434(Point(24150, 27360), 1);\n    connRef162858434->setSourceEndpoint(srcPt162858434);\n    ConnEnd dstPt162858434(Point(23940, 27350), 8);\n    connRef162858434->setDestEndpoint(dstPt162858434);\n    connRef162858434->setRoutingType((ConnType)2);\n\n    ConnRef *connRef170639469 = new ConnRef(router, 170639469);\n    ConnEnd srcPt170639469(junctionRef131744632);\n    connRef170639469->setSourceEndpoint(srcPt170639469);\n    ConnEnd dstPt170639469(Point(24790, 26300), 8);\n    connRef170639469->setDestEndpoint(dstPt170639469);\n    connRef170639469->setRoutingType((ConnType)2);\n\n    ConnRef *connRef171917628 = new ConnRef(router, 171917628);\n    ConnEnd srcPt171917628(Point(24790, 27050), 8);\n    connRef171917628->setSourceEndpoint(srcPt171917628);\n    ConnEnd dstPt171917628(junctionRef1634752);\n    connRef171917628->setDestEndpoint(dstPt171917628);\n    connRef171917628->setRoutingType((ConnType)2);\n\n    ConnRef *connRef175703112 = new ConnRef(router, 175703112);\n    ConnEnd srcPt175703112(Point(22760, 29325), 4);\n    connRef175703112->setSourceEndpoint(srcPt175703112);\n    ConnEnd dstPt175703112(Point(22575, 29360), 1);\n    connRef175703112->setDestEndpoint(dstPt175703112);\n    connRef175703112->setRoutingType((ConnType)2);\n\n    ConnRef *connRef175774395 = new ConnRef(router, 175774395);\n    ConnEnd srcPt175774395(junctionRef358449734);\n    connRef175774395->setSourceEndpoint(srcPt175774395);\n    ConnEnd dstPt175774395(junctionRef16613420);\n    connRef175774395->setDestEndpoint(dstPt175774395);\n    connRef175774395->setRoutingType((ConnType)2);\n\n    ConnRef *connRef177387840 = new ConnRef(router, 177387840);\n    ConnEnd srcPt177387840(Point(27725, 27935), 1);\n    connRef177387840->setSourceEndpoint(srcPt177387840);\n    ConnEnd dstPt177387840(Point(27465, 27925), 8);\n    connRef177387840->setDestEndpoint(dstPt177387840);\n    connRef177387840->setRoutingType((ConnType)2);\n\n    ConnRef *connRef179014612 = new ConnRef(router, 179014612);\n    ConnEnd srcPt179014612(Point(24790, 26225), 8);\n    connRef179014612->setSourceEndpoint(srcPt179014612);\n    ConnEnd dstPt179014612(Point(25025, 26235), 1);\n    connRef179014612->setDestEndpoint(dstPt179014612);\n    connRef179014612->setRoutingType((ConnType)2);\n\n    ConnRef *connRef181436988 = new ConnRef(router, 181436988);\n    ConnEnd srcPt181436988(junctionRef275948952);\n    connRef181436988->setSourceEndpoint(srcPt181436988);\n    ConnEnd dstPt181436988(junctionRef41941580);\n    connRef181436988->setDestEndpoint(dstPt181436988);\n    connRef181436988->setRoutingType((ConnType)2);\n\n    ConnRef *connRef186910820 = new ConnRef(router, 186910820);\n    ConnEnd srcPt186910820(Point(25100, 27960), 1);\n    connRef186910820->setSourceEndpoint(srcPt186910820);\n    ConnEnd dstPt186910820(Point(24890, 27950), 8);\n    connRef186910820->setDestEndpoint(dstPt186910820);\n    connRef186910820->setRoutingType((ConnType)2);\n\n    ConnRef *connRef187785156 = new ConnRef(router, 187785156);\n    ConnEnd srcPt187785156(junctionRef495386613);\n    connRef187785156->setSourceEndpoint(srcPt187785156);\n    ConnEnd dstPt187785156(junctionRef58465624);\n    connRef187785156->setDestEndpoint(dstPt187785156);\n    connRef187785156->setRoutingType((ConnType)2);\n\n    ConnRef *connRef189722660 = new ConnRef(router, 189722660);\n    ConnEnd srcPt189722660(junctionRef23132835);\n    connRef189722660->setSourceEndpoint(srcPt189722660);\n    ConnEnd dstPt189722660(junctionRef12650756);\n    connRef189722660->setDestEndpoint(dstPt189722660);\n    connRef189722660->setRoutingType((ConnType)2);\n\n    ConnRef *connRef192744750 = new ConnRef(router, 192744750);\n    ConnEnd srcPt192744750(junctionRef36814260);\n    connRef192744750->setSourceEndpoint(srcPt192744750);\n    ConnEnd dstPt192744750(junctionRef137883060);\n    connRef192744750->setDestEndpoint(dstPt192744750);\n    connRef192744750->setRoutingType((ConnType)2);\n\n    ConnRef *connRef197632590 = new ConnRef(router, 197632590);\n    ConnEnd srcPt197632590(Point(25150, 29510), 1);\n    connRef197632590->setSourceEndpoint(srcPt197632590);\n    ConnEnd dstPt197632590(Point(24940, 29525), 8);\n    connRef197632590->setDestEndpoint(dstPt197632590);\n    connRef197632590->setRoutingType((ConnType)2);\n\n    ConnRef *connRef199761771 = new ConnRef(router, 199761771);\n    ConnEnd srcPt199761771(Point(25150, 28410), 1);\n    connRef199761771->setSourceEndpoint(srcPt199761771);\n    ConnEnd dstPt199761771(Point(24865, 28400), 8);\n    connRef199761771->setDestEndpoint(dstPt199761771);\n    connRef199761771->setRoutingType((ConnType)2);\n\n    ConnRef *connRef200371408 = new ConnRef(router, 200371408);\n    ConnEnd srcPt200371408(Point(23710, 29575), 4);\n    connRef200371408->setSourceEndpoint(srcPt200371408);\n    ConnEnd dstPt200371408(Point(25835, 27700), 4);\n    connRef200371408->setDestEndpoint(dstPt200371408);\n    connRef200371408->setRoutingType((ConnType)2);\n\n    ConnRef *connRef202197435 = new ConnRef(router, 202197435);\n    ConnEnd srcPt202197435(Point(23610, 26275), 4);\n    connRef202197435->setSourceEndpoint(srcPt202197435);\n    ConnEnd dstPt202197435(Point(25835, 27025), 4);\n    connRef202197435->setDestEndpoint(dstPt202197435);\n    connRef202197435->setRoutingType((ConnType)2);\n\n    ConnRef *connRef223350000 = new ConnRef(router, 223350000);\n    ConnEnd srcPt223350000(junctionRef790438915);\n    connRef223350000->setSourceEndpoint(srcPt223350000);\n    ConnEnd dstPt223350000(junctionRef619528800);\n    connRef223350000->setDestEndpoint(dstPt223350000);\n    connRef223350000->setRoutingType((ConnType)2);\n\n    ConnRef *connRef225755952 = new ConnRef(router, 225755952);\n    ConnEnd srcPt225755952(Point(26075, 26550), 15);\n    connRef225755952->setSourceEndpoint(srcPt225755952);\n    ConnEnd dstPt225755952(junctionRef414982287);\n    connRef225755952->setDestEndpoint(dstPt225755952);\n    connRef225755952->setRoutingType((ConnType)2);\n\n    ConnRef *connRef231794598 = new ConnRef(router, 231794598);\n    ConnEnd srcPt231794598(Point(24740, 26575), 8);\n    connRef231794598->setSourceEndpoint(srcPt231794598);\n    ConnEnd dstPt231794598(Point(25000, 26585), 1);\n    connRef231794598->setDestEndpoint(dstPt231794598);\n    connRef231794598->setRoutingType((ConnType)2);\n\n    ConnRef *connRef235948750 = new ConnRef(router, 235948750);\n    ConnEnd srcPt235948750(Point(24485, 27500), 4);\n    connRef235948750->setSourceEndpoint(srcPt235948750);\n    ConnEnd dstPt235948750(junctionRef299817832);\n    connRef235948750->setDestEndpoint(dstPt235948750);\n    connRef235948750->setRoutingType((ConnType)2);\n\n    ConnRef *connRef237307070 = new ConnRef(router, 237307070);\n    ConnEnd srcPt237307070(Point(24610, 29675), 4);\n    connRef237307070->setSourceEndpoint(srcPt237307070);\n    ConnEnd dstPt237307070(junctionRef228740625);\n    connRef237307070->setDestEndpoint(dstPt237307070);\n    connRef237307070->setRoutingType((ConnType)2);\n\n    ConnRef *connRef243434688 = new ConnRef(router, 243434688);\n    ConnEnd srcPt243434688(Point(23560, 27100), 4);\n    connRef243434688->setSourceEndpoint(srcPt243434688);\n    ConnEnd dstPt243434688(junctionRef275948952);\n    connRef243434688->setDestEndpoint(dstPt243434688);\n    connRef243434688->setRoutingType((ConnType)2);\n\n    ConnRef *connRef257379648 = new ConnRef(router, 257379648);\n    ConnEnd srcPt257379648(Point(24460, 27125), 4);\n    connRef257379648->setSourceEndpoint(srcPt257379648);\n    ConnEnd dstPt257379648(junctionRef137263932);\n    connRef257379648->setDestEndpoint(dstPt257379648);\n    connRef257379648->setRoutingType((ConnType)2);\n\n    ConnRef *connRef257846316 = new ConnRef(router, 257846316);\n    ConnEnd srcPt257846316(junctionRef557043721);\n    connRef257846316->setSourceEndpoint(srcPt257846316);\n    ConnEnd dstPt257846316(junctionRef228740625);\n    connRef257846316->setDestEndpoint(dstPt257846316);\n    connRef257846316->setRoutingType((ConnType)2);\n\n    ConnRef *connRef258773320 = new ConnRef(router, 258773320);\n    ConnEnd srcPt258773320(Point(27210, 29175), 4);\n    connRef258773320->setSourceEndpoint(srcPt258773320);\n    ConnEnd dstPt258773320(Point(25835, 28300), 4);\n    connRef258773320->setDestEndpoint(dstPt258773320);\n    connRef258773320->setRoutingType((ConnType)2);\n\n    ConnRef *connRef260211707 = new ConnRef(router, 260211707);\n    ConnEnd srcPt260211707(Point(23940, 27425), 8);\n    connRef260211707->setSourceEndpoint(srcPt260211707);\n    ConnEnd dstPt260211707(junctionRef990913310);\n    connRef260211707->setDestEndpoint(dstPt260211707);\n    connRef260211707->setRoutingType((ConnType)2);\n\n    ConnRef *connRef273011160 = new ConnRef(router, 273011160);\n    ConnEnd srcPt273011160(Point(23660, 29000), 4);\n    connRef273011160->setSourceEndpoint(srcPt273011160);\n    ConnEnd dstPt273011160(Point(25835, 28150), 4);\n    connRef273011160->setDestEndpoint(dstPt273011160);\n    connRef273011160->setRoutingType((ConnType)2);\n\n    ConnRef *connRef274013534 = new ConnRef(router, 274013534);\n    ConnEnd srcPt274013534(Point(24890, 28975), 8);\n    connRef274013534->setSourceEndpoint(srcPt274013534);\n    ConnEnd dstPt274013534(junctionRef36814260);\n    connRef274013534->setDestEndpoint(dstPt274013534);\n    connRef274013534->setRoutingType((ConnType)2);\n\n    ConnRef *connRef279737601 = new ConnRef(router, 279737601);\n    ConnEnd srcPt279737601(junctionRef26572870);\n    connRef279737601->setSourceEndpoint(srcPt279737601);\n    ConnEnd dstPt279737601(junctionRef309723792);\n    connRef279737601->setDestEndpoint(dstPt279737601);\n    connRef279737601->setRoutingType((ConnType)2);\n\n    ConnRef *connRef281388594 = new ConnRef(router, 281388594);\n    ConnEnd srcPt281388594(Point(27725, 28685), 1);\n    connRef281388594->setSourceEndpoint(srcPt281388594);\n    ConnEnd dstPt281388594(Point(27515, 28675), 8);\n    connRef281388594->setDestEndpoint(dstPt281388594);\n    connRef281388594->setRoutingType((ConnType)2);\n\n    ConnRef *connRef285908400 = new ConnRef(router, 285908400);\n    ConnEnd srcPt285908400(Point(23560, 27025), 4);\n    connRef285908400->setSourceEndpoint(srcPt285908400);\n    ConnEnd dstPt285908400(Point(25835, 27175), 4);\n    connRef285908400->setDestEndpoint(dstPt285908400);\n    connRef285908400->setRoutingType((ConnType)2);\n\n    ConnRef *connRef287034425 = new ConnRef(router, 287034425);\n    ConnEnd srcPt287034425(junctionRef391945245);\n    connRef287034425->setSourceEndpoint(srcPt287034425);\n    ConnEnd dstPt287034425(junctionRef200348672);\n    connRef287034425->setDestEndpoint(dstPt287034425);\n    connRef287034425->setRoutingType((ConnType)2);\n\n    ConnRef *connRef288108606 = new ConnRef(router, 288108606);\n    ConnEnd srcPt288108606(Point(23610, 26350), 4);\n    connRef288108606->setSourceEndpoint(srcPt288108606);\n    ConnEnd dstPt288108606(junctionRef394539723);\n    connRef288108606->setDestEndpoint(dstPt288108606);\n    connRef288108606->setRoutingType((ConnType)2);\n\n    ConnRef *connRef290380424 = new ConnRef(router, 290380424);\n    ConnEnd srcPt290380424(Point(24560, 29050), 4);\n    connRef290380424->setSourceEndpoint(srcPt290380424);\n    ConnEnd dstPt290380424(junctionRef144791664);\n    connRef290380424->setDestEndpoint(dstPt290380424);\n    connRef290380424->setRoutingType((ConnType)2);\n\n    ConnRef *connRef294588780 = new ConnRef(router, 294588780);\n    ConnEnd srcPt294588780(Point(27085, 27725), 4);\n    connRef294588780->setSourceEndpoint(srcPt294588780);\n    ConnEnd dstPt294588780(junctionRef9420650);\n    connRef294588780->setDestEndpoint(dstPt294588780);\n    connRef294588780->setRoutingType((ConnType)2);\n\n    ConnRef *connRef295795481 = new ConnRef(router, 295795481);\n    ConnEnd srcPt295795481(Point(24460, 26375), 4);\n    connRef295795481->setSourceEndpoint(srcPt295795481);\n    ConnEnd dstPt295795481(junctionRef117582414);\n    connRef295795481->setDestEndpoint(dstPt295795481);\n    connRef295795481->setRoutingType((ConnType)2);\n\n    ConnRef *connRef297813338 = new ConnRef(router, 297813338);\n    ConnEnd srcPt297813338(Point(24560, 28100), 4);\n    connRef297813338->setSourceEndpoint(srcPt297813338);\n    ConnEnd dstPt297813338(junctionRef5416208);\n    connRef297813338->setDestEndpoint(dstPt297813338);\n    connRef297813338->setRoutingType((ConnType)2);\n\n    ConnRef *connRef297831780 = new ConnRef(router, 297831780);\n    ConnEnd srcPt297831780(Point(27725, 29110), 1);\n    connRef297831780->setSourceEndpoint(srcPt297831780);\n    ConnEnd dstPt297831780(junctionRef881601350);\n    connRef297831780->setDestEndpoint(dstPt297831780);\n    connRef297831780->setRoutingType((ConnType)2);\n\n    ConnRef *connRef305590064 = new ConnRef(router, 305590064);\n    ConnEnd srcPt305590064(Point(24560, 28025), 4);\n    connRef305590064->setSourceEndpoint(srcPt305590064);\n    ConnEnd dstPt305590064(Point(25835, 27625), 4);\n    connRef305590064->setDestEndpoint(dstPt305590064);\n    connRef305590064->setRoutingType((ConnType)2);\n\n    ConnRef *connRef311241725 = new ConnRef(router, 311241725);\n    ConnEnd srcPt311241725(Point(27725, 28285), 1);\n    connRef311241725->setSourceEndpoint(srcPt311241725);\n    ConnEnd dstPt311241725(Point(27490, 28275), 8);\n    connRef311241725->setDestEndpoint(dstPt311241725);\n    connRef311241725->setRoutingType((ConnType)2);\n\n    ConnRef *connRef322174720 = new ConnRef(router, 322174720);\n    ConnEnd srcPt322174720(Point(24250, 27935), 1);\n    connRef322174720->setSourceEndpoint(srcPt322174720);\n    ConnEnd dstPt322174720(Point(23940, 27925), 8);\n    connRef322174720->setDestEndpoint(dstPt322174720);\n    connRef322174720->setRoutingType((ConnType)2);\n\n    ConnRef *connRef322291528 = new ConnRef(router, 322291528);\n    ConnEnd srcPt322291528(Point(23585, 26550), 4);\n    connRef322291528->setSourceEndpoint(srcPt322291528);\n    ConnEnd dstPt322291528(junctionRef26572870);\n    connRef322291528->setDestEndpoint(dstPt322291528);\n    connRef322291528->setRoutingType((ConnType)2);\n\n    ConnRef *connRef328813520 = new ConnRef(router, 328813520);\n    ConnEnd srcPt328813520(junctionRef1634752);\n    connRef328813520->setSourceEndpoint(srcPt328813520);\n    ConnEnd dstPt328813520(junctionRef131744632);\n    connRef328813520->setDestEndpoint(dstPt328813520);\n    connRef328813520->setRoutingType((ConnType)2);\n\n    ConnRef *connRef342417330 = new ConnRef(router, 342417330);\n    ConnEnd srcPt342417330(Point(24225, 28435), 1);\n    connRef342417330->setSourceEndpoint(srcPt342417330);\n    ConnEnd dstPt342417330(junctionRef619528800);\n    connRef342417330->setDestEndpoint(dstPt342417330);\n    connRef342417330->setRoutingType((ConnType)2);\n\n    ConnRef *connRef351151744 = new ConnRef(router, 351151744);\n    ConnEnd srcPt351151744(Point(25835, 27550), 4);\n    connRef351151744->setSourceEndpoint(srcPt351151744);\n    ConnEnd dstPt351151744(Point(24485, 27425), 4);\n    connRef351151744->setDestEndpoint(dstPt351151744);\n    connRef351151744->setRoutingType((ConnType)2);\n\n    ConnRef *connRef353764215 = new ConnRef(router, 353764215);\n    ConnEnd srcPt353764215(junctionRef706194558);\n    connRef353764215->setSourceEndpoint(srcPt353764215);\n    ConnEnd dstPt353764215(junctionRef5416208);\n    connRef353764215->setDestEndpoint(dstPt353764215);\n    connRef353764215->setRoutingType((ConnType)2);\n\n    ConnRef *connRef360051452 = new ConnRef(router, 360051452);\n    //ConnEnd srcPt360051452(Point(24350, 29300), 15);\n    ConnEnd srcPt360051452(junctionRef228740625);\n    connRef360051452->setSourceEndpoint(srcPt360051452);\n    ConnEnd dstPt360051452(junctionRef144791664);\n    connRef360051452->setDestEndpoint(dstPt360051452);\n    connRef360051452->setRoutingType((ConnType)2);\n\n    ConnRef *connRef370001467 = new ConnRef(router, 370001467);\n    ConnEnd srcPt370001467(Point(24535, 28550), 4);\n    connRef370001467->setSourceEndpoint(srcPt370001467);\n    ConnEnd dstPt370001467(junctionRef706194558);\n    connRef370001467->setDestEndpoint(dstPt370001467);\n    connRef370001467->setRoutingType((ConnType)2);\n\n    ConnRef *connRef374482680 = new ConnRef(router, 374482680);\n    ConnEnd srcPt374482680(junctionRef255105144);\n    connRef374482680->setSourceEndpoint(srcPt374482680);\n    ConnEnd dstPt374482680(junctionRef9420650);\n    connRef374482680->setDestEndpoint(dstPt374482680);\n    connRef374482680->setRoutingType((ConnType)2);\n\n    ConnRef *connRef384565632 = new ConnRef(router, 384565632);\n    ConnEnd srcPt384565632(Point(27160, 28350), 4);\n    connRef384565632->setSourceEndpoint(srcPt384565632);\n    ConnEnd dstPt384565632(Point(25835, 28450), 4);\n    connRef384565632->setDestEndpoint(dstPt384565632);\n    connRef384565632->setRoutingType((ConnType)2);\n\n    ConnRef *connRef385394335 = new ConnRef(router, 385394335);\n    ConnEnd srcPt385394335(junctionRef12650756);\n    connRef385394335->setSourceEndpoint(srcPt385394335);\n    ConnEnd dstPt385394335(junctionRef34620300);\n    connRef385394335->setDestEndpoint(dstPt385394335);\n    connRef385394335->setRoutingType((ConnType)2);\n\n    ConnRef *connRef394841184 = new ConnRef(router, 394841184);\n    ConnEnd srcPt394841184(junctionRef373450980);\n    connRef394841184->setSourceEndpoint(srcPt394841184);\n    ConnEnd dstPt394841184(Point(27415, 27250), 8);\n    connRef394841184->setDestEndpoint(dstPt394841184);\n    connRef394841184->setRoutingType((ConnType)2);\n\n    ConnRef *connRef395684456 = new ConnRef(router, 395684456);\n    ConnEnd srcPt395684456(junctionRef990913310);\n    connRef395684456->setSourceEndpoint(srcPt395684456);\n    ConnEnd dstPt395684456(junctionRef504671094);\n    connRef395684456->setDestEndpoint(dstPt395684456);\n    connRef395684456->setRoutingType((ConnType)2);\n\n    ConnRef *connRef399195680 = new ConnRef(router, 399195680);\n    ConnEnd srcPt399195680(Point(24460, 26300), 4);\n    connRef399195680->setSourceEndpoint(srcPt399195680);\n    ConnEnd dstPt399195680(Point(25835, 27325), 4);\n    connRef399195680->setDestEndpoint(dstPt399195680);\n    connRef399195680->setRoutingType((ConnType)2);\n\n    ConnRef *connRef430804024 = new ConnRef(router, 430804024);\n    ConnEnd srcPt430804024(Point(24410, 26575), 4);\n    connRef430804024->setSourceEndpoint(srcPt430804024);\n    ConnEnd dstPt430804024(junctionRef12650756);\n    connRef430804024->setDestEndpoint(dstPt430804024);\n    connRef430804024->setRoutingType((ConnType)2);\n\n    ConnRef *connRef441263950 = new ConnRef(router, 441263950);\n    ConnEnd srcPt441263950(junctionRef117582414);\n    connRef441263950->setSourceEndpoint(srcPt441263950);\n    ConnEnd dstPt441263950(Point(24410, 26725), 4);\n    connRef441263950->setDestEndpoint(dstPt441263950);\n    connRef441263950->setRoutingType((ConnType)2);\n\n    ConnRef *connRef449028114 = new ConnRef(router, 449028114);\n    ConnEnd srcPt449028114(junctionRef147481188);\n    connRef449028114->setSourceEndpoint(srcPt449028114);\n    ConnEnd dstPt449028114(junctionRef58465624);\n    connRef449028114->setDestEndpoint(dstPt449028114);\n    connRef449028114->setRoutingType((ConnType)2);\n\n    ConnRef *connRef456315054 = new ConnRef(router, 456315054);\n    ConnEnd srcPt456315054(junctionRef195377532);\n    connRef456315054->setSourceEndpoint(srcPt456315054);\n    ConnEnd dstPt456315054(junctionRef373450980);\n    connRef456315054->setDestEndpoint(dstPt456315054);\n    connRef456315054->setRoutingType((ConnType)2);\n\n    ConnRef *connRef463648203 = new ConnRef(router, 463648203);\n    ConnEnd srcPt463648203(Point(24535, 28475), 4);\n    connRef463648203->setSourceEndpoint(srcPt463648203);\n    ConnEnd dstPt463648203(Point(25835, 27775), 4);\n    connRef463648203->setDestEndpoint(dstPt463648203);\n    connRef463648203->setRoutingType((ConnType)2);\n\n    ConnRef *connRef466988995 = new ConnRef(router, 466988995);\n    ConnEnd srcPt466988995(Point(27465, 28000), 8);\n    connRef466988995->setSourceEndpoint(srcPt466988995);\n    ConnEnd dstPt466988995(junctionRef200348672);\n    connRef466988995->setDestEndpoint(dstPt466988995);\n    connRef466988995->setRoutingType((ConnType)2);\n\n    ConnRef *connRef470918448 = new ConnRef(router, 470918448);\n    ConnEnd srcPt470918448(Point(23710, 29650), 4);\n    connRef470918448->setSourceEndpoint(srcPt470918448);\n    ConnEnd dstPt470918448(junctionRef736226792);\n    connRef470918448->setDestEndpoint(dstPt470918448);\n    connRef470918448->setRoutingType((ConnType)2);\n\n    ConnRef *connRef473830263 = new ConnRef(router, 473830263);\n    ConnEnd srcPt473830263(junctionRef394539723);\n    connRef473830263->setSourceEndpoint(srcPt473830263);\n    ConnEnd dstPt473830263(junctionRef41941580);\n    connRef473830263->setDestEndpoint(dstPt473830263);\n    connRef473830263->setRoutingType((ConnType)2);\n\n    ConnRef *connRef475132644 = new ConnRef(router, 475132644);\n    ConnEnd srcPt475132644(Point(27725, 27185), 1);\n    connRef475132644->setSourceEndpoint(srcPt475132644);\n    ConnEnd dstPt475132644(Point(27415, 27175), 8);\n    connRef475132644->setDestEndpoint(dstPt475132644);\n    connRef475132644->setRoutingType((ConnType)2);\n\n    ConnRef *connRef482803577 = new ConnRef(router, 482803577);\n    ConnEnd srcPt482803577(Point(24560, 28975), 4);\n    connRef482803577->setSourceEndpoint(srcPt482803577);\n    ConnEnd dstPt482803577(Point(25835, 27850), 4);\n    connRef482803577->setDestEndpoint(dstPt482803577);\n    connRef482803577->setRoutingType((ConnType)2);\n\n    ConnRef *connRef485259659 = new ConnRef(router, 485259659);\n    ConnEnd srcPt485259659(Point(27085, 26875), 4);\n    connRef485259659->setSourceEndpoint(srcPt485259659);\n    ConnEnd dstPt485259659(Point(26165, 27025), 8);\n    connRef485259659->setDestEndpoint(dstPt485259659);\n    connRef485259659->setRoutingType((ConnType)2);\n\n    ConnRef *connRef489175830 = new ConnRef(router, 489175830);\n    ConnEnd srcPt489175830(Point(24610, 29600), 4);\n    connRef489175830->setSourceEndpoint(srcPt489175830);\n    ConnEnd dstPt489175830(Point(25835, 27925), 4);\n    connRef489175830->setDestEndpoint(dstPt489175830);\n    connRef489175830->setRoutingType((ConnType)2);\n\n    ConnRef *connRef491853546 = new ConnRef(router, 491853546);\n    ConnEnd srcPt491853546(Point(23940, 28000), 8);\n    connRef491853546->setSourceEndpoint(srcPt491853546);\n    ConnEnd dstPt491853546(junctionRef790438915);\n    connRef491853546->setDestEndpoint(dstPt491853546);\n    connRef491853546->setRoutingType((ConnType)2);\n\n    ConnRef *connRef493768530 = new ConnRef(router, 493768530);\n    ConnEnd srcPt493768530(Point(24460, 26975), 4);\n    connRef493768530->setSourceEndpoint(srcPt493768530);\n    ConnEnd dstPt493768530(junctionRef23132835);\n    connRef493768530->setDestEndpoint(dstPt493768530);\n    connRef493768530->setRoutingType((ConnType)2);\n\n    ConnRef *connRef545608051 = new ConnRef(router, 545608051);\n    ConnEnd srcPt545608051(Point(23915, 26550), 8);\n    connRef545608051->setSourceEndpoint(srcPt545608051);\n    ConnEnd dstPt545608051(Point(24125, 26560), 1);\n    connRef545608051->setDestEndpoint(dstPt545608051);\n    connRef545608051->setRoutingType((ConnType)2);\n\n    ConnRef *connRef553412832 = new ConnRef(router, 553412832);\n    ConnEnd srcPt553412832(Point(24815, 27350), 8);\n    connRef553412832->setSourceEndpoint(srcPt553412832);\n    ConnEnd dstPt553412832(Point(24950, 27360), 1);\n    connRef553412832->setDestEndpoint(dstPt553412832);\n    connRef553412832->setRoutingType((ConnType)2);\n\n    ConnRef *connRef561568812 = new ConnRef(router, 561568812);\n    ConnEnd srcPt561568812(Point(27085, 27250), 4);\n    connRef561568812->setSourceEndpoint(srcPt561568812);\n    ConnEnd dstPt561568812(Point(26165, 27100), 8);\n    connRef561568812->setDestEndpoint(dstPt561568812);\n    connRef561568812->setRoutingType((ConnType)2);\n\n    ConnRef *connRef567114946 = new ConnRef(router, 567114946);\n    ConnEnd srcPt567114946(junctionRef16613420);\n    connRef567114946->setSourceEndpoint(srcPt567114946);\n    ConnEnd dstPt567114946(junctionRef391945245);\n    connRef567114946->setDestEndpoint(dstPt567114946);\n    connRef567114946->setRoutingType((ConnType)2);\n\n    ConnRef *connRef568675195 = new ConnRef(router, 568675195);\n    ConnEnd srcPt568675195(Point(27540, 29700), 8);\n    connRef568675195->setSourceEndpoint(srcPt568675195);\n    ConnEnd dstPt568675195(junctionRef358449734);\n    connRef568675195->setDestEndpoint(dstPt568675195);\n    connRef568675195->setRoutingType((ConnType)2);\n\n    ConnRef *connRef578029290 = new ConnRef(router, 578029290);\n    ConnEnd srcPt578029290(junctionRef137883060);\n    connRef578029290->setSourceEndpoint(srcPt578029290);\n    ConnEnd dstPt578029290(junctionRef350832579);\n    connRef578029290->setDestEndpoint(dstPt578029290);\n    connRef578029290->setRoutingType((ConnType)2);\n\n    ConnRef *connRef580228904 = new ConnRef(router, 580228904);\n    ConnEnd srcPt580228904(Point(23660, 29075), 4);\n    connRef580228904->setSourceEndpoint(srcPt580228904);\n    ConnEnd dstPt580228904(junctionRef495386613);\n    connRef580228904->setDestEndpoint(dstPt580228904);\n    connRef580228904->setRoutingType((ConnType)2);\n\n    ConnRef *connRef591782037 = new ConnRef(router, 591782037);\n    ConnEnd srcPt591782037(Point(27210, 29700), 4);\n    connRef591782037->setSourceEndpoint(srcPt591782037);\n    ConnEnd dstPt591782037(Point(25835, 28225), 4);\n    connRef591782037->setDestEndpoint(dstPt591782037);\n    connRef591782037->setRoutingType((ConnType)2);\n\n    ConnRef *connRef592807451 = new ConnRef(router, 592807451);\n    ConnEnd srcPt592807451(junctionRef144791664);\n    connRef592807451->setSourceEndpoint(srcPt592807451);\n    ConnEnd dstPt592807451(junctionRef706194558);\n    connRef592807451->setDestEndpoint(dstPt592807451);\n    connRef592807451->setRoutingType((ConnType)2);\n\n    ConnRef *connRef594396814 = new ConnRef(router, 594396814);\n    ConnEnd srcPt594396814(junctionRef58465624);\n    connRef594396814->setSourceEndpoint(srcPt594396814);\n    ConnEnd dstPt594396814(Point(23635, 28575), 4);\n    connRef594396814->setDestEndpoint(dstPt594396814);\n    connRef594396814->setRoutingType((ConnType)2);\n\n    ConnRef *connRef599540824 = new ConnRef(router, 599540824);\n    ConnEnd srcPt599540824(Point(22890, 29325), 8);\n    connRef599540824->setSourceEndpoint(srcPt599540824);\n    ConnEnd dstPt599540824(junctionRef736226792);\n    connRef599540824->setDestEndpoint(dstPt599540824);\n    connRef599540824->setRoutingType((ConnType)2);\n\n    ConnRef *connRef603411683 = new ConnRef(router, 603411683);\n    ConnEnd srcPt603411683(Point(23610, 28000), 4);\n    connRef603411683->setSourceEndpoint(srcPt603411683);\n    ConnEnd dstPt603411683(Point(25835, 28000), 4);\n    connRef603411683->setDestEndpoint(dstPt603411683);\n    connRef603411683->setRoutingType((ConnType)2);\n\n    ConnRef *connRef605752708 = new ConnRef(router, 605752708);\n    ConnEnd srcPt605752708(Point(23610, 26200), 4);\n    connRef605752708->setSourceEndpoint(srcPt605752708);\n    ConnEnd dstPt605752708(junctionRef309723792);\n    connRef605752708->setDestEndpoint(dstPt605752708);\n    connRef605752708->setRoutingType((ConnType)2);\n\n    ConnRef *connRef606705960 = new ConnRef(router, 606705960);\n    ConnEnd srcPt606705960(junctionRef557043721);\n    connRef606705960->setSourceEndpoint(srcPt606705960);\n    ConnEnd dstPt606705960(junctionRef221746560);\n    connRef606705960->setDestEndpoint(dstPt606705960);\n    connRef606705960->setRoutingType((ConnType)2);\n\n    ConnRef *connRef609832117 = new ConnRef(router, 609832117);\n    ConnEnd srcPt609832117(junctionRef990913310);\n    connRef609832117->setSourceEndpoint(srcPt609832117);\n    ConnEnd dstPt609832117(junctionRef295885488);\n    connRef609832117->setDestEndpoint(dstPt609832117);\n    connRef609832117->setRoutingType((ConnType)2);\n\n    ConnRef *connRef621742890 = new ConnRef(router, 621742890);\n    ConnEnd srcPt621742890(junctionRef639333280);\n    connRef621742890->setSourceEndpoint(srcPt621742890);\n    ConnEnd dstPt621742890(junctionRef394539723);\n    connRef621742890->setDestEndpoint(dstPt621742890);\n    connRef621742890->setRoutingType((ConnType)2);\n\n    ConnRef *connRef636523650 = new ConnRef(router, 636523650);\n    ConnEnd srcPt636523650(Point(23940, 26275), 8);\n    connRef636523650->setSourceEndpoint(srcPt636523650);\n    ConnEnd dstPt636523650(junctionRef639333280);\n    connRef636523650->setDestEndpoint(dstPt636523650);\n    connRef636523650->setRoutingType((ConnType)2);\n\n    ConnRef *connRef642950671 = new ConnRef(router, 642950671);\n    ConnEnd srcPt642950671(Point(23940, 26200), 8);\n    connRef642950671->setSourceEndpoint(srcPt642950671);\n    ConnEnd dstPt642950671(Point(24175, 26210), 1);\n    connRef642950671->setDestEndpoint(dstPt642950671);\n    connRef642950671->setRoutingType((ConnType)2);\n\n    ConnRef *connRef651115920 = new ConnRef(router, 651115920);\n    ConnEnd srcPt651115920(Point(27160, 28425), 4);\n    connRef651115920->setSourceEndpoint(srcPt651115920);\n    ConnEnd dstPt651115920(junctionRef255105144);\n    connRef651115920->setDestEndpoint(dstPt651115920);\n    connRef651115920->setRoutingType((ConnType)2);\n\n    ConnRef *connRef671449520 = new ConnRef(router, 671449520);\n    ConnEnd srcPt671449520(Point(24250, 28935), 1);\n    connRef671449520->setSourceEndpoint(srcPt671449520);\n    ConnEnd dstPt671449520(Point(23990, 28925), 8);\n    connRef671449520->setDestEndpoint(dstPt671449520);\n    connRef671449520->setRoutingType((ConnType)2);\n\n    ConnRef *connRef683989950 = new ConnRef(router, 683989950);\n    ConnEnd srcPt683989950(Point(27415, 26875), 8);\n    connRef683989950->setSourceEndpoint(srcPt683989950);\n    ConnEnd dstPt683989950(junctionRef373450980);\n    connRef683989950->setDestEndpoint(dstPt683989950);\n    connRef683989950->setRoutingType((ConnType)2);\n\n    ConnRef *connRef906470916 = new ConnRef(router, 906470916);\n    ConnEnd srcPt906470916(junctionRef275948952);\n    connRef906470916->setSourceEndpoint(srcPt906470916);\n    ConnEnd dstPt906470916(junctionRef147481188);\n    connRef906470916->setDestEndpoint(dstPt906470916);\n    connRef906470916->setRoutingType((ConnType)2);\n\n    ConnRef *connRef952154604 = new ConnRef(router, 952154604);\n    ConnEnd srcPt952154604(junctionRef504671094);\n    connRef952154604->setSourceEndpoint(srcPt952154604);\n    ConnEnd dstPt952154604(junctionRef1634752);\n    connRef952154604->setDestEndpoint(dstPt952154604);\n    connRef952154604->setRoutingType((ConnType)2);\n\n    ConnRef *connRef952588978 = new ConnRef(router, 952588978);\n    ConnEnd srcPt952588978(Point(23635, 28500), 4);\n    connRef952588978->setSourceEndpoint(srcPt952588978);\n    ConnEnd dstPt952588978(Point(25835, 28075), 4);\n    connRef952588978->setDestEndpoint(dstPt952588978);\n    connRef952588978->setRoutingType((ConnType)2);\n\n    router->processTransaction();\n    router->outputDiagram(\"output/slowrouting\");\n\n    /*\n    for (int i = 0; i < 1; ++i)\n    {\n           router->moveShape(shapeRef396658490, 0.1, 0.1);\n           router->processTransaction();\n    }\n    */\n    \n    delete router;\n    return 0;\n};\n"
  },
  {
    "path": "cola/libavoid/tests/tjunct.cpp",
    "content": "#include \"libavoid/libavoid.h\"\nusing namespace Avoid;\nint main(void) {\n    Router *router = new Router(OrthogonalRouting);\n    router->setRoutingPenalty((PenaltyType)0, 50);\n    router->setRoutingPenalty((PenaltyType)1, 0);\n    router->setRoutingPenalty((PenaltyType)2, 200);\n    router->setRoutingPenalty((PenaltyType)3, 4000);\n    router->setRoutingPenalty((PenaltyType)4, 105);\n    router->setRoutingParameter(idealNudgingDistance, 25);\n    \n    JunctionRef *jRef1 = new JunctionRef(router, Point(50700, 51075));\n\n    Rectangle rect92712048(Point(51246, 50475), Point(51304, 50585));\n    new ShapeRef(router, rect92712048, 92712048);\n    Rectangle rect23127921(Point(50365, 50766), Point(50485, 50834));\n    new ShapeRef(router, rect23127921, 23127921);\n    Rectangle rect159957148(Point(51740, 50891), Point(51860, 50959));\n    new ShapeRef(router, rect159957148, 159957148);\n    Rectangle rect1350214(Point(50375, 51015), Point(50625, 51135));\n    new ShapeRef(router, rect1350214, 1350214);\n    Rectangle rect247197258(Point(50265, 51046), Point(50375, 51104));\n    new ShapeRef(router, rect247197258, 247197258);\n    Rectangle rect281096654(Point(50700, 50390), Point(51000, 50610));\n    new ShapeRef(router, rect281096654, 281096654);\n    ConnEnd srcPt342420237(Point(50425, 50800), 15);\n    ConnEnd dstPt342420237(Point(50710, 50450), 4);\n    new ConnRef(router, srcPt342420237, dstPt342420237, 342420237);\n    ConnEnd srcPt352019675(Point(50990, 50500), 8);\n    ConnEnd dstPt352019675(jRef1);\n    new ConnRef(router, srcPt352019675, dstPt352019675, 352019675);\n    ConnEnd srcPt42699400(jRef1);\n    ConnEnd dstPt42699400(Point(50615, 51075), 8);\n    new ConnRef(router, srcPt42699400, dstPt42699400, 42699400);\n    ConnEnd srcPt94712625(Point(50710, 50550), 4);\n    ConnEnd dstPt94712625(jRef1);\n    new ConnRef(router, srcPt94712625, dstPt94712625, 94712625);\n    ConnEnd srcPt92802970(Point(50990, 50450), 8);\n    ConnEnd dstPt92802970(Point(51275, 50485), 1);\n    new ConnRef(router, srcPt92802970, dstPt92802970, 92802970);\n    ConnEnd srcPt716502036(Point(50710, 50500), 4);\n    ConnEnd dstPt716502036(Point(51800, 50925), 15);\n    new ConnRef(router, srcPt716502036, dstPt716502036, 716502036);\n    router->processTransaction();\n    router->outputDiagram(\"output/tjunct\");\n    delete router;\n    return 0;\n};\n"
  },
  {
    "path": "cola/libavoid/tests/treeRootCrash01.cpp",
    "content": "#include \"libavoid/libavoid.h\"\r\n#include <sstream>\r\n\r\nvoid test()\r\n{\r\n\tAvoid::ConnEnd end1_0;\r\n\tAvoid::ConnEnd end2_0;\r\n\tAvoid::Polygon poly0;\r\n\tAvoid::Router * router0 = new Avoid::Router(Avoid::OrthogonalRouting);\r\n\tAvoid::HyperedgeNewAndDeletedObjectLists newanddeletedobjects_0;\r\n\tAvoid::ConnRefList::const_iterator connit_0;\r\n\tAvoid::JunctionRefList::const_iterator junctionit_0;\r\n\trouter0->setTransactionUse(true);\r\n\trouter0->setRoutingPenalty(Avoid::segmentPenalty);\r\n\trouter0->setRoutingParameter(Avoid::portDirectionPenalty, 100);\r\n\trouter0->setRoutingParameter(Avoid::idealNudgingDistance, 25);\r\n\trouter0->setRoutingOption(Avoid::improveHyperedgeRoutesMovingAddingAndDeletingJunctions, true);\r\n\trouter0->setRoutingPenalty(Avoid::fixedSharedPathPenalty, 9000);\r\n\trouter0->setRoutingOption(Avoid::penaliseOrthogonalSharedPathsAtConnEnds, true);\r\n\trouter0->setRoutingParameter(Avoid::crossingPenalty);\r\n\trouter0->setRoutingOption(Avoid::performUnifyingNudgingPreprocessingStep, true);\r\n\trouter0->setRoutingPenalty(Avoid::fixedSharedPathPenalty, 9000);\r\n\trouter0->setRoutingOption(Avoid::penaliseOrthogonalSharedPathsAtConnEnds, true);\r\n\trouter0->setRoutingParameter(Avoid::crossingPenalty);\r\n\trouter0->setRoutingOption(Avoid::performUnifyingNudgingPreprocessingStep, true);\r\n\tpoly0 = Avoid::Polygon(4);\r\n\tpoly0.setPoint(0, Avoid::Point(50410, 49965));\r\n\tpoly0.setPoint(1, Avoid::Point(50410, 50710));\r\n\tpoly0.setPoint(2, Avoid::Point(49975, 50710));\r\n\tpoly0.setPoint(3, Avoid::Point(49975, 49965));\r\n\tAvoid::ShapeRef * shape0_1023802233 = new Avoid::ShapeRef(router0, poly0, 1023802233);\r\n\tAvoid::ShapeConnectionPin * pin0_1023802233_2 = new Avoid::ShapeConnectionPin(shape0_1023802233, 3, 0, 560, false, 10, 4);\r\n\tpin0_1023802233_2->setExclusive(true);\r\n\tAvoid::ShapeConnectionPin * pin0_1023802233_12 = new Avoid::ShapeConnectionPin(shape0_1023802233, 13, 0, 635, false, 10, 4);\r\n\tpin0_1023802233_12->setExclusive(true);\r\n\tAvoid::ShapeConnectionPin * pin0_1023802233_19 = new Avoid::ShapeConnectionPin(shape0_1023802233, 20, 0, 485, false, 10, 4);\r\n\tpin0_1023802233_19->setExclusive(true);\r\n\tpoly0 = Avoid::Polygon(4);\r\n\tpoly0.setPoint(0, Avoid::Point(49504, 50775));\r\n\tpoly0.setPoint(1, Avoid::Point(49504, 50860));\r\n\tpoly0.setPoint(2, Avoid::Point(49446, 50860));\r\n\tpoly0.setPoint(3, Avoid::Point(49446, 50775));\r\n\tAvoid::ShapeRef * shape0_368159034 = new Avoid::ShapeRef(router0, poly0, 368159034);\r\n\tAvoid::ShapeConnectionPin * pin0_368159034_0 = new Avoid::ShapeConnectionPin(shape0_368159034, 1, 29, 0, false, 10, 1);\r\n\tpin0_368159034_0->setExclusive(true);\r\n\t\r\n\tAvoid::JunctionRef * junction0_526491597 = new Avoid::JunctionRef(router0, Avoid::Point(49600, 50525), 526491597);\r\n\tjunction0_526491597->setPositionFixed(false);\r\n\t\r\n\tAvoid::JunctionRef * junction0_30828132 = new Avoid::JunctionRef(router0, Avoid::Point(49600, 50650), 30828132);\r\n\tjunction0_30828132->setPositionFixed(false);\r\n\t\r\n\t// Right, top - to top junction\r\n\tend1_0 = Avoid::ConnEnd(shape0_1023802233, 20);\r\n\tend2_0 = Avoid::ConnEnd(junction0_526491597);\r\n\tAvoid::ConnRef * conn0_117136925 = new Avoid::ConnRef(router0, end1_0, end2_0, 117136925);\r\n\tpoly0 = Avoid::PolyLine(3);\r\n\tpoly0.setPoint(0, Avoid::Point(49975, 50450));\r\n\tpoly0.setPoint(1, Avoid::Point(49600, 50450));\r\n\tpoly0.setPoint(2, Avoid::Point(49600, 50525));\r\n\tconn0_117136925->setFixedRoute(poly0);\r\n\tconn0_117136925->setSourceEndpoint(end1_0);\r\n\tconn0_117136925->setDestEndpoint(end2_0);\r\n\t\r\n\t// Right, middle - to top junction.\r\n\tend1_0 = Avoid::ConnEnd(shape0_1023802233, 3);\r\n\tend2_0 = Avoid::ConnEnd(junction0_526491597);\r\n\tAvoid::ConnRef * conn0_224626788 = new Avoid::ConnRef(router0, end1_0, end2_0, 224626788);\r\n\t\r\n\t// Middle vertical from top junction point to lower junction.\r\n#ifdef CORRECTED\r\n\tend1_0 = Avoid::ConnEnd(junction0_526491597);\r\n#else\r\n\tend1_0 = Avoid::ConnEnd(Avoid::Point(49600, 50525), 15);\r\n#endif\r\n\tend2_0 = Avoid::ConnEnd(junction0_30828132);\r\n\tAvoid::ConnRef * conn0_446423927 = new Avoid::ConnRef(router0, end1_0, end2_0, 446423927);\r\n\tpoly0 = Avoid::PolyLine(3);\r\n\tpoly0.setPoint(0, Avoid::Point(49600, 50525));\r\n\tpoly0.setPoint(1, Avoid::Point(49600, 50587));\r\n\tpoly0.setPoint(2, Avoid::Point(49600, 50650));\r\n\tconn0_446423927->setFixedRoute(poly0);\r\n\tconn0_446423927->setSourceEndpoint(end1_0);\r\n\tconn0_446423927->setDestEndpoint(end2_0);\r\n\t\r\n\t// Bottom, right - to lower junction point.\r\n\tend1_0 = Avoid::ConnEnd(shape0_1023802233, 13);\r\n#ifdef CORRECTED\r\n\tend2_0 = Avoid::ConnEnd(junction0_30828132);\r\n#else\r\n\tend2_0 = Avoid::ConnEnd(Avoid::Point(49600, 50650), 15);\r\n#endif\r\n\tAvoid::ConnRef * conn0_11189244 = new Avoid::ConnRef(router0, end1_0, end2_0, 11189244);\r\n\tpoly0 = Avoid::PolyLine(3);\r\n\tpoly0.setPoint(0, Avoid::Point(49975, 50600));\r\n\tpoly0.setPoint(1, Avoid::Point(49600, 50600));\r\n\tpoly0.setPoint(2, Avoid::Point(49600, 50650));\r\n\tconn0_11189244->setFixedRoute(poly0);\r\n\tconn0_11189244->setSourceEndpoint(end1_0);\r\n\tconn0_11189244->setDestEndpoint(end2_0);\r\n\r\n\t// Left bottom - to lower junction.\r\n\tend1_0 = Avoid::ConnEnd(shape0_368159034, 1);\r\n\tend2_0 = Avoid::ConnEnd(junction0_30828132);\r\n\tAvoid::ConnRef * conn0_280909026 = new Avoid::ConnRef(router0, end1_0, end2_0, 280909026);\r\n\t\r\n\trouter0->processTransaction();\r\n\r\n\tnewanddeletedobjects_0 = router0->newAndDeletedObjectListsFromHyperedgeImprovement();\r\n\trouter0->outputDiagram(\"output/treeRootCrash01-1\");\r\n\t\r\n\tconn0_117136925->clearFixedRoute();\r\n\tconn0_224626788->makePathInvalid();\r\n\tconn0_446423927->clearFixedRoute();\r\n\tconn0_11189244->clearFixedRoute();\r\n\tconn0_280909026->makePathInvalid();\r\n\tjunction0_526491597->setPositionFixed(false);\r\n\tjunction0_30828132->setPositionFixed(false);\r\n\trouter0->processTransaction();\r\n\r\n\tnewanddeletedobjects_0 = router0->newAndDeletedObjectListsFromHyperedgeImprovement();\r\n\trouter0->outputDiagram(\"output/treeRootCrash01-2\");\r\n\trouter0->processTransaction();\r\n\r\n\tnewanddeletedobjects_0 = router0->newAndDeletedObjectListsFromHyperedgeImprovement();\r\n\trouter0->outputDiagram(\"output/treeRootCrash01-3\");\r\n\t\r\n\trouter0->hyperedgeRerouter()->registerHyperedgeForRerouting(junction0_526491597);\r\n\trouter0->processTransaction();\r\n\trouter0->outputDiagram(\"output/treeRootCrash01-4\");\r\n\r\n\tdelete router0;\r\n}\r\n\r\n\r\nextern \"C\" int main(int argc, char* argv[])\r\n{\r\n\ttest();\r\n\treturn 0;\r\n}\r\n"
  },
  {
    "path": "cola/libavoid/tests/treeRootCrash02.cpp",
    "content": "// Based on constructInterleavedCrash bug report.\r\n//\r\n#include \"libavoid/libavoid.h\"\r\n#include <sstream>\r\n\r\nvoid test()\r\n{\r\n\tAvoid::ConnEnd end1_0;\r\n\tAvoid::ConnEnd end2_0;\r\n\tAvoid::Polygon poly0;\r\n\tAvoid::Router * router0 = new Avoid::Router(Avoid::OrthogonalRouting);\r\n\tAvoid::HyperedgeNewAndDeletedObjectLists newanddeletedobjects_0;\r\n\tAvoid::ConnRefList::const_iterator connit_0;\r\n\tAvoid::JunctionRefList::const_iterator junctionit_0;\r\n\trouter0->setTransactionUse(true);\r\n\trouter0->setRoutingPenalty(Avoid::segmentPenalty);\r\n\trouter0->setRoutingParameter(Avoid::portDirectionPenalty, 100);\r\n\trouter0->setRoutingParameter(Avoid::idealNudgingDistance, 25);\r\n\trouter0->setRoutingOption(Avoid::improveHyperedgeRoutesMovingAddingAndDeletingJunctions, true);\r\n\trouter0->setRoutingPenalty(Avoid::fixedSharedPathPenalty, 9000);\r\n\trouter0->setRoutingOption(Avoid::penaliseOrthogonalSharedPathsAtConnEnds, true);\r\n\trouter0->setRoutingParameter(Avoid::crossingPenalty);\r\n\trouter0->setRoutingOption(Avoid::performUnifyingNudgingPreprocessingStep, true);\r\n\tpoly0 = Avoid::Polygon(4);\r\n\tpoly0.setPoint(0, Avoid::Point(50410, 49975));\r\n\tpoly0.setPoint(1, Avoid::Point(50410, 50710));\r\n\tpoly0.setPoint(2, Avoid::Point(49975, 50710));\r\n\tpoly0.setPoint(3, Avoid::Point(49975, 49975));\r\n\tAvoid::ShapeRef * shape0_1023802233 = new Avoid::ShapeRef(router0, poly0, 1023802233);\r\n\tAvoid::ShapeConnectionPin * pin0_1023802233_0 = new Avoid::ShapeConnectionPin(shape0_1023802233, 1, 0, 100, false, 10, 4);\r\n\tpin0_1023802233_0->setExclusive(true);\r\n\tAvoid::ShapeConnectionPin * pin0_1023802233_1 = new Avoid::ShapeConnectionPin(shape0_1023802233, 2, 0, 250, false, 10, 4);\r\n\tpin0_1023802233_1->setExclusive(true);\r\n\tAvoid::ShapeConnectionPin * pin0_1023802233_2 = new Avoid::ShapeConnectionPin(shape0_1023802233, 3, 0, 550, false, 10, 4);\r\n\tpin0_1023802233_2->setExclusive(true);\r\n\tAvoid::ShapeConnectionPin * pin0_1023802233_3 = new Avoid::ShapeConnectionPin(shape0_1023802233, 4, 425, 100, false, 10, 8);\r\n\tpin0_1023802233_3->setExclusive(true);\r\n\tAvoid::ShapeConnectionPin * pin0_1023802233_4 = new Avoid::ShapeConnectionPin(shape0_1023802233, 5, 250, 0, false, 10, 1);\r\n\tpin0_1023802233_4->setExclusive(true);\r\n\tAvoid::ShapeConnectionPin * pin0_1023802233_5 = new Avoid::ShapeConnectionPin(shape0_1023802233, 6, 425, 250, false, 10, 8);\r\n\tpin0_1023802233_5->setExclusive(true);\r\n\tAvoid::ShapeConnectionPin * pin0_1023802233_6 = new Avoid::ShapeConnectionPin(shape0_1023802233, 7, 250, 725, false, 10, 2);\r\n\tpin0_1023802233_6->setExclusive(true);\r\n\tAvoid::ShapeConnectionPin * pin0_1023802233_7 = new Avoid::ShapeConnectionPin(shape0_1023802233, 8, 100, 725, false, 10, 2);\r\n\tpin0_1023802233_7->setExclusive(true);\r\n\tAvoid::ShapeConnectionPin * pin0_1023802233_8 = new Avoid::ShapeConnectionPin(shape0_1023802233, 9, 100, 0, false, 10, 1);\r\n\tpin0_1023802233_8->setExclusive(true);\r\n\tAvoid::ShapeConnectionPin * pin0_1023802233_9 = new Avoid::ShapeConnectionPin(shape0_1023802233, 10, 0, 400, false, 10, 4);\r\n\tpin0_1023802233_9->setExclusive(true);\r\n\tAvoid::ShapeConnectionPin * pin0_1023802233_10 = new Avoid::ShapeConnectionPin(shape0_1023802233, 11, 0, 175, false, 10, 4);\r\n\tpin0_1023802233_10->setExclusive(true);\r\n\tAvoid::ShapeConnectionPin * pin0_1023802233_11 = new Avoid::ShapeConnectionPin(shape0_1023802233, 12, 0, 325, false, 10, 4);\r\n\tpin0_1023802233_11->setExclusive(true);\r\n\tAvoid::ShapeConnectionPin * pin0_1023802233_12 = new Avoid::ShapeConnectionPin(shape0_1023802233, 13, 0, 625, false, 10, 4);\r\n\tpin0_1023802233_12->setExclusive(true);\r\n\tAvoid::ShapeConnectionPin * pin0_1023802233_13 = new Avoid::ShapeConnectionPin(shape0_1023802233, 14, 425, 175, false, 10, 8);\r\n\tpin0_1023802233_13->setExclusive(true);\r\n\tAvoid::ShapeConnectionPin * pin0_1023802233_14 = new Avoid::ShapeConnectionPin(shape0_1023802233, 15, 325, 0, false, 10, 1);\r\n\tpin0_1023802233_14->setExclusive(true);\r\n\tAvoid::ShapeConnectionPin * pin0_1023802233_15 = new Avoid::ShapeConnectionPin(shape0_1023802233, 16, 425, 325, false, 10, 8);\r\n\tpin0_1023802233_15->setExclusive(true);\r\n\tAvoid::ShapeConnectionPin * pin0_1023802233_16 = new Avoid::ShapeConnectionPin(shape0_1023802233, 17, 325, 725, false, 10, 2);\r\n\tpin0_1023802233_16->setExclusive(true);\r\n\tAvoid::ShapeConnectionPin * pin0_1023802233_17 = new Avoid::ShapeConnectionPin(shape0_1023802233, 18, 175, 725, false, 10, 2);\r\n\tpin0_1023802233_17->setExclusive(true);\r\n\tAvoid::ShapeConnectionPin * pin0_1023802233_18 = new Avoid::ShapeConnectionPin(shape0_1023802233, 19, 175, 0, false, 10, 1);\r\n\tpin0_1023802233_18->setExclusive(true);\r\n\tAvoid::ShapeConnectionPin * pin0_1023802233_19 = new Avoid::ShapeConnectionPin(shape0_1023802233, 20, 0, 475, false, 10, 4);\r\n\tpin0_1023802233_19->setExclusive(true);\r\n\tpoly0 = Avoid::Polygon(4);\r\n\tpoly0.setPoint(0, Avoid::Point(49535, 50540));\r\n\tpoly0.setPoint(1, Avoid::Point(49535, 50650));\r\n\tpoly0.setPoint(2, Avoid::Point(49415, 50650));\r\n\tpoly0.setPoint(3, Avoid::Point(49415, 50540));\r\n\tAvoid::ShapeRef * shape0_145706592 = new Avoid::ShapeRef(router0, poly0, 145706592);\r\n\tAvoid::ShapeConnectionPin * pin0_145706592_0 = new Avoid::ShapeConnectionPin(shape0_145706592, 1, 60, 10, false, 10, 1);\r\n\tpin0_145706592_0->setExclusive(true);\r\n\tAvoid::ShapeConnectionPin * pin0_145706592_1 = new Avoid::ShapeConnectionPin(shape0_145706592, 2, 60, -1, false, 10, 2);\r\n\tpin0_145706592_1->setExclusive(true);\r\n\tpoly0 = Avoid::Polygon(4);\r\n\tpoly0.setPoint(0, Avoid::Point(49504, 50775));\r\n\tpoly0.setPoint(1, Avoid::Point(49504, 50860));\r\n\tpoly0.setPoint(2, Avoid::Point(49446, 50860));\r\n\tpoly0.setPoint(3, Avoid::Point(49446, 50775));\r\n\tAvoid::ShapeRef * shape0_368159034 = new Avoid::ShapeRef(router0, poly0, 368159034);\r\n\tAvoid::ShapeConnectionPin * pin0_368159034_0 = new Avoid::ShapeConnectionPin(shape0_368159034, 1, 29, 0, false, 10, 1);\r\n\tpin0_368159034_0->setExclusive(true);\r\n\tAvoid::JunctionRef * junction0_144230940 = new Avoid::JunctionRef(router0, Avoid::Point(49475, 50725), 144230940);\r\n\tjunction0_144230940->setPositionFixed(true);\r\n\tAvoid::JunctionRef * junction0_526491597 = new Avoid::JunctionRef(router0, Avoid::Point(49600, 50525), 526491597);\r\n\tjunction0_526491597->setPositionFixed(true);\r\n\tAvoid::JunctionRef * junction0_30828132 = new Avoid::JunctionRef(router0, Avoid::Point(49600, 50650), 30828132);\r\n\tjunction0_30828132->setPositionFixed(true);\r\n\tpoly0 = Avoid::Polygon(4);\r\n\tpoly0.setPoint(0, Avoid::Point(50485, 49265));\r\n\tpoly0.setPoint(1, Avoid::Point(50485, 49550));\r\n\tpoly0.setPoint(2, Avoid::Point(50190, 49550));\r\n\tpoly0.setPoint(3, Avoid::Point(50190, 49265));\r\n\tAvoid::ShapeRef * shape0_59732242 = new Avoid::ShapeRef(router0, poly0, 59732242);\r\n\tAvoid::ShapeConnectionPin * pin0_59732242_0 = new Avoid::ShapeConnectionPin(shape0_59732242, 1, 110, 10, false, 10, 1);\r\n\tpin0_59732242_0->setExclusive(true);\r\n\tAvoid::ShapeConnectionPin * pin0_59732242_1 = new Avoid::ShapeConnectionPin(shape0_59732242, 2, 10, 110, false, 10, 4);\r\n\tpin0_59732242_1->setExclusive(true);\r\n\tAvoid::ShapeConnectionPin * pin0_59732242_2 = new Avoid::ShapeConnectionPin(shape0_59732242, 3, 110, -1, false, 10, 2);\r\n\tpin0_59732242_2->setExclusive(true);\r\n\tAvoid::ShapeConnectionPin * pin0_59732242_3 = new Avoid::ShapeConnectionPin(shape0_59732242, 4, 285, 110, false, 10, 8);\r\n\tpin0_59732242_3->setExclusive(true);\r\n\tAvoid::ShapeConnectionPin * pin0_59732242_4 = new Avoid::ShapeConnectionPin(shape0_59732242, 5, 285, 185, false, 10, 8);\r\n\tpin0_59732242_4->setExclusive(true);\r\n\tpoly0 = Avoid::Polygon(4);\r\n\tpoly0.setPoint(0, Avoid::Point(50610, 49646));\r\n\tpoly0.setPoint(1, Avoid::Point(50610, 49704));\r\n\tpoly0.setPoint(2, Avoid::Point(50525, 49704));\r\n\tpoly0.setPoint(3, Avoid::Point(50525, 49646));\r\n\tAvoid::ShapeRef * shape0_152071508 = new Avoid::ShapeRef(router0, poly0, 152071508);\r\n\tAvoid::ShapeConnectionPin * pin0_152071508_0 = new Avoid::ShapeConnectionPin(shape0_152071508, 1, 0, 29, false, 10, 4);\r\n\tpin0_152071508_0->setExclusive(true);\r\n\tAvoid::JunctionRef * junction0_24560921 = new Avoid::JunctionRef(router0, Avoid::Point(50300, 49675), 24560921);\r\n\tjunction0_24560921->setPositionFixed(true);\r\n\tend1_0 = Avoid::ConnEnd(shape0_145706592, 2);\r\n\tend2_0 = Avoid::ConnEnd(junction0_144230940);\r\n\tAvoid::ConnRef * conn0_61425638 = new Avoid::ConnRef(router0, end1_0, end2_0, 61425638);\r\n\tend1_0 = Avoid::ConnEnd(junction0_144230940);\r\n\tend2_0 = Avoid::ConnEnd(shape0_368159034, 1);\r\n\tAvoid::ConnRef * conn0_378385232 = new Avoid::ConnRef(router0, end1_0, end2_0, 378385232);\r\n\tend1_0 = Avoid::ConnEnd(Avoid::Point(49975, 50450), 15);\r\n\tend2_0 = Avoid::ConnEnd(Avoid::Point(49600, 50525), 15);\r\n\tAvoid::ConnRef * conn0_117136925 = new Avoid::ConnRef(router0, end1_0, end2_0, 117136925);\r\n\tpoly0 = Avoid::PolyLine(3);\r\n\tpoly0.setPoint(0, Avoid::Point(49975, 50450));\r\n\tpoly0.setPoint(1, Avoid::Point(49600, 50450));\r\n\tpoly0.setPoint(2, Avoid::Point(49600, 50525));\r\n\tconn0_117136925->setFixedRoute(poly0);\r\n\tconn0_117136925->setSourceEndpoint(end1_0);\r\n\tconn0_117136925->setDestEndpoint(end2_0);\r\n\tend1_0 = Avoid::ConnEnd(shape0_1023802233, 3);\r\n\tend2_0 = Avoid::ConnEnd(junction0_526491597);\r\n\tAvoid::ConnRef * conn0_224626788 = new Avoid::ConnRef(router0, end1_0, end2_0, 224626788);\r\n\tend1_0 = Avoid::ConnEnd(Avoid::Point(49600, 50525), 15);\r\n\tend2_0 = Avoid::ConnEnd(Avoid::Point(49600, 50650), 15);\r\n\tAvoid::ConnRef * conn0_446423927 = new Avoid::ConnRef(router0, end1_0, end2_0, 446423927);\r\n\tpoly0 = Avoid::PolyLine(3);\r\n\tpoly0.setPoint(0, Avoid::Point(49600, 50525));\r\n\tpoly0.setPoint(1, Avoid::Point(49600, 50587));\r\n\tpoly0.setPoint(2, Avoid::Point(49600, 50650));\r\n\tconn0_446423927->setFixedRoute(poly0);\r\n\tconn0_446423927->setSourceEndpoint(end1_0);\r\n\tconn0_446423927->setDestEndpoint(end2_0);\r\n\tend1_0 = Avoid::ConnEnd(Avoid::Point(49600, 50650), 15);\r\n\tend2_0 = Avoid::ConnEnd(Avoid::Point(49475, 50725), 15);\r\n\tAvoid::ConnRef * conn0_880789055 = new Avoid::ConnRef(router0, end1_0, end2_0, 880789055);\r\n\tpoly0 = Avoid::PolyLine(3);\r\n\tpoly0.setPoint(0, Avoid::Point(49600, 50650));\r\n\tpoly0.setPoint(1, Avoid::Point(49600, 50725));\r\n\tpoly0.setPoint(2, Avoid::Point(49475, 50725));\r\n\tconn0_880789055->setFixedRoute(poly0);\r\n\tconn0_880789055->setSourceEndpoint(end1_0);\r\n\tconn0_880789055->setDestEndpoint(end2_0);\r\n\tend1_0 = Avoid::ConnEnd(Avoid::Point(49975, 50600), 15);\r\n\tend2_0 = Avoid::ConnEnd(Avoid::Point(49600, 50650), 15);\r\n\tAvoid::ConnRef * conn0_11189244 = new Avoid::ConnRef(router0, end1_0, end2_0, 11189244);\r\n\tpoly0 = Avoid::PolyLine(3);\r\n\tpoly0.setPoint(0, Avoid::Point(49975, 50600));\r\n\tpoly0.setPoint(1, Avoid::Point(49600, 50600));\r\n\tpoly0.setPoint(2, Avoid::Point(49600, 50650));\r\n\tconn0_11189244->setFixedRoute(poly0);\r\n\tconn0_11189244->setSourceEndpoint(end1_0);\r\n\tconn0_11189244->setDestEndpoint(end2_0);\r\n\tend1_0 = Avoid::ConnEnd(shape0_59732242, 3);\r\n\tend2_0 = Avoid::ConnEnd(junction0_24560921);\r\n\tAvoid::ConnRef * conn0_605306624 = new Avoid::ConnRef(router0, end1_0, end2_0, 605306624);\r\n\tend1_0 = Avoid::ConnEnd(junction0_24560921);\r\n\tend2_0 = Avoid::ConnEnd(shape0_1023802233, 15);\r\n\tAvoid::ConnRef * conn0_61198110 = new Avoid::ConnRef(router0, end1_0, end2_0, 61198110);\r\n\tend1_0 = Avoid::ConnEnd(shape0_1023802233, 19);\r\n\tend2_0 = Avoid::ConnEnd(junction0_24560921);\r\n\tAvoid::ConnRef * conn0_323306544 = new Avoid::ConnRef(router0, end1_0, end2_0, 323306544);\r\n\tend1_0 = Avoid::ConnEnd(shape0_152071508, 1);\r\n\tend2_0 = Avoid::ConnEnd(junction0_24560921);\r\n\tAvoid::ConnRef * conn0_2415000 = new Avoid::ConnRef(router0, end1_0, end2_0, 2415000);\r\n\trouter0->processTransaction();\r\n\r\n\tnewanddeletedobjects_0 = router0->newAndDeletedObjectListsFromHyperedgeImprovement();\r\n\trouter0->outputDiagram(\"output/treeRootCrash02-1\");\r\n\tend2_0 = Avoid::ConnEnd(junction0_144230940);\r\n\tconn0_61425638->setDestEndpoint(end2_0);\r\n\tconn0_61425638->makePathInvalid();\r\n\tconn0_378385232->makePathInvalid();\r\n\tend1_0 = Avoid::ConnEnd(shape0_1023802233, 20);\r\n\tend2_0 = Avoid::ConnEnd(junction0_526491597);\r\n\tconn0_117136925->setSourceEndpoint(end1_0);\r\n\tconn0_117136925->setDestEndpoint(end2_0);\r\n\tconn0_117136925->clearFixedRoute();\r\n\tconn0_224626788->makePathInvalid();\r\n\tend2_0 = Avoid::ConnEnd(junction0_30828132);\r\n\tconn0_446423927->setDestEndpoint(end2_0);\r\n\tconn0_446423927->clearFixedRoute();\r\n\tconn0_880789055->clearFixedRoute();\r\n\tend1_0 = Avoid::ConnEnd(shape0_1023802233, 13);\r\n\tconn0_11189244->setSourceEndpoint(end1_0);\r\n\tconn0_11189244->clearFixedRoute();\r\n\tconn0_605306624->makePathInvalid();\r\n\tconn0_61198110->makePathInvalid();\r\n\tconn0_323306544->makePathInvalid();\r\n\tconn0_2415000->makePathInvalid();\r\n\tjunction0_144230940->setPositionFixed(false);\r\n\tjunction0_30828132->setPositionFixed(false);\r\n\tjunction0_526491597->setPositionFixed(false);\r\n\tend2_0 = Avoid::ConnEnd(junction0_144230940);\r\n\tconn0_61425638->setDestEndpoint(end2_0);\r\n\tconn0_61425638->makePathInvalid();\r\n\tconn0_378385232->makePathInvalid();\r\n\tend2_0 = Avoid::ConnEnd(junction0_526491597);\r\n\tconn0_117136925->setDestEndpoint(end2_0);\r\n\tconn0_117136925->makePathInvalid();\r\n\tconn0_224626788->makePathInvalid();\r\n\tend2_0 = Avoid::ConnEnd(junction0_30828132);\r\n\tconn0_446423927->setDestEndpoint(end2_0);\r\n\tconn0_446423927->makePathInvalid();\r\n\tconn0_880789055->makePathInvalid();\r\n\tconn0_11189244->makePathInvalid();\r\n\tjunction0_24560921->setPositionFixed(false);\r\n\tend2_0 = Avoid::ConnEnd(junction0_24560921);\r\n\tconn0_605306624->setDestEndpoint(end2_0);\r\n\tconn0_605306624->makePathInvalid();\r\n\tconn0_61198110->makePathInvalid();\r\n\tconn0_323306544->makePathInvalid();\r\n\tconn0_2415000->makePathInvalid();\r\n\trouter0->hyperedgeRerouter()->registerHyperedgeForRerouting(junction0_24560921);\r\n\trouter0->hyperedgeRerouter()->registerHyperedgeForRerouting(junction0_526491597);\r\n\trouter0->processTransaction();\r\n\r\n\tnewanddeletedobjects_0 = router0->newAndDeletedObjectListsFromHyperedgeImprovement();\r\n\trouter0->outputDiagram(\"output/treeRootCrash02-2\");\r\n\r\n\tdelete router0;\r\n}\r\n\r\nextern \"C\" int main(int argc, char* argv[])\r\n{\r\n\ttest();\r\n\treturn 0;\r\n}\r\n"
  },
  {
    "path": "cola/libavoid/tests/unsatisfiableRangeAssertion.cpp",
    "content": "#include \"libavoid/libavoid.h\"\nusing namespace Avoid;\nint main(void) {\n    Router *router = new Router(OrthogonalRouting);\n    router->setRoutingParameter((RoutingParameter)0, 50);\n    router->setRoutingParameter((RoutingParameter)1, 0);\n    router->setRoutingParameter((RoutingParameter)2, 0);\n    router->setRoutingParameter((RoutingParameter)3, 4000);\n    router->setRoutingParameter((RoutingParameter)4, 0);\n    router->setRoutingParameter((RoutingParameter)5, 0);\n    router->setRoutingParameter((RoutingParameter)6, 0);\n    router->setRoutingParameter((RoutingParameter)7, 4);\n    router->setRoutingOption((RoutingOption)0, true);\n    router->setRoutingOption((RoutingOption)1, true);\n    router->setRoutingOption((RoutingOption)2, false);\n    router->setRoutingOption((RoutingOption)3, false);\n    router->setRoutingOption((RoutingOption)4, false);\n    router->setRoutingOption((RoutingOption)5, false);\n    Polygon polygon;\n    ConnRef *connRef = nullptr;\n    ConnEnd srcPt;\n    ConnEnd dstPt;\n    PolyLine newRoute;\n    // shapeRef1\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(4056, 12427.7);\n    polygon.ps[1] = Point(4056, 12489.7);\n    polygon.ps[2] = Point(3994, 12489.7);\n    polygon.ps[3] = Point(3994, 12427.7);\n    new ShapeRef(router, polygon, 1);\n\n    // shapeRef2\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(1911, 12427.7);\n    polygon.ps[1] = Point(1911, 12489.7);\n    polygon.ps[2] = Point(1849, 12489.7);\n    polygon.ps[3] = Point(1849, 12427.7);\n    new ShapeRef(router, polygon, 2);\n\n    // shapeRef3\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(1449, 2119.29);\n    polygon.ps[1] = Point(1449, 2181.29);\n    polygon.ps[2] = Point(1387, 2181.29);\n    polygon.ps[3] = Point(1387, 2119.29);\n    new ShapeRef(router, polygon, 3);\n\n    // shapeRef4\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(1449, 2317.29);\n    polygon.ps[1] = Point(1449, 2379.29);\n    polygon.ps[2] = Point(1387, 2379.29);\n    polygon.ps[3] = Point(1387, 2317.29);\n    new ShapeRef(router, polygon, 4);\n\n    // shapeRef5\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(3561, 328.265);\n    polygon.ps[1] = Point(3561, 390.265);\n    polygon.ps[2] = Point(3499, 390.265);\n    polygon.ps[3] = Point(3499, 328.265);\n    new ShapeRef(router, polygon, 5);\n\n    // shapeRef6\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(360, 2119.29);\n    polygon.ps[1] = Point(360, 2181.29);\n    polygon.ps[2] = Point(298, 2181.29);\n    polygon.ps[3] = Point(298, 2119.29);\n    new ShapeRef(router, polygon, 6);\n\n    // shapeRef7\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(1383, 678.091);\n    polygon.ps[1] = Point(1383, 740.091);\n    polygon.ps[2] = Point(1321, 740.091);\n    polygon.ps[3] = Point(1321, 678.091);\n    new ShapeRef(router, polygon, 7);\n\n    // shapeRef8\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(921, 678.091);\n    polygon.ps[1] = Point(921, 740.091);\n    polygon.ps[2] = Point(859, 740.091);\n    polygon.ps[3] = Point(859, 678.091);\n    new ShapeRef(router, polygon, 8);\n\n    // shapeRef9\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(2670, 678.091);\n    polygon.ps[1] = Point(2670, 740.091);\n    polygon.ps[2] = Point(2608, 740.091);\n    polygon.ps[3] = Point(2608, 678.091);\n    new ShapeRef(router, polygon, 9);\n\n    // shapeRef10\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(5758.1, 1480.29);\n    polygon.ps[1] = Point(5758.1, 1542.29);\n    polygon.ps[2] = Point(5696.1, 1542.29);\n    polygon.ps[3] = Point(5696.1, 1480.29);\n    new ShapeRef(router, polygon, 10);\n\n    // shapeRef11\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(5310, 1480.29);\n    polygon.ps[1] = Point(5310, 1542.29);\n    polygon.ps[2] = Point(5248, 1542.29);\n    polygon.ps[3] = Point(5248, 1480.29);\n    new ShapeRef(router, polygon, 11);\n\n    // shapeRef12\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(4881, 12427.7);\n    polygon.ps[1] = Point(4881, 12489.7);\n    polygon.ps[2] = Point(4819, 12489.7);\n    polygon.ps[3] = Point(4819, 12427.7);\n    new ShapeRef(router, polygon, 12);\n\n    // shapeRef13\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(4881, 12129.3);\n    polygon.ps[1] = Point(4881, 12191.3);\n    polygon.ps[2] = Point(4819, 12191.3);\n    polygon.ps[3] = Point(4819, 12129.3);\n    new ShapeRef(router, polygon, 13);\n\n    // shapeRef14\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(3330, 6252.51);\n    polygon.ps[1] = Point(3330, 6314.51);\n    polygon.ps[2] = Point(3268, 6314.51);\n    polygon.ps[3] = Point(3268, 6252.51);\n    new ShapeRef(router, polygon, 14);\n\n    // shapeRef15\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(1416, 7647.79);\n    polygon.ps[1] = Point(1416, 7709.79);\n    polygon.ps[2] = Point(1354, 7709.79);\n    polygon.ps[3] = Point(1354, 7647.79);\n    new ShapeRef(router, polygon, 15);\n\n    // shapeRef16\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(1416, 8109.79);\n    polygon.ps[1] = Point(1416, 8171.79);\n    polygon.ps[2] = Point(1354, 8171.79);\n    polygon.ps[3] = Point(1354, 8109.79);\n    new ShapeRef(router, polygon, 16);\n\n    // shapeRef17\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(4650, 7097.4);\n    polygon.ps[1] = Point(4650, 7159.4);\n    polygon.ps[2] = Point(4588, 7159.4);\n    polygon.ps[3] = Point(4588, 7097.4);\n    new ShapeRef(router, polygon, 17);\n\n    // shapeRef18\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(1284, 8482.99);\n    polygon.ps[1] = Point(1284, 8544.99);\n    polygon.ps[2] = Point(1222, 8544.99);\n    polygon.ps[3] = Point(1222, 8482.99);\n    new ShapeRef(router, polygon, 18);\n\n    // shapeRef19\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(1647, 8109.79);\n    polygon.ps[1] = Point(1647, 8171.79);\n    polygon.ps[2] = Point(1585, 8171.79);\n    polygon.ps[3] = Point(1585, 8109.79);\n    new ShapeRef(router, polygon, 19);\n\n    // shapeRef20\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(1647, 7163.4);\n    polygon.ps[1] = Point(1647, 7225.4);\n    polygon.ps[2] = Point(1585, 7225.4);\n    polygon.ps[3] = Point(1585, 7163.4);\n    new ShapeRef(router, polygon, 20);\n\n    // shapeRef21\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9289.03, 4997.89);\n    polygon.ps[1] = Point(9289.03, 5037.89);\n    polygon.ps[2] = Point(9234.03, 5037.89);\n    polygon.ps[3] = Point(9234.03, 4997.89);\n    new ShapeRef(router, polygon, 21);\n\n    // shapeRef22\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9389.03, 4997.89);\n    polygon.ps[1] = Point(9389.03, 5037.89);\n    polygon.ps[2] = Point(9334.03, 5037.89);\n    polygon.ps[3] = Point(9334.03, 4997.89);\n    new ShapeRef(router, polygon, 22);\n\n    // shapeRef23\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8389.03, 5097.89);\n    polygon.ps[1] = Point(8389.03, 5137.89);\n    polygon.ps[2] = Point(8334.03, 5137.89);\n    polygon.ps[3] = Point(8334.03, 5097.89);\n    new ShapeRef(router, polygon, 23);\n\n    // shapeRef24\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(4056, 5039.4);\n    polygon.ps[1] = Point(4056, 5101.4);\n    polygon.ps[2] = Point(3994, 5101.4);\n    polygon.ps[3] = Point(3994, 5039.4);\n    new ShapeRef(router, polygon, 24);\n\n    // shapeRef25\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(4452, 5039.4);\n    polygon.ps[1] = Point(4452, 5101.4);\n    polygon.ps[2] = Point(4390, 5101.4);\n    polygon.ps[3] = Point(4390, 5039.4);\n    new ShapeRef(router, polygon, 25);\n\n    // shapeRef26\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8689.03, 5097.89);\n    polygon.ps[1] = Point(8689.03, 5137.89);\n    polygon.ps[2] = Point(8634.03, 5137.89);\n    polygon.ps[3] = Point(8634.03, 5097.89);\n    new ShapeRef(router, polygon, 26);\n\n    // shapeRef27\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8789.03, 5097.89);\n    polygon.ps[1] = Point(8789.03, 5137.89);\n    polygon.ps[2] = Point(8734.03, 5137.89);\n    polygon.ps[3] = Point(8734.03, 5097.89);\n    new ShapeRef(router, polygon, 27);\n\n    // shapeRef28\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(16753.8, 10750.3);\n    polygon.ps[1] = Point(16753.8, 10812.3);\n    polygon.ps[2] = Point(16691.8, 10812.3);\n    polygon.ps[3] = Point(16691.8, 10750.3);\n    new ShapeRef(router, polygon, 28);\n\n    // shapeRef29\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(16493.6, 10750.3);\n    polygon.ps[1] = Point(16493.6, 10812.3);\n    polygon.ps[2] = Point(16431.6, 10812.3);\n    polygon.ps[3] = Point(16431.6, 10750.3);\n    new ShapeRef(router, polygon, 29);\n\n    // shapeRef30\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(1086, 5481.67);\n    polygon.ps[1] = Point(1086, 5543.67);\n    polygon.ps[2] = Point(1024, 5543.67);\n    polygon.ps[3] = Point(1024, 5481.67);\n    new ShapeRef(router, polygon, 30);\n\n    // shapeRef31\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(591, 6582.51);\n    polygon.ps[1] = Point(591, 6644.51);\n    polygon.ps[2] = Point(529, 6644.51);\n    polygon.ps[3] = Point(529, 6582.51);\n    new ShapeRef(router, polygon, 31);\n\n    // shapeRef32\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(591, 7064.4);\n    polygon.ps[1] = Point(591, 7126.4);\n    polygon.ps[2] = Point(529, 7126.4);\n    polygon.ps[3] = Point(529, 7064.4);\n    new ShapeRef(router, polygon, 32);\n\n    // shapeRef33\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(591, 7394.4);\n    polygon.ps[1] = Point(591, 7456.4);\n    polygon.ps[2] = Point(529, 7456.4);\n    polygon.ps[3] = Point(529, 7394.4);\n    new ShapeRef(router, polygon, 33);\n\n    // shapeRef34\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(591, 7713.79);\n    polygon.ps[1] = Point(591, 7775.79);\n    polygon.ps[2] = Point(529, 7775.79);\n    polygon.ps[3] = Point(529, 7713.79);\n    new ShapeRef(router, polygon, 34);\n\n    // shapeRef35\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(591, 6285.51);\n    polygon.ps[1] = Point(591, 6347.51);\n    polygon.ps[2] = Point(529, 6347.51);\n    polygon.ps[3] = Point(529, 6285.51);\n    new ShapeRef(router, polygon, 35);\n\n    // shapeRef36\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(591, 5659.9);\n    polygon.ps[1] = Point(591, 5721.9);\n    polygon.ps[2] = Point(529, 5721.9);\n    polygon.ps[3] = Point(529, 5659.9);\n    new ShapeRef(router, polygon, 36);\n\n    // shapeRef37\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(591, 5966.59);\n    polygon.ps[1] = Point(591, 6028.59);\n    polygon.ps[2] = Point(529, 6028.59);\n    polygon.ps[3] = Point(529, 5966.59);\n    new ShapeRef(router, polygon, 37);\n\n    // shapeRef38\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8789.03, 5197.89);\n    polygon.ps[1] = Point(8789.03, 5237.89);\n    polygon.ps[2] = Point(8734.03, 5237.89);\n    polygon.ps[3] = Point(8734.03, 5197.89);\n    new ShapeRef(router, polygon, 38);\n\n    // shapeRef39\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8889.03, 5197.89);\n    polygon.ps[1] = Point(8889.03, 5237.89);\n    polygon.ps[2] = Point(8834.03, 5237.89);\n    polygon.ps[3] = Point(8834.03, 5197.89);\n    new ShapeRef(router, polygon, 39);\n\n    // shapeRef40\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8989.03, 5197.89);\n    polygon.ps[1] = Point(8989.03, 5237.89);\n    polygon.ps[2] = Point(8934.03, 5237.89);\n    polygon.ps[3] = Point(8934.03, 5197.89);\n    new ShapeRef(router, polygon, 40);\n\n    // shapeRef41\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9089.03, 5197.89);\n    polygon.ps[1] = Point(9089.03, 5237.89);\n    polygon.ps[2] = Point(9034.03, 5237.89);\n    polygon.ps[3] = Point(9034.03, 5197.89);\n    new ShapeRef(router, polygon, 41);\n\n    // shapeRef42\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(855, 7097.4);\n    polygon.ps[1] = Point(855, 7159.4);\n    polygon.ps[2] = Point(793, 7159.4);\n    polygon.ps[3] = Point(793, 7097.4);\n    new ShapeRef(router, polygon, 42);\n\n    // shapeRef43\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(5178, 1150.29);\n    polygon.ps[1] = Point(5178, 1212.29);\n    polygon.ps[2] = Point(5116, 1212.29);\n    polygon.ps[3] = Point(5116, 1150.29);\n    new ShapeRef(router, polygon, 43);\n\n    // shapeRef44\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(4716, 1051.29);\n    polygon.ps[1] = Point(4716, 1113.29);\n    polygon.ps[2] = Point(4654, 1113.29);\n    polygon.ps[3] = Point(4654, 1051.29);\n    new ShapeRef(router, polygon, 44);\n\n    // shapeRef45\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(4419, 1645.29);\n    polygon.ps[1] = Point(4419, 1707.29);\n    polygon.ps[2] = Point(4357, 1707.29);\n    polygon.ps[3] = Point(4357, 1645.29);\n    new ShapeRef(router, polygon, 45);\n\n    // shapeRef46\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(4716, 1645.29);\n    polygon.ps[1] = Point(4716, 1707.29);\n    polygon.ps[2] = Point(4654, 1707.29);\n    polygon.ps[3] = Point(4654, 1645.29);\n    new ShapeRef(router, polygon, 46);\n\n    // shapeRef47\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(4419, 853.285);\n    polygon.ps[1] = Point(4419, 915.285);\n    polygon.ps[2] = Point(4357, 915.285);\n    polygon.ps[3] = Point(4357, 853.285);\n    new ShapeRef(router, polygon, 47);\n\n    // shapeRef48\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(4419, 1183.29);\n    polygon.ps[1] = Point(4419, 1245.29);\n    polygon.ps[2] = Point(4357, 1245.29);\n    polygon.ps[3] = Point(4357, 1183.29);\n    new ShapeRef(router, polygon, 48);\n\n    // shapeRef49\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(4716, 1183.29);\n    polygon.ps[1] = Point(4716, 1245.29);\n    polygon.ps[2] = Point(4654, 1245.29);\n    polygon.ps[3] = Point(4654, 1183.29);\n    new ShapeRef(router, polygon, 49);\n\n    // shapeRef50\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(4716, 1381.29);\n    polygon.ps[1] = Point(4716, 1443.29);\n    polygon.ps[2] = Point(4654, 1443.29);\n    polygon.ps[3] = Point(4654, 1381.29);\n    new ShapeRef(router, polygon, 50);\n\n    // shapeRef51\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(4419, 1381.29);\n    polygon.ps[1] = Point(4419, 1443.29);\n    polygon.ps[2] = Point(4357, 1443.29);\n    polygon.ps[3] = Point(4357, 1381.29);\n    new ShapeRef(router, polygon, 51);\n\n    // shapeRef52\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(6385.1, 744.091);\n    polygon.ps[1] = Point(6385.1, 806.091);\n    polygon.ps[2] = Point(6323.1, 806.091);\n    polygon.ps[3] = Point(6323.1, 744.091);\n    new ShapeRef(router, polygon, 52);\n\n    // shapeRef53\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(6715.1, 744.091);\n    polygon.ps[1] = Point(6715.1, 806.091);\n    polygon.ps[2] = Point(6653.1, 806.091);\n    polygon.ps[3] = Point(6653.1, 744.091);\n    new ShapeRef(router, polygon, 53);\n\n    // shapeRef54\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(6715.1, 1117.29);\n    polygon.ps[1] = Point(6715.1, 1179.29);\n    polygon.ps[2] = Point(6653.1, 1179.29);\n    polygon.ps[3] = Point(6653.1, 1117.29);\n    new ShapeRef(router, polygon, 54);\n\n    // shapeRef55\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(6715.1, 1414.29);\n    polygon.ps[1] = Point(6715.1, 1476.29);\n    polygon.ps[2] = Point(6653.1, 1476.29);\n    polygon.ps[3] = Point(6653.1, 1414.29);\n    new ShapeRef(router, polygon, 55);\n\n    // shapeRef56\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(6418.1, 1414.29);\n    polygon.ps[1] = Point(6418.1, 1476.29);\n    polygon.ps[2] = Point(6356.1, 1476.29);\n    polygon.ps[3] = Point(6356.1, 1414.29);\n    new ShapeRef(router, polygon, 56);\n\n    // shapeRef57\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(5046, 1480.29);\n    polygon.ps[1] = Point(5046, 1542.29);\n    polygon.ps[2] = Point(4984, 1542.29);\n    polygon.ps[3] = Point(4984, 1480.29);\n    new ShapeRef(router, polygon, 57);\n\n    // shapeRef58\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(6715.1, 1645.29);\n    polygon.ps[1] = Point(6715.1, 1707.29);\n    polygon.ps[2] = Point(6653.1, 1707.29);\n    polygon.ps[3] = Point(6653.1, 1645.29);\n    new ShapeRef(router, polygon, 58);\n\n    // shapeRef59\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(5310, 1645.29);\n    polygon.ps[1] = Point(5310, 1707.29);\n    polygon.ps[2] = Point(5248, 1707.29);\n    polygon.ps[3] = Point(5248, 1645.29);\n    new ShapeRef(router, polygon, 59);\n\n    // shapeRef60\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(5758.1, 1645.29);\n    polygon.ps[1] = Point(5758.1, 1707.29);\n    polygon.ps[2] = Point(5696.1, 1707.29);\n    polygon.ps[3] = Point(5696.1, 1645.29);\n    new ShapeRef(router, polygon, 60);\n\n    // shapeRef61\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(6121.1, 1645.29);\n    polygon.ps[1] = Point(6121.1, 1707.29);\n    polygon.ps[2] = Point(6059.1, 1707.29);\n    polygon.ps[3] = Point(6059.1, 1645.29);\n    new ShapeRef(router, polygon, 61);\n\n    // shapeRef62\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(6418.1, 1645.29);\n    polygon.ps[1] = Point(6418.1, 1707.29);\n    polygon.ps[2] = Point(6356.1, 1707.29);\n    polygon.ps[3] = Point(6356.1, 1645.29);\n    new ShapeRef(router, polygon, 62);\n\n    // shapeRef63\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(5046, 1813.29);\n    polygon.ps[1] = Point(5046, 1875.29);\n    polygon.ps[2] = Point(4984, 1875.29);\n    polygon.ps[3] = Point(4984, 1813.29);\n    new ShapeRef(router, polygon, 63);\n\n    // shapeRef64\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(6715.1, 1813.29);\n    polygon.ps[1] = Point(6715.1, 1875.29);\n    polygon.ps[2] = Point(6653.1, 1875.29);\n    polygon.ps[3] = Point(6653.1, 1813.29);\n    new ShapeRef(router, polygon, 64);\n\n    // shapeRef65\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(6418.1, 1813.29);\n    polygon.ps[1] = Point(6418.1, 1875.29);\n    polygon.ps[2] = Point(6356.1, 1875.29);\n    polygon.ps[3] = Point(6356.1, 1813.29);\n    new ShapeRef(router, polygon, 65);\n\n    // shapeRef66\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(6121.1, 1813.29);\n    polygon.ps[1] = Point(6121.1, 1875.29);\n    polygon.ps[2] = Point(6059.1, 1875.29);\n    polygon.ps[3] = Point(6059.1, 1813.29);\n    new ShapeRef(router, polygon, 66);\n\n    // shapeRef67\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(5758.1, 1813.29);\n    polygon.ps[1] = Point(5758.1, 1875.29);\n    polygon.ps[2] = Point(5696.1, 1875.29);\n    polygon.ps[3] = Point(5696.1, 1813.29);\n    new ShapeRef(router, polygon, 67);\n\n    // shapeRef68\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(5310, 1813.29);\n    polygon.ps[1] = Point(5310, 1875.29);\n    polygon.ps[2] = Point(5248, 1875.29);\n    polygon.ps[3] = Point(5248, 1813.29);\n    new ShapeRef(router, polygon, 68);\n\n    // shapeRef69\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(4650, 1813.29);\n    polygon.ps[1] = Point(4650, 1875.29);\n    polygon.ps[2] = Point(4588, 1875.29);\n    polygon.ps[3] = Point(4588, 1813.29);\n    new ShapeRef(router, polygon, 69);\n\n    // shapeRef70\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(5923.1, 1150.29);\n    polygon.ps[1] = Point(5923.1, 1212.29);\n    polygon.ps[2] = Point(5861.1, 1212.29);\n    polygon.ps[3] = Point(5861.1, 1150.29);\n    new ShapeRef(router, polygon, 70);\n\n    // shapeRef71\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(5626.1, 1150.29);\n    polygon.ps[1] = Point(5626.1, 1212.29);\n    polygon.ps[2] = Point(5564.1, 1212.29);\n    polygon.ps[3] = Point(5564.1, 1150.29);\n    new ShapeRef(router, polygon, 71);\n\n    // shapeRef72\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(5923.1, 919.285);\n    polygon.ps[1] = Point(5923.1, 981.285);\n    polygon.ps[2] = Point(5861.1, 981.285);\n    polygon.ps[3] = Point(5861.1, 919.285);\n    new ShapeRef(router, polygon, 72);\n\n    // shapeRef73\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(5626.1, 919.285);\n    polygon.ps[1] = Point(5626.1, 981.285);\n    polygon.ps[2] = Point(5564.1, 981.285);\n    polygon.ps[3] = Point(5564.1, 919.285);\n    new ShapeRef(router, polygon, 73);\n\n    // shapeRef74\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(5626.1, 678.091);\n    polygon.ps[1] = Point(5626.1, 740.091);\n    polygon.ps[2] = Point(5564.1, 740.091);\n    polygon.ps[3] = Point(5564.1, 678.091);\n    new ShapeRef(router, polygon, 74);\n\n    // shapeRef75\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(4914, 678.091);\n    polygon.ps[1] = Point(4914, 740.091);\n    polygon.ps[2] = Point(4852, 740.091);\n    polygon.ps[3] = Point(4852, 678.091);\n    new ShapeRef(router, polygon, 75);\n\n    // shapeRef76\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(5923.1, 678.091);\n    polygon.ps[1] = Point(5923.1, 740.091);\n    polygon.ps[2] = Point(5861.1, 740.091);\n    polygon.ps[3] = Point(5861.1, 678.091);\n    new ShapeRef(router, polygon, 76);\n\n    // shapeRef77\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(5178, 678.091);\n    polygon.ps[1] = Point(5178, 740.091);\n    polygon.ps[2] = Point(5116, 740.091);\n    polygon.ps[3] = Point(5116, 678.091);\n    new ShapeRef(router, polygon, 77);\n\n    // shapeRef78\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(5079, 513.091);\n    polygon.ps[1] = Point(5079, 575.091);\n    polygon.ps[2] = Point(5017, 575.091);\n    polygon.ps[3] = Point(5017, 513.091);\n    new ShapeRef(router, polygon, 78);\n\n    // shapeRef79\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(4617, 513.091);\n    polygon.ps[1] = Point(4617, 575.091);\n    polygon.ps[2] = Point(4555, 575.091);\n    polygon.ps[3] = Point(4555, 513.091);\n    new ShapeRef(router, polygon, 79);\n\n    // shapeRef80\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(4254, 513.091);\n    polygon.ps[1] = Point(4254, 575.091);\n    polygon.ps[2] = Point(4192, 575.091);\n    polygon.ps[3] = Point(4192, 513.091);\n    new ShapeRef(router, polygon, 80);\n\n    // shapeRef81\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(3792, 513.091);\n    polygon.ps[1] = Point(3792, 575.091);\n    polygon.ps[2] = Point(3730, 575.091);\n    polygon.ps[3] = Point(3730, 513.091);\n    new ShapeRef(router, polygon, 81);\n\n    // shapeRef82\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(4749, 328.265);\n    polygon.ps[1] = Point(4749, 390.265);\n    polygon.ps[2] = Point(4687, 390.265);\n    polygon.ps[3] = Point(4687, 328.265);\n    new ShapeRef(router, polygon, 82);\n\n    // shapeRef83\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(3561, 249.265);\n    polygon.ps[1] = Point(3561, 311.265);\n    polygon.ps[2] = Point(3499, 311.265);\n    polygon.ps[3] = Point(3499, 249.265);\n    new ShapeRef(router, polygon, 83);\n\n    // shapeRef84\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(3627, 361.265);\n    polygon.ps[1] = Point(3627, 423.265);\n    polygon.ps[2] = Point(3565, 423.265);\n    polygon.ps[3] = Point(3565, 361.265);\n    new ShapeRef(router, polygon, 84);\n\n    // shapeRef85\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(3198, 361.265);\n    polygon.ps[1] = Point(3198, 423.265);\n    polygon.ps[2] = Point(3136, 423.265);\n    polygon.ps[3] = Point(3136, 361.265);\n    new ShapeRef(router, polygon, 85);\n\n    // shapeRef86\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(2670, 328.265);\n    polygon.ps[1] = Point(2670, 390.265);\n    polygon.ps[2] = Point(2608, 390.265);\n    polygon.ps[3] = Point(2608, 328.265);\n    new ShapeRef(router, polygon, 86);\n\n    // shapeRef87\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(2274, 513.091);\n    polygon.ps[1] = Point(2274, 575.091);\n    polygon.ps[2] = Point(2212, 575.091);\n    polygon.ps[3] = Point(2212, 513.091);\n    new ShapeRef(router, polygon, 87);\n\n    // shapeRef88\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(2670, 513.091);\n    polygon.ps[1] = Point(2670, 575.091);\n    polygon.ps[2] = Point(2608, 575.091);\n    polygon.ps[3] = Point(2608, 513.091);\n    new ShapeRef(router, polygon, 88);\n\n    // shapeRef89\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(2241, 678.091);\n    polygon.ps[1] = Point(2241, 740.091);\n    polygon.ps[2] = Point(2179, 740.091);\n    polygon.ps[3] = Point(2179, 678.091);\n    new ShapeRef(router, polygon, 89);\n\n    // shapeRef90\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(3198, 678.091);\n    polygon.ps[1] = Point(3198, 740.091);\n    polygon.ps[2] = Point(3136, 740.091);\n    polygon.ps[3] = Point(3136, 678.091);\n    new ShapeRef(router, polygon, 90);\n\n    // shapeRef91\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(3198, 513.091);\n    polygon.ps[1] = Point(3198, 575.091);\n    polygon.ps[2] = Point(3136, 575.091);\n    polygon.ps[3] = Point(3136, 513.091);\n    new ShapeRef(router, polygon, 91);\n\n    // shapeRef92\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(1779, 678.091);\n    polygon.ps[1] = Point(1779, 740.091);\n    polygon.ps[2] = Point(1717, 740.091);\n    polygon.ps[3] = Point(1717, 678.091);\n    new ShapeRef(router, polygon, 92);\n\n    // shapeRef93\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(2340, 1282.29);\n    polygon.ps[1] = Point(2340, 1344.29);\n    polygon.ps[2] = Point(2278, 1344.29);\n    polygon.ps[3] = Point(2278, 1282.29);\n    new ShapeRef(router, polygon, 93);\n\n    // shapeRef94\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(1152, 1282.29);\n    polygon.ps[1] = Point(1152, 1344.29);\n    polygon.ps[2] = Point(1090, 1344.29);\n    polygon.ps[3] = Point(1090, 1282.29);\n    new ShapeRef(router, polygon, 94);\n\n    // shapeRef95\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(1515, 1282.29);\n    polygon.ps[1] = Point(1515, 1344.29);\n    polygon.ps[2] = Point(1453, 1344.29);\n    polygon.ps[3] = Point(1453, 1282.29);\n    new ShapeRef(router, polygon, 95);\n\n    // shapeRef96\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(789, 1018.29);\n    polygon.ps[1] = Point(789, 1080.29);\n    polygon.ps[2] = Point(727, 1080.29);\n    polygon.ps[3] = Point(727, 1018.29);\n    new ShapeRef(router, polygon, 96);\n\n    // shapeRef97\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(1152, 1018.29);\n    polygon.ps[1] = Point(1152, 1080.29);\n    polygon.ps[2] = Point(1090, 1080.29);\n    polygon.ps[3] = Point(1090, 1018.29);\n    new ShapeRef(router, polygon, 97);\n\n    // shapeRef98\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(1878, 1018.29);\n    polygon.ps[1] = Point(1878, 1080.29);\n    polygon.ps[2] = Point(1816, 1080.29);\n    polygon.ps[3] = Point(1816, 1018.29);\n    new ShapeRef(router, polygon, 98);\n\n    // shapeRef99\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(2340, 1018.29);\n    polygon.ps[1] = Point(2340, 1080.29);\n    polygon.ps[2] = Point(2278, 1080.29);\n    polygon.ps[3] = Point(2278, 1018.29);\n    new ShapeRef(router, polygon, 99);\n\n    // shapeRef100\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(2703, 1018.29);\n    polygon.ps[1] = Point(2703, 1080.29);\n    polygon.ps[2] = Point(2641, 1080.29);\n    polygon.ps[3] = Point(2641, 1018.29);\n    new ShapeRef(router, polygon, 100);\n\n    // shapeRef101\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(3660, 1018.29);\n    polygon.ps[1] = Point(3660, 1080.29);\n    polygon.ps[2] = Point(3598, 1080.29);\n    polygon.ps[3] = Point(3598, 1018.29);\n    new ShapeRef(router, polygon, 101);\n\n    // shapeRef102\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(1515, 1018.29);\n    polygon.ps[1] = Point(1515, 1080.29);\n    polygon.ps[2] = Point(1453, 1080.29);\n    polygon.ps[3] = Point(1453, 1018.29);\n    new ShapeRef(router, polygon, 102);\n\n    // shapeRef103\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(492, 1018.29);\n    polygon.ps[1] = Point(492, 1080.29);\n    polygon.ps[2] = Point(430, 1080.29);\n    polygon.ps[3] = Point(430, 1018.29);\n    new ShapeRef(router, polygon, 103);\n\n    // shapeRef104\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(4023, 1018.29);\n    polygon.ps[1] = Point(4023, 1080.29);\n    polygon.ps[2] = Point(3961, 1080.29);\n    polygon.ps[3] = Point(3961, 1018.29);\n    new ShapeRef(router, polygon, 104);\n\n    // shapeRef105\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(195, 1747.29);\n    polygon.ps[1] = Point(195, 1809.29);\n    polygon.ps[2] = Point(133, 1809.29);\n    polygon.ps[3] = Point(133, 1747.29);\n    new ShapeRef(router, polygon, 105);\n\n    // shapeRef106\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(195, 1480.29);\n    polygon.ps[1] = Point(195, 1542.29);\n    polygon.ps[2] = Point(133, 1542.29);\n    polygon.ps[3] = Point(133, 1480.29);\n    new ShapeRef(router, polygon, 106);\n\n    // shapeRef107\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(426, 1480.29);\n    polygon.ps[1] = Point(426, 1542.29);\n    polygon.ps[2] = Point(364, 1542.29);\n    polygon.ps[3] = Point(364, 1480.29);\n    new ShapeRef(router, polygon, 107);\n\n    // shapeRef108\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(690, 1480.29);\n    polygon.ps[1] = Point(690, 1542.29);\n    polygon.ps[2] = Point(628, 1542.29);\n    polygon.ps[3] = Point(628, 1480.29);\n    new ShapeRef(router, polygon, 108);\n\n    // shapeRef109\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(1086, 1480.29);\n    polygon.ps[1] = Point(1086, 1542.29);\n    polygon.ps[2] = Point(1024, 1542.29);\n    polygon.ps[3] = Point(1024, 1480.29);\n    new ShapeRef(router, polygon, 109);\n\n    // shapeRef110\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(1449, 1480.29);\n    polygon.ps[1] = Point(1449, 1542.29);\n    polygon.ps[2] = Point(1387, 1542.29);\n    polygon.ps[3] = Point(1387, 1480.29);\n    new ShapeRef(router, polygon, 110);\n\n    // shapeRef111\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(1845, 1480.29);\n    polygon.ps[1] = Point(1845, 1542.29);\n    polygon.ps[2] = Point(1783, 1542.29);\n    polygon.ps[3] = Point(1783, 1480.29);\n    new ShapeRef(router, polygon, 111);\n\n    // shapeRef112\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(2637, 1480.29);\n    polygon.ps[1] = Point(2637, 1542.29);\n    polygon.ps[2] = Point(2575, 1542.29);\n    polygon.ps[3] = Point(2575, 1480.29);\n    new ShapeRef(router, polygon, 112);\n\n    // shapeRef113\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(3132, 1480.29);\n    polygon.ps[1] = Point(3132, 1542.29);\n    polygon.ps[2] = Point(3070, 1542.29);\n    polygon.ps[3] = Point(3070, 1480.29);\n    new ShapeRef(router, polygon, 113);\n\n    // shapeRef114\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(3660, 1480.29);\n    polygon.ps[1] = Point(3660, 1542.29);\n    polygon.ps[2] = Point(3598, 1542.29);\n    polygon.ps[3] = Point(3598, 1480.29);\n    new ShapeRef(router, polygon, 114);\n\n    // shapeRef115\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(4023, 1480.29);\n    polygon.ps[1] = Point(4023, 1542.29);\n    polygon.ps[2] = Point(3961, 1542.29);\n    polygon.ps[3] = Point(3961, 1480.29);\n    new ShapeRef(router, polygon, 115);\n\n    // shapeRef116\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(2274, 1480.29);\n    polygon.ps[1] = Point(2274, 1542.29);\n    polygon.ps[2] = Point(2212, 1542.29);\n    polygon.ps[3] = Point(2212, 1480.29);\n    new ShapeRef(router, polygon, 116);\n\n    // shapeRef117\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(1449, 1645.29);\n    polygon.ps[1] = Point(1449, 1707.29);\n    polygon.ps[2] = Point(1387, 1707.29);\n    polygon.ps[3] = Point(1387, 1645.29);\n    new ShapeRef(router, polygon, 117);\n\n    // shapeRef118\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(1845, 1645.29);\n    polygon.ps[1] = Point(1845, 1707.29);\n    polygon.ps[2] = Point(1783, 1707.29);\n    polygon.ps[3] = Point(1783, 1645.29);\n    new ShapeRef(router, polygon, 118);\n\n    // shapeRef119\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(2274, 1645.29);\n    polygon.ps[1] = Point(2274, 1707.29);\n    polygon.ps[2] = Point(2212, 1707.29);\n    polygon.ps[3] = Point(2212, 1645.29);\n    new ShapeRef(router, polygon, 119);\n\n    // shapeRef120\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(1086, 1813.29);\n    polygon.ps[1] = Point(1086, 1875.29);\n    polygon.ps[2] = Point(1024, 1875.29);\n    polygon.ps[3] = Point(1024, 1813.29);\n    new ShapeRef(router, polygon, 120);\n\n    // shapeRef121\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(1449, 1813.29);\n    polygon.ps[1] = Point(1449, 1875.29);\n    polygon.ps[2] = Point(1387, 1875.29);\n    polygon.ps[3] = Point(1387, 1813.29);\n    new ShapeRef(router, polygon, 121);\n\n    // shapeRef122\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(1845, 1813.29);\n    polygon.ps[1] = Point(1845, 1875.29);\n    polygon.ps[2] = Point(1783, 1875.29);\n    polygon.ps[3] = Point(1783, 1813.29);\n    new ShapeRef(router, polygon, 122);\n\n    // shapeRef123\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(2274, 1813.29);\n    polygon.ps[1] = Point(2274, 1875.29);\n    polygon.ps[2] = Point(2212, 1875.29);\n    polygon.ps[3] = Point(2212, 1813.29);\n    new ShapeRef(router, polygon, 123);\n\n    // shapeRef124\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(2637, 1813.29);\n    polygon.ps[1] = Point(2637, 1875.29);\n    polygon.ps[2] = Point(2575, 1875.29);\n    polygon.ps[3] = Point(2575, 1813.29);\n    new ShapeRef(router, polygon, 124);\n\n    // shapeRef125\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(3132, 1813.29);\n    polygon.ps[1] = Point(3132, 1875.29);\n    polygon.ps[2] = Point(3070, 1875.29);\n    polygon.ps[3] = Point(3070, 1813.29);\n    new ShapeRef(router, polygon, 125);\n\n    // shapeRef126\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(3660, 1813.29);\n    polygon.ps[1] = Point(3660, 1875.29);\n    polygon.ps[2] = Point(3598, 1875.29);\n    polygon.ps[3] = Point(3598, 1813.29);\n    new ShapeRef(router, polygon, 126);\n\n    // shapeRef127\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(4023, 1813.29);\n    polygon.ps[1] = Point(4023, 1875.29);\n    polygon.ps[2] = Point(3961, 1875.29);\n    polygon.ps[3] = Point(3961, 1813.29);\n    new ShapeRef(router, polygon, 127);\n\n    // shapeRef128\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(4353, 1813.29);\n    polygon.ps[1] = Point(4353, 1875.29);\n    polygon.ps[2] = Point(4291, 1875.29);\n    polygon.ps[3] = Point(4291, 1813.29);\n    new ShapeRef(router, polygon, 128);\n\n    // shapeRef129\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(360, 1813.29);\n    polygon.ps[1] = Point(360, 1875.29);\n    polygon.ps[2] = Point(298, 1875.29);\n    polygon.ps[3] = Point(298, 1813.29);\n    new ShapeRef(router, polygon, 129);\n\n    // shapeRef130\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(360, 2317.29);\n    polygon.ps[1] = Point(360, 2379.29);\n    polygon.ps[2] = Point(298, 2379.29);\n    polygon.ps[3] = Point(298, 2317.29);\n    new ShapeRef(router, polygon, 130);\n\n    // shapeRef131\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(624, 2317.29);\n    polygon.ps[1] = Point(624, 2379.29);\n    polygon.ps[2] = Point(562, 2379.29);\n    polygon.ps[3] = Point(562, 2317.29);\n    new ShapeRef(router, polygon, 131);\n\n    // shapeRef132\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(1086, 2317.29);\n    polygon.ps[1] = Point(1086, 2379.29);\n    polygon.ps[2] = Point(1024, 2379.29);\n    polygon.ps[3] = Point(1024, 2317.29);\n    new ShapeRef(router, polygon, 132);\n\n    // shapeRef133\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(1845, 2317.29);\n    polygon.ps[1] = Point(1845, 2379.29);\n    polygon.ps[2] = Point(1783, 2379.29);\n    polygon.ps[3] = Point(1783, 2317.29);\n    new ShapeRef(router, polygon, 133);\n\n    // shapeRef134\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(162, 2581.29);\n    polygon.ps[1] = Point(162, 2643.29);\n    polygon.ps[2] = Point(100, 2643.29);\n    polygon.ps[3] = Point(100, 2581.29);\n    new ShapeRef(router, polygon, 134);\n\n    // shapeRef135\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(162, 2383.29);\n    polygon.ps[1] = Point(162, 2445.29);\n    polygon.ps[2] = Point(100, 2445.29);\n    polygon.ps[3] = Point(100, 2383.29);\n    new ShapeRef(router, polygon, 135);\n\n    // shapeRef136\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(162, 2119.29);\n    polygon.ps[1] = Point(162, 2181.29);\n    polygon.ps[2] = Point(100, 2181.29);\n    polygon.ps[3] = Point(100, 2119.29);\n    new ShapeRef(router, polygon, 136);\n\n    // shapeRef137\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(624, 2119.29);\n    polygon.ps[1] = Point(624, 2181.29);\n    polygon.ps[2] = Point(562, 2181.29);\n    polygon.ps[3] = Point(562, 2119.29);\n    new ShapeRef(router, polygon, 137);\n\n    // shapeRef138\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(1845, 2119.29);\n    polygon.ps[1] = Point(1845, 2181.29);\n    polygon.ps[2] = Point(1783, 2181.29);\n    polygon.ps[3] = Point(1783, 2119.29);\n    new ShapeRef(router, polygon, 138);\n\n    // shapeRef139\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(1086, 2119.29);\n    polygon.ps[1] = Point(1086, 2181.29);\n    polygon.ps[2] = Point(1024, 2181.29);\n    polygon.ps[3] = Point(1024, 2119.29);\n    new ShapeRef(router, polygon, 139);\n\n    // shapeRef140\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(2274, 2119.29);\n    polygon.ps[1] = Point(2274, 2181.29);\n    polygon.ps[2] = Point(2212, 2181.29);\n    polygon.ps[3] = Point(2212, 2119.29);\n    new ShapeRef(router, polygon, 140);\n\n    // shapeRef141\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(2637, 2119.29);\n    polygon.ps[1] = Point(2637, 2181.29);\n    polygon.ps[2] = Point(2575, 2181.29);\n    polygon.ps[3] = Point(2575, 2119.29);\n    new ShapeRef(router, polygon, 141);\n\n    // shapeRef142\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(3132, 2119.29);\n    polygon.ps[1] = Point(3132, 2181.29);\n    polygon.ps[2] = Point(3070, 2181.29);\n    polygon.ps[3] = Point(3070, 2119.29);\n    new ShapeRef(router, polygon, 142);\n\n    // shapeRef143\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(4023, 2119.29);\n    polygon.ps[1] = Point(4023, 2181.29);\n    polygon.ps[2] = Point(3961, 2181.29);\n    polygon.ps[3] = Point(3961, 2119.29);\n    new ShapeRef(router, polygon, 143);\n\n    // shapeRef144\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(3660, 2119.29);\n    polygon.ps[1] = Point(3660, 2181.29);\n    polygon.ps[2] = Point(3598, 2181.29);\n    polygon.ps[3] = Point(3598, 2119.29);\n    new ShapeRef(router, polygon, 144);\n\n    // shapeRef145\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(5923.1, 1348.29);\n    polygon.ps[1] = Point(5923.1, 1410.29);\n    polygon.ps[2] = Point(5861.1, 1410.29);\n    polygon.ps[3] = Point(5861.1, 1348.29);\n    new ShapeRef(router, polygon, 145);\n\n    // shapeRef146\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(6616.1, 1150.29);\n    polygon.ps[1] = Point(6616.1, 1212.29);\n    polygon.ps[2] = Point(6554.1, 1212.29);\n    polygon.ps[3] = Point(6554.1, 1150.29);\n    new ShapeRef(router, polygon, 146);\n\n    // shapeRef147\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(6220.1, 1150.29);\n    polygon.ps[1] = Point(6220.1, 1212.29);\n    polygon.ps[2] = Point(6158.1, 1212.29);\n    polygon.ps[3] = Point(6158.1, 1150.29);\n    new ShapeRef(router, polygon, 147);\n\n    // shapeRef148\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(5593.1, 513.091);\n    polygon.ps[1] = Point(5593.1, 575.091);\n    polygon.ps[2] = Point(5531.1, 575.091);\n    polygon.ps[3] = Point(5531.1, 513.091);\n    new ShapeRef(router, polygon, 148);\n\n    // shapeRef149\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(4254, 328.265);\n    polygon.ps[1] = Point(4254, 390.265);\n    polygon.ps[2] = Point(4192, 390.265);\n    polygon.ps[3] = Point(4192, 328.265);\n    new ShapeRef(router, polygon, 149);\n\n    // shapeRef150\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(525, 678.091);\n    polygon.ps[1] = Point(525, 740.091);\n    polygon.ps[2] = Point(463, 740.091);\n    polygon.ps[3] = Point(463, 678.091);\n    new ShapeRef(router, polygon, 150);\n\n    // shapeRef151\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(3198, 1018.29);\n    polygon.ps[1] = Point(3198, 1080.29);\n    polygon.ps[2] = Point(3136, 1080.29);\n    polygon.ps[3] = Point(3136, 1018.29);\n    new ShapeRef(router, polygon, 151);\n\n    // shapeRef152\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8986.36, 6197.89);\n    polygon.ps[1] = Point(8986.36, 6237.89);\n    polygon.ps[2] = Point(8931.36, 6237.89);\n    polygon.ps[3] = Point(8931.36, 6197.89);\n    new ShapeRef(router, polygon, 152);\n\n    // shapeRef153\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9063.36, 6197.89);\n    polygon.ps[1] = Point(9063.36, 6237.89);\n    polygon.ps[2] = Point(9008.36, 6237.89);\n    polygon.ps[3] = Point(9008.36, 6197.89);\n    new ShapeRef(router, polygon, 153);\n\n    // shapeRef154\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9389.03, 6197.89);\n    polygon.ps[1] = Point(9389.03, 6237.89);\n    polygon.ps[2] = Point(9334.03, 6237.89);\n    polygon.ps[3] = Point(9334.03, 6197.89);\n    new ShapeRef(router, polygon, 154);\n\n    // shapeRef155\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8389.03, 6297.89);\n    polygon.ps[1] = Point(8389.03, 6337.89);\n    polygon.ps[2] = Point(8334.03, 6337.89);\n    polygon.ps[3] = Point(8334.03, 6297.89);\n    new ShapeRef(router, polygon, 155);\n\n    // shapeRef156\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8589.03, 6297.89);\n    polygon.ps[1] = Point(8589.03, 6337.89);\n    polygon.ps[2] = Point(8534.03, 6337.89);\n    polygon.ps[3] = Point(8534.03, 6297.89);\n    new ShapeRef(router, polygon, 156);\n\n    // shapeRef157\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8689.03, 6297.89);\n    polygon.ps[1] = Point(8689.03, 6337.89);\n    polygon.ps[2] = Point(8634.03, 6337.89);\n    polygon.ps[3] = Point(8634.03, 6297.89);\n    new ShapeRef(router, polygon, 157);\n\n    // shapeRef158\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8789.03, 6297.89);\n    polygon.ps[1] = Point(8789.03, 6337.89);\n    polygon.ps[2] = Point(8734.03, 6337.89);\n    polygon.ps[3] = Point(8734.03, 6297.89);\n    new ShapeRef(router, polygon, 158);\n\n    // shapeRef159\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8889.03, 6297.89);\n    polygon.ps[1] = Point(8889.03, 6337.89);\n    polygon.ps[2] = Point(8834.03, 6337.89);\n    polygon.ps[3] = Point(8834.03, 6297.89);\n    new ShapeRef(router, polygon, 159);\n\n    // shapeRef160\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8989.03, 6297.89);\n    polygon.ps[1] = Point(8989.03, 6337.89);\n    polygon.ps[2] = Point(8934.03, 6337.89);\n    polygon.ps[3] = Point(8934.03, 6297.89);\n    new ShapeRef(router, polygon, 160);\n\n    // shapeRef161\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9089.03, 6297.89);\n    polygon.ps[1] = Point(9089.03, 6337.89);\n    polygon.ps[2] = Point(9034.03, 6337.89);\n    polygon.ps[3] = Point(9034.03, 6297.89);\n    new ShapeRef(router, polygon, 161);\n\n    // shapeRef162\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(4881, 11796.9);\n    polygon.ps[1] = Point(4881, 11858.9);\n    polygon.ps[2] = Point(4819, 11858.9);\n    polygon.ps[3] = Point(4819, 11796.9);\n    new ShapeRef(router, polygon, 162);\n\n    // shapeRef163\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(2538, 10275);\n    polygon.ps[1] = Point(2538, 10337);\n    polygon.ps[2] = Point(2476, 10337);\n    polygon.ps[3] = Point(2476, 10275);\n    new ShapeRef(router, polygon, 163);\n\n    // shapeRef164\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(3231, 10275);\n    polygon.ps[1] = Point(3231, 10337);\n    polygon.ps[2] = Point(3169, 10337);\n    polygon.ps[3] = Point(3169, 10275);\n    new ShapeRef(router, polygon, 164);\n\n    // shapeRef165\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(3231, 10982.6);\n    polygon.ps[1] = Point(3231, 11044.6);\n    polygon.ps[2] = Point(3169, 11044.6);\n    polygon.ps[3] = Point(3169, 10982.6);\n    new ShapeRef(router, polygon, 165);\n\n    // shapeRef166\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(11137.2, 2011.29);\n    polygon.ps[1] = Point(11137.2, 2073.29);\n    polygon.ps[2] = Point(11075.2, 2073.29);\n    polygon.ps[3] = Point(11075.2, 2011.29);\n    new ShapeRef(router, polygon, 166);\n\n    // shapeRef167\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(11460.1, 2011.29);\n    polygon.ps[1] = Point(11460.1, 2073.29);\n    polygon.ps[2] = Point(11398.1, 2073.29);\n    polygon.ps[3] = Point(11398.1, 2011.29);\n    new ShapeRef(router, polygon, 167);\n\n    // shapeRef168\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8689.03, 6397.89);\n    polygon.ps[1] = Point(8689.03, 6437.89);\n    polygon.ps[2] = Point(8634.03, 6437.89);\n    polygon.ps[3] = Point(8634.03, 6397.89);\n    new ShapeRef(router, polygon, 168);\n\n    // shapeRef169\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(10939.2, 2011.29);\n    polygon.ps[1] = Point(10939.2, 2073.29);\n    polygon.ps[2] = Point(10877.2, 2073.29);\n    polygon.ps[3] = Point(10877.2, 2011.29);\n    new ShapeRef(router, polygon, 169);\n\n    // shapeRef170\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(11460.1, 1711.29);\n    polygon.ps[1] = Point(11460.1, 1773.29);\n    polygon.ps[2] = Point(11398.1, 1773.29);\n    polygon.ps[3] = Point(11398.1, 1711.29);\n    new ShapeRef(router, polygon, 170);\n\n    // shapeRef171\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(11856.1, 1711.29);\n    polygon.ps[1] = Point(11856.1, 1773.29);\n    polygon.ps[2] = Point(11794.1, 1773.29);\n    polygon.ps[3] = Point(11794.1, 1711.29);\n    new ShapeRef(router, polygon, 171);\n\n    // shapeRef172\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(13705, 4808.4);\n    polygon.ps[1] = Point(13705, 4870.4);\n    polygon.ps[2] = Point(13643, 4870.4);\n    polygon.ps[3] = Point(13643, 4808.4);\n    new ShapeRef(router, polygon, 172);\n\n    // shapeRef173\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(12986.5, 4808.4);\n    polygon.ps[1] = Point(12986.5, 4870.4);\n    polygon.ps[2] = Point(12924.5, 4870.4);\n    polygon.ps[3] = Point(12924.5, 4808.4);\n    new ShapeRef(router, polygon, 173);\n\n    // shapeRef174\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(12986.5, 4330.11);\n    polygon.ps[1] = Point(12986.5, 4392.11);\n    polygon.ps[2] = Point(12924.5, 4392.11);\n    polygon.ps[3] = Point(12924.5, 4330.11);\n    new ShapeRef(router, polygon, 174);\n\n    // shapeRef175\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(12986.5, 3996.51);\n    polygon.ps[1] = Point(12986.5, 4058.51);\n    polygon.ps[2] = Point(12924.5, 4058.51);\n    polygon.ps[3] = Point(12924.5, 3996.51);\n    new ShapeRef(router, polygon, 175);\n\n    // shapeRef176\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(12986.5, 3732.51);\n    polygon.ps[1] = Point(12986.5, 3794.51);\n    polygon.ps[2] = Point(12924.5, 3794.51);\n    polygon.ps[3] = Point(12924.5, 3732.51);\n    new ShapeRef(router, polygon, 176);\n\n    // shapeRef177\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8422.29, 6497.89);\n    polygon.ps[1] = Point(8422.29, 6537.89);\n    polygon.ps[2] = Point(8367.29, 6537.89);\n    polygon.ps[3] = Point(8367.29, 6497.89);\n    new ShapeRef(router, polygon, 177);\n\n    // shapeRef178\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8499.29, 6497.89);\n    polygon.ps[1] = Point(8499.29, 6537.89);\n    polygon.ps[2] = Point(8444.29, 6537.89);\n    polygon.ps[3] = Point(8444.29, 6497.89);\n    new ShapeRef(router, polygon, 178);\n\n    // shapeRef179\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8576.29, 6497.89);\n    polygon.ps[1] = Point(8576.29, 6537.89);\n    polygon.ps[2] = Point(8521.29, 6537.89);\n    polygon.ps[3] = Point(8521.29, 6497.89);\n    new ShapeRef(router, polygon, 179);\n\n    // shapeRef180\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(11203.2, 2548.29);\n    polygon.ps[1] = Point(11203.2, 2610.29);\n    polygon.ps[2] = Point(11141.2, 2610.29);\n    polygon.ps[3] = Point(11141.2, 2548.29);\n    new ShapeRef(router, polygon, 180);\n\n    // shapeRef181\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(10906.2, 2548.29);\n    polygon.ps[1] = Point(10906.2, 2610.29);\n    polygon.ps[2] = Point(10844.2, 2610.29);\n    polygon.ps[3] = Point(10844.2, 2548.29);\n    new ShapeRef(router, polygon, 181);\n\n    // shapeRef182\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(11203.2, 2911.29);\n    polygon.ps[1] = Point(11203.2, 2973.29);\n    polygon.ps[2] = Point(11141.2, 2973.29);\n    polygon.ps[3] = Point(11141.2, 2911.29);\n    new ShapeRef(router, polygon, 182);\n\n    // shapeRef183\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(10906.2, 2911.29);\n    polygon.ps[1] = Point(10906.2, 2973.29);\n    polygon.ps[2] = Point(10844.2, 2973.29);\n    polygon.ps[3] = Point(10844.2, 2911.29);\n    new ShapeRef(router, polygon, 183);\n\n    // shapeRef184\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(10421.9, 2548.29);\n    polygon.ps[1] = Point(10421.9, 2610.29);\n    polygon.ps[2] = Point(10359.9, 2610.29);\n    polygon.ps[3] = Point(10359.9, 2548.29);\n    new ShapeRef(router, polygon, 184);\n\n    // shapeRef185\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(10421.9, 2911.29);\n    polygon.ps[1] = Point(10421.9, 2973.29);\n    polygon.ps[2] = Point(10359.9, 2973.29);\n    polygon.ps[3] = Point(10359.9, 2911.29);\n    new ShapeRef(router, polygon, 185);\n\n    // shapeRef186\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(10421.9, 3274.29);\n    polygon.ps[1] = Point(10421.9, 3336.29);\n    polygon.ps[2] = Point(10359.9, 3336.29);\n    polygon.ps[3] = Point(10359.9, 3274.29);\n    new ShapeRef(router, polygon, 186);\n\n    // shapeRef187\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(10421.9, 3633.51);\n    polygon.ps[1] = Point(10421.9, 3695.51);\n    polygon.ps[2] = Point(10359.9, 3695.51);\n    polygon.ps[3] = Point(10359.9, 3633.51);\n    new ShapeRef(router, polygon, 187);\n\n    // shapeRef188\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9532.59, 3633.51);\n    polygon.ps[1] = Point(9532.59, 3695.51);\n    polygon.ps[2] = Point(9470.59, 3695.51);\n    polygon.ps[3] = Point(9470.59, 3633.51);\n    new ShapeRef(router, polygon, 188);\n\n    // shapeRef189\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9532.59, 3402.51);\n    polygon.ps[1] = Point(9532.59, 3464.51);\n    polygon.ps[2] = Point(9470.59, 3464.51);\n    polygon.ps[3] = Point(9470.59, 3402.51);\n    new ShapeRef(router, polygon, 189);\n\n    // shapeRef190\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9532.59, 3142.29);\n    polygon.ps[1] = Point(9532.59, 3204.29);\n    polygon.ps[2] = Point(9470.59, 3204.29);\n    polygon.ps[3] = Point(9470.59, 3142.29);\n    new ShapeRef(router, polygon, 190);\n\n    // shapeRef191\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9532.59, 2911.29);\n    polygon.ps[1] = Point(9532.59, 2973.29);\n    polygon.ps[2] = Point(9470.59, 2973.29);\n    polygon.ps[3] = Point(9470.59, 2911.29);\n    new ShapeRef(router, polygon, 191);\n\n    // shapeRef192\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9532.59, 2548.29);\n    polygon.ps[1] = Point(9532.59, 2610.29);\n    polygon.ps[2] = Point(9470.59, 2610.29);\n    polygon.ps[3] = Point(9470.59, 2548.29);\n    new ShapeRef(router, polygon, 192);\n\n    // shapeRef193\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9202.59, 2548.29);\n    polygon.ps[1] = Point(9202.59, 2610.29);\n    polygon.ps[2] = Point(9140.59, 2610.29);\n    polygon.ps[3] = Point(9140.59, 2548.29);\n    new ShapeRef(router, polygon, 193);\n\n    // shapeRef194\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9202.59, 2911.29);\n    polygon.ps[1] = Point(9202.59, 2973.29);\n    polygon.ps[2] = Point(9140.59, 2973.29);\n    polygon.ps[3] = Point(9140.59, 2911.29);\n    new ShapeRef(router, polygon, 194);\n\n    // shapeRef195\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9202.59, 3142.29);\n    polygon.ps[1] = Point(9202.59, 3204.29);\n    polygon.ps[2] = Point(9140.59, 3204.29);\n    polygon.ps[3] = Point(9140.59, 3142.29);\n    new ShapeRef(router, polygon, 195);\n\n    // shapeRef196\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9202.59, 3402.51);\n    polygon.ps[1] = Point(9202.59, 3464.51);\n    polygon.ps[2] = Point(9140.59, 3464.51);\n    polygon.ps[3] = Point(9140.59, 3402.51);\n    new ShapeRef(router, polygon, 196);\n\n    // shapeRef197\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9202.59, 3633.51);\n    polygon.ps[1] = Point(9202.59, 3695.51);\n    polygon.ps[2] = Point(9140.59, 3695.51);\n    polygon.ps[3] = Point(9140.59, 3633.51);\n    new ShapeRef(router, polygon, 197);\n\n    // shapeRef198\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9202.59, 3963.51);\n    polygon.ps[1] = Point(9202.59, 4025.51);\n    polygon.ps[2] = Point(9140.59, 4025.51);\n    polygon.ps[3] = Point(9140.59, 3963.51);\n    new ShapeRef(router, polygon, 198);\n\n    // shapeRef199\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(3396, 2515.29);\n    polygon.ps[1] = Point(3396, 2577.29);\n    polygon.ps[2] = Point(3334, 2577.29);\n    polygon.ps[3] = Point(3334, 2515.29);\n    new ShapeRef(router, polygon, 199);\n\n    // shapeRef200\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(2571, 3666.51);\n    polygon.ps[1] = Point(2571, 3728.51);\n    polygon.ps[2] = Point(2509, 3728.51);\n    polygon.ps[3] = Point(2509, 3666.51);\n    new ShapeRef(router, polygon, 200);\n\n    // shapeRef201\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(3726, 2779.29);\n    polygon.ps[1] = Point(3726, 2841.29);\n    polygon.ps[2] = Point(3664, 2841.29);\n    polygon.ps[3] = Point(3664, 2779.29);\n    new ShapeRef(router, polygon, 201);\n\n    // shapeRef202\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(7928.29, 952.285);\n    polygon.ps[1] = Point(7928.29, 1014.29);\n    polygon.ps[2] = Point(7866.29, 1014.29);\n    polygon.ps[3] = Point(7866.29, 952.285);\n    new ShapeRef(router, polygon, 202);\n\n    // shapeRef203\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(4551, 3666.51);\n    polygon.ps[1] = Point(4551, 3728.51);\n    polygon.ps[2] = Point(4489, 3728.51);\n    polygon.ps[3] = Point(4489, 3666.51);\n    new ShapeRef(router, polygon, 203);\n\n    // shapeRef204\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(3561, 4297.11);\n    polygon.ps[1] = Point(3561, 4359.11);\n    polygon.ps[2] = Point(3499, 4359.11);\n    polygon.ps[3] = Point(3499, 4297.11);\n    new ShapeRef(router, polygon, 204);\n\n    // shapeRef205\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(3759, 3930.51);\n    polygon.ps[1] = Point(3759, 3992.51);\n    polygon.ps[2] = Point(3697, 3992.51);\n    polygon.ps[3] = Point(3697, 3930.51);\n    new ShapeRef(router, polygon, 205);\n\n    // shapeRef206\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(4353, 2119.29);\n    polygon.ps[1] = Point(4353, 2181.29);\n    polygon.ps[2] = Point(4291, 2181.29);\n    polygon.ps[3] = Point(4291, 2119.29);\n    new ShapeRef(router, polygon, 206);\n\n    // shapeRef207\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(3990, 3666.51);\n    polygon.ps[1] = Point(3990, 3728.51);\n    polygon.ps[2] = Point(3928, 3728.51);\n    polygon.ps[3] = Point(3928, 3666.51);\n    new ShapeRef(router, polygon, 207);\n\n    // shapeRef208\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(3396, 3109.29);\n    polygon.ps[1] = Point(3396, 3171.29);\n    polygon.ps[2] = Point(3334, 3171.29);\n    polygon.ps[3] = Point(3334, 3109.29);\n    new ShapeRef(router, polygon, 208);\n\n    // shapeRef209\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9289.03, 6697.89);\n    polygon.ps[1] = Point(9289.03, 6737.89);\n    polygon.ps[2] = Point(9234.03, 6737.89);\n    polygon.ps[3] = Point(9234.03, 6697.89);\n    new ShapeRef(router, polygon, 209);\n\n    // shapeRef210\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(4815, 5481.67);\n    polygon.ps[1] = Point(4815, 5543.67);\n    polygon.ps[2] = Point(4753, 5543.67);\n    polygon.ps[3] = Point(4753, 5481.67);\n    new ShapeRef(router, polygon, 210);\n\n    // shapeRef211\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(16328.6, 5072.4);\n    polygon.ps[1] = Point(16328.6, 5134.4);\n    polygon.ps[2] = Point(16266.6, 5134.4);\n    polygon.ps[3] = Point(16266.6, 5072.4);\n    new ShapeRef(router, polygon, 211);\n\n    // shapeRef212\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(15932.6, 5072.4);\n    polygon.ps[1] = Point(15932.6, 5134.4);\n    polygon.ps[2] = Point(15870.6, 5134.4);\n    polygon.ps[3] = Point(15870.6, 5072.4);\n    new ShapeRef(router, polygon, 212);\n\n    // shapeRef213\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(15438.5, 4676.4);\n    polygon.ps[1] = Point(15438.5, 4738.4);\n    polygon.ps[2] = Point(15376.5, 4738.4);\n    polygon.ps[3] = Point(15376.5, 4676.4);\n    new ShapeRef(router, polygon, 213);\n\n    // shapeRef214\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(15438.5, 5448.67);\n    polygon.ps[1] = Point(15438.5, 5510.67);\n    polygon.ps[2] = Point(15376.5, 5510.67);\n    polygon.ps[3] = Point(15376.5, 5448.67);\n    new ShapeRef(router, polygon, 214);\n\n    // shapeRef215\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(15438.5, 6186.51);\n    polygon.ps[1] = Point(15438.5, 6248.51);\n    polygon.ps[2] = Point(15376.5, 6248.51);\n    polygon.ps[3] = Point(15376.5, 6186.51);\n    new ShapeRef(router, polygon, 215);\n\n    // shapeRef216\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(15438.5, 6549.51);\n    polygon.ps[1] = Point(15438.5, 6611.51);\n    polygon.ps[2] = Point(15376.5, 6611.51);\n    polygon.ps[3] = Point(15376.5, 6549.51);\n    new ShapeRef(router, polygon, 216);\n\n    // shapeRef217\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(4650, 8908.22);\n    polygon.ps[1] = Point(4650, 8970.22);\n    polygon.ps[2] = Point(4588, 8970.22);\n    polygon.ps[3] = Point(4588, 8908.22);\n    new ShapeRef(router, polygon, 217);\n\n    // shapeRef218\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(4287, 8677.22);\n    polygon.ps[1] = Point(4287, 8739.22);\n    polygon.ps[2] = Point(4225, 8739.22);\n    polygon.ps[3] = Point(4225, 8677.22);\n    new ShapeRef(router, polygon, 218);\n\n    // shapeRef219\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(4287, 8383.99);\n    polygon.ps[1] = Point(4287, 8445.99);\n    polygon.ps[2] = Point(4225, 8445.99);\n    polygon.ps[3] = Point(4225, 8383.99);\n    new ShapeRef(router, polygon, 219);\n\n    // shapeRef220\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9289.03, 6797.89);\n    polygon.ps[1] = Point(9289.03, 6837.89);\n    polygon.ps[2] = Point(9234.03, 6837.89);\n    polygon.ps[3] = Point(9234.03, 6797.89);\n    new ShapeRef(router, polygon, 220);\n\n    // shapeRef221\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9389.03, 6797.89);\n    polygon.ps[1] = Point(9389.03, 6837.89);\n    polygon.ps[2] = Point(9334.03, 6837.89);\n    polygon.ps[3] = Point(9334.03, 6797.89);\n    new ShapeRef(router, polygon, 221);\n\n    // shapeRef222\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8389.03, 6897.89);\n    polygon.ps[1] = Point(8389.03, 6937.89);\n    polygon.ps[2] = Point(8334.03, 6937.89);\n    polygon.ps[3] = Point(8334.03, 6897.89);\n    new ShapeRef(router, polygon, 222);\n\n    // shapeRef223\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(4848, 8076.79);\n    polygon.ps[1] = Point(4848, 8138.79);\n    polygon.ps[2] = Point(4786, 8138.79);\n    polygon.ps[3] = Point(4786, 8076.79);\n    new ShapeRef(router, polygon, 223);\n\n    // shapeRef224\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(4848, 7548.79);\n    polygon.ps[1] = Point(4848, 7610.79);\n    polygon.ps[2] = Point(4786, 7610.79);\n    polygon.ps[3] = Point(4786, 7548.79);\n    new ShapeRef(router, polygon, 224);\n\n    // shapeRef225\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(3924, 6965.4);\n    polygon.ps[1] = Point(3924, 7027.4);\n    polygon.ps[2] = Point(3862, 7027.4);\n    polygon.ps[3] = Point(3862, 6965.4);\n    new ShapeRef(router, polygon, 225);\n\n    // shapeRef226\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(4188, 6965.4);\n    polygon.ps[1] = Point(4188, 7027.4);\n    polygon.ps[2] = Point(4126, 7027.4);\n    polygon.ps[3] = Point(4126, 6965.4);\n    new ShapeRef(router, polygon, 226);\n\n    // shapeRef227\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(4452, 6965.4);\n    polygon.ps[1] = Point(4452, 7027.4);\n    polygon.ps[2] = Point(4390, 7027.4);\n    polygon.ps[3] = Point(4390, 6965.4);\n    new ShapeRef(router, polygon, 227);\n\n    // shapeRef228\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(2967, 6582.51);\n    polygon.ps[1] = Point(2967, 6644.51);\n    polygon.ps[2] = Point(2905, 6644.51);\n    polygon.ps[3] = Point(2905, 6582.51);\n    new ShapeRef(router, polygon, 228);\n\n    // shapeRef229\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(3759, 7097.4);\n    polygon.ps[1] = Point(3759, 7159.4);\n    polygon.ps[2] = Point(3697, 7159.4);\n    polygon.ps[3] = Point(3697, 7097.4);\n    new ShapeRef(router, polygon, 229);\n\n    // shapeRef230\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(3495, 7097.4);\n    polygon.ps[1] = Point(3495, 7159.4);\n    polygon.ps[2] = Point(3433, 7159.4);\n    polygon.ps[3] = Point(3433, 7097.4);\n    new ShapeRef(router, polygon, 230);\n\n    // shapeRef231\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9289.03, 6897.89);\n    polygon.ps[1] = Point(9289.03, 6937.89);\n    polygon.ps[2] = Point(9234.03, 6937.89);\n    polygon.ps[3] = Point(9234.03, 6897.89);\n    new ShapeRef(router, polygon, 231);\n\n    // shapeRef232\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9389.03, 6897.89);\n    polygon.ps[1] = Point(9389.03, 6937.89);\n    polygon.ps[2] = Point(9334.03, 6937.89);\n    polygon.ps[3] = Point(9334.03, 6897.89);\n    new ShapeRef(router, polygon, 232);\n\n    // shapeRef233\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8389.03, 6997.89);\n    polygon.ps[1] = Point(8389.03, 7037.89);\n    polygon.ps[2] = Point(8334.03, 7037.89);\n    polygon.ps[3] = Point(8334.03, 6997.89);\n    new ShapeRef(router, polygon, 233);\n\n    // shapeRef234\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8489.03, 6997.89);\n    polygon.ps[1] = Point(8489.03, 7037.89);\n    polygon.ps[2] = Point(8434.03, 7037.89);\n    polygon.ps[3] = Point(8434.03, 6997.89);\n    new ShapeRef(router, polygon, 234);\n\n    // shapeRef235\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(5494.1, 8515.99);\n    polygon.ps[1] = Point(5494.1, 8577.99);\n    polygon.ps[2] = Point(5432.1, 8577.99);\n    polygon.ps[3] = Point(5432.1, 8515.99);\n    new ShapeRef(router, polygon, 235);\n\n    // shapeRef236\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(5494.1, 8076.79);\n    polygon.ps[1] = Point(5494.1, 8138.79);\n    polygon.ps[2] = Point(5432.1, 8138.79);\n    polygon.ps[3] = Point(5432.1, 8076.79);\n    new ShapeRef(router, polygon, 236);\n\n    // shapeRef237\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(5112, 8076.79);\n    polygon.ps[1] = Point(5112, 8138.79);\n    polygon.ps[2] = Point(5050, 8138.79);\n    polygon.ps[3] = Point(5050, 8076.79);\n    new ShapeRef(router, polygon, 237);\n\n    // shapeRef238\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(5244, 6153.51);\n    polygon.ps[1] = Point(5244, 6215.51);\n    polygon.ps[2] = Point(5182, 6215.51);\n    polygon.ps[3] = Point(5182, 6153.51);\n    new ShapeRef(router, polygon, 238);\n\n    // shapeRef239\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(5244, 8908.22);\n    polygon.ps[1] = Point(5244, 8970.22);\n    polygon.ps[2] = Point(5182, 8970.22);\n    polygon.ps[3] = Point(5182, 8908.22);\n    new ShapeRef(router, polygon, 239);\n\n    // shapeRef240\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(5244, 8515.99);\n    polygon.ps[1] = Point(5244, 8577.99);\n    polygon.ps[2] = Point(5182, 8577.99);\n    polygon.ps[3] = Point(5182, 8515.99);\n    new ShapeRef(router, polygon, 240);\n\n    // shapeRef241\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(5244, 8076.79);\n    polygon.ps[1] = Point(5244, 8138.79);\n    polygon.ps[2] = Point(5182, 8138.79);\n    polygon.ps[3] = Point(5182, 8076.79);\n    new ShapeRef(router, polygon, 241);\n\n    // shapeRef242\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(5244, 7548.79);\n    polygon.ps[1] = Point(5244, 7610.79);\n    polygon.ps[2] = Point(5182, 7610.79);\n    polygon.ps[3] = Point(5182, 7548.79);\n    new ShapeRef(router, polygon, 242);\n\n    // shapeRef243\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9389.03, 6997.89);\n    polygon.ps[1] = Point(9389.03, 7037.89);\n    polygon.ps[2] = Point(9334.03, 7037.89);\n    polygon.ps[3] = Point(9334.03, 6997.89);\n    new ShapeRef(router, polygon, 243);\n\n    // shapeRef244\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8389.03, 7097.89);\n    polygon.ps[1] = Point(8389.03, 7137.89);\n    polygon.ps[2] = Point(8334.03, 7137.89);\n    polygon.ps[3] = Point(8334.03, 7097.89);\n    new ShapeRef(router, polygon, 244);\n\n    // shapeRef245\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8489.03, 7097.89);\n    polygon.ps[1] = Point(8489.03, 7137.89);\n    polygon.ps[2] = Point(8434.03, 7137.89);\n    polygon.ps[3] = Point(8434.03, 7097.89);\n    new ShapeRef(router, polygon, 245);\n\n    // shapeRef246\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8589.03, 7097.89);\n    polygon.ps[1] = Point(8589.03, 7137.89);\n    polygon.ps[2] = Point(8534.03, 7137.89);\n    polygon.ps[3] = Point(8534.03, 7097.89);\n    new ShapeRef(router, polygon, 246);\n\n    // shapeRef247\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8789.03, 7097.89);\n    polygon.ps[1] = Point(8789.03, 7137.89);\n    polygon.ps[2] = Point(8734.03, 7137.89);\n    polygon.ps[3] = Point(8734.03, 7097.89);\n    new ShapeRef(router, polygon, 247);\n\n    // shapeRef248\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8889.03, 7097.89);\n    polygon.ps[1] = Point(8889.03, 7137.89);\n    polygon.ps[2] = Point(8834.03, 7137.89);\n    polygon.ps[3] = Point(8834.03, 7097.89);\n    new ShapeRef(router, polygon, 248);\n\n    // shapeRef249\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(2109, 7097.4);\n    polygon.ps[1] = Point(2109, 7159.4);\n    polygon.ps[2] = Point(2047, 7159.4);\n    polygon.ps[3] = Point(2047, 7097.4);\n    new ShapeRef(router, polygon, 249);\n\n    // shapeRef250\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(2406, 6998.4);\n    polygon.ps[1] = Point(2406, 7060.4);\n    polygon.ps[2] = Point(2344, 7060.4);\n    polygon.ps[3] = Point(2344, 6998.4);\n    new ShapeRef(router, polygon, 250);\n\n    // shapeRef251\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(1911, 6998.4);\n    polygon.ps[1] = Point(1911, 7060.4);\n    polygon.ps[2] = Point(1849, 7060.4);\n    polygon.ps[3] = Point(1849, 6998.4);\n    new ShapeRef(router, polygon, 251);\n\n    // shapeRef252\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9289.03, 7097.89);\n    polygon.ps[1] = Point(9289.03, 7137.89);\n    polygon.ps[2] = Point(9234.03, 7137.89);\n    polygon.ps[3] = Point(9234.03, 7097.89);\n    new ShapeRef(router, polygon, 252);\n\n    // shapeRef253\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9389.03, 7097.89);\n    polygon.ps[1] = Point(9389.03, 7137.89);\n    polygon.ps[2] = Point(9334.03, 7137.89);\n    polygon.ps[3] = Point(9334.03, 7097.89);\n    new ShapeRef(router, polygon, 253);\n\n    // shapeRef254\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(2406, 7097.4);\n    polygon.ps[1] = Point(2406, 7159.4);\n    polygon.ps[2] = Point(2344, 7159.4);\n    polygon.ps[3] = Point(2344, 7097.4);\n    new ShapeRef(router, polygon, 254);\n\n    // shapeRef255\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(1779, 7614.79);\n    polygon.ps[1] = Point(1779, 7676.79);\n    polygon.ps[2] = Point(1717, 7676.79);\n    polygon.ps[3] = Point(1717, 7614.79);\n    new ShapeRef(router, polygon, 255);\n\n    // shapeRef256\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(1779, 7097.4);\n    polygon.ps[1] = Point(1779, 7159.4);\n    polygon.ps[2] = Point(1717, 7159.4);\n    polygon.ps[3] = Point(1717, 7097.4);\n    new ShapeRef(router, polygon, 256);\n\n    // shapeRef257\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(1779, 8142.79);\n    polygon.ps[1] = Point(1779, 8204.79);\n    polygon.ps[2] = Point(1717, 8204.79);\n    polygon.ps[3] = Point(1717, 8142.79);\n    new ShapeRef(router, polygon, 257);\n\n    // shapeRef258\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(1779, 6582.51);\n    polygon.ps[1] = Point(1779, 6644.51);\n    polygon.ps[2] = Point(1717, 6644.51);\n    polygon.ps[3] = Point(1717, 6582.51);\n    new ShapeRef(router, polygon, 258);\n\n    // shapeRef259\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(2109, 8142.79);\n    polygon.ps[1] = Point(2109, 8204.79);\n    polygon.ps[2] = Point(2047, 8204.79);\n    polygon.ps[3] = Point(2047, 8142.79);\n    new ShapeRef(router, polygon, 259);\n\n    // shapeRef260\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(2109, 7614.79);\n    polygon.ps[1] = Point(2109, 7676.79);\n    polygon.ps[2] = Point(2047, 7676.79);\n    polygon.ps[3] = Point(2047, 7614.79);\n    new ShapeRef(router, polygon, 260);\n\n    // shapeRef261\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(2109, 8548.99);\n    polygon.ps[1] = Point(2109, 8610.99);\n    polygon.ps[2] = Point(2047, 8610.99);\n    polygon.ps[3] = Point(2047, 8548.99);\n    new ShapeRef(router, polygon, 261);\n\n    // shapeRef262\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(2406, 8142.79);\n    polygon.ps[1] = Point(2406, 8204.79);\n    polygon.ps[2] = Point(2344, 8204.79);\n    polygon.ps[3] = Point(2344, 8142.79);\n    new ShapeRef(router, polygon, 262);\n\n    // shapeRef263\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(2406, 7614.79);\n    polygon.ps[1] = Point(2406, 7676.79);\n    polygon.ps[2] = Point(2344, 7676.79);\n    polygon.ps[3] = Point(2344, 7614.79);\n    new ShapeRef(router, polygon, 263);\n\n    // shapeRef264\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(2406, 8548.99);\n    polygon.ps[1] = Point(2406, 8610.99);\n    polygon.ps[2] = Point(2344, 8610.99);\n    polygon.ps[3] = Point(2344, 8548.99);\n    new ShapeRef(router, polygon, 264);\n\n    // shapeRef265\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(2604, 8548.99);\n    polygon.ps[1] = Point(2604, 8610.99);\n    polygon.ps[2] = Point(2542, 8610.99);\n    polygon.ps[3] = Point(2542, 8548.99);\n    new ShapeRef(router, polygon, 265);\n\n    // shapeRef266\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(2604, 8142.79);\n    polygon.ps[1] = Point(2604, 8204.79);\n    polygon.ps[2] = Point(2542, 8204.79);\n    polygon.ps[3] = Point(2542, 8142.79);\n    new ShapeRef(router, polygon, 266);\n\n    // shapeRef267\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(2604, 9017.42);\n    polygon.ps[1] = Point(2604, 9079.42);\n    polygon.ps[2] = Point(2542, 9079.42);\n    polygon.ps[3] = Point(2542, 9017.42);\n    new ShapeRef(router, polygon, 267);\n\n    // shapeRef268\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(2604, 7614.79);\n    polygon.ps[1] = Point(2604, 7676.79);\n    polygon.ps[2] = Point(2542, 7676.79);\n    polygon.ps[3] = Point(2542, 7614.79);\n    new ShapeRef(router, polygon, 268);\n\n    // shapeRef269\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(4155, 5481.67);\n    polygon.ps[1] = Point(4155, 5543.67);\n    polygon.ps[2] = Point(4093, 5543.67);\n    polygon.ps[3] = Point(4093, 5481.67);\n    new ShapeRef(router, polygon, 269);\n\n    // shapeRef270\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8889.03, 7297.89);\n    polygon.ps[1] = Point(8889.03, 7337.89);\n    polygon.ps[2] = Point(8834.03, 7337.89);\n    polygon.ps[3] = Point(8834.03, 7297.89);\n    new ShapeRef(router, polygon, 270);\n\n    // shapeRef271\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(3825, 5481.67);\n    polygon.ps[1] = Point(3825, 5543.67);\n    polygon.ps[2] = Point(3763, 5543.67);\n    polygon.ps[3] = Point(3763, 5481.67);\n    new ShapeRef(router, polygon, 271);\n\n    // shapeRef272\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(3462, 5481.67);\n    polygon.ps[1] = Point(3462, 5543.67);\n    polygon.ps[2] = Point(3400, 5543.67);\n    polygon.ps[3] = Point(3400, 5481.67);\n    new ShapeRef(router, polygon, 272);\n\n    // shapeRef273\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(3033, 5481.67);\n    polygon.ps[1] = Point(3033, 5543.67);\n    polygon.ps[2] = Point(2971, 5543.67);\n    polygon.ps[3] = Point(2971, 5481.67);\n    new ShapeRef(router, polygon, 273);\n\n    // shapeRef274\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(2538, 5481.67);\n    polygon.ps[1] = Point(2538, 5543.67);\n    polygon.ps[2] = Point(2476, 5543.67);\n    polygon.ps[3] = Point(2476, 5481.67);\n    new ShapeRef(router, polygon, 274);\n\n    // shapeRef275\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9389.03, 7297.89);\n    polygon.ps[1] = Point(9389.03, 7337.89);\n    polygon.ps[2] = Point(9334.03, 7337.89);\n    polygon.ps[3] = Point(9334.03, 7297.89);\n    new ShapeRef(router, polygon, 275);\n\n    // shapeRef276\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(129, 5758.9);\n    polygon.ps[1] = Point(129, 5820.9);\n    polygon.ps[2] = Point(67, 5820.9);\n    polygon.ps[3] = Point(67, 5758.9);\n    new ShapeRef(router, polygon, 276);\n\n    // shapeRef277\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(129, 6318.51);\n    polygon.ps[1] = Point(129, 6380.51);\n    polygon.ps[2] = Point(67, 6380.51);\n    polygon.ps[3] = Point(67, 6318.51);\n    new ShapeRef(router, polygon, 277);\n\n    // shapeRef278\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(393, 7614.79);\n    polygon.ps[1] = Point(393, 7676.79);\n    polygon.ps[2] = Point(331, 7676.79);\n    polygon.ps[3] = Point(331, 7614.79);\n    new ShapeRef(router, polygon, 278);\n\n    // shapeRef279\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(393, 7163.4);\n    polygon.ps[1] = Point(393, 7225.4);\n    polygon.ps[2] = Point(331, 7225.4);\n    polygon.ps[3] = Point(331, 7163.4);\n    new ShapeRef(router, polygon, 279);\n\n    // shapeRef280\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(393, 6648.51);\n    polygon.ps[1] = Point(393, 6710.51);\n    polygon.ps[2] = Point(331, 6710.51);\n    polygon.ps[3] = Point(331, 6648.51);\n    new ShapeRef(router, polygon, 280);\n\n    // shapeRef281\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(393, 6318.51);\n    polygon.ps[1] = Point(393, 6380.51);\n    polygon.ps[2] = Point(331, 6380.51);\n    polygon.ps[3] = Point(331, 6318.51);\n    new ShapeRef(router, polygon, 281);\n\n    // shapeRef282\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(855, 7977.79);\n    polygon.ps[1] = Point(855, 8039.79);\n    polygon.ps[2] = Point(793, 8039.79);\n    polygon.ps[3] = Point(793, 7977.79);\n    new ShapeRef(router, polygon, 282);\n\n    // shapeRef283\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(855, 7581.79);\n    polygon.ps[1] = Point(855, 7643.79);\n    polygon.ps[2] = Point(793, 7643.79);\n    polygon.ps[3] = Point(793, 7581.79);\n    new ShapeRef(router, polygon, 283);\n\n    // shapeRef284\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(855, 6582.51);\n    polygon.ps[1] = Point(855, 6644.51);\n    polygon.ps[2] = Point(793, 6644.51);\n    polygon.ps[3] = Point(793, 6582.51);\n    new ShapeRef(router, polygon, 284);\n\n    // shapeRef285\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(855, 6219.51);\n    polygon.ps[1] = Point(855, 6281.51);\n    polygon.ps[2] = Point(793, 6281.51);\n    polygon.ps[3] = Point(793, 6219.51);\n    new ShapeRef(router, polygon, 285);\n\n    // shapeRef286\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(855, 5758.9);\n    polygon.ps[1] = Point(855, 5820.9);\n    polygon.ps[2] = Point(793, 5820.9);\n    polygon.ps[3] = Point(793, 5758.9);\n    new ShapeRef(router, polygon, 286);\n\n    // shapeRef287\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(1086, 8515.99);\n    polygon.ps[1] = Point(1086, 8577.99);\n    polygon.ps[2] = Point(1024, 8577.99);\n    polygon.ps[3] = Point(1024, 8515.99);\n    new ShapeRef(router, polygon, 287);\n\n    // shapeRef288\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(1086, 8142.79);\n    polygon.ps[1] = Point(1086, 8204.79);\n    polygon.ps[2] = Point(1024, 8204.79);\n    polygon.ps[3] = Point(1024, 8142.79);\n    new ShapeRef(router, polygon, 288);\n\n    // shapeRef289\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(1086, 7680.79);\n    polygon.ps[1] = Point(1086, 7742.79);\n    polygon.ps[2] = Point(1024, 7742.79);\n    polygon.ps[3] = Point(1024, 7680.79);\n    new ShapeRef(router, polygon, 289);\n\n    // shapeRef290\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(1086, 7229.4);\n    polygon.ps[1] = Point(1086, 7291.4);\n    polygon.ps[2] = Point(1024, 7291.4);\n    polygon.ps[3] = Point(1024, 7229.4);\n    new ShapeRef(router, polygon, 290);\n\n    // shapeRef291\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(1086, 6790.21);\n    polygon.ps[1] = Point(1086, 6852.21);\n    polygon.ps[2] = Point(1024, 6852.21);\n    polygon.ps[3] = Point(1024, 6790.21);\n    new ShapeRef(router, polygon, 291);\n\n    // shapeRef292\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(1086, 6384.51);\n    polygon.ps[1] = Point(1086, 6446.51);\n    polygon.ps[2] = Point(1024, 6446.51);\n    polygon.ps[3] = Point(1024, 6384.51);\n    new ShapeRef(router, polygon, 292);\n\n    // shapeRef293\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(1086, 5966.59);\n    polygon.ps[1] = Point(1086, 6028.59);\n    polygon.ps[2] = Point(1024, 6028.59);\n    polygon.ps[3] = Point(1024, 5966.59);\n    new ShapeRef(router, polygon, 293);\n\n    // shapeRef294\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(1416, 5481.67);\n    polygon.ps[1] = Point(1416, 5543.67);\n    polygon.ps[2] = Point(1354, 5543.67);\n    polygon.ps[3] = Point(1354, 5481.67);\n    new ShapeRef(router, polygon, 294);\n\n    // shapeRef295\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9189.03, 7497.89);\n    polygon.ps[1] = Point(9189.03, 7537.89);\n    polygon.ps[2] = Point(9134.03, 7537.89);\n    polygon.ps[3] = Point(9134.03, 7497.89);\n    new ShapeRef(router, polygon, 295);\n\n    // shapeRef296\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9289.03, 7497.89);\n    polygon.ps[1] = Point(9289.03, 7537.89);\n    polygon.ps[2] = Point(9234.03, 7537.89);\n    polygon.ps[3] = Point(9234.03, 7497.89);\n    new ShapeRef(router, polygon, 296);\n\n    // shapeRef297\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9389.03, 7497.89);\n    polygon.ps[1] = Point(9389.03, 7537.89);\n    polygon.ps[2] = Point(9334.03, 7537.89);\n    polygon.ps[3] = Point(9334.03, 7497.89);\n    new ShapeRef(router, polygon, 297);\n\n    // shapeRef298\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8389.03, 7597.89);\n    polygon.ps[1] = Point(8389.03, 7637.89);\n    polygon.ps[2] = Point(8334.03, 7637.89);\n    polygon.ps[3] = Point(8334.03, 7597.89);\n    new ShapeRef(router, polygon, 298);\n\n    // shapeRef299\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8489.03, 7597.89);\n    polygon.ps[1] = Point(8489.03, 7637.89);\n    polygon.ps[2] = Point(8434.03, 7637.89);\n    polygon.ps[3] = Point(8434.03, 7597.89);\n    new ShapeRef(router, polygon, 299);\n\n    // shapeRef300\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8589.03, 7597.89);\n    polygon.ps[1] = Point(8589.03, 7637.89);\n    polygon.ps[2] = Point(8534.03, 7637.89);\n    polygon.ps[3] = Point(8534.03, 7597.89);\n    new ShapeRef(router, polygon, 300);\n\n    // shapeRef301\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8689.03, 7597.89);\n    polygon.ps[1] = Point(8689.03, 7637.89);\n    polygon.ps[2] = Point(8634.03, 7637.89);\n    polygon.ps[3] = Point(8634.03, 7597.89);\n    new ShapeRef(router, polygon, 301);\n\n    // shapeRef302\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8789.03, 7597.89);\n    polygon.ps[1] = Point(8789.03, 7637.89);\n    polygon.ps[2] = Point(8734.03, 7637.89);\n    polygon.ps[3] = Point(8734.03, 7597.89);\n    new ShapeRef(router, polygon, 302);\n\n    // shapeRef303\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(954, 5039.4);\n    polygon.ps[1] = Point(954, 5101.4);\n    polygon.ps[2] = Point(892, 5101.4);\n    polygon.ps[3] = Point(892, 5039.4);\n    new ShapeRef(router, polygon, 303);\n\n    // shapeRef304\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(1416, 5039.4);\n    polygon.ps[1] = Point(1416, 5101.4);\n    polygon.ps[2] = Point(1354, 5101.4);\n    polygon.ps[3] = Point(1354, 5039.4);\n    new ShapeRef(router, polygon, 304);\n\n    // shapeRef305\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(492, 5316.67);\n    polygon.ps[1] = Point(492, 5378.67);\n    polygon.ps[2] = Point(430, 5378.67);\n    polygon.ps[3] = Point(430, 5316.67);\n    new ShapeRef(router, polygon, 305);\n\n    // shapeRef306\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(492, 5217.67);\n    polygon.ps[1] = Point(492, 5279.67);\n    polygon.ps[2] = Point(430, 5279.67);\n    polygon.ps[3] = Point(430, 5217.67);\n    new ShapeRef(router, polygon, 306);\n\n    // shapeRef307\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(228, 5217.67);\n    polygon.ps[1] = Point(228, 5279.67);\n    polygon.ps[2] = Point(166, 5279.67);\n    polygon.ps[3] = Point(166, 5217.67);\n    new ShapeRef(router, polygon, 307);\n\n    // shapeRef308\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(2472, 4742.4);\n    polygon.ps[1] = Point(2472, 4804.4);\n    polygon.ps[2] = Point(2410, 4804.4);\n    polygon.ps[3] = Point(2410, 4742.4);\n    new ShapeRef(router, polygon, 308);\n\n    // shapeRef309\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(492, 5039.4);\n    polygon.ps[1] = Point(492, 5101.4);\n    polygon.ps[2] = Point(430, 5101.4);\n    polygon.ps[3] = Point(430, 5039.4);\n    new ShapeRef(router, polygon, 309);\n\n    // shapeRef310\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(2142, 4742.4);\n    polygon.ps[1] = Point(2142, 4804.4);\n    polygon.ps[2] = Point(2080, 4804.4);\n    polygon.ps[3] = Point(2080, 4742.4);\n    new ShapeRef(router, polygon, 310);\n\n    // shapeRef311\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(1086, 4742.4);\n    polygon.ps[1] = Point(1086, 4804.4);\n    polygon.ps[2] = Point(1024, 4804.4);\n    polygon.ps[3] = Point(1024, 4742.4);\n    new ShapeRef(router, polygon, 311);\n\n    // shapeRef312\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(228, 4742.4);\n    polygon.ps[1] = Point(228, 4804.4);\n    polygon.ps[2] = Point(166, 4804.4);\n    polygon.ps[3] = Point(166, 4742.4);\n    new ShapeRef(router, polygon, 312);\n\n    // shapeRef313\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(756, 4742.4);\n    polygon.ps[1] = Point(756, 4804.4);\n    polygon.ps[2] = Point(694, 4804.4);\n    polygon.ps[3] = Point(694, 4742.4);\n    new ShapeRef(router, polygon, 313);\n\n    // shapeRef314\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(2901, 5039.4);\n    polygon.ps[1] = Point(2901, 5101.4);\n    polygon.ps[2] = Point(2839, 5101.4);\n    polygon.ps[3] = Point(2839, 5039.4);\n    new ShapeRef(router, polygon, 314);\n\n    // shapeRef315\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(1944, 5039.4);\n    polygon.ps[1] = Point(1944, 5101.4);\n    polygon.ps[2] = Point(1882, 5101.4);\n    polygon.ps[3] = Point(1882, 5039.4);\n    new ShapeRef(router, polygon, 315);\n\n    // shapeRef316\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9189.03, 7697.89);\n    polygon.ps[1] = Point(9189.03, 7737.89);\n    polygon.ps[2] = Point(9134.03, 7737.89);\n    polygon.ps[3] = Point(9134.03, 7697.89);\n    new ShapeRef(router, polygon, 316);\n\n    // shapeRef317\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9289.03, 7697.89);\n    polygon.ps[1] = Point(9289.03, 7737.89);\n    polygon.ps[2] = Point(9234.03, 7737.89);\n    polygon.ps[3] = Point(9234.03, 7697.89);\n    new ShapeRef(router, polygon, 317);\n\n    // shapeRef318\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9389.03, 7697.89);\n    polygon.ps[1] = Point(9389.03, 7737.89);\n    polygon.ps[2] = Point(9334.03, 7737.89);\n    polygon.ps[3] = Point(9334.03, 7697.89);\n    new ShapeRef(router, polygon, 318);\n\n    // shapeRef319\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8389.03, 7797.89);\n    polygon.ps[1] = Point(8389.03, 7837.89);\n    polygon.ps[2] = Point(8334.03, 7837.89);\n    polygon.ps[3] = Point(8334.03, 7797.89);\n    new ShapeRef(router, polygon, 319);\n\n    // shapeRef320\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8489.03, 7797.89);\n    polygon.ps[1] = Point(8489.03, 7837.89);\n    polygon.ps[2] = Point(8434.03, 7837.89);\n    polygon.ps[3] = Point(8434.03, 7797.89);\n    new ShapeRef(router, polygon, 320);\n\n    // shapeRef321\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8589.03, 7797.89);\n    polygon.ps[1] = Point(8589.03, 7837.89);\n    polygon.ps[2] = Point(8534.03, 7837.89);\n    polygon.ps[3] = Point(8534.03, 7797.89);\n    new ShapeRef(router, polygon, 321);\n\n    // shapeRef322\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8789.03, 7797.89);\n    polygon.ps[1] = Point(8789.03, 7837.89);\n    polygon.ps[2] = Point(8734.03, 7837.89);\n    polygon.ps[3] = Point(8734.03, 7797.89);\n    new ShapeRef(router, polygon, 322);\n\n    // shapeRef323\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8889.03, 7797.89);\n    polygon.ps[1] = Point(8889.03, 7837.89);\n    polygon.ps[2] = Point(8834.03, 7837.89);\n    polygon.ps[3] = Point(8834.03, 7797.89);\n    new ShapeRef(router, polygon, 323);\n\n    // shapeRef324\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9089.03, 7797.89);\n    polygon.ps[1] = Point(9089.03, 7837.89);\n    polygon.ps[2] = Point(9034.03, 7837.89);\n    polygon.ps[3] = Point(9034.03, 7797.89);\n    new ShapeRef(router, polygon, 324);\n\n    // shapeRef325\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(18366.5, 3534.51);\n    polygon.ps[1] = Point(18366.5, 3596.51);\n    polygon.ps[2] = Point(18304.5, 3596.51);\n    polygon.ps[3] = Point(18304.5, 3534.51);\n    new ShapeRef(router, polygon, 325);\n\n    // shapeRef326\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(18580, 3534.51);\n    polygon.ps[1] = Point(18580, 3596.51);\n    polygon.ps[2] = Point(18518, 3596.51);\n    polygon.ps[3] = Point(18518, 3534.51);\n    new ShapeRef(router, polygon, 326);\n\n    // shapeRef327\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(18580, 3307.29);\n    polygon.ps[1] = Point(18580, 3369.29);\n    polygon.ps[2] = Point(18518, 3369.29);\n    polygon.ps[3] = Point(18518, 3307.29);\n    new ShapeRef(router, polygon, 327);\n\n    // shapeRef328\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(18797.5, 3307.29);\n    polygon.ps[1] = Point(18797.5, 3369.29);\n    polygon.ps[2] = Point(18735.5, 3369.29);\n    polygon.ps[3] = Point(18735.5, 3307.29);\n    new ShapeRef(router, polygon, 328);\n\n    // shapeRef329\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(18797.5, 3534.51);\n    polygon.ps[1] = Point(18797.5, 3596.51);\n    polygon.ps[2] = Point(18735.5, 3596.51);\n    polygon.ps[3] = Point(18735.5, 3534.51);\n    new ShapeRef(router, polygon, 329);\n\n    // shapeRef330\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(18797.5, 3798.51);\n    polygon.ps[1] = Point(18797.5, 3860.51);\n    polygon.ps[2] = Point(18735.5, 3860.51);\n    polygon.ps[3] = Point(18735.5, 3798.51);\n    new ShapeRef(router, polygon, 330);\n\n    // shapeRef331\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(16031.6, 9248.42);\n    polygon.ps[1] = Point(16031.6, 9310.42);\n    polygon.ps[2] = Point(15969.6, 9310.42);\n    polygon.ps[3] = Point(15969.6, 9248.42);\n    new ShapeRef(router, polygon, 331);\n\n    // shapeRef332\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8889.03, 7897.89);\n    polygon.ps[1] = Point(8889.03, 7937.89);\n    polygon.ps[2] = Point(8834.03, 7937.89);\n    polygon.ps[3] = Point(8834.03, 7897.89);\n    new ShapeRef(router, polygon, 332);\n\n    // shapeRef333\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(7639.1, 3435.51);\n    polygon.ps[1] = Point(7639.1, 3497.51);\n    polygon.ps[2] = Point(7577.1, 3497.51);\n    polygon.ps[3] = Point(7577.1, 3435.51);\n    new ShapeRef(router, polygon, 333);\n\n    // shapeRef334\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(7639.1, 2482.29);\n    polygon.ps[1] = Point(7639.1, 2544.29);\n    polygon.ps[2] = Point(7577.1, 2544.29);\n    polygon.ps[3] = Point(7577.1, 2482.29);\n    new ShapeRef(router, polygon, 334);\n\n    // shapeRef335\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(7639.1, 1945.29);\n    polygon.ps[1] = Point(7639.1, 2007.29);\n    polygon.ps[2] = Point(7577.1, 2007.29);\n    polygon.ps[3] = Point(7577.1, 1945.29);\n    new ShapeRef(router, polygon, 335);\n\n    // shapeRef336\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9289.03, 7897.89);\n    polygon.ps[1] = Point(9289.03, 7937.89);\n    polygon.ps[2] = Point(9234.03, 7937.89);\n    polygon.ps[3] = Point(9234.03, 7897.89);\n    new ShapeRef(router, polygon, 336);\n\n    // shapeRef337\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9389.03, 7897.89);\n    polygon.ps[1] = Point(9389.03, 7937.89);\n    polygon.ps[2] = Point(9334.03, 7937.89);\n    polygon.ps[3] = Point(9334.03, 7897.89);\n    new ShapeRef(router, polygon, 337);\n\n    // shapeRef338\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(6088.1, 8548.99);\n    polygon.ps[1] = Point(6088.1, 8610.99);\n    polygon.ps[2] = Point(6026.1, 8610.99);\n    polygon.ps[3] = Point(6026.1, 8548.99);\n    new ShapeRef(router, polygon, 338);\n\n    // shapeRef339\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(6088.1, 8251.99);\n    polygon.ps[1] = Point(6088.1, 8313.99);\n    polygon.ps[2] = Point(6026.1, 8313.99);\n    polygon.ps[3] = Point(6026.1, 8251.99);\n    new ShapeRef(router, polygon, 339);\n\n    // shapeRef340\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(5791.1, 8875.22);\n    polygon.ps[1] = Point(5791.1, 8937.22);\n    polygon.ps[2] = Point(5729.1, 8937.22);\n    polygon.ps[3] = Point(5729.1, 8875.22);\n    new ShapeRef(router, polygon, 340);\n\n    // shapeRef341\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(5791.1, 8548.99);\n    polygon.ps[1] = Point(5791.1, 8610.99);\n    polygon.ps[2] = Point(5729.1, 8610.99);\n    polygon.ps[3] = Point(5729.1, 8548.99);\n    new ShapeRef(router, polygon, 341);\n\n    // shapeRef342\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(5791.1, 8251.99);\n    polygon.ps[1] = Point(5791.1, 8313.99);\n    polygon.ps[2] = Point(5729.1, 8313.99);\n    polygon.ps[3] = Point(5729.1, 8251.99);\n    new ShapeRef(router, polygon, 342);\n\n    // shapeRef343\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(5791.1, 7812.79);\n    polygon.ps[1] = Point(5791.1, 7874.79);\n    polygon.ps[2] = Point(5729.1, 7874.79);\n    polygon.ps[3] = Point(5729.1, 7812.79);\n    new ShapeRef(router, polygon, 343);\n\n    // shapeRef344\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8989.03, 7997.89);\n    polygon.ps[1] = Point(8989.03, 8037.89);\n    polygon.ps[2] = Point(8934.03, 8037.89);\n    polygon.ps[3] = Point(8934.03, 7997.89);\n    new ShapeRef(router, polygon, 344);\n\n    // shapeRef345\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9089.03, 7997.89);\n    polygon.ps[1] = Point(9089.03, 8037.89);\n    polygon.ps[2] = Point(9034.03, 8037.89);\n    polygon.ps[3] = Point(9034.03, 7997.89);\n    new ShapeRef(router, polygon, 345);\n\n    // shapeRef346\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9189.03, 7997.89);\n    polygon.ps[1] = Point(9189.03, 8037.89);\n    polygon.ps[2] = Point(9134.03, 8037.89);\n    polygon.ps[3] = Point(9134.03, 7997.89);\n    new ShapeRef(router, polygon, 346);\n\n    // shapeRef347\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9289.03, 7997.89);\n    polygon.ps[1] = Point(9289.03, 8037.89);\n    polygon.ps[2] = Point(9234.03, 8037.89);\n    polygon.ps[3] = Point(9234.03, 7997.89);\n    new ShapeRef(router, polygon, 347);\n\n    // shapeRef348\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(1911, 10585.3);\n    polygon.ps[1] = Point(1911, 10647.3);\n    polygon.ps[2] = Point(1849, 10647.3);\n    polygon.ps[3] = Point(1849, 10585.3);\n    new ShapeRef(router, polygon, 348);\n\n    // shapeRef349\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(1911, 10982.6);\n    polygon.ps[1] = Point(1911, 11044.6);\n    polygon.ps[2] = Point(1849, 11044.6);\n    polygon.ps[3] = Point(1849, 10982.6);\n    new ShapeRef(router, polygon, 349);\n\n    // shapeRef350\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(18003.5, 8743.22);\n    polygon.ps[1] = Point(18003.5, 8805.22);\n    polygon.ps[2] = Point(17941.5, 8805.22);\n    polygon.ps[3] = Point(17941.5, 8743.22);\n    new ShapeRef(router, polygon, 350);\n\n    // shapeRef351\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(17772.5, 8743.22);\n    polygon.ps[1] = Point(17772.5, 8805.22);\n    polygon.ps[2] = Point(17710.5, 8805.22);\n    polygon.ps[3] = Point(17710.5, 8743.22);\n    new ShapeRef(router, polygon, 351);\n\n    // shapeRef352\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(1581, 183.265);\n    polygon.ps[1] = Point(1581, 245.265);\n    polygon.ps[2] = Point(1519, 245.265);\n    polygon.ps[3] = Point(1519, 183.265);\n    new ShapeRef(router, polygon, 352);\n\n    // shapeRef353\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(4221, 11114.6);\n    polygon.ps[1] = Point(4221, 11176.6);\n    polygon.ps[2] = Point(4159, 11176.6);\n    polygon.ps[3] = Point(4159, 11114.6);\n    new ShapeRef(router, polygon, 353);\n\n    // shapeRef354\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(3726, 11114.6);\n    polygon.ps[1] = Point(3726, 11176.6);\n    polygon.ps[2] = Point(3664, 11176.6);\n    polygon.ps[3] = Point(3664, 11114.6);\n    new ShapeRef(router, polygon, 354);\n\n    // shapeRef355\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8989.03, 8097.89);\n    polygon.ps[1] = Point(8989.03, 8137.89);\n    polygon.ps[2] = Point(8934.03, 8137.89);\n    polygon.ps[3] = Point(8934.03, 8097.89);\n    new ShapeRef(router, polygon, 355);\n\n    // shapeRef356\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(4584, 9083.42);\n    polygon.ps[1] = Point(4584, 9145.42);\n    polygon.ps[2] = Point(4522, 9145.42);\n    polygon.ps[3] = Point(4522, 9083.42);\n    new ShapeRef(router, polygon, 356);\n\n    // shapeRef357\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(4584, 7361.4);\n    polygon.ps[1] = Point(4584, 7423.4);\n    polygon.ps[2] = Point(4522, 7423.4);\n    polygon.ps[3] = Point(4522, 7361.4);\n    new ShapeRef(router, polygon, 357);\n\n    // shapeRef358\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(10013.7, 4874.4);\n    polygon.ps[1] = Point(10013.7, 4936.4);\n    polygon.ps[2] = Point(9951.69, 4936.4);\n    polygon.ps[3] = Point(9951.69, 4874.4);\n    new ShapeRef(router, polygon, 358);\n\n    // shapeRef359\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(10013.7, 5283.67);\n    polygon.ps[1] = Point(10013.7, 5345.67);\n    polygon.ps[2] = Point(9951.69, 5345.67);\n    polygon.ps[3] = Point(9951.69, 5283.67);\n    new ShapeRef(router, polygon, 359);\n\n    // shapeRef360\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(11988.1, 3996.51);\n    polygon.ps[1] = Point(11988.1, 4058.51);\n    polygon.ps[2] = Point(11926.1, 4058.51);\n    polygon.ps[3] = Point(11926.1, 3996.51);\n    new ShapeRef(router, polygon, 360);\n\n    // shapeRef361\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(11658.1, 3765.51);\n    polygon.ps[1] = Point(11658.1, 3827.51);\n    polygon.ps[2] = Point(11596.1, 3827.51);\n    polygon.ps[3] = Point(11596.1, 3765.51);\n    new ShapeRef(router, polygon, 361);\n\n    // shapeRef362\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(11658.1, 4128.51);\n    polygon.ps[1] = Point(11658.1, 4190.51);\n    polygon.ps[2] = Point(11596.1, 4190.51);\n    polygon.ps[3] = Point(11596.1, 4128.51);\n    new ShapeRef(router, polygon, 362);\n\n    // shapeRef363\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(12219.1, 3732.51);\n    polygon.ps[1] = Point(12219.1, 3794.51);\n    polygon.ps[2] = Point(12157.1, 3794.51);\n    polygon.ps[3] = Point(12157.1, 3732.51);\n    new ShapeRef(router, polygon, 363);\n\n    // shapeRef364\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(4584, 12129.3);\n    polygon.ps[1] = Point(4584, 12191.3);\n    polygon.ps[2] = Point(4522, 12191.3);\n    polygon.ps[3] = Point(4522, 12129.3);\n    new ShapeRef(router, polygon, 364);\n\n    // shapeRef365\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(4584, 11147.6);\n    polygon.ps[1] = Point(4584, 11209.6);\n    polygon.ps[2] = Point(4522, 11209.6);\n    polygon.ps[3] = Point(4522, 11147.6);\n    new ShapeRef(router, polygon, 365);\n\n    // shapeRef366\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(4584, 11796.9);\n    polygon.ps[1] = Point(4584, 11858.9);\n    polygon.ps[2] = Point(4522, 11858.9);\n    polygon.ps[3] = Point(4522, 11796.9);\n    new ShapeRef(router, polygon, 366);\n\n    // shapeRef367\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9089.03, 8197.89);\n    polygon.ps[1] = Point(9089.03, 8237.89);\n    polygon.ps[2] = Point(9034.03, 8237.89);\n    polygon.ps[3] = Point(9034.03, 8197.89);\n    new ShapeRef(router, polygon, 367);\n\n    // shapeRef368\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9189.03, 8424.22);\n    polygon.ps[1] = Point(9189.03, 8464.22);\n    polygon.ps[2] = Point(9134.03, 8464.22);\n    polygon.ps[3] = Point(9134.03, 8424.22);\n    new ShapeRef(router, polygon, 368);\n\n    // shapeRef369\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(2967, 9017.42);\n    polygon.ps[1] = Point(2967, 9079.42);\n    polygon.ps[2] = Point(2905, 9079.42);\n    polygon.ps[3] = Point(2905, 9017.42);\n    new ShapeRef(router, polygon, 369);\n\n    // shapeRef370\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(2967, 8548.99);\n    polygon.ps[1] = Point(2967, 8610.99);\n    polygon.ps[2] = Point(2905, 8610.99);\n    polygon.ps[3] = Point(2905, 8548.99);\n    new ShapeRef(router, polygon, 370);\n\n    // shapeRef371\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(2967, 9380.42);\n    polygon.ps[1] = Point(2967, 9442.42);\n    polygon.ps[2] = Point(2905, 9442.42);\n    polygon.ps[3] = Point(2905, 9380.42);\n    new ShapeRef(router, polygon, 371);\n\n    // shapeRef372\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(2967, 8142.79);\n    polygon.ps[1] = Point(2967, 8204.79);\n    polygon.ps[2] = Point(2905, 8204.79);\n    polygon.ps[3] = Point(2905, 8142.79);\n    new ShapeRef(router, polygon, 372);\n\n    // shapeRef373\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(4056, 12195.3);\n    polygon.ps[1] = Point(4056, 12257.3);\n    polygon.ps[2] = Point(3994, 12257.3);\n    polygon.ps[3] = Point(3994, 12195.3);\n    new ShapeRef(router, polygon, 373);\n\n    // shapeRef374\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8689.03, 8297.89);\n    polygon.ps[1] = Point(8689.03, 8337.89);\n    polygon.ps[2] = Point(8634.03, 8337.89);\n    polygon.ps[3] = Point(8634.03, 8297.89);\n    new ShapeRef(router, polygon, 374);\n\n    // shapeRef375\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(1911, 12195.3);\n    polygon.ps[1] = Point(1911, 12257.3);\n    polygon.ps[2] = Point(1849, 12257.3);\n    polygon.ps[3] = Point(1849, 12195.3);\n    new ShapeRef(router, polygon, 375);\n\n    // shapeRef376\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(12021.1, 10651.3);\n    polygon.ps[1] = Point(12021.1, 10713.3);\n    polygon.ps[2] = Point(11959.1, 10713.3);\n    polygon.ps[3] = Point(11959.1, 10651.3);\n    new ShapeRef(router, polygon, 376);\n\n    // shapeRef377\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(12021.1, 11048.6);\n    polygon.ps[1] = Point(12021.1, 11110.6);\n    polygon.ps[2] = Point(11959.1, 11110.6);\n    polygon.ps[3] = Point(11959.1, 11048.6);\n    new ShapeRef(router, polygon, 377);\n\n    // shapeRef378\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(11724.1, 1813.29);\n    polygon.ps[1] = Point(11724.1, 1875.29);\n    polygon.ps[2] = Point(11662.1, 1875.29);\n    polygon.ps[3] = Point(11662.1, 1813.29);\n    new ShapeRef(router, polygon, 378);\n\n    // shapeRef379\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(11889.1, 9677.42);\n    polygon.ps[1] = Point(11889.1, 9739.42);\n    polygon.ps[2] = Point(11827.1, 9739.42);\n    polygon.ps[3] = Point(11827.1, 9677.42);\n    new ShapeRef(router, polygon, 379);\n\n    // shapeRef380\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(11460.1, 9677.42);\n    polygon.ps[1] = Point(11460.1, 9739.42);\n    polygon.ps[2] = Point(11398.1, 9739.42);\n    polygon.ps[3] = Point(11398.1, 9677.42);\n    new ShapeRef(router, polygon, 380);\n\n    // shapeRef381\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(12562.5, 9644.42);\n    polygon.ps[1] = Point(12562.5, 9706.42);\n    polygon.ps[2] = Point(12500.5, 9706.42);\n    polygon.ps[3] = Point(12500.5, 9644.42);\n    new ShapeRef(router, polygon, 381);\n\n    // shapeRef382\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(12318.1, 9347.42);\n    polygon.ps[1] = Point(12318.1, 9409.42);\n    polygon.ps[2] = Point(12256.1, 9409.42);\n    polygon.ps[3] = Point(12256.1, 9347.42);\n    new ShapeRef(router, polygon, 382);\n\n    // shapeRef383\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(12054.1, 7581.79);\n    polygon.ps[1] = Point(12054.1, 7643.79);\n    polygon.ps[2] = Point(11992.1, 7643.79);\n    polygon.ps[3] = Point(11992.1, 7581.79);\n    new ShapeRef(router, polygon, 383);\n\n    // shapeRef384\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(228, 8809.22);\n    polygon.ps[1] = Point(228, 8871.22);\n    polygon.ps[2] = Point(166, 8871.22);\n    polygon.ps[3] = Point(166, 8809.22);\n    new ShapeRef(router, polygon, 384);\n\n    // shapeRef385\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(228, 5316.67);\n    polygon.ps[1] = Point(228, 5378.67);\n    polygon.ps[2] = Point(166, 5378.67);\n    polygon.ps[3] = Point(166, 5316.67);\n    new ShapeRef(router, polygon, 385);\n\n    // shapeRef386\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(492, 5791.9);\n    polygon.ps[1] = Point(492, 5853.9);\n    polygon.ps[2] = Point(430, 5853.9);\n    polygon.ps[3] = Point(430, 5791.9);\n    new ShapeRef(router, polygon, 386);\n\n    // shapeRef387\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(13019.5, 12261.3);\n    polygon.ps[1] = Point(13019.5, 12323.3);\n    polygon.ps[2] = Point(12957.5, 12323.3);\n    polygon.ps[3] = Point(12957.5, 12261.3);\n    new ShapeRef(router, polygon, 387);\n\n    // shapeRef388\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(13573, 12261.3);\n    polygon.ps[1] = Point(13573, 12323.3);\n    polygon.ps[2] = Point(13511, 12323.3);\n    polygon.ps[3] = Point(13511, 12261.3);\n    new ShapeRef(router, polygon, 388);\n\n    // shapeRef389\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(13264, 11951.3);\n    polygon.ps[1] = Point(13264, 12013.3);\n    polygon.ps[2] = Point(13202, 12013.3);\n    polygon.ps[3] = Point(13202, 11951.3);\n    new ShapeRef(router, polygon, 389);\n\n    // shapeRef390\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(13936, 12096.3);\n    polygon.ps[1] = Point(13936, 12158.3);\n    polygon.ps[2] = Point(13874, 12158.3);\n    polygon.ps[3] = Point(13874, 12096.3);\n    new ShapeRef(router, polygon, 390);\n\n    // shapeRef391\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(14827, 8611.22);\n    polygon.ps[1] = Point(14827, 8673.22);\n    polygon.ps[2] = Point(14765, 8673.22);\n    polygon.ps[3] = Point(14765, 8611.22);\n    new ShapeRef(router, polygon, 391);\n\n    // shapeRef392\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(14464, 8611.22);\n    polygon.ps[1] = Point(14464, 8673.22);\n    polygon.ps[2] = Point(14402, 8673.22);\n    polygon.ps[3] = Point(14402, 8611.22);\n    new ShapeRef(router, polygon, 392);\n\n    // shapeRef393\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(14827, 9182.42);\n    polygon.ps[1] = Point(14827, 9244.42);\n    polygon.ps[2] = Point(14765, 9244.42);\n    polygon.ps[3] = Point(14765, 9182.42);\n    new ShapeRef(router, polygon, 393);\n\n    // shapeRef394\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(15899.6, 9116.42);\n    polygon.ps[1] = Point(15899.6, 9178.42);\n    polygon.ps[2] = Point(15837.6, 9178.42);\n    polygon.ps[3] = Point(15837.6, 9116.42);\n    new ShapeRef(router, polygon, 394);\n\n    // shapeRef395\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(16295.6, 9116.42);\n    polygon.ps[1] = Point(16295.6, 9178.42);\n    polygon.ps[2] = Point(16233.6, 9178.42);\n    polygon.ps[3] = Point(16233.6, 9116.42);\n    new ShapeRef(router, polygon, 395);\n\n    // shapeRef396\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(16130.6, 9978.02);\n    polygon.ps[1] = Point(16130.6, 10040);\n    polygon.ps[2] = Point(16068.6, 10040);\n    polygon.ps[3] = Point(16068.6, 9978.02);\n    new ShapeRef(router, polygon, 396);\n\n    // shapeRef397\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(16493.6, 9978.02);\n    polygon.ps[1] = Point(16493.6, 10040);\n    polygon.ps[2] = Point(16431.6, 10040);\n    polygon.ps[3] = Point(16431.6, 9978.02);\n    new ShapeRef(router, polygon, 397);\n\n    // shapeRef398\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(16753.8, 10275);\n    polygon.ps[1] = Point(16753.8, 10337);\n    polygon.ps[2] = Point(16691.8, 10337);\n    polygon.ps[3] = Point(16691.8, 10275);\n    new ShapeRef(router, polygon, 398);\n\n    // shapeRef399\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(17871.5, 7031.4);\n    polygon.ps[1] = Point(17871.5, 7093.4);\n    polygon.ps[2] = Point(17809.5, 7093.4);\n    polygon.ps[3] = Point(17809.5, 7031.4);\n    new ShapeRef(router, polygon, 399);\n\n    // shapeRef400\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(18036.5, 7911.79);\n    polygon.ps[1] = Point(18036.5, 7973.79);\n    polygon.ps[2] = Point(17974.5, 7973.79);\n    polygon.ps[3] = Point(17974.5, 7911.79);\n    new ShapeRef(router, polygon, 400);\n\n    // shapeRef401\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(18234.5, 8743.22);\n    polygon.ps[1] = Point(18234.5, 8805.22);\n    polygon.ps[2] = Point(18172.5, 8805.22);\n    polygon.ps[3] = Point(18172.5, 8743.22);\n    new ShapeRef(router, polygon, 401);\n\n    // shapeRef402\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(11724.1, 2449.29);\n    polygon.ps[1] = Point(11724.1, 2511.29);\n    polygon.ps[2] = Point(11662.1, 2511.29);\n    polygon.ps[3] = Point(11662.1, 2449.29);\n    new ShapeRef(router, polygon, 402);\n\n    // shapeRef403\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(16361.6, 11015.6);\n    polygon.ps[1] = Point(16361.6, 11077.6);\n    polygon.ps[2] = Point(16299.6, 11077.6);\n    polygon.ps[3] = Point(16299.6, 11015.6);\n    new ShapeRef(router, polygon, 403);\n\n    // shapeRef404\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(16361.6, 10473);\n    polygon.ps[1] = Point(16361.6, 10535);\n    polygon.ps[2] = Point(16299.6, 10535);\n    polygon.ps[3] = Point(16299.6, 10473);\n    new ShapeRef(router, polygon, 404);\n\n    // shapeRef405\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(16361.6, 9644.42);\n    polygon.ps[1] = Point(16361.6, 9706.42);\n    polygon.ps[2] = Point(16299.6, 9706.42);\n    polygon.ps[3] = Point(16299.6, 9644.42);\n    new ShapeRef(router, polygon, 405);\n\n    // shapeRef406\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(11104.2, 4643.4);\n    polygon.ps[1] = Point(11104.2, 4705.4);\n    polygon.ps[2] = Point(11042.2, 4705.4);\n    polygon.ps[3] = Point(11042.2, 4643.4);\n    new ShapeRef(router, polygon, 406);\n\n    // shapeRef407\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(5013, 4907.4);\n    polygon.ps[1] = Point(5013, 4969.4);\n    polygon.ps[2] = Point(4951, 4969.4);\n    polygon.ps[3] = Point(4951, 4907.4);\n    new ShapeRef(router, polygon, 407);\n\n    // shapeRef408\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(3330, 6790.21);\n    polygon.ps[1] = Point(3330, 6852.21);\n    polygon.ps[2] = Point(3268, 6852.21);\n    polygon.ps[3] = Point(3268, 6790.21);\n    new ShapeRef(router, polygon, 408);\n\n    // shapeRef409\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(3990, 5626.9);\n    polygon.ps[1] = Point(3990, 5688.9);\n    polygon.ps[2] = Point(3928, 5688.9);\n    polygon.ps[3] = Point(3928, 5626.9);\n    new ShapeRef(router, polygon, 409);\n\n    // shapeRef410\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(3165, 5626.9);\n    polygon.ps[1] = Point(3165, 5688.9);\n    polygon.ps[2] = Point(3103, 5688.9);\n    polygon.ps[3] = Point(3103, 5626.9);\n    new ShapeRef(router, polygon, 410);\n\n    // shapeRef411\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(3660, 5626.9);\n    polygon.ps[1] = Point(3660, 5688.9);\n    polygon.ps[2] = Point(3598, 5688.9);\n    polygon.ps[3] = Point(3598, 5626.9);\n    new ShapeRef(router, polygon, 411);\n\n    // shapeRef412\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(5659.1, 7581.79);\n    polygon.ps[1] = Point(5659.1, 7643.79);\n    polygon.ps[2] = Point(5597.1, 7643.79);\n    polygon.ps[3] = Point(5597.1, 7581.79);\n    new ShapeRef(router, polygon, 412);\n\n    // shapeRef413\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(5659.1, 6965.4);\n    polygon.ps[1] = Point(5659.1, 7027.4);\n    polygon.ps[2] = Point(5597.1, 7027.4);\n    polygon.ps[3] = Point(5597.1, 6965.4);\n    new ShapeRef(router, polygon, 413);\n\n    // shapeRef414\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(1911, 6153.51);\n    polygon.ps[1] = Point(1911, 6215.51);\n    polygon.ps[2] = Point(1849, 6215.51);\n    polygon.ps[3] = Point(1849, 6153.51);\n    new ShapeRef(router, polygon, 414);\n\n    // shapeRef415\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(1911, 7196.4);\n    polygon.ps[1] = Point(1911, 7258.4);\n    polygon.ps[2] = Point(1849, 7258.4);\n    polygon.ps[3] = Point(1849, 7196.4);\n    new ShapeRef(router, polygon, 415);\n\n    // shapeRef416\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(12285.1, 2449.29);\n    polygon.ps[1] = Point(12285.1, 2511.29);\n    polygon.ps[2] = Point(12223.1, 2511.29);\n    polygon.ps[3] = Point(12223.1, 2449.29);\n    new ShapeRef(router, polygon, 416);\n\n    // shapeRef417\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(11724.1, 2185.29);\n    polygon.ps[1] = Point(11724.1, 2247.29);\n    polygon.ps[2] = Point(11662.1, 2247.29);\n    polygon.ps[3] = Point(11662.1, 2185.29);\n    new ShapeRef(router, polygon, 417);\n\n    // shapeRef418\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(17508.5, 3600.51);\n    polygon.ps[1] = Point(17508.5, 3662.51);\n    polygon.ps[2] = Point(17446.5, 3662.51);\n    polygon.ps[3] = Point(17446.5, 3600.51);\n    new ShapeRef(router, polygon, 418);\n\n    // shapeRef419\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(12186.1, 2185.29);\n    polygon.ps[1] = Point(12186.1, 2247.29);\n    polygon.ps[2] = Point(12124.1, 2247.29);\n    polygon.ps[3] = Point(12124.1, 2185.29);\n    new ShapeRef(router, polygon, 419);\n\n    // shapeRef420\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(12854.5, 1846.29);\n    polygon.ps[1] = Point(12854.5, 1908.29);\n    polygon.ps[2] = Point(12792.5, 1908.29);\n    polygon.ps[3] = Point(12792.5, 1846.29);\n    new ShapeRef(router, polygon, 420);\n\n    // shapeRef421\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(13507, 2185.29);\n    polygon.ps[1] = Point(13507, 2247.29);\n    polygon.ps[2] = Point(13445, 2247.29);\n    polygon.ps[3] = Point(13445, 2185.29);\n    new ShapeRef(router, polygon, 421);\n\n    // shapeRef422\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(12854.5, 2185.29);\n    polygon.ps[1] = Point(12854.5, 2247.29);\n    polygon.ps[2] = Point(12792.5, 2247.29);\n    polygon.ps[3] = Point(12792.5, 2185.29);\n    new ShapeRef(router, polygon, 422);\n\n    // shapeRef423\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(12854.5, 2515.29);\n    polygon.ps[1] = Point(12854.5, 2577.29);\n    polygon.ps[2] = Point(12792.5, 2577.29);\n    polygon.ps[3] = Point(12792.5, 2515.29);\n    new ShapeRef(router, polygon, 423);\n\n    // shapeRef424\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(12854.5, 2944.29);\n    polygon.ps[1] = Point(12854.5, 3006.29);\n    polygon.ps[2] = Point(12792.5, 3006.29);\n    polygon.ps[3] = Point(12792.5, 2944.29);\n    new ShapeRef(router, polygon, 424);\n\n    // shapeRef425\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(11658.1, 6516.51);\n    polygon.ps[1] = Point(11658.1, 6578.51);\n    polygon.ps[2] = Point(11596.1, 6578.51);\n    polygon.ps[3] = Point(11596.1, 6516.51);\n    new ShapeRef(router, polygon, 425);\n\n    // shapeRef426\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(17083.8, 6186.51);\n    polygon.ps[1] = Point(17083.8, 6248.51);\n    polygon.ps[2] = Point(17021.8, 6248.51);\n    polygon.ps[3] = Point(17021.8, 6186.51);\n    new ShapeRef(router, polygon, 426);\n\n    // shapeRef427\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(17083.8, 6516.51);\n    polygon.ps[1] = Point(17083.8, 6578.51);\n    polygon.ps[2] = Point(17021.8, 6578.51);\n    polygon.ps[3] = Point(17021.8, 6516.51);\n    new ShapeRef(router, polygon, 427);\n\n    // shapeRef428\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8589.03, 8797.89);\n    polygon.ps[1] = Point(8589.03, 8837.89);\n    polygon.ps[2] = Point(8534.03, 8837.89);\n    polygon.ps[3] = Point(8534.03, 8797.89);\n    new ShapeRef(router, polygon, 428);\n\n    // shapeRef429\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8689.03, 8797.89);\n    polygon.ps[1] = Point(8689.03, 8837.89);\n    polygon.ps[2] = Point(8634.03, 8837.89);\n    polygon.ps[3] = Point(8634.03, 8797.89);\n    new ShapeRef(router, polygon, 429);\n\n    // shapeRef430\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(1911, 12017.3);\n    polygon.ps[1] = Point(1911, 12079.3);\n    polygon.ps[2] = Point(1849, 12079.3);\n    polygon.ps[3] = Point(1849, 12017.3);\n    new ShapeRef(router, polygon, 430);\n\n    // shapeRef431\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(1911, 11549.7);\n    polygon.ps[1] = Point(1911, 11611.7);\n    polygon.ps[2] = Point(1849, 11611.7);\n    polygon.ps[3] = Point(1849, 11549.7);\n    new ShapeRef(router, polygon, 431);\n\n    // shapeRef432\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(1350, 10585.3);\n    polygon.ps[1] = Point(1350, 10647.3);\n    polygon.ps[2] = Point(1288, 10647.3);\n    polygon.ps[3] = Point(1288, 10585.3);\n    new ShapeRef(router, polygon, 432);\n\n    // shapeRef433\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(1350, 10275);\n    polygon.ps[1] = Point(1350, 10337);\n    polygon.ps[2] = Point(1288, 10337);\n    polygon.ps[3] = Point(1288, 10275);\n    new ShapeRef(router, polygon, 433);\n\n    // shapeRef434\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(1350, 9945.02);\n    polygon.ps[1] = Point(1350, 10007);\n    polygon.ps[2] = Point(1288, 10007);\n    polygon.ps[3] = Point(1288, 9945.02);\n    new ShapeRef(router, polygon, 434);\n\n    // shapeRef435\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(1350, 9479.42);\n    polygon.ps[1] = Point(1350, 9541.42);\n    polygon.ps[2] = Point(1288, 9541.42);\n    polygon.ps[3] = Point(1288, 9479.42);\n    new ShapeRef(router, polygon, 435);\n\n    // shapeRef436\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(1350, 9116.42);\n    polygon.ps[1] = Point(1350, 9178.42);\n    polygon.ps[2] = Point(1288, 9178.42);\n    polygon.ps[3] = Point(1288, 9116.42);\n    new ShapeRef(router, polygon, 436);\n\n    // shapeRef437\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(1911, 10275);\n    polygon.ps[1] = Point(1911, 10337);\n    polygon.ps[2] = Point(1849, 10337);\n    polygon.ps[3] = Point(1849, 10275);\n    new ShapeRef(router, polygon, 437);\n\n    // shapeRef438\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(1911, 9945.02);\n    polygon.ps[1] = Point(1911, 10007);\n    polygon.ps[2] = Point(1849, 10007);\n    polygon.ps[3] = Point(1849, 9945.02);\n    new ShapeRef(router, polygon, 438);\n\n    // shapeRef439\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(1911, 9479.42);\n    polygon.ps[1] = Point(1911, 9541.42);\n    polygon.ps[2] = Point(1849, 9541.42);\n    polygon.ps[3] = Point(1849, 9479.42);\n    new ShapeRef(router, polygon, 439);\n\n    // shapeRef440\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(1911, 9116.42);\n    polygon.ps[1] = Point(1911, 9178.42);\n    polygon.ps[2] = Point(1849, 9178.42);\n    polygon.ps[3] = Point(1849, 9116.42);\n    new ShapeRef(router, polygon, 440);\n\n    // shapeRef441\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8789.03, 8897.89);\n    polygon.ps[1] = Point(8789.03, 8937.89);\n    polygon.ps[2] = Point(8734.03, 8937.89);\n    polygon.ps[3] = Point(8734.03, 8897.89);\n    new ShapeRef(router, polygon, 441);\n\n    // shapeRef442\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8889.03, 8897.89);\n    polygon.ps[1] = Point(8889.03, 8937.89);\n    polygon.ps[2] = Point(8834.03, 8937.89);\n    polygon.ps[3] = Point(8834.03, 8897.89);\n    new ShapeRef(router, polygon, 442);\n\n    // shapeRef443\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8989.03, 8897.89);\n    polygon.ps[1] = Point(8989.03, 8937.89);\n    polygon.ps[2] = Point(8934.03, 8937.89);\n    polygon.ps[3] = Point(8934.03, 8897.89);\n    new ShapeRef(router, polygon, 443);\n\n    // shapeRef444\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9089.03, 8897.89);\n    polygon.ps[1] = Point(9089.03, 8937.89);\n    polygon.ps[2] = Point(9034.03, 8937.89);\n    polygon.ps[3] = Point(9034.03, 8897.89);\n    new ShapeRef(router, polygon, 444);\n\n    // shapeRef445\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9189.03, 8897.89);\n    polygon.ps[1] = Point(9189.03, 8937.89);\n    polygon.ps[2] = Point(9134.03, 8937.89);\n    polygon.ps[3] = Point(9134.03, 8897.89);\n    new ShapeRef(router, polygon, 445);\n\n    // shapeRef446\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(2043, 2779.29);\n    polygon.ps[1] = Point(2043, 2841.29);\n    polygon.ps[2] = Point(1981, 2841.29);\n    polygon.ps[3] = Point(1981, 2779.29);\n    new ShapeRef(router, polygon, 446);\n\n    // shapeRef447\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(4980, 4029.51);\n    polygon.ps[1] = Point(4980, 4091.51);\n    polygon.ps[2] = Point(4918, 4091.51);\n    polygon.ps[3] = Point(4918, 4029.51);\n    new ShapeRef(router, polygon, 447);\n\n    // shapeRef448\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(1779, 3307.29);\n    polygon.ps[1] = Point(1779, 3369.29);\n    polygon.ps[2] = Point(1717, 3369.29);\n    polygon.ps[3] = Point(1717, 3307.29);\n    new ShapeRef(router, polygon, 448);\n\n    // shapeRef449\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(1053, 3435.51);\n    polygon.ps[1] = Point(1053, 3497.51);\n    polygon.ps[2] = Point(991, 3497.51);\n    polygon.ps[3] = Point(991, 3435.51);\n    new ShapeRef(router, polygon, 449);\n\n    // shapeRef450\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(1449, 3567.51);\n    polygon.ps[1] = Point(1449, 3629.51);\n    polygon.ps[2] = Point(1387, 3629.51);\n    polygon.ps[3] = Point(1387, 3567.51);\n    new ShapeRef(router, polygon, 450);\n\n    // shapeRef451\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(2307, 3897.51);\n    polygon.ps[1] = Point(2307, 3959.51);\n    polygon.ps[2] = Point(2245, 3959.51);\n    polygon.ps[3] = Point(2245, 3897.51);\n    new ShapeRef(router, polygon, 451);\n\n    // shapeRef452\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(327, 3666.51);\n    polygon.ps[1] = Point(327, 3728.51);\n    polygon.ps[2] = Point(265, 3728.51);\n    polygon.ps[3] = Point(265, 3666.51);\n    new ShapeRef(router, polygon, 452);\n\n    // shapeRef453\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(558, 3666.51);\n    polygon.ps[1] = Point(558, 3728.51);\n    polygon.ps[2] = Point(496, 3728.51);\n    polygon.ps[3] = Point(496, 3666.51);\n    new ShapeRef(router, polygon, 453);\n\n    // shapeRef454\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(888, 3666.51);\n    polygon.ps[1] = Point(888, 3728.51);\n    polygon.ps[2] = Point(826, 3728.51);\n    polygon.ps[3] = Point(826, 3666.51);\n    new ShapeRef(router, polygon, 454);\n\n    // shapeRef455\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(1284, 3666.51);\n    polygon.ps[1] = Point(1284, 3728.51);\n    polygon.ps[2] = Point(1222, 3728.51);\n    polygon.ps[3] = Point(1222, 3666.51);\n    new ShapeRef(router, polygon, 455);\n\n    // shapeRef456\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(1713, 3666.51);\n    polygon.ps[1] = Point(1713, 3728.51);\n    polygon.ps[2] = Point(1651, 3728.51);\n    polygon.ps[3] = Point(1651, 3666.51);\n    new ShapeRef(router, polygon, 456);\n\n    // shapeRef457\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(2043, 3666.51);\n    polygon.ps[1] = Point(2043, 3728.51);\n    polygon.ps[2] = Point(1981, 3728.51);\n    polygon.ps[3] = Point(1981, 3666.51);\n    new ShapeRef(router, polygon, 457);\n\n    // shapeRef458\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(228, 3109.29);\n    polygon.ps[1] = Point(228, 3171.29);\n    polygon.ps[2] = Point(166, 3171.29);\n    polygon.ps[3] = Point(166, 3109.29);\n    new ShapeRef(router, polygon, 458);\n\n    // shapeRef459\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(1119, 2614.29);\n    polygon.ps[1] = Point(1119, 2676.29);\n    polygon.ps[2] = Point(1057, 2676.29);\n    polygon.ps[3] = Point(1057, 2614.29);\n    new ShapeRef(router, polygon, 459);\n\n    // shapeRef460\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(459, 2614.29);\n    polygon.ps[1] = Point(459, 2676.29);\n    polygon.ps[2] = Point(397, 2676.29);\n    polygon.ps[3] = Point(397, 2614.29);\n    new ShapeRef(router, polygon, 460);\n\n    // shapeRef461\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(723, 1813.29);\n    polygon.ps[1] = Point(723, 1875.29);\n    polygon.ps[2] = Point(661, 1875.29);\n    polygon.ps[3] = Point(661, 1813.29);\n    new ShapeRef(router, polygon, 461);\n\n    // shapeRef462\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(723, 2614.29);\n    polygon.ps[1] = Point(723, 2676.29);\n    polygon.ps[2] = Point(661, 2676.29);\n    polygon.ps[3] = Point(661, 2614.29);\n    new ShapeRef(router, polygon, 462);\n\n    // shapeRef463\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(723, 2911.29);\n    polygon.ps[1] = Point(723, 2973.29);\n    polygon.ps[2] = Point(661, 2973.29);\n    polygon.ps[3] = Point(661, 2911.29);\n    new ShapeRef(router, polygon, 463);\n\n    // shapeRef464\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(459, 3109.29);\n    polygon.ps[1] = Point(459, 3171.29);\n    polygon.ps[2] = Point(397, 3171.29);\n    polygon.ps[3] = Point(397, 3109.29);\n    new ShapeRef(router, polygon, 464);\n\n    // shapeRef465\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(723, 3241.29);\n    polygon.ps[1] = Point(723, 3303.29);\n    polygon.ps[2] = Point(661, 3303.29);\n    polygon.ps[3] = Point(661, 3241.29);\n    new ShapeRef(router, polygon, 465);\n\n    // shapeRef466\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(1086, 3109.29);\n    polygon.ps[1] = Point(1086, 3171.29);\n    polygon.ps[2] = Point(1024, 3171.29);\n    polygon.ps[3] = Point(1024, 3109.29);\n    new ShapeRef(router, polygon, 466);\n\n    // shapeRef467\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(2043, 3109.29);\n    polygon.ps[1] = Point(2043, 3171.29);\n    polygon.ps[2] = Point(1981, 3171.29);\n    polygon.ps[3] = Point(1981, 3109.29);\n    new ShapeRef(router, polygon, 467);\n\n    // shapeRef468\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(2637, 3109.29);\n    polygon.ps[1] = Point(2637, 3171.29);\n    polygon.ps[2] = Point(2575, 3171.29);\n    polygon.ps[3] = Point(2575, 3109.29);\n    new ShapeRef(router, polygon, 468);\n\n    // shapeRef469\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(987, 4297.11);\n    polygon.ps[1] = Point(987, 4359.11);\n    polygon.ps[2] = Point(925, 4359.11);\n    polygon.ps[3] = Point(925, 4297.11);\n    new ShapeRef(router, polygon, 469);\n\n    // shapeRef470\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(1482, 4297.11);\n    polygon.ps[1] = Point(1482, 4359.11);\n    polygon.ps[2] = Point(1420, 4359.11);\n    polygon.ps[3] = Point(1420, 4297.11);\n    new ShapeRef(router, polygon, 470);\n\n    // shapeRef471\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(6055.1, 3666.51);\n    polygon.ps[1] = Point(6055.1, 3728.51);\n    polygon.ps[2] = Point(5993.1, 3728.51);\n    polygon.ps[3] = Point(5993.1, 3666.51);\n    new ShapeRef(router, polygon, 471);\n\n    // shapeRef472\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(5560.1, 3666.51);\n    polygon.ps[1] = Point(5560.1, 3728.51);\n    polygon.ps[2] = Point(5498.1, 3728.51);\n    polygon.ps[3] = Point(5498.1, 3666.51);\n    new ShapeRef(router, polygon, 472);\n\n    // shapeRef473\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(5178, 3666.51);\n    polygon.ps[1] = Point(5178, 3728.51);\n    polygon.ps[2] = Point(5116, 3728.51);\n    polygon.ps[3] = Point(5116, 3666.51);\n    new ShapeRef(router, polygon, 473);\n\n    // shapeRef474\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(4914, 3666.51);\n    polygon.ps[1] = Point(4914, 3728.51);\n    polygon.ps[2] = Point(4852, 3728.51);\n    polygon.ps[3] = Point(4852, 3666.51);\n    new ShapeRef(router, polygon, 474);\n\n    // shapeRef475\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(1779, 2515.29);\n    polygon.ps[1] = Point(1779, 2577.29);\n    polygon.ps[2] = Point(1717, 2577.29);\n    polygon.ps[3] = Point(1717, 2515.29);\n    new ShapeRef(router, polygon, 475);\n\n    // shapeRef476\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(2208, 2515.29);\n    polygon.ps[1] = Point(2208, 2577.29);\n    polygon.ps[2] = Point(2146, 2577.29);\n    polygon.ps[3] = Point(2146, 2515.29);\n    new ShapeRef(router, polygon, 476);\n\n    // shapeRef477\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(2538, 2515.29);\n    polygon.ps[1] = Point(2538, 2577.29);\n    polygon.ps[2] = Point(2476, 2577.29);\n    polygon.ps[3] = Point(2476, 2515.29);\n    new ShapeRef(router, polygon, 477);\n\n    // shapeRef478\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(3000, 2515.29);\n    polygon.ps[1] = Point(3000, 2577.29);\n    polygon.ps[2] = Point(2938, 2577.29);\n    polygon.ps[3] = Point(2938, 2515.29);\n    new ShapeRef(router, polygon, 478);\n\n    // shapeRef479\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(3858, 2284.29);\n    polygon.ps[1] = Point(3858, 2346.29);\n    polygon.ps[2] = Point(3796, 2346.29);\n    polygon.ps[3] = Point(3796, 2284.29);\n    new ShapeRef(router, polygon, 479);\n\n    // shapeRef480\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(7045.1, 3798.51);\n    polygon.ps[1] = Point(7045.1, 3860.51);\n    polygon.ps[2] = Point(6983.1, 3860.51);\n    polygon.ps[3] = Point(6983.1, 3798.51);\n    new ShapeRef(router, polygon, 480);\n\n    // shapeRef481\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(6451.1, 2482.29);\n    polygon.ps[1] = Point(6451.1, 2544.29);\n    polygon.ps[2] = Point(6389.1, 2544.29);\n    polygon.ps[3] = Point(6389.1, 2482.29);\n    new ShapeRef(router, polygon, 481);\n\n    // shapeRef482\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(6847.1, 2482.29);\n    polygon.ps[1] = Point(6847.1, 2544.29);\n    polygon.ps[2] = Point(6785.1, 2544.29);\n    polygon.ps[3] = Point(6785.1, 2482.29);\n    new ShapeRef(router, polygon, 482);\n\n    // shapeRef483\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(6451.1, 2746.29);\n    polygon.ps[1] = Point(6451.1, 2808.29);\n    polygon.ps[2] = Point(6389.1, 2808.29);\n    polygon.ps[3] = Point(6389.1, 2746.29);\n    new ShapeRef(router, polygon, 483);\n\n    // shapeRef484\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(7375.1, 3043.29);\n    polygon.ps[1] = Point(7375.1, 3105.29);\n    polygon.ps[2] = Point(7313.1, 3105.29);\n    polygon.ps[3] = Point(7313.1, 3043.29);\n    new ShapeRef(router, polygon, 484);\n\n    // shapeRef485\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8060.29, 3043.29);\n    polygon.ps[1] = Point(8060.29, 3105.29);\n    polygon.ps[2] = Point(7998.29, 3105.29);\n    polygon.ps[3] = Point(7998.29, 3043.29);\n    new ShapeRef(router, polygon, 485);\n\n    // shapeRef486\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(6286.1, 3043.29);\n    polygon.ps[1] = Point(6286.1, 3105.29);\n    polygon.ps[2] = Point(6224.1, 3105.29);\n    polygon.ps[3] = Point(6224.1, 3043.29);\n    new ShapeRef(router, polygon, 486);\n\n    // shapeRef487\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(5857.1, 3043.29);\n    polygon.ps[1] = Point(5857.1, 3105.29);\n    polygon.ps[2] = Point(5795.1, 3105.29);\n    polygon.ps[3] = Point(5795.1, 3043.29);\n    new ShapeRef(router, polygon, 487);\n\n    // shapeRef488\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(7375.1, 2746.29);\n    polygon.ps[1] = Point(7375.1, 2808.29);\n    polygon.ps[2] = Point(7313.1, 2808.29);\n    polygon.ps[3] = Point(7313.1, 2746.29);\n    new ShapeRef(router, polygon, 488);\n\n    // shapeRef489\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(7375.1, 2482.29);\n    polygon.ps[1] = Point(7375.1, 2544.29);\n    polygon.ps[2] = Point(7313.1, 2544.29);\n    polygon.ps[3] = Point(7313.1, 2482.29);\n    new ShapeRef(router, polygon, 489);\n\n    // shapeRef490\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(7375.1, 1945.29);\n    polygon.ps[1] = Point(7375.1, 2007.29);\n    polygon.ps[2] = Point(7313.1, 2007.29);\n    polygon.ps[3] = Point(7313.1, 1945.29);\n    new ShapeRef(router, polygon, 490);\n\n    // shapeRef491\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(7375.1, 1579.29);\n    polygon.ps[1] = Point(7375.1, 1641.29);\n    polygon.ps[2] = Point(7313.1, 1641.29);\n    polygon.ps[3] = Point(7313.1, 1579.29);\n    new ShapeRef(router, polygon, 491);\n\n    // shapeRef492\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(7375.1, 1249.29);\n    polygon.ps[1] = Point(7375.1, 1311.29);\n    polygon.ps[2] = Point(7313.1, 1311.29);\n    polygon.ps[3] = Point(7313.1, 1249.29);\n    new ShapeRef(router, polygon, 492);\n\n    // shapeRef493\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(822, 216.265);\n    polygon.ps[1] = Point(822, 278.265);\n    polygon.ps[2] = Point(760, 278.265);\n    polygon.ps[3] = Point(760, 216.265);\n    new ShapeRef(router, polygon, 493);\n\n    // shapeRef494\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(822, 84.2652);\n    polygon.ps[1] = Point(822, 146.265);\n    polygon.ps[2] = Point(760, 146.265);\n    polygon.ps[3] = Point(760, 84.2652);\n    new ShapeRef(router, polygon, 494);\n\n    // shapeRef495\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(1218, 183.265);\n    polygon.ps[1] = Point(1218, 245.265);\n    polygon.ps[2] = Point(1156, 245.265);\n    polygon.ps[3] = Point(1156, 183.265);\n    new ShapeRef(router, polygon, 495);\n\n    // shapeRef496\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(1977, 183.265);\n    polygon.ps[1] = Point(1977, 245.265);\n    polygon.ps[2] = Point(1915, 245.265);\n    polygon.ps[3] = Point(1915, 183.265);\n    new ShapeRef(router, polygon, 496);\n\n    // shapeRef497\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(2439, 183.265);\n    polygon.ps[1] = Point(2439, 245.265);\n    polygon.ps[2] = Point(2377, 245.265);\n    polygon.ps[3] = Point(2377, 183.265);\n    new ShapeRef(router, polygon, 497);\n\n    // shapeRef498\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(2835, 216.265);\n    polygon.ps[1] = Point(2835, 278.265);\n    polygon.ps[2] = Point(2773, 278.265);\n    polygon.ps[3] = Point(2773, 216.265);\n    new ShapeRef(router, polygon, 498);\n\n    // shapeRef499\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(2835, 84.2652);\n    polygon.ps[1] = Point(2835, 146.265);\n    polygon.ps[2] = Point(2773, 146.265);\n    polygon.ps[3] = Point(2773, 84.2652);\n    new ShapeRef(router, polygon, 499);\n\n    // shapeRef500\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(3363, 183.265);\n    polygon.ps[1] = Point(3363, 245.265);\n    polygon.ps[2] = Point(3301, 245.265);\n    polygon.ps[3] = Point(3301, 183.265);\n    new ShapeRef(router, polygon, 500);\n\n    // shapeRef501\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(3792, 183.265);\n    polygon.ps[1] = Point(3792, 245.265);\n    polygon.ps[2] = Point(3730, 245.265);\n    polygon.ps[3] = Point(3730, 183.265);\n    new ShapeRef(router, polygon, 501);\n\n    // shapeRef502\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(4518, 183.265);\n    polygon.ps[1] = Point(4518, 245.265);\n    polygon.ps[2] = Point(4456, 245.265);\n    polygon.ps[3] = Point(4456, 183.265);\n    new ShapeRef(router, polygon, 502);\n\n    // shapeRef503\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(4914, 183.265);\n    polygon.ps[1] = Point(4914, 245.265);\n    polygon.ps[2] = Point(4852, 245.265);\n    polygon.ps[3] = Point(4852, 183.265);\n    new ShapeRef(router, polygon, 503);\n\n    // shapeRef504\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(5211, 183.265);\n    polygon.ps[1] = Point(5211, 245.265);\n    polygon.ps[2] = Point(5149, 245.265);\n    polygon.ps[3] = Point(5149, 183.265);\n    new ShapeRef(router, polygon, 504);\n\n    // shapeRef505\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(5659.1, 183.265);\n    polygon.ps[1] = Point(5659.1, 245.265);\n    polygon.ps[2] = Point(5597.1, 245.265);\n    polygon.ps[3] = Point(5597.1, 183.265);\n    new ShapeRef(router, polygon, 505);\n\n    // shapeRef506\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(6616.1, 183.265);\n    polygon.ps[1] = Point(6616.1, 245.265);\n    polygon.ps[2] = Point(6554.1, 245.265);\n    polygon.ps[3] = Point(6554.1, 183.265);\n    new ShapeRef(router, polygon, 506);\n\n    // shapeRef507\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(6913.1, 183.265);\n    polygon.ps[1] = Point(6913.1, 245.265);\n    polygon.ps[2] = Point(6851.1, 245.265);\n    polygon.ps[3] = Point(6851.1, 183.265);\n    new ShapeRef(router, polygon, 507);\n\n    // shapeRef508\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(7309.1, 183.265);\n    polygon.ps[1] = Point(7309.1, 245.265);\n    polygon.ps[2] = Point(7247.1, 245.265);\n    polygon.ps[3] = Point(7247.1, 183.265);\n    new ShapeRef(router, polygon, 508);\n\n    // shapeRef509\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(7796.29, 183.265);\n    polygon.ps[1] = Point(7796.29, 245.265);\n    polygon.ps[2] = Point(7734.29, 245.265);\n    polygon.ps[3] = Point(7734.29, 183.265);\n    new ShapeRef(router, polygon, 509);\n\n    // shapeRef510\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(5343, 9248.42);\n    polygon.ps[1] = Point(5343, 9310.42);\n    polygon.ps[2] = Point(5281, 9310.42);\n    polygon.ps[3] = Point(5281, 9248.42);\n    new ShapeRef(router, polygon, 510);\n\n    // shapeRef511\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(5343, 9677.42);\n    polygon.ps[1] = Point(5343, 9739.42);\n    polygon.ps[2] = Point(5281, 9739.42);\n    polygon.ps[3] = Point(5281, 9677.42);\n    new ShapeRef(router, polygon, 511);\n\n    // shapeRef512\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(5824.1, 9248.42);\n    polygon.ps[1] = Point(5824.1, 9310.42);\n    polygon.ps[2] = Point(5762.1, 9310.42);\n    polygon.ps[3] = Point(5762.1, 9248.42);\n    new ShapeRef(router, polygon, 512);\n\n    // shapeRef513\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(5824.1, 9677.42);\n    polygon.ps[1] = Point(5824.1, 9739.42);\n    polygon.ps[2] = Point(5762.1, 9739.42);\n    polygon.ps[3] = Point(5762.1, 9677.42);\n    new ShapeRef(router, polygon, 513);\n\n    // shapeRef514\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(5626.1, 10407);\n    polygon.ps[1] = Point(5626.1, 10469);\n    polygon.ps[2] = Point(5564.1, 10469);\n    polygon.ps[3] = Point(5564.1, 10407);\n    new ShapeRef(router, polygon, 514);\n\n    // shapeRef515\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(5626.1, 10143);\n    polygon.ps[1] = Point(5626.1, 10205);\n    polygon.ps[2] = Point(5564.1, 10205);\n    polygon.ps[3] = Point(5564.1, 10143);\n    new ShapeRef(router, polygon, 515);\n\n    // shapeRef516\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(5145, 10143);\n    polygon.ps[1] = Point(5145, 10205);\n    polygon.ps[2] = Point(5083, 10205);\n    polygon.ps[3] = Point(5083, 10143);\n    new ShapeRef(router, polygon, 516);\n\n    // shapeRef517\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(5145, 10407);\n    polygon.ps[1] = Point(5145, 10469);\n    polygon.ps[2] = Point(5083, 10469);\n    polygon.ps[3] = Point(5083, 10407);\n    new ShapeRef(router, polygon, 517);\n\n    // shapeRef518\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(5145, 10684.3);\n    polygon.ps[1] = Point(5145, 10746.3);\n    polygon.ps[2] = Point(5083, 10746.3);\n    polygon.ps[3] = Point(5083, 10684.3);\n    new ShapeRef(router, polygon, 518);\n\n    // shapeRef519\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(7796.29, 11984.3);\n    polygon.ps[1] = Point(7796.29, 12046.3);\n    polygon.ps[2] = Point(7734.29, 12046.3);\n    polygon.ps[3] = Point(7734.29, 11984.3);\n    new ShapeRef(router, polygon, 519);\n\n    // shapeRef520\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8225.29, 11984.3);\n    polygon.ps[1] = Point(8225.29, 12046.3);\n    polygon.ps[2] = Point(8163.29, 12046.3);\n    polygon.ps[3] = Point(8163.29, 11984.3);\n    new ShapeRef(router, polygon, 520);\n\n    // shapeRef521\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(5626.1, 11180.6);\n    polygon.ps[1] = Point(5626.1, 11242.6);\n    polygon.ps[2] = Point(5564.1, 11242.6);\n    polygon.ps[3] = Point(5564.1, 11180.6);\n    new ShapeRef(router, polygon, 521);\n\n    // shapeRef522\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(5626.1, 10684.3);\n    polygon.ps[1] = Point(5626.1, 10746.3);\n    polygon.ps[2] = Point(5564.1, 10746.3);\n    polygon.ps[3] = Point(5564.1, 10684.3);\n    new ShapeRef(router, polygon, 522);\n\n    // shapeRef523\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(5989.1, 10684.3);\n    polygon.ps[1] = Point(5989.1, 10746.3);\n    polygon.ps[2] = Point(5927.1, 10746.3);\n    polygon.ps[3] = Point(5927.1, 10684.3);\n    new ShapeRef(router, polygon, 523);\n\n    // shapeRef524\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(5989.1, 11180.6);\n    polygon.ps[1] = Point(5989.1, 11242.6);\n    polygon.ps[2] = Point(5927.1, 11242.6);\n    polygon.ps[3] = Point(5927.1, 11180.6);\n    new ShapeRef(router, polygon, 524);\n\n    // shapeRef525\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(6253.1, 11180.6);\n    polygon.ps[1] = Point(6253.1, 11242.6);\n    polygon.ps[2] = Point(6191.1, 11242.6);\n    polygon.ps[3] = Point(6191.1, 11180.6);\n    new ShapeRef(router, polygon, 525);\n\n    // shapeRef526\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(6649.1, 11180.6);\n    polygon.ps[1] = Point(6649.1, 11242.6);\n    polygon.ps[2] = Point(6587.1, 11242.6);\n    polygon.ps[3] = Point(6587.1, 11180.6);\n    new ShapeRef(router, polygon, 526);\n\n    // shapeRef527\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(7078.1, 11180.6);\n    polygon.ps[1] = Point(7078.1, 11242.6);\n    polygon.ps[2] = Point(7016.1, 11242.6);\n    polygon.ps[3] = Point(7016.1, 11180.6);\n    new ShapeRef(router, polygon, 527);\n\n    // shapeRef528\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(7573.1, 11180.6);\n    polygon.ps[1] = Point(7573.1, 11242.6);\n    polygon.ps[2] = Point(7511.1, 11242.6);\n    polygon.ps[3] = Point(7511.1, 11180.6);\n    new ShapeRef(router, polygon, 528);\n\n    // shapeRef529\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8789.03, 10150.2);\n    polygon.ps[1] = Point(8789.03, 10190.2);\n    polygon.ps[2] = Point(8734.03, 10190.2);\n    polygon.ps[3] = Point(8734.03, 10150.2);\n    new ShapeRef(router, polygon, 529);\n\n    // shapeRef530\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8889.03, 9697.89);\n    polygon.ps[1] = Point(8889.03, 9737.89);\n    polygon.ps[2] = Point(8834.03, 9737.89);\n    polygon.ps[3] = Point(8834.03, 9697.89);\n    new ShapeRef(router, polygon, 530);\n\n    // shapeRef531\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8989.03, 9697.89);\n    polygon.ps[1] = Point(8989.03, 9737.89);\n    polygon.ps[2] = Point(8934.03, 9737.89);\n    polygon.ps[3] = Point(8934.03, 9697.89);\n    new ShapeRef(router, polygon, 531);\n\n    // shapeRef532\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9089.03, 9697.89);\n    polygon.ps[1] = Point(9089.03, 9737.89);\n    polygon.ps[2] = Point(9034.03, 9737.89);\n    polygon.ps[3] = Point(9034.03, 9697.89);\n    new ShapeRef(router, polygon, 532);\n\n    // shapeRef533\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9189.03, 9697.89);\n    polygon.ps[1] = Point(9189.03, 9737.89);\n    polygon.ps[2] = Point(9134.03, 9737.89);\n    polygon.ps[3] = Point(9134.03, 9697.89);\n    new ShapeRef(router, polygon, 533);\n\n    // shapeRef534\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9289.03, 9765.77);\n    polygon.ps[1] = Point(9289.03, 9805.77);\n    polygon.ps[2] = Point(9234.03, 9805.77);\n    polygon.ps[3] = Point(9234.03, 9765.77);\n    new ShapeRef(router, polygon, 534);\n\n    // shapeRef535\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8389.03, 9942.61);\n    polygon.ps[1] = Point(8389.03, 9982.61);\n    polygon.ps[2] = Point(8334.03, 9982.61);\n    polygon.ps[3] = Point(8334.03, 9942.61);\n    new ShapeRef(router, polygon, 535);\n\n    // shapeRef536\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8489.03, 9942.61);\n    polygon.ps[1] = Point(8489.03, 9982.61);\n    polygon.ps[2] = Point(8434.03, 9982.61);\n    polygon.ps[3] = Point(8434.03, 9942.61);\n    new ShapeRef(router, polygon, 536);\n\n    // shapeRef537\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8589.03, 9942.61);\n    polygon.ps[1] = Point(8589.03, 9982.61);\n    polygon.ps[2] = Point(8534.03, 9982.61);\n    polygon.ps[3] = Point(8534.03, 9942.61);\n    new ShapeRef(router, polygon, 537);\n\n    // shapeRef538\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8689.03, 9797.89);\n    polygon.ps[1] = Point(8689.03, 9837.89);\n    polygon.ps[2] = Point(8634.03, 9837.89);\n    polygon.ps[3] = Point(8634.03, 9797.89);\n    new ShapeRef(router, polygon, 538);\n\n    // shapeRef539\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8789.03, 9797.89);\n    polygon.ps[1] = Point(8789.03, 9837.89);\n    polygon.ps[2] = Point(8734.03, 9837.89);\n    polygon.ps[3] = Point(8734.03, 9797.89);\n    new ShapeRef(router, polygon, 539);\n\n    // shapeRef540\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8889.03, 10150.2);\n    polygon.ps[1] = Point(8889.03, 10190.2);\n    polygon.ps[2] = Point(8834.03, 10190.2);\n    polygon.ps[3] = Point(8834.03, 10150.2);\n    new ShapeRef(router, polygon, 540);\n\n    // shapeRef541\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8989.03, 10150.2);\n    polygon.ps[1] = Point(8989.03, 10190.2);\n    polygon.ps[2] = Point(8934.03, 10190.2);\n    polygon.ps[3] = Point(8934.03, 10150.2);\n    new ShapeRef(router, polygon, 541);\n\n    // shapeRef542\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9089.03, 10150.2);\n    polygon.ps[1] = Point(9089.03, 10190.2);\n    polygon.ps[2] = Point(9034.03, 10190.2);\n    polygon.ps[3] = Point(9034.03, 10150.2);\n    new ShapeRef(router, polygon, 542);\n\n    // shapeRef543\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9189.03, 9797.89);\n    polygon.ps[1] = Point(9189.03, 9837.89);\n    polygon.ps[2] = Point(9134.03, 9837.89);\n    polygon.ps[3] = Point(9134.03, 9797.89);\n    new ShapeRef(router, polygon, 543);\n\n    // shapeRef544\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(11856.1, 150.265);\n    polygon.ps[1] = Point(11856.1, 212.265);\n    polygon.ps[2] = Point(11794.1, 212.265);\n    polygon.ps[3] = Point(11794.1, 150.265);\n    new ShapeRef(router, polygon, 544);\n\n    // shapeRef545\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(11302.2, 150.265);\n    polygon.ps[1] = Point(11302.2, 212.265);\n    polygon.ps[2] = Point(11240.2, 212.265);\n    polygon.ps[3] = Point(11240.2, 150.265);\n    new ShapeRef(router, polygon, 545);\n\n    // shapeRef546\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(10807.2, 150.265);\n    polygon.ps[1] = Point(10807.2, 212.265);\n    polygon.ps[2] = Point(10745.2, 212.265);\n    polygon.ps[3] = Point(10745.2, 150.265);\n    new ShapeRef(router, polygon, 546);\n\n    // shapeRef547\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9947.69, 150.265);\n    polygon.ps[1] = Point(9947.69, 212.265);\n    polygon.ps[2] = Point(9885.69, 212.265);\n    polygon.ps[3] = Point(9885.69, 150.265);\n    new ShapeRef(router, polygon, 547);\n\n    // shapeRef548\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9268.59, 150.265);\n    polygon.ps[1] = Point(9268.59, 212.265);\n    polygon.ps[2] = Point(9206.59, 212.265);\n    polygon.ps[3] = Point(9206.59, 150.265);\n    new ShapeRef(router, polygon, 548);\n\n    // shapeRef549\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(14365, 282.265);\n    polygon.ps[1] = Point(14365, 344.265);\n    polygon.ps[2] = Point(14303, 344.265);\n    polygon.ps[3] = Point(14303, 282.265);\n    new ShapeRef(router, polygon, 549);\n\n    // shapeRef550\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(14002, 282.265);\n    polygon.ps[1] = Point(14002, 344.265);\n    polygon.ps[2] = Point(13940, 344.265);\n    polygon.ps[3] = Point(13940, 282.265);\n    new ShapeRef(router, polygon, 550);\n\n    // shapeRef551\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(13672, 282.265);\n    polygon.ps[1] = Point(13672, 344.265);\n    polygon.ps[2] = Point(13610, 344.265);\n    polygon.ps[3] = Point(13610, 282.265);\n    new ShapeRef(router, polygon, 551);\n\n    // shapeRef552\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(13231, 282.265);\n    polygon.ps[1] = Point(13231, 344.265);\n    polygon.ps[2] = Point(13169, 344.265);\n    polygon.ps[3] = Point(13169, 282.265);\n    new ShapeRef(router, polygon, 552);\n\n    // shapeRef553\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(12821.5, 282.265);\n    polygon.ps[1] = Point(12821.5, 344.265);\n    polygon.ps[2] = Point(12759.5, 344.265);\n    polygon.ps[3] = Point(12759.5, 282.265);\n    new ShapeRef(router, polygon, 553);\n\n    // shapeRef554\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(14398, 150.265);\n    polygon.ps[1] = Point(14398, 212.265);\n    polygon.ps[2] = Point(14336, 212.265);\n    polygon.ps[3] = Point(14336, 150.265);\n    new ShapeRef(router, polygon, 554);\n\n    // shapeRef555\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(13804, 150.265);\n    polygon.ps[1] = Point(13804, 212.265);\n    polygon.ps[2] = Point(13742, 212.265);\n    polygon.ps[3] = Point(13742, 150.265);\n    new ShapeRef(router, polygon, 555);\n\n    // shapeRef556\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(12953.5, 150.265);\n    polygon.ps[1] = Point(12953.5, 212.265);\n    polygon.ps[2] = Point(12891.5, 212.265);\n    polygon.ps[3] = Point(12891.5, 150.265);\n    new ShapeRef(router, polygon, 556);\n\n    // shapeRef557\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(12318.1, 282.265);\n    polygon.ps[1] = Point(12318.1, 344.265);\n    polygon.ps[2] = Point(12256.1, 344.265);\n    polygon.ps[3] = Point(12256.1, 282.265);\n    new ShapeRef(router, polygon, 557);\n\n    // shapeRef558\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(12054.1, 282.265);\n    polygon.ps[1] = Point(12054.1, 344.265);\n    polygon.ps[2] = Point(11992.1, 344.265);\n    polygon.ps[3] = Point(11992.1, 282.265);\n    new ShapeRef(router, polygon, 558);\n\n    // shapeRef559\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(11856.1, 282.265);\n    polygon.ps[1] = Point(11856.1, 344.265);\n    polygon.ps[2] = Point(11794.1, 344.265);\n    polygon.ps[3] = Point(11794.1, 282.265);\n    new ShapeRef(router, polygon, 559);\n\n    // shapeRef560\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(11592.1, 282.265);\n    polygon.ps[1] = Point(11592.1, 344.265);\n    polygon.ps[2] = Point(11530.1, 344.265);\n    polygon.ps[3] = Point(11530.1, 282.265);\n    new ShapeRef(router, polygon, 560);\n\n    // shapeRef561\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(11302.2, 282.265);\n    polygon.ps[1] = Point(11302.2, 344.265);\n    polygon.ps[2] = Point(11240.2, 344.265);\n    polygon.ps[3] = Point(11240.2, 282.265);\n    new ShapeRef(router, polygon, 561);\n\n    // shapeRef562\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(11005.2, 282.265);\n    polygon.ps[1] = Point(11005.2, 344.265);\n    polygon.ps[2] = Point(10943.2, 344.265);\n    polygon.ps[3] = Point(10943.2, 282.265);\n    new ShapeRef(router, polygon, 562);\n\n    // shapeRef563\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(10807.2, 282.265);\n    polygon.ps[1] = Point(10807.2, 344.265);\n    polygon.ps[2] = Point(10745.2, 344.265);\n    polygon.ps[3] = Point(10745.2, 282.265);\n    new ShapeRef(router, polygon, 563);\n\n    // shapeRef564\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(10487.9, 282.265);\n    polygon.ps[1] = Point(10487.9, 344.265);\n    polygon.ps[2] = Point(10425.9, 344.265);\n    polygon.ps[3] = Point(10425.9, 282.265);\n    new ShapeRef(router, polygon, 564);\n\n    // shapeRef565\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9947.69, 282.265);\n    polygon.ps[1] = Point(9947.69, 344.265);\n    polygon.ps[2] = Point(9885.69, 344.265);\n    polygon.ps[3] = Point(9885.69, 282.265);\n    new ShapeRef(router, polygon, 565);\n\n    // shapeRef566\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9499.59, 282.265);\n    polygon.ps[1] = Point(9499.59, 344.265);\n    polygon.ps[2] = Point(9437.59, 344.265);\n    polygon.ps[3] = Point(9437.59, 282.265);\n    new ShapeRef(router, polygon, 566);\n\n    // shapeRef567\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(16786.8, 5900.59);\n    polygon.ps[1] = Point(16786.8, 5962.59);\n    polygon.ps[2] = Point(16724.8, 5962.59);\n    polygon.ps[3] = Point(16724.8, 5900.59);\n    new ShapeRef(router, polygon, 567);\n\n    // shapeRef568\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(3330, 7328.4);\n    polygon.ps[1] = Point(3330, 7390.4);\n    polygon.ps[2] = Point(3268, 7390.4);\n    polygon.ps[3] = Point(3268, 7328.4);\n    new ShapeRef(router, polygon, 568);\n\n    // shapeRef569\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(12562.5, 8449.99);\n    polygon.ps[1] = Point(12562.5, 8511.99);\n    polygon.ps[2] = Point(12500.5, 8511.99);\n    polygon.ps[3] = Point(12500.5, 8449.99);\n    new ShapeRef(router, polygon, 569);\n\n    // shapeRef570\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(12054.1, 7031.4);\n    polygon.ps[1] = Point(12054.1, 7093.4);\n    polygon.ps[2] = Point(11992.1, 7093.4);\n    polygon.ps[3] = Point(11992.1, 7031.4);\n    new ShapeRef(router, polygon, 570);\n\n    // shapeRef571\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(129, 8383.99);\n    polygon.ps[1] = Point(129, 8445.99);\n    polygon.ps[2] = Point(67, 8445.99);\n    polygon.ps[3] = Point(67, 8383.99);\n    new ShapeRef(router, polygon, 571);\n\n    // shapeRef572\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(129, 7911.79);\n    polygon.ps[1] = Point(129, 7973.79);\n    polygon.ps[2] = Point(67, 7973.79);\n    polygon.ps[3] = Point(67, 7911.79);\n    new ShapeRef(router, polygon, 572);\n\n    // shapeRef573\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(129, 7394.4);\n    polygon.ps[1] = Point(129, 7456.4);\n    polygon.ps[2] = Point(67, 7456.4);\n    polygon.ps[3] = Point(67, 7394.4);\n    new ShapeRef(router, polygon, 573);\n\n    // shapeRef574\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(15270.5, 12096.3);\n    polygon.ps[1] = Point(15270.5, 12158.3);\n    polygon.ps[2] = Point(15208.5, 12158.3);\n    polygon.ps[3] = Point(15208.5, 12096.3);\n    new ShapeRef(router, polygon, 574);\n\n    // shapeRef575\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(14431, 12096.3);\n    polygon.ps[1] = Point(14431, 12158.3);\n    polygon.ps[2] = Point(14369, 12158.3);\n    polygon.ps[3] = Point(14369, 12096.3);\n    new ShapeRef(router, polygon, 575);\n\n    // shapeRef576\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(16753.8, 11601.9);\n    polygon.ps[1] = Point(16753.8, 11663.9);\n    polygon.ps[2] = Point(16691.8, 11663.9);\n    polygon.ps[3] = Point(16691.8, 11601.9);\n    new ShapeRef(router, polygon, 576);\n\n    // shapeRef577\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(16493.6, 11601.9);\n    polygon.ps[1] = Point(16493.6, 11663.9);\n    polygon.ps[2] = Point(16431.6, 11663.9);\n    polygon.ps[3] = Point(16431.6, 11601.9);\n    new ShapeRef(router, polygon, 577);\n\n    // shapeRef578\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(13870, 3864.51);\n    polygon.ps[1] = Point(13870, 3926.51);\n    polygon.ps[2] = Point(13808, 3926.51);\n    polygon.ps[3] = Point(13808, 3864.51);\n    new ShapeRef(router, polygon, 578);\n\n    // shapeRef579\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(16621.8, 9578.42);\n    polygon.ps[1] = Point(16621.8, 9640.42);\n    polygon.ps[2] = Point(16559.8, 9640.42);\n    polygon.ps[3] = Point(16559.8, 9578.42);\n    new ShapeRef(router, polygon, 579);\n\n    // shapeRef580\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(17838.5, 11634.9);\n    polygon.ps[1] = Point(17838.5, 11696.9);\n    polygon.ps[2] = Point(17776.5, 11696.9);\n    polygon.ps[3] = Point(17776.5, 11634.9);\n    new ShapeRef(router, polygon, 580);\n\n    // shapeRef581\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(17083.8, 11634.9);\n    polygon.ps[1] = Point(17083.8, 11696.9);\n    polygon.ps[2] = Point(17021.8, 11696.9);\n    polygon.ps[3] = Point(17021.8, 11634.9);\n    new ShapeRef(router, polygon, 581);\n\n    // shapeRef582\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(17838.5, 11081.6);\n    polygon.ps[1] = Point(17838.5, 11143.6);\n    polygon.ps[2] = Point(17776.5, 11143.6);\n    polygon.ps[3] = Point(17776.5, 11081.6);\n    new ShapeRef(router, polygon, 582);\n\n    // shapeRef583\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(17083.8, 11081.6);\n    polygon.ps[1] = Point(17083.8, 11143.6);\n    polygon.ps[2] = Point(17021.8, 11143.6);\n    polygon.ps[3] = Point(17021.8, 11081.6);\n    new ShapeRef(router, polygon, 583);\n\n    // shapeRef584\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(17838.5, 10717.3);\n    polygon.ps[1] = Point(17838.5, 10779.3);\n    polygon.ps[2] = Point(17776.5, 10779.3);\n    polygon.ps[3] = Point(17776.5, 10717.3);\n    new ShapeRef(router, polygon, 584);\n\n    // shapeRef585\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(17083.8, 10717.3);\n    polygon.ps[1] = Point(17083.8, 10779.3);\n    polygon.ps[2] = Point(17021.8, 10779.3);\n    polygon.ps[3] = Point(17021.8, 10717.3);\n    new ShapeRef(router, polygon, 585);\n\n    // shapeRef586\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(17838.5, 10440);\n    polygon.ps[1] = Point(17838.5, 10502);\n    polygon.ps[2] = Point(17776.5, 10502);\n    polygon.ps[3] = Point(17776.5, 10440);\n    new ShapeRef(router, polygon, 586);\n\n    // shapeRef587\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(17083.8, 10440);\n    polygon.ps[1] = Point(17083.8, 10502);\n    polygon.ps[2] = Point(17021.8, 10502);\n    polygon.ps[3] = Point(17021.8, 10440);\n    new ShapeRef(router, polygon, 587);\n\n    // shapeRef588\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(17838.5, 10209);\n    polygon.ps[1] = Point(17838.5, 10271);\n    polygon.ps[2] = Point(17776.5, 10271);\n    polygon.ps[3] = Point(17776.5, 10209);\n    new ShapeRef(router, polygon, 588);\n\n    // shapeRef589\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(17083.8, 10209);\n    polygon.ps[1] = Point(17083.8, 10271);\n    polygon.ps[2] = Point(17021.8, 10271);\n    polygon.ps[3] = Point(17021.8, 10209);\n    new ShapeRef(router, polygon, 589);\n\n    // shapeRef590\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(16885.8, 10209);\n    polygon.ps[1] = Point(16885.8, 10271);\n    polygon.ps[2] = Point(16823.8, 10271);\n    polygon.ps[3] = Point(16823.8, 10209);\n    new ShapeRef(router, polygon, 590);\n\n    // shapeRef591\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(16885.8, 9578.42);\n    polygon.ps[1] = Point(16885.8, 9640.42);\n    polygon.ps[2] = Point(16823.8, 9640.42);\n    polygon.ps[3] = Point(16823.8, 9578.42);\n    new ShapeRef(router, polygon, 591);\n\n    // shapeRef592\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(16885.8, 9083.42);\n    polygon.ps[1] = Point(16885.8, 9145.42);\n    polygon.ps[2] = Point(16823.8, 9145.42);\n    polygon.ps[3] = Point(16823.8, 9083.42);\n    new ShapeRef(router, polygon, 592);\n\n    // shapeRef593\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(16885.8, 8449.99);\n    polygon.ps[1] = Point(16885.8, 8511.99);\n    polygon.ps[2] = Point(16823.8, 8511.99);\n    polygon.ps[3] = Point(16823.8, 8449.99);\n    new ShapeRef(router, polygon, 593);\n\n    // shapeRef594\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(16885.8, 7878.79);\n    polygon.ps[1] = Point(16885.8, 7940.79);\n    polygon.ps[2] = Point(16823.8, 7940.79);\n    polygon.ps[3] = Point(16823.8, 7878.79);\n    new ShapeRef(router, polygon, 594);\n\n    // shapeRef595\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(7796.29, 6219.51);\n    polygon.ps[1] = Point(7796.29, 6281.51);\n    polygon.ps[2] = Point(7734.29, 6281.51);\n    polygon.ps[3] = Point(7734.29, 6219.51);\n    new ShapeRef(router, polygon, 595);\n\n    // shapeRef596\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8159.29, 6219.51);\n    polygon.ps[1] = Point(8159.29, 6281.51);\n    polygon.ps[2] = Point(8097.29, 6281.51);\n    polygon.ps[3] = Point(8097.29, 6219.51);\n    new ShapeRef(router, polygon, 596);\n\n    // shapeRef597\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8649.29, 6219.51);\n    polygon.ps[1] = Point(8649.29, 6281.51);\n    polygon.ps[2] = Point(8587.29, 6281.51);\n    polygon.ps[3] = Point(8587.29, 6219.51);\n    new ShapeRef(router, polygon, 597);\n\n    // shapeRef598\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9301.59, 6219.51);\n    polygon.ps[1] = Point(9301.59, 6281.51);\n    polygon.ps[2] = Point(9239.59, 6281.51);\n    polygon.ps[3] = Point(9239.59, 6219.51);\n    new ShapeRef(router, polygon, 598);\n\n    // shapeRef599\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9815.69, 6219.51);\n    polygon.ps[1] = Point(9815.69, 6281.51);\n    polygon.ps[2] = Point(9753.69, 6281.51);\n    polygon.ps[3] = Point(9753.69, 6219.51);\n    new ShapeRef(router, polygon, 599);\n\n    // shapeRef600\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(6814.1, 8644.22);\n    polygon.ps[1] = Point(6814.1, 8706.22);\n    polygon.ps[2] = Point(6752.1, 8706.22);\n    polygon.ps[3] = Point(6752.1, 8644.22);\n    new ShapeRef(router, polygon, 600);\n\n    // shapeRef601\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(6814.1, 8284.99);\n    polygon.ps[1] = Point(6814.1, 8346.99);\n    polygon.ps[2] = Point(6752.1, 8346.99);\n    polygon.ps[3] = Point(6752.1, 8284.99);\n    new ShapeRef(router, polygon, 601);\n\n    // shapeRef602\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(6583.1, 10684.3);\n    polygon.ps[1] = Point(6583.1, 10746.3);\n    polygon.ps[2] = Point(6521.1, 10746.3);\n    polygon.ps[3] = Point(6521.1, 10684.3);\n    new ShapeRef(router, polygon, 602);\n\n    // shapeRef603\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(6583.1, 10374);\n    polygon.ps[1] = Point(6583.1, 10436);\n    polygon.ps[2] = Point(6521.1, 10436);\n    polygon.ps[3] = Point(6521.1, 10374);\n    new ShapeRef(router, polygon, 603);\n\n    // shapeRef604\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(6583.1, 9116.42);\n    polygon.ps[1] = Point(6583.1, 9178.42);\n    polygon.ps[2] = Point(6521.1, 9178.42);\n    polygon.ps[3] = Point(6521.1, 9116.42);\n    new ShapeRef(router, polygon, 604);\n\n    // shapeRef605\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(6583.1, 8644.22);\n    polygon.ps[1] = Point(6583.1, 8706.22);\n    polygon.ps[2] = Point(6521.1, 8706.22);\n    polygon.ps[3] = Point(6521.1, 8644.22);\n    new ShapeRef(router, polygon, 605);\n\n    // shapeRef606\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(7012.1, 7614.79);\n    polygon.ps[1] = Point(7012.1, 7676.79);\n    polygon.ps[2] = Point(6950.1, 7676.79);\n    polygon.ps[3] = Point(6950.1, 7614.79);\n    new ShapeRef(router, polygon, 606);\n\n    // shapeRef607\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(7243.1, 10275);\n    polygon.ps[1] = Point(7243.1, 10337);\n    polygon.ps[2] = Point(7181.1, 10337);\n    polygon.ps[3] = Point(7181.1, 10275);\n    new ShapeRef(router, polygon, 607);\n\n    // shapeRef608\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(7243.1, 9912.02);\n    polygon.ps[1] = Point(7243.1, 9974.02);\n    polygon.ps[2] = Point(7181.1, 9974.02);\n    polygon.ps[3] = Point(7181.1, 9912.02);\n    new ShapeRef(router, polygon, 608);\n\n    // shapeRef609\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(7243.1, 8548.99);\n    polygon.ps[1] = Point(7243.1, 8610.99);\n    polygon.ps[2] = Point(7181.1, 8610.99);\n    polygon.ps[3] = Point(7181.1, 8548.99);\n    new ShapeRef(router, polygon, 609);\n\n    // shapeRef610\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(7243.1, 8142.79);\n    polygon.ps[1] = Point(7243.1, 8204.79);\n    polygon.ps[2] = Point(7181.1, 8204.79);\n    polygon.ps[3] = Point(7181.1, 8142.79);\n    new ShapeRef(router, polygon, 610);\n\n    // shapeRef611\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(6253.1, 10684.3);\n    polygon.ps[1] = Point(6253.1, 10746.3);\n    polygon.ps[2] = Point(6191.1, 10746.3);\n    polygon.ps[3] = Point(6191.1, 10684.3);\n    new ShapeRef(router, polygon, 611);\n\n    // shapeRef612\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(6253.1, 10374);\n    polygon.ps[1] = Point(6253.1, 10436);\n    polygon.ps[2] = Point(6191.1, 10436);\n    polygon.ps[3] = Point(6191.1, 10374);\n    new ShapeRef(router, polygon, 612);\n\n    // shapeRef613\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(6253.1, 10077);\n    polygon.ps[1] = Point(6253.1, 10139);\n    polygon.ps[2] = Point(6191.1, 10139);\n    polygon.ps[3] = Point(6191.1, 10077);\n    new ShapeRef(router, polygon, 613);\n\n    // shapeRef614\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(6253.1, 9512.42);\n    polygon.ps[1] = Point(6253.1, 9574.42);\n    polygon.ps[2] = Point(6191.1, 9574.42);\n    polygon.ps[3] = Point(6191.1, 9512.42);\n    new ShapeRef(router, polygon, 614);\n\n    // shapeRef615\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(6253.1, 9116.42);\n    polygon.ps[1] = Point(6253.1, 9178.42);\n    polygon.ps[2] = Point(6191.1, 9178.42);\n    polygon.ps[3] = Point(6191.1, 9116.42);\n    new ShapeRef(router, polygon, 615);\n\n    // shapeRef616\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(6253.1, 8644.22);\n    polygon.ps[1] = Point(6253.1, 8706.22);\n    polygon.ps[2] = Point(6191.1, 8706.22);\n    polygon.ps[3] = Point(6191.1, 8644.22);\n    new ShapeRef(router, polygon, 616);\n\n    // shapeRef617\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(6253.1, 8284.99);\n    polygon.ps[1] = Point(6253.1, 8346.99);\n    polygon.ps[2] = Point(6191.1, 8346.99);\n    polygon.ps[3] = Point(6191.1, 8284.99);\n    new ShapeRef(router, polygon, 617);\n\n    // shapeRef618\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(6253.1, 7779.79);\n    polygon.ps[1] = Point(6253.1, 7841.79);\n    polygon.ps[2] = Point(6191.1, 7841.79);\n    polygon.ps[3] = Point(6191.1, 7779.79);\n    new ShapeRef(router, polygon, 618);\n\n    // shapeRef619\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9089.03, 10497.9);\n    polygon.ps[1] = Point(9089.03, 10537.9);\n    polygon.ps[2] = Point(9034.03, 10537.9);\n    polygon.ps[3] = Point(9034.03, 10497.9);\n    new ShapeRef(router, polygon, 619);\n\n    // shapeRef620\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9189.03, 10497.9);\n    polygon.ps[1] = Point(9189.03, 10537.9);\n    polygon.ps[2] = Point(9134.03, 10537.9);\n    polygon.ps[3] = Point(9134.03, 10497.9);\n    new ShapeRef(router, polygon, 620);\n\n    // shapeRef621\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9289.03, 10497.9);\n    polygon.ps[1] = Point(9289.03, 10537.9);\n    polygon.ps[2] = Point(9234.03, 10537.9);\n    polygon.ps[3] = Point(9234.03, 10497.9);\n    new ShapeRef(router, polygon, 621);\n\n    // shapeRef622\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9389.03, 10497.9);\n    polygon.ps[1] = Point(9389.03, 10537.9);\n    polygon.ps[2] = Point(9334.03, 10537.9);\n    polygon.ps[3] = Point(9334.03, 10497.9);\n    new ShapeRef(router, polygon, 622);\n\n    // shapeRef623\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8456.29, 5316.67);\n    polygon.ps[1] = Point(8456.29, 5378.67);\n    polygon.ps[2] = Point(8394.29, 5378.67);\n    polygon.ps[3] = Point(8394.29, 5316.67);\n    new ShapeRef(router, polygon, 623);\n\n    // shapeRef624\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8126.29, 5316.67);\n    polygon.ps[1] = Point(8126.29, 5378.67);\n    polygon.ps[2] = Point(8064.29, 5378.67);\n    polygon.ps[3] = Point(8064.29, 5316.67);\n    new ShapeRef(router, polygon, 624);\n\n    // shapeRef625\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(7796.29, 5316.67);\n    polygon.ps[1] = Point(7796.29, 5378.67);\n    polygon.ps[2] = Point(7734.29, 5378.67);\n    polygon.ps[3] = Point(7734.29, 5316.67);\n    new ShapeRef(router, polygon, 625);\n\n    // shapeRef626\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(7342.1, 5316.67);\n    polygon.ps[1] = Point(7342.1, 5378.67);\n    polygon.ps[2] = Point(7280.1, 5378.67);\n    polygon.ps[3] = Point(7280.1, 5316.67);\n    new ShapeRef(router, polygon, 626);\n\n    // shapeRef627\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(6946.1, 5316.67);\n    polygon.ps[1] = Point(6946.1, 5378.67);\n    polygon.ps[2] = Point(6884.1, 5378.67);\n    polygon.ps[3] = Point(6884.1, 5316.67);\n    new ShapeRef(router, polygon, 627);\n\n    // shapeRef628\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(7507.1, 4095.51);\n    polygon.ps[1] = Point(7507.1, 4157.51);\n    polygon.ps[2] = Point(7445.1, 4157.51);\n    polygon.ps[3] = Point(7445.1, 4095.51);\n    new ShapeRef(router, polygon, 628);\n\n    // shapeRef629\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(7012.1, 4095.51);\n    polygon.ps[1] = Point(7012.1, 4157.51);\n    polygon.ps[2] = Point(6950.1, 4157.51);\n    polygon.ps[3] = Point(6950.1, 4095.51);\n    new ShapeRef(router, polygon, 629);\n\n    // shapeRef630\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(6484.1, 4095.51);\n    polygon.ps[1] = Point(6484.1, 4157.51);\n    polygon.ps[2] = Point(6422.1, 4157.51);\n    polygon.ps[3] = Point(6422.1, 4095.51);\n    new ShapeRef(router, polygon, 630);\n\n    // shapeRef631\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(6187.1, 4095.51);\n    polygon.ps[1] = Point(6187.1, 4157.51);\n    polygon.ps[2] = Point(6125.1, 4157.51);\n    polygon.ps[3] = Point(6125.1, 4095.51);\n    new ShapeRef(router, polygon, 631);\n\n    // shapeRef632\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(11889.1, 10506);\n    polygon.ps[1] = Point(11889.1, 10568);\n    polygon.ps[2] = Point(11827.1, 10568);\n    polygon.ps[3] = Point(11827.1, 10506);\n    new ShapeRef(router, polygon, 632);\n\n    // shapeRef633\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(14266, 1945.29);\n    polygon.ps[1] = Point(14266, 2007.29);\n    polygon.ps[2] = Point(14204, 2007.29);\n    polygon.ps[3] = Point(14204, 1945.29);\n    new ShapeRef(router, polygon, 633);\n\n    // shapeRef634\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(13771, 1945.29);\n    polygon.ps[1] = Point(13771, 2007.29);\n    polygon.ps[2] = Point(13709, 2007.29);\n    polygon.ps[3] = Point(13709, 1945.29);\n    new ShapeRef(router, polygon, 634);\n\n    // shapeRef635\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(14695, 1780.29);\n    polygon.ps[1] = Point(14695, 1842.29);\n    polygon.ps[2] = Point(14633, 1842.29);\n    polygon.ps[3] = Point(14633, 1780.29);\n    new ShapeRef(router, polygon, 635);\n\n    // shapeRef636\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(14497, 1579.29);\n    polygon.ps[1] = Point(14497, 1641.29);\n    polygon.ps[2] = Point(14435, 1641.29);\n    polygon.ps[3] = Point(14435, 1579.29);\n    new ShapeRef(router, polygon, 636);\n\n    // shapeRef637\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(13771, 1579.29);\n    polygon.ps[1] = Point(13771, 1641.29);\n    polygon.ps[2] = Point(13709, 1641.29);\n    polygon.ps[3] = Point(13709, 1579.29);\n    new ShapeRef(router, polygon, 637);\n\n    // shapeRef638\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(14167, 1579.29);\n    polygon.ps[1] = Point(14167, 1641.29);\n    polygon.ps[2] = Point(14105, 1641.29);\n    polygon.ps[3] = Point(14105, 1579.29);\n    new ShapeRef(router, polygon, 638);\n\n    // shapeRef639\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(13771, 1780.29);\n    polygon.ps[1] = Point(13771, 1842.29);\n    polygon.ps[2] = Point(13709, 1842.29);\n    polygon.ps[3] = Point(13709, 1780.29);\n    new ShapeRef(router, polygon, 639);\n\n    // shapeRef640\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(12285.1, 3402.51);\n    polygon.ps[1] = Point(12285.1, 3464.51);\n    polygon.ps[2] = Point(12223.1, 3464.51);\n    polygon.ps[3] = Point(12223.1, 3402.51);\n    new ShapeRef(router, polygon, 640);\n\n    // shapeRef641\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(11493.1, 2812.29);\n    polygon.ps[1] = Point(11493.1, 2874.29);\n    polygon.ps[2] = Point(11431.1, 2874.29);\n    polygon.ps[3] = Point(11431.1, 2812.29);\n    new ShapeRef(router, polygon, 641);\n\n    // shapeRef642\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(11823.1, 2812.29);\n    polygon.ps[1] = Point(11823.1, 2874.29);\n    polygon.ps[2] = Point(11761.1, 2874.29);\n    polygon.ps[3] = Point(11761.1, 2812.29);\n    new ShapeRef(router, polygon, 642);\n\n    // shapeRef643\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(11493.1, 3402.51);\n    polygon.ps[1] = Point(11493.1, 3464.51);\n    polygon.ps[2] = Point(11431.1, 3464.51);\n    polygon.ps[3] = Point(11431.1, 3402.51);\n    new ShapeRef(router, polygon, 643);\n\n    // shapeRef644\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(11823.1, 3402.51);\n    polygon.ps[1] = Point(11823.1, 3464.51);\n    polygon.ps[2] = Point(11761.1, 3464.51);\n    polygon.ps[3] = Point(11761.1, 3402.51);\n    new ShapeRef(router, polygon, 644);\n\n    // shapeRef645\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(12021.1, 3402.51);\n    polygon.ps[1] = Point(12021.1, 3464.51);\n    polygon.ps[2] = Point(11959.1, 3464.51);\n    polygon.ps[3] = Point(11959.1, 3402.51);\n    new ShapeRef(router, polygon, 645);\n\n    // shapeRef646\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(10675.2, 1912.29);\n    polygon.ps[1] = Point(10675.2, 1974.29);\n    polygon.ps[2] = Point(10613.2, 1974.29);\n    polygon.ps[3] = Point(10613.2, 1912.29);\n    new ShapeRef(router, polygon, 646);\n\n    // shapeRef647\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(10675.2, 2152.29);\n    polygon.ps[1] = Point(10675.2, 2214.29);\n    polygon.ps[2] = Point(10613.2, 2214.29);\n    polygon.ps[3] = Point(10613.2, 2152.29);\n    new ShapeRef(router, polygon, 647);\n\n    // shapeRef648\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(10675.2, 2416.29);\n    polygon.ps[1] = Point(10675.2, 2478.29);\n    polygon.ps[2] = Point(10613.2, 2478.29);\n    polygon.ps[3] = Point(10613.2, 2416.29);\n    new ShapeRef(router, polygon, 648);\n\n    // shapeRef649\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(10675.2, 2680.29);\n    polygon.ps[1] = Point(10675.2, 2742.29);\n    polygon.ps[2] = Point(10613.2, 2742.29);\n    polygon.ps[3] = Point(10613.2, 2680.29);\n    new ShapeRef(router, polygon, 649);\n\n    // shapeRef650\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(10675.2, 3274.29);\n    polygon.ps[1] = Point(10675.2, 3336.29);\n    polygon.ps[2] = Point(10613.2, 3336.29);\n    polygon.ps[3] = Point(10613.2, 3274.29);\n    new ShapeRef(router, polygon, 650);\n\n    // shapeRef651\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(10972.2, 3274.29);\n    polygon.ps[1] = Point(10972.2, 3336.29);\n    polygon.ps[2] = Point(10910.2, 3336.29);\n    polygon.ps[3] = Point(10910.2, 3274.29);\n    new ShapeRef(router, polygon, 651);\n\n    // shapeRef652\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(11203.2, 3274.29);\n    polygon.ps[1] = Point(11203.2, 3336.29);\n    polygon.ps[2] = Point(11141.2, 3336.29);\n    polygon.ps[3] = Point(11141.2, 3274.29);\n    new ShapeRef(router, polygon, 652);\n\n    // shapeRef653\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(10046.7, 3076.29);\n    polygon.ps[1] = Point(10046.7, 3138.29);\n    polygon.ps[2] = Point(9984.69, 3138.29);\n    polygon.ps[3] = Point(9984.69, 3076.29);\n    new ShapeRef(router, polygon, 653);\n\n    // shapeRef654\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(10675.2, 3076.29);\n    polygon.ps[1] = Point(10675.2, 3138.29);\n    polygon.ps[2] = Point(10613.2, 3138.29);\n    polygon.ps[3] = Point(10613.2, 3076.29);\n    new ShapeRef(router, polygon, 654);\n\n    // shapeRef655\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(10972.2, 3076.29);\n    polygon.ps[1] = Point(10972.2, 3138.29);\n    polygon.ps[2] = Point(10910.2, 3138.29);\n    polygon.ps[3] = Point(10910.2, 3076.29);\n    new ShapeRef(router, polygon, 655);\n\n    // shapeRef656\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(11203.2, 3076.29);\n    polygon.ps[1] = Point(11203.2, 3138.29);\n    polygon.ps[2] = Point(11141.2, 3138.29);\n    polygon.ps[3] = Point(11141.2, 3076.29);\n    new ShapeRef(router, polygon, 656);\n\n    // shapeRef657\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(11493.1, 3076.29);\n    polygon.ps[1] = Point(11493.1, 3138.29);\n    polygon.ps[2] = Point(11431.1, 3138.29);\n    polygon.ps[3] = Point(11431.1, 3076.29);\n    new ShapeRef(router, polygon, 657);\n\n    // shapeRef658\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(14101, 1216.29);\n    polygon.ps[1] = Point(14101, 1278.29);\n    polygon.ps[2] = Point(14039, 1278.29);\n    polygon.ps[3] = Point(14039, 1216.29);\n    new ShapeRef(router, polygon, 658);\n\n    // shapeRef659\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(13738, 1216.29);\n    polygon.ps[1] = Point(13738, 1278.29);\n    polygon.ps[2] = Point(13676, 1278.29);\n    polygon.ps[3] = Point(13676, 1216.29);\n    new ShapeRef(router, polygon, 659);\n\n    // shapeRef660\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(13231, 1216.29);\n    polygon.ps[1] = Point(13231, 1278.29);\n    polygon.ps[2] = Point(13169, 1278.29);\n    polygon.ps[3] = Point(13169, 1216.29);\n    new ShapeRef(router, polygon, 660);\n\n    // shapeRef661\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(13231, 1480.29);\n    polygon.ps[1] = Point(13231, 1542.29);\n    polygon.ps[2] = Point(13169, 1542.29);\n    polygon.ps[3] = Point(13169, 1480.29);\n    new ShapeRef(router, polygon, 661);\n\n    // shapeRef662\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(13231, 1780.29);\n    polygon.ps[1] = Point(13231, 1842.29);\n    polygon.ps[2] = Point(13169, 1842.29);\n    polygon.ps[3] = Point(13169, 1780.29);\n    new ShapeRef(router, polygon, 662);\n\n    // shapeRef663\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(11823.1, 3076.29);\n    polygon.ps[1] = Point(11823.1, 3138.29);\n    polygon.ps[2] = Point(11761.1, 3138.29);\n    polygon.ps[3] = Point(11761.1, 3076.29);\n    new ShapeRef(router, polygon, 663);\n\n    // shapeRef664\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(12021.1, 3076.29);\n    polygon.ps[1] = Point(12021.1, 3138.29);\n    polygon.ps[2] = Point(11959.1, 3138.29);\n    polygon.ps[3] = Point(11959.1, 3076.29);\n    new ShapeRef(router, polygon, 664);\n\n    // shapeRef665\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(12021.1, 2614.29);\n    polygon.ps[1] = Point(12021.1, 2676.29);\n    polygon.ps[2] = Point(11959.1, 2676.29);\n    polygon.ps[3] = Point(11959.1, 2614.29);\n    new ShapeRef(router, polygon, 665);\n\n    // shapeRef666\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(12021.1, 2449.29);\n    polygon.ps[1] = Point(12021.1, 2511.29);\n    polygon.ps[2] = Point(11959.1, 2511.29);\n    polygon.ps[3] = Point(11959.1, 2449.29);\n    new ShapeRef(router, polygon, 666);\n\n    // shapeRef667\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(12021.1, 2185.29);\n    polygon.ps[1] = Point(12021.1, 2247.29);\n    polygon.ps[2] = Point(11959.1, 2247.29);\n    polygon.ps[3] = Point(11959.1, 2185.29);\n    new ShapeRef(router, polygon, 667);\n\n    // shapeRef668\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(294, 10717.3);\n    polygon.ps[1] = Point(294, 10779.3);\n    polygon.ps[2] = Point(232, 10779.3);\n    polygon.ps[3] = Point(232, 10717.3);\n    new ShapeRef(router, polygon, 668);\n\n    // shapeRef669\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(657, 10717.3);\n    polygon.ps[1] = Point(657, 10779.3);\n    polygon.ps[2] = Point(595, 10779.3);\n    polygon.ps[3] = Point(595, 10717.3);\n    new ShapeRef(router, polygon, 669);\n\n    // shapeRef670\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(1449, 10717.3);\n    polygon.ps[1] = Point(1449, 10779.3);\n    polygon.ps[2] = Point(1387, 10779.3);\n    polygon.ps[3] = Point(1387, 10717.3);\n    new ShapeRef(router, polygon, 670);\n\n    // shapeRef671\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(2076, 10717.3);\n    polygon.ps[1] = Point(2076, 10779.3);\n    polygon.ps[2] = Point(2014, 10779.3);\n    polygon.ps[3] = Point(2014, 10717.3);\n    new ShapeRef(router, polygon, 671);\n\n    // shapeRef672\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(294, 11667.9);\n    polygon.ps[1] = Point(294, 11729.9);\n    polygon.ps[2] = Point(232, 11729.9);\n    polygon.ps[3] = Point(232, 11667.9);\n    new ShapeRef(router, polygon, 672);\n\n    // shapeRef673\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(657, 11667.9);\n    polygon.ps[1] = Point(657, 11729.9);\n    polygon.ps[2] = Point(595, 11729.9);\n    polygon.ps[3] = Point(595, 11667.9);\n    new ShapeRef(router, polygon, 673);\n\n    // shapeRef674\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(294, 11114.6);\n    polygon.ps[1] = Point(294, 11176.6);\n    polygon.ps[2] = Point(232, 11176.6);\n    polygon.ps[3] = Point(232, 11114.6);\n    new ShapeRef(router, polygon, 674);\n\n    // shapeRef675\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(657, 11114.6);\n    polygon.ps[1] = Point(657, 11176.6);\n    polygon.ps[2] = Point(595, 11176.6);\n    polygon.ps[3] = Point(595, 11114.6);\n    new ShapeRef(router, polygon, 675);\n\n    // shapeRef676\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(1251, 11114.6);\n    polygon.ps[1] = Point(1251, 11176.6);\n    polygon.ps[2] = Point(1189, 11176.6);\n    polygon.ps[3] = Point(1189, 11114.6);\n    new ShapeRef(router, polygon, 676);\n\n    // shapeRef677\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(1779, 11114.6);\n    polygon.ps[1] = Point(1779, 11176.6);\n    polygon.ps[2] = Point(1717, 11176.6);\n    polygon.ps[3] = Point(1717, 11114.6);\n    new ShapeRef(router, polygon, 677);\n\n    // shapeRef678\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(2439, 11114.6);\n    polygon.ps[1] = Point(2439, 11176.6);\n    polygon.ps[2] = Point(2377, 11176.6);\n    polygon.ps[3] = Point(2377, 11114.6);\n    new ShapeRef(router, polygon, 678);\n\n    // shapeRef679\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(3066, 11114.6);\n    polygon.ps[1] = Point(3066, 11176.6);\n    polygon.ps[2] = Point(3004, 11176.6);\n    polygon.ps[3] = Point(3004, 11114.6);\n    new ShapeRef(router, polygon, 679);\n\n    // shapeRef680\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(1020, 9677.42);\n    polygon.ps[1] = Point(1020, 9739.42);\n    polygon.ps[2] = Point(958, 9739.42);\n    polygon.ps[3] = Point(958, 9677.42);\n    new ShapeRef(router, polygon, 680);\n\n    // shapeRef681\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(2142, 9677.42);\n    polygon.ps[1] = Point(2142, 9739.42);\n    polygon.ps[2] = Point(2080, 9739.42);\n    polygon.ps[3] = Point(2080, 9677.42);\n    new ShapeRef(router, polygon, 681);\n\n    // shapeRef682\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(1020, 10308);\n    polygon.ps[1] = Point(1020, 10370);\n    polygon.ps[2] = Point(958, 10370);\n    polygon.ps[3] = Point(958, 10308);\n    new ShapeRef(router, polygon, 682);\n\n    // shapeRef683\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(492, 10176);\n    polygon.ps[1] = Point(492, 10238);\n    polygon.ps[2] = Point(430, 10238);\n    polygon.ps[3] = Point(430, 10176);\n    new ShapeRef(router, polygon, 683);\n\n    // shapeRef684\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(1020, 10176);\n    polygon.ps[1] = Point(1020, 10238);\n    polygon.ps[2] = Point(958, 10238);\n    polygon.ps[3] = Point(958, 10176);\n    new ShapeRef(router, polygon, 684);\n\n    // shapeRef685\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(1548, 10176);\n    polygon.ps[1] = Point(1548, 10238);\n    polygon.ps[2] = Point(1486, 10238);\n    polygon.ps[3] = Point(1486, 10176);\n    new ShapeRef(router, polygon, 685);\n\n    // shapeRef686\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(2142, 10176);\n    polygon.ps[1] = Point(2142, 10238);\n    polygon.ps[2] = Point(2080, 10238);\n    polygon.ps[3] = Point(2080, 10176);\n    new ShapeRef(router, polygon, 686);\n\n    // shapeRef687\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(10972.2, 6384.51);\n    polygon.ps[1] = Point(10972.2, 6446.51);\n    polygon.ps[2] = Point(10910.2, 6446.51);\n    polygon.ps[3] = Point(10910.2, 6384.51);\n    new ShapeRef(router, polygon, 687);\n\n    // shapeRef688\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(10972.2, 5725.9);\n    polygon.ps[1] = Point(10972.2, 5787.9);\n    polygon.ps[2] = Point(10910.2, 5787.9);\n    polygon.ps[3] = Point(10910.2, 5725.9);\n    new ShapeRef(router, polygon, 688);\n\n    // shapeRef689\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(10972.2, 5382.67);\n    polygon.ps[1] = Point(10972.2, 5444.67);\n    polygon.ps[2] = Point(10910.2, 5444.67);\n    polygon.ps[3] = Point(10910.2, 5382.67);\n    new ShapeRef(router, polygon, 689);\n\n    // shapeRef690\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(10972.2, 5138.4);\n    polygon.ps[1] = Point(10972.2, 5200.4);\n    polygon.ps[2] = Point(10910.2, 5200.4);\n    polygon.ps[3] = Point(10910.2, 5138.4);\n    new ShapeRef(router, polygon, 690);\n\n    // shapeRef691\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(10972.2, 4643.4);\n    polygon.ps[1] = Point(10972.2, 4705.4);\n    polygon.ps[2] = Point(10910.2, 4705.4);\n    polygon.ps[3] = Point(10910.2, 4643.4);\n    new ShapeRef(router, polygon, 691);\n\n    // shapeRef692\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(11236.2, 5966.59);\n    polygon.ps[1] = Point(11236.2, 6028.59);\n    polygon.ps[2] = Point(11174.2, 6028.59);\n    polygon.ps[3] = Point(11174.2, 5966.59);\n    new ShapeRef(router, polygon, 692);\n\n    // shapeRef693\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(11236.2, 6384.51);\n    polygon.ps[1] = Point(11236.2, 6446.51);\n    polygon.ps[2] = Point(11174.2, 6446.51);\n    polygon.ps[3] = Point(11174.2, 6384.51);\n    new ShapeRef(router, polygon, 693);\n\n    // shapeRef694\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(11658.1, 6757.21);\n    polygon.ps[1] = Point(11658.1, 6819.21);\n    polygon.ps[2] = Point(11596.1, 6819.21);\n    polygon.ps[3] = Point(11596.1, 6757.21);\n    new ShapeRef(router, polygon, 694);\n\n    // shapeRef695\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(10013.7, 6417.51);\n    polygon.ps[1] = Point(10013.7, 6479.51);\n    polygon.ps[2] = Point(9951.69, 6479.51);\n    polygon.ps[3] = Point(9951.69, 6417.51);\n    new ShapeRef(router, polygon, 695);\n\n    // shapeRef696\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(10013.7, 6058.29);\n    polygon.ps[1] = Point(10013.7, 6120.29);\n    polygon.ps[2] = Point(9951.69, 6120.29);\n    polygon.ps[3] = Point(9951.69, 6058.29);\n    new ShapeRef(router, polygon, 696);\n\n    // shapeRef697\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(10013.7, 4478.4);\n    polygon.ps[1] = Point(10013.7, 4540.4);\n    polygon.ps[2] = Point(9951.69, 4540.4);\n    polygon.ps[3] = Point(9951.69, 4478.4);\n    new ShapeRef(router, polygon, 697);\n\n    // shapeRef698\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(10013.7, 3534.51);\n    polygon.ps[1] = Point(10013.7, 3596.51);\n    polygon.ps[2] = Point(9951.69, 3596.51);\n    polygon.ps[3] = Point(9951.69, 3534.51);\n    new ShapeRef(router, polygon, 698);\n\n    // shapeRef699\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(11658.1, 6384.51);\n    polygon.ps[1] = Point(11658.1, 6446.51);\n    polygon.ps[2] = Point(11596.1, 6446.51);\n    polygon.ps[3] = Point(11596.1, 6384.51);\n    new ShapeRef(router, polygon, 699);\n\n    // shapeRef700\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(11658.1, 5725.9);\n    polygon.ps[1] = Point(11658.1, 5787.9);\n    polygon.ps[2] = Point(11596.1, 5787.9);\n    polygon.ps[3] = Point(11596.1, 5725.9);\n    new ShapeRef(router, polygon, 700);\n\n    // shapeRef701\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(11658.1, 5382.67);\n    polygon.ps[1] = Point(11658.1, 5444.67);\n    polygon.ps[2] = Point(11596.1, 5444.67);\n    polygon.ps[3] = Point(11596.1, 5382.67);\n    new ShapeRef(router, polygon, 701);\n\n    // shapeRef702\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(11658.1, 5138.4);\n    polygon.ps[1] = Point(11658.1, 5200.4);\n    polygon.ps[2] = Point(11596.1, 5200.4);\n    polygon.ps[3] = Point(11596.1, 5138.4);\n    new ShapeRef(router, polygon, 702);\n\n    // shapeRef703\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(11658.1, 4577.4);\n    polygon.ps[1] = Point(11658.1, 4639.4);\n    polygon.ps[2] = Point(11596.1, 4639.4);\n    polygon.ps[3] = Point(11596.1, 4577.4);\n    new ShapeRef(router, polygon, 703);\n\n    // shapeRef704\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(11658.1, 3534.51);\n    polygon.ps[1] = Point(11658.1, 3596.51);\n    polygon.ps[2] = Point(11596.1, 3596.51);\n    polygon.ps[3] = Point(11596.1, 3534.51);\n    new ShapeRef(router, polygon, 704);\n\n    // shapeRef705\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(11988.1, 5006.4);\n    polygon.ps[1] = Point(11988.1, 5068.4);\n    polygon.ps[2] = Point(11926.1, 5068.4);\n    polygon.ps[3] = Point(11926.1, 5006.4);\n    new ShapeRef(router, polygon, 705);\n\n    // shapeRef706\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(12219.1, 3996.51);\n    polygon.ps[1] = Point(12219.1, 4058.51);\n    polygon.ps[2] = Point(12157.1, 4058.51);\n    polygon.ps[3] = Point(12157.1, 3996.51);\n    new ShapeRef(router, polygon, 706);\n\n    // shapeRef707\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(12219.1, 5006.4);\n    polygon.ps[1] = Point(12219.1, 5068.4);\n    polygon.ps[2] = Point(12157.1, 5068.4);\n    polygon.ps[3] = Point(12157.1, 5006.4);\n    new ShapeRef(router, polygon, 707);\n\n    // shapeRef708\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(12219.1, 3534.51);\n    polygon.ps[1] = Point(12219.1, 3596.51);\n    polygon.ps[2] = Point(12157.1, 3596.51);\n    polygon.ps[3] = Point(12157.1, 3534.51);\n    new ShapeRef(router, polygon, 708);\n\n    // shapeRef709\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(12986.5, 3534.51);\n    polygon.ps[1] = Point(12986.5, 3596.51);\n    polygon.ps[2] = Point(12924.5, 3596.51);\n    polygon.ps[3] = Point(12924.5, 3534.51);\n    new ShapeRef(router, polygon, 709);\n\n    // shapeRef710\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(17871.5, 2044.29);\n    polygon.ps[1] = Point(17871.5, 2106.29);\n    polygon.ps[2] = Point(17809.5, 2106.29);\n    polygon.ps[3] = Point(17809.5, 2044.29);\n    new ShapeRef(router, polygon, 710);\n\n    // shapeRef711\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(17640.5, 2044.29);\n    polygon.ps[1] = Point(17640.5, 2106.29);\n    polygon.ps[2] = Point(17578.5, 2106.29);\n    polygon.ps[3] = Point(17578.5, 2044.29);\n    new ShapeRef(router, polygon, 711);\n\n    // shapeRef712\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(17376.5, 2044.29);\n    polygon.ps[1] = Point(17376.5, 2106.29);\n    polygon.ps[2] = Point(17314.5, 2106.29);\n    polygon.ps[3] = Point(17314.5, 2044.29);\n    new ShapeRef(router, polygon, 712);\n\n    // shapeRef713\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(17017.8, 2044.29);\n    polygon.ps[1] = Point(17017.8, 2106.29);\n    polygon.ps[2] = Point(16955.8, 2106.29);\n    polygon.ps[3] = Point(16955.8, 2044.29);\n    new ShapeRef(router, polygon, 713);\n\n    // shapeRef714\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(16753.8, 2044.29);\n    polygon.ps[1] = Point(16753.8, 2106.29);\n    polygon.ps[2] = Point(16691.8, 2106.29);\n    polygon.ps[3] = Point(16691.8, 2044.29);\n    new ShapeRef(router, polygon, 714);\n\n    // shapeRef715\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(16588.8, 2044.29);\n    polygon.ps[1] = Point(16588.8, 2106.29);\n    polygon.ps[2] = Point(16526.8, 2106.29);\n    polygon.ps[3] = Point(16526.8, 2044.29);\n    new ShapeRef(router, polygon, 715);\n\n    // shapeRef716\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(16262.6, 2044.29);\n    polygon.ps[1] = Point(16262.6, 2106.29);\n    polygon.ps[2] = Point(16200.6, 2106.29);\n    polygon.ps[3] = Point(16200.6, 2044.29);\n    new ShapeRef(router, polygon, 716);\n\n    // shapeRef717\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(15932.6, 2044.29);\n    polygon.ps[1] = Point(15932.6, 2106.29);\n    polygon.ps[2] = Point(15870.6, 2106.29);\n    polygon.ps[3] = Point(15870.6, 2044.29);\n    new ShapeRef(router, polygon, 717);\n\n    // shapeRef718\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(15270.5, 2044.29);\n    polygon.ps[1] = Point(15270.5, 2106.29);\n    polygon.ps[2] = Point(15208.5, 2106.29);\n    polygon.ps[3] = Point(15208.5, 2044.29);\n    new ShapeRef(router, polygon, 718);\n\n    // shapeRef719\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(15270.5, 1780.29);\n    polygon.ps[1] = Point(15270.5, 1842.29);\n    polygon.ps[2] = Point(15208.5, 1842.29);\n    polygon.ps[3] = Point(15208.5, 1780.29);\n    new ShapeRef(router, polygon, 719);\n\n    // shapeRef720\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(18756.5, 10651.3);\n    polygon.ps[1] = Point(18756.5, 10713.3);\n    polygon.ps[2] = Point(18694.5, 10713.3);\n    polygon.ps[3] = Point(18694.5, 10651.3);\n    new ShapeRef(router, polygon, 720);\n\n    // shapeRef721\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(18756.5, 10242);\n    polygon.ps[1] = Point(18756.5, 10304);\n    polygon.ps[2] = Point(18694.5, 10304);\n    polygon.ps[3] = Point(18694.5, 10242);\n    new ShapeRef(router, polygon, 721);\n\n    // shapeRef722\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(18756.5, 9644.42);\n    polygon.ps[1] = Point(18756.5, 9706.42);\n    polygon.ps[2] = Point(18694.5, 9706.42);\n    polygon.ps[3] = Point(18694.5, 9644.42);\n    new ShapeRef(router, polygon, 722);\n\n    // shapeRef723\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(18756.5, 9149.42);\n    polygon.ps[1] = Point(18756.5, 9211.42);\n    polygon.ps[2] = Point(18694.5, 9211.42);\n    polygon.ps[3] = Point(18694.5, 9149.42);\n    new ShapeRef(router, polygon, 723);\n\n    // shapeRef724\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(18756.5, 8611.22);\n    polygon.ps[1] = Point(18756.5, 8673.22);\n    polygon.ps[2] = Point(18694.5, 8673.22);\n    polygon.ps[3] = Point(18694.5, 8611.22);\n    new ShapeRef(router, polygon, 724);\n\n    // shapeRef725\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(18756.5, 8218.99);\n    polygon.ps[1] = Point(18756.5, 8280.99);\n    polygon.ps[2] = Point(18694.5, 8280.99);\n    polygon.ps[3] = Point(18694.5, 8218.99);\n    new ShapeRef(router, polygon, 725);\n\n    // shapeRef726\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(18756.5, 7581.79);\n    polygon.ps[1] = Point(18756.5, 7643.79);\n    polygon.ps[2] = Point(18694.5, 7643.79);\n    polygon.ps[3] = Point(18694.5, 7581.79);\n    new ShapeRef(router, polygon, 726);\n\n    // shapeRef727\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(18756.5, 6757.21);\n    polygon.ps[1] = Point(18756.5, 6819.21);\n    polygon.ps[2] = Point(18694.5, 6819.21);\n    polygon.ps[3] = Point(18694.5, 6757.21);\n    new ShapeRef(router, polygon, 727);\n\n    // shapeRef728\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(3957, 394.265);\n    polygon.ps[1] = Point(3957, 456.265);\n    polygon.ps[2] = Point(3895, 456.265);\n    polygon.ps[3] = Point(3895, 394.265);\n    new ShapeRef(router, polygon, 728);\n\n    // shapeRef729\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(4254, 394.265);\n    polygon.ps[1] = Point(4254, 456.265);\n    polygon.ps[2] = Point(4192, 456.265);\n    polygon.ps[3] = Point(4192, 394.265);\n    new ShapeRef(router, polygon, 729);\n\n    // shapeRef730\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(4584, 394.265);\n    polygon.ps[1] = Point(4584, 456.265);\n    polygon.ps[2] = Point(4522, 456.265);\n    polygon.ps[3] = Point(4522, 394.265);\n    new ShapeRef(router, polygon, 730);\n\n    // shapeRef731\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(4947, 394.265);\n    polygon.ps[1] = Point(4947, 456.265);\n    polygon.ps[2] = Point(4885, 456.265);\n    polygon.ps[3] = Point(4885, 394.265);\n    new ShapeRef(router, polygon, 731);\n\n    // shapeRef732\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(5659.1, 394.265);\n    polygon.ps[1] = Point(5659.1, 456.265);\n    polygon.ps[2] = Point(5597.1, 456.265);\n    polygon.ps[3] = Point(5597.1, 394.265);\n    new ShapeRef(router, polygon, 732);\n\n    // shapeRef733\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(5277, 282.265);\n    polygon.ps[1] = Point(5277, 344.265);\n    polygon.ps[2] = Point(5215, 344.265);\n    polygon.ps[3] = Point(5215, 282.265);\n    new ShapeRef(router, polygon, 733);\n\n    // shapeRef734\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(5659.1, 282.265);\n    polygon.ps[1] = Point(5659.1, 344.265);\n    polygon.ps[2] = Point(5597.1, 344.265);\n    polygon.ps[3] = Point(5597.1, 282.265);\n    new ShapeRef(router, polygon, 734);\n\n    // shapeRef735\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(5857.1, 282.265);\n    polygon.ps[1] = Point(5857.1, 344.265);\n    polygon.ps[2] = Point(5795.1, 344.265);\n    polygon.ps[3] = Point(5795.1, 282.265);\n    new ShapeRef(router, polygon, 735);\n\n    // shapeRef736\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(6121.1, 282.265);\n    polygon.ps[1] = Point(6121.1, 344.265);\n    polygon.ps[2] = Point(6059.1, 344.265);\n    polygon.ps[3] = Point(6059.1, 282.265);\n    new ShapeRef(router, polygon, 736);\n\n    // shapeRef737\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(6319.1, 282.265);\n    polygon.ps[1] = Point(6319.1, 344.265);\n    polygon.ps[2] = Point(6257.1, 344.265);\n    polygon.ps[3] = Point(6257.1, 282.265);\n    new ShapeRef(router, polygon, 737);\n\n    // shapeRef738\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(6616.1, 282.265);\n    polygon.ps[1] = Point(6616.1, 344.265);\n    polygon.ps[2] = Point(6554.1, 344.265);\n    polygon.ps[3] = Point(6554.1, 282.265);\n    new ShapeRef(router, polygon, 738);\n\n    // shapeRef739\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(6880.1, 282.265);\n    polygon.ps[1] = Point(6880.1, 344.265);\n    polygon.ps[2] = Point(6818.1, 344.265);\n    polygon.ps[3] = Point(6818.1, 282.265);\n    new ShapeRef(router, polygon, 739);\n\n    // shapeRef740\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(7210.1, 282.265);\n    polygon.ps[1] = Point(7210.1, 344.265);\n    polygon.ps[2] = Point(7148.1, 344.265);\n    polygon.ps[3] = Point(7148.1, 282.265);\n    new ShapeRef(router, polygon, 740);\n\n    // shapeRef741\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(7573.1, 282.265);\n    polygon.ps[1] = Point(7573.1, 344.265);\n    polygon.ps[2] = Point(7511.1, 344.265);\n    polygon.ps[3] = Point(7511.1, 282.265);\n    new ShapeRef(router, polygon, 741);\n\n    // shapeRef742\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(12186.1, 11984.3);\n    polygon.ps[1] = Point(12186.1, 12046.3);\n    polygon.ps[2] = Point(12124.1, 12046.3);\n    polygon.ps[3] = Point(12124.1, 11984.3);\n    new ShapeRef(router, polygon, 742);\n\n    // shapeRef743\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(11889.1, 11984.3);\n    polygon.ps[1] = Point(11889.1, 12046.3);\n    polygon.ps[2] = Point(11827.1, 12046.3);\n    polygon.ps[3] = Point(11827.1, 11984.3);\n    new ShapeRef(router, polygon, 743);\n\n    // shapeRef744\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(11889.1, 11355.8);\n    polygon.ps[1] = Point(11889.1, 11417.8);\n    polygon.ps[2] = Point(11827.1, 11417.8);\n    polygon.ps[3] = Point(11827.1, 11355.8);\n    new ShapeRef(router, polygon, 744);\n\n    // shapeRef745\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(11460.1, 11984.3);\n    polygon.ps[1] = Point(11460.1, 12046.3);\n    polygon.ps[2] = Point(11398.1, 12046.3);\n    polygon.ps[3] = Point(11398.1, 11984.3);\n    new ShapeRef(router, polygon, 745);\n\n    // shapeRef746\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(11460.1, 11355.8);\n    polygon.ps[1] = Point(11460.1, 11417.8);\n    polygon.ps[2] = Point(11398.1, 11417.8);\n    polygon.ps[3] = Point(11398.1, 11355.8);\n    new ShapeRef(router, polygon, 746);\n\n    // shapeRef747\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(11460.1, 10916.6);\n    polygon.ps[1] = Point(11460.1, 10978.6);\n    polygon.ps[2] = Point(11398.1, 10978.6);\n    polygon.ps[3] = Point(11398.1, 10916.6);\n    new ShapeRef(router, polygon, 747);\n\n    // shapeRef748\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(11460.1, 10506);\n    polygon.ps[1] = Point(11460.1, 10568);\n    polygon.ps[2] = Point(11398.1, 10568);\n    polygon.ps[3] = Point(11398.1, 10506);\n    new ShapeRef(router, polygon, 748);\n\n    // shapeRef749\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(11889.1, 10209);\n    polygon.ps[1] = Point(11889.1, 10271);\n    polygon.ps[2] = Point(11827.1, 10271);\n    polygon.ps[3] = Point(11827.1, 10209);\n    new ShapeRef(router, polygon, 749);\n\n    // shapeRef750\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(11460.1, 10209);\n    polygon.ps[1] = Point(11460.1, 10271);\n    polygon.ps[2] = Point(11398.1, 10271);\n    polygon.ps[3] = Point(11398.1, 10209);\n    new ShapeRef(router, polygon, 750);\n\n    // shapeRef751\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(11460.1, 9182.42);\n    polygon.ps[1] = Point(11460.1, 9244.42);\n    polygon.ps[2] = Point(11398.1, 9244.42);\n    polygon.ps[3] = Point(11398.1, 9182.42);\n    new ShapeRef(router, polygon, 751);\n\n    // shapeRef752\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(12920.5, 9182.42);\n    polygon.ps[1] = Point(12920.5, 9244.42);\n    polygon.ps[2] = Point(12858.5, 9244.42);\n    polygon.ps[3] = Point(12858.5, 9182.42);\n    new ShapeRef(router, polygon, 752);\n\n    // shapeRef753\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(4683, 4511.4);\n    polygon.ps[1] = Point(4683, 4573.4);\n    polygon.ps[2] = Point(4621, 4573.4);\n    polygon.ps[3] = Point(4621, 4511.4);\n    new ShapeRef(router, polygon, 753);\n\n    // shapeRef754\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(17706.5, 11829.9);\n    polygon.ps[1] = Point(17706.5, 11891.9);\n    polygon.ps[2] = Point(17644.5, 11891.9);\n    polygon.ps[3] = Point(17644.5, 11829.9);\n    new ShapeRef(router, polygon, 754);\n\n    // shapeRef755\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(17409.5, 11829.9);\n    polygon.ps[1] = Point(17409.5, 11891.9);\n    polygon.ps[2] = Point(17347.5, 11891.9);\n    polygon.ps[3] = Point(17347.5, 11829.9);\n    new ShapeRef(router, polygon, 755);\n\n    // shapeRef756\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(16984.8, 11829.9);\n    polygon.ps[1] = Point(16984.8, 11891.9);\n    polygon.ps[2] = Point(16922.8, 11891.9);\n    polygon.ps[3] = Point(16922.8, 11829.9);\n    new ShapeRef(router, polygon, 756);\n\n    // shapeRef757\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(16295.6, 2548.29);\n    polygon.ps[1] = Point(16295.6, 2610.29);\n    polygon.ps[2] = Point(16233.6, 2610.29);\n    polygon.ps[3] = Point(16233.6, 2548.29);\n    new ShapeRef(router, polygon, 757);\n\n    // shapeRef758\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(15965.6, 2548.29);\n    polygon.ps[1] = Point(15965.6, 2610.29);\n    polygon.ps[2] = Point(15903.6, 2610.29);\n    polygon.ps[3] = Point(15903.6, 2548.29);\n    new ShapeRef(router, polygon, 758);\n\n    // shapeRef759\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(15270.5, 2548.29);\n    polygon.ps[1] = Point(15270.5, 2610.29);\n    polygon.ps[2] = Point(15208.5, 2610.29);\n    polygon.ps[3] = Point(15208.5, 2548.29);\n    new ShapeRef(router, polygon, 759);\n\n    // shapeRef760\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(14629, 2548.29);\n    polygon.ps[1] = Point(14629, 2610.29);\n    polygon.ps[2] = Point(14567, 2610.29);\n    polygon.ps[3] = Point(14567, 2548.29);\n    new ShapeRef(router, polygon, 760);\n\n    // shapeRef761\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(13837, 2845.29);\n    polygon.ps[1] = Point(13837, 2907.29);\n    polygon.ps[2] = Point(13775, 2907.29);\n    polygon.ps[3] = Point(13775, 2845.29);\n    new ShapeRef(router, polygon, 761);\n\n    // shapeRef762\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(14200, 2548.29);\n    polygon.ps[1] = Point(14200, 2610.29);\n    polygon.ps[2] = Point(14138, 2610.29);\n    polygon.ps[3] = Point(14138, 2548.29);\n    new ShapeRef(router, polygon, 762);\n\n    // shapeRef763\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(18498.5, 9644.42);\n    polygon.ps[1] = Point(18498.5, 9706.42);\n    polygon.ps[2] = Point(18436.5, 9706.42);\n    polygon.ps[3] = Point(18436.5, 9644.42);\n    new ShapeRef(router, polygon, 763);\n\n    // shapeRef764\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(18300.5, 9644.42);\n    polygon.ps[1] = Point(18300.5, 9706.42);\n    polygon.ps[2] = Point(18238.5, 9706.42);\n    polygon.ps[3] = Point(18238.5, 9644.42);\n    new ShapeRef(router, polygon, 764);\n\n    // shapeRef765\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(18069.5, 9644.42);\n    polygon.ps[1] = Point(18069.5, 9706.42);\n    polygon.ps[2] = Point(18007.5, 9706.42);\n    polygon.ps[3] = Point(18007.5, 9644.42);\n    new ShapeRef(router, polygon, 765);\n\n    // shapeRef766\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(17838.5, 9644.42);\n    polygon.ps[1] = Point(17838.5, 9706.42);\n    polygon.ps[2] = Point(17776.5, 9706.42);\n    polygon.ps[3] = Point(17776.5, 9644.42);\n    new ShapeRef(router, polygon, 766);\n\n    // shapeRef767\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(17673.5, 9644.42);\n    polygon.ps[1] = Point(17673.5, 9706.42);\n    polygon.ps[2] = Point(17611.5, 9706.42);\n    polygon.ps[3] = Point(17611.5, 9644.42);\n    new ShapeRef(router, polygon, 767);\n\n    // shapeRef768\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(17442.5, 9644.42);\n    polygon.ps[1] = Point(17442.5, 9706.42);\n    polygon.ps[2] = Point(17380.5, 9706.42);\n    polygon.ps[3] = Point(17380.5, 9644.42);\n    new ShapeRef(router, polygon, 768);\n\n    // shapeRef769\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(17083.8, 9644.42);\n    polygon.ps[1] = Point(17083.8, 9706.42);\n    polygon.ps[2] = Point(17021.8, 9706.42);\n    polygon.ps[3] = Point(17021.8, 9644.42);\n    new ShapeRef(router, polygon, 769);\n\n    // shapeRef770\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(17083.8, 9083.42);\n    polygon.ps[1] = Point(17083.8, 9145.42);\n    polygon.ps[2] = Point(17021.8, 9145.42);\n    polygon.ps[3] = Point(17021.8, 9083.42);\n    new ShapeRef(router, polygon, 770);\n\n    // shapeRef771\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(17083.8, 8449.99);\n    polygon.ps[1] = Point(17083.8, 8511.99);\n    polygon.ps[2] = Point(17021.8, 8511.99);\n    polygon.ps[3] = Point(17021.8, 8449.99);\n    new ShapeRef(router, polygon, 771);\n\n    // shapeRef772\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(17083.8, 7878.79);\n    polygon.ps[1] = Point(17083.8, 7940.79);\n    polygon.ps[2] = Point(17021.8, 7940.79);\n    polygon.ps[3] = Point(17021.8, 7878.79);\n    new ShapeRef(router, polygon, 772);\n\n    // shapeRef773\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(17310.5, 1879.29);\n    polygon.ps[1] = Point(17310.5, 1941.29);\n    polygon.ps[2] = Point(17248.5, 1941.29);\n    polygon.ps[3] = Point(17248.5, 1879.29);\n    new ShapeRef(router, polygon, 773);\n\n    // shapeRef774\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(17574.5, 1513.29);\n    polygon.ps[1] = Point(17574.5, 1575.29);\n    polygon.ps[2] = Point(17512.5, 1575.29);\n    polygon.ps[3] = Point(17512.5, 1513.29);\n    new ShapeRef(router, polygon, 774);\n\n    // shapeRef775\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(17310.5, 1513.29);\n    polygon.ps[1] = Point(17310.5, 1575.29);\n    polygon.ps[2] = Point(17248.5, 1575.29);\n    polygon.ps[3] = Point(17248.5, 1513.29);\n    new ShapeRef(router, polygon, 775);\n\n    // shapeRef776\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(16687.8, 1513.29);\n    polygon.ps[1] = Point(16687.8, 1575.29);\n    polygon.ps[2] = Point(16625.8, 1575.29);\n    polygon.ps[3] = Point(16625.8, 1513.29);\n    new ShapeRef(router, polygon, 776);\n\n    // shapeRef777\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(16687.8, 1249.29);\n    polygon.ps[1] = Point(16687.8, 1311.29);\n    polygon.ps[2] = Point(16625.8, 1311.29);\n    polygon.ps[3] = Point(16625.8, 1249.29);\n    new ShapeRef(router, polygon, 777);\n\n    // shapeRef778\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(16918.8, 1249.29);\n    polygon.ps[1] = Point(16918.8, 1311.29);\n    polygon.ps[2] = Point(16856.8, 1311.29);\n    polygon.ps[3] = Point(16856.8, 1249.29);\n    new ShapeRef(router, polygon, 778);\n\n    // shapeRef779\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(17310.5, 1018.29);\n    polygon.ps[1] = Point(17310.5, 1080.29);\n    polygon.ps[2] = Point(17248.5, 1080.29);\n    polygon.ps[3] = Point(17248.5, 1018.29);\n    new ShapeRef(router, polygon, 779);\n\n    // shapeRef780\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(17310.5, 645.091);\n    polygon.ps[1] = Point(17310.5, 707.091);\n    polygon.ps[2] = Point(17248.5, 707.091);\n    polygon.ps[3] = Point(17248.5, 645.091);\n    new ShapeRef(router, polygon, 780);\n\n    // shapeRef781\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(16918.8, 427.265);\n    polygon.ps[1] = Point(16918.8, 489.265);\n    polygon.ps[2] = Point(16856.8, 489.265);\n    polygon.ps[3] = Point(16856.8, 427.265);\n    new ShapeRef(router, polygon, 781);\n\n    // shapeRef782\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(16687.8, 427.265);\n    polygon.ps[1] = Point(16687.8, 489.265);\n    polygon.ps[2] = Point(16625.8, 489.265);\n    polygon.ps[3] = Point(16625.8, 427.265);\n    new ShapeRef(router, polygon, 782);\n\n    // shapeRef783\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(5890.1, 12427.7);\n    polygon.ps[1] = Point(5890.1, 12489.7);\n    polygon.ps[2] = Point(5828.1, 12489.7);\n    polygon.ps[3] = Point(5828.1, 12427.7);\n    new ShapeRef(router, polygon, 783);\n\n    // shapeRef784\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(5593.1, 12427.7);\n    polygon.ps[1] = Point(5593.1, 12489.7);\n    polygon.ps[2] = Point(5531.1, 12489.7);\n    polygon.ps[3] = Point(5531.1, 12427.7);\n    new ShapeRef(router, polygon, 784);\n\n    // shapeRef785\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(5178, 12427.7);\n    polygon.ps[1] = Point(5178, 12489.7);\n    polygon.ps[2] = Point(5116, 12489.7);\n    polygon.ps[3] = Point(5116, 12427.7);\n    new ShapeRef(router, polygon, 785);\n\n    // shapeRef786\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(4980, 11796.9);\n    polygon.ps[1] = Point(4980, 11858.9);\n    polygon.ps[2] = Point(4918, 11858.9);\n    polygon.ps[3] = Point(4918, 11796.9);\n    new ShapeRef(router, polygon, 786);\n\n    // shapeRef787\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(4980, 11147.6);\n    polygon.ps[1] = Point(4980, 11209.6);\n    polygon.ps[2] = Point(4918, 11209.6);\n    polygon.ps[3] = Point(4918, 11147.6);\n    new ShapeRef(router, polygon, 787);\n\n    // shapeRef788\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(4980, 10717.3);\n    polygon.ps[1] = Point(4980, 10779.3);\n    polygon.ps[2] = Point(4918, 10779.3);\n    polygon.ps[3] = Point(4918, 10717.3);\n    new ShapeRef(router, polygon, 788);\n\n    // shapeRef789\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(4980, 10110);\n    polygon.ps[1] = Point(4980, 10172);\n    polygon.ps[2] = Point(4918, 10172);\n    polygon.ps[3] = Point(4918, 10110);\n    new ShapeRef(router, polygon, 789);\n\n    // shapeRef790\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(4617, 10110);\n    polygon.ps[1] = Point(4617, 10172);\n    polygon.ps[2] = Point(4555, 10172);\n    polygon.ps[3] = Point(4555, 10110);\n    new ShapeRef(router, polygon, 790);\n\n    // shapeRef791\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(4320, 10341);\n    polygon.ps[1] = Point(4320, 10403);\n    polygon.ps[2] = Point(4258, 10403);\n    polygon.ps[3] = Point(4258, 10341);\n    new ShapeRef(router, polygon, 791);\n\n    // shapeRef792\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(4617, 9545.42);\n    polygon.ps[1] = Point(4617, 9607.42);\n    polygon.ps[2] = Point(4555, 9607.42);\n    polygon.ps[3] = Point(4555, 9545.42);\n    new ShapeRef(router, polygon, 792);\n\n    // shapeRef793\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(3429, 10618.3);\n    polygon.ps[1] = Point(3429, 10680.3);\n    polygon.ps[2] = Point(3367, 10680.3);\n    polygon.ps[3] = Point(3367, 10618.3);\n    new ShapeRef(router, polygon, 793);\n\n    // shapeRef794\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(4056, 10618.3);\n    polygon.ps[1] = Point(4056, 10680.3);\n    polygon.ps[2] = Point(3994, 10680.3);\n    polygon.ps[3] = Point(3994, 10618.3);\n    new ShapeRef(router, polygon, 794);\n\n    // shapeRef795\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(3429, 10275);\n    polygon.ps[1] = Point(3429, 10337);\n    polygon.ps[2] = Point(3367, 10337);\n    polygon.ps[3] = Point(3367, 10275);\n    new ShapeRef(router, polygon, 795);\n\n    // shapeRef796\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(3429, 9879.02);\n    polygon.ps[1] = Point(3429, 9941.02);\n    polygon.ps[2] = Point(3367, 9941.02);\n    polygon.ps[3] = Point(3367, 9879.02);\n    new ShapeRef(router, polygon, 796);\n\n    // shapeRef797\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(3429, 9380.42);\n    polygon.ps[1] = Point(3429, 9442.42);\n    polygon.ps[2] = Point(3367, 9442.42);\n    polygon.ps[3] = Point(3367, 9380.42);\n    new ShapeRef(router, polygon, 797);\n\n    // shapeRef798\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(3429, 9017.42);\n    polygon.ps[1] = Point(3429, 9079.42);\n    polygon.ps[2] = Point(3367, 9079.42);\n    polygon.ps[3] = Point(3367, 9017.42);\n    new ShapeRef(router, polygon, 798);\n\n    // shapeRef799\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(4056, 10275);\n    polygon.ps[1] = Point(4056, 10337);\n    polygon.ps[2] = Point(3994, 10337);\n    polygon.ps[3] = Point(3994, 10275);\n    new ShapeRef(router, polygon, 799);\n\n    // shapeRef800\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(4056, 9879.02);\n    polygon.ps[1] = Point(4056, 9941.02);\n    polygon.ps[2] = Point(3994, 9941.02);\n    polygon.ps[3] = Point(3994, 9879.02);\n    new ShapeRef(router, polygon, 800);\n\n    // shapeRef801\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(4056, 9380.42);\n    polygon.ps[1] = Point(4056, 9442.42);\n    polygon.ps[2] = Point(3994, 9442.42);\n    polygon.ps[3] = Point(3994, 9380.42);\n    new ShapeRef(router, polygon, 801);\n\n    // shapeRef802\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(4056, 9017.42);\n    polygon.ps[1] = Point(4056, 9079.42);\n    polygon.ps[2] = Point(3994, 9079.42);\n    polygon.ps[3] = Point(3994, 9017.42);\n    new ShapeRef(router, polygon, 802);\n\n    // shapeRef803\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(4056, 8548.99);\n    polygon.ps[1] = Point(4056, 8610.99);\n    polygon.ps[2] = Point(3994, 8610.99);\n    polygon.ps[3] = Point(3994, 8548.99);\n    new ShapeRef(router, polygon, 803);\n\n    // shapeRef804\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(4056, 8142.79);\n    polygon.ps[1] = Point(4056, 8204.79);\n    polygon.ps[2] = Point(3994, 8204.79);\n    polygon.ps[3] = Point(3994, 8142.79);\n    new ShapeRef(router, polygon, 804);\n\n    // shapeRef805\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(4485, 8142.79);\n    polygon.ps[1] = Point(4485, 8204.79);\n    polygon.ps[2] = Point(4423, 8204.79);\n    polygon.ps[3] = Point(4423, 8142.79);\n    new ShapeRef(router, polygon, 805);\n\n    // shapeRef806\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(4485, 7614.79);\n    polygon.ps[1] = Point(4485, 7676.79);\n    polygon.ps[2] = Point(4423, 7676.79);\n    polygon.ps[3] = Point(4423, 7614.79);\n    new ShapeRef(router, polygon, 806);\n\n    // shapeRef807\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(4056, 7614.79);\n    polygon.ps[1] = Point(4056, 7676.79);\n    polygon.ps[2] = Point(3994, 7676.79);\n    polygon.ps[3] = Point(3994, 7614.79);\n    new ShapeRef(router, polygon, 807);\n\n    // shapeRef808\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(3099, 9380.42);\n    polygon.ps[1] = Point(3099, 9442.42);\n    polygon.ps[2] = Point(3037, 9442.42);\n    polygon.ps[3] = Point(3037, 9380.42);\n    new ShapeRef(router, polygon, 808);\n\n    // shapeRef809\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(3099, 9017.42);\n    polygon.ps[1] = Point(3099, 9079.42);\n    polygon.ps[2] = Point(3037, 9079.42);\n    polygon.ps[3] = Point(3037, 9017.42);\n    new ShapeRef(router, polygon, 809);\n\n    // shapeRef810\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(3099, 8548.99);\n    polygon.ps[1] = Point(3099, 8610.99);\n    polygon.ps[2] = Point(3037, 8610.99);\n    polygon.ps[3] = Point(3037, 8548.99);\n    new ShapeRef(router, polygon, 810);\n\n    // shapeRef811\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(3759, 8548.99);\n    polygon.ps[1] = Point(3759, 8610.99);\n    polygon.ps[2] = Point(3697, 8610.99);\n    polygon.ps[3] = Point(3697, 8548.99);\n    new ShapeRef(router, polygon, 811);\n\n    // shapeRef812\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(3759, 8142.79);\n    polygon.ps[1] = Point(3759, 8204.79);\n    polygon.ps[2] = Point(3697, 8204.79);\n    polygon.ps[3] = Point(3697, 8142.79);\n    new ShapeRef(router, polygon, 812);\n\n    // shapeRef813\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(3099, 8142.79);\n    polygon.ps[1] = Point(3099, 8204.79);\n    polygon.ps[2] = Point(3037, 8204.79);\n    polygon.ps[3] = Point(3037, 8142.79);\n    new ShapeRef(router, polygon, 813);\n\n    // shapeRef814\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(3099, 7614.79);\n    polygon.ps[1] = Point(3099, 7676.79);\n    polygon.ps[2] = Point(3037, 7676.79);\n    polygon.ps[3] = Point(3037, 7614.79);\n    new ShapeRef(router, polygon, 814);\n\n    // shapeRef815\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(3759, 7614.79);\n    polygon.ps[1] = Point(3759, 7676.79);\n    polygon.ps[2] = Point(3697, 7676.79);\n    polygon.ps[3] = Point(3697, 7614.79);\n    new ShapeRef(router, polygon, 815);\n\n    // shapeRef816\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(1614, 5933.59);\n    polygon.ps[1] = Point(1614, 5995.59);\n    polygon.ps[2] = Point(1552, 5995.59);\n    polygon.ps[3] = Point(1552, 5933.59);\n    new ShapeRef(router, polygon, 816);\n\n    // shapeRef817\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(1812, 6252.51);\n    polygon.ps[1] = Point(1812, 6314.51);\n    polygon.ps[2] = Point(1750, 6314.51);\n    polygon.ps[3] = Point(1750, 6252.51);\n    new ShapeRef(router, polygon, 817);\n\n    // shapeRef818\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(2175, 6252.51);\n    polygon.ps[1] = Point(2175, 6314.51);\n    polygon.ps[2] = Point(2113, 6314.51);\n    polygon.ps[3] = Point(2113, 6252.51);\n    new ShapeRef(router, polygon, 818);\n\n    // shapeRef819\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(2505, 6252.51);\n    polygon.ps[1] = Point(2505, 6314.51);\n    polygon.ps[2] = Point(2443, 6314.51);\n    polygon.ps[3] = Point(2443, 6252.51);\n    new ShapeRef(router, polygon, 819);\n\n    // shapeRef820\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(2934, 6252.51);\n    polygon.ps[1] = Point(2934, 6314.51);\n    polygon.ps[2] = Point(2872, 6314.51);\n    polygon.ps[3] = Point(2872, 6252.51);\n    new ShapeRef(router, polygon, 820);\n\n    // shapeRef821\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(3726, 6252.51);\n    polygon.ps[1] = Point(3726, 6314.51);\n    polygon.ps[2] = Point(3664, 6314.51);\n    polygon.ps[3] = Point(3664, 6252.51);\n    new ShapeRef(router, polygon, 821);\n\n    // shapeRef822\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(4287, 6252.51);\n    polygon.ps[1] = Point(4287, 6314.51);\n    polygon.ps[2] = Point(4225, 6314.51);\n    polygon.ps[3] = Point(4225, 6252.51);\n    new ShapeRef(router, polygon, 822);\n\n    // shapeRef823\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(228, 8383.99);\n    polygon.ps[1] = Point(228, 8445.99);\n    polygon.ps[2] = Point(166, 8445.99);\n    polygon.ps[3] = Point(166, 8383.99);\n    new ShapeRef(router, polygon, 823);\n\n    // shapeRef824\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(228, 7911.79);\n    polygon.ps[1] = Point(228, 7973.79);\n    polygon.ps[2] = Point(166, 7973.79);\n    polygon.ps[3] = Point(166, 7911.79);\n    new ShapeRef(router, polygon, 824);\n\n    // shapeRef825\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(228, 7394.4);\n    polygon.ps[1] = Point(228, 7456.4);\n    polygon.ps[2] = Point(166, 7456.4);\n    polygon.ps[3] = Point(166, 7394.4);\n    new ShapeRef(router, polygon, 825);\n\n    // shapeRef826\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(228, 6965.4);\n    polygon.ps[1] = Point(228, 7027.4);\n    polygon.ps[2] = Point(166, 7027.4);\n    polygon.ps[3] = Point(166, 6965.4);\n    new ShapeRef(router, polygon, 826);\n\n    // shapeRef827\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(228, 6417.51);\n    polygon.ps[1] = Point(228, 6479.51);\n    polygon.ps[2] = Point(166, 6479.51);\n    polygon.ps[3] = Point(166, 6417.51);\n    new ShapeRef(router, polygon, 827);\n\n    // shapeRef828\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(228, 6025.29);\n    polygon.ps[1] = Point(228, 6087.29);\n    polygon.ps[2] = Point(166, 6087.29);\n    polygon.ps[3] = Point(166, 6025.29);\n    new ShapeRef(router, polygon, 828);\n\n    // shapeRef829\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(228, 5626.9);\n    polygon.ps[1] = Point(228, 5688.9);\n    polygon.ps[2] = Point(166, 5688.9);\n    polygon.ps[3] = Point(166, 5626.9);\n    new ShapeRef(router, polygon, 829);\n\n    // shapeRef830\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(1416, 8482.99);\n    polygon.ps[1] = Point(1416, 8544.99);\n    polygon.ps[2] = Point(1354, 8544.99);\n    polygon.ps[3] = Point(1354, 8482.99);\n    new ShapeRef(router, polygon, 830);\n\n    // shapeRef831\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(1416, 6648.51);\n    polygon.ps[1] = Point(1416, 6710.51);\n    polygon.ps[2] = Point(1354, 6710.51);\n    polygon.ps[3] = Point(1354, 6648.51);\n    new ShapeRef(router, polygon, 831);\n\n    // shapeRef832\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(1416, 6252.51);\n    polygon.ps[1] = Point(1416, 6314.51);\n    polygon.ps[2] = Point(1354, 6314.51);\n    polygon.ps[3] = Point(1354, 6252.51);\n    new ShapeRef(router, polygon, 832);\n\n    // shapeRef833\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(4386, 12427.7);\n    polygon.ps[1] = Point(4386, 12489.7);\n    polygon.ps[2] = Point(4324, 12489.7);\n    polygon.ps[3] = Point(4324, 12427.7);\n    new ShapeRef(router, polygon, 833);\n\n    // shapeRef834\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(3693, 12427.7);\n    polygon.ps[1] = Point(3693, 12489.7);\n    polygon.ps[2] = Point(3631, 12489.7);\n    polygon.ps[3] = Point(3631, 12427.7);\n    new ShapeRef(router, polygon, 834);\n\n    // shapeRef835\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(3231, 12427.7);\n    polygon.ps[1] = Point(3231, 12489.7);\n    polygon.ps[2] = Point(3169, 12489.7);\n    polygon.ps[3] = Point(3169, 12427.7);\n    new ShapeRef(router, polygon, 835);\n\n    // shapeRef836\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(2736, 12427.7);\n    polygon.ps[1] = Point(2736, 12489.7);\n    polygon.ps[2] = Point(2674, 12489.7);\n    polygon.ps[3] = Point(2674, 12427.7);\n    new ShapeRef(router, polygon, 836);\n\n    // shapeRef837\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(2373, 12427.7);\n    polygon.ps[1] = Point(2373, 12489.7);\n    polygon.ps[2] = Point(2311, 12489.7);\n    polygon.ps[3] = Point(2311, 12427.7);\n    new ShapeRef(router, polygon, 837);\n\n    // shapeRef838\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(4056, 12017.3);\n    polygon.ps[1] = Point(4056, 12079.3);\n    polygon.ps[2] = Point(3994, 12079.3);\n    polygon.ps[3] = Point(3994, 12017.3);\n    new ShapeRef(router, polygon, 838);\n\n    // shapeRef839\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(3693, 12017.3);\n    polygon.ps[1] = Point(3693, 12079.3);\n    polygon.ps[2] = Point(3631, 12079.3);\n    polygon.ps[3] = Point(3631, 12017.3);\n    new ShapeRef(router, polygon, 839);\n\n    // shapeRef840\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(3231, 12017.3);\n    polygon.ps[1] = Point(3231, 12079.3);\n    polygon.ps[2] = Point(3169, 12079.3);\n    polygon.ps[3] = Point(3169, 12017.3);\n    new ShapeRef(router, polygon, 840);\n\n    // shapeRef841\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(2736, 12017.3);\n    polygon.ps[1] = Point(2736, 12079.3);\n    polygon.ps[2] = Point(2674, 12079.3);\n    polygon.ps[3] = Point(2674, 12017.3);\n    new ShapeRef(router, polygon, 841);\n\n    // shapeRef842\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(2373, 12017.3);\n    polygon.ps[1] = Point(2373, 12079.3);\n    polygon.ps[2] = Point(2311, 12079.3);\n    polygon.ps[3] = Point(2311, 12017.3);\n    new ShapeRef(router, polygon, 842);\n\n    // shapeRef843\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(1350, 8677.22);\n    polygon.ps[1] = Point(1350, 8739.22);\n    polygon.ps[2] = Point(1288, 8739.22);\n    polygon.ps[3] = Point(1288, 8677.22);\n    new ShapeRef(router, polygon, 843);\n\n    // shapeRef844\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(1911, 8677.22);\n    polygon.ps[1] = Point(1911, 8739.22);\n    polygon.ps[2] = Point(1849, 8739.22);\n    polygon.ps[3] = Point(1849, 8677.22);\n    new ShapeRef(router, polygon, 844);\n\n    // shapeRef845\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(1911, 8350.99);\n    polygon.ps[1] = Point(1911, 8412.99);\n    polygon.ps[2] = Point(1849, 8412.99);\n    polygon.ps[3] = Point(1849, 8350.99);\n    new ShapeRef(router, polygon, 845);\n\n    // shapeRef846\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(1350, 7845.79);\n    polygon.ps[1] = Point(1350, 7907.79);\n    polygon.ps[2] = Point(1288, 7907.79);\n    polygon.ps[3] = Point(1288, 7845.79);\n    new ShapeRef(router, polygon, 846);\n\n    // shapeRef847\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(1911, 7845.79);\n    polygon.ps[1] = Point(1911, 7907.79);\n    polygon.ps[2] = Point(1849, 7907.79);\n    polygon.ps[3] = Point(1849, 7845.79);\n    new ShapeRef(router, polygon, 847);\n\n    // shapeRef848\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(1911, 7394.4);\n    polygon.ps[1] = Point(1911, 7456.4);\n    polygon.ps[2] = Point(1849, 7456.4);\n    polygon.ps[3] = Point(1849, 7394.4);\n    new ShapeRef(router, polygon, 848);\n\n    // shapeRef849\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(1350, 7394.4);\n    polygon.ps[1] = Point(1350, 7456.4);\n    polygon.ps[2] = Point(1288, 7456.4);\n    polygon.ps[3] = Point(1288, 7394.4);\n    new ShapeRef(router, polygon, 849);\n\n    // shapeRef850\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(1350, 6998.4);\n    polygon.ps[1] = Point(1350, 7060.4);\n    polygon.ps[2] = Point(1288, 7060.4);\n    polygon.ps[3] = Point(1288, 6998.4);\n    new ShapeRef(router, polygon, 850);\n\n    // shapeRef851\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(1680, 6417.51);\n    polygon.ps[1] = Point(1680, 6479.51);\n    polygon.ps[2] = Point(1618, 6479.51);\n    polygon.ps[3] = Point(1618, 6417.51);\n    new ShapeRef(router, polygon, 851);\n\n    // shapeRef852\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(1911, 6417.51);\n    polygon.ps[1] = Point(1911, 6479.51);\n    polygon.ps[2] = Point(1849, 6479.51);\n    polygon.ps[3] = Point(1849, 6417.51);\n    new ShapeRef(router, polygon, 852);\n\n    // shapeRef853\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(3528, 6417.51);\n    polygon.ps[1] = Point(3528, 6479.51);\n    polygon.ps[2] = Point(3466, 6479.51);\n    polygon.ps[3] = Point(3466, 6417.51);\n    new ShapeRef(router, polygon, 853);\n\n    // shapeRef854\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8159.29, 4907.4);\n    polygon.ps[1] = Point(8159.29, 4969.4);\n    polygon.ps[2] = Point(8097.29, 4969.4);\n    polygon.ps[3] = Point(8097.29, 4907.4);\n    new ShapeRef(router, polygon, 854);\n\n    // shapeRef855\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(7862.29, 4907.4);\n    polygon.ps[1] = Point(7862.29, 4969.4);\n    polygon.ps[2] = Point(7800.29, 4969.4);\n    polygon.ps[3] = Point(7800.29, 4907.4);\n    new ShapeRef(router, polygon, 855);\n\n    // shapeRef856\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(7507.1, 4907.4);\n    polygon.ps[1] = Point(7507.1, 4969.4);\n    polygon.ps[2] = Point(7445.1, 4969.4);\n    polygon.ps[3] = Point(7445.1, 4907.4);\n    new ShapeRef(router, polygon, 856);\n\n    // shapeRef857\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(7111.1, 4907.4);\n    polygon.ps[1] = Point(7111.1, 4969.4);\n    polygon.ps[2] = Point(7049.1, 4969.4);\n    polygon.ps[3] = Point(7049.1, 4907.4);\n    new ShapeRef(router, polygon, 857);\n\n    // shapeRef858\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(6748.1, 4907.4);\n    polygon.ps[1] = Point(6748.1, 4969.4);\n    polygon.ps[2] = Point(6686.1, 4969.4);\n    polygon.ps[3] = Point(6686.1, 4907.4);\n    new ShapeRef(router, polygon, 858);\n\n    // shapeRef859\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(6517.1, 4907.4);\n    polygon.ps[1] = Point(6517.1, 4969.4);\n    polygon.ps[2] = Point(6455.1, 4969.4);\n    polygon.ps[3] = Point(6455.1, 4907.4);\n    new ShapeRef(router, polygon, 859);\n\n    // shapeRef860\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(6220.1, 4907.4);\n    polygon.ps[1] = Point(6220.1, 4969.4);\n    polygon.ps[2] = Point(6158.1, 4969.4);\n    polygon.ps[3] = Point(6158.1, 4907.4);\n    new ShapeRef(router, polygon, 860);\n\n    // shapeRef861\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(6055.1, 4907.4);\n    polygon.ps[1] = Point(6055.1, 4969.4);\n    polygon.ps[2] = Point(5993.1, 4969.4);\n    polygon.ps[3] = Point(5993.1, 4907.4);\n    new ShapeRef(router, polygon, 861);\n\n    // shapeRef862\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(7012.1, 7097.4);\n    polygon.ps[1] = Point(7012.1, 7159.4);\n    polygon.ps[2] = Point(6950.1, 7159.4);\n    polygon.ps[3] = Point(6950.1, 7097.4);\n    new ShapeRef(router, polygon, 862);\n\n    // shapeRef863\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(4584, 5250.67);\n    polygon.ps[1] = Point(4584, 5312.67);\n    polygon.ps[2] = Point(4522, 5312.67);\n    polygon.ps[3] = Point(4522, 5250.67);\n    new ShapeRef(router, polygon, 863);\n\n    // shapeRef864\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(6253.1, 6582.51);\n    polygon.ps[1] = Point(6253.1, 6644.51);\n    polygon.ps[2] = Point(6191.1, 6644.51);\n    polygon.ps[3] = Point(6191.1, 6582.51);\n    new ShapeRef(router, polygon, 864);\n\n    // shapeRef865\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(6121.1, 5933.59);\n    polygon.ps[1] = Point(6121.1, 5995.59);\n    polygon.ps[2] = Point(6059.1, 5995.59);\n    polygon.ps[3] = Point(6059.1, 5933.59);\n    new ShapeRef(router, polygon, 865);\n\n    // shapeRef866\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(6484.1, 5933.59);\n    polygon.ps[1] = Point(6484.1, 5995.59);\n    polygon.ps[2] = Point(6422.1, 5995.59);\n    polygon.ps[3] = Point(6422.1, 5933.59);\n    new ShapeRef(router, polygon, 866);\n\n    // shapeRef867\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(7144.1, 5933.59);\n    polygon.ps[1] = Point(7144.1, 5995.59);\n    polygon.ps[2] = Point(7082.1, 5995.59);\n    polygon.ps[3] = Point(7082.1, 5933.59);\n    new ShapeRef(router, polygon, 867);\n\n    // shapeRef868\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(7796.29, 5933.59);\n    polygon.ps[1] = Point(7796.29, 5995.59);\n    polygon.ps[2] = Point(7734.29, 5995.59);\n    polygon.ps[3] = Point(7734.29, 5933.59);\n    new ShapeRef(router, polygon, 868);\n\n    // shapeRef869\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(13672, 985.285);\n    polygon.ps[1] = Point(13672, 1047.29);\n    polygon.ps[2] = Point(13610, 1047.29);\n    polygon.ps[3] = Point(13610, 985.285);\n    new ShapeRef(router, polygon, 869);\n\n    // shapeRef870\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(13165, 985.285);\n    polygon.ps[1] = Point(13165, 1047.29);\n    polygon.ps[2] = Point(13103, 1047.29);\n    polygon.ps[3] = Point(13103, 985.285);\n    new ShapeRef(router, polygon, 870);\n\n    // shapeRef871\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(12562.5, 985.285);\n    polygon.ps[1] = Point(12562.5, 1047.29);\n    polygon.ps[2] = Point(12500.5, 1047.29);\n    polygon.ps[3] = Point(12500.5, 985.285);\n    new ShapeRef(router, polygon, 871);\n\n    // shapeRef872\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(12021.1, 985.285);\n    polygon.ps[1] = Point(12021.1, 1047.29);\n    polygon.ps[2] = Point(11959.1, 1047.29);\n    polygon.ps[3] = Point(11959.1, 985.285);\n    new ShapeRef(router, polygon, 872);\n\n    // shapeRef873\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(16753.8, 9978.02);\n    polygon.ps[1] = Point(16753.8, 10040);\n    polygon.ps[2] = Point(16691.8, 10040);\n    polygon.ps[3] = Point(16691.8, 9978.02);\n    new ShapeRef(router, polygon, 873);\n\n    // shapeRef874\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(16130.6, 8842.22);\n    polygon.ps[1] = Point(16130.6, 8904.22);\n    polygon.ps[2] = Point(16068.6, 8904.22);\n    polygon.ps[3] = Point(16068.6, 8842.22);\n    new ShapeRef(router, polygon, 874);\n\n    // shapeRef875\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(14464, 8842.22);\n    polygon.ps[1] = Point(14464, 8904.22);\n    polygon.ps[2] = Point(14402, 8904.22);\n    polygon.ps[3] = Point(14402, 8842.22);\n    new ShapeRef(router, polygon, 875);\n\n    // shapeRef876\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(17541.5, 9248.42);\n    polygon.ps[1] = Point(17541.5, 9310.42);\n    polygon.ps[2] = Point(17479.5, 9310.42);\n    polygon.ps[3] = Point(17479.5, 9248.42);\n    new ShapeRef(router, polygon, 876);\n\n    // shapeRef877\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(17541.5, 8743.22);\n    polygon.ps[1] = Point(17541.5, 8805.22);\n    polygon.ps[2] = Point(17479.5, 8805.22);\n    polygon.ps[3] = Point(17479.5, 8743.22);\n    new ShapeRef(router, polygon, 877);\n\n    // shapeRef878\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(17475.5, 7581.79);\n    polygon.ps[1] = Point(17475.5, 7643.79);\n    polygon.ps[2] = Point(17413.5, 7643.79);\n    polygon.ps[3] = Point(17413.5, 7581.79);\n    new ShapeRef(router, polygon, 878);\n\n    // shapeRef879\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(18333.5, 9446.42);\n    polygon.ps[1] = Point(18333.5, 9508.42);\n    polygon.ps[2] = Point(18271.5, 9508.42);\n    polygon.ps[3] = Point(18271.5, 9446.42);\n    new ShapeRef(router, polygon, 879);\n\n    // shapeRef880\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(18333.5, 9050.42);\n    polygon.ps[1] = Point(18333.5, 9112.42);\n    polygon.ps[2] = Point(18271.5, 9112.42);\n    polygon.ps[3] = Point(18271.5, 9050.42);\n    new ShapeRef(router, polygon, 880);\n\n    // shapeRef881\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(18333.5, 8611.22);\n    polygon.ps[1] = Point(18333.5, 8673.22);\n    polygon.ps[2] = Point(18271.5, 8673.22);\n    polygon.ps[3] = Point(18271.5, 8611.22);\n    new ShapeRef(router, polygon, 881);\n\n    // shapeRef882\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(18333.5, 8218.99);\n    polygon.ps[1] = Point(18333.5, 8280.99);\n    polygon.ps[2] = Point(18271.5, 8280.99);\n    polygon.ps[3] = Point(18271.5, 8218.99);\n    new ShapeRef(router, polygon, 882);\n\n    // shapeRef883\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(18694.5, 9149.42);\n    polygon.ps[1] = Point(18694.5, 9211.42);\n    polygon.ps[2] = Point(18632.5, 9211.42);\n    polygon.ps[3] = Point(18632.5, 9149.42);\n    new ShapeRef(router, polygon, 883);\n\n    // shapeRef884\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(18465.5, 9149.42);\n    polygon.ps[1] = Point(18465.5, 9211.42);\n    polygon.ps[2] = Point(18403.5, 9211.42);\n    polygon.ps[3] = Point(18403.5, 9149.42);\n    new ShapeRef(router, polygon, 884);\n\n    // shapeRef885\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(17904.5, 9347.42);\n    polygon.ps[1] = Point(17904.5, 9409.42);\n    polygon.ps[2] = Point(17842.5, 9409.42);\n    polygon.ps[3] = Point(17842.5, 9347.42);\n    new ShapeRef(router, polygon, 885);\n\n    // shapeRef886\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(17739.5, 9149.42);\n    polygon.ps[1] = Point(17739.5, 9211.42);\n    polygon.ps[2] = Point(17677.5, 9211.42);\n    polygon.ps[3] = Point(17677.5, 9149.42);\n    new ShapeRef(router, polygon, 886);\n\n    // shapeRef887\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(17739.5, 8611.22);\n    polygon.ps[1] = Point(17739.5, 8673.22);\n    polygon.ps[2] = Point(17677.5, 8673.22);\n    polygon.ps[3] = Point(17677.5, 8611.22);\n    new ShapeRef(router, polygon, 887);\n\n    // shapeRef888\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(17739.5, 8218.99);\n    polygon.ps[1] = Point(17739.5, 8280.99);\n    polygon.ps[2] = Point(17677.5, 8280.99);\n    polygon.ps[3] = Point(17677.5, 8218.99);\n    new ShapeRef(router, polygon, 888);\n\n    // shapeRef889\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(16130.6, 5900.59);\n    polygon.ps[1] = Point(16130.6, 5962.59);\n    polygon.ps[2] = Point(16068.6, 5962.59);\n    polygon.ps[3] = Point(16068.6, 5900.59);\n    new ShapeRef(router, polygon, 889);\n\n    // shapeRef890\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(17739.5, 7581.79);\n    polygon.ps[1] = Point(17739.5, 7643.79);\n    polygon.ps[2] = Point(17677.5, 7643.79);\n    polygon.ps[3] = Point(17677.5, 7581.79);\n    new ShapeRef(router, polygon, 890);\n\n    // shapeRef891\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(18036.5, 7581.79);\n    polygon.ps[1] = Point(18036.5, 7643.79);\n    polygon.ps[2] = Point(17974.5, 7643.79);\n    polygon.ps[3] = Point(17974.5, 7581.79);\n    new ShapeRef(router, polygon, 891);\n\n    // shapeRef892\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(18333.5, 7581.79);\n    polygon.ps[1] = Point(18333.5, 7643.79);\n    polygon.ps[2] = Point(18271.5, 7643.79);\n    polygon.ps[3] = Point(18271.5, 7581.79);\n    new ShapeRef(router, polygon, 892);\n\n    // shapeRef893\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(15763.9, 5692.9);\n    polygon.ps[1] = Point(15763.9, 5754.9);\n    polygon.ps[2] = Point(15701.9, 5754.9);\n    polygon.ps[3] = Point(15701.9, 5692.9);\n    new ShapeRef(router, polygon, 893);\n\n    // shapeRef894\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(14794, 5692.9);\n    polygon.ps[1] = Point(14794, 5754.9);\n    polygon.ps[2] = Point(14732, 5754.9);\n    polygon.ps[3] = Point(14732, 5692.9);\n    new ShapeRef(router, polygon, 894);\n\n    // shapeRef895\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(14266, 5692.9);\n    polygon.ps[1] = Point(14266, 5754.9);\n    polygon.ps[2] = Point(14204, 5754.9);\n    polygon.ps[3] = Point(14204, 5692.9);\n    new ShapeRef(router, polygon, 895);\n\n    // shapeRef896\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(13705, 5692.9);\n    polygon.ps[1] = Point(13705, 5754.9);\n    polygon.ps[2] = Point(13643, 5754.9);\n    polygon.ps[3] = Point(13643, 5692.9);\n    new ShapeRef(router, polygon, 896);\n\n    // shapeRef897\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(14266, 5415.67);\n    polygon.ps[1] = Point(14266, 5477.67);\n    polygon.ps[2] = Point(14204, 5477.67);\n    polygon.ps[3] = Point(14204, 5415.67);\n    new ShapeRef(router, polygon, 897);\n\n    // shapeRef898\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(13705, 5415.67);\n    polygon.ps[1] = Point(13705, 5477.67);\n    polygon.ps[2] = Point(13643, 5477.67);\n    polygon.ps[3] = Point(13643, 5415.67);\n    new ShapeRef(router, polygon, 898);\n\n    // shapeRef899\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(15763.9, 4841.4);\n    polygon.ps[1] = Point(15763.9, 4903.4);\n    polygon.ps[2] = Point(15701.9, 4903.4);\n    polygon.ps[3] = Point(15701.9, 4841.4);\n    new ShapeRef(router, polygon, 899);\n\n    // shapeRef900\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(14794, 4841.4);\n    polygon.ps[1] = Point(14794, 4903.4);\n    polygon.ps[2] = Point(14732, 4903.4);\n    polygon.ps[3] = Point(14732, 4841.4);\n    new ShapeRef(router, polygon, 900);\n\n    // shapeRef901\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(13705, 4511.4);\n    polygon.ps[1] = Point(13705, 4573.4);\n    polygon.ps[2] = Point(13643, 4573.4);\n    polygon.ps[3] = Point(13643, 4511.4);\n    new ShapeRef(router, polygon, 901);\n\n    // shapeRef902\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(17277.5, 4511.4);\n    polygon.ps[1] = Point(17277.5, 4573.4);\n    polygon.ps[2] = Point(17215.5, 4573.4);\n    polygon.ps[3] = Point(17215.5, 4511.4);\n    new ShapeRef(router, polygon, 902);\n\n    // shapeRef903\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(16852.8, 4511.4);\n    polygon.ps[1] = Point(16852.8, 4573.4);\n    polygon.ps[2] = Point(16790.8, 4573.4);\n    polygon.ps[3] = Point(16790.8, 4511.4);\n    new ShapeRef(router, polygon, 903);\n\n    // shapeRef904\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(16654.8, 4511.4);\n    polygon.ps[1] = Point(16654.8, 4573.4);\n    polygon.ps[2] = Point(16592.8, 4573.4);\n    polygon.ps[3] = Point(16592.8, 4511.4);\n    new ShapeRef(router, polygon, 904);\n\n    // shapeRef905\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(16262.6, 4511.4);\n    polygon.ps[1] = Point(16262.6, 4573.4);\n    polygon.ps[2] = Point(16200.6, 4573.4);\n    polygon.ps[3] = Point(16200.6, 4511.4);\n    new ShapeRef(router, polygon, 905);\n\n    // shapeRef906\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(15763.9, 4511.4);\n    polygon.ps[1] = Point(15763.9, 4573.4);\n    polygon.ps[2] = Point(15701.9, 4573.4);\n    polygon.ps[3] = Point(15701.9, 4511.4);\n    new ShapeRef(router, polygon, 906);\n\n    // shapeRef907\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(14794, 4511.4);\n    polygon.ps[1] = Point(14794, 4573.4);\n    polygon.ps[2] = Point(14732, 4573.4);\n    polygon.ps[3] = Point(14732, 4511.4);\n    new ShapeRef(router, polygon, 907);\n\n    // shapeRef908\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(14266, 4511.4);\n    polygon.ps[1] = Point(14266, 4573.4);\n    polygon.ps[2] = Point(14204, 4573.4);\n    polygon.ps[3] = Point(14204, 4511.4);\n    new ShapeRef(router, polygon, 908);\n\n    // shapeRef909\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(16654.8, 5217.67);\n    polygon.ps[1] = Point(16654.8, 5279.67);\n    polygon.ps[2] = Point(16592.8, 5279.67);\n    polygon.ps[3] = Point(16592.8, 5217.67);\n    new ShapeRef(router, polygon, 909);\n\n    // shapeRef910\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(16262.6, 5217.67);\n    polygon.ps[1] = Point(16262.6, 5279.67);\n    polygon.ps[2] = Point(16200.6, 5279.67);\n    polygon.ps[3] = Point(16200.6, 5217.67);\n    new ShapeRef(router, polygon, 910);\n\n    // shapeRef911\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(15763.9, 5217.67);\n    polygon.ps[1] = Point(15763.9, 5279.67);\n    polygon.ps[2] = Point(15701.9, 5279.67);\n    polygon.ps[3] = Point(15701.9, 5217.67);\n    new ShapeRef(router, polygon, 911);\n\n    // shapeRef912\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(14794, 5217.67);\n    polygon.ps[1] = Point(14794, 5279.67);\n    polygon.ps[2] = Point(14732, 5279.67);\n    polygon.ps[3] = Point(14732, 5217.67);\n    new ShapeRef(router, polygon, 912);\n\n    // shapeRef913\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(14266, 5217.67);\n    polygon.ps[1] = Point(14266, 5279.67);\n    polygon.ps[2] = Point(14204, 5279.67);\n    polygon.ps[3] = Point(14204, 5217.67);\n    new ShapeRef(router, polygon, 913);\n\n    // shapeRef914\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(13705, 5217.67);\n    polygon.ps[1] = Point(13705, 5279.67);\n    polygon.ps[2] = Point(13643, 5279.67);\n    polygon.ps[3] = Point(13643, 5217.67);\n    new ShapeRef(router, polygon, 914);\n\n    // shapeRef915\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(12953.5, 5217.67);\n    polygon.ps[1] = Point(12953.5, 5279.67);\n    polygon.ps[2] = Point(12891.5, 5279.67);\n    polygon.ps[3] = Point(12891.5, 5217.67);\n    new ShapeRef(router, polygon, 915);\n\n    // shapeRef916\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(12562.5, 10506);\n    polygon.ps[1] = Point(12562.5, 10568);\n    polygon.ps[2] = Point(12500.5, 10568);\n    polygon.ps[3] = Point(12500.5, 10506);\n    new ShapeRef(router, polygon, 916);\n\n    // shapeRef917\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(12562.5, 10209);\n    polygon.ps[1] = Point(12562.5, 10271);\n    polygon.ps[2] = Point(12500.5, 10271);\n    polygon.ps[3] = Point(12500.5, 10209);\n    new ShapeRef(router, polygon, 917);\n\n    // shapeRef918\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(14827, 10011);\n    polygon.ps[1] = Point(14827, 10073);\n    polygon.ps[2] = Point(14765, 10073);\n    polygon.ps[3] = Point(14765, 10011);\n    new ShapeRef(router, polygon, 918);\n\n    // shapeRef919\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(15471.5, 10275);\n    polygon.ps[1] = Point(15471.5, 10337);\n    polygon.ps[2] = Point(15409.5, 10337);\n    polygon.ps[3] = Point(15409.5, 10275);\n    new ShapeRef(router, polygon, 919);\n\n    // shapeRef920\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(14728, 10275);\n    polygon.ps[1] = Point(14728, 10337);\n    polygon.ps[2] = Point(14666, 10337);\n    polygon.ps[3] = Point(14666, 10275);\n    new ShapeRef(router, polygon, 920);\n\n    // shapeRef921\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(17805.5, 3468.51);\n    polygon.ps[1] = Point(17805.5, 3530.51);\n    polygon.ps[2] = Point(17743.5, 3530.51);\n    polygon.ps[3] = Point(17743.5, 3468.51);\n    new ShapeRef(router, polygon, 921);\n\n    // shapeRef922\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(17508.5, 3468.51);\n    polygon.ps[1] = Point(17508.5, 3530.51);\n    polygon.ps[2] = Point(17446.5, 3530.51);\n    polygon.ps[3] = Point(17446.5, 3468.51);\n    new ShapeRef(router, polygon, 922);\n\n    // shapeRef923\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(17050.8, 3468.51);\n    polygon.ps[1] = Point(17050.8, 3530.51);\n    polygon.ps[2] = Point(16988.8, 3530.51);\n    polygon.ps[3] = Point(16988.8, 3468.51);\n    new ShapeRef(router, polygon, 923);\n\n    // shapeRef924\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(18797.5, 4709.4);\n    polygon.ps[1] = Point(18797.5, 4771.4);\n    polygon.ps[2] = Point(18735.5, 4771.4);\n    polygon.ps[3] = Point(18735.5, 4709.4);\n    new ShapeRef(router, polygon, 924);\n\n    // shapeRef925\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(18797.5, 4478.4);\n    polygon.ps[1] = Point(18797.5, 4540.4);\n    polygon.ps[2] = Point(18735.5, 4540.4);\n    polygon.ps[3] = Point(18735.5, 4478.4);\n    new ShapeRef(router, polygon, 925);\n\n    // shapeRef926\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(18797.5, 4095.51);\n    polygon.ps[1] = Point(18797.5, 4157.51);\n    polygon.ps[2] = Point(18735.5, 4157.51);\n    polygon.ps[3] = Point(18735.5, 4095.51);\n    new ShapeRef(router, polygon, 926);\n\n    // shapeRef927\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(18580, 3798.51);\n    polygon.ps[1] = Point(18580, 3860.51);\n    polygon.ps[2] = Point(18518, 3860.51);\n    polygon.ps[3] = Point(18518, 3798.51);\n    new ShapeRef(router, polygon, 927);\n\n    // shapeRef928\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(18366.5, 3798.51);\n    polygon.ps[1] = Point(18366.5, 3860.51);\n    polygon.ps[2] = Point(18304.5, 3860.51);\n    polygon.ps[3] = Point(18304.5, 3798.51);\n    new ShapeRef(router, polygon, 928);\n\n    // shapeRef929\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(18135.5, 3798.51);\n    polygon.ps[1] = Point(18135.5, 3860.51);\n    polygon.ps[2] = Point(18073.5, 3860.51);\n    polygon.ps[3] = Point(18073.5, 3798.51);\n    new ShapeRef(router, polygon, 929);\n\n    // shapeRef930\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(17805.5, 3798.51);\n    polygon.ps[1] = Point(17805.5, 3860.51);\n    polygon.ps[2] = Point(17743.5, 3860.51);\n    polygon.ps[3] = Point(17743.5, 3798.51);\n    new ShapeRef(router, polygon, 930);\n\n    // shapeRef931\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(17508.5, 3798.51);\n    polygon.ps[1] = Point(17508.5, 3860.51);\n    polygon.ps[2] = Point(17446.5, 3860.51);\n    polygon.ps[3] = Point(17446.5, 3798.51);\n    new ShapeRef(router, polygon, 931);\n\n    // shapeRef932\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(17050.8, 3798.51);\n    polygon.ps[1] = Point(17050.8, 3860.51);\n    polygon.ps[2] = Point(16988.8, 3860.51);\n    polygon.ps[3] = Point(16988.8, 3798.51);\n    new ShapeRef(router, polygon, 932);\n\n    // shapeRef933\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(18580, 5006.4);\n    polygon.ps[1] = Point(18580, 5068.4);\n    polygon.ps[2] = Point(18518, 5068.4);\n    polygon.ps[3] = Point(18518, 5006.4);\n    new ShapeRef(router, polygon, 933);\n\n    // shapeRef934\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(18580, 4709.4);\n    polygon.ps[1] = Point(18580, 4771.4);\n    polygon.ps[2] = Point(18518, 4771.4);\n    polygon.ps[3] = Point(18518, 4709.4);\n    new ShapeRef(router, polygon, 934);\n\n    // shapeRef935\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(18580, 4478.4);\n    polygon.ps[1] = Point(18580, 4540.4);\n    polygon.ps[2] = Point(18518, 4540.4);\n    polygon.ps[3] = Point(18518, 4478.4);\n    new ShapeRef(router, polygon, 935);\n\n    // shapeRef936\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(18580, 4095.51);\n    polygon.ps[1] = Point(18580, 4157.51);\n    polygon.ps[2] = Point(18518, 4157.51);\n    polygon.ps[3] = Point(18518, 4095.51);\n    new ShapeRef(router, polygon, 936);\n\n    // shapeRef937\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(18366.5, 4095.51);\n    polygon.ps[1] = Point(18366.5, 4157.51);\n    polygon.ps[2] = Point(18304.5, 4157.51);\n    polygon.ps[3] = Point(18304.5, 4095.51);\n    new ShapeRef(router, polygon, 937);\n\n    // shapeRef938\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(18135.5, 4095.51);\n    polygon.ps[1] = Point(18135.5, 4157.51);\n    polygon.ps[2] = Point(18073.5, 4157.51);\n    polygon.ps[3] = Point(18073.5, 4095.51);\n    new ShapeRef(router, polygon, 938);\n\n    // shapeRef939\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(17050.8, 4095.51);\n    polygon.ps[1] = Point(17050.8, 4157.51);\n    polygon.ps[2] = Point(16988.8, 4157.51);\n    polygon.ps[3] = Point(16988.8, 4095.51);\n    new ShapeRef(router, polygon, 939);\n\n    // shapeRef940\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(18102.5, 3307.29);\n    polygon.ps[1] = Point(18102.5, 3369.29);\n    polygon.ps[2] = Point(18040.5, 3369.29);\n    polygon.ps[3] = Point(18040.5, 3307.29);\n    new ShapeRef(router, polygon, 940);\n\n    // shapeRef941\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(17739.5, 3307.29);\n    polygon.ps[1] = Point(17739.5, 3369.29);\n    polygon.ps[2] = Point(17677.5, 3369.29);\n    polygon.ps[3] = Point(17677.5, 3307.29);\n    new ShapeRef(router, polygon, 941);\n\n    // shapeRef942\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(17343.5, 3307.29);\n    polygon.ps[1] = Point(17343.5, 3369.29);\n    polygon.ps[2] = Point(17281.5, 3369.29);\n    polygon.ps[3] = Point(17281.5, 3307.29);\n    new ShapeRef(router, polygon, 942);\n\n    // shapeRef943\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(16885.8, 3307.29);\n    polygon.ps[1] = Point(16885.8, 3369.29);\n    polygon.ps[2] = Point(16823.8, 3369.29);\n    polygon.ps[3] = Point(16823.8, 3307.29);\n    new ShapeRef(router, polygon, 943);\n\n    // shapeRef944\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(16588.8, 3307.29);\n    polygon.ps[1] = Point(16588.8, 3369.29);\n    polygon.ps[2] = Point(16526.8, 3369.29);\n    polygon.ps[3] = Point(16526.8, 3307.29);\n    new ShapeRef(router, polygon, 944);\n\n    // shapeRef945\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(16064.6, 3307.29);\n    polygon.ps[1] = Point(16064.6, 3369.29);\n    polygon.ps[2] = Point(16002.6, 3369.29);\n    polygon.ps[3] = Point(16002.6, 3307.29);\n    new ShapeRef(router, polygon, 945);\n\n    // shapeRef946\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(15146.3, 3307.29);\n    polygon.ps[1] = Point(15146.3, 3369.29);\n    polygon.ps[2] = Point(15084.3, 3369.29);\n    polygon.ps[3] = Point(15084.3, 3307.29);\n    new ShapeRef(router, polygon, 946);\n\n    // shapeRef947\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(17050.8, 4775.4);\n    polygon.ps[1] = Point(17050.8, 4837.4);\n    polygon.ps[2] = Point(16988.8, 4837.4);\n    polygon.ps[3] = Point(16988.8, 4775.4);\n    new ShapeRef(router, polygon, 947);\n\n    // shapeRef948\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(16786.8, 4775.4);\n    polygon.ps[1] = Point(16786.8, 4837.4);\n    polygon.ps[2] = Point(16724.8, 4837.4);\n    polygon.ps[3] = Point(16724.8, 4775.4);\n    new ShapeRef(router, polygon, 948);\n\n    // shapeRef949\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(16427.6, 3864.51);\n    polygon.ps[1] = Point(16427.6, 3926.51);\n    polygon.ps[2] = Point(16365.6, 3926.51);\n    polygon.ps[3] = Point(16365.6, 3864.51);\n    new ShapeRef(router, polygon, 949);\n\n    // shapeRef950\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(15998.6, 3864.51);\n    polygon.ps[1] = Point(15998.6, 3926.51);\n    polygon.ps[2] = Point(15936.6, 3926.51);\n    polygon.ps[3] = Point(15936.6, 3864.51);\n    new ShapeRef(router, polygon, 950);\n\n    // shapeRef951\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(15146.3, 3864.51);\n    polygon.ps[1] = Point(15146.3, 3926.51);\n    polygon.ps[2] = Point(15084.3, 3926.51);\n    polygon.ps[3] = Point(15084.3, 3864.51);\n    new ShapeRef(router, polygon, 951);\n\n    // shapeRef952\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(16786.8, 3600.51);\n    polygon.ps[1] = Point(16786.8, 3662.51);\n    polygon.ps[2] = Point(16724.8, 3662.51);\n    polygon.ps[3] = Point(16724.8, 3600.51);\n    new ShapeRef(router, polygon, 952);\n\n    // shapeRef953\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(16361.6, 3600.51);\n    polygon.ps[1] = Point(16361.6, 3662.51);\n    polygon.ps[2] = Point(16299.6, 3662.51);\n    polygon.ps[3] = Point(16299.6, 3600.51);\n    new ShapeRef(router, polygon, 953);\n\n    // shapeRef954\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(15541.3, 3600.51);\n    polygon.ps[1] = Point(15541.3, 3662.51);\n    polygon.ps[2] = Point(15479.3, 3662.51);\n    polygon.ps[3] = Point(15479.3, 3600.51);\n    new ShapeRef(router, polygon, 954);\n\n    // shapeRef955\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(16786.8, 4095.51);\n    polygon.ps[1] = Point(16786.8, 4157.51);\n    polygon.ps[2] = Point(16724.8, 4157.51);\n    polygon.ps[3] = Point(16724.8, 4095.51);\n    new ShapeRef(router, polygon, 955);\n\n    // shapeRef956\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(16588.8, 4095.51);\n    polygon.ps[1] = Point(16588.8, 4157.51);\n    polygon.ps[2] = Point(16526.8, 4157.51);\n    polygon.ps[3] = Point(16526.8, 4095.51);\n    new ShapeRef(router, polygon, 956);\n\n    // shapeRef957\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(16163.6, 4095.51);\n    polygon.ps[1] = Point(16163.6, 4157.51);\n    polygon.ps[2] = Point(16101.6, 4157.51);\n    polygon.ps[3] = Point(16101.6, 4095.51);\n    new ShapeRef(router, polygon, 957);\n\n    // shapeRef958\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(15541.3, 4095.51);\n    polygon.ps[1] = Point(15541.3, 4157.51);\n    polygon.ps[2] = Point(15479.3, 4157.51);\n    polygon.ps[3] = Point(15479.3, 4095.51);\n    new ShapeRef(router, polygon, 958);\n\n    // shapeRef959\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(15635.3, 2713.29);\n    polygon.ps[1] = Point(15635.3, 2775.29);\n    polygon.ps[2] = Point(15573.3, 2775.29);\n    polygon.ps[3] = Point(15573.3, 2713.29);\n    new ShapeRef(router, polygon, 959);\n\n    // shapeRef960\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(14662, 3208.29);\n    polygon.ps[1] = Point(14662, 3270.29);\n    polygon.ps[2] = Point(14600, 3270.29);\n    polygon.ps[3] = Point(14600, 3208.29);\n    new ShapeRef(router, polygon, 960);\n\n    // shapeRef961\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(16720.8, 2944.29);\n    polygon.ps[1] = Point(16720.8, 3006.29);\n    polygon.ps[2] = Point(16658.8, 3006.29);\n    polygon.ps[3] = Point(16658.8, 2944.29);\n    new ShapeRef(router, polygon, 961);\n\n    // shapeRef962\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(16295.6, 2944.29);\n    polygon.ps[1] = Point(16295.6, 3006.29);\n    polygon.ps[2] = Point(16233.6, 3006.29);\n    polygon.ps[3] = Point(16233.6, 2944.29);\n    new ShapeRef(router, polygon, 962);\n\n    // shapeRef963\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(15635.3, 2944.29);\n    polygon.ps[1] = Point(15635.3, 3006.29);\n    polygon.ps[2] = Point(15573.3, 3006.29);\n    polygon.ps[3] = Point(15573.3, 2944.29);\n    new ShapeRef(router, polygon, 963);\n\n    // shapeRef964\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(14662, 2944.29);\n    polygon.ps[1] = Point(14662, 3006.29);\n    polygon.ps[2] = Point(14600, 3006.29);\n    polygon.ps[3] = Point(14600, 2944.29);\n    new ShapeRef(router, polygon, 964);\n\n    // shapeRef965\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(13969, 2944.29);\n    polygon.ps[1] = Point(13969, 3006.29);\n    polygon.ps[2] = Point(13907, 3006.29);\n    polygon.ps[3] = Point(13907, 2944.29);\n    new ShapeRef(router, polygon, 965);\n\n    // shapeRef966\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(13969, 3307.29);\n    polygon.ps[1] = Point(13969, 3369.29);\n    polygon.ps[2] = Point(13907, 3369.29);\n    polygon.ps[3] = Point(13907, 3307.29);\n    new ShapeRef(router, polygon, 966);\n\n    // shapeRef967\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(13969, 3600.51);\n    polygon.ps[1] = Point(13969, 3662.51);\n    polygon.ps[2] = Point(13907, 3662.51);\n    polygon.ps[3] = Point(13907, 3600.51);\n    new ShapeRef(router, polygon, 967);\n\n    // shapeRef968\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(14728, 4095.51);\n    polygon.ps[1] = Point(14728, 4157.51);\n    polygon.ps[2] = Point(14666, 4157.51);\n    polygon.ps[3] = Point(14666, 4095.51);\n    new ShapeRef(router, polygon, 968);\n\n    // shapeRef969\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(13969, 4095.51);\n    polygon.ps[1] = Point(13969, 4157.51);\n    polygon.ps[2] = Point(13907, 4157.51);\n    polygon.ps[3] = Point(13907, 4095.51);\n    new ShapeRef(router, polygon, 969);\n\n    // shapeRef970\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(16130.6, 6549.51);\n    polygon.ps[1] = Point(16130.6, 6611.51);\n    polygon.ps[2] = Point(16068.6, 6611.51);\n    polygon.ps[3] = Point(16068.6, 6549.51);\n    new ShapeRef(router, polygon, 970);\n\n    // shapeRef971\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(13540, 6549.51);\n    polygon.ps[1] = Point(13540, 6611.51);\n    polygon.ps[2] = Point(13478, 6611.51);\n    polygon.ps[3] = Point(13478, 6549.51);\n    new ShapeRef(router, polygon, 971);\n\n    // shapeRef972\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(16031.6, 11015.6);\n    polygon.ps[1] = Point(16031.6, 11077.6);\n    polygon.ps[2] = Point(15969.6, 11077.6);\n    polygon.ps[3] = Point(15969.6, 11015.6);\n    new ShapeRef(router, polygon, 972);\n\n    // shapeRef973\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(16031.6, 10473);\n    polygon.ps[1] = Point(16031.6, 10535);\n    polygon.ps[2] = Point(15969.6, 10535);\n    polygon.ps[3] = Point(15969.6, 10473);\n    new ShapeRef(router, polygon, 973);\n\n    // shapeRef974\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(16031.6, 9644.42);\n    polygon.ps[1] = Point(16031.6, 9706.42);\n    polygon.ps[2] = Point(15969.6, 9706.42);\n    polygon.ps[3] = Point(15969.6, 9644.42);\n    new ShapeRef(router, polygon, 974);\n\n    // shapeRef975\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(15471.5, 10684.3);\n    polygon.ps[1] = Point(15471.5, 10746.3);\n    polygon.ps[2] = Point(15409.5, 10746.3);\n    polygon.ps[3] = Point(15409.5, 10684.3);\n    new ShapeRef(router, polygon, 975);\n\n    // shapeRef976\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(15471.5, 10044);\n    polygon.ps[1] = Point(15471.5, 10106);\n    polygon.ps[2] = Point(15409.5, 10106);\n    polygon.ps[3] = Point(15409.5, 10044);\n    new ShapeRef(router, polygon, 976);\n\n    // shapeRef977\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(15471.5, 11015.6);\n    polygon.ps[1] = Point(15471.5, 11077.6);\n    polygon.ps[2] = Point(15409.5, 11077.6);\n    polygon.ps[3] = Point(15409.5, 11015.6);\n    new ShapeRef(router, polygon, 977);\n\n    // shapeRef978\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(15471.5, 10473);\n    polygon.ps[1] = Point(15471.5, 10535);\n    polygon.ps[2] = Point(15409.5, 10535);\n    polygon.ps[3] = Point(15409.5, 10473);\n    new ShapeRef(router, polygon, 978);\n\n    // shapeRef979\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(15471.5, 9644.42);\n    polygon.ps[1] = Point(15471.5, 9706.42);\n    polygon.ps[2] = Point(15409.5, 9706.42);\n    polygon.ps[3] = Point(15409.5, 9644.42);\n    new ShapeRef(router, polygon, 979);\n\n    // shapeRef980\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(14299, 10275);\n    polygon.ps[1] = Point(14299, 10337);\n    polygon.ps[2] = Point(14237, 10337);\n    polygon.ps[3] = Point(14237, 10275);\n    new ShapeRef(router, polygon, 980);\n\n    // shapeRef981\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(14299, 10011);\n    polygon.ps[1] = Point(14299, 10073);\n    polygon.ps[2] = Point(14237, 10073);\n    polygon.ps[3] = Point(14237, 10011);\n    new ShapeRef(router, polygon, 981);\n\n    // shapeRef982\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(13507, 10275);\n    polygon.ps[1] = Point(13507, 10337);\n    polygon.ps[2] = Point(13445, 10337);\n    polygon.ps[3] = Point(13445, 10275);\n    new ShapeRef(router, polygon, 982);\n\n    // shapeRef983\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(13507, 10011);\n    polygon.ps[1] = Point(13507, 10073);\n    polygon.ps[2] = Point(13445, 10073);\n    polygon.ps[3] = Point(13445, 10011);\n    new ShapeRef(router, polygon, 983);\n\n    // shapeRef984\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(13969, 11015.6);\n    polygon.ps[1] = Point(13969, 11077.6);\n    polygon.ps[2] = Point(13907, 11077.6);\n    polygon.ps[3] = Point(13907, 11015.6);\n    new ShapeRef(router, polygon, 984);\n\n    // shapeRef985\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(13969, 10473);\n    polygon.ps[1] = Point(13969, 10535);\n    polygon.ps[2] = Point(13907, 10535);\n    polygon.ps[3] = Point(13907, 10473);\n    new ShapeRef(router, polygon, 985);\n\n    // shapeRef986\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(13969, 9644.42);\n    polygon.ps[1] = Point(13969, 9706.42);\n    polygon.ps[2] = Point(13907, 9706.42);\n    polygon.ps[3] = Point(13907, 9644.42);\n    new ShapeRef(router, polygon, 986);\n\n    // shapeRef987\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(13198, 11015.6);\n    polygon.ps[1] = Point(13198, 11077.6);\n    polygon.ps[2] = Point(13136, 11077.6);\n    polygon.ps[3] = Point(13136, 11015.6);\n    new ShapeRef(router, polygon, 987);\n\n    // shapeRef988\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(13198, 10473);\n    polygon.ps[1] = Point(13198, 10535);\n    polygon.ps[2] = Point(13136, 10535);\n    polygon.ps[3] = Point(13136, 10473);\n    new ShapeRef(router, polygon, 988);\n\n    // shapeRef989\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(13198, 9644.42);\n    polygon.ps[1] = Point(13198, 9706.42);\n    polygon.ps[2] = Point(13136, 9706.42);\n    polygon.ps[3] = Point(13136, 9644.42);\n    new ShapeRef(router, polygon, 989);\n\n    // shapeRef990\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(16753.8, 7581.79);\n    polygon.ps[1] = Point(16753.8, 7643.79);\n    polygon.ps[2] = Point(16691.8, 7643.79);\n    polygon.ps[3] = Point(16691.8, 7581.79);\n    new ShapeRef(router, polygon, 990);\n\n    // shapeRef991\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(16753.8, 7031.4);\n    polygon.ps[1] = Point(16753.8, 7093.4);\n    polygon.ps[2] = Point(16691.8, 7093.4);\n    polygon.ps[3] = Point(16691.8, 7031.4);\n    new ShapeRef(router, polygon, 991);\n\n    // shapeRef992\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(16753.8, 6384.51);\n    polygon.ps[1] = Point(16753.8, 6446.51);\n    polygon.ps[2] = Point(16691.8, 6446.51);\n    polygon.ps[3] = Point(16691.8, 6384.51);\n    new ShapeRef(router, polygon, 992);\n\n    // shapeRef993\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(16460.6, 8218.99);\n    polygon.ps[1] = Point(16460.6, 8280.99);\n    polygon.ps[2] = Point(16398.6, 8280.99);\n    polygon.ps[3] = Point(16398.6, 8218.99);\n    new ShapeRef(router, polygon, 993);\n\n    // shapeRef994\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(16460.6, 7581.79);\n    polygon.ps[1] = Point(16460.6, 7643.79);\n    polygon.ps[2] = Point(16398.6, 7643.79);\n    polygon.ps[3] = Point(16398.6, 7581.79);\n    new ShapeRef(router, polygon, 994);\n\n    // shapeRef995\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(16460.6, 7031.4);\n    polygon.ps[1] = Point(16460.6, 7093.4);\n    polygon.ps[2] = Point(16398.6, 7093.4);\n    polygon.ps[3] = Point(16398.6, 7031.4);\n    new ShapeRef(router, polygon, 995);\n\n    // shapeRef996\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(16460.6, 6384.51);\n    polygon.ps[1] = Point(16460.6, 6446.51);\n    polygon.ps[2] = Point(16398.6, 6446.51);\n    polygon.ps[3] = Point(16398.6, 6384.51);\n    new ShapeRef(router, polygon, 996);\n\n    // shapeRef997\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(15899.6, 7581.79);\n    polygon.ps[1] = Point(15899.6, 7643.79);\n    polygon.ps[2] = Point(15837.6, 7643.79);\n    polygon.ps[3] = Point(15837.6, 7581.79);\n    new ShapeRef(router, polygon, 997);\n\n    // shapeRef998\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(15899.6, 7031.4);\n    polygon.ps[1] = Point(15899.6, 7093.4);\n    polygon.ps[2] = Point(15837.6, 7093.4);\n    polygon.ps[3] = Point(15837.6, 7031.4);\n    new ShapeRef(router, polygon, 998);\n\n    // shapeRef999\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(15899.6, 6384.51);\n    polygon.ps[1] = Point(15899.6, 6446.51);\n    polygon.ps[2] = Point(15837.6, 6446.51);\n    polygon.ps[3] = Point(15837.6, 6384.51);\n    new ShapeRef(router, polygon, 999);\n\n    // shapeRef1000\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(14530, 7262.4);\n    polygon.ps[1] = Point(14530, 7324.4);\n    polygon.ps[2] = Point(14468, 7324.4);\n    polygon.ps[3] = Point(14468, 7262.4);\n    new ShapeRef(router, polygon, 1000);\n\n    // shapeRef1001\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(14134, 7262.4);\n    polygon.ps[1] = Point(14134, 7324.4);\n    polygon.ps[2] = Point(14072, 7324.4);\n    polygon.ps[3] = Point(14072, 7262.4);\n    new ShapeRef(router, polygon, 1001);\n\n    // shapeRef1002\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(14530, 6615.51);\n    polygon.ps[1] = Point(14530, 6677.51);\n    polygon.ps[2] = Point(14468, 6677.51);\n    polygon.ps[3] = Point(14468, 6615.51);\n    new ShapeRef(router, polygon, 1002);\n\n    // shapeRef1003\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(14134, 6615.51);\n    polygon.ps[1] = Point(14134, 6677.51);\n    polygon.ps[2] = Point(14072, 6677.51);\n    polygon.ps[3] = Point(14072, 6615.51);\n    new ShapeRef(router, polygon, 1003);\n\n    // shapeRef1004\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(14827, 8218.99);\n    polygon.ps[1] = Point(14827, 8280.99);\n    polygon.ps[2] = Point(14765, 8280.99);\n    polygon.ps[3] = Point(14765, 8218.99);\n    new ShapeRef(router, polygon, 1004);\n\n    // shapeRef1005\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(14827, 7581.79);\n    polygon.ps[1] = Point(14827, 7643.79);\n    polygon.ps[2] = Point(14765, 7643.79);\n    polygon.ps[3] = Point(14765, 7581.79);\n    new ShapeRef(router, polygon, 1005);\n\n    // shapeRef1006\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(14827, 7031.4);\n    polygon.ps[1] = Point(14827, 7093.4);\n    polygon.ps[2] = Point(14765, 7093.4);\n    polygon.ps[3] = Point(14765, 7031.4);\n    new ShapeRef(router, polygon, 1006);\n\n    // shapeRef1007\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(14827, 6384.51);\n    polygon.ps[1] = Point(14827, 6446.51);\n    polygon.ps[2] = Point(14765, 6446.51);\n    polygon.ps[3] = Point(14765, 6384.51);\n    new ShapeRef(router, polygon, 1007);\n\n    // shapeRef1008\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(11955.1, 8710.22);\n    polygon.ps[1] = Point(11955.1, 8772.22);\n    polygon.ps[2] = Point(11893.1, 8772.22);\n    polygon.ps[3] = Point(11893.1, 8710.22);\n    new ShapeRef(router, polygon, 1008);\n\n    // shapeRef1009\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(11955.1, 7031.4);\n    polygon.ps[1] = Point(11955.1, 7093.4);\n    polygon.ps[2] = Point(11893.1, 7093.4);\n    polygon.ps[3] = Point(11893.1, 7031.4);\n    new ShapeRef(router, polygon, 1009);\n\n    // shapeRef1010\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(11955.1, 6384.51);\n    polygon.ps[1] = Point(11955.1, 6446.51);\n    polygon.ps[2] = Point(11893.1, 6446.51);\n    polygon.ps[3] = Point(11893.1, 6384.51);\n    new ShapeRef(router, polygon, 1010);\n\n    // shapeRef1011\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(13903, 7581.79);\n    polygon.ps[1] = Point(13903, 7643.79);\n    polygon.ps[2] = Point(13841, 7643.79);\n    polygon.ps[3] = Point(13841, 7581.79);\n    new ShapeRef(router, polygon, 1011);\n\n    // shapeRef1012\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(12562.5, 7581.79);\n    polygon.ps[1] = Point(12562.5, 7643.79);\n    polygon.ps[2] = Point(12500.5, 7643.79);\n    polygon.ps[3] = Point(12500.5, 7581.79);\n    new ShapeRef(router, polygon, 1012);\n\n    // shapeRef1013\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(12562.5, 7031.4);\n    polygon.ps[1] = Point(12562.5, 7093.4);\n    polygon.ps[2] = Point(12500.5, 7093.4);\n    polygon.ps[3] = Point(12500.5, 7031.4);\n    new ShapeRef(router, polygon, 1013);\n\n    // shapeRef1014\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(12562.5, 6384.51);\n    polygon.ps[1] = Point(12562.5, 6446.51);\n    polygon.ps[2] = Point(12500.5, 6446.51);\n    polygon.ps[3] = Point(12500.5, 6384.51);\n    new ShapeRef(router, polygon, 1014);\n\n    // shapeRef1015\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(11203.2, 5481.67);\n    polygon.ps[1] = Point(11203.2, 5543.67);\n    polygon.ps[2] = Point(11141.2, 5543.67);\n    polygon.ps[3] = Point(11141.2, 5481.67);\n    new ShapeRef(router, polygon, 1015);\n\n    // shapeRef1016\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(10675.2, 5481.67);\n    polygon.ps[1] = Point(10675.2, 5543.67);\n    polygon.ps[2] = Point(10613.2, 5543.67);\n    polygon.ps[3] = Point(10613.2, 5481.67);\n    new ShapeRef(router, polygon, 1016);\n\n    // shapeRef1017\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9815.69, 4973.4);\n    polygon.ps[1] = Point(9815.69, 5035.4);\n    polygon.ps[2] = Point(9753.69, 5035.4);\n    polygon.ps[3] = Point(9753.69, 4973.4);\n    new ShapeRef(router, polygon, 1017);\n\n    // shapeRef1018\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(15471.5, 11355.8);\n    polygon.ps[1] = Point(15471.5, 11417.8);\n    polygon.ps[2] = Point(15409.5, 11417.8);\n    polygon.ps[3] = Point(15409.5, 11355.8);\n    new ShapeRef(router, polygon, 1018);\n\n    // shapeRef1019\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(14662, 7878.79);\n    polygon.ps[1] = Point(14662, 7940.79);\n    polygon.ps[2] = Point(14600, 7940.79);\n    polygon.ps[3] = Point(14600, 7878.79);\n    new ShapeRef(router, polygon, 1019);\n\n    // shapeRef1020\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(16130.6, 8449.99);\n    polygon.ps[1] = Point(16130.6, 8511.99);\n    polygon.ps[2] = Point(16068.6, 8511.99);\n    polygon.ps[3] = Point(16068.6, 8449.99);\n    new ShapeRef(router, polygon, 1020);\n\n    // shapeRef1021\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(16130.6, 7878.79);\n    polygon.ps[1] = Point(16130.6, 7940.79);\n    polygon.ps[2] = Point(16068.6, 7940.79);\n    polygon.ps[3] = Point(16068.6, 7878.79);\n    new ShapeRef(router, polygon, 1021);\n\n    // shapeRef1022\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(14662, 8449.99);\n    polygon.ps[1] = Point(14662, 8511.99);\n    polygon.ps[2] = Point(14600, 8511.99);\n    polygon.ps[3] = Point(14600, 8449.99);\n    new ShapeRef(router, polygon, 1022);\n\n    // shapeRef1023\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(13540, 8449.99);\n    polygon.ps[1] = Point(13540, 8511.99);\n    polygon.ps[2] = Point(13478, 8511.99);\n    polygon.ps[3] = Point(13478, 8449.99);\n    new ShapeRef(router, polygon, 1023);\n\n    // shapeRef1024\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(13540, 7878.79);\n    polygon.ps[1] = Point(13540, 7940.79);\n    polygon.ps[2] = Point(13478, 7940.79);\n    polygon.ps[3] = Point(13478, 7878.79);\n    new ShapeRef(router, polygon, 1024);\n\n    // shapeRef1025\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(16130.6, 6058.29);\n    polygon.ps[1] = Point(16130.6, 6120.29);\n    polygon.ps[2] = Point(16068.6, 6120.29);\n    polygon.ps[3] = Point(16068.6, 6058.29);\n    new ShapeRef(router, polygon, 1025);\n\n    // shapeRef1026\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(14662, 6058.29);\n    polygon.ps[1] = Point(14662, 6120.29);\n    polygon.ps[2] = Point(14600, 6120.29);\n    polygon.ps[3] = Point(14600, 6058.29);\n    new ShapeRef(router, polygon, 1026);\n\n    // shapeRef1027\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(13540, 6058.29);\n    polygon.ps[1] = Point(13540, 6120.29);\n    polygon.ps[2] = Point(13478, 6120.29);\n    polygon.ps[3] = Point(13478, 6058.29);\n    new ShapeRef(router, polygon, 1027);\n\n    // shapeRef1028\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(16588.8, 3468.51);\n    polygon.ps[1] = Point(16588.8, 3530.51);\n    polygon.ps[2] = Point(16526.8, 3530.51);\n    polygon.ps[3] = Point(16526.8, 3468.51);\n    new ShapeRef(router, polygon, 1028);\n\n    // shapeRef1029\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(16064.6, 3468.51);\n    polygon.ps[1] = Point(16064.6, 3530.51);\n    polygon.ps[2] = Point(16002.6, 3530.51);\n    polygon.ps[3] = Point(16002.6, 3468.51);\n    new ShapeRef(router, polygon, 1029);\n\n    // shapeRef1030\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(15146.3, 3468.51);\n    polygon.ps[1] = Point(15146.3, 3530.51);\n    polygon.ps[2] = Point(15084.3, 3530.51);\n    polygon.ps[3] = Point(15084.3, 3468.51);\n    new ShapeRef(router, polygon, 1030);\n\n    // shapeRef1031\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(17805.5, 4095.51);\n    polygon.ps[1] = Point(17805.5, 4157.51);\n    polygon.ps[2] = Point(17743.5, 4157.51);\n    polygon.ps[3] = Point(17743.5, 4095.51);\n    new ShapeRef(router, polygon, 1031);\n\n    // shapeRef1032\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(17508.5, 4095.51);\n    polygon.ps[1] = Point(17508.5, 4157.51);\n    polygon.ps[2] = Point(17446.5, 4157.51);\n    polygon.ps[3] = Point(17446.5, 4095.51);\n    new ShapeRef(router, polygon, 1032);\n\n    // shapeRef1033\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(14662, 9479.42);\n    polygon.ps[1] = Point(14662, 9541.42);\n    polygon.ps[2] = Point(14600, 9541.42);\n    polygon.ps[3] = Point(14600, 9479.42);\n    new ShapeRef(router, polygon, 1033);\n\n    // shapeRef1034\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(16753.8, 8842.22);\n    polygon.ps[1] = Point(16753.8, 8904.22);\n    polygon.ps[2] = Point(16691.8, 8904.22);\n    polygon.ps[3] = Point(16691.8, 8842.22);\n    new ShapeRef(router, polygon, 1034);\n\n    // shapeRef1035\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(12953.5, 6058.29);\n    polygon.ps[1] = Point(12953.5, 6120.29);\n    polygon.ps[2] = Point(12891.5, 6120.29);\n    polygon.ps[3] = Point(12891.5, 6058.29);\n    new ShapeRef(router, polygon, 1035);\n\n    // shapeRef1036\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(12953.5, 5692.9);\n    polygon.ps[1] = Point(12953.5, 5754.9);\n    polygon.ps[2] = Point(12891.5, 5754.9);\n    polygon.ps[3] = Point(12891.5, 5692.9);\n    new ShapeRef(router, polygon, 1036);\n\n    // shapeRef1037\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(1416, 7163.4);\n    polygon.ps[1] = Point(1416, 7225.4);\n    polygon.ps[2] = Point(1354, 7225.4);\n    polygon.ps[3] = Point(1354, 7163.4);\n    new ShapeRef(router, polygon, 1037);\n\n    // shapeRef1038\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(4023, 6252.51);\n    polygon.ps[1] = Point(4023, 6314.51);\n    polygon.ps[2] = Point(3961, 6314.51);\n    polygon.ps[3] = Point(3961, 6252.51);\n    new ShapeRef(router, polygon, 1038);\n\n    // shapeRef1039\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(13969, 3864.51);\n    polygon.ps[1] = Point(13969, 3926.51);\n    polygon.ps[2] = Point(13907, 3926.51);\n    polygon.ps[3] = Point(13907, 3864.51);\n    new ShapeRef(router, polygon, 1039);\n\n    // shapeRef1040\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(14497, 3600.51);\n    polygon.ps[1] = Point(14497, 3662.51);\n    polygon.ps[2] = Point(14435, 3662.51);\n    polygon.ps[3] = Point(14435, 3600.51);\n    new ShapeRef(router, polygon, 1040);\n\n    // shapeRef1041\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(17607.5, 6757.21);\n    polygon.ps[1] = Point(17607.5, 6819.21);\n    polygon.ps[2] = Point(17545.5, 6819.21);\n    polygon.ps[3] = Point(17545.5, 6757.21);\n    new ShapeRef(router, polygon, 1041);\n\n    // shapeRef1042\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(12054.1, 6757.21);\n    polygon.ps[1] = Point(12054.1, 6819.21);\n    polygon.ps[2] = Point(11992.1, 6819.21);\n    polygon.ps[3] = Point(11992.1, 6757.21);\n    new ShapeRef(router, polygon, 1042);\n\n    // shapeRef1043\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(10013.7, 5626.9);\n    polygon.ps[1] = Point(10013.7, 5688.9);\n    polygon.ps[2] = Point(9951.69, 5688.9);\n    polygon.ps[3] = Point(9951.69, 5626.9);\n    new ShapeRef(router, polygon, 1043);\n\n    // shapeRef1044\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(2769, 10176);\n    polygon.ps[1] = Point(2769, 10238);\n    polygon.ps[2] = Point(2707, 10238);\n    polygon.ps[3] = Point(2707, 10176);\n    new ShapeRef(router, polygon, 1044);\n\n    // shapeRef1045\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(5758.1, 5184.67);\n    polygon.ps[1] = Point(5758.1, 5246.67);\n    polygon.ps[2] = Point(5696.1, 5246.67);\n    polygon.ps[3] = Point(5696.1, 5184.67);\n    new ShapeRef(router, polygon, 1045);\n\n    // shapeRef1046\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(15270.5, 1480.29);\n    polygon.ps[1] = Point(15270.5, 1542.29);\n    polygon.ps[2] = Point(15208.5, 1542.29);\n    polygon.ps[3] = Point(15208.5, 1480.29);\n    new ShapeRef(router, polygon, 1046);\n\n    // shapeRef1047\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(13903, 6384.51);\n    polygon.ps[1] = Point(13903, 6446.51);\n    polygon.ps[2] = Point(13841, 6446.51);\n    polygon.ps[3] = Point(13841, 6384.51);\n    new ShapeRef(router, polygon, 1047);\n\n    // shapeRef1048\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(13297, 5105.4);\n    polygon.ps[1] = Point(13297, 5167.4);\n    polygon.ps[2] = Point(13235, 5167.4);\n    polygon.ps[3] = Point(13235, 5105.4);\n    new ShapeRef(router, polygon, 1048);\n\n    // shapeRef1049\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(11427.1, 7262.4);\n    polygon.ps[1] = Point(11427.1, 7324.4);\n    polygon.ps[2] = Point(11365.1, 7324.4);\n    polygon.ps[3] = Point(11365.1, 7262.4);\n    new ShapeRef(router, polygon, 1049);\n\n    // shapeRef1050\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(17937.5, 11829.9);\n    polygon.ps[1] = Point(17937.5, 11891.9);\n    polygon.ps[2] = Point(17875.5, 11891.9);\n    polygon.ps[3] = Point(17875.5, 11829.9);\n    new ShapeRef(router, polygon, 1050);\n\n    // shapeRef1051\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(18201.5, 11829.9);\n    polygon.ps[1] = Point(18201.5, 11891.9);\n    polygon.ps[2] = Point(18139.5, 11891.9);\n    polygon.ps[3] = Point(18139.5, 11829.9);\n    new ShapeRef(router, polygon, 1051);\n\n    // shapeRef1052\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(16621.8, 8743.22);\n    polygon.ps[1] = Point(16621.8, 8805.22);\n    polygon.ps[2] = Point(16559.8, 8805.22);\n    polygon.ps[3] = Point(16559.8, 8743.22);\n    new ShapeRef(router, polygon, 1052);\n\n    // shapeRef1053\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(13198, 5382.67);\n    polygon.ps[1] = Point(13198, 5444.67);\n    polygon.ps[2] = Point(13136, 5444.67);\n    polygon.ps[3] = Point(13136, 5382.67);\n    new ShapeRef(router, polygon, 1053);\n\n    // shapeRef1054\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(11922.1, 5382.67);\n    polygon.ps[1] = Point(11922.1, 5444.67);\n    polygon.ps[2] = Point(11860.1, 5444.67);\n    polygon.ps[3] = Point(11860.1, 5382.67);\n    new ShapeRef(router, polygon, 1054);\n\n    // shapeRef1055\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(11922.1, 5725.9);\n    polygon.ps[1] = Point(11922.1, 5787.9);\n    polygon.ps[2] = Point(11860.1, 5787.9);\n    polygon.ps[3] = Point(11860.1, 5725.9);\n    new ShapeRef(router, polygon, 1055);\n\n    // shapeRef1056\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(12219.1, 5382.67);\n    polygon.ps[1] = Point(12219.1, 5444.67);\n    polygon.ps[2] = Point(12157.1, 5444.67);\n    polygon.ps[3] = Point(12157.1, 5382.67);\n    new ShapeRef(router, polygon, 1056);\n\n    // shapeRef1057\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(11922.1, 6186.51);\n    polygon.ps[1] = Point(11922.1, 6248.51);\n    polygon.ps[2] = Point(11860.1, 6248.51);\n    polygon.ps[3] = Point(11860.1, 6186.51);\n    new ShapeRef(router, polygon, 1057);\n\n    // shapeRef1058\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(12219.1, 6186.51);\n    polygon.ps[1] = Point(12219.1, 6248.51);\n    polygon.ps[2] = Point(12157.1, 6248.51);\n    polygon.ps[3] = Point(12157.1, 6186.51);\n    new ShapeRef(router, polygon, 1058);\n\n    // shapeRef1059\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(12562.5, 7746.79);\n    polygon.ps[1] = Point(12562.5, 7808.79);\n    polygon.ps[2] = Point(12500.5, 7808.79);\n    polygon.ps[3] = Point(12500.5, 7746.79);\n    new ShapeRef(router, polygon, 1059);\n\n    // shapeRef1060\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(16295.6, 8449.99);\n    polygon.ps[1] = Point(16295.6, 8511.99);\n    polygon.ps[2] = Point(16233.6, 8511.99);\n    polygon.ps[3] = Point(16233.6, 8449.99);\n    new ShapeRef(router, polygon, 1060);\n\n    // shapeRef1061\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(16295.6, 8743.22);\n    polygon.ps[1] = Point(16295.6, 8805.22);\n    polygon.ps[2] = Point(16233.6, 8805.22);\n    polygon.ps[3] = Point(16233.6, 8743.22);\n    new ShapeRef(router, polygon, 1061);\n\n    // shapeRef1062\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(16588.8, 8449.99);\n    polygon.ps[1] = Point(16588.8, 8511.99);\n    polygon.ps[2] = Point(16526.8, 8511.99);\n    polygon.ps[3] = Point(16526.8, 8449.99);\n    new ShapeRef(router, polygon, 1062);\n\n    // shapeRef1063\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(2175, 5481.67);\n    polygon.ps[1] = Point(2175, 5543.67);\n    polygon.ps[2] = Point(2113, 5543.67);\n    polygon.ps[3] = Point(2113, 5481.67);\n    new ShapeRef(router, polygon, 1063);\n\n    // shapeRef1064\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(1779, 5481.67);\n    polygon.ps[1] = Point(1779, 5543.67);\n    polygon.ps[2] = Point(1717, 5543.67);\n    polygon.ps[3] = Point(1717, 5481.67);\n    new ShapeRef(router, polygon, 1064);\n\n    // shapeRef1065\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(723, 5481.67);\n    polygon.ps[1] = Point(723, 5543.67);\n    polygon.ps[2] = Point(661, 5543.67);\n    polygon.ps[3] = Point(661, 5481.67);\n    new ShapeRef(router, polygon, 1065);\n\n    // shapeRef1066\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(5013, 5039.4);\n    polygon.ps[1] = Point(5013, 5101.4);\n    polygon.ps[2] = Point(4951, 5101.4);\n    polygon.ps[3] = Point(4951, 5039.4);\n    new ShapeRef(router, polygon, 1066);\n\n    // shapeRef1067\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(3594, 5039.4);\n    polygon.ps[1] = Point(3594, 5101.4);\n    polygon.ps[2] = Point(3532, 5101.4);\n    polygon.ps[3] = Point(3532, 5039.4);\n    new ShapeRef(router, polygon, 1067);\n\n    // shapeRef1068\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(3891, 7911.79);\n    polygon.ps[1] = Point(3891, 7973.79);\n    polygon.ps[2] = Point(3829, 7973.79);\n    polygon.ps[3] = Point(3829, 7911.79);\n    new ShapeRef(router, polygon, 1068);\n\n    // shapeRef1069\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(4056, 7097.4);\n    polygon.ps[1] = Point(4056, 7159.4);\n    polygon.ps[2] = Point(3994, 7159.4);\n    polygon.ps[3] = Point(3994, 7097.4);\n    new ShapeRef(router, polygon, 1069);\n\n    // shapeRef1070\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(17970.5, 9149.42);\n    polygon.ps[1] = Point(17970.5, 9211.42);\n    polygon.ps[2] = Point(17908.5, 9211.42);\n    polygon.ps[3] = Point(17908.5, 9149.42);\n    new ShapeRef(router, polygon, 1070);\n\n    // shapeRef1071\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(18234.5, 9149.42);\n    polygon.ps[1] = Point(18234.5, 9211.42);\n    polygon.ps[2] = Point(18172.5, 9211.42);\n    polygon.ps[3] = Point(18172.5, 9149.42);\n    new ShapeRef(router, polygon, 1071);\n\n    // shapeRef1072\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(12021.1, 9677.42);\n    polygon.ps[1] = Point(12021.1, 9739.42);\n    polygon.ps[2] = Point(11959.1, 9739.42);\n    polygon.ps[3] = Point(11959.1, 9677.42);\n    new ShapeRef(router, polygon, 1072);\n\n    // shapeRef1073\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(12021.1, 10308);\n    polygon.ps[1] = Point(12021.1, 10370);\n    polygon.ps[2] = Point(11959.1, 10370);\n    polygon.ps[3] = Point(11959.1, 10308);\n    new ShapeRef(router, polygon, 1073);\n\n    // shapeRef1074\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(12021.1, 9182.42);\n    polygon.ps[1] = Point(12021.1, 9244.42);\n    polygon.ps[2] = Point(11959.1, 9244.42);\n    polygon.ps[3] = Point(11959.1, 9182.42);\n    new ShapeRef(router, polygon, 1074);\n\n    // shapeRef1075\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(4518, 51.2652);\n    polygon.ps[1] = Point(4518, 113.265);\n    polygon.ps[2] = Point(4456, 113.265);\n    polygon.ps[3] = Point(4456, 51.2652);\n    new ShapeRef(router, polygon, 1075);\n\n    // shapeRef1076\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(4122, 183.265);\n    polygon.ps[1] = Point(4122, 245.265);\n    polygon.ps[2] = Point(4060, 245.265);\n    polygon.ps[3] = Point(4060, 183.265);\n    new ShapeRef(router, polygon, 1076);\n\n    // shapeRef1077\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8060.29, 4095.51);\n    polygon.ps[1] = Point(8060.29, 4157.51);\n    polygon.ps[2] = Point(7998.29, 4157.51);\n    polygon.ps[3] = Point(7998.29, 4095.51);\n    new ShapeRef(router, polygon, 1077);\n\n    // shapeRef1078\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(5277, 3043.29);\n    polygon.ps[1] = Point(5277, 3105.29);\n    polygon.ps[2] = Point(5215, 3105.29);\n    polygon.ps[3] = Point(5215, 3043.29);\n    new ShapeRef(router, polygon, 1078);\n\n    // shapeRef1079\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(10741.2, 6998.4);\n    polygon.ps[1] = Point(10741.2, 7060.4);\n    polygon.ps[2] = Point(10679.2, 7060.4);\n    polygon.ps[3] = Point(10679.2, 6998.4);\n    new ShapeRef(router, polygon, 1079);\n\n    // shapeRef1080\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9914.69, 6516.51);\n    polygon.ps[1] = Point(9914.69, 6578.51);\n    polygon.ps[2] = Point(9852.69, 6578.51);\n    polygon.ps[3] = Point(9852.69, 6516.51);\n    new ShapeRef(router, polygon, 1080);\n\n    // shapeRef1081\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(10454.9, 6998.4);\n    polygon.ps[1] = Point(10454.9, 7060.4);\n    polygon.ps[2] = Point(10392.9, 7060.4);\n    polygon.ps[3] = Point(10392.9, 6998.4);\n    new ShapeRef(router, polygon, 1081);\n\n    // shapeRef1082\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(7408.1, 3600.51);\n    polygon.ps[1] = Point(7408.1, 3662.51);\n    polygon.ps[2] = Point(7346.1, 3662.51);\n    polygon.ps[3] = Point(7346.1, 3600.51);\n    new ShapeRef(router, polygon, 1082);\n\n    // shapeRef1083\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(7408.1, 3996.51);\n    polygon.ps[1] = Point(7408.1, 4058.51);\n    polygon.ps[2] = Point(7346.1, 4058.51);\n    polygon.ps[3] = Point(7346.1, 3996.51);\n    new ShapeRef(router, polygon, 1083);\n\n    // shapeRef1084\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(7408.1, 3798.51);\n    polygon.ps[1] = Point(7408.1, 3860.51);\n    polygon.ps[2] = Point(7346.1, 3860.51);\n    polygon.ps[3] = Point(7346.1, 3798.51);\n    new ShapeRef(router, polygon, 1084);\n\n    // shapeRef1085\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(7829.29, 3798.51);\n    polygon.ps[1] = Point(7829.29, 3860.51);\n    polygon.ps[2] = Point(7767.29, 3860.51);\n    polygon.ps[3] = Point(7767.29, 3798.51);\n    new ShapeRef(router, polygon, 1085);\n\n    // shapeRef1086\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(7928.29, 11763.9);\n    polygon.ps[1] = Point(7928.29, 11825.9);\n    polygon.ps[2] = Point(7866.29, 11825.9);\n    polygon.ps[3] = Point(7866.29, 11763.9);\n    new ShapeRef(router, polygon, 1086);\n\n    // shapeRef1087\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(12562.5, 11763.9);\n    polygon.ps[1] = Point(12562.5, 11825.9);\n    polygon.ps[2] = Point(12500.5, 11825.9);\n    polygon.ps[3] = Point(12500.5, 11763.9);\n    new ShapeRef(router, polygon, 1087);\n\n    // shapeRef1088\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(1317, 2515.29);\n    polygon.ps[1] = Point(1317, 2577.29);\n    polygon.ps[2] = Point(1255, 2577.29);\n    polygon.ps[3] = Point(1255, 2515.29);\n    new ShapeRef(router, polygon, 1088);\n\n    // shapeRef1089\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8689.03, 14797.9);\n    polygon.ps[1] = Point(8689.03, 14837.9);\n    polygon.ps[2] = Point(8634.03, 14837.9);\n    polygon.ps[3] = Point(8634.03, 14797.9);\n    new ShapeRef(router, polygon, 1089);\n\n    // shapeRef1090\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8789.03, 14797.9);\n    polygon.ps[1] = Point(8789.03, 14837.9);\n    polygon.ps[2] = Point(8734.03, 14837.9);\n    polygon.ps[3] = Point(8734.03, 14797.9);\n    new ShapeRef(router, polygon, 1090);\n\n    // shapeRef1091\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8889.03, 14797.9);\n    polygon.ps[1] = Point(8889.03, 14837.9);\n    polygon.ps[2] = Point(8834.03, 14837.9);\n    polygon.ps[3] = Point(8834.03, 14797.9);\n    new ShapeRef(router, polygon, 1091);\n\n    // shapeRef1092\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8989.03, 14797.9);\n    polygon.ps[1] = Point(8989.03, 14837.9);\n    polygon.ps[2] = Point(8934.03, 14837.9);\n    polygon.ps[3] = Point(8934.03, 14797.9);\n    new ShapeRef(router, polygon, 1092);\n\n    // shapeRef1093\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9089.03, 14797.9);\n    polygon.ps[1] = Point(9089.03, 14837.9);\n    polygon.ps[2] = Point(9034.03, 14837.9);\n    polygon.ps[3] = Point(9034.03, 14797.9);\n    new ShapeRef(router, polygon, 1093);\n\n    // shapeRef1094\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9189.03, 14797.9);\n    polygon.ps[1] = Point(9189.03, 14837.9);\n    polygon.ps[2] = Point(9134.03, 14837.9);\n    polygon.ps[3] = Point(9134.03, 14797.9);\n    new ShapeRef(router, polygon, 1094);\n\n    // shapeRef1095\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9289.03, 14797.9);\n    polygon.ps[1] = Point(9289.03, 14837.9);\n    polygon.ps[2] = Point(9234.03, 14837.9);\n    polygon.ps[3] = Point(9234.03, 14797.9);\n    new ShapeRef(router, polygon, 1095);\n\n    // shapeRef1096\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9389.03, 14797.9);\n    polygon.ps[1] = Point(9389.03, 14837.9);\n    polygon.ps[2] = Point(9334.03, 14837.9);\n    polygon.ps[3] = Point(9334.03, 14797.9);\n    new ShapeRef(router, polygon, 1096);\n\n    // shapeRef1097\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8389.03, 14897.9);\n    polygon.ps[1] = Point(8389.03, 14937.9);\n    polygon.ps[2] = Point(8334.03, 14937.9);\n    polygon.ps[3] = Point(8334.03, 14897.9);\n    new ShapeRef(router, polygon, 1097);\n\n    // shapeRef1098\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8489.03, 14897.9);\n    polygon.ps[1] = Point(8489.03, 14937.9);\n    polygon.ps[2] = Point(8434.03, 14937.9);\n    polygon.ps[3] = Point(8434.03, 14897.9);\n    new ShapeRef(router, polygon, 1098);\n\n    // shapeRef1099\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8589.03, 14897.9);\n    polygon.ps[1] = Point(8589.03, 14937.9);\n    polygon.ps[2] = Point(8534.03, 14937.9);\n    polygon.ps[3] = Point(8534.03, 14897.9);\n    new ShapeRef(router, polygon, 1099);\n\n    // shapeRef1100\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8689.03, 14897.9);\n    polygon.ps[1] = Point(8689.03, 14937.9);\n    polygon.ps[2] = Point(8634.03, 14937.9);\n    polygon.ps[3] = Point(8634.03, 14897.9);\n    new ShapeRef(router, polygon, 1100);\n\n    // shapeRef1101\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8789.03, 14897.9);\n    polygon.ps[1] = Point(8789.03, 14937.9);\n    polygon.ps[2] = Point(8734.03, 14937.9);\n    polygon.ps[3] = Point(8734.03, 14897.9);\n    new ShapeRef(router, polygon, 1101);\n\n    // shapeRef1102\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8889.03, 14897.9);\n    polygon.ps[1] = Point(8889.03, 14937.9);\n    polygon.ps[2] = Point(8834.03, 14937.9);\n    polygon.ps[3] = Point(8834.03, 14897.9);\n    new ShapeRef(router, polygon, 1102);\n\n    // shapeRef1103\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8989.03, 14897.9);\n    polygon.ps[1] = Point(8989.03, 14937.9);\n    polygon.ps[2] = Point(8934.03, 14937.9);\n    polygon.ps[3] = Point(8934.03, 14897.9);\n    new ShapeRef(router, polygon, 1103);\n\n    // shapeRef1104\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9089.03, 14897.9);\n    polygon.ps[1] = Point(9089.03, 14937.9);\n    polygon.ps[2] = Point(9034.03, 14937.9);\n    polygon.ps[3] = Point(9034.03, 14897.9);\n    new ShapeRef(router, polygon, 1104);\n\n    // shapeRef1105\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9189.03, 14897.9);\n    polygon.ps[1] = Point(9189.03, 14937.9);\n    polygon.ps[2] = Point(9134.03, 14937.9);\n    polygon.ps[3] = Point(9134.03, 14897.9);\n    new ShapeRef(router, polygon, 1105);\n\n    // shapeRef1106\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9289.03, 14897.9);\n    polygon.ps[1] = Point(9289.03, 14937.9);\n    polygon.ps[2] = Point(9234.03, 14937.9);\n    polygon.ps[3] = Point(9234.03, 14897.9);\n    new ShapeRef(router, polygon, 1106);\n\n    // shapeRef1107\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9389.03, 14897.9);\n    polygon.ps[1] = Point(9389.03, 14937.9);\n    polygon.ps[2] = Point(9334.03, 14937.9);\n    polygon.ps[3] = Point(9334.03, 14897.9);\n    new ShapeRef(router, polygon, 1107);\n\n    // shapeRef1108\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8389.03, 14997.9);\n    polygon.ps[1] = Point(8389.03, 15037.9);\n    polygon.ps[2] = Point(8334.03, 15037.9);\n    polygon.ps[3] = Point(8334.03, 14997.9);\n    new ShapeRef(router, polygon, 1108);\n\n    // shapeRef1109\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8489.03, 14997.9);\n    polygon.ps[1] = Point(8489.03, 15037.9);\n    polygon.ps[2] = Point(8434.03, 15037.9);\n    polygon.ps[3] = Point(8434.03, 14997.9);\n    new ShapeRef(router, polygon, 1109);\n\n    // shapeRef1110\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8589.03, 14997.9);\n    polygon.ps[1] = Point(8589.03, 15037.9);\n    polygon.ps[2] = Point(8534.03, 15037.9);\n    polygon.ps[3] = Point(8534.03, 14997.9);\n    new ShapeRef(router, polygon, 1110);\n\n    // shapeRef1111\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8689.03, 14997.9);\n    polygon.ps[1] = Point(8689.03, 15037.9);\n    polygon.ps[2] = Point(8634.03, 15037.9);\n    polygon.ps[3] = Point(8634.03, 14997.9);\n    new ShapeRef(router, polygon, 1111);\n\n    // shapeRef1112\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8789.03, 14997.9);\n    polygon.ps[1] = Point(8789.03, 15037.9);\n    polygon.ps[2] = Point(8734.03, 15037.9);\n    polygon.ps[3] = Point(8734.03, 14997.9);\n    new ShapeRef(router, polygon, 1112);\n\n    // shapeRef1113\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8889.03, 14997.9);\n    polygon.ps[1] = Point(8889.03, 15037.9);\n    polygon.ps[2] = Point(8834.03, 15037.9);\n    polygon.ps[3] = Point(8834.03, 14997.9);\n    new ShapeRef(router, polygon, 1113);\n\n    // shapeRef1114\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8989.03, 14997.9);\n    polygon.ps[1] = Point(8989.03, 15037.9);\n    polygon.ps[2] = Point(8934.03, 15037.9);\n    polygon.ps[3] = Point(8934.03, 14997.9);\n    new ShapeRef(router, polygon, 1114);\n\n    // shapeRef1115\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9089.03, 14997.9);\n    polygon.ps[1] = Point(9089.03, 15037.9);\n    polygon.ps[2] = Point(9034.03, 15037.9);\n    polygon.ps[3] = Point(9034.03, 14997.9);\n    new ShapeRef(router, polygon, 1115);\n\n    // shapeRef1116\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9189.03, 14997.9);\n    polygon.ps[1] = Point(9189.03, 15037.9);\n    polygon.ps[2] = Point(9134.03, 15037.9);\n    polygon.ps[3] = Point(9134.03, 14997.9);\n    new ShapeRef(router, polygon, 1116);\n\n    // shapeRef1117\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9289.03, 14997.9);\n    polygon.ps[1] = Point(9289.03, 15037.9);\n    polygon.ps[2] = Point(9234.03, 15037.9);\n    polygon.ps[3] = Point(9234.03, 14997.9);\n    new ShapeRef(router, polygon, 1117);\n\n    // shapeRef1118\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9389.03, 14997.9);\n    polygon.ps[1] = Point(9389.03, 15037.9);\n    polygon.ps[2] = Point(9334.03, 15037.9);\n    polygon.ps[3] = Point(9334.03, 14997.9);\n    new ShapeRef(router, polygon, 1118);\n\n    // shapeRef1119\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8389.03, 15097.9);\n    polygon.ps[1] = Point(8389.03, 15137.9);\n    polygon.ps[2] = Point(8334.03, 15137.9);\n    polygon.ps[3] = Point(8334.03, 15097.9);\n    new ShapeRef(router, polygon, 1119);\n\n    // shapeRef1120\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8489.03, 15097.9);\n    polygon.ps[1] = Point(8489.03, 15137.9);\n    polygon.ps[2] = Point(8434.03, 15137.9);\n    polygon.ps[3] = Point(8434.03, 15097.9);\n    new ShapeRef(router, polygon, 1120);\n\n    // shapeRef1121\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8589.03, 15097.9);\n    polygon.ps[1] = Point(8589.03, 15137.9);\n    polygon.ps[2] = Point(8534.03, 15137.9);\n    polygon.ps[3] = Point(8534.03, 15097.9);\n    new ShapeRef(router, polygon, 1121);\n\n    // shapeRef1122\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8789.03, 15097.9);\n    polygon.ps[1] = Point(8789.03, 15137.9);\n    polygon.ps[2] = Point(8734.03, 15137.9);\n    polygon.ps[3] = Point(8734.03, 15097.9);\n    new ShapeRef(router, polygon, 1122);\n\n    // shapeRef1123\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8889.03, 15097.9);\n    polygon.ps[1] = Point(8889.03, 15137.9);\n    polygon.ps[2] = Point(8834.03, 15137.9);\n    polygon.ps[3] = Point(8834.03, 15097.9);\n    new ShapeRef(router, polygon, 1123);\n\n    // shapeRef1124\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8989.03, 15097.9);\n    polygon.ps[1] = Point(8989.03, 15137.9);\n    polygon.ps[2] = Point(8934.03, 15137.9);\n    polygon.ps[3] = Point(8934.03, 15097.9);\n    new ShapeRef(router, polygon, 1124);\n\n    // shapeRef1125\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9089.03, 15097.9);\n    polygon.ps[1] = Point(9089.03, 15137.9);\n    polygon.ps[2] = Point(9034.03, 15137.9);\n    polygon.ps[3] = Point(9034.03, 15097.9);\n    new ShapeRef(router, polygon, 1125);\n\n    // shapeRef1126\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9189.03, 15097.9);\n    polygon.ps[1] = Point(9189.03, 15137.9);\n    polygon.ps[2] = Point(9134.03, 15137.9);\n    polygon.ps[3] = Point(9134.03, 15097.9);\n    new ShapeRef(router, polygon, 1126);\n\n    // shapeRef1127\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9289.03, 15097.9);\n    polygon.ps[1] = Point(9289.03, 15137.9);\n    polygon.ps[2] = Point(9234.03, 15137.9);\n    polygon.ps[3] = Point(9234.03, 15097.9);\n    new ShapeRef(router, polygon, 1127);\n\n    // shapeRef1128\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9389.03, 15097.9);\n    polygon.ps[1] = Point(9389.03, 15137.9);\n    polygon.ps[2] = Point(9334.03, 15137.9);\n    polygon.ps[3] = Point(9334.03, 15097.9);\n    new ShapeRef(router, polygon, 1128);\n\n    // shapeRef1129\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8389.03, 15197.9);\n    polygon.ps[1] = Point(8389.03, 15237.9);\n    polygon.ps[2] = Point(8334.03, 15237.9);\n    polygon.ps[3] = Point(8334.03, 15197.9);\n    new ShapeRef(router, polygon, 1129);\n\n    // shapeRef1130\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8489.03, 15197.9);\n    polygon.ps[1] = Point(8489.03, 15237.9);\n    polygon.ps[2] = Point(8434.03, 15237.9);\n    polygon.ps[3] = Point(8434.03, 15197.9);\n    new ShapeRef(router, polygon, 1130);\n\n    // shapeRef1131\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8789.03, 15197.9);\n    polygon.ps[1] = Point(8789.03, 15237.9);\n    polygon.ps[2] = Point(8734.03, 15237.9);\n    polygon.ps[3] = Point(8734.03, 15197.9);\n    new ShapeRef(router, polygon, 1131);\n\n    // shapeRef1132\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8889.03, 15197.9);\n    polygon.ps[1] = Point(8889.03, 15237.9);\n    polygon.ps[2] = Point(8834.03, 15237.9);\n    polygon.ps[3] = Point(8834.03, 15197.9);\n    new ShapeRef(router, polygon, 1132);\n\n    // shapeRef1133\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8989.03, 15197.9);\n    polygon.ps[1] = Point(8989.03, 15237.9);\n    polygon.ps[2] = Point(8934.03, 15237.9);\n    polygon.ps[3] = Point(8934.03, 15197.9);\n    new ShapeRef(router, polygon, 1133);\n\n    // shapeRef1134\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9089.03, 15197.9);\n    polygon.ps[1] = Point(9089.03, 15237.9);\n    polygon.ps[2] = Point(9034.03, 15237.9);\n    polygon.ps[3] = Point(9034.03, 15197.9);\n    new ShapeRef(router, polygon, 1134);\n\n    // shapeRef1135\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9289.03, 15197.9);\n    polygon.ps[1] = Point(9289.03, 15237.9);\n    polygon.ps[2] = Point(9234.03, 15237.9);\n    polygon.ps[3] = Point(9234.03, 15197.9);\n    new ShapeRef(router, polygon, 1135);\n\n    // shapeRef1136\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9389.03, 15197.9);\n    polygon.ps[1] = Point(9389.03, 15237.9);\n    polygon.ps[2] = Point(9334.03, 15237.9);\n    polygon.ps[3] = Point(9334.03, 15197.9);\n    new ShapeRef(router, polygon, 1136);\n\n    // shapeRef1137\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8389.03, 15297.9);\n    polygon.ps[1] = Point(8389.03, 15337.9);\n    polygon.ps[2] = Point(8334.03, 15337.9);\n    polygon.ps[3] = Point(8334.03, 15297.9);\n    new ShapeRef(router, polygon, 1137);\n\n    // shapeRef1138\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8489.03, 15297.9);\n    polygon.ps[1] = Point(8489.03, 15337.9);\n    polygon.ps[2] = Point(8434.03, 15337.9);\n    polygon.ps[3] = Point(8434.03, 15297.9);\n    new ShapeRef(router, polygon, 1138);\n\n    // shapeRef1139\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8589.03, 15297.9);\n    polygon.ps[1] = Point(8589.03, 15337.9);\n    polygon.ps[2] = Point(8534.03, 15337.9);\n    polygon.ps[3] = Point(8534.03, 15297.9);\n    new ShapeRef(router, polygon, 1139);\n\n    // shapeRef1140\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8689.03, 15297.9);\n    polygon.ps[1] = Point(8689.03, 15337.9);\n    polygon.ps[2] = Point(8634.03, 15337.9);\n    polygon.ps[3] = Point(8634.03, 15297.9);\n    new ShapeRef(router, polygon, 1140);\n\n    // shapeRef1141\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8789.03, 15297.9);\n    polygon.ps[1] = Point(8789.03, 15337.9);\n    polygon.ps[2] = Point(8734.03, 15337.9);\n    polygon.ps[3] = Point(8734.03, 15297.9);\n    new ShapeRef(router, polygon, 1141);\n\n    // shapeRef1142\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8889.03, 15297.9);\n    polygon.ps[1] = Point(8889.03, 15337.9);\n    polygon.ps[2] = Point(8834.03, 15337.9);\n    polygon.ps[3] = Point(8834.03, 15297.9);\n    new ShapeRef(router, polygon, 1142);\n\n    // shapeRef1143\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8989.03, 15297.9);\n    polygon.ps[1] = Point(8989.03, 15337.9);\n    polygon.ps[2] = Point(8934.03, 15337.9);\n    polygon.ps[3] = Point(8934.03, 15297.9);\n    new ShapeRef(router, polygon, 1143);\n\n    // shapeRef1144\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9089.03, 15297.9);\n    polygon.ps[1] = Point(9089.03, 15337.9);\n    polygon.ps[2] = Point(9034.03, 15337.9);\n    polygon.ps[3] = Point(9034.03, 15297.9);\n    new ShapeRef(router, polygon, 1144);\n\n    // shapeRef1145\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9189.03, 15297.9);\n    polygon.ps[1] = Point(9189.03, 15337.9);\n    polygon.ps[2] = Point(9134.03, 15337.9);\n    polygon.ps[3] = Point(9134.03, 15297.9);\n    new ShapeRef(router, polygon, 1145);\n\n    // shapeRef1146\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9289.03, 15297.9);\n    polygon.ps[1] = Point(9289.03, 15337.9);\n    polygon.ps[2] = Point(9234.03, 15337.9);\n    polygon.ps[3] = Point(9234.03, 15297.9);\n    new ShapeRef(router, polygon, 1146);\n\n    // shapeRef1147\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9389.03, 15297.9);\n    polygon.ps[1] = Point(9389.03, 15337.9);\n    polygon.ps[2] = Point(9334.03, 15337.9);\n    polygon.ps[3] = Point(9334.03, 15297.9);\n    new ShapeRef(router, polygon, 1147);\n\n    // shapeRef1148\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8389.03, 15397.9);\n    polygon.ps[1] = Point(8389.03, 15437.9);\n    polygon.ps[2] = Point(8334.03, 15437.9);\n    polygon.ps[3] = Point(8334.03, 15397.9);\n    new ShapeRef(router, polygon, 1148);\n\n    // shapeRef1149\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8489.03, 15397.9);\n    polygon.ps[1] = Point(8489.03, 15437.9);\n    polygon.ps[2] = Point(8434.03, 15437.9);\n    polygon.ps[3] = Point(8434.03, 15397.9);\n    new ShapeRef(router, polygon, 1149);\n\n    // shapeRef1150\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8589.03, 15397.9);\n    polygon.ps[1] = Point(8589.03, 15437.9);\n    polygon.ps[2] = Point(8534.03, 15437.9);\n    polygon.ps[3] = Point(8534.03, 15397.9);\n    new ShapeRef(router, polygon, 1150);\n\n    // shapeRef1151\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8689.03, 15397.9);\n    polygon.ps[1] = Point(8689.03, 15437.9);\n    polygon.ps[2] = Point(8634.03, 15437.9);\n    polygon.ps[3] = Point(8634.03, 15397.9);\n    new ShapeRef(router, polygon, 1151);\n\n    // shapeRef1152\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8789.03, 15397.9);\n    polygon.ps[1] = Point(8789.03, 15437.9);\n    polygon.ps[2] = Point(8734.03, 15437.9);\n    polygon.ps[3] = Point(8734.03, 15397.9);\n    new ShapeRef(router, polygon, 1152);\n\n    // shapeRef1153\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8889.03, 15397.9);\n    polygon.ps[1] = Point(8889.03, 15437.9);\n    polygon.ps[2] = Point(8834.03, 15437.9);\n    polygon.ps[3] = Point(8834.03, 15397.9);\n    new ShapeRef(router, polygon, 1153);\n\n    // shapeRef1154\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8989.03, 15397.9);\n    polygon.ps[1] = Point(8989.03, 15437.9);\n    polygon.ps[2] = Point(8934.03, 15437.9);\n    polygon.ps[3] = Point(8934.03, 15397.9);\n    new ShapeRef(router, polygon, 1154);\n\n    // shapeRef1155\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9089.03, 15397.9);\n    polygon.ps[1] = Point(9089.03, 15437.9);\n    polygon.ps[2] = Point(9034.03, 15437.9);\n    polygon.ps[3] = Point(9034.03, 15397.9);\n    new ShapeRef(router, polygon, 1155);\n\n    // shapeRef1156\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9189.03, 15397.9);\n    polygon.ps[1] = Point(9189.03, 15437.9);\n    polygon.ps[2] = Point(9134.03, 15437.9);\n    polygon.ps[3] = Point(9134.03, 15397.9);\n    new ShapeRef(router, polygon, 1156);\n\n    // shapeRef1157\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9289.03, 15397.9);\n    polygon.ps[1] = Point(9289.03, 15437.9);\n    polygon.ps[2] = Point(9234.03, 15437.9);\n    polygon.ps[3] = Point(9234.03, 15397.9);\n    new ShapeRef(router, polygon, 1157);\n\n    // shapeRef1158\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9389.03, 15397.9);\n    polygon.ps[1] = Point(9389.03, 15437.9);\n    polygon.ps[2] = Point(9334.03, 15437.9);\n    polygon.ps[3] = Point(9334.03, 15397.9);\n    new ShapeRef(router, polygon, 1158);\n\n    // shapeRef1159\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8489.03, 15497.9);\n    polygon.ps[1] = Point(8489.03, 15537.9);\n    polygon.ps[2] = Point(8434.03, 15537.9);\n    polygon.ps[3] = Point(8434.03, 15497.9);\n    new ShapeRef(router, polygon, 1159);\n\n    // shapeRef1160\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8589.03, 15497.9);\n    polygon.ps[1] = Point(8589.03, 15537.9);\n    polygon.ps[2] = Point(8534.03, 15537.9);\n    polygon.ps[3] = Point(8534.03, 15497.9);\n    new ShapeRef(router, polygon, 1160);\n\n    // shapeRef1161\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8689.03, 15497.9);\n    polygon.ps[1] = Point(8689.03, 15537.9);\n    polygon.ps[2] = Point(8634.03, 15537.9);\n    polygon.ps[3] = Point(8634.03, 15497.9);\n    new ShapeRef(router, polygon, 1161);\n\n    // shapeRef1162\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8789.03, 15497.9);\n    polygon.ps[1] = Point(8789.03, 15537.9);\n    polygon.ps[2] = Point(8734.03, 15537.9);\n    polygon.ps[3] = Point(8734.03, 15497.9);\n    new ShapeRef(router, polygon, 1162);\n\n    // shapeRef1163\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8889.03, 15497.9);\n    polygon.ps[1] = Point(8889.03, 15537.9);\n    polygon.ps[2] = Point(8834.03, 15537.9);\n    polygon.ps[3] = Point(8834.03, 15497.9);\n    new ShapeRef(router, polygon, 1163);\n\n    // shapeRef1164\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8989.03, 15497.9);\n    polygon.ps[1] = Point(8989.03, 15537.9);\n    polygon.ps[2] = Point(8934.03, 15537.9);\n    polygon.ps[3] = Point(8934.03, 15497.9);\n    new ShapeRef(router, polygon, 1164);\n\n    // shapeRef1165\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9089.03, 15497.9);\n    polygon.ps[1] = Point(9089.03, 15537.9);\n    polygon.ps[2] = Point(9034.03, 15537.9);\n    polygon.ps[3] = Point(9034.03, 15497.9);\n    new ShapeRef(router, polygon, 1165);\n\n    // shapeRef1166\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9189.03, 15497.9);\n    polygon.ps[1] = Point(9189.03, 15537.9);\n    polygon.ps[2] = Point(9134.03, 15537.9);\n    polygon.ps[3] = Point(9134.03, 15497.9);\n    new ShapeRef(router, polygon, 1166);\n\n    // shapeRef1167\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9289.03, 15497.9);\n    polygon.ps[1] = Point(9289.03, 15537.9);\n    polygon.ps[2] = Point(9234.03, 15537.9);\n    polygon.ps[3] = Point(9234.03, 15497.9);\n    new ShapeRef(router, polygon, 1167);\n\n    // shapeRef1168\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9389.03, 15497.9);\n    polygon.ps[1] = Point(9389.03, 15537.9);\n    polygon.ps[2] = Point(9334.03, 15537.9);\n    polygon.ps[3] = Point(9334.03, 15497.9);\n    new ShapeRef(router, polygon, 1168);\n\n    // shapeRef1169\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8389.03, 15597.9);\n    polygon.ps[1] = Point(8389.03, 15637.9);\n    polygon.ps[2] = Point(8334.03, 15637.9);\n    polygon.ps[3] = Point(8334.03, 15597.9);\n    new ShapeRef(router, polygon, 1169);\n\n    // shapeRef1170\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8489.03, 15597.9);\n    polygon.ps[1] = Point(8489.03, 15637.9);\n    polygon.ps[2] = Point(8434.03, 15637.9);\n    polygon.ps[3] = Point(8434.03, 15597.9);\n    new ShapeRef(router, polygon, 1170);\n\n    // shapeRef1171\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8589.03, 15597.9);\n    polygon.ps[1] = Point(8589.03, 15637.9);\n    polygon.ps[2] = Point(8534.03, 15637.9);\n    polygon.ps[3] = Point(8534.03, 15597.9);\n    new ShapeRef(router, polygon, 1171);\n\n    // shapeRef1172\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8689.03, 15597.9);\n    polygon.ps[1] = Point(8689.03, 15637.9);\n    polygon.ps[2] = Point(8634.03, 15637.9);\n    polygon.ps[3] = Point(8634.03, 15597.9);\n    new ShapeRef(router, polygon, 1172);\n\n    // shapeRef1173\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8789.03, 15597.9);\n    polygon.ps[1] = Point(8789.03, 15637.9);\n    polygon.ps[2] = Point(8734.03, 15637.9);\n    polygon.ps[3] = Point(8734.03, 15597.9);\n    new ShapeRef(router, polygon, 1173);\n\n    // shapeRef1174\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8889.03, 15597.9);\n    polygon.ps[1] = Point(8889.03, 15637.9);\n    polygon.ps[2] = Point(8834.03, 15637.9);\n    polygon.ps[3] = Point(8834.03, 15597.9);\n    new ShapeRef(router, polygon, 1174);\n\n    // shapeRef1175\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8989.03, 15597.9);\n    polygon.ps[1] = Point(8989.03, 15637.9);\n    polygon.ps[2] = Point(8934.03, 15637.9);\n    polygon.ps[3] = Point(8934.03, 15597.9);\n    new ShapeRef(router, polygon, 1175);\n\n    // shapeRef1176\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9089.03, 15597.9);\n    polygon.ps[1] = Point(9089.03, 15637.9);\n    polygon.ps[2] = Point(9034.03, 15637.9);\n    polygon.ps[3] = Point(9034.03, 15597.9);\n    new ShapeRef(router, polygon, 1176);\n\n    // shapeRef1177\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9189.03, 15597.9);\n    polygon.ps[1] = Point(9189.03, 15637.9);\n    polygon.ps[2] = Point(9134.03, 15637.9);\n    polygon.ps[3] = Point(9134.03, 15597.9);\n    new ShapeRef(router, polygon, 1177);\n\n    // shapeRef1178\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9289.03, 15597.9);\n    polygon.ps[1] = Point(9289.03, 15637.9);\n    polygon.ps[2] = Point(9234.03, 15637.9);\n    polygon.ps[3] = Point(9234.03, 15597.9);\n    new ShapeRef(router, polygon, 1178);\n\n    // shapeRef1179\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9389.03, 15597.9);\n    polygon.ps[1] = Point(9389.03, 15637.9);\n    polygon.ps[2] = Point(9334.03, 15637.9);\n    polygon.ps[3] = Point(9334.03, 15597.9);\n    new ShapeRef(router, polygon, 1179);\n\n    // shapeRef1180\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8389.03, 15697.9);\n    polygon.ps[1] = Point(8389.03, 15737.9);\n    polygon.ps[2] = Point(8334.03, 15737.9);\n    polygon.ps[3] = Point(8334.03, 15697.9);\n    new ShapeRef(router, polygon, 1180);\n\n    // shapeRef1181\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8489.03, 15697.9);\n    polygon.ps[1] = Point(8489.03, 15737.9);\n    polygon.ps[2] = Point(8434.03, 15737.9);\n    polygon.ps[3] = Point(8434.03, 15697.9);\n    new ShapeRef(router, polygon, 1181);\n\n    // shapeRef1182\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8589.03, 15697.9);\n    polygon.ps[1] = Point(8589.03, 15737.9);\n    polygon.ps[2] = Point(8534.03, 15737.9);\n    polygon.ps[3] = Point(8534.03, 15697.9);\n    new ShapeRef(router, polygon, 1182);\n\n    // shapeRef1183\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8689.03, 15697.9);\n    polygon.ps[1] = Point(8689.03, 15737.9);\n    polygon.ps[2] = Point(8634.03, 15737.9);\n    polygon.ps[3] = Point(8634.03, 15697.9);\n    new ShapeRef(router, polygon, 1183);\n\n    // shapeRef1184\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8789.03, 15697.9);\n    polygon.ps[1] = Point(8789.03, 15737.9);\n    polygon.ps[2] = Point(8734.03, 15737.9);\n    polygon.ps[3] = Point(8734.03, 15697.9);\n    new ShapeRef(router, polygon, 1184);\n\n    // shapeRef1185\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8889.03, 15697.9);\n    polygon.ps[1] = Point(8889.03, 15737.9);\n    polygon.ps[2] = Point(8834.03, 15737.9);\n    polygon.ps[3] = Point(8834.03, 15697.9);\n    new ShapeRef(router, polygon, 1185);\n\n    // shapeRef1186\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8989.03, 15697.9);\n    polygon.ps[1] = Point(8989.03, 15737.9);\n    polygon.ps[2] = Point(8934.03, 15737.9);\n    polygon.ps[3] = Point(8934.03, 15697.9);\n    new ShapeRef(router, polygon, 1186);\n\n    // shapeRef1187\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9089.03, 15697.9);\n    polygon.ps[1] = Point(9089.03, 15737.9);\n    polygon.ps[2] = Point(9034.03, 15737.9);\n    polygon.ps[3] = Point(9034.03, 15697.9);\n    new ShapeRef(router, polygon, 1187);\n\n    // shapeRef1188\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9189.03, 15697.9);\n    polygon.ps[1] = Point(9189.03, 15737.9);\n    polygon.ps[2] = Point(9134.03, 15737.9);\n    polygon.ps[3] = Point(9134.03, 15697.9);\n    new ShapeRef(router, polygon, 1188);\n\n    // shapeRef1189\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9289.03, 15697.9);\n    polygon.ps[1] = Point(9289.03, 15737.9);\n    polygon.ps[2] = Point(9234.03, 15737.9);\n    polygon.ps[3] = Point(9234.03, 15697.9);\n    new ShapeRef(router, polygon, 1189);\n\n    // shapeRef1190\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9389.03, 15697.9);\n    polygon.ps[1] = Point(9389.03, 15737.9);\n    polygon.ps[2] = Point(9334.03, 15737.9);\n    polygon.ps[3] = Point(9334.03, 15697.9);\n    new ShapeRef(router, polygon, 1190);\n\n    // shapeRef1191\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8389.03, 15797.9);\n    polygon.ps[1] = Point(8389.03, 15837.9);\n    polygon.ps[2] = Point(8334.03, 15837.9);\n    polygon.ps[3] = Point(8334.03, 15797.9);\n    new ShapeRef(router, polygon, 1191);\n\n    // shapeRef1192\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8489.03, 15797.9);\n    polygon.ps[1] = Point(8489.03, 15837.9);\n    polygon.ps[2] = Point(8434.03, 15837.9);\n    polygon.ps[3] = Point(8434.03, 15797.9);\n    new ShapeRef(router, polygon, 1192);\n\n    // shapeRef1193\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8589.03, 15797.9);\n    polygon.ps[1] = Point(8589.03, 15837.9);\n    polygon.ps[2] = Point(8534.03, 15837.9);\n    polygon.ps[3] = Point(8534.03, 15797.9);\n    new ShapeRef(router, polygon, 1193);\n\n    // shapeRef1194\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8689.03, 15797.9);\n    polygon.ps[1] = Point(8689.03, 15837.9);\n    polygon.ps[2] = Point(8634.03, 15837.9);\n    polygon.ps[3] = Point(8634.03, 15797.9);\n    new ShapeRef(router, polygon, 1194);\n\n    // shapeRef1195\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8789.03, 15797.9);\n    polygon.ps[1] = Point(8789.03, 15837.9);\n    polygon.ps[2] = Point(8734.03, 15837.9);\n    polygon.ps[3] = Point(8734.03, 15797.9);\n    new ShapeRef(router, polygon, 1195);\n\n    // shapeRef1196\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8889.03, 15797.9);\n    polygon.ps[1] = Point(8889.03, 15837.9);\n    polygon.ps[2] = Point(8834.03, 15837.9);\n    polygon.ps[3] = Point(8834.03, 15797.9);\n    new ShapeRef(router, polygon, 1196);\n\n    // shapeRef1197\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8989.03, 15797.9);\n    polygon.ps[1] = Point(8989.03, 15837.9);\n    polygon.ps[2] = Point(8934.03, 15837.9);\n    polygon.ps[3] = Point(8934.03, 15797.9);\n    new ShapeRef(router, polygon, 1197);\n\n    // shapeRef1198\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9089.03, 15797.9);\n    polygon.ps[1] = Point(9089.03, 15837.9);\n    polygon.ps[2] = Point(9034.03, 15837.9);\n    polygon.ps[3] = Point(9034.03, 15797.9);\n    new ShapeRef(router, polygon, 1198);\n\n    // shapeRef1199\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9189.03, 15797.9);\n    polygon.ps[1] = Point(9189.03, 15837.9);\n    polygon.ps[2] = Point(9134.03, 15837.9);\n    polygon.ps[3] = Point(9134.03, 15797.9);\n    new ShapeRef(router, polygon, 1199);\n\n    // shapeRef1200\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9289.03, 15797.9);\n    polygon.ps[1] = Point(9289.03, 15837.9);\n    polygon.ps[2] = Point(9234.03, 15837.9);\n    polygon.ps[3] = Point(9234.03, 15797.9);\n    new ShapeRef(router, polygon, 1200);\n\n    // shapeRef1201\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9389.03, 15797.9);\n    polygon.ps[1] = Point(9389.03, 15837.9);\n    polygon.ps[2] = Point(9334.03, 15837.9);\n    polygon.ps[3] = Point(9334.03, 15797.9);\n    new ShapeRef(router, polygon, 1201);\n\n    // shapeRef1202\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8389.03, 15897.9);\n    polygon.ps[1] = Point(8389.03, 15937.9);\n    polygon.ps[2] = Point(8334.03, 15937.9);\n    polygon.ps[3] = Point(8334.03, 15897.9);\n    new ShapeRef(router, polygon, 1202);\n\n    // shapeRef1203\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8489.03, 15897.9);\n    polygon.ps[1] = Point(8489.03, 15937.9);\n    polygon.ps[2] = Point(8434.03, 15937.9);\n    polygon.ps[3] = Point(8434.03, 15897.9);\n    new ShapeRef(router, polygon, 1203);\n\n    // shapeRef1204\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8589.03, 15897.9);\n    polygon.ps[1] = Point(8589.03, 15937.9);\n    polygon.ps[2] = Point(8534.03, 15937.9);\n    polygon.ps[3] = Point(8534.03, 15897.9);\n    new ShapeRef(router, polygon, 1204);\n\n    // shapeRef1205\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8689.03, 15897.9);\n    polygon.ps[1] = Point(8689.03, 15937.9);\n    polygon.ps[2] = Point(8634.03, 15937.9);\n    polygon.ps[3] = Point(8634.03, 15897.9);\n    new ShapeRef(router, polygon, 1205);\n\n    // shapeRef1206\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8789.03, 15897.9);\n    polygon.ps[1] = Point(8789.03, 15937.9);\n    polygon.ps[2] = Point(8734.03, 15937.9);\n    polygon.ps[3] = Point(8734.03, 15897.9);\n    new ShapeRef(router, polygon, 1206);\n\n    // shapeRef1207\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8889.03, 15897.9);\n    polygon.ps[1] = Point(8889.03, 15937.9);\n    polygon.ps[2] = Point(8834.03, 15937.9);\n    polygon.ps[3] = Point(8834.03, 15897.9);\n    new ShapeRef(router, polygon, 1207);\n\n    // shapeRef1208\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8989.03, 15897.9);\n    polygon.ps[1] = Point(8989.03, 15937.9);\n    polygon.ps[2] = Point(8934.03, 15937.9);\n    polygon.ps[3] = Point(8934.03, 15897.9);\n    new ShapeRef(router, polygon, 1208);\n\n    // shapeRef1209\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9089.03, 15897.9);\n    polygon.ps[1] = Point(9089.03, 15937.9);\n    polygon.ps[2] = Point(9034.03, 15937.9);\n    polygon.ps[3] = Point(9034.03, 15897.9);\n    new ShapeRef(router, polygon, 1209);\n\n    // shapeRef1210\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9189.03, 15897.9);\n    polygon.ps[1] = Point(9189.03, 15937.9);\n    polygon.ps[2] = Point(9134.03, 15937.9);\n    polygon.ps[3] = Point(9134.03, 15897.9);\n    new ShapeRef(router, polygon, 1210);\n\n    // shapeRef1211\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9289.03, 15897.9);\n    polygon.ps[1] = Point(9289.03, 15937.9);\n    polygon.ps[2] = Point(9234.03, 15937.9);\n    polygon.ps[3] = Point(9234.03, 15897.9);\n    new ShapeRef(router, polygon, 1211);\n\n    // shapeRef1212\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9389.03, 15897.9);\n    polygon.ps[1] = Point(9389.03, 15937.9);\n    polygon.ps[2] = Point(9334.03, 15937.9);\n    polygon.ps[3] = Point(9334.03, 15897.9);\n    new ShapeRef(router, polygon, 1212);\n\n    // shapeRef1213\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8389.03, 15997.9);\n    polygon.ps[1] = Point(8389.03, 16037.9);\n    polygon.ps[2] = Point(8334.03, 16037.9);\n    polygon.ps[3] = Point(8334.03, 15997.9);\n    new ShapeRef(router, polygon, 1213);\n\n    // shapeRef1214\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8489.03, 15997.9);\n    polygon.ps[1] = Point(8489.03, 16037.9);\n    polygon.ps[2] = Point(8434.03, 16037.9);\n    polygon.ps[3] = Point(8434.03, 15997.9);\n    new ShapeRef(router, polygon, 1214);\n\n    // shapeRef1215\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8589.03, 15997.9);\n    polygon.ps[1] = Point(8589.03, 16037.9);\n    polygon.ps[2] = Point(8534.03, 16037.9);\n    polygon.ps[3] = Point(8534.03, 15997.9);\n    new ShapeRef(router, polygon, 1215);\n\n    // shapeRef1216\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8689.03, 15997.9);\n    polygon.ps[1] = Point(8689.03, 16037.9);\n    polygon.ps[2] = Point(8634.03, 16037.9);\n    polygon.ps[3] = Point(8634.03, 15997.9);\n    new ShapeRef(router, polygon, 1216);\n\n    // shapeRef1217\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8789.03, 15997.9);\n    polygon.ps[1] = Point(8789.03, 16037.9);\n    polygon.ps[2] = Point(8734.03, 16037.9);\n    polygon.ps[3] = Point(8734.03, 15997.9);\n    new ShapeRef(router, polygon, 1217);\n\n    // shapeRef1218\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8889.03, 15997.9);\n    polygon.ps[1] = Point(8889.03, 16037.9);\n    polygon.ps[2] = Point(8834.03, 16037.9);\n    polygon.ps[3] = Point(8834.03, 15997.9);\n    new ShapeRef(router, polygon, 1218);\n\n    // shapeRef1219\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8989.03, 15997.9);\n    polygon.ps[1] = Point(8989.03, 16037.9);\n    polygon.ps[2] = Point(8934.03, 16037.9);\n    polygon.ps[3] = Point(8934.03, 15997.9);\n    new ShapeRef(router, polygon, 1219);\n\n    // shapeRef1220\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9089.03, 15997.9);\n    polygon.ps[1] = Point(9089.03, 16037.9);\n    polygon.ps[2] = Point(9034.03, 16037.9);\n    polygon.ps[3] = Point(9034.03, 15997.9);\n    new ShapeRef(router, polygon, 1220);\n\n    // shapeRef1221\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9189.03, 15997.9);\n    polygon.ps[1] = Point(9189.03, 16037.9);\n    polygon.ps[2] = Point(9134.03, 16037.9);\n    polygon.ps[3] = Point(9134.03, 15997.9);\n    new ShapeRef(router, polygon, 1221);\n\n    // shapeRef1222\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9289.03, 15997.9);\n    polygon.ps[1] = Point(9289.03, 16037.9);\n    polygon.ps[2] = Point(9234.03, 16037.9);\n    polygon.ps[3] = Point(9234.03, 15997.9);\n    new ShapeRef(router, polygon, 1222);\n\n    // shapeRef1223\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9389.03, 15997.9);\n    polygon.ps[1] = Point(9389.03, 16037.9);\n    polygon.ps[2] = Point(9334.03, 16037.9);\n    polygon.ps[3] = Point(9334.03, 15997.9);\n    new ShapeRef(router, polygon, 1223);\n\n    // shapeRef1224\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8389.03, 16097.9);\n    polygon.ps[1] = Point(8389.03, 16137.9);\n    polygon.ps[2] = Point(8334.03, 16137.9);\n    polygon.ps[3] = Point(8334.03, 16097.9);\n    new ShapeRef(router, polygon, 1224);\n\n    // shapeRef1225\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8489.03, 16097.9);\n    polygon.ps[1] = Point(8489.03, 16137.9);\n    polygon.ps[2] = Point(8434.03, 16137.9);\n    polygon.ps[3] = Point(8434.03, 16097.9);\n    new ShapeRef(router, polygon, 1225);\n\n    // shapeRef1226\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8589.03, 16097.9);\n    polygon.ps[1] = Point(8589.03, 16137.9);\n    polygon.ps[2] = Point(8534.03, 16137.9);\n    polygon.ps[3] = Point(8534.03, 16097.9);\n    new ShapeRef(router, polygon, 1226);\n\n    // shapeRef1227\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8689.03, 16097.9);\n    polygon.ps[1] = Point(8689.03, 16137.9);\n    polygon.ps[2] = Point(8634.03, 16137.9);\n    polygon.ps[3] = Point(8634.03, 16097.9);\n    new ShapeRef(router, polygon, 1227);\n\n    // shapeRef1228\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8789.03, 16097.9);\n    polygon.ps[1] = Point(8789.03, 16137.9);\n    polygon.ps[2] = Point(8734.03, 16137.9);\n    polygon.ps[3] = Point(8734.03, 16097.9);\n    new ShapeRef(router, polygon, 1228);\n\n    // shapeRef1229\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8889.03, 16097.9);\n    polygon.ps[1] = Point(8889.03, 16137.9);\n    polygon.ps[2] = Point(8834.03, 16137.9);\n    polygon.ps[3] = Point(8834.03, 16097.9);\n    new ShapeRef(router, polygon, 1229);\n\n    // shapeRef1230\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8989.03, 16097.9);\n    polygon.ps[1] = Point(8989.03, 16137.9);\n    polygon.ps[2] = Point(8934.03, 16137.9);\n    polygon.ps[3] = Point(8934.03, 16097.9);\n    new ShapeRef(router, polygon, 1230);\n\n    // shapeRef1231\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9089.03, 16097.9);\n    polygon.ps[1] = Point(9089.03, 16137.9);\n    polygon.ps[2] = Point(9034.03, 16137.9);\n    polygon.ps[3] = Point(9034.03, 16097.9);\n    new ShapeRef(router, polygon, 1231);\n\n    // shapeRef1232\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9189.03, 16097.9);\n    polygon.ps[1] = Point(9189.03, 16137.9);\n    polygon.ps[2] = Point(9134.03, 16137.9);\n    polygon.ps[3] = Point(9134.03, 16097.9);\n    new ShapeRef(router, polygon, 1232);\n\n    // shapeRef1233\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9289.03, 16097.9);\n    polygon.ps[1] = Point(9289.03, 16137.9);\n    polygon.ps[2] = Point(9234.03, 16137.9);\n    polygon.ps[3] = Point(9234.03, 16097.9);\n    new ShapeRef(router, polygon, 1233);\n\n    // shapeRef1234\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9389.03, 16097.9);\n    polygon.ps[1] = Point(9389.03, 16137.9);\n    polygon.ps[2] = Point(9334.03, 16137.9);\n    polygon.ps[3] = Point(9334.03, 16097.9);\n    new ShapeRef(router, polygon, 1234);\n\n    // shapeRef1235\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8389.03, 16197.9);\n    polygon.ps[1] = Point(8389.03, 16237.9);\n    polygon.ps[2] = Point(8334.03, 16237.9);\n    polygon.ps[3] = Point(8334.03, 16197.9);\n    new ShapeRef(router, polygon, 1235);\n\n    // shapeRef1236\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8489.03, 16197.9);\n    polygon.ps[1] = Point(8489.03, 16237.9);\n    polygon.ps[2] = Point(8434.03, 16237.9);\n    polygon.ps[3] = Point(8434.03, 16197.9);\n    new ShapeRef(router, polygon, 1236);\n\n    // shapeRef1237\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8589.03, 16197.9);\n    polygon.ps[1] = Point(8589.03, 16237.9);\n    polygon.ps[2] = Point(8534.03, 16237.9);\n    polygon.ps[3] = Point(8534.03, 16197.9);\n    new ShapeRef(router, polygon, 1237);\n\n    // shapeRef1238\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8689.03, 16197.9);\n    polygon.ps[1] = Point(8689.03, 16237.9);\n    polygon.ps[2] = Point(8634.03, 16237.9);\n    polygon.ps[3] = Point(8634.03, 16197.9);\n    new ShapeRef(router, polygon, 1238);\n\n    // shapeRef1239\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8789.03, 16197.9);\n    polygon.ps[1] = Point(8789.03, 16237.9);\n    polygon.ps[2] = Point(8734.03, 16237.9);\n    polygon.ps[3] = Point(8734.03, 16197.9);\n    new ShapeRef(router, polygon, 1239);\n\n    // shapeRef1240\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8889.03, 16197.9);\n    polygon.ps[1] = Point(8889.03, 16237.9);\n    polygon.ps[2] = Point(8834.03, 16237.9);\n    polygon.ps[3] = Point(8834.03, 16197.9);\n    new ShapeRef(router, polygon, 1240);\n\n    // shapeRef1241\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8989.03, 16197.9);\n    polygon.ps[1] = Point(8989.03, 16237.9);\n    polygon.ps[2] = Point(8934.03, 16237.9);\n    polygon.ps[3] = Point(8934.03, 16197.9);\n    new ShapeRef(router, polygon, 1241);\n\n    // shapeRef1242\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9089.03, 16197.9);\n    polygon.ps[1] = Point(9089.03, 16237.9);\n    polygon.ps[2] = Point(9034.03, 16237.9);\n    polygon.ps[3] = Point(9034.03, 16197.9);\n    new ShapeRef(router, polygon, 1242);\n\n    // shapeRef1243\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9189.03, 16197.9);\n    polygon.ps[1] = Point(9189.03, 16237.9);\n    polygon.ps[2] = Point(9134.03, 16237.9);\n    polygon.ps[3] = Point(9134.03, 16197.9);\n    new ShapeRef(router, polygon, 1243);\n\n    // shapeRef1244\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9289.03, 16197.9);\n    polygon.ps[1] = Point(9289.03, 16237.9);\n    polygon.ps[2] = Point(9234.03, 16237.9);\n    polygon.ps[3] = Point(9234.03, 16197.9);\n    new ShapeRef(router, polygon, 1244);\n\n    // shapeRef1245\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9389.03, 16197.9);\n    polygon.ps[1] = Point(9389.03, 16237.9);\n    polygon.ps[2] = Point(9334.03, 16237.9);\n    polygon.ps[3] = Point(9334.03, 16197.9);\n    new ShapeRef(router, polygon, 1245);\n\n    // shapeRef1246\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8389.03, 16297.9);\n    polygon.ps[1] = Point(8389.03, 16337.9);\n    polygon.ps[2] = Point(8334.03, 16337.9);\n    polygon.ps[3] = Point(8334.03, 16297.9);\n    new ShapeRef(router, polygon, 1246);\n\n    // shapeRef1247\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8489.03, 16297.9);\n    polygon.ps[1] = Point(8489.03, 16337.9);\n    polygon.ps[2] = Point(8434.03, 16337.9);\n    polygon.ps[3] = Point(8434.03, 16297.9);\n    new ShapeRef(router, polygon, 1247);\n\n    // shapeRef1248\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8589.03, 16297.9);\n    polygon.ps[1] = Point(8589.03, 16337.9);\n    polygon.ps[2] = Point(8534.03, 16337.9);\n    polygon.ps[3] = Point(8534.03, 16297.9);\n    new ShapeRef(router, polygon, 1248);\n\n    // shapeRef1249\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8689.03, 16297.9);\n    polygon.ps[1] = Point(8689.03, 16337.9);\n    polygon.ps[2] = Point(8634.03, 16337.9);\n    polygon.ps[3] = Point(8634.03, 16297.9);\n    new ShapeRef(router, polygon, 1249);\n\n    // shapeRef1250\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8789.03, 16297.9);\n    polygon.ps[1] = Point(8789.03, 16337.9);\n    polygon.ps[2] = Point(8734.03, 16337.9);\n    polygon.ps[3] = Point(8734.03, 16297.9);\n    new ShapeRef(router, polygon, 1250);\n\n    // shapeRef1251\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8889.03, 16297.9);\n    polygon.ps[1] = Point(8889.03, 16337.9);\n    polygon.ps[2] = Point(8834.03, 16337.9);\n    polygon.ps[3] = Point(8834.03, 16297.9);\n    new ShapeRef(router, polygon, 1251);\n\n    // shapeRef1252\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8989.03, 16297.9);\n    polygon.ps[1] = Point(8989.03, 16337.9);\n    polygon.ps[2] = Point(8934.03, 16337.9);\n    polygon.ps[3] = Point(8934.03, 16297.9);\n    new ShapeRef(router, polygon, 1252);\n\n    // shapeRef1253\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9089.03, 16297.9);\n    polygon.ps[1] = Point(9089.03, 16337.9);\n    polygon.ps[2] = Point(9034.03, 16337.9);\n    polygon.ps[3] = Point(9034.03, 16297.9);\n    new ShapeRef(router, polygon, 1253);\n\n    // shapeRef1254\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9189.03, 16297.9);\n    polygon.ps[1] = Point(9189.03, 16337.9);\n    polygon.ps[2] = Point(9134.03, 16337.9);\n    polygon.ps[3] = Point(9134.03, 16297.9);\n    new ShapeRef(router, polygon, 1254);\n\n    // shapeRef1255\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9289.03, 16297.9);\n    polygon.ps[1] = Point(9289.03, 16337.9);\n    polygon.ps[2] = Point(9234.03, 16337.9);\n    polygon.ps[3] = Point(9234.03, 16297.9);\n    new ShapeRef(router, polygon, 1255);\n\n    // shapeRef1256\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9389.03, 16297.9);\n    polygon.ps[1] = Point(9389.03, 16337.9);\n    polygon.ps[2] = Point(9334.03, 16337.9);\n    polygon.ps[3] = Point(9334.03, 16297.9);\n    new ShapeRef(router, polygon, 1256);\n\n    // shapeRef1257\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8389.03, 16397.9);\n    polygon.ps[1] = Point(8389.03, 16437.9);\n    polygon.ps[2] = Point(8334.03, 16437.9);\n    polygon.ps[3] = Point(8334.03, 16397.9);\n    new ShapeRef(router, polygon, 1257);\n\n    // shapeRef1258\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8489.03, 16397.9);\n    polygon.ps[1] = Point(8489.03, 16437.9);\n    polygon.ps[2] = Point(8434.03, 16437.9);\n    polygon.ps[3] = Point(8434.03, 16397.9);\n    new ShapeRef(router, polygon, 1258);\n\n    // shapeRef1259\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8589.03, 16397.9);\n    polygon.ps[1] = Point(8589.03, 16437.9);\n    polygon.ps[2] = Point(8534.03, 16437.9);\n    polygon.ps[3] = Point(8534.03, 16397.9);\n    new ShapeRef(router, polygon, 1259);\n\n    // shapeRef1260\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8689.03, 16397.9);\n    polygon.ps[1] = Point(8689.03, 16437.9);\n    polygon.ps[2] = Point(8634.03, 16437.9);\n    polygon.ps[3] = Point(8634.03, 16397.9);\n    new ShapeRef(router, polygon, 1260);\n\n    // shapeRef1261\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8789.03, 16397.9);\n    polygon.ps[1] = Point(8789.03, 16437.9);\n    polygon.ps[2] = Point(8734.03, 16437.9);\n    polygon.ps[3] = Point(8734.03, 16397.9);\n    new ShapeRef(router, polygon, 1261);\n\n    // shapeRef1262\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8889.03, 16397.9);\n    polygon.ps[1] = Point(8889.03, 16437.9);\n    polygon.ps[2] = Point(8834.03, 16437.9);\n    polygon.ps[3] = Point(8834.03, 16397.9);\n    new ShapeRef(router, polygon, 1262);\n\n    // shapeRef1263\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8989.03, 16397.9);\n    polygon.ps[1] = Point(8989.03, 16437.9);\n    polygon.ps[2] = Point(8934.03, 16437.9);\n    polygon.ps[3] = Point(8934.03, 16397.9);\n    new ShapeRef(router, polygon, 1263);\n\n    // shapeRef1264\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9089.03, 16397.9);\n    polygon.ps[1] = Point(9089.03, 16437.9);\n    polygon.ps[2] = Point(9034.03, 16437.9);\n    polygon.ps[3] = Point(9034.03, 16397.9);\n    new ShapeRef(router, polygon, 1264);\n\n    // shapeRef1265\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9189.03, 16397.9);\n    polygon.ps[1] = Point(9189.03, 16437.9);\n    polygon.ps[2] = Point(9134.03, 16437.9);\n    polygon.ps[3] = Point(9134.03, 16397.9);\n    new ShapeRef(router, polygon, 1265);\n\n    // shapeRef1266\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9289.03, 16397.9);\n    polygon.ps[1] = Point(9289.03, 16437.9);\n    polygon.ps[2] = Point(9234.03, 16437.9);\n    polygon.ps[3] = Point(9234.03, 16397.9);\n    new ShapeRef(router, polygon, 1266);\n\n    // shapeRef1267\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9389.03, 16397.9);\n    polygon.ps[1] = Point(9389.03, 16437.9);\n    polygon.ps[2] = Point(9334.03, 16437.9);\n    polygon.ps[3] = Point(9334.03, 16397.9);\n    new ShapeRef(router, polygon, 1267);\n\n    // shapeRef1268\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8389.03, 16497.9);\n    polygon.ps[1] = Point(8389.03, 16537.9);\n    polygon.ps[2] = Point(8334.03, 16537.9);\n    polygon.ps[3] = Point(8334.03, 16497.9);\n    new ShapeRef(router, polygon, 1268);\n\n    // shapeRef1269\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8489.03, 16497.9);\n    polygon.ps[1] = Point(8489.03, 16537.9);\n    polygon.ps[2] = Point(8434.03, 16537.9);\n    polygon.ps[3] = Point(8434.03, 16497.9);\n    new ShapeRef(router, polygon, 1269);\n\n    // shapeRef1270\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8589.03, 16497.9);\n    polygon.ps[1] = Point(8589.03, 16537.9);\n    polygon.ps[2] = Point(8534.03, 16537.9);\n    polygon.ps[3] = Point(8534.03, 16497.9);\n    new ShapeRef(router, polygon, 1270);\n\n    // shapeRef1271\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8689.03, 16497.9);\n    polygon.ps[1] = Point(8689.03, 16537.9);\n    polygon.ps[2] = Point(8634.03, 16537.9);\n    polygon.ps[3] = Point(8634.03, 16497.9);\n    new ShapeRef(router, polygon, 1271);\n\n    // shapeRef1272\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8789.03, 16497.9);\n    polygon.ps[1] = Point(8789.03, 16537.9);\n    polygon.ps[2] = Point(8734.03, 16537.9);\n    polygon.ps[3] = Point(8734.03, 16497.9);\n    new ShapeRef(router, polygon, 1272);\n\n    // shapeRef1273\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8889.03, 16497.9);\n    polygon.ps[1] = Point(8889.03, 16537.9);\n    polygon.ps[2] = Point(8834.03, 16537.9);\n    polygon.ps[3] = Point(8834.03, 16497.9);\n    new ShapeRef(router, polygon, 1273);\n\n    // shapeRef1274\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8989.03, 16497.9);\n    polygon.ps[1] = Point(8989.03, 16537.9);\n    polygon.ps[2] = Point(8934.03, 16537.9);\n    polygon.ps[3] = Point(8934.03, 16497.9);\n    new ShapeRef(router, polygon, 1274);\n\n    // shapeRef1275\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9089.03, 16497.9);\n    polygon.ps[1] = Point(9089.03, 16537.9);\n    polygon.ps[2] = Point(9034.03, 16537.9);\n    polygon.ps[3] = Point(9034.03, 16497.9);\n    new ShapeRef(router, polygon, 1275);\n\n    // shapeRef1276\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9189.03, 16497.9);\n    polygon.ps[1] = Point(9189.03, 16537.9);\n    polygon.ps[2] = Point(9134.03, 16537.9);\n    polygon.ps[3] = Point(9134.03, 16497.9);\n    new ShapeRef(router, polygon, 1276);\n\n    // shapeRef1277\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9289.03, 16497.9);\n    polygon.ps[1] = Point(9289.03, 16537.9);\n    polygon.ps[2] = Point(9234.03, 16537.9);\n    polygon.ps[3] = Point(9234.03, 16497.9);\n    new ShapeRef(router, polygon, 1277);\n\n    // shapeRef1278\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9389.03, 16497.9);\n    polygon.ps[1] = Point(9389.03, 16537.9);\n    polygon.ps[2] = Point(9334.03, 16537.9);\n    polygon.ps[3] = Point(9334.03, 16497.9);\n    new ShapeRef(router, polygon, 1278);\n\n    // shapeRef1279\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8389.03, 16597.9);\n    polygon.ps[1] = Point(8389.03, 16637.9);\n    polygon.ps[2] = Point(8334.03, 16637.9);\n    polygon.ps[3] = Point(8334.03, 16597.9);\n    new ShapeRef(router, polygon, 1279);\n\n    // shapeRef1280\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8489.03, 16597.9);\n    polygon.ps[1] = Point(8489.03, 16637.9);\n    polygon.ps[2] = Point(8434.03, 16637.9);\n    polygon.ps[3] = Point(8434.03, 16597.9);\n    new ShapeRef(router, polygon, 1280);\n\n    // shapeRef1281\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8589.03, 16597.9);\n    polygon.ps[1] = Point(8589.03, 16637.9);\n    polygon.ps[2] = Point(8534.03, 16637.9);\n    polygon.ps[3] = Point(8534.03, 16597.9);\n    new ShapeRef(router, polygon, 1281);\n\n    // shapeRef1282\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8689.03, 16597.9);\n    polygon.ps[1] = Point(8689.03, 16637.9);\n    polygon.ps[2] = Point(8634.03, 16637.9);\n    polygon.ps[3] = Point(8634.03, 16597.9);\n    new ShapeRef(router, polygon, 1282);\n\n    // shapeRef1283\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8789.03, 16597.9);\n    polygon.ps[1] = Point(8789.03, 16637.9);\n    polygon.ps[2] = Point(8734.03, 16637.9);\n    polygon.ps[3] = Point(8734.03, 16597.9);\n    new ShapeRef(router, polygon, 1283);\n\n    // shapeRef1284\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8889.03, 16597.9);\n    polygon.ps[1] = Point(8889.03, 16637.9);\n    polygon.ps[2] = Point(8834.03, 16637.9);\n    polygon.ps[3] = Point(8834.03, 16597.9);\n    new ShapeRef(router, polygon, 1284);\n\n    // shapeRef1285\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8989.03, 16597.9);\n    polygon.ps[1] = Point(8989.03, 16637.9);\n    polygon.ps[2] = Point(8934.03, 16637.9);\n    polygon.ps[3] = Point(8934.03, 16597.9);\n    new ShapeRef(router, polygon, 1285);\n\n    // shapeRef1286\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9089.03, 16597.9);\n    polygon.ps[1] = Point(9089.03, 16637.9);\n    polygon.ps[2] = Point(9034.03, 16637.9);\n    polygon.ps[3] = Point(9034.03, 16597.9);\n    new ShapeRef(router, polygon, 1286);\n\n    // shapeRef1287\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9189.03, 16597.9);\n    polygon.ps[1] = Point(9189.03, 16637.9);\n    polygon.ps[2] = Point(9134.03, 16637.9);\n    polygon.ps[3] = Point(9134.03, 16597.9);\n    new ShapeRef(router, polygon, 1287);\n\n    // shapeRef1288\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9289.03, 16597.9);\n    polygon.ps[1] = Point(9289.03, 16637.9);\n    polygon.ps[2] = Point(9234.03, 16637.9);\n    polygon.ps[3] = Point(9234.03, 16597.9);\n    new ShapeRef(router, polygon, 1288);\n\n    // shapeRef1289\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9389.03, 16597.9);\n    polygon.ps[1] = Point(9389.03, 16637.9);\n    polygon.ps[2] = Point(9334.03, 16637.9);\n    polygon.ps[3] = Point(9334.03, 16597.9);\n    new ShapeRef(router, polygon, 1289);\n\n    // shapeRef1290\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8389.03, 16697.9);\n    polygon.ps[1] = Point(8389.03, 16737.9);\n    polygon.ps[2] = Point(8334.03, 16737.9);\n    polygon.ps[3] = Point(8334.03, 16697.9);\n    new ShapeRef(router, polygon, 1290);\n\n    // shapeRef1291\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8489.03, 16697.9);\n    polygon.ps[1] = Point(8489.03, 16737.9);\n    polygon.ps[2] = Point(8434.03, 16737.9);\n    polygon.ps[3] = Point(8434.03, 16697.9);\n    new ShapeRef(router, polygon, 1291);\n\n    // shapeRef1292\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8589.03, 16697.9);\n    polygon.ps[1] = Point(8589.03, 16737.9);\n    polygon.ps[2] = Point(8534.03, 16737.9);\n    polygon.ps[3] = Point(8534.03, 16697.9);\n    new ShapeRef(router, polygon, 1292);\n\n    // shapeRef1293\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8689.03, 16697.9);\n    polygon.ps[1] = Point(8689.03, 16737.9);\n    polygon.ps[2] = Point(8634.03, 16737.9);\n    polygon.ps[3] = Point(8634.03, 16697.9);\n    new ShapeRef(router, polygon, 1293);\n\n    // shapeRef1294\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8789.03, 16697.9);\n    polygon.ps[1] = Point(8789.03, 16737.9);\n    polygon.ps[2] = Point(8734.03, 16737.9);\n    polygon.ps[3] = Point(8734.03, 16697.9);\n    new ShapeRef(router, polygon, 1294);\n\n    // shapeRef1295\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8889.03, 16697.9);\n    polygon.ps[1] = Point(8889.03, 16737.9);\n    polygon.ps[2] = Point(8834.03, 16737.9);\n    polygon.ps[3] = Point(8834.03, 16697.9);\n    new ShapeRef(router, polygon, 1295);\n\n    // shapeRef1296\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8989.03, 16697.9);\n    polygon.ps[1] = Point(8989.03, 16737.9);\n    polygon.ps[2] = Point(8934.03, 16737.9);\n    polygon.ps[3] = Point(8934.03, 16697.9);\n    new ShapeRef(router, polygon, 1296);\n\n    // shapeRef1297\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9089.03, 16697.9);\n    polygon.ps[1] = Point(9089.03, 16737.9);\n    polygon.ps[2] = Point(9034.03, 16737.9);\n    polygon.ps[3] = Point(9034.03, 16697.9);\n    new ShapeRef(router, polygon, 1297);\n\n    // shapeRef1298\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9189.03, 16697.9);\n    polygon.ps[1] = Point(9189.03, 16737.9);\n    polygon.ps[2] = Point(9134.03, 16737.9);\n    polygon.ps[3] = Point(9134.03, 16697.9);\n    new ShapeRef(router, polygon, 1298);\n\n    // shapeRef1299\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9289.03, 16697.9);\n    polygon.ps[1] = Point(9289.03, 16737.9);\n    polygon.ps[2] = Point(9234.03, 16737.9);\n    polygon.ps[3] = Point(9234.03, 16697.9);\n    new ShapeRef(router, polygon, 1299);\n\n    // shapeRef1300\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9389.03, 16697.9);\n    polygon.ps[1] = Point(9389.03, 16737.9);\n    polygon.ps[2] = Point(9334.03, 16737.9);\n    polygon.ps[3] = Point(9334.03, 16697.9);\n    new ShapeRef(router, polygon, 1300);\n\n    // shapeRef1301\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8389.03, 16797.9);\n    polygon.ps[1] = Point(8389.03, 16837.9);\n    polygon.ps[2] = Point(8334.03, 16837.9);\n    polygon.ps[3] = Point(8334.03, 16797.9);\n    new ShapeRef(router, polygon, 1301);\n\n    // shapeRef1302\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8489.03, 16797.9);\n    polygon.ps[1] = Point(8489.03, 16837.9);\n    polygon.ps[2] = Point(8434.03, 16837.9);\n    polygon.ps[3] = Point(8434.03, 16797.9);\n    new ShapeRef(router, polygon, 1302);\n\n    // shapeRef1303\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8589.03, 16797.9);\n    polygon.ps[1] = Point(8589.03, 16837.9);\n    polygon.ps[2] = Point(8534.03, 16837.9);\n    polygon.ps[3] = Point(8534.03, 16797.9);\n    new ShapeRef(router, polygon, 1303);\n\n    // shapeRef1304\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8689.03, 16797.9);\n    polygon.ps[1] = Point(8689.03, 16837.9);\n    polygon.ps[2] = Point(8634.03, 16837.9);\n    polygon.ps[3] = Point(8634.03, 16797.9);\n    new ShapeRef(router, polygon, 1304);\n\n    // shapeRef1305\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8789.03, 16797.9);\n    polygon.ps[1] = Point(8789.03, 16837.9);\n    polygon.ps[2] = Point(8734.03, 16837.9);\n    polygon.ps[3] = Point(8734.03, 16797.9);\n    new ShapeRef(router, polygon, 1305);\n\n    // shapeRef1306\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8889.03, 16797.9);\n    polygon.ps[1] = Point(8889.03, 16837.9);\n    polygon.ps[2] = Point(8834.03, 16837.9);\n    polygon.ps[3] = Point(8834.03, 16797.9);\n    new ShapeRef(router, polygon, 1306);\n\n    // shapeRef1307\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8989.03, 16797.9);\n    polygon.ps[1] = Point(8989.03, 16837.9);\n    polygon.ps[2] = Point(8934.03, 16837.9);\n    polygon.ps[3] = Point(8934.03, 16797.9);\n    new ShapeRef(router, polygon, 1307);\n\n    // shapeRef1308\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9089.03, 16797.9);\n    polygon.ps[1] = Point(9089.03, 16837.9);\n    polygon.ps[2] = Point(9034.03, 16837.9);\n    polygon.ps[3] = Point(9034.03, 16797.9);\n    new ShapeRef(router, polygon, 1308);\n\n    // shapeRef1309\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9189.03, 16797.9);\n    polygon.ps[1] = Point(9189.03, 16837.9);\n    polygon.ps[2] = Point(9134.03, 16837.9);\n    polygon.ps[3] = Point(9134.03, 16797.9);\n    new ShapeRef(router, polygon, 1309);\n\n    // shapeRef1310\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9289.03, 16797.9);\n    polygon.ps[1] = Point(9289.03, 16837.9);\n    polygon.ps[2] = Point(9234.03, 16837.9);\n    polygon.ps[3] = Point(9234.03, 16797.9);\n    new ShapeRef(router, polygon, 1310);\n\n    // shapeRef1311\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8389.03, 16897.9);\n    polygon.ps[1] = Point(8389.03, 16937.9);\n    polygon.ps[2] = Point(8334.03, 16937.9);\n    polygon.ps[3] = Point(8334.03, 16897.9);\n    new ShapeRef(router, polygon, 1311);\n\n    // shapeRef1312\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8489.03, 16897.9);\n    polygon.ps[1] = Point(8489.03, 16937.9);\n    polygon.ps[2] = Point(8434.03, 16937.9);\n    polygon.ps[3] = Point(8434.03, 16897.9);\n    new ShapeRef(router, polygon, 1312);\n\n    // shapeRef1313\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8589.03, 16897.9);\n    polygon.ps[1] = Point(8589.03, 16937.9);\n    polygon.ps[2] = Point(8534.03, 16937.9);\n    polygon.ps[3] = Point(8534.03, 16897.9);\n    new ShapeRef(router, polygon, 1313);\n\n    // shapeRef1314\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8689.03, 16897.9);\n    polygon.ps[1] = Point(8689.03, 16937.9);\n    polygon.ps[2] = Point(8634.03, 16937.9);\n    polygon.ps[3] = Point(8634.03, 16897.9);\n    new ShapeRef(router, polygon, 1314);\n\n    // shapeRef1315\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8789.03, 16897.9);\n    polygon.ps[1] = Point(8789.03, 16937.9);\n    polygon.ps[2] = Point(8734.03, 16937.9);\n    polygon.ps[3] = Point(8734.03, 16897.9);\n    new ShapeRef(router, polygon, 1315);\n\n    // shapeRef1316\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8889.03, 16897.9);\n    polygon.ps[1] = Point(8889.03, 16937.9);\n    polygon.ps[2] = Point(8834.03, 16937.9);\n    polygon.ps[3] = Point(8834.03, 16897.9);\n    new ShapeRef(router, polygon, 1316);\n\n    // shapeRef1317\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8989.03, 16897.9);\n    polygon.ps[1] = Point(8989.03, 16937.9);\n    polygon.ps[2] = Point(8934.03, 16937.9);\n    polygon.ps[3] = Point(8934.03, 16897.9);\n    new ShapeRef(router, polygon, 1317);\n\n    // shapeRef1318\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9189.03, 16897.9);\n    polygon.ps[1] = Point(9189.03, 16937.9);\n    polygon.ps[2] = Point(9134.03, 16937.9);\n    polygon.ps[3] = Point(9134.03, 16897.9);\n    new ShapeRef(router, polygon, 1318);\n\n    // shapeRef1319\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9289.03, 16897.9);\n    polygon.ps[1] = Point(9289.03, 16937.9);\n    polygon.ps[2] = Point(9234.03, 16937.9);\n    polygon.ps[3] = Point(9234.03, 16897.9);\n    new ShapeRef(router, polygon, 1319);\n\n    // shapeRef1320\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9389.03, 16897.9);\n    polygon.ps[1] = Point(9389.03, 16937.9);\n    polygon.ps[2] = Point(9334.03, 16937.9);\n    polygon.ps[3] = Point(9334.03, 16897.9);\n    new ShapeRef(router, polygon, 1320);\n\n    // shapeRef1321\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8389.03, 16997.9);\n    polygon.ps[1] = Point(8389.03, 17037.9);\n    polygon.ps[2] = Point(8334.03, 17037.9);\n    polygon.ps[3] = Point(8334.03, 16997.9);\n    new ShapeRef(router, polygon, 1321);\n\n    // shapeRef1322\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8489.03, 16997.9);\n    polygon.ps[1] = Point(8489.03, 17037.9);\n    polygon.ps[2] = Point(8434.03, 17037.9);\n    polygon.ps[3] = Point(8434.03, 16997.9);\n    new ShapeRef(router, polygon, 1322);\n\n    // shapeRef1323\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8589.03, 16997.9);\n    polygon.ps[1] = Point(8589.03, 17037.9);\n    polygon.ps[2] = Point(8534.03, 17037.9);\n    polygon.ps[3] = Point(8534.03, 16997.9);\n    new ShapeRef(router, polygon, 1323);\n\n    // shapeRef1324\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8789.03, 16997.9);\n    polygon.ps[1] = Point(8789.03, 17037.9);\n    polygon.ps[2] = Point(8734.03, 17037.9);\n    polygon.ps[3] = Point(8734.03, 16997.9);\n    new ShapeRef(router, polygon, 1324);\n\n    // shapeRef1325\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8889.03, 16997.9);\n    polygon.ps[1] = Point(8889.03, 17037.9);\n    polygon.ps[2] = Point(8834.03, 17037.9);\n    polygon.ps[3] = Point(8834.03, 16997.9);\n    new ShapeRef(router, polygon, 1325);\n\n    // shapeRef1326\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8989.03, 16997.9);\n    polygon.ps[1] = Point(8989.03, 17037.9);\n    polygon.ps[2] = Point(8934.03, 17037.9);\n    polygon.ps[3] = Point(8934.03, 16997.9);\n    new ShapeRef(router, polygon, 1326);\n\n    // shapeRef1327\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9089.03, 16997.9);\n    polygon.ps[1] = Point(9089.03, 17037.9);\n    polygon.ps[2] = Point(9034.03, 17037.9);\n    polygon.ps[3] = Point(9034.03, 16997.9);\n    new ShapeRef(router, polygon, 1327);\n\n    // shapeRef1328\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9189.03, 16997.9);\n    polygon.ps[1] = Point(9189.03, 17037.9);\n    polygon.ps[2] = Point(9134.03, 17037.9);\n    polygon.ps[3] = Point(9134.03, 16997.9);\n    new ShapeRef(router, polygon, 1328);\n\n    // shapeRef1329\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9289.03, 16997.9);\n    polygon.ps[1] = Point(9289.03, 17037.9);\n    polygon.ps[2] = Point(9234.03, 17037.9);\n    polygon.ps[3] = Point(9234.03, 16997.9);\n    new ShapeRef(router, polygon, 1329);\n\n    // shapeRef1330\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9389.03, 16997.9);\n    polygon.ps[1] = Point(9389.03, 17037.9);\n    polygon.ps[2] = Point(9334.03, 17037.9);\n    polygon.ps[3] = Point(9334.03, 16997.9);\n    new ShapeRef(router, polygon, 1330);\n\n    // shapeRef1331\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8389.03, 17097.9);\n    polygon.ps[1] = Point(8389.03, 17137.9);\n    polygon.ps[2] = Point(8334.03, 17137.9);\n    polygon.ps[3] = Point(8334.03, 17097.9);\n    new ShapeRef(router, polygon, 1331);\n\n    // shapeRef1332\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8489.03, 17097.9);\n    polygon.ps[1] = Point(8489.03, 17137.9);\n    polygon.ps[2] = Point(8434.03, 17137.9);\n    polygon.ps[3] = Point(8434.03, 17097.9);\n    new ShapeRef(router, polygon, 1332);\n\n    // shapeRef1333\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8589.03, 17097.9);\n    polygon.ps[1] = Point(8589.03, 17137.9);\n    polygon.ps[2] = Point(8534.03, 17137.9);\n    polygon.ps[3] = Point(8534.03, 17097.9);\n    new ShapeRef(router, polygon, 1333);\n\n    // shapeRef1334\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8689.03, 17097.9);\n    polygon.ps[1] = Point(8689.03, 17137.9);\n    polygon.ps[2] = Point(8634.03, 17137.9);\n    polygon.ps[3] = Point(8634.03, 17097.9);\n    new ShapeRef(router, polygon, 1334);\n\n    // shapeRef1335\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8789.03, 17097.9);\n    polygon.ps[1] = Point(8789.03, 17137.9);\n    polygon.ps[2] = Point(8734.03, 17137.9);\n    polygon.ps[3] = Point(8734.03, 17097.9);\n    new ShapeRef(router, polygon, 1335);\n\n    // shapeRef1336\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8889.03, 17097.9);\n    polygon.ps[1] = Point(8889.03, 17137.9);\n    polygon.ps[2] = Point(8834.03, 17137.9);\n    polygon.ps[3] = Point(8834.03, 17097.9);\n    new ShapeRef(router, polygon, 1336);\n\n    // shapeRef1337\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8989.03, 17097.9);\n    polygon.ps[1] = Point(8989.03, 17137.9);\n    polygon.ps[2] = Point(8934.03, 17137.9);\n    polygon.ps[3] = Point(8934.03, 17097.9);\n    new ShapeRef(router, polygon, 1337);\n\n    // shapeRef1338\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9089.03, 17097.9);\n    polygon.ps[1] = Point(9089.03, 17137.9);\n    polygon.ps[2] = Point(9034.03, 17137.9);\n    polygon.ps[3] = Point(9034.03, 17097.9);\n    new ShapeRef(router, polygon, 1338);\n\n    // shapeRef1339\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9289.03, 17097.9);\n    polygon.ps[1] = Point(9289.03, 17137.9);\n    polygon.ps[2] = Point(9234.03, 17137.9);\n    polygon.ps[3] = Point(9234.03, 17097.9);\n    new ShapeRef(router, polygon, 1339);\n\n    // shapeRef1340\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9389.03, 17097.9);\n    polygon.ps[1] = Point(9389.03, 17137.9);\n    polygon.ps[2] = Point(9334.03, 17137.9);\n    polygon.ps[3] = Point(9334.03, 17097.9);\n    new ShapeRef(router, polygon, 1340);\n\n    // shapeRef1341\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8389.03, 17197.9);\n    polygon.ps[1] = Point(8389.03, 17237.9);\n    polygon.ps[2] = Point(8334.03, 17237.9);\n    polygon.ps[3] = Point(8334.03, 17197.9);\n    new ShapeRef(router, polygon, 1341);\n\n    // shapeRef1342\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8489.03, 17197.9);\n    polygon.ps[1] = Point(8489.03, 17237.9);\n    polygon.ps[2] = Point(8434.03, 17237.9);\n    polygon.ps[3] = Point(8434.03, 17197.9);\n    new ShapeRef(router, polygon, 1342);\n\n    // shapeRef1343\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8589.03, 17197.9);\n    polygon.ps[1] = Point(8589.03, 17237.9);\n    polygon.ps[2] = Point(8534.03, 17237.9);\n    polygon.ps[3] = Point(8534.03, 17197.9);\n    new ShapeRef(router, polygon, 1343);\n\n    // shapeRef1344\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8789.03, 17197.9);\n    polygon.ps[1] = Point(8789.03, 17237.9);\n    polygon.ps[2] = Point(8734.03, 17237.9);\n    polygon.ps[3] = Point(8734.03, 17197.9);\n    new ShapeRef(router, polygon, 1344);\n\n    // shapeRef1345\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8889.03, 17197.9);\n    polygon.ps[1] = Point(8889.03, 17237.9);\n    polygon.ps[2] = Point(8834.03, 17237.9);\n    polygon.ps[3] = Point(8834.03, 17197.9);\n    new ShapeRef(router, polygon, 1345);\n\n    // shapeRef1346\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8989.03, 17197.9);\n    polygon.ps[1] = Point(8989.03, 17237.9);\n    polygon.ps[2] = Point(8934.03, 17237.9);\n    polygon.ps[3] = Point(8934.03, 17197.9);\n    new ShapeRef(router, polygon, 1346);\n\n    // shapeRef1347\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9089.03, 17197.9);\n    polygon.ps[1] = Point(9089.03, 17237.9);\n    polygon.ps[2] = Point(9034.03, 17237.9);\n    polygon.ps[3] = Point(9034.03, 17197.9);\n    new ShapeRef(router, polygon, 1347);\n\n    // shapeRef1348\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9189.03, 17197.9);\n    polygon.ps[1] = Point(9189.03, 17237.9);\n    polygon.ps[2] = Point(9134.03, 17237.9);\n    polygon.ps[3] = Point(9134.03, 17197.9);\n    new ShapeRef(router, polygon, 1348);\n\n    // shapeRef1349\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9289.03, 17197.9);\n    polygon.ps[1] = Point(9289.03, 17237.9);\n    polygon.ps[2] = Point(9234.03, 17237.9);\n    polygon.ps[3] = Point(9234.03, 17197.9);\n    new ShapeRef(router, polygon, 1349);\n\n    // shapeRef1350\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9389.03, 17197.9);\n    polygon.ps[1] = Point(9389.03, 17237.9);\n    polygon.ps[2] = Point(9334.03, 17237.9);\n    polygon.ps[3] = Point(9334.03, 17197.9);\n    new ShapeRef(router, polygon, 1350);\n\n    // shapeRef1351\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8389.03, 17297.9);\n    polygon.ps[1] = Point(8389.03, 17337.9);\n    polygon.ps[2] = Point(8334.03, 17337.9);\n    polygon.ps[3] = Point(8334.03, 17297.9);\n    new ShapeRef(router, polygon, 1351);\n\n    // shapeRef1352\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8489.03, 17297.9);\n    polygon.ps[1] = Point(8489.03, 17337.9);\n    polygon.ps[2] = Point(8434.03, 17337.9);\n    polygon.ps[3] = Point(8434.03, 17297.9);\n    new ShapeRef(router, polygon, 1352);\n\n    // shapeRef1353\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8589.03, 17297.9);\n    polygon.ps[1] = Point(8589.03, 17337.9);\n    polygon.ps[2] = Point(8534.03, 17337.9);\n    polygon.ps[3] = Point(8534.03, 17297.9);\n    new ShapeRef(router, polygon, 1353);\n\n    // shapeRef1354\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8689.03, 17297.9);\n    polygon.ps[1] = Point(8689.03, 17337.9);\n    polygon.ps[2] = Point(8634.03, 17337.9);\n    polygon.ps[3] = Point(8634.03, 17297.9);\n    new ShapeRef(router, polygon, 1354);\n\n    // shapeRef1355\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8789.03, 17297.9);\n    polygon.ps[1] = Point(8789.03, 17337.9);\n    polygon.ps[2] = Point(8734.03, 17337.9);\n    polygon.ps[3] = Point(8734.03, 17297.9);\n    new ShapeRef(router, polygon, 1355);\n\n    // shapeRef1356\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8889.03, 17297.9);\n    polygon.ps[1] = Point(8889.03, 17337.9);\n    polygon.ps[2] = Point(8834.03, 17337.9);\n    polygon.ps[3] = Point(8834.03, 17297.9);\n    new ShapeRef(router, polygon, 1356);\n\n    // shapeRef1357\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8989.03, 17297.9);\n    polygon.ps[1] = Point(8989.03, 17337.9);\n    polygon.ps[2] = Point(8934.03, 17337.9);\n    polygon.ps[3] = Point(8934.03, 17297.9);\n    new ShapeRef(router, polygon, 1357);\n\n    // shapeRef1358\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9189.03, 17297.9);\n    polygon.ps[1] = Point(9189.03, 17337.9);\n    polygon.ps[2] = Point(9134.03, 17337.9);\n    polygon.ps[3] = Point(9134.03, 17297.9);\n    new ShapeRef(router, polygon, 1358);\n\n    // shapeRef1359\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9289.03, 17297.9);\n    polygon.ps[1] = Point(9289.03, 17337.9);\n    polygon.ps[2] = Point(9234.03, 17337.9);\n    polygon.ps[3] = Point(9234.03, 17297.9);\n    new ShapeRef(router, polygon, 1359);\n\n    // shapeRef1360\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9389.03, 17297.9);\n    polygon.ps[1] = Point(9389.03, 17337.9);\n    polygon.ps[2] = Point(9334.03, 17337.9);\n    polygon.ps[3] = Point(9334.03, 17297.9);\n    new ShapeRef(router, polygon, 1360);\n\n    // shapeRef1361\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8389.03, 17397.9);\n    polygon.ps[1] = Point(8389.03, 17437.9);\n    polygon.ps[2] = Point(8334.03, 17437.9);\n    polygon.ps[3] = Point(8334.03, 17397.9);\n    new ShapeRef(router, polygon, 1361);\n\n    // shapeRef1362\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8489.03, 17397.9);\n    polygon.ps[1] = Point(8489.03, 17437.9);\n    polygon.ps[2] = Point(8434.03, 17437.9);\n    polygon.ps[3] = Point(8434.03, 17397.9);\n    new ShapeRef(router, polygon, 1362);\n\n    // shapeRef1363\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8589.03, 17397.9);\n    polygon.ps[1] = Point(8589.03, 17437.9);\n    polygon.ps[2] = Point(8534.03, 17437.9);\n    polygon.ps[3] = Point(8534.03, 17397.9);\n    new ShapeRef(router, polygon, 1363);\n\n    // shapeRef1364\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8689.03, 17397.9);\n    polygon.ps[1] = Point(8689.03, 17437.9);\n    polygon.ps[2] = Point(8634.03, 17437.9);\n    polygon.ps[3] = Point(8634.03, 17397.9);\n    new ShapeRef(router, polygon, 1364);\n\n    // shapeRef1365\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8789.03, 17397.9);\n    polygon.ps[1] = Point(8789.03, 17437.9);\n    polygon.ps[2] = Point(8734.03, 17437.9);\n    polygon.ps[3] = Point(8734.03, 17397.9);\n    new ShapeRef(router, polygon, 1365);\n\n    // shapeRef1366\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8889.03, 17397.9);\n    polygon.ps[1] = Point(8889.03, 17437.9);\n    polygon.ps[2] = Point(8834.03, 17437.9);\n    polygon.ps[3] = Point(8834.03, 17397.9);\n    new ShapeRef(router, polygon, 1366);\n\n    // shapeRef1367\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8989.03, 17397.9);\n    polygon.ps[1] = Point(8989.03, 17437.9);\n    polygon.ps[2] = Point(8934.03, 17437.9);\n    polygon.ps[3] = Point(8934.03, 17397.9);\n    new ShapeRef(router, polygon, 1367);\n\n    // shapeRef1368\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9189.03, 17397.9);\n    polygon.ps[1] = Point(9189.03, 17437.9);\n    polygon.ps[2] = Point(9134.03, 17437.9);\n    polygon.ps[3] = Point(9134.03, 17397.9);\n    new ShapeRef(router, polygon, 1368);\n\n    // shapeRef1369\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9289.03, 17397.9);\n    polygon.ps[1] = Point(9289.03, 17437.9);\n    polygon.ps[2] = Point(9234.03, 17437.9);\n    polygon.ps[3] = Point(9234.03, 17397.9);\n    new ShapeRef(router, polygon, 1369);\n\n    // shapeRef1370\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9389.03, 17397.9);\n    polygon.ps[1] = Point(9389.03, 17437.9);\n    polygon.ps[2] = Point(9334.03, 17437.9);\n    polygon.ps[3] = Point(9334.03, 17397.9);\n    new ShapeRef(router, polygon, 1370);\n\n    // shapeRef1371\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8389.03, 17497.9);\n    polygon.ps[1] = Point(8389.03, 17537.9);\n    polygon.ps[2] = Point(8334.03, 17537.9);\n    polygon.ps[3] = Point(8334.03, 17497.9);\n    new ShapeRef(router, polygon, 1371);\n\n    // shapeRef1372\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8489.03, 17497.9);\n    polygon.ps[1] = Point(8489.03, 17537.9);\n    polygon.ps[2] = Point(8434.03, 17537.9);\n    polygon.ps[3] = Point(8434.03, 17497.9);\n    new ShapeRef(router, polygon, 1372);\n\n    // shapeRef1373\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8589.03, 17497.9);\n    polygon.ps[1] = Point(8589.03, 17537.9);\n    polygon.ps[2] = Point(8534.03, 17537.9);\n    polygon.ps[3] = Point(8534.03, 17497.9);\n    new ShapeRef(router, polygon, 1373);\n\n    // shapeRef1374\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8689.03, 17497.9);\n    polygon.ps[1] = Point(8689.03, 17537.9);\n    polygon.ps[2] = Point(8634.03, 17537.9);\n    polygon.ps[3] = Point(8634.03, 17497.9);\n    new ShapeRef(router, polygon, 1374);\n\n    // shapeRef1375\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8789.03, 17497.9);\n    polygon.ps[1] = Point(8789.03, 17537.9);\n    polygon.ps[2] = Point(8734.03, 17537.9);\n    polygon.ps[3] = Point(8734.03, 17497.9);\n    new ShapeRef(router, polygon, 1375);\n\n    // shapeRef1376\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8989.03, 17497.9);\n    polygon.ps[1] = Point(8989.03, 17537.9);\n    polygon.ps[2] = Point(8934.03, 17537.9);\n    polygon.ps[3] = Point(8934.03, 17497.9);\n    new ShapeRef(router, polygon, 1376);\n\n    // shapeRef1377\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9089.03, 17497.9);\n    polygon.ps[1] = Point(9089.03, 17537.9);\n    polygon.ps[2] = Point(9034.03, 17537.9);\n    polygon.ps[3] = Point(9034.03, 17497.9);\n    new ShapeRef(router, polygon, 1377);\n\n    // shapeRef1378\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9189.03, 17497.9);\n    polygon.ps[1] = Point(9189.03, 17537.9);\n    polygon.ps[2] = Point(9134.03, 17537.9);\n    polygon.ps[3] = Point(9134.03, 17497.9);\n    new ShapeRef(router, polygon, 1378);\n\n    // shapeRef1379\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9289.03, 17497.9);\n    polygon.ps[1] = Point(9289.03, 17537.9);\n    polygon.ps[2] = Point(9234.03, 17537.9);\n    polygon.ps[3] = Point(9234.03, 17497.9);\n    new ShapeRef(router, polygon, 1379);\n\n    // shapeRef1380\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9389.03, 17497.9);\n    polygon.ps[1] = Point(9389.03, 17537.9);\n    polygon.ps[2] = Point(9334.03, 17537.9);\n    polygon.ps[3] = Point(9334.03, 17497.9);\n    new ShapeRef(router, polygon, 1380);\n\n    // shapeRef1381\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8389.03, 17597.9);\n    polygon.ps[1] = Point(8389.03, 17637.9);\n    polygon.ps[2] = Point(8334.03, 17637.9);\n    polygon.ps[3] = Point(8334.03, 17597.9);\n    new ShapeRef(router, polygon, 1381);\n\n    // shapeRef1382\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(492, 4062.51);\n    polygon.ps[1] = Point(492, 4124.51);\n    polygon.ps[2] = Point(430, 4124.51);\n    polygon.ps[3] = Point(430, 4062.51);\n    new ShapeRef(router, polygon, 1382);\n\n    // shapeRef1383\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(261, 4511.4);\n    polygon.ps[1] = Point(261, 4573.4);\n    polygon.ps[2] = Point(199, 4573.4);\n    polygon.ps[3] = Point(199, 4511.4);\n    new ShapeRef(router, polygon, 1383);\n\n    // shapeRef1384\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(261, 4062.51);\n    polygon.ps[1] = Point(261, 4124.51);\n    polygon.ps[2] = Point(199, 4124.51);\n    polygon.ps[3] = Point(199, 4062.51);\n    new ShapeRef(router, polygon, 1384);\n\n    // shapeRef1385\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(96, 4511.4);\n    polygon.ps[1] = Point(96, 4573.4);\n    polygon.ps[2] = Point(34, 4573.4);\n    polygon.ps[3] = Point(34, 4511.4);\n    new ShapeRef(router, polygon, 1385);\n\n    // shapeRef1386\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(492, 4511.4);\n    polygon.ps[1] = Point(492, 4573.4);\n    polygon.ps[2] = Point(430, 4573.4);\n    polygon.ps[3] = Point(430, 4511.4);\n    new ShapeRef(router, polygon, 1386);\n\n    // shapeRef1387\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(2439, 4062.51);\n    polygon.ps[1] = Point(2439, 4124.51);\n    polygon.ps[2] = Point(2377, 4124.51);\n    polygon.ps[3] = Point(2377, 4062.51);\n    new ShapeRef(router, polygon, 1387);\n\n    // shapeRef1388\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(2010, 4062.51);\n    polygon.ps[1] = Point(2010, 4124.51);\n    polygon.ps[2] = Point(1948, 4124.51);\n    polygon.ps[3] = Point(1948, 4062.51);\n    new ShapeRef(router, polygon, 1388);\n\n    // shapeRef1389\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(1614, 4062.51);\n    polygon.ps[1] = Point(1614, 4124.51);\n    polygon.ps[2] = Point(1552, 4124.51);\n    polygon.ps[3] = Point(1552, 4062.51);\n    new ShapeRef(router, polygon, 1389);\n\n    // shapeRef1390\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(2439, 4511.4);\n    polygon.ps[1] = Point(2439, 4573.4);\n    polygon.ps[2] = Point(2377, 4573.4);\n    polygon.ps[3] = Point(2377, 4511.4);\n    new ShapeRef(router, polygon, 1390);\n\n    // shapeRef1391\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(2802, 4511.4);\n    polygon.ps[1] = Point(2802, 4573.4);\n    polygon.ps[2] = Point(2740, 4573.4);\n    polygon.ps[3] = Point(2740, 4511.4);\n    new ShapeRef(router, polygon, 1391);\n\n    // shapeRef1392\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(3297, 4511.4);\n    polygon.ps[1] = Point(3297, 4573.4);\n    polygon.ps[2] = Point(3235, 4573.4);\n    polygon.ps[3] = Point(3235, 4511.4);\n    new ShapeRef(router, polygon, 1392);\n\n    // shapeRef1393\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(3759, 4511.4);\n    polygon.ps[1] = Point(3759, 4573.4);\n    polygon.ps[2] = Point(3697, 4573.4);\n    polygon.ps[3] = Point(3697, 4511.4);\n    new ShapeRef(router, polygon, 1393);\n\n    // shapeRef1394\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(4089, 4511.4);\n    polygon.ps[1] = Point(4089, 4573.4);\n    polygon.ps[2] = Point(4027, 4573.4);\n    polygon.ps[3] = Point(4027, 4511.4);\n    new ShapeRef(router, polygon, 1394);\n\n    // shapeRef1395\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(2802, 4062.51);\n    polygon.ps[1] = Point(2802, 4124.51);\n    polygon.ps[2] = Point(2740, 4124.51);\n    polygon.ps[3] = Point(2740, 4062.51);\n    new ShapeRef(router, polygon, 1395);\n\n    // shapeRef1396\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(1185, 4062.51);\n    polygon.ps[1] = Point(1185, 4124.51);\n    polygon.ps[2] = Point(1123, 4124.51);\n    polygon.ps[3] = Point(1123, 4062.51);\n    new ShapeRef(router, polygon, 1396);\n\n    // shapeRef1397\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(1614, 4511.4);\n    polygon.ps[1] = Point(1614, 4573.4);\n    polygon.ps[2] = Point(1552, 4573.4);\n    polygon.ps[3] = Point(1552, 4511.4);\n    new ShapeRef(router, polygon, 1397);\n\n    // shapeRef1398\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(2010, 4511.4);\n    polygon.ps[1] = Point(2010, 4573.4);\n    polygon.ps[2] = Point(1948, 4573.4);\n    polygon.ps[3] = Point(1948, 4511.4);\n    new ShapeRef(router, polygon, 1398);\n\n    // shapeRef1399\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(1185, 4511.4);\n    polygon.ps[1] = Point(1185, 4573.4);\n    polygon.ps[2] = Point(1123, 4573.4);\n    polygon.ps[3] = Point(1123, 4511.4);\n    new ShapeRef(router, polygon, 1399);\n\n    // shapeRef1400\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(822, 4511.4);\n    polygon.ps[1] = Point(822, 4573.4);\n    polygon.ps[2] = Point(760, 4573.4);\n    polygon.ps[3] = Point(760, 4511.4);\n    new ShapeRef(router, polygon, 1400);\n\n    // shapeRef1401\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9289.03, 17697.9);\n    polygon.ps[1] = Point(9289.03, 17737.9);\n    polygon.ps[2] = Point(9234.03, 17737.9);\n    polygon.ps[3] = Point(9234.03, 17697.9);\n    new ShapeRef(router, polygon, 1401);\n\n    // shapeRef1402\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9389.03, 17697.9);\n    polygon.ps[1] = Point(9389.03, 17737.9);\n    polygon.ps[2] = Point(9334.03, 17737.9);\n    polygon.ps[3] = Point(9334.03, 17697.9);\n    new ShapeRef(router, polygon, 1402);\n\n    // shapeRef1403\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8389.03, 17797.9);\n    polygon.ps[1] = Point(8389.03, 17837.9);\n    polygon.ps[2] = Point(8334.03, 17837.9);\n    polygon.ps[3] = Point(8334.03, 17797.9);\n    new ShapeRef(router, polygon, 1403);\n\n    // shapeRef1404\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8489.03, 17797.9);\n    polygon.ps[1] = Point(8489.03, 17837.9);\n    polygon.ps[2] = Point(8434.03, 17837.9);\n    polygon.ps[3] = Point(8434.03, 17797.9);\n    new ShapeRef(router, polygon, 1404);\n\n    // shapeRef1405\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8589.03, 17797.9);\n    polygon.ps[1] = Point(8589.03, 17837.9);\n    polygon.ps[2] = Point(8534.03, 17837.9);\n    polygon.ps[3] = Point(8534.03, 17797.9);\n    new ShapeRef(router, polygon, 1405);\n\n    // shapeRef1406\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8689.03, 17797.9);\n    polygon.ps[1] = Point(8689.03, 17837.9);\n    polygon.ps[2] = Point(8634.03, 17837.9);\n    polygon.ps[3] = Point(8634.03, 17797.9);\n    new ShapeRef(router, polygon, 1406);\n\n    // shapeRef1407\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8789.03, 17797.9);\n    polygon.ps[1] = Point(8789.03, 17837.9);\n    polygon.ps[2] = Point(8734.03, 17837.9);\n    polygon.ps[3] = Point(8734.03, 17797.9);\n    new ShapeRef(router, polygon, 1407);\n\n    // shapeRef1408\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8889.03, 17797.9);\n    polygon.ps[1] = Point(8889.03, 17837.9);\n    polygon.ps[2] = Point(8834.03, 17837.9);\n    polygon.ps[3] = Point(8834.03, 17797.9);\n    new ShapeRef(router, polygon, 1408);\n\n    // shapeRef1409\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8989.03, 17797.9);\n    polygon.ps[1] = Point(8989.03, 17837.9);\n    polygon.ps[2] = Point(8934.03, 17837.9);\n    polygon.ps[3] = Point(8934.03, 17797.9);\n    new ShapeRef(router, polygon, 1409);\n\n    // shapeRef1410\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9089.03, 17797.9);\n    polygon.ps[1] = Point(9089.03, 17837.9);\n    polygon.ps[2] = Point(9034.03, 17837.9);\n    polygon.ps[3] = Point(9034.03, 17797.9);\n    new ShapeRef(router, polygon, 1410);\n\n    // shapeRef1411\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9189.03, 17797.9);\n    polygon.ps[1] = Point(9189.03, 17837.9);\n    polygon.ps[2] = Point(9134.03, 17837.9);\n    polygon.ps[3] = Point(9134.03, 17797.9);\n    new ShapeRef(router, polygon, 1411);\n\n    // shapeRef1412\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9289.03, 17797.9);\n    polygon.ps[1] = Point(9289.03, 17837.9);\n    polygon.ps[2] = Point(9234.03, 17837.9);\n    polygon.ps[3] = Point(9234.03, 17797.9);\n    new ShapeRef(router, polygon, 1412);\n\n    // shapeRef1413\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9389.03, 17797.9);\n    polygon.ps[1] = Point(9389.03, 17837.9);\n    polygon.ps[2] = Point(9334.03, 17837.9);\n    polygon.ps[3] = Point(9334.03, 17797.9);\n    new ShapeRef(router, polygon, 1413);\n\n    // shapeRef1414\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8389.03, 17897.9);\n    polygon.ps[1] = Point(8389.03, 17937.9);\n    polygon.ps[2] = Point(8334.03, 17937.9);\n    polygon.ps[3] = Point(8334.03, 17897.9);\n    new ShapeRef(router, polygon, 1414);\n\n    // shapeRef1415\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8489.03, 17897.9);\n    polygon.ps[1] = Point(8489.03, 17937.9);\n    polygon.ps[2] = Point(8434.03, 17937.9);\n    polygon.ps[3] = Point(8434.03, 17897.9);\n    new ShapeRef(router, polygon, 1415);\n\n    // shapeRef1416\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8589.03, 17897.9);\n    polygon.ps[1] = Point(8589.03, 17937.9);\n    polygon.ps[2] = Point(8534.03, 17937.9);\n    polygon.ps[3] = Point(8534.03, 17897.9);\n    new ShapeRef(router, polygon, 1416);\n\n    // shapeRef1417\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8689.03, 17897.9);\n    polygon.ps[1] = Point(8689.03, 17937.9);\n    polygon.ps[2] = Point(8634.03, 17937.9);\n    polygon.ps[3] = Point(8634.03, 17897.9);\n    new ShapeRef(router, polygon, 1417);\n\n    // shapeRef1418\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8789.03, 17897.9);\n    polygon.ps[1] = Point(8789.03, 17937.9);\n    polygon.ps[2] = Point(8734.03, 17937.9);\n    polygon.ps[3] = Point(8734.03, 17897.9);\n    new ShapeRef(router, polygon, 1418);\n\n    // shapeRef1419\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8889.03, 17897.9);\n    polygon.ps[1] = Point(8889.03, 17937.9);\n    polygon.ps[2] = Point(8834.03, 17937.9);\n    polygon.ps[3] = Point(8834.03, 17897.9);\n    new ShapeRef(router, polygon, 1419);\n\n    // shapeRef1420\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8989.03, 17897.9);\n    polygon.ps[1] = Point(8989.03, 17937.9);\n    polygon.ps[2] = Point(8934.03, 17937.9);\n    polygon.ps[3] = Point(8934.03, 17897.9);\n    new ShapeRef(router, polygon, 1420);\n\n    // shapeRef1421\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9089.03, 17897.9);\n    polygon.ps[1] = Point(9089.03, 17937.9);\n    polygon.ps[2] = Point(9034.03, 17937.9);\n    polygon.ps[3] = Point(9034.03, 17897.9);\n    new ShapeRef(router, polygon, 1421);\n\n    // shapeRef1422\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9189.03, 17897.9);\n    polygon.ps[1] = Point(9189.03, 17937.9);\n    polygon.ps[2] = Point(9134.03, 17937.9);\n    polygon.ps[3] = Point(9134.03, 17897.9);\n    new ShapeRef(router, polygon, 1422);\n\n    // shapeRef1423\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9289.03, 17897.9);\n    polygon.ps[1] = Point(9289.03, 17937.9);\n    polygon.ps[2] = Point(9234.03, 17937.9);\n    polygon.ps[3] = Point(9234.03, 17897.9);\n    new ShapeRef(router, polygon, 1423);\n\n    // shapeRef1424\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9389.03, 17897.9);\n    polygon.ps[1] = Point(9389.03, 17937.9);\n    polygon.ps[2] = Point(9334.03, 17937.9);\n    polygon.ps[3] = Point(9334.03, 17897.9);\n    new ShapeRef(router, polygon, 1424);\n\n    // shapeRef1425\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8389.03, 17997.9);\n    polygon.ps[1] = Point(8389.03, 18037.9);\n    polygon.ps[2] = Point(8334.03, 18037.9);\n    polygon.ps[3] = Point(8334.03, 17997.9);\n    new ShapeRef(router, polygon, 1425);\n\n    // shapeRef1426\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8489.03, 17997.9);\n    polygon.ps[1] = Point(8489.03, 18037.9);\n    polygon.ps[2] = Point(8434.03, 18037.9);\n    polygon.ps[3] = Point(8434.03, 17997.9);\n    new ShapeRef(router, polygon, 1426);\n\n    // shapeRef1427\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8589.03, 17997.9);\n    polygon.ps[1] = Point(8589.03, 18037.9);\n    polygon.ps[2] = Point(8534.03, 18037.9);\n    polygon.ps[3] = Point(8534.03, 17997.9);\n    new ShapeRef(router, polygon, 1427);\n\n    // shapeRef1428\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8689.03, 17997.9);\n    polygon.ps[1] = Point(8689.03, 18037.9);\n    polygon.ps[2] = Point(8634.03, 18037.9);\n    polygon.ps[3] = Point(8634.03, 17997.9);\n    new ShapeRef(router, polygon, 1428);\n\n    // shapeRef1429\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8789.03, 17997.9);\n    polygon.ps[1] = Point(8789.03, 18037.9);\n    polygon.ps[2] = Point(8734.03, 18037.9);\n    polygon.ps[3] = Point(8734.03, 17997.9);\n    new ShapeRef(router, polygon, 1429);\n\n    // shapeRef1430\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8889.03, 17997.9);\n    polygon.ps[1] = Point(8889.03, 18037.9);\n    polygon.ps[2] = Point(8834.03, 18037.9);\n    polygon.ps[3] = Point(8834.03, 17997.9);\n    new ShapeRef(router, polygon, 1430);\n\n    // shapeRef1431\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8989.03, 17997.9);\n    polygon.ps[1] = Point(8989.03, 18037.9);\n    polygon.ps[2] = Point(8934.03, 18037.9);\n    polygon.ps[3] = Point(8934.03, 17997.9);\n    new ShapeRef(router, polygon, 1431);\n\n    // shapeRef1432\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9089.03, 17997.9);\n    polygon.ps[1] = Point(9089.03, 18037.9);\n    polygon.ps[2] = Point(9034.03, 18037.9);\n    polygon.ps[3] = Point(9034.03, 17997.9);\n    new ShapeRef(router, polygon, 1432);\n\n    // shapeRef1433\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9189.03, 17997.9);\n    polygon.ps[1] = Point(9189.03, 18037.9);\n    polygon.ps[2] = Point(9134.03, 18037.9);\n    polygon.ps[3] = Point(9134.03, 17997.9);\n    new ShapeRef(router, polygon, 1433);\n\n    // shapeRef1434\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9289.03, 17997.9);\n    polygon.ps[1] = Point(9289.03, 18037.9);\n    polygon.ps[2] = Point(9234.03, 18037.9);\n    polygon.ps[3] = Point(9234.03, 17997.9);\n    new ShapeRef(router, polygon, 1434);\n\n    // shapeRef1435\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(4976.5, 5752.9);\n    polygon.ps[1] = Point(4976.5, 5812.9);\n    polygon.ps[2] = Point(4921.5, 5812.9);\n    polygon.ps[3] = Point(4921.5, 5752.9);\n    new ShapeRef(router, polygon, 1435);\n\n    // shapeRef1436\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(5034.5, 6131.51);\n    polygon.ps[1] = Point(5034.5, 6171.51);\n    polygon.ps[2] = Point(4959, 6171.51);\n    polygon.ps[3] = Point(4959, 6131.51);\n    new ShapeRef(router, polygon, 1436);\n\n    // shapeRef1437\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(7693.6, 2970.79);\n    polygon.ps[1] = Point(7693.6, 3010.79);\n    polygon.ps[2] = Point(7618.1, 3010.79);\n    polygon.ps[3] = Point(7618.1, 2970.79);\n    new ShapeRef(router, polygon, 1437);\n\n    // shapeRef1438\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(10035.2, 9973.52);\n    polygon.ps[1] = Point(10035.2, 10013.5);\n    polygon.ps[2] = Point(9959.69, 10013.5);\n    polygon.ps[3] = Point(9959.69, 9973.52);\n    new ShapeRef(router, polygon, 1438);\n\n    // shapeRef1439\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(16094.1, 11724.9);\n    polygon.ps[1] = Point(16094.1, 11784.9);\n    polygon.ps[2] = Point(16039.1, 11784.9);\n    polygon.ps[3] = Point(16039.1, 11724.9);\n    new ShapeRef(router, polygon, 1439);\n\n    // shapeRef1440\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8386.79, 1210.29);\n    polygon.ps[1] = Point(8386.79, 1270.29);\n    polygon.ps[2] = Point(8331.79, 1270.29);\n    polygon.ps[3] = Point(8331.79, 1210.29);\n    new ShapeRef(router, polygon, 1440);\n\n    // shapeRef1441\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9364.09, 5522.67);\n    polygon.ps[1] = Point(9364.09, 5582.67);\n    polygon.ps[2] = Point(9309.09, 5582.67);\n    polygon.ps[3] = Point(9309.09, 5522.67);\n    new ShapeRef(router, polygon, 1441);\n\n    // shapeRef1442\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(5746.6, 4555.4);\n    polygon.ps[1] = Point(5746.6, 4595.4);\n    polygon.ps[2] = Point(5671.1, 4595.4);\n    polygon.ps[3] = Point(5671.1, 4555.4);\n    new ShapeRef(router, polygon, 1442);\n\n    // shapeRef1443\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(13598, 6659.51);\n    polygon.ps[1] = Point(13598, 6699.51);\n    polygon.ps[2] = Point(13522.5, 6699.51);\n    polygon.ps[3] = Point(13522.5, 6659.51);\n    new ShapeRef(router, polygon, 1443);\n\n    // shapeRef1444\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(11448.6, 2229.29);\n    polygon.ps[1] = Point(11448.6, 2269.29);\n    polygon.ps[2] = Point(11373.1, 2269.29);\n    polygon.ps[3] = Point(11373.1, 2229.29);\n    new ShapeRef(router, polygon, 1444);\n\n    // shapeRef1445\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(11448.6, 3318.29);\n    polygon.ps[1] = Point(11448.6, 3358.29);\n    polygon.ps[2] = Point(11373.1, 3358.29);\n    polygon.ps[3] = Point(11373.1, 3318.29);\n    new ShapeRef(router, polygon, 1445);\n\n    // shapeRef1446\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(11448.6, 4456.4);\n    polygon.ps[1] = Point(11448.6, 4496.4);\n    polygon.ps[2] = Point(11373.1, 4496.4);\n    polygon.ps[3] = Point(11373.1, 4456.4);\n    new ShapeRef(router, polygon, 1446);\n\n    // shapeRef1447\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(11448.6, 5360.67);\n    polygon.ps[1] = Point(11448.6, 5400.67);\n    polygon.ps[2] = Point(11373.1, 5400.67);\n    polygon.ps[3] = Point(11373.1, 5360.67);\n    new ShapeRef(router, polygon, 1447);\n\n    // shapeRef1448\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(11448.6, 6560.51);\n    polygon.ps[1] = Point(11448.6, 6600.51);\n    polygon.ps[2] = Point(11373.1, 6600.51);\n    polygon.ps[3] = Point(11373.1, 6560.51);\n    new ShapeRef(router, polygon, 1448);\n\n    // shapeRef1449\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(11448.6, 8394.99);\n    polygon.ps[1] = Point(11448.6, 8434.99);\n    polygon.ps[2] = Point(11373.1, 8434.99);\n    polygon.ps[3] = Point(11373.1, 8394.99);\n    new ShapeRef(router, polygon, 1449);\n\n    // shapeRef1450\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(11448.6, 11158.6);\n    polygon.ps[1] = Point(11448.6, 11198.6);\n    polygon.ps[2] = Point(11373.1, 11198.6);\n    polygon.ps[3] = Point(11373.1, 11158.6);\n    new ShapeRef(router, polygon, 1450);\n\n    // shapeRef1451\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(11448.6, 9956.02);\n    polygon.ps[1] = Point(11448.6, 9996.02);\n    polygon.ps[2] = Point(11373.1, 9996.02);\n    polygon.ps[3] = Point(11373.1, 9956.02);\n    new ShapeRef(router, polygon, 1451);\n\n    // shapeRef1452\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(11951.6, 12057.3);\n    polygon.ps[1] = Point(11951.6, 12117.3);\n    polygon.ps[2] = Point(11896.6, 12117.3);\n    polygon.ps[3] = Point(11896.6, 12057.3);\n    new ShapeRef(router, polygon, 1452);\n\n    // shapeRef1453\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(12950, 12057.3);\n    polygon.ps[1] = Point(12950, 12117.3);\n    polygon.ps[2] = Point(12895, 12117.3);\n    polygon.ps[3] = Point(12895, 12057.3);\n    new ShapeRef(router, polygon, 1453);\n\n    // shapeRef1454\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(7982.79, 4440.9);\n    polygon.ps[1] = Point(7982.79, 4480.9);\n    polygon.ps[2] = Point(7907.29, 4480.9);\n    polygon.ps[3] = Point(7907.29, 4440.9);\n    new ShapeRef(router, polygon, 1454);\n\n    // shapeRef1455\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(1610.5, 4703.4);\n    polygon.ps[1] = Point(1610.5, 4763.4);\n    polygon.ps[2] = Point(1555.5, 4763.4);\n    polygon.ps[3] = Point(1555.5, 4703.4);\n    new ShapeRef(router, polygon, 1455);\n\n    // shapeRef1456\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(3062.5, 4703.4);\n    polygon.ps[1] = Point(3062.5, 4763.4);\n    polygon.ps[2] = Point(3007.5, 4763.4);\n    polygon.ps[3] = Point(3007.5, 4703.4);\n    new ShapeRef(router, polygon, 1456);\n\n    // shapeRef1457\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(15793.4, 10711.3);\n    polygon.ps[1] = Point(15793.4, 10771.3);\n    polygon.ps[2] = Point(15738.4, 10771.3);\n    polygon.ps[3] = Point(15738.4, 10711.3);\n    new ShapeRef(router, polygon, 1457);\n\n    // shapeRef1458\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(14229.5, 12222.3);\n    polygon.ps[1] = Point(14229.5, 12282.3);\n    polygon.ps[2] = Point(14174.5, 12282.3);\n    polygon.ps[3] = Point(14174.5, 12222.3);\n    new ShapeRef(router, polygon, 1458);\n\n    // shapeRef1459\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(16119.1, 11642.9);\n    polygon.ps[1] = Point(16119.1, 11702.9);\n    polygon.ps[2] = Point(16064.1, 11702.9);\n    polygon.ps[3] = Point(16064.1, 11642.9);\n    new ShapeRef(router, polygon, 1459);\n\n    // shapeRef1460\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(15233.8, 10877.1);\n    polygon.ps[1] = Point(15233.8, 10917.1);\n    polygon.ps[2] = Point(15158.3, 10917.1);\n    polygon.ps[3] = Point(15158.3, 10877.1);\n    new ShapeRef(router, polygon, 1460);\n\n    // shapeRef1461\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(10509.4, 6395.51);\n    polygon.ps[1] = Point(10509.4, 6435.51);\n    polygon.ps[2] = Point(10433.9, 6435.51);\n    polygon.ps[3] = Point(10433.9, 6395.51);\n    new ShapeRef(router, polygon, 1461);\n\n    // shapeRef1462\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(10385.4, 10711.3);\n    polygon.ps[1] = Point(10385.4, 10771.3);\n    polygon.ps[2] = Point(10330.4, 10771.3);\n    polygon.ps[3] = Point(10330.4, 10711.3);\n    new ShapeRef(router, polygon, 1462);\n\n    // shapeRef1463\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9944.19, 11562.9);\n    polygon.ps[1] = Point(9944.19, 11622.9);\n    polygon.ps[2] = Point(9889.19, 11622.9);\n    polygon.ps[3] = Point(9889.19, 11562.9);\n    new ShapeRef(router, polygon, 1463);\n\n    // shapeRef1464\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9356.09, 5637.9);\n    polygon.ps[1] = Point(9356.09, 5677.9);\n    polygon.ps[2] = Point(9280.59, 5677.9);\n    polygon.ps[3] = Point(9280.59, 5637.9);\n    new ShapeRef(router, polygon, 1464);\n\n    // shapeRef1465\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9587.09, 7356.9);\n    polygon.ps[1] = Point(9587.09, 7396.9);\n    polygon.ps[2] = Point(9511.59, 7396.9);\n    polygon.ps[3] = Point(9511.59, 7356.9);\n    new ShapeRef(router, polygon, 1465);\n\n    // shapeRef1466\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9587.09, 10352);\n    polygon.ps[1] = Point(9587.09, 10392);\n    polygon.ps[2] = Point(9511.59, 10392);\n    polygon.ps[3] = Point(9511.59, 10352);\n    new ShapeRef(router, polygon, 1466);\n\n    // shapeRef1467\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(11712.6, 10711.3);\n    polygon.ps[1] = Point(11712.6, 10771.3);\n    polygon.ps[2] = Point(11657.6, 10771.3);\n    polygon.ps[3] = Point(11657.6, 10711.3);\n    new ShapeRef(router, polygon, 1467);\n\n    // shapeRef1468\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(13128.5, 10711.3);\n    polygon.ps[1] = Point(13128.5, 10771.3);\n    polygon.ps[2] = Point(13073.5, 10771.3);\n    polygon.ps[3] = Point(13073.5, 10711.3);\n    new ShapeRef(router, polygon, 1468);\n\n    // shapeRef1469\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(11481.6, 11562.9);\n    polygon.ps[1] = Point(11481.6, 11622.9);\n    polygon.ps[2] = Point(11426.6, 11622.9);\n    polygon.ps[3] = Point(11426.6, 11562.9);\n    new ShapeRef(router, polygon, 1469);\n\n    // shapeRef1470\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(12785, 11562.9);\n    polygon.ps[1] = Point(12785, 11622.9);\n    polygon.ps[2] = Point(12730, 11622.9);\n    polygon.ps[3] = Point(12730, 11562.9);\n    new ShapeRef(router, polygon, 1470);\n\n    // shapeRef1471\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(14328.5, 10711.3);\n    polygon.ps[1] = Point(14328.5, 10771.3);\n    polygon.ps[2] = Point(14273.5, 10771.3);\n    polygon.ps[3] = Point(14273.5, 10711.3);\n    new ShapeRef(router, polygon, 1471);\n\n    // shapeRef1472\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(14559.5, 11562.9);\n    polygon.ps[1] = Point(14559.5, 11622.9);\n    polygon.ps[2] = Point(14504.5, 11622.9);\n    polygon.ps[3] = Point(14504.5, 11562.9);\n    new ShapeRef(router, polygon, 1472);\n\n    // shapeRef1473\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(15954.1, 12173.3);\n    polygon.ps[1] = Point(15954.1, 12213.3);\n    polygon.ps[2] = Point(15878.6, 12213.3);\n    polygon.ps[3] = Point(15878.6, 12173.3);\n    new ShapeRef(router, polygon, 1473);\n\n    // shapeRef1474\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(15631.8, 12222.3);\n    polygon.ps[1] = Point(15631.8, 12282.3);\n    polygon.ps[2] = Point(15576.8, 12282.3);\n    polygon.ps[3] = Point(15576.8, 12222.3);\n    new ShapeRef(router, polygon, 1474);\n\n    // shapeRef1475\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9138.49, 8308.99);\n    polygon.ps[1] = Point(9138.49, 8348.99);\n    polygon.ps[2] = Point(9062.99, 8348.99);\n    polygon.ps[3] = Point(9062.99, 8308.99);\n    new ShapeRef(router, polygon, 1475);\n\n    // shapeRef1476\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(18322, 8544.49);\n    polygon.ps[1] = Point(18322, 8584.49);\n    polygon.ps[2] = Point(18246.5, 8584.49);\n    polygon.ps[3] = Point(18246.5, 8544.49);\n    new ShapeRef(router, polygon, 1476);\n\n    // shapeRef1477\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(17637, 10104);\n    polygon.ps[1] = Point(17637, 10164);\n    polygon.ps[2] = Point(17582, 10164);\n    polygon.ps[3] = Point(17582, 10104);\n    new ShapeRef(router, polygon, 1477);\n\n    // shapeRef1478\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(16585.3, 10104);\n    polygon.ps[1] = Point(16585.3, 10164);\n    polygon.ps[2] = Point(16530.3, 10164);\n    polygon.ps[3] = Point(16530.3, 10104);\n    new ShapeRef(router, polygon, 1478);\n\n    // shapeRef1479\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(13965.5, 10184);\n    polygon.ps[1] = Point(13965.5, 10244);\n    polygon.ps[2] = Point(13910.5, 10244);\n    polygon.ps[3] = Point(13910.5, 10184);\n    new ShapeRef(router, polygon, 1479);\n\n    // shapeRef1480\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(10410.4, 9688.42);\n    polygon.ps[1] = Point(10410.4, 9728.42);\n    polygon.ps[2] = Point(10334.9, 9728.42);\n    polygon.ps[3] = Point(10334.9, 9688.42);\n    new ShapeRef(router, polygon, 1480);\n\n    // shapeRef1481\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(14625.5, 6718.21);\n    polygon.ps[1] = Point(14625.5, 6778.21);\n    polygon.ps[2] = Point(14570.5, 6778.21);\n    polygon.ps[3] = Point(14570.5, 6718.21);\n    new ShapeRef(router, polygon, 1481);\n\n    // shapeRef1482\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(11580.6, 7724.79);\n    polygon.ps[1] = Point(11580.6, 7764.79);\n    polygon.ps[2] = Point(11505.1, 7764.79);\n    polygon.ps[3] = Point(11505.1, 7724.79);\n    new ShapeRef(router, polygon, 1482);\n\n    // shapeRef1483\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(12050.6, 7355.4);\n    polygon.ps[1] = Point(12050.6, 7415.4);\n    polygon.ps[2] = Point(11995.6, 7415.4);\n    polygon.ps[3] = Point(11995.6, 7355.4);\n    new ShapeRef(router, polygon, 1483);\n\n    // shapeRef1484\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(17138.3, 7191.9);\n    polygon.ps[1] = Point(17138.3, 7231.9);\n    polygon.ps[2] = Point(17062.8, 7231.9);\n    polygon.ps[3] = Point(17062.8, 7191.9);\n    new ShapeRef(router, polygon, 1484);\n\n    // shapeRef1485\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(5034.5, 6036.29);\n    polygon.ps[1] = Point(5034.5, 6076.29);\n    polygon.ps[2] = Point(4959, 6076.29);\n    polygon.ps[3] = Point(4959, 6036.29);\n    new ShapeRef(router, polygon, 1485);\n\n    // shapeRef1486\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(4976.5, 5894.59);\n    polygon.ps[1] = Point(4976.5, 5954.59);\n    polygon.ps[2] = Point(4921.5, 5954.59);\n    polygon.ps[3] = Point(4921.5, 5894.59);\n    new ShapeRef(router, polygon, 1486);\n\n    // shapeRef1487\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(5523.6, 5277.67);\n    polygon.ps[1] = Point(5523.6, 5337.67);\n    polygon.ps[2] = Point(5468.6, 5337.67);\n    polygon.ps[3] = Point(5468.6, 5277.67);\n    new ShapeRef(router, polygon, 1487);\n\n    // shapeRef1488\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9141.09, 6081.51);\n    polygon.ps[1] = Point(9141.09, 6141.51);\n    polygon.ps[2] = Point(9086.09, 6141.51);\n    polygon.ps[3] = Point(9086.09, 6081.51);\n    new ShapeRef(router, polygon, 1488);\n\n    // shapeRef1489\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9820.19, 7091.4);\n    polygon.ps[1] = Point(9820.19, 7151.4);\n    polygon.ps[2] = Point(9765.19, 7151.4);\n    polygon.ps[3] = Point(9765.19, 7091.4);\n    new ShapeRef(router, polygon, 1489);\n\n    // shapeRef1490\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(10542.4, 7856.79);\n    polygon.ps[1] = Point(10542.4, 7896.79);\n    polygon.ps[2] = Point(10466.9, 7896.79);\n    polygon.ps[3] = Point(10466.9, 7856.79);\n    new ShapeRef(router, polygon, 1490);\n\n    // shapeRef1491\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(7660.6, 9061.42);\n    polygon.ps[1] = Point(7660.6, 9101.42);\n    polygon.ps[2] = Point(7585.1, 9101.42);\n    polygon.ps[3] = Point(7585.1, 9061.42);\n    new ShapeRef(router, polygon, 1491);\n\n    // shapeRef1492\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(15325, 1326.29);\n    polygon.ps[1] = Point(15325, 1366.29);\n    polygon.ps[2] = Point(15249.5, 1366.29);\n    polygon.ps[3] = Point(15249.5, 1326.29);\n    new ShapeRef(router, polygon, 1492);\n\n    // shapeRef1493\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9397.09, 9572.42);\n    polygon.ps[1] = Point(9397.09, 9632.42);\n    polygon.ps[2] = Point(9342.09, 9632.42);\n    polygon.ps[3] = Point(9342.09, 9572.42);\n    new ShapeRef(router, polygon, 1493);\n\n    // shapeRef1494\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(7594.6, 7988.79);\n    polygon.ps[1] = Point(7594.6, 8028.79);\n    polygon.ps[2] = Point(7519.1, 8028.79);\n    polygon.ps[3] = Point(7519.1, 7988.79);\n    new ShapeRef(router, polygon, 1494);\n\n    // shapeRef1495\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(10762.7, 8559.99);\n    polygon.ps[1] = Point(10762.7, 8599.99);\n    polygon.ps[2] = Point(10687.2, 8599.99);\n    polygon.ps[3] = Point(10687.2, 8559.99);\n    new ShapeRef(router, polygon, 1495);\n\n    // shapeRef1496\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(10597.7, 9127.42);\n    polygon.ps[1] = Point(10597.7, 9167.42);\n    polygon.ps[2] = Point(10522.2, 9167.42);\n    polygon.ps[3] = Point(10522.2, 9127.42);\n    new ShapeRef(router, polygon, 1496);\n\n    // shapeRef1497\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9188.49, 8328.99);\n    polygon.ps[1] = Point(9188.49, 8368.99);\n    polygon.ps[2] = Point(9062.99, 8368.99);\n    polygon.ps[3] = Point(9062.99, 8328.99);\n    new ShapeRef(router, polygon, 1497);\n\n    // shapeRef1498\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8825.89, 4638.9);\n    polygon.ps[1] = Point(8825.89, 4678.9);\n    polygon.ps[2] = Point(8750.39, 4678.9);\n    polygon.ps[3] = Point(8750.39, 4638.9);\n    new ShapeRef(router, polygon, 1498);\n\n    // shapeRef1499\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8921.39, 3941.51);\n    polygon.ps[1] = Point(8921.39, 3981.51);\n    polygon.ps[2] = Point(8845.89, 3981.51);\n    polygon.ps[3] = Point(8845.89, 3941.51);\n    new ShapeRef(router, polygon, 1499);\n\n    // shapeRef1500\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8921.39, 3413.51);\n    polygon.ps[1] = Point(8921.39, 3453.51);\n    polygon.ps[2] = Point(8845.89, 3453.51);\n    polygon.ps[3] = Point(8845.89, 3413.51);\n    new ShapeRef(router, polygon, 1500);\n\n    // shapeRef1501\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8825.89, 2889.29);\n    polygon.ps[1] = Point(8825.89, 2929.29);\n    polygon.ps[2] = Point(8750.39, 2929.29);\n    polygon.ps[3] = Point(8750.39, 2889.29);\n    new ShapeRef(router, polygon, 1501);\n\n    // shapeRef1502\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8921.39, 2343.79);\n    polygon.ps[1] = Point(8921.39, 2383.79);\n    polygon.ps[2] = Point(8845.89, 2383.79);\n    polygon.ps[3] = Point(8845.89, 2343.79);\n    new ShapeRef(router, polygon, 1502);\n\n    // shapeRef1503\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8452.79, 2160.29);\n    polygon.ps[1] = Point(8452.79, 2220.29);\n    polygon.ps[2] = Point(8397.79, 2220.29);\n    polygon.ps[3] = Point(8397.79, 2160.29);\n    new ShapeRef(router, polygon, 1503);\n\n    // shapeRef1504\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(15402, 1276.29);\n    polygon.ps[1] = Point(15402, 1336.29);\n    polygon.ps[2] = Point(15347, 1336.29);\n    polygon.ps[3] = Point(15347, 1276.29);\n    new ShapeRef(router, polygon, 1504);\n\n    // shapeRef1505\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8543.79, 1095.29);\n    polygon.ps[1] = Point(8543.79, 1135.29);\n    polygon.ps[2] = Point(8468.29, 1135.29);\n    polygon.ps[3] = Point(8468.29, 1095.29);\n    new ShapeRef(router, polygon, 1505);\n\n    // shapeRef1506\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8989.49, 738.091);\n    polygon.ps[1] = Point(8989.49, 798.091);\n    polygon.ps[2] = Point(8934.49, 798.091);\n    polygon.ps[3] = Point(8934.49, 738.091);\n    new ShapeRef(router, polygon, 1506);\n\n    // shapeRef1507\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9014.49, 1045.29);\n    polygon.ps[1] = Point(9014.49, 1105.29);\n    polygon.ps[2] = Point(8959.49, 1105.29);\n    polygon.ps[3] = Point(8959.49, 1045.29);\n    new ShapeRef(router, polygon, 1507);\n\n    // shapeRef1508\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(15167.8, 1356.29);\n    polygon.ps[1] = Point(15167.8, 1416.29);\n    polygon.ps[2] = Point(15112.8, 1416.29);\n    polygon.ps[3] = Point(15112.8, 1356.29);\n    new ShapeRef(router, polygon, 1508);\n\n    // shapeRef1509\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(15529.8, 1356.29);\n    polygon.ps[1] = Point(15529.8, 1416.29);\n    polygon.ps[2] = Point(15474.8, 1416.29);\n    polygon.ps[3] = Point(15474.8, 1356.29);\n    new ShapeRef(router, polygon, 1509);\n\n    // shapeRef1510\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8081.79, 963.285);\n    polygon.ps[1] = Point(8081.79, 1003.29);\n    polygon.ps[2] = Point(8006.29, 1003.29);\n    polygon.ps[3] = Point(8006.29, 963.285);\n    new ShapeRef(router, polygon, 1510);\n\n    // shapeRef1511\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9779.19, 738.091);\n    polygon.ps[1] = Point(9779.19, 798.091);\n    polygon.ps[2] = Point(9724.19, 798.091);\n    polygon.ps[3] = Point(9724.19, 738.091);\n    new ShapeRef(router, polygon, 1511);\n\n    // shapeRef1512\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(10803.7, 738.091);\n    polygon.ps[1] = Point(10803.7, 798.091);\n    polygon.ps[2] = Point(10748.7, 798.091);\n    polygon.ps[3] = Point(10748.7, 738.091);\n    new ShapeRef(router, polygon, 1512);\n\n    // shapeRef1513\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(11059.7, 1095.29);\n    polygon.ps[1] = Point(11059.7, 1135.29);\n    polygon.ps[2] = Point(10984.2, 1135.29);\n    polygon.ps[3] = Point(10984.2, 1095.29);\n    new ShapeRef(router, polygon, 1513);\n\n    // shapeRef1514\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(10803.7, 1210.29);\n    polygon.ps[1] = Point(10803.7, 1270.29);\n    polygon.ps[2] = Point(10748.7, 1270.29);\n    polygon.ps[3] = Point(10748.7, 1210.29);\n    new ShapeRef(router, polygon, 1514);\n\n    // shapeRef1515\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9397.09, 1210.29);\n    polygon.ps[1] = Point(9397.09, 1270.29);\n    polygon.ps[2] = Point(9342.09, 1270.29);\n    polygon.ps[3] = Point(9342.09, 1210.29);\n    new ShapeRef(router, polygon, 1515);\n\n    // shapeRef1516\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9331.09, 1939.29);\n    polygon.ps[1] = Point(9331.09, 1999.29);\n    polygon.ps[2] = Point(9276.09, 1999.29);\n    polygon.ps[3] = Point(9276.09, 1939.29);\n    new ShapeRef(router, polygon, 1516);\n\n    // shapeRef1517\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(6117.6, 144.265);\n    polygon.ps[1] = Point(6117.6, 204.265);\n    polygon.ps[2] = Point(6062.6, 204.265);\n    polygon.ps[3] = Point(6062.6, 144.265);\n    new ShapeRef(router, polygon, 1517);\n\n    // shapeRef1518\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9738.19, 1689.29);\n    polygon.ps[1] = Point(9738.19, 1729.29);\n    polygon.ps[2] = Point(9662.69, 1729.29);\n    polygon.ps[3] = Point(9662.69, 1689.29);\n    new ShapeRef(router, polygon, 1518);\n\n    // shapeRef1519\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(11059.7, 1458.29);\n    polygon.ps[1] = Point(11059.7, 1498.29);\n    polygon.ps[2] = Point(10984.2, 1498.29);\n    polygon.ps[3] = Point(10984.2, 1458.29);\n    new ShapeRef(router, polygon, 1519);\n\n    // shapeRef1520\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(11166.7, 1653.29);\n    polygon.ps[1] = Point(11166.7, 1713.29);\n    polygon.ps[2] = Point(11111.7, 1713.29);\n    polygon.ps[3] = Point(11111.7, 1653.29);\n    new ShapeRef(router, polygon, 1520);\n\n    // shapeRef1521\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(10964.2, 590.091);\n    polygon.ps[1] = Point(10964.2, 630.091);\n    polygon.ps[2] = Point(10888.7, 630.091);\n    polygon.ps[3] = Point(10888.7, 590.091);\n    new ShapeRef(router, polygon, 1521);\n\n    // shapeRef1522\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(10572.7, 4291.11);\n    polygon.ps[1] = Point(10572.7, 4351.11);\n    polygon.ps[2] = Point(10517.7, 4351.11);\n    polygon.ps[3] = Point(10517.7, 4291.11);\n    new ShapeRef(router, polygon, 1522);\n\n    // shapeRef1523\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(10968.7, 4291.11);\n    polygon.ps[1] = Point(10968.7, 4351.11);\n    polygon.ps[2] = Point(10913.7, 4351.11);\n    polygon.ps[3] = Point(10913.7, 4291.11);\n    new ShapeRef(router, polygon, 1523);\n\n    // shapeRef1524\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(11290.7, 4291.11);\n    polygon.ps[1] = Point(11290.7, 4351.11);\n    polygon.ps[2] = Point(11235.7, 4351.11);\n    polygon.ps[3] = Point(11235.7, 4291.11);\n    new ShapeRef(router, polygon, 1524);\n\n    // shapeRef1525\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(11621.6, 4371.11);\n    polygon.ps[1] = Point(11621.6, 4431.11);\n    polygon.ps[2] = Point(11566.6, 4431.11);\n    polygon.ps[3] = Point(11566.6, 4371.11);\n    new ShapeRef(router, polygon, 1525);\n\n    // shapeRef1526\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(10638.7, 4519.4);\n    polygon.ps[1] = Point(10638.7, 4579.4);\n    polygon.ps[2] = Point(10583.7, 4579.4);\n    polygon.ps[3] = Point(10583.7, 4519.4);\n    new ShapeRef(router, polygon, 1526);\n\n    // shapeRef1527\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(12248.6, 4291.11);\n    polygon.ps[1] = Point(12248.6, 4351.11);\n    polygon.ps[2] = Point(12193.6, 4351.11);\n    polygon.ps[3] = Point(12193.6, 4291.11);\n    new ShapeRef(router, polygon, 1527);\n\n    // shapeRef1528\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(12617, 4555.4);\n    polygon.ps[1] = Point(12617, 4595.4);\n    polygon.ps[2] = Point(12541.5, 4595.4);\n    polygon.ps[3] = Point(12541.5, 4555.4);\n    new ShapeRef(router, polygon, 1528);\n\n    // shapeRef1529\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(12617, 4933.9);\n    polygon.ps[1] = Point(12617, 4973.9);\n    polygon.ps[2] = Point(12541.5, 4973.9);\n    polygon.ps[3] = Point(12541.5, 4933.9);\n    new ShapeRef(router, polygon, 1529);\n\n    // shapeRef1530\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(12617, 5312.17);\n    polygon.ps[1] = Point(12617, 5352.17);\n    polygon.ps[2] = Point(12541.5, 5352.17);\n    polygon.ps[3] = Point(12541.5, 5312.17);\n    new ShapeRef(router, polygon, 1530);\n\n    // shapeRef1531\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(13351.5, 3822.51);\n    polygon.ps[1] = Point(13351.5, 3862.51);\n    polygon.ps[2] = Point(13276, 3862.51);\n    polygon.ps[3] = Point(13276, 3822.51);\n    new ShapeRef(router, polygon, 1531);\n\n    // shapeRef1532\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(12975, 4439.4);\n    polygon.ps[1] = Point(12975, 4499.4);\n    polygon.ps[2] = Point(12920, 4499.4);\n    polygon.ps[3] = Point(12920, 4439.4);\n    new ShapeRef(router, polygon, 1532);\n\n    // shapeRef1533\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(12617, 3974.51);\n    polygon.ps[1] = Point(12617, 4014.51);\n    polygon.ps[2] = Point(12541.5, 4014.51);\n    polygon.ps[3] = Point(12541.5, 3974.51);\n    new ShapeRef(router, polygon, 1533);\n\n    // shapeRef1534\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(12617, 3512.51);\n    polygon.ps[1] = Point(12617, 3552.51);\n    polygon.ps[2] = Point(12541.5, 3552.51);\n    polygon.ps[3] = Point(12541.5, 3512.51);\n    new ShapeRef(router, polygon, 1534);\n\n    // shapeRef1535\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(12617, 3021.29);\n    polygon.ps[1] = Point(12617, 3061.29);\n    polygon.ps[2] = Point(12541.5, 3061.29);\n    polygon.ps[3] = Point(12541.5, 3021.29);\n    new ShapeRef(router, polygon, 1535);\n\n    // shapeRef1536\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(12617, 2262.29);\n    polygon.ps[1] = Point(12617, 2302.29);\n    polygon.ps[2] = Point(12541.5, 2302.29);\n    polygon.ps[3] = Point(12541.5, 2262.29);\n    new ShapeRef(router, polygon, 1536);\n\n    // shapeRef1537\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(12182.6, 1774.29);\n    polygon.ps[1] = Point(12182.6, 1834.29);\n    polygon.ps[2] = Point(12127.6, 1834.29);\n    polygon.ps[3] = Point(12127.6, 1774.29);\n    new ShapeRef(router, polygon, 1537);\n\n    // shapeRef1538\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(12075.6, 1704.79);\n    polygon.ps[1] = Point(12075.6, 1744.79);\n    polygon.ps[2] = Point(12000.1, 1744.79);\n    polygon.ps[3] = Point(12000.1, 1704.79);\n    new ShapeRef(router, polygon, 1538);\n\n    // shapeRef1539\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(12207.6, 1672.29);\n    polygon.ps[1] = Point(12207.6, 1732.29);\n    polygon.ps[2] = Point(12152.6, 1732.29);\n    polygon.ps[3] = Point(12152.6, 1672.29);\n    new ShapeRef(router, polygon, 1539);\n\n    // shapeRef1540\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(13957.5, 8445.49);\n    polygon.ps[1] = Point(13957.5, 8485.49);\n    polygon.ps[2] = Point(13882, 8485.49);\n    polygon.ps[3] = Point(13882, 8445.49);\n    new ShapeRef(router, polygon, 1540);\n\n    // shapeRef1541\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(15954.1, 8445.49);\n    polygon.ps[1] = Point(15954.1, 8485.49);\n    polygon.ps[2] = Point(15878.6, 8485.49);\n    polygon.ps[3] = Point(15878.6, 8445.49);\n    new ShapeRef(router, polygon, 1541);\n\n    // shapeRef1542\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(16808.3, 8377.49);\n    polygon.ps[1] = Point(16808.3, 8417.49);\n    polygon.ps[2] = Point(16732.8, 8417.49);\n    polygon.ps[3] = Point(16732.8, 8377.49);\n    new ShapeRef(router, polygon, 1542);\n\n    // shapeRef1543\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(12009.6, 7823.79);\n    polygon.ps[1] = Point(12009.6, 7863.79);\n    polygon.ps[2] = Point(11934.1, 7863.79);\n    polygon.ps[3] = Point(11934.1, 7823.79);\n    new ShapeRef(router, polygon, 1543);\n\n    // shapeRef1544\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(18588.5, 11790.9);\n    polygon.ps[1] = Point(18588.5, 11850.9);\n    polygon.ps[2] = Point(18533.5, 11850.9);\n    polygon.ps[3] = Point(18533.5, 11790.9);\n    new ShapeRef(router, polygon, 1544);\n\n    // shapeRef1545\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8653.79, 4122.51);\n    polygon.ps[1] = Point(8653.79, 4182.51);\n    polygon.ps[2] = Point(8598.79, 4182.51);\n    polygon.ps[3] = Point(8598.79, 4122.51);\n    new ShapeRef(router, polygon, 1545);\n\n    // shapeRef1546\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(10201.5, 9688.42);\n    polygon.ps[1] = Point(10201.5, 9728.42);\n    polygon.ps[2] = Point(10126, 9728.42);\n    polygon.ps[3] = Point(10126, 9688.42);\n    new ShapeRef(router, polygon, 1546);\n\n    // shapeRef1547\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(15402, 1111.29);\n    polygon.ps[1] = Point(15402, 1171.29);\n    polygon.ps[2] = Point(15347, 1171.29);\n    polygon.ps[3] = Point(15347, 1111.29);\n    new ShapeRef(router, polygon, 1547);\n\n    // shapeRef1548\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(10799.2, 7306.4);\n    polygon.ps[1] = Point(10799.2, 7346.4);\n    polygon.ps[2] = Point(10723.7, 7346.4);\n    polygon.ps[3] = Point(10723.7, 7306.4);\n    new ShapeRef(router, polygon, 1548);\n\n    // shapeRef1549\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(10894.7, 7790.79);\n    polygon.ps[1] = Point(10894.7, 7830.79);\n    polygon.ps[2] = Point(10819.2, 7830.79);\n    polygon.ps[3] = Point(10819.2, 7790.79);\n    new ShapeRef(router, polygon, 1549);\n\n    // shapeRef1550\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9936.19, 6395.51);\n    polygon.ps[1] = Point(9936.19, 6435.51);\n    polygon.ps[2] = Point(9860.69, 6435.51);\n    polygon.ps[3] = Point(9860.69, 6395.51);\n    new ShapeRef(router, polygon, 1550);\n\n    // shapeRef1551\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(11265.7, 8803.22);\n    polygon.ps[1] = Point(11265.7, 8863.22);\n    polygon.ps[2] = Point(11210.7, 8863.22);\n    polygon.ps[3] = Point(11210.7, 8803.22);\n    new ShapeRef(router, polygon, 1551);\n\n    // shapeRef1552\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(12347.6, 8803.22);\n    polygon.ps[1] = Point(12347.6, 8863.22);\n    polygon.ps[2] = Point(12292.6, 8863.22);\n    polygon.ps[3] = Point(12292.6, 8803.22);\n    new ShapeRef(router, polygon, 1552);\n\n    // shapeRef1553\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(13293.5, 8803.22);\n    polygon.ps[1] = Point(13293.5, 8863.22);\n    polygon.ps[2] = Point(13238.5, 8863.22);\n    polygon.ps[3] = Point(13238.5, 8803.22);\n    new ShapeRef(router, polygon, 1553);\n\n    // shapeRef1554\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9047.49, 3363.51);\n    polygon.ps[1] = Point(9047.49, 3423.51);\n    polygon.ps[2] = Point(8992.49, 3423.51);\n    polygon.ps[3] = Point(8992.49, 3363.51);\n    new ShapeRef(router, polygon, 1554);\n\n    // shapeRef1555\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(7503.6, 3495.51);\n    polygon.ps[1] = Point(7503.6, 3555.51);\n    polygon.ps[2] = Point(7448.6, 3555.51);\n    polygon.ps[3] = Point(7448.6, 3495.51);\n    new ShapeRef(router, polygon, 1555);\n\n    // shapeRef1556\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(6810.6, 3495.51);\n    polygon.ps[1] = Point(6810.6, 3555.51);\n    polygon.ps[2] = Point(6755.6, 3555.51);\n    polygon.ps[3] = Point(6755.6, 3495.51);\n    new ShapeRef(router, polygon, 1556);\n\n    // shapeRef1557\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(6216.6, 3575.51);\n    polygon.ps[1] = Point(6216.6, 3635.51);\n    polygon.ps[2] = Point(6161.6, 3635.51);\n    polygon.ps[3] = Point(6161.6, 3575.51);\n    new ShapeRef(router, polygon, 1557);\n\n    // shapeRef1558\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(5721.6, 3495.51);\n    polygon.ps[1] = Point(5721.6, 3555.51);\n    polygon.ps[2] = Point(5666.6, 3555.51);\n    polygon.ps[3] = Point(5666.6, 3495.51);\n    new ShapeRef(router, polygon, 1558);\n\n    // shapeRef1559\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(5397.5, 3809.51);\n    polygon.ps[1] = Point(5397.5, 3849.51);\n    polygon.ps[2] = Point(5322, 3849.51);\n    polygon.ps[3] = Point(5322, 3809.51);\n    new ShapeRef(router, polygon, 1559);\n\n    // shapeRef1560\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(5397.5, 5327.67);\n    polygon.ps[1] = Point(5397.5, 5367.67);\n    polygon.ps[2] = Point(5322, 5367.67);\n    polygon.ps[3] = Point(5322, 5327.67);\n    new ShapeRef(router, polygon, 1560);\n\n    // shapeRef1561\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(5034.5, 7808.29);\n    polygon.ps[1] = Point(5034.5, 7848.29);\n    polygon.ps[2] = Point(4959, 7848.29);\n    polygon.ps[3] = Point(4959, 7808.29);\n    new ShapeRef(router, polygon, 1561);\n\n    // shapeRef1562\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(5034.5, 8341.99);\n    polygon.ps[1] = Point(5034.5, 8381.99);\n    polygon.ps[2] = Point(4959, 8381.99);\n    polygon.ps[3] = Point(4959, 8341.99);\n    new ShapeRef(router, polygon, 1562);\n\n    // shapeRef1563\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(5034.5, 8807.22);\n    polygon.ps[1] = Point(5034.5, 8847.22);\n    polygon.ps[2] = Point(4959, 8847.22);\n    polygon.ps[3] = Point(4959, 8807.22);\n    new ShapeRef(router, polygon, 1563);\n\n    // shapeRef1564\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(5034.5, 9312.42);\n    polygon.ps[1] = Point(5034.5, 9352.42);\n    polygon.ps[2] = Point(4959, 9352.42);\n    polygon.ps[3] = Point(4959, 9312.42);\n    new ShapeRef(router, polygon, 1564);\n\n    // shapeRef1565\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(4374.5, 9857.02);\n    polygon.ps[1] = Point(4374.5, 9897.02);\n    polygon.ps[2] = Point(4299, 9897.02);\n    polygon.ps[3] = Point(4299, 9857.02);\n    new ShapeRef(router, polygon, 1565);\n\n    // shapeRef1566\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(4778.5, 10368);\n    polygon.ps[1] = Point(4778.5, 10428);\n    polygon.ps[2] = Point(4723.5, 10428);\n    polygon.ps[3] = Point(4723.5, 10368);\n    new ShapeRef(router, polygon, 1566);\n\n    // shapeRef1567\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(4638.5, 10563.3);\n    polygon.ps[1] = Point(4638.5, 10603.3);\n    polygon.ps[2] = Point(4563, 10603.3);\n    polygon.ps[3] = Point(4563, 10563.3);\n    new ShapeRef(router, polygon, 1567);\n\n    // shapeRef1568\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(11448.6, 1458.29);\n    polygon.ps[1] = Point(11448.6, 1498.29);\n    polygon.ps[2] = Point(11373.1, 1498.29);\n    polygon.ps[3] = Point(11373.1, 1458.29);\n    new ShapeRef(router, polygon, 1568);\n\n    // shapeRef1569\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(11353.1, 1095.29);\n    polygon.ps[1] = Point(11353.1, 1135.29);\n    polygon.ps[2] = Point(11277.6, 1135.29);\n    polygon.ps[3] = Point(11277.6, 1095.29);\n    new ShapeRef(router, polygon, 1569);\n\n    // shapeRef1570\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(11448.6, 590.091);\n    polygon.ps[1] = Point(11448.6, 630.091);\n    polygon.ps[2] = Point(11373.1, 630.091);\n    polygon.ps[3] = Point(11373.1, 590.091);\n    new ShapeRef(router, polygon, 1570);\n\n    // shapeRef1571\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(11555.6, 388.265);\n    polygon.ps[1] = Point(11555.6, 448.265);\n    polygon.ps[2] = Point(11500.6, 448.265);\n    polygon.ps[3] = Point(11500.6, 388.265);\n    new ShapeRef(router, polygon, 1571);\n\n    // shapeRef1572\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(11984.6, 388.265);\n    polygon.ps[1] = Point(11984.6, 448.265);\n    polygon.ps[2] = Point(11929.6, 448.265);\n    polygon.ps[3] = Point(11929.6, 388.265);\n    new ShapeRef(router, polygon, 1572);\n\n    // shapeRef1573\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(15014.4, 1356.29);\n    polygon.ps[1] = Point(15014.4, 1416.29);\n    polygon.ps[2] = Point(14959.4, 1416.29);\n    polygon.ps[3] = Point(14959.4, 1356.29);\n    new ShapeRef(router, polygon, 1573);\n\n    // shapeRef1574\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(12752, 507.091);\n    polygon.ps[1] = Point(12752, 567.091);\n    polygon.ps[2] = Point(12697, 567.091);\n    polygon.ps[3] = Point(12697, 507.091);\n    new ShapeRef(router, polygon, 1574);\n\n    // shapeRef1575\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(13227.5, 388.265);\n    polygon.ps[1] = Point(13227.5, 448.265);\n    polygon.ps[2] = Point(13172.5, 448.265);\n    polygon.ps[3] = Point(13172.5, 388.265);\n    new ShapeRef(router, polygon, 1575);\n\n    // shapeRef1576\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(13899.5, 388.265);\n    polygon.ps[1] = Point(13899.5, 448.265);\n    polygon.ps[2] = Point(13844.5, 448.265);\n    polygon.ps[3] = Point(13844.5, 388.265);\n    new ShapeRef(router, polygon, 1576);\n\n    // shapeRef1577\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(14361.5, 388.265);\n    polygon.ps[1] = Point(14361.5, 448.265);\n    polygon.ps[2] = Point(14306.5, 448.265);\n    polygon.ps[3] = Point(14306.5, 388.265);\n    new ShapeRef(router, polygon, 1577);\n\n    // shapeRef1578\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(14823.5, 388.265);\n    polygon.ps[1] = Point(14823.5, 448.265);\n    polygon.ps[2] = Point(14768.5, 448.265);\n    polygon.ps[3] = Point(14768.5, 388.265);\n    new ShapeRef(router, polygon, 1578);\n\n    // shapeRef1579\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(15664.8, 388.265);\n    polygon.ps[1] = Point(15664.8, 448.265);\n    polygon.ps[2] = Point(15609.8, 448.265);\n    polygon.ps[3] = Point(15609.8, 388.265);\n    new ShapeRef(router, polygon, 1579);\n\n    // shapeRef1580\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(16193.1, 388.265);\n    polygon.ps[1] = Point(16193.1, 448.265);\n    polygon.ps[2] = Point(16138.1, 448.265);\n    polygon.ps[3] = Point(16138.1, 388.265);\n    new ShapeRef(router, polygon, 1580);\n\n    // shapeRef1581\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(16449.1, 805.591);\n    polygon.ps[1] = Point(16449.1, 845.591);\n    polygon.ps[2] = Point(16373.6, 845.591);\n    polygon.ps[3] = Point(16373.6, 805.591);\n    new ShapeRef(router, polygon, 1581);\n\n    // shapeRef1582\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(16251.1, 805.591);\n    polygon.ps[1] = Point(16251.1, 845.591);\n    polygon.ps[2] = Point(16175.6, 845.591);\n    polygon.ps[3] = Point(16175.6, 805.591);\n    new ShapeRef(router, polygon, 1582);\n\n    // shapeRef1583\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(11133.7, 8004.79);\n    polygon.ps[1] = Point(11133.7, 8064.79);\n    polygon.ps[2] = Point(11078.7, 8064.79);\n    polygon.ps[3] = Point(11078.7, 8004.79);\n    new ShapeRef(router, polygon, 1583);\n\n    // shapeRef1584\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(10803.7, 388.265);\n    polygon.ps[1] = Point(10803.7, 448.265);\n    polygon.ps[2] = Point(10748.7, 448.265);\n    polygon.ps[3] = Point(10748.7, 388.265);\n    new ShapeRef(router, polygon, 1584);\n\n    // shapeRef1585\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(15606.8, 1356.29);\n    polygon.ps[1] = Point(15606.8, 1416.29);\n    polygon.ps[2] = Point(15551.8, 1416.29);\n    polygon.ps[3] = Point(15551.8, 1356.29);\n    new ShapeRef(router, polygon, 1585);\n\n    // shapeRef1586\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8056.79, 243.265);\n    polygon.ps[1] = Point(8056.79, 303.265);\n    polygon.ps[2] = Point(8001.79, 303.265);\n    polygon.ps[3] = Point(8001.79, 243.265);\n    new ShapeRef(router, polygon, 1586);\n\n    // shapeRef1587\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8320.79, 355.265);\n    polygon.ps[1] = Point(8320.79, 415.265);\n    polygon.ps[2] = Point(8265.79, 415.265);\n    polygon.ps[3] = Point(8265.79, 355.265);\n    new ShapeRef(router, polygon, 1587);\n\n    // shapeRef1588\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(7792.79, 355.265);\n    polygon.ps[1] = Point(7792.79, 415.265);\n    polygon.ps[2] = Point(7737.79, 415.265);\n    polygon.ps[3] = Point(7737.79, 355.265);\n    new ShapeRef(router, polygon, 1588);\n\n    // shapeRef1589\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(6975.6, 355.265);\n    polygon.ps[1] = Point(6975.6, 415.265);\n    polygon.ps[2] = Point(6920.6, 415.265);\n    polygon.ps[3] = Point(6920.6, 355.265);\n    new ShapeRef(router, polygon, 1589);\n\n    // shapeRef1590\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(6348.6, 355.265);\n    polygon.ps[1] = Point(6348.6, 415.265);\n    polygon.ps[2] = Point(6293.6, 415.265);\n    polygon.ps[3] = Point(6293.6, 355.265);\n    new ShapeRef(router, polygon, 1590);\n\n    // shapeRef1591\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(15142.8, 1111.29);\n    polygon.ps[1] = Point(15142.8, 1171.29);\n    polygon.ps[2] = Point(15087.8, 1171.29);\n    polygon.ps[3] = Point(15087.8, 1111.29);\n    new ShapeRef(router, polygon, 1591);\n\n    // shapeRef1592\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(15504.8, 1111.29);\n    polygon.ps[1] = Point(15504.8, 1171.29);\n    polygon.ps[2] = Point(15449.8, 1171.29);\n    polygon.ps[3] = Point(15449.8, 1111.29);\n    new ShapeRef(router, polygon, 1592);\n\n    // shapeRef1593\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8825.89, 4603.9);\n    polygon.ps[1] = Point(8825.89, 4643.9);\n    polygon.ps[2] = Point(8750.39, 4643.9);\n    polygon.ps[3] = Point(8750.39, 4603.9);\n    new ShapeRef(router, polygon, 1593);\n\n    // shapeRef1594\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(5397.5, 4555.4);\n    polygon.ps[1] = Point(5397.5, 4595.4);\n    polygon.ps[2] = Point(5322, 4595.4);\n    polygon.ps[3] = Point(5322, 4555.4);\n    new ShapeRef(router, polygon, 1594);\n\n    // shapeRef1595\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(5397.5, 5149.4);\n    polygon.ps[1] = Point(5397.5, 5189.4);\n    polygon.ps[2] = Point(5322, 5189.4);\n    polygon.ps[3] = Point(5322, 5149.4);\n    new ShapeRef(router, polygon, 1595);\n\n    // shapeRef1596\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(10106, 10369.5);\n    polygon.ps[1] = Point(10106, 10409.5);\n    polygon.ps[2] = Point(10030.5, 10409.5);\n    polygon.ps[3] = Point(10030.5, 10369.5);\n    new ShapeRef(router, polygon, 1596);\n\n    // shapeRef1597\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(10539.7, 10612.3);\n    polygon.ps[1] = Point(10539.7, 10672.3);\n    polygon.ps[2] = Point(10484.7, 10672.3);\n    polygon.ps[3] = Point(10484.7, 10612.3);\n    new ShapeRef(router, polygon, 1597);\n\n    // shapeRef1598\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(10935.7, 10612.3);\n    polygon.ps[1] = Point(10935.7, 10672.3);\n    polygon.ps[2] = Point(10880.7, 10672.3);\n    polygon.ps[3] = Point(10880.7, 10612.3);\n    new ShapeRef(router, polygon, 1598);\n\n    // shapeRef1599\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(10927.7, 10960.6);\n    polygon.ps[1] = Point(10927.7, 11000.6);\n    polygon.ps[2] = Point(10852.2, 11000.6);\n    polygon.ps[3] = Point(10852.2, 10960.6);\n    new ShapeRef(router, polygon, 1599);\n\n    // shapeRef1600\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(6678.6, 6926.4);\n    polygon.ps[1] = Point(6678.6, 6986.4);\n    polygon.ps[2] = Point(6623.6, 6986.4);\n    polygon.ps[3] = Point(6623.6, 6926.4);\n    new ShapeRef(router, polygon, 1600);\n\n    // shapeRef1601\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(6637.6, 7542.29);\n    polygon.ps[1] = Point(6637.6, 7582.29);\n    polygon.ps[2] = Point(6562.1, 7582.29);\n    polygon.ps[3] = Point(6562.1, 7542.29);\n    new ShapeRef(router, polygon, 1601);\n\n    // shapeRef1602\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(7297.6, 7273.4);\n    polygon.ps[1] = Point(7297.6, 7313.4);\n    polygon.ps[2] = Point(7222.1, 7313.4);\n    polygon.ps[3] = Point(7222.1, 7273.4);\n    new ShapeRef(router, polygon, 1602);\n\n    // shapeRef1603\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(6637.6, 8021.79);\n    polygon.ps[1] = Point(6637.6, 8061.79);\n    polygon.ps[2] = Point(6562.1, 8061.79);\n    polygon.ps[3] = Point(6562.1, 8021.79);\n    new ShapeRef(router, polygon, 1603);\n\n    // shapeRef1604\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(7297.6, 9193.42);\n    polygon.ps[1] = Point(7297.6, 9233.42);\n    polygon.ps[2] = Point(7222.1, 9233.42);\n    polygon.ps[3] = Point(7222.1, 9193.42);\n    new ShapeRef(router, polygon, 1604);\n\n    // shapeRef1605\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(6637.6, 9857.02);\n    polygon.ps[1] = Point(6637.6, 9897.02);\n    polygon.ps[2] = Point(6562.1, 9897.02);\n    polygon.ps[3] = Point(6562.1, 9857.02);\n    new ShapeRef(router, polygon, 1605);\n\n    // shapeRef1606\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8188.79, 6444.51);\n    polygon.ps[1] = Point(8188.79, 6504.51);\n    polygon.ps[2] = Point(8133.79, 6504.51);\n    polygon.ps[3] = Point(8133.79, 6444.51);\n    new ShapeRef(router, polygon, 1606);\n\n    // shapeRef1607\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(6208.6, 7955.79);\n    polygon.ps[1] = Point(6208.6, 7995.79);\n    polygon.ps[2] = Point(6133.1, 7995.79);\n    polygon.ps[3] = Point(6133.1, 7955.79);\n    new ShapeRef(router, polygon, 1607);\n\n    // shapeRef1608\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(7272.6, 6444.51);\n    polygon.ps[1] = Point(7272.6, 6504.51);\n    polygon.ps[2] = Point(7217.6, 6504.51);\n    polygon.ps[3] = Point(7217.6, 6444.51);\n    new ShapeRef(router, polygon, 1608);\n\n    // shapeRef1609\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(6414.6, 6718.21);\n    polygon.ps[1] = Point(6414.6, 6778.21);\n    polygon.ps[2] = Point(6359.6, 6778.21);\n    polygon.ps[3] = Point(6359.6, 6718.21);\n    new ShapeRef(router, polygon, 1609);\n\n    // shapeRef1610\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(15954.1, 11873.9);\n    polygon.ps[1] = Point(15954.1, 11913.9);\n    polygon.ps[2] = Point(15878.6, 11913.9);\n    polygon.ps[3] = Point(15878.6, 11873.9);\n    new ShapeRef(router, polygon, 1610);\n\n    // shapeRef1611\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(15014.4, 12222.3);\n    polygon.ps[1] = Point(15014.4, 12282.3);\n    polygon.ps[2] = Point(14959.4, 12282.3);\n    polygon.ps[3] = Point(14959.4, 12222.3);\n    new ShapeRef(router, polygon, 1611);\n\n    // shapeRef1612\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(14885.9, 1276.29);\n    polygon.ps[1] = Point(14885.9, 1336.29);\n    polygon.ps[2] = Point(14830.9, 1336.29);\n    polygon.ps[3] = Point(14830.9, 1276.29);\n    new ShapeRef(router, polygon, 1612);\n\n    // shapeRef1613\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(7850.79, 831.285);\n    polygon.ps[1] = Point(7850.79, 871.285);\n    polygon.ps[2] = Point(7775.29, 871.285);\n    polygon.ps[3] = Point(7775.29, 831.285);\n    new ShapeRef(router, polygon, 1613);\n\n    // shapeRef1614\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(7928.29, 8908.22);\n    polygon.ps[1] = Point(7928.29, 8970.22);\n    polygon.ps[2] = Point(7866.29, 8970.22);\n    polygon.ps[3] = Point(7866.29, 8908.22);\n    new ShapeRef(router, polygon, 1614);\n\n    // shapeRef1615\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(16229.6, 10750.3);\n    polygon.ps[1] = Point(16229.6, 10812.3);\n    polygon.ps[2] = Point(16167.6, 10812.3);\n    polygon.ps[3] = Point(16167.6, 10750.3);\n    new ShapeRef(router, polygon, 1615);\n\n    // shapeRef1616\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(15050.9, 10750.3);\n    polygon.ps[1] = Point(15050.9, 10812.3);\n    polygon.ps[2] = Point(14988.9, 10812.3);\n    polygon.ps[3] = Point(14988.9, 10750.3);\n    new ShapeRef(router, polygon, 1616);\n\n    // shapeRef1617\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(15050.9, 11763.9);\n    polygon.ps[1] = Point(15050.9, 11825.9);\n    polygon.ps[2] = Point(14988.9, 11825.9);\n    polygon.ps[3] = Point(14988.9, 11763.9);\n    new ShapeRef(router, polygon, 1617);\n\n    // shapeRef1618\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(10454.9, 6219.51);\n    polygon.ps[1] = Point(10454.9, 6281.51);\n    polygon.ps[2] = Point(10392.9, 6281.51);\n    polygon.ps[3] = Point(10392.9, 6219.51);\n    new ShapeRef(router, polygon, 1618);\n\n    // shapeRef1619\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(12562.5, 4330.11);\n    polygon.ps[1] = Point(12562.5, 4392.11);\n    polygon.ps[2] = Point(12500.5, 4392.11);\n    polygon.ps[3] = Point(12500.5, 4330.11);\n    new ShapeRef(router, polygon, 1619);\n\n    // shapeRef1620\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(13297, 4095.51);\n    polygon.ps[1] = Point(13297, 4157.51);\n    polygon.ps[2] = Point(13235, 4157.51);\n    polygon.ps[3] = Point(13235, 4095.51);\n    new ShapeRef(router, polygon, 1620);\n\n    // shapeRef1621\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(7796.29, 579.091);\n    polygon.ps[1] = Point(7796.29, 641.091);\n    polygon.ps[2] = Point(7734.29, 641.091);\n    polygon.ps[3] = Point(7734.29, 579.091);\n    new ShapeRef(router, polygon, 1621);\n\n    // shapeRef1622\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(10147, 10143);\n    polygon.ps[1] = Point(10147, 10205);\n    polygon.ps[2] = Point(10085, 10205);\n    polygon.ps[3] = Point(10085, 10143);\n    new ShapeRef(router, polygon, 1622);\n\n    // shapeRef1623\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(10906.2, 10750.3);\n    polygon.ps[1] = Point(10906.2, 10812.3);\n    polygon.ps[2] = Point(10844.2, 10812.3);\n    polygon.ps[3] = Point(10844.2, 10750.3);\n    new ShapeRef(router, polygon, 1623);\n\n    // shapeRef1624\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9532.59, 10750.3);\n    polygon.ps[1] = Point(9532.59, 10812.3);\n    polygon.ps[2] = Point(9470.59, 10812.3);\n    polygon.ps[3] = Point(9470.59, 10750.3);\n    new ShapeRef(router, polygon, 1624);\n\n    // shapeRef1625\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9532.59, 6450.51);\n    polygon.ps[1] = Point(9532.59, 6512.51);\n    polygon.ps[2] = Point(9470.59, 6512.51);\n    polygon.ps[3] = Point(9470.59, 6450.51);\n    new ShapeRef(router, polygon, 1625);\n\n    // shapeRef1626\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(13606, 10750.3);\n    polygon.ps[1] = Point(13606, 10812.3);\n    polygon.ps[2] = Point(13544, 10812.3);\n    polygon.ps[3] = Point(13544, 10750.3);\n    new ShapeRef(router, polygon, 1626);\n\n    // shapeRef1627\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(12562.5, 10750.3);\n    polygon.ps[1] = Point(12562.5, 10812.3);\n    polygon.ps[2] = Point(12500.5, 10812.3);\n    polygon.ps[3] = Point(12500.5, 10750.3);\n    new ShapeRef(router, polygon, 1627);\n\n    // shapeRef1628\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9532.59, 9945.02);\n    polygon.ps[1] = Point(9532.59, 10007);\n    polygon.ps[2] = Point(9470.59, 10007);\n    polygon.ps[3] = Point(9470.59, 9945.02);\n    new ShapeRef(router, polygon, 1628);\n\n    // shapeRef1629\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9532.59, 8218.99);\n    polygon.ps[1] = Point(9532.59, 8280.99);\n    polygon.ps[2] = Point(9470.59, 8280.99);\n    polygon.ps[3] = Point(9470.59, 8218.99);\n    new ShapeRef(router, polygon, 1629);\n\n    // shapeRef1630\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8866.89, 4973.4);\n    polygon.ps[1] = Point(8866.89, 5035.4);\n    polygon.ps[2] = Point(8804.89, 5035.4);\n    polygon.ps[3] = Point(8804.89, 4973.4);\n    new ShapeRef(router, polygon, 1630);\n\n    // shapeRef1631\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(15899.6, 12050.3);\n    polygon.ps[1] = Point(15899.6, 12112.3);\n    polygon.ps[2] = Point(15837.6, 12112.3);\n    polygon.ps[3] = Point(15837.6, 12050.3);\n    new ShapeRef(router, polygon, 1631);\n\n    // shapeRef1632\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(15899.6, 12261.3);\n    polygon.ps[1] = Point(15899.6, 12323.3);\n    polygon.ps[2] = Point(15837.6, 12323.3);\n    polygon.ps[3] = Point(15837.6, 12261.3);\n    new ShapeRef(router, polygon, 1632);\n\n    // shapeRef1633\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(15303.5, 12261.3);\n    polygon.ps[1] = Point(15303.5, 12323.3);\n    polygon.ps[2] = Point(15241.5, 12323.3);\n    polygon.ps[3] = Point(15241.5, 12261.3);\n    new ShapeRef(router, polygon, 1633);\n\n    // shapeRef1634\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9116.99, 11601.9);\n    polygon.ps[1] = Point(9116.99, 11663.9);\n    polygon.ps[2] = Point(9054.99, 11663.9);\n    polygon.ps[3] = Point(9054.99, 11601.9);\n    new ShapeRef(router, polygon, 1634);\n\n    // shapeRef1635\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(10906.2, 11601.9);\n    polygon.ps[1] = Point(10906.2, 11663.9);\n    polygon.ps[2] = Point(10844.2, 11663.9);\n    polygon.ps[3] = Point(10844.2, 11601.9);\n    new ShapeRef(router, polygon, 1635);\n\n    // shapeRef1636\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(12021.1, 11601.9);\n    polygon.ps[1] = Point(12021.1, 11663.9);\n    polygon.ps[2] = Point(11959.1, 11663.9);\n    polygon.ps[3] = Point(11959.1, 11601.9);\n    new ShapeRef(router, polygon, 1636);\n\n    // shapeRef1637\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(13606, 11601.9);\n    polygon.ps[1] = Point(13606, 11663.9);\n    polygon.ps[2] = Point(13544, 11663.9);\n    polygon.ps[3] = Point(13544, 11601.9);\n    new ShapeRef(router, polygon, 1637);\n\n    // shapeRef1638\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(13903, 7031.4);\n    polygon.ps[1] = Point(13903, 7093.4);\n    polygon.ps[2] = Point(13841, 7093.4);\n    polygon.ps[3] = Point(13841, 7031.4);\n    new ShapeRef(router, polygon, 1638);\n\n    // shapeRef1639\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(10147, 9314.42);\n    polygon.ps[1] = Point(10147, 9376.42);\n    polygon.ps[2] = Point(10085, 9376.42);\n    polygon.ps[3] = Point(10085, 9314.42);\n    new ShapeRef(router, polygon, 1639);\n\n    // shapeRef1640\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(12153.1, 10143);\n    polygon.ps[1] = Point(12153.1, 10205);\n    polygon.ps[2] = Point(12091.1, 10205);\n    polygon.ps[3] = Point(12091.1, 10143);\n    new ShapeRef(router, polygon, 1640);\n\n    // shapeRef1641\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(15899.6, 10143);\n    polygon.ps[1] = Point(15899.6, 10205);\n    polygon.ps[2] = Point(15837.6, 10205);\n    polygon.ps[3] = Point(15837.6, 10143);\n    new ShapeRef(router, polygon, 1641);\n\n    // shapeRef1642\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(16951.8, 10143);\n    polygon.ps[1] = Point(16951.8, 10205);\n    polygon.ps[2] = Point(16889.8, 10205);\n    polygon.ps[3] = Point(16889.8, 10143);\n    new ShapeRef(router, polygon, 1642);\n\n    // shapeRef1643\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(18168.5, 10143);\n    polygon.ps[1] = Point(18168.5, 10205);\n    polygon.ps[2] = Point(18106.5, 10205);\n    polygon.ps[3] = Point(18106.5, 10143);\n    new ShapeRef(router, polygon, 1643);\n\n    // shapeRef1644\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(18333.5, 6757.21);\n    polygon.ps[1] = Point(18333.5, 6819.21);\n    polygon.ps[2] = Point(18271.5, 6819.21);\n    polygon.ps[3] = Point(18271.5, 6757.21);\n    new ShapeRef(router, polygon, 1644);\n\n    // shapeRef1645\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(13231, 6757.21);\n    polygon.ps[1] = Point(13231, 6819.21);\n    polygon.ps[2] = Point(13169, 6819.21);\n    polygon.ps[3] = Point(13169, 6757.21);\n    new ShapeRef(router, polygon, 1645);\n\n    // shapeRef1646\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(16262.6, 6757.21);\n    polygon.ps[1] = Point(16262.6, 6819.21);\n    polygon.ps[2] = Point(16200.6, 6819.21);\n    polygon.ps[3] = Point(16200.6, 6757.21);\n    new ShapeRef(router, polygon, 1646);\n\n    // shapeRef1647\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(10840.2, 8043.79);\n    polygon.ps[1] = Point(10840.2, 8105.79);\n    polygon.ps[2] = Point(10778.2, 8105.79);\n    polygon.ps[3] = Point(10778.2, 8043.79);\n    new ShapeRef(router, polygon, 1647);\n\n    // shapeRef1648\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(11526.1, 8043.79);\n    polygon.ps[1] = Point(11526.1, 8105.79);\n    polygon.ps[2] = Point(11464.1, 8105.79);\n    polygon.ps[3] = Point(11464.1, 8043.79);\n    new ShapeRef(router, polygon, 1648);\n\n    // shapeRef1649\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(11526.1, 7394.4);\n    polygon.ps[1] = Point(11526.1, 7456.4);\n    polygon.ps[2] = Point(11464.1, 7456.4);\n    polygon.ps[3] = Point(11464.1, 7394.4);\n    new ShapeRef(router, polygon, 1649);\n\n    // shapeRef1650\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(12887.5, 7394.4);\n    polygon.ps[1] = Point(12887.5, 7456.4);\n    polygon.ps[2] = Point(12825.5, 7456.4);\n    polygon.ps[3] = Point(12825.5, 7394.4);\n    new ShapeRef(router, polygon, 1650);\n\n    // shapeRef1651\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(15438.5, 7394.4);\n    polygon.ps[1] = Point(15438.5, 7456.4);\n    polygon.ps[2] = Point(15376.5, 7456.4);\n    polygon.ps[3] = Point(15376.5, 7394.4);\n    new ShapeRef(router, polygon, 1651);\n\n    // shapeRef1652\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(7829.29, 3534.51);\n    polygon.ps[1] = Point(7829.29, 3596.51);\n    polygon.ps[2] = Point(7767.29, 3596.51);\n    polygon.ps[3] = Point(7767.29, 3534.51);\n    new ShapeRef(router, polygon, 1652);\n\n    // shapeRef1653\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(11005.2, 1612.29);\n    polygon.ps[1] = Point(11005.2, 1674.29);\n    polygon.ps[2] = Point(10943.2, 1674.29);\n    polygon.ps[3] = Point(10943.2, 1612.29);\n    new ShapeRef(router, polygon, 1653);\n\n    // shapeRef1654\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9466.59, 6932.4);\n    polygon.ps[1] = Point(9466.59, 6994.4);\n    polygon.ps[2] = Point(9404.59, 6994.4);\n    polygon.ps[3] = Point(9404.59, 6932.4);\n    new ShapeRef(router, polygon, 1654);\n\n    // shapeRef1655\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(10180, 7427.4);\n    polygon.ps[1] = Point(10180, 7489.4);\n    polygon.ps[2] = Point(10118, 7489.4);\n    polygon.ps[3] = Point(10118, 7427.4);\n    new ShapeRef(router, polygon, 1655);\n\n    // shapeRef1656\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(10642.2, 8251.99);\n    polygon.ps[1] = Point(10642.2, 8313.99);\n    polygon.ps[2] = Point(10580.2, 8313.99);\n    polygon.ps[3] = Point(10580.2, 8251.99);\n    new ShapeRef(router, polygon, 1656);\n\n    // shapeRef1657\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(10741.2, 8842.22);\n    polygon.ps[1] = Point(10741.2, 8904.22);\n    polygon.ps[2] = Point(10679.2, 8904.22);\n    polygon.ps[3] = Point(10679.2, 8842.22);\n    new ShapeRef(router, polygon, 1657);\n\n    // shapeRef1658\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8715.29, 9945.02);\n    polygon.ps[1] = Point(8715.29, 10007);\n    polygon.ps[2] = Point(8653.29, 10007);\n    polygon.ps[3] = Point(8653.29, 9945.02);\n    new ShapeRef(router, polygon, 1658);\n\n    // shapeRef1659\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(7862.29, 9446.42);\n    polygon.ps[1] = Point(7862.29, 9508.42);\n    polygon.ps[2] = Point(7800.29, 9508.42);\n    polygon.ps[3] = Point(7800.29, 9446.42);\n    new ShapeRef(router, polygon, 1659);\n\n    // shapeRef1660\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(7441.1, 8548.99);\n    polygon.ps[1] = Point(7441.1, 8610.99);\n    polygon.ps[2] = Point(7379.1, 8610.99);\n    polygon.ps[3] = Point(7379.1, 8548.99);\n    new ShapeRef(router, polygon, 1660);\n\n    // shapeRef1661\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8866.89, 4330.11);\n    polygon.ps[1] = Point(8866.89, 4392.11);\n    polygon.ps[2] = Point(8804.89, 4392.11);\n    polygon.ps[3] = Point(8804.89, 4330.11);\n    new ShapeRef(router, polygon, 1661);\n\n    // shapeRef1662\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8866.89, 3633.51);\n    polygon.ps[1] = Point(8866.89, 3695.51);\n    polygon.ps[2] = Point(8804.89, 3695.51);\n    polygon.ps[3] = Point(8804.89, 3633.51);\n    new ShapeRef(router, polygon, 1662);\n\n    // shapeRef1663\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9815.69, 5481.67);\n    polygon.ps[1] = Point(9815.69, 5543.67);\n    polygon.ps[2] = Point(9753.69, 5543.67);\n    polygon.ps[3] = Point(9753.69, 5481.67);\n    new ShapeRef(router, polygon, 1663);\n\n    // shapeRef1664\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8866.89, 3142.29);\n    polygon.ps[1] = Point(8866.89, 3204.29);\n    polygon.ps[2] = Point(8804.89, 3204.29);\n    polygon.ps[3] = Point(8804.89, 3142.29);\n    new ShapeRef(router, polygon, 1664);\n\n    // shapeRef1665\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8866.89, 2548.29);\n    polygon.ps[1] = Point(8866.89, 2610.29);\n    polygon.ps[2] = Point(8804.89, 2610.29);\n    polygon.ps[3] = Point(8804.89, 2548.29);\n    new ShapeRef(router, polygon, 1665);\n\n    // shapeRef1666\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8489.29, 1645.29);\n    polygon.ps[1] = Point(8489.29, 1707.29);\n    polygon.ps[2] = Point(8427.29, 1707.29);\n    polygon.ps[3] = Point(8427.29, 1645.29);\n    new ShapeRef(router, polygon, 1666);\n\n    // shapeRef1667\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8489.29, 1249.29);\n    polygon.ps[1] = Point(8489.29, 1311.29);\n    polygon.ps[2] = Point(8427.29, 1311.29);\n    polygon.ps[3] = Point(8427.29, 1249.29);\n    new ShapeRef(router, polygon, 1667);\n\n    // shapeRef1668\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8489.29, 777.091);\n    polygon.ps[1] = Point(8489.29, 839.091);\n    polygon.ps[2] = Point(8427.29, 839.091);\n    polygon.ps[3] = Point(8427.29, 777.091);\n    new ShapeRef(router, polygon, 1668);\n\n    // shapeRef1669\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8489.29, 394.265);\n    polygon.ps[1] = Point(8489.29, 456.265);\n    polygon.ps[2] = Point(8427.29, 456.265);\n    polygon.ps[3] = Point(8427.29, 394.265);\n    new ShapeRef(router, polygon, 1669);\n\n    // shapeRef1670\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8027.29, 777.091);\n    polygon.ps[1] = Point(8027.29, 839.091);\n    polygon.ps[2] = Point(7965.29, 839.091);\n    polygon.ps[3] = Point(7965.29, 777.091);\n    new ShapeRef(router, polygon, 1670);\n\n    // shapeRef1671\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9301.59, 777.091);\n    polygon.ps[1] = Point(9301.59, 839.091);\n    polygon.ps[2] = Point(9239.59, 839.091);\n    polygon.ps[3] = Point(9239.59, 777.091);\n    new ShapeRef(router, polygon, 1671);\n\n    // shapeRef1672\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8027.29, 1117.29);\n    polygon.ps[1] = Point(8027.29, 1179.29);\n    polygon.ps[2] = Point(7965.29, 1179.29);\n    polygon.ps[3] = Point(7965.29, 1117.29);\n    new ShapeRef(router, polygon, 1672);\n\n    // shapeRef1673\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(10487.9, 777.091);\n    polygon.ps[1] = Point(10487.9, 839.091);\n    polygon.ps[2] = Point(10425.9, 839.091);\n    polygon.ps[3] = Point(10425.9, 777.091);\n    new ShapeRef(router, polygon, 1673);\n\n    // shapeRef1674\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(11005.2, 777.091);\n    polygon.ps[1] = Point(11005.2, 839.091);\n    polygon.ps[2] = Point(10943.2, 839.091);\n    polygon.ps[3] = Point(10943.2, 777.091);\n    new ShapeRef(router, polygon, 1674);\n\n    // shapeRef1675\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(11005.2, 1249.29);\n    polygon.ps[1] = Point(11005.2, 1311.29);\n    polygon.ps[2] = Point(10943.2, 1311.29);\n    polygon.ps[3] = Point(10943.2, 1249.29);\n    new ShapeRef(router, polygon, 1675);\n\n    // shapeRef1676\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(10487.9, 1249.29);\n    polygon.ps[1] = Point(10487.9, 1311.29);\n    polygon.ps[2] = Point(10425.9, 1311.29);\n    polygon.ps[3] = Point(10425.9, 1249.29);\n    new ShapeRef(router, polygon, 1676);\n\n    // shapeRef1677\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9683.69, 1414.29);\n    polygon.ps[1] = Point(9683.69, 1476.29);\n    polygon.ps[2] = Point(9621.69, 1476.29);\n    polygon.ps[3] = Point(9621.69, 1414.29);\n    new ShapeRef(router, polygon, 1677);\n\n    // shapeRef1678\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9683.69, 1912.29);\n    polygon.ps[1] = Point(9683.69, 1974.29);\n    polygon.ps[2] = Point(9621.69, 1974.29);\n    polygon.ps[3] = Point(9621.69, 1912.29);\n    new ShapeRef(router, polygon, 1678);\n\n    // shapeRef1679\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(11394.1, 1612.29);\n    polygon.ps[1] = Point(11394.1, 1674.29);\n    polygon.ps[2] = Point(11332.1, 1674.29);\n    polygon.ps[3] = Point(11332.1, 1612.29);\n    new ShapeRef(router, polygon, 1679);\n\n    // shapeRef1680\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(11005.2, 427.265);\n    polygon.ps[1] = Point(11005.2, 489.265);\n    polygon.ps[2] = Point(10943.2, 489.265);\n    polygon.ps[3] = Point(10943.2, 427.265);\n    new ShapeRef(router, polygon, 1680);\n\n    // shapeRef1681\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(10180, 4330.11);\n    polygon.ps[1] = Point(10180, 4392.11);\n    polygon.ps[2] = Point(10118, 4392.11);\n    polygon.ps[3] = Point(10118, 4330.11);\n    new ShapeRef(router, polygon, 1681);\n\n    // shapeRef1682\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(10774.2, 4330.11);\n    polygon.ps[1] = Point(10774.2, 4392.11);\n    polygon.ps[2] = Point(10712.2, 4392.11);\n    polygon.ps[3] = Point(10712.2, 4330.11);\n    new ShapeRef(router, polygon, 1682);\n\n    // shapeRef1683\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(11104.2, 4330.11);\n    polygon.ps[1] = Point(11104.2, 4392.11);\n    polygon.ps[2] = Point(11042.2, 4392.11);\n    polygon.ps[3] = Point(11042.2, 4330.11);\n    new ShapeRef(router, polygon, 1683);\n\n    // shapeRef1684\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(11427.1, 4330.11);\n    polygon.ps[1] = Point(11427.1, 4392.11);\n    polygon.ps[2] = Point(11365.1, 4392.11);\n    polygon.ps[3] = Point(11365.1, 4330.11);\n    new ShapeRef(router, polygon, 1684);\n\n    // shapeRef1685\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(11790.1, 4330.11);\n    polygon.ps[1] = Point(11790.1, 4392.11);\n    polygon.ps[2] = Point(11728.1, 4392.11);\n    polygon.ps[3] = Point(11728.1, 4330.11);\n    new ShapeRef(router, polygon, 1685);\n\n    // shapeRef1686\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(12087.1, 4330.11);\n    polygon.ps[1] = Point(12087.1, 4392.11);\n    polygon.ps[2] = Point(12025.1, 4392.11);\n    polygon.ps[3] = Point(12025.1, 4330.11);\n    new ShapeRef(router, polygon, 1686);\n\n    // shapeRef1687\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(12562.5, 4709.4);\n    polygon.ps[1] = Point(12562.5, 4771.4);\n    polygon.ps[2] = Point(12500.5, 4771.4);\n    polygon.ps[3] = Point(12500.5, 4709.4);\n    new ShapeRef(router, polygon, 1687);\n\n    // shapeRef1688\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(12562.5, 5138.4);\n    polygon.ps[1] = Point(12562.5, 5200.4);\n    polygon.ps[2] = Point(12500.5, 5200.4);\n    polygon.ps[3] = Point(12500.5, 5138.4);\n    new ShapeRef(router, polygon, 1688);\n\n    // shapeRef1689\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(12562.5, 5481.67);\n    polygon.ps[1] = Point(12562.5, 5543.67);\n    polygon.ps[2] = Point(12500.5, 5543.67);\n    polygon.ps[3] = Point(12500.5, 5481.67);\n    new ShapeRef(router, polygon, 1689);\n\n    // shapeRef1690\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(12562.5, 3699.51);\n    polygon.ps[1] = Point(12562.5, 3761.51);\n    polygon.ps[2] = Point(12500.5, 3761.51);\n    polygon.ps[3] = Point(12500.5, 3699.51);\n    new ShapeRef(router, polygon, 1690);\n\n    // shapeRef1691\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(12562.5, 3307.29);\n    polygon.ps[1] = Point(12562.5, 3369.29);\n    polygon.ps[2] = Point(12500.5, 3369.29);\n    polygon.ps[3] = Point(12500.5, 3307.29);\n    new ShapeRef(router, polygon, 1691);\n\n    // shapeRef1692\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(12562.5, 2647.29);\n    polygon.ps[1] = Point(12562.5, 2709.29);\n    polygon.ps[2] = Point(12500.5, 2709.29);\n    polygon.ps[3] = Point(12500.5, 2647.29);\n    new ShapeRef(router, polygon, 1692);\n\n    // shapeRef1693\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(12562.5, 1813.29);\n    polygon.ps[1] = Point(12562.5, 1875.29);\n    polygon.ps[2] = Point(12500.5, 1875.29);\n    polygon.ps[3] = Point(12500.5, 1813.29);\n    new ShapeRef(router, polygon, 1693);\n\n    // shapeRef1694\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(12021.1, 1813.29);\n    polygon.ps[1] = Point(12021.1, 1875.29);\n    polygon.ps[2] = Point(11959.1, 1875.29);\n    polygon.ps[3] = Point(11959.1, 1813.29);\n    new ShapeRef(router, polygon, 1694);\n\n    // shapeRef1695\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(12021.1, 1546.29);\n    polygon.ps[1] = Point(12021.1, 1608.29);\n    polygon.ps[2] = Point(11959.1, 1608.29);\n    polygon.ps[3] = Point(11959.1, 1546.29);\n    new ShapeRef(router, polygon, 1695);\n\n    // shapeRef1696\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(13903, 8218.99);\n    polygon.ps[1] = Point(13903, 8280.99);\n    polygon.ps[2] = Point(13841, 8280.99);\n    polygon.ps[3] = Point(13841, 8218.99);\n    new ShapeRef(router, polygon, 1696);\n\n    // shapeRef1697\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(13903, 8677.22);\n    polygon.ps[1] = Point(13903, 8739.22);\n    polygon.ps[2] = Point(13841, 8739.22);\n    polygon.ps[3] = Point(13841, 8677.22);\n    new ShapeRef(router, polygon, 1697);\n\n    // shapeRef1698\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(11955.1, 7581.79);\n    polygon.ps[1] = Point(11955.1, 7643.79);\n    polygon.ps[2] = Point(11893.1, 7643.79);\n    polygon.ps[3] = Point(11893.1, 7581.79);\n    new ShapeRef(router, polygon, 1698);\n\n    // shapeRef1699\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(11955.1, 8043.79);\n    polygon.ps[1] = Point(11955.1, 8105.79);\n    polygon.ps[2] = Point(11893.1, 8105.79);\n    polygon.ps[3] = Point(11893.1, 8043.79);\n    new ShapeRef(router, polygon, 1699);\n\n    // shapeRef1700\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(15899.6, 8218.99);\n    polygon.ps[1] = Point(15899.6, 8280.99);\n    polygon.ps[2] = Point(15837.6, 8280.99);\n    polygon.ps[3] = Point(15837.6, 8218.99);\n    new ShapeRef(router, polygon, 1700);\n\n    // shapeRef1701\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(15899.6, 8677.22);\n    polygon.ps[1] = Point(15899.6, 8739.22);\n    polygon.ps[2] = Point(15837.6, 8739.22);\n    polygon.ps[3] = Point(15837.6, 8677.22);\n    new ShapeRef(router, polygon, 1701);\n\n    // shapeRef1702\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(16753.8, 8218.99);\n    polygon.ps[1] = Point(16753.8, 8280.99);\n    polygon.ps[2] = Point(16691.8, 8280.99);\n    polygon.ps[3] = Point(16691.8, 8218.99);\n    new ShapeRef(router, polygon, 1702);\n\n    // shapeRef1703\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(16753.8, 8611.22);\n    polygon.ps[1] = Point(16753.8, 8673.22);\n    polygon.ps[2] = Point(16691.8, 8673.22);\n    polygon.ps[3] = Point(16691.8, 8611.22);\n    new ShapeRef(router, polygon, 1703);\n\n    // shapeRef1704\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(13198, 8218.99);\n    polygon.ps[1] = Point(13198, 8280.99);\n    polygon.ps[2] = Point(13136, 8280.99);\n    polygon.ps[3] = Point(13136, 8218.99);\n    new ShapeRef(router, polygon, 1704);\n\n    // shapeRef1705\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(10840.2, 7097.4);\n    polygon.ps[1] = Point(10840.2, 7159.4);\n    polygon.ps[2] = Point(10778.2, 7159.4);\n    polygon.ps[3] = Point(10778.2, 7097.4);\n    new ShapeRef(router, polygon, 1705);\n\n    // shapeRef1706\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(18399.5, 5039.4);\n    polygon.ps[1] = Point(18399.5, 5101.4);\n    polygon.ps[2] = Point(18337.5, 5101.4);\n    polygon.ps[3] = Point(18337.5, 5039.4);\n    new ShapeRef(router, polygon, 1706);\n\n    // shapeRef1707\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(18756.5, 5791.9);\n    polygon.ps[1] = Point(18756.5, 5853.9);\n    polygon.ps[2] = Point(18694.5, 5853.9);\n    polygon.ps[3] = Point(18694.5, 5791.9);\n    new ShapeRef(router, polygon, 1707);\n\n    // shapeRef1708\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(17772.5, 5791.9);\n    polygon.ps[1] = Point(17772.5, 5853.9);\n    polygon.ps[2] = Point(17710.5, 5853.9);\n    polygon.ps[3] = Point(17710.5, 5791.9);\n    new ShapeRef(router, polygon, 1708);\n\n    // shapeRef1709\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(10840.2, 7548.79);\n    polygon.ps[1] = Point(10840.2, 7610.79);\n    polygon.ps[2] = Point(10778.2, 7610.79);\n    polygon.ps[3] = Point(10778.2, 7548.79);\n    new ShapeRef(router, polygon, 1709);\n\n    // shapeRef1710\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(11071.2, 8842.22);\n    polygon.ps[1] = Point(11071.2, 8904.22);\n    polygon.ps[2] = Point(11009.2, 8904.22);\n    polygon.ps[3] = Point(11009.2, 8842.22);\n    new ShapeRef(router, polygon, 1710);\n\n    // shapeRef1711\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(11460.1, 8842.22);\n    polygon.ps[1] = Point(11460.1, 8904.22);\n    polygon.ps[2] = Point(11398.1, 8904.22);\n    polygon.ps[3] = Point(11398.1, 8842.22);\n    new ShapeRef(router, polygon, 1711);\n\n    // shapeRef1712\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(12021.1, 8842.22);\n    polygon.ps[1] = Point(12021.1, 8904.22);\n    polygon.ps[2] = Point(11959.1, 8904.22);\n    polygon.ps[3] = Point(11959.1, 8842.22);\n    new ShapeRef(router, polygon, 1712);\n\n    // shapeRef1713\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(12920.5, 8842.22);\n    polygon.ps[1] = Point(12920.5, 8904.22);\n    polygon.ps[2] = Point(12858.5, 8904.22);\n    polygon.ps[3] = Point(12858.5, 8842.22);\n    new ShapeRef(router, polygon, 1713);\n\n    // shapeRef1714\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(13903, 8842.22);\n    polygon.ps[1] = Point(13903, 8904.22);\n    polygon.ps[2] = Point(13841, 8904.22);\n    polygon.ps[3] = Point(13841, 8842.22);\n    new ShapeRef(router, polygon, 1714);\n\n    // shapeRef1715\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(7177.1, 3534.51);\n    polygon.ps[1] = Point(7177.1, 3596.51);\n    polygon.ps[2] = Point(7115.1, 3596.51);\n    polygon.ps[3] = Point(7115.1, 3534.51);\n    new ShapeRef(router, polygon, 1715);\n\n    // shapeRef1716\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(6550.1, 3534.51);\n    polygon.ps[1] = Point(6550.1, 3596.51);\n    polygon.ps[2] = Point(6488.1, 3596.51);\n    polygon.ps[3] = Point(6488.1, 3534.51);\n    new ShapeRef(router, polygon, 1716);\n\n    // shapeRef1717\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(6055.1, 3534.51);\n    polygon.ps[1] = Point(6055.1, 3596.51);\n    polygon.ps[2] = Point(5993.1, 3596.51);\n    polygon.ps[3] = Point(5993.1, 3534.51);\n    new ShapeRef(router, polygon, 1717);\n\n    // shapeRef1718\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(5343, 3534.51);\n    polygon.ps[1] = Point(5343, 3596.51);\n    polygon.ps[2] = Point(5281, 3596.51);\n    polygon.ps[3] = Point(5281, 3534.51);\n    new ShapeRef(router, polygon, 1718);\n\n    // shapeRef1719\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(6781.1, 6483.51);\n    polygon.ps[1] = Point(6781.1, 6545.51);\n    polygon.ps[2] = Point(6719.1, 6545.51);\n    polygon.ps[3] = Point(6719.1, 6483.51);\n    new ShapeRef(router, polygon, 1719);\n\n    // shapeRef1720\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(4980, 7548.79);\n    polygon.ps[1] = Point(4980, 7610.79);\n    polygon.ps[2] = Point(4918, 7610.79);\n    polygon.ps[3] = Point(4918, 7548.79);\n    new ShapeRef(router, polygon, 1720);\n\n    // shapeRef1721\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(4980, 8076.79);\n    polygon.ps[1] = Point(4980, 8138.79);\n    polygon.ps[2] = Point(4918, 8138.79);\n    polygon.ps[3] = Point(4918, 8076.79);\n    new ShapeRef(router, polygon, 1721);\n\n    // shapeRef1722\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(4980, 8548.99);\n    polygon.ps[1] = Point(4980, 8610.99);\n    polygon.ps[2] = Point(4918, 8610.99);\n    polygon.ps[3] = Point(4918, 8548.99);\n    new ShapeRef(router, polygon, 1722);\n\n    // shapeRef1723\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(4980, 9083.42);\n    polygon.ps[1] = Point(4980, 9145.42);\n    polygon.ps[2] = Point(4918, 9145.42);\n    polygon.ps[3] = Point(4918, 9083.42);\n    new ShapeRef(router, polygon, 1723);\n\n    // shapeRef1724\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(4980, 9545.42);\n    polygon.ps[1] = Point(4980, 9607.42);\n    polygon.ps[2] = Point(4918, 9607.42);\n    polygon.ps[3] = Point(4918, 9545.42);\n    new ShapeRef(router, polygon, 1724);\n\n    // shapeRef1725\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(4320, 9545.42);\n    polygon.ps[1] = Point(4320, 9607.42);\n    polygon.ps[2] = Point(4258, 9607.42);\n    polygon.ps[3] = Point(4258, 9545.42);\n    new ShapeRef(router, polygon, 1725);\n\n    // shapeRef1726\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(4320, 10044);\n    polygon.ps[1] = Point(4320, 10106);\n    polygon.ps[2] = Point(4258, 10106);\n    polygon.ps[3] = Point(4258, 10044);\n    new ShapeRef(router, polygon, 1726);\n\n    // shapeRef1727\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(4980, 10407);\n    polygon.ps[1] = Point(4980, 10469);\n    polygon.ps[2] = Point(4918, 10469);\n    polygon.ps[3] = Point(4918, 10407);\n    new ShapeRef(router, polygon, 1727);\n\n    // shapeRef1728\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(4584, 10407);\n    polygon.ps[1] = Point(4584, 10469);\n    polygon.ps[2] = Point(4522, 10469);\n    polygon.ps[3] = Point(4522, 10407);\n    new ShapeRef(router, polygon, 1728);\n\n    // shapeRef1729\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(11394.1, 1249.29);\n    polygon.ps[1] = Point(11394.1, 1311.29);\n    polygon.ps[2] = Point(11332.1, 1311.29);\n    polygon.ps[3] = Point(11332.1, 1249.29);\n    new ShapeRef(router, polygon, 1729);\n\n    // shapeRef1730\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(11394.1, 777.091);\n    polygon.ps[1] = Point(11394.1, 839.091);\n    polygon.ps[2] = Point(11332.1, 839.091);\n    polygon.ps[3] = Point(11332.1, 777.091);\n    new ShapeRef(router, polygon, 1730);\n\n    // shapeRef1731\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(11394.1, 427.265);\n    polygon.ps[1] = Point(11394.1, 489.265);\n    polygon.ps[2] = Point(11332.1, 489.265);\n    polygon.ps[3] = Point(11332.1, 427.265);\n    new ShapeRef(router, polygon, 1731);\n\n    // shapeRef1732\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(11757.1, 427.265);\n    polygon.ps[1] = Point(11757.1, 489.265);\n    polygon.ps[2] = Point(11695.1, 489.265);\n    polygon.ps[3] = Point(11695.1, 427.265);\n    new ShapeRef(router, polygon, 1732);\n\n    // shapeRef1733\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(12120.1, 427.265);\n    polygon.ps[1] = Point(12120.1, 489.265);\n    polygon.ps[2] = Point(12058.1, 489.265);\n    polygon.ps[3] = Point(12058.1, 427.265);\n    new ShapeRef(router, polygon, 1733);\n\n    // shapeRef1734\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(12887.5, 427.265);\n    polygon.ps[1] = Point(12887.5, 489.265);\n    polygon.ps[2] = Point(12825.5, 489.265);\n    polygon.ps[3] = Point(12825.5, 427.265);\n    new ShapeRef(router, polygon, 1734);\n\n    // shapeRef1735\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(12384.1, 612.091);\n    polygon.ps[1] = Point(12384.1, 674.091);\n    polygon.ps[2] = Point(12322.1, 674.091);\n    polygon.ps[3] = Point(12322.1, 612.091);\n    new ShapeRef(router, polygon, 1735);\n\n    // shapeRef1736\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(13540, 427.265);\n    polygon.ps[1] = Point(13540, 489.265);\n    polygon.ps[2] = Point(13478, 489.265);\n    polygon.ps[3] = Point(13478, 427.265);\n    new ShapeRef(router, polygon, 1736);\n\n    // shapeRef1737\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(14068, 427.265);\n    polygon.ps[1] = Point(14068, 489.265);\n    polygon.ps[2] = Point(14006, 489.265);\n    polygon.ps[3] = Point(14006, 427.265);\n    new ShapeRef(router, polygon, 1737);\n\n    // shapeRef1738\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(14596, 427.265);\n    polygon.ps[1] = Point(14596, 489.265);\n    polygon.ps[2] = Point(14534, 489.265);\n    polygon.ps[3] = Point(14534, 427.265);\n    new ShapeRef(router, polygon, 1738);\n\n    // shapeRef1739\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(15270.5, 427.265);\n    polygon.ps[1] = Point(15270.5, 489.265);\n    polygon.ps[2] = Point(15208.5, 489.265);\n    polygon.ps[3] = Point(15208.5, 427.265);\n    new ShapeRef(router, polygon, 1739);\n\n    // shapeRef1740\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(15998.6, 427.265);\n    polygon.ps[1] = Point(15998.6, 489.265);\n    polygon.ps[2] = Point(15936.6, 489.265);\n    polygon.ps[3] = Point(15936.6, 427.265);\n    new ShapeRef(router, polygon, 1740);\n\n    // shapeRef1741\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(16394.6, 427.265);\n    polygon.ps[1] = Point(16394.6, 489.265);\n    polygon.ps[2] = Point(16332.6, 489.265);\n    polygon.ps[3] = Point(16332.6, 427.265);\n    new ShapeRef(router, polygon, 1741);\n\n    // shapeRef1742\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(16394.6, 1249.29);\n    polygon.ps[1] = Point(16394.6, 1311.29);\n    polygon.ps[2] = Point(16332.6, 1311.29);\n    polygon.ps[3] = Point(16332.6, 1249.29);\n    new ShapeRef(router, polygon, 1742);\n\n    // shapeRef1743\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(18432.5, 11829.9);\n    polygon.ps[1] = Point(18432.5, 11891.9);\n    polygon.ps[2] = Point(18370.5, 11891.9);\n    polygon.ps[3] = Point(18370.5, 11829.9);\n    new ShapeRef(router, polygon, 1743);\n\n    // shapeRef1744\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(18661.5, 11829.9);\n    polygon.ps[1] = Point(18661.5, 11891.9);\n    polygon.ps[2] = Point(18599.5, 11891.9);\n    polygon.ps[3] = Point(18599.5, 11829.9);\n    new ShapeRef(router, polygon, 1744);\n\n    // shapeRef1745\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(10487.9, 427.265);\n    polygon.ps[1] = Point(10487.9, 489.265);\n    polygon.ps[2] = Point(10425.9, 489.265);\n    polygon.ps[3] = Point(10425.9, 427.265);\n    new ShapeRef(router, polygon, 1745);\n\n    // shapeRef1746\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9202.59, 427.265);\n    polygon.ps[1] = Point(9202.59, 489.265);\n    polygon.ps[2] = Point(9140.59, 489.265);\n    polygon.ps[3] = Point(9140.59, 427.265);\n    new ShapeRef(router, polygon, 1746);\n\n    // shapeRef1747\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8489.29, 282.265);\n    polygon.ps[1] = Point(8489.29, 344.265);\n    polygon.ps[2] = Point(8427.29, 344.265);\n    polygon.ps[3] = Point(8427.29, 282.265);\n    new ShapeRef(router, polygon, 1747);\n\n    // shapeRef1748\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8225.29, 282.265);\n    polygon.ps[1] = Point(8225.29, 344.265);\n    polygon.ps[2] = Point(8163.29, 344.265);\n    polygon.ps[3] = Point(8163.29, 282.265);\n    new ShapeRef(router, polygon, 1748);\n\n    // shapeRef1749\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(7895.29, 282.265);\n    polygon.ps[1] = Point(7895.29, 344.265);\n    polygon.ps[2] = Point(7833.29, 344.265);\n    polygon.ps[3] = Point(7833.29, 282.265);\n    new ShapeRef(router, polygon, 1749);\n\n    // shapeRef1750\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8093.29, 394.265);\n    polygon.ps[1] = Point(8093.29, 456.265);\n    polygon.ps[2] = Point(8031.29, 456.265);\n    polygon.ps[3] = Point(8031.29, 394.265);\n    new ShapeRef(router, polygon, 1750);\n\n    // shapeRef1751\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(7375.1, 394.265);\n    polygon.ps[1] = Point(7375.1, 456.265);\n    polygon.ps[2] = Point(7313.1, 456.265);\n    polygon.ps[3] = Point(7313.1, 394.265);\n    new ShapeRef(router, polygon, 1751);\n\n    // shapeRef1752\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(6649.1, 394.265);\n    polygon.ps[1] = Point(6649.1, 456.265);\n    polygon.ps[2] = Point(6587.1, 456.265);\n    polygon.ps[3] = Point(6587.1, 394.265);\n    new ShapeRef(router, polygon, 1752);\n\n    // shapeRef1753\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(6154.1, 394.265);\n    polygon.ps[1] = Point(6154.1, 456.265);\n    polygon.ps[2] = Point(6092.1, 456.265);\n    polygon.ps[3] = Point(6092.1, 394.265);\n    new ShapeRef(router, polygon, 1753);\n\n    // shapeRef1754\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(10840.2, 4511.4);\n    polygon.ps[1] = Point(10840.2, 4573.4);\n    polygon.ps[2] = Point(10778.2, 4573.4);\n    polygon.ps[3] = Point(10778.2, 4511.4);\n    new ShapeRef(router, polygon, 1754);\n\n    // shapeRef1755\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(15270.5, 711.091);\n    polygon.ps[1] = Point(15270.5, 773.091);\n    polygon.ps[2] = Point(15208.5, 773.091);\n    polygon.ps[3] = Point(15208.5, 711.091);\n    new ShapeRef(router, polygon, 1755);\n\n    // shapeRef1756\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(15270.5, 1150.29);\n    polygon.ps[1] = Point(15270.5, 1212.29);\n    polygon.ps[2] = Point(15208.5, 1212.29);\n    polygon.ps[3] = Point(15208.5, 1150.29);\n    new ShapeRef(router, polygon, 1756);\n\n    // shapeRef1757\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(5824.1, 4095.51);\n    polygon.ps[1] = Point(5824.1, 4157.51);\n    polygon.ps[2] = Point(5762.1, 4157.51);\n    polygon.ps[3] = Point(5762.1, 4095.51);\n    new ShapeRef(router, polygon, 1757);\n\n    // shapeRef1758\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(5343, 5933.59);\n    polygon.ps[1] = Point(5343, 5995.59);\n    polygon.ps[2] = Point(5281, 5995.59);\n    polygon.ps[3] = Point(5281, 5933.59);\n    new ShapeRef(router, polygon, 1758);\n\n    // shapeRef1759\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(5343, 4907.4);\n    polygon.ps[1] = Point(5343, 4969.4);\n    polygon.ps[2] = Point(5281, 4969.4);\n    polygon.ps[3] = Point(5281, 4907.4);\n    new ShapeRef(router, polygon, 1759);\n\n    // shapeRef1760\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(5343, 4095.51);\n    polygon.ps[1] = Point(5343, 4157.51);\n    polygon.ps[2] = Point(5281, 4157.51);\n    polygon.ps[3] = Point(5281, 4095.51);\n    new ShapeRef(router, polygon, 1760);\n\n    // shapeRef1761\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(10147, 10651.3);\n    polygon.ps[1] = Point(10147, 10713.3);\n    polygon.ps[2] = Point(10085, 10713.3);\n    polygon.ps[3] = Point(10085, 10651.3);\n    new ShapeRef(router, polygon, 1761);\n\n    // shapeRef1762\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(10741.2, 10651.3);\n    polygon.ps[1] = Point(10741.2, 10713.3);\n    polygon.ps[2] = Point(10679.2, 10713.3);\n    polygon.ps[3] = Point(10679.2, 10651.3);\n    new ShapeRef(router, polygon, 1762);\n\n    // shapeRef1763\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(11038.2, 10651.3);\n    polygon.ps[1] = Point(11038.2, 10713.3);\n    polygon.ps[2] = Point(10976.2, 10713.3);\n    polygon.ps[3] = Point(10976.2, 10651.3);\n    new ShapeRef(router, polygon, 1763);\n\n    // shapeRef1764\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(6583.1, 7262.4);\n    polygon.ps[1] = Point(6583.1, 7324.4);\n    polygon.ps[2] = Point(6521.1, 7324.4);\n    polygon.ps[3] = Point(6521.1, 7262.4);\n    new ShapeRef(router, polygon, 1764);\n\n    // shapeRef1765\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(7243.1, 6998.4);\n    polygon.ps[1] = Point(7243.1, 7060.4);\n    polygon.ps[2] = Point(7181.1, 7060.4);\n    polygon.ps[3] = Point(7181.1, 6998.4);\n    new ShapeRef(router, polygon, 1765);\n\n    // shapeRef1766\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(7243.1, 7614.79);\n    polygon.ps[1] = Point(7243.1, 7676.79);\n    polygon.ps[2] = Point(7181.1, 7676.79);\n    polygon.ps[3] = Point(7181.1, 7614.79);\n    new ShapeRef(router, polygon, 1766);\n\n    // shapeRef1767\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(7243.1, 9017.42);\n    polygon.ps[1] = Point(7243.1, 9079.42);\n    polygon.ps[2] = Point(7181.1, 9079.42);\n    polygon.ps[3] = Point(7181.1, 9017.42);\n    new ShapeRef(router, polygon, 1767);\n\n    // shapeRef1768\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(7243.1, 9380.42);\n    polygon.ps[1] = Point(7243.1, 9442.42);\n    polygon.ps[2] = Point(7181.1, 9442.42);\n    polygon.ps[3] = Point(7181.1, 9380.42);\n    new ShapeRef(router, polygon, 1768);\n\n    // shapeRef1769\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(6583.1, 7779.79);\n    polygon.ps[1] = Point(6583.1, 7841.79);\n    polygon.ps[2] = Point(6521.1, 7841.79);\n    polygon.ps[3] = Point(6521.1, 7779.79);\n    new ShapeRef(router, polygon, 1769);\n\n    // shapeRef1770\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(6583.1, 8284.99);\n    polygon.ps[1] = Point(6583.1, 8346.99);\n    polygon.ps[2] = Point(6521.1, 8346.99);\n    polygon.ps[3] = Point(6521.1, 8284.99);\n    new ShapeRef(router, polygon, 1770);\n\n    // shapeRef1771\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(6583.1, 9512.42);\n    polygon.ps[1] = Point(6583.1, 9574.42);\n    polygon.ps[2] = Point(6521.1, 9574.42);\n    polygon.ps[3] = Point(6521.1, 9512.42);\n    new ShapeRef(router, polygon, 1771);\n\n    // shapeRef1772\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(6583.1, 10077);\n    polygon.ps[1] = Point(6583.1, 10139);\n    polygon.ps[2] = Point(6521.1, 10139);\n    polygon.ps[3] = Point(6521.1, 10077);\n    new ShapeRef(router, polygon, 1772);\n\n    // shapeRef1773\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(6814.1, 7515.79);\n    polygon.ps[1] = Point(6814.1, 7577.79);\n    polygon.ps[2] = Point(6752.1, 7577.79);\n    polygon.ps[3] = Point(6752.1, 7515.79);\n    new ShapeRef(router, polygon, 1773);\n\n    // shapeRef1774\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(7177.1, 6219.51);\n    polygon.ps[1] = Point(7177.1, 6281.51);\n    polygon.ps[2] = Point(7115.1, 6281.51);\n    polygon.ps[3] = Point(7115.1, 6219.51);\n    new ShapeRef(router, polygon, 1774);\n\n    // shapeRef1775\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(7796.29, 6483.51);\n    polygon.ps[1] = Point(7796.29, 6545.51);\n    polygon.ps[2] = Point(7734.29, 6545.51);\n    polygon.ps[3] = Point(7734.29, 6483.51);\n    new ShapeRef(router, polygon, 1775);\n\n    // shapeRef1776\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8649.29, 6483.51);\n    polygon.ps[1] = Point(8649.29, 6545.51);\n    polygon.ps[2] = Point(8587.29, 6545.51);\n    polygon.ps[3] = Point(8587.29, 6483.51);\n    new ShapeRef(router, polygon, 1776);\n\n    // shapeRef1777\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(6154.1, 7713.79);\n    polygon.ps[1] = Point(6154.1, 7775.79);\n    polygon.ps[2] = Point(6092.1, 7775.79);\n    polygon.ps[3] = Point(6092.1, 7713.79);\n    new ShapeRef(router, polygon, 1777);\n\n    // shapeRef1778\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(6154.1, 8251.99);\n    polygon.ps[1] = Point(6154.1, 8313.99);\n    polygon.ps[2] = Point(6092.1, 8313.99);\n    polygon.ps[3] = Point(6092.1, 8251.99);\n    new ShapeRef(router, polygon, 1778);\n\n    // shapeRef1779\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(14728, 12261.3);\n    polygon.ps[1] = Point(14728, 12323.3);\n    polygon.ps[2] = Point(14666, 12323.3);\n    polygon.ps[3] = Point(14666, 12261.3);\n    new ShapeRef(router, polygon, 1779);\n\n    // shapeRef1780\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(14431, 12261.3);\n    polygon.ps[1] = Point(14431, 12323.3);\n    polygon.ps[2] = Point(14369, 12323.3);\n    polygon.ps[3] = Point(14369, 12261.3);\n    new ShapeRef(router, polygon, 1780);\n\n    // shapeRef1781\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9265.09, 11141.6);\n    polygon.ps[1] = Point(9265.09, 11201.6);\n    polygon.ps[2] = Point(9210.09, 11201.6);\n    polygon.ps[3] = Point(9210.09, 11141.6);\n    new ShapeRef(router, polygon, 1781);\n\n    // shapeRef1782\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8711.79, 11141.6);\n    polygon.ps[1] = Point(8711.79, 11201.6);\n    polygon.ps[2] = Point(8656.79, 11201.6);\n    polygon.ps[3] = Point(8656.79, 11141.6);\n    new ShapeRef(router, polygon, 1782);\n\n    // shapeRef1783\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8048.79, 10993.6);\n    polygon.ps[1] = Point(8048.79, 11033.6);\n    polygon.ps[2] = Point(7973.29, 11033.6);\n    polygon.ps[3] = Point(7973.29, 10993.6);\n    new ShapeRef(router, polygon, 1783);\n\n    // shapeRef1784\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8254.79, 10645.3);\n    polygon.ps[1] = Point(8254.79, 10705.3);\n    polygon.ps[2] = Point(8199.79, 10705.3);\n    polygon.ps[3] = Point(8199.79, 10645.3);\n    new ShapeRef(router, polygon, 1784);\n\n    // shapeRef1785\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8711.79, 10645.3);\n    polygon.ps[1] = Point(8711.79, 10705.3);\n    polygon.ps[2] = Point(8656.79, 10705.3);\n    polygon.ps[3] = Point(8656.79, 10645.3);\n    new ShapeRef(router, polygon, 1785);\n\n    // shapeRef1786\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(13326.5, 9176.42);\n    polygon.ps[1] = Point(13326.5, 9236.42);\n    polygon.ps[2] = Point(13271.5, 9236.42);\n    polygon.ps[3] = Point(13271.5, 9176.42);\n    new ShapeRef(router, polygon, 1786);\n\n    // shapeRef1787\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9746.19, 11141.6);\n    polygon.ps[1] = Point(9746.19, 11201.6);\n    polygon.ps[2] = Point(9691.19, 11201.6);\n    polygon.ps[3] = Point(9691.19, 11141.6);\n    new ShapeRef(router, polygon, 1787);\n\n    // shapeRef1788\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(10609.2, 11180.6);\n    polygon.ps[1] = Point(10609.2, 11242.6);\n    polygon.ps[2] = Point(10547.2, 11242.6);\n    polygon.ps[3] = Point(10547.2, 11180.6);\n    new ShapeRef(router, polygon, 1788);\n\n    // shapeRef1789\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9980.69, 11180.6);\n    polygon.ps[1] = Point(9980.69, 11242.6);\n    polygon.ps[2] = Point(9918.69, 11242.6);\n    polygon.ps[3] = Point(9918.69, 11180.6);\n    new ShapeRef(router, polygon, 1789);\n\n    // shapeRef1790\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9433.59, 11180.6);\n    polygon.ps[1] = Point(9433.59, 11242.6);\n    polygon.ps[2] = Point(9371.59, 11242.6);\n    polygon.ps[3] = Point(9371.59, 11180.6);\n    new ShapeRef(router, polygon, 1790);\n\n    // shapeRef1791\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9050.99, 11180.6);\n    polygon.ps[1] = Point(9050.99, 11242.6);\n    polygon.ps[2] = Point(8988.99, 11242.6);\n    polygon.ps[3] = Point(8988.99, 11180.6);\n    new ShapeRef(router, polygon, 1791);\n\n    // shapeRef1792\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8423.29, 11180.6);\n    polygon.ps[1] = Point(8423.29, 11242.6);\n    polygon.ps[2] = Point(8361.29, 11242.6);\n    polygon.ps[3] = Point(8361.29, 11180.6);\n    new ShapeRef(router, polygon, 1792);\n\n    // shapeRef1793\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(7994.29, 11180.6);\n    polygon.ps[1] = Point(7994.29, 11242.6);\n    polygon.ps[2] = Point(7932.29, 11242.6);\n    polygon.ps[3] = Point(7932.29, 11180.6);\n    new ShapeRef(router, polygon, 1793);\n\n    // shapeRef1794\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(7994.29, 10684.3);\n    polygon.ps[1] = Point(7994.29, 10746.3);\n    polygon.ps[2] = Point(7932.29, 10746.3);\n    polygon.ps[3] = Point(7932.29, 10684.3);\n    new ShapeRef(router, polygon, 1794);\n\n    // shapeRef1795\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8423.29, 10684.3);\n    polygon.ps[1] = Point(8423.29, 10746.3);\n    polygon.ps[2] = Point(8361.29, 10746.3);\n    polygon.ps[3] = Point(8361.29, 10684.3);\n    new ShapeRef(router, polygon, 1795);\n\n    // shapeRef1796\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9050.99, 10684.3);\n    polygon.ps[1] = Point(9050.99, 10746.3);\n    polygon.ps[2] = Point(8988.99, 10746.3);\n    polygon.ps[3] = Point(8988.99, 10684.3);\n    new ShapeRef(router, polygon, 1796);\n\n    // shapeRef1797\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8800.89, 11984.3);\n    polygon.ps[1] = Point(8800.89, 12046.3);\n    polygon.ps[2] = Point(8738.89, 12046.3);\n    polygon.ps[3] = Point(8738.89, 11984.3);\n    new ShapeRef(router, polygon, 1797);\n\n    // shapeRef1798\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(6220.1, 183.265);\n    polygon.ps[1] = Point(6220.1, 245.265);\n    polygon.ps[2] = Point(6158.1, 245.265);\n    polygon.ps[3] = Point(6158.1, 183.265);\n    new ShapeRef(router, polygon, 1798);\n\n    // shapeRef1799\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(5956.1, 183.265);\n    polygon.ps[1] = Point(5956.1, 245.265);\n    polygon.ps[2] = Point(5894.1, 245.265);\n    polygon.ps[3] = Point(5894.1, 183.265);\n    new ShapeRef(router, polygon, 1799);\n\n    // shapeRef1800\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(7796.29, 1117.29);\n    polygon.ps[1] = Point(7796.29, 1179.29);\n    polygon.ps[2] = Point(7734.29, 1179.29);\n    polygon.ps[3] = Point(7734.29, 1117.29);\n    new ShapeRef(router, polygon, 1800);\n\n    // shapeRef1801\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8419.79, 5442.67);\n    polygon.ps[1] = Point(8419.79, 5502.67);\n    polygon.ps[2] = Point(8364.79, 5502.67);\n    polygon.ps[3] = Point(8364.79, 5442.67);\n    new ShapeRef(router, polygon, 1801);\n\n    // shapeRef1802\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8866.89, 5481.67);\n    polygon.ps[1] = Point(8866.89, 5543.67);\n    polygon.ps[2] = Point(8804.89, 5543.67);\n    polygon.ps[3] = Point(8804.89, 5481.67);\n    new ShapeRef(router, polygon, 1802);\n\n    // shapeRef1803\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8126.29, 5481.67);\n    polygon.ps[1] = Point(8126.29, 5543.67);\n    polygon.ps[2] = Point(8064.29, 5543.67);\n    polygon.ps[3] = Point(8064.29, 5481.67);\n    new ShapeRef(router, polygon, 1803);\n\n    // shapeRef1804\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(17241, 7204.4);\n    polygon.ps[1] = Point(17241, 7264.4);\n    polygon.ps[2] = Point(17186, 7264.4);\n    polygon.ps[3] = Point(17186, 7204.4);\n    new ShapeRef(router, polygon, 1804);\n\n    // shapeRef1805\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(17083.8, 7394.4);\n    polygon.ps[1] = Point(17083.8, 7456.4);\n    polygon.ps[2] = Point(17021.8, 7456.4);\n    polygon.ps[3] = Point(17021.8, 7394.4);\n    new ShapeRef(router, polygon, 1805);\n\n    // shapeRef1806\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(17083.8, 7031.4);\n    polygon.ps[1] = Point(17083.8, 7093.4);\n    polygon.ps[2] = Point(17021.8, 7093.4);\n    polygon.ps[3] = Point(17021.8, 7031.4);\n    new ShapeRef(router, polygon, 1806);\n\n    // shapeRef1807\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(10454.9, 6516.51);\n    polygon.ps[1] = Point(10454.9, 6578.51);\n    polygon.ps[2] = Point(10392.9, 6578.51);\n    polygon.ps[3] = Point(10392.9, 6516.51);\n    new ShapeRef(router, polygon, 1807);\n\n    // shapeRef1808\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(4584, 5933.59);\n    polygon.ps[1] = Point(4584, 5995.59);\n    polygon.ps[2] = Point(4522, 5995.59);\n    polygon.ps[3] = Point(4522, 5933.59);\n    new ShapeRef(router, polygon, 1808);\n\n    // shapeRef1809\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(11394.1, 2812.29);\n    polygon.ps[1] = Point(11394.1, 2874.29);\n    polygon.ps[2] = Point(11332.1, 2874.29);\n    polygon.ps[3] = Point(11332.1, 2812.29);\n    new ShapeRef(router, polygon, 1809);\n\n    // shapeRef1810\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(11394.1, 3666.51);\n    polygon.ps[1] = Point(11394.1, 3728.51);\n    polygon.ps[2] = Point(11332.1, 3728.51);\n    polygon.ps[3] = Point(11332.1, 3666.51);\n    new ShapeRef(router, polygon, 1810);\n\n    // shapeRef1811\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(11394.1, 5138.4);\n    polygon.ps[1] = Point(11394.1, 5200.4);\n    polygon.ps[2] = Point(11332.1, 5200.4);\n    polygon.ps[3] = Point(11332.1, 5138.4);\n    new ShapeRef(router, polygon, 1811);\n\n    // shapeRef1812\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(11394.1, 5725.9);\n    polygon.ps[1] = Point(11394.1, 5787.9);\n    polygon.ps[2] = Point(11332.1, 5787.9);\n    polygon.ps[3] = Point(11332.1, 5725.9);\n    new ShapeRef(router, polygon, 1812);\n\n    // shapeRef1813\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(11394.1, 7548.79);\n    polygon.ps[1] = Point(11394.1, 7610.79);\n    polygon.ps[2] = Point(11332.1, 7610.79);\n    polygon.ps[3] = Point(11332.1, 7548.79);\n    new ShapeRef(router, polygon, 1813);\n\n    // shapeRef1814\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(11394.1, 9182.42);\n    polygon.ps[1] = Point(11394.1, 9244.42);\n    polygon.ps[2] = Point(11332.1, 9244.42);\n    polygon.ps[3] = Point(11332.1, 9182.42);\n    new ShapeRef(router, polygon, 1814);\n\n    // shapeRef1815\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(11394.1, 10506);\n    polygon.ps[1] = Point(11394.1, 10568);\n    polygon.ps[2] = Point(11332.1, 10568);\n    polygon.ps[3] = Point(11332.1, 10506);\n    new ShapeRef(router, polygon, 1815);\n\n    // shapeRef1816\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(11394.1, 12096.3);\n    polygon.ps[1] = Point(11394.1, 12158.3);\n    polygon.ps[2] = Point(11332.1, 12158.3);\n    polygon.ps[3] = Point(11332.1, 12096.3);\n    new ShapeRef(router, polygon, 1816);\n\n    // shapeRef1817\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(12562.5, 12096.3);\n    polygon.ps[1] = Point(12562.5, 12158.3);\n    polygon.ps[2] = Point(12500.5, 12158.3);\n    polygon.ps[3] = Point(12500.5, 12096.3);\n    new ShapeRef(router, polygon, 1817);\n\n    // shapeRef1818\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(13264, 12096.3);\n    polygon.ps[1] = Point(13264, 12158.3);\n    polygon.ps[2] = Point(13202, 12158.3);\n    polygon.ps[3] = Point(13202, 12096.3);\n    new ShapeRef(router, polygon, 1818);\n\n    // shapeRef1819\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(14035, 12261.3);\n    polygon.ps[1] = Point(14035, 12323.3);\n    polygon.ps[2] = Point(13973, 12323.3);\n    polygon.ps[3] = Point(13973, 12261.3);\n    new ShapeRef(router, polygon, 1819);\n\n    // shapeRef1820\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(4584, 10717.3);\n    polygon.ps[1] = Point(4584, 10779.3);\n    polygon.ps[2] = Point(4522, 10779.3);\n    polygon.ps[3] = Point(4522, 10717.3);\n    new ShapeRef(router, polygon, 1820);\n\n    // shapeRef1821\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(7924.79, 1210.29);\n    polygon.ps[1] = Point(7924.79, 1270.29);\n    polygon.ps[2] = Point(7869.79, 1270.29);\n    polygon.ps[3] = Point(7869.79, 1210.29);\n    new ShapeRef(router, polygon, 1821);\n\n    // shapeRef1822\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(7693.6, 1392.29);\n    polygon.ps[1] = Point(7693.6, 1432.29);\n    polygon.ps[2] = Point(7618.1, 1432.29);\n    polygon.ps[3] = Point(7618.1, 1392.29);\n    new ShapeRef(router, polygon, 1822);\n\n    // shapeRef1823\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8192.29, 1249.29);\n    polygon.ps[1] = Point(8192.29, 1311.29);\n    polygon.ps[2] = Point(8130.29, 1311.29);\n    polygon.ps[3] = Point(8130.29, 1249.29);\n    new ShapeRef(router, polygon, 1823);\n\n    // shapeRef1824\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(7639.1, 1249.29);\n    polygon.ps[1] = Point(7639.1, 1311.29);\n    polygon.ps[2] = Point(7577.1, 1311.29);\n    polygon.ps[3] = Point(7577.1, 1249.29);\n    new ShapeRef(router, polygon, 1824);\n\n    // shapeRef1825\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(7639.1, 1579.29);\n    polygon.ps[1] = Point(7639.1, 1641.29);\n    polygon.ps[2] = Point(7577.1, 1641.29);\n    polygon.ps[3] = Point(7577.1, 1579.29);\n    new ShapeRef(router, polygon, 1825);\n\n    // shapeRef1826\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(7639.1, 2746.29);\n    polygon.ps[1] = Point(7639.1, 2808.29);\n    polygon.ps[2] = Point(7577.1, 2808.29);\n    polygon.ps[3] = Point(7577.1, 2746.29);\n    new ShapeRef(router, polygon, 1826);\n\n    // shapeRef1827\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(7639.1, 3175.29);\n    polygon.ps[1] = Point(7639.1, 3237.29);\n    polygon.ps[2] = Point(7577.1, 3237.29);\n    polygon.ps[3] = Point(7577.1, 3175.29);\n    new ShapeRef(router, polygon, 1827);\n\n    // shapeRef1828\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(15014.4, 1111.29);\n    polygon.ps[1] = Point(15014.4, 1171.29);\n    polygon.ps[2] = Point(14959.4, 1171.29);\n    polygon.ps[3] = Point(14959.4, 1111.29);\n    new ShapeRef(router, polygon, 1828);\n\n    // shapeRef1829\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(16229.6, 11601.9);\n    polygon.ps[1] = Point(16229.6, 11663.9);\n    polygon.ps[2] = Point(16167.6, 11663.9);\n    polygon.ps[3] = Point(16167.6, 11601.9);\n    new ShapeRef(router, polygon, 1829);\n\n    // shapeRef1830\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(15899.6, 11601.9);\n    polygon.ps[1] = Point(15899.6, 11663.9);\n    polygon.ps[2] = Point(15837.6, 11663.9);\n    polygon.ps[3] = Point(15837.6, 11601.9);\n    new ShapeRef(router, polygon, 1830);\n\n    // shapeRef1831\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9268.59, 12427.7);\n    polygon.ps[1] = Point(9268.59, 12489.7);\n    polygon.ps[2] = Point(9206.59, 12489.7);\n    polygon.ps[3] = Point(9206.59, 12427.7);\n    new ShapeRef(router, polygon, 1831);\n\n    // shapeRef1832\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(16229.6, 11951.3);\n    polygon.ps[1] = Point(16229.6, 12013.3);\n    polygon.ps[2] = Point(16167.6, 12013.3);\n    polygon.ps[3] = Point(16167.6, 11951.3);\n    new ShapeRef(router, polygon, 1832);\n\n    // shapeRef1833\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(16588.8, 11951.3);\n    polygon.ps[1] = Point(16588.8, 12013.3);\n    polygon.ps[2] = Point(16526.8, 12013.3);\n    polygon.ps[3] = Point(16526.8, 11951.3);\n    new ShapeRef(router, polygon, 1833);\n\n    // shapeRef1834\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(16819.8, 12427.7);\n    polygon.ps[1] = Point(16819.8, 12489.7);\n    polygon.ps[2] = Point(16757.8, 12489.7);\n    polygon.ps[3] = Point(16757.8, 12427.7);\n    new ShapeRef(router, polygon, 1834);\n\n    // shapeRef1835\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(1746, 4742.4);\n    polygon.ps[1] = Point(1746, 4804.4);\n    polygon.ps[2] = Point(1684, 4804.4);\n    polygon.ps[3] = Point(1684, 4742.4);\n    new ShapeRef(router, polygon, 1835);\n\n    // shapeRef1836\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(2868, 4742.4);\n    polygon.ps[1] = Point(2868, 4804.4);\n    polygon.ps[2] = Point(2806, 4804.4);\n    polygon.ps[3] = Point(2806, 4742.4);\n    new ShapeRef(router, polygon, 1836);\n\n    // shapeRef1837\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(3264, 4742.4);\n    polygon.ps[1] = Point(3264, 4804.4);\n    polygon.ps[2] = Point(3202, 4804.4);\n    polygon.ps[3] = Point(3202, 4742.4);\n    new ShapeRef(router, polygon, 1837);\n\n    // shapeRef1838\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(1416, 4742.4);\n    polygon.ps[1] = Point(1416, 4804.4);\n    polygon.ps[2] = Point(1354, 4804.4);\n    polygon.ps[3] = Point(1354, 4742.4);\n    new ShapeRef(router, polygon, 1838);\n\n    // shapeRef1839\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(4980, 6582.51);\n    polygon.ps[1] = Point(4980, 6644.51);\n    polygon.ps[2] = Point(4918, 6644.51);\n    polygon.ps[3] = Point(4918, 6582.51);\n    new ShapeRef(router, polygon, 1839);\n\n    // shapeRef1840\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(6022.1, 6351.51);\n    polygon.ps[1] = Point(6022.1, 6413.51);\n    polygon.ps[2] = Point(5960.1, 6413.51);\n    polygon.ps[3] = Point(5960.1, 6351.51);\n    new ShapeRef(router, polygon, 1840);\n\n    // shapeRef1841\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(7982.79, 7058.4);\n    polygon.ps[1] = Point(7982.79, 7118.4);\n    polygon.ps[2] = Point(7927.79, 7118.4);\n    polygon.ps[3] = Point(7927.79, 7058.4);\n    new ShapeRef(router, polygon, 1841);\n\n    // shapeRef1842\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(7796.29, 7394.4);\n    polygon.ps[1] = Point(7796.29, 7456.4);\n    polygon.ps[2] = Point(7734.29, 7456.4);\n    polygon.ps[3] = Point(7734.29, 7394.4);\n    new ShapeRef(router, polygon, 1842);\n\n    // shapeRef1843\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8324.29, 6823.21);\n    polygon.ps[1] = Point(8324.29, 6885.21);\n    polygon.ps[2] = Point(8262.29, 6885.21);\n    polygon.ps[3] = Point(8262.29, 6823.21);\n    new ShapeRef(router, polygon, 1843);\n\n    // shapeRef1844\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(13297, 3600.51);\n    polygon.ps[1] = Point(13297, 3662.51);\n    polygon.ps[2] = Point(13235, 3662.51);\n    polygon.ps[3] = Point(13235, 3600.51);\n    new ShapeRef(router, polygon, 1844);\n\n    // shapeRef1845\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8452.79, 2038.29);\n    polygon.ps[1] = Point(8452.79, 2098.29);\n    polygon.ps[2] = Point(8397.79, 2098.29);\n    polygon.ps[3] = Point(8397.79, 2038.29);\n    new ShapeRef(router, polygon, 1845);\n\n    // shapeRef1846\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8866.89, 2077.29);\n    polygon.ps[1] = Point(8866.89, 2139.29);\n    polygon.ps[2] = Point(8804.89, 2139.29);\n    polygon.ps[3] = Point(8804.89, 2077.29);\n    new ShapeRef(router, polygon, 1846);\n\n    // shapeRef1847\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8192.29, 2077.29);\n    polygon.ps[1] = Point(8192.29, 2139.29);\n    polygon.ps[2] = Point(8130.29, 2139.29);\n    polygon.ps[3] = Point(8130.29, 2077.29);\n    new ShapeRef(router, polygon, 1847);\n\n    // shapeRef1848\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(5013, 5316.67);\n    polygon.ps[1] = Point(5013, 5378.67);\n    polygon.ps[2] = Point(4951, 5378.67);\n    polygon.ps[3] = Point(4951, 5316.67);\n    new ShapeRef(router, polygon, 1848);\n\n    // shapeRef1849\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(5791.1, 7295.4);\n    polygon.ps[1] = Point(5791.1, 7357.4);\n    polygon.ps[2] = Point(5729.1, 7357.4);\n    polygon.ps[3] = Point(5729.1, 7295.4);\n    new ShapeRef(router, polygon, 1849);\n\n    // shapeRef1850\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(686.5, 1689.29);\n    polygon.ps[1] = Point(686.5, 1729.29);\n    polygon.ps[2] = Point(631.5, 1729.29);\n    polygon.ps[3] = Point(631.5, 1689.29);\n    new ShapeRef(router, polygon, 1850);\n\n    // shapeRef1851\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(7470.6, 12239.3);\n    polygon.ps[1] = Point(7470.6, 12279.3);\n    polygon.ps[2] = Point(7415.6, 12279.3);\n    polygon.ps[3] = Point(7415.6, 12239.3);\n    new ShapeRef(router, polygon, 1851);\n\n    // shapeRef1852\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(4279, 9877.02);\n    polygon.ps[1] = Point(4279, 9961.11);\n    polygon.ps[2] = Point(4232.77, 9961.11);\n    polygon.ps[3] = Point(4232.77, 9877.02);\n    new ShapeRef(router, polygon, 1852);\n\n    // shapeRef1853\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8014.39, 7138.4);\n    polygon.ps[1] = Point(8014.39, 7184.64);\n    polygon.ps[2] = Point(7930.29, 7184.64);\n    polygon.ps[3] = Point(7930.29, 7138.4);\n    new ShapeRef(router, polygon, 1853);\n\n    // shapeRef1854\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(7990.86, 7138.4);\n    polygon.ps[1] = Point(7990.86, 7210);\n    polygon.ps[2] = Point(7930.29, 7210);\n    polygon.ps[3] = Point(7930.29, 7138.4);\n    new ShapeRef(router, polygon, 1854);\n\n    // shapeRef1855\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(7932.79, 7058.4);\n    polygon.ps[1] = Point(7932.79, 7118.4);\n    polygon.ps[2] = Point(7877.79, 7118.4);\n    polygon.ps[3] = Point(7877.79, 7058.4);\n    new ShapeRef(router, polygon, 1855);\n\n    // shapeRef1856\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8735.39, 4202.51);\n    polygon.ps[1] = Point(8735.39, 4248.75);\n    polygon.ps[2] = Point(8651.29, 4248.75);\n    polygon.ps[3] = Point(8651.29, 4202.51);\n    new ShapeRef(router, polygon, 1856);\n\n    // shapeRef1857\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9138.59, 6161.51);\n    polygon.ps[1] = Point(9138.59, 6206.21);\n    polygon.ps[2] = Point(9080.36, 6206.21);\n    polygon.ps[3] = Point(9080.36, 6161.51);\n    new ShapeRef(router, polygon, 1857);\n\n    // shapeRef1858\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9191.09, 6081.51);\n    polygon.ps[1] = Point(9191.09, 6141.51);\n    polygon.ps[2] = Point(9136.09, 6141.51);\n    polygon.ps[3] = Point(9136.09, 6081.51);\n    new ShapeRef(router, polygon, 1858);\n\n    // shapeRef1859\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(15229.5, 1288.06);\n    polygon.ps[1] = Point(15229.5, 1346.29);\n    polygon.ps[2] = Point(15184.8, 1346.29);\n    polygon.ps[3] = Point(15184.8, 1288.06);\n    new ShapeRef(router, polygon, 1859);\n\n    // shapeRef1860\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(14782.5, 1276.29);\n    polygon.ps[1] = Point(14782.5, 1336.29);\n    polygon.ps[2] = Point(14727.5, 1336.29);\n    polygon.ps[3] = Point(14727.5, 1276.29);\n    new ShapeRef(router, polygon, 1860);\n\n    // shapeRef1861\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9655.19, 6114.51);\n    polygon.ps[1] = Point(9655.19, 6174.51);\n    polygon.ps[2] = Point(9600.19, 6174.51);\n    polygon.ps[3] = Point(9600.19, 6114.51);\n    new ShapeRef(router, polygon, 1861);\n\n    // shapeRef1862\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9870.19, 7091.4);\n    polygon.ps[1] = Point(9870.19, 7151.4);\n    polygon.ps[2] = Point(9815.19, 7151.4);\n    polygon.ps[3] = Point(9815.19, 7091.4);\n    new ShapeRef(router, polygon, 1862);\n\n    // shapeRef1863\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(4939, 8807.22);\n    polygon.ps[1] = Point(4939, 8867.78);\n    polygon.ps[2] = Point(4867.4, 8867.78);\n    polygon.ps[3] = Point(4867.4, 8807.22);\n    new ShapeRef(router, polygon, 1863);\n\n    // shapeRef1864\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(7565.1, 9023.19);\n    polygon.ps[1] = Point(7565.1, 9081.42);\n    polygon.ps[2] = Point(7520.4, 9081.42);\n    polygon.ps[3] = Point(7520.4, 9023.19);\n    new ShapeRef(router, polygon, 1864);\n\n    // shapeRef1865\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(7171.33, 10250);\n    polygon.ps[1] = Point(7171.33, 10294.7);\n    polygon.ps[2] = Point(7113.1, 10294.7);\n    polygon.ps[3] = Point(7113.1, 10250);\n    new ShapeRef(router, polygon, 1865);\n\n    // shapeRef1866\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8227.29, 9685.42);\n    polygon.ps[1] = Point(8227.29, 9731.65);\n    polygon.ps[2] = Point(8143.2, 9731.65);\n    polygon.ps[3] = Point(8143.2, 9685.42);\n    new ShapeRef(router, polygon, 1866);\n\n    // shapeRef1867\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8311.39, 9685.42);\n    polygon.ps[1] = Point(8311.39, 9731.65);\n    polygon.ps[2] = Point(8227.29, 9731.65);\n    polygon.ps[3] = Point(8227.29, 9685.42);\n    new ShapeRef(router, polygon, 1867);\n\n    // shapeRef1868\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8279.79, 9605.42);\n    polygon.ps[1] = Point(8279.79, 9665.42);\n    polygon.ps[2] = Point(8224.79, 9665.42);\n    polygon.ps[3] = Point(8224.79, 9605.42);\n    new ShapeRef(router, polygon, 1868);\n\n    // shapeRef1869\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8326.29, 9854.02);\n    polygon.ps[1] = Point(8326.29, 9900.25);\n    polygon.ps[2] = Point(8242.2, 9900.25);\n    polygon.ps[3] = Point(8242.2, 9854.02);\n    new ShapeRef(router, polygon, 1869);\n\n    // shapeRef1870\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8410.39, 9854.02);\n    polygon.ps[1] = Point(8410.39, 9900.25);\n    polygon.ps[2] = Point(8326.29, 9900.25);\n    polygon.ps[3] = Point(8326.29, 9854.02);\n    new ShapeRef(router, polygon, 1870);\n\n    // shapeRef1871\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9369.59, 9652.42);\n    polygon.ps[1] = Point(9369.59, 9699.2);\n    polygon.ps[2] = Point(9261.33, 9699.2);\n    polygon.ps[3] = Point(9261.33, 9652.42);\n    new ShapeRef(router, polygon, 1871);\n\n    // shapeRef1872\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(253, 40);\n    polygon.ps[1] = Point(253, 148.265);\n    polygon.ps[2] = Point(206.215, 148.265);\n    polygon.ps[3] = Point(206.215, 40);\n    new ShapeRef(router, polygon, 1872);\n\n    // shapeRef1873\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(10314.9, 9360.32);\n    polygon.ps[1] = Point(10314.9, 9444.42);\n    polygon.ps[2] = Point(10268.7, 9444.42);\n    polygon.ps[3] = Point(10268.7, 9360.32);\n    new ShapeRef(router, polygon, 1873);\n\n    // shapeRef1874\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8792.89, 10075);\n    polygon.ps[1] = Point(8792.89, 10133.2);\n    polygon.ps[2] = Point(8748.2, 10133.2);\n    polygon.ps[3] = Point(8748.2, 10075);\n    new ShapeRef(router, polygon, 1874);\n\n    // shapeRef1875\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(5302, 5169.4);\n    polygon.ps[1] = Point(5302, 5253.5);\n    polygon.ps[2] = Point(5255.77, 5253.5);\n    polygon.ps[3] = Point(5255.77, 5169.4);\n    new ShapeRef(router, polygon, 1875);\n\n    // shapeRef1876\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(10667.2, 8579.99);\n    polygon.ps[1] = Point(10667.2, 8664.09);\n    polygon.ps[2] = Point(10621, 8664.09);\n    polygon.ps[3] = Point(10621, 8579.99);\n    new ShapeRef(router, polygon, 1876);\n\n    // shapeRef1877\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(10416.1, 10791.3);\n    polygon.ps[1] = Point(10416.1, 10836);\n    polygon.ps[2] = Point(10357.9, 10836);\n    polygon.ps[3] = Point(10357.9, 10791.3);\n    new ShapeRef(router, polygon, 1877);\n\n    // shapeRef1878\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9138.49, 8348.99);\n    polygon.ps[1] = Point(9138.49, 8388.99);\n    polygon.ps[2] = Point(9062.99, 8388.99);\n    polygon.ps[3] = Point(9062.99, 8348.99);\n    new ShapeRef(router, polygon, 1878);\n\n    // shapeRef1879\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9194.59, 11614.8);\n    polygon.ps[1] = Point(9194.59, 11698.9);\n    polygon.ps[2] = Point(9148.36, 11698.9);\n    polygon.ps[3] = Point(9148.36, 11614.8);\n    new ShapeRef(router, polygon, 1879);\n\n    // shapeRef1880\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9336.59, 5457.98);\n    polygon.ps[1] = Point(9336.59, 5502.67);\n    polygon.ps[2] = Point(9278.36, 5502.67);\n    polygon.ps[3] = Point(9278.36, 5457.98);\n    new ShapeRef(router, polygon, 1880);\n\n    // shapeRef1881\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8921.39, 2378.79);\n    polygon.ps[1] = Point(8921.39, 2418.79);\n    polygon.ps[2] = Point(8845.89, 2418.79);\n    polygon.ps[3] = Point(8845.89, 2378.79);\n    new ShapeRef(router, polygon, 1881);\n\n    // shapeRef1882\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9155.49, 2361.29);\n    polygon.ps[1] = Point(9155.49, 2401.29);\n    polygon.ps[2] = Point(9029.99, 2401.29);\n    polygon.ps[3] = Point(9029.99, 2361.29);\n    new ShapeRef(router, polygon, 1882);\n\n    // shapeRef1883\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8670.79, 1488.29);\n    polygon.ps[1] = Point(8670.79, 1548.29);\n    polygon.ps[2] = Point(8615.79, 1548.29);\n    polygon.ps[3] = Point(8615.79, 1488.29);\n    new ShapeRef(router, polygon, 1883);\n\n    // shapeRef1884\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(15117.8, 1356.29);\n    polygon.ps[1] = Point(15117.8, 1416.29);\n    polygon.ps[2] = Point(15062.8, 1416.29);\n    polygon.ps[3] = Point(15062.8, 1356.29);\n    new ShapeRef(router, polygon, 1884);\n\n    // shapeRef1885\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8318.52, 818.091);\n    polygon.ps[1] = Point(8318.52, 862.785);\n    polygon.ps[2] = Point(8260.29, 862.785);\n    polygon.ps[3] = Point(8260.29, 818.091);\n    new ShapeRef(router, polygon, 1885);\n\n    // shapeRef1886\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8250.29, 914.785);\n    polygon.ps[1] = Point(8250.29, 954.785);\n    polygon.ps[2] = Point(8174.79, 954.785);\n    polygon.ps[3] = Point(8174.79, 914.785);\n    new ShapeRef(router, polygon, 1886);\n\n    // shapeRef1887\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9039.49, 738.091);\n    polygon.ps[1] = Point(9039.49, 798.091);\n    polygon.ps[2] = Point(8984.49, 798.091);\n    polygon.ps[3] = Point(8984.49, 738.091);\n    new ShapeRef(router, polygon, 1887);\n\n    // shapeRef1888\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(12617, 4968.9);\n    polygon.ps[1] = Point(12617, 5008.9);\n    polygon.ps[2] = Point(12541.5, 5008.9);\n    polygon.ps[3] = Point(12541.5, 4968.9);\n    new ShapeRef(router, polygon, 1888);\n\n    // shapeRef1889\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(12521.5, 5206.4);\n    polygon.ps[1] = Point(12521.5, 5314.67);\n    polygon.ps[2] = Point(12474.7, 5314.67);\n    polygon.ps[3] = Point(12474.7, 5206.4);\n    new ShapeRef(router, polygon, 1889);\n\n    // shapeRef1890\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(12617, 5277.17);\n    polygon.ps[1] = Point(12617, 5317.17);\n    polygon.ps[2] = Point(12541.5, 5317.17);\n    polygon.ps[3] = Point(12541.5, 5277.17);\n    new ShapeRef(router, polygon, 1890);\n\n    // shapeRef1891\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(12749.7, 5259.98);\n    polygon.ps[1] = Point(12749.7, 5304.67);\n    polygon.ps[2] = Point(12691.5, 5304.67);\n    polygon.ps[3] = Point(12691.5, 5259.98);\n    new ShapeRef(router, polygon, 1891);\n\n    // shapeRef1892\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(12694, 5324.67);\n    polygon.ps[1] = Point(12694, 5384.67);\n    polygon.ps[2] = Point(12639, 5384.67);\n    polygon.ps[3] = Point(12639, 5324.67);\n    new ShapeRef(router, polygon, 1892);\n\n    // shapeRef1893\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(13401.5, 3842.51);\n    polygon.ps[1] = Point(13401.5, 3882.51);\n    polygon.ps[2] = Point(13276, 3882.51);\n    polygon.ps[3] = Point(13276, 3842.51);\n    new ShapeRef(router, polygon, 1893);\n\n    // shapeRef1894\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(13351.5, 3862.51);\n    polygon.ps[1] = Point(13351.5, 3902.51);\n    polygon.ps[2] = Point(13276, 3902.51);\n    polygon.ps[3] = Point(13276, 3862.51);\n    new ShapeRef(router, polygon, 1894);\n\n    // shapeRef1895\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(12925, 4439.4);\n    polygon.ps[1] = Point(12925, 4499.4);\n    polygon.ps[2] = Point(12870, 4499.4);\n    polygon.ps[3] = Point(12870, 4439.4);\n    new ShapeRef(router, polygon, 1895);\n\n    // shapeRef1896\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(11353.1, 1478.29);\n    polygon.ps[1] = Point(11353.1, 1562.38);\n    polygon.ps[2] = Point(11306.9, 1562.38);\n    polygon.ps[3] = Point(11306.9, 1478.29);\n    new ShapeRef(router, polygon, 1896);\n\n    // shapeRef1897\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(12075.6, 1739.79);\n    polygon.ps[1] = Point(12075.6, 1779.79);\n    polygon.ps[2] = Point(12000.1, 1779.79);\n    polygon.ps[3] = Point(12000.1, 1739.79);\n    new ShapeRef(router, polygon, 1897);\n\n    // shapeRef1898\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(12157.6, 1672.29);\n    polygon.ps[1] = Point(12157.6, 1732.29);\n    polygon.ps[2] = Point(12102.6, 1732.29);\n    polygon.ps[3] = Point(12102.6, 1672.29);\n    new ShapeRef(router, polygon, 1898);\n\n    // shapeRef1899\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(13957.5, 8410.49);\n    polygon.ps[1] = Point(13957.5, 8450.49);\n    polygon.ps[2] = Point(13882, 8450.49);\n    polygon.ps[3] = Point(13882, 8410.49);\n    new ShapeRef(router, polygon, 1899);\n\n    // shapeRef1900\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8703.79, 4122.51);\n    polygon.ps[1] = Point(8703.79, 4182.51);\n    polygon.ps[2] = Point(8648.79, 4182.51);\n    polygon.ps[3] = Point(8648.79, 4122.51);\n    new ShapeRef(router, polygon, 1900);\n\n    // shapeRef1901\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(6841.33, 3575.51);\n    polygon.ps[1] = Point(6841.33, 3620.21);\n    polygon.ps[2] = Point(6783.1, 3620.21);\n    polygon.ps[3] = Point(6783.1, 3575.51);\n    new ShapeRef(router, polygon, 1901);\n\n    // shapeRef1902\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(5694.1, 3575.51);\n    polygon.ps[1] = Point(5694.1, 3620.21);\n    polygon.ps[2] = Point(5635.87, 3620.21);\n    polygon.ps[3] = Point(5635.87, 3575.51);\n    new ShapeRef(router, polygon, 1902);\n\n    // shapeRef1903\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(5302, 3771.29);\n    polygon.ps[1] = Point(5302, 3829.51);\n    polygon.ps[2] = Point(5257.31, 3829.51);\n    polygon.ps[3] = Point(5257.31, 3771.29);\n    new ShapeRef(router, polygon, 1903);\n\n    // shapeRef1904\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(5302, 3829.51);\n    polygon.ps[1] = Point(5302, 3890.07);\n    polygon.ps[2] = Point(5230.4, 3890.07);\n    polygon.ps[3] = Point(5230.4, 3829.51);\n    new ShapeRef(router, polygon, 1904);\n\n    // shapeRef1905\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(5034.5, 7773.29);\n    polygon.ps[1] = Point(5034.5, 7813.29);\n    polygon.ps[2] = Point(4959, 7813.29);\n    polygon.ps[3] = Point(4959, 7773.29);\n    new ShapeRef(router, polygon, 1905);\n\n    // shapeRef1906\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(5034.5, 8381.99);\n    polygon.ps[1] = Point(5034.5, 8421.99);\n    polygon.ps[2] = Point(4959, 8421.99);\n    polygon.ps[3] = Point(4959, 8381.99);\n    new ShapeRef(router, polygon, 1906);\n\n    // shapeRef1907\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(4939, 8746.66);\n    polygon.ps[1] = Point(4939, 8807.22);\n    polygon.ps[2] = Point(4867.4, 8807.22);\n    polygon.ps[3] = Point(4867.4, 8746.66);\n    new ShapeRef(router, polygon, 1907);\n\n    // shapeRef1908\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(5084.5, 8787.22);\n    polygon.ps[1] = Point(5084.5, 8827.22);\n    polygon.ps[2] = Point(4959, 8827.22);\n    polygon.ps[3] = Point(4959, 8787.22);\n    new ShapeRef(router, polygon, 1908);\n\n    // shapeRef1909\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(11353.1, 610.091);\n    polygon.ps[1] = Point(11353.1, 668.318);\n    polygon.ps[2] = Point(11308.4, 668.318);\n    polygon.ps[3] = Point(11308.4, 610.091);\n    new ShapeRef(router, polygon, 1909);\n\n    // shapeRef1910\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(11353.1, 551.864);\n    polygon.ps[1] = Point(11353.1, 610.091);\n    polygon.ps[2] = Point(11308.4, 610.091);\n    polygon.ps[3] = Point(11308.4, 551.864);\n    new ShapeRef(router, polygon, 1910);\n\n    // shapeRef1911\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(14986.9, 1291.59);\n    polygon.ps[1] = Point(14986.9, 1336.29);\n    polygon.ps[2] = Point(14928.7, 1336.29);\n    polygon.ps[3] = Point(14928.7, 1291.59);\n    new ShapeRef(router, polygon, 1911);\n\n    // shapeRef1912\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(15835.6, 1291.59);\n    polygon.ps[1] = Point(15835.6, 1336.29);\n    polygon.ps[2] = Point(15777.4, 1336.29);\n    polygon.ps[3] = Point(15777.4, 1291.59);\n    new ShapeRef(router, polygon, 1912);\n\n    // shapeRef1913\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(15838.1, 1356.29);\n    polygon.ps[1] = Point(15838.1, 1416.29);\n    polygon.ps[2] = Point(15783.1, 1416.29);\n    polygon.ps[3] = Point(15783.1, 1356.29);\n    new ShapeRef(router, polygon, 1913);\n\n    // shapeRef1914\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(16353.6, 808.091);\n    polygon.ps[1] = Point(16353.6, 866.318);\n    polygon.ps[2] = Point(16308.9, 866.318);\n    polygon.ps[3] = Point(16308.9, 808.091);\n    new ShapeRef(router, polygon, 1914);\n\n    // shapeRef1915\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(16449.1, 770.591);\n    polygon.ps[1] = Point(16449.1, 810.591);\n    polygon.ps[2] = Point(16373.6, 810.591);\n    polygon.ps[3] = Point(16373.6, 770.591);\n    new ShapeRef(router, polygon, 1915);\n\n    // shapeRef1916\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(16251.1, 770.591);\n    polygon.ps[1] = Point(16251.1, 810.591);\n    polygon.ps[2] = Point(16175.6, 810.591);\n    polygon.ps[3] = Point(16175.6, 770.591);\n    new ShapeRef(router, polygon, 1916);\n\n    // shapeRef1917\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(12023.1, 7435.4);\n    polygon.ps[1] = Point(12023.1, 7480.1);\n    polygon.ps[2] = Point(11964.9, 7480.1);\n    polygon.ps[3] = Point(11964.9, 7435.4);\n    new ShapeRef(router, polygon, 1917);\n\n    // shapeRef1918\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(17042.8, 7194.4);\n    polygon.ps[1] = Point(17042.8, 7252.63);\n    polygon.ps[2] = Point(16998.1, 7252.63);\n    polygon.ps[3] = Point(16998.1, 7194.4);\n    new ShapeRef(router, polygon, 1918);\n\n    // shapeRef1919\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(17138.3, 7156.9);\n    polygon.ps[1] = Point(17138.3, 7196.9);\n    polygon.ps[2] = Point(17062.8, 7196.9);\n    polygon.ps[3] = Point(17062.8, 7156.9);\n    new ShapeRef(router, polygon, 1919);\n\n    // shapeRef1920\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(16524.8, 7435.4);\n    polygon.ps[1] = Point(16524.8, 7480.1);\n    polygon.ps[2] = Point(16466.6, 7480.1);\n    polygon.ps[3] = Point(16466.6, 7435.4);\n    new ShapeRef(router, polygon, 1920);\n\n    // shapeRef1921\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(16524.8, 7492.1);\n    polygon.ps[1] = Point(16524.8, 7536.79);\n    polygon.ps[2] = Point(16466.6, 7536.79);\n    polygon.ps[3] = Point(16466.6, 7492.1);\n    new ShapeRef(router, polygon, 1921);\n\n    // shapeRef1922\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(16583, 7492.1);\n    polygon.ps[1] = Point(16583, 7536.79);\n    polygon.ps[2] = Point(16524.8, 7536.79);\n    polygon.ps[3] = Point(16524.8, 7492.1);\n    new ShapeRef(router, polygon, 1922);\n\n    // shapeRef1923\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(18574.3, 11870.9);\n    polygon.ps[1] = Point(18574.3, 11915.6);\n    polygon.ps[2] = Point(18516, 11915.6);\n    polygon.ps[3] = Point(18516, 11870.9);\n    new ShapeRef(router, polygon, 1923);\n\n    // shapeRef1924\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(18498.5, 11790.9);\n    polygon.ps[1] = Point(18498.5, 11850.9);\n    polygon.ps[2] = Point(18443.5, 11850.9);\n    polygon.ps[3] = Point(18443.5, 11790.9);\n    new ShapeRef(router, polygon, 1924);\n\n    // shapeRef1925\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(18568.5, 11755.9);\n    polygon.ps[1] = Point(18568.5, 11850.9);\n    polygon.ps[2] = Point(18513.5, 11850.9);\n    polygon.ps[3] = Point(18513.5, 11755.9);\n    new ShapeRef(router, polygon, 1925);\n\n    // shapeRef1926\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(18518.5, 11755.9);\n    polygon.ps[1] = Point(18518.5, 11850.9);\n    polygon.ps[2] = Point(18463.5, 11850.9);\n    polygon.ps[3] = Point(18463.5, 11755.9);\n    new ShapeRef(router, polygon, 1926);\n\n    // shapeRef1927\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8351.52, 435.265);\n    polygon.ps[1] = Point(8351.52, 479.96);\n    polygon.ps[2] = Point(8293.29, 479.96);\n    polygon.ps[3] = Point(8293.29, 435.265);\n    new ShapeRef(router, polygon, 1927);\n\n    // shapeRef1928\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(10894.7, 5620.4);\n    polygon.ps[1] = Point(10894.7, 5660.4);\n    polygon.ps[2] = Point(10819.2, 5660.4);\n    polygon.ps[3] = Point(10819.2, 5620.4);\n    new ShapeRef(router, polygon, 1928);\n\n    // shapeRef1929\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(11240.7, 4291.11);\n    polygon.ps[1] = Point(11240.7, 4351.11);\n    polygon.ps[2] = Point(11185.7, 4351.11);\n    polygon.ps[3] = Point(11185.7, 4291.11);\n    new ShapeRef(router, polygon, 1929);\n\n    // shapeRef1930\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(11296.4, 4454.71);\n    polygon.ps[1] = Point(11296.4, 4499.4);\n    polygon.ps[2] = Point(11238.2, 4499.4);\n    polygon.ps[3] = Point(11238.2, 4454.71);\n    new ShapeRef(router, polygon, 1930);\n\n    // shapeRef1931\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(11238.2, 4454.71);\n    polygon.ps[1] = Point(11238.2, 4499.4);\n    polygon.ps[2] = Point(11180, 4499.4);\n    polygon.ps[3] = Point(11180, 4454.71);\n    new ShapeRef(router, polygon, 1931);\n\n    // shapeRef1932\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(11240.7, 4519.4);\n    polygon.ps[1] = Point(11240.7, 4579.4);\n    polygon.ps[2] = Point(11185.7, 4579.4);\n    polygon.ps[3] = Point(11185.7, 4519.4);\n    new ShapeRef(router, polygon, 1932);\n\n    // shapeRef1933\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(14650.5, 6576.51);\n    polygon.ps[1] = Point(14650.5, 6636.51);\n    polygon.ps[2] = Point(14595.5, 6636.51);\n    polygon.ps[3] = Point(14595.5, 6576.51);\n    new ShapeRef(router, polygon, 1933);\n\n    // shapeRef1934\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(5651.1, 4575.4);\n    polygon.ps[1] = Point(5651.1, 4633.63);\n    polygon.ps[2] = Point(5606.4, 4633.63);\n    polygon.ps[3] = Point(5606.4, 4575.4);\n    new ShapeRef(router, polygon, 1934);\n\n    // shapeRef1935\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(18322, 8509.49);\n    polygon.ps[1] = Point(18322, 8549.49);\n    polygon.ps[2] = Point(18246.5, 8549.49);\n    polygon.ps[3] = Point(18246.5, 8509.49);\n    new ShapeRef(router, polygon, 1935);\n\n    // shapeRef1936\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(10596.3, 10692.3);\n    polygon.ps[1] = Point(10596.3, 10738.5);\n    polygon.ps[2] = Point(10512.2, 10738.5);\n    polygon.ps[3] = Point(10512.2, 10692.3);\n    new ShapeRef(router, polygon, 1936);\n\n    // shapeRef1937\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(10106, 10334.5);\n    polygon.ps[1] = Point(10106, 10374.5);\n    polygon.ps[2] = Point(10030.5, 10374.5);\n    polygon.ps[3] = Point(10030.5, 10334.5);\n    new ShapeRef(router, polygon, 1937);\n\n    // shapeRef1938\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8684.29, 11305.2);\n    polygon.ps[1] = Point(8684.29, 11376.8);\n    polygon.ps[2] = Point(8623.73, 11376.8);\n    polygon.ps[3] = Point(8623.73, 11305.2);\n    new ShapeRef(router, polygon, 1938);\n\n    // shapeRef1939\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(7953.29, 11013.6);\n    polygon.ps[1] = Point(7953.29, 11071.9);\n    polygon.ps[2] = Point(7908.6, 11071.9);\n    polygon.ps[3] = Point(7908.6, 11013.6);\n    new ShapeRef(router, polygon, 1939);\n\n    // shapeRef1940\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(6637.6, 7577.29);\n    polygon.ps[1] = Point(6637.6, 7617.29);\n    polygon.ps[2] = Point(6562.1, 7617.29);\n    polygon.ps[3] = Point(6562.1, 7577.29);\n    new ShapeRef(router, polygon, 1940);\n\n    // shapeRef1941\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(11431.6, 11562.9);\n    polygon.ps[1] = Point(11431.6, 11622.9);\n    polygon.ps[2] = Point(11376.6, 11622.9);\n    polygon.ps[3] = Point(11376.6, 11562.9);\n    new ShapeRef(router, polygon, 1941);\n\n    // shapeRef1942\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(16069.1, 11642.9);\n    polygon.ps[1] = Point(16069.1, 11702.9);\n    polygon.ps[2] = Point(16014.1, 11702.9);\n    polygon.ps[3] = Point(16014.1, 11642.9);\n    new ShapeRef(router, polygon, 1942);\n\n    // shapeRef1943\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(16152.1, 11510.2);\n    polygon.ps[1] = Point(16152.1, 11550.2);\n    polygon.ps[2] = Point(16076.6, 11550.2);\n    polygon.ps[3] = Point(16076.6, 11510.2);\n    new ShapeRef(router, polygon, 1943);\n\n    // shapeRef1944\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(14202, 12435.7);\n    polygon.ps[1] = Point(14202, 12495.7);\n    polygon.ps[2] = Point(14147, 12495.7);\n    polygon.ps[3] = Point(14147, 12435.7);\n    new ShapeRef(router, polygon, 1944);\n\n    // shapeRef1945\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9491.59, 7301.18);\n    polygon.ps[1] = Point(9491.59, 7359.4);\n    polygon.ps[2] = Point(9446.9, 7359.4);\n    polygon.ps[3] = Point(9446.9, 7301.18);\n    new ShapeRef(router, polygon, 1945);\n\n    // shapeRef1946\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9491.59, 7359.4);\n    polygon.ps[1] = Point(9491.59, 7417.63);\n    polygon.ps[2] = Point(9446.9, 7417.63);\n    polygon.ps[3] = Point(9446.9, 7359.4);\n    new ShapeRef(router, polygon, 1946);\n\n    // shapeRef1947\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9587.09, 7321.9);\n    polygon.ps[1] = Point(9587.09, 7361.9);\n    polygon.ps[2] = Point(9511.59, 7361.9);\n    polygon.ps[3] = Point(9511.59, 7321.9);\n    new ShapeRef(router, polygon, 1947);\n\n    // shapeRef1948\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(16066.6, 11804.9);\n    polygon.ps[1] = Point(16066.6, 11851.1);\n    polygon.ps[2] = Point(15982.5, 11851.1);\n    polygon.ps[3] = Point(15982.5, 11804.9);\n    new ShapeRef(router, polygon, 1948);\n\n    // shapeRef1949\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(15138.3, 10830.5);\n    polygon.ps[1] = Point(15138.3, 10914.6);\n    polygon.ps[2] = Point(15092.1, 10914.6);\n    polygon.ps[3] = Point(15092.1, 10830.5);\n    new ShapeRef(router, polygon, 1949);\n\n    // shapeRef1950\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(15233.8, 10912.1);\n    polygon.ps[1] = Point(15233.8, 10952.1);\n    polygon.ps[2] = Point(15158.3, 10952.1);\n    polygon.ps[3] = Point(15158.3, 10912.1);\n    new ShapeRef(router, polygon, 1950);\n\n    // shapeRef1951\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(649, 64.1679);\n    polygon.ps[1] = Point(649, 148.265);\n    polygon.ps[2] = Point(602.765, 148.265);\n    polygon.ps[3] = Point(602.765, 64.1679);\n    new ShapeRef(router, polygon, 1951);\n\n    // shapeRef1952\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(15233.8, 11856.4);\n    polygon.ps[1] = Point(15233.8, 11896.4);\n    polygon.ps[2] = Point(15158.3, 11896.4);\n    polygon.ps[3] = Point(15158.3, 11856.4);\n    new ShapeRef(router, polygon, 1952);\n\n    // shapeRef1953\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(7982.79, 4405.9);\n    polygon.ps[1] = Point(7982.79, 4445.9);\n    polygon.ps[2] = Point(7907.29, 4445.9);\n    polygon.ps[3] = Point(7907.29, 4405.9);\n    new ShapeRef(router, polygon, 1953);\n\n    // shapeRef1954\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(7693.6, 3005.79);\n    polygon.ps[1] = Point(7693.6, 3045.79);\n    polygon.ps[2] = Point(7618.1, 3045.79);\n    polygon.ps[3] = Point(7618.1, 3005.79);\n    new ShapeRef(router, polygon, 1954);\n\n    // shapeRef1955\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(10035.2, 9938.52);\n    polygon.ps[1] = Point(10035.2, 9978.52);\n    polygon.ps[2] = Point(9959.69, 9978.52);\n    polygon.ps[3] = Point(9959.69, 9938.52);\n    new ShapeRef(router, polygon, 1955);\n\n    // shapeRef1956\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(12975, 12388.7);\n    polygon.ps[1] = Point(12975, 12448.7);\n    polygon.ps[2] = Point(12920, 12448.7);\n    polygon.ps[3] = Point(12920, 12388.7);\n    new ShapeRef(router, polygon, 1956);\n\n    // shapeRef1957\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(7946.29, 7118.4);\n    polygon.ps[1] = Point(7946.29, 7138.4);\n    polygon.ps[2] = Point(7914.29, 7138.4);\n    polygon.ps[3] = Point(7914.29, 7118.4);\n    new ShapeRef(router, polygon, 1957);\n\n    // shapeRef1958\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9154.59, 6141.51);\n    polygon.ps[1] = Point(9154.59, 6161.51);\n    polygon.ps[2] = Point(9122.59, 6161.51);\n    polygon.ps[3] = Point(9122.59, 6141.51);\n    new ShapeRef(router, polygon, 1958);\n\n    // shapeRef1959\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9833.69, 7151.4);\n    polygon.ps[1] = Point(9833.69, 7171.4);\n    polygon.ps[2] = Point(9801.69, 7171.4);\n    polygon.ps[3] = Point(9801.69, 7151.4);\n    new ShapeRef(router, polygon, 1959);\n\n    // shapeRef1960\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(10466.9, 7860.79);\n    polygon.ps[1] = Point(10466.9, 7892.79);\n    polygon.ps[2] = Point(10446.9, 7892.79);\n    polygon.ps[3] = Point(10446.9, 7860.79);\n    new ShapeRef(router, polygon, 1960);\n\n    // shapeRef1961\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(7585.1, 9065.42);\n    polygon.ps[1] = Point(7585.1, 9097.42);\n    polygon.ps[2] = Point(7565.1, 9097.42);\n    polygon.ps[3] = Point(7565.1, 9065.42);\n    new ShapeRef(router, polygon, 1961);\n\n    // shapeRef1962\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(15249.5, 1330.29);\n    polygon.ps[1] = Point(15249.5, 1362.29);\n    polygon.ps[2] = Point(15229.5, 1362.29);\n    polygon.ps[3] = Point(15229.5, 1330.29);\n    new ShapeRef(router, polygon, 1962);\n\n    // shapeRef1963\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9385.59, 9632.42);\n    polygon.ps[1] = Point(9385.59, 9652.42);\n    polygon.ps[2] = Point(9353.59, 9652.42);\n    polygon.ps[3] = Point(9353.59, 9632.42);\n    new ShapeRef(router, polygon, 1963);\n\n    // shapeRef1964\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(7519.1, 7992.79);\n    polygon.ps[1] = Point(7519.1, 8024.79);\n    polygon.ps[2] = Point(7499.1, 8024.79);\n    polygon.ps[3] = Point(7499.1, 7992.79);\n    new ShapeRef(router, polygon, 1964);\n\n    // shapeRef1965\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(10687.2, 8563.99);\n    polygon.ps[1] = Point(10687.2, 8595.99);\n    polygon.ps[2] = Point(10667.2, 8595.99);\n    polygon.ps[3] = Point(10667.2, 8563.99);\n    new ShapeRef(router, polygon, 1965);\n\n    // shapeRef1966\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(10522.2, 9131.42);\n    polygon.ps[1] = Point(10522.2, 9163.42);\n    polygon.ps[2] = Point(10502.2, 9163.42);\n    polygon.ps[3] = Point(10502.2, 9131.42);\n    new ShapeRef(router, polygon, 1966);\n\n    // shapeRef1967\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9062.99, 8332.99);\n    polygon.ps[1] = Point(9062.99, 8364.99);\n    polygon.ps[2] = Point(9042.99, 8364.99);\n    polygon.ps[3] = Point(9042.99, 8332.99);\n    new ShapeRef(router, polygon, 1967);\n\n    // shapeRef1968\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8845.89, 4625.4);\n    polygon.ps[1] = Point(8845.89, 4657.4);\n    polygon.ps[2] = Point(8825.89, 4657.4);\n    polygon.ps[3] = Point(8825.89, 4625.4);\n    new ShapeRef(router, polygon, 1968);\n\n    // shapeRef1969\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8845.89, 3945.51);\n    polygon.ps[1] = Point(8845.89, 3977.51);\n    polygon.ps[2] = Point(8825.89, 3977.51);\n    polygon.ps[3] = Point(8825.89, 3945.51);\n    new ShapeRef(router, polygon, 1969);\n\n    // shapeRef1970\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9352.59, 5502.67);\n    polygon.ps[1] = Point(9352.59, 5522.67);\n    polygon.ps[2] = Point(9320.59, 5522.67);\n    polygon.ps[3] = Point(9320.59, 5502.67);\n    new ShapeRef(router, polygon, 1970);\n\n    // shapeRef1971\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8845.89, 3417.51);\n    polygon.ps[1] = Point(8845.89, 3449.51);\n    polygon.ps[2] = Point(8825.89, 3449.51);\n    polygon.ps[3] = Point(8825.89, 3417.51);\n    new ShapeRef(router, polygon, 1971);\n\n    // shapeRef1972\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8845.89, 2893.29);\n    polygon.ps[1] = Point(8845.89, 2925.29);\n    polygon.ps[2] = Point(8825.89, 2925.29);\n    polygon.ps[3] = Point(8825.89, 2893.29);\n    new ShapeRef(router, polygon, 1972);\n\n    // shapeRef1973\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8845.89, 2365.29);\n    polygon.ps[1] = Point(8845.89, 2397.29);\n    polygon.ps[2] = Point(8825.89, 2397.29);\n    polygon.ps[3] = Point(8825.89, 2365.29);\n    new ShapeRef(router, polygon, 1973);\n\n    // shapeRef1974\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8441.29, 2098.29);\n    polygon.ps[1] = Point(8441.29, 2118.29);\n    polygon.ps[2] = Point(8409.29, 2118.29);\n    polygon.ps[3] = Point(8409.29, 2098.29);\n    new ShapeRef(router, polygon, 1974);\n\n    // shapeRef1975\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8441.29, 2140.29);\n    polygon.ps[1] = Point(8441.29, 2160.29);\n    polygon.ps[2] = Point(8409.29, 2160.29);\n    polygon.ps[3] = Point(8409.29, 2140.29);\n    new ShapeRef(router, polygon, 1975);\n\n    // shapeRef1976\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(15390.5, 1336.29);\n    polygon.ps[1] = Point(15390.5, 1356.29);\n    polygon.ps[2] = Point(15358.5, 1356.29);\n    polygon.ps[3] = Point(15358.5, 1336.29);\n    new ShapeRef(router, polygon, 1976);\n\n    // shapeRef1977\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8468.29, 1099.29);\n    polygon.ps[1] = Point(8468.29, 1131.29);\n    polygon.ps[2] = Point(8448.29, 1131.29);\n    polygon.ps[3] = Point(8448.29, 1099.29);\n    new ShapeRef(router, polygon, 1977);\n\n    // shapeRef1978\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(15131.3, 1336.29);\n    polygon.ps[1] = Point(15131.3, 1356.29);\n    polygon.ps[2] = Point(15099.3, 1356.29);\n    polygon.ps[3] = Point(15099.3, 1336.29);\n    new ShapeRef(router, polygon, 1978);\n\n    // shapeRef1979\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9002.99, 798.091);\n    polygon.ps[1] = Point(9002.99, 818.091);\n    polygon.ps[2] = Point(8970.99, 818.091);\n    polygon.ps[3] = Point(8970.99, 798.091);\n    new ShapeRef(router, polygon, 1979);\n\n    // shapeRef1980\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9002.99, 1105.29);\n    polygon.ps[1] = Point(9002.99, 1125.29);\n    polygon.ps[2] = Point(8970.99, 1125.29);\n    polygon.ps[3] = Point(8970.99, 1105.29);\n    new ShapeRef(router, polygon, 1980);\n\n    // shapeRef1981\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8006.29, 967.285);\n    polygon.ps[1] = Point(8006.29, 999.285);\n    polygon.ps[2] = Point(7986.29, 999.285);\n    polygon.ps[3] = Point(7986.29, 967.285);\n    new ShapeRef(router, polygon, 1981);\n\n    // shapeRef1982\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(15493.3, 1336.29);\n    polygon.ps[1] = Point(15493.3, 1356.29);\n    polygon.ps[2] = Point(15461.3, 1356.29);\n    polygon.ps[3] = Point(15461.3, 1336.29);\n    new ShapeRef(router, polygon, 1982);\n\n    // shapeRef1983\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9767.69, 798.091);\n    polygon.ps[1] = Point(9767.69, 818.091);\n    polygon.ps[2] = Point(9735.69, 818.091);\n    polygon.ps[3] = Point(9735.69, 798.091);\n    new ShapeRef(router, polygon, 1983);\n\n    // shapeRef1984\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(10792.2, 798.091);\n    polygon.ps[1] = Point(10792.2, 818.091);\n    polygon.ps[2] = Point(10760.2, 818.091);\n    polygon.ps[3] = Point(10760.2, 798.091);\n    new ShapeRef(router, polygon, 1984);\n\n    // shapeRef1985\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(10984.2, 1099.29);\n    polygon.ps[1] = Point(10984.2, 1131.29);\n    polygon.ps[2] = Point(10964.2, 1131.29);\n    polygon.ps[3] = Point(10964.2, 1099.29);\n    new ShapeRef(router, polygon, 1985);\n\n    // shapeRef1986\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(10792.2, 1270.29);\n    polygon.ps[1] = Point(10792.2, 1290.29);\n    polygon.ps[2] = Point(10760.2, 1290.29);\n    polygon.ps[3] = Point(10760.2, 1270.29);\n    new ShapeRef(router, polygon, 1986);\n\n    // shapeRef1987\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9385.59, 1270.29);\n    polygon.ps[1] = Point(9385.59, 1290.29);\n    polygon.ps[2] = Point(9353.59, 1290.29);\n    polygon.ps[3] = Point(9353.59, 1270.29);\n    new ShapeRef(router, polygon, 1987);\n\n    // shapeRef1988\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9662.69, 1693.29);\n    polygon.ps[1] = Point(9662.69, 1725.29);\n    polygon.ps[2] = Point(9642.69, 1725.29);\n    polygon.ps[3] = Point(9642.69, 1693.29);\n    new ShapeRef(router, polygon, 1988);\n\n    // shapeRef1989\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9319.59, 1999.29);\n    polygon.ps[1] = Point(9319.59, 2019.29);\n    polygon.ps[2] = Point(9287.59, 2019.29);\n    polygon.ps[3] = Point(9287.59, 1999.29);\n    new ShapeRef(router, polygon, 1989);\n\n    // shapeRef1990\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(10984.2, 1462.29);\n    polygon.ps[1] = Point(10984.2, 1494.29);\n    polygon.ps[2] = Point(10964.2, 1494.29);\n    polygon.ps[3] = Point(10964.2, 1462.29);\n    new ShapeRef(router, polygon, 1990);\n\n    // shapeRef1991\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(11155.2, 1633.29);\n    polygon.ps[1] = Point(11155.2, 1653.29);\n    polygon.ps[2] = Point(11123.2, 1653.29);\n    polygon.ps[3] = Point(11123.2, 1633.29);\n    new ShapeRef(router, polygon, 1991);\n\n    // shapeRef1992\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(10984.2, 594.091);\n    polygon.ps[1] = Point(10984.2, 626.091);\n    polygon.ps[2] = Point(10964.2, 626.091);\n    polygon.ps[3] = Point(10964.2, 594.091);\n    new ShapeRef(router, polygon, 1992);\n\n    // shapeRef1993\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(10561.2, 4351.11);\n    polygon.ps[1] = Point(10561.2, 4371.11);\n    polygon.ps[2] = Point(10529.2, 4371.11);\n    polygon.ps[3] = Point(10529.2, 4351.11);\n    new ShapeRef(router, polygon, 1993);\n\n    // shapeRef1994\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(10957.2, 4351.11);\n    polygon.ps[1] = Point(10957.2, 4371.11);\n    polygon.ps[2] = Point(10925.2, 4371.11);\n    polygon.ps[3] = Point(10925.2, 4351.11);\n    new ShapeRef(router, polygon, 1994);\n\n    // shapeRef1995\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(11610.1, 4351.11);\n    polygon.ps[1] = Point(11610.1, 4371.11);\n    polygon.ps[2] = Point(11578.1, 4371.11);\n    polygon.ps[3] = Point(11578.1, 4351.11);\n    new ShapeRef(router, polygon, 1995);\n\n    // shapeRef1996\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(10627.2, 4499.4);\n    polygon.ps[1] = Point(10627.2, 4519.4);\n    polygon.ps[2] = Point(10595.2, 4519.4);\n    polygon.ps[3] = Point(10595.2, 4499.4);\n    new ShapeRef(router, polygon, 1996);\n\n    // shapeRef1997\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(12237.1, 4351.11);\n    polygon.ps[1] = Point(12237.1, 4371.11);\n    polygon.ps[2] = Point(12205.1, 4371.11);\n    polygon.ps[3] = Point(12205.1, 4351.11);\n    new ShapeRef(router, polygon, 1997);\n\n    // shapeRef1998\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(12541.5, 4559.4);\n    polygon.ps[1] = Point(12541.5, 4591.4);\n    polygon.ps[2] = Point(12521.5, 4591.4);\n    polygon.ps[3] = Point(12521.5, 4559.4);\n    new ShapeRef(router, polygon, 1998);\n\n    // shapeRef1999\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(12541.5, 4955.4);\n    polygon.ps[1] = Point(12541.5, 4987.4);\n    polygon.ps[2] = Point(12521.5, 4987.4);\n    polygon.ps[3] = Point(12521.5, 4955.4);\n    new ShapeRef(router, polygon, 1999);\n\n    // shapeRef2000\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(12541.5, 5298.67);\n    polygon.ps[1] = Point(12541.5, 5330.67);\n    polygon.ps[2] = Point(12521.5, 5330.67);\n    polygon.ps[3] = Point(12521.5, 5298.67);\n    new ShapeRef(router, polygon, 2000);\n\n    // shapeRef2001\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(12938.5, 4499.4);\n    polygon.ps[1] = Point(12938.5, 4519.4);\n    polygon.ps[2] = Point(12906.5, 4519.4);\n    polygon.ps[3] = Point(12906.5, 4499.4);\n    new ShapeRef(router, polygon, 2001);\n\n    // shapeRef2002\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(13276, 3846.51);\n    polygon.ps[1] = Point(13276, 3878.51);\n    polygon.ps[2] = Point(13256, 3878.51);\n    polygon.ps[3] = Point(13256, 3846.51);\n    new ShapeRef(router, polygon, 2002);\n\n    // shapeRef2003\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(12541.5, 3978.51);\n    polygon.ps[1] = Point(12541.5, 4010.51);\n    polygon.ps[2] = Point(12521.5, 4010.51);\n    polygon.ps[3] = Point(12521.5, 3978.51);\n    new ShapeRef(router, polygon, 2003);\n\n    // shapeRef2004\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(12541.5, 3516.51);\n    polygon.ps[1] = Point(12541.5, 3548.51);\n    polygon.ps[2] = Point(12521.5, 3548.51);\n    polygon.ps[3] = Point(12521.5, 3516.51);\n    new ShapeRef(router, polygon, 2004);\n\n    // shapeRef2005\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(12541.5, 3025.29);\n    polygon.ps[1] = Point(12541.5, 3057.29);\n    polygon.ps[2] = Point(12521.5, 3057.29);\n    polygon.ps[3] = Point(12521.5, 3025.29);\n    new ShapeRef(router, polygon, 2005);\n\n    // shapeRef2006\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(12541.5, 2266.29);\n    polygon.ps[1] = Point(12541.5, 2298.29);\n    polygon.ps[2] = Point(12521.5, 2298.29);\n    polygon.ps[3] = Point(12521.5, 2266.29);\n    new ShapeRef(router, polygon, 2006);\n\n    // shapeRef2007\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(12171.1, 1834.29);\n    polygon.ps[1] = Point(12171.1, 1854.29);\n    polygon.ps[2] = Point(12139.1, 1854.29);\n    polygon.ps[3] = Point(12139.1, 1834.29);\n    new ShapeRef(router, polygon, 2007);\n\n    // shapeRef2008\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(12000.1, 1726.29);\n    polygon.ps[1] = Point(12000.1, 1758.29);\n    polygon.ps[2] = Point(11980.1, 1758.29);\n    polygon.ps[3] = Point(11980.1, 1726.29);\n    new ShapeRef(router, polygon, 2008);\n\n    // shapeRef2009\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(12171.1, 1732.29);\n    polygon.ps[1] = Point(12171.1, 1752.29);\n    polygon.ps[2] = Point(12139.1, 1752.29);\n    polygon.ps[3] = Point(12139.1, 1732.29);\n    new ShapeRef(router, polygon, 2009);\n\n    // shapeRef2010\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(13882, 8431.99);\n    polygon.ps[1] = Point(13882, 8463.99);\n    polygon.ps[2] = Point(13862, 8463.99);\n    polygon.ps[3] = Point(13862, 8431.99);\n    new ShapeRef(router, polygon, 2010);\n\n    // shapeRef2011\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(11934.1, 7827.79);\n    polygon.ps[1] = Point(11934.1, 7859.79);\n    polygon.ps[2] = Point(11914.1, 7859.79);\n    polygon.ps[3] = Point(11914.1, 7827.79);\n    new ShapeRef(router, polygon, 2011);\n\n    // shapeRef2012\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(15878.6, 8431.99);\n    polygon.ps[1] = Point(15878.6, 8463.99);\n    polygon.ps[2] = Point(15858.6, 8463.99);\n    polygon.ps[3] = Point(15858.6, 8431.99);\n    new ShapeRef(router, polygon, 2012);\n\n    // shapeRef2013\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(16732.8, 8398.99);\n    polygon.ps[1] = Point(16732.8, 8430.99);\n    polygon.ps[2] = Point(16712.8, 8430.99);\n    polygon.ps[3] = Point(16712.8, 8398.99);\n    new ShapeRef(router, polygon, 2013);\n\n    // shapeRef2014\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8667.29, 4182.51);\n    polygon.ps[1] = Point(8667.29, 4202.51);\n    polygon.ps[2] = Point(8635.29, 4202.51);\n    polygon.ps[3] = Point(8635.29, 4182.51);\n    new ShapeRef(router, polygon, 2014);\n\n    // shapeRef2015\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(10126, 9692.42);\n    polygon.ps[1] = Point(10126, 9724.42);\n    polygon.ps[2] = Point(10106, 9724.42);\n    polygon.ps[3] = Point(10106, 9692.42);\n    new ShapeRef(router, polygon, 2015);\n\n    // shapeRef2016\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(15390.5, 1171.29);\n    polygon.ps[1] = Point(15390.5, 1191.29);\n    polygon.ps[2] = Point(15358.5, 1191.29);\n    polygon.ps[3] = Point(15358.5, 1171.29);\n    new ShapeRef(router, polygon, 2016);\n\n    // shapeRef2017\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(13618, 6663.51);\n    polygon.ps[1] = Point(13618, 6695.51);\n    polygon.ps[2] = Point(13598, 6695.51);\n    polygon.ps[3] = Point(13598, 6663.51);\n    new ShapeRef(router, polygon, 2017);\n\n    // shapeRef2018\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(10819.2, 7310.4);\n    polygon.ps[1] = Point(10819.2, 7342.4);\n    polygon.ps[2] = Point(10799.2, 7342.4);\n    polygon.ps[3] = Point(10799.2, 7310.4);\n    new ShapeRef(router, polygon, 2018);\n\n    // shapeRef2019\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(10819.2, 7794.79);\n    polygon.ps[1] = Point(10819.2, 7826.79);\n    polygon.ps[2] = Point(10799.2, 7826.79);\n    polygon.ps[3] = Point(10799.2, 7794.79);\n    new ShapeRef(router, polygon, 2019);\n\n    // shapeRef2020\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9860.69, 6399.51);\n    polygon.ps[1] = Point(9860.69, 6431.51);\n    polygon.ps[2] = Point(9840.69, 6431.51);\n    polygon.ps[3] = Point(9840.69, 6399.51);\n    new ShapeRef(router, polygon, 2020);\n\n    // shapeRef2021\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(11254.2, 8863.22);\n    polygon.ps[1] = Point(11254.2, 8883.22);\n    polygon.ps[2] = Point(11222.2, 8883.22);\n    polygon.ps[3] = Point(11222.2, 8863.22);\n    new ShapeRef(router, polygon, 2021);\n\n    // shapeRef2022\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(12336.1, 8863.22);\n    polygon.ps[1] = Point(12336.1, 8883.22);\n    polygon.ps[2] = Point(12304.1, 8883.22);\n    polygon.ps[3] = Point(12304.1, 8863.22);\n    new ShapeRef(router, polygon, 2022);\n\n    // shapeRef2023\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9035.99, 3423.51);\n    polygon.ps[1] = Point(9035.99, 3443.51);\n    polygon.ps[2] = Point(9003.99, 3443.51);\n    polygon.ps[3] = Point(9003.99, 3423.51);\n    new ShapeRef(router, polygon, 2023);\n\n    // shapeRef2024\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(7492.1, 3555.51);\n    polygon.ps[1] = Point(7492.1, 3575.51);\n    polygon.ps[2] = Point(7460.1, 3575.51);\n    polygon.ps[3] = Point(7460.1, 3555.51);\n    new ShapeRef(router, polygon, 2024);\n\n    // shapeRef2025\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(6799.1, 3555.51);\n    polygon.ps[1] = Point(6799.1, 3575.51);\n    polygon.ps[2] = Point(6767.1, 3575.51);\n    polygon.ps[3] = Point(6767.1, 3555.51);\n    new ShapeRef(router, polygon, 2025);\n\n    // shapeRef2026\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(6205.1, 3555.51);\n    polygon.ps[1] = Point(6205.1, 3575.51);\n    polygon.ps[2] = Point(6173.1, 3575.51);\n    polygon.ps[3] = Point(6173.1, 3555.51);\n    new ShapeRef(router, polygon, 2026);\n\n    // shapeRef2027\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(5710.1, 3555.51);\n    polygon.ps[1] = Point(5710.1, 3575.51);\n    polygon.ps[2] = Point(5678.1, 3575.51);\n    polygon.ps[3] = Point(5678.1, 3555.51);\n    new ShapeRef(router, polygon, 2027);\n\n    // shapeRef2028\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(5322, 3813.51);\n    polygon.ps[1] = Point(5322, 3845.51);\n    polygon.ps[2] = Point(5302, 3845.51);\n    polygon.ps[3] = Point(5302, 3813.51);\n    new ShapeRef(router, polygon, 2028);\n\n    // shapeRef2029\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(5322, 4559.4);\n    polygon.ps[1] = Point(5322, 4591.4);\n    polygon.ps[2] = Point(5302, 4591.4);\n    polygon.ps[3] = Point(5302, 4559.4);\n    new ShapeRef(router, polygon, 2029);\n\n    // shapeRef2030\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(5322, 5331.67);\n    polygon.ps[1] = Point(5322, 5363.67);\n    polygon.ps[2] = Point(5302, 5363.67);\n    polygon.ps[3] = Point(5302, 5331.67);\n    new ShapeRef(router, polygon, 2030);\n\n    // shapeRef2031\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(5322, 5153.4);\n    polygon.ps[1] = Point(5322, 5185.4);\n    polygon.ps[2] = Point(5302, 5185.4);\n    polygon.ps[3] = Point(5302, 5153.4);\n    new ShapeRef(router, polygon, 2031);\n\n    // shapeRef2032\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8408.29, 5502.67);\n    polygon.ps[1] = Point(8408.29, 5522.67);\n    polygon.ps[2] = Point(8376.29, 5522.67);\n    polygon.ps[3] = Point(8376.29, 5502.67);\n    new ShapeRef(router, polygon, 2032);\n\n    // shapeRef2033\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(5512.1, 5337.67);\n    polygon.ps[1] = Point(5512.1, 5357.67);\n    polygon.ps[2] = Point(5480.1, 5357.67);\n    polygon.ps[3] = Point(5480.1, 5337.67);\n    new ShapeRef(router, polygon, 2033);\n\n    // shapeRef2034\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(4965, 5954.59);\n    polygon.ps[1] = Point(4965, 5974.59);\n    polygon.ps[2] = Point(4933, 5974.59);\n    polygon.ps[3] = Point(4933, 5954.59);\n    new ShapeRef(router, polygon, 2034);\n\n    // shapeRef2035\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(4959, 6040.29);\n    polygon.ps[1] = Point(4959, 6072.29);\n    polygon.ps[2] = Point(4939, 6072.29);\n    polygon.ps[3] = Point(4939, 6040.29);\n    new ShapeRef(router, polygon, 2035);\n\n    // shapeRef2036\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(4959, 7794.79);\n    polygon.ps[1] = Point(4959, 7826.79);\n    polygon.ps[2] = Point(4939, 7826.79);\n    polygon.ps[3] = Point(4939, 7794.79);\n    new ShapeRef(router, polygon, 2036);\n\n    // shapeRef2037\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(4959, 8365.99);\n    polygon.ps[1] = Point(4959, 8397.99);\n    polygon.ps[2] = Point(4939, 8397.99);\n    polygon.ps[3] = Point(4939, 8365.99);\n    new ShapeRef(router, polygon, 2037);\n\n    // shapeRef2038\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(4959, 8791.22);\n    polygon.ps[1] = Point(4959, 8823.22);\n    polygon.ps[2] = Point(4939, 8823.22);\n    polygon.ps[3] = Point(4939, 8791.22);\n    new ShapeRef(router, polygon, 2038);\n\n    // shapeRef2039\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(4959, 9296.42);\n    polygon.ps[1] = Point(4959, 9328.42);\n    polygon.ps[2] = Point(4939, 9328.42);\n    polygon.ps[3] = Point(4939, 9296.42);\n    new ShapeRef(router, polygon, 2039);\n\n    // shapeRef2040\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(4299, 9861.02);\n    polygon.ps[1] = Point(4299, 9893.02);\n    polygon.ps[2] = Point(4279, 9893.02);\n    polygon.ps[3] = Point(4279, 9861.02);\n    new ShapeRef(router, polygon, 2040);\n\n    // shapeRef2041\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(4767, 10428);\n    polygon.ps[1] = Point(4767, 10448);\n    polygon.ps[2] = Point(4735, 10448);\n    polygon.ps[3] = Point(4735, 10428);\n    new ShapeRef(router, polygon, 2041);\n\n    // shapeRef2042\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(4563, 10567.3);\n    polygon.ps[1] = Point(4563, 10599.3);\n    polygon.ps[2] = Point(4543, 10599.3);\n    polygon.ps[3] = Point(4543, 10567.3);\n    new ShapeRef(router, polygon, 2042);\n\n    // shapeRef2043\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(11373.1, 1462.29);\n    polygon.ps[1] = Point(11373.1, 1494.29);\n    polygon.ps[2] = Point(11353.1, 1494.29);\n    polygon.ps[3] = Point(11353.1, 1462.29);\n    new ShapeRef(router, polygon, 2043);\n\n    // shapeRef2044\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(11373.1, 1099.29);\n    polygon.ps[1] = Point(11373.1, 1131.29);\n    polygon.ps[2] = Point(11353.1, 1131.29);\n    polygon.ps[3] = Point(11353.1, 1099.29);\n    new ShapeRef(router, polygon, 2044);\n\n    // shapeRef2045\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(11373.1, 594.091);\n    polygon.ps[1] = Point(11373.1, 626.091);\n    polygon.ps[2] = Point(11353.1, 626.091);\n    polygon.ps[3] = Point(11353.1, 594.091);\n    new ShapeRef(router, polygon, 2045);\n\n    // shapeRef2046\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(11544.1, 448.265);\n    polygon.ps[1] = Point(11544.1, 468.265);\n    polygon.ps[2] = Point(11512.1, 468.265);\n    polygon.ps[3] = Point(11512.1, 448.265);\n    new ShapeRef(router, polygon, 2046);\n\n    // shapeRef2047\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(11973.1, 448.265);\n    polygon.ps[1] = Point(11973.1, 468.265);\n    polygon.ps[2] = Point(11941.1, 468.265);\n    polygon.ps[3] = Point(11941.1, 448.265);\n    new ShapeRef(router, polygon, 2047);\n\n    // shapeRef2048\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(15002.9, 1336.29);\n    polygon.ps[1] = Point(15002.9, 1356.29);\n    polygon.ps[2] = Point(14970.9, 1356.29);\n    polygon.ps[3] = Point(14970.9, 1336.29);\n    new ShapeRef(router, polygon, 2048);\n\n    // shapeRef2049\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(12740.5, 567.091);\n    polygon.ps[1] = Point(12740.5, 587.091);\n    polygon.ps[2] = Point(12708.5, 587.091);\n    polygon.ps[3] = Point(12708.5, 567.091);\n    new ShapeRef(router, polygon, 2049);\n\n    // shapeRef2050\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(13216, 448.265);\n    polygon.ps[1] = Point(13216, 468.265);\n    polygon.ps[2] = Point(13184, 468.265);\n    polygon.ps[3] = Point(13184, 448.265);\n    new ShapeRef(router, polygon, 2050);\n\n    // shapeRef2051\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(13888, 448.265);\n    polygon.ps[1] = Point(13888, 468.265);\n    polygon.ps[2] = Point(13856, 468.265);\n    polygon.ps[3] = Point(13856, 448.265);\n    new ShapeRef(router, polygon, 2051);\n\n    // shapeRef2052\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(14350, 448.265);\n    polygon.ps[1] = Point(14350, 468.265);\n    polygon.ps[2] = Point(14318, 468.265);\n    polygon.ps[3] = Point(14318, 448.265);\n    new ShapeRef(router, polygon, 2052);\n\n    // shapeRef2053\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(14812, 448.265);\n    polygon.ps[1] = Point(14812, 468.265);\n    polygon.ps[2] = Point(14780, 468.265);\n    polygon.ps[3] = Point(14780, 448.265);\n    new ShapeRef(router, polygon, 2053);\n\n    // shapeRef2054\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(15653.3, 448.265);\n    polygon.ps[1] = Point(15653.3, 468.265);\n    polygon.ps[2] = Point(15621.3, 468.265);\n    polygon.ps[3] = Point(15621.3, 448.265);\n    new ShapeRef(router, polygon, 2054);\n\n    // shapeRef2055\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(16181.6, 448.265);\n    polygon.ps[1] = Point(16181.6, 468.265);\n    polygon.ps[2] = Point(16149.6, 468.265);\n    polygon.ps[3] = Point(16149.6, 448.265);\n    new ShapeRef(router, polygon, 2055);\n\n    // shapeRef2056\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(16373.6, 792.091);\n    polygon.ps[1] = Point(16373.6, 824.091);\n    polygon.ps[2] = Point(16353.6, 824.091);\n    polygon.ps[3] = Point(16353.6, 792.091);\n    new ShapeRef(router, polygon, 2056);\n\n    // shapeRef2057\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(16175.6, 792.091);\n    polygon.ps[1] = Point(16175.6, 824.091);\n    polygon.ps[2] = Point(16155.6, 824.091);\n    polygon.ps[3] = Point(16155.6, 792.091);\n    new ShapeRef(router, polygon, 2057);\n\n    // shapeRef2058\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(11122.2, 8064.79);\n    polygon.ps[1] = Point(11122.2, 8084.79);\n    polygon.ps[2] = Point(11090.2, 8084.79);\n    polygon.ps[3] = Point(11090.2, 8064.79);\n    new ShapeRef(router, polygon, 2058);\n\n    // shapeRef2059\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(11505.1, 7728.79);\n    polygon.ps[1] = Point(11505.1, 7760.79);\n    polygon.ps[2] = Point(11485.1, 7760.79);\n    polygon.ps[3] = Point(11485.1, 7728.79);\n    new ShapeRef(router, polygon, 2059);\n\n    // shapeRef2060\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(12039.1, 7415.4);\n    polygon.ps[1] = Point(12039.1, 7435.4);\n    polygon.ps[2] = Point(12007.1, 7435.4);\n    polygon.ps[3] = Point(12007.1, 7415.4);\n    new ShapeRef(router, polygon, 2060);\n\n    // shapeRef2061\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(17062.8, 7178.4);\n    polygon.ps[1] = Point(17062.8, 7210.4);\n    polygon.ps[2] = Point(17042.8, 7210.4);\n    polygon.ps[3] = Point(17042.8, 7178.4);\n    new ShapeRef(router, polygon, 2061);\n\n    // shapeRef2062\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(18532, 11850.9);\n    polygon.ps[1] = Point(18532, 11870.9);\n    polygon.ps[2] = Point(18500, 11870.9);\n    polygon.ps[3] = Point(18500, 11850.9);\n    new ShapeRef(router, polygon, 2062);\n\n    // shapeRef2063\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(13282, 8863.22);\n    polygon.ps[1] = Point(13282, 8883.22);\n    polygon.ps[2] = Point(13250, 8883.22);\n    polygon.ps[3] = Point(13250, 8863.22);\n    new ShapeRef(router, polygon, 2063);\n\n    // shapeRef2064\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(10792.2, 448.265);\n    polygon.ps[1] = Point(10792.2, 468.265);\n    polygon.ps[2] = Point(10760.2, 468.265);\n    polygon.ps[3] = Point(10760.2, 448.265);\n    new ShapeRef(router, polygon, 2064);\n\n    // shapeRef2065\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(15620.3, 1336.29);\n    polygon.ps[1] = Point(15620.3, 1356.29);\n    polygon.ps[2] = Point(15588.3, 1356.29);\n    polygon.ps[3] = Point(15588.3, 1336.29);\n    new ShapeRef(router, polygon, 2065);\n\n    // shapeRef2066\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8045.29, 303.265);\n    polygon.ps[1] = Point(8045.29, 323.265);\n    polygon.ps[2] = Point(8013.29, 323.265);\n    polygon.ps[3] = Point(8013.29, 303.265);\n    new ShapeRef(router, polygon, 2066);\n\n    // shapeRef2067\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8309.29, 415.265);\n    polygon.ps[1] = Point(8309.29, 435.265);\n    polygon.ps[2] = Point(8277.29, 435.265);\n    polygon.ps[3] = Point(8277.29, 415.265);\n    new ShapeRef(router, polygon, 2067);\n\n    // shapeRef2068\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(7781.29, 415.265);\n    polygon.ps[1] = Point(7781.29, 435.265);\n    polygon.ps[2] = Point(7749.29, 435.265);\n    polygon.ps[3] = Point(7749.29, 415.265);\n    new ShapeRef(router, polygon, 2068);\n\n    // shapeRef2069\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(6964.1, 415.265);\n    polygon.ps[1] = Point(6964.1, 435.265);\n    polygon.ps[2] = Point(6932.1, 435.265);\n    polygon.ps[3] = Point(6932.1, 415.265);\n    new ShapeRef(router, polygon, 2069);\n\n    // shapeRef2070\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(6337.1, 415.265);\n    polygon.ps[1] = Point(6337.1, 435.265);\n    polygon.ps[2] = Point(6305.1, 435.265);\n    polygon.ps[3] = Point(6305.1, 415.265);\n    new ShapeRef(router, polygon, 2070);\n\n    // shapeRef2071\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(15131.3, 1171.29);\n    polygon.ps[1] = Point(15131.3, 1191.29);\n    polygon.ps[2] = Point(15099.3, 1191.29);\n    polygon.ps[3] = Point(15099.3, 1171.29);\n    new ShapeRef(router, polygon, 2071);\n\n    // shapeRef2072\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(14874.4, 1336.29);\n    polygon.ps[1] = Point(14874.4, 1356.29);\n    polygon.ps[2] = Point(14842.4, 1356.29);\n    polygon.ps[3] = Point(14842.4, 1336.29);\n    new ShapeRef(router, polygon, 2072);\n\n    // shapeRef2073\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(15493.3, 1171.29);\n    polygon.ps[1] = Point(15493.3, 1191.29);\n    polygon.ps[2] = Point(15461.3, 1191.29);\n    polygon.ps[3] = Point(15461.3, 1171.29);\n    new ShapeRef(router, polygon, 2073);\n\n    // shapeRef2074\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(15748.9, 1336.29);\n    polygon.ps[1] = Point(15748.9, 1356.29);\n    polygon.ps[2] = Point(15716.9, 1356.29);\n    polygon.ps[3] = Point(15716.9, 1336.29);\n    new ShapeRef(router, polygon, 2074);\n\n    // shapeRef2075\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(11254.2, 4351.11);\n    polygon.ps[1] = Point(11254.2, 4371.11);\n    polygon.ps[2] = Point(11222.2, 4371.11);\n    polygon.ps[3] = Point(11222.2, 4351.11);\n    new ShapeRef(router, polygon, 2075);\n\n    // shapeRef2076\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(14614, 6778.21);\n    polygon.ps[1] = Point(14614, 6798.21);\n    polygon.ps[2] = Point(14582, 6798.21);\n    polygon.ps[3] = Point(14582, 6778.21);\n    new ShapeRef(router, polygon, 2076);\n\n    // shapeRef2077\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(5671.1, 4559.4);\n    polygon.ps[1] = Point(5671.1, 4591.4);\n    polygon.ps[2] = Point(5651.1, 4591.4);\n    polygon.ps[3] = Point(5651.1, 4559.4);\n    new ShapeRef(router, polygon, 2077);\n\n    // shapeRef2078\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(18246.5, 8530.99);\n    polygon.ps[1] = Point(18246.5, 8562.99);\n    polygon.ps[2] = Point(18226.5, 8562.99);\n    polygon.ps[3] = Point(18226.5, 8530.99);\n    new ShapeRef(router, polygon, 2078);\n\n    // shapeRef2079\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(17625.5, 10164);\n    polygon.ps[1] = Point(17625.5, 10184);\n    polygon.ps[2] = Point(17593.5, 10184);\n    polygon.ps[3] = Point(17593.5, 10164);\n    new ShapeRef(router, polygon, 2079);\n\n    // shapeRef2080\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(16573.8, 10164);\n    polygon.ps[1] = Point(16573.8, 10184);\n    polygon.ps[2] = Point(16541.8, 10184);\n    polygon.ps[3] = Point(16541.8, 10164);\n    new ShapeRef(router, polygon, 2080);\n\n    // shapeRef2081\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(13954, 10164);\n    polygon.ps[1] = Point(13954, 10184);\n    polygon.ps[2] = Point(13922, 10184);\n    polygon.ps[3] = Point(13922, 10164);\n    new ShapeRef(router, polygon, 2081);\n\n    // shapeRef2082\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(10334.9, 9692.42);\n    polygon.ps[1] = Point(10334.9, 9724.42);\n    polygon.ps[2] = Point(10314.9, 9724.42);\n    polygon.ps[3] = Point(10314.9, 9692.42);\n    new ShapeRef(router, polygon, 2082);\n\n    // shapeRef2083\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(10126, 10356);\n    polygon.ps[1] = Point(10126, 10388);\n    polygon.ps[2] = Point(10106, 10388);\n    polygon.ps[3] = Point(10106, 10356);\n    new ShapeRef(router, polygon, 2083);\n\n    // shapeRef2084\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(10528.2, 10672.3);\n    polygon.ps[1] = Point(10528.2, 10692.3);\n    polygon.ps[2] = Point(10496.2, 10692.3);\n    polygon.ps[3] = Point(10496.2, 10672.3);\n    new ShapeRef(router, polygon, 2084);\n\n    // shapeRef2085\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(10924.2, 10672.3);\n    polygon.ps[1] = Point(10924.2, 10692.3);\n    polygon.ps[2] = Point(10892.2, 10692.3);\n    polygon.ps[3] = Point(10892.2, 10672.3);\n    new ShapeRef(router, polygon, 2085);\n\n    // shapeRef2086\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(10852.2, 10964.6);\n    polygon.ps[1] = Point(10852.2, 10996.6);\n    polygon.ps[2] = Point(10832.2, 10996.6);\n    polygon.ps[3] = Point(10832.2, 10964.6);\n    new ShapeRef(router, polygon, 2086);\n\n    // shapeRef2087\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9734.69, 11201.6);\n    polygon.ps[1] = Point(9734.69, 11221.6);\n    polygon.ps[2] = Point(9702.69, 11221.6);\n    polygon.ps[3] = Point(9702.69, 11201.6);\n    new ShapeRef(router, polygon, 2087);\n\n    // shapeRef2088\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9253.59, 11201.6);\n    polygon.ps[1] = Point(9253.59, 11221.6);\n    polygon.ps[2] = Point(9221.59, 11221.6);\n    polygon.ps[3] = Point(9221.59, 11201.6);\n    new ShapeRef(router, polygon, 2088);\n\n    // shapeRef2089\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8700.29, 11201.6);\n    polygon.ps[1] = Point(8700.29, 11221.6);\n    polygon.ps[2] = Point(8668.29, 11221.6);\n    polygon.ps[3] = Point(8668.29, 11201.6);\n    new ShapeRef(router, polygon, 2089);\n\n    // shapeRef2090\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(7973.29, 10997.6);\n    polygon.ps[1] = Point(7973.29, 11029.6);\n    polygon.ps[2] = Point(7953.29, 11029.6);\n    polygon.ps[3] = Point(7953.29, 10997.6);\n    new ShapeRef(router, polygon, 2090);\n\n    // shapeRef2091\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8243.29, 10705.3);\n    polygon.ps[1] = Point(8243.29, 10725.3);\n    polygon.ps[2] = Point(8211.29, 10725.3);\n    polygon.ps[3] = Point(8211.29, 10705.3);\n    new ShapeRef(router, polygon, 2091);\n\n    // shapeRef2092\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8700.29, 10705.3);\n    polygon.ps[1] = Point(8700.29, 10725.3);\n    polygon.ps[2] = Point(8668.29, 10725.3);\n    polygon.ps[3] = Point(8668.29, 10705.3);\n    new ShapeRef(router, polygon, 2092);\n\n    // shapeRef2093\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(13315, 9236.42);\n    polygon.ps[1] = Point(13315, 9256.42);\n    polygon.ps[2] = Point(13283, 9256.42);\n    polygon.ps[3] = Point(13283, 9236.42);\n    new ShapeRef(router, polygon, 2093);\n\n    // shapeRef2094\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(6667.1, 6986.4);\n    polygon.ps[1] = Point(6667.1, 7006.4);\n    polygon.ps[2] = Point(6635.1, 7006.4);\n    polygon.ps[3] = Point(6635.1, 6986.4);\n    new ShapeRef(router, polygon, 2094);\n\n    // shapeRef2095\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(7222.1, 7277.4);\n    polygon.ps[1] = Point(7222.1, 7309.4);\n    polygon.ps[2] = Point(7202.1, 7309.4);\n    polygon.ps[3] = Point(7202.1, 7277.4);\n    new ShapeRef(router, polygon, 2095);\n\n    // shapeRef2096\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(7222.1, 9197.42);\n    polygon.ps[1] = Point(7222.1, 9229.42);\n    polygon.ps[2] = Point(7202.1, 9229.42);\n    polygon.ps[3] = Point(7202.1, 9197.42);\n    new ShapeRef(router, polygon, 2096);\n\n    // shapeRef2097\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(6562.1, 8025.79);\n    polygon.ps[1] = Point(6562.1, 8057.79);\n    polygon.ps[2] = Point(6542.1, 8057.79);\n    polygon.ps[3] = Point(6542.1, 8025.79);\n    new ShapeRef(router, polygon, 2097);\n\n    // shapeRef2098\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(6562.1, 9861.02);\n    polygon.ps[1] = Point(6562.1, 9893.02);\n    polygon.ps[2] = Point(6542.1, 9893.02);\n    polygon.ps[3] = Point(6542.1, 9861.02);\n    new ShapeRef(router, polygon, 2098);\n\n    // shapeRef2099\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(6562.1, 7563.79);\n    polygon.ps[1] = Point(6562.1, 7595.79);\n    polygon.ps[2] = Point(6542.1, 7595.79);\n    polygon.ps[3] = Point(6542.1, 7563.79);\n    new ShapeRef(router, polygon, 2099);\n\n    // shapeRef2100\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(7261.1, 6504.51);\n    polygon.ps[1] = Point(7261.1, 6524.51);\n    polygon.ps[2] = Point(7229.1, 6524.51);\n    polygon.ps[3] = Point(7229.1, 6504.51);\n    new ShapeRef(router, polygon, 2100);\n\n    // shapeRef2101\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8177.29, 6504.51);\n    polygon.ps[1] = Point(8177.29, 6524.51);\n    polygon.ps[2] = Point(8145.29, 6524.51);\n    polygon.ps[3] = Point(8145.29, 6504.51);\n    new ShapeRef(router, polygon, 2101);\n\n    // shapeRef2102\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(6403.1, 6778.21);\n    polygon.ps[1] = Point(6403.1, 6798.21);\n    polygon.ps[2] = Point(6371.1, 6798.21);\n    polygon.ps[3] = Point(6371.1, 6778.21);\n    new ShapeRef(router, polygon, 2102);\n\n    // shapeRef2103\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(6133.1, 7959.79);\n    polygon.ps[1] = Point(6133.1, 7991.79);\n    polygon.ps[2] = Point(6113.1, 7991.79);\n    polygon.ps[3] = Point(6113.1, 7959.79);\n    new ShapeRef(router, polygon, 2103);\n\n    // shapeRef2104\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9932.69, 11622.9);\n    polygon.ps[1] = Point(9932.69, 11642.9);\n    polygon.ps[2] = Point(9900.69, 11642.9);\n    polygon.ps[3] = Point(9900.69, 11622.9);\n    new ShapeRef(router, polygon, 2104);\n\n    // shapeRef2105\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(11445.1, 11622.9);\n    polygon.ps[1] = Point(11445.1, 11642.9);\n    polygon.ps[2] = Point(11413.1, 11642.9);\n    polygon.ps[3] = Point(11413.1, 11622.9);\n    new ShapeRef(router, polygon, 2105);\n\n    // shapeRef2106\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(12773.5, 11622.9);\n    polygon.ps[1] = Point(12773.5, 11642.9);\n    polygon.ps[2] = Point(12741.5, 11642.9);\n    polygon.ps[3] = Point(12741.5, 11622.9);\n    new ShapeRef(router, polygon, 2106);\n\n    // shapeRef2107\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(14548, 11622.9);\n    polygon.ps[1] = Point(14548, 11642.9);\n    polygon.ps[2] = Point(14516, 11642.9);\n    polygon.ps[3] = Point(14516, 11622.9);\n    new ShapeRef(router, polygon, 2107);\n\n    // shapeRef2108\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(16082.6, 11622.9);\n    polygon.ps[1] = Point(16082.6, 11642.9);\n    polygon.ps[2] = Point(16050.6, 11642.9);\n    polygon.ps[3] = Point(16050.6, 11622.9);\n    new ShapeRef(router, polygon, 2108);\n\n    // shapeRef2109\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(15878.6, 11877.9);\n    polygon.ps[1] = Point(15878.6, 11909.9);\n    polygon.ps[2] = Point(15858.6, 11909.9);\n    polygon.ps[3] = Point(15858.6, 11877.9);\n    new ShapeRef(router, polygon, 2109);\n\n    // shapeRef2110\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(15878.6, 12177.3);\n    polygon.ps[1] = Point(15878.6, 12209.3);\n    polygon.ps[2] = Point(15858.6, 12209.3);\n    polygon.ps[3] = Point(15858.6, 12177.3);\n    new ShapeRef(router, polygon, 2110);\n\n    // shapeRef2111\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(15620.3, 12282.3);\n    polygon.ps[1] = Point(15620.3, 12302.3);\n    polygon.ps[2] = Point(15588.3, 12302.3);\n    polygon.ps[3] = Point(15588.3, 12282.3);\n    new ShapeRef(router, polygon, 2111);\n\n    // shapeRef2112\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(15002.9, 12282.3);\n    polygon.ps[1] = Point(15002.9, 12302.3);\n    polygon.ps[2] = Point(14970.9, 12302.3);\n    polygon.ps[3] = Point(14970.9, 12282.3);\n    new ShapeRef(router, polygon, 2112);\n\n    // shapeRef2113\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(14218, 12282.3);\n    polygon.ps[1] = Point(14218, 12302.3);\n    polygon.ps[2] = Point(14186, 12302.3);\n    polygon.ps[3] = Point(14186, 12282.3);\n    new ShapeRef(router, polygon, 2113);\n\n    // shapeRef2114\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9280.59, 5641.9);\n    polygon.ps[1] = Point(9280.59, 5673.9);\n    polygon.ps[2] = Point(9260.59, 5673.9);\n    polygon.ps[3] = Point(9260.59, 5641.9);\n    new ShapeRef(router, polygon, 2114);\n\n    // shapeRef2115\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9511.59, 7343.4);\n    polygon.ps[1] = Point(9511.59, 7375.4);\n    polygon.ps[2] = Point(9491.59, 7375.4);\n    polygon.ps[3] = Point(9491.59, 7343.4);\n    new ShapeRef(router, polygon, 2115);\n\n    // shapeRef2116\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9511.59, 10356);\n    polygon.ps[1] = Point(9511.59, 10388);\n    polygon.ps[2] = Point(9491.59, 10388);\n    polygon.ps[3] = Point(9491.59, 10356);\n    new ShapeRef(router, polygon, 2116);\n\n    // shapeRef2117\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(10373.9, 10771.3);\n    polygon.ps[1] = Point(10373.9, 10791.3);\n    polygon.ps[2] = Point(10341.9, 10791.3);\n    polygon.ps[3] = Point(10341.9, 10771.3);\n    new ShapeRef(router, polygon, 2117);\n\n    // shapeRef2118\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(11676.1, 10771.3);\n    polygon.ps[1] = Point(11676.1, 10791.3);\n    polygon.ps[2] = Point(11644.1, 10791.3);\n    polygon.ps[3] = Point(11644.1, 10771.3);\n    new ShapeRef(router, polygon, 2118);\n\n    // shapeRef2119\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(13117, 10771.3);\n    polygon.ps[1] = Point(13117, 10791.3);\n    polygon.ps[2] = Point(13085, 10791.3);\n    polygon.ps[3] = Point(13085, 10771.3);\n    new ShapeRef(router, polygon, 2119);\n\n    // shapeRef2120\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(14317, 10771.3);\n    polygon.ps[1] = Point(14317, 10791.3);\n    polygon.ps[2] = Point(14285, 10791.3);\n    polygon.ps[3] = Point(14285, 10771.3);\n    new ShapeRef(router, polygon, 2120);\n\n    // shapeRef2121\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(15781.9, 10771.3);\n    polygon.ps[1] = Point(15781.9, 10791.3);\n    polygon.ps[2] = Point(15749.9, 10791.3);\n    polygon.ps[3] = Point(15749.9, 10771.3);\n    new ShapeRef(router, polygon, 2121);\n\n    // shapeRef2122\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(6106.1, 204.265);\n    polygon.ps[1] = Point(6106.1, 224.265);\n    polygon.ps[2] = Point(6074.1, 224.265);\n    polygon.ps[3] = Point(6074.1, 204.265);\n    new ShapeRef(router, polygon, 2122);\n\n    // shapeRef2123\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(7775.29, 835.285);\n    polygon.ps[1] = Point(7775.29, 867.285);\n    polygon.ps[2] = Point(7755.29, 867.285);\n    polygon.ps[3] = Point(7755.29, 835.285);\n    new ShapeRef(router, polygon, 2123);\n\n    // shapeRef2124\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(10433.9, 6399.51);\n    polygon.ps[1] = Point(10433.9, 6431.51);\n    polygon.ps[2] = Point(10413.9, 6431.51);\n    polygon.ps[3] = Point(10413.9, 6399.51);\n    new ShapeRef(router, polygon, 2124);\n\n    // shapeRef2125\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(15158.3, 10898.6);\n    polygon.ps[1] = Point(15158.3, 10930.6);\n    polygon.ps[2] = Point(15138.3, 10930.6);\n    polygon.ps[3] = Point(15138.3, 10898.6);\n    new ShapeRef(router, polygon, 2125);\n\n    // shapeRef2126\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(7907.29, 4427.4);\n    polygon.ps[1] = Point(7907.29, 4459.4);\n    polygon.ps[2] = Point(7887.29, 4459.4);\n    polygon.ps[3] = Point(7887.29, 4427.4);\n    new ShapeRef(router, polygon, 2126);\n\n    // shapeRef2127\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(17229.5, 7184.4);\n    polygon.ps[1] = Point(17229.5, 7204.4);\n    polygon.ps[2] = Point(17197.5, 7204.4);\n    polygon.ps[3] = Point(17197.5, 7184.4);\n    new ShapeRef(router, polygon, 2127);\n\n    // shapeRef2128\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(4965, 5812.9);\n    polygon.ps[1] = Point(4965, 5832.9);\n    polygon.ps[2] = Point(4933, 5832.9);\n    polygon.ps[3] = Point(4933, 5812.9);\n    new ShapeRef(router, polygon, 2128);\n\n    // shapeRef2129\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(11373.1, 2233.29);\n    polygon.ps[1] = Point(11373.1, 2265.29);\n    polygon.ps[2] = Point(11353.1, 2265.29);\n    polygon.ps[3] = Point(11353.1, 2233.29);\n    new ShapeRef(router, polygon, 2129);\n\n    // shapeRef2130\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(11373.1, 3322.29);\n    polygon.ps[1] = Point(11373.1, 3354.29);\n    polygon.ps[2] = Point(11353.1, 3354.29);\n    polygon.ps[3] = Point(11353.1, 3322.29);\n    new ShapeRef(router, polygon, 2130);\n\n    // shapeRef2131\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(11373.1, 4460.4);\n    polygon.ps[1] = Point(11373.1, 4492.4);\n    polygon.ps[2] = Point(11353.1, 4492.4);\n    polygon.ps[3] = Point(11353.1, 4460.4);\n    new ShapeRef(router, polygon, 2131);\n\n    // shapeRef2132\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(11373.1, 5364.67);\n    polygon.ps[1] = Point(11373.1, 5396.67);\n    polygon.ps[2] = Point(11353.1, 5396.67);\n    polygon.ps[3] = Point(11353.1, 5364.67);\n    new ShapeRef(router, polygon, 2132);\n\n    // shapeRef2133\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(11373.1, 6564.51);\n    polygon.ps[1] = Point(11373.1, 6596.51);\n    polygon.ps[2] = Point(11353.1, 6596.51);\n    polygon.ps[3] = Point(11353.1, 6564.51);\n    new ShapeRef(router, polygon, 2133);\n\n    // shapeRef2134\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(11373.1, 8398.99);\n    polygon.ps[1] = Point(11373.1, 8430.99);\n    polygon.ps[2] = Point(11353.1, 8430.99);\n    polygon.ps[3] = Point(11353.1, 8398.99);\n    new ShapeRef(router, polygon, 2134);\n\n    // shapeRef2135\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(11373.1, 9960.02);\n    polygon.ps[1] = Point(11373.1, 9992.02);\n    polygon.ps[2] = Point(11353.1, 9992.02);\n    polygon.ps[3] = Point(11353.1, 9960.02);\n    new ShapeRef(router, polygon, 2135);\n\n    // shapeRef2136\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(11373.1, 11162.6);\n    polygon.ps[1] = Point(11373.1, 11194.6);\n    polygon.ps[2] = Point(11353.1, 11194.6);\n    polygon.ps[3] = Point(11353.1, 11162.6);\n    new ShapeRef(router, polygon, 2136);\n\n    // shapeRef2137\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(11940.1, 12117.3);\n    polygon.ps[1] = Point(11940.1, 12137.3);\n    polygon.ps[2] = Point(11908.1, 12137.3);\n    polygon.ps[3] = Point(11908.1, 12117.3);\n    new ShapeRef(router, polygon, 2137);\n\n    // shapeRef2138\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(12938.5, 12117.3);\n    polygon.ps[1] = Point(12938.5, 12137.3);\n    polygon.ps[2] = Point(12906.5, 12137.3);\n    polygon.ps[3] = Point(12906.5, 12117.3);\n    new ShapeRef(router, polygon, 2138);\n\n    // shapeRef2139\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8375.29, 1270.29);\n    polygon.ps[1] = Point(8375.29, 1290.29);\n    polygon.ps[2] = Point(8343.29, 1290.29);\n    polygon.ps[3] = Point(8343.29, 1270.29);\n    new ShapeRef(router, polygon, 2139);\n\n    // shapeRef2140\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(7913.29, 1270.29);\n    polygon.ps[1] = Point(7913.29, 1290.29);\n    polygon.ps[2] = Point(7881.29, 1290.29);\n    polygon.ps[3] = Point(7881.29, 1270.29);\n    new ShapeRef(router, polygon, 2140);\n\n    // shapeRef2141\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(7618.1, 1396.29);\n    polygon.ps[1] = Point(7618.1, 1428.29);\n    polygon.ps[2] = Point(7598.1, 1428.29);\n    polygon.ps[3] = Point(7598.1, 1396.29);\n    new ShapeRef(router, polygon, 2141);\n\n    // shapeRef2142\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(7618.1, 2992.29);\n    polygon.ps[1] = Point(7618.1, 3024.29);\n    polygon.ps[2] = Point(7598.1, 3024.29);\n    polygon.ps[3] = Point(7598.1, 2992.29);\n    new ShapeRef(router, polygon, 2142);\n\n    // shapeRef2143\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9959.69, 9960.02);\n    polygon.ps[1] = Point(9959.69, 9992.02);\n    polygon.ps[2] = Point(9939.69, 9992.02);\n    polygon.ps[3] = Point(9939.69, 9960.02);\n    new ShapeRef(router, polygon, 2143);\n\n    // shapeRef2144\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(15002.9, 1171.29);\n    polygon.ps[1] = Point(15002.9, 1191.29);\n    polygon.ps[2] = Point(14970.9, 1191.29);\n    polygon.ps[3] = Point(14970.9, 1171.29);\n    new ShapeRef(router, polygon, 2144);\n\n    // shapeRef2145\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(16082.6, 11784.9);\n    polygon.ps[1] = Point(16082.6, 11804.9);\n    polygon.ps[2] = Point(16050.6, 11804.9);\n    polygon.ps[3] = Point(16050.6, 11784.9);\n    new ShapeRef(router, polygon, 2145);\n\n    // shapeRef2146\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(1599, 4763.4);\n    polygon.ps[1] = Point(1599, 4783.4);\n    polygon.ps[2] = Point(1567, 4783.4);\n    polygon.ps[3] = Point(1567, 4763.4);\n    new ShapeRef(router, polygon, 2146);\n\n    // shapeRef2147\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(3051, 4763.4);\n    polygon.ps[1] = Point(3051, 4783.4);\n    polygon.ps[2] = Point(3019, 4783.4);\n    polygon.ps[3] = Point(3019, 4763.4);\n    new ShapeRef(router, polygon, 2147);\n\n    // shapeRef2148\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(4959, 6135.51);\n    polygon.ps[1] = Point(4959, 6167.51);\n    polygon.ps[2] = Point(4939, 6167.51);\n    polygon.ps[3] = Point(4939, 6135.51);\n    new ShapeRef(router, polygon, 2148);\n\n    // shapeRef2149\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(14746, 1336.29);\n    polygon.ps[1] = Point(14746, 1356.29);\n    polygon.ps[2] = Point(14714, 1356.29);\n    polygon.ps[3] = Point(14714, 1336.29);\n    new ShapeRef(router, polygon, 2149);\n\n    // shapeRef2150\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9668.69, 6174.51);\n    polygon.ps[1] = Point(9668.69, 6194.51);\n    polygon.ps[2] = Point(9636.69, 6194.51);\n    polygon.ps[3] = Point(9636.69, 6174.51);\n    new ShapeRef(router, polygon, 2150);\n\n    // shapeRef2151\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(7129.1, 10230);\n    polygon.ps[1] = Point(7129.1, 10250);\n    polygon.ps[2] = Point(7097.1, 10250);\n    polygon.ps[3] = Point(7097.1, 10230);\n    new ShapeRef(router, polygon, 2151);\n\n    // shapeRef2152\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8243.29, 9665.42);\n    polygon.ps[1] = Point(8243.29, 9685.42);\n    polygon.ps[2] = Point(8211.29, 9685.42);\n    polygon.ps[3] = Point(8211.29, 9665.42);\n    new ShapeRef(router, polygon, 2152);\n\n    // shapeRef2153\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8342.29, 9834.02);\n    polygon.ps[1] = Point(8342.29, 9854.02);\n    polygon.ps[2] = Point(8310.29, 9854.02);\n    polygon.ps[3] = Point(8310.29, 9834.02);\n    new ShapeRef(router, polygon, 2153);\n\n    // shapeRef2154\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(10334.9, 9428.42);\n    polygon.ps[1] = Point(10334.9, 9460.42);\n    polygon.ps[2] = Point(10314.9, 9460.42);\n    polygon.ps[3] = Point(10314.9, 9428.42);\n    new ShapeRef(router, polygon, 2154);\n\n    // shapeRef2155\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8812.89, 10059);\n    polygon.ps[1] = Point(8812.89, 10091);\n    polygon.ps[2] = Point(8792.89, 10091);\n    polygon.ps[3] = Point(8792.89, 10059);\n    new ShapeRef(router, polygon, 2155);\n\n    // shapeRef2156\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(273, 132.265);\n    polygon.ps[1] = Point(273, 164.265);\n    polygon.ps[2] = Point(253, 164.265);\n    polygon.ps[3] = Point(253, 132.265);\n    new ShapeRef(router, polygon, 2156);\n\n    // shapeRef2157\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9214.59, 11682.9);\n    polygon.ps[1] = Point(9214.59, 11714.9);\n    polygon.ps[2] = Point(9194.59, 11714.9);\n    polygon.ps[3] = Point(9194.59, 11682.9);\n    new ShapeRef(router, polygon, 2157);\n\n    // shapeRef2158\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9029.99, 5641.9);\n    polygon.ps[1] = Point(9029.99, 5673.9);\n    polygon.ps[2] = Point(9009.99, 5673.9);\n    polygon.ps[3] = Point(9009.99, 5641.9);\n    new ShapeRef(router, polygon, 2158);\n\n    // shapeRef2159\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9029.99, 2365.29);\n    polygon.ps[1] = Point(9029.99, 2397.29);\n    polygon.ps[2] = Point(9009.99, 2397.29);\n    polygon.ps[3] = Point(9009.99, 2365.29);\n    new ShapeRef(router, polygon, 2159);\n\n    // shapeRef2160\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8468.29, 1462.29);\n    polygon.ps[1] = Point(8468.29, 1494.29);\n    polygon.ps[2] = Point(8448.29, 1494.29);\n    polygon.ps[3] = Point(8448.29, 1462.29);\n    new ShapeRef(router, polygon, 2160);\n\n    // shapeRef2161\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8634.29, 1468.29);\n    polygon.ps[1] = Point(8634.29, 1488.29);\n    polygon.ps[2] = Point(8602.29, 1488.29);\n    polygon.ps[3] = Point(8602.29, 1468.29);\n    new ShapeRef(router, polygon, 2161);\n\n    // shapeRef2162\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8276.29, 798.091);\n    polygon.ps[1] = Point(8276.29, 818.091);\n    polygon.ps[2] = Point(8244.29, 818.091);\n    polygon.ps[3] = Point(8244.29, 798.091);\n    new ShapeRef(router, polygon, 2162);\n\n    // shapeRef2163\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8270.29, 901.285);\n    polygon.ps[1] = Point(8270.29, 933.285);\n    polygon.ps[2] = Point(8250.29, 933.285);\n    polygon.ps[3] = Point(8250.29, 901.285);\n    new ShapeRef(router, polygon, 2163);\n\n    // shapeRef2164\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8634.29, 973.285);\n    polygon.ps[1] = Point(8634.29, 993.285);\n    polygon.ps[2] = Point(8602.29, 993.285);\n    polygon.ps[3] = Point(8602.29, 973.285);\n    new ShapeRef(router, polygon, 2164);\n\n    // shapeRef2165\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(15249.5, 967.285);\n    polygon.ps[1] = Point(15249.5, 999.285);\n    polygon.ps[2] = Point(15229.5, 999.285);\n    polygon.ps[3] = Point(15229.5, 967.285);\n    new ShapeRef(router, polygon, 2165);\n\n    // shapeRef2166\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(12707.5, 5304.67);\n    polygon.ps[1] = Point(12707.5, 5324.67);\n    polygon.ps[2] = Point(12675.5, 5324.67);\n    polygon.ps[3] = Point(12675.5, 5304.67);\n    new ShapeRef(router, polygon, 2166);\n\n    // shapeRef2167\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(12369.1, 5304.67);\n    polygon.ps[1] = Point(12369.1, 5324.67);\n    polygon.ps[2] = Point(12337.1, 5324.67);\n    polygon.ps[3] = Point(12337.1, 5304.67);\n    new ShapeRef(router, polygon, 2167);\n\n    // shapeRef2168\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(13117, 4532.4);\n    polygon.ps[1] = Point(13117, 4552.4);\n    polygon.ps[2] = Point(13085, 4552.4);\n    polygon.ps[3] = Point(13085, 4532.4);\n    new ShapeRef(router, polygon, 2168);\n\n    // shapeRef2169\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(13492, 3852.51);\n    polygon.ps[1] = Point(13492, 3872.51);\n    polygon.ps[2] = Point(13460, 3872.51);\n    polygon.ps[3] = Point(13460, 3852.51);\n    new ShapeRef(router, polygon, 2169);\n\n    // shapeRef2170\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(12707.5, 3984.51);\n    polygon.ps[1] = Point(12707.5, 4004.51);\n    polygon.ps[2] = Point(12675.5, 4004.51);\n    polygon.ps[3] = Point(12675.5, 3984.51);\n    new ShapeRef(router, polygon, 2170);\n\n    // shapeRef2171\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(11254.2, 9038.42);\n    polygon.ps[1] = Point(11254.2, 9058.42);\n    polygon.ps[2] = Point(11222.2, 9058.42);\n    polygon.ps[3] = Point(11222.2, 9038.42);\n    new ShapeRef(router, polygon, 2171);\n\n    // shapeRef2172\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(5506.1, 4559.4);\n    polygon.ps[1] = Point(5506.1, 4591.4);\n    polygon.ps[2] = Point(5486.1, 4591.4);\n    polygon.ps[3] = Point(5486.1, 4559.4);\n    new ShapeRef(router, polygon, 2172);\n\n    // shapeRef2173\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(5506.1, 5153.4);\n    polygon.ps[1] = Point(5506.1, 5185.4);\n    polygon.ps[2] = Point(5486.1, 5185.4);\n    polygon.ps[3] = Point(5486.1, 5153.4);\n    new ShapeRef(router, polygon, 2173);\n\n    // shapeRef2174\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(15851.6, 1336.29);\n    polygon.ps[1] = Point(15851.6, 1356.29);\n    polygon.ps[2] = Point(15819.6, 1356.29);\n    polygon.ps[3] = Point(15819.6, 1336.29);\n    new ShapeRef(router, polygon, 2174);\n\n    // shapeRef2175\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(11122.2, 8239.99);\n    polygon.ps[1] = Point(11122.2, 8259.99);\n    polygon.ps[2] = Point(11090.2, 8259.99);\n    polygon.ps[3] = Point(11090.2, 8239.99);\n    new ShapeRef(router, polygon, 2175);\n\n    // shapeRef2176\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(16540.8, 7415.4);\n    polygon.ps[1] = Point(16540.8, 7435.4);\n    polygon.ps[2] = Point(16508.8, 7435.4);\n    polygon.ps[3] = Point(16508.8, 7415.4);\n    new ShapeRef(router, polygon, 2176);\n\n    // shapeRef2177\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(16540.8, 7536.79);\n    polygon.ps[1] = Point(16540.8, 7556.79);\n    polygon.ps[2] = Point(16508.8, 7556.79);\n    polygon.ps[3] = Point(16508.8, 7536.79);\n    new ShapeRef(router, polygon, 2177);\n\n    // shapeRef2178\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(18532, 11972.3);\n    polygon.ps[1] = Point(18532, 11992.3);\n    polygon.ps[2] = Point(18500, 11992.3);\n    polygon.ps[3] = Point(18500, 11972.3);\n    new ShapeRef(router, polygon, 2178);\n\n    // shapeRef2179\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(10819.2, 5641.9);\n    polygon.ps[1] = Point(10819.2, 5673.9);\n    polygon.ps[2] = Point(10799.2, 5673.9);\n    polygon.ps[3] = Point(10799.2, 5641.9);\n    new ShapeRef(router, polygon, 2179);\n\n    // shapeRef2180\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(15620.3, 1171.29);\n    polygon.ps[1] = Point(15620.3, 1191.29);\n    polygon.ps[2] = Point(15588.3, 1191.29);\n    polygon.ps[3] = Point(15588.3, 1171.29);\n    new ShapeRef(router, polygon, 2180);\n\n    // shapeRef2181\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(11254.2, 4499.4);\n    polygon.ps[1] = Point(11254.2, 4519.4);\n    polygon.ps[2] = Point(11222.2, 4519.4);\n    polygon.ps[3] = Point(11222.2, 4499.4);\n    new ShapeRef(router, polygon, 2181);\n\n    // shapeRef2182\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(11254.2, 4182.51);\n    polygon.ps[1] = Point(11254.2, 4202.51);\n    polygon.ps[2] = Point(11222.2, 4202.51);\n    polygon.ps[3] = Point(11222.2, 4182.51);\n    new ShapeRef(router, polygon, 2182);\n\n    // shapeRef2183\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(14614, 6953.4);\n    polygon.ps[1] = Point(14614, 6973.4);\n    polygon.ps[2] = Point(14582, 6973.4);\n    polygon.ps[3] = Point(14582, 6953.4);\n    new ShapeRef(router, polygon, 2183);\n\n    // shapeRef2184\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(14614, 6636.51);\n    polygon.ps[1] = Point(14614, 6656.51);\n    polygon.ps[2] = Point(14582, 6656.51);\n    polygon.ps[3] = Point(14582, 6636.51);\n    new ShapeRef(router, polygon, 2184);\n\n    // shapeRef2185\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9992.69, 9692.42);\n    polygon.ps[1] = Point(9992.69, 9724.42);\n    polygon.ps[2] = Point(9972.69, 9724.42);\n    polygon.ps[3] = Point(9972.69, 9692.42);\n    new ShapeRef(router, polygon, 2185);\n\n    // shapeRef2186\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8700.29, 11376.8);\n    polygon.ps[1] = Point(8700.29, 11396.8);\n    polygon.ps[2] = Point(8668.29, 11396.8);\n    polygon.ps[3] = Point(8668.29, 11376.8);\n    new ShapeRef(router, polygon, 2186);\n\n    // shapeRef2187\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(16076.6, 11531.7);\n    polygon.ps[1] = Point(16076.6, 11563.7);\n    polygon.ps[2] = Point(16056.6, 11563.7);\n    polygon.ps[3] = Point(16056.6, 11531.7);\n    new ShapeRef(router, polygon, 2187);\n\n    // shapeRef2188\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(16082.6, 11376.8);\n    polygon.ps[1] = Point(16082.6, 11396.8);\n    polygon.ps[2] = Point(16050.6, 11396.8);\n    polygon.ps[3] = Point(16050.6, 11376.8);\n    new ShapeRef(router, polygon, 2188);\n\n    // shapeRef2189\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(14218, 12415.7);\n    polygon.ps[1] = Point(14218, 12435.7);\n    polygon.ps[2] = Point(14186, 12435.7);\n    polygon.ps[3] = Point(14186, 12415.7);\n    new ShapeRef(router, polygon, 2189);\n\n    // shapeRef2190\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9695.69, 7343.4);\n    polygon.ps[1] = Point(9695.69, 7375.4);\n    polygon.ps[2] = Point(9675.69, 7375.4);\n    polygon.ps[3] = Point(9675.69, 7343.4);\n    new ShapeRef(router, polygon, 2190);\n\n    // shapeRef2191\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(15781.9, 10904.6);\n    polygon.ps[1] = Point(15781.9, 10924.6);\n    polygon.ps[2] = Point(15749.9, 10924.6);\n    polygon.ps[3] = Point(15749.9, 10904.6);\n    new ShapeRef(router, polygon, 2191);\n\n    // shapeRef2192\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(669, 132.265);\n    polygon.ps[1] = Point(669, 164.265);\n    polygon.ps[2] = Point(649, 164.265);\n    polygon.ps[3] = Point(649, 132.265);\n    new ShapeRef(router, polygon, 2192);\n\n    // shapeRef2193\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(15158.3, 11877.9);\n    polygon.ps[1] = Point(15158.3, 11909.9);\n    polygon.ps[2] = Point(15138.3, 11909.9);\n    polygon.ps[3] = Point(15138.3, 11877.9);\n    new ShapeRef(router, polygon, 2193);\n\n    // shapeRef2194\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(7775.29, 1396.29);\n    polygon.ps[1] = Point(7775.29, 1428.29);\n    polygon.ps[2] = Point(7755.29, 1428.29);\n    polygon.ps[3] = Point(7755.29, 1396.29);\n    new ShapeRef(router, polygon, 2194);\n\n    // shapeRef2195\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(12938.5, 12448.7);\n    polygon.ps[1] = Point(12938.5, 12468.7);\n    polygon.ps[2] = Point(12906.5, 12468.7);\n    polygon.ps[3] = Point(12906.5, 12448.7);\n    new ShapeRef(router, polygon, 2195);\n\n    // shapeRef2196\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(15793.4, 10924.6);\n    polygon.ps[1] = Point(15793.4, 10984.6);\n    polygon.ps[2] = Point(15738.4, 10984.6);\n    polygon.ps[3] = Point(15738.4, 10924.6);\n    new ShapeRef(router, polygon, 2196);\n\n    // shapeRef2197\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(14257, 12435.7);\n    polygon.ps[1] = Point(14257, 12495.7);\n    polygon.ps[2] = Point(14202, 12495.7);\n    polygon.ps[3] = Point(14202, 12435.7);\n    new ShapeRef(router, polygon, 2197);\n\n    // shapeRef2198\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(16152.1, 11545.2);\n    polygon.ps[1] = Point(16152.1, 11585.2);\n    polygon.ps[2] = Point(16076.6, 11585.2);\n    polygon.ps[3] = Point(16076.6, 11545.2);\n    new ShapeRef(router, polygon, 2198);\n\n    // shapeRef2199\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(16094.1, 11316.8);\n    polygon.ps[1] = Point(16094.1, 11376.8);\n    polygon.ps[2] = Point(16039.1, 11376.8);\n    polygon.ps[3] = Point(16039.1, 11316.8);\n    new ShapeRef(router, polygon, 2199);\n\n    // shapeRef2200\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(348.5, 148.265);\n    polygon.ps[1] = Point(348.5, 188.265);\n    polygon.ps[2] = Point(273, 188.265);\n    polygon.ps[3] = Point(273, 148.265);\n    new ShapeRef(router, polygon, 2200);\n\n    // shapeRef2201\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(744.5, 110.765);\n    polygon.ps[1] = Point(744.5, 150.765);\n    polygon.ps[2] = Point(669, 150.765);\n    polygon.ps[3] = Point(669, 110.765);\n    new ShapeRef(router, polygon, 2201);\n\n    // shapeRef2202\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(15233.8, 11891.4);\n    polygon.ps[1] = Point(15233.8, 11931.4);\n    polygon.ps[2] = Point(15158.3, 11931.4);\n    polygon.ps[3] = Point(15158.3, 11891.4);\n    new ShapeRef(router, polygon, 2202);\n\n    // shapeRef2203\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9771.19, 7339.4);\n    polygon.ps[1] = Point(9771.19, 7379.4);\n    polygon.ps[2] = Point(9695.69, 7379.4);\n    polygon.ps[3] = Point(9695.69, 7339.4);\n    new ShapeRef(router, polygon, 2203);\n\n    // shapeRef2204\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9972.69, 9688.42);\n    polygon.ps[1] = Point(9972.69, 9728.42);\n    polygon.ps[2] = Point(9897.19, 9728.42);\n    polygon.ps[3] = Point(9897.19, 9688.42);\n    new ShapeRef(router, polygon, 2204);\n\n    // shapeRef2205\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(14625.5, 6973.4);\n    polygon.ps[1] = Point(14625.5, 7033.4);\n    polygon.ps[2] = Point(14570.5, 7033.4);\n    polygon.ps[3] = Point(14570.5, 6973.4);\n    new ShapeRef(router, polygon, 2205);\n\n    // shapeRef2206\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(14600.5, 6576.51);\n    polygon.ps[1] = Point(14600.5, 6636.51);\n    polygon.ps[2] = Point(14545.5, 6636.51);\n    polygon.ps[3] = Point(14545.5, 6576.51);\n    new ShapeRef(router, polygon, 2206);\n\n    // shapeRef2207\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(16552.3, 7355.4);\n    polygon.ps[1] = Point(16552.3, 7415.4);\n    polygon.ps[2] = Point(16497.3, 7415.4);\n    polygon.ps[3] = Point(16497.3, 7355.4);\n    new ShapeRef(router, polygon, 2207);\n\n    // shapeRef2208\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(16552.3, 7556.79);\n    polygon.ps[1] = Point(16552.3, 7616.79);\n    polygon.ps[2] = Point(16497.3, 7616.79);\n    polygon.ps[3] = Point(16497.3, 7556.79);\n    new ShapeRef(router, polygon, 2208);\n\n    // shapeRef2209\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(14732.5, 1276.29);\n    polygon.ps[1] = Point(14732.5, 1336.29);\n    polygon.ps[2] = Point(14677.5, 1336.29);\n    polygon.ps[3] = Point(14677.5, 1276.29);\n    new ShapeRef(router, polygon, 2209);\n\n    // shapeRef2210\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9705.19, 6114.51);\n    polygon.ps[1] = Point(9705.19, 6174.51);\n    polygon.ps[2] = Point(9650.19, 6174.51);\n    polygon.ps[3] = Point(9650.19, 6114.51);\n    new ShapeRef(router, polygon, 2210);\n\n    // shapeRef2211\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(7140.6, 10170);\n    polygon.ps[1] = Point(7140.6, 10230);\n    polygon.ps[2] = Point(7085.6, 10230);\n    polygon.ps[3] = Point(7085.6, 10170);\n    new ShapeRef(router, polygon, 2211);\n\n    // shapeRef2212\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8229.79, 9605.42);\n    polygon.ps[1] = Point(8229.79, 9665.42);\n    polygon.ps[2] = Point(8174.79, 9665.42);\n    polygon.ps[3] = Point(8174.79, 9605.42);\n    new ShapeRef(router, polygon, 2212);\n\n    // shapeRef2213\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8378.79, 9774.02);\n    polygon.ps[1] = Point(8378.79, 9834.02);\n    polygon.ps[2] = Point(8323.79, 9834.02);\n    polygon.ps[3] = Point(8323.79, 9774.02);\n    new ShapeRef(router, polygon, 2213);\n\n    // shapeRef2214\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(10410.4, 9424.42);\n    polygon.ps[1] = Point(10410.4, 9464.42);\n    polygon.ps[2] = Point(10334.9, 9464.42);\n    polygon.ps[3] = Point(10334.9, 9424.42);\n    new ShapeRef(router, polygon, 2214);\n\n    // shapeRef2215\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8888.39, 10055);\n    polygon.ps[1] = Point(8888.39, 10095);\n    polygon.ps[2] = Point(8812.89, 10095);\n    polygon.ps[3] = Point(8812.89, 10055);\n    new ShapeRef(router, polygon, 2215);\n\n    // shapeRef2216\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(348.5, 108.265);\n    polygon.ps[1] = Point(348.5, 148.265);\n    polygon.ps[2] = Point(273, 148.265);\n    polygon.ps[3] = Point(273, 108.265);\n    new ShapeRef(router, polygon, 2216);\n\n    // shapeRef2217\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(398.5, 128.265);\n    polygon.ps[1] = Point(398.5, 168.265);\n    polygon.ps[2] = Point(273, 168.265);\n    polygon.ps[3] = Point(273, 128.265);\n    new ShapeRef(router, polygon, 2217);\n\n    // shapeRef2218\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9290.09, 11678.9);\n    polygon.ps[1] = Point(9290.09, 11718.9);\n    polygon.ps[2] = Point(9214.59, 11718.9);\n    polygon.ps[3] = Point(9214.59, 11678.9);\n    new ShapeRef(router, polygon, 2218);\n\n    // shapeRef2219\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9105.49, 5637.9);\n    polygon.ps[1] = Point(9105.49, 5677.9);\n    polygon.ps[2] = Point(9029.99, 5677.9);\n    polygon.ps[3] = Point(9029.99, 5637.9);\n    new ShapeRef(router, polygon, 2219);\n\n    // shapeRef2220\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9105.49, 2381.29);\n    polygon.ps[1] = Point(9105.49, 2421.29);\n    polygon.ps[2] = Point(9029.99, 2421.29);\n    polygon.ps[3] = Point(9029.99, 2381.29);\n    new ShapeRef(router, polygon, 2220);\n\n    // shapeRef2221\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8543.79, 1458.29);\n    polygon.ps[1] = Point(8543.79, 1498.29);\n    polygon.ps[2] = Point(8468.29, 1498.29);\n    polygon.ps[3] = Point(8468.29, 1458.29);\n    new ShapeRef(router, polygon, 2221);\n\n    // shapeRef2222\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8620.79, 1488.29);\n    polygon.ps[1] = Point(8620.79, 1548.29);\n    polygon.ps[2] = Point(8565.79, 1548.29);\n    polygon.ps[3] = Point(8565.79, 1488.29);\n    new ShapeRef(router, polygon, 2222);\n\n    // shapeRef2223\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8287.79, 738.091);\n    polygon.ps[1] = Point(8287.79, 798.091);\n    polygon.ps[2] = Point(8232.79, 798.091);\n    polygon.ps[3] = Point(8232.79, 738.091);\n    new ShapeRef(router, polygon, 2223);\n\n    // shapeRef2224\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8250.29, 879.785);\n    polygon.ps[1] = Point(8250.29, 919.785);\n    polygon.ps[2] = Point(8174.79, 919.785);\n    polygon.ps[3] = Point(8174.79, 879.785);\n    new ShapeRef(router, polygon, 2224);\n\n    // shapeRef2225\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8645.79, 913.285);\n    polygon.ps[1] = Point(8645.79, 973.285);\n    polygon.ps[2] = Point(8590.79, 973.285);\n    polygon.ps[3] = Point(8590.79, 913.285);\n    new ShapeRef(router, polygon, 2225);\n\n    // shapeRef2226\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(15325, 980.785);\n    polygon.ps[1] = Point(15325, 1020.79);\n    polygon.ps[2] = Point(15249.5, 1020.79);\n    polygon.ps[3] = Point(15249.5, 980.785);\n    new ShapeRef(router, polygon, 2226);\n\n    // shapeRef2227\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(11290.7, 4519.4);\n    polygon.ps[1] = Point(11290.7, 4579.4);\n    polygon.ps[2] = Point(11235.7, 4579.4);\n    polygon.ps[3] = Point(11235.7, 4519.4);\n    new ShapeRef(router, polygon, 2227);\n\n    // shapeRef2228\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(11290.7, 4122.51);\n    polygon.ps[1] = Point(11290.7, 4182.51);\n    polygon.ps[2] = Point(11235.7, 4182.51);\n    polygon.ps[3] = Point(11235.7, 4122.51);\n    new ShapeRef(router, polygon, 2228);\n\n    // shapeRef2229\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(12744, 5324.67);\n    polygon.ps[1] = Point(12744, 5384.67);\n    polygon.ps[2] = Point(12689, 5384.67);\n    polygon.ps[3] = Point(12689, 5324.67);\n    new ShapeRef(router, polygon, 2229);\n\n    // shapeRef2230\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(12408.1, 5244.67);\n    polygon.ps[1] = Point(12408.1, 5304.67);\n    polygon.ps[2] = Point(12353.1, 5304.67);\n    polygon.ps[3] = Point(12353.1, 5244.67);\n    new ShapeRef(router, polygon, 2230);\n\n    // shapeRef2231\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(13528.5, 3792.51);\n    polygon.ps[1] = Point(13528.5, 3852.51);\n    polygon.ps[2] = Point(13473.5, 3852.51);\n    polygon.ps[3] = Point(13473.5, 3792.51);\n    new ShapeRef(router, polygon, 2231);\n\n    // shapeRef2232\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(13128.5, 4472.4);\n    polygon.ps[1] = Point(13128.5, 4532.4);\n    polygon.ps[2] = Point(13073.5, 4532.4);\n    polygon.ps[3] = Point(13073.5, 4472.4);\n    new ShapeRef(router, polygon, 2232);\n\n    // shapeRef2233\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(12719, 3924.51);\n    polygon.ps[1] = Point(12719, 3984.51);\n    polygon.ps[2] = Point(12664, 3984.51);\n    polygon.ps[3] = Point(12664, 3924.51);\n    new ShapeRef(router, polygon, 2233);\n\n    // shapeRef2234\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(18543.5, 11992.3);\n    polygon.ps[1] = Point(18543.5, 12052.3);\n    polygon.ps[2] = Point(18488.5, 12052.3);\n    polygon.ps[3] = Point(18488.5, 11992.3);\n    new ShapeRef(router, polygon, 2234);\n\n    // shapeRef2235\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(11265.7, 9058.42);\n    polygon.ps[1] = Point(11265.7, 9118.42);\n    polygon.ps[2] = Point(11210.7, 9118.42);\n    polygon.ps[3] = Point(11210.7, 9058.42);\n    new ShapeRef(router, polygon, 2235);\n\n    // shapeRef2236\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(15888.1, 1356.29);\n    polygon.ps[1] = Point(15888.1, 1416.29);\n    polygon.ps[2] = Point(15833.1, 1416.29);\n    polygon.ps[3] = Point(15833.1, 1356.29);\n    new ShapeRef(router, polygon, 2236);\n\n    // shapeRef2237\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(11133.7, 8259.99);\n    polygon.ps[1] = Point(11133.7, 8319.99);\n    polygon.ps[2] = Point(11078.7, 8319.99);\n    polygon.ps[3] = Point(11078.7, 8259.99);\n    new ShapeRef(router, polygon, 2237);\n\n    // shapeRef2238\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(10894.7, 5655.4);\n    polygon.ps[1] = Point(10894.7, 5695.4);\n    polygon.ps[2] = Point(10819.2, 5695.4);\n    polygon.ps[3] = Point(10819.2, 5655.4);\n    new ShapeRef(router, polygon, 2238);\n\n    // shapeRef2239\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(15631.8, 1111.29);\n    polygon.ps[1] = Point(15631.8, 1171.29);\n    polygon.ps[2] = Point(15576.8, 1171.29);\n    polygon.ps[3] = Point(15576.8, 1111.29);\n    new ShapeRef(router, polygon, 2239);\n\n    // shapeRef2240\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(15760.4, 1276.29);\n    polygon.ps[1] = Point(15760.4, 1336.29);\n    polygon.ps[2] = Point(15705.4, 1336.29);\n    polygon.ps[3] = Point(15705.4, 1276.29);\n    new ShapeRef(router, polygon, 2240);\n\n    // shapeRef2241\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(5581.6, 4555.4);\n    polygon.ps[1] = Point(5581.6, 4595.4);\n    polygon.ps[2] = Point(5506.1, 4595.4);\n    polygon.ps[3] = Point(5506.1, 4555.4);\n    new ShapeRef(router, polygon, 2241);\n\n    // shapeRef2242\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(5581.6, 5149.4);\n    polygon.ps[1] = Point(5581.6, 5189.4);\n    polygon.ps[2] = Point(5506.1, 5189.4);\n    polygon.ps[3] = Point(5506.1, 5149.4);\n    new ShapeRef(router, polygon, 2242);\n\n    // shapeRef2243\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8711.79, 11396.8);\n    polygon.ps[1] = Point(8711.79, 11456.8);\n    polygon.ps[2] = Point(8656.79, 11456.8);\n    polygon.ps[3] = Point(8656.79, 11396.8);\n    new ShapeRef(router, polygon, 2243);\n\n    // shapeRef2244\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(7850.79, 1392.29);\n    polygon.ps[1] = Point(7850.79, 1432.29);\n    polygon.ps[2] = Point(7775.29, 1432.29);\n    polygon.ps[3] = Point(7775.29, 1392.29);\n    new ShapeRef(router, polygon, 2244);\n\n    // shapeRef2245\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(12925, 12388.7);\n    polygon.ps[1] = Point(12925, 12448.7);\n    polygon.ps[2] = Point(12870, 12448.7);\n    polygon.ps[3] = Point(12870, 12388.7);\n    new ShapeRef(router, polygon, 2245);\n\n    // shapeRef2246\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(4751, 10448);\n    polygon.ps[1] = Point(4751, 10494.2);\n    polygon.ps[2] = Point(4666.9, 10494.2);\n    polygon.ps[3] = Point(4666.9, 10448);\n    new ShapeRef(router, polygon, 2246);\n\n    // shapeRef2247\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(4543, 10583.3);\n    polygon.ps[1] = Point(4543, 10667.4);\n    polygon.ps[2] = Point(4496.77, 10667.4);\n    polygon.ps[3] = Point(4496.77, 10583.3);\n    new ShapeRef(router, polygon, 2247);\n\n    // shapeRef2248\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(7930.29, 7138.4);\n    polygon.ps[1] = Point(7930.29, 7183.1);\n    polygon.ps[2] = Point(7872.07, 7183.1);\n    polygon.ps[3] = Point(7872.07, 7138.4);\n    new ShapeRef(router, polygon, 2248);\n\n    // shapeRef2249\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9430.15, 9652.42);\n    polygon.ps[1] = Point(9430.15, 9724.02);\n    polygon.ps[2] = Point(9369.59, 9724.02);\n    polygon.ps[3] = Point(9369.59, 9652.42);\n    new ShapeRef(router, polygon, 2249);\n\n    // shapeRef2250\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8825.89, 2320.72);\n    polygon.ps[1] = Point(8825.89, 2381.29);\n    polygon.ps[2] = Point(8754.29, 2381.29);\n    polygon.ps[3] = Point(8754.29, 2320.72);\n    new ShapeRef(router, polygon, 2250);\n\n    // shapeRef2251\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(12521.5, 5314.67);\n    polygon.ps[1] = Point(12521.5, 5375.23);\n    polygon.ps[2] = Point(12449.9, 5375.23);\n    polygon.ps[3] = Point(12449.9, 5314.67);\n    new ShapeRef(router, polygon, 2251);\n\n    // shapeRef2252\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(12922.5, 4519.4);\n    polygon.ps[1] = Point(12922.5, 4564.1);\n    polygon.ps[2] = Point(12864.3, 4564.1);\n    polygon.ps[3] = Point(12864.3, 4519.4);\n    new ShapeRef(router, polygon, 2252);\n\n    // shapeRef2253\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(11296.4, 8883.22);\n    polygon.ps[1] = Point(11296.4, 8927.91);\n    polygon.ps[2] = Point(11238.2, 8927.91);\n    polygon.ps[3] = Point(11238.2, 8883.22);\n    new ShapeRef(router, polygon, 2253);\n\n    // shapeRef2254\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(15637.3, 468.265);\n    polygon.ps[1] = Point(15637.3, 514.5);\n    polygon.ps[2] = Point(15553.2, 514.5);\n    polygon.ps[3] = Point(15553.2, 468.265);\n    new ShapeRef(router, polygon, 2254);\n\n    // shapeRef2255\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(11164.4, 8084.79);\n    polygon.ps[1] = Point(11164.4, 8129.49);\n    polygon.ps[2] = Point(11106.2, 8129.49);\n    polygon.ps[3] = Point(11106.2, 8084.79);\n    new ShapeRef(router, polygon, 2255);\n\n    // shapeRef2256\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(14598, 6798.21);\n    polygon.ps[1] = Point(14598, 6842.9);\n    polygon.ps[2] = Point(14539.8, 6842.9);\n    polygon.ps[3] = Point(14539.8, 6798.21);\n    new ShapeRef(router, polygon, 2256);\n\n    // shapeRef2257\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(10314.9, 9708.42);\n    polygon.ps[1] = Point(10314.9, 9766.64);\n    polygon.ps[2] = Point(10270.2, 9766.64);\n    polygon.ps[3] = Point(10270.2, 9708.42);\n    new ShapeRef(router, polygon, 2257);\n\n    // shapeRef2258\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(15045.1, 12302.3);\n    polygon.ps[1] = Point(15045.1, 12347);\n    polygon.ps[2] = Point(14986.9, 12347);\n    polygon.ps[3] = Point(14986.9, 12302.3);\n    new ShapeRef(router, polygon, 2258);\n\n    // shapeRef2259\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(14202, 12302.3);\n    polygon.ps[1] = Point(14202, 12373.9);\n    polygon.ps[2] = Point(14141.4, 12373.9);\n    polygon.ps[3] = Point(14141.4, 12302.3);\n    new ShapeRef(router, polygon, 2259);\n\n    // shapeRef2260\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(15850, 10791.3);\n    polygon.ps[1] = Point(15850, 10837.5);\n    polygon.ps[2] = Point(15765.9, 10837.5);\n    polygon.ps[3] = Point(15765.9, 10791.3);\n    new ShapeRef(router, polygon, 2260);\n\n    // shapeRef2261\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(7755.29, 790.723);\n    polygon.ps[1] = Point(7755.29, 851.285);\n    polygon.ps[2] = Point(7683.69, 851.285);\n    polygon.ps[3] = Point(7683.69, 790.723);\n    new ShapeRef(router, polygon, 2261);\n\n    // shapeRef2262\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(11924.1, 12137.3);\n    polygon.ps[1] = Point(11924.1, 12182);\n    polygon.ps[2] = Point(11865.9, 12182);\n    polygon.ps[3] = Point(11865.9, 12137.3);\n    new ShapeRef(router, polygon, 2262);\n\n    // shapeRef2263\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(12922.5, 12137.3);\n    polygon.ps[1] = Point(12922.5, 12208.9);\n    polygon.ps[2] = Point(12861.9, 12208.9);\n    polygon.ps[3] = Point(12861.9, 12137.3);\n    new ShapeRef(router, polygon, 2263);\n\n    // shapeRef2264\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(7598.1, 2950.06);\n    polygon.ps[1] = Point(7598.1, 3008.29);\n    polygon.ps[2] = Point(7553.4, 3008.29);\n    polygon.ps[3] = Point(7553.4, 2950.06);\n    new ShapeRef(router, polygon, 2264);\n\n    // shapeRef2265\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(253, 148.265);\n    polygon.ps[1] = Point(253, 208.827);\n    polygon.ps[2] = Point(181.401, 208.827);\n    polygon.ps[3] = Point(181.401, 148.265);\n    new ShapeRef(router, polygon, 2265);\n\n    // shapeRef2266\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(5486.1, 4575.4);\n    polygon.ps[1] = Point(5486.1, 4659.5);\n    polygon.ps[2] = Point(5439.86, 4659.5);\n    polygon.ps[3] = Point(5439.86, 4575.4);\n    new ShapeRef(router, polygon, 2266);\n\n    // shapeRef2267\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(5486.1, 5169.4);\n    polygon.ps[1] = Point(5486.1, 5253.5);\n    polygon.ps[2] = Point(5439.86, 5253.5);\n    polygon.ps[3] = Point(5439.86, 5169.4);\n    new ShapeRef(router, polygon, 2267);\n\n    // shapeRef2268\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(11296.4, 4202.51);\n    polygon.ps[1] = Point(11296.4, 4247.21);\n    polygon.ps[2] = Point(11238.2, 4247.21);\n    polygon.ps[3] = Point(11238.2, 4202.51);\n    new ShapeRef(router, polygon, 2268);\n\n    // shapeRef2269\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(16127.2, 11396.8);\n    polygon.ps[1] = Point(16127.2, 11468.4);\n    polygon.ps[2] = Point(16066.6, 11468.4);\n    polygon.ps[3] = Point(16066.6, 11396.8);\n    new ShapeRef(router, polygon, 2269);\n\n    // shapeRef2270\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9369.59, 9652.42);\n    polygon.ps[1] = Point(9369.59, 9728.65);\n    polygon.ps[2] = Point(9279.83, 9728.65);\n    polygon.ps[3] = Point(9279.83, 9652.42);\n    new ShapeRef(router, polygon, 2270);\n\n    // shapeRef2271\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8825.89, 2381.29);\n    polygon.ps[1] = Point(8825.89, 2465.38);\n    polygon.ps[2] = Point(8779.66, 2465.38);\n    polygon.ps[3] = Point(8779.66, 2381.29);\n    new ShapeRef(router, polygon, 2271);\n\n    // shapeRef2272\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(12521.5, 5224.91);\n    polygon.ps[1] = Point(12521.5, 5314.67);\n    polygon.ps[2] = Point(12445.3, 5314.67);\n    polygon.ps[3] = Point(12445.3, 5224.91);\n    new ShapeRef(router, polygon, 2272);\n\n    // shapeRef2273\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(13012.3, 4519.4);\n    polygon.ps[1] = Point(13012.3, 4595.63);\n    polygon.ps[2] = Point(12922.5, 4595.63);\n    polygon.ps[3] = Point(12922.5, 4519.4);\n    new ShapeRef(router, polygon, 2273);\n\n    // shapeRef2274\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(11238.2, 8883.22);\n    polygon.ps[1] = Point(11238.2, 8929.45);\n    polygon.ps[2] = Point(11154.1, 8929.45);\n    polygon.ps[3] = Point(11154.1, 8883.22);\n    new ShapeRef(router, polygon, 2274);\n\n    // shapeRef2275\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(15721.4, 468.265);\n    polygon.ps[1] = Point(15721.4, 514.5);\n    polygon.ps[2] = Point(15637.3, 514.5);\n    polygon.ps[3] = Point(15637.3, 468.265);\n    new ShapeRef(router, polygon, 2275);\n\n    // shapeRef2276\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(11106.2, 8084.79);\n    polygon.ps[1] = Point(11106.2, 8131.03);\n    polygon.ps[2] = Point(11022.1, 8131.03);\n    polygon.ps[3] = Point(11022.1, 8084.79);\n    new ShapeRef(router, polygon, 2276);\n\n    // shapeRef2277\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(14682.1, 6798.21);\n    polygon.ps[1] = Point(14682.1, 6844.44);\n    polygon.ps[2] = Point(14598, 6844.44);\n    polygon.ps[3] = Point(14598, 6798.21);\n    new ShapeRef(router, polygon, 2277);\n\n    // shapeRef2278\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(10314.9, 9618.65);\n    polygon.ps[1] = Point(10314.9, 9708.42);\n    polygon.ps[2] = Point(10238.7, 9708.42);\n    polygon.ps[3] = Point(10238.7, 9618.65);\n    new ShapeRef(router, polygon, 2278);\n\n    // shapeRef2279\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(14986.9, 12302.3);\n    polygon.ps[1] = Point(14986.9, 12348.5);\n    polygon.ps[2] = Point(14902.8, 12348.5);\n    polygon.ps[3] = Point(14902.8, 12302.3);\n    new ShapeRef(router, polygon, 2279);\n\n    // shapeRef2280\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(14291.7, 12302.3);\n    polygon.ps[1] = Point(14291.7, 12378.5);\n    polygon.ps[2] = Point(14202, 12378.5);\n    polygon.ps[3] = Point(14202, 12302.3);\n    new ShapeRef(router, polygon, 2280);\n\n    // shapeRef2281\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(15765.9, 10791.3);\n    polygon.ps[1] = Point(15765.9, 10867.5);\n    polygon.ps[2] = Point(15676.1, 10867.5);\n    polygon.ps[3] = Point(15676.1, 10791.3);\n    new ShapeRef(router, polygon, 2281);\n\n    // shapeRef2282\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(7755.29, 851.285);\n    polygon.ps[1] = Point(7755.29, 935.383);\n    polygon.ps[2] = Point(7709.06, 935.383);\n    polygon.ps[3] = Point(7709.06, 851.285);\n    new ShapeRef(router, polygon, 2282);\n\n    // shapeRef2283\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(12008.2, 12137.3);\n    polygon.ps[1] = Point(12008.2, 12183.5);\n    polygon.ps[2] = Point(11924.1, 12183.5);\n    polygon.ps[3] = Point(11924.1, 12137.3);\n    new ShapeRef(router, polygon, 2283);\n\n    // shapeRef2284\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(13006.6, 12137.3);\n    polygon.ps[1] = Point(13006.6, 12183.5);\n    polygon.ps[2] = Point(12922.5, 12183.5);\n    polygon.ps[3] = Point(12922.5, 12137.3);\n    new ShapeRef(router, polygon, 2284);\n\n    // shapeRef2285\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(7598.1, 3008.29);\n    polygon.ps[1] = Point(7598.1, 3092.38);\n    polygon.ps[2] = Point(7551.86, 3092.38);\n    polygon.ps[3] = Point(7551.86, 3008.29);\n    new ShapeRef(router, polygon, 2285);\n\n    // shapeRef2286\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(253, 58.5019);\n    polygon.ps[1] = Point(253, 148.265);\n    polygon.ps[2] = Point(176.77, 148.265);\n    polygon.ps[3] = Point(176.77, 58.5019);\n    new ShapeRef(router, polygon, 2286);\n\n    // shapeRef2287\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(5486.1, 4491.31);\n    polygon.ps[1] = Point(5486.1, 4575.4);\n    polygon.ps[2] = Point(5439.86, 4575.4);\n    polygon.ps[3] = Point(5439.86, 4491.31);\n    new ShapeRef(router, polygon, 2287);\n\n    // shapeRef2288\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(5486.1, 5085.31);\n    polygon.ps[1] = Point(5486.1, 5169.4);\n    polygon.ps[2] = Point(5439.86, 5169.4);\n    polygon.ps[3] = Point(5439.86, 5085.31);\n    new ShapeRef(router, polygon, 2288);\n\n    // shapeRef2289\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(11238.2, 4202.51);\n    polygon.ps[1] = Point(11238.2, 4248.75);\n    polygon.ps[2] = Point(11154.1, 4248.75);\n    polygon.ps[3] = Point(11154.1, 4202.51);\n    new ShapeRef(router, polygon, 2289);\n\n    // shapeRef2290\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(16066.6, 11396.8);\n    polygon.ps[1] = Point(16066.6, 11473.1);\n    polygon.ps[2] = Point(15976.8, 11473.1);\n    polygon.ps[3] = Point(15976.8, 11396.8);\n    new ShapeRef(router, polygon, 2290);\n\n    // shapeRef2291\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(4279, 9768.75);\n    polygon.ps[1] = Point(4279, 9877.02);\n    polygon.ps[2] = Point(4232.22, 9877.02);\n    polygon.ps[3] = Point(4232.22, 9768.75);\n    new ShapeRef(router, polygon, 2291);\n\n    // shapeRef2292\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(4859.27, 10448);\n    polygon.ps[1] = Point(4859.27, 10494.8);\n    polygon.ps[2] = Point(4751, 10494.8);\n    polygon.ps[3] = Point(4751, 10448);\n    new ShapeRef(router, polygon, 2292);\n\n    // shapeRef2293\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(4543, 10475);\n    polygon.ps[1] = Point(4543, 10583.3);\n    polygon.ps[2] = Point(4496.22, 10583.3);\n    polygon.ps[3] = Point(4496.22, 10475);\n    new ShapeRef(router, polygon, 2293);\n\n    // shapeRef2294\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9369.59, 9652.42);\n    polygon.ps[1] = Point(9369.59, 9748.77);\n    polygon.ps[2] = Point(9308.19, 9748.77);\n    polygon.ps[3] = Point(9308.19, 9652.42);\n    new ShapeRef(router, polygon, 2294);\n\n    // shapeRef2295\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(10667.2, 8579.99);\n    polygon.ps[1] = Point(10667.2, 8640.55);\n    polygon.ps[2] = Point(10595.6, 8640.55);\n    polygon.ps[3] = Point(10595.6, 8579.99);\n    new ShapeRef(router, polygon, 2295);\n\n    // shapeRef2296\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8825.89, 2381.29);\n    polygon.ps[1] = Point(8825.89, 2441.85);\n    polygon.ps[2] = Point(8754.29, 2441.85);\n    polygon.ps[3] = Point(8754.29, 2381.29);\n    new ShapeRef(router, polygon, 2296);\n\n    // shapeRef2297\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9812.25, 818.091);\n    polygon.ps[1] = Point(9812.25, 889.69);\n    polygon.ps[2] = Point(9751.69, 889.69);\n    polygon.ps[3] = Point(9751.69, 818.091);\n    new ShapeRef(router, polygon, 2297);\n\n    // shapeRef2298\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(10964.2, 1115.29);\n    polygon.ps[1] = Point(10964.2, 1176.69);\n    polygon.ps[2] = Point(10867.9, 1176.69);\n    polygon.ps[3] = Point(10867.9, 1115.29);\n    new ShapeRef(router, polygon, 2298);\n\n    // shapeRef2299\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(12521.5, 5253.27);\n    polygon.ps[1] = Point(12521.5, 5314.67);\n    polygon.ps[2] = Point(12425.1, 5314.67);\n    polygon.ps[3] = Point(12425.1, 5253.27);\n    new ShapeRef(router, polygon, 2299);\n\n    // shapeRef2300\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(12983.9, 4519.4);\n    polygon.ps[1] = Point(12983.9, 4615.76);\n    polygon.ps[2] = Point(12922.5, 4615.76);\n    polygon.ps[3] = Point(12922.5, 4519.4);\n    new ShapeRef(router, polygon, 2300);\n\n    // shapeRef2301\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(10799.2, 7750.23);\n    polygon.ps[1] = Point(10799.2, 7810.79);\n    polygon.ps[2] = Point(10727.6, 7810.79);\n    polygon.ps[3] = Point(10727.6, 7750.23);\n    new ShapeRef(router, polygon, 2301);\n\n    // shapeRef2302\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(11238.2, 8883.22);\n    polygon.ps[1] = Point(11238.2, 8954.82);\n    polygon.ps[2] = Point(11177.7, 8954.82);\n    polygon.ps[3] = Point(11177.7, 8883.22);\n    new ShapeRef(router, polygon, 2302);\n\n    // shapeRef2303\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(7536.66, 3575.51);\n    polygon.ps[1] = Point(7536.66, 3647.11);\n    polygon.ps[2] = Point(7476.1, 3647.11);\n    polygon.ps[3] = Point(7476.1, 3575.51);\n    new ShapeRef(router, polygon, 2303);\n\n    // shapeRef2304\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(5302, 4514.84);\n    polygon.ps[1] = Point(5302, 4575.4);\n    polygon.ps[2] = Point(5230.4, 4575.4);\n    polygon.ps[3] = Point(5230.4, 4514.84);\n    new ShapeRef(router, polygon, 2304);\n\n    // shapeRef2305\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(15697.8, 468.265);\n    polygon.ps[1] = Point(15697.8, 539.864);\n    polygon.ps[2] = Point(15637.3, 539.864);\n    polygon.ps[3] = Point(15637.3, 468.265);\n    new ShapeRef(router, polygon, 2305);\n\n    // shapeRef2306\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(11106.2, 8084.79);\n    polygon.ps[1] = Point(11106.2, 8156.39);\n    polygon.ps[2] = Point(11045.7, 8156.39);\n    polygon.ps[3] = Point(11045.7, 8084.79);\n    new ShapeRef(router, polygon, 2306);\n\n    // shapeRef2307\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(6381.66, 435.265);\n    polygon.ps[1] = Point(6381.66, 506.864);\n    polygon.ps[2] = Point(6321.1, 506.864);\n    polygon.ps[3] = Point(6321.1, 435.265);\n    new ShapeRef(router, polygon, 2307);\n\n    // shapeRef2308\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(11238.2, 4371.11);\n    polygon.ps[1] = Point(11238.2, 4442.71);\n    polygon.ps[2] = Point(11177.7, 4442.71);\n    polygon.ps[3] = Point(11177.7, 4371.11);\n    new ShapeRef(router, polygon, 2308);\n\n    // shapeRef2309\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(14658.5, 6798.21);\n    polygon.ps[1] = Point(14658.5, 6869.81);\n    polygon.ps[2] = Point(14598, 6869.81);\n    polygon.ps[3] = Point(14598, 6798.21);\n    new ShapeRef(router, polygon, 2309);\n\n    // shapeRef2310\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(16557.8, 10184);\n    polygon.ps[1] = Point(16557.8, 10255.6);\n    polygon.ps[2] = Point(16497.3, 10255.6);\n    polygon.ps[3] = Point(16497.3, 10184);\n    new ShapeRef(router, polygon, 2310);\n\n    // shapeRef2311\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(10314.9, 9647.01);\n    polygon.ps[1] = Point(10314.9, 9708.42);\n    polygon.ps[2] = Point(10218.5, 9708.42);\n    polygon.ps[3] = Point(10218.5, 9647.01);\n    new ShapeRef(router, polygon, 2311);\n\n    // shapeRef2312\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(7953.29, 10955.4);\n    polygon.ps[1] = Point(7953.29, 11013.6);\n    polygon.ps[2] = Point(7908.6, 11013.6);\n    polygon.ps[3] = Point(7908.6, 10955.4);\n    new ShapeRef(router, polygon, 2312);\n\n    // shapeRef2313\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(12757.5, 11642.9);\n    polygon.ps[1] = Point(12757.5, 11714.5);\n    polygon.ps[2] = Point(12696.9, 11714.5);\n    polygon.ps[3] = Point(12696.9, 11642.9);\n    new ShapeRef(router, polygon, 2313);\n\n    // shapeRef2314\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(14986.9, 12302.3);\n    polygon.ps[1] = Point(14986.9, 12373.9);\n    polygon.ps[2] = Point(14926.3, 12373.9);\n    polygon.ps[3] = Point(14926.3, 12302.3);\n    new ShapeRef(router, polygon, 2314);\n\n    // shapeRef2315\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(14263.4, 12302.3);\n    polygon.ps[1] = Point(14263.4, 12398.7);\n    polygon.ps[2] = Point(14202, 12398.7);\n    polygon.ps[3] = Point(14202, 12302.3);\n    new ShapeRef(router, polygon, 2315);\n\n    // shapeRef2316\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(13101, 10791.3);\n    polygon.ps[1] = Point(13101, 10862.9);\n    polygon.ps[2] = Point(13040.4, 10862.9);\n    polygon.ps[3] = Point(13040.4, 10791.3);\n    new ShapeRef(router, polygon, 2316);\n\n    // shapeRef2317\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(15765.9, 10791.3);\n    polygon.ps[1] = Point(15765.9, 10887.6);\n    polygon.ps[2] = Point(15704.5, 10887.6);\n    polygon.ps[3] = Point(15704.5, 10791.3);\n    new ShapeRef(router, polygon, 2317);\n\n    // shapeRef2318\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(7755.29, 851.285);\n    polygon.ps[1] = Point(7755.29, 911.847);\n    polygon.ps[2] = Point(7683.69, 911.847);\n    polygon.ps[3] = Point(7683.69, 851.285);\n    new ShapeRef(router, polygon, 2318);\n\n    // shapeRef2319\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(11984.7, 12137.3);\n    polygon.ps[1] = Point(11984.7, 12208.9);\n    polygon.ps[2] = Point(11924.1, 12208.9);\n    polygon.ps[3] = Point(11924.1, 12137.3);\n    new ShapeRef(router, polygon, 2319);\n\n    // shapeRef2320\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(12983.1, 12137.3);\n    polygon.ps[1] = Point(12983.1, 12208.9);\n    polygon.ps[2] = Point(12922.5, 12208.9);\n    polygon.ps[3] = Point(12922.5, 12137.3);\n    new ShapeRef(router, polygon, 2320);\n\n    // shapeRef2321\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(7598.1, 3008.29);\n    polygon.ps[1] = Point(7598.1, 3068.85);\n    polygon.ps[2] = Point(7526.5, 3068.85);\n    polygon.ps[3] = Point(7526.5, 3008.29);\n    new ShapeRef(router, polygon, 2321);\n\n    // shapeRef2322\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(253, 86.8638);\n    polygon.ps[1] = Point(253, 148.265);\n    polygon.ps[2] = Point(156.647, 148.265);\n    polygon.ps[3] = Point(156.647, 86.8638);\n    new ShapeRef(router, polygon, 2322);\n\n    // shapeRef2323\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9009.99, 2381.29);\n    polygon.ps[1] = Point(9009.99, 2441.85);\n    polygon.ps[2] = Point(8938.39, 2441.85);\n    polygon.ps[3] = Point(8938.39, 2381.29);\n    new ShapeRef(router, polygon, 2323);\n\n    // shapeRef2324\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(13162.4, 4552.4);\n    polygon.ps[1] = Point(13162.4, 4648.76);\n    polygon.ps[2] = Point(13101, 4648.76);\n    polygon.ps[3] = Point(13101, 4552.4);\n    new ShapeRef(router, polygon, 2324);\n\n    // shapeRef2325\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(11238.2, 8966.82);\n    polygon.ps[1] = Point(11238.2, 9038.42);\n    polygon.ps[2] = Point(11177.7, 9038.42);\n    polygon.ps[3] = Point(11177.7, 8966.82);\n    new ShapeRef(router, polygon, 2325);\n\n    // shapeRef2326\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(5486.1, 4514.84);\n    polygon.ps[1] = Point(5486.1, 4575.4);\n    polygon.ps[2] = Point(5414.5, 4575.4);\n    polygon.ps[3] = Point(5414.5, 4514.84);\n    new ShapeRef(router, polygon, 2326);\n\n    // shapeRef2327\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(5486.1, 5108.84);\n    polygon.ps[1] = Point(5486.1, 5169.4);\n    polygon.ps[2] = Point(5414.5, 5169.4);\n    polygon.ps[3] = Point(5414.5, 5108.84);\n    new ShapeRef(router, polygon, 2327);\n\n    // shapeRef2328\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(11106.2, 8168.39);\n    polygon.ps[1] = Point(11106.2, 8239.99);\n    polygon.ps[2] = Point(11045.7, 8239.99);\n    polygon.ps[3] = Point(11045.7, 8168.39);\n    new ShapeRef(router, polygon, 2328);\n\n    // shapeRef2329\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(11238.2, 4202.51);\n    polygon.ps[1] = Point(11238.2, 4274.11);\n    polygon.ps[2] = Point(11177.7, 4274.11);\n    polygon.ps[3] = Point(11177.7, 4202.51);\n    new ShapeRef(router, polygon, 2329);\n\n    // shapeRef2330\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(14658.5, 6881.81);\n    polygon.ps[1] = Point(14658.5, 6953.4);\n    polygon.ps[2] = Point(14598, 6953.4);\n    polygon.ps[3] = Point(14598, 6881.81);\n    new ShapeRef(router, polygon, 2330);\n\n    // shapeRef2331\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(10089, 9647.01);\n    polygon.ps[1] = Point(10089, 9708.42);\n    polygon.ps[2] = Point(9992.69, 9708.42);\n    polygon.ps[3] = Point(9992.69, 9647.01);\n    new ShapeRef(router, polygon, 2331);\n\n    // shapeRef2332\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(16066.6, 11396.8);\n    polygon.ps[1] = Point(16066.6, 11493.2);\n    polygon.ps[2] = Point(16005.2, 11493.2);\n    polygon.ps[3] = Point(16005.2, 11396.8);\n    new ShapeRef(router, polygon, 2332);\n\n    // shapeRef2333\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(5302, 5108.84);\n    polygon.ps[1] = Point(5302, 5169.4);\n    polygon.ps[2] = Point(5230.4, 5169.4);\n    polygon.ps[3] = Point(5230.4, 5108.84);\n    new ShapeRef(router, polygon, 2333);\n\n    // shapeRef2334\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(4279, 9787.25);\n    polygon.ps[1] = Point(4279, 9877.02);\n    polygon.ps[2] = Point(4202.77, 9877.02);\n    polygon.ps[3] = Point(4202.77, 9787.25);\n    new ShapeRef(router, polygon, 2334);\n\n    // shapeRef2335\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(4840.76, 10448);\n    polygon.ps[1] = Point(4840.76, 10524.2);\n    polygon.ps[2] = Point(4751, 10524.2);\n    polygon.ps[3] = Point(4751, 10448);\n    new ShapeRef(router, polygon, 2335);\n\n    // shapeRef2336\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(4543, 10493.5);\n    polygon.ps[1] = Point(4543, 10583.3);\n    polygon.ps[2] = Point(4466.77, 10583.3);\n    polygon.ps[3] = Point(4466.77, 10493.5);\n    new ShapeRef(router, polygon, 2336);\n\n    // shapeRef2337\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(10512.2, 10692.3);\n    polygon.ps[1] = Point(10512.2, 10763.9);\n    polygon.ps[2] = Point(10451.7, 10763.9);\n    polygon.ps[3] = Point(10451.7, 10692.3);\n    new ShapeRef(router, polygon, 2337);\n\n    // shapeRef2338\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8392.29, 5522.67);\n    polygon.ps[1] = Point(8392.29, 5567.36);\n    polygon.ps[2] = Point(8334.07, 5567.36);\n    polygon.ps[3] = Point(8334.07, 5522.67);\n    new ShapeRef(router, polygon, 2338);\n\n    // shapeRef2339\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(11485.1, 7686.57);\n    polygon.ps[1] = Point(11485.1, 7744.79);\n    polygon.ps[2] = Point(11440.4, 7744.79);\n    polygon.ps[3] = Point(11440.4, 7686.57);\n    new ShapeRef(router, polygon, 2339);\n\n    // shapeRef2340\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(7887.29, 4443.4);\n    polygon.ps[1] = Point(7887.29, 4501.63);\n    polygon.ps[2] = Point(7842.6, 4501.63);\n    polygon.ps[3] = Point(7842.6, 4443.4);\n    new ShapeRef(router, polygon, 2340);\n\n    // shapeRef2341\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8792.89, 9990.92);\n    polygon.ps[1] = Point(8792.89, 10075);\n    polygon.ps[2] = Point(8746.66, 10075);\n    polygon.ps[3] = Point(8746.66, 9990.92);\n    new ShapeRef(router, polygon, 2341);\n\n    // shapeRef2342\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9009.99, 5573.8);\n    polygon.ps[1] = Point(9009.99, 5657.9);\n    polygon.ps[2] = Point(8963.76, 5657.9);\n    polygon.ps[3] = Point(8963.76, 5573.8);\n    new ShapeRef(router, polygon, 2342);\n\n    // shapeRef2343\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(15138.3, 11809.8);\n    polygon.ps[1] = Point(15138.3, 11893.9);\n    polygon.ps[2] = Point(15092.1, 11893.9);\n    polygon.ps[3] = Point(15092.1, 11809.8);\n    new ShapeRef(router, polygon, 2343);\n\n    // shapeRef2344\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9196.82, 6161.51);\n    polygon.ps[1] = Point(9196.82, 6206.21);\n    polygon.ps[2] = Point(9138.59, 6206.21);\n    polygon.ps[3] = Point(9138.59, 6161.51);\n    new ShapeRef(router, polygon, 2344);\n\n    // shapeRef2345\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(15229.5, 1346.29);\n    polygon.ps[1] = Point(15229.5, 1404.51);\n    polygon.ps[2] = Point(15184.8, 1404.51);\n    polygon.ps[3] = Point(15184.8, 1346.29);\n    new ShapeRef(router, polygon, 2345);\n\n    // shapeRef2346\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9453.69, 9652.42);\n    polygon.ps[1] = Point(9453.69, 9698.65);\n    polygon.ps[2] = Point(9369.59, 9698.65);\n    polygon.ps[3] = Point(9369.59, 9652.42);\n    new ShapeRef(router, polygon, 2346);\n\n    // shapeRef2347\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9394.82, 5457.98);\n    polygon.ps[1] = Point(9394.82, 5502.67);\n    polygon.ps[2] = Point(9336.59, 5502.67);\n    polygon.ps[3] = Point(9336.59, 5457.98);\n    new ShapeRef(router, polygon, 2347);\n\n    // shapeRef2348\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(15858.6, 11893.9);\n    polygon.ps[1] = Point(15858.6, 11952.1);\n    polygon.ps[2] = Point(15813.9, 11952.1);\n    polygon.ps[3] = Point(15813.9, 11893.9);\n    new ShapeRef(router, polygon, 2348);\n\n    // shapeRef2349\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(1583, 4783.4);\n    polygon.ps[1] = Point(1583, 4828.1);\n    polygon.ps[2] = Point(1524.77, 4828.1);\n    polygon.ps[3] = Point(1524.77, 4783.4);\n    new ShapeRef(router, polygon, 2349);\n\n    // shapeRef2350\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(3035, 4783.4);\n    polygon.ps[1] = Point(3035, 4828.1);\n    polygon.ps[2] = Point(2976.77, 4828.1);\n    polygon.ps[3] = Point(2976.77, 4783.4);\n    new ShapeRef(router, polygon, 2350);\n\n    // shapeRef2351\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(14788.2, 1356.29);\n    polygon.ps[1] = Point(14788.2, 1400.98);\n    polygon.ps[2] = Point(14730, 1400.98);\n    polygon.ps[3] = Point(14730, 1356.29);\n    new ShapeRef(router, polygon, 2351);\n\n    // shapeRef2352\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8227.29, 9685.42);\n    polygon.ps[1] = Point(8227.29, 9757.02);\n    polygon.ps[2] = Point(8166.73, 9757.02);\n    polygon.ps[3] = Point(8166.73, 9685.42);\n    new ShapeRef(router, polygon, 2352);\n\n    // shapeRef2353\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8326.29, 9854.02);\n    polygon.ps[1] = Point(8326.29, 9925.61);\n    polygon.ps[2] = Point(8265.73, 9925.61);\n    polygon.ps[3] = Point(8265.73, 9854.02);\n    new ShapeRef(router, polygon, 2353);\n\n    // shapeRef2354\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9875.92, 7171.4);\n    polygon.ps[1] = Point(9875.92, 7216.1);\n    polygon.ps[2] = Point(9817.69, 7216.1);\n    polygon.ps[3] = Point(9817.69, 7171.4);\n    new ShapeRef(router, polygon, 2354);\n\n    // shapeRef2355\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(10446.9, 7818.57);\n    polygon.ps[1] = Point(10446.9, 7876.79);\n    polygon.ps[2] = Point(10402.2, 7876.79);\n    polygon.ps[3] = Point(10402.2, 7818.57);\n    new ShapeRef(router, polygon, 2355);\n\n    // shapeRef2356\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(7499.1, 8008.79);\n    polygon.ps[1] = Point(7499.1, 8067.02);\n    polygon.ps[2] = Point(7454.4, 8067.02);\n    polygon.ps[3] = Point(7454.4, 8008.79);\n    new ShapeRef(router, polygon, 2356);\n\n    // shapeRef2357\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8825.89, 3961.51);\n    polygon.ps[1] = Point(8825.89, 4019.74);\n    polygon.ps[2] = Point(8781.2, 4019.74);\n    polygon.ps[3] = Point(8781.2, 3961.51);\n    new ShapeRef(router, polygon, 2357);\n\n    // shapeRef2358\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(10999.4, 4371.11);\n    polygon.ps[1] = Point(10999.4, 4415.81);\n    polygon.ps[2] = Point(10941.2, 4415.81);\n    polygon.ps[3] = Point(10941.2, 4371.11);\n    new ShapeRef(router, polygon, 2358);\n\n    // shapeRef2359\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(12521.5, 4971.4);\n    polygon.ps[1] = Point(12521.5, 5055.5);\n    polygon.ps[2] = Point(12475.3, 5055.5);\n    polygon.ps[3] = Point(12475.3, 4971.4);\n    new ShapeRef(router, polygon, 2359);\n\n    // shapeRef2360\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(12521.5, 3936.29);\n    polygon.ps[1] = Point(12521.5, 3994.51);\n    polygon.ps[2] = Point(12476.8, 3994.51);\n    polygon.ps[3] = Point(12476.8, 3936.29);\n    new ShapeRef(router, polygon, 2360);\n\n    // shapeRef2361\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(12521.5, 2221.72);\n    polygon.ps[1] = Point(12521.5, 2282.29);\n    polygon.ps[2] = Point(12449.9, 2282.29);\n    polygon.ps[3] = Point(12449.9, 2221.72);\n    new ShapeRef(router, polygon, 2361);\n\n    // shapeRef2362\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(12155.1, 1854.29);\n    polygon.ps[1] = Point(12155.1, 1898.98);\n    polygon.ps[2] = Point(12096.9, 1898.98);\n    polygon.ps[3] = Point(12096.9, 1854.29);\n    new ShapeRef(router, polygon, 2362);\n\n    // shapeRef2363\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(11980.1, 1742.29);\n    polygon.ps[1] = Point(11980.1, 1800.51);\n    polygon.ps[2] = Point(11935.4, 1800.51);\n    polygon.ps[3] = Point(11935.4, 1742.29);\n    new ShapeRef(router, polygon, 2363);\n\n    // shapeRef2364\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9840.69, 6415.51);\n    polygon.ps[1] = Point(9840.69, 6473.74);\n    polygon.ps[2] = Point(9795.99, 6473.74);\n    polygon.ps[3] = Point(9795.99, 6415.51);\n    new ShapeRef(router, polygon, 2364);\n\n    // shapeRef2365\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(5302, 3829.51);\n    polygon.ps[1] = Point(5302, 3913.61);\n    polygon.ps[2] = Point(5255.77, 3913.61);\n    polygon.ps[3] = Point(5255.77, 3829.51);\n    new ShapeRef(router, polygon, 2365);\n\n    // shapeRef2366\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(5302, 5169.4);\n    polygon.ps[1] = Point(5302, 5229.97);\n    polygon.ps[2] = Point(5230.4, 5229.97);\n    polygon.ps[3] = Point(5230.4, 5169.4);\n    new ShapeRef(router, polygon, 2366);\n\n    // shapeRef2367\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(4939, 8807.22);\n    polygon.ps[1] = Point(4939, 8891.32);\n    polygon.ps[2] = Point(4892.77, 8891.32);\n    polygon.ps[3] = Point(4892.77, 8807.22);\n    new ShapeRef(router, polygon, 2367);\n\n    // shapeRef2368\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(4939, 9312.42);\n    polygon.ps[1] = Point(4939, 9372.98);\n    polygon.ps[2] = Point(4867.4, 9372.98);\n    polygon.ps[3] = Point(4867.4, 9312.42);\n    new ShapeRef(router, polygon, 2368);\n\n    // shapeRef2369\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(4279, 9877.02);\n    polygon.ps[1] = Point(4279, 9937.58);\n    polygon.ps[2] = Point(4207.4, 9937.58);\n    polygon.ps[3] = Point(4207.4, 9877.02);\n    new ShapeRef(router, polygon, 2369);\n\n    // shapeRef2370\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(4751, 10448);\n    polygon.ps[1] = Point(4751, 10519.6);\n    polygon.ps[2] = Point(4690.44, 10519.6);\n    polygon.ps[3] = Point(4690.44, 10448);\n    new ShapeRef(router, polygon, 2370);\n\n    // shapeRef2371\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(4543, 10583.3);\n    polygon.ps[1] = Point(4543, 10643.8);\n    polygon.ps[2] = Point(4471.4, 10643.8);\n    polygon.ps[3] = Point(4471.4, 10583.3);\n    new ShapeRef(router, polygon, 2371);\n\n    // shapeRef2372\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(11353.1, 1478.29);\n    polygon.ps[1] = Point(11353.1, 1538.85);\n    polygon.ps[2] = Point(11281.5, 1538.85);\n    polygon.ps[3] = Point(11281.5, 1478.29);\n    new ShapeRef(router, polygon, 2372);\n\n    // shapeRef2373\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(7765.29, 435.265);\n    polygon.ps[1] = Point(7765.29, 479.96);\n    polygon.ps[2] = Point(7707.07, 479.96);\n    polygon.ps[3] = Point(7707.07, 435.265);\n    new ShapeRef(router, polygon, 2373);\n\n    // shapeRef2374\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(10832.2, 10980.6);\n    polygon.ps[1] = Point(10832.2, 11038.9);\n    polygon.ps[2] = Point(10787.5, 11038.9);\n    polygon.ps[3] = Point(10787.5, 10980.6);\n    new ShapeRef(router, polygon, 2374);\n\n    // shapeRef2375\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9718.69, 11221.6);\n    polygon.ps[1] = Point(9718.69, 11266.3);\n    polygon.ps[2] = Point(9660.46, 11266.3);\n    polygon.ps[3] = Point(9660.46, 11221.6);\n    new ShapeRef(router, polygon, 2375);\n\n    // shapeRef2376\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8684.29, 11221.6);\n    polygon.ps[1] = Point(8684.29, 11293.2);\n    polygon.ps[2] = Point(8623.73, 11293.2);\n    polygon.ps[3] = Point(8623.73, 11221.6);\n    new ShapeRef(router, polygon, 2376);\n\n    // shapeRef2377\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(14590.2, 11642.9);\n    polygon.ps[1] = Point(14590.2, 11687.6);\n    polygon.ps[2] = Point(14532, 11687.6);\n    polygon.ps[3] = Point(14532, 11642.9);\n    new ShapeRef(router, polygon, 2377);\n\n    // shapeRef2378\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(15858.6, 11835.7);\n    polygon.ps[1] = Point(15858.6, 11893.9);\n    polygon.ps[2] = Point(15813.9, 11893.9);\n    polygon.ps[3] = Point(15813.9, 11835.7);\n    new ShapeRef(router, polygon, 2378);\n\n    // shapeRef2379\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(15858.6, 12193.3);\n    polygon.ps[1] = Point(15858.6, 12251.5);\n    polygon.ps[2] = Point(15813.9, 12251.5);\n    polygon.ps[3] = Point(15813.9, 12193.3);\n    new ShapeRef(router, polygon, 2379);\n\n    // shapeRef2380\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(15662.5, 12302.3);\n    polygon.ps[1] = Point(15662.5, 12347);\n    polygon.ps[2] = Point(15604.3, 12347);\n    polygon.ps[3] = Point(15604.3, 12302.3);\n    new ShapeRef(router, polygon, 2380);\n\n    // shapeRef2381\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(14359.2, 10791.3);\n    polygon.ps[1] = Point(14359.2, 10836);\n    polygon.ps[2] = Point(14301, 10836);\n    polygon.ps[3] = Point(14301, 10791.3);\n    new ShapeRef(router, polygon, 2381);\n\n    // shapeRef2382\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(17213.5, 7139.71);\n    polygon.ps[1] = Point(17213.5, 7184.4);\n    polygon.ps[2] = Point(17155.3, 7184.4);\n    polygon.ps[3] = Point(17155.3, 7139.71);\n    new ShapeRef(router, polygon, 2382);\n\n    // shapeRef2383\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(11353.1, 8414.99);\n    polygon.ps[1] = Point(11353.1, 8473.22);\n    polygon.ps[2] = Point(11308.4, 8473.22);\n    polygon.ps[3] = Point(11308.4, 8414.99);\n    new ShapeRef(router, polygon, 2383);\n\n    // shapeRef2384\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(10776.2, 818.091);\n    polygon.ps[1] = Point(10776.2, 862.785);\n    polygon.ps[2] = Point(10718, 862.785);\n    polygon.ps[3] = Point(10718, 818.091);\n    new ShapeRef(router, polygon, 2384);\n\n    // shapeRef2385\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(12521.5, 5314.67);\n    polygon.ps[1] = Point(12521.5, 5398.77);\n    polygon.ps[2] = Point(12475.3, 5398.77);\n    polygon.ps[3] = Point(12475.3, 5314.67);\n    new ShapeRef(router, polygon, 2385);\n\n    // shapeRef2386\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(11914.1, 7785.57);\n    polygon.ps[1] = Point(11914.1, 7843.79);\n    polygon.ps[2] = Point(11869.4, 7843.79);\n    polygon.ps[3] = Point(11869.4, 7785.57);\n    new ShapeRef(router, polygon, 2386);\n\n    // shapeRef2387\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(5302, 4575.4);\n    polygon.ps[1] = Point(5302, 4635.97);\n    polygon.ps[2] = Point(5230.4, 4635.97);\n    polygon.ps[3] = Point(5230.4, 4575.4);\n    new ShapeRef(router, polygon, 2387);\n\n    // shapeRef2388\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(11528.1, 468.265);\n    polygon.ps[1] = Point(11528.1, 539.864);\n    polygon.ps[2] = Point(11467.6, 539.864);\n    polygon.ps[3] = Point(11467.6, 468.265);\n    new ShapeRef(router, polygon, 2388);\n\n    // shapeRef2389\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(14854.2, 468.265);\n    polygon.ps[1] = Point(14854.2, 512.96);\n    polygon.ps[2] = Point(14796, 512.96);\n    polygon.ps[3] = Point(14796, 468.265);\n    new ShapeRef(router, polygon, 2389);\n\n    // shapeRef2390\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(15637.3, 468.265);\n    polygon.ps[1] = Point(15637.3, 539.864);\n    polygon.ps[2] = Point(15576.7, 539.864);\n    polygon.ps[3] = Point(15576.7, 468.265);\n    new ShapeRef(router, polygon, 2390);\n\n    // shapeRef2391\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(16165.6, 468.265);\n    polygon.ps[1] = Point(16165.6, 512.96);\n    polygon.ps[2] = Point(16107.4, 512.96);\n    polygon.ps[3] = Point(16107.4, 468.265);\n    new ShapeRef(router, polygon, 2391);\n\n    // shapeRef2392\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(10776.2, 468.265);\n    polygon.ps[1] = Point(10776.2, 512.96);\n    polygon.ps[2] = Point(10718, 512.96);\n    polygon.ps[3] = Point(10718, 468.265);\n    new ShapeRef(router, polygon, 2392);\n\n    // shapeRef2393\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8087.52, 323.265);\n    polygon.ps[1] = Point(8087.52, 367.96);\n    polygon.ps[2] = Point(8029.29, 367.96);\n    polygon.ps[3] = Point(8029.29, 323.265);\n    new ShapeRef(router, polygon, 2393);\n\n    // shapeRef2394\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(18226.5, 8546.99);\n    polygon.ps[1] = Point(18226.5, 8605.22);\n    polygon.ps[2] = Point(18181.9, 8605.22);\n    polygon.ps[3] = Point(18181.9, 8546.99);\n    new ShapeRef(router, polygon, 2394);\n\n    // shapeRef2395\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8227.29, 10725.3);\n    polygon.ps[1] = Point(8227.29, 10770);\n    polygon.ps[2] = Point(8169.07, 10770);\n    polygon.ps[3] = Point(8169.07, 10725.3);\n    new ShapeRef(router, polygon, 2395);\n\n    // shapeRef2396\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(14202, 12302.3);\n    polygon.ps[1] = Point(14202, 12348.5);\n    polygon.ps[2] = Point(14117.9, 12348.5);\n    polygon.ps[3] = Point(14117.9, 12302.3);\n    new ShapeRef(router, polygon, 2396);\n\n    // shapeRef2397\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(15826.4, 10791.3);\n    polygon.ps[1] = Point(15826.4, 10862.9);\n    polygon.ps[2] = Point(15765.9, 10862.9);\n    polygon.ps[3] = Point(15765.9, 10791.3);\n    new ShapeRef(router, polygon, 2397);\n\n    // shapeRef2398\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(7755.29, 767.188);\n    polygon.ps[1] = Point(7755.29, 851.285);\n    polygon.ps[2] = Point(7709.06, 851.285);\n    polygon.ps[3] = Point(7709.06, 767.188);\n    new ShapeRef(router, polygon, 2398);\n\n    // shapeRef2399\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(11353.1, 3280.06);\n    polygon.ps[1] = Point(11353.1, 3338.29);\n    polygon.ps[2] = Point(11308.4, 3338.29);\n    polygon.ps[3] = Point(11308.4, 3280.06);\n    new ShapeRef(router, polygon, 2399);\n\n    // shapeRef2400\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(11353.1, 4418.18);\n    polygon.ps[1] = Point(11353.1, 4476.4);\n    polygon.ps[2] = Point(11308.4, 4476.4);\n    polygon.ps[3] = Point(11308.4, 4418.18);\n    new ShapeRef(router, polygon, 2400);\n\n    // shapeRef2401\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(11353.1, 11120.4);\n    polygon.ps[1] = Point(11353.1, 11178.6);\n    polygon.ps[2] = Point(11308.4, 11178.6);\n    polygon.ps[3] = Point(11308.4, 11120.4);\n    new ShapeRef(router, polygon, 2401);\n\n    // shapeRef2402\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(12922.5, 12137.3);\n    polygon.ps[1] = Point(12922.5, 12183.5);\n    polygon.ps[2] = Point(12838.4, 12183.5);\n    polygon.ps[3] = Point(12838.4, 12137.3);\n    new ShapeRef(router, polygon, 2402);\n\n    // shapeRef2403\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(16066.6, 11804.9);\n    polygon.ps[1] = Point(16066.6, 11876.5);\n    polygon.ps[2] = Point(16006, 11876.5);\n    polygon.ps[3] = Point(16006, 11804.9);\n    new ShapeRef(router, polygon, 2403);\n\n    // shapeRef2404\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8448.29, 1478.29);\n    polygon.ps[1] = Point(8448.29, 1536.51);\n    polygon.ps[2] = Point(8403.6, 1536.51);\n    polygon.ps[3] = Point(8403.6, 1478.29);\n    new ShapeRef(router, polygon, 2404);\n\n    // shapeRef2405\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(5486.1, 4575.4);\n    polygon.ps[1] = Point(5486.1, 4635.97);\n    polygon.ps[2] = Point(5414.5, 4635.97);\n    polygon.ps[3] = Point(5414.5, 4575.4);\n    new ShapeRef(router, polygon, 2405);\n\n    // shapeRef2406\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(5486.1, 5169.4);\n    polygon.ps[1] = Point(5486.1, 5229.97);\n    polygon.ps[2] = Point(5414.5, 5229.97);\n    polygon.ps[3] = Point(5414.5, 5169.4);\n    new ShapeRef(router, polygon, 2406);\n\n    // shapeRef2407\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(18574.3, 11927.6);\n    polygon.ps[1] = Point(18574.3, 11972.3);\n    polygon.ps[2] = Point(18516, 11972.3);\n    polygon.ps[3] = Point(18516, 11927.6);\n    new ShapeRef(router, polygon, 2407);\n\n    // shapeRef2408\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(10799.2, 5599.67);\n    polygon.ps[1] = Point(10799.2, 5657.9);\n    polygon.ps[2] = Point(10754.5, 5657.9);\n    polygon.ps[3] = Point(10754.5, 5599.67);\n    new ShapeRef(router, polygon, 2408);\n\n    // shapeRef2409\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(15664.8, 1191.29);\n    polygon.ps[1] = Point(15664.8, 1262.88);\n    polygon.ps[2] = Point(15604.3, 1262.88);\n    polygon.ps[3] = Point(15604.3, 1191.29);\n    new ShapeRef(router, polygon, 2409);\n\n    // shapeRef2410\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(16150.7, 11396.8);\n    polygon.ps[1] = Point(16150.7, 11443.1);\n    polygon.ps[2] = Point(16066.6, 11443.1);\n    polygon.ps[3] = Point(16066.6, 11396.8);\n    new ShapeRef(router, polygon, 2410);\n\n    // shapeRef2411\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9675.69, 7359.4);\n    polygon.ps[1] = Point(9675.69, 7419.97);\n    polygon.ps[2] = Point(9604.09, 7419.97);\n    polygon.ps[3] = Point(9604.09, 7359.4);\n    new ShapeRef(router, polygon, 2411);\n\n    // shapeRef2412\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(12980.7, 12468.7);\n    polygon.ps[1] = Point(12980.7, 12513.3);\n    polygon.ps[2] = Point(12922.5, 12513.3);\n    polygon.ps[3] = Point(12922.5, 12468.7);\n    new ShapeRef(router, polygon, 2412);\n\n    // shapeRef2413\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(10603.4, 4371.11);\n    polygon.ps[1] = Point(10603.4, 4415.81);\n    polygon.ps[2] = Point(10545.2, 4415.81);\n    polygon.ps[3] = Point(10545.2, 4371.11);\n    new ShapeRef(router, polygon, 2413);\n\n    // shapeRef2414\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(10669.4, 4454.71);\n    polygon.ps[1] = Point(10669.4, 4499.4);\n    polygon.ps[2] = Point(10611.2, 4499.4);\n    polygon.ps[3] = Point(10611.2, 4454.71);\n    new ShapeRef(router, polygon, 2414);\n\n    // shapeRef2415\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(12279.4, 4371.11);\n    polygon.ps[1] = Point(12279.4, 4415.81);\n    polygon.ps[2] = Point(12221.1, 4415.81);\n    polygon.ps[3] = Point(12221.1, 4371.11);\n    new ShapeRef(router, polygon, 2415);\n\n    // shapeRef2416\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(11417.8, 1057.06);\n    polygon.ps[1] = Point(11417.8, 1115.29);\n    polygon.ps[2] = Point(11373.1, 1115.29);\n    polygon.ps[3] = Point(11373.1, 1057.06);\n    new ShapeRef(router, polygon, 2416);\n\n    // shapeRef2417\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(11586.4, 468.265);\n    polygon.ps[1] = Point(11586.4, 512.96);\n    polygon.ps[2] = Point(11528.1, 512.96);\n    polygon.ps[3] = Point(11528.1, 468.265);\n    new ShapeRef(router, polygon, 2417);\n\n    // shapeRef2418\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(12015.4, 468.265);\n    polygon.ps[1] = Point(12015.4, 512.96);\n    polygon.ps[2] = Point(11957.1, 512.96);\n    polygon.ps[3] = Point(11957.1, 468.265);\n    new ShapeRef(router, polygon, 2418);\n\n    // shapeRef2419\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(15045.1, 1291.59);\n    polygon.ps[1] = Point(15045.1, 1336.29);\n    polygon.ps[2] = Point(14986.9, 1336.29);\n    polygon.ps[3] = Point(14986.9, 1291.59);\n    new ShapeRef(router, polygon, 2419);\n\n    // shapeRef2420\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(13258.2, 468.265);\n    polygon.ps[1] = Point(13258.2, 512.96);\n    polygon.ps[2] = Point(13200, 512.96);\n    polygon.ps[3] = Point(13200, 468.265);\n    new ShapeRef(router, polygon, 2420);\n\n    // shapeRef2421\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(16223.8, 468.265);\n    polygon.ps[1] = Point(16223.8, 512.96);\n    polygon.ps[2] = Point(16165.6, 512.96);\n    polygon.ps[3] = Point(16165.6, 468.265);\n    new ShapeRef(router, polygon, 2421);\n\n    // shapeRef2422\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8029.29, 323.265);\n    polygon.ps[1] = Point(8029.29, 367.96);\n    polygon.ps[2] = Point(7971.07, 367.96);\n    polygon.ps[3] = Point(7971.07, 323.265);\n    new ShapeRef(router, polygon, 2422);\n\n    // shapeRef2423\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(14858.4, 1356.29);\n    polygon.ps[1] = Point(14858.4, 1400.98);\n    polygon.ps[2] = Point(14800.2, 1400.98);\n    polygon.ps[3] = Point(14800.2, 1356.29);\n    new ShapeRef(router, polygon, 2423);\n\n    // shapeRef2424\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(11353.1, 11178.6);\n    polygon.ps[1] = Point(11353.1, 11236.9);\n    polygon.ps[2] = Point(11308.4, 11236.9);\n    polygon.ps[3] = Point(11308.4, 11178.6);\n    new ShapeRef(router, polygon, 2424);\n\n    // shapeRef2425\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(7598.1, 1412.29);\n    polygon.ps[1] = Point(7598.1, 1470.51);\n    polygon.ps[2] = Point(7553.4, 1470.51);\n    polygon.ps[3] = Point(7553.4, 1412.29);\n    new ShapeRef(router, polygon, 2425);\n\n    // shapeRef2426\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(14730, 1356.29);\n    polygon.ps[1] = Point(14730, 1400.98);\n    polygon.ps[2] = Point(14671.8, 1400.98);\n    polygon.ps[3] = Point(14671.8, 1356.29);\n    new ShapeRef(router, polygon, 2426);\n\n    // shapeRef2427\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8287.86, 9685.42);\n    polygon.ps[1] = Point(8287.86, 9757.02);\n    polygon.ps[2] = Point(8227.29, 9757.02);\n    polygon.ps[3] = Point(8227.29, 9685.42);\n    new ShapeRef(router, polygon, 2427);\n\n    // shapeRef2428\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8386.86, 9854.02);\n    polygon.ps[1] = Point(8386.86, 9925.61);\n    polygon.ps[2] = Point(8326.29, 9925.61);\n    polygon.ps[3] = Point(8326.29, 9854.02);\n    new ShapeRef(router, polygon, 2428);\n\n    // shapeRef2429\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8448.29, 1420.06);\n    polygon.ps[1] = Point(8448.29, 1478.29);\n    polygon.ps[2] = Point(8403.6, 1478.29);\n    polygon.ps[3] = Point(8403.6, 1420.06);\n    new ShapeRef(router, polygon, 2429);\n\n    // shapeRef2430\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(15893.8, 1291.59);\n    polygon.ps[1] = Point(15893.8, 1336.29);\n    polygon.ps[2] = Point(15835.6, 1336.29);\n    polygon.ps[3] = Point(15835.6, 1291.59);\n    new ShapeRef(router, polygon, 2430);\n\n    // shapeRef2431\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8825.89, 2297.19);\n    polygon.ps[1] = Point(8825.89, 2381.29);\n    polygon.ps[2] = Point(8779.66, 2381.29);\n    polygon.ps[3] = Point(8779.66, 2297.19);\n    new ShapeRef(router, polygon, 2431);\n\n    // shapeRef2432\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(10799.2, 7810.79);\n    polygon.ps[1] = Point(10799.2, 7894.89);\n    polygon.ps[2] = Point(10753, 7894.89);\n    polygon.ps[3] = Point(10753, 7810.79);\n    new ShapeRef(router, polygon, 2432);\n\n    // shapeRef2433\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(16353.6, 749.864);\n    polygon.ps[1] = Point(16353.6, 808.091);\n    polygon.ps[2] = Point(16308.9, 808.091);\n    polygon.ps[3] = Point(16308.9, 749.864);\n    new ShapeRef(router, polygon, 2433);\n\n    // shapeRef2434\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(16641.9, 10184);\n    polygon.ps[1] = Point(16641.9, 10230.2);\n    polygon.ps[2] = Point(16557.8, 10230.2);\n    polygon.ps[3] = Point(16557.8, 10184);\n    new ShapeRef(router, polygon, 2434);\n\n    // shapeRef2435\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(17297.6, 7138.17);\n    polygon.ps[1] = Point(17297.6, 7184.4);\n    polygon.ps[2] = Point(17213.5, 7184.4);\n    polygon.ps[3] = Point(17213.5, 7138.17);\n    new ShapeRef(router, polygon, 2435);\n\n    // shapeRef2436\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9009.99, 2297.19);\n    polygon.ps[1] = Point(9009.99, 2381.29);\n    polygon.ps[2] = Point(8963.76, 2381.29);\n    polygon.ps[3] = Point(8963.76, 2297.19);\n    new ShapeRef(router, polygon, 2436);\n\n    // shapeRef2437\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(4939, 9312.42);\n    polygon.ps[1] = Point(4939, 9396.51);\n    polygon.ps[2] = Point(4892.77, 9396.51);\n    polygon.ps[3] = Point(4892.77, 9312.42);\n    new ShapeRef(router, polygon, 2437);\n\n    // shapeRef2438\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(7565.1, 9081.42);\n    polygon.ps[1] = Point(7565.1, 9139.64);\n    polygon.ps[2] = Point(7520.4, 9139.64);\n    polygon.ps[3] = Point(7520.4, 9081.42);\n    new ShapeRef(router, polygon, 2438);\n\n    // shapeRef2439\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(4939, 7752.57);\n    polygon.ps[1] = Point(4939, 7810.79);\n    polygon.ps[2] = Point(4894.31, 7810.79);\n    polygon.ps[3] = Point(4894.31, 7752.57);\n    new ShapeRef(router, polygon, 2439);\n\n    // shapeRef2440\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(4939, 8323.76);\n    polygon.ps[1] = Point(4939, 8381.99);\n    polygon.ps[2] = Point(4894.31, 8381.99);\n    polygon.ps[3] = Point(4894.31, 8323.76);\n    new ShapeRef(router, polygon, 2440);\n\n    // shapeRef2441\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(14598, 6656.51);\n    polygon.ps[1] = Point(14598, 6701.21);\n    polygon.ps[2] = Point(14539.8, 6701.21);\n    polygon.ps[3] = Point(14539.8, 6656.51);\n    new ShapeRef(router, polygon, 2441);\n\n    // shapeRef2442\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(4939, 7810.79);\n    polygon.ps[1] = Point(4939, 7869.02);\n    polygon.ps[2] = Point(4894.31, 7869.02);\n    polygon.ps[3] = Point(4894.31, 7810.79);\n    new ShapeRef(router, polygon, 2442);\n\n    // shapeRef2443\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(4939, 8381.99);\n    polygon.ps[1] = Point(4939, 8440.22);\n    polygon.ps[2] = Point(4894.31, 8440.22);\n    polygon.ps[3] = Point(4894.31, 8381.99);\n    new ShapeRef(router, polygon, 2443);\n\n    // shapeRef2444\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(14656.2, 6656.51);\n    polygon.ps[1] = Point(14656.2, 6701.21);\n    polygon.ps[2] = Point(14598, 6701.21);\n    polygon.ps[3] = Point(14598, 6656.51);\n    new ShapeRef(router, polygon, 2444);\n\n    // shapeRef2445\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(4939, 8723.12);\n    polygon.ps[1] = Point(4939, 8807.22);\n    polygon.ps[2] = Point(4892.77, 8807.22);\n    polygon.ps[3] = Point(4892.77, 8723.12);\n    new ShapeRef(router, polygon, 2445);\n\n    // shapeRef2446\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(4939, 9228.32);\n    polygon.ps[1] = Point(4939, 9312.42);\n    polygon.ps[2] = Point(4892.77, 9312.42);\n    polygon.ps[3] = Point(4892.77, 9228.32);\n    new ShapeRef(router, polygon, 2446);\n\n    // shapeRef2447\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(7755.29, 1354.06);\n    polygon.ps[1] = Point(7755.29, 1412.29);\n    polygon.ps[2] = Point(7710.6, 1412.29);\n    polygon.ps[3] = Point(7710.6, 1354.06);\n    new ShapeRef(router, polygon, 2447);\n\n    // shapeRef2448\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(7598.1, 1354.06);\n    polygon.ps[1] = Point(7598.1, 1412.29);\n    polygon.ps[2] = Point(7553.4, 1412.29);\n    polygon.ps[3] = Point(7553.4, 1354.06);\n    new ShapeRef(router, polygon, 2448);\n\n    // shapeRef2449\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8328.79, 9774.02);\n    polygon.ps[1] = Point(8328.79, 9834.02);\n    polygon.ps[2] = Point(8273.79, 9834.02);\n    polygon.ps[3] = Point(8273.79, 9774.02);\n    new ShapeRef(router, polygon, 2449);\n\n    // shapeRef2450\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(10502.2, 9147.42);\n    polygon.ps[1] = Point(10502.2, 9205.64);\n    polygon.ps[2] = Point(10457.5, 9205.64);\n    polygon.ps[3] = Point(10457.5, 9147.42);\n    new ShapeRef(router, polygon, 2450);\n\n    // shapeRef2451\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9042.99, 8348.99);\n    polygon.ps[1] = Point(9042.99, 8407.22);\n    polygon.ps[2] = Point(8998.3, 8407.22);\n    polygon.ps[3] = Point(8998.3, 8348.99);\n    new ShapeRef(router, polygon, 2451);\n\n    // shapeRef2452\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(10964.2, 1115.29);\n    polygon.ps[1] = Point(10964.2, 1223.55);\n    polygon.ps[2] = Point(10917.4, 1223.55);\n    polygon.ps[3] = Point(10917.4, 1115.29);\n    new ShapeRef(router, polygon, 2452);\n\n    // shapeRef2453\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(12521.5, 4971.4);\n    polygon.ps[1] = Point(12521.5, 5031.97);\n    polygon.ps[2] = Point(12449.9, 5031.97);\n    polygon.ps[3] = Point(12449.9, 4971.4);\n    new ShapeRef(router, polygon, 2453);\n\n    // shapeRef2454\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(13030.8, 4519.4);\n    polygon.ps[1] = Point(13030.8, 4566.19);\n    polygon.ps[2] = Point(12922.5, 4566.19);\n    polygon.ps[3] = Point(12922.5, 4519.4);\n    new ShapeRef(router, polygon, 2454);\n\n    // shapeRef2455\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(12521.5, 2198.19);\n    polygon.ps[1] = Point(12521.5, 2282.29);\n    polygon.ps[2] = Point(12475.3, 2282.29);\n    polygon.ps[3] = Point(12475.3, 2198.19);\n    new ShapeRef(router, polygon, 2455);\n\n    // shapeRef2456\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8711.86, 4202.51);\n    polygon.ps[1] = Point(8711.86, 4274.11);\n    polygon.ps[2] = Point(8651.29, 4274.11);\n    polygon.ps[3] = Point(8651.29, 4202.51);\n    new ShapeRef(router, polygon, 2456);\n\n    // shapeRef2457\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9019.99, 3443.51);\n    polygon.ps[1] = Point(9019.99, 3488.21);\n    polygon.ps[2] = Point(8961.76, 3488.21);\n    polygon.ps[3] = Point(8961.76, 3443.51);\n    new ShapeRef(router, polygon, 2457);\n\n    // shapeRef2458\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(13324.2, 8883.22);\n    polygon.ps[1] = Point(13324.2, 8927.91);\n    polygon.ps[2] = Point(13266, 8927.91);\n    polygon.ps[3] = Point(13266, 8883.22);\n    new ShapeRef(router, polygon, 2458);\n\n    // shapeRef2459\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9237.59, 11221.6);\n    polygon.ps[1] = Point(9237.59, 11266.3);\n    polygon.ps[2] = Point(9179.36, 11266.3);\n    polygon.ps[3] = Point(9179.36, 11221.6);\n    new ShapeRef(router, polygon, 2459);\n\n    // shapeRef2460\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8684.29, 11221.6);\n    polygon.ps[1] = Point(8684.29, 11267.9);\n    polygon.ps[2] = Point(8600.2, 11267.9);\n    polygon.ps[3] = Point(8600.2, 11221.6);\n    new ShapeRef(router, polygon, 2460);\n\n    // shapeRef2461\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(7202.1, 7293.4);\n    polygon.ps[1] = Point(7202.1, 7351.63);\n    polygon.ps[2] = Point(7157.4, 7351.63);\n    polygon.ps[3] = Point(7157.4, 7293.4);\n    new ShapeRef(router, polygon, 2461);\n\n    // shapeRef2462\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(7305.66, 6524.51);\n    polygon.ps[1] = Point(7305.66, 6596.11);\n    polygon.ps[2] = Point(7245.1, 6596.11);\n    polygon.ps[3] = Point(7245.1, 6524.51);\n    new ShapeRef(router, polygon, 2462);\n\n    // shapeRef2463\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(6387.1, 6798.21);\n    polygon.ps[1] = Point(6387.1, 6844.44);\n    polygon.ps[2] = Point(6303, 6844.44);\n    polygon.ps[3] = Point(6303, 6798.21);\n    new ShapeRef(router, polygon, 2463);\n\n    // shapeRef2464\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(15138.3, 10854.1);\n    polygon.ps[1] = Point(15138.3, 10914.6);\n    polygon.ps[2] = Point(15066.7, 10914.6);\n    polygon.ps[3] = Point(15066.7, 10854.1);\n    new ShapeRef(router, polygon, 2464);\n\n    // shapeRef2465\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9939.69, 9976.02);\n    polygon.ps[1] = Point(9939.69, 10034.2);\n    polygon.ps[2] = Point(9894.99, 10034.2);\n    polygon.ps[3] = Point(9894.99, 9976.02);\n    new ShapeRef(router, polygon, 2465);\n\n    // shapeRef2466\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(10314.9, 9383.85);\n    polygon.ps[1] = Point(10314.9, 9444.42);\n    polygon.ps[2] = Point(10243.3, 9444.42);\n    polygon.ps[3] = Point(10243.3, 9383.85);\n    new ShapeRef(router, polygon, 2466);\n\n    // shapeRef2467\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(13209.3, 4552.4);\n    polygon.ps[1] = Point(13209.3, 4599.19);\n    polygon.ps[2] = Point(13101, 4599.19);\n    polygon.ps[3] = Point(13101, 4552.4);\n    new ShapeRef(router, polygon, 2467);\n\n    // shapeRef2468\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8684.29, 11330.6);\n    polygon.ps[1] = Point(8684.29, 11376.8);\n    polygon.ps[2] = Point(8600.2, 11376.8);\n    polygon.ps[3] = Point(8600.2, 11330.6);\n    new ShapeRef(router, polygon, 2468);\n\n    // shapeRef2469\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(6542.1, 8041.79);\n    polygon.ps[1] = Point(6542.1, 8100.02);\n    polygon.ps[2] = Point(6497.4, 8100.02);\n    polygon.ps[3] = Point(6497.4, 8041.79);\n    new ShapeRef(router, polygon, 2469);\n\n    // shapeRef2470\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(10314.9, 9444.42);\n    polygon.ps[1] = Point(10314.9, 9502.64);\n    polygon.ps[2] = Point(10270.2, 9502.64);\n    polygon.ps[3] = Point(10270.2, 9444.42);\n    new ShapeRef(router, polygon, 2470);\n\n    // shapeRef2471\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9194.59, 11698.9);\n    polygon.ps[1] = Point(9194.59, 11757.1);\n    polygon.ps[2] = Point(9149.9, 11757.1);\n    polygon.ps[3] = Point(9149.9, 11698.9);\n    new ShapeRef(router, polygon, 2471);\n\n    // shapeRef2472\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(649, 148.265);\n    polygon.ps[1] = Point(649, 208.827);\n    polygon.ps[2] = Point(577.401, 208.827);\n    polygon.ps[3] = Point(577.401, 148.265);\n    new ShapeRef(router, polygon, 2472);\n\n    // shapeRef2473\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8792.89, 10014.5);\n    polygon.ps[1] = Point(8792.89, 10075);\n    polygon.ps[2] = Point(8721.29, 10075);\n    polygon.ps[3] = Point(8721.29, 10014.5);\n    new ShapeRef(router, polygon, 2473);\n\n    // shapeRef2474\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(253, 148.265);\n    polygon.ps[1] = Point(253, 232.363);\n    polygon.ps[2] = Point(206.765, 232.363);\n    polygon.ps[3] = Point(206.765, 148.265);\n    new ShapeRef(router, polygon, 2474);\n\n    // shapeRef2475\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9009.99, 5657.9);\n    polygon.ps[1] = Point(9009.99, 5716.12);\n    polygon.ps[2] = Point(8965.3, 5716.12);\n    polygon.ps[3] = Point(8965.3, 5657.9);\n    new ShapeRef(router, polygon, 2475);\n\n    // shapeRef2476\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(15138.3, 11893.9);\n    polygon.ps[1] = Point(15138.3, 11952.1);\n    polygon.ps[2] = Point(15093.7, 11952.1);\n    polygon.ps[3] = Point(15093.7, 11893.9);\n    new ShapeRef(router, polygon, 2476);\n\n    // shapeRef2477\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(10572.8, 10692.3);\n    polygon.ps[1] = Point(10572.8, 10763.9);\n    polygon.ps[2] = Point(10512.2, 10763.9);\n    polygon.ps[3] = Point(10512.2, 10692.3);\n    new ShapeRef(router, polygon, 2477);\n\n    // shapeRef2478\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(10667.2, 8521.76);\n    polygon.ps[1] = Point(10667.2, 8579.99);\n    polygon.ps[2] = Point(10622.5, 8579.99);\n    polygon.ps[3] = Point(10622.5, 8521.76);\n    new ShapeRef(router, polygon, 2478);\n\n    // shapeRef2479\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9751.69, 818.091);\n    polygon.ps[1] = Point(9751.69, 862.785);\n    polygon.ps[2] = Point(9693.46, 862.785);\n    polygon.ps[3] = Point(9693.46, 818.091);\n    new ShapeRef(router, polygon, 2479);\n\n    // shapeRef2480\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(10964.2, 1057.06);\n    polygon.ps[1] = Point(10964.2, 1115.29);\n    polygon.ps[2] = Point(10919.5, 1115.29);\n    polygon.ps[3] = Point(10919.5, 1057.06);\n    new ShapeRef(router, polygon, 2480);\n\n    // shapeRef2481\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(10799.2, 7810.79);\n    polygon.ps[1] = Point(10799.2, 7871.36);\n    polygon.ps[2] = Point(10727.6, 7871.36);\n    polygon.ps[3] = Point(10727.6, 7810.79);\n    new ShapeRef(router, polygon, 2481);\n\n    // shapeRef2482\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(7476.1, 3575.51);\n    polygon.ps[1] = Point(7476.1, 3620.21);\n    polygon.ps[2] = Point(7417.87, 3620.21);\n    polygon.ps[3] = Point(7417.87, 3575.51);\n    new ShapeRef(router, polygon, 2482);\n\n    // shapeRef2483\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(5302, 4575.4);\n    polygon.ps[1] = Point(5302, 4659.5);\n    polygon.ps[2] = Point(5255.77, 4659.5);\n    polygon.ps[3] = Point(5255.77, 4575.4);\n    new ShapeRef(router, polygon, 2483);\n\n    // shapeRef2484\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(6321.1, 435.265);\n    polygon.ps[1] = Point(6321.1, 479.96);\n    polygon.ps[2] = Point(6262.87, 479.96);\n    polygon.ps[3] = Point(6262.87, 435.265);\n    new ShapeRef(router, polygon, 2484);\n\n    // shapeRef2485\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(11296.4, 4371.11);\n    polygon.ps[1] = Point(11296.4, 4415.81);\n    polygon.ps[2] = Point(11238.2, 4415.81);\n    polygon.ps[3] = Point(11238.2, 4371.11);\n    new ShapeRef(router, polygon, 2485);\n\n    // shapeRef2486\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(16618.4, 10184);\n    polygon.ps[1] = Point(16618.4, 10255.6);\n    polygon.ps[2] = Point(16557.8, 10255.6);\n    polygon.ps[3] = Point(16557.8, 10184);\n    new ShapeRef(router, polygon, 2486);\n\n    // shapeRef2487\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(12815.7, 11642.9);\n    polygon.ps[1] = Point(12815.7, 11687.6);\n    polygon.ps[2] = Point(12757.5, 11687.6);\n    polygon.ps[3] = Point(12757.5, 11642.9);\n    new ShapeRef(router, polygon, 2487);\n\n    // shapeRef2488\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(13159.2, 10791.3);\n    polygon.ps[1] = Point(13159.2, 10836);\n    polygon.ps[2] = Point(13101, 10836);\n    polygon.ps[3] = Point(13101, 10791.3);\n    new ShapeRef(router, polygon, 2488);\n\n    // shapeRef2489\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9009.99, 2320.72);\n    polygon.ps[1] = Point(9009.99, 2381.29);\n    polygon.ps[2] = Point(8938.39, 2381.29);\n    polygon.ps[3] = Point(8938.39, 2320.72);\n    new ShapeRef(router, polygon, 2489);\n\n    // shapeRef2490\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(13101, 4552.4);\n    polygon.ps[1] = Point(13101, 4597.1);\n    polygon.ps[2] = Point(13042.8, 4597.1);\n    polygon.ps[3] = Point(13042.8, 4552.4);\n    new ShapeRef(router, polygon, 2490);\n\n    // shapeRef2491\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(11296.4, 8993.72);\n    polygon.ps[1] = Point(11296.4, 9038.42);\n    polygon.ps[2] = Point(11238.2, 9038.42);\n    polygon.ps[3] = Point(11238.2, 8993.72);\n    new ShapeRef(router, polygon, 2491);\n\n    // shapeRef2492\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(11164.4, 8195.3);\n    polygon.ps[1] = Point(11164.4, 8239.99);\n    polygon.ps[2] = Point(11106.2, 8239.99);\n    polygon.ps[3] = Point(11106.2, 8195.3);\n    new ShapeRef(router, polygon, 2492);\n\n    // shapeRef2493\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(14598, 6908.71);\n    polygon.ps[1] = Point(14598, 6953.4);\n    polygon.ps[2] = Point(14539.8, 6953.4);\n    polygon.ps[3] = Point(14539.8, 6908.71);\n    new ShapeRef(router, polygon, 2493);\n\n    // shapeRef2494\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(10037.4, 9708.42);\n    polygon.ps[1] = Point(10037.4, 9766.64);\n    polygon.ps[2] = Point(9992.69, 9766.64);\n    polygon.ps[3] = Point(9992.69, 9708.42);\n    new ShapeRef(router, polygon, 2494);\n\n    // shapeRef2495\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9835.79, 818.091);\n    polygon.ps[1] = Point(9835.79, 864.326);\n    polygon.ps[2] = Point(9751.69, 864.326);\n    polygon.ps[3] = Point(9751.69, 818.091);\n    new ShapeRef(router, polygon, 2495);\n\n    // shapeRef2496\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(10964.2, 1115.29);\n    polygon.ps[1] = Point(10964.2, 1205.05);\n    polygon.ps[2] = Point(10888, 1205.05);\n    polygon.ps[3] = Point(10888, 1115.29);\n    new ShapeRef(router, polygon, 2496);\n\n    // shapeRef2497\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(10799.2, 7726.7);\n    polygon.ps[1] = Point(10799.2, 7810.79);\n    polygon.ps[2] = Point(10753, 7810.79);\n    polygon.ps[3] = Point(10753, 7726.7);\n    new ShapeRef(router, polygon, 2497);\n\n    // shapeRef2498\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(7560.2, 3575.51);\n    polygon.ps[1] = Point(7560.2, 3621.75);\n    polygon.ps[2] = Point(7476.1, 3621.75);\n    polygon.ps[3] = Point(7476.1, 3575.51);\n    new ShapeRef(router, polygon, 2498);\n\n    // shapeRef2499\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(5302, 4491.31);\n    polygon.ps[1] = Point(5302, 4575.4);\n    polygon.ps[2] = Point(5255.77, 4575.4);\n    polygon.ps[3] = Point(5255.77, 4491.31);\n    new ShapeRef(router, polygon, 2499);\n\n    // shapeRef2500\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(6405.2, 435.265);\n    polygon.ps[1] = Point(6405.2, 481.5);\n    polygon.ps[2] = Point(6321.1, 481.5);\n    polygon.ps[3] = Point(6321.1, 435.265);\n    new ShapeRef(router, polygon, 2500);\n\n    // shapeRef2501\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(11238.2, 4371.11);\n    polygon.ps[1] = Point(11238.2, 4417.35);\n    polygon.ps[2] = Point(11154.1, 4417.35);\n    polygon.ps[3] = Point(11154.1, 4371.11);\n    new ShapeRef(router, polygon, 2501);\n\n    // shapeRef2502\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(16557.8, 10184);\n    polygon.ps[1] = Point(16557.8, 10230.2);\n    polygon.ps[2] = Point(16473.7, 10230.2);\n    polygon.ps[3] = Point(16473.7, 10184);\n    new ShapeRef(router, polygon, 2502);\n\n    // shapeRef2503\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(12757.5, 11642.9);\n    polygon.ps[1] = Point(12757.5, 11689.1);\n    polygon.ps[2] = Point(12673.4, 11689.1);\n    polygon.ps[3] = Point(12673.4, 11642.9);\n    new ShapeRef(router, polygon, 2503);\n\n    // shapeRef2504\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(13101, 10791.3);\n    polygon.ps[1] = Point(13101, 10837.5);\n    polygon.ps[2] = Point(13016.9, 10837.5);\n    polygon.ps[3] = Point(13016.9, 10791.3);\n    new ShapeRef(router, polygon, 2504);\n\n    // shapeRef2505\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9009.99, 2381.29);\n    polygon.ps[1] = Point(9009.99, 2465.38);\n    polygon.ps[2] = Point(8963.76, 2465.38);\n    polygon.ps[3] = Point(8963.76, 2381.29);\n    new ShapeRef(router, polygon, 2505);\n\n    // shapeRef2506\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(13190.7, 4552.4);\n    polygon.ps[1] = Point(13190.7, 4628.63);\n    polygon.ps[2] = Point(13101, 4628.63);\n    polygon.ps[3] = Point(13101, 4552.4);\n    new ShapeRef(router, polygon, 2506);\n\n    // shapeRef2507\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(11238.2, 8992.18);\n    polygon.ps[1] = Point(11238.2, 9038.42);\n    polygon.ps[2] = Point(11154.1, 9038.42);\n    polygon.ps[3] = Point(11154.1, 8992.18);\n    new ShapeRef(router, polygon, 2507);\n\n    // shapeRef2508\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(11106.2, 8193.76);\n    polygon.ps[1] = Point(11106.2, 8239.99);\n    polygon.ps[2] = Point(11022.1, 8239.99);\n    polygon.ps[3] = Point(11022.1, 8193.76);\n    new ShapeRef(router, polygon, 2508);\n\n    // shapeRef2509\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(14682.1, 6907.17);\n    polygon.ps[1] = Point(14682.1, 6953.4);\n    polygon.ps[2] = Point(14598, 6953.4);\n    polygon.ps[3] = Point(14598, 6907.17);\n    new ShapeRef(router, polygon, 2509);\n\n    // shapeRef2510\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(10068.9, 9618.65);\n    polygon.ps[1] = Point(10068.9, 9708.42);\n    polygon.ps[2] = Point(9992.69, 9708.42);\n    polygon.ps[3] = Point(9992.69, 9618.65);\n    new ShapeRef(router, polygon, 2510);\n\n    // shapeRef2511\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(5302, 5085.31);\n    polygon.ps[1] = Point(5302, 5169.4);\n    polygon.ps[2] = Point(5255.77, 5169.4);\n    polygon.ps[3] = Point(5255.77, 5085.31);\n    new ShapeRef(router, polygon, 2511);\n\n    // shapeRef2512\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(10512.2, 10692.3);\n    polygon.ps[1] = Point(10512.2, 10738.5);\n    polygon.ps[2] = Point(10428.1, 10738.5);\n    polygon.ps[3] = Point(10428.1, 10692.3);\n    new ShapeRef(router, polygon, 2512);\n\n    // shapeRef2513\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9194.59, 11638.3);\n    polygon.ps[1] = Point(9194.59, 11698.9);\n    polygon.ps[2] = Point(9122.99, 11698.9);\n    polygon.ps[3] = Point(9122.99, 11638.3);\n    new ShapeRef(router, polygon, 2513);\n\n    // shapeRef2514\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(649, 87.7033);\n    polygon.ps[1] = Point(649, 148.265);\n    polygon.ps[2] = Point(577.401, 148.265);\n    polygon.ps[3] = Point(577.401, 87.7033);\n    new ShapeRef(router, polygon, 2514);\n\n    // shapeRef2515\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9042.99, 8290.76);\n    polygon.ps[1] = Point(9042.99, 8348.99);\n    polygon.ps[2] = Point(8998.3, 8348.99);\n    polygon.ps[3] = Point(8998.3, 8290.76);\n    new ShapeRef(router, polygon, 2515);\n\n    // shapeRef2516\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9974.92, 11642.9);\n    polygon.ps[1] = Point(9974.92, 11687.6);\n    polygon.ps[2] = Point(9916.69, 11687.6);\n    polygon.ps[3] = Point(9916.69, 11642.9);\n    new ShapeRef(router, polygon, 2516);\n\n    // shapeRef2517\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(15138.3, 10914.6);\n    polygon.ps[1] = Point(15138.3, 10972.9);\n    polygon.ps[2] = Point(15093.7, 10972.9);\n    polygon.ps[3] = Point(15093.7, 10914.6);\n    new ShapeRef(router, polygon, 2517);\n\n    // shapeRef2518\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9009.99, 5597.33);\n    polygon.ps[1] = Point(9009.99, 5657.9);\n    polygon.ps[2] = Point(8938.39, 5657.9);\n    polygon.ps[3] = Point(8938.39, 5597.33);\n    new ShapeRef(router, polygon, 2518);\n\n    // shapeRef2519\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(15432.8, 1191.29);\n    polygon.ps[1] = Point(15432.8, 1235.98);\n    polygon.ps[2] = Point(15374.5, 1235.98);\n    polygon.ps[3] = Point(15374.5, 1191.29);\n    new ShapeRef(router, polygon, 2519);\n\n    // shapeRef2520\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(6783.1, 3575.51);\n    polygon.ps[1] = Point(6783.1, 3620.21);\n    polygon.ps[2] = Point(6724.87, 3620.21);\n    polygon.ps[3] = Point(6724.87, 3575.51);\n    new ShapeRef(router, polygon, 2520);\n\n    // shapeRef2521\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(5496.1, 5357.67);\n    polygon.ps[1] = Point(5496.1, 5402.36);\n    polygon.ps[2] = Point(5437.87, 5402.36);\n    polygon.ps[3] = Point(5437.87, 5357.67);\n    new ShapeRef(router, polygon, 2521);\n\n    // shapeRef2522\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(4949, 5974.59);\n    polygon.ps[1] = Point(4949, 6019.29);\n    polygon.ps[2] = Point(4890.77, 6019.29);\n    polygon.ps[3] = Point(4890.77, 5974.59);\n    new ShapeRef(router, polygon, 2522);\n\n    // shapeRef2523\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(4939, 6056.29);\n    polygon.ps[1] = Point(4939, 6114.51);\n    polygon.ps[2] = Point(4894.31, 6114.51);\n    polygon.ps[3] = Point(4894.31, 6056.29);\n    new ShapeRef(router, polygon, 2523);\n\n    // shapeRef2524\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8293.29, 435.265);\n    polygon.ps[1] = Point(8293.29, 479.96);\n    polygon.ps[2] = Point(8235.07, 479.96);\n    polygon.ps[3] = Point(8235.07, 435.265);\n    new ShapeRef(router, polygon, 2524);\n\n    // shapeRef2525\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(15173.6, 1191.29);\n    polygon.ps[1] = Point(15173.6, 1235.98);\n    polygon.ps[2] = Point(15115.3, 1235.98);\n    polygon.ps[3] = Point(15115.3, 1191.29);\n    new ShapeRef(router, polygon, 2525);\n\n    // shapeRef2526\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(5651.1, 4517.18);\n    polygon.ps[1] = Point(5651.1, 4575.4);\n    polygon.ps[2] = Point(5606.4, 4575.4);\n    polygon.ps[3] = Point(5606.4, 4517.18);\n    new ShapeRef(router, polygon, 2526);\n\n    // shapeRef2527\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(10170.7, 10372);\n    polygon.ps[1] = Point(10170.7, 10430.2);\n    polygon.ps[2] = Point(10126, 10430.2);\n    polygon.ps[3] = Point(10126, 10372);\n    new ShapeRef(router, polygon, 2527);\n\n    // shapeRef2528\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8285.52, 10725.3);\n    polygon.ps[1] = Point(8285.52, 10770);\n    polygon.ps[2] = Point(8227.29, 10770);\n    polygon.ps[3] = Point(8227.29, 10725.3);\n    new ShapeRef(router, polygon, 2528);\n\n    // shapeRef2529\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(6709.33, 7006.4);\n    polygon.ps[1] = Point(6709.33, 7051.1);\n    polygon.ps[2] = Point(6651.1, 7051.1);\n    polygon.ps[3] = Point(6651.1, 7006.4);\n    new ShapeRef(router, polygon, 2529);\n\n    // shapeRef2530\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(6542.1, 7579.79);\n    polygon.ps[1] = Point(6542.1, 7638.02);\n    polygon.ps[2] = Point(6497.4, 7638.02);\n    polygon.ps[3] = Point(6497.4, 7579.79);\n    new ShapeRef(router, polygon, 2530);\n\n    // shapeRef2531\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(7329.2, 6524.51);\n    polygon.ps[1] = Point(7329.2, 6570.75);\n    polygon.ps[2] = Point(7245.1, 6570.75);\n    polygon.ps[3] = Point(7245.1, 6524.51);\n    new ShapeRef(router, polygon, 2531);\n\n    // shapeRef2532\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(6387.1, 6798.21);\n    polygon.ps[1] = Point(6387.1, 6869.81);\n    polygon.ps[2] = Point(6326.54, 6869.81);\n    polygon.ps[3] = Point(6326.54, 6798.21);\n    new ShapeRef(router, polygon, 2532);\n\n    // shapeRef2533\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(5007.23, 5832.9);\n    polygon.ps[1] = Point(5007.23, 5877.59);\n    polygon.ps[2] = Point(4949, 5877.59);\n    polygon.ps[3] = Point(4949, 5832.9);\n    new ShapeRef(router, polygon, 2533);\n\n    // shapeRef2534\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(11353.1, 3338.29);\n    polygon.ps[1] = Point(11353.1, 3396.51);\n    polygon.ps[2] = Point(11308.4, 3396.51);\n    polygon.ps[3] = Point(11308.4, 3338.29);\n    new ShapeRef(router, polygon, 2534);\n\n    // shapeRef2535\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(15045.1, 1191.29);\n    polygon.ps[1] = Point(15045.1, 1235.98);\n    polygon.ps[2] = Point(14986.9, 1235.98);\n    polygon.ps[3] = Point(14986.9, 1191.29);\n    new ShapeRef(router, polygon, 2535);\n\n    // shapeRef2536\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(4939, 6151.51);\n    polygon.ps[1] = Point(4939, 6209.74);\n    polygon.ps[2] = Point(4894.31, 6209.74);\n    polygon.ps[3] = Point(4894.31, 6151.51);\n    new ShapeRef(router, polygon, 2536);\n\n    // shapeRef2537\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(15604.3, 1191.29);\n    polygon.ps[1] = Point(15604.3, 1235.98);\n    polygon.ps[2] = Point(15546, 1235.98);\n    polygon.ps[3] = Point(15546, 1191.29);\n    new ShapeRef(router, polygon, 2537);\n\n    // shapeRef2538\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(7755.29, 1412.29);\n    polygon.ps[1] = Point(7755.29, 1470.51);\n    polygon.ps[2] = Point(7710.6, 1470.51);\n    polygon.ps[3] = Point(7710.6, 1412.29);\n    new ShapeRef(router, polygon, 2538);\n\n    // shapeRef2539\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(12521.5, 3474.29);\n    polygon.ps[1] = Point(12521.5, 3532.51);\n    polygon.ps[2] = Point(12476.8, 3532.51);\n    polygon.ps[3] = Point(12476.8, 3474.29);\n    new ShapeRef(router, polygon, 2539);\n\n    // shapeRef2540\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(11353.1, 1420.06);\n    polygon.ps[1] = Point(11353.1, 1478.29);\n    polygon.ps[2] = Point(11308.4, 1478.29);\n    polygon.ps[3] = Point(11308.4, 1420.06);\n    new ShapeRef(router, polygon, 2540);\n\n    // shapeRef2541\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(16155.6, 749.864);\n    polygon.ps[1] = Point(16155.6, 808.091);\n    polygon.ps[2] = Point(16110.9, 808.091);\n    polygon.ps[3] = Point(16110.9, 749.864);\n    new ShapeRef(router, polygon, 2541);\n\n    // shapeRef2542\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(17274.1, 7112.81);\n    polygon.ps[1] = Point(17274.1, 7184.4);\n    polygon.ps[2] = Point(17213.5, 7184.4);\n    polygon.ps[3] = Point(17213.5, 7112.81);\n    new ShapeRef(router, polygon, 2542);\n\n    // shapeRef2543\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(11353.1, 2249.29);\n    polygon.ps[1] = Point(11353.1, 2307.51);\n    polygon.ps[2] = Point(11308.4, 2307.51);\n    polygon.ps[3] = Point(11308.4, 2249.29);\n    new ShapeRef(router, polygon, 2543);\n\n    // shapeRef2544\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9105.49, 2341.29);\n    polygon.ps[1] = Point(9105.49, 2381.29);\n    polygon.ps[2] = Point(9029.99, 2381.29);\n    polygon.ps[3] = Point(9029.99, 2341.29);\n    new ShapeRef(router, polygon, 2544);\n\n    // shapeRef2545\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(15479.8, 1356.29);\n    polygon.ps[1] = Point(15479.8, 1416.29);\n    polygon.ps[2] = Point(15424.8, 1416.29);\n    polygon.ps[3] = Point(15424.8, 1356.29);\n    new ShapeRef(router, polygon, 2545);\n\n    // shapeRef2546\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(15656.8, 1356.29);\n    polygon.ps[1] = Point(15656.8, 1416.29);\n    polygon.ps[2] = Point(15601.8, 1416.29);\n    polygon.ps[3] = Point(15601.8, 1356.29);\n    new ShapeRef(router, polygon, 2546);\n\n    // shapeRef2547\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8676.52, 993.285);\n    polygon.ps[1] = Point(8676.52, 1037.98);\n    polygon.ps[2] = Point(8618.29, 1037.98);\n    polygon.ps[3] = Point(8618.29, 993.285);\n    new ShapeRef(router, polygon, 2547);\n\n    // shapeRef2548\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8260.29, 818.091);\n    polygon.ps[1] = Point(8260.29, 862.785);\n    polygon.ps[2] = Point(8202.07, 862.785);\n    polygon.ps[3] = Point(8202.07, 818.091);\n    new ShapeRef(router, polygon, 2548);\n\n    // shapeRef2549\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8618.29, 993.285);\n    polygon.ps[1] = Point(8618.29, 1037.98);\n    polygon.ps[2] = Point(8560.07, 1037.98);\n    polygon.ps[3] = Point(8560.07, 993.285);\n    new ShapeRef(router, polygon, 2549);\n\n    // shapeRef2550\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(15325, 945.785);\n    polygon.ps[1] = Point(15325, 985.785);\n    polygon.ps[2] = Point(15249.5, 985.785);\n    polygon.ps[3] = Point(15249.5, 945.785);\n    new ShapeRef(router, polygon, 2550);\n\n    // shapeRef2551\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(14310.3, 12302.3);\n    polygon.ps[1] = Point(14310.3, 12349.1);\n    polygon.ps[2] = Point(14202, 12349.1);\n    polygon.ps[3] = Point(14202, 12302.3);\n    new ShapeRef(router, polygon, 2551);\n\n    // shapeRef2552\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9260.59, 5599.67);\n    polygon.ps[1] = Point(9260.59, 5657.9);\n    polygon.ps[2] = Point(9215.9, 5657.9);\n    polygon.ps[3] = Point(9215.9, 5599.67);\n    new ShapeRef(router, polygon, 2552);\n\n    // shapeRef2553\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9491.59, 10372);\n    polygon.ps[1] = Point(9491.59, 10430.2);\n    polygon.ps[2] = Point(9446.9, 10430.2);\n    polygon.ps[3] = Point(9446.9, 10372);\n    new ShapeRef(router, polygon, 2553);\n\n    // shapeRef2554\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(15765.9, 10791.3);\n    polygon.ps[1] = Point(15765.9, 10838.1);\n    polygon.ps[2] = Point(15657.6, 10838.1);\n    polygon.ps[3] = Point(15657.6, 10791.3);\n    new ShapeRef(router, polygon, 2554);\n\n    // shapeRef2555\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(10799.2, 5657.9);\n    polygon.ps[1] = Point(10799.2, 5716.12);\n    polygon.ps[2] = Point(10754.5, 5716.12);\n    polygon.ps[3] = Point(10754.5, 5657.9);\n    new ShapeRef(router, polygon, 2555);\n\n    // shapeRef2556\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(16066.6, 11396.8);\n    polygon.ps[1] = Point(16066.6, 11443.6);\n    polygon.ps[2] = Point(15958.3, 11443.6);\n    polygon.ps[3] = Point(15958.3, 11396.8);\n    new ShapeRef(router, polygon, 2556);\n\n    // shapeRef2557\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(12521.5, 3994.51);\n    polygon.ps[1] = Point(12521.5, 4052.74);\n    polygon.ps[2] = Point(12476.8, 4052.74);\n    polygon.ps[3] = Point(12476.8, 3994.51);\n    new ShapeRef(router, polygon, 2557);\n\n    // shapeRef2558\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(15115.3, 1191.29);\n    polygon.ps[1] = Point(15115.3, 1235.98);\n    polygon.ps[2] = Point(15057.1, 1235.98);\n    polygon.ps[3] = Point(15057.1, 1191.29);\n    new ShapeRef(router, polygon, 2558);\n\n    // shapeRef2559\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(13534.2, 3872.51);\n    polygon.ps[1] = Point(13534.2, 3917.21);\n    polygon.ps[2] = Point(13476, 3917.21);\n    polygon.ps[3] = Point(13476, 3872.51);\n    new ShapeRef(router, polygon, 2559);\n\n    // shapeRef2560\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(16056.6, 11547.7);\n    polygon.ps[1] = Point(16056.6, 11605.9);\n    polygon.ps[2] = Point(16011.9, 11605.9);\n    polygon.ps[3] = Point(16011.9, 11547.7);\n    new ShapeRef(router, polygon, 2560);\n\n    // shapeRef2561\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(13478.5, 3792.51);\n    polygon.ps[1] = Point(13478.5, 3852.51);\n    polygon.ps[2] = Point(13423.5, 3852.51);\n    polygon.ps[3] = Point(13423.5, 3792.51);\n    new ShapeRef(router, polygon, 2561);\n\n    // shapeRef2562\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(12353.1, 5244.67);\n    polygon.ps[1] = Point(12353.1, 5304.67);\n    polygon.ps[2] = Point(12298.1, 5304.67);\n    polygon.ps[3] = Point(12298.1, 5244.67);\n    new ShapeRef(router, polygon, 2562);\n\n    // shapeRef2563\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(12380.6, 5209.67);\n    polygon.ps[1] = Point(12380.6, 5304.67);\n    polygon.ps[2] = Point(12325.6, 5304.67);\n    polygon.ps[3] = Point(12325.6, 5209.67);\n    new ShapeRef(router, polygon, 2563);\n\n    // shapeRef2564\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(10314.9, 9600.15);\n    polygon.ps[1] = Point(10314.9, 9708.42);\n    polygon.ps[2] = Point(10268.1, 9708.42);\n    polygon.ps[3] = Point(10268.1, 9600.15);\n    new ShapeRef(router, polygon, 2564);\n\n    // shapeRef2565\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(10039.5, 9600.15);\n    polygon.ps[1] = Point(10039.5, 9708.42);\n    polygon.ps[2] = Point(9992.69, 9708.42);\n    polygon.ps[3] = Point(9992.69, 9600.15);\n    new ShapeRef(router, polygon, 2565);\n\n    // shapeRef2566\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(11528.1, 468.265);\n    polygon.ps[1] = Point(11528.1, 514.5);\n    polygon.ps[2] = Point(11444, 514.5);\n    polygon.ps[3] = Point(11444, 468.265);\n    new ShapeRef(router, polygon, 2566);\n\n    // shapeRef2567\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(11353.1, 6522.29);\n    polygon.ps[1] = Point(11353.1, 6580.51);\n    polygon.ps[2] = Point(11308.4, 6580.51);\n    polygon.ps[3] = Point(11308.4, 6522.29);\n    new ShapeRef(router, polygon, 2567);\n\n    // shapeRef2568\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(12749.7, 4004.51);\n    polygon.ps[1] = Point(12749.7, 4049.21);\n    polygon.ps[2] = Point(12691.5, 4049.21);\n    polygon.ps[3] = Point(12691.5, 4004.51);\n    new ShapeRef(router, polygon, 2568);\n\n    // shapeRef2569\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(15688.4, 1191.29);\n    polygon.ps[1] = Point(15688.4, 1237.52);\n    polygon.ps[2] = Point(15604.3, 1237.52);\n    polygon.ps[3] = Point(15604.3, 1191.29);\n    new ShapeRef(router, polygon, 2569);\n\n    // shapeRef2570\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(15954.1, 8410.49);\n    polygon.ps[1] = Point(15954.1, 8450.49);\n    polygon.ps[2] = Point(15878.6, 8450.49);\n    polygon.ps[3] = Point(15878.6, 8410.49);\n    new ShapeRef(router, polygon, 2570);\n\n    // shapeRef2571\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(16808.3, 8412.49);\n    polygon.ps[1] = Point(16808.3, 8452.49);\n    polygon.ps[2] = Point(16732.8, 8452.49);\n    polygon.ps[3] = Point(16732.8, 8412.49);\n    new ShapeRef(router, polygon, 2571);\n\n    // shapeRef2572\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(5084.5, 8361.99);\n    polygon.ps[1] = Point(5084.5, 8401.99);\n    polygon.ps[2] = Point(4959, 8401.99);\n    polygon.ps[3] = Point(4959, 8361.99);\n    new ShapeRef(router, polygon, 2572);\n\n    // shapeRef2573\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(5034.5, 8767.22);\n    polygon.ps[1] = Point(5034.5, 8807.22);\n    polygon.ps[2] = Point(4959, 8807.22);\n    polygon.ps[3] = Point(4959, 8767.22);\n    new ShapeRef(router, polygon, 2573);\n\n    // shapeRef2574\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(5084.5, 9292.42);\n    polygon.ps[1] = Point(5084.5, 9332.42);\n    polygon.ps[2] = Point(4959, 9332.42);\n    polygon.ps[3] = Point(4959, 9292.42);\n    new ShapeRef(router, polygon, 2574);\n\n    // shapeRef2575\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(4939, 9251.85);\n    polygon.ps[1] = Point(4939, 9312.42);\n    polygon.ps[2] = Point(4867.4, 9312.42);\n    polygon.ps[3] = Point(4867.4, 9251.85);\n    new ShapeRef(router, polygon, 2575);\n\n    // shapeRef2576\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(4279, 9815.61);\n    polygon.ps[1] = Point(4279, 9877.02);\n    polygon.ps[2] = Point(4182.65, 9877.02);\n    polygon.ps[3] = Point(4182.65, 9815.61);\n    new ShapeRef(router, polygon, 2576);\n\n    // shapeRef2577\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(4812.4, 10448);\n    polygon.ps[1] = Point(4812.4, 10544.4);\n    polygon.ps[2] = Point(4751, 10544.4);\n    polygon.ps[3] = Point(4751, 10448);\n    new ShapeRef(router, polygon, 2577);\n\n    // shapeRef2578\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(4543, 10521.9);\n    polygon.ps[1] = Point(4543, 10583.3);\n    polygon.ps[2] = Point(4446.65, 10583.3);\n    polygon.ps[3] = Point(4446.65, 10521.9);\n    new ShapeRef(router, polygon, 2578);\n\n    // shapeRef2579\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8742.52, 11221.6);\n    polygon.ps[1] = Point(8742.52, 11266.3);\n    polygon.ps[2] = Point(8684.29, 11266.3);\n    polygon.ps[3] = Point(8684.29, 11221.6);\n    new ShapeRef(router, polygon, 2579);\n\n    // shapeRef2580\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(5034.5, 9272.42);\n    polygon.ps[1] = Point(5034.5, 9312.42);\n    polygon.ps[2] = Point(4959, 9312.42);\n    polygon.ps[3] = Point(4959, 9272.42);\n    new ShapeRef(router, polygon, 2580);\n\n    // shapeRef2581\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(14334, 468.265);\n    polygon.ps[1] = Point(14334, 512.96);\n    polygon.ps[2] = Point(14275.8, 512.96);\n    polygon.ps[3] = Point(14275.8, 468.265);\n    new ShapeRef(router, polygon, 2581);\n\n    // shapeRef2582\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(14392.2, 468.265);\n    polygon.ps[1] = Point(14392.2, 512.96);\n    polygon.ps[2] = Point(14334, 512.96);\n    polygon.ps[3] = Point(14334, 468.265);\n    new ShapeRef(router, polygon, 2582);\n\n    // shapeRef2583\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(16124.8, 11804.9);\n    polygon.ps[1] = Point(16124.8, 11849.6);\n    polygon.ps[2] = Point(16066.6, 11849.6);\n    polygon.ps[3] = Point(16066.6, 11804.9);\n    new ShapeRef(router, polygon, 2583);\n\n    // shapeRef2584\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(16583, 7435.4);\n    polygon.ps[1] = Point(16583, 7480.1);\n    polygon.ps[2] = Point(16524.8, 7480.1);\n    polygon.ps[3] = Point(16524.8, 7435.4);\n    new ShapeRef(router, polygon, 2584);\n\n    // shapeRef2585\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9675.69, 7301.18);\n    polygon.ps[1] = Point(9675.69, 7359.4);\n    polygon.ps[2] = Point(9630.99, 7359.4);\n    polygon.ps[3] = Point(9630.99, 7301.18);\n    new ShapeRef(router, polygon, 2585);\n\n    // shapeRef2586\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(14916.7, 1356.29);\n    polygon.ps[1] = Point(14916.7, 1400.98);\n    polygon.ps[2] = Point(14858.4, 1400.98);\n    polygon.ps[3] = Point(14858.4, 1356.29);\n    new ShapeRef(router, polygon, 2586);\n\n    // shapeRef2587\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(13299, 9256.42);\n    polygon.ps[1] = Point(13299, 9301.11);\n    polygon.ps[2] = Point(13240.8, 9301.11);\n    polygon.ps[3] = Point(13240.8, 9256.42);\n    new ShapeRef(router, polygon, 2587);\n\n    // shapeRef2588\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(7202.1, 9213.42);\n    polygon.ps[1] = Point(7202.1, 9271.64);\n    polygon.ps[2] = Point(7157.4, 9271.64);\n    polygon.ps[3] = Point(7157.4, 9213.42);\n    new ShapeRef(router, polygon, 2588);\n\n    // shapeRef2589\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(6542.1, 9877.02);\n    polygon.ps[1] = Point(6542.1, 9935.24);\n    polygon.ps[2] = Point(6497.4, 9935.24);\n    polygon.ps[3] = Point(6497.4, 9877.02);\n    new ShapeRef(router, polygon, 2589);\n\n    // shapeRef2590\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(8219.52, 6524.51);\n    polygon.ps[1] = Point(8219.52, 6569.21);\n    polygon.ps[2] = Point(8161.29, 6569.21);\n    polygon.ps[3] = Point(8161.29, 6524.51);\n    new ShapeRef(router, polygon, 2590);\n\n    // shapeRef2591\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(6113.1, 7975.79);\n    polygon.ps[1] = Point(6113.1, 8034.02);\n    polygon.ps[2] = Point(6068.4, 8034.02);\n    polygon.ps[3] = Point(6068.4, 7975.79);\n    new ShapeRef(router, polygon, 2591);\n\n    // shapeRef2592\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(11240.7, 4122.51);\n    polygon.ps[1] = Point(11240.7, 4182.51);\n    polygon.ps[2] = Point(11185.7, 4182.51);\n    polygon.ps[3] = Point(11185.7, 4122.51);\n    new ShapeRef(router, polygon, 2592);\n\n    // shapeRef2593\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(10170.7, 10313.8);\n    polygon.ps[1] = Point(10170.7, 10372);\n    polygon.ps[2] = Point(10126, 10372);\n    polygon.ps[3] = Point(10126, 10313.8);\n    new ShapeRef(router, polygon, 2593);\n\n    // shapeRef2594\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(11662.6, 10711.3);\n    polygon.ps[1] = Point(11662.6, 10771.3);\n    polygon.ps[2] = Point(11607.6, 10771.3);\n    polygon.ps[3] = Point(11607.6, 10711.3);\n    new ShapeRef(router, polygon, 2594);\n\n    // shapeRef2595\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(14229.5, 12435.7);\n    polygon.ps[1] = Point(14229.5, 12530.7);\n    polygon.ps[2] = Point(14174.5, 12530.7);\n    polygon.ps[3] = Point(14174.5, 12435.7);\n    new ShapeRef(router, polygon, 2595);\n\n    // shapeRef2596\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(9675.69, 7359.4);\n    polygon.ps[1] = Point(9675.69, 7443.5);\n    polygon.ps[2] = Point(9629.45, 7443.5);\n    polygon.ps[3] = Point(9629.45, 7359.4);\n    new ShapeRef(router, polygon, 2596);\n\n    // shapeRef2597\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(649, 148.265);\n    polygon.ps[1] = Point(649, 232.363);\n    polygon.ps[2] = Point(602.765, 232.363);\n    polygon.ps[3] = Point(602.765, 148.265);\n    new ShapeRef(router, polygon, 2597);\n\n    // shapeRef2598\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(744.5, 145.765);\n    polygon.ps[1] = Point(744.5, 185.765);\n    polygon.ps[2] = Point(669, 185.765);\n    polygon.ps[3] = Point(669, 145.765);\n    new ShapeRef(router, polygon, 2598);\n\n    // shapeRef2599\n    polygon = Polygon(4);\n    polygon.ps[0] = Point(15138.3, 11833.3);\n    polygon.ps[1] = Point(15138.3, 11893.9);\n    polygon.ps[2] = Point(15066.7, 11893.9);\n    polygon.ps[3] = Point(15066.7, 11833.3);\n    new ShapeRef(router, polygon, 2599);\n\n    // connRef2600\n    connRef = new ConnRef(router, 2600);\n    srcPt = ConnEnd(Point(7765.29, 7425.4), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(7915.29, 7128.4), 4);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2601\n    connRef = new ConnRef(router, 2601);\n    srcPt = ConnEnd(Point(7945.29, 7128.4), 8);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(8293.29, 6854.21), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2602\n    connRef = new ConnRef(router, 2602);\n    srcPt = ConnEnd(Point(9435.59, 6963.4), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(9153.59, 6151.51), 8);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2603\n    connRef = new ConnRef(router, 2603);\n    srcPt = ConnEnd(Point(9123.59, 6151.51), 4);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(8835.89, 5512.67), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2604\n    connRef = new ConnRef(router, 2604);\n    srcPt = ConnEnd(Point(9123.59, 6151.51), 4);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(8293.29, 6854.21), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2605\n    connRef = new ConnRef(router, 2605);\n    srcPt = ConnEnd(Point(9435.59, 6963.4), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(9802.69, 7161.4), 4);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2606\n    connRef = new ConnRef(router, 2606);\n    srcPt = ConnEnd(Point(9832.69, 7161.4), 8);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(10149, 7458.4), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2607\n    connRef = new ConnRef(router, 2607);\n    srcPt = ConnEnd(Point(10611.2, 8282.99), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(10456.9, 7891.79), 2);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2608\n    connRef = new ConnRef(router, 2608);\n    srcPt = ConnEnd(Point(10456.9, 7861.79), 1);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(10149, 7458.4), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2609\n    connRef = new ConnRef(router, 2609);\n    srcPt = ConnEnd(Point(7831.29, 9477.42), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(7575.1, 9096.42), 2);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2610\n    connRef = new ConnRef(router, 2610);\n    srcPt = ConnEnd(Point(7575.1, 9066.42), 1);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(7410.1, 8579.99), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2611\n    connRef = new ConnRef(router, 2611);\n    srcPt = ConnEnd(Point(15239.5, 1511.29), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(15239.5, 1361.29), 2);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2612\n    connRef = new ConnRef(router, 2612);\n    srcPt = ConnEnd(Point(7831.29, 9477.42), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(15239.5, 1361.29), 2);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2613\n    connRef = new ConnRef(router, 2613);\n    srcPt = ConnEnd(Point(15239.5, 1331.29), 1);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(15239.5, 1181.29), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2614\n    connRef = new ConnRef(router, 2614);\n    srcPt = ConnEnd(Point(15239.5, 1331.29), 1);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(8684.29, 9976.02), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2615\n    connRef = new ConnRef(router, 2615);\n    srcPt = ConnEnd(Point(10116, 9345.42), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(9384.59, 9642.42), 8);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2616\n    connRef = new ConnRef(router, 2616);\n    srcPt = ConnEnd(Point(9354.59, 9642.42), 4);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(8684.29, 9976.02), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2617\n    connRef = new ConnRef(router, 2617);\n    srcPt = ConnEnd(Point(7765.29, 7425.4), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(7509.1, 7993.79), 1);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2618\n    connRef = new ConnRef(router, 2618);\n    srcPt = ConnEnd(Point(7509.1, 8023.79), 2);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(7410.1, 8579.99), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2619\n    connRef = new ConnRef(router, 2619);\n    srcPt = ConnEnd(Point(10611.2, 8282.99), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(10677.2, 8564.99), 1);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2620\n    connRef = new ConnRef(router, 2620);\n    srcPt = ConnEnd(Point(10677.2, 8594.99), 2);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(10710.2, 8873.22), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2621\n    connRef = new ConnRef(router, 2621);\n    srcPt = ConnEnd(Point(10710.2, 8873.22), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(10512.2, 9132.42), 1);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2622\n    connRef = new ConnRef(router, 2622);\n    srcPt = ConnEnd(Point(10512.2, 9162.42), 2);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(10116, 9345.42), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2623\n    connRef = new ConnRef(router, 2623);\n    srcPt = ConnEnd(Point(8835.89, 5004.4), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(9052.99, 8333.99), 1);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2624\n    connRef = new ConnRef(router, 2624);\n    srcPt = ConnEnd(Point(9052.99, 8363.99), 2);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(9085.99, 11632.9), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2625\n    connRef = new ConnRef(router, 2625);\n    srcPt = ConnEnd(Point(8835.89, 5004.4), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(8835.89, 4656.4), 2);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2626\n    connRef = new ConnRef(router, 2626);\n    srcPt = ConnEnd(Point(15239.5, 1511.29), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(8835.89, 4656.4), 2);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2627\n    connRef = new ConnRef(router, 2627);\n    srcPt = ConnEnd(Point(8835.89, 4626.4), 1);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(8835.89, 4361.11), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2628\n    connRef = new ConnRef(router, 2628);\n    srcPt = ConnEnd(Point(8835.89, 4626.4), 1);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(15239.5, 1181.29), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2629\n    connRef = new ConnRef(router, 2629);\n    srcPt = ConnEnd(Point(8835.89, 3664.51), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(8835.89, 3946.51), 1);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2630\n    connRef = new ConnRef(router, 2630);\n    srcPt = ConnEnd(Point(8835.89, 3976.51), 2);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(8835.89, 4361.11), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2631\n    connRef = new ConnRef(router, 2631);\n    srcPt = ConnEnd(Point(9784.69, 5512.67), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(9351.59, 5512.67), 8);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2632\n    connRef = new ConnRef(router, 2632);\n    srcPt = ConnEnd(Point(15239.5, 1511.29), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(9351.59, 5512.67), 8);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2633\n    connRef = new ConnRef(router, 2633);\n    srcPt = ConnEnd(Point(9321.59, 5512.67), 4);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(8835.89, 5512.67), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2634\n    connRef = new ConnRef(router, 2634);\n    srcPt = ConnEnd(Point(9321.59, 5512.67), 4);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(15239.5, 742.091), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2635\n    connRef = new ConnRef(router, 2635);\n    srcPt = ConnEnd(Point(8835.89, 3664.51), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(8835.89, 3448.51), 2);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2636\n    connRef = new ConnRef(router, 2636);\n    srcPt = ConnEnd(Point(8835.89, 3418.51), 1);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(8835.89, 3173.29), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2637\n    connRef = new ConnRef(router, 2637);\n    srcPt = ConnEnd(Point(8835.89, 3173.29), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(8835.89, 2924.29), 2);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2638\n    connRef = new ConnRef(router, 2638);\n    srcPt = ConnEnd(Point(15239.5, 1511.29), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(8835.89, 2924.29), 2);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2639\n    connRef = new ConnRef(router, 2639);\n    srcPt = ConnEnd(Point(8835.89, 2894.29), 1);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(8835.89, 2579.29), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2640\n    connRef = new ConnRef(router, 2640);\n    srcPt = ConnEnd(Point(8835.89, 2894.29), 1);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(15239.5, 1181.29), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2641\n    connRef = new ConnRef(router, 2641);\n    srcPt = ConnEnd(Point(8835.89, 2108.29), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(8835.89, 2366.29), 1);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2642\n    connRef = new ConnRef(router, 2642);\n    srcPt = ConnEnd(Point(8835.89, 2396.29), 2);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(8835.89, 2579.29), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2643\n    connRef = new ConnRef(router, 2643);\n    srcPt = ConnEnd(Point(8835.89, 2108.29), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(8440.29, 2108.29), 8);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2644\n    connRef = new ConnRef(router, 2644);\n    srcPt = ConnEnd(Point(8410.29, 2108.29), 4);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(8161.29, 2108.29), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2645\n    connRef = new ConnRef(router, 2645);\n    srcPt = ConnEnd(Point(8458.29, 1676.29), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(8440.29, 2150.29), 8);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2646\n    connRef = new ConnRef(router, 2646);\n    srcPt = ConnEnd(Point(8410.29, 2150.29), 4);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(8835.89, 2108.29), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2647\n    connRef = new ConnRef(router, 2647);\n    srcPt = ConnEnd(Point(8410.29, 2150.29), 4);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(8161.29, 2108.29), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2648\n    connRef = new ConnRef(router, 2648);\n    srcPt = ConnEnd(Point(15239.5, 1511.29), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(15359.5, 1346.29), 4);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2649\n    connRef = new ConnRef(router, 2649);\n    srcPt = ConnEnd(Point(8458.29, 1280.29), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(15359.5, 1346.29), 4);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2650\n    connRef = new ConnRef(router, 2650);\n    srcPt = ConnEnd(Point(15389.5, 1346.29), 8);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(15239.5, 1181.29), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2651\n    connRef = new ConnRef(router, 2651);\n    srcPt = ConnEnd(Point(15389.5, 1346.29), 8);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(8458.29, 1676.29), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2652\n    connRef = new ConnRef(router, 2652);\n    srcPt = ConnEnd(Point(8458.29, 808.091), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(8458.29, 1100.29), 1);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2653\n    connRef = new ConnRef(router, 2653);\n    srcPt = ConnEnd(Point(8458.29, 1130.29), 2);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(8458.29, 1280.29), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2654\n    connRef = new ConnRef(router, 2654);\n    srcPt = ConnEnd(Point(15239.5, 1511.29), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(15100.3, 1346.29), 4);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2655\n    connRef = new ConnRef(router, 2655);\n    srcPt = ConnEnd(Point(7996.29, 808.091), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(15100.3, 1346.29), 4);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2656\n    connRef = new ConnRef(router, 2656);\n    srcPt = ConnEnd(Point(15130.3, 1346.29), 8);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(15239.5, 1181.29), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2657\n    connRef = new ConnRef(router, 2657);\n    srcPt = ConnEnd(Point(15130.3, 1346.29), 8);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(8458.29, 808.091), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2658\n    connRef = new ConnRef(router, 2658);\n    srcPt = ConnEnd(Point(8458.29, 808.091), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(8971.99, 808.091), 4);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2659\n    connRef = new ConnRef(router, 2659);\n    srcPt = ConnEnd(Point(9001.99, 808.091), 8);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(9270.59, 808.091), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2660\n    connRef = new ConnRef(router, 2660);\n    srcPt = ConnEnd(Point(9270.59, 808.091), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(9001.99, 1115.29), 8);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2661\n    connRef = new ConnRef(router, 2661);\n    srcPt = ConnEnd(Point(8971.99, 1115.29), 4);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(8458.29, 1280.29), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2662\n    connRef = new ConnRef(router, 2662);\n    srcPt = ConnEnd(Point(7996.29, 808.091), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(7996.29, 968.285), 1);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2663\n    connRef = new ConnRef(router, 2663);\n    srcPt = ConnEnd(Point(7996.29, 998.285), 2);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(7996.29, 1148.29), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2664\n    connRef = new ConnRef(router, 2664);\n    srcPt = ConnEnd(Point(15239.5, 1511.29), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(15462.3, 1346.29), 4);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2665\n    connRef = new ConnRef(router, 2665);\n    srcPt = ConnEnd(Point(7996.29, 1148.29), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(15462.3, 1346.29), 4);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2666\n    connRef = new ConnRef(router, 2666);\n    srcPt = ConnEnd(Point(15492.3, 1346.29), 8);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(15239.5, 1181.29), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2667\n    connRef = new ConnRef(router, 2667);\n    srcPt = ConnEnd(Point(15492.3, 1346.29), 8);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(9270.59, 808.091), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2668\n    connRef = new ConnRef(router, 2668);\n    srcPt = ConnEnd(Point(9270.59, 808.091), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(9736.69, 808.091), 4);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2669\n    connRef = new ConnRef(router, 2669);\n    srcPt = ConnEnd(Point(9766.69, 808.091), 8);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(10456.9, 808.091), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2670\n    connRef = new ConnRef(router, 2670);\n    srcPt = ConnEnd(Point(10456.9, 808.091), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(10761.2, 808.091), 4);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2671\n    connRef = new ConnRef(router, 2671);\n    srcPt = ConnEnd(Point(10791.2, 808.091), 8);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(10974.2, 808.091), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2672\n    connRef = new ConnRef(router, 2672);\n    srcPt = ConnEnd(Point(10974.2, 808.091), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(10974.2, 1100.29), 1);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2673\n    connRef = new ConnRef(router, 2673);\n    srcPt = ConnEnd(Point(10974.2, 1130.29), 2);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(10974.2, 1280.29), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2674\n    connRef = new ConnRef(router, 2674);\n    srcPt = ConnEnd(Point(10974.2, 1280.29), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(10791.2, 1280.29), 8);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2675\n    connRef = new ConnRef(router, 2675);\n    srcPt = ConnEnd(Point(10761.2, 1280.29), 4);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(10456.9, 1280.29), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2676\n    connRef = new ConnRef(router, 2676);\n    srcPt = ConnEnd(Point(8458.29, 1280.29), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(9354.59, 1280.29), 4);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2677\n    connRef = new ConnRef(router, 2677);\n    srcPt = ConnEnd(Point(8835.89, 2108.29), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(9354.59, 1280.29), 4);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2678\n    connRef = new ConnRef(router, 2678);\n    srcPt = ConnEnd(Point(9384.59, 1280.29), 8);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(10456.9, 1280.29), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2679\n    connRef = new ConnRef(router, 2679);\n    srcPt = ConnEnd(Point(9384.59, 1280.29), 8);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(9652.69, 1445.29), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2680\n    connRef = new ConnRef(router, 2680);\n    srcPt = ConnEnd(Point(9652.69, 1943.29), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(9652.69, 1724.29), 2);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2681\n    connRef = new ConnRef(router, 2681);\n    srcPt = ConnEnd(Point(8835.89, 2108.29), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(9652.69, 1724.29), 2);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2682\n    connRef = new ConnRef(router, 2682);\n    srcPt = ConnEnd(Point(9652.69, 1694.29), 1);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(8458.29, 1280.29), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2683\n    connRef = new ConnRef(router, 2683);\n    srcPt = ConnEnd(Point(9652.69, 1694.29), 1);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(9652.69, 1445.29), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2684\n    connRef = new ConnRef(router, 2684);\n    srcPt = ConnEnd(Point(9652.69, 1943.29), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(9288.59, 2009.29), 4);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2685\n    connRef = new ConnRef(router, 2685);\n    srcPt = ConnEnd(Point(8835.89, 2108.29), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(9288.59, 2009.29), 4);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2686\n    connRef = new ConnRef(router, 2686);\n    srcPt = ConnEnd(Point(9318.59, 2009.29), 8);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(10456.9, 1280.29), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2687\n    connRef = new ConnRef(router, 2687);\n    srcPt = ConnEnd(Point(9318.59, 2009.29), 8);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(10974.2, 1643.29), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2688\n    connRef = new ConnRef(router, 2688);\n    srcPt = ConnEnd(Point(10974.2, 1643.29), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(10974.2, 1493.29), 2);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2689\n    connRef = new ConnRef(router, 2689);\n    srcPt = ConnEnd(Point(10974.2, 1463.29), 1);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(10974.2, 1280.29), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2690\n    connRef = new ConnRef(router, 2690);\n    srcPt = ConnEnd(Point(10974.2, 1643.29), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(11124.2, 1643.29), 4);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2691\n    connRef = new ConnRef(router, 2691);\n    srcPt = ConnEnd(Point(15239.5, 1511.29), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(11124.2, 1643.29), 4);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2692\n    connRef = new ConnRef(router, 2692);\n    srcPt = ConnEnd(Point(11154.2, 1643.29), 8);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(11363.1, 1643.29), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2693\n    connRef = new ConnRef(router, 2693);\n    srcPt = ConnEnd(Point(11154.2, 1643.29), 8);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(15239.5, 742.091), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2694\n    connRef = new ConnRef(router, 2694);\n    srcPt = ConnEnd(Point(10974.2, 458.265), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(10974.2, 595.091), 1);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2695\n    connRef = new ConnRef(router, 2695);\n    srcPt = ConnEnd(Point(15239.5, 1511.29), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(10974.2, 595.091), 1);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2696\n    connRef = new ConnRef(router, 2696);\n    srcPt = ConnEnd(Point(10974.2, 625.091), 2);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(10974.2, 808.091), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2697\n    connRef = new ConnRef(router, 2697);\n    srcPt = ConnEnd(Point(10974.2, 625.091), 2);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(15239.5, 1181.29), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2698\n    connRef = new ConnRef(router, 2698);\n    srcPt = ConnEnd(Point(10149, 4361.11), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(10530.2, 4361.11), 4);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2699\n    connRef = new ConnRef(router, 2699);\n    srcPt = ConnEnd(Point(10560.2, 4361.11), 8);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(10743.2, 4361.11), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2700\n    connRef = new ConnRef(router, 2700);\n    srcPt = ConnEnd(Point(10743.2, 4361.11), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(10926.2, 4361.11), 4);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2701\n    connRef = new ConnRef(router, 2701);\n    srcPt = ConnEnd(Point(10956.2, 4361.11), 8);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(11073.2, 4361.11), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2702\n    connRef = new ConnRef(router, 2702);\n    srcPt = ConnEnd(Point(11396.1, 4361.11), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(11579.1, 4361.11), 4);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2703\n    connRef = new ConnRef(router, 2703);\n    srcPt = ConnEnd(Point(15239.5, 1511.29), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(11579.1, 4361.11), 4);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2704\n    connRef = new ConnRef(router, 2704);\n    srcPt = ConnEnd(Point(11609.1, 4361.11), 8);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(11759.1, 4361.11), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2705\n    connRef = new ConnRef(router, 2705);\n    srcPt = ConnEnd(Point(11609.1, 4361.11), 8);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(15239.5, 1181.29), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2706\n    connRef = new ConnRef(router, 2706);\n    srcPt = ConnEnd(Point(11759.1, 4361.11), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(10596.2, 4509.4), 4);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2707\n    connRef = new ConnRef(router, 2707);\n    srcPt = ConnEnd(Point(8835.89, 4361.11), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(10596.2, 4509.4), 4);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2708\n    connRef = new ConnRef(router, 2708);\n    srcPt = ConnEnd(Point(10626.2, 4509.4), 8);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(12056.1, 4361.11), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2709\n    connRef = new ConnRef(router, 2709);\n    srcPt = ConnEnd(Point(12056.1, 4361.11), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(12206.1, 4361.11), 4);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2710\n    connRef = new ConnRef(router, 2710);\n    srcPt = ConnEnd(Point(12236.1, 4361.11), 8);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(12531.5, 4361.11), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2711\n    connRef = new ConnRef(router, 2711);\n    srcPt = ConnEnd(Point(12531.5, 4361.11), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(12531.5, 4560.4), 1);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2712\n    connRef = new ConnRef(router, 2712);\n    srcPt = ConnEnd(Point(12531.5, 4590.4), 2);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(12531.5, 4740.4), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2713\n    connRef = new ConnRef(router, 2713);\n    srcPt = ConnEnd(Point(12531.5, 4740.4), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(12531.5, 4956.4), 1);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2714\n    connRef = new ConnRef(router, 2714);\n    srcPt = ConnEnd(Point(12531.5, 4986.4), 2);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(12531.5, 5169.4), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2715\n    connRef = new ConnRef(router, 2715);\n    srcPt = ConnEnd(Point(12531.5, 5512.67), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(12531.5, 5329.67), 2);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2716\n    connRef = new ConnRef(router, 2716);\n    srcPt = ConnEnd(Point(12531.5, 5299.67), 1);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(12531.5, 5169.4), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2717\n    connRef = new ConnRef(router, 2717);\n    srcPt = ConnEnd(Point(12531.5, 4740.4), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(12907.5, 4509.4), 4);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2718\n    connRef = new ConnRef(router, 2718);\n    srcPt = ConnEnd(Point(12937.5, 4509.4), 8);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(13266, 4126.51), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2719\n    connRef = new ConnRef(router, 2719);\n    srcPt = ConnEnd(Point(13266, 3631.51), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(13266, 3847.51), 1);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2720\n    connRef = new ConnRef(router, 2720);\n    srcPt = ConnEnd(Point(10116, 9345.42), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(13266, 3847.51), 1);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2721\n    connRef = new ConnRef(router, 2721);\n    srcPt = ConnEnd(Point(13266, 3877.51), 2);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(13266, 4126.51), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2722\n    connRef = new ConnRef(router, 2722);\n    srcPt = ConnEnd(Point(13266, 3877.51), 2);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(10116, 10174), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2723\n    connRef = new ConnRef(router, 2723);\n    srcPt = ConnEnd(Point(12531.5, 4361.11), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(12531.5, 4009.51), 2);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2724\n    connRef = new ConnRef(router, 2724);\n    srcPt = ConnEnd(Point(12531.5, 3979.51), 1);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(12531.5, 3730.51), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2725\n    connRef = new ConnRef(router, 2725);\n    srcPt = ConnEnd(Point(12531.5, 3979.51), 1);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(8835.89, 5004.4), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2726\n    connRef = new ConnRef(router, 2726);\n    srcPt = ConnEnd(Point(12531.5, 3338.29), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(12531.5, 3517.51), 1);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2727\n    connRef = new ConnRef(router, 2727);\n    srcPt = ConnEnd(Point(12531.5, 3547.51), 2);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(12531.5, 3730.51), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2728\n    connRef = new ConnRef(router, 2728);\n    srcPt = ConnEnd(Point(12531.5, 3547.51), 2);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(11363.1, 1643.29), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2729\n    connRef = new ConnRef(router, 2729);\n    srcPt = ConnEnd(Point(12531.5, 3338.29), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(12531.5, 3056.29), 2);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2730\n    connRef = new ConnRef(router, 2730);\n    srcPt = ConnEnd(Point(12531.5, 3026.29), 1);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(12531.5, 2678.29), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2731\n    connRef = new ConnRef(router, 2731);\n    srcPt = ConnEnd(Point(12531.5, 2678.29), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(12531.5, 2297.29), 2);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2732\n    connRef = new ConnRef(router, 2732);\n    srcPt = ConnEnd(Point(12531.5, 2267.29), 1);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(12531.5, 1844.29), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2733\n    connRef = new ConnRef(router, 2733);\n    srcPt = ConnEnd(Point(12531.5, 1844.29), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(12170.1, 1844.29), 8);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2734\n    connRef = new ConnRef(router, 2734);\n    srcPt = ConnEnd(Point(9501.59, 6481.51), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(12170.1, 1844.29), 8);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2735\n    connRef = new ConnRef(router, 2735);\n    srcPt = ConnEnd(Point(12140.1, 1844.29), 4);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(11990.1, 1844.29), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2736\n    connRef = new ConnRef(router, 2736);\n    srcPt = ConnEnd(Point(12140.1, 1844.29), 4);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(8835.89, 2108.29), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2737\n    connRef = new ConnRef(router, 2737);\n    srcPt = ConnEnd(Point(11990.1, 1577.29), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(11990.1, 1727.29), 1);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2738\n    connRef = new ConnRef(router, 2738);\n    srcPt = ConnEnd(Point(9501.59, 6481.51), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(11990.1, 1727.29), 1);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2739\n    connRef = new ConnRef(router, 2739);\n    srcPt = ConnEnd(Point(11990.1, 1757.29), 2);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(11990.1, 1844.29), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2740\n    connRef = new ConnRef(router, 2740);\n    srcPt = ConnEnd(Point(12531.5, 1844.29), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(12170.1, 1742.29), 8);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2741\n    connRef = new ConnRef(router, 2741);\n    srcPt = ConnEnd(Point(12140.1, 1742.29), 4);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(11990.1, 1577.29), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2742\n    connRef = new ConnRef(router, 2742);\n    srcPt = ConnEnd(Point(12140.1, 1742.29), 4);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(8835.89, 2108.29), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2743\n    connRef = new ConnRef(router, 2743);\n    srcPt = ConnEnd(Point(13872, 8249.99), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(13872, 8432.99), 1);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2744\n    connRef = new ConnRef(router, 2744);\n    srcPt = ConnEnd(Point(13872, 8462.99), 2);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(13872, 8708.22), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2745\n    connRef = new ConnRef(router, 2745);\n    srcPt = ConnEnd(Point(11924.1, 7612.79), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(11924.1, 7828.79), 1);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2746\n    connRef = new ConnRef(router, 2746);\n    srcPt = ConnEnd(Point(11924.1, 7858.79), 2);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(11924.1, 8074.79), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2747\n    connRef = new ConnRef(router, 2747);\n    srcPt = ConnEnd(Point(11924.1, 7858.79), 2);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(9171.59, 458.265), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2748\n    connRef = new ConnRef(router, 2748);\n    srcPt = ConnEnd(Point(15868.6, 8249.99), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(15868.6, 8432.99), 1);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2749\n    connRef = new ConnRef(router, 2749);\n    srcPt = ConnEnd(Point(15868.6, 8462.99), 2);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(15868.6, 8708.22), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2750\n    connRef = new ConnRef(router, 2750);\n    srcPt = ConnEnd(Point(16722.8, 8249.99), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(16722.8, 8399.99), 1);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2751\n    connRef = new ConnRef(router, 2751);\n    srcPt = ConnEnd(Point(16722.8, 8429.99), 2);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(16722.8, 8642.22), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2752\n    connRef = new ConnRef(router, 2752);\n    srcPt = ConnEnd(Point(13872, 7062.4), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(8636.29, 4192.51), 4);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2753\n    connRef = new ConnRef(router, 2753);\n    srcPt = ConnEnd(Point(4322, 2150.29), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(8636.29, 4192.51), 4);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2754\n    connRef = new ConnRef(router, 2754);\n    srcPt = ConnEnd(Point(8666.29, 4192.51), 8);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(13167, 8249.99), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2755\n    connRef = new ConnRef(router, 2755);\n    srcPt = ConnEnd(Point(10809.2, 7128.4), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(10116, 9693.42), 1);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2756\n    connRef = new ConnRef(router, 2756);\n    srcPt = ConnEnd(Point(10116, 9345.42), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(10116, 9693.42), 1);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2757\n    connRef = new ConnRef(router, 2757);\n    srcPt = ConnEnd(Point(10116, 9723.42), 2);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(8293.29, 6854.21), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2758\n    connRef = new ConnRef(router, 2758);\n    srcPt = ConnEnd(Point(10116, 9723.42), 2);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(10116, 10174), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2759\n    connRef = new ConnRef(router, 2759);\n    srcPt = ConnEnd(Point(10809.2, 7128.4), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(15359.5, 1181.29), 4);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2760\n    connRef = new ConnRef(router, 2760);\n    srcPt = ConnEnd(Point(17741.5, 5822.9), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(15359.5, 1181.29), 4);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2761\n    connRef = new ConnRef(router, 2761);\n    srcPt = ConnEnd(Point(15239.5, 1511.29), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(15359.5, 1181.29), 4);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2762\n    connRef = new ConnRef(router, 2762);\n    srcPt = ConnEnd(Point(15389.5, 1181.29), 8);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(18368.5, 5070.4), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2763\n    connRef = new ConnRef(router, 2763);\n    srcPt = ConnEnd(Point(15389.5, 1181.29), 8);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(15239.5, 742.091), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2764\n    connRef = new ConnRef(router, 2764);\n    srcPt = ConnEnd(Point(18368.5, 5070.4), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(13608, 6664.51), 1);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2765\n    connRef = new ConnRef(router, 2765);\n    srcPt = ConnEnd(Point(13608, 6694.51), 2);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(7410.1, 8579.99), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2766\n    connRef = new ConnRef(router, 2766);\n    srcPt = ConnEnd(Point(13608, 6694.51), 2);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(18725.5, 5822.9), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2767\n    connRef = new ConnRef(router, 2767);\n    srcPt = ConnEnd(Point(10809.2, 7128.4), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(10809.2, 7311.4), 1);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2768\n    connRef = new ConnRef(router, 2768);\n    srcPt = ConnEnd(Point(15239.5, 1511.29), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(10809.2, 7311.4), 1);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2769\n    connRef = new ConnRef(router, 2769);\n    srcPt = ConnEnd(Point(10809.2, 7341.4), 2);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(10809.2, 7579.79), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2770\n    connRef = new ConnRef(router, 2770);\n    srcPt = ConnEnd(Point(10809.2, 7341.4), 2);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(15239.5, 1181.29), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2771\n    connRef = new ConnRef(router, 2771);\n    srcPt = ConnEnd(Point(10809.2, 8074.79), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(10809.2, 7825.79), 2);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2772\n    connRef = new ConnRef(router, 2772);\n    srcPt = ConnEnd(Point(10809.2, 7795.79), 1);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(10809.2, 7579.79), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2773\n    connRef = new ConnRef(router, 2773);\n    srcPt = ConnEnd(Point(10809.2, 8074.79), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(9850.69, 6400.51), 1);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2774\n    connRef = new ConnRef(router, 2774);\n    srcPt = ConnEnd(Point(8835.89, 5004.4), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(9850.69, 6400.51), 1);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2775\n    connRef = new ConnRef(router, 2775);\n    srcPt = ConnEnd(Point(9850.69, 6430.51), 2);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(11040.2, 8873.22), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2776\n    connRef = new ConnRef(router, 2776);\n    srcPt = ConnEnd(Point(11429.1, 8873.22), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(11253.2, 8873.22), 8);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2777\n    connRef = new ConnRef(router, 2777);\n    srcPt = ConnEnd(Point(11223.2, 8873.22), 4);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(11040.2, 8873.22), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2778\n    connRef = new ConnRef(router, 2778);\n    srcPt = ConnEnd(Point(11990.1, 8873.22), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(12305.1, 8873.22), 4);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2779\n    connRef = new ConnRef(router, 2779);\n    srcPt = ConnEnd(Point(12335.1, 8873.22), 8);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(12889.5, 8873.22), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2780\n    connRef = new ConnRef(router, 2780);\n    srcPt = ConnEnd(Point(8835.89, 2108.29), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(9034.99, 3433.51), 8);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2781\n    connRef = new ConnRef(router, 2781);\n    srcPt = ConnEnd(Point(8835.89, 5004.4), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(9034.99, 3433.51), 8);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2782\n    connRef = new ConnRef(router, 2782);\n    srcPt = ConnEnd(Point(9004.99, 3433.51), 4);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(7798.29, 3565.51), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2783\n    connRef = new ConnRef(router, 2783);\n    srcPt = ConnEnd(Point(7146.1, 3565.51), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(7461.1, 3565.51), 4);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2784\n    connRef = new ConnRef(router, 2784);\n    srcPt = ConnEnd(Point(7491.1, 3565.51), 8);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(7798.29, 3565.51), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2785\n    connRef = new ConnRef(router, 2785);\n    srcPt = ConnEnd(Point(7146.1, 3565.51), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(6798.1, 3565.51), 8);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2786\n    connRef = new ConnRef(router, 2786);\n    srcPt = ConnEnd(Point(6768.1, 3565.51), 4);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(6519.1, 3565.51), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2787\n    connRef = new ConnRef(router, 2787);\n    srcPt = ConnEnd(Point(6519.1, 3565.51), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(6204.1, 3565.51), 8);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2788\n    connRef = new ConnRef(router, 2788);\n    srcPt = ConnEnd(Point(15239.5, 1511.29), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(6204.1, 3565.51), 8);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2789\n    connRef = new ConnRef(router, 2789);\n    srcPt = ConnEnd(Point(6174.1, 3565.51), 4);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(6024.1, 3565.51), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2790\n    connRef = new ConnRef(router, 2790);\n    srcPt = ConnEnd(Point(6174.1, 3565.51), 4);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(15239.5, 1181.29), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2791\n    connRef = new ConnRef(router, 2791);\n    srcPt = ConnEnd(Point(6024.1, 3565.51), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(5709.1, 3565.51), 8);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2792\n    connRef = new ConnRef(router, 2792);\n    srcPt = ConnEnd(Point(5679.1, 3565.51), 4);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(5312, 3565.51), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2793\n    connRef = new ConnRef(router, 2793);\n    srcPt = ConnEnd(Point(5312, 3565.51), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(5312, 3814.51), 1);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2794\n    connRef = new ConnRef(router, 2794);\n    srcPt = ConnEnd(Point(5312, 3844.51), 2);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(5312, 4126.51), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2795\n    connRef = new ConnRef(router, 2795);\n    srcPt = ConnEnd(Point(5312, 4938.4), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(5312, 4590.4), 2);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2796\n    connRef = new ConnRef(router, 2796);\n    srcPt = ConnEnd(Point(5312, 4560.4), 1);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(5312, 4126.51), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2797\n    connRef = new ConnRef(router, 2797);\n    srcPt = ConnEnd(Point(5312, 5964.59), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(5312, 5362.67), 2);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2798\n    connRef = new ConnRef(router, 2798);\n    srcPt = ConnEnd(Point(5312, 5332.67), 1);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(5312, 4938.4), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2799\n    connRef = new ConnRef(router, 2799);\n    srcPt = ConnEnd(Point(5312, 4126.51), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(5312, 5154.4), 1);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2800\n    connRef = new ConnRef(router, 2800);\n    srcPt = ConnEnd(Point(5312, 5184.4), 2);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(5312, 5964.59), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2801\n    connRef = new ConnRef(router, 2801);\n    srcPt = ConnEnd(Point(8835.89, 5512.67), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(8407.29, 5512.67), 8);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2802\n    connRef = new ConnRef(router, 2802);\n    srcPt = ConnEnd(Point(8377.29, 5512.67), 4);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(8095.29, 5512.67), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2803\n    connRef = new ConnRef(router, 2803);\n    srcPt = ConnEnd(Point(5312, 4938.4), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(5511.1, 5347.67), 8);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2804\n    connRef = new ConnRef(router, 2804);\n    srcPt = ConnEnd(Point(5312, 5964.59), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(5511.1, 5347.67), 8);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2805\n    connRef = new ConnRef(router, 2805);\n    srcPt = ConnEnd(Point(5481.1, 5347.67), 4);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(4982, 5347.67), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2806\n    connRef = new ConnRef(router, 2806);\n    srcPt = ConnEnd(Point(5312, 5964.59), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(4964, 5964.59), 8);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2807\n    connRef = new ConnRef(router, 2807);\n    srcPt = ConnEnd(Point(4982, 5347.67), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(4964, 5964.59), 8);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2808\n    connRef = new ConnRef(router, 2808);\n    srcPt = ConnEnd(Point(4934, 5964.59), 4);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(4553, 5964.59), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2809\n    connRef = new ConnRef(router, 2809);\n    srcPt = ConnEnd(Point(4553, 5964.59), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(4949, 6041.29), 1);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2810\n    connRef = new ConnRef(router, 2810);\n    srcPt = ConnEnd(Point(5312, 5964.59), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(4949, 6041.29), 1);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2811\n    connRef = new ConnRef(router, 2811);\n    srcPt = ConnEnd(Point(4949, 6071.29), 2);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(4949, 6613.51), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2812\n    connRef = new ConnRef(router, 2812);\n    srcPt = ConnEnd(Point(4949, 7579.79), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(4949, 7795.79), 1);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2813\n    connRef = new ConnRef(router, 2813);\n    srcPt = ConnEnd(Point(4949, 7825.79), 2);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(4949, 8107.79), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2814\n    connRef = new ConnRef(router, 2814);\n    srcPt = ConnEnd(Point(4949, 8107.79), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(4949, 8366.99), 1);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2815\n    connRef = new ConnRef(router, 2815);\n    srcPt = ConnEnd(Point(4949, 8396.99), 2);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(4949, 8579.99), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2816\n    connRef = new ConnRef(router, 2816);\n    srcPt = ConnEnd(Point(4949, 8579.99), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(4949, 8792.22), 1);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2817\n    connRef = new ConnRef(router, 2817);\n    srcPt = ConnEnd(Point(4949, 8822.22), 2);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(4949, 9114.42), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2818\n    connRef = new ConnRef(router, 2818);\n    srcPt = ConnEnd(Point(4949, 9114.42), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(4949, 9297.42), 1);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2819\n    connRef = new ConnRef(router, 2819);\n    srcPt = ConnEnd(Point(4949, 9327.42), 2);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(4949, 9576.42), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2820\n    connRef = new ConnRef(router, 2820);\n    srcPt = ConnEnd(Point(4289, 9576.42), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(4289, 9862.02), 1);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2821\n    connRef = new ConnRef(router, 2821);\n    srcPt = ConnEnd(Point(4289, 9892.02), 2);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(4289, 10075), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2822\n    connRef = new ConnRef(router, 2822);\n    srcPt = ConnEnd(Point(4949, 10438), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(4766, 10438), 8);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2823\n    connRef = new ConnRef(router, 2823);\n    srcPt = ConnEnd(Point(4736, 10438), 4);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(4553, 10438), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2824\n    connRef = new ConnRef(router, 2824);\n    srcPt = ConnEnd(Point(4553, 10438), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(4553, 10568.3), 1);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2825\n    connRef = new ConnRef(router, 2825);\n    srcPt = ConnEnd(Point(4553, 10598.3), 2);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(4553, 10748.3), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2826\n    connRef = new ConnRef(router, 2826);\n    srcPt = ConnEnd(Point(11363.1, 1280.29), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(11363.1, 1463.29), 1);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2827\n    connRef = new ConnRef(router, 2827);\n    srcPt = ConnEnd(Point(10116, 10174), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(11363.1, 1463.29), 1);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2828\n    connRef = new ConnRef(router, 2828);\n    srcPt = ConnEnd(Point(11363.1, 1493.29), 2);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(11363.1, 1643.29), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2829\n    connRef = new ConnRef(router, 2829);\n    srcPt = ConnEnd(Point(11363.1, 1280.29), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(11363.1, 1130.29), 2);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2830\n    connRef = new ConnRef(router, 2830);\n    srcPt = ConnEnd(Point(15239.5, 1511.29), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(11363.1, 1130.29), 2);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2831\n    connRef = new ConnRef(router, 2831);\n    srcPt = ConnEnd(Point(9501.59, 8249.99), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(11363.1, 1130.29), 2);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2832\n    connRef = new ConnRef(router, 2832);\n    srcPt = ConnEnd(Point(11363.1, 1100.29), 1);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(11363.1, 808.091), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2833\n    connRef = new ConnRef(router, 2833);\n    srcPt = ConnEnd(Point(11363.1, 1100.29), 1);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(15239.5, 1181.29), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2834\n    connRef = new ConnRef(router, 2834);\n    srcPt = ConnEnd(Point(11363.1, 808.091), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(11363.1, 625.091), 2);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2835\n    connRef = new ConnRef(router, 2835);\n    srcPt = ConnEnd(Point(11363.1, 595.091), 1);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(11363.1, 458.265), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2836\n    connRef = new ConnRef(router, 2836);\n    srcPt = ConnEnd(Point(11363.1, 458.265), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(11513.1, 458.265), 4);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2837\n    connRef = new ConnRef(router, 2837);\n    srcPt = ConnEnd(Point(15239.5, 1511.29), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(11513.1, 458.265), 4);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2838\n    connRef = new ConnRef(router, 2838);\n    srcPt = ConnEnd(Point(11543.1, 458.265), 8);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(11726.1, 458.265), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2839\n    connRef = new ConnRef(router, 2839);\n    srcPt = ConnEnd(Point(11543.1, 458.265), 8);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(15239.5, 1181.29), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2840\n    connRef = new ConnRef(router, 2840);\n    srcPt = ConnEnd(Point(11543.1, 458.265), 8);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(10116, 10174), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2841\n    connRef = new ConnRef(router, 2841);\n    srcPt = ConnEnd(Point(11726.1, 458.265), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(11942.1, 458.265), 4);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2842\n    connRef = new ConnRef(router, 2842);\n    srcPt = ConnEnd(Point(15239.5, 1511.29), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(11942.1, 458.265), 4);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2843\n    connRef = new ConnRef(router, 2843);\n    srcPt = ConnEnd(Point(11972.1, 458.265), 8);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(12089.1, 458.265), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2844\n    connRef = new ConnRef(router, 2844);\n    srcPt = ConnEnd(Point(11972.1, 458.265), 8);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(15239.5, 1181.29), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2845\n    connRef = new ConnRef(router, 2845);\n    srcPt = ConnEnd(Point(12089.1, 458.265), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(14971.9, 1346.29), 4);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2846\n    connRef = new ConnRef(router, 2846);\n    srcPt = ConnEnd(Point(15239.5, 1511.29), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(14971.9, 1346.29), 4);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2847\n    connRef = new ConnRef(router, 2847);\n    srcPt = ConnEnd(Point(15001.9, 1346.29), 8);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(12353.1, 643.091), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2848\n    connRef = new ConnRef(router, 2848);\n    srcPt = ConnEnd(Point(15001.9, 1346.29), 8);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(15239.5, 1181.29), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2849\n    connRef = new ConnRef(router, 2849);\n    srcPt = ConnEnd(Point(12353.1, 643.091), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(12709.5, 577.091), 4);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2850\n    connRef = new ConnRef(router, 2850);\n    srcPt = ConnEnd(Point(12739.5, 577.091), 8);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(12856.5, 458.265), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2851\n    connRef = new ConnRef(router, 2851);\n    srcPt = ConnEnd(Point(12856.5, 458.265), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(13185, 458.265), 4);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2852\n    connRef = new ConnRef(router, 2852);\n    srcPt = ConnEnd(Point(15239.5, 1511.29), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(13185, 458.265), 4);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2853\n    connRef = new ConnRef(router, 2853);\n    srcPt = ConnEnd(Point(10809.2, 7128.4), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(13185, 458.265), 4);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2854\n    connRef = new ConnRef(router, 2854);\n    srcPt = ConnEnd(Point(13215, 458.265), 8);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(13509, 458.265), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2855\n    connRef = new ConnRef(router, 2855);\n    srcPt = ConnEnd(Point(13215, 458.265), 8);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(15239.5, 1181.29), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2856\n    connRef = new ConnRef(router, 2856);\n    srcPt = ConnEnd(Point(13509, 458.265), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(13857, 458.265), 4);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2857\n    connRef = new ConnRef(router, 2857);\n    srcPt = ConnEnd(Point(13887, 458.265), 8);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(14037, 458.265), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2858\n    connRef = new ConnRef(router, 2858);\n    srcPt = ConnEnd(Point(13887, 458.265), 8);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(7410.1, 8579.99), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2859\n    connRef = new ConnRef(router, 2859);\n    srcPt = ConnEnd(Point(14037, 458.265), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(14319, 458.265), 4);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2860\n    connRef = new ConnRef(router, 2860);\n    srcPt = ConnEnd(Point(14349, 458.265), 8);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(14565, 458.265), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2861\n    connRef = new ConnRef(router, 2861);\n    srcPt = ConnEnd(Point(15239.5, 458.265), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(14811, 458.265), 8);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2862\n    connRef = new ConnRef(router, 2862);\n    srcPt = ConnEnd(Point(14781, 458.265), 4);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(14565, 458.265), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2863\n    connRef = new ConnRef(router, 2863);\n    srcPt = ConnEnd(Point(15239.5, 458.265), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(15622.3, 458.265), 4);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2864\n    connRef = new ConnRef(router, 2864);\n    srcPt = ConnEnd(Point(15652.3, 458.265), 8);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(15967.6, 458.265), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2865\n    connRef = new ConnRef(router, 2865);\n    srcPt = ConnEnd(Point(15967.6, 458.265), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(16150.6, 458.265), 4);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2866\n    connRef = new ConnRef(router, 2866);\n    srcPt = ConnEnd(Point(16180.6, 458.265), 8);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(16363.6, 458.265), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2867\n    connRef = new ConnRef(router, 2867);\n    srcPt = ConnEnd(Point(16363.6, 458.265), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(16363.6, 793.091), 1);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2868\n    connRef = new ConnRef(router, 2868);\n    srcPt = ConnEnd(Point(16363.6, 823.091), 2);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(16363.6, 1280.29), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2869\n    connRef = new ConnRef(router, 2869);\n    srcPt = ConnEnd(Point(15967.6, 458.265), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(16165.6, 793.091), 1);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2870\n    connRef = new ConnRef(router, 2870);\n    srcPt = ConnEnd(Point(16165.6, 823.091), 2);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(16363.6, 1280.29), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2871\n    connRef = new ConnRef(router, 2871);\n    srcPt = ConnEnd(Point(16165.6, 823.091), 2);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(11363.1, 1643.29), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2872\n    connRef = new ConnRef(router, 2872);\n    srcPt = ConnEnd(Point(11495.1, 8074.79), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(11121.2, 8074.79), 8);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2873\n    connRef = new ConnRef(router, 2873);\n    srcPt = ConnEnd(Point(11091.2, 8074.79), 4);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(10809.2, 8074.79), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2874\n    connRef = new ConnRef(router, 2874);\n    srcPt = ConnEnd(Point(11495.1, 8074.79), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(11495.1, 7759.79), 2);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2875\n    connRef = new ConnRef(router, 2875);\n    srcPt = ConnEnd(Point(8684.29, 9976.02), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(11495.1, 7759.79), 2);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2876\n    connRef = new ConnRef(router, 2876);\n    srcPt = ConnEnd(Point(11495.1, 7729.79), 1);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(11495.1, 7425.4), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2877\n    connRef = new ConnRef(router, 2877);\n    srcPt = ConnEnd(Point(11495.1, 7425.4), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(12008.1, 7425.4), 4);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2878\n    connRef = new ConnRef(router, 2878);\n    srcPt = ConnEnd(Point(12038.1, 7425.4), 8);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(12856.5, 7425.4), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2879\n    connRef = new ConnRef(router, 2879);\n    srcPt = ConnEnd(Point(12038.1, 7425.4), 8);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(7831.29, 9477.42), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2880\n    connRef = new ConnRef(router, 2880);\n    srcPt = ConnEnd(Point(17052.8, 7062.4), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(17052.8, 7179.4), 1);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2881\n    connRef = new ConnRef(router, 2881);\n    srcPt = ConnEnd(Point(15407.5, 7425.4), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(17052.8, 7179.4), 1);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2882\n    connRef = new ConnRef(router, 2882);\n    srcPt = ConnEnd(Point(17052.8, 7209.4), 2);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(17052.8, 7425.4), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2883\n    connRef = new ConnRef(router, 2883);\n    srcPt = ConnEnd(Point(7765.29, 610.091), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(18501, 11860.9), 4);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2884\n    connRef = new ConnRef(router, 2884);\n    srcPt = ConnEnd(Point(18401.5, 11860.9), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(18501, 11860.9), 4);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2885\n    connRef = new ConnRef(router, 2885);\n    srcPt = ConnEnd(Point(18531, 11860.9), 8);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(18630.5, 11860.9), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2886\n    connRef = new ConnRef(router, 2886);\n    srcPt = ConnEnd(Point(12889.5, 8873.22), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(13251, 8873.22), 4);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2887\n    connRef = new ConnRef(router, 2887);\n    srcPt = ConnEnd(Point(13281, 8873.22), 8);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(13872, 8873.22), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2888\n    connRef = new ConnRef(router, 2888);\n    srcPt = ConnEnd(Point(10456.9, 458.265), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(10761.2, 458.265), 4);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2889\n    connRef = new ConnRef(router, 2889);\n    srcPt = ConnEnd(Point(10791.2, 458.265), 8);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(10974.2, 458.265), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2890\n    connRef = new ConnRef(router, 2890);\n    srcPt = ConnEnd(Point(9171.59, 458.265), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(15619.3, 1346.29), 8);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2891\n    connRef = new ConnRef(router, 2891);\n    srcPt = ConnEnd(Point(15239.5, 1511.29), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(15619.3, 1346.29), 8);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2892\n    connRef = new ConnRef(router, 2892);\n    srcPt = ConnEnd(Point(15589.3, 1346.29), 4);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(8458.29, 313.265), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2893\n    connRef = new ConnRef(router, 2893);\n    srcPt = ConnEnd(Point(15589.3, 1346.29), 4);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(15239.5, 1181.29), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2894\n    connRef = new ConnRef(router, 2894);\n    srcPt = ConnEnd(Point(8194.29, 313.265), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(8044.29, 313.265), 8);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2895\n    connRef = new ConnRef(router, 2895);\n    srcPt = ConnEnd(Point(8014.29, 313.265), 4);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(7864.29, 313.265), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2896\n    connRef = new ConnRef(router, 2896);\n    srcPt = ConnEnd(Point(8458.29, 425.265), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(8308.29, 425.265), 8);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2897\n    connRef = new ConnRef(router, 2897);\n    srcPt = ConnEnd(Point(8278.29, 425.265), 4);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(8062.29, 425.265), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2898\n    connRef = new ConnRef(router, 2898);\n    srcPt = ConnEnd(Point(8062.29, 425.265), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(7780.29, 425.265), 8);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2899\n    connRef = new ConnRef(router, 2899);\n    srcPt = ConnEnd(Point(7750.29, 425.265), 4);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(7344.1, 425.265), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2900\n    connRef = new ConnRef(router, 2900);\n    srcPt = ConnEnd(Point(7344.1, 425.265), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(6963.1, 425.265), 8);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2901\n    connRef = new ConnRef(router, 2901);\n    srcPt = ConnEnd(Point(6933.1, 425.265), 4);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(6618.1, 425.265), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2902\n    connRef = new ConnRef(router, 2902);\n    srcPt = ConnEnd(Point(6123.1, 425.265), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(6306.1, 425.265), 4);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2903\n    connRef = new ConnRef(router, 2903);\n    srcPt = ConnEnd(Point(6336.1, 425.265), 8);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(6618.1, 425.265), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2904\n    connRef = new ConnRef(router, 2904);\n    srcPt = ConnEnd(Point(15239.5, 1511.29), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(15100.3, 1181.29), 4);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2905\n    connRef = new ConnRef(router, 2905);\n    srcPt = ConnEnd(Point(10809.2, 7128.4), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(15100.3, 1181.29), 4);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2906\n    connRef = new ConnRef(router, 2906);\n    srcPt = ConnEnd(Point(15130.3, 1181.29), 8);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(15239.5, 742.091), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2907\n    connRef = new ConnRef(router, 2907);\n    srcPt = ConnEnd(Point(15130.3, 1181.29), 8);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(10809.2, 4542.4), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2908\n    connRef = new ConnRef(router, 2908);\n    srcPt = ConnEnd(Point(8835.89, 5512.67), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(14873.4, 1346.29), 8);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2909\n    connRef = new ConnRef(router, 2909);\n    srcPt = ConnEnd(Point(15239.5, 1511.29), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(14873.4, 1346.29), 8);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2910\n    connRef = new ConnRef(router, 2910);\n    srcPt = ConnEnd(Point(14843.4, 1346.29), 4);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(4322, 2150.29), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2911\n    connRef = new ConnRef(router, 2911);\n    srcPt = ConnEnd(Point(14843.4, 1346.29), 4);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(15239.5, 1181.29), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2912\n    connRef = new ConnRef(router, 2912);\n    srcPt = ConnEnd(Point(15239.5, 742.091), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(15492.3, 1181.29), 8);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2913\n    connRef = new ConnRef(router, 2913);\n    srcPt = ConnEnd(Point(15239.5, 1511.29), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(15492.3, 1181.29), 8);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2914\n    connRef = new ConnRef(router, 2914);\n    srcPt = ConnEnd(Point(15462.3, 1181.29), 4);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(15239.5, 1181.29), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2915\n    connRef = new ConnRef(router, 2915);\n    srcPt = ConnEnd(Point(15239.5, 1511.29), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(15717.9, 1346.29), 4);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2916\n    connRef = new ConnRef(router, 2916);\n    srcPt = ConnEnd(Point(15239.5, 1181.29), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(15717.9, 1346.29), 4);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2917\n    connRef = new ConnRef(router, 2917);\n    srcPt = ConnEnd(Point(15747.9, 1346.29), 8);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(15239.5, 1181.29), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2918\n    connRef = new ConnRef(router, 2918);\n    srcPt = ConnEnd(Point(15747.9, 1346.29), 8);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(15239.5, 1511.29), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2919\n    connRef = new ConnRef(router, 2919);\n    srcPt = ConnEnd(Point(11396.1, 4361.11), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(11253.2, 4361.11), 8);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2920\n    connRef = new ConnRef(router, 2920);\n    srcPt = ConnEnd(Point(11223.2, 4361.11), 4);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(11073.2, 4361.11), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2921\n    connRef = new ConnRef(router, 2921);\n    srcPt = ConnEnd(Point(13200, 6788.21), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(14583, 6788.21), 4);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2922\n    connRef = new ConnRef(router, 2922);\n    srcPt = ConnEnd(Point(14613, 6788.21), 8);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(16231.6, 6788.21), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2923\n    connRef = new ConnRef(router, 2923);\n    srcPt = ConnEnd(Point(5312, 4938.4), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(5661.1, 4590.4), 2);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2924\n    connRef = new ConnRef(router, 2924);\n    srcPt = ConnEnd(Point(5661.1, 4560.4), 1);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(5793.1, 4126.51), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2925\n    connRef = new ConnRef(router, 2925);\n    srcPt = ConnEnd(Point(18137.5, 10174), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(18236.5, 8561.99), 2);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2926\n    connRef = new ConnRef(router, 2926);\n    srcPt = ConnEnd(Point(18236.5, 8531.99), 1);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(18302.5, 6788.21), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2927\n    connRef = new ConnRef(router, 2927);\n    srcPt = ConnEnd(Point(18236.5, 8531.99), 1);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(9784.69, 5512.67), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2928\n    connRef = new ConnRef(router, 2928);\n    srcPt = ConnEnd(Point(18137.5, 10174), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(17624.5, 10174), 8);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2929\n    connRef = new ConnRef(router, 2929);\n    srcPt = ConnEnd(Point(10116, 9345.42), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(17624.5, 10174), 8);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2930\n    connRef = new ConnRef(router, 2930);\n    srcPt = ConnEnd(Point(17594.5, 10174), 4);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(16920.8, 10174), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2931\n    connRef = new ConnRef(router, 2931);\n    srcPt = ConnEnd(Point(17594.5, 10174), 4);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(10116, 10174), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2932\n    connRef = new ConnRef(router, 2932);\n    srcPt = ConnEnd(Point(16920.8, 10174), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(16572.8, 10174), 8);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2933\n    connRef = new ConnRef(router, 2933);\n    srcPt = ConnEnd(Point(16542.8, 10174), 4);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(15868.6, 10174), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2934\n    connRef = new ConnRef(router, 2934);\n    srcPt = ConnEnd(Point(12122.1, 10174), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(13923, 10174), 4);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2935\n    connRef = new ConnRef(router, 2935);\n    srcPt = ConnEnd(Point(15239.5, 1511.29), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(13923, 10174), 4);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2936\n    connRef = new ConnRef(router, 2936);\n    srcPt = ConnEnd(Point(13953, 10174), 8);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(15868.6, 10174), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2937\n    connRef = new ConnRef(router, 2937);\n    srcPt = ConnEnd(Point(13953, 10174), 8);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(15239.5, 1181.29), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2938\n    connRef = new ConnRef(router, 2938);\n    srcPt = ConnEnd(Point(10116, 10174), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(10324.9, 9723.42), 2);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2939\n    connRef = new ConnRef(router, 2939);\n    srcPt = ConnEnd(Point(10324.9, 9693.42), 1);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(10116, 9345.42), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2940\n    connRef = new ConnRef(router, 2940);\n    srcPt = ConnEnd(Point(10116, 10174), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(10116, 10357), 1);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2941\n    connRef = new ConnRef(router, 2941);\n    srcPt = ConnEnd(Point(15239.5, 1511.29), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(10116, 10357), 1);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2942\n    connRef = new ConnRef(router, 2942);\n    srcPt = ConnEnd(Point(10116, 10387), 2);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(10116, 10682.3), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2943\n    connRef = new ConnRef(router, 2943);\n    srcPt = ConnEnd(Point(10116, 10387), 2);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(15239.5, 742.091), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2944\n    connRef = new ConnRef(router, 2944);\n    srcPt = ConnEnd(Point(10116, 10682.3), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(10497.2, 10682.3), 4);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2945\n    connRef = new ConnRef(router, 2945);\n    srcPt = ConnEnd(Point(10527.2, 10682.3), 8);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(10710.2, 10682.3), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2946\n    connRef = new ConnRef(router, 2946);\n    srcPt = ConnEnd(Point(11007.2, 10682.3), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(10923.2, 10682.3), 8);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2947\n    connRef = new ConnRef(router, 2947);\n    srcPt = ConnEnd(Point(10893.2, 10682.3), 4);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(10710.2, 10682.3), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2948\n    connRef = new ConnRef(router, 2948);\n    srcPt = ConnEnd(Point(11007.2, 10682.3), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(10842.2, 10965.6), 1);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2949\n    connRef = new ConnRef(router, 2949);\n    srcPt = ConnEnd(Point(10842.2, 10995.6), 2);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(10578.2, 11211.6), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2950\n    connRef = new ConnRef(router, 2950);\n    srcPt = ConnEnd(Point(9949.69, 11211.6), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(9733.69, 11211.6), 8);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2951\n    connRef = new ConnRef(router, 2951);\n    srcPt = ConnEnd(Point(9703.69, 11211.6), 4);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(9402.59, 11211.6), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2952\n    connRef = new ConnRef(router, 2952);\n    srcPt = ConnEnd(Point(9402.59, 11211.6), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(9252.59, 11211.6), 8);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2953\n    connRef = new ConnRef(router, 2953);\n    srcPt = ConnEnd(Point(9222.59, 11211.6), 4);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(9019.99, 11211.6), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2954\n    connRef = new ConnRef(router, 2954);\n    srcPt = ConnEnd(Point(9019.99, 11211.6), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(8699.29, 11211.6), 8);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2955\n    connRef = new ConnRef(router, 2955);\n    srcPt = ConnEnd(Point(8669.29, 11211.6), 4);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(8392.29, 11211.6), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2956\n    connRef = new ConnRef(router, 2956);\n    srcPt = ConnEnd(Point(7963.29, 11211.6), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(7963.29, 11028.6), 2);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2957\n    connRef = new ConnRef(router, 2957);\n    srcPt = ConnEnd(Point(7963.29, 10998.6), 1);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(7963.29, 10715.3), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2958\n    connRef = new ConnRef(router, 2958);\n    srcPt = ConnEnd(Point(7963.29, 10715.3), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(8212.29, 10715.3), 4);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2959\n    connRef = new ConnRef(router, 2959);\n    srcPt = ConnEnd(Point(4553, 5964.59), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(8212.29, 10715.3), 4);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2960\n    connRef = new ConnRef(router, 2960);\n    srcPt = ConnEnd(Point(8242.29, 10715.3), 8);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(8392.29, 10715.3), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2961\n    connRef = new ConnRef(router, 2961);\n    srcPt = ConnEnd(Point(8392.29, 10715.3), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(8669.29, 10715.3), 4);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2962\n    connRef = new ConnRef(router, 2962);\n    srcPt = ConnEnd(Point(8699.29, 10715.3), 8);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(9019.99, 10715.3), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2963\n    connRef = new ConnRef(router, 2963);\n    srcPt = ConnEnd(Point(9402.59, 11211.6), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(13314, 9246.42), 8);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2964\n    connRef = new ConnRef(router, 2964);\n    srcPt = ConnEnd(Point(17052.8, 7062.4), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(13314, 9246.42), 8);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2965\n    connRef = new ConnRef(router, 2965);\n    srcPt = ConnEnd(Point(13284, 9246.42), 4);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(8769.89, 12015.3), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2966\n    connRef = new ConnRef(router, 2966);\n    srcPt = ConnEnd(Point(6552.1, 7293.4), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(6636.1, 6996.4), 4);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2967\n    connRef = new ConnRef(router, 2967);\n    srcPt = ConnEnd(Point(6750.1, 6514.51), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(6636.1, 6996.4), 4);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2968\n    connRef = new ConnRef(router, 2968);\n    srcPt = ConnEnd(Point(6666.1, 6996.4), 8);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(7212.1, 7029.4), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2969\n    connRef = new ConnRef(router, 2969);\n    srcPt = ConnEnd(Point(7212.1, 7029.4), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(7212.1, 7278.4), 1);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2970\n    connRef = new ConnRef(router, 2970);\n    srcPt = ConnEnd(Point(7212.1, 7308.4), 2);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(7212.1, 7645.79), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2971\n    connRef = new ConnRef(router, 2971);\n    srcPt = ConnEnd(Point(7212.1, 9048.42), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(7212.1, 9198.42), 1);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2972\n    connRef = new ConnRef(router, 2972);\n    srcPt = ConnEnd(Point(17052.8, 7062.4), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(7212.1, 9198.42), 1);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2973\n    connRef = new ConnRef(router, 2973);\n    srcPt = ConnEnd(Point(7212.1, 9228.42), 2);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(7212.1, 9411.42), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2974\n    connRef = new ConnRef(router, 2974);\n    srcPt = ConnEnd(Point(6552.1, 8315.99), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(6552.1, 8056.79), 2);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2975\n    connRef = new ConnRef(router, 2975);\n    srcPt = ConnEnd(Point(6552.1, 8026.79), 1);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(6552.1, 7810.79), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2976\n    connRef = new ConnRef(router, 2976);\n    srcPt = ConnEnd(Point(6552.1, 9543.42), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(6552.1, 9862.02), 1);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2977\n    connRef = new ConnRef(router, 2977);\n    srcPt = ConnEnd(Point(17052.8, 7062.4), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(6552.1, 9862.02), 1);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2978\n    connRef = new ConnRef(router, 2978);\n    srcPt = ConnEnd(Point(6552.1, 9892.02), 2);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(6552.1, 10108), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2979\n    connRef = new ConnRef(router, 2979);\n    srcPt = ConnEnd(Point(6552.1, 7293.4), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(6552.1, 7564.79), 1);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2980\n    connRef = new ConnRef(router, 2980);\n    srcPt = ConnEnd(Point(6783.1, 7546.79), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(6552.1, 7564.79), 1);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2981\n    connRef = new ConnRef(router, 2981);\n    srcPt = ConnEnd(Point(6552.1, 7594.79), 2);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(6552.1, 7810.79), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2982\n    connRef = new ConnRef(router, 2982);\n    srcPt = ConnEnd(Point(6750.1, 6514.51), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(7230.1, 6514.51), 4);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2983\n    connRef = new ConnRef(router, 2983);\n    srcPt = ConnEnd(Point(7146.1, 6250.51), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(7230.1, 6514.51), 4);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2984\n    connRef = new ConnRef(router, 2984);\n    srcPt = ConnEnd(Point(7260.1, 6514.51), 8);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(7765.29, 6514.51), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2985\n    connRef = new ConnRef(router, 2985);\n    srcPt = ConnEnd(Point(7765.29, 6514.51), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(8146.29, 6514.51), 4);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2986\n    connRef = new ConnRef(router, 2986);\n    srcPt = ConnEnd(Point(17052.8, 7062.4), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(8146.29, 6514.51), 4);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2987\n    connRef = new ConnRef(router, 2987);\n    srcPt = ConnEnd(Point(8176.29, 6514.51), 8);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(8618.29, 6514.51), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2988\n    connRef = new ConnRef(router, 2988);\n    srcPt = ConnEnd(Point(5760.1, 7326.4), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(6402.1, 6788.21), 8);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2989\n    connRef = new ConnRef(router, 2989);\n    srcPt = ConnEnd(Point(7146.1, 6250.51), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(6402.1, 6788.21), 8);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2990\n    connRef = new ConnRef(router, 2990);\n    srcPt = ConnEnd(Point(6372.1, 6788.21), 4);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(6123.1, 7744.79), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2991\n    connRef = new ConnRef(router, 2991);\n    srcPt = ConnEnd(Point(6123.1, 7744.79), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(6123.1, 7960.79), 1);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2992\n    connRef = new ConnRef(router, 2992);\n    srcPt = ConnEnd(Point(17052.8, 7062.4), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(6123.1, 7960.79), 1);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2993\n    connRef = new ConnRef(router, 2993);\n    srcPt = ConnEnd(Point(6123.1, 7990.79), 2);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(6123.1, 8282.99), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2994\n    connRef = new ConnRef(router, 2994);\n    srcPt = ConnEnd(Point(10875.2, 11632.9), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(9931.69, 11632.9), 8);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2995\n    connRef = new ConnRef(router, 2995);\n    srcPt = ConnEnd(Point(9901.69, 11632.9), 4);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(9085.99, 11632.9), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2996\n    connRef = new ConnRef(router, 2996);\n    srcPt = ConnEnd(Point(9901.69, 11632.9), 4);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(8835.89, 5004.4), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2997\n    connRef = new ConnRef(router, 2997);\n    srcPt = ConnEnd(Point(10875.2, 11632.9), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(11414.1, 11632.9), 4);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2998\n    connRef = new ConnRef(router, 2998);\n    srcPt = ConnEnd(Point(11444.1, 11632.9), 8);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(11990.1, 11632.9), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef2999\n    connRef = new ConnRef(router, 2999);\n    srcPt = ConnEnd(Point(13575, 11632.9), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(12772.5, 11632.9), 8);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3000\n    connRef = new ConnRef(router, 3000);\n    srcPt = ConnEnd(Point(12742.5, 11632.9), 4);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(11990.1, 11632.9), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3001\n    connRef = new ConnRef(router, 3001);\n    srcPt = ConnEnd(Point(13575, 11632.9), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(14517, 11632.9), 4);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3002\n    connRef = new ConnRef(router, 3002);\n    srcPt = ConnEnd(Point(14547, 11632.9), 8);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(15868.6, 11632.9), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3003\n    connRef = new ConnRef(router, 3003);\n    srcPt = ConnEnd(Point(16198.6, 11632.9), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(16081.6, 11632.9), 8);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3004\n    connRef = new ConnRef(router, 3004);\n    srcPt = ConnEnd(Point(10116, 9345.42), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(16081.6, 11632.9), 8);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3005\n    connRef = new ConnRef(router, 3005);\n    srcPt = ConnEnd(Point(16051.6, 11632.9), 4);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(15868.6, 11632.9), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3006\n    connRef = new ConnRef(router, 3006);\n    srcPt = ConnEnd(Point(16051.6, 11632.9), 4);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(10116, 10174), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3007\n    connRef = new ConnRef(router, 3007);\n    srcPt = ConnEnd(Point(15868.6, 12081.3), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(15868.6, 11908.9), 2);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3008\n    connRef = new ConnRef(router, 3008);\n    srcPt = ConnEnd(Point(15868.6, 11878.9), 1);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(15868.6, 11632.9), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3009\n    connRef = new ConnRef(router, 3009);\n    srcPt = ConnEnd(Point(15868.6, 11878.9), 1);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(8835.89, 5512.67), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3010\n    connRef = new ConnRef(router, 3010);\n    srcPt = ConnEnd(Point(15868.6, 12081.3), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(15868.6, 12178.3), 1);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3011\n    connRef = new ConnRef(router, 3011);\n    srcPt = ConnEnd(Point(15868.6, 12208.3), 2);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(15868.6, 12292.3), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3012\n    connRef = new ConnRef(router, 3012);\n    srcPt = ConnEnd(Point(15272.5, 12292.3), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(15589.3, 12292.3), 4);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3013\n    connRef = new ConnRef(router, 3013);\n    srcPt = ConnEnd(Point(15619.3, 12292.3), 8);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(15868.6, 12292.3), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3014\n    connRef = new ConnRef(router, 3014);\n    srcPt = ConnEnd(Point(15272.5, 12292.3), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(15001.9, 12292.3), 8);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3015\n    connRef = new ConnRef(router, 3015);\n    srcPt = ConnEnd(Point(14971.9, 12292.3), 4);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(14697, 12292.3), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3016\n    connRef = new ConnRef(router, 3016);\n    srcPt = ConnEnd(Point(14004, 12292.3), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(14187, 12292.3), 4);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3017\n    connRef = new ConnRef(router, 3017);\n    srcPt = ConnEnd(Point(14217, 12292.3), 8);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(14400, 12292.3), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3018\n    connRef = new ConnRef(router, 3018);\n    srcPt = ConnEnd(Point(9501.59, 6481.51), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(9270.59, 5672.9), 2);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3019\n    connRef = new ConnRef(router, 3019);\n    srcPt = ConnEnd(Point(9270.59, 5642.9), 1);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(8835.89, 5004.4), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3020\n    connRef = new ConnRef(router, 3020);\n    srcPt = ConnEnd(Point(9501.59, 6481.51), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(9501.59, 7344.4), 1);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3021\n    connRef = new ConnRef(router, 3021);\n    srcPt = ConnEnd(Point(9501.59, 7374.4), 2);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(9501.59, 8249.99), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3022\n    connRef = new ConnRef(router, 3022);\n    srcPt = ConnEnd(Point(9501.59, 9976.02), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(9501.59, 10357), 1);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3023\n    connRef = new ConnRef(router, 3023);\n    srcPt = ConnEnd(Point(9501.59, 10387), 2);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(9501.59, 10781.3), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3024\n    connRef = new ConnRef(router, 3024);\n    srcPt = ConnEnd(Point(9501.59, 10781.3), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(10342.9, 10781.3), 4);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3025\n    connRef = new ConnRef(router, 3025);\n    srcPt = ConnEnd(Point(9085.99, 11632.9), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(10342.9, 10781.3), 4);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3026\n    connRef = new ConnRef(router, 3026);\n    srcPt = ConnEnd(Point(10372.9, 10781.3), 8);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(10875.2, 10781.3), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3027\n    connRef = new ConnRef(router, 3027);\n    srcPt = ConnEnd(Point(10875.2, 10781.3), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(11645.1, 10781.3), 4);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3028\n    connRef = new ConnRef(router, 3028);\n    srcPt = ConnEnd(Point(11675.1, 10781.3), 8);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(12531.5, 10781.3), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3029\n    connRef = new ConnRef(router, 3029);\n    srcPt = ConnEnd(Point(13575, 10781.3), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(13116, 10781.3), 8);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3030\n    connRef = new ConnRef(router, 3030);\n    srcPt = ConnEnd(Point(13086, 10781.3), 4);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(12531.5, 10781.3), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3031\n    connRef = new ConnRef(router, 3031);\n    srcPt = ConnEnd(Point(13575, 10781.3), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(14286, 10781.3), 4);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3032\n    connRef = new ConnRef(router, 3032);\n    srcPt = ConnEnd(Point(14316, 10781.3), 8);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(15019.9, 10781.3), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3033\n    connRef = new ConnRef(router, 3033);\n    srcPt = ConnEnd(Point(16198.6, 10781.3), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(15780.9, 10781.3), 8);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3034\n    connRef = new ConnRef(router, 3034);\n    srcPt = ConnEnd(Point(15750.9, 10781.3), 4);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(15019.9, 10781.3), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3035\n    connRef = new ConnRef(router, 3035);\n    srcPt = ConnEnd(Point(6189.1, 214.265), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(6105.1, 214.265), 8);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3036\n    connRef = new ConnRef(router, 3036);\n    srcPt = ConnEnd(Point(10974.2, 1643.29), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(6105.1, 214.265), 8);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3037\n    connRef = new ConnRef(router, 3037);\n    srcPt = ConnEnd(Point(6075.1, 214.265), 4);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(5925.1, 214.265), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3038\n    connRef = new ConnRef(router, 3038);\n    srcPt = ConnEnd(Point(6075.1, 214.265), 4);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(9652.69, 1943.29), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3039\n    connRef = new ConnRef(router, 3039);\n    srcPt = ConnEnd(Point(7765.29, 610.091), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(7765.29, 836.285), 1);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3040\n    connRef = new ConnRef(router, 3040);\n    srcPt = ConnEnd(Point(7765.29, 866.285), 2);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(7765.29, 1148.29), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3041\n    connRef = new ConnRef(router, 3041);\n    srcPt = ConnEnd(Point(10423.9, 6250.51), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(10423.9, 6400.51), 1);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3042\n    connRef = new ConnRef(router, 3042);\n    srcPt = ConnEnd(Point(10423.9, 6430.51), 2);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(10423.9, 6547.51), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3043\n    connRef = new ConnRef(router, 3043);\n    srcPt = ConnEnd(Point(10423.9, 6430.51), 2);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(8835.89, 5004.4), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3044\n    connRef = new ConnRef(router, 3044);\n    srcPt = ConnEnd(Point(15019.9, 10781.3), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(15148.3, 10929.6), 2);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3045\n    connRef = new ConnRef(router, 3045);\n    srcPt = ConnEnd(Point(7897.29, 983.285), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(7897.29, 4428.4), 1);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3046\n    connRef = new ConnRef(router, 3046);\n    srcPt = ConnEnd(Point(8835.89, 5512.67), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(7897.29, 4428.4), 1);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3047\n    connRef = new ConnRef(router, 3047);\n    srcPt = ConnEnd(Point(7897.29, 4458.4), 2);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(7897.29, 8939.22), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3048\n    connRef = new ConnRef(router, 3048);\n    srcPt = ConnEnd(Point(17052.8, 7062.4), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(17228.5, 7194.4), 8);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3049\n    connRef = new ConnRef(router, 3049);\n    srcPt = ConnEnd(Point(17198.5, 7194.4), 4);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(17052.8, 7425.4), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3050\n    connRef = new ConnRef(router, 3050);\n    srcPt = ConnEnd(Point(17198.5, 7194.4), 4);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(15239.5, 1511.29), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3051\n    connRef = new ConnRef(router, 3051);\n    srcPt = ConnEnd(Point(4553, 5964.59), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(4934, 5822.9), 4);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3052\n    connRef = new ConnRef(router, 3052);\n    srcPt = ConnEnd(Point(5312, 5964.59), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(4934, 5822.9), 4);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3053\n    connRef = new ConnRef(router, 3053);\n    srcPt = ConnEnd(Point(4964, 5822.9), 8);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(5991.1, 6382.51), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3054\n    connRef = new ConnRef(router, 3054);\n    srcPt = ConnEnd(Point(11363.1, 2843.29), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(11363.1, 2264.29), 2);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3055\n    connRef = new ConnRef(router, 3055);\n    srcPt = ConnEnd(Point(11363.1, 2234.29), 1);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(11363.1, 1643.29), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3056\n    connRef = new ConnRef(router, 3056);\n    srcPt = ConnEnd(Point(11363.1, 2234.29), 1);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(15239.5, 1511.29), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3057\n    connRef = new ConnRef(router, 3057);\n    srcPt = ConnEnd(Point(11363.1, 2843.29), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(11363.1, 3323.29), 1);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3058\n    connRef = new ConnRef(router, 3058);\n    srcPt = ConnEnd(Point(11363.1, 3353.29), 2);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(11363.1, 3697.51), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3059\n    connRef = new ConnRef(router, 3059);\n    srcPt = ConnEnd(Point(11363.1, 3697.51), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(11363.1, 4461.4), 1);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3060\n    connRef = new ConnRef(router, 3060);\n    srcPt = ConnEnd(Point(11363.1, 4491.4), 2);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(11363.1, 5169.4), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3061\n    connRef = new ConnRef(router, 3061);\n    srcPt = ConnEnd(Point(11363.1, 5169.4), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(11363.1, 5365.67), 1);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3062\n    connRef = new ConnRef(router, 3062);\n    srcPt = ConnEnd(Point(11363.1, 5395.67), 2);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(11363.1, 5756.9), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3063\n    connRef = new ConnRef(router, 3063);\n    srcPt = ConnEnd(Point(11363.1, 5756.9), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(11363.1, 6565.51), 1);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3064\n    connRef = new ConnRef(router, 3064);\n    srcPt = ConnEnd(Point(11363.1, 6595.51), 2);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(11363.1, 7579.79), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3065\n    connRef = new ConnRef(router, 3065);\n    srcPt = ConnEnd(Point(11363.1, 6595.51), 2);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(14037, 458.265), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3066\n    connRef = new ConnRef(router, 3066);\n    srcPt = ConnEnd(Point(11363.1, 6595.51), 2);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(10116, 10174), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3067\n    connRef = new ConnRef(router, 3067);\n    srcPt = ConnEnd(Point(11363.1, 7579.79), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(11363.1, 8399.99), 1);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3068\n    connRef = new ConnRef(router, 3068);\n    srcPt = ConnEnd(Point(11363.1, 8429.99), 2);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(11363.1, 9213.42), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3069\n    connRef = new ConnRef(router, 3069);\n    srcPt = ConnEnd(Point(11363.1, 10537), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(11363.1, 9991.02), 2);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3070\n    connRef = new ConnRef(router, 3070);\n    srcPt = ConnEnd(Point(10116, 9345.42), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(11363.1, 9991.02), 2);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3071\n    connRef = new ConnRef(router, 3071);\n    srcPt = ConnEnd(Point(11363.1, 9961.02), 1);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(11363.1, 9213.42), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3072\n    connRef = new ConnRef(router, 3072);\n    srcPt = ConnEnd(Point(11363.1, 9961.02), 1);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(10116, 10174), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3073\n    connRef = new ConnRef(router, 3073);\n    srcPt = ConnEnd(Point(11363.1, 10537), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(11363.1, 11163.6), 1);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3074\n    connRef = new ConnRef(router, 3074);\n    srcPt = ConnEnd(Point(11363.1, 11193.6), 2);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(11363.1, 12127.3), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3075\n    connRef = new ConnRef(router, 3075);\n    srcPt = ConnEnd(Point(11363.1, 12127.3), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(11909.1, 12127.3), 4);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3076\n    connRef = new ConnRef(router, 3076);\n    srcPt = ConnEnd(Point(11939.1, 12127.3), 8);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(12531.5, 12127.3), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3077\n    connRef = new ConnRef(router, 3077);\n    srcPt = ConnEnd(Point(12531.5, 12127.3), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(12907.5, 12127.3), 4);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3078\n    connRef = new ConnRef(router, 3078);\n    srcPt = ConnEnd(Point(12937.5, 12127.3), 8);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(13233, 12127.3), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3079\n    connRef = new ConnRef(router, 3079);\n    srcPt = ConnEnd(Point(8161.29, 1280.29), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(8344.29, 1280.29), 4);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3080\n    connRef = new ConnRef(router, 3080);\n    srcPt = ConnEnd(Point(8374.29, 1280.29), 8);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(8458.29, 1280.29), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3081\n    connRef = new ConnRef(router, 3081);\n    srcPt = ConnEnd(Point(8161.29, 1280.29), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(7912.29, 1280.29), 8);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3082\n    connRef = new ConnRef(router, 3082);\n    srcPt = ConnEnd(Point(7882.29, 1280.29), 4);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(7608.1, 1280.29), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3083\n    connRef = new ConnRef(router, 3083);\n    srcPt = ConnEnd(Point(7608.1, 1280.29), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(7608.1, 1397.29), 1);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3084\n    connRef = new ConnRef(router, 3084);\n    srcPt = ConnEnd(Point(7608.1, 1427.29), 2);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(7608.1, 1610.29), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3085\n    connRef = new ConnRef(router, 3085);\n    srcPt = ConnEnd(Point(7608.1, 2777.29), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(7608.1, 2993.29), 1);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3086\n    connRef = new ConnRef(router, 3086);\n    srcPt = ConnEnd(Point(7608.1, 3023.29), 2);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(7608.1, 3206.29), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3087\n    connRef = new ConnRef(router, 3087);\n    srcPt = ConnEnd(Point(10809.2, 7128.4), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(9949.69, 9961.02), 1);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3088\n    connRef = new ConnRef(router, 3088);\n    srcPt = ConnEnd(Point(9949.69, 9991.02), 2);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(9237.59, 12458.7), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3089\n    connRef = new ConnRef(router, 3089);\n    srcPt = ConnEnd(Point(15239.5, 1511.29), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(14971.9, 1181.29), 4);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3090\n    connRef = new ConnRef(router, 3090);\n    srcPt = ConnEnd(Point(16557.8, 11982.3), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(14971.9, 1181.29), 4);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3091\n    connRef = new ConnRef(router, 3091);\n    srcPt = ConnEnd(Point(9237.59, 12458.7), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(14971.9, 1181.29), 4);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3092\n    connRef = new ConnRef(router, 3092);\n    srcPt = ConnEnd(Point(15001.9, 1181.29), 8);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(15239.5, 742.091), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3093\n    connRef = new ConnRef(router, 3093);\n    srcPt = ConnEnd(Point(15001.9, 1181.29), 8);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(16788.8, 12458.7), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3094\n    connRef = new ConnRef(router, 3094);\n    srcPt = ConnEnd(Point(15868.6, 11632.9), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(16051.6, 11794.9), 4);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3095\n    connRef = new ConnRef(router, 3095);\n    srcPt = ConnEnd(Point(16081.6, 11794.9), 8);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(16198.6, 11982.3), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3096\n    connRef = new ConnRef(router, 3096);\n    srcPt = ConnEnd(Point(1385, 4773.4), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(1568, 4773.4), 4);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3097\n    connRef = new ConnRef(router, 3097);\n    srcPt = ConnEnd(Point(1598, 4773.4), 8);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(1715, 4773.4), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3098\n    connRef = new ConnRef(router, 3098);\n    srcPt = ConnEnd(Point(1598, 4773.4), 8);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(8835.89, 5512.67), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3099\n    connRef = new ConnRef(router, 3099);\n    srcPt = ConnEnd(Point(2837, 4773.4), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(3020, 4773.4), 4);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3100\n    connRef = new ConnRef(router, 3100);\n    srcPt = ConnEnd(Point(3050, 4773.4), 8);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(3233, 4773.4), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3101\n    connRef = new ConnRef(router, 3101);\n    srcPt = ConnEnd(Point(3050, 4773.4), 8);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(8835.89, 5512.67), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3102\n    connRef = new ConnRef(router, 3102);\n    srcPt = ConnEnd(Point(4553, 5964.59), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(4949, 6136.51), 1);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3103\n    connRef = new ConnRef(router, 3103);\n    srcPt = ConnEnd(Point(5312, 5964.59), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(4949, 6136.51), 1);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3104\n    connRef = new ConnRef(router, 3104);\n    srcPt = ConnEnd(Point(4949, 6166.51), 2);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(6750.1, 6514.51), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3105\n    connRef = new ConnRef(router, 3105);\n    srcPt = ConnEnd(Point(15239.5, 1511.29), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(14745, 1346.29), 8);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3106\n    connRef = new ConnRef(router, 3106);\n    srcPt = ConnEnd(Point(9435.59, 6963.4), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(14745, 1346.29), 8);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3107\n    connRef = new ConnRef(router, 3107);\n    srcPt = ConnEnd(Point(14715, 1346.29), 4);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(15239.5, 1181.29), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3108\n    connRef = new ConnRef(router, 3108);\n    srcPt = ConnEnd(Point(14715, 1346.29), 4);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(8835.89, 5512.67), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3109\n    connRef = new ConnRef(router, 3109);\n    srcPt = ConnEnd(Point(14715, 1346.29), 4);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(8293.29, 6854.21), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3110\n    connRef = new ConnRef(router, 3110);\n    srcPt = ConnEnd(Point(9435.59, 6963.4), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(9667.69, 6184.51), 8);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3111\n    connRef = new ConnRef(router, 3111);\n    srcPt = ConnEnd(Point(9637.69, 6184.51), 4);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(9784.69, 5512.67), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3112\n    connRef = new ConnRef(router, 3112);\n    srcPt = ConnEnd(Point(9637.69, 6184.51), 4);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(8293.29, 6854.21), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3113\n    connRef = new ConnRef(router, 3113);\n    srcPt = ConnEnd(Point(6552.1, 10715.3), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(7098.1, 10240), 4);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3114\n    connRef = new ConnRef(router, 3114);\n    srcPt = ConnEnd(Point(7831.29, 9477.42), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(7098.1, 10240), 4);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3115\n    connRef = new ConnRef(router, 3115);\n    srcPt = ConnEnd(Point(7128.1, 10240), 8);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(7410.1, 8579.99), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3116\n    connRef = new ConnRef(router, 3116);\n    srcPt = ConnEnd(Point(7831.29, 9477.42), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(8212.29, 9675.42), 4);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3117\n    connRef = new ConnRef(router, 3117);\n    srcPt = ConnEnd(Point(8242.29, 9675.42), 8);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(8684.29, 9976.02), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3118\n    connRef = new ConnRef(router, 3118);\n    srcPt = ConnEnd(Point(7831.29, 9477.42), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(8311.29, 9844.02), 4);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3119\n    connRef = new ConnRef(router, 3119);\n    srcPt = ConnEnd(Point(8341.29, 9844.02), 8);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(8684.29, 9976.02), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3120\n    connRef = new ConnRef(router, 3120);\n    srcPt = ConnEnd(Point(10116, 9345.42), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(10324.9, 9459.42), 2);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3121\n    connRef = new ConnRef(router, 3121);\n    srcPt = ConnEnd(Point(8684.29, 9976.02), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(8802.89, 10090), 2);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3122\n    connRef = new ConnRef(router, 3122);\n    srcPt = ConnEnd(Point(9085.99, 11632.9), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(9204.59, 11713.9), 2);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3123\n    connRef = new ConnRef(router, 3123);\n    srcPt = ConnEnd(Point(8835.89, 5512.67), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(9019.99, 5672.9), 2);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3124\n    connRef = new ConnRef(router, 3124);\n    srcPt = ConnEnd(Point(8835.89, 2108.29), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(9019.99, 2366.29), 1);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3125\n    connRef = new ConnRef(router, 3125);\n    srcPt = ConnEnd(Point(9019.99, 2396.29), 2);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(8835.89, 2579.29), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3126\n    connRef = new ConnRef(router, 3126);\n    srcPt = ConnEnd(Point(8458.29, 1676.29), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(8458.29, 1493.29), 2);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3127\n    connRef = new ConnRef(router, 3127);\n    srcPt = ConnEnd(Point(8458.29, 1463.29), 1);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(8458.29, 1280.29), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3128\n    connRef = new ConnRef(router, 3128);\n    srcPt = ConnEnd(Point(8458.29, 1280.29), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(8603.29, 1478.29), 4);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3129\n    connRef = new ConnRef(router, 3129);\n    srcPt = ConnEnd(Point(15239.5, 1181.29), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(8603.29, 1478.29), 4);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3130\n    connRef = new ConnRef(router, 3130);\n    srcPt = ConnEnd(Point(8633.29, 1478.29), 8);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(8458.29, 1676.29), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3131\n    connRef = new ConnRef(router, 3131);\n    srcPt = ConnEnd(Point(8633.29, 1478.29), 8);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(15239.5, 742.091), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3132\n    connRef = new ConnRef(router, 3132);\n    srcPt = ConnEnd(Point(7996.29, 808.091), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(8245.29, 808.091), 4);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3133\n    connRef = new ConnRef(router, 3133);\n    srcPt = ConnEnd(Point(8275.29, 808.091), 8);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(8458.29, 808.091), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3134\n    connRef = new ConnRef(router, 3134);\n    srcPt = ConnEnd(Point(7996.29, 808.091), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(8260.29, 932.285), 2);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3135\n    connRef = new ConnRef(router, 3135);\n    srcPt = ConnEnd(Point(15239.5, 1181.29), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(8260.29, 932.285), 2);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3136\n    connRef = new ConnRef(router, 3136);\n    srcPt = ConnEnd(Point(8260.29, 902.285), 1);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(8458.29, 808.091), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3137\n    connRef = new ConnRef(router, 3137);\n    srcPt = ConnEnd(Point(8260.29, 902.285), 1);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(15239.5, 742.091), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3138\n    connRef = new ConnRef(router, 3138);\n    srcPt = ConnEnd(Point(7996.29, 1148.29), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(8603.29, 983.285), 4);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3139\n    connRef = new ConnRef(router, 3139);\n    srcPt = ConnEnd(Point(8633.29, 983.285), 8);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(9270.59, 808.091), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3140\n    connRef = new ConnRef(router, 3140);\n    srcPt = ConnEnd(Point(7996.29, 1148.29), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(15239.5, 998.285), 2);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3141\n    connRef = new ConnRef(router, 3141);\n    srcPt = ConnEnd(Point(15239.5, 1181.29), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(15239.5, 998.285), 2);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3142\n    connRef = new ConnRef(router, 3142);\n    srcPt = ConnEnd(Point(15239.5, 968.285), 1);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(9270.59, 808.091), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3143\n    connRef = new ConnRef(router, 3143);\n    srcPt = ConnEnd(Point(15239.5, 968.285), 1);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(15239.5, 742.091), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3144\n    connRef = new ConnRef(router, 3144);\n    srcPt = ConnEnd(Point(12531.5, 5512.67), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(12676.5, 5314.67), 4);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3145\n    connRef = new ConnRef(router, 3145);\n    srcPt = ConnEnd(Point(8835.89, 5004.4), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(12676.5, 5314.67), 4);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3146\n    connRef = new ConnRef(router, 3146);\n    srcPt = ConnEnd(Point(12706.5, 5314.67), 8);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(12531.5, 5169.4), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3147\n    connRef = new ConnRef(router, 3147);\n    srcPt = ConnEnd(Point(12531.5, 5512.67), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(12338.1, 5314.67), 4);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3148\n    connRef = new ConnRef(router, 3148);\n    srcPt = ConnEnd(Point(10116, 9345.42), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(12338.1, 5314.67), 4);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3149\n    connRef = new ConnRef(router, 3149);\n    srcPt = ConnEnd(Point(12368.1, 5314.67), 8);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(12531.5, 5169.4), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3150\n    connRef = new ConnRef(router, 3150);\n    srcPt = ConnEnd(Point(12368.1, 5314.67), 8);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(10116, 10174), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3151\n    connRef = new ConnRef(router, 3151);\n    srcPt = ConnEnd(Point(12531.5, 4740.4), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(13086, 4542.4), 4);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3152\n    connRef = new ConnRef(router, 3152);\n    srcPt = ConnEnd(Point(13116, 4542.4), 8);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(13266, 4126.51), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3153\n    connRef = new ConnRef(router, 3153);\n    srcPt = ConnEnd(Point(13266, 3631.51), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(13461, 3862.51), 4);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3154\n    connRef = new ConnRef(router, 3154);\n    srcPt = ConnEnd(Point(8835.89, 5004.4), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(13461, 3862.51), 4);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3155\n    connRef = new ConnRef(router, 3155);\n    srcPt = ConnEnd(Point(13491, 3862.51), 8);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(13266, 4126.51), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3156\n    connRef = new ConnRef(router, 3156);\n    srcPt = ConnEnd(Point(12531.5, 4361.11), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(12706.5, 3994.51), 8);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3157\n    connRef = new ConnRef(router, 3157);\n    srcPt = ConnEnd(Point(12676.5, 3994.51), 4);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(12531.5, 3730.51), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3158\n    connRef = new ConnRef(router, 3158);\n    srcPt = ConnEnd(Point(12676.5, 3994.51), 4);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(8835.89, 5004.4), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3159\n    connRef = new ConnRef(router, 3159);\n    srcPt = ConnEnd(Point(12676.5, 3994.51), 4);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(10116, 10174), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3160\n    connRef = new ConnRef(router, 3160);\n    srcPt = ConnEnd(Point(11429.1, 8873.22), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(11253.2, 9048.42), 8);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3161\n    connRef = new ConnRef(router, 3161);\n    srcPt = ConnEnd(Point(11223.2, 9048.42), 4);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(11040.2, 8873.22), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3162\n    connRef = new ConnRef(router, 3162);\n    srcPt = ConnEnd(Point(5312, 4938.4), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(5496.1, 4590.4), 2);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3163\n    connRef = new ConnRef(router, 3163);\n    srcPt = ConnEnd(Point(5496.1, 4560.4), 1);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(5312, 4126.51), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3164\n    connRef = new ConnRef(router, 3164);\n    srcPt = ConnEnd(Point(5312, 5964.59), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(5496.1, 5184.4), 2);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3165\n    connRef = new ConnRef(router, 3165);\n    srcPt = ConnEnd(Point(5496.1, 5154.4), 1);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(5312, 4126.51), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3166\n    connRef = new ConnRef(router, 3166);\n    srcPt = ConnEnd(Point(15239.5, 1511.29), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(15820.6, 1346.29), 4);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3167\n    connRef = new ConnRef(router, 3167);\n    srcPt = ConnEnd(Point(14037, 458.265), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(15820.6, 1346.29), 4);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3168\n    connRef = new ConnRef(router, 3168);\n    srcPt = ConnEnd(Point(15850.6, 1346.29), 8);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(15239.5, 1181.29), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3169\n    connRef = new ConnRef(router, 3169);\n    srcPt = ConnEnd(Point(15850.6, 1346.29), 8);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(14565, 458.265), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3170\n    connRef = new ConnRef(router, 3170);\n    srcPt = ConnEnd(Point(11495.1, 8074.79), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(11121.2, 8249.99), 8);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3171\n    connRef = new ConnRef(router, 3171);\n    srcPt = ConnEnd(Point(11091.2, 8249.99), 4);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(10809.2, 8074.79), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3172\n    connRef = new ConnRef(router, 3172);\n    srcPt = ConnEnd(Point(15407.5, 7425.4), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(16509.8, 7425.4), 4);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3173\n    connRef = new ConnRef(router, 3173);\n    srcPt = ConnEnd(Point(16539.8, 7425.4), 8);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(17052.8, 7425.4), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3174\n    connRef = new ConnRef(router, 3174);\n    srcPt = ConnEnd(Point(15407.5, 7425.4), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(16509.8, 7546.79), 4);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3175\n    connRef = new ConnRef(router, 3175);\n    srcPt = ConnEnd(Point(16539.8, 7546.79), 8);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(17052.8, 7425.4), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3176\n    connRef = new ConnRef(router, 3176);\n    srcPt = ConnEnd(Point(18630.5, 11860.9), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(18531, 11982.3), 8);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3177\n    connRef = new ConnRef(router, 3177);\n    srcPt = ConnEnd(Point(18501, 11982.3), 4);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(18401.5, 11860.9), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3178\n    connRef = new ConnRef(router, 3178);\n    srcPt = ConnEnd(Point(18501, 11982.3), 4);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(9171.59, 458.265), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3179\n    connRef = new ConnRef(router, 3179);\n    srcPt = ConnEnd(Point(10809.2, 4542.4), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(10809.2, 5642.9), 1);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3180\n    connRef = new ConnRef(router, 3180);\n    srcPt = ConnEnd(Point(10809.2, 5672.9), 2);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(10809.2, 7128.4), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3181\n    connRef = new ConnRef(router, 3181);\n    srcPt = ConnEnd(Point(15239.5, 1511.29), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(15619.3, 1181.29), 8);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3182\n    connRef = new ConnRef(router, 3182);\n    srcPt = ConnEnd(Point(10809.2, 7128.4), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(15619.3, 1181.29), 8);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3183\n    connRef = new ConnRef(router, 3183);\n    srcPt = ConnEnd(Point(15589.3, 1181.29), 4);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(15239.5, 742.091), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3184\n    connRef = new ConnRef(router, 3184);\n    srcPt = ConnEnd(Point(15589.3, 1181.29), 4);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(10809.2, 4542.4), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3185\n    connRef = new ConnRef(router, 3185);\n    srcPt = ConnEnd(Point(15589.3, 1181.29), 4);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(10116, 10174), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3186\n    connRef = new ConnRef(router, 3186);\n    srcPt = ConnEnd(Point(11396.1, 4361.11), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(11253.2, 4509.4), 8);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3187\n    connRef = new ConnRef(router, 3187);\n    srcPt = ConnEnd(Point(11223.2, 4509.4), 4);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(11073.2, 4361.11), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3188\n    connRef = new ConnRef(router, 3188);\n    srcPt = ConnEnd(Point(11396.1, 4361.11), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(11253.2, 4192.51), 8);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3189\n    connRef = new ConnRef(router, 3189);\n    srcPt = ConnEnd(Point(11223.2, 4192.51), 4);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(11073.2, 4361.11), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3190\n    connRef = new ConnRef(router, 3190);\n    srcPt = ConnEnd(Point(13200, 6788.21), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(14583, 6963.4), 4);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3191\n    connRef = new ConnRef(router, 3191);\n    srcPt = ConnEnd(Point(14613, 6963.4), 8);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(16231.6, 6788.21), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3192\n    connRef = new ConnRef(router, 3192);\n    srcPt = ConnEnd(Point(13200, 6788.21), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(14583, 6646.51), 4);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3193\n    connRef = new ConnRef(router, 3193);\n    srcPt = ConnEnd(Point(14613, 6646.51), 8);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(16231.6, 6788.21), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3194\n    connRef = new ConnRef(router, 3194);\n    srcPt = ConnEnd(Point(10116, 10174), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(9982.69, 9723.42), 2);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3195\n    connRef = new ConnRef(router, 3195);\n    srcPt = ConnEnd(Point(9982.69, 9693.42), 1);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(10116, 9345.42), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3196\n    connRef = new ConnRef(router, 3196);\n    srcPt = ConnEnd(Point(9019.99, 11211.6), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(8699.29, 11386.8), 8);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3197\n    connRef = new ConnRef(router, 3197);\n    srcPt = ConnEnd(Point(17052.8, 7062.4), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(8699.29, 11386.8), 8);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3198\n    connRef = new ConnRef(router, 3198);\n    srcPt = ConnEnd(Point(8669.29, 11386.8), 4);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(8392.29, 11211.6), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3199\n    connRef = new ConnRef(router, 3199);\n    srcPt = ConnEnd(Point(8669.29, 11386.8), 4);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(17052.8, 7425.4), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3200\n    connRef = new ConnRef(router, 3200);\n    srcPt = ConnEnd(Point(16198.6, 11632.9), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(16066.6, 11532.7), 1);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3201\n    connRef = new ConnRef(router, 3201);\n    srcPt = ConnEnd(Point(8835.89, 5004.4), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(16066.6, 11532.7), 1);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3202\n    connRef = new ConnRef(router, 3202);\n    srcPt = ConnEnd(Point(16066.6, 11562.7), 2);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(15868.6, 11632.9), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3203\n    connRef = new ConnRef(router, 3203);\n    srcPt = ConnEnd(Point(16198.6, 11632.9), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(16081.6, 11386.8), 8);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3204\n    connRef = new ConnRef(router, 3204);\n    srcPt = ConnEnd(Point(16051.6, 11386.8), 4);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(15868.6, 11632.9), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3205\n    connRef = new ConnRef(router, 3205);\n    srcPt = ConnEnd(Point(14004, 12292.3), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(14187, 12425.7), 4);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3206\n    connRef = new ConnRef(router, 3206);\n    srcPt = ConnEnd(Point(10116, 9345.42), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(14187, 12425.7), 4);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3207\n    connRef = new ConnRef(router, 3207);\n    srcPt = ConnEnd(Point(14217, 12425.7), 8);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(14400, 12292.3), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3208\n    connRef = new ConnRef(router, 3208);\n    srcPt = ConnEnd(Point(14217, 12425.7), 8);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(10116, 10174), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3209\n    connRef = new ConnRef(router, 3209);\n    srcPt = ConnEnd(Point(9501.59, 8249.99), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(9685.69, 7374.4), 2);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3210\n    connRef = new ConnRef(router, 3210);\n    srcPt = ConnEnd(Point(9685.69, 7344.4), 1);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(9501.59, 6481.51), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3211\n    connRef = new ConnRef(router, 3211);\n    srcPt = ConnEnd(Point(16198.6, 10781.3), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(15780.9, 10914.6), 8);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3212\n    connRef = new ConnRef(router, 3212);\n    srcPt = ConnEnd(Point(10116, 9345.42), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(15780.9, 10914.6), 8);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3213\n    connRef = new ConnRef(router, 3213);\n    srcPt = ConnEnd(Point(15750.9, 10914.6), 4);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(15019.9, 10781.3), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3214\n    connRef = new ConnRef(router, 3214);\n    srcPt = ConnEnd(Point(15750.9, 10914.6), 4);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(10116, 10174), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3215\n    connRef = new ConnRef(router, 3215);\n    srcPt = ConnEnd(Point(15019.9, 11794.9), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(15148.3, 11908.9), 2);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3216\n    connRef = new ConnRef(router, 3216);\n    srcPt = ConnEnd(Point(7608.1, 1280.29), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(7765.29, 1397.29), 1);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3217\n    connRef = new ConnRef(router, 3217);\n    srcPt = ConnEnd(Point(7765.29, 1427.29), 2);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(7608.1, 1610.29), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3218\n    connRef = new ConnRef(router, 3218);\n    srcPt = ConnEnd(Point(16788.8, 12458.7), 15);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(12937.5, 12458.7), 8);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3219\n    connRef = new ConnRef(router, 3219);\n    srcPt = ConnEnd(Point(12907.5, 12458.7), 4);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(16557.8, 11982.3), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    // connRef3220\n    connRef = new ConnRef(router, 3220);\n    srcPt = ConnEnd(Point(12907.5, 12458.7), 4);\n    connRef->setSourceEndpoint(srcPt);\n    dstPt = ConnEnd(Point(9237.59, 12458.7), 15);\n    connRef->setDestEndpoint(dstPt);\n    connRef->setRoutingType((ConnType)2);\n\n    router->processTransaction();\n\n\trouter->outputDiagram(\"output/UnsatisfiableRangeAssertion\");\n    delete router;\n    return 0;\n};\n"
  },
  {
    "path": "cola/libavoid/tests/validPaths01.cpp",
    "content": "#include \"libavoid/libavoid.h\"\r\nusing namespace Avoid;\r\nint main(void) {\r\n    Router *router = new Router(\r\n            PolyLineRouting | OrthogonalRouting);\r\n    router->setRoutingPenalty((PenaltyType)0, 50);\r\n    router->setRoutingPenalty((PenaltyType)1, 0);\r\n    router->setRoutingPenalty((PenaltyType)2, 200);\r\n    router->setRoutingPenalty((PenaltyType)3, 4000);\r\n    router->setRoutingPenalty((PenaltyType)4, 110);\r\n    router->setRoutingPenalty((PenaltyType)5, 100);\r\n    router->setRoutingOption((RoutingOption)0, false);\r\n    router->setRoutingOption((RoutingOption)1, true);\r\n    router->setRoutingParameter(idealNudgingDistance, 25);\r\n\r\n    Polygon poly3075375(4);\r\n    poly3075375.ps[0] = Point(51925, 52070);\r\n    poly3075375.ps[1] = Point(51925, 52130);\r\n    poly3075375.ps[2] = Point(51725, 52130);\r\n    poly3075375.ps[3] = Point(51725, 52070);\r\n    new ShapeRef(router, poly3075375, 3075375);\r\n\r\n    Polygon poly101599344(4);\r\n    poly101599344.ps[0] = Point(50275, 52410);\r\n    poly101599344.ps[1] = Point(50275, 52490);\r\n    poly101599344.ps[2] = Point(50075, 52490);\r\n    poly101599344.ps[3] = Point(50075, 52410);\r\n    new ShapeRef(router, poly101599344, 101599344);\r\n\r\n    Polygon poly127957550(4);\r\n    poly127957550.ps[0] = Point(52010, 51617);\r\n    poly127957550.ps[1] = Point(52010, 51683);\r\n    poly127957550.ps[2] = Point(51890, 51683);\r\n    poly127957550.ps[3] = Point(51890, 51617);\r\n    ShapeRef *shapeRef127957550 = new ShapeRef(router, poly127957550, 127957550);\r\n    new ShapeConnectionPin(shapeRef127957550, 2147483646, 0.5, 0.5, true, 0, (ConnDirFlags) 1);\r\n    new ShapeConnectionPin(shapeRef127957550, 2147483646, 0.5, 0.5, true, 0, (ConnDirFlags) 2);\r\n    new ShapeConnectionPin(shapeRef127957550, 2147483646, 0.5, 0.5, true, 0, (ConnDirFlags) 4);\r\n    new ShapeConnectionPin(shapeRef127957550, 2147483646, 0.5, 0.5, true, 0, (ConnDirFlags) 8);\r\n\r\n    Polygon poly129612347(4);\r\n    poly129612347.ps[0] = Point(51900, 51696);\r\n    poly129612347.ps[1] = Point(51900, 51754);\r\n    poly129612347.ps[2] = Point(51815, 51754);\r\n    poly129612347.ps[3] = Point(51815, 51696);\r\n    new ShapeRef(router, poly129612347, 129612347);\r\n\r\n    Polygon poly203389050(4);\r\n    poly203389050.ps[0] = Point(51825, 52260);\r\n    poly203389050.ps[1] = Point(51825, 52340);\r\n    poly203389050.ps[2] = Point(51625, 52340);\r\n    poly203389050.ps[3] = Point(51625, 52260);\r\n    new ShapeRef(router, poly203389050, 203389050);\r\n\r\n    Polygon poly208676910(4);\r\n    poly208676910.ps[0] = Point(51950, 51760);\r\n    poly208676910.ps[1] = Point(51950, 51840);\r\n    poly208676910.ps[2] = Point(51750, 51840);\r\n    poly208676910.ps[3] = Point(51750, 51760);\r\n    new ShapeRef(router, poly208676910, 208676910);\r\n\r\n    Polygon poly219117032(4);\r\n    poly219117032.ps[0] = Point(50225, 52070);\r\n    poly219117032.ps[1] = Point(50225, 52130);\r\n    poly219117032.ps[2] = Point(50025, 52130);\r\n    poly219117032.ps[3] = Point(50025, 52070);\r\n    new ShapeRef(router, poly219117032, 219117032);\r\n\r\n    Polygon poly258454350(4);\r\n    poly258454350.ps[0] = Point(50185, 51617);\r\n    poly258454350.ps[1] = Point(50185, 51683);\r\n    poly258454350.ps[2] = Point(50065, 51683);\r\n    poly258454350.ps[3] = Point(50065, 51617);\r\n    ShapeRef *shapeRef258454350 = new ShapeRef(router, poly258454350, 258454350);\r\n    new ShapeConnectionPin(shapeRef258454350, 2147483646, 0.5, 0.5, true, 0, (ConnDirFlags) 1);\r\n    new ShapeConnectionPin(shapeRef258454350, 2147483646, 0.5, 0.5, true, 0, (ConnDirFlags) 2);\r\n    new ShapeConnectionPin(shapeRef258454350, 2147483646, 0.5, 0.5, true, 0, (ConnDirFlags) 4);\r\n    new ShapeConnectionPin(shapeRef258454350, 2147483646, 0.5, 0.5, true, 0, (ConnDirFlags) 8);\r\n\r\n    Polygon poly274504590(4);\r\n    poly274504590.ps[0] = Point(51400, 52470);\r\n    poly274504590.ps[1] = Point(51400, 52530);\r\n    poly274504590.ps[2] = Point(51150, 52530);\r\n    poly274504590.ps[3] = Point(51150, 52470);\r\n    new ShapeRef(router, poly274504590, 274504590);\r\n\r\n    Polygon poly320957826(4);\r\n    poly320957826.ps[0] = Point(50275, 51910);\r\n    poly320957826.ps[1] = Point(50275, 51990);\r\n    poly320957826.ps[2] = Point(50075, 51990);\r\n    poly320957826.ps[3] = Point(50075, 51910);\r\n    new ShapeRef(router, poly320957826, 320957826);\r\n\r\n    Polygon poly368436384(4);\r\n    poly368436384.ps[0] = Point(50325, 51696);\r\n    poly368436384.ps[1] = Point(50325, 51754);\r\n    poly368436384.ps[2] = Point(50240, 51754);\r\n    poly368436384.ps[3] = Point(50240, 51696);\r\n    new ShapeRef(router, poly368436384, 368436384);\r\n\r\n    Polygon poly381499178(4);\r\n    poly381499178.ps[0] = Point(51850, 51345);\r\n    poly381499178.ps[1] = Point(51850, 51405);\r\n    poly381499178.ps[2] = Point(51650, 51405);\r\n    poly381499178.ps[3] = Point(51650, 51345);\r\n    new ShapeRef(router, poly381499178, 381499178);\r\n\r\n    Polygon poly426410694(4);\r\n    poly426410694.ps[0] = Point(50325, 52270);\r\n    poly426410694.ps[1] = Point(50325, 52330);\r\n    poly426410694.ps[2] = Point(50125, 52330);\r\n    poly426410694.ps[3] = Point(50125, 52270);\r\n    new ShapeRef(router, poly426410694, 426410694);\r\n\r\n    Polygon poly428912890(4);\r\n    poly428912890.ps[0] = Point(51825, 51510);\r\n    poly428912890.ps[1] = Point(51825, 51590);\r\n    poly428912890.ps[2] = Point(51625, 51590);\r\n    poly428912890.ps[3] = Point(51625, 51510);\r\n    new ShapeRef(router, poly428912890, 428912890);\r\n\r\n    Polygon poly468897320(4);\r\n    poly468897320.ps[0] = Point(50425, 51520);\r\n    poly468897320.ps[1] = Point(50425, 51580);\r\n    poly468897320.ps[2] = Point(50225, 51580);\r\n    poly468897320.ps[3] = Point(50225, 51520);\r\n    new ShapeRef(router, poly468897320, 468897320);\r\n\r\n    Polygon poly517518507(4);\r\n    poly517518507.ps[0] = Point(51925, 51910);\r\n    poly517518507.ps[1] = Point(51925, 51990);\r\n    poly517518507.ps[2] = Point(51725, 51990);\r\n    poly517518507.ps[3] = Point(51725, 51910);\r\n    new ShapeRef(router, poly517518507, 517518507);\r\n\r\n    Polygon poly565878858(4);\r\n    poly565878858.ps[0] = Point(51160, 52500);\r\n    poly565878858.ps[1] = Point(51160, 52810);\r\n    poly565878858.ps[2] = Point(50890, 52810);\r\n    poly565878858.ps[3] = Point(50890, 52500);\r\n    new ShapeRef(router, poly565878858, 565878858);\r\n\r\n    Polygon poly706147100(4);\r\n    poly706147100.ps[0] = Point(51160, 50990);\r\n    poly706147100.ps[1] = Point(51160, 51300);\r\n    poly706147100.ps[2] = Point(50890, 51300);\r\n    poly706147100.ps[3] = Point(50890, 50990);\r\n    new ShapeRef(router, poly706147100, 706147100);\r\n\r\n    Polygon poly746254622(4);\r\n    poly746254622.ps[0] = Point(50275, 51760);\r\n    poly746254622.ps[1] = Point(50275, 51840);\r\n    poly746254622.ps[2] = Point(50075, 51840);\r\n    poly746254622.ps[3] = Point(50075, 51760);\r\n    new ShapeRef(router, poly746254622, 746254622);\r\n\r\n    Polygon poly829835240(4);\r\n    poly829835240.ps[0] = Point(50425, 51360);\r\n    poly829835240.ps[1] = Point(50425, 51440);\r\n    poly829835240.ps[2] = Point(50225, 51440);\r\n    poly829835240.ps[3] = Point(50225, 51360);\r\n    new ShapeRef(router, poly829835240, 829835240);\r\n\r\n    Polygon poly157548160(4);\r\n    poly157548160.ps[0] = Point(51550, 51500);\r\n    poly157548160.ps[1] = Point(51550, 52225);\r\n    poly157548160.ps[2] = Point(50525, 52225);\r\n    poly157548160.ps[3] = Point(50525, 51500);\r\n    new ShapeRef(router, poly157548160, 157548160);\r\n\r\n    ConnRef *connRef6675422 = new ConnRef(router, 6675422);\r\n    ConnEnd srcPt6675422(Point(51100, 51290), 2);\r\n    connRef6675422->setSourceEndpoint(srcPt6675422);\r\n    ConnEnd dstPt6675422(Point(51150, 51510), 1);\r\n    connRef6675422->setDestEndpoint(dstPt6675422);\r\n    connRef6675422->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef13259320 = new ConnRef(router, 13259320);\r\n    ConnEnd srcPt13259320(Point(50535, 51675), 4);\r\n    connRef13259320->setSourceEndpoint(srcPt13259320);\r\n    ConnEnd dstPt13259320(Point(50315, 51725), 8);\r\n    connRef13259320->setDestEndpoint(dstPt13259320);\r\n    connRef13259320->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef17108208 = new ConnRef(router, 17108208);\r\n    ConnEnd srcPt17108208(Point(51540, 52050), 8);\r\n    connRef17108208->setSourceEndpoint(srcPt17108208);\r\n    ConnEnd dstPt17108208(Point(51735, 52100), 4);\r\n    connRef17108208->setDestEndpoint(dstPt17108208);\r\n    connRef17108208->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef41442471 = new ConnRef(router, 41442471);\r\n    ConnEnd srcPt41442471(Point(51075, 52215), 2);\r\n    connRef41442471->setSourceEndpoint(srcPt41442471);\r\n    ConnEnd dstPt41442471(Point(51050, 52510), 1);\r\n    connRef41442471->setDestEndpoint(dstPt41442471);\r\n    connRef41442471->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef45863720 = new ConnRef(router, 45863720);\r\n    ConnEnd srcPt45863720(Point(51660, 51375), 4);\r\n    connRef45863720->setSourceEndpoint(srcPt45863720);\r\n    ConnEnd dstPt45863720(Point(51300, 51510), 1);\r\n    connRef45863720->setDestEndpoint(dstPt45863720);\r\n    connRef45863720->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef52653348 = new ConnRef(router, 52653348);\r\n    ConnEnd srcPt52653348(Point(50535, 52050), 4);\r\n    connRef52653348->setSourceEndpoint(srcPt52653348);\r\n    ConnEnd dstPt52653348(Point(50215, 52100), 8);\r\n    connRef52653348->setDestEndpoint(dstPt52653348);\r\n    connRef52653348->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef57649636 = new ConnRef(router, 57649636);\r\n    ConnEnd srcPt57649636(Point(51540, 52125), 8);\r\n    connRef57649636->setSourceEndpoint(srcPt57649636);\r\n    ConnEnd dstPt57649636(Point(51915, 52100), 8);\r\n    connRef57649636->setDestEndpoint(dstPt57649636);\r\n    connRef57649636->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef64735671 = new ConnRef(router, 64735671);\r\n    ConnEnd srcPt64735671(Point(51375, 52215), 2);\r\n    connRef64735671->setSourceEndpoint(srcPt64735671);\r\n    ConnEnd dstPt64735671(Point(51815, 52300), 8);\r\n    connRef64735671->setDestEndpoint(dstPt64735671);\r\n    connRef64735671->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef81789576 = new ConnRef(router, 81789576);\r\n    ConnEnd srcPt81789576(Point(50950, 51290), 2);\r\n    connRef81789576->setSourceEndpoint(srcPt81789576);\r\n    ConnEnd dstPt81789576(Point(50925, 51510), 1);\r\n    connRef81789576->setDestEndpoint(dstPt81789576);\r\n    connRef81789576->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef87742344 = new ConnRef(router, 87742344);\r\n    ConnEnd srcPt87742344(Point(51540, 51600), 8);\r\n    connRef87742344->setSourceEndpoint(srcPt87742344);\r\n    ConnEnd dstPt87742344(shapeRef127957550, 2147483646);\r\n    connRef87742344->setDestEndpoint(dstPt87742344);\r\n    connRef87742344->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef92624219 = new ConnRef(router, 92624219);\r\n    ConnEnd srcPt92624219(Point(51450, 52215), 2);\r\n    connRef92624219->setSourceEndpoint(srcPt92624219);\r\n    ConnEnd dstPt92624219(Point(51635, 52300), 4);\r\n    connRef92624219->setDestEndpoint(dstPt92624219);\r\n    connRef92624219->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef126568050 = new ConnRef(router, 126568050);\r\n    ConnEnd srcPt126568050(Point(51540, 51975), 8);\r\n    connRef126568050->setSourceEndpoint(srcPt126568050);\r\n    ConnEnd dstPt126568050(Point(51915, 51950), 8);\r\n    connRef126568050->setDestEndpoint(dstPt126568050);\r\n    connRef126568050->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef128113340 = new ConnRef(router, 128113340);\r\n    ConnEnd srcPt128113340(Point(51300, 52215), 2);\r\n    connRef128113340->setSourceEndpoint(srcPt128113340);\r\n    ConnEnd dstPt128113340(Point(51390, 52500), 8);\r\n    connRef128113340->setDestEndpoint(dstPt128113340);\r\n    connRef128113340->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef157642749 = new ConnRef(router, 157642749);\r\n    ConnEnd srcPt157642749(Point(51225, 52215), 2);\r\n    connRef157642749->setSourceEndpoint(srcPt157642749);\r\n    // Problem point:\r\n    ConnEnd dstPt157642749(Point(51160, 52500), 4);\r\n    connRef157642749->setDestEndpoint(dstPt157642749);\r\n    connRef157642749->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef182970626 = new ConnRef(router, 182970626);\r\n    ConnEnd srcPt182970626(Point(51000, 52215), 2);\r\n    connRef182970626->setSourceEndpoint(srcPt182970626);\r\n    ConnEnd dstPt182970626(Point(51000, 52510), 1);\r\n    connRef182970626->setDestEndpoint(dstPt182970626);\r\n    connRef182970626->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef191618599 = new ConnRef(router, 191618599);\r\n    ConnEnd srcPt191618599(Point(50535, 51900), 4);\r\n    connRef191618599->setSourceEndpoint(srcPt191618599);\r\n    ConnEnd dstPt191618599(Point(50265, 51950), 8);\r\n    connRef191618599->setDestEndpoint(dstPt191618599);\r\n    connRef191618599->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef215646300 = new ConnRef(router, 215646300);\r\n    ConnEnd srcPt215646300(Point(50415, 51400), 8);\r\n    connRef215646300->setSourceEndpoint(srcPt215646300);\r\n    ConnEnd dstPt215646300(Point(50775, 51510), 1);\r\n    connRef215646300->setDestEndpoint(dstPt215646300);\r\n    connRef215646300->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef217181718 = new ConnRef(router, 217181718);\r\n    ConnEnd srcPt217181718(Point(51000, 51290), 2);\r\n    connRef217181718->setSourceEndpoint(srcPt217181718);\r\n    ConnEnd dstPt217181718(Point(51000, 51510), 1);\r\n    connRef217181718->setDestEndpoint(dstPt217181718);\r\n    connRef217181718->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef217236398 = new ConnRef(router, 217236398);\r\n    ConnEnd srcPt217236398(Point(50700, 52215), 2);\r\n    connRef217236398->setSourceEndpoint(srcPt217236398);\r\n    ConnEnd dstPt217236398(Point(50135, 52300), 4);\r\n    connRef217236398->setDestEndpoint(dstPt217236398);\r\n    connRef217236398->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef227676560 = new ConnRef(router, 227676560);\r\n    ConnEnd srcPt227676560(Point(50850, 51510), 1);\r\n    connRef227676560->setSourceEndpoint(srcPt227676560);\r\n    ConnEnd dstPt227676560(Point(50235, 51400), 4);\r\n    connRef227676560->setDestEndpoint(dstPt227676560);\r\n    connRef227676560->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef235740708 = new ConnRef(router, 235740708);\r\n    ConnEnd srcPt235740708(Point(51540, 51675), 8);\r\n    connRef235740708->setSourceEndpoint(srcPt235740708);\r\n    ConnEnd dstPt235740708(Point(51870, 51725), 8);\r\n    connRef235740708->setDestEndpoint(dstPt235740708);\r\n    connRef235740708->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef307166980 = new ConnRef(router, 307166980);\r\n    ConnEnd srcPt307166980(Point(50925, 52215), 2);\r\n    connRef307166980->setSourceEndpoint(srcPt307166980);\r\n    ConnEnd dstPt307166980(Point(50950, 52510), 1);\r\n    connRef307166980->setDestEndpoint(dstPt307166980);\r\n    connRef307166980->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef314353850 = new ConnRef(router, 314353850);\r\n    ConnEnd srcPt314353850(Point(51050, 51290), 2);\r\n    connRef314353850->setSourceEndpoint(srcPt314353850);\r\n    ConnEnd dstPt314353850(Point(51075, 51510), 1);\r\n    connRef314353850->setDestEndpoint(dstPt314353850);\r\n    connRef314353850->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef356343444 = new ConnRef(router, 356343444);\r\n    ConnEnd srcPt356343444(Point(50625, 51510), 1);\r\n    connRef356343444->setSourceEndpoint(srcPt356343444);\r\n    ConnEnd dstPt356343444(Point(50415, 51550), 8);\r\n    connRef356343444->setDestEndpoint(dstPt356343444);\r\n    connRef356343444->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef401560509 = new ConnRef(router, 401560509);\r\n    ConnEnd srcPt401560509(Point(50625, 52215), 2);\r\n    connRef401560509->setSourceEndpoint(srcPt401560509);\r\n    ConnEnd dstPt401560509(Point(50315, 52300), 8);\r\n    connRef401560509->setDestEndpoint(dstPt401560509);\r\n    connRef401560509->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef413072940 = new ConnRef(router, 413072940);\r\n    ConnEnd srcPt413072940(Point(51840, 51375), 8);\r\n    connRef413072940->setSourceEndpoint(srcPt413072940);\r\n    ConnEnd dstPt413072940(Point(51225, 51510), 1);\r\n    connRef413072940->setDestEndpoint(dstPt413072940);\r\n    connRef413072940->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef413766381 = new ConnRef(router, 413766381);\r\n    ConnEnd srcPt413766381(Point(50535, 51750), 4);\r\n    connRef413766381->setSourceEndpoint(srcPt413766381);\r\n    ConnEnd dstPt413766381(Point(50265, 51800), 8);\r\n    connRef413766381->setDestEndpoint(dstPt413766381);\r\n    connRef413766381->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef422359365 = new ConnRef(router, 422359365);\r\n    ConnEnd srcPt422359365(Point(50535, 51825), 4);\r\n    connRef422359365->setSourceEndpoint(srcPt422359365);\r\n    ConnEnd dstPt422359365(Point(50085, 51800), 4);\r\n    connRef422359365->setDestEndpoint(dstPt422359365);\r\n    connRef422359365->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef427415850 = new ConnRef(router, 427415850);\r\n    ConnEnd srcPt427415850(Point(50775, 52215), 2);\r\n    connRef427415850->setSourceEndpoint(srcPt427415850);\r\n    ConnEnd dstPt427415850(Point(50265, 52450), 8);\r\n    connRef427415850->setDestEndpoint(dstPt427415850);\r\n    connRef427415850->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef444649182 = new ConnRef(router, 444649182);\r\n    ConnEnd srcPt444649182(Point(51540, 51750), 8);\r\n    connRef444649182->setSourceEndpoint(srcPt444649182);\r\n    ConnEnd dstPt444649182(Point(51760, 51800), 4);\r\n    connRef444649182->setDestEndpoint(dstPt444649182);\r\n    connRef444649182->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef505297694 = new ConnRef(router, 505297694);\r\n    ConnEnd srcPt505297694(Point(50700, 51510), 1);\r\n    connRef505297694->setSourceEndpoint(srcPt505297694);\r\n    ConnEnd dstPt505297694(Point(50235, 51550), 4);\r\n    connRef505297694->setDestEndpoint(dstPt505297694);\r\n    connRef505297694->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef528809632 = new ConnRef(router, 528809632);\r\n    ConnEnd srcPt528809632(Point(51540, 51900), 8);\r\n    connRef528809632->setSourceEndpoint(srcPt528809632);\r\n    ConnEnd dstPt528809632(Point(51735, 51950), 4);\r\n    connRef528809632->setDestEndpoint(dstPt528809632);\r\n    connRef528809632->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef548127810 = new ConnRef(router, 548127810);\r\n    ConnEnd srcPt548127810(Point(50535, 51975), 4);\r\n    connRef548127810->setSourceEndpoint(srcPt548127810);\r\n    ConnEnd dstPt548127810(Point(50085, 51950), 4);\r\n    connRef548127810->setDestEndpoint(dstPt548127810);\r\n    connRef548127810->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef648819584 = new ConnRef(router, 648819584);\r\n    ConnEnd srcPt648819584(Point(51540, 51825), 8);\r\n    connRef648819584->setSourceEndpoint(srcPt648819584);\r\n    ConnEnd dstPt648819584(Point(51940, 51800), 8);\r\n    connRef648819584->setDestEndpoint(dstPt648819584);\r\n    connRef648819584->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef651183694 = new ConnRef(router, 651183694);\r\n    ConnEnd srcPt651183694(Point(51635, 51550), 4);\r\n    connRef651183694->setSourceEndpoint(srcPt651183694);\r\n    ConnEnd dstPt651183694(Point(51450, 51510), 1);\r\n    connRef651183694->setDestEndpoint(dstPt651183694);\r\n    connRef651183694->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef655025700 = new ConnRef(router, 655025700);\r\n    ConnEnd srcPt655025700(Point(51150, 52215), 2);\r\n    connRef655025700->setSourceEndpoint(srcPt655025700);\r\n    ConnEnd dstPt655025700(Point(51100, 52510), 1);\r\n    connRef655025700->setDestEndpoint(dstPt655025700);\r\n    connRef655025700->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef662151765 = new ConnRef(router, 662151765);\r\n    ConnEnd srcPt662151765(Point(50535, 51600), 4);\r\n    connRef662151765->setSourceEndpoint(srcPt662151765);\r\n    ConnEnd dstPt662151765(shapeRef258454350, 2147483646);\r\n    connRef662151765->setDestEndpoint(dstPt662151765);\r\n    connRef662151765->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef678159455 = new ConnRef(router, 678159455);\r\n    ConnEnd srcPt678159455(Point(51815, 51550), 8);\r\n    connRef678159455->setSourceEndpoint(srcPt678159455);\r\n    ConnEnd dstPt678159455(Point(51375, 51510), 1);\r\n    connRef678159455->setDestEndpoint(dstPt678159455);\r\n    connRef678159455->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef803304040 = new ConnRef(router, 803304040);\r\n    ConnEnd srcPt803304040(Point(50850, 52215), 2);\r\n    connRef803304040->setSourceEndpoint(srcPt803304040);\r\n    ConnEnd dstPt803304040(Point(50085, 52450), 4);\r\n    connRef803304040->setDestEndpoint(dstPt803304040);\r\n    connRef803304040->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef960638799 = new ConnRef(router, 960638799);\r\n    ConnEnd srcPt960638799(Point(50535, 52125), 4);\r\n    connRef960638799->setSourceEndpoint(srcPt960638799);\r\n    ConnEnd dstPt960638799(Point(50035, 52100), 4);\r\n    connRef960638799->setDestEndpoint(dstPt960638799);\r\n    connRef960638799->setRoutingType((ConnType)2);\r\n\r\n    router->processTransaction();\r\n    router->outputDiagram(\"output/validPaths01\");\r\n    int result = router->existsInvalidOrthogonalPaths();\r\n    delete router;\r\n    return result;\r\n};\r\n"
  },
  {
    "path": "cola/libavoid/tests/validPaths02.cpp",
    "content": "#include \"libavoid/libavoid.h\"\r\nusing namespace Avoid;\r\nint main(void) {\r\n    Router *router = new Router(\r\n            PolyLineRouting | OrthogonalRouting);\r\n    router->setRoutingPenalty((PenaltyType)0, 50);\r\n    router->setRoutingPenalty((PenaltyType)1, 0);\r\n    router->setRoutingPenalty((PenaltyType)2, 200);\r\n    router->setRoutingPenalty((PenaltyType)3, 4000);\r\n    router->setRoutingPenalty((PenaltyType)4, 110);\r\n    router->setRoutingPenalty((PenaltyType)5, 100);\r\n    router->setRoutingOption((RoutingOption)0, false);\r\n    router->setRoutingOption((RoutingOption)1, true);\r\n    router->setRoutingParameter(idealNudgingDistance, 25);\r\n\r\n    Polygon poly186982048(4);\r\n    poly186982048.ps[0] = Point(52660, 50490);\r\n    poly186982048.ps[1] = Point(52660, 50960);\r\n    poly186982048.ps[2] = Point(52090, 50960);\r\n    poly186982048.ps[3] = Point(52090, 50490);\r\n    ShapeRef *shapeRef186982048 = new ShapeRef(router, poly186982048, 186982048);\r\n    new ShapeConnectionPin(shapeRef186982048, 5, 0.982456, 0.12766, true, 0, (ConnDirFlags) 8);\r\n    new ShapeConnectionPin(shapeRef186982048, 13, 0.982456, 0.234043, true, 0, (ConnDirFlags) 8);\r\n\r\n    Polygon poly197692264(4);\r\n    poly197692264.ps[0] = Point(52560, 50342);\r\n    poly197692264.ps[1] = Point(52560, 50425);\r\n    poly197692264.ps[2] = Point(52440, 50425);\r\n    poly197692264.ps[3] = Point(52440, 50342);\r\n    ShapeRef *shapeRef197692264 = new ShapeRef(router, poly197692264, 197692264);\r\n    new ShapeConnectionPin(shapeRef197692264, 1, 0.5, 0.39759, true, 0, (ConnDirFlags) 13);\r\n    new ShapeConnectionPin(shapeRef197692264, 2, 0.5, 1, true, 10, (ConnDirFlags) 2);\r\n\r\n    ConnRef *connRef111820287 = new ConnRef(router, 111820287);\r\n    ConnEnd srcPt111820287(shapeRef186982048, 13);\r\n    connRef111820287->setSourceEndpoint(srcPt111820287);\r\n    ConnEnd dstPt111820287(shapeRef197692264, 2);\r\n    connRef111820287->setDestEndpoint(dstPt111820287);\r\n    connRef111820287->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef744282799 = new ConnRef(router, 744282799);\r\n    ConnEnd srcPt744282799(shapeRef186982048, 5);\r\n    connRef744282799->setSourceEndpoint(srcPt744282799);\r\n    ConnEnd dstPt744282799(shapeRef197692264, 1);\r\n    connRef744282799->setDestEndpoint(dstPt744282799);\r\n    connRef744282799->setRoutingType((ConnType)2);\r\n\r\n    router->processTransaction();\r\n    router->outputDiagram(\"output/validPaths02\");\r\n    int result = router->existsInvalidOrthogonalPaths();\r\n    delete router;\r\n    return result;\r\n};\r\n"
  },
  {
    "path": "cola/libavoid/tests/vertlineassertion.cpp",
    "content": "#include \"libavoid/libavoid.h\"\r\nusing namespace Avoid;\r\nint main(void) {\r\n    Router *router = new Router(\r\n            PolyLineRouting | OrthogonalRouting);\r\n    router->setRoutingPenalty((PenaltyType)0, 50);\r\n    router->setRoutingPenalty((PenaltyType)1, 0);\r\n    router->setRoutingPenalty((PenaltyType)2, 0);\r\n    router->setRoutingPenalty((PenaltyType)3, 4000);\r\n    router->setRoutingPenalty((PenaltyType)4, 0);\r\n\r\n    Polygon poly2(4);\r\n    poly2.ps[0] = Point(129, 898);\r\n    poly2.ps[1] = Point(129, 918);\r\n    poly2.ps[2] = Point(109, 918);\r\n    poly2.ps[3] = Point(109, 898);\r\n    new ShapeRef(router, poly2, 2);\r\n    \r\n    Polygon poly3(4);\r\n    poly3.ps[0] = Point(272, 951);\r\n    poly3.ps[1] = Point(272, 971);\r\n    poly3.ps[2] = Point(252, 971);\r\n    poly3.ps[3] = Point(252, 951);\r\n    new ShapeRef(router, poly3, 3);\r\n    \r\n    Polygon poly4(4);\r\n    poly4.ps[0] = Point(139, 931);\r\n    poly4.ps[1] = Point(139, 971);\r\n    poly4.ps[2] = Point(99, 971);\r\n    poly4.ps[3] = Point(99, 931);\r\n    new ShapeRef(router, poly4, 4);\r\n    \r\n    Polygon poly5(4);\r\n    poly5.ps[0] = Point(665, 212.5);\r\n    poly5.ps[1] = Point(665, 459.5);\r\n    poly5.ps[2] = Point(593, 459.5);\r\n    poly5.ps[3] = Point(593, 212.5);\r\n    new ShapeRef(router, poly5, 5);\r\n    \r\n    Polygon poly6(4);\r\n    poly6.ps[0] = Point(518, 52);\r\n    poly6.ps[1] = Point(518, 96);\r\n    poly6.ps[2] = Point(398, 96);\r\n    poly6.ps[3] = Point(398, 52);\r\n    new ShapeRef(router, poly6, 6);\r\n    \r\n    Polygon poly7(4);\r\n    poly7.ps[0] = Point(361, 899);\r\n    poly7.ps[1] = Point(361, 919);\r\n    poly7.ps[2] = Point(341, 919);\r\n    poly7.ps[3] = Point(341, 899);\r\n    new ShapeRef(router, poly7, 7);\r\n    \r\n    Polygon poly8(4);\r\n    poly8.ps[0] = Point(470, 930);\r\n    poly8.ps[1] = Point(470, 950);\r\n    poly8.ps[2] = Point(450, 950);\r\n    poly8.ps[3] = Point(450, 930);\r\n    new ShapeRef(router, poly8, 8);\r\n    \r\n    Polygon poly9(4);\r\n    poly9.ps[0] = Point(422, 930);\r\n    poly9.ps[1] = Point(422, 950);\r\n    poly9.ps[2] = Point(402, 950);\r\n    poly9.ps[3] = Point(402, 930);\r\n    new ShapeRef(router, poly9, 9);\r\n    \r\n    Polygon poly10(4);\r\n    poly10.ps[0] = Point(414, 861);\r\n    poly10.ps[1] = Point(414, 881);\r\n    poly10.ps[2] = Point(394, 881);\r\n    poly10.ps[3] = Point(394, 861);\r\n    new ShapeRef(router, poly10, 10);\r\n    \r\n    Polygon poly11(4);\r\n    poly11.ps[0] = Point(414, 840);\r\n    poly11.ps[1] = Point(414, 860);\r\n    poly11.ps[2] = Point(394, 860);\r\n    poly11.ps[3] = Point(394, 840);\r\n    new ShapeRef(router, poly11, 11);\r\n    \r\n    Polygon poly12(4);\r\n    poly12.ps[0] = Point(302, 852);\r\n    poly12.ps[1] = Point(302, 872);\r\n    poly12.ps[2] = Point(282, 872);\r\n    poly12.ps[3] = Point(282, 852);\r\n    new ShapeRef(router, poly12, 12);\r\n    \r\n    Polygon poly13(4);\r\n    poly13.ps[0] = Point(193, 852);\r\n    poly13.ps[1] = Point(193, 872);\r\n    poly13.ps[2] = Point(173, 872);\r\n    poly13.ps[3] = Point(173, 852);\r\n    new ShapeRef(router, poly13, 13);\r\n    \r\n    Polygon poly14(4);\r\n    poly14.ps[0] = Point(541, 851);\r\n    poly14.ps[1] = Point(541, 871);\r\n    poly14.ps[2] = Point(521, 871);\r\n    poly14.ps[3] = Point(521, 851);\r\n    new ShapeRef(router, poly14, 14);\r\n    \r\n    Polygon poly15(4);\r\n    poly15.ps[0] = Point(401, 739);\r\n    poly15.ps[1] = Point(401, 783);\r\n    poly15.ps[2] = Point(313, 783);\r\n    poly15.ps[3] = Point(313, 739);\r\n    new ShapeRef(router, poly15, 15);\r\n    \r\n    Polygon poly16(4);\r\n    poly16.ps[0] = Point(466, 757);\r\n    poly16.ps[1] = Point(466, 777);\r\n    poly16.ps[2] = Point(446, 777);\r\n    poly16.ps[3] = Point(446, 757);\r\n    new ShapeRef(router, poly16, 16);\r\n    \r\n    Polygon poly17(4);\r\n    poly17.ps[0] = Point(466, 688);\r\n    poly17.ps[1] = Point(466, 708);\r\n    poly17.ps[2] = Point(446, 708);\r\n    poly17.ps[3] = Point(446, 688);\r\n    new ShapeRef(router, poly17, 17);\r\n    \r\n    Polygon poly18(4);\r\n    poly18.ps[0] = Point(467, 616);\r\n    poly18.ps[1] = Point(467, 636);\r\n    poly18.ps[2] = Point(447, 636);\r\n    poly18.ps[3] = Point(447, 616);\r\n    new ShapeRef(router, poly18, 18);\r\n    \r\n    Polygon poly19(4);\r\n    poly19.ps[0] = Point(441, 471);\r\n    poly19.ps[1] = Point(441, 491);\r\n    poly19.ps[2] = Point(421, 491);\r\n    poly19.ps[3] = Point(421, 471);\r\n    new ShapeRef(router, poly19, 19);\r\n    \r\n    Polygon poly20(4);\r\n    poly20.ps[0] = Point(359.5, 575);\r\n    poly20.ps[1] = Point(359.5, 619);\r\n    poly20.ps[2] = Point(196.5, 619);\r\n    poly20.ps[3] = Point(196.5, 575);\r\n    new ShapeRef(router, poly20, 20);\r\n    \r\n    Polygon poly21(4);\r\n    poly21.ps[0] = Point(386, 437);\r\n    poly21.ps[1] = Point(386, 457);\r\n    poly21.ps[2] = Point(366, 457);\r\n    poly21.ps[3] = Point(366, 437);\r\n    new ShapeRef(router, poly21, 21);\r\n    \r\n    Polygon poly22(4);\r\n    poly22.ps[0] = Point(466, 391);\r\n    poly22.ps[1] = Point(466, 411);\r\n    poly22.ps[2] = Point(446, 411);\r\n    poly22.ps[3] = Point(446, 391);\r\n    new ShapeRef(router, poly22, 22);\r\n    \r\n    Polygon poly23(4);\r\n    poly23.ps[0] = Point(466, 325);\r\n    poly23.ps[1] = Point(466, 345);\r\n    poly23.ps[2] = Point(446, 345);\r\n    poly23.ps[3] = Point(446, 325);\r\n    new ShapeRef(router, poly23, 23);\r\n    \r\n    Polygon poly24(4);\r\n    poly24.ps[0] = Point(413, 325);\r\n    poly24.ps[1] = Point(413, 345);\r\n    poly24.ps[2] = Point(393, 345);\r\n    poly24.ps[3] = Point(393, 325);\r\n    new ShapeRef(router, poly24, 24);\r\n    \r\n    Polygon poly25(4);\r\n    poly25.ps[0] = Point(535, 182);\r\n    poly25.ps[1] = Point(535, 202);\r\n    poly25.ps[2] = Point(515, 202);\r\n    poly25.ps[3] = Point(515, 182);\r\n    new ShapeRef(router, poly25, 25);\r\n    \r\n    Polygon poly26(4);\r\n    poly26.ps[0] = Point(466, 255);\r\n    poly26.ps[1] = Point(466, 275);\r\n    poly26.ps[2] = Point(446, 275);\r\n    poly26.ps[3] = Point(446, 255);\r\n    new ShapeRef(router, poly26, 26);\r\n    \r\n    Polygon poly27(4);\r\n    poly27.ps[0] = Point(466, 160);\r\n    poly27.ps[1] = Point(466, 180);\r\n    poly27.ps[2] = Point(446, 180);\r\n    poly27.ps[3] = Point(446, 160);\r\n    new ShapeRef(router, poly27, 27);\r\n    \r\n    Polygon poly28(4);\r\n    poly28.ps[0] = Point(386, 289);\r\n    poly28.ps[1] = Point(386, 309);\r\n    poly28.ps[2] = Point(366, 309);\r\n    poly28.ps[3] = Point(366, 289);\r\n    new ShapeRef(router, poly28, 28);\r\n    \r\n    Polygon poly29(4);\r\n    poly29.ps[0] = Point(231, 270);\r\n    poly29.ps[1] = Point(231, 290);\r\n    poly29.ps[2] = Point(211, 290);\r\n    poly29.ps[3] = Point(211, 270);\r\n    new ShapeRef(router, poly29, 29);\r\n    \r\n    Polygon poly30(4);\r\n    poly30.ps[0] = Point(231, 289);\r\n    poly30.ps[1] = Point(231, 309);\r\n    poly30.ps[2] = Point(211, 309);\r\n    poly30.ps[3] = Point(211, 289);\r\n    new ShapeRef(router, poly30, 30);\r\n    \r\n    Polygon poly31(4);\r\n    poly31.ps[0] = Point(340, 256);\r\n    poly31.ps[1] = Point(340, 276);\r\n    poly31.ps[2] = Point(320, 276);\r\n    poly31.ps[3] = Point(320, 256);\r\n    new ShapeRef(router, poly31, 31);\r\n    \r\n    Polygon poly32(4);\r\n    poly32.ps[0] = Point(290, 256);\r\n    poly32.ps[1] = Point(290, 276);\r\n    poly32.ps[2] = Point(270, 276);\r\n    poly32.ps[3] = Point(270, 256);\r\n    new ShapeRef(router, poly32, 32);\r\n    \r\n    Polygon poly33(4);\r\n    poly33.ps[0] = Point(164, 251);\r\n    poly33.ps[1] = Point(164, 271);\r\n    poly33.ps[2] = Point(144, 271);\r\n    poly33.ps[3] = Point(144, 251);\r\n    new ShapeRef(router, poly33, 33);\r\n    \r\n    Polygon poly34(4);\r\n    poly34.ps[0] = Point(231, 214);\r\n    poly34.ps[1] = Point(231, 234);\r\n    poly34.ps[2] = Point(211, 234);\r\n    poly34.ps[3] = Point(211, 214);\r\n    new ShapeRef(router, poly34, 34);\r\n    \r\n    Polygon poly35(4);\r\n    poly35.ps[0] = Point(231, 195);\r\n    poly35.ps[1] = Point(231, 215);\r\n    poly35.ps[2] = Point(211, 215);\r\n    poly35.ps[3] = Point(211, 195);\r\n    new ShapeRef(router, poly35, 35);\r\n    \r\n    Polygon poly36(4);\r\n    poly36.ps[0] = Point(299, 173);\r\n    poly36.ps[1] = Point(299, 193);\r\n    poly36.ps[2] = Point(279, 193);\r\n    poly36.ps[3] = Point(279, 173);\r\n    new ShapeRef(router, poly36, 36);\r\n    \r\n    Polygon poly37(4);\r\n    poly37.ps[0] = Point(326, 141);\r\n    poly37.ps[1] = Point(326, 161);\r\n    poly37.ps[2] = Point(306, 161);\r\n    poly37.ps[3] = Point(306, 141);\r\n    new ShapeRef(router, poly37, 37);\r\n    \r\n    Polygon poly38(4);\r\n    poly38.ps[0] = Point(326, 120);\r\n    poly38.ps[1] = Point(326, 140);\r\n    poly38.ps[2] = Point(306, 140);\r\n    poly38.ps[3] = Point(306, 120);\r\n    new ShapeRef(router, poly38, 38);\r\n    \r\n    Polygon poly39(4);\r\n    poly39.ps[0] = Point(295.5, 39.5);\r\n    poly39.ps[1] = Point(295.5, 74.5);\r\n    poly39.ps[2] = Point(34.5, 74.5);\r\n    poly39.ps[3] = Point(34.5, 39.5);\r\n    new ShapeRef(router, poly39, 39);\r\n    \r\n    Polygon poly40(4);\r\n    poly40.ps[0] = Point(245, 895);\r\n    poly40.ps[1] = Point(245, 915);\r\n    poly40.ps[2] = Point(225, 915);\r\n    poly40.ps[3] = Point(225, 895);\r\n    new ShapeRef(router, poly40, 40);\r\n    \r\n    Polygon poly41(4);\r\n    poly41.ps[0] = Point(466, 543);\r\n    poly41.ps[1] = Point(466, 563);\r\n    poly41.ps[2] = Point(446, 563);\r\n    poly41.ps[3] = Point(446, 543);\r\n    new ShapeRef(router, poly41, 41);\r\n    \r\n    Polygon poly42(4);\r\n    poly42.ps[0] = Point(231, 233);\r\n    poly42.ps[1] = Point(231, 253);\r\n    poly42.ps[2] = Point(211, 253);\r\n    poly42.ps[3] = Point(211, 233);\r\n    new ShapeRef(router, poly42, 42);\r\n    \r\n    Polygon poly43(4);\r\n    poly43.ps[0] = Point(231, 308);\r\n    poly43.ps[1] = Point(231, 328);\r\n    poly43.ps[2] = Point(211, 328);\r\n    poly43.ps[3] = Point(211, 308);\r\n    new ShapeRef(router, poly43, 43);\r\n    \r\n    Polygon poly44(4);\r\n    poly44.ps[0] = Point(164, 347);\r\n    poly44.ps[1] = Point(164, 367);\r\n    poly44.ps[2] = Point(144, 367);\r\n    poly44.ps[3] = Point(144, 347);\r\n    new ShapeRef(router, poly44, 44);\r\n    \r\n    Polygon poly45(4);\r\n    poly45.ps[0] = Point(164, 373);\r\n    poly45.ps[1] = Point(164, 393);\r\n    poly45.ps[2] = Point(144, 393);\r\n    poly45.ps[3] = Point(144, 373);\r\n    new ShapeRef(router, poly45, 45);\r\n    \r\n    Polygon poly46(4);\r\n    poly46.ps[0] = Point(274, 346);\r\n    poly46.ps[1] = Point(274, 366);\r\n    poly46.ps[2] = Point(254, 366);\r\n    poly46.ps[3] = Point(254, 346);\r\n    new ShapeRef(router, poly46, 46);\r\n    \r\n    Polygon poly47(4);\r\n    poly47.ps[0] = Point(274, 372);\r\n    poly47.ps[1] = Point(274, 392);\r\n    poly47.ps[2] = Point(254, 392);\r\n    poly47.ps[3] = Point(254, 372);\r\n    new ShapeRef(router, poly47, 47);\r\n    \r\n    Polygon poly48(4);\r\n    poly48.ps[0] = Point(594, 173);\r\n    poly48.ps[1] = Point(594, 213);\r\n    poly48.ps[2] = Point(554, 213);\r\n    poly48.ps[3] = Point(554, 173);\r\n    new ShapeRef(router, poly48, 48);\r\n    \r\n    Polygon poly49(4);\r\n    poly49.ps[0] = Point(476, 121);\r\n    poly49.ps[1] = Point(476, 161);\r\n    poly49.ps[2] = Point(436, 161);\r\n    poly49.ps[3] = Point(436, 121);\r\n    new ShapeRef(router, poly49, 49);\r\n    \r\n    Polygon poly50(4);\r\n    poly50.ps[0] = Point(476, 642);\r\n    poly50.ps[1] = Point(476, 682);\r\n    poly50.ps[2] = Point(436, 682);\r\n    poly50.ps[3] = Point(436, 642);\r\n    new ShapeRef(router, poly50, 50);\r\n    \r\n    Polygon poly51(4);\r\n    poly51.ps[0] = Point(174, 206);\r\n    poly51.ps[1] = Point(174, 246);\r\n    poly51.ps[2] = Point(134, 246);\r\n    poly51.ps[3] = Point(134, 206);\r\n    new ShapeRef(router, poly51, 51);\r\n    \r\n    Polygon poly52(4);\r\n    poly52.ps[0] = Point(174, 279);\r\n    poly52.ps[1] = Point(174, 319);\r\n    poly52.ps[2] = Point(134, 319);\r\n    poly52.ps[3] = Point(134, 279);\r\n    new ShapeRef(router, poly52, 52);\r\n    \r\n    Polygon poly53(4);\r\n    poly53.ps[0] = Point(325, 426);\r\n    poly53.ps[1] = Point(325, 466);\r\n    poly53.ps[2] = Point(285, 466);\r\n    poly53.ps[3] = Point(285, 426);\r\n    new ShapeRef(router, poly53, 53);\r\n    \r\n    Polygon poly54(4);\r\n    poly54.ps[0] = Point(325, 279);\r\n    poly54.ps[1] = Point(325, 319);\r\n    poly54.ps[2] = Point(285, 319);\r\n    poly54.ps[3] = Point(285, 279);\r\n    new ShapeRef(router, poly54, 54);\r\n    \r\n    Polygon poly55(4);\r\n    poly55.ps[0] = Point(476, 208);\r\n    poly55.ps[1] = Point(476, 248);\r\n    poly55.ps[2] = Point(436, 248);\r\n    poly55.ps[3] = Point(436, 208);\r\n    new ShapeRef(router, poly55, 55);\r\n    \r\n    Polygon poly56(4);\r\n    poly56.ps[0] = Point(476, 281);\r\n    poly56.ps[1] = Point(476, 321);\r\n    poly56.ps[2] = Point(436, 321);\r\n    poly56.ps[3] = Point(436, 281);\r\n    new ShapeRef(router, poly56, 56);\r\n    \r\n    Polygon poly57(4);\r\n    poly57.ps[0] = Point(476, 714);\r\n    poly57.ps[1] = Point(476, 754);\r\n    poly57.ps[2] = Point(436, 754);\r\n    poly57.ps[3] = Point(436, 714);\r\n    new ShapeRef(router, poly57, 57);\r\n    \r\n    Polygon poly58(4);\r\n    poly58.ps[0] = Point(476, 570);\r\n    poly58.ps[1] = Point(476, 610);\r\n    poly58.ps[2] = Point(436, 610);\r\n    poly58.ps[3] = Point(436, 570);\r\n    new ShapeRef(router, poly58, 58);\r\n    \r\n    Polygon poly59(4);\r\n    poly59.ps[0] = Point(476, 498);\r\n    poly59.ps[1] = Point(476, 538);\r\n    poly59.ps[2] = Point(436, 538);\r\n    poly59.ps[3] = Point(436, 498);\r\n    new ShapeRef(router, poly59, 59);\r\n    \r\n    Polygon poly60(4);\r\n    poly60.ps[0] = Point(620, 841);\r\n    poly60.ps[1] = Point(620, 881);\r\n    poly60.ps[2] = Point(580, 881);\r\n    poly60.ps[3] = Point(580, 841);\r\n    new ShapeRef(router, poly60, 60);\r\n    \r\n    Polygon poly61(4);\r\n    poly61.ps[0] = Point(307, 884);\r\n    poly61.ps[1] = Point(307, 924);\r\n    poly61.ps[2] = Point(267, 924);\r\n    poly61.ps[3] = Point(267, 884);\r\n    new ShapeRef(router, poly61, 61);\r\n    \r\n    Polygon poly62(4);\r\n    poly62.ps[0] = Point(543, 931);\r\n    poly62.ps[1] = Point(543, 971);\r\n    poly62.ps[2] = Point(503, 971);\r\n    poly62.ps[3] = Point(503, 931);\r\n    new ShapeRef(router, poly62, 62);\r\n    \r\n    Polygon poly63(4);\r\n    poly63.ps[0] = Point(476, 841);\r\n    poly63.ps[1] = Point(476, 881);\r\n    poly63.ps[2] = Point(436, 881);\r\n    poly63.ps[3] = Point(436, 841);\r\n    new ShapeRef(router, poly63, 63);\r\n    \r\n    Polygon poly64(4);\r\n    poly64.ps[0] = Point(371, 841);\r\n    poly64.ps[1] = Point(371, 881);\r\n    poly64.ps[2] = Point(331, 881);\r\n    poly64.ps[3] = Point(331, 841);\r\n    new ShapeRef(router, poly64, 64);\r\n    \r\n    Polygon poly65(4);\r\n    poly65.ps[0] = Point(371, 798);\r\n    poly65.ps[1] = Point(371, 838);\r\n    poly65.ps[2] = Point(331, 838);\r\n    poly65.ps[3] = Point(331, 798);\r\n    new ShapeRef(router, poly65, 65);\r\n    \r\n    Polygon poly66(4);\r\n    poly66.ps[0] = Point(139, 841);\r\n    poly66.ps[1] = Point(139, 881);\r\n    poly66.ps[2] = Point(99, 881);\r\n    poly66.ps[3] = Point(99, 841);\r\n    new ShapeRef(router, poly66, 66);\r\n    \r\n    Polygon poly67(4);\r\n    poly67.ps[0] = Point(371, 931);\r\n    poly67.ps[1] = Point(371, 971);\r\n    poly67.ps[2] = Point(331, 971);\r\n    poly67.ps[3] = Point(331, 931);\r\n    new ShapeRef(router, poly67, 67);\r\n    \r\n    Polygon poly68(4);\r\n    poly68.ps[0] = Point(258, 841);\r\n    poly68.ps[1] = Point(258, 881);\r\n    poly68.ps[2] = Point(218, 881);\r\n    poly68.ps[3] = Point(218, 841);\r\n    new ShapeRef(router, poly68, 68);\r\n    \r\n    Polygon poly69(4);\r\n    poly69.ps[0] = Point(205, 884);\r\n    poly69.ps[1] = Point(205, 924);\r\n    poly69.ps[2] = Point(165, 924);\r\n    poly69.ps[3] = Point(165, 884);\r\n    new ShapeRef(router, poly69, 69);\r\n    \r\n    Polygon poly70(4);\r\n    poly70.ps[0] = Point(476, 351);\r\n    poly70.ps[1] = Point(476, 391);\r\n    poly70.ps[2] = Point(436, 391);\r\n    poly70.ps[3] = Point(436, 351);\r\n    new ShapeRef(router, poly70, 70);\r\n    \r\n    Polygon poly71(4);\r\n    poly71.ps[0] = Point(125, 336);\r\n    poly71.ps[1] = Point(125, 376);\r\n    poly71.ps[2] = Point(85, 376);\r\n    poly71.ps[3] = Point(85, 336);\r\n    new ShapeRef(router, poly71, 71);\r\n    \r\n    Polygon poly72(4);\r\n    poly72.ps[0] = Point(232, 336);\r\n    poly72.ps[1] = Point(232, 376);\r\n    poly72.ps[2] = Point(192, 376);\r\n    poly72.ps[3] = Point(192, 336);\r\n    new ShapeRef(router, poly72, 72);\r\n    \r\n    Polygon poly73(4);\r\n    poly73.ps[0] = Point(232, 362);\r\n    poly73.ps[1] = Point(232, 402);\r\n    poly73.ps[2] = Point(192, 402);\r\n    poly73.ps[3] = Point(192, 362);\r\n    new ShapeRef(router, poly73, 73);\r\n    \r\n    Polygon poly74(4);\r\n    poly74.ps[0] = Point(125, 362);\r\n    poly74.ps[1] = Point(125, 402);\r\n    poly74.ps[2] = Point(85, 402);\r\n    poly74.ps[3] = Point(85, 362);\r\n    new ShapeRef(router, poly74, 74);\r\n    \r\n    Polygon poly75(4);\r\n    poly75.ps[0] = Point(77.5, 716);\r\n    poly75.ps[1] = Point(77.5, 880);\r\n    poly75.ps[2] = Point(20.5, 880);\r\n    poly75.ps[3] = Point(20.5, 716);\r\n    new ShapeRef(router, poly75, 75);\r\n    \r\n    Polygon poly76(4);\r\n    poly76.ps[0] = Point(187, 713);\r\n    poly76.ps[1] = Point(187, 733);\r\n    poly76.ps[2] = Point(167, 733);\r\n    poly76.ps[3] = Point(167, 713);\r\n    new ShapeRef(router, poly76, 76);\r\n    \r\n    Polygon poly77(4);\r\n    poly77.ps[0] = Point(139, 714);\r\n    poly77.ps[1] = Point(139, 754);\r\n    poly77.ps[2] = Point(99, 754);\r\n    poly77.ps[3] = Point(99, 714);\r\n    new ShapeRef(router, poly77, 77);\r\n    \r\n    Polygon poly78(4);\r\n    poly78.ps[0] = Point(422, 951);\r\n    poly78.ps[1] = Point(422, 971);\r\n    poly78.ps[2] = Point(402, 971);\r\n    poly78.ps[3] = Point(402, 951);\r\n    new ShapeRef(router, poly78, 78);\r\n    \r\n    Polygon poly79(4);\r\n    poly79.ps[0] = Point(187, 734);\r\n    poly79.ps[1] = Point(187, 754);\r\n    poly79.ps[2] = Point(167, 754);\r\n    poly79.ps[3] = Point(167, 734);\r\n    new ShapeRef(router, poly79, 79);\r\n    \r\n    Polygon poly80(4);\r\n    poly80.ps[0] = Point(470, 951);\r\n    poly80.ps[1] = Point(470, 971);\r\n    poly80.ps[2] = Point(450, 971);\r\n    poly80.ps[3] = Point(450, 951);\r\n    new ShapeRef(router, poly80, 80);\r\n    \r\n    Polygon poly81(4);\r\n    poly81.ps[0] = Point(669.5, 899.5);\r\n    poly81.ps[1] = Point(669.5, 934.5);\r\n    poly81.ps[2] = Point(532.5, 934.5);\r\n    poly81.ps[3] = Point(532.5, 899.5);\r\n    new ShapeRef(router, poly81, 81);\r\n    \r\n    Polygon poly82(4);\r\n    poly82.ps[0] = Point(491, 471);\r\n    poly82.ps[1] = Point(491, 491);\r\n    poly82.ps[2] = Point(471, 491);\r\n    poly82.ps[3] = Point(471, 471);\r\n    new ShapeRef(router, poly82, 82);\r\n    \r\n    Polygon poly83(4);\r\n    poly83.ps[0] = Point(565, 512);\r\n    poly83.ps[1] = Point(565, 532);\r\n    poly83.ps[2] = Point(545, 532);\r\n    poly83.ps[3] = Point(545, 512);\r\n    new ShapeRef(router, poly83, 83);\r\n    \r\n    Polygon poly84(4);\r\n    poly84.ps[0] = Point(538, 531);\r\n    poly84.ps[1] = Point(538, 551);\r\n    poly84.ps[2] = Point(518, 551);\r\n    poly84.ps[3] = Point(518, 531);\r\n    new ShapeRef(router, poly84, 84);\r\n    \r\n    Polygon poly85(4);\r\n    poly85.ps[0] = Point(272, 782);\r\n    poly85.ps[1] = Point(272, 802);\r\n    poly85.ps[2] = Point(252, 802);\r\n    poly85.ps[3] = Point(252, 782);\r\n    new ShapeRef(router, poly85, 85);\r\n    \r\n    Polygon poly86(4);\r\n    poly86.ps[0] = Point(515, 512);\r\n    poly86.ps[1] = Point(515, 532);\r\n    poly86.ps[2] = Point(495, 532);\r\n    poly86.ps[3] = Point(495, 512);\r\n    new ShapeRef(router, poly86, 86);\r\n    \r\n    Polygon poly87(4);\r\n    poly87.ps[0] = Point(391, 534);\r\n    poly87.ps[1] = Point(391, 574);\r\n    poly87.ps[2] = Point(351, 574);\r\n    poly87.ps[3] = Point(351, 534);\r\n    new ShapeRef(router, poly87, 87);\r\n    \r\n    Polygon poly88(4);\r\n    poly88.ps[0] = Point(420, 573);\r\n    poly88.ps[1] = Point(420, 593);\r\n    poly88.ps[2] = Point(400, 593);\r\n    poly88.ps[3] = Point(400, 573);\r\n    new ShapeRef(router, poly88, 88);\r\n    \r\n    Polygon poly89(4);\r\n    poly89.ps[0] = Point(421, 509);\r\n    poly89.ps[1] = Point(421, 529);\r\n    poly89.ps[2] = Point(401, 529);\r\n    poly89.ps[3] = Point(401, 509);\r\n    new ShapeRef(router, poly89, 89);\r\n    \r\n    Polygon poly90(4);\r\n    poly90.ps[0] = Point(476, 426);\r\n    poly90.ps[1] = Point(476, 466);\r\n    poly90.ps[2] = Point(436, 466);\r\n    poly90.ps[3] = Point(436, 426);\r\n    new ShapeRef(router, poly90, 90);\r\n    \r\n    Polygon poly91(4);\r\n    poly91.ps[0] = Point(290, 970);\r\n    poly91.ps[1] = Point(290, 1010);\r\n    poly91.ps[2] = Point(234, 1010);\r\n    poly91.ps[3] = Point(234, 970);\r\n    new ShapeRef(router, poly91, 91);\r\n    \r\n    Polygon poly92(4);\r\n    poly92.ps[0] = Point(85, 888);\r\n    poly92.ps[1] = Point(85, 928);\r\n    poly92.ps[2] = Point(29, 928);\r\n    poly92.ps[3] = Point(29, 888);\r\n    new ShapeRef(router, poly92, 92);\r\n    \r\n    Polygon poly93(4);\r\n    poly93.ps[0] = Point(290, 991);\r\n    poly93.ps[1] = Point(290, 1031);\r\n    poly93.ps[2] = Point(234, 1031);\r\n    poly93.ps[3] = Point(234, 991);\r\n    new ShapeRef(router, poly93, 93);\r\n    \r\n    Polygon poly94(4);\r\n    poly94.ps[0] = Point(317, 889);\r\n    poly94.ps[1] = Point(317, 929);\r\n    poly94.ps[2] = Point(261, 929);\r\n    poly94.ps[3] = Point(261, 889);\r\n    new ShapeRef(router, poly94, 94);\r\n    \r\n    Polygon poly95(4);\r\n    poly95.ps[0] = Point(488, 870);\r\n    poly95.ps[1] = Point(488, 910);\r\n    poly95.ps[2] = Point(432, 910);\r\n    poly95.ps[3] = Point(432, 870);\r\n    new ShapeRef(router, poly95, 95);\r\n    \r\n    Polygon poly96(4);\r\n    poly96.ps[0] = Point(440, 970);\r\n    poly96.ps[1] = Point(440, 1010);\r\n    poly96.ps[2] = Point(384, 1010);\r\n    poly96.ps[3] = Point(384, 970);\r\n    new ShapeRef(router, poly96, 96);\r\n    \r\n    Polygon poly97(4);\r\n    poly97.ps[0] = Point(370, 851);\r\n    poly97.ps[1] = Point(370, 891);\r\n    poly97.ps[2] = Point(314, 891);\r\n    poly97.ps[3] = Point(314, 851);\r\n    new ShapeRef(router, poly97, 97);\r\n    \r\n    Polygon poly98(4);\r\n    poly98.ps[0] = Point(494, 830);\r\n    poly98.ps[1] = Point(494, 870);\r\n    poly98.ps[2] = Point(438, 870);\r\n    poly98.ps[3] = Point(438, 830);\r\n    new ShapeRef(router, poly98, 98);\r\n    \r\n    Polygon poly99(4);\r\n    poly99.ps[0] = Point(258, 842);\r\n    poly99.ps[1] = Point(258, 882);\r\n    poly99.ps[2] = Point(202, 882);\r\n    poly99.ps[3] = Point(202, 842);\r\n    new ShapeRef(router, poly99, 99);\r\n    \r\n    Polygon poly100(4);\r\n    poly100.ps[0] = Point(211, 792);\r\n    poly100.ps[1] = Point(211, 832);\r\n    poly100.ps[2] = Point(155, 832);\r\n    poly100.ps[3] = Point(155, 792);\r\n    new ShapeRef(router, poly100, 100);\r\n    \r\n    Polygon poly101(4);\r\n    poly101.ps[0] = Point(559, 791);\r\n    poly101.ps[1] = Point(559, 831);\r\n    poly101.ps[2] = Point(503, 831);\r\n    poly101.ps[3] = Point(503, 791);\r\n    new ShapeRef(router, poly101, 101);\r\n    \r\n    Polygon poly102(4);\r\n    poly102.ps[0] = Point(546, 747);\r\n    poly102.ps[1] = Point(546, 787);\r\n    poly102.ps[2] = Point(490, 787);\r\n    poly102.ps[3] = Point(490, 747);\r\n    new ShapeRef(router, poly102, 102);\r\n    \r\n    Polygon poly103(4);\r\n    poly103.ps[0] = Point(422, 678);\r\n    poly103.ps[1] = Point(422, 718);\r\n    poly103.ps[2] = Point(366, 718);\r\n    poly103.ps[3] = Point(366, 678);\r\n    new ShapeRef(router, poly103, 103);\r\n    \r\n    Polygon poly104(4);\r\n    poly104.ps[0] = Point(423, 606);\r\n    poly104.ps[1] = Point(423, 646);\r\n    poly104.ps[2] = Point(367, 646);\r\n    poly104.ps[3] = Point(367, 606);\r\n    new ShapeRef(router, poly104, 104);\r\n    \r\n    Polygon poly105(4);\r\n    poly105.ps[0] = Point(397, 461);\r\n    poly105.ps[1] = Point(397, 501);\r\n    poly105.ps[2] = Point(341, 501);\r\n    poly105.ps[3] = Point(341, 461);\r\n    new ShapeRef(router, poly105, 105);\r\n    \r\n    Polygon poly106(4);\r\n    poly106.ps[0] = Point(404, 377);\r\n    poly106.ps[1] = Point(404, 417);\r\n    poly106.ps[2] = Point(348, 417);\r\n    poly106.ps[3] = Point(348, 377);\r\n    new ShapeRef(router, poly106, 106);\r\n    \r\n    Polygon poly107(4);\r\n    poly107.ps[0] = Point(546, 381);\r\n    poly107.ps[1] = Point(546, 421);\r\n    poly107.ps[2] = Point(490, 421);\r\n    poly107.ps[3] = Point(490, 381);\r\n    new ShapeRef(router, poly107, 107);\r\n    \r\n    Polygon poly108(4);\r\n    poly108.ps[0] = Point(546, 315);\r\n    poly108.ps[1] = Point(546, 355);\r\n    poly108.ps[2] = Point(490, 355);\r\n    poly108.ps[3] = Point(490, 315);\r\n    new ShapeRef(router, poly108, 108);\r\n    \r\n    Polygon poly109(4);\r\n    poly109.ps[0] = Point(431, 365);\r\n    poly109.ps[1] = Point(431, 405);\r\n    poly109.ps[2] = Point(375, 405);\r\n    poly109.ps[3] = Point(375, 365);\r\n    new ShapeRef(router, poly109, 109);\r\n    \r\n    Polygon poly110(4);\r\n    poly110.ps[0] = Point(553, 122);\r\n    poly110.ps[1] = Point(553, 162);\r\n    poly110.ps[2] = Point(497, 162);\r\n    poly110.ps[3] = Point(497, 122);\r\n    new ShapeRef(router, poly110, 110);\r\n    \r\n    Polygon poly111(4);\r\n    poly111.ps[0] = Point(546, 245);\r\n    poly111.ps[1] = Point(546, 285);\r\n    poly111.ps[2] = Point(490, 285);\r\n    poly111.ps[3] = Point(490, 245);\r\n    new ShapeRef(router, poly111, 111);\r\n    \r\n    Polygon poly112(4);\r\n    poly112.ps[0] = Point(422, 150);\r\n    poly112.ps[1] = Point(422, 190);\r\n    poly112.ps[2] = Point(366, 190);\r\n    poly112.ps[3] = Point(366, 150);\r\n    new ShapeRef(router, poly112, 112);\r\n    \r\n    Polygon poly113(4);\r\n    poly113.ps[0] = Point(404, 229);\r\n    poly113.ps[1] = Point(404, 269);\r\n    poly113.ps[2] = Point(348, 269);\r\n    poly113.ps[3] = Point(348, 229);\r\n    new ShapeRef(router, poly113, 113);\r\n    \r\n    Polygon poly114(4);\r\n    poly114.ps[0] = Point(249, 210);\r\n    poly114.ps[1] = Point(249, 250);\r\n    poly114.ps[2] = Point(193, 250);\r\n    poly114.ps[3] = Point(193, 210);\r\n    new ShapeRef(router, poly114, 114);\r\n    \r\n    Polygon poly115(4);\r\n    poly115.ps[0] = Point(249, 229);\r\n    poly115.ps[1] = Point(249, 269);\r\n    poly115.ps[2] = Point(193, 269);\r\n    poly115.ps[3] = Point(193, 229);\r\n    new ShapeRef(router, poly115, 115);\r\n    \r\n    Polygon poly116(4);\r\n    poly116.ps[0] = Point(420, 246);\r\n    poly116.ps[1] = Point(420, 286);\r\n    poly116.ps[2] = Point(364, 286);\r\n    poly116.ps[3] = Point(364, 246);\r\n    new ShapeRef(router, poly116, 116);\r\n    \r\n    Polygon poly117(4);\r\n    poly117.ps[0] = Point(246, 246);\r\n    poly117.ps[1] = Point(246, 286);\r\n    poly117.ps[2] = Point(190, 286);\r\n    poly117.ps[3] = Point(190, 246);\r\n    new ShapeRef(router, poly117, 117);\r\n    \r\n    Polygon poly118(4);\r\n    poly118.ps[0] = Point(120, 241);\r\n    poly118.ps[1] = Point(120, 281);\r\n    poly118.ps[2] = Point(64, 281);\r\n    poly118.ps[3] = Point(64, 241);\r\n    new ShapeRef(router, poly118, 118);\r\n    \r\n    Polygon poly119(4);\r\n    poly119.ps[0] = Point(249, 154);\r\n    poly119.ps[1] = Point(249, 194);\r\n    poly119.ps[2] = Point(193, 194);\r\n    poly119.ps[3] = Point(193, 154);\r\n    new ShapeRef(router, poly119, 119);\r\n    \r\n    Polygon poly120(4);\r\n    poly120.ps[0] = Point(249, 135);\r\n    poly120.ps[1] = Point(249, 175);\r\n    poly120.ps[2] = Point(193, 175);\r\n    poly120.ps[3] = Point(193, 135);\r\n    new ShapeRef(router, poly120, 120);\r\n    \r\n    Polygon poly121(4);\r\n    poly121.ps[0] = Point(317, 213);\r\n    poly121.ps[1] = Point(317, 253);\r\n    poly121.ps[2] = Point(261, 253);\r\n    poly121.ps[3] = Point(261, 213);\r\n    new ShapeRef(router, poly121, 121);\r\n    \r\n    Polygon poly122(4);\r\n    poly122.ps[0] = Point(344, 81);\r\n    poly122.ps[1] = Point(344, 121);\r\n    poly122.ps[2] = Point(288, 121);\r\n    poly122.ps[3] = Point(288, 81);\r\n    new ShapeRef(router, poly122, 122);\r\n    \r\n    Polygon poly123(4);\r\n    poly123.ps[0] = Point(344, 160);\r\n    poly123.ps[1] = Point(344, 200);\r\n    poly123.ps[2] = Point(288, 200);\r\n    poly123.ps[3] = Point(288, 160);\r\n    new ShapeRef(router, poly123, 123);\r\n    \r\n    Polygon poly124(4);\r\n    poly124.ps[0] = Point(263, 835);\r\n    poly124.ps[1] = Point(263, 875);\r\n    poly124.ps[2] = Point(207, 875);\r\n    poly124.ps[3] = Point(207, 835);\r\n    new ShapeRef(router, poly124, 124);\r\n    \r\n    Polygon poly125(4);\r\n    poly125.ps[0] = Point(422, 533);\r\n    poly125.ps[1] = Point(422, 573);\r\n    poly125.ps[2] = Point(366, 573);\r\n    poly125.ps[3] = Point(366, 533);\r\n    new ShapeRef(router, poly125, 125);\r\n    \r\n    Polygon poly126(4);\r\n    poly126.ps[0] = Point(249, 173);\r\n    poly126.ps[1] = Point(249, 213);\r\n    poly126.ps[2] = Point(193, 213);\r\n    poly126.ps[3] = Point(193, 173);\r\n    new ShapeRef(router, poly126, 126);\r\n    \r\n    Polygon poly127(4);\r\n    poly127.ps[0] = Point(249, 248);\r\n    poly127.ps[1] = Point(249, 288);\r\n    poly127.ps[2] = Point(193, 288);\r\n    poly127.ps[3] = Point(193, 248);\r\n    new ShapeRef(router, poly127, 127);\r\n    \r\n    Polygon poly128(4);\r\n    poly128.ps[0] = Point(182, 287);\r\n    poly128.ps[1] = Point(182, 327);\r\n    poly128.ps[2] = Point(126, 327);\r\n    poly128.ps[3] = Point(126, 287);\r\n    new ShapeRef(router, poly128, 128);\r\n    \r\n    Polygon poly129(4);\r\n    poly129.ps[0] = Point(182, 413);\r\n    poly129.ps[1] = Point(182, 453);\r\n    poly129.ps[2] = Point(126, 453);\r\n    poly129.ps[3] = Point(126, 413);\r\n    new ShapeRef(router, poly129, 129);\r\n    \r\n    Polygon poly130(4);\r\n    poly130.ps[0] = Point(292, 286);\r\n    poly130.ps[1] = Point(292, 326);\r\n    poly130.ps[2] = Point(236, 326);\r\n    poly130.ps[3] = Point(236, 286);\r\n    new ShapeRef(router, poly130, 130);\r\n    \r\n    Polygon poly131(4);\r\n    poly131.ps[0] = Point(292, 412);\r\n    poly131.ps[1] = Point(292, 452);\r\n    poly131.ps[2] = Point(236, 452);\r\n    poly131.ps[3] = Point(236, 412);\r\n    new ShapeRef(router, poly131, 131);\r\n    \r\n    Polygon poly132(4);\r\n    poly132.ps[0] = Point(205, 653);\r\n    poly132.ps[1] = Point(205, 693);\r\n    poly132.ps[2] = Point(149, 693);\r\n    poly132.ps[3] = Point(149, 653);\r\n    new ShapeRef(router, poly132, 132);\r\n    \r\n    Polygon poly133(4);\r\n    poly133.ps[0] = Point(440, 891);\r\n    poly133.ps[1] = Point(440, 931);\r\n    poly133.ps[2] = Point(384, 931);\r\n    poly133.ps[3] = Point(384, 891);\r\n    new ShapeRef(router, poly133, 133);\r\n    \r\n    Polygon poly134(4);\r\n    poly134.ps[0] = Point(205, 674);\r\n    poly134.ps[1] = Point(205, 714);\r\n    poly134.ps[2] = Point(149, 714);\r\n    poly134.ps[3] = Point(149, 674);\r\n    new ShapeRef(router, poly134, 134);\r\n    \r\n    Polygon poly135(4);\r\n    poly135.ps[0] = Point(488, 991);\r\n    poly135.ps[1] = Point(488, 1031);\r\n    poly135.ps[2] = Point(432, 1031);\r\n    poly135.ps[3] = Point(432, 991);\r\n    new ShapeRef(router, poly135, 135);\r\n    \r\n    Polygon poly136(4);\r\n    poly136.ps[0] = Point(571, 461);\r\n    poly136.ps[1] = Point(571, 501);\r\n    poly136.ps[2] = Point(515, 501);\r\n    poly136.ps[3] = Point(515, 461);\r\n    new ShapeRef(router, poly136, 136);\r\n    \r\n    Polygon poly137(4);\r\n    poly137.ps[0] = Point(583, 452);\r\n    poly137.ps[1] = Point(583, 492);\r\n    poly137.ps[2] = Point(527, 492);\r\n    poly137.ps[3] = Point(527, 452);\r\n    new ShapeRef(router, poly137, 137);\r\n    \r\n    Polygon poly138(4);\r\n    poly138.ps[0] = Point(556, 571);\r\n    poly138.ps[1] = Point(556, 611);\r\n    poly138.ps[2] = Point(500, 611);\r\n    poly138.ps[3] = Point(500, 571);\r\n    new ShapeRef(router, poly138, 138);\r\n    \r\n    Polygon poly139(4);\r\n    poly139.ps[0] = Point(290, 722);\r\n    poly139.ps[1] = Point(290, 762);\r\n    poly139.ps[2] = Point(234, 762);\r\n    poly139.ps[3] = Point(234, 722);\r\n    new ShapeRef(router, poly139, 139);\r\n    \r\n    Polygon poly140(4);\r\n    poly140.ps[0] = Point(595, 502);\r\n    poly140.ps[1] = Point(595, 542);\r\n    poly140.ps[2] = Point(539, 542);\r\n    poly140.ps[3] = Point(539, 502);\r\n    new ShapeRef(router, poly140, 140);\r\n    \r\n    Polygon poly141(4);\r\n    poly141.ps[0] = Point(438, 613);\r\n    poly141.ps[1] = Point(438, 653);\r\n    poly141.ps[2] = Point(382, 653);\r\n    poly141.ps[3] = Point(382, 613);\r\n    new ShapeRef(router, poly141, 141);\r\n    \r\n    Polygon poly142(4);\r\n    poly142.ps[0] = Point(439, 449);\r\n    poly142.ps[1] = Point(439, 489);\r\n    poly142.ps[2] = Point(383, 489);\r\n    poly142.ps[3] = Point(383, 449);\r\n    new ShapeRef(router, poly142, 142);\r\n    \r\n    ConnRef *connRef143 = new ConnRef(router, 143);\r\n    ConnEnd srcPt143(Point(262, 940), 15);\r\n    connRef143->setSourceEndpoint(srcPt143);\r\n    ConnEnd dstPt143(Point(119, 951), 15);\r\n    connRef143->setDestEndpoint(dstPt143);\r\n    connRef143->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef144 = new ConnRef(router, 144);\r\n    ConnEnd srcPt144(Point(262, 940), 15);\r\n    connRef144->setSourceEndpoint(srcPt144);\r\n    ConnEnd dstPt144(Point(351, 951), 15);\r\n    connRef144->setDestEndpoint(dstPt144);\r\n    connRef144->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef145 = new ConnRef(router, 145);\r\n    ConnEnd srcPt145(Point(119, 908), 15);\r\n    connRef145->setSourceEndpoint(srcPt145);\r\n    ConnEnd dstPt145(Point(119, 951), 15);\r\n    connRef145->setDestEndpoint(dstPt145);\r\n    connRef145->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef146 = new ConnRef(router, 146);\r\n    ConnEnd srcPt146(Point(119, 908), 15);\r\n    connRef146->setSourceEndpoint(srcPt146);\r\n    ConnEnd dstPt146(Point(119, 861), 15);\r\n    connRef146->setDestEndpoint(dstPt146);\r\n    connRef146->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef147 = new ConnRef(router, 147);\r\n    ConnEnd srcPt147(Point(262, 961), 15);\r\n    connRef147->setSourceEndpoint(srcPt147);\r\n    ConnEnd dstPt147(Point(119, 951), 15);\r\n    connRef147->setDestEndpoint(dstPt147);\r\n    connRef147->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef148 = new ConnRef(router, 148);\r\n    ConnEnd srcPt148(Point(262, 961), 15);\r\n    connRef148->setSourceEndpoint(srcPt148);\r\n    ConnEnd dstPt148(Point(351, 951), 15);\r\n    connRef148->setDestEndpoint(dstPt148);\r\n    connRef148->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef149 = new ConnRef(router, 149);\r\n    ConnEnd srcPt149(Point(629, 336), 15);\r\n    connRef149->setSourceEndpoint(srcPt149);\r\n    ConnEnd dstPt149(Point(456, 446), 15);\r\n    connRef149->setDestEndpoint(dstPt149);\r\n    connRef149->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef150 = new ConnRef(router, 150);\r\n    ConnEnd srcPt150(Point(351, 909), 15);\r\n    connRef150->setSourceEndpoint(srcPt150);\r\n    ConnEnd dstPt150(Point(351, 951), 15);\r\n    connRef150->setDestEndpoint(dstPt150);\r\n    connRef150->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef151 = new ConnRef(router, 151);\r\n    ConnEnd srcPt151(Point(460, 940), 15);\r\n    connRef151->setSourceEndpoint(srcPt151);\r\n    ConnEnd dstPt151(Point(351, 951), 15);\r\n    connRef151->setDestEndpoint(dstPt151);\r\n    connRef151->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef152 = new ConnRef(router, 152);\r\n    ConnEnd srcPt152(Point(412, 940), 15);\r\n    connRef152->setSourceEndpoint(srcPt152);\r\n    ConnEnd dstPt152(Point(351, 951), 15);\r\n    connRef152->setDestEndpoint(dstPt152);\r\n    connRef152->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef153 = new ConnRef(router, 153);\r\n    ConnEnd srcPt153(Point(404, 871), 15);\r\n    connRef153->setSourceEndpoint(srcPt153);\r\n    ConnEnd dstPt153(Point(351, 861), 15);\r\n    connRef153->setDestEndpoint(dstPt153);\r\n    connRef153->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef154 = new ConnRef(router, 154);\r\n    ConnEnd srcPt154(Point(404, 850), 15);\r\n    connRef154->setSourceEndpoint(srcPt154);\r\n    ConnEnd dstPt154(Point(351, 861), 15);\r\n    connRef154->setDestEndpoint(dstPt154);\r\n    connRef154->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef155 = new ConnRef(router, 155);\r\n    ConnEnd srcPt155(Point(292, 862), 15);\r\n    connRef155->setSourceEndpoint(srcPt155);\r\n    ConnEnd dstPt155(Point(351, 818), 15);\r\n    connRef155->setDestEndpoint(dstPt155);\r\n    connRef155->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef156 = new ConnRef(router, 156);\r\n    ConnEnd srcPt156(Point(292, 862), 15);\r\n    connRef156->setSourceEndpoint(srcPt156);\r\n    ConnEnd dstPt156(Point(238, 861), 15);\r\n    connRef156->setDestEndpoint(dstPt156);\r\n    connRef156->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef157 = new ConnRef(router, 157);\r\n    ConnEnd srcPt157(Point(183, 862), 15);\r\n    connRef157->setSourceEndpoint(srcPt157);\r\n    ConnEnd dstPt157(Point(119, 861), 15);\r\n    connRef157->setDestEndpoint(dstPt157);\r\n    connRef157->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef158 = new ConnRef(router, 158);\r\n    ConnEnd srcPt158(Point(183, 862), 15);\r\n    connRef158->setSourceEndpoint(srcPt158);\r\n    ConnEnd dstPt158(Point(238, 861), 15);\r\n    connRef158->setDestEndpoint(dstPt158);\r\n    connRef158->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef159 = new ConnRef(router, 159);\r\n    ConnEnd srcPt159(Point(183, 862), 15);\r\n    connRef159->setSourceEndpoint(srcPt159);\r\n    ConnEnd dstPt159(Point(185, 904), 15);\r\n    connRef159->setDestEndpoint(dstPt159);\r\n    connRef159->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef160 = new ConnRef(router, 160);\r\n    ConnEnd srcPt160(Point(531, 861), 15);\r\n    connRef160->setSourceEndpoint(srcPt160);\r\n    ConnEnd dstPt160(Point(600, 861), 15);\r\n    connRef160->setDestEndpoint(dstPt160);\r\n    connRef160->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef161 = new ConnRef(router, 161);\r\n    ConnEnd srcPt161(Point(531, 861), 15);\r\n    connRef161->setSourceEndpoint(srcPt161);\r\n    ConnEnd dstPt161(Point(456, 861), 15);\r\n    connRef161->setDestEndpoint(dstPt161);\r\n    connRef161->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef162 = new ConnRef(router, 162);\r\n    ConnEnd srcPt162(Point(456, 767), 15);\r\n    connRef162->setSourceEndpoint(srcPt162);\r\n    ConnEnd dstPt162(Point(456, 861), 15);\r\n    connRef162->setDestEndpoint(dstPt162);\r\n    connRef162->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef163 = new ConnRef(router, 163);\r\n    ConnEnd srcPt163(Point(456, 698), 15);\r\n    connRef163->setSourceEndpoint(srcPt163);\r\n    ConnEnd dstPt163(Point(456, 662), 15);\r\n    connRef163->setDestEndpoint(dstPt163);\r\n    connRef163->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef164 = new ConnRef(router, 164);\r\n    ConnEnd srcPt164(Point(456, 698), 15);\r\n    connRef164->setSourceEndpoint(srcPt164);\r\n    ConnEnd dstPt164(Point(456, 734), 15);\r\n    connRef164->setDestEndpoint(dstPt164);\r\n    connRef164->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef165 = new ConnRef(router, 165);\r\n    ConnEnd srcPt165(Point(457, 626), 15);\r\n    connRef165->setSourceEndpoint(srcPt165);\r\n    ConnEnd dstPt165(Point(456, 662), 15);\r\n    connRef165->setDestEndpoint(dstPt165);\r\n    connRef165->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef166 = new ConnRef(router, 166);\r\n    ConnEnd srcPt166(Point(457, 626), 15);\r\n    connRef166->setSourceEndpoint(srcPt166);\r\n    ConnEnd dstPt166(Point(456, 590), 15);\r\n    connRef166->setDestEndpoint(dstPt166);\r\n    connRef166->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef167 = new ConnRef(router, 167);\r\n    ConnEnd srcPt167(Point(431, 481), 15);\r\n    connRef167->setSourceEndpoint(srcPt167);\r\n    ConnEnd dstPt167(Point(456, 518), 15);\r\n    connRef167->setDestEndpoint(dstPt167);\r\n    connRef167->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef168 = new ConnRef(router, 168);\r\n    ConnEnd srcPt168(Point(431, 481), 15);\r\n    connRef168->setSourceEndpoint(srcPt168);\r\n    ConnEnd dstPt168(Point(456, 446), 15);\r\n    connRef168->setDestEndpoint(dstPt168);\r\n    connRef168->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef169 = new ConnRef(router, 169);\r\n    ConnEnd srcPt169(Point(376, 447), 15);\r\n    connRef169->setSourceEndpoint(srcPt169);\r\n    ConnEnd dstPt169(Point(305, 446), 15);\r\n    connRef169->setDestEndpoint(dstPt169);\r\n    connRef169->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef170 = new ConnRef(router, 170);\r\n    ConnEnd srcPt170(Point(376, 447), 15);\r\n    connRef170->setSourceEndpoint(srcPt170);\r\n    ConnEnd dstPt170(Point(456, 446), 15);\r\n    connRef170->setDestEndpoint(dstPt170);\r\n    connRef170->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef171 = new ConnRef(router, 171);\r\n    ConnEnd srcPt171(Point(456, 401), 15);\r\n    connRef171->setSourceEndpoint(srcPt171);\r\n    ConnEnd dstPt171(Point(305, 446), 15);\r\n    connRef171->setDestEndpoint(dstPt171);\r\n    connRef171->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef172 = new ConnRef(router, 172);\r\n    ConnEnd srcPt172(Point(456, 401), 15);\r\n    connRef172->setSourceEndpoint(srcPt172);\r\n    ConnEnd dstPt172(Point(456, 371), 15);\r\n    connRef172->setDestEndpoint(dstPt172);\r\n    connRef172->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef173 = new ConnRef(router, 173);\r\n    ConnEnd srcPt173(Point(456, 401), 15);\r\n    connRef173->setSourceEndpoint(srcPt173);\r\n    ConnEnd dstPt173(Point(456, 446), 15);\r\n    connRef173->setDestEndpoint(dstPt173);\r\n    connRef173->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef174 = new ConnRef(router, 174);\r\n    ConnEnd srcPt174(Point(456, 335), 15);\r\n    connRef174->setSourceEndpoint(srcPt174);\r\n    ConnEnd dstPt174(Point(456, 371), 15);\r\n    connRef174->setDestEndpoint(dstPt174);\r\n    connRef174->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef175 = new ConnRef(router, 175);\r\n    ConnEnd srcPt175(Point(403, 335), 15);\r\n    connRef175->setSourceEndpoint(srcPt175);\r\n    ConnEnd dstPt175(Point(456, 301), 15);\r\n    connRef175->setDestEndpoint(dstPt175);\r\n    connRef175->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef176 = new ConnRef(router, 176);\r\n    ConnEnd srcPt176(Point(525, 192), 15);\r\n    connRef176->setSourceEndpoint(srcPt176);\r\n    ConnEnd dstPt176(Point(456, 228), 15);\r\n    connRef176->setDestEndpoint(dstPt176);\r\n    connRef176->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef177 = new ConnRef(router, 177);\r\n    ConnEnd srcPt177(Point(456, 265), 15);\r\n    connRef177->setSourceEndpoint(srcPt177);\r\n    ConnEnd dstPt177(Point(456, 228), 15);\r\n    connRef177->setDestEndpoint(dstPt177);\r\n    connRef177->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef178 = new ConnRef(router, 178);\r\n    ConnEnd srcPt178(Point(456, 265), 15);\r\n    connRef178->setSourceEndpoint(srcPt178);\r\n    ConnEnd dstPt178(Point(456, 301), 15);\r\n    connRef178->setDestEndpoint(dstPt178);\r\n    connRef178->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef179 = new ConnRef(router, 179);\r\n    ConnEnd srcPt179(Point(456, 170), 15);\r\n    connRef179->setSourceEndpoint(srcPt179);\r\n    ConnEnd dstPt179(Point(456, 141), 15);\r\n    connRef179->setDestEndpoint(dstPt179);\r\n    connRef179->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef180 = new ConnRef(router, 180);\r\n    ConnEnd srcPt180(Point(456, 170), 15);\r\n    connRef180->setSourceEndpoint(srcPt180);\r\n    ConnEnd dstPt180(Point(456, 228), 15);\r\n    connRef180->setDestEndpoint(dstPt180);\r\n    connRef180->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef181 = new ConnRef(router, 181);\r\n    ConnEnd srcPt181(Point(376, 299), 15);\r\n    connRef181->setSourceEndpoint(srcPt181);\r\n    ConnEnd dstPt181(Point(305, 299), 15);\r\n    connRef181->setDestEndpoint(dstPt181);\r\n    connRef181->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef182 = new ConnRef(router, 182);\r\n    ConnEnd srcPt182(Point(376, 299), 15);\r\n    connRef182->setSourceEndpoint(srcPt182);\r\n    ConnEnd dstPt182(Point(456, 301), 15);\r\n    connRef182->setDestEndpoint(dstPt182);\r\n    connRef182->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef183 = new ConnRef(router, 183);\r\n    ConnEnd srcPt183(Point(221, 280), 15);\r\n    connRef183->setSourceEndpoint(srcPt183);\r\n    ConnEnd dstPt183(Point(154, 299), 15);\r\n    connRef183->setDestEndpoint(dstPt183);\r\n    connRef183->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef184 = new ConnRef(router, 184);\r\n    ConnEnd srcPt184(Point(221, 280), 15);\r\n    connRef184->setSourceEndpoint(srcPt184);\r\n    ConnEnd dstPt184(Point(305, 299), 15);\r\n    connRef184->setDestEndpoint(dstPt184);\r\n    connRef184->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef185 = new ConnRef(router, 185);\r\n    ConnEnd srcPt185(Point(221, 299), 15);\r\n    connRef185->setSourceEndpoint(srcPt185);\r\n    ConnEnd dstPt185(Point(154, 299), 15);\r\n    connRef185->setDestEndpoint(dstPt185);\r\n    connRef185->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef186 = new ConnRef(router, 186);\r\n    ConnEnd srcPt186(Point(221, 299), 15);\r\n    connRef186->setSourceEndpoint(srcPt186);\r\n    ConnEnd dstPt186(Point(305, 299), 15);\r\n    connRef186->setDestEndpoint(dstPt186);\r\n    connRef186->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef187 = new ConnRef(router, 187);\r\n    ConnEnd srcPt187(Point(330, 266), 15);\r\n    connRef187->setSourceEndpoint(srcPt187);\r\n    ConnEnd dstPt187(Point(305, 299), 15);\r\n    connRef187->setDestEndpoint(dstPt187);\r\n    connRef187->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef188 = new ConnRef(router, 188);\r\n    ConnEnd srcPt188(Point(330, 266), 15);\r\n    connRef188->setSourceEndpoint(srcPt188);\r\n    ConnEnd dstPt188(Point(456, 228), 15);\r\n    connRef188->setDestEndpoint(dstPt188);\r\n    connRef188->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef189 = new ConnRef(router, 189);\r\n    ConnEnd srcPt189(Point(280, 266), 15);\r\n    connRef189->setSourceEndpoint(srcPt189);\r\n    ConnEnd dstPt189(Point(305, 299), 15);\r\n    connRef189->setDestEndpoint(dstPt189);\r\n    connRef189->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef190 = new ConnRef(router, 190);\r\n    ConnEnd srcPt190(Point(280, 266), 15);\r\n    connRef190->setSourceEndpoint(srcPt190);\r\n    ConnEnd dstPt190(Point(456, 228), 15);\r\n    connRef190->setDestEndpoint(dstPt190);\r\n    connRef190->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef191 = new ConnRef(router, 191);\r\n    ConnEnd srcPt191(Point(154, 261), 15);\r\n    connRef191->setSourceEndpoint(srcPt191);\r\n    ConnEnd dstPt191(Point(154, 226), 15);\r\n    connRef191->setDestEndpoint(dstPt191);\r\n    connRef191->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef192 = new ConnRef(router, 192);\r\n    ConnEnd srcPt192(Point(154, 261), 15);\r\n    connRef192->setSourceEndpoint(srcPt192);\r\n    ConnEnd dstPt192(Point(154, 299), 15);\r\n    connRef192->setDestEndpoint(dstPt192);\r\n    connRef192->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef193 = new ConnRef(router, 193);\r\n    ConnEnd srcPt193(Point(221, 224), 15);\r\n    connRef193->setSourceEndpoint(srcPt193);\r\n    ConnEnd dstPt193(Point(456, 228), 15);\r\n    connRef193->setDestEndpoint(dstPt193);\r\n    connRef193->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef194 = new ConnRef(router, 194);\r\n    ConnEnd srcPt194(Point(221, 205), 15);\r\n    connRef194->setSourceEndpoint(srcPt194);\r\n    ConnEnd dstPt194(Point(456, 228), 15);\r\n    connRef194->setDestEndpoint(dstPt194);\r\n    connRef194->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef195 = new ConnRef(router, 195);\r\n    ConnEnd srcPt195(Point(289, 183), 15);\r\n    connRef195->setSourceEndpoint(srcPt195);\r\n    ConnEnd dstPt195(Point(154, 226), 15);\r\n    connRef195->setDestEndpoint(dstPt195);\r\n    connRef195->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef196 = new ConnRef(router, 196);\r\n    ConnEnd srcPt196(Point(289, 183), 15);\r\n    connRef196->setSourceEndpoint(srcPt196);\r\n    ConnEnd dstPt196(Point(456, 228), 15);\r\n    connRef196->setDestEndpoint(dstPt196);\r\n    connRef196->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef197 = new ConnRef(router, 197);\r\n    ConnEnd srcPt197(Point(316, 151), 15);\r\n    connRef197->setSourceEndpoint(srcPt197);\r\n    ConnEnd dstPt197(Point(154, 226), 15);\r\n    connRef197->setDestEndpoint(dstPt197);\r\n    connRef197->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef198 = new ConnRef(router, 198);\r\n    ConnEnd srcPt198(Point(316, 130), 15);\r\n    connRef198->setSourceEndpoint(srcPt198);\r\n    ConnEnd dstPt198(Point(154, 226), 15);\r\n    connRef198->setDestEndpoint(dstPt198);\r\n    connRef198->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef199 = new ConnRef(router, 199);\r\n    ConnEnd srcPt199(Point(235, 905), 15);\r\n    connRef199->setSourceEndpoint(srcPt199);\r\n    ConnEnd dstPt199(Point(287, 904), 15);\r\n    connRef199->setDestEndpoint(dstPt199);\r\n    connRef199->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef200 = new ConnRef(router, 200);\r\n    ConnEnd srcPt200(Point(456, 553), 15);\r\n    connRef200->setSourceEndpoint(srcPt200);\r\n    ConnEnd dstPt200(Point(456, 590), 15);\r\n    connRef200->setDestEndpoint(dstPt200);\r\n    connRef200->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef201 = new ConnRef(router, 201);\r\n    ConnEnd srcPt201(Point(456, 553), 15);\r\n    connRef201->setSourceEndpoint(srcPt201);\r\n    ConnEnd dstPt201(Point(456, 518), 15);\r\n    connRef201->setDestEndpoint(dstPt201);\r\n    connRef201->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef202 = new ConnRef(router, 202);\r\n    ConnEnd srcPt202(Point(221, 243), 15);\r\n    connRef202->setSourceEndpoint(srcPt202);\r\n    ConnEnd dstPt202(Point(456, 228), 15);\r\n    connRef202->setDestEndpoint(dstPt202);\r\n    connRef202->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef203 = new ConnRef(router, 203);\r\n    ConnEnd srcPt203(Point(221, 318), 15);\r\n    connRef203->setSourceEndpoint(srcPt203);\r\n    ConnEnd dstPt203(Point(305, 299), 15);\r\n    connRef203->setDestEndpoint(dstPt203);\r\n    connRef203->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef204 = new ConnRef(router, 204);\r\n    ConnEnd srcPt204(Point(154, 357), 15);\r\n    connRef204->setSourceEndpoint(srcPt204);\r\n    ConnEnd dstPt204(Point(212, 356), 15);\r\n    connRef204->setDestEndpoint(dstPt204);\r\n    connRef204->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef205 = new ConnRef(router, 205);\r\n    ConnEnd srcPt205(Point(154, 383), 15);\r\n    connRef205->setSourceEndpoint(srcPt205);\r\n    ConnEnd dstPt205(Point(212, 382), 15);\r\n    connRef205->setDestEndpoint(dstPt205);\r\n    connRef205->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef206 = new ConnRef(router, 206);\r\n    ConnEnd srcPt206(Point(264, 356), 15);\r\n    connRef206->setSourceEndpoint(srcPt206);\r\n    ConnEnd dstPt206(Point(305, 299), 15);\r\n    connRef206->setDestEndpoint(dstPt206);\r\n    connRef206->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef207 = new ConnRef(router, 207);\r\n    ConnEnd srcPt207(Point(264, 382), 15);\r\n    connRef207->setSourceEndpoint(srcPt207);\r\n    ConnEnd dstPt207(Point(305, 299), 15);\r\n    connRef207->setDestEndpoint(dstPt207);\r\n    connRef207->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef208 = new ConnRef(router, 208);\r\n    ConnEnd srcPt208(Point(574, 193), 15);\r\n    connRef208->setSourceEndpoint(srcPt208);\r\n    ConnEnd dstPt208(Point(525, 192), 15);\r\n    connRef208->setDestEndpoint(dstPt208);\r\n    connRef208->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef209 = new ConnRef(router, 209);\r\n    ConnEnd srcPt209(Point(456, 141), 15);\r\n    connRef209->setSourceEndpoint(srcPt209);\r\n    ConnEnd dstPt209(Point(458, 74), 15);\r\n    connRef209->setDestEndpoint(dstPt209);\r\n    connRef209->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef210 = new ConnRef(router, 210);\r\n    ConnEnd srcPt210(Point(456, 662), 15);\r\n    connRef210->setSourceEndpoint(srcPt210);\r\n    ConnEnd dstPt210(Point(629, 336), 15);\r\n    connRef210->setDestEndpoint(dstPt210);\r\n    connRef210->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef211 = new ConnRef(router, 211);\r\n    ConnEnd srcPt211(Point(154, 226), 15);\r\n    connRef211->setSourceEndpoint(srcPt211);\r\n    ConnEnd dstPt211(Point(221, 243), 15);\r\n    connRef211->setDestEndpoint(dstPt211);\r\n    connRef211->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef212 = new ConnRef(router, 212);\r\n    ConnEnd srcPt212(Point(221, 318), 15);\r\n    connRef212->setSourceEndpoint(srcPt212);\r\n    ConnEnd dstPt212(Point(154, 299), 15);\r\n    connRef212->setDestEndpoint(dstPt212);\r\n    connRef212->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef213 = new ConnRef(router, 213);\r\n    ConnEnd srcPt213(Point(456, 228), 15);\r\n    connRef213->setSourceEndpoint(srcPt213);\r\n    ConnEnd dstPt213(Point(629, 336), 15);\r\n    connRef213->setDestEndpoint(dstPt213);\r\n    connRef213->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef214 = new ConnRef(router, 214);\r\n    ConnEnd srcPt214(Point(456, 734), 15);\r\n    connRef214->setSourceEndpoint(srcPt214);\r\n    ConnEnd dstPt214(Point(49, 798), 15);\r\n    connRef214->setDestEndpoint(dstPt214);\r\n    connRef214->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef215 = new ConnRef(router, 215);\r\n    ConnEnd srcPt215(Point(177, 744), 15);\r\n    connRef215->setSourceEndpoint(srcPt215);\r\n    ConnEnd dstPt215(Point(456, 734), 15);\r\n    connRef215->setDestEndpoint(dstPt215);\r\n    connRef215->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef216 = new ConnRef(router, 216);\r\n    ConnEnd srcPt216(Point(456, 590), 15);\r\n    connRef216->setSourceEndpoint(srcPt216);\r\n    ConnEnd dstPt216(Point(278, 597), 15);\r\n    connRef216->setDestEndpoint(dstPt216);\r\n    connRef216->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef217 = new ConnRef(router, 217);\r\n    ConnEnd srcPt217(Point(555, 522), 15);\r\n    connRef217->setSourceEndpoint(srcPt217);\r\n    ConnEnd dstPt217(Point(456, 590), 15);\r\n    connRef217->setDestEndpoint(dstPt217);\r\n    connRef217->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef218 = new ConnRef(router, 218);\r\n    ConnEnd srcPt218(Point(528, 541), 15);\r\n    connRef218->setSourceEndpoint(srcPt218);\r\n    ConnEnd dstPt218(Point(456, 590), 15);\r\n    connRef218->setDestEndpoint(dstPt218);\r\n    connRef218->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef219 = new ConnRef(router, 219);\r\n    ConnEnd srcPt219(Point(505, 522), 15);\r\n    connRef219->setSourceEndpoint(srcPt219);\r\n    ConnEnd dstPt219(Point(456, 590), 15);\r\n    connRef219->setDestEndpoint(dstPt219);\r\n    connRef219->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef220 = new ConnRef(router, 220);\r\n    ConnEnd srcPt220(Point(481, 481), 15);\r\n    connRef220->setSourceEndpoint(srcPt220);\r\n    ConnEnd dstPt220(Point(456, 518), 15);\r\n    connRef220->setDestEndpoint(dstPt220);\r\n    connRef220->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef221 = new ConnRef(router, 221);\r\n    ConnEnd srcPt221(Point(411, 519), 15);\r\n    connRef221->setSourceEndpoint(srcPt221);\r\n    ConnEnd dstPt221(Point(456, 518), 15);\r\n    connRef221->setDestEndpoint(dstPt221);\r\n    connRef221->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef222 = new ConnRef(router, 222);\r\n    ConnEnd srcPt222(Point(600, 861), 15);\r\n    connRef222->setSourceEndpoint(srcPt222);\r\n    ConnEnd dstPt222(Point(601, 917), 15);\r\n    connRef222->setDestEndpoint(dstPt222);\r\n    connRef222->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef223 = new ConnRef(router, 223);\r\n    ConnEnd srcPt223(Point(460, 940), 15);\r\n    connRef223->setSourceEndpoint(srcPt223);\r\n    ConnEnd dstPt223(Point(523, 951), 15);\r\n    connRef223->setDestEndpoint(dstPt223);\r\n    connRef223->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef224 = new ConnRef(router, 224);\r\n    ConnEnd srcPt224(Point(412, 940), 15);\r\n    connRef224->setSourceEndpoint(srcPt224);\r\n    ConnEnd dstPt224(Point(523, 951), 15);\r\n    connRef224->setDestEndpoint(dstPt224);\r\n    connRef224->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef225 = new ConnRef(router, 225);\r\n    ConnEnd srcPt225(Point(523, 951), 15);\r\n    connRef225->setSourceEndpoint(srcPt225);\r\n    ConnEnd dstPt225(Point(412, 961), 15);\r\n    connRef225->setDestEndpoint(dstPt225);\r\n    connRef225->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef226 = new ConnRef(router, 226);\r\n    ConnEnd srcPt226(Point(460, 961), 15);\r\n    connRef226->setSourceEndpoint(srcPt226);\r\n    ConnEnd dstPt226(Point(523, 951), 15);\r\n    connRef226->setDestEndpoint(dstPt226);\r\n    connRef226->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef227 = new ConnRef(router, 227);\r\n    ConnEnd srcPt227(Point(456, 861), 15);\r\n    connRef227->setSourceEndpoint(srcPt227);\r\n    ConnEnd dstPt227(Point(629, 336), 15);\r\n    connRef227->setDestEndpoint(dstPt227);\r\n    connRef227->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef228 = new ConnRef(router, 228);\r\n    ConnEnd srcPt228(Point(456, 861), 15);\r\n    connRef228->setSourceEndpoint(srcPt228);\r\n    ConnEnd dstPt228(Point(49, 798), 15);\r\n    connRef228->setDestEndpoint(dstPt228);\r\n    connRef228->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef229 = new ConnRef(router, 229);\r\n    ConnEnd srcPt229(Point(262, 792), 15);\r\n    connRef229->setSourceEndpoint(srcPt229);\r\n    ConnEnd dstPt229(Point(456, 861), 15);\r\n    connRef229->setDestEndpoint(dstPt229);\r\n    connRef229->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef230 = new ConnRef(router, 230);\r\n    ConnEnd srcPt230(Point(351, 861), 15);\r\n    connRef230->setSourceEndpoint(srcPt230);\r\n    ConnEnd dstPt230(Point(351, 909), 15);\r\n    connRef230->setDestEndpoint(dstPt230);\r\n    connRef230->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef231 = new ConnRef(router, 231);\r\n    ConnEnd srcPt231(Point(351, 818), 15);\r\n    connRef231->setSourceEndpoint(srcPt231);\r\n    ConnEnd dstPt231(Point(404, 871), 15);\r\n    connRef231->setDestEndpoint(dstPt231);\r\n    connRef231->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef232 = new ConnRef(router, 232);\r\n    ConnEnd srcPt232(Point(351, 818), 15);\r\n    connRef232->setSourceEndpoint(srcPt232);\r\n    ConnEnd dstPt232(Point(404, 850), 15);\r\n    connRef232->setDestEndpoint(dstPt232);\r\n    connRef232->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef233 = new ConnRef(router, 233);\r\n    ConnEnd srcPt233(Point(119, 861), 15);\r\n    connRef233->setSourceEndpoint(srcPt233);\r\n    ConnEnd dstPt233(Point(49, 798), 15);\r\n    connRef233->setDestEndpoint(dstPt233);\r\n    connRef233->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef234 = new ConnRef(router, 234);\r\n    ConnEnd srcPt234(Point(262, 792), 15);\r\n    connRef234->setSourceEndpoint(srcPt234);\r\n    ConnEnd dstPt234(Point(119, 861), 15);\r\n    connRef234->setDestEndpoint(dstPt234);\r\n    connRef234->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef235 = new ConnRef(router, 235);\r\n    ConnEnd srcPt235(Point(412, 961), 15);\r\n    connRef235->setSourceEndpoint(srcPt235);\r\n    ConnEnd dstPt235(Point(351, 951), 15);\r\n    connRef235->setDestEndpoint(dstPt235);\r\n    connRef235->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef236 = new ConnRef(router, 236);\r\n    ConnEnd srcPt236(Point(460, 961), 15);\r\n    connRef236->setSourceEndpoint(srcPt236);\r\n    ConnEnd dstPt236(Point(351, 951), 15);\r\n    connRef236->setDestEndpoint(dstPt236);\r\n    connRef236->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef237 = new ConnRef(router, 237);\r\n    ConnEnd srcPt237(Point(235, 905), 15);\r\n    connRef237->setSourceEndpoint(srcPt237);\r\n    ConnEnd dstPt237(Point(185, 904), 15);\r\n    connRef237->setDestEndpoint(dstPt237);\r\n    connRef237->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef238 = new ConnRef(router, 238);\r\n    ConnEnd srcPt238(Point(456, 371), 15);\r\n    connRef238->setSourceEndpoint(srcPt238);\r\n    ConnEnd dstPt238(Point(403, 335), 15);\r\n    connRef238->setDestEndpoint(dstPt238);\r\n    connRef238->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef239 = new ConnRef(router, 239);\r\n    ConnEnd srcPt239(Point(105, 356), 15);\r\n    connRef239->setSourceEndpoint(srcPt239);\r\n    ConnEnd dstPt239(Point(154, 357), 15);\r\n    connRef239->setDestEndpoint(dstPt239);\r\n    connRef239->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef240 = new ConnRef(router, 240);\r\n    ConnEnd srcPt240(Point(212, 356), 15);\r\n    connRef240->setSourceEndpoint(srcPt240);\r\n    ConnEnd dstPt240(Point(264, 356), 15);\r\n    connRef240->setDestEndpoint(dstPt240);\r\n    connRef240->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef241 = new ConnRef(router, 241);\r\n    ConnEnd srcPt241(Point(212, 382), 15);\r\n    connRef241->setSourceEndpoint(srcPt241);\r\n    ConnEnd dstPt241(Point(264, 382), 15);\r\n    connRef241->setDestEndpoint(dstPt241);\r\n    connRef241->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef242 = new ConnRef(router, 242);\r\n    ConnEnd srcPt242(Point(105, 382), 15);\r\n    connRef242->setSourceEndpoint(srcPt242);\r\n    ConnEnd dstPt242(Point(154, 383), 15);\r\n    connRef242->setDestEndpoint(dstPt242);\r\n    connRef242->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef243 = new ConnRef(router, 243);\r\n    ConnEnd srcPt243(Point(49, 798), 15);\r\n    connRef243->setSourceEndpoint(srcPt243);\r\n    ConnEnd dstPt243(Point(119, 734), 15);\r\n    connRef243->setDestEndpoint(dstPt243);\r\n    connRef243->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef244 = new ConnRef(router, 244);\r\n    ConnEnd srcPt244(Point(177, 723), 15);\r\n    connRef244->setSourceEndpoint(srcPt244);\r\n    ConnEnd dstPt244(Point(456, 734), 15);\r\n    connRef244->setDestEndpoint(dstPt244);\r\n    connRef244->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef245 = new ConnRef(router, 245);\r\n    ConnEnd srcPt245(Point(119, 734), 15);\r\n    connRef245->setSourceEndpoint(srcPt245);\r\n    ConnEnd dstPt245(Point(177, 723), 15);\r\n    connRef245->setDestEndpoint(dstPt245);\r\n    connRef245->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef246 = new ConnRef(router, 246);\r\n    ConnEnd srcPt246(Point(119, 734), 15);\r\n    connRef246->setSourceEndpoint(srcPt246);\r\n    ConnEnd dstPt246(Point(177, 744), 15);\r\n    connRef246->setDestEndpoint(dstPt246);\r\n    connRef246->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef247 = new ConnRef(router, 247);\r\n    ConnEnd srcPt247(Point(481, 481), 15);\r\n    connRef247->setSourceEndpoint(srcPt247);\r\n    ConnEnd dstPt247(Point(456, 446), 15);\r\n    connRef247->setDestEndpoint(dstPt247);\r\n    connRef247->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef248 = new ConnRef(router, 248);\r\n    ConnEnd srcPt248(Point(410, 583), 15);\r\n    connRef248->setSourceEndpoint(srcPt248);\r\n    ConnEnd dstPt248(Point(371, 554), 15);\r\n    connRef248->setDestEndpoint(dstPt248);\r\n    connRef248->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef249 = new ConnRef(router, 249);\r\n    ConnEnd srcPt249(Point(410, 583), 15);\r\n    connRef249->setSourceEndpoint(srcPt249);\r\n    ConnEnd dstPt249(Point(456, 590), 15);\r\n    connRef249->setDestEndpoint(dstPt249);\r\n    connRef249->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef250 = new ConnRef(router, 250);\r\n    ConnEnd srcPt250(Point(411, 519), 15);\r\n    connRef250->setSourceEndpoint(srcPt250);\r\n    ConnEnd dstPt250(Point(371, 554), 15);\r\n    connRef250->setDestEndpoint(dstPt250);\r\n    connRef250->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef251 = new ConnRef(router, 251);\r\n    ConnEnd srcPt251(Point(456, 446), 15);\r\n    connRef251->setSourceEndpoint(srcPt251);\r\n    ConnEnd dstPt251(Point(555, 522), 15);\r\n    connRef251->setDestEndpoint(dstPt251);\r\n    connRef251->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef252 = new ConnRef(router, 252);\r\n    ConnEnd srcPt252(Point(456, 446), 15);\r\n    connRef252->setSourceEndpoint(srcPt252);\r\n    ConnEnd dstPt252(Point(528, 541), 15);\r\n    connRef252->setDestEndpoint(dstPt252);\r\n    connRef252->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef253 = new ConnRef(router, 253);\r\n    ConnEnd srcPt253(Point(456, 446), 15);\r\n    connRef253->setSourceEndpoint(srcPt253);\r\n    ConnEnd dstPt253(Point(505, 522), 15);\r\n    connRef253->setDestEndpoint(dstPt253);\r\n    connRef253->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef254 = new ConnRef(router, 254);\r\n    ConnEnd srcPt254(Point(262, 990), 15);\r\n    connRef254->setSourceEndpoint(srcPt254);\r\n    ConnEnd dstPt254(Point(262, 940), 15);\r\n    connRef254->setDestEndpoint(dstPt254);\r\n    connRef254->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef255 = new ConnRef(router, 255);\r\n    ConnEnd srcPt255(Point(57, 908), 15);\r\n    connRef255->setSourceEndpoint(srcPt255);\r\n    ConnEnd dstPt255(Point(119, 908), 15);\r\n    connRef255->setDestEndpoint(dstPt255);\r\n    connRef255->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef256 = new ConnRef(router, 256);\r\n    ConnEnd srcPt256(Point(262, 1011), 15);\r\n    connRef256->setSourceEndpoint(srcPt256);\r\n    ConnEnd dstPt256(Point(262, 961), 15);\r\n    connRef256->setDestEndpoint(dstPt256);\r\n    connRef256->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef257 = new ConnRef(router, 257);\r\n    ConnEnd srcPt257(Point(289, 909), 15);\r\n    connRef257->setSourceEndpoint(srcPt257);\r\n    ConnEnd dstPt257(Point(351, 909), 15);\r\n    connRef257->setDestEndpoint(dstPt257);\r\n    connRef257->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef258 = new ConnRef(router, 258);\r\n    ConnEnd srcPt258(Point(460, 890), 15);\r\n    connRef258->setSourceEndpoint(srcPt258);\r\n    ConnEnd dstPt258(Point(460, 940), 15);\r\n    connRef258->setDestEndpoint(dstPt258);\r\n    connRef258->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef259 = new ConnRef(router, 259);\r\n    ConnEnd srcPt259(Point(412, 990), 15);\r\n    connRef259->setSourceEndpoint(srcPt259);\r\n    ConnEnd dstPt259(Point(412, 940), 15);\r\n    connRef259->setDestEndpoint(dstPt259);\r\n    connRef259->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef260 = new ConnRef(router, 260);\r\n    ConnEnd srcPt260(Point(342, 871), 15);\r\n    connRef260->setSourceEndpoint(srcPt260);\r\n    ConnEnd dstPt260(Point(404, 871), 15);\r\n    connRef260->setDestEndpoint(dstPt260);\r\n    connRef260->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef261 = new ConnRef(router, 261);\r\n    ConnEnd srcPt261(Point(466, 850), 15);\r\n    connRef261->setSourceEndpoint(srcPt261);\r\n    ConnEnd dstPt261(Point(404, 850), 15);\r\n    connRef261->setDestEndpoint(dstPt261);\r\n    connRef261->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef262 = new ConnRef(router, 262);\r\n    ConnEnd srcPt262(Point(230, 862), 15);\r\n    connRef262->setSourceEndpoint(srcPt262);\r\n    ConnEnd dstPt262(Point(292, 862), 15);\r\n    connRef262->setDestEndpoint(dstPt262);\r\n    connRef262->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef263 = new ConnRef(router, 263);\r\n    ConnEnd srcPt263(Point(183, 812), 15);\r\n    connRef263->setSourceEndpoint(srcPt263);\r\n    ConnEnd dstPt263(Point(183, 862), 15);\r\n    connRef263->setDestEndpoint(dstPt263);\r\n    connRef263->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef264 = new ConnRef(router, 264);\r\n    ConnEnd srcPt264(Point(531, 811), 15);\r\n    connRef264->setSourceEndpoint(srcPt264);\r\n    ConnEnd dstPt264(Point(531, 861), 15);\r\n    connRef264->setDestEndpoint(dstPt264);\r\n    connRef264->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef265 = new ConnRef(router, 265);\r\n    ConnEnd srcPt265(Point(518, 767), 15);\r\n    connRef265->setSourceEndpoint(srcPt265);\r\n    ConnEnd dstPt265(Point(456, 767), 15);\r\n    connRef265->setDestEndpoint(dstPt265);\r\n    connRef265->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef266 = new ConnRef(router, 266);\r\n    ConnEnd srcPt266(Point(394, 698), 15);\r\n    connRef266->setSourceEndpoint(srcPt266);\r\n    ConnEnd dstPt266(Point(456, 698), 15);\r\n    connRef266->setDestEndpoint(dstPt266);\r\n    connRef266->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef267 = new ConnRef(router, 267);\r\n    ConnEnd srcPt267(Point(395, 626), 15);\r\n    connRef267->setSourceEndpoint(srcPt267);\r\n    ConnEnd dstPt267(Point(457, 626), 15);\r\n    connRef267->setDestEndpoint(dstPt267);\r\n    connRef267->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef268 = new ConnRef(router, 268);\r\n    ConnEnd srcPt268(Point(369, 481), 15);\r\n    connRef268->setSourceEndpoint(srcPt268);\r\n    ConnEnd dstPt268(Point(431, 481), 15);\r\n    connRef268->setDestEndpoint(dstPt268);\r\n    connRef268->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef269 = new ConnRef(router, 269);\r\n    ConnEnd srcPt269(Point(376, 397), 15);\r\n    connRef269->setSourceEndpoint(srcPt269);\r\n    ConnEnd dstPt269(Point(376, 447), 15);\r\n    connRef269->setDestEndpoint(dstPt269);\r\n    connRef269->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef270 = new ConnRef(router, 270);\r\n    ConnEnd srcPt270(Point(518, 401), 15);\r\n    connRef270->setSourceEndpoint(srcPt270);\r\n    ConnEnd dstPt270(Point(456, 401), 15);\r\n    connRef270->setDestEndpoint(dstPt270);\r\n    connRef270->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef271 = new ConnRef(router, 271);\r\n    ConnEnd srcPt271(Point(518, 335), 15);\r\n    connRef271->setSourceEndpoint(srcPt271);\r\n    ConnEnd dstPt271(Point(456, 335), 15);\r\n    connRef271->setDestEndpoint(dstPt271);\r\n    connRef271->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef272 = new ConnRef(router, 272);\r\n    ConnEnd srcPt272(Point(403, 385), 15);\r\n    connRef272->setSourceEndpoint(srcPt272);\r\n    ConnEnd dstPt272(Point(403, 335), 15);\r\n    connRef272->setDestEndpoint(dstPt272);\r\n    connRef272->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef273 = new ConnRef(router, 273);\r\n    ConnEnd srcPt273(Point(525, 142), 15);\r\n    connRef273->setSourceEndpoint(srcPt273);\r\n    ConnEnd dstPt273(Point(525, 192), 15);\r\n    connRef273->setDestEndpoint(dstPt273);\r\n    connRef273->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef274 = new ConnRef(router, 274);\r\n    ConnEnd srcPt274(Point(518, 265), 15);\r\n    connRef274->setSourceEndpoint(srcPt274);\r\n    ConnEnd dstPt274(Point(456, 265), 15);\r\n    connRef274->setDestEndpoint(dstPt274);\r\n    connRef274->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef275 = new ConnRef(router, 275);\r\n    ConnEnd srcPt275(Point(394, 170), 15);\r\n    connRef275->setSourceEndpoint(srcPt275);\r\n    ConnEnd dstPt275(Point(456, 170), 15);\r\n    connRef275->setDestEndpoint(dstPt275);\r\n    connRef275->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef276 = new ConnRef(router, 276);\r\n    ConnEnd srcPt276(Point(376, 249), 15);\r\n    connRef276->setSourceEndpoint(srcPt276);\r\n    ConnEnd dstPt276(Point(376, 299), 15);\r\n    connRef276->setDestEndpoint(dstPt276);\r\n    connRef276->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef277 = new ConnRef(router, 277);\r\n    ConnEnd srcPt277(Point(221, 230), 15);\r\n    connRef277->setSourceEndpoint(srcPt277);\r\n    ConnEnd dstPt277(Point(221, 280), 15);\r\n    connRef277->setDestEndpoint(dstPt277);\r\n    connRef277->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef278 = new ConnRef(router, 278);\r\n    ConnEnd srcPt278(Point(221, 249), 15);\r\n    connRef278->setSourceEndpoint(srcPt278);\r\n    ConnEnd dstPt278(Point(221, 299), 15);\r\n    connRef278->setDestEndpoint(dstPt278);\r\n    connRef278->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef279 = new ConnRef(router, 279);\r\n    ConnEnd srcPt279(Point(392, 266), 15);\r\n    connRef279->setSourceEndpoint(srcPt279);\r\n    ConnEnd dstPt279(Point(330, 266), 15);\r\n    connRef279->setDestEndpoint(dstPt279);\r\n    connRef279->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef280 = new ConnRef(router, 280);\r\n    ConnEnd srcPt280(Point(218, 266), 15);\r\n    connRef280->setSourceEndpoint(srcPt280);\r\n    ConnEnd dstPt280(Point(280, 266), 15);\r\n    connRef280->setDestEndpoint(dstPt280);\r\n    connRef280->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef281 = new ConnRef(router, 281);\r\n    ConnEnd srcPt281(Point(92, 261), 15);\r\n    connRef281->setSourceEndpoint(srcPt281);\r\n    ConnEnd dstPt281(Point(154, 261), 15);\r\n    connRef281->setDestEndpoint(dstPt281);\r\n    connRef281->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef282 = new ConnRef(router, 282);\r\n    ConnEnd srcPt282(Point(221, 174), 15);\r\n    connRef282->setSourceEndpoint(srcPt282);\r\n    ConnEnd dstPt282(Point(221, 224), 15);\r\n    connRef282->setDestEndpoint(dstPt282);\r\n    connRef282->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef283 = new ConnRef(router, 283);\r\n    ConnEnd srcPt283(Point(221, 155), 15);\r\n    connRef283->setSourceEndpoint(srcPt283);\r\n    ConnEnd dstPt283(Point(221, 205), 15);\r\n    connRef283->setDestEndpoint(dstPt283);\r\n    connRef283->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef284 = new ConnRef(router, 284);\r\n    ConnEnd srcPt284(Point(289, 233), 15);\r\n    connRef284->setSourceEndpoint(srcPt284);\r\n    ConnEnd dstPt284(Point(289, 183), 15);\r\n    connRef284->setDestEndpoint(dstPt284);\r\n    connRef284->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef285 = new ConnRef(router, 285);\r\n    ConnEnd srcPt285(Point(316, 101), 15);\r\n    connRef285->setSourceEndpoint(srcPt285);\r\n    ConnEnd dstPt285(Point(316, 151), 15);\r\n    connRef285->setDestEndpoint(dstPt285);\r\n    connRef285->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef286 = new ConnRef(router, 286);\r\n    ConnEnd srcPt286(Point(316, 180), 15);\r\n    connRef286->setSourceEndpoint(srcPt286);\r\n    ConnEnd dstPt286(Point(316, 130), 15);\r\n    connRef286->setDestEndpoint(dstPt286);\r\n    connRef286->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef287 = new ConnRef(router, 287);\r\n    ConnEnd srcPt287(Point(235, 855), 15);\r\n    connRef287->setSourceEndpoint(srcPt287);\r\n    ConnEnd dstPt287(Point(235, 905), 15);\r\n    connRef287->setDestEndpoint(dstPt287);\r\n    connRef287->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef288 = new ConnRef(router, 288);\r\n    ConnEnd srcPt288(Point(394, 553), 15);\r\n    connRef288->setSourceEndpoint(srcPt288);\r\n    ConnEnd dstPt288(Point(456, 553), 15);\r\n    connRef288->setDestEndpoint(dstPt288);\r\n    connRef288->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef289 = new ConnRef(router, 289);\r\n    ConnEnd srcPt289(Point(221, 193), 15);\r\n    connRef289->setSourceEndpoint(srcPt289);\r\n    ConnEnd dstPt289(Point(221, 243), 15);\r\n    connRef289->setDestEndpoint(dstPt289);\r\n    connRef289->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef290 = new ConnRef(router, 290);\r\n    ConnEnd srcPt290(Point(221, 268), 15);\r\n    connRef290->setSourceEndpoint(srcPt290);\r\n    ConnEnd dstPt290(Point(221, 318), 15);\r\n    connRef290->setDestEndpoint(dstPt290);\r\n    connRef290->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef291 = new ConnRef(router, 291);\r\n    ConnEnd srcPt291(Point(154, 307), 15);\r\n    connRef291->setSourceEndpoint(srcPt291);\r\n    ConnEnd dstPt291(Point(154, 357), 15);\r\n    connRef291->setDestEndpoint(dstPt291);\r\n    connRef291->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef292 = new ConnRef(router, 292);\r\n    ConnEnd srcPt292(Point(154, 433), 15);\r\n    connRef292->setSourceEndpoint(srcPt292);\r\n    ConnEnd dstPt292(Point(154, 383), 15);\r\n    connRef292->setDestEndpoint(dstPt292);\r\n    connRef292->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef293 = new ConnRef(router, 293);\r\n    ConnEnd srcPt293(Point(264, 306), 15);\r\n    connRef293->setSourceEndpoint(srcPt293);\r\n    ConnEnd dstPt293(Point(264, 356), 15);\r\n    connRef293->setDestEndpoint(dstPt293);\r\n    connRef293->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef294 = new ConnRef(router, 294);\r\n    ConnEnd srcPt294(Point(264, 432), 15);\r\n    connRef294->setSourceEndpoint(srcPt294);\r\n    ConnEnd dstPt294(Point(264, 382), 15);\r\n    connRef294->setDestEndpoint(dstPt294);\r\n    connRef294->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef295 = new ConnRef(router, 295);\r\n    ConnEnd srcPt295(Point(177, 673), 15);\r\n    connRef295->setSourceEndpoint(srcPt295);\r\n    ConnEnd dstPt295(Point(177, 723), 15);\r\n    connRef295->setDestEndpoint(dstPt295);\r\n    connRef295->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef296 = new ConnRef(router, 296);\r\n    ConnEnd srcPt296(Point(412, 911), 15);\r\n    connRef296->setSourceEndpoint(srcPt296);\r\n    ConnEnd dstPt296(Point(412, 961), 15);\r\n    connRef296->setDestEndpoint(dstPt296);\r\n    connRef296->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef297 = new ConnRef(router, 297);\r\n    ConnEnd srcPt297(Point(177, 694), 15);\r\n    connRef297->setSourceEndpoint(srcPt297);\r\n    ConnEnd dstPt297(Point(177, 744), 15);\r\n    connRef297->setDestEndpoint(dstPt297);\r\n    connRef297->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef298 = new ConnRef(router, 298);\r\n    ConnEnd srcPt298(Point(460, 1011), 15);\r\n    connRef298->setSourceEndpoint(srcPt298);\r\n    ConnEnd dstPt298(Point(460, 961), 15);\r\n    connRef298->setDestEndpoint(dstPt298);\r\n    connRef298->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef299 = new ConnRef(router, 299);\r\n    ConnEnd srcPt299(Point(543, 481), 15);\r\n    connRef299->setSourceEndpoint(srcPt299);\r\n    ConnEnd dstPt299(Point(481, 481), 15);\r\n    connRef299->setDestEndpoint(dstPt299);\r\n    connRef299->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef300 = new ConnRef(router, 300);\r\n    ConnEnd srcPt300(Point(555, 472), 15);\r\n    connRef300->setSourceEndpoint(srcPt300);\r\n    ConnEnd dstPt300(Point(555, 522), 15);\r\n    connRef300->setDestEndpoint(dstPt300);\r\n    connRef300->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef301 = new ConnRef(router, 301);\r\n    ConnEnd srcPt301(Point(528, 591), 15);\r\n    connRef301->setSourceEndpoint(srcPt301);\r\n    ConnEnd dstPt301(Point(528, 541), 15);\r\n    connRef301->setDestEndpoint(dstPt301);\r\n    connRef301->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef302 = new ConnRef(router, 302);\r\n    ConnEnd srcPt302(Point(262, 742), 15);\r\n    connRef302->setSourceEndpoint(srcPt302);\r\n    ConnEnd dstPt302(Point(262, 792), 15);\r\n    connRef302->setDestEndpoint(dstPt302);\r\n    connRef302->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef303 = new ConnRef(router, 303);\r\n    ConnEnd srcPt303(Point(567, 522), 15);\r\n    connRef303->setSourceEndpoint(srcPt303);\r\n    ConnEnd dstPt303(Point(505, 522), 15);\r\n    connRef303->setDestEndpoint(dstPt303);\r\n    connRef303->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef304 = new ConnRef(router, 304);\r\n    ConnEnd srcPt304(Point(410, 633), 15);\r\n    connRef304->setSourceEndpoint(srcPt304);\r\n    ConnEnd dstPt304(Point(410, 583), 15);\r\n    connRef304->setDestEndpoint(dstPt304);\r\n    connRef304->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef305 = new ConnRef(router, 305);\r\n    ConnEnd srcPt305(Point(411, 469), 15);\r\n    connRef305->setSourceEndpoint(srcPt305);\r\n    ConnEnd dstPt305(Point(411, 519), 15);\r\n    connRef305->setDestEndpoint(dstPt305);\r\n    connRef305->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef306 = new ConnRef(router, 306);\r\n    ConnEnd srcPt306(Point(456, 861), 15);\r\n    connRef306->setSourceEndpoint(srcPt306);\r\n    ConnEnd dstPt306(Point(404, 871), 15);\r\n    connRef306->setDestEndpoint(dstPt306);\r\n    connRef306->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef307 = new ConnRef(router, 307);\r\n    ConnEnd srcPt307(Point(456, 861), 15);\r\n    connRef307->setSourceEndpoint(srcPt307);\r\n    ConnEnd dstPt307(Point(404, 850), 15);\r\n    connRef307->setDestEndpoint(dstPt307);\r\n    connRef307->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef308 = new ConnRef(router, 308);\r\n    ConnEnd srcPt308(Point(287, 904), 15);\r\n    connRef308->setSourceEndpoint(srcPt308);\r\n    ConnEnd dstPt308(Point(292, 862), 15);\r\n    connRef308->setDestEndpoint(dstPt308);\r\n    connRef308->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef309 = new ConnRef(router, 309);\r\n    ConnEnd srcPt309(Point(351, 861), 15);\r\n    connRef309->setSourceEndpoint(srcPt309);\r\n    ConnEnd dstPt309(Point(292, 862), 15);\r\n    connRef309->setDestEndpoint(dstPt309);\r\n    connRef309->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef310 = new ConnRef(router, 310);\r\n    ConnEnd srcPt310(Point(456, 734), 15);\r\n    connRef310->setSourceEndpoint(srcPt310);\r\n    ConnEnd dstPt310(Point(456, 767), 15);\r\n    connRef310->setDestEndpoint(dstPt310);\r\n    connRef310->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef311 = new ConnRef(router, 311);\r\n    ConnEnd srcPt311(Point(456, 301), 15);\r\n    connRef311->setSourceEndpoint(srcPt311);\r\n    ConnEnd dstPt311(Point(456, 335), 15);\r\n    connRef311->setDestEndpoint(dstPt311);\r\n    connRef311->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef312 = new ConnRef(router, 312);\r\n    ConnEnd srcPt312(Point(154, 226), 15);\r\n    connRef312->setSourceEndpoint(srcPt312);\r\n    ConnEnd dstPt312(Point(221, 224), 15);\r\n    connRef312->setDestEndpoint(dstPt312);\r\n    connRef312->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef313 = new ConnRef(router, 313);\r\n    ConnEnd srcPt313(Point(154, 226), 15);\r\n    connRef313->setSourceEndpoint(srcPt313);\r\n    ConnEnd dstPt313(Point(221, 205), 15);\r\n    connRef313->setDestEndpoint(dstPt313);\r\n    connRef313->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef314 = new ConnRef(router, 314);\r\n    ConnEnd srcPt314(Point(456, 141), 15);\r\n    connRef314->setSourceEndpoint(srcPt314);\r\n    ConnEnd dstPt314(Point(316, 151), 15);\r\n    connRef314->setDestEndpoint(dstPt314);\r\n    connRef314->setRoutingType((ConnType)2);\r\n\r\n    ConnRef *connRef315 = new ConnRef(router, 315);\r\n    ConnEnd srcPt315(Point(456, 141), 15);\r\n    connRef315->setSourceEndpoint(srcPt315);\r\n    ConnEnd dstPt315(Point(316, 130), 15);\r\n    connRef315->setDestEndpoint(dstPt315);\r\n    connRef315->setRoutingType((ConnType)2);\r\n\r\n    router->processTransaction();\r\n    router->outputDiagram(\"output/vertlineassertion\");\r\n    delete router;\r\n    return 0;\r\n};\r\n"
  },
  {
    "path": "cola/libavoid/timer.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libavoid - Fast, Incremental, Object-avoiding Line Router\n *\n * Copyright (C) 2004-2013  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * Licensees holding a valid commercial license may use this file in\n * accordance with the commercial license agreement provided with the \n * library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  \n *\n * Author(s):  Michael Wybrow\n*/\n\n\n#include <cstdio>\n#include <cstdlib>\n#include <climits>\n\n#include \"libavoid/timer.h\"\n#include \"libavoid/debug.h\"\n#include \"libavoid/assertions.h\"\n\nnamespace Avoid {\n\n#ifdef AVOID_PROFILE\n\nTimer::Timer()\n{\n    reset();\n}\n\n\nvoid Timer::reset(void)\n{\n    for (size_t i = 0; i < tmCount; ++i)\n    {\n        m_total_time[i] =  0;\n        m_tally[i] = 0;\n        m_max_time[i] = 0;\n        for (size_t j = 0; j < TIMER_VARIABLES_COUNT; ++j)\n        {\n            m_variables[i][j] = 0;\n        }\n    }\n    m_is_running = false;\n    m_type = m_last_type = tmCount;\n}\n\n\nvoid Timer::initialise(const TimerIndex t)\n{\n    COLA_ASSERT(t != tmCount);\n    COLA_ASSERT(m_type == tmCount);\n    \n    m_type = t;\n}\n\nvoid Timer::start(void)\n{\n    COLA_ASSERT(!m_is_running);\n    m_start_time[m_type] = clock();  // CPU time\n    m_is_running = true;\n}\n\n\nvoid Timer::stop(void)\n{\n    COLA_ASSERT(m_is_running);\n    clock_t stopTime = clock();      // CPU time\n    m_is_running = false;\n\n    bigclock_t timeDiff;\n    if (stopTime < m_start_time[m_type])\n    {\n        // Uh-oh, the clock value has wrapped around.\n        //\n        bigclock_t realStopTime = ((bigclock_t) stopTime) + ULONG_MAX + 1;\n        timeDiff = realStopTime - m_start_time[m_type];\n    }\n    else\n    {\n        timeDiff = stopTime - m_start_time[m_type];\n    }\n    \n    COLA_ASSERT(timeDiff < LONG_MAX);\n\n    m_total_time[m_type] += timeDiff;\n    m_tally[m_type]++;\n    if (((clock_t) timeDiff) > m_max_time[m_type])\n    {\n        m_max_time[m_type] = (clock_t) timeDiff;\n    }\n    m_last_type = m_type;\n\n    m_type = tmCount;\n}\n\nstatic const char* timerNames[] =\n{\n    \"Adds\",\n    \"Dels\",\n    \"Movs\",\n    \"Pths\",\n    \"OrthogGraph\",\n    \"OrthogRoute\",\n    \"OrthogCentre\",\n    \"OrthogNudge\",\n    \"HyperedgeForest\",\n    \"HyperedgeMTST\",\n    \"HyperedgeImprove\",\n    \"HyperedgeAlt\"\n};\n\n\nvoid Timer::printAll(FILE *fp)\n{\n    for (unsigned int i = 0; i < tmCount; i++)\n    {\n        fprintf(fp, \"%s:  \", timerNames[i]);\n        print((TimerIndex) i, fp);\n    }\n    fprintf(fp, \"\\n\");\n}\n\n#define toMsec(tot) ((bigclock_t) ((tot) / (((double) CLOCKS_PER_SEC) / 1000)))\n#define toAvg(tot, cnt) ((((cnt) > 0) ? ((long double) (tot)) / (cnt) : 0))\n\nvoid Timer::printHyperedgePaper(FILE *fp)\n{\n    fprintf(fp, \"%5lld & %5lld & %5lld & %5lld\\n\\n\",\n        toMsec(m_total_time[tmOrthogGraph]),\n        toMsec(m_total_time[tmHyperedgeForest] + m_total_time[tmHyperedgeMTST]),\n        toMsec(m_total_time[tmHyperedgeAlt]),\n        toMsec(m_total_time[tmHyperedgeImprove]));\n}\n\nvoid Timer::print(const TimerIndex t, FILE *fp)\n{\n    bigclock_t avg = toMsec(toAvg(m_total_time[t], m_tally[t]));\n    clock_t max = toMsec(m_max_time[t]); \n    fprintf(fp, \"%lld %d %lld %ld\",\n            toMsec(m_total_time[t]), m_tally[t], avg, max);\n    \n    for (size_t j = 0; j < TIMER_VARIABLES_COUNT; ++j)\n    {\n        if (m_variables[t][j] > 0)\n        {\n            fprintf(fp, \", %lu: %u\", j, m_variables[t][j]);\n        }\n    }\n    fprintf(fp, \"\\n\");\n}\n\nvoid Timer::varIncrement(size_t i, unsigned int val)\n{\n    COLA_ASSERT(i < TIMER_VARIABLES_COUNT);\n    \n    if (m_is_running)\n    {\n        m_variables[m_type][i] += val;\n    }\n}\n\nvoid Timer::varMax(size_t i, unsigned int val)\n{\n    COLA_ASSERT(i < TIMER_VARIABLES_COUNT);\n\n    if (m_is_running)\n    {\n        m_variables[m_type][i] = std::max(m_variables[m_type][i], val);\n    }\n}\n\n#endif\n\n}\n\n"
  },
  {
    "path": "cola/libavoid/timer.h",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libavoid - Fast, Incremental, Object-avoiding Line Router\n *\n * Copyright (C) 2004-2013  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * Licensees holding a valid commercial license may use this file in\n * accordance with the commercial license agreement provided with the \n * library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  \n *\n * Author(s):  Michael Wybrow\n*/\n\n\n#ifndef AVOID_TIMER_H\n#define AVOID_TIMER_H\n\n#include <ctime>\n\nnamespace Avoid {\n\n//#define AVOID_PROFILE\n\n#ifndef AVOID_PROFILE\n\n  #define TIMER_START(r, t) do {} while(0)\n  #define TIMER_STOP(r) do {} while(0)\n  #define TIMER_VAR_ADD(r, n, v) do {} while(0)\n  #define TIMER_VAR_MAX(r, n, v) do {} while(0)\n\n#else\n   \n  #define TIMER_START(r, t) r->timers.initialise(t); r->timers.start()\n  #define TIMER_STOP(r) r->timers.stop()\n  #define TIMER_VAR_ADD(r, n, v) r->timers.varIncrement(n, v);\n  #define TIMER_VAR_MAX(r, n, v) r->timers.varMax(n, v)\n\ntypedef unsigned long long int bigclock_t;\n\nenum TimerIndex \n{\n    tmAdd,\n    tmDel,\n    tmMov,\n    tmPth,\n    tmOrthogGraph,\n    tmOrthogRoute,\n    tmOrthogCentre,\n    tmOrthogNudge,\n    tmHyperedgeForest,\n    tmHyperedgeMTST,\n    tmHyperedgeImprove,\n    tmHyperedgeAlt,\n    tmCount\n};\n\nstatic const bool timerStart = true;\nstatic const bool timerDelay = false;\n\nstatic const size_t TIMER_VARIABLES_COUNT = 2;\n\nclass Timer\n{\n    public:\n        Timer();\n        void initialise(const TimerIndex t);\n        void start(void);\n        void stop(void);\n        void reset(void);\n        void varIncrement(size_t i, unsigned int val);\n        void varMax(size_t i, unsigned int val);\n\n        void print(TimerIndex, FILE *fp);\n        void printAll(FILE *fp);\n        void printHyperedgePaper(FILE *fp);\n\n    private:\n        clock_t m_start_time[tmCount];\n        bigclock_t m_total_time[tmCount];\n        int m_tally[tmCount];\n        clock_t m_max_time[tmCount];\n        unsigned int m_variables[tmCount][TIMER_VARIABLES_COUNT];\n\n        bool m_is_running;\n        TimerIndex m_type;\n        TimerIndex m_last_type;\n};\n\n#endif\n\n}\n\n#endif\n"
  },
  {
    "path": "cola/libavoid/vertices.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libavoid - Fast, Incremental, Object-avoiding Line Router\n *\n * Copyright (C) 2004-2009  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * Licensees holding a valid commercial license may use this file in\n * accordance with the commercial license agreement provided with the \n * library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  \n *\n * Author(s):  Michael Wybrow\n*/\n\n\n#include <iostream>\n#include <cstdlib>\n\n#include \"libavoid/vertices.h\"\n#include \"libavoid/geometry.h\"\n#include \"libavoid/graph.h\"  // For alertConns\n#include \"libavoid/debug.h\"\n#include \"libavoid/router.h\"\n#include \"libavoid/assertions.h\"\n#include \"libavoid/connend.h\"\n\nusing std::ostream;\n\n\nnamespace Avoid {\n\n\nVertID::VertID()\n{\n}\n\n\nVertID::VertID(unsigned int id, unsigned short n, VertIDProps p)\n    : objID(id),\n      vn(n),\n      props(p)\n{\n}\n\n\nVertID::VertID(const VertID& other)\n    : objID(other.objID),\n      vn(other.vn),\n      props(other.props)\n{\n}\n\n\nVertID& VertID::operator= (const VertID& rhs)\n{\n    // Gracefully handle self assignment\n    //if (this == &rhs) return *this;\n\n    objID = rhs.objID;\n    vn = rhs.vn;\n    props = rhs.props;\n\n    return *this;\n}\n\n\nbool VertID::operator==(const VertID& rhs) const\n{\n    if ((objID != rhs.objID) || (vn != rhs.vn))\n    {\n        return false;\n    }\n    return true;\n}\n\n\nbool VertID::operator!=(const VertID& rhs) const\n{\n    if ((objID != rhs.objID) || (vn != rhs.vn))\n    {\n        return true;\n    }\n    return false;\n}\n\n\nbool VertID::operator<(const VertID& rhs) const\n{\n    if ((objID < rhs.objID) ||\n            ((objID == rhs.objID) && (vn < rhs.vn)))\n    {\n        return true;\n    }\n    return false;\n}\n\n\nVertID VertID::operator+(const int& rhs) const\n{\n    return VertID(objID, vn + rhs, props);\n}\n\n\nVertID VertID::operator-(const int& rhs) const\n{\n    return VertID(objID, vn - rhs, props);\n}\n\n\nVertID& VertID::operator++(int)\n{\n    vn += 1;\n    return *this;\n}\n\n\nvoid VertID::print(FILE *file) const\n{\n    fprintf(file, \"[%u,%d, p=%u]\", objID, vn, (unsigned int) props);\n}\n\nvoid VertID::db_print(void) const\n{\n    db_printf(\"[%u,%d, p=%u]\", objID, vn, (unsigned int) props);\n}\n\n\nconst unsigned short VertID::src = 1;\nconst unsigned short VertID::tar = 2;\n\n// Property flags:\nconst unsigned short VertID::PROP_ConnPoint      = 1;\nconst unsigned short VertID::PROP_OrthShapeEdge  = 2;\nconst unsigned short VertID::PROP_ConnectionPin  = 4;\nconst unsigned short VertID::PROP_ConnCheckpoint = 8;\nconst unsigned short VertID::PROP_DummyPinHelper = 16;\n\n\nostream& operator<<(ostream& os, const VertID& vID)\n{\n    return os << '[' << vID.objID << ',' << vID.vn << ']';\n}\n\n\n\nVertInf::VertInf(Router *router, const VertID& vid, const Point& vpoint, \n        const bool addToRouter)\n    : _router(router),\n      id(vid),\n      point(vpoint),\n      lstPrev(nullptr),\n      lstNext(nullptr),\n      shPrev(nullptr),\n      shNext(nullptr),\n      visListSize(0),\n      orthogVisListSize(0),\n      invisListSize(0),\n      pathNext(nullptr),\n      m_orthogonalPartner(nullptr),\n      m_treeRoot(nullptr),\n      visDirections(ConnDirNone),\n      orthogVisPropFlags(0)\n{\n    point.id = vid.objID;\n    point.vn = vid.vn;\n\n    if (addToRouter)\n    {\n        _router->vertices.addVertex(this);\n    }\n}\n\n\nVertInf::~VertInf()\n{\n    COLA_ASSERT(orphaned());\n}\n\n\nEdgeInf *VertInf::hasNeighbour(VertInf *target, bool orthogonal) const\n{\n    const EdgeInfList& visEdgeList = (orthogonal) ? orthogVisList : visList;\n    EdgeInfList::const_iterator finish = visEdgeList.end();\n    for (EdgeInfList::const_iterator edge = visEdgeList.begin(); edge != finish; ++edge)\n    {\n        if ((*edge)->otherVert(this) == target)\n        {\n            return *edge;\n        }\n    }\n    return nullptr;\n}\n\nvoid VertInf::Reset(const VertID& vid, const Point& vpoint)\n{\n    id = vid;\n    point = vpoint;\n    point.id = id.objID;\n    point.vn = id.vn;\n}\n\n\nvoid VertInf::Reset(const Point& vpoint)\n{\n    point = vpoint;\n    point.id = id.objID;\n    point.vn = id.vn;\n}\n\n\n// Returns true if this vertex is not involved in any (in)visibility graphs.\nbool VertInf::orphaned(void)\n{\n    return (visList.empty() && invisList.empty() && orthogVisList.empty());\n}\n\n\nvoid VertInf::removeFromGraph(const bool isConnVert)\n{\n    if (isConnVert)\n    {\n        COLA_ASSERT(id.isConnPt());\n    }\n\n    // For each vertex.\n    EdgeInfList::const_iterator finish = visList.end();\n    EdgeInfList::const_iterator edge;\n    while ((edge = visList.begin()) != finish)\n    {\n        // Remove each visibility edge\n        (*edge)->alertConns();\n        delete (*edge);\n    }\n\n    finish = orthogVisList.end();\n    while ((edge = orthogVisList.begin()) != finish)\n    {\n        // Remove each orthogonal visibility edge.\n        (*edge)->alertConns();\n        delete (*edge);\n    }\n\n    finish = invisList.end();\n    while ((edge = invisList.begin()) != finish)\n    {\n        // Remove each invisibility edge\n        delete (*edge);\n    }\n}\n\n\nvoid VertInf::orphan(void)\n{\n    // For each vertex.\n    EdgeInfList::const_iterator finish = visList.end();\n    EdgeInfList::const_iterator edge;\n    while ((edge = visList.begin()) != finish)\n    {\n        // Remove each visibility edge\n        (*edge)->makeInactive();\n    }\n\n    finish = orthogVisList.end();\n    while ((edge = orthogVisList.begin()) != finish)\n    {\n        // Remove each orthogonal visibility edge.\n        (*edge)->makeInactive();\n    }\n\n    finish = invisList.end();\n    while ((edge = invisList.begin()) != finish)\n    {\n        // Remove each invisibility edge\n        (*edge)->makeInactive();\n    }\n}\n\n// Returns the direction of this vertex relative to the other specified vertex.\n//\nConnDirFlags VertInf::directionFrom(const VertInf *other) const\n{\n    double epsilon = 0.000001;\n    Point thisPoint = point;\n    Point otherPoint = other->point;\n    Point diff = thisPoint - otherPoint;\n\n    ConnDirFlags directions = ConnDirNone;\n    if (diff.y > epsilon)\n    {\n        directions |= ConnDirUp;\n    }\n    if (diff.y < -epsilon)\n    {\n        directions |= ConnDirDown;\n    }\n    if (diff.x > epsilon)\n    {\n        directions |= ConnDirRight;\n    }\n    if (diff.x < -epsilon)\n    {\n        directions |= ConnDirLeft;\n    }\n    return directions;\n}\n\n// Given a set of directions, mark visibility edges in all other directions\n// as being invalid so they get ignored during the search.\n//\nvoid VertInf::setVisibleDirections(const ConnDirFlags directions)\n{\n    for (EdgeInfList::const_iterator edge = visList.begin();\n            edge != visList.end(); ++edge)\n    {\n        if (directions == ConnDirAll)\n        {\n            (*edge)->setDisabled(false);\n        }\n        else\n        {\n            VertInf *otherVert = (*edge)->otherVert(this);\n            ConnDirFlags direction = otherVert->directionFrom(this);\n            bool visible = (direction & directions);\n            (*edge)->setDisabled(!visible);\n        }\n    }\n\n    for (EdgeInfList::const_iterator edge = orthogVisList.begin();\n            edge != orthogVisList.end(); ++edge)\n    {\n        if (directions == ConnDirAll)\n        {\n            (*edge)->setDisabled(false);\n        }\n        else\n        {\n            VertInf *otherVert = (*edge)->otherVert(this);\n            ConnDirFlags direction = otherVert->directionFrom(this);\n            bool visible = (direction & directions);\n            (*edge)->setDisabled(!visible);\n        }\n    }\n}\n\n// Number of points in path from end back to start, or zero if no path exists.\n//\nunsigned int VertInf::pathLeadsBackTo(const VertInf *start) const\n{\n    unsigned int pathlen = 1;\n    for (const VertInf *i = this; i != start; i = i->pathNext)\n    {\n        if ((pathlen > 1) && (i == this))\n        {\n            // We have a circular path, so path not found.\n            return 0;\n        }\n\n        pathlen++;\n        if (i == nullptr)\n        {\n            // Path not found.\n            return 0;\n        }\n\n        // Check we don't have an apparent infinite connector path.\n        COLA_ASSERT(pathlen < 20000);\n    }\n    return pathlen;\n}\n\nVertInf **VertInf::makeTreeRootPointer(VertInf *root)\n{\n    m_treeRoot = (VertInf **) malloc(sizeof(VertInf *));\n    *m_treeRoot = root;\n    return m_treeRoot;\n}\n\nVertInf *VertInf::treeRoot(void) const\n{\n    return (m_treeRoot) ? *m_treeRoot : nullptr;\n}\n\nVertInf **VertInf::treeRootPointer(void) const\n{\n    return m_treeRoot;\n}\n\nvoid VertInf::clearTreeRootPointer(void)\n{\n    m_treeRoot = nullptr;\n}\n\nvoid VertInf::setTreeRootPointer(VertInf **pointer)\n{\n    m_treeRoot = pointer;\n}\n        \nvoid VertInf::setSPTFRoot(VertInf *root)\n{\n    // Use the m_treeRoot instance var, but as just a normal VertInf pointer.\n    m_treeRoot = (VertInf **) root;\n}\n\n\nVertInf *VertInf::sptfRoot(void) const\n{\n    // Use the m_treeRoot instance var, but as just a normal VertInf pointer.\n    return (VertInf *) m_treeRoot;\n}\n\n\nbool directVis(VertInf *src, VertInf *dst)\n{\n    ShapeSet ss = ShapeSet();\n\n    Point& p = src->point;\n    Point& q = dst->point;\n\n    VertID& pID = src->id;\n    VertID& qID = dst->id;\n\n    // We better be part of the same instance of libavoid.\n    Router *router = src->_router;\n    COLA_ASSERT(router == dst->_router);\n\n    ContainsMap& contains = router->contains;\n    if (pID.isConnPt())\n    {\n        ss.insert(contains[pID].begin(), contains[pID].end());\n    }\n    if (qID.isConnPt())\n    {\n        ss.insert(contains[qID].begin(), contains[qID].end());\n    }\n\n    // The \"beginning\" should be the first shape vertex, rather\n    // than an endpoint, which are also stored in \"vertices\".\n    VertInf *endVert = router->vertices.end();\n    for (VertInf *k = router->vertices.shapesBegin(); k != endVert;\n            k = k->lstNext)\n    {\n        if ((ss.find(k->id.objID) == ss.end()))\n        {\n            if (segmentIntersect(p, q, k->point, k->shNext->point))\n            {\n                return false;\n            }\n        }\n    }\n    return true;\n}\n\n\nVertInfList::VertInfList()\n    : _firstShapeVert(nullptr),\n      _firstConnVert(nullptr),\n      _lastShapeVert(nullptr),\n      _lastConnVert(nullptr),\n      _shapeVertices(0),\n      _connVertices(0)\n{\n}\n\n\n#define checkVertInfListConditions() \\\n        do { \\\n            COLA_ASSERT((!_firstConnVert && (_connVertices == 0)) || \\\n                    ((_firstConnVert->lstPrev == nullptr) && (_connVertices > 0))); \\\n            COLA_ASSERT((!_firstShapeVert && (_shapeVertices == 0)) || \\\n                    ((_firstShapeVert->lstPrev == nullptr) && (_shapeVertices > 0))); \\\n            COLA_ASSERT(!_lastShapeVert || (_lastShapeVert->lstNext == nullptr)); \\\n            COLA_ASSERT(!_lastConnVert || (_lastConnVert->lstNext == _firstShapeVert)); \\\n            COLA_ASSERT((!_firstConnVert && !_lastConnVert) || \\\n                    (_firstConnVert &&  _lastConnVert) ); \\\n            COLA_ASSERT((!_firstShapeVert && !_lastShapeVert) || \\\n                    (_firstShapeVert &&  _lastShapeVert) ); \\\n            COLA_ASSERT(!_firstShapeVert || !(_firstShapeVert->id.isConnPt())); \\\n            COLA_ASSERT(!_lastShapeVert || !(_lastShapeVert->id.isConnPt())); \\\n            COLA_ASSERT(!_firstConnVert || _firstConnVert->id.isConnPt()); \\\n            COLA_ASSERT(!_lastConnVert || _lastConnVert->id.isConnPt()); \\\n        } while(0)\n\n\nvoid VertInfList::addVertex(VertInf *vert)\n{\n    checkVertInfListConditions();\n    COLA_ASSERT(vert->lstPrev == nullptr);\n    COLA_ASSERT(vert->lstNext == nullptr);\n\n    if (vert->id.isConnPt())\n    {\n        // A Connector vertex\n        if (_firstConnVert)\n        {\n            // Join with previous front\n            vert->lstNext = _firstConnVert;\n            _firstConnVert->lstPrev = vert;\n\n            // Make front\n            _firstConnVert = vert;\n        }\n        else\n        {\n            // Make front and back\n            _firstConnVert = vert;\n            _lastConnVert = vert;\n\n            // Link to front of shapes list\n            vert->lstNext = _firstShapeVert;\n        }\n        _connVertices++;\n    }\n    else // if (vert->id.shape > 0)\n    {\n        // A Shape vertex\n        if (_lastShapeVert)\n        {\n            // Join with previous back\n            vert->lstPrev = _lastShapeVert;\n            _lastShapeVert->lstNext = vert;\n\n            // Make back\n            _lastShapeVert = vert;\n        }\n        else\n        {\n            // Make first and last\n            _firstShapeVert = vert;\n            _lastShapeVert = vert;\n\n            // Join with conns list\n            if (_lastConnVert)\n            {\n                COLA_ASSERT(_lastConnVert->lstNext == nullptr);\n\n                _lastConnVert->lstNext = vert;\n            }\n        }\n        _shapeVertices++;\n    }\n    checkVertInfListConditions();\n}\n\n\n// Removes a vertex from the list and returns a pointer to the vertex\n// following the removed one.\nVertInf *VertInfList::removeVertex(VertInf *vert)\n{\n    if (vert == nullptr)\n    {\n        return nullptr;\n    }\n    // Conditions for correct data structure\n    checkVertInfListConditions();\n    \n    VertInf *following = vert->lstNext;\n\n    if (vert->id.isConnPt())\n    {\n        // A Connector vertex\n        if (vert == _firstConnVert)\n        {\n\n            if (vert == _lastConnVert)\n            {\n                _firstConnVert = nullptr;\n                _lastConnVert = nullptr;\n            }\n            else\n            {\n                // Set new first\n                _firstConnVert = _firstConnVert->lstNext;\n\n                if (_firstConnVert)\n                {\n                    // Set previous\n                    _firstConnVert->lstPrev = nullptr;\n                }\n            }\n        }\n        else if (vert == _lastConnVert)\n        {\n            // Set new last\n            _lastConnVert = _lastConnVert->lstPrev;\n\n            // Make last point to shapes list\n            _lastConnVert->lstNext = _firstShapeVert;\n        }\n        else\n        {\n            vert->lstNext->lstPrev = vert->lstPrev;\n            vert->lstPrev->lstNext = vert->lstNext;\n        }\n        _connVertices--;\n    }\n    else // if (vert->id.shape > 0)\n    {\n        // A Shape vertex\n        if (vert == _lastShapeVert)\n        {\n            // Set new last\n            _lastShapeVert = _lastShapeVert->lstPrev;\n\n            if (vert == _firstShapeVert)\n            {\n                _firstShapeVert = nullptr;\n                if (_lastConnVert)\n                {\n                    _lastConnVert->lstNext = nullptr;\n                }\n            }\n\n            if (_lastShapeVert)\n            {\n                _lastShapeVert->lstNext = nullptr;\n            }\n        }\n        else if (vert == _firstShapeVert)\n        {\n            // Set new first\n            _firstShapeVert = _firstShapeVert->lstNext;\n\n            // Correct the last conn vertex\n            if (_lastConnVert)\n            {\n                _lastConnVert->lstNext = _firstShapeVert;\n            }\n\n            if (_firstShapeVert)\n            {\n                _firstShapeVert->lstPrev = nullptr;\n            }\n        }\n        else\n        {\n            vert->lstNext->lstPrev = vert->lstPrev;\n            vert->lstPrev->lstNext = vert->lstNext;\n        }\n        _shapeVertices--;\n    }\n    vert->lstPrev = nullptr;\n    vert->lstNext = nullptr;\n\n    checkVertInfListConditions();\n\n    return following;\n}\n\n\nVertInf *VertInfList::getVertexByID(const VertID& id)\n{\n    VertID searchID = id;\n    if (searchID.vn == kUnassignedVertexNumber)\n    {\n        unsigned int topbit = ((unsigned int) 1) << 31;\n        if (searchID.objID & topbit)\n        {\n            searchID.objID = searchID.objID & ~topbit;\n            searchID.vn = VertID::src;\n        }\n        else\n        {\n            searchID.vn = VertID::tar;\n        }\n    }\n    VertInf *last = end();\n    for (VertInf *curr = connsBegin(); curr != last; curr = curr->lstNext)\n    {\n        if (curr->id == searchID)\n        {\n            return curr;\n        }\n    }\n    return nullptr;\n}\n\n\nVertInf *VertInfList::getVertexByPos(const Point& p)\n{\n    VertInf *last = end();\n    for (VertInf *curr = shapesBegin(); curr != last; curr = curr->lstNext)\n    {\n        if (curr->point == p)\n        {\n            return curr;\n        }\n    }\n    return nullptr;\n}\n\n\nVertInf *VertInfList::shapesBegin(void)\n{\n    return _firstShapeVert;\n}\n\n\nVertInf *VertInfList::connsBegin(void)\n{\n    if (_firstConnVert)\n    {\n        return _firstConnVert;\n    }\n    // No connector vertices\n    return _firstShapeVert;\n}\n\n\nVertInf *VertInfList::end(void)\n{\n    return nullptr;\n}\n\n\nunsigned int VertInfList::connsSize(void) const\n{\n    return _connVertices;\n}\n\n\nunsigned int VertInfList::shapesSize(void) const\n{\n    return _shapeVertices;\n}\n\n\n}\n\n\n"
  },
  {
    "path": "cola/libavoid/vertices.h",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libavoid - Fast, Incremental, Object-avoiding Line Router\n *\n * Copyright (C) 2004-2013  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * Licensees holding a valid commercial license may use this file in\n * accordance with the commercial license agreement provided with the \n * library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  \n *\n * Author(s):   Michael Wybrow\n*/\n\n\n#ifndef AVOID_VERTICES_H\n#define AVOID_VERTICES_H\n\n#include <list>\n#include <set>\n#include <map>\n#include <iostream>\n#include <cstdio>\n#include <utility>\n\n#include \"libavoid/geomtypes.h\"\n\nnamespace Avoid {\n\nclass EdgeInf;\nclass VertInf;\nclass Router;\n\ntypedef std::list<EdgeInf *> EdgeInfList;\ntypedef std::pair<VertInf *, VertInf *> VertexPair;\n\ntypedef unsigned int ConnDirFlags;\ntypedef unsigned short VertIDProps;\n\n\nclass VertID\n{\n    public:\n        unsigned int objID;\n        unsigned short vn;\n        // Properties:\n        VertIDProps props;\n\n        static const unsigned short src;\n        static const unsigned short tar;\n        \n        static const VertIDProps PROP_ConnPoint;\n        static const VertIDProps PROP_OrthShapeEdge;\n        static const VertIDProps PROP_ConnectionPin;\n        static const VertIDProps PROP_ConnCheckpoint;\n        static const VertIDProps PROP_DummyPinHelper;\n\n        VertID();\n        VertID(unsigned int id, unsigned short n, VertIDProps p = 0);\n        VertID(const VertID& other);\n        VertID& operator= (const VertID& rhs);\n        bool operator==(const VertID& rhs) const;\n        bool operator!=(const VertID& rhs) const;\n        bool operator<(const VertID& rhs) const;\n        VertID operator+(const int& rhs) const;\n        VertID operator-(const int& rhs) const;\n        VertID& operator++(int);\n        void print(FILE *file = stdout) const;\n        void db_print(void) const;\n        friend std::ostream& operator<<(std::ostream& os, const VertID& vID);\n        \n        // Property tests:\n        inline bool isOrthShapeEdge(void) const\n        {\n            return (props & PROP_OrthShapeEdge) ? true : false;\n        }\n        inline bool isConnPt(void) const\n        {\n            return (props & PROP_ConnPoint) ? true : false;\n        }\n        inline bool isConnectionPin(void) const\n        {\n            return (props & PROP_ConnectionPin) ? true : false;\n        }\n        inline bool isConnCheckpoint(void) const\n        {\n            return (props & PROP_ConnCheckpoint) ? true : false;\n        }\n        inline bool isDummyPinHelper(void) const\n        {\n            return (props & PROP_DummyPinHelper) ? true : false;\n        }\n};\n\n\n// An ID given to all dummy vertices inserted to allow creation of the\n// orthogonal visibility graph since the vertices in the orthogonal graph \n// mostly do not correspond to shape corners or connector endpoints.\n//\nstatic const VertID dummyOrthogID(0, 0);\nstatic const VertID dummyOrthogShapeID(0, 0, VertID::PROP_OrthShapeEdge);\n\nclass ANode;\n\nclass VertInf\n{\n    public:\n        VertInf(Router *router, const VertID& vid, const Point& vpoint,\n                const bool addToRouter = true);\n        ~VertInf();\n        void Reset(const VertID& vid, const Point& vpoint);\n        void Reset(const Point& vpoint);\n        void removeFromGraph(const bool isConnVert = true);\n        bool orphaned(void);\n\n        unsigned int pathLeadsBackTo(const VertInf *start) const;\n        void setVisibleDirections(const ConnDirFlags directions);\n        ConnDirFlags directionFrom(const VertInf *other) const;\n        // Checks if this vertex has the target as a visibility neighbour.\n        EdgeInf *hasNeighbour(VertInf *target, bool orthogonal) const;\n        void orphan(void);\n\n        VertInf **makeTreeRootPointer(VertInf *root);\n        VertInf *treeRoot(void) const;\n        VertInf **treeRootPointer(void) const;\n        void setTreeRootPointer(VertInf **pointer);\n        void clearTreeRootPointer(void);\n\n        void setSPTFRoot(VertInf *root);\n        VertInf *sptfRoot(void) const;\n\n        Router *_router;\n        VertID id;\n        Point  point;\n        VertInf *lstPrev;\n        VertInf *lstNext;\n        VertInf *shPrev;\n        VertInf *shNext;\n        EdgeInfList visList;\n        unsigned int visListSize;\n        EdgeInfList orthogVisList;\n        unsigned int orthogVisListSize;\n        EdgeInfList invisList;\n        unsigned int invisListSize;\n        VertInf *pathNext;\n\n        // The tree root and distance value used when computing MTSTs.\n        // XXX: Maybe these should be allocated as a separate struct\n        //      and referenced via a pointer.  This would be slower due\n        //      to memory allocation, but would save 2 x 8 = 24 bytes per \n        //      VertInf on 64-bit machines.\n        VertInf *m_orthogonalPartner;\n        VertInf **m_treeRoot;\n        double sptfDist;\n\n        ConnDirFlags visDirections;\n        std::list<ANode *> aStarDoneNodes;\n        std::list<ANode *> aStarPendingNodes;\n        // Flags for orthogonal visibility properties, i.e., whether the \n        // line points to a shape edge, connection point or an obstacle.\n        unsigned int orthogVisPropFlags;\n};\n\n\n// Orthogonal visibility property flags\nstatic const unsigned int XL_EDGE = 1;\nstatic const unsigned int XL_CONN = 2;\nstatic const unsigned int XH_EDGE = 4;\nstatic const unsigned int XH_CONN = 8;\nstatic const unsigned int YL_EDGE = 16;\nstatic const unsigned int YL_CONN = 32;\nstatic const unsigned int YH_EDGE = 64;\nstatic const unsigned int YH_CONN = 128;\n\n\nbool directVis(VertInf *src, VertInf *dst);\n\n\n// A linked list of all the vertices in the router instance.  All the \n// connector endpoints are listed first, then all the shape vertices.\n// Dummy vertices inserted for orthogonal routing are classed as shape\n// vertices but have VertID(0, 0).\n//\nclass VertInfList\n{\n    public:\n        VertInfList();\n        void addVertex(VertInf *vert);\n        VertInf *removeVertex(VertInf *vert);\n        VertInf *getVertexByID(const VertID& id);\n        VertInf *getVertexByPos(const Point& p);\n        VertInf *shapesBegin(void);\n        VertInf *connsBegin(void);\n        VertInf *end(void);\n        unsigned int connsSize(void) const;\n        unsigned int shapesSize(void) const;\n    private:\n        VertInf *_firstShapeVert;\n        VertInf *_firstConnVert;\n        VertInf *_lastShapeVert;\n        VertInf *_lastConnVert;\n        unsigned int _shapeVertices;\n        unsigned int _connVertices;\n};\n\n\ntypedef std::set<unsigned int> ShapeSet;\ntypedef std::map<VertID, ShapeSet> ContainsMap;\n\n\n}\n\n\n#endif\n\n\n"
  },
  {
    "path": "cola/libavoid/viscluster.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libavoid - Fast, Incremental, Object-avoiding Line Router\n *\n * Copyright (C) 2004-2008  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * Licensees holding a valid commercial license may use this file in\n * accordance with the commercial license agreement provided with the \n * library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  \n *\n * Author(s):  Michael Wybrow\n*/\n\n#include <cstdlib>\n\n#include \"libavoid/viscluster.h\"\n#include \"libavoid/router.h\"\n#include \"libavoid/assertions.h\"\n#include \"libavoid/debug.h\"\n\n\nnamespace Avoid {\n\n\nClusterRef::ClusterRef(Router *router, Polygon& polygon, const unsigned int id)\n    : m_router(router),\n      m_polygon(polygon, router),\n      m_rectangular_polygon(m_polygon.boundingRectPolygon()),\n      m_active(false)\n{\n    COLA_ASSERT(m_router != nullptr);\n    m_id = m_router->assignId(id);\n\n    m_router->addCluster(this);\n}\n\n\nClusterRef::~ClusterRef()\n{\n    if (m_router->m_currently_calling_destructors == false)\n    {\n        err_printf(\"ERROR: ClusterRef::~ClusterRef() shouldn't be called directly.\\n\");\n        err_printf(\"       It is owned by the router.  Call Router::deleteCluster() instead.\\n\");\n        abort();\n    }\n}\n\n\nvoid ClusterRef::makeActive(void)\n{\n    COLA_ASSERT(!m_active);\n    \n    // Add to clusterRefs list.\n    m_clusterrefs_pos = m_router->clusterRefs.insert(\n            m_router->clusterRefs.begin(), this);\n\n    m_active = true;\n}\n\n\nvoid ClusterRef::makeInactive(void)\n{\n    COLA_ASSERT(m_active);\n    \n    // Remove from clusterRefs list.\n    m_router->clusterRefs.erase(m_clusterrefs_pos);\n\n    m_active = false;\n}\n    \n\nvoid ClusterRef::setNewPoly(Polygon& poly)\n{\n    m_polygon = ReferencingPolygon(poly, m_router);\n    m_rectangular_polygon = m_polygon.boundingRectPolygon();\n}\n\n\nunsigned int ClusterRef::id(void) const\n{\n    return m_id;\n}\n\n\nReferencingPolygon& ClusterRef::polygon(void)\n{\n    return m_polygon;\n}\n\n\nPolygon& ClusterRef::rectangularPolygon(void)\n{\n    return m_rectangular_polygon;\n}\n\n\nRouter *ClusterRef::router(void) const\n{\n    return m_router;\n}\n\n\n}\n\n\n"
  },
  {
    "path": "cola/libavoid/viscluster.h",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libavoid - Fast, Incremental, Object-avoiding Line Router\n *\n * Copyright (C) 2004-2008  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * Licensees holding a valid commercial license may use this file in\n * accordance with the commercial license agreement provided with the \n * library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  \n *\n * Author(s):   Michael Wybrow\n*/\n\n//! @file    viscluster.h\n//! @brief   Contains the interface for the ClusterRef class.\n\n#ifndef AVOID_CLUSTER_H\n#define AVOID_CLUSTER_H\n\n#include <list>\n\n#include \"libavoid/geometry.h\"\n#include \"libavoid/dllexport.h\"\n\nnamespace Avoid {\n\nclass Router;\nclass ClusterRef;\ntypedef std::list<ClusterRef *> ClusterRefList;\n\n\n//! @brief   The ClusterRef class represents a cluster object.\n//!\n//! Cluster are boundaries around groups of shape objects.  Ideally, only\n//! connectors with one endpoint inside the cluster and one endpoint outside\n//! the cluster will cross the cluster boundary. Connectors that begin and \n//! end inside a cluster will not route outside it, and connectors that begin \n//! and end outside the cluster will not enter the cluster.\n//! \n//! @note   While the functionality of this class works, it is currently \n//!         experimental you will likely suffer a large performance hit\n//!         when using it.\n//!\nclass AVOID_EXPORT ClusterRef\n{\n    public:\n        //! @brief  Cluster reference constructor.\n        //!\n        //! Creates a cluster object reference, but does not yet place it \n        //! into the Router scene.  You can add or remove the cluster to/from \n        //! the scene with Router::addCluster() and Router::delCluster().  The \n        //! cluster can effectively be moved with ClusterRef::setNewPoly() \n        //! method.\n        //!\n        //! The poly argument should be used to specify a polygon boundary.\n        //! The rectangular boundary will be automatically generated from this.\n        //! The polygon boundary could be a convex hull consisting of points\n        //! from the boundaries of shapes.\n        //!\n        //! @note Regarding IDs:\n        //!       You can let libavoid manually handle IDs by not specifying\n        //!       them.  Alternatively, you can specify all IDs yourself, but \n        //!       you must be careful to makes sure that each object in the \n        //!       scene (shape, connector, cluster, etc) is given a unique, \n        //!       positive ID.  This uniqueness is checked if assertions are\n        //!       enabled, but if not and there are clashes then strange \n        //!       things can happen.\n        //!\n        //! @param[in]  router  The router scene to place the cluster into.\n        //! @param[in]  poly    A Polygon representing the boundary of the \n        //!                     cluster.\n        //! @param[in]  id      Optionally, a positive integer ID unique\n        //!                     among all objects.\n        //!\n        ClusterRef(Router *router, Polygon& poly, const unsigned int id = 0);\n\n// To prevent C++ objects from being destroyed in garbage collected languages\n// when the libraries are called from SWIG, we hide the declarations of the\n// destructors and prevent generation of default destructors.\n#ifndef SWIG\n        //! @brief  Cluster reference destructor.\n        ~ClusterRef();\n#endif\n        //! @brief   Update the polygon boundary for this cluster.\n        //!\n        //! You should specify a polygon boundary.  The rectangular one will\n        //! be generated automatically from this.\n        //!\n        //! @param[in]  poly    A Polygon representing the boundary of the \n        //!                     cluster.\n        void setNewPoly(Polygon& poly);\n        //! @brief   Returns the ID of this cluster.\n        //! @returns The ID of the cluster. \n        unsigned int id(void) const;\n        //! @brief   Returns a reference to the polygon boundary of this \n        //!          cluster.\n        //! @returns A reference to the polygon boundary of the cluster.\n        ReferencingPolygon& polygon(void);\n        //! @brief   Returns a reference to the rectangular boundary of this \n        //!          cluster.\n        //! @returns A reference to the rectangular boundary of the cluster.\n        Polygon& rectangularPolygon(void);\n        //! @brief   Returns a pointer to the router scene this cluster is in.\n        //! @returns A pointer to the router scene for this cluster.\n        Router *router(void) const;\n        \n        void makeActive(void);\n        void makeInactive(void);\n\n    private:\n        Router *m_router;\n        unsigned int m_id;\n        ReferencingPolygon m_polygon;\n        Polygon m_rectangular_polygon;\n        bool m_active;\n        ClusterRefList::iterator m_clusterrefs_pos;\n};\n\n\n}\n\n\n#endif\n\n\n"
  },
  {
    "path": "cola/libavoid/visibility.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libavoid - Fast, Incremental, Object-avoiding Line Router\n *\n * Copyright (C) 2004-2009  Monash University\n *\n * --------------------------------------------------------------------\n * The Visibility Sweep technique is based upon the method described\n * in Section 5.2 of:\n *     Lee, D.-T. (1978). Proximity and reachability in the plane.,\n *     PhD thesis, Department of Electrical Engineering, \n *     University of Illinois, Urbana, IL.\n * --------------------------------------------------------------------\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * Licensees holding a valid commercial license may use this file in\n * accordance with the commercial license agreement provided with the \n * library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  \n *\n * Author(s):  Michael Wybrow\n*/\n\n\n#include <algorithm>\n#include <cfloat>\n\n#include \"libavoid/shape.h\"\n#include \"libavoid/debug.h\"\n#include \"libavoid/visibility.h\"\n#include \"libavoid/vertices.h\"\n#include \"libavoid/graph.h\"\n#include \"libavoid/geometry.h\"\n#include \"libavoid/router.h\"\n#include \"libavoid/assertions.h\"\n\n\nnamespace Avoid {\n\n\nstatic void vertexSweep(VertInf *vert);\n\nvoid Obstacle::computeVisibilityNaive(void)\n{\n    if ( !(router()->InvisibilityGrph) )\n    {\n        // Clear shape from graph.\n        removeFromGraph();\n    }\n\n    VertInf *shapeBegin = firstVert();\n    VertInf *shapeEnd = lastVert()->lstNext;\n\n    VertInf *pointsBegin = router()->vertices.connsBegin();\n    for (VertInf *curr = shapeBegin; curr != shapeEnd; curr = curr->lstNext)\n    {\n        bool knownNew = true;\n\n        db_printf(\"-- CONSIDERING --\\n\");\n        curr->id.db_print();\n\n        db_printf(\"\\tFirst Half:\\n\");\n        for (VertInf *j = pointsBegin ; j != curr; j = j->lstNext)\n        {\n            if (j->id == dummyOrthogID)\n            {\n                // Don't include orthogonal dummy vertices.\n                continue;\n            }\n            EdgeInf::checkEdgeVisibility(curr, j, knownNew);\n        }\n\n        db_printf(\"\\tSecond Half:\\n\");\n        VertInf *pointsEnd = router()->vertices.end();\n        for (VertInf *k = shapeEnd; k != pointsEnd; k = k->lstNext)\n        {\n            if (k->id == dummyOrthogID)\n            {\n                // Don't include orthogonal dummy vertices.\n                continue;\n            }\n            EdgeInf::checkEdgeVisibility(curr, k, knownNew);\n        }\n    }\n}\n\n\nvoid Obstacle::computeVisibilitySweep(void)\n{\n    if ( !(router()->InvisibilityGrph) )\n    {\n        // Clear shape from graph.\n        removeFromGraph();\n    }\n\n    VertInf *startIter = firstVert();\n    VertInf *endIter = lastVert()->lstNext;\n\n    for (VertInf *i = startIter; i != endIter; i = i->lstNext)\n    {\n        vertexSweep(i);\n    }\n}\n\n\nvoid vertexVisibility(VertInf *point, VertInf *partner, bool knownNew,\n        const bool gen_contains)\n{\n    Router *router = point->_router;\n    const VertID& pID = point->id;\n\n    // Make sure we're only doing ptVis for endpoints.\n    COLA_ASSERT(pID.isConnPt());\n\n    if ( !(router->InvisibilityGrph) )\n    {\n        point->removeFromGraph();\n    }\n\n    if (gen_contains && pID.isConnPt())\n    {\n        router->generateContains(point);\n    }\n\n    if (router->UseLeesAlgorithm)\n    {\n        vertexSweep(point);\n    }\n    else\n    {\n        VertInf *shapesEnd = router->vertices.end();\n        for (VertInf *k = router->vertices.connsBegin(); k != shapesEnd;\n                k = k->lstNext)\n        {\n            if (k->id == dummyOrthogID)\n            {\n                // Don't include orthogonal dummy vertices.\n                continue;\n            }\n            else if (k->id.isConnPt() && !k->id.isConnectionPin() &&\n                    !(k->id.isConnCheckpoint() && k->id.objID == pID.objID))\n            {\n                // Include connection pins, but not connectors.\n                // Also include checkpoints with same ID as sweep point.\n                continue;\n            }\n            EdgeInf::checkEdgeVisibility(point, k, knownNew);\n        }\n        if (partner)\n        {\n            EdgeInf::checkEdgeVisibility(point, partner, knownNew);\n        }\n    }\n}\n\n\n//============================================================================\n//  SWEEP CODE\n//\n\n\nclass PointPair\n{\n    public:\n        PointPair(const Point& centerPoint, VertInf *inf)\n            : vInf(inf),\n              centerPoint(centerPoint)\n        {\n            angle = rotationalAngle(vInf->point - centerPoint);\n            distance = euclideanDist(centerPoint, vInf->point);\n        }\n        bool operator<(const PointPair& rhs) const\n        {\n            // Firstly order by angle.\n            if (angle == rhs.angle)\n            {\n                // If the points are collinear, then order them in increasing\n                // distance from the point we are sweeping around.\n                if (distance == rhs.distance)\n                {\n                    // XXX: Add this assertion back if we require that \n                    //      connector endpoints have unique IDs. For the \n                    //      moment it is okay for them to have the same ID.\n                    //COLA_ASSERT(vInf->id != rhs.vInf->id);\n                    \n                    // If comparing two points at the same physical \n                    // position, then order them by their VertIDs.\n                    return vInf->id < rhs.vInf->id;\n                }\n                return distance < rhs.distance;\n            }\n            return angle < rhs.angle;\n        }\n\n        VertInf    *vInf;\n        double     angle;\n        double     distance;\n        Point      centerPoint;\n};\n\ntypedef std::set<PointPair > VertSet;\n\n\nclass EdgePair\n{\n    public:\n        EdgePair() \n            : vInf1(nullptr), \n              vInf2(nullptr), \n              dist1(0.0),\n              dist2(0.0),\n              angle(0.0),\n              angleDist(0.0)\n        {\n            // The default constuctor should never be called.  \n            // This is defined to appease the MSVC compiler.\n            COLA_ASSERT(false);\n        }\n        EdgePair(const PointPair& p1, VertInf *v) \n            : vInf1(p1.vInf), \n              vInf2(v),\n              dist1(p1.distance),\n              dist2(euclideanDist(vInf2->point, p1.centerPoint)),\n              angle(p1.angle),\n              angleDist(p1.distance),\n              centerPoint(p1.centerPoint)\n        {\n        }\n        bool operator<(const EdgePair& rhs) const\n        {\n            COLA_ASSERT(angle == rhs.angle);\n            if (angleDist == rhs.angleDist)\n            {\n                return (dist2 < rhs.dist2);\n            }\n            return (angleDist < rhs.angleDist);\n        }\n        bool operator==(const EdgePair& rhs) const\n        {\n            if (((vInf1->id == rhs.vInf1->id) &&\n                        (vInf2->id == rhs.vInf2->id)) ||\n                ((vInf1->id == rhs.vInf2->id) &&\n                        (vInf2->id == rhs.vInf1->id)))\n            {\n                return true;\n            }\n            return false;\n        }\n        bool operator!=(const EdgePair& rhs) const\n        {\n            if (((vInf1->id == rhs.vInf1->id) &&\n                        (vInf2->id == rhs.vInf2->id)) ||\n                ((vInf1->id == rhs.vInf2->id) &&\n                        (vInf2->id == rhs.vInf1->id)))\n            {\n                return false;\n            }\n            return true;\n        }\n        void setNegativeAngle(void)\n        {\n            angle = -1.0;\n        }\n        double setCurrAngle(const PointPair& p)\n        {\n            if (p.vInf->point == vInf1->point)\n            {\n                angleDist = dist1;\n                angle = p.angle;\n            }\n            else if (p.vInf->point == vInf2->point)\n            {\n                angleDist = dist2;\n                angle = p.angle;\n            }\n            else if (p.angle != angle)\n            {\n                COLA_ASSERT(p.angle > angle);\n                angle = p.angle;\n                Point pp;\n                int result = rayIntersectPoint(vInf1->point, vInf2->point,\n                        centerPoint, p.vInf->point, &(pp.x), &(pp.y));\n                if (result != DO_INTERSECT) \n                {\n                    // This can happen with points that appear to have the\n                    // same angle but at are at slightly different positions\n                    angleDist = std::min(dist1, dist2);\n                }\n                else\n                {\n                    angleDist = euclideanDist(pp, centerPoint);\n                }\n            }\n\n            return angleDist;\n        }\n\n        VertInf *vInf1;\n        VertInf *vInf2;\n        double dist1;\n        double dist2;\n        double angle;\n        double angleDist;\n        Point centerPoint;\n};\n\ntypedef std::list<EdgePair> SweepEdgeList;\n\n\n#define AHEAD    1\n#define BEHIND  -1\n\nclass isBoundingShape\n{\n    public:\n        // Class instance remembers the ShapeSet.\n        isBoundingShape(ShapeSet& set) : \n            ss(set)\n        { }\n        // The following is an overloading of the function call operator.\n        bool operator () (const PointPair& pp)\n        {\n            if (!(pp.vInf->id.isConnPt()) &&\n                    (ss.find(pp.vInf->id.objID) != ss.end()))\n            {\n                return true;\n            }\n            return false;\n        }\n    private:\n        // MSVC wants to generate the assignment operator and the default \n        // constructor, but fails.  Therefore we declare them private and \n        // don't implement them.\n        isBoundingShape & operator=(isBoundingShape const &);\n        isBoundingShape();\n\n        ShapeSet& ss;\n};\n\n\nstatic bool sweepVisible(SweepEdgeList& T, const PointPair& point, \n        std::set<unsigned int>& onBorderIDs, int *blocker)\n{\n    if (T.empty())\n    {\n        // No blocking edges.\n        return true;\n    }\n\n    Router *router = point.vInf->_router;\n    bool visible = true;\n\n    SweepEdgeList::const_iterator closestIt = T.begin();\n    SweepEdgeList::const_iterator end = T.end();\n    while (closestIt != end)\n    {\n        if ((point.vInf->point == closestIt->vInf1->point) ||\n                (point.vInf->point == closestIt->vInf2->point))\n        {\n            // If the ray intersects just the endpoint of a \n            // blocking edge then ignore that edge.\n            ++closestIt;\n            continue;\n        }\n        break;\n    }\n    if (closestIt == end)\n    {\n        return true;\n    }\n\n    if (point.vInf->id.isConnPt())\n    {\n        // It's a connector endpoint, so we have to ignore \n        // edges of containing shapes for determining visibility.\n        ShapeSet& rss = router->contains[point.vInf->id];\n        while (closestIt != end)\n        {\n            if (rss.find(closestIt->vInf1->id.objID) == rss.end())\n            {\n                // This is not a containing edge so do the normal \n                // test and then stop.\n                if (point.distance > closestIt->angleDist)\n                {\n                    visible = false;\n                }\n                else if ((point.distance == closestIt->angleDist) && \n                        onBorderIDs.find(closestIt->vInf1->id.objID) != \n                                onBorderIDs.end())\n                {\n                    // Touching, but centerPoint is on another edge of\n                    // shape shape, so count as blocking.\n                    visible = false;\n                }\n                break;\n            }\n            // This was a containing edge, so consider the next along.\n            ++closestIt;\n        }\n    }\n    else\n    {\n        // Just test to see if this point is closer than the closest \n        // edge blocking this ray.\n        if (point.distance > closestIt->angleDist)\n        {\n            visible =  false;\n        }\n        else if ((point.distance == closestIt->angleDist) && \n                onBorderIDs.find(closestIt->vInf1->id.objID) != \n                        onBorderIDs.end())\n        {\n            // Touching, but centerPoint is on another edge of\n            // shape shape, so count as blocking.\n            visible = false;\n        }\n    }\n\n    if (!visible)\n    {\n        *blocker = (*closestIt).vInf1->id.objID;\n    }\n    return visible;\n}\n\n\nstatic void vertexSweep(VertInf *vert)\n{\n    Router *router = vert->_router;\n    VertID& pID = vert->id;\n    Point& pPoint = vert->point;\n\n    VertInf *centerInf = vert;\n    VertID centerID = pID;\n    Point centerPoint = pPoint;\n\n    // List of shape (and maybe endpt) vertices, except p\n    // Sort list, around\n    VertSet v;\n\n    // Initialise the vertex list\n    ShapeSet& ss = router->contains[centerID];\n    VertInf *beginVert = router->vertices.connsBegin();\n    VertInf *endVert = router->vertices.end();\n    for (VertInf *inf = beginVert; inf != endVert; inf = inf->lstNext)\n    {\n        if (inf == centerInf)\n        {\n            // Don't include the center point itself.\n            continue;\n        }\n        else if (inf->id == dummyOrthogID)\n        {\n            // Don't include orthogonal dummy vertices.\n            continue;\n        }\n\n        if (centerID.isConnPt() && (ss.find(inf->id.objID) != ss.end()) &&\n                !inf->id.isConnPt())\n        {\n            // Don't include edge points of containing shapes.\n            unsigned int shapeID = inf->id.objID;\n            db_printf(\"Center is inside shape %u so ignore shape edges.\\n\",\n                    shapeID);\n            continue;\n        }\n        \n        if (inf->id.isConnPt())\n        {\n            // Add connector endpoint.\n            if (centerID.isConnPt())\n            {\n                if (inf->id.isConnectionPin())\n                {\n                    v.insert(PointPair(centerPoint, inf));\n                }\n                else if (centerID.isConnectionPin())\n                {\n                    // Connection pins have visibility to everything.\n                    v.insert(PointPair(centerPoint, inf));\n                }\n                else if (inf->id.objID == centerID.objID)\n                {\n                    // Center is an endpoint, so only include the other\n                    // endpoints or checkpoints from the matching connector.\n                    v.insert(PointPair(centerPoint, inf));\n                }\n            }\n            else\n            {\n                // Center is a shape vertex, so add all endpoint vertices.\n                v.insert(PointPair(centerPoint, inf));\n            }\n        }\n        else\n        {\n            // Add shape vertex.\n            v.insert(PointPair(centerPoint, inf));\n        }\n    }\n    std::set<unsigned int> onBorderIDs;\n\n    // Add edges to T that intersect the initial ray.\n    SweepEdgeList e;\n    VertSet::const_iterator vbegin = v.begin();\n    VertSet::const_iterator vend = v.end();\n    const Point xaxis(DBL_MAX, centerInf->point.y);\n    for (VertSet::const_iterator t = vbegin; t != vend; ++t)\n    {\n        VertInf *k = t->vInf;\n\n        COLA_ASSERT(centerInf != k);\n\n        VertInf *kPrev = k->shPrev;\n        VertInf *kNext = k->shNext;\n        if (kPrev && (kPrev != centerInf) && \n                (vecDir(centerInf->point, xaxis, kPrev->point) == AHEAD))\n        {\n            if (segmentIntersect(centerInf->point, xaxis, kPrev->point, \n                        k->point))\n            {\n                EdgePair intPair = EdgePair(*t, kPrev);\n                e.push_back(intPair);\n            }\n            if (pointOnLine(kPrev->point, k->point, centerInf->point))\n            {\n                // Record that centerPoint is on an obstacle line.\n                onBorderIDs.insert(k->id.objID);\n            }\n        }\n        else if (kNext && (kNext != centerInf) && \n                (vecDir(centerInf->point, xaxis, kNext->point) == AHEAD))\n        {\n            if (segmentIntersect(centerInf->point, xaxis, kNext->point, \n                        k->point))\n            {\n                EdgePair intPair = EdgePair(*t, kNext);\n                e.push_back(intPair);\n            }\n            if (pointOnLine(kNext->point, k->point, centerInf->point))\n            {\n                // Record that centerPoint is on an obstacle line.\n                onBorderIDs.insert(k->id.objID);\n            }\n        }\n    }\n    for (SweepEdgeList::iterator c = e.begin(); c != e.end(); ++c)\n    {\n        (*c).setNegativeAngle();\n    }\n\n\n    // Start the actual sweep.\n    db_printf(\"SWEEP: \"); centerID.db_print(); db_printf(\"\\n\");\n\n    isBoundingShape isBounding(ss);\n    for (VertSet::const_iterator t = vbegin; t != vend; ++t)\n    {\n        VertInf *currInf = (*t).vInf;\n        VertID& currID = currInf->id;\n        Point&  currPt = currInf->point;\n\n        const double& currDist = (*t).distance;\n\n        EdgeInf *edge = EdgeInf::existingEdge(centerInf, currInf);\n        if (edge == nullptr)\n        {\n            edge = new EdgeInf(centerInf, currInf);\n        }\n\n        for (SweepEdgeList::iterator c = e.begin(); c != e.end(); ++c)\n        {\n            (*c).setCurrAngle(*t);\n        }\n        e.sort();\n\n        // Check visibility.\n        int blocker = 0;\n        bool currVisible = sweepVisible(e, *t, onBorderIDs, &blocker);\n\n        bool cone1 = true, cone2 = true;\n        if (!(centerID.isConnPt()))\n        {\n            cone1 = inValidRegion(router->IgnoreRegions,\n                    centerInf->shPrev->point, centerPoint,\n                    centerInf->shNext->point, currInf->point);\n        }\n        if (!(currInf->id.isConnPt()))\n        {\n            cone2 = inValidRegion(router->IgnoreRegions,\n                    currInf->shPrev->point, currInf->point,\n                    currInf->shNext->point, centerPoint);\n        }\n\n        if (!cone1 || !cone2)\n        {\n            if (router->InvisibilityGrph)\n            {\n                db_printf(\"\\tSetting invisibility edge... \\n\\t\\t\");\n                edge->addBlocker(0);\n                edge->db_print();\n            }\n        }\n        else\n        {\n            if (currVisible)\n            {\n                db_printf(\"\\tSetting visibility edge... \\n\\t\\t\");\n                edge->setDist(currDist);\n                edge->db_print();\n            }\n            else if (router->InvisibilityGrph)\n            {\n                db_printf(\"\\tSetting invisibility edge... \\n\\t\\t\");\n                edge->addBlocker(blocker);\n                edge->db_print();\n            }\n        }\n        \n        if (!(edge->added()) && !(router->InvisibilityGrph))\n        {\n            delete edge;\n            edge = nullptr;\n        }\n\n        if (!(currID.isConnPt()))\n        {\n            // This is a shape edge\n\n            if (currInf->shPrev != centerInf)\n            {\n                Point& prevPt = currInf->shPrev->point;\n                int prevDir = vecDir(centerPoint, currPt, prevPt);\n                EdgePair prevPair = EdgePair(*t, currInf->shPrev);\n\n                if (prevDir == BEHIND)\n                {\n                    e.remove(prevPair);\n                }\n                else if (prevDir == AHEAD)\n                {\n                    e.push_front(prevPair);\n                }\n            }\n\n            if (currInf->shNext != centerInf)\n            {\n                Point& nextPt = currInf->shNext->point;\n                int nextDir = vecDir(centerPoint, currPt, nextPt);\n                EdgePair nextPair = EdgePair(*t, currInf->shNext);\n\n                if (nextDir == BEHIND)\n                {\n                    e.remove(nextPair);\n                }\n                else if (nextDir == AHEAD)\n                {\n                    e.push_front(nextPair);\n                }\n            }\n        }\n    }\n}\n\n\n}\n\n"
  },
  {
    "path": "cola/libavoid/visibility.h",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libavoid - Fast, Incremental, Object-avoiding Line Router\n *\n * Copyright (C) 2004-2008  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * Licensees holding a valid commercial license may use this file in\n * accordance with the commercial license agreement provided with the \n * library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  \n *\n * Author(s):   Michael Wybrow\n*/\n\n\n#ifndef AVOID_VISIBILITY_H\n#define AVOID_VISIBILITY_H\n\n\nnamespace Avoid {\n\nclass VertInf;\n\nextern void vertexVisibility(VertInf *point, VertInf *partner, bool knownNew,\n            const bool gen_contains = false);\n\n}\n\n\n#endif\n\n"
  },
  {
    "path": "cola/libavoid/vpsc.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libavoid - Fast, Incremental, Object-avoiding Line Router\n *\n * Copyright (C) 2005-2014  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * Licensees holding a valid commercial license may use this file in\n * accordance with the commercial license agreement provided with the \n * library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  \n *\n * Author(s):  Tim Dwyer\n *             Michael Wybrow\n *\n * --------------\n *\n * This file contains a slightly modified version of IncSolver() from libvpsc:\n * A solver for the problem of Variable Placement with Separation Constraints.\n * It has the following changes from the Adaptagrams VPSC version:\n *  -  The required VPSC code has been consolidated into a single file.\n *  -  Unnecessary code, like the Solver() class, has been removed.\n *  -  The PairingHeap code has been replaced by a STL priority_queue.\n *\n * Modifications:  Michael Wybrow\n *\n*/\n\n#include \"libavoid/vpsc.h\"\n\n#ifndef USELIBVPSC\n\n#include <iostream>\n#include <cmath>\n#include <sstream>\n#include <map>\n#include <cfloat>\n#include <cstdio>\n\n#include \"libavoid/assertions.h\"\n#include \"libavoid/debug.h\"\n\n\nusing namespace std;\n\nnamespace Avoid {\n\nstatic const double ZERO_UPPERBOUND=-1e-10;\nstatic const double LAGRANGIAN_TOLERANCE=-1e-4;\n\n\nIncSolver::IncSolver(Variables const &vs, Constraints const &cs)\n    : m(cs.size()),\n      cs(cs),\n      n(vs.size()), \n      vs(vs),\n      needsScaling(false)\n{\n    for(unsigned i=0;i<n;++i) {\n        vs[i]->in.clear();\n        vs[i]->out.clear();\n\n        // Set needsScaling if any variables have a scale other than 1.\n        needsScaling |= (vs[i]->scale != 1);\n    }\n    for(unsigned i=0;i<m;++i) {\n        Constraint *c=cs[i];\n        c->left->out.push_back(c);\n        c->right->in.push_back(c);\n        c->needsScaling = needsScaling;\n    }\n    bs=new Blocks(vs);\n#ifdef LIBVPSC_LOGGING\n    printBlocks();\n    //COLA_ASSERT(!constraintGraphIsCyclic(n,vs));\n#endif\n\n    inactive=cs;\n    for(Constraints::iterator i=inactive.begin();i!=inactive.end();++i) {\n        (*i)->active=false;\n    }\n}\nIncSolver::~IncSolver() {\n    delete bs;\n}\n\nvoid IncSolver::addConstraint(Constraint *c)\n{\n    ++m;\n    c->active = false;\n    inactive.push_back(c);\n    c->left->out.push_back(c);\n    c->right->in.push_back(c);\n    c->needsScaling = needsScaling;\n}\n\n// useful in debugging\nvoid IncSolver::printBlocks() {\n#ifdef LIBVPSC_LOGGING\n    ofstream f(LOGFILE,ios::app);\n    for(set<Block*>::iterator i=bs->begin();i!=bs->end();++i) {\n        Block *b=*i;\n        f<<\"  \"<<*b<<endl;\n    }\n    for(unsigned i=0;i<m;i++) {\n        f<<\"  \"<<*cs[i]<<endl;\n    }\n#endif\n}\n\n/*\n * Stores the relative positions of the variables in their finalPosition\n * field.\n */\nvoid IncSolver::copyResult() {\n    for(Variables::const_iterator i=vs.begin();i!=vs.end();++i) {\n        Variable* v=*i;\n        v->finalPosition=v->position();\n        COLA_ASSERT(v->finalPosition==v->finalPosition);\n    }\n}\n\nstruct node {\n    set<node*> in;\n    set<node*> out;\n};\n// useful in debugging - cycles would be BAD\nbool IncSolver::constraintGraphIsCyclic(const unsigned n, Variable* const vs[]) {\n    map<Variable*, node*> varmap;\n    vector<node*> graph;\n    for(unsigned i=0;i<n;i++) {\n        node *u=new node;\n        graph.push_back(u);\n        varmap[vs[i]]=u;\n    }\n    for(unsigned i=0;i<n;i++) {\n        for(vector<Constraint*>::iterator c=vs[i]->in.begin();c!=vs[i]->in.end();++c) {\n            Variable *l=(*c)->left;\n            varmap[vs[i]]->in.insert(varmap[l]);\n        }\n\n        for(vector<Constraint*>::iterator c=vs[i]->out.begin();c!=vs[i]->out.end();++c) {\n            Variable *r=(*c)->right;\n            varmap[vs[i]]->out.insert(varmap[r]);\n        }\n    }\n    while(graph.size()>0) {\n        node *u=nullptr;\n        vector<node*>::iterator i=graph.begin();\n        for(;i!=graph.end();++i) {\n            u=*i;\n            if(u->in.size()==0) {\n                break;\n            }\n        }\n        if(i==graph.end() && graph.size()>0) {\n            //cycle found!\n            return true;\n        } else {\n            graph.erase(i);\n            for(set<node*>::iterator j=u->out.begin();j!=u->out.end();++j) {\n                node *v=*j;\n                v->in.erase(u);\n            }\n            delete u;\n        }\n    }\n    for(unsigned i=0; i<graph.size(); ++i) {\n        delete graph[i];\n    }\n    return false;\n}\n\n// useful in debugging - cycles would be BAD\nbool IncSolver::blockGraphIsCyclic() {\n    map<Block*, node*> bmap;\n    vector<node*> graph;\n    size_t length = bs->size();\n    for (size_t i = 0; i < length; ++i)\n    {\n        Block *b = bs->at(i);\n        node *u=new node;\n        graph.push_back(u);\n        bmap[b]=u;\n    }\n    for (size_t i = 0; i < length; ++i)\n    {\n        Block *b = bs->at(i);\n        b->setUpInConstraints();\n        Constraint *c=b->findMinInConstraint();\n        while(c!=nullptr) {\n            Block *l=c->left->block;\n            bmap[b]->in.insert(bmap[l]);\n            b->deleteMinInConstraint();\n            c=b->findMinInConstraint();\n        }\n\n        b->setUpOutConstraints();\n        c=b->findMinOutConstraint();\n        while(c!=nullptr) {\n            Block *r=c->right->block;\n            bmap[b]->out.insert(bmap[r]);\n            b->deleteMinOutConstraint();\n            c=b->findMinOutConstraint();\n        }\n    }\n    while(graph.size()>0) {\n        node *u=nullptr;\n        vector<node*>::iterator i=graph.begin();\n        for(;i!=graph.end();++i) {\n            u=*i;\n            if(u->in.size()==0) {\n                break;\n            }\n        }\n        if(i==graph.end() && graph.size()>0) {\n            //cycle found!\n            return true;\n        } else {\n            graph.erase(i);\n            for(set<node*>::iterator j=u->out.begin();j!=u->out.end();++j) {\n                node *v=*j;\n                v->in.erase(u);\n            }\n            delete u;\n        }\n    }\n    for(unsigned i=0; i<graph.size(); i++) {\n        delete graph[i];\n    }\n    return false;\n}\n\nbool IncSolver::solve() {\n#ifdef LIBVPSC_LOGGING\n    ofstream f(LOGFILE,ios::app);\n    f<<\"solve_inc()...\"<<endl;\n#endif\n    satisfy();\n    double lastcost = DBL_MAX, cost = bs->cost();\n    while(fabs(lastcost-cost)>0.0001) {\n        satisfy();\n        lastcost=cost;\n        cost = bs->cost();\n#ifdef LIBVPSC_LOGGING\n        f<<\"  bs->size=\"<<bs->size()<<\", cost=\"<<cost<<endl;\n#endif\n    }\n    copyResult();\n    return bs->size()!=n; \n}\n/*\n * incremental version of satisfy that allows refinement after blocks are\n * moved.\n *\n *  - move blocks to new positions\n *  - repeatedly merge across most violated constraint until no more\n *    violated constraints exist\n *\n * Note: there is a special case to handle when the most violated constraint\n * is between two variables in the same block.  Then, we must split the block\n * over an active constraint between the two variables.  We choose the \n * constraint with the most negative lagrangian multiplier. \n */\nbool IncSolver::satisfy() {\n#ifdef LIBVPSC_LOGGING\n    ofstream f(LOGFILE,ios::app);\n    f<<\"satisfy_inc()...\"<<endl;\n#endif\n    splitBlocks();\n    //long splitCtr = 0;\n    Constraint* v = nullptr;\n    //CBuffer buffer(inactive);\n    while ( (v = mostViolated(inactive)) && \n            (v->equality || ((v->slack() < ZERO_UPPERBOUND) && !v->active)) )\n    {\n        COLA_ASSERT(!v->active);\n        Block *lb = v->left->block, *rb = v->right->block;\n        if(lb != rb) {\n            lb->merge(rb,v);\n        } else {\n            if(lb->isActiveDirectedPathBetween(v->right,v->left)) {\n                // cycle found, relax the violated, cyclic constraint\n                v->unsatisfiable=true;\n                continue;\n                //UnsatisfiableException e;\n                //lb->getActiveDirectedPathBetween(e.path,v->right,v->left);\n                //e.path.push_back(v);\n                //throw e;\n            }\n            //if(splitCtr++>10000) {\n                //throw \"Cycle Error!\";\n            //}\n            // constraint is within block, need to split first\n            try {\n                Constraint* splitConstraint\n                    =lb->splitBetween(v->left,v->right,lb,rb);\n                if(splitConstraint!=nullptr) {\n                    COLA_ASSERT(!splitConstraint->active);\n                    inactive.push_back(splitConstraint);\n                } else {\n                    v->unsatisfiable=true;\n                    continue;\n                }\n            } catch(UnsatisfiableException e) {\n                e.path.push_back(v);\n                /*\n                std::cerr << \"Unsatisfiable:\" << std::endl;\n                for(std::vector<Constraint*>::iterator r=e.path.begin();\n                        r!=e.path.end();++r)\n                {\n                    std::cerr << **r <<std::endl;\n                }\n                */\n                v->unsatisfiable=true;\n                continue;\n            }\n            if(v->slack()>=0) {\n                COLA_ASSERT(!v->active);\n                // v was satisfied by the above split!\n                inactive.push_back(v);\n                bs->insert(lb);\n                bs->insert(rb);\n            } else {\n                bs->insert(lb->merge(rb,v));\n                delete ((lb->deleted) ? lb : rb);\n            }\n        }\n#ifdef LIBVPSC_LOGGING\n        f<<\"...remaining blocks=\"<<bs->size()<<\", cost=\"<<bs->cost()<<endl;\n#endif\n    }\n#ifdef LIBVPSC_LOGGING\n    f<<\"  finished merges.\"<<endl;\n#endif\n    bs->cleanup();\n    bool activeConstraints=false;\n    for(unsigned i=0;i<m;i++) {\n        v=cs[i];\n        if(v->active) activeConstraints=true;\n        if(v->slack() < ZERO_UPPERBOUND) {\n            ostringstream s;\n            s<<\"Unsatisfied constraint: \"<<*v;\n#ifdef LIBVPSC_LOGGING\n            ofstream f(LOGFILE,ios::app);\n            f<<s.str()<<endl;\n#endif\n            throw s.str().c_str();\n        }\n    }\n#ifdef LIBVPSC_LOGGING\n    f<<\"  finished cleanup.\"<<endl;\n    printBlocks();\n#endif\n    copyResult();\n    return activeConstraints;\n}\nvoid IncSolver::moveBlocks() {\n#ifdef LIBVPSC_LOGGING\n    ofstream f(LOGFILE,ios::app);\n    f<<\"moveBlocks()...\"<<endl;\n#endif\n    size_t length = bs->size();\n    for (size_t i = 0; i < length; ++i)\n    {\n        Block *b = bs->at(i);\n        b->updateWeightedPosition();\n        //b->posn = b->wposn / b->weight;\n    }\n#ifdef LIBVPSC_LOGGING\n    f<<\"  moved blocks.\"<<endl;\n#endif\n}\nvoid IncSolver::splitBlocks() {\n#ifdef LIBVPSC_LOGGING\n    ofstream f(LOGFILE,ios::app);\n#endif\n    moveBlocks();\n    splitCnt=0;\n    // Split each block if necessary on min LM\n    size_t length = bs->size();\n    for (size_t i = 0; i < length; ++i)\n    {\n        Block *b = bs->at(i);\n        Constraint* v=b->findMinLM();\n        if(v!=nullptr && v->lm < LAGRANGIAN_TOLERANCE) {\n            COLA_ASSERT(!v->equality);\n#ifdef LIBVPSC_LOGGING\n            f<<\"    found split point: \"<<*v<<\" lm=\"<<v->lm<<endl;\n#endif\n            splitCnt++;\n            Block *b = v->left->block, *l=nullptr, *r=nullptr;\n            COLA_ASSERT(v->left->block == v->right->block);\n            //double pos = b->posn;\n            b->split(l,r,v);\n            //l->posn=r->posn=pos;\n            //l->wposn = l->posn * l->weight;\n            //r->wposn = r->posn * r->weight;\n            l->updateWeightedPosition();\n            r->updateWeightedPosition();\n            bs->insert(l);\n            bs->insert(r);\n            b->deleted=true;\n            COLA_ASSERT(!v->active);\n            inactive.push_back(v);\n#ifdef LIBVPSC_LOGGING\n            f<<\"  new blocks: \"<<*l<<\" and \"<<*r<<endl;\n#endif\n        }\n    }\n    //if(splitCnt>0) { std::cout<<\"  splits: \"<<splitCnt<<endl; }\n#ifdef LIBVPSC_LOGGING\n    f<<\"  finished splits.\"<<endl;\n#endif\n    bs->cleanup();\n}\n\n/*\n * Scan constraint list for the most violated constraint, or the first equality\n * constraint\n */\nConstraint* IncSolver::mostViolated(Constraints &l)\n{\n    double slackForMostViolated = DBL_MAX;\n    Constraint* mostViolated = nullptr;\n#ifdef LIBVPSC_LOGGING\n    ofstream f(LOGFILE,ios::app);\n    f << \"Looking for most violated...\" << endl;\n#endif\n    size_t lSize = l.size();\n    size_t deleteIndex = lSize;\n    Constraint *constraint = nullptr;\n    double slack = 0;\n    for (size_t index = 0; index < lSize; ++index)\n    {\n        constraint = l[index];\n        slack = constraint->slack();\n        if (constraint->equality || slack < slackForMostViolated)\n        {\n            slackForMostViolated = slack;    \n            mostViolated = constraint;\n            deleteIndex = index;\n            if (constraint->equality)\n            {\n                break;\n            }\n        }\n    }\n    // Because the constraint list is not order dependent we just\n    // move the last element over the deletePoint and resize\n    // downwards.  There is always at least 1 element in the\n    // vector because of search.\n    if ( (deleteIndex < lSize) && \n         (((slackForMostViolated < ZERO_UPPERBOUND) && !mostViolated->active) || \n          mostViolated->equality) )\n    {\n        l[deleteIndex] = l[lSize-1];\n        l.resize(lSize-1);\n    }\n#ifdef LIBVPSC_LOGGING\n    if (mostViolated)\n    {\n        f << \"  most violated is: \" << *mostViolated << endl;\n    }\n    else\n    {\n        f << \"  non found.\" << endl;\n    }\n#endif\n    return mostViolated;\n}\n\n\nusing std::set;\nusing std::vector;\nusing std::iterator;\nusing std::list;\nusing std::copy;\n#define __NOTNAN(p) (p)==(p)\n\n\nBlocks::Blocks(vector<Variable*> const &vs) : vs(vs),nvs(vs.size()) {\n    blockTimeCtr=0;\n    m_blocks.resize(nvs);\n    for(size_t i=0;i<nvs;i++) {\n        m_blocks[i] = new Block(this, vs[i]);\n    }\n}\nBlocks::~Blocks(void)\n{\n    blockTimeCtr=0;\n    size_t length = m_blocks.size();\n    for (size_t i = 0; i < length; ++i)\n    {\n        delete m_blocks[i];\n    }\n    m_blocks.clear();\n}\n\n/*\n * returns a list of variables with total ordering determined by the constraint \n * DAG\n */\nlist<Variable*> *Blocks::totalOrder() {\n    list<Variable*> *order = new list<Variable*>;\n    for(size_t i=0;i<nvs;i++) {\n        vs[i]->visited=false;\n    }\n    for(size_t i=0;i<nvs;i++) {\n        if(vs[i]->in.size()==0) {\n            dfsVisit(vs[i],order);\n        }\n    }\n    return order;\n}\n// Recursive depth first search giving total order by pushing nodes in the DAG\n// onto the front of the list when we finish searching them\nvoid Blocks::dfsVisit(Variable *v, list<Variable*> *order) {\n    v->visited=true;\n    vector<Constraint*>::iterator it=v->out.begin();\n    for(;it!=v->out.end();++it) {\n        Constraint *c=*it;\n        if(!c->right->visited) {\n            dfsVisit(c->right, order);\n        }\n    }    \n#ifdef LIBVPSC_LOGGING\n    ofstream f(LOGFILE,ios::app);\n    f<<\"  order=\"<<*v<<endl;\n#endif\n    order->push_front(v);\n}\n/*\n * Processes incoming constraints, most violated to least, merging with the\n * neighbouring (left) block until no more violated constraints are found\n */\nvoid Blocks::mergeLeft(Block *r) {    \n#ifdef LIBVPSC_LOGGING\n    ofstream f(LOGFILE,ios::app);\n    f<<\"mergeLeft called on \"<<*r<<endl;\n#endif\n    r->timeStamp=++blockTimeCtr;\n    r->setUpInConstraints();\n    Constraint *c=r->findMinInConstraint();\n    while (c != nullptr && c->slack()<0) {\n#ifdef LIBVPSC_LOGGING\n        f<<\"mergeLeft on constraint: \"<<*c<<endl;\n#endif\n        r->deleteMinInConstraint();\n        Block *l = c->left->block;        \n        if (l->in==nullptr) l->setUpInConstraints();\n        double dist = c->right->offset - c->left->offset - c->gap;\n        if (r->vars->size() < l->vars->size()) {\n            dist=-dist;\n            std::swap(l, r);\n        }\n        blockTimeCtr++;\n        r->merge(l, c, dist);\n        r->mergeIn(l);\n        r->timeStamp=blockTimeCtr;\n        removeBlock(l);\n        c=r->findMinInConstraint();\n    }        \n#ifdef LIBVPSC_LOGGING\n    f<<\"merged \"<<*r<<endl;\n#endif\n}    \n/*\n * Symmetrical to mergeLeft\n */\nvoid Blocks::mergeRight(Block *l) {    \n#ifdef LIBVPSC_LOGGING\n    ofstream f(LOGFILE,ios::app);\n    f<<\"mergeRight called on \"<<*l<<endl;\n#endif    \n    l->setUpOutConstraints();\n    Constraint *c = l->findMinOutConstraint();\n    while (c != nullptr && c->slack()<0) {        \n#ifdef LIBVPSC_LOGGING\n        f<<\"mergeRight on constraint: \"<<*c<<endl;\n#endif\n        l->deleteMinOutConstraint();\n        Block *r = c->right->block;\n        r->setUpOutConstraints();\n        double dist = c->left->offset + c->gap - c->right->offset;\n        if (l->vars->size() > r->vars->size()) {\n            dist=-dist;\n            std::swap(l, r);\n        }\n        l->merge(r, c, dist);\n        l->mergeOut(r);\n        removeBlock(r);\n        c=l->findMinOutConstraint();\n    }    \n#ifdef LIBVPSC_LOGGING\n    f<<\"merged \"<<*l<<endl;\n#endif\n}\nvoid Blocks::removeBlock(Block *doomed) {\n    doomed->deleted=true;\n    //erase(doomed);\n}\n\n// Clears up deleted blocks from the blocks list.\nvoid Blocks::cleanup(void)\n{\n    // We handle removal of items in-place by doing a single linear pass over \n    // the vector. We use two indexes, j to refer to elements we've checked\n    // from the original list and i to refer to the current position we are\n    // writing in the updated list.\n    size_t i = 0;\n    \n    // For all items in the current blocks list...\n    size_t length = m_blocks.size();\n    for (size_t j = 0; j < length; )\n    {\n        if (m_blocks[j]->deleted)\n        {\n            // The element is deleted, so free it and increment j.\n            delete m_blocks[j];\n            ++j;\n        }\n        else\n        {\n            // The current element is still valid.\n            if (j > i)\n            {\n                // If we've not looking at same element, then copy from j to i.\n                m_blocks[i] = m_blocks[j];\n            }\n            // Increment both indexes.\n            ++i;\n            ++j;\n        }\n    }\n    m_blocks.resize(i);\n}\n/*\n * Splits block b across constraint c into two new blocks, l and r (c's left\n * and right sides respectively)\n */\nvoid Blocks::split(Block *b, Block *&l, Block *&r, Constraint *c) {\n    b->split(l,r,c);\n    m_blocks.push_back(l);\n    m_blocks.push_back(r);\n#ifdef LIBVPSC_LOGGING\n    ofstream f(LOGFILE,ios::app);\n    f<<\"Split left: \"<<*l<<endl;\n    f<<\"Split right: \"<<*r<<endl;\n#endif\n    r->posn = b->posn;\n    //COLA_ASSERT(r->weight!=0);\n    //r->wposn = r->posn * r->weight;\n    mergeLeft(l);\n    // r may have been merged!\n    r = c->right->block;\n    r->updateWeightedPosition();\n    //r->posn = r->wposn / r->weight;\n    mergeRight(r);\n    removeBlock(b);\n\n    COLA_ASSERT(__NOTNAN(l->posn));\n    COLA_ASSERT(__NOTNAN(r->posn));\n}\n/*\n * returns the cost total squared distance of variables from their desired\n * positions\n */\ndouble Blocks::cost() {\n    double c = 0;\n    size_t length = m_blocks.size();\n    for (size_t i = 0; i < length; ++i)\n    {\n        c += m_blocks[i]->cost();\n    }\n    return c;\n}\n\nvoid PositionStats::addVariable(Variable* v) {\n    double ai=scale/v->scale;\n    double bi=v->offset/v->scale;\n    double wi=v->weight;\n    AB+=wi*ai*bi;\n    AD+=wi*ai*v->desiredPosition;\n    A2+=wi*ai*ai;\n    /*\n#ifdef LIBVPSC_LOGGING\n    ofstream f(LOGFILE,ios::app);\n    f << \"adding v[\" << v->id << \"], blockscale=\" << scale << \", despos=\" \n      << v->desiredPosition << \", ai=\" << ai << \", bi=\" << bi\n      << \", AB=\" << AB << \", AD=\" << AD << \", A2=\" << A2;\n#endif\n*/\n}\nvoid Block::addVariable(Variable* v) {\n    v->block=this;\n    vars->push_back(v);\n    if(ps.A2==0) ps.scale=v->scale;\n    //weight+= v->weight;\n    //wposn += v->weight * (v->desiredPosition - v->offset);\n    //posn=wposn/weight;\n    ps.addVariable(v);\n    posn=(ps.AD - ps.AB) / ps.A2;\n    COLA_ASSERT(__NOTNAN(posn));\n    /*\n#ifdef LIBVPSC_LOGGING\n    ofstream f(LOGFILE,ios::app);\n    f << \", posn=\" << posn << endl;\n#endif\n*/\n}\nBlock::Block(Blocks *blocks, Variable* const v)\n    : vars(new vector<Variable*>)\n    , posn(0)\n    //, weight(0)\n    //, wposn(0)\n    , deleted(false)\n    , timeStamp(0)\n    , in(nullptr)\n    , out(nullptr)\n    , blocks(blocks)\n{\n    if(v!=nullptr) {\n        v->offset=0;\n        addVariable(v);\n    }\n}\n\nvoid Block::updateWeightedPosition() {\n    //wposn=0;\n    ps.AB=ps.AD=ps.A2=0;\n    for (Vit v=vars->begin();v!=vars->end();++v) {\n        //wposn += ((*v)->desiredPosition - (*v)->offset) * (*v)->weight;\n        ps.addVariable(*v);\n    }\n    posn=(ps.AD - ps.AB) / ps.A2;\n    COLA_ASSERT(__NOTNAN(posn));\n#ifdef LIBVPSC_LOGGING\n    ofstream f(LOGFILE,ios::app);\n    f << \", posn=\" << posn << endl;\n#endif\n}\nBlock::~Block(void)\n{\n    delete vars;\n    delete in;\n    delete out;\n}\nvoid Block::setUpInConstraints() {\n    setUpConstraintHeap(in,true);\n}\nvoid Block::setUpOutConstraints() {\n    setUpConstraintHeap(out,false);\n}\nvoid Block::setUpConstraintHeap(Heap* &h,bool in) {\n    delete h;\n    h = new Heap();\n    for (Vit i=vars->begin();i!=vars->end();++i) {\n        Variable *v=*i;\n        vector<Constraint*> *cs=in?&(v->in):&(v->out);\n        for (Cit j=cs->begin();j!=cs->end();++j) {\n            Constraint *c=*j;\n            c->timeStamp=blocks->blockTimeCtr;\n            if ( ((c->left->block != this) && in) || \n                 ((c->right->block != this) && !in) )\n            {\n                h->push(c);\n            }\n        }\n    }\n}    \nBlock* Block::merge(Block* b, Constraint* c) {\n#ifdef LIBVPSC_LOGGING\n    ofstream f(LOGFILE,ios::app);\n    f<<\"  merging on: \"<<*c<<\",c->left->offset=\"<<c->left->offset<<\",c->right->offset=\"<<c->right->offset<<endl;\n#endif\n    double dist = c->right->offset - c->left->offset - c->gap;\n    Block *l=c->left->block;\n    Block *r=c->right->block;\n    if (l->vars->size() < r->vars->size()) {\n        r->merge(l,c,dist);\n    } else {\n               l->merge(r,c,-dist);\n    }\n    Block* mergeBlock=b->deleted?this:b;\n#ifdef LIBVPSC_LOGGING\n    f<<\"  merged block=\"<<*mergeBlock<<endl;\n#endif\n    return mergeBlock;\n}\n/*\n * Merges b into this block across c.  Can be either a\n * right merge or a left merge\n * @param b block to merge into this\n * @param c constraint being merged\n * @param distance separation required to satisfy c\n */\nvoid Block::merge(Block *b, Constraint *c, double dist) {\n#ifdef LIBVPSC_LOGGING\n    ofstream f(LOGFILE,ios::app);\n    f<<\"    merging: \"<<*b<<\"dist=\"<<dist<<endl;\n#endif\n    c->active=true;\n    //wposn+=b->wposn-dist*b->weight;\n    //weight+=b->weight;\n    for(Vit i=b->vars->begin();i!=b->vars->end();++i) {\n        Variable *v=*i;\n        //v->block=this;\n        //vars->push_back(v);\n        v->offset+=dist;\n        addVariable(v);\n    }\n#ifdef LIBVPSC_LOGGING\n    for(Vit i=vars->begin();i!=vars->end();++i) {\n        Variable *v=*i;\n        f<<\"    v[\"<<v->id<<\"]: d=\"<<v->desiredPosition\n            <<\" a=\"<<v->scale<<\" o=\"<<v->offset\n            <<endl;\n    }\n    f<<\"  AD=\"<<ps.AD<<\" AB=\"<<ps.AB<<\" A2=\"<<ps.A2<<endl;\n#endif\n    //posn=wposn/weight;\n    //COLA_ASSERT(wposn==ps.AD - ps.AB);\n    posn=(ps.AD - ps.AB) / ps.A2;\n    COLA_ASSERT(__NOTNAN(posn));\n    b->deleted=true;\n}\n\nvoid Block::mergeIn(Block *b) {\n#ifdef LIBVPSC_LOGGING\n    ofstream f(LOGFILE,ios::app);\n    f<<\"  merging constraint heaps... \"<<endl;\n#endif\n    // We check the top of the heaps to remove possible internal constraints\n    findMinInConstraint();\n    b->findMinInConstraint();\n    while (!b->in->empty())\n    {\n        in->push(b->in->top());\n        b->in->pop();\n    }\n#ifdef LIBVPSC_LOGGING\n    f<<\"  merged heap: \"<<*in<<endl;\n#endif\n}\nvoid Block::mergeOut(Block *b) {    \n    findMinOutConstraint();\n    b->findMinOutConstraint();\n    while (!b->out->empty())\n    {\n        out->push(b->out->top());\n        b->out->pop();\n    }\n}\nConstraint *Block::findMinInConstraint() {\n    Constraint *v = nullptr;\n    vector<Constraint*> outOfDate;\n    while (!in->empty()) {\n        v = in->top();\n        Block *lb=v->left->block;\n        Block *rb=v->right->block;\n        // rb may not be this if called between merge and mergeIn\n#ifdef LIBVPSC_LOGGING\n        ofstream f(LOGFILE,ios::app);\n        f<<\"  checking constraint ... \"<<*v;\n        f<<\"    timestamps: left=\"<<lb->timeStamp<<\" right=\"<<rb->timeStamp<<\" constraint=\"<<v->timeStamp<<endl;\n#endif\n        if(lb == rb) {\n            // constraint has been merged into the same block\n#ifdef LIBVPSC_LOGGING\n            if(v->slack()<0) {\n                f<<\"  violated internal constraint found! \"<<*v<<endl;\n                f<<\"     lb=\"<<*lb<<endl;\n                f<<\"     rb=\"<<*rb<<endl;\n            }\n#endif\n            in->pop();\n#ifdef LIBVPSC_LOGGING\n            f<<\" ... skipping internal constraint\"<<endl;\n#endif\n        } else if(v->timeStamp < lb->timeStamp) {\n            // block at other end of constraint has been moved since this\n            in->pop();\n            outOfDate.push_back(v);\n#ifdef LIBVPSC_LOGGING\n            f<<\"    reinserting out of date (reinsert later)\"<<endl;\n#endif\n        } else {\n            break;\n        }\n    }\n    for(Cit i=outOfDate.begin();i!=outOfDate.end();++i) {\n        v=*i;\n        v->timeStamp=blocks->blockTimeCtr;\n        in->push(v);\n    }\n    if(in->empty()) {\n        v=nullptr;\n    } else {\n        v=in->top();\n    }\n    return v;\n}\nConstraint *Block::findMinOutConstraint() {\n    if(out->empty()) return nullptr;\n    Constraint *v = out->top();\n    while (v->left->block == v->right->block) {\n        out->pop();\n        if(out->empty()) return nullptr;\n        v = out->top();\n    }\n    return v;\n}\nvoid Block::deleteMinInConstraint() {\n    in->pop();\n#ifdef LIBVPSC_LOGGING\n    ofstream f(LOGFILE,ios::app);\n    f<<\"deleteMinInConstraint... \"<<endl;\n    f<<\"  result: \"<<*in<<endl;\n#endif\n}\nvoid Block::deleteMinOutConstraint() {\n    out->pop();\n}\ninline bool Block::canFollowLeft(Constraint const* c, Variable const* last) const {\n    return c->left->block==this && c->active && last!=c->left;\n}\ninline bool Block::canFollowRight(Constraint const* c, Variable const* last) const {\n    return c->right->block==this && c->active && last!=c->right;\n}\n\n// computes the derivative of v and the lagrange multipliers\n// of v's out constraints (as the recursive sum of those below.\n// Does not backtrack over u.\n// also records the constraint with minimum lagrange multiplier\n// in min_lm\ndouble Block::compute_dfdv(Variable* const v, Variable* const u,\n               Constraint *&min_lm) {\n    double dfdv=v->dfdv();\n    for(Cit it=v->out.begin();it!=v->out.end();++it) {\n        Constraint *c=*it;\n        if(canFollowRight(c,u)) {\n            c->lm=compute_dfdv(c->right,v,min_lm);\n            dfdv+=c->lm*c->left->scale;\n            if(!c->equality&&(min_lm==nullptr||c->lm<min_lm->lm)) min_lm=c;\n        }\n    }\n    for(Cit it=v->in.begin();it!=v->in.end();++it) {\n        Constraint *c=*it;\n        if(canFollowLeft(c,u)) {\n            c->lm=-compute_dfdv(c->left,v,min_lm);\n            dfdv-=c->lm*c->right->scale;\n            if(!c->equality&&(min_lm==nullptr||c->lm<min_lm->lm)) min_lm=c;\n        }\n    }\n    return dfdv/v->scale;\n}\ndouble Block::compute_dfdv(Variable* const v, Variable* const u) {\n    double dfdv = v->dfdv();\n    for(Cit it = v->out.begin(); it != v->out.end(); ++it) {\n        Constraint *c = *it;\n        if(canFollowRight(c,u)) {\n            c->lm =   compute_dfdv(c->right,v);\n            dfdv += c->lm * c->left->scale;\n        }\n    }\n    for(Cit it=v->in.begin();it!=v->in.end();++it) {\n        Constraint *c = *it;\n        if(canFollowLeft(c,u)) {\n            c->lm = - compute_dfdv(c->left,v);\n            dfdv -= c->lm * c->right->scale;\n        }\n    }\n    return dfdv/v->scale;\n}\n\n// The top level v and r are variables between which we want to find the\n// constraint with the smallest lm.  \n// Similarly, m is initially nullptr and is only assigned a value if the next\n// variable to be visited is r or if a possible min constraint is returned from\n// a nested call (rather than nullptr).\n// Then, the search for the m with minimum lm occurs as we return from\n// the recursion (checking only constraints traversed left-to-right \n// in order to avoid creating any new violations).\n// We also do not consider equality constraints as potential split points\nbool Block::split_path(\n    Variable* r, \n    Variable* const v, \n    Variable* const u, \n    Constraint* &m,\n    bool desperation=false\n    ) \n{\n    for(Cit it(v->in.begin());it!=v->in.end();++it) {\n        Constraint *c=*it;\n        if(canFollowLeft(c,u)) {\n#ifdef LIBVPSC_LOGGING\n    ofstream f(LOGFILE,ios::app);\n    f<<\"  left split path: \"<<*c<<endl;\n#endif\n            if(c->left==r) {\n                if(desperation&&!c->equality) m=c;\n                return true;\n            } else {\n                if(split_path(r,c->left,v,m)) {\n                    if(desperation && !c->equality && (!m||c->lm<m->lm)) {\n                               m=c;\n                    }\n                    return true;\n                }\n            }\n        }\n    }\n    for(Cit it(v->out.begin());it!=v->out.end();++it) {\n        Constraint *c=*it;\n        if(canFollowRight(c,u)) {\n#ifdef LIBVPSC_LOGGING\n    ofstream f(LOGFILE,ios::app);\n    f<<\"  right split path: \"<<*c<<endl;\n#endif\n            if(c->right==r) {\n                if(!c->equality) m=c;\n                return true;\n            } else {\n                if(split_path(r,c->right,v,m)) {\n                    if(!c->equality && (!m||c->lm<m->lm))\n                               m=c;\n                    return true;\n                }\n            }\n        }\n    }\n    return false;\n}\n/*\nBlock::Pair Block::compute_dfdv_between(\n        Variable* r, Variable* const v, Variable* const u, \n        const Direction dir = NONE, bool changedDirection = false) {\n    double dfdv=v->weight*(v->position() - v->desiredPosition);\n    Constraint *m=nullptr;\n    for(Cit it(v->in.begin());it!=v->in.end();++it) {\n        Constraint *c=*it;\n        if(canFollowLeft(c,u)) {\n            if(dir==RIGHT) { \n                changedDirection = true; \n            }\n            if(c->left==r) {\n                       r=nullptr;\n                    if(!c->equality) m=c; \n            }\n            Pair p=compute_dfdv_between(r,c->left,v,\n                    LEFT,changedDirection);\n            dfdv -= c->lm = -p.first;\n            if(r && p.second) \n                m = p.second;\n        }\n    }\n    for(Cit it(v->out.begin());it!=v->out.end();++it) {\n        Constraint *c=*it;\n        if(canFollowRight(c,u)) {\n            if(dir==LEFT) { \n                changedDirection = true; \n            }\n            if(c->right==r) {\n                       r=nullptr; \n                    if(!c->equality) m=c; \n            }\n            Pair p=compute_dfdv_between(r,c->right,v,\n                    RIGHT,changedDirection);\n            dfdv += c->lm = p.first;\n            if(r && p.second) \n                m = changedDirection && !c->equality && c->lm < p.second->lm \n                    ? c \n                    : p.second;\n        }\n    }\n    return Pair(dfdv,m);\n}\n*/\n\n// resets LMs for all active constraints to 0 by\n// traversing active constraint tree starting from v,\n// not back tracking over u\nvoid Block::reset_active_lm(Variable* const v, Variable* const u) {\n    for(Cit it=v->out.begin();it!=v->out.end();++it) {\n        Constraint *c=*it;\n        if(canFollowRight(c,u)) {\n            c->lm=0;\n            reset_active_lm(c->right,v);\n        }\n    }\n    for(Cit it=v->in.begin();it!=v->in.end();++it) {\n        Constraint *c=*it;\n        if(canFollowLeft(c,u)) {\n            c->lm=0;\n            reset_active_lm(c->left,v);\n        }\n    }\n}\nvoid Block::list_active(Variable* const v, Variable* const u) {\n    for(Cit it=v->out.begin();it!=v->out.end();++it) {\n        Constraint *c=*it;\n        if(canFollowRight(c,u)) {\n#ifdef LIBVPSC_LOGGING\n    ofstream f(LOGFILE,ios::app);\n    f<<\"  \"<<*c<<endl;\n#endif\n            list_active(c->right,v);\n        }\n    }\n    for(Cit it=v->in.begin();it!=v->in.end();++it) {\n        Constraint *c=*it;\n        if(canFollowLeft(c,u)) {\n#ifdef LIBVPSC_LOGGING\n    ofstream f(LOGFILE,ios::app);\n    f<<\"  \"<<*c<<endl;\n#endif\n            list_active(c->left,v);\n        }\n    }\n}\n/*\n * finds the constraint with the minimum lagrange multiplier, that is, the constraint\n * that most wants to split\n */\nConstraint *Block::findMinLM() {\n    Constraint *min_lm=nullptr;\n    reset_active_lm(vars->front(),nullptr);\n    compute_dfdv(vars->front(),nullptr,min_lm);\n#ifdef LIBVPSC_LOGGING\n    ofstream f(LOGFILE,ios::app);\n    f<<\"  langrangians: \"<<endl;\n    list_active(vars->front(),nullptr);\n#endif\n    return min_lm;\n}\nConstraint *Block::findMinLMBetween(Variable* const lv, Variable* const rv) {\n    reset_active_lm(vars->front(),nullptr);\n    compute_dfdv(vars->front(),nullptr);\n    Constraint *min_lm=nullptr;\n    split_path(rv,lv,nullptr,min_lm);\n#if 0\n    if(min_lm==nullptr) {\n        split_path(rv,lv,nullptr,min_lm,true);\n    }\n#else\n    if(min_lm==nullptr) {\n        //err_printf(\"Couldn't find split point!\\n\");\n        UnsatisfiableException e;\n        getActivePathBetween(e.path,lv,rv,nullptr);\n        throw e;\n    }\n    COLA_ASSERT(min_lm!=nullptr);\n#endif\n    return min_lm;\n}\n\n// populates block b by traversing the active constraint tree adding variables as they're \n// visited.  Starts from variable v and does not backtrack over variable u.\nvoid Block::populateSplitBlock(Block *b, Variable* v, Variable const* u) {\n    b->addVariable(v);\n    for (Cit c=v->in.begin();c!=v->in.end();++c) {\n        if (canFollowLeft(*c,u))\n            populateSplitBlock(b, (*c)->left, v);\n    }\n    for (Cit c=v->out.begin();c!=v->out.end();++c) {\n        if (canFollowRight(*c,u)) \n            populateSplitBlock(b, (*c)->right, v);\n    }\n}\n/*\n * Returns the active path between variables u and v... not back tracking over w\n */\nbool Block::getActivePathBetween(Constraints& path, Variable const* u,\n               Variable const* v, Variable const *w) const {\n    if(u==v) return true;\n    for (Cit_const c=u->in.begin();c!=u->in.end();++c) {\n        if (canFollowLeft(*c,w)) {\n            if(getActivePathBetween(path, (*c)->left, v, u)) {\n                path.push_back(*c);\n                return true;\n            }\n        }\n    }\n    for (Cit_const c=u->out.begin();c!=u->out.end();++c) {\n        if (canFollowRight(*c,w)) {\n            if(getActivePathBetween(path, (*c)->right, v, u)) {\n                path.push_back(*c);\n                return true;\n            }\n        }\n    }\n    return false;\n}\n// Search active constraint tree from u to see if there is a directed path to v.\n// Returns true if path is found with all constraints in path having their visited flag\n// set true.\nbool Block::isActiveDirectedPathBetween(Variable const* u, Variable const* v) const {\n    if(u==v) return true;\n    for (Cit_const c=u->out.begin();c!=u->out.end();++c) {\n        if(canFollowRight(*c,nullptr)) {\n            if(isActiveDirectedPathBetween((*c)->right,v)) {\n                return true;\n            }\n        }\n    }\n    return false;\n}\nbool Block::getActiveDirectedPathBetween(\n        Constraints& path, Variable const* u, Variable const* v) const {\n    if(u==v) return true;\n    for (Cit_const c=u->out.begin();c!=u->out.end();++c) {\n        if(canFollowRight(*c,nullptr)) {\n            if(getActiveDirectedPathBetween(path,(*c)->right,v)) {\n                path.push_back(*c);\n                return true;\n            }\n        }\n    }\n    return false;\n}\n/*\n * Block needs to be split because of a violated constraint between vl and vr.\n * We need to search the active constraint tree between l and r and find the constraint\n * with min lagrangrian multiplier and split at that point.\n * Returns the split constraint\n */\nConstraint* Block::splitBetween(Variable* const vl, Variable* const vr,\n               Block* &lb, Block* &rb) {\n#ifdef LIBVPSC_LOGGING\n    ofstream f(LOGFILE,ios::app);\n    f<<\"  need to split between: \"<<*vl<<\" and \"<<*vr<<endl;\n#endif\n    Constraint *c=findMinLMBetween(vl, vr);\n#ifdef LIBVPSC_LOGGING\n    f<<\"  going to split on: \"<<*c<<endl;\n#endif\n    if(c!=nullptr) {\n        split(lb,rb,c);\n        deleted = true;\n    }\n    return c;\n}\n\n/*\n * Creates two new blocks, l and r, and splits this block across constraint c,\n * placing the left subtree of constraints (and associated variables) into l\n * and the right into r.\n */\nvoid Block::split(Block* &l, Block* &r, Constraint* c) {\n    c->active=false;\n    l=new Block(blocks);\n    populateSplitBlock(l,c->left,c->right);\n    //COLA_ASSERT(l->weight>0);\n    r=new Block(blocks);\n    populateSplitBlock(r,c->right,c->left);\n    //COLA_ASSERT(r->weight>0);\n}\n\n/*\n * Computes the cost (squared euclidean distance from desired positions) of the\n * current positions for variables in this block\n */\ndouble Block::cost() {\n    double c = 0;\n    for (Vit v=vars->begin();v!=vars->end();++v) {\n        double diff = (*v)->position() - (*v)->desiredPosition;\n        c += (*v)->weight * diff * diff;\n    }\n    return c;\n}\nostream& operator <<(ostream &os, const Block& b)\n{\n    os<<\"Block(posn=\"<<b.posn<<\"):\";\n    for(Block::Vit v=b.vars->begin();v!=b.vars->end();++v) {\n        os<<\" \"<<**v;\n    }\n    if(b.deleted) {\n        os<<\" Deleted!\";\n    }\n    return os;\n}\n\nConstraint::Constraint(Variable *left, Variable *right, double gap, bool equality)\n: left(left),\n  right(right),\n  gap(gap),\n  timeStamp(0),\n  active(false),\n  equality(equality),\n  unsatisfiable(false),\n  needsScaling(true),\n  creator(nullptr)\n{\n    // In hindsight I think it's probably better to build the constraint DAG\n    // (by creating variable in/out lists) when needed, rather than in advance\n    //left->out.push_back(this);\n    //right->in.push_back(this);\n}\nConstraint::~Constraint() {\n    // see constructor: the following is just way too slow.  \n    // Better to create a\n    // new DAG on demand than maintain the lists dynamically.\n    //Constraints::iterator i;\n    //for(i=left->out.begin(); i!=left->out.end(); i++) {\n        //if(*i==this) break;\n    //}\n    //left->out.erase(i);\n    //for(i=right->in.begin(); i!=right->in.end(); i++) {\n        //if(*i==this) break;\n    //}\n    //right->in.erase(i);\n}\nstd::string Constraint::toString(void) const\n{\n    std::stringstream stream;\n    stream << \"Constraint: var(\" << left->id << \") \";\n    if (gap < 0)\n    {\n        stream << \"- \" << -gap << \" \";\n    }\n    else\n    {\n        stream << \"+ \" << gap << \" \";\n    }\n    stream << ((equality) ? \"==\" : \"<=\");\n    stream << \" var(\" << right->id << \") \";\n    return stream.str();\n}\n\nstd::ostream& operator <<(std::ostream &os, const Constraint &c)\n{\n    const char *type = c.equality ? \"=\" : \"<=\";\n    std::ostringstream lscale, rscale;\n    if (c.left->scale != 1) \n    {\n        lscale << c.left->scale << \"*\";\n    }\n    if (c.right->scale != 1)\n    {\n        rscale << c.right->scale << \"*\";\n    }\n    os << lscale.str() << *c.left << \"+\" << c.gap << type << \n          rscale.str() << *c.right;\n    if (c.left->block && c.right->block)\n    {\n        os << \"(\" << c.slack() << \")\" << (c.active ? \"-active\" : \"\") <<\n              \"(lm=\" << c.lm << \")\";\n    }\n    else\n    {\n        os << \"(vars have no position)\";\n    }\n    return os;\n}\n\nbool CompareConstraints::operator() (\n    Constraint *const &l, Constraint *const &r\n) const {\n    double const sl = \n        l->left->block->timeStamp > l->timeStamp\n        ||l->left->block==l->right->block\n        ?-DBL_MAX:l->slack();\n    double const sr = \n        r->left->block->timeStamp > r->timeStamp\n        ||r->left->block==r->right->block\n        ?-DBL_MAX:r->slack();\n    if(sl==sr) {\n        // arbitrary choice based on id\n        if(l->left->id==r->left->id) {\n            if(l->right->id<r->right->id) return true;\n            return false;\n        }\n        if(l->left->id<r->left->id) return true;\n        return false;\n    }\n    return sl > sr;\n}\n\nstd::ostream& operator <<(std::ostream &os, const Variable &v) {\n    if(v.block)\n        os << \"(\" << v.id << \"=\" << v.position() << \")\";\n    else\n        os << \"(\" << v.id << \"=\" << v.desiredPosition << \")\";\n    return os;\n}\n\ntypedef std::list<std::map<Variable *, double> > VarOffsetMapList;\n\nclass EqualityConstraintSet\n{\n    public:\n        EqualityConstraintSet(Variables vs)\n        {\n            for (size_t i = 0; i < vs.size(); ++i)\n            {\n                std::map<Variable *, double> varSet;\n                varSet[vs[i]] = 0;\n                variableGroups.push_back(varSet);\n            }\n        }\n        bool isRedundant(Variable *lhs, Variable *rhs, double sep)\n        {\n            VarOffsetMapList::iterator lhsSet = setForVar(lhs);\n            VarOffsetMapList::iterator rhsSet = setForVar(rhs);\n            if (lhsSet == rhsSet)\n            {\n                // Check if this is a redundant constraint.\n                if (fabs(((*lhsSet)[lhs] + sep) - (*rhsSet)[rhs]) < 0.0001)\n                {\n                    // If so, return true.\n                    return true;\n                }\n            }\n            return false;\n        }\n        void mergeSets(Variable *lhs, Variable *rhs, double sep)\n        {\n            VarOffsetMapList::iterator lhsSet = setForVar(lhs);\n            VarOffsetMapList::iterator rhsSet = setForVar(rhs);\n            if (lhsSet == rhsSet)\n            {\n                return;\n            }\n\n            double rhsOldOffset = (*rhsSet)[rhs];\n            double rhsNewOffset = (*lhsSet)[lhs] + sep;\n            double offset = rhsNewOffset - rhsOldOffset;\n\n            // Update offsets\n            for (std::map<Variable *, double>::iterator it = rhsSet->begin();\n                    it != rhsSet->end(); ++it)\n            {\n                it->second += offset;\n            }\n            \n            // Merge rhsSet into lhsSet\n            lhsSet->insert(rhsSet->begin(), rhsSet->end());\n            variableGroups.erase(rhsSet);\n        }\n\n    private:\n        VarOffsetMapList::iterator setForVar(Variable *var)\n        {\n            for (VarOffsetMapList::iterator it = variableGroups.begin();\n                    it != variableGroups.end(); ++it)\n            {\n                if (it->find(var) != it->end())\n                {\n                    return it;\n                }\n            }\n            return variableGroups.end();\n        }\n\n    VarOffsetMapList variableGroups;\n};\n\nConstraints constraintsRemovingRedundantEqualities(Variables const &vars, \n        Constraints const &constraints)\n{\n    EqualityConstraintSet equalitySets(vars);\n    Constraints cs = Constraints(constraints.size());\n    int csSize = 0;\n\n    for (unsigned i = 0; i < constraints.size(); ++i)\n    {\n        Constraint *c = constraints[i];\n        if (c->equality)\n        {\n            if (!equalitySets.isRedundant(c->left, c->right, c->gap))\n            {\n                // Only add non-redundant equalities\n                equalitySets.mergeSets(c->left, c->right, c->gap);\n                cs[csSize++] = c;\n            }\n        }\n        else\n        {\n            // Add all non-equalities\n            cs[csSize++] = c;\n        }\n    }\n    cs.resize(csSize);\n    return cs;\n}\n\n\n}\n\n#endif\n"
  },
  {
    "path": "cola/libavoid/vpsc.h",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libavoid - Fast, Incremental, Object-avoiding Line Router\n *\n * Copyright (C) 2005-2014  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * Licensees holding a valid commercial license may use this file in\n * accordance with the commercial license agreement provided with the\n * library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n * Author(s):   Tim Dwyer\n *              Michael Wybrow\n *\n * --------------\n *\n * This file contains a slightly modified version of IncSolver() from libvpsc:\n * A solver for the problem of Variable Placement with Separation Constraints.\n * It has the following changes from the Adaptagrams VPSC version:\n *  -  The required VPSC code has been consolidated into a single file.\n *  -  Unnecessary code (like Solver) has been removed.\n *  -  The PairingHeap code has been replaced by a STL priority_queue.\n *\n * Modifications:  Michael Wybrow\n *\n*/\n\n#ifndef LIBAVOID_VPSC_H\n#define LIBAVOID_VPSC_H\n\n\n#ifdef USELIBVPSC\n\n// By default, libavoid will use it's own version of VPSC defined in this file.\n//\n// Alternatively, you can directly use IncSolver from libvpsc.  This\n// introduces a dependency on libvpsc but it can be preferable in cases\n// where you are building all of Adaptagrams together and want to work\n// with a set of CompoundConstraints or other classes built upon the\n// base libvpsc Constraint classes.\n\n// Include necessary headers from libvpsc.\n#include \"libvpsc/variable.h\"\n#include \"libvpsc/constraint.h\"\n#include \"libvpsc/rectangle.h\"\n#include \"libvpsc/solve_VPSC.h\"\n\n// Use the libvpsc versions of things needed by libavoid.\nusing vpsc::Variable;\nusing vpsc::Variables;\nusing vpsc::Constraint;\nusing vpsc::Constraints;\nusing vpsc::IncSolver;\nusing vpsc::delete_object;\n\n#else\n\n#include <vector>\n#include <list>\n#include <set>\n#include <queue>\n#include <iostream>\n#include <cfloat>\n\n#include \"libavoid/assertions.h\"\n\nnamespace Avoid {\n\nclass Variable;\nclass Constraint;\nclass Blocks;\ntypedef std::vector<Variable*> Variables;\ntypedef std::vector<Constraint*> Constraints;\nclass CompareConstraints {\npublic:\n    bool operator() (Constraint *const &l, Constraint *const &r) const;\n};\nstruct PositionStats {\n    PositionStats() : scale(0), AB(0), AD(0), A2(0) {}\n    void addVariable(Variable* const v);\n    double scale;\n    double AB;\n    double AD;\n    double A2;\n};\n\ntypedef std::priority_queue<Constraint*,std::vector<Constraint*>,\n        CompareConstraints> Heap;\n\nclass Block\n{\n    typedef Variables::iterator Vit;\n    typedef Constraints::iterator Cit;\n    typedef Constraints::const_iterator Cit_const;\n\n    friend std::ostream& operator <<(std::ostream &os,const Block &b);\npublic:\n    Variables *vars;\n    double posn;\n    //double weight;\n    //double wposn;\n    PositionStats ps;\n    Block(Blocks *blocks, Variable* const v=nullptr);\n    ~Block(void);\n    Constraint* findMinLM();\n    Constraint* findMinLMBetween(Variable* const lv, Variable* const rv);\n    Constraint* findMinInConstraint();\n    Constraint* findMinOutConstraint();\n    void deleteMinInConstraint();\n    void deleteMinOutConstraint();\n    void updateWeightedPosition();\n    void merge(Block *b, Constraint *c, double dist);\n    Block* merge(Block *b, Constraint *c);\n    void mergeIn(Block *b);\n    void mergeOut(Block *b);\n    void split(Block *&l, Block *&r, Constraint *c);\n    Constraint* splitBetween(Variable* vl, Variable* vr, Block* &lb, Block* &rb);\n    void setUpInConstraints();\n    void setUpOutConstraints();\n    double cost();\n    bool deleted;\n    long timeStamp;\n    Heap *in;\n    Heap *out;\n    bool getActivePathBetween(Constraints& path, Variable const* u,\n               Variable const* v, Variable const *w) const;\n    bool isActiveDirectedPathBetween(\n            Variable const* u, Variable const* v) const;\n    bool getActiveDirectedPathBetween(Constraints& path, Variable const * u, Variable const * v) const;\nprivate:\n    typedef enum {NONE, LEFT, RIGHT} Direction;\n    typedef std::pair<double, Constraint*> Pair;\n    void reset_active_lm(Variable* const v, Variable* const u);\n    void list_active(Variable* const v, Variable* const u);\n    double compute_dfdv(Variable* const v, Variable* const u);\n    double compute_dfdv(Variable* const v, Variable* const u, Constraint *&min_lm);\n    bool split_path(Variable*, Variable* const, Variable* const,\n            Constraint* &min_lm, bool desperation);\n    bool canFollowLeft(Constraint const* c, Variable const* last) const;\n    bool canFollowRight(Constraint const* c, Variable const* last) const;\n    void populateSplitBlock(Block *b, Variable* v, Variable const* u);\n    void addVariable(Variable* v);\n    void setUpConstraintHeap(Heap* &h,bool in);\n\n    // Parent container, that holds the blockTimeCtr.\n    Blocks *blocks;\n};\n\n\nclass Constraint;\ntypedef std::vector<Constraint*> Constraints;\nclass Variable\n{\n    friend std::ostream& operator <<(std::ostream &os, const Variable &v);\n    friend class Block;\n    friend class Constraint;\n    friend class IncSolver;\npublic:\n    int id; // useful in log files\n    double desiredPosition;\n    double finalPosition;\n    double weight; // how much the variable wants to\n                   // be at it's desired position\n    double scale; // translates variable to another space\n    double offset;\n    Block *block;\n    bool visited;\n    bool fixedDesiredPosition;\n    Constraints in;\n    Constraints out;\n    inline Variable(const int id, const double desiredPos=-1.0,\n            const double weight=1.0, const double scale=1.0)\n        : id(id)\n        , desiredPosition(desiredPos)\n        , weight(weight)\n        , scale(scale)\n        , offset(0)\n        , block(nullptr)\n        , visited(false)\n        , fixedDesiredPosition(false)\n    {\n    }\n    double dfdv(void) const {\n        return 2. * weight * ( position() - desiredPosition );\n    }\nprivate:\n    inline double position(void) const {\n        return (block->ps.scale*block->posn+offset)/scale;\n    }\n    inline double unscaledPosition(void) const {\n        COLA_ASSERT(block->ps.scale == 1);\n        COLA_ASSERT(scale == 1);\n        return block->posn + offset;\n    }\n};\n\n\nclass Constraint\n{\npublic:\n    Constraint(Variable *left, Variable *right, double gap, bool equality=false);\n    ~Constraint();\n    inline double slack(void) const\n    {\n        if (unsatisfiable)\n        {\n            return DBL_MAX;\n        }\n        if (needsScaling)\n        {\n            return right->scale * right->position() - gap -\n                    left->scale * left->position();\n        }\n        COLA_ASSERT(left->scale == 1);\n        COLA_ASSERT(right->scale == 1);\n        return right->unscaledPosition() - gap - left->unscaledPosition();\n    }\n    std::string toString(void) const;\n\n    friend std::ostream& operator <<(std::ostream &os,const Constraint &c);\n    Variable *left;\n    Variable *right;\n    double gap;\n    double lm;\n    long timeStamp;\n    bool active;\n    const bool equality;\n    bool unsatisfiable;\n    bool needsScaling;\n    void *creator;\n};\n/*\n * A block structure defined over the variables such that each block contains\n * 1 or more variables, with the invariant that all constraints inside a block\n * are satisfied by keeping the variables fixed relative to one another\n */\nclass Blocks\n{\npublic:\n    Blocks(Variables const &vs);\n    ~Blocks(void);\n    void mergeLeft(Block *r);\n    void mergeRight(Block *l);\n    void split(Block *b, Block *&l, Block *&r, Constraint *c);\n    std::list<Variable*> *totalOrder();\n    void cleanup();\n    double cost();\n\n    size_t size() const;\n    Block *at(size_t index) const;\n    void insert(Block *block);\n\n    long blockTimeCtr;\nprivate:\n    void dfsVisit(Variable *v, std::list<Variable*> *order);\n    void removeBlock(Block *doomed);\n\n    std::vector<Block *> m_blocks;\n    Variables const &vs;\n    size_t nvs;\n};\n\ninline size_t Blocks::size() const\n{\n    return m_blocks.size();\n}\n\ninline Block *Blocks::at(size_t index) const\n{\n    return m_blocks[index];\n}\n\ninline void Blocks::insert(Block *block)\n{\n    m_blocks.push_back(block);\n}\n\nstruct UnsatisfiableException {\n    Constraints path;\n};\nstruct UnsatisfiedConstraint {\n    UnsatisfiedConstraint(Constraint& c):c(c) {}\n    Constraint& c;\n};\n/*\n * Variable Placement with Separation Constraints problem instance\n */\nclass IncSolver {\npublic:\n    unsigned splitCnt;\n    bool satisfy();\n    bool solve();\n    void moveBlocks();\n    void splitBlocks();\n    IncSolver(Variables const &vs, Constraints const &cs);\n\n    ~IncSolver();\n    void addConstraint(Constraint *constraint);\n    Variables const & getVariables() { return vs; }\nprotected:\n    Blocks *bs;\n    size_t m;\n    Constraints const &cs;\n    size_t n;\n    Variables const &vs;\n    bool needsScaling;\n\n    void printBlocks();\n    void copyResult();\nprivate:\n    bool constraintGraphIsCyclic(const unsigned n, Variable* const vs[]);\n    bool blockGraphIsCyclic();\n    Constraints inactive;\n    Constraints violated;\n    Constraint* mostViolated(Constraints &l);\n};\n\nstruct delete_object\n{\n    template <typename T>\n    void operator()(T *ptr){ delete ptr;}\n};\n\nextern Constraints constraintsRemovingRedundantEqualities(\n        Variables const &vars, Constraints const &constraints);\n\n}\n\n#endif // ! USELIBVPSC\n\n#endif // AVOID_VPSC_H\n"
  },
  {
    "path": "cola/libcola/Makefile.am",
    "content": "EXTRA_DIST=libcola.pc.in\n\nlib_LTLIBRARIES = libcola.la\nlibcola_la_CPPFLAGS = -I$(top_srcdir) $(CAIROMM_CFLAGS) -I$(includedir)/libcola -fPIC\n\n# Depends on libvpsc\nlibcola_la_LIBADD = $(top_builddir)/libvpsc/libvpsc.la $(CAIROMM_LIBS)\n\nlibcola_la_SOURCES = cola.h\\\n\tcola.cpp\\\n\tcolafd.cpp\\\n\tconjugate_gradient.cpp\\\n\tconjugate_gradient.h\\\n\texceptions.h\\\n\tgradient_projection.cpp\\\n\tgradient_projection.h\\\n\tshortest_paths.h\\\n\tstraightener.h\\\n\tstraightener.cpp\\\n\tconnected_components.cpp\\\n\tconvex_hull.h\\\n\tconvex_hull.cpp\\\n\tcluster.cpp\\\n\tcompound_constraints.h\\\n\tcompound_constraints.cpp\\\n\tpseudorandom.h \\\n\tpseudorandom.cpp \\\n\toutput_svg.cpp\\\n\toutput_svg.h \\\n\tunused.h \\\n\tcc_clustercontainmentconstraints.cpp \\\n\tcc_clustercontainmentconstraints.h \\\n\tcc_nonoverlapconstraints.cpp \\\n\tcc_nonoverlapconstraints.h \\\n\tbox.cpp \\\n\tbox.h \\\n\tshapepair.cpp \\\n\tshapepainr.h\n\nlibcolaincludedir = $(includedir)/libcola\nlibcolainclude_HEADERS = cola.h\\\n\tcluster.h\\\n\tcommondefs.h\\\n\tcompound_constraints.h\\\n\tpseudorandom.h \\\n\texceptions.h\\\n\tgradient_projection.h\\\n\tsparse_matrix.h\\\n\tstraightener.h \\\n\toutput_svg.h \\\n\tunused.h \\\n\tcc_clustercontainmentconstraints.h \\\n\tcc_nonoverlapconstraints.h \\\n\tbox.h \\\n\tshapepair.h\n\npkgconfigdir = $(libdir)/pkgconfig\npkgconfig_DATA = libcola.pc\n\nSUBDIRS = . tests\n"
  },
  {
    "path": "cola/libcola/box.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libcola - A library providing force-directed network layout using the \n *           stress-majorization method subject to separation constraints.\n *\n * Copyright (C) 2014  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n * Author(s):  Michael Wybrow\n *\n*/\n\n#include \"libcola/box.h\"\n\nnamespace cola {\n\nBox::Box(double xMin, double xMax, double yMin, double yMax)\n{\n    m_min[vpsc::XDIM] = nonNegative(xMin);\n    m_max[vpsc::XDIM] = nonNegative(xMax);\n    m_min[vpsc::YDIM] = nonNegative(yMin);\n    m_max[vpsc::YDIM] = nonNegative(yMax);\n}\n\nBox::Box(double all)\n{\n    double value = nonNegative(all);\n    m_min[vpsc::XDIM] = value;\n    m_max[vpsc::XDIM] = value;\n    m_min[vpsc::YDIM] = value;\n    m_max[vpsc::YDIM] = value;\n}\n\nBox::Box()\n{\n    m_min[vpsc::XDIM] = 0;\n    m_max[vpsc::XDIM] = 0;\n    m_min[vpsc::YDIM] = 0;\n    m_max[vpsc::YDIM] = 0;\n}\n\nBox::~Box()\n{\n}\n\nbool Box::empty(void) const\n{\n    // values will be nonnegative so can sum to check if empty.\n    int total = m_min[vpsc::XDIM] + m_max[vpsc::XDIM] + \n            m_min[vpsc::YDIM] + m_max[vpsc::YDIM];\n    return (total == 0);\n}\n\nvoid Box::outputCode(FILE *fp) const\n{\n    if ((m_min[vpsc::XDIM] == m_max[vpsc::XDIM]) &&\n        (m_min[vpsc::XDIM] == m_min[vpsc::YDIM]) &&\n        (m_min[vpsc::XDIM] == m_max[vpsc::YDIM]))\n    {\n        fprintf(fp, \"Box(%g)\", m_min[vpsc::XDIM]);\n    }\n    else\n    {\n        fprintf(fp, \"Box(%g, %g, %g, %g)\", m_min[vpsc::XDIM],\n                m_max[vpsc::XDIM], m_min[vpsc::YDIM], m_max[vpsc::YDIM]);\n    }\n}\n\nvpsc::Rectangle Box::rectangleByApplyingBox(\n        const vpsc::Rectangle rectangle) const\n{\n    if (!rectangle.isValid())\n    {\n        return rectangle;\n    }\n\n    return vpsc::Rectangle(\n            rectangle.getMinX() - m_min[vpsc::XDIM], \n            rectangle.getMaxX() + m_max[vpsc::XDIM], \n            rectangle.getMinY() - m_min[vpsc::YDIM], \n            rectangle.getMaxY() + m_max[vpsc::YDIM]);\n}\n\ndouble Box::nonNegative(double value)\n{\n    return (value >= 0) ? value: 0;\n}\n\ndouble Box::min(size_t dim) const\n{\n    return (dim < 2) ? m_min[dim] : 0;\n}\n\ndouble Box::max(size_t dim) const\n{\n    return (dim < 2) ? m_max[dim] : 0;\n}\n\n\n}\n\n"
  },
  {
    "path": "cola/libcola/box.h",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libcola - A library providing force-directed network layout using the \n *           stress-majorization method subject to separation constraints.\n *\n * Copyright (C) 2014  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n * Author(s):  Michael Wybrow\n *\n*/\n\n#ifndef LIBCOLA_BOX_H\n#define LIBCOLA_BOX_H\n\n#include <cstdio>\n\n#include \"libvpsc/rectangle.h\"\n\n\nnamespace cola {\n\n/**\n * @brief A box consisting of four edge values for representing padding or \n *        margins for rectangles.\n */\nclass Box\n{\n    public:\n        /**\n         * @brief Constructs a padding or margin box consisting of a value for\n         *        each edge.\n         *\n         * Values should be nonnegative.\n         *\n         * @param[in] xMin  Minimum horizontal value.\n         * @param[in] xMax  Maximum horizontal value.\n         * @param[in] yMin  Minimum vertical value.\n         * @param[in] yMax  Maximum vertical value.\n         */\n        Box(double xMin, double xMax, double yMin, double yMax);\n        /**\n         * @brief Constructs a padding or margin box consisting of a value for\n         *        each edge.\n         *\n         * Values should be nonnegative.\n         *\n         * @param[in] all   The value to be used for all four edges.\n         */\n        Box(double all);\n        /**\n         * @brief Constructs an empty padding or margin box.\n         */\n        Box();\n        ~Box();\n\n        bool empty(void) const;\n        double min(size_t dim) const;\n        double max(size_t dim) const;\n        void outputCode(FILE *fp) const;\n        vpsc::Rectangle rectangleByApplyingBox(\n                const vpsc::Rectangle rectangle) const;\n\n   private:\n        static double nonNegative(double value);\n\n        double m_min[2];\n        double m_max[2];\n};\n\n} // namespace cola\n#endif\n"
  },
  {
    "path": "cola/libcola/cc_clustercontainmentconstraints.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libcola - A library providing force-directed network layout using the \n *           stress-majorization method subject to separation constraints.\n *\n * Copyright (C) 2010  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n * Author(s):  Michael Wybrow\n *\n*/\n\n#include <sstream>\n\n#include \"libcola/cola.h\"\n#include \"libcola/compound_constraints.h\"\n#include \"libcola/cc_clustercontainmentconstraints.h\"\n\nusing vpsc::XDIM;\nusing vpsc::YDIM;\n\n\nnamespace cola {\n\nstatic const int AboveBoundary = 1;\nstatic const int BelowBoundary = -1;\n\nclass ClusterShapeOffsets : public SubConstraintInfo\n{\n    public:\n        ClusterShapeOffsets(unsigned ind, vpsc::Dim dim, double offset, int boundarySide,\n                unsigned int boundaryVar) :\n            SubConstraintInfo(ind),\n            offset(offset),\n            dim(dim),\n            boundarySide(boundarySide),\n            boundaryVar(boundaryVar)\n        {\n        }\n        double offset;    // half the width or height value\n        vpsc::Dim dim;    // The dimension\n        int boundarySide; // The boundary side we are constraining on.\n        unsigned int boundaryVar; // The boundary var.\n};\n\n\nClusterContainmentConstraints::ClusterContainmentConstraints(Cluster *cluster, \n        unsigned int priority, std::vector<vpsc::Rectangle*>& boundingBoxes)\n    : CompoundConstraint(vpsc::HORIZONTAL, priority)\n{\n    Box padding = cluster->padding();\n    _combineSubConstraints = true;\n    for (std::set<unsigned>::iterator curr = cluster->nodes.begin();\n            curr != cluster->nodes.end(); ++curr)\n    {\n        unsigned id = *curr;\n        double halfW = (boundingBoxes[id]->width() / 2.0);\n        double halfH = (boundingBoxes[id]->height() / 2.0);\n        _subConstraintInfo.push_back(new ClusterShapeOffsets(\n                id, XDIM, halfW + padding.min(XDIM), AboveBoundary, \n                cluster->clusterVarId));\n        _subConstraintInfo.push_back(new ClusterShapeOffsets(\n                id, XDIM, halfW + padding.max(XDIM), BelowBoundary,\n                cluster->clusterVarId + 1));\n        _subConstraintInfo.push_back(new ClusterShapeOffsets(\n                id, YDIM, halfH + padding.min(YDIM), AboveBoundary,\n                cluster->clusterVarId));\n        _subConstraintInfo.push_back(new ClusterShapeOffsets(\n                id, YDIM, halfH + padding.max(YDIM), BelowBoundary,\n                cluster->clusterVarId + 1));\n    }\n    for (std::vector<Cluster *>::iterator curr = cluster->clusters.begin();\n            curr != cluster->clusters.end(); ++curr)\n    {\n        Cluster *childCluster = *curr;\n        Box margin = childCluster->margin();\n        _subConstraintInfo.push_back(new ClusterShapeOffsets(\n                childCluster->clusterVarId, XDIM, \n                padding.min(XDIM) + margin.min(XDIM), AboveBoundary, \n                cluster->clusterVarId));\n        _subConstraintInfo.push_back(new ClusterShapeOffsets(\n                childCluster->clusterVarId + 1, XDIM,\n                padding.max(XDIM) + margin.max(XDIM), BelowBoundary,\n                cluster->clusterVarId + 1));\n        _subConstraintInfo.push_back(new ClusterShapeOffsets(\n                childCluster->clusterVarId, YDIM,\n                padding.min(YDIM) + margin.min(YDIM), AboveBoundary,\n                cluster->clusterVarId));\n        _subConstraintInfo.push_back(new ClusterShapeOffsets(\n                childCluster->clusterVarId + 1, YDIM,\n                padding.max(YDIM) + margin.max(YDIM), BelowBoundary,\n                cluster->clusterVarId + 1));\n    }\n}\n\n\nstd::string ClusterContainmentConstraints::toString(void) const\n{\n    std::ostringstream stream;\n    stream << \"ClusterContainmentConstraints()\";\n    return stream.str();\n}\n\n\nvoid ClusterContainmentConstraints::generateVariables(const vpsc::Dim dim,\n        vpsc::Variables& vars) \n{\n    COLA_UNUSED(dim);\n    COLA_UNUSED(vars);\n}\n\n\n\nSubConstraintAlternatives \nClusterContainmentConstraints::getCurrSubConstraintAlternatives(vpsc::Variables vs[])\n{\n    SubConstraintAlternatives alternatives;\n\n    ClusterShapeOffsets *info = static_cast<ClusterShapeOffsets *>\n            (_subConstraintInfo[_currSubConstraintIndex]);\n    \n    assertValidVariableIndex(vs[_primaryDim], info->varIndex);\n    if (info->boundarySide == BelowBoundary)\n    {\n        // Constrain the objects with negative offsets to be \n        // to the left of the boundary.\n        vpsc::Constraint constraint = vpsc::Constraint( \n                vs[info->dim][info->varIndex], vs[info->dim][info->boundaryVar], \n                info->offset);\n        alternatives.push_back(SubConstraint(info->dim, constraint));\n    }\n    else\n    {\n        // Constrain the objects with positive offsets to be \n        // to the right of the boundary.\n        vpsc::Constraint constraint = vpsc::Constraint(\n                vs[info->dim][info->boundaryVar], vs[info->dim][info->varIndex], \n                info->offset);\n        alternatives.push_back(SubConstraint(info->dim, constraint));\n    }\n\n    //fprintf(stderr, \"===== BOUNDARYLINE ALTERNATIVES -======\\n\");\n    return alternatives;\n}\n\n\nvoid ClusterContainmentConstraints::generateSeparationConstraints(\n        const vpsc::Dim dim, vpsc::Variables& vs, vpsc::Constraints& cs,\n        std::vector<vpsc::Rectangle*>& bbs) \n{\n    COLA_UNUSED(bbs);\n    for (SubConstraintInfoList::iterator o = _subConstraintInfo.begin();\n            o != _subConstraintInfo.end(); ++o) \n    {\n        ClusterShapeOffsets *info = static_cast<ClusterShapeOffsets *> (*o);\n\n        if (info->dim != dim)\n        {\n            continue;\n        }\n\n        vpsc::Constraint *constraint = nullptr;\n        if (info->boundarySide == BelowBoundary)\n        {\n            // Constrain the objects with negative offsets to be \n            // to the left of the boundary.\n            constraint = new vpsc::Constraint(vs[info->varIndex],\n                    vs[info->boundaryVar], info->offset);\n        }\n        else\n        {\n            // Constrain the objects with positive offsets to be \n            // to the right of the boundary.\n            constraint = new vpsc::Constraint(vs[info->boundaryVar],\n                    vs[info->varIndex], info->offset);\n        }\n        constraint->creator = this;\n        cs.push_back(constraint);\n    }\n}\n\n\n} // namespace cola\n\n"
  },
  {
    "path": "cola/libcola/cc_clustercontainmentconstraints.h",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libcola - A library providing force-directed network layout using the \n *           stress-majorization method subject to separation constraints.\n *\n * Copyright (C) 2010  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n * Author(s):  Michael Wybrow\n *\n*/\n\n#ifndef COLA_CC_CLUSTERCONTAINMENTCONSTRAINTS_H\n#define COLA_CC_CLUSTERCONTAINMENTCONSTRAINTS_H\n\n#include <vector>\n#include \"libcola/compound_constraints.h\"\n\nnamespace vpsc {\nclass Rectangle;\n}\n\nnamespace cola {\n\nclass ClusterContainmentConstraints : public CompoundConstraint\n{\n    public:\n        ClusterContainmentConstraints(Cluster *cluster, unsigned int priority,\n                std::vector<vpsc::Rectangle*>& boundingBoxes);\n        SubConstraintAlternatives getCurrSubConstraintAlternatives(\n                vpsc::Variables vs[]);\n        \n        void generateVariables(const vpsc::Dim dim, vpsc::Variables& vars);\n        void generateSeparationConstraints(const vpsc::Dim dim, \n                vpsc::Variables& vars, vpsc::Constraints& cs,\n                std::vector<vpsc::Rectangle*>& bbs);\n        std::string toString(void) const;\n};\n\n\n} // namespace cola\n#endif // COLA_CC_CLUSTERCONTAINMENTCONSTRAINTS\n"
  },
  {
    "path": "cola/libcola/cc_nonoverlapconstraints.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libcola - A library providing force-directed network layout using the \n *           stress-majorization method subject to separation constraints.\n *\n * Copyright (C) 2010-2014  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  \n *\n * Author(s):  Michael Wybrow\n *\n*/\n\n#include <sstream>\n\n#include \"libcola/cola.h\"\n#include \"libcola/compound_constraints.h\"\n#include \"libcola/cc_nonoverlapconstraints.h\"\n\nusing vpsc::XDIM;\nusing vpsc::YDIM;\n\n\nnamespace cola {\n\n//-----------------------------------------------------------------------------\n// NonOverlapConstraintExemptions code\n//-----------------------------------------------------------------------------\n\nNonOverlapConstraintExemptions::NonOverlapConstraintExemptions()\n{\n}\n\nvoid NonOverlapConstraintExemptions::addExemptGroupOfNodes(\n        ListOfNodeIndexes listOfNodeGroups)\n{\n    m_exempt_pairs.clear();\n\n    const size_t listSize = listOfNodeGroups.size();\n    for (size_t l = 0; l < listSize; ++l)\n    {\n        NodeIndexes ids(listOfNodeGroups[l]);\n\n        // Sort and remove duplicate IDs for this group.\n        std::sort(ids.begin(), ids.end());\n        NodeIndexes::iterator last = std::unique(ids.begin(), ids.end());\n        ids.erase(last, ids.end());\n\n        // Add all combinations of pairs of IDs for this group to m_exempt_pairs\n        const size_t idsSize = ids.size();\n        for (size_t i = 0; i < idsSize; ++i)\n        {\n            for (size_t j = i + 1; j < idsSize; ++j)\n            {\n                m_exempt_pairs.insert(ShapePair(ids[i], ids[j]));\n            }\n        }\n\n    }\n}\n\nbool NonOverlapConstraintExemptions::shapePairIsExempt(\n        ShapePair shapePair) const\n{\n    return (m_exempt_pairs.count(shapePair) == 1);\n}\n\n//-----------------------------------------------------------------------------\n// NonOverlapConstraints code\n//-----------------------------------------------------------------------------\n\nNonOverlapConstraints::NonOverlapConstraints(\n        NonOverlapConstraintExemptions *exemptions, unsigned int priority)\n    : CompoundConstraint(vpsc::HORIZONTAL, priority),\n      pairInfoListSorted(false),\n      initialSortCompleted(false),\n      m_exemptions(exemptions)\n{\n    // All work is done by repeated addShape() calls.\n}\n\nvoid NonOverlapConstraints::addShape(unsigned id, double halfW, double halfH,\n        unsigned int group, std::set<unsigned> exemptions)\n{\n    // Setup pairInfos for all other shapes. \n    for (std::map<unsigned, OverlapShapeOffsets>::iterator curr =\n            shapeOffsets.begin(); curr != shapeOffsets.end(); ++curr)\n    {\n        unsigned otherId = curr->first;\n        if ((shapeOffsets[otherId].group == group) && (id != otherId) && exemptions.count(otherId)==0)\n        {\n            if (m_exemptions &&\n                    m_exemptions->shapePairIsExempt(ShapePair(otherId, id)))\n            {\n                continue;\n            }\n\n            // Apply non-overlap only to objects in the same group (cluster).\n            pairInfoList.push_back(ShapePairInfo(otherId, id));\n        }\n    }\n\n    shapeOffsets[id] = OverlapShapeOffsets(id, halfW, halfH, group);\n}\n\nvoid NonOverlapConstraints::resizeShape(unsigned id, double halfW, double halfH)\n{\n    OverlapShapeOffsets oso = shapeOffsets[id];\n    oso.resize(halfW, halfH);\n}\n\nvoid NonOverlapConstraints::removeShape(unsigned id)\n{\n    // Remove the OverlapShapeOffsets object for this id.\n    shapeOffsets.erase(id);\n    // Remove all ShapePairInfo objects having this id as one of their two indices.\n    std::list<ShapePairInfo>::iterator it = pairInfoList.begin();\n    while (it != pairInfoList.end()) {\n        ShapePairInfo spi = *it;\n        if (spi.varIndex1==id || spi.varIndex2==id) {\n            it = pairInfoList.erase(it); // now it points to next list element after one erased\n        } else {\n            it++;\n        }\n    }\n}\n\n// This is expected to be called after all addNode calls.\nvoid NonOverlapConstraints::addCluster(Cluster *cluster, unsigned int group)\n{\n    unsigned id = cluster->clusterVarId;\n    // Setup pairInfos for all other shapes. \n    for (std::map<unsigned, OverlapShapeOffsets>::iterator curr =\n            shapeOffsets.begin(); curr != shapeOffsets.end(); ++curr)\n    {\n        unsigned otherId = curr->first;\n        if (shapeOffsets[otherId].group != group)\n        {\n            // Don't apply if not in same group.\n            continue;\n        }\n        if (cluster->nodes.count(otherId) > 0)\n        {\n            // Don't apply non-overlap to child nodes.\n            continue;\n        }\n        if (m_cluster_cluster_exemptions.count(ShapePair(id, otherId)) > 0)\n        {\n            // Don't apply  if exempt due to non-strict cluster hierarchy.\n            continue;\n        }\n        // Apply non-overlap only to objects in the same group (cluster).\n        pairInfoList.push_back(ShapePairInfo(otherId, id));\n    }\n    \n    shapeOffsets[id] = OverlapShapeOffsets(id, cluster, group);\n}\n\n\nvoid NonOverlapConstraints::setClusterClusterExemptions(\n        std::set<ShapePair> exemptions)\n{\n    m_cluster_cluster_exemptions = exemptions;\n}\n\nvoid NonOverlapConstraints::generateVariables(const vpsc::Dim dim,\n        vpsc::Variables& vars) \n{\n    COLA_UNUSED(dim);\n    COLA_UNUSED(vars);\n}\n\nvoid NonOverlapConstraints::computeOverlapForShapePairInfo(ShapePairInfo& info,\n        vpsc::Variables vs[])\n{\n    OverlapShapeOffsets& shape1 = shapeOffsets[info.varIndex1];\n    OverlapShapeOffsets& shape2 = shapeOffsets[info.varIndex2];\n\n    double xPos1 = vs[0][info.varIndex1]->finalPosition;\n    double xPos2 = vs[0][info.varIndex2]->finalPosition;\n    double yPos1 = vs[1][info.varIndex1]->finalPosition;\n    double yPos2 = vs[1][info.varIndex2]->finalPosition;\n\n    double left1   = xPos1 - shape1.halfDim[0];\n    double right1  = xPos1 + shape1.halfDim[0];\n    double bottom1 = yPos1 - shape1.halfDim[1];\n    double top1    = yPos1 + shape1.halfDim[1];\n\n    if (shape1.cluster)\n    {\n        COLA_ASSERT(shape1.halfDim[0] == 0);\n        COLA_ASSERT(shape1.halfDim[1] == 0);\n        COLA_ASSERT(info.varIndex1 + 1U < vs[0].size());\n        right1 = vs[0][info.varIndex1 + 1]->finalPosition;\n        COLA_ASSERT(info.varIndex1 + 1U < vs[1].size());\n        top1    = vs[1][info.varIndex1 + 1]->finalPosition;\n        left1 -= shape1.rectPadding.min(XDIM);\n        bottom1 -= shape1.rectPadding.min(YDIM);\n        right1 += shape1.rectPadding.max(XDIM);\n        top1 += shape1.rectPadding.max(YDIM);\n    }\n\n    double left2   = xPos2 - shape2.halfDim[0];\n    double right2  = xPos2 + shape2.halfDim[0];\n    double bottom2 = yPos2 - shape2.halfDim[1];\n    double top2    = yPos2 + shape2.halfDim[1];\n\n    if (shape2.cluster)\n    {\n        COLA_ASSERT(shape2.halfDim[0] == 0);\n        COLA_ASSERT(shape2.halfDim[1] == 0);\n        COLA_ASSERT(info.varIndex2 + 1U < vs[0].size());\n        right2 = vs[0][info.varIndex2 + 1]->finalPosition;\n        COLA_ASSERT(info.varIndex2 + 1U < vs[1].size());\n        top2   = vs[1][info.varIndex2 + 1]->finalPosition;\n        left2 -= shape2.rectPadding.min(XDIM);\n        bottom2 -= shape2.rectPadding.min(YDIM);\n        right2 += shape2.rectPadding.max(XDIM);\n        top2 += shape2.rectPadding.max(YDIM);\n    }\n\n    // If lr < 0, then left edge of shape1 is on the left \n    // of right edge of shape2.\n    double spaceR = left2 - right1;\n    double spaceL = left1 - right2;\n    // Below\n    double spaceA = bottom2 - top1;\n    // Above\n    double spaceB = bottom1 - top2;\n\n    double costL = 0;\n    double costR = 0;\n    double costB = 0;\n    double costA = 0;\n    info.overlapMax = 0;\n    bool xOverlap = false;\n    bool yOverlap = false;\n    if ((spaceR < 0) && (spaceL < 0))\n    {\n        costL = std::max(-spaceL, 0.0);\n        costR = std::max(-spaceR, 0.0);\n\n        info.overlapMax = std::max(costL, costR);\n\n        xOverlap = true;\n    }\n    if ((spaceB < 0) && (spaceA < 0))\n    {\n        costB = std::max(-spaceB, 0.0);\n        costA = std::max(-spaceA, 0.0);\n\n        info.overlapMax = std::max(info.overlapMax, costB);\n        info.overlapMax = std::max(info.overlapMax, costA);\n\n        yOverlap = true;\n    }\n\n    if (!xOverlap || !yOverlap)\n    {\n        // Overlap must occur in both dimensions.\n        info.overlapMax = 0;\n    }\n    else\n    {\n        // Increase the overlap value for overlap where one shape is fully\n        // within the other.  This results in these situations being\n        // resolved first and will sometimes prevent us from committing to\n        // bad non-overlap choices and getting stuck later.\n        // XXX Another alternative would be to look at previously added\n        //     non-overlap constraints that become unsatified and then \n        //     allow them to be rechosen maybe just a single time.\n        double penalty = 100000;\n        if ( (left1 >= left2) && (right1 <= right2) &&\n             (bottom1 >= bottom2) && (top1 <= top2) )\n        {\n            // Shape 1 is inside shape 2.\n            double smallShapeArea = (right1 - left1) * (top1 - bottom1);\n            info.overlapMax = penalty + smallShapeArea;\n        }\n        else if ( (left2 >= left1) && (right2 <= right1) &&\n             (bottom2 >= bottom1) && (top2 <= top1) )\n        {\n            // Shape 2 is inside shape 1.\n            double smallShapeArea = (right2 - left2) * (top2 - bottom2);\n            info.overlapMax = penalty + smallShapeArea;\n        }\n        // There is overlap.\n        //printf(\"[%02d][%02d] L %g, R %G, B %g, A %g\\n\", info.varIndex1, \n        //        info.varIndex2, spaceL, spaceR, spaceB, spaceA);\n    }\n}\n\nstd::string NonOverlapConstraints::toString(void) const\n{\n    std::ostringstream stream;\n    stream << \"NonOverlapConstraints()\";\n    return stream.str();\n}\n\nvoid NonOverlapConstraints::computeAndSortOverlap(vpsc::Variables vs[])\n{\n    for (std::list<ShapePairInfo>::iterator curr = pairInfoList.begin();\n            curr != pairInfoList.end(); ++curr)\n    {\n        ShapePairInfo& info = static_cast<ShapePairInfo&> (*curr);\n        \n        if (info.processed)\n        {\n            // Once we reach the processed nodes, which will always be at \n            // the back, we can some computing overlap since this no longer\n            // matters.\n            break;\n        }\n        computeOverlapForShapePairInfo(info, vs);\n    }\n    pairInfoList.sort();\n}\n\n\nvoid NonOverlapConstraints::markCurrSubConstraintAsActive(const bool satisfiable)\n{\n    ShapePairInfo info = pairInfoList.front();\n    pairInfoList.pop_front();\n\n    info.processed = true;\n    info.satisfied = satisfiable;\n    info.overlapMax = 0;\n    \n    pairInfoList.push_back(info);\n    pairInfoListSorted = false;\n}\n\n\n\nSubConstraintAlternatives \nNonOverlapConstraints::getCurrSubConstraintAlternatives(vpsc::Variables vs[])\n{\n    SubConstraintAlternatives alternatives;\n    if (initialSortCompleted == false)\n    {\n        // Initally sort the shape pair info objects.\n        computeAndSortOverlap(vs);\n        pairInfoListSorted = true;\n        initialSortCompleted = true;\n    }\n\n    // Take the first in the list.\n    ShapePairInfo& info = pairInfoList.front();\n    if (pairInfoListSorted == false)\n    {\n        // Only need to compute if not sorted.\n        computeOverlapForShapePairInfo(info, vs);\n    }\n\n    if (info.overlapMax == 0)\n    {\n        if (pairInfoListSorted)\n        {\n            // Seeing no overlap in the sorted list means we have solved\n            // all non-overlap.  Nothing more to do.\n            _currSubConstraintIndex = pairInfoList.size();\n            return alternatives;\n        }\n        computeAndSortOverlap(vs);\n        pairInfoListSorted = true;\n        return alternatives;\n    }\n    OverlapShapeOffsets& shape1 = shapeOffsets[info.varIndex1];\n    OverlapShapeOffsets& shape2 = shapeOffsets[info.varIndex2];\n\n    double xSepL = shape1.halfDim[0] + shape2.halfDim[0];\n    double ySepB = shape1.halfDim[1] + shape2.halfDim[1];\n    double xSepR = xSepL;\n    double ySepT = ySepB;\n\n    unsigned varIndexL1 = info.varIndex1;\n    unsigned varIndexL2 = info.varIndex2;\n    // Clusters have left and right variables, instead of centre variables.\n    unsigned varIndexR1 = \n            (shape1.cluster) ? (info.varIndex1 + 1) : info.varIndex1;\n    unsigned varIndexR2 = \n            (shape2.cluster) ? (info.varIndex2 + 1) : info.varIndex2;\n\n    assertValidVariableIndex(vs[XDIM], varIndexL1);\n    assertValidVariableIndex(vs[YDIM], varIndexL1);\n    assertValidVariableIndex(vs[XDIM], varIndexR1);\n    assertValidVariableIndex(vs[YDIM], varIndexR1);\n    assertValidVariableIndex(vs[XDIM], varIndexL2);\n    assertValidVariableIndex(vs[YDIM], varIndexL2);\n    assertValidVariableIndex(vs[XDIM], varIndexR2);\n    assertValidVariableIndex(vs[YDIM], varIndexR2);\n\n    // \n    double xSepCostL = xSepL;\n    double xSepCostR = xSepR;\n    double ySepCostB = ySepB;\n    double ySepCostT = ySepT;\n\n    double desiredX1 = vs[XDIM][info.varIndex1]->desiredPosition;\n    double desiredY1 = vs[YDIM][info.varIndex1]->desiredPosition;\n    double desiredX2 = vs[XDIM][info.varIndex2]->desiredPosition;\n    double desiredY2 = vs[YDIM][info.varIndex2]->desiredPosition;\n    \n    // Clusters have two variables instead of a centre variable -- one for\n    // each boundary side, so we need to remap the desired positions and the\n    // separations values for the purposes of cost sorting.\n    if (shape1.cluster)\n    {\n        double width = vs[XDIM][info.varIndex1 + 1]->finalPosition -\n                vs[XDIM][info.varIndex1]->finalPosition;\n        double height = vs[YDIM][info.varIndex1 + 1]->finalPosition -\n                vs[YDIM][info.varIndex1]->finalPosition;\n        desiredX1 += width / 2;\n        desiredY1 += height / 2;\n        xSepCostL += width / 2;\n        xSepCostR += width / 2;\n        ySepCostB += height / 2;\n        ySepCostT += height / 2;\n        xSepL += shape1.rectPadding.min(XDIM);\n        xSepR += shape1.rectPadding.max(XDIM);\n        ySepB += shape1.rectPadding.min(YDIM);\n        ySepT += shape1.rectPadding.max(YDIM);\n    }\n    if (shape2.cluster)\n    {\n        double width = vs[XDIM][info.varIndex2 + 1]->finalPosition -\n                vs[XDIM][info.varIndex2]->finalPosition;\n        double height = vs[YDIM][info.varIndex2 + 1]->finalPosition -\n                vs[YDIM][info.varIndex2]->finalPosition;\n        desiredX2 += width / 2;\n        desiredY2 += height / 2;\n        xSepCostL += width / 2;\n        xSepCostR += width / 2;\n        ySepCostB += height / 2;\n        ySepCostT += height / 2;\n        xSepL += shape2.rectPadding.min(XDIM);\n        xSepR += shape2.rectPadding.max(XDIM);\n        ySepB += shape2.rectPadding.min(YDIM);\n        ySepT += shape2.rectPadding.max(YDIM);\n    }\n\n    // We get problems with numerical inaccuracy in the topology constraint\n    // generation, so make sure the rectagles are separated by at least a \n    // tiny distance.\n    xSepL += 10e-10;\n    xSepR += 10e-10;\n    ySepB += 10e-10;\n    ySepT += 10e-10;\n\n    // Compute the cost to move in each direction based on the \n    // desired positions for the two objects.\n    double costR = xSepCostR - (desiredX2 - desiredX1);\n    double costL = xSepCostL - (desiredX1 - desiredX2);\n    \n    double costT = ySepCostT - (desiredY2 - desiredY1);\n    double costB = ySepCostB - (desiredY1 - desiredY2);\n\n    vpsc::Constraint constraintL(vs[XDIM][varIndexR2], \n            vs[XDIM][varIndexL1], xSepL);\n    alternatives.push_back(SubConstraint(XDIM, constraintL, costL));\n\n    vpsc::Constraint constraintR(vs[XDIM][varIndexR1], \n            vs[XDIM][varIndexL2], xSepR);\n    alternatives.push_back(SubConstraint(XDIM, constraintR, costR));\n\n    vpsc::Constraint constraintB(vs[YDIM][varIndexR2], \n            vs[YDIM][varIndexL1], ySepB);\n    alternatives.push_back(SubConstraint(YDIM, constraintB, costB));\n\n    vpsc::Constraint constraintT(vs[YDIM][varIndexR1], \n            vs[YDIM][varIndexL2], ySepT);\n    alternatives.push_back(SubConstraint(YDIM, constraintT, costT));\n    \n    //fprintf(stderr, \"===== NONOVERLAP ALTERNATIVES -====== \\n\");\n\n    return alternatives;\n}\n\n\nbool NonOverlapConstraints::subConstraintsRemaining(void) const\n{\n    //printf(\". %3d of %4d\\n\", _currSubConstraintIndex, pairInfoList.size());\n    return _currSubConstraintIndex < pairInfoList.size();\n}\n\n\nvoid NonOverlapConstraints::markAllSubConstraintsAsInactive(void)\n{\n    for (std::list<ShapePairInfo>::iterator curr = pairInfoList.begin();\n            curr != pairInfoList.end(); ++curr)\n    {\n        ShapePairInfo& info = (*curr);\n        info.satisfied = false;\n        info.processed = false;\n    }\n    _currSubConstraintIndex = 0;\n    initialSortCompleted = false;\n}\n\n\nvoid NonOverlapConstraints::generateSeparationConstraints(\n        const vpsc::Dim dim, vpsc::Variables& vs, vpsc::Constraints& cs,\n        std::vector<vpsc::Rectangle*>& boundingBoxes) \n{\n    for (std::list<ShapePairInfo>::iterator info = pairInfoList.begin();\n            info != pairInfoList.end(); ++info)\n    {\n        assertValidVariableIndex(vs, info->varIndex1);\n        assertValidVariableIndex(vs, info->varIndex2);\n        \n        OverlapShapeOffsets& shape1 = shapeOffsets[info->varIndex1];\n        OverlapShapeOffsets& shape2 = shapeOffsets[info->varIndex2];\n        \n        vpsc::Rectangle rect1 = (shape1.cluster) ?\n                shape1.cluster->bounds : *boundingBoxes[info->varIndex1];\n        vpsc::Rectangle rect2 = (shape2.cluster) ?\n                shape2.cluster->bounds : *boundingBoxes[info->varIndex2];\n\n        double pos1 = rect1.getCentreD(dim);\n        double pos2 = rect2.getCentreD(dim);\n\n        double below1 = shape1.halfDim[dim];\n        double above1 = shape1.halfDim[dim];\n        double below2 = shape2.halfDim[dim];\n        double above2 = shape2.halfDim[dim];\n\n        vpsc::Variable *varLeft1 = nullptr;\n        vpsc::Variable *varLeft2 = nullptr;\n        vpsc::Variable *varRight1 = nullptr;\n        vpsc::Variable *varRight2 = nullptr;\n        if (shape1.cluster)\n        {\n            // Must constraint to cluster boundary variables.\n            varLeft1 = vs[shape1.cluster->clusterVarId];\n            varRight1 = vs[shape1.cluster->clusterVarId + 1];\n            rect1 = shape1.cluster->margin().rectangleByApplyingBox(rect1);\n            below1 = shape1.cluster->margin().min(dim);\n            above1 = shape1.cluster->margin().max(dim);\n        }\n        else\n        {\n            // Must constrain to rectangle centre postion variable.\n            varLeft1 = varRight1 = vs[info->varIndex1];\n        }\n\n        if (shape2.cluster)\n        {\n            // Must constraint to cluster boundary variables.\n            varLeft2 = vs[shape2.cluster->clusterVarId];\n            varRight2 = vs[shape2.cluster->clusterVarId + 1];\n            rect2 = shape2.cluster->margin().rectangleByApplyingBox(rect2);\n            below2 = shape2.cluster->margin().min(dim);\n            above2 = shape2.cluster->margin().max(dim);\n        }\n        else\n        {\n            // Must constrain to rectangle centre postion variable.\n            varLeft2 = varRight2 = vs[info->varIndex2];\n        }\n\n        if (rect1.overlapD(!dim, &rect2) > 0.0005)\n        {\n            vpsc::Constraint *constraint = nullptr;\n            if (pos1 < pos2)\n            {\n                constraint = new vpsc::Constraint(varRight1, varLeft2,\n                             above1 + below2);\n            }\n            else\n            {\n                constraint = new vpsc::Constraint(varRight2, varLeft1,\n                        below1 + above2);\n            }\n            constraint->creator = this;\n            cs.push_back(constraint);\n        }\n    }\n}\n\n\n} // namespace cola\n"
  },
  {
    "path": "cola/libcola/cc_nonoverlapconstraints.h",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libcola - A library providing force-directed network layout using the \n *           stress-majorization method subject to separation constraints.\n *\n * Copyright (C) 2010-2014  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n * Author(s):  Michael Wybrow\n *\n*/\n\n#ifndef COLA_CC_NONOVERLAPCONSTRAINTS_H\n#define COLA_CC_NONOVERLAPCONSTRAINTS_H\n\n#include <vector>\n\n#include \"libcola/cola.h\"\n#include \"libcola/compound_constraints.h\"\n#include \"libcola/shapepair.h\"\n\nnamespace vpsc {\nclass Rectangle;\n}\n\nnamespace cola {\n\nclass Cluster;\n\nclass OverlapShapeOffsets : public SubConstraintInfo\n{\n    public:\n        OverlapShapeOffsets(unsigned ind, double xOffset, double yOffset,\n                unsigned int group)\n            : SubConstraintInfo(ind),\n              cluster(nullptr),\n              rectPadding(0),\n              group(group)\n        {\n            halfDim[0] = xOffset;\n            halfDim[1] = yOffset;\n        }\n        OverlapShapeOffsets(unsigned ind, Cluster *cluster, unsigned int group)\n            : SubConstraintInfo(ind),\n              cluster(cluster),\n              rectPadding(cluster->margin()),\n              group(group)\n        {\n            halfDim[0] = 0;\n            halfDim[1] = 0;\n        }\n        OverlapShapeOffsets()\n            : SubConstraintInfo(1000000),\n              cluster(nullptr),\n              rectPadding(0)\n        {\n        }\n        bool usesClusterBounds(void) const\n        {\n            return (cluster && !cluster->clusterIsFromFixedRectangle());\n        }\n        void resize(double xOffset, double yOffset)\n        {\n            halfDim[0] = xOffset;\n            halfDim[1] = yOffset;\n        }\n        Cluster *cluster;\n        double halfDim[2];   // Half width and height values.\n        Box rectPadding;  // Used for cluster padding.\n        unsigned int group;\n};\n\n\nclass ShapePairInfo\n{\n    public:\n        ShapePairInfo(unsigned ind1, unsigned ind2, unsigned ord = 1)\n            : order(ord),\n              satisfied(false),\n              processed(false)\n        {\n            COLA_ASSERT(ind1 != ind2);\n            // Assign the lesser value to varIndex1.\n            varIndex1 = (ind1 < ind2) ? ind1 : ind2;\n            // Assign the greater value to varIndex2.\n            varIndex2 = (ind1 > ind2) ? ind1 : ind2;\n        }\n        bool operator<(const ShapePairInfo& rhs) const\n        {\n            // Make sure the processed ones are at the end after sorting.\n            int processedInt = processed ? 1 : 0;\n            int rhsProcessedInt = rhs.processed ? 1 : 0;\n            if (processedInt != rhsProcessedInt)\n            {\n                return processedInt < rhsProcessedInt;\n            }\n            // Use cluster ordering for primary sorting.\n            if (order != rhs.order)\n            {\n                return order < rhs.order;\n            }\n            return overlapMax > rhs.overlapMax;\n        }\n        unsigned short order;\n        unsigned short varIndex1;\n        unsigned short varIndex2;\n        bool satisfied;\n        bool processed;\n        double overlapMax;\n};\n\n\n// Stores IDs of all rectangles exempt from non-overlap constraints.\nclass NonOverlapConstraintExemptions {\n    public:\n        NonOverlapConstraintExemptions();\n        void addExemptGroupOfNodes(ListOfNodeIndexes listOfNodeGroups);\n        bool shapePairIsExempt(ShapePair shapePair) const;\n        std::set<ShapePair> getExemptPairs(void) {return m_exempt_pairs;}\n\n    private:\n        std::set<ShapePair> m_exempt_pairs;\n};\n\n// Non-overlap constraints prevent a set of given shapes from overlapping.\nclass NonOverlapConstraints : public CompoundConstraint {\n    public:\n        NonOverlapConstraints(NonOverlapConstraintExemptions *exemptions,\n                unsigned int priority = PRIORITY_NONOVERLAP);\n        //! @brief Use this method to add all the shapes between which you want\n        //!        to prevent overlaps.\n        //! @param id     This will be used as index into both the vars and\n        //!               boundingBoxes vectors when you call the\n        //!               generateSeparationConstraints method.\n        //! @param halfW  If you add two shapes with half-widths hwi and hwj, then\n        //!               if a horizontal separation constraint is generated between\n        //!               them its gap will be hwi + hwj.\n        //! @param halfH  Similar to halfW.\n        //! @param group  Assign a group number to this shape. A separation constraint\n        //!               will be generated between two shapes only if they belong to\n        //!               the same group. This is useful for clusters.\n        //! @param exemptions  Optional set of IDs of shapes to be skipped, i.e. such that\n        //!                    a separation constraint should /not/ be generated between\n        //!                    that shape and the one being added.\n        void addShape(unsigned id, double halfW, double halfH, \n                unsigned int group = 1, std::set<unsigned> exemptions = std::set<unsigned>());\n        void resizeShape(unsigned id, double halfW, double halfH);\n        void removeShape(unsigned id);\n        void addCluster(Cluster *cluster, unsigned int group);\n        void computeAndSortOverlap(vpsc::Variables vs[]);\n        void markCurrSubConstraintAsActive(const bool satisfiable);\n        void markAllSubConstraintsAsInactive(void);\n        bool subConstraintsRemaining(void) const;\n        SubConstraintAlternatives getCurrSubConstraintAlternatives(\n                vpsc::Variables vs[]);\n        std::string toString(void) const;\n        void setClusterClusterExemptions(std::set<ShapePair> exemptions);\n\n        void generateVariables(const vpsc::Dim dim, vpsc::Variables& vars);\n        void generateSeparationConstraints(const vpsc::Dim dim, \n                vpsc::Variables& vars, vpsc::Constraints& gcs);\n        //! @brief Generate separation constraints in one dimension, to ensure\n        //!        nonoverlap between all shapes in that dimension.\n        //! @param dim   The dimension for which to generate constraints.\n        //! @param vars  The variables between which the constraints will hold.\n        //! @param gcs   The generated constraints will be added to this vector.\n        //! @param boundingBoxes  For those id's corresponding to added shapes\n        //!      (not clusters), the rectangle boundingBox[id] will be consulted\n        //!      in order to determine:\n        //!      (1) whether a separation constraint is called for, i.e. whether the\n        //!          shapes in question span any of the same coods in the dimension\n        //!          opposite to dim;\n        //!      (2) which var is left and which is right in the separation constraint.\n        //!      Note however that the dimensions of the boundingBoxes do NOT determine\n        //!      the gaps of the separation constraints, which are instead based on the\n        //!      half-width and half-height passed when adding the shapes.\n        void generateSeparationConstraints(const vpsc::Dim dim, \n                vpsc::Variables& vars, vpsc::Constraints& gcs,\n                std::vector<vpsc::Rectangle*>& boundingBoxes);\n\n    private:\n        void computeOverlapForShapePairInfo(ShapePairInfo& info,\n                vpsc::Variables vs[]);\n        \n        std::list<ShapePairInfo> pairInfoList;\n        std::map<unsigned, OverlapShapeOffsets> shapeOffsets;\n        bool pairInfoListSorted;\n        bool initialSortCompleted;\n\n        // Cluster variables\n        size_t clusterVarStartIndex;\n        size_t currClusterIndex;\n        size_t clusterMode;\n\n        NonOverlapConstraintExemptions *m_exemptions;\n        std::set<ShapePair> m_cluster_cluster_exemptions;\n};\n\n} // namespace cola\n#endif // COLA_CC_NONOVERLAPCONSTRAINTS\n"
  },
  {
    "path": "cola/libcola/cluster.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libcola - A library providing force-directed network layout using the \n *           stress-majorization method subject to separation constraints.\n *\n * Copyright (C) 2006-2014  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  \n *\n * Author(s):  Tim Dwyer\n *             Michael Wybrow\n*/\n\n#include \"libvpsc/assertions.h\"\n#include \"libcola/commondefs.h\"\n#include \"libcola/cola.h\"\n#include \"libcola/convex_hull.h\"\n#include \"libcola/cluster.h\"\n\nusing vpsc::generateXConstraints;\nusing vpsc::generateYConstraints;\nusing namespace std;\n\nnamespace cola {\n\nCluster::Cluster()\n    : bounds(),\n      clusterVarId(0),\n      varWeight(0.0001),\n      internalEdgeWeightFactor(1.), \n      desiredBoundsSet(false), \n      desiredBounds()\n{\n    // XXX We use a really low weight here until we properly set the source \n    //     of the variable value back in updatePositions() type manner.\n    varWeight = 0.0000001;\n}\n\nCluster::~Cluster()\n{\n    for_each(clusters.begin(), clusters.end(), delete_object());\n    clusters.clear();\n}\n\nvoid Cluster::setDesiredBounds(const vpsc::Rectangle db) \n{\n    desiredBoundsSet = true;\n    desiredBounds = db;\n}\n\nvoid Cluster::unsetDesiredBounds(void)\n{\n    desiredBoundsSet=false;\n}\n\n\n// Checks to see if the shape at the given index is contained within this\n// cluster or its child clusters.\n//\nvoid Cluster::countContainedNodes(std::vector<unsigned>& counts)\n{\n    vector<unsigned> invalidNodes;\n    for (set<unsigned>::iterator it = nodes.begin(); it != nodes.end(); ++it)\n    {\n        unsigned nodeIndex = *it;\n        if (nodeIndex < counts.size())\n        {\n            // Node index is valid, increase count.\n            counts[*it] += 1;\n        }\n        else\n        {\n            fprintf(stderr, \"Warning: Invalid node index %u specified in \"\n                    \"cluster. Ignoring...\\n\", nodeIndex);\n            invalidNodes.push_back(nodeIndex);\n        }\n    }\n    for (size_t i = 0; i < invalidNodes.size(); ++i)\n    {\n        nodes.erase(invalidNodes[i]);\n    }\n\n    for (vector<Cluster*>::const_iterator i = clusters.begin(); \n            i != clusters.end(); ++i)\n    {\n        (*i)->countContainedNodes(counts);\n    }\n}\n\nvoid Cluster::computeBoundingRect(const vpsc::Rectangles& rs) \n{\n    bounds = vpsc::Rectangle();\n    for (vector<Cluster*>::const_iterator i = clusters.begin(); \n            i != clusters.end(); ++i)\n    {\n        (*i)->computeBoundingRect(rs);\n        vpsc::Rectangle rectangle = \n                (*i)->margin().rectangleByApplyingBox((*i)->bounds);\n        bounds = bounds.unionWith(rectangle);\n    }\n    for (set<unsigned>::const_iterator i = nodes.begin(); \n            i != nodes.end(); ++i)\n    {\n        vpsc::Rectangle* r=rs[*i];\n        bounds = bounds.unionWith(*r);\n    }\n    bounds = padding().rectangleByApplyingBox(bounds);\n}\n\nvoid Cluster::computeVarRect(vpsc::Variables& vars, size_t dim)\n{\n    if ((clusterVarId > 0) && (vars.size() > clusterVarId))\n    {\n        varRect.setMinD(dim, vars[clusterVarId]->finalPosition);\n        varRect.setMaxD(dim, vars[clusterVarId + 1]->finalPosition);\n    }\n\n    for (vector<Cluster*>::const_iterator i = clusters.begin(); \n            i != clusters.end(); ++i)\n    {\n        (*i)->computeVarRect(vars, dim);\n    }\n}\n\nbool Cluster::clusterIsFromFixedRectangle(void) const\n{\n    return false;\n}\n\nvoid ConvexCluster::computeBoundary(const vpsc::Rectangles& rs) \n{\n    unsigned n = 4 * nodes.size();\n    valarray<double> X(n);\n    valarray<double> Y(n);\n    unsigned pctr = 0;\n    vector<unsigned> nodesVector(nodes.begin(), nodes.end());\n    for (size_t i = 0; i < nodesVector.size(); ++i)\n    {\n        vpsc::Rectangle* r=rs[nodesVector[i]];\n        // Bottom Right\n        X[pctr]=r->getMaxX();\n        Y[pctr++]=r->getMinY();\n        // Top Right\n        X[pctr]=r->getMaxX();\n        Y[pctr++]=r->getMaxY();\n        // Top Left\n        X[pctr]=r->getMinX();\n        Y[pctr++]=r->getMaxY();\n        // Bottom Left\n        X[pctr]=r->getMinX();\n        Y[pctr++]=r->getMinY();\n    }\n    /*\n    for(unsigned i=0;i<n;i++) {\n        printf(\"X[%d]=%f, Y[%d]=%f;\\n\",i,X[i],i,Y[i]);\n    }\n    */\n    vector<unsigned> hull;\n    hull::convex(X,Y,hull);\n    hullX.resize(hull.size());\n    hullY.resize(hull.size());\n    hullRIDs.resize(hull.size());\n    hullCorners.resize(hull.size());\n    for (unsigned j=0;j<hull.size();j++) \n    {\n        hullX[j]=X[hull[j]];\n        hullY[j]=Y[hull[j]];\n        hullRIDs[j]=nodesVector[hull[j]/4];\n        hullCorners[j]=hull[j]%4;\n    }\n}\n\n\nvoid ConvexCluster::printCreationCode(FILE *fp) const\n{\n    fprintf(fp, \"    ConvexCluster *cluster%llu = new ConvexCluster();\\n\",\n            (unsigned long long) this);\n    for(set<unsigned>::const_iterator i = nodes.begin(); \n            i != nodes.end(); ++i)\n    {\n        fprintf(fp, \"    cluster%llu->addChildNode(%u);\\n\",\n                (unsigned long long) this, *i);\n    }\n    for(vector<Cluster *>::const_iterator i = clusters.begin(); \n            i != clusters.end(); ++i)\n    {\n        (*i)->printCreationCode(fp);\n        fprintf(fp, \"    cluster%llu->addChildCluster(cluster%llu);\\n\",\n                (unsigned long long) this, (unsigned long long) *i);\n    }\n}\n\nvoid ConvexCluster::outputToSVG(FILE *fp) const\n{\n    for(vector<Cluster *>::const_iterator i = clusters.begin(); \n            i != clusters.end(); ++i)\n    {\n        (*i)->outputToSVG(fp);\n    }\n}\n\n\nRectangularCluster::RectangularCluster()\n    : Cluster(),\n      m_rectangle_index(-1),\n      m_margin(0),\n      m_padding(0)\n{\n    minEdgeRect[vpsc::XDIM] = nullptr;\n    minEdgeRect[vpsc::YDIM] = nullptr;\n    maxEdgeRect[vpsc::XDIM] = nullptr;\n    maxEdgeRect[vpsc::YDIM] = nullptr;\n}\n\nRectangularCluster::RectangularCluster(unsigned rectIndex)\n    : Cluster(),\n      m_rectangle_index(rectIndex),\n      m_margin(0),\n      m_padding(0)\n{\n    minEdgeRect[vpsc::XDIM] = nullptr;\n    minEdgeRect[vpsc::YDIM] = nullptr;\n    maxEdgeRect[vpsc::XDIM] = nullptr;\n    maxEdgeRect[vpsc::YDIM] = nullptr;\n}\n\nRectangularCluster::~RectangularCluster()\n{\n    for (size_t dim = 0; dim < 2; ++dim)\n    {\n        if (minEdgeRect[dim])\n        {\n            delete minEdgeRect[dim];\n            minEdgeRect[dim] = nullptr;\n        }\n        if (maxEdgeRect[dim])\n        {\n            delete maxEdgeRect[dim];\n            maxEdgeRect[dim] = nullptr;\n        }\n    }\n}\n \nvoid RectangularCluster::setMargin(const Box margin)\n{\n    m_margin = margin;\n}\n\n\nvoid RectangularCluster::setMargin(double margin)\n{\n    m_margin = Box(margin);\n}\n\n\nBox RectangularCluster::margin(void) const\n{\n    return m_margin;\n}\n\n\nvoid RectangularCluster::setPadding(const Box padding)\n{\n    m_padding = padding;\n}\n\n\nvoid RectangularCluster::setPadding(double padding)\n{\n    m_padding = Box(padding);\n}\n\n\nBox RectangularCluster::padding(void) const\n{\n    return m_padding;\n}\n\n\nvoid RectangularCluster::countContainedNodes(std::vector<unsigned>& counts)\n{\n    if (m_rectangle_index >= 0)\n    {\n        // This cluster is the shape in question.\n        counts[m_rectangle_index] += 1;\n    }\n    Cluster::countContainedNodes(counts);\n}\n\n\nvoid RectangularCluster::generateFixedRectangleConstraints(\n        cola::CompoundConstraints& idleConstraints,\n        vpsc::Rectangles& rc, vpsc::Variables (&vars)[2]) const\n{\n    COLA_UNUSED(vars);\n\n    if (m_rectangle_index < 0)\n    {\n        // Not based on a Rectangle.\n        return;\n    }\n\n    double halfWidth = rc[m_rectangle_index]->width() / 2;\n    double halfHeight = rc[m_rectangle_index]->height() / 2;\n\n    cola::SeparationConstraint *sc = \n            new cola::SeparationConstraint(vpsc::XDIM, clusterVarId, \n                    m_rectangle_index, halfWidth, true);\n    idleConstraints.push_back(sc);\n    sc = new cola::SeparationConstraint(vpsc::XDIM, \n                    m_rectangle_index, clusterVarId + 1, halfWidth, true);\n    idleConstraints.push_back(sc);\n    \n    sc = new cola::SeparationConstraint(vpsc::YDIM, \n                    clusterVarId, m_rectangle_index, halfHeight, true);\n    idleConstraints.push_back(sc);\n    sc = new cola::SeparationConstraint(vpsc::YDIM, \n                    m_rectangle_index, clusterVarId + 1, halfHeight, true);\n    idleConstraints.push_back(sc);\n}\n\n\nvoid RectangularCluster::computeBoundary(const vpsc::Rectangles& rs)\n{\n    double xMin=DBL_MAX, xMax=-DBL_MAX, yMin=DBL_MAX, yMax=-DBL_MAX;\n    for (std::set<unsigned>::iterator it = nodes.begin();\n            it != nodes.end(); ++it)\n    {\n        xMin=std::min(xMin,rs[*it]->getMinX());\n        xMax=std::max(xMax,rs[*it]->getMaxX());\n        yMin=std::min(yMin,rs[*it]->getMinY());\n        yMax=std::max(yMax,rs[*it]->getMaxY());\n    }\n    hullX.resize(4);\n    hullY.resize(4);\n    hullX[3]=xMin;\n    hullY[3]=yMin;\n    hullX[2]=xMin;\n    hullY[2]=yMax;\n    hullX[1]=xMax;\n    hullY[1]=yMax;\n    hullX[0]=xMax;\n    hullY[0]=yMin;\n}\n\n\nvoid RectangularCluster::printCreationCode(FILE *fp) const\n{\n    fprintf(fp, \"    RectangularCluster *cluster%llu = \"\n            \"new RectangularCluster(\",\n            (unsigned long long) this);\n    if (m_rectangle_index != -1)\n    {\n        fprintf(fp, \"%d\", m_rectangle_index);\n    }\n    fprintf(fp, \");\\n\");\n    if (!m_margin.empty())\n    {\n        fprintf(fp, \"    cluster%llu->setMargin(\",\n                (unsigned long long) this);\n        m_margin.outputCode(fp);\n        fprintf(fp, \");\\n\");\n    }\n    if (!m_padding.empty())\n    {\n        fprintf(fp, \"    cluster%llu->setPadding(\",\n                (unsigned long long) this);\n        m_padding.outputCode(fp);\n        fprintf(fp, \");\\n\");\n    }\n    for(set<unsigned>::const_iterator i = nodes.begin(); \n            i != nodes.end(); ++i)\n    {\n        fprintf(fp, \"    cluster%llu->addChildNode(%u);\\n\",\n                (unsigned long long) this, *i);\n    }\n    for(vector<Cluster *>::const_iterator i = clusters.begin(); \n            i != clusters.end(); ++i)\n    {\n        (*i)->printCreationCode(fp);\n        fprintf(fp, \"    cluster%llu->addChildCluster(cluster%llu);\\n\",\n                (unsigned long long) this, (unsigned long long) *i);\n    }\n}\n\nvoid RectangularCluster::outputToSVG(FILE *fp) const\n{\n    double rounding = 4;\n    if (varRect.isValid())\n    {\n        fprintf(fp, \"<rect id=\\\"cluster-%llu-r\\\" x=\\\"%g\\\" y=\\\"%g\\\" width=\\\"%g\\\" \"\n                \"height=\\\"%g\\\" style=\\\"stroke-width: 1px; stroke: black; \"\n                \"fill: green; fill-opacity: 0.3;\\\" rx=\\\"%g\\\" ry=\\\"%g\\\" />\\n\",\n                (unsigned long long) this, varRect.getMinX(), varRect.getMinY(), \n                varRect.getMaxX() - varRect.getMinX(), \n                varRect.getMaxY() - varRect.getMinY(), rounding, rounding);\n    }\n    else\n    {\n        fprintf(fp, \"<rect id=\\\"cluster-%llu\\\" x=\\\"%g\\\" y=\\\"%g\\\" width=\\\"%g\\\" \"\n            \"height=\\\"%g\\\" style=\\\"stroke-width: 1px; stroke: black; \"\n            \"fill: red; fill-opacity: 0.3;\\\" rx=\\\"%g\\\" ry=\\\"%g\\\" />\\n\",\n            (unsigned long long) this, bounds.getMinX(), bounds.getMinY(), \n            bounds.getMaxX() - bounds.getMinX(), \n            bounds.getMaxY() - bounds.getMinY(), rounding, rounding);\n    }\n\n    for(vector<Cluster *>::const_iterator i = clusters.begin(); \n            i != clusters.end(); ++i)\n    {\n        (*i)->outputToSVG(fp);\n    }\n}\n\n\n\nint RectangularCluster::rectangleIndex(void) const\n{\n    return m_rectangle_index;\n}\n\nbool RectangularCluster::clusterIsFromFixedRectangle(void) const\n{\n    return (m_rectangle_index >= 0);\n}\n\nvoid RectangularCluster::computeBoundingRect(const vpsc::Rectangles& rs) \n{\n    if (clusterIsFromFixedRectangle())\n    {\n        // For bounds, just use this shape's rectangle.\n        bounds = *(rs[m_rectangle_index]);\n    }\n    else\n    {\n        Cluster::computeBoundingRect(rs);\n    }\n}\nvoid RectangularCluster::addChildNode(unsigned index)\n{\n    if ((m_rectangle_index == (int) index) && (m_rectangle_index > 0))\n    {\n        fprintf(stderr, \"Warning: ignoring cluster (%u) added as child of \"\n                \"itself.\\n\", index);\n        return;\n    }\n    Cluster::addChildNode(index);\n}\n\n\nRootCluster::RootCluster()\n    : m_allows_multiple_parents(false)\n{\n}\n\nvoid Cluster::recPathToCluster(RootCluster *rootCluster, Clusters currentPath)\n{\n    // Reset cluster-cluster overlap exceptions.\n    m_cluster_cluster_overlap_exceptions.clear();\n    m_nodes_replaced_with_clusters.clear();\n    m_overlap_replacement_map.clear();\n\n    // Add this cluster to the path.\n    currentPath.push_back(this);\n\n    // Recusively all on each child cluster.\n    for (unsigned i = 0; i < clusters.size(); ++i) \n    {\n        clusters[i]->recPathToCluster(rootCluster, currentPath);\n    }\n\n    // And store the path to each child node.\n    for (std::set<unsigned>::iterator it = nodes.begin();\n            it != nodes.end(); ++it)\n    {\n        rootCluster->m_cluster_vectors_leading_to_nodes[*it].\n                push_back(currentPath);\n    }\n}\n\n\nvoid RootCluster::calculateClusterPathsToEachNode(size_t nodesCount)\n{\n    m_cluster_vectors_leading_to_nodes.clear();\n    m_cluster_vectors_leading_to_nodes.resize(nodesCount);\n\n    recPathToCluster(this, Clusters());\n\n    for (unsigned i = 0; i < m_cluster_vectors_leading_to_nodes.size(); ++i) \n    {\n        size_t paths = m_cluster_vectors_leading_to_nodes[i].size();\n        for (size_t j = 1; j < paths; ++j)\n        {\n            for (size_t k = 0; k < j; ++k)\n            {\n                // For each pair of paths.\n\n                // Find the lowest common ancestor by finding where the two\n                // paths from the root cluster to node i diverge.\n                Clusters pathJ = m_cluster_vectors_leading_to_nodes[i][j];\n                Clusters pathK = m_cluster_vectors_leading_to_nodes[i][k];\n                size_t lcaIndex = 0;\n                while ((lcaIndex < pathJ.size()) && \n                       (lcaIndex < pathK.size()) &&\n                        (pathJ[lcaIndex] == pathK[lcaIndex]))\n                {\n                    ++lcaIndex;\n                }\n                COLA_ASSERT(lcaIndex > 0);\n\n                // lcaIndex will be the clusters/nodes that need to overlap\n                // due to these two paths to node i.\n                size_t lcaChildJIndex = i;\n                size_t lcaChildKIndex = i;\n                Cluster *lcaChildJCluster = nullptr;\n                Cluster *lcaChildKCluster = nullptr;\n                \n                // lcaIndex < path{J,K}.size() means the child J or K of \n                // the lca is a Cluster.   At least one of them will always\n                // be a cluster.\n                COLA_ASSERT((lcaIndex < pathJ.size()) ||\n                        (lcaIndex < pathK.size()));\n                if (lcaIndex < pathJ.size())\n                {\n                    lcaChildJCluster = pathJ[lcaIndex];\n                    lcaChildJIndex = lcaChildJCluster->clusterVarId;\n                }\n                if (lcaIndex < pathK.size())\n                {\n                    lcaChildKCluster = pathK[lcaIndex];\n                    lcaChildKIndex = lcaChildKCluster->clusterVarId;\n                }\n\n                // We want to exclude the overlapping children of the lca \n                // from having non-overlap constraints generated for them\n                // (siblings of a particular cluster usually have \n                // non-overlap constraints generated for them).\n                Cluster *lcaCluster = pathJ[lcaIndex - 1];\n                lcaCluster->m_cluster_cluster_overlap_exceptions.insert(\n                        ShapePair(lcaChildJIndex, lcaChildKIndex));\n\n                if (lcaChildJCluster)\n                {\n                    // In cluster J, replace node i with cluster K for the \n                    // purpose of non-overlap with siblings, and remember \n                    // this replacement so we can still generate non-overlap \n                    // constraints between multiple nodes that are children\n                    // of the same overlapping clusters.\n                    lcaChildJCluster->m_overlap_replacement_map[i] =\n                            lcaChildKCluster;\n                    lcaChildJCluster->m_nodes_replaced_with_clusters.insert(i);\n                }\n\n                if (lcaChildKCluster)\n                {\n                    // In cluster K, replace node i with cluster J for the \n                    // purpose of non-overlap with siblings, and remember \n                    // this replacement so we can still generate non-overlap \n                    // constraints between multiple nodes that are children\n                    // of the same overlapping clusters.\n                    lcaChildKCluster->m_overlap_replacement_map[i] =\n                            lcaChildJCluster;\n                    lcaChildKCluster->m_nodes_replaced_with_clusters.insert(i);\n                }\n            }\n        }\n    }\n}\n\n\nvoid RootCluster::computeBoundary(const vpsc::Rectangles& rs) \n{\n    for (unsigned i = 0; i < clusters.size(); ++i) \n    {\n        clusters[i]->computeBoundary(rs);\n    }\n}\n\nvoid RootCluster::printCreationCode(FILE *fp) const\n{\n    fprintf(fp, \"    RootCluster *cluster%llu = new RootCluster();\\n\",\n            (unsigned long long) this);\n    for(set<unsigned>::const_iterator i = nodes.begin(); \n            i != nodes.end(); ++i)\n    {\n        fprintf(fp, \"    cluster%llu->addChildNode(%u);\\n\",\n                (unsigned long long) this, *i);\n    }\n    for(vector<Cluster *>::const_iterator i = clusters.begin(); \n            i != clusters.end(); ++i)\n    {\n        (*i)->printCreationCode(fp);\n        fprintf(fp, \"    cluster%llu->addChildCluster(cluster%llu);\\n\",\n                (unsigned long long) this, (unsigned long long) *i);\n    }\n}\n\nvoid RootCluster::outputToSVG(FILE *fp) const\n{\n    for(vector<Cluster *>::const_iterator i = clusters.begin(); \n            i != clusters.end(); ++i)\n    {\n        (*i)->outputToSVG(fp);\n    }\n\n}\n\n\nbool RootCluster::allowsMultipleParents(void) const\n{\n    return m_allows_multiple_parents;\n}\n\nvoid RootCluster::setAllowsMultipleParents(const bool value)\n{\n    m_allows_multiple_parents = value;\n}\n\nvoid Cluster::updateBounds(const vpsc::Dim dim) \n{\n    if (dim == vpsc::HORIZONTAL)\n    {\n        bounds = vpsc::Rectangle(vMin->finalPosition, vMax->finalPosition, \n                bounds.getMinY(), bounds.getMaxY());\n    } \n    else\n    {\n        bounds = vpsc::Rectangle(bounds.getMinX(), bounds.getMaxX(), \n                vMin->finalPosition, vMax->finalPosition);\n    }\n    for (unsigned i=0; i < clusters.size(); ++i)\n    {\n        clusters[i]->updateBounds(dim);\n    }\n}\n\n\nvoid Cluster::createVars(const vpsc::Dim dim, const vpsc::Rectangles& rs, \n        vpsc::Variables& vars) \n{\n    for (vector<Cluster*>::iterator i = clusters.begin(); \n            i != clusters.end(); ++i)\n    {\n        (*i)->createVars(dim, rs, vars);\n    }\n    if (dim==vpsc::HORIZONTAL)\n    {\n        double desiredMinX = bounds.getMinX(), desiredMaxX = bounds.getMaxX();\n        if (desiredBoundsSet)\n        {\n            desiredMinX = desiredBounds.getMinX();\n            desiredMaxX = desiredBounds.getMaxX();\n        }\n        clusterVarId = vars.size(); \n        vars.push_back(vXMin = new vpsc::Variable(\n                    vars.size(), desiredMinX, varWeight));\n        vars.push_back(vXMax = new vpsc::Variable(\n                    vars.size(), desiredMaxX, varWeight));\n    } \n    else \n    {\n        double desiredMinY = bounds.getMinY(), desiredMaxY = bounds.getMaxY();\n        if (desiredBoundsSet)\n        {\n            desiredMinY = desiredBounds.getMinY();\n            desiredMaxY = desiredBounds.getMaxY();\n        }\n        clusterVarId = vars.size(); \n        vars.push_back(vYMin = new vpsc::Variable(\n                    vars.size(), desiredMinY, varWeight));\n        vars.push_back(vYMax = new vpsc::Variable(\n                    vars.size(), desiredMaxY, varWeight));\n    }\n}\n\n// Returns the total area covered by contents of this cluster (not\n// including space between nodes/clusters).\n//\ndouble Cluster::area(const vpsc::Rectangles& rs)\n{\n    double a = 0;\n    for (set<unsigned>::iterator i = nodes.begin(); i != nodes.end(); ++i)\n    {\n        vpsc::Rectangle *r = rs[*i];\n        a += r->width() * r->height();\n    }\n    for (Clusters::iterator i = clusters.begin(); i!= clusters.end(); ++i)\n    {\n        a += (*i)->area(rs);\n    }\n    return a;\n}\n\nvoid Cluster::addChildNode(unsigned index)\n{\n    this->nodes.insert(index);\n}\n\nvoid Cluster::addChildCluster(Cluster *cluster)\n{\n    if (cluster == this)\n    {\n        fprintf(stderr, \"Warning: ignoring cluster added as child of itself.\\n\");\n        return;\n    }\n    this->clusters.push_back(cluster);\n}\n\n\n} // namespace cola\n"
  },
  {
    "path": "cola/libcola/cluster.h",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libcola - A library providing force-directed network layout using the \n *           stress-majorization method subject to separation constraints.\n *\n * Copyright (C) 2006-2014  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n * Author(s):  Tim Dwyer\n *             Michael Wybrow\n*/\n\n#ifndef COLA_CLUSTER_H\n#define COLA_CLUSTER_H\n\n#include <cstdio>\n\n#include \"libvpsc/rectangle.h\"\n#include \"libvpsc/variable.h\"\n\n#include \"libcola/compound_constraints.h\"\n#include \"libcola/commondefs.h\"\n#include \"libcola/box.h\"\n#include \"libcola/shapepair.h\"\n\nnamespace cola {\n\nclass Cluster;\ntypedef std::vector<Cluster *> Clusters;\ntypedef std::vector<Clusters> ClustersList;\n\n/**\n * @brief  A cluster defines a hierarchical partitioning over the nodes\n *         which should be kept disjoint by the layout somehow.\n *\n * You should not use this directly.  This is an abstract base class.  \n * At the top level you should be using RootCluster, and then below that \n * either RectangualarCLuster or ConvexCluster.\n */\nclass Cluster\n{\n    public:\n        Cluster();\n\n// To prevent C++ objects from being destroyed in garbage collected languages\n// when the libraries are called from SWIG, we hide the declarations of the\n// destructors and prevent generation of default destructors.\n#ifndef SWIG\n        virtual ~Cluster();\n#endif\n        virtual void computeBoundary(const vpsc::Rectangles& rs) = 0;\n        virtual void computeBoundingRect(const vpsc::Rectangles& rs);\n\n        /**\n         * @brief Mark a rectangle as being a child of this cluster.\n         *\n         * @param[in] index  The index of the Rectangle in the rectangles vector.\n         */\n        virtual void addChildNode(unsigned index);\n        /**\n         * @brief Mark a cluster as being a sub-cluster of this cluster.\n         *\n         * @param[in] cluster  The Cluster to be marked as a sub-cluster.\n         */\n        void addChildCluster(Cluster *cluster);\n        \n        virtual cola::Box padding(void) const\n        {\n            return cola::Box();\n        }\n        virtual cola::Box margin(void) const\n        {\n            return cola::Box();\n        }\n\n        void setDesiredBounds(const vpsc::Rectangle bounds);\n        void unsetDesiredBounds();\n        void createVars(const vpsc::Dim dim, const vpsc::Rectangles& rs,\n                vpsc::Variables& vars);\n        virtual void printCreationCode(FILE *fp) const = 0;\n        virtual void countContainedNodes(std::vector<unsigned>& counts);\n        virtual bool clusterIsFromFixedRectangle(void) const;\n        virtual void outputToSVG(FILE *fp) const = 0;\n        \n        // Returns the total area covered by contents of this cluster\n        // (not including space between nodes/clusters).\n        double area(const vpsc::Rectangles& rs);\n        \n        // Sets bounds based on the finalPositions of vMin and vMax.\n        //\n        void updateBounds(const vpsc::Dim dim);\n        \n        virtual void computeVarRect(vpsc::Variables& vs, size_t dim);\n\n        vpsc::Rectangle bounds;\n        vpsc::Rectangle varRect;\n        vpsc::Variable *vXMin, *vXMax, *vYMin, *vYMax;\n\n        // This will be the id of the left/bottom boundary, \n        // and the right/top will be clusterVarId + 1.\n        unsigned clusterVarId; \n\n        double varWeight;\n        double internalEdgeWeightFactor;\n        std::set<unsigned> nodes;\n        std::vector<Cluster*> clusters;\n        std::valarray<double> hullX, hullY;\n        \n    protected:\n        void recPathToCluster(RootCluster *rootCluster, \n                Clusters currentPath);\n        bool includesAllNodesFrom(const Cluster *rhs) const;\n        \n        // The following are for handling the generation of the correct\n        // set of non-overlap constraints in the case overlapping clusters\n        // (i.e., multiple inheritence). 1) We need to exclude the overlapping\n        // clusters from having non-overlap constraints.  2) We replace nodes\n        // with multiple parent clusters when enforcing non-overlap with their \n        // siblings and instead inforce non-overlap with the other clusters \n        // they are part of, since otherwise there is nothing stopping the\n        // other siblings of each cluster from overlapping each other.  3) We \n        // also need to enforce overlap still between the set of nodes replaced\n        // from each cluster in this way, since they may now be part of some\n        // new set.\n        std::set<ShapePair> m_cluster_cluster_overlap_exceptions;\n        std::map<unsigned, Cluster *> m_overlap_replacement_map;\n        std::set<unsigned> m_nodes_replaced_with_clusters;\n\n    private:\n        friend class ConstrainedFDLayout;\n        friend class RootCluster;\n\n        bool desiredBoundsSet;\n        vpsc::Rectangle desiredBounds;\n\n        vpsc::Variable *vMin, *vMax;\n};\n\n\n/**\n * @brief Holds the cluster hierarchy specification for a diagram.\n *\n * This is not considered a cluster itself, but it records all the nodes in \n * the diagram not contained within any clusters, as well as optionally a \n * hierarchy of clusters.\n *\n * You can add clusters via addChildCluster() and nodes via addChildNode().\n *\n * You can specify just the shapes contained in clusters, but not the nodes \n * at this top level---the library will add any remaining nodes not appearing \n * in the cluster hierarchy as children of the root cluster.\n *\n * It is possible to add a node as the child of two parent clusters.  In this \n * case, the clusters will overlap to contain this (and possibly other nodes).\n * The library will warn you if you do this unless you have called the method\n * setAllowsMultipleParents() to mark this intention.\n *\n * Be careful not to create cycles in the cluster hierarchy (i.e., to mark \n * two clusters as children of each other.  The library does not check for \n * this and strange things may occur.\n */\nclass RootCluster : public Cluster \n{\n    public:\n        RootCluster();\n        void computeBoundary(const vpsc::Rectangles& rs);\n        // There are just shapes at the top level, so\n        // effectively no clusters in the diagram scene.\n        bool flat(void) const\n        {\n            return clusters.empty();\n        }\n        virtual void printCreationCode(FILE *fp) const;\n        virtual void outputToSVG(FILE *fp) const;\n\n        //! Returns true if this cluster hierarchy allows multiple parents, \n        //! otherwise returns false.\n        //!\n        //! Defaults to false.  If this is false, the library will display\n        //! warnings if you add a single node to multiple clusters.\n        //!\n        //! @sa setAllowsMultipleParents()\n        bool allowsMultipleParents(void) const;\n\n        //! Set whether the cluster hierarchy should allow multiple parents.\n        //! \n        //! @param value New value for this setting.\n        //!\n        //! sa allowsMultipleParents()\n        void setAllowsMultipleParents(const bool value);\n   private:\n        void calculateClusterPathsToEachNode(size_t nodesCount);\n        \n        friend class ConstrainedFDLayout;\n        friend class Cluster;\n\n        bool m_allows_multiple_parents;\n        \n        std::vector<ClustersList> m_cluster_vectors_leading_to_nodes;\n};\n\n/**\n * @brief  Defines a rectangular cluster, either variable-sized with floating \n *         sides or a fixed size based on a particular rectangle.\n *\n * The chosen constructor decides the type and behaviour of the cluster.\n */\nclass RectangularCluster : public Cluster\n{\n    public:\n        /**\n         * @brief  A rectangular cluster of variable size that contains\n         *         its children.\n         */\n        RectangularCluster();\n        /**\n         * @brief  A fixed size rectangular cluster based on a particular \n         *         rectangle.\n         *\n         * This rectangle might be constrained in the other ways like normal \n         * rectangles.\n         *\n         * @param[in]  rectIndex  The index of the rectangle that this cluster\n         *                        represents.\n         */\n        RectangularCluster(unsigned rectIndex);\n\n        /**\n         * @brief  Sets the margin size for this cluster.\n         *\n         * This value represents the outer spacing that will be put between\n         * the cluster boundary on all sides and other clusters (plus their \n         * margin) and rectangles at the same level when non-overlap \n         * constraints are enabled.\n         *\n         * @param[in]  margin  The size of the margin for this cluster.\n         */\n        void setMargin(double margin);\n        /**\n         * @brief  Sets the margin box for this cluster.\n         *\n         * This box represents the outer spacing that will be put between\n         * the cluster boundary and other clusters (plus their margin) and \n         * rectangles at the same level when non-overlap constraints are \n         * enabled.\n         *\n         * @param[in]  margin  The box representing the margins for this \n         *                     cluster.\n         */\n        void setMargin(const cola::Box margin);\n        /**\n         * @brief  Returns the margin box for this cluster.\n         *\n         * @return  The margin box for the cluster.\n         */\n        cola::Box margin(void) const;\n\n        /**\n         * @brief  Sets the padding size for this cluster.\n         *\n         * This value represents the inner spacing that will be put between\n         * the cluster boundary and other child clusters (plus their margin) \n         * and child rectangles on all sides.\n         *\n         * @param[in]  padding  The size of the padding for this cluster.\n         */\n        void setPadding(double padding);\n        /**\n         * @brief  Sets the padding box for this cluster.\n         *\n         * This box represents the inner spacing that will be put between\n         * the cluster boundary and other child clusters (plus their margin) \n         * and child rectangles for each edge.\n         *\n         * @param[in]  padding  The Box representing padding values for this \n         *                      cluster.\n         */\n        void setPadding(const cola::Box padding);\n        /**\n         * @brief  Returns the padding box for this cluster.\n         *\n         * @return  The padding box for the cluster.\n         */\n        cola::Box padding(void) const;\n\n#ifndef SWIG\n        virtual ~RectangularCluster();\n#endif\n        void computeBoundary(const vpsc::Rectangles& rs);\n        virtual void countContainedNodes(std::vector<unsigned>& counts);\n        virtual void printCreationCode(FILE *fp) const;\n        virtual void outputToSVG(FILE *fp) const;\n        virtual void computeBoundingRect(const vpsc::Rectangles& rs);\n        virtual void addChildNode(unsigned index);\n        inline vpsc::Rectangle *getMinEdgeRect(const vpsc::Dim dim)\n        {\n            if (minEdgeRect[dim])\n            {\n                delete minEdgeRect[dim];\n            }\n            minEdgeRect[dim] = new vpsc::Rectangle(bounds);\n\n            // Set the Min and Max positions to be the min minus an offset.\n            double edgePosition = minEdgeRect[dim]->getMinD(dim);\n            minEdgeRect[dim]->setMinD(dim, edgePosition - m_margin.min(dim));\n            minEdgeRect[dim]->setMaxD(dim, edgePosition);\n\n            return minEdgeRect[dim];\n        }\n\n        inline vpsc::Rectangle *getMaxEdgeRect(const vpsc::Dim dim)\n        {\n            if (maxEdgeRect[dim])\n            {\n                delete maxEdgeRect[dim];\n            }\n            maxEdgeRect[dim] = new vpsc::Rectangle(bounds);\n\n            // Set the Min and Max positions to be the max plus an offset.\n            double edgePosition = maxEdgeRect[dim]->getMaxD(dim);\n            maxEdgeRect[dim]->setMaxD(dim, edgePosition + m_margin.max(dim));\n            maxEdgeRect[dim]->setMinD(dim, edgePosition);\n\n            return maxEdgeRect[dim];\n        }\n        virtual bool clusterIsFromFixedRectangle(void) const;\n        int rectangleIndex(void) const;\n    \n        // For fixed sized clusters based on a rectangle, this method \n        // generates the constraints that attach the cluster edges to the\n        // centre position of the relevant rectangle.\n        void generateFixedRectangleConstraints(\n                cola::CompoundConstraints& idleConstraints,\n                vpsc::Rectangles& rc, vpsc::Variables (&vars)[2]) const;\n    \n    private:\n        vpsc::Rectangle *minEdgeRect[2];\n        vpsc::Rectangle *maxEdgeRect[2];\n        int m_rectangle_index;\n        Box m_margin;\n        Box m_padding;\n};\n\n/**\n * @brief  Defines a cluster that will be treated as a convex boundary around\n *         the child nodes and clusters.\n */\nclass ConvexCluster : public Cluster\n{\n    public:\n        void computeBoundary(const vpsc::Rectangles& rs);\n        virtual void printCreationCode(FILE *fp) const;\n        virtual void outputToSVG(FILE *fp) const;\n\n        std::valarray<unsigned> hullRIDs;\n        std::valarray<unsigned char> hullCorners;\n};\n\n\n} // namespace cola\n#endif // COLA_CLUSTER_H\n"
  },
  {
    "path": "cola/libcola/cola.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libcola - A library providing force-directed network layout using the \n *           stress-majorization method subject to separation constraints.\n *\n * Copyright (C) 2006-2014  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  \n *\n * Author(s):  Tim Dwyer\n*/\n\n#include <cmath>\n\n#include \"libvpsc/assertions.h\"\n#include \"libcola/commondefs.h\"\n#include \"libcola/cola.h\"\n#include \"libcola/conjugate_gradient.h\"\n#include \"libcola/straightener.h\"\n#include \"libcola/shortest_paths.h\"\n#include \"libcola/cluster.h\"\n\nusing namespace std;\nusing namespace vpsc;\nusing straightener::generateClusterBoundaries;\n\nnamespace cola {\n\nConstrainedMajorizationLayout\n::ConstrainedMajorizationLayout(\n        vector<Rectangle*>& rs,\n        const vector<Edge>& es,\n        RootCluster *clusterHierarchy,\n        const double idealLength,\n        EdgeLengths eLengths,\n        TestConvergence *doneTest,\n        PreIteration* preIteration,\n        bool useNeighbourStress)\n    : n(rs.size()),\n      lap2(valarray<double>(n*n)), \n      Dij(valarray<double>(n*n)),\n      tol(1e-7),\n      done(doneTest),\n      using_default_done(false),\n      preIteration(preIteration),\n      X(valarray<double>(n)), Y(valarray<double>(n)),\n      stickyNodes(false), \n      startX(valarray<double>(n)), startY(valarray<double>(n)),\n      constrainedLayout(false),\n      nonOverlappingClusters(false),\n      clusterHierarchy(clusterHierarchy),\n      gpX(nullptr), gpY(nullptr),\n      ccs(nullptr),\n      unsatisfiableX(nullptr), unsatisfiableY(nullptr),\n      avoidOverlaps(None),\n      straightenEdges(nullptr),\n      bendWeight(0.1), potBendWeight(0.1),\n      xSkipping(true),\n      scaling(true),\n      externalSolver(false),\n      majorization(true)\n{\n    if (done == nullptr)\n    {\n        done = new TestConvergence();\n        using_default_done = true;\n    }\n\n    boundingBoxes.resize(rs.size());\n    copy(rs.begin(),rs.end(),boundingBoxes.begin());\n\n    done->reset();\n\n    COLA_ASSERT(!straightenEdges||straightenEdges->size()==es.size());\n\n    double** D=new double*[n];\n    for(unsigned i=0;i<n;i++) {\n        D[i]=new double[n];\n    }\n\n    std::valarray<double> edgeLengths(eLengths.data(), eLengths.size());\n    // Correct zero or negative entries in eLengths array.\n    for (size_t i = 0; i < edgeLengths.size(); ++i)\n    {\n        if (edgeLengths[i] <= 0)\n        {\n            fprintf(stderr, \"Warning: ignoring non-positive length at index %d \"\n                    \"in ideal edge length array.\\n\", (int) i);\n            edgeLengths[i] = 1;\n        }\n    }\n\n    if (useNeighbourStress) {\n        for(unsigned i=0;i<n;i++) {\n            for(unsigned j=0;j<n;j++) {\n                D[i][j]=std::numeric_limits<double>::max();\n            }\n        }\n        bool haveLengths = edgeLengths.size() == es.size();\n        for (unsigned i = 0; i < es.size(); i++) {\n            unsigned source = es[i].first;\n            unsigned target = es[i].second;\n            D[source][target] = D[target][source] = (haveLengths ? edgeLengths[i] : 1.0);\n        }\n    } else {\n        shortest_paths::johnsons(n,D,es,edgeLengths);\n        //shortest_paths::neighbours(n,D,es,edgeLengths);\n    }\n\n    edge_length = idealLength;\n    if(clusterHierarchy) {\n        for(Clusters::const_iterator i=clusterHierarchy->clusters.begin();\n                i!=clusterHierarchy->clusters.end();i++) {\n            Cluster *c=*i;\n            for(set<unsigned>::iterator j=c->nodes.begin();j!=c->nodes.end();j++) {\n                for(set<unsigned>::iterator k=c->nodes.begin();k!=c->nodes.end();k++) {\n                    unsigned a=*j, b=*k;\n                    if(a==b) continue;\n                    D[a][b]/=c->internalEdgeWeightFactor;\n                }\n            }\n        }\n    }\n    // Lij_{i!=j}=1/(Dij^2)\n    //\n    for(unsigned i = 0; i<n; i++) {\n        X[i]=rs[i]->getCentreX();\n        Y[i]=rs[i]->getCentreY();\n        double degree = 0;\n        for(unsigned j=0;j<n;j++) {\n            double d = edge_length * D[i][j];\n            Dij[i*n + j] = d;\n            if(i==j) continue;\n            double lij=0;\n            if(d!=0 && !std::isinf(d)) {\n                lij=1./(d*d);\n            }\n            degree += lap2[i*n + j] = lij;\n        }\n        lap2[i*n + i]=-degree;\n        delete [] D[i];\n    }\n    //GradientProjection::dumpSquareMatrix(Dij);\n    delete [] D;\n}\n// stickyNodes adds a small force attracting nodes \n// back to their starting positions\nvoid ConstrainedMajorizationLayout::setStickyNodes(\n        const double stickyWeight, \n        valarray<double> const & startX,\n        valarray<double> const & startY) {\n    COLA_ASSERT( startX.size()==n && startY.size()==n);\n    stickyNodes = true;\n    // not really constrained but we want to use GP solver rather than \n    // ConjugateGradient\n    constrainedLayout = true; \n    this->stickyWeight=stickyWeight;\n    this->startX = startX;\n    this->startY = startY;\n    for(unsigned i = 0; i<n; i++) {\n        lap2[i*n+i]-=stickyWeight;\n    }\n}\n\nvoid ConstrainedMajorizationLayout::majorize(\n        valarray<double> const & Dij, GradientProjection* gp, \n        valarray<double>& coords,\n        valarray<double> const & startCoords)\n{\n    double L_ij,dist_ij,degree;\n    /* compute the vector b */\n    /* multiply on-the-fly with distance-based laplacian */\n    valarray<double> b(n);\n    for (unsigned i = 0; i < n; i++) {\n        b[i] = degree = 0;\n        for (unsigned j = 0; j < n; j++) {\n            if (j == i) continue;\n            dist_ij = euclidean_distance(i, j);\n            /* skip zero distances */\n            if (dist_ij > 1e-30 && Dij[i*n+j] > 1e-30 && Dij[i*n+j] < 1e10) {\n                /* calculate L_ij := w_{ij}*d_{ij}/dist_{ij} */\n                L_ij = 1.0 / (dist_ij * Dij[i*n+j]);\n                degree -= L_ij;\n                b[i] += L_ij * coords[j];\n            }\n        }\n        if(stickyNodes) {\n            //double l = startCoords[i]-coords[i];\n            //l/=10.;\n            //b[i]-=stickyWeight*(coords[i]+l);\n            b[i] -= stickyWeight*startCoords[i];\n        }\n        b[i] += degree * coords[i];\n        COLA_ASSERT(!std::isnan(b[i]));\n    }\n    if(constrainedLayout) {\n        //printf(\"GP iteration...\\n\");\n        gp->solve(b,coords);\n    } else {\n        //printf(\"CG iteration...\\n\");\n        conjugate_gradient(lap2, coords, b, n, tol, n);\n    }\n    moveBoundingBoxes();\n}\nvoid ConstrainedMajorizationLayout::newton(\n        valarray<double> const & Dij, GradientProjection* gp, \n        valarray<double>& coords,\n        valarray<double> const & startCoords)\n{\n    COLA_UNUSED(startCoords);\n    /* compute the vector b */\n    /* multiply on-the-fly with distance-based laplacian */\n    valarray<double> b(n);\n    valarray<double> A(n*n);\n    for (unsigned i = 0; i < n; i++) {\n        b[i] = 0;\n        double Aii = 0;\n        for (unsigned j = 0; j < n; j++) {\n            if (j == i) continue;\n            double d = Dij[i*n+j];\n            double l = euclidean_distance(i,j);\n            double dx = coords[i]-coords[j];\n            double dy2 = l*l - dx*dx;\n            /* skip zero distances */\n            if (l > 1e-30 \n                    && d > 1e-30 && d < 1e10) {\n                if(d>80 && l > d) continue;\n                b[i]+=dx*(l-d)/(l*d*d);\n                Aii-=A[i*n+j]=(d*dy2/(l*l*l)-1)/(d*d);\n            }\n        }\n        A[i*n+i]=Aii;\n    }\n    if(constrainedLayout) {\n        //printf(\"GP iteration...\\n\");\n        gp->solve(b,coords);\n    } else {\n        //printf(\"CG iteration...\\n\");\n        /*\n        unsigned N=n-1;\n        valarray<double> b2(N);\n        valarray<double> A2(N*N);\n        valarray<double> x(N);\n        for(unsigned i=0;i<N;i++) {\n            b2=b[i];\n            x=coords[i];\n            for(unsigned j=0;j<N;j++) {\n                A2[i*N+j]=A[i*n+j];\n            }\n        }\n        conjugate_gradient(A2, x, b2, N, tol, N);\n        */\n        //valarray<double> x=coords;\n        //x-=x.sum()/n;\n        //conjugate_gradient(A, x, b, n, tol, n);\n        //double stepsize=0.5;\n        valarray<double> x=b;\n        // stepsize = g.g / (g A g)\n        double numerator = 0;\n        for(unsigned i=0;i<n;i++) {\n            numerator+=x[i]*x[i];\n        }\n        double denominator = 0;\n        for(unsigned i=0;i<n;i++) {\n            double r=0;\n            for(unsigned j=0;j<n;j++) {\n                r+=A[i*n+j]*x[j];\n            }\n            denominator+=r*x[i];\n        }\n        double stepsize=numerator/(2*denominator);\n        double oldstress=compute_stress(Dij);\n        valarray<double> oldcoords=coords;\n        while(stepsize>0.00001) {\n            coords=oldcoords-stepsize*x;\n            double stress=compute_stress(Dij);\n                printf(\"  stress=%f, stepsize=%f\\n\",stress,stepsize);\n            if(oldstress>=stress) {\n                break;\n            }\n            coords=oldcoords;\n            stepsize*=0.5;\n        }\n    }\n    moveBoundingBoxes();\n}\ninline double ConstrainedMajorizationLayout\n::compute_stress(valarray<double> const &Dij) {\n    double sum = 0, d, diff;\n    for (unsigned i = 1; i < n; i++) {\n        for (unsigned j = 0; j < i; j++) {\n            d = Dij[i*n+j];\n            if(!std::isinf(d)&&d!=numeric_limits<double>::max()) {\n                diff = d - euclidean_distance(i,j);\n                if(d>80&&diff<0) continue;\n                sum += diff*diff / (d*d);\n            }\n        }\n        if(stickyNodes) {\n            double l = startX[i]-X[i];\n            sum += stickyWeight*l*l;\n            l = startY[i]-Y[i];\n            sum += stickyWeight*l*l;\n        }\n    }\n    //printf(\"stress=%f\\n\",sum);\n    return sum;\n}\n\nvoid ConstrainedMajorizationLayout::run(bool x, bool y) {\n    if(constrainedLayout) {\n        vector<vpsc::Rectangle*>* pbb = boundingBoxes.empty()?nullptr:&boundingBoxes;\n        SolveWithMosek mosek = Off;\n        if(externalSolver) mosek=Outer;\n        // scaling doesn't currently work with straighten edges because sparse\n        // matrix used with dummy nodes is not properly scaled at the moment.\n        if(straightenEdges) setScaling(false);\n        gpX=new GradientProjection(\n            HORIZONTAL,&lap2,tol,100,ccs,unsatisfiableX,\n            avoidOverlaps,clusterHierarchy,pbb,scaling,mosek);\n        gpY=new GradientProjection(\n            VERTICAL,&lap2,tol,100,ccs,unsatisfiableY,\n            avoidOverlaps,clusterHierarchy,pbb,scaling,mosek);\n    }\n    if(n>0) do {\n        // to enforce clusters with non-intersecting, convex boundaries we\n        // could create cluster boundaries here with chains of dummy nodes (a\n        // dummy node for each vertex of the convex hull) connected by dummy\n        // straightenEdges and we'd then continue on to straightenEdges below.\n        // This should work assuming we already have a feasible (i.e. non\n        // overlapping cluster) state.  The former could be enforced by an\n        // earlier stage involving simple rectangular cluster boundaries.\n        vector<straightener::Edge*> cedges;\n        if(!straightenEdges && nonOverlappingClusters) {\n            straightenEdges = &cedges;\n        }\n        if(preIteration) {\n            if ((*preIteration)()) {\n                for(vector<Lock>::iterator l=preIteration->locks.begin();\n                        l!=preIteration->locks.end();l++) {\n                    unsigned id=l->getID();\n                    double x=l->pos(HORIZONTAL), y=l->pos(VERTICAL);\n                    X[id]=x;\n                    Y[id]=y;\n                    if(stickyNodes) {\n                        startX[id]=x;\n                        startY[id]=y;\n                    }\n                    boundingBoxes[id]->moveCentre(x,y);\n                    if(constrainedLayout) {\n                        gpX->fixPos(id,X[id]); \n                        gpY->fixPos(id,Y[id]);\n                    }\n                }\n            } else { break; }\n        }\n        /* Axis-by-axis optimization: */\n        if(straightenEdges) {\n            if(x) straighten(*straightenEdges,HORIZONTAL);\n            if(y) straighten(*straightenEdges,VERTICAL);\n        } else {\n            if(majorization) {\n                if(x) majorize(Dij,gpX,X,startX);\n                if(y) majorize(Dij,gpY,Y,startY);\n            } else {\n                if(x) newton(Dij,gpX,X,startX);\n                if(y) newton(Dij,gpY,Y,startY);\n            }\n        }\n        if(clusterHierarchy) {\n            for(Clusters::iterator c=clusterHierarchy->clusters.begin();\n                    c!=clusterHierarchy->clusters.end();c++) {\n                (*c)->computeBoundary(boundingBoxes);\n            }\n        }\n        if(preIteration && constrainedLayout) {\n            for(vector<Lock>::iterator l=preIteration->locks.begin();\n                    l!=preIteration->locks.end();l++) {\n                gpX->unfixPos(l->getID());\n                gpY->unfixPos(l->getID());\n            }\n        }\n    } while(!(*done)(compute_stress(Dij),X,Y));\n}\ndouble ConstrainedMajorizationLayout::computeStress() {\n    return compute_stress(Dij);\n}\nvoid ConstrainedMajorizationLayout::runOnce(bool x, bool y) {\n    if(constrainedLayout) {\n        vector<vpsc::Rectangle*>* pbb = boundingBoxes.empty()?nullptr:&boundingBoxes;\n        SolveWithMosek mosek = Off;\n        if(externalSolver) mosek=Outer;\n        // scaling doesn't currently work with straighten edges because sparse\n        // matrix used with dummy nodes is not properly scaled at the moment.\n        if(straightenEdges) setScaling(false);\n        gpX=new GradientProjection(\n            HORIZONTAL,&lap2,tol,100,ccs,unsatisfiableX,\n            avoidOverlaps,clusterHierarchy,pbb,scaling,mosek);\n        gpY=new GradientProjection(\n            VERTICAL,&lap2,tol,100,ccs,unsatisfiableY,\n            avoidOverlaps,clusterHierarchy,pbb,scaling,mosek);\n    }\n    if(n>0) {\n        // to enforce clusters with non-intersecting, convex boundaries we\n        // could create cluster boundaries here with chains of dummy nodes (a\n        // dummy node for each vertex of the convex hull) connected by dummy\n        // straightenEdges and we'd then continue on to straightenEdges below.\n        // This should work assuming we already have a feasible (i.e. non\n        // overlapping cluster) state.  The former could be enforced by an\n        // earlier stage involving simple rectangular cluster boundaries.\n        vector<straightener::Edge*> cedges;\n        if(!straightenEdges && nonOverlappingClusters) {\n            straightenEdges = &cedges;\n        }\n        if(preIteration) {\n            if ((*preIteration)()) {\n                for(vector<Lock>::iterator l=preIteration->locks.begin();\n                        l!=preIteration->locks.end();l++) {\n                    unsigned id=l->getID();\n                    double x=l->pos(HORIZONTAL), y=l->pos(VERTICAL);\n                    X[id]=x;\n                    Y[id]=y;\n                    if(stickyNodes) {\n                        startX[id]=x;\n                        startY[id]=y;\n                    }\n                    boundingBoxes[id]->moveCentre(x,y);\n                    if(constrainedLayout) {\n                        gpX->fixPos(id,X[id]); \n                        gpY->fixPos(id,Y[id]);\n                    }\n                }\n            } else { return; }\n        }\n        /* Axis-by-axis optimization: */\n        if(straightenEdges) {\n            if(x) straighten(*straightenEdges,HORIZONTAL);\n            if(y) straighten(*straightenEdges,VERTICAL);\n        } else {\n            if(majorization) {\n                if(x) majorize(Dij,gpX,X,startX);\n                if(y) majorize(Dij,gpY,Y,startY);\n            } else {\n                if(x) newton(Dij,gpX,X,startX);\n                if(y) newton(Dij,gpY,Y,startY);\n            }\n        }\n        if(clusterHierarchy) {\n            for(Clusters::iterator c=clusterHierarchy->clusters.begin();\n                    c!=clusterHierarchy->clusters.end();c++) {\n                (*c)->computeBoundary(boundingBoxes);\n            }\n        }\n        if(preIteration && constrainedLayout) {\n            for(vector<Lock>::iterator l=preIteration->locks.begin();\n                    l!=preIteration->locks.end();l++) {\n                gpX->unfixPos(l->getID());\n                gpY->unfixPos(l->getID());\n            }\n        }\n    } \n}\nvoid ConstrainedMajorizationLayout::straighten(vector<straightener::Edge*>& sedges, Dim dim) {\n    GradientProjection * gp;\n    valarray<double>* coords;\n    valarray<double>* startCoords;\n    if(dim==HORIZONTAL) {\n        gp=gpX;\n        coords=&X;\n        startCoords=&startX;\n    } else {\n        gp=gpY;\n        coords=&Y;\n        startCoords=&startY;\n    }\n    vector<straightener::Node*> snodes;\n    if(dim==HORIZONTAL) {\n        Rectangle::setXBorder(0.0001);\n    }\n    for (unsigned i=0;i<n;i++) {\n        snodes.push_back(new straightener::Node(i,boundingBoxes[i]));\n    }\n    if(dim==HORIZONTAL) {\n        Rectangle::setXBorder(0);\n    }\n    for (unsigned i=n;i<gp->getNumStaticVars();i++) {\n        // insert some dummy nodes\n        snodes.push_back(new straightener::Node(i,-100,-100));\n    }\n    vector<straightener::Cluster*> sclusters;\n    \n    if(nonOverlappingClusters && clusterHierarchy) {\n       generateClusterBoundaries(dim,snodes,sedges,boundingBoxes,\n                *clusterHierarchy,sclusters);\n    }\n    vector<SeparationConstraint*> cs;\n    straightener::generateConstraints(dim,snodes,sedges,cs,xSkipping);\n    straightener::LinearConstraints linearConstraints;\n    for(unsigned i=0;i<sedges.size();i++) {\n        sedges[i]->nodePath(snodes,!nonOverlappingClusters);\n        vector<unsigned>& path=sedges[i]->path;\n        vector<unsigned>& activePath=sedges[i]->activePath;\n        // take u and v as the ends of the line\n        // unsigned u=path[0];\n        // unsigned v=path[path.size()-1];\n        double total_length=0;\n        for(unsigned j=1;j<path.size();j++) {\n            unsigned u=path[j-1], v=path[j];\n            total_length+=snodes[u]->euclidean_distance(snodes[v]);\n        }\n        // keep potential bends straight\n        for(unsigned j=1;j<activePath.size();j++) {\n            unsigned uj=activePath[j-1], vj=activePath[j];\n            unsigned u=path[uj], v=path[vj];\n            for(unsigned k=uj+1;k<vj;k++) {\n                unsigned b=path[k];\n        // might be useful to have greater weight for potential bends than actual bends\n                linearConstraints.push_back(new straightener::LinearConstraint(\n                            *snodes[u],*snodes[v],*snodes[b],-potBendWeight));\n            }\n        }\n        // straighten actual bends\n        for(unsigned j=1;j<activePath.size()-1;j++) {\n            unsigned u=path[activePath[j-1]], \n                     b=path[activePath[j]],\n                     v=path[activePath[j+1]];\n            linearConstraints.push_back(new straightener::LinearConstraint(\n                            *snodes[u],*snodes[v],*snodes[b],-bendWeight));\n        }\n    }\n    //std::cout << (dim==HORIZONTAL?\"X\":\"Y\") << \" snodes.size \"<<snodes.size()<< \" n=\"<<n<<std::endl;\n    //std::cout << \"Generated \"<<linearConstraints.size()<< \" linear constraints\"<<std::endl;\n    SparseMap Q(snodes.size());\n    for(straightener::LinearConstraints::iterator i=linearConstraints.begin();\n           i!= linearConstraints.end();i++) {\n        straightener::LinearConstraint* c=*i;\n        Q(c->u,c->u)+=c->w*c->duu;\n        Q(c->u,c->v)+=c->w*c->duv;\n        Q(c->u,c->b)+=c->w*c->dub;\n        Q(c->v,c->u)+=c->w*c->duv;\n        Q(c->v,c->v)+=c->w*c->dvv;\n        Q(c->v,c->b)+=c->w*c->dvb;\n        Q(c->b,c->b)+=c->w*c->dbb;\n        Q(c->b,c->u)+=c->w*c->dub;\n        Q(c->b,c->v)+=c->w*c->dvb;\n    }\n    double boundaryWeight = 0.0001;\n    for(unsigned i=0;i<sclusters.size();i++) {\n        // for each cluster boundary chain create an attractive force between\n        // each pair of adjacent nodes\n        straightener::Cluster* c = sclusters[i];\n        for(unsigned j=0;j<c->boundary.size();j++) {\n            straightener::Edge* e = c->boundary[j];\n            Q(e->startNode,e->endNode)+=boundaryWeight;\n            Q(e->endNode,e->startNode)+=boundaryWeight;\n            Q(e->startNode,e->startNode)-=boundaryWeight;\n            Q(e->endNode,e->endNode)-=boundaryWeight;\n        }\n    }\n    constrainedLayout = true;\n    SparseMatrix sparseQ(Q);\n    gp->straighten(&sparseQ,cs,snodes);\n    //return;\n    majorize(Dij,gp,*coords,*startCoords);\n    valarray<double> const & r=gp->getFullResult();\n    for(unsigned i=0;i<snodes.size();i++) {\n        snodes[i]->pos[dim] = r[i];\n    }\n    for(unsigned i=0;i<sedges.size();i++) {\n        sedges[i]->createRouteFromPath(snodes);\n        sedges[i]->dummyNodes.clear();\n        sedges[i]->path.clear();\n    }\n    for(unsigned i=0;i<sclusters.size();i++) {\n        straightener::Cluster *sc = sclusters[i];\n        //sc->updateActualBoundary();\n        delete sc;\n    }\n    for(unsigned i=0;i<cs.size();i++) {\n        delete cs[i];\n    }\n    for(unsigned i=0;i<linearConstraints.size();i++) {\n        delete linearConstraints[i];\n    }\n    for(unsigned i=0;i<snodes.size();i++) {\n        delete snodes[i];\n    }\n}\n\nRectangle bounds(vector<Rectangle*>& rs) {\n    COLA_ASSERT(!rs.empty());\n    \n    double left = rs[0]->getMinX(), right = rs[0]->getMaxX(), \n        top = rs[0]->getMinY(), bottom = rs[0]->getMaxY();\n    \n    for(unsigned i = 1; i < rs.size(); i++) {\n        left = min(left,rs[i]->getMinX());\n        right = max(right,rs[i]->getMaxX());\n        top = min(top,rs[i]->getMinY());\n        bottom = max(bottom,rs[i]->getMaxY());\n    }\n    return Rectangle(left, right, top, bottom);\n}\n\n#if 0\n    void removeClusterOverlap(RootCluster& clusterHierarchy, vpsc::Rectangles& rs, Locks& locks, vpsc::Dim dim) {\n        if(clusterHierarchy.nodes.size()>0 || clusterHierarchy.clusters.size()>0) {\n            vpsc::Variables vars;\n            vpsc::Constraints cs;\n            for(unsigned i=0;i<rs.size();i++) {\n                vars.push_back(new vpsc::Variable(i, rs[i]->getCentreD(dim)));\n            }\n            \n            clusterHierarchy.computeBoundingRect(rs);\n            clusterHierarchy.createVars(dim,rs,vars);\n            clusterHierarchy.generateNonOverlapConstraints(dim, cola::Both, rs, vars, cs);\n            \n            /*\n            if(dim==vpsc::HORIZONTAL) {\n                vpsc::Rectangle::setXBorder(0.001);\n                // use rs->size() rather than n because some of the variables may\n                // be dummy vars with no corresponding rectangle\n                generateXConstraints(rs,vars,cs,true); \n                vpsc::Rectangle::setXBorder(0);\n            } else {\n                generateYConstraints(rs,vars,cs); \n            }\n            */\n            for(Locks::iterator l=locks.begin();\n                    l!=locks.end();l++) {\n                unsigned id=l->getID();\n                double x=l->pos(HORIZONTAL), y=l->pos(VERTICAL);\n                Variable* v=vars[id];\n                v->desiredPosition = (dim==vpsc::HORIZONTAL)?x:y;\n                v->weight = 1000;\n            }\n            /*\n            vpsc::Solver s(vars,cs);\n            try {\n                s.satisfy();\n            } catch(const char* e) {\n                cerr << \"ERROR from solver in GraphData::removeOverlap : \" << e << endl;\n            }\n            */\n            vpsc::IncSolver s(vars,cs);\n            try {\n                s.solve();\n            } catch(const char* e) {\n                cerr << \"ERROR from solver in GraphData::removeOverlap : \" << e << endl;\n            }\n            clusterHierarchy.updateBounds(dim);\n            /*\n            for(unsigned i=0;i<cs.size();++i) {\n                if(cs[i]->unsatisfiable) {\n                    cout << \"Unsatisfiable constraint: \" << *cs[i] << endl;\n                }\n            }\n            */\n            for(unsigned i=0;i<rs.size();i++) {\n                rs[i]->moveCentreD(dim,vars[i]->finalPosition);\n            }\n            for(Locks::iterator l=locks.begin();\n                    l!=locks.end();l++) {\n                //unsigned id=l->getID();\n            }\n            for_each(vars.begin(),vars.end(),delete_object());\n            for_each(cs.begin(),cs.end(),delete_object());\n        }\n    }\n    void removeClusterOverlapFast(RootCluster& clusterHierarchy, vpsc::Rectangles& rs, Locks& locks) {\n        removeClusterOverlap(clusterHierarchy, rs, locks, vpsc::HORIZONTAL);\n        removeClusterOverlap(clusterHierarchy, rs, locks, vpsc::VERTICAL);\n    }\n#endif\n\n    ConstrainedMajorizationLayout* simpleCMLFactory(\n            vpsc::Rectangles& rs,\n            std::vector<Edge> const & es,\n            RootCluster* clusterHierarchy,\n            const double idealLength,\n            bool useNeighbourStress\n        ) {\n        cola::EdgeLengths eLengths;\n        for(size_t i = 0; i < es.size(); ++i) {\n            eLengths.push_back(1);\n        }\n        return new ConstrainedMajorizationLayout(rs, es, clusterHierarchy, idealLength,\n                eLengths, nullptr, nullptr, useNeighbourStress);\n    };\n\n} // namespace cola\n"
  },
  {
    "path": "cola/libcola/cola.h",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libcola - A library providing force-directed network layout using the \n *           stress-majorization method subject to separation constraints.\n *\n * Copyright (C) 2006-2015  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n * Author(s):  Tim Dwyer\n *             Michael Wybrow\n*/\n\n#ifndef COLA_H\n#define COLA_H\n\n#include <utility>\n#include <iterator>\n#include <vector>\n#include <valarray>\n#include <algorithm>\n#include <cmath>\n#include <iostream>\n\n#include \"libcola/gradient_projection.h\"\n#include \"libcola/cluster.h\"\n#include \"libcola/straightener.h\"\n#include \"libcola/exceptions.h\"\n#include \"libcola/pseudorandom.h\"\n\nnamespace vpsc { class Rectangle; }\nnamespace topology { \n    class ColaTopologyAddon;\n}\nnamespace dialect {\n    class Graph;\n}\n\n\n/**\n * @namespace cola\n * @brief libcola: Force-directed network layout subject to \n *       separation constraints library.\n *\n * You should use COLA via an instance of the ConstrainedFDLayout class.\n*/\nnamespace cola {\n\nclass NonOverlapConstraints;\nclass NonOverlapConstraintExemptions;\n\n//! @brief A vector of node Indexes.\ntypedef std::vector<unsigned> NodeIndexes;\n\n//! @brief A vector of NodeIndexes.\ntypedef std::vector<NodeIndexes> ListOfNodeIndexes;\n\n//! Edges are simply a pair of indices to entries in the Node vector\ntypedef std::pair<unsigned, unsigned> Edge;\n\n//! EdgeLengths is a vector of ideal lengths for edges corresponding to\n//! edges in the edge list.\ntypedef std::vector<double> EdgeLengths;\n#define StandardEdgeLengths EdgeLengths()\n\n/**\n * @brief A Lock specifies a required position for a node.\n */\nclass Lock {\npublic:\n    Lock() {}\n    /**\n     * @brief  Constructs a Lock object for a given node and position.\n     *\n     * @param[in] id  The index of the node in the Rectangles vector.\n     * @param[in] X   The node's fixed position in the x-dimension.\n     * @param[in] Y   The node's fixed position in the y-dimension.\n     */\n    Lock(unsigned id, double X, double Y) : id(id), x(X), y(Y) {\n    }\n    unsigned getID() const {\n        return id;\n    }\n    double pos(vpsc::Dim dim) const {\n        return dim==vpsc::HORIZONTAL?x:y;\n    }\nprivate:\n    unsigned id;\n    double x;\n    double y;\n};\n//! @brief A vector of Lock objects.\ntypedef std::vector<cola::Lock> Locks;\n\n/**\n * @brief A Resize specifies a new required bounding box for a node.\n */\nclass Resize {\npublic:\n    Resize() {}\n    /**\n     * @brief  Constructs a Resize object for a given node and it's new \n     *         bounding box.\n     *\n     * @param[in] id  The index of the node in the Rectangles vector.\n     * @param[in] x   The minimum horizontal value for the node's new \n     *                bounding box.\n     * @param[in] y   The minimum vertical value for the node's new \n     *                bounding box.\n     * @param[in] w   The width value for the node's new bounding box.\n     * @param[in] h   The height value for the node's new bounding box.\n     */\n    Resize(unsigned id, double x, double y, double w, double h)\n        : id(id), target(x,x+w,y,y+h) {}\n    unsigned getID() const {\n        return id;\n    }\n    const vpsc::Rectangle* getTarget() const {\n        return &target;\n    }\nprivate:\n    unsigned id;\n    vpsc::Rectangle target;\n};\n//! @brief A vector of Resize objects.\ntypedef std::vector<cola::Resize> Resizes;\n\n/*\n * Setting a desired position for a node adds a term to the goal function\n * drawing the node towards that desired position\n */\nstruct DesiredPosition {\n    unsigned id;\n    double x;\n    double y;\n    double weight;\n};\ntypedef std::vector<cola::DesiredPosition> DesiredPositions;\n\n/*\n * desired positions which should override those computed by applying forces\n * are passed in for a set of nodes.  The first entry is the Node->id, the\n * second is the desired position.\n */\ntypedef std::pair<unsigned,double> DesiredPositionInDim;\ntypedef std::vector<DesiredPositionInDim> DesiredPositionsInDim;\n\n/** \n * @brief A default functor that is called before each iteration in the \n *        main loop of the ConstrainedFDLayout::run() method.\n *\n * Override the operator() for things like locking the position of nodes\n * for the duration of the iteration.\n *\n * If the operator() returns false the subsequent iterations are\n * abandoned, i.e., layout ends immediately.  You can make it return true\n * when a user-interrupt is detected, for instance.\n */\nclass PreIteration {\npublic:\n    /**\n     * @brief  Constructs a PreIteration object that handles locking and \n     *         resizing of nodes.\n     *\n     * @param[in] locks    A list of nodes (by index) and positions at which\n     *                     they should be locked.\n     * @param[in] resizes  A list of nodes (by index) and required dimensions\n     *                     for their bounding rects to be resized to.\n     */\n    PreIteration(\n            Locks& locks=__locksNotUsed,\n            Resizes& resizes=__resizesNotUsed) \n        : locks(locks)\n        , resizes(resizes) \n        , changed(true) {}\n    PreIteration(Resizes& resizes) \n        : locks(__locksNotUsed)\n        , resizes(resizes)\n        , changed(true) {}\n\n// To prevent C++ objects from being destroyed in garbage collected languages\n// when the libraries are called from SWIG, we hide the declarations of the\n// destructors and prevent generation of default destructors.\n#ifndef SWIG\n    virtual ~PreIteration() {}\n#endif\n    virtual bool operator()() { return true; }\n    Locks& locks;\n    Resizes& resizes;\n    bool changed;\nprivate:\n    static Locks __locksNotUsed;\n    static Resizes __resizesNotUsed;\n};\n\n/** \n * @brief  A default functor that is called after each iteration of the layout\n *         algorithm.\n *\n * You can either instantiate ConstrainedFDLayout with an instance of this\n * class setting the tolerance and maxiterations as desired, or create a\n * derived class implementing the operator() to do your own convergence test,\n * or create your own operator() that calls the TestConvergence::operator() in\n * order to do any other post processing you might need, e.g., to animate\n * changes.\n */\nclass TestConvergence {\npublic:\n    double old_stress;\n    TestConvergence(const double tol = 1e-4, const unsigned maxiterations = 100)\n        : tolerance(tol),\n          maxiterations(maxiterations)\n    { reset(); }\n    virtual ~TestConvergence() {}\n\npublic:\n    virtual bool operator()(const double new_stress, std::valarray<double> & X, std::valarray<double> & Y)\n    {\n        COLA_UNUSED(X);\n        COLA_UNUSED(Y);\n\n        iterations++;\n        //std::cout<<\"iteration=\"<<iterations<<\", old_stress=\"<<old_stress<<\", new_stress=\"<<new_stress<<std::endl;\n        if (old_stress == DBL_MAX) {\n            old_stress = new_stress;\n            return iterations >= maxiterations;\n        }\n        // converged if relative decrease in stress falls below threshold\n        // or if stress increases (shouldn't happen for straight majorization)\n        bool converged = \n            (old_stress - new_stress) / (new_stress + 1e-10) < tolerance\n             || iterations > maxiterations;\n        old_stress = new_stress;\n        return converged;\n    }\n    void reset() {\n        old_stress = DBL_MAX;\n        iterations = 0;\n    }\n    const double tolerance;\n    const unsigned maxiterations;\n    unsigned iterations;\n};\n\n/**\n * @brief  Implements the Constrained Majorization graph layout algorithm \n *         (deprecated).\n *\n * The optimisation method used is \"stress majorization\", where a sequence of \n * quadratic functions which strictly bound the stress from above, is solved \n * to monotonically reduce the stress (by iteratively changing the \n * configuration of nodes).\n *\n * Once the problem has been set up, call run() or runOnce() to run the \n * layout algorithm.\n *\n * @note  We recommend the use of ConstrainedFDLayout instead of this class. \n *        ConstrainedFDLayout tends to produce better results and has more \n *        features.  We are no longer working on ConstrainedMajorizationLayout.\n */\nclass ConstrainedMajorizationLayout {\npublic:\n   /**\n     * @brief Constructs a constrained majorization layout instance.\n     *\n     * @param[in] rs  Bounding boxes of nodes at their initial positions.\n     * @param[in] es  Simple pair edges, giving indices of the start and end \n     *                nodes in rs.\n     * @param[in] clusterHierarchy  A pointer to a RootCluster object defining\n     *                              the cluster hierarchy (optional).\n     * @param[in] idealLength  Aa scalar modifier of ideal edge lengths in \n     *                         eLengths.\n     * @param[in] eLengths  Individual ideal lengths for edges.\n     *                      The actual ideal length used for the ith edge is \n     *                      idealLength*eLengths[i], or if eLengths is empty \n     *                      then just idealLength is used (i.e., eLengths[i] \n     *                      is assumed to be 1).\n     * @param[in] done  A test of convergence operation called at the end of \n     *                  each iteration (optional).\n     * @param[in] preIteration  An operation called before each iteration\n     *                          (optional).\n     */\n    ConstrainedMajorizationLayout(\n        vpsc::Rectangles& rs,\n        std::vector<Edge> const & es,\n        RootCluster* clusterHierarchy,\n        const double idealLength,\n        EdgeLengths eLengths = StandardEdgeLengths,\n        TestConvergence *doneTest = nullptr,\n        PreIteration* preIteration=nullptr,\n        bool useNeighbourStress = false);\n    /**\n     * @brief  Specify a set of compound constraints to apply to the layout.\n     *\n     * @param[in] ccs  The compound constraints.\n     */\n    void setConstraints(cola::CompoundConstraints* ccs) {\n        constrainedLayout = true;\n        this->ccs=ccs;\n    }\n\n    void setConstraintsVector(cola::CompoundConstraints& ccs) {\n        constrainedLayout = true;\n        cola::CompoundConstraints *ccsp = new cola::CompoundConstraints;\n        for (size_t i = 0; i < ccs.size(); ++i) {\n            ccsp->push_back(ccs.at(i));\n        }\n        this->ccs=ccsp;\n    }\n\n    /**\n     * @brief Register to receive information about unsatisfiable constraints.\n     *\n     * In the case of unsatisifiable constraints, the solver will drop \n     * unsatisfiable constraints of lowest priority.  Information about these\n     * will be written to these lists after each iteration of constrained \n     * layout.\n     *\n     * param[out] unsatisfiableX A pointer to an UnsatisfiableConstraintInfos \n     *                           object that will be used to record \n     *                           unsatisfiable constraints in the x-dimension.\n     * param[out] unsatisfiableY A pointer to an UnsatisfiableConstraintInfos \n     *                           object that will be used to record \n     *                           unsatisfiable constraints in the y-dimension.\n     */\n    void setUnsatisfiableConstraintInfo(\n            UnsatisfiableConstraintInfos *unsatisfiableX,\n            UnsatisfiableConstraintInfos *unsatisfiableY) {\n        this->unsatisfiableX = unsatisfiableX;\n        this->unsatisfiableY = unsatisfiableY;\n    }\n    /**\n     * Sticky nodes causes nodes to spring back to (startX,startY) when \n     * unconstrained.\n     */\n    void setStickyNodes(const double stickyWeight, \n            std::valarray<double> const & startX,\n            std::valarray<double> const & startY);\n\n    /**\n     * Scaling speeds up the solver by conditioning the quadratic terms matrix.\n     */\n    void setScaling(bool scaling) {\n        this->scaling=scaling;\n    }\n    /**\n     * Says that the Mosek optimisation library should be used to solve the \n     * quadratic programs rather than the libvpsc solver.\n     */\n    void setExternalSolver(bool externalSolver) {\n        this->externalSolver=externalSolver;\n    }\n    /**\n     * At each iteration of layout, generate constraints to avoid overlaps.\n     * If bool horizontal is true, all overlaps will be resolved horizontally, \n     * otherwise some overlaps will be left to be resolved vertically where \n     * doing so leads to less displacement\n     */\n    void setAvoidOverlaps(bool horizontal = false) {\n        constrainedLayout = true;\n        this->avoidOverlaps = horizontal ? Horizontal : Both;\n    }\n    /**\n     * Add constraints to prevent clusters overlapping.\n     */\n    void setNonOverlappingClusters() {\n        constrainedLayout = true;\n        nonOverlappingClusters = true;\n    }\n    /**\n     * For the specified edges (with routings), generate dummy vars and\n     * constraints to try and straighten them.  bendWeight controls how hard we\n     * try to straighten existing bends potBendWeight controls how much we try\n     * to keep straight edges straight\n     */\n    void setStraightenEdges(std::vector<straightener::Edge*>* straightenEdges, \n            double bendWeight = 0.01, double potBendWeight = 0.1,\n            bool xSkipping = true) {\n        for(std::vector<straightener::Edge*>::const_iterator e=straightenEdges->begin();\n                e!=straightenEdges->end();e++) {\n            (*e)->rerouteAround(boundingBoxes);\n        }\n        constrainedLayout = true;\n        this->xSkipping = xSkipping;\n        this->straightenEdges = straightenEdges;\n        this->bendWeight = bendWeight;\n        this->potBendWeight = potBendWeight;\n    }\n    /** \n     * Update position of bounding boxes.\n     */\n    void moveBoundingBoxes() {\n        for(unsigned i=0;i<n;i++) {\n            boundingBoxes[i]->moveCentre(X[i],Y[i]);\n        }\n    }\n\n    ~ConstrainedMajorizationLayout() {\n        if (using_default_done)\n        {\n            delete done;\n        }\n\n        if(constrainedLayout) {\n            delete gpX;\n            delete gpY;\n        }\n    }\n    /**\n     * @brief  Implements the main layout loop, taking descent steps until\n     *         stress is no-longer significantly reduced.\n     *\n     * @param[in] x  If true, layout will be performed in x-dimension\n     *               (default: true).\n     * @param[in] y  If true, layout will be performed in y-dimension\n     *               (default: true).\n     */\n    void run(bool x=true, bool y=true);\n    /**\n     * @brief  Same as run(), but only applies one iteration.  \n     *\n     * This may be useful here it's too hard to implement a call-back \n     * (e.g., in java apps).\n     *\n     * @param[in] x  If true, layout will be performed in x-dimension\n     *               (default: true).\n     * @param[in] y  If true, layout will be performed in y-dimension\n     *               (default: true).\n     */\n    void runOnce(bool x=true, bool y=true);\n    void straighten(std::vector<straightener::Edge*>&, vpsc::Dim);\n    void setConstrainedLayout(bool c) {\n        constrainedLayout=c;\n    }\n    double computeStress();\nprivate:\n    double euclidean_distance(unsigned i, unsigned j) {\n        return sqrt(\n            (X[i] - X[j]) * (X[i] - X[j]) +\n            (Y[i] - Y[j]) * (Y[i] - Y[j]));\n    }\n    double compute_stress(std::valarray<double> const & Dij);\n    void majorize(std::valarray<double> const & Dij,GradientProjection* gp, std::valarray<double>& coords, std::valarray<double> const & startCoords);\n    void newton(std::valarray<double> const & Dij,GradientProjection* gp, std::valarray<double>& coords, std::valarray<double> const & startCoords);\n    unsigned n; //< number of nodes\n    //std::valarray<double> degrees;\n    std::valarray<double> lap2; //< graph laplacian\n    std::valarray<double> Q; //< quadratic terms matrix used in computations\n    std::valarray<double> Dij; //< all pairs shortest path distances\n    double tol; //< convergence tolerance\n    TestConvergence *done; //< functor used to determine if layout is finished\n    bool using_default_done; // Whether we allocated a default TestConvergence object.\n    PreIteration* preIteration; //< client can use this to create locks on nodes\n    vpsc::Rectangles boundingBoxes; //< node bounding boxes\n    /*\n     * stickyNodes controls whether nodes are attracted to their starting\n     * positions (at time of ConstrainedMajorizationLayout instantiation)\n     * stored in startX, startY\n     */\n    std::valarray<double> X, Y;\n    bool stickyNodes;\n    double stickyWeight;\n    std::valarray<double> startX;\n    std::valarray<double> startY;\n    double edge_length;\n    bool constrainedLayout;\n    bool nonOverlappingClusters;\n    /*\n     * A cluster is a set of nodes that are somehow semantically grouped\n     * and should therefore be kept together a bit more tightly than, and\n     * preferably without overlapping, the rest of the graph.\n     *\n     * We achieve this by augmenting the L matrix with stronger attractive\n     * forces between all members of a cluster (other than the root)\n     * and by maintaining a (preferably convex) hull around those \n     * constituents which, using constraints and dummy variables, is \n     * prevented from overlapping other parts of the graph.\n     *\n     * Clusters are defined over the graph in a hierarchy starting with\n     * a single root cluster.\n     *\n     * Need to:\n     *  - augment Lap matrix with intra cluster forces\n     *  - compute convex hull of each cluster\n     *  - from convex hull generate \"StraightenEdges\"\n     */\n    RootCluster *clusterHierarchy;\n    GradientProjection *gpX, *gpY;\n    cola::CompoundConstraints *ccs;\n    UnsatisfiableConstraintInfos *unsatisfiableX, *unsatisfiableY;\n    NonOverlapConstraintsMode avoidOverlaps;\n    std::vector<straightener::Edge*>* straightenEdges;\n    \n    double bendWeight, potBendWeight;\n    /* \n     * determines whether we should leave some overlaps to be resolved\n     * vertically when generating straightening constraints in the x-dim\n     */\n    bool xSkipping;\n    /* \n     * when using the gradient projection optimisation method, the following\n     * controls whether the problem should be preconditioned by affine scaling\n     */\n    bool scaling;\n    /* \n     * if the Mosek quadratic programming environment is available it may be\n     * used to solve each iteration of stress majorization... slow but useful\n     * for testing \n     */\n    bool externalSolver;\n    bool majorization;\n};\n\nvpsc::Rectangle bounds(vpsc::Rectangles& rs);\n\nclass ConstrainedFDLayout;\n\n/**\n * @brief  Interface for writing COLA addons to handle topology preserving \n *         layout.\n */\nclass TopologyAddonInterface \n{\n    public:\n        TopologyAddonInterface()\n        {\n        }\n\n        virtual ~TopologyAddonInterface()\n        {\n        }\n\n        virtual TopologyAddonInterface *clone(void) const\n        {\n            return new TopologyAddonInterface(*this);\n        }\n        \n        virtual void freeAssociatedObjects(void)\n        {\n        }\n\n        virtual void handleResizes(const Resizes& resizeList, unsigned n,\n                std::valarray<double>& X, std::valarray<double>& Y, \n                cola::CompoundConstraints& ccs, \n                vpsc::Rectangles& boundingBoxes,\n                cola::RootCluster* clusterHierarchy)\n        {\n            COLA_UNUSED(resizeList);\n            COLA_UNUSED(n);\n            COLA_UNUSED(X);\n            COLA_UNUSED(Y);\n            COLA_UNUSED(ccs);\n            COLA_UNUSED(boundingBoxes);\n            COLA_UNUSED(clusterHierarchy);\n        }\n        virtual void computePathLengths(unsigned short** G)\n        {\n            COLA_UNUSED(G);\n        }\n        virtual double computeStress(void) const\n        {\n            return 0;\n        }\n        virtual bool useTopologySolver(void) const\n        {\n            return false;\n        }\n        virtual void makeFeasible(bool generateNonOverlapConstraints, \n                vpsc::Rectangles& boundingBoxes, \n                cola::RootCluster* clusterHierarchy)\n        {\n            COLA_UNUSED(generateNonOverlapConstraints);\n            COLA_UNUSED(boundingBoxes);\n            COLA_UNUSED(clusterHierarchy);\n        }\n        virtual void moveTo(const vpsc::Dim dim, vpsc::Variables& vs, \n                vpsc::Constraints& cs, std::valarray<double> &coords,\n                cola::RootCluster* clusterHierarchy)\n        {\n            COLA_UNUSED(dim);\n            COLA_UNUSED(vs);\n            COLA_UNUSED(cs);\n            COLA_UNUSED(coords);\n            COLA_UNUSED(clusterHierarchy);\n        }\n        virtual double applyForcesAndConstraints(ConstrainedFDLayout *layout, \n                const vpsc::Dim dim, std::valarray<double>& g, \n                vpsc::Variables& vs, vpsc::Constraints& cs, \n                std::valarray<double> &coords,\n                DesiredPositionsInDim& des, double oldStress)\n        {\n            COLA_UNUSED(layout);\n            COLA_UNUSED(dim);\n            COLA_UNUSED(g);\n            COLA_UNUSED(vs);\n            COLA_UNUSED(cs);\n            COLA_UNUSED(coords);\n            COLA_UNUSED(des);\n            COLA_UNUSED(oldStress);\n            return 0;\n        }\n};\n\n\n/**\n * @brief Implements a constrained force-directed layout algorithm.\n *\n * This method is based on a non-linear gradient projection technique.\n * Conceptually it's similar to a force directed method like\n * Fruchterman-Reingold---but using a more principled goal function and\n * optimisation techniques.\n */\nclass ConstrainedFDLayout {\npublic:\n    /**\n     * @brief Constructs a constrained force-directed layout instance.\n     *\n     * If an empty edges (es) vector is passed to the constructor, then \n     * constraint satisfaction will be performed, but no force-directed\n     * layout.  In this case, idealLength and eLengths have no effect.\n     *\n     * Conversely, if no constraints or clusters are specified and no overlap\n     * prevention is enabled, but edge info is given, then pure force-directed \n     * layout will be performed.\n     *\n     * @param[in] rs  Bounding boxes of nodes at their initial positions.\n     * @param[in] es  Simple pair edges, giving indices of the start and end \n     *                nodes in rs.\n     * @param[in] idealLength  A scalar modifier of ideal edge lengths in \n     *                         eLengths or of 1 if no ideal lengths are \n     *                         specified.\n     * @param[in] eLengths  Individual ideal lengths for edges.\n     *                      The actual ideal length used for the ith edge is \n     *                      idealLength*eLengths[i], or if eLengths is nullptr a\n     *                      then just idealLength is used (i.e., eLengths[i] \n     *                      is assumed to be 1).\n     * @param[in] done  A test of convergence operation called at the end of \n     *                  each iteration (optional).  If not given, uses a\n     *                  default TestConvergence object.\n     * @param[in] preIteration  An operation called before each iteration\n     *                          (optional).\n     */\n    ConstrainedFDLayout(\n        const vpsc::Rectangles& rs,\n        const std::vector<cola::Edge>& es,\n        const double idealLength,\n        const EdgeLengths& eLengths = StandardEdgeLengths, \n        TestConvergence* doneTest = nullptr,\n        PreIteration* preIteration = nullptr);\n    ~ConstrainedFDLayout();\n  \n    /**\n     * @brief  Implements the main layout loop, taking descent steps until\n     *         stress is no-longer significantly reduced.\n     *\n     * @param[in] x  If true, layout will be performed in x-dimension\n     *               (default: true).\n     * @param[in] y  If true, layout will be performed in y-dimension\n     *               (default: true).\n     */\n    void run(bool x=true, bool y=true);\n\n    /**\n     * @brief  Same as run(), but only applies one iteration.  \n     *\n     * This may be useful here it's too hard to implement a call-back \n     * (e.g., in java apps).\n     *\n     * @param[in] x  If true, layout will be performed in x-dimension\n     *               (default: true).\n     * @param[in] y  If true, layout will be performed in y-dimension\n     *               (default: true).\n     */\n    void runOnce(bool x=true, bool y=true);\n\n    /**\n     * @brief  Specify a set of compound constraints to apply to the layout.\n     *\n     * @param[in] ccs  The compound constraints.\n     */\n    void setConstraints(const cola::CompoundConstraints& ccs);\n\n    /**\n     * @brief  Specifies whether non-overlap constraints should be\n     *         automatically generated between all nodes, as well as any\n     *         exemptions to this.\n     *\n     * The optional second parameter indicates groups of nodes that should be\n     * exempt from having non-overlap constraints generated between each other.\n     * For example, you might want to do this for nodes representing ports, or\n     * the child nodes in a particular cluster.\n     *\n     * @param[in] avoidOverlaps     New boolean value for this option.\n     * @param[in] listOfNodeGroups  A list of groups of node indexes which will\n     *                              not have non-overlap constraints generated\n     *                              between each other.\n     */\n    void setAvoidNodeOverlaps(bool avoidOverlaps,\n            ListOfNodeIndexes listOfNodeGroups =\n            ListOfNodeIndexes());\n\n    /** \n     *  @brief  Set an addon for doing topology preserving layout.\n     *\n     *  It is expected that you would use the topology::ColaTopologyAddon() \n     *  from libtopology rather than write your own.  This is done so that \n     *  libcola does not have to depend on libtopology.\n     *\n     *  @param[in] topology  Instance of a class implementing the\n     *                       TopologyAddonInterface.\n     *  @sa topology::ColaTopologyAddon\n     */\n    void setTopology(TopologyAddonInterface *topology); \n    TopologyAddonInterface *getTopology(void);\n    \n    void setDesiredPositions(DesiredPositions *desiredPositions);\n\n    /**\n     * @brief  Specifies an optional hierarchy for clustering nodes.\n     *\n     * @param[in] hierarchy  A pointer to a RootCluster object defining the\n     *                      the cluster hierarchy (optional).\n     */\n    void setClusterHierarchy(RootCluster *hierarchy)\n    {\n        clusterHierarchy = hierarchy;\n    }\n    /**\n     * @brief Register to receive information about unsatisfiable constraints.\n     *\n     * In the case of unsatisifiable constraints, the solver will drop \n     * unsatisfiable constraints of lowest priority.  Information about these\n     * will be written to these lists after each iteration of constrained \n     * layout.\n     *\n     * param[out] unsatisfiableX A pointer to a UnsatisfiableConstraintInfos \n     *                           object that will be used to record \n     *                           unsatisfiable constraints in the x-dimension.\n     * param[out] unsatisfiableY A pointer to a UnsatisfiableConstraintInfos \n     *                           object that will be used to record \n     *                           unsatisfiable constraints in the y-dimension.\n     */\n    void setUnsatisfiableConstraintInfo(\n            UnsatisfiableConstraintInfos *unsatisfiableX,\n            UnsatisfiableConstraintInfos *unsatisfiableY)\n    {\n        unsatisfiable.resize(2);\n        unsatisfiable[0]=unsatisfiableX;\n        unsatisfiable[1]=unsatisfiableY;\n    }\n    /**\n     * @brief Finds a feasible starting position for nodes that satisfies the\n     *        given constraints.\n     *\n     * Starts with an initial position (x, y) for the nodes.  This position \n     * is then iteratively updated with a greedy heuristic that tries adding\n     * additional constraints based on compound constraint priority to the\n     * satisfiable set, so as to satisfy as many of the placement constraints\n     * as possible.  This includes automatically generated constraints for\n     * non-overlap and cluster containment.\n     *\n     * @param[in] xBorder  Optional border width to add to left and right\n     *                     sides of rectangles. Defaults to 1.\n     * @param[in] yBorder  Optional border width to add to top and bottom\n     *                     sides of rectangles. Defaults to 1.\n     *\n     * @note This method doesn't do force-directed layout.  All forces are \n     *       ignored and it merely satisfies the constraints with minimal \n     *       movement to nodes.\n     */\n    void makeFeasible(double xBorder=1, double yBorder=1);\n\n    /**\n     * @brief  A convenience method that can be called from Java to free\n     *         the memory of nodes (Rectangles), CompoundConstraints, etc.\n     * \n     * This assumes that the ConstrainedFDLayout instance takes ownership\n     * of all the objects passed to it.\n     *\n     * This is useful because in SWIG we have problems with Java wrapper\n     * classes going out of scope and causing objects like Rectanges to \n     * sometimes be freed when the layout instance still needs them.  For \n     * this reason we prevent the Java wrappers from deleting the internal\n     * C++ instances, and let them be cleaned up later via this method.\n     */\n    void freeAssociatedObjects(void);\n    \n    //! @brief  Generates an SVG file containing debug output and code that\n    //!         can be used to regenerate the instance.\n    //!\n    //! This method can be called before or after run() or makeFeasible()\n    //! have been called.\n    //!\n    //! @param[in] filename  A string indicating the filename (without \n    //!                      extension) for the output file.  Defaults to\n    //!                      \"libcola-debug.svg\" if no filename is given.\n    //!\n    void outputInstanceToSVG(std::string filename = std::string());\n\n    /**\n     * @brief  Specifies whether neighbour stress should be used.\n     *\n     * Under neighbour stress, only the terms representing neighbouring\n     * nodes contribute to the stress function. This can help to distribute\n     * nodes more evenly, eliminating long-range forces.\n     *\n     * Default value is false.\n     *\n     * @param[in] useNeighbourStress  New boolean value for this option.\n     */\n    void setUseNeighbourStress(bool useNeighbourStress);\n\n    /**\n     * @brief  Retrieve a copy of the \"D matrix\" computed by the computePathLengths\n     * method, linearised as a vector.\n     *\n     * This is especially useful for projects in SWIG target languages that want to\n     * do their own computations with stress.\n     *\n     * D is the required euclidean distances between pairs of nodes\n     * based on the shortest paths between them (using\n     * m_idealEdgeLength*eLengths[edge] as the edge length, if eLengths array\n     * is provided otherwise just m_idealEdgeLength).\n     *\n     * @return  vector representing the D matrix.\n     */\n    std::vector<double> readLinearD(void);\n\n    /**\n     * @brief  Retrieve a copy of the \"G matrix\" computed by the computePathLengths\n     * method, linearised as a vector.\n     *\n     * * This is especially useful for projects in SWIG target languages that want to\n     * do their own computations with stress.\n     *\n     * G is a matrix of unsigned ints such that G[u][v]=\n     *   0 if there are no forces required between u and v\n     *     (for example, if u and v are in unconnected components)\n     *   1 if attractive forces are required between u and v\n     *     (i.e. if u and v are immediately connected by an edge and there is\n     *      no topology route between u and v (for which an attractive force\n     *      is computed elsewhere))\n     *   2 if no attractive force is required between u and v but there is\n     *     a connected path between them.\n     *\n     * @return  vector representing the G matrix.\n     */\n    std::vector<unsigned> readLinearG(void);\n\n    double computeStress() const;\n\nprivate:\n    unsigned n; // number of nodes\n    std::valarray<double> X, Y;\n    vpsc::Rectangles boundingBoxes;\n    double applyForcesAndConstraints(const vpsc::Dim dim,const double oldStress);\n    double computeStepSize(const SparseMatrix& H, const std::valarray<double>& g,\n            const std::valarray<double>& d) const;\n    void computeDescentVectorOnBothAxes(const bool xaxis, const bool yaxis,\n            double stress, std::valarray<double>& x0, std::valarray<double>& x1);\n    void moveTo(const vpsc::Dim dim, std::valarray<double>& target);\n    double applyDescentVector(\n            const std::valarray<double>& d,\n            const std::valarray<double>& oldCoords,\n            std::valarray<double> &coords, \n            const double oldStress, \n            double stepsize\n            /*,topology::TopologyConstraints *s=nullptr*/);\n    void computePathLengths(\n            const std::vector<Edge>& es, std::valarray<double> eLengths);\n    void generateNonOverlapAndClusterCompoundConstraints(\n            vpsc::Variables (&vs)[2]);\n    void handleResizes(const Resizes&);\n    void setPosition(std::valarray<double>& pos);\n    void moveBoundingBoxes();\n    bool noForces(double, double, unsigned) const;\n    void computeForces(const vpsc::Dim dim, SparseMap &H, \n            std::valarray<double> &g);\n    void recGenerateClusterVariablesAndConstraints(\n            vpsc::Variables (&vars)[2], unsigned int& priority, \n            cola::NonOverlapConstraints *noc, Cluster *cluster, \n            cola::CompoundConstraints& idleConstraints);\n    std::vector<double> offsetDir(double minD);\n\n    void computeNeighbours(std::vector<Edge> es);\n    std::vector<std::vector<unsigned> > neighbours;\n    std::vector<std::vector<double> > neighbourLengths;\n    TestConvergence *done;\n    bool using_default_done; // Whether we allocated a default TestConvergence object.\n    PreIteration* preIteration;\n    cola::CompoundConstraints ccs;\n    double** D;\n    unsigned short** G;\n    double minD;\n    PseudoRandom random;\n\n    TopologyAddonInterface *topologyAddon;\n    std::vector<UnsatisfiableConstraintInfos*> unsatisfiable;\n    bool rungekutta;\n    DesiredPositions *desiredPositions;\n    cola::CompoundConstraints extraConstraints;\n    \n    RootCluster *clusterHierarchy;\n    double rectClusterBuffer;\n    double m_idealEdgeLength;\n    bool m_generateNonOverlapConstraints;\n    bool m_useNeighbourStress;\n    const std::valarray<double> m_edge_lengths;\n\n    NonOverlapConstraintExemptions *m_nonoverlap_exemptions;\n\n    friend class topology::ColaTopologyAddon;\n    friend class dialect::Graph;\n};\n\nstruct ProjectionResult {\n    int errorLevel;\n    std::string unsatinfo;\n};\n\n/**\n * @brief Attempt to do a projection onto a vector of cola CompoundConstraints.\n * @param dim the dimension in which to perform the projection\n * @param rs the rectangles representing the nodes\n * @param ccs the constraints\n * @param preventOverlaps boolean saying whether you want overlap prevention\n *                        constraints to be automatically generated\n * @param accept  an integer indicating which types of infeasibilities you will accept.\n *                The default value of 0 means you accept no infeasibility.\n *                For other values, see the description of the \"errorLevel\" in the\n *                doctext for the solve function below.\n * @param debugLevel see solve function below\n * @note          Rectangle positions are updated if and only if the error level is less\n *                than or equal to the accept level.\n * @return a ProjectionResult indicating whether the projection was feasible or not.\n * @sa solve\n */\nProjectionResult projectOntoCCs(vpsc::Dim dim, vpsc::Rectangles &rs, cola::CompoundConstraints ccs,\n                                bool preventOverlaps, int accept=0, unsigned debugLevel=0);\n\n/**\n * @brief Constructs a solver and attempts to solve the passed constraints on the passed vars.\n * @param debugLevel: controls how much information comes back when the projection fails. See below.\n * @return a ProjectionResult, containing:\n *  errorLevel:\n *   0: all constraints were satisfiable.\n *   1: some constraints were unsatisfiable, but they were all nonoverlap constraints.\n *   2: some constraints were unsatisfiable which were /not/ nonoverlap constraints.\n *  unsatinfo:\n *   The amount of information reported depends on the debugLevel:\n *   0: nothing reported (empty string)\n *   1: description of the unsatisfied constraints\n *   2: the info from level 1, plus a description of all \"related\" constraints (those sharing a variable).\n *      This is useful for understanding the conflicts.\n */\nProjectionResult solve(vpsc::Variables &vs, vpsc::Constraints &cs, vpsc::Rectangles &rs,\n                        unsigned debugLevel=0);\n\n\nConstrainedMajorizationLayout* simpleCMLFactory(\n        vpsc::Rectangles& rs,\n        std::vector<Edge> const & es,\n        RootCluster* clusterHierarchy,\n        const double idealLength,\n        bool useNeighbourStress = false\n    );\n\n/*\n * find shortest path lengths from node s to all other nodes.\n * @param s starting node\n * @param n total number of nodes\n * @param d n vector of path lengths\n * @param es edge pairs\n * @param eLengths edge weights\n */\nvoid dijkstra(const unsigned s, const unsigned n, double* d, \n              const std::vector<cola::Edge>& es,\n              const std::valarray<double> & eLengths);\n\n#if 0\nvoid removeClusterOverlapFast(RootCluster& clusterHierarchy, vpsc::Rectangles& rs, Locks& locks);\n#endif\n\nvoid setupVarsAndConstraints(unsigned n, const CompoundConstraints& ccs,\n        const vpsc::Dim dim, vpsc::Rectangles& boundingBoxes,\n        RootCluster *clusterHierarchy,\n        vpsc::Variables& vs, vpsc::Constraints& cs, \n        std::valarray<double> &coords);\nvoid setVariableDesiredPositions(vpsc::Variables& vs, vpsc::Constraints& cs,\n        const DesiredPositionsInDim& des, std::valarray<double>& coords);\n\n}\n#endif // COLA_H\n"
  },
  {
    "path": "cola/libcola/cola_log.h",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libcola - A library providing force-directed network layout using the\n *           stress-majorization method subject to separation constraints.\n *\n * Copyright (C) 2006-2008  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n*/\n\n/*\nLogging code from DJJ article: http://www.ddj.com/cpp/201804215.\n\nTitle: Logging In C++\nAuthor: Petru Marginean\nKeywords: OCT07   C++\nDescription: Unpublished source code accompanying the article by Petru Marginean, in which he presents a C++ logging framework that is typesafe, thread-safe, and portable.\n */\n#ifndef __COLA_LOG_H__\n#define __COLA_LOG_H__\n\n#include <sstream>\n#include <string>\n#include <cstdio>\n#include <iomanip>\n\nnamespace cola {\ninline std::string NowTime();\n\nenum TLogLevel {logERROR, logWARNING, logINFO, logDEBUG, logDEBUG1, logDEBUG2, logDEBUG3, logDEBUG4};\n\ntemplate <typename T>\nclass Log\n{\npublic:\n    Log();\n    virtual ~Log();\n    std::ostringstream& Get(TLogLevel level = logINFO);\npublic:\n    static TLogLevel& ReportingLevel();\n    static std::string ToString(TLogLevel level);\n    static TLogLevel FromString(const std::string& level);\nprotected:\n    std::ostringstream os;\nprivate:\n    Log(const Log&);\n    Log& operator =(const Log&);\n};\n\ntemplate <typename T>\nLog<T>::Log()\n{\n}\n\ntemplate <typename T>\nstd::ostringstream& Log<T>::Get(TLogLevel level)\n{\n    os << \"- \" << NowTime();\n    os << \" \" << ToString(level) << \": \";\n    os << std::string(level > logDEBUG ? level - logDEBUG : 0, '\\t');\n    return os;\n}\n\ntemplate <typename T>\nLog<T>::~Log()\n{\n    os << std::endl;\n    T::Output(os.str());\n}\n\ntemplate <typename T>\nTLogLevel& Log<T>::ReportingLevel()\n{\n    static TLogLevel reportingLevel = cola::logDEBUG4;\n    return reportingLevel;\n}\n\ntemplate <typename T>\nstd::string Log<T>::ToString(TLogLevel level)\n{\n    static const char* const buffer[] = {\"ERROR\", \"WARNING\", \"INFO\", \"DEBUG\", \"DEBUG1\", \"DEBUG2\", \"DEBUG3\", \"DEBUG4\"};\n    return buffer[level];\n}\n\ntemplate <typename T>\nTLogLevel Log<T>::FromString(const std::string& level)\n{\n    if (level == \"DEBUG4\")\n        return logDEBUG4;\n    if (level == \"DEBUG3\")\n        return logDEBUG3;\n    if (level == \"DEBUG2\")\n        return logDEBUG2;\n    if (level == \"DEBUG1\")\n        return logDEBUG1;\n    if (level == \"DEBUG\")\n        return logDEBUG;\n    if (level == \"INFO\")\n        return logINFO;\n    if (level == \"WARNING\")\n        return logWARNING;\n    if (level == \"ERROR\")\n        return logERROR;\n    Log<T>().Get(logWARNING) << \"Unknown logging level '\" << level << \"'. Using INFO level as default.\";\n    return logINFO;\n}\n\nclass Output2FILE\n{\npublic:\n    static FILE*& Stream();\n    static void Output(const std::string& msg);\n};\n\ninline FILE*& Output2FILE::Stream()\n{\n    static FILE* pStream = stderr;\n    return pStream;\n}\n\ninline void Output2FILE::Output(const std::string& msg)\n{\n    FILE* pStream = Stream();\n    if (!pStream)\n        return;\n    fprintf(pStream, \"%s\", msg.c_str());\n    fflush(pStream);\n}\n\n#if defined(WIN32) || defined(_WIN32) || defined(__WIN32__)\n#   if defined (BUILDING_FILELOG_DLL)\n#       define FILELOG_DECLSPEC   __declspec (dllexport)\n#   elif defined (USING_FILELOG_DLL)\n#       define FILELOG_DECLSPEC   __declspec (dllimport)\n#   else\n#       define FILELOG_DECLSPEC\n#   endif // BUILDING_DBSIMPLE_DLL\n#else\n#   define FILELOG_DECLSPEC\n#endif // _WIN32\n\nclass FILELOG_DECLSPEC FILELog : public Log<Output2FILE> {};\n//typedef Log<Output2FILE> FILELog;\n\n#ifndef FILELOG_MAX_LEVEL\n#define FILELOG_MAX_LEVEL cola::logDEBUG4\n#endif\n\n#define FILE_LOG(level) \\\n    if (level > FILELOG_MAX_LEVEL) ;\\\n    else if (level > cola::FILELog::ReportingLevel() || !cola::Output2FILE::Stream()) ; \\\n    else cola::FILELog().Get(level)\n\n#if defined(WIN32) || defined(_WIN32) || defined(__WIN32__)\n\n#include <windows.h>\n\ninline std::string NowTime()\n{\n    const int MAX_LEN = 200;\n    char buffer[MAX_LEN];\n    if (GetTimeFormatA(LOCALE_USER_DEFAULT, 0, 0,\n            \"HH':'mm':'ss\", buffer, MAX_LEN) == 0)\n        return \"Error in NowTime()\";\n\n    static DWORD first = GetTickCount();\n    std::stringstream result;\n    result << buffer << \".\" << std::setfill('0') << std::setw(3) << ((long)(GetTickCount() - first) % 1000);\n    return result.str();\n}\n\n#else\n\n#include <sys/time.h>\n\ninline std::string NowTime()\n{\n    char buffer[11];\n    time_t t;\n    time(&t);\n    tm r;\n    strftime(buffer, sizeof(buffer), \"%X\", localtime_r(&t, &r));\n    struct timeval tv;\n    gettimeofday(&tv, 0);\n    std::stringstream result;\n    result << buffer << \".\" << std::setfill('0') << std::setw(3) << ((long)tv.tv_usec / 1000);\n    return result.str();\n}\n\n#endif //WIN32\n\n} // namespace cola\n\n#endif //__COLA_LOG_H__\n"
  },
  {
    "path": "cola/libcola/colafd.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libcola - A library providing force-directed network layout using the\n *           stress-majorization method subject to separation constraints.\n *\n * Copyright (C) 2006-2015  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n * Author(s):  Tim Dwyer\n *             Michael Wybrow\n *\n*/\n\n// cmath needs ::strcpy_s under MinGW so include cstring.\n#include <cstring>\n\n#include <vector>\n#include <cmath>\n#include <limits>\n#include <clocale>\n\n#include \"libvpsc/solve_VPSC.h\"\n#include \"libvpsc/variable.h\"\n#include \"libvpsc/constraint.h\"\n#include \"libvpsc/rectangle.h\"\n#include \"libvpsc/exceptions.h\"\n\n#include \"libcola/commondefs.h\"\n#include \"libcola/cola.h\"\n#include \"libcola/shortest_paths.h\"\n#include \"libcola/straightener.h\"\n#include \"libcola/cc_clustercontainmentconstraints.h\"\n#include \"libcola/cc_nonoverlapconstraints.h\"\n\n#ifdef MAKEFEASIBLE_DEBUG\n  #include \"libcola/output_svg.h\"\n#endif\n\n// Needs to come last since it will include windows.h on WIN32 and\n// may mess up C++ std library include on GCC 4.4\n#include \"libcola/cola_log.h\"\n\nusing namespace std;\nusing vpsc::Dim;\nusing vpsc::XDIM;\nusing vpsc::YDIM;\nusing vpsc::IncSolver;\nusing vpsc::Variable;\nusing vpsc::Variables;\nusing vpsc::Constraint;\nusing vpsc::Constraints;\nusing vpsc::Rectangle;\nusing vpsc::Rectangles;\n\nnamespace cola {\n\ntemplate <class T>\nvoid delete_vector(vector<T*> &v) {\n    for_each(v.begin(),v.end(),delete_object());\n    v.clear();\n}\nResizes PreIteration::__resizesNotUsed;\nLocks PreIteration::__locksNotUsed;\ninline double dotProd(valarray<double> x, valarray<double> y) {\n    COLA_ASSERT(x.size()==y.size());\n    double dp=0;\n    for(unsigned i=0;i<x.size();i++) {\n        dp+=x[i]*y[i];\n    }\n    return dp;\n}\ntemplate <typename T>\nvoid dumpSquareMatrix(unsigned n, T** L) {\n    printf(\"Matrix %dX%d\\n{\",n,n);\n    for(unsigned i=0;i<n;i++) {\n        printf(\"{\");\n        for(unsigned j=0;j<n;j++) {\n            std::cout<<L[i][j];\n            char c=j==n-1?'}':',';\n            printf(\"%c\",c);\n        }\n        char c=i==n-1?'}':',';\n        printf(\"%c\\n\",c);\n    }\n}\n\nConstrainedFDLayout::ConstrainedFDLayout(const vpsc::Rectangles& rs,\n        const std::vector< Edge >& es, const double idealLength,\n        const EdgeLengths& eLengths,\n        TestConvergence *doneTest, PreIteration* preIteration)\n    : n(rs.size()),\n      X(valarray<double>(n)),\n      Y(valarray<double>(n)),\n      done(doneTest),\n      using_default_done(false),\n      preIteration(preIteration),\n      topologyAddon(new TopologyAddonInterface()),\n      rungekutta(true),\n      desiredPositions(nullptr),\n      clusterHierarchy(nullptr),\n      rectClusterBuffer(0),\n      m_idealEdgeLength(idealLength),\n      m_generateNonOverlapConstraints(false),\n      m_useNeighbourStress(false),\n      m_edge_lengths(eLengths.data(), eLengths.size()),\n      m_nonoverlap_exemptions(new NonOverlapConstraintExemptions())\n{\n    minD = DBL_MAX;\n\n    if (done == nullptr)\n    {\n        done = new TestConvergence();\n        using_default_done = true;\n    }\n\n    computeNeighbours(es);\n\n    //FILELog::ReportingLevel() = logDEBUG1;\n    FILELog::ReportingLevel() = logERROR;\n    boundingBoxes = rs;\n    done->reset();\n    unsigned i=0;\n    for(vpsc::Rectangles::const_iterator ri=rs.begin();ri!=rs.end();++ri,++i) {\n        X[i]=(*ri)->getCentreX();\n        Y[i]=(*ri)->getCentreY();\n        FILE_LOG(logDEBUG) << *ri;\n    }\n    D=new double*[n];\n    G=new unsigned short*[n];\n    for(unsigned i=0;i<n;i++) {\n        D[i]=new double[n];\n        G[i]=new unsigned short[n];\n    }\n\n    computePathLengths(es,m_edge_lengths);\n}\n\nstd::vector<double> ConstrainedFDLayout::readLinearD(void)\n{\n    std::vector<double> d;\n    d.resize(n*n);\n    for (unsigned i = 0; i < n; ++i) {\n        for (unsigned j = 0; j < n; ++j) {\n            d[n*i + j] = D[i][j];\n        }\n    }\n    return d;\n}\n\nstd::vector<unsigned> ConstrainedFDLayout::readLinearG(void)\n{\n    std::vector<unsigned> g;\n    g.resize(n*n);\n    for (unsigned i = 0; i < n; ++i) {\n        for (unsigned j = 0; j < n; ++j) {\n            g[n*i + j] = G[i][j];\n        }\n    }\n    return g;\n}\n\nvoid ConstrainedFDLayout::computeNeighbours(vector<Edge> es) {\n    for (unsigned i = 0; i < n; ++i) {\n        neighbours.push_back(vector<unsigned>(n));\n    }\n    for (vector<Edge>::iterator it = es.begin(); it!=es.end(); ++it) {\n        Edge e = *it;\n        unsigned s = e.first, t = e.second;\n        neighbours[s][t] = 1;\n        neighbours[t][s] = 1;\n    }\n}\n\nvoid dijkstra(const unsigned s, const unsigned n, double* d,\n        const vector<Edge>& es, const std::valarray<double> & eLengths)\n{\n    shortest_paths::dijkstra(s,n,d,es,eLengths);\n}\n\nvoid ConstrainedFDLayout::setConstraints(const cola::CompoundConstraints& ccs)\n{\n    this->ccs = ccs;\n}\n\nvoid ConstrainedFDLayout::setAvoidNodeOverlaps(bool avoidOverlaps,\n        std::vector<std::vector<unsigned> > listOfNodeGroups)\n{\n    m_generateNonOverlapConstraints = avoidOverlaps;\n    m_nonoverlap_exemptions->addExemptGroupOfNodes(listOfNodeGroups);\n}\n\nvoid ConstrainedFDLayout::setUseNeighbourStress(bool useNeighbourStress)\n{\n    m_useNeighbourStress = useNeighbourStress;\n}\n\nvoid ConstrainedFDLayout::setDesiredPositions(DesiredPositions *desiredPositions)\n{\n    this->desiredPositions = desiredPositions;\n}\n\n\n/*\n * Sets up the D and G matrices.  D is the required euclidean distances\n * between pairs of nodes based on the shortest paths between them (using\n * m_idealEdgeLength*eLengths[edge] as the edge length, if eLengths array\n * is provided otherwise just m_idealEdgeLength).  G is a matrix of\n * unsigned ints such that G[u][v]=\n *   0 if there are no forces required between u and v\n *     (for example, if u and v are in unconnected components)\n *   1 if attractive forces are required between u and v\n *     (i.e. if u and v are immediately connected by an edge and there is\n *      no topology route between u and v (for which an attractive force\n *      is computed elsewhere))\n *   2 if no attractive force is required between u and v but there is\n *     a connected path between them.\n */\nvoid ConstrainedFDLayout::computePathLengths(\n        const vector<Edge>& es, std::valarray<double> eLengths)\n{\n    // Correct zero or negative entries in eLengths array.\n    for (size_t i = 0; i < eLengths.size(); ++i)\n    {\n        if (eLengths[i] <= 0)\n        {\n            fprintf(stderr, \"Warning: ignoring non-positive length at index %d \"\n                    \"in ideal edge length array.\\n\", (int) i);\n            eLengths[i] = 1;\n        }\n    }\n\n    shortest_paths::johnsons(n,D,es,eLengths);\n    //dumpSquareMatrix<double>(n,D);\n    for(unsigned i=0;i<n;i++) {\n        for(unsigned j=0;j<n;j++) {\n            if(i==j) continue;\n            double& d=D[i][j];\n            unsigned short& p=G[i][j];\n            p=2;\n            if(d==DBL_MAX) {\n                // i and j are in disconnected subgraphs\n                p=0;\n            } else {\n                d*=m_idealEdgeLength;\n            }\n\n            if ((d > 0) && (d < minD)) {\n                minD = d;\n            }\n        }\n    }\n    if (minD == DBL_MAX) minD = 1;\n\n    for(vector<Edge>::const_iterator e=es.begin();e!=es.end();++e) {\n        unsigned u=e->first, v=e->second;\n        G[u][v]=G[v][u]=1;\n    }\n    topologyAddon->computePathLengths(G);\n    //dumpSquareMatrix<short>(n,G);\n}\n\ntypedef valarray<double> Position;\nvoid getPosition(Position& X, Position& Y, Position& pos) {\n    unsigned n=X.size();\n    COLA_ASSERT(Y.size()==n);\n    COLA_ASSERT(pos.size()==2*n);\n    for(unsigned i=0;i<n;++i) {\n        pos[i]=X[i];\n        pos[i+n]=Y[i];\n    }\n}\n/*\n * moves all rectangles to the desired position while respecting\n * constraints.\n * @param pos target positions of both axes\n */\nvoid ConstrainedFDLayout::setPosition(Position& pos) {\n    COLA_ASSERT(Y.size()==X.size());\n    COLA_ASSERT(pos.size()==2*X.size());\n    moveTo(vpsc::HORIZONTAL,pos);\n    moveTo(vpsc::VERTICAL,pos);\n}\n/*\n * Layout is performed by minimizing the P-stress goal function iteratively.\n * At each iteration taking a step in the steepest-descent direction.\n * x0 is the current position, x1 is the x0 - descentvector.\n */\nvoid ConstrainedFDLayout::computeDescentVectorOnBothAxes(\n        const bool xAxis, const bool yAxis,\n        double stress, Position& x0, Position& x1) {\n    setPosition(x0);\n    if(xAxis) {\n        applyForcesAndConstraints(vpsc::HORIZONTAL,stress);\n    }\n    if(yAxis) {\n        applyForcesAndConstraints(vpsc::VERTICAL,stress);\n    }\n    getPosition(X,Y,x1);\n}\n\n/*\n * run() implements the main layout loop, taking descent steps until\n * stress is no-longer significantly reduced.\n * done is a callback used to check stress but also to report updated\n * positions.\n */\nvoid ConstrainedFDLayout::run(const bool xAxis, const bool yAxis)\n{\n    // This generates constraints for non-overlap inside and outside\n    // of clusters.  To assign correct variable indexes it requires\n    // that vs[] contains elements equal to the number of rectangles.\n    vpsc::Variables vs[2];\n    vs[0].resize(n);\n    vs[1].resize(n);\n    generateNonOverlapAndClusterCompoundConstraints(vs);\n\n    FILE_LOG(logDEBUG) << \"ConstrainedFDLayout::run...\";\n    double stress=DBL_MAX;\n    do {\n        if(preIteration) {\n            if(!(*preIteration)()) {\n                break;\n            }\n            //printf(\"preIteration->changed=%d\\n\",preIteration->changed);\n            if(preIteration->changed) {\n                stress=DBL_MAX;\n            }\n            if(preIteration->resizes.size()>0) {\n                FILE_LOG(logDEBUG) << \" Resize event!\";\n                handleResizes(preIteration->resizes);\n            }\n        }\n        unsigned N=2*n;\n        Position x0(N),x1(N);\n        getPosition(X,Y,x0);\n        if(rungekutta) {\n            Position a(N),b(N),c(N),d(N),ia(N),ib(N);\n            computeDescentVectorOnBothAxes(xAxis,yAxis,stress,x0,a);\n            ia=x0+(a-x0)/2.0;\n            computeDescentVectorOnBothAxes(xAxis,yAxis,stress,ia,b);\n            ib=x0+(b-x0)/2.0;\n            computeDescentVectorOnBothAxes(xAxis,yAxis,stress,ib,c);\n            computeDescentVectorOnBothAxes(xAxis,yAxis,stress,c,d);\n            x1=a+2.0*b+2.0*c+d;\n            x1/=6.0;\n        } else {\n            computeDescentVectorOnBothAxes(xAxis,yAxis,stress,x0,x1);\n        }\n        setPosition(x1);\n        stress=computeStress();\n        FILE_LOG(logDEBUG) << \"stress=\"<<stress;\n    } while(!(*done)(stress,X,Y));\n    for(unsigned i=0;i<n;i++) {\n        vpsc::Rectangle *r=boundingBoxes[i];\n    FILE_LOG(logDEBUG) << *r;\n    }\n    FILE_LOG(logDEBUG) << \"ConstrainedFDLayout::run done.\";\n\n    // Clear extra constraints.\n    for_each(extraConstraints.begin(), extraConstraints.end(), delete_object());\n    extraConstraints.clear();\n\n    // Free extra variables used for cluster containment.\n    for (size_t dim = 0; dim < 2; ++dim)\n    {\n        for (size_t i = n; i < vs[dim].size(); ++i)\n        {\n            delete vs[dim][i];\n        }\n    }\n}\n\n/*\n * Same as run, but only applies one iteration.  This may be useful\n * where it's too hard to implement a call-back (e.g. in java apps)\n */\nvoid ConstrainedFDLayout::runOnce(const bool xAxis, const bool yAxis) {\n    if(n==0) return;\n    double stress=DBL_MAX;\n    unsigned N=2*n;\n    Position x0(N),x1(N);\n    getPosition(X,Y,x0);\n    if(rungekutta) {\n        Position a(N),b(N),c(N),d(N),ia(N),ib(N);\n        computeDescentVectorOnBothAxes(xAxis,yAxis,stress,x0,a);\n        ia=x0+(a-x0)/2.0;\n        computeDescentVectorOnBothAxes(xAxis,yAxis,stress,ia,b);\n        ib=x0+(b-x0)/2.0;\n        computeDescentVectorOnBothAxes(xAxis,yAxis,stress,ib,c);\n        computeDescentVectorOnBothAxes(xAxis,yAxis,stress,c,d);\n        x1=a+2.0*b+2.0*c+d;\n        x1/=6.0;\n    } else {\n        computeDescentVectorOnBothAxes(xAxis,yAxis,stress,x0,x1);\n    }\n}\n\n\n// Used for sorting the CompoundConstraints from lowest priority to highest.\nstatic bool cmpCompoundConstraintPriority(const cola::CompoundConstraint *lhs,\n        const cola::CompoundConstraint *rhs)\n{\n    return lhs->priority() < rhs->priority();\n}\n\n\nvoid ConstrainedFDLayout::recGenerateClusterVariablesAndConstraints(\n        vpsc::Variables (&vars)[2], unsigned int& priority,\n        cola::NonOverlapConstraints *noc, Cluster *cluster,\n        cola::CompoundConstraints& idleConstraints)\n{\n    for (std::vector<Cluster*>::iterator curr = cluster->clusters.begin();\n            curr != cluster->clusters.end(); ++curr)\n    {\n        // For each of the child clusters, recursively call this function.\n        recGenerateClusterVariablesAndConstraints(vars, priority,\n                noc, *curr, idleConstraints);\n    }\n\n    if ( (noc == nullptr) && (dynamic_cast<RootCluster *> (cluster) == nullptr) )\n    {\n        double freeWeight = 0.00000000001;\n        // Then create left and right variables for the boundary of this\n        // cluster.\n        vpsc::Variable *variable = nullptr;\n        cluster->clusterVarId = vars[XDIM].size();\n        COLA_ASSERT(vars[XDIM].size() == vars[YDIM].size());\n        // Left:\n        variable = new vpsc::Variable(vars[XDIM].size(),\n                cluster->bounds.getMinX(), freeWeight);\n        vars[XDIM].push_back(variable);\n        // Right:\n        variable = new vpsc::Variable(vars[XDIM].size(),\n                cluster->bounds.getMaxX(), freeWeight);\n        vars[XDIM].push_back(variable);\n        // Bottom::\n        variable = new vpsc::Variable(vars[YDIM].size(),\n                cluster->bounds.getMinY(), freeWeight);\n        vars[YDIM].push_back(variable);\n        // Top:\n        variable = new vpsc::Variable(vars[YDIM].size(),\n                cluster->bounds.getMaxY(), freeWeight);\n        vars[YDIM].push_back(variable);\n\n        RectangularCluster *rc = dynamic_cast<RectangularCluster *> (cluster);\n        if (rc)\n        {\n            rc->generateFixedRectangleConstraints(idleConstraints,\n                    boundingBoxes, vars);\n        }\n\n        priority--;\n        cola::ClusterContainmentConstraints *ccc =\n                new cola::ClusterContainmentConstraints(cluster, priority,\n                        boundingBoxes);\n        idleConstraints.push_back(ccc);\n    }\n\n    if (noc)\n    {\n        // Enforce non-overlap between all the shapes and clusters at this\n        // level.\n        //printf(\"Cluster #%d non-overlap constraints - nodes %d clusters %d\\n\",\n        //        (int) cluster->clusterVarId, (int) cluster->nodes.size(),\n        //        (int) cluster->clusters.size());\n        unsigned int group = cluster->clusterVarId;\n        // The set of clusters to put non-overlap constraints between is the\n        // child clusters of this cluster.  We will also add any overlapping\n        // clusters (due to multiple inheritence) to this set.\n        std::set<Cluster *> expandedClusterSet(cluster->clusters.begin(),\n                cluster->clusters.end());\n        for (std::set<unsigned>::iterator curr = cluster->nodes.begin();\n                curr != cluster->nodes.end(); ++curr)\n        {\n            unsigned id = *curr;\n\n            if (cluster->m_overlap_replacement_map.count(id) > 0)\n            {\n                // This shape is child of another cluster also, so replace\n                // this node with the other cluster for the purpose of\n                // non-overlap with other children of the current cluster.\n                expandedClusterSet.insert(\n                        cluster->m_overlap_replacement_map[id]);\n            }\n            // Normal case: Add shape for generation of non-overlap\n            // constraints.\n            noc->addShape(id, boundingBoxes[id]->width() / 2,\n                    boundingBoxes[id]->height() / 2, group);\n        }\n        for (std::set<Cluster*>::iterator curr = expandedClusterSet.begin();\n                curr != expandedClusterSet.end(); ++curr)\n        {\n            Cluster *cluster = *curr;\n            RectangularCluster *rectCluster =\n                    dynamic_cast<RectangularCluster *> (cluster);\n            if (rectCluster && rectCluster->clusterIsFromFixedRectangle())\n            {\n                // Treat it like a shape for non-overlap.\n                unsigned id = rectCluster->rectangleIndex();\n                noc->addShape(id, boundingBoxes[id]->width() / 2,\n                        boundingBoxes[id]->height() / 2, group);\n            }\n            else\n            {\n                // Normal cluster.\n                noc->addCluster(cluster, group);\n            }\n        }\n\n        // For the set of shapes that have been replaced due to multiple\n        // inheritance, still generate overlap constraints between them.\n        // (The group uses the ID of the right side variable of the cluster\n        // so it is not the same group as the cluster itself.)\n        for (std::set<unsigned>::iterator curr =\n                cluster->m_nodes_replaced_with_clusters.begin();\n                curr != cluster->m_nodes_replaced_with_clusters.end(); ++curr)\n        {\n            unsigned id = *curr;\n            noc->addShape(id, boundingBoxes[id]->width() / 2,\n                    boundingBoxes[id]->height() / 2, group + 1);\n        }\n\n    }\n}\n\nvoid ConstrainedFDLayout::generateNonOverlapAndClusterCompoundConstraints(\n        vpsc::Variables (&vs)[2])\n{\n    if (clusterHierarchy && !clusterHierarchy->flat())\n    {\n        // Add remaining nodes that aren't contained within any clusters\n        // as children of the root cluster.\n        std::vector<unsigned> nodesInClusterCounts(boundingBoxes.size(), 0);\n        clusterHierarchy->countContainedNodes(nodesInClusterCounts);\n\n        for (unsigned int i = 0; i < nodesInClusterCounts.size(); ++i)\n        {\n            unsigned count = nodesInClusterCounts[i];\n            if (!clusterHierarchy->allowsMultipleParents() &&\n                    count > 1)\n            {\n                fprintf(stderr, \"Warning: node %u is contained in %d \"\n                        \"clusters.\\n\", i, count);\n            }\n\n            if (count == 0)\n            {\n                // Not present in hierarchy, so add to root cluster.\n                clusterHierarchy->nodes.insert(i);\n            }\n        }\n\n        // Add non-overlap and containment constraints for all clusters\n        // and nodes.\n        unsigned int priority = PRIORITY_NONOVERLAP;\n        clusterHierarchy->computeBoundingRect(boundingBoxes);\n\n        // Generate the containment constraints\n        recGenerateClusterVariablesAndConstraints(vs, priority,\n                nullptr, clusterHierarchy, extraConstraints);\n\n        // Compute overlapping clusters.\n        clusterHierarchy->calculateClusterPathsToEachNode(boundingBoxes.size());\n\n        // Generate non-overlap constraints between all clusters and\n        // all contained nodes.\n        if (m_generateNonOverlapConstraints)\n        {\n            priority--;\n            cola::NonOverlapConstraints *noc =\n                    new cola::NonOverlapConstraints(m_nonoverlap_exemptions,\n                            priority);\n            noc->setClusterClusterExemptions(\n                    clusterHierarchy->m_cluster_cluster_overlap_exceptions);\n            recGenerateClusterVariablesAndConstraints(vs, priority,\n                    noc, clusterHierarchy, extraConstraints);\n            extraConstraints.push_back(noc);\n        }\n    }\n    else if (m_generateNonOverlapConstraints)\n    {\n        // Add standard non-overlap constraints between each pair of\n        // nodes.\n        cola::NonOverlapConstraints *noc =\n                new cola::NonOverlapConstraints(m_nonoverlap_exemptions);\n        for (unsigned int i = 0; i < boundingBoxes.size(); ++i)\n        {\n            noc->addShape(i, boundingBoxes[i]->width() / 2,\n                    boundingBoxes[i]->height() / 2);\n        }\n        extraConstraints.push_back(noc);\n    }\n}\n\nvoid ConstrainedFDLayout::makeFeasible(double xBorder, double yBorder)\n{\n    vpsc::Variables vs[2];\n    vpsc::Constraints valid[2];\n\n    vpsc::Rectangle::setXBorder(xBorder);\n    vpsc::Rectangle::setYBorder(yBorder);\n\n    // Populate all the variables for shapes.\n    for (unsigned int dim = 0; dim < 2; ++dim)\n    {\n        vs[dim] = vpsc::Variables(boundingBoxes.size());\n        for (unsigned int i = 0; i < vs[dim].size(); ++i)\n        {\n            double pos = (dim == 0) ?\n                    boundingBoxes[i]->getCentreX() :\n                    boundingBoxes[i]->getCentreY();\n            vs[dim][i] = new vpsc::Variable(i, pos, 1);\n        }\n    }\n\n    vector<double> priorPos(boundingBoxes.size());\n\n    generateNonOverlapAndClusterCompoundConstraints(vs);\n\n    // Make a copy of the compound constraints and sort them by priority.\n    cola::CompoundConstraints idleConstraints = ccs;\n    // Append extraConstraints to idleConstraints.\n    idleConstraints.insert(idleConstraints.end(),\n            extraConstraints.begin(), extraConstraints.end());\n\n    std::sort(idleConstraints.begin(), idleConstraints.end(),\n            cmpCompoundConstraintPriority);\n\n    // Initialise extra variables for compound constraints.\n    for (unsigned int dim = 0; dim < 2; ++dim)\n    {\n        generateVariables(idleConstraints, (vpsc::Dim) dim, vs[dim]);\n    }\n\n#ifdef MAKEFEASIBLE_DEBUG\n    int iteration = 0;\n    vector<string> labels(boundingBoxes.size());\n    for(unsigned i=0;i<boundingBoxes.size();++i)\n    {\n        stringstream ss;\n        ss << i;\n        labels[i]=ss.str();\n    }\n#endif\n\n    // We can keep adding new constraints to the existing VPSC instances so\n    // long as everything is satisfiable.  Only when it's not do we discard\n    // the existing VPSC instance for that dimension and create a new one.\n    vpsc::IncSolver *solver[2] = { nullptr };\n\n    // Main makeFeasible loop.\n    while (!idleConstraints.empty())\n    {\n        // idleConstraints is sorted lowest to highest priority, so the\n        // highest priority constraint will be at the back of the vector.\n        cola::CompoundConstraint *cc = idleConstraints.back();\n        idleConstraints.pop_back();\n\n#ifdef MAKEFEASIBLE_DEBUG\n        {\n            // Debugging SVG time slice output.\n            std::vector<cola::Edge> es;\n            for (unsigned int i = 0; i < boundingBoxes.size(); ++i)\n            {\n                boundingBoxes[i]->moveCentreX(vs[0][i]->finalPosition);\n                boundingBoxes[i]->moveCentreY(vs[1][i]->finalPosition);\n            }\n            iteration++;\n            std::sstream filename;\n            filename << \"out/file-\" << std::setfill('0') << std::setw(5) << iteration << \".pdf\";\n\n            OutputFile of(boundingBoxes,es,clusterHierarchy,filename.str().c_str(),true,false);\n            of.setLabels(labels);\n            of.generate();\n        }\n#endif\n\n        cc->markAllSubConstraintsAsInactive();\n        bool subConstraintSatisfiable = true;\n\n        if (cc->shouldCombineSubConstraints())\n        {\n            // We are processing a combined set of satisfiable constraints,\n            // such as for containment within cluster boundary variables, so\n            // we just add all the required constraints and solve in both\n            // the X and Y dimension once to set the cluster boundaries to\n            // meaningful values.\n            while (cc->subConstraintsRemaining())\n            {\n                cola::SubConstraintAlternatives alternatives =\n                        cc->getCurrSubConstraintAlternatives(vs);\n                // There should be no alternatives, just guaranteed\n                // satisfiable constraints.\n                COLA_ASSERT(alternatives.size() == 1);\n                vpsc::Dim& dim = alternatives.front().dim;\n                vpsc::Constraint& constraint = alternatives.front().constraint;\n                vpsc::Constraint *newConstraint =\n                        new vpsc::Constraint(constraint);\n                valid[dim].push_back(newConstraint);\n                if (solver[dim])\n                {\n                    // If we have an existing valid solver instance, add the\n                    // constraint to that.\n                    solver[dim]->addConstraint(newConstraint);\n                }\n                cc->markCurrSubConstraintAsActive(subConstraintSatisfiable);\n            }\n            // Satisfy the constraints in each dimension.\n            for (size_t dim = 0; dim < 2; ++dim)\n            {\n                if (solver[dim] == nullptr)\n                {\n                    // Create a new VPSC solver if necessary.\n                    solver[dim] = new vpsc::IncSolver(vs[dim], valid[dim]);\n                }\n                solver[dim]->satisfy();\n            }\n            continue;\n        }\n\n        while (cc->subConstraintsRemaining())\n        {\n            cola::SubConstraintAlternatives alternatives =\n                    cc->getCurrSubConstraintAlternatives(vs);\n            alternatives.sort();\n\n            if (alternatives.empty())\n            {\n                continue;\n            }\n\n            while (!alternatives.empty())\n            {\n                // Reset subConstraintSatisfiable for new solve.\n                subConstraintSatisfiable = true;\n\n                vpsc::Dim& dim = alternatives.front().dim;\n                vpsc::Constraint& constraint = alternatives.front().constraint;\n\n                // Store current values for variables.\n                for (unsigned int i = 0; i < priorPos.size(); ++i)\n                {\n                    priorPos[i] = vs[dim][i]->finalPosition;\n                }\n\n                // Some solving...\n                try\n                {\n                    // Add the constraint from this alternative to the\n                    // valid constraint set.\n                    vpsc::Constraint *newConstraint =\n                            new vpsc::Constraint(constraint);\n                    valid[dim].push_back(newConstraint);\n\n                    //fprintf(stderr, \".%d %3d - \", dim, valid[dim].size());\n\n                    // Try to satisfy this set of constraints..\n                    if (solver[dim] == nullptr)\n                    {\n                        // Create a new VPSC solver if necessary.\n                        solver[dim] = new vpsc::IncSolver(vs[dim], valid[dim]);\n                    }\n                    else\n                    {\n                        // Or just add the constraint to the existing solver.\n                        solver[dim]->addConstraint(newConstraint);\n                    }\n                    solver[dim]->satisfy();\n                }\n                catch (char *str)\n                {\n                    subConstraintSatisfiable = false;\n\n                    std::cerr << \"++++ IN ERROR BLOCK\" << std::endl;\n                    std::cerr << str << std::endl;\n                    for (vpsc::Rectangles::iterator r = boundingBoxes.begin();\n                            r != boundingBoxes.end(); ++r)\n                    {\n                        std::cerr << **r <<std::endl;\n                    }\n                }\n                for (size_t i = 0; i < valid[dim].size(); ++i)\n                {\n                    if (valid[dim][i]->unsatisfiable)\n                    {\n                        // It might have made one of the earlier added\n                        // constraints unsatisfiable, so we mark that one\n                        // as okay since we will be reverting the most\n                        // recent one.\n                        valid[dim][i]->unsatisfiable = false;\n\n                        subConstraintSatisfiable = false;\n                    }\n                }\n\n                if (!subConstraintSatisfiable)\n                {\n                    // Since we had unsatisfiable constraints we must\n                    // discard this solver instance.\n                    delete solver[dim];\n                    solver[dim] = nullptr;\n\n                    // Restore previous values for variables.\n                    for (unsigned int i = 0; i < priorPos.size(); ++i)\n                    {\n                        vs[dim][i]->finalPosition = priorPos[i];\n                    }\n\n                    // Delete the newly added (and unsatisfiable)\n                    // constraint from the valid constraint set.\n                    delete valid[dim].back();\n                    valid[dim].pop_back();\n                }\n                else\n                {\n                    // Satisfied, so don't need to consider other alternatives.\n                    break;\n                }\n                // Move on to the next alternative.\n                alternatives.pop_front();\n            }\n#ifdef MAKEFEASIBLE_DEBUG\n            if (true || idleConstraints.size() == 0)\n            {\n                // Debugging SVG time slice output, but don't show this for\n                // constraints that promised satisfiable.\n                std::vector<cola::Edge> es;\n                for (unsigned int i = 0; i < boundingBoxes.size(); ++i)\n                {\n                    boundingBoxes[i]->moveCentreX(vs[0][i]->finalPosition);\n                    boundingBoxes[i]->moveCentreY(vs[1][i]->finalPosition);\n                }\n                iteration++;\n                std::sstream filename;\n                filename << \"out/file-\" << std::setfill('0') << std::setw(5) << iteration << \".pdf\";\n\n                OutputFile of(boundingBoxes,es,clusterHierarchy,filename.str().c_str(),\n                        true,false);\n                of.setLabels(labels);\n                of.generate();\n            }\n#endif\n            cc->markCurrSubConstraintAsActive(subConstraintSatisfiable);\n        }\n    }\n\n    // Delete the persistent VPSC solver instances.\n    for (size_t dim = 0; dim < 2; ++dim)\n    {\n        if (solver[dim])\n        {\n            delete solver[dim];\n            solver[dim] = nullptr;\n        }\n    }\n\n    // Write positions from solver variables back to Rectangles.\n    for (unsigned int i = 0; i < boundingBoxes.size(); ++i)\n    {\n        boundingBoxes[i]->moveCentreX(vs[0][i]->finalPosition);\n        boundingBoxes[i]->moveCentreY(vs[1][i]->finalPosition);\n    }\n\n    vpsc::Rectangle::setXBorder(0);\n    vpsc::Rectangle::setYBorder(0);\n\n    // Cleanup.\n    for (unsigned int dim = 0; dim < 2; ++dim)\n    {\n        for_each(valid[dim].begin(), valid[dim].end(), delete_object());\n        for_each(vs[dim].begin(), vs[dim].end(), delete_object());\n    }\n\n    topologyAddon->makeFeasible(m_generateNonOverlapConstraints,\n            boundingBoxes, clusterHierarchy);\n\n    // Update the X and Y vectors with the new shape positions.\n    for (unsigned int i = 0; i < boundingBoxes.size(); ++i)\n    {\n        X[i] = boundingBoxes[i]->getCentreX();\n        Y[i] = boundingBoxes[i]->getCentreY();\n    }\n\n    // Clear extra constraints for cluster containment and non-overlap.\n    for_each(extraConstraints.begin(), extraConstraints.end(), delete_object());\n    extraConstraints.clear();\n}\n\nConstrainedFDLayout::~ConstrainedFDLayout()\n{\n    if (using_default_done)\n    {\n        delete done;\n    }\n\n    for (unsigned i = 0; i < n; ++i)\n    {\n        delete [] G[i];\n        delete [] D[i];\n    }\n    delete [] G;\n    delete [] D;\n    delete topologyAddon;\n    delete m_nonoverlap_exemptions;\n}\n\nvoid ConstrainedFDLayout::freeAssociatedObjects(void)\n{\n    // Free Rectangles\n    for_each(boundingBoxes.begin(), boundingBoxes.end(), delete_object());\n    boundingBoxes.clear();\n\n    // Free compound constraints\n    std::list<CompoundConstraint *> freeList(ccs.begin(), ccs.end());\n    freeList.sort();\n    freeList.unique();\n    if (freeList.size() != ccs.size())\n    {\n        // The compound constraint list had repeated elements.\n        fprintf(stderr, \"Warning: CompoundConstraints vector contained %d \"\n                \"duplicates.\\n\", (int) (ccs.size() - freeList.size()));\n    }\n    ccs.clear();\n    for_each(freeList.begin(), freeList.end(), delete_object());\n\n    if (clusterHierarchy)\n    {\n        delete clusterHierarchy;\n        clusterHierarchy = nullptr;\n    }\n\n    topologyAddon->freeAssociatedObjects();\n}\n\nvoid ConstrainedFDLayout::setTopology(TopologyAddonInterface *newTopology)\n{\n    COLA_ASSERT(topologyAddon);\n    delete topologyAddon;\n    topologyAddon = newTopology->clone();\n}\n\nTopologyAddonInterface *ConstrainedFDLayout::getTopology(void)\n{\n    return topologyAddon->clone();\n}\n\n\nvoid setupVarsAndConstraints(unsigned n, const CompoundConstraints& ccs,\n        const vpsc::Dim dim, vpsc::Rectangles& boundingBoxes,\n        RootCluster *clusterHierarchy,\n        vpsc::Variables& vs, vpsc::Constraints& cs,\n        valarray<double> &coords)\n{\n    vs.resize(n);\n    for (unsigned i = 0; i < n; ++i)\n    {\n        vs[i] = new vpsc::Variable(i, coords[i]);\n    }\n\n    if (clusterHierarchy && !clusterHierarchy->flat())\n    {\n        // Create variables for clusters\n        clusterHierarchy->computeBoundingRect(boundingBoxes);\n        clusterHierarchy->createVars(dim, boundingBoxes, vs);\n    }\n\n    for (CompoundConstraints::const_iterator c = ccs.begin();\n            c != ccs.end(); ++c)\n    {\n        (*c)->generateVariables(dim, vs);\n    }\n    for (CompoundConstraints::const_iterator c = ccs.begin();\n            c != ccs.end(); ++c)\n    {\n        (*c)->generateSeparationConstraints(dim, vs, cs, boundingBoxes);\n    }\n}\n\n\nstatic void setupExtraConstraints(const CompoundConstraints& ccs,\n        const vpsc::Dim dim, vpsc::Variables& vs, vpsc::Constraints& cs,\n        vpsc::Rectangles& boundingBoxes)\n{\n    for (CompoundConstraints::const_iterator c = ccs.begin();\n            c != ccs.end(); ++c)\n    {\n        (*c)->generateVariables(dim, vs);\n    }\n    for (CompoundConstraints::const_iterator c = ccs.begin();\n            c != ccs.end(); ++c)\n    {\n        (*c)->generateSeparationConstraints(dim, vs, cs, boundingBoxes);\n    }\n}\n\nvoid updateCompoundConstraints(const vpsc::Dim dim,\n        const CompoundConstraints& ccs)\n{\n    for (CompoundConstraints::const_iterator c = ccs.begin();\n            c != ccs.end(); ++c)\n    {\n        (*c)->updatePosition(dim);\n    }\n}\nvoid project(vpsc::Variables& vs, vpsc::Constraints& cs, valarray<double>& coords) {\n    unsigned n=coords.size();\n    vpsc::IncSolver s(vs,cs);\n    s.solve();\n    for(unsigned i=0;i<n;++i) {\n        coords[i]=vs[i]->finalPosition;\n    }\n}\nvoid setVariableDesiredPositions(vpsc::Variables& vs, vpsc::Constraints& cs,\n        const DesiredPositionsInDim& des, valarray<double>& coords)\n{\n    COLA_UNUSED(cs);\n\n    unsigned n=coords.size();\n    COLA_ASSERT(vs.size()>=n);\n    for(unsigned i=0;i<n;++i) {\n        vpsc::Variable* v=vs[i];\n        v->desiredPosition = coords[i];\n        v->weight=1;\n    }\n    for (DesiredPositionsInDim::const_iterator d=des.begin();\n            d!=des.end(); ++d) {\n        COLA_ASSERT(d->first<vs.size());\n        vpsc::Variable* v=vs[d->first];\n        v->desiredPosition = d->second;\n        v->weight=10000;\n    }\n}\nvoid checkUnsatisfiable(const vpsc::Constraints& cs,\n        UnsatisfiableConstraintInfos* unsatisfiable) {\n    for(vpsc::Constraints::const_iterator c=cs.begin();c!=cs.end();++c) {\n        if((*c)->unsatisfiable) {\n            UnsatisfiableConstraintInfo* i=new UnsatisfiableConstraintInfo(*c);\n            unsatisfiable->push_back(i);\n        }\n    }\n}\n\nvoid ConstrainedFDLayout::handleResizes(const Resizes& resizeList)\n{\n    topologyAddon->handleResizes(resizeList, n, X, Y, ccs, boundingBoxes,\n            clusterHierarchy);\n}\n\n/*\n * move positions of nodes in specified axis while respecting constraints\n * @param dim axis\n * @param target array of desired positions (for both axes)\n */\nvoid ConstrainedFDLayout::moveTo(const vpsc::Dim dim, Position& target) {\n    COLA_ASSERT(target.size()==2*n);\n    FILE_LOG(logDEBUG) << \"ConstrainedFDLayout::moveTo(): dim=\"<<dim;\n    valarray<double> &coords = (dim==vpsc::HORIZONTAL)?X:Y;\n    vpsc::Variables vs;\n    vpsc::Constraints cs;\n    setupVarsAndConstraints(n, ccs, dim, boundingBoxes,\n            clusterHierarchy, vs, cs, coords);\n    DesiredPositionsInDim des;\n    if(preIteration) {\n        for(vector<Lock>::iterator l=preIteration->locks.begin();\n                l!=preIteration->locks.end();l++) {\n            des.push_back(make_pair(l->getID(),l->pos(dim)));\n            FILE_LOG(logDEBUG1)<<\"desi: v[\"<<l->getID()<<\"]=(\"<<l->pos(vpsc::HORIZONTAL)\n                <<\",\"<<l->pos(vpsc::VERTICAL)<<\")\";\n        }\n    }\n    for(unsigned i=0, j=(dim==vpsc::HORIZONTAL?0:n);i<n;++i,++j) {\n        vpsc::Variable* v=vs[i];\n        v->desiredPosition = target[j];\n    }\n    setVariableDesiredPositions(vs,cs,des,coords);\n    if (topologyAddon->useTopologySolver())\n    {\n        topologyAddon->moveTo(dim, vs, cs, coords, clusterHierarchy);\n    } else {\n        // Add non-overlap constraints, but not variables again.\n        setupExtraConstraints(extraConstraints, dim, vs, cs, boundingBoxes);\n        // Projection.\n        project(vs,cs,coords);\n        moveBoundingBoxes();\n    }\n    updateCompoundConstraints(dim, ccs);\n    for_each(vs.begin(),vs.end(),delete_object());\n    for_each(cs.begin(),cs.end(),delete_object());\n}\n/*\n * The following computes an unconstrained solution then uses Projection to\n * make this solution feasible with respect to constraints by moving things as\n * little as possible.  If \"meta-constraints\" such as avoidOverlaps or edge\n * straightening are required then dummy variables will be generated.\n */\ndouble ConstrainedFDLayout::applyForcesAndConstraints(const vpsc::Dim dim, const double oldStress) {\n    FILE_LOG(logDEBUG) << \"ConstrainedFDLayout::applyForcesAndConstraints(): dim=\"<<dim;\n    valarray<double> g(n);\n    valarray<double> &coords = (dim==vpsc::HORIZONTAL)?X:Y;\n    DesiredPositionsInDim des;\n    if(preIteration) {\n        for(vector<Lock>::iterator l=preIteration->locks.begin();\n                l!=preIteration->locks.end();l++) {\n            des.push_back(make_pair(l->getID(),l->pos(dim)));\n            FILE_LOG(logDEBUG1)<<\"desi: v[\"<<l->getID()<<\"]=(\"<<l->pos(vpsc::HORIZONTAL)\n                <<\",\"<<l->pos(vpsc::VERTICAL)<<\")\";\n        }\n    }\n    vpsc::Variables vs;\n    vpsc::Constraints cs;\n    double stress;\n    setupVarsAndConstraints(n, ccs, dim, boundingBoxes,\n            clusterHierarchy, vs, cs, coords);\n\n    if (topologyAddon->useTopologySolver())\n    {\n        stress = topologyAddon->applyForcesAndConstraints(this, dim, g, vs, cs,\n                coords, des, oldStress);\n    } else {\n        // Add non-overlap constraints, but not variables again.\n        setupExtraConstraints(extraConstraints, dim, vs, cs, boundingBoxes);\n        // Projection.\n        SparseMap HMap(n);\n        computeForces(dim,HMap,g);\n        SparseMatrix H(HMap);\n        valarray<double> oldCoords=coords;\n        applyDescentVector(g,oldCoords,coords,oldStress,computeStepSize(H,g,g));\n        setVariableDesiredPositions(vs,cs,des,coords);\n        project(vs,cs,coords);\n        valarray<double> d(n);\n        d=oldCoords-coords;\n        double stepsize=computeStepSize(H,g,d);\n        stepsize=max(0.,min(stepsize,1.));\n        //printf(\" dim=%d beta: \",dim);\n        stress = applyDescentVector(d,oldCoords,coords,oldStress,stepsize);\n        moveBoundingBoxes();\n    }\n    updateCompoundConstraints(dim, ccs);\n    if(unsatisfiable.size()==2) {\n        checkUnsatisfiable(cs,unsatisfiable[dim]);\n    }\n    FILE_LOG(logDEBUG) << \"ConstrainedFDLayout::applyForcesAndConstraints... done, stress=\"<<stress;\n    if (clusterHierarchy)\n    {\n        clusterHierarchy->computeVarRect(vs, dim);\n        clusterHierarchy->computeBoundingRect(boundingBoxes);\n    }\n\n    for_each(vs.begin(),vs.end(),delete_object());\n    for_each(cs.begin(),cs.end(),delete_object());\n    return stress;\n}\n/*\n * Attempts to set coords=oldCoords-stepsize*d.  If this does not reduce\n * the stress from oldStress then stepsize is halved.  This is repeated\n * until stepsize falls below a threshhold.\n * @param d is a descent vector (a movement vector intended to reduce the\n * stress)\n * @param oldCoords are the previous position vector\n * @param coords will hold the new position after applying d\n * @param stepsize is a scalar multiple of the d to apply\n */\ndouble ConstrainedFDLayout::applyDescentVector(\n        valarray<double> const &d,\n        valarray<double> const &oldCoords,\n        valarray<double> &coords,\n        const double oldStress,\n        double stepsize\n        )\n{\n    COLA_UNUSED(oldStress);\n\n    COLA_ASSERT(d.size()==oldCoords.size());\n    COLA_ASSERT(d.size()==coords.size());\n    while(fabs(stepsize)>0.00000000001) {\n        coords=oldCoords-stepsize*d;\n        double stress=computeStress();\n        //printf(\" applyDV: oldstress=%f, stress=%f, stepsize=%f\\n\", oldStress,stress,stepsize);\n        //if(oldStress>=stress) {\n            return stress;\n        //}\n        coords=oldCoords;\n        stepsize*=0.5;\n    }\n    return computeStress();\n}\n\n\n// Computes X and Y offsets for nodes that are at the same position.\nstd::vector<double> ConstrainedFDLayout::offsetDir(double minD)\n{\n    std::vector<double> u(2);\n    double l = 0;\n    for (size_t i = 0; i < 2; ++i)\n    {\n        double x = u[i] = random.getNextBetween(0.01, 1) - 0.5;\n        l += x * x;\n    }\n    l = sqrt(l);\n\n    for (size_t i = 0; i < 2; ++i)\n    {\n        u[i] *= (minD / l);\n    }\n\n    return u;\n}\n\n\n/*\n * Computes:\n *  - the matrix of second derivatives (the Hessian) H, used in\n *    calculating stepsize; and\n *  - the vector g, the negative gradient (steepest-descent) direction.\n */\nvoid ConstrainedFDLayout::computeForces(\n        const vpsc::Dim dim,\n        SparseMap &H,\n        valarray<double> &g) {\n    if(n==1) return;\n    g=0;\n    // for each node:\n    for(unsigned u=0;u<n;u++) {\n        // Stress model\n        double Huu=0;\n        for(unsigned v=0;v<n;v++) {\n            if(u==v) continue;\n            if (m_useNeighbourStress && neighbours[u][v]!=1) continue;\n\n            // The following loop randomly displaces nodes that are at identical positions\n            double rx=X[u]-X[v], ry=Y[u]-Y[v];\n            double sd2 = rx*rx+ry*ry;\n            unsigned maxDisplaces = n;  // avoid infinite loop in the case of numerical issues, such as huge values\n\n            while (maxDisplaces--)\n            {\n                if ((sd2) > 1e-3)\n                {\n                    break;\n                }\n\n                std::vector<double> rd = offsetDir(minD);\n                X[v] += rd[0];\n                Y[v] += rd[1];\n                rx=X[u]-X[v], ry=Y[u]-Y[v];\n                sd2 = rx*rx+ry*ry;\n            }\n\n            unsigned short p = G[u][v];\n            // no forces between disconnected parts of the graph\n            if(p==0) continue;\n            double l=sqrt(sd2);\n            double d=D[u][v];\n            if(l>d && p>1) continue; // attractive forces not required\n            double d2=d*d;\n            /* force apart zero distances */\n            if (l < 1e-30) {\n                l=0.1;\n            }\n            double dx=dim==vpsc::HORIZONTAL?rx:ry;\n            double dy=dim==vpsc::HORIZONTAL?ry:rx;\n            g[u]+=dx*(l-d)/(d2*l);\n            Huu-=H(u,v)=(d*dy*dy/(l*l*l)-1)/d2;\n        }\n        H(u,u)=Huu;\n    }\n    if(desiredPositions) {\n        for(DesiredPositions::const_iterator p=desiredPositions->begin();\n            p!=desiredPositions->end();++p) {\n            unsigned i = p->id;\n            double d=(dim==vpsc::HORIZONTAL)\n                ?p->x-X[i]:p->y-Y[i];\n            d*=p->weight;\n            g[i]-=d;\n            H(i,i)+=p->weight;\n        }\n    }\n}\n/*\n * Returns the optimal step-size in the direction d, given gradient g and\n * hessian H.\n */\ndouble ConstrainedFDLayout::computeStepSize(\n        SparseMatrix const &H,\n        valarray<double> const &g,\n        valarray<double> const &d) const\n{\n    COLA_ASSERT(g.size()==d.size());\n    COLA_ASSERT(g.size()==H.rowSize());\n    // stepsize = g'd / (d' H d)\n    double numerator = dotProd(g,d);\n    valarray<double> Hd(d.size());\n    H.rightMultiply(d,Hd);\n    double denominator = dotProd(d,Hd);\n    //COLA_ASSERT(numerator>=0);\n    //COLA_ASSERT(denominator>=0);\n    if(denominator==0) return 0;\n    return numerator/denominator;\n}\n/*\n * Just computes the cost (Stress) at the current X,Y position\n * used to test termination.\n * This method will call preIteration if one is set.\n */\ndouble ConstrainedFDLayout::computeStress() const {\n    FILE_LOG(logDEBUG)<<\"ConstrainedFDLayout::computeStress()\";\n    double stress=0;\n    for(unsigned u=0;(u + 1)<n;u++) {\n        for(unsigned v=u+1;v<n;v++) {\n            if (m_useNeighbourStress && neighbours[u][v]!=1) continue;\n            unsigned short p=G[u][v];\n            // no forces between disconnected parts of the graph\n            if(p==0) continue;\n            double rx=X[u]-X[v], ry=Y[u]-Y[v];\n            double l=sqrt(rx*rx+ry*ry);\n            double d=D[u][v];\n            if(l>d && p>1) continue; // no attractive forces required\n            double d2=d*d;\n            double rl=d-l;\n            double s=rl*rl/d2;\n            stress+=s;\n            FILE_LOG(logDEBUG2)<<\"s(\"<<u<<\",\"<<v<<\")=\"<<s;\n        }\n    }\n    if(preIteration) {\n        if ((*preIteration)()) {\n            for(vector<Lock>::iterator l=preIteration->locks.begin();\n                    l!=preIteration->locks.end();l++) {\n                double dx=l->pos(vpsc::HORIZONTAL)-X[l->getID()], dy=l->pos(vpsc::VERTICAL)-Y[l->getID()];\n                double s=10000*(dx*dx+dy*dy);\n                stress+=s;\n                FILE_LOG(logDEBUG2)<<\"d(\"<<l->getID()<<\")=\"<<s;\n            }\n        }\n    }\n    stress += topologyAddon->computeStress();\n    if(desiredPositions) {\n        for(DesiredPositions::const_iterator p = desiredPositions->begin();\n            p!=desiredPositions->end();++p) {\n            double dx = X[p->id] - p->x, dy = Y[p->id] - p->y;\n            stress+=0.5*p->weight*(dx*dx+dy*dy);\n        }\n    }\n    return stress;\n}\nvoid ConstrainedFDLayout::moveBoundingBoxes() {\n    for(unsigned i=0;i<n;i++) {\n        boundingBoxes[i]->moveCentre(X[i],Y[i]);\n    }\n}\n\nstatic const double LIMIT = 100000000;\n\nstatic void reduceRange(double& val)\n{\n    val = std::min(val, LIMIT);\n    val = std::max(val, -LIMIT);\n}\n\nvoid ConstrainedFDLayout::outputInstanceToSVG(std::string instanceName)\n{\n    // Save current locale\n    char* originalLocale = setlocale(LC_NUMERIC, nullptr);\n    // Set locale to \"C\" to enforce decimal point\n    setlocale(LC_NUMERIC, \"C\");\n\n    std::string filename;\n    if (!instanceName.empty())\n    {\n        filename = instanceName;\n    }\n    else\n    {\n        filename = \"libcola-debug\";\n    }\n    filename += \".svg\";\n    FILE *fp = fopen(filename.c_str(), \"w\");\n\n    if (fp == nullptr)\n    {\n        return;\n    }\n\n\n    double minX = LIMIT;\n    double minY = LIMIT;\n    double maxX = -LIMIT;\n    double maxY = -LIMIT;\n\n    // Find the bounds of the diagram.\n    for (size_t i = 0; i < boundingBoxes.size(); ++i)\n    {\n        double rMinX = boundingBoxes[i]->getMinX();\n        double rMaxX = boundingBoxes[i]->getMaxX();\n        double rMinY = boundingBoxes[i]->getMinY();\n        double rMaxY = boundingBoxes[i]->getMaxY();\n\n        reduceRange(rMinX);\n        reduceRange(rMaxX);\n        reduceRange(rMinY);\n        reduceRange(rMaxY);\n\n        if (rMinX > -LIMIT)\n        {\n            minX = std::min(minX, rMinX);\n        }\n        if (rMaxX < LIMIT)\n        {\n            maxX = std::max(maxX,rMaxX);\n        }\n        if (rMinY > -LIMIT)\n        {\n            minY = std::min(minY, rMinY);\n        }\n        if (rMaxY < LIMIT)\n        {\n            maxY = std::max(maxY, rMaxY);\n        }\n    }\n\n    minX -= 50;\n    minY -= 50;\n    maxX += 50;\n    maxY += 50;\n\n    fprintf(fp, \"<?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?>\\n\");\n    fprintf(fp, \"<svg xmlns:inkscape=\\\"http://www.inkscape.org/namespaces/inkscape\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"100%%\\\" height=\\\"100%%\\\" viewBox=\\\"%g %g %g %g\\\">\\n\", minX, minY, maxX - minX, maxY - minY);\n\n    // Output source code to generate this ConstrainedFDLayout instance.\n    fprintf(fp, \"<!-- Source code to generate this instance:\\n\");\n    fprintf(fp, \"#include <vector>\\n\");\n    fprintf(fp, \"#include <utility>\\n\");\n    fprintf(fp, \"#include \\\"libcola/cola.h\\\"\\n\");\n    fprintf(fp, \"using namespace cola;\\n\");\n    fprintf(fp, \"int main(void) {\\n\");\n    fprintf(fp, \"    CompoundConstraints ccs;\\n\");\n    fprintf(fp, \"    std::vector<Edge> es;\\n\");\n    fprintf(fp, \"    EdgeLengths eLengths;\\n\");\n    fprintf(fp, \"    double defaultEdgeLength=%g;\\n\", m_idealEdgeLength);\n    fprintf(fp, \"    std::vector<vpsc::Rectangle*> rs;\\n\");\n    fprintf(fp, \"    vpsc::Rectangle *rect = nullptr;\\n\\n\");\n    for (size_t i = 0; i < boundingBoxes.size(); ++i)\n    {\n        fprintf(fp, \"    rect = new vpsc::Rectangle(%g, %g, %g, %g);\\n\",\n               boundingBoxes[i]->getMinX(), boundingBoxes[i]->getMaxX(),\n               boundingBoxes[i]->getMinY(), boundingBoxes[i]->getMaxY());\n        fprintf(fp, \"    rs.push_back(rect);\\n\\n\");\n    }\n\n    for (size_t i = 0; i < n; ++i)\n    {\n        for (size_t j =  i + 1; j < n; ++j)\n        {\n            if (G[i][j] == 1)\n            {\n                fprintf(fp, \"    es.push_back(std::make_pair(%lu, %lu));\\n\", i, j);\n            }\n        }\n    }\n    fprintf(fp, \"\\n\");\n\n    if (m_edge_lengths.size() > 0)\n    {\n        fprintf(fp, \"    eLengths.resize(%d);\\n\", (int) m_edge_lengths.size());\n        for (size_t i = 0; i < m_edge_lengths.size(); ++i)\n        {\n            fprintf(fp, \"    eLengths[%d] = %g;\\n\", (int) i, m_edge_lengths[i]);\n        }\n        fprintf(fp, \"\\n\");\n    }\n\n    for (cola::CompoundConstraints::iterator c = ccs.begin();\n            c != ccs.end(); ++c)\n    {\n        (*c)->printCreationCode(fp);\n    }\n\n    fprintf(fp, \"    ConstrainedFDLayout alg(rs, es, defaultEdgeLength, eLengths);\\n\");\n    if (clusterHierarchy)\n    {\n        clusterHierarchy->printCreationCode(fp);\n        fprintf(fp, \"    alg.setClusterHierarchy(cluster%llu);\\n\",\n                (unsigned long long) clusterHierarchy);\n    }\n    fprintf(fp, \"    alg.setConstraints(ccs);\\n\");\n    fprintf(fp, \"    alg.setAvoidNodeOverlaps(%s);\\n\",\n            (m_generateNonOverlapConstraints) ? \"true\" : \"false\");\n    fprintf(fp, \"    alg.makeFeasible();\\n\");\n    fprintf(fp, \"    alg.run();\\n\");\n    fprintf(fp, \"    alg.freeAssociatedObjects();\\n\");\n    fprintf(fp, \"    return 0;\\n\");\n    fprintf(fp, \"};\\n\");\n    fprintf(fp, \"-->\\n\");\n\n    if (clusterHierarchy)\n    {\n        clusterHierarchy->computeBoundingRect(boundingBoxes);\n        fprintf(fp, \"<g inkscape:groupmode=\\\"layer\\\" \"\n            \"inkscape:label=\\\"Clusters\\\">\\n\");\n        clusterHierarchy->outputToSVG(fp);\n        fprintf(fp, \"</g>\\n\");\n    }\n\n    fprintf(fp, \"<g inkscape:groupmode=\\\"layer\\\" \"\n            \"inkscape:label=\\\"Rects\\\">\\n\");\n    for (size_t i = 0; i < boundingBoxes.size(); ++i)\n    {\n        double minX = boundingBoxes[i]->getMinX();\n        double maxX = boundingBoxes[i]->getMaxX();\n        double minY = boundingBoxes[i]->getMinY();\n        double maxY = boundingBoxes[i]->getMaxY();\n\n        fprintf(fp, \"<rect id=\\\"rect-%u\\\" x=\\\"%g\\\" y=\\\"%g\\\" width=\\\"%g\\\" \"\n                \"height=\\\"%g\\\" style=\\\"stroke-width: 1px; stroke: black; \"\n                \"fill: blue; fill-opacity: 0.3;\\\" />\\n\",\n                (unsigned) i, minX, minY, maxX - minX, maxY - minY);\n    }\n    fprintf(fp, \"</g>\\n\");\n\n    fprintf(fp, \"<g inkscape:groupmode=\\\"layer\\\" \"\n            \"inkscape:label=\\\"Edges\\\">\\n\");\n    for (size_t i = 0; i < n; ++i)\n    {\n        for (size_t j =  i + 1; j < n; ++j)\n        {\n            if (G[i][j] == 1)\n            {\n                fprintf(fp, \"<path d=\\\"M %g %g L %g %g\\\" \"\n                        \"style=\\\"stroke-width: 1px; stroke: black;\\\" />\\n\",\n                        boundingBoxes[i]->getCentreX(),\n                        boundingBoxes[i]->getCentreY(),\n                        boundingBoxes[j]->getCentreX(),\n                        boundingBoxes[j]->getCentreY());\n            }\n        }\n    }\n    fprintf(fp, \"</g>\\n\");\n\n    fprintf(fp, \"</svg>\\n\");\n    fclose(fp);\n    // Restore locale\n    setlocale(LC_NUMERIC, originalLocale);\n}\n\nProjectionResult projectOntoCCs(Dim dim, Rectangles &rs, CompoundConstraints ccs,\n                                bool preventOverlaps, int accept, unsigned debugLevel)\n{\n    size_t n = rs.size();\n    // Set up nonoverlap constraints if desired.\n    NonOverlapConstraintExemptions *nocexemps = nullptr;\n    NonOverlapConstraints *noc = nullptr;\n    if (preventOverlaps) {\n        nocexemps = new NonOverlapConstraintExemptions();\n        noc = new NonOverlapConstraints(nocexemps);\n        for (size_t i = 0; i < n; ++i) {\n            noc->addShape(i, rs[i]->width()/2.0, rs[i]->height()/2.0);\n        }\n        ccs.push_back(noc);\n    }\n    // Set up vars and constraints.\n    Variables vs;\n    Constraints cs;\n    vs.resize(n);\n    for (size_t i = 0; i < n; ++i) {\n        vs[i] = new Variable(i, rs[i]->getCentreD(dim));\n    }\n    for (CompoundConstraints::iterator it=ccs.begin(); it!=ccs.end(); ++it) {\n        CompoundConstraint *cc = *it;\n        cc->generateVariables(dim, vs);\n        cc->generateSeparationConstraints(dim, vs, cs, rs);\n    }\n    // Solve, if possible.\n    ProjectionResult result = solve(vs, cs, rs, debugLevel);\n    // If good enough, accept positions.\n    if (result.errorLevel <= accept) {\n        for (size_t i = 0; i < n; ++i) {\n            rs[i]->moveCentreD(dim, vs[i]->finalPosition);\n        }\n    }\n    // Clean up\n    for (Variables::iterator it=vs.begin(); it!=vs.end(); ++it) delete *it;\n    for (Constraints::iterator it=cs.begin(); it!=cs.end(); ++it) delete *it;\n    delete noc;\n    delete nocexemps;\n    // Return\n    return result;\n}\n\nProjectionResult solve(Variables &vs, Constraints &cs, Rectangles &rs, unsigned debugLevel)\n{\n    int result = 0;\n    IncSolver solv(vs,cs);\n    try {\n        solv.solve();\n    } catch (vpsc::UnsatisfiedConstraint uc) {\n    }\n    for (Constraints::iterator it=cs.begin(); it!=cs.end(); it++) {\n        Constraint *c = *it;\n        if (c->unsatisfiable) {\n            CompoundConstraint *cc = (CompoundConstraint*)(c->creator);\n            if (cc->toString() == \"NonOverlapConstraints()\") {\n                result = 1;\n            } else {\n                result = 2;\n                break;\n            }\n        }\n    }\n    std::string unsatinfo;\n    if (debugLevel>0) {\n        std::set<Variable*> varsInvolved;\n        unsatinfo += \"===================================================\\n\";\n        unsatinfo += \"UNSATISFIED CONSTRAINTS:\\n\";\n        char buf [1000];\n        for (Constraints::iterator it=cs.begin(); it!=cs.end(); it++) {\n            Constraint *c = *it;\n            if (c->unsatisfiable) {\n                varsInvolved.insert(c->left);\n                varsInvolved.insert(c->right);\n                sprintf(buf, \"v_%d + %f\", c->left->id, c->gap);\n                unsatinfo += buf;\n                unsatinfo += c->equality ? \" == \" : \" <= \";\n                sprintf(buf, \"v_%d\\n\", c->right->id);\n                unsatinfo += buf;\n                if ((unsigned) c->left->id < rs.size()) {\n                    vpsc::Rectangle *r = rs[c->left->id];\n                    sprintf(buf, \"    v_%d rect: [%f, %f] x [%f, %f]\\n\", c->left->id,\n                            r->getMinX(), r->getMaxX(), r->getMinY(), r->getMaxY());\n                    unsatinfo += buf;\n                }\n                if ((unsigned) c->right->id < rs.size()) {\n                    vpsc::Rectangle *r = rs[c->right->id];\n                    sprintf(buf, \"    v_%d rect: [%f, %f] x [%f, %f]\\n\", c->right->id,\n                            r->getMinX(), r->getMaxX(), r->getMinY(), r->getMaxY());\n                    unsatinfo += buf;\n                }\n                CompoundConstraint *cc = (CompoundConstraint*)(c->creator);\n                unsatinfo += \"    Creator: \" + cc->toString() + \"\\n\";\n            }\n        }\n        if (debugLevel>1) {\n            unsatinfo += \"--------------------------------------------------\\n\";\n            unsatinfo += \"RELATED CONSTRAINTS:\\n\";\n            std::set<Variable*>::iterator lit, rit, eit = varsInvolved.end();\n            for (Constraints::iterator it=cs.begin(); it!=cs.end(); it++) {\n                Constraint *c = *it;\n                lit = varsInvolved.find(c->left);\n                rit = varsInvolved.find(c->right);\n                if (lit != eit || rit != eit) {\n                    sprintf(buf, \"v_%d + %f\", c->left->id, c->gap);\n                    unsatinfo += buf;\n                    unsatinfo += c->equality ? \" == \" : \" <= \";\n                    sprintf(buf, \"v_%d\\n\", c->right->id);\n                    unsatinfo += buf;\n                    if ((unsigned) c->left->id < rs.size()) {\n                        vpsc::Rectangle *r = rs[c->left->id];\n                        sprintf(buf, \"    v_%d rect: [%f, %f] x [%f, %f]\\n\", c->left->id,\n                                r->getMinX(), r->getMaxX(), r->getMinY(), r->getMaxY());\n                        unsatinfo += buf;\n                    }\n                    if ((unsigned) c->right->id < rs.size()) {\n                        vpsc::Rectangle *r = rs[c->right->id];\n                        sprintf(buf, \"    v_%d rect: [%f, %f] x [%f, %f]\\n\", c->right->id,\n                                r->getMinX(), r->getMaxX(), r->getMinY(), r->getMaxY());\n                        unsatinfo += buf;\n                    }\n                    CompoundConstraint *cc = (CompoundConstraint*)(c->creator);\n                    unsatinfo += \"    Creator: \" + cc->toString() + \"\\n\";\n                }\n            }\n        }\n    }\n    ProjectionResult pr;\n    pr.errorLevel = result;\n    pr.unsatinfo = unsatinfo;\n    return pr;\n}\n\n} // namespace cola\n"
  },
  {
    "path": "cola/libcola/commondefs.h",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libcola - A library providing force-directed network layout using the \n *           stress-majorization method subject to separation constraints.\n *\n * Copyright (C) 2006-2008  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n*/\n\n#ifndef _COMMONDEFS_H\n#define _COMMONDEFS_H\n\n/* Notes to compilation using MSVC.\n\n   Compiler options:\n      /Zc:forScope\n*/ \n#if defined(_MSC_VER)\n// Microsoft Visual C++ (MS VC) specific code goes here\n#include <float.h>\n#include <malloc.h>     // Contains _alloca\n#endif\n\n#include \"libvpsc/assertions.h\"\n#include <valarray>\n\nnamespace cola {\n\n/*\n * resolve overlaps:\n *   None: not at all\n *   Horizontal: only horizontally\n *   Both: resolve in either Horizontal or Vertical direction\n *         depending on which leads to less displacement\n */\nenum NonOverlapConstraintsMode { None, Horizontal, Both };\n\nclass FixedList {\npublic:\n    FixedList(const unsigned n) : array(std::valarray<bool>(n)),allFixed(false) \n    { \n        array=false; \n    }\n    void set(const unsigned i, const bool value=true) {\n        COLA_ASSERT(i<array.size());\n        array[i]=value;\n    }\n    bool check(const unsigned i) const {\n        if(allFixed||i>=array.size()) {\n            return false;\n        }\n        return array[i];\n    }\n    void unsetAll() {\n        array=false;\n    }\n    void fixAll(bool val) {\n        allFixed=val;\n    }\nprivate:\n    std::valarray<bool> array;\n    bool allFixed;\n};\n\n/*\n * templated delete functor for use in for_each loop over vector\n */\nstruct delete_object\n{\n  template <typename T>\n  void operator()(T *ptr){ delete ptr;}\n};\n/* \n * Sum over the results of calling operation for each member in the\n * iterator.  Handier than std::accumulate because we can use with\n * mem_fun to pass in a getter method.\n */\ntemplate <class InputIterator, class T, class Operation >\nT sum_over(InputIterator beg, InputIterator end, T init, Operation op)\n{\n    for ( ; beg != end; ++beg)\n    init = init + op(*beg);\n    return init;\n}\n} // namespace cola\n\n#endif\n"
  },
  {
    "path": "cola/libcola/compound_constraints.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libcola - A library providing force-directed network layout using the \n *           stress-majorization method subject to separation constraints.\n *\n * Copyright (C) 2006-2008  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  \n *\n * Author(s):  Tim Dwyer\n *             Michael Wybrow\n*/\n\n#include <algorithm>\n#include <climits>\n#include <sstream>\n\n#include <libvpsc/variable.h>\n#include <libvpsc/constraint.h>\n#include <libvpsc/assertions.h>\n\n#include \"libcola/cola.h\"\n#include \"libcola/compound_constraints.h\"\n#include \"libcola/exceptions.h\"\n\nusing std::vector;\nusing vpsc::XDIM;\nusing vpsc::YDIM;\n\nnamespace cola {\n\nvoid SubConstraintInfo::updateVarIDsWithMapping(\n        const VariableIDMap& idMap, bool forward)\n{\n    varIndex = idMap.mappingForVariable(varIndex, forward);\n}\n\n//-----------------------------------------------------------------------------\n// BoundaryConstraint code\n//-----------------------------------------------------------------------------\n\nclass Offset : public SubConstraintInfo\n{\n    public:\n        Offset(unsigned ind, double offset) :\n            SubConstraintInfo(ind),\n            distOffset(offset)\n        {\n        }\n        double distOffset;\n};\n\n\nBoundaryConstraint::BoundaryConstraint(const vpsc::Dim dim) \n    : CompoundConstraint(dim),\n      position(0), \n      variable(nullptr) \n{\n}\n\n\nvoid BoundaryConstraint::updatePosition(const vpsc::Dim dim) \n{\n    if (dim == _primaryDim)\n    {\n        position = variable->finalPosition;\n    }\n}\n\n\nvoid BoundaryConstraint::addShape(const unsigned int index, \n        const double offset)\n{\n    _subConstraintInfo.push_back(new Offset(index, offset));\n}\n\n\nvoid BoundaryConstraint::printCreationCode(FILE *fp) const\n{\n    fprintf(fp, \"    BoundaryConstraint *boundary%llu = \"\n            \"new BoundaryConstraint(vpsc::%cDIM);\\n\",\n            (unsigned long long) this, (_primaryDim == 0) ? 'X' : 'Y');\n    for (SubConstraintInfoList::const_iterator o = _subConstraintInfo.begin();\n            o != _subConstraintInfo.end(); ++o) \n    {\n        Offset *info = static_cast<Offset *> (*o);\n        fprintf(fp, \"    boundary%llu->addShape(%u, %g);\\n\",\n                (unsigned long long) this, info->varIndex, info->distOffset);\n    }\n    fprintf(fp, \"    ccs.push_back(boundary%llu);\\n\\n\",\n            (unsigned long long) this);\n}\n\n\nstd::string BoundaryConstraint::toString(void) const\n{\n    std::ostringstream stream;\n    stream << \"BoundaryConstraint(\";\n    stream << \"dim: \" << ((_primaryDim == 0) ? 'X' : 'Y');\n    stream << \"): {\";\n    bool first = true;\n    for (SubConstraintInfoList::const_iterator o = _subConstraintInfo.begin();\n            o != _subConstraintInfo.end(); ++o)\n    {\n        Offset *info = static_cast<Offset *> (*o);\n        if (!first)\n        {\n            stream << \", \";\n        }\n        stream << \"(\" << \"rect: \" << info->varIndex << \", offset: \" << info->distOffset << \")\";\n        first = false;\n    }\n    stream << \"}\";\n    return stream.str();\n}\n\n\nvoid BoundaryConstraint::generateVariables(const vpsc::Dim dim, \n        vpsc::Variables& vars) \n{\n    if (dim == _primaryDim)\n    {\n        // Just one variable is generated, associated with the position\n        // of the boundary.  This variable can float freely.\n        variable = new vpsc::Variable(vars.size(), position, freeWeight);\n        vars.push_back(variable);\n    }\n}\n\n\nvoid BoundaryConstraint::generateSeparationConstraints(const vpsc::Dim dim,\n        vpsc::Variables& vars, vpsc::Constraints& cs,\n        vpsc::Rectangles& bbs) \n{\n    COLA_UNUSED(bbs);\n    if (dim == _primaryDim)\n    {\n        COLA_ASSERT(variable != nullptr);\n        for (SubConstraintInfoList::iterator o = _subConstraintInfo.begin();\n                o != _subConstraintInfo.end(); ++o) \n        {\n            Offset *info = static_cast<Offset *> (*o);\n            assertValidVariableIndex(vars, info->varIndex);\n            vpsc::Constraint *constraint = nullptr;\n            if (info->distOffset < 0)\n            {\n                // Constrain the objects with negative offsets to be \n                // to the left of the boundary.\n                constraint = new vpsc::Constraint(vars[info->varIndex],\n                        variable, -info->distOffset);\n            }\n            else\n            {\n                // Constrain the objects with positive offsets to be \n                // to the right of the boundary.\n                constraint = new vpsc::Constraint(variable,\n                        vars[info->varIndex], info->distOffset);\n            }\n            constraint->creator = this;\n            cs.push_back(constraint);\n        }\n    }\n}\n\n\nSubConstraintAlternatives \nBoundaryConstraint::getCurrSubConstraintAlternatives(vpsc::Variables vs[])\n{\n    SubConstraintAlternatives alternatives;\n\n    Offset *info = static_cast<Offset *> \n            (_subConstraintInfo[_currSubConstraintIndex]);\n    \n    assertValidVariableIndex(vs[_primaryDim], info->varIndex);\n    if (info->distOffset < 0)\n    {\n        // Constrain the objects with negative offsets to be \n        // to the left of the boundary.\n        vpsc::Constraint constraint = vpsc::Constraint(\n                vs[_primaryDim][info->varIndex], variable, -info->distOffset);\n        alternatives.push_back(SubConstraint(_primaryDim, constraint));\n    }\n    else\n    {\n        // Constrain the objects with positive offsets to be \n        // to the right of the boundary.\n        vpsc::Constraint constraint = vpsc::Constraint(\n                variable, vs[_primaryDim][info->varIndex], info->distOffset);\n        alternatives.push_back(SubConstraint(_primaryDim, constraint));\n    }\n\n    //fprintf(stderr, \"===== BOUNDARYLINE ALTERNATIVES -======\\n\");\n    return alternatives;\n}\n\n\n\n//-----------------------------------------------------------------------------\n// AlignmentConstraint code\n//-----------------------------------------------------------------------------\n\nAlignmentConstraint::AlignmentConstraint(const vpsc::Dim dim, double position)\n    : CompoundConstraint(dim),\n      indicator(nullptr),\n      variable(nullptr),\n      _position(position), \n      _isFixed(false)\n{\n}\n\n\nvoid AlignmentConstraint::addShape(const unsigned int index, \n        const double offset)\n{\n    _subConstraintInfo.push_back(new Offset(index, offset));\n}\n\n\nvoid AlignmentConstraint::updatePosition(const vpsc::Dim dim) \n{\n    if (dim == _primaryDim)\n    {\n        _position = variable->finalPosition;\n    }\n}\n\n\nvoid AlignmentConstraint::fixPos(double pos) \n{\n    _position = pos;\n    _isFixed = true;\n}\n\n\nvoid AlignmentConstraint::unfixPos() \n{\n    _isFixed = false;\n}\n\n\ndouble AlignmentConstraint::position(void) const \n{\n    return _position;\n}\n\nbool AlignmentConstraint::isFixed(void) const\n{\n    return _isFixed;\n}\n\nvoid AlignmentConstraint::generateVariables(const vpsc::Dim dim, \n        vpsc::Variables& vars) \n{\n    if (dim == _primaryDim)\n    {\n        // Variable representing the position of a guideline.\n        variable = new vpsc::Variable(vars.size(), _position, freeWeight);\n        if (_isFixed) \n        {\n            variable->fixedDesiredPosition = true;\n            variable->weight = 100000;\n        }\n        vars.push_back(variable);\n    }\n}\n\n\nvoid AlignmentConstraint::generateSeparationConstraints(const vpsc::Dim dim,\n        vpsc::Variables& vars, vpsc::Constraints& cs,\n        vpsc::Rectangles& bbs) \n{\n    COLA_UNUSED(bbs);\n    if (dim == _primaryDim)\n    {\n        COLA_ASSERT(variable != nullptr);\n        // Constrain each object to be offset from the guideline by\n        // some exact amount.\n        for (SubConstraintInfoList::iterator o = _subConstraintInfo.begin();\n                o != _subConstraintInfo.end(); ++o) \n        {\n            Offset *info = static_cast<Offset *> (*o);\n            assertValidVariableIndex(vars, info->varIndex);\n            vpsc::Constraint *constraint = new vpsc::Constraint(\n                        variable, vars[info->varIndex], info->distOffset, true);\n            constraint->creator = this;\n            cs.push_back(constraint);\n        }\n    }\n}\n\nvoid AlignmentConstraint::updateShapeOffsetsForDifferentCentres(\n        const std::vector<double>& offsets, bool forward)\n{\n    for (SubConstraintInfoList::iterator o = _subConstraintInfo.begin();\n            o != _subConstraintInfo.end(); ++o) \n    {\n        Offset *info = static_cast<Offset *> (*o);\n        if (offsets[info->varIndex] == 0)\n        {\n            continue;\n        }\n\n        if (forward)\n        {\n            info->distOffset -= offsets[info->varIndex];\n        }\n        else\n        {\n            info->distOffset += offsets[info->varIndex];\n        }\n    }\n}\n\nvoid AlignmentConstraint::printCreationCode(FILE *fp) const\n{\n    fprintf(fp, \"    AlignmentConstraint *alignment%llu = \"\n            \"new AlignmentConstraint(vpsc::%cDIM, %g);\\n\",\n            (unsigned long long) this, (_primaryDim == 0) ? 'X' : 'Y', \n            _position);\n    if (_isFixed)\n    {\n        fprintf(fp, \"    alignment%llu->fixPos(%g);\\n\",\n                (unsigned long long) this, _position);\n    }\n    for (SubConstraintInfoList::const_iterator o = _subConstraintInfo.begin();\n            o != _subConstraintInfo.end(); ++o) \n    {\n        Offset *info = static_cast<Offset *> (*o);\n        fprintf(fp, \"    alignment%llu->addShape(%u, %g);\\n\",\n                (unsigned long long) this, info->varIndex, info->distOffset);\n    }\n    fprintf(fp, \"    ccs.push_back(alignment%llu);\\n\\n\",\n            (unsigned long long) this);\n}\n\n\nstd::string AlignmentConstraint::toString(void) const\n{\n    std::ostringstream stream;\n    stream << \"AlignmentConstraint(\";\n    stream << \"dim: \" << ((_primaryDim == 0) ? 'X' : 'Y');\n    stream << \", pos: \" << _position;\n    if (_isFixed)\n    {\n        stream << \", fixed: true\";\n    }\n#if 0\n    // TODO: buggy.  Not the right value.\n    if (variable)\n    {\n        stream << \", varInd: \" << variable->id;\n    }\n#endif\n    stream << \"): {\";\n    bool first = true;\n    for (SubConstraintInfoList::const_iterator o = _subConstraintInfo.begin();\n            o != _subConstraintInfo.end(); ++o)\n    {\n        Offset *info = static_cast<Offset *> (*o);\n        if (!first)\n        {\n            stream << \", \";\n        }\n        stream << \"(\" << \"rect: \" << info->varIndex << \", offset: \" << info->distOffset << \")\";\n        first = false;\n    }\n    stream << \"}\";\n    return stream.str();\n}\n\n\nSubConstraintAlternatives \nAlignmentConstraint::getCurrSubConstraintAlternatives(vpsc::Variables vs[])\n{\n    SubConstraintAlternatives alternatives;\n\n    Offset *info = static_cast<Offset *> \n            (_subConstraintInfo[_currSubConstraintIndex]);\n    \n    assertValidVariableIndex(vs[_primaryDim], info->varIndex);\n    vpsc::Constraint constraint(variable, vs[_primaryDim][info->varIndex], \n            info->distOffset, true);\n    alternatives.push_back(SubConstraint(_primaryDim, constraint));\n\n    //fprintf(stderr, \"===== ALIGN ALTERNATIVES -======\\n\");\n    return alternatives;\n}\n\n\n//-----------------------------------------------------------------------------\n// SeparationConstraint code\n//-----------------------------------------------------------------------------\n\n\nclass VarIndexPair : public SubConstraintInfo\n{\n    public:\n        VarIndexPair(unsigned ind1, unsigned ind2) \n            : SubConstraintInfo(ind1),\n              lConstraint(nullptr),\n              rConstraint(nullptr),\n              varIndex2(ind2)\n        {\n        }\n        VarIndexPair(AlignmentConstraint *l, AlignmentConstraint *r) \n            : SubConstraintInfo(0),\n              lConstraint(l),\n              rConstraint(r),\n              varIndex2(0)\n        {\n        }\n        unsigned indexL(void) const\n        {\n            return (lConstraint) ? \n                    (unsigned) lConstraint->variable->id : varIndex;\n        }\n        unsigned indexR(void) const\n        {\n            return (rConstraint) ? \n                    (unsigned) rConstraint->variable->id : varIndex2;\n        }\n        void updateVarIDsWithMapping(const VariableIDMap& idMap, bool forward)\n        {\n            varIndex = idMap.mappingForVariable(varIndex, forward);\n            varIndex2 = idMap.mappingForVariable(varIndex2, forward);\n        }\n\n        AlignmentConstraint *lConstraint;\n        AlignmentConstraint *rConstraint;\n        unsigned varIndex2;\n};\n\n\nSeparationConstraint::SeparationConstraint(const vpsc::Dim dim, \n        unsigned l, unsigned r, double g, bool equality)\n    : CompoundConstraint(dim),\n      gap(g), \n      equality(equality),\n      vpscConstraint(nullptr)\n{\n    _subConstraintInfo.push_back(new VarIndexPair(l, r));\n}\n\n\nSeparationConstraint::SeparationConstraint(const vpsc::Dim dim, \n        AlignmentConstraint *l, AlignmentConstraint *r, double g, \n        bool equality) \n    : CompoundConstraint(dim),\n      gap(g),\n      equality(equality)\n{\n    COLA_ASSERT(l);\n    COLA_ASSERT(r);\n    \n    _subConstraintInfo.push_back(new VarIndexPair(l, r));\n}\n\n\nvoid SeparationConstraint::printCreationCode(FILE *fp) const\n{\n    assert(_subConstraintInfo.size() == 1);\n    VarIndexPair *varIndexPair = (VarIndexPair *) _subConstraintInfo.front();\n    if (varIndexPair->lConstraint && varIndexPair->rConstraint)\n    {\n        fprintf(fp, \"    SeparationConstraint *separation%llu = \"\n                \"new SeparationConstraint(vpsc::%cDIM, alignment%llu, \"\n                \"alignment%llu, %g, %s);\\n\",\n                (unsigned long long) this, (_primaryDim == 0) ? 'X' : 'Y', \n                (unsigned long long) varIndexPair->lConstraint, \n                (unsigned long long) varIndexPair->rConstraint, gap, \n                (equality) ? \"true\" : \"false\");\n    }\n    else\n    {\n        fprintf(fp, \"    SeparationConstraint *separation%llu = \"\n                \"new SeparationConstraint(vpsc::%cDIM, %u, %u, %g, %s);\\n\",\n                (unsigned long long) this, (_primaryDim == 0) ? 'X' : 'Y', \n                varIndexPair->indexL(), varIndexPair->indexR(), gap, \n                (equality) ? \"true\" : \"false\");\n    }\n    fprintf(fp, \"    ccs.push_back(separation%llu);\\n\\n\",\n            (unsigned long long) this);\n}\n\n\nstd::string SeparationConstraint::toString(void) const\n{\n    std::ostringstream stream;\n    stream << \"SeparationConstraint(\";\n    stream << \"dim: \" << ((_primaryDim == 0) ? 'X' : 'Y');\n    stream << \", sep: \" << gap;\n    stream << \", equality: \" << ((equality) ? \"true\" : \"false\");\n    stream << \"): {\";\n    VarIndexPair *varIndexPair = (VarIndexPair *) _subConstraintInfo.front();\n    if (varIndexPair->lConstraint && varIndexPair->rConstraint)\n    {\n        stream << \"(alignment: \" << varIndexPair->indexL() << \"), \";\n        stream << \"(alignment: \" << varIndexPair->indexR() << \"), \";\n    }\n    else\n    {\n        stream << \"(rect: \" << varIndexPair->indexL() << \"), \";\n        stream << \"(rect: \" << varIndexPair->indexR() << \"), \";\n    }\n    stream << \"}\";\n    return stream.str();\n}\n\n\nvoid SeparationConstraint::generateVariables(const vpsc::Dim dim, \n        vpsc::Variables& vars) \n{\n    COLA_UNUSED(dim);\n    COLA_UNUSED(vars);\n\n    // No additional variables are required!\n}\n\n\nSubConstraintAlternatives \nSeparationConstraint::getCurrSubConstraintAlternatives(vpsc::Variables vs[])\n{\n    SubConstraintAlternatives alternatives;\n\n    VarIndexPair *info = static_cast<VarIndexPair *> \n            (_subConstraintInfo[_currSubConstraintIndex]);\n    \n    assertValidVariableIndex(vs[_primaryDim], info->indexL());\n    assertValidVariableIndex(vs[_primaryDim], info->indexR());\n    vpsc::Constraint constraint(vs[_primaryDim][info->indexL()],\n            vs[_primaryDim][info->indexR()], gap, equality);\n    alternatives.push_back(SubConstraint(_primaryDim, constraint));\n\n    //fprintf(stderr, \"===== SEPARATION ALTERNATIVES -======\\n\");\n    return alternatives;\n}\n\n\nvoid SeparationConstraint::generateSeparationConstraints(const vpsc::Dim dim,\n            vpsc::Variables& vs, vpsc::Constraints& cs,\n            vpsc::Rectangles& bbs) \n{\n    COLA_UNUSED(bbs);\n    if (dim == _primaryDim)\n    {\n        VarIndexPair *info = \n                static_cast<VarIndexPair *> (_subConstraintInfo.front());\n        \n        unsigned left = info->indexL();\n        unsigned right = info->indexR();\n        assertValidVariableIndex(vs, left);\n        assertValidVariableIndex(vs, right);\n        vpscConstraint = \n                new vpsc::Constraint(vs[left], vs[right], gap, equality);\n        vpscConstraint->creator = this;\n        cs.push_back(vpscConstraint);\n    }\n}\n\n\nunsigned SeparationConstraint::left(void) const\n{\n    VarIndexPair *info =\n            static_cast<VarIndexPair *> (_subConstraintInfo.front());\n\n    return info->indexL();\n}\n\n\nunsigned SeparationConstraint::right(void) const\n{\n    VarIndexPair *info =\n            static_cast<VarIndexPair *> (_subConstraintInfo.front());\n\n    return info->indexR();\n}\n\n\nvoid SeparationConstraint::setSeparation(double gap) \n{\n    this->gap = gap;\n    if (vpscConstraint != nullptr) \n    {\n        vpscConstraint->gap = gap;\n    }\n}\n\n\n//-----------------------------------------------------------------------------\n// OrthogonalEdgeConstraint code\n//-----------------------------------------------------------------------------\n\nOrthogonalEdgeConstraint::OrthogonalEdgeConstraint(const vpsc::Dim dim, \n        unsigned l, unsigned r)\n    : CompoundConstraint(dim),\n      left(l), \n      right(r), \n      vpscConstraint(nullptr)\n{\n}\n\n\nvoid OrthogonalEdgeConstraint::generateVariables(const vpsc::Dim dim, \n        vpsc::Variables& vars) \n{\n    COLA_UNUSED(dim);\n    COLA_UNUSED(vars);\n\n    // No additional variables are required!\n}\n\n\nvoid OrthogonalEdgeConstraint::printCreationCode(FILE *fp) const\n{\n    fprintf(fp, \"    /* OrthogonalEdgeConstraint *orthogonal%llu = nullptr; */\\n\\n\",\n            (unsigned long long) this);\n}\n\n\nstd::string OrthogonalEdgeConstraint::toString(void) const\n{\n    std::ostringstream stream;\n    stream << \"OrthogonalEdgeConstraint()\";\n    return stream.str();\n}\n\n\n\nSubConstraintAlternatives \nOrthogonalEdgeConstraint::getCurrSubConstraintAlternatives(\n        vpsc::Variables vs[])\n{\n    COLA_UNUSED(vs);\n\n    // XXX: What to do here?\n    _currSubConstraintIndex = _subConstraintInfo.size();\n    return SubConstraintAlternatives();\n}\n\n\nvoid OrthogonalEdgeConstraint::generateSeparationConstraints(\n        const vpsc::Dim dim, vpsc::Variables& vs, vpsc::Constraints& cs,\n        vpsc::Rectangles& bbs) \n{\n    COLA_UNUSED(bbs);\n    if (dim == _primaryDim)\n    {\n        assertValidVariableIndex(vs, left);\n        assertValidVariableIndex(vs, right);\n        vpscConstraint = new vpsc::Constraint(vs[left], vs[right], 0, true);\n        vpscConstraint->creator = this;\n        cs.push_back(vpscConstraint);\n    }\n}\n\n\nvoid OrthogonalEdgeConstraint::generateTopologyConstraints(const vpsc::Dim k, \n        const vpsc::Rectangles& rs, vector<vpsc::Variable*> const & vars, \n        vector<vpsc::Constraint*> & cs) \n{\n    assertValidVariableIndex(vars, left);\n    assertValidVariableIndex(vars, right);\n    double lBound, rBound, pos;\n    if (k == vpsc::HORIZONTAL) \n    {\n        lBound = rs[left]->getCentreY();\n        rBound = rs[right]->getCentreY();\n        pos = rs[left]->getCentreX();\n    } \n    else \n    {\n        lBound = rs[left]->getCentreX();\n        rBound = rs[right]->getCentreX();\n        pos = rs[left]->getCentreY();\n    }\n    double minBound = std::min(lBound, rBound);\n    double maxBound = std::max(lBound, rBound);\n    for (unsigned i = 0; i < rs.size(); ++i)\n    {\n        if (i==left || i==right) continue;\n        vpsc::Rectangle *r = rs[i];\n        if (r->allowOverlap()) continue;\n        double l, rMin, rMax, rCentre;\n        rectBounds(k, r, rMin, rMax, rCentre, l);\n        if ( ((rMin >= minBound) && (rMin <= maxBound)) || \n             ((rMax >= minBound) && (rMax <= maxBound))) \n        {\n            double g = l / 2;\n            if (rCentre < pos) \n            {\n                cs.push_back(new vpsc::Constraint(vars[i], vars[left], g));\n            } \n            else \n            {\n                cs.push_back(new vpsc::Constraint(vars[left], vars[i], g));\n            }\n        }\n    }\n}\n\n\nvoid OrthogonalEdgeConstraint::rectBounds(const vpsc::Dim k, \n        vpsc::Rectangle const *r, double& cmin, double& cmax, \n        double& centre, double & l) const\n{\n    if (k == vpsc::HORIZONTAL)\n    {\n        cmin = r->getMinY();\n        cmax = r->getMaxY();\n        centre = r->getCentreX();\n        l = r->width();\n    } \n    else \n    {\n        cmin = r->getMinX();\n        cmax = r->getMaxX();\n        centre = r->getCentreY();\n        l = r->height();\n    }\n}\n\n\n//-----------------------------------------------------------------------------\n// MultiSeparationConstraint code\n//-----------------------------------------------------------------------------\n\nclass AlignmentPair : public SubConstraintInfo\n{\n    public:\n        AlignmentPair(AlignmentConstraint *ac1, AlignmentConstraint *ac2) \n            : SubConstraintInfo(0),\n              alignment1(ac1),\n              alignment2(ac2)\n        {\n        }\n        AlignmentConstraint *alignment1;\n        AlignmentConstraint *alignment2;\n};\n\n\nMultiSeparationConstraint::MultiSeparationConstraint(const vpsc::Dim dim, \n        double minSep, bool equality)\n    : CompoundConstraint(dim),\n      indicator(nullptr),\n      sep(minSep), \n      equality(equality)\n{ \n}\n\n\nvoid MultiSeparationConstraint::addAlignmentPair(AlignmentConstraint *ac1,\n        AlignmentConstraint *ac2)\n{\n    _subConstraintInfo.push_back(new AlignmentPair(ac1, ac2));\n}\n\n\nvoid MultiSeparationConstraint::printCreationCode(FILE *fp) const\n{\n    fprintf(fp, \"    MultiSeparationConstraint *multiSep%llu = \"\n            \"new MultiSeparationConstraint(vpsc::%cDIM, %g, %s);\\n\",\n            (unsigned long long) this, (_primaryDim == 0) ? 'X' : 'Y', sep,\n            (equality) ? \"true\" : \"false\");\n    for (SubConstraintInfoList::const_iterator o = _subConstraintInfo.begin();\n            o != _subConstraintInfo.end(); ++o) \n    {\n        AlignmentPair *pair = static_cast<AlignmentPair *> (*o);\n        fprintf(fp, \"    multiSep%llu->addAlignmentPair(\"\n                \"alignment%llu, alignment%llu);\\n\",\n                (unsigned long long) this, \n                (unsigned long long) pair->alignment1, \n                (unsigned long long) pair->alignment2);\n    }\n    fprintf(fp, \"    ccs.push_back(multiSep%llu);\\n\\n\",\n            (unsigned long long) this);\n}\n\n\nstd::string MultiSeparationConstraint::toString(void) const\n{\n    std::ostringstream stream;\n    stream << \"MultiSeparationConstraint(\";\n    stream << \"dim: \" << ((_primaryDim == 0) ? 'X' : 'Y');\n    stream << \", sep: \" << sep;\n    stream << \", equality: \" << ((equality) ? \"true\" : \"false\");\n    stream << \"): {\";\n    bool first = true;\n    for (SubConstraintInfoList::const_iterator o = _subConstraintInfo.begin();\n            o != _subConstraintInfo.end(); ++o)\n    {\n        if (!first)\n        {\n            stream << \", \";\n        }\n        AlignmentPair *pair = static_cast<AlignmentPair *> (*o);\n        stream << \"(alignment: \" << pair->alignment1->variable->id\n               << \", alignment: \" << pair->alignment2->variable->id << \")\";\n        first = false;\n    }\n    stream << \"}\";\n    return stream.str();\n}\n\n\nvoid MultiSeparationConstraint::generateVariables(const vpsc::Dim dim, \n        vpsc::Variables& vars)\n{\n    COLA_UNUSED(dim);\n    COLA_UNUSED(vars);\n\n    // No additional variables are required!\n}\n\n\nSubConstraintAlternatives \nMultiSeparationConstraint::getCurrSubConstraintAlternatives(\n        vpsc::Variables vs[])\n{\n    COLA_UNUSED(vs);\n\n    SubConstraintAlternatives alternatives;\n\n    AlignmentPair *info = static_cast<AlignmentPair *> \n            (_subConstraintInfo[_currSubConstraintIndex]);\n    \n    AlignmentConstraint *c1 = info->alignment1;\n    AlignmentConstraint *c2 = info->alignment2;\n    if (!c1->variable || !c2->variable)\n    {\n        throw InvalidConstraint(this);\n    }\n    vpsc::Constraint constraint(c1->variable, c2->variable, sep, equality);\n    alternatives.push_back(SubConstraint(_primaryDim, constraint));\n\n    //fprintf(stderr, \"===== MULTI SEPARATION ALTERNATIVES -======\\n\");\n    return alternatives;\n}\n\n\nvoid MultiSeparationConstraint::setSeparation(double sep) \n{ \n    this->sep = sep;\n}\n\n\nvoid MultiSeparationConstraint::generateSeparationConstraints(\n        const vpsc::Dim dim, vpsc::Variables& vs, vpsc::Constraints& gcs,\n        vpsc::Rectangles& bbs) \n{\n    COLA_UNUSED(vs);\n    COLA_UNUSED(bbs);\n\n    if (dim == _primaryDim)\n    {\n        for (SubConstraintInfoList::iterator o = _subConstraintInfo.begin();\n                o != _subConstraintInfo.end(); ++o) \n        {\n            AlignmentPair *info = static_cast<AlignmentPair *> (*o);\n            AlignmentConstraint *c1 = info->alignment1;\n            AlignmentConstraint *c2 = info->alignment2;\n            if (!c1->variable || !c2->variable)\n            {\n                throw InvalidConstraint(this);\n            }\n            vpsc::Constraint *c = new vpsc::Constraint(\n                c1->variable, c2->variable, sep, equality);\n            c->creator = this;\n            gcs.push_back(c);\n            cs.push_back(c);\n        }\n    }\n}\n\n\n//-----------------------------------------------------------------------------\n// DistributionConstraint code\n//-----------------------------------------------------------------------------\n\nDistributionConstraint::DistributionConstraint(const vpsc::Dim dim)\n    : CompoundConstraint(dim),\n      indicator(nullptr)\n{\n}\n\n\nvoid DistributionConstraint::addAlignmentPair(AlignmentConstraint *ac1,\n        AlignmentConstraint *ac2)\n{\n    _subConstraintInfo.push_back(new AlignmentPair(ac1, ac2));\n}\n\n\nvoid DistributionConstraint::generateVariables(const vpsc::Dim dim, \n        vpsc::Variables& vars)\n{\n    COLA_UNUSED(dim);\n    COLA_UNUSED(vars);\n\n    // No additional variables are required!\n}\n\n\nvoid DistributionConstraint::setSeparation(double sep) \n{\n    this->sep = sep;\n}\n\n\nvoid DistributionConstraint::printCreationCode(FILE *fp) const\n{\n    fprintf(fp, \"    DistributionConstraint *distribution%llu = \"\n            \"new DistributionConstraint(vpsc::%cDIM);\\n\",\n            (unsigned long long) this, (_primaryDim == 0) ? 'X' : 'Y');\n    fprintf(fp, \"    distribution%llu->setSeparation(%g);\\n\",\n            (unsigned long long) this, sep);\n    for (SubConstraintInfoList::const_iterator o = _subConstraintInfo.begin();\n            o != _subConstraintInfo.end(); ++o) \n    {\n        AlignmentPair *pair = static_cast<AlignmentPair *> (*o);\n        fprintf(fp, \"    distribution%llu->addAlignmentPair(\"\n                \"alignment%llu, alignment%llu);\\n\",\n                (unsigned long long) this, \n                (unsigned long long) pair->alignment1, \n                (unsigned long long) pair->alignment2);\n    }\n    fprintf(fp, \"    ccs.push_back(distribution%llu);\\n\\n\",\n            (unsigned long long) this);\n}\n\n\nstd::string DistributionConstraint::toString(void) const\n{\n    std::ostringstream stream;\n    stream << \"DistributionConstraint(\";\n    stream << \"dim: \" << ((_primaryDim == 0) ? 'X' : 'Y');\n    stream << \", sep: \" << sep;\n    stream << \"): {\";\n    bool first = true;\n    for (SubConstraintInfoList::const_iterator o = _subConstraintInfo.begin();\n            o != _subConstraintInfo.end(); ++o)\n    {\n        if (!first)\n        {\n            stream << \", \";\n        }\n        AlignmentPair *pair = static_cast<AlignmentPair *> (*o);\n        stream << \"(alignment: \" << pair->alignment1->variable->id\n               << \", alignment: \" << pair->alignment2->variable->id << \")\";\n        first = false;\n    }\n    stream << \"}\";\n    return stream.str();\n}\n\n\nSubConstraintAlternatives \nDistributionConstraint::getCurrSubConstraintAlternatives(vpsc::Variables vs[])\n{\n    COLA_UNUSED(vs);\n\n    SubConstraintAlternatives alternatives;\n\n    AlignmentPair *info = static_cast<AlignmentPair *>\n            (_subConstraintInfo[_currSubConstraintIndex]);\n    AlignmentConstraint *c1 = info->alignment1;\n    AlignmentConstraint *c2 = info->alignment2;\n    if (!c1->variable || !c2->variable)\n    {\n        throw InvalidConstraint(this);\n    }\n    vpsc::Constraint constraint(c1->variable, c2->variable, sep, true);\n    alternatives.push_back(SubConstraint(_primaryDim, constraint));\n\n    //fprintf(stderr, \"===== DISTRIBUTION ALTERNATIVES -======\\n\");\n    return alternatives;\n}\n\n\nvoid DistributionConstraint::generateSeparationConstraints(\n        const vpsc::Dim dim, vpsc::Variables& vars, vpsc::Constraints& gcs,\n        vpsc::Rectangles& bbs)\n{\n    COLA_UNUSED(vars);\n    COLA_UNUSED(bbs);\n\n    if (dim == _primaryDim)\n    {\n        cs.clear();\n        for (SubConstraintInfoList::iterator o = _subConstraintInfo.begin();\n                o != _subConstraintInfo.end(); ++o) \n        {\n            AlignmentPair *info = static_cast<AlignmentPair *> (*o);\n            AlignmentConstraint *c1 = info->alignment1;\n            AlignmentConstraint *c2 = info->alignment2;\n            if (!c1->variable || !c2->variable)\n            {\n                throw InvalidConstraint(this);\n            }\n            vpsc::Constraint *c=new vpsc::Constraint(\n                    c1->variable, c2->variable, sep, true);\n            c->creator = this;\n            gcs.push_back(c);\n            cs.push_back(c);\n#if 0\n            // The following was an experiment to allow variable distributions \n            // solved by optimisation rather than satisfying constraints\n            if(isVariable) {\n                // set second derivatives of:\n                // (u + g - v)^2 = g^2 + 2gu + u^2 - 2gv - 2uv + v^2\n                (*Q)[make_pair(c1->variable->id,c1->variable->id)]+=w;\n                (*Q)[make_pair(c2->variable->id,c2->variable->id)]+=w;\n                (*Q)[make_pair(variable->id,variable->id)]+=w;\n                (*Q)[make_pair(c1->variable->id,c2->variable->id)]-=w;\n                (*Q)[make_pair(c2->variable->id,c1->variable->id)]-=w;\n                (*Q)[make_pair(c1->variable->id,variable->id)]+=w;\n                (*Q)[make_pair(variable->id,c1->variable->id)]+=w;\n                (*Q)[make_pair(c2->variable->id,variable->id)]-=w;\n                (*Q)[make_pair(variable->id,c2->variable->id)]-=w;\n            }\n#endif\n        }\n    }\n}\n\n\n//-----------------------------------------------------------------------------\n// FixedRelativeConstraint code\n//-----------------------------------------------------------------------------\n\nclass RelativeOffset : public SubConstraintInfo\n{\n    public:\n        RelativeOffset(unsigned indL, unsigned indR, vpsc::Dim dim,\n                double offset)\n            : SubConstraintInfo(indL),\n              varIndex2(indR),\n              dim(dim),\n              distOffset(offset)\n        {\n        }\n        void updateVarIDsWithMapping(const VariableIDMap& idMap, bool forward)\n        {\n            varIndex = idMap.mappingForVariable(varIndex, forward);\n            varIndex2 = idMap.mappingForVariable(varIndex2, forward);\n        }\n\n        unsigned varIndex2;\n        vpsc::Dim dim;\n        double distOffset;\n};\n\n\nFixedRelativeConstraint::FixedRelativeConstraint(const vpsc::Rectangles& rs,\n        std::vector<unsigned> shapeIds, const bool fixedPosition)\n    : CompoundConstraint(vpsc::XDIM),\n      m_fixed_position(fixedPosition),\n      m_shape_vars(shapeIds)\n{\n    _combineSubConstraints = true;\n\n    // Make sure that m_shape_vars doesn't contain duplicates.\n    std::sort(m_shape_vars.begin(), m_shape_vars.end());\n    std::vector<unsigned>::iterator last = \n            std::unique(m_shape_vars.begin(), m_shape_vars.end());\n    m_shape_vars.erase(last, m_shape_vars.end());\n\n    unsigned firstId = UINT_MAX;\n    COLA_ASSERT(m_shape_vars.size() >= 2);\n    for (std::vector<unsigned>::iterator it = m_shape_vars.begin();\n            it != m_shape_vars.end(); ++it)\n    {\n        COLA_ASSERT(*it < rs.size());\n\n        if (it == m_shape_vars.begin())\n        {\n            firstId = *it;\n        }\n        else\n        {\n            unsigned thisId = *it;\n            _subConstraintInfo.push_back(\n                    new RelativeOffset(firstId, thisId, vpsc::XDIM,\n                        rs[thisId]->getCentreX() - rs[firstId]->getCentreX()));\n            _subConstraintInfo.push_back(\n                    new RelativeOffset(firstId, thisId, vpsc::YDIM,\n                        rs[thisId]->getCentreY() - rs[firstId]->getCentreY()));\n        }\n    }\n}\n\nvoid FixedRelativeConstraint::updateVarIDsWithMapping(\n        const VariableIDMap& idMap, bool forward)\n{\n    CompoundConstraint::updateVarIDsWithMapping(idMap, forward);\n\n    // We need to map variables in m_shape_vars too, \n    // since this is used in generateVariables().\n    for (size_t i = 0; i < m_shape_vars.size(); ++i)\n    {\n        m_shape_vars[i] = idMap.mappingForVariable(m_shape_vars[i], forward);\n    }\n}\n\n\n\nvoid FixedRelativeConstraint::generateVariables(const vpsc::Dim dim, \n        vpsc::Variables& vars)\n{\n    COLA_UNUSED(dim);\n    COLA_UNUSED(vars);\n\n    // No additional variables are required!\n    \n    // Fix shape positions if required.\n    if (m_fixed_position)\n    {\n        for (std::vector<unsigned>::iterator it = m_shape_vars.begin();\n                it != m_shape_vars.end(); ++it)\n        {\n            vars[*it]->fixedDesiredPosition = true;\n            vars[*it]->weight = 100000;\n        }\n    }\n}\n\n\nvoid FixedRelativeConstraint::printCreationCode(FILE *fp) const\n{\n    fprintf(fp, \"    std::vector<unsigned> fixedRelativeSet%llu;\\n\",\n            (unsigned long long) this);\n    for (std::vector<unsigned>::const_iterator it = m_shape_vars.begin();\n            it != m_shape_vars.end(); ++it)\n    {\n        fprintf(fp, \"    fixedRelativeSet%llu.push_back(%u);\\n\",\n                (unsigned long long) this, *it);\n    }\n    fprintf(fp, \"    FixedRelativeConstraint *fixedRelative%llu = \"\n            \"new FixedRelativeConstraint(rs, fixedRelativeSet%llu, %s);\\n\",\n            (unsigned long long) this, (unsigned long long) this,\n            (m_fixed_position) ? \"true\" : \"false\");\n    fprintf(fp, \"    ccs.push_back(fixedRelative%llu);\\n\\n\",\n            (unsigned long long) this);\n}\n\n\nstd::string FixedRelativeConstraint::toString(void) const\n{\n    std::ostringstream stream;\n    stream << \"FixedRelativeConstraint(\";\n    stream << \"fixedPos: \" << ((m_fixed_position) ? \"true\" : \"false\");\n    stream << \"): {\";\n    bool first = true;\n    for (std::vector<unsigned>::const_iterator it = m_shape_vars.begin();\n            it != m_shape_vars.end(); ++it)\n    {\n        if (!first)\n        {\n            stream << \", \";\n        }\n        stream << \"(rect: \" << *it << \")\";\n        first = false;\n    }\n    stream << \"}\";\n    return stream.str();\n}\n\n\nSubConstraintAlternatives \nFixedRelativeConstraint::getCurrSubConstraintAlternatives(vpsc::Variables vs[])\n{\n    COLA_UNUSED(vs);\n\n    SubConstraintAlternatives alternatives;\n\n    RelativeOffset *offset = static_cast<RelativeOffset *> \n            (_subConstraintInfo[_currSubConstraintIndex]);\n        \n    vpsc::Dim dim = offset->dim;\n    vpsc::Constraint constraint(vs[dim][offset->varIndex], \n            vs[dim][offset->varIndex2], offset->distOffset, true);\n    alternatives.push_back(SubConstraint(dim, constraint));\n    \n    //fprintf(stderr, \"===== FixedRelativeConstraint ALTERNATIVES -======\\n\");\n    return alternatives;\n}\n\n\nvoid FixedRelativeConstraint::generateSeparationConstraints(\n        const vpsc::Dim dim, vpsc::Variables& vars, vpsc::Constraints& ccs,\n        vpsc::Rectangles& bbs)\n{\n    COLA_UNUSED(vars);\n    COLA_UNUSED(bbs);\n\n    for (SubConstraintInfoList::iterator o = _subConstraintInfo.begin();\n            o != _subConstraintInfo.end(); ++o) \n    {\n        RelativeOffset *offset = static_cast<RelativeOffset *> (*o);\n        if (dim != offset->dim)\n        {\n            continue;\n        }\n\n        assertValidVariableIndex(vars, offset->varIndex);\n        assertValidVariableIndex(vars, offset->varIndex2);\n        vpsc::Constraint *c = \n                new vpsc::Constraint(vars[offset->varIndex], \n                        vars[offset->varIndex2], offset->distOffset, true);\n        c->creator = this;\n        ccs.push_back(c);\n    }\n}\n\n\n//-----------------------------------------------------------------------------\n// PageBoundaryConstraint code\n//-----------------------------------------------------------------------------\n\nclass PageBoundaryShapeOffsets : public SubConstraintInfo\n{\n    public:\n        PageBoundaryShapeOffsets(unsigned ind, double xOffset, double yOffset) :\n            SubConstraintInfo(ind)\n        {\n            halfDim[0] = xOffset;\n            halfDim[1] = yOffset;\n        }\n        double halfDim[2];  // half width and height values;\n};\n\n\nPageBoundaryConstraints::PageBoundaryConstraints(double xLow, double xHigh,\n        double yLow, double yHigh, double weight)\n    : CompoundConstraint(vpsc::HORIZONTAL)\n{\n    COLA_ASSERT(xLow < xHigh);\n    COLA_ASSERT(yLow < yHigh);\n\n    leftMargin[vpsc::XDIM]  = xLow;\n    rightMargin[vpsc::XDIM] = xHigh;\n    leftMargin[vpsc::YDIM]  = yLow;\n    rightMargin[vpsc::YDIM] = yHigh;\n\n    for (unsigned i = 0; i < 2; ++i)\n    {\n        actualLeftMargin[i]  = leftMargin[i];\n        actualRightMargin[i] = rightMargin[i];\n        leftWeight[i]  = weight; \n        rightWeight[i] = weight;\n        vl[i] = nullptr;\n        vr[i] = nullptr;\n    }\n}\n\n\nvoid PageBoundaryConstraints::addShape(unsigned id, double halfW, double halfH)\n{\n    _subConstraintInfo.push_back(new PageBoundaryShapeOffsets(id, halfW, halfH));\n}\n\n\nvoid PageBoundaryConstraints::printCreationCode(FILE *fp) const\n{\n    fprintf(fp, \"    PageBoundaryConstraints *pageBoundary%llu = \"\n            \"new PageBoundaryConstraints(%g, %g, %g, %g, %g);\\n\",\n            (unsigned long long) this, leftMargin[vpsc::XDIM], \n            rightMargin[vpsc::XDIM], leftMargin[vpsc::YDIM],\n            rightMargin[vpsc::YDIM], leftWeight[0]);\n    for (SubConstraintInfoList::const_iterator o = _subConstraintInfo.begin();\n            o != _subConstraintInfo.end(); ++o) \n    {\n        PageBoundaryShapeOffsets *offsets = \n                static_cast<PageBoundaryShapeOffsets *> (*o);\n        fprintf(fp, \"    pageBoundary%llu->addShape(%u, %g, %g);\\n\",\n                (unsigned long long) this, offsets->varIndex,\n                offsets->halfDim[XDIM], offsets->halfDim[YDIM]);\n    }\n    fprintf(fp, \"    ccs.push_back(pageBoundary%llu);\\n\\n\",\n            (unsigned long long) this);\n}\n\n\nstd::string PageBoundaryConstraints::toString(void) const\n{\n    std::ostringstream stream;\n    stream << \"PageBoundaryConstraints(\";\n    stream << \"xLow: \" << leftMargin[vpsc::XDIM];\n    stream << \", xHigh: \" << rightMargin[vpsc::XDIM];\n    stream << \", yLow: \" << leftMargin[vpsc::YDIM];\n    stream << \", yHigh: \" << rightMargin[vpsc::YDIM];\n    stream << \", weight: \" << leftWeight[0];\n    stream << \"): {\";\n    bool first = true;\n    for (SubConstraintInfoList::const_iterator o = _subConstraintInfo.begin();\n            o != _subConstraintInfo.end(); ++o)\n    {\n        if (!first)\n        {\n            stream << \", \";\n        }\n        PageBoundaryShapeOffsets *offsets =\n                static_cast<PageBoundaryShapeOffsets *> (*o);\n        stream << \"(rect: \" << offsets->varIndex;\n        stream << \", halfWidth: \" << offsets->halfDim[XDIM];\n        stream << \", halfHeight: \" << offsets->halfDim[YDIM];\n        stream <<\")\";\n        first = false;\n    }\n    stream << \"}\";\n    return stream.str();\n}\n\nSubConstraintAlternatives \nPageBoundaryConstraints::getCurrSubConstraintAlternatives(vpsc::Variables vs[])\n{\n    COLA_UNUSED(vs);\n\n    // Page boundary constraints do not need to be evaluated at the\n    // time of makeFeasible, so we return an empty list here.\n    _currSubConstraintIndex = _subConstraintInfo.size();\n    return SubConstraintAlternatives();\n}\n\n\nvoid PageBoundaryConstraints::updatePosition(const vpsc::Dim dim)\n{\n    if (vl[dim]) \n    {\n        actualLeftMargin[dim] = vl[dim]->finalPosition;\n    }\n\n    if (vr[dim])\n    {\n        actualRightMargin[dim] = vr[dim]->finalPosition;\n    }\n}\n\n\ndouble PageBoundaryConstraints::getActualLeftMargin(const vpsc::Dim dim)\n{\n    return actualLeftMargin[dim];\n}\n\n\ndouble PageBoundaryConstraints::getActualRightMargin(const vpsc::Dim dim)\n{\n    return actualRightMargin[dim];\n}\n\n\nvoid PageBoundaryConstraints::generateVariables(const vpsc::Dim dim,\n        vpsc::Variables& vars) \n{ \n    // create 2 dummy vars, based on the dimension we are in\n    if (leftWeight[dim]) \n    {\n        vars.push_back(vl[dim] = new vpsc::Variable(vars.size(), \n                    leftMargin[dim], leftWeight[dim]));\n        vl[dim]->fixedDesiredPosition = true;\n    }\n    \n    if (rightWeight[dim]) \n    {\n        vars.push_back(vr[dim] = new vpsc::Variable(vars.size(), \n                    rightMargin[dim], rightWeight[dim]));\n        vr[dim]->fixedDesiredPosition = true;\n    }\n}\n\n\nvoid PageBoundaryConstraints::generateSeparationConstraints(\n        const vpsc::Dim dim, vpsc::Variables& vs, vpsc::Constraints& cs,\n        vpsc::Rectangles& bbs) \n{\n    COLA_UNUSED(bbs);\n    // For each of the \"real\" variables, create a constraint that puts \n    // that var between our two new dummy vars, depending on the dimension.\n    for (SubConstraintInfoList::iterator o = _subConstraintInfo.begin();\n            o != _subConstraintInfo.end(); ++o) \n    {\n        PageBoundaryShapeOffsets *info =\n                static_cast<PageBoundaryShapeOffsets *> (*o);\n        assertValidVariableIndex(vs, info->varIndex);\n        if (vl[dim])\n        {\n            vpsc::Constraint *constraint = new vpsc::Constraint(vl[dim],\n                    vs[info->varIndex], info->halfDim[dim]);\n            constraint->creator = this;\n            cs.push_back(constraint);\n        }\n        \n        if (vr[dim])\n        {\n            vpsc::Constraint *constraint = new vpsc::Constraint(\n                    vs[info->varIndex], vr[dim], info->halfDim[dim]);\n            constraint->creator = this;\n            cs.push_back(constraint);\n        }\n    }\n}\n\n\n//-----------------------------------------------------------------------------\n// Support code\n//-----------------------------------------------------------------------------\n\n\nstruct GenerateVariables \n{\n    GenerateVariables(const vpsc::Dim dim, vpsc::Variables& vars) \n        : dim(dim),\n          vars(vars) \n    {\n    }\n    void operator() (CompoundConstraint *c) \n    {\n        c->generateVariables(dim, vars);\n    }\n\n    const vpsc::Dim dim;\n    vpsc::Variables& vars;\n};\n\n\nstruct GenerateSeparationConstraints \n{\n    GenerateSeparationConstraints(const vpsc::Dim dim, vpsc::Variables& vars, \n            vpsc::Constraints& cs, vpsc::Rectangles& bbs) \n        : dim(dim),\n          vars(vars), \n          cs(cs),\n          bbs(bbs)\n    {\n    }\n    void operator() (CompoundConstraint *c) \n    {\n        c->generateSeparationConstraints(dim, vars, cs, bbs);\n    }\n    const vpsc::Dim dim;\n    vpsc::Variables& vars;\n    vpsc::Constraints& cs;\n    vpsc::Rectangles& bbs;\n};\n\n\nvoid generateVariablesAndConstraints(CompoundConstraints& ccs, \n        const vpsc::Dim dim, vpsc::Variables& vars, vpsc::Constraints& cs,\n        vpsc::Rectangles& bbs)\n{\n    for_each(ccs.begin(), ccs.end(), \n            GenerateVariables(dim, vars));\n    for_each(ccs.begin(), ccs.end(), \n            GenerateSeparationConstraints(dim, vars, cs, bbs));\n}\n\n\nvoid generateVariables(CompoundConstraints& ccs, const vpsc::Dim dim, \n        vpsc::Variables& vars)\n{\n    for_each(ccs.begin(), ccs.end(), \n            GenerateVariables(dim, vars));\n}\n\n\nCompoundConstraint::CompoundConstraint(vpsc::Dim primaryDim,\n        unsigned int priority) : \n    _primaryDim(primaryDim),\n    _secondaryDim((vpsc::Dim) ((primaryDim + 1) % 2)),\n    _priority(priority),\n    _combineSubConstraints(false),\n    _currSubConstraintIndex(0)\n{\n}\n\n\nCompoundConstraint::~CompoundConstraint()\n{\n    // Free memory from the subConstraintInfo list.\n    for_each(_subConstraintInfo.begin(), _subConstraintInfo.end(), delete_object());\n    _subConstraintInfo.clear();\n}\n\n\nvpsc::Dim CompoundConstraint::dimension(void) const\n{\n    return _primaryDim;\n}\n\n\nunsigned int CompoundConstraint::priority(void) const\n{\n    return _priority;\n}\n\n\nvoid CompoundConstraint::printCreationCode(FILE *fp) const\n{\n    COLA_UNUSED(fp);\n\n    // Do nothing.  Subclasses can implement this.\n}\n\nvoid CompoundConstraint::updateVarIDsWithMapping(const VariableIDMap& idMap,\n        bool forward)\n{\n    for (SubConstraintInfoList::iterator o = _subConstraintInfo.begin();\n            o != _subConstraintInfo.end(); ++o) \n    {\n        (*o)->updateVarIDsWithMapping(idMap, forward);\n    }\n}\n\n\nstd::list<unsigned> CompoundConstraint::subConstraintObjIndexes(void) const\n{\n    std::list<unsigned> idList;\n    for (size_t i = 0; i < _subConstraintInfo.size(); ++i)\n    {\n        idList.push_back(_subConstraintInfo[i]->varIndex);\n    }\n    return idList;\n}\n\n\nbool CompoundConstraint::subConstraintsRemaining(void) const\n{\n    return _currSubConstraintIndex < _subConstraintInfo.size();\n}\n\n\nvoid CompoundConstraint::markAllSubConstraintsAsInactive(void)\n{\n    for (size_t i = 0; i < _subConstraintInfo.size(); ++i)\n    {\n        _subConstraintInfo[i]->satisfied = false;\n    }\n    _currSubConstraintIndex = 0;\n}\n\n\nvoid CompoundConstraint::markCurrSubConstraintAsActive(const bool satisfiable)\n{\n    _subConstraintInfo[_currSubConstraintIndex]->satisfied = satisfiable;\n\n    _currSubConstraintIndex++;\n}\n\n\nvoid CompoundConstraint::assertValidVariableIndex(const vpsc::Variables& vars, \n        const unsigned index)\n{\n    if (index >= vars.size())\n    {\n        throw InvalidVariableIndexException(this, index);\n    }\n}\n\n\nbool CompoundConstraint::shouldCombineSubConstraints(void) const\n{\n    return _combineSubConstraints;\n}\n\n\nUnsatisfiableConstraintInfo::UnsatisfiableConstraintInfo(\n        const vpsc::Constraint *c) \n    : leftVarIndex(c->left->id),\n      rightVarIndex(c->right->id),\n      separation(c->gap),\n      equality(c->equality),\n      cc((CompoundConstraint *)c->creator)\n{\n}\n\n// Variable mapping.\n\nVariableIDMap::VariableIDMap()\n{\n}\n\nVariableIDMap::~VariableIDMap()\n{\n}\n\ntypedef std::pair<unsigned, unsigned> IDPair;\ntypedef std::list<IDPair> IDPairList;\n\nbool VariableIDMap::addMappingForVariable(const unsigned from, \n        const unsigned to)\n{\n    bool found = false;\n    for (IDPairList::iterator it = m_mapping.begin(); it != m_mapping.end();\n            ++it)\n    {\n        IDPair& ids = *it;\n\n        if (ids.first == from)\n        {\n            found = true;\n            break;\n        }\n    }\n\n    if (!found)\n    {\n        m_mapping.push_back(std::make_pair(from, to));\n        return true;\n    }\n    //fprintf(stderr, \"VariableIDMap: mapping already exists for var %u\\n\", from);\n    return false;\n}\n\nvoid VariableIDMap::printCreationCode(FILE *fp) const\n{\n    fprintf(fp, \"    cola::VariableIDMap idMap;\\n\");\n    for (IDPairList::const_iterator it = m_mapping.begin();\n            it != m_mapping.end(); ++it)\n    {\n        fprintf(fp, \"    idMap.addMappingForVariable(%u, %u);\\n\", \n                it->first, it->second);\n    }\n    fprintf(fp, \"    \\n\");\n}\n\nunsigned VariableIDMap::mappingForVariable(const unsigned var, \n        bool forward) const\n{\n    for (IDPairList::const_iterator it = m_mapping.begin(); \n            it != m_mapping.end(); ++it)\n    {\n        const IDPair& ids = *it;\n\n        if (forward)\n        {\n            if (ids.first == var)\n            {\n                return ids.second;\n            }\n        }\n        else // (!forward)\n        {\n            if (ids.second == var)\n            {\n                return ids.first;\n            }\n        }\n    }\n\n    //fprintf(stderr, \"Warning: mapping not found for var %u\\n\", var);\n    \n    // Just return original variable index.\n    return var;\n}\n\nvoid VariableIDMap::clear(void)\n{\n    m_mapping.clear();\n}\n\n\n} // namespace cola\n\n"
  },
  {
    "path": "cola/libcola/compound_constraints.h",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libcola - A library providing force-directed network layout using the \n *           stress-majorization method subject to separation constraints.\n *\n * Copyright (C) 2006-2008  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n*/\n\n#ifndef _COMPOUND_CONSTRAINTS_H\n#define _COMPOUND_CONSTRAINTS_H\n\n#include <vector>\n#include <list>\n#include <set>\n#include <utility>\n\n#include \"libvpsc/rectangle.h\"\n#include \"libvpsc/constraint.h\"\n#include \"libcola/sparse_matrix.h\"\n#include \"libcola/unused.h\"\n\nnamespace vpsc {\n    class Constraint;\n    class Variable;\n\n// Avoid SWIG redefinition warnings.\n#ifndef SWIG\n    typedef std::vector<vpsc::Constraint *> Constraints;\n    typedef std::vector<vpsc::Variable *> Variables;\n#endif\n}\nnamespace cola {\n\nclass Cluster;\nclass RootCluster;\n\n\n// A component of a CompoundConstraint.\nclass SubConstraint\n{\n    public:\n        SubConstraint(vpsc::Dim dim, vpsc::Constraint constraint, \n                double cost = 0)\n            : dim(dim),\n              constraint(constraint),\n              cost(cost)\n        {\n        }\n        bool operator<(const SubConstraint& rhs) const\n        {\n            return cost < rhs.cost;\n        }\n\n        vpsc::Dim dim;\n        vpsc::Constraint constraint;\n        double cost;\n};\n\n\n// A list of alternative SubConstraints. \ntypedef std::list<SubConstraint> SubConstraintAlternatives;\n\nstatic const double freeWeight = 0.0001;\n\nstatic const unsigned int DEFAULT_CONSTRAINT_PRIORITY = 30000;\nstatic const unsigned int PRIORITY_NONOVERLAP = \n        DEFAULT_CONSTRAINT_PRIORITY - 2000;\n\n/**\n * @brief  Holds a mapping between two sets of Variable indices.\n *\n * This can be used to rewrite the Rectangles to which a set of \n * CompoundConstraints apply to.  This is useful when creating another\n * instance of the problem, but using the same CompoundConstraints list.\n * You should not usually need to use this yourself.  It is utilised by \n * addons such as topology::AvoidTopologyAddon.\n *\n * If a mapping for a particular value is not set, it is considered to be\n * equal on both sides of the mapping.\n */\nclass VariableIDMap\n{\n    public:\n        VariableIDMap();\n        ~VariableIDMap();\n\n        /**\n         * @brief Adds a mapping between a pair of variables.\n         *\n         * @param[in] from  The variable index to map from.\n         * @param[in] to    The variable index to map to.\n         * @return          True if the mapping was successfully added.\n         */\n        bool addMappingForVariable(const unsigned from, const unsigned to);\n        unsigned mappingForVariable(const unsigned var,\n                bool forward = true) const;\n        void clear(void);\n        void printCreationCode(FILE *fp) const;\n\n    private:\n        std::list<std::pair<unsigned, unsigned> > m_mapping;\n};\n\nclass SubConstraintInfo \n{\n    public:\n        SubConstraintInfo(unsigned ind) :\n            varIndex(ind),\n            satisfied(false)\n        {\n        }\n        virtual ~SubConstraintInfo()\n        {\n        }\n        virtual void updateVarIDsWithMapping(const VariableIDMap& idMap,\n                bool forward);\n\n        unsigned varIndex;\n        bool satisfied;\n};\n\ntypedef std::vector<SubConstraintInfo *> SubConstraintInfoList;\n\n\n/** \n * @brief An abstract base class for all high-level compound constraints.\n *\n * A compound constraint is a conceptual, diagramming application oriented\n * type of constraint, which can be translated into a set of simple\n * separation constraints, possibly extra dummy variables, and perhaps\n * even some extra terms for the quadratic objective function used\n * in the gradient projection solver.\n */\nclass CompoundConstraint {\npublic:\n    CompoundConstraint(vpsc::Dim primaryDim, \n            unsigned int priority = DEFAULT_CONSTRAINT_PRIORITY);\n    /**\n     * @brief Implemented by the compound constraint to generate any \n     *        additional required variables in the given dimension.\n     *\n     * Generate any additional variables required by this compound constraint\n     * when operating in the given dimension dim and add them to vars.  These\n     * variables should be cleaned up by the caller after the VPSC problem is\n     * solved.\n     *\n     * The variables' ideal position and weight should be set by the compound \n     * constraint and they should be added to the end of vars.\n     *\n     * @param[in]     dim   The current active dimension.\n     * @param[in,out] vars  The list of variables for the overall problem \n     *                      instance to which any variables generated should \n     *                      be appended.\n     */\n    virtual void generateVariables(const vpsc::Dim dim, \n            vpsc::Variables& vars) = 0;\n    /**\n     * @brief Implemented by the compound constraint to generate the low-level\n     *        separation constraints in the given dimension.\n     *\n     * These constraints will be added to the list of constraints cs.\n     *\n     * @param[in]     dim   The current active dimension.\n     * @param[in]     vars  The list of variables for the overall problem \n     *                      instance.\n     * @param[in,out] cs    The list of constraints to which the generated \n     *                      constraints will be added.\n     * @param[in]     bbs   The list of bounding boxes for all rectangles \n     *                      in the current problem.  It has the same order as\n     *                      vars.\n     */\n    virtual void generateSeparationConstraints(const vpsc::Dim dim, \n            vpsc::Variables& var, vpsc::Constraints& cs,\n            vpsc::Rectangles& bbs) = 0;\n    /**\n     * @brief Implemented by the compound constraint to send position\n     *        information back to the interface.\n     *\n     * This will be called for each compound constraint once the VPSC \n     * instance is solved to allow them to pass information such as \n     * variable values back to the graphical user interface.\n     *\n     * @param[in]     dim   The current active dimension.\n     */\n    virtual void updatePosition(const vpsc::Dim dim)\n    {\n        COLA_UNUSED(dim);\n    }\n\n    /**\n     *  @brief Returns a textual description of the compound constraint.\n     *\n     *  @return     A string describing the compound constraint.\n     */\n    virtual std::string toString(void) const = 0;\n\n// To prevent C++ objects from being destroyed in garbage collected languages\n// when the libraries are called from SWIG, we hide the declarations of the\n// destructors and prevent generation of default destructors.\n#ifndef SWIG\n    virtual ~CompoundConstraint();\n#endif\n\n    vpsc::Dim dimension(void) const;\n    unsigned int priority(void) const;\n    virtual void updateVarIDsWithMapping(const VariableIDMap& idMap,\n            bool forward = true);\n    virtual void updateShapeOffsetsForDifferentCentres(\n                const std::vector<double>& offsets, bool forward = true)\n    {\n        COLA_UNUSED(offsets);\n        COLA_UNUSED(forward);\n    }\n\n    // The following methods are only needed for initially solving feasibility\n    // of the constraints, and do not need to be implemented for most compound\n    // constraints.\n    virtual void markAllSubConstraintsAsInactive(void);\n    virtual bool subConstraintsRemaining(void) const;\n    virtual void markCurrSubConstraintAsActive(const bool satisfiable);\n    virtual SubConstraintAlternatives getCurrSubConstraintAlternatives(\n            vpsc::Variables vs[]) = 0;\n    std::list<unsigned> subConstraintObjIndexes(void) const;\n    virtual void printCreationCode(FILE *fp) const;\n    bool shouldCombineSubConstraints(void) const;\n\nprotected:\n    void assertValidVariableIndex(const vpsc::Variables& vars, \n            const unsigned index);\n\n    // The dimension that this compound constraint operates.\n    vpsc::Dim _primaryDim;\n    // The alternate dimension.\n    vpsc::Dim _secondaryDim;\n    // The priority used to assign order for solving constraints.\n    unsigned int _priority;\n    // Describes whether to process sub constraints individually, or all\n    // at once, during the makeFeasible opteration.\n    bool _combineSubConstraints;\n    \n    // Info about the sub constraints within this compound constraint.\n    SubConstraintInfoList _subConstraintInfo;\n    // The index of the current subConstraint being made feasible.\n    size_t _currSubConstraintIndex;\n};\n//! @brief A vector of pointers to CompoundConstraint objects.\ntypedef std::vector<CompoundConstraint *> CompoundConstraints;\n\n\n/**\n * @brief Generate all the variables and constraints for a collection of \n *        CompoundConstraints.\n */\nvoid generateVariablesAndConstraints(CompoundConstraints& ccs, \n        const vpsc::Dim dim, vpsc::Variables& vars, vpsc::Constraints& cs,\n        vpsc::Rectangles& bbs);\n\n\n/**\n * @brief Generate just all the variables for a collection of \n *        CompoundConstraints.\n */\nvoid generateVariables(CompoundConstraints& ccs, const vpsc::Dim dim, \n        vpsc::Variables& vars);\n\n\n/**\n * @brief A boundary constraint specifies a bounding line that a set of nodes \n *        must be either to the left or right of.\n *\n * A boundary constraint gives a bounding line in a particular dimension (with\n * position stored in a variable) and a set of nodes required to be to the left\n * of that line and nodes required to be to the right of the line.  Separations\n * are determined by offsets passed to addShape().\n */\nclass BoundaryConstraint : public CompoundConstraint \n{\n    public:\n        /**\n         * @brief Constructs a new BoundaryConstraint in the specified \n         *        dimension.\n         *\n         * @param[in] dim The dimension the constraints will operate in.\n         */\n        BoundaryConstraint(const vpsc::Dim dim);\n        /**\n         * @brief Mark a node as being part of this boundary constraint.\n         *\n         * @param[in] index   The index of the node in the Rectangles vector.\n         * @param[in] offset  The minimum amount to separate the node from the\n         *                    boundary line.  Negative if left-of, positive if \n         *                    right-of.  Will usually be equal to half a node's\n         *                    size plus a buffer amount.\n         */\n        void addShape(const unsigned int index, const double offset);\n\n        /**\n         *  @brief Returns a textual description of the compound constraint.\n         *\n         *  @return     A string describing the compound constraint.\n         */\n        std::string toString(void) const;\n\n        SubConstraintAlternatives getCurrSubConstraintAlternatives(\n                vpsc::Variables vs[]);\n        void generateVariables(const vpsc::Dim dim, vpsc::Variables& vars);\n        void generateSeparationConstraints(const vpsc::Dim dim, \n                vpsc::Variables& vars, vpsc::Constraints& cs,\n                vpsc::Rectangles& bbs);\n        void updatePosition(const vpsc::Dim dim);\n        void printCreationCode(FILE *fp) const;\n        \n        //! Holds the position of the boundary line, once layout is complete.\n        double position;\n\n        vpsc::Variable* variable;\n};\n\n\n/**\n * @brief An alignment constraint specifies a alignment line that a set of\n *        nodes must be constrained to by an exact amount.\n *\n * This is represented as a variable representing the position of a vertical \n * or horizontal and a then group of nodes and offsets for those nodes such \n * that the nodes must be spaced exactly at those offsets from the alignment\n * position.\n *\n * Optionally, the alignment may be given a suggested position and/or marked \n * as \"fixed\".  When fixed, the position variable will be given a higher \n * weight to attempt to keep it at that position.\n */\nclass AlignmentConstraint : public CompoundConstraint \n{\n    public:\n        /**\n         * @brief Constructs a new AlignmentConstraint in the specified \n         *        dimension.\n         *\n         * @param[in] dim The dimension the constraints will operate in.\n         */\n        AlignmentConstraint(const vpsc::Dim dim, double position = 0.0);\n        /**\n         * @brief Mark a node as being part of this alignment constraint.\n         *\n         * @param[in] index   The index of the node in the Rectangles vector.\n         * @param[in] offset  The exact amount to separate the node from the\n         *                    alignment line.  Negative if left-of, positive if \n         *                    right-of.  Will usually be equal to half a node's\n         *                    size if aligning to the side of a node, or zero\n         *                    if aligning with the centre of a node.\n         */\n        void addShape(const unsigned int index, const double offset);\n        /**\n         * @brief Mark the alignment as ideally having a fixed position.\n         *\n         * This causes the position variable for the alignment to be given\n         * the ideal position pos and a higher weight.\n         *\n         * @param[in] pos  The ideal position value for the alignment.\n         */\n        void fixPos(double pos);\n        /**\n         * @brief Mark the alignment as not having a fixed position.\n         *\n         * This is the default.\n         */\n        void unfixPos(void);\n        /**\n         * @brief Indicates if the alignment position is marked as fixed.\n         *\n         * @returns True if the alignment position is marked as fixed, or \n         *          false otherwise.\n         */\n        bool isFixed(void) const;\n\n        /**\n         *  @brief Returns a textual description of the compound constraint.\n         *\n         *  @return     A string describing the compound constraint.\n         */\n        std::string toString(void) const;\n\n        SubConstraintAlternatives getCurrSubConstraintAlternatives(\n                vpsc::Variables vs[]);\n        void generateVariables(const vpsc::Dim dim, vpsc::Variables& vars);\n        void generateSeparationConstraints(const vpsc::Dim dim, \n                vpsc::Variables& vars, vpsc::Constraints& cs,\n                vpsc::Rectangles& bbs);\n        void updatePosition(const vpsc::Dim dim);\n        double position(void) const;\n        void printCreationCode(FILE *fp) const;\n        void updateShapeOffsetsForDifferentCentres(\n                const std::vector<double>& offsets, bool forward = true);\n        \n        /// Generic pointer to an indicator object being used to represent \n        /// this compound constraint in the GUI.\n        void *indicator;\n        \n        vpsc::Variable* variable;\n    private:\n        // The position of the alignment line\n        double _position;\n        bool _isFixed;\n};\n\n\n/**\n * @brief A separation constraint specifies a simple horizontal or vertical \n *        spacing constraint between 2 nodes or alignment constraints.\n *\n * The non-equality constraint is  lPos + g <= rPos\n * and the equality constraint is  lPos + g  = rPos\n *\n * @note With an equality, you can effectively reverse the ordering of the \n *       two variables by making the gap a negative number.  This is not so\n *       for the non-equality case, there you need to keep the same gap value\n *       but reverse the order of the variables passed to the constructor.\n */\nclass SeparationConstraint : public CompoundConstraint \n{\n    public:\n        /**\n         * @brief Constructs a new SeparationConstraint between two nodes in\n         *        the specified dimension.\n         *\n         * The constraint will keep the centre of the left node to the left of\n         * the right node by exactly or more than the specified gap.\n         *\n         * @param[in] dim      The dimension the constraint will operate in.\n         * @param[in] l        The index of the left node.\n         * @param[in] r        The index of the right node.\n         * @param[in] g        The minimum or exact distance to separate the\n         *                     two nodes.\n         * @param[in] equality Whether or not the constraint is an exact \n         *                     distance.\n         */\n        SeparationConstraint(const vpsc::Dim dim, unsigned l, unsigned r, \n                double g, bool equality = false);\n        /**\n         * @brief Constructs a new SeparationConstraint between two alignment \n         *        constraints in the specified dimension.\n         *\n         * The constraint will keep the centre of the left alignment line to \n         * the left of the right alignment line  by exactly or more than the \n         * specified gap.\n         *\n         * @param[in] dim      The dimension the constraint will operate in.\n         * @param[in] l        A pointer to the left AlignmentConstraint.\n         * @param[in] r        A pointer to the right AlignmentConstraint.\n         * @param[in] g        The minimum or exact distance to separate the\n         *                     two alignment constraints.\n         * @param[in] equality Whether or not the constraint is an exact \n         *                     distance.\n         */\n        SeparationConstraint(const vpsc::Dim dim, AlignmentConstraint *l, \n                AlignmentConstraint *r, double g, bool equality = false);\n\n        /**\n         *  @brief Returns a textual description of the compound constraint.\n         *\n         *  @return     A string describing the compound constraint.\n         */\n        std::string toString(void) const;\n\n        SubConstraintAlternatives getCurrSubConstraintAlternatives(\n                vpsc::Variables vs[]);\n        void generateVariables(const vpsc::Dim dim, vpsc::Variables& vars);\n        void generateSeparationConstraints(const vpsc::Dim dim, \n                vpsc::Variables& vs, vpsc::Constraints& cs,\n                vpsc::Rectangles& bbs);\n        void setSeparation(double gap);\n        unsigned left(void) const;\n        unsigned right(void) const;\n        void printCreationCode(FILE *fp) const;\n\n        double gap;\n        bool equality;\n        vpsc::Constraint *vpscConstraint;\n};\n\n\n// XXX: This is experimental\n//\n// Orthogonal edges must have their end points aligned horizontally or \n// vertically\nclass OrthogonalEdgeConstraint : public CompoundConstraint \n{\n    public:\n        OrthogonalEdgeConstraint(const vpsc::Dim dim, unsigned l, unsigned r);\n        \n        SubConstraintAlternatives getCurrSubConstraintAlternatives(\n                vpsc::Variables vs[]);\n        void generateVariables(const vpsc::Dim dim, vpsc::Variables& vars);\n        void generateSeparationConstraints(const vpsc::Dim dim, \n                vpsc::Variables& vs, vpsc::Constraints& cs,\n                vpsc::Rectangles& bbs);\n        void generateTopologyConstraints(const vpsc::Dim k, \n                vpsc::Rectangles const& rs, \n                std::vector<vpsc::Variable*> const& vars, \n                std::vector<vpsc::Constraint*>& cs);\n        void printCreationCode(FILE *fp) const;\n        std::string toString(void) const;\n\n        unsigned left;\n        unsigned right;\n        vpsc::Constraint* vpscConstraint;\n    private:\n        void rectBounds(const vpsc::Dim k, vpsc::Rectangle const *r, \n                double& cmin, double& cmax, double& centre, double& l) const;\n};\n\n\n/**\n * @brief A multi-separation constraint Specifies a set of horizontal or \n *        vertical equal spacing constraints between pairs of alignment \n *        constraints.\n *\n * This is a way of arranging a group of alignment lines to be equally \n * distributed, or given a uniform minimum spacing.\n */\nclass MultiSeparationConstraint : public CompoundConstraint \n{\n    public:\n        /**\n         * @brief Constructs a new empty MultiSeparationConstraint with a \n         *        minimum or exact spacing.\n         *\n         * @param[in] dim      The dimension the constraints will operate in.\n         * @param[in] minSep   The minimum or exact distance to separate the\n         *                     alignment constraints.\n         * @param[in] equality Whether or not the constraints will be an exact \n         *                     distance.\n         */\n        MultiSeparationConstraint(const vpsc::Dim dim, double minSep = 0, \n                bool equality = false);\n        /**\n         * @brief Mark a pair of alignment constraints as being part of this \n         *        multi separation constraint.\n         *\n         * You will often specify spacing beteen a set of alignments (e.g., \n         * {1, 2, 3, 4}) by calling this method with each neighbouring pair \n         * (e.g., {(1, 2), (2, 3), (3, 4)}), but you can also specify \n         * non-neighbouring alignment constraints, if you wish them to have \n         * equal exact or minimum separation.\n         *\n         * @param[in] ac1  A pointer to the left AlignmentConstraint object\n         *                 of the pair.\n         * @param[in] ac2  A pointer to the right AlignmentConstraint object\n         *                 of the pair.\n         */\n        void addAlignmentPair(AlignmentConstraint *ac1, \n                AlignmentConstraint *ac2);\n        /**\n         * @brief Alter the minimum or exact spacing between each pair of\n         *        alignment constraints.\n         *\n         * @param[in] sep  The minimum or exact distance to separate the\n         *                 alignment constraints.\n         */\n        void setSeparation(double sep);\n\n        /**\n         *  @brief Returns a textual description of the compound constraint.\n         *\n         *  @return     A string describing the compound constraint.\n         */\n        std::string toString(void) const;\n\n        SubConstraintAlternatives getCurrSubConstraintAlternatives(\n                vpsc::Variables vs[]);\n        void generateVariables(const vpsc::Dim dim, vpsc::Variables& vars);\n        void generateSeparationConstraints(const vpsc::Dim dim, \n                vpsc::Variables& vs, vpsc::Constraints& gcs,\n                vpsc::Rectangles& bbs);\n        void printCreationCode(FILE *fp) const;\n\n        vpsc::Constraints cs;\n        \n        /// Generic pointer to an indicator object being used to represent \n        /// this compound constraint in the GUI.\n        void *indicator;\n        \n        double sep;\n        bool equality;\n};\n\n\n/**\n * @brief A distribution constraint specifies an ordered set of alignment \n *        constraints and a fixed separation required between them.\n *\n * This compound constraint it used to keep a set of alignment constraints\n * equally distributed.\n *\n * If no separation distance is set, then it is detemined from the distance \n * between the two outer alignments, divided by the number of alignments - 1.\n */\nclass DistributionConstraint : public CompoundConstraint {\n    public:\n        /**\n         * @brief Constructs a new empty DistributionConstraint with a \n         *        minimum or exact spacing.\n         *\n         * @param[in] dim      The dimension the constraints will operate in.\n         */\n        DistributionConstraint(const vpsc::Dim dim);\n        /**\n         * @brief Mark a pair of alignment constraints as being part of this \n         *        distribution constraint.\n         *\n         * You should specify spacing beteen a set of alignments (e.g., \n         * {1, 2, 3, 4}) by calling this method with each neighbouring pair \n         * (e.g., {(1, 2), (2, 3), (3, 4)}).\n         *\n         * @param[in] ac1  A pointer to the left AlignmentConstraint object \n         *                 of the pair.\n         * @param[in] ac2  A pointer to the right AlignmentConstraint object\n         *                 of the pair.\n         */\n        void addAlignmentPair(AlignmentConstraint *ac1, \n                AlignmentConstraint *ac2);\n        /**\n         * @brief Alter the exact spacing between each pair of alignment \n         *        constraints.\n         *\n         * @param[in] sep  The exact distance to separate the alignment\n         *                 constraints.\n         */\n        void setSeparation(double sep);\n\n        /**\n         *  @brief Returns a textual description of the compound constraint.\n         *\n         *  @return     A string describing the compound constraint.\n         */\n        std::string toString(void) const;\n\n        SubConstraintAlternatives getCurrSubConstraintAlternatives(\n                vpsc::Variables vs[]);\n        void generateVariables(const vpsc::Dim dim, vpsc::Variables& vars);\n        void generateSeparationConstraints(const vpsc::Dim dim, \n                vpsc::Variables& vars, vpsc::Constraints& gcs,\n                vpsc::Rectangles& bbs);\n        void printCreationCode(FILE *fp) const;\n\n        vpsc::Constraints cs;\n        \n        /// Generic pointer to an indicator object being used to represent \n        /// this compound constraint in the GUI.\n        void *indicator;\n        \n        double sep;\n};\n\n/**\n * @brief A fixed-relative constraint specifies that a group of nodes are\n *        constrained to be fixed in position relative to each other.  \n *\n * These nodes are fixed relative to each other in both the x- and y-dimensions\n * but still free to move as a group.\n *\n * Optionally, this compound constraint can be marked as desiring a fixed\n * position.  If this is specified, the group of nodes will attempt to stay\n * close to its current position.\n */\nclass FixedRelativeConstraint : public CompoundConstraint {\n    public:\n        /**\n         * @brief Constructs a new FixedRelativeConstraint between a set of \n         *        nodes, optionally with a fixed position.\n         *\n         * @param[in] rs        The list of bounding boxes for the rectangles\n         *                      for all nodes in the current problem.\n         * @param[in] shapeIds  A vector of indices into the rc vector for the \n         *                      nodes that will be fixed relative to each other.\n         * @param[in] fixedPosition  Whether of not the nodes should ideally be\n         *                           fixed to the current position.  The default\n         *                           is not fixed.\n         */\n        FixedRelativeConstraint(const vpsc::Rectangles& rs,\n                std::vector<unsigned> shapeIds, \n                const bool fixedPosition = false);\n\n        /**\n         *  @brief Returns a textual description of the compound constraint.\n         *\n         *  @return     A string describing the compound constraint.\n         */\n        std::string toString(void) const;\n\n        SubConstraintAlternatives getCurrSubConstraintAlternatives(\n                vpsc::Variables vs[]);\n        void generateVariables(const vpsc::Dim dim, vpsc::Variables& vars);\n        void generateSeparationConstraints(const vpsc::Dim dim, \n                vpsc::Variables& vars, vpsc::Constraints& gcs,\n                vpsc::Rectangles& bbs);\n        void printCreationCode(FILE *fp) const;\n        void updateVarIDsWithMapping(const VariableIDMap& idMap,\n            bool forward = true);\n\n    private:\n        bool m_fixed_position;\n        std::vector<unsigned> m_shape_vars;\n};\n\n\n/**\n * @brief A page boundary contraint specifies constraints that attempt to keep\n *        the given nodes within a defined rectangular region.\n *\n * This compound constraint creates dummy variables for each of the four edges \n * of the page and constraints between all nodes and these dummy vars such \n * that nodes are contained between the edges.  The variables for the page \n * edges have a high weight but will \"balloon out\" if other constraints force\n * nodes to stick out past the ideal edge positions.\n */\nclass PageBoundaryConstraints : public CompoundConstraint {\n    public:\n        /**\n         * @brief  Constructs a new PageBoundaryConstraints object with given\n         *         page boundary positions and weight.\n         *\n         * @param[in] xLow    The position of the left edge of the page.\n         * @param[in] xHigh   The position of the right edge of the page.\n         * @param[in] yLow    The position of the bottom edge of the page.\n         * @param[in] yHigh   The position of the top edge of the page.\n         * @param[in] weight  The weight to give the positions variables\n         *                    for the page edges.  The default is 100.0.\n         */\n        PageBoundaryConstraints(double xLow, double xHigh, \n                double yLow, double yHigh, double weight = 100.0);\n        /**\n         * @brief Mark a node as being contained within this page boundary.\n         *\n         * @param[in] index   The index of the node in the Rectangles vector.\n         * @param[in] halfW   Half of the width of the node.  Needed because\n         *                    node position variables represent their centre.\n         * @param[in] halfH   Half of the height of the node.  \n         */\n        void addShape(unsigned index, double halfW, double halfH);\n\n        /**\n         *  @brief Returns a textual description of the compound constraint.\n         *\n         *  @return     A string describing the compound constraint.\n         */\n        std::string toString(void) const;\n\n        SubConstraintAlternatives getCurrSubConstraintAlternatives(\n                vpsc::Variables vs[]);\n        void generateVariables(const vpsc::Dim dim, vpsc::Variables& vars);\n        void generateSeparationConstraints(const vpsc::Dim dim, \n                vpsc::Variables& vars, vpsc::Constraints& gcs,\n                vpsc::Rectangles& bbs);\n        void updatePosition(const vpsc::Dim dim);\n        double getActualLeftMargin(const vpsc::Dim dim);\n        double getActualRightMargin(const vpsc::Dim dim);\n        void printCreationCode(FILE *fp) const;\n\n    private:\n        double leftMargin[2];\n        double rightMargin[2];\n        double actualLeftMargin[2];\n        double actualRightMargin[2];\n        double leftWeight[2];    \n        double rightWeight[2];  \n        vpsc::Variable *vl[2], *vr[2];\n};\n\n\n/**\n * @brief Info about constraints that could not be satisfied in gradient \n *        projection process.\n */\nclass UnsatisfiableConstraintInfo {\n    public:\n        UnsatisfiableConstraintInfo(const vpsc::Constraint* c);\n        \n        //! The index of the left variable.\n        unsigned leftVarIndex;\n        //! The index of the right variable.\n        unsigned rightVarIndex;\n        //! The separation.\n        double separation;\n        //! Whether the separation is an exact distance or not.\n        bool equality;\n        //! The index of the CompoundConstraint that created this.\n        cola::CompoundConstraint *cc;\n\n        std::string toString(void) const\n        {\n            std::stringstream stream;\n            stream << \"Unsatisfiable constraint: var(\" << leftVarIndex << \") \";\n            if (separation < 0)\n            {\n                stream << \"- \" << -separation;\n            }\n            else\n            {\n                stream << \"+ \" << separation;\n            }\n            stream << \" \" << ((equality) ? \"== \" : \"<= \");\n            stream << \"var(\" << rightVarIndex << \")\";\n            if (cc)\n            {\n                stream << \"\\n   From \" << cc->toString();\n            }\n\n            return stream.str();\n        }\n};\n//! @brief A vector of pointers to UnsatisfiableConstraintInfo objects.\ntypedef std::vector<UnsatisfiableConstraintInfo *> UnsatisfiableConstraintInfos;\n\n} // namespace cola\n#endif // _COMPOUND_CONSTRAINTS_H\n"
  },
  {
    "path": "cola/libcola/conjugate_gradient.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libcola - A library providing force-directed network layout using the \n *           stress-majorization method subject to separation constraints.\n *\n * Copyright (C) 2006  Nathan Hurst <njh@njhurst.com>\n * Copyright (C) 2006-2008  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  \n *\n * Author(s):  Nathan Hurst\n *             Tim Dwyer\n *            \n*/\n\n\n#include <cmath>\n#include <cstdlib>\n#include <cassert>\n#include <valarray>\n\n#include \"libvpsc/assertions.h\"\n#include \"libcola/commondefs.h\"\n#include \"libcola/conjugate_gradient.h\"\n\n/* lifted wholely from wikipedia.  Well, apart from the bug in the wikipedia version. */\n\nusing std::valarray;\n\nstatic void \nmatrix_times_vector(valarray<double> const &matrix, /* m * n */\n            valarray<double> const &vec,  /* n */\n            valarray<double> &result) /* m */\n{\n    unsigned n = vec.size();\n    unsigned m = result.size();\n    COLA_ASSERT(m*n == matrix.size());\n#   if defined(_MSC_VER)\n    // magmy: The following lines show how operator[] is defined for valarray under MSVC\n    // _Ty valarray<_Ty>::operator[](size_t _Off) const;\n    // _Ty &valarray<_Ty>::operator[](size_t _Off);\n    // As a consequence, it is not possible to take the address of a constant valarray[n].\n    // This looks like a bug in the Microsoft's <valarray> file.\n    // Below is a workaround\n    double const *mp = &const_cast<valarray<double> &>(matrix)[0];\n#   else\n    const double* mp = &matrix[0];\n#   endif\n    for (unsigned i = 0; i < m; i++) {\n        double res = 0;\n        for (unsigned j = 0; j < n; j++)\n            res += *mp++ * vec[j];\n        result[i] = res;\n    }\n}\n\n/*\nstatic double Linfty(valarray<double> const &vec) {\n    return std::max(vec.max(), -vec.min());\n}\n*/\n\ndouble\ninner(valarray<double> const &x, \n      valarray<double> const &y) {\n    double total = 0;\n    for(unsigned i = 0; i < x.size(); i++)\n        total += x[i]*y[i];\n    return total;// (x*y).sum(); <- this is more concise, but ineff\n}\n\ndouble compute_cost(valarray<double> const &A, \n        valarray<double> const &b,\n        valarray<double> const &x,\n        const unsigned n) {\n    // computes cost = 2 b x - x A x\n    double cost = 2. * inner(b,x);\n    valarray<double> Ax(n);\n    for (unsigned i=0; i<n; i++) {\n        Ax[i] = 0;\n        for (unsigned j=0; j<n; j++) {\n            Ax[i] += A[i*n+j]*x[j];\n        }\n    }\n    return cost - inner(x,Ax);\n}\nvoid \nconjugate_gradient(valarray<double> const &A, \n           valarray<double> &x, \n           valarray<double> const &b, \n           unsigned const n, double const tol,\n           unsigned const max_iterations) {\n    //printf(\"Conjugate Gradient...\\n\");\n    valarray<double> Ap(n), p(n), r(n);\n    matrix_times_vector(A,x,Ap);\n    r=b-Ap; \n    double r_r = inner(r,r);\n    unsigned k = 0;\n    double tol_squared = tol*tol;\n#ifdef EXAMINE_COST\n    double previousCost=compute_cost(A,b,x,n),cost;\n#endif\n    while(k < max_iterations && r_r > tol_squared) {\n        k++;\n        double r_r_new = r_r;\n        if(k == 1)\n            p = r;\n        else {\n            r_r_new = inner(r,r);\n            if(r_r_new<tol_squared) break;\n            p = r + (r_r_new/r_r)*p;\n        }\n        matrix_times_vector(A, p, Ap);\n        double alpha_k = r_r_new / inner(p, Ap);\n        x += alpha_k*p;\n#ifdef EXAMINE_COST\n        cost=compute_cost(A,b,x,n);\n        printf(\"  CG[%d] %.15f %.15f\\n\",k,previousCost,cost);\n        previousCost=cost;\n#endif\n        r -= alpha_k*Ap;\n        r_r = r_r_new;\n    }\n    //printf(\"  CG finished after %d iterations\\n\",k);\n    //printf(\"njh: %d iters, Linfty = %g L2 = %g\\n\", k, \n    //std::max(-r.min(), r.max()), sqrt(r_r));\n    // x is solution\n}\n"
  },
  {
    "path": "cola/libcola/conjugate_gradient.h",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libcola - A library providing force-directed network layout using the \n *           stress-majorization method subject to separation constraints.\n *\n * Copyright (C) 2006-2008  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n*/\n\n#ifndef _CONJUGATE_GRADIENT_H\n#define _CONJUGATE_GRADIENT_H\n\n#include <valarray>\n\ndouble\ninner(std::valarray<double> const &x, \n      std::valarray<double> const &y);\n\nvoid \nconjugate_gradient(std::valarray<double> const &A, \n           std::valarray<double> &x, \n           std::valarray<double> const &b, \n           unsigned const n, double const tol,\n           unsigned const max_iterations);\n#endif // _CONJUGATE_GRADIENT_H\n"
  },
  {
    "path": "cola/libcola/connected_components.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libcola - A library providing force-directed network layout using the \n *           stress-majorization method subject to separation constraints.\n *\n * Copyright (C) 2006-2008  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n*/\n\n\n#include <map>\n#include <list>\n\n#include \"libvpsc/rectangle.h\"\n#include \"libvpsc/assertions.h\"\n#include \"libcola/commondefs.h\"\n#include \"libcola/connected_components.h\"\n\nusing namespace std;\nusing namespace vpsc;\nnamespace cola {\n    Component::~Component() {\n        /*\n        for(unsigned i=0;i<scx.size();i++) {\n            delete scx[i];\n        }\n        for(unsigned i=0;i<scy.size();i++) {\n            delete scy[i];\n        }\n        */\n    }\n    void Component::moveRectangles(double x, double y) {\n        for(unsigned i=0;i<rects.size();i++) {\n            rects[i]->moveCentreX(rects[i]->getCentreX()+x);\n            rects[i]->moveCentreY(rects[i]->getCentreY()+y);\n        }\n    }\n    Rectangle* Component::getBoundingBox() \n    {\n        Rectangle boundingBox;\n        for (unsigned i = 0; i < rects.size(); ++i)\n        {\n            boundingBox = boundingBox.unionWith(*(rects[i]));\n        }\n        return new Rectangle(boundingBox);\n    }\n\n    namespace ccomponents {\n        struct Node {\n            unsigned id;\n            bool visited;\n            vector<Node*> neighbours;\n            list<Node*>::iterator listPos;\n            Rectangle* r;\n        };\n        // Depth first search traversal of graph to find connected component\n        void dfs(Node* v,\n                list<Node*>& remaining,\n                Component* component,\n                map<unsigned,pair<Component*,unsigned> > &cmap) {\n            v->visited=true;\n            remaining.erase(v->listPos);\n            cmap[v->id]=make_pair(component,static_cast<unsigned>(component->node_ids.size()));\n            component->node_ids.push_back(v->id);\n            component->rects.push_back(v->r);\n            for(unsigned i=0;i<v->neighbours.size();i++) {\n                Node* u=v->neighbours[i];\n                if(!u->visited) {\n                    dfs(u,remaining,component,cmap);\n                }\n            }\n        }\n    }\n\n    using namespace ccomponents;\n\n    // for a graph of n nodes, return connected components\n    void connectedComponents(\n            const vector<Rectangle*> &rs,\n            const vector<Edge> &es, \n            //const SeparationConstraints &scx,\n            //const SeparationConstraints &scy,\n            vector<Component*> &components) {\n        unsigned n=rs.size();\n        vector<Node> vs(n);\n        list<Node*> remaining;\n        for(unsigned i=0;i<n;i++) {\n            vs[i].id=i;\n            vs[i].visited=false;\n            vs[i].r=rs[i];\n            vs[i].listPos = remaining.insert(remaining.end(),&vs[i]);\n        }\n        vector<Edge>::const_iterator ei;\n        for(ei=es.begin();ei!=es.end();ei++) {\n            vs[ei->first].neighbours.push_back(&vs[ei->second]);\n            vs[ei->second].neighbours.push_back(&vs[ei->first]);\n        }\n        map<unsigned,pair<Component*,unsigned> > cmap;\n        while(!remaining.empty()) {\n            Component* component=new Component;\n            Node* v=*remaining.begin();\n            dfs(v,remaining,component,cmap);\n            components.push_back(component);\n        }\n        for(ei=es.begin();ei!=es.end();ei++) {\n            pair<Component*,unsigned> u=cmap[ei->first],\n                                      v=cmap[ei->second];\n            COLA_ASSERT(u.first==v.first);\n            u.first->edges.push_back(make_pair(u.second,v.second));\n        }\n        /*\n        SeparationConstraints::const_iterator ci;\n        for(ci=scx.begin();ci!=scx.end();ci++) {\n            SeparationConstraint *c=*ci;\n            pair<Component*,unsigned> u=cmap[c->left],\n                                      v=cmap[c->right];\n            COLA_ASSERT(u.first==v.first);\n            u.first->scx.push_back(\n                    new SeparationConstraint(u.second,v.second,c->gap));\n        }\n        for(ci=scy.begin();ci!=scy.end();ci++) {\n            SeparationConstraint *c=*ci;\n            pair<Component*,unsigned> u=cmap[c->left],\n                                      v=cmap[c->right];\n            COLA_ASSERT(u.first==v.first);\n            u.first->scy.push_back(\n                    new SeparationConstraint(u.second,v.second,c->gap));\n        }\n        */\n    }\n    void separateComponents(const vector<Component*> &components) {\n        unsigned n=components.size();\n        vector<Rectangle*> bbs(n);\n        valarray<double> origX(n);\n        valarray<double> origY(n);\n        for(unsigned i=0;i<n;i++) {\n            bbs[i]=components[i]->getBoundingBox();\n            origX[i]=bbs[i]->getCentreX();\n            origY[i]=bbs[i]->getCentreY();\n        }\n        removeoverlaps(bbs);\n        for(unsigned i=0;i<n;i++) {\n            components[i]->moveRectangles(\n                    bbs[i]->getCentreX()-origX[i],\n                    bbs[i]->getCentreY()-origY[i]);\n            delete bbs[i];\n        }\n    }\n}\n"
  },
  {
    "path": "cola/libcola/connected_components.h",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libcola - A library providing force-directed network layout using the \n *           stress-majorization method subject to separation constraints.\n *\n * Copyright (C) 2006-2008  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n*/\n\n#ifndef CONNECTED_COMPONENTS_H\n#define CONNECTED_COMPONENTS_H\n#include \"libcola/cola.h\"\n#include <vector>\n\nnamespace cola {\n// a graph component with a list of node_ids giving indices for some larger list of nodes\n// for the nodes in this component, \n// and a list of edges - node indices relative to this component\nclass Component {\npublic:\n    std::vector<unsigned> node_ids;\n    std::vector<vpsc::Rectangle*> rects;\n    std::vector<cola::Edge> edges;\n    //CompoundConstraints cx, cy;\n    ~Component();\n    void moveRectangles(double x, double y);\n    vpsc::Rectangle* getBoundingBox();\n};\n// for a graph of n nodes, return connected components\nvoid connectedComponents(\n    const std::vector<vpsc::Rectangle*> &rs,\n    const std::vector<cola::Edge> &es,\n    //const CompoundConstraints &cx,\n    //const CompoundConstraints &cy, \n    std::vector<Component*> &components);\n\n// move the contents of each component so that the components do not\n// overlap.\nvoid separateComponents(const std::vector<Component*> &components);\n\n} // namespace cola\n\n#endif // CONNECTED_COMPONENTS_H\n"
  },
  {
    "path": "cola/libcola/convex_hull.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libcola - A library providing force-directed network layout using the \n *           stress-majorization method subject to separation constraints.\n *\n * Copyright (C) 2006-2008  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n*/\n\n#include <valarray>\n#include <cfloat>\n#include <algorithm>\n\n#include \"libvpsc/assertions.h\"\n#include \"libcola/convex_hull.h\"\n\n\nnamespace hull {\nusing namespace std;\n/**\n * CrossProduct of three points: If the result is 0, the points are collinear; \n * if it is positive, the three points (in order) constitute a \"left turn\", \n * otherwise a \"right turn\".\n */\ninline double crossProduct(\n        double x0, double y0,\n        double x1, double y1,\n        double x2, double y2) {\n    return (x1-x0)*(y2-y0)-(x2-x0)*(y1-y0);\n}\nstruct CounterClockwiseOrder {\n    CounterClockwiseOrder(\n            const unsigned p,\n            std::valarray<double> const & X, std::valarray<double> const & Y)\n        :px(X[p]), py(Y[p]), X(X), Y(Y) {};\n    bool operator() (unsigned i, unsigned j) {\n        // o=crossProduct(px,py,X[i],Y[i],X[j],Y[j]);\n        double xi=X[i]-px;\n        double xj=X[j]-px;\n        // since py is the min y pos, yi and yj must be positive\n        double yi=Y[i]-py;\n        double yj=Y[j]-py;\n        \n        // use cross product rule\n        double o = xi*yj-xj*yi;\n        if(o!=0) {\n            return o>0;\n        } \n        // in case of ties choose point farthest from p\n        return (xi*xi+yi*yi) < (xj*xj+yj*yj);\n    }\n    const double px;\n    const double py;\n    std::valarray<double> const & X; \n    std::valarray<double> const & Y; \n};\nvoid convex(const unsigned n, const double* X, const double* Y, vector<unsigned> & h) {\n    const valarray<double> XA(X,n);\n    const valarray<double> YA(Y,n);\n    convex(XA,YA,h);\n}\n/**\n * Implementation of Graham's scan convex hull finding algorithm.\n * X and Y give the horizontal and vertical positions of the pointset.\n * The result is returned in hull as a list of indices referencing points in X and Y.\n */\nvoid convex(valarray<double> const & X, valarray<double> const & Y, vector<unsigned> & h) {\n    unsigned n=X.size();\n    COLA_ASSERT(n==Y.size());\n    unsigned p0=0;\n    // find point p0 with min Y position, choose leftmost in case of tie.\n    // This is our \"pivot\" point\n    double minY=DBL_MAX,minX=DBL_MAX;\n    for(unsigned i=0;i<n;i++) {\n        if ( (Y[i] < minY) || ((Y[i] == minY) && (X[i] < minX)) ) \n        {\n            p0=i;\n            minY=Y[i];\n            minX=X[i];\n        }\n    }\n    // sort remaining points by the angle line p0-p1 (p1 in points) makes\n    // with x-axis\n    vector<unsigned> points;\n    for(unsigned i=0;i<n;i++) { \n        if(i!=p0) points.push_back(i); \n    }\n    CounterClockwiseOrder order(p0,X,Y);\n    sort(points.begin(),points.end(),order);\n    // now we maintain a stack in h, adding points while each successive\n    // point is a \"left turn\", backtracking if we make a right turn.\n    h.clear();\n    h.push_back(p0);\n    h.push_back(points[0]);\n    for(unsigned i=1;i<points.size();i++) {\n        double o=crossProduct(\n                X[h[h.size()-2]],Y[h[h.size()-2]],\n                X[h[h.size()-1]],Y[h[h.size()-1]],\n                X[points[i]],Y[points[i]]);\n        if(o==0) {\n            h.pop_back();\n            h.push_back(points[i]);\n        } else if(o>0) {\n            h.push_back(points[i]);\n        } else {\n            while(o<=0 && h.size()>2) {\n                h.pop_back();\n                o=crossProduct(\n                    X[h[h.size()-2]],Y[h[h.size()-2]],\n                    X[h[h.size()-1]],Y[h[h.size()-1]],\n                    X[points[i]],Y[points[i]]);\n            }\n            h.push_back(points[i]);\n        }\n    }\n}\n\n} // namespace hull\n"
  },
  {
    "path": "cola/libcola/convex_hull.h",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libcola - A library providing force-directed network layout using the \n *           stress-majorization method subject to separation constraints.\n *\n * Copyright (C) 2006-2008  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n*/\n\n#ifndef CONVEX_HULL_H\n#define CONVEX_HULL_H\n#include <vector>\n#include <valarray>\n\nnamespace hull {\nvoid convex(const unsigned n, const double* X, const double* Y, std::vector<unsigned> & hull);\nvoid convex(const std::valarray<double> & X, const std::valarray<double> & Y, std::vector<unsigned> & hull);\n}\n\n#endif // CONVEX_HULL_H\n"
  },
  {
    "path": "cola/libcola/doc/description.doc",
    "content": "/*!\n\n\\if LIBCOLA_DOC\n@mainpage libcola: Force-directed Network Layout ubject to Separation Constraints\n\\endif\n\\if ADAPTAGRAMS_DOC\n@page libcola libcola &mdash; Overview\n\\endif\n\nlibcola is a cross-platform C++ library for constraint graph layout. Specifically, force-directed layout using the stress-majorization method subject to separation constraints. Applications include layout with non-overlapping nodes and clusters, directed graph layout and layout preserving the crossing properties of a given starting layout.\n\nlibcola is part of the \n<a href=\"http://www.adaptagrams.org/\">Adaptagrams project</a>. \nThere are no official releases yet, though the code is stable and \navailable from the Adaptagrams \n<a href=\"https://github.com/mjwybrow/adaptagrams\">GitHub \nrepository</a>.\n\nThe API is documented using Doxygen.  The documentation you are currently \nreading can be obtained by running doxygen in the cola directory. \n\nlibcola is written and maintained by \n<a href=\"http://users.monash.edu/~mwybrow/\">Michael Wybrow</a> and\n<a href=\"http://ialab.it.monash.edu/~dwyer/\">Tim Dwyer</a>,\nmembers of <a href=\"http://ialab.it.monash.edu/\">Immersive Analytics Lab</a> at Monash University, Australia.\n\nThe algorithms used for ConstrainedFDLayout are described in the following papers.  If you use libcola, please cite the relevant paper.\n-  Tim Dwyer, Kim Marriott, and Michael Wybrow. Topology preserving\n   constrained graph layout. In Proc. 16th Intl. Symp. Graph Drawing\n   (GD'08), volume 5417 of Lecture Notes in Computer Science, pages\n   230-241. Springer, 2009.\n-  Tim Dwyer, Kim Marriott, and Michael Wybrow. Dunnart: A\n   constraint-based network diagram authoring tool. In Proc. 16th Intl.\n   Symp. Graph Drawing (GD'08), volume 5417 of Lecture Notes in Computer\n   Science, pages 420-431. Springer, 2009.\n-  Tim Dwyer, Kim Marriott, Falk Schreiber, Peter J. Stuckey,\n   Michael Woodward, and Michael Wybrow. Exploration of networks using\n   overview+detail with constraint-based cooperative layout. IEEE\n   Transactions on Visualization and Computer Graphics, 14(6):1293-1300,\n   2008.\n\nThe method used in ConstrainedMajorizationLayout is described in:\n-  Tim Dwyer and Kim Marriott. Constrained stress majorization using diagonally\n   scaled gradient projection.  In Proc. 15th Intl. Symp. Graph Drawing (GD\n   '07), volume 4875 of Lecture Notes in Computer Science. Springer, 2008.\n\n\n*/\n\n\n"
  },
  {
    "path": "cola/libcola/exceptions.h",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libcola - A library providing force-directed network layout using the \n *           stress-majorization method subject to separation constraints.\n *\n * Copyright (C) 2008  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n*/\n\n#ifndef SEEN_LIBCOLA_EXCEPTIONS_H\n#define SEEN_LIBCOLA_EXCEPTIONS_H\n#include <string>\n#include <sstream>\n\nnamespace cola {\nclass CompoundConstraint;\n\nstruct InvalidConstraint {\n    InvalidConstraint(CompoundConstraint *c):constraint(c) {}\n    CompoundConstraint *constraint;\n};\n\n\nclass InvalidVariableIndexException\n{\npublic:\n    InvalidVariableIndexException(CompoundConstraint *c, unsigned i) \n        : constraint(c),\n          index(i)\n    { }\n    std::string what() const throw()\n    {\n        std::stringstream s;\n        s << \"Invalid variable index: \" << index;\n        return s.str();\n    }\n    CompoundConstraint *constraint;\n    unsigned index;\n};\n\n\n} // namespace cola\n#endif //SEEN_LIBCOLA_EXCEPTIONS_H\n"
  },
  {
    "path": "cola/libcola/gradient_projection.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libcola - A library providing force-directed network layout using the \n *           stress-majorization method subject to separation constraints.\n *\n * Copyright (C) 2006-2008  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n*/\n\n/**********************************************************\n *\n * Solve a quadratic function f(X) = X' A X + b X\n * subject to a set of separation constraints cs\n *\n **********************************************************/\n\n#include <iostream>\n#include <cmath>\n#include <ctime>\n\n#include <libvpsc/solve_VPSC.h>\n#include <libvpsc/variable.h>\n#include <libvpsc/constraint.h>\n#include <libvpsc/assertions.h>\n\n#include \"libcola/cluster.h\"\n#include \"libcola/gradient_projection.h\"\n#include \"libcola/straightener.h\"\n#include \"libcola/commondefs.h\"\n//#define CHECK_CONVERGENCE_BY_COST 1\n\n\nusing namespace std;\nusing namespace vpsc;\nnamespace cola {\nGradientProjection::GradientProjection(\n    const Dim k,\n    std::valarray<double> *denseQ,\n    const double tol,\n    const unsigned max_iterations,\n    CompoundConstraints const *ccs,\n    UnsatisfiableConstraintInfos *unsatisfiableConstraints,\n    NonOverlapConstraintsMode nonOverlapConstraints,\n    RootCluster* clusterHierarchy,\n    vpsc::Rectangles* rs,\n    const bool scaling,\n    SolveWithMosek solveWithMosek) \n        : k(k), \n          denseSize(static_cast<unsigned>((floor(sqrt(static_cast<double>(denseQ->size())))))),\n          denseQ(denseQ), \n          rs(rs),\n          ccs(ccs),\n          unsatisfiableConstraints(unsatisfiableConstraints),\n          nonOverlapConstraints(nonOverlapConstraints),\n          clusterHierarchy(clusterHierarchy),\n          tolerance(tol), \n          max_iterations(max_iterations),\n          sparseQ(nullptr),\n          solveWithMosek(solveWithMosek),\n          scaling(scaling)\n{\n    //printf(\"GP Instance: scaling=%d, mosek=%d\\n\",scaling,solveWithMosek);\n    for(unsigned i=0;i<denseSize;i++) {\n        vars.push_back(new vpsc::Variable(i,1,1));\n    }\n    if(scaling) {\n        scaledDenseQ.resize(denseSize*denseSize);\n        for(unsigned i=0;i<denseSize;i++) {\n            vars[i]->scale=1./sqrt(fabs((*denseQ)[i*denseSize+i]));\n            // XXX: Scale can sometimes be set to infinity here when \n            //      there are nodes not connected to any other node.\n            //      Thus we just set the scale for such a variable to 1.\n            if (!std::isfinite(vars[i]->scale))\n            {\n                vars[i]->scale = 1;\n            }\n        }\n        // the following computes S'QS for Q=denseQ\n        // and S is diagonal matrix of scale factors\n        for(unsigned i=0;i<denseSize;i++) {\n            for(unsigned j=0;j<denseSize;j++) {\n                scaledDenseQ[i*denseSize+j]=(*denseQ)[i*denseSize+j]*vars[i]->scale\n                    *vars[j]->scale;\n            }\n        }\n        this->denseQ = &scaledDenseQ;\n    }\n    //dumpSquareMatrix(*this->denseQ);\n    //dumpSquareMatrix(scaledDenseQ);\n\n    if(ccs) {\n        for(CompoundConstraints::const_iterator c=ccs->begin();\n                c!=ccs->end();++c) {\n            (*c)->generateVariables(k, vars);\n            OrthogonalEdgeConstraint* e=dynamic_cast<OrthogonalEdgeConstraint*>(*c);\n            if(e) {\n                orthogonalEdges.push_back(e);\n            }\n        }\n        for(CompoundConstraints::const_iterator c=ccs->begin();\n                c!=ccs->end();++c) {\n            (*c)->generateSeparationConstraints(k, vars, gcs, *rs);\n        }\n    }\n    /*\n    if(clusterHierarchy) {\n        clusterHierarchy->createVars(k,*rs,vars);\n    }\n    */\n    numStaticVars=vars.size();\n    //solver=setupVPSC();\n}\nstatic inline double dotProd(valarray<double> const & a, valarray<double> const & b) {\n    double p = 0;\n    for (unsigned i=0; i<a.size(); i++) {\n        p += a[i]*b[i];\n    }\n    return p;\n}\ndouble GradientProjection::computeCost(\n        valarray<double> const &b,\n        valarray<double> const &x) const {\n    // computes cost = 2 b x - x A x\n    double cost = 2. * dotProd(b,x);\n    valarray<double> Ax(x.size());\n    for (unsigned i=0; i<denseSize; i++) {\n        Ax[i] = 0;\n        for (unsigned j=0; j<denseSize; j++) {\n            Ax[i] += (*denseQ)[i*denseSize+j]*x[j];\n        }\n    }\n    if(sparseQ) {\n        valarray<double> r(x.size());\n        sparseQ->rightMultiply(x,r);\n        Ax+=r;\n    }\n    return cost - dotProd(x,Ax);\n}\n\ndouble GradientProjection::computeSteepestDescentVector(\n        valarray<double> const &b,\n        valarray<double> const &x,\n        valarray<double> &g) const {\n    // find steepest descent direction\n    //  g = 2 ( b - A x )\n    //    where: A = denseQ + sparseQ\n    //  g = 2 ( b - denseQ x) - 2 sparseQ x\n    //\n    //  except the 2s don't matter because we compute \n    //  the optimal stepsize anyway\n    COLA_ASSERT(x.size()==b.size() && b.size()==g.size());\n    g = b;\n    for (unsigned i=0; i<denseSize; i++) {\n        for (unsigned j=0; j<denseSize; j++) {\n            g[i] -= (*denseQ)[i*denseSize+j]*x[j];\n        }\n    }\n    // sparse part:\n    if(sparseQ) {\n        valarray<double> r(x.size());\n        sparseQ->rightMultiply(x,r);\n        g-=r;\n    }\n    return computeStepSize(g,g);\n}\n// compute optimal step size along descent vector d relative to\n// a gradient related vector g \n//    stepsize = ( g' d ) / ( d' A d )\ndouble GradientProjection::computeStepSize(\n        valarray<double> const & g, valarray<double> const & d) const {\n    COLA_ASSERT(g.size()==d.size());\n    valarray<double> Ad;\n    if(sparseQ) {\n        Ad.resize(g.size());\n        sparseQ->rightMultiply(d,Ad);\n    }\n    double const numerator = dotProd(g, d);\n    double denominator = 0;\n    for (unsigned i=0; i<g.size(); i++) {\n        double r = sparseQ ? Ad[i] : 0;\n        if(i<denseSize) { for (unsigned j=0; j<denseSize; j++) {\n            r += (*denseQ)[i*denseSize+j] * d[j];\n        } }\n        denominator += r * d[i];\n    }\n    if(denominator==0) {\n        return 0;\n    }\n    return numerator/(2.*denominator);\n}\n\nbool GradientProjection::runSolver(valarray<double> & result) {\n    bool activeConstraints = false;\n    switch(solveWithMosek) {\n        case Off:\n            activeConstraints = solver->satisfy();\n            for (unsigned i=0;i<vars.size();i++) {\n                result[i]=vars[i]->finalPosition;\n            }\n            break;\n        case Inner:\n#ifdef MOSEK_AVAILABLE\n            float *ba=new float[vars.size()];\n            float *coords=new float[vars.size()];\n            for(unsigned i=0;i<vars.size();i++) {\n                ba[i]=vars[i]->desiredPosition;\n            }\n            mosek_quad_solve_sep(menv,ba,coords);\n            for(unsigned i=0;i<vars.size();i++) {\n                //printf(\"x[%d]=%f\\n\",i,coords[i]);\n                result[i]=coords[i];\n            }\n            delete [] ba;\n            delete [] coords;\n            break;\n#endif\n        default:\n            break;\n    }\n    return activeConstraints;\n}\n\n/*\n * Use gradient-projection to solve an instance of\n * the Variable Placement with Separation Constraints problem.\n */\nunsigned GradientProjection::solve(\n        valarray<double> const &linearCoefficients, \n        valarray<double> &x) {\n    COLA_ASSERT(linearCoefficients.size()==x.size());\n    COLA_ASSERT(x.size()==denseSize);\n    COLA_ASSERT(numStaticVars>=denseSize);\n    COLA_ASSERT(sparseQ==nullptr || \n                (sparseQ!=nullptr && (vars.size()==sparseQ->rowSize())) );\n\n    if(max_iterations==0) return 0;\n\n    bool converged=false;\n\n    solver = setupVPSC();\n#ifdef MOSEK_AVAILABLE\n    if(solveWithMosek==Outer) {\n        float* ba=new float[vars.size()];\n        float* xa=new float[vars.size()];\n        for(unsigned i=0;i<vars.size();i++) {\n            ba[i]=-linearCoefficients[i];\n        }\n        mosek_quad_solve_sep(menv,ba,xa);\n        for(unsigned i=0;i<vars.size();i++) {\n            //printf(\"mosek result x[%d]=%f\\n\",i,xa[i]);\n            x[i]=xa[i];\n        }\n        delete [] ba;\n        delete [] xa;\n        return 1;\n    }\n#endif\n    // it may be that we have to consider dummy vars, which the caller didn't know\n    // about.  Thus vars.size() may not equal x.size()\n    unsigned n = vars.size();\n    valarray<double> b(n);\n    result.resize(n);\n    \n    // load desired positions into vars, note that we keep desired positions \n    // already calculated for dummy vars\n    for (unsigned i=0;i<x.size();i++) {\n        COLA_ASSERT(!std::isnan(x[i]));\n        COLA_ASSERT(std::isfinite(x[i]));\n        b[i]=i<linearCoefficients.size()?linearCoefficients[i]:0;\n        result[i]=x[i];\n        if(scaling) {\n            b[i]*=vars[i]->scale;\n            result[i]/=vars[i]->scale;\n        } \n        if(!vars[i]->fixedDesiredPosition) vars[i]->desiredPosition=result[i];\n    }\n    runSolver(result);\n        \n    valarray<double> g(n); /* gradient */\n    valarray<double> previous(n); /* stored positions */\n    valarray<double> d(n); /* actual descent vector */\n\n#ifdef CHECK_CONVERGENCE_BY_COST\n    double previousCost = DBL_MAX;\n#endif\n    unsigned counter=0;\n    double stepSize;\n    for (; counter<max_iterations&&!converged; counter++) {\n        previous=result;\n        stepSize=0;\n        double alpha=computeSteepestDescentVector(b,result,g);\n\n        //printf(\"Iteration[%d]\\n\",counter);\n        // move to new unconstrained position\n        for (unsigned i=0; i<n; i++) {\n            // dividing by variable weight is a cheap trick to make these\n            // weights mean something in terms of the descent vector\n            double step=alpha*g[i]/vars[i]->weight;\n            result[i]+=step;\n            //printf(\"   after unconstrained step: x[%d]=%f\\n\",i,result[i]);\n            stepSize+=step*step;\n            COLA_ASSERT(!std::isnan(result[i]));\n            COLA_ASSERT(std::isfinite(result[i]));\n            if(!vars[i]->fixedDesiredPosition) vars[i]->desiredPosition=result[i];\n        }\n\n        //project to constraint boundary\n        bool constrainedOptimum = false;\n        constrainedOptimum=runSolver(result);\n        stepSize=0;\n        for (unsigned i=0;i<n;i++) {\n            double step = previous[i]-result[i];\n            stepSize+=step*step;\n        }\n        //constrainedOptimum=false;\n        // beta seems, more often than not, to be >1!\n        if(constrainedOptimum) {\n            // The following step limits the step-size in the feasible\n            // direction\n            d = result - previous;\n            const double beta = 0.5*computeStepSize(g, d);\n            // beta > 1.0 takes us back outside the feasible region\n            // beta < 0 clearly not useful and may happen due to numerical imp.\n            //printf(\"beta=%f\\n\",beta);\n            if(beta>0&&beta<0.99999) {\n                stepSize=0;\n                for (unsigned i=0; i<n; i++) {\n                    double step=beta*d[i];\n                    result[i]=previous[i]+step;\n                    stepSize+=step*step;\n                }\n            }\n        }\n#ifdef CHECK_CONVERGENCE_BY_COST\n        /* This would be the slow way to detect convergence */\n        //if(counter%2) {\n            double cost = computeCost(b,result);\n            printf(\"     gp[%d] %.15f %.15f\\n\",counter,previousCost,cost);\n            //COLA_ASSERT(previousCost>cost);\n            if(fabs(previousCost - cost) < tolerance) {\n                converged = true;\n            }\n            previousCost = cost;\n        //}\n#else\n        if(stepSize<tolerance) converged = true; \n#endif\n    }\n    //printf(\"GP[%d] converged after %d iterations.\\n\",k,counter);\n    for(unsigned i=0;i<x.size();i++) {\n        x[i]=result[i];\n        if(scaling) {\n            x[i]*=vars[i]->scale;\n        }\n    }\n    destroyVPSC(solver);\n    return counter;\n}\n// Setup an instance of the Variable Placement with Separation Constraints\n// for one iteration.\n// Generate transient local constraints --- such as non-overlap constraints \n// --- that are only relevant to one iteration, and merge these with the\n// global constraint list (including alignment constraints,\n// dir-edge constraints, containment constraints, etc).\nIncSolver* GradientProjection::setupVPSC() {\n    if(nonOverlapConstraints!=None) {\n        if(clusterHierarchy) {\n            //printf(\"Setup up cluster constraints, dim=%d--------------\\n\",k);\n            //clusterHierarchy->generateNonOverlapConstraints(k,nonOverlapConstraints,*rs,vars,lcs);\n        } else {\n            for(vector<OrthogonalEdgeConstraint*>::iterator i=orthogonalEdges.begin();i!=orthogonalEdges.end();i++) {\n                OrthogonalEdgeConstraint* e=*i;\n                e->generateTopologyConstraints(k,*rs,vars,lcs);\n            }\n            if(k==HORIZONTAL) {\n                // Make rectangles a little bit wider when processing horizontally so that any overlap\n                // resolved horizontally is strictly non-overlapping when processing vertically\n                Rectangle::setXBorder(0.0001);\n                // use rs->size() rather than n because some of the variables may\n                // be dummy vars with no corresponding rectangle\n                generateXConstraints(*rs,vars,lcs,nonOverlapConstraints==Both?true:false); \n                Rectangle::setXBorder(0);\n            } else {\n                generateYConstraints(*rs,vars,lcs); \n            }\n        }\n    }\n    cs=gcs;\n    cs.insert(cs.end(),lcs.begin(),lcs.end());\n    switch(solveWithMosek) {\n        case Off:\n            break;\n#ifdef MOSEK_AVAILABLE\n        case Inner:\n            menv = mosek_init_sep_ls(vars.size(),cs);\n            break;\n        case Outer:\n            unsigned n = vars.size();\n            float* lap = new float[n*(n+1)/2];\n            unsigned k=0;\n            for(unsigned i=0;i<n;i++) {\n                for(unsigned j=i;j<n;j++) {\n                    lap[k]=(*denseQ)[i*n+j];\n                    k++;\n                }\n            }\n            menv = mosek_init_sep(lap,n,cs,1);\n            delete [] lap;\n            break;\n#endif\n        default:\n            break;\n    }\n    return new IncSolver(vars,cs);\n}\nvoid GradientProjection::destroyVPSC(IncSolver *vpsc) {\n    if(ccs) {\n        for(CompoundConstraints::const_iterator c=ccs->begin(); \n                c!=ccs->end();++c) {\n            (*c)->updatePosition(vpsc::XDIM);\n            (*c)->updatePosition(vpsc::YDIM);\n        }\n    }\n    if(unsatisfiableConstraints) {\n        unsatisfiableConstraints->clear();\n        for(Constraints::iterator i=cs.begin();i!=cs.end();i++) {\n            Constraint* c=*i;\n            if(c->unsatisfiable) {\n                UnsatisfiableConstraintInfo *ci = new UnsatisfiableConstraintInfo(c);\n                unsatisfiableConstraints->push_back(ci);\n            }\n        }\n    }\n    if(clusterHierarchy) {\n        clusterHierarchy->computeBoundary(*rs);\n    }\n    if(sparseQ) {\n        for(unsigned i=numStaticVars;i<vars.size();i++) {\n            delete vars[i];\n        }\n        vars.resize(numStaticVars);\n        sparseQ=nullptr;\n    }\n    for(vector<Constraint*>::iterator i=lcs.begin();i!=lcs.end();i++) {\n        delete *i;\n    }\n    lcs.clear();\n    delete vpsc;\n#ifdef MOSEK_AVAILABLE\n    if(solveWithMosek!=Off) mosek_delete(menv);\n#endif\n}\nvoid GradientProjection::straighten(\n    cola::SparseMatrix const * Q, \n    vector<SeparationConstraint*> const & cs,\n    vector<straightener::Node*> const & snodes) \n{\n    COLA_ASSERT(Q->rowSize()==snodes.size());\n    COLA_ASSERT(vars.size()==numStaticVars);\n    sparseQ = Q;\n    for(unsigned i=numStaticVars;i<snodes.size();i++) {\n        Variable* v=new vpsc::Variable(i,snodes[i]->pos[k],1);\n        COLA_ASSERT(v->desiredPosition==snodes[i]->pos[k]);\n        vars.push_back(v);\n    }\n    COLA_ASSERT(lcs.size()==0);\n    for(vector<SeparationConstraint*>::const_iterator i=cs.begin();i!=cs.end();i++) {\n        (*i)->generateSeparationConstraints(k, vars, lcs, *rs); \n    }\n}\n} // namespace cola\n"
  },
  {
    "path": "cola/libcola/gradient_projection.h",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libcola - A library providing force-directed network layout using the \n *           stress-majorization method subject to separation constraints.\n *\n * Copyright (C) 2006-2008  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n*/\n\n#ifndef _GRADIENT_PROJECTION_H\n#define _GRADIENT_PROJECTION_H\n\n#include <iostream>\n#include <cmath>\n#include <valarray>\n\n#include \"libvpsc/solve_VPSC.h\"\n#include \"libvpsc/variable.h\"\n#include \"libvpsc/constraint.h\"\n#include \"libvpsc/rectangle.h\"\n#include \"libcola/commondefs.h\"\n#include \"libcola/compound_constraints.h\"\n#include \"libcola/cluster.h\"\n#include \"libcola/sparse_matrix.h\"\n#ifdef MOSEK_AVAILABLE\n#include \"libvpsc/mosek_quad_solve.h\"\n#endif\n\nnamespace straightener {\n    class Node;\n}\nnamespace cola {\n\nenum SolveWithMosek { Off, Inner, Outer };\n\nclass GradientProjection {\npublic:\n    /**\n     * GradientProjection solves a linear system \n     *   Qx=b\n     * subject to separation constraints.\n     * The usual use-case is with a dense square matrix (denseQ).\n     * However, certain CompoundConstraints and also clusters add dummy \n     * variables and simple goal terms which populate a sparse matrix \n     * sparseQ (constructed in this constructor).\n     * A motivated person could rewrite the constructor to allow \n     * arbitrary sparse terms (if they had a use for it).\n     */\n    GradientProjection(\n        const vpsc::Dim k,\n        std::valarray<double> *denseQ,\n        const double tol,\n        const unsigned max_iterations,\n        CompoundConstraints const *ccs,\n        UnsatisfiableConstraintInfos *unsatisfiableConstraints,\n        NonOverlapConstraintsMode nonOverlapConstraints = None,\n        RootCluster* clusterHierarchy = nullptr,\n        vpsc::Rectangles* rs = nullptr,\n        const bool scaling = false,\n        SolveWithMosek solveWithMosek = Off);\n    static void dumpSquareMatrix(std::valarray<double> const &L) {\n        unsigned n=static_cast<unsigned>(floor(sqrt(static_cast<double>(L.size()))));\n        printf(\"Matrix %dX%d\\n{\",n,n);\n        for(unsigned i=0;i<n;i++) {\n            printf(\"{\");\n            for(unsigned j=0;j<n;j++) {\n                char c=j==n-1?'}':',';\n                printf(\"%f%c\",1. * L[i*n+j],c);\n            }\n            char c=i==n-1?'}':',';\n            printf(\"%c\\n\",c);\n        }\n    }\n\n    unsigned getNumStaticVars() const {\n        return numStaticVars;\n    }\n    ~GradientProjection() {\n        //destroyVPSC(solver);\n        for(vpsc::Constraints::iterator i(gcs.begin()); i!=gcs.end(); i++) {\n            delete *i;\n        }\n        gcs.clear();\n        for(unsigned i=0;i<vars.size();i++) {\n            delete vars[i];\n        }\n    }\n    unsigned solve(std::valarray<double> const & b, std::valarray<double> & x);\n    void unfixPos(unsigned i) {\n        if(vars[i]->fixedDesiredPosition) {\n            vars[i]->weight=1;\n            vars[i]->fixedDesiredPosition=false;\n        }\n    }\n    void fixPos(const unsigned i,const double pos) {\n        vars[i]->weight=100000.;\n        vars[i]->desiredPosition=pos;\n        vars[i]->fixedDesiredPosition=true;\n    }\n    vpsc::Dim getDimension() const {\n        return k;\n    }\n    void straighten(\n        cola::SparseMatrix const * Q, \n        std::vector<SeparationConstraint*> const & ccs,\n        std::vector<straightener::Node*> const & snodes);\n    std::valarray<double> const & getFullResult() const {\n        return result;\n    }\nprivate:\n    vpsc::IncSolver* setupVPSC();\n    double computeCost(std::valarray<double> const &b,\n        std::valarray<double> const &x) const;\n    double computeSteepestDescentVector(\n        std::valarray<double> const &b, std::valarray<double> const &place,\n        std::valarray<double> &g) const;\n    double computeScaledSteepestDescentVector(\n        std::valarray<double> const &b, std::valarray<double> const &place,\n        std::valarray<double> &g) const;\n    double computeStepSize(\n        std::valarray<double> const & g, std::valarray<double> const & d) const;\n    bool runSolver(std::valarray<double> & result);\n    void destroyVPSC(vpsc::IncSolver *vpsc);\n    vpsc::Dim k;\n    unsigned numStaticVars; // number of variables that persist\n                              // throughout iterations\n    const unsigned denseSize; // denseQ has denseSize^2 entries\n    std::valarray<double> *denseQ; // dense square graph laplacian matrix\n    std::valarray<double> scaledDenseQ; // scaled dense square graph laplacian matrix\n    std::vector<vpsc::Rectangle*>* rs;\n    CompoundConstraints const *ccs;\n    UnsatisfiableConstraintInfos *unsatisfiableConstraints;\n    NonOverlapConstraintsMode nonOverlapConstraints;\n    Cluster* clusterHierarchy;\n    double tolerance;\n    unsigned max_iterations;\n    cola::SparseMatrix const * sparseQ; // sparse components of goal function\n    vpsc::Variables vars; // all variables\n                          // computations\n    vpsc::Constraints gcs; /* global constraints - persist throughout all\n                                iterations */\n    vpsc::Constraints lcs; /* local constraints - only for current iteration */\n    vpsc::Constraints cs; /* working list of constraints: gcs +lcs */\n    std::valarray<double> result;\n#ifdef MOSEK_AVAILABLE\n    MosekEnv* menv;\n#endif\n    vpsc::IncSolver* solver;\n    SolveWithMosek solveWithMosek;\n    const bool scaling;\n    std::vector<OrthogonalEdgeConstraint*> orthogonalEdges;\n};\n} // namespace cola\n#endif /* _GRADIENT_PROJECTION_H */\n"
  },
  {
    "path": "cola/libcola/libcola.pc.in",
    "content": "prefix=@prefix@\nexec_prefix=@exec_prefix@\nlibdir=@libdir@\nincludedir=@includedir@\n\nName: libcola\nDescription: A library for constraint graph layout\nURL: http://www.adaptagrams.org/\nVersion: @VERSION@\nLibs: -L${libdir} -lcola\nCflags: -I${includedir}/libcola\n"
  },
  {
    "path": "cola/libcola/output_svg.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libcola - A library providing force-directed network layout using the \n *           stress-majorization method subject to separation constraints.\n *\n * Copyright (C) 2006-2008  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n*/\n\n#include <string>\n#include <iostream>\n#include <sstream>\n#include <list>\n\n#include \"libcola/output_svg.h\"\n#include \"libcola/cola.h\"\n#include \"libcola/straightener.h\"\n\nusing namespace cola;\nusing vpsc::Rectangle;\nusing std::endl;\nusing std::cout;\nusing std::ios;\nusing std::max;\nusing std::min;\nusing std::ofstream;\nusing std::vector;\nusing std::list;\n\nvoid OutputFile::generate() {\n    unsigned E=es.size();\n    bool cleanupRoutes=false;\n    if(routes==nullptr) {\n        cleanupRoutes=true;\n        routes = new vector<straightener::Route*>(E);\n        for(unsigned i=0;i<E;i++) {\n            straightener::Route* r=new straightener::Route(2);\n            r->xs[0]=rs[es[i].first]->getCentreX();\n            r->ys[0]=rs[es[i].first]->getCentreY();\n            r->xs[1]=rs[es[i].second]->getCentreX();\n            r->ys[1]=rs[es[i].second]->getCentreY();\n            (*routes)[i]=r;\n        }\n    }\n\n#if defined (CAIRO_HAS_SVG_SURFACE) && defined (CAIRO_HAS_PDF_SURFACE)\n    double width,height,r=2;\n    if(rects) r=rs[0]->width()/2;\n    double xmin=DBL_MAX, ymin=xmin;\n    double xmax=-DBL_MAX, ymax=xmax;\n    for (unsigned i=0;i<rs.size();i++) {\n        double x=rs[i]->getCentreX(), y=rs[i]->getCentreY();\n        xmin=min(xmin,x);\n        ymin=min(ymin,y);\n        xmax=max(xmax,x);\n        ymax=max(ymax,y);\n    }\n    xmax+=2*r;\n    ymax+=2*r;\n    xmin-=2*r;\n    ymin-=2*r;\n    width=xmax-xmin;\n    height=ymax-ymin;\n\n    Cairo::RefPtr<Cairo::Context> cr;\n    openCairo(cr,width,height);\n\n    /* set background colour\n    cr->save(); // save the state of the context\n    cr->set_source_rgb(0.86, 0.85, 0.47);\n    cr->paint();    // fill image with the color\n    cr->restore();  // color is back to black now\n    */\n\n    cr->set_line_width(1.);\n    cr->set_font_size(8);\n    cr->save();\n    if(rc) for(Clusters::const_iterator c=rc->clusters.begin();c!=rc->clusters.end();c++) {\n        draw_cluster_boundary(cr,**c,xmin,ymin);\n    }\n    if(curvedEdges)\n        draw_curved_edges(cr,es,xmin,ymin);\n    else \n        draw_edges(cr,*routes,xmin,ymin);\n    Cairo::TextExtents te;\n    for (unsigned i=0;i<rs.size();i++) {\n        if(!rects) {\n            double x=rs[i]->getCentreX()-xmin, y=rs[i]->getCentreY()-ymin;\n            cr->arc(x,y,r, 0.0, 2.0 * M_PI);\n            cr->fill();\n        } else {\n            double x=rs[i]->getMinX()-xmin+0.5, y=rs[i]->getMinY()-ymin+0.5;\n            std::string str;\n            if(labels.size()==rs.size()) {\n                str=labels[i];\n            } else {\n                std::stringstream s; s<<i;\n                str=s.str();\n            }\n            cr->get_text_extents(str,te);\n            /*\n            double llx = x-te.width/2.-1;\n            double lly = y-te.height/2.-1;\n            cr->rectangle(llx,lly,te.width+2,te.height+2);\n            */\n            cr->rectangle(x,y,\n                    rs[i]->width()-1,rs[i]->height()-1);\n            cr->stroke_preserve();\n            cr->save();\n            cr->set_source_rgba(245./255., 233./255., 177./255., 0.6);\n            cr->fill();\n            cr->restore();\n            if(labels.size()==rs.size()) {\n                cr->move_to(x-te.x_bearing+te.width/2.,y-te.y_bearing+te.height/2.);\n                cr->show_text(str);\n            }\n            cr->stroke();\n        }\n    }\n\n    cr->show_page();\n\n    std::cout << \"Wrote file \\\"\" << fname << \"\\\"\" << std::endl;\n\n#else\n    std::cout << \n            \"WARNING: cola::OutputFile::generate(): No SVG file produced.\" <<\n            std::endl <<\n            \"         You must have cairomm (and cairo with SVG support) \" <<\n            \"this to work.\" << std::endl;\n#endif\n\n    if(cleanupRoutes) {\n        for(unsigned i=0;i<E;i++) {\n            delete (*routes)[i];\n        }\n        delete routes;\n    }\n}\n\n#ifdef HAVE_CAIROMM\nvoid OutputFile::draw_cluster_boundary(Cairo::RefPtr<Cairo::Context> const &cr,\n        Cluster &c,\n        const double xmin,\n        const double ymin) {\n    c.computeBoundary(rs);\n    cr->save();\n    // background\n    cr->set_source_rgb(0.7, 0.7, 224./255.);\n    cr->move_to(c.hullX[0]-xmin,c.hullY[0]-ymin);\n    for(unsigned i=1;i<c.hullX.size();i++) {\n        cr->line_to(c.hullX[i]-xmin,c.hullY[i]-ymin);\n    }\n    cr->line_to(c.hullX[0]-xmin,c.hullY[0]-ymin);\n    cr->fill();\n    cr->restore();\n    // outline\n    cr->move_to(c.hullX[0]-xmin,c.hullY[0]-ymin);\n    for(unsigned i=1;i<c.hullX.size();i++) {\n        cr->line_to(c.hullX[i]-xmin,c.hullY[i]-ymin);\n    }\n    cr->line_to(c.hullX[0]-xmin,c.hullY[0]-ymin);\n    cr->stroke();\n}\n\nvoid OutputFile::draw_edges(Cairo::RefPtr<Cairo::Context> &cr,\n vector<straightener::Route*> const & es, double const xmin, double const ymin) {\n    cr->save();\n    // background\n    cr->set_source_rgba(0,0,1,0.5);\n    for (unsigned i=0;i<es.size();i++) {\n        const straightener::Route* r=es[i];\n        cr->move_to(r->xs[0]-xmin,r->ys[0]-ymin);\n        for (unsigned j=1;j<r->n;j++) {\n            cr->line_to(r->xs[j]-xmin,r->ys[j]-ymin);\n        }\n        cr->stroke();\n    }\n    cr->restore();\n}\n\nnamespace bundles {\nstruct CEdge {\n    unsigned startID, endID;\n    double x0,y0,x1,y1,x2,y2,x3,y3;\n};\nstruct CBundle;\nstruct CNode {\n    double x,y;\n    vector<CEdge*> edges;\n    list<CBundle*> bundles;\n};\ndouble vangle(double ax,double ay, double bx, double by) {\n    double ab=ax*bx+ay*by;\n    double len=sqrt(ax*ax+ay*ay)*sqrt(bx*bx+by*by);\n    double angle=acos(ab/len);\n    //printf(\"ab=%f len=%f angle=%f\\n\",ab,len,angle);\n    return angle;\n}\nstruct CBundle {\n    unsigned w;\n    double x0, y0;\n    double sx,sy;\n    vector<CEdge*> edges;\n    CBundle(CNode const &u) : w(u.edges.size()), x0(u.x), y0(u.y), sx(w*u.x), sy(w*u.y) { }\n    void addEdge(CEdge *e) {\n        if(x0==e->x0 && y0==e->y0) {\n            sx+=e->x3; sy+=e->y3;\n        } else {\n            sx+=e->x0; sy+=e->y0;\n        }\n        edges.push_back(e);\n    }\n    double x1() const {\n       return sx/(w+edges.size());\n    } \n    double y1() const {\n       return sy/(w+edges.size());\n    } \n    double angle(CBundle* const &b) const {\n        double ax=x1()-x0;\n        double ay=y1()-y0;\n        double bx=b->x1()-b->x0;\n        double by=b->y1()-b->y0;\n        return vangle(ax,ay,bx,by);\n    }\n    double yangle() const {\n        double x=x1()-x0;\n        double y=y1()-y0;\n        double o=x<0?1:-1;\n        return vangle(0,1,x,y)*o+M_PI;\n    }\n    void merge(CBundle* b) {\n        for(unsigned i=0;i<b->edges.size();i++) {\n            addEdge(b->edges[i]);\n        }\n    }\n    void dump() {\n        printf(\"Bundle: \");\n        for(unsigned i=0;i<edges.size();i++) {\n            printf(\"(%d,%d) \",edges[i]->startID,edges[i]->endID);\n        }\n    }\n};\nstruct clockwise {\n    bool operator() (CBundle* const &a, CBundle* const &b) {\n        return a->yangle()<b->yangle();\n    }\n};\n} //namespace bundles\n\n/*\n * draw edges bundled.  That is, edges are drawn as splines, with the control points\n * between adjacent edges outgoing from a particular node shared if the angle between them\n * is less than pi/8\n */\nvoid OutputFile::draw_curved_edges(Cairo::RefPtr<Cairo::Context> &cr,\n        vector<cola::Edge> const & es, \n        const double xmin, \n        const double ymin) {\n    using namespace bundles;\n    vector<CNode> nodes(rs.size());\n    vector<CEdge> edges(es.size());\n    for (unsigned i=0;i<es.size();i++) {\n        CEdge *e=&edges[i];\n        unsigned start=es[i].first;\n        unsigned end=es[i].second;\n        e->startID=start;\n        e->endID=end;\n        nodes[start].x=rs[start]->getCentreX()-xmin;\n        nodes[start].y=rs[start]->getCentreY()-ymin;\n        nodes[end].x=rs[end]->getCentreX()-xmin;\n        nodes[end].y=rs[end]->getCentreY()-ymin;\n        e->x0=nodes[start].x;\n        e->x1=nodes[start].x;\n        e->x2=nodes[end].x;\n        e->x3=nodes[end].x;\n        e->y0=nodes[start].y;\n        e->y1=nodes[start].y;\n        e->y2=nodes[end].y;\n        e->y3=nodes[end].y;\n        nodes[end].edges.push_back(e);\n        nodes[start].edges.push_back(e);\n    }\n\n    for (unsigned i=0;i<nodes.size();i++) {\n        CNode u=nodes[i];\n        if(u.edges.size()<2) continue;\n        for (unsigned j=0;j<u.edges.size();j++) {\n            CBundle* b=new CBundle(u);\n            b->addEdge(u.edges[j]);\n            u.bundles.push_back(b);\n        }\n        u.bundles.sort(clockwise());\n        /*\n        printf(\"Sorted:  \\n\");\n        list<CBundle*>::iterator i,j;\n        for(list<CBundle*>::iterator i=u.bundles.begin();i!=u.bundles.end();i++) {\n                CBundle* a=*i;\n                a->dump();\n                printf(\"  angle=%f\\n\",a->yangle());\n        }\n        printf(\"---------\\n\");\n        */\n        while(true) {\n            double minAngle=DBL_MAX;\n            list<CBundle*>::iterator mini,minj,i,j;\n            for(i=u.bundles.begin();i!=u.bundles.end();i++) {\n                j=i;\n                if(++j==u.bundles.end()) {\n                    j=u.bundles.begin(); \n                }\n                CBundle* a=*i;\n                CBundle* b=*j;\n                double angle=b->yangle()-a->yangle();\n                if(angle<0) angle+=2*M_PI;\n                //printf(\"between \");\n                //a->dump(); b->dump();\n                //printf(\" angle=%f\\n\",angle);\n                if(angle<minAngle) {\n                    minAngle=angle;\n                    mini=i;\n                    minj=j;\n                }\n            }\n            if(minAngle>cos(M_PI/8.)) break;\n            CBundle* a=*mini;\n            CBundle* b=*minj;\n            //a->dump();\n            //b->dump();\n            b->merge(a);\n            //printf(\"***Merged on %f***: \",minAngle);\n            //b->dump();\n            //printf(\"\\n\");\n            u.bundles.erase(mini);\n            if(u.bundles.size() < 2) break;\n        }\n        for(list<CBundle*>::iterator i=u.bundles.begin();i!=u.bundles.end();i++) {\n            CBundle* b=*i;\n            for(unsigned i=0;i<b->edges.size();i++) {\n                CEdge* e=b->edges[i];\n                if(e->x0==u.x&&e->y0==u.y) {\n                    e->x1=b->x1();\n                    e->y1=b->y1();\n                } else {\n                    e->x2=b->x1();\n                    e->y2=b->y1();\n                }\n            }\n        }\n    }\n\n    cr->save();\n    // background\n    cr->set_source_rgba(0,0,1,0.2);\n    for (unsigned i=0;i<edges.size();i++) {\n        CEdge &e=edges[i];\n        cr->move_to(e.x0,e.y0);\n        cr->curve_to(e.x1,e.y1,e.x2,e.y2,e.x3,e.y3);\n        cr->stroke();\n    }\n    cr->restore();\n}\nvoid OutputFile::openCairo(Cairo::RefPtr<Cairo::Context> &cr, double width, double height) {\n    if(fname.rfind(\"pdf\") == (fname.length()-3) ) {\n        printf(\"writing pdf file: %s\\n\",fname.c_str());\n        Cairo::RefPtr<Cairo::PdfSurface> pdfsurface =\n            Cairo::PdfSurface::create(fname, width, height);\n        cr = Cairo::Context::create(pdfsurface);\n    } else {\n        printf(\"writing svg file: %s\\n\",fname.c_str());\n        Cairo::RefPtr<Cairo::SvgSurface> svgsurface =\n            Cairo::SvgSurface::create(fname, width, height);\n        cr = Cairo::Context::create(svgsurface);\n    }\n}\n\n#endif // HAVE_CAIROMM\n"
  },
  {
    "path": "cola/libcola/output_svg.h",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libcola - A library providing force-directed network layout using the \n *           stress-majorization method subject to separation constraints.\n *\n * Copyright (C) 2006-2008  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n*/\n\n#ifndef _OUTPUT_SVG_H\n#define _OUTPUT_SVG_H\n\n#include \"libcola/config.h\"\n#include \"libcola/cola.h\"\n\n#ifdef HAVE_CAIROMM\n#include <cairomm/context.h>\n#include <cairomm/surface.h>\n#endif\n\nclass OutputFile {\npublic:\n\tstd::vector<vpsc::Rectangle*> const &rs;\n\tstd::vector<cola::Edge> const &es;\n\tstd::vector<straightener::Route*> *routes;\n\tcola::RootCluster const * rc;\n\tstd::string const fname;\n\tbool rects;\n\tbool curvedEdges;\n\tOutputFile(std::vector<vpsc::Rectangle*> const &rs, \n\t\tstd::vector<cola::Edge> const &es, \n\t\tcola::RootCluster const * rc, \n\t\tstd::string const fname,\n\t\tconst bool rects=false,\n\t\tconst bool curvedEdges=false)\n\t\t: rs(rs),\n\t\t  es(es),\n\t\t  routes(nullptr),\n\t\t  rc(rc),\n\t\t  fname(fname),\n\t\t  rects(rects),\n\t\t  curvedEdges(curvedEdges) {}\n\tvoid generate();\n    void setLabels(std::vector<std::string> ls) {\n        labels.resize(ls.size());\n        std::copy(ls.begin(),ls.end(),labels.begin());\n    }\n\tvoid setLabels(const unsigned n, const char **ls) {\n        labels.resize(n);\n        for(unsigned i=0;i<n;i++) {\n            labels[i]=ls[i];\n        }\n\t}\nprivate:\n#ifdef HAVE_CAIROMM\n\tvoid draw_cluster_boundary(Cairo::RefPtr<Cairo::Context> const &cr, \n        cola::Cluster &c, const double xmin, const double ymin);\n\tvoid draw_edges(Cairo::RefPtr<Cairo::Context> &cr, \n        std::vector<straightener::Route*> const & es, \n        double const xmin, double const ymin);\n\tvoid draw_curved_edges(Cairo::RefPtr<Cairo::Context> &cr,\n\t\tstd::vector<cola::Edge> const & es, \n\t\tconst double xmin, \n\t\tconst double ymin);\n\tvoid openCairo(Cairo::RefPtr<Cairo::Context> &cr, double width, double height);\n#endif // HAVE_CAIROMM\n    std::vector<std::string> labels;\n};\n#endif // _OUTPUT_SVG_H\n"
  },
  {
    "path": "cola/libcola/pseudorandom.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libcola - A library providing force-directed network layout using the \n *           stress-majorization method subject to separation constraints.\n *\n * Copyright (C) 2015  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n * Author(s):  Tim Dwyer\n*/\n\n#include \"libcola/pseudorandom.h\"\n\nnamespace cola {\n\nPseudoRandom::PseudoRandom(double s)\n    : a(214013),\n      c(2531011),\n      m(2147483648),\n      range(32767),\n      seed(s)\n{\n}\n\ndouble PseudoRandom::getNext(void)\n{\n    seed = (seed * a + c) % m;\n    return (seed >> 16) / range;\n}\n\ndouble PseudoRandom::getNextBetween(double min, double max)\n{\n    return min + getNext() * (max - min);\n}\n\n     \n}\n\n"
  },
  {
    "path": "cola/libcola/pseudorandom.h",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libcola - A library providing force-directed network layout using the \n *           stress-majorization method subject to separation constraints.\n *\n * Copyright (C) 2015  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n * Author(s):  Tim Dwyer\n*/\n\n#ifndef COLA_PSEUDORANDOM_H\n#define COLA_PSEUDORANDOM_H\n\nnamespace cola {\n\nclass PseudoRandom \n{\npublic:\n    PseudoRandom(double s = 1);\n\n    double getNext(void);\n    double getNextBetween(double min, double max);\n\nprivate:\n    int a;\n    int c;\n    unsigned int m;\n    double range;\n    unsigned int seed;\n};\n     \n}\n#endif // COLA_PSEUDORANDOM_H\n"
  },
  {
    "path": "cola/libcola/shapepair.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libcola - A library providing force-directed network layout using the \n *           stress-majorization method subject to separation constraints.\n *\n * Copyright (C) 2014  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  \n *\n * Author(s):  Michael Wybrow\n *\n*/\n\n#include \"libvpsc/assertions.h\"\n\n#include \"libcola/shapepair.h\"\n\nnamespace cola {\n\nShapePair::ShapePair(unsigned ind1, unsigned ind2) \n{\n    COLA_ASSERT(ind1 != ind2);\n    // Assign the lesser value to m_index1.\n    m_index1 = (ind1 < ind2) ? ind1 : ind2;\n    // Assign the greater value to m_index2.\n    m_index2 = (ind1 > ind2) ? ind1 : ind2;\n}\n\nbool ShapePair::operator<(const ShapePair& rhs) const\n{\n    if (m_index1 != rhs.m_index1)\n    {\n        return m_index1 < rhs.m_index1;\n    }\n    return m_index2 < rhs.m_index2;\n}\n\n};\n"
  },
  {
    "path": "cola/libcola/shapepair.h",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libcola - A library providing force-directed network layout using the \n *           stress-majorization method subject to separation constraints.\n *\n * Copyright (C) 2014  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n * Author(s):  Michael Wybrow\n *\n*/\n\n#ifndef COLA_SHAPEPAIR_H\n#define COLA_SHAPEPAIR_H\n\nnamespace cola {\n\n// A pair of indexes.  \n// Specified unordered but stored ordered so it can be compared and \n// stored in a set.\n//\nclass ShapePair\n{\n    public:\n        ShapePair(unsigned ind1, unsigned ind2);\n        bool operator<(const ShapePair& rhs) const;\n        unsigned short index1(void) const {return m_index1;}\n        unsigned short index2(void) const {return m_index2;}\n\n    private:\n        unsigned short m_index1;\n        unsigned short m_index2;\n};\n\n\n}\n\n#endif\n\n"
  },
  {
    "path": "cola/libcola/shortest_paths.h",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libcola - A library providing force-directed network layout using the \n *           stress-majorization method subject to separation constraints.\n *\n * Copyright (C) 2006-2014  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n * Author(s):  Tim Dwyer\n*/\n\n#ifndef SHORTEST_PATHS_H\n#define SHORTEST_PATHS_H\n\n#include <vector>\n#include <valarray>\n#include <cfloat>\n#include <cassert>\n#include <algorithm>\n#include <iostream>\n#include <limits>\n\n#include \"libcola/commondefs.h\"\n#include <libvpsc/pairing_heap.h>\n#include <libvpsc/assertions.h>\n\ntemplate <class T>\nstruct PairNode;\n\nnamespace shortest_paths {\n\ntemplate <typename T>\nstruct Node {\n    unsigned id;\n    T d;\n    Node* p; // predecessor    \n    std::vector<Node<T>*> neighbours;\n    std::vector<T> nweights;\n    PairNode<Node<T>*>* qnode;\n};\ntemplate <typename T>\nstruct CompareNodes {\n    bool operator() (Node<T> *const &u, Node<T> *const &v) const {\n        if(u==v) return false; // with g++ 4.1.2 unless I have this explicit check\n                               // it returns true for this case when using -O3 optimization\n                               // CRAZY!\n        if(u->d < v->d) {\n            return true;\n        } \n        return false;\n    }\n};\n\ntypedef std::pair<unsigned,unsigned> Edge;\ntemplate <typename T>\n/**\n * returns the adjacency matrix, 0 entries for non-adjacent nodes\n * @param n total number of nodes\n * @param D n*n matrix of shortest paths\n * @param es edge pairs\n * @param eweights edge weights, if empty then all weights will be taken as 1\n */\nvoid neighbours(unsigned const n, T** D, std::vector<Edge> const & es,\n        std::valarray<T> const & eweights = std::valarray<T>()); \n/**\n * find all pairs shortest paths, n^3 dynamic programming approach\n * @param n total number of nodes\n * @param D n*n matrix of shortest paths\n * @param es edge pairs\n * @param eweights edge weights, if empty then all weights will be taken as 1\n */\ntemplate <typename T>\nvoid floyd_warshall(unsigned const n, T** D, std::vector<Edge> const & es,\n        std::valarray<T> const & eweights = std::valarray<T>()); \n\n/**\n * find all pairs shortest paths, faster, uses dijkstra\n * @param n total number of nodes\n * @param D n*n matrix of shortest paths\n * @param es edge pairs\n * @param eweights edge weights, if empty then all weights will be taken as 1\n */\ntemplate <typename T>\nvoid johnsons(unsigned const n, T** D, std::vector<Edge> const & es,\n        std::valarray<T> const & eweights = std::valarray<T>());\n/**\n * find shortest path lengths from node s to all other nodes\n * @param s starting node\n * @param n total number of nodes\n * @param d n vector of path lengths\n * @param es edge pairs\n * @param eweights edge weights, if empty then all weights will be taken as 1\n */\ntemplate <typename T>\nvoid dijkstra(unsigned const s, unsigned const n, T* d, \n        std::vector<Edge> const & es, \n        std::valarray<T> const & eweights = std::valarray<T>());\n\n\n//-----------------------------------------------------------------------------\n// Implementation:\n\n// O(n^3) time dynamic programming approach.  Slow, but fool proof.  \n// Use for testing.\ntemplate <typename T>\nvoid floyd_warshall(\n        unsigned const n,\n        T** D, \n        std::vector<Edge> const & es,\n        std::valarray<T> const & eweights) \n{\n    COLA_ASSERT((eweights.size() == 0) || (eweights.size() == es.size()));\n    for(unsigned i=0;i<n;i++) {\n        for(unsigned j=0;j<n;j++) {\n            if(i==j) D[i][j]=0;\n            else D[i][j]=std::numeric_limits<T>::max();\n        }\n    }\n    for(unsigned i=0;i<es.size();i++) {\n        unsigned u=es[i].first, v=es[i].second;\n        COLA_ASSERT(u<n&&v<n);\n        D[u][v] = D[v][u] = (eweights.size() > 0) ? eweights[i] : 1;\n    }\n    for(unsigned k=0; k<n; k++) {\n        for(unsigned i=0; i<n; i++) {\n            for(unsigned j=0; j<n; j++) {\n                D[i][j]=std::min(D[i][j],D[i][k]+D[k][j]);\n            }\n        }\n    }\n}\n// Simply returns the adjacency graph\ntemplate <typename T>\nvoid neighbours(\n        unsigned const n,\n        T** D, \n        std::vector<Edge> const & es,\n        std::valarray<T> const & eweights) \n{\n    COLA_ASSERT((eweights.size() == 0) || (eweights.size() == es.size()));\n    for(unsigned i=0;i<n;i++) {\n        for(unsigned j=0;j<n;j++) {\n            D[i][j]=0;\n        }\n    }\n    for(unsigned i=0;i<es.size();i++) {\n        unsigned u=es[i].first, v=es[i].second;\n        COLA_ASSERT(u<n&&v<n);\n        D[u][v] = D[v][u] = (eweights.size() > 0) ? eweights[i] : 1;\n    }\n}\ntemplate <typename T>\nvoid dijkstra_init(\n        std::vector<Node<T> > & vs, \n        std::vector<Edge> const& es, \n        std::valarray<T> const & eweights) {\n    COLA_ASSERT((eweights.size() == 0) || (eweights.size() == es.size()));\n#ifndef NDEBUG\n    const unsigned n=vs.size();\n#endif\n    for(unsigned i=0;i<es.size();i++) {\n        unsigned u=es[i].first, v=es[i].second;\n        COLA_ASSERT(u<n);\n        COLA_ASSERT(v<n);\n        T w = (eweights.size() > 0) ? eweights[i] : 1;\n        vs[u].neighbours.push_back(&vs[v]);\n        vs[u].nweights.push_back(w);\n        vs[v].neighbours.push_back(&vs[u]);\n        vs[v].nweights.push_back(w);\n    }\n}\ntemplate <typename T>\nvoid dijkstra(\n        unsigned const s,\n        std::vector<Node<T> > & vs,\n        T* d)\n{\n    const unsigned n=vs.size();\n    COLA_ASSERT(s<n);\n    for(unsigned i=0;i<n;i++) {\n        vs[i].id=i;\n        vs[i].d=std::numeric_limits<T>::max();\n        vs[i].p=nullptr;\n    }\n    vs[s].d=0;\n    PairingHeap<Node<T>*,CompareNodes<T> > Q;\n    for(unsigned i=0;i<n;i++) {\n        vs[i].qnode = Q.insert(&vs[i]);\n    }\n    while(!Q.isEmpty()) {\n        Node<T> *u=Q.extractMin();\n        d[u->id]=u->d;\n        for(unsigned i=0;i<u->neighbours.size();i++) {\n            Node<T> *v=u->neighbours[i];\n            T w=u->nweights[i];\n            if(u->d!=std::numeric_limits<T>::max()\n               && v->d > u->d+w) {\n                v->p=u;\n                v->d=u->d+w;\n                Q.decreaseKey(v->qnode,v);\n            }\n        }\n    }\n}\ntemplate <typename T>\nvoid dijkstra(\n        unsigned const s,\n        unsigned const n,\n        T* d,\n        std::vector<Edge> const & es,\n        std::valarray<T> const & eweights)\n{\n    COLA_ASSERT((eweights.size() == 0) || (eweights.size() == es.size()));\n    COLA_ASSERT(s<n);\n    std::vector<Node<T> > vs(n);\n    dijkstra_init(vs,es,eweights);\n    dijkstra(s,vs,d);\n}\n\ntemplate <typename T>\nvoid johnsons(\n        unsigned const n,\n        T** D, \n        std::vector<Edge> const & es,\n        std::valarray<T> const & eweights) \n{\n    std::vector<Node<T> > vs(n);\n    dijkstra_init(vs,es,eweights);\n    for(unsigned k=0;k<n;k++) {\n        dijkstra(k,vs,D[k]);\n    }\n}\n\n} //namespace shortest_paths\n#endif //SHORTEST_PATHS_H\n"
  },
  {
    "path": "cola/libcola/sparse_matrix.h",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libcola - A library providing force-directed network layout using the \n *           stress-majorization method subject to separation constraints.\n *\n * Copyright (C) 2006-2008  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n * Author(s):  Tim Dwyer\n*/\n\n/*\n * Yale Sparse Matrix implementation (from Wikipedia definition).\n * It stores an initial sparse n×n matrix M in row form using three arrays, A,\n * IA, JA. NZ denotes the number of nonzero entries in matrix M. The array A\n * then is of length NZ and holds all nonzero entries of M. The array IA stores\n * at IA(i) the position of the first element of row i in the sparse array A.\n * The length of row i is determined by IA(i+1) - IA(i). Therefore IA needs to\n * be of length N + 1. In array JA, the column index of the element A(j) is\n * stored. JA is of length NZ.\n */\n#ifndef _SPARSE_MATRIX_H\n#define _SPARSE_MATRIX_H\n\n#include <valarray>\n#include <map>\n#include <cstdio>\n\n#include \"libvpsc/assertions.h\"\n\nnamespace cola {\nstruct SparseMap {\n    SparseMap(unsigned n = 0) : n(n) {};\n    unsigned n;\n    typedef std::pair<unsigned, unsigned> SparseIndex;\n    typedef std::map<SparseIndex,double> SparseLookup;\n    typedef SparseLookup::const_iterator ConstIt;\n    SparseLookup lookup;\n    double& operator[](const SparseIndex& k) {\n        return lookup[k];\n    }\n    double& operator()(const unsigned i, const unsigned j) {\n        return lookup[std::make_pair(i,j)]; \n    }\n    double getIJ(const unsigned i, const unsigned j) const {\n        COLA_ASSERT(i<n);\n        COLA_ASSERT(j<n);\n        ConstIt v=lookup.find(std::make_pair(i,j));\n        if(v!=lookup.end()) {\n            return v->second;\n        }\n        return 0;\n    }\n    size_t nonZeroCount() const {\n        return lookup.size();\n    }\n    void resize(unsigned n) {\n        this->n = n;\n    }\n    void clear() {\n        lookup.clear();\n    }\n};\n/*\n * Yale Sparse Matrix implementation (from Wikipedia definition).\n * It stores an initial sparse n×n matrix M in row form using three arrays, A,\n * IA, JA. NZ denotes the number of nonzero entries in matrix M. The array A\n * then is of length NZ and holds all nonzero entries of M. The array IA stores\n * at IA(i) the position of the first element of row i in the sparse array A.\n * The length of row i is determined by IA(i+1) - IA(i). Therefore IA needs to\n * be of length N + 1. In array JA, the column index of the element A(j) is\n * stored. JA is of length NZ.\n */\nclass SparseMatrix {\npublic:\n    SparseMatrix(SparseMap const & m)\n            : n(m.n), NZ((unsigned)m.nonZeroCount()), sparseMap(m), \n              A(std::valarray<double>(NZ)), IA(std::valarray<unsigned>(n+1)), JA(std::valarray<unsigned>(NZ)) {\n        unsigned cnt=0;\n        int lastrow=-1;\n        for(SparseMap::ConstIt i=m.lookup.begin(); i!=m.lookup.end(); i++) {\n            SparseMap::SparseIndex p = i->first;\n            COLA_ASSERT(p.first<n);\n            COLA_ASSERT(p.second<n);\n            A[cnt]=i->second;\n            if((int)p.first!=lastrow) {\n                for(unsigned r=lastrow+1;r<=p.first;r++) {\n                    IA[r]=cnt;\n                }\n                lastrow=p.first;\n            }\n            JA[cnt]=p.second;\n            cnt++;\n        }\n        for(unsigned r=lastrow+1;r<=n;r++) {\n            IA[r]=NZ;\n        }\n    }\n    void rightMultiply(std::valarray<double> const & v, std::valarray<double> & r) const {\n        COLA_ASSERT(v.size()>=n);\n        COLA_ASSERT(r.size()>=n);\n        for(unsigned i=0;i<n;i++) {\n            r[i]=0;\n            for(unsigned j=IA[i];j<IA[i+1];j++) {\n                r[i]+=A[j]*v[JA[j]];\n            }\n        }\n    }\n    double getIJ(const unsigned i, const unsigned j) const {\n        return sparseMap.getIJ(i,j);\n    }\n    void print() const {\n        for(unsigned i=0;i<n;i++) {\n            for(unsigned j=0;j<n;j++) {\n                printf(\"%f \",getIJ(i,j));\n            }\n            printf(\"\\n\");\n        }\n    }\n    unsigned rowSize() const {\n        return n;\n    }\nprivate:\n    const unsigned n,NZ;\n    SparseMap const & sparseMap;\n    std::valarray<double> A;\n    std::valarray<unsigned> IA, JA;\n};\n} //namespace cola\n#endif /* _SPARSE_MATRIX_H */\n"
  },
  {
    "path": "cola/libcola/straightener.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libcola - A library providing force-directed network layout using the \n *           stress-majorization method subject to separation constraints.\n *\n * Copyright (C) 2005-2008  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n * Author(s):  Tim Dwyer\n *\n*/\n\n/*\n * Functions to automatically generate constraints for the\n * rectangular node overlap removal problem.\n */\n\n#include <set>\n#include <list>\n#include <cassert>\n#include <iostream>\n#include <cmath>\n\n#include \"libvpsc/assertions.h\"\n#include \"libcola/commondefs.h\"\n#include \"libcola/cola.h\"\n#include \"libcola/compound_constraints.h\"\n#include \"libcola/straightener.h\"\n\n//#define STRAIGHTENER_DEBUG 1\n\nusing std::list;\nusing std::make_pair;\nusing std::pair;\nusing std::set;\nusing std::vector;\nusing std::copy;\n\nnamespace straightener {\n\n    // is point p on line a-b?\n    static bool pointOnLine(double px,double py, double ax, double ay, double bx, double by, double& tx) {\n        double dx=bx-ax;\n        double dy=by-ay;\n        double ty=0;\n        if(fabs(dx)<0.0001&&fabs(dy)<0.0001) {\n            // runty line!\n            tx=px-ax;\n            ty=py-ay;\n        } else {\n            if(fabs(dx)<0.0001) {\n                //vertical line\n                if(fabs(px-ax)<0.01) {\n                   tx=(py-ay)/dy;\n                } \n            } else {\n                tx=(px-ax)/dx;\n            } \n            if(fabs(dy)<0.0001) {\n                //horizontal line\n                if(fabs(py-ay)<0.01) {\n                   ty=tx;\n                } \n            } else {\n                ty=(py-ay)/dy;\n            }\n        }\n        //printf(\"      tx=%f,ty=%f\\n\",tx,ty);\n        if(fabs(tx-ty)<0.001 && tx>=0 && tx<=1) {\n            return true;\n        }\n        return false;\n    }\n    void Route::rerouteAround(vpsc::Rectangle* rect) {\n        // the first and last points should not be inside this\n        // rectangle - note that we should not be routing around\n        // rectangles directly connected to this route\n        COLA_ASSERT(!rect->inside(xs[0],ys[0]));\n        COLA_ASSERT(!rect->inside(xs[n-1],ys[n-1]));\n        // first, we examine each point and if it is inside the rectangle, we\n        // project to the nearest edge of the rectangle\n        for(unsigned i=1;i<n-1;i++) {\n            double &x=xs[i], &y=ys[i];\n            if(rect->inside(x,y)) {\n                enum ProjectSide {LEFT, BOTTOM, RIGHT, TOP};\n                unsigned projectSide = LEFT;\n                double minDist = x - rect->getMinX();\n                double dist = y - rect->getMinY();\n                if(dist<minDist) {\n                    projectSide = BOTTOM;\n                    minDist = dist;\n                }\n                dist = rect->getMaxX() - x;\n                if(dist<minDist) {\n                    projectSide = RIGHT;\n                    minDist = dist;\n                }\n                dist = rect->getMaxY() - y;\n                if(dist<minDist) {\n                    projectSide = TOP;\n                    minDist = dist;\n                }\n                switch(projectSide) {\n                    case LEFT:\n                        x=rect->getMinX();\n                        break;\n                    case BOTTOM:\n                        y=rect->getMinY();\n                        break;\n                    case RIGHT:\n                        x=rect->getMaxX();\n                        break;\n                    case TOP:\n                        y=rect->getMaxY();\n                        break;\n                }\n\n            }\n        }\n        // the new route is copied into rxs, rys.\n        vector<double> rxs, rys;\n        double prevX=xs[0], prevY=ys[0];\n        rxs.push_back(prevX);\n        rys.push_back(prevY);\n    \n        // check each segment in turn to see if it intersects\n        // with the rectangle.\n        // If an intersecting segment is found:\n        //   1) the segment passes right through the rectangle\n        //      - we insert new segments routed around the rectangle\n        //   2) the segment terminates inside the rectangle\n        //      - we follow connected segments until we find the exit\n        //        point, then we insert a route around the rectangle\n        //   3) the segment just touches one side\n        //\n        for(unsigned i=1;i<n;i++) {\n            // we have projected all points to the boundary already so we shouldn't find any inside\n            COLA_ASSERT(!rect->inside(xs[i],ys[i]));\n            vpsc::RectangleIntersections ri;\n            rect->lineIntersections(prevX,prevY,\n                    xs[i],ys[i],ri);\n            if(ri.intersects) {\n                int count=ri.countIntersections();\n                COLA_ASSERT(count>0); // can't be 0 because we have detected an intersection\n                COLA_ASSERT(count<4); // assumes no zero width or height rects which would be\n                                 // the only way for a line segment to touch all 4 sides at once\n                if(count==3) { // runs along one side\n                    COLA_ASSERT(!rect->inside(xs[i],ys[i]));\n                } else if(count==2) { // passes right through\n                    COLA_ASSERT(!rect->inside(xs[i],ys[i]));\n                    double x1=0, y1=0, x2=0, y2=0;\n                    ri.nearest(prevX, prevY, x1, y1);\n                    ri.nearest(xs[i], ys[i], x2, y2);\n                    rect->routeAround(x1, y1, x2, y2, rxs, rys); \n                } else if(count==1) { \n                    // single intersection, earlier projection step ensures it is on the\n                    // perimeter, so nothing to do\n                }\n            }\n            prevX=xs[i];\n            prevY=ys[i];\n            COLA_ASSERT(!rect->inside(prevX,prevY));\n            rxs.push_back(prevX);\n            rys.push_back(prevY);\n        }\n        delete [] xs;\n        delete [] ys;\n        n=rxs.size();\n        COLA_ASSERT(rys.size()==n);\n        xs = new double[n];\n        ys = new double[n];\n        copy(rxs.begin(),rxs.end(),xs);\n        copy(rys.begin(),rys.end(),ys);\n    }\n    /**\n     * sets up the path information for an edge,\n     * i.e. nodes are added to the path list in the order they appear on the\n     * edge, from startNode to endNode.\n     * activePath contains at least the first and last node in the edge.\n     * If allActive is true then\n     * activePath list is also set up with a subset of nodes from path, each of\n     * which is active (a start/end node or involved in a violated constraint).\n     */\n    void Edge::nodePath(vector<Node*>& nodes, bool allActive = true) {\n        list<unsigned> ds(dummyNodes.size());\n        copy(dummyNodes.begin(),dummyNodes.end(),ds.begin());\n        //printf(\"Edge::nodePath: (%d,%d) dummyNodes:%d\\n\",startNode,endNode,ds.size());\n        path.clear();\n        activePath.clear();\n        path.push_back(startNode);\n        activePath.push_back(0);\n        for(unsigned i=1;i<route->n;i++) {\n            //printf(\"  checking segment %d-%d\\n\",i-1,i);\n            set<pair<double,unsigned> > pntsOnLineSegment;\n            for(list<unsigned>::iterator j=ds.begin();j!=ds.end();) {\n                double px=nodes[*j]->pos[0];\n                double py=nodes[*j]->pos[1];\n                double ax=route->xs[i-1];\n                double ay=route->ys[i-1];\n                double bx=route->xs[i];\n                double by=route->ys[i];\n                double t=0;\n                list<unsigned>::iterator copyit=j++;\n                //printf(\"     px=%f, py=%f, ax=%f, ay=%f, bx=%f, by=%f\\n\",px,py,ax,ay,bx,by);\n                if(pointOnLine(px,py,ax,ay,bx,by,t)) {\n                    //printf(\" got node %d\\n\",*copyit);\n                    pntsOnLineSegment.insert(make_pair(t,*copyit));\n                    ds.erase(copyit);\n                }\n            }\n            for(set<pair<double,unsigned> >::iterator j=pntsOnLineSegment.begin();j!=pntsOnLineSegment.end();j++) {\n                if(allActive && nodes[j->second]->active) {\n                    activePath.push_back(path.size());\n                }\n                path.push_back(j->second);\n            }\n            //printf(\"\\n\");\n        }\n        activePath.push_back(path.size());\n        path.push_back(endNode);\n        COLA_ASSERT(ds.empty());\n    }\n    void Edge::createRouteFromPath(std::vector<Node *> const & nodes) {\n        Route* r=new Route(path.size());\n#ifdef STRAIGHTENER_DEBUG\n        //printf(\"Route:\");\n#endif\n        for(unsigned i=0;i<path.size();i++) {\n            r->xs[i]=nodes[path[i]]->pos[0];\n            r->ys[i]=nodes[path[i]]->pos[1];\n#ifdef STRAIGHTENER_DEBUG\n            //printf(\"(%f,%f)\",r->xs[i],r->ys[i]);\n#endif\n        }\n#ifdef STRAIGHTENER_DEBUG\n        //printf(\"\\n\");\n#endif\n        setRoute(r);\n    }\n\n    typedef enum {Open, Close} EventType;\n    struct Event {\n        EventType type;\n        Node *v;\n        Edge *e;\n        double pos;\n        Event(EventType t, Node *v, double p) : type(t),v(v),e(nullptr),pos(p) {};\n        Event(EventType t, Edge *e, double p) : type(t),v(nullptr),e(e),pos(p) {};\n    };\n    /*\n     * the following relation defines a strict weak ordering over events, i.e.:\n     *   irreflexivity: CompareEvents(e,e) == false\n     *   antisymetry:   CompareEvents(a,b) => !CompareEvents(b,a)\n     *   transitivity:  CompareEvents(a,b) && CompareEvents(b,c) => CompareEvents(a,c)\n     *   transitivity of equivalence:\n     *                  !CompareEvents(a,b) && !CompareEvents(b,a) && !CompareEvents(b,c) && !CompareEvents(c,b)\n     *               => !CompareEvents(a,c) && !CompareEvents(c,a)\n     */\n    struct CompareEvents {\n        bool operator() (Event *const &a, Event *const &b) const {\n            if(a->pos < b->pos) {\n                return true;\n            } else if(a->pos==b->pos) {\n                // All opens should come before closes when at the same position\n                if(a->type==Open && b->type==Close) return true;\n                if(a->type==Close && b->type==Open) return false;\n                // Edge opens at the same position as node opens, edge comes first\n                if(a->type==Open && b->type==Open) {\n                    if(a->e && b->v) return true;\n                    if(b->e && a->v) return false;\n                }\n                // Edge closes at the same position as node closes, node comes first\n                if(a->type==Close && b->type==Close) {\n                    if(a->e && b->v) return false;\n                    if(b->e && a->v) return true;\n                }\n            }\n            return false;\n        }\n    };\n\n    /**\n     * Search along scan line at conjpos for open edges to the left of v\n     * as far as l, and to the right of v as far as r.\n     * The result is a list of nodes L (including l,v,r and a bunch of\n     * new dummy nodes for each edge intersected - excluding edges\n     * connected to v).\n     * The new dummy nodes are also added to the end of the canonical\n     * node list: nodes.\n     */\n    void sortNeighbours(const vpsc::Dim dim, Node * v, Node * l, Node * r, \n            const double conjpos, vector<Edge*> const & openEdges, \n            vector<Node *>& L,vector<Node *>& nodes) {\n        double minpos=-DBL_MAX, maxpos=DBL_MAX;\n        if(l!=nullptr) {\n            L.push_back(l);\n            minpos=l->scanpos;\n        }\n        typedef pair<double,Edge*> PosEdgePair;\n        set<PosEdgePair> sortedEdges;\n        for(unsigned i=0;i<openEdges.size();i++) {\n            Edge *e=openEdges[i];\n            vector<double> bs;\n            if(dim==vpsc::HORIZONTAL) {\n                e->xpos(conjpos,bs);\n            } else {\n                e->ypos(conjpos,bs);\n            }\n            //std::cerr << \"edge(intersections=\"<<bs.size()<<\":(\"<<e->startNode<<\",\"<<e->endNode<<\"))\"<<std::endl;\n            for(vector<double>::iterator it=bs.begin();it!=bs.end();it++) {\n                sortedEdges.insert(make_pair(*it,e));\n            }\n        }\n        for(set<PosEdgePair>::iterator i=sortedEdges.begin();i!=sortedEdges.end();i++) {\n            double pos=i->first;\n            if(pos < minpos) continue;\n            if(pos > v->scanpos) break;\n            // if edge is connected (start or end) to v then skip\n            // need to record start and end positions of edge segment!\n            Edge* e=i->second; \n            if(e->startNode==v->id||e->endNode==v->id) continue;\n            //if(l!=nullptr&&(e->startNode==l->id||e->endNode==l->id)) continue;\n            //cerr << \"edge(\"<<e->startNode<<\",\"<<e->endNode<<\",pts=\"<<e->pts<<\")\"<<endl;\n            // here, we probably want to search for existing dummy \n            // nodes associated with the same edge within some\n            // range of (pos,conjpos), rather than creating new ones.\n            // Would require some sort of quad-tree structure\n            Node* d=dim==vpsc::HORIZONTAL?\n                new Node(nodes.size(),pos,conjpos,e):\n                new Node(nodes.size(),conjpos,pos,e);\n            L.push_back(d);\n            nodes.push_back(d);\n        }\n        L.push_back(v);\n\n        if(r!=nullptr) {\n            maxpos=r->scanpos;\n        }\n        for(set<PosEdgePair>::iterator i=sortedEdges.begin();i!=sortedEdges.end();i++) {\n            if(i->first < v->scanpos) continue;\n            if(i->first > maxpos) break;\n            double pos=i->first;\n            // if edge is connected (start or end) to v then skip\n            // need to record start and end positions of edge segment!\n            Edge* e=i->second; \n            if(e->startNode==v->id||e->endNode==v->id) continue;\n            //if(r!=nullptr&&(e->startNode==r->id||e->endNode==r->id)) continue;\n            //cerr << \"edge(\"<<e->startNode<<\",\"<<e->endNode<<\",pts=\"<<e->pts<<\")\"<<endl;\n            Node* d=dim==vpsc::HORIZONTAL?\n                new Node(nodes.size(),pos,conjpos,e):\n                new Node(nodes.size(),conjpos,pos,e);\n            L.push_back(d);\n            nodes.push_back(d);\n        }\n        if(r!=nullptr) {\n            L.push_back(r);\n        }\n    }\n    static double overlap(vpsc::Dim k, Node const *u, Node const *v) {\n        if (u->pos[k] <= v->pos[k] && v->getMin(k) < u->getMax(k))\n            return u->getMax(k) - v->getMin(k);\n        if (v->pos[k] <= u->pos[k] && u->getMin(k) < v->getMax(k))\n            return v->getMax(k) - u->getMin(k);\n        return 0;\n    }\n\n    static cola::SeparationConstraint* createConstraint(\n            Node* u, Node* v, vpsc::Dim dim) {\n        double g=u->length[dim]+v->length[dim];\n        g/=2;\n        double sep=v->pos[dim]-u->pos[dim];\n        if(sep < g) {\n            u->active = true;\n            v->active = true;\n        }\n        //cerr << \"Constraint: \"<< u->id << \"+\"<<g<<\"<=\"<<v->id<<endl;\n        return new cola::SeparationConstraint(dim, u->id, v->id, g);\n    }\n\n    template <typename T>\n    Event* createEvent(\n            const vpsc::Dim dim, \n            const EventType type,\n            T *v,\n            double border) {\n        double pos = (type==Open) ? v->getMin((vpsc::Dim)!dim)-border \n                                  : v->getMax((vpsc::Dim)!dim)+border ;\n        return new Event(type,v,pos);\n    }\n    /**\n     * Generates constraints to prevent node/edge and edge/edge intersections.\n     * Can be invoked to generate either horizontal or vertical constraints\n     * depending on dim parameter.\n     * For horizontal constraints, a vertical scan (from top to bottom) is\n     * conducted, looking for node/edge boundaries, and then searching along\n     * the horizontal limit of that boundary for intersections with other\n     * nodes/edges.\n     */\n    void generateConstraints(\n            const vpsc::Dim dim, \n            vector<Node*> & nodes, \n            vector<Edge*> const & edges, \n            vector<cola::SeparationConstraint*>& cs,\n            bool xSkipping = true) {\n        vector<Event*> events;\n        double nodeFudge=-0.01, edgeFudge=0;\n#ifdef STRAIGHTENER_DEBUG\n        cout << (dim==vpsc::HORIZONTAL\n            ?\"scanning top to bottom...\"\n            :\"scanning left to right...\")\n            << endl;\n#endif\n        for(unsigned i=0;i<nodes.size();i++) {\n            Node *v=nodes[i];\n            if(v->scan) {\n                v->scanpos=v->pos[dim];\n                events.push_back(createEvent(dim,Open,v,nodeFudge));\n                events.push_back(createEvent(dim,Close,v,nodeFudge));\n            }\n        }\n        for(unsigned i=0;i<edges.size();i++) {\n            Edge *e=edges[i];\n            events.push_back(createEvent(dim,Open,e,edgeFudge));\n            events.push_back(createEvent(dim,Close,e,edgeFudge));\n        }\n        std::sort(events.begin(),events.end(),CompareEvents());\n\n        NodeSet openNodes;\n        vector<Edge*> openEdges;\n        // scan opening and closing events in order\n        for(unsigned i=0;i<events.size();i++) {\n            Event *e=events[i];\n            Node *v=e->v;\n            if(v!=nullptr) {\n                v->open = true;\n#ifdef STRAIGHTENER_DEBUG\n                printf(\"NEvent@%f,nid=%d,(%f,%f),w=%f,h=%f,openn=%d,opene=%d\\n\",e->pos,v->id,v->pos[0],v->pos[1],v->length[0],v->length[1],(int)openNodes.size(),(int)openEdges.size());\n#endif\n                Node *l=nullptr, *r=nullptr;\n                if(!openNodes.empty()) {\n                    // it points to the first node to the right of v\n                    NodeSet::iterator it=openNodes.lower_bound(v);\n                    // step left to find the first node to the left of v\n                    while(it--!=openNodes.begin()) {\n                        if(!xSkipping\n                                || dim!=vpsc::HORIZONTAL\n                                || overlap(vpsc::HORIZONTAL,*it,v) <= 0\n                                || overlap(vpsc::HORIZONTAL,*it,v) <= overlap(vpsc::VERTICAL,*it,v)) {\n                            l=*it;\n                            break;\n                        }\n#ifdef STRAIGHTENER_DEBUG\n                        printf(\"l=%d\\n\",l->id);\n#endif\n                    }\n                    it=openNodes.upper_bound(v);\n                    while(it!=openNodes.end()) {\n                        if(!xSkipping\n                                || dim!=vpsc::HORIZONTAL\n                                || overlap(vpsc::HORIZONTAL,v,*it) <= 0\n                                || overlap(vpsc::HORIZONTAL,v,*it) <= overlap(vpsc::VERTICAL,v,*it)) {\n                            r=*it;\n                            break;\n                        }\n                        it++;\n                    }\n                }\n                vector<Node*> L;\n                sortNeighbours(dim,v,l,r,e->pos,openEdges,L,nodes);\n#ifdef STRAIGHTENER_DEBUG\n                printf(\"L=[\");\n                for(unsigned i=0;i<L.size();i++) {\n                    printf(\"%d \",L[i]->id);\n                }\n                printf(\"]\\n\");\n#endif\n                // for each dummy node w in L:\n                //   if w left of v create constraints l<w, w<v    \n                //   if w right of v create constraints v<w, w<r\n                for(vector<Node*>::iterator i=L.begin();i!=L.end();i++) {\n                    Node* w=*i;\n                    if(w->dummy) {\n                        // node is on an edge\n                        Edge *edge=w->edge;\n                        if(w->pos[dim]<v->pos[dim]) { // w left of v\n                            if(l!=nullptr&&!edge->isEnd(l->id)) {\n                                cs.push_back(createConstraint(l,w,dim));\n                            }\n                            if(!edge->isEnd(v->id)) {\n                                cs.push_back(createConstraint(w,v,dim));\n                            }\n                        } else { // w right of v\n                            if(!edge->isEnd(v->id)) {\n                                cs.push_back(createConstraint(v,w,dim));\n                            }\n                            if(r!=nullptr&&!edge->isEnd(r->id)) {\n                                cs.push_back(createConstraint(w,r,dim));\n                            }\n                        }\n                    }\n                }\n                if(e->type==Close) {\n                    if(l!=nullptr) cs.push_back(createConstraint(l,v,dim));\n                    if(r!=nullptr) cs.push_back(createConstraint(v,r,dim));\n                }\n            }\n            if(e->type==Open) {\n                if(v!=nullptr) {\n                    openNodes.insert(v);\n                } else {\n#ifdef STRAIGHTENER_DEBUG\n                    printf(\"EdgeOpen@%f,eid=%d,(u,v)=(%d,%d)\\n\", e->pos,e->e->id,e->e->startNode,e->e->endNode);\n#endif\n                    e->e->openInd=openEdges.size();\n                    openEdges.push_back(e->e);\n                }\n            } else {\n                // Close\n                if(v!=nullptr) {\n                    openNodes.erase(v);\n                    v->open=false;\n                } else {\n#ifdef STRAIGHTENER_DEBUG\n                    printf(\"EdgeClose@%f,eid=%d,(u,v)=(%d,%d)\\n\", e->pos,e->e->id,e->e->startNode,e->e->endNode);\n#endif                    \n                    unsigned i=e->e->openInd;\n                    COLA_ASSERT(openEdges.size()>0);\n                    openEdges[i]=openEdges[openEdges.size()-1];\n                    openEdges[i]->openInd=i;\n                    openEdges.resize(openEdges.size()-1);\n                }\n            }\n            delete e;\n        }\n    }\n    /**\n     * set up straightener clusters.\n     * For each cola::cluster c:\n     *   create a straightener::cluster sc\n     *   set each node in c to belong to sc\n     *   set scanpos based on avg pos in scan dir\n     *   create a chain of dummy nodes for cluster boundary\n     */\n    void generateClusterBoundaries(\n            const vpsc::Dim dim,\n            vector<straightener::Node*> & nodes,\n            vector<straightener::Edge*> & edges,\n            vector<vpsc::Rectangle*> const & rs,\n            cola::Cluster const & clusterHierarchy,\n            vector<straightener::Cluster*>& sclusters) {\n        sclusters.clear();\n        for(vector<cola::Cluster*>::const_iterator i\n                =clusterHierarchy.clusters.begin();\n                i!=clusterHierarchy.clusters.end(); i++) {\n            if(cola::ConvexCluster* c=dynamic_cast<cola::ConvexCluster*>(*i)) {\n                straightener::Cluster* sc=new straightener::Cluster(c);\n                // compute scanpos based on average position in scan direction\n                sc->scanpos=0;\n                for(set<unsigned>::iterator it= c->nodes.begin();\n                        it != c->nodes.end(); ++it) {\n                    straightener::Node* u = nodes[*it];\n                    sc->scanpos+=u->pos[dim];\n                    u->cluster = sc;\n                }\n                sc->scanpos/=c->nodes.size();\n                sclusters.push_back(sc);\n                c->computeBoundary(rs);\n                // create a chain of dummy nodes for the boundary\n                Node* first = new Node(nodes.size(),c->hullX[0],c->hullY[0]);\n                nodes.push_back(first);\n                Node* u = first;\n                unsigned i=1;\n                for(;i<c->hullX.size();i++) {\n                    Node* v = new Node(nodes.size(),c->hullX[i],c->hullY[i]);\n                    nodes.push_back(v);\n                    Edge* e = new Edge(edges.size(),u->id,v->id,\n                                c->hullX[i-1],c->hullY[i-1],c->hullX[i],c->hullY[i]);\n                    edges.push_back(e);\n                    sc->boundary.push_back(e);\n                    u=v;\n                }\n                edges.push_back(\n                        new Edge(edges.size(),u->id,first->id,\n                            c->hullX[i-1],c->hullY[i-1],c->hullX[0],c->hullY[0]));\n            }\n        }\n    }\n\n    void Cluster::updateActualBoundary()\n    {\n        unsigned n=0;\n        for(std::vector<Edge*>::const_iterator e=boundary.begin();\n                e!=boundary.end();e++) {\n            n+=(*e)->getRoute()->n;\n        }\n        colaCluster->hullX.resize(n);\n        colaCluster->hullY.resize(n);\n        unsigned i=0;\n        for(std::vector<Edge*>::const_iterator e=boundary.begin();\n                e!=boundary.end();e++) {\n            Route const * r=(*e)->getRoute();\n            for(unsigned j=0;j<r->n;j++) {\n                colaCluster->hullX[i]=r->xs[j];\n                colaCluster->hullY[i++]=r->ys[j];\n            }\n        }\n    }\n    Straightener::Straightener(\n            const double strength,\n            const vpsc::Dim dim,\n            std::vector<vpsc::Rectangle*> const & rs,\n            cola::FixedList const & fixed,\n            std::vector<Edge*> const & edges, \n            vpsc::Variables const & vs,\n            vpsc::Variables & lvs,\n            vpsc::Constraints & lcs,\n            std::valarray<double> &oldCoords,\n            std::valarray<double> &oldG) \n        : strength(strength),\n          dim(dim),\n          fixed(fixed),\n          edges(edges), \n          vs(vs), \n          lvs(lvs) \n    {\n        unsigned n=rs.size();\n        for (unsigned i=0;i<n;i++) {\n            nodes.push_back(new straightener::Node(i,rs[i]));\n        }\n        vector<cola::SeparationConstraint*> cs;\n        straightener::generateConstraints(dim,nodes,edges,cs);\n        // after generateConstraints we have new dummy nodes at the end of snodes and\n        // constraints in cs\n        //   need to create variables for dummy nodes in lvs and constraints in lcs\n        N=nodes.size();\n        g.resize(N);\n        coords.resize(N);\n        for(unsigned i=0;i<n;i++) {\n            g[i]=oldG[i];\n            coords[i]=oldCoords[i];\n        }\n        for (unsigned i=n;i<N;i++) {\n            double desiredPos = nodes[i]->pos[dim];\n            lvs.push_back(new vpsc::Variable(i,desiredPos,1));\n            g[i]=0;\n            coords[i]=desiredPos;\n        }\n        for (vector<cola::SeparationConstraint*>::iterator i=cs.begin();i!=cs.end();i++) {\n            unsigned lv=(*i)->left();\n            unsigned rv=(*i)->right();\n            double gap=(*i)->gap;\n            vpsc::Variable* l = lv<n?vs[lv]:lvs[lv-n];\n            vpsc::Variable* r = rv<n?vs[rv]:lvs[rv-n];\n            lcs.push_back(new vpsc::Constraint(l,r,gap));\n        }\n        for(unsigned i=0;i<edges.size();i++) {\n            edges[i]->nodePath(nodes,false);\n        }\n        for_each(cs.begin(),cs.end(),cola::delete_object());\n    }\n    Straightener::~Straightener() {\n        for_each(nodes.begin(),nodes.end(),cola::delete_object());\n    }\n    void Straightener::computeForces(cola::SparseMap &H) {\n        // hessian matrix:\n        //   diagonal: sum dy2/l^3\n        //   off-diag: -dy2/l^3\n        for(unsigned i=0;i<edges.size();i++) {\n            //printf(\"Straightening path:\\n\");\n            //edges[i]->print();\n            vector<unsigned>& path=edges[i]->path;\n            COLA_ASSERT(path.size()>0);\n            for(unsigned j=1;j<path.size();j++) {\n                unsigned u=path[j-1], v=path[j];\n                double x1=nodes[u]->pos[0], x2=nodes[v]->pos[0],\n                       y1=nodes[u]->pos[1], y2=nodes[v]->pos[1];\n                double dx=x1-x2, dy=y1-y2;\n                double dx2=dx*dx, dy2=dy*dy;\n                double l=sqrt(dx2+dy2);\n                if(l<0.0000001) continue;\n                double f=dim==vpsc::HORIZONTAL?dx:dy;\n                f*=strength/l;\n                if(!fixed.check(u)) { g[u]+=f; }\n                if(!fixed.check(v)) { g[v]-=f; }\n                double h=dim==vpsc::HORIZONTAL?dy2:dx2;\n                h*=strength/(l*l*l);\n                H(u,u)+=h;\n                H(v,v)+=h;\n                H(u,v)-=h;\n                H(v,u)-=h;\n            }\n        }\n    }\n    double Straightener::computeStress(std::valarray<double> const &coords) {\n        double stress=0;\n        for(unsigned i=0;i<edges.size();i++) {\n            vector<unsigned>& path=edges[i]->path;\n            COLA_ASSERT(path.size()>0);\n            for(unsigned j=1;j<path.size();j++) {\n                unsigned u=path[j-1], v=path[j];\n                double x1,x2,y1,y2;\n                if(dim==vpsc::HORIZONTAL) {\n                    x1=coords[u];\n                    x2=coords[v];\n                    y1=nodes[u]->pos[1];\n                    y2=nodes[v]->pos[1];\n                } else {\n                    x1=nodes[u]->pos[0];\n                    x2=nodes[v]->pos[0];\n                    y1=coords[u];\n                    y2=coords[v];\n                }\n                double dx=x1-x2, dy=y1-y2;\n                double dx2=dx*dx, dy2=dy*dy;\n                double l=sqrt(dx2+dy2);\n                stress+=l;\n            }\n        }\n        return strength*stress;\n    }\n    double Straightener::computeStress2(std::valarray<double> const &coords)\n    {\n        COLA_UNUSED(coords);\n\n        double stress=0;\n        for(unsigned i=0;i<edges.size();i++) {\n            double d = edges[i]->idealLength;\n            double weight=1/(d*d);\n            //printf(\"pathLength=%f\\n\",pathLength(edges[i],nodes));\n            double sqrtf=fabs(d-pathLength(edges[i],nodes));\n            stress+=weight*sqrtf*sqrtf;\n        }\n        return strength*stress;\n    }\n    void Straightener::updateNodePositions() {\n        // real nodes\n        for (unsigned i=0;i<N;i++) {\n            Node *n=nodes[i];\n            n->pos[dim]=coords[i];\n        }\n        // dummy bend nodes\n        //printf(\"got %d dummy nodes\\n\", (int) lvs.size());\n        dummyNodesX.resize(lvs.size());\n        dummyNodesY.resize(lvs.size());\n        for (unsigned i=0;i<lvs.size();i++) {\n            COLA_ASSERT(i+vs.size() < nodes.size());\n            Node *n=nodes[i+vs.size()];\n            dummyNodesX[i]=n->pos[0];\n            dummyNodesY[i]=n->pos[1];\n        }\n    }\n    void Straightener::finalizeRoutes() {\n        for(unsigned i=0;i<edges.size();i++) {\n            edges[i]->createRouteFromPath(nodes);\n            edges[i]->dummyNodes.clear();\n            edges[i]->path.clear();\n        }\n    }\n    void setEdgeLengths(double **D, vector<Edge*> & edges) {\n        for(unsigned i=0;i<edges.size();i++) {\n            Edge* e=edges[i];\n            e->idealLength=D[e->startNode][e->endNode];\n        } \n    }\n    double pathLength(Edge const * e, vector<Node*> const & nodes) {\n        double length=0;\n        vector<unsigned> const & path=e->path;\n        for(unsigned i=1;i<path.size();i++) {\n            Node *u=nodes[path[i-1]], *v=nodes[path[i]];\n            double dx=u->pos[0]-v->pos[0];\n            double dy=u->pos[1]-v->pos[1];\n            length+=sqrt(dx*dx+dy*dy);\n        }\n        return length;\n    }\n    double computeStressFromRoutes(double strength, vector<Edge*> & edges) {\n        double stress=0;\n        for(unsigned i=0;i<edges.size();i++) {\n            Edge* e=edges[i];\n            double d = e->idealLength;\n            double weight=1/(d*d);\n            double sqrtf=fabs(d-e->getRoute()->routeLength());\n            stress+=weight*sqrtf*sqrtf;\n        }\n        return strength*stress;\n    }\n}\n\n"
  },
  {
    "path": "cola/libcola/straightener.h",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libcola - A library providing force-directed network layout using the \n *           stress-majorization method subject to separation constraints.\n *\n * Copyright (C) 2006-2008  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n*/\n\n#ifndef STRAIGHTENER_H\n#define STRAIGHTENER_H\n\n#include <set>\n#include <cfloat>\n#include <iostream>\n#include <iterator>\n\n#include \"libvpsc/rectangle.h\"\n#include \"libcola/commondefs.h\"\n\nnamespace cola {\n    class Cluster;\n    class ConvexCluster;\n    class SeparationConstraint;\n}\nnamespace straightener {\n\nstruct Route {\n    Route(unsigned n) : n(n), xs(new double[n]), ys(new double[n]) {}\n    ~Route() {\n        delete [] xs;\n        delete [] ys;\n    }\n    void print() {\n        std::cout << \"double xs[]={\";\n        std::copy(xs,xs+n-1,std::ostream_iterator<double>(std::cout,\",\"));\n        std::cout << xs[n-1] << \"};\" << std::endl << \"double ys[]={\";\n        std::copy(ys,ys+n-1,std::ostream_iterator<double>(std::cout,\",\"));\n        std::cout << ys[n-1] << \"};\" << std::endl;\n    }\n    void boundingBox(double &xmin,double &ymin,double &xmax,double &ymax) {\n        xmin=ymin=DBL_MAX;\n        xmax=ymax=-DBL_MAX;\n        for(unsigned i=0;i<n;i++) {\n            xmin=std::min(xmin,xs[i]);\n            xmax=std::max(xmax,xs[i]);\n            ymin=std::min(ymin,ys[i]);\n            ymax=std::max(ymax,ys[i]);\n        } \n    }\n    double routeLength () const {\n        double length=0;\n        for(unsigned i=1;i<n;i++) {\n            double dx=xs[i-1]-xs[i];\n            double dy=ys[i-1]-ys[i];\n            length+=sqrt(dx*dx+dy*dy);\n        }\n        return length;\n    }\n    void rerouteAround(vpsc::Rectangle *rect);\n    unsigned n;\n    double *xs;\n    double *ys;\n};\nclass Node;\nstruct DebugPoint {\n    double x,y;\n};\nstruct DebugLine {\n    DebugLine(double x0,double y0,double x1,double y1,unsigned colour) \n        : x0(x0),y0(y0),x1(x1),y1(y1),colour(colour) {}\n    double x0,y0,x1,y1;\n    unsigned colour;\n};\nclass ScanObject {\npublic:\n    const unsigned id;\n    double getMin(vpsc::Dim d) const {\n        return min[d];\n    }\n    double getMax(vpsc::Dim d) const {\n        return max[d];\n    }\n    ScanObject(unsigned id) : id(id) {}\nprotected:\n    double min[2], max[2];\n};\nclass Edge : public ScanObject {\npublic:\n    unsigned openInd; // position in openEdges\n    unsigned startNode, endNode;\n    double idealLength;\n    std::vector<unsigned> dummyNodes;\n    std::vector<unsigned> path;\n    std::vector<unsigned> activePath;\n    std::vector<DebugPoint> debugPoints;\n    std::vector<DebugLine> debugLines;\n    void print() {\n        printf(\"Edge[%d]=(%d,%d)\\n\",id,startNode,endNode);\n        route->print();\n    }\n    // if the edge route intersects with any of the rectangles in rects then reroute\n    // those parts of the route around the rectangle boundaries\n    void rerouteAround(std::vector<vpsc::Rectangle*> const &rects) {\n        unsigned rid=0;\n        for(std::vector<vpsc::Rectangle*>::const_iterator r=rects.begin();r!=rects.end();r++,rid++) {\n            if(rid!=startNode && rid!=endNode) {\n                route->rerouteAround(*r);\n            }\n        }\n        updateBoundingBox();\n    }\n    // Edge with a non-trivial route\n    Edge(unsigned id, unsigned start, unsigned end, Route* route)\n    : ScanObject(id), startNode(start), endNode(end), route(route)\n    {\n        updateBoundingBox();\n    }\n    // Edge with a trivial route\n    Edge(unsigned id, unsigned start, unsigned end,\n            double x1, double y1, double x2, double y2) \n    : ScanObject(id), startNode(start), endNode(end) {\n        route = new Route(2);\n        route->xs[0]=x1; route->ys[0]=y1;\n        route->xs[1]=x2; route->ys[1]=y2;\n        updateBoundingBox();\n    }\n    ~Edge() {\n        delete route;\n    }\n    bool isEnd(unsigned n) const {\n        if(startNode==n||endNode==n) return true;\n        return false;\n    }\n    void nodePath(std::vector<Node*>& nodes, bool allActive);\n    void createRouteFromPath(std::vector<Node *> const & nodes);\n    void xpos(double y, std::vector<double>& xs) const {\n        // search line segments for intersection points with y pos\n        for(unsigned i=1;i<route->n;i++) {\n            double ax=route->xs[i-1], bx=route->xs[i], ay=route->ys[i-1], by=route->ys[i];\n            double r=(y-ay)/(by-ay);\n            // as long as y is between ay and by then r>0\n            if(r>=0&&r<=1) {\n                xs.push_back(ax+(bx-ax)*r);\n            }\n        }\n    }\n    void ypos(double x, std::vector<double>& ys) const {\n        // search line segments for intersection points with x pos\n        for(unsigned i=1;i<route->n;i++) {\n            double ax=route->xs[i-1], bx=route->xs[i], ay=route->ys[i-1], by=route->ys[i];\n            double r=(x-ax)/(bx-ax);\n            // as long as y is between ax and bx then r>0\n            if(r>0&&r<=1) {\n                ys.push_back(ay+(by-ay)*r);\n            }\n        }\n    }\n    Route const * getRoute() const {\n        return route;\n    }\n    void setRoute(Route * r) {\n        delete route;\n        route=r;\n        updateBoundingBox();\n    }\nprivate:\n    void updateBoundingBox() {\n        route->boundingBox(min[0],min[1],max[0],max[1]);\n    }\n    Route* route;\n};\nclass Straightener {\npublic:\n    Straightener(\n            const double strength,\n            const vpsc::Dim dim,\n            std::vector<vpsc::Rectangle*> const & rs,\n            cola::FixedList const & fixed,\n            std::vector<Edge*> const & edges, \n            vpsc::Variables const & vs,\n            vpsc::Variables & lvs,\n            vpsc::Constraints & lcs,\n            std::valarray<double> & oldCoords,\n            std::valarray<double> & oldG);\n    ~Straightener();\n    void updateNodePositions();\n    void finalizeRoutes();\n    void computeForces(cola::SparseMap &H);\n    void computeForces2(cola::SparseMap &H);\n    double computeStress(std::valarray<double> const &coords);\n    double computeStress2(std::valarray<double> const &coords);\n    std::valarray<double> dummyNodesX;\n    std::valarray<double> dummyNodesY;\n    std::valarray<double> g;\n    std::valarray<double> coords;\n    unsigned N;\nprivate:\n    double strength;\n    const vpsc::Dim dim;\n    cola::FixedList const & fixed;\n    std::vector<Edge*> const & edges;\n    vpsc::Variables const & vs;\n    vpsc::Variables & lvs;\n    std::vector<Node*> nodes;\n    double len(const unsigned u, const unsigned v, \n            double& dx, double& dy,\n            double& dx2, double& dy2);\n    double gRule1(const unsigned a, const unsigned b);\n    double gRule2(const unsigned a, const unsigned b, const unsigned c);\n    double hRuleD1(const unsigned u, const unsigned v, const double sqrtf);\n    double hRuleD2(const unsigned u, const unsigned v, const unsigned w, const double sqrtf);\n    double hRule2(const unsigned u, const unsigned v, const unsigned w, const double sqrtf);\n    double hRule3(const unsigned u, const unsigned v, const unsigned w, const double sqrtf);\n    double hRule4(const unsigned a, const unsigned b, const unsigned c, const unsigned d);\n    double hRule56(const unsigned u, const unsigned v, \n            const unsigned a, const unsigned b, const unsigned c);\n    double hRule7(const unsigned a, const unsigned b, \n            const unsigned c, const unsigned d, const double sqrtf);\n    double hRule8(const unsigned u, const unsigned v, const unsigned w,\n            const unsigned a, const unsigned b, const unsigned c);\n};\nclass Cluster {\npublic:\n    cola::ConvexCluster* colaCluster;\n    Cluster(cola::ConvexCluster* c) : colaCluster(c) {}\n    double scanpos;\n    std::vector<Edge*> boundary;\n    void updateActualBoundary();\n};\nclass Node : public ScanObject {\npublic:\n    Cluster* cluster;\n    // Nodes may optionally belong to a cluster.  \n    // Neg cluster_id means no cluster - i.e. top-level membership.\n    double pos[2];\n    double scanpos;\n    double length[2];\n    Edge* edge;\n    bool dummy; // nodes on edge paths (but not ends) are dummy\n    bool scan; // triggers scan events\n    bool active; // node is active if it is not dummy or is dummy and involved in\n                 // a violated constraint\n    bool open; // a node is opened (if scan is true) when the scanline first reaches\n               // its boundary and closed when the scanline leaves it.\n    Node(unsigned id, vpsc::Rectangle const * r) :\n        ScanObject(id),cluster(nullptr),\n        edge(nullptr),dummy(false),scan(true),active(true),open(false) { \n            for(unsigned i=0;i<2;i++) {\n                pos[i]=r->getCentreD(i);\n                min[i]=r->getMinD(i);\n                max[i]=r->getMaxD(i);\n                length[i]=r->length(i);\n            }\n    }\n    Node(unsigned id, const double x, const double y) :\n        ScanObject(id),cluster(nullptr),\n        edge(nullptr),dummy(false),scan(false),active(true),open(false) {\n            pos[vpsc::HORIZONTAL]=x;\n            pos[vpsc::VERTICAL]=y;\n            for(unsigned i=0;i<2;i++) {\n                length[i]=4;\n                min[i]=pos[i]-length[i]/2.0;\n                max[i]=pos[i]+length[i]/2.0;\n            }\n    }\n    double euclidean_distance(Node const * v) const {\n        double dx=pos[0]-v->pos[0];\n        double dy=pos[1]-v->pos[1];\n        return sqrt(dx*dx+dy*dy);\n    }\n\nprivate:\n    friend void sortNeighbours(const vpsc::Dim dim, Node * v, Node * l, Node * r, \n        const double conjpos, std::vector<Edge*> const & openEdges, \n        std::vector<Node *>& L, std::vector<Node *>& nodes);\n    Node(const unsigned id, const double x, const double y, Edge* e) : \n        ScanObject(id),cluster(nullptr),\n        edge(e),dummy(true),scan(false),active(false)  {\n            pos[vpsc::HORIZONTAL]=x;\n            pos[vpsc::VERTICAL]=y;\n            for(unsigned i=0;i<2;i++) {\n                length[i]=4;\n                min[i]=pos[i]-length[i]/2.0;\n                max[i]=pos[i]+length[i]/2.0;\n            }\n            e->dummyNodes.push_back(id);\n        }\n};\nstruct CmpNodePos {\n    bool operator() (const Node* u, const Node* v) const {\n        double upos = u->scanpos;\n        double vpos = v->scanpos;\n        bool tiebreaker = u < v;\n        if (u->cluster != v->cluster) {\n            if(u->cluster!=nullptr) {\n                upos = u->cluster->scanpos;\n            }\n            if(v->cluster!=nullptr) {\n                vpos = v->cluster->scanpos;\n            }\n            tiebreaker = u->cluster < v->cluster;\n        }\n        if (upos < vpos) {\n            return true;\n        }\n        if (vpos < upos) {\n            return false;\n        }\n        return tiebreaker;\n    }\n};\ntypedef std::set<Node*,CmpNodePos> NodeSet;\n// defines references to three variables for which the goal function\n// will be altered to prefer points u-b-v are in a linear arrangement\n// such that b is placed at u+t(v-u).\nstruct LinearConstraint {\n    LinearConstraint(\n            Node const & u, \n            Node const & v,\n            Node const & b,\n            double w)\n        : u(u.id),v(v.id),b(b.id),w(w)\n    {\n        // from cosine rule: ub.uv/|uv|=|ub|cos(theta)\n        double uvx = v.pos[0] - u.pos[0],\n               uvy = v.pos[1] - u.pos[1],\n               ubx = b.pos[0] - u.pos[0],\n               uby = b.pos[1] - u.pos[1],\n               duv2 = uvx * uvx + uvy * uvy;\n        if(duv2 < 0.0001) {\n            t=0;\n        } else {\n            t = (uvx * ubx + uvy * uby)/duv2;\n        }\n        duu=(1-t)*(1-t);\n        duv=t*(1-t);\n        dub=t-1;\n        dvv=t*t;\n        dvb=-t;\n        dbb=1;\n        //printf(\"New LC: t=%f\\n\",t); \n    }\n    unsigned u;\n    unsigned v;\n    unsigned b;\n    double w; // weight\n    double t;\n    // 2nd partial derivatives of the goal function\n    //   (X[b] - (1-t) X[u] - t X[v])^2\n    double duu;\n    double duv;\n    double dub;\n    double dvv;\n    double dvb;\n    double dbb;\n};\nvoid setEdgeLengths(double **D, std::vector<Edge*> & edges);\ndouble pathLength(Edge const * e, std::vector<Node*> const & nodes);\ndouble computeStressFromRoutes(double strength, std::vector<Edge*> & edges);\ntypedef std::vector<LinearConstraint*> LinearConstraints;\nvoid generateConstraints(\n        const vpsc::Dim dim, \n        std::vector<Node*> & nodes, \n        std::vector<Edge*> const & edges, \n        std::vector<cola::SeparationConstraint*>& cs,\n        bool xSkipping);\nvoid nodePath(Edge& e, std::vector<Node*>& nodes, std::vector<unsigned>& path);\nvoid generateClusterBoundaries(\n        const vpsc::Dim dim,\n        std::vector<Node*> & nodes,\n        std::vector<Edge*> & edges,\n        std::vector<vpsc::Rectangle*> const & rs,\n        cola::Cluster const & clusterHierarchy,\n        std::vector<straightener::Cluster*>& sclusters);\n\n} // namespace straightener\n#endif\n"
  },
  {
    "path": "cola/libcola/tests/FixedRelativeConstraint01.cpp",
    "content": "#include <vector>\n#include \"libcola/cola.h\"\nusing namespace cola;\nint main(void) {\n    CompoundConstraints ccs;\n    std::vector<Edge> es;\n    double defaultEdgeLength=40;\n    std::vector<vpsc::Rectangle*> rs;\n    vpsc::Rectangle *rect = nullptr;\n    std::vector<unsigned> fixedShapes;\n    \n    double textW = 100;\n    double textH = 10;\n    double circleW = 5;\n    double circleH = 5;\n\n    rect = new vpsc::Rectangle(303-circleW, 303+circleW, 300-circleH, 300+circleH);\n    rs.push_back(rect);\n    fixedShapes.push_back(rs.size() - 1);\n    \n    rect = new vpsc::Rectangle(310-circleW, 310+circleW, 302-circleH, 302+circleH);\n    rs.push_back(rect);\n    fixedShapes.push_back(rs.size() - 1);\n    \n    rect = new vpsc::Rectangle(313-circleW, 313+circleW, 297-circleH, 297+circleH);\n    rs.push_back(rect);\n    fixedShapes.push_back(rs.size() - 1);\n\n    rect = new vpsc::Rectangle(300-textW, 300+textW, 300-textH, 300+textH);\n    rs.push_back(rect);\n    \n    rect = new vpsc::Rectangle(310-textW, 310+textW, 305-textH, 305+textH);\n    rs.push_back(rect);\n    \n    rect = new vpsc::Rectangle(317-textW, 317+textW, 295-textH, 295+textH);\n    rs.push_back(rect);\n\n    ConstrainedFDLayout alg(rs, es, defaultEdgeLength);\n    alg.setAvoidNodeOverlaps(true);\n    \n    ccs.push_back(new FixedRelativeConstraint(rs, fixedShapes, true));\n    alg.setConstraints(ccs);\n    \n    alg.makeFeasible();\n\n    // Can be used to output a \"libcola-debug.svg\" file:\n    //alg.outputInstanceToSVG();\n    alg.freeAssociatedObjects();\n\n    return 0;\n};\n"
  },
  {
    "path": "cola/libcola/tests/Makefile.am",
    "content": "AM_CPPFLAGS = -I$(top_srcdir) $(CAIROMM_CFLAGS)\n\nLDADD = \\\n  $(top_builddir)/libvpsc/libvpsc.la \\\n  $(top_builddir)/libtopology/libtopology.la \\\n  $(top_builddir)/libcola/libcola.la \\\n  $(top_builddir)/libavoid/libavoid.la \\\n  $(CAIROMM_LIBS)\n\ncheck_PROGRAMS = random_graph page_bounds constrained unsatisfiable invalid makefeasible rectclustershapecontainment FixedRelativeConstraint01 StillOverlap01 StillOverlap02 shortest_paths rectangularClusters01 overlappingClusters01 overlappingClusters02 overlappingClusters04 initialOverlap\n#check_PROGRAMS = unconstrained constrained containment shortest_paths connected_components large_graph convex_hull scale_free trees random_graph large_graph topology boundary planar #resize\n#check_PROGRAMS = topology boundary planar resize resizealignment\n\n# problem_SOURCES = problem.cpp\n\ninitialOverlap_SOURCES = initialOverlap.cpp\n\noverlappingClusters01_SOURCES = overlappingClusters01.cpp\noverlappingClusters02_SOURCES = overlappingClusters02.cpp\noverlappingClusters04_SOURCES = overlappingClusters04.cpp\n\nrectangularClusters01_SOURCES = rectangularClusters01.cpp\n\nStillOverlap01_SOURCES = StillOverlap01.cpp \nStillOverlap02_SOURCES = StillOverlap02.cpp \n\nFixedRelativeConstraint01_SOURCES = FixedRelativeConstraint01.cpp \n\nrectclustershapecontainment_SOURCES = rectclustershapecontainment.cpp \n\nrandom_graph_SOURCES = random_graph.cpp \n\npage_bounds_SOURCES = page_bounds.cpp \n\nconstrained_SOURCES = constrained.cpp\n\nunsatisfiable_SOURCES = unsatisfiable.cpp \n\ninvalid_SOURCES = invalid.cpp \n\nmakefeasible_LDADD = $(LDADD) $(top_srcdir)/libavoid/libavoid.la\nmakefeasible_SOURCES = makefeasible02.cpp \n\nshortest_paths_SOURCES = shortest_paths.cpp\n#unconstrained_SOURCES = unconstrained.cpp \n#containment_SOURCES = containment.cpp \n#topology_SOURCES = topology.cpp \n#boundary_SOURCES = boundary.cpp \n#resize_SOURCES = resize.cpp \n#resizealignment_SOURCES = resizealignment.cpp \n#planar_SOURCES = planar.cpp \n#connected_components_SOURCES = connected_components.cpp\n# test Requires boost\n#sparse_matrix_SOURCES = sparse_matrix.cpp\n#convex_hull_SOURCES = convex_hull.cpp\n#convex_hull_LDADD = $(LDADD) -lcairo -lcairomm-1.0\n#aarontest_SOURCES = aarontest.cpp\n#aarontest_LDADD = $(top_srcdir)/libcola/libcola.la $(top_builddir)/libvpsc/libvpsc.la -lcairo -lcairomm-1.0\n#qo1_SOURCES = qo1.c\n#qo1_LDADD = -L$(mosek_home)/bin -lmosek -lguide -limf\n#small_graph_SOURCES = small_graph.cpp \n#large_graph_SOURCES = large_graph.cpp \n#gml_graph_LDADD = $(common_LDADD) /usr/lib/libboost_regex.so\n#gml_graph_SOURCES = gml_graph.cpp \n#scale_free_SOURCES = scale_free.cpp \n#trees_SOURCES = trees.cpp \n\nTESTS = $(check_PROGRAMS)\n"
  },
  {
    "path": "cola/libcola/tests/StillOverlap01.cpp",
    "content": "#include <vector>\n#include \"libcola/cola.h\"\nusing namespace cola;\nint main(void) {\n    CompoundConstraints ccs;\n    std::vector<Edge> es;\n    double defaultEdgeLength=40;\n    std::vector<vpsc::Rectangle*> rs;\n    vpsc::Rectangle *rect = nullptr;\n\n    rect = new vpsc::Rectangle(210, 240, 83.5, 113.5);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(210, 240, 125.5, 155.5);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(377, 407, 43.5, 73.5);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(251, 281, 43.5, 73.5);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(110, 140, 43.5, 73.5);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(29, 79, 55.5, 105.5);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(427, 477, 32.5, 82.5);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(300, 350, 32.5, 82.5);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(171, 221, 32.5, 82.5);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(33, 83, 115.5, 165.5);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(522, 572, 115.5, 165.5);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(519, 569, 35.5, 85.5);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(192, 258, 123.5, 173.5);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(192, 258, 65.5, 115.5);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(359, 425, -16.5, 33.5);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(233, 299, -16.5, 33.5);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(154, 220, 33.5, 83.5);\n    rs.push_back(rect);\n\n    AlignmentConstraint *alignment140600592030544 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140600592030544->addShape(1, 0);\n    alignment140600592030544->addShape(0, 0);\n    ccs.push_back(alignment140600592030544);\n\n    AlignmentConstraint *alignment140600592030848 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140600592030848->addShape(2, 0);\n    ccs.push_back(alignment140600592030848);\n\n    AlignmentConstraint *alignment140600592031040 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140600592031040->addShape(3, 0);\n    ccs.push_back(alignment140600592031040);\n\n    AlignmentConstraint *alignment140600592031168 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140600592031168->addShape(4, 0);\n    ccs.push_back(alignment140600592031168);\n\n    AlignmentConstraint *alignment140600592031296 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140600592031296->addShape(5, 0);\n    ccs.push_back(alignment140600592031296);\n\n    AlignmentConstraint *alignment140600592031456 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140600592031456->addShape(6, 0);\n    ccs.push_back(alignment140600592031456);\n\n    AlignmentConstraint *alignment140600592031616 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140600592031616->addShape(7, 0);\n    ccs.push_back(alignment140600592031616);\n\n    AlignmentConstraint *alignment140600592031776 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140600592031776->addShape(8, 0);\n    ccs.push_back(alignment140600592031776);\n\n    AlignmentConstraint *alignment140600592031936 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140600592031936->addShape(9, 0);\n    ccs.push_back(alignment140600592031936);\n\n    AlignmentConstraint *alignment140600592032240 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140600592032240->addShape(10, 0);\n    ccs.push_back(alignment140600592032240);\n\n    AlignmentConstraint *alignment140600592032400 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140600592032400->addShape(11, 0);\n    ccs.push_back(alignment140600592032400);\n\n    SeparationConstraint *separation140600592044112 = new SeparationConstraint(vpsc::XDIM, alignment140600592031296, alignment140600592031936, 4, false);\n    ccs.push_back(separation140600592044112);\n\n    SeparationConstraint *separation140600592045280 = new SeparationConstraint(vpsc::XDIM, alignment140600592031936, alignment140600592031168, 67, false);\n    ccs.push_back(separation140600592045280);\n\n    SeparationConstraint *separation140600592045376 = new SeparationConstraint(vpsc::XDIM, alignment140600592031168, alignment140600592031776, 71, false);\n    ccs.push_back(separation140600592045376);\n\n    SeparationConstraint *separation140600592045520 = new SeparationConstraint(vpsc::XDIM, alignment140600592031776, alignment140600592030544, 29, false);\n    ccs.push_back(separation140600592045520);\n\n    SeparationConstraint *separation140600592045696 = new SeparationConstraint(vpsc::XDIM, alignment140600592030544, alignment140600592031040, 41, false);\n    ccs.push_back(separation140600592045696);\n\n    SeparationConstraint *separation140600592045872 = new SeparationConstraint(vpsc::XDIM, alignment140600592031040, alignment140600592031616, 59, false);\n    ccs.push_back(separation140600592045872);\n\n    SeparationConstraint *separation140600592043472 = new SeparationConstraint(vpsc::XDIM, alignment140600592031616, alignment140600592030848, 67, false);\n    ccs.push_back(separation140600592043472);\n\n    SeparationConstraint *separation140600592043648 = new SeparationConstraint(vpsc::XDIM, alignment140600592030848, alignment140600592031456, 60, false);\n    ccs.push_back(separation140600592043648);\n\n    SeparationConstraint *separation140600592043824 = new SeparationConstraint(vpsc::XDIM, alignment140600592031456, alignment140600592032400, 92, false);\n    ccs.push_back(separation140600592043824);\n\n    SeparationConstraint *separation140600592046048 = new SeparationConstraint(vpsc::XDIM, alignment140600592032400, alignment140600592032240, 3, false);\n    ccs.push_back(separation140600592046048);\n\n    AlignmentConstraint *alignment140600592044208 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140600592044208->addShape(0, 0);\n    ccs.push_back(alignment140600592044208);\n\n    AlignmentConstraint *alignment140600592044368 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140600592044368->addShape(5, 0);\n    ccs.push_back(alignment140600592044368);\n\n    AlignmentConstraint *alignment140600592044528 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140600592044528->addShape(1, 0);\n    alignment140600592044528->addShape(9, 0);\n    alignment140600592044528->addShape(10, 0);\n    ccs.push_back(alignment140600592044528);\n\n    AlignmentConstraint *alignment140600592044752 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140600592044752->addShape(6, 0);\n    alignment140600592044752->addShape(4, 0);\n    alignment140600592044752->addShape(7, 0);\n    alignment140600592044752->addShape(8, 0);\n    alignment140600592044752->addShape(3, 0);\n    alignment140600592044752->addShape(11, 0);\n    alignment140600592044752->addShape(2, 0);\n    ccs.push_back(alignment140600592044752);\n\n    SeparationConstraint *separation140600592045088 = new SeparationConstraint(vpsc::YDIM, alignment140600592044752, alignment140600592044368, 22.1429, false);\n    ccs.push_back(separation140600592045088);\n\n    SeparationConstraint *separation140600590330720 = new SeparationConstraint(vpsc::YDIM, alignment140600592044368, alignment140600592044208, 18, false);\n    ccs.push_back(separation140600590330720);\n\n    SeparationConstraint *separation140600590330896 = new SeparationConstraint(vpsc::YDIM, alignment140600592044208, alignment140600592044528, 42, false);\n    ccs.push_back(separation140600590330896);\n\n    AlignmentConstraint *alignment140600590331072 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140600590331072->addShape(0, 0);\n    alignment140600590331072->addShape(12, 0);\n    ccs.push_back(alignment140600590331072);\n\n    SeparationConstraint *separation140600590331376 = new SeparationConstraint(vpsc::YDIM, 0, 12, 50, true);\n    ccs.push_back(separation140600590331376);\n\n    AlignmentConstraint *alignment140600590331520 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140600590331520->addShape(1, 0);\n    alignment140600590331520->addShape(13, 0);\n    ccs.push_back(alignment140600590331520);\n\n    SeparationConstraint *separation140600590331744 = new SeparationConstraint(vpsc::YDIM, 1, 13, -50, true);\n    ccs.push_back(separation140600590331744);\n\n    AlignmentConstraint *alignment140600590331888 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140600590331888->addShape(2, 0);\n    alignment140600590331888->addShape(14, 0);\n    ccs.push_back(alignment140600590331888);\n\n    SeparationConstraint *separation140600590332112 = new SeparationConstraint(vpsc::YDIM, 2, 14, -50, true);\n    ccs.push_back(separation140600590332112);\n\n    AlignmentConstraint *alignment140600592043200 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140600592043200->addShape(3, 0);\n    alignment140600592043200->addShape(15, 0);\n    ccs.push_back(alignment140600592043200);\n\n    SeparationConstraint *separation140600590332784 = new SeparationConstraint(vpsc::YDIM, 3, 15, -50, true);\n    ccs.push_back(separation140600590332784);\n\n    AlignmentConstraint *alignment140600590332880 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140600590332880->addShape(4, 0);\n    alignment140600590332880->addShape(16, 0);\n    ccs.push_back(alignment140600590332880);\n\n    SeparationConstraint *separation140600590333104 = new SeparationConstraint(vpsc::XDIM, 4, 16, 62, true);\n    ccs.push_back(separation140600590333104);\n\n    ConstrainedFDLayout alg(rs, es, defaultEdgeLength);\n    alg.setAvoidNodeOverlaps(true);\n    RootCluster *cluster140600590333360 = new RootCluster();\n    alg.setClusterHierarchy(cluster140600590333360);\n    alg.setConstraints(ccs);\n    alg.makeFeasible();\n    alg.run();\n    alg.outputInstanceToSVG(\"test-StillOverlap01\");\n    alg.freeAssociatedObjects();\n    return 0;\n};\n\n"
  },
  {
    "path": "cola/libcola/tests/StillOverlap02.cpp",
    "content": "#include <vector>\n#include \"libcola/cola.h\"\nusing namespace cola;\nint main(void) {\n    CompoundConstraints ccs;\n    std::vector<Edge> es;\n    double defaultEdgeLength=40;\n    std::vector<vpsc::Rectangle*> rs;\n    vpsc::Rectangle *rect = nullptr;\n\n    rect = new vpsc::Rectangle(80.8448, 110.845, -23.9565, 6.04346);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(-121.155, 128.845, -212.957, -142.957);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(209.095, 239.095, -389.957, -359.957);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(209.095, 239.095, -240.957, -210.957);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(274.428, 304.428, -130.957, -100.957);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(140.845, 170.845, -78.9565, -48.9565);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(80.8448, 110.845, -55.9565, -25.9565);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(501.428, 531.428, -232.623, -202.623);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(501.428, 531.428, -140.623, -110.623);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(485.428, 515.428, -33.3565, -3.35654);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(737.928, 767.928, -133.957, -103.957);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(140.845, 170.845, 314.043, 344.043);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(375.428, 405.428, 191.443, 221.443);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(443.428, 473.428, 202.243, 232.243);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(558.428, 588.428, 136.777, 166.777);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(634.214, 664.214, 136.777, 166.777);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(764.214, 794.214, 136.777, 166.777);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(819.095, 849.095, 156.443, 186.443);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(853.595, 883.595, 76.0435, 106.043);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(711.928, 741.928, 202.243, 232.243);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(542.428, 572.428, 280.443, 310.443);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(296.428, 326.428, 440.943, 470.943);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(202.428, 232.428, 693.943, 723.943);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(407.428, 473.428, 685.943, 735.943);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(375.428, 405.428, 693.943, 723.943);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(542.428, 572.428, 632.443, 662.443);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(517.428, 547.428, 444.443, 474.443);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(566.928, 596.928, 444.443, 474.443);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(879.345, 909.345, 280.443, 310.443);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(879.345, 909.345, 478.443, 508.443);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(836.095, 866.095, 332.443, 362.443);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(797.928, 827.928, 436.443, 466.443);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(55.8448, 85.8448, 507.443, 537.443);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(375.428, 405.428, 1026.76, 1056.76);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(375.428, 405.428, 1074.76, 1104.76);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(-102.489, -72.4885, 1051.76, 1081.76);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(797.928, 827.928, 802.515, 832.515);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(839.928, 1079.93, 198.443, 268.443);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(768, 1008, 844.515, 914.515);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(626.928, 656.928, 972.765, 1002.76);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(426.956, 456.956, 972.765, 1002.76);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(224.428, 254.428, 972.765, 1002.76);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(375.428, 405.428, 870.765, 900.765);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(255.428, 285.428, 870.765, 900.765);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(744.928, 774.928, 332.443, 362.443);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(30, 354, -347.957, -302.957);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(-183.905, 137.095, 68.0435, 252.043);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(375.428, 405.428, 530.443, 560.443);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(375.428, 405.428, 332.443, 362.443);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(1.84481, 31.8448, 870.765, 900.765);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(127.095, 157.095, 870.765, 900.765);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(991.345, 1021.34, 478.443, 508.443);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(991.345, 1021.34, 600.443, 630.443);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(38.8448, 68.8448, 693.943, 723.943);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(-58.1552, -28.1552, 768.765, 798.765);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(130.845, 180.845, -399.957, -349.957);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(130.845, 180.845, -250.957, -200.957);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(-112.489, -62.4885, -43.3565, 6.64346);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(289.428, 339.428, 192.243, 242.243);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(532.428, 582.428, 192.243, 242.243);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(567.428, 617.428, -150.623, -100.623);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(843.595, 893.595, -150.623, -100.623);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(616.928, 666.928, -43.3565, 6.64346);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(787.928, 837.928, -43.3565, 6.64346);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(869.345, 919.345, 520.443, 570.443);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(289.428, 339.428, 322.443, 372.443);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(130.845, 180.845, 430.943, 480.943);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(869.345, 919.345, 374.443, 424.443);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(286.428, 336.428, 683.943, 733.943);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(130.845, 180.845, 520.443, 570.443);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(130.845, 180.845, 1116.76, 1166.76);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(676.928, 726.928, 962.765, 1012.76);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(520.428, 570.428, 962.765, 1012.76);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(336.428, 386.428, 962.765, 1012.76);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(676.928, 726.928, 860.765, 910.765);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(130.845, 180.845, 1064.76, 1114.76);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(425.428, 475.428, 860.765, 910.765);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(305.428, 355.428, 860.765, 910.765);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(787.928, 837.928, 1064.76, 1114.76);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(532.428, 582.428, 520.443, 570.443);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(787.928, 837.928, 192.243, 242.243);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(295.428, 345.428, 520.443, 570.443);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(475.428, 525.428, 683.943, 733.943);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(113.095, 163.095, 683.943, 733.943);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(-19.1552, 30.8448, 520.443, 570.443);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(295.428, 345.428, 572.443, 622.443);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(295.428, 345.428, 631.943, 681.943);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(289.428, 339.428, -43.3565, 6.64346);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(177.428, 227.428, 860.765, 910.765);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(289.428, 339.428, -250.957, -200.957);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(532.428, 582.428, 322.443, 372.443);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(787.928, 837.928, 622.443, 672.443);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(556.928, 606.928, 860.765, 910.765);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(139.095, 189.095, 66.0435, 116.043);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(-68.1552, -18.1552, 683.943, 733.943);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(425.428, 475.428, 758.765, 808.765);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(177.428, 227.428, 758.765, 808.765);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(51.8448, 101.845, 860.765, 910.765);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(-68.1552, -18.1552, 860.765, 910.765);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(305.428, 355.428, 758.765, 808.765);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(616.928, 666.928, 218.443, 268.443);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(981.345, 1031.34, 520.443, 570.443);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(981.345, 1031.34, 656.943, 706.943);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(592.428, 839.428, 486.443, 556.443);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(626.928, 656.928, 596.443, 626.443);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(616.928, 666.928, 656.943, 706.943);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(616.928, 666.928, 750.515, 800.515);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(626.928, 656.928, 717.515, 747.515);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(209.095, 239.095, 76.0435, 106.043);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(62.8448, 128.845, 16.0435, 66.0435);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(191.095, 257.095, -449.957, -399.957);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(191.095, 257.095, -300.957, -250.957);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(194.428, 260.428, -140.957, -90.9565);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(184.845, 250.845, -88.9565, -38.9565);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(62.8448, 128.845, -115.957, -65.9565);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(483.428, 549.428, -292.623, -242.623);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(483.428, 549.428, -200.623, -150.623);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(467.428, 533.428, -93.3565, -43.3565);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(719.928, 785.928, -93.9565, -43.9565);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(122.845, 188.845, 254.043, 304.043);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(357.428, 423.428, 131.443, 181.443);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(425.428, 491.428, 142.243, 192.243);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(540.428, 606.428, 76.7768, 126.777);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(616.214, 682.214, 76.7768, 126.777);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(684.214, 750.214, 126.777, 176.777);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(863.095, 929.095, 146.443, 196.443);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(897.595, 963.595, 66.0435, 116.043);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(693.928, 759.928, 242.243, 292.243);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(586.428, 652.428, 270.443, 320.443);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(278.428, 344.428, 380.943, 430.943);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(184.428, 250.428, 633.943, 683.943);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(357.428, 423.428, 633.943, 683.943);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(524.428, 590.428, 572.443, 622.443);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(437.428, 503.428, 434.443, 484.443);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(610.928, 676.928, 434.443, 484.443);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(923.345, 989.345, 270.443, 320.443);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(923.345, 989.345, 468.443, 518.443);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(880.095, 946.095, 322.443, 372.443);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(841.928, 907.928, 426.443, 476.443);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(37.8448, 103.845, 447.443, 497.443);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(357.428, 423.428, 1066.76, 1116.76);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(357.428, 423.428, 1014.76, 1064.76);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(-58.4885, 7.51148, 1041.76, 1091.76);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(841.928, 907.928, 792.515, 842.515);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(608.928, 674.928, 912.765, 962.765);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(408.956, 474.956, 912.765, 962.765);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(268.428, 334.428, 962.765, 1012.76);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(357.428, 423.428, 810.765, 860.765);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(237.428, 303.428, 810.765, 860.765);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(664.928, 730.928, 322.443, 372.443);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(357.428, 423.428, 470.443, 520.443);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(357.428, 423.428, 272.443, 322.443);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(-16.1552, 49.8448, 810.765, 860.765);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(109.095, 175.095, 810.765, 860.765);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(1035.34, 1101.34, 468.443, 518.443);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(1035.34, 1101.34, 590.443, 640.443);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(20.8448, 86.8448, 633.943, 683.943);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(-14.1552, 51.8448, 758.765, 808.765);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(670.928, 736.928, 586.443, 636.443);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(670.928, 736.928, 707.515, 757.515);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(191.095, 257.095, 16.0435, 66.0435);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(58.8448, 128.845, -192.957, -142.957);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(839.928, 909.928, 218.443, 268.443);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(768.5, 838.5, 844.515, 894.515);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(67.0948, 137.095, 150.043, 200.043);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(67.0948, 137.095, 202.043, 252.043);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(-36.9052, 13.0948, 182.043, 252.043);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(15.0948, 65.0948, 182.043, 252.043);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(592.428, 662.428, 486.443, 536.443);\n    rs.push_back(rect);\n\n    AlignmentConstraint *alignment1114387328 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment1114387328->addShape(4, 0);\n    ccs.push_back(alignment1114387328);\n\n    AlignmentConstraint *alignment1103856272 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment1103856272->addShape(0, 0);\n    alignment1103856272->addShape(6, 0);\n    ccs.push_back(alignment1103856272);\n\n    AlignmentConstraint *alignment1102536224 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment1102536224->addShape(7, 0);\n    alignment1102536224->addShape(8, 0);\n    ccs.push_back(alignment1102536224);\n\n    AlignmentConstraint *alignment1113412976 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment1113412976->addShape(10, 0);\n    ccs.push_back(alignment1113412976);\n\n    AlignmentConstraint *alignment1103859296 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment1103859296->addShape(13, 0);\n    ccs.push_back(alignment1103859296);\n\n    AlignmentConstraint *alignment1108560576 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment1108560576->addShape(14, 0);\n    ccs.push_back(alignment1108560576);\n\n    AlignmentConstraint *alignment1102536400 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment1102536400->addShape(15, 0);\n    ccs.push_back(alignment1102536400);\n\n    AlignmentConstraint *alignment1102857472 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment1102857472->addShape(16, 0);\n    ccs.push_back(alignment1102857472);\n\n    AlignmentConstraint *alignment1103856000 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment1103856000->addShape(17, 0);\n    ccs.push_back(alignment1103856000);\n\n    AlignmentConstraint *alignment1103638512 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment1103638512->addShape(19, 0);\n    ccs.push_back(alignment1103638512);\n\n    AlignmentConstraint *alignment1103638608 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment1103638608->addShape(22, 0);\n    ccs.push_back(alignment1103638608);\n\n    AlignmentConstraint *alignment1095948608 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment1095948608->addShape(26, 0);\n    ccs.push_back(alignment1095948608);\n\n    AlignmentConstraint *alignment1095948704 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment1095948704->addShape(30, 0);\n    ccs.push_back(alignment1095948704);\n\n    AlignmentConstraint *alignment1109826288 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment1109826288->addShape(32, 0);\n    ccs.push_back(alignment1109826288);\n\n    AlignmentConstraint *alignment1109826384 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment1109826384->addShape(40, 0);\n    ccs.push_back(alignment1109826384);\n\n    AlignmentConstraint *alignment1110086352 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment1110086352->addShape(41, 0);\n    ccs.push_back(alignment1110086352);\n\n    AlignmentConstraint *alignment1110086480 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment1110086480->addShape(43, 0);\n    ccs.push_back(alignment1110086480);\n\n    AlignmentConstraint *alignment1100384896 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment1100384896->addShape(44, 0);\n    ccs.push_back(alignment1100384896);\n\n    AlignmentConstraint *alignment1100385056 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment1100385056->addShape(33, 0);\n    alignment1100385056->addShape(42, 0);\n    alignment1100385056->addShape(48, 0);\n    alignment1100385056->addShape(12, 0);\n    alignment1100385056->addShape(47, 0);\n    alignment1100385056->addShape(34, 0);\n    alignment1100385056->addShape(24, 0);\n    ccs.push_back(alignment1100385056);\n\n    AlignmentConstraint *alignment1114389776 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment1114389776->addShape(49, 0);\n    ccs.push_back(alignment1114389776);\n\n    AlignmentConstraint *alignment1114389936 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment1114389936->addShape(50, 0);\n    ccs.push_back(alignment1114389936);\n\n    AlignmentConstraint *alignment1103858368 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment1103858368->addShape(53, 0);\n    ccs.push_back(alignment1103858368);\n\n    AlignmentConstraint *alignment1103858496 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment1103858496->addShape(35, 0);\n    alignment1103858496->addShape(57, 0);\n    ccs.push_back(alignment1103858496);\n\n    AlignmentConstraint *alignment1103858720 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment1103858720->addShape(60, 0);\n    ccs.push_back(alignment1103858720);\n\n    AlignmentConstraint *alignment1103857616 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment1103857616->addShape(61, 0);\n    alignment1103857616->addShape(18, 0);\n    ccs.push_back(alignment1103857616);\n\n    AlignmentConstraint *alignment1103857840 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment1103857840->addShape(64, 0);\n    alignment1103857840->addShape(28, 0);\n    alignment1103857840->addShape(67, 0);\n    alignment1103857840->addShape(29, 0);\n    ccs.push_back(alignment1103857840);\n\n    AlignmentConstraint *alignment1103858032 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment1103858032->addShape(68, 0);\n    alignment1103858032->addShape(21, 0);\n    ccs.push_back(alignment1103858032);\n\n    AlignmentConstraint *alignment1103741312 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment1103741312->addShape(72, 0);\n    ccs.push_back(alignment1103741312);\n\n    AlignmentConstraint *alignment1103741440 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment1103741440->addShape(73, 0);\n    ccs.push_back(alignment1103741440);\n\n    AlignmentConstraint *alignment1103741600 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment1103741600->addShape(71, 0);\n    alignment1103741600->addShape(74, 0);\n    ccs.push_back(alignment1103741600);\n\n    AlignmentConstraint *alignment1103741824 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment1103741824->addShape(66, 0);\n    alignment1103741824->addShape(56, 0);\n    alignment1103741824->addShape(70, 0);\n    alignment1103741824->addShape(69, 0);\n    alignment1103741824->addShape(5, 0);\n    alignment1103741824->addShape(11, 0);\n    alignment1103741824->addShape(55, 0);\n    alignment1103741824->addShape(75, 0);\n    ccs.push_back(alignment1103741824);\n\n    AlignmentConstraint *alignment1103742144 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment1103742144->addShape(9, 0);\n    alignment1103742144->addShape(82, 0);\n    ccs.push_back(alignment1103742144);\n\n    AlignmentConstraint *alignment1103743632 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment1103743632->addShape(83, 0);\n    ccs.push_back(alignment1103743632);\n\n    AlignmentConstraint *alignment1113416080 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment1113416080->addShape(84, 0);\n    ccs.push_back(alignment1113416080);\n\n    AlignmentConstraint *alignment1113416240 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment1113416240->addShape(81, 0);\n    alignment1113416240->addShape(85, 0);\n    alignment1113416240->addShape(86, 0);\n    ccs.push_back(alignment1113416240);\n\n    AlignmentConstraint *alignment1103744288 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment1103744288->addShape(87, 0);\n    alignment1103744288->addShape(89, 0);\n    alignment1103744288->addShape(58, 0);\n    alignment1103744288->addShape(65, 0);\n    ccs.push_back(alignment1103744288);\n\n    AlignmentConstraint *alignment1103744448 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment1103744448->addShape(79, 0);\n    alignment1103744448->addShape(59, 0);\n    alignment1103744448->addShape(90, 0);\n    alignment1103744448->addShape(25, 0);\n    alignment1103744448->addShape(20, 0);\n    ccs.push_back(alignment1103744448);\n\n    AlignmentConstraint *alignment1103744704 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment1103744704->addShape(80, 0);\n    alignment1103744704->addShape(91, 0);\n    alignment1103744704->addShape(63, 0);\n    alignment1103744704->addShape(31, 0);\n    alignment1103744704->addShape(78, 0);\n    alignment1103744704->addShape(36, 0);\n    ccs.push_back(alignment1103744704);\n\n    AlignmentConstraint *alignment1103744992 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment1103744992->addShape(27, 0);\n    alignment1103744992->addShape(92, 0);\n    ccs.push_back(alignment1103744992);\n\n    AlignmentConstraint *alignment1114376272 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment1114376272->addShape(93, 0);\n    ccs.push_back(alignment1114376272);\n\n    AlignmentConstraint *alignment1114376400 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment1114376400->addShape(95, 0);\n    alignment1114376400->addShape(76, 0);\n    ccs.push_back(alignment1114376400);\n\n    AlignmentConstraint *alignment1114376624 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment1114376624->addShape(96, 0);\n    alignment1114376624->addShape(88, 0);\n    ccs.push_back(alignment1114376624);\n\n    AlignmentConstraint *alignment1114376816 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment1114376816->addShape(97, 0);\n    ccs.push_back(alignment1114376816);\n\n    AlignmentConstraint *alignment1114376944 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment1114376944->addShape(94, 0);\n    alignment1114376944->addShape(54, 0);\n    alignment1114376944->addShape(98, 0);\n    ccs.push_back(alignment1114376944);\n\n    AlignmentConstraint *alignment1114377168 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment1114377168->addShape(77, 0);\n    alignment1114377168->addShape(99, 0);\n    ccs.push_back(alignment1114377168);\n\n    AlignmentConstraint *alignment1114377360 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment1114377360->addShape(51, 0);\n    alignment1114377360->addShape(101, 0);\n    alignment1114377360->addShape(102, 0);\n    alignment1114377360->addShape(52, 0);\n    ccs.push_back(alignment1114377360);\n\n    AlignmentConstraint *alignment1114377600 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment1114377600->addShape(107, 0);\n    alignment1114377600->addShape(62, 0);\n    alignment1114377600->addShape(105, 0);\n    alignment1114377600->addShape(106, 0);\n    alignment1114377600->addShape(104, 0);\n    alignment1114377600->addShape(39, 0);\n    alignment1114377600->addShape(100, 0);\n    ccs.push_back(alignment1114377600);\n\n    AlignmentConstraint *alignment1114378048 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment1114378048->addShape(3, 0);\n    alignment1114378048->addShape(2, 0);\n    alignment1114378048->addShape(108, 0);\n    ccs.push_back(alignment1114378048);\n\n    SeparationConstraint *separation1114378272 = new SeparationConstraint(vpsc::XDIM, alignment1103858496, alignment1114376944, 44.3333, false);\n    ccs.push_back(separation1114378272);\n\n    SeparationConstraint *separation1114378416 = new SeparationConstraint(vpsc::XDIM, alignment1114376944, alignment1113416080, 24.6667, false);\n    ccs.push_back(separation1114378416);\n\n    SeparationConstraint *separation1114378592 = new SeparationConstraint(vpsc::XDIM, alignment1113416080, alignment1114389776, 11, false);\n    ccs.push_back(separation1114378592);\n\n    SeparationConstraint *separation1114378768 = new SeparationConstraint(vpsc::XDIM, alignment1114389776, alignment1103858368, 23, false);\n    ccs.push_back(separation1114378768);\n\n    SeparationConstraint *separation1114378944 = new SeparationConstraint(vpsc::XDIM, alignment1103858368, alignment1109826288, 17, false);\n    ccs.push_back(separation1114378944);\n\n    SeparationConstraint *separation1114379120 = new SeparationConstraint(vpsc::XDIM, alignment1109826288, alignment1114376816, 6, false);\n    ccs.push_back(separation1114379120);\n\n    SeparationConstraint *separation1114379296 = new SeparationConstraint(vpsc::XDIM, alignment1114376816, alignment1103856272, 19, false);\n    ccs.push_back(separation1114379296);\n\n    SeparationConstraint *separation1114379472 = new SeparationConstraint(vpsc::XDIM, alignment1103856272, alignment1103743632, 14, false);\n    ccs.push_back(separation1114379472);\n\n    SeparationConstraint *separation1114379648 = new SeparationConstraint(vpsc::XDIM, alignment1103743632, alignment1114389936, 4, false);\n    ccs.push_back(separation1114379648);\n\n    SeparationConstraint *separation1114379824 = new SeparationConstraint(vpsc::XDIM, alignment1114389936, alignment1103741824, 13.75, false);\n    ccs.push_back(separation1114379824);\n\n    SeparationConstraint *separation1114380000 = new SeparationConstraint(vpsc::XDIM, alignment1103741824, alignment1114376272, 8.25, false);\n    ccs.push_back(separation1114380000);\n\n    SeparationConstraint *separation1114380176 = new SeparationConstraint(vpsc::XDIM, alignment1114376272, alignment1114376624, 23, false);\n    ccs.push_back(separation1114380176);\n\n    SeparationConstraint *separation1114380352 = new SeparationConstraint(vpsc::XDIM, alignment1114376624, alignment1103638608, 15, false);\n    ccs.push_back(separation1114380352);\n\n    SeparationConstraint *separation1114380528 = new SeparationConstraint(vpsc::XDIM, alignment1103638608, alignment1114378048, 6.66667, false);\n    ccs.push_back(separation1114380528);\n\n    SeparationConstraint *separation1114380704 = new SeparationConstraint(vpsc::XDIM, alignment1114378048, alignment1110086352, 15.3333, false);\n    ccs.push_back(separation1114380704);\n\n    SeparationConstraint *separation1114380880 = new SeparationConstraint(vpsc::XDIM, alignment1110086352, alignment1110086480, 8, false);\n    ccs.push_back(separation1114380880);\n\n    SeparationConstraint *separation1114381056 = new SeparationConstraint(vpsc::XDIM, alignment1110086480, alignment1114387328, 5, false);\n    ccs.push_back(separation1114381056);\n\n    SeparationConstraint *separation1116666144 = new SeparationConstraint(vpsc::XDIM, alignment1114387328, alignment1103858032, 22, false);\n    ccs.push_back(separation1116666144);\n\n    SeparationConstraint *separation1103743760 = new SeparationConstraint(vpsc::XDIM, alignment1103858032, alignment1103744288, 3, false);\n    ccs.push_back(separation1103743760);\n\n    SeparationConstraint *separation1103743904 = new SeparationConstraint(vpsc::XDIM, alignment1103744288, alignment1113416240, 6, false);\n    ccs.push_back(separation1103743904);\n\n    SeparationConstraint *separation1103744080 = new SeparationConstraint(vpsc::XDIM, alignment1113416240, alignment1114377168, 10, false);\n    ccs.push_back(separation1103744080);\n\n    SeparationConstraint *separation1114381232 = new SeparationConstraint(vpsc::XDIM, alignment1114377168, alignment1103741440, 17, false);\n    ccs.push_back(separation1114381232);\n\n    SeparationConstraint *separation1114381376 = new SeparationConstraint(vpsc::XDIM, alignment1103741440, alignment1100385056, 29, false);\n    ccs.push_back(separation1114381376);\n\n    SeparationConstraint *separation1114381552 = new SeparationConstraint(vpsc::XDIM, alignment1100385056, alignment1109826384, 41, false);\n    ccs.push_back(separation1114381552);\n\n    SeparationConstraint *separation1114381728 = new SeparationConstraint(vpsc::XDIM, alignment1109826384, alignment1114376400, 4, false);\n    ccs.push_back(separation1114381728);\n\n    SeparationConstraint *separation1114370064 = new SeparationConstraint(vpsc::XDIM, alignment1114376400, alignment1103859296, 3, false);\n    ccs.push_back(separation1114370064);\n\n    SeparationConstraint *separation1114370240 = new SeparationConstraint(vpsc::XDIM, alignment1103859296, alignment1103742144, 7, false);\n    ccs.push_back(separation1114370240);\n\n    SeparationConstraint *separation1114370416 = new SeparationConstraint(vpsc::XDIM, alignment1103742144, alignment1102536224, 16, false);\n    ccs.push_back(separation1114370416);\n\n    SeparationConstraint *separation1114370592 = new SeparationConstraint(vpsc::XDIM, alignment1102536224, alignment1095948608, 16, false);\n    ccs.push_back(separation1114370592);\n\n    SeparationConstraint *separation1114370768 = new SeparationConstraint(vpsc::XDIM, alignment1095948608, alignment1103741312, 13, false);\n    ccs.push_back(separation1114370768);\n\n    SeparationConstraint *separation1114370944 = new SeparationConstraint(vpsc::XDIM, alignment1103741312, alignment1103744448, 12, false);\n    ccs.push_back(separation1114370944);\n\n    SeparationConstraint *separation1114371120 = new SeparationConstraint(vpsc::XDIM, alignment1103744448, alignment1108560576, 16, false);\n    ccs.push_back(separation1114371120);\n\n    SeparationConstraint *separation1114371296 = new SeparationConstraint(vpsc::XDIM, alignment1108560576, alignment1103744992, 8.5, false);\n    ccs.push_back(separation1114371296);\n\n    SeparationConstraint *separation1114371472 = new SeparationConstraint(vpsc::XDIM, alignment1103744992, alignment1103858720, 10.5, false);\n    ccs.push_back(separation1114371472);\n\n    SeparationConstraint *separation1114371648 = new SeparationConstraint(vpsc::XDIM, alignment1103858720, alignment1114377600, 23.7143, false);\n    ccs.push_back(separation1114371648);\n\n    SeparationConstraint *separation1114371824 = new SeparationConstraint(vpsc::XDIM, alignment1114377600, alignment1102536400, 7.28571, false);\n    ccs.push_back(separation1114371824);\n\n    SeparationConstraint *separation1114372000 = new SeparationConstraint(vpsc::XDIM, alignment1102536400, alignment1103741600, 49, false);\n    ccs.push_back(separation1114372000);\n\n    SeparationConstraint *separation1114372176 = new SeparationConstraint(vpsc::XDIM, alignment1103741600, alignment1103638512, 25, false);\n    ccs.push_back(separation1114372176);\n\n    SeparationConstraint *separation1114372352 = new SeparationConstraint(vpsc::XDIM, alignment1103638512, alignment1113412976, 26, false);\n    ccs.push_back(separation1114372352);\n\n    SeparationConstraint *separation1114372528 = new SeparationConstraint(vpsc::XDIM, alignment1113412976, alignment1100384896, 7, false);\n    ccs.push_back(separation1114372528);\n\n    SeparationConstraint *separation1114372704 = new SeparationConstraint(vpsc::XDIM, alignment1100384896, alignment1102857472, 15, false);\n    ccs.push_back(separation1114372704);\n\n    SeparationConstraint *separation1114372880 = new SeparationConstraint(vpsc::XDIM, alignment1102857472, alignment1103744704, 21.8333, false);\n    ccs.push_back(separation1114372880);\n\n    SeparationConstraint *separation1114373056 = new SeparationConstraint(vpsc::XDIM, alignment1103744704, alignment1103856000, 21.1667, false);\n    ccs.push_back(separation1114373056);\n\n    SeparationConstraint *separation1114373232 = new SeparationConstraint(vpsc::XDIM, alignment1103856000, alignment1095948704, 17, false);\n    ccs.push_back(separation1114373232);\n\n    SeparationConstraint *separation1114373408 = new SeparationConstraint(vpsc::XDIM, alignment1095948704, alignment1103857616, 17.5, false);\n    ccs.push_back(separation1114373408);\n\n    SeparationConstraint *separation1114373584 = new SeparationConstraint(vpsc::XDIM, alignment1103857616, alignment1103857840, 25.75, false);\n    ccs.push_back(separation1114373584);\n\n    SeparationConstraint *separation1114373760 = new SeparationConstraint(vpsc::XDIM, alignment1103857840, alignment1114377360, 52.25, false);\n    ccs.push_back(separation1114373760);\n\n    AlignmentConstraint *alignment1114373936 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment1114373936->addShape(0, 0);\n    ccs.push_back(alignment1114373936);\n\n    AlignmentConstraint *alignment1114374096 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment1114374096->addShape(4, 0);\n    ccs.push_back(alignment1114374096);\n\n    AlignmentConstraint *alignment1114374256 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment1114374256->addShape(5, 0);\n    ccs.push_back(alignment1114374256);\n\n    AlignmentConstraint *alignment1114374416 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment1114374416->addShape(6, 0);\n    ccs.push_back(alignment1114374416);\n\n    AlignmentConstraint *alignment1114374576 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment1114374576->addShape(7, 0);\n    ccs.push_back(alignment1114374576);\n\n    AlignmentConstraint *alignment1114374736 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment1114374736->addShape(10, 0);\n    ccs.push_back(alignment1114374736);\n\n    AlignmentConstraint *alignment1114374896 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment1114374896->addShape(11, 0);\n    ccs.push_back(alignment1114374896);\n\n    AlignmentConstraint *alignment1114375056 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment1114375056->addShape(12, 0);\n    ccs.push_back(alignment1114375056);\n\n    AlignmentConstraint *alignment1114375216 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment1114375216->addShape(15, 0);\n    alignment1114375216->addShape(16, 0);\n    alignment1114375216->addShape(14, 0);\n    ccs.push_back(alignment1114375216);\n\n    AlignmentConstraint *alignment1114375488 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment1114375488->addShape(17, 0);\n    ccs.push_back(alignment1114375488);\n\n    AlignmentConstraint *alignment1114375616 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment1114375616->addShape(26, 0);\n    alignment1114375616->addShape(27, 0);\n    ccs.push_back(alignment1114375616);\n\n    AlignmentConstraint *alignment1114375840 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment1114375840->addShape(28, 0);\n    alignment1114375840->addShape(20, 0);\n    ccs.push_back(alignment1114375840);\n\n    AlignmentConstraint *alignment1114429984 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment1114429984->addShape(31, 0);\n    ccs.push_back(alignment1114429984);\n\n    AlignmentConstraint *alignment1114430112 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment1114430112->addShape(32, 0);\n    ccs.push_back(alignment1114430112);\n\n    AlignmentConstraint *alignment1114430272 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment1114430272->addShape(33, 0);\n    ccs.push_back(alignment1114430272);\n\n    AlignmentConstraint *alignment1114430432 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment1114430432->addShape(35, 0);\n    ccs.push_back(alignment1114430432);\n\n    AlignmentConstraint *alignment1114430592 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment1114430592->addShape(36, 0);\n    ccs.push_back(alignment1114430592);\n\n    AlignmentConstraint *alignment1114430752 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment1114430752->addShape(51, 0);\n    alignment1114430752->addShape(29, 0);\n    ccs.push_back(alignment1114430752);\n\n    AlignmentConstraint *alignment1114430976 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment1114430976->addShape(52, 0);\n    ccs.push_back(alignment1114430976);\n\n    AlignmentConstraint *alignment1114431104 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment1114431104->addShape(55, 0);\n    alignment1114431104->addShape(2, 0);\n    ccs.push_back(alignment1114431104);\n\n    AlignmentConstraint *alignment1114431328 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment1114431328->addShape(61, 0);\n    alignment1114431328->addShape(60, 0);\n    alignment1114431328->addShape(8, 0);\n    ccs.push_back(alignment1114431328);\n\n    AlignmentConstraint *alignment1114431568 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment1114431568->addShape(66, 0);\n    alignment1114431568->addShape(21, 0);\n    ccs.push_back(alignment1114431568);\n\n    AlignmentConstraint *alignment1114431760 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment1114431760->addShape(67, 0);\n    ccs.push_back(alignment1114431760);\n\n    AlignmentConstraint *alignment1114431888 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment1114431888->addShape(70, 0);\n    ccs.push_back(alignment1114431888);\n\n    AlignmentConstraint *alignment1114432048 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment1114432048->addShape(71, 0);\n    alignment1114432048->addShape(73, 0);\n    alignment1114432048->addShape(40, 0);\n    alignment1114432048->addShape(72, 0);\n    alignment1114432048->addShape(41, 0);\n    alignment1114432048->addShape(39, 0);\n    ccs.push_back(alignment1114432048);\n\n    AlignmentConstraint *alignment1114432464 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment1114432464->addShape(78, 0);\n    alignment1114432464->addShape(75, 0);\n    alignment1114432464->addShape(34, 0);\n    ccs.push_back(alignment1114432464);\n\n    AlignmentConstraint *alignment1114432688 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment1114432688->addShape(13, 0);\n    alignment1114432688->addShape(19, 0);\n    alignment1114432688->addShape(58, 0);\n    alignment1114432688->addShape(80, 0);\n    alignment1114432688->addShape(59, 0);\n    ccs.push_back(alignment1114432688);\n\n    AlignmentConstraint *alignment1114433040 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment1114433040->addShape(85, 0);\n    ccs.push_back(alignment1114433040);\n\n    AlignmentConstraint *alignment1114433200 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment1114433200->addShape(86, 0);\n    ccs.push_back(alignment1114433200);\n\n    AlignmentConstraint *alignment1114433360 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment1114433360->addShape(87, 0);\n    alignment1114433360->addShape(9, 0);\n    alignment1114433360->addShape(62, 0);\n    alignment1114433360->addShape(63, 0);\n    alignment1114433360->addShape(57, 0);\n    ccs.push_back(alignment1114433360);\n\n    AlignmentConstraint *alignment1114433696 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment1114433696->addShape(56, 0);\n    alignment1114433696->addShape(3, 0);\n    alignment1114433696->addShape(89, 0);\n    ccs.push_back(alignment1114433696);\n\n    AlignmentConstraint *alignment1114433920 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment1114433920->addShape(65, 0);\n    alignment1114433920->addShape(48, 0);\n    alignment1114433920->addShape(30, 0);\n    alignment1114433920->addShape(90, 0);\n    alignment1114433920->addShape(44, 0);\n    ccs.push_back(alignment1114433920);\n\n    AlignmentConstraint *alignment1114434272 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment1114434272->addShape(91, 0);\n    alignment1114434272->addShape(25, 0);\n    ccs.push_back(alignment1114434272);\n\n    AlignmentConstraint *alignment1114434496 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment1114434496->addShape(68, 0);\n    alignment1114434496->addShape(94, 0);\n    alignment1114434496->addShape(83, 0);\n    alignment1114434496->addShape(22, 0);\n    alignment1114434496->addShape(53, 0);\n    alignment1114434496->addShape(24, 0);\n    alignment1114434496->addShape(82, 0);\n    ccs.push_back(alignment1114434496);\n\n    AlignmentConstraint *alignment1114436928 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment1114436928->addShape(97, 0);\n    alignment1114436928->addShape(43, 0);\n    alignment1114436928->addShape(49, 0);\n    alignment1114436928->addShape(77, 0);\n    alignment1114436928->addShape(42, 0);\n    alignment1114436928->addShape(74, 0);\n    alignment1114436928->addShape(76, 0);\n    alignment1114436928->addShape(50, 0);\n    alignment1114436928->addShape(88, 0);\n    alignment1114436928->addShape(92, 0);\n    alignment1114436928->addShape(98, 0);\n    ccs.push_back(alignment1114436928);\n\n    AlignmentConstraint *alignment1114369232 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment1114369232->addShape(96, 0);\n    alignment1114369232->addShape(95, 0);\n    alignment1114369232->addShape(99, 0);\n    alignment1114369232->addShape(54, 0);\n    ccs.push_back(alignment1114369232);\n\n    AlignmentConstraint *alignment1114369456 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment1114369456->addShape(100, 0);\n    ccs.push_back(alignment1114369456);\n\n    AlignmentConstraint *alignment1114369616 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment1114369616->addShape(81, 0);\n    alignment1114369616->addShape(101, 0);\n    alignment1114369616->addShape(69, 0);\n    alignment1114369616->addShape(79, 0);\n    alignment1114369616->addShape(64, 0);\n    alignment1114369616->addShape(47, 0);\n    alignment1114369616->addShape(84, 0);\n    ccs.push_back(alignment1114369616);\n\n    AlignmentConstraint *alignment1114437392 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment1114437392->addShape(104, 0);\n    ccs.push_back(alignment1114437392);\n\n    AlignmentConstraint *alignment1100848528 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment1100848528->addShape(102, 0);\n    alignment1100848528->addShape(105, 0);\n    ccs.push_back(alignment1100848528);\n\n    AlignmentConstraint *alignment1100848752 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment1100848752->addShape(106, 0);\n    ccs.push_back(alignment1100848752);\n\n    AlignmentConstraint *alignment1100848880 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment1100848880->addShape(107, 0);\n    ccs.push_back(alignment1100848880);\n\n    AlignmentConstraint *alignment1100849040 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment1100849040->addShape(18, 0);\n    alignment1100849040->addShape(93, 0);\n    alignment1100849040->addShape(108, 0);\n    ccs.push_back(alignment1100849040);\n\n    SeparationConstraint *separation1100849264 = new SeparationConstraint(vpsc::YDIM, alignment1114431104, alignment1114433696, 30.1667, false);\n    ccs.push_back(separation1100849264);\n\n    SeparationConstraint *separation1100849360 = new SeparationConstraint(vpsc::YDIM, alignment1114433696, alignment1114374576, 8.33333, false);\n    ccs.push_back(separation1100849360);\n\n    SeparationConstraint *separation1100849536 = new SeparationConstraint(vpsc::YDIM, alignment1114374576, alignment1114431328, 18.3333, false);\n    ccs.push_back(separation1100849536);\n\n    SeparationConstraint *separation1100849712 = new SeparationConstraint(vpsc::YDIM, alignment1114431328, alignment1114374736, 6.66667, false);\n    ccs.push_back(separation1100849712);\n\n    SeparationConstraint *separation1100849888 = new SeparationConstraint(vpsc::YDIM, alignment1114374736, alignment1114374096, 3, false);\n    ccs.push_back(separation1100849888);\n\n    SeparationConstraint *separation1100850064 = new SeparationConstraint(vpsc::YDIM, alignment1114374096, alignment1114374256, 3, false);\n    ccs.push_back(separation1100850064);\n\n    SeparationConstraint *separation1100850240 = new SeparationConstraint(vpsc::YDIM, alignment1114374256, alignment1114374416, 23, false);\n    ccs.push_back(separation1100850240);\n\n    SeparationConstraint *separation1100850416 = new SeparationConstraint(vpsc::YDIM, alignment1114374416, alignment1114433360, 11.6, false);\n    ccs.push_back(separation1100850416);\n\n    SeparationConstraint *separation1100850592 = new SeparationConstraint(vpsc::YDIM, alignment1114433360, alignment1114373936, 9.4, false);\n    ccs.push_back(separation1100850592);\n\n    SeparationConstraint *separation1100850768 = new SeparationConstraint(vpsc::YDIM, alignment1114373936, alignment1100849040, 18.6667, false);\n    ccs.push_back(separation1100850768);\n\n    SeparationConstraint *separation1100850944 = new SeparationConstraint(vpsc::YDIM, alignment1100849040, alignment1114375216, 14.6667, false);\n    ccs.push_back(separation1100850944);\n\n    SeparationConstraint *separation1100851120 = new SeparationConstraint(vpsc::YDIM, alignment1114375216, alignment1114375488, 19.6667, false);\n    ccs.push_back(separation1100851120);\n\n    SeparationConstraint *separation1100851296 = new SeparationConstraint(vpsc::YDIM, alignment1114375488, alignment1114375056, 32, false);\n    ccs.push_back(separation1100851296);\n\n    SeparationConstraint *separation1100851472 = new SeparationConstraint(vpsc::YDIM, alignment1114375056, alignment1114432688, 10.8, false);\n    ccs.push_back(separation1100851472);\n\n    SeparationConstraint *separation1100851648 = new SeparationConstraint(vpsc::YDIM, alignment1114432688, alignment1114369456, 26.2, false);\n    ccs.push_back(separation1100851648);\n\n    SeparationConstraint *separation1100851824 = new SeparationConstraint(vpsc::YDIM, alignment1114369456, alignment1114375840, 7.5, false);\n    ccs.push_back(separation1100851824);\n\n    SeparationConstraint *separation1100852000 = new SeparationConstraint(vpsc::YDIM, alignment1114375840, alignment1114374896, 15.5, false);\n    ccs.push_back(separation1100852000);\n\n    SeparationConstraint *separation1100852176 = new SeparationConstraint(vpsc::YDIM, alignment1114374896, alignment1114433920, 18.4, false);\n    ccs.push_back(separation1100852176);\n\n    SeparationConstraint *separation1100852352 = new SeparationConstraint(vpsc::YDIM, alignment1114433920, alignment1114431760, 4.6, false);\n    ccs.push_back(separation1100852352);\n\n    SeparationConstraint *separation1100852528 = new SeparationConstraint(vpsc::YDIM, alignment1114431760, alignment1114429984, 25, false);\n    ccs.push_back(separation1100852528);\n\n    SeparationConstraint *separation1100852704 = new SeparationConstraint(vpsc::YDIM, alignment1114429984, alignment1114431568, 4.5, false);\n    ccs.push_back(separation1100852704);\n\n    SeparationConstraint *separation1100852880 = new SeparationConstraint(vpsc::YDIM, alignment1114431568, alignment1114375616, 3.5, false);\n    ccs.push_back(separation1100852880);\n\n    SeparationConstraint *separation1100853056 = new SeparationConstraint(vpsc::YDIM, alignment1114375616, alignment1114430752, 8, false);\n    ccs.push_back(separation1100853056);\n\n    SeparationConstraint *separation1100853232 = new SeparationConstraint(vpsc::YDIM, alignment1114430752, alignment1114430112, 29, false);\n    ccs.push_back(separation1100853232);\n\n    SeparationConstraint *separation1100853408 = new SeparationConstraint(vpsc::YDIM, alignment1114430112, alignment1114369616, 10.1429, false);\n    ccs.push_back(separation1100853408);\n\n    SeparationConstraint *separation1100853584 = new SeparationConstraint(vpsc::YDIM, alignment1114369616, alignment1114433040, 24.8571, false);\n    ccs.push_back(separation1100853584);\n\n    SeparationConstraint *separation1100853760 = new SeparationConstraint(vpsc::YDIM, alignment1114433040, alignment1114437392, 14, false);\n    ccs.push_back(separation1100853760);\n\n    SeparationConstraint *separation1100853936 = new SeparationConstraint(vpsc::YDIM, alignment1114437392, alignment1114430976, 4, false);\n    ccs.push_back(separation1100853936);\n\n    SeparationConstraint *separation1100854112 = new SeparationConstraint(vpsc::YDIM, alignment1114430976, alignment1114434272, 6.5, false);\n    ccs.push_back(separation1100854112);\n\n    SeparationConstraint *separation1100854288 = new SeparationConstraint(vpsc::YDIM, alignment1114434272, alignment1114433200, 9.5, false);\n    ccs.push_back(separation1100854288);\n\n    SeparationConstraint *separation1100854464 = new SeparationConstraint(vpsc::YDIM, alignment1114433200, alignment1100848528, 25, false);\n    ccs.push_back(separation1100854464);\n\n    SeparationConstraint *separation1100854640 = new SeparationConstraint(vpsc::YDIM, alignment1100848528, alignment1114434496, 9.42857, false);\n    ccs.push_back(separation1100854640);\n\n    SeparationConstraint *separation1100854816 = new SeparationConstraint(vpsc::YDIM, alignment1114434496, alignment1100848880, 23.5714, false);\n    ccs.push_back(separation1100854816);\n\n    SeparationConstraint *separation1100854992 = new SeparationConstraint(vpsc::YDIM, alignment1100848880, alignment1100848752, 43, false);\n    ccs.push_back(separation1100854992);\n\n    SeparationConstraint *separation1100855168 = new SeparationConstraint(vpsc::YDIM, alignment1100848752, alignment1114369232, 8.25, false);\n    ccs.push_back(separation1100855168);\n\n    SeparationConstraint *separation1100855344 = new SeparationConstraint(vpsc::YDIM, alignment1114369232, alignment1114430592, 33.75, false);\n    ccs.push_back(separation1100855344);\n\n    SeparationConstraint *separation1100855520 = new SeparationConstraint(vpsc::YDIM, alignment1114430592, alignment1114436928, 36.3636, false);\n    ccs.push_back(separation1100855520);\n\n    SeparationConstraint *separation1100855696 = new SeparationConstraint(vpsc::YDIM, alignment1114436928, alignment1114432048, 54.1364, false);\n    ccs.push_back(separation1100855696);\n\n    SeparationConstraint *separation1100855872 = new SeparationConstraint(vpsc::YDIM, alignment1114432048, alignment1114430272, 40.5, false);\n    ccs.push_back(separation1100855872);\n\n    SeparationConstraint *separation1100856048 = new SeparationConstraint(vpsc::YDIM, alignment1114430272, alignment1114430432, 25, false);\n    ccs.push_back(separation1100856048);\n\n    SeparationConstraint *separation1100856224 = new SeparationConstraint(vpsc::YDIM, alignment1114430432, alignment1114432464, 17, false);\n    ccs.push_back(separation1100856224);\n\n    SeparationConstraint *separation1100856400 = new SeparationConstraint(vpsc::YDIM, alignment1114432464, alignment1114431888, 33, false);\n    ccs.push_back(separation1100856400);\n\n    AlignmentConstraint *alignment1100856576 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment1100856576->addShape(0, 0);\n    alignment1100856576->addShape(109, 0);\n    ccs.push_back(alignment1100856576);\n\n    SeparationConstraint *separation1100856800 = new SeparationConstraint(vpsc::YDIM, 0, 109, 50, true);\n    ccs.push_back(separation1100856800);\n\n    AlignmentConstraint *alignment1100856944 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment1100856944->addShape(2, 0);\n    alignment1100856944->addShape(110, 0);\n    ccs.push_back(alignment1100856944);\n\n    SeparationConstraint *separation1100857168 = new SeparationConstraint(vpsc::YDIM, 2, 110, -50, true);\n    ccs.push_back(separation1100857168);\n\n    AlignmentConstraint *alignment1100857312 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment1100857312->addShape(3, 0);\n    alignment1100857312->addShape(111, 0);\n    ccs.push_back(alignment1100857312);\n\n    SeparationConstraint *separation1100857536 = new SeparationConstraint(vpsc::YDIM, 3, 111, -50, true);\n    ccs.push_back(separation1100857536);\n\n    AlignmentConstraint *alignment1100857680 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment1100857680->addShape(4, 0);\n    alignment1100857680->addShape(112, 0);\n    ccs.push_back(alignment1100857680);\n\n    SeparationConstraint *separation1100857904 = new SeparationConstraint(vpsc::XDIM, 4, 112, -62, true);\n    ccs.push_back(separation1100857904);\n\n    AlignmentConstraint *alignment1100858048 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment1100858048->addShape(5, 0);\n    alignment1100858048->addShape(113, 0);\n    ccs.push_back(alignment1100858048);\n\n    SeparationConstraint *separation1100858272 = new SeparationConstraint(vpsc::XDIM, 5, 113, 62, true);\n    ccs.push_back(separation1100858272);\n\n    AlignmentConstraint *alignment1100858416 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment1100858416->addShape(6, 0);\n    alignment1100858416->addShape(114, 0);\n    ccs.push_back(alignment1100858416);\n\n    SeparationConstraint *separation1100858640 = new SeparationConstraint(vpsc::YDIM, 6, 114, -50, true);\n    ccs.push_back(separation1100858640);\n\n    AlignmentConstraint *alignment1100858784 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment1100858784->addShape(7, 0);\n    alignment1100858784->addShape(115, 0);\n    ccs.push_back(alignment1100858784);\n\n    SeparationConstraint *separation1100859008 = new SeparationConstraint(vpsc::YDIM, 7, 115, -50, true);\n    ccs.push_back(separation1100859008);\n\n    AlignmentConstraint *alignment1100859152 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment1100859152->addShape(8, 0);\n    alignment1100859152->addShape(116, 0);\n    ccs.push_back(alignment1100859152);\n\n    SeparationConstraint *separation1100859376 = new SeparationConstraint(vpsc::YDIM, 8, 116, -50, true);\n    ccs.push_back(separation1100859376);\n\n    AlignmentConstraint *alignment1100859520 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment1100859520->addShape(9, 0);\n    alignment1100859520->addShape(117, 0);\n    ccs.push_back(alignment1100859520);\n\n    SeparationConstraint *separation1100859744 = new SeparationConstraint(vpsc::YDIM, 9, 117, -50, true);\n    ccs.push_back(separation1100859744);\n\n    AlignmentConstraint *alignment1100859888 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment1100859888->addShape(10, 0);\n    alignment1100859888->addShape(118, 0);\n    ccs.push_back(alignment1100859888);\n\n    SeparationConstraint *separation1100860112 = new SeparationConstraint(vpsc::YDIM, 10, 118, 50, true);\n    ccs.push_back(separation1100860112);\n\n    AlignmentConstraint *alignment1100860256 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment1100860256->addShape(11, 0);\n    alignment1100860256->addShape(119, 0);\n    ccs.push_back(alignment1100860256);\n\n    SeparationConstraint *separation1100860480 = new SeparationConstraint(vpsc::YDIM, 11, 119, -50, true);\n    ccs.push_back(separation1100860480);\n\n    AlignmentConstraint *alignment1100860624 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment1100860624->addShape(12, 0);\n    alignment1100860624->addShape(120, 0);\n    ccs.push_back(alignment1100860624);\n\n    SeparationConstraint *separation1100860848 = new SeparationConstraint(vpsc::YDIM, 12, 120, -50, true);\n    ccs.push_back(separation1100860848);\n\n    AlignmentConstraint *alignment1100860992 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment1100860992->addShape(13, 0);\n    alignment1100860992->addShape(121, 0);\n    ccs.push_back(alignment1100860992);\n\n    SeparationConstraint *separation1100861216 = new SeparationConstraint(vpsc::YDIM, 13, 121, -50, true);\n    ccs.push_back(separation1100861216);\n\n    AlignmentConstraint *alignment1100861360 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment1100861360->addShape(14, 0);\n    alignment1100861360->addShape(122, 0);\n    ccs.push_back(alignment1100861360);\n\n    SeparationConstraint *separation1100861584 = new SeparationConstraint(vpsc::YDIM, 14, 122, -50, true);\n    ccs.push_back(separation1100861584);\n\n    AlignmentConstraint *alignment1100861728 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment1100861728->addShape(15, 0);\n    alignment1100861728->addShape(123, 0);\n    ccs.push_back(alignment1100861728);\n\n    SeparationConstraint *separation1100861952 = new SeparationConstraint(vpsc::YDIM, 15, 123, -50, true);\n    ccs.push_back(separation1100861952);\n\n    AlignmentConstraint *alignment1100862096 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment1100862096->addShape(16, 0);\n    alignment1100862096->addShape(124, 0);\n    ccs.push_back(alignment1100862096);\n\n    SeparationConstraint *separation1100862320 = new SeparationConstraint(vpsc::XDIM, 16, 124, -62, true);\n    ccs.push_back(separation1100862320);\n\n    AlignmentConstraint *alignment1100862464 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment1100862464->addShape(17, 0);\n    alignment1100862464->addShape(125, 0);\n    ccs.push_back(alignment1100862464);\n\n    SeparationConstraint *separation1100862688 = new SeparationConstraint(vpsc::XDIM, 17, 125, 62, true);\n    ccs.push_back(separation1100862688);\n\n    AlignmentConstraint *alignment1100862832 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment1100862832->addShape(18, 0);\n    alignment1100862832->addShape(126, 0);\n    ccs.push_back(alignment1100862832);\n\n    SeparationConstraint *separation1100863056 = new SeparationConstraint(vpsc::XDIM, 18, 126, 62, true);\n    ccs.push_back(separation1100863056);\n\n    AlignmentConstraint *alignment1100863200 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment1100863200->addShape(19, 0);\n    alignment1100863200->addShape(127, 0);\n    ccs.push_back(alignment1100863200);\n\n    SeparationConstraint *separation1100863424 = new SeparationConstraint(vpsc::YDIM, 19, 127, 50, true);\n    ccs.push_back(separation1100863424);\n\n    AlignmentConstraint *alignment1100863568 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment1100863568->addShape(20, 0);\n    alignment1100863568->addShape(128, 0);\n    ccs.push_back(alignment1100863568);\n\n    SeparationConstraint *separation1100863792 = new SeparationConstraint(vpsc::XDIM, 20, 128, 62, true);\n    ccs.push_back(separation1100863792);\n\n    AlignmentConstraint *alignment1100863936 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment1100863936->addShape(21, 0);\n    alignment1100863936->addShape(129, 0);\n    ccs.push_back(alignment1100863936);\n\n    SeparationConstraint *separation1100864160 = new SeparationConstraint(vpsc::YDIM, 21, 129, -50, true);\n    ccs.push_back(separation1100864160);\n\n    AlignmentConstraint *alignment1100864304 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment1100864304->addShape(22, 0);\n    alignment1100864304->addShape(130, 0);\n    ccs.push_back(alignment1100864304);\n\n    SeparationConstraint *separation1100864528 = new SeparationConstraint(vpsc::YDIM, 22, 130, -50, true);\n    ccs.push_back(separation1100864528);\n\n    AlignmentConstraint *alignment1100864672 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment1100864672->addShape(24, 0);\n    alignment1100864672->addShape(131, 0);\n    ccs.push_back(alignment1100864672);\n\n    SeparationConstraint *separation1100864896 = new SeparationConstraint(vpsc::YDIM, 24, 131, -50, true);\n    ccs.push_back(separation1100864896);\n\n    AlignmentConstraint *alignment1100865040 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment1100865040->addShape(25, 0);\n    alignment1100865040->addShape(132, 0);\n    ccs.push_back(alignment1100865040);\n\n    SeparationConstraint *separation1100865264 = new SeparationConstraint(vpsc::YDIM, 25, 132, -50, true);\n    ccs.push_back(separation1100865264);\n\n    AlignmentConstraint *alignment1100865408 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment1100865408->addShape(26, 0);\n    alignment1100865408->addShape(133, 0);\n    ccs.push_back(alignment1100865408);\n\n    SeparationConstraint *separation1100865632 = new SeparationConstraint(vpsc::XDIM, 26, 133, -62, true);\n    ccs.push_back(separation1100865632);\n\n    AlignmentConstraint *alignment1100865776 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment1100865776->addShape(27, 0);\n    alignment1100865776->addShape(134, 0);\n    ccs.push_back(alignment1100865776);\n\n    SeparationConstraint *separation1100866000 = new SeparationConstraint(vpsc::XDIM, 27, 134, 62, true);\n    ccs.push_back(separation1100866000);\n\n    AlignmentConstraint *alignment1100866144 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment1100866144->addShape(28, 0);\n    alignment1100866144->addShape(135, 0);\n    ccs.push_back(alignment1100866144);\n\n    SeparationConstraint *separation1100866368 = new SeparationConstraint(vpsc::XDIM, 28, 135, 62, true);\n    ccs.push_back(separation1100866368);\n\n    AlignmentConstraint *alignment1100866512 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment1100866512->addShape(29, 0);\n    alignment1100866512->addShape(136, 0);\n    ccs.push_back(alignment1100866512);\n\n    SeparationConstraint *separation1100866736 = new SeparationConstraint(vpsc::XDIM, 29, 136, 62, true);\n    ccs.push_back(separation1100866736);\n\n    AlignmentConstraint *alignment1100866880 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment1100866880->addShape(30, 0);\n    alignment1100866880->addShape(137, 0);\n    ccs.push_back(alignment1100866880);\n\n    SeparationConstraint *separation1100867104 = new SeparationConstraint(vpsc::XDIM, 30, 137, 62, true);\n    ccs.push_back(separation1100867104);\n\n    AlignmentConstraint *alignment1100867248 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment1100867248->addShape(31, 0);\n    alignment1100867248->addShape(138, 0);\n    ccs.push_back(alignment1100867248);\n\n    SeparationConstraint *separation1100867472 = new SeparationConstraint(vpsc::XDIM, 31, 138, 62, true);\n    ccs.push_back(separation1100867472);\n\n    AlignmentConstraint *alignment1100867616 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment1100867616->addShape(32, 0);\n    alignment1100867616->addShape(139, 0);\n    ccs.push_back(alignment1100867616);\n\n    SeparationConstraint *separation1100867840 = new SeparationConstraint(vpsc::YDIM, 32, 139, -50, true);\n    ccs.push_back(separation1100867840);\n\n    AlignmentConstraint *alignment1100867984 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment1100867984->addShape(33, 0);\n    alignment1100867984->addShape(140, 0);\n    ccs.push_back(alignment1100867984);\n\n    SeparationConstraint *separation1100868208 = new SeparationConstraint(vpsc::YDIM, 33, 140, 50, true);\n    ccs.push_back(separation1100868208);\n\n    AlignmentConstraint *alignment1100868352 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment1100868352->addShape(34, 0);\n    alignment1100868352->addShape(141, 0);\n    ccs.push_back(alignment1100868352);\n\n    SeparationConstraint *separation1100868576 = new SeparationConstraint(vpsc::YDIM, 34, 141, -50, true);\n    ccs.push_back(separation1100868576);\n\n    AlignmentConstraint *alignment1100868720 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment1100868720->addShape(35, 0);\n    alignment1100868720->addShape(142, 0);\n    ccs.push_back(alignment1100868720);\n\n    SeparationConstraint *separation1100868944 = new SeparationConstraint(vpsc::XDIM, 35, 142, 62, true);\n    ccs.push_back(separation1100868944);\n\n    AlignmentConstraint *alignment1100869088 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment1100869088->addShape(36, 0);\n    alignment1100869088->addShape(143, 0);\n    ccs.push_back(alignment1100869088);\n\n    SeparationConstraint *separation1100869312 = new SeparationConstraint(vpsc::XDIM, 36, 143, 62, true);\n    ccs.push_back(separation1100869312);\n\n    AlignmentConstraint *alignment1100869456 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment1100869456->addShape(39, 0);\n    alignment1100869456->addShape(144, 0);\n    ccs.push_back(alignment1100869456);\n\n    SeparationConstraint *separation1100869680 = new SeparationConstraint(vpsc::YDIM, 39, 144, -50, true);\n    ccs.push_back(separation1100869680);\n\n    AlignmentConstraint *alignment1100869824 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment1100869824->addShape(40, 0);\n    alignment1100869824->addShape(145, 0);\n    ccs.push_back(alignment1100869824);\n\n    SeparationConstraint *separation1100870048 = new SeparationConstraint(vpsc::YDIM, 40, 145, -50, true);\n    ccs.push_back(separation1100870048);\n\n    AlignmentConstraint *alignment1100870192 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment1100870192->addShape(41, 0);\n    alignment1100870192->addShape(146, 0);\n    ccs.push_back(alignment1100870192);\n\n    SeparationConstraint *separation1100870416 = new SeparationConstraint(vpsc::XDIM, 41, 146, 62, true);\n    ccs.push_back(separation1100870416);\n\n    AlignmentConstraint *alignment1100870560 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment1100870560->addShape(42, 0);\n    alignment1100870560->addShape(147, 0);\n    ccs.push_back(alignment1100870560);\n\n    SeparationConstraint *separation1100870784 = new SeparationConstraint(vpsc::YDIM, 42, 147, -50, true);\n    ccs.push_back(separation1100870784);\n\n    AlignmentConstraint *alignment1114434864 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment1114434864->addShape(43, 0);\n    alignment1114434864->addShape(148, 0);\n    ccs.push_back(alignment1114434864);\n\n    SeparationConstraint *separation1114435088 = new SeparationConstraint(vpsc::YDIM, 43, 148, -50, true);\n    ccs.push_back(separation1114435088);\n\n    AlignmentConstraint *alignment1114435232 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment1114435232->addShape(44, 0);\n    alignment1114435232->addShape(149, 0);\n    ccs.push_back(alignment1114435232);\n\n    SeparationConstraint *separation1114435456 = new SeparationConstraint(vpsc::XDIM, 44, 149, -62, true);\n    ccs.push_back(separation1114435456);\n\n    AlignmentConstraint *alignment1114435600 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment1114435600->addShape(47, 0);\n    alignment1114435600->addShape(150, 0);\n    ccs.push_back(alignment1114435600);\n\n    SeparationConstraint *separation1114435824 = new SeparationConstraint(vpsc::YDIM, 47, 150, -50, true);\n    ccs.push_back(separation1114435824);\n\n    AlignmentConstraint *alignment1114435968 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment1114435968->addShape(48, 0);\n    alignment1114435968->addShape(151, 0);\n    ccs.push_back(alignment1114435968);\n\n    SeparationConstraint *separation1114436192 = new SeparationConstraint(vpsc::YDIM, 48, 151, -50, true);\n    ccs.push_back(separation1114436192);\n\n    AlignmentConstraint *alignment1114436336 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment1114436336->addShape(49, 0);\n    alignment1114436336->addShape(152, 0);\n    ccs.push_back(alignment1114436336);\n\n    SeparationConstraint *separation1114436560 = new SeparationConstraint(vpsc::YDIM, 49, 152, -50, true);\n    ccs.push_back(separation1114436560);\n\n    AlignmentConstraint *alignment1114436704 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment1114436704->addShape(50, 0);\n    alignment1114436704->addShape(153, 0);\n    ccs.push_back(alignment1114436704);\n\n    SeparationConstraint *separation1100875040 = new SeparationConstraint(vpsc::YDIM, 50, 153, -50, true);\n    ccs.push_back(separation1100875040);\n\n    AlignmentConstraint *alignment1100875184 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment1100875184->addShape(51, 0);\n    alignment1100875184->addShape(154, 0);\n    ccs.push_back(alignment1100875184);\n\n    SeparationConstraint *separation1100875408 = new SeparationConstraint(vpsc::XDIM, 51, 154, 62, true);\n    ccs.push_back(separation1100875408);\n\n    AlignmentConstraint *alignment1100875552 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment1100875552->addShape(52, 0);\n    alignment1100875552->addShape(155, 0);\n    ccs.push_back(alignment1100875552);\n\n    SeparationConstraint *separation1100875776 = new SeparationConstraint(vpsc::XDIM, 52, 155, 62, true);\n    ccs.push_back(separation1100875776);\n\n    AlignmentConstraint *alignment1100875920 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment1100875920->addShape(53, 0);\n    alignment1100875920->addShape(156, 0);\n    ccs.push_back(alignment1100875920);\n\n    SeparationConstraint *separation1100876144 = new SeparationConstraint(vpsc::YDIM, 53, 156, -50, true);\n    ccs.push_back(separation1100876144);\n\n    AlignmentConstraint *alignment1100876288 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment1100876288->addShape(54, 0);\n    alignment1100876288->addShape(157, 0);\n    ccs.push_back(alignment1100876288);\n\n    SeparationConstraint *separation1100876512 = new SeparationConstraint(vpsc::XDIM, 54, 157, 62, true);\n    ccs.push_back(separation1100876512);\n\n    AlignmentConstraint *alignment1100876656 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment1100876656->addShape(104, 0);\n    alignment1100876656->addShape(158, 0);\n    ccs.push_back(alignment1100876656);\n\n    SeparationConstraint *separation1100876880 = new SeparationConstraint(vpsc::XDIM, 104, 158, 62, true);\n    ccs.push_back(separation1100876880);\n\n    AlignmentConstraint *alignment1100877024 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment1100877024->addShape(107, 0);\n    alignment1100877024->addShape(159, 0);\n    ccs.push_back(alignment1100877024);\n\n    SeparationConstraint *separation1100877248 = new SeparationConstraint(vpsc::XDIM, 107, 159, 62, true);\n    ccs.push_back(separation1100877248);\n\n    AlignmentConstraint *alignment1100877392 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment1100877392->addShape(108, 0);\n    alignment1100877392->addShape(160, 0);\n    ccs.push_back(alignment1100877392);\n\n    SeparationConstraint *separation1100877616 = new SeparationConstraint(vpsc::YDIM, 108, 160, -50, true);\n    ccs.push_back(separation1100877616);\n\n    ConstrainedFDLayout alg(rs, es, defaultEdgeLength);\n    alg.setAvoidNodeOverlaps(true);\n    RootCluster *cluster1100877760 = new RootCluster();\n    cluster1100877760->addChildNode(0);\n    cluster1100877760->addChildNode(2);\n    cluster1100877760->addChildNode(3);\n    cluster1100877760->addChildNode(4);\n    cluster1100877760->addChildNode(5);\n    cluster1100877760->addChildNode(6);\n    cluster1100877760->addChildNode(7);\n    cluster1100877760->addChildNode(8);\n    cluster1100877760->addChildNode(9);\n    cluster1100877760->addChildNode(10);\n    cluster1100877760->addChildNode(11);\n    cluster1100877760->addChildNode(12);\n    cluster1100877760->addChildNode(13);\n    cluster1100877760->addChildNode(14);\n    cluster1100877760->addChildNode(15);\n    cluster1100877760->addChildNode(16);\n    cluster1100877760->addChildNode(17);\n    cluster1100877760->addChildNode(18);\n    cluster1100877760->addChildNode(19);\n    cluster1100877760->addChildNode(20);\n    cluster1100877760->addChildNode(21);\n    cluster1100877760->addChildNode(22);\n    cluster1100877760->addChildNode(23);\n    cluster1100877760->addChildNode(24);\n    cluster1100877760->addChildNode(25);\n    cluster1100877760->addChildNode(26);\n    cluster1100877760->addChildNode(27);\n    cluster1100877760->addChildNode(28);\n    cluster1100877760->addChildNode(29);\n    cluster1100877760->addChildNode(30);\n    cluster1100877760->addChildNode(31);\n    cluster1100877760->addChildNode(32);\n    cluster1100877760->addChildNode(33);\n    cluster1100877760->addChildNode(34);\n    cluster1100877760->addChildNode(35);\n    cluster1100877760->addChildNode(36);\n    cluster1100877760->addChildNode(39);\n    cluster1100877760->addChildNode(40);\n    cluster1100877760->addChildNode(41);\n    cluster1100877760->addChildNode(42);\n    cluster1100877760->addChildNode(43);\n    cluster1100877760->addChildNode(44);\n    cluster1100877760->addChildNode(47);\n    cluster1100877760->addChildNode(48);\n    cluster1100877760->addChildNode(49);\n    cluster1100877760->addChildNode(50);\n    cluster1100877760->addChildNode(51);\n    cluster1100877760->addChildNode(52);\n    cluster1100877760->addChildNode(53);\n    cluster1100877760->addChildNode(54);\n    cluster1100877760->addChildNode(55);\n    cluster1100877760->addChildNode(56);\n    cluster1100877760->addChildNode(57);\n    cluster1100877760->addChildNode(58);\n    cluster1100877760->addChildNode(59);\n    cluster1100877760->addChildNode(60);\n    cluster1100877760->addChildNode(61);\n    cluster1100877760->addChildNode(62);\n    cluster1100877760->addChildNode(63);\n    cluster1100877760->addChildNode(64);\n    cluster1100877760->addChildNode(65);\n    cluster1100877760->addChildNode(66);\n    cluster1100877760->addChildNode(67);\n    cluster1100877760->addChildNode(68);\n    cluster1100877760->addChildNode(69);\n    cluster1100877760->addChildNode(70);\n    cluster1100877760->addChildNode(71);\n    cluster1100877760->addChildNode(72);\n    cluster1100877760->addChildNode(73);\n    cluster1100877760->addChildNode(74);\n    cluster1100877760->addChildNode(75);\n    cluster1100877760->addChildNode(76);\n    cluster1100877760->addChildNode(77);\n    cluster1100877760->addChildNode(78);\n    cluster1100877760->addChildNode(79);\n    cluster1100877760->addChildNode(80);\n    cluster1100877760->addChildNode(81);\n    cluster1100877760->addChildNode(82);\n    cluster1100877760->addChildNode(83);\n    cluster1100877760->addChildNode(84);\n    cluster1100877760->addChildNode(85);\n    cluster1100877760->addChildNode(86);\n    cluster1100877760->addChildNode(87);\n    cluster1100877760->addChildNode(88);\n    cluster1100877760->addChildNode(89);\n    cluster1100877760->addChildNode(90);\n    cluster1100877760->addChildNode(91);\n    cluster1100877760->addChildNode(92);\n    cluster1100877760->addChildNode(93);\n    cluster1100877760->addChildNode(94);\n    cluster1100877760->addChildNode(95);\n    cluster1100877760->addChildNode(96);\n    cluster1100877760->addChildNode(97);\n    cluster1100877760->addChildNode(98);\n    cluster1100877760->addChildNode(99);\n    cluster1100877760->addChildNode(100);\n    cluster1100877760->addChildNode(101);\n    cluster1100877760->addChildNode(102);\n    cluster1100877760->addChildNode(104);\n    cluster1100877760->addChildNode(105);\n    cluster1100877760->addChildNode(106);\n    cluster1100877760->addChildNode(107);\n    cluster1100877760->addChildNode(108);\n    cluster1100877760->addChildNode(109);\n    cluster1100877760->addChildNode(110);\n    cluster1100877760->addChildNode(111);\n    cluster1100877760->addChildNode(112);\n    cluster1100877760->addChildNode(113);\n    cluster1100877760->addChildNode(114);\n    cluster1100877760->addChildNode(115);\n    cluster1100877760->addChildNode(116);\n    cluster1100877760->addChildNode(117);\n    cluster1100877760->addChildNode(118);\n    cluster1100877760->addChildNode(119);\n    cluster1100877760->addChildNode(120);\n    cluster1100877760->addChildNode(121);\n    cluster1100877760->addChildNode(122);\n    cluster1100877760->addChildNode(123);\n    cluster1100877760->addChildNode(124);\n    cluster1100877760->addChildNode(125);\n    cluster1100877760->addChildNode(126);\n    cluster1100877760->addChildNode(127);\n    cluster1100877760->addChildNode(128);\n    cluster1100877760->addChildNode(129);\n    cluster1100877760->addChildNode(130);\n    cluster1100877760->addChildNode(131);\n    cluster1100877760->addChildNode(132);\n    cluster1100877760->addChildNode(133);\n    cluster1100877760->addChildNode(134);\n    cluster1100877760->addChildNode(135);\n    cluster1100877760->addChildNode(136);\n    cluster1100877760->addChildNode(137);\n    cluster1100877760->addChildNode(138);\n    cluster1100877760->addChildNode(139);\n    cluster1100877760->addChildNode(140);\n    cluster1100877760->addChildNode(141);\n    cluster1100877760->addChildNode(142);\n    cluster1100877760->addChildNode(143);\n    cluster1100877760->addChildNode(144);\n    cluster1100877760->addChildNode(145);\n    cluster1100877760->addChildNode(146);\n    cluster1100877760->addChildNode(147);\n    cluster1100877760->addChildNode(148);\n    cluster1100877760->addChildNode(149);\n    cluster1100877760->addChildNode(150);\n    cluster1100877760->addChildNode(151);\n    cluster1100877760->addChildNode(152);\n    cluster1100877760->addChildNode(153);\n    cluster1100877760->addChildNode(154);\n    cluster1100877760->addChildNode(155);\n    cluster1100877760->addChildNode(156);\n    cluster1100877760->addChildNode(157);\n    cluster1100877760->addChildNode(158);\n    cluster1100877760->addChildNode(159);\n    cluster1100877760->addChildNode(160);\n    RectangularCluster *cluster1100878032 = new RectangularCluster();\n    cluster1100878032->addChildNode(161);\n    cluster1100877760->addChildCluster(cluster1100878032);\n    RectangularCluster *cluster1100878416 = new RectangularCluster();\n    cluster1100878416->addChildNode(162);\n    cluster1100877760->addChildCluster(cluster1100878416);\n    RectangularCluster *cluster1100878800 = new RectangularCluster();\n    cluster1100878800->addChildNode(163);\n    cluster1100877760->addChildCluster(cluster1100878800);\n    RectangularCluster *cluster1100879168 = new RectangularCluster();\n    cluster1100877760->addChildCluster(cluster1100879168);\n    RectangularCluster *cluster1100879488 = new RectangularCluster();\n    cluster1100879488->addChildNode(164);\n    cluster1100879488->addChildNode(165);\n    cluster1100879488->addChildNode(166);\n    cluster1100879488->addChildNode(167);\n    cluster1100877760->addChildCluster(cluster1100879488);\n    RectangularCluster *cluster1100879920 = new RectangularCluster();\n    cluster1100879920->addChildNode(168);\n    cluster1100877760->addChildCluster(cluster1100879920);\n    alg.setClusterHierarchy(cluster1100877760);\n    alg.setConstraints(ccs);\n    alg.makeFeasible();\n    alg.run();\n    alg.outputInstanceToSVG(\"test-StillOverlap02\");\n    alg.freeAssociatedObjects();\n    return 0;\n};\n"
  },
  {
    "path": "cola/libcola/tests/boundary.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libcola - A library providing force-directed network layout using the \n *           stress-majorization method subject to separation constraints.\n *\n * Copyright (C) 2006-2008  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library in the file LICENSE; if not, \n * write to the Free Software Foundation, Inc., 59 Temple Place, \n * Suite 330, Boston, MA  02111-1307  USA\n *\n*/\n\n/** \\file boundary.cpp\n *\n * a clustered graph using libtopology to preserve the cluster boundary.\n */\n/*\n* Authors:\n*   Tim Dwyer <tgdwyer@gmail.com>\n*/\n#include <iostream>\n#include <iomanip>\n#include <fstream>\n\n#include <vector>\n#include <valarray>\n#include <algorithm>\n#include <float.h>\n#include \"graphlayouttest.h\"\n#include <libtopology/topology_graph.h>\n#include <libproject/project.h>\nusing namespace std;\nusing namespace topology;\n\nNode* addNode( Nodes& vs, vpsc::Rectangle* r) {\n    Node *v = new Node(vs.size(), r);\n    vs.push_back(v);\n    return v;\n}\nvoid addToPath(EdgePoints& ps, Node *v, EdgePoint::RectIntersect i) {\n    ps.push_back(new EdgePoint(v,i));\n}\nstruct SetDesiredPos : public PreIteration {\n    SetDesiredPos(Locks& locks) : PreIteration(locks) {}\n};\nstruct Test : TestConvergence {\n    Test(const double d,const unsigned i,topology::Nodes& vs, topology::Edges& es,const string fname) : TestConvergence(d,i), vs(vs), es(es), fname(fname) {}\n    bool operator()(const double new_stress, valarray<double> & X, valarray<double> & Y) {\n        bool converged= TestConvergence::operator()(new_stress,X,Y);\n        if(converged) {\n            cerr << \"stress=\"<<new_stress<<\" iteration=\"<<iterations<<endl;\n            stringstream ss;\n            ss << fname << \"-\" << setfill('0') << setw(3) << iterations << \".svg\";\n            cerr << \"writing file: \" << ss.str() << endl;\n            writeFile(vs,es,ss.str());\n        }\n        return converged;\n    }\n    double lastStress;\n    topology::Nodes& vs;\n    topology::Edges& es;\n    const string fname;\n};\nvoid clusterBoundary() {\n    vector<cola::Edge> es;\n    vector<vpsc::Rectangle*> rs;\n    rs.push_back(new vpsc::Rectangle(395,449,155,189));\n    rs.push_back(new vpsc::Rectangle(309,363,155,189));\n    double idealLength=60;\n    // set up topology graph\n    topology::Nodes vs;\n    for(vector<Rectangle*>::iterator i = rs.begin(); i!=rs.end();++i) {\n        addNode(vs,*i);\n    }\n    Edges tes;\n    EdgePoints ps;\n    addToPath(ps,vs[1],EdgePoint::BL);\n    addToPath(ps,vs[0],EdgePoint::BR);\n    addToPath(ps,vs[0],EdgePoint::TR);\n    addToPath(ps,vs[1],EdgePoint::TL);\n    ps.push_back(ps[0]);\n    tes.push_back(new topology::Edge(idealLength, ps));\n\n    writeFile(vs,tes,\"boundary-000.svg\");\n\n    Locks locks;\n    locks.push_back(Lock(0,rs[0]->getCentreX(), rs[0]->getCentreY()+10));\n    locks.push_back(Lock(1,rs[1]->getCentreX(), rs[1]->getCentreY()));\n    SetDesiredPos preIteration(locks);\n\n    Test test(0.00001,100,vs,tes,\"boundary\");\n    cola::ConstrainedFDLayout alg(rs,es,idealLength,nullptr,test,&preIteration);\n\n    alg.setTopology(&vs,&tes);\n    alg.run(true,true);\n    double finalStress=alg.computeStress();\n    printf(\"finalStress=%f\\n\",finalStress);\n\n    //assert(finalStress<1e-5);\n    for_each(rs.begin(),rs.end(),cola::delete_object());\n    for_each(tes.begin(),tes.end(),cola::delete_object());\n    for_each(vs.begin(),vs.end(),cola::delete_object());\n}\nint main() {\n    clusterBoundary();\n    return 0;\n}\n// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=4:softtabstop=4:textwidth=80 :\n"
  },
  {
    "path": "cola/libcola/tests/connected_components.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libcola - A library providing force-directed network layout using the \n *           stress-majorization method subject to separation constraints.\n *\n * Copyright (C) 2006-2008  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library in the file LICENSE; if not, \n * write to the Free Software Foundation, Inc., 59 Temple Place, \n * Suite 330, Boston, MA  02111-1307  USA\n *\n*/\n\n#include <iostream>\n#include <vector>\n#include <set>\n#include <libvpsc/rectangle.h>\n#include <libcola/cola.h>\n#include <libcola/connected_components.h>\n#include \"graphlayouttest.h\"\n\nusing namespace std;\nusing namespace cola;\n\nint main() {\n\tconst unsigned V = 7;\n\tunsigned c1[]={0,1,2,3};\n\tset<unsigned> expected_c1(c1,c1+4);\n\tunsigned c2[]={4,5,6};\n\tset<unsigned> expected_c2(c2,c2+3);\n\n\tEdge edge_array[] = { Edge(0, 1), Edge(1, 2), Edge(3, 2), Edge(1, 3),\n        \t\t      Edge(4, 5), Edge(5, 6), Edge(6, 4)\t};\n\tconst std::size_t E = sizeof(edge_array) / sizeof(Edge);\n\tvector<Edge> es(edge_array,edge_array+E);\n\tvector<Component*> cs;\n\tvpsc::Rectangles rs;\n\tdouble width=100,height=100;\n\tfor(unsigned i=0;i<V;i++) {\n\t\tdouble x=getRand(width), y=getRand(height);\n\t\trs.push_back(new vpsc::Rectangle(x,x+5,y,y+5));\n\t}\n\tconnectedComponents(rs,es,cs);\n\tset<unsigned> result_c1(cs[0]->node_ids.begin(),cs[0]->node_ids.end());\n\tset<unsigned> result_c2(cs[1]->node_ids.begin(),cs[1]->node_ids.end());\n\tassert(expected_c1==result_c1);\n\tassert(expected_c2==result_c2);\n\tfor(unsigned i=0;i<cs.size();i++) {\n\t\tprintf(\"Component %d:\\n\",i);\n\t\tfor(unsigned j=0;j<cs[i]->edges.size();j++) {\n\t\t\tEdge& e=cs[i]->edges[j];\n\t\t\tprintf(\"(%d,%d) \",e.first,e.second);\n\t\t}\n\t\tcout << endl;\n\t}\n\treturn 0;\n}\n"
  },
  {
    "path": "cola/libcola/tests/constrained.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libcola - A library providing force-directed network layout using the \n *           stress-majorization method subject to separation constraints.\n *\n * Copyright (C) 2006-2008  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library in the file LICENSE; if not, \n * write to the Free Software Foundation, Inc., 59 Temple Place, \n * Suite 330, Boston, MA  02111-1307  USA\n *\n*/\n\n/** \\file constrained.cpp\n *\n * runs constraint layout on a small graph.  nodes 0 and 3 are constrained\n * to a vertical line\n *\n *\n * Authors:\n *   Tim Dwyer <tgdwyer@gmail.com>\n */\n#include <iostream>\n\n#include <vector>\n#include <algorithm>\n#include <float.h>\n#include <libcola/cola.h>\n#include <libcola/output_svg.h>\ninline double getRand(double range) {\n\treturn range*rand()/RAND_MAX;\n}\n\nusing namespace std;\nusing namespace cola;\n/** \n* \\brief Determines when to terminate layout of a particular graph based\n* on a given relative tolerance. \n*/\nint main() {\n\n\tconst unsigned V = 4;\n\ttypedef pair < unsigned, unsigned >Edge;\n\tEdge edge_array[] = { Edge(0, 1), Edge(1, 2), Edge(2, 3), Edge(1, 3) };\n\tunsigned E = sizeof(edge_array) / sizeof(Edge);\n\tvector<Edge> es(edge_array,edge_array+E);\n\tdouble width=100;\n\tdouble height=100;\n\tvector<vpsc::Rectangle*> rs;\n\tfor(unsigned i=0;i<V;i++) {\n\t\tdouble x=getRand(width), y=getRand(height);\n\t\trs.push_back(new vpsc::Rectangle(x,x+5,y,y+5));\n\t}\n\tCompoundConstraints ccs;\n\tAlignmentConstraint ac(vpsc::XDIM);\n\tccs.push_back(&ac);\n\tac.addShape(0,0);\n\tac.addShape(3,0);\n\t// apply steepest descent layout\n\tConstrainedFDLayout alg2(rs,es,width/2);\n\talg2.setConstraints(ccs);\n\talg2.run();\n\tassert(alg2.computeStress()<0.0013);\n\t// the following pair of nodes should line-up\n\tassert(fabs(rs[0]->getCentreX()-rs[3]->getCentreX())<0.001);\n\t// reset rectangles to random positions\n\tfor(unsigned i=0;i<V;i++) {\n\t\tdouble x=getRand(width), y=getRand(height);\n\t\trs[i]->moveCentre(x,y);\n\t}\n\t// apply scaled majorization layout\n\tConstrainedMajorizationLayout alg(rs,es,nullptr,width/2);\n\talg.setConstraints(&ccs);\n\talg.setScaling(true);\n\talg.run();\n\t// the following pair of nodes should line-up\n\tassert(fabs(rs[0]->getCentreX()-rs[3]->getCentreX())<0.001);\n\tcout<<rs[0]->getCentreX()<<\",\"<<rs[3]->getCentreX()<<endl;\n\tOutputFile output(rs,es,nullptr,\"constrained.svg\");\n\toutput.rects=true;\n\toutput.generate();\n\n\tfor(unsigned i=0;i<V;i++) {\n\t\tdelete rs[i];\n\t}\n    return 0;\n}\n"
  },
  {
    "path": "cola/libcola/tests/containment.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libcola - A library providing force-directed network layout using the \n *           stress-majorization method subject to separation constraints.\n *\n * Copyright (C) 2006-2008  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library in the file LICENSE; if not, \n * write to the Free Software Foundation, Inc., 59 Temple Place, \n * Suite 330, Boston, MA  02111-1307  USA\n *\n*/\n\n/** \\file containment.cpp\n *\n * simple test of clustered graph layout\n *\n * Authors:\n *   Tim Dwyer <tgdwyer@gmail.com>\n */\n#include <iostream>\n\n#include <map>\n#include <vector>\n#include <algorithm>\n#include <float.h>\n#include <iomanip>\n#include <libcola/cola.h>\n#include <libcola/output_svg.h>\n#include \"graphlayouttest.h\"\n\nusing namespace cola;\nusing namespace std;\n\nvector<vpsc::Rectangle*> rs;\nvector<Edge> es;\nRectangularCluster rc, rd;\nRootCluster root;\nunsigned iteration=0;\n\nint main() {\n\n\tconst unsigned V = 5;\n\ttypedef pair < unsigned, unsigned >Edge;\n\tEdge edge_array[] = { Edge(0, 1), Edge(1, 2), Edge(2, 3), Edge(3, 4) };\n\tconst std::size_t E = sizeof(edge_array) / sizeof(Edge);\n\tes.resize(E);\n\tcopy(edge_array,edge_array+E,es.begin());\n\tdouble width=100;\n\tdouble height=100;\n\tfor(unsigned i=0;i<V;i++) {\n\t\tdouble x=getRand(width), y=getRand(height);\n\t\trs.push_back(new vpsc::Rectangle(x,x+20,y,y+15));\n\t}\n\n\tconst unsigned c[]={0,4}, d[]={1,2,3};\n\tunsigned nc=sizeof(c)/sizeof(unsigned), nd=sizeof(d)/sizeof(unsigned);\n\tCheckProgress test(0.0001,100);\n\tConstrainedMajorizationLayout alg(rs,es,&root,30,nullptr,test);\n    alg.setScaling(true);\n\trc.nodes.resize(nc);\n\tcopy(c,c+nc,rc.nodes.begin());\n\trd.nodes.resize(nd);\n\tcopy(d,d+nd,rd.nodes.begin());\n\troot.clusters.push_back(&rc);\n\troot.clusters.push_back(&rd);\n\talg.run();\n\talg.setAvoidOverlaps();\n\talg.run();\n    OutputFile of(rs,es,&root,\"containment.svg\",false,true);\n    of.generate();\n\tfor(unsigned i=0;i<V;i++) {\n\t\tdelete rs[i];\n\t}\n    return 0;\n}\n// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=4:softtabstop=4:textwidth=99 :\n"
  },
  {
    "path": "cola/libcola/tests/containment2.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libcola - A library providing force-directed network layout using the \n *           stress-majorization method subject to separation constraints.\n *\n * Copyright (C) 2006-2008  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library in the file LICENSE; if not, \n * write to the Free Software Foundation, Inc., 59 Temple Place, \n * Suite 330, Boston, MA  02111-1307  USA\n *\n*/\n\n/** \\file\n * Interface between Inkscape code (SPItem) and graphlayout functions.\n * Authors:\n *   Tim Dwyer <tgdwyer@gmail.com>\n */\n#include <iostream>\n\n#include <map>\n#include <vector>\n#include <algorithm>\n#include <float.h>\n#include <iomanip>\n#include <libcola/cola.h>\n#include <libcola/output_svg.h>\n#include \"graphlayouttest.h\"\n\nusing namespace cola;\nusing namespace std;\n\nvector<vpsc::Rectangle*> rs;\nvector<Edge> es;\nRootCluster root;\nunsigned iteration=0;\n\n/** \n* \\brief Determines when to terminate layout of a particular graph based\n* on a given relative tolerance. \n*/\nint main() {\n\n\tconst unsigned V = 19;\n\tconst char* labels[]={\n\t\t\"Hamza Alghamdi\",\n\t\t\"Nawaf Alhazmi\",\n\t\t\"Marwan Al-Shehhi\",\n\t\t\"Mohand Alshehri\",\n\t\t\"Ahmed Alghamdi\",\n\t\t\"Saeed Alghamdi\",\n\t\t\"Salem Alhazmi\",\n\t\t\"Hani Hanjour\",\n\t\t\"Mohamed Atta\",\n\t\t\"Ziad Jarrah\",\n\t\t\"Ahmed Al Haznawi\",\n\t\t\"Fayez Ahmed\",\n\t\t\"Ahmed Alnami\",\n\t\t\"Khalid Al-Mihdhar\",\n\t\t\"Majed Moqed\",\n\t\t\"Abdul Aziz Al-Omari\",\n\t\t\"Waleed Alshehri\",\n\t\t\"Wail Alshehri\",\n\t\t\"Satam Suqami\"};\n\n\ttypedef pair < unsigned, unsigned >Edge;\n\tEdge edge_array[] = { \n\t\tEdge(0,1), Edge(0,3), Edge(0,4), Edge(0,5), Edge(0,10),\n\t\tEdge(1,5), Edge(1,6), Edge(1,7), Edge(1,12), Edge(1,13),\n\t\tEdge(2,8), Edge(2,9), Edge(2,11), Edge(2,15),\n\t\tEdge(3,11),\n\t\tEdge(5,10), Edge(5,12), \n\t\tEdge(7,13), Edge(7,14),\n\t\tEdge(8,9), Edge(8,15),\n\t\tEdge(9,10), \n\t\tEdge(15,16),\n\t\tEdge(16,17), Edge(16,18),\n       \t\tEdge(17,18) \n\t};\n\tdouble g=10;\n\tCompoundConstraints scy;\n\tscy.push_back(new SeparationConstraint(0,10,g));\n\tscy.push_back(new SeparationConstraint(0,3,g));\n\tscy.push_back(new SeparationConstraint(0,4,g));\n\tscy.push_back(new SeparationConstraint(0,12,g));\n\tscy.push_back(new SeparationConstraint(0,5,g));\n\tscy.push_back(new SeparationConstraint(1,12,g));\n\tscy.push_back(new SeparationConstraint(1,5,g));\n\tscy.push_back(new SeparationConstraint(1,13,g));\n\tscy.push_back(new SeparationConstraint(1,6,g));\n\tscy.push_back(new SeparationConstraint(1,7,g));\n\tscy.push_back(new SeparationConstraint(2,8,g));\n\tscy.push_back(new SeparationConstraint(2,9,g));\n\tscy.push_back(new SeparationConstraint(2,15,g));\n\tscy.push_back(new SeparationConstraint(2,11,g));\n\tscy.push_back(new SeparationConstraint(5,12,g));\n\tscy.push_back(new SeparationConstraint(7,13,g));\n\tscy.push_back(new SeparationConstraint(7,14,g));\n\tscy.push_back(new SeparationConstraint(16,17,g));\n\tscy.push_back(new SeparationConstraint(16,18,g));\n\tconst std::size_t E = sizeof(edge_array) / sizeof(Edge);\n\tes.resize(E);\n\tcopy(edge_array,edge_array+E,es.begin());\n\tdouble width=100;\n\tdouble height=100;\n\tfor(unsigned i=0;i<V;i++) {\n\t\tdouble x=getRand(width), y=getRand(height);\n\t\trs.push_back(new vpsc::Rectangle(x,x+17,y,y+10));\n\t}\n\n\tRectangularCluster c;\n\tc.nodes.push_back(0);\n\tc.nodes.push_back(1);\n\tRectangularCluster d;\n\td.nodes.push_back(3);\n\td.nodes.push_back(11);\n\tRectangularCluster e;\n\te.nodes.push_back(8);\n\te.nodes.push_back(9);\n\te.nodes.push_back(10);\n\te.nodes.push_back(15);\n\te.nodes.push_back(16);\n\tRectangularCluster f;\n\tf.nodes.push_back(17);\n\tf.nodes.push_back(18);\n\troot.clusters.push_back(&c);\n\troot.clusters.push_back(&d);\n\troot.clusters.push_back(&e);\n\troot.clusters.push_back(&f);\n    OutputFile of(rs,es,&root,\"containment2.svg\",true,true);\n    //of.setLabels(V,labels);\n\tCheckProgress test(0.0001,100);\n\tConstrainedMajorizationLayout alg(rs,es,&root,30,nullptr,test);\n    alg.setScaling(false);\n\t//alg.setYSeparationConstraints(&scy);\n\t//alg.run();\n\talg.setAvoidOverlaps();\n\talg.run();\n    of.generate();\n\tfor(unsigned i=0;i<V;i++) {\n\t\tdelete rs[i];\n\t}\n    return 0;\n}\n// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=4:softtabstop=4:textwidth=99 :\n"
  },
  {
    "path": "cola/libcola/tests/convex_hull.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libcola - A library providing force-directed network layout using the \n *           stress-majorization method subject to separation constraints.\n *\n * Copyright (C) 2006-2008  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library in the file LICENSE; if not, \n * write to the Free Software Foundation, Inc., 59 Temple Place, \n * Suite 330, Boston, MA  02111-1307  USA\n *\n*/\n\n/**\n * Really basic regression test of convex hull implementation\n * declared in libcola/convex_hull.h\n */\n#include <valarray>\n#include <algorithm>\n#include <libcola/convex_hull.h>\n#include \"graphlayouttest.h\"\n\n#include <string>\n#include <iostream>\n#include <cairomm/context.h>\n#include <cairomm/surface.h>\n\n/* M_PI is defined in math.h in the case of Microsoft Visual C++ */\n#if defined(_MSC_VER)\n#ifndef _USE_MATH_DEFINES\n#define _USE_MATH_DEFINES\n#endif\n#include <math.h>\n#endif \nusing namespace std;\n\ntypedef vector<unsigned> Hull;\n/**\n * generates a random set of n points in X and Y.\n */\nvoid randTest(unsigned n, valarray<double>& X, valarray<double>& Y) {\n    X.resize(n);\n    Y.resize(n);\n    srand(time(nullptr));\n\tfor(unsigned i=0;i<n;i++) {\n\t\tX[i]=getRand(1.);\n\t\tY[i]=getRand(1.);\n\t}\n}\n/**\n * generates a set of 8 points (actually the vertices of two rectangles)\n * which lineup horizontally.  The expected hull are the lower-left and\n * top-left corners of the left rectangle and the top-right/lower-right\n * corners of the right rectangle.\n */\nvoid tworects(valarray<double>& X, valarray<double>& Y, Hull& expectedHull) {\n    const unsigned n=8;\n    X.resize(n);\n    Y.resize(n);\n    X[0]=330.011898, Y[0]=203.250425;\n    X[1]=330.011898, Y[1]=237.250425;\n    X[2]=276.011898, Y[2]=237.250425;\n    X[3]=276.011898, Y[3]=203.250425;\n    X[4]=459.998300, Y[4]=203.250425;\n    X[5]=459.998300, Y[5]=237.250425;\n    X[6]=405.998300, Y[6]=237.250425;\n    X[7]=405.998300, Y[7]=203.250425;\n    unsigned hull[]={3,4,5,2};\n    unsigned m=sizeof(hull)/sizeof(unsigned);\n    expectedHull.resize(m);\n    copy(hull,hull+m,expectedHull.begin());\n}\n\nint drawCairo(const string& fname,\n        const valarray<double>& X, const valarray<double>& Y, \n        const Hull& hull);\n\nint main(int argc, char** argv) {\n\tvalarray<double> X, Y;\n\tHull h,expectedHull;\n    tworects(X,Y,expectedHull);\n    hull::convex(X,Y,h);\n    printf(\"hull size=%d\\n\",h.size());\n    pair<Hull::iterator,Hull::iterator> r\n        =mismatch(h.begin(),h.end(),expectedHull.begin());\n    assert(r.first==h.end());\n    drawCairo(\"convex_tworects.svg\",X,Y,h);\n\n    randTest(20,X,Y);\n    hull::convex(X,Y,h);\n    drawCairo(\"convex_hull_random.svg\",X,Y,h);\n    return 0;\n}\n\n/***********CAIRO CODE***************************************************/\ndouble width = 600;\ndouble height = 400;\ndouble border=10;\nvoid dot(Cairo::RefPtr<Cairo::Context> & cr, double x, double y) {\n    cr->arc(x, y, \n            2., 0.0, 2.0 * M_PI);\n    cr->stroke();\n}\n\ndouble xcoord(double x) {\n    return border+x*width;\n}\ndouble ycoord(double y) {\n    return border+y*height;\n}\nint drawCairo(const string& fname,\n        const valarray<double>& Xin, const valarray<double>& Yin, \n        const Hull& hull) {\n#ifdef CAIRO_HAS_SVG_SURFACE\n    unsigned n=Xin.size();\n    assert(Yin.size()==n);\n\n    // normalise coords to range 0-1\n    valarray<double> X=Xin, Y=Yin;\n    X-=X.min();\n    Y-=Y.min();\n    X/=X.max();\n    Y/=Y.max();\n\n    Cairo::RefPtr<Cairo::SvgSurface> surface =\n        Cairo::SvgSurface::create(fname, width+2*border, height+2*border);\n\n    Cairo::RefPtr<Cairo::Context> cr = Cairo::Context::create(surface);\n\n    cr->save(); // save the state of the context\n    cr->set_source_rgba(0.0, 0.0, 0.0, 0.7);\n    // draw a circle at each coordinate\n    for(unsigned i=0;i<n;i++) {\n        dot(cr,xcoord(X[i]),ycoord(Y[i]));\n    }\n\n    cr->set_source_rgba(0.0, 0.0, 0.0, 0.3);\n    cr->move_to(xcoord(X[hull[0]]),ycoord(Y[hull[0]]));\n    for(unsigned i=1;i<hull.size();i++) {\n        cr->line_to(xcoord(X[hull[i]]),ycoord(Y[hull[i]]));\n    }\n    cr->line_to(xcoord(X[hull[0]]),ycoord(Y[hull[0]]));\n    cr->stroke();\n    cr->set_source_rgba(0.0, 0.0, 0.0, 1.);\n    for(vector<unsigned>::const_iterator i=hull.begin();i!=hull.end();++i) {\n        unsigned j=*i;\n        stringstream ss;\n        ss<<j;\n        printf(\"p[%d]=(%f,%f)\\n\",j,X[j],Y[j]);\n        cr->move_to(xcoord(X[j]),ycoord(Y[j]));\n        cr->show_text(ss.str());\n        cr->stroke();\n    }\n    cr->restore();\n\n    cr->show_page();\n\n    cout << \"Wrote SVG file \\\"\" << fname << \"\\\"\" << endl;\n    return 0;\n\n#else\n\n    cout << \"You must compile cairo with SVG support for this example to work.\"\n        << endl;\n    return 1;\n\n#endif\n\n}\n// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=4:softtabstop=4 :\n"
  },
  {
    "path": "cola/libcola/tests/cycle_detector.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libcola - A library providing force-directed network layout using the \n *           stress-majorization method subject to separation constraints.\n *\n * Copyright (C) 2006-2008  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library in the file LICENSE; if not, \n * write to the Free Software Foundation, Inc., 59 Temple Place, \n * Suite 330, Boston, MA  02111-1307  USA\n *\n*/\n\n#include <iostream>\n#include <vector>\n#include <assert.h>\n#include <libcola/cola.h>\n#include <libcola/cycle_detector.h>\n#include \"graphlayouttest.h\"\n\nusing namespace std;\nusing namespace cola;\nusing namespace cycle_detector;\nusing vpsc::Rectangle;\n\nint main()  {\n  CycleDetector *cd;\n  Edges case_a, case_b, case_c, case_d, case_e, case_f, case_g;\n\n  CyclicEdges *cycles = nullptr;\n  vector<Rectangle *> rs;\n  unsigned V;\n\n  // create case A\n  // case A consists of a basic graph where the start point is a source\n  cout << endl << \"ENTERING CASE A\" << endl;\n  V = 5;\n  case_a.push_back(Edge(0, 1));\n  case_a.push_back(Edge(1, 2));\n  case_a.push_back(Edge(2, 3));\n  case_a.push_back(Edge(3, 4));\n  case_a.push_back(Edge(4, 1));\n\n  // detect the cycles\n  cd = new CycleDetector(V, &case_a);\n  cycles = cd->detect_cycles();\n  \n  if (cycles != nullptr)  {\n    cout << \"cycles->size(): \" << cycles->size() << endl; \n    for (unsigned i = 0; i < case_a.size(); i++)  {\n      // print out the cycles\n      if ((*cycles)[i])  cout << \"Cyclic edge found: (\" << case_a[i].first << \", \" << case_a[i].second << \")\" << endl;\n    }\n\n    cout << endl;\n\n    // output a picture\n    rs.push_back(new Rectangle(10,10+5,10,10+5));\n    rs.push_back(new Rectangle(30,30+5,30,30+5));\n    rs.push_back(new Rectangle(30,30+5,60,60+5));\n    rs.push_back(new Rectangle(65,65+5,60,60+5));\n    rs.push_back(new Rectangle(65,65+5,30,30+5));\n\n    assert(rs.size() == V);\n\n    output_svg(rs, case_a, \"cycle_detector_case_a.svg\", false, true, cycles);\n    for (unsigned i = 0; i < rs.size(); i++)  { delete rs[i]; }\n    rs.clear();\n    delete cycles;\n  }\n  else  {\n    cout << \"No cycles found\" << endl;\n  }\n\n  // create case B\n  // case B is the same graph of case A but with more elements\n  cout << endl << \"ENTERING CASE B\" << endl;\n  V = 7;\n  case_b.push_back(Edge(0, 1));\n  case_b.push_back(Edge(1, 2));\n  case_b.push_back(Edge(2, 3));\n  case_b.push_back(Edge(3, 4));\n  case_b.push_back(Edge(4, 1));\n  case_b.push_back(Edge(5, 2));\n  case_b.push_back(Edge(6, 5));\n\n  // detect the cycles\n  cd->mod_graph(V, &case_b);\n  cycles = cd->detect_cycles();\n  \n  if (cycles != nullptr)  {\n    cout << \"cycles->size(): \" << cycles->size() << endl; \n    for (unsigned i = 0; i < case_b.size(); i++)  {\n      // print out the cycles\n      if ((*cycles)[i])  cout << \"Cyclic edge found: (\" << case_b[i].first << \", \" << case_b[i].second << \")\" << endl;\n    }\n\n    cout << endl;\n\n    // output a picture\n    rs.push_back(new Rectangle(10,10+5,10,10+5));\n    rs.push_back(new Rectangle(30,30+5,30,30+5));\n    rs.push_back(new Rectangle(30,30+5,60,60+5));\n    rs.push_back(new Rectangle(65,65+5,60,60+5));\n    rs.push_back(new Rectangle(65,65+5,30,30+5));\n    rs.push_back(new Rectangle(30,30+5,90,90+5));\n    rs.push_back(new Rectangle(65,65+5,90,90+5));\n\n    assert(rs.size() == V);\n\n    output_svg(rs, case_b, \"cycle_detector_case_b.svg\", false, true, cycles);\n    for (unsigned i = 0; i < rs.size(); i++)  { delete rs[i]; }\n    rs.clear();\n    delete cycles;\n  }\n\n  // create case C\n  // case C is a more complicated graph with nested cycles\n  cout << endl << \"ENTERING CASE C\" << endl;\n  V = 14;\n  case_c.push_back(Edge(0, 1));\n  case_c.push_back(Edge(0, 5));\n  case_c.push_back(Edge(0, 6));\n  case_c.push_back(Edge(2, 0));\n  case_c.push_back(Edge(3, 5));\n  case_c.push_back(Edge(4, 3));\n  case_c.push_back(Edge(5, 4));\n  case_c.push_back(Edge(5, 13));\n  case_c.push_back(Edge(6, 2));\n  case_c.push_back(Edge(6, 9));\n  case_c.push_back(Edge(7, 6));\n  case_c.push_back(Edge(8, 7));\n  case_c.push_back(Edge(9, 10));\n  case_c.push_back(Edge(9, 11));\n  case_c.push_back(Edge(9, 12));\n  case_c.push_back(Edge(10, 6));\n  case_c.push_back(Edge(12, 10));\n  case_c.push_back(Edge(13, 4));\n\n  // detect the cycles\n  //cd = new CycleDetector(V, &case_c);\n  cd->mod_graph(V, &case_c);\n  cycles = cd->detect_cycles();\n  if (cycles != nullptr)  {\n    cout << \"cycles->size(): \" << cycles->size() << endl; \n    for (unsigned i = 0; i < case_c.size(); i++)  {\n      // print out the cycles\n      if ((*cycles)[i])  cout << \"Cyclic edge found: (\" << case_c[i].first << \", \" << case_c[i].second << \")\" << endl;\n    }\n\n    cout << endl;\n\n    // output a picture\n    rs.push_back(new Rectangle(10,10+5,10,10+5)); // node 0\n    rs.push_back(new Rectangle(20,20+5,40,40+5)); // node 1\n    rs.push_back(new Rectangle(40,40+5,30,30+5)); // node 2\n    rs.push_back(new Rectangle(30,30+5,60,60+5)); // node 3\n    rs.push_back(new Rectangle(60,60+5,60,60+5)); // node 4\n    rs.push_back(new Rectangle(10,10+5,90,90+5)); // node 5\n    rs.push_back(new Rectangle(80,80+5,15,15+5)); // node 6\n    rs.push_back(new Rectangle(110,110+5,15,15+5)); // node 7\n    rs.push_back(new Rectangle(140,140+5,15,15+5)); // node 8\n    rs.push_back(new Rectangle(110,110+5,60,60+5)); // node 9\n    rs.push_back(new Rectangle(100,100+5,85,85+5)); // node 10\n    rs.push_back(new Rectangle(140,140+5,50,50+5)); // node 11\n    rs.push_back(new Rectangle(140,140+5,70,70+5)); // node 12\n    rs.push_back(new Rectangle(45,45+5,90,90+5)); // node 13\n\n    assert(rs.size() == V);\n\n    output_svg(rs, case_c, \"cycle_detector_case_c.svg\", false, true, cycles);\n    for(int i = 0; i < V; i++) { delete rs[i]; }\n    rs.clear();\n    delete cycles;\n  }\n\n  // create case D\n  // case D consists of the same graph as case A but with a different starting location\n  cout << endl << \"ENTERING CASE D\" << endl;\n  V = 5;\n  case_d.push_back(Edge(0, 1));\n  case_d.push_back(Edge(1, 2));\n  case_d.push_back(Edge(2, 3));\n  case_d.push_back(Edge(3, 0));\n  case_d.push_back(Edge(4, 1));\n\n  // detect the cycles\n  cd->mod_graph(V, &case_d);\n  cycles = cd->detect_cycles();\n  \n  if (cycles != nullptr)  {\n    cout << \"cycles->size(): \" << cycles->size() << endl; \n    for (unsigned i = 0; i < case_d.size(); i++)  {\n      // print out the cycles\n      if ((*cycles)[i])  cout << \"Cyclic edge found: (\" << case_d[i].first << \", \" << case_d[i].second << \")\" << endl;\n    }\n\n    cout << endl;\n\n    // output a picture\n    rs.push_back(new Rectangle(65,65+5,60,60+5));\n    rs.push_back(new Rectangle(65,65+5,30,30+5));\n    rs.push_back(new Rectangle(30,30+5,30,30+5));\n    rs.push_back(new Rectangle(30,30+5,60,60+5));\n    rs.push_back(new Rectangle(10,10+5,10,10+5));\n\n    assert(rs.size() == V);\n\n    output_svg(rs, case_d, \"cycle_detector_case_d.svg\", false, true, cycles);\n    for (unsigned i = 0; i < rs.size(); i++)  { delete rs[i]; }\n    rs.clear();\n    delete cycles;\n  }\n  else  {\n    cout << \"No cycles found\" << endl;\n  }\n\n  // create case E\n  // case E is a reordering of case C\n  cout << endl << \"ENTERING CASE E\" << endl;\n  V = 14;\n  case_e.push_back(Edge(0, 6));\n  case_e.push_back(Edge(0, 9));\n  case_e.push_back(Edge(1, 4));\n  case_e.push_back(Edge(3, 10));\n  case_e.push_back(Edge(4, 3));\n  case_e.push_back(Edge(5, 0));\n  case_e.push_back(Edge(6, 7));\n  case_e.push_back(Edge(7, 0));\n  case_e.push_back(Edge(7, 2));\n  case_e.push_back(Edge(7, 10));\n  case_e.push_back(Edge(8, 5));\n  case_e.push_back(Edge(9, 12));\n  case_e.push_back(Edge(9, 11));\n  case_e.push_back(Edge(9, 13));\n  case_e.push_back(Edge(10, 1));\n  case_e.push_back(Edge(10, 4));\n  case_e.push_back(Edge(12, 0));\n  case_e.push_back(Edge(11, 12));\n\n  // detect the cycles\n  cd->mod_graph(V, &case_e);\n  cycles = cd->detect_cycles();\n  if (cycles != nullptr)  {\n    cout << \"cycles->size(): \" << cycles->size() << endl; \n    for (unsigned i = 0; i < case_e.size(); i++)  {\n      // print out the cycles\n      if ((*cycles)[i])  cout << \"Cyclic edge found: (\" << case_e[i].first << \", \" << case_e[i].second << \")\" << endl;\n    }\n\n    cout << endl;\n\n    // output a picture\n    rs.push_back(new Rectangle(80,80+5,15,15+5)); // node 6\n    rs.push_back(new Rectangle(45,45+5,90,90+5)); // node 13\n    rs.push_back(new Rectangle(20,20+5,40,40+5)); // node 1\n    rs.push_back(new Rectangle(30,30+5,60,60+5)); // node 3\n    rs.push_back(new Rectangle(60,60+5,60,60+5)); // node 4\n    rs.push_back(new Rectangle(110,110+5,15,15+5)); // node 7\n    rs.push_back(new Rectangle(40,40+5,30,30+5)); // node 2\n    rs.push_back(new Rectangle(10,10+5,10,10+5)); // node 0\n    rs.push_back(new Rectangle(140,140+5,15,15+5)); // node 8\n    rs.push_back(new Rectangle(110,110+5,60,60+5)); // node 9\n    rs.push_back(new Rectangle(10,10+5,90,90+5)); // node 5\n    rs.push_back(new Rectangle(140,140+5,70,70+5)); // node 12\n    rs.push_back(new Rectangle(100,100+5,85,85+5)); // node 10\n    rs.push_back(new Rectangle(140,140+5,50,50+5)); // node 11\n\n    assert(rs.size() == V);\n\n    output_svg(rs, case_e, \"cycle_detector_case_e.svg\", false, true, cycles);\n    for(int i = 0; i < V; i++) { delete rs[i]; }\n    rs.clear();\n    delete cycles;\n  }\n\n  // create case F\n  // case F consists of the same graph with sinks\n  cout << endl << \"ENTERING CASE F\" << endl;\n  V = 3;\n  case_f.push_back(Edge(0, 1));\n  case_f.push_back(Edge(0, 2));\n  case_f.push_back(Edge(1, 2));\n\n  // detect the cycles\n  cd->mod_graph(V, &case_f);\n  cycles = cd->detect_cycles();\n  \n  if (cycles != nullptr)  {\n    // output a picture\n    rs.push_back(new Rectangle(10,10+5,10,10+5));\n    rs.push_back(new Rectangle(40,40+5,30,30+5));\n    rs.push_back(new Rectangle(15,15+5,60,60+5));\n\n    assert(rs.size() == V);\n\n    output_svg(rs, case_f, \"cycle_detector_case_f.svg\", false, true, cycles);\n    for (unsigned i = 0; i < rs.size(); i++)  { delete rs[i]; }\n    rs.clear();\n\n    cout << \"No cycles found\" << endl; \n  }\n\n  // This tests the cycle detectors ability to cycle through a chain of cyclic ancestors\n  cout << endl << \"ENTERING CYCLIC ANCESTOR TEST\" << endl;\n  Node a(1), b(2), c(3), d(4), e(5), f(6);\n  // set up the chain\n  f.cyclicAncestor = &e;\n  e.cyclicAncestor = &d;\n  d.cyclicAncestor = &c;\n  c.cyclicAncestor = &b;\n  b.cyclicAncestor = &a;\n  a.cyclicAncestor = &a;\n\n  Node *ca = cd->get_highest_ca(&f);\n  if (ca != nullptr)  { cout << \"Highest cyclic ancestor found at vertex(\" << ca->id << \")\" << endl; }\n\n  // create case G\n  // case G hows the ability to find nested cycles and to reassign cyclic ancestors\n  cout << endl << \"ENTERING CASE G\" << endl;\n  V = 7;\n  case_g.push_back(Edge(0, 1));\n  case_g.push_back(Edge(1, 2));\n  case_g.push_back(Edge(2, 3));\n  case_g.push_back(Edge(3, 4));\n  case_g.push_back(Edge(4, 5));\n  case_g.push_back(Edge(5, 6));\n  case_g.push_back(Edge(6, 5));\n  case_g.push_back(Edge(5, 4));\n  case_g.push_back(Edge(4, 3));\n  case_g.push_back(Edge(3, 2));\n  case_g.push_back(Edge(2, 1));\n  case_g.push_back(Edge(1, 0));\n  case_g.push_back(Edge(0, 6));\n\n  // detect the cycles\n  cd->mod_graph(V, &case_g);\n  cycles = cd->detect_cycles();\n  \n  if (cycles != nullptr)  {\n    cout << \"cycles->size(): \" << cycles->size() << endl; \n    for (unsigned i = 0; i < case_g.size(); i++)  {\n      // print out the cycles\n      if ((*cycles)[i])  cout << \"Cyclic edge found: (\" << case_g[i].first << \", \" << case_g[i].second << \")\" << endl;\n    }\n\n    cout << endl;\n\n    // output a picture\n    cout << \"No picture generated\" << endl;\n\n    /*rs.push_back(new Rectangle(50,50+5,10,10+5));\n    rs.push_back(new Rectangle(50,50+5,30,30+5));\n    rs.push_back(new Rectangle(50,50+5,60,60+5));\n    rs.push_back(new Rectangle(10,10+5,70,70+5));\n    rs.push_back(new Rectangle(50,50+5,100,100+5));\n    rs.push_back(new Rectangle(10,10+5,40,40+5));\n\n    assert(rs.size() == V);\n\n    output_svg(rs, case_a, \"cycle_detector_case_g.svg\", false, true, cycles);\n    for (unsigned i = 0; i < rs.size(); i++)  { delete rs[i]; }\n    rs.clear();*/\n    delete cycles;\n  }\n  else  {\n    cout << \"No cycles found\" << endl;\n  }\n\n  // END TEST\n  delete cd;\n\n  return 0;\n}\n"
  },
  {
    "path": "cola/libcola/tests/data/1138_bus.txt",
    "content": "4 0\n562 0\n9 1\n562 1\n10 2\n33 2\n34 2\n103 2\n474 2\n6 3\n26 3\n100 3\n101 3\n102 3\n8 4\n6 5\n36 5\n97 5\n102 5\n36 6\n100 6\n101 6\n102 6\n25 7\n34 7\n723 7\n9 8\n103 8\n103 9\n11 10\n37 10\n565 10\n33 12\n103 12\n412 13\n15 14\n16 14\n17 14\n18 14\n410 14\n20 19\n36 19\n101 19\n21 20\n22 20\n23 20\n24 20\n34 25\n27 26\n28 26\n29 26\n100 26\n31 30\n99 30\n99 31\n99 32\n103 33\n552 33\n103 34\n709 34\n710 35\n101 36\n38 37\n97 37\n411 37\n98 38\n40 39\n42 39\n44 39\n41 40\n43 40\n145 42\n485 43\n48 44\n47 45\n47 46\n53 47\n505 47\n49 48\n52 48\n50 49\n51 49\n124 51\n53 52\n54 52\n424 53\n444 53\n446 53\n62 55\n65 56\n69 57\n66 58\n67 59\n129 60\n128 61\n63 62\n64 62\n70 63\n130 63\n225 63\n1094 64\n66 65\n67 65\n73 65\n182 65\n225 65\n67 66\n68 66\n73 67\n89 67\n200 67\n69 68\n181 69\n195 69\n1062 69\n1064 69\n1073 69\n71 70\n72 71\n120 71\n74 73\n75 73\n77 73\n79 73\n118 73\n203 74\n809 74\n917 74\n76 75\n77 75\n126 75\n1049 76\n78 77\n451 77\n415 78\n416 78\n453 78\n80 79\n446 79\n451 79\n447 80\n449 80\n463 80\n93 81\n93 82\n94 83\n86 84\n125 84\n86 85\n240 85\n250 85\n252 85\n266 85\n268 85\n282 85\n290 85\n292 85\n293 85\n301 85\n314 85\n87 86\n104 88\n114 88\n90 89\n91 90\n107 90\n114 90\n115 90\n92 91\n93 92\n251 92\n263 92\n270 92\n287 92\n291 92\n292 92\n293 92\n321 92\n322 92\n323 92\n324 92\n325 92\n95 93\n263 93\n317 93\n324 93\n96 94\n261 94\n267 94\n299 94\n144 95\n703 95\n704 95\n267 96\n412 98\n724 99\n731 99\n101 100\n102 100\n102 101\n477 102\n105 104\n108 104\n107 106\n109 107\n1028 108\n110 109\n327 109\n366 109\n369 109\n366 110\n367 110\n700 110\n112 111\n369 111\n685 111\n113 112\n114 112\n689 112\n1008 113\n116 115\n125 115\n118 117\n122 118\n120 119\n121 120\n503 120\n122 121\n123 121\n124 122\n124 123\n126 123\n125 124\n128 124\n545 124\n128 125\n127 126\n132 129\n172 129\n212 129\n131 130\n132 130\n135 130\n143 131\n741 131\n133 132\n135 134\n138 134\n739 134\n140 135\n138 136\n140 136\n760 136\n140 137\n876 137\n881 137\n139 138\n828 139\n829 139\n257 141\n365 141\n143 142\n742 142\n744 142\n825 142\n826 143\n317 144\n702 144\n146 145\n147 146\n165 148\n172 149\n174 150\n179 151\n182 152\n206 153\n197 154\n212 155\n218 156\n225 157\n181 158\n204 158\n171 159\n232 159\n221 160\n742 160\n162 161\n168 161\n208 161\n222 161\n231 161\n185 162\n200 162\n226 162\n165 163\n165 164\n166 164\n174 164\n193 164\n191 165\n200 165\n217 165\n174 166\n179 167\n208 167\n186 168\n187 169\n193 169\n177 170\n216 170\n172 171\n221 171\n754 171\n183 172\n210 173\n215 173\n178 174\n176 175\n177 175\n206 175\n206 176\n213 177\n216 177\n202 178\n208 179\n182 180\n182 181\n204 181\n220 181\n183 182\n200 182\n225 182\n192 183\n212 183\n186 184\n186 185\n217 185\n187 186\n205 186\n208 186\n210 188\n215 188\n198 189\n194 190\n196 190\n197 190\n210 190\n198 191\n217 191\n219 191\n197 192\n198 192\n207 192\n215 193\n210 194\n211 196\n200 199\n201 199\n217 200\n202 201\n220 204\n215 205\n207 206\n223 206\n214 209\n216 209\n217 209\n211 210\n503 212\n216 213\n217 215\n219 218\n229 218\n221 220\n224 220\n224 221\n232 221\n742 221\n231 222\n1025 223\n227 226\n228 227\n230 227\n231 227\n231 230\n235 233\n306 233\n235 234\n242 234\n269 234\n271 234\n297 234\n298 234\n285 235\n260 236\n286 236\n308 236\n365 236\n701 236\n238 237\n269 237\n269 238\n280 238\n258 239\n241 240\n245 240\n252 240\n256 240\n265 240\n274 240\n278 240\n288 240\n290 240\n291 240\n292 240\n293 240\n298 240\n309 240\n320 240\n326 240\n243 241\n244 241\n271 243\n297 244\n309 245\n247 246\n254 246\n254 247\n281 248\n256 249\n262 249\n288 249\n316 249\n266 250\n309 251\n312 251\n254 253\n284 253\n257 254\n259 254\n262 254\n289 255\n316 255\n320 255\n260 257\n326 257\n277 258\n288 259\n267 261\n275 261\n313 261\n310 263\n275 264\n299 264\n306 265\n281 266\n283 266\n301 266\n269 267\n300 267\n283 268\n274 269\n278 269\n279 269\n317 269\n319 269\n273 272\n302 272\n314 272\n311 273\n284 276\n288 276\n308 277\n291 282\n290 287\n297 294\n296 295\n298 296\n695 299\n313 300\n311 302\n304 303\n314 303\n328 303\n314 304\n321 305\n322 307\n325 310\n314 311\n315 314\n318 314\n322 314\n321 315\n703 317\n328 318\n324 323\n334 329\n335 330\n336 331\n349 332\n349 333\n336 334\n336 335\n337 336\n338 336\n339 336\n339 337\n339 338\n340 339\n341 339\n341 340\n342 341\n343 341\n344 341\n369 341\n345 342\n345 343\n345 344\n346 345\n348 345\n366 345\n347 346\n348 347\n349 348\n365 350\n352 351\n407 351\n408 351\n362 352\n381 352\n381 353\n382 353\n374 354\n382 355\n397 355\n393 356\n394 356\n478 357\n473 358\n714 359\n478 360\n479 360\n402 361\n713 361\n363 362\n364 362\n372 362\n373 362\n387 362\n394 362\n406 362\n473 362\n698 365\n367 366\n371 366\n370 368\n371 370\n375 374\n376 374\n377 374\n378 374\n379 374\n380 374\n388 374\n403 374\n383 382\n384 382\n385 382\n386 382\n391 382\n388 387\n389 387\n390 387\n394 387\n400 387\n404 387\n394 391\n473 392\n478 392\n394 393\n397 394\n398 394\n404 394\n405 394\n406 394\n473 394\n405 395\n715 395\n716 395\n715 396\n716 396\n472 399\n401 400\n713 400\n408 403\n478 405\n482 405\n715 405\n716 405\n410 409\n411 409\n730 409\n475 410\n476 410\n485 410\n412 411\n477 411\n708 411\n723 411\n430 413\n432 413\n431 414\n432 414\n432 415\n461 415\n432 416\n461 416\n418 417\n544 417\n420 419\n421 419\n469 419\n424 422\n515 422\n465 423\n515 423\n425 424\n426 424\n465 424\n436 425\n518 425\n428 427\n429 427\n430 427\n431 427\n433 432\n509 432\n563 432\n509 434\n533 435\n437 436\n438 436\n440 436\n457 436\n439 438\n459 438\n441 440\n443 442\n469 442\n505 442\n515 442\n457 443\n445 444\n446 444\n448 446\n536 446\n463 447\n449 448\n450 449\n452 451\n454 453\n456 455\n563 455\n458 457\n459 457\n460 459\n462 461\n464 463\n544 463\n967 464\n466 465\n543 467\n542 468\n471 470\n477 470\n480 470\n491 470\n706 470\n707 470\n473 472\n709 474\n723 474\n481 475\n477 476\n707 477\n708 477\n479 478\n713 478\n725 478\n483 480\n484 480\n490 480\n491 480\n732 480\n482 481\n708 483\n732 483\n490 484\n730 485\n490 486\n490 487\n491 488\n491 489\n491 490\n733 490\n706 491\n706 492\n504 493\n512 494\n520 495\n521 496\n522 497\n499 498\n818 498\n913 498\n501 500\n504 500\n506 500\n520 500\n530 500\n535 500\n606 501\n608 501\n612 501\n936 501\n506 502\n512 502\n552 502\n504 503\n520 504\n525 504\n577 504\n507 506\n508 506\n514 506\n520 506\n521 506\n546 506\n618 507\n638 507\n780 507\n510 508\n514 508\n519 508\n533 508\n519 509\n913 510\n925 510\n519 511\n513 512\n539 512\n789 513\n794 513\n515 514\n516 514\n517 514\n535 514\n546 514\n992 516\n994 516\n956 518\n966 518\n521 520\n522 521\n581 522\n769 522\n778 522\n801 522\n532 523\n984 523\n1000 523\n567 524\n526 525\n530 525\n920 526\n932 526\n1067 526\n1072 526\n1073 526\n1123 526\n528 527\n808 527\n818 527\n577 529\n582 529\n779 529\n796 529\n802 529\n531 530\n533 530\n553 531\n646 531\n651 531\n662 531\n667 531\n671 531\n672 531\n676 531\n907 531\n911 531\n917 531\n1046 531\n534 533\n535 533\n541 533\n884 534\n536 535\n537 535\n538 535\n541 535\n808 537\n913 537\n947 537\n952 537\n963 537\n799 539\n542 540\n542 541\n544 541\n545 541\n543 542\n550 547\n562 548\n565 549\n551 550\n554 550\n565 550\n557 551\n559 551\n560 552\n709 552\n573 553\n908 553\n555 554\n556 554\n563 554\n565 554\n558 555\n578 555\n620 555\n902 555\n557 556\n978 557\n979 557\n985 557\n988 557\n990 557\n997 557\n999 557\n578 558\n979 559\n561 560\n565 560\n562 561\n566 562\n566 564\n566 565\n772 567\n794 567\n784 568\n578 569\n775 570\n782 571\n795 572\n580 574\n581 575\n783 575\n785 576\n801 576\n1089 576\n779 577\n579 578\n781 578\n782 578\n894 578\n926 578\n586 579\n775 580\n795 580\n796 580\n798 580\n779 582\n802 582\n584 583\n1067 583\n606 584\n612 584\n658 584\n596 585\n597 586\n613 586\n594 587\n596 587\n590 588\n594 589\n615 589\n600 590\n610 591\n603 592\n599 593\n596 595\n602 595\n606 595\n1104 598\n600 599\n781 599\n601 600\n632 600\n639 601\n603 602\n604 602\n1091 602\n611 603\n614 603\n606 604\n609 605\n609 607\n1100 607\n1067 608\n614 610\n1122 616\n628 617\n638 617\n619 618\n631 619\n623 620\n1060 620\n624 621\n640 621\n638 622\n641 622\n637 623\n634 624\n633 625\n634 625\n638 626\n630 627\n641 627\n636 628\n642 628\n630 629\n634 629\n795 629\n633 631\n640 631\n635 634\n1093 635\n651 643\n661 643\n649 644\n1059 644\n663 645\n1050 645\n1040 646\n677 647\n1041 647\n671 648\n1054 648\n652 649\n669 650\n1044 650\n652 651\n662 651\n665 651\n667 651\n675 651\n1053 651\n1047 652\n676 653\n1056 653\n656 654\n664 654\n677 655\n1054 656\n670 657\n671 657\n676 658\n1049 659\n1057 659\n676 660\n671 661\n1055 663\n681 664\n680 665\n1050 666\n678 668\n1057 668\n1120 669\n678 670\n672 671\n681 671\n1048 671\n1049 671\n1051 671\n1057 671\n1120 671\n674 673\n1045 673\n1049 674\n1042 675\n677 676\n1040 676\n1058 676\n1046 679\n1056 679\n1052 680\n688 682\n688 683\n690 684\n686 685\n687 685\n688 687\n693 687\n698 687\n699 687\n701 687\n692 688\n690 689\n693 689\n696 689\n691 690\n694 690\n694 692\n694 693\n697 696\n699 698\n706 705\n725 706\n708 707\n723 710\n733 710\n713 711\n713 712\n714 713\n733 713\n716 715\n723 717\n723 718\n723 719\n723 720\n723 721\n723 722\n724 723\n733 723\n727 726\n730 726\n730 727\n729 728\n730 728\n730 729\n742 734\n741 735\n742 736\n741 737\n743 738\n740 739\n741 739\n743 739\n748 740\n758 740\n742 741\n745 742\n755 743\n745 744\n747 746\n757 746\n756 747\n752 748\n750 749\n758 749\n756 751\n761 751\n756 753\n764 753\n763 754\n756 755\n760 759\n765 760\n766 760\n762 761\n767 765\n768 767\n771 767\n822 769\n771 770\n773 772\n794 772\n800 772\n801 772\n775 774\n780 774\n780 775\n795 775\n796 775\n1126 775\n792 776\n794 776\n799 776\n778 777\n779 778\n786 778\n796 779\n948 779\n782 781\n801 783\n785 784\n787 784\n795 784\n796 784\n801 784\n1127 785\n948 786\n788 787\n795 787\n1131 787\n1093 788\n790 789\n794 789\n798 791\n1109 791\n793 792\n824 792\n794 793\n799 793\n798 795\n797 796\n802 796\n804 796\n1118 796\n1113 797\n1136 801\n803 802\n1137 804\n820 805\n886 806\n896 807\n919 808\n810 809\n917 809\n908 811\n884 812\n939 812\n1121 812\n814 813\n908 813\n917 813\n816 815\n926 815\n817 816\n906 816\n819 818\n887 820\n896 820\n920 820\n879 821\n884 821\n934 821\n824 823\n836 827\n837 827\n873 827\n832 828\n838 828\n832 829\n839 829\n840 830\n868 830\n841 831\n868 831\n842 832\n843 833\n873 833\n844 834\n861 834\n845 835\n868 835\n858 837\n859 837\n847 846\n872 847\n853 848\n862 848\n863 848\n854 849\n872 849\n855 850\n857 850\n856 851\n868 851\n875 852\n872 857\n860 859\n862 861\n868 862\n864 863\n868 863\n868 865\n876 865\n877 866\n868 867\n870 867\n876 867\n869 868\n870 869\n876 869\n881 871\n881 872\n877 873\n875 874\n881 874\n877 876\n882 876\n881 878\n881 880\n936 883\n1122 883\n913 884\n917 884\n894 885\n926 885\n936 885\n895 886\n896 886\n923 887\n916 888\n890 889\n907 889\n916 889\n892 891\n898 891\n926 891\n920 893\n935 893\n1125 893\n1124 894\n896 895\n912 896\n916 896\n943 896\n913 897\n925 897\n899 898\n907 898\n912 900\n1128 900\n905 901\n986 902\n904 903\n938 903\n943 903\n921 905\n938 905\n922 906\n911 907\n916 907\n926 907\n909 908\n911 910\n934 913\n937 913\n962 913\n925 914\n990 915\n917 916\n929 916\n918 917\n1129 917\n939 918\n922 920\n923 920\n926 920\n932 920\n936 920\n929 921\n1132 921\n924 923\n927 926\n936 926\n928 927\n936 927\n930 929\n948 931\n933 932\n941 932\n946 934\n936 935\n1133 935\n953 939\n953 940\n943 942\n960 944\n964 945\n951 947\n954 947\n956 947\n957 947\n963 947\n950 949\n954 949\n955 949\n964 950\n968 950\n974 950\n959 951\n954 952\n958 953\n957 956\n966 956\n972 956\n972 959\n961 960\n962 960\n967 960\n965 961\n971 962\n967 964\n968 964\n970 965\n969 968\n971 970\n982 973\n976 975\n988 975\n1000 975\n988 977\n982 978\n981 980\n983 980\n997 980\n985 982\n986 984\n988 984\n998 986\n992 987\n994 987\n989 988\n991 990\n993 992\n996 994\n997 994\n996 995\n997 996\n1026 1001\n1034 1002\n1031 1003\n1038 1004\n1006 1005\n1012 1005\n1018 1005\n1020 1005\n1029 1005\n1034 1005\n1022 1007\n1009 1008\n1017 1008\n1018 1008\n1020 1008\n1021 1008\n1039 1008\n1039 1010\n1039 1011\n1022 1012\n1028 1012\n1029 1012\n1036 1012\n1037 1012\n1038 1012\n1038 1013\n1028 1014\n1023 1015\n1033 1015\n1028 1016\n1032 1018\n1020 1019\n1023 1022\n1024 1022\n1026 1022\n1033 1023\n1027 1024\n1026 1025\n1027 1026\n1034 1026\n1030 1029\n1033 1031\n1035 1031\n1035 1034\n1049 1042\n1049 1043\n1052 1043\n1046 1044\n1057 1045\n1053 1048\n1050 1049\n1051 1049\n1055 1050\n1055 1054\n1057 1054\n1060 1058\n1071 1061\n1084 1061\n1073 1062\n1074 1063\n1086 1063\n1076 1064\n1079 1064\n1067 1065\n1070 1066\n1068 1067\n1091 1067\n1085 1068\n1076 1069\n1112 1069\n1087 1070\n1074 1071\n1073 1072\n1074 1073\n1080 1073\n1085 1073\n1081 1074\n1076 1075\n1077 1076\n1079 1076\n1087 1076\n1094 1076\n1083 1077\n1084 1077\n1116 1078\n1086 1082\n1105 1088\n1111 1088\n1090 1089\n1092 1090\n1107 1090\n1097 1092\n1095 1094\n1099 1094\n1104 1094\n1112 1094\n1102 1095\n1106 1095\n1111 1095\n1099 1096\n1098 1097\n1100 1099\n1119 1100\n1111 1101\n1117 1103\n1118 1103\n1108 1105\n1113 1109\n1118 1110\n1114 1113\n1115 1113\n1119 1116\n1135 1121\n1134 1123\n1134 1128\n1135 1130\n"
  },
  {
    "path": "cola/libcola/tests/data/uetzNetworkGSC-all.gml",
    "content": "graph [\n  directed 1\n  node [\n    id 1\n    pajek_id 1\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1294.0522048684777\n      y 1122.6497967871214\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 2\n    pajek_id 2\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 2055.718178872795\n      y 1059.2791761907554\n      w 20.0\n      h 20.0\n      fill \"#FF3333\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 3\n    pajek_id 3\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1256.6354129633914\n      y 1695.6123461841953\n      w 20.0\n      h 20.0\n      fill \"#FFFF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 4\n    pajek_id 4\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1184.7211808078375\n      y 935.8910996786233\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 5\n    pajek_id 5\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 2298.0954772536134\n      y 1437.502173559352\n      w 20.0\n      h 20.0\n      fill \"#FF3333\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 6\n    pajek_id 6\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1897.6814785435922\n      y 550.7159507323732\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 7\n    pajek_id 7\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1901.322129497895\n      y 1044.3438487090452\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 8\n    pajek_id 8\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 2780.868057459027\n      y 880.0661109912785\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 9\n    pajek_id 9\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1538.3317441868267\n      y 1411.5744527134639\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 10\n    pajek_id 10\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 396.0152636117873\n      y 1131.0468905861571\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 11\n    pajek_id 11\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 2807.6418756553476\n      y 1965.421804479885\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 12\n    pajek_id 12\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1483.7207919217562\n      y 1613.0999970511837\n      w 20.0\n      h 20.0\n      fill \"#FF3333\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 13\n    pajek_id 13\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 254.92863023355244\n      y 592.4142543364859\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 14\n    pajek_id 14\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 2356.3555481078492\n      y 762.7982298395269\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 15\n    pajek_id 15\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 358.86149369612554\n      y 718.6522617063977\n      w 20.0\n      h 20.0\n      fill \"#FFFF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 16\n    pajek_id 16\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1989.7728584457432\n      y 593.5406100260483\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 17\n    pajek_id 17\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1176.0589697518428\n      y 274.6599182522517\n      w 20.0\n      h 20.0\n      fill \"#FF3333\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 18\n    pajek_id 18\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 815.4286293876028\n      y 1519.2372285089286\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 19\n    pajek_id 19\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1292.8058349907271\n      y 1534.9166231756176\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 20\n    pajek_id 20\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1712.1139015143726\n      y 1743.9840389531971\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 21\n    pajek_id 21\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1159.0926195442978\n      y 60.0\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 22\n    pajek_id 22\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1698.8281996861965\n      y 938.1788913033595\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 23\n    pajek_id 23\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 2117.1960623698105\n      y 377.3080137329175\n      w 20.0\n      h 20.0\n      fill \"#FF3333\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 24\n    pajek_id 24\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1988.5172976949088\n      y 1626.9118171301184\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 25\n    pajek_id 25\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1951.0677192239534\n      y 1227.8213042650113\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 26\n    pajek_id 26\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1209.2907663600151\n      y 571.9488583740487\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 27\n    pajek_id 27\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1553.217522639471\n      y 514.0779699887444\n      w 20.0\n      h 20.0\n      fill \"#FF3333\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 28\n    pajek_id 28\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1216.2131040787344\n      y 1306.3244872331861\n      w 20.0\n      h 20.0\n      fill \"#FF3333\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 29\n    pajek_id 29\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 2495.910234238144\n      y 1509.2542926345884\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 30\n    pajek_id 30\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 2589.368846133916\n      y 902.4410855851487\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 31\n    pajek_id 31\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1900.4466132863522\n      y 960.4878587369396\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 32\n    pajek_id 32\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1480.404193494587\n      y 503.45364906241434\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 33\n    pajek_id 33\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1786.4697371577445\n      y 2321.7848119927116\n      w 20.0\n      h 20.0\n      fill \"#FF3333\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 34\n    pajek_id 34\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1609.213005284541\n      y 1590.2108893694465\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 35\n    pajek_id 35\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 600.5008950141041\n      y 1277.5609673161835\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 36\n    pajek_id 36\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 60.0\n      y 768.8625017780407\n      w 20.0\n      h 20.0\n      fill \"#FFFF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 37\n    pajek_id 37\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 382.9141452731493\n      y 1259.7726277058914\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 38\n    pajek_id 38\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 687.2063369120657\n      y 1082.3933671094655\n      w 20.0\n      h 20.0\n      fill \"#FF3333\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 39\n    pajek_id 39\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1027.5033292569951\n      y 1088.9830040963775\n      w 20.0\n      h 20.0\n      fill \"#FF3333\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 40\n    pajek_id 40\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1632.4747876484166\n      y 710.5037615118014\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 41\n    pajek_id 41\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 748.4550588733631\n      y 1062.8651339361004\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 42\n    pajek_id 42\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 963.8979533416527\n      y 1723.250139029375\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 43\n    pajek_id 43\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1411.3947986828978\n      y 1157.8550891438708\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 44\n    pajek_id 44\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 2648.6214914664592\n      y 360.6532255567197\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 45\n    pajek_id 45\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1012.524198351514\n      y 1566.9080651878785\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 46\n    pajek_id 46\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1673.0588337518445\n      y 1520.3103374282064\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 47\n    pajek_id 47\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 2292.062233641057\n      y 807.7075902196876\n      w 20.0\n      h 20.0\n      fill \"#FFFF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 48\n    pajek_id 48\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 2077.483685032171\n      y 1214.6266410102694\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 49\n    pajek_id 49\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1250.7982377330313\n      y 984.2480480318932\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 50\n    pajek_id 50\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 826.5624689443126\n      y 1458.2342219655006\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 51\n    pajek_id 51\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1043.503156998524\n      y 1914.4120411204835\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 52\n    pajek_id 52\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1097.4841298080655\n      y 608.9543419822743\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 53\n    pajek_id 53\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1151.8669553096083\n      y 1688.783506135614\n      w 20.0\n      h 20.0\n      fill \"#FF3333\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 54\n    pajek_id 54\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1100.1774339936296\n      y 449.9360013393336\n      w 20.0\n      h 20.0\n      fill \"#FF3333\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 55\n    pajek_id 55\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1797.1270429940496\n      y 517.7947984237063\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 56\n    pajek_id 56\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1958.7774891972645\n      y 951.067065374911\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 57\n    pajek_id 57\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1320.7173946510097\n      y 666.953428346941\n      w 20.0\n      h 20.0\n      fill \"#FF3333\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 58\n    pajek_id 58\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 409.511718757674\n      y 754.8270051102944\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 59\n    pajek_id 59\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 456.52944375010406\n      y 1644.5489937771122\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 60\n    pajek_id 60\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1650.4029796871373\n      y 1281.9794653489726\n      w 20.0\n      h 20.0\n      fill \"#FF3333\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 61\n    pajek_id 61\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 2203.5059215970086\n      y 1103.986465771347\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 62\n    pajek_id 62\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1648.5790338469196\n      y 1619.5713910478498\n      w 20.0\n      h 20.0\n      fill \"#FF3333\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 63\n    pajek_id 63\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1441.449939123268\n      y 278.4421140050705\n      w 20.0\n      h 20.0\n      fill \"#FF3333\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 64\n    pajek_id 64\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1646.3755592037082\n      y 1867.8552090742746\n      w 20.0\n      h 20.0\n      fill \"#FF3333\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 65\n    pajek_id 65\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1690.4064173252282\n      y 1106.6596200585911\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 66\n    pajek_id 66\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1375.2079396723311\n      y 1567.1239230162141\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 67\n    pajek_id 67\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1381.6936762897983\n      y 930.9429010096588\n      w 20.0\n      h 20.0\n      fill \"#FF3333\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 68\n    pajek_id 68\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 2246.515691754706\n      y 1228.672822112808\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 69\n    pajek_id 69\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 2513.1221976499774\n      y 2123.5607442911432\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 70\n    pajek_id 70\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 325.1248018822786\n      y 1301.1300387216584\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 71\n    pajek_id 71\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 905.4567507395766\n      y 1635.3403866013616\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 72\n    pajek_id 72\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1409.3758774490468\n      y 2445.8494772528247\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 73\n    pajek_id 73\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 270.55209645867626\n      y 1976.484880612065\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 74\n    pajek_id 74\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1846.104723102188\n      y 2357.13888536703\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 75\n    pajek_id 75\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1931.8467589445268\n      y 1416.3573716456167\n      w 20.0\n      h 20.0\n      fill \"#FFFF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 76\n    pajek_id 76\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 219.41564456563447\n      y 351.74606877700694\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 77\n    pajek_id 77\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1574.267945560331\n      y 994.005057804803\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 78\n    pajek_id 78\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 2258.765897434142\n      y 975.7865089151361\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 79\n    pajek_id 79\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1003.0168039671166\n      y 818.3149905376152\n      w 20.0\n      h 20.0\n      fill \"#FF3333\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 80\n    pajek_id 80\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 2162.351384651877\n      y 639.3742942428671\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 81\n    pajek_id 81\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1175.3498984884113\n      y 205.4073989675603\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 82\n    pajek_id 82\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1025.8732247508035\n      y 146.60499318409438\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 83\n    pajek_id 83\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 784.8316721743003\n      y 739.8886774008013\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 84\n    pajek_id 84\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 2358.3905436512314\n      y 1757.8833117002607\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 85\n    pajek_id 85\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 187.0231231288874\n      y 464.9030131392583\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 86\n    pajek_id 86\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1680.1684155817545\n      y 989.3992861143759\n      w 20.0\n      h 20.0\n      fill \"#FFFF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 87\n    pajek_id 87\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1592.5433115122046\n      y 1133.073079548351\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 88\n    pajek_id 88\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 984.0210982272379\n      y 1907.6496174273066\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 89\n    pajek_id 89\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1908.2544551347682\n      y 1953.0395792102486\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 90\n    pajek_id 90\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1760.6396933740039\n      y 454.1561397683437\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 91\n    pajek_id 91\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1510.4214829476575\n      y 255.4247158499462\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 92\n    pajek_id 92\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 2156.911158437812\n      y 1737.2936541047445\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 93\n    pajek_id 93\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 2330.4433111549088\n      y 1066.919264412134\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 94\n    pajek_id 94\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1489.0049739638976\n      y 1102.8420420131365\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 95\n    pajek_id 95\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1381.821327085725\n      y 1425.799958792195\n      w 20.0\n      h 20.0\n      fill \"#FF3333\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 96\n    pajek_id 96\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 2026.5031721150344\n      y 1195.03677714938\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 97\n    pajek_id 97\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1566.5985533781122\n      y 2134.591986800821\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 98\n    pajek_id 98\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1866.8579043433465\n      y 496.54994132044186\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 99\n    pajek_id 99\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1709.8596572466934\n      y 1537.0985557194695\n      w 20.0\n      h 20.0\n      fill \"#FF3333\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 100\n    pajek_id 100\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1058.888749291412\n      y 1423.3219452240978\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 101\n    pajek_id 101\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1026.841049144297\n      y 1526.2197338662158\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 102\n    pajek_id 102\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1234.128325564796\n      y 1058.423971642138\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 103\n    pajek_id 103\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 2269.604004829725\n      y 1961.2578434564753\n      w 20.0\n      h 20.0\n      fill \"#FF3333\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 104\n    pajek_id 104\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1204.604308471341\n      y 331.2782608195139\n      w 20.0\n      h 20.0\n      fill \"#FF3333\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 105\n    pajek_id 105\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1456.5954783621391\n      y 2393.969680005851\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 106\n    pajek_id 106\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1030.6221217055054\n      y 1655.7105879228054\n      w 20.0\n      h 20.0\n      fill \"#FF3333\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 107\n    pajek_id 107\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1825.2038903621162\n      y 1764.5225692398108\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 108\n    pajek_id 108\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 855.344393246044\n      y 1581.4397578617163\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 109\n    pajek_id 109\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 2290.109859607357\n      y 1866.4142704202714\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 110\n    pajek_id 110\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 2016.9300946422195\n      y 1800.0828289087844\n      w 20.0\n      h 20.0\n      fill \"#FF3333\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 111\n    pajek_id 111\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 2311.298477488912\n      y 1203.9224047333146\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 112\n    pajek_id 112\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 2173.9918013172064\n      y 1358.97529576786\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 113\n    pajek_id 113\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 402.8249532029572\n      y 2005.0535234158124\n      w 20.0\n      h 20.0\n      fill \"#FF3333\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 114\n    pajek_id 114\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1370.447752295795\n      y 1698.544524957459\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 115\n    pajek_id 115\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 824.5410187470699\n      y 2203.3482170965663\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 116\n    pajek_id 116\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1899.5312814624624\n      y 341.64788217907767\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 117\n    pajek_id 117\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1275.5334231652173\n      y 435.5539332588777\n      w 20.0\n      h 20.0\n      fill \"#FF3333\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 118\n    pajek_id 118\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1799.057369842763\n      y 898.644722551811\n      w 20.0\n      h 20.0\n      fill \"#FF3333\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 119\n    pajek_id 119\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 936.3882990544396\n      y 542.1677084693897\n      w 20.0\n      h 20.0\n      fill \"#FF3333\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 120\n    pajek_id 120\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 2035.2157086365958\n      y 549.5503878259726\n      w 20.0\n      h 20.0\n      fill \"#FF3333\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 121\n    pajek_id 121\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 2306.5008116638155\n      y 2172.8922465255055\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 122\n    pajek_id 122\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 794.0600584680333\n      y 1767.0092661358444\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 123\n    pajek_id 123\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 967.8528471899847\n      y 1305.606206649742\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 124\n    pajek_id 124\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 2478.6497152538377\n      y 1203.6776389496872\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 125\n    pajek_id 125\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1997.321116636319\n      y 2192.367195588601\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 126\n    pajek_id 126\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1177.3434085029842\n      y 778.6424846605535\n      w 20.0\n      h 20.0\n      fill \"#FF3333\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 127\n    pajek_id 127\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1585.5048018331465\n      y 1455.2573996761384\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 128\n    pajek_id 128\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 472.28484900676176\n      y 718.0672675218485\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 129\n    pajek_id 129\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 794.0849295823707\n      y 1371.6459663216558\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 130\n    pajek_id 130\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 2008.8851806591924\n      y 1293.0028606195688\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 131\n    pajek_id 131\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1441.295381525302\n      y 564.6073812973832\n      w 20.0\n      h 20.0\n      fill \"#FF3333\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 132\n    pajek_id 132\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1861.1042483735764\n      y 1523.2486386191717\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 133\n    pajek_id 133\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 957.7655245033009\n      y 114.39870152004505\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 134\n    pajek_id 134\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1961.9942877269461\n      y 124.43728726767961\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 135\n    pajek_id 135\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 2317.512327717449\n      y 924.258173136443\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 136\n    pajek_id 136\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1800.1506277595804\n      y 2261.975902475042\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 137\n    pajek_id 137\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 595.234814691012\n      y 1025.317899636531\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 138\n    pajek_id 138\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 964.840641154222\n      y 247.01750927240698\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 139\n    pajek_id 139\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 588.9999815953205\n      y 2079.3235704527674\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 140\n    pajek_id 140\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 2110.3560493557006\n      y 505.8109983485984\n      w 20.0\n      h 20.0\n      fill \"#FFFF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 141\n    pajek_id 141\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1399.3112848730054\n      y 1227.804800096851\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 142\n    pajek_id 142\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1334.1378233999883\n      y 1813.8827309253875\n      w 20.0\n      h 20.0\n      fill \"#FF3333\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 143\n    pajek_id 143\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1805.918047276415\n      y 624.9341989045439\n      w 20.0\n      h 20.0\n      fill \"#FF3333\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 144\n    pajek_id 144\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1467.2887831794974\n      y 1491.092756875548\n      w 20.0\n      h 20.0\n      fill \"#FF3333\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 145\n    pajek_id 145\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1369.2679808531936\n      y 1127.5618294352796\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 146\n    pajek_id 146\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 2025.2400562476682\n      y 1570.3163109170114\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 147\n    pajek_id 147\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 2055.8364822532835\n      y 684.3901430356791\n      w 20.0\n      h 20.0\n      fill \"#FF3333\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 148\n    pajek_id 148\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 2458.5244327113796\n      y 1391.3830145494958\n      w 20.0\n      h 20.0\n      fill \"#FF3333\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 149\n    pajek_id 149\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1552.825479830451\n      y 1252.8654366828728\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 150\n    pajek_id 150\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 2642.703200490143\n      y 873.2840758651536\n      w 20.0\n      h 20.0\n      fill \"#FFFF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 151\n    pajek_id 151\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 2493.621315614442\n      y 1057.6778103427564\n      w 20.0\n      h 20.0\n      fill \"#FFFF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 152\n    pajek_id 152\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 2048.524265153669\n      y 2396.6375817898183\n      w 20.0\n      h 20.0\n      fill \"#FFFF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 153\n    pajek_id 153\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1295.8980767195865\n      y 1281.8240646387455\n      w 20.0\n      h 20.0\n      fill \"#FF3333\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 154\n    pajek_id 154\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 948.0256773985192\n      y 874.4275219392624\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 155\n    pajek_id 155\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1060.558142370161\n      y 2121.7015632861817\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 156\n    pajek_id 156\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1588.0692311325395\n      y 2419.735277431223\n      w 20.0\n      h 20.0\n      fill \"#FF3333\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 157\n    pajek_id 157\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1399.2208755506806\n      y 668.8198477332975\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 158\n    pajek_id 158\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1580.2791211407448\n      y 894.9665199234698\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 159\n    pajek_id 159\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1585.445364428028\n      y 1518.9113878761736\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 160\n    pajek_id 160\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 2149.623427593962\n      y 1585.663447804202\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 161\n    pajek_id 161\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1073.2288913412556\n      y 1374.5854206557112\n      w 20.0\n      h 20.0\n      fill \"#FF3333\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 162\n    pajek_id 162\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 493.61694579516404\n      y 1365.494793302807\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 163\n    pajek_id 163\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1286.2369050296045\n      y 1067.3473338636227\n      w 20.0\n      h 20.0\n      fill \"#FF3333\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 164\n    pajek_id 164\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 927.1316689881887\n      y 1385.503225606381\n      w 20.0\n      h 20.0\n      fill \"#FF3333\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 165\n    pajek_id 165\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 2193.2522202024475\n      y 1206.1206658070653\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 166\n    pajek_id 166\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 772.1411120215096\n      y 1970.8119423759322\n      w 20.0\n      h 20.0\n      fill \"#FF3333\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 167\n    pajek_id 167\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1145.792529275603\n      y 1177.4939749954644\n      w 20.0\n      h 20.0\n      fill \"#FF3333\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 168\n    pajek_id 168\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 782.4194952141179\n      y 2042.5751921467117\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 169\n    pajek_id 169\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1254.116200428233\n      y 2594.759114678682\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 170\n    pajek_id 170\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 2678.2734809510507\n      y 2096.8291622390625\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 171\n    pajek_id 171\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 2400.4372550336543\n      y 1652.7179946898918\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 172\n    pajek_id 172\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1386.2112759254533\n      y 1638.7948048718672\n      w 20.0\n      h 20.0\n      fill \"#FF3333\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 173\n    pajek_id 173\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 943.8883491218697\n      y 1073.7919591358736\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 174\n    pajek_id 174\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1179.1603874552718\n      y 1122.3817446803446\n      w 20.0\n      h 20.0\n      fill \"#FF3333\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 175\n    pajek_id 175\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 2233.8795632906877\n      y 1527.7817714192893\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 176\n    pajek_id 176\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 2163.4669644146798\n      y 1260.955553479491\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 177\n    pajek_id 177\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1869.4250586602952\n      y 2472.448020780895\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 178\n    pajek_id 178\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1112.7457233061032\n      y 1329.0846670907608\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 179\n    pajek_id 179\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1118.8056866951574\n      y 852.6869706221119\n      w 20.0\n      h 20.0\n      fill \"#FF3333\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 180\n    pajek_id 180\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1307.2508861643091\n      y 2462.7701746985686\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 181\n    pajek_id 181\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1380.5745060829129\n      y 1076.2706855348051\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 182\n    pajek_id 182\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 2036.4065621255\n      y 2529.571297575046\n      w 20.0\n      h 20.0\n      fill \"#FF3333\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 183\n    pajek_id 183\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1074.9510652351762\n      y 801.3658771409633\n      w 20.0\n      h 20.0\n      fill \"#FF3333\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 184\n    pajek_id 184\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 255.45722686156626\n      y 1805.532111761012\n      w 20.0\n      h 20.0\n      fill \"#FF3333\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 185\n    pajek_id 185\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 2342.5052901155595\n      y 1982.0954207181567\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 186\n    pajek_id 186\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1178.1746215798703\n      y 871.8443836872366\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 187\n    pajek_id 187\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1537.0518689637947\n      y 1540.5124880929002\n      w 20.0\n      h 20.0\n      fill \"#FF3333\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 188\n    pajek_id 188\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1236.2077456256104\n      y 1534.272658840872\n      w 20.0\n      h 20.0\n      fill \"#FF3333\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 189\n    pajek_id 189\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1621.2397812102838\n      y 1400.4425940981625\n      w 20.0\n      h 20.0\n      fill \"#FF3333\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 190\n    pajek_id 190\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 766.3905805597286\n      y 886.402470142523\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 191\n    pajek_id 191\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 2168.7884396974873\n      y 550.016818013951\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 192\n    pajek_id 192\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 993.9061877291988\n      y 1029.772643432917\n      w 20.0\n      h 20.0\n      fill \"#FF3333\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 193\n    pajek_id 193\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 463.0359831362713\n      y 1022.0861273460611\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 194\n    pajek_id 194\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 639.0038131671084\n      y 555.7612618656989\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 195\n    pajek_id 195\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1814.9683409976778\n      y 2445.753076164031\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 196\n    pajek_id 196\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1686.4439166148054\n      y 1938.4699461276296\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 197\n    pajek_id 197\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 930.0951591923147\n      y 1241.663890087508\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 198\n    pajek_id 198\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 520.2346633262122\n      y 1199.2357895089199\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 199\n    pajek_id 199\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1971.6382604373562\n      y 343.1014653785635\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 200\n    pajek_id 200\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 2027.0179357401762\n      y 1349.107156613678\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 201\n    pajek_id 201\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 2087.081528540994\n      y 802.4499939958602\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 202\n    pajek_id 202\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 625.0171226735023\n      y 1914.7856839077308\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 203\n    pajek_id 203\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1899.9652173985933\n      y 2072.1438307043504\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 204\n    pajek_id 204\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1606.0783659797662\n      y 1837.1508274695605\n      w 20.0\n      h 20.0\n      fill \"#FF3333\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 205\n    pajek_id 205\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 901.3919870421247\n      y 1513.1982896128998\n      w 20.0\n      h 20.0\n      fill \"#FF3333\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 206\n    pajek_id 206\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 2538.1638433893568\n      y 1616.7551606942914\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 207\n    pajek_id 207\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1866.691494571614\n      y 2114.4934954074397\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 208\n    pajek_id 208\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1028.2574487173333\n      y 973.0790458888064\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 209\n    pajek_id 209\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1753.7616445481387\n      y 928.4269154425315\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 210\n    pajek_id 210\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 434.8320641528154\n      y 900.7941512774352\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 211\n    pajek_id 211\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1197.692612238198\n      y 1656.3283202472192\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 212\n    pajek_id 212\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 2262.872473159019\n      y 855.5192882246674\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 213\n    pajek_id 213\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 2005.7033668568552\n      y 1687.3129033516693\n      w 20.0\n      h 20.0\n      fill \"#FF3333\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 214\n    pajek_id 214\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 2005.4330911080656\n      y 1248.6067376996575\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 215\n    pajek_id 215\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1497.6387156758587\n      y 409.988817350047\n      w 20.0\n      h 20.0\n      fill \"#FFFF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 216\n    pajek_id 216\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1511.6499513985573\n      y 2019.1033155888222\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 217\n    pajek_id 217\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1832.9845660337855\n      y 1594.9330492361391\n      w 20.0\n      h 20.0\n      fill \"#FF3333\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 218\n    pajek_id 218\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 2124.163466904739\n      y 1121.7594517130105\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 219\n    pajek_id 219\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 2114.0594425877107\n      y 879.072087899176\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 220\n    pajek_id 220\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 2060.685078868419\n      y 1835.1973884802942\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 221\n    pajek_id 221\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 2250.360824827312\n      y 908.8247250753682\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 222\n    pajek_id 222\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1619.44524541997\n      y 1208.958636465997\n      w 20.0\n      h 20.0\n      fill \"#FF3333\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 223\n    pajek_id 223\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1420.5578431824722\n      y 1022.1078286320392\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 224\n    pajek_id 224\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1804.5906551872706\n      y 1356.7859367888193\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 225\n    pajek_id 225\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1182.3901258139676\n      y 1078.275091742608\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 226\n    pajek_id 226\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 939.5649257137159\n      y 750.6386331311932\n      w 20.0\n      h 20.0\n      fill \"#FF3333\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 227\n    pajek_id 227\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1227.5697565955718\n      y 1194.722525770867\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 228\n    pajek_id 228\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1677.315636418083\n      y 818.1002681824733\n      w 20.0\n      h 20.0\n      fill \"#FF3333\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 229\n    pajek_id 229\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1969.8218697907696\n      y 2124.400924405766\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 230\n    pajek_id 230\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1346.0361911089835\n      y 591.0926251849802\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 231\n    pajek_id 231\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1937.4480655403545\n      y 1484.3086656977262\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 232\n    pajek_id 232\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 913.1080893674856\n      y 2448.9010701058382\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 233\n    pajek_id 233\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 980.1355123328368\n      y 2143.0193206720637\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 234\n    pajek_id 234\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 2468.507735819624\n      y 680.6867726745393\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 235\n    pajek_id 235\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 961.6345650781091\n      y 965.0860824711237\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 236\n    pajek_id 236\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 492.09673495414074\n      y 284.8975707321614\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 237\n    pajek_id 237\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1446.3792419244076\n      y 1813.9029462286976\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 238\n    pajek_id 238\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1813.9462106455926\n      y 947.4822230702299\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 239\n    pajek_id 239\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1428.5911518460912\n      y 1609.8340596280282\n      w 20.0\n      h 20.0\n      fill \"#FF3333\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 240\n    pajek_id 240\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1005.3650634855937\n      y 882.2530156601648\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 241\n    pajek_id 241\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1970.4155162426391\n      y 1125.8976010185038\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 242\n    pajek_id 242\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 240.57076448405542\n      y 1473.723263945339\n      w 20.0\n      h 20.0\n      fill \"#FF3333\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 243\n    pajek_id 243\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 2046.1993784054494\n      y 950.6121816835345\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 244\n    pajek_id 244\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 2808.307733786458\n      y 1514.739154198832\n      w 20.0\n      h 20.0\n      fill \"#FF3333\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 245\n    pajek_id 245\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1882.8938446652257\n      y 1459.0281000095843\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 246\n    pajek_id 246\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1723.9114037847546\n      y 2365.644132764209\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 247\n    pajek_id 247\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1936.717394034969\n      y 1594.3192138208242\n      w 20.0\n      h 20.0\n      fill \"#FFFF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 248\n    pajek_id 248\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1971.7509493535508\n      y 1179.4845850946012\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 249\n    pajek_id 249\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1058.6250365444143\n      y 859.7134012319751\n      w 20.0\n      h 20.0\n      fill \"#FF3333\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 250\n    pajek_id 250\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1875.0949016123318\n      y 2018.8968281970356\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 251\n    pajek_id 251\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 802.2218018782783\n      y 830.0503347776802\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 252\n    pajek_id 252\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 813.0528123889172\n      y 1656.3453211681867\n      w 20.0\n      h 20.0\n      fill \"#FF3333\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 253\n    pajek_id 253\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1273.6722755380645\n      y 562.4903627029978\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 254\n    pajek_id 254\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 738.6225904711797\n      y 1832.437257453023\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 255\n    pajek_id 255\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 2123.755229836545\n      y 2672.877537298277\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 256\n    pajek_id 256\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 766.238178017943\n      y 627.4085851267696\n      w 20.0\n      h 20.0\n      fill \"#FF3333\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 257\n    pajek_id 257\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1129.8317234871274\n      y 1757.6767114954823\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 258\n    pajek_id 258\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 2009.7762232303267\n      y 2041.0971651622217\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 259\n    pajek_id 259\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1736.9465300050063\n      y 1793.4455313056224\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 260\n    pajek_id 260\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 648.0899197694613\n      y 1133.071910642336\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 261\n    pajek_id 261\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 2673.608535682633\n      y 1969.3166527926637\n      w 20.0\n      h 20.0\n      fill \"#FF3333\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 262\n    pajek_id 262\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1190.4241821550581\n      y 1456.8778384709221\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 263\n    pajek_id 263\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1773.3304812765168\n      y 1171.6981943217245\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 264\n    pajek_id 264\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 2455.8689870091684\n      y 1698.2588839027976\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 265\n    pajek_id 265\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1572.4184904317372\n      y 1079.9405584556314\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 266\n    pajek_id 266\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 930.5993117411441\n      y 932.4301787306301\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 267\n    pajek_id 267\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1241.016109181929\n      y 1641.851386078472\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 268\n    pajek_id 268\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1778.3112226979574\n      y 1527.5198182466306\n      w 20.0\n      h 20.0\n      fill \"#FF3333\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 269\n    pajek_id 269\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1997.6945206439827\n      y 1435.167335502786\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 270\n    pajek_id 270\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 2928.2834579168007\n      y 1108.202244706911\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 271\n    pajek_id 271\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1549.1458457473145\n      y 592.3498910478805\n      w 20.0\n      h 20.0\n      fill \"#FF3333\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 272\n    pajek_id 272\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 2567.1609182049815\n      y 349.9728983492399\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 273\n    pajek_id 273\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1790.3664691634244\n      y 2391.926302478362\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 274\n    pajek_id 274\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1156.9233946634465\n      y 1363.0451223083915\n      w 20.0\n      h 20.0\n      fill \"#FF3333\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 275\n    pajek_id 275\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 856.1024353157368\n      y 2058.0580043741106\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 276\n    pajek_id 276\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 2007.3448524911623\n      y 955.2249749444019\n      w 20.0\n      h 20.0\n      fill \"#FF3333\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 277\n    pajek_id 277\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1867.826843063508\n      y 1168.1178614284738\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 278\n    pajek_id 278\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1849.7065836818551\n      y 1931.1333235795955\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 279\n    pajek_id 279\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1260.0763722109286\n      y 655.2169595822215\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 280\n    pajek_id 280\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1899.1104082490497\n      y 1614.8129891919102\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 281\n    pajek_id 281\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 2378.43114046961\n      y 2184.529789498435\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 282\n    pajek_id 282\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 2040.929028434561\n      y 2329.0083925520726\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 283\n    pajek_id 283\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1329.822091272441\n      y 817.7805081038614\n      w 20.0\n      h 20.0\n      fill \"#FF3333\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 284\n    pajek_id 284\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1916.5095601095395\n      y 1315.8369929397447\n      w 20.0\n      h 20.0\n      fill \"#FF3333\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 285\n    pajek_id 285\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1540.8732018426379\n      y 1757.2830276053164\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 286\n    pajek_id 286\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1497.5518877310492\n      y 2332.209587716714\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 287\n    pajek_id 287\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1820.876610989953\n      y 1705.7800792711614\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 288\n    pajek_id 288\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 2053.621424690008\n      y 137.4950984709352\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 289\n    pajek_id 289\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 2288.638168809773\n      y 1661.1373438648448\n      w 20.0\n      h 20.0\n      fill \"#FF3333\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 290\n    pajek_id 290\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 2521.628031511117\n      y 1112.8442155271284\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 291\n    pajek_id 291\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 2621.075261275747\n      y 1040.7003954194217\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 292\n    pajek_id 292\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1489.7226658046911\n      y 1212.598420726727\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 293\n    pajek_id 293\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1344.039251806568\n      y 765.4921416388333\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 294\n    pajek_id 294\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 2783.106085646018\n      y 1011.1576483698651\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 295\n    pajek_id 295\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 666.034857878941\n      y 1196.1544941612838\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 296\n    pajek_id 296\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1069.4593629564115\n      y 1627.9059240200613\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 297\n    pajek_id 297\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1798.2247140891636\n      y 1428.1375539568382\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 298\n    pajek_id 298\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1934.1343683875075\n      y 2404.2315045912405\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 299\n    pajek_id 299\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 2699.851785344458\n      y 427.8558563028148\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 300\n    pajek_id 300\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 834.2031874852718\n      y 250.70469068286297\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 301\n    pajek_id 301\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1004.0710874574961\n      y 1280.167160042513\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 302\n    pajek_id 302\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1750.4516583745296\n      y 1471.2162955489407\n      w 20.0\n      h 20.0\n      fill \"#FF3333\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 303\n    pajek_id 303\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 2401.7820655598725\n      y 2272.1863557268275\n      w 20.0\n      h 20.0\n      fill \"#FF3333\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 304\n    pajek_id 304\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1814.6823768957051\n      y 2071.5062836539637\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 305\n    pajek_id 305\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 2520.536274654057\n      y 992.8636618688267\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 306\n    pajek_id 306\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 2265.0881548319567\n      y 2065.5837863656484\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 307\n    pajek_id 307\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1257.8172960656739\n      y 803.4108171125971\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 308\n    pajek_id 308\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 776.7856178664061\n      y 1694.4563434703907\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 309\n    pajek_id 309\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1440.886631358504\n      y 1532.750033969016\n      w 20.0\n      h 20.0\n      fill \"#FF3333\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 310\n    pajek_id 310\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1989.010230552772\n      y 259.2322753906619\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 311\n    pajek_id 311\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 793.6486929322533\n      y 1180.108345062422\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 312\n    pajek_id 312\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1917.539646877893\n      y 2281.8557999514537\n      w 20.0\n      h 20.0\n      fill \"#FF3333\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 313\n    pajek_id 313\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 867.9822424379655\n      y 1709.027298137467\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 314\n    pajek_id 314\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1484.2011650524655\n      y 1345.1479429348788\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 315\n    pajek_id 315\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1076.084829910138\n      y 996.0235144558553\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 316\n    pajek_id 316\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1693.090850412172\n      y 2090.5966253636116\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 317\n    pajek_id 317\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 2037.1290633056465\n      y 369.80076511683393\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 318\n    pajek_id 318\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1007.8277192737382\n      y 1754.1325273022699\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 319\n    pajek_id 319\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 2172.028629136008\n      y 1461.0364064098994\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 320\n    pajek_id 320\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 2257.1227609527\n      y 1310.8862977736107\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 321\n    pajek_id 321\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1300.745991888025\n      y 2187.297908294803\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 322\n    pajek_id 322\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 2204.6686322693918\n      y 1410.994870895594\n      w 20.0\n      h 20.0\n      fill \"#FF3333\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 323\n    pajek_id 323\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 864.8355633586339\n      y 1982.7204827008345\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 324\n    pajek_id 324\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 800.0003105548103\n      y 1923.7791435231852\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 325\n    pajek_id 325\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1024.7502660900132\n      y 1366.1758015615299\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 326\n    pajek_id 326\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 2050.7149391093694\n      y 1257.3982758996383\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 327\n    pajek_id 327\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 960.7821525481202\n      y 1584.4968382633942\n      w 20.0\n      h 20.0\n      fill \"#FF3333\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 328\n    pajek_id 328\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1124.4061711877166\n      y 1046.726994002646\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 329\n    pajek_id 329\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1108.4893044148541\n      y 1194.3431578903087\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 330\n    pajek_id 330\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1100.133655193655\n      y 1137.6918022343907\n      w 20.0\n      h 20.0\n      fill \"#FF3333\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 331\n    pajek_id 331\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1760.6862781934046\n      y 1320.6513715309195\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 332\n    pajek_id 332\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1200.2523322538245\n      y 1002.7964728390644\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 333\n    pajek_id 333\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1181.4892595539825\n      y 1225.6989123360675\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 334\n    pajek_id 334\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1868.4127438749463\n      y 1117.6967188028786\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 335\n    pajek_id 335\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 2168.6794851454647\n      y 1162.2427344452735\n      w 20.0\n      h 20.0\n      fill \"#FF3333\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 336\n    pajek_id 336\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1920.9638225147678\n      y 876.5150707247215\n      w 20.0\n      h 20.0\n      fill \"#FF3333\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 337\n    pajek_id 337\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 2920.808088394186\n      y 892.3685934633982\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 338\n    pajek_id 338\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1645.909927183584\n      y 1471.9956590731072\n      w 20.0\n      h 20.0\n      fill \"#FF3333\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 339\n    pajek_id 339\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1447.1109049135396\n      y 1746.1534799232427\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 340\n    pajek_id 340\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1303.087697302223\n      y 1599.75182872408\n      w 20.0\n      h 20.0\n      fill \"#FF3333\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 341\n    pajek_id 341\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1404.1964183968635\n      y 1732.988309973422\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 342\n    pajek_id 342\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 188.7586938483705\n      y 732.4710661793797\n      w 20.0\n      h 20.0\n      fill \"#FFFF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 343\n    pajek_id 343\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 237.5145668340565\n      y 798.209667685809\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 344\n    pajek_id 344\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 655.6090365411286\n      y 768.8237020380398\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 345\n    pajek_id 345\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1239.593772491194\n      y 142.24994629451373\n      w 20.0\n      h 20.0\n      fill \"#FF3333\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 346\n    pajek_id 346\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 668.4582174721975\n      y 1570.710895937615\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 347\n    pajek_id 347\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 704.1732692312117\n      y 1623.8128247520694\n      w 20.0\n      h 20.0\n      fill \"#FFFF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 348\n    pajek_id 348\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1806.5024342076917\n      y 1845.9002776470725\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 349\n    pajek_id 349\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1572.0491307665409\n      y 1632.2321415433307\n      w 20.0\n      h 20.0\n      fill \"#FF3333\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 350\n    pajek_id 350\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 2170.491596866099\n      y 252.15493902189132\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 351\n    pajek_id 351\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 2236.6106720779644\n      y 313.9614539100346\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 352\n    pajek_id 352\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1956.787709026074\n      y 478.6286472297293\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 353\n    pajek_id 353\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1521.6247356278914\n      y 651.1377056441239\n      w 20.0\n      h 20.0\n      fill \"#FF3333\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 354\n    pajek_id 354\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 2673.4749982408534\n      y 1517.3687949519558\n      w 20.0\n      h 20.0\n      fill \"#FF3333\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 355\n    pajek_id 355\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 2462.8285772682266\n      y 853.132399611773\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 356\n    pajek_id 356\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 2723.74809870115\n      y 928.6302426931661\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 357\n    pajek_id 357\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1370.7051182886262\n      y 1487.7369332080375\n      w 20.0\n      h 20.0\n      fill \"#FF3333\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 358\n    pajek_id 358\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 468.7736750192556\n      y 1245.6923887724063\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 359\n    pajek_id 359\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 769.1240346507418\n      y 1297.5083732935518\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 360\n    pajek_id 360\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1281.6747231335723\n      y 1222.571355135779\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 361\n    pajek_id 361\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 2579.810673602955\n      y 486.0242869026378\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 362\n    pajek_id 362\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1625.153907135859\n      y 1657.7991036276171\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 363\n    pajek_id 363\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1685.4668204197178\n      y 1675.1432793501972\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 364\n    pajek_id 364\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1649.065379741583\n      y 1710.3631889761837\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 365\n    pajek_id 365\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1735.2434575622904\n      y 1652.0103910358575\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 366\n    pajek_id 366\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1546.6380216667462\n      y 1660.4291808801559\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 367\n    pajek_id 367\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1592.959070056042\n      y 1701.930864398132\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 368\n    pajek_id 368\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 2000.4352383965368\n      y 1758.4816008564803\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 369\n    pajek_id 369\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1468.5107210693257\n      y 1274.5523522286858\n      w 20.0\n      h 20.0\n      fill \"#FF3333\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 370\n    pajek_id 370\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1343.841518355971\n      y 868.6992458482348\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 371\n    pajek_id 371\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 956.4416724575727\n      y 1542.5109738519532\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 372\n    pajek_id 372\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1033.5848153857899\n      y 2047.0346481519837\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 373\n    pajek_id 373\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1145.9845954789732\n      y 2010.3598901708774\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 374\n    pajek_id 374\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 966.9695596108811\n      y 2038.5494954424362\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 375\n    pajek_id 375\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1101.5378289239488\n      y 2056.772094668872\n      w 20.0\n      h 20.0\n      fill \"#FFFF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 376\n    pajek_id 376\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1015.5518645355227\n      y 498.21676713384437\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 377\n    pajek_id 377\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1108.5018026732564\n      y 1836.2444968902573\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 378\n    pajek_id 378\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1050.8064474323255\n      y 1820.5838099325315\n      w 20.0\n      h 20.0\n      fill \"#FF3333\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 379\n    pajek_id 379\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1022.4653344068506\n      y 1715.6126995231655\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 380\n    pajek_id 380\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 973.3911705488091\n      y 1656.6045446044554\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 381\n    pajek_id 381\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 980.1312729019277\n      y 1790.1875755402975\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 382\n    pajek_id 382\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1165.9502913921285\n      y 1848.0553893620186\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 383\n    pajek_id 383\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1847.4512820966625\n      y 997.8047505299883\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 384\n    pajek_id 384\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1834.8709235195802\n      y 1082.3420824375842\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 385\n    pajek_id 385\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1926.272882956845\n      y 1130.2140856000237\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 386\n    pajek_id 386\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 2019.5057069987238\n      y 1083.2924715168538\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 387\n    pajek_id 387\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 340.467937490798\n      y 1722.2588619668122\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 388\n    pajek_id 388\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 613.237652883032\n      y 1579.9427905965279\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 389\n    pajek_id 389\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1655.1932187894404\n      y 1782.2310536598284\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 390\n    pajek_id 390\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1637.2667690847445\n      y 952.3525949687174\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 391\n    pajek_id 391\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 2630.804204930251\n      y 2213.7673865428937\n      w 20.0\n      h 20.0\n      fill \"#FF3333\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 392\n    pajek_id 392\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1080.8078508715175\n      y 1570.3664421378583\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 393\n    pajek_id 393\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 2234.068836486567\n      y 1160.6502978141489\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 394\n    pajek_id 394\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1086.7948765031201\n      y 76.91119774421213\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 395\n    pajek_id 395\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 2461.9112093928975\n      y 1766.6838415805391\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 396\n    pajek_id 396\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 113.1199288710568\n      y 369.28510273478156\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 397\n    pajek_id 397\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1776.1814775671203\n      y 1971.90651207382\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 398\n    pajek_id 398\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1707.0558465571435\n      y 1296.0087781780164\n      w 20.0\n      h 20.0\n      fill \"#FF3333\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 399\n    pajek_id 399\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1417.7718529314445\n      y 1350.7244506853776\n      w 20.0\n      h 20.0\n      fill \"#FF3333\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 400\n    pajek_id 400\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 2125.52060844245\n      y 1048.4849048770884\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 401\n    pajek_id 401\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1552.3770468848625\n      y 2260.559438155617\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 402\n    pajek_id 402\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1874.1651337345234\n      y 1245.0945400298474\n      w 20.0\n      h 20.0\n      fill \"#FF3333\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 403\n    pajek_id 403\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1256.6383628219503\n      y 1450.7738470869801\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 404\n    pajek_id 404\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 2259.967596935999\n      y 2120.7466929344328\n      w 20.0\n      h 20.0\n      fill \"#FF3333\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 405\n    pajek_id 405\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 2500.5496931980915\n      y 1966.736685021926\n      w 20.0\n      h 20.0\n      fill \"#FF3333\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 406\n    pajek_id 406\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 2347.7927648395157\n      y 2091.6701739856917\n      w 20.0\n      h 20.0\n      fill \"#FF3333\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 407\n    pajek_id 407\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 2392.889146581768\n      y 2044.8922015795006\n      w 20.0\n      h 20.0\n      fill \"#FF3333\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 408\n    pajek_id 408\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 2417.761515347872\n      y 1975.5515523680338\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 409\n    pajek_id 409\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1793.9182626491624\n      y 1627.666690778881\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 410\n    pajek_id 410\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 719.1430254147674\n      y 1486.956454607635\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 411\n    pajek_id 411\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 724.2454716778103\n      y 1551.3831943720716\n      w 20.0\n      h 20.0\n      fill \"#FF3333\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 412\n    pajek_id 412\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 2447.6879968351877\n      y 1876.5514180960204\n      w 20.0\n      h 20.0\n      fill \"#FFFF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 413\n    pajek_id 413\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 2091.9643045079483\n      y 1974.8640522416667\n      w 20.0\n      h 20.0\n      fill \"#FF3333\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 414\n    pajek_id 414\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 2028.15537010984\n      y 1956.056476995101\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 415\n    pajek_id 415\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1984.2252245737018\n      y 1908.623346940285\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 416\n    pajek_id 416\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 2119.7472033124163\n      y 1865.6311815257598\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 417\n    pajek_id 417\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 2130.68571853772\n      y 1928.6302578749373\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 418\n    pajek_id 418\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 2122.510896875806\n      y 1780.9007711280406\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 419\n    pajek_id 419\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 2066.857133577992\n      y 1911.002176703526\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 420\n    pajek_id 420\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 2174.073650971839\n      y 1808.4465867530826\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 421\n    pajek_id 421\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 2173.188445315479\n      y 1879.1912761247552\n      w 20.0\n      h 20.0\n      fill \"#FF3333\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 422\n    pajek_id 422\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 2445.130066970032\n      y 1152.7800567449078\n      w 20.0\n      h 20.0\n      fill \"#FF3333\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 423\n    pajek_id 423\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 2355.4692035510784\n      y 1402.5903362442382\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 424\n    pajek_id 424\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 2415.2373515095965\n      y 1088.9498827129119\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 425\n    pajek_id 425\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 2039.5995058528129\n      y 1430.5751740405808\n      w 20.0\n      h 20.0\n      fill \"#FF3333\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 426\n    pajek_id 426\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 322.6815092460105\n      y 2116.2903817807914\n      w 20.0\n      h 20.0\n      fill \"#FF3333\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 427\n    pajek_id 427\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 268.5119994462548\n      y 2056.087634484369\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 428\n    pajek_id 428\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1146.757825786496\n      y 364.2656095233129\n      w 20.0\n      h 20.0\n      fill \"#FF3333\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 429\n    pajek_id 429\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1489.2719624004453\n      y 693.8971583258162\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 430\n    pajek_id 430\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1827.8677422310066\n      y 766.7899007728367\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 431\n    pajek_id 431\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1798.3747778112622\n      y 1215.8365936661658\n      w 20.0\n      h 20.0\n      fill \"#FF3333\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 432\n    pajek_id 432\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 804.3580561584004\n      y 501.9583186324991\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 433\n    pajek_id 433\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 849.2647555481542\n      y 434.2847659573615\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 434\n    pajek_id 434\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 2328.3994872753374\n      y 2321.663189777115\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 435\n    pajek_id 435\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 618.9825732416654\n      y 1813.9348120438804\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 436\n    pajek_id 436\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 700.4298252161705\n      y 1333.1902810428091\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 437\n    pajek_id 437\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1395.7113829826137\n      y 1284.9840905117753\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 438\n    pajek_id 438\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 2630.3138122865585\n      y 1172.8988923967477\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 439\n    pajek_id 439\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 2615.848167339149\n      y 1246.8020908359208\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 440\n    pajek_id 440\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 469.43123730699017\n      y 854.8438020056724\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 441\n    pajek_id 441\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 2116.96992696925\n      y 1379.4358280316942\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 442\n    pajek_id 442\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 2081.349871481623\n      y 1329.7245666590386\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 443\n    pajek_id 443\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 2424.702556920728\n      y 768.839004481539\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 444\n    pajek_id 444\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 890.6313761901736\n      y 115.79231393666316\n      w 20.0\n      h 20.0\n      fill \"#FF3333\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 445\n    pajek_id 445\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 857.1356243649586\n      y 174.88311586144653\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 446\n    pajek_id 446\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 512.8629774244184\n      y 2201.527945647691\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 447\n    pajek_id 447\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 677.7488039882435\n      y 1909.537866326766\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 448\n    pajek_id 448\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1338.956871819991\n      y 1010.8829829830978\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 449\n    pajek_id 449\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1324.088243934198\n      y 1729.0798093126218\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 450\n    pajek_id 450\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1724.263819989563\n      y 504.51288018417335\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 451\n    pajek_id 451\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1910.6105654550115\n      y 630.6123921072538\n      w 20.0\n      h 20.0\n      fill \"#FF3333\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 452\n    pajek_id 452\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1710.4548801725487\n      y 647.7553354187357\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 453\n    pajek_id 453\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1702.9391298385015\n      y 563.411307161135\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 454\n    pajek_id 454\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1826.116078147204\n      y 450.3392482519506\n      w 20.0\n      h 20.0\n      fill \"#FF3333\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 455\n    pajek_id 455\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 2011.5270490887758\n      y 760.825852289636\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 456\n    pajek_id 456\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 2101.9753242282413\n      y 581.5866515110404\n      w 20.0\n      h 20.0\n      fill \"#FF3333\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 457\n    pajek_id 457\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 2603.3686351996375\n      y 1409.84659720882\n      w 20.0\n      h 20.0\n      fill \"#FF3333\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 458\n    pajek_id 458\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 2438.056345618056\n      y 1523.7553993407314\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 459\n    pajek_id 459\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 2331.6849268576207\n      y 1134.766411504912\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 460\n    pajek_id 460\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1059.0576214306932\n      y 2264.1041145319637\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 461\n    pajek_id 461\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1458.141237363875\n      y 755.4394205573406\n      w 20.0\n      h 20.0\n      fill \"#FF3333\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 462\n    pajek_id 462\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 424.1436855406298\n      y 1477.224543730106\n      w 20.0\n      h 20.0\n      fill \"#FFFF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 463\n    pajek_id 463\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 378.7154942468852\n      y 1401.5037756061158\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 464\n    pajek_id 464\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 314.0529479996145\n      y 1373.0410118674613\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 465\n    pajek_id 465\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 353.0119560198315\n      y 1455.904690398989\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 466\n    pajek_id 466\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 834.3766918623855\n      y 1291.1793247114124\n      w 20.0\n      h 20.0\n      fill \"#FF3333\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 467\n    pajek_id 467\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 893.5300096467302\n      y 1847.377115763661\n      w 20.0\n      h 20.0\n      fill \"#FF3333\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 468\n    pajek_id 468\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 716.2809799836317\n      y 2178.244847004791\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 469\n    pajek_id 469\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 2541.4812097684\n      y 2043.553501917624\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 470\n    pajek_id 470\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1119.6037534804425\n      y 1102.2487155380616\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 471\n    pajek_id 471\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1007.8554543482325\n      y 1148.2192014655018\n      w 20.0\n      h 20.0\n      fill \"#FF3333\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 472\n    pajek_id 472\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 2355.376017232971\n      y 1455.616264520982\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 473\n    pajek_id 473\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 2394.6586276164862\n      y 1491.7526626843892\n      w 20.0\n      h 20.0\n      fill \"#FF3333\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 474\n    pajek_id 474\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 2248.1811205504373\n      y 1647.7634009017388\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 475\n    pajek_id 475\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 2337.1166010827837\n      y 1520.6716608448314\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 476\n    pajek_id 476\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 2420.759607231811\n      y 1589.229118968443\n      w 20.0\n      h 20.0\n      fill \"#FF3333\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 477\n    pajek_id 477\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 2314.5533268916042\n      y 1604.0297855841632\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 478\n    pajek_id 478\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 2364.2202931300694\n      y 1575.671922904723\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 479\n    pajek_id 479\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 2194.5964587031503\n      y 1638.225011658421\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 480\n    pajek_id 480\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1065.4992788010986\n      y 1464.6555423148318\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 481\n    pajek_id 481\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 968.0925172159282\n      y 1354.4290172504502\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 482\n    pajek_id 482\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1126.8845029318243\n      y 1435.5731026238109\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 483\n    pajek_id 483\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1213.8500385478933\n      y 1383.2655755080937\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 484\n    pajek_id 484\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1391.466199058675\n      y 2589.0242705868145\n      w 20.0\n      h 20.0\n      fill \"#FF3333\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 485\n    pajek_id 485\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1324.9339892036385\n      y 2618.7726752706\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 486\n    pajek_id 486\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1447.1572287025065\n      y 927.5802766521502\n      w 20.0\n      h 20.0\n      fill \"#FF3333\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 487\n    pajek_id 487\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 2147.787079263979\n      y 2593.4264109946484\n      w 20.0\n      h 20.0\n      fill \"#FFFF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 488\n    pajek_id 488\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 2020.4864930201384\n      y 2667.000204943657\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 489\n    pajek_id 489\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 2455.283559589994\n      y 2086.657483037342\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 490\n    pajek_id 490\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1682.851876497575\n      y 1583.6120931079872\n      w 20.0\n      h 20.0\n      fill \"#FF3333\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 491\n    pajek_id 491\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1161.1187083008704\n      y 1611.7393863381692\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 492\n    pajek_id 492\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1041.2626018954427\n      y 1598.954971993218\n      w 20.0\n      h 20.0\n      fill \"#FF3333\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 493\n    pajek_id 493\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 2297.354570397635\n      y 534.3652679637769\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 494\n    pajek_id 494\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 526.5370388426392\n      y 485.54459385039985\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 495\n    pajek_id 495\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 560.2941765427282\n      y 402.56083072436417\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 496\n    pajek_id 496\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 377.08394387788996\n      y 1333.3317088869094\n      w 20.0\n      h 20.0\n      fill \"#FF3333\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 497\n    pajek_id 497\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 489.3047686961877\n      y 1939.8674034964001\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 498\n    pajek_id 498\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 527.233322511409\n      y 2017.0516767470162\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 499\n    pajek_id 499\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1605.5668452162006\n      y 1992.166283565707\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 500\n    pajek_id 500\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1546.0840293799524\n      y 1955.4015275314973\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 501\n    pajek_id 501\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 2656.759269426316\n      y 1685.5061982513696\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 502\n    pajek_id 502\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1728.2354096255438\n      y 1051.4437767810607\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 503\n    pajek_id 503\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 317.98253615853616\n      y 835.2488823603016\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 504\n    pajek_id 504\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1227.6068253899532\n      y 1819.6331253463359\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 505\n    pajek_id 505\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1574.3747014862265\n      y 289.21933118032086\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 506\n    pajek_id 506\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1436.7167412577667\n      y 2136.3809474284844\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 507\n    pajek_id 507\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1928.2290848617536\n      y 1695.8756254197222\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 508\n    pajek_id 508\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 2229.8166656736694\n      y 1842.5176093374575\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 509\n    pajek_id 509\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 2191.4931676161536\n      y 1969.3723460631686\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 510\n    pajek_id 510\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 2404.7934790895088\n      y 917.1422166878989\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 511\n    pajek_id 511\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 2395.2429436891007\n      y 834.027810518057\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 512\n    pajek_id 512\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1638.416583359785\n      y 1075.9248111470263\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 513\n    pajek_id 513\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1117.2425662770952\n      y 945.1325831390579\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 514\n    pajek_id 514\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1071.8339051492999\n      y 667.2084929230319\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 515\n    pajek_id 515\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 2080.1550476846883\n      y 2248.7722822540536\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 516\n    pajek_id 516\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 941.7035591125789\n      y 2315.12355349285\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 517\n    pajek_id 517\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 864.0401900606075\n      y 854.7476458360196\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 518\n    pajek_id 518\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1451.1619559522182\n      y 1947.3205327227465\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 519\n    pajek_id 519\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1481.5993172162407\n      y 1688.7490679204407\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 520\n    pajek_id 520\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 132.29183753554184\n      y 1549.9709751408773\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 521\n    pajek_id 521\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 201.92596700389458\n      y 1601.853692109065\n      w 20.0\n      h 20.0\n      fill \"#FF3333\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 522\n    pajek_id 522\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 2153.1192264901847\n      y 822.9210553334786\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 523\n    pajek_id 523\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 640.2772506993291\n      y 1675.9420021748028\n      w 20.0\n      h 20.0\n      fill \"#FF3333\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 524\n    pajek_id 524\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1320.8511741047305\n      y 408.77871976114494\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 525\n    pajek_id 525\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 2213.924926553872\n      y 2763.501088516637\n      w 20.0\n      h 20.0\n      fill \"#FF3333\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 526\n    pajek_id 526\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 2074.4442713188187\n      y 2170.28081217305\n      w 20.0\n      h 20.0\n      fill \"#FF3333\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 527\n    pajek_id 527\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1907.281150461828\n      y 1756.8956641399836\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 528\n    pajek_id 528\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 2125.030039415664\n      y 2128.3283642176266\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 529\n    pajek_id 529\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1748.248950250427\n      y 1911.7557662270228\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 530\n    pajek_id 530\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1150.8356799670266\n      y 1544.1121345992892\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 531\n    pajek_id 531\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1477.1689178603895\n      y 1147.0096180737971\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 532\n    pajek_id 532\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1458.9597650345672\n      y 1060.9858986563445\n      w 20.0\n      h 20.0\n      fill \"#FF3333\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 533\n    pajek_id 533\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1495.8280010142782\n      y 989.2245050486312\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 534\n    pajek_id 534\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 784.4777027529236\n      y 948.7566853266054\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 535\n    pajek_id 535\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 2110.665526987148\n      y 1497.723078348779\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 536\n    pajek_id 536\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 3038.33263338064\n      y 1192.8113918381189\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 537\n    pajek_id 537\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1603.7304792610369\n      y 454.1950074099879\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 538\n    pajek_id 538\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1801.2035133048555\n      y 2119.4411185171184\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 539\n    pajek_id 539\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1950.4501795255455\n      y 2049.3079413070072\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 540\n    pajek_id 540\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1757.897607156828\n      y 2049.7669278996045\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 541\n    pajek_id 541\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1854.7360726993138\n      y 1393.7369312635797\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 542\n    pajek_id 542\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1415.8484373759234\n      y 1900.9653905466644\n      w 20.0\n      h 20.0\n      fill \"#FF3333\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 543\n    pajek_id 543\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1497.5005911357582\n      y 2480.683702039123\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 544\n    pajek_id 544\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 719.9288183455253\n      y 236.78163159716667\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 545\n    pajek_id 545\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 2509.6237885742785\n      y 2373.522488677848\n      w 20.0\n      h 20.0\n      fill \"#FF3333\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 546\n    pajek_id 546\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 2436.169862983399\n      y 2416.0522801899683\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 547\n    pajek_id 547\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 647.1888372458554\n      y 1741.9224475898036\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 548\n    pajek_id 548\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 681.8502532202343\n      y 1799.6304470782582\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 549\n    pajek_id 549\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1985.5267000858494\n      y 2369.7344325668428\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 550\n    pajek_id 550\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1991.106100021963\n      y 2440.329057425812\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 551\n    pajek_id 551\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1931.1619344063192\n      y 2470.578249185151\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 552\n    pajek_id 552\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1875.3109201344084\n      y 2408.7968384052087\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 553\n    pajek_id 553\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1587.9274187718331\n      y 1318.0146867000844\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 554\n    pajek_id 554\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 930.2559142741628\n      y 1891.3731392078669\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 555\n    pajek_id 555\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1227.5755919224916\n      y 2306.541693351298\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 556\n    pajek_id 556\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1304.4750058932211\n      y 2321.289347146842\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 557\n    pajek_id 557\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 2217.1358311583554\n      y 1273.7535975697697\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  node [\n    id 558\n    pajek_id 558\n    label \"\"\n    labelgraphics [\n      anchor \"c\"\n      fontName \"Tahoma\"\n      alignment \"left\"\n      fontSize 13\n      fontStyle \"plain\"\n      color \"#000000\"\n      type \"text\"\n    ]\n    graphics [\n      x 1066.387215640596\n      y 1714.3761855178568\n      w 20.0\n      h 20.0\n      fill \"#00FF00\"\n      outline \"#000000\"\n      frameThickness 3.0\n      rounding 5.0\n      gradient 0.0\n      type \"oval\"\n    ]\n  ]\n  edge [\n    id 1\n    source 1\n    target 87\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 2\n    source 1\n    target 223\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 3\n    source 1\n    target 266\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 4\n    source 1\n    target 328\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 5\n    source 1\n    target 329\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 6\n    source 1\n    target 330\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 7\n    source 1\n    target 331\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 8\n    source 1\n    target 332\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 9\n    source 1\n    target 333\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 10\n    source 2\n    target 334\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 11\n    source 2\n    target 335\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 12\n    source 3\n    target 172\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 13\n    source 3\n    target 188\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 14\n    source 3\n    target 257\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 15\n    source 4\n    target 225\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 16\n    source 5\n    target 175\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 17\n    source 6\n    target 143\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 18\n    source 7\n    target 118\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 19\n    source 7\n    target 284\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 20\n    source 7\n    target 336\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 21\n    source 8\n    target 30\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 22\n    source 8\n    target 337\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 23\n    source 9\n    target 338\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 24\n    source 10\n    target 198\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 25\n    source 11\n    target 261\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 26\n    source 12\n    target 66\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 27\n    source 12\n    target 114\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 28\n    source 12\n    target 144\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 29\n    source 12\n    target 189\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 30\n    source 12\n    target 237\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 31\n    source 12\n    target 239\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 32\n    source 12\n    target 267\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 33\n    source 12\n    target 268\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 34\n    source 12\n    target 339\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 35\n    source 12\n    target 340\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 36\n    source 12\n    target 341\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 37\n    source 13\n    target 15\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 38\n    source 13\n    target 85\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 39\n    source 14\n    target 212\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 40\n    source 15\n    target 342\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 41\n    source 15\n    target 343\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 42\n    source 15\n    target 344\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 43\n    source 16\n    target 143\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 44\n    source 16\n    target 191\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 45\n    source 17\n    target 54\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 46\n    source 17\n    target 345\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 47\n    source 18\n    target 100\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 48\n    source 18\n    target 346\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 49\n    source 18\n    target 347\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 50\n    source 19\n    target 267\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 51\n    source 20\n    target 348\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 52\n    source 20\n    target 349\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 53\n    source 21\n    target 81\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 54\n    source 22\n    target 65\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 55\n    source 23\n    target 140\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 56\n    source 23\n    target 350\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 57\n    source 23\n    target 351\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 58\n    source 23\n    target 352\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 59\n    source 24\n    target 217\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 60\n    source 25\n    target 284\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 61\n    source 26\n    target 119\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 62\n    source 26\n    target 353\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 63\n    source 27\n    target 353\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 64\n    source 28\n    target 178\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 65\n    source 29\n    target 148\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 66\n    source 29\n    target 175\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 67\n    source 29\n    target 206\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 68\n    source 29\n    target 354\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 69\n    source 30\n    target 212\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 70\n    source 30\n    target 294\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 71\n    source 30\n    target 355\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 72\n    source 30\n    target 356\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 73\n    source 31\n    target 334\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 74\n    source 32\n    target 353\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 75\n    source 33\n    target 312\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 76\n    source 34\n    target 217\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 77\n    source 34\n    target 220\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 78\n    source 34\n    target 262\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 79\n    source 34\n    target 357\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 80\n    source 35\n    target 358\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 81\n    source 35\n    target 359\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 82\n    source 36\n    target 342\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 83\n    source 37\n    target 162\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 84\n    source 38\n    target 311\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 85\n    source 39\n    target 174\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 86\n    source 40\n    target 228\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 87\n    source 41\n    target 311\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 88\n    source 42\n    target 53\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 89\n    source 43\n    target 265\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 90\n    source 43\n    target 360\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 91\n    source 44\n    target 361\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 92\n    source 45\n    target 53\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 93\n    source 46\n    target 118\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 94\n    source 46\n    target 285\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 95\n    source 46\n    target 362\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 96\n    source 46\n    target 363\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 97\n    source 46\n    target 364\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 98\n    source 46\n    target 365\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 99\n    source 46\n    target 366\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 100\n    source 46\n    target 367\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 101\n    source 46\n    target 368\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 102\n    source 46\n    target 369\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 103\n    source 47\n    target 78\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 104\n    source 48\n    target 284\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 105\n    source 49\n    target 167\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 106\n    source 49\n    target 370\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 107\n    source 50\n    target 371\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 108\n    source 51\n    target 155\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 109\n    source 51\n    target 233\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 110\n    source 51\n    target 325\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 111\n    source 51\n    target 372\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 112\n    source 51\n    target 373\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 113\n    source 51\n    target 374\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 114\n    source 51\n    target 375\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 115\n    source 52\n    target 126\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 116\n    source 52\n    target 376\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 117\n    source 53\n    target 62\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 118\n    source 53\n    target 66\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 119\n    source 53\n    target 371\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 120\n    source 53\n    target 377\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 121\n    source 53\n    target 378\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 122\n    source 53\n    target 379\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 123\n    source 53\n    target 380\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 124\n    source 53\n    target 381\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 125\n    source 53\n    target 382\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 126\n    source 54\n    target 126\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 127\n    source 54\n    target 138\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 128\n    source 55\n    target 143\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 129\n    source 56\n    target 147\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 130\n    source 56\n    target 383\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 131\n    source 56\n    target 384\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 132\n    source 56\n    target 385\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 133\n    source 56\n    target 386\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 134\n    source 57\n    target 283\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 135\n    source 58\n    target 210\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 136\n    source 59\n    target 387\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 137\n    source 59\n    target 388\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 138\n    source 60\n    target 189\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 139\n    source 61\n    target 93\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 140\n    source 61\n    target 326\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 141\n    source 62\n    target 110\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 142\n    source 62\n    target 265\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 143\n    source 62\n    target 278\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 144\n    source 62\n    target 338\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 145\n    source 62\n    target 389\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 146\n    source 63\n    target 215\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 147\n    source 64\n    target 97\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 148\n    source 64\n    target 99\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 149\n    source 65\n    target 158\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 150\n    source 65\n    target 222\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 151\n    source 65\n    target 297\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 152\n    source 65\n    target 390\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 153\n    source 66\n    target 127\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 154\n    source 66\n    target 340\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 155\n    source 67\n    target 181\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 156\n    source 68\n    target 326\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 157\n    source 69\n    target 185\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 158\n    source 69\n    target 391\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 159\n    source 70\n    target 162\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 160\n    source 71\n    target 327\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 161\n    source 71\n    target 392\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 162\n    source 72\n    target 286\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 163\n    source 73\n    target 113\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 164\n    source 74\n    target 312\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 165\n    source 75\n    target 247\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 166\n    source 75\n    target 284\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 167\n    source 75\n    target 302\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 168\n    source 75\n    target 326\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 169\n    source 76\n    target 85\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 170\n    source 77\n    target 87\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 171\n    source 78\n    target 393\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 172\n    source 79\n    target 315\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 173\n    source 80\n    target 147\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 174\n    source 81\n    target 117\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 175\n    source 81\n    target 394\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 176\n    source 82\n    target 138\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 177\n    source 83\n    target 194\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 178\n    source 83\n    target 235\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 179\n    source 84\n    target 171\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 180\n    source 84\n    target 395\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 181\n    source 85\n    target 396\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 182\n    source 86\n    target 209\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 183\n    source 87\n    target 118\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 184\n    source 87\n    target 145\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 185\n    source 87\n    target 284\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 186\n    source 87\n    target 369\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 187\n    source 88\n    target 318\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 188\n    source 89\n    target 397\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 189\n    source 90\n    target 143\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 190\n    source 91\n    target 215\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 191\n    source 92\n    target 110\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 192\n    source 93\n    target 111\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 193\n    source 94\n    target 126\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 194\n    source 94\n    target 302\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 195\n    source 95\n    target 392\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 196\n    source 95\n    target 398\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 197\n    source 95\n    target 399\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 198\n    source 96\n    target 111\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 199\n    source 96\n    target 284\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 200\n    source 96\n    target 398\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 201\n    source 96\n    target 400\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 202\n    source 97\n    target 286\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 203\n    source 97\n    target 401\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 204\n    source 98\n    target 143\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 205\n    source 99\n    target 204\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 206\n    source 99\n    target 222\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 207\n    source 99\n    target 402\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 208\n    source 100\n    target 129\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 209\n    source 100\n    target 227\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 210\n    source 100\n    target 340\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 211\n    source 100\n    target 403\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 212\n    source 101\n    target 318\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 213\n    source 101\n    target 325\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 214\n    source 102\n    target 227\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 215\n    source 103\n    target 121\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 216\n    source 103\n    target 280\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 217\n    source 103\n    target 404\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 218\n    source 103\n    target 405\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 219\n    source 103\n    target 406\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 220\n    source 103\n    target 407\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 221\n    source 103\n    target 408\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 222\n    source 104\n    target 117\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 223\n    source 105\n    target 156\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 224\n    source 106\n    target 188\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 225\n    source 106\n    target 252\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 226\n    source 106\n    target 257\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 227\n    source 106\n    target 318\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 228\n    source 107\n    target 409\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 229\n    source 108\n    target 267\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 230\n    source 108\n    target 388\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 231\n    source 108\n    target 410\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 232\n    source 108\n    target 411\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 233\n    source 109\n    target 220\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 234\n    source 109\n    target 412\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 235\n    source 110\n    target 217\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 236\n    source 110\n    target 278\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 237\n    source 110\n    target 289\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 238\n    source 110\n    target 413\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 239\n    source 110\n    target 414\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 240\n    source 110\n    target 415\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 241\n    source 110\n    target 416\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 242\n    source 110\n    target 417\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 243\n    source 110\n    target 418\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 244\n    source 110\n    target 419\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 245\n    source 110\n    target 420\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 246\n    source 110\n    target 421\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 247\n    source 111\n    target 422\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 248\n    source 111\n    target 423\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 249\n    source 111\n    target 424\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 250\n    source 112\n    target 425\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 251\n    source 113\n    target 202\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 252\n    source 113\n    target 426\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 253\n    source 113\n    target 427\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 254\n    source 114\n    target 142\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 255\n    source 114\n    target 239\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 256\n    source 115\n    target 275\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 257\n    source 116\n    target 352\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 258\n    source 117\n    target 253\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 259\n    source 117\n    target 428\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 260\n    source 117\n    target 429\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 261\n    source 118\n    target 143\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 262\n    source 118\n    target 212\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 263\n    source 118\n    target 276\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 264\n    source 118\n    target 352\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 265\n    source 118\n    target 353\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 266\n    source 118\n    target 429\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 267\n    source 118\n    target 430\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 268\n    source 118\n    target 431\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 269\n    source 119\n    target 256\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 270\n    source 119\n    target 432\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 271\n    source 119\n    target 433\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 272\n    source 120\n    target 147\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 273\n    source 121\n    target 434\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 274\n    source 122\n    target 202\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 275\n    source 122\n    target 392\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 276\n    source 122\n    target 435\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 277\n    source 123\n    target 129\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 278\n    source 123\n    target 436\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 279\n    source 123\n    target 437\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 280\n    source 124\n    target 393\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 281\n    source 124\n    target 438\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 282\n    source 124\n    target 439\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 283\n    source 125\n    target 258\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 284\n    source 126\n    target 235\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 285\n    source 127\n    target 141\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 286\n    source 127\n    target 217\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 287\n    source 127\n    target 239\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 288\n    source 127\n    target 284\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 289\n    source 127\n    target 309\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 290\n    source 128\n    target 440\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 291\n    source 129\n    target 162\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 292\n    source 130\n    target 263\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 293\n    source 130\n    target 320\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 294\n    source 130\n    target 441\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 295\n    source 130\n    target 442\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 296\n    source 131\n    target 429\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 297\n    source 132\n    target 302\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 298\n    source 133\n    target 138\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 299\n    source 134\n    target 310\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 300\n    source 135\n    target 234\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 301\n    source 135\n    target 326\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 302\n    source 135\n    target 443\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 303\n    source 136\n    target 312\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 304\n    source 137\n    target 210\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 305\n    source 137\n    target 311\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 306\n    source 138\n    target 300\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 307\n    source 138\n    target 444\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 308\n    source 138\n    target 445\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 309\n    source 139\n    target 446\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 310\n    source 139\n    target 447\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 311\n    source 140\n    target 147\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 312\n    source 141\n    target 227\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 313\n    source 141\n    target 448\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 314\n    source 142\n    target 237\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 315\n    source 142\n    target 239\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 316\n    source 142\n    target 267\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 317\n    source 142\n    target 321\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 318\n    source 142\n    target 339\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 319\n    source 142\n    target 340\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 320\n    source 142\n    target 341\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 321\n    source 142\n    target 449\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 322\n    source 143\n    target 228\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 323\n    source 143\n    target 450\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 324\n    source 143\n    target 451\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 325\n    source 143\n    target 452\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 326\n    source 143\n    target 453\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 327\n    source 143\n    target 454\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 328\n    source 144\n    target 239\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 329\n    source 145\n    target 174\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 330\n    source 146\n    target 220\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 331\n    source 146\n    target 284\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 332\n    source 147\n    target 455\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 333\n    source 147\n    target 456\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 334\n    source 148\n    target 320\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 335\n    source 148\n    target 457\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 336\n    source 148\n    target 458\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 337\n    source 149\n    target 314\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 338\n    source 150\n    target 305\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 339\n    source 151\n    target 291\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 340\n    source 151\n    target 459\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 341\n    source 152\n    target 312\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 342\n    source 153\n    target 188\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 343\n    source 153\n    target 448\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 344\n    source 154\n    target 315\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 345\n    source 155\n    target 460\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 346\n    source 156\n    target 246\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 347\n    source 157\n    target 461\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 348\n    source 158\n    target 461\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 349\n    source 159\n    target 349\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 350\n    source 160\n    target 175\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 351\n    source 161\n    target 357\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 352\n    source 161\n    target 359\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 353\n    source 162\n    target 436\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 354\n    source 162\n    target 462\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 355\n    source 162\n    target 463\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 356\n    source 162\n    target 464\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 357\n    source 162\n    target 465\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 358\n    source 163\n    target 227\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 359\n    source 164\n    target 262\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 360\n    source 164\n    target 359\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 361\n    source 164\n    target 466\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 362\n    source 165\n    target 326\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 363\n    source 166\n    target 467\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 364\n    source 167\n    target 325\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 365\n    source 168\n    target 467\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 366\n    source 168\n    target 468\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 367\n    source 169\n    target 180\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 368\n    source 170\n    target 469\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 369\n    source 171\n    target 175\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 370\n    source 171\n    target 206\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 371\n    source 171\n    target 395\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 372\n    source 172\n    target 187\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 373\n    source 173\n    target 470\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 374\n    source 174\n    target 266\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 375\n    source 174\n    target 369\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 376\n    source 174\n    target 471\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 377\n    source 175\n    target 280\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 378\n    source 175\n    target 331\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 379\n    source 175\n    target 458\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 380\n    source 175\n    target 472\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 381\n    source 175\n    target 473\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 382\n    source 175\n    target 474\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 383\n    source 175\n    target 475\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 384\n    source 175\n    target 476\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 385\n    source 175\n    target 477\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 386\n    source 175\n    target 478\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 387\n    source 175\n    target 479\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 388\n    source 176\n    target 326\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 389\n    source 177\n    target 312\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 390\n    source 178\n    target 225\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 391\n    source 178\n    target 227\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 392\n    source 178\n    target 296\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 393\n    source 178\n    target 480\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 394\n    source 178\n    target 481\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 395\n    source 178\n    target 482\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 396\n    source 178\n    target 483\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 397\n    source 179\n    target 315\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 398\n    source 180\n    target 321\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 399\n    source 180\n    target 484\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 400\n    source 180\n    target 485\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 401\n    source 181\n    target 222\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 402\n    source 181\n    target 225\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 403\n    source 181\n    target 227\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 404\n    source 181\n    target 486\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 405\n    source 182\n    target 255\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 406\n    source 182\n    target 312\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 407\n    source 182\n    target 487\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 408\n    source 182\n    target 488\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 409\n    source 183\n    target 315\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 410\n    source 184\n    target 387\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 411\n    source 185\n    target 306\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 412\n    source 185\n    target 368\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 413\n    source 185\n    target 469\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 414\n    source 185\n    target 489\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 415\n    source 186\n    target 315\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 416\n    source 187\n    target 302\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 417\n    source 187\n    target 357\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 418\n    source 187\n    target 490\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 419\n    source 188\n    target 280\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 420\n    source 188\n    target 467\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 421\n    source 188\n    target 470\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 422\n    source 188\n    target 491\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 423\n    source 188\n    target 492\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 424\n    source 189\n    target 239\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 425\n    source 189\n    target 334\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 426\n    source 190\n    target 266\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 427\n    source 191\n    target 493\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 428\n    source 192\n    target 470\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 429\n    source 193\n    target 198\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 430\n    source 193\n    target 440\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 431\n    source 194\n    target 494\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 432\n    source 194\n    target 495\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 433\n    source 195\n    target 312\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 434\n    source 196\n    target 259\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 435\n    source 197\n    target 325\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 436\n    source 198\n    target 359\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 437\n    source 198\n    target 496\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 438\n    source 199\n    target 352\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 439\n    source 200\n    target 284\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 440\n    source 201\n    target 243\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 441\n    source 202\n    target 467\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 442\n    source 202\n    target 497\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 443\n    source 202\n    target 498\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 444\n    source 203\n    target 278\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 445\n    source 204\n    target 216\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 446\n    source 204\n    target 259\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 447\n    source 204\n    target 499\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 448\n    source 204\n    target 500\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 449\n    source 205\n    target 492\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 450\n    source 206\n    target 458\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 451\n    source 206\n    target 476\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 452\n    source 206\n    target 501\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 453\n    source 207\n    target 278\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 454\n    source 208\n    target 470\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 455\n    source 209\n    target 502\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 456\n    source 210\n    target 503\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 457\n    source 211\n    target 296\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 458\n    source 211\n    target 403\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 459\n    source 211\n    target 504\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 460\n    source 212\n    target 355\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 461\n    source 213\n    target 280\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 462\n    source 214\n    target 284\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 463\n    source 215\n    target 429\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 464\n    source 215\n    target 505\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 465\n    source 216\n    target 506\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 466\n    source 217\n    target 231\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 467\n    source 217\n    target 245\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 468\n    source 217\n    target 507\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 469\n    source 218\n    target 326\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 470\n    source 219\n    target 243\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 471\n    source 219\n    target 276\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 472\n    source 220\n    target 258\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 473\n    source 220\n    target 306\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 474\n    source 220\n    target 508\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 475\n    source 220\n    target 509\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 476\n    source 221\n    target 276\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 477\n    source 221\n    target 510\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 478\n    source 221\n    target 511\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 479\n    source 222\n    target 502\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 480\n    source 222\n    target 512\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 481\n    source 223\n    target 265\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 482\n    source 224\n    target 302\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 483\n    source 225\n    target 315\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 484\n    source 225\n    target 513\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 485\n    source 226\n    target 266\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 486\n    source 226\n    target 514\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 487\n    source 227\n    target 315\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 488\n    source 227\n    target 437\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 489\n    source 228\n    target 265\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 490\n    source 229\n    target 258\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 491\n    source 229\n    target 278\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 492\n    source 229\n    target 515\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 493\n    source 230\n    target 293\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 494\n    source 231\n    target 284\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 495\n    source 232\n    target 516\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 496\n    source 233\n    target 516\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 497\n    source 234\n    target 361\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 498\n    source 235\n    target 325\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 499\n    source 235\n    target 517\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 500\n    source 236\n    target 495\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 501\n    source 237\n    target 518\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 502\n    source 238\n    target 502\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 503\n    source 239\n    target 267\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 504\n    source 239\n    target 339\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 505\n    source 239\n    target 340\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 506\n    source 239\n    target 341\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 507\n    source 239\n    target 349\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 508\n    source 239\n    target 449\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 509\n    source 239\n    target 519\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 510\n    source 240\n    target 315\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 511\n    source 241\n    target 284\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 512\n    source 242\n    target 496\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 513\n    source 242\n    target 520\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 514\n    source 242\n    target 521\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 515\n    source 243\n    target 402\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 516\n    source 243\n    target 522\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 517\n    source 244\n    target 354\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 518\n    source 245\n    target 284\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 519\n    source 246\n    target 312\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 520\n    source 247\n    target 284\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 521\n    source 247\n    target 302\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 522\n    source 247\n    target 312\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 523\n    source 247\n    target 326\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 524\n    source 248\n    target 284\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 525\n    source 249\n    target 315\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 526\n    source 250\n    target 397\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 527\n    source 251\n    target 266\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 528\n    source 252\n    target 523\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 529\n    source 253\n    target 307\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 530\n    source 253\n    target 524\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 531\n    source 254\n    target 308\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 532\n    source 255\n    target 525\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 533\n    source 256\n    target 344\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 534\n    source 257\n    target 318\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 535\n    source 258\n    target 312\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 536\n    source 258\n    target 526\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 537\n    source 258\n    target 527\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 538\n    source 258\n    target 528\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 539\n    source 259\n    target 302\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 540\n    source 259\n    target 397\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 541\n    source 259\n    target 529\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 542\n    source 260\n    target 311\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 543\n    source 261\n    target 405\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 544\n    source 262\n    target 301\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 545\n    source 262\n    target 392\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 546\n    source 262\n    target 530\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 547\n    source 263\n    target 265\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 548\n    source 264\n    target 289\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 549\n    source 265\n    target 429\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 550\n    source 265\n    target 531\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 551\n    source 265\n    target 532\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 552\n    source 265\n    target 533\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 553\n    source 266\n    target 344\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 554\n    source 266\n    target 534\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 555\n    source 267\n    target 340\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 556\n    source 268\n    target 425\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 557\n    source 269\n    target 284\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 558\n    source 269\n    target 535\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 559\n    source 270\n    target 294\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 560\n    source 270\n    target 536\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 561\n    source 271\n    target 461\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 562\n    source 271\n    target 537\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 563\n    source 272\n    target 361\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 564\n    source 273\n    target 312\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 565\n    source 274\n    target 325\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 566\n    source 274\n    target 403\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 567\n    source 275\n    target 467\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 568\n    source 276\n    target 334\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 569\n    source 277\n    target 431\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 570\n    source 278\n    target 287\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 571\n    source 278\n    target 538\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 572\n    source 278\n    target 539\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 573\n    source 278\n    target 540\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 574\n    source 279\n    target 429\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 575\n    source 279\n    target 514\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 576\n    source 280\n    target 284\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 577\n    source 281\n    target 306\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 578\n    source 282\n    target 312\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 579\n    source 283\n    target 448\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 580\n    source 284\n    target 393\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 581\n    source 284\n    target 425\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 582\n    source 284\n    target 431\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 583\n    source 284\n    target 437\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 584\n    source 284\n    target 442\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 585\n    source 284\n    target 459\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 586\n    source 284\n    target 541\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 587\n    source 285\n    target 542\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 588\n    source 286\n    target 543\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 589\n    source 287\n    target 302\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 590\n    source 288\n    target 310\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 591\n    source 289\n    target 423\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 592\n    source 290\n    target 291\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 593\n    source 290\n    target 459\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 594\n    source 291\n    target 305\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 595\n    source 292\n    target 437\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 596\n    source 293\n    target 448\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 597\n    source 294\n    target 356\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 598\n    source 295\n    target 311\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 599\n    source 296\n    target 467\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 600\n    source 297\n    target 527\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 601\n    source 298\n    target 312\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 602\n    source 299\n    target 361\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 603\n    source 300\n    target 544\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 604\n    source 301\n    target 311\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 605\n    source 302\n    target 409\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 606\n    source 302\n    target 431\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 607\n    source 302\n    target 541\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 608\n    source 303\n    target 306\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 609\n    source 303\n    target 545\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 610\n    source 303\n    target 546\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 611\n    source 304\n    target 397\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 612\n    source 305\n    target 459\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 613\n    source 306\n    target 509\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 614\n    source 307\n    target 461\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 615\n    source 307\n    target 470\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 616\n    source 308\n    target 325\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 617\n    source 308\n    target 447\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 618\n    source 308\n    target 547\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 619\n    source 308\n    target 548\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 620\n    source 309\n    target 340\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 621\n    source 310\n    target 352\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 622\n    source 311\n    target 325\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 623\n    source 312\n    target 549\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 624\n    source 312\n    target 550\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 625\n    source 312\n    target 551\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 626\n    source 312\n    target 552\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 627\n    source 313\n    target 327\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 628\n    source 314\n    target 325\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 629\n    source 314\n    target 326\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 630\n    source 314\n    target 403\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 631\n    source 314\n    target 553\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 632\n    source 315\n    target 325\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 633\n    source 316\n    target 397\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 634\n    source 317\n    target 352\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 635\n    source 318\n    target 492\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 636\n    source 318\n    target 554\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 637\n    source 319\n    target 425\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 638\n    source 320\n    target 335\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 639\n    source 321\n    target 555\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 640\n    source 321\n    target 556\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 641\n    source 322\n    target 425\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 642\n    source 323\n    target 467\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 643\n    source 324\n    target 467\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 644\n    source 325\n    target 327\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 645\n    source 326\n    target 557\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n  edge [\n    id 646\n    source 327\n    target 558\n    pajek [\n      dir 0.0\n      weight 1.0\n    ]\n    graphics [\n      fill \"#000000\"\n      outline \"#000000\"\n      frameThickness 1.0\n      rounding 5.0\n      gradient 0.0\n      arrow \"none\"\n      thickness 1.0\n    ]\n  ]\n]\n"
  },
  {
    "path": "cola/libcola/tests/gml_graph.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libcola - A library providing force-directed network layout using the \n *           stress-majorization method subject to separation constraints.\n *\n * Copyright (C) 2006-2008  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library in the file LICENSE; if not, \n * write to the Free Software Foundation, Inc., 59 Temple Place, \n * Suite 330, Boston, MA  02111-1307  USA\n *\n*/\n\n#include <fstream>\n#include <iostream>\n#include <string>\n#include <sstream>\n#include <boost/regex.hpp>\n#include \"graphlayouttest.h\"\n\nusing namespace std;\nusing namespace cola;\n\ntypedef map<unsigned,unsigned> NodeIdMap;\ntypedef map<string,list<unsigned> > Partitions;\n\nEdge readEdge(ifstream &f) {\n    string l;\n    int indent=1;\n    unsigned source, target;\n    boost::regex sourceRE(\".*source\\\\s+(\\\\d+).*\");\n    boost::regex targetRE(\".*target\\\\s+(\\\\d+).*\");\n    boost::smatch matches;\n    while(!getline(f,l).eof()) {\n        if(boost::regex_match(l,matches,sourceRE)) {\n            std::istringstream i(matches[1]);\n            i>>source;\n        }\n        if(boost::regex_match(l,matches,targetRE)) {\n            std::istringstream i(matches[1]);\n            i>>target;\n        }\n        if(l.find(\"[\")!=string::npos) {\n            indent++;\n        }\n        if(l.find(\"]\")!=string::npos) {\n            indent--;\n            if(indent==0) {\n                return make_pair(source,target);\n            }\n        }\n    }\n    cerr << \"Incomplete edge definition!\" << endl;\n    return make_pair(0,0);\n}\n\nunsigned readNode(ifstream &f, NodeIdMap &nodeIdMap, \n        Partitions &partitions) {\n    static unsigned nodeCtr=0;\n    int indent=1;\n    string l;\n    boost::regex idRE(\"\\\\s*id\\\\s+(\\\\d+).*\");\n    boost::regex fillRE(\".*fill\\\\s+\\\"#(.+)\\\".*\");\n    boost::smatch matches;\n    unsigned id;\n    while(!getline(f,l).eof()) {\n        if(boost::regex_match(l,matches,idRE)) {\n            std::istringstream i(matches[1]);\n            i>>id;\n            nodeIdMap[id]=nodeCtr++;\n        }\n        if(boost::regex_match(l,matches,fillRE)) {\n            string partition(matches[1]);\n            Partitions::iterator i=partitions.find(partition);\n            partitions[partition].push_back(nodeIdMap[id]);\n        }\n        if(l.find(\"[\")!=string::npos) {\n            indent++;\n        }\n        if(l.find(\"]\")!=string::npos) {\n            indent--;\n            if(indent==0) {\n                return nodeCtr;\n            }\n        }\n    }\n    cerr << \"Incomplete node definition!\" << endl;\n    return 0;\n}\n\nstruct PostIteration : TestConvergence {\n    PostIteration(vector<vpsc::Rectangle*> &rs, vector<list<unsigned> > &ps, vector<double> &bs, const double d,const unsigned i) : TestConvergence(d,i), rs(rs), ps(ps), bs(bs) {}\n    bool operator()(const double new_stress, valarray<double> & X, valarray<double> & Y) {\n        static int iterations=0;\n        unsigned n=X.size();\n        double centreX=0,centreY=0;\n        for(unsigned i=0;i<n;i++) {\n            centreX+=X[i];\n            centreY+=Y[i];\n        }\n        centreX/=(double)n;\n        centreY/=(double)n;\n        //printf(\"centre=(%f,%f)\\n\",centreX,centreY);\n        for(unsigned i=0;i<ps.size();i++) {\n            for(list<unsigned>::iterator v=ps[i].begin();v!=ps[i].end();v++) {\n                double dx=X[*v]-centreX, dy=Y[*v]-centreY;\n                double l=sqrt(dx*dx+dy*dy);\n                if(i>0) {\n                    double r=bs[i-1]+10;\n                    if(l<r) {\n                        double dx1=dx*(r/l), dy1=dy*(r/l);\n                        X[*v]=centreX+dx1;\n                        Y[*v]=centreY+dy1;\n                    } \n                }\n                if(i<ps.size()-1) {\n                    double r=bs[i]-10;\n                    if(l>r) {\n                        double dx1=dx*(r/l), dy1=dy*(r/l);\n                        X[*v]=centreX+dx1;\n                        Y[*v]=centreY+dy1;\n                    } \n                }\n            }\n        }\n        for(unsigned i=0;i<rs.size();i++) {\n            rs[i]->moveCentre(X[i],Y[i]);\n        }\n        cout << iterations++ << \":stress=\"<<new_stress<<endl;\n        return TestConvergence::operator()(new_stress,X,Y);\n    }\n    vector<vpsc::Rectangle*> &rs;\n    vector<list<unsigned> > &ps;\n    vector<double> &bs;\n};\nint main() {\n    //const char *fname=\"data/test.gml\";\n    string fname(\"data/uetzNetworkGSC-all.gml\");\n    ifstream f(fname.c_str());\n    if(!f.is_open()) {\n        cout << \"Error opening file: \" << fname << endl;\n        exit(1);\n    }\n    unsigned V = 0;\n    double defaultEdgeLength=40;\n    vector<Edge> es;\n    CompoundConstraints cx,cy;\n    NodeIdMap nodeIdMap; \n    Partitions partitions;\n    string l;\n    boost::regex nodeRE(\".*node\\\\s+\\\\[.*\");\n    boost::regex edgeRE(\".*edge\\\\s+\\\\[.*\");\n    while(!getline(f,l).eof()) {\n        if(boost::regex_match(l,nodeRE)) {\n            V=readNode(f,nodeIdMap,partitions);\n        }\n        if(boost::regex_match(l,edgeRE)) {\n            pair<unsigned,unsigned> e=readEdge(f);\n            unsigned start=nodeIdMap[e.first];\n            unsigned end=nodeIdMap[e.second];\n            //printf(\"edge (%d,%d)\\n\",start,end);\n            es.push_back(make_pair(start,end));\n            //cy.push_back(\n                //new SeparationConstraint(start,end,defaultEdgeLength/3));\n        }\n    }\n    assert(V==nodeIdMap.size());\n    /*\n    unsigned p1=V++;\n    unsigned p2=V++;\n    // red at the top\n    list<unsigned> &p=partitions[string(\"FF3333\")];\n    //double cgap=defaultEdgeLength/3;\n    double cgap=0;\n    for(list<unsigned>::iterator j=p.begin();j!=p.end();j++) {\n        cy.push_back(\n            new SeparationConstraint(*j,p1,cgap));\n    }\n    // yellow in the middle\n    p=partitions[string(\"FFFF00\")];\n    for(list<unsigned>::iterator j=p.begin();j!=p.end();j++) {\n        cy.push_back(\n            new SeparationConstraint(p1,*j,cgap));\n        cy.push_back(\n            new SeparationConstraint(*j,p2,cgap));\n    }\n    // green at the bottom\n    p=partitions[string(\"00FF00\")];\n    for(list<unsigned>::iterator j=p.begin();j!=p.end();j++) {\n        cy.push_back(\n            new SeparationConstraint(p2,*j,cgap));\n    }\n    */\n    cout << \"V=\"<<V<<endl;\n    double width=1000;\n    double height=1000;\n    vector<vpsc::Rectangle*> rs;\n    cout << \"|V|=\" << V << endl;\n    //srand(time(nullptr));\n    for(unsigned i=0;i<V;i++) {\n        double x=getRand(width), y=getRand(height);\n        rs.push_back(new vpsc::Rectangle(x,x+1,y,y+1));\n    }\n    vector<list<unsigned> > ps;\n    ps.push_back(partitions[string(\"FF3333\")]);\n    ps.push_back(partitions[string(\"FFFF00\")]);\n    ps.push_back(partitions[string(\"00FF00\")]);\n    vector<double> bs;\n    bs.push_back(80);\n    bs.push_back(120);\n    PostIteration test(rs,ps,bs,0.0001,200);\n    ConstrainedMajorizationLayout alg(rs,es,nullptr,defaultEdgeLength,nullptr,test);\n    //ConstrainedFDLayout alg(rs,es,nullptr,defaultEdgeLength,nullptr,test);\n    //alg.setConstrainedLayout(true);\n    //alg.setScaling(true);\n    //alg.setXConstraints(&cx);\n    //alg.setYConstraints(&cy);\n    alg.run();\n    /*\n    vector<ColourRGBA> colours(V);\n    list<unsigned> &p=partitions[string(\"FF3333\")];\n    for(list<unsigned>::iterator i=p.begin();i!=p.end();i++) {\n        //colours[*i]=ColourRGBA(1.,0,0.3,1.);\n        colours[*i]=ColourRGBA(0,0,0,1.);\n    }\n    p=partitions[string(\"FFFF00\")];\n    for(list<unsigned>::iterator i=p.begin();i!=p.end();i++) {\n        //colours[*i]=ColourRGBA((unsigned)255,162,99,255);\n        colours[*i]=ColourRGBA(0,0,0,1.);\n    }\n    p=partitions[string(\"00FF00\")];\n    for(list<unsigned>::iterator i=p.begin();i!=p.end();i++) {\n        //colours[*i]=ColourRGBA((unsigned)24,157,0,255);\n        colours[*i]=ColourRGBA(0,0,0,1.);\n    }\n    */\n    OutputFile of(rs,es,nullptr,\"gml_graph-constrained.svg\",false,true);\n    //of.colours=&colours;\n    of.generate();\n    for(unsigned i=0;i<V;i++) {\n        delete rs[i];\n    }\n    return 0;\n}\n// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=4:softtabstop=4:textwidth=99 :\n"
  },
  {
    "path": "cola/libcola/tests/graphlayouttest.h",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libcola - A library providing force-directed network layout using the \n *           stress-majorization method subject to separation constraints.\n *\n * Copyright (C) 2006-2008  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library in the file LICENSE; if not, \n * write to the Free Software Foundation, Inc., 59 Temple Place, \n * Suite 330, Boston, MA  02111-1307  USA\n *\n*/\n\n#include <sstream>\n#include <ctime>\n\n#include <libvpsc/rectangle.h>\n#include <libcola/cola.h>\n#include <libtopology/topology_graph.h>\n#include <libcola/output_svg.h>\n\ninline double getRand(double range) {\n\treturn range*rand()/RAND_MAX;\n}\n\nnamespace DFS {\nusing namespace std;\nusing namespace cola;\nstruct Node {\n    unsigned id;\n\tbool visited;\n\ttypedef vector<Node*> PNodes;\n\tPNodes neighbours;\n\tvoid visit(vector<unsigned> &order) {\n\t\tvisited=true;\n        unsigned mid=neighbours.size()/2;\n        for(unsigned i=0;i<mid;i++) {\n            if(!neighbours[i]->visited) {\n                neighbours[i]->visit(order);\n            }\n        }\n        order.push_back(id);\n        for(unsigned i=mid;i<neighbours.size();i++) {\n            if(!neighbours[i]->visited) {\n                neighbours[i]->visit(order);\n            }\n        }\n\t}\n\tvoid visit_leaves(vector<unsigned> &order) {\n        unsigned mid=neighbours.size()/2;\n        Node *v;\n        for(unsigned i=0;i<mid;i++) {\n            v=neighbours[i];\n            if(v->neighbours.size()==0) {\n                order.push_back(v->id);\n            }\n        }\n        order.push_back(id);\n        for(unsigned i=mid;i<neighbours.size();i++) {\n            v=neighbours[i];\n            if(v->neighbours.size()==0) {\n                order.push_back(v->id);\n            }\n        }\n\t}\n};\n\nstruct Graph {\n\ttypedef vector<Edge> Edges;\n\ttypedef vector<Node> Nodes;\n\tNodes nodes;\n    vector<unsigned> order;\n    vector<vector<unsigned> > leaves;\n\tGraph(unsigned n,vector<Edge> &edges) {\n\t\tnodes.resize(n);\n        order.resize(0);\n        leaves.resize(n);\n\t\tfor(Edges::iterator i=edges.begin();i!=edges.end();i++) {\n\t\t\tnodes[i->first].neighbours.push_back(&nodes[i->second]);\n\t\t}\n\t\tfor(unsigned i=0;i<nodes.size();i++) {\n\t\t\tnodes[i].id=i;\n\t\t\tnodes[i].visited=false;\n\t\t}\n\t\tfor(Nodes::iterator i=nodes.begin();i!=nodes.end();i++) {\n\t\t\tif(!i->visited) {\n\t\t\t\ti->visit(order);\n\t\t\t}\n\t\t}\n\t\tfor(unsigned i=0;i<nodes.size();i++) {\n            leaves[i].resize(0);\n\t\t\tnodes[i].visit_leaves(leaves[i]);\n\t\t}\n        assert(order.size()==nodes.size());\n\t}\n};\n} // namespace DFS\nusing namespace cola;\nusing namespace std;\nstruct CheckProgress : TestConvergence {\n    CheckProgress(const double d,const unsigned i) : TestConvergence(d,i) {}\n    bool operator()(const double new_stress, valarray<double> & X, valarray<double> & Y) {\n        cout << \"stress=\"<<new_stress<<\" iteration=\"<<iterations<<endl;\n        return TestConvergence::operator()(new_stress,X,Y);\n    }\n};\n\nenum SolverType { CG, UGP, SGP, IP };\nvoid run_test(\n        vector<pair<double,double> > const &startpos,\n        vector<Edge> const &es, \n        const double defaultEdgeLength,\n        CompoundConstraints &ccs,\n        const SolverType s, \n        const bool constrained,\n        const char *fname,\n        const char *testdesc) {\n    vector<vpsc::Rectangle*> rs;\n    unsigned V=startpos.size();\n    cout << \"|V|=\" << V << endl;\n    //srand(time(nullptr));\n    for(unsigned i=0;i<V;i++) {\n        double x=startpos[i].first, y=startpos[i].second;\n        rs.push_back(new vpsc::Rectangle(x,x+1,y,y+1));\n    }\n    CheckProgress test(0.001,100);\n    clock_t starttime=clock();\n    ConstrainedMajorizationLayout alg(rs,es,nullptr,defaultEdgeLength,\n            StandardEdgeLengths,&test);\n    switch(s) {\n        cout << \"Solver: \";\n        case SGP:\n            cout << \"Scaled GP\" << endl;\n            alg.setConstrainedLayout(true);\n            alg.setScaling(true);\n            break;\n        case UGP:\n            cout << \"Unscaled GP\" << endl;\n            alg.setConstrainedLayout(true);\n            alg.setScaling(false);\n            break;\n        case CG:\n            cout << \"Conjugate Gradient\" << endl;\n            alg.setConstrainedLayout(false);\n            break;\n        case IP:\n            cout << \"Interior Point\" << endl;\n            alg.setExternalSolver(true);\n            alg.setConstrainedLayout(true);\n            break;\n    }\n    if(!constrained) {\n        cout << \"Unconstrained layout\" << endl;\n    } else {\n        cout << \"Constrained layout\" << endl;\n        printf(\"|CompoundConstraints|=%u\\n\",(unsigned)ccs.size());\n        alg.setConstraints(&ccs);\n    }\n    alg.run();\n    double t=double(clock()-starttime)/double(CLOCKS_PER_SEC);\n    ostringstream ss;\n    ss << fname << \"_\" << V << \"_\" << testdesc << \".svg\";\n\n    cout<<ss.str()<<\" Time=\"<<t<<endl;\n    OutputFile of(rs,es,nullptr,ss.str().c_str(),false,true);\n    of.generate();\n    for(unsigned i=0;i<V;i++) {\n        delete rs[i];\n    }\n}\nvoid writeFile(const topology::Nodes& vs, const topology::Edges& es, const string& outputFileName) {\n    const unsigned n=vs.size();\n    vector<cola::Edge> cedges;\n\n    for(unsigned i=0;i<es.size();i++) {\n        cedges.push_back(make_pair(1,2));\n    }\n\n    vector<straightener::Route*> routes;\n    for(topology::Edges::const_iterator e=es.begin();e!=es.end();++e) {\n        routes.push_back((*e)->getRoute());\n    }\n\n    vector<string> labels(n);\n    for(unsigned i=0;i<n;++i) {\n        stringstream ss;\n        ss << i;\n        labels[i]=ss.str();\n    }\n\n    vector<vpsc::Rectangle*> rs;\n    for(topology::Nodes::const_iterator i=vs.begin();i!=vs.end();++i) {\n\t    rs.push_back((*i)->rect);\n    }\n    OutputFile of(rs,cedges,nullptr,outputFileName,true,false);\n    of.setLabels(labels);\n    of.routes=&routes;\n    of.generate();\n\n    for_each(routes.begin(),routes.end(),delete_object());\n}\n\nvoid writeDunnartFile(const topology::Nodes& vs, const vector<std::pair<unsigned int, unsigned int> >& es, const string& outputFileName) {\n    FILE *fp = fopen(outputFileName.c_str(), \"w\");\n    assert (fp != nullptr);\n\n    fprintf(fp, \"<svg xmlns:dunnart=\\\"http://www.csse.monash.edu.au/~mwybrow/dunnart.dtd\\\">\\n\");\n    for(unsigned int i = 0; i < vs.size(); ++i) {\n        vpsc::Rectangle *rect = vs[i]->rect;\n    \n        int id = i + 1;\n        fprintf(fp, \"<rect id=\\\"%d\\\" dunnart:label=\\\"\\\" dunnart:width=\\\"20\\\" \"\n               \"dunnart:height=\\\"20\\\" dunnart:xPos=\\\"%f\\\" \"\n               \"dunnart:yPos=\\\"%f\\\" dunnart:type=\\\"rect\\\" />\\n\", id, \n               rect->getCentreX(), rect->getCentreY());\n    }\n\n    for(unsigned int i = 0; i < es.size(); ++i) {\n        const std::pair<unsigned int, unsigned int>& edge = es[i];\n   \n        int id = i + 1 + vs.size();\n        fprintf(fp,  \"<path id=\\\"%d\\\" dunnart:srcID=\\\"%d\\\" \"\n                \"dunnart:srcFlags=\\\"544\\\" dunnart:dstID=\\\"%d\\\" \"\n                \"dunnart:dstFlags=\\\"544\\\" dunnart:directed=\\\"1\\\" \"\n                \"dunnart:type=\\\"connAvoidPoly\\\" />\\n\", id,\n                edge.first + 1, edge.second + 1);\n    }\n\n    fprintf(fp, \"</svg>\\n\");\n\n    fclose(fp);\n\n#if 0\n    for(unsigned i=0;i<es.size();i++) {\n        cedges.push_back(make_pair(1,2));\n    }\n\n    vector<straightener::Route*> routes;\n    for(topology::Edges::const_iterator e=es.begin();e!=es.end();++e) {\n        routes.push_back((*e)->getRoute());\n    }\n\n    vector<string> labels(n);\n    for(unsigned i=0;i<n;++i) {\n        stringstream ss;\n        ss << i;\n        labels[i]=ss.str();\n    }\n\n    vector<vpsc::Rectangle*> rs;\n    for(topology::Nodes::const_iterator i=vs.begin();i!=vs.end();++i) {\n\t    rs.push_back((*i)->rect);\n    }\n    OutputFile of(rs,cedges,nullptr,outputFileName,true,false);\n    of.setLabels(labels);\n    of.routes=&routes;\n    of.generate();\n\n    for_each(routes.begin(),routes.end(),delete_object());\n#endif\n}\n\n// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=4:softtabstop=4:\n"
  },
  {
    "path": "cola/libcola/tests/initialOverlap.cpp",
    "content": "// Check that rectangles that start at same position don't get stuck on top of each other\n// during force-directed layout.\n#include <vector>\n#include <utility>\n#include \"libcola/cola.h\"\n#include \"libcola/pseudorandom.h\"\n\nusing namespace cola;\n\nint main(void) {\n    CompoundConstraints ccs;\n    std::vector<Edge> es;\n    EdgeLengths eLengths;\n    double defaultEdgeLength=1;\n    std::vector<vpsc::Rectangle*> rs;\n    vpsc::Rectangle *rect = nullptr;\n\n    rect = new vpsc::Rectangle(0, 100, 0, 60);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(0, 100, 0, 60);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(0, 100, 0, 60);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(0, 20, 0, 20);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(0, 60, 0, 60);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(0, 60, 0, 60);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(0, 60, 0, 60);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(0, 60, 0, 60);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(0, 20, 0, 20);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(0, 60, 0, 60);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(0, 60, 0, 60);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(0, 20, 0, 20);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(0, 100, 0, 60);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(0, 20, 0, 20);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(0, 20, 0, 20);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(0, 60, 0, 60);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(0, 60, 0, 60);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(0, 60, 0, 60);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(0, 60, 0, 60);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(0, 100, 0, 60);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(0, 100, 0, 60);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(0, 100, 0, 60);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(0, 100, 0, 60);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(0, 100, 0, 60);\n    rs.push_back(rect);\n\t\n    es.push_back(std::make_pair(0, 3));\n    es.push_back(std::make_pair(1, 3));\n    es.push_back(std::make_pair(2, 3));\n    es.push_back(std::make_pair(2, 8));\n    es.push_back(std::make_pair(2, 11));\n    es.push_back(std::make_pair(3, 4));\n    es.push_back(std::make_pair(3, 5));\n    es.push_back(std::make_pair(6, 8));\n    es.push_back(std::make_pair(7, 8));\n    es.push_back(std::make_pair(8, 22));\n    es.push_back(std::make_pair(8, 23));\n    es.push_back(std::make_pair(9, 11));\n    es.push_back(std::make_pair(10, 11));\n    es.push_back(std::make_pair(11, 12));\n    es.push_back(std::make_pair(11, 23));\n    es.push_back(std::make_pair(12, 13));\n    es.push_back(std::make_pair(12, 14));\n    es.push_back(std::make_pair(13, 17));\n    es.push_back(std::make_pair(13, 18));\n    es.push_back(std::make_pair(13, 19));\n    es.push_back(std::make_pair(13, 20));\n    es.push_back(std::make_pair(14, 15));\n    es.push_back(std::make_pair(14, 16));\n    es.push_back(std::make_pair(14, 20));\n    es.push_back(std::make_pair(14, 21));\n\n    eLengths.resize(25);\n    eLengths[0] = 100;\n    eLengths[1] = 100;\n    eLengths[2] = 100;\n    eLengths[3] = 100;\n    eLengths[4] = 100;\n    eLengths[5] = 100;\n    eLengths[6] = 100;\n    eLengths[7] = 100;\n    eLengths[8] = 100;\n    eLengths[9] = 100;\n    eLengths[10] = 100;\n    eLengths[11] = 100;\n    eLengths[12] = 100;\n    eLengths[13] = 100;\n    eLengths[14] = 100;\n    eLengths[15] = 100;\n    eLengths[16] = 100;\n    eLengths[17] = 100;\n    eLengths[18] = 100;\n    eLengths[19] = 100;\n    eLengths[20] = 100;\n    eLengths[21] = 100;\n    eLengths[22] = 100;\n    eLengths[23] = 100;\n    eLengths[24] = 100;\n\n    ConstrainedFDLayout alg(rs, es, defaultEdgeLength, eLengths);\n    alg.run();\n    //alg.outputInstanceToSVG(\"initialOverlap\");\n\n    bool overlaps = false;\n\n    for (size_t i = 0; i < rs.size(); ++i)\n    {\n\tfor (size_t j = i + 1; j < rs.size(); ++j)\n\t{\n\t    overlaps |= ((rs[i]->overlapD(0, rs[j]) > 0) && (rs[i]->overlapD(1, rs[j]) > 0));\n\t    if (overlaps)\n\t    {\n\t\tbreak;\n\t    }\n\t}\n        if (overlaps)\n        {\n\t    break;\n        }\n    }\n    \n    alg.freeAssociatedObjects();\n\n    return (overlaps) ? 1 : 0;\n};\n"
  },
  {
    "path": "cola/libcola/tests/invalid.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libcola - A library providing force-directed network layout using the \n *           stress-majorization method subject to separation constraints.\n *\n * Copyright (C) 2006-2008  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library in the file LICENSE; if not, \n * write to the Free Software Foundation, Inc., 59 Temple Place, \n * Suite 330, Boston, MA  02111-1307  USA\n *\n*/\n\n\n/** \\file\n * Interface between Inkscape code (SPItem) and graphlayout functions.\n *\n * Authors:\n *   Tim Dwyer <tgdwyer@gmail.com>\n */\n#include <iostream>\n\n#include <vector>\n#include <algorithm>\n#include <float.h>\n#include <libcola/cola.h>\n//#include <libvspc/exceptions.h>\n#include <libvpsc/constraint.h>\n#include \"graphlayouttest.h\"\n\nusing namespace std;\nusing namespace cola;\nint main() {\n\n\tconst unsigned V = 2;\n\ttypedef pair < unsigned, unsigned >Edge;\n\tEdge edge_array[] = { Edge(0, 1) };\n\tunsigned E = sizeof(edge_array) / sizeof(Edge);\n\tvector<Edge> es(edge_array,edge_array+E);\n\tdouble width=100;\n\tdouble height=100;\n\tvector<vpsc::Rectangle*> rs;\n\tfor(unsigned i=0;i<V;i++) {\n\t\tdouble x=getRand(width), y=getRand(height);\n\t\trs.push_back(new vpsc::Rectangle(x,x+5,y,y+5));\n\t}\n\tConstrainedFDLayout alg(rs, es, width/2);\n\tCompoundConstraints ccs;\n\tAlignmentConstraint ac(vpsc::YDIM);\n\tccs.push_back(&ac);\n\tac.addShape(0,0);\n\tac.addShape(5,0);\n\talg.setConstraints(ccs);\n    try {\n\t    alg.run();\n    } catch (cola::InvalidVariableIndexException& e) {\n        cerr << e.what() << endl;\n\t\treturn 0;\n    }\n\t//assert(fabs(rs[0]->getCentreX()-rs[3]->getCentreX())<0.001);\n\tcout<<rs[0]->getCentreX()<<\",\"<<rs[1]->getCentreX()<<endl;\n\t//output_svg(rs,es,\"unsatisfiable.svg\");\n\tfor(unsigned i=0;i<V;i++) {\n\t\tdelete rs[i];\n\t}\n    return 1;\n}\n// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=4:softtabstop=4:textwidth=99 :\n"
  },
  {
    "path": "cola/libcola/tests/large_graph.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libcola - A library providing force-directed network layout using the \n *           stress-majorization method subject to separation constraints.\n *\n * Copyright (C) 2006-2008  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library in the file LICENSE; if not, \n * write to the Free Software Foundation, Inc., 59 Temple Place, \n * Suite 330, Boston, MA  02111-1307  USA\n *\n*/\n\n// Loads a graph from a text file, generates constraints for each edge requiring them\n// to point downwards, and proceeds to produce a layout using libcola.\n// The input file format is 2 numeric node labels per line separated by a space,\n// each pair representing a directed edge.  Node labels are simply used as array\n// offsets so they should start from 0.\n// The graph should be connected.\n// Default input file is the matrix market 1138_bus graph.\n// Running times:\n//    no constraints - steepest descent solver: 149 seconds\n//    no constraints - mosek: 49.47 seconds\n//    no constraints - conjugate gradient solver: 12.2 seconds\n//    dir-edge constraints - mosek: 214.2 seconds\n//    \n//    V=1138\n#include<iostream>\n#include<iomanip>\n#include<fstream>\n#include<vector>\n#include<valarray>\n#include <libvpsc/linesegment.h>\n#include \"graphlayouttest.h\"\n\nusing namespace std;\nusing namespace cola;\n\nint countCrossings(vpsc::Rectangles& rs, vector<cola::Edge>& es) {\n    int crossings=0;\n    for(unsigned i=0;i<es.size()-1;++i) {\n        for(unsigned j=i+1;j<es.size();++j) {\n            Edge e1=es[i], e2=es[j];\n            Rectangle *e1a=rs[e1.first], \n                      *e1b=rs[e1.second], \n                      *e2a=rs[e2.first], \n                      *e2b=rs[e2.second];\n            linesegment::LineSegment s1(\n                    linesegment::Vector(e1a->getCentreX(),e1a->getCentreY()),\n                    linesegment::Vector(e1b->getCentreX(),e1b->getCentreY()));\n            linesegment::LineSegment s2(\n                    linesegment::Vector(e2a->getCentreX(),e2a->getCentreY()),\n                    linesegment::Vector(e2b->getCentreX(),e2b->getCentreY()));\n            linesegment::Vector point;\n            if(s1.Intersect(s2,point)==linesegment::LineSegment::INTERSECTING) {\n                ++crossings;\n            }\n        }\n    }\n    return crossings;\n}\nint main() {\n    const char *fname=\"data/1138_bus.txt\"; //\"data/dg_850.txt\";\n    ifstream f(fname);\n    if(!f.is_open()) {\n        cout << \"Error opening file: \" << fname << endl;\n        exit(1);\n    }\n    string startlabel, endlabel;\n    unsigned V = 0;\n    double defaultEdgeLength=40;\n    vector<Edge> es;\n    CompoundConstraints cx,cy;\n    while(!getline(f,startlabel,' ').eof()) {\n        getline(f,endlabel);\n        unsigned start = atoi(startlabel.c_str()),\n             end = atoi(endlabel.c_str());\n        es.push_back(make_pair(start,end));\n        cy.push_back(\n            new SeparationConstraint(end,start,defaultEdgeLength/3));\n        V=max(V,max(start,end));\n    }\n    V++;\n    /*\n    DFS::Graph dfs(V,es);\n    for(unsigned i=1;i<dfs.order.size();i++) {\n        cx.push_back(\n                new SeparationConstraint(dfs.order[i-1],dfs.order[i],0));\n    }\n    */\n    cout << \"V=\"<<V<<endl;\n    double width=1000;\n    double height=1000;\n    vector<pair<double,double> > startpos(V);\n    //srand(time(nullptr));\n    for(unsigned i=0;i<V;i++) {\n        double x=getRand(width), y=getRand(height);\n        startpos[i]=make_pair(x,y);\n    }\n    //const char *testname=\"large_graph\";\n    //run_test(startpos,es,defaultEdgeLength,cx,cy,CG,false,testname,\"cg\");\n    //run_test(startpos,es,defaultEdgeLength,cx,cy,IP,false,testname,\"ip\");\n    //run_test(startpos,es,defaultEdgeLength,cx,cy,UGP,false,testname,\"ugp\");\n    //run_test(startpos,es,defaultEdgeLength,cx,cy,SGP,false,testname,\"sgp\");\n    //run_test(startpos,es,defaultEdgeLength,cx,cy,IP,true,testname,\"cip\");\n    //run_test(startpos,es,defaultEdgeLength,cx,cy,UGP,true,testname,\"cugp\");\n    //run_test(startpos,es,defaultEdgeLength,cx,cy,SGP,true,testname,\"csgp\");\n\tvector<vpsc::Rectangle*> rs;\n\tfor(unsigned i=0;i<V;i++) {\n\t\tdouble x=getRand(width), y=getRand(height);\n\t\trs.push_back(new vpsc::Rectangle(x,x+5,y,y+5));\n\t}\n    cout<<\"Initial crossings=\"<<countCrossings(rs,es)<<endl;\n\tCheckProgress test(0.0001,200);\n    ConstrainedMajorizationLayout alg(rs,es,nullptr,defaultEdgeLength,nullptr,test);\n    alg.setYConstraints(&cy);\n\talg.run();\n    cout<<\"Majorization crossings=\"<<countCrossings(rs,es)<<endl;\n\tOutputFile output1(rs,es,nullptr,\"large_graph-majorization.pdf\");\n    output1.generate();\n\tConstrainedFDLayout alg2(rs,es,defaultEdgeLength,nullptr,test);\n    alg2.setYConstraints(&cy);\n\talg2.run();\n    cout<<\"PStress crossings=\"<<countCrossings(rs,es)<<endl;\n\tOutputFile output(rs,es,nullptr,\"large_graph.pdf\");\n\toutput.generate();\n\tfor(unsigned i=0;i<V;i++) {\n\t\tdelete rs[i];\n\t}\n    return 0;\n}\n// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=4:softtabstop=4:textwidth=99 :\n"
  },
  {
    "path": "cola/libcola/tests/makefeasible.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libcola - A library providing force-directed network layout using the\n *           stress-majorization method subject to separation constraints.\n *\n * Copyright (C) 2006-2008  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library in the file LICENSE; if not,\n * write to the Free Software Foundation, Inc., 59 Temple Place,\n * Suite 330, Boston, MA  02111-1307  USA\n *\n*/\n\n#include <iostream>\n#include <vector>\n#include <cmath>\n#include <time.h>\n#include <valarray>\n#include <fstream>\n#include <sstream>\n\n#include <libavoid/libavoid.h>\n#include <libavoid/router.h>\n\n#include \"graphlayouttest.h\"\n\nusing namespace std;\nusing namespace cola;\nusing namespace vpsc;\n\n/*\n// |V|=12, |E|=23\nstatic const unsigned DAGDEPTH = 3;\nstatic const unsigned BRANCHFACTOR = 3;\nstatic const double EXTRAEDGEPROB = 0.5;\n*/\n/*\n// |V|=26, |E|=61\nstatic const unsigned DAGDEPTH = 3;\nstatic const unsigned BRANCHFACTOR = 4;\nstatic const double EXTRAEDGEPROB = 0.1;\n*/\n\n/*\n// |V|=62, |E|=85\nstatic const unsigned DAGDEPTH = 4;\nstatic const unsigned BRANCHFACTOR = 4;\nstatic const double EXTRAEDGEPROB = 0.01;\n*/\n/*\n// |V|=131, |E|=166\nstatic const unsigned DAGDEPTH = 5;\nstatic const unsigned BRANCHFACTOR = 4;\nstatic const double EXTRAEDGEPROB = 0.005;\n*/\n\nstatic const unsigned DAGDEPTH = 6;\nstatic const unsigned BRANCHFACTOR = 4;\nstatic const double EXTRAEDGEPROB = 0.002;\n/*\n// |V|=343, |E|=487\nseed=1208390913;\nstatic const unsigned DAGDEPTH = 6;\nstatic const unsigned BRANCHFACTOR = 4;\nstatic const double EXTRAEDGEPROB = 0.002;\n*/\n\nvoid makeEdge(unsigned u, unsigned v,\n        vector<Edge> &edges, CompoundConstraints &ccs) {\n    edges.push_back(make_pair(u,v));\n    ccs.push_back(new SeparationConstraint(vpsc::YDIM, u,v,5));\n}\nvector<Edge> random_dag(unsigned depth, unsigned maxbranch, unsigned &V,\n        CompoundConstraints &ccs) {\n    printf(\"DAG depth=%d\\nmaxbranch=%d\\nextraedgeprob%f\\n\",depth,maxbranch,EXTRAEDGEPROB);\n\tvector<Edge> edges;\n    unsigned lstart=0, lend=1;\n    V=0;\n\tfor(unsigned i=0;i<depth;i++) {\n        for(unsigned j=lstart;j<lend;j++) {\n            //makeEdge(j,++V,edges,cy);\n            //makeEdge(j,++V,edges,cy);\n            for(unsigned k=0;k<maxbranch;k++) {\n                double r=(double)rand()/(double)RAND_MAX;\n                if(r < 0.5) {\n                    makeEdge(j,++V,edges,ccs);\n                }\n            }\n        }\n        lstart=lend;\n        lend=V+1;\n    }\n    V++;\n    /*\n    DFS::Graph dfs(V,edges);\n    for(unsigned i=1;i<dfs.order.size();i++) {\n        cx.push_back(\n                new SeparationConstraint(dfs.order[i-1],dfs.order[i],0.5));\n    }\n    */\n    for(unsigned i=0;i<V;++i) {\n        for(unsigned j=i+1;j<V;++j) {\n            double r=(double)rand()/(double)RAND_MAX;\n            if(r < EXTRAEDGEPROB) {\n                makeEdge(i,j,edges,ccs);\n            }\n        }\n    }\n    /*\n    for(unsigned i=0;i<dfs.leaves.size();i++) {\n        for(unsigned j=1;j<dfs.leaves[i].size();j++) {\n            cx.push_back( new SeparationConstraint(dfs.leaves[i][j-1],dfs.leaves[i][j],10));\n        }\n    }\n    */\n\treturn edges;\n}\nvoid removeoverlaps(vpsc::Rectangles &rs, bool bothaxes) {\n\tdouble xBorder=0, yBorder=0;\n    static const double EXTRA_GAP=1e-5;\n\tunsigned n=rs.size();\n\ttry {\n\t\t// The extra gap avoids numerical imprecision problems\n\t\tRectangle::setXBorder(xBorder+EXTRA_GAP);\n\t\tRectangle::setYBorder(yBorder+EXTRA_GAP);\n        vpsc::Variables vs(n);\n\t\tunsigned i=0;\n\t\tfor(Variables::iterator v=vs.begin();v!=vs.end();++v,++i) {\n\t\t\t*v=new Variable(i,0,1);\n\t\t}\n        vpsc::Constraints cs;\n        vpsc::generateXConstraints(rs,vs,cs,bothaxes);\n        vpsc::IncSolver vpsc_x(vs,cs);\n\t\tvpsc_x.solve();\n        vpsc::Rectangles::iterator r=rs.begin();\n\t\tfor(Variables::iterator v=vs.begin();v!=vs.end();++v,++r) {\n\t\t\tassert((*v)->finalPosition==(*v)->finalPosition);\n\t\t\t(*r)->moveCentreX((*v)->finalPosition);\n\t\t}\n\t\tassert(r==rs.end());\n\t\tfor_each(cs.begin(),cs.end(),vpsc::delete_object());\n\t\tcs.clear();\n        if(bothaxes) {\n            // Removing the extra gap here ensures things that were moved to be adjacent to one another above are not considered overlapping\n            Rectangle::setXBorder(Rectangle::xBorder-EXTRA_GAP);\n            vpsc::generateYConstraints(rs,vs,cs);\n            vpsc::IncSolver vpsc_y(vs,cs);\n            vpsc_y.solve();\n            r=rs.begin();\n            for(Variables::iterator v=vs.begin();v!=vs.end();++v,++r) {\n                (*r)->moveCentreY((*v)->finalPosition);\n            }\n            for_each(cs.begin(),cs.end(),vpsc::delete_object());\n            cs.clear();\n            Rectangle::setYBorder(Rectangle::yBorder-EXTRA_GAP);\n            vpsc::generateXConstraints(rs,vs,cs,false);\n            vpsc::IncSolver vpsc_x2(vs,cs);\n            vpsc_x2.solve();\n            r=rs.begin();\n            for(Variables::iterator v=vs.begin();v!=vs.end();++v,++r) {\n                (*r)->moveCentreX((*v)->finalPosition);\n            }\n            for_each(cs.begin(),cs.end(),vpsc::delete_object());\n        }\n\t\tfor_each(vs.begin(),vs.end(),vpsc::delete_object());\n\t} catch (char *str) {\n\t\tstd::cerr<<str<<std::endl;\n\t\tfor(vpsc::Rectangles::iterator r=rs.begin();r!=rs.end();++r) {\n\t\t\tstd::cerr << **r <<std::endl;\n\t\t}\n\t}\n    Rectangle::setXBorder(xBorder);\n    Rectangle::setYBorder(yBorder);\n}\n/*\nvoid writeTextFile(vector<cola::Edge>& edges) {\n    ofstream outfile(\"new.txt\",ofstream::binary);\n    for(vector<cola::Edge>::iterator e=edges.begin();e!=edges.end();++e) {\n        outfile<<\"node\"<<e->first<<\",node\"<<e->second<<endl;\n    }\n    outfile.close();\n}\n*/\n/*\n * Make feasible:\n *   - remove overlaps between rectangular boundaries of nodes/clusters\n *     (respecting structural constraints)\n *   - perform routing (preserve previous topology using rubber banding)\n */\nvoid makeFeasible(vpsc::Rectangles& rs, vector<cola::Edge>& edges,\n    std::vector<topology::Edge*>& routes,\n    std::vector<topology::Node*>& topologyNodes, double defaultEdgeLength) {\n    printf(\"Removing overlaps...\\n\");\n    removeoverlaps(rs,false);\n    printf(\"done.\\n\");\n    printf(\"Running libavoid to compute routes...\\n\");\n    clock_t libavoidstarttime=clock();\n    // find feasible routes for edges\n    Avoid::Router *router = new Avoid::Router(Avoid::PolyLineRouting);\n    // Use rotational sweep for point visibility\n    router->UseLeesAlgorithm = true;\n    // Don't use invisibility graph.\n    router->InvisibilityGrph = false;\n    double g=0; // make shape that libavoid sees slightly smaller\n    for(unsigned i=0;i<rs.size();++i) {\n        vpsc::Rectangle* r=rs[i];\n        double x=r->getMinX()+g;\n        double X=r->getMaxX()-g;\n        double y=r->getMinY()+g;\n        double Y=r->getMaxY()-g;\n        // Create the ShapeRef:\n        Avoid::Polygon shapePoly(4);\n        // AntiClockwise!\n        shapePoly.ps[0] = Avoid::Point(X,y);\n        shapePoly.ps[1] = Avoid::Point(X,Y);\n        shapePoly.ps[2] = Avoid::Point(x,Y);\n        shapePoly.ps[3] = Avoid::Point(x,y);\n        //if(i==4||i==13||i==9) {\n            //printf(\"rect[%d]:{%f,%f,%f,%f}\\n\",i,x,y,X,Y);\n        //}\n        unsigned int shapeID = i + 1;\n        Avoid::ShapeRef *shapeRef = new Avoid::ShapeRef(router, shapePoly,\n                shapeID);\n        // ShapeRef constructor makes a copy of polygon so we can free it:\n        router->addShape(shapeRef);\n    }\n    for(unsigned i=0;i<edges.size();++i) {\n        cola::Edge e=edges[i];\n        Avoid::ConnRef *connRef;\n        unsigned int connID = i + rs.size() + 1;\n        Rectangle* r0=rs[e.first], *r1=rs[e.second];\n        Avoid::Point srcPt(r0->getCentreX(),r0->getCentreY());\n        Avoid::Point dstPt(r1->getCentreX(),r1->getCentreY());\n        connRef = new Avoid::ConnRef(router, srcPt, dstPt, connID);\n        router->processTransaction();\n        const Avoid::Polygon& route = connRef->route();\n        vector<topology::EdgePoint*> eps;\n        eps.push_back( new topology::EdgePoint( topologyNodes[e.first],\n                    topology::EdgePoint::CENTRE));\n        for(size_t j=1;j+1<route.size();j++) {\n            const Avoid::Point& p = route.ps[j];\n            const unsigned nodeID=p.id-1;\n            topology::Node* node=topologyNodes[nodeID];\n            topology::EdgePoint::RectIntersect ri;\n            switch(p.vn) {\n                case 0: ri=topology::EdgePoint::BR;\n                        break;\n                case 1: ri=topology::EdgePoint::TR;\n                        break;\n                case 2: ri=topology::EdgePoint::TL;\n                        break;\n                case 3: ri=topology::EdgePoint::BL;\n                        break;\n                default: ri=topology::EdgePoint::CENTRE;\n            }\n            eps.push_back(new topology::EdgePoint(node,ri));\n        }\n        eps.push_back(new topology::EdgePoint(topologyNodes[e.second],\n                    topology::EdgePoint::CENTRE));\n        topology::Edge* edgeRoute=new topology::Edge(i,defaultEdgeLength, eps);\n        edgeRoute->assertConvexBends();\n        routes.push_back(edgeRoute);\n\n    }\n    writeFile(topologyNodes,routes,\"beautify0.svg\");\n    assert(topology::assertNoSegmentRectIntersection(topologyNodes,routes));\n    double libavoidtime=double(clock()-libavoidstarttime)/double(CLOCKS_PER_SEC);\n    cout << \"done. Libavoid ran in \" << libavoidtime << \" seconds\" << endl;\n    delete router;\n}\nint main() {\n    unsigned V;\n    CompoundConstraints ccs;\n\n    int seed = time(nullptr);\n    //seed=1207906420;\n    //seed=1207920674;\n    //seed=1207982613;\n    //seed=1207984219;\n    seed=1207984299;\n    //seed=1207984743;\n    //seed=1207985027; // very short edge which seems to cause problems\n    //seed=1207986026; // error if we don't check neighbour is actually on scanline when determining visibility when generating straight constraints\n    //seed=1207991731;\n    //seed=1208303930;\n    //seed=1208304508;\n    //seed=1208316284;\n    //seed=1208319019;\n    //seed=1208321702;\n    printf(\"random seed=%d\\n\",seed);\n    srand(seed);\n    vector<Edge> es = random_dag(DAGDEPTH,BRANCHFACTOR,V,ccs);\n    double defaultEdgeLength=40;\n\n    cout << \"V=\"<<V<<endl;\n    cout << \"E=\"<<es.size()<<endl;\n    double width=700;\n    double height=700;\n    vector<pair<double,double> > startpos(V);\n    for(unsigned i=0;i<V;i++) {\n        double x=getRand(width), y=getRand(height);\n        startpos[i]=make_pair(x,y);\n    }\n\tvector<vpsc::Rectangle*> rs;\n    vector<topology::Node*> topologyNodes;\n    vector<topology::Edge*> routes;\n\tfor(unsigned i=0;i<V;i++) {\n\t\tdouble x=getRand(width), y=getRand(height);\n        vpsc::Rectangle* r =new vpsc::Rectangle(x,x+30,y,y+10);\n\t\trs.push_back(r);\n        topologyNodes.push_back(new topology::Node(i,r));\n\t}\n\tCheckProgress test(0.01,100);\n    clock_t unconstrainedstarttime=clock();\n    //writeTextFile(es);\n    es.clear();\n\tConstrainedFDLayout alg2(rs,es,defaultEdgeLength,nullptr,test);\n    //alg2.setConstraints(&ccs);\n\n    alg2.makeFeasible(true);\n    alg2.run();\n\n    alg2.outputInstanceToSVG();\n#if 0\n    double totaltime=0;\n    double unconstrainedtime=double(clock()-unconstrainedstarttime)/double(CLOCKS_PER_SEC);\n    totaltime+=unconstrainedstarttime;\n    cout<<\"unconstrained layout ran in \"<<unconstrainedtime<<\" seconds\"<<endl;\n    clock_t makefeasiblestarttime=clock();\n    makeFeasible(rs,es,routes,topologyNodes,defaultEdgeLength);\n    double makefeasibletime=double(clock()-makefeasiblestarttime)/double(CLOCKS_PER_SEC);\n    totaltime+=makefeasibletime;\n    cout<<\"makefeasible ran in \"<<makefeasibletime<<\" seconds\"<<endl;\n    clock_t beautifystarttime=clock();\n    test.reset();\n    alg2.setTopology(&topologyNodes, &routes);\n    writeFile(topologyNodes,routes,\"beautify1.svg\");\n    std::stringstream dunnartfile;\n    dunnartfile << \"v\" << V << \"e\" << (int) es.size() << \".svg\";\n    writeDunnartFile(topologyNodes,es,dunnartfile.str().c_str());\n\n\talg2.run();\n    double beautifytime=double(clock()-beautifystarttime)/double(CLOCKS_PER_SEC);\n    totaltime+=beautifytime;\n    cout<<\"beautify ran in \"<<beautifytime<<\" seconds\"<<endl;\n    cout<<\"TOTAL=\"<<totaltime<<endl;\n    cout <<\"---------------------------------------------\"<< endl;\n    cout <<V<<\" & \"<<es.size()<<\" & \"<<unconstrainedtime<<\" & \"<<makefeasibletime<<\" & \"<<beautifytime<<\" & \"<<totaltime<<\" \\\\\\\\ % Seed: \"<< seed <<endl;\n    writeFile(topologyNodes,routes,\"beautify2.svg\");\n#endif\n\tfor(unsigned i=0;i<V;i++) {\n\t\tdelete rs[i];\n\t}\n    return 0;\n}\n// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=4:softtabstop=4:textwidth=99 :\n"
  },
  {
    "path": "cola/libcola/tests/makefeasible02.cpp",
    "content": "#include <vector>\n#include \"libcola/cola.h\"\nusing namespace cola;\nint main(void) {\n    CompoundConstraints ccs;\n    std::vector<Edge> es;\n    double defaultEdgeLength=40;\n    std::vector<vpsc::Rectangle*> rs;\n    vpsc::Rectangle *rect = nullptr;\n\n    rect = new vpsc::Rectangle(252, 272, 930, 950);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(109, 129, 898, 918);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(252, 272, 951, 971);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(99, 139, 931, 971);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(593, 665, 212.5, 459.5);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(398, 518, 52, 96);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(341, 361, 899, 919);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(450, 470, 930, 950);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(402, 422, 930, 950);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(394, 414, 861, 881);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(394, 414, 840, 860);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(282, 302, 852, 872);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(173, 193, 852, 872);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(521, 541, 851, 871);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(313, 401, 739, 783);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(446, 466, 757, 777);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(446, 466, 688, 708);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(447, 467, 616, 636);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(421, 441, 471, 491);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(196.5, 359.5, 575, 619);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(366, 386, 437, 457);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(446, 466, 391, 411);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(446, 466, 325, 345);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(393, 413, 325, 345);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(515, 535, 182, 202);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(446, 466, 255, 275);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(446, 466, 160, 180);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(366, 386, 289, 309);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(211, 231, 270, 290);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(211, 231, 289, 309);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(320, 340, 256, 276);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(270, 290, 256, 276);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(144, 164, 251, 271);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(211, 231, 214, 234);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(211, 231, 195, 215);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(279, 299, 173, 193);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(306, 326, 141, 161);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(306, 326, 120, 140);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(34.5, 295.5, 39.5, 74.5);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(225, 245, 895, 915);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(446, 466, 543, 563);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(211, 231, 233, 253);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(211, 231, 308, 328);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(144, 164, 347, 367);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(144, 164, 373, 393);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(254, 274, 346, 366);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(254, 274, 372, 392);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(554, 594, 173, 213);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(436, 476, 121, 161);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(436, 476, 642, 682);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(134, 174, 206, 246);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(134, 174, 279, 319);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(285, 325, 426, 466);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(285, 325, 279, 319);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(436, 476, 208, 248);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(436, 476, 281, 321);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(436, 476, 714, 754);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(436, 476, 570, 610);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(436, 476, 498, 538);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(580, 620, 841, 881);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(267, 307, 884, 924);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(503, 543, 931, 971);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(436, 476, 841, 881);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(331, 371, 841, 881);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(331, 371, 798, 838);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(99, 139, 841, 881);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(331, 371, 931, 971);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(218, 258, 841, 881);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(165, 205, 884, 924);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(436, 476, 351, 391);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(85, 125, 336, 376);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(192, 232, 336, 376);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(192, 232, 362, 402);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(85, 125, 362, 402);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(20.5, 77.5, 716, 880);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(167, 187, 713, 733);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(99, 139, 714, 754);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(402, 422, 951, 971);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(167, 187, 734, 754);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(450, 470, 951, 971);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(532.5, 669.5, 899.5, 934.5);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(471, 491, 471, 491);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(545, 565, 512, 532);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(518, 538, 531, 551);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(252, 272, 782, 802);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(495, 515, 512, 532);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(351, 391, 534, 574);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(400, 420, 573, 593);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(401, 421, 509, 529);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(436, 476, 426, 466);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(234, 290, 970, 1010);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(29, 85, 888, 928);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(234, 290, 991, 1031);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(261, 317, 889, 929);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(432, 488, 870, 910);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(384, 440, 970, 1010);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(314, 370, 851, 891);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(438, 494, 830, 870);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(202, 258, 842, 882);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(155, 211, 792, 832);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(503, 559, 791, 831);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(490, 546, 747, 787);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(366, 422, 678, 718);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(367, 423, 606, 646);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(341, 397, 461, 501);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(348, 404, 377, 417);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(490, 546, 381, 421);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(490, 546, 315, 355);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(375, 431, 365, 405);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(497, 553, 122, 162);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(490, 546, 245, 285);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(366, 422, 150, 190);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(348, 404, 229, 269);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(193, 249, 210, 250);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(193, 249, 229, 269);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(364, 420, 246, 286);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(190, 246, 246, 286);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(64, 120, 241, 281);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(193, 249, 154, 194);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(193, 249, 135, 175);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(261, 317, 213, 253);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(288, 344, 81, 121);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(288, 344, 160, 200);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(207, 263, 835, 875);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(366, 422, 533, 573);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(193, 249, 173, 213);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(193, 249, 248, 288);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(126, 182, 287, 327);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(126, 182, 413, 453);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(236, 292, 286, 326);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(236, 292, 412, 452);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(149, 205, 653, 693);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(384, 440, 891, 931);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(149, 205, 674, 714);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(432, 488, 991, 1031);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(515, 571, 461, 501);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(527, 583, 452, 492);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(500, 556, 571, 611);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(234, 290, 722, 762);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(539, 595, 502, 542);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(382, 438, 613, 653);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(383, 439, 449, 489);\n    rs.push_back(rect);\n\n#if 1\n    AlignmentConstraint *alignment2424608 = new AlignmentConstraint((vpsc::Dim) 0, 0);\n    alignment2424608->addShape(0, 0);\n    alignment2424608->addShape(2, 0);\n    alignment2424608->addShape(45, 0);\n    alignment2424608->addShape(46, 0);\n    alignment2424608->addShape(84, 0);\n    alignment2424608->addShape(90, 0);\n    alignment2424608->addShape(92, 0);\n    alignment2424608->addShape(129, 0);\n    alignment2424608->addShape(130, 0);\n    alignment2424608->addShape(138, 0);\n    ccs.push_back(alignment2424608);\n    AlignmentConstraint *alignment2424744 = new AlignmentConstraint((vpsc::Dim) 0, 0);\n    alignment2424744->addShape(1, 0);\n    alignment2424744->addShape(3, 0);\n    alignment2424744->addShape(65, 0);\n    alignment2424744->addShape(76, 0);\n    ccs.push_back(alignment2424744);\n    AlignmentConstraint *alignment1216038856 = new AlignmentConstraint((vpsc::Dim) 0, 0);\n    alignment1216038856->addShape(4, 0);\n    ccs.push_back(alignment1216038856);\n    AlignmentConstraint *alignment1216038920 = new AlignmentConstraint((vpsc::Dim) 0, 0);\n    alignment1216038920->addShape(5, 0);\n    alignment1216038920->addShape(7, 0);\n    alignment1216038920->addShape(15, 0);\n    alignment1216038920->addShape(16, 0);\n    alignment1216038920->addShape(17, 0);\n    alignment1216038920->addShape(21, 0);\n    alignment1216038920->addShape(22, 0);\n    alignment1216038920->addShape(25, 0);\n    alignment1216038920->addShape(26, 0);\n    alignment1216038920->addShape(40, 0);\n    alignment1216038920->addShape(48, 0);\n    alignment1216038920->addShape(49, 0);\n    alignment1216038920->addShape(54, 0);\n    alignment1216038920->addShape(55, 0);\n    alignment1216038920->addShape(56, 0);\n    alignment1216038920->addShape(57, 0);\n    alignment1216038920->addShape(58, 0);\n    alignment1216038920->addShape(62, 0);\n    alignment1216038920->addShape(69, 0);\n    alignment1216038920->addShape(79, 0);\n    alignment1216038920->addShape(89, 0);\n    alignment1216038920->addShape(94, 0);\n    alignment1216038920->addShape(134, 0);\n    ccs.push_back(alignment1216038920);\n    AlignmentConstraint *alignment1216038984 = new AlignmentConstraint((vpsc::Dim) 0, 0);\n    alignment1216038984->addShape(6, 0);\n    alignment1216038984->addShape(63, 0);\n    alignment1216038984->addShape(64, 0);\n    alignment1216038984->addShape(66, 0);\n    ccs.push_back(alignment1216038984);\n    AlignmentConstraint *alignment1216039048 = new AlignmentConstraint((vpsc::Dim) 0, 0);\n    alignment1216039048->addShape(8, 0);\n    alignment1216039048->addShape(77, 0);\n    alignment1216039048->addShape(87, 0);\n    alignment1216039048->addShape(88, 0);\n    alignment1216039048->addShape(95, 0);\n    alignment1216039048->addShape(132, 0);\n    alignment1216039048->addShape(140, 0);\n    alignment1216039048->addShape(141, 0);\n    ccs.push_back(alignment1216039048);\n    AlignmentConstraint *alignment1216039112 = new AlignmentConstraint((vpsc::Dim) 0, 0);\n    alignment1216039112->addShape(9, 0);\n    alignment1216039112->addShape(10, 0);\n    alignment1216039112->addShape(23, 0);\n    alignment1216039112->addShape(108, 0);\n    ccs.push_back(alignment1216039112);\n    AlignmentConstraint *alignment1216039176 = new AlignmentConstraint((vpsc::Dim) 0, 0);\n    alignment1216039176->addShape(11, 0);\n    alignment1216039176->addShape(35, 0);\n    alignment1216039176->addShape(60, 0);\n    alignment1216039176->addShape(93, 0);\n    alignment1216039176->addShape(120, 0);\n    ccs.push_back(alignment1216039176);\n    AlignmentConstraint *alignment1216039240 = new AlignmentConstraint((vpsc::Dim) 0, 0);\n    alignment1216039240->addShape(12, 0);\n    alignment1216039240->addShape(68, 0);\n    alignment1216039240->addShape(99, 0);\n    ccs.push_back(alignment1216039240);\n    AlignmentConstraint *alignment1216039304 = new AlignmentConstraint((vpsc::Dim) 0, 0);\n    alignment1216039304->addShape(13, 0);\n    alignment1216039304->addShape(83, 0);\n    alignment1216039304->addShape(100, 0);\n    alignment1216039304->addShape(137, 0);\n    ccs.push_back(alignment1216039304);\n    AlignmentConstraint *alignment1216040464 = new AlignmentConstraint((vpsc::Dim) 0, 0);\n    alignment1216040464->addShape(14, 0);\n    ccs.push_back(alignment1216040464);\n    AlignmentConstraint *alignment1216040528 = new AlignmentConstraint((vpsc::Dim) 0, 0);\n    alignment1216040528->addShape(18, 0);\n    ccs.push_back(alignment1216040528);\n    AlignmentConstraint *alignment1216040592 = new AlignmentConstraint((vpsc::Dim) 0, 0);\n    alignment1216040592->addShape(19, 0);\n    alignment1216040592->addShape(31, 0);\n    ccs.push_back(alignment1216040592);\n    AlignmentConstraint *alignment1216040656 = new AlignmentConstraint((vpsc::Dim) 0, 0);\n    alignment1216040656->addShape(20, 0);\n    alignment1216040656->addShape(27, 0);\n    alignment1216040656->addShape(86, 0);\n    alignment1216040656->addShape(105, 0);\n    alignment1216040656->addShape(112, 0);\n    ccs.push_back(alignment1216040656);\n    AlignmentConstraint *alignment1216040720 = new AlignmentConstraint((vpsc::Dim) 0, 0);\n    alignment1216040720->addShape(24, 0);\n    alignment1216040720->addShape(61, 0);\n    alignment1216040720->addShape(109, 0);\n    ccs.push_back(alignment1216040720);\n    AlignmentConstraint *alignment1216040784 = new AlignmentConstraint((vpsc::Dim) 0, 0);\n    alignment1216040784->addShape(28, 0);\n    alignment1216040784->addShape(29, 0);\n    alignment1216040784->addShape(33, 0);\n    alignment1216040784->addShape(34, 0);\n    alignment1216040784->addShape(41, 0);\n    alignment1216040784->addShape(42, 0);\n    alignment1216040784->addShape(113, 0);\n    alignment1216040784->addShape(114, 0);\n    alignment1216040784->addShape(116, 0);\n    alignment1216040784->addShape(118, 0);\n    alignment1216040784->addShape(119, 0);\n    alignment1216040784->addShape(125, 0);\n    alignment1216040784->addShape(126, 0);\n    ccs.push_back(alignment1216040784);\n    AlignmentConstraint *alignment1216034032 = new AlignmentConstraint((vpsc::Dim) 0, 0);\n    alignment1216034032->addShape(30, 0);\n    ccs.push_back(alignment1216034032);\n    AlignmentConstraint *alignment1216035736 = new AlignmentConstraint((vpsc::Dim) 0, 0);\n    alignment1216035736->addShape(32, 0);\n    alignment1216035736->addShape(43, 0);\n    alignment1216035736->addShape(44, 0);\n    alignment1216035736->addShape(50, 0);\n    alignment1216035736->addShape(51, 0);\n    alignment1216035736->addShape(127, 0);\n    alignment1216035736->addShape(128, 0);\n    ccs.push_back(alignment1216035736);\n    AlignmentConstraint *alignment1216035800 = new AlignmentConstraint((vpsc::Dim) 0, 0);\n    alignment1216035800->addShape(36, 0);\n    alignment1216035800->addShape(37, 0);\n    alignment1216035800->addShape(121, 0);\n    alignment1216035800->addShape(122, 0);\n    ccs.push_back(alignment1216035800);\n    AlignmentConstraint *alignment1216035864 = new AlignmentConstraint((vpsc::Dim) 0, 0);\n    alignment1216035864->addShape(38, 0);\n    ccs.push_back(alignment1216035864);\n    AlignmentConstraint *alignment1216035928 = new AlignmentConstraint((vpsc::Dim) 0, 0);\n    alignment1216035928->addShape(39, 0);\n    alignment1216035928->addShape(67, 0);\n    alignment1216035928->addShape(98, 0);\n    alignment1216035928->addShape(123, 0);\n    ccs.push_back(alignment1216035928);\n    AlignmentConstraint *alignment1216035992 = new AlignmentConstraint((vpsc::Dim) 0, 0);\n    alignment1216035992->addShape(47, 0);\n    ccs.push_back(alignment1216035992);\n    AlignmentConstraint *alignment1216036056 = new AlignmentConstraint((vpsc::Dim) 0, 0);\n    alignment1216036056->addShape(52, 0);\n    alignment1216036056->addShape(53, 0);\n    ccs.push_back(alignment1216036056);\n    AlignmentConstraint *alignment1216036120 = new AlignmentConstraint((vpsc::Dim) 0, 0);\n    alignment1216036120->addShape(59, 0);\n    alignment1216036120->addShape(80, 0);\n    ccs.push_back(alignment1216036120);\n    AlignmentConstraint *alignment1216036184 = new AlignmentConstraint((vpsc::Dim) 0, 0);\n    alignment1216036184->addShape(70, 0);\n    alignment1216036184->addShape(73, 0);\n    ccs.push_back(alignment1216036184);\n    AlignmentConstraint *alignment1216036248 = new AlignmentConstraint((vpsc::Dim) 0, 0);\n    alignment1216036248->addShape(71, 0);\n    alignment1216036248->addShape(72, 0);\n    ccs.push_back(alignment1216036248);\n    AlignmentConstraint *alignment1216036312 = new AlignmentConstraint((vpsc::Dim) 0, 0);\n    alignment1216036312->addShape(74, 0);\n    ccs.push_back(alignment1216036312);\n    AlignmentConstraint *alignment1216036376 = new AlignmentConstraint((vpsc::Dim) 0, 0);\n    alignment1216036376->addShape(75, 0);\n    alignment1216036376->addShape(78, 0);\n    alignment1216036376->addShape(131, 0);\n    alignment1216036376->addShape(133, 0);\n    ccs.push_back(alignment1216036376);\n    AlignmentConstraint *alignment1216036440 = new AlignmentConstraint((vpsc::Dim) 0, 0);\n    alignment1216036440->addShape(81, 0);\n    ccs.push_back(alignment1216036440);\n    AlignmentConstraint *alignment1216036504 = new AlignmentConstraint((vpsc::Dim) 0, 0);\n    alignment1216036504->addShape(82, 0);\n    alignment1216036504->addShape(136, 0);\n    ccs.push_back(alignment1216036504);\n    AlignmentConstraint *alignment1216036568 = new AlignmentConstraint((vpsc::Dim) 0, 0);\n    alignment1216036568->addShape(85, 0);\n    ccs.push_back(alignment1216036568);\n    AlignmentConstraint *alignment1216036632 = new AlignmentConstraint((vpsc::Dim) 0, 0);\n    alignment1216036632->addShape(91, 0);\n    ccs.push_back(alignment1216036632);\n    AlignmentConstraint *alignment1216034712 = new AlignmentConstraint((vpsc::Dim) 0, 0);\n    alignment1216034712->addShape(96, 0);\n    ccs.push_back(alignment1216034712);\n    AlignmentConstraint *alignment1216034776 = new AlignmentConstraint((vpsc::Dim) 0, 0);\n    alignment1216034776->addShape(97, 0);\n    ccs.push_back(alignment1216034776);\n    AlignmentConstraint *alignment1216034840 = new AlignmentConstraint((vpsc::Dim) 0, 0);\n    alignment1216034840->addShape(101, 0);\n    alignment1216034840->addShape(106, 0);\n    alignment1216034840->addShape(107, 0);\n    alignment1216034840->addShape(110, 0);\n    ccs.push_back(alignment1216034840);\n    AlignmentConstraint *alignment1216034904 = new AlignmentConstraint((vpsc::Dim) 0, 0);\n    alignment1216034904->addShape(102, 0);\n    alignment1216034904->addShape(103, 0);\n    alignment1216034904->addShape(111, 0);\n    alignment1216034904->addShape(115, 0);\n    alignment1216034904->addShape(124, 0);\n    ccs.push_back(alignment1216034904);\n    AlignmentConstraint *alignment1216034968 = new AlignmentConstraint((vpsc::Dim) 0, 0);\n    alignment1216034968->addShape(104, 0);\n    ccs.push_back(alignment1216034968);\n    AlignmentConstraint *alignment1216035032 = new AlignmentConstraint((vpsc::Dim) 0, 0);\n    alignment1216035032->addShape(117, 0);\n    ccs.push_back(alignment1216035032);\n    AlignmentConstraint *alignment1216035096 = new AlignmentConstraint((vpsc::Dim) 0, 0);\n    alignment1216035096->addShape(135, 0);\n    ccs.push_back(alignment1216035096);\n    AlignmentConstraint *alignment1216035160 = new AlignmentConstraint((vpsc::Dim) 0, 0);\n    alignment1216035160->addShape(139, 0);\n    ccs.push_back(alignment1216035160);\n#endif\n\n#if 1\n    AlignmentConstraint *alignment1216035224 = new AlignmentConstraint((vpsc::Dim) 1, 0);\n    alignment1216035224->addShape(0, 0);\n    alignment1216035224->addShape(7, 0);\n    alignment1216035224->addShape(8, 0);\n    ccs.push_back(alignment1216035224);\n    AlignmentConstraint *alignment1216035288 = new AlignmentConstraint((vpsc::Dim) 1, 0);\n    alignment1216035288->addShape(1, 0);\n    alignment1216035288->addShape(6, 0);\n    alignment1216035288->addShape(39, 0);\n    alignment1216035288->addShape(60, 0);\n    alignment1216035288->addShape(68, 0);\n    alignment1216035288->addShape(91, 0);\n    alignment1216035288->addShape(93, 0);\n    alignment1216035288->addShape(132, 0);\n    ccs.push_back(alignment1216035288);\n    AlignmentConstraint *alignment1216035352 = new AlignmentConstraint((vpsc::Dim) 1, 0);\n    alignment1216035352->addShape(2, 0);\n    alignment1216035352->addShape(77, 0);\n    alignment1216035352->addShape(79, 0);\n    ccs.push_back(alignment1216035352);\n    AlignmentConstraint *alignment1216035416 = new AlignmentConstraint((vpsc::Dim) 1, 0);\n    alignment1216035416->addShape(3, 0);\n    alignment1216035416->addShape(61, 0);\n    alignment1216035416->addShape(66, 0);\n    ccs.push_back(alignment1216035416);\n    AlignmentConstraint *alignment1216035480 = new AlignmentConstraint((vpsc::Dim) 1, 0);\n    alignment1216035480->addShape(4, 0);\n    alignment1216035480->addShape(22, 0);\n    alignment1216035480->addShape(23, 0);\n    alignment1216035480->addShape(107, 0);\n    ccs.push_back(alignment1216035480);\n    AlignmentConstraint *alignment1216035544 = new AlignmentConstraint((vpsc::Dim) 1, 0);\n    alignment1216035544->addShape(5, 0);\n    ccs.push_back(alignment1216035544);\n    AlignmentConstraint *alignment1216035608 = new AlignmentConstraint((vpsc::Dim) 1, 0);\n    alignment1216035608->addShape(9, 0);\n    alignment1216035608->addShape(96, 0);\n    ccs.push_back(alignment1216035608);\n    AlignmentConstraint *alignment1216042672 = new AlignmentConstraint((vpsc::Dim) 1, 0);\n    alignment1216042672->addShape(10, 0);\n    alignment1216042672->addShape(97, 0);\n    alignment1216042672->addShape(123, 0);\n    ccs.push_back(alignment1216042672);\n    AlignmentConstraint *alignment1216042736 = new AlignmentConstraint((vpsc::Dim) 1, 0);\n    alignment1216042736->addShape(11, 0);\n    alignment1216042736->addShape(12, 0);\n    alignment1216042736->addShape(13, 0);\n    alignment1216042736->addShape(59, 0);\n    alignment1216042736->addShape(62, 0);\n    alignment1216042736->addShape(63, 0);\n    alignment1216042736->addShape(65, 0);\n    alignment1216042736->addShape(67, 0);\n    alignment1216042736->addShape(98, 0);\n    ccs.push_back(alignment1216042736);\n    AlignmentConstraint *alignment1216042800 = new AlignmentConstraint((vpsc::Dim) 1, 0);\n    alignment1216042800->addShape(14, 0);\n    ccs.push_back(alignment1216042800);\n    AlignmentConstraint *alignment1216042864 = new AlignmentConstraint((vpsc::Dim) 1, 0);\n    alignment1216042864->addShape(15, 0);\n    alignment1216042864->addShape(101, 0);\n    ccs.push_back(alignment1216042864);\n    AlignmentConstraint *alignment1216042928 = new AlignmentConstraint((vpsc::Dim) 1, 0);\n    alignment1216042928->addShape(16, 0);\n    alignment1216042928->addShape(102, 0);\n    alignment1216042928->addShape(133, 0);\n    ccs.push_back(alignment1216042928);\n    AlignmentConstraint *alignment1216042992 = new AlignmentConstraint((vpsc::Dim) 1, 0);\n    alignment1216042992->addShape(17, 0);\n    alignment1216042992->addShape(103, 0);\n    ccs.push_back(alignment1216042992);\n    AlignmentConstraint *alignment1216043056 = new AlignmentConstraint((vpsc::Dim) 1, 0);\n    alignment1216043056->addShape(18, 0);\n    alignment1216043056->addShape(81, 0);\n    alignment1216043056->addShape(104, 0);\n    alignment1216043056->addShape(135, 0);\n    ccs.push_back(alignment1216043056);\n    AlignmentConstraint *alignment1216043120 = new AlignmentConstraint((vpsc::Dim) 1, 0);\n    alignment1216043120->addShape(19, 0);\n    ccs.push_back(alignment1216043120);\n    AlignmentConstraint *alignment1216043184 = new AlignmentConstraint((vpsc::Dim) 1, 0);\n    alignment1216043184->addShape(20, 0);\n    alignment1216043184->addShape(52, 0);\n    alignment1216043184->addShape(89, 0);\n    ccs.push_back(alignment1216043184);\n    AlignmentConstraint *alignment1216043248 = new AlignmentConstraint((vpsc::Dim) 1, 0);\n    alignment1216043248->addShape(21, 0);\n    alignment1216043248->addShape(105, 0);\n    alignment1216043248->addShape(106, 0);\n    ccs.push_back(alignment1216043248);\n    AlignmentConstraint *alignment1216043312 = new AlignmentConstraint((vpsc::Dim) 1, 0);\n    alignment1216043312->addShape(24, 0);\n    alignment1216043312->addShape(47, 0);\n    alignment1216043312->addShape(125, 0);\n    ccs.push_back(alignment1216043312);\n    AlignmentConstraint *alignment1216043376 = new AlignmentConstraint((vpsc::Dim) 1, 0);\n    alignment1216043376->addShape(25, 0);\n    alignment1216043376->addShape(30, 0);\n    alignment1216043376->addShape(31, 0);\n    alignment1216043376->addShape(32, 0);\n    alignment1216043376->addShape(110, 0);\n    alignment1216043376->addShape(115, 0);\n    alignment1216043376->addShape(116, 0);\n    alignment1216043376->addShape(117, 0);\n    alignment1216043376->addShape(126, 0);\n    ccs.push_back(alignment1216043376);\n    AlignmentConstraint *alignment1216043440 = new AlignmentConstraint((vpsc::Dim) 1, 0);\n    alignment1216043440->addShape(26, 0);\n    alignment1216043440->addShape(111, 0);\n    alignment1216043440->addShape(118, 0);\n    ccs.push_back(alignment1216043440);\n    AlignmentConstraint *alignment1216043504 = new AlignmentConstraint((vpsc::Dim) 1, 0);\n    alignment1216043504->addShape(27, 0);\n    alignment1216043504->addShape(29, 0);\n    alignment1216043504->addShape(51, 0);\n    alignment1216043504->addShape(53, 0);\n    alignment1216043504->addShape(55, 0);\n    ccs.push_back(alignment1216043504);\n    AlignmentConstraint *alignment1216043568 = new AlignmentConstraint((vpsc::Dim) 1, 0);\n    alignment1216043568->addShape(28, 0);\n    ccs.push_back(alignment1216043568);\n    AlignmentConstraint *alignment1216043632 = new AlignmentConstraint((vpsc::Dim) 1, 0);\n    alignment1216043632->addShape(33, 0);\n    alignment1216043632->addShape(50, 0);\n    alignment1216043632->addShape(54, 0);\n    ccs.push_back(alignment1216043632);\n    AlignmentConstraint *alignment1216043696 = new AlignmentConstraint((vpsc::Dim) 1, 0);\n    alignment1216043696->addShape(34, 0);\n    ccs.push_back(alignment1216043696);\n    AlignmentConstraint *alignment1216043760 = new AlignmentConstraint((vpsc::Dim) 1, 0);\n    alignment1216043760->addShape(35, 0);\n    alignment1216043760->addShape(122, 0);\n    ccs.push_back(alignment1216043760);\n    AlignmentConstraint *alignment1216043824 = new AlignmentConstraint((vpsc::Dim) 1, 0);\n    alignment1216043824->addShape(36, 0);\n    alignment1216043824->addShape(119, 0);\n    ccs.push_back(alignment1216043824);\n    AlignmentConstraint *alignment1216043888 = new AlignmentConstraint((vpsc::Dim) 1, 0);\n    alignment1216043888->addShape(37, 0);\n    ccs.push_back(alignment1216043888);\n    AlignmentConstraint *alignment1216043952 = new AlignmentConstraint((vpsc::Dim) 1, 0);\n    alignment1216043952->addShape(38, 0);\n    ccs.push_back(alignment1216043952);\n    AlignmentConstraint *alignment1216044016 = new AlignmentConstraint((vpsc::Dim) 1, 0);\n    alignment1216044016->addShape(40, 0);\n    alignment1216044016->addShape(86, 0);\n    alignment1216044016->addShape(124, 0);\n    ccs.push_back(alignment1216044016);\n    AlignmentConstraint *alignment1216044080 = new AlignmentConstraint((vpsc::Dim) 1, 0);\n    alignment1216044080->addShape(41, 0);\n    ccs.push_back(alignment1216044080);\n    AlignmentConstraint *alignment1216044144 = new AlignmentConstraint((vpsc::Dim) 1, 0);\n    alignment1216044144->addShape(42, 0);\n    ccs.push_back(alignment1216044144);\n    AlignmentConstraint *alignment1216044208 = new AlignmentConstraint((vpsc::Dim) 1, 0);\n    alignment1216044208->addShape(43, 0);\n    alignment1216044208->addShape(45, 0);\n    alignment1216044208->addShape(70, 0);\n    alignment1216044208->addShape(71, 0);\n    ccs.push_back(alignment1216044208);\n    AlignmentConstraint *alignment1216044272 = new AlignmentConstraint((vpsc::Dim) 1, 0);\n    alignment1216044272->addShape(44, 0);\n    alignment1216044272->addShape(46, 0);\n    alignment1216044272->addShape(72, 0);\n    alignment1216044272->addShape(73, 0);\n    alignment1216044272->addShape(108, 0);\n    ccs.push_back(alignment1216044272);\n    AlignmentConstraint *alignment1216044336 = new AlignmentConstraint((vpsc::Dim) 1, 0);\n    alignment1216044336->addShape(48, 0);\n    alignment1216044336->addShape(109, 0);\n    ccs.push_back(alignment1216044336);\n    AlignmentConstraint *alignment1216044400 = new AlignmentConstraint((vpsc::Dim) 1, 0);\n    alignment1216044400->addShape(49, 0);\n    ccs.push_back(alignment1216044400);\n    AlignmentConstraint *alignment1216044464 = new AlignmentConstraint((vpsc::Dim) 1, 0);\n    alignment1216044464->addShape(56, 0);\n    alignment1216044464->addShape(76, 0);\n    ccs.push_back(alignment1216044464);\n    AlignmentConstraint *alignment1216044528 = new AlignmentConstraint((vpsc::Dim) 1, 0);\n    alignment1216044528->addShape(57, 0);\n    alignment1216044528->addShape(137, 0);\n    ccs.push_back(alignment1216044528);\n    AlignmentConstraint *alignment1216044592 = new AlignmentConstraint((vpsc::Dim) 1, 0);\n    alignment1216044592->addShape(58, 0);\n    alignment1216044592->addShape(82, 0);\n    alignment1216044592->addShape(85, 0);\n    alignment1216044592->addShape(88, 0);\n    alignment1216044592->addShape(139, 0);\n    ccs.push_back(alignment1216044592);\n    AlignmentConstraint *alignment1216021552 = new AlignmentConstraint((vpsc::Dim) 1, 0);\n    alignment1216021552->addShape(64, 0);\n    ccs.push_back(alignment1216021552);\n    AlignmentConstraint *alignment1216021616 = new AlignmentConstraint((vpsc::Dim) 1, 0);\n    alignment1216021616->addShape(69, 0);\n    ccs.push_back(alignment1216021616);\n    AlignmentConstraint *alignment1216021680 = new AlignmentConstraint((vpsc::Dim) 1, 0);\n    alignment1216021680->addShape(74, 0);\n    ccs.push_back(alignment1216021680);\n    AlignmentConstraint *alignment1216021744 = new AlignmentConstraint((vpsc::Dim) 1, 0);\n    alignment1216021744->addShape(75, 0);\n    ccs.push_back(alignment1216021744);\n    AlignmentConstraint *alignment1216021808 = new AlignmentConstraint((vpsc::Dim) 1, 0);\n    alignment1216021808->addShape(78, 0);\n    alignment1216021808->addShape(138, 0);\n    ccs.push_back(alignment1216021808);\n    AlignmentConstraint *alignment1216021872 = new AlignmentConstraint((vpsc::Dim) 1, 0);\n    alignment1216021872->addShape(80, 0);\n    ccs.push_back(alignment1216021872);\n    AlignmentConstraint *alignment1216021936 = new AlignmentConstraint((vpsc::Dim) 1, 0);\n    alignment1216021936->addShape(83, 0);\n    ccs.push_back(alignment1216021936);\n    AlignmentConstraint *alignment1216022000 = new AlignmentConstraint((vpsc::Dim) 1, 0);\n    alignment1216022000->addShape(84, 0);\n    ccs.push_back(alignment1216022000);\n    AlignmentConstraint *alignment1216022064 = new AlignmentConstraint((vpsc::Dim) 1, 0);\n    alignment1216022064->addShape(87, 0);\n    ccs.push_back(alignment1216022064);\n    AlignmentConstraint *alignment1216022128 = new AlignmentConstraint((vpsc::Dim) 1, 0);\n    alignment1216022128->addShape(90, 0);\n    alignment1216022128->addShape(95, 0);\n    ccs.push_back(alignment1216022128);\n    AlignmentConstraint *alignment1216022192 = new AlignmentConstraint((vpsc::Dim) 1, 0);\n    alignment1216022192->addShape(92, 0);\n    alignment1216022192->addShape(134, 0);\n    ccs.push_back(alignment1216022192);\n    AlignmentConstraint *alignment1216022256 = new AlignmentConstraint((vpsc::Dim) 1, 0);\n    alignment1216022256->addShape(94, 0);\n    ccs.push_back(alignment1216022256);\n    AlignmentConstraint *alignment1216022320 = new AlignmentConstraint((vpsc::Dim) 1, 0);\n    alignment1216022320->addShape(99, 0);\n    alignment1216022320->addShape(100, 0);\n    ccs.push_back(alignment1216022320);\n    AlignmentConstraint *alignment1216022384 = new AlignmentConstraint((vpsc::Dim) 1, 0);\n    alignment1216022384->addShape(112, 0);\n    alignment1216022384->addShape(114, 0);\n    ccs.push_back(alignment1216022384);\n    AlignmentConstraint *alignment1216022448 = new AlignmentConstraint((vpsc::Dim) 1, 0);\n    alignment1216022448->addShape(113, 0);\n    alignment1216022448->addShape(120, 0);\n    ccs.push_back(alignment1216022448);\n    AlignmentConstraint *alignment1216022512 = new AlignmentConstraint((vpsc::Dim) 1, 0);\n    alignment1216022512->addShape(121, 0);\n    ccs.push_back(alignment1216022512);\n    AlignmentConstraint *alignment1216022576 = new AlignmentConstraint((vpsc::Dim) 1, 0);\n    alignment1216022576->addShape(127, 0);\n    alignment1216022576->addShape(129, 0);\n    ccs.push_back(alignment1216022576);\n    AlignmentConstraint *alignment1216022640 = new AlignmentConstraint((vpsc::Dim) 1, 0);\n    alignment1216022640->addShape(128, 0);\n    alignment1216022640->addShape(130, 0);\n    ccs.push_back(alignment1216022640);\n    AlignmentConstraint *alignment1216022704 = new AlignmentConstraint((vpsc::Dim) 1, 0);\n    alignment1216022704->addShape(131, 0);\n    ccs.push_back(alignment1216022704);\n    AlignmentConstraint *alignment1216022768 = new AlignmentConstraint((vpsc::Dim) 1, 0);\n    alignment1216022768->addShape(136, 0);\n    alignment1216022768->addShape(141, 0);\n    ccs.push_back(alignment1216022768);\n    AlignmentConstraint *alignment1216022832 = new AlignmentConstraint((vpsc::Dim) 1, 0);\n    alignment1216022832->addShape(140, 0);\n    ccs.push_back(alignment1216022832);\n#endif\n\n    ConstrainedFDLayout alg(rs, es, defaultEdgeLength);\n    alg.setAvoidNodeOverlaps(true);\n    alg.setConstraints(ccs);\n    alg.makeFeasible();\n    alg.outputInstanceToSVG();\n    //alg.run();\n    return 0;\n};\n"
  },
  {
    "path": "cola/libcola/tests/makemovie.sh",
    "content": "pattern=containment\nwidth=200\nheight=260\nrm ${pattern}*.pdf\nfor file in ${pattern}*.svg\ndo\n\techo adding $file...\n\tinkscape -w$width -h$height -A ${file%.svg}.pdf $file 2> /dev/null\ndone\nconvert -page ${width}x${height} -delay 15 ${pattern}*.pdf $pattern.gif\n"
  },
  {
    "path": "cola/libcola/tests/max_acyclic_subgraph.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libcola - A library providing force-directed network layout using the \n *           stress-majorization method subject to separation constraints.\n *\n * Copyright (C) 2006-2008  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library in the file LICENSE; if not, \n * write to the Free Software Foundation, Inc., 59 Temple Place, \n * Suite 330, Boston, MA  02111-1307  USA\n *\n*/\n\n#include <iostream>\n#include <vector>\n#include <assert.h>\n#include <libcola/cola.h>\n#include <libcola/max_acyclic_subgraph.h>\n#include \"graphlayouttest.h\"\n\nusing namespace std;\nusing namespace cola;\nusing vpsc::Rectangle;\n\nint main()  {\n  MaxAcyclicSubgraph *mas;\n  Edges case_a, case_b, case_c, case_d, case_e, case_f;\n  Edges *subgraph = nullptr;\n\n  vector<Rectangle *> rs;\n  unsigned V;\n\n  // create case A\n  // case A consists of a basic graph where the start point is a source\n  cout << endl << \"ENTERING CASE A\" << endl;\n  V = 5;\n  case_a.push_back(Edge(0, 1));\n  case_a.push_back(Edge(1, 2));\n  case_a.push_back(Edge(2, 3));\n  case_a.push_back(Edge(3, 4));\n  case_a.push_back(Edge(4, 1));\n\n  // detect the subgraph\n  mas = new MaxAcyclicSubgraph(V, &case_a);\n  subgraph = mas->find_subgraph();\n\n  if (subgraph != nullptr)  {\n    cout << \"subgraph->size(): \" << subgraph->size() << endl;\n    cout << \"Ea: \";\n    for (unsigned i = 0; i < subgraph->size(); i++)  {\n      // print out the subgraph\n      cout << \"(\" << (*subgraph)[i].first << \", \" << (*subgraph)[i].second << \") \";\n    }\n\n    cout << endl;\n\n    // output a picture\n    rs.push_back(new Rectangle(10,10+5,10,10+5));\n    rs.push_back(new Rectangle(30,30+5,30,30+5));\n    rs.push_back(new Rectangle(30,30+5,60,60+5));\n    rs.push_back(new Rectangle(65,65+5,60,60+5));\n    rs.push_back(new Rectangle(65,65+5,30,30+5));\n\n    assert(rs.size() == V);\n\n    output_svg(rs, case_a, \"mas_case_a.svg\", false, true, subgraph);\n    for (unsigned i = 0; i < rs.size(); i++)  { delete rs[i]; }\n    rs.clear();\n\n    delete subgraph;\n  }\n  else  {\n    cout << \"No subgraph found\" << endl;\n  }\n\n  // create case B\n  // case B is the same graph of case A but with more elements\n  cout << endl << \"ENTERING CASE B\" << endl;\n  V = 7;\n  case_b.push_back(Edge(0, 1));\n  case_b.push_back(Edge(1, 2));\n  case_b.push_back(Edge(2, 3));\n  case_b.push_back(Edge(3, 4));\n  case_b.push_back(Edge(4, 1));\n  case_b.push_back(Edge(5, 2));\n  case_b.push_back(Edge(6, 5));\n\n  // detect the subgraph\n  mas->mod_graph(V, &case_b);\n  subgraph = mas->find_subgraph();\n  \n  if (subgraph != nullptr)  {\n    cout << \"subgraph->size(): \" << subgraph->size() << endl;\n    cout << \"Ea: \";\n    for (unsigned i = 0; i < subgraph->size(); i++)  {\n      // print out the subgraph\n      cout << \"(\" << (*subgraph)[i].first << \", \" << (*subgraph)[i].second << \") \";\n    }\n\n    cout << endl;\n\n    // output a picture\n    rs.push_back(new Rectangle(10,10+5,10,10+5));\n    rs.push_back(new Rectangle(30,30+5,30,30+5));\n    rs.push_back(new Rectangle(30,30+5,60,60+5));\n    rs.push_back(new Rectangle(65,65+5,60,60+5));\n    rs.push_back(new Rectangle(65,65+5,30,30+5));\n    rs.push_back(new Rectangle(30,30+5,90,90+5));\n    rs.push_back(new Rectangle(65,65+5,90,90+5));\n\n    assert(rs.size() == V);\n\n    output_svg(rs, case_b, \"mas_case_b.svg\", false, true, subgraph);\n    for (unsigned i = 0; i < rs.size(); i++)  { delete rs[i]; }\n    rs.clear();\n\n    delete subgraph;\n  }\n  else  {\n    cout << \"No subgraph found\" << endl;\n  }\n\n  // create case C\n  // case C is a more complicated graph with nested subgraph\n  cout << endl << \"ENTERING CASE C\" << endl;\n  V = 14;\n  case_c.push_back(Edge(0, 1));\n  case_c.push_back(Edge(0, 5));\n  case_c.push_back(Edge(0, 6));\n  case_c.push_back(Edge(2, 0));\n  case_c.push_back(Edge(3, 5));\n  case_c.push_back(Edge(4, 3));\n  case_c.push_back(Edge(5, 4));\n  case_c.push_back(Edge(5, 13));\n  case_c.push_back(Edge(6, 2));\n  case_c.push_back(Edge(6, 9));\n  case_c.push_back(Edge(7, 6));\n  case_c.push_back(Edge(8, 7));\n  case_c.push_back(Edge(9, 10));\n  case_c.push_back(Edge(9, 11));\n  case_c.push_back(Edge(9, 12));\n  case_c.push_back(Edge(10, 6));\n  case_c.push_back(Edge(12, 10));\n  case_c.push_back(Edge(13, 4));\n\n  // detect the subgraph\n  mas->mod_graph(V, &case_c);\n  subgraph = mas->find_subgraph();\n\n  if (subgraph != nullptr)  {\n    cout << \"subgraph->size(): \" << subgraph->size() << endl;\n    cout << \"Ea: \";\n    for (unsigned i = 0; i < subgraph->size(); i++)  {\n      // print out the subgraph\n      cout << \"(\" << (*subgraph)[i].first << \", \" << (*subgraph)[i].second << \") \";\n    }\n\n    cout << endl;\n\n    // output a picture\n    rs.push_back(new Rectangle(10,10+5,10,10+5)); // node 0\n    rs.push_back(new Rectangle(20,20+5,40,40+5)); // node 1\n    rs.push_back(new Rectangle(40,40+5,30,30+5)); // node 2\n    rs.push_back(new Rectangle(30,30+5,60,60+5)); // node 3\n    rs.push_back(new Rectangle(60,60+5,60,60+5)); // node 4\n    rs.push_back(new Rectangle(10,10+5,90,90+5)); // node 5\n    rs.push_back(new Rectangle(80,80+5,15,15+5)); // node 6\n    rs.push_back(new Rectangle(110,110+5,15,15+5)); // node 7\n    rs.push_back(new Rectangle(140,140+5,15,15+5)); // node 8\n    rs.push_back(new Rectangle(110,110+5,60,60+5)); // node 9\n    rs.push_back(new Rectangle(100,100+5,85,85+5)); // node 10\n    rs.push_back(new Rectangle(140,140+5,50,50+5)); // node 11\n    rs.push_back(new Rectangle(140,140+5,70,70+5)); // node 12\n    rs.push_back(new Rectangle(45,45+5,90,90+5)); // node 13\n\n    assert(rs.size() == V);\n\n    output_svg(rs, case_c, \"mas_case_c.svg\", false, true, subgraph);\n    for(int i = 0; i < V; i++) { delete rs[i]; }\n    rs.clear();\n    delete subgraph;\n  }\n  else  {\n    cout << \"No subgraph found\" << endl;\n  }\n\n  // create case D\n  // case D consists of the same graph as case A but with a different starting location\n  cout << endl << \"ENTERING CASE D\" << endl;\n  V = 5;\n  case_d.push_back(Edge(0, 1));\n  case_d.push_back(Edge(1, 2));\n  case_d.push_back(Edge(2, 3));\n  case_d.push_back(Edge(3, 0));\n  case_d.push_back(Edge(4, 1));\n\n  // detect the subgraph\n  mas->mod_graph(V, &case_d);\n  subgraph = mas->find_subgraph();\n  \n  if (subgraph != nullptr)  {\n    cout << \"subgraph->size(): \" << subgraph->size() << endl;\n    cout << \"Ea: \";\n    for (unsigned i = 0; i < subgraph->size(); i++)  {\n      // print out the subgraph\n      cout << \"(\" << (*subgraph)[i].first << \", \" << (*subgraph)[i].second << \") \";\n    }\n\n    cout << endl;\n\n    // output a picture\n    rs.push_back(new Rectangle(65,65+5,60,60+5));\n    rs.push_back(new Rectangle(65,65+5,30,30+5));\n    rs.push_back(new Rectangle(30,30+5,30,30+5));\n    rs.push_back(new Rectangle(30,30+5,60,60+5));\n    rs.push_back(new Rectangle(10,10+5,10,10+5));\n\n    assert(rs.size() == V);\n\n    output_svg(rs, case_d, \"mas_case_d.svg\", false, true, subgraph);\n    for (unsigned i = 0; i < rs.size(); i++)  { delete rs[i]; }\n    rs.clear();\n    delete subgraph;\n  }\n  else  {\n    cout << \"No subgraph found\" << endl;\n  }\n\n  // create case E\n  // case E is a reordering of case C\n  cout << endl << \"ENTERING CASE E\" << endl;\n  V = 14;\n  case_e.push_back(Edge(0, 6));\n  case_e.push_back(Edge(0, 9));\n  case_e.push_back(Edge(1, 4));\n  case_e.push_back(Edge(3, 10));\n  case_e.push_back(Edge(4, 3));\n  case_e.push_back(Edge(5, 0));\n  case_e.push_back(Edge(6, 7));\n  case_e.push_back(Edge(7, 0));\n  case_e.push_back(Edge(7, 2));\n  case_e.push_back(Edge(7, 10));\n  case_e.push_back(Edge(8, 5));\n  case_e.push_back(Edge(9, 12));\n  case_e.push_back(Edge(9, 11));\n  case_e.push_back(Edge(9, 13));\n  case_e.push_back(Edge(10, 1));\n  case_e.push_back(Edge(10, 4));\n  case_e.push_back(Edge(12, 0));\n  case_e.push_back(Edge(11, 12));\n\n  // detect the subgraph\n  mas->mod_graph(V, &case_e);\n  subgraph = mas->find_subgraph();\n  if (subgraph != nullptr)  {\n    cout << \"subgraph->size(): \" << subgraph->size() << endl;\n    cout << \"Ea: \";\n    for (unsigned i = 0; i < subgraph->size(); i++)  {\n      // print out the subgraph\n      cout << \"(\" << (*subgraph)[i].first << \", \" << (*subgraph)[i].second << \") \";\n    }\n\n    cout << endl;\n\n    // output a picture\n    rs.push_back(new Rectangle(80,80+5,15,15+5)); // node 6\n    rs.push_back(new Rectangle(45,45+5,90,90+5)); // node 13\n    rs.push_back(new Rectangle(20,20+5,40,40+5)); // node 1\n    rs.push_back(new Rectangle(30,30+5,60,60+5)); // node 3\n    rs.push_back(new Rectangle(60,60+5,60,60+5)); // node 4\n    rs.push_back(new Rectangle(110,110+5,15,15+5)); // node 7\n    rs.push_back(new Rectangle(40,40+5,30,30+5)); // node 2\n    rs.push_back(new Rectangle(10,10+5,10,10+5)); // node 0\n    rs.push_back(new Rectangle(140,140+5,15,15+5)); // node 8\n    rs.push_back(new Rectangle(110,110+5,60,60+5)); // node 9\n    rs.push_back(new Rectangle(10,10+5,90,90+5)); // node 5\n    rs.push_back(new Rectangle(140,140+5,70,70+5)); // node 12\n    rs.push_back(new Rectangle(100,100+5,85,85+5)); // node 10\n    rs.push_back(new Rectangle(140,140+5,50,50+5)); // node 11\n\n    assert(rs.size() == V);\n\n    output_svg(rs, case_e, \"mas_case_e.svg\", false, true, subgraph);\n    for(int i = 0; i < V; i++) { delete rs[i]; }\n    rs.clear();\n    delete subgraph;\n  }\n  else  {\n    cout << \"No subgraph found\" << endl;\n  }\n\n  // create case F\n  // case F consists of the same graph with sinks\n  cout << endl << \"ENTERING CASE F\" << endl;\n  V = 3;\n  case_f.push_back(Edge(0, 1));\n  case_f.push_back(Edge(0, 2));\n  case_f.push_back(Edge(1, 2));\n\n  // detect the subgraph\n  mas->mod_graph(V, &case_f);\n  subgraph = mas->find_subgraph();\n\n  if (subgraph != nullptr)  {\n    cout << \"subgraph->size(): \" << subgraph->size() << endl;\n    cout << \"Ea: \";\n    for (unsigned i = 0; i < subgraph->size(); i++)  {\n      // print out the subgraph\n      cout << \"(\" << (*subgraph)[i].first << \", \" << (*subgraph)[i].second << \") \";\n    }\n\n    cout << endl;\n\n    // output a picture\n    rs.push_back(new Rectangle(10,10+5,10,10+5));\n    rs.push_back(new Rectangle(40,40+5,30,30+5));\n    rs.push_back(new Rectangle(15,15+5,60,60+5));\n\n    assert(rs.size() == V);\n\n    output_svg(rs, case_f, \"mas_case_f.svg\", false, true, subgraph);\n    for (unsigned i = 0; i < rs.size(); i++)  { delete rs[i]; }\n    rs.clear();\n    delete subgraph;\n  }\n  else  {\n    cout << \"No subgraph found\" << endl;\n  }\n\n  // END TEST\n  delete mas;\n\n  return 0;\n}\n"
  },
  {
    "path": "cola/libcola/tests/overlappingClusters01.cpp",
    "content": "// Based on debug file from Christoph Daniel Schulze \n// cgraph_3_after_layout.svg\n#include <vector>\n#include <utility>\n#include \"libcola/cola.h\"\nusing namespace cola;\nint main(void) {\n    CompoundConstraints ccs;\n    std::vector<Edge> es;\n    EdgeLengths eLengths;\n    double defaultEdgeLength=50;\n    std::vector<vpsc::Rectangle*> rs;\n    vpsc::Rectangle *rect = nullptr;\n\n    rect = new vpsc::Rectangle(245.517, 247.517, 279.574, 281.574);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(222.742, 224.742, 318.708, 320.708);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(460.345, 462.345, 716.936, 718.936);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(607.846, 609.846, 665.496, 667.496);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(640.191, 642.191, 637.391, 639.391);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(743.519, 745.519, 865.48, 867.48);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(807.112, 809.112, 759.798, 761.798);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(807.112, 809.112, 699.132, 701.132);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(121.997, 123.997, 221.049, 223.049);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(224.354, 226.354, 80, 82);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(448.583, 450.583, 517.722, 519.722);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(460.345, 462.345, 639.516, 641.516);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(607.846, 609.846, 583.991, 585.991);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(607.846, 609.846, 684.476, 686.476);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(625.623, 627.623, 602.774, 604.774);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(289.325, 291.325, 455.243, 457.243);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(207.785, 209.785, 222.762, 224.762);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(159.658, 161.658, 254.197, 256.197);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(650.816, 652.816, 809.48, 811.48);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(685.012, 687.012, 795.932, 797.932);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(751.112, 753.112, 643.132, 645.132);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(751.112, 753.112, 608.903, 610.903);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(320.184, 322.184, 377.132, 379.132);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(336.233, 338.233, 382.124, 384.124);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(153.571, 155.571, 391.657, 393.657);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(405.396, 407.396, 745.874, 747.874);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(460.345, 462.345, 727.442, 729.442);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(551.846, 553.846, 527.991, 529.991);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(669.714, 671.714, 583.991, 585.991);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(171.168, 221.168, 258.197, 308.197);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(110.328, 160.328, 266.708, 316.708);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(217.18, 267.18, 109.481, 159.481);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(632.075, 682.075, 858.531, 908.531);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(689.012, 739.012, 813.48, 863.48);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(755.112, 805.112, 647.132, 697.132);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(786.403, 836.403, 560.258, 610.258);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(261.651, 311.651, 247.06, 297.06);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(304.164, 354.164, 322.708, 372.708);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(70, 120, 325.132, 375.132);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(353.92, 403.92, 770.169, 820.169);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(464.345, 514.345, 749.874, 799.874);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(555.846, 605.846, 531.991, 581.991);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(696.038, 746.038, 531.991, 581.991);\n    rs.push_back(rect);\n\n    es.push_back(std::make_pair(0, 1));\n    es.push_back(std::make_pair(0, 22));\n    es.push_back(std::make_pair(1, 23));\n    es.push_back(std::make_pair(1, 24));\n    es.push_back(std::make_pair(2, 3));\n    es.push_back(std::make_pair(2, 25));\n    es.push_back(std::make_pair(3, 4));\n    es.push_back(std::make_pair(3, 26));\n    es.push_back(std::make_pair(3, 27));\n    es.push_back(std::make_pair(4, 28));\n    es.push_back(std::make_pair(5, 6));\n    es.push_back(std::make_pair(5, 18));\n    es.push_back(std::make_pair(6, 7));\n    es.push_back(std::make_pair(6, 19));\n    es.push_back(std::make_pair(6, 20));\n    es.push_back(std::make_pair(7, 21));\n    es.push_back(std::make_pair(8, 17));\n    es.push_back(std::make_pair(9, 31));\n    es.push_back(std::make_pair(10, 11));\n    es.push_back(std::make_pair(10, 12));\n    es.push_back(std::make_pair(10, 13));\n    es.push_back(std::make_pair(10, 14));\n    es.push_back(std::make_pair(10, 15));\n    es.push_back(std::make_pair(10, 22));\n    es.push_back(std::make_pair(10, 23));\n    es.push_back(std::make_pair(11, 12));\n    es.push_back(std::make_pair(11, 25));\n    es.push_back(std::make_pair(11, 26));\n    es.push_back(std::make_pair(12, 27));\n    es.push_back(std::make_pair(12, 28));\n    es.push_back(std::make_pair(13, 14));\n    es.push_back(std::make_pair(13, 18));\n    es.push_back(std::make_pair(13, 19));\n    es.push_back(std::make_pair(14, 20));\n    es.push_back(std::make_pair(14, 21));\n    es.push_back(std::make_pair(15, 24));\n    es.push_back(std::make_pair(16, 17));\n    es.push_back(std::make_pair(16, 36));\n    es.push_back(std::make_pair(17, 29));\n    es.push_back(std::make_pair(17, 30));\n    es.push_back(std::make_pair(18, 32));\n    es.push_back(std::make_pair(19, 33));\n    es.push_back(std::make_pair(20, 34));\n    es.push_back(std::make_pair(21, 35));\n    es.push_back(std::make_pair(22, 36));\n    es.push_back(std::make_pair(23, 37));\n    es.push_back(std::make_pair(24, 38));\n    es.push_back(std::make_pair(25, 39));\n    es.push_back(std::make_pair(26, 40));\n    es.push_back(std::make_pair(27, 41));\n    es.push_back(std::make_pair(28, 42));\n    es.push_back(std::make_pair(31, 36));\n    es.push_back(std::make_pair(32, 33));\n    es.push_back(std::make_pair(34, 35));\n    es.push_back(std::make_pair(36, 37));\n    es.push_back(std::make_pair(39, 40));\n    es.push_back(std::make_pair(41, 42));\n\n    double padding = 6;\n    ConstrainedFDLayout alg(rs, es, defaultEdgeLength, eLengths);\n    alg.setAvoidNodeOverlaps(true);\n    RootCluster *cluster140389150311456 = new RootCluster();\n    cluster140389150311456->addChildNode(0);\n    cluster140389150311456->addChildNode(1);\n    cluster140389150311456->addChildNode(2);\n    cluster140389150311456->addChildNode(3);\n    cluster140389150311456->addChildNode(4);\n    cluster140389150311456->addChildNode(5);\n    cluster140389150311456->addChildNode(6);\n    cluster140389150311456->addChildNode(7);\n    cluster140389150311456->addChildNode(8);\n    cluster140389150311456->addChildNode(9);\n    cluster140389150311456->addChildNode(10);\n    cluster140389150311456->addChildNode(11);\n    cluster140389150311456->addChildNode(12);\n    cluster140389150311456->addChildNode(13);\n    cluster140389150311456->addChildNode(14);\n    cluster140389150311456->addChildNode(15);\n    cluster140389150311456->addChildNode(16);\n    cluster140389150311456->addChildNode(17);\n    cluster140389150311456->addChildNode(18);\n    cluster140389150311456->addChildNode(19);\n    cluster140389150311456->addChildNode(20);\n    cluster140389150311456->addChildNode(21);\n    cluster140389150311456->addChildNode(22);\n    cluster140389150311456->addChildNode(23);\n    cluster140389150311456->addChildNode(24);\n    cluster140389150311456->addChildNode(25);\n    cluster140389150311456->addChildNode(26);\n    cluster140389150311456->addChildNode(27);\n    cluster140389150311456->addChildNode(28);\n    RectangularCluster *cluster140389152494880 = new RectangularCluster();\n    cluster140389152494880->setPadding(padding);\n    cluster140389152494880->addChildNode(36);\n    cluster140389150311456->addChildCluster(cluster140389152494880);\n    RectangularCluster *cluster140389150048048 = new RectangularCluster();\n    cluster140389150048048->setPadding(padding);\n    cluster140389150048048->addChildNode(38);\n    cluster140389150048048->addChildNode(37);\n    cluster140389150311456->addChildCluster(cluster140389150048048);\n    RectangularCluster *cluster140389150180400 = new RectangularCluster();\n    cluster140389150180400->setPadding(padding);\n    cluster140389150180400->addChildNode(30);\n    cluster140389150180400->addChildNode(29);\n    cluster140389150311456->addChildCluster(cluster140389150180400);\n    RectangularCluster *cluster140389150298288 = new RectangularCluster();\n    cluster140389150298288->setPadding(padding);\n    cluster140389150298288->addChildNode(39);\n    cluster140389150311456->addChildCluster(cluster140389150298288);\n    RectangularCluster *cluster140389150179600 = new RectangularCluster();\n    cluster140389150179600->setPadding(padding);\n    cluster140389150179600->addChildNode(41);\n    cluster140389150179600->addChildNode(40);\n    cluster140389150311456->addChildCluster(cluster140389150179600);\n    RectangularCluster *cluster140389150131760 = new RectangularCluster();\n    cluster140389150131760->setPadding(padding);\n    cluster140389150131760->addChildNode(42);\n    cluster140389150311456->addChildCluster(cluster140389150131760);\n    RectangularCluster *cluster140389150091712 = new RectangularCluster();\n    cluster140389150091712->setPadding(padding);\n    cluster140389150091712->addChildNode(32);\n    cluster140389150311456->addChildCluster(cluster140389150091712);\n    RectangularCluster *cluster140389152581264 = new RectangularCluster();\n    cluster140389152581264->setPadding(padding);\n    cluster140389152581264->addChildNode(34);\n    cluster140389152581264->addChildNode(33);\n    cluster140389150311456->addChildCluster(cluster140389152581264);\n    RectangularCluster *cluster140389144224352 = new RectangularCluster();\n    cluster140389144224352->setPadding(padding);\n    cluster140389144224352->addChildNode(35);\n    cluster140389150311456->addChildCluster(cluster140389144224352);\n    RectangularCluster *cluster140389144198304 = new RectangularCluster();\n    cluster140389144198304->setPadding(padding);\n    cluster140389144198304->addChildNode(30);\n    cluster140389144198304->addChildNode(29);\n    cluster140389150311456->addChildCluster(cluster140389144198304);\n    RectangularCluster *cluster140389144177184 = new RectangularCluster();\n    cluster140389144177184->setPadding(padding);\n    cluster140389144177184->addChildNode(31);\n    cluster140389150311456->addChildCluster(cluster140389144177184);\n    RectangularCluster *cluster140389144168944 = new RectangularCluster();\n    cluster140389144168944->setPadding(padding);\n    cluster140389144168944->addChildNode(36);\n    cluster140389144168944->addChildNode(37);\n    cluster140389150311456->addChildCluster(cluster140389144168944);\n    RectangularCluster *cluster140389144228288 = new RectangularCluster();\n    cluster140389144228288->setPadding(padding);\n    cluster140389144228288->addChildNode(39);\n    cluster140389144228288->addChildNode(40);\n    cluster140389150311456->addChildCluster(cluster140389144228288);\n    RectangularCluster *cluster140389144244064 = new RectangularCluster();\n    cluster140389144228288->setPadding(padding);\n    cluster140389144244064->addChildNode(42);\n    cluster140389144244064->addChildNode(41);\n    cluster140389150311456->addChildCluster(cluster140389144244064);\n    RectangularCluster *cluster140389144206000 = new RectangularCluster();\n    cluster140389144206000->setPadding(padding);\n    cluster140389144206000->addChildNode(32);\n    cluster140389144206000->addChildNode(33);\n    cluster140389150311456->addChildCluster(cluster140389144206000);\n    RectangularCluster *cluster140389144175920 = new RectangularCluster();\n    cluster140389144175920->setPadding(padding);\n    cluster140389144175920->addChildNode(35);\n    cluster140389144175920->addChildNode(34);\n    cluster140389150311456->addChildCluster(cluster140389144175920);\n    RectangularCluster *cluster140389144214752 = new RectangularCluster();\n    cluster140389144214752->setPadding(padding);\n    cluster140389144214752->addChildNode(38);\n    cluster140389150311456->addChildCluster(cluster140389144214752);\n    alg.setClusterHierarchy(cluster140389150311456);\n    alg.setConstraints(ccs);\n\n    UnsatisfiableConstraintInfos unsatisfiableX, unsatisfiableY;\n    alg.setUnsatisfiableConstraintInfo(&unsatisfiableX, &unsatisfiableY);\n    \n    //alg.makeFeasible();\n    alg.run();\n    //alg.outputInstanceToSVG(\"overlappingClusters01\");\n\n    for (size_t i = 0; i < unsatisfiableX.size(); ++i)\n    {\n\tprintf(\"%s\\n\", unsatisfiableX[i]->toString().c_str());\n    }\n    for (size_t i = 0; i < unsatisfiableY.size(); ++i)\n    {\n\tprintf(\"%s\\n\", unsatisfiableY[i]->toString().c_str());\n    }\n    alg.freeAssociatedObjects();\n    return (unsatisfiableX.empty() && unsatisfiableY.empty()) ? 0 : 1;\n};\n"
  },
  {
    "path": "cola/libcola/tests/overlappingClusters02.cpp",
    "content": "// Based on Euler Diagram generation example discussed with Aidan Delaney. \n//\n//              B\n//             +-----------------------------+\n//  A          |             2       C       |\n// +-----------+----------------+   +---+    |\n// |           |     1          |   | 0 |    |\n// |           |                |   +---+    |\n// |     3     +----------------+------------+\n// |                            |\n// |                            |    4\n// +----------------------------+\n//\n\n#include <vector>\n#include <utility>\n#include <cstdlib>\n#include \"libcola/cola.h\"\nusing namespace cola;\nint main(void) {\n    CompoundConstraints ccs;\n    std::vector<Edge> es;\n    EdgeLengths eLengths;\n    double defaultEdgeLength=10;\n    std::vector<vpsc::Rectangle*> rs;\n    vpsc::Rectangle *rect = nullptr;\n\n    double width = 5;\n    double height = 5;\n    double pos = 0;\n\n    size_t nodes = 5;\n    for (size_t i = 0; i < nodes; ++i)\n    {\n        rect = new vpsc::Rectangle(pos, pos +width, pos, pos +height);\n        rs.push_back(rect);\n\n\t// XXX randomness is needed because COLA doesn't currently untangle\n\t// the graph properly if all the nodes begin at the same position.\n        pos += (rand() % 10) - 5;\n    }\n\n    // Euler dual graph (optional)\n    es.push_back(std::make_pair(2, 4));\n    es.push_back(std::make_pair(3, 4));\n    es.push_back(std::make_pair(1, 3));\n    es.push_back(std::make_pair(2, 1));\n    es.push_back(std::make_pair(2, 0));\n    \n    // Padding around the inside of clusters.\n    double padding = 3;\n\n    ConstrainedFDLayout alg(rs, es, defaultEdgeLength, eLengths);\n    alg.setAvoidNodeOverlaps(true);\n    RootCluster *rootCluster = new RootCluster();\n\n    // A contains 1, 3\n    RectangularCluster *clusterA = new RectangularCluster();\n    clusterA->setPadding(padding);\n    clusterA->addChildNode(1);\n    clusterA->addChildNode(3);\n\n    // C contains 0\n    RectangularCluster *clusterC = new RectangularCluster();\n    clusterC->setPadding(padding);\n    clusterC->addChildNode(0);\n\n    // B contains 1, 2, C\n    RectangularCluster *clusterB = new RectangularCluster();\n    clusterB->setPadding(padding);\n    clusterB->addChildNode(1);\n    clusterB->addChildNode(2);\n    clusterB->addChildCluster(clusterC);\n\n    // node 4 is in the empty set.\n\n    rootCluster->addChildCluster(clusterA);\n    rootCluster->addChildCluster(clusterB);\n\n    alg.setConstraints(ccs);\n\n    UnsatisfiableConstraintInfos unsatisfiableX, unsatisfiableY;\n    alg.setUnsatisfiableConstraintInfo(&unsatisfiableX, &unsatisfiableY);\n    \n    alg.setClusterHierarchy(rootCluster);\n    //alg.makeFeasible();\n    alg.run();\n    alg.outputInstanceToSVG(\"overlappingClusters02\");\n    \n    for (size_t i = 0; i < unsatisfiableX.size(); ++i)\n    {\n\tprintf(\"%s\\n\", unsatisfiableX[i]->toString().c_str());\n    }\n    for (size_t i = 0; i < unsatisfiableY.size(); ++i)\n    {\n\tprintf(\"%s\\n\", unsatisfiableY[i]->toString().c_str());\n    }\n    alg.freeAssociatedObjects();\n    return (unsatisfiableX.empty() && unsatisfiableY.empty()) ? 0 : 1;\n};\n"
  },
  {
    "path": "cola/libcola/tests/overlappingClusters04.cpp",
    "content": "// From Aidan Delaney: a_b_ab_abc.json.svg \n// Regression test for SEGFAULT caused by specifing an invalid node index 7\n// in cluster description.\n#include <vector>\n#include <utility>\n#include \"libcola/cola.h\"\nusing namespace cola;\nint main(void) {\n    CompoundConstraints ccs;\n    std::vector<Edge> es;\n    EdgeLengths eLengths;\n    double defaultEdgeLength=10;\n    std::vector<vpsc::Rectangle*> rs;\n    vpsc::Rectangle *rect = nullptr;\n\n    rect = new vpsc::Rectangle(0, 5, 0, 5);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(-2, 3, -2, 3);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(-1, 4, -1, 4);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(1, 6, 1, 6);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(1, 6, 1, 6);\n    rs.push_back(rect);\n\n\n    ConstrainedFDLayout alg(rs, es, defaultEdgeLength, eLengths);\n    alg.setAvoidNodeOverlaps(true);\n\n    RootCluster *cluster33771480 = new RootCluster();\n    RectangularCluster *cluster33771952 = new RectangularCluster();\n    cluster33771952->setPadding(Box(2));\n    cluster33771952->addChildNode(1);\n    cluster33771952->addChildNode(3);\n    cluster33771952->addChildNode(7);\n    cluster33771480->addChildCluster(cluster33771952);\n    \n    RectangularCluster *cluster33772496 = new RectangularCluster();\n    cluster33772496->setPadding(Box(2));\n    cluster33772496->addChildNode(2);\n    cluster33772496->addChildNode(3);\n    cluster33772496->addChildNode(7);\n    cluster33771480->addChildCluster(cluster33772496);\n    \n    RectangularCluster *cluster33773040 = new RectangularCluster();\n    cluster33773040->setPadding(Box(2));\n    cluster33773040->addChildNode(7);\n    cluster33771480->addChildCluster(cluster33773040);\n    \n    alg.setClusterHierarchy(cluster33771480);\n    \n    alg.setConstraints(ccs);\n    alg.makeFeasible();\n    //alg.outputInstanceToSVG(\"overlappingCLusters04\");\n    alg.freeAssociatedObjects();\n};\n"
  },
  {
    "path": "cola/libcola/tests/page_bounds.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libcola - A library providing force-directed network layout using the \n *           stress-majorization method subject to separation constraints.\n *\n * Copyright (C) 2006-2008  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library in the file LICENSE; if not, \n * write to the Free Software Foundation, Inc., 59 Temple Place, \n * Suite 330, Boston, MA  02111-1307  USA\n *\n*/\n\n/**\n * \\file page_bounds.cpp\n *\n * test/example showing the use of page boundary constraints\n */\n#include<iostream>\n#include<vector>\n#include <cmath>\n#include <time.h>\n#include <valarray>\n\n#include \"graphlayouttest.h\"\n\nvector<Edge> random_graph(unsigned n) {\n\tvector<Edge> edges;\n\tfor(unsigned i=1;i<n;i++) {\n        edges.push_back(make_pair(i-1,i));\n    }\n\tfor(unsigned i=0;i<n;i++) {\n\t\tfor(unsigned j=i+1;j<n;j++) {\n\t\t\tdouble r=(double)rand()/(double)RAND_MAX;\n\t\t\tif(r < 1./(double)n) {\n\t\t\t\tedges.push_back(make_pair(i,j));\n\t\t\t}\n\t\t}\n\t}\n\n\treturn edges;\n}\nint main() {\n    unsigned V=30;\n    CompoundConstraints ccs;\n    vector<Edge> es = random_graph(V);\n    double defaultEdgeLength=40;\n    cola::PageBoundaryConstraints* pbc =\n        new cola::PageBoundaryConstraints(0,200,0,200,100);\n\n    double w=2.0, h=2.0;\n    for(unsigned i=0;i<V;i++) {\n        pbc->addShape(i, w/2, h/2);\n    }\n    ccs.push_back(pbc);\n\n    cout << \"V=\"<<V<<endl;\n    double width=1000;\n    double height=1000;\n    //srand(time(nullptr));\n    vector<pair<double,double> > startpos(V);\n    for(unsigned i=0;i<V;i++) {\n        double x=getRand(width), y=getRand(height);\n        startpos[i]=make_pair(x,y);\n    }\n\n    /*void run_test(\n        vector<pair<double,double> > const &startpos,\n        vector<Edge> const &es, \n        const double defaultEdgeLength,\n        CompoundConstraints &cx,\n        CompoundConstraints &cy,\n        const SolverType s, \n        const bool constrained,\n        const char *fname,\n        const char *testdesc) {\n    */\n    \n/*\n    run_test(startpos,es,defaultEdgeLength,cx,cy,CG,false,\"random\",\"cg\");\n    run_test(startpos,es,defaultEdgeLength,cx,cy,IP,false,\"random\", \"ip\");\n    run_test(startpos,es,defaultEdgeLength,cx,cy,UGP,false,\"random\", \"ugp\");\n    run_test(startpos,es,defaultEdgeLength,cx,cy,SGP,false,\"random\", \"sgp\");\n    run_test(startpos,es,defaultEdgeLength,cx,cy,IP,true,\"random\", \"cip\");\n    run_test(startpos,es,defaultEdgeLength,cx,cy,SGP,true,\"random\", \"csgp\");\n    */\n    run_test(startpos,es,defaultEdgeLength,ccs,UGP,true,\"random\", \"cugp\");\n    return 0;\n}\n// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=4:softtabstop=4:textwidth=99 :\n"
  },
  {
    "path": "cola/libcola/tests/planar.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libcola - A library providing force-directed network layout using the \n *           stress-majorization method subject to separation constraints.\n *\n * Copyright (C) 2006-2008  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library in the file LICENSE; if not, \n * write to the Free Software Foundation, Inc., 59 Temple Place, \n * Suite 330, Boston, MA  02111-1307  USA\n *\n*/\n\n/** \\file topology.cpp\n *\n * tests topology preserving layout.  graph is a triangle.\n * We have a fourth disconnected node starting inside the triangle.\n * We give the disconnected node a desired position outside the triangle\n * and begin layout.  Layout should converge to near zero stress as all\n * edges should be able to reach their desired lengths, and disconnected\n * node should still be inside the triangle at the end.\n */\n/*\n* Authors:\n*   Tim Dwyer <tgdwyer@gmail.com>\n*/\n#include <iostream>\n#include <iomanip>\n#include <fstream>\n\n#include <vector>\n#include <valarray>\n#include <algorithm>\n#include <float.h>\n#include <libcola/cola.h>\n#include <libtopology/topology_graph.h>\n#include \"graphlayouttest.h\"\nusing namespace std;\nusing namespace cola;\n\nstruct TestCase {\n    topology::Nodes vs;\n    topology::Edges tes;\n    topology::EdgePoints ps;\n    vector<vpsc::Rectangle*> rs;\n    vector<Edge> es;\n    void addNode(double minX, double minY, double w, double h) {\n        vpsc::Rectangle* r = new Rectangle(minX, minX+w, minY, minY+h);\n        rs.push_back(r);\n        topology::Node *v = new topology::Node(vs.size(), r);\n        vs.push_back(v);\n    }\n    void addToPath(unsigned vID, topology::EdgePoint::RectIntersect i) {\n        ps.push_back(new topology::EdgePoint(vs[vID],i));\n    }\n    void addEdge(double l) {\n        tes.push_back(new topology::Edge(l, ps));\n        es.push_back(make_pair(ps[0]->node->id,ps[ps.size()-1]->node->id));\n        ps.clear();\n    }\n    ~TestCase() {\n        for_each(rs.begin(),rs.end(),delete_object());\n        for_each(tes.begin(),tes.end(),delete_object());\n        for_each(vs.begin(),vs.end(),delete_object());\n    }\n};\nvoid writeFile(const topology::Nodes& vs, const topology::Edges& es, const char *outputFileName) {\n    const unsigned n=vs.size();\n    vector<cola::Edge> cedges;\n\n    for(unsigned i=0;i<es.size();i++) {\n        cedges.push_back(make_pair(1,2));\n    }\n\n    vector<straightener::Route*> routes;\n    for(topology::Edges::const_iterator e=es.begin();e!=es.end();++e) {\n        routes.push_back((*e)->getRoute());\n    }\n\n    vector<string> labels(n);\n    for(unsigned i=0;i<n;++i) {\n        stringstream ss;\n        ss << i;\n        labels[i]=ss.str();\n    }\n\n    vector<vpsc::Rectangle*> rs;\n    for(topology::Nodes::const_iterator i=vs.begin();i!=vs.end();++i) {\n\t    rs.push_back((*i)->rect);\n    }\n    OutputFile of(rs,cedges,nullptr,outputFileName,true,false);\n    of.setLabels(labels);\n    of.routes=&routes;\n    of.generate();\n\n    for_each(routes.begin(),routes.end(),delete_object());\n}\nstruct Test : TestConvergence {\n    Test(const double d,const unsigned i,topology::Nodes& vs, topology::Edges& es) : TestConvergence(d,i), vs(vs), es(es) {}\n    bool operator()(const double new_stress, valarray<double> & X, valarray<double> & Y) {\n        cout << \"stress=\"<<new_stress<<\" iteration=\"<<iterations<<endl;\n        stringstream ss;\n        ss << \"planar-\" << setfill('0') << setw(3) << ++iterations << \".svg\";\n        writeFile(vs,es,ss.str().c_str());\n        if(iterations<100) {\n            return false;\n        }\n        return true;\n        return TestConvergence::operator()(new_stress,X,Y);\n    }\n    double lastStress;\n    topology::Nodes& vs;\n    topology::Edges& es;\n};\nvoid test() {\n    TestCase t;\nt.addNode(144.000000,511.000000,8.000000,8.000000);\nt.addNode(413.000000,155.000000,8.000000,8.000000);\nt.addNode(437.000000,169.000000,8.000000,8.000000);\nt.addNode(436.000000,122.000000,8.000000,8.000000);\nt.addNode(460.000000,150.000000,8.000000,8.000000);\nt.addNode(466.000000,178.000000,8.000000,8.000000);\nt.addNode(469.000000,198.000000,8.000000,8.000000);\nt.addNode(378.000000,332.000000,8.000000,8.000000);\nt.addNode(368.000000,315.000000,8.000000,8.000000);\nt.addNode(332.000000,341.000000,8.000000,8.000000);\nt.addNode(282.000000,374.000000,8.000000,8.000000);\nt.addNode(329.000000,364.000000,8.000000,8.000000);\nt.addNode(346.000000,390.000000,8.000000,8.000000);\nt.addNode(375.000000,402.000000,8.000000,8.000000);\nt.addNode(357.000000,438.000000,8.000000,8.000000);\nt.addNode(382.000000,422.000000,8.000000,8.000000);\nt.addNode(453.000000,280.000000,8.000000,8.000000);\nt.addNode(452.000000,258.000000,8.000000,8.000000);\nt.addNode(530.000000,449.000000,8.000000,8.000000);\nt.addNode(576.000000,431.000000,8.000000,8.000000);\nt.addNode(577.000000,408.000000,8.000000,8.000000);\nt.addNode(606.000000,438.000000,8.000000,8.000000);\nt.addNode(624.000000,467.000000,8.000000,8.000000);\nt.addNode(620.000000,492.000000,8.000000,8.000000);\nt.addNode(681.000000,492.000000,8.000000,8.000000);\nt.addNode(729.000000,528.000000,8.000000,8.000000);\nt.addNode(765.000000,515.000000,8.000000,8.000000);\nt.addNode(765.000000,492.000000,8.000000,8.000000);\nt.addNode(858.000000,538.000000,8.000000,8.000000);\nt.addNode(2.000000,544.000000,8.000000,8.000000);\nt.addToPath(28,(topology::EdgePoint::RectIntersect)4);\nt.addToPath(27,(topology::EdgePoint::RectIntersect)4);\nt.addEdge(70.000000);\nt.addToPath(28,(topology::EdgePoint::RectIntersect)4);\nt.addToPath(26,(topology::EdgePoint::RectIntersect)4);\nt.addEdge(70.000000);\nt.addToPath(25,(topology::EdgePoint::RectIntersect)4);\nt.addToPath(28,(topology::EdgePoint::RectIntersect)4);\nt.addEdge(70.000000);\nt.addToPath(25,(topology::EdgePoint::RectIntersect)4);\nt.addToPath(29,(topology::EdgePoint::RectIntersect)4);\nt.addEdge(70.000000);\nt.addToPath(17,(topology::EdgePoint::RectIntersect)4);\nt.addToPath(24,(topology::EdgePoint::RectIntersect)4);\nt.addEdge(70.000000);\nt.addToPath(16,(topology::EdgePoint::RectIntersect)4);\n//t.addToPath(20,(topology::EdgePoint::RectIntersect)1);\nt.addToPath(24,(topology::EdgePoint::RectIntersect)4);\nt.addEdge(70.000000);\nt.addToPath(16,(topology::EdgePoint::RectIntersect)4);\nt.addToPath(7,(topology::EdgePoint::RectIntersect)4);\nt.addEdge(70.000000);\nt.addToPath(24,(topology::EdgePoint::RectIntersect)4);\nt.addToPath(25,(topology::EdgePoint::RectIntersect)4);\nt.addEdge(70.000000);\nt.addToPath(22,(topology::EdgePoint::RectIntersect)4);\nt.addToPath(24,(topology::EdgePoint::RectIntersect)4);\nt.addEdge(70.000000);\nt.addToPath(22,(topology::EdgePoint::RectIntersect)4);\nt.addToPath(0,(topology::EdgePoint::RectIntersect)4);\nt.addEdge(70.000000);\nt.addToPath(22,(topology::EdgePoint::RectIntersect)4);\nt.addToPath(23,(topology::EdgePoint::RectIntersect)4);\nt.addEdge(70.000000);\nt.addToPath(22,(topology::EdgePoint::RectIntersect)4);\nt.addToPath(18,(topology::EdgePoint::RectIntersect)4);\nt.addEdge(70.000000);\nt.addToPath(21,(topology::EdgePoint::RectIntersect)4);\nt.addToPath(20,(topology::EdgePoint::RectIntersect)4);\nt.addEdge(70.000000);\nt.addToPath(20,(topology::EdgePoint::RectIntersect)4);\nt.addToPath(19,(topology::EdgePoint::RectIntersect)4);\nt.addEdge(70.000000);\nt.addToPath(18,(topology::EdgePoint::RectIntersect)4);\nt.addToPath(20,(topology::EdgePoint::RectIntersect)4);\nt.addEdge(70.000000);\nt.addToPath(18,(topology::EdgePoint::RectIntersect)4);\nt.addToPath(16,(topology::EdgePoint::RectIntersect)4);\nt.addEdge(70.000000);\nt.addToPath(14,(topology::EdgePoint::RectIntersect)4);\nt.addToPath(18,(topology::EdgePoint::RectIntersect)4);\nt.addEdge(70.000000);\nt.addToPath(13,(topology::EdgePoint::RectIntersect)4);\nt.addToPath(14,(topology::EdgePoint::RectIntersect)4);\nt.addEdge(70.000000);\nt.addToPath(15,(topology::EdgePoint::RectIntersect)4);\nt.addToPath(14,(topology::EdgePoint::RectIntersect)4);\nt.addEdge(70.000000);\nt.addToPath(12,(topology::EdgePoint::RectIntersect)4);\nt.addToPath(13,(topology::EdgePoint::RectIntersect)4);\nt.addEdge(70.000000);\nt.addToPath(12,(topology::EdgePoint::RectIntersect)4);\nt.addToPath(10,(topology::EdgePoint::RectIntersect)4);\nt.addEdge(70.000000);\nt.addToPath(11,(topology::EdgePoint::RectIntersect)4);\nt.addToPath(12,(topology::EdgePoint::RectIntersect)4);\nt.addEdge(70.000000);\nt.addToPath(10,(topology::EdgePoint::RectIntersect)4);\nt.addToPath(11,(topology::EdgePoint::RectIntersect)4);\nt.addEdge(70.000000);\nt.addToPath(9,(topology::EdgePoint::RectIntersect)4);\nt.addToPath(13,(topology::EdgePoint::RectIntersect)4);\nt.addEdge(70.000000);\nt.addToPath(9,(topology::EdgePoint::RectIntersect)4);\nt.addToPath(10,(topology::EdgePoint::RectIntersect)4);\nt.addEdge(70.000000);\nt.addToPath(6,(topology::EdgePoint::RectIntersect)4);\n//t.addToPath(8,(topology::EdgePoint::RectIntersect)2);\nt.addToPath(9,(topology::EdgePoint::RectIntersect)4);\nt.addEdge(70.000000);\nt.addToPath(6,(topology::EdgePoint::RectIntersect)4);\nt.addToPath(7,(topology::EdgePoint::RectIntersect)4);\nt.addEdge(70.000000);\nt.addToPath(8,(topology::EdgePoint::RectIntersect)4);\nt.addToPath(7,(topology::EdgePoint::RectIntersect)4);\nt.addEdge(70.000000);\nt.addToPath(6,(topology::EdgePoint::RectIntersect)4);\nt.addToPath(25,(topology::EdgePoint::RectIntersect)4);\nt.addEdge(70.000000);\nt.addToPath(5,(topology::EdgePoint::RectIntersect)4);\nt.addToPath(10,(topology::EdgePoint::RectIntersect)4);\nt.addEdge(70.000000);\nt.addToPath(5,(topology::EdgePoint::RectIntersect)4);\nt.addToPath(29,(topology::EdgePoint::RectIntersect)4);\nt.addEdge(70.000000);\nt.addToPath(29,(topology::EdgePoint::RectIntersect)4);\nt.addToPath(1,(topology::EdgePoint::RectIntersect)4);\nt.addEdge(70.000000);\nt.addToPath(3,(topology::EdgePoint::RectIntersect)4);\nt.addToPath(2,(topology::EdgePoint::RectIntersect)4);\nt.addEdge(70.000000);\nt.addToPath(5,(topology::EdgePoint::RectIntersect)4);\nt.addToPath(6,(topology::EdgePoint::RectIntersect)4);\nt.addEdge(70.000000);\nt.addToPath(4,(topology::EdgePoint::RectIntersect)4);\nt.addToPath(5,(topology::EdgePoint::RectIntersect)4);\nt.addEdge(70.000000);\nt.addToPath(3,(topology::EdgePoint::RectIntersect)4);\nt.addToPath(4,(topology::EdgePoint::RectIntersect)4);\nt.addEdge(70.000000);\nt.addToPath(29,(topology::EdgePoint::RectIntersect)4);\n//t.addToPath(1,(topology::EdgePoint::RectIntersect)2);\nt.addToPath(3,(topology::EdgePoint::RectIntersect)4);\nt.addEdge(70.000000);\n    writeFile(t.vs,t.tes,\"planar-000.svg\");\n    Test test(0.00001,100,t.vs,t.tes);\n    ConstrainedFDLayout alg(t.rs,t.es,70.0,nullptr,test,nullptr);\n    alg.setTopology(&t.vs,&t.tes);\n    alg.run(true,true);\n    double finalStress=alg.computeStress();\n    printf(\"finalStress=%f\\n\",finalStress);\n\n    //assert(finalStress<1e-5);\n}\nint main() {\n    test();\n    return 0;\n}\n// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=4:softtabstop=4:textwidth=80 :\n"
  },
  {
    "path": "cola/libcola/tests/random_graph.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libcola - A library providing force-directed network layout using the \n *           stress-majorization method subject to separation constraints.\n *\n * Copyright (C) 2006-2008  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library in the file LICENSE; if not, \n * write to the Free Software Foundation, Inc., 59 Temple Place, \n * Suite 330, Boston, MA  02111-1307  USA\n *\n*/\n\n#include<iostream>\n#include<vector>\n#include <cmath>\n#include <time.h>\n#include <valarray>\n\n#include \"graphlayouttest.h\"\n\nvector<Edge> random_graph(unsigned n) {\n\tvector<Edge> edges;\n\tfor(unsigned i=1;i<n;i++) {\n        edges.push_back(make_pair(i-1,i));\n    }\n\tfor(unsigned i=0;i<n;i++) {\n\t\tfor(unsigned j=i+1;j<n;j++) {\n\t\t\tdouble r=(double)rand()/(double)RAND_MAX;\n\t\t\tif(r < 1./(double)n) {\n\t\t\t\tedges.push_back(make_pair(i,j));\n\t\t\t}\n\t\t}\n\t}\n\n\treturn edges;\n}\nint main() {\n    unsigned V=100;\n    CompoundConstraints ccs;\n    vector<Edge> es = random_graph(V);\n    double defaultEdgeLength=40;\n    for(unsigned i=0;i<es.size();i++) {\n        unsigned start=es[i].first, end=es[i].second;\n        ccs.push_back(\n            new SeparationConstraint(vpsc::YDIM, start,end,-10));\n    }\n\n    cout << \"V=\"<<V<<endl;\n    double width=1000;\n    double height=1000;\n    //srand(time(nullptr));\n    vector<pair<double,double> > startpos(V);\n    for(unsigned i=0;i<V;i++) {\n        double x=getRand(width), y=getRand(height);\n        startpos[i]=make_pair(x,y);\n    }\n\n    /*void run_test(\n        vector<pair<double,double> > const &startpos,\n        vector<Edge> const &es, \n        const double defaultEdgeLength,\n        CompoundConstraints &cx,\n        CompoundConstraints &cy,\n        const SolverType s, \n        const bool constrained,\n        const char *fname,\n        const char *testdesc) {\n    */\n    \n/*\n    run_test(startpos,es,defaultEdgeLength,cx,cy,CG,false,\"random\",\"cg\");\n    run_test(startpos,es,defaultEdgeLength,cx,cy,IP,false,\"random\", \"ip\");\n    run_test(startpos,es,defaultEdgeLength,cx,cy,UGP,false,\"random\", \"ugp\");\n    run_test(startpos,es,defaultEdgeLength,cx,cy,SGP,false,\"random\", \"sgp\");\n    run_test(startpos,es,defaultEdgeLength,cx,cy,IP,true,\"random\", \"cip\");\n    run_test(startpos,es,defaultEdgeLength,cx,cy,UGP,true,\"random\", \"cugp\");\n    run_test(startpos,es,defaultEdgeLength,cx,cy,SGP,true,\"random\", \"csgp\");\n    */\n\tvector<vpsc::Rectangle*> rs;\n\tfor(unsigned i=0;i<V;i++) {\n\t\tdouble x=getRand(width), y=getRand(height);\n\t\trs.push_back(new vpsc::Rectangle(x,x+5,y,y+5));\n\t}\n\tCheckProgress test(0.0001,200);\n    ConstrainedMajorizationLayout alg(rs,es,nullptr,defaultEdgeLength,\n            StandardEdgeLengths,&test);\n    //alg.setYConstraints(&cy);\n\talg.run();\n\tConstrainedFDLayout alg2(rs,es,defaultEdgeLength,\n            StandardEdgeLengths, &test);\n    //alg2.setYConstraints(&cy);\n\talg2.run();\n\tOutputFile output(rs,es,nullptr,\"random.pdf\");\n\toutput.generate();\n\tfor(unsigned i=0;i<V;i++) {\n\t\tdelete rs[i];\n\t}\n    return 0;\n}\n// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=4:softtabstop=4:textwidth=99 :\n"
  },
  {
    "path": "cola/libcola/tests/rectangularClusters01.cpp",
    "content": "#include <vector>\r\n#include <utility>\r\n#include \"libcola/cola.h\"\r\nusing namespace cola;\r\nint main(void) {\r\n    CompoundConstraints ccs;\r\n    std::vector<Edge> es;\r\n    EdgeLengths eLengths;\r\n    double defaultEdgeLength=1;\r\n    std::vector<vpsc::Rectangle*> rs;\r\n    vpsc::Rectangle *rect = nullptr;\r\n\r\n    rect = new vpsc::Rectangle(56.4457, 117.446, 954.77, 1043.77);\r\n    rs.push_back(rect);\r\n\r\n    rect = new vpsc::Rectangle(119.446, 127.446, 992.02, 1000.02);\r\n    rs.push_back(rect);\r\n\r\n    rect = new vpsc::Rectangle(119.446, 127.446, 1004.27, 1012.27);\r\n    rs.push_back(rect);\r\n\r\n    rect = new vpsc::Rectangle(119.446, 127.446, 1016.52, 1024.52);\r\n    rs.push_back(rect);\r\n\r\n    rect = new vpsc::Rectangle(46.4457, 54.4457, 1004.27, 1012.27);\r\n    rs.push_back(rect);\r\n\r\n    rect = new vpsc::Rectangle(2165.45, 2239.45, 976.562, 1065.56);\r\n    rs.push_back(rect);\r\n\r\n    rect = new vpsc::Rectangle(2155.45, 2163.45, 1026.06, 1034.06);\r\n    rs.push_back(rect);\r\n\r\n    rect = new vpsc::Rectangle(-106.554, 6.44565, 955.683, 1044.68);\r\n    rs.push_back(rect);\r\n\r\n    rect = new vpsc::Rectangle(8.44565, 16.4457, 1005.18, 1013.18);\r\n    rs.push_back(rect);\r\n\r\n    rect = new vpsc::Rectangle(331.446, 412.446, 1015.55, 1104.55);\r\n    rs.push_back(rect);\r\n\r\n    rect = new vpsc::Rectangle(414.446, 422.446, 1065.05, 1073.05);\r\n    rs.push_back(rect);\r\n\r\n    rect = new vpsc::Rectangle(356.112, 364.112, 1106.55, 1114.55);\r\n    rs.push_back(rect);\r\n\r\n    rect = new vpsc::Rectangle(339.779, 347.779, 1106.55, 1114.55);\r\n    rs.push_back(rect);\r\n\r\n    rect = new vpsc::Rectangle(321.446, 329.446, 1073.22, 1081.22);\r\n    rs.push_back(rect);\r\n\r\n    rect = new vpsc::Rectangle(321.446, 329.446, 1056.88, 1064.88);\r\n    rs.push_back(rect);\r\n\r\n    rect = new vpsc::Rectangle(477.446, 559.446, 948.569, 1037.57);\r\n    rs.push_back(rect);\r\n\r\n    rect = new vpsc::Rectangle(561.446, 569.446, 998.069, 1006.07);\r\n    rs.push_back(rect);\r\n\r\n    rect = new vpsc::Rectangle(503.946, 511.946, 1039.57, 1047.57);\r\n    rs.push_back(rect);\r\n\r\n    rect = new vpsc::Rectangle(467.446, 475.446, 998.069, 1006.07);\r\n    rs.push_back(rect);\r\n\r\n    rect = new vpsc::Rectangle(56.4457, 127.446, 863.77, 952.77);\r\n    rs.push_back(rect);\r\n\r\n    rect = new vpsc::Rectangle(129.446, 137.446, 913.27, 921.27);\r\n    rs.push_back(rect);\r\n\r\n    rect = new vpsc::Rectangle(46.4457, 54.4457, 913.27, 921.27);\r\n    rs.push_back(rect);\r\n\r\n    rect = new vpsc::Rectangle(177.446, 281.446, 922.444, 1011.44);\r\n    rs.push_back(rect);\r\n\r\n    rect = new vpsc::Rectangle(283.446, 291.446, 971.944, 979.944);\r\n    rs.push_back(rect);\r\n\r\n    rect = new vpsc::Rectangle(167.446, 175.446, 986.644, 994.644);\r\n    rs.push_back(rect);\r\n\r\n    rect = new vpsc::Rectangle(167.446, 175.446, 976.844, 984.844);\r\n    rs.push_back(rect);\r\n\r\n    rect = new vpsc::Rectangle(167.446, 175.446, 967.044, 975.044);\r\n    rs.push_back(rect);\r\n\r\n    rect = new vpsc::Rectangle(167.446, 175.446, 957.244, 965.244);\r\n    rs.push_back(rect);\r\n\r\n    rect = new vpsc::Rectangle(331.446, 427.446, 924.551, 1013.55);\r\n    rs.push_back(rect);\r\n\r\n    rect = new vpsc::Rectangle(429.446, 437.446, 974.051, 982.051);\r\n    rs.push_back(rect);\r\n\r\n    rect = new vpsc::Rectangle(321.446, 329.446, 974.051, 982.051);\r\n    rs.push_back(rect);\r\n\r\n    rect = new vpsc::Rectangle(609.446, 730.446, 936.692, 1025.69);\r\n    rs.push_back(rect);\r\n\r\n    rect = new vpsc::Rectangle(732.446, 740.446, 971.492, 979.492);\r\n    rs.push_back(rect);\r\n\r\n    rect = new vpsc::Rectangle(732.446, 740.446, 981.292, 989.292);\r\n    rs.push_back(rect);\r\n\r\n    rect = new vpsc::Rectangle(732.446, 740.446, 991.092, 999.092);\r\n    rs.push_back(rect);\r\n\r\n    rect = new vpsc::Rectangle(732.446, 740.446, 1000.89, 1008.89);\r\n    rs.push_back(rect);\r\n\r\n    rect = new vpsc::Rectangle(599.446, 607.446, 986.192, 994.192);\r\n    rs.push_back(rect);\r\n\r\n    rect = new vpsc::Rectangle(780.446, 846.446, 838.172, 932.172);\r\n    rs.push_back(rect);\r\n\r\n    rect = new vpsc::Rectangle(848.446, 856.446, 890.172, 898.172);\r\n    rs.push_back(rect);\r\n\r\n    rect = new vpsc::Rectangle(770.446, 778.446, 890.172, 898.172);\r\n    rs.push_back(rect);\r\n\r\n    rect = new vpsc::Rectangle(780.446, 846.446, 934.172, 1028.17);\r\n    rs.push_back(rect);\r\n\r\n    rect = new vpsc::Rectangle(848.446, 856.446, 986.172, 994.172);\r\n    rs.push_back(rect);\r\n\r\n    rect = new vpsc::Rectangle(770.446, 778.446, 986.172, 994.172);\r\n    rs.push_back(rect);\r\n\r\n    // rect-43\r\n    rect = new vpsc::Rectangle(941.446, 1155.45, 922.958, 1025.96);\r\n    rs.push_back(rect);\r\n\r\n    rect = new vpsc::Rectangle(1147.45, 1155.45, 979.458, 987.458);\r\n    rs.push_back(rect);\r\n\r\n    rect = new vpsc::Rectangle(941.446, 949.446, 998.358, 1006.36);\r\n    rs.push_back(rect);\r\n\r\n    rect = new vpsc::Rectangle(941.446, 949.446, 985.757, 993.757);\r\n    rs.push_back(rect);\r\n\r\n    rect = new vpsc::Rectangle(941.446, 949.446, 973.158, 981.158);\r\n    rs.push_back(rect);\r\n\r\n    rect = new vpsc::Rectangle(941.446, 949.446, 960.558, 968.558);\r\n    rs.push_back(rect);\r\n\r\n    rect = new vpsc::Rectangle(780.446, 846.446, 1030.17, 1124.17);\r\n    rs.push_back(rect);\r\n\r\n    rect = new vpsc::Rectangle(848.446, 856.446, 1082.17, 1090.17);\r\n    rs.push_back(rect);\r\n\r\n    rect = new vpsc::Rectangle(770.446, 778.446, 1082.17, 1090.17);\r\n    rs.push_back(rect);\r\n\r\n    rect = new vpsc::Rectangle(1195.45, 1263.45, 938.653, 1017.65);\r\n    rs.push_back(rect);\r\n\r\n    rect = new vpsc::Rectangle(1265.45, 1273.45, 983.153, 991.153);\r\n    rs.push_back(rect);\r\n\r\n    rect = new vpsc::Rectangle(1185.45, 1193.45, 989.653, 997.653);\r\n    rs.push_back(rect);\r\n\r\n    rect = new vpsc::Rectangle(1185.45, 1193.45, 976.653, 984.653);\r\n    rs.push_back(rect);\r\n\r\n    rect = new vpsc::Rectangle(1313.45, 1374.45, 934.988, 1013.99);\r\n    rs.push_back(rect);\r\n\r\n    rect = new vpsc::Rectangle(1376.45, 1384.45, 979.488, 987.488);\r\n    rs.push_back(rect);\r\n\r\n    rect = new vpsc::Rectangle(1303.45, 1311.45, 979.488, 987.488);\r\n    rs.push_back(rect);\r\n\r\n    rect = new vpsc::Rectangle(1586.45, 1660.45, 855.704, 944.704);\r\n    rs.push_back(rect);\r\n\r\n    rect = new vpsc::Rectangle(1576.45, 1584.45, 905.204, 913.204);\r\n    rs.push_back(rect);\r\n\r\n    rect = new vpsc::Rectangle(1424.45, 1536.45, 866.456, 945.456);\r\n    rs.push_back(rect);\r\n\r\n    rect = new vpsc::Rectangle(1538.45, 1546.45, 910.956, 918.956);\r\n    rs.push_back(rect);\r\n\r\n    rect = new vpsc::Rectangle(1414.45, 1422.45, 910.956, 918.956);\r\n    rs.push_back(rect);\r\n\r\n    rect = new vpsc::Rectangle(1445.45, 1515.45, 947.456, 1036.46);\r\n    rs.push_back(rect);\r\n\r\n    rect = new vpsc::Rectangle(1517.45, 1525.45, 996.956, 1004.96);\r\n    rs.push_back(rect);\r\n\r\n    rect = new vpsc::Rectangle(1471.95, 1479.95, 1038.46, 1046.46);\r\n    rs.push_back(rect);\r\n\r\n    rect = new vpsc::Rectangle(1435.45, 1443.45, 996.956, 1004.96);\r\n    rs.push_back(rect);\r\n\r\n    rect = new vpsc::Rectangle(1699.45, 1748.45, 970.163, 1059.16);\r\n    rs.push_back(rect);\r\n\r\n    rect = new vpsc::Rectangle(1750.45, 1758.45, 1019.66, 1027.66);\r\n    rs.push_back(rect);\r\n\r\n    rect = new vpsc::Rectangle(1689.45, 1697.45, 1027.83, 1035.83);\r\n    rs.push_back(rect);\r\n\r\n    rect = new vpsc::Rectangle(1689.45, 1697.45, 1011.5, 1019.5);\r\n    rs.push_back(rect);\r\n\r\n    rect = new vpsc::Rectangle(1811.45, 1898.45, 1010.04, 1099.04);\r\n    rs.push_back(rect);\r\n\r\n    rect = new vpsc::Rectangle(1900.45, 1908.45, 1059.54, 1067.54);\r\n    rs.push_back(rect);\r\n\r\n    rect = new vpsc::Rectangle(1801.45, 1809.45, 1067.7, 1075.7);\r\n    rs.push_back(rect);\r\n\r\n    rect = new vpsc::Rectangle(1801.45, 1809.45, 1051.37, 1059.37);\r\n    rs.push_back(rect);\r\n\r\n    rect = new vpsc::Rectangle(1699.45, 1761.45, 1061.16, 1134.16);\r\n    rs.push_back(rect);\r\n\r\n    rect = new vpsc::Rectangle(1763.45, 1771.45, 1102.66, 1110.66);\r\n    rs.push_back(rect);\r\n\r\n    rect = new vpsc::Rectangle(1689.45, 1697.45, 1102.66, 1110.66);\r\n    rs.push_back(rect);\r\n\r\n    rect = new vpsc::Rectangle(2053.45, 2115.45, 985.999, 1080);\r\n    rs.push_back(rect);\r\n\r\n    rect = new vpsc::Rectangle(2117.45, 2125.45, 1038, 1046);\r\n    rs.push_back(rect);\r\n\r\n    rect = new vpsc::Rectangle(2080.11, 2088.11, 1082, 1090);\r\n    rs.push_back(rect);\r\n\r\n    rect = new vpsc::Rectangle(2062.78, 2070.78, 1082, 1090);\r\n    rs.push_back(rect);\r\n\r\n    rect = new vpsc::Rectangle(2043.45, 2051.45, 1038, 1046);\r\n    rs.push_back(rect);\r\n\r\n    rect = new vpsc::Rectangle(1948.45, 2003.45, 996.147, 1090.15);\r\n    rs.push_back(rect);\r\n\r\n    rect = new vpsc::Rectangle(2005.45, 2013.45, 1048.15, 1056.15);\r\n    rs.push_back(rect);\r\n\r\n    rect = new vpsc::Rectangle(1975.11, 1983.11, 1092.15, 1100.15);\r\n    rs.push_back(rect);\r\n\r\n    rect = new vpsc::Rectangle(1957.78, 1965.78, 1092.15, 1100.15);\r\n    rs.push_back(rect);\r\n\r\n    rect = new vpsc::Rectangle(1938.45, 1946.45, 1048.15, 1056.15);\r\n    rs.push_back(rect);\r\n\r\n    rect = new vpsc::Rectangle(1565.45, 1649.45, 951.936, 1040.94);\r\n    rs.push_back(rect);\r\n\r\n    rect = new vpsc::Rectangle(1651.45, 1659.45, 1001.44, 1009.44);\r\n    rs.push_back(rect);\r\n\r\n    rect = new vpsc::Rectangle(1555.45, 1563.45, 1001.44, 1009.44);\r\n    rs.push_back(rect);\r\n\r\n    es.push_back(std::make_pair(0, 1));\r\n    es.push_back(std::make_pair(0, 2));\r\n    es.push_back(std::make_pair(0, 3));\r\n    es.push_back(std::make_pair(0, 4));\r\n    es.push_back(std::make_pair(1, 26));\r\n    es.push_back(std::make_pair(2, 25));\r\n    es.push_back(std::make_pair(3, 6));\r\n    es.push_back(std::make_pair(3, 24));\r\n    es.push_back(std::make_pair(4, 8));\r\n    es.push_back(std::make_pair(5, 6));\r\n    es.push_back(std::make_pair(6, 80));\r\n    es.push_back(std::make_pair(7, 8));\r\n    es.push_back(std::make_pair(9, 10));\r\n    es.push_back(std::make_pair(9, 11));\r\n    es.push_back(std::make_pair(9, 12));\r\n    es.push_back(std::make_pair(9, 13));\r\n    es.push_back(std::make_pair(9, 14));\r\n    es.push_back(std::make_pair(10, 17));\r\n    es.push_back(std::make_pair(15, 16));\r\n    es.push_back(std::make_pair(15, 17));\r\n    es.push_back(std::make_pair(15, 18));\r\n    es.push_back(std::make_pair(16, 36));\r\n    es.push_back(std::make_pair(16, 67));\r\n    es.push_back(std::make_pair(18, 29));\r\n    es.push_back(std::make_pair(19, 20));\r\n    es.push_back(std::make_pair(19, 21));\r\n    es.push_back(std::make_pair(20, 27));\r\n    es.push_back(std::make_pair(22, 23));\r\n    es.push_back(std::make_pair(22, 24));\r\n    es.push_back(std::make_pair(22, 25));\r\n    es.push_back(std::make_pair(22, 26));\r\n    es.push_back(std::make_pair(22, 27));\r\n    es.push_back(std::make_pair(23, 30));\r\n    es.push_back(std::make_pair(28, 29));\r\n    es.push_back(std::make_pair(28, 30));\r\n    es.push_back(std::make_pair(31, 32));\r\n    es.push_back(std::make_pair(31, 33));\r\n    es.push_back(std::make_pair(31, 34));\r\n    es.push_back(std::make_pair(31, 35));\r\n    es.push_back(std::make_pair(31, 36));\r\n    es.push_back(std::make_pair(32, 39));\r\n    es.push_back(std::make_pair(32, 48));\r\n    es.push_back(std::make_pair(34, 42));\r\n    es.push_back(std::make_pair(35, 51));\r\n    es.push_back(std::make_pair(35, 54));\r\n    es.push_back(std::make_pair(37, 38));\r\n    es.push_back(std::make_pair(37, 39));\r\n    es.push_back(std::make_pair(38, 47));\r\n    es.push_back(std::make_pair(40, 41));\r\n    es.push_back(std::make_pair(40, 42));\r\n    es.push_back(std::make_pair(41, 46));\r\n    es.push_back(std::make_pair(43, 44));\r\n    es.push_back(std::make_pair(43, 45));\r\n    es.push_back(std::make_pair(43, 46));\r\n    es.push_back(std::make_pair(43, 47));\r\n    es.push_back(std::make_pair(43, 48));\r\n    es.push_back(std::make_pair(44, 55));\r\n    es.push_back(std::make_pair(45, 50));\r\n    es.push_back(std::make_pair(49, 50));\r\n    es.push_back(std::make_pair(49, 51));\r\n    es.push_back(std::make_pair(52, 53));\r\n    es.push_back(std::make_pair(52, 54));\r\n    es.push_back(std::make_pair(52, 55));\r\n    es.push_back(std::make_pair(53, 58));\r\n    es.push_back(std::make_pair(56, 57));\r\n    es.push_back(std::make_pair(56, 58));\r\n    es.push_back(std::make_pair(57, 63));\r\n    es.push_back(std::make_pair(57, 66));\r\n    es.push_back(std::make_pair(59, 60));\r\n    es.push_back(std::make_pair(60, 62));\r\n    es.push_back(std::make_pair(61, 62));\r\n    es.push_back(std::make_pair(61, 63));\r\n    es.push_back(std::make_pair(64, 65));\r\n    es.push_back(std::make_pair(64, 66));\r\n    es.push_back(std::make_pair(64, 67));\r\n    es.push_back(std::make_pair(65, 91));\r\n    es.push_back(std::make_pair(68, 69));\r\n    es.push_back(std::make_pair(68, 70));\r\n    es.push_back(std::make_pair(68, 71));\r\n    es.push_back(std::make_pair(69, 75));\r\n    es.push_back(std::make_pair(70, 85));\r\n    es.push_back(std::make_pair(71, 90));\r\n    es.push_back(std::make_pair(72, 73));\r\n    es.push_back(std::make_pair(72, 74));\r\n    es.push_back(std::make_pair(72, 75));\r\n    es.push_back(std::make_pair(73, 88));\r\n    es.push_back(std::make_pair(75, 77));\r\n    es.push_back(std::make_pair(76, 77));\r\n    es.push_back(std::make_pair(76, 78));\r\n    es.push_back(std::make_pair(79, 80));\r\n    es.push_back(std::make_pair(79, 81));\r\n    es.push_back(std::make_pair(79, 82));\r\n    es.push_back(std::make_pair(79, 83));\r\n    es.push_back(std::make_pair(83, 85));\r\n    es.push_back(std::make_pair(84, 85));\r\n    es.push_back(std::make_pair(84, 86));\r\n    es.push_back(std::make_pair(84, 87));\r\n    es.push_back(std::make_pair(84, 88));\r\n    es.push_back(std::make_pair(89, 90));\r\n    es.push_back(std::make_pair(89, 91));\r\n\r\n    eLengths.resize(100);\r\n    eLengths[0] = 59.6059;\r\n    eLengths[1] = 59.6059;\r\n    eLengths[2] = 59.6059;\r\n    eLengths[3] = 59.6059;\r\n    eLengths[4] = 63.5296;\r\n    eLengths[5] = 77.5769;\r\n    eLengths[6] = 65.8274;\r\n    eLengths[7] = 65.8274;\r\n    eLengths[8] = 65.8274;\r\n    eLengths[9] = 65.8274;\r\n    eLengths[10] = 65.8274;\r\n    eLengths[11] = 66.1651;\r\n    eLengths[12] = 66.1651;\r\n    eLengths[13] = 66.1651;\r\n    eLengths[14] = 62.5822;\r\n    eLengths[15] = 62.5822;\r\n    eLengths[16] = 74.0984;\r\n    eLengths[17] = 74.0984;\r\n    eLengths[18] = 74.0984;\r\n    eLengths[19] = 74.0984;\r\n    eLengths[20] = 74.0984;\r\n    eLengths[21] = 71.111;\r\n    eLengths[22] = 71.111;\r\n    eLengths[23] = 80.7601;\r\n    eLengths[24] = 80.7601;\r\n    eLengths[25] = 80.7601;\r\n    eLengths[26] = 80.7601;\r\n    eLengths[27] = 80.7601;\r\n    eLengths[28] = 63.0851;\r\n    eLengths[29] = 63.0851;\r\n    eLengths[30] = 63.0851;\r\n    eLengths[31] = 63.0851;\r\n    eLengths[32] = 115.481;\r\n    eLengths[33] = 115.481;\r\n    eLengths[34] = 115.481;\r\n    eLengths[35] = 115.481;\r\n    eLengths[36] = 115.481;\r\n    eLengths[37] = 63.0851;\r\n    eLengths[38] = 63.0851;\r\n    eLengths[39] = 57.7745;\r\n    eLengths[40] = 57.7745;\r\n    eLengths[41] = 57.7745;\r\n    eLengths[42] = 55.5618;\r\n    eLengths[43] = 55.5618;\r\n    eLengths[44] = 63.5296;\r\n    eLengths[45] = 74.186;\r\n    eLengths[46] = 74.186;\r\n    eLengths[47] = 62.2718;\r\n    eLengths[48] = 62.2718;\r\n    eLengths[49] = 62.2718;\r\n    eLengths[50] = 56.4555;\r\n    eLengths[51] = 56.4555;\r\n    eLengths[52] = 56.4555;\r\n    eLengths[53] = 67.8863;\r\n    eLengths[54] = 67.8863;\r\n    eLengths[55] = 67.8863;\r\n    eLengths[56] = 53.5447;\r\n    eLengths[57] = 53.5447;\r\n    eLengths[58] = 61.9596;\r\n    eLengths[59] = 61.9596;\r\n    eLengths[60] = 61.9596;\r\n    eLengths[61] = 61.9596;\r\n    eLengths[62] = 60.111;\r\n    eLengths[63] = 60.111;\r\n    eLengths[64] = 60.111;\r\n    eLengths[65] = 60.111;\r\n    eLengths[66] = 66.8471;\r\n    eLengths[67] = 66.8471;\r\n    eLengths[68] = 18.3712;\r\n    eLengths[69] = 18.3712;\r\n    eLengths[70] = 18.3712;\r\n    eLengths[71] = 18.3712;\r\n    eLengths[72] = 10.6066;\r\n    eLengths[73] = 10.6066;\r\n    eLengths[74] = 15;\r\n    eLengths[75] = 15;\r\n    eLengths[76] = 15;\r\n    eLengths[77] = 10.6066;\r\n    eLengths[78] = 10.6066;\r\n    eLengths[79] = 23.7171;\r\n    eLengths[80] = 30;\r\n    eLengths[81] = 23.7171;\r\n    eLengths[82] = 23.7171;\r\n    eLengths[83] = 25.9808;\r\n    eLengths[84] = 21.2132;\r\n    eLengths[85] = 21.2132;\r\n    eLengths[86] = 15;\r\n    eLengths[87] = 21.2132;\r\n    eLengths[88] = 10.6066;\r\n    eLengths[89] = 15;\r\n    eLengths[90] = 15;\r\n    eLengths[91] = 10.6066;\r\n    eLengths[92] = 10.6066;\r\n    eLengths[93] = 15;\r\n    eLengths[94] = 10.6066;\r\n    eLengths[95] = 15;\r\n    eLengths[96] = 15;\r\n    eLengths[97] = 15;\r\n    eLengths[98] = 18.3712;\r\n    eLengths[99] = 15;\r\n\r\n    SeparationConstraint *separation479625808 = new SeparationConstraint(vpsc::XDIM, 0, 1, 36.5, true);\r\n    ccs.push_back(separation479625808);\r\n\r\n    SeparationConstraint *separation479626000 = new SeparationConstraint(vpsc::YDIM, 0, 1, -3.25, true);\r\n    ccs.push_back(separation479626000);\r\n\r\n    SeparationConstraint *separation479625936 = new SeparationConstraint(vpsc::XDIM, 0, 2, 36.5, true);\r\n    ccs.push_back(separation479625936);\r\n\r\n    SeparationConstraint *separation479626128 = new SeparationConstraint(vpsc::YDIM, 0, 2, 9, true);\r\n    ccs.push_back(separation479626128);\r\n\r\n    SeparationConstraint *separation479626064 = new SeparationConstraint(vpsc::XDIM, 0, 3, 36.5, true);\r\n    ccs.push_back(separation479626064);\r\n\r\n    SeparationConstraint *separation479626256 = new SeparationConstraint(vpsc::YDIM, 0, 3, 21.25, true);\r\n    ccs.push_back(separation479626256);\r\n\r\n    SeparationConstraint *separation479626192 = new SeparationConstraint(vpsc::XDIM, 0, 4, -36.5, true);\r\n    ccs.push_back(separation479626192);\r\n\r\n    SeparationConstraint *separation479626384 = new SeparationConstraint(vpsc::YDIM, 0, 4, 9, true);\r\n    ccs.push_back(separation479626384);\r\n\r\n    SeparationConstraint *separation479626320 = new SeparationConstraint(vpsc::XDIM, 5, 6, -43, true);\r\n    ccs.push_back(separation479626320);\r\n\r\n    SeparationConstraint *separation479626512 = new SeparationConstraint(vpsc::YDIM, 5, 6, 9, true);\r\n    ccs.push_back(separation479626512);\r\n\r\n    SeparationConstraint *separation479626448 = new SeparationConstraint(vpsc::XDIM, 7, 8, 62.5, true);\r\n    ccs.push_back(separation479626448);\r\n\r\n    SeparationConstraint *separation479626640 = new SeparationConstraint(vpsc::YDIM, 7, 8, 9, true);\r\n    ccs.push_back(separation479626640);\r\n\r\n    SeparationConstraint *separation479626576 = new SeparationConstraint(vpsc::XDIM, 9, 10, 46.5, true);\r\n    ccs.push_back(separation479626576);\r\n\r\n    SeparationConstraint *separation479626768 = new SeparationConstraint(vpsc::YDIM, 9, 10, 9, true);\r\n    ccs.push_back(separation479626768);\r\n\r\n    SeparationConstraint *separation479626704 = new SeparationConstraint(vpsc::XDIM, 9, 11, -11.8333, true);\r\n    ccs.push_back(separation479626704);\r\n\r\n    SeparationConstraint *separation479626896 = new SeparationConstraint(vpsc::YDIM, 9, 11, 50.5, true);\r\n    ccs.push_back(separation479626896);\r\n\r\n    SeparationConstraint *separation479626832 = new SeparationConstraint(vpsc::XDIM, 9, 12, -28.1667, true);\r\n    ccs.push_back(separation479626832);\r\n\r\n    SeparationConstraint *separation479627024 = new SeparationConstraint(vpsc::YDIM, 9, 12, 50.5, true);\r\n    ccs.push_back(separation479627024);\r\n\r\n    SeparationConstraint *separation479626960 = new SeparationConstraint(vpsc::XDIM, 9, 13, -46.5, true);\r\n    ccs.push_back(separation479626960);\r\n\r\n    SeparationConstraint *separation479627152 = new SeparationConstraint(vpsc::YDIM, 9, 13, 17.1667, true);\r\n    ccs.push_back(separation479627152);\r\n\r\n    SeparationConstraint *separation479627088 = new SeparationConstraint(vpsc::XDIM, 9, 14, -46.5, true);\r\n    ccs.push_back(separation479627088);\r\n\r\n    SeparationConstraint *separation479627280 = new SeparationConstraint(vpsc::YDIM, 9, 14, 0.833333, true);\r\n    ccs.push_back(separation479627280);\r\n\r\n    SeparationConstraint *separation479627216 = new SeparationConstraint(vpsc::XDIM, 15, 16, 47, true);\r\n    ccs.push_back(separation479627216);\r\n\r\n    SeparationConstraint *separation479627408 = new SeparationConstraint(vpsc::YDIM, 15, 16, 9, true);\r\n    ccs.push_back(separation479627408);\r\n\r\n    SeparationConstraint *separation479627344 = new SeparationConstraint(vpsc::XDIM, 15, 17, -10.5, true);\r\n    ccs.push_back(separation479627344);\r\n\r\n    SeparationConstraint *separation479627536 = new SeparationConstraint(vpsc::YDIM, 15, 17, 50.5, true);\r\n    ccs.push_back(separation479627536);\r\n\r\n    SeparationConstraint *separation479627472 = new SeparationConstraint(vpsc::XDIM, 15, 18, -47, true);\r\n    ccs.push_back(separation479627472);\r\n\r\n    SeparationConstraint *separation479627664 = new SeparationConstraint(vpsc::YDIM, 15, 18, 9, true);\r\n    ccs.push_back(separation479627664);\r\n\r\n    SeparationConstraint *separation479627600 = new SeparationConstraint(vpsc::XDIM, 19, 20, 41.5, true);\r\n    ccs.push_back(separation479627600);\r\n\r\n    SeparationConstraint *separation479627792 = new SeparationConstraint(vpsc::YDIM, 19, 20, 9, true);\r\n    ccs.push_back(separation479627792);\r\n\r\n    SeparationConstraint *separation479627728 = new SeparationConstraint(vpsc::XDIM, 19, 21, -41.5, true);\r\n    ccs.push_back(separation479627728);\r\n\r\n    SeparationConstraint *separation479627920 = new SeparationConstraint(vpsc::YDIM, 19, 21, 9, true);\r\n    ccs.push_back(separation479627920);\r\n\r\n    SeparationConstraint *separation479627856 = new SeparationConstraint(vpsc::XDIM, 22, 23, 58, true);\r\n    ccs.push_back(separation479627856);\r\n\r\n    SeparationConstraint *separation479628048 = new SeparationConstraint(vpsc::YDIM, 22, 23, 9, true);\r\n    ccs.push_back(separation479628048);\r\n\r\n    SeparationConstraint *separation479627984 = new SeparationConstraint(vpsc::XDIM, 22, 24, -58, true);\r\n    ccs.push_back(separation479627984);\r\n\r\n    SeparationConstraint *separation479628176 = new SeparationConstraint(vpsc::YDIM, 22, 24, 23.7, true);\r\n    ccs.push_back(separation479628176);\r\n\r\n    SeparationConstraint *separation479628112 = new SeparationConstraint(vpsc::XDIM, 22, 25, -58, true);\r\n    ccs.push_back(separation479628112);\r\n\r\n    SeparationConstraint *separation479628304 = new SeparationConstraint(vpsc::YDIM, 22, 25, 13.9, true);\r\n    ccs.push_back(separation479628304);\r\n\r\n    SeparationConstraint *separation479628240 = new SeparationConstraint(vpsc::XDIM, 22, 26, -58, true);\r\n    ccs.push_back(separation479628240);\r\n\r\n    SeparationConstraint *separation479628432 = new SeparationConstraint(vpsc::YDIM, 22, 26, 4.1, true);\r\n    ccs.push_back(separation479628432);\r\n\r\n    SeparationConstraint *separation479628368 = new SeparationConstraint(vpsc::XDIM, 22, 27, -58, true);\r\n    ccs.push_back(separation479628368);\r\n\r\n    SeparationConstraint *separation479628560 = new SeparationConstraint(vpsc::YDIM, 22, 27, -5.7, true);\r\n    ccs.push_back(separation479628560);\r\n\r\n    SeparationConstraint *separation479628496 = new SeparationConstraint(vpsc::XDIM, 28, 29, 54, true);\r\n    ccs.push_back(separation479628496);\r\n\r\n    SeparationConstraint *separation479628688 = new SeparationConstraint(vpsc::YDIM, 28, 29, 9, true);\r\n    ccs.push_back(separation479628688);\r\n\r\n    SeparationConstraint *separation479628624 = new SeparationConstraint(vpsc::XDIM, 28, 30, -54, true);\r\n    ccs.push_back(separation479628624);\r\n\r\n    SeparationConstraint *separation479628816 = new SeparationConstraint(vpsc::YDIM, 28, 30, 9, true);\r\n    ccs.push_back(separation479628816);\r\n\r\n    SeparationConstraint *separation479628752 = new SeparationConstraint(vpsc::XDIM, 31, 32, 66.5, true);\r\n    ccs.push_back(separation479628752);\r\n\r\n    SeparationConstraint *separation479622736 = new SeparationConstraint(vpsc::YDIM, 31, 32, -5.7, true);\r\n    ccs.push_back(separation479622736);\r\n\r\n    SeparationConstraint *separation479622800 = new SeparationConstraint(vpsc::XDIM, 31, 33, 66.5, true);\r\n    ccs.push_back(separation479622800);\r\n\r\n    SeparationConstraint *separation479622864 = new SeparationConstraint(vpsc::YDIM, 31, 33, 4.1, true);\r\n    ccs.push_back(separation479622864);\r\n\r\n    SeparationConstraint *separation479622928 = new SeparationConstraint(vpsc::XDIM, 31, 34, 66.5, true);\r\n    ccs.push_back(separation479622928);\r\n\r\n    SeparationConstraint *separation479622992 = new SeparationConstraint(vpsc::YDIM, 31, 34, 13.9, true);\r\n    ccs.push_back(separation479622992);\r\n\r\n    SeparationConstraint *separation479623056 = new SeparationConstraint(vpsc::XDIM, 31, 35, 66.5, true);\r\n    ccs.push_back(separation479623056);\r\n\r\n    SeparationConstraint *separation479623120 = new SeparationConstraint(vpsc::YDIM, 31, 35, 23.7, true);\r\n    ccs.push_back(separation479623120);\r\n\r\n    SeparationConstraint *separation479623184 = new SeparationConstraint(vpsc::XDIM, 31, 36, -66.5, true);\r\n    ccs.push_back(separation479623184);\r\n\r\n    SeparationConstraint *separation479623248 = new SeparationConstraint(vpsc::YDIM, 31, 36, 9, true);\r\n    ccs.push_back(separation479623248);\r\n\r\n    SeparationConstraint *separation479623312 = new SeparationConstraint(vpsc::XDIM, 37, 38, 39, true);\r\n    ccs.push_back(separation479623312);\r\n\r\n    SeparationConstraint *separation479623440 = new SeparationConstraint(vpsc::YDIM, 37, 38, 9, true);\r\n    ccs.push_back(separation479623440);\r\n\r\n    SeparationConstraint *separation479623504 = new SeparationConstraint(vpsc::XDIM, 37, 39, -39, true);\r\n    ccs.push_back(separation479623504);\r\n\r\n    SeparationConstraint *separation479623568 = new SeparationConstraint(vpsc::YDIM, 37, 39, 9, true);\r\n    ccs.push_back(separation479623568);\r\n\r\n    SeparationConstraint *separation479623632 = new SeparationConstraint(vpsc::XDIM, 40, 41, 39, true);\r\n    ccs.push_back(separation479623632);\r\n\r\n    SeparationConstraint *separation479623696 = new SeparationConstraint(vpsc::YDIM, 40, 41, 9, true);\r\n    ccs.push_back(separation479623696);\r\n\r\n    SeparationConstraint *separation479623760 = new SeparationConstraint(vpsc::XDIM, 40, 42, -39, true);\r\n    ccs.push_back(separation479623760);\r\n\r\n    SeparationConstraint *separation479623888 = new SeparationConstraint(vpsc::YDIM, 40, 42, 9, true);\r\n    ccs.push_back(separation479623888);\r\n\r\n    SeparationConstraint *separation479623952 = new SeparationConstraint(vpsc::XDIM, 43, 44, 103, true);\r\n    ccs.push_back(separation479623952);\r\n\r\n    SeparationConstraint *separation479624016 = new SeparationConstraint(vpsc::YDIM, 43, 44, 9, true);\r\n    ccs.push_back(separation479624016);\r\n\r\n    SeparationConstraint *separation479624080 = new SeparationConstraint(vpsc::XDIM, 43, 45, -103, true);\r\n    ccs.push_back(separation479624080);\r\n\r\n    SeparationConstraint *separation479624144 = new SeparationConstraint(vpsc::YDIM, 43, 45, 27.9, true);\r\n    ccs.push_back(separation479624144);\r\n\r\n    SeparationConstraint *separation479624208 = new SeparationConstraint(vpsc::XDIM, 43, 46, -103, true);\r\n    ccs.push_back(separation479624208);\r\n\r\n    SeparationConstraint *separation479624272 = new SeparationConstraint(vpsc::YDIM, 43, 46, 15.3, true);\r\n    ccs.push_back(separation479624272);\r\n\r\n    SeparationConstraint *separation479624336 = new SeparationConstraint(vpsc::XDIM, 43, 47, -103, true);\r\n    ccs.push_back(separation479624336);\r\n\r\n    SeparationConstraint *separation479624400 = new SeparationConstraint(vpsc::YDIM, 43, 47, 2.7, true);\r\n    ccs.push_back(separation479624400);\r\n\r\n    SeparationConstraint *separation479624528 = new SeparationConstraint(vpsc::XDIM, 43, 48, -103, true);\r\n    ccs.push_back(separation479624528);\r\n\r\n    SeparationConstraint *separation479624592 = new SeparationConstraint(vpsc::YDIM, 43, 48, -9.9, true);\r\n    ccs.push_back(separation479624592);\r\n\r\n    SeparationConstraint *separation479624656 = new SeparationConstraint(vpsc::XDIM, 49, 50, 39, true);\r\n    ccs.push_back(separation479624656);\r\n\r\n    SeparationConstraint *separation479624720 = new SeparationConstraint(vpsc::YDIM, 49, 50, 9, true);\r\n    ccs.push_back(separation479624720);\r\n\r\n    SeparationConstraint *separation479624784 = new SeparationConstraint(vpsc::XDIM, 49, 51, -39, true);\r\n    ccs.push_back(separation479624784);\r\n\r\n    SeparationConstraint *separation479624848 = new SeparationConstraint(vpsc::YDIM, 49, 51, 9, true);\r\n    ccs.push_back(separation479624848);\r\n\r\n    SeparationConstraint *separation479624912 = new SeparationConstraint(vpsc::XDIM, 52, 53, 40, true);\r\n    ccs.push_back(separation479624912);\r\n\r\n    SeparationConstraint *separation479624976 = new SeparationConstraint(vpsc::YDIM, 52, 53, 9, true);\r\n    ccs.push_back(separation479624976);\r\n\r\n    SeparationConstraint *separation479625040 = new SeparationConstraint(vpsc::XDIM, 52, 54, -40, true);\r\n    ccs.push_back(separation479625040);\r\n\r\n    SeparationConstraint *separation479625104 = new SeparationConstraint(vpsc::YDIM, 52, 54, 15.5, true);\r\n    ccs.push_back(separation479625104);\r\n\r\n    SeparationConstraint *separation479625168 = new SeparationConstraint(vpsc::XDIM, 52, 55, -40, true);\r\n    ccs.push_back(separation479625168);\r\n\r\n    SeparationConstraint *separation479625232 = new SeparationConstraint(vpsc::YDIM, 52, 55, 2.5, true);\r\n    ccs.push_back(separation479625232);\r\n\r\n    SeparationConstraint *separation479625296 = new SeparationConstraint(vpsc::XDIM, 56, 57, 36.5, true);\r\n    ccs.push_back(separation479625296);\r\n\r\n    SeparationConstraint *separation479625360 = new SeparationConstraint(vpsc::YDIM, 56, 57, 9, true);\r\n    ccs.push_back(separation479625360);\r\n\r\n    SeparationConstraint *separation479625424 = new SeparationConstraint(vpsc::XDIM, 56, 58, -36.5, true);\r\n    ccs.push_back(separation479625424);\r\n\r\n    SeparationConstraint *separation479625552 = new SeparationConstraint(vpsc::YDIM, 56, 58, 9, true);\r\n    ccs.push_back(separation479625552);\r\n\r\n    SeparationConstraint *separation479625616 = new SeparationConstraint(vpsc::XDIM, 59, 60, -43, true);\r\n    ccs.push_back(separation479625616);\r\n\r\n    SeparationConstraint *separation479625680 = new SeparationConstraint(vpsc::YDIM, 59, 60, 9, true);\r\n    ccs.push_back(separation479625680);\r\n\r\n    SeparationConstraint *separation479625744 = new SeparationConstraint(vpsc::XDIM, 61, 62, 62, true);\r\n    ccs.push_back(separation479625744);\r\n\r\n    SeparationConstraint *separation479625488 = new SeparationConstraint(vpsc::YDIM, 61, 62, 9, true);\r\n    ccs.push_back(separation479625488);\r\n\r\n    SeparationConstraint *separation479624464 = new SeparationConstraint(vpsc::XDIM, 61, 63, -62, true);\r\n    ccs.push_back(separation479624464);\r\n\r\n    SeparationConstraint *separation479623824 = new SeparationConstraint(vpsc::YDIM, 61, 63, 9, true);\r\n    ccs.push_back(separation479623824);\r\n\r\n    SeparationConstraint *separation479623376 = new SeparationConstraint(vpsc::XDIM, 64, 65, 41, true);\r\n    ccs.push_back(separation479623376);\r\n\r\n    SeparationConstraint *separation479628944 = new SeparationConstraint(vpsc::YDIM, 64, 65, 9, true);\r\n    ccs.push_back(separation479628944);\r\n\r\n    SeparationConstraint *separation479628880 = new SeparationConstraint(vpsc::XDIM, 64, 66, -4.5, true);\r\n    ccs.push_back(separation479628880);\r\n\r\n    SeparationConstraint *separation479629008 = new SeparationConstraint(vpsc::YDIM, 64, 66, 50.5, true);\r\n    ccs.push_back(separation479629008);\r\n\r\n    SeparationConstraint *separation479629072 = new SeparationConstraint(vpsc::XDIM, 64, 67, -41, true);\r\n    ccs.push_back(separation479629072);\r\n\r\n    SeparationConstraint *separation479629136 = new SeparationConstraint(vpsc::YDIM, 64, 67, 9, true);\r\n    ccs.push_back(separation479629136);\r\n\r\n    SeparationConstraint *separation479629200 = new SeparationConstraint(vpsc::XDIM, 68, 69, 30.5, true);\r\n    ccs.push_back(separation479629200);\r\n\r\n    SeparationConstraint *separation479629264 = new SeparationConstraint(vpsc::YDIM, 68, 69, 9, true);\r\n    ccs.push_back(separation479629264);\r\n\r\n    SeparationConstraint *separation479629328 = new SeparationConstraint(vpsc::XDIM, 68, 70, -30.5, true);\r\n    ccs.push_back(separation479629328);\r\n\r\n    SeparationConstraint *separation479629392 = new SeparationConstraint(vpsc::YDIM, 68, 70, 17.1667, true);\r\n    ccs.push_back(separation479629392);\r\n\r\n    SeparationConstraint *separation479629456 = new SeparationConstraint(vpsc::XDIM, 68, 71, -30.5, true);\r\n    ccs.push_back(separation479629456);\r\n\r\n    SeparationConstraint *separation479629520 = new SeparationConstraint(vpsc::YDIM, 68, 71, 0.833333, true);\r\n    ccs.push_back(separation479629520);\r\n\r\n    SeparationConstraint *separation479629584 = new SeparationConstraint(vpsc::XDIM, 72, 73, 49.5, true);\r\n    ccs.push_back(separation479629584);\r\n\r\n    SeparationConstraint *separation479629648 = new SeparationConstraint(vpsc::YDIM, 72, 73, 9, true);\r\n    ccs.push_back(separation479629648);\r\n\r\n    SeparationConstraint *separation479629712 = new SeparationConstraint(vpsc::XDIM, 72, 74, -49.5, true);\r\n    ccs.push_back(separation479629712);\r\n\r\n    SeparationConstraint *separation479629776 = new SeparationConstraint(vpsc::YDIM, 72, 74, 17.1667, true);\r\n    ccs.push_back(separation479629776);\r\n\r\n    SeparationConstraint *separation479629840 = new SeparationConstraint(vpsc::XDIM, 72, 75, -49.5, true);\r\n    ccs.push_back(separation479629840);\r\n\r\n    SeparationConstraint *separation479629904 = new SeparationConstraint(vpsc::YDIM, 72, 75, 0.833333, true);\r\n    ccs.push_back(separation479629904);\r\n\r\n    SeparationConstraint *separation479629968 = new SeparationConstraint(vpsc::XDIM, 76, 77, 37, true);\r\n    ccs.push_back(separation479629968);\r\n\r\n    SeparationConstraint *separation479630032 = new SeparationConstraint(vpsc::YDIM, 76, 77, 9, true);\r\n    ccs.push_back(separation479630032);\r\n\r\n    SeparationConstraint *separation479630096 = new SeparationConstraint(vpsc::XDIM, 76, 78, -37, true);\r\n    ccs.push_back(separation479630096);\r\n\r\n    SeparationConstraint *separation479630160 = new SeparationConstraint(vpsc::YDIM, 76, 78, 9, true);\r\n    ccs.push_back(separation479630160);\r\n\r\n    SeparationConstraint *separation479630224 = new SeparationConstraint(vpsc::XDIM, 79, 80, 37, true);\r\n    ccs.push_back(separation479630224);\r\n\r\n    SeparationConstraint *separation479630288 = new SeparationConstraint(vpsc::YDIM, 79, 80, 9, true);\r\n    ccs.push_back(separation479630288);\r\n\r\n    SeparationConstraint *separation479630352 = new SeparationConstraint(vpsc::XDIM, 79, 81, -0.333334, true);\r\n    ccs.push_back(separation479630352);\r\n\r\n    SeparationConstraint *separation479630416 = new SeparationConstraint(vpsc::YDIM, 79, 81, 53, true);\r\n    ccs.push_back(separation479630416);\r\n\r\n    SeparationConstraint *separation477486176 = new SeparationConstraint(vpsc::XDIM, 79, 82, -17.6667, true);\r\n    ccs.push_back(separation477486176);\r\n\r\n    SeparationConstraint *separation477486240 = new SeparationConstraint(vpsc::YDIM, 79, 82, 53, true);\r\n    ccs.push_back(separation477486240);\r\n\r\n    SeparationConstraint *separation477486304 = new SeparationConstraint(vpsc::XDIM, 79, 83, -37, true);\r\n    ccs.push_back(separation477486304);\r\n\r\n    SeparationConstraint *separation477486368 = new SeparationConstraint(vpsc::YDIM, 79, 83, 9, true);\r\n    ccs.push_back(separation477486368);\r\n\r\n    SeparationConstraint *separation477486432 = new SeparationConstraint(vpsc::XDIM, 84, 85, 33.5, true);\r\n    ccs.push_back(separation477486432);\r\n\r\n    SeparationConstraint *separation477486496 = new SeparationConstraint(vpsc::YDIM, 84, 85, 9, true);\r\n    ccs.push_back(separation477486496);\r\n\r\n    SeparationConstraint *separation477486560 = new SeparationConstraint(vpsc::XDIM, 84, 86, 3.16667, true);\r\n    ccs.push_back(separation477486560);\r\n\r\n    SeparationConstraint *separation477486624 = new SeparationConstraint(vpsc::YDIM, 84, 86, 53, true);\r\n    ccs.push_back(separation477486624);\r\n\r\n    SeparationConstraint *separation477486688 = new SeparationConstraint(vpsc::XDIM, 84, 87, -14.1667, true);\r\n    ccs.push_back(separation477486688);\r\n\r\n    SeparationConstraint *separation477486752 = new SeparationConstraint(vpsc::YDIM, 84, 87, 53, true);\r\n    ccs.push_back(separation477486752);\r\n\r\n    SeparationConstraint *separation477486816 = new SeparationConstraint(vpsc::XDIM, 84, 88, -33.5, true);\r\n    ccs.push_back(separation477486816);\r\n\r\n    SeparationConstraint *separation477486880 = new SeparationConstraint(vpsc::YDIM, 84, 88, 9, true);\r\n    ccs.push_back(separation477486880);\r\n\r\n    SeparationConstraint *separation477486944 = new SeparationConstraint(vpsc::XDIM, 89, 90, 48, true);\r\n    ccs.push_back(separation477486944);\r\n\r\n    SeparationConstraint *separation477487008 = new SeparationConstraint(vpsc::YDIM, 89, 90, 9, true);\r\n    ccs.push_back(separation477487008);\r\n\r\n    SeparationConstraint *separation477487072 = new SeparationConstraint(vpsc::XDIM, 89, 91, -48, true);\r\n    ccs.push_back(separation477487072);\r\n\r\n    SeparationConstraint *separation477487136 = new SeparationConstraint(vpsc::YDIM, 89, 91, 9, true);\r\n    ccs.push_back(separation477487136);\r\n\r\n    SeparationConstraint *separation477487200 = new SeparationConstraint(vpsc::XDIM, 7, 0, 137, false);\r\n    ccs.push_back(separation477487200);\r\n\r\n    SeparationConstraint *separation477487264 = new SeparationConstraint(vpsc::XDIM, 0, 5, 118.5, false);\r\n    ccs.push_back(separation477487264);\r\n\r\n    SeparationConstraint *separation477487328 = new SeparationConstraint(vpsc::XDIM, 79, 5, 118, false);\r\n    ccs.push_back(separation477487328);\r\n\r\n    SeparationConstraint *separation477487392 = new SeparationConstraint(vpsc::XDIM, 9, 15, 146.5, false);\r\n    ccs.push_back(separation477487392);\r\n\r\n    SeparationConstraint *separation477487456 = new SeparationConstraint(vpsc::XDIM, 28, 15, 139, false);\r\n    ccs.push_back(separation477487456);\r\n\r\n    SeparationConstraint *separation477487520 = new SeparationConstraint(vpsc::XDIM, 0, 22, 142.5, false);\r\n    ccs.push_back(separation477487520);\r\n\r\n    SeparationConstraint *separation477487584 = new SeparationConstraint(vpsc::XDIM, 0, 22, 142.5, false);\r\n    ccs.push_back(separation477487584);\r\n\r\n    SeparationConstraint *separation477487648 = new SeparationConstraint(vpsc::XDIM, 0, 22, 142.5, false);\r\n    ccs.push_back(separation477487648);\r\n\r\n    SeparationConstraint *separation477487712 = new SeparationConstraint(vpsc::XDIM, 19, 22, 137.5, false);\r\n    ccs.push_back(separation477487712);\r\n\r\n    SeparationConstraint *separation477487776 = new SeparationConstraint(vpsc::XDIM, 22, 28, 150, false);\r\n    ccs.push_back(separation477487776);\r\n\r\n    SeparationConstraint *separation477487840 = new SeparationConstraint(vpsc::XDIM, 15, 31, 151.5, false);\r\n    ccs.push_back(separation477487840);\r\n\r\n    SeparationConstraint *separation477487904 = new SeparationConstraint(vpsc::XDIM, 31, 37, 143.5, false);\r\n    ccs.push_back(separation477487904);\r\n\r\n    SeparationConstraint *separation477487968 = new SeparationConstraint(vpsc::XDIM, 31, 40, 143.5, false);\r\n    ccs.push_back(separation477487968);\r\n\r\n    SeparationConstraint *separation477488032 = new SeparationConstraint(vpsc::XDIM, 31, 43, 207.5, false);\r\n    ccs.push_back(separation477488032);\r\n\r\n    SeparationConstraint *separation477488096 = new SeparationConstraint(vpsc::XDIM, 37, 43, 235, false);\r\n    ccs.push_back(separation477488096);\r\n\r\n    SeparationConstraint *separation477488160 = new SeparationConstraint(vpsc::XDIM, 40, 43, 235, false);\r\n    ccs.push_back(separation477488160);\r\n\r\n    SeparationConstraint *separation477488224 = new SeparationConstraint(vpsc::XDIM, 49, 43, 235, false);\r\n    ccs.push_back(separation477488224);\r\n\r\n    SeparationConstraint *separation477488288 = new SeparationConstraint(vpsc::XDIM, 31, 49, 143.5, false);\r\n    ccs.push_back(separation477488288);\r\n\r\n    SeparationConstraint *separation477488352 = new SeparationConstraint(vpsc::XDIM, 31, 52, 217.5, false);\r\n    ccs.push_back(separation477488352);\r\n\r\n    SeparationConstraint *separation477488416 = new SeparationConstraint(vpsc::XDIM, 43, 52, 181, false);\r\n    ccs.push_back(separation477488416);\r\n\r\n    SeparationConstraint *separation477488480 = new SeparationConstraint(vpsc::XDIM, 52, 56, 114.5, false);\r\n    ccs.push_back(separation477488480);\r\n\r\n    SeparationConstraint *separation477488544 = new SeparationConstraint(vpsc::XDIM, 61, 59, 143, false);\r\n    ccs.push_back(separation477488544);\r\n\r\n    SeparationConstraint *separation477488608 = new SeparationConstraint(vpsc::XDIM, 56, 61, 136.5, false);\r\n    ccs.push_back(separation477488608);\r\n\r\n    SeparationConstraint *separation477488672 = new SeparationConstraint(vpsc::XDIM, 15, 64, 126, false);\r\n    ccs.push_back(separation477488672);\r\n\r\n    SeparationConstraint *separation477488736 = new SeparationConstraint(vpsc::XDIM, 56, 64, 136.5, false);\r\n    ccs.push_back(separation477488736);\r\n\r\n    SeparationConstraint *separation477488800 = new SeparationConstraint(vpsc::XDIM, 89, 68, 116.5, false);\r\n    ccs.push_back(separation477488800);\r\n\r\n    SeparationConstraint *separation477488864 = new SeparationConstraint(vpsc::XDIM, 68, 72, 131, false);\r\n    ccs.push_back(separation477488864);\r\n\r\n    SeparationConstraint *separation477488928 = new SeparationConstraint(vpsc::XDIM, 76, 72, 124.5, false);\r\n    ccs.push_back(separation477488928);\r\n\r\n    SeparationConstraint *separation477488992 = new SeparationConstraint(vpsc::XDIM, 84, 79, 108.5, false);\r\n    ccs.push_back(separation477488992);\r\n\r\n    SeparationConstraint *separation477489056 = new SeparationConstraint(vpsc::XDIM, 72, 84, 121, false);\r\n    ccs.push_back(separation477489056);\r\n\r\n    SeparationConstraint *separation477489120 = new SeparationConstraint(vpsc::XDIM, 64, 89, 127, false);\r\n    ccs.push_back(separation477489120);\r\n\r\n    cola::Box margin = cola::Box(10, 30, 30, 60);   //30\r\n    cola::Box padding = cola::Box(); // cola::Box(10, 30, 30, 60);  //10\r\n    ConstrainedFDLayout alg(rs, es, defaultEdgeLength, eLengths);\r\n    RootCluster *cluster476902600 = new RootCluster();\r\n    cluster476902600->addChildNode(0);\r\n    cluster476902600->addChildNode(1);\r\n    cluster476902600->addChildNode(2);\r\n    cluster476902600->addChildNode(3);\r\n    cluster476902600->addChildNode(4);\r\n    cluster476902600->addChildNode(5);\r\n    cluster476902600->addChildNode(6);\r\n    cluster476902600->addChildNode(7);\r\n    cluster476902600->addChildNode(8);\r\n    cluster476902600->addChildNode(9);\r\n    cluster476902600->addChildNode(10);\r\n    cluster476902600->addChildNode(11);\r\n    cluster476902600->addChildNode(12);\r\n    cluster476902600->addChildNode(13);\r\n    cluster476902600->addChildNode(14);\r\n    cluster476902600->addChildNode(15);\r\n    cluster476902600->addChildNode(16);\r\n    cluster476902600->addChildNode(17);\r\n    cluster476902600->addChildNode(18);\r\n    cluster476902600->addChildNode(19);\r\n    cluster476902600->addChildNode(20);\r\n    cluster476902600->addChildNode(21);\r\n    cluster476902600->addChildNode(22);\r\n    cluster476902600->addChildNode(23);\r\n    cluster476902600->addChildNode(24);\r\n    cluster476902600->addChildNode(25);\r\n    cluster476902600->addChildNode(26);\r\n    cluster476902600->addChildNode(27);\r\n    cluster476902600->addChildNode(28);\r\n    cluster476902600->addChildNode(29);\r\n    cluster476902600->addChildNode(30);\r\n    RectangularCluster *cluster417213744 = new RectangularCluster();\r\n    cluster417213744->setMargin(margin);\r\n    cluster417213744->setPadding(padding);\r\n    cluster417213744->addChildNode(59);\r\n    cluster417213744->addChildNode(60);\r\n    cluster417213744->addChildNode(61);\r\n    cluster417213744->addChildNode(62);\r\n    cluster417213744->addChildNode(63);\r\n    cluster417213744->addChildNode(64);\r\n    cluster417213744->addChildNode(65);\r\n    cluster417213744->addChildNode(66);\r\n    cluster417213744->addChildNode(67);\r\n    cluster417213744->addChildNode(89);\r\n    cluster417213744->addChildNode(90);\r\n    cluster417213744->addChildNode(91);\r\n    RectangularCluster *cluster417215984 = new RectangularCluster();\r\n    cluster417215984->setMargin(margin);\r\n    cluster417215984->setPadding(padding);\r\n    cluster417215984->addChildNode(31);\r\n    cluster417215984->addChildNode(32);\r\n    cluster417215984->addChildNode(33);\r\n    cluster417215984->addChildNode(34);\r\n    cluster417215984->addChildNode(35);\r\n    cluster417215984->addChildNode(36);\r\n    cluster417215984->addChildNode(37);\r\n    cluster417215984->addChildNode(38);\r\n    cluster417215984->addChildNode(39);\r\n    cluster417215984->addChildNode(40);\r\n    cluster417215984->addChildNode(41);\r\n    cluster417215984->addChildNode(42);\r\n    cluster417215984->addChildNode(43);\r\n    cluster417215984->addChildNode(44);\r\n    cluster417215984->addChildNode(45);\r\n    cluster417215984->addChildNode(46);\r\n    cluster417215984->addChildNode(47);\r\n    cluster417215984->addChildNode(48);\r\n    cluster417215984->addChildNode(49);\r\n    cluster417215984->addChildNode(50);\r\n    cluster417215984->addChildNode(51);\r\n    cluster417215984->addChildNode(52);\r\n    cluster417215984->addChildNode(53);\r\n    cluster417215984->addChildNode(54);\r\n    cluster417215984->addChildNode(55);\r\n    cluster417215984->addChildNode(56);\r\n    cluster417215984->addChildNode(57);\r\n    cluster417215984->addChildNode(58);\r\n    cluster417213744->addChildCluster(cluster417215984);\r\n    RectangularCluster *cluster417215760 = new RectangularCluster();\r\n    cluster417215760->setMargin(margin);\r\n    cluster417215760->setPadding(padding);\r\n    cluster417215760->addChildNode(68);\r\n    cluster417215760->addChildNode(69);\r\n    cluster417215760->addChildNode(70);\r\n    cluster417215760->addChildNode(71);\r\n    cluster417215760->addChildNode(72);\r\n    cluster417215760->addChildNode(73);\r\n    cluster417215760->addChildNode(74);\r\n    cluster417215760->addChildNode(75);\r\n    cluster417215760->addChildNode(76);\r\n    cluster417215760->addChildNode(77);\r\n    cluster417215760->addChildNode(78);\r\n    cluster417215760->addChildNode(79);\r\n    cluster417215760->addChildNode(80);\r\n    cluster417215760->addChildNode(81);\r\n    cluster417215760->addChildNode(82);\r\n    cluster417215760->addChildNode(83);\r\n    cluster417215760->addChildNode(84);\r\n    cluster417215760->addChildNode(85);\r\n    cluster417215760->addChildNode(86);\r\n    cluster417215760->addChildNode(87);\r\n    cluster417215760->addChildNode(88);\r\n    cluster417213744->addChildCluster(cluster417215760);\r\n    cluster476902600->addChildCluster(cluster417213744);\r\n    alg.setClusterHierarchy(cluster476902600);\r\n    alg.setConstraints(ccs);\r\n\r\n    UnsatisfiableConstraintInfos unsatisfiableX, unsatisfiableY;\r\n    alg.setUnsatisfiableConstraintInfo(&unsatisfiableX, &unsatisfiableY);\r\n\r\n    // rect-43 and associated port rects.\r\n    cola::NodeIndexes nonOverlapExemptGroup;\r\n    nonOverlapExemptGroup.push_back(44);\r\n    nonOverlapExemptGroup.push_back(45);\r\n    nonOverlapExemptGroup.push_back(46);\r\n    nonOverlapExemptGroup.push_back(47);\r\n    nonOverlapExemptGroup.push_back(48);\r\n    nonOverlapExemptGroup.push_back(43);\r\n    \r\n    std::vector<cola::NodeIndexes> nonOverlapExemptGroupList;\r\n    nonOverlapExemptGroupList.push_back(nonOverlapExemptGroup);\r\n    alg.setAvoidNodeOverlaps(true, nonOverlapExemptGroupList);\r\n\r\n    //alg.makeFeasible();\r\n    alg.run();\r\n    alg.outputInstanceToSVG(\"rectangularClusters01\");\r\n\r\n    for (size_t i = 0; i < unsatisfiableX.size(); ++i)\r\n    {\r\n\tprintf(\"%s\\n\", unsatisfiableX[i]->toString().c_str());\r\n    }\r\n    for (size_t i = 0; i < unsatisfiableY.size(); ++i)\r\n    {\r\n\tprintf(\"%s\\n\", unsatisfiableY[i]->toString().c_str());\r\n    }\r\n    alg.freeAssociatedObjects();\r\n    return (unsatisfiableX.empty() && unsatisfiableY.empty()) ? 0 : 1;\r\n};\r\n"
  },
  {
    "path": "cola/libcola/tests/rectclustershapecontainment.cpp",
    "content": "#include <vector>\n#include \"libcola/cola.h\"\nusing namespace cola;\nint main(void) {\n    CompoundConstraints ccs;\n    std::vector<Edge> es;\n    double defaultEdgeLength=40;\n    std::vector<vpsc::Rectangle*> rs;\n    vpsc::Rectangle *rect = nullptr;\n\n    rect = new vpsc::Rectangle(478, 488, 399, 409);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(284, 294, 938, 948);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(141, 151, 906, 916);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(284, 294, 959, 969);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(131, 161, 938, 968);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(550, 762, 155.5, 522.5);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(430, 540, -6, 158);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(373, 383, 907, 917);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(482, 492, 938, 948);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(434, 444, 938, 948);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(426, 436, 869, 879);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(426, 436, 848, 858);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(314, 324, 860, 870);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(205, 215, 860, 870);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(553, 563, 859, 869);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(345, 423, 746, 780);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(478, 488, 765, 775);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(-34.5, 162.5, 723, 877);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(478, 488, 696, 706);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(478, 488, 624, 634);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(453, 463, 479, 489);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(154.5, 457.5, 574, 624);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(398, 408, 445, 455);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(453, 463, 331, 341);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(403, 413, 331, 341);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(547, 557, 191, 201);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(478, 488, 260, 270);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(478, 488, 168, 178);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(380, 390, 297, 307);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(228, 238, 286, 296);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(228, 238, 307, 317);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(352, 362, 259, 269);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(302, 312, 259, 269);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(176, 186, 259, 269);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(228, 238, 234, 244);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(228, 238, 213, 223);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(311, 321, 181, 191);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(338, 348, 149, 159);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(338, 348, 128, 138);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(40.5, 291.5, 45.5, 70.5);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(257, 267, 903, 913);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(478, 488, 551, 561);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(276, 286, 213, 223);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(276, 286, 286, 296);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(176, 186, 355, 365);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(176, 186, 381, 391);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(286, 296, 354, 364);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(286, 296, 380, 390);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(586, 616, 180, 210);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(468, 498, 128, 158);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(468, 498, 649, 679);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(166, 196, 213, 243);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(166, 196, 286, 316);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(317, 347, 433, 463);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(317, 347, 286, 316);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(468, 498, 215, 245);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(468, 498, 288, 318);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(468, 498, 721, 751);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(468, 498, 577, 607);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(468, 498, 505, 535);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(612, 642, 848, 878);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(299, 329, 891, 921);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(535, 565, 938, 968);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(468, 498, 848, 878);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(363, 393, 848, 878);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(131, 161, 848, 878);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(363, 393, 938, 968);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(250, 280, 848, 878);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(197, 227, 891, 921);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(468, 498, 358, 388);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(117, 147, 344, 374);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(224, 254, 344, 374);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(224, 254, 370, 400);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(117, 147, 370, 400);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(363, 393, 805, 835);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(181, 227, 711, 741);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(131, 161, 721, 751);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(434, 444, 959, 969);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(199, 209, 742, 752);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(482, 492, 959, 969);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(565.5, 692.5, 842.5, 997.5);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(503, 513, 479, 489);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(577, 587, 520, 530);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(550, 560, 539, 549);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(284, 294, 790, 800);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(527, 537, 520, 530);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(383, 413, 541, 571);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(432, 442, 581, 591);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(433, 443, 517, 527);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(468, 498, 433, 463);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(91, 101, 906, 916);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(503, 513, 331, 341);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(276, 286, 234, 244);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(276, 286, 307, 317);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(522, 568, 389, 419);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(266, 312, 878, 908);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(185, 231, 896, 926);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(266, 312, 899, 929);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(417, 463, 897, 927);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(464, 510, 878, 908);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(416, 462, 878, 908);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(470, 516, 859, 889);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(470, 516, 838, 868);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(358, 404, 850, 880);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(187, 233, 800, 830);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(535, 581, 799, 829);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(522, 568, 755, 785);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(522, 568, 686, 716);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(522, 568, 614, 644);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(497, 543, 469, 499);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(380, 426, 385, 415);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(497, 543, 321, 351);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(385, 431, 271, 301);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(529, 575, 131, 161);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(522, 568, 250, 280);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(522, 568, 158, 188);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(362, 408, 237, 267);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(210, 256, 226, 256);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(210, 256, 247, 277);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(396, 442, 249, 279);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(346, 392, 249, 279);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(220, 266, 249, 279);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(210, 256, 174, 204);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(210, 256, 153, 183);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(293, 339, 121, 151);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(320, 366, 89, 119);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(320, 366, 68, 98);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(239, 285, 843, 873);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(522, 568, 541, 571);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(258, 304, 153, 183);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(258, 304, 226, 256);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(158, 204, 295, 325);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(158, 204, 321, 351);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(268, 314, 294, 324);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(268, 314, 320, 350);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(416, 462, 899, 929);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(181, 227, 682, 712);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(464, 510, 899, 929);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(547, 593, 469, 499);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(559, 605, 460, 490);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(532, 578, 479, 509);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(266, 312, 730, 760);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(571, 617, 510, 540);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(414, 460, 521, 551);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(415, 461, 457, 487);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(73, 119, 846, 876);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(547, 593, 321, 351);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(258, 304, 174, 204);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(258, 304, 247, 277);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(550.5, 600.5, 304.5, 334.5);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(550.5, 600.5, 344.5, 374.5);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(621.5, 651.5, 473, 523);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(661.5, 691.5, 473, 523);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(470.5, 500.5, 108.5, 158.5);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(113, 163, 765.5, 795.5);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(113, 163, 805.5, 835.5);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(408, 458, 584.5, 614.5);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(614.5, 644.5, 843, 893);\n    rs.push_back(rect);\n\n    AlignmentConstraint *alignment140664475503328 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140664475503328->addShape(0, 0);\n    alignment140664475503328->addShape(16, 0);\n    alignment140664475503328->addShape(18, 0);\n    alignment140664475503328->addShape(19, 0);\n    alignment140664475503328->addShape(26, 0);\n    alignment140664475503328->addShape(27, 0);\n    alignment140664475503328->addShape(41, 0);\n    alignment140664475503328->addShape(49, 0);\n    alignment140664475503328->addShape(50, 0);\n    alignment140664475503328->addShape(55, 0);\n    alignment140664475503328->addShape(56, 0);\n    alignment140664475503328->addShape(57, 0);\n    alignment140664475503328->addShape(58, 0);\n    alignment140664475503328->addShape(59, 0);\n    alignment140664475503328->addShape(63, 0);\n    alignment140664475503328->addShape(69, 0);\n    alignment140664475503328->addShape(89, 0);\n    ccs.push_back(alignment140664475503328);\n\n    AlignmentConstraint *alignment140664481097440 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140664481097440->addShape(1, 0);\n    alignment140664481097440->addShape(3, 0);\n    alignment140664481097440->addShape(46, 0);\n    alignment140664481097440->addShape(47, 0);\n    alignment140664481097440->addShape(84, 0);\n    ccs.push_back(alignment140664481097440);\n\n    AlignmentConstraint *alignment140664483416688 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140664483416688->addShape(2, 0);\n    alignment140664483416688->addShape(4, 0);\n    alignment140664483416688->addShape(65, 0);\n    alignment140664483416688->addShape(76, 0);\n    ccs.push_back(alignment140664483416688);\n\n    AlignmentConstraint *alignment140664481096784 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140664481096784->addShape(3, 0);\n    alignment140664481096784->addShape(46, 0);\n    alignment140664481096784->addShape(47, 0);\n    alignment140664481096784->addShape(84, 0);\n    ccs.push_back(alignment140664481096784);\n\n    AlignmentConstraint *alignment140664475503952 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140664475503952->addShape(4, 0);\n    alignment140664475503952->addShape(65, 0);\n    alignment140664475503952->addShape(76, 0);\n    ccs.push_back(alignment140664475503952);\n\n    AlignmentConstraint *alignment140664475504304 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140664475504304->addShape(7, 0);\n    alignment140664475504304->addShape(64, 0);\n    alignment140664475504304->addShape(66, 0);\n    alignment140664475504304->addShape(74, 0);\n    ccs.push_back(alignment140664475504304);\n\n    AlignmentConstraint *alignment140664475504496 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140664475504496->addShape(8, 0);\n    alignment140664475504496->addShape(79, 0);\n    ccs.push_back(alignment140664475504496);\n\n    AlignmentConstraint *alignment140664475504720 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140664475504720->addShape(9, 0);\n    alignment140664475504720->addShape(77, 0);\n    alignment140664475504720->addShape(87, 0);\n    alignment140664475504720->addShape(88, 0);\n    ccs.push_back(alignment140664475504720);\n\n    AlignmentConstraint *alignment140664483418000 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140664483418000->addShape(10, 0);\n    alignment140664483418000->addShape(11, 0);\n    ccs.push_back(alignment140664483418000);\n\n    AlignmentConstraint *alignment140664483418368 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140664483418368->addShape(11, 0);\n    ccs.push_back(alignment140664483418368);\n\n    AlignmentConstraint *alignment140664483418496 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140664483418496->addShape(12, 0);\n    ccs.push_back(alignment140664483418496);\n\n    AlignmentConstraint *alignment140664483418656 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140664483418656->addShape(13, 0);\n    alignment140664483418656->addShape(68, 0);\n    ccs.push_back(alignment140664483418656);\n\n    AlignmentConstraint *alignment140664483418880 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140664483418880->addShape(14, 0);\n    ccs.push_back(alignment140664483418880);\n\n    AlignmentConstraint *alignment140664483419008 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140664483419008->addShape(16, 0);\n    alignment140664483419008->addShape(18, 0);\n    alignment140664483419008->addShape(19, 0);\n    alignment140664483419008->addShape(26, 0);\n    alignment140664483419008->addShape(27, 0);\n    alignment140664483419008->addShape(41, 0);\n    alignment140664483419008->addShape(49, 0);\n    alignment140664483419008->addShape(50, 0);\n    alignment140664483419008->addShape(55, 0);\n    alignment140664483419008->addShape(56, 0);\n    alignment140664483419008->addShape(57, 0);\n    alignment140664483419008->addShape(58, 0);\n    alignment140664483419008->addShape(59, 0);\n    alignment140664483419008->addShape(63, 0);\n    alignment140664483419008->addShape(69, 0);\n    alignment140664483419008->addShape(89, 0);\n    ccs.push_back(alignment140664483419008);\n\n    AlignmentConstraint *alignment140664476991552 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140664476991552->addShape(18, 0);\n    alignment140664476991552->addShape(19, 0);\n    alignment140664476991552->addShape(26, 0);\n    alignment140664476991552->addShape(27, 0);\n    alignment140664476991552->addShape(41, 0);\n    alignment140664476991552->addShape(49, 0);\n    alignment140664476991552->addShape(50, 0);\n    alignment140664476991552->addShape(55, 0);\n    alignment140664476991552->addShape(56, 0);\n    alignment140664476991552->addShape(57, 0);\n    alignment140664476991552->addShape(58, 0);\n    alignment140664476991552->addShape(59, 0);\n    alignment140664476991552->addShape(63, 0);\n    alignment140664476991552->addShape(69, 0);\n    alignment140664476991552->addShape(89, 0);\n    ccs.push_back(alignment140664476991552);\n\n    AlignmentConstraint *alignment140664476992272 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140664476992272->addShape(19, 0);\n    alignment140664476992272->addShape(26, 0);\n    alignment140664476992272->addShape(27, 0);\n    alignment140664476992272->addShape(41, 0);\n    alignment140664476992272->addShape(49, 0);\n    alignment140664476992272->addShape(50, 0);\n    alignment140664476992272->addShape(55, 0);\n    alignment140664476992272->addShape(56, 0);\n    alignment140664476992272->addShape(57, 0);\n    alignment140664476992272->addShape(58, 0);\n    alignment140664476992272->addShape(59, 0);\n    alignment140664476992272->addShape(63, 0);\n    alignment140664476992272->addShape(69, 0);\n    alignment140664476992272->addShape(89, 0);\n    ccs.push_back(alignment140664476992272);\n\n    AlignmentConstraint *alignment140664476992960 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140664476992960->addShape(20, 0);\n    alignment140664476992960->addShape(23, 0);\n    ccs.push_back(alignment140664476992960);\n\n    AlignmentConstraint *alignment140664476993456 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140664476993456->addShape(22, 0);\n    ccs.push_back(alignment140664476993456);\n\n    AlignmentConstraint *alignment140664476993584 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140664476993584->addShape(23, 0);\n    ccs.push_back(alignment140664476993584);\n\n    AlignmentConstraint *alignment140664476993744 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140664476993744->addShape(24, 0);\n    ccs.push_back(alignment140664476993744);\n\n    AlignmentConstraint *alignment140664476993904 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140664476993904->addShape(25, 0);\n    alignment140664476993904->addShape(62, 0);\n    ccs.push_back(alignment140664476993904);\n\n    AlignmentConstraint *alignment140664476994128 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140664476994128->addShape(26, 0);\n    alignment140664476994128->addShape(27, 0);\n    alignment140664476994128->addShape(41, 0);\n    alignment140664476994128->addShape(49, 0);\n    alignment140664476994128->addShape(50, 0);\n    alignment140664476994128->addShape(55, 0);\n    alignment140664476994128->addShape(56, 0);\n    alignment140664476994128->addShape(57, 0);\n    alignment140664476994128->addShape(58, 0);\n    alignment140664476994128->addShape(59, 0);\n    alignment140664476994128->addShape(63, 0);\n    alignment140664476994128->addShape(69, 0);\n    alignment140664476994128->addShape(89, 0);\n    ccs.push_back(alignment140664476994128);\n\n    AlignmentConstraint *alignment140664476994608 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140664476994608->addShape(27, 0);\n    alignment140664476994608->addShape(41, 0);\n    alignment140664476994608->addShape(49, 0);\n    alignment140664476994608->addShape(50, 0);\n    alignment140664476994608->addShape(55, 0);\n    alignment140664476994608->addShape(56, 0);\n    alignment140664476994608->addShape(57, 0);\n    alignment140664476994608->addShape(58, 0);\n    alignment140664476994608->addShape(59, 0);\n    alignment140664476994608->addShape(63, 0);\n    alignment140664476994608->addShape(69, 0);\n    alignment140664476994608->addShape(89, 0);\n    ccs.push_back(alignment140664476994608);\n\n    AlignmentConstraint *alignment140664476995232 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140664476995232->addShape(28, 0);\n    ccs.push_back(alignment140664476995232);\n\n    AlignmentConstraint *alignment140664476995392 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140664476995392->addShape(29, 0);\n    alignment140664476995392->addShape(30, 0);\n    alignment140664476995392->addShape(34, 0);\n    alignment140664476995392->addShape(35, 0);\n    ccs.push_back(alignment140664476995392);\n\n    AlignmentConstraint *alignment140664476995616 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140664476995616->addShape(30, 0);\n    alignment140664476995616->addShape(34, 0);\n    alignment140664476995616->addShape(35, 0);\n    ccs.push_back(alignment140664476995616);\n\n    AlignmentConstraint *alignment140664476995888 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140664476995888->addShape(31, 0);\n    ccs.push_back(alignment140664476995888);\n\n    AlignmentConstraint *alignment140664476996016 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140664476996016->addShape(32, 0);\n    ccs.push_back(alignment140664476996016);\n\n    AlignmentConstraint *alignment140664476996176 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140664476996176->addShape(33, 0);\n    alignment140664476996176->addShape(44, 0);\n    alignment140664476996176->addShape(45, 0);\n    alignment140664476996176->addShape(51, 0);\n    alignment140664476996176->addShape(52, 0);\n    ccs.push_back(alignment140664476996176);\n\n    AlignmentConstraint *alignment140664476996480 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140664476996480->addShape(34, 0);\n    alignment140664476996480->addShape(35, 0);\n    ccs.push_back(alignment140664476996480);\n\n    AlignmentConstraint *alignment140664476996704 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140664476996704->addShape(35, 0);\n    ccs.push_back(alignment140664476996704);\n\n    AlignmentConstraint *alignment140664476996832 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140664476996832->addShape(36, 0);\n    alignment140664476996832->addShape(61, 0);\n    ccs.push_back(alignment140664476996832);\n\n    AlignmentConstraint *alignment140664476997056 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140664476997056->addShape(37, 0);\n    alignment140664476997056->addShape(38, 0);\n    ccs.push_back(alignment140664476997056);\n\n    AlignmentConstraint *alignment140664476993184 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140664476993184->addShape(38, 0);\n    ccs.push_back(alignment140664476993184);\n\n    AlignmentConstraint *alignment140664476993312 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140664476993312->addShape(40, 0);\n    ccs.push_back(alignment140664476993312);\n\n    AlignmentConstraint *alignment140664476997808 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140664476997808->addShape(41, 0);\n    alignment140664476997808->addShape(49, 0);\n    alignment140664476997808->addShape(50, 0);\n    alignment140664476997808->addShape(55, 0);\n    alignment140664476997808->addShape(56, 0);\n    alignment140664476997808->addShape(57, 0);\n    alignment140664476997808->addShape(58, 0);\n    alignment140664476997808->addShape(59, 0);\n    alignment140664476997808->addShape(63, 0);\n    alignment140664476997808->addShape(69, 0);\n    alignment140664476997808->addShape(89, 0);\n    ccs.push_back(alignment140664476997808);\n\n    AlignmentConstraint *alignment140664476998480 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140664476998480->addShape(42, 0);\n    alignment140664476998480->addShape(43, 0);\n    alignment140664476998480->addShape(92, 0);\n    alignment140664476998480->addShape(93, 0);\n    ccs.push_back(alignment140664476998480);\n\n    AlignmentConstraint *alignment140664476998704 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140664476998704->addShape(43, 0);\n    alignment140664476998704->addShape(92, 0);\n    alignment140664476998704->addShape(93, 0);\n    ccs.push_back(alignment140664476998704);\n\n    AlignmentConstraint *alignment140664476998976 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140664476998976->addShape(44, 0);\n    alignment140664476998976->addShape(45, 0);\n    alignment140664476998976->addShape(51, 0);\n    alignment140664476998976->addShape(52, 0);\n    ccs.push_back(alignment140664476998976);\n\n    AlignmentConstraint *alignment140664476999216 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140664476999216->addShape(45, 0);\n    alignment140664476999216->addShape(51, 0);\n    alignment140664476999216->addShape(52, 0);\n    ccs.push_back(alignment140664476999216);\n\n    AlignmentConstraint *alignment140664476999488 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140664476999488->addShape(46, 0);\n    alignment140664476999488->addShape(47, 0);\n    alignment140664476999488->addShape(84, 0);\n    ccs.push_back(alignment140664476999488);\n\n    AlignmentConstraint *alignment140664476999728 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140664476999728->addShape(47, 0);\n    alignment140664476999728->addShape(84, 0);\n    ccs.push_back(alignment140664476999728);\n\n    AlignmentConstraint *alignment140664476999920 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140664476999920->addShape(48, 0);\n    ccs.push_back(alignment140664476999920);\n\n    AlignmentConstraint *alignment140664477000048 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140664477000048->addShape(49, 0);\n    alignment140664477000048->addShape(50, 0);\n    alignment140664477000048->addShape(55, 0);\n    alignment140664477000048->addShape(56, 0);\n    alignment140664477000048->addShape(57, 0);\n    alignment140664477000048->addShape(58, 0);\n    alignment140664477000048->addShape(59, 0);\n    alignment140664477000048->addShape(63, 0);\n    alignment140664477000048->addShape(69, 0);\n    alignment140664477000048->addShape(89, 0);\n    ccs.push_back(alignment140664477000048);\n\n    AlignmentConstraint *alignment140664477000656 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140664477000656->addShape(50, 0);\n    alignment140664477000656->addShape(55, 0);\n    alignment140664477000656->addShape(56, 0);\n    alignment140664477000656->addShape(57, 0);\n    alignment140664477000656->addShape(58, 0);\n    alignment140664477000656->addShape(59, 0);\n    alignment140664477000656->addShape(63, 0);\n    alignment140664477000656->addShape(69, 0);\n    alignment140664477000656->addShape(89, 0);\n    ccs.push_back(alignment140664477000656);\n\n    AlignmentConstraint *alignment140664477001184 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140664477001184->addShape(51, 0);\n    alignment140664477001184->addShape(52, 0);\n    ccs.push_back(alignment140664477001184);\n\n    AlignmentConstraint *alignment140664477001408 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140664477001408->addShape(52, 0);\n    ccs.push_back(alignment140664477001408);\n\n    AlignmentConstraint *alignment140664477001536 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140664477001536->addShape(53, 0);\n    alignment140664477001536->addShape(54, 0);\n    ccs.push_back(alignment140664477001536);\n\n    AlignmentConstraint *alignment140664477001760 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140664477001760->addShape(54, 0);\n    ccs.push_back(alignment140664477001760);\n\n    AlignmentConstraint *alignment140664477001888 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140664477001888->addShape(55, 0);\n    alignment140664477001888->addShape(56, 0);\n    alignment140664477001888->addShape(57, 0);\n    alignment140664477001888->addShape(58, 0);\n    alignment140664477001888->addShape(59, 0);\n    alignment140664477001888->addShape(63, 0);\n    alignment140664477001888->addShape(69, 0);\n    alignment140664477001888->addShape(89, 0);\n    ccs.push_back(alignment140664477001888);\n\n    AlignmentConstraint *alignment140664477002240 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140664477002240->addShape(56, 0);\n    alignment140664477002240->addShape(57, 0);\n    alignment140664477002240->addShape(58, 0);\n    alignment140664477002240->addShape(59, 0);\n    alignment140664477002240->addShape(63, 0);\n    alignment140664477002240->addShape(69, 0);\n    alignment140664477002240->addShape(89, 0);\n    ccs.push_back(alignment140664477002240);\n\n    AlignmentConstraint *alignment140664477002640 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140664477002640->addShape(57, 0);\n    alignment140664477002640->addShape(58, 0);\n    alignment140664477002640->addShape(59, 0);\n    alignment140664477002640->addShape(63, 0);\n    alignment140664477002640->addShape(69, 0);\n    alignment140664477002640->addShape(89, 0);\n    ccs.push_back(alignment140664477002640);\n\n    AlignmentConstraint *alignment140664477003008 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140664477003008->addShape(58, 0);\n    alignment140664477003008->addShape(59, 0);\n    alignment140664477003008->addShape(63, 0);\n    alignment140664477003008->addShape(69, 0);\n    alignment140664477003008->addShape(89, 0);\n    ccs.push_back(alignment140664477003008);\n\n    AlignmentConstraint *alignment140664477003344 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140664477003344->addShape(59, 0);\n    alignment140664477003344->addShape(63, 0);\n    alignment140664477003344->addShape(69, 0);\n    alignment140664477003344->addShape(89, 0);\n    ccs.push_back(alignment140664477003344);\n\n    AlignmentConstraint *alignment140664477003568 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140664477003568->addShape(60, 0);\n    ccs.push_back(alignment140664477003568);\n\n    AlignmentConstraint *alignment140664477003728 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140664477003728->addShape(61, 0);\n    ccs.push_back(alignment140664477003728);\n\n    AlignmentConstraint *alignment140664477003888 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140664477003888->addShape(62, 0);\n    ccs.push_back(alignment140664477003888);\n\n    AlignmentConstraint *alignment140664477004048 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140664477004048->addShape(63, 0);\n    alignment140664477004048->addShape(69, 0);\n    alignment140664477004048->addShape(89, 0);\n    ccs.push_back(alignment140664477004048);\n\n    AlignmentConstraint *alignment140664477004320 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140664477004320->addShape(64, 0);\n    alignment140664477004320->addShape(66, 0);\n    alignment140664477004320->addShape(74, 0);\n    ccs.push_back(alignment140664477004320);\n\n    AlignmentConstraint *alignment140664477004560 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140664477004560->addShape(65, 0);\n    alignment140664477004560->addShape(76, 0);\n    ccs.push_back(alignment140664477004560);\n\n    AlignmentConstraint *alignment140664477004752 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140664477004752->addShape(66, 0);\n    alignment140664477004752->addShape(74, 0);\n    ccs.push_back(alignment140664477004752);\n\n    AlignmentConstraint *alignment140664477004944 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140664477004944->addShape(67, 0);\n    ccs.push_back(alignment140664477004944);\n\n    AlignmentConstraint *alignment140664477005072 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140664477005072->addShape(68, 0);\n    ccs.push_back(alignment140664477005072);\n\n    AlignmentConstraint *alignment140664477005232 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140664477005232->addShape(69, 0);\n    alignment140664477005232->addShape(89, 0);\n    ccs.push_back(alignment140664477005232);\n\n    AlignmentConstraint *alignment140664477005456 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140664477005456->addShape(70, 0);\n    alignment140664477005456->addShape(73, 0);\n    ccs.push_back(alignment140664477005456);\n\n    AlignmentConstraint *alignment140664477005648 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140664477005648->addShape(71, 0);\n    alignment140664477005648->addShape(72, 0);\n    ccs.push_back(alignment140664477005648);\n\n    AlignmentConstraint *alignment140664476997248 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140664476997248->addShape(72, 0);\n    ccs.push_back(alignment140664476997248);\n\n    AlignmentConstraint *alignment140664476997376 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140664476997376->addShape(73, 0);\n    ccs.push_back(alignment140664476997376);\n\n    AlignmentConstraint *alignment140664476997536 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140664476997536->addShape(74, 0);\n    ccs.push_back(alignment140664476997536);\n\n    AlignmentConstraint *alignment140664475640112 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140664475640112->addShape(76, 0);\n    ccs.push_back(alignment140664475640112);\n\n    AlignmentConstraint *alignment140664475640272 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140664475640272->addShape(77, 0);\n    alignment140664475640272->addShape(87, 0);\n    alignment140664475640272->addShape(88, 0);\n    ccs.push_back(alignment140664475640272);\n\n    AlignmentConstraint *alignment140664475640544 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140664475640544->addShape(78, 0);\n    ccs.push_back(alignment140664475640544);\n\n    AlignmentConstraint *alignment140664475640672 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140664475640672->addShape(79, 0);\n    ccs.push_back(alignment140664475640672);\n\n    AlignmentConstraint *alignment140664475640832 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140664475640832->addShape(81, 0);\n    alignment140664475640832->addShape(91, 0);\n    ccs.push_back(alignment140664475640832);\n\n    AlignmentConstraint *alignment140664475641056 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140664475641056->addShape(82, 0);\n    ccs.push_back(alignment140664475641056);\n\n    AlignmentConstraint *alignment140664475641184 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140664475641184->addShape(83, 0);\n    ccs.push_back(alignment140664475641184);\n\n    AlignmentConstraint *alignment140664475641344 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140664475641344->addShape(84, 0);\n    ccs.push_back(alignment140664475641344);\n\n    AlignmentConstraint *alignment140664475641504 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140664475641504->addShape(85, 0);\n    ccs.push_back(alignment140664475641504);\n\n    AlignmentConstraint *alignment140664475641664 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140664475641664->addShape(86, 0);\n    ccs.push_back(alignment140664475641664);\n\n    AlignmentConstraint *alignment140664475641824 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140664475641824->addShape(87, 0);\n    alignment140664475641824->addShape(88, 0);\n    ccs.push_back(alignment140664475641824);\n\n    AlignmentConstraint *alignment140664475642048 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140664475642048->addShape(88, 0);\n    ccs.push_back(alignment140664475642048);\n\n    AlignmentConstraint *alignment140664475642176 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140664475642176->addShape(89, 0);\n    ccs.push_back(alignment140664475642176);\n\n    AlignmentConstraint *alignment140664475642336 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140664475642336->addShape(90, 0);\n    ccs.push_back(alignment140664475642336);\n\n    AlignmentConstraint *alignment140664475642496 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140664475642496->addShape(91, 0);\n    ccs.push_back(alignment140664475642496);\n\n    AlignmentConstraint *alignment140664475642656 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140664475642656->addShape(92, 0);\n    alignment140664475642656->addShape(93, 0);\n    ccs.push_back(alignment140664475642656);\n\n    AlignmentConstraint *alignment140664475642880 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140664475642880->addShape(93, 0);\n    ccs.push_back(alignment140664475642880);\n\n    SeparationConstraint *separation140664475644192 = new SeparationConstraint(vpsc::XDIM, alignment140664475642336, alignment140664476997376, 36, false);\n    ccs.push_back(separation140664475644192);\n\n    SeparationConstraint *separation140664481097840 = new SeparationConstraint(vpsc::XDIM, alignment140664476997376, alignment140664475640112, 14, false);\n    ccs.push_back(separation140664481097840);\n\n    SeparationConstraint *separation140664476990640 = new SeparationConstraint(vpsc::XDIM, alignment140664475640112, alignment140664477001408, 35, false);\n    ccs.push_back(separation140664476990640);\n\n    SeparationConstraint *separation140664481098032 = new SeparationConstraint(vpsc::XDIM, alignment140664477001408, alignment140664475640544, 23, false);\n    ccs.push_back(separation140664481098032);\n\n    SeparationConstraint *separation140664481098176 = new SeparationConstraint(vpsc::XDIM, alignment140664475640544, alignment140664483418656, 7, false);\n    ccs.push_back(separation140664481098176);\n\n    SeparationConstraint *separation140664481098320 = new SeparationConstraint(vpsc::XDIM, alignment140664477005072, alignment140664476996704, 21, false);\n    ccs.push_back(separation140664481098320);\n\n    SeparationConstraint *separation140664481098496 = new SeparationConstraint(vpsc::XDIM, alignment140664476996704, alignment140664476997248, 6, false);\n    ccs.push_back(separation140664481098496);\n\n    SeparationConstraint *separation140664481098672 = new SeparationConstraint(vpsc::XDIM, alignment140664476997248, alignment140664476993312, 23, false);\n    ccs.push_back(separation140664481098672);\n\n    SeparationConstraint *separation140664476989584 = new SeparationConstraint(vpsc::XDIM, alignment140664476993312, alignment140664477004944, 3, false);\n    ccs.push_back(separation140664476989584);\n\n    SeparationConstraint *separation140664476989760 = new SeparationConstraint(vpsc::XDIM, alignment140664477004944, alignment140664475642880, 16, false);\n    ccs.push_back(separation140664476989760);\n\n    SeparationConstraint *separation140664476989936 = new SeparationConstraint(vpsc::XDIM, alignment140664475642880, alignment140664475641344, 8, false);\n    ccs.push_back(separation140664476989936);\n\n    SeparationConstraint *separation140664476990112 = new SeparationConstraint(vpsc::XDIM, alignment140664476999488, alignment140664476996016, 16.6667, false);\n    ccs.push_back(separation140664476990112);\n\n    SeparationConstraint *separation140664476990288 = new SeparationConstraint(vpsc::XDIM, alignment140664476996016, alignment140664477003728, 7, false);\n    ccs.push_back(separation140664476990288);\n\n    SeparationConstraint *separation140664476990464 = new SeparationConstraint(vpsc::XDIM, alignment140664476996832, alignment140664483418496, 4, false);\n    ccs.push_back(separation140664476990464);\n\n    SeparationConstraint *separation140664475645632 = new SeparationConstraint(vpsc::XDIM, alignment140664483418496, alignment140664477001760, 13, false);\n    ccs.push_back(separation140664475645632);\n\n    SeparationConstraint *separation140664475645808 = new SeparationConstraint(vpsc::XDIM, alignment140664477001760, alignment140664476993184, 11, false);\n    ccs.push_back(separation140664475645808);\n\n    SeparationConstraint *separation140664475645984 = new SeparationConstraint(vpsc::XDIM, alignment140664476993184, alignment140664476995888, 14, false);\n    ccs.push_back(separation140664475645984);\n\n    SeparationConstraint *separation140664475646160 = new SeparationConstraint(vpsc::XDIM, alignment140664476995888, alignment140664476997536, 21, false);\n    ccs.push_back(separation140664475646160);\n\n    SeparationConstraint *separation140664475646336 = new SeparationConstraint(vpsc::XDIM, alignment140664476997536, alignment140664476995232, 7, false);\n    ccs.push_back(separation140664475646336);\n\n    SeparationConstraint *separation140664475646512 = new SeparationConstraint(vpsc::XDIM, alignment140664476995232, alignment140664475641664, 13, false);\n    ccs.push_back(separation140664475646512);\n\n    SeparationConstraint *separation140664475646688 = new SeparationConstraint(vpsc::XDIM, alignment140664475641664, alignment140664476993456, 5, false);\n    ccs.push_back(separation140664475646688);\n\n    SeparationConstraint *separation140664475646864 = new SeparationConstraint(vpsc::XDIM, alignment140664476993456, alignment140664476993744, 5, false);\n    ccs.push_back(separation140664475646864);\n\n    SeparationConstraint *separation140664475647040 = new SeparationConstraint(vpsc::XDIM, alignment140664476993744, alignment140664483418368, 23, false);\n    ccs.push_back(separation140664475647040);\n\n    SeparationConstraint *separation140664475647216 = new SeparationConstraint(vpsc::XDIM, alignment140664483418368, alignment140664475641824, 6.5, false);\n    ccs.push_back(separation140664475647216);\n\n    SeparationConstraint *separation140664475647392 = new SeparationConstraint(vpsc::XDIM, alignment140664475504720, alignment140664476993584, 19.75, false);\n    ccs.push_back(separation140664475647392);\n\n    SeparationConstraint *separation140664475647568 = new SeparationConstraint(vpsc::XDIM, alignment140664476993584, alignment140664475642176, 25, false);\n    ccs.push_back(separation140664475647568);\n\n    SeparationConstraint *separation140664475647744 = new SeparationConstraint(vpsc::XDIM, alignment140664475642176, alignment140664475640672, 4, false);\n    ccs.push_back(separation140664475647744);\n\n    SeparationConstraint *separation140664475647920 = new SeparationConstraint(vpsc::XDIM, alignment140664475640672, alignment140664475642496, 21, false);\n    ccs.push_back(separation140664475647920);\n\n    SeparationConstraint *separation140664475648096 = new SeparationConstraint(vpsc::XDIM, alignment140664475642496, alignment140664475641504, 24, false);\n    ccs.push_back(separation140664475648096);\n\n    SeparationConstraint *separation140664475648272 = new SeparationConstraint(vpsc::XDIM, alignment140664475641504, alignment140664477003888, 18, false);\n    ccs.push_back(separation140664475648272);\n\n    SeparationConstraint *separation140664475648448 = new SeparationConstraint(vpsc::XDIM, alignment140664476993904, alignment140664475641184, 4, false);\n    ccs.push_back(separation140664475648448);\n\n    SeparationConstraint *separation140664475648624 = new SeparationConstraint(vpsc::XDIM, alignment140664475641184, alignment140664483418880, 3, false);\n    ccs.push_back(separation140664475648624);\n\n    SeparationConstraint *separation140664475648800 = new SeparationConstraint(vpsc::XDIM, alignment140664483418880, alignment140664475641056, 24, false);\n    ccs.push_back(separation140664475648800);\n\n    SeparationConstraint *separation140664475648976 = new SeparationConstraint(vpsc::XDIM, alignment140664475641056, alignment140664476999920, 19, false);\n    ccs.push_back(separation140664475648976);\n\n    SeparationConstraint *separation140664475649152 = new SeparationConstraint(vpsc::XDIM, alignment140664476999920, alignment140664477003568, 26, false);\n    ccs.push_back(separation140664475649152);\n\n    AlignmentConstraint *alignment140664475649328 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140664475649328->addShape(0, 0);\n    ccs.push_back(alignment140664475649328);\n\n    AlignmentConstraint *alignment140664475649488 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140664475649488->addShape(1, 0);\n    alignment140664475649488->addShape(8, 0);\n    alignment140664475649488->addShape(9, 0);\n    ccs.push_back(alignment140664475649488);\n\n    AlignmentConstraint *alignment140664475649760 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140664475649760->addShape(2, 0);\n    alignment140664475649760->addShape(7, 0);\n    alignment140664475649760->addShape(90, 0);\n    ccs.push_back(alignment140664475649760);\n\n    AlignmentConstraint *alignment140664475650000 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140664475650000->addShape(3, 0);\n    alignment140664475650000->addShape(77, 0);\n    alignment140664475650000->addShape(79, 0);\n    ccs.push_back(alignment140664475650000);\n\n    AlignmentConstraint *alignment140664475650240 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140664475650240->addShape(4, 0);\n    alignment140664475650240->addShape(62, 0);\n    alignment140664475650240->addShape(66, 0);\n    ccs.push_back(alignment140664475650240);\n\n    AlignmentConstraint *alignment140664475650480 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140664475650480->addShape(7, 0);\n    alignment140664475650480->addShape(90, 0);\n    ccs.push_back(alignment140664475650480);\n\n    AlignmentConstraint *alignment140664475650672 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140664475650672->addShape(8, 0);\n    alignment140664475650672->addShape(9, 0);\n    ccs.push_back(alignment140664475650672);\n\n    AlignmentConstraint *alignment140664475650864 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140664475650864->addShape(9, 0);\n    ccs.push_back(alignment140664475650864);\n\n    AlignmentConstraint *alignment140664475639072 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140664475639072->addShape(10, 0);\n    ccs.push_back(alignment140664475639072);\n\n    AlignmentConstraint *alignment140664475639232 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140664475639232->addShape(11, 0);\n    ccs.push_back(alignment140664475639232);\n\n    AlignmentConstraint *alignment140664475639392 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140664475639392->addShape(12, 0);\n    alignment140664475639392->addShape(13, 0);\n    alignment140664475639392->addShape(14, 0);\n    alignment140664475639392->addShape(60, 0);\n    alignment140664475639392->addShape(63, 0);\n    alignment140664475639392->addShape(64, 0);\n    alignment140664475639392->addShape(65, 0);\n    alignment140664475639392->addShape(67, 0);\n    ccs.push_back(alignment140664475639392);\n\n    AlignmentConstraint *alignment140664475639872 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140664475639872->addShape(13, 0);\n    alignment140664475639872->addShape(14, 0);\n    alignment140664475639872->addShape(60, 0);\n    alignment140664475639872->addShape(63, 0);\n    alignment140664475639872->addShape(64, 0);\n    alignment140664475639872->addShape(65, 0);\n    alignment140664475639872->addShape(67, 0);\n    ccs.push_back(alignment140664475639872);\n\n    AlignmentConstraint *alignment140664475653264 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140664475653264->addShape(14, 0);\n    alignment140664475653264->addShape(60, 0);\n    alignment140664475653264->addShape(63, 0);\n    alignment140664475653264->addShape(64, 0);\n    alignment140664475653264->addShape(65, 0);\n    alignment140664475653264->addShape(67, 0);\n    ccs.push_back(alignment140664475653264);\n\n    AlignmentConstraint *alignment140664475653632 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140664475653632->addShape(16, 0);\n    ccs.push_back(alignment140664475653632);\n\n    AlignmentConstraint *alignment140664475653792 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140664475653792->addShape(18, 0);\n    ccs.push_back(alignment140664475653792);\n\n    AlignmentConstraint *alignment140664475653952 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140664475653952->addShape(19, 0);\n    ccs.push_back(alignment140664475653952);\n\n    AlignmentConstraint *alignment140664475654112 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140664475654112->addShape(20, 0);\n    alignment140664475654112->addShape(81, 0);\n    ccs.push_back(alignment140664475654112);\n\n    AlignmentConstraint *alignment140664475654336 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140664475654336->addShape(22, 0);\n    alignment140664475654336->addShape(53, 0);\n    alignment140664475654336->addShape(89, 0);\n    ccs.push_back(alignment140664475654336);\n\n    AlignmentConstraint *alignment140664475654528 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140664475654528->addShape(23, 0);\n    alignment140664475654528->addShape(24, 0);\n    alignment140664475654528->addShape(91, 0);\n    ccs.push_back(alignment140664475654528);\n\n    AlignmentConstraint *alignment140664475654720 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140664475654720->addShape(24, 0);\n    alignment140664475654720->addShape(91, 0);\n    ccs.push_back(alignment140664475654720);\n\n    AlignmentConstraint *alignment140664475654912 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140664475654912->addShape(25, 0);\n    alignment140664475654912->addShape(48, 0);\n    ccs.push_back(alignment140664475654912);\n\n    AlignmentConstraint *alignment140664475655104 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140664475655104->addShape(26, 0);\n    alignment140664475655104->addShape(31, 0);\n    alignment140664475655104->addShape(32, 0);\n    alignment140664475655104->addShape(33, 0);\n    ccs.push_back(alignment140664475655104);\n\n    AlignmentConstraint *alignment140664475655344 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140664475655344->addShape(27, 0);\n    ccs.push_back(alignment140664475655344);\n\n    AlignmentConstraint *alignment140664475655504 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140664475655504->addShape(28, 0);\n    alignment140664475655504->addShape(52, 0);\n    alignment140664475655504->addShape(54, 0);\n    alignment140664475655504->addShape(56, 0);\n    ccs.push_back(alignment140664475655504);\n\n    AlignmentConstraint *alignment140664475655776 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140664475655776->addShape(29, 0);\n    alignment140664475655776->addShape(43, 0);\n    ccs.push_back(alignment140664475655776);\n\n    AlignmentConstraint *alignment140664475656000 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140664475656000->addShape(30, 0);\n    alignment140664475656000->addShape(93, 0);\n    ccs.push_back(alignment140664475656000);\n\n    AlignmentConstraint *alignment140664475656192 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140664475656192->addShape(31, 0);\n    alignment140664475656192->addShape(32, 0);\n    alignment140664475656192->addShape(33, 0);\n    ccs.push_back(alignment140664475656192);\n\n    AlignmentConstraint *alignment140664475656432 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140664475656432->addShape(32, 0);\n    alignment140664475656432->addShape(33, 0);\n    ccs.push_back(alignment140664475656432);\n\n    AlignmentConstraint *alignment140664475656624 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140664475656624->addShape(33, 0);\n    ccs.push_back(alignment140664475656624);\n\n    AlignmentConstraint *alignment140664475656752 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140664475656752->addShape(34, 0);\n    alignment140664475656752->addShape(92, 0);\n    ccs.push_back(alignment140664475656752);\n\n    AlignmentConstraint *alignment140664475656976 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140664475656976->addShape(35, 0);\n    alignment140664475656976->addShape(42, 0);\n    ccs.push_back(alignment140664475656976);\n\n    AlignmentConstraint *alignment140664475657168 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140664475657168->addShape(36, 0);\n    ccs.push_back(alignment140664475657168);\n\n    AlignmentConstraint *alignment140664475657296 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140664475657296->addShape(37, 0);\n    ccs.push_back(alignment140664475657296);\n\n    AlignmentConstraint *alignment140664475657456 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140664475657456->addShape(38, 0);\n    ccs.push_back(alignment140664475657456);\n\n    AlignmentConstraint *alignment140664475657616 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140664475657616->addShape(40, 0);\n    alignment140664475657616->addShape(61, 0);\n    alignment140664475657616->addShape(68, 0);\n    ccs.push_back(alignment140664475657616);\n\n    AlignmentConstraint *alignment140664475657888 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140664475657888->addShape(41, 0);\n    alignment140664475657888->addShape(86, 0);\n    ccs.push_back(alignment140664475657888);\n\n    AlignmentConstraint *alignment140664475658080 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140664475658080->addShape(42, 0);\n    ccs.push_back(alignment140664475658080);\n\n    AlignmentConstraint *alignment140664475658208 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140664475658208->addShape(43, 0);\n    ccs.push_back(alignment140664475658208);\n\n    AlignmentConstraint *alignment140664475658368 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140664475658368->addShape(44, 0);\n    alignment140664475658368->addShape(46, 0);\n    alignment140664475658368->addShape(70, 0);\n    alignment140664475658368->addShape(71, 0);\n    ccs.push_back(alignment140664475658368);\n\n    AlignmentConstraint *alignment140664475658640 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140664475658640->addShape(45, 0);\n    alignment140664475658640->addShape(47, 0);\n    alignment140664475658640->addShape(72, 0);\n    alignment140664475658640->addShape(73, 0);\n    ccs.push_back(alignment140664475658640);\n\n    AlignmentConstraint *alignment140664475658912 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140664475658912->addShape(46, 0);\n    alignment140664475658912->addShape(70, 0);\n    alignment140664475658912->addShape(71, 0);\n    ccs.push_back(alignment140664475658912);\n\n    AlignmentConstraint *alignment140664475659184 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140664475659184->addShape(47, 0);\n    alignment140664475659184->addShape(72, 0);\n    alignment140664475659184->addShape(73, 0);\n    ccs.push_back(alignment140664475659184);\n\n    AlignmentConstraint *alignment140664475659424 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140664475659424->addShape(48, 0);\n    ccs.push_back(alignment140664475659424);\n\n    AlignmentConstraint *alignment140664475659552 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140664475659552->addShape(49, 0);\n    ccs.push_back(alignment140664475659552);\n\n    AlignmentConstraint *alignment140664475659712 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140664475659712->addShape(50, 0);\n    ccs.push_back(alignment140664475659712);\n\n    AlignmentConstraint *alignment140664475659872 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140664475659872->addShape(51, 0);\n    alignment140664475659872->addShape(55, 0);\n    ccs.push_back(alignment140664475659872);\n\n    AlignmentConstraint *alignment140664475660096 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140664475660096->addShape(52, 0);\n    alignment140664475660096->addShape(54, 0);\n    alignment140664475660096->addShape(56, 0);\n    ccs.push_back(alignment140664475660096);\n\n    AlignmentConstraint *alignment140664475660336 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140664475660336->addShape(53, 0);\n    alignment140664475660336->addShape(89, 0);\n    ccs.push_back(alignment140664475660336);\n\n    AlignmentConstraint *alignment140664475660528 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140664475660528->addShape(54, 0);\n    alignment140664475660528->addShape(56, 0);\n    ccs.push_back(alignment140664475660528);\n\n    AlignmentConstraint *alignment140664475660720 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140664475660720->addShape(55, 0);\n    ccs.push_back(alignment140664475660720);\n\n    AlignmentConstraint *alignment140664475660848 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140664475660848->addShape(56, 0);\n    ccs.push_back(alignment140664475660848);\n\n    AlignmentConstraint *alignment140664475661008 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140664475661008->addShape(57, 0);\n    alignment140664475661008->addShape(76, 0);\n    ccs.push_back(alignment140664475661008);\n\n    AlignmentConstraint *alignment140664475661232 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140664475661232->addShape(58, 0);\n    ccs.push_back(alignment140664475661232);\n\n    AlignmentConstraint *alignment140664475661360 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140664475661360->addShape(59, 0);\n    alignment140664475661360->addShape(88, 0);\n    ccs.push_back(alignment140664475661360);\n\n    AlignmentConstraint *alignment140664475661584 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140664475661584->addShape(60, 0);\n    alignment140664475661584->addShape(63, 0);\n    alignment140664475661584->addShape(64, 0);\n    alignment140664475661584->addShape(65, 0);\n    alignment140664475661584->addShape(67, 0);\n    ccs.push_back(alignment140664475661584);\n\n    AlignmentConstraint *alignment140664475661936 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140664475661936->addShape(61, 0);\n    alignment140664475661936->addShape(68, 0);\n    ccs.push_back(alignment140664475661936);\n\n    AlignmentConstraint *alignment140664475662160 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140664475662160->addShape(62, 0);\n    alignment140664475662160->addShape(66, 0);\n    ccs.push_back(alignment140664475662160);\n\n    AlignmentConstraint *alignment140664475662352 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140664475662352->addShape(63, 0);\n    alignment140664475662352->addShape(64, 0);\n    alignment140664475662352->addShape(65, 0);\n    alignment140664475662352->addShape(67, 0);\n    ccs.push_back(alignment140664475662352);\n\n    AlignmentConstraint *alignment140664475662544 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140664475662544->addShape(64, 0);\n    alignment140664475662544->addShape(65, 0);\n    alignment140664475662544->addShape(67, 0);\n    ccs.push_back(alignment140664475662544);\n\n    AlignmentConstraint *alignment140664475662816 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140664475662816->addShape(65, 0);\n    alignment140664475662816->addShape(67, 0);\n    ccs.push_back(alignment140664475662816);\n\n    AlignmentConstraint *alignment140664475663008 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140664475663008->addShape(66, 0);\n    ccs.push_back(alignment140664475663008);\n\n    AlignmentConstraint *alignment140664475663136 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140664475663136->addShape(67, 0);\n    ccs.push_back(alignment140664475663136);\n\n    AlignmentConstraint *alignment140664475663296 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140664475663296->addShape(68, 0);\n    ccs.push_back(alignment140664475663296);\n\n    AlignmentConstraint *alignment140664475663456 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140664475663456->addShape(69, 0);\n    ccs.push_back(alignment140664475663456);\n\n    AlignmentConstraint *alignment140664475663616 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140664475663616->addShape(70, 0);\n    alignment140664475663616->addShape(71, 0);\n    ccs.push_back(alignment140664475663616);\n\n    AlignmentConstraint *alignment140664475663840 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140664475663840->addShape(71, 0);\n    ccs.push_back(alignment140664475663840);\n\n    AlignmentConstraint *alignment140664475663968 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140664475663968->addShape(72, 0);\n    alignment140664475663968->addShape(73, 0);\n    ccs.push_back(alignment140664475663968);\n\n    AlignmentConstraint *alignment140664475664192 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140664475664192->addShape(73, 0);\n    ccs.push_back(alignment140664475664192);\n\n    AlignmentConstraint *alignment140664475664320 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140664475664320->addShape(74, 0);\n    ccs.push_back(alignment140664475664320);\n\n    AlignmentConstraint *alignment140664475664480 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140664475664480->addShape(76, 0);\n    ccs.push_back(alignment140664475664480);\n\n    AlignmentConstraint *alignment140664475664640 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140664475664640->addShape(77, 0);\n    alignment140664475664640->addShape(79, 0);\n    ccs.push_back(alignment140664475664640);\n\n    AlignmentConstraint *alignment140664475664864 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140664475664864->addShape(78, 0);\n    ccs.push_back(alignment140664475664864);\n\n    AlignmentConstraint *alignment140664475664992 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140664475664992->addShape(79, 0);\n    ccs.push_back(alignment140664475664992);\n\n    AlignmentConstraint *alignment140664475665152 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140664475665152->addShape(81, 0);\n    ccs.push_back(alignment140664475665152);\n\n    AlignmentConstraint *alignment140664475665312 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140664475665312->addShape(82, 0);\n    alignment140664475665312->addShape(85, 0);\n    ccs.push_back(alignment140664475665312);\n\n    AlignmentConstraint *alignment140664475665536 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140664475665536->addShape(83, 0);\n    ccs.push_back(alignment140664475665536);\n\n    AlignmentConstraint *alignment140664475665664 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140664475665664->addShape(84, 0);\n    ccs.push_back(alignment140664475665664);\n\n    AlignmentConstraint *alignment140664475665824 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140664475665824->addShape(85, 0);\n    ccs.push_back(alignment140664475665824);\n\n    AlignmentConstraint *alignment140664475665984 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140664475665984->addShape(86, 0);\n    ccs.push_back(alignment140664475665984);\n\n    AlignmentConstraint *alignment140664475666144 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140664475666144->addShape(87, 0);\n    ccs.push_back(alignment140664475666144);\n\n    AlignmentConstraint *alignment140664475666304 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140664475666304->addShape(88, 0);\n    ccs.push_back(alignment140664475666304);\n\n    AlignmentConstraint *alignment140664475666464 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140664475666464->addShape(89, 0);\n    ccs.push_back(alignment140664475666464);\n\n    AlignmentConstraint *alignment140664475666624 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140664475666624->addShape(90, 0);\n    ccs.push_back(alignment140664475666624);\n\n    AlignmentConstraint *alignment140664475666784 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140664475666784->addShape(91, 0);\n    ccs.push_back(alignment140664475666784);\n\n    AlignmentConstraint *alignment140664475666944 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140664475666944->addShape(92, 0);\n    ccs.push_back(alignment140664475666944);\n\n    AlignmentConstraint *alignment140664475667104 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140664475667104->addShape(93, 0);\n    ccs.push_back(alignment140664475667104);\n\n    SeparationConstraint *separation140664475667264 = new SeparationConstraint(vpsc::YDIM, alignment140664475657456, alignment140664475659552, 10, false);\n    ccs.push_back(separation140664475667264);\n\n    SeparationConstraint *separation140664475667440 = new SeparationConstraint(vpsc::YDIM, alignment140664475659552, alignment140664475657296, 11, false);\n    ccs.push_back(separation140664475667440);\n\n    SeparationConstraint *separation140664475667616 = new SeparationConstraint(vpsc::YDIM, alignment140664475657296, alignment140664475655344, 19, false);\n    ccs.push_back(separation140664475667616);\n\n    SeparationConstraint *separation140664475667792 = new SeparationConstraint(vpsc::YDIM, alignment140664475655344, alignment140664475657168, 13, false);\n    ccs.push_back(separation140664475667792);\n\n    SeparationConstraint *separation140664475667968 = new SeparationConstraint(vpsc::YDIM, alignment140664475657168, alignment140664475659424, 9, false);\n    ccs.push_back(separation140664475667968);\n\n    SeparationConstraint *separation140664475668144 = new SeparationConstraint(vpsc::YDIM, alignment140664475654912, alignment140664475658080, 22.5, false);\n    ccs.push_back(separation140664475668144);\n\n    SeparationConstraint *separation140664475668320 = new SeparationConstraint(vpsc::YDIM, alignment140664475658080, alignment140664475659872, 11, false);\n    ccs.push_back(separation140664475668320);\n\n    SeparationConstraint *separation140664475668496 = new SeparationConstraint(vpsc::YDIM, alignment140664475660720, alignment140664475666944, 9, false);\n    ccs.push_back(separation140664475668496);\n\n    SeparationConstraint *separation140664475668672 = new SeparationConstraint(vpsc::YDIM, alignment140664475666944, alignment140664475656624, 25, false);\n    ccs.push_back(separation140664475668672);\n\n    SeparationConstraint *separation140664475668848 = new SeparationConstraint(vpsc::YDIM, alignment140664475655104, alignment140664475658208, 26.75, false);\n    ccs.push_back(separation140664475668848);\n\n    SeparationConstraint *separation140664475669024 = new SeparationConstraint(vpsc::YDIM, alignment140664475658208, alignment140664475660096, 10.6667, false);\n    ccs.push_back(separation140664475669024);\n\n    SeparationConstraint *separation140664475669200 = new SeparationConstraint(vpsc::YDIM, alignment140664475660848, alignment140664475667104, 9, false);\n    ccs.push_back(separation140664475669200);\n\n    SeparationConstraint *separation140664475669376 = new SeparationConstraint(vpsc::YDIM, alignment140664475667104, alignment140664475666784, 24, false);\n    ccs.push_back(separation140664475669376);\n\n    SeparationConstraint *separation140664475669552 = new SeparationConstraint(vpsc::YDIM, alignment140664475666784, alignment140664475663840, 23, false);\n    ccs.push_back(separation140664475669552);\n\n    SeparationConstraint *separation140664475669728 = new SeparationConstraint(vpsc::YDIM, alignment140664475658368, alignment140664475663456, 13.75, false);\n    ccs.push_back(separation140664475669728);\n\n    SeparationConstraint *separation140664475669904 = new SeparationConstraint(vpsc::YDIM, alignment140664475663456, alignment140664475664192, 12, false);\n    ccs.push_back(separation140664475669904);\n\n    SeparationConstraint *separation140664475670080 = new SeparationConstraint(vpsc::YDIM, alignment140664475658640, alignment140664475649328, 18.75, false);\n    ccs.push_back(separation140664475670080);\n\n    SeparationConstraint *separation140664475670256 = new SeparationConstraint(vpsc::YDIM, alignment140664475649328, alignment140664475666464, 44, false);\n    ccs.push_back(separation140664475670256);\n\n    SeparationConstraint *separation140664475670432 = new SeparationConstraint(vpsc::YDIM, alignment140664475654336, alignment140664475665152, 35.3333, false);\n    ccs.push_back(separation140664475670432);\n\n    SeparationConstraint *separation140664475670608 = new SeparationConstraint(vpsc::YDIM, alignment140664475665152, alignment140664475661360, 37, false);\n    ccs.push_back(separation140664475670608);\n\n    SeparationConstraint *separation140664475670784 = new SeparationConstraint(vpsc::YDIM, alignment140664475666304, alignment140664475665824, 3, false);\n    ccs.push_back(separation140664475670784);\n\n    SeparationConstraint *separation140664475670960 = new SeparationConstraint(vpsc::YDIM, alignment140664475665824, alignment140664475665536, 19, false);\n    ccs.push_back(separation140664475670960);\n\n    SeparationConstraint *separation140664475671136 = new SeparationConstraint(vpsc::YDIM, alignment140664475665536, alignment140664475665984, 12, false);\n    ccs.push_back(separation140664475671136);\n\n    SeparationConstraint *separation140664475671312 = new SeparationConstraint(vpsc::YDIM, alignment140664475665984, alignment140664475666144, 30, false);\n    ccs.push_back(separation140664475671312);\n\n    SeparationConstraint *separation140664475671488 = new SeparationConstraint(vpsc::YDIM, alignment140664475666144, alignment140664475661232, 6, false);\n    ccs.push_back(separation140664475671488);\n\n    SeparationConstraint *separation140664475671664 = new SeparationConstraint(vpsc::YDIM, alignment140664475661232, alignment140664475653952, 37, false);\n    ccs.push_back(separation140664475671664);\n\n    SeparationConstraint *separation140664475508000 = new SeparationConstraint(vpsc::YDIM, alignment140664475653952, alignment140664475659712, 35, false);\n    ccs.push_back(separation140664475508000);\n\n    SeparationConstraint *separation140664475508176 = new SeparationConstraint(vpsc::YDIM, alignment140664475659712, alignment140664475653792, 37, false);\n    ccs.push_back(separation140664475508176);\n\n    SeparationConstraint *separation140664475508352 = new SeparationConstraint(vpsc::YDIM, alignment140664475653792, alignment140664475664480, 35, false);\n    ccs.push_back(separation140664475508352);\n\n    SeparationConstraint *separation140664475508528 = new SeparationConstraint(vpsc::YDIM, alignment140664475664480, alignment140664475664864, 11, false);\n    ccs.push_back(separation140664475508528);\n\n    SeparationConstraint *separation140664475508704 = new SeparationConstraint(vpsc::YDIM, alignment140664475664864, alignment140664475653632, 23, false);\n    ccs.push_back(separation140664475508704);\n\n    SeparationConstraint *separation140664475508880 = new SeparationConstraint(vpsc::YDIM, alignment140664475653632, alignment140664475665664, 25, false);\n    ccs.push_back(separation140664475508880);\n\n    SeparationConstraint *separation140664475509056 = new SeparationConstraint(vpsc::YDIM, alignment140664475665664, alignment140664475664320, 25, false);\n    ccs.push_back(separation140664475509056);\n\n    SeparationConstraint *separation140664475509232 = new SeparationConstraint(vpsc::YDIM, alignment140664475664320, alignment140664475639232, 33, false);\n    ccs.push_back(separation140664475509232);\n\n    SeparationConstraint *separation140664475509408 = new SeparationConstraint(vpsc::YDIM, alignment140664475639232, alignment140664475663136, 10, false);\n    ccs.push_back(separation140664475509408);\n\n    SeparationConstraint *separation140664475509584 = new SeparationConstraint(vpsc::YDIM, alignment140664475639392, alignment140664475639072, 10.375, false);\n    ccs.push_back(separation140664475509584);\n\n    SeparationConstraint *separation140664475509760 = new SeparationConstraint(vpsc::YDIM, alignment140664475639072, alignment140664475663296, 32, false);\n    ccs.push_back(separation140664475509760);\n\n    SeparationConstraint *separation140664475509936 = new SeparationConstraint(vpsc::YDIM, alignment140664475657616, alignment140664475666624, 4.33333, false);\n    ccs.push_back(separation140664475509936);\n\n    SeparationConstraint *separation140664475510112 = new SeparationConstraint(vpsc::YDIM, alignment140664475650480, alignment140664475650864, 31.5, false);\n    ccs.push_back(separation140664475510112);\n\n    SeparationConstraint *separation140664475510288 = new SeparationConstraint(vpsc::YDIM, alignment140664475650864, alignment140664475663008, 10, false);\n    ccs.push_back(separation140664475510288);\n\n    SeparationConstraint *separation140664475510464 = new SeparationConstraint(vpsc::YDIM, alignment140664475663008, alignment140664475664992, 11, false);\n    ccs.push_back(separation140664475510464);\n\n    AlignmentConstraint *alignment140664475511088 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140664475511088->addShape(75, 0);\n    alignment140664475511088->addShape(75, 0);\n    ccs.push_back(alignment140664475511088);\n\n    SeparationConstraint *separation140664475511312 = new SeparationConstraint(vpsc::YDIM, 75, 75, -50, true);\n    ccs.push_back(separation140664475511312);\n\n    AlignmentConstraint *alignment140664475511456 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140664475511456->addShape(0, 0);\n    alignment140664475511456->addShape(94, 0);\n    ccs.push_back(alignment140664475511456);\n\n    SeparationConstraint *separation140664475511680 = new SeparationConstraint(vpsc::XDIM, 0, 94, 62, true);\n    ccs.push_back(separation140664475511680);\n\n    AlignmentConstraint *alignment140664475511824 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140664475511824->addShape(1, 0);\n    alignment140664475511824->addShape(95, 0);\n    ccs.push_back(alignment140664475511824);\n\n    SeparationConstraint *separation140664475512048 = new SeparationConstraint(vpsc::YDIM, 1, 95, -50, true);\n    ccs.push_back(separation140664475512048);\n\n    AlignmentConstraint *alignment140664475512192 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140664475512192->addShape(2, 0);\n    alignment140664475512192->addShape(96, 0);\n    ccs.push_back(alignment140664475512192);\n\n    SeparationConstraint *separation140664475512416 = new SeparationConstraint(vpsc::XDIM, 2, 96, 62, true);\n    ccs.push_back(separation140664475512416);\n\n    AlignmentConstraint *alignment140664475512560 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140664475512560->addShape(3, 0);\n    alignment140664475512560->addShape(97, 0);\n    ccs.push_back(alignment140664475512560);\n\n    SeparationConstraint *separation140664475512784 = new SeparationConstraint(vpsc::YDIM, 3, 97, -50, true);\n    ccs.push_back(separation140664475512784);\n\n    AlignmentConstraint *alignment140664475650992 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140664475650992->addShape(7, 0);\n    alignment140664475650992->addShape(98, 0);\n    ccs.push_back(alignment140664475650992);\n\n    SeparationConstraint *separation140664475651216 = new SeparationConstraint(vpsc::XDIM, 7, 98, 62, true);\n    ccs.push_back(separation140664475651216);\n\n    AlignmentConstraint *alignment140664475651360 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140664475651360->addShape(8, 0);\n    alignment140664475651360->addShape(99, 0);\n    ccs.push_back(alignment140664475651360);\n\n    SeparationConstraint *separation140664475651584 = new SeparationConstraint(vpsc::YDIM, 8, 99, -50, true);\n    ccs.push_back(separation140664475651584);\n\n    AlignmentConstraint *alignment140664475651728 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140664475651728->addShape(9, 0);\n    alignment140664475651728->addShape(100, 0);\n    ccs.push_back(alignment140664475651728);\n\n    SeparationConstraint *separation140664475651952 = new SeparationConstraint(vpsc::YDIM, 9, 100, -50, true);\n    ccs.push_back(separation140664475651952);\n\n    AlignmentConstraint *alignment140664475652096 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140664475652096->addShape(10, 0);\n    alignment140664475652096->addShape(101, 0);\n    ccs.push_back(alignment140664475652096);\n\n    SeparationConstraint *separation140664475652320 = new SeparationConstraint(vpsc::XDIM, 10, 101, 62, true);\n    ccs.push_back(separation140664475652320);\n\n    AlignmentConstraint *alignment140664475652464 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140664475652464->addShape(11, 0);\n    alignment140664475652464->addShape(102, 0);\n    ccs.push_back(alignment140664475652464);\n\n    SeparationConstraint *separation140664475652688 = new SeparationConstraint(vpsc::XDIM, 11, 102, 62, true);\n    ccs.push_back(separation140664475652688);\n\n    AlignmentConstraint *alignment140664475652832 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140664475652832->addShape(12, 0);\n    alignment140664475652832->addShape(103, 0);\n    ccs.push_back(alignment140664475652832);\n\n    SeparationConstraint *separation140664475517040 = new SeparationConstraint(vpsc::XDIM, 12, 103, 62, true);\n    ccs.push_back(separation140664475517040);\n\n    AlignmentConstraint *alignment140664475517184 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140664475517184->addShape(13, 0);\n    alignment140664475517184->addShape(104, 0);\n    ccs.push_back(alignment140664475517184);\n\n    SeparationConstraint *separation140664475517408 = new SeparationConstraint(vpsc::YDIM, 13, 104, -50, true);\n    ccs.push_back(separation140664475517408);\n\n    AlignmentConstraint *alignment140664475517552 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140664475517552->addShape(14, 0);\n    alignment140664475517552->addShape(105, 0);\n    ccs.push_back(alignment140664475517552);\n\n    SeparationConstraint *separation140664475517776 = new SeparationConstraint(vpsc::YDIM, 14, 105, -50, true);\n    ccs.push_back(separation140664475517776);\n\n    AlignmentConstraint *alignment140664475517920 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140664475517920->addShape(16, 0);\n    alignment140664475517920->addShape(106, 0);\n    ccs.push_back(alignment140664475517920);\n\n    SeparationConstraint *separation140664475518144 = new SeparationConstraint(vpsc::XDIM, 16, 106, 62, true);\n    ccs.push_back(separation140664475518144);\n\n    AlignmentConstraint *alignment140664475518288 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140664475518288->addShape(18, 0);\n    alignment140664475518288->addShape(107, 0);\n    ccs.push_back(alignment140664475518288);\n\n    SeparationConstraint *separation140664475518512 = new SeparationConstraint(vpsc::XDIM, 18, 107, 62, true);\n    ccs.push_back(separation140664475518512);\n\n    AlignmentConstraint *alignment140664475518656 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140664475518656->addShape(19, 0);\n    alignment140664475518656->addShape(108, 0);\n    ccs.push_back(alignment140664475518656);\n\n    SeparationConstraint *separation140664475518880 = new SeparationConstraint(vpsc::XDIM, 19, 108, 62, true);\n    ccs.push_back(separation140664475518880);\n\n    AlignmentConstraint *alignment140664475519024 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140664475519024->addShape(20, 0);\n    alignment140664475519024->addShape(109, 0);\n    ccs.push_back(alignment140664475519024);\n\n    SeparationConstraint *separation140664475519248 = new SeparationConstraint(vpsc::XDIM, 20, 109, 62, true);\n    ccs.push_back(separation140664475519248);\n\n    AlignmentConstraint *alignment140664475519392 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140664475519392->addShape(22, 0);\n    alignment140664475519392->addShape(110, 0);\n    ccs.push_back(alignment140664475519392);\n\n    SeparationConstraint *separation140664475519616 = new SeparationConstraint(vpsc::YDIM, 22, 110, -50, true);\n    ccs.push_back(separation140664475519616);\n\n    AlignmentConstraint *alignment140664475519760 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140664475519760->addShape(23, 0);\n    alignment140664475519760->addShape(111, 0);\n    ccs.push_back(alignment140664475519760);\n\n    SeparationConstraint *separation140664475519984 = new SeparationConstraint(vpsc::XDIM, 23, 111, 62, true);\n    ccs.push_back(separation140664475519984);\n\n    AlignmentConstraint *alignment140664475520128 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140664475520128->addShape(24, 0);\n    alignment140664475520128->addShape(112, 0);\n    ccs.push_back(alignment140664475520128);\n\n    SeparationConstraint *separation140664475520352 = new SeparationConstraint(vpsc::YDIM, 24, 112, -50, true);\n    ccs.push_back(separation140664475520352);\n\n    AlignmentConstraint *alignment140664475520496 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140664475520496->addShape(25, 0);\n    alignment140664475520496->addShape(113, 0);\n    ccs.push_back(alignment140664475520496);\n\n    SeparationConstraint *separation140664475520720 = new SeparationConstraint(vpsc::YDIM, 25, 113, -50, true);\n    ccs.push_back(separation140664475520720);\n\n    AlignmentConstraint *alignment140664475520864 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140664475520864->addShape(26, 0);\n    alignment140664475520864->addShape(114, 0);\n    ccs.push_back(alignment140664475520864);\n\n    SeparationConstraint *separation140664475521088 = new SeparationConstraint(vpsc::XDIM, 26, 114, 62, true);\n    ccs.push_back(separation140664475521088);\n\n    AlignmentConstraint *alignment140664475521232 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140664475521232->addShape(27, 0);\n    alignment140664475521232->addShape(115, 0);\n    ccs.push_back(alignment140664475521232);\n\n    SeparationConstraint *separation140664475521456 = new SeparationConstraint(vpsc::XDIM, 27, 115, 62, true);\n    ccs.push_back(separation140664475521456);\n\n    AlignmentConstraint *alignment140664475521600 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140664475521600->addShape(28, 0);\n    alignment140664475521600->addShape(116, 0);\n    ccs.push_back(alignment140664475521600);\n\n    SeparationConstraint *separation140664475521824 = new SeparationConstraint(vpsc::YDIM, 28, 116, -50, true);\n    ccs.push_back(separation140664475521824);\n\n    AlignmentConstraint *alignment140664475521968 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140664475521968->addShape(29, 0);\n    alignment140664475521968->addShape(117, 0);\n    ccs.push_back(alignment140664475521968);\n\n    SeparationConstraint *separation140664475522192 = new SeparationConstraint(vpsc::YDIM, 29, 117, -50, true);\n    ccs.push_back(separation140664475522192);\n\n    AlignmentConstraint *alignment140664475522336 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140664475522336->addShape(30, 0);\n    alignment140664475522336->addShape(118, 0);\n    ccs.push_back(alignment140664475522336);\n\n    SeparationConstraint *separation140664475522560 = new SeparationConstraint(vpsc::YDIM, 30, 118, -50, true);\n    ccs.push_back(separation140664475522560);\n\n    AlignmentConstraint *alignment140664475522704 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140664475522704->addShape(31, 0);\n    alignment140664475522704->addShape(119, 0);\n    ccs.push_back(alignment140664475522704);\n\n    SeparationConstraint *separation140664475522928 = new SeparationConstraint(vpsc::XDIM, 31, 119, 62, true);\n    ccs.push_back(separation140664475522928);\n\n    AlignmentConstraint *alignment140664475523072 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140664475523072->addShape(32, 0);\n    alignment140664475523072->addShape(120, 0);\n    ccs.push_back(alignment140664475523072);\n\n    SeparationConstraint *separation140664475523296 = new SeparationConstraint(vpsc::XDIM, 32, 120, 62, true);\n    ccs.push_back(separation140664475523296);\n\n    AlignmentConstraint *alignment140664475523440 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140664475523440->addShape(33, 0);\n    alignment140664475523440->addShape(121, 0);\n    ccs.push_back(alignment140664475523440);\n\n    SeparationConstraint *separation140664475523664 = new SeparationConstraint(vpsc::XDIM, 33, 121, 62, true);\n    ccs.push_back(separation140664475523664);\n\n    AlignmentConstraint *alignment140664475523808 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140664475523808->addShape(34, 0);\n    alignment140664475523808->addShape(122, 0);\n    ccs.push_back(alignment140664475523808);\n\n    SeparationConstraint *separation140664475524032 = new SeparationConstraint(vpsc::YDIM, 34, 122, -50, true);\n    ccs.push_back(separation140664475524032);\n\n    AlignmentConstraint *alignment140664475524176 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140664475524176->addShape(35, 0);\n    alignment140664475524176->addShape(123, 0);\n    ccs.push_back(alignment140664475524176);\n\n    SeparationConstraint *separation140664475524400 = new SeparationConstraint(vpsc::YDIM, 35, 123, -50, true);\n    ccs.push_back(separation140664475524400);\n\n    AlignmentConstraint *alignment140664475524544 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140664475524544->addShape(36, 0);\n    alignment140664475524544->addShape(124, 0);\n    ccs.push_back(alignment140664475524544);\n\n    SeparationConstraint *separation140664475524768 = new SeparationConstraint(vpsc::YDIM, 36, 124, -50, true);\n    ccs.push_back(separation140664475524768);\n\n    AlignmentConstraint *alignment140664475524912 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140664475524912->addShape(37, 0);\n    alignment140664475524912->addShape(125, 0);\n    ccs.push_back(alignment140664475524912);\n\n    SeparationConstraint *separation140664475525136 = new SeparationConstraint(vpsc::YDIM, 37, 125, -50, true);\n    ccs.push_back(separation140664475525136);\n\n    AlignmentConstraint *alignment140664475525280 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140664475525280->addShape(38, 0);\n    alignment140664475525280->addShape(126, 0);\n    ccs.push_back(alignment140664475525280);\n\n    SeparationConstraint *separation140664475525504 = new SeparationConstraint(vpsc::YDIM, 38, 126, -50, true);\n    ccs.push_back(separation140664475525504);\n\n    AlignmentConstraint *alignment140664475525648 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140664475525648->addShape(40, 0);\n    alignment140664475525648->addShape(127, 0);\n    ccs.push_back(alignment140664475525648);\n\n    SeparationConstraint *separation140664475525872 = new SeparationConstraint(vpsc::YDIM, 40, 127, -50, true);\n    ccs.push_back(separation140664475525872);\n\n    AlignmentConstraint *alignment140664475526016 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140664475526016->addShape(41, 0);\n    alignment140664475526016->addShape(128, 0);\n    ccs.push_back(alignment140664475526016);\n\n    SeparationConstraint *separation140664475526240 = new SeparationConstraint(vpsc::XDIM, 41, 128, 62, true);\n    ccs.push_back(separation140664475526240);\n\n    AlignmentConstraint *alignment140664475526384 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140664475526384->addShape(42, 0);\n    alignment140664475526384->addShape(129, 0);\n    ccs.push_back(alignment140664475526384);\n\n    SeparationConstraint *separation140664475526608 = new SeparationConstraint(vpsc::YDIM, 42, 129, -50, true);\n    ccs.push_back(separation140664475526608);\n\n    AlignmentConstraint *alignment140664475526752 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140664475526752->addShape(43, 0);\n    alignment140664475526752->addShape(130, 0);\n    ccs.push_back(alignment140664475526752);\n\n    SeparationConstraint *separation140664475526976 = new SeparationConstraint(vpsc::YDIM, 43, 130, -50, true);\n    ccs.push_back(separation140664475526976);\n\n    AlignmentConstraint *alignment140664475527120 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140664475527120->addShape(44, 0);\n    alignment140664475527120->addShape(131, 0);\n    ccs.push_back(alignment140664475527120);\n\n    SeparationConstraint *separation140664475527344 = new SeparationConstraint(vpsc::YDIM, 44, 131, -50, true);\n    ccs.push_back(separation140664475527344);\n\n    AlignmentConstraint *alignment140664475527488 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140664475527488->addShape(45, 0);\n    alignment140664475527488->addShape(132, 0);\n    ccs.push_back(alignment140664475527488);\n\n    SeparationConstraint *separation140664475527712 = new SeparationConstraint(vpsc::YDIM, 45, 132, -50, true);\n    ccs.push_back(separation140664475527712);\n\n    AlignmentConstraint *alignment140664475527856 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140664475527856->addShape(46, 0);\n    alignment140664475527856->addShape(133, 0);\n    ccs.push_back(alignment140664475527856);\n\n    SeparationConstraint *separation140664475528080 = new SeparationConstraint(vpsc::YDIM, 46, 133, -50, true);\n    ccs.push_back(separation140664475528080);\n\n    AlignmentConstraint *alignment140664475528224 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140664475528224->addShape(47, 0);\n    alignment140664475528224->addShape(134, 0);\n    ccs.push_back(alignment140664475528224);\n\n    SeparationConstraint *separation140664475528448 = new SeparationConstraint(vpsc::YDIM, 47, 134, -50, true);\n    ccs.push_back(separation140664475528448);\n\n    AlignmentConstraint *alignment140664475528592 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140664475528592->addShape(77, 0);\n    alignment140664475528592->addShape(135, 0);\n    ccs.push_back(alignment140664475528592);\n\n    SeparationConstraint *separation140664475528816 = new SeparationConstraint(vpsc::YDIM, 77, 135, -50, true);\n    ccs.push_back(separation140664475528816);\n\n    AlignmentConstraint *alignment140664475528960 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140664475528960->addShape(78, 0);\n    alignment140664475528960->addShape(136, 0);\n    ccs.push_back(alignment140664475528960);\n\n    SeparationConstraint *separation140664475529184 = new SeparationConstraint(vpsc::YDIM, 78, 136, -50, true);\n    ccs.push_back(separation140664475529184);\n\n    AlignmentConstraint *alignment140664475529328 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140664475529328->addShape(79, 0);\n    alignment140664475529328->addShape(137, 0);\n    ccs.push_back(alignment140664475529328);\n\n    SeparationConstraint *separation140664475529552 = new SeparationConstraint(vpsc::YDIM, 79, 137, -50, true);\n    ccs.push_back(separation140664475529552);\n\n    AlignmentConstraint *alignment140664475529696 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140664475529696->addShape(81, 0);\n    alignment140664475529696->addShape(138, 0);\n    ccs.push_back(alignment140664475529696);\n\n    SeparationConstraint *separation140664475529920 = new SeparationConstraint(vpsc::XDIM, 81, 138, 62, true);\n    ccs.push_back(separation140664475529920);\n\n    AlignmentConstraint *alignment140664475530064 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140664475530064->addShape(82, 0);\n    alignment140664475530064->addShape(139, 0);\n    ccs.push_back(alignment140664475530064);\n\n    SeparationConstraint *separation140664475530288 = new SeparationConstraint(vpsc::YDIM, 82, 139, -50, true);\n    ccs.push_back(separation140664475530288);\n\n    AlignmentConstraint *alignment140664475530432 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140664475530432->addShape(83, 0);\n    alignment140664475530432->addShape(140, 0);\n    ccs.push_back(alignment140664475530432);\n\n    SeparationConstraint *separation140664475530656 = new SeparationConstraint(vpsc::YDIM, 83, 140, -50, true);\n    ccs.push_back(separation140664475530656);\n\n    AlignmentConstraint *alignment140664475530800 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140664475530800->addShape(84, 0);\n    alignment140664475530800->addShape(141, 0);\n    ccs.push_back(alignment140664475530800);\n\n    SeparationConstraint *separation140664475531024 = new SeparationConstraint(vpsc::YDIM, 84, 141, -50, true);\n    ccs.push_back(separation140664475531024);\n\n    AlignmentConstraint *alignment140664475531168 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140664475531168->addShape(85, 0);\n    alignment140664475531168->addShape(142, 0);\n    ccs.push_back(alignment140664475531168);\n\n    SeparationConstraint *separation140664475531392 = new SeparationConstraint(vpsc::XDIM, 85, 142, 62, true);\n    ccs.push_back(separation140664475531392);\n\n    AlignmentConstraint *alignment140664475531536 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140664475531536->addShape(87, 0);\n    alignment140664475531536->addShape(143, 0);\n    ccs.push_back(alignment140664475531536);\n\n    SeparationConstraint *separation140664475531760 = new SeparationConstraint(vpsc::YDIM, 87, 143, -50, true);\n    ccs.push_back(separation140664475531760);\n\n    AlignmentConstraint *alignment140664475531904 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140664475531904->addShape(88, 0);\n    alignment140664475531904->addShape(144, 0);\n    ccs.push_back(alignment140664475531904);\n\n    SeparationConstraint *separation140664475532128 = new SeparationConstraint(vpsc::YDIM, 88, 144, -50, true);\n    ccs.push_back(separation140664475532128);\n\n    AlignmentConstraint *alignment140664475532272 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140664475532272->addShape(90, 0);\n    alignment140664475532272->addShape(145, 0);\n    ccs.push_back(alignment140664475532272);\n\n    SeparationConstraint *separation140664475532496 = new SeparationConstraint(vpsc::YDIM, 90, 145, -50, true);\n    ccs.push_back(separation140664475532496);\n\n    AlignmentConstraint *alignment140664475532640 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140664475532640->addShape(91, 0);\n    alignment140664475532640->addShape(146, 0);\n    ccs.push_back(alignment140664475532640);\n\n    SeparationConstraint *separation140664475532864 = new SeparationConstraint(vpsc::XDIM, 91, 146, 62, true);\n    ccs.push_back(separation140664475532864);\n\n    AlignmentConstraint *alignment140664475533008 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140664475533008->addShape(92, 0);\n    alignment140664475533008->addShape(147, 0);\n    ccs.push_back(alignment140664475533008);\n\n    SeparationConstraint *separation140664475533232 = new SeparationConstraint(vpsc::YDIM, 92, 147, -50, true);\n    ccs.push_back(separation140664475533232);\n\n    AlignmentConstraint *alignment140664475533376 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140664475533376->addShape(93, 0);\n    alignment140664475533376->addShape(148, 0);\n    ccs.push_back(alignment140664475533376);\n\n    SeparationConstraint *separation140664475533600 = new SeparationConstraint(vpsc::YDIM, 93, 148, -50, true);\n    ccs.push_back(separation140664475533600);\n\n    RootCluster *cluster140664475533920 = new RootCluster();\n    \n    RectangularCluster *cluster140664475534416 = new RectangularCluster(5);\n    cluster140664475534416->addChildNode(149);\n    cluster140664475534416->addChildNode(150);\n    cluster140664475534416->addChildNode(151);\n    cluster140664475534416->addChildNode(152);\n    cluster140664475533920->addChildCluster(cluster140664475534416);\n    \n    RectangularCluster *cluster140664475535040 = new RectangularCluster(6);\n    cluster140664475535040->addChildNode(153);\n    cluster140664475533920->addChildCluster(cluster140664475535040);\n    \n    RectangularCluster *cluster140664475535648 = new RectangularCluster(15);\n    cluster140664475533920->addChildCluster(cluster140664475535648);\n    \n    RectangularCluster *cluster140664475535952 = new RectangularCluster(17);\n    cluster140664475535952->addChildNode(154);\n    cluster140664475535952->addChildNode(155);\n    cluster140664475533920->addChildCluster(cluster140664475535952);\n    \n    RectangularCluster *cluster140664475536320 = new RectangularCluster(21);\n    cluster140664475536320->addChildNode(156);\n    cluster140664475533920->addChildCluster(cluster140664475536320);\n    \n    RectangularCluster *cluster140664475536720 = new RectangularCluster(39);\n    cluster140664475533920->addChildCluster(cluster140664475536720);\n    \n    RectangularCluster *cluster140664475537056 = new RectangularCluster(80);\n    cluster140664475537056->addChildNode(157);\n    cluster140664475533920->addChildCluster(cluster140664475537056);\n    \n    ConstrainedFDLayout alg(rs, es, defaultEdgeLength);\n    alg.setAvoidNodeOverlaps(true);\n    alg.setClusterHierarchy(cluster140664475533920);\n    alg.setConstraints(ccs);\n    alg.makeFeasible();\n    \n    alg.outputInstanceToSVG(\"test-rectclustershapecontainment\");\n    //alg.run();\n    alg.freeAssociatedObjects();\n    \n    return 0;\n};\n"
  },
  {
    "path": "cola/libcola/tests/resize.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libcola - A library providing force-directed network layout using the \n *           stress-majorization method subject to separation constraints.\n *\n * Copyright (C) 2006-2008  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library in the file LICENSE; if not, \n * write to the Free Software Foundation, Inc., 59 Temple Place, \n * Suite 330, Boston, MA  02111-1307  USA\n *\n*/\n\n/** \\file nodedragging.cpp\n *\n * tests interaction with layout and solver.  We have a number of disconnected\n * shapes.  One shape is \"dragged\" through the others.  Overlaps should be\n * avoided.\n */\n/*\n* Authors:\n*   Tim Dwyer <tgdwyer@gmail.com>\n*/\n#include <iostream>\n#include <iomanip>\n#include <fstream>\n\n#include <vector>\n#include <valarray>\n#include <algorithm>\n#include <float.h>\n#include <libcola/cola.h>\n#include <libtopology/topology_graph.h>\n#include <libproject/project.h>\n#include \"graphlayouttest.h\"\nusing namespace std;\nusing namespace cola;\n\nstring outFName=\"resize\";\n\ntopology::Node* addNode(\n        topology::Nodes& vs, vpsc::Rectangle* r) {\n    topology::Node *v = new topology::Node(vs.size(), r);\n    vs.push_back(v);\n    return v;\n}\nvoid addToPath(topology::EdgePoints& ps, topology::Node *v, topology::EdgePoint::RectIntersect i) {\n    ps.push_back(new topology::EdgePoint(v,i));\n}\nstruct Test : TestConvergence {\n    Test(const double d,const unsigned i,topology::Nodes& vs, topology::Edges& es) : TestConvergence(d,i), vs(vs), es(es), iter(1) {}\n    bool operator()(const double new_stress, valarray<double> & X, valarray<double> & Y) {\n        bool converged = TestConvergence::operator()(new_stress,X,Y);\n        if(converged) {\n            cout << \"stress=\"<<new_stress<<\" iteration=\"<<iter<<endl;\n            stringstream ss;\n            ss<<outFName<<\"-\"<< setfill('0') << setw(3) << iter++ << \".svg\";\n            writeFile(vs,es,ss.str());\n        }\n        return converged;\n    }\n    double lastStress;\n    topology::Nodes& vs;\n    topology::Edges& es;\n    int iter;\n};\n\nvoid resize() {\n//printf(\n//\"tests resizing of a shape.  We have a number of disconnected\"\n//\"shapes.  One shape is 'enlarged'.  Overlaps should be\"\n//\"avoided.\"\n//\"\\n\");\n    const unsigned V = 9;\n    Edge edge_array[] = { Edge(0, 1), Edge(1, 2), Edge(2, 0) };\n    const std::size_t E = sizeof(edge_array) / sizeof(Edge);\n    vector<Edge> es(edge_array,edge_array+E);\n    vector<vpsc::Rectangle*> rs;\n    const double w=54, h=34;\n    const double\n        x[]={406, 444, 474, 406, 441, 375, 408, 373, 339},\n        y[]={279, 224, 179, 92, 135, 135, 179, 226, 179};\n    const unsigned resizeID=6;\n    for(unsigned i=0;i<V;++i) {\n        rs.push_back(new vpsc::Rectangle(x[i],x[i]+w,y[i],y[i]+h));\n    }\n    double idealLength=60;\n    // set up topology graph\n    topology::Nodes vs;\n    for(vector<Rectangle*>::iterator i = rs.begin(); i!=rs.end();++i) {\n        addNode(vs,*i);\n    }\n    topology::Edges tes;\n    writeFile(vs,tes,outFName+\"-000.svg\");\n\n    Resizes resize;\n    vpsc::Rectangle* r=rs[resizeID];\n    resize.push_back(Resize(resizeID,r->getCentreX()-30, r->getCentreY()-30,\n            r->width()+60,r->height()+60));\n    PreIteration preIteration(resize);\n    Test test(0.00001,100,vs,tes);\n    ConstrainedFDLayout alg(rs,es,idealLength,nullptr,test,&preIteration);\n    alg.setTopology(&vs,&tes);\n\n    alg.run(true,true);\n\n    double finalStress=alg.computeStress();\n    printf(\"finalStress=%f\\n\",finalStress);\n\n    //assert(finalStress<1e-5);\n    for_each(rs.begin(),rs.end(),delete_object());\n    for_each(tes.begin(),tes.end(),delete_object());\n    for_each(vs.begin(),vs.end(),delete_object());\n}\nint main() {\n\tresize();\n    return 0;\n}\n// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=4:softtabstop=4:textwidth=80 :\n\n"
  },
  {
    "path": "cola/libcola/tests/runtest.sh",
    "content": "#!/bin/bash\nr=0\nwhile [ $r == 0 ]\ndo\n\t./beautify\n\tr=$?\n\techo result=$r\ndone\n"
  },
  {
    "path": "cola/libcola/tests/scale_free.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libcola - A library providing force-directed network layout using the \n *           stress-majorization method subject to separation constraints.\n *\n * Copyright (C) 2006-2008  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library in the file LICENSE; if not, \n * write to the Free Software Foundation, Inc., 59 Temple Place, \n * Suite 330, Boston, MA  02111-1307  USA\n *\n*/\n\n// generates a random graph with a power-law distribution of node degrees\n// the algorithm is pretty much the Barabasi-Albert model but with an extra step\n// so that I can guarantee the number of nodes in the graph.\n// We begin with an initial chain of m nodes.\n// Then, we add new nodes, connecting them to existing nodes v with probability\n// degree(v)/(sum all degrees)\n// We perform an extra step, looking for disconnected nodes, connecting them\n// to other nodes again with probability dependent on degree\n#include<iostream>\n#include<vector>\n#include <cmath>\n#include <time.h>\n#include <valarray>\n\n#include \"graphlayouttest.h\"\n\nvoid scale_free(const unsigned n = 50) {\n    const unsigned m = 3; // begin with a chain of m nodes\n    const double g=0.08; // edge density, every time we add a node we add 1+g*rand(0-1) edges\n                  // connecting them to existing nodes with probability based on degree\n    unsigned d[n];\n    double defaultEdgeLength=100;\n    vector<Edge> es;\n    CompoundConstraints cx,cy;\n    for(unsigned i=0;i<n;i++) {\n        d[i]=0;\n    }\n    unsigned sumdegree=0;\n    for(unsigned i=1;i<m;i++) {\n        es.push_back(make_pair(i-1,i)); \n        d[i]++;d[i-1]++;\n        sumdegree+=2;\n    }\n    srand(3);\n    for(unsigned i=2;i<n;i++) {\n        for(unsigned j=0;j<i;j++) {\n            double p=(double)d[j]/(double)sumdegree;\n            double r=(double)rand()/(double)RAND_MAX;\n            if(r*p>g) {\n                es.push_back(make_pair(j,i)); \n                d[j]++;d[i]++;\n                sumdegree+=2;\n            }\n        }\n    }\n    for(unsigned i=0;i<n;i++) {\n        if(d[i]==0) {\n            double maxP=0;\n            unsigned end=0;\n            for(unsigned j=0;j<n;j++) {\n                if(j==i) continue;\n                double p=(double)d[j]/(double)sumdegree;\n                double r=(double)rand()/(double)RAND_MAX;\n                if(r*p>maxP) {\n                    maxP=r*p;\n                    end=j;\n                }\n            }\n            if(end>i) {\n                es.push_back(make_pair(i,end)); \n            } else {\n                es.push_back(make_pair(end,i)); \n            }\n            d[end]++;d[i]++;\n            sumdegree+=2;\n        }\n    }\n    valarray<double> eweights(es.size());\n    sort(d,d+n);\n    unsigned degree=0,ctr=0;\n    printf(\"degree distribution:\\n\");\n    for(unsigned i=0;i<n;i++) {\n        if(degree!=d[i]) {\n            if(degree!=0) printf(\"%d,%d\\n\",degree,ctr);\n            degree=d[i]; \n            ctr=0;\n        }\n        ctr++;\n    }\n    printf(\"%d,%d\\n\",degree,ctr);\n    for(unsigned i=0;i<es.size();i++) {\n        unsigned a=es[i].first, b=es[i].second;\n        eweights[i]=1;\n        cy.push_back(new SeparationConstraint(a,b,defaultEdgeLength/3));\n    }\n\n    cout << \"|V|=\"<<n<<endl;\n    double width=1000;\n    double height=1000;\n    vector<pair<double,double> > startpos(n);\n    for(unsigned i=0;i<n;i++) {\n        double x=getRand(width), y=getRand(height);\n        startpos[i]=make_pair(x,y);\n    }\n    const char *f=\"scalefree\";\n    //run_test(startpos,es,defaultEdgeLength,cx,cy,CG,false,f,\"cg\");\n    //run_test(startpos,es,defaultEdgeLength,cx,cy,IP,false,f,\"ip\");\n    //run_test(startpos,es,defaultEdgeLength,cx,cy,UGP,false,f,\"ugp\");\n    //run_test(startpos,es,defaultEdgeLength,cx,cy,SGP,false,f,\"sgp\");\n    //run_test(startpos,es,defaultEdgeLength,cx,cy,IP,true,f,\"cip\");\n    //run_test(startpos,es,defaultEdgeLength,cx,cy,UGP,true,f,\"cugp\");\n    run_test(startpos,es,defaultEdgeLength,cx,cy,SGP,true,f,\"csgp\");\n}\nint main() {\n    for(unsigned i=1;i<2;i++) {\n        scale_free(i*50);\n    }\n    return 0;\n}\n// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=4:softtabstop=4:textwidth=99 :\n"
  },
  {
    "path": "cola/libcola/tests/shortest_paths.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libcola - A library providing force-directed network layout using the \n *           stress-majorization method subject to separation constraints.\n *\n * Copyright (C) 2006-2008  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library in the file LICENSE; if not, \n * write to the Free Software Foundation, Inc., 59 Temple Place, \n * Suite 330, Boston, MA  02111-1307  USA\n *\n*/\n\n#include <fstream>\n#include <iostream>\n#include <iomanip>\n//#define TEST_AGAINST_BOOST\n#ifdef TEST_AGAINST_BOOST\n#include <boost/config.hpp>\n#include <boost/property_map.hpp>\n#include <boost/graph/adjacency_list.hpp>\n#include <boost/graph/graphviz.hpp>\n#include <boost/graph/johnson_all_pairs_shortest.hpp>\nusing namespace boost;\n#endif // TEST_AGAINST_BOOST\n#include <libcola/shortest_paths.h>\n#include <cmath>\n#include <time.h>\n#include <assert.h>\n\nusing namespace std;\n// creates a (not necessarily connected random graph) with n nodes.\nvector<shortest_paths::Edge> random_graph(unsigned n) {\n\tvector<shortest_paths::Edge> edges;\n\tfor(unsigned i=0;i<n;i++) {\n\t\tfor(unsigned j=i+1;j<n;j++) {\n\t\t\tdouble r=(double)rand()/(double)RAND_MAX;\n\t\t\tif(r < 0.1) {\n\t\t\t\tedges.push_back(make_pair(i,j));\n\t\t\t}\n\t\t}\n\t}\n\n\treturn edges;\n}\nclock_t lastTime;\nstatic void resetClock() {\n    lastTime=clock();\n}\nstatic double getRunTime() {\n    clock_t time = clock()-lastTime;\n    return (double)time/(double)CLOCKS_PER_SEC;\n}\n\nint\nmain(void)\n{\n    bool dump=false;\n    srand(time(0));\n#ifdef TEST_AGAINST_BOOST\n    typedef adjacency_list<vecS, vecS, undirectedS, no_property,\n      property< edge_weight_t, double, property< edge_weight2_t, double > > > Graph;\n    Graph g;\n#endif\n    unsigned V = 100;\n    vector<shortest_paths::Edge> es = random_graph(V);\n    unsigned E=es.size();\n    cout << \"  Test graph |V|=\"<<V<<\",|E|=\"<<E<<endl;\n    valarray<double> weights(E);\n    for(unsigned i=0;i<E;i++) {\n\t    weights[i]=round((static_cast<double>(rand())/static_cast<double>(RAND_MAX))*10);\n#ifdef TEST_AGAINST_BOOST\n\t    add_edge(es[i].first,es[i].second,weights[i],g);\n#endif\n    }\n\n#ifdef TEST_AGAINST_BOOST\n    vector < double >d(V, (numeric_limits < double >::max)());\n    typedef vector<double> weight_vec;\n    vector<weight_vec> D(V,weight_vec(V));\n    cout<<\"Running boost::johnson_all_pairs_shortest_paths...\"<<endl;\n    resetClock();\n    johnson_all_pairs_shortest_paths(g, D, distance_map(&d[0]));\n    cout<<\"  ...done, time=\"<<getRunTime()<<endl;\n#endif\n    double** D1=new double*[V];\n    for(unsigned i=0;i<V;i++) {\n\t    D1[i]=new double[V];\n    }\n    cout<<\"Running shortest_paths::johnsons...\"<<endl;\n    resetClock();\n    shortest_paths::johnsons(V,D1,es,weights);\n    cout<<\"  ...done, time=\"<<getRunTime()<<endl;\n    double** D2=new double*[V];\n    for(unsigned i=0;i<V;i++) {\n\t    D2[i]=new double[V];\n    }\n    cout<<\"Running shortest_paths::floyd_warshall...\"<<endl;\n    resetClock();\n    shortest_paths::floyd_warshall(V,D2,es,weights);\n    cout<<\"  ...done, time=\"<<getRunTime()<<endl;\n\n    for (unsigned int i = 0; i < V; ++i) {\n        if(dump) cout << i << \" -> \";\n        for (unsigned int j = 0; j < V; ++j) {\n\t        if(dump) cout << setw(5) << D1[i][j];\n\t        assert(D1[i][j]==D2[i][j]);\n#ifdef TEST_AGAINST_BOOST\n\t        assert(D[i][j]==D2[i][j]);\n#endif\n        }\n        if(dump) cout << endl;\n    }\n#ifdef TEST_AGAINST_BOOST\n    if(dump) {\n        ofstream fout(\"figs/johnson-eg.dot\");\n        fout << \"graph A {\\n\" << \"node[shape=\\\"circle\\\"]\\n\";\n\n        graph_traits < Graph >::edge_iterator ei, ei_end;\n        for (tie(ei, ei_end) = edges(g); ei != ei_end; ++ei)\n            fout << source(*ei, g) << \" -- \" << target(*ei, g)\n                 << \"[label=\" << get(edge_weight, g)[*ei] << \"]\\n\";\n\n        fout << \"}\\n\";\n    }\n#endif\n    return 0;\n}\n"
  },
  {
    "path": "cola/libcola/tests/small_graph.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libcola - A library providing force-directed network layout using the \n *           stress-majorization method subject to separation constraints.\n *\n * Copyright (C) 2006-2008  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library in the file LICENSE; if not, \n * write to the Free Software Foundation, Inc., 59 Temple Place, \n * Suite 330, Boston, MA  02111-1307  USA\n *\n*/\n\n// Loads a graph from a text file, generates constraints for each edge requiring them\n// to point downwards, and proceeds to produce a layout using libcola.\n// The input file format is 2 numeric node labels per line separated by a space,\n// each pair representing a directed edge.  Node labels are simply used as array\n// offsets so they should start from 0.\n// The graph should be connected.\n// Default input file is the matrix market 1138_bus graph.\n// Running times:\n//    no constraints - steepest descent solver: 149 seconds\n//    no constraints - conjugate gradient solver: 21.7 seconds\n//    dir-edge constraints - conj grad. solver: 155.69 seconds\n#include<iostream>\n#include<iomanip>\n#include<fstream>\n#include<vector>\n#include<valarray>\n#include<libcola/output_svg.h>\n#include<graphlayouttest.h>\n\nusing namespace std;\nusing namespace cola;\n\nstruct CheckProgress : TestConvergence {\n    CheckProgress(const double d,const unsigned i) : TestConvergence(d,i) {}\n    bool operator()(const double new_stress, valarray<double> & X, valarray<double> & Y) {\n        cout << \"stress=\"<<new_stress<<endl;\n        return TestConvergence::operator()(new_stress,X,Y);\n    }\n};\nint main() {\n    const char *fname=\"data/wheel.txt\"; //\"data/dg_850.txt\";\n    ifstream f(fname);\n    if(!f.is_open()) {\n        cout << \"Error opening file: \" << fname << endl;\n        exit(1);\n    }\n    string startlabel, endlabel;\n    unsigned V = 0;\n    double defaultEdgeLength=40;\n    vector<Edge> es;\n    CompoundConstraints cy;\n    //CompoundConstraints cx;\n    while(!getline(f,startlabel,' ').eof()) {\n        getline(f,endlabel);\n        unsigned start = atoi(startlabel.c_str()),\n             end = atoi(endlabel.c_str());\n        es.push_back(make_pair(start,end));\n        //cx.push_back(\n            //new SeparationConstraint(start,end,defaultEdgeLength/3));\n        cy.push_back(\n            new SeparationConstraint(start,end,defaultEdgeLength/3));\n        V=max(V,max(start,end));\n    }\n    V++;\n    cout << \"V=\"<<V<<endl;\n    double width=1000;\n    double height=1000;\n    vector<vpsc::Rectangle*> rs;\n    //srand(time(nullptr));\n    for(unsigned i=0;i<V;i++) {\n        double x=getRand(width), y=getRand(height);\n        rs.push_back(new vpsc::Rectangle(x,x+1,y,y+1));\n    }\n    CheckProgress test(0.001,100);\n    clock_t starttime=clock();\n    ConstrainedMajorizationLayout alg(rs,es,nullptr,defaultEdgeLength,nullptr,test);\n    bool constrained=false;\n    if(!constrained) {\n        cout << \"Unconstrained layout\" << endl;\n        alg.setConstrainedLayout(true);\n        alg.run();\n    } else {\n        cout << \"Constrained layout\" << endl;\n        //alg.setXConstraints(&cx);\n        alg.setYConstraints(&cy);\n        alg.run();\n    }\n    double t=double(clock()-starttime)/double(CLOCKS_PER_SEC);\n    cout<<\"Time=\"<<t<<endl;\n    output_svg(rs,es,nullptr,\"small_graph.svg\",true);\n    for(unsigned i=0;i<V;i++) {\n        delete rs[i];\n    }\n    return 0;\n}\n// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=4:softtabstop=4:textwidth=99 :\n"
  },
  {
    "path": "cola/libcola/tests/sparse_matrix.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libcola - A library providing force-directed network layout using the \n *           stress-majorization method subject to separation constraints.\n *\n * Copyright (C) 2006-2008  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library in the file LICENSE; if not, \n * write to the Free Software Foundation, Inc., 59 Temple Place, \n * Suite 330, Boston, MA  02111-1307  USA\n *\n*/\n\n#include <map>\n#include <valarray>\n#include <libcola/sparse_matrix.h>\n#include <boost/numeric/ublas/matrix_sparse.hpp>\n#include <boost/numeric/ublas/vector.hpp>\n#include <boost/numeric/ublas/io.hpp>\n#include <time.h>\n#include <cmath>\n\nusing namespace boost::numeric::ublas;\nint sparse_test(const unsigned n, cola::SparseMatrix::SparseMap& cm, mapped_matrix<double>& bm) {\n    printf(\"Sparse test...\");\n    srand(time(0));\n    for (unsigned i = 0; i < n; ++ i) {\n        for (unsigned j = 0; j < n; ++ j) {\n            double r=(double)rand()/(double)RAND_MAX;\n            double s=(double)rand()/(double)RAND_MAX;\n            if(r < 0.2) {\n                cm[std::make_pair(i,j)] = s;\n                bm (i, j) = s;\n            }\n        }\n    }\n}\nint dense_test(const unsigned n, cola::SparseMatrix::SparseMap& cm, mapped_matrix<double>& bm) {\n    printf(\"Dense test...\");\n    for (unsigned i = 0; i < n; ++ i) {\n        for (unsigned j = 0; j < n; ++ j) {\n            bm (i, j) = n * i + j;\n            cm[std::make_pair(i,j)]=bm(i,j);\n        }\n    }\n}\n\nvoid test(int (*generate)(const unsigned, cola::SparseMatrix::SparseMap&, mapped_matrix<double>&)) {\n    using std::valarray;\n    const unsigned n = 20;\n    mapped_matrix<double> bm (n, n, n * n);\n    cola::SparseMatrix::SparseMap cm;\n    generate(n,cm,bm);\n    vector<double> bv (n);\n    valarray<double> cv(n);\n    for (unsigned i = 0; i < n; ++ i) {\n        bv(i) = i;\n        cv[i] = i;\n    }\n    vector<double> br(n);\n    valarray<double> cr(n);\n    cola::SparseMatrix a(cm,n);\n    br=prod(bm,bv);\n    a.rightMultiply(cv,cr);\n    for (unsigned i = 0; i < n; ++ i) {\n        assert(fabs(cr[i]-br(i))<0.000001);\n    }\n    printf(\" passed!\\n\");\n}\nint main() {\n    test(&dense_test);\n    test(&sparse_test);\n    return 0;\n}\n\n// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=4:softtabstop=4 :\n"
  },
  {
    "path": "cola/libcola/tests/test_cg.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libcola - A library providing force-directed network layout using the \n *           stress-majorization method subject to separation constraints.\n *\n * Copyright (C) 2006-2008  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library in the file LICENSE; if not, \n * write to the Free Software Foundation, Inc., 59 Temple Place, \n * Suite 330, Boston, MA  02111-1307  USA\n *\n*/\n\n#include <stdio.h>\n#include <cassert>\n#include <libcola/conjugate_gradient.h>\n#include <gsl/gsl_linalg.h>\n\nusing std::valarray;\n\nstatic valarray<double> \nouter_prod(valarray<double> x, valarray<double> y) {\n    valarray<double> result(x.size()*y.size());\n    for(int j = 0; j < x.size(); j++) {\n        for(int i = 0; i < y.size(); i++) {\n            result[j*y.size() + i] = x[j]*y[i];\n        }\n    }\n    return result;\n}\n\nstatic double \nuniform() {\n    return double(rand())/ RAND_MAX;\n}\n\nstatic void \nmatrix_times_vector(valarray<double> const &matrix, /* m * n */\n\t\t    valarray<double> const &vec,  /* n */\n\t\t    valarray<double> &result) /* m */\n{\n    unsigned n = vec.size();\n    unsigned m = result.size();\n    assert(m*n == matrix.size());\n    const double* mp = &matrix[0];\n    for (unsigned i = 0; i < m; i++) {\n        double res = 0;\n        for (unsigned j = 0; j < n; j++)\n            res += *mp++ * vec[j];\n        result[i] = res;\n    }\n}\n\nstatic double \nLinfty(valarray<double> const &vec) {\n    return std::max(vec.max(), -vec.min());\n}\n\nint\nmain (void)\n{\n    double tolerance = 1e-6;\n    for(int iters = 0; iters < 100; iters++) {\n        const unsigned  N = unsigned(uniform()*40) + 1;\n        double A_data[N*N];\n        printf(\"%ux%u matrix\\n\", N,N);\n        for(int r = 0; r < N; r++) {\n            for(int c = 0; c <= r; c++) {\n                A_data[r*N + c] = A_data[c*N + r] = fabs(uniform());\n            }\n        }\n\t\n        double * A_c[N];\n        for(int i = 0; i < N; i++)\n            A_c[i] = &A_data[N*i];\n\t\t\n        double b_data[N];\n        for(int i = 0; i < N; i++)\n            b_data[i] = uniform()*3;\n        std::valarray<double> b(b_data, N), xx(0.0, N);\n        std::valarray<double> A(A_data, N*N);\n\t\t\n        conjugate_gradient(A, xx, b, N, tolerance, 2*N);\n\t\n        gsl_matrix_view m \n            = gsl_matrix_view_array (A_data, N, N);\n        gsl_vector_view bgsl\n            = gsl_vector_view_array (b_data, N);\n     \n        gsl_vector *xgsl = gsl_vector_alloc (N);\n       \n        int s;\n     \n        gsl_permutation * p = gsl_permutation_alloc (N);\n     \n        gsl_linalg_LU_decomp (&m.matrix, p, &s);\n     \n        gsl_linalg_LU_solve (&m.matrix, p, &bgsl.vector, xgsl);\n        \n        std::valarray<double> gsl_xx(0.0, N);\n        for(unsigned i = 0; i < xx.size(); i++) {\n            gsl_xx[i] = gsl_vector_get(xgsl, i);\n        }\n\n        double err = Linfty(xx - gsl_xx);\n        printf (\"|xx-nxgsl|_infty = %g\\n\", err);\n        if(err > tolerance) {\n#if 0 //dubious value\n            for(int r = 0; r < N; r++) {\n                for(int c = 0; c < N; c++) {\n                    printf(\"%g \", A_data[r*N + c]);\n                }\n                printf(\"\\n\");\n            }\n#endif\n            printf(\"\\nx njh-cg = \\n\");\n            for(unsigned i = 0; i < xx.size(); i++)\n                printf(\"%g \", xx[i]);\n            printf(\"\\nxgsl = \");\n            for(unsigned i = 0; i < xx.size(); i++)\n                printf(\"%g \", gsl_xx[i]);\n            printf(\"\\n\");\n            valarray<double> result(0.0,N);\n            matrix_times_vector(A, xx, result);\n            result -= b;\n            printf(\"\\nA xx -b = \");\n            for(unsigned i = 0; i < xx.size(); i++)\n                printf(\"%g \", result[i]);\n            printf(\"\\n\");\n            matrix_times_vector(A, gsl_xx, result);\n            result -= b;\n            printf(\"\\nA gsl_xx -b = \");\n            for(unsigned i = 0; i < xx.size(); i++)\n                printf(\"%g \", result[i]);\n            printf(\"\\n\");\n            \n            printf(\"FAILED!!!!!!!!!!!!!!!!!!!!!!!!\\n\");\n            exit(1);\n        }\n    }\n    return 0;\n}\n/*\n  Local Variables:\n  mode:c++\n  c-file-style:\"stroustrup\"\n  c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))\n  indent-tabs-mode:nil\n  fill-column:99\n  End:\n*/\n// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=4:softtabstop=4\n"
  },
  {
    "path": "cola/libcola/tests/topology.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libcola - A library providing force-directed network layout using the \n *           stress-majorization method subject to separation constraints.\n *\n * Copyright (C) 2006-2008  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library in the file LICENSE; if not, \n * write to the Free Software Foundation, Inc., 59 Temple Place, \n * Suite 330, Boston, MA  02111-1307  USA\n *\n*/\n\n/** \\file topology.cpp\n *\n * tests topology preserving layout.  graph is a triangle.\n * We have a fourth disconnected node starting inside the triangle.\n * We give the disconnected node a desired position outside the triangle\n * and begin layout.  Layout should converge to near zero stress as all\n * edges should be able to reach their desired lengths, and disconnected\n * node should still be inside the triangle at the end.\n *\n *\n * Authors:\n *   Tim Dwyer <tgdwyer@gmail.com>\n */\n#include <iostream>\n#include <iomanip>\n#include <fstream>\n\n#include <vector>\n#include <valarray>\n#include <algorithm>\n#include <float.h>\n#include <libcola/cola.h>\n#include <libtopology/topology_graph.h>\n#include \"graphlayouttest.h\"\nusing namespace std;\nusing namespace cola;\n\ntopology::Node* addNode(\n        topology::Nodes& vs, vpsc::Rectangle* r) {\n    topology::Node *v = new topology::Node(vs.size(), r);\n    vs.push_back(v);\n    return v;\n}\nvoid addToPath(topology::EdgePoints& ps, topology::Node *v, topology::EdgePoint::RectIntersect i) {\n    ps.push_back(new topology::EdgePoint(v,i));\n}\nstruct SetDesiredPos : public PreIteration {\n    SetDesiredPos(Locks& locks) : PreIteration(locks) {}\n    bool operator()() { \n        return true; \n    }\n};\nvoid writeFile(const topology::Nodes& vs, const topology::Edges& es, const char *outputFileName) {\n    const unsigned n=vs.size();\n    vector<cola::Edge> cedges;\n\n    for(unsigned i=0;i<es.size();i++) {\n        cedges.push_back(make_pair(1,2));\n    }\n\n    vector<straightener::Route*> routes;\n    for(topology::Edges::const_iterator e=es.begin();e!=es.end();++e) {\n        routes.push_back((*e)->getRoute());\n    }\n\n    vector<string> labels(n);\n    for(unsigned i=0;i<n;++i) {\n        stringstream ss;\n        ss << i;\n        labels[i]=ss.str();\n    }\n\n    vector<vpsc::Rectangle*> rs;\n    for(topology::Nodes::const_iterator i=vs.begin();i!=vs.end();++i) {\n\t    rs.push_back((*i)->rect);\n    }\n    OutputFile of(rs,cedges,nullptr,outputFileName,true,false);\n    of.setLabels(labels);\n    of.routes=&routes;\n    of.generate();\n\n    for_each(routes.begin(),routes.end(),delete_object());\n}\nstruct Test : TestConvergence {\n    Test(const double d,const unsigned i,topology::Nodes& vs, topology::Edges& es) : TestConvergence(d,i), vs(vs), es(es) {}\n    bool operator()(const double new_stress, valarray<double> & X, valarray<double> & Y) {\n        cout << \"stress=\"<<new_stress<<\" iteration=\"<<iterations<<endl;\n        stringstream ss;\n        ss << \"topology-\" << setfill('0') << setw(3) << ++iterations << \".svg\";\n        writeFile(vs,es,ss.str().c_str());\n        if(iterations<100) {\n            return false;\n        }\n        return true;\n        return TestConvergence::operator()(new_stress,X,Y);\n    }\n    double lastStress;\n    topology::Nodes& vs;\n    topology::Edges& es;\n};\nvoid randomMove(int i) {\n    printf(\"We have a triangle of three connected nodes and a fourth disconnected node.  We set the fourth node's desired position at a point some random direction outside the triangle.\\n\");\n    printf(\"Using srand=%d\\n\",i);\n    srand(i);\n    const unsigned V = 4;\n    Edge edge_array[] = { Edge(0, 1), Edge(1, 2), Edge(2, 0) };\n    const std::size_t E = sizeof(edge_array) / sizeof(Edge);\n    vector<Edge> es(edge_array,edge_array+E);\n    vector<vpsc::Rectangle*> rs;\n    double x[]={200,250,300,250},y[]={200,250,200,225},size=10;\n    for(unsigned i=0;i<V;++i) {\n        rs.push_back(new vpsc::Rectangle(x[i],x[i]+size,y[i],y[i]+size));\n    }\n    double idealLength=60;\n    // set up topology graph\n    topology::Nodes vs;\n    for(vector<Rectangle*>::iterator i = rs.begin(); i!=rs.end();++i) {\n        addNode(vs,*i);\n    }\n    topology::Edges tes;\n    unsigned eID=0;\n    for(vector<Edge>::iterator e=es.begin();e!=es.end();++e, ++eID) {\n        topology::EdgePoints ps;\n        addToPath(ps,vs[e->first],topology::EdgePoint::CENTRE);\n        addToPath(ps,vs[e->second],topology::EdgePoint::CENTRE);\n        tes.push_back(new topology::Edge(eID, idealLength, ps));\n    }\n    writeFile(vs,tes,\"topology-000.svg\");\n    Locks locks;\n    // we move the 4th node somewhere outside the triangle.  The triangle should be\n    // dragged along!\n    const double PI = 2.0*acos(0.0);\n    double angle = getRand(2.0*PI);\n    double dx=150*cos(angle), dy=150*sin(angle);\n    \n    double lx=rs[3]->getCentreX()+dx,\n           ly=rs[3]->getCentreY()+dy;\n    //double lx=353.886210, ly=342.789705;\n    locks.push_back(Lock(3,lx,ly));\n    printf(\" Lock: %f,%f\\n\",lx,ly);\n    SetDesiredPos preIteration(locks);\n    Test test(0.00001,100,vs,tes);\n    ConstrainedFDLayout alg(rs,es,idealLength,nullptr,test,&preIteration);\n\n    alg.setTopology(&vs,&tes);\n    alg.run(true,true);\n    double finalStress=alg.computeStress();\n    printf(\"finalStress=%f\\n\",finalStress);\n\n    //assert(finalStress<1e-5);\n    for_each(rs.begin(),rs.end(),delete_object());\n    for_each(tes.begin(),tes.end(),delete_object());\n    for_each(vs.begin(),vs.end(),delete_object());\n}\nint main() {\n    unsigned i=0;\n    for(;i<1;i++) {\n        randomMove(i);\n    }\n    return 0;\n}\n// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=4:softtabstop=4:textwidth=80 :\n"
  },
  {
    "path": "cola/libcola/tests/trees.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libcola - A library providing force-directed network layout using the \n *           stress-majorization method subject to separation constraints.\n *\n * Copyright (C) 2006-2008  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library in the file LICENSE; if not, \n * write to the Free Software Foundation, Inc., 59 Temple Place, \n * Suite 330, Boston, MA  02111-1307  USA\n *\n*/\n\n#include<iostream>\n#include<vector>\n#include <cmath>\n#include <time.h>\n#include <valarray>\n\n#include \"graphlayouttest.h\"\n\nusing namespace std;\nusing namespace cola;\n\nvoid makeEdge(unsigned u, unsigned v, \n        vector<Edge> &edges, CompoundConstraints &cy) {\n    edges.push_back(make_pair(u,v));\n    cy.push_back(new SeparationConstraint(u,v,20));\n}\nvector<Edge> random_tree(unsigned depth, unsigned maxbranch, unsigned &V,\n        CompoundConstraints &cx, CompoundConstraints &cy) {\n\tvector<Edge> edges;\n    unsigned lstart=0, lend=1;\n    V=0;\n\tfor(unsigned i=0;i<depth;i++) {\n        for(unsigned j=lstart;j<lend;j++) {\n            //makeEdge(j,++V,edges,cy);\n            //makeEdge(j,++V,edges,cy);\n            for(unsigned k=0;k<maxbranch;k++) {\n                double r=(double)rand()/(double)RAND_MAX;\n                if(r < 0.5) {\n                    makeEdge(j,++V,edges,cy);\n                }\n            }\n        }\n        lstart=lend;\n        lend=V+1;\n    }\n    V++;\n    DFS::Graph dfs(V,edges);\n    for(unsigned i=1;i<dfs.order.size();i++) {\n        cx.push_back(\n                new SeparationConstraint(dfs.order[i-1],dfs.order[i],0.5));\n    }\n    /*\n    for(unsigned i=0;i<dfs.leaves.size();i++) {\n        for(unsigned j=1;j<dfs.leaves[i].size();j++) {\n            cx.push_back(\n                    new SeparationConstraint(dfs.leaves[i][j-1],dfs.leaves[i][j],10));\n        }\n    }\n    */\n\treturn edges;\n}\nint main() {\n    unsigned V;\n    CompoundConstraints cx,cy;\n    //srand(time(nullptr));\n    srand(3);\n    vector<Edge> es = random_tree(7,4,V,cx,cy);\n    double defaultEdgeLength=40;\n\n    cout << \"V=\"<<V<<endl;\n    double width=1000;\n    double height=1000;\n    vector<pair<double,double> > startpos(V);\n    for(unsigned i=0;i<V;i++) {\n        double x=getRand(width), y=getRand(height);\n        startpos[i]=make_pair(x,y);\n    }\n    const char *testname=\"trees\";\n    run_test(startpos,es,defaultEdgeLength,cx,cy,CG,false,testname,\"cg\");\n    run_test(startpos,es,defaultEdgeLength,cx,cy,IP,false,testname,\"ip\");\n    run_test(startpos,es,defaultEdgeLength,cx,cy,SGP,false,testname,\"sgp\");\n    run_test(startpos,es,defaultEdgeLength,cx,cy,UGP,false,testname,\"ugp\");\n    run_test(startpos,es,defaultEdgeLength,cx,cy,IP,true,testname,\"cip\");\n    run_test(startpos,es,defaultEdgeLength,cx,cy,SGP,true,testname,\"csgp\");\n    run_test(startpos,es,defaultEdgeLength,cx,cy,UGP,true,testname,\"cugp\");\n    return 0;\n}\n// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=4:softtabstop=4:textwidth=99 :\n"
  },
  {
    "path": "cola/libcola/tests/unconstrained.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libcola - A library providing force-directed network layout using the \n *           stress-majorization method subject to separation constraints.\n *\n * Copyright (C) 2006-2008  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library in the file LICENSE; if not, \n * write to the Free Software Foundation, Inc., 59 Temple Place, \n * Suite 330, Boston, MA  02111-1307  USA\n *\n*/\n\n/** \\file unconstrained.cpp\n *\n * Unconstrained graph layout test.  Simple graph with 4 nodes and 4 edges,\n * a triangle with a dangle.  Final stress checked.\n *\n *\n * Authors:\n *   Tim Dwyer <tgdwyer@gmail.com>\n */\n#include <iostream>\n#include <fstream>\n\n#include <vector>\n#include <valarray>\n#include <algorithm>\n#include <float.h>\n#include \"graphlayouttest.h\"\nusing namespace std;\n\nusing namespace cola;\nint main() {\n\n\tconst unsigned V = 4;\n\tEdge edge_array[] = { Edge(0, 1), Edge(1, 2), Edge(2, 3), Edge(1, 3) };\n\tconst std::size_t E = sizeof(edge_array) / sizeof(Edge);\n\tvector<Edge> es(E);\n\tcopy(edge_array,edge_array+E,es.begin());\n\tdouble width=100;\n\tdouble height=100;\n\tvector<vpsc::Rectangle*> rs;\n\tfor(unsigned i=0;i<V;i++) {\n\t\tdouble x=getRand(width), y=getRand(height);\n\t\trs.push_back(new vpsc::Rectangle(x,x+5,y,y+5));\n\t}\n\tCheckProgress test(1e-9,100);\n\tConstrainedFDLayout alg(rs,es,width/2,nullptr,&test);\n\talg.run();\n\tdouble stress = alg.computeStress();\n  \tassert(stress < 0.0013);\n\tOutputFile output(rs,es,nullptr,\"unconstrained.svg\");\n\toutput.generate();\n\tfor(unsigned i=0;i<V;i++) {\n\t\tdelete rs[i];\n\t}\n    return 0;\n}\n"
  },
  {
    "path": "cola/libcola/tests/unsatisfiable.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libcola - A library providing force-directed network layout using the \n *           stress-majorization method subject to separation constraints.\n *\n * Copyright (C) 2006-2008  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library in the file LICENSE; if not, \n * write to the Free Software Foundation, Inc., 59 Temple Place, \n * Suite 330, Boston, MA  02111-1307  USA\n *\n*/\n\n\n/** \\file\n * Interface between Inkscape code (SPItem) and graphlayout functions.\n *\n * Authors:\n *   Tim Dwyer <tgdwyer@gmail.com>\n */\n#include <iostream>\n\n#include <vector>\n#include <algorithm>\n#include <float.h>\n#include <libcola/cola.h>\n#include <libvpsc/exceptions.h>\n#include <libvpsc/constraint.h>\n#include \"graphlayouttest.h\"\n\nusing namespace std;\nusing namespace cola;\nint main() {\n\n\tconst unsigned V = 2;\n\ttypedef pair < unsigned, unsigned >Edge;\n\tEdge edge_array[] = { Edge(0, 1) };\n\tunsigned E = sizeof(edge_array) / sizeof(Edge);\n\tvector<Edge> es(edge_array,edge_array+E);\n\tdouble width=100;\n\tdouble height=100;\n\tvector<vpsc::Rectangle*> rs;\n\tfor(unsigned i=0;i<V;i++) {\n\t\tdouble x=getRand(width), y=getRand(height);\n\t\trs.push_back(new vpsc::Rectangle(x,x+5,y,y+5));\n\t}\n\tConstrainedFDLayout alg(rs,es,width/2);\n\tCompoundConstraints ccs;\n\tAlignmentConstraint ac(vpsc::YDIM, 1);\n\tccs.push_back(&ac);\n\tac.addShape(0,0);\n\tac.addShape(1,0);\n\tccs.push_back(new SeparationConstraint(vpsc::YDIM, 0,1,10));\n\talg.setConstraints(ccs);\n    try {\n\t    alg.run();\n    } catch (vpsc::UnsatisfiableException& e) {\n        cerr << \"Unsatisfiable\" << endl;\n\t\tfor(vector<vpsc::Constraint*>::iterator i=e.path.begin();\n\t\t\t\ti!=e.path.end();i++) {\n\t\t\tcout << **i << endl;\n\t\t}\n\t\texit(1);\n    }\n\t//assert(fabs(rs[0]->getCentreX()-rs[3]->getCentreX())<0.001);\n\tcout<<rs[0]->getCentreX()<<\",\"<<rs[1]->getCentreX()<<endl;\n\t//output_svg(rs,es,\"unsatisfiable.svg\");\n\tfor(unsigned i=0;i<V;i++) {\n\t\tdelete rs[i];\n\t}\n    return 0;\n}\n// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=4:softtabstop=4:textwidth=99 :\n"
  },
  {
    "path": "cola/libcola/tests/view_cd_output.sh",
    "content": "#! /bin/bash\n\nif [ $# -lt 1 ] ; then\n  echo \"Need case letter (eg: A) or ALL for all cases (CLEAN to delete)\"\n  exit\nelse\n  CASE=$1\n  shift\nfi\n\ncd /home/kierans/libcola3/libcola/tests\n \nif [ $CASE == 'a' -o $CASE == 'A' ] ; then\n  inkview cycle_detector_case_a.svg\nfi\n\nif [ $CASE == 'b' -o $CASE == 'B' ] ; then\n  inkview cycle_detector_case_b.svg\nfi\n\nif [ $CASE == 'c' -o $CASE == 'C' ] ; then\n  inkview cycle_detector_case_c.svg\nfi\n\nif [ $CASE == 'd' -o $CASE == 'D' ] ; then\n  inkview cycle_detector_case_d.svg\nfi\n\nif [ $CASE == 'e' -o $CASE == 'E' ] ; then\n  inkview cycle_detector_case_e.svg\nfi\n\nif [ $CASE == 'f' -o $CASE == 'F' ] ; then\n  inkview cycle_detector_case_f.svg\nfi\n\nif [ $CASE == 'all' -o $CASE == 'ALL' ] ; then\n  inkview cycle_detector_case_a.svg cycle_detector_case_b.svg cycle_detector_case_c.svg cycle_detector_case_d.svg cycle_detector_case_e.svg cycle_detector_case_f.svg\nfi\n\nif [ $CASE == 'clean' ] ; then\n  rm cycle_detector_case* -fv\nfi\n"
  },
  {
    "path": "cola/libcola/tests/view_mas_output.sh",
    "content": "#! /bin/bash\n\nif [ $# -lt 1 ] ; then\n  echo \"Need case letter (eg: A) or ALL for all cases (CLEAN to delete)\"\n  exit\nelse\n  CASE=$1\n  shift\nfi\n\ncd /home/kierans/libcola3/libcola/tests\n \nif [ $CASE == 'a' -o $CASE == 'A' ] ; then\n  inkview mas_case_a.svg\nfi\n\nif [ $CASE == 'b' -o $CASE == 'B' ] ; then\n  inkview mas_case_b.svg\nfi\n\nif [ $CASE == 'c' -o $CASE == 'C' ] ; then\n  inkview mas_case_c.svg\nfi\n\nif [ $CASE == 'd' -o $CASE == 'D' ] ; then\n  inkview mas_case_d.svg\nfi\n\nif [ $CASE == 'e' -o $CASE == 'E' ] ; then\n  inkview mas_case_e.svg\nfi\n\nif [ $CASE == 'f' -o $CASE == 'F' ] ; then\n  inkview mas_case_f.svg\nfi\n\nif [ $CASE == 'all' -o $CASE == 'ALL' ] ; then\n  inkview mas_case_a.svg mas_case_b.svg mas_case_c.svg mas_case_d.svg mas_case_e.svg mas_case_f.svg\nfi\n\nif [ $CASE == 'clean' ] ; then\n  rm mas_case* -fv\nfi\n"
  },
  {
    "path": "cola/libcola/unused.h",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libcola - A library providing force-directed network layout using the \n *           stress-majorization method subject to separation constraints.\n *\n * Copyright (C) 2006-2008  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n*/\n\n#ifndef _UNUSED_H\n#define _UNUSED_H\n\n#define COLA_UNUSED(expr) do { (void)(expr); } while (0)\n\n#endif\n"
  },
  {
    "path": "cola/libdialect/Makefile.am",
    "content": "EXTRA_DIST=libdialect.pc.in\nlib_LTLIBRARIES = libdialect.la\nlibdialect_la_CPPFLAGS = -I$(top_srcdir) -I$(includedir)/libdialect -fPIC\nlibdialect_la_LDFLAGS = -no-undefined\n\n# Depends on libavoid, libcola, and libvpsc\nlibdialect_la_LIBADD = $(top_builddir)/libavoid/libavoid.la $(top_builddir)/libcola/libcola.la $(top_builddir)/libvpsc/libvpsc.la\n\nlibdialect_la_SOURCES = \\\n    aca.cpp \\\n    aca.h \\\n    bendseqlookup.cpp \\\n    chains.cpp \\\n    chains.h \\\n    commontypes.h \\\n    constraints.cpp \\\n    constraints.h \\\n    edges.cpp \\\n    expansion.cpp \\\n    expansion.h \\\n    faces.cpp \\\n    faces.h \\\n    graphs.cpp \\\n    graphs.h \\\n    hola.cpp \\\n    hola.h \\\n    io.cpp \\\n    io.h \\\n    logging.cpp \\\n    logging.h \\\n    nearalign.cpp \\\n    nearalign.h \\\n    nexes.cpp \\\n    nodeconfig.cpp \\\n    nodeconfig.h \\\n    nodes.cpp \\\n    opts.h \\\n    ortho.cpp \\\n    ortho.h \\\n    peeling.cpp \\\n    peeling.h \\\n    planarise.cpp \\\n    planarise.h \\\n    qalookup.cpp \\\n    quadaction.cpp \\\n    quadaction.h \\\n    routing.cpp \\\n    routing.h \\\n    sides.cpp \\\n    treeplacement.cpp \\\n    treeplacement.h \\\n    trees.cpp \\\n    trees.h \\\n    util.h\n\nlibdialectincludedir = $(includedir)/libdialect\n\nlibdialectinclude_HEADERS = \\\n    aca.h \\\n    chains.h \\\n    commontypes.h \\\n    constraints.h \\\n    expansion.h \\\n    faces.h \\\n    graphs.h \\\n    hola.h \\\n    io.h \\\n    logging.h \\\n    nearalign.h \\\n    nodeconfig.h \\\n    opts.h \\\n    ortho.h \\\n    peeling.h \\\n    planarise.h \\\n    quadaction.h \\\n    routing.h \\\n    treeplacement.h \\\n    trees.h \\\n    util.h\n\npkgconfigdir = $(libdir)/pkgconfig\npkgconfig_DATA = libdialect.pc\n\nSUBDIRS = . tests\n"
  },
  {
    "path": "cola/libdialect/aca.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libdialect - A library for computing DiAlEcT layouts:\n *                 D = Decompose/Distribute\n *                 A = Arrange\n *                 E = Expand/Emend\n *                 T = Transform\n *\n * Copyright (C) 2018  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n * Author(s):   Steve Kieffer   <http://skieffer.info>\n*/\n\n#include <algorithm>\n#include <vector>\n#include <string>\n#include <utility>\n#include <map>\n#include <set>\n\n#include <sstream>\n#include <iostream>\n#include <clocale>\n\n#include \"libvpsc/constraint.h\"\n#include \"libvpsc/variable.h\"\n#include \"libvpsc/rectangle.h\"\n#include \"libvpsc/solve_VPSC.h\"\n#include \"libvpsc/exceptions.h\"\n\n#include \"libcola/cola.h\"\n#include \"libcola/cc_nonoverlapconstraints.h\"\n\n#include \"libdialect/util.h\"\n#include \"libdialect/constraints.h\"\n#include \"libdialect/ortho.h\"\n#include \"libdialect/graphs.h\"\n#include \"libdialect/aca.h\"\n\nusing std::vector;\nusing std::string;\nusing std::pair;\nusing std::map;\nusing std::multimap;\nusing std::set;\nusing std::sort;\n\nusing std::cout;\nusing std::endl;\n\nusing vpsc::XDIM;\nusing vpsc::YDIM;\nusing vpsc::Dim;\nusing vpsc::HORIZONTAL;\nusing vpsc::VERTICAL;\nusing vpsc::Constraint;\nusing vpsc::Constraints;\nusing vpsc::Rectangle;\nusing vpsc::Rectangles;\nusing vpsc::Variable;\nusing vpsc::Variables;\nusing vpsc::IncSolver;\nusing vpsc::UnsatisfiedConstraint;\n\nusing cola::Edge;\nusing cola::ShapePair;\nusing cola::AlignmentConstraint;\nusing cola::CompoundConstraints;\nusing cola::EdgeLengths;\nusing cola::TestConvergence;\nusing cola::PreIteration;\nusing cola::NonOverlapConstraintExemptions;\nusing cola::UnsatisfiableConstraintInfos;\n\nnamespace dialect {\n\nconst double ACALayout::BP_PENALTY = 2;\nconst double ACALayout::LEAF_PENALTY = 5;\nconst double ACALayout::PENALTY_BOUND = 20;\n\nconst double ACALayout::EDGE_SHAPE_HALF_THICKNESS = 4;\nconst double ACALayout::EDGE_SHAPE_BUFFER = 1;\n\n/*\n * Apply the permutation (13)(24) to the separation flag. In other words,\n * swap N and S, and swap E and W.\n */\nACASepFlag negateSepFlag(ACASepFlag sf)\n{\n    // Let c = 0000WSEN\n    unsigned short c = (unsigned short) sf;\n    // Update c to WSENWSEN.\n    c += 16*c;\n    // Kill first and last bits, obtaining 00ENWS00.\n    c &= 60; // 60 is 00111100 in binary\n    // Shift right, obtaining 0000ENWS.\n    unsigned short b = c >> 2;\n    // Recast and return.\n    ACASepFlag nf = (ACASepFlag) b;\n    return nf;\n}\n\n/*\n * Map N and S to Vertical; E and W to Horizontal.\n */\nACAFlag sepToAlignFlag(ACASepFlag sf)\n{\n    return sf==ACANORTH || sf==ACASOUTH ? ACAVERT : ACAHORIZ;\n}\n\n/*\n * Map each dimension to its perpendicular dim; in other words,\n * swap Vert and Horiz.\n */\nACAFlag perpAlignFlag(ACAFlag af)\n{\n    return af==ACAHORIZ ? ACAVERT : ACAHORIZ;\n}\n\n/*\n * Map a vector (dx, dy) to a set of separation flags.\n */\nACASepFlag vectorToSepFlag(double dx, double dy)\n{\n    int f = 0;\n    f |= dx > 0 ? ACAEAST : dx < 0 ? ACAWEST : 0;\n    f |= dy > 0 ? ACASOUTH : dy < 0 ? ACANORTH : 0;\n    return (ACASepFlag) f;\n}\n\nbool propsedSepConflictsWithExistingPosition(ACASepFlag pro, ACASepFlag ex)\n{\n    // Proposed separation pro conflicts with existing position ex\n    // if the union of their bits contains both north and south, or\n    // both east and west.\n    int u = pro | ex;\n    return ( ( (u&ACANORTHSOUTH) == ACANORTHSOUTH ) || ( (u&ACAEASTWEST) == ACAEASTWEST ) );\n}\n\nbool sortOrdAlignsByPenalty(const OrderedAlignment *lhs, const OrderedAlignment *rhs)\n{\n    return lhs->penalty < rhs->penalty;\n}\n\nACALayout::ACALayout(\n        const vpsc::Rectangles& rs,\n        const std::vector<cola::Edge>& es,\n        CompoundConstraints& ccs,\n        const double idealLength,\n        const EdgeLengths& eLengths,\n        TestConvergence *doneTest,\n        PreIteration *preIteration)\n    : m_graph(nullptr),\n      m_n(rs.size()),\n      m_m(es.size()),\n      m_rs(rs),\n      m_es(es),\n      m_ccs(ccs),\n      m_rc(nullptr),\n      m_idealLength(idealLength),\n      m_preventOverlaps(false),\n      m_edgeLengths(eLengths),\n      m_doneTest(doneTest),\n      m_preIteration(preIteration),\n      m_addBendPointPenalty(true),\n      m_favourLongEdges(false),\n      m_postponeLeaves(true),\n      m_useNonLeafDegree(true),\n      m_allAtOnce(false),\n      m_aggressiveOrdering(false),\n      m_fdlayout(nullptr),\n      m_lengthUpperBound(10000),\n      m_didLayoutForLastAlignment(false),\n      m_doFinalFDLayout(false),\n      m_nocExemptions(new NonOverlapConstraintExemptions()),\n      m_nocsInitialised(false),\n      m_layoutPeriod(1000000)\n{\n    // By default, no edges are ignored.\n    for (int i=0; i<m_m; ++i) m_ignoreEdge.push_back(false);\n    // By default, no nodes are ignored.\n    for (int i=0; i<m_n; ++i) m_ignoreNodeForOPWithOffsets.push_back(false);\n    // Initialise tables.\n    computeDegrees();\n    generateVPSCConstraints();\n    initStateTables();\n}\n\nACALayout::ACALayout(std::shared_ptr<dialect::Graph> G)\n    : m_graph(G),\n      m_rc(nullptr),\n      m_preventOverlaps(false),\n      m_addBendPointPenalty(true),\n      m_favourLongEdges(false),\n      m_postponeLeaves(true),\n      m_useNonLeafDegree(true),\n      m_allAtOnce(false),\n      m_aggressiveOrdering(false),\n      m_fdlayout(nullptr),\n      m_lengthUpperBound(10000),\n      m_didLayoutForLastAlignment(false),\n      m_doFinalFDLayout(false),\n      m_nocExemptions(new NonOverlapConstraintExemptions()),\n      m_nocsInitialised(false),\n      m_layoutPeriod(1000000)\n{\n    // Cola Graph Rep:\n    ColaGraphRep &colaRep = G->updateColaGraphRep();\n    m_n = colaRep.rs.size();\n    m_m = colaRep.es.size();\n    m_rs = colaRep.rs;\n    m_es = colaRep.es;\n    m_ccs.push_back(&G->getSepMatrix());\n    // Cola Options:\n    m_idealLength = G->getIEL();\n    m_edgeLengths = cola::StandardEdgeLengths;\n    m_doneTest = nullptr;\n    m_preIteration = nullptr;\n    // By default, no edges are ignored.\n    for (int i=0; i<m_m; ++i) m_ignoreEdge.push_back(false);\n    // By default, no nodes are ignored.\n    for (int i=0; i<m_n; ++i) m_ignoreNodeForOPWithOffsets.push_back(false);\n    // Initialise tables.\n    computeDegrees();\n    generateVPSCConstraints();\n    initStateTables();\n}\n\n\nACALayout::~ACALayout(void)\n{\n    // Miscelaneous objects:\n    delete m_alignmentState;\n    delete m_fdlayout;\n    delete m_nocExemptions;\n    delete m_xnocs;\n    delete m_ynocs;\n    // OrderedAlignments. See however the doctext on the OrderedAlignment struct's\n    // destructor method, which notes that it deliberately does NOT delete the\n    // two cola::CompoundConstraints to which it holds pointers. Thus, these are\n    // the client's responsibility.\n    for (auto p : m_ordAligns) delete p;\n    // Variables:\n    for (auto p : m_xvs) delete p;\n    for (auto p : m_yvs) delete p;\n    // Constraints:\n    for (auto p : m_xcs) delete p;\n    for (auto p : m_ycs) delete p;\n    // Only Rectangles beyond the first m_n were allocated by this ACALayout instance;\n    // the first m_n were client-supplied and are therefore NOT deleted.\n    for (size_t i = m_n; i < m_xrs.size(); ++i) {\n        delete m_xrs.at(i);\n    }\n    for (size_t i = m_n; i < m_yrs.size(); ++i) {\n        delete m_yrs.at(i);\n    }\n    // We must not delete pointers in any of m_xEqCs, m_yEqCs, m_xIneqCs, m_yIneqCs,\n    // since these Contraints are already pointed to in m_xcs and m_ycs.\n    // We must not delete pointers in m_extendedRS, since these Rectangles are\n    // already pointed to in the portions of m_xrs and m_yrs beyond the first\n    // m_n entries.\n}\n\nvoid ACALayout::createAlignments(void)\n{\n    if (!m_nocsInitialised) initNOCs();\n    if (m_allAtOnce) {\n        acaLoopAllAtOnce();\n    } else {\n        acaLoopOneByOne();\n    }\n}\n\nbool ACALayout::createOneAlignment(void)\n{\n    if (!m_nocsInitialised) initNOCs();\n    return acaLoopOnce();\n}\n\nbool ACALayout::applyOAsAllOrNothing(OrderedAlignments oas)\n{\n    if (!m_nocsInitialised) initNOCs();\n    bool b = allOrNothing(oas);\n    return b;\n}\n\nvoid ACALayout::layout(void)\n{\n    if (!m_nocsInitialised) initNOCs();\n    layoutWithCurrentConstraints();\n    createAlignments();\n}\n\nvoid ACALayout::removeOverlaps(void)\n{\n    if (!m_nocsInitialised) initNOCs();\n    bool pO = m_preventOverlaps;\n    m_preventOverlaps = true;\n    layoutWithCurrentConstraints();\n    m_preventOverlaps = pO;\n}\n\ncola::ConstrainedFDLayout *ACALayout::getFDLayout(void)\n{\n    return m_fdlayout;\n}\n\nvoid ACALayout::addBendPointPenalty(bool b)\n{\n    m_addBendPointPenalty = b;\n}\n\nvoid ACALayout::favourLongEdges(bool b)\n{\n    m_favourLongEdges = b;\n}\n\nvoid ACALayout::postponeLeaves(bool b)\n{\n    m_postponeLeaves = b;\n}\n\nvoid ACALayout::useNonLeafDegree(bool b)\n{\n    m_useNonLeafDegree = b;\n}\n\nvoid ACALayout::allAtOnce(bool b)\n{\n    m_allAtOnce = b;\n}\n\nvoid ACALayout::aggressiveOrdering(bool b)\n{\n    m_aggressiveOrdering = b;\n}\n\nvoid ACALayout::setAvoidNodeOverlaps(bool avoidOverlaps)\n{\n    m_preventOverlaps = avoidOverlaps;\n}\n\nvoid ACALayout::ignoreEdges(std::vector<bool> ignore)\n{\n    COLA_ASSERT(ignore.size()==(size_t)m_m); // There should be one boolean for each edge.\n    m_ignoreEdge = ignore;\n}\n\nvoid ACALayout::ignoreNodesForOPWithOffsets(std::vector<bool> ignore)\n{\n    COLA_ASSERT(ignore.size()==(size_t)m_n);\n    m_ignoreNodeForOPWithOffsets = ignore;\n}\n\nvoid ACALayout::setNodeAliases(std::map<int, int> aliases)\n{\n    m_nodeAliases = aliases;\n    // Recompute node degrees and neighbours.\n    computeDegrees();\n    // Add connections in state table.\n    for (int j = 0; j < m_m; ++j) {\n        cola::Edge e = m_es.at(j);\n        int src = e.first, tgt = e.second;\n        src = alias(src);\n        tgt = alias(tgt);\n        (*m_alignmentState)(src,tgt) |= ACACONN;\n        (*m_alignmentState)(tgt,src) |= ACACONN;\n    }\n}\n\nvoid ACALayout::setClusterHierarchy(cola::RootCluster *rc)\n{\n    m_rc = rc;\n}\n\nbool ACALayout::edgeIsAligned(int j) const\n{\n    cola::Edge e = m_es.at(j);\n    int src = e.first, tgt = e.second;\n    int astate = (*m_alignmentState)(src,tgt);\n    return (astate & (ACAHORIZ|ACAVERT));\n}\n\nbool ACALayout::nodesAreAligned(int i, int j) const\n{\n    int astate = (*m_alignmentState)(i,j);\n    return (astate & (ACAHORIZ|ACAVERT));\n}\n\nvoid ACALayout::layoutPeriod(unsigned p)\n{\n    m_layoutPeriod = p;\n}\n\nvoid ACALayout::doFinalLayout(bool b)\n{\n    m_doFinalFDLayout = b;\n}\n\nvoid ACALayout::addGroupOfNonOverlapExemptRectangles(std::vector<unsigned> rs)\n{\n    // 1. We maintain a vector of vectors, to be added to ConstrainedFDLayout objects\n    //    each time they are created.\n    m_nocExemptRects.push_back(rs);\n    // 2. We maintain a multimap mapping each rectangle index to all the rectangle\n    //    indices with which it is exempt. This is used when we add a new rectangle\n    //    for each aligned edge; namely, when aligning edge e=(u,v) we make this new\n    //    rectangle exempt from the union of the exemption sets of u and v. This is\n    //    important when we put port dummy nodes /inside/ of the proper nodes to\n    //    which they belong, so that the edge rectangles can be exempt from non-overlap\n    //    with those proper nodes as well.\n    for (std::vector<unsigned>::iterator it=rs.begin(); it!=rs.end(); ++it) {\n        for (std::vector<unsigned>::iterator jt=rs.begin(); jt!=rs.end(); ++jt) {\n            if (*it==*jt) continue;\n            m_nocExemptionSets.insert(std::pair<unsigned,unsigned>(*it,*jt));\n        }\n    }\n}\n\nstd::set<unsigned> ACALayout::exemptionSetForEdge(int j)\n{\n    cola::Edge e = m_es[j];\n    unsigned src = e.first, tgt = e.second;\n    std::set<unsigned> exemptions;\n    // src set\n    std::pair <std::multimap<unsigned,unsigned>::iterator, std::multimap<unsigned,unsigned>::iterator > srcRange;\n    srcRange = m_nocExemptionSets.equal_range(src);\n    for (std::multimap<unsigned,unsigned>::iterator it=srcRange.first; it!=srcRange.second; ++it) {\n        exemptions.insert(it->second);\n    }\n    // tgt set\n    std::pair <std::multimap<unsigned,unsigned>::iterator, std::multimap<unsigned,unsigned>::iterator > tgtRange;\n    tgtRange = m_nocExemptionSets.equal_range(tgt);\n    for (std::multimap<unsigned,unsigned>::iterator it=tgtRange.first; it!=tgtRange.second; ++it) {\n        exemptions.insert(it->second);\n    }\n    return exemptions;\n}\n\nvoid ACALayout::setAlignmentOffsetsForCompassDirection(ACASepFlag sf, EdgeOffsets offsets)\n{\n    COLA_ASSERT(offsets.size()==(size_t)m_m); // There should be one offset for each edge.\n    m_edgeOffsets.insert( std::pair<ACASepFlag,EdgeOffsets>(sf,offsets) );\n}\n\nvoid ACALayout::setAllowedDirections(ACASepFlags seps)\n{\n    COLA_ASSERT(seps.size()==(size_t)m_m); // There should be one flag for each edge.\n    m_allowedSeps = seps;\n}\n\nstd::string ACALayout::writeAlignmentTable(void) const\n{\n    std::string s = m_alignmentState->toString();\n    return s;\n}\n\nstd::string ACALayout::writeStateForNodeIds(id_type id1, id_type id2)\n{\n    std::ostringstream ss;\n    ColaGraphRep cgr = m_graph->getColaGraphRep();\n    size_t ix1 = cgr.id2ix.at(id1),\n           ix2 = cgr.id2ix.at(id2);\n    ss << \"Node of ID \" << id1 << \" has index \" << ix1 << std::endl;\n    ss << \"Node of ID \" << id2 << \" has index \" << ix2 << std::endl;\n    ss << \"State for indices (\" << ix1 << \", \" << ix2 << \"): \" << (*m_alignmentState)(ix1, ix2) << std::endl;\n    ss << \"State for indices (\" << ix2 << \", \" << ix1 << \"): \" << (*m_alignmentState)(ix2, ix1) << std::endl;\n    return ss.str();\n}\n\nvoid ACALayout::computeDegrees(void)\n{\n    m_nbrs.clear();\n    m_leaves.clear();\n    m_deg2Nodes.clear();\n    m_nlnbrs.clear();\n    m_nldeg2Nodes.clear();\n    // Map node indices to indices of their neighbours.\n    for (int j = 0; j < m_m; ++j) {\n        cola::Edge e = m_es.at(j);\n        m_nbrs.insert(std::pair<int,int>(e.first,e.second));\n        m_nbrs.insert(std::pair<int,int>(e.second,e.first));\n        m_incidentEdges.insert(std::pair<int,int>(e.first,j));\n        m_incidentEdges.insert(std::pair<int,int>(e.second,j));\n    }\n    // Find the leaves and degree-2 nodes.\n    for (int i = 0; i < m_n; ++i) {\n        int c = m_nbrs.count(i);\n        if (c == 1) m_leaves.insert(i);\n        if (c == 2) m_deg2Nodes.insert(i);\n    }\n    // Compute non-leaf neighbours.\n    for (int i = 0; i < m_n; ++i) {\n        // Iterate over the neighbours of node i, retaining only the non-leaves.\n        std::pair< std::multimap<int,int>::iterator, std::multimap<int,int>::iterator > range;\n        range = m_nbrs.equal_range(i);\n        for (std::multimap<int,int>::iterator it=range.first; it!=range.second; ++it) {\n            int j = it->second;\n            if (m_leaves.count(j)==0) {\n                m_nlnbrs.insert(std::pair<int,int>(i,j));\n            }\n        }\n    }\n    // Compute non-leaf incident edges.\n    for (int j = 0; j < m_m; ++j) {\n        cola::Edge e = m_es.at(j);\n        if (m_leaves.count(e.second)==0) m_nlincidentEdges.insert(std::pair<int,int>(e.first,j));\n        if (m_leaves.count(e.first)==0) m_nlincidentEdges.insert(std::pair<int,int>(e.second,j));\n    }\n    // Find the non-leaf degree-2 nodes.\n    for (int i = 0; i < m_n; ++i) {\n        if (m_nlnbrs.count(i) == 2) m_nldeg2Nodes.insert(i);\n    }\n}\n\nvoid ACALayout::generateVPSCConstraints(void)\n{\n    // First generate one x-variable and one y-variable for each node.\n    // Also create a rectangle vector for each dimension.\n    m_xrs.resize(m_n);\n    m_yrs.resize(m_n);\n    for (int i = 0; i < m_n; ++i) {\n        m_xvs.push_back(new vpsc::Variable(i,m_rs[i]->getCentreX()));\n        m_yvs.push_back(new vpsc::Variable(i,m_rs[i]->getCentreY()));\n        m_xrs[i] = m_rs[i];\n        m_yrs[i] = m_rs[i];\n    }\n    // Generate all VPSC constraints and any auxiliary variables.\n    vpsc::Constraints xcs, ycs;\n    for (size_t k = 0; k < m_ccs.size(); ++k) {\n        cola::CompoundConstraint *cc = m_ccs.at(k);\n        cc->generateVariables(vpsc::XDIM, m_xvs);\n        cc->generateVariables(vpsc::YDIM, m_yvs);\n        cc->generateSeparationConstraints(vpsc::XDIM, m_xvs, xcs, m_rs);\n        cc->generateSeparationConstraints(vpsc::YDIM, m_yvs, ycs, m_rs);\n    }\n    // Compute how many auxiliary vars we got.\n    m_numExtraXVars = m_xvs.size() - m_n;\n    m_numExtraYVars = m_yvs.size() - m_n;\n    // In each dimension, the rectangle vector needs nullptr placeholders to make\n    // it the same length as the vector of variables. This is so that when ACA\n    // generates guideline variables for alignments, it can create corresponding\n    // rectangles for non-overlap constraints involving aligned edges.\n    for (int i = 0; i < m_numExtraXVars; ++i) m_xrs.push_back(nullptr);\n    for (int i = 0; i < m_numExtraYVars; ++i) m_yrs.push_back(nullptr);\n    // Store constraints by dimension and by equality vs. inequality constraints.\n    for (size_t k = 0; k < xcs.size(); ++k) {\n        vpsc::Constraint *c = xcs.at(k);\n        m_xcs.push_back(c);\n        if (c->equality) {\n            m_xEqCs.push_back(c);\n        } else {\n            m_xIneqCs.push_back(c);\n        }\n    }\n    for (size_t k = 0; k < ycs.size(); ++k) {\n        vpsc::Constraint *c = ycs.at(k);\n        m_ycs.push_back(c);\n        if (c->equality) {\n            m_yEqCs.push_back(c);\n        } else {\n            m_yIneqCs.push_back(c);\n        }\n    }\n}\n\nvoid ACALayout::initNOCs(void)\n{\n    // By the time this method is called, the client should be through adding\n    // groups of NOC exempt rectangles. So we can now add all the groups:\n    m_nocExemptions->addExemptGroupOfNodes(m_nocExemptRects);\n    // And create NOC objects for each dimension:\n    m_xnocs = new cola::NonOverlapConstraints(m_nocExemptions);\n    m_ynocs = new cola::NonOverlapConstraints(m_nocExemptions);\n    // And add all the rectangles:\n    for (int i=0; i<m_n; ++i) {\n        vpsc::Rectangle *R = m_rs[i];\n        double hw = R->width()/2.0, hh = R->height()/2.0;\n        m_xnocs->addShape(i,hw,hh);\n        m_ynocs->addShape(i,hw,hh);\n    }\n    // And mark the NOCs as now initialised.\n    m_nocsInitialised = true;\n}\n\nint ACALayout::alias(int i)\n{\n    std::map<int,int>::iterator it = m_nodeAliases.find(i);\n    if (it!=m_nodeAliases.end()) i = it->second;\n    return i;\n}\n\n/**\n * Retrieve a rectangle, using the nodeAliases (if any).\n */\nvpsc::Rectangle *ACALayout::getRect(int i, bool doAlias)\n{\n    if (doAlias) i = alias(i);\n    vpsc::Rectangle *R = m_rs.at(i);\n    return R;\n}\n\n/**\n * This is for use only during initialisation of the state tables, when we have\n * to deal with the extra variables generated by the incoming constraints.\n * For that time we arrange the variables like this:\n *\n *     ... rectangles ... | ... extra x-vars ... | ... extra y-vars ...\n *\n * So for example if there were 5 rectangles, 2 extra x-vars, and 3 extra y-vars,\n * then the columns (and rows) in the state table corresponding to the 7 x- and 8 y-vars\n * would be:\n *     x: 0 1 2 3 4 | 5 6\n *     y: 0 1 2 3 4 | 7 8 9\n */\nint ACALayout::adjustVarNumForExtraVars(vpsc::Dim dim, int k)\n{\n    if (dim==vpsc::YDIM && k >= m_n) k += m_numExtraXVars;\n    return k;\n}\n\nvoid ACALayout::initStateTables(void)\n{\n    // Start by building table large enough to handle each rectangle, as\n    // well as each extra X-var, and each extra Y-var.\n    int N = m_n + m_numExtraXVars + m_numExtraYVars;\n    m_alignmentState  = new Matrix2d<int>(N,N);\n    // Initialise with zeroes.\n    for (int i = 0; i < N; ++i) {\n        for (int j = 0; j < N; ++j) {\n            (*m_alignmentState)(i,j) = 0;\n        }\n    }\n    // Note connections in alignment state table.\n    for (int j = 0; j < m_m; ++j) {\n        cola::Edge e = m_es.at(j);\n        int src = e.first, tgt = e.second;\n        (*m_alignmentState)(src,tgt) = ACACONN;\n        (*m_alignmentState)(tgt,src) = ACACONN;\n    }\n    // Consider equality constraints in the x-dimension.\n    for (size_t k = 0; k < m_xEqCs.size(); ++k) {\n        vpsc::Constraint *c = m_xEqCs.at(k);\n        int l = c->left->id, r = c->right->id;\n        double gap = c->gap;\n        // Adjust for extra variables.\n        l = adjustVarNumForExtraVars(vpsc::XDIM,l);\n        r = adjustVarNumForExtraVars(vpsc::XDIM,r);\n        if (gap==0) {\n            // It is an alignment.\n            recordAlignmentWithClosure(l,r,ACAVERT,N);\n        }\n    }\n    // Consider equality constraints in the y-dimension.\n    for (size_t k = 0; k < m_yEqCs.size(); ++k) {\n        vpsc::Constraint *c = m_yEqCs.at(k);\n        int l = c->left->id, r = c->right->id;\n        double gap = c->gap;\n        // Adjust for extra variables.\n        l = adjustVarNumForExtraVars(vpsc::YDIM,l);\n        r = adjustVarNumForExtraVars(vpsc::YDIM,r);\n        if (gap==0) {\n            // It is an alignment.\n            recordAlignmentWithClosure(l,r,ACAHORIZ,N);\n        }\n    }\n\n    // Record snapshot for debugging purposes.\n    //aStateBeforeChop = m_alignmentState->toString();\n\n    // Now that we have computed the transitive closure of all the passed\n    // constraints, we will no longer need the rows and columns for the extra\n    // variables, so we chop those off now.\n    Matrix2d<int> *aState = new Matrix2d<int>(m_n,m_n);\n    for (int i = 0; i < m_n; ++i) {\n        for (int j = 0; j < m_n; ++j) {\n            (*aState)(i,j) = (*m_alignmentState)(i,j);\n        }\n    }\n    delete m_alignmentState;\n    m_alignmentState = aState;\n}\n\nvoid ACALayout::recordAlignmentWithClosure(int i, int j, ACAFlag af, int numCols)\n{\n    if (numCols == 0) numCols = m_n;\n    // Get the set Ai of all indices already aligned with i, including i itself.\n    // Do likewise for j.\n    std::set<int> Ai, Aj;\n    Ai.insert(i);\n    Aj.insert(j);\n    for (int k = 0; k < numCols; ++k) {\n        if ( (*m_alignmentState)(i,k) & af ) Ai.insert(k);\n        if ( (*m_alignmentState)(j,k) & af ) Aj.insert(k);\n    }\n    // Record that everything in Ai is aligned with everything in Aj.\n    // This is the transitive closure of the new alignment for the alignments table.\n    for (std::set<int>::iterator it=Ai.begin(); it!=Ai.end(); ++it) {\n        for (std::set<int>::iterator jt=Aj.begin(); jt!=Aj.end(); ++jt) {\n            (*m_alignmentState)(*it,*jt) |= af;\n            (*m_alignmentState)(*jt,*it) |= af;\n        }\n    }\n}\n\nvoid ACALayout::addOrderedAlignments(OrderedAlignments oas)\n{\n    for (OrderedAlignments::const_iterator it=oas.begin(); it!=oas.end(); ++it) {\n        OrderedAlignment *oa = *it;\n        m_ordAligns.push_back(oa);\n        m_ccs.push_back(oa->separation);\n        m_ccs.push_back(oa->alignment);\n        updateStateTables(oa);\n    }\n}\n\nvoid ACALayout::updateStateTables(OrderedAlignment *oa)\n{\n    int i = oa->src, j = oa->tgt;\n    recordAlignmentWithClosure(i, j, oa->af);\n}\n\ncola::CompoundConstraints ACALayout::writeAllVPSCConstraintsAsCompound(void)\n{\n    pushState();\n    updateNodeRectsFromVars();\n    recomputeEdgeShapes(XDIM);\n    recomputeEdgeShapes(YDIM);\n    m_xnocs->generateSeparationConstraints(XDIM, m_xvs, m_xcs, m_xrs);\n    m_ynocs->generateSeparationConstraints(YDIM, m_yvs, m_ycs, m_yrs);\n    cola::CompoundConstraints ccs;\n    for (vpsc::Constraints::iterator it=m_xcs.begin(); it!=m_xcs.end(); ++it) {\n        Constraint *c = *it;\n        int l = c->left->id, r = c->right->id;\n        if (l>=m_n) l = m_xAuxRectIndexInExtendedRS.at(l) + m_n;\n        if (r>=m_n) r = m_xAuxRectIndexInExtendedRS.at(r) + m_n;\n        ccs.push_back(new cola::SeparationConstraint(\n            XDIM, l, r, c->gap, c->equality\n        ));\n    }\n    for (vpsc::Constraints::iterator it=m_ycs.begin(); it!=m_ycs.end(); ++it) {\n        Constraint *c = *it;\n        int l = c->left->id, r = c->right->id;\n        if (l>=m_n) l = m_yAuxRectIndexInExtendedRS.at(l) + m_n;\n        if (r>=m_n) r = m_yAuxRectIndexInExtendedRS.at(r) + m_n;\n        ccs.push_back(new cola::SeparationConstraint(\n            YDIM, l, r, c->gap, c->equality\n        ));\n    }\n    popState();\n    return ccs;\n}\n\nvpsc::Rectangles ACALayout::properAndAuxRects(void)\n{\n    Rectangles rs;\n    for (Rectangles::iterator it=m_rs.begin(); it!=m_rs.end(); ++it) rs.push_back(*it);\n    for (Rectangles::iterator it=m_extendedRS.begin(); it!=m_extendedRS.end(); ++it) rs.push_back(*it);\n    return rs;\n}\n\nvoid ACALayout::layoutWithCurrentConstraints(void)\n{\n    // ACA is an experimental method. During development we tried a \"new\" method for layout\n    // which can be reactivating using the following boolean. For most cases we have found the\n    // old method preferable, so this is hardcoded to false. The code remains for the sake of\n    // future research.\n    bool useNewMethod = false;\n    // Delete the old FD layout object before creating a new one.\n    delete m_fdlayout;\n    // Decide which Rectangles to use:\n    vpsc::Rectangles rs = useNewMethod ? properAndAuxRects() : m_rs;\n    // Form the new FD layout.\n    m_fdlayout = new cola::ConstrainedFDLayout(rs, m_es, m_idealLength, m_edgeLengths, m_doneTest, m_preIteration);\n    // Node overlap prevention, with possible exemption sets:\n    if (useNewMethod) {\n        m_fdlayout->setAvoidNodeOverlaps(m_preventOverlaps);\n    } else {\n        m_fdlayout->setAvoidNodeOverlaps(m_preventOverlaps, m_nocExemptRects);\n    }\n#ifdef DEBUG_ACA_LAYOUT_STEP\n    // For getting info on unsatisfiable constraints:\n    UnsatisfiableConstraintInfos *unsatX = new UnsatisfiableConstraintInfos();\n    UnsatisfiableConstraintInfos *unsatY = new UnsatisfiableConstraintInfos();\n    m_fdlayout->setUnsatisfiableConstraintInfo(unsatX, unsatY);\n#endif\n    // Constraints:\n    cola::CompoundConstraints ccs = useNewMethod ? writeAllVPSCConstraintsAsCompound() : m_ccs;\n    m_fdlayout->setConstraints(ccs);\n    m_fdlayout->setClusterHierarchy(m_rc);\n    // Run the layout.\n    m_fdlayout->run();\n#ifdef DEBUG_ACA_LAYOUT_STEP\n    for (auto p : *unsatX) delete p;\n    for (auto p : *unsatY) delete p;\n    delete unsatX;\n    delete unsatY;\n#endif\n}\n\n// Only do a layout if some condition is met, e.g. stress has accumulated enough,\n// or period has been completed.\n// Returned boolean says whether we did a layout.\nbool ACALayout::layoutIfAppropriate(void)\n{\n    m_didLayoutForLastAlignment = false;\n    // TODO: Try something more sophisticated; maybe make stress measurement\n    // an option.\n    unsigned N = m_ordAligns.size();\n    if (N > 0 && N % m_layoutPeriod == 0) {\n        layoutWithCurrentConstraints();\n        m_didLayoutForLastAlignment = true;\n    }\n    return m_didLayoutForLastAlignment;\n}\n\nbool ACALayout::acaLoopOnce(void)\n{\n    OrderedAlignment *oa = chooseOA();\n    if (oa) {\n        // Add the new separated alignment constraints.\n        m_ccs.push_back(oa->separation);\n        m_ccs.push_back(oa->alignment);\n        // Redo the layout, with the new constraints.\n        layoutIfAppropriate();\n        // Update state tables.\n        updateStateTables(oa);\n        return true;\n    } else {\n        // We'll come to this case when there are no more alignments to be made.\n        // Do a layout if one wasn't done for the last alignment.\n        if (m_doFinalFDLayout && !m_didLayoutForLastAlignment) layoutWithCurrentConstraints();\n        return false;\n    }\n}\n\nvoid ACALayout::acaLoopOneByOne(void)\n{\n    // Choose a first alignment.\n    OrderedAlignment *oa = chooseOA();\n    while (oa) {\n        // Add the new separated alignment constraints.\n        m_ccs.push_back(oa->separation);\n        m_ccs.push_back(oa->alignment);\n        // Redo the layout, with the new constraints.\n        layoutIfAppropriate();\n        // Update state tables.\n        updateStateTables(oa);\n        // Choose next ordered alignment.\n        oa = chooseOA();\n    }\n    // If no layout was done on the final run, do one now.\n    if (m_doFinalFDLayout && !m_didLayoutForLastAlignment) {\n        layoutWithCurrentConstraints();\n    }\n}\n\nvoid ACALayout::acaLoopAllAtOnce(void)\n{\n    // Choose a first alignment.\n    OrderedAlignment *oa = chooseOA();\n    while (oa) {\n        // Add the new separated alignment constraints.\n        m_ccs.push_back(oa->separation);\n        m_ccs.push_back(oa->alignment);\n        // Update state tables.\n        updateStateTables(oa);\n        // Choose next ordered alignment.\n        oa = chooseOA();\n    }\n    // Redo the layout, with the new constraints.\n    layoutWithCurrentConstraints();\n}\n\nbool ACALayout::allOrNothing(OrderedAlignments oas)\n{\n    bool okay = true;\n    pushState();\n    pushRectCoords();\n    for (OrderedAlignments::const_iterator it=oas.begin(); it!=oas.end(); ++it) {\n        OrderedAlignment *oa = *it;\n        okay = applyIfFeasible(oa);\n        if (!okay) break;\n    }\n    if (!okay) {\n        //perror(\"All or nothing: nothing.\");\n        popRectCoords();\n        // Must trash any remaining edge shapes before popping the state.\n        removeNewEdgeShapesAccordingToStateStack();\n        popState();\n    } else {\n        //perror(\"All or nothing: all.\");\n        dropRectCoords();\n        dropState();\n        addOrderedAlignments(oas);\n        layoutIfAppropriate();\n    }\n    //layoutWithCurrentConstraints();\n    return okay;\n}\n\n// Record lengths of variable and constraint vectors, so we can restore them later.\nvoid ACALayout::pushState(void)\n{\n    unsigned nxv=m_xvs.size(), nyv=m_yvs.size(),\n             nxc=m_xcs.size(), nyc=m_ycs.size(),\n             nxr=m_xrs.size(), nyr=m_yrs.size();\n    m_sizeStack.push_back(nxv);\n    m_sizeStack.push_back(nyv);\n    m_sizeStack.push_back(nxc);\n    m_sizeStack.push_back(nyc);\n    m_sizeStack.push_back(nxr);\n    m_sizeStack.push_back(nyr);\n}\n\n// Restore lengths of vectors of Variables, Constraints, and Rectangles, by erasing tails.\n// First delete the objects pointed to in those tails.\nvoid ACALayout::popState(void)\n{\n    COLA_ASSERT(m_sizeStack.size()>=6);\n    // Retrieve prior lengths of the vectors.\n    unsigned nyr=m_sizeStack.back(); m_sizeStack.pop_back();\n    unsigned nxr=m_sizeStack.back(); m_sizeStack.pop_back();\n    unsigned nyc=m_sizeStack.back(); m_sizeStack.pop_back();\n    unsigned nxc=m_sizeStack.back(); m_sizeStack.pop_back();\n    unsigned nyv=m_sizeStack.back(); m_sizeStack.pop_back();\n    unsigned nxv=m_sizeStack.back(); m_sizeStack.pop_back();\n    // Delete the allocated objects.\n    for (auto it = m_xvs.begin()+nxv; it != m_xvs.end(); ++it) delete (*it);\n    for (auto it = m_yvs.begin()+nyv; it != m_yvs.end(); ++it) delete (*it);\n    for (auto it = m_xcs.begin()+nxc; it != m_xcs.end(); ++it) delete (*it);\n    for (auto it = m_ycs.begin()+nyc; it != m_ycs.end(); ++it) delete (*it);\n    for (auto it = m_xrs.begin()+nxr; it != m_xrs.end(); ++it) delete (*it);\n    for (auto it = m_yrs.begin()+nyr; it != m_yrs.end(); ++it) delete (*it);\n    // Truncate the vectors.\n    m_xvs.erase(m_xvs.begin()+nxv,m_xvs.end());\n    m_yvs.erase(m_yvs.begin()+nyv,m_yvs.end());\n    m_xcs.erase(m_xcs.begin()+nxc,m_xcs.end());\n    m_ycs.erase(m_ycs.begin()+nyc,m_ycs.end());\n    m_xrs.erase(m_xrs.begin()+nxr,m_xrs.end());\n    m_yrs.erase(m_yrs.begin()+nyr,m_yrs.end());\n}\n\n// Simply pop the last 6 sizes off the size stack.\nvoid ACALayout::dropState(void)\n{\n    COLA_ASSERT(m_sizeStack.size()>=6);\n    for (int i = 0; i < 6; ++i) m_sizeStack.pop_back();\n}\n\nvoid ACALayout::pushRectCoords(void)\n{\n    for (int i = 0; i < m_n; ++i) {\n        Rectangle *R = m_rs[i];\n        m_rectXStack.push_back(R->getCentreX());\n        m_rectYStack.push_back(R->getCentreY());\n    }\n}\n\nvoid ACALayout::popRectCoords(void)\n{\n    COLA_ASSERT(m_rectXStack.size()>=(size_t)m_n);\n    COLA_ASSERT(m_rectYStack.size()>=(size_t)m_n);\n    for (int i = 0; i < m_n; ++i) {\n        double x = m_rectXStack.back(); m_rectXStack.pop_back();\n        double y = m_rectYStack.back(); m_rectYStack.pop_back();\n        Rectangle *R = m_rs[m_n-1-i];\n        R->moveCentreX(x);\n        R->moveCentreY(y);\n    }\n}\n\nvoid ACALayout::dropRectCoords(void)\n{\n    COLA_ASSERT(m_rectXStack.size()>=(size_t)m_n);\n    COLA_ASSERT(m_rectYStack.size()>=(size_t)m_n);\n    for (int i = 0; i < m_n; ++i) {\n        m_rectXStack.pop_back();\n        m_rectYStack.pop_back();\n    }\n}\n\n/**\n * This method is used by the allOrNothing method. It is needed\n * because that method may successfully apply one or more\n * OrderedAlignements before encountering one that is infeasible,\n * and giving up. Ordinarily we use the applyIfFeasible method\n * to apply OrderedAlignments one at a time, and when they prove\n * infeasible that method (near the end) takes responsibility for\n * cleaning up all records of the new edge shape that was added.\n * This method is needed in order to clean up those same records,\n * only for the OrderedAlignments that /were/ feasible, and were\n * adopted, before an infeasible one was encountered.\n *\n * Note: the reason this method need not remove the new edge shapes\n * from either the m_xrs or m_yrs vectors is that those vectors are\n * restored to their prior state by the popState method, invoked\n * by the allOrNothing method.\n */\nvoid ACALayout::removeNewEdgeShapesAccordingToStateStack(void)\n{\n    // Check how many variables there were in both dimensions,\n    // in the previous state.\n    size_t N = m_sizeStack.size();\n    COLA_ASSERT(N>=6);\n    unsigned nyv=m_sizeStack[N-5];\n    unsigned nxv=m_sizeStack[N-6];\n    // And how many are there now?\n    unsigned Nyv = m_yvs.size();\n    unsigned Nxv = m_xvs.size();\n    // Revert the data structures that grow with addition\n    // of edge shapes.\n    // x-dimension\n    for (unsigned i = Nxv - 1; i >= nxv; i--) {\n        m_xGuidelineIndexToEdgeIndex.erase(i);\n        m_xnocs->removeShape(i);\n        m_xAuxRectIndexInExtendedRS.erase(i);\n    }\n    // y-dimension\n    for (unsigned j = Nyv - 1; j >= nyv; j--) {\n        m_yGuidelineIndexToEdgeIndex.erase(j);\n        m_ynocs->removeShape(j);\n        m_yAuxRectIndexInExtendedRS.erase(j);\n    }\n    // As for the m_extendedRS vector, there should be one new\n    // rectangle at the end of it for each of the edge shapes.\n    // We pop these off the vector now. (Could have done so in\n    // in the two loops above, but that would put cleverness over\n    // clarity.)\n    for (unsigned k = 0; k < (Nxv-nxv)+(Nyv-nyv); ++k) {\n        m_extendedRS.pop_back();\n    }\n}\n\nvpsc::Rectangle *ACALayout::makeRectForOA(OrderedAlignment *oa)\n{\n    return makeRectForEdge(oa->edgeIndex,oa->dim);\n}\n\nvpsc::Rectangle *ACALayout::makeRectForEdge(int j, vpsc::Dim dim)\n{\n    vpsc::Rectangle *R = new vpsc::Rectangle(0,1,0,1);\n    updateRectForEdge(R,j,dim);\n    return R;\n}\n\nvoid ACALayout::updateRectForEdge(Rectangle *R, int j, Dim dim)\n{\n    // Here dim should be HORIZONTAL when edge j has been horizontally\n    // aligned and R is supposed to be a wide box with a narrow height.\n    // Vice versa for VERTICAL.\n    cola::Edge e = m_es[j];\n    vpsc::Rectangle *srcR = m_rs[e.first], *tgtR = m_rs[e.second];\n    double srcZ = srcR->getCentreD(dim), tgtZ = tgtR->getCentreD(dim);\n    vpsc::Rectangle *lowR  = srcZ < tgtZ ? srcR : tgtR;\n    vpsc::Rectangle *highR = srcZ < tgtZ ? tgtR : srcR;\n    double x=0,X=0,y=0,Y=0;\n    if (dim==HORIZONTAL) {\n        X = highR->getMinX() - EDGE_SHAPE_BUFFER;\n        x = lowR->getMaxX()  + EDGE_SHAPE_BUFFER;\n        double avgY = ( lowR->getCentreY() + highR->getCentreY() ) / 2;\n        y = avgY - EDGE_SHAPE_HALF_THICKNESS;\n        Y = avgY + EDGE_SHAPE_HALF_THICKNESS;\n    } else {\n        Y = highR->getMinY() - EDGE_SHAPE_BUFFER;\n        y = lowR->getMaxY()  + EDGE_SHAPE_BUFFER;\n        double avgX = ( lowR->getCentreX() + highR->getCentreX() ) / 2;\n        x = avgX - EDGE_SHAPE_HALF_THICKNESS;\n        X = avgX + EDGE_SHAPE_HALF_THICKNESS;\n    }\n    R->setMinD(XDIM,x);\n    R->setMaxD(XDIM,X);\n    R->setMinD(YDIM,y);\n    R->setMaxD(YDIM,Y);\n}\n\n/*\n * We keep a rectangle for each aligned edge. This method updates the dimensions\n * of those rectangles as the edges move (i.e. their endpoints move) during the layout\n * process.\n */\nvoid ACALayout::recomputeEdgeShapes(Dim dim)\n{\n    // There is some risk of confusion here.\n    // When the dimension passed is XDIM, we will take this to mean that\n    // we are interested in computing non-overlap constraints in the\n    // x vars. This means that it is the /vertical/ edge shapes that need\n    // to be updated, i.e. the shapes representing vertically aligned\n    // edges, for which overlap removal means pushing nodes off to the\n    // left or right as needed.\n    // Conversely, if the dimension passed is YDIM, then we want to\n    // update the horizontal edge shapes and prepare for generation of\n    // non-overlap constraints on the y variables.\n    bool horiz = dim == YDIM;\n    int e = horiz ? m_numExtraYVars : m_numExtraXVars;\n    int b = m_n + e;\n    vpsc::Variables &vs = horiz ? m_yvs : m_xvs;\n    int N = vs.size();\n    std::map<int,int> &gi2ei = horiz ? m_yGuidelineIndexToEdgeIndex :\n                                       m_xGuidelineIndexToEdgeIndex;\n    vpsc::Rectangles &rs = horiz ? m_yrs : m_xrs;\n    cola::NonOverlapConstraints *nocs = horiz ? m_ynocs : m_xnocs;\n    for (int gi = b; gi < N; ++gi) {\n        int ei = gi2ei[gi];\n        Rectangle *R = rs[gi];\n        Dim perpDim = dim == YDIM ? XDIM : YDIM;\n        updateRectForEdge(R,ei,perpDim);\n        nocs->resizeShape(gi,R->width()/2.0,R->height()/2.0);\n    }\n}\n\nvoid ACALayout::updateNodeRectsFromVars(void)\n{\n    for (int i=0; i<m_n; ++i) {\n        m_rs[i]->moveCentreX(m_xvs[i]->finalPosition);\n        m_rs[i]->moveCentreY(m_yvs[i]->finalPosition);\n    }\n}\n\nvoid ACALayout::updateVarsFromNodeRects(void)\n{\n    for (int i=0; i<m_n; ++i) {\n        Rectangle *r = m_rs[i];\n        double x=r->getCentreX(), y=r->getCentreY();\n        m_xvs[i]->desiredPosition=x;\n        m_yvs[i]->desiredPosition=y;\n    }\n}\n\nOrderedAlignment *ACALayout::chooseOA(void)\n{\n    // First form potential alignments and sort by penalty score.\n    std::vector<OrderedAlignment*> oas;\n    // Consider each edge.\n    for (int j = 0; j < m_m; ++j) {\n        // If the edge is to be ignored, or is already aligned, then skip it.\n        if (m_ignoreEdge[j]) continue;\n        if (edgeIsAligned(j)) continue;\n        // Otherwise consider each cardinal direction.\n        ACASepFlag sf;\n        int sn = 1;\n        while (sn < 16) {\n            sf = (ACASepFlag) sn;\n            sn = sn << 1;\n            OrderedAlignment *oa = initOrdAlign(j, sf);\n            // Skip this one if it would enforce an overlap.\n            if (createsOverlap(oa)) continue;\n            // Otherwise compute the penalty and store the oa.\n            oa->penalty = computePenalty(j,sf);\n            oas.push_back(oa);\n        }\n    }\n    // Sort by penalty.\n    std::sort(oas.begin(),oas.end(),sortOrdAlignsByPenalty);\n    // Now, starting with the lowest-penalty alignments, look for a feasible one.\n    OrderedAlignment *nextOA = nullptr;\n    for (std::vector<OrderedAlignment*>::iterator it=oas.begin(); it!=oas.end(); ++it) {\n        OrderedAlignment *oa = *it;\n        bool applied = applyIfFeasible(oa);\n        if (applied) {\n            nextOA = oa; //needn't call completeOrdAlign, since already done by applyIfFeasible\n            m_ordAligns.push_back(oa);\n            break;\n        }\n    }\n    // Clean up: delete all OAs that are not being returned.\n    for (std::vector<OrderedAlignment*>::iterator it=oas.begin(); it!=oas.end(); ++it) {\n        OrderedAlignment *oa = *it;\n        if (oa != nextOA) {\n            delete oa;\n        }\n    }\n    return nextOA;\n}\n\nbool ACALayout::createsOverlap(OrderedAlignment *oa)\n{\n    int src = oa->src,\n        tgt = oa->tgt;\n    ACASepFlag sf = oa->sf;\n    // Determine which shape is low and which is high in the dimension of interest.\n    int lowIndex = sf==ACANORTH || sf==ACAWEST ? tgt : src;\n    int highIndex = (lowIndex==tgt ? src : tgt);\n    ACAFlag af = sepToAlignFlag(sf);\n    // Determine the coordinates in the dimension of interest.\n    vpsc::Rectangle *rLow = getRect(lowIndex), *rHigh = getRect(highIndex);\n    double lowCoord = af==ACAHORIZ ? rLow->getCentreX() : rLow->getCentreY();\n    double highCoord = af==ACAHORIZ ? rHigh->getCentreX() : rHigh->getCentreY();\n    // Let L and H be the low and high shapes respectively.\n    // We consider each node U which is already aligned with either L or H.\n    // Any such node must have lower coord than L if it is connected to L, and\n    // higher coord than H if it is connected to H. If either of those conditions\n    // fails, then we predict overlap.\n    bool overlap = false;\n    for (int j = 0; j < m_n; j++) {\n        if (j==lowIndex || j==highIndex) continue;\n        vpsc::Rectangle *r = getRect(j);\n        int lj = (*m_alignmentState)(lowIndex, j);\n        int hj = (*m_alignmentState)(highIndex, j);\n        if (lj&af || hj&af) {\n            double z = af==ACAHORIZ ? r->getCentreX() : r->getCentreY();\n            // low shape\n            if ( lj&ACACONN && lowCoord < z ) {\n                overlap = true; break;\n            }\n            // high shape\n            if ( hj&ACACONN && z < highCoord ) {\n                overlap = true; break;\n            }\n        }\n    }\n    return overlap;\n}\n\nOrderedAlignment *ACALayout::initOrdAlign(int j, ACASepFlag sf) const\n{\n    OrderedAlignment *oa = new OrderedAlignment();\n    cola::Edge e = m_es.at(j);\n    int src = e.first, tgt = e.second;\n    oa->af = sepToAlignFlag(sf);\n    oa->sf = sf;\n    oa->dim = oa->af == ACAHORIZ ? HORIZONTAL : VERTICAL;\n    oa->src = src;\n    oa->tgt = tgt;\n    oa->edgeIndex = j;\n    return oa;\n}\n\nOrderedAlignment *ACALayout::initOrdAlign(int s, int t, ACASepFlag sf, int edgeIndex) const\n{\n    OrderedAlignment *oa = new OrderedAlignment();\n    oa->sf = sf;\n    oa->af = sepToAlignFlag(sf);\n    oa->dim = oa->af == ACAHORIZ ? HORIZONTAL : VERTICAL;\n    oa->src  = s;\n    oa->tgt = t;\n    oa->edgeIndex = edgeIndex;\n    return oa;\n}\n\nvoid ACALayout::completeOrdAlign(OrderedAlignment *oa)\n{\n    // In order to create a SeparationConstraint, we need to work out which\n    // among the src and tgt of the ordalign is to be on the \"left\" and which\n    // on the \"right\" -- this in the VPSC sense, which is literal when we work in\n    // the x-dimension, and where \"left\" means \"above\" and \"right\" means\n    // \"below\" when we work in the y-dimension.\n    int src = oa->src, tgt = oa->tgt;\n    int l = -1, r = -1;\n    if (oa->af == ACAHORIZ) {\n        if (oa->sf & ACAEAST) {\n            l = src;\n            r = tgt;\n        } else {\n            l = tgt;\n            r = src;\n        }\n    } else {\n        if (oa->sf & ACASOUTH) {\n            l = src;\n            r = tgt;\n        } else {\n            l = tgt;\n            r = src;\n        }\n    }\n    COLA_ASSERT(l >= 0);\n    COLA_ASSERT(r >= 0);\n    vpsc::Rectangle *rl = getRect(l), *rr = getRect(r);\n    // Determine dimensions.\n    vpsc::Dim sepDim   = oa->af == ACAHORIZ ? vpsc::XDIM : vpsc::YDIM;\n    vpsc::Dim alignDim = oa->af == ACAHORIZ ? vpsc::YDIM : vpsc::XDIM;\n    // Create the separation constraint.\n    double sep = oa->af == ACAHORIZ ?\n                (rl->width()+rr->width())/2.0 : (rl->height()+rr->height())/2.0;\n    oa->separation = new cola::SeparationConstraint(sepDim,l,r,sep);\n    // Create the alignment constraint.\n    double pos = oa->af==ACAHORIZ ?\n                (rl->getCentreY()+rr->getCentreY())/2.0 : (rl->getCentreX()+rr->getCentreX())/2.0;\n    oa->alignment = new cola::AlignmentConstraint(alignDim,pos);\n    oa->alignment->addShape(l,oa->offsetSrc);\n    oa->alignment->addShape(r,oa->offsetTgt);\n}\n\nvoid ACALayout::updateGraph(void) {\n    COLA_ASSERT(m_graph != nullptr);\n    m_graph->updateNodesFromRects();\n    updateSepMatrix();\n}\n\nvoid ACALayout::updateSepMatrix(void) {\n    COLA_ASSERT(m_graph != nullptr);\n    SepMatrix &M = m_graph->getSepMatrix();\n    const std::map<size_t, id_type> &ix2id = m_graph->getColaGraphRep().ix2id;\n    updateSepMatrix(M, ix2id);\n}\n\nvoid ACALayout::updateSepMatrix(SepMatrix &M, const std::map<size_t, id_type> &ix2id) {\n    for (OrderedAlignment *oa : m_ordAligns) {\n        id_type id1 = ix2id.at(oa->src), id2 = ix2id.at(oa->tgt);\n        CardinalDir dir = CardinalDir::EAST; // initialise to quiet warning about default case we'll never reach\n        switch(oa->sf) {\n            case ACAEAST: dir = CardinalDir::EAST; break;\n            case ACASOUTH: dir = CardinalDir::SOUTH; break;\n            case ACAWEST: dir = CardinalDir::WEST; break;\n            case ACANORTH: dir = CardinalDir::NORTH; break;\n        default: break;\n        }\n        M.setCardinalOP(id1, id2, dir);\n    }\n}\n\nOrderedAlignment *ACALayout::mostRecentOA(void)\n{\n    OrderedAlignment *oa = nullptr;\n    if (!m_ordAligns.empty()) {\n        oa = m_ordAligns.back();\n    }\n    return oa;\n}\n\n/// %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n/// Feasibility Checking\n\n// This preprocessor directive controls whether ACA does a full VPSC solve, or\n// a mere VPSC satisfy, on each of the four checks performed in the applyIfFeasible\n// method. If defined, we do a full solve on each check.\n// Experimentation has shown better performance when this IS defined.\n#define ACA_FULLSOLVE_ON_EACH_CHECK\n/**\n * Check using VPSC whether the proposed OA is feasible, and, if so, apply it.\n * Return value says whether or not OA was feasible (and hence applied).\n */\nbool ACALayout::applyIfFeasible(OrderedAlignment *oa)\n{\n    // First check whether it is simply a bad separation.\n    if (badSeparation(oa->src, oa->tgt, oa->sf)) return false;\n    // If not, then proceed to use VPSC to check feasibility.\n    // Save the state before we make any changes.\n    pushState();\n    // Get dimensions.\n    bool horiz = oa->dim==HORIZONTAL;\n    Dim sepd = horiz ? XDIM : YDIM;\n    Dim alnd = horiz ? YDIM : XDIM;\n    // Assign vectors based on dimension.\n    Variables   &sepv = horiz ? m_xvs : m_yvs;\n    Constraints &sepc = horiz ? m_xcs : m_ycs;\n    Rectangles  &sepr = horiz ? m_xrs : m_yrs;\n    Variables   &alnv = horiz ? m_yvs : m_xvs;\n    Constraints &alnc = horiz ? m_ycs : m_xcs;\n    Rectangles  &alnr = horiz ? m_yrs : m_xrs;\n    // NOC objects\n    cola::NonOverlapConstraints *sepnocs = horiz ? m_xnocs : m_ynocs;\n    cola::NonOverlapConstraints *alnnocs = horiz ? m_ynocs : m_xnocs;\n    // Get map from guideline indices to edge indices for alignment dimension.\n    std::map<int,int> &gi2ei = horiz ? m_yGuidelineIndexToEdgeIndex :\n                                       m_xGuidelineIndexToEdgeIndex;\n    // Get map from auxiliary variable indices to indices in 'extendedRS' vector, which\n    // contains pointers to all auxiliary rectangles.\n    std::map<int,int> &auxRectToExtRS = horiz ? m_yAuxRectIndexInExtendedRS :\n                                                m_xAuxRectIndexInExtendedRS;\n    // Complete the OA, building its Sep and Align compound constraints.\n    completeOrdAlign(oa);\n    // Extend vectors.\n    oa->separation->generateSeparationConstraints(sepd,sepv,sepc,sepr);\n    oa->alignment->generateVariables(alnd,alnv);\n    oa->alignment->generateSeparationConstraints(alnd,alnv,alnc,alnr);\n    // New rectangle for aligned edge:\n    Rectangle *newRect = makeRectForOA(oa);\n    alnr.push_back(newRect);\n    int newRectIndex = alnv.size()-1;\n    gi2ei.insert(std::pair<int,int>(newRectIndex,oa->edgeIndex));\n    alnnocs->addShape(newRectIndex, newRect->width()/2.0, newRect->height()/2.0, 1, exemptionSetForEdge(oa->edgeIndex));\n    m_extendedRS.push_back(newRect);\n    auxRectToExtRS.insert(std::pair<int,int>(newRectIndex,m_extendedRS.size()-1));\n    // Save this state. We will return to this state if the OrderedAlignment\n    // in question turns out to be feasible, and we want to keep it.\n    pushState();\n    // Save current coordinates of nodes.\n    pushRectCoords();\n    // Check for satisfiability of the separation and alignment constraints,\n    // and of non-overlap constraints in both dimensions.\n    bool feasible = true;\n    IncSolver *seps = nullptr, *alns = nullptr;\n    IncSolver *sepnocsolv = nullptr, *alnnocsolv = nullptr;\n    // On previous calls to this function, some constraint(s) may have been\n    // marked as unsatisfiable. Here we clear any such flags before beginning\n    // the new satisfiability tests.\n    for (Constraints::iterator it=sepc.begin(); it!=sepc.end(); ++it) {\n        Constraint *c = *it;\n        c->unsatisfiable = false;\n    }\n    for (Constraints::iterator it=alnc.begin(); it!=alnc.end(); ++it) {\n        Constraint *c = *it;\n        c->unsatisfiable = false;\n    }\n    // Set variables to represent current node positions.\n    updateVarsFromNodeRects();\n    // Begin satisfiability tests:\n    // 1. The Separation Constraint:\n    seps = satisfy(sepv,sepc,feasible);\n    // 2. The Alignment Constraint:\n    if (feasible) alns = satisfy(alnv,alnc,feasible);\n\n    // 3. Non-overlap in the dimension of the alignment constraint:\n    if (feasible) {\n        updateNodeRectsFromVars();\n        recomputeEdgeShapes(alnd);\n        alnnocs->generateSeparationConstraints(alnd,alnv,alnc,alnr);\n        alnnocsolv = satisfy(alnv,alnc,feasible);\n    }\n\n    // 4. Non-Overlap in the dimension of the separation constraint:\n    if (feasible) {\n        updateNodeRectsFromVars();\n        recomputeEdgeShapes(sepd);\n        sepnocs->generateSeparationConstraints(sepd,sepv,sepc,sepr);\n        sepnocsolv = satisfy(sepv,sepc,feasible);\n    }\n\n    if (!feasible) {\n        // Pop state twice to return to state before this function call.\n        popState();\n        popState();\n        // Restore rectangle coordinates.\n        popRectCoords();\n        // Remove all records of the new edge shape.\n        gi2ei.erase(newRectIndex);\n        alnnocs->removeShape(newRectIndex);\n        auxRectToExtRS.erase(newRectIndex);\n        m_extendedRS.pop_back();\n    } else { // OA is feasible. We will keep it.\n#ifndef ACA_FULLSOLVE_ON_EACH_CHECK\n        // So far we have only tried to satisfy the constraints.\n        // Now we should actually find an optimal solution.\n        alnnocsolv->solve();\n        sepnocsolv->solve();\n#endif\n        // Accept the new node positions.\n        updateNodeRectsFromVars();\n        // Pop state just once to get rid of the NOCs, but keep the new ordered alignment.\n        popState();\n        // We do not need the other state and node coords that we saved.\n        dropState();\n        dropRectCoords();\n    }\n    delete seps;\n    delete alns;\n    delete sepnocsolv;\n    delete alnnocsolv;\n    return feasible;\n}\n\n// Constructs a solver and attempts to satisfy the passed constraints on the\n// passed vars. Sets the bool passed by reference according to whether it was\n// possible to satisfy the constraints.\nvpsc::IncSolver *ACALayout::satisfy(Variables &vs, Constraints &cs, bool &sat)\n{\n    IncSolver *solv = new IncSolver(vs,cs);\n    try {\n#ifdef ACA_FULLSOLVE_ON_EACH_CHECK\n        solv->solve();\n#else\n        solv->satisfy();\n#endif\n        sat = true;\n    } catch (UnsatisfiedConstraint uc) {\n        sat = false;\n    }\n    for (Constraints::iterator it=cs.begin(); it!=cs.end(); ++it) {\n        Constraint *c = *it;\n        if (c->unsatisfiable) {\n            sat = false;\n            break;\n        }\n    }\n    return solv;\n}\n\n// Say whether the proposed separation is a bad one.\nbool ACALayout::badSeparation(int j, ACASepFlag sf)\n{\n    // If allowed separations have been set, then check whether sf is allowed.\n    if (m_allowedSeps.size()>0) {\n        ACASepFlag allowed = m_allowedSeps.at(j);\n        if ( (sf&allowed) != sf ) return true; // it is a bad separation\n    }\n    // If we are /not/ doing aggressive ordering, then\n    // check if sf is ruled out for reversing existing order.\n    if (!m_aggressiveOrdering) {\n        cola::Edge e = m_es.at(j);\n        int src = e.first, tgt = e.second;\n        vpsc::Rectangle *rs = getRect(src), *rt = getRect(tgt);\n        double dx = rt->getCentreX() - rs->getCentreX();\n        double dy = rt->getCentreY() - rs->getCentreY();\n        ACASepFlag currPos = vectorToSepFlag(dx,dy);\n        bool conflict = propsedSepConflictsWithExistingPosition(sf,currPos);\n        if (conflict) return true; // it is a bad separation\n    }\n    return false;\n}\n\nbool ACALayout::badSeparation(int l, int r, ACASepFlag sf)\n{\n    // If we are /not/ doing aggressive ordering, then\n    // first check if sf is ruled out for reversing existing order.\n    //// Do aliasing\n    //l = alias(l);\n    //r = alias(r);\n    if (!m_aggressiveOrdering) {\n        vpsc::Rectangle *rs = getRect(l), *rt = getRect(r);\n        double dx = rt->getCentreX() - rs->getCentreX();\n        double dy = rt->getCentreY() - rs->getCentreY();\n        ACASepFlag currPos = vectorToSepFlag(dx,dy);\n        bool conflict = propsedSepConflictsWithExistingPosition(sf,currPos);\n        if (conflict) return true; // it is a bad separation\n    }\n    return false;\n}\n\n/// %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n/// Penalty evaluation\n\ndouble ACALayout::computePenalty(int j, ACASepFlag sf)\n{\n    double p = 0;\n    cola::Edge e = m_es.at(j);\n    int src = e.first, tgt = e.second;\n    // Basic penalty:\n    if (m_favourLongEdges) {\n        // Length:\n        p += lengthPenaltyForEdge(j);\n    } else {\n        // Deflection:\n        p += deflectionForEdge(j,sf);\n    }\n    // Bend points:\n    if (m_addBendPointPenalty) p += bendPointPenalty(src,tgt,sf);\n    // Leaves:\n    if (m_postponeLeaves) p += leafPenalty(src,tgt);\n    //\n    return p;\n}\n\ndouble ACALayout::lengthPenaltyForEdge(int j)\n{\n    cola::Edge e = m_es.at(j);\n    vpsc::Rectangle *src = m_rs.at(e.first), *tgt = m_rs.at(e.second);\n    double sx=src->getCentreX(), sy=src->getCentreY(), tx=tgt->getCentreX(), ty=tgt->getCentreY();\n    double dx=tx-sx, dy=ty-sy;\n    double l=sqrt(dx*dx+dy*dy);\n    return 1 - l/m_lengthUpperBound;\n    // FIXME: We really should update the \"length upper bound\" on each iteration, and make\n    // sure that it actually is an upper bound on all edge lengths. We need to do this so\n    // that this score can be between 0 and 1.\n}\n\n/* Compute a score in [0.0, 1.0] measuring how far edge j is deflected\n * from horizontal or vertical, depending on the passed alignment flag.\n *\n * If t is the angle the edge makes with the positive x-axis, then the\n * score we return is sin^2(t) for horizontal alignments, and cos^2(t)\n * for vertical.\n *\n * So smaller deflection scores mean edges that are closer to axis-aligned.\n */\ndouble ACALayout::deflectionForEdge(int j, ACASepFlag sf)\n{\n    cola::Edge e = m_es.at(j);\n    int src = e.first, tgt = e.second;\n    // Do aliasing\n    src = alias(src);\n    tgt = alias(tgt);\n    vpsc::Rectangle *s = getRect(src), *t = getRect(tgt);\n    // Start with centre points of the nodes.\n    double sx=s->getCentreX(), sy=s->getCentreY(), tx=t->getCentreX(), ty=t->getCentreY();\n    // Check offsets.\n    EdgeOffset offset = getEdgeOffsetForCompassDirection(j,sf);\n    if (sf&ACAEASTWEST) {\n        // It is a horizontal alignment, so the offset is to the y-dimension.\n        sy += offset.first;\n        ty += offset.second;\n    } else {\n        // It is a vertical alignment, so the offset is to the x-dimension.\n        sx += offset.first;\n        tx += offset.second;\n    }\n    return deflection(sx,sy,tx,ty,sf);\n}\n\ndouble ACALayout::deflection(double sx, double sy, double tx, double ty, ACASepFlag sf)\n{\n    double dx = tx-sx, dy = ty-sy;\n    double dx2 = dx*dx, dy2 = dy*dy;\n    double l = dx2 + dy2;\n    double dfl = sf==ACAWEST || sf==ACAEAST ? dy2/l : dx2/l;\n    return dfl;\n}\n\ndouble ACALayout::bendPointPenalty(int src, int tgt, ACASepFlag sf)\n{\n    double penalty = 0;\n    ACAFlag af = sepToAlignFlag(sf);\n    ACAFlag op = af==ACAHORIZ ? ACAVERT : ACAHORIZ;\n    std::set<int> &deg2Nodes = m_useNonLeafDegree ? m_nldeg2Nodes : m_deg2Nodes;\n    std::multimap<int,int> &nbrs = m_useNonLeafDegree ? m_nlnbrs : m_nbrs;\n    // First check whether src would be made into a bendpoint.\n    if (deg2Nodes.count(src)!=0) {\n        // Find neighbour j of src which is different from tgt, by iterating over nbrs of src.\n        int j = 0;\n        std::pair< std::multimap<int,int>::iterator, std::multimap<int,int>::iterator > range;\n        range = nbrs.equal_range(src);\n        for (std::multimap<int,int>::iterator it=range.first; it!=range.second; ++it) {\n            j = it->second;\n            if (j != tgt) break;\n        }\n        // Now check if they are aligned in the opposite dimension. If so, add penalty.\n        int as = (*m_alignmentState)(src,j);\n        if (as & op) penalty += BP_PENALTY;\n    }\n    // Now check whether tgt would be made into a bendpoint.\n    if (deg2Nodes.count(tgt)!=0) {\n        // Find neighbour j of tgt which is different from src, by iterating over nbrs of tgt.\n        int j = 0;\n        std::pair< std::multimap<int,int>::iterator, std::multimap<int,int>::iterator > range;\n        range = nbrs.equal_range(tgt);\n        for (std::multimap<int,int>::iterator it=range.first; it!=range.second; ++it) {\n            j = it->second;\n            if (j != src) break;\n        }\n        // Now check if they are aligned in the opposite dimension. If so, add penalty.\n        int as = (*m_alignmentState)(tgt,j);\n        if (as & op) penalty += BP_PENALTY;\n    }\n    return penalty;\n}\n\ndouble ACALayout::leafPenalty(int src, int tgt)\n{\n    double penalty = LEAF_PENALTY;\n    return m_leaves.count(src)!=0 || m_leaves.count(tgt)!=0 ? penalty : 0;\n}\n\nEdgeOffset ACALayout::getEdgeOffsetForCompassDirection(int j, ACASepFlag sf)\n{\n    EdgeOffset offset(0,0);\n    // If offsets have been specified for this sep flag, then retrieve\n    // the offset of the given index.\n    std::map<ACASepFlag,EdgeOffsets>::iterator it = m_edgeOffsets.find(sf);\n    if (it!=m_edgeOffsets.end()) {\n        EdgeOffsets offsets = it->second;\n        offset = offsets.at(j);\n    }\n    return offset;\n}\n\n\n\nstatic const double LIMIT = 100000000;\n\nstatic void reduceRange(double& val)\n{\n    val = std::min(val, LIMIT);\n    val = std::max(val, -LIMIT);\n}\n\nvoid ACALayout::outputInstanceToSVG(std::string instanceName)\n{\n    // Save current locale\n    char* originalLocale = setlocale(LC_NUMERIC, nullptr);\n    // Set locale to \"C\" to enforce decimal point\n    setlocale(LC_NUMERIC, \"C\");\n\n    std::string filename;\n    if (!instanceName.empty())\n    {\n        filename = instanceName;\n    }\n    else\n    {\n        filename = \"acalayout-debug\";\n    }\n    filename += \".svg\";\n    FILE *fp = fopen(filename.c_str(), \"w\");\n    if (fp == nullptr)\n    {\n        return;\n    }\n    double minX = LIMIT;\n    double minY = LIMIT;\n    double maxX = -LIMIT;\n    double maxY = -LIMIT;\n    // Find the bounds of the diagram.\n    for (size_t i = 0; i < m_rs.size(); ++i)\n    {\n        double rMinX = m_rs[i]->getMinX();\n        double rMaxX = m_rs[i]->getMaxX();\n        double rMinY = m_rs[i]->getMinY();\n        double rMaxY = m_rs[i]->getMaxY();\n        reduceRange(rMinX);\n        reduceRange(rMaxX);\n        reduceRange(rMinY);\n        reduceRange(rMaxY);\n        if (rMinX > -LIMIT)\n        {\n            minX = std::min(minX, rMinX);\n        }\n        if (rMaxX < LIMIT)\n        {\n            maxX = std::max(maxX,rMaxX);\n        }\n        if (rMinY > -LIMIT)\n        {\n            minY = std::min(minY, rMinY);\n        }\n        if (rMaxY < LIMIT)\n        {\n            maxY = std::max(maxY, rMaxY);\n        }\n    }\n    minX -= 50;\n    minY -= 50;\n    maxX += 50;\n    maxY += 50;\n\n    fprintf(fp, \"<?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?>\\n\");\n    fprintf(fp, \"<svg xmlns:inkscape=\\\"http://www.inkscape.org/namespaces/inkscape\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"100%%\\\" height=\\\"100%%\\\" viewBox=\\\"%g %g %g %g\\\">\\n\", minX, minY, maxX - minX, maxY - minY);\n\n    // Output source code to generate this ACALayout instance.\n    fprintf(fp, \"<!-- Source code to generate this instance:\\n\");\n    fprintf(fp, \"#include <vector>\\n\");\n    fprintf(fp, \"#include <utility>\\n\");\n    fprintf(fp, \"#include \\\"libcola/cola.h\\\"\\n\");\n    fprintf(fp, \"#include \\\"libdialect/aca.h\\\"\\n\");\n    fprintf(fp, \"using namespace cola;\\n\");\n    fprintf(fp, \"using namespace dialect;\\n\");\n    fprintf(fp, \"int main(void) {\\n\");\n    fprintf(fp, \"    CompoundConstraints ccs;\\n\");\n    fprintf(fp, \"    std::vector<Edge> es;\\n\");\n    fprintf(fp, \"    EdgeLengths eLengths;\\n\");\n    fprintf(fp, \"    double defaultEdgeLength=%g;\\n\", m_idealLength);\n    fprintf(fp, \"    std::vector<vpsc::Rectangle*> rs;\\n\");\n    fprintf(fp, \"    vpsc::Rectangle *rect = nullptr;\\n\\n\");\n    for (size_t i = 0; i < m_rs.size(); ++i)\n    {\n        fprintf(fp, \"    rect = new vpsc::Rectangle(%g, %g, %g, %g);\\n\",\n               m_rs[i]->getMinX(), m_rs[i]->getMaxX(),\n               m_rs[i]->getMinY(), m_rs[i]->getMaxY());\n        fprintf(fp, \"    rs.push_back(rect);\\n\\n\");\n    }\n    for(auto e=m_es.begin();e!=m_es.end();++e) {\n        fprintf(fp, \"    es.push_back(std::make_pair(%u, %u));\\n\", e->first, e->second);\n    }\n    \n    fprintf(fp, \"\\n\");\n\n    if (m_edgeLengths.size() > 0)\n    {\n        fprintf(fp, \"    eLengths.resize(%d);\\n\", (int) m_edgeLengths.size());\n        for (size_t i = 0; i < m_edgeLengths.size(); ++i)\n        {\n            fprintf(fp, \"    eLengths[%d] = %g;\\n\", (int) i, m_edgeLengths[i]);\n        }\n        fprintf(fp, \"\\n\");\n    }\n\n    for (cola::CompoundConstraints::iterator c = m_ccs.begin(); \n            c != m_ccs.end(); ++c)\n    {\n        (*c)->printCreationCode(fp);\n    }  \n    \n    fprintf(fp, \"    ACALayout alg(rs, es, ccs, defaultEdgeLength, eLengths);\\n\");\n    fprintf(fp, \"    alg.setAvoidNodeOverlaps(%s);\\n\", (m_preventOverlaps) ? \"true\" : \"false\");\n    if (m_rc)\n    {\n        m_rc->printCreationCode(fp);\n        fprintf(fp, \"    alg.setClusterHierarchy(cluster%llu);\\n\",\n                (unsigned long long) m_rc);\n    }\n    \n    /* OPTIONAL ACA SETTINGS */\n\n    // node aliases\n    fprintf(fp, \"\\n    std::map<int,int> aliases;\\n\");\n    for (std::map<int,int>::iterator alias = m_nodeAliases.begin();\n        alias != m_nodeAliases.end(); ++alias) {\n        fprintf(fp, \"    aliases[%d] = %d;\\n\", alias->first, alias->second);\n    }\n    fprintf(fp, \"    alg.setNodeAliases(aliases);\\n\");\n    \n    // edge ignores\n    fprintf(fp, \"\\n    std::vector<bool> edgeIgnores;\\n\");\n    for (std::vector<bool>::iterator eig = m_ignoreEdge.begin();\n        eig != m_ignoreEdge.end(); ++eig) {\n        if ((*eig)) {\n            fprintf(fp, \"    edgeIgnores.push_back(true);\\n\");\n        } else {\n            fprintf(fp, \"    edgeIgnores.push_back(false);\\n\");\n        }\n    }\n    fprintf(fp, \"    alg.ignoreEdges(edgeIgnores);\\n\");\n    \n\n    // edge ignores\n    fprintf(fp, \"\\n    std::vector<bool> ignoreNodeForOPWithOffsets;\\n\");\n    for (std::vector<bool>::iterator nig = m_ignoreNodeForOPWithOffsets.begin();\n        nig != m_ignoreNodeForOPWithOffsets.end(); ++nig) {\n        if ((*nig)) {\n            fprintf(fp, \"    ignoreNodeForOPWithOffsets.push_back(true);\\n\");\n        } else {\n            fprintf(fp, \"    ignoreNodeForOPWithOffsets.push_back(false);\\n\");\n        }\n    }\n    fprintf(fp, \"    alg.ignoreNodesForOPWithOffsets(ignoreNodeForOPWithOffsets);\\n\");\n\n    // allowed separations\n    fprintf(fp, \"\\n    std::vector<ACASepFlag> sepFlags;\\n\");\n    for (std::vector<ACASepFlag>::iterator sf = m_allowedSeps.begin();\n        sf != m_allowedSeps.end(); ++sf) {\n        fprintf(fp, \"    sepFlags.push_back((ACASepFlag) %d);\\n\", (*sf));\n    }\n    fprintf(fp, \"    alg.setAllowedDirections(sepFlags);\\n\");\n    \n    // edge offsets \n    fprintf(fp, \"\\n    EdgeOffset eo;\\n\");\n    for (std::map<ACASepFlag,EdgeOffsets>::iterator pair = m_edgeOffsets.begin();\n        pair != m_edgeOffsets.end(); ++pair) {\n        \n        EdgeOffsets edgeOffs = pair->second;\n        unsigned long long rand = (unsigned long long) &edgeOffs;\n        fprintf(fp, \"\\n    EdgeOffsets eoffs%llu;\\n\", rand);\n        \n        for (std::vector<EdgeOffset>::iterator offset = edgeOffs.begin();\n            offset != edgeOffs.end(); ++offset) {\n            fprintf(fp, \"    eo = std::make_pair(%g, %g);\\n\", offset->first, offset->second);\n            fprintf(fp, \"    eoffs%llu.push_back(eo);\\n\", rand);\n        }\n        \n        fprintf(fp, \"    alg.setAlignmentOffsetsForCompassDirection((ACASepFlag) %d, eoffs%llu);\\n\", pair->first, rand);\n    }\n    \n    // node exemptions\n    //if (m_fdlayout) {\n\t\tfprintf(fp, \"\\n\\n    std::vector<unsigned> exempt;\\n\");\n\t\tstd::set<ShapePair> pairs = m_nocExemptions->getExemptPairs();\n\t\tfor (std::set<ShapePair>::iterator p = pairs.begin();\n\t\t\t\tp != pairs.end(); ++p)\n\t\t{\n\t\t\tfprintf(fp, \"    exempt.push_back(%d);\\n\", (*p).index1());\n\t\t\tfprintf(fp, \"    exempt.push_back(%d);\\n\", (*p).index2());\n\t\t\tfprintf(fp, \"    alg.addGroupOfNonOverlapExemptRectangles(exempt);\\n\");\n\t\t\tfprintf(fp, \"    exempt.clear();\\n\");\n\t\t}\n    //}\n\n    fprintf(fp, \"\\n\\n\");\n    //fprintf(fp, \"    alg.layout();\\n\");\n    fprintf(fp, \"    alg.createAlignments();\\n\");\n\n    // Additional output that can be useful for debugging:\n    /*\n    fprintf(fp, \"    std::string output = \\\"\\\";\\n\");\n\n\tfprintf(fp, \"    // Show initial state.\\n\");\n    fprintf(fp, \"    cola::ConstrainedFDLayout fdl = cola::ConstrainedFDLayout(rs,es,defaultEdgeLength,eLengths);\\n\");\n\tfprintf(fp, \"    fdl.setConstraints(ccs);\\n\");\n\tfprintf(fp, \"    //fdl.runOnce(true,true);\\n\");\n\tfprintf(fp, \"    fdl.outputInstanceToSVG(\\\"ACA-test0-0000\\\");\\n\");\n\n\tfprintf(fp, \"    // Remove overlaps.\\n\");\n\tfprintf(fp, \"    alg.removeOverlaps();\\n\");\n\tfprintf(fp, \"    alg.getFDLayout()->outputInstanceToSVG(\\\"ACA-test0-0001\\\");\\n\");\n\n\tfprintf(fp, \"    int k = 2;\\n\");\n\tfprintf(fp, \"    char buf [100];\\n\");\n\tfprintf(fp, \"    while(alg.createOneAlignment()) {\\n\");\n\tfprintf(fp, \"    \t// Write SVG.\\n\");\n\tfprintf(fp, \"    \tcola::ConstrainedFDLayout *fdlayout = alg.getFDLayout();\\n\");\n\tfprintf(fp, \"    \tsprintf(buf,\\\"ACA-test0-%%04d\\\",k);\\n\");\n\tfprintf(fp, \"    \tstd::string s(buf);\\n\");\n\tfprintf(fp, \"    \tfdlayout->outputInstanceToSVG(s);\\n\");\n\tfprintf(fp, \"    \toutput += \\\"===================================================================\\\\n\\\";\\n\");\n\tfprintf(fp, \"    \toutput += s+\\\"\\\\n\\\";\\n\");\n\tfprintf(fp, \"    \tcola::OrderedAlignment *oa = alg.mostRecentOA();\\n\");\n\tfprintf(fp, \"    \tif (oa) {\\n\");\n\tfprintf(fp, \"    \t\tsprintf(buf,\\\"Alignment:\\\\n  Low: %%d, High: %%d, Edge: %%d, Type: %%d\\\\n\\\",\\n\");\n    fprintf(fp, \"    \t    \toa->src,oa->tgt,oa->edgeIndex,oa->af);\\n\");\n\tfprintf(fp, \"    \t    output += std::string(buf);\\n\");\n\tfprintf(fp, \"       }\\n\");\n\tfprintf(fp, \"       // Unsat constraints\\n\");\n\tfprintf(fp, \"       std::set<std::string> xStrings;\\n\");\n\tfprintf(fp, \"       cola::UnsatisfiableConstraintInfos *unsatX = alg.unsatX();\\n\");\n\tfprintf(fp, \"       for (UnsatisfiableConstraintInfos::iterator it=unsatX->begin(); it!=unsatX->end(); ++it) {\\n\");\n\tfprintf(fp, \"           xStrings.insert((**it).toString());\\n\");\n\tfprintf(fp, \"       }\\n\");\n\tfprintf(fp, \"       std::set<std::string> yStrings;\\n\");\n\tfprintf(fp, \"       cola::UnsatisfiableConstraintInfos *unsatY = alg.unsatY();\\n\");\n\tfprintf(fp, \"       for (UnsatisfiableConstraintInfos::iterator it=unsatY->begin(); it!=unsatY->end(); ++it) {\\n\");\n\tfprintf(fp, \"           yStrings.insert((**it).toString());\\n\");\n\tfprintf(fp, \"       }\\n\");\n\tfprintf(fp, \"       output += \\\"Unsat X:\\\\n\\\";\\n\");\n\tfprintf(fp, \"       for (std::set<std::string>::iterator it=xStrings.begin(); it!=xStrings.end(); ++it) {\\n\");\n\tfprintf(fp, \"           output += (*it)+\\\"\\\\n\\\";\\n\");\n\tfprintf(fp, \"       }\\n\");\n\tfprintf(fp, \"       output += \\\"Unsat Y:\\\\n\\\";\\n\");\n\tfprintf(fp, \"       for (std::set<std::string>::iterator it=yStrings.begin(); it!=yStrings.end(); ++it) {\\n\");\n\tfprintf(fp, \"           output += (*it)+\\\"\\\\n\\\";\\n\");\n\tfprintf(fp, \"       }\\n\");\n\tfprintf(fp, \"       k++;\\n\");\n\tfprintf(fp, \"    }\\n\");\n    */\n\n    // done!\n    fprintf(fp, \"};\\n\\n\");\n    fprintf(fp, \"-->\\n\");\n\n    if (m_rc)\n    {\n        m_rc->computeBoundingRect(m_rs);\n        fprintf(fp, \"<g inkscape:groupmode=\\\"layer\\\" \"\n            \"inkscape:label=\\\"Clusters\\\">\\n\");\n        m_rc->outputToSVG(fp);\n        fprintf(fp, \"</g>\\n\");\n    }\n\n    fprintf(fp, \"<g inkscape:groupmode=\\\"layer\\\" \"\n            \"inkscape:label=\\\"Rects\\\">\\n\");\n    for (size_t i = 0; i < m_rs.size(); ++i)\n    {\n        double minX = m_rs[i]->getMinX();\n        double maxX = m_rs[i]->getMaxX();\n        double minY = m_rs[i]->getMinY();\n        double maxY = m_rs[i]->getMaxY();\n    \n        fprintf(fp, \"<rect id=\\\"rect-%u\\\" x=\\\"%g\\\" y=\\\"%g\\\" width=\\\"%g\\\" \"\n                \"height=\\\"%g\\\" style=\\\"stroke-width: 1px; stroke: black; \"\n                \"fill: %s; fill-opacity: 0.3;\\\" />\\n\",\n                (unsigned) i, minX, minY, maxX - minX, maxY - minY,\n                m_ignoreNodeForOPWithOffsets[i] ? \"red\" : \"blue\");\n    }\n    fprintf(fp, \"</g>\\n\");\n\n    fprintf(fp, \"<g inkscape:groupmode=\\\"layer\\\" \"\n            \"inkscape:label=\\\"Edges\\\">\\n\");\n    // edges\n    for(int k = 0; (size_t)k < m_es.size(); ++k) {\n        unsigned i = m_es[k].first;\n        unsigned j = m_es[k].second;\n        fprintf(fp, \"<path d=\\\"M %g %g L %g %g\\\" \"\n                \"style=\\\"stroke-width: 1px; stroke: %s;\\\" />\\n\",\n                m_rs[i]->getCentreX(),\n                m_rs[i]->getCentreY(),\n                m_rs[j]->getCentreX(),\n                m_rs[j]->getCentreY(),\n                // if the edge is ignored for alignments, draw it pink\n                m_ignoreEdge[k] ? \"red\" : \"black\"\n        );\n    }\n    \n    // alignments\n    for (cola::CompoundConstraints::iterator c = m_ccs.begin(); \n            c != m_ccs.end(); ++c) {\n        \n        AlignmentConstraint* ac = dynamic_cast<AlignmentConstraint*>((*c));\n        if (ac) {\n            double gap = ac->position();\n            \n            // XDIM\n            double fstX = gap, fstY = minY, sndX = gap, sndY = maxY;\n            if (ac->dimension() == vpsc::YDIM) {\n               // YDIM\n            \tfstX = minX, fstY = gap, sndX = maxX, sndY = gap;\n            }\n            fprintf(fp, \"<path d=\\\"M %g %g L %g %g\\\" \"\n                    \"style=\\\"stroke-width: 1px; stroke: green;\\\" \"\n                    \"stroke-dasharray=\\\"10,10\\\" />\\n\",\n                    fstX, fstY, sndX, sndY);\n            \n        }\n    }\n    \n    \n    fprintf(fp, \"</g>\\n\");\n\n    fprintf(fp, \"</svg>\\n\");\n    fclose(fp);\n    // Restore locale\n    setlocale(LC_NUMERIC, originalLocale);\n}\n\n} // namespace dialect\n"
  },
  {
    "path": "cola/libdialect/aca.h",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libdialect - A library for computing DiAlEcT layouts:\n *                 D = Decompose/Distribute\n *                 A = Arrange\n *                 E = Expand/Emend\n *                 T = Transform\n *\n * Copyright (C) 2018  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n * Author(s):   Steve Kieffer   <http://skieffer.info>\n*/\n\n#ifndef ACA_H\n#define ACA_H\n\n#include <vector>\n#include <string>\n#include <utility>\n#include <map>\n#include <set>\n\n#include \"libcola/cola.h\"\n\n#include \"libdialect/util.h\"\n#include \"libdialect/commontypes.h\"\n#include \"libdialect/constraints.h\"\n#include \"libdialect/graphs.h\"\n\nnamespace dialect {\n\nenum ACAFlag {\n    ACAHORIZ = 1,\n    ACAVERT  = 2,\n    ACADELIB = 4,\n    ACACONN  = 8\n};\n\nenum ACASepFlag {\n    ACANOSEP      =  0,\n\n    ACANORTH      =  1,\n    ACAEAST       =  2,\n    ACASOUTH      =  4,\n    ACAWEST       =  8,\n\n    ACANORTHEAST  =  3,\n    ACASOUTHEAST  =  6,\n    ACANORTHWEST  =  9,\n    ACASOUTHWEST  = 12,\n\n    ACANORTHSOUTH =  5,\n    ACAEASTWEST   = 10,\n\n    ACANOTNORTH   = 14,\n    ACANOTEAST    = 13,\n    ACANOTSOUTH   = 11,\n    ACANOTWEST    =  7,\n\n    ACAALLSEP     = 15\n};\n\nACASepFlag negateSepFlag(ACASepFlag sf);\nACAFlag sepToAlignFlag(ACASepFlag sf);\nACAFlag perpAlignFlag(ACAFlag af);\nACASepFlag vectorToSepFlag(double dx, double dy);\nbool propsedSepConflictsWithExistingPosition(ACASepFlag pro, ACASepFlag ex);\n\nstruct OrderedAlignment {\n    OrderedAlignment() :\n        af(ACACONN), sf(ACANOSEP), src(-1), tgt(-1),\n        offsetSrc(0), offsetTgt(0),\n        separation(nullptr), alignment(nullptr), edgeIndex(-1) {}\n    //! @note  The OrderedAlignment destructor deliberately does NOT delete\n    //!        the cola::SeparationConstraint and cola::AlignmentConstraint\n    //!        to which it holds pointers. This is because instances of\n    //!        ACALayout add pointers to these constraints to a client-supplied\n    //!        vector of cola::CompoundConstraints, so that the client may\n    //!        continue to work with them. Thus, these constraints are part of\n    //!        the product an ACALayout instance produces for its client\n    //!        (the other part being new positions for the client-supplied\n    //!        Rectangles), and so it does not delete them. They are the\n    //!        client's responsibility.\n    ~OrderedAlignment() {}\n    ACAFlag af;\n    ACASepFlag sf;\n    vpsc::Dim dim;\n    int src;\n    int tgt;\n    double offsetSrc;\n    double offsetTgt;\n    cola::SeparationConstraint* separation;\n    cola::AlignmentConstraint* alignment;\n    int edgeIndex;\n    double penalty;\n};\n\nbool sortOrdAlignsByPenalty(const OrderedAlignment *lhs, const OrderedAlignment *rhs);\n\ntypedef std::vector<OrderedAlignment*> OrderedAlignments;\ntypedef std::pair<double,double> EdgeOffset;\ntypedef std::vector<EdgeOffset> EdgeOffsets;\ntypedef std::vector<ACASepFlag> ACASepFlags;\n\n/**\n * @brief Implements the Adaptive Constrained Alignment (ACA) algorithm.\n *\n * See\n * Steve Kieffer, Tim Dwyer, Kim Marriott, and Michael Wybrow.\n * \"Incremental grid-like layout using soft and hard constraints.\" In Graph\n * Drawing 2013, pp. 448-459. Springer International Publishing, 2013.\n */\nclass ACALayout {\npublic:\n    /**\n     * @brief Constructs an adaptive constrained alignment layout instance.\n     *\n     * Parameters are the same as for the ConstrainedFDLayout constructor,\n     * with the addition of a vector of constraints passed by reference.\n     *\n     * If the vector of constraints is non-empty, these constraints will be\n     * applied throughout the ACA process, and the new constraints created\n     * by ACA will not conflict with any of these.\n     *\n     * In any case, the new constraints generated by ACA are added to this vector.\n     *\n     * @param[in] rs  The bounding boxes of the nodes at their initial positions.\n     * @param[in] es  The edges, given as simple pairs of indices (i, j) into the\n     *                rectangle vector rs.\n     * @param[in] ccs  Vector of any pre-existing constraints, and the place where\n     *                 new constraints created by ACA will be recorded.\n     * @param[in] idealLength  The \"ideal edge length\" parameter for the stress function,\n     *                         i.e. the ideal separation between neighbouring nodes.\n     *                         If eLengths (see below) is specified, then this parameter\n     *                         becomes instead a scalar multiplier for the lengths given there.\n     * @param[in] preventOverlaps  Say whether non-overlap constraints should be generated\n     *                             for all rectangles.\n     * @param[in] eLengths  Individual ideal lengths for edges.\n     *                      The actual ideal length used for the ith edge is \n     *                      idealLength*eLengths[i]. If eLengths is not passed,\n     *                      then just idealLength is used (as if eLengths[i]\n     *                      were equal to 1 for all i).\n     * @param[in] done  A test of convergence operation called at the end of \n     *                  each iteration (optional).  If not given, uses a\n     *                  default TestConvergence object.\n     * @param[in] preIteration  An operation to be called before each iteration\n     *                          (optional).\n     */\n    ACALayout(\n        const vpsc::Rectangles& rs,\n        const std::vector<cola::Edge>& es,\n        cola::CompoundConstraints& ccs,\n        const double idealLength,\n        const cola::EdgeLengths& eLengths = cola::StandardEdgeLengths,\n        cola::TestConvergence* doneTest = nullptr,\n        cola::PreIteration* preIteration = nullptr);\n\n    /**\n     * @brief  Construct an ACALayout based on a Graph.\n     * @param[in]  G  the Graph\n     */\n    ACALayout(std::shared_ptr<dialect::Graph> G);\n        \n    // To prevent C++ objects from being destroyed in garbage collected languages\n    // when the libraries are called from SWIG, we hide the declarations of the\n    // destructors and prevent generation of default destructors.\n    #ifndef SWIG\n    ~ACALayout(void);\n    #endif\n    /**\n     * @brief Creates alignments.\n     *\n     * This is the main functionality of ACA. This function should be called\n     * on an existing layout in order to greedily align edges until any further\n     * alignments would create edge overlaps.\n     *\n     * If the graph does not have an initial layout already, then the 'layout'\n     * function may be called instead.\n     */\n    void createAlignments(void);\n    /**\n     * @brief Creates one alignment.\n     *\n     * Call this function instead of createAlignments in order to create just\n     * one alignment and then stop. The return value is true if and only if a\n     * new alignment was actually created.\n     *\n     * Thus, repeatedly calling this function until it returns false achieves\n     * the exact same result as simply calling createAlignments.\n     */\n    bool createOneAlignment(void);\n    /**\n     * @brief Creates all the requested alignments, or none if any is infeasible.\n     *\n     * @return true if all alignments are successfully applied, else false.\n     */\n    bool applyOAsAllOrNothing(OrderedAlignments oas);\n    /**\n     * @brief Do an initial stress-minimising layout, and then create alignments.\n     *\n     * This is a convenience function which first does a constrained force-directed\n     * layout of the given graph, and then calls the 'createAlignments' function.\n     */\n    void layout(void);\n    /**\n     * @brief Do an FD layout with overlap prevention, then stop.\n     */\n    void removeOverlaps(void);\n    /**\n     * @brief Run layout with current constraints, and with or without overlap\n     * prevention, as per the current settings.\n     */\n    void layoutWithCurrentConstraints(void);\n    /**\n      * @brief For forward compatibility (i.e. with Graphs), we offer a convenience method\n      *        to update the Graph (when we have one) with the positions and constraints chosen\n      *        by this object.\n      */\n    void updateGraph(void);\n    /**\n      * @brief Update the SepMatrix of the Graph on which this ACALayout was built (if any).\n      */\n    void updateSepMatrix(void);\n    /**\n     * @brief Update a given SepMatrix with all the ordered alignment constraints generated\n     *        by this ACA layout.\n     *\n     * @param[in]  M  the SepMatrix to be updated.\n     * @param[in]  ix2id  a mapping from Rectangle indices back to the IDs of the Nodes they represent.\n     */\n    void updateSepMatrix(SepMatrix &M, const std::map<size_t, id_type> &ix2id);\n\n    void outputInstanceToSVG(std::string filename);\n\n    cola::ConstrainedFDLayout *getFDLayout(void);\n\n    // Configuration methods:\n\n    /**\n     * @brief Control whether we avoid making bend points.\n     *\n     * We refer to a node of degree 2 as a \"bend point\" when one of its\n     * edges has been aligned horizontally and the other vertically.\n     *\n     * The default value of addBendPointPenalty is true. In this case a penalty\n     * score is added when choosing the next alignment in order to postpone\n     * creating bend points until no other choices remain.\n     *\n     * If set to false then there is no penalty score to postpone the creation\n     * of bend points.\n     *\n     * When there is both bend point penalty and leaf penalty (see below), then\n     * bend points will be created before leaf edges are aligned. This can be\n     * reversed by altering the BP_PENALTY and LEAF_PENALTY constants.\n     */\n    void addBendPointPenalty(bool b);\n    /**\n     * @brief Prefer long edges instead of ones that are close to aligned.\n     *\n     * This defaults to 'false', in which case ACA prefers to align edges that\n     * are almost aligned already. When set to 'true' it will instead choose\n     * the longest edges first.\n     */\n    void favourLongEdges(bool b);\n    /**\n     * @brief Say whether alignment of leaf edges should be saved for last.\n     *\n     * The default value is true.\n     */\n    void postponeLeaves(bool b);\n    /**\n     * @brief Say whether leaves should be counted when computing node degrees.\n     *\n     * The default value is true.\n     *\n     * This setting matters only if addBendPointPenalty is set to true.\n     * In that case, if useNonLeafDegree is also true then the nodes identified\n     * as potential bend points will be those having exactly 2 /non-leaf/ neighbours.\n     *\n     * When there is both leaf penalty and bend point penalty (see above), then\n     * bend points will be created before leaf edges are aligned. This can be\n     * reversed by altering the BP_PENALTY and LEAF_PENALTY constants.\n     */\n    void useNonLeafDegree(bool b);\n    /**\n     * @brief Say whether alignment choices should alternate with stress\n     *        minimisation steps.\n     *\n     * The default value of allAtOnce is false. In this case, after each new\n     * alignment is chosen, stress is again minimised before choosing the\n     * next one.\n     *\n     * If you set allAtOnce to true, then all the alignments will be chosen based\n     * on the initial layout, and then they will all be applied at once.\n     */\n    void allAtOnce(bool b);\n    /**\n     * @brief Say whether to consider changing orthogonal ordering of nodes.\n     *\n     * The default value is false. In that case, consider a pair of nodes\n     * u, v where v currently lies to the southeast of u. Then when ACA\n     * considers aligning u and v it will only consider putting v east or\n     * south of u; it will not consider reversing their current ordering in\n     * either dimension.\n     *\n     * In the same example, if you set aggressiveOrdering to true, then ACA\n     * will also consider putting v north and west of u.\n     *\n     * In the exceptional case of a node v lying, say, precisely east of a node\n     * u despite not being constrained to that alignment, then ACA will consider\n     * placing v east, north, and south of u even with aggressiveOrdering set\n     * to false. (But it will consider west only with it set to true.)\n     */\n    void aggressiveOrdering(bool b);\n    /**\n     * @brief  Specifies whether non-overlap constraints should be\n     *         automatically generated between all nodes.\n     *\n     * @param[in] avoidOverlaps     New boolean value for this option.\n     */\n    void setAvoidNodeOverlaps(bool avoidOverlaps);\n    /**\n     * @brief Specify that certain edges are never to be aligned.\n     *\n     * The number of booleans must equal the number of edges in the graph.\n     * Entry j should be 'true' if you want edge j to be ignored (never aligned);\n     * 'false' otherwise.\n     */\n    void ignoreEdges(std::vector<bool> ignore);\n    /**\n     * @brief Say that certain nodes may be crossed by edges.\n     *\n     * When using the ACAOPWITHOFFSETS option, a potential alignment will /not/ be\n     * marked as creating an edge-node overlap if for all indices i such that the\n     * alignment would make an edge overlap node i, the ith entry in the vector passed\n     * to this function is true.\n     */\n    void ignoreNodesForOPWithOffsets(std::vector<bool> ignore);\n    /**\n     * @brief Set certain nodes to be used in place of others.\n     *\n     * Pass a map m. Then for each computation that involves a node u, we will check\n     * whether u is a key in m, and if so will use m(u) instead.\n     */\n    void setNodeAliases(std::map<int,int> aliases);\n    /**\n     * @brief Say how to offset nodes when edges are aligned in a certain direction.\n     *\n     * The number of offsets must equal the number of edges in the graph.\n     * For any edge e=(s,t), let o=(ds,dt) be the corresponding offset. Then if ACA aligns edge e\n     * so that sf is the separation from s to t, then s will be offset from the alignment\n     * guideline by ds, and t by dt.\n     *\n     * If you do not set any offsets then offsets of zero will be used.\n     */\n    void setAlignmentOffsetsForCompassDirection(ACASepFlag sf, EdgeOffsets offsets);\n    /**\n     * @brief Say which separations are allowed for the source and target of each edge.\n     *\n     * The number of separation flags must equal the number of edges in the graph.\n     * For any edge e=(s,t), let f be the corresponding flag. Then when ACA considers\n     * aligning edge e it will only consider the directions whose bits are set in f.\n     *\n     * If you do not set allowed separations then all are considered to be allowed.\n     *\n     * Note that if aggressiveOrdering is false then even if you set ACAALLSEP as\n     * allowed direction, still only the two \"natural\" directions will be tried.\n     * (See aggressiveOrdering().)\n     */\n    void setAllowedDirections(ACASepFlags seps);\n    /**\n     * @brief sets the cluster hierarchy of the underlying FDLayout.\n     */\n    void setClusterHierarchy(cola::RootCluster *rc);\n    /**\n     * @brief Check whether an edge is aligned.\n     *\n     * Pass the index of the edge. The returned boolean says whether ACA aligned this edge.\n     */\n    bool edgeIsAligned(int j) const;\n    /**\n     * @brief Stop non-overlap constraints from being generated between certain nodes.\n     */\n    void addGroupOfNonOverlapExemptRectangles(std::vector<unsigned> rs);\n\n    bool nodesAreAligned(int i, int j) const;\n\n    void layoutPeriod(unsigned p);\n    void doFinalLayout(bool b);\n\n    void addOrderedAlignments(OrderedAlignments oas);\n    OrderedAlignment *initOrdAlign(int j, ACASepFlag sf) const;\n    OrderedAlignment *initOrdAlign(int s, int t, ACASepFlag sf, int edgeIndex=-1) const;\n\n    // Useful for debugging:\n    OrderedAlignment *mostRecentOA(void);\n    std::string writeAlignmentTable(void) const;\n    std::string aStateBeforeChop;\n    std::string writeStateForNodeIds(id_type id1, id_type id2);\n\nprivate:\n    /**\n     * Used by the constructor to compute the degrees of nodes in the graph, and\n     * determine which are the leaves, and which are the nodes of degree 2, both\n     * in the sense of ordinary degree and non-leaf degree.\n     */\n    void computeDegrees(void);\n    /**\n     * Used by the constructor to convert the incoming cola constraints into vpsc\n     * constraints, and then generate any additional variables that are needed by\n     * those constraints.\n     */\n    void generateVPSCConstraints(void);\n    /**\n     * Used only during initialisation of the state tables, to handle any additional\n     * variables generated by the incoming cola constraints.\n     */\n    int adjustVarNumForExtraVars(vpsc::Dim dim, int k);\n    /**\n     * Used by the constructor to initialise the state tables, computing the transitive\n     * closure of all incoming alignments and separations, based on the vpsc constraints\n     * to which the incoming cola constraints compile.\n     */\n    void initStateTables(void);\n    /**\n     * Record the specified alignment between rectangles i and j.\n     * Also record all additional alignments arising from the transitive\n     * closure.\n     *\n     * The numCols variable is only there to manage the state table\n     * initialisation process, where we have to deal with the extra variables\n     * generated by the incoming constraints.\n     */\n    void recordAlignmentWithClosure(int i, int j, ACAFlag af, int numCols = 0);\n\n    void initNOCs(void);\n\n    bool acaLoopOnce(void);\n    void acaLoopOneByOne(void);\n    void acaLoopAllAtOnce(void);\n\n    bool layoutIfAppropriate(void);\n    cola::CompoundConstraints writeAllVPSCConstraintsAsCompound(void);\n    vpsc::Rectangles properAndAuxRects(void);\n\n    void updateStateTables(OrderedAlignment *oa);\n\n    vpsc::Rectangle *makeRectForOA(OrderedAlignment *oa);\n    vpsc::Rectangle *makeRectForEdge(int j, vpsc::Dim dim);\n    void updateRectForEdge(vpsc::Rectangle *R, int j, vpsc::Dim dim);\n    void recomputeEdgeShapes(vpsc::Dim dim);\n    void updateNodeRectsFromVars(void);\n    void updateVarsFromNodeRects(void);\n    void pushState(void);\n    void popState(void);\n    void dropState(void);\n    void pushRectCoords(void);\n    void popRectCoords(void);\n    void dropRectCoords(void);\n    void removeNewEdgeShapesAccordingToStateStack(void);\n    std::set<unsigned> exemptionSetForEdge(int j);\n    OrderedAlignment *chooseOA(void);\n    bool createsOverlap(OrderedAlignment *oa);\n    bool allOrNothing(OrderedAlignments oas);\n    bool applyIfFeasible(OrderedAlignment *oa);\n    vpsc::IncSolver *satisfy(vpsc::Variables &vs, vpsc::Constraints &cs, bool &sat);\n\n    // In the following methods, the separation flag always means the direction from src to tgt.\n    void completeOrdAlign(OrderedAlignment *oa);\n    bool badSeparation(int j, ACASepFlag sf);\n    bool badSeparation(int l, int r, ACASepFlag sf);\n\n    double computePenalty(int j, ACASepFlag sf);\n    double lengthPenaltyForEdge(int j);\n    double deflectionForEdge(int j, ACASepFlag sf);\n    double deflection(double sx, double sy, double tx, double ty, ACASepFlag sf);\n    double bendPointPenalty(int src, int tgt, ACASepFlag sf);\n    double leafPenalty(int src, int tgt);\n\n    EdgeOffset getEdgeOffsetForCompassDirection(int j, ACASepFlag sf);\n    int alias(int i);\n    vpsc::Rectangle *getRect(int i, bool doAlias=false);\n\n    // The penalty values determine the order in which certain types of\n    // alignments will be created. (See above.)\n    // The PENALTY_BOUND must be greater than the sum of the other penalty\n    // values plus 1 (the maximum possible deflection score).\n\n    static const double BP_PENALTY; // can be applied twice for one edge\n    static const double LEAF_PENALTY;\n    static const double PENALTY_BOUND;\n\n    static const double EDGE_SHAPE_HALF_THICKNESS;\n    static const double EDGE_SHAPE_BUFFER;\n\n    Graph_SP m_graph;\n\n    int m_n; // number of nodes\n    int m_m; // number of edges\n    int m_numExtraXVars;\n    int m_numExtraYVars;\n    vpsc::Rectangles m_rs;\n    std::vector<cola::Edge> m_es;\n    cola::CompoundConstraints m_ccs;\n    cola::RootCluster *m_rc;\n\n    std::vector<bool> m_ignoreEdge;\n    std::vector<bool> m_ignoreNodeForOPWithOffsets;\n    std::map<ACASepFlag,EdgeOffsets> m_edgeOffsets;\n    ACASepFlags m_allowedSeps;\n    std::map<int,int> m_nodeAliases;\n\n    vpsc::Constraints m_xEqCs;\n    vpsc::Constraints m_xIneqCs;\n    vpsc::Constraints m_yEqCs;\n    vpsc::Constraints m_yIneqCs;\n    vpsc::Variables m_xvs;\n    vpsc::Variables m_yvs;\n\n    vpsc::Constraints m_xcs;\n    vpsc::Constraints m_ycs;\n\n    vpsc::Rectangles m_xrs;\n    vpsc::Rectangles m_yrs;\n\n    cola::NonOverlapConstraints *m_xnocs = nullptr;\n    cola::NonOverlapConstraints *m_ynocs = nullptr;\n\n    vpsc::Rectangles m_extendedRS;\n    std::map<int,int> m_xAuxRectIndexInExtendedRS;\n    std::map<int,int> m_yAuxRectIndexInExtendedRS;\n\n    double m_idealLength;\n    bool m_preventOverlaps;\n    cola::EdgeLengths m_edgeLengths;\n    cola::TestConvergence *m_doneTest = nullptr;\n    cola::PreIteration *m_preIteration = nullptr;\n\n    // Configuration:\n    bool m_addBendPointPenalty;\n    bool m_favourLongEdges;\n    bool m_postponeLeaves;\n    bool m_useNonLeafDegree;\n    bool m_allAtOnce;\n    bool m_aggressiveOrdering;\n\n    std::multimap<int,int> m_incidentEdges; // map node index to indices of incident edges\n    std::multimap<int,int> m_nlincidentEdges; // map node index to indices of incident edges\n    std::multimap<int,int> m_nbrs; // neighbours\n    std::multimap<int,int> m_nlnbrs; // non-leaf neighbours\n    std::set<int> m_leaves; // indices of rectangles that are leaves\n    std::set<int> m_deg2Nodes; // degree-2 nodes w.r.t. ordinary nbrs\n    std::set<int> m_nldeg2Nodes; // degree-2 nodes w.r.t. only non-leaf neighbours\n\n    Matrix2d<int> *m_alignmentState = nullptr;\n    // Keep a record of all OrderedAlignments created and applied.\n    std::vector<OrderedAlignment*> m_ordAligns;\n    std::set<int> m_alignedEdges;\n\n    cola::ConstrainedFDLayout *m_fdlayout = nullptr;\n\n    double m_lengthUpperBound;\n\n    std::vector<unsigned> m_sizeStack;\n    std::vector<double> m_rectXStack;\n    std::vector<double> m_rectYStack;\n    std::map<int,int> m_edgeIndexToGuidelineIndex;\n    std::map<int,int> m_guidelineIndexToEdgeIndex;\n\n    std::map<int,int> m_xGuidelineIndexToEdgeIndex;\n    std::map<int,int> m_yGuidelineIndexToEdgeIndex;\n\n    bool m_didLayoutForLastAlignment;\n    bool m_doFinalFDLayout;\n\n    std::vector < std::vector<unsigned> > m_nocExemptRects;\n    cola::NonOverlapConstraintExemptions *m_nocExemptions = nullptr;\n    bool m_nocsInitialised;\n    // Map each rect index to the set of all rect indices with which it is\n    // exempt from non-overlap constraints:\n    std::multimap<unsigned,unsigned> m_nocExemptionSets;\n\n    unsigned m_layoutPeriod;\n};\n\n} // namespace dialect\n\n\n#endif // ACA_H\n"
  },
  {
    "path": "cola/libdialect/bendseqlookup.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libdialect - A library for computing DiAlEcT layouts:\n *                 D = Decompose/Distribute\n *                 A = Arrange\n *                 E = Expand/Emend\n *                 T = Transform\n *\n * Copyright (C) 2018  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n * Author(s):   Steve Kieffer   <http://skieffer.info>\n*/\n\n/*\n * Generated by gen_bend_seq_lookup.py\n *\n*/\n\n#include <map>\n#include <vector>\n\n#include \"libdialect/ortho.h\"\n#include \"libdialect/chains.h\"\n\nusing dialect::CompassDir;\nusing dialect::CardinalDir;\nusing dialect::LinkShape;\nusing std::map;\nusing std::vector;\n\nconst map<CompassDir, map<CardinalDir, map<CardinalDir, vector<vector<LinkShape>>>>> dialect::minimalBendSeqs{\n    {CompassDir::NW, {\n        {CardinalDir::EAST, {\n            {CardinalDir::EAST, {\n                {LinkShape::TRC, LinkShape::BLC}\n            }},\n            {CardinalDir::SOUTH, {\n                {LinkShape::TRC}\n            }},\n            {CardinalDir::WEST, {\n                {LinkShape::TRC, LinkShape::BRC}\n            }},\n            {CardinalDir::NORTH, {\n                {LinkShape::TRC, LinkShape::BLC, LinkShape::BRC},\n                {LinkShape::TRC, LinkShape::BRC, LinkShape::BLC}\n            }}\n        }},\n        {CardinalDir::SOUTH, {\n            {CardinalDir::EAST, {\n                {LinkShape::BLC}\n            }},\n            {CardinalDir::SOUTH, {\n                {LinkShape::BLC, LinkShape::TRC}\n            }},\n            {CardinalDir::WEST, {\n                {LinkShape::BLC, LinkShape::TRC, LinkShape::BRC},\n                {LinkShape::BLC, LinkShape::BRC, LinkShape::TRC}\n            }},\n            {CardinalDir::NORTH, {\n                {LinkShape::BLC, LinkShape::BRC}\n            }}\n        }},\n        {CardinalDir::WEST, {\n            {CardinalDir::EAST, {\n                {LinkShape::TLC, LinkShape::BLC}\n            }},\n            {CardinalDir::SOUTH, {\n                {LinkShape::TLC, LinkShape::BLC, LinkShape::TRC},\n                {LinkShape::BLC, LinkShape::TLC, LinkShape::TRC}\n            }},\n            {CardinalDir::WEST, {\n                {LinkShape::BLC, LinkShape::TLC, LinkShape::TRC, LinkShape::BRC},\n                {LinkShape::TLC, LinkShape::BLC, LinkShape::TRC, LinkShape::BRC},\n                {LinkShape::TLC, LinkShape::BLC, LinkShape::BRC, LinkShape::TRC}\n            }},\n            {CardinalDir::NORTH, {\n                {LinkShape::TLC, LinkShape::BLC, LinkShape::BRC}\n            }}\n        }},\n        {CardinalDir::NORTH, {\n            {CardinalDir::EAST, {\n                {LinkShape::TLC, LinkShape::TRC, LinkShape::BLC},\n                {LinkShape::TRC, LinkShape::TLC, LinkShape::BLC}\n            }},\n            {CardinalDir::SOUTH, {\n                {LinkShape::TLC, LinkShape::TRC}\n            }},\n            {CardinalDir::WEST, {\n                {LinkShape::TLC, LinkShape::TRC, LinkShape::BRC}\n            }},\n            {CardinalDir::NORTH, {\n                {LinkShape::TRC, LinkShape::TLC, LinkShape::BLC, LinkShape::BRC},\n                {LinkShape::TLC, LinkShape::TRC, LinkShape::BLC, LinkShape::BRC},\n                {LinkShape::TLC, LinkShape::TRC, LinkShape::BRC, LinkShape::BLC}\n            }}\n        }}\n    }},\n    {CompassDir::NORTH, {\n        {CardinalDir::EAST, {\n            {CardinalDir::EAST, {\n                {LinkShape::BRC, LinkShape::TRC, LinkShape::TLC, LinkShape::BLC},\n                {LinkShape::TRC, LinkShape::BRC, LinkShape::TLC, LinkShape::BLC},\n                {LinkShape::TRC, LinkShape::BRC, LinkShape::BLC, LinkShape::TLC}\n            }},\n            {CardinalDir::SOUTH, {\n                {LinkShape::TRC, LinkShape::BRC, LinkShape::TLC}\n            }},\n            {CardinalDir::WEST, {\n                {LinkShape::TRC, LinkShape::BRC}\n            }},\n            {CardinalDir::NORTH, {\n                {LinkShape::TRC, LinkShape::BRC, LinkShape::BLC}\n            }}\n        }},\n        {CardinalDir::SOUTH, {\n            {CardinalDir::EAST, {\n                {LinkShape::BRC, LinkShape::TLC, LinkShape::BLC},\n                {LinkShape::BRC, LinkShape::BLC, LinkShape::TLC}\n            }},\n            {CardinalDir::SOUTH, {\n                {}\n            }},\n            {CardinalDir::WEST, {\n                {LinkShape::BLC, LinkShape::TRC, LinkShape::BRC},\n                {LinkShape::BLC, LinkShape::BRC, LinkShape::TRC}\n            }},\n            {CardinalDir::NORTH, {\n                {LinkShape::BRC, LinkShape::TLC, LinkShape::BLC, LinkShape::BRC},\n                {LinkShape::BLC, LinkShape::TRC, LinkShape::BRC, LinkShape::BLC}\n            }}\n        }},\n        {CardinalDir::WEST, {\n            {CardinalDir::EAST, {\n                {LinkShape::TLC, LinkShape::BLC}\n            }},\n            {CardinalDir::SOUTH, {\n                {LinkShape::TLC, LinkShape::BLC, LinkShape::TRC}\n            }},\n            {CardinalDir::WEST, {\n                {LinkShape::BLC, LinkShape::TLC, LinkShape::TRC, LinkShape::BRC},\n                {LinkShape::TLC, LinkShape::BLC, LinkShape::TRC, LinkShape::BRC},\n                {LinkShape::TLC, LinkShape::BLC, LinkShape::BRC, LinkShape::TRC}\n            }},\n            {CardinalDir::NORTH, {\n                {LinkShape::TLC, LinkShape::BLC, LinkShape::BRC}\n            }}\n        }},\n        {CardinalDir::NORTH, {\n            {CardinalDir::EAST, {\n                {LinkShape::TRC, LinkShape::TLC, LinkShape::BLC}\n            }},\n            {CardinalDir::SOUTH, {\n                {LinkShape::TLC, LinkShape::TRC, LinkShape::BRC, LinkShape::TLC},\n                {LinkShape::TRC, LinkShape::TLC, LinkShape::BLC, LinkShape::TRC}\n            }},\n            {CardinalDir::WEST, {\n                {LinkShape::TLC, LinkShape::TRC, LinkShape::BRC}\n            }},\n            {CardinalDir::NORTH, {\n                {LinkShape::TRC, LinkShape::TLC, LinkShape::BLC, LinkShape::BRC},\n                {LinkShape::TLC, LinkShape::TRC, LinkShape::BRC, LinkShape::BLC}\n            }}\n        }}\n    }},\n    {CompassDir::NE, {\n        {CardinalDir::EAST, {\n            {CardinalDir::EAST, {\n                {LinkShape::BRC, LinkShape::TRC, LinkShape::TLC, LinkShape::BLC},\n                {LinkShape::TRC, LinkShape::BRC, LinkShape::TLC, LinkShape::BLC},\n                {LinkShape::TRC, LinkShape::BRC, LinkShape::BLC, LinkShape::TLC}\n            }},\n            {CardinalDir::SOUTH, {\n                {LinkShape::TRC, LinkShape::BRC, LinkShape::TLC},\n                {LinkShape::BRC, LinkShape::TRC, LinkShape::TLC}\n            }},\n            {CardinalDir::WEST, {\n                {LinkShape::TRC, LinkShape::BRC}\n            }},\n            {CardinalDir::NORTH, {\n                {LinkShape::TRC, LinkShape::BRC, LinkShape::BLC}\n            }}\n        }},\n        {CardinalDir::SOUTH, {\n            {CardinalDir::EAST, {\n                {LinkShape::BRC, LinkShape::TLC, LinkShape::BLC},\n                {LinkShape::BRC, LinkShape::BLC, LinkShape::TLC}\n            }},\n            {CardinalDir::SOUTH, {\n                {LinkShape::BRC, LinkShape::TLC}\n            }},\n            {CardinalDir::WEST, {\n                {LinkShape::BRC}\n            }},\n            {CardinalDir::NORTH, {\n                {LinkShape::BRC, LinkShape::BLC}\n            }}\n        }},\n        {CardinalDir::WEST, {\n            {CardinalDir::EAST, {\n                {LinkShape::TLC, LinkShape::BLC}\n            }},\n            {CardinalDir::SOUTH, {\n                {LinkShape::TLC}\n            }},\n            {CardinalDir::WEST, {\n                {LinkShape::TLC, LinkShape::BRC}\n            }},\n            {CardinalDir::NORTH, {\n                {LinkShape::TLC, LinkShape::BRC, LinkShape::BLC},\n                {LinkShape::TLC, LinkShape::BLC, LinkShape::BRC}\n            }}\n        }},\n        {CardinalDir::NORTH, {\n            {CardinalDir::EAST, {\n                {LinkShape::TRC, LinkShape::TLC, LinkShape::BLC}\n            }},\n            {CardinalDir::SOUTH, {\n                {LinkShape::TRC, LinkShape::TLC}\n            }},\n            {CardinalDir::WEST, {\n                {LinkShape::TRC, LinkShape::TLC, LinkShape::BRC},\n                {LinkShape::TLC, LinkShape::TRC, LinkShape::BRC}\n            }},\n            {CardinalDir::NORTH, {\n                {LinkShape::TLC, LinkShape::TRC, LinkShape::BRC, LinkShape::BLC},\n                {LinkShape::TRC, LinkShape::TLC, LinkShape::BRC, LinkShape::BLC},\n                {LinkShape::TRC, LinkShape::TLC, LinkShape::BLC, LinkShape::BRC}\n            }}\n        }}\n    }},\n    {CompassDir::WEST, {\n        {CardinalDir::EAST, {\n            {CardinalDir::EAST, {\n                {}\n            }},\n            {CardinalDir::SOUTH, {\n                {LinkShape::BRC, LinkShape::TLC, LinkShape::TRC},\n                {LinkShape::BRC, LinkShape::TRC, LinkShape::TLC}\n            }},\n            {CardinalDir::WEST, {\n                {LinkShape::TRC, LinkShape::BLC, LinkShape::BRC, LinkShape::TRC},\n                {LinkShape::BRC, LinkShape::TLC, LinkShape::TRC, LinkShape::BRC}\n            }},\n            {CardinalDir::NORTH, {\n                {LinkShape::TRC, LinkShape::BLC, LinkShape::BRC},\n                {LinkShape::TRC, LinkShape::BRC, LinkShape::BLC}\n            }}\n        }},\n        {CardinalDir::SOUTH, {\n            {CardinalDir::EAST, {\n                {LinkShape::BLC, LinkShape::BRC, LinkShape::TLC}\n            }},\n            {CardinalDir::SOUTH, {\n                {LinkShape::BRC, LinkShape::BLC, LinkShape::TLC, LinkShape::TRC},\n                {LinkShape::BLC, LinkShape::BRC, LinkShape::TLC, LinkShape::TRC},\n                {LinkShape::BLC, LinkShape::BRC, LinkShape::TRC, LinkShape::TLC}\n            }},\n            {CardinalDir::WEST, {\n                {LinkShape::BLC, LinkShape::BRC, LinkShape::TRC}\n            }},\n            {CardinalDir::NORTH, {\n                {LinkShape::BLC, LinkShape::BRC}\n            }}\n        }},\n        {CardinalDir::WEST, {\n            {CardinalDir::EAST, {\n                {LinkShape::BLC, LinkShape::TLC, LinkShape::TRC, LinkShape::BLC},\n                {LinkShape::TLC, LinkShape::BLC, LinkShape::BRC, LinkShape::TLC}\n            }},\n            {CardinalDir::SOUTH, {\n                {LinkShape::BLC, LinkShape::TLC, LinkShape::TRC}\n            }},\n            {CardinalDir::WEST, {\n                {LinkShape::TLC, LinkShape::BLC, LinkShape::BRC, LinkShape::TRC},\n                {LinkShape::BLC, LinkShape::TLC, LinkShape::TRC, LinkShape::BRC}\n            }},\n            {CardinalDir::NORTH, {\n                {LinkShape::TLC, LinkShape::BLC, LinkShape::BRC}\n            }}\n        }},\n        {CardinalDir::NORTH, {\n            {CardinalDir::EAST, {\n                {LinkShape::TLC, LinkShape::TRC, LinkShape::BLC}\n            }},\n            {CardinalDir::SOUTH, {\n                {LinkShape::TLC, LinkShape::TRC}\n            }},\n            {CardinalDir::WEST, {\n                {LinkShape::TLC, LinkShape::TRC, LinkShape::BRC}\n            }},\n            {CardinalDir::NORTH, {\n                {LinkShape::TRC, LinkShape::TLC, LinkShape::BLC, LinkShape::BRC},\n                {LinkShape::TLC, LinkShape::TRC, LinkShape::BLC, LinkShape::BRC},\n                {LinkShape::TLC, LinkShape::TRC, LinkShape::BRC, LinkShape::BLC}\n            }}\n        }}\n    }},\n    {CompassDir::EAST, {\n        {CardinalDir::EAST, {\n            {CardinalDir::EAST, {\n                {LinkShape::BRC, LinkShape::TRC, LinkShape::TLC, LinkShape::BLC},\n                {LinkShape::TRC, LinkShape::BRC, LinkShape::BLC, LinkShape::TLC}\n            }},\n            {CardinalDir::SOUTH, {\n                {LinkShape::BRC, LinkShape::TRC, LinkShape::TLC}\n            }},\n            {CardinalDir::WEST, {\n                {LinkShape::TRC, LinkShape::BRC, LinkShape::BLC, LinkShape::TRC},\n                {LinkShape::BRC, LinkShape::TRC, LinkShape::TLC, LinkShape::BRC}\n            }},\n            {CardinalDir::NORTH, {\n                {LinkShape::TRC, LinkShape::BRC, LinkShape::BLC}\n            }}\n        }},\n        {CardinalDir::SOUTH, {\n            {CardinalDir::EAST, {\n                {LinkShape::BRC, LinkShape::BLC, LinkShape::TLC}\n            }},\n            {CardinalDir::SOUTH, {\n                {LinkShape::BLC, LinkShape::BRC, LinkShape::TRC, LinkShape::TLC},\n                {LinkShape::BRC, LinkShape::BLC, LinkShape::TRC, LinkShape::TLC},\n                {LinkShape::BRC, LinkShape::BLC, LinkShape::TLC, LinkShape::TRC}\n            }},\n            {CardinalDir::WEST, {\n                {LinkShape::BRC, LinkShape::BLC, LinkShape::TRC}\n            }},\n            {CardinalDir::NORTH, {\n                {LinkShape::BRC, LinkShape::BLC}\n            }}\n        }},\n        {CardinalDir::WEST, {\n            {CardinalDir::EAST, {\n                {LinkShape::BLC, LinkShape::TRC, LinkShape::TLC, LinkShape::BLC},\n                {LinkShape::TLC, LinkShape::BRC, LinkShape::BLC, LinkShape::TLC}\n            }},\n            {CardinalDir::SOUTH, {\n                {LinkShape::BLC, LinkShape::TRC, LinkShape::TLC},\n                {LinkShape::BLC, LinkShape::TLC, LinkShape::TRC}\n            }},\n            {CardinalDir::WEST, {\n                {}\n            }},\n            {CardinalDir::NORTH, {\n                {LinkShape::TLC, LinkShape::BRC, LinkShape::BLC},\n                {LinkShape::TLC, LinkShape::BLC, LinkShape::BRC}\n            }}\n        }},\n        {CardinalDir::NORTH, {\n            {CardinalDir::EAST, {\n                {LinkShape::TRC, LinkShape::TLC, LinkShape::BLC}\n            }},\n            {CardinalDir::SOUTH, {\n                {LinkShape::TRC, LinkShape::TLC}\n            }},\n            {CardinalDir::WEST, {\n                {LinkShape::TRC, LinkShape::TLC, LinkShape::BRC}\n            }},\n            {CardinalDir::NORTH, {\n                {LinkShape::TLC, LinkShape::TRC, LinkShape::BRC, LinkShape::BLC},\n                {LinkShape::TRC, LinkShape::TLC, LinkShape::BRC, LinkShape::BLC},\n                {LinkShape::TRC, LinkShape::TLC, LinkShape::BLC, LinkShape::BRC}\n            }}\n        }}\n    }},\n    {CompassDir::SW, {\n        {CardinalDir::EAST, {\n            {CardinalDir::EAST, {\n                {LinkShape::BRC, LinkShape::TLC}\n            }},\n            {CardinalDir::SOUTH, {\n                {LinkShape::BRC, LinkShape::TLC, LinkShape::TRC},\n                {LinkShape::BRC, LinkShape::TRC, LinkShape::TLC}\n            }},\n            {CardinalDir::WEST, {\n                {LinkShape::BRC, LinkShape::TRC}\n            }},\n            {CardinalDir::NORTH, {\n                {LinkShape::BRC}\n            }}\n        }},\n        {CardinalDir::SOUTH, {\n            {CardinalDir::EAST, {\n                {LinkShape::BLC, LinkShape::BRC, LinkShape::TLC},\n                {LinkShape::BRC, LinkShape::BLC, LinkShape::TLC}\n            }},\n            {CardinalDir::SOUTH, {\n                {LinkShape::BRC, LinkShape::BLC, LinkShape::TLC, LinkShape::TRC},\n                {LinkShape::BLC, LinkShape::BRC, LinkShape::TLC, LinkShape::TRC},\n                {LinkShape::BLC, LinkShape::BRC, LinkShape::TRC, LinkShape::TLC}\n            }},\n            {CardinalDir::WEST, {\n                {LinkShape::BLC, LinkShape::BRC, LinkShape::TRC}\n            }},\n            {CardinalDir::NORTH, {\n                {LinkShape::BLC, LinkShape::BRC}\n            }}\n        }},\n        {CardinalDir::WEST, {\n            {CardinalDir::EAST, {\n                {LinkShape::BLC, LinkShape::TLC}\n            }},\n            {CardinalDir::SOUTH, {\n                {LinkShape::BLC, LinkShape::TLC, LinkShape::TRC}\n            }},\n            {CardinalDir::WEST, {\n                {LinkShape::TLC, LinkShape::BLC, LinkShape::BRC, LinkShape::TRC},\n                {LinkShape::BLC, LinkShape::TLC, LinkShape::BRC, LinkShape::TRC},\n                {LinkShape::BLC, LinkShape::TLC, LinkShape::TRC, LinkShape::BRC}\n            }},\n            {CardinalDir::NORTH, {\n                {LinkShape::BLC, LinkShape::TLC, LinkShape::BRC},\n                {LinkShape::TLC, LinkShape::BLC, LinkShape::BRC}\n            }}\n        }},\n        {CardinalDir::NORTH, {\n            {CardinalDir::EAST, {\n                {LinkShape::TLC}\n            }},\n            {CardinalDir::SOUTH, {\n                {LinkShape::TLC, LinkShape::TRC}\n            }},\n            {CardinalDir::WEST, {\n                {LinkShape::TLC, LinkShape::BRC, LinkShape::TRC},\n                {LinkShape::TLC, LinkShape::TRC, LinkShape::BRC}\n            }},\n            {CardinalDir::NORTH, {\n                {LinkShape::TLC, LinkShape::BRC}\n            }}\n        }}\n    }},\n    {CompassDir::SOUTH, {\n        {CardinalDir::EAST, {\n            {CardinalDir::EAST, {\n                {LinkShape::TRC, LinkShape::BRC, LinkShape::BLC, LinkShape::TLC},\n                {LinkShape::BRC, LinkShape::TRC, LinkShape::BLC, LinkShape::TLC},\n                {LinkShape::BRC, LinkShape::TRC, LinkShape::TLC, LinkShape::BLC}\n            }},\n            {CardinalDir::SOUTH, {\n                {LinkShape::BRC, LinkShape::TRC, LinkShape::TLC}\n            }},\n            {CardinalDir::WEST, {\n                {LinkShape::BRC, LinkShape::TRC}\n            }},\n            {CardinalDir::NORTH, {\n                {LinkShape::BRC, LinkShape::TRC, LinkShape::BLC}\n            }}\n        }},\n        {CardinalDir::SOUTH, {\n            {CardinalDir::EAST, {\n                {LinkShape::BRC, LinkShape::BLC, LinkShape::TLC}\n            }},\n            {CardinalDir::SOUTH, {\n                {LinkShape::BLC, LinkShape::BRC, LinkShape::TRC, LinkShape::TLC},\n                {LinkShape::BRC, LinkShape::BLC, LinkShape::TLC, LinkShape::TRC}\n            }},\n            {CardinalDir::WEST, {\n                {LinkShape::BLC, LinkShape::BRC, LinkShape::TRC}\n            }},\n            {CardinalDir::NORTH, {\n                {LinkShape::BRC, LinkShape::BLC, LinkShape::TLC, LinkShape::BRC},\n                {LinkShape::BLC, LinkShape::BRC, LinkShape::TRC, LinkShape::BLC}\n            }}\n        }},\n        {CardinalDir::WEST, {\n            {CardinalDir::EAST, {\n                {LinkShape::BLC, LinkShape::TLC}\n            }},\n            {CardinalDir::SOUTH, {\n                {LinkShape::BLC, LinkShape::TLC, LinkShape::TRC}\n            }},\n            {CardinalDir::WEST, {\n                {LinkShape::TLC, LinkShape::BLC, LinkShape::BRC, LinkShape::TRC},\n                {LinkShape::BLC, LinkShape::TLC, LinkShape::BRC, LinkShape::TRC},\n                {LinkShape::BLC, LinkShape::TLC, LinkShape::TRC, LinkShape::BRC}\n            }},\n            {CardinalDir::NORTH, {\n                {LinkShape::BLC, LinkShape::TLC, LinkShape::BRC}\n            }}\n        }},\n        {CardinalDir::NORTH, {\n            {CardinalDir::EAST, {\n                {LinkShape::TRC, LinkShape::BLC, LinkShape::TLC},\n                {LinkShape::TRC, LinkShape::TLC, LinkShape::BLC}\n            }},\n            {CardinalDir::SOUTH, {\n                {LinkShape::TLC, LinkShape::BRC, LinkShape::TRC, LinkShape::TLC},\n                {LinkShape::TRC, LinkShape::BLC, LinkShape::TLC, LinkShape::TRC}\n            }},\n            {CardinalDir::WEST, {\n                {LinkShape::TLC, LinkShape::BRC, LinkShape::TRC},\n                {LinkShape::TLC, LinkShape::TRC, LinkShape::BRC}\n            }},\n            {CardinalDir::NORTH, {\n                {}\n            }}\n        }}\n    }},\n    {CompassDir::SE, {\n        {CardinalDir::EAST, {\n            {CardinalDir::EAST, {\n                {LinkShape::TRC, LinkShape::BRC, LinkShape::BLC, LinkShape::TLC},\n                {LinkShape::BRC, LinkShape::TRC, LinkShape::BLC, LinkShape::TLC},\n                {LinkShape::BRC, LinkShape::TRC, LinkShape::TLC, LinkShape::BLC}\n            }},\n            {CardinalDir::SOUTH, {\n                {LinkShape::BRC, LinkShape::TRC, LinkShape::TLC}\n            }},\n            {CardinalDir::WEST, {\n                {LinkShape::BRC, LinkShape::TRC}\n            }},\n            {CardinalDir::NORTH, {\n                {LinkShape::BRC, LinkShape::TRC, LinkShape::BLC},\n                {LinkShape::TRC, LinkShape::BRC, LinkShape::BLC}\n            }}\n        }},\n        {CardinalDir::SOUTH, {\n            {CardinalDir::EAST, {\n                {LinkShape::BRC, LinkShape::BLC, LinkShape::TLC}\n            }},\n            {CardinalDir::SOUTH, {\n                {LinkShape::BLC, LinkShape::BRC, LinkShape::TRC, LinkShape::TLC},\n                {LinkShape::BRC, LinkShape::BLC, LinkShape::TRC, LinkShape::TLC},\n                {LinkShape::BRC, LinkShape::BLC, LinkShape::TLC, LinkShape::TRC}\n            }},\n            {CardinalDir::WEST, {\n                {LinkShape::BRC, LinkShape::BLC, LinkShape::TRC},\n                {LinkShape::BLC, LinkShape::BRC, LinkShape::TRC}\n            }},\n            {CardinalDir::NORTH, {\n                {LinkShape::BRC, LinkShape::BLC}\n            }}\n        }},\n        {CardinalDir::WEST, {\n            {CardinalDir::EAST, {\n                {LinkShape::BLC, LinkShape::TLC}\n            }},\n            {CardinalDir::SOUTH, {\n                {LinkShape::BLC, LinkShape::TRC, LinkShape::TLC},\n                {LinkShape::BLC, LinkShape::TLC, LinkShape::TRC}\n            }},\n            {CardinalDir::WEST, {\n                {LinkShape::BLC, LinkShape::TRC}\n            }},\n            {CardinalDir::NORTH, {\n                {LinkShape::BLC}\n            }}\n        }},\n        {CardinalDir::NORTH, {\n            {CardinalDir::EAST, {\n                {LinkShape::TRC, LinkShape::BLC, LinkShape::TLC},\n                {LinkShape::TRC, LinkShape::TLC, LinkShape::BLC}\n            }},\n            {CardinalDir::SOUTH, {\n                {LinkShape::TRC, LinkShape::TLC}\n            }},\n            {CardinalDir::WEST, {\n                {LinkShape::TRC}\n            }},\n            {CardinalDir::NORTH, {\n                {LinkShape::TRC, LinkShape::BLC}\n            }}\n        }}\n    }}\n};\n"
  },
  {
    "path": "cola/libdialect/chains.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libdialect - A library for computing DiAlEcT layouts:\n *                 D = Decompose/Distribute\n *                 A = Arrange\n *                 E = Expand/Emend\n *                 T = Transform\n *\n * Copyright (C) 2018  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n * Author(s):   Steve Kieffer   <http://skieffer.info>\n*/\n\n#include <stdexcept>\n#include <algorithm>\n#include <limits>\n#include <map>\n#include <cmath>\n#include <functional>\n#include <math.h>\n#include <string>\n#include <memory>\n#include <vector>\n#include <deque>\n#include <utility>\n\n#include \"libvpsc/assertions.h\"\n#include \"libavoid/geomtypes.h\"\n\n#include \"libdialect/commontypes.h\"\n#include \"libdialect/graphs.h\"\n#include \"libdialect/ortho.h\"\n#include \"libdialect/constraints.h\"\n#include \"libdialect/chains.h\"\n\nusing namespace dialect;\n\nusing Avoid::Point;\n\nusing std::pair;\nusing std::deque;\nusing std::vector;\nusing std::map;\nusing std::atan2;\nusing std::sqrt;\nusing std::fabs;\n\nconst LinkShapes dialect::bentLinkShapeCw{\n    LinkShape::TLC, LinkShape::TRC, LinkShape::BRC, LinkShape::BLC\n};\n\nLinkShapes dialect::bentLinkShapeCwFromStartingPt(LinkShape start) {\n    size_t i0 = Chain::npos;\n    for (size_t i = 0; i < 4; ++i) if (bentLinkShapeCw[i] == start) { i0 = i; break; }\n    // Make sure a straight LinkShape was not passed.\n    COLA_ASSERT(i0 != Chain::npos);\n    LinkShapes ls;\n    ls.resize(4);\n    for (size_t i = 0; i < 4; ++i) {\n        ls[i] = bentLinkShapeCw[(i0+i)%4];\n    }\n    return ls;\n}\n\nconst map<LinkShape, map<CardinalDir, CardinalDir>> dialect::applyBendToDir{\n    {LinkShape::TLC, { {CardinalDir::NORTH, CardinalDir::EAST}, {CardinalDir::WEST, CardinalDir::SOUTH} }},\n    {LinkShape::TRC, { {CardinalDir::NORTH, CardinalDir::WEST}, {CardinalDir::EAST, CardinalDir::SOUTH} }},\n    {LinkShape::BRC, { {CardinalDir::SOUTH, CardinalDir::WEST}, {CardinalDir::EAST, CardinalDir::NORTH} }},\n    {LinkShape::BLC, { {CardinalDir::SOUTH, CardinalDir::EAST}, {CardinalDir::WEST, CardinalDir::NORTH} }}\n};\n\nconst map<LinkShape, CardinalDir> dialect::cwIncomingDirForBend{\n    {LinkShape::TLC, CardinalDir::NORTH},\n    {LinkShape::TRC, CardinalDir::EAST},\n    {LinkShape::BRC, CardinalDir::SOUTH},\n    {LinkShape::BLC, CardinalDir::WEST}\n};\n\nstd::vector<std::vector<LinkShape>> dialect::lookupMinimalBendSeqs(Node_SP A, CardinalDir d0, Node_SP Z, CardinalDir d1) {\n    // The case in which nodes Z and A are the same is a legitimate one. For example, in a figure-8 network, we have\n    // two chains, each of which is not a cycle but does have the same node as both its left and right anchor.\n    CompassDir c;\n    if (Z == A) {\n        // In this case it turns out the minimal bend sequences are exactly the same as when A differs from Z and lies\n        // in the direction d1 from it. So we can simply set c equal to d1 in this case.\n        c = (CompassDir)d1;\n    } else {\n        c = Compass::compassDirection(Z, A);\n    }\n    return minimalBendSeqs.at(c).at(d0).at(d1);\n}\n\nCardinalDirs dialect::possibleCardinalDirections(Node_SP node1, Node_SP node2) {\n    Point c1 = node1->getCentre(),\n          c2 = node2->getCentre();\n    double dx = c2.x - c1.x,\n           dy = c2.y - c1.y;\n    CardinalDirs dirs;\n    if (dx > 0) dirs.push_back(CardinalDir::EAST);\n    if (dx < 0) dirs.push_back(CardinalDir::WEST);\n    if (dy > 0) dirs.push_back(CardinalDir::SOUTH);\n    if (dy < 0) dirs.push_back(CardinalDir::NORTH);\n    return dirs;\n}\n\nLinkShape dialect::shapeOfLink(Node_SP link) {\n    const EdgesById &E = link->getEdgeLookup();\n    if (E.size() != 2) throw std::runtime_error(\"Cannot compute LinkShape for non-link node.\");\n    // The order of values in the LinkShape enum is designed so that this works:\n    int s = 0;\n    for (auto p : E) {\n        Edge_SP e = p.second;\n        Node_SP u = e->getOtherEnd(*link);\n        CardinalDir d = Compass::cardinalDirection(link, u);\n        int a = (int) d;\n        if (a == 0) --a;\n        s += a;\n    }\n    return (LinkShape) s;\n}\n\nconst size_t Chain::npos = -1;\n\nChain::Chain(Graph_SP G, std::deque<Node_SP> nodes, bool isCycle)\n    : m_graph(G),\n      m_isCycle(isCycle)\n{\n    size_t n = nodes.size();\n    m_n = n;\n    // Cannot have an empty chain.\n    if (n == 0) throw std::runtime_error(\"Cannot have an empty chain\");\n    // Copy the nodes into member storage.\n    // The way we do this depends on whether it is a cycle.\n    bool mustReverse = false;\n    if (m_isCycle) {\n        COLA_ASSERT(n >= 3);\n        // For cycles, we always store the nodes in clockwise order.\n        // Start by getting the index of a node of minimal y-coord, plus the indices of its neighbours.\n        double minY = std::numeric_limits<double>::max();\n        size_t i1 = n;\n        for (size_t i = 0; i < n; ++i) {\n            Node_SP u = nodes[i];\n            Point c = u->getCentre();\n            if (c.y < minY) {\n                minY = c.y;\n                i1 = i;\n            }\n        }\n        size_t i0 = (i1 + n - 1) % n,\n               i2 = (i1 + 1) % n;\n        // Get the Nodes at these indices, and their centre points.\n        Node_SP u0 = nodes[i0],\n                u1 = nodes[i1],\n                u2 = nodes[i2];\n        Point c0 = u0->getCentre(),\n              c1 = u1->getCentre(),\n              c2 = u2->getCentre();\n        // If node u0 lies to the right of node u1, then the nodes are given in anticlockwise\n        // order, and must be reversed.\n        if (c0.x > c1.x) mustReverse = true;\n        // Otherwise consider the case in which nodes u0 and u1 are vertically aligned.\n        else if (c0.x == c1.x) {\n            // Implied by the assumption that the cycle even /has/ an interior to speak of,\n            // is that the cycle is not self-intersecting. Therefore, since both neighbouring\n            // nodes u0 and u2 have y-coord >= that of u1, they cannot both have the same\n            // x-coord as u1. Therefore...\n            COLA_ASSERT(c2.x != c1.x);\n            // And in this case if node u2 lies to the left of node u1, then we need to reverse.\n            if (c2.x < c1.x) mustReverse = true;\n        }\n    }\n    m_nodes.resize(n);\n    if (mustReverse) {\n        std::reverse_copy(nodes.begin(), nodes.end(), m_nodes.begin());\n    } else {\n        std::copy(nodes.begin(), nodes.end(), m_nodes.begin());\n    }\n    // Compute and store the shape of each link.\n    for (Node_SP u : m_nodes) m_linkShapes.push_back(shapeOfLink(u));\n    // Determine the sequence of internal edges, as well as the anchor nodes and edges if\n    // it is not a cycle, or the \"return edge\" if it is.\n    // Get the first node.\n    Node_SP u0 = m_nodes.front();\n    // Get its two incident edges.\n    Edges E;\n    for (auto p : u0->getEdgeLookup()) E.push_back(p.second);\n    Edge_SP e1 = E[0],\n            e2 = E[1];\n    // Get the nodes at the other ends of those edges.\n    Node_SP u1 = e1->getOtherEnd(*u0),\n            u2 = e2->getOtherEnd(*u0);\n    // In order to compute the sequence of internal edges, we need to identify the edge e0 that\n    // leads into node u0 from the left.\n    Edge_SP e0 = nullptr;\n    if (n==1) {\n        // In this case 'left' and 'right' are meaningless, so record the nodes and edges in any way.\n        m_anchorNodeLeft = u1;\n        m_anchorEdgeLeft = e1;\n        m_anchorNodeRight = u2;\n        m_anchorEdgeRight = e2;\n    } else {\n        // There are at least two nodes.\n        // First determine the left anchor node and edge.\n        if (u1 == m_nodes[1]) {\n            m_anchorNodeLeft = u2;\n            m_anchorEdgeLeft = e2;\n            e0 = e1;\n        } else {\n            m_anchorNodeLeft = u1;\n            m_anchorEdgeLeft = e1;\n            e0 = e2;\n        }\n        // Now we can compute the sequence of edges.\n        for (auto it = m_nodes.begin() + 1; it != m_nodes.end(); ++it) {\n            // Record edge.\n            m_edges.push_back(e0);\n            // Get next edge.\n            u0 = *it;\n            for (auto p : u0->getEdgeLookup()) {\n                if (p.second != e0) {\n                    e0 = p.second;\n                    break;\n                }\n            }\n        }\n        // And determine the right anchor node and edge.\n        m_anchorEdgeRight = e0;\n        m_anchorNodeRight = e0->getOtherEnd(*u0);\n        // And finally, if it's a cycle, the \"anchors\" are meaningless (but harmless), and the\n        // \"return edge\" is equal to either of the anchor edges.\n        if (m_isCycle) m_returnEdge = m_anchorEdgeRight;\n    }\n\n}\n\nNode_SP Chain::getNode(int i) const {\n    if (i == -2) {\n        return m_anchorNodeLeft;\n    }\n    size_t i_pos = (size_t) i;\n    COLA_ASSERT(i_pos%2 == 0 && i_pos <= 2*m_n);\n    if (i_pos == 2*m_n) {\n        return m_anchorNodeRight;\n    } else {\n        return m_nodes[(size_t)(i_pos/2)];\n    }\n}\n\nEdge_SP Chain::getEdge(int i) const {\n    if (i == -1) {\n        return m_anchorEdgeLeft;\n    }\n    size_t i_pos = (size_t) i;\n    COLA_ASSERT(i_pos%2 == 1 && i_pos <= 2*m_n - 1);\n    if (i_pos == 2*m_n - 1) {\n        return m_anchorEdgeRight;\n    } else {\n        return m_edges[(size_t)((i_pos-1)/2)];\n    }\n}\n\ndouble Chain::bendCost(LinkShape bendType, size_t i0) const {\n    // First compute the angle alpha for position i0.\n    // This is the atan2 for a vector z from point p to point q, where\n    //   if i0 is an edge then p is centre of node i0 - 1 and q centre of node i0 + 1;\n    //   if i0 is a node then p and q are points on edges i0 - 1 and i0 + 1 resp,\n    //     each a unit distance from centre of node i0.\n    Point p, q;\n    if (i0 % 2 == 1) {\n        Node_SP u = getNode(i0 - 1),\n                w = getNode(i0 + 1);\n        p = u->getCentre();\n        q = w->getCentre();\n    } else {\n        Node_SP u = getNode(i0 - 2),\n                v = getNode(i0),\n                w = getNode(i0 + 2);\n        Point r = u->getCentre(),\n              s = v->getCentre(),\n              t = w->getCentre();\n        double px = r.x - s.x,\n               py = r.y - s.y,\n               qx = t.x - s.x,\n               qy = t.y - s.y,\n               lp = sqrt(px*px + py*py),\n               lq = sqrt(qx*qx + qy*qy);\n        p.x = px/lp;\n        p.y = py/lp;\n        q.x = qx/lq;\n        q.y = qy/lq;\n    }\n    double dx = q.x - p.x,\n           dy = q.y - p.y;\n    // Get angle in degrees.\n    double alpha0 = atan2(dy, dx) * 180 / 3.141592653589793;\n    double cost;\n    // Want a little helper function for checking angle ranges.\n    std::function<void(double, double)> check = [](double a, double L)->void{\n        COLA_ASSERT(-L < a && a <= L);\n    };\n    if (m_isCycle) {\n        // For a cycle each type of bend has a specific angle associated with it,\n        // so you can be up to +/-180 degrees off.\n        double beta;\n        switch(bendType) {\n        case LinkShape::TLC: beta = -45; break;\n        case LinkShape::BLC: beta = -135; break;\n        case LinkShape::TRC: beta = 45; break;\n        case LinkShape::BRC: beta = 135; break;\n        default:\n            throw std::runtime_error(\"No bend cost for unbent link shape.\");\n        }\n        double alpha1 = alpha0 - beta;\n        check(alpha1, 360);\n        if (alpha1 <= -180) alpha1 += 360;\n        else if (alpha1 > 180) alpha1 -= 360;\n        check(alpha1, 180);\n        // Normalise the cost.\n        cost = fabs(alpha1/180.0);\n    } else {\n        // For a non-cycle we don't distinguish between TLC and BRC, or between TRC and BLC\n        // bends, so you can only be up to +/- 90 degrees off.\n        check(alpha0, 180);\n        if (alpha0 <= -90) alpha0 += 180;\n        else if (alpha0 > 90) alpha0 -= 180;\n        check(alpha0, 90);\n        double beta;\n        switch(bendType) {\n        case LinkShape::TLC: beta = -45; break;\n        case LinkShape::BLC: beta = 45; break;\n        case LinkShape::TRC: beta = 45; break;\n        case LinkShape::BRC: beta = -45; break;\n        default:\n            throw std::runtime_error(\"No bend cost for unbent link shape.\");\n        }\n        double alpha1 = alpha0 - beta;\n        check(alpha1, 135);\n        if (alpha1 <= -90) alpha1 += 180;\n        else if (alpha1 > 90) alpha1 -= 180;\n        check(alpha1, 90);\n        // Normalise the cost.\n        cost = fabs(alpha1/90.0);\n    }\n    return cost;\n}\n\ndouble Chain::nextLocalOptimalPoint(size_t i0, LinkShape bendType, size_t remaining, size_t &i1) const {\n    size_t candidate = Chain::npos;\n    double bestCost = 2;  // effectively infinity since costs are at most 1\n    i1 = i0;\n    size_t M = getNumPotentialBendPlaces();\n    M -= remaining;\n    double cost = bestCost;\n    bool madeChoice = false;\n    for (size_t i = i0; i < M; ++i) {\n        cost = bendCost(bendType, i);\n        // If we already have a candidate and it has lower cost than the current position,\n        // then accept the candidate. This is how our simple, greedy, local optimisation works.\n        if (candidate != Chain::npos && cost > bestCost) {\n            i1 = candidate;\n            cost = bestCost;\n            madeChoice = true;\n            break;\n        }\n        // To even be considered a candidate for optimal position, the cost has to be less\n        // than 0.5. Else we might start at bad and go to worse, and thereby accept bad.\n        if (cost < 0.5 && cost < bestCost) {\n            candidate = i;\n            bestCost = cost;\n        }\n    }\n    if (!madeChoice && candidate != Chain::npos) {\n        i1 = candidate;\n        cost = bestCost;\n    }\n    return cost;\n}\n\ndouble Chain::globalOptimalPoint(LinkShape bendType, size_t &i1, size_t beginAt) const {\n    i1 = Chain::npos;\n    double cost = 2;  // effectively infinity since costs are at most 1\n    size_t M = getNumPotentialBendPlaces();\n    for (size_t i = beginAt; i < M; ++i) {\n        double c = bendCost(bendType, i);\n        if (c < cost) {\n            i1 = i;\n            cost = c;\n        }\n    }\n    return cost;\n}\n\nBendSequences Chain::computePossibleBendSequences(void) const {\n    // Prepare return value.\n    BendSequences seqs;\n    // We cannot accept any bend sequence that is longer than our number of nodes plus internal edges.\n    size_t M = getNumPotentialBendPlaces();\n    // We operate differently for cycles and non-cycles.\n    if (m_isCycle) {\n        // In the case of a cycle, there are always exactly four bends to be made, namely the four bent\n        // LinkShapes, in clockwise order. However we could begin at any of the four positions in that\n        // list, so these are all the possibilities.\n        if (M >= 4) {\n            seqs.reserve(4);\n            for (LinkShape start : bentLinkShapeCw) {\n                LinkShapes shapes = bentLinkShapeCwFromStartingPt(start);\n                seqs.push_back(std::make_shared<BendSequence>(shapes));\n            }\n        }\n    } else {\n        // For a non-cycle, we begin by determining the incoming and outgoing directions.\n        Node_SP A = m_anchorNodeLeft,\n                Z = m_anchorNodeRight,\n                b = m_nodes.front(),\n                y = m_nodes.back();\n        CardinalDirs inDirs, outDirs;\n        // Incoming directions:\n        try {\n            CardinalDir dIn = m_graph->getSepMatrix().getCardinalDir(A->id(), b->id());\n            inDirs.push_back(dIn);\n        } catch (std::runtime_error const&) {\n            // In this case the left anchor edge is not yet aligned, so we get to consider\n            // both possible non-aggressive alignments of it.\n            inDirs = possibleCardinalDirections(A, b);\n        }\n        // Same idea, this time for outgoing directions:\n        try {\n            CardinalDir dOut = m_graph->getSepMatrix().getCardinalDir(y->id(), Z->id());\n            outDirs.push_back(dOut);\n        } catch (std::runtime_error const&) {\n            outDirs = possibleCardinalDirections(y, Z);\n        }\n        // Now we can look up the possible bend sequences.\n        for (CardinalDir d0 : inDirs) {\n            for (CardinalDir d1 : outDirs) {\n                vector<LinkShapes> shapeSeqs = lookupMinimalBendSeqs(A, d0, Z, d1);\n                for (LinkShapes shapes : shapeSeqs) {\n                    if (shapes.size() <= M) {\n                        seqs.push_back(std::make_shared<BendSequence>(shapes, d0, d1));\n                    }\n                }\n            }\n        }\n    }\n    return seqs;\n}\n\nvoid Chain::evaluateBendSequence(BendSequence_SP bendSeq) const {\n    // Put the desired bend shapes in a queue.\n    deque<LinkShape> queue(bendSeq->size());\n    std::copy(bendSeq->bendTypes.begin(), bendSeq->bendTypes.end(), queue.begin());\n    // Set up\n    size_t i = 0;\n    double &cost = bendSeq->cost;\n    vector<size_t> &bendPoints = bendSeq->bendPoints;\n    while (queue.size() >= 2) {\n        // As long as there are at least two places left to choose, we must do a local\n        // search.\n        LinkShape ls = queue.front();\n        queue.pop_front();\n        cost += nextLocalOptimalPoint(i, ls, queue.size(), i);\n        bendPoints.push_back(i++);\n    }\n    if (queue.size() == 1) {\n        // If there is precisely one bend place left to choose, then we can do a global\n        // search over the remaining places.\n        LinkShape ls = queue.front();\n        queue.pop_front();\n        cost += globalOptimalPoint(ls, i, i);\n        bendPoints.push_back(i);\n    }\n}\n\nChainConfigSeq Chain::writeConfigSeq(BendSequence_SP bendSeq) const {\n    ChainConfigSeq config;\n    size_t m = m_edges.size(),\n           numBends = bendSeq->size();\n    vector<size_t> &bendPoints = bendSeq->bendPoints;\n    LinkShapes &bendTypes = bendSeq->bendTypes;\n    CardinalDir direc;\n    if (m_isCycle) {\n        ++m;\n        // Since we always run cycles clockwise, we can infer from the first bendtype\n        // what the incoming direction must be.\n        direc = cwIncomingDirForBend.at(bendSeq->bendTypes[0]);\n    } else {\n        // Not a cycle. In this case we will have determined the incoming direction of the bend sequence\n        // at construction time.\n        direc = bendSeq->incomingDirec;\n    }\n    size_t ptr = 0;\n    for (size_t j = 0; j < m; ++j) {\n        if (ptr == numBends) {\n            // All remaining edges get the current direction.\n            config.push_back({direc, direc});\n        } else {\n            size_t k = 2*j + 1;\n            vector<pair<size_t, LinkShape>> bs;\n            while (ptr < numBends && (bendPoints[ptr] == k || bendPoints[ptr] == k - 1)) {\n                bs.push_back({bendPoints[ptr], bendTypes[ptr]});\n                ++ptr;\n            }\n            // At this point, k is an odd number, referring to an edge in the chain,\n            // direc is the incoming direction into node k - 1, and bs is a list of\n            // bend points of length 0, 1, or 2, occurring at node k - 1 and/or edge k.\n            // Our job is to: (a) describe what happens at edge k, namely either that\n            // it be configured to run in a certain compass direction, or that it contain\n            // a bend point, with certain incoming and outgoing compass directions;\n            // and (b) to set direc equal to the (outgoing) direction of the edge that\n            // leads into node k + 1.\n            size_t n = bs.size();\n            if (n == 2) {\n                LinkShape bt0 = bs[0].second,\n                          bt1 = bs[1].second;\n                CardinalDir dir0 = applyBendToDir.at(bt0).at(direc),\n                            dir1 = applyBendToDir.at(bt1).at(dir0);\n                config.push_back({dir0, dir1});\n                direc = dir1;\n            } else if (n == 1) {\n                size_t bp = bs[0].first;\n                LinkShape bt = bs[0].second;\n                CardinalDir nextDir = applyBendToDir.at(bt).at(direc);\n                if (bp == k) {\n                    // Next bend should occur at this edge.\n                    config.push_back({direc, nextDir});\n                } else if (bp == k - 1) {\n                    // Next bend should occur at the node before this edge.\n                    config.push_back({nextDir, nextDir});\n                }\n                direc = nextDir;\n            } else {\n                COLA_ASSERT(n == 0);\n                // Carry on with current direction. In particular, this case handles what\n                // happens if the final bend is to occur at the final node. For in that\n                // case all we can do is carry on with the current direction, and it is\n                // up to the anchorEdgeRight to make the final bend happen.\n                config.push_back({direc, direc});\n            }\n        }\n    }\n    return config;\n}\n\nvoid Chain::takeShapeBasedConfiguration(void) {\n    // Compute the vector of all possible bend sequences.\n    BendSequences seqs = computePossibleBendSequences();\n    // If there are no possible bend sequences, there is nothing for us to do.\n    if (seqs.empty()) return;\n    // Otherwise proceed to evaluate the possible sequences, and choose one of least cost.\n    for (auto bs : seqs) evaluateBendSequence(bs);\n    BendSequence_SP bestSeq = nullptr;\n    double leastCost = std::numeric_limits<double>::max();\n    for (auto bs : seqs) if (bs->cost < leastCost) { bestSeq = bs; leastCost = bs->cost; }\n    COLA_ASSERT(bestSeq != nullptr);\n    // Get the configuration sequence for the least-cost sequence.\n    ChainConfigSeq configSeq = writeConfigSeq(bestSeq);\n    // Set the configuration in the underlying graph.\n    size_t j = 0;\n    SepMatrix &matrix = m_graph->getSepMatrix();\n    double bpSize = m_graph->getIEL()/8.0;\n    for (auto p : configSeq) {\n        // Get the edge to be configured, and the nodes u, v that come before and after it in the chain, resp.\n        size_t k = 2*j + 1;\n        Edge_SP edge = getEdge(k);\n        Node_SP u = getNode(k - 1),\n                v = getNode(k + 1);\n        id_type uid = u->id(),\n                vid = v->id();\n        if (p.first == p.second) {\n            // In this case the edge is to be aligned in a compass direction.\n            matrix.setCardinalOP(uid, vid, p.first);\n        } else {\n            // In this case we are to build a new bend point.\n            // First sever the edge and free and constraint on the nodes.\n            m_graph->severEdge(*edge);\n            matrix.free(uid, vid);\n            // Build a bend point, giving it a reasonable initial location midway\n            // between u and v. It is not yet aligned with either of them; that will\n            // wait until we project onto the new constraints.\n            Point uc = u->getCentre(),\n                  vc = v->getCentre();\n            double x = (uc.x + vc.x)/2.0,\n                   y = (uc.y + vc.y)/2.0;\n            Node_SP bp = Node::allocate();\n            bp->setCentre(x, y);\n            bp->setDims(bpSize, bpSize);\n            m_graph->addNode(bp);\n            // Set constraints.\n            id_type bpid = bp->id();\n            matrix.setCardinalOP(uid, bpid, p.first);\n            matrix.setCardinalOP(bpid, vid, p.second);\n            // Add edges.\n            Edge_SP e1 = Edge::allocate(u, bp),\n                    e2 = Edge::allocate(bp, v);\n            m_graph->addEdge(e1);\n            m_graph->addEdge(e2);\n            // Save a record.\n            m_aestheticBends.push_back(std::make_shared<AestheticBend>(edge, bp, u, v));\n        }\n        // Next j.\n        ++j;\n    }\n}\n\nvoid Chain::addAestheticBendsToEdges(void) {\n    for (AestheticBend_SP ab : m_aestheticBends) ab->addBendToEdge();\n}\n\nvoid AestheticBend::addBendToEdge(void) {\n    edge->addBendNode(bendNode);\n}\n\nChains dialect::buildAllChainsInGraph(std::shared_ptr<Graph> graph) {\n    vector<deque<Node_SP>> chains, cycles;\n    graph->getChainsAndCycles(chains, cycles);\n    Chains allChains;\n    for (auto d : chains) allChains.push_back(std::make_shared<Chain>(graph, d));\n    for (auto d : cycles) allChains.push_back(std::make_shared<Chain>(graph, d));\n    return allChains;\n}\n"
  },
  {
    "path": "cola/libdialect/chains.h",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libdialect - A library for computing DiAlEcT layouts:\n *                 D = Decompose/Distribute\n *                 A = Arrange\n *                 E = Expand/Emend\n *                 T = Transform\n *\n * Copyright (C) 2018  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n * Author(s):   Steve Kieffer   <http://skieffer.info>\n*/\n\n#ifndef DIALECT_CHAINS_H\n#define DIALECT_CHAINS_H\n\n#include <deque>\n#include <memory>\n#include <vector>\n#include <map>\n#include <utility>\n\n#include \"libdialect/commontypes.h\"\n#include \"libdialect/ortho.h\"\n\n//! This header defines tools for working with the \"chains\", i.e. maximal subgraphs\n//! composed entirely of \"links\" (nodes of degree 2), in 4-planar orthogonal layouts.\n\nnamespace dialect {\n\n//! In a 4-planar orthogonal layout, a link has one of six possible shapes, depending\n//! on which two of its four sides are the ones where its edges meet it.\n//! For example, if one edge enters from the south, and the other from the east, then\n//! this link is shaped like the top-left corner of a box.\n//! This enum names the six possible configurations.\nenum class LinkShape {\n    TLC, // top-left corner\n    H, // horizontal\n    BLC, // bottom-left corner\n    TRC, // top-right corner\n    V, // vertical\n    BRC // bottom-right corner\n};\n\ntypedef std::vector<LinkShape> LinkShapes;\n\n//! The bent LinkShapes, in clockwise order:\nextern const LinkShapes bentLinkShapeCw;\n\n//! Get the bent LinkShapes, in clockwise order, starting from a given one.\nLinkShapes bentLinkShapeCwFromStartingPt(LinkShape start);\n\n//! Lookup table:\n//! Given one of the four bent LinkShapes b, and a CardinalDir d, return the CardinalDir you\n//! would be going if you came into bend b going in direction d, and then followed the bend.\nextern const std::map<LinkShape, std::map<CardinalDir, CardinalDir>> applyBendToDir;\n\n//! Lookup table:\n//! For any of the four bent LinkShapes, return its clockwise incoming CardinalDir.\n//! In other words, if you were going clockwise around a box, which direction would\n//! you be going when you entered this bend?\nextern const std::map<LinkShape, CardinalDir> cwIncomingDirForBend;\n\n//! Lookup table:\n//! Suppose you have a chain starting at node A and ending at node Z. Let c be the CompassDir\n//! from Z to A (which will be cardinal if A and Z are aligned, else ordinal). Suppose as we\n//! traverse the chain from A toward Z we must depart A going in CardinalDir d0, and must enter\n//! Z going in CardinalDir d1. Then by looking up (c, d0, d1) in this table, we get a vector of\n//! vectors of LinkShapes, giving all possible minimal bend sequences for this chain.\n//!\n//! Note: Whereas d0 gives both the direction from which we depart node A AND the side of A from which\n//! we depart, d1 is the direction we travel as we enter node Z (and therefore is the OPPOSITE of\n//! the side of Z at which we enter). For example d1 = EAST means we are traveling east as we enter\n//! node Z (but we enter it on its west side).\nextern const std::map<CompassDir, std::map<CardinalDir, std::map<CardinalDir, std::vector<std::vector<LinkShape>>>>> minimalBendSeqs;\n\n//! @brief  Look up the minimal bend sequences for a Chain.\n//! @param[in] A  The left anchor Node of the Chain.\n//! @param[in] d0  The CardinalDir in which the chain departs from Node A.\n//! @param[in] Z  The right anchor Node of the Chain.\n//! @param[in] d1  The CardinalDir in which the chain enters Node Z (i.e. the CardinalDir from the\n//!                last Node of the Chain toward the right anchor Node).\n//! @return Vector of vectors of LinkShapes, giving all possible minimal bend sequences for this Chain.\n//! @note This does work correctly even for the case of a chain in which the left and right anchor nodes are the\n//!       same (as, e.g., in a figure-8 network).\nstd::vector<std::vector<LinkShape>> lookupMinimalBendSeqs(Node_SP A, CardinalDir d0, Node_SP Z, CardinalDir d1);\n\n\n//! @brief  List the possible cardinal directions from node1 to node2, if they were to be\n//!         aligned non-aggressively.\nCardinalDirs possibleCardinalDirections(Node_SP node1, Node_SP node2);\n\n\n//! @brief  Determine the LinkShape for a given Node of degree 2.\n//! @param[in] link  The link whose shape is to be determined.\n//! @return  The LinkShape for the given node.\n//! @throws  Runtime error if the given node is not of degree 2.\nLinkShape shapeOfLink(Node_SP link);\n\n\n//! @brief A data structure for managing sequences of bend types, points at which these\n//! bends should occur (in a given Chain), cost of such a sequence of bends\n//! (for a given Chain), and incoming and outgoing Compass directions, for non-cycles.\nstruct BendSequence {\n\n    //! @brief  Basic constructor.\n    //! @param[in] shapes  The sequence of LinkShapes describing the desired bends.\n    BendSequence(LinkShapes &shapes) : bendTypes(shapes) {}\n\n    //! @brief  Augmented constructor in which incoming and outgoing directions are also set.\n    //! @param[in] shapes  The sequence of LinkShapes describing the desired bends.\n    //! @param[in] inDir  The incoming direction.\n    //! @param[in] outDir  The outgoing direction.\n    BendSequence(LinkShapes &shapes, CardinalDir inDir, CardinalDir outDir)\n        : bendTypes(shapes), incomingDirec(inDir), outgoingDirec(outDir) {}\n\n    //! @brief  Report the number of bends in the sequence.\n    size_t size(void) const { return bendTypes.size(); }\n\n    //! Under bendTypes we record what shape bend we want.\n    LinkShapes bendTypes;\n\n    //! Under bendPoints we can record those places in a Chain where we want the bends to occur.\n    //! The \"places\" are indices 0, 1, 2, 3, ... which refer to the first node in the chain,\n    //! then the first edge, next node, next edge, and so on, with even numbers meaning nodes\n    //! and odd numbers meaning edges.\n    std::vector<size_t> bendPoints;\n\n    double cost = 0;\n    CardinalDir incomingDirec;\n    CardinalDir outgoingDirec;\n};\n\ntypedef std::shared_ptr<BendSequence> BendSequence_SP;\ntypedef std::vector<BendSequence_SP> BendSequences;\n\n//! @brief A bend point deliberately added to a connector route, for aesthetic reasons.\nstruct AestheticBend {\n\n    AestheticBend(Edge_SP edge, Node_SP bendNode, Node_SP nbrNode1, Node_SP nbrNode2)\n        : edge(edge), bendNode(bendNode), nbrNode1(nbrNode1), nbrNode2(nbrNode2) {}\n\n    //! @brief  Add the bend node to the edge.\n    void addBendToEdge(void);\n\n    Edge_SP edge;\n    Node_SP bendNode;\n    Node_SP nbrNode1;\n    Node_SP nbrNode2;\n\n};\n\ntypedef std::shared_ptr<AestheticBend> AestheticBend_SP;\ntypedef std::vector<AestheticBend_SP> AestheticBends;\n\ntypedef std::vector<std::pair<CardinalDir, CardinalDir>> ChainConfigSeq;\n\n//! @brief A Chain is a sequence of degree-2 Nodes, possibly forming a cycle.\n//!\n//! This class, like everything defined in this header, is intended for use only with\n//! 4-planar orthogonal layouts.\nclass Chain {\npublic:\n\n    //! @brief  Standard constructor\n    //! @param[in] G  The Graph to which the Chain belongs.\n    //! @param[in] nodes  The Nodes belonging to the Chain, in order\n    //! @param[in] isCycle  Set true if these Nodes form a closed cycle. Default false.\n    //! @throws  Runtime error if nodes is empty.\n    //!\n    //! @note  We accept a deque of Nodes (rather than a vector) not because it is needed,\n    //!        but because the Graph method that computes the lists of nodes forming chains uses deques.\n    //! @sa Graph::getChainsAndCycles\n    Chain(Graph_SP G, std::deque<Node_SP> nodes, bool isCycle=false);\n\n    //! @brief  Get a Node according to its \"place\" in the Chain.\n    //!\n    //! Together with the getEdge function, this function allows us to have the indices\n    //! 0, 1, 2, 3, ... refer to the first node in the chain, then the first edge, next node,\n    //! next edge, and so on. Negative integers refer to left anchors.\n    //! @param[in] i  An even integer from -2 to 2n, where n is the number of nodes in this chain.\n    //! @return  Left anchor node for i == -2, self.nodes[i/2] for i from 0 to 2n-2, and right\n    //!          anchor node for i == 2n.\n    Node_SP getNode(int i) const;\n\n    //! @brief  Get an Edge according to its \"place\" in the Chain.\n    //!\n    //! Together with the getNode function, this function allows us to have the indices\n    //! 0, 1, 2, 3, ... refer to the first node in the chain, then the first edge, next node,\n    //! next edge, and so on. Negative integers refer to left anchors.\n    //! @param[in] i  An odd integer from -1 to 2n-1, where n is the number of nodes in this chain.\n    //! @return  Left anchor edge for i == -1, self.edges[(i-1)/2] for i from 1 to 2n-3, and right\n    //!          anchor edge for i == 2n-1.\n    Edge_SP getEdge(int i) const;\n\n    //! @brief  Compute the cost of making a given bend shape at a given position in the chain,\n    //!         given the current geometry.\n    //!\n    //!         If this chain is a cycle, the cost takes into account that the nodes are in\n    //!         clockwise order.\n    //!\n    //! @param[in] bendType  A bent LinkShape.\n    //! @param[in] i0  A position in the chain from 0 to 2n-2 -- evens for nodes, odds for edges --\n    //!                where n is the number of nodes in this chain.\n    double bendCost(LinkShape bendType, size_t i0) const;\n\n    //! @brief  Check how many nodes are in the chain.\n    size_t size(void) const { return m_n; }\n\n    //! @brief  Compute the possible bend sequences that this chain could have.\n    //!\n    //!         If \"no bends\" is a possibility, then we return a single BendSequence with\n    //!         empty list of bend types.\n    //! @return Vector of BendSequences indicating all the possibilites.\n    BendSequences computePossibleBendSequences(void) const;\n\n    //! @brief  For a given BendSequence, determine the best places for those bends to occur\n    //!         in this Chain, and the costs of applying those constraints.\n    //! @param[in, out] bendSeq  The BendSequence to be considered.\n    //!                          Sequence of best places to make the bends is recorded in here,\n    //!                          along with the total cost.\n    void evaluateBendSequence(BendSequence_SP bendSeq) const;\n\n    //! @brief  Determine the direction in which each edge in this chain should be configured,\n    //!         in order to enforce a given bend sequence.\n    //! @param[in] bendSeq  The desired bend sequence. Its bendpoints are indices into this\n    //! Chain's sequence of nodes AND edges -- thus even indices for nodes and odd indices for\n    //! edges. Its corresponding bendtypes are the types of bends that should occur at those indices.\n    //! @return  A \"chain configuration sequence,\" which looks like\n    //!                                 [ c0, c1, ..., cm-1 ]\n    //! where m is the number of edges to be configured, which is n - 1 if this is not a cycle,\n    //! and n if it is -- n the number of nodes in the chain -- and each ci is a pair of CardinalDirs.\n    //!\n    //! When ci == [ d, d ], then edge i is simply to be configured in direction d.\n    //! When ci == [d1, d2] with d1 != d2, then edge i is to be replaced by a bend point, which we go\n    //! into in direction d1, and come out of in direction d2.\n    ChainConfigSeq writeConfigSeq(BendSequence_SP bendSeq) const;\n\n    //! @brief  Give this chain an orthogonal configuration best fitting its present geometric shape.\n    //!\n    //!         This means we put the bend points in the most natural places, including the possibility\n    //!         that they go where edges are (meaning a new bend point is constructed).\n    //!\n    //!         Thus, constraints at least are added to the underlying Graph's SepMatrix.\n    //!         New Nodes (bend points) may also be added.\n    void takeShapeBasedConfiguration(void);\n\n    //! @brief  Add any aesthetic bends that were chosen during shape-based configuration, to the\n    //!         Edges to which they belong.\n    void addAestheticBendsToEdges(void);\n\n    //! For our search procedures we need a size_t that effectively means \"no position\".\n    //! For this we follow the practice of std::string::find, using npos = -1, the largest\n    //! possible size_t. We can certainly not work on networks with that many nodes!\n    static const size_t npos;\n\nprivate:\n\n    //! @brief  Choose a locally optimal point for creating a bend in the chain.\n    //! @param[in] i0  A position in the Chain.\n    //! @param[in] bendType  The bent LinkShape to be formed.\n    //! @param[in] remaining  How many more points we must choose /after/ this one.\n    //! @param[out] i1  The position to be chosen.\n    //! @return The cost of the chosen position.\n    //!\n    //! We choose a locally optimal point i1 /at or after/ position i0, at which to create\n    //! the given bend type. Optimality is understood in terms of cost returned by the bendCost\n    //! function. However, the \"locality\" of the search means that once we have chosen a candidate\n    //! point, we will accept it as soon as the next tested point costs more.\n    //!\n    //! Thus, we do not necessarily explore all points. For that see Chain::globalOptimalPoint.\n    //!\n    //! If remaining == r and there are at least r positions left after i0 in the chain,\n    //! then we return an i1 which has at least r points left after it; if not, then we just\n    //! return i1 = i0.\n    double nextLocalOptimalPoint(size_t i0, LinkShape bendType, size_t remaining, size_t &i1) const;\n\n    //! @brief  Choose an optimal point for creating a bend in the chain.\n    //! @param[in] bendType  The bent LinkShape to be formed.\n    //! @param[out] i1  The position to be chosen.\n    //! @param[in] beginAt  A position in the chain at which to begin search.\n    //! @return The cost of the chosen position.\n    //!\n    //! We choose an optimal point /at or after/ position beginAt, at which to create\n    //! the given bend type. Optimality means minimal cost, from the bendCost function.\n    //!\n    //! If there are no points left after beginAt, we return None.\n    double globalOptimalPoint(LinkShape bendType, size_t &i1, size_t beginAt = 0) const;\n\n    //! @brief  Check how many potential bend points we have. This is equal to the number of\n    //!         nodes in the chain, plus the number of internal edges.\n    size_t getNumPotentialBendPlaces(void) const { size_t M = 2*m_n - 1; if (m_isCycle) ++M; return M; }\n\n    Graph_SP m_graph;\n    size_t m_n;\n    Nodes m_nodes;\n    bool m_isCycle;\n    LinkShapes m_linkShapes;\n    Edges m_edges;\n    Node_SP m_anchorNodeLeft = nullptr;\n    Edge_SP m_anchorEdgeLeft = nullptr;\n    Node_SP m_anchorNodeRight = nullptr;\n    Edge_SP m_anchorEdgeRight = nullptr;\n    Edge_SP m_returnEdge = nullptr;\n    AestheticBends m_aestheticBends;\n\n};\n\ntypedef std::shared_ptr<Chain> Chain_SP;\ntypedef std::vector<Chain_SP> Chains;\n\n//! @brief  Convenience method to build all the chains and cycles in a graph.\nChains buildAllChainsInGraph(std::shared_ptr<dialect::Graph> graph);\n\n\n\n} // namespace dialect\n\n#endif // DIALECT_CHAINS_H\n"
  },
  {
    "path": "cola/libdialect/commontypes.h",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libdialect - A library for computing DiAlEcT layouts:\n *                 D = Decompose/Distribute\n *                 A = Arrange\n *                 E = Expand/Emend\n *                 T = Transform\n *\n * Copyright (C) 2018  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n * Author(s):   Steve Kieffer   <http://skieffer.info>\n*/\n\n#ifndef DIALECT_COMMONTYPES_H\n#define DIALECT_COMMONTYPES_H\n\n#include <memory>\n#include <map>\n#include <utility>\n#include <vector>\n#include <functional>\n\n#include \"libavoid/geomtypes.h\"\n\nnamespace dialect {\n\nclass ACALayout;\nstruct Assignment;\nstruct ColaGraphRep;\nclass Edge;\nstruct EdgeSegment;\nclass ExpansionGoal;\nclass Face;\nclass FaceSet;\nclass GhostNode;\nclass Graph;\nstruct LineSegment;\nstruct Nbr;\nclass Nexus;\nclass Node;\nclass ProjSeq;\nstruct Quad;\nstruct SepPair;\nclass Side;\nclass Tree;\nclass TreePlacement;\n\n// Shared Pointers\ntypedef std::shared_ptr<ACALayout> ACALayout_SP;\ntypedef std::shared_ptr<Assignment> Assignment_SP;\ntypedef std::shared_ptr<ColaGraphRep> ColaGraphRep_SP;\ntypedef std::shared_ptr<Edge> Edge_SP;\ntypedef std::shared_ptr<ExpansionGoal> ExpansionGoal_SP;\ntypedef std::shared_ptr<Face> Face_SP;\ntypedef std::shared_ptr<FaceSet> FaceSet_SP;\ntypedef std::shared_ptr<GhostNode> GhostNode_SP;\ntypedef std::shared_ptr<Graph> Graph_SP;\ntypedef std::shared_ptr<LineSegment> LineSegment_SP;\ntypedef std::shared_ptr<Nbr> Nbr_SP;\ntypedef std::shared_ptr<Nexus> Nexus_SP;\ntypedef std::shared_ptr<Node> Node_SP;\ntypedef std::shared_ptr<ProjSeq> ProjSeq_SP;\ntypedef std::shared_ptr<Quad> Quad_SP;\ntypedef std::shared_ptr<SepPair> SepPair_SP;\ntypedef std::shared_ptr<Side> Side_SP;\ntypedef std::shared_ptr<Tree> Tree_SP;\ntypedef std::shared_ptr<TreePlacement> TreePlacement_SP;\n\n// Weak Pointers\ntypedef std::weak_ptr<Node> Node_WP;\n\n// Plurals (vectors of shared pointers)\ntypedef std::vector<Assignment_SP> Assignments;\ntypedef std::vector<Edge_SP> Edges;\ntypedef std::vector<ExpansionGoal_SP> ExpansionGoals;\ntypedef std::vector<Face_SP> Faces;\ntypedef std::vector<Graph_SP> Graphs;\ntypedef std::vector<LineSegment_SP> LineSegments;\ntypedef std::vector<Nbr_SP> Nbrs;\ntypedef std::vector<Nexus_SP> Nexes;\ntypedef std::vector<Node_SP> Nodes;\ntypedef std::vector<Quad_SP> Quads;\ntypedef std::vector<Side_SP> Sides;\ntypedef std::vector<Tree_SP> Trees;\ntypedef std::vector<TreePlacement_SP> TreePlacements;\n\n// Organisation by IDs\ntypedef unsigned id_type;\n\ntypedef std::map<id_type, Node_SP> NodesById;\ntypedef std::map<id_type, Edge_SP> EdgesById;\ntypedef std::map<id_type, Face_SP> FacesById;\ntypedef std::map<id_type, Nexus_SP> NexesById;\n\ntypedef std::pair<id_type, id_type> IdPair;\ntypedef std::pair<id_type, Node_SP> IdNodePair;\ntypedef std::pair<id_type, Edge_SP> IdEdgePair;\n\ntypedef std::map<id_type, id_type> id_map;\n\n/* SparseIdMatrix2d\n *\n * Initially tried\n *     template <typename T>\n *     using SparseIdMatrix2d = std::map<id_type, std::map<id_type, T>>;\n * taking advantage of the C++11 \"alias declaration\". Builds fine, but SWIG complains.\n * Despite following the instructions here\n *     http://www.swig.org/Doc3.0/CPlusPlus11.html#CPlusPlus11_alias_templates\n * and adding\n *     %template(MapIdMapIdUnsigned) std::map<id_type, std::map<id_type, unsigned>>;\n *     %template() SparseIdMatrix2d<unsigned>;\n * to the interface file, SWIG still complains that SparseIdMatrix2d is not defined.\n * So we instead fall back on the C++03 hack, with thanks to https://stackoverflow.com/a/2795024.\n * Usage looks e.g. like:\n *              SparseIdMatrix2d<unsigned>::type mymatrix;\n */\ntemplate <typename T>\nstruct SparseIdMatrix2d\n{\n    typedef std::map<id_type, std::map<id_type, T>> type;\n};\n\n// Misc\ntypedef std::pair<double, double> dimensions;\n\ntypedef std::function<Avoid::Point(Avoid::Point)> PlaneMap;\ntypedef std::function<void(Avoid::Point&)> InplacePlaneMap;\n\n} // namespace dialect\n\n#endif // DIALECT_COMMONTYPES_H\n"
  },
  {
    "path": "cola/libdialect/constraints.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libdialect - A library for computing DiAlEcT layouts:\n *                 D = Decompose/Distribute\n *                 A = Arrange\n *                 E = Expand/Emend\n *                 T = Transform\n *\n * Copyright (C) 2018  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n * Author(s):   Steve Kieffer   <http://skieffer.info>\n*/\n\n#include <vector>\n#include <iterator>\n#include <stdexcept>\n#include <string>\n#include <sstream>\n#include <memory>\n#include <algorithm>\n#include <utility>\n#include <cmath>\n\n#include \"libvpsc/assertions.h\"\n#include \"libvpsc/constraint.h\"\n#include \"libvpsc/rectangle.h\"\n#include \"libvpsc/variable.h\"\n#include \"libcola/unused.h\"\n#include \"libcola/compound_constraints.h\"\n#include \"libavoid/geomtypes.h\"\n\n#include \"libdialect/graphs.h\"\n#include \"libdialect/constraints.h\"\n#include \"libdialect/util.h\"\n#include \"libdialect/ortho.h\"\n\nusing namespace dialect;\n\nusing std::vector;\nusing std::string;\nusing std::swap;\nusing std::signbit;\n\nusing Avoid::Point;\n\nSepDir dialect::negateSepDir(SepDir sd) {\n    switch(sd) {\n    case SepDir::EAST:\n        return SepDir::WEST;\n    case SepDir::SOUTH:\n        return SepDir::NORTH;\n    case SepDir::WEST:\n        return SepDir::EAST;\n    case SepDir::NORTH:\n        return SepDir::SOUTH;\n    case SepDir::RIGHT:\n        return SepDir::LEFT;\n    case SepDir::DOWN:\n        return SepDir::UP;\n    case SepDir::LEFT:\n        return SepDir::RIGHT;\n    case SepDir::UP:\n        return SepDir::DOWN;\n    default :\n        COLA_ASSERT(false);\n    }\n}\n\nbool dialect::sepDirIsCardinal(SepDir sd) {\n    switch(sd) {\n    case SepDir::EAST:\n    case SepDir::SOUTH:\n    case SepDir::WEST:\n    case SepDir::NORTH:\n        return true;\n    default:\n        return false;\n    }\n}\n\nCardinalDir dialect::sepDirToCardinalDir(SepDir sd) {\n    switch(sd) {\n    case SepDir::EAST:\n        return CardinalDir::EAST;\n    case SepDir::SOUTH:\n        return CardinalDir::SOUTH;\n    case SepDir::WEST:\n        return CardinalDir::WEST;\n    case SepDir::NORTH:\n        return CardinalDir::NORTH;\n    default:\n        COLA_ASSERT(false);\n    }\n}\n\nSepDir dialect::cardinalDirToSepDir(CardinalDir dir) {\n    switch(dir) {\n    case CardinalDir::EAST:\n        return SepDir::EAST;\n    case CardinalDir::SOUTH:\n        return SepDir::SOUTH;\n    case CardinalDir::WEST:\n        return SepDir::WEST;\n    case CardinalDir::NORTH:\n        return SepDir::NORTH;\n    default:\n        COLA_ASSERT(false);\n    }\n}\n\nSepDir dialect::lateralWeakening(SepDir sd) {\n    switch(sd) {\n    case SepDir::EAST:\n        return SepDir::RIGHT;\n    case SepDir::SOUTH:\n        return SepDir::DOWN;\n    case SepDir::WEST:\n        return SepDir::LEFT;\n    case SepDir::NORTH:\n        return SepDir::UP;\n    default:\n        return sd;\n    }\n}\n\nSepDir dialect::cardinalStrengthening(SepDir sd) {\n    switch(sd) {\n    case SepDir::RIGHT:\n        return SepDir::EAST;\n    case SepDir::DOWN:\n        return SepDir::SOUTH;\n    case SepDir::LEFT:\n        return SepDir::WEST;\n    case SepDir::UP:\n        return SepDir::NORTH;\n    default:\n        return sd;\n    }\n}\n\nvoid SepPair::addSep(GapType gt, SepDir sd, SepType st, double gap) {\n    // Cannot use this method to remove a constraint.\n    // If SepType is NONE, just do nothing.\n    if (st == SepType::NONE) return;\n    // Otherwise, act based on the SepDir.\n    switch(sd) {\n    case SepDir::EAST:\n        xgt = gt;\n        xst = st;\n        xgap = gap;\n        ygt = GapType::CENTRE;\n        yst = SepType::EQ;\n        ygap = 0;\n        break;\n    case SepDir::SOUTH:\n        xgt = GapType::CENTRE;\n        xst = SepType::EQ;\n        xgap = 0;\n        ygt = gt;\n        yst = st;\n        ygap = gap;\n        break;\n    case SepDir::WEST:\n        xgt = gt;\n        xst = st;\n        xgap = -gap;\n        ygt = GapType::CENTRE;\n        yst = SepType::EQ;\n        ygap = 0;\n        break;\n    case SepDir::NORTH:\n        xgt = GapType::CENTRE;\n        xst = SepType::EQ;\n        xgap = 0;\n        ygt = gt;\n        yst = st;\n        ygap = -gap;\n        break;\n    case SepDir::RIGHT:\n        xgt = gt;\n        xst = st;\n        xgap = gap;\n        break;\n    case SepDir::DOWN:\n        ygt = gt;\n        yst = st;\n        ygap = gap;\n        break;\n    case SepDir::LEFT:\n        xgt = gt;\n        xst = st;\n        xgap = -gap;\n        break;\n    case SepDir::UP:\n        ygt = gt;\n        yst = st;\n        ygap = -gap;\n        break;\n    }\n}\n\nvoid SepPair::transform(SepTransform tf) {\n    double g;\n    switch(tf) {\n        case SepTransform::ROTATE90CW:\n            // Swap x- and y-types.\n            swap(xst, yst);\n            swap(xgt, ygt);\n            // xgap <- -ygap\n            // ygap <- +xgap\n            g = xgap;\n            xgap = -ygap;\n            ygap = g;\n            break;\n        case SepTransform::ROTATE90ACW:\n            // Swap x- and y-types.\n            swap(xst, yst);\n            swap(xgt, ygt);\n            // xgap <- +ygap\n            // ygap <- -xgap\n            g = xgap;\n            xgap = ygap;\n            ygap = -g;\n            break;\n        case SepTransform::ROTATE180:\n            // Negate both gaps.\n            xgap = -xgap;\n            ygap = -ygap;\n            break;\n        case SepTransform::FLIPV:\n            // Negate xgap only.\n            xgap = -xgap;\n            break;\n        case SepTransform::FLIPH:\n            // Negate ygap only.\n            ygap = -ygap;\n            break;\n        case SepTransform::FLIPMD:\n            // Swap x- and y-types.\n            swap(xst, yst);\n            swap(xgt, ygt);\n            // xgap <- +ygap\n            // ygap <- +xgap\n            g = xgap;\n            xgap = ygap;\n            ygap = g;\n            break;\n        case SepTransform::FLIPOD:\n            // Swap x- and y-types.\n            swap(xst, yst);\n            swap(xgt, ygt);\n            // xgap <- -ygap\n            // ygap <- -xgap\n            g = xgap;\n            xgap = -ygap;\n            ygap = -g;\n            break;\n    }\n}\n\nvoid SepPair::roundGapsUpAbs(void) {\n    xgap = signbit(xgap) ? std::floor(xgap) : std::ceil(xgap);\n    ygap = signbit(ygap) ? std::floor(ygap) : std::ceil(ygap);\n}\n\nbool SepPair::isVerticalCardinal(void) const {\n    return xgt == GapType::CENTRE && xst == SepType::EQ && xgap == 0 && yst != SepType::NONE && (ygt == GapType::BDRY || ygap != 0);\n}\n\nbool SepPair::isHorizontalCardinal(void) const {\n    return ygt == GapType::CENTRE && yst == SepType::EQ && ygap == 0 && xst != SepType::NONE && (xgt == GapType::BDRY || xgap != 0);\n}\n\nbool SepPair::isVAlign(void) const {\n    return xgt == GapType::CENTRE && xst == SepType::EQ && xgap == 0;\n}\n\nbool SepPair::isHAlign(void) const {\n    return ygt == GapType::CENTRE && yst == SepType::EQ && ygap == 0;\n}\n\nbool SepPair::isCardinal(void) const {\n    return isVerticalCardinal() || isHorizontalCardinal();\n}\n\nCardinalDir SepPair::getCardinalDir(void) const {\n    if (isVerticalCardinal()) {\n        if (signbit(ygap)) return CardinalDir::NORTH;\n        return CardinalDir::SOUTH;\n    } else if (isHorizontalCardinal()) {\n        if (signbit(xgap)) return CardinalDir::WEST;\n        return CardinalDir::EAST;\n    } else {\n        throw std::runtime_error(\"Nodes do not have cardinal separation!\");\n    }\n}\n\nstring SepPair::writeTglf(std::map<id_type, unsigned> id2ext, const SepMatrix &m) const {\n    // If no constraints, return empty string.\n    if (xst == SepType::NONE && yst == SepType::NONE) return \"\";\n    // Prepare strings.\n    double xExtraGap = xgt == GapType::BDRY ? m.getExtraBdryGap() : 0.0,\n           yExtraGap = ygt == GapType::BDRY ? m.getExtraBdryGap() : 0.0;\n    string fmtStr = string_format(\"%%.%df\", tglfPrecision),\n           xgapStr = string_format(fmtStr, xgap + xExtraGap),\n           ygapStr = string_format(fmtStr, ygap + yExtraGap),\n           nxgapStr = string_format(fmtStr, -xgap + xExtraGap),\n           nygapStr = string_format(fmtStr, -ygap + yExtraGap),\n           xgtStr = xgt == GapType::BDRY ? \"B\" : \"C\",\n           ygtStr = ygt == GapType::BDRY ? \"B\" : \"C\";\n    // Prepare indices.\n    unsigned src, tgt;\n    try { src = id2ext.at(this->src); } catch (std::out_of_range const&) { src = this->src; }\n    try { tgt = id2ext.at(this->tgt); } catch (std::out_of_range const&) { tgt = this->tgt; }\n    std::ostringstream ss;\n    // Vertically aligned\n    if (xgt == GapType::CENTRE && xst == SepType::EQ && xgap == 0) {\n        switch(yst) {\n        case SepType::EQ:\n            switch(ygt) {\n            case GapType::CENTRE:\n                if (ygap < 0) {\n                    ss << src << \" \" << tgt << \" C N == \" << nygapStr << \"\\n\";\n                } else if (ygap > 0) {\n                    ss << src << \" \" << tgt << \" C S == \" << ygapStr << \"\\n\";\n                } else {\n                    throw std::runtime_error(\"Nodes and are constrained to coincide!\");\n                }\n                break;\n            case GapType::BDRY:\n                if (signbit(ygap)) {\n                    ss << src << \" \" << tgt << \" B N == \" << nygapStr << \"\\n\";\n                } else {\n                    ss << src << \" \" << tgt << \" B S == \" << ygapStr << \"\\n\";\n                }\n                break;\n            }\n            break;\n        case SepType::INEQ:\n            if (signbit(ygap)) {\n                ss << src << \" \" << tgt << \" \" << ygtStr << \" N >= \" << nygapStr << \"\\n\";\n            } else {\n                ss << src << \" \" << tgt << \" \" << ygtStr << \" S >= \" << ygapStr << \"\\n\";\n            }\n            break;\n        case SepType::NONE:\n            ss << src << \" \" << tgt << \" C X == 0\\n\";\n            break;\n        }\n    }\n    // Horizontally aligned\n    else if (ygt == GapType::CENTRE && yst == SepType::EQ && ygap == 0) {\n        switch(xst) {\n        case SepType::EQ:\n            switch(xgt) {\n            case GapType::CENTRE:\n                if (xgap < 0) {\n                    ss << src << \" \" << tgt << \" C W == \" << nxgapStr << \"\\n\";\n                } else if (xgap > 0) {\n                    ss << src << \" \" << tgt << \" C E == \" << xgapStr << \"\\n\";\n                } else {\n                    throw std::runtime_error(\"Nodes and are constrained to coincide!\");\n                }\n                break;\n            case GapType::BDRY:\n                if (signbit(xgap)) {\n                    ss << src << \" \" << tgt << \" B W == \" << nxgapStr << \"\\n\";\n                } else {\n                    ss << src << \" \" << tgt << \" B E == \" << xgapStr << \"\\n\";\n                }\n                break;\n            }\n            break;\n        case SepType::INEQ:\n            if (signbit(xgap)) {\n                ss << src << \" \" << tgt << \" \" << xgtStr << \" W >= \" << nxgapStr << \"\\n\";\n            } else {\n                ss << src << \" \" << tgt << \" \" << xgtStr << \" E >= \" << xgapStr << \"\\n\";\n            }\n            break;\n        case SepType::NONE:\n            ss << src << \" \" << tgt << \" C Y == 0\\n\";\n            break;\n        }\n    }\n    // Anything else\n    else {\n        if (xst != SepType::NONE) {\n            string reln = xst == SepType::EQ ? \"==\" : \">=\";\n            if (signbit(xgap)) {\n                ss << src << \" \" << tgt << \" \" << xgtStr << \" L \" << reln << \" \" << nxgapStr << \"\\n\";\n            } else {\n                ss << src << \" \" << tgt << \" \" << xgtStr << \" R \" << reln << \" \" << xgapStr << \"\\n\";\n            }\n        }\n        if (yst != SepType::NONE) {\n            string reln = yst == SepType::EQ ? \"==\" : \">=\";\n            if (signbit(ygap)) {\n                ss << src << \" \" << tgt << \" \" << ygtStr << \" U \" << reln << \" \" << nygapStr << \"\\n\";\n            } else {\n                ss << src << \" \" << tgt << \" \" << ygtStr << \" D \" << reln << \" \" << ygapStr << \"\\n\";\n            }\n        }\n    }\n    return ss.str();\n}\n\nbool SepPair::hasConstraintInDim(vpsc::Dim dim) const {\n    return dim == vpsc::XDIM ? xst != SepType::NONE : yst != SepType::NONE;\n}\n\nvpsc::Constraint *SepPair::generateSeparationConstraint(const vpsc::Dim dim, const ColaGraphRep &cgr, SepMatrix *m, vpsc::Variables &vs) {\n    size_t left_ix, right_ix;\n    double gap;\n    bool equality = false;\n    if (dim == vpsc::XDIM) {\n        // x-dimension\n        // If no separation, there is nothing to do.\n        if (xst == SepType::NONE) return nullptr;\n        // If equality, set boolean accordingly.\n        if (xst == SepType::EQ) equality = true;\n        // Determine the indices of the left and right variables, and the gap.\n        if (signbit(xgap)) {\n            gap = -xgap;\n            left_ix = cgr.id2ix.at(tgt);\n            right_ix = cgr.id2ix.at(src);\n        } else {\n            gap = xgap;\n            left_ix = cgr.id2ix.at(src);\n            right_ix = cgr.id2ix.at(tgt);\n        }\n        // If it's a boundary gap, increase the gap by the average width of the two nodes,\n        // plus any global extra boundary gap value.\n        if (xgt == GapType::BDRY) gap += (cgr.rs[left_ix]->width()+cgr.rs[right_ix]->width())/2.0 + m->getExtraBdryGap();\n    } else {\n        // y-dimension\n        // If no separation, there is nothing to do.\n        if (yst == SepType::NONE) return nullptr;\n        // If equality, set boolean accordingly.\n        if (yst == SepType::EQ) equality = true;\n        // Determine the indices of the left and right variables, and the gap.\n        if (signbit(ygap)) {\n            gap = -ygap;\n            left_ix = cgr.id2ix.at(tgt);\n            right_ix = cgr.id2ix.at(src);\n        } else {\n            gap = ygap;\n            left_ix = cgr.id2ix.at(src);\n            right_ix = cgr.id2ix.at(tgt);\n        }\n        // If it's a boundary gap, increase the gap by the average height of the two nodes,\n        // plus any global extra boundary gap value.\n        if (ygt == GapType::BDRY) gap += (cgr.rs[left_ix]->height()+cgr.rs[right_ix]->height())/2.0 + m->getExtraBdryGap();\n    }\n    // If we make it this far, there must be a constraint.\n    // Allocate the constraint.\n    vpsc::Constraint *c = new vpsc::Constraint(vs[left_ix], vs[right_ix], gap, equality);\n    c->creator = m;\n    return c;\n}\n\nvoid SepMatrix::addSep(id_type id1, id_type id2, GapType gt, SepDir sd, SepType st, double gap) {\n    // Access the SepPair for the given Node IDs.\n    SepPair_SP &sp = getSepPair(id1, id2);\n    // Flip the separation if necessary.\n    if (sp->flippedRetrieval) gap = -gap;\n    // Add the separation.\n    sp->addSep(gt, sd, st, gap);\n}\n\nvoid SepMatrix::addFixedRelativeSep(id_type id1, id_type id2, double dx, double dy) {\n    // Access the SepPair for the given Node IDs.\n    SepPair_SP &sp = getSepPair(id1, id2);\n    // Flip the separations if necessary.\n    if (sp->flippedRetrieval) {\n        dx = -dx;\n        dy = -dy;\n    }\n    // Add the separations.\n    sp->addSep(GapType::CENTRE, SepDir::RIGHT, SepType::EQ, dx);\n    sp->addSep(GapType::CENTRE, SepDir::DOWN,  SepType::EQ, dy);\n}\n\nvoid SepMatrix::addFixedRelativeSep(id_type id1, id_type id2) {\n    Node_SP u = m_graph->getNode(id1),\n            v = m_graph->getNode(id2);\n    Point cu = u->getCentre(),\n          cv = v->getCentre();\n    double dx = cv.x - cu.x,\n           dy = cv.y - cu.y;\n    addFixedRelativeSep(id1, id2, dx, dy);\n}\n\nvoid SepMatrix::alignByEquatedCoord(id_type id1, id_type id2, vpsc::Dim eqCoord) {\n    if (eqCoord == vpsc::XDIM) vAlign(id1, id2);\n    else hAlign(id1, id2);\n}\n\nvoid SepMatrix::roundGapsUpward(void) {\n    m_extraBdryGap = std::ceil(m_extraBdryGap);\n    for (auto p : m_sparseLookup) {\n        for (auto q : p.second) {\n            q.second->roundGapsUpAbs();\n        }\n    }\n}\n\nCardinalDir SepMatrix::getCardinalDir(id_type id1, id_type id2) const {\n    SepPair_SP sp = checkSepPair(id1, id2);\n    if (sp == nullptr) throw std::runtime_error(\"No constraint.\");\n    CardinalDir d = sp->getCardinalDir();\n    // Flip if necessary.\n    if (sp->flippedRetrieval) d = Compass::cardFlip(d);\n    return d;\n}\n\nvoid SepMatrix::getAlignedSets(std::map<id_type, std::set<id_type> > &hSets, std::map<id_type, std::set<id_type> > &vSets) const {\n    // We build two auxiliary Graphs: one where edges represent H-alignments, and one for V-alignments.\n    // Then the aligned sets are the connected components of these auxiliary Graphs.\n    Graph H, V;\n    for (auto p : m_graph->getNodeLookup()) {\n        Node_SP u = p.second;\n        GhostNode_SP g1 = u->makeGhost(),\n                     g2 = u->makeGhost();\n        g1->setMasquerade(true);\n        g2->setMasquerade(true);\n        H.addNode(g1, false);\n        V.addNode(g2, false);\n    }\n    for (auto p : m_sparseLookup) {\n        for (auto q : p.second) {\n            SepPair_SP sp = q.second;\n            if (sp->isHAlign()) H.addEdge(sp->src, sp->tgt);\n            if (sp->isVAlign()) V.addEdge(sp->src, sp->tgt);\n        }\n    }\n    Graphs hComps = H.getConnComps(),\n           vComps = V.getConnComps();\n    for (Graph_SP C : hComps) {\n        NodesById nodes = C->getNodeLookup();\n        std::set<id_type> ids;\n        for (auto p : nodes) ids.insert(p.first);\n        for (id_type id : ids) hSets.insert({id, ids});\n    }\n    for (Graph_SP C : vComps) {\n        NodesById nodes = C->getNodeLookup();\n        std::set<id_type> ids;\n        for (auto p : nodes) ids.insert(p.first);\n        for (id_type id : ids) vSets.insert({id, ids});\n    }\n}\n\nbool SepMatrix::areHAligned(id_type id1, id_type id2) const {\n    SepPair_SP sp = checkSepPair(id1, id2);\n    if (sp == nullptr) return false;\n    // No need to flip.\n    return sp->isHAlign();\n}\n\nbool SepMatrix::areVAligned(id_type id1, id_type id2) const {\n    SepPair_SP sp = checkSepPair(id1, id2);\n    if (sp == nullptr) return false;\n    // No need to flip.\n    return sp->isVAlign();\n}\n\nvoid SepMatrix::transform(SepTransform tf) {\n    // Apply the transformation to every SepPair.\n    for (auto p : m_sparseLookup) {\n        for (auto q : p.second) {\n            q.second->transform(tf);\n        }\n    }\n}\n\nvoid SepMatrix::transformClosedSubset(SepTransform tf, const std::set<id_type> &ids) {\n    // We take advantage of the fact that both the std::set giving the desired IDs,\n    // and the std::map with which our constraint lookup is implemented, are ordered.\n    // This makes our algorithm more efficient.\n    auto map_ptr1 = m_sparseLookup.begin();\n    auto map_end1 = m_sparseLookup.end();\n    auto set_ptr1 = ids.cbegin();\n    auto set_end = ids.cend();\n    while (map_ptr1 != map_end1 && set_ptr1 != set_end) {\n        id_type i = (*map_ptr1).first;\n        id_type a = *set_ptr1;\n        if (i > a) {\n            // The element in the set is less than that in the map.\n            // Advance the set pointer, but do not advance the map pointer.\n            ++set_ptr1;\n        } else {\n            if (i == a) {\n                // ID i belongs to the set.\n                auto i_lookup = (*map_ptr1).second;\n                auto map_ptr2 = i_lookup.begin();\n                auto map_end2 = i_lookup.end();\n                // Since second ID must be greater than the first, we can start looking\n                // through the set at set_ptr1 + 1.\n                // set iterators do not support \"+ 1\", but you can instead use\n                // std::next (thanks to https://stackoverflow.com/a/19946497)\n                auto set_ptr2 = std::next(set_ptr1);\n                while (map_ptr2 != map_end2 && set_ptr2 != set_end) {\n                    id_type j = (*map_ptr2).first;\n                    id_type b = *set_ptr2;\n                    if (j > b) {\n                        // The element in the set is less than that in the map.\n                        // Advance the set pointer, but do not advance the map pointer.\n                        ++set_ptr2;\n                    } else {\n                        if (j == b) {\n                            // ID j belongs to the set.\n                            // Both IDs are in the set, so we apply the transformation.\n                            SepPair_SP &sp = (*map_ptr2).second;\n                            sp->transform(tf);\n                        }\n                        // Whether or not we did anything, advance the map pointer.\n                        ++map_ptr2;\n                    }\n                }\n            }\n            // Whether or not we did anything, advance the map pointer.\n            ++map_ptr1;\n        }\n    }\n}\n\nvoid SepMatrix::transformOpenSubset(SepTransform tf, const std::set<id_type> &ids) {\n    // First pass: We partition the domain of the outer map into elements in the given\n    // set, and elements not in the given set.\n    // Elements in the set can actually be processed inline; elements outside the set\n    // must wait until later.\n    vector<id_type> out_of_set;\n    auto map_ptr1 = m_sparseLookup.begin();\n    auto map_end1 = m_sparseLookup.end();\n    auto set_ptr1 = ids.cbegin();\n    auto set_end = ids.cend();\n    // First pass, Part (a): before we run off the end of either the map or the set:\n    while (map_ptr1 != map_end1 && set_ptr1 != set_end) {\n        id_type i = (*map_ptr1).first;\n        id_type a = *set_ptr1;\n        if (i > a) {\n            // The element in the set is less than that in the map.\n            // We cannot decide set membership.\n            // Advance the set pointer, but do not advance the map pointer.\n            ++set_ptr1;\n        } else {\n            // The element in the set is >= that in the map.\n            // We can decide set membership.\n            if (i == a) {\n                // ID i belongs to the set. Transform every pair (i, j).\n                auto i_lookup = (*map_ptr1).second;\n                for (auto p : i_lookup) {\n                    SepPair_SP &sp = p.second;\n                    sp->transform(tf);\n                }\n            } else {\n                // ID i does not belong to the set.\n                out_of_set.push_back(i);\n            }\n            // In both cases, advance the map pointer.\n            ++map_ptr1;\n        }\n    }\n    // First pass, Part (b): if we exited part (a) because the set ended first, then all remaining\n    // elements in the domain of the map are not in the set.\n    while (map_ptr1 != map_end1) {\n        id_type i = (*map_ptr1).first;\n        out_of_set.push_back(i);\n        ++map_ptr1;\n    }\n    // Second pass: For elements i not in the set, transform only those pairs (i, j) for\n    // which j is in the set.\n    for (id_type i : out_of_set) {\n        auto i_lookup = m_sparseLookup[i];\n        auto map_ptr2 = i_lookup.begin();\n        auto map_end2 = i_lookup.end();\n        auto set_ptr2 = ids.cbegin();\n        while (map_ptr2 != map_end2 && set_ptr2 != set_end) {\n            id_type j = (*map_ptr2).first;\n            id_type b = *set_ptr2;\n            if (j > b) {\n                // The element in the set is less than that in the map.\n                // Advance the set pointer, but do not advance the map pointer.\n                ++set_ptr2;\n            } else {\n                if (j == b) {\n                    // ID j belongs to the set, so we apply the transformation.\n                    SepPair_SP &sp = (*map_ptr2).second;\n                    sp->transform(tf);\n                }\n                // Whether or not we did anything, advance the map pointer.\n                ++map_ptr2;\n            }\n        }\n    }\n}\n\nvoid SepMatrix::removeNode(id_type id) {\n    // We replace our sparse lookup map with a new one.\n    SparseIdMatrix2d<SepPair_SP>::type m;\n    // Iterate over the old lookup.\n    for (auto p : m_sparseLookup) {\n        // If first ID matches the given one, skip it entirely.\n        if (p.first == id) continue;\n        // Else initialise a map for this ID.\n        std::map<id_type, SepPair_SP> &mi = m[p.first];\n        // Iterate over the nested map.\n        for (auto q : p.second) {\n            // If second ID matches the given one, skip it.\n            if (q.first == id) continue;\n            // Else insert a copy of the pair in the new lookup.\n            mi.insert(q);\n        }\n    }\n    // Replace the old lookup.\n    // Since we use shared ptrs to our SepPairs, those among the old ones that\n    // lack shared ptrs in the new lookup will be destroyed automatically.\n    m_sparseLookup = m;\n}\n\nvoid SepMatrix::removeNodes(const NodesById &nodes) {\n    // We replace our sparse lookup map with a new one.\n    SparseIdMatrix2d<SepPair_SP>::type m;\n    // Iterate over the old lookup and the given \"set\" of nodes.\n    // (We treat it like a set; really we are using the first component of\n    //  the pairs contained in this map.)\n    auto map_ptr1 = m_sparseLookup.begin();\n    auto map_end1 = m_sparseLookup.end();\n    auto set_ptr1 = nodes.cbegin();\n    auto set_end = nodes.cend();\n    // Special case: If `nodes` is empty, then don't waste time copying the map.\n    if (set_ptr1 == set_end) return;\n    while (map_ptr1 != map_end1 && set_ptr1 != set_end) {\n        id_type i = (*map_ptr1).first;\n        id_type a = (*set_ptr1).first;\n        if (i > a) {\n            // The element in the set is less than that in the map.\n            // Advance the set pointer, but do not advance the map pointer.\n            ++set_ptr1;\n        } else {\n            // In all other cases we will advance the map pointer.\n            // However first we must consider the case in which i < a.\n            if (i < a) {\n                // ID i does not belong to the set.\n                // Initialise a map for this ID.\n                std::map<id_type, SepPair_SP> &mi = m[i];\n                // Iterate over the nested map.\n                auto i_lookup = (*map_ptr1).second;\n                auto map_ptr2 = i_lookup.begin();\n                auto map_end2 = i_lookup.end();\n                auto set_ptr2 = set_ptr1;\n                while (map_ptr2 != map_end2 && set_ptr2 != set_end) {\n                    id_type j = (*map_ptr2).first;\n                    id_type b = (*set_ptr2).first;\n                    if (j > b) {\n                        // The element in the set is less than that in the map.\n                        // Advance the set pointer, but do not advance the map pointer.\n                        ++set_ptr2;\n                    } else {\n                        if (j < b) {\n                            // ID j does not belong to the set.\n                            // Both IDs are outside the set, so we can keep this datum.\n                            mi.insert(*map_ptr2);\n                        }\n                        // Whether or not we did anything, advance the map pointer.\n                        ++map_ptr2;\n                    }\n                }\n                // If the set ended first, anything else in the map stays.\n                while (map_ptr2 != map_end2) {\n                    mi.insert(*map_ptr2);\n                    ++map_ptr2;\n                }\n            }\n            // Whether or not we did anything, advance the map pointer.\n            ++map_ptr1;\n        }\n    }\n    // If the set ended first, anything else in the map stays.\n    while (map_ptr1 != map_end1) {\n        m.insert(*map_ptr1);\n        ++map_ptr1;\n    }\n    // Replace the old lookup.\n    m_sparseLookup = m;\n}\n\nvoid SepMatrix::setSepPair(id_type id1, id_type id2, SepPair_SP sp) {\n    if (id1 >= id2) throw std::runtime_error(\"Bad ids for SepPair.\");\n    getSepPair(id1, id2) = sp;\n}\n\nvoid SepMatrix::setCorrespondingConstraints(SepMatrix &matrix) const {\n    // Get the lookup of nodes belonging to the other matrix's graph.\n    NodesById otherNodes = matrix.m_graph->getNodeLookup();\n    // Although this is a map, we will use it as a set, i.e. to test presence of\n    // Node IDs in the other graph.\n    // Accordingly we refer to \"set\" pointers below.\n    auto map_ptr1 = m_sparseLookup.cbegin();\n    auto map_end1 = m_sparseLookup.cend();\n    auto set_ptr1 = otherNodes.cbegin();\n    auto set_end = otherNodes.cend();\n    while (map_ptr1 != map_end1 && set_ptr1 != set_end) {\n        id_type i = (*map_ptr1).first;\n        id_type a = (*set_ptr1).first;\n        if (i > a) {\n            // The element in the set is less than that in the map.\n            // Advance the set pointer, but do not advance the map pointer.\n            ++set_ptr1;\n        } else {\n            if (i == a) {\n                // ID i belongs to the other graph.\n                auto i_lookup = (*map_ptr1).second;\n                auto map_ptr2 = i_lookup.begin();\n                auto map_end2 = i_lookup.end();\n                // Since second ID must be greater than the first, we can start looking\n                // through the set at set_ptr1 + 1.\n                auto set_ptr2 = std::next(set_ptr1);\n                while (map_ptr2 != map_end2 && set_ptr2 != set_end) {\n                    id_type j = (*map_ptr2).first;\n                    id_type b = (*set_ptr2).first;\n                    if (j > b) {\n                        // The element in the set is less than that in the map.\n                        // Advance the set pointer, but do not advance the map pointer.\n                        ++set_ptr2;\n                    } else {\n                        if (j == b) {\n                            // ID j belongs to the other graph.\n                            // Since both IDs belong to the other graph, we can set this constraint.\n                            SepPair_SP sp = (*map_ptr2).second;\n                            matrix.setSepPair(i, j, sp);\n                        }\n                        // Whether or not we did anything, advance the map pointer.\n                        ++map_ptr2;\n                    }\n                }\n            }\n            // Whether or not we did anything, advance the map pointer.\n            ++map_ptr1;\n        }\n    }\n}\n\nstring SepMatrix::writeTglf(std::map<id_type, unsigned> id2ext) const {\n    std::ostringstream ss;\n    for (auto p : m_sparseLookup) {\n        for (auto q : p.second) {\n            SepPair_SP &sp = q.second;\n            string s = sp->writeTglf(id2ext, *this);\n            if (!s.empty()) ss << s;\n        }\n    }\n    return ss.str();\n}\n\nSepPair_SP &SepMatrix::getSepPair(id_type id1, id_type id2) {\n    if (id1 == id2) {\n        throw std::runtime_error(\"Cannot set a constraint between a node and itself.\");\n    } else if (id1 < id2) {\n        SepPair_SP &sp = m_sparseLookup[id1][id2];\n        if (sp == nullptr) {\n            sp = std::make_shared<SepPair>();\n            sp->src = id1;\n            sp->tgt = id2;\n            sp->flippedRetrieval = false;\n        }\n        return sp;\n    } else { // id2 < id1\n        SepPair_SP &sp = m_sparseLookup[id2][id1];\n        if (sp == nullptr) {\n            sp = std::make_shared<SepPair>();\n            sp->src = id2;\n            sp->tgt = id1;\n            sp->flippedRetrieval = true;\n        }\n        return sp;\n    }\n}\n\nSepPair_SP SepMatrix::checkSepPair(id_type id1, id_type id2) const {\n    if (id1 == id2) {\n        return nullptr;\n    } else {\n        bool flipped = id2 < id1;\n        id_type idSmall = flipped ? id2 : id1,\n                idLarge = flipped ? id1 : id2;\n        auto it = m_sparseLookup.find(idSmall);\n        if (it == m_sparseLookup.end()) {\n            return nullptr;\n        } else {\n            auto m = (*it).second;\n            auto jt = m.find(idLarge);\n            if (jt == m.end()) {\n                return nullptr;\n            } else {\n                SepPair_SP sp = (*jt).second;\n                sp->flippedRetrieval = flipped;\n                return sp;\n            }\n        }\n    }\n}\n\nvoid SepMatrix::free(id_type id1, id_type id2) {\n    if (id1 == id2) {\n        // There is nothing to do.\n        return;\n    } else if (id2 < id1) {\n        // Swap so id1 is smaller.\n        std::swap(id1, id2);\n    }\n    // Under id1, erase the entry for id2 (if any).\n    // Since SepPairs are stored via shared pointers, we need not worry\n    // about whether to delete the SepPair.\n    // This is cruicially important in cases where a copy of a Graph has\n    // been made, and one copy wants to free a constraint /without/ depriving\n    // the other Graph of that constraint. This is a good example of a true shared resource.\n    m_sparseLookup[id1].erase(id2);\n}\n\n// ------------------------------------------------------------------\n// cola::CompoundConstraint interface\n\nvoid SepMatrix::generateVariables(const vpsc::Dim dim, vpsc::Variables &vars) {\n    COLA_UNUSED(dim);\n    COLA_UNUSED(vars);\n}\n\nvoid SepMatrix::generateSeparationConstraints(const vpsc::Dim dim,\n        vpsc::Variables &vs, vpsc::Constraints &cs, vpsc::Rectangles &bbs) {\n    COLA_UNUSED(bbs);\n    ColaGraphRep &cgr = m_graph->getColaGraphRep();\n    for (auto p : m_sparseLookup) {\n        for (auto q : p.second) {\n            SepPair_SP &sp = q.second;\n            vpsc::Constraint *c = sp->generateSeparationConstraint(dim, cgr, this, vs);\n            if (c != nullptr) cs.push_back(c);\n        }\n    }\n}\n\nstring SepMatrix::toString(void) const {\n    std::ostringstream ss;\n    ss << \"Separation Matrix\\n\";\n    return ss.str();\n}\n\nvoid SepMatrix::markAllSubConstraintsAsInactive(void) {\n    // We take advantage of this opportunity to refresh our list of subconstraint infos, since\n    // new SepPairs may have been added to the SepMatrix.\n    // First clean up.\n    for (cola::SubConstraintInfo *info : _subConstraintInfo) delete info;\n    _subConstraintInfo.clear();\n    // Now populate with up to two infos for each of our SepPairs, one in each dimension.\n    for (auto p : m_sparseLookup) {\n        for (auto q : p.second) {\n            SepPair_SP &sp = q.second;\n            for (unsigned d = 0; d < 2; ++d) {\n                vpsc::Dim dim = (vpsc::Dim)d;\n                if (sp->hasConstraintInDim(dim)) {\n                    _subConstraintInfo.push_back(new SepPairSubConstraintInfo(sp, dim));\n                }\n            }\n        }\n    }\n    // And set the index to zero.\n    _currSubConstraintIndex = 0;\n}\n\ncola::SubConstraintAlternatives SepMatrix::getCurrSubConstraintAlternatives(vpsc::Variables vs[]) {\n    cola::SubConstraintAlternatives alternatives;\n    SepPairSubConstraintInfo *info = dynamic_cast<SepPairSubConstraintInfo*>(_subConstraintInfo[_currSubConstraintIndex]);\n    SepPair_SP sp = info->sp;\n    vpsc::Dim dim = info->dim;\n    ColaGraphRep &cgr = m_graph->getColaGraphRep();\n    vpsc::Constraint *c = sp->generateSeparationConstraint(dim, cgr, this, vs[dim]);\n    alternatives.push_back(cola::SubConstraint(dim, *c));\n    // The subconstraint stores its own copy of the vpsc::Constraint, so we can and must delete the original now.\n    delete c;\n    return alternatives;\n}\n\n// ------------------------------------------------------------------\n\nvoid SepCo::generateColaConstraints(const ColaGraphRep &cgr, cola::CompoundConstraints &ccs) {\n    unsigned l = cgr.id2ix.at(left->id()),\n             r = cgr.id2ix.at(right->id());\n    if (gap >= 0) {\n        ccs.push_back(new cola::SeparationConstraint(dim, l, r, gap, exact));\n    } else {\n        // A separation constraint with negative gap is realised using a combination of\n        // alignments and separations.\n        cola::AlignmentConstraint *alnL = new cola::AlignmentConstraint(dim, cgr.rs[l]->getCentreD(dim));\n        alnL->addShape(l, 0);\n        cola::AlignmentConstraint *alnR = new cola::AlignmentConstraint(dim, cgr.rs[r]->getCentreD(dim) - gap);\n        alnR->addShape(r, gap);\n        cola::SeparationConstraint *sep = new cola::SeparationConstraint(dim, alnL, alnR, 0, exact);\n        ccs.push_back(alnL);\n        ccs.push_back(alnR);\n        ccs.push_back(sep);\n    }\n}\n\nCardinalDir SepCo::getDirecRelativeToNode(Node_SP baseNode) const {\n    if (baseNode == left) {\n        return dim == vpsc::HORIZONTAL ? CardinalDir::EAST : CardinalDir::SOUTH;\n    } else {\n        return dim == vpsc::HORIZONTAL ? CardinalDir::WEST : CardinalDir::NORTH;\n    }\n}\n\nvoid SepCo::addToMatrix(SepMatrix &matrix) const {\n    SepDir sd = dim == vpsc::HORIZONTAL ? SepDir::RIGHT : SepDir::DOWN;\n    SepType st = exact ? SepType::EQ : SepType::INEQ;\n    matrix.addSep(left->id(), right->id(), GapType::CENTRE, sd, st, gap);\n}\n\ndouble SepCo::violation(void) const {\n    Point lc = left->getCentre(),\n          rc = right->getCentre();\n    double vio = gap - (dim==vpsc::HORIZONTAL ? rc.x - lc.x : rc.y - lc.y);\n    if (vio < 0) vio = exact ? -vio : 0;\n    return vio;\n}\n\ncola::CompoundConstraints Projection::generateColaConstraints(const ColaGraphRep &cgr) {\n    cola::CompoundConstraints ccs;\n    for (SepCo_SP s : sepCoSet) {\n        s->generateColaConstraints(cgr, ccs);\n    }\n    return ccs;\n}\n\nvoid ProjSeq::addProjection(SepCoSet sepCos, vpsc::Dim dim) {\n    // Ensure monotonicity:\n    SepCoSet &finalSet = m_finalSets[dim];\n    finalSet.insert(sepCos.begin(), sepCos.end());\n    // Record new Projection.\n    Projection_SP proj = std::make_shared<Projection>(finalSet, dim);\n    m_projections.push_back(proj);\n}\n\nProjection_SP ProjSeq::nextProjection(void) {\n    Projection_SP next = nullptr;\n    if (m_ptr < m_projections.size()) {\n        next = m_projections[m_ptr++];\n    }\n    return next;\n}\n\nProjSeq &ProjSeq::operator+=(const ProjSeq &rhs) {\n    for (Projection_SP proj : rhs.m_projections) {\n        addProjection(proj->sepCoSet, proj->dim);\n    }\n    return *this;\n}\n\nProjSeq operator+(const ProjSeq &lhs, const ProjSeq &rhs) {\n    ProjSeq sum = lhs;\n    sum += rhs;\n    return sum;\n}\n\nSepCoSet ProjSeq::getAllConstraints(void) const {\n    SepCoSet all = m_finalSets.at(vpsc::XDIM);\n    const SepCoSet &ySet = m_finalSets.at(vpsc::YDIM);\n    all.insert(ySet.cbegin(), ySet.cend());\n    return all;\n}\n\ndouble ProjSeq::violation(void) const {\n    SepCoSet all = getAllConstraints();\n    double v = 0;\n    for (SepCo_SP sc : all) v += sc->violation();\n    return v;\n}\n\nstring SepCo::toString(void) const {\n    std::ostringstream ss;\n    ss << \"SepCo: \";\n    ss << (dim == vpsc::XDIM ? \"x\" : \"y\");\n    ss << \", u\" << left->id();\n    if (gap != 0) {\n        ss << \" + \" << gap;\n    }\n    ss << (exact ? \" == \" : \" <= \");\n    ss << \"u\" << right->id();\n    return ss.str();\n}\n\nstring Projection::toString(void) const {\n    std::ostringstream ss;\n    ss << \"Projection: \";\n    ss << (dim == vpsc::XDIM ? \"x\" : \"y\") << std::endl;\n    for (SepCo_SP sc : sepCoSet) {\n        ss << \"  \" << sc->toString() << std::endl;\n    }\n    return ss.str();\n}\n\nstring ProjSeq::toString(void) const {\n    std::ostringstream ss;\n    ss << \"ProjSeq:\" << std::endl;\n    for (Projection_SP p : m_projections) {\n        ss << p->toString() << std::endl;\n    }\n    return ss.str();\n}\n"
  },
  {
    "path": "cola/libdialect/constraints.h",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libdialect - A library for computing DiAlEcT layouts:\n *                 D = Decompose/Distribute\n *                 A = Arrange\n *                 E = Expand/Emend\n *                 T = Transform\n *\n * Copyright (C) 2018  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n * Author(s):   Steve Kieffer   <http://skieffer.info>\n*/\n\n#ifndef DIALECT_CONSTRAINTS_H\n#define DIALECT_CONSTRAINTS_H\n\n#include <map>\n#include <set>\n#include <string>\n#include <vector>\n#include <utility>\n#include <memory>\n\n#include \"libvpsc/rectangle.h\"\n#include \"libcola/compound_constraints.h\"\n\n#include \"libdialect/commontypes.h\"\n#include \"libdialect/ortho.h\"\n\nnamespace dialect {\n\nclass Graph;\n\n// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// SepMatrices\n\nenum class GapType {\n    //! Gap between the centres of two nodes:\n    CENTRE,\n    //! Gap between the opposite boundaries of two nodes:\n    BDRY\n};\n\nenum class SepDir {\n    //! Cardinal constraints imply both a separation and an alignment:\n    EAST, SOUTH, WEST, NORTH,\n    //! Lateral constraints imply only a separation:\n    RIGHT, DOWN, LEFT, UP\n};\n\nenum class SepType {\n    //! No constraint:\n    NONE,\n    //! An exact separation:\n    EQ,\n    //! A minimal separation:\n    INEQ\n};\n\nSepDir negateSepDir(SepDir sd);\n\nbool sepDirIsCardinal(SepDir sd);\n\nCardinalDir sepDirToCardinalDir(SepDir sd);\n\nSepDir cardinalDirToSepDir(CardinalDir dir);\n\nSepDir lateralWeakening(SepDir sd);\n\nSepDir cardinalStrengthening(SepDir sd);\n\nenum class SepTransform {\n    //! Rotate 90 degrees clockwise.\n    ROTATE90CW,\n    //! Rotate 90 degrees anticlockwise.\n    ROTATE90ACW,\n    //! Rotate 180 degrees.\n    ROTATE180,\n    //! Flip over vertical axis.\n    FLIPV,\n    //! Flip over horizontal axis.\n    FLIPH,\n    //! Flip over the \"main diagonal\" i.e. the axis whose slope is positive\n    //! in the graphics plane. This goes from upper left to lower right,\n    //! since in the graphics plane the positive y-axis points downward.\n    FLIPMD,\n    //! Flip over the \"off diagonal\".\n    FLIPOD\n};\n\nclass SepMatrix;\n\nstruct SepPair {\n    SepPair(void) : src(0), tgt(0), xgt(GapType::CENTRE), ygt(GapType::CENTRE), xst(SepType::NONE), yst(SepType::NONE), xgap(0.0), ygap(0.0) {}\n\n    id_type src;\n    id_type tgt;\n    GapType xgt;\n    GapType ygt;\n    SepType xst;\n    SepType yst;\n    double xgap;\n    double ygap;\n\n    //! String formatting precision for doubles, for writing TGLF:\n    unsigned tglfPrecision = 3;\n\n    //! Generally, clients do not interact directly with SepPairs; they interact with a SepMatrix.\n    //! They either want to set a constraint, or check for an existing constraint, FROM a node of\n    //! ID id1, TO a node if ID id2. (Constraints, in general, are directed.)\n    //!\n    //! However, the SepMatrix stores only an upper-triangular matrix of SepPairs, so that in every stored\n    //! SepPair, src < tgt. This is possible because every constraint has an opposite. However, this means that every\n    //! getter and setter method in the SepMatrix has to be wary of this fact, and when the retrieved\n    //! SepPair has been flipped relative to the given IDs (i.e. when src == id2 and tgt == id1), then\n    //! the getter/setter method has to flip the constraint before reporting/recording.\n    //!\n    //! The SepMatrix works in multiple layers. At the deepest layer is a pair of private methods -- getSepPair\n    //! and checkSepPair -- which are responsible for retrieving/allocating (getSepPair), and checking for\n    //! preexistence (checkSepPair). These are the only two methods that are ever to interact with the upper-triangular\n    //! storage matrix itself. Above this deepest layer is the layer of getter/setter methods, which are public and\n    //! for use by clients.\n    //!\n    //! As an aid to this design, the SepPair struct stores a 'flippedRetrieval' field. The field is set by the deep\n    //! layer methods, to report whether the SepPair is flipped relative to the given IDs. It is used by the public\n    //! layer methods when getting and setting, in order to know when the constraint needs to be flipped.\n    //! Clients must understand that, outside of this context, this field is meaningless!\n    bool flippedRetrieval = false;\n\n    //! @brief  Add a constraint.\n    //! @sa  addSep method of SepMatrix class\n    void addSep(GapType gt, SepDir sd, SepType st, double gap);\n    //! @brief  Apply a transformation.\n    void transform(SepTransform tf);\n    //! @brief  Check whether this SepPair represents a separation in a vertical cardinal compass direction.\n    bool isVerticalCardinal(void) const;\n    //! @brief  Check whether this SepPair represents a separation in a horizontal cardinal compass direction.\n    bool isHorizontalCardinal(void) const;\n    //! @brief  Check whether this SepPair represents a vertical alignment.\n    bool isVAlign(void) const;\n    //! @brief  Check whether this SepPair represents a horizontal alignment.\n    bool isHAlign(void) const;\n    //! @brief  Check whether this SepPair represents a separation in a cardinal compass direction.\n    bool isCardinal(void) const;\n    //! @brief  Get the cardinal direction of this separation.\n    //! @throws  Runtime exception if this separation is not cardinal.\n    //! @returns The cardinal direction.\n    CardinalDir getCardinalDir(void) const;\n    //! @brief  Round gaps upward in absolute value. Useful when trying to move nodes to integer coords.\n    //! \n    //! E.g., -2.3 goes to -3.0; 2.3 goes to 3.0.\n    void roundGapsUpAbs(void);\n    //! @brief  Write a representation of this constraint in the format of\n    //!         the SEPCO'S section of the TGLF file format.\n    //! @param[in] id2ext  Mapping from internal Node IDs to external IDs for the TGLF output.\n    std::string writeTglf(std::map<id_type, unsigned> id2ext, const SepMatrix &m) const;\n    //! @brief  Check whether there is a constraint in a given dimension.\n    bool hasConstraintInDim(vpsc::Dim dim) const;\n    //! @brief  Write the VPSC constraint in one dimension.\n    vpsc::Constraint *generateSeparationConstraint(const vpsc::Dim dim, const ColaGraphRep &cgr, SepMatrix *m, vpsc::Variables &vs);\n};\n\n//! Since each SepPair may represent up to two VPSC constraints (one in each dimension), we need a simple wrapper\n//! struct to represent each dimension.\nstruct SepPairSubConstraintInfo : public cola::SubConstraintInfo {\n    SepPairSubConstraintInfo(SepPair_SP sp, vpsc::Dim dim) : cola::SubConstraintInfo(0), sp(sp), dim(dim) {}\n    SepPair_SP sp = nullptr;\n    vpsc::Dim dim;\n};\n\n\nstatic const unsigned int PRIORITY_SEPMATRIX = cola::DEFAULT_CONSTRAINT_PRIORITY;\n\nclass SepMatrix : public cola::CompoundConstraint {\npublic:\n    //! @brief  Standard constructor.\n    //!\n    //! @note  A SepMatrix does not have a \"primary dimension\" in the sense of the\n    //!        cola::CompoundConstraint superclass, so we pass vpsc::UNSET for this.\n    SepMatrix(Graph *G) : cola::CompoundConstraint(vpsc::UNSET, PRIORITY_SEPMATRIX), m_graph(G) {\n        _combineSubConstraints = true;\n    }\n    //! @brief  No default constructor. There is always an associated Graph.\n    SepMatrix(void) = delete;\n    //! @brief  Copy constructor.\n    SepMatrix(const SepMatrix &m) = default;\n    //! @brief  Destructor.\n    ~SepMatrix(void) = default;\n    //! @brief  Add a constraint.\n    //!\n    //! @note   The specified separation is /added/ to any existing constraints\n    //!         between the two nodes. It overwrites anything with which it is\n    //!         in conflict, but leaves everything else intact. For example, if\n    //!         the second node was already constrained to lie UP and to the LEFT\n    //!         of the first, and then a RIGHT sep is added, then the second node\n    //!         will be constrained to lie UP and to the RIGHT of the first.\n    //!\n    //! @note   You cannot /remove/ a constraint using this method. If NONE is passed\n    //!         as the SepType, nothing happens.\n    //!\n    //! @param[in]  id1  The ID of the first node.\n    //! @param[in]  id2  The ID of the second node.\n    //! @param[in]  gt  The gap type (centre-to-centre, or between opposing boundaries).\n    //! @param[in]  sd  The direction of the separation from the first node\n    //!                 to the second node.\n    //! @param[in]  st  The type of the separation.\n    //! @param[in]  gap  The size of the separation.\n    void addSep(id_type id1, id_type id2, GapType gt, SepDir sd, SepType st, double gap);\n\n    //! @brief  Convenience method, for setting that particular type of cardinal separation that merely\n    //!         prevents overlap in the stated direction.\n    //! @sa SepMatrix::addSep\n    void setCardinalOP(id_type id1, id_type id2, dialect::CardinalDir dir) {\n        addSep(id1, id2, GapType::BDRY, (SepDir) dir, SepType::INEQ, 0.0);\n    }\n\n    //! @brief  Constrain two Nodes to sit at a fixed separation between their centre coordinates.\n    //!\n    //! @param[in]  id1  The ID of the first node, u.\n    //! @param[in]  id2  The ID of the second node, v.\n    //! @param[in]  dx   The desired fixed value for v.x - u.x (centre coordinates)\n    //! @param[in]  dy   The desired fixed value for v.y - u.y (centre coordinates)\n    void addFixedRelativeSep(id_type id1, id_type id2, double dx, double dy);\n\n    //! @brief  Constrain two Nodes to sit at their present exact separation.\n    //!\n    //! @param[in]  id1  The ID of the first node, u.\n    //! @param[in]  id2  The ID of the second node, v.\n    void addFixedRelativeSep(id_type id1, id_type id2);\n\n    //! @brief  Align a pair of nodes horizontally.\n    void hAlign(id_type id1, id_type id2) { addSep(id1, id2, GapType::CENTRE, SepDir::DOWN, SepType::EQ, 0); }\n\n    //! @brief  Align a pair of nodes vertically.\n    void vAlign(id_type id1, id_type id2) { addSep(id1, id2, GapType::CENTRE, SepDir::RIGHT, SepType::EQ, 0); }\n\n    //! @brief  Align a pair of nodes by saying which is the coordinate to be equated.\n    //! @param[in]  id1  The ID of the first node, u.\n    //! @param[in]  id2  The ID of the second node, v.\n    //! @param[in]  eqCoord  vpsc::Dim naming the coordinate to be equated. Thus XDIM means x-coords will\n    //!                      be equated, giving a vertical alignment; YDIM means y-coords will be equated,\n    //!                      giving a horizontal alignment.\n    void alignByEquatedCoord(id_type id1, id_type id2, vpsc::Dim eqCoord);\n\n    //! @brief  Free a pair of Nodes; i.e. remove the SepPair for these Nodes\n    //!         completely.\n    void free(id_type id1, id_type id2);\n\n    //! @brief  Clear all constraints.\n    //!\n    //! @note We do not destroy the SepPairs; we merely erase our pointers to them.\n    void clear(void) { m_sparseLookup.clear(); }\n\n    //! @brief  Set corresponding constraints in another SepMatrix.\n    //!\n    //!         This means that for each constraint between nodes of IDs id1 and id2 in this\n    //!         SepMatrix, we set that constraint in the other SepMatrix if and only if its\n    //!         underlying Graph contains Nodes of IDs id1 and id2.\n    //! @param[out] matrix  The other SepMatrix.\n    void setCorrespondingConstraints(SepMatrix &matrix) const;\n\n    //! @brief  Set a SepPair directly into another SepMatrix.\n    //! @param[in]  id1  The primary ID under which the SepPair is to be stored.\n    //! @param[in]  id2  The secondary ID under which the SepPair is to be stored.\n    //! @param[in]  sp  The SepPair to be stored.\n    //! @throws  Runtime error if id1 >= id2.\n    void setSepPair(id_type id1, id_type id2, SepPair_SP sp);\n\n    //! @brief  Apply a transformation to all Nodes.\n    void transform(SepTransform tf);\n    //! @brief  Apply a transformation to a closed subset of all Nodes.\n    //!\n    //! @param[in]  tf  the transformation to be performed\n    //! @param[in]  ids  the set of IDs of all Nodes to which the transformation\n    //!                  should be applied. /Both/ Nodes must be in the set.\n    //! @sa transformOpenSubset\n    void transformClosedSubset(SepTransform tf, const std::set<id_type> &ids);\n    //! @brief  Apply a transformation to an open subset of all Nodes.\n    //!\n    //! @param[in]  tf  the transformation to be performed\n    //! @param[in]  ids  the set of IDs of all Nodes to which the transformation\n    //!                  should be applied. /At least one/ Node must be in the set.\n    //! @sa transformClosedSubset\n    void transformOpenSubset(SepTransform tf, const std::set<id_type> &ids);\n    //! @brief  Remove all records for the Node of given ID.\n    void removeNode(id_type id);\n    //! @brief  Remove all records for the given Nodes.\n    void removeNodes(const NodesById &nodes);\n    //! @brief  Get the cardinal direction of the separation between two Nodes.\n    //! @param[in] id1  The ID of one of the Nodes.\n    //! @param[in] id2  The ID of the other Node.\n    //! @throws  Runtime exception if this separation is not cardinal.\n    //! @returns The cardinal direction.\n    CardinalDir getCardinalDir(id_type id1, id_type id2) const;\n    //! @brief  Determine which sets of nodes are aligned with one another.\n    //! @param[out] hSets  Will be populated with a lookup from Node ID to set of IDs of\n    //!                    all Nodes that are horizontally aligned with that one.\n    //! @param[out] vSets  Like hSets, only for vertical alignment.\n    void getAlignedSets(std::map<id_type, std::set<id_type>> &hSets,\n                        std::map<id_type, std::set<id_type>> &vSets) const;\n    //! @brief  Check whether two nodes are horizontally aligned.\n    bool areHAligned(id_type id1, id_type id2) const;\n    //! @brief  Check whether two nodes are vertically aligned.\n    bool areVAligned(id_type id1, id_type id2) const;\n    //! @brief  Write a representation of all constraints in the format of\n    //!         the SEPCO'S section of the TGLF file format.\n    //! @param[in] id2ext  Mapping from internal Node IDs to external IDs for the TGLF output.\n    std::string writeTglf(std::map<id_type, unsigned> id2ext) const;\n    //! @brief  Set the related Graph.\n    void setGraph(Graph *G) { m_graph = G; }\n    //! @brief  Get the Graph.\n    Graph *getGraph(void) { return m_graph; }\n    //! @brief  Round gaps up to next largest integer. Useful if desiring to move all nodes to\n    //!         integer coordaintes.\n    void roundGapsUpward(void);\n    //! @brief  Set a global value to be added onto the gap value for all GapType::BDRY constraints.\n    void setExtraBdryGap(double extraBdryGap) { m_extraBdryGap = extraBdryGap; }\n    double getExtraBdryGap(void) const { return m_extraBdryGap; }\n\n\n    //! We implement the interface of a cola::CompoundConstraint\n    void generateVariables(const vpsc::Dim dim, vpsc::Variables& vars);\n    void generateSeparationConstraints(const vpsc::Dim dim,\n            vpsc::Variables& vs, vpsc::Constraints& cs,\n            vpsc::Rectangles& bbs);\n    std::string toString(void) const;\n    void markAllSubConstraintsAsInactive(void);\n    cola::SubConstraintAlternatives getCurrSubConstraintAlternatives(vpsc::Variables vs[]);\n\nprivate:\n\n    //! In many cases it is useful to be able to set a global value to be added onto\n    //! the gap value for all GapType::BDRY gaps.\n    double m_extraBdryGap = 0.0;\n\n    //! Method for retrieving the SepPair for any pair of Node IDs.\n    //! This method should always be used IFF your intention is to set a new constraint\n    //! for the named pair. If you only want to CHECK any possibly existing constraint\n    //! for this pair, then you MUST use the checkSepPair method instead.\n    //! OTHERWISE YOU WILL ALLOCATE GARBAGE CONSTRAINTS THAT YOU DON'T WANT.\n    //!\n    //! In all cases, the matrix should never be accessed directly. Use one of these two methods.\n    //!\n    //! This method ensures two things: (1) that the smaller ID always\n    //! comes first, and (2) that the src and tgt IDs in the SepPair are always\n    //! set.\n    //!\n    //! Clients can check whether the IDs had to be flipped by checking whether\n    //! id1 equals the src ID in the returned SepPair.\n    SepPair_SP &getSepPair(id_type id1, id_type id2);\n\n    //! Method for checking any possibly existing constraint.\n    //! Returns nullptr if no SepPair is found.\n    //! Otherwise returns a COPY of the existing SepPair. This makes sense, because if your\n    //! intention is to in any way modify an existing constraint then you should NOT be using\n    //! this method.\n    //! This method will NOT allocate a new SepPair in the matrix under any circumstance.\n    SepPair_SP checkSepPair(id_type id1, id_type id2) const;\n\n    //! We don't mind using a raw pointer since (a) it is quite clear that a SepMatrix\n    //! will never be considered responsible for deleting its Graph, and (b) we see no\n    //! reasonable scenario in which we need to use a Graph's SepMatrix after the Graph\n    //! itself has been deleted.\n    Graph *m_graph;\n\n    //! We use a sparse data structure to record configured separations\n    //! between Nodes. It is sparse not because we want to save space but\n    //! because we don't want to have a fixed, rigid number of Nodes.\n    //! Format: smaller Node ID points to map in which larger Node ID points\n    //! to SepPair.\n    //!\n    //! In the SepPair, gap values always mean the gap from the Node of\n    //! smaller ID to the node of larger ID.\n    //!\n    //! For example, suppose for Nodes 4 and 17 we have the SepPair,\n    //!\n    //!         xtype == SepType::INEQ\n    //!         ytype == SepType::EQ\n    //!         xgap == -200\n    //!         ygap == 0\n    //!\n    //! This means that Node 17 is configured to lie due West of Node 4,\n    //! at a distance of at least 200.\n    SparseIdMatrix2d<SepPair_SP>::type m_sparseLookup;\n};\n\n\n// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n// SepCos, Projections, ProjSeqs\n\n\n//! Simple struct to represent separation constraints in one dimension, in terms\n//! of Nodes (rather than Rectangle indices).\n//!\n//! Also supports separation constraints with negative gaps (unlike VPSC).\n//! Such constraints are perhaps better called \"containment constraints\". To illustrate,\n//! in the figure below\n//!\n//!             ---\n//!            | a |  ------|\n//!             ---         |\n//!                         |\n//!             ---         |\n//!            | b |        |\n//!             ---         |\n//!\n//!\n//! the separation constraint b.x - 100 <= a.x might mean that node b is constrained to\n//! stay to the left of the dashed line (which moves with node a).\n//!\nstruct SepCo {\n\n    //! @brief  Standard constructor\n    //! @param[in] dim  The dimension in which the constraint acts.\n    //! @param[in] left  The lefthand Node (i.e. the one with smaller coordinate)\n    //! @param[in] right  The righthand Node (i.e. the one with larger coordinate)\n    //! @param[in] gap  The desired gap between the centres of the Nodes\n    //! @param[in] exact  Says whether the gap is exact or a minimum.\n    SepCo(vpsc::Dim dim, Node_SP left, Node_SP right, double gap, bool exact=false)\n        : dim(dim), left(left), right(right), gap(gap), exact(exact) {}\n\n    //! @brief  Allocate cola::CompoundConstraints to represent this SepCo.\n    //! @param[in] cgr  A ColaGraphRep so that Node Id's can be mapped to Rectangle indices.\n    //! @param[out] ccs  A CompoundConstraints vector to which to add pointers to the allocated\n    //!                  constraints.\n    void generateColaConstraints(const ColaGraphRep &cgr, cola::CompoundConstraints &ccs);\n\n    //! @brief  Determine the constrained direction from one Node to the other.\n    //! @param[in] baseNode  The Node relative to which the direction is understood.\n    //! @return A CardinalDir giving the direction from baseNode to the other node.\n    CardinalDir getDirecRelativeToNode(Node_SP baseNode) const;\n\n    //! @brief  Add this constraint to a SepMatrix.\n    void addToMatrix(SepMatrix &matrix) const;\n\n    //! @brief  Determine the extent to which this separation constraint is currently violated.\n    double violation(void) const;\n\n    //! @brief  Write a string representation.\n    std::string toString(void) const;\n\n    vpsc::Dim dim;\n    Node_SP left;\n    Node_SP right;\n    double gap;\n    bool exact;\n};\n\ntypedef std::shared_ptr<SepCo> SepCo_SP;\ntypedef std::set<SepCo_SP> SepCoSet;\ntypedef std::vector<SepCoSet> SepCoSets;\n\n//! A Projection represents a set of constraints (given by SepCos), together\n//! with a dimension in which to project.\nstruct Projection{\n\n    //! @brief  Standard constructor.\n    //! @param[in] s  The set of SepCos onto which to project.\n    //! @param[in] d  The dimension in which to project.\n    Projection(SepCoSet s, vpsc::Dim d) : sepCoSet(s), dim(d) {}\n\n    //! @brief  Check how many SepCos are in the projection.\n    size_t size(void) { return sepCoSet.size(); }\n\n    //! @brief  Build a vector of cola CompoundConstraints representing the constraints\n    //!         in this Projection.\n    //! @param[in] cgr  A ColaGraphRep so that Node Id's can be mapped to Rectangle indices.\n    cola::CompoundConstraints generateColaConstraints(const ColaGraphRep &cgr);\n\n    //! @brief  Write a string representation.\n    std::string toString(void) const;\n\n    SepCoSet sepCoSet;\n    vpsc::Dim dim;\n};\ntypedef std::shared_ptr<Projection> Projection_SP;\ntypedef std::vector<Projection_SP> Projections;\n\n//! Projection Sequence. Manages a sequence of VPSC projections onto a monotonially\n//! increasing set of separation constraints.\nclass ProjSeq {\npublic:\n\n    //! @brief  Default constructor.\n    ProjSeq(void) {\n        // Initialize an empty final set in each dimension.\n        m_finalSets[vpsc::XDIM];\n        m_finalSets[vpsc::YDIM];\n    }\n\n    //! @brief  Add a new set of SepCos, ensuring monotonicity by uniting with\n    //!         the previous set of constraints in the same dimension, if any.\n    //! @param[in] SepCos  The new set of SepCos to be added.\n    //! @param[in] dim  The dimension in which the new set is to operate.\n    void addProjection(SepCoSet sepCos, vpsc::Dim dim);\n\n    //! @brief  Get the next Projection, if any.\n    //! @return  The next Projection if there is another one, else nullptr.\n    Projection_SP nextProjection(void);\n\n    //! @brief  Note a stress change.\n    void noteStresschange(double dS) { m_dSes.push_back(dS); }\n\n    //! @brief  Write a string representation.\n    std::string toString(void) const;\n\n    //! @brief  When another ProjSeq is added to this one, we simply add each\n    //!         Projection from the other one to this one, as usual. Thus is\n    //!         monotonicity maintained, and this ProjSeq's pointer is left in place.\n    ProjSeq &operator+=(const ProjSeq &rhs);\n\n    //! @brief  Get the set of all constraints, in both dimensions.\n    SepCoSet getAllConstraints(void) const;\n\n    //! @brief  Reset to start of sequence.\n    void reset(void) { m_ptr = 0; }\n\n    //! @brief  Sum the violations of all SepCos in the final sets.\n    double violation(void) const;\n\nprivate:\n    //! Sequence of Projections:\n    //! The sets of constraints should be monotonic by dimension; i.e. each one\n    //! should contain the last one that was in the same dimension.\n    Projections m_projections;\n    //! Sequence of stress changes:\n    std::vector<double> m_dSes;\n    //! Pointer to next constraint set to be applied:\n    size_t m_ptr = 0;\n    //! For maintaining monotonicity:\n    std::map<vpsc::Dim, SepCoSet> m_finalSets;\n};\n\n} // namespace dialect\n\n// Global Operators\ndialect::ProjSeq operator+(const dialect::ProjSeq &lhs, const dialect::ProjSeq &rhs);\n\n#endif // DIALECT_CONSTRAINTS_H\n"
  },
  {
    "path": "cola/libdialect/doc/description.doc",
    "content": "/*!\n\n\\if LIBDIALECT_DOC\n@mainpage libdialect: A library for computing human-like orthogonal network (DiAlEcT) layouts\n\\endif\n\\if ADAPTAGRAMS_DOC\n@page libdialect libdialect &mdash; Overview\n\\endif\n\nlibdialect is a cross-platform C++ library providing extensions to the libvpsc, libcola and libavoid libraries to support automatic generation of human-like orthogonal network (DiAlEcT) layouts via the following steps: D = Decompose/Distribute; A = Arrange; E = Expand/Emend; and T = Transform.\n\nlibdialect is part of the \n<a href=\"http://www.adaptagrams.org/\">Adaptagrams project</a>. \nThere are no official releases yet, though the code is stable and \navailable from the Adaptagrams \n<a href=\"https://github.com/mjwybrow/adaptagrams\">GitHub \nrepository</a>.\n\nThe API is documented using Doxygen.  The documentation you are currently \nreading can be obtained by running doxygen in the cola directory. \n\nlibdialect is written by \n<a href=\"http://skieffer.info\">Steve Kieffer</a> and\nmembers of <a href=\"http://ialab.it.monash.edu/\">Immersive Analytics Lab</a> at Monash University, Australia.\n\nIf you use libdialect, please cite the relevant paper.\n\nThe algorithms for Adaptive Constrained Alignment (ACA) are described in the following paper:\n-  Steve Kieffer, Tim Dwyer, Kim Marriott, and Michael Wybrow.  \n   \"Incremental grid-like layout using soft and hard constraints.\"   \n   In Graph Drawing 2013, pp. 448-459. Springer International Publishing, 2013.\n\nThe algorithms for  Human-like Orthogonal Layout (HOLA) are described in the following paper:\n-  Steve Kieffer, Tim Dwyer, Kim Marriott, and Michael Wybrow.  \n   HOLA: Human-like Orthogonal Network Layout.  \n   IEEE Transactions on Visualization and Computer Graphics 22, no. 1 (2016): 349-358.\n\n*/\n\n\n"
  },
  {
    "path": "cola/libdialect/edges.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libdialect - A library for computing DiAlEcT layouts:\n *                 D = Decompose/Distribute\n *                 A = Arrange\n *                 E = Expand/Emend\n *                 T = Transform\n *\n * Copyright (C) 2018  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n * Author(s):   Steve Kieffer   <http://skieffer.info>\n*/\n\n#include <algorithm>\n#include <string>\n#include <sstream>\n#include <utility>\n#include <vector>\n#include <iterator>\n#include <cmath>\n\n#include \"libavoid/libavoid.h\"\n#include \"libdialect/util.h\"\n#include \"libdialect/graphs.h\"\n\nusing namespace dialect;\n\nusing std::max;\nusing std::min;\nusing std::string;\nusing std::vector;\nusing std::ostringstream;\n\nusing Avoid::Point;\nusing Avoid::ConnEnd;\nusing Avoid::ConnDirFlag;\n\nEdge_SP Edge::allocate(const Node_SP &src, const Node_SP &tgt) {\n    // Can't use make_shared since Edge constructor is private.\n    Edge_SP edge = Edge_SP(new Edge(src, tgt));\n    // Add the Edge to each of its endpoint Nodes.\n    src->addEdge(edge);\n    tgt->addEdge(edge);\n    return edge;\n}\n\nEdge::Edge(const Node_SP &src, const Node_SP &tgt) : m_ID(nextID++), m_src(src), m_tgt(tgt) {}\n\nNode_SP Edge::getOtherEnd(const Node &end1) const {\n    // We don't bother to check that end1 is actually an endpt.\n    // I can't think of any case where that would be a legitimate\n    // error. If you get this wrong, just fix it.\n    //\n    // We also don't bother to use our weak pointers' lock method;\n    // instead we assume you know what you're doing, and that if\n    // you're using this method you have an Edge whose endpoints\n    // still exist!\n    Node_SP sp_src(m_src);\n    Node_SP sp_tgt(m_tgt);\n    return end1.id() == sp_src->id() ? sp_tgt : sp_src;\n}\n\nvoid Edge::sever(void) {\n    Node_SP sp_src(m_src);\n    Node_SP sp_tgt(m_tgt);\n    sp_src->removeEdge(*this);\n    sp_tgt->removeEdge(*this);\n}\n\nBoundingBox Edge::getBoundingBox(void) const {\n    Node_SP sp_src(m_src);\n    Node_SP sp_tgt(m_tgt);\n    Point sc = sp_src->getCentre();\n    Point tc = sp_tgt->getCentre();\n    double sx = sc.x, sy = sc.y,\n           tx = tc.x, ty = tc.y,\n           x = min(sx, tx),\n           X = max(sx, tx),\n           y = min(sy, ty),\n           Y = max(sy, ty);\n    for (auto p : m_route) {\n        x = min(x, p.x);\n        X = max(X, p.x);\n        y = min(y, p.y);\n        Y = max(Y, p.y);\n    }\n    return BoundingBox(x, X, y, Y);\n}\n\nvoid Edge::addRoutePoint(double x, double y) {\n    m_route.emplace_back(x, y);\n}\n\nstring Edge::writeRouteTglf(void) const {\n    ostringstream tglf;\n    for (auto pt : m_route) {\n        tglf << \" \" << pt.x << \" \" << pt.y;\n    }\n    return tglf.str();\n}\n\nstd::pair<ConnEnd, ConnEnd> Edge::makeLibavoidConnEnds(Avoid::ConnDirFlags srcDirs, Avoid::ConnDirFlags tgtDirs) {\n    Node_SP sp_src(m_src);\n    Node_SP sp_tgt(m_tgt);\n    Point srcPt = sp_src->getCentre(),\n          tgtPt = sp_tgt->getCentre();\n    ConnEnd srcEnd(srcPt, srcDirs),\n            tgtEnd(tgtPt, tgtDirs);\n    return {srcEnd, tgtEnd};\n}\n\nvector<Point> Edge::getRoutePoints(void) const {\n    if (!m_route.empty()) return m_route;\n    Node_SP sp_src(m_src);\n    Node_SP sp_tgt(m_tgt);\n    vector<Point> line{sp_src->getCentre(), sp_tgt->getCentre()};\n    return line;\n}\n\nstring Edge::writeSvg(void) const {\n    // Get the route points.\n    vector<Point> route = getRoutePoints();\n    COLA_ASSERT(route.size() >= 2);\n    // Decide if it's an orthogonal route.\n    bool isOrtho = true;\n    Point prevPt = route.front();\n    for (auto it = route.begin() + 1; it != route.end(); ++it) {\n        Point pt = *it,\n               d = pt - prevPt;\n        if (d.x != 0 && d.y != 0) {\n            isOrtho = false;\n            break;\n        }\n        prevPt = pt;\n    }\n    string d = isOrtho ? writeRoundedOrthoConnectorData() : writePolylineConnectorData();\n    ostringstream ss;\n    ss << \"<path stroke=\\\"black\\\" stroke-width=\\\"1\\\" fill=\\\"none\\\" \";\n    ss << \"d=\\\"\" << d << \"\\\"/>\\n\";\n    return ss.str();\n}\n\nstring Edge::writePolylineConnectorData(void) const {\n    vector<Point> route = getRoutePoints();\n    COLA_ASSERT(route.size() >= 2);\n    ostringstream ss;\n    Point p = route.front();\n    ss << string_format(\"M %.2f,%.2f\", p.x, p.y);\n    for (auto it = route.begin() + 1; it != route.end(); ++it) {\n        Point p = *it;\n        ss << string_format(\"L %.2f,%.2f\", p.x, p.y);\n    }\n    return ss.str();\n}\n\nstring Edge::writeRoundedOrthoConnectorData(void) const {\n    vector<Point> route = getRoutePoints();\n    COLA_ASSERT(route.size() >= 2);\n    // Set basic curve radius\n    double cr0 = 10;\n    ostringstream ss;\n    Point p = route.front();\n    ss << string_format(\"M %.2f,%.2f\", p.x, p.y);\n    double a, b, cr;\n    for (auto it = route.begin() + 1; it != route.end() - 1; ++it) {\n        Point q = *it,\n              r = *(std::next(it));\n        if (q.y < p.y) {\n            //   q\n            //   |\n            //   p\n            a = fabs(p.y-q.y);\n            b = fabs(q.x-r.x);\n            cr = min({cr0,a/2,b/2});\n            ss << string_format(\" V %.2f\", q.y+cr);\n            if (r.x < q.x) {\n                // r -- q\n                //      |\n                //      p\n                ss << string_format(\" a %.2f,%.2f 0 0,0 %.2f,%.2f\", cr, cr, -cr, -cr);\n            } else {\n                // q -- r\n                // |\n                // p\n                ss << string_format(\" a %.2f,%.2f 0 0,1 %.2f,%.2f\", cr, cr, cr, -cr);\n            }\n        } else if (q.y > p.y) {\n            //   p\n            //   |\n            //   q\n            a = fabs(p.y-q.y);\n            b = fabs(q.x-r.x);\n            cr = min({cr0,a/2,b/2});\n            ss << string_format(\" V %.2f\", q.y-cr);\n            if (r.x < q.x) {\n                //      p\n                //      |\n                // r -- q\n                ss << string_format(\" a %.2f,%.2f 0 0,1 %.2f,%.2f\", cr, cr, -cr, cr);\n            } else {\n                // p\n                // |\n                // q -- r\n                ss << string_format(\" a %.2f,%.2f 0 0,0 %.2f,%.2f\", cr, cr, cr, cr);\n            }\n        } else if (q.x > p.x) {\n            //\n            // p -- q\n            //\n            a = fabs(p.x-q.x);\n            b = fabs(q.y-r.y);\n            cr = min({cr0,a/2,b/2});\n            ss << string_format(\" H %.2f\", q.x-cr);\n            if (r.y < q.y) {\n                //      r\n                //      |\n                // p -- q\n                ss << string_format(\" a %.2f,%.2f 0 0,0 %.2f,%.2f\", cr, cr, cr, -cr);\n            } else {\n                // p -- q\n                //      |\n                //      r\n                ss << string_format(\" a %.2f,%.2f 0 0,1 %.2f,%.2f\", cr, cr, cr, cr);\n            }\n        } else if (q.x < p.x) {\n            //\n            // q -- p\n            //\n            a = fabs(p.x-q.x);\n            b = fabs(q.y-r.y);\n            cr = min({cr0,a/2,b/2});\n            ss << string_format(\" H %.2f\", q.x+cr);\n            if (r.y < q.y) {\n                // r\n                // |\n                // q -- p\n                ss << string_format(\" a %.2f,%.2f 0 0,1 %.2f,%.2f\", cr, cr, -cr, -cr);\n            } else {\n                // q -- p\n                // |\n                // r\n                ss << string_format(\" a %.2f,%.2f 0 0,0 %.2f,%.2f\", cr, cr, -cr, cr);\n            }\n        }\n        p = q;\n    }\n    p = route.back();\n    ss << string_format(\"L %.2f,%.2f\", p.x, p.y);\n    return ss.str();\n}\n\nvoid Edge::setRoute(std::vector<Avoid::Point> route) {\n    m_route.clear();\n    m_route.reserve(route.size());\n    m_route.insert(m_route.begin(), route.begin(), route.end());\n}\n\nvoid Edge::rotate90cw(void) {\n    auto r = Compass::getInplaceRotationFunction(CardinalDir::EAST, CardinalDir::SOUTH);\n    for (Point &p : m_route) r(p);\n}\n\nvoid Edge::rotate90acw(void) {\n    auto r = Compass::getInplaceRotationFunction(CardinalDir::EAST, CardinalDir::NORTH);\n    for (Point &p : m_route) r(p);\n}\n\nvoid Edge::rotate180(void) {\n    auto r = Compass::getInplaceRotationFunction(CardinalDir::EAST, CardinalDir::WEST);\n    for (Point &p : m_route) r(p);\n}\n\nvoid Edge::translate(double dx, double dy) {\n    for (Point &p : m_route) {\n        p.x += dx;\n        p.y += dy;\n    }\n}\n\nvoid Edge::clearRouteAndBends(void) {\n    m_route.clear();\n    // Since we keep shared pointers to bend nodes, we need not destroy them.\n    m_bendNodes.clear();\n}\n\nvoid Edge::buildRouteFromBends(void) {\n    m_route.clear();\n    Node_SP sp_src(m_src);\n    Node_SP sp_tgt(m_tgt);\n    m_route.push_back(sp_src->getCentre());\n    for (Node_SP b : m_bendNodes) m_route.push_back(b->getCentre());\n    m_route.push_back(sp_tgt->getCentre());\n}\n"
  },
  {
    "path": "cola/libdialect/expansion.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libdialect - A library for computing DiAlEcT layouts:\n *                 D = Decompose/Distribute\n *                 A = Arrange\n *                 E = Expand/Emend\n *                 T = Transform\n *\n * Copyright (C) 2018  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n * Author(s):   Steve Kieffer   <http://skieffer.info>\n*/\n\n#include <memory>\n#include <map>\n#include <set>\n#include <algorithm>\n#include <cmath>\n#include <sstream>\n#include <deque>\n#include <sstream>\n#include <stdexcept>\n#include <vector>\n#include <iterator>\n\n#include \"libavoid/geomtypes.h\"\n#include \"libvpsc/rectangle.h\"\n\n#include \"libdialect/commontypes.h\"\n#include \"libdialect/expansion.h\"\n#include \"libdialect/ortho.h\"\n#include \"libdialect/constraints.h\"\n\nusing namespace dialect;\n\nusing std::max;\nusing std::fabs;\n\nusing Avoid::Point;\n\nExpansionManager::ExpansionManager(TreePlacement_SP tp, vpsc::Dim primaryDim, double padding)\n    : m_tp(tp),\n      m_primaryDim(primaryDim)\n{\n    // Set padding.\n    if (padding < 0) {\n        padding = m_tp->getFace().getGraph()->getIEL()/4.0;\n    }\n    m_padding = padding;\n    // Determine axial and transverse dimensions.\n    m_axialDim = Compass::varDim.at(m_tp->getGrowthDir());\n    m_transDim = vpsc::conjugate(m_axialDim);\n    // Compute goals, first in the primary dimension...\n    computeGoals(m_primaryDim);\n    // ...and then in the complementary dimension.\n    computeGoals(vpsc::conjugate(m_primaryDim));\n}\n\nExpansionGoal_SP ExpansionManager::addGoalInDirec(CardinalDir dir) {\n    ExpansionGoal_SP g = std::make_shared<ExpansionGoal>(m_goalCounter++, m_tp, dir, m_padding);\n    m_goals.push_back(g);\n    return g;\n}\n\nvoid ExpansionManager::computeGoals(vpsc::Dim dim) {\n    CompassDir pdir = m_tp->getPlacementDir();\n    CardinalDir gdir = m_tp->getGrowthDir();\n    ExpansionGoals &goalsByDim = dim == m_primaryDim ? m_primaryDimGoals : m_secondaryDimGoals;\n    if (isTransverse(dim)) {\n        // For the transverse dimension, there is always just one goal, and it\n        // points in the same direction as the growth direction of the tree placement.\n        goalsByDim.push_back(addGoalInDirec(gdir));\n    } else {\n        // For the axial dimension, what we do depends on whether the placement direction is cardinal or ordinal.\n        if (Compass::isCardinal(pdir)) {\n            // Cardinal placement direction.\n            // Need two goals for axial sepcos, one in each direction.\n            CardinalDir cwdir = Compass::cardRotateCw90(gdir),\n                        acwdir = Compass::cardRotateAcw90(gdir);\n            goalsByDim.push_back(addGoalInDirec(cwdir));\n            goalsByDim.push_back(addGoalInDirec(acwdir));\n        } else {\n            // Ordinal placement direction.\n            // Need just one goal point for axial sepcos, in the direction which\n            // is the complement of the growth dir, w.r.t. the placement dir.\n            CardinalDirs comps = Compass::cardinalComponents(pdir);\n            CardinalDir compDir = comps[0] == gdir ? comps[1] : comps[0];\n            goalsByDim.push_back(addGoalInDirec(compDir));\n        }\n    }\n}\n\ndouble ExpansionManager::estimateCost(void) const {\n    std::map<vpsc::Dim, double> costByDim = estimateCostByDimension();\n    return costByDim.at(vpsc::XDIM) + costByDim.at(vpsc::YDIM);\n}\n\nstd::map<vpsc::Dim, double> ExpansionManager::estimateCostByDimension(void) const {\n    std::map<CardinalDir, double> costByDir = estimateCostByDirection();\n    std::map<vpsc::Dim, double> costByDim;\n    costByDim.insert({vpsc::XDIM, costByDir[CardinalDir::EAST] + costByDir[CardinalDir::WEST]});\n    costByDim.insert({vpsc::YDIM, costByDir[CardinalDir::SOUTH] + costByDir[CardinalDir::NORTH]});\n    return costByDim;\n}\n\nstd::map<vpsc::Dim, double> ExpansionManager::estimateCostByDimension2(void) const {\n    ExpansionGoals xGoals = m_primaryDim == vpsc::XDIM ? m_primaryDimGoals : m_secondaryDimGoals;\n    ExpansionGoals yGoals = m_primaryDim == vpsc::YDIM ? m_primaryDimGoals : m_secondaryDimGoals;\n    // We will not actually do any projections; just compute projection sequences.\n    bool doProject = false;\n    // XDIM\n    ProjSeq_SP psX = std::make_shared<ProjSeq>();\n    for (ExpansionGoal_SP g : xGoals) {\n        ContainedSegment_SP cs = g->computeContainedSegment(false);\n        cs->makeRoomForTreeNode(psX, doProject);\n    }\n    double xCost = psX->violation();\n    // YDIM\n    ProjSeq_SP psY = std::make_shared<ProjSeq>();\n    for (ExpansionGoal_SP g : yGoals) {\n        ContainedSegment_SP cs = g->computeContainedSegment(false);\n        cs->makeRoomForTreeNode(psY, doProject);\n    }\n    double yCost = psY->violation();\n    std::map<vpsc::Dim, double> costByDim{ {vpsc::XDIM, xCost}, {vpsc::YDIM, yCost} };\n    return costByDim;\n}\n\nstd::map<CardinalDir, double> ExpansionManager::estimateCostByDirection(void) const {\n    std::map<CardinalDir, double> costs;\n    // First we consider collateral expansion constraints, if any.\n    ProjSeq_SP ps0 = m_tp->getFace().computeCollateralProjSeq(m_tp, m_padding);\n    // For each direction in which these constraints act (relative to\n    // the root node of our TreePlacement), we want to know the maximum\n    // amount of violation in that direction. We set this as the cost in\n    // that direction.\n    // We also want to keep track of the directions addressed by collateral expansion,\n    // so we form a set for that.\n    std::set<CardinalDir> collateral_direcs;\n    // Get ahold of the root node.\n    Node_SP root = m_tp->getRootNode();\n    // Iterate over all constraints in the projection sequence.\n    SepCoSet sepCos = ps0->getAllConstraints();\n    for (SepCo_SP sc : sepCos) {\n        CardinalDir d = sc->getDirecRelativeToNode(root);\n        collateral_direcs.insert(d);\n        double v = sc->violation();\n        costs[d] = max(v, costs[d]);\n    }\n    // Now we also want to consider any of our goal segments that are in\n    // a direction other than one already addressed by collateral expansion\n    // (if any). The idea is that, as an estimate, we will guess that colatteral\n    // expansion will already buy enough room, in any direction in which it acts.\n    for (ExpansionGoal_SP eg : m_goals) {\n        CardinalDir d = eg->getDirec();\n        if (collateral_direcs.find(d) == collateral_direcs.end()) {\n            // In such a case we base our estimate on a comparison of the goal segment\n            // against the available space (i.e. the \"contained segment\").\n            // However, since the collateral expansion has only been /described/ (by the\n            // necessary constraints), and not actually /performed/, we need to ignore\n            // collateral tree boxes. This is because those tree boxes might currently\n            // obstruct the contained segment, giving a misrepresentation of the space\n            // that would likely become available were the collateral expansion\n            // actually to be performed.\n            bool ignoreCollateralTreeBoxes = true;\n            ContainedSegment_SP cs = eg->computeContainedSegment(ignoreCollateralTreeBoxes);\n            double sh = cs->measureShortage();\n            costs[d] = sh;\n        }\n    }\n    // Done.\n    return costs;\n}\n\nProjSeq_SP ExpansionManager::extendProjSeq(ProjSeq_SP ps0) {\n    // Start with the first goal.\n    ExpansionGoal_SP g0 = m_goals.front();\n    // Prepare the queue of remaining goals.\n    std::deque<ExpansionGoal_SP> remainingGoals(m_goals.size()-1);\n    std::copy(m_goals.begin()+1, m_goals.end(), remainingGoals.begin());\n    // Initiate the recursive expansion.\n    ProjSeq_SP ps1 = g0->tryExpansionRec(ps0, remainingGoals);\n    if (ps1) {\n        // Reset so can be applied again by client.\n        ps1->reset();\n    }\n    return ps1;\n}\n\n\nvoid ExpansionGoal::computeGoalSegmentEndpoints(Avoid::Point &p0, Avoid::Point &p1) {\n    CompassDir pdir = m_tp->getPlacementDir();\n    Node_SP root = m_tp->getRootNode();\n    // Base point on the boundary of the root node:\n    Point b = root->getBoundaryCompassPt(pdir);\n    // Centre point of root node:\n    Point r = root->getCentre();\n    // Extreme coords of tree box:\n    Node_SP treeBox = m_tp->buildTreeBox(m_padding);\n    dimensions td = treeBox->getDimensions();\n    Point t = treeBox->getCentre();\n    double w = td.first,\n           h = td.second,\n           x = r.x + t.x - w/2.0,\n           X = r.x + t.x + w/2.0,\n           y = r.y + t.y - h/2.0,\n           Y = r.y + t.y + h/2.0;\n    // possible goal coordinates:\n    double gx[3] = {x, b.x, X};\n    double gy[3] = {y, b.y, Y};\n    // p0 = b\n    p0.x = b.x;\n    p0.y = b.y;\n    // select p1 according to vector signs for our direction\n    Point sgn = Compass::vectorSigns((CompassDir)m_direc);\n    p1.x = gx[(int)sgn.x + 1];\n    p1.y = gy[(int)sgn.y + 1];\n}\n\nContainedSegment_SP ExpansionGoal::computeContainedSegment(bool ignoreCollateralTreeBoxes) {\n    // Start by constructing the closed and open boundary segments facing the direction of interest.\n    CardinalDir facingDir = Compass::cardFlip(m_direc);\n    LineSegments closedSegs, openSegs;\n    TreePlacement_SP ignoreTP = ignoreCollateralTreeBoxes ? m_tp : nullptr;\n    m_tp->getFace().buildBdrySegsFacingOneDir(facingDir, closedSegs, openSegs, ignoreTP);\n    // Build the endpoints of the goal segment.\n    Point p0, p1;\n    computeGoalSegmentEndpoints(p0, p1);\n    // Determine the constant and extreme coords.\n    double z, w0, w1;\n    bool isVertical = Compass::isVerticalCard(m_direc);\n    if (isVertical) {\n        z = p0.x; w0 = p0.y; w1 = p1.y;\n    } else {\n        z = p0.y; w0 = p0.x; w1 = p1.x;\n    }\n    // Build list of boundary segments that contain the goal segment's constant coord.\n    LineSegments segs(closedSegs.size() + openSegs.size());\n    auto it = std::copy_if(closedSegs.begin(), closedSegs.end(), segs.begin(), [z](const LineSegment_SP &seg)->bool{\n        return seg->closedIntervalIncludesCoord(z);\n    });\n    it = std::copy_if(openSegs.begin(), openSegs.end(), it, [z](const LineSegment_SP &seg)->bool{\n        return seg->openIntervalIncludesCoord(z);\n    });\n    segs.resize(it-segs.begin());\n    // Now suppose p2 is the point on the line segment (p0, p1) farthest from p0 but\n    // still inside the face. Then, for some w2 between w0 and w1, we have either p2 = (z, w2)\n    // (for vertical goal segs) or p2 = (w2, z) (for horizontal goal segs).\n    // Our task now is to compute w2.\n    // We initialize w2 to equal w1.\n    double w2 = w1,\n           d2 = fabs(w2 - w0),\n           e1 = w1 - w0;\n    // Then we look through the boundary segments and consider each one's constant coord wb.\n    // If wb is on the same side of w0 as w1 is, and if wb is closer to w0 than w2 is, this\n    // represents the nearest crossing found so far. So we set w2 = wb.\n    for (LineSegment_SP seg : segs) {\n        double wb = seg->getConstCoord(),\n               eb = wb - w0;\n        if (eb*e1 <= 0) {\n            // eb * e1 == 0 means eb == 0, i.e. we're considering a boundary segment that\n            // actually crosses through the base point. We don't want to consider those.\n            // eb * e1 < 0 means we're on the wrong side of the base point.\n            continue;\n        }\n        // If we make it this far, we have a line segment that is at least on the correct side\n        // of the base point. Now we need to check whether it is closer than w2.\n        double db = fabs(eb);\n        if (db < d2) {\n            // The segment is closer. So update the point w2, and its distance d2.\n            w2 = wb;\n            d2 = db;\n        }\n    }\n    // Having considered all possible crossing segments, we have found the contained segment.\n    Point localGoalPt(isVertical ? z : w2, isVertical ? w2 : z);\n    ContainedSegment_SP cs = std::make_shared<ContainedSegment>(m_id, p0, localGoalPt, p1, m_padding, m_tp, m_dim);\n    return cs;\n}\n\nProjSeq_SP ExpansionGoal::tryExpansionRec(ProjSeq_SP ps0, std::deque<ExpansionGoal_SP> &remainingGoals) {\n    // We need the ContainedSegment.\n    ContainedSegment_SP cs = computeContainedSegment();\n    // We use a fresh copy of the given projeciton sequence, so that it remains unaltered,\n    // and other expansions can be attempted with it.\n    ProjSeq_SP ps1 = std::make_shared<ProjSeq>(*ps0);\n    bool ok = cs->makeRoomForTreeNode(ps1);\n    if (!ok) {\n        return nullptr;\n    }\n    // Are there any further goals?\n    if (!remainingGoals.empty()) {\n        // If so, then recurse.\n        // Take the first remaining goal.\n        ExpansionGoal_SP g0 = remainingGoals.front();\n        remainingGoals.pop_front();\n        // Try the expansion, recursively.\n        ps1 = g0->tryExpansionRec(ps1, remainingGoals);\n    }\n    return ps1;\n}\n\n\nContainedSegment::ContainedSegment(unsigned goalID, Avoid::Point basept, Avoid::Point localGoalPt, Avoid::Point globalGoalPt,\n                 double padding, TreePlacement_SP tp, vpsc::Dim sepDim)\n    : goalID(goalID), basept(basept), localGoalPt(localGoalPt), globalGoalPt(globalGoalPt),\n      padding(padding), tp(tp), sepDim(sepDim),\n      localGoalSeg(basept, localGoalPt),\n      globalGoalSeg(basept, globalGoalPt) {}\n\n\ndouble ContainedSegment::measureShortage(void) const {\n    double excess = globalGoalSeg.length - localGoalSeg.length;\n    return excess < 0 ? 0 : excess;\n}\n\nstd::string ContainedSegment::toString(void) const {\n    std::ostringstream ss;\n    ss << \"ContainedSegment:\";\n    ss << \" from (\" << basept.x << \",\" << basept.y << \")\";\n    ss << \" to (\" << localGoalPt.x << \",\" << localGoalPt.y << \")\";\n    ss << \" toward (\" << globalGoalPt.x << \",\" << globalGoalPt.y << \")\";\n    return ss.str();\n}\n\nvoid ContainedSegment::addSepCoForPtAndNode(Avoid::Point &pt, Node_SP &node, dimensions nodeDims, SepCoSet &sepcos, Node_SP &treeBox) {\n\n    // Set a very small extra gap, just to ensure that boxes do not wind up being regarded\n    // as overlapping when only by a hair's breadth (and thereby engendering further expansion\n    // constraints that really aren't needed).\n    double extraGap = 1;\n\n    // Get root node of tree placement.\n    Node_SP root = tp->getRootNode();\n    // Determine dimension.\n    bool isVertGoalSeg = Compass::isVerticalCard(globalGoalSeg.direc);\n    // Determine on which side of the segment the given point lies.\n    int sign = localGoalSeg.ptOnWhichSide(pt);\n    // In all cases where we need this utility method, it is appropriate to simply do nothing\n    // in the case where the given pt turns out to lie on neither side of this segment (i.e. to\n    // lie in-line with it).\n    if (sign == 0) return;\n\n    // Determine the left and right nodes for the sep co.\n    Node_SP left  = sign == -1 ? node : root,\n            right = sign == -1 ? root : node;\n    // Compute the gap for the sep co.\n    Point treeCentre = treeBox->getCentre();\n    dimensions treeDims = treeBox->getDimensions();\n\n    double gap = isVertGoalSeg ? nodeDims.first/2.0  + treeDims.first/2.0  + sign*treeCentre.x :\n                          nodeDims.second/2.0 + treeDims.second/2.0 + sign*treeCentre.y;\n    gap += extraGap;\n\n    // Note: Due to sign term, the gap may be negative. However, we do want to support that case, and\n    // our SepCo class does support it.\n    SepCo_SP sc = std::make_shared<SepCo>(sepDim, left, right, gap);\n    sepcos.insert(sc);\n}\n\nbool ContainedSegment::makeRoomForTreeNode(ProjSeq_SP ps0, bool doProject) {\n    // We build a set of SepCos, add it to the projection sequence, and attempt to project.\n    SepCoSet sepcos;\n    // Get the tree box and root node.\n    Node_SP treeBox = tp->buildTreeBox(padding),\n            root = tp->getRootNode();\n    // We use open intervals.\n    bool openInterval = true;\n\n    // Phase 1: Sides\n    // Here we set up constraints between the root node and any of the Face's Sides that lie\n    // opposite the desired treebox.\n\n    // As we work, we build the set of all TreePlacements attached to any Sides with which we set up any\n    // constraints. This is in order to then remove these from consideration in Phase 2 below.\n    // Otherwise conflicting constraints may accidentally be set up.\n    std::set<TreePlacement_SP> sideTps;\n\n    // We can only work with obstacles that lie opposite the /local/ goal seg.\n    Sides sides = tp->getFace().getAllSidesOppositeSegment(localGoalSeg, openInterval);\n\n    for (Side_SP S : sides) {\n        // If the root node lies on the Side, then we need no constraints.\n        if (S->containsNode(root->id())) continue;\n        // Check any Node on the Side.\n        Node_SP someNode = S->firstNode();\n        // If it is aligned with the root node in the same dimension as the Side itself is aligned,\n        // then we cannot (and need not) set any constraints with this Side.\n        vpsc::Dim algnDim = S->getAlignmentDimension();\n        if (tp->rootIsAlignedWith(algnDim, someNode->id())) continue;\n\n        // We need to know the maximum thickness of the Side opposite the longer of the two segments,\n        // which is always the global goal segment.\n        double sideHalfWidth = S->halfWidthOppositeSegment(globalGoalSeg);\n        // If the Side is actually in-line with this segment, then we can't set up any constraint.\n        // This is okay, since a ContainedSegment in the other dimension can handle any overlap with\n        // such a Side.\n        if (sideHalfWidth == -1) continue;\n        // Otherwise get a point opposite the segment.\n        Point pt = S->getFirstPtOppositeSegment(localGoalSeg);\n\n        // We will set up a constraint with this Side by setting up a constraint between the\n        // TreePlacement's root node, and the random node ('someNode') we got earlier.\n        // But we need to set dummy dimensions for that node, so that its relevant half-dimension\n        // winds up being that of the Side in question, which we computed above.\n        double w = 2*sideHalfWidth;\n        dimensions dummyDims = {w, w};\n        // And now can add a separation constraint.\n        addSepCoForPtAndNode(pt, someNode, dummyDims, sepcos, treeBox);\n        // Having set up a constraint with this Side, we must remove all its attached TreePlacements\n        // from separate consideration.\n        const std::set<TreePlacement_SP> &tps = S->getTreePlacements();\n        sideTps.insert(tps.cbegin(), tps.cend());\n    }\n\n    // Phase 2: Tree boxes\n    // Here we set up constraints between the root node and any existing treeboxes in the Face,\n    // if they are not attached to any of the Sides we have already considered.\n\n    // Begin by getting the set of all TreePlacements in the Face.\n    std::set<TreePlacement_SP> allTps = tp->getFace().getSetOfAllTreePlacements();\n    // Subtract those that were attached to Sides with which we set up constraints.\n    std::set<TreePlacement_SP> tps;\n    std::set_difference(allTps.begin(), allTps.end(), sideTps.begin(), sideTps.end(), std::inserter(tps, tps.end()));\n    for (TreePlacement_SP tp1 : tps) {\n        // Determine whether the *unpadded* tree box lies opposite the local goal segment, and\n        // if so obtain some point that lies opposite.\n        Point pt;\n        double noPadding = 0;\n        bool liesOpposite = tp1->somePointOppositeSegment(localGoalSeg, pt, noPadding, openInterval);\n        // If it does not lie opposite the segment, then continue to the next case.\n        if (!liesOpposite) continue;\n        // Otherwise proceed.\n        // For computing the gap for the sepco, use the actual box node, which (a) should have been computed by\n        // now, and which (b) *does* include padding.\n        Node_SP nbrTreeBox = tp1->getBoxNode();\n        addSepCoForPtAndNode(pt, nbrTreeBox, nbrTreeBox->getDimensions(), sepcos, treeBox);\n    }\n\n    // Finally extend the projection sequence. Attempt to project if so requested; otherwise, simply\n    // assume feasible.\n    ps0->addProjection(sepcos, sepDim);\n    bool feasible = true;\n    if (doProject) {\n        feasible = tp->getFace().applyProjSeq(*ps0);\n    }\n    return feasible;\n}\n"
  },
  {
    "path": "cola/libdialect/expansion.h",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libdialect - A library for computing DiAlEcT layouts:\n *                 D = Decompose/Distribute\n *                 A = Arrange\n *                 E = Expand/Emend\n *                 T = Transform\n *\n * Copyright (C) 2018  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n * Author(s):   Steve Kieffer   <http://skieffer.info>\n*/\n\n#ifndef DIALECT_EXPANSION_H\n#define DIALECT_EXPANSION_H\n\n#include <memory>\n#include <map>\n#include <string>\n#include <deque>\n\n#include \"libvpsc/rectangle.h\"\n#include \"libavoid/geomtypes.h\"\n\n#include \"libdialect/commontypes.h\"\n#include \"libdialect/treeplacement.h\"\n#include \"libdialect/ortho.h\"\n\nnamespace dialect {\n\nclass ExpansionGoal;\n\n/**\n * @brief The ExpansionManager class\n *\n    An instance of this class is meant to manage the generation of nonoverlap\n    constraints, when making room for a TreePlacement in a Face of a planar\n    orthogonal layout.\n\n    The idea is that we choose strategic \"goal points\" in the face, and compute\n    the line segments from the tree's attachment point to these goal points.\n    We can then use these line segments to determine the nonoverlap constraints\n    by pushing everything on one side of the line to one side, and everything\n    on the other side of the line to the other side.\n\n    A TreePlacement has both a \"placement direction\" dp, and a \"growth\n    direction\" dg. The former is any compass point, cardinal or ordinal, while\n    the latter must be cardinal. Expansion constraints are said to be \"axial\"\n    when they operate in the dimension to which dg belongs, and to be\n    \"transverse\" when they operate in the complementary dimension.\n    For example if dg is NORTH, then SepCo's in the y-dim are axial,\n    while those in the x-dim are transverse.\n\n    Similarly, goal points are called axial or transverse according to the type\n    of constraints they generate. If the placement direction dp is cardinal, then\n    there is one transverse goal point, and there are two axial goal poitns.\n    If the placement direction dp is ordinal, there there is one transverse and\n    one axial goal point.\n\n    For example, for a north-growing tree that was also placed north, see the\n    figure on the left, below. Rooted at the \"o\", the three goal points are marked\n    by \"a\", \"b\", \"c\". Goal point \"a\" is the one transverse goal point, since it will\n    generate expansion constraints operating left and right, i.e. in the x-dimension.\n    Meanwhile points \"b\" and \"c\" are the two axial goal points, since they will\n    generate expansion constraints operating up and down, i.e. in the y-dimension.\n\n                ---a---         a-------\n               |      |         |      |\n               |      |         |      |\n               c---o--b         o------b\n\n    The figure on the right shows the two goal points for a north-growing tree that\n    was placed north-east. Here there is one transverse goal point (\"a\"), and one\n    axial (\"b\").\n\n    For each goal point the ExpansionManager constructs an ExpansionGoal object,\n    which in turn uses the ContainedSegment class to generate expansion constraints.\n\n    Note: In an earlier version of HOLA (the Python version from 2015), this process\n    was much more complex, potentially considering many more goal points, spanning\n    face concavities. In those caes libavoid was used to find an orthogonal route\n    to the goal point, and the segments of the route were used to select the expansion\n    constraints. That system allowed us to consider all possible ways of expanding\n    a face. The present system is faster and simpler, and is deemed to produce\n    results of equal quality.\n */\nclass ExpansionManager {\npublic:\n    //! @brief  Standard constructor.\n    //! @param[in] tp  The TreePlacement for which expansion is required.\n    //! @param[in] primaryDim  The dimension in which to expand first.\n    //! @param[in] padding  Optional padding to add to tree boxes involved in the\n    //!                     expansion process. Leave negative for automatic setting\n    //!                     equal to one quarter of the ideal edge length of the\n    //!                     underlying graph.\n    ExpansionManager(TreePlacement_SP tp, vpsc::Dim primaryDim=vpsc::HORIZONTAL, double padding=-1);\n\n    //! @brief  Check whether a given dimension is axial w.r.t. this manager's placement.\n    bool isAxial(vpsc::Dim dim) { return dim == m_axialDim; }\n\n    //! @brief  Check whether a given dimension is transverse w.r.t. this manager's placement.\n    bool isTransverse(vpsc::Dim dim) { return dim == m_transDim; }\n\n    //! @brief  Estimate the cost of expanding.\n    double estimateCost(void) const;\n\n    //! @brief  Estimate the cost of expanding in each dimension.\n    //!         This method looks at the length of contained segments, and reports the\n    //!         sum of shortfalls.\n    std::map<vpsc::Dim, double> estimateCostByDimension(void) const;\n\n    //! @brief  Estimate the cost of expanding in each dimension.\n    //!         This method computes the initial separation constraints in each dimension and\n    //!         reports the sum of their violations.\n    std::map<vpsc::Dim, double> estimateCostByDimension2(void) const;\n\n    //! @brief  Estimate the cost of expanding in each cardinal direction.\n    std::map<CardinalDir, double> estimateCostByDirection(void) const;\n\n    //! @brief  Access the goals.\n    ExpansionGoals getGoals(void) { return m_goals; }\n\n    //! @brief  Extend a given projection sequence with those projections necessary\n    //!         to achieve all expansion goals of this manager.\n    //! @param[in] ps0  The given ProjSeq.\n    //! @return A new ProjSeq that extends the given one, or nullptr if any attempted\n    //!     projection is impossible.\n    ProjSeq_SP extendProjSeq(ProjSeq_SP ps0);\n\nprivate:\n\n    ExpansionGoal_SP addGoalInDirec(CardinalDir dir);\n    void computeGoals(vpsc::Dim dim);\n\n    TreePlacement_SP m_tp;\n    vpsc::Dim m_primaryDim;\n    double m_padding;\n    //! The axial dimension:\n    vpsc::Dim m_axialDim;\n    //! The transverse dimension:\n    vpsc::Dim m_transDim;\n    //! A counter, to enumerate goals:\n    unsigned m_goalCounter = 0;\n    //! Keep vector of goals:\n    ExpansionGoals m_goals;\n    ExpansionGoals m_primaryDimGoals;\n    ExpansionGoals m_secondaryDimGoals;\n};\n\nstruct ContainedSegment;\ntypedef std::shared_ptr<ContainedSegment> ContainedSegment_SP;\n\n/**\n * @brief The ExpansionGoal class\n *\n * Manages a single expansion goal point, as utilised by the ExpansionManager class.\n *\n */\nclass ExpansionGoal {\npublic:\n\n    //! @brief Standard constructor.\n    //!\n    //! @param[in] id  An ID for the goal (unique for the manager).\n    //! @param[in] tp  The TreePlacement in question.\n    //! @param[in] direc  The direction of the goal, from base point to goal point.\n    //! @param[in] padding  Padding for tree boxes.\n    ExpansionGoal(unsigned id, TreePlacement_SP tp, CardinalDir direc, double padding)\n        : m_id(id), m_tp(tp), m_direc(direc), m_padding(padding) {\n        // The generated SepCos will operate at right angles to the direction of this\n        // goal, i.e. in the constant dimension of this goal's direction.\n        m_dim = Compass::constDim.at(m_direc);\n    }\n\n    //! @brief  Compute the contained segment for this goal.\n    //!\n    //! @param[in] ignoreCollateralTreeBoxes  This is useful when we are interested in\n    //! computing estimates of expansion costs. At such times, we want to guess how long\n    //! the contained segment might be once any collateral tree boxes have been moved away\n    //! (but without actually doing the moving).\n    ContainedSegment_SP computeContainedSegment(bool ignoreCollateralTreeBoxes=false);\n\n    //! @brief  Get the direction of the goal.\n    CardinalDir getDirec(void) const { return m_direc; }\n\n    //! @brief  Try to expand, and work recursively, attempting all remaining goals.\n    //! @param[in] ps0  The projection sequence to be extended.\n    //! @param[in] remainingGoals  Deque of ExpansionGoals on which to recurse.\n    //! @return  The resulting projection sequence, in which all expansion goals\n    //!          have been achieved, or nullptr if any attempted projection is impossible.\n    ProjSeq_SP tryExpansionRec(ProjSeq_SP ps0, std::deque<ExpansionGoal_SP> &remainingGoals);\n\nprivate:\n\n    //! @brief  Compute the endpoints of the goal segment.\n    //! @param[out] p0  The base point.\n    //! @param[out] p1  The goal point.\n    void computeGoalSegmentEndpoints(Avoid::Point &p0, Avoid::Point &p1);\n\n    unsigned m_id;\n    TreePlacement_SP m_tp;\n    //! The direction from base point to goal point:\n    CardinalDir m_direc;\n    double m_padding;\n    //! The dimension in which the generated SepCos are to operate:\n    vpsc::Dim m_dim;\n};\n\nstruct ContainedSegment {\n\n    //! @brief  Standard constructor.\n    ContainedSegment(unsigned goalID, Avoid::Point basept, Avoid::Point localGoalPt, Avoid::Point globalGoalPt,\n                     double padding, TreePlacement_SP tp, vpsc::Dim sepDim);\n\n    //! @brief  Report the \"shortage\", i.e. the extent to which the global goal\n    //!         segment exceeds the local in length. Returns zero if this value\n    //!         would be negative.\n    double measureShortage(void) const;\n\n    //! @brief  Write a string representation.\n    std::string toString(void) const;\n\n    //! @brief  Perform expansion, to make room for the tree node, extending a given\n    //!         projection sequence with the projections performed.\n    //! @param[in] ps0  The ProjSeq to be extended.\n    //! @param[in] doProject  Set false in order to do a 'trial' in which you only extend the given\n    //!                       ProjSeq, but do not actually project.\n    //! @return  false if any attempted projection is impossible; else true\n    bool makeRoomForTreeNode(ProjSeq_SP ps0, bool doProject = true);\n\n    //! Note the ID of the associated expansion goal:\n    unsigned goalID;\n    //! start of goal segment:\n    Avoid::Point basept;\n    //! end of goal segment:\n    Avoid::Point localGoalPt;\n    //! point at end of segment representing space needed by tree node:\n    Avoid::Point globalGoalPt;\n    //! padding for tree boxes:\n    double padding;\n    //! the TreePlacement in question:\n    TreePlacement_SP tp;\n    //! the dimension in which the generated SepCos are to operate:\n    vpsc::Dim sepDim;\n    //! LineSegment representing the local goal segment:\n    LineSegment localGoalSeg;\n    //! LineSegment representing the global goal segment:\n    LineSegment globalGoalSeg;\n\nprivate:\n    //! @brief  Utility method for building sepcos while making room for tree node:\n    //!\n    //! In all cases we wish to build a sep co between the tree box for our tree placement, and some other node.\n    //! However we may need to set up dummy dimensions for that node, and we need a point to tell us which node\n    //! is on which side.\n    //!\n    //! @param[in] pt  The point we use to determine which node is on which side.\n    //! @param[in] node  The node to be separated from the tree box.\n    //! @param[in] nodeDims  The dummy dimensions for the node.\n    //! @param[out] sepcos  The place where the generated sep co is to be recorded.\n    //! @param[in] treeBox  The tree box for our tree placement.\n    //!\n    //! @note If the point pt lies on the line of which this ContainedSegment is a subset, then we simply do nothing.\n    void addSepCoForPtAndNode(Avoid::Point &pt, Node_SP &node, dimensions nodeDims, SepCoSet &sepcos, Node_SP &treeBox);\n};\n\n\n} // namespace dialect\n\n#endif // DIALECT_EXPANSION_H\n"
  },
  {
    "path": "cola/libdialect/faces.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libdialect - A library for computing DiAlEcT layouts:\n *                 D = Decompose/Distribute\n *                 A = Arrange\n *                 E = Expand/Emend\n *                 T = Transform\n *\n * Copyright (C) 2018  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n * Author(s):   Steve Kieffer   <http://skieffer.info>\n*/\n\n#include <list>\n#include <utility>\n#include <map>\n#include <vector>\n#include <memory>\n#include <limits>\n#include <string>\n#include <algorithm>\n#include <sstream>\n#include <set>\n#include <stdexcept>\n\n#include \"libavoid/geomtypes.h\"\n#include \"libvpsc/assertions.h\"\n#include \"libvpsc/rectangle.h\"\n\n#include \"libdialect/ortho.h\"\n#include \"libdialect/graphs.h\"\n#include \"libdialect/constraints.h\"\n#include \"libdialect/faces.h\"\n#include \"libdialect/treeplacement.h\"\n#include \"libdialect/expansion.h\"\n\nusing namespace dialect;\n\nusing std::vector;\n\nusing Avoid::Point;\n\nid_type Face::nextID = 0;\n\nFaceSet::FaceSet(Graph_SP &G)\n    : m_graph(G)\n{\n    // Compute the faces and identify the external one.\n    computeFaces();\n    identifyExternalFace();\n    // Index the faces by the IDs of the Nodes that belong to them.\n    for (Face_SP face : m_faces) {\n        for (Node_SP node : face->getNodeSeq()) {\n            m_facesByMemberNodeId[node->id()].insert(face);\n        }\n    }\n    // Compute aligned sets.\n    m_graph->getSepMatrix().getAlignedSets(m_hSets, m_vSets);\n}\n\n//! Face traversal code adapted from\n//!   http://mathoverflow.net/questions/23811/reporting-all-faces-in-a-planar-graph\n//! which in turn is an adaptation of a routine from SAGE:\n//!   http://www.sagemath.org/doc/reference/graphs/sage/graphs/generic_graph.html#sage.graphs.generic_graph.GenericGraph.faces\n//! \n//! As per discussion at the Mathoverflow page, it is a pretty simple idea:\n//!\n//!     \"I'll assume the graph is connected, and that you have the clockwise or\n//! counterclockwise ordering of the edges around each vertex. Then it's easy,\n//! given a directed edge e, to walk around the face whose counterclockwise boundary\n//! contains e. So make a list of all directed edges (i. e., two copies of each\n//! undirected edge). Pick one directed edge, walk counterclockwise around its face,\n//! and cross off all the directed edges you traverse. That's one face. Pick a\n//! directed edge you haven't crossed off yet and walk around its face the same way.\n//! Keep doing that until you've crossed off all of the edges. (Note that the\n//! \"counterclockwise\" boundary of the exterior unbounded face actually goes clockwise\n//! around the outside of the graph.)\"\nvoid FaceSet::computeFaces(void) {\n    // Build a list of directed edges, represented as ordered pairs of node\n    // IDs, with two directed edges per edge of the given graph G, one in\n    // each direction.\n    std::list<IdPair> edgeList;\n    for (auto pair : m_graph->getEdgeLookup()) {\n        Edge_SP &e = pair.second;\n        id_type s = e->getSourceEnd()->id(),\n                t = e->getTargetEnd()->id();\n        edgeList.push_back({s, t});\n        edgeList.push_back({t, s});\n\n    }\n    // Build the embedding, i.e. a map that looks like:\n    //     v1:[v2,v3], v2:[v1], v3:[v1]\n    // giving the clockwise ordering of neighbors at each vertex.\n    // (Here the vi are IDs of nodes.)\n    std::map<id_type, vector<id_type>> embedding;\n    for (auto pair : m_graph->getNodeLookup()) {\n        id_type uID = pair.first;\n        Node_SP &u = pair.second;\n        Nodes nbrs = u->getNeighboursCwCyclic();\n        vector<id_type> nbrIds;\n        nbrIds.reserve(nbrs.size());\n        for (Node_SP v : nbrs) nbrIds.push_back(v->id());\n        embedding[uID] = nbrIds;\n    }\n    // Initialise the first path.\n    vector<IdPair> path;\n    path.push_back(edgeList.front());\n    edgeList.pop_front();\n    // Trace the faces.\n    while (!edgeList.empty()) {\n        // Get the neighbour IDs of the target node of the final edge in the path.\n        IdPair finalEdge = path.back();\n        vector<id_type> nbrIds = embedding.at(finalEdge.second);\n        // The source node of the final edge is among these neighbours.\n        // Find its index in the clockwise order of neighbours, and decrement this\n        // (mod number of neighbours) in order to traverse the face in clockwise order.\n        size_t n = nbrIds.size(), i0 = n;\n        // Check: every node in the face should have at least two neighbours.\n        COLA_ASSERT(n >= 2);\n        for (size_t i = 0; i < n; ++i) {\n            if (nbrIds[i] == finalEdge.first) {\n                i0 = i;\n                break;\n            }\n        }\n        COLA_ASSERT(i0 != n);\n        // Since size_t can't be negative, we must add (n-1) rather that subtracting 1,\n        // which would fail in the case i0 == 0. Then we can reduce mod n.\n        size_t i1 = (i0 + n - 1) % n;\n        id_type nextNodeId = nbrIds[i1];\n        // For the next edge in the path.\n        IdPair nextEdge{finalEdge.second, nextNodeId};\n        // If it equals the first edge in the path, then we have finished traversing this face.\n        if (nextEdge == path.front()) {\n            // In this case it is time to build the Face, initialise it with the path,\n            // and record it.\n            Face_SP face = std::make_shared<Face>(m_graph);\n            face->initWithEdgeSeq(path);\n            m_faces.push_back(face);\n            // Then get the next path started.\n            path.clear();\n            path.push_back(edgeList.front());\n            edgeList.pop_front();\n        }\n        // Otherwise, add it to the current path, remove it from the list of remaining\n        // edges, and continue.\n        else {\n            path.push_back(nextEdge);\n            edgeList.remove(nextEdge);\n        }\n    }\n    // After exiting the main loop, we may have a nonempty path. In that case, build\n    // and record the last face based on it.\n    Face_SP face = std::make_shared<Face>(m_graph);\n    face->initWithEdgeSeq(path);\n    m_faces.push_back(face);\n}\n\nvoid FaceSet::identifyExternalFace(void) {\n    // We identify the external face and record it. We also set a flag in the external face\n    // to mark it as such.\n    // NB: We assume the graph is 4-planar orthogonal.\n    // Begin by grabbing any Node u of maximal x-coord.\n    Node_SP u = nullptr;\n    double max_x = std::numeric_limits<double>::min();\n    for (auto pair : m_graph->getNodeLookup()) {\n        Node_SP &v = pair.second;\n        Point p = v->getCentre();\n        if (p.x > max_x) {\n            u = v;\n            max_x = p.x;\n        }\n    }\n    COLA_ASSERT(u != nullptr);\n    // The node u cannot have any neighbour to the east. Therefore the node v following\n    // u in the clockwise traversal of the exterior face (which, remember, looks anticlockwise,\n    // except from the point of view of the point at infinity on the Riemann sphere) must be\n    // that which comes first in the anticlockwise ordering of u's neighbours starting with north.\n    // Since the degree of u is at least two, and it can have at most one south neighbour, it\n    // must have at least one neighbour among north and west. Therefore v is u's north neighbour\n    // if it has one, else u's west neighbour.\n    Node_SP west_nbr = nullptr,\n            north_nbr = nullptr;\n    for (Node_SP w : u->getNeighbours()) {\n        CardinalDir d = Compass::cardinalDirection(u, w);\n        if (d == CardinalDir::NORTH) {\n            north_nbr = w;\n            break;\n        } else if (d == CardinalDir::WEST) {\n            west_nbr = w;\n        }\n    }\n    Node_SP v = north_nbr == nullptr ? west_nbr : north_nbr;\n    COLA_ASSERT(v != nullptr);\n    // The external face is then the unique one containing the \"signature\" of u's ID followed\n    // by v's ID, in the clockwise traversal of its Nodes (considered cyclically).\n    vector<id_type> signature{u->id(), v->id()};\n    for (Face_SP F : m_faces) {\n        if (F->containsNodeIdSeq(signature)) {\n            F->m_isExternal = true;\n            m_externalFace = F;\n            break;\n        }\n    }\n}\n\nTreePlacements FaceSet::listAllPossibleTreePlacements(Tree_SP tree) {\n    // First find the \"core root\", i.e. the Node in the underlying Graph where\n    // the tree is supposed to reattach.\n    Node_SP coreRoot = m_graph->getNode(tree->getRootNodeID());\n    // Now get the vector of possible Faces, i.e. those Faces that contain this Node.\n    std::set<Face_SP> possibleFaces = m_facesByMemberNodeId.at(coreRoot->id());\n    // We can then ask each Face to generate all possible placements into it, and compile\n    // the results.\n    TreePlacements tps;\n    for (Face_SP F : possibleFaces) F->listAllPossibleTreePlacements(tps, tree, coreRoot);\n    // Inform each TreePlacement about the nodes that are aligned with its root node.\n    for (TreePlacement_SP tp : tps) {\n        Node_SP r = tp->getRootNode();\n        tp->setRootAligns(vpsc::XDIM, m_hSets.at(r->id()));\n        tp->setRootAligns(vpsc::YDIM, m_vSets.at(r->id()));\n    }\n    return tps;\n}\n\nTreePlacements FaceSet::getAllTreePlacements(void) {\n    TreePlacements tps;\n    for (Face_SP F : m_faces) F->getAllTreePlacements(tps);\n    return tps;\n}\n\nstd::map<CardinalDir, size_t> FaceSet::getNumTreesByGrowthDir(bool scaleBySize) const {\n    std::map<CardinalDir, size_t> counts;\n    for (Face_SP F : m_faces) F->getNumTreesByGrowthDir(counts, scaleBySize);\n    return counts;\n}\n\nstd::string Face::toString(void) const {\n    std::ostringstream ss;\n    ss << \"Face (\" << (m_isExternal ? \"ext\" : \"int\") << \"):\";\n    for (Node_SP u : m_nodeSeq) ss << \" \" << u->id();\n    return ss.str();\n}\n\nvoid Face::listAllPossibleTreePlacements(TreePlacements &tps, Tree_SP tree, Node_SP root) {\n    CompassDirs dirs = inwardDirsAvailable(root);\n    for (CompassDir dp : dirs) {\n        // If it is a cardinal placement direction, then the growth direction can only be the same.\n        // On the other hand, if it is an ordinal placement direction, then there are two growth directions\n        // to be considered; namely, the two cardinal components of the ordinal direction.\n        // Thus, for all directions, the Compass::cardinalComponents function returns exactly the vector\n        // of growth directions we wish to consider.\n        CardinalDirs dgs = Compass::cardinalComponents(dp);\n        for (CardinalDir dg : dgs) {\n            tps.push_back(std::make_shared<TreePlacement>(tree, *this, root, dp, dg));\n            // If the tree is not symmetrical, then we also consider the flipped version.\n            if (!tree->isSymmetrical()) tps.push_back(std::make_shared<TreePlacement>(tree, *this, root, dp, dg, true));\n        }\n    }\n}\n\nCompassDirs Face::inwardDirsAvailable(Node_SP node) {\n    // Prepare return value.\n    CompassDirs available;\n    // We will make use of the doubled anticlockwise compass.\n    const CompassDirs &allDirs = Compass::acwAllDoubled;\n    // The inward directions are identified by examining the \"neighbour pairs\" for the given Node.\n    // For each pair, we find the inward directions between them.\n    vector<std::pair<Node_SP, Node_SP>> nbrPairs = m_nbrPairs.at(node->id());\n    for (auto p : nbrPairs) {\n        Node_SP prev = p.first,\n                next = p.second;\n        /**\n         * Because of the way the faces are traced out, swinging from the previous\n         * node to the next one sweeps out an area of the /inside/ of this face\n         * when you go /anticlockwise/.\n         *\n         * Therefore if d0 is the compass direction from node to prev, and if d1\n         * is that from node to next, then the available directions are all those\n         * strictly between d0 and d1 /in the anticlockwise direction/.\n         *\n         * For example, if node --> prev points South while node --> next points\n         * West, then both East and North are available.\n         * But if node --> prev points East while node --> next points North, then\n         * only NE is available.\n         */\n        CompassDir d0 = (CompassDir) Compass::cardinalDirection(node, prev),\n                   d1 = (CompassDir) Compass::cardinalDirection(node, next);\n        size_t i = 0;\n        // Advance to direction d0:\n        while (allDirs[i] != d0) ++i;\n        // Advance one step beyond it:\n        ++i;\n        // Record the intervening directions.\n        while (allDirs[i] != d1) {\n            available.push_back(allDirs[i]);\n            ++i;\n        }\n    }\n    return available;\n}\n\n\nvoid Face::initWithEdgeSeq(const vector<IdPair> &edges) {\n    // Record the number of Nodes.\n    m_n = edges.size();\n    // Get the Nodes from the Graph.\n    m_nodeSeq.reserve(m_n);\n    for (IdPair p : edges) {\n        m_nodeSeq.push_back(m_graph->getNode(p.first));\n    }\n    computeNbrPairs();\n    computeSides();\n    buildNexes();\n}\n\nvoid Face::computeNbrPairs(void) {\n    // First pass: identify the indices at which each node occurs in the nodeseq.\n    std::map<id_type, vector<size_t>> indices;\n    for (size_t i = 0; i < m_n; ++i) {\n        Node_SP &u = m_nodeSeq[i];\n        indices[u->id()].push_back(i);\n    }\n    // Second pass: assemble the neighbour pairs.\n    Nodes &ns = m_nodeSeq;\n    size_t n = m_n;\n    for (Node_SP u : ns) {\n        vector<std::pair<Node_SP, Node_SP>> pairs;\n        vector<size_t> indices_for_node_u = indices[u->id()];\n        pairs.reserve(indices_for_node_u.size());\n        for (size_t i : indices_for_node_u) {\n            pairs.push_back({ns[(i+n-1)%n], ns[(i+1)%n]});\n        }\n        m_nbrPairs.insert({u->id(), pairs});\n    }\n}\n\nvoid Face::computeSides(void) {\n    // Get index of first bend.\n    size_t i0 = findIndexOfFirstBend();\n    // Prepare a node sequence starting from node i0, then\n    // cycling back around to i0 and including node i0 /again/.\n    // Then we know that a Side begins at the start of this sequence,\n    // and a Side ends at the end of it, and there is no Side between\n    // the last and first one.\n    Nodes ns;\n    ns.reserve(m_n + 1);\n    for (size_t i = i0; i < m_n; ++i) ns.push_back(m_nodeSeq[i]);\n    for (size_t i = 0; i < i0+1; ++i) ns.push_back(m_nodeSeq[i]);\n    // Initialise the loop. We will always be checking the direction from\n    // a Node u to a Node v. We start with the first two.\n    Node_SP u = ns[0], v = ns[1];\n    CardinalDir d0 = direc(u, v);\n    // We will be building the sequence of Nodes on a given Side.\n    Nodes nodesOnASide{u, v};\n    // Now consider all remaining Nodes.\n    for (size_t i = 2; i < m_n + 1; ++i) {\n        v = ns[i];\n        u = nodesOnASide.back();\n        CardinalDir d1 = direc(u, v);\n        if (d1 == d0) {\n            // Still on the same Side.\n            nodesOnASide.push_back(v);\n        } else {\n            // We're beginning a new Side.\n            // First construct and record the current one.\n            m_sides.push_back(std::make_shared<Side>(nodesOnASide, d0));\n            // Now begin the new one.\n            nodesOnASide = {u, v};\n            d0 = d1;\n        }\n    }\n    // Construct and record the final side.\n    m_sides.push_back(std::make_shared<Side>(nodesOnASide, d0));\n}\n\nvoid Face::buildNexes(void) {\n    // Build a Nexus for each Node.\n    for (Node_SP u : m_nodeSeq) m_nexesByNodeIds.insert({u->id(), std::make_shared<Nexus>(u)});\n    // Now add each Side to the Nexus for each Node it contains.\n    for (Side_SP S : m_sides) {\n        for (Node_SP v : S->getNodeSeq()) {\n            m_nexesByNodeIds.at(v->id())->addSide(S);\n        }\n    }\n}\n\nbool Face::containsNodeIdSeq(std::vector<id_type> idSeq) const {\n    if (idSeq.empty()) return true;  // vacuously true\n    id_type firstId = idSeq.front();\n    // Search for first ID.\n    size_t n = m_nodeSeq.size(), i0 = n;\n    for (size_t i = 0; i < n; ++i) {\n        const Node_SP &u = m_nodeSeq[i];\n        if (u->id() == firstId) {\n            i0 = i; break;\n        }\n    }\n    // If we didn't find the first Id, then we certainly do not have the whole sequence.\n    if (i0 == n) return false;\n    // Otherwise we check whether we have the remainder of the sequence.\n    size_t m = idSeq.size();\n    for (size_t j = 1; j < m; ++j) {\n        if (m_nodeSeq[(i0+j)%n]->id() != idSeq[j]) return false;\n    }\n    return true;\n}\n\nCardinalDir Face::direc(const Node_SP &u, const Node_SP &v) {\n    return m_graph->getSepMatrix().getCardinalDir(u->id(), v->id());\n}\n\nsize_t Face::findIndexOfFirstBend(void) {\n    // Prepare a vector of Nodes equal to our nodeSeq plus a \"wraparound\" node at each end.\n    Nodes loop(m_n + 2);\n    loop[0] = m_nodeSeq[m_n - 1];\n    loop[m_n+1] = m_nodeSeq[0];\n    auto it = ++loop.begin();\n    std::copy(m_nodeSeq.begin(), m_nodeSeq.end(), it);\n    // Now we can check for the first bend, using a sliding window of length 3.\n    for (size_t i = 0; i < m_n; ++i) {\n        Node_SP u = loop[i], v = loop[i+1], w = loop[i+2];\n        CardinalDir duv = direc(u, v),\n                    dvw = direc(v, w);\n        if (dvw != duv) return i;\n    }\n    // If we reach this point, we didn't find a bend. This should never happen, since every\n    // Face should have at least one bend.\n    COLA_ASSERT(false);\n}\n\nSides Face::getRelevantSidesForPlacement(TreePlacement_SP tp) const {\n    // Get the root node of the placement.\n    Node_SP root = tp->getRootNode();\n    // Get the Nexus representing that node.\n    Nexus_SP nexus = m_nexesByNodeIds.at(root->id());\n    // Get the intended placement direction.\n    CompassDir placementDir = tp->getPlacementDir();\n    // Ask the Nexus for the set of relevant Sides.\n    std::set<Side_SP> relevantSideSet = nexus->getNeighboursOfADirection(placementDir);\n    // We return a vector instead of a set.\n    Sides relevantSides(relevantSideSet.size());\n    std::copy(relevantSideSet.begin(), relevantSideSet.end(), relevantSides.begin());\n    return relevantSides;\n}\n\nvoid Face::insertTreeNode(TreePlacement_SP tp, double padding) {\n    // First ask the relevant Side object(s) to note the placement.\n    for (Side_SP S : getRelevantSidesForPlacement(tp)) S->addTreePlacement(tp);\n    // Now insert the tree node.\n    Node_SP treeNode = tp->buildTreeBox(padding),\n            rootNode = tp->getRootNode();\n    // The dimensions of the treeNode are already as we want them.\n    // However, its centre indicates only its displacement from the root node.\n    // We now need to translate this to absolute coordinates by adding this\n    // displacement to the coordinates of the root node.\n    Point ct = treeNode->getCentre(),\n          cr = rootNode->getCentre();\n    treeNode->setCentre(ct.x + cr.x, ct.y + cr.y);\n    // Now add the tree node to the graph.\n    m_graph->addNode(treeNode);\n    // Keep records.\n    id_type tid = treeNode->id(),\n            rid = rootNode->id();\n    m_treeNodes.insert({tid, treeNode});\n    m_treePlacementsByNodeIds[rid] = tp;\n    tp->recordBoxNode(treeNode);\n    // Constrain the tree node to sit beside the root node.\n    m_graph->getSepMatrix().addFixedRelativeSep(rid, tid, ct.x, ct.y);\n}\n\nProjSeq_SP Face::computeCollateralProjSeq(TreePlacement_SP tp, double padding) {\n    ProjSeq_SP ps = std::make_shared<ProjSeq>();\n    Sides sides = getRelevantSidesForPlacement(tp);\n    // Sanity check: should be exactly one or two relevant Sides:\n    size_t n = sides.size();\n    COLA_ASSERT(n == 1 || n == 2);\n    // Now simply extend the ProjSeq for each Side, and return the result.\n    for (Side_SP S : sides) *ps += *(S->computeCollateralProjSeq(tp, padding));\n    return ps;\n}\n\nbool Face::applyProjSeq(ProjSeq &ps) {\n    // When applying a projection sequence in order to expand a Face,\n    // we always want overlap prevention, including with aligned edges.\n    ColaOptions opts;\n    opts.preventOverlaps = true;\n    opts.solidifyAlignedEdges = true;\n    return m_graph->applyProjSeq(opts, ps);\n}\n\nProjSeq_SP Face::doCollateralExpansion(TreePlacement_SP tp, double padding) {\n    // Auto-infer padding if requested.\n    if (padding < 0) {\n        padding = m_graph->getIEL()/4.0;\n    }\n    ProjSeq_SP ps = computeCollateralProjSeq(tp, padding);\n    bool okay = applyProjSeq(*ps);\n    if (!okay) throw std::runtime_error(\"Infeasible collateral tree sep\");\n    return ps;\n}\n\nvoid Face::buildBdrySegsFacingOneDir(CardinalDir facingDir,\n                                     LineSegments &closedSegs, LineSegments &openSegs,\n                                     TreePlacement_SP ignoreTP) {\n\n    // Since a node may occur more than once in the traversal of a face, we keep\n    // a set of visited IDs.\n    std::set<id_type> visitedNodeIds;\n    // Are we going to be ignoring any tree boxes?\n    std::set<id_type> ignoreTreeBoxNodeIds;\n    if (ignoreTP != nullptr) {\n        Sides sides = getRelevantSidesForPlacement(ignoreTP);\n        for (Side_SP S : sides) {\n            for (Node_SP u : S->getNodeSeq()) {\n                ignoreTreeBoxNodeIds.insert(u->id());\n            }\n        }\n    }\n    // Begin building segments.\n    // Iterate over all Nodes in the Face.\n    for (size_t i = 0; i < m_n; ++i) {\n        // Grab next node, and the one following it, cyclically.\n        Node_SP u = m_nodeSeq[i],\n                v = m_nodeSeq[(i+1)%m_n];\n        // Consider the Edge from u to v.\n        // If it's perpendicular to the facing direction...\n        CardinalDir outdir = direc(u, v);\n        if (Compass::arePerpendicular(outdir, facingDir)) {\n            // ...then build a closed interval for it.\n            Point p0 = u->getBoundaryCompassPt((CompassDir)outdir),\n                  p1 = v->getBoundaryCompassPt((CompassDir)Compass::cardFlip(outdir));\n            closedSegs.push_back(std::make_shared<LineSegment>(p0, p1));\n        }\n        // Has node u been visited yet?\n        id_type uid = u->id();\n        if (visitedNodeIds.find(uid) == visitedNodeIds.end()) {\n            // If not then build an open interval for the facing side of the node box.\n            BoundingBox b = u->getBoundingBox();\n            openSegs.push_back(b.buildSideSegment(facingDir));\n            // If a tree box has been placed here, build an open interval for its facing side\n            // (unless we're supposed to ignore this one).\n            TreePlacement_SP tp = m_treePlacementsByNodeIds[uid];\n            if (tp != nullptr && ignoreTreeBoxNodeIds.find(uid) == ignoreTreeBoxNodeIds.end()) {\n                // We use *unpadded* tree boxes when considering where the boundary lies.\n                double padding = 0;\n                Node_SP treeBox = tp->buildTreeBox(padding);\n                // Translate relative to root node.\n                Point c = u->getCentre();\n                treeBox->translate(c.x, c.y);\n                // Get box and build segment.\n                BoundingBox b2 = treeBox->getBoundingBox();\n                openSegs.push_back(b2.buildSideSegment(facingDir));\n            }\n            // Note node u as visited.\n            visitedNodeIds.insert(uid);\n        }\n    }\n}\n\nProjSeq_SP Face::buildBestProjSeq(TreePlacement_SP tp, double padding,\n                                  bool doCostlierDimensionFirst, ExpansionEstimateMethod estimateMethod) {\n    // Save initial node positions.\n    m_graph->pushNodePositions();\n    // Start by removing any overlaps with collateral nodes.\n    ProjSeq_SP ps0 = doCollateralExpansion(tp, padding);\n    // Choose primary expansion dimension.\n    ExpansionManager em(tp, vpsc::XDIM, padding);\n    std::map<vpsc::Dim, double> costs;\n    switch(estimateMethod) {\n    case ExpansionEstimateMethod::SPACE:\n        costs = em.estimateCostByDimension();\n        break;\n    case ExpansionEstimateMethod::CONSTRAINTS:\n        costs = em.estimateCostByDimension2();\n        break;\n    }\n    double xEst = costs[vpsc::XDIM],\n           yEst = costs[vpsc::YDIM];\n    vpsc::Dim dim;\n    if (doCostlierDimensionFirst) {\n        dim = xEst > yEst ? vpsc::XDIM : vpsc::YDIM;\n    } else {\n        dim = xEst > yEst ? vpsc::YDIM : vpsc::XDIM;\n    }\n    // Expand.\n    ExpansionManager em2(tp, dim, padding);\n    ProjSeq_SP ps1 = em2.extendProjSeq(ps0);\n    if (ps1 == nullptr) {\n        // First try failed. Try again, with the other dimension as primary.\n        ExpansionManager em3(tp, vpsc::conjugate(dim), padding);\n        m_graph->popNodePositions();\n        m_graph->pushNodePositions();\n        // Can reuse `ps0`, since `ExpansionGoal::tryExpansionRec()` works\n        // with a fresh copy of it, leaving it unaltered.\n        ps1 = em3.extendProjSeq(ps0);\n    }\n    // Restore node positions and return.\n    m_graph->popNodePositions();\n    return ps1;\n}\n\nSides Face::getAllSidesOppositeSegment(LineSegment &seg, bool openInterval) const {\n    Sides sidesOpp(m_sides.size());\n    auto it = std::copy_if(m_sides.begin(), m_sides.end(), sidesOpp.begin(), [&seg, openInterval](const Side_SP &S)->bool {\n        return S->liesOppositeSegment(seg, openInterval);\n    });\n    sidesOpp.resize(it-sidesOpp.begin());\n    return sidesOpp;\n}\n\nTreePlacements Face::getAllTreePlacements(void) const {\n    TreePlacements tps;\n    tps.reserve(m_treePlacementsByNodeIds.size());\n    for (auto p : m_treePlacementsByNodeIds) {\n        TreePlacement_SP tp = p.second;\n        if (tp != nullptr) tps.push_back(tp);\n    }\n    return tps;\n}\n\nstd::set<TreePlacement_SP> Face::getSetOfAllTreePlacements(void) const {\n    std::set<TreePlacement_SP> tps;\n    for (auto p : m_treePlacementsByNodeIds) {\n        TreePlacement_SP tp = p.second;\n        if (tp != nullptr) tps.insert(tp);\n    }\n    return tps;\n}\n\nvoid Face::getAllTreePlacements(TreePlacements &tps) const {\n    for (auto p : m_treePlacementsByNodeIds) {\n        TreePlacement_SP tp = p.second;\n        if (tp != nullptr) tps.push_back(tp);\n    }\n}\n\nvoid Face::getNumTreesByGrowthDir(std::map<CardinalDir, size_t> &counts, bool scaleBySize) const {\n    TreePlacements tps = getAllTreePlacements();\n    for (auto tp : tps) {\n        CardinalDir dg = tp->getGrowthDir();\n        counts[dg] += scaleBySize ? tp->size() : 1;\n    }\n}\n"
  },
  {
    "path": "cola/libdialect/faces.h",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libdialect - A library for computing DiAlEcT layouts:\n *                 D = Decompose/Distribute\n *                 A = Arrange\n *                 E = Expand/Emend\n *                 T = Transform\n *\n * Copyright (C) 2018  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n * Author(s):   Steve Kieffer   <http://skieffer.info>\n*/\n\n#ifndef DIALECT_FACES_H\n#define DIALECT_FACES_H\n\n#include <vector>\n#include <set>\n#include <map>\n#include <string>\n\n#include \"libvpsc/rectangle.h\"\n\n#include \"libdialect/commontypes.h\"\n#include \"libdialect/ortho.h\"\n#include \"libdialect/opts.h\"\n#include \"libdialect/constraints.h\"\n\nnamespace dialect {\n\n//! A side of a Face. E.g. a rectangular Face has four Sides: north, south, east, and west.\nclass Side {\npublic:\n\n    //! @brief  Standard constructor.\n    //! @param[in] nodeSeq  The Nodes belonging to this Side, in clockwise order\n    //!                     w.r.t. the Face to which the Side belongs.\n    //! @param[in] direc  The cardinal direction in which we move as we go forward\n    //!                   through the sequnce of Nodes.\n    //!\n    //! @note  In theory the direc could be computed from the given nodeSeq; however,\n    //!        wherever possible we want to promote the setting of directions logically,\n    //!        based on existing constraints, rather than inferring directions geometrically.\n    //!        When Faces construct Sides, there is such a constrained direction in place.\n    Side(Nodes nodeSeq, CardinalDir direc);\n\n    //! @brief  Get a copy of the node sequence.\n    Nodes getNodeSeq(void) const { return m_nodeSeq; }\n\n    //! @brief  Check whether this Side contains a Node of the given ID.\n    bool containsNode(id_type id) const;\n\n    //! @brief  Get the index of a Node in this Side's node sequence.\n    //! @param[in] id  The ID of the Node to be found.\n    //! @return  The index where the given ID occurs, or -1 if not found.\n    size_t findNodeIndex(id_type id) const;\n\n    //! @brief  Check the forward direction of this Side.\n    CardinalDir getForwardDirec(void) const;\n\n    //! @brief  Check the dimension in which this Side is aligned.\n    vpsc::Dim getAlignmentDimension(void) const { return m_vardim; }\n\n    //! @brief  Get a pointer to the first Node on this Side.\n    Node_SP firstNode(void) const;\n\n    //! @brief  Get a pointer to the last Node on this Side.\n    Node_SP lastNode(void) const;\n\n    //! @brief  Write a string representation.\n    std::string toString(void) const;\n\n    //! @brief  Check the centre coordinate of this Side.\n    //! @note  We are working under the assumption that all Nodes belonging to a given\n    //!        Side are centre-aligned!\n    double getCentreCoord(void) const;\n\n    //! @brief  Check how many of the Nodes on this Side are marked as root nodes.\n    size_t getNumRootNodes(void) const;\n\n    //! @brief  Record a TreePlacement as having been placed on this Side.\n    void addTreePlacement(TreePlacement_SP tp);\n\n    //! @brief  Compute a projection sequence to remove/prevent overlaps between the given\n    //!         TreePlacement's tree box, and any existing tree boxes already on this Side,\n    //!         as well as ordinary perimeter nodes on this Side.\n    //! @param[in] tp  The TreePlacement to be added to this Side.\n    //! @param[in] padding  Optional padding for the new tree box.\n    //! @return  A ProjSeq representing the computed projection sequence.\n    ProjSeq_SP computeCollateralProjSeq(TreePlacement_SP tp, double padding=0);\n\n    //! @brief  Compute the closed interval [a, b], where a and b are the extreme coordinates\n    //!         covered by this Side, up to the extremes of the boxes of the extreme Nodes.\n    //! @return The closed interval covered by the Side.\n    interval closedInterval(void) const;\n\n    //! @brief  Compute the closed interval [a, b] that is the intersection of this Side's\n    //!         closed interval with that of a given Segment.\n    //! @param[in] seg  The LineSegment in question.\n    //! @param[in] openInterval  Set true if you want to instead intersect this Side's closed\n    //!                          interval with the LineSegment's open interval.\n    //! @return  An interval representing the intersection.\n    //! @note  Returns an empty interval (b < a) if the two intervals do not intersect, or\n    //!        if the Side and the LineSegment are not aligned in the same dimension.\n    interval getIntervalOppositeSegment(LineSegment &seg, bool openInterval=false) const;\n\n    //! @brief  Check whether the closed interval spanned by this Side runs in the same\n    //!         dimension as a given line segment, and overlaps it in projection onto\n    //!         that dimension.\n    //! @param[in] seg  The LineSegment in question.\n    //! @param[in] openInterval  Set true if you want to instead intersect this Side's closed\n    //!                          interval with the LineSegment's open interval.\n    //! @return boolean\n    bool liesOppositeSegment(LineSegment &seg, bool openInterval=false) const;\n\n    //! @brief  Compute the first point of the interval of this Side that lies opposite\n    //!         a given line segment.\n    //! @param[in] seg  The LineSegment in question.\n    //! @return  The Point.\n    //! @throws  Runtime error if this Side does not lie opposite the given segment.\n    //! @sa Side::liesOppositeSegment\n    Avoid::Point getFirstPtOppositeSegment(LineSegment &seg) const;\n\n    //! @brief  Given a LineSegment, find that portion of this Side that lies opposite it,\n    //!         (if any) and report the maximum half-width of the near half.\n    //! @param[in] seg  The LineSegment in question.\n    //! @return  The desired half-width. Will be equal to -1 if the Side's interval does not intersect\n    //!          that of the segment, or if it does but the two are in-line with one another.\n    //! @note  The Edges of the Side are given the thickness value set for aligned edges in the underlying Graph.\n    double halfWidthOppositeSegment(LineSegment &seg) const;\n\n    //! @brief  Read-only access to the set of TreePlacements that have been attached to this Side.\n    const std::set<TreePlacement_SP> &getTreePlacements(void) const { return m_treePlacements; }\n\nprivate:\n\n    //! The Nodes belonging to this Side, in clockwise order w.r.t. the Face to which\n    //! the Side belongs:\n    Nodes m_nodeSeq;\n    //! The cardinal direction in which we move as we go forward through the sequnce of Nodes:\n    CardinalDir m_forward;\n    //! The cardinal direction pointing into the interior of the Face:\n    CardinalDir m_inward;\n    //! The varying dimension:\n    vpsc::Dim m_vardim;\n    //! The constant dimension:\n    vpsc::Dim m_constdim;\n    //! Set of TreePlacements that have been placed on this Side:\n    std::set<TreePlacement_SP> m_treePlacements;\n\n};\n\nenum class NexusPolarity {\n    ENTER_FROM,\n    EXIT_TO\n};\n\n//! Regarded as a member of a Face F, a Node u belongs to certain Sides si\n//! of F. As we traverse the face in the clockwise direction (i.e. so that the\n//! interior of the face is always to the /right/), each Side si gets a direction,\n//! and therefore may stand in one of eight relations to Node u: it may be /entering/\n//! or /exiting/, and this may be from or to any of the four cardinal compass directions.\n//!\n//! A single Side may stand in two such relations, as when the Node lies along\n//! the middle of the Side, or else in just one such relation, as when a Node\n//! lies at one end or the other.\n//!\n//! A Nexus represents a Node in this capacity as a \"joining point\" of several\n//! Sides of a Face. It stores eight \"slots\" that are either empty or else occupied by\n//! a Side object.\nclass Nexus {\npublic:\n\n    //! @brief  Standard constructor.\n    //! @param[in] u  The Node that this Nexus is to represent.\n    Nexus(Node_SP u) : m_node(u), m_slots(8) {}\n\n    //! @brief  Add a Side to the Nexus.\n    void addSide(Side_SP side);\n\n    //! @brief  Find out what are the first objects you hit as you try sweeping both\n    //!         clockwise and anticlockwise, starting from a given direction.\n    //! @param[in] direc  The given direction.\n    //! @return  Set of Sides.\n    //! @note  The size of the returned set will be either 0, 1, or 2, according to whether\n    //!        the number of filled slots in this Nexus is 0, 1, or more, respectively.\n    std::set<Side_SP> getNeighboursOfADirection(CompassDir direc);\n\n    //! @brief  Write a string representation.\n    std::string toString(void) const;\n\nprivate:\n\n    //! @brief  Record a Side in the proper slot.\n    //! @param[in] direc  The side of the Nexus concerned.\n    //! @param[in] polarity  The polarity of the connection.\n    //! @param[in] side  The Side instance that is connecting.\n    //!\n    //! For example, consider the node labeled x in this picture:\n    //!\n    //!                 etc.\n    //!                  |\n    //!                a |\n    //!                  |\n    //!             b    |\n    //!     etc. ------- x    e\n    //!             c    |\n    //!                  |\n    //!                d |\n    //!                  |\n    //!                 etc.\n    //!\n    //! and regarded as a member of the external face. As we trace the external face in its\n    //! clockwise direction (which looks like anticlockwise except from the point at infinity)\n    //! we travel south down side a, west along side b, east along side c, south along side d,\n    //! and north along side e. (This example also demonstrates that two different sides, such\n    //! as b and c, can be made up of the same Nodes, only traversed in different directions.)\n    //!\n    //! For the Nexus at x, we would then use this method to record the following six facts:\n    //!     Side a enters from the north\n    //!     Side b exits to the west\n    //!     Side c enters from the west\n    //!     Side d exits to the south\n    //!     Side e enters from the south\n    //!     Side e also exits to the north\n    //!\n    void writeSlot(CardinalDir direc, NexusPolarity polarity, Side_SP side);\n\n    //! When searching for the neighbours of a given direction, we need to start\n    //! the search at the right index. We store a lookup for this.\n    static const std::map<CompassDir, size_t> DIREC_TO_INITIAL_SEARCH_INDEX;\n\n    Node_SP m_node;\n    std::vector<Side_SP> m_slots;\n    bool m_isEmpty = true;\n};\n\n//! Holds all the Face objects for a given 4-planar, orthogonal layout,\n//! and provides methods to use and manage them.\nclass FaceSet {\npublic:\n    FaceSet(Graph_SP &G);\n\n    //! @brief  Check how many faces there are.\n    size_t getNumFaces(void) { return m_faces.size(); }\n\n    //! @brief  Compute all the possible ways of placing a given Tree into the Faces,\n    //!         given that it must connect at a particular root node in the underlying Graph.\n    //! @param[in] tree  The Tree to be placed.\n    //! @sa Face::listAllPossibleTreePlacements.\n    TreePlacements listAllPossibleTreePlacements(Tree_SP tree);\n\n    //! @brief  After tree placements have actually been chosen and performed (i.e. trees have\n    //!         been placed into faces), obtain a vector of all those TreePlacements that were\n    //!         actually chosen.\n    TreePlacements getAllTreePlacements(void);\n\n    //! @brief  Get a copy of the vector of Faces_SP's.\n    Faces getFaces(void) { return m_faces; }\n\n    //! @brief  Get the external Face.\n    Face_SP getExternalFace(void) { return m_externalFace; }\n\n    //! @brief  After tree placements have been chosen and performed, get a count of trees\n    //!         by growth direction.\n    //! @param[in] scaleBySize  Set true if for each tree you actually want to count its number\n    //!                         of nodes. In other words, the final counts you get actually indicate\n    //!                         the number of nodes in trees that grow in the given directions.\n    std::map<CardinalDir, size_t> getNumTreesByGrowthDir(bool scaleBySize=false) const;\n\nprivate:\n\n    //! Part of construction; compute and store all the Faces of the given Graph.\n    void computeFaces(void);\n    //! Part of construction; determine which is the external Face.\n    void identifyExternalFace(void);\n\n    //! The Graph to which the Face belongs:\n    Graph_SP m_graph;\n    Faces m_faces;\n    Face_SP m_externalFace;\n    //! Let each Node ID map to the vector of Faces to which it belongs.\n    std::map<id_type, std::set<Face_SP>> m_facesByMemberNodeId;\n    //! We also want lookups for aligned sets of nodes, i.e. want to be able to look up\n    //! for any given node, what is the set of all other nodes with which it is aligned\n    //! in either dimension.\n    std::map<id_type, std::set<id_type>> m_hSets;\n    std::map<id_type, std::set<id_type>> m_vSets;\n};\n\n\n//! Represents a single face of a 4-planar, orthogonal layout.\nclass Face {\n    friend class FaceSet;\npublic:\n    //! @brief  Standard constructor.\n    //! @param[in] G  The Graph to which the Face belongs.\n    Face(Graph_SP &G) : m_ID(nextID++), m_graph(G) {}\n\n    //! @brief  A method to build the Face, based on the clockwise sequence of \"edges\"\n    //!         of which it is made up; here an \"edge\" is a mere IdPair.\n    void initWithEdgeSeq(const std::vector<IdPair> &edges);\n\n    //! @brief  Access the sequence (vector) of Nodes belonging to the Face,\n    //!         in clockwise order.\n    Nodes getNodeSeq(void) { return m_nodeSeq; }\n\n    //! @brief  Get a copy of the vector of Sides.\n    Sides getSides(void) { return m_sides; }\n\n    //! @brief  Get a copy of the Nexus lookup.\n    NexesById getNexusLookup(void) { return m_nexesByNodeIds; }\n\n    //! @brief  Utility method, to test whether the Face contains a given sequence\n    //!         of Node IDs, in clockwise cyclic order.\n    bool containsNodeIdSeq(std::vector<id_type> idSeq) const;\n\n    //! @brief  Access the underlying Graph.\n    Graph_SP getGraph(void) { return m_graph; }\n\n    //! @brief  Access the unique ID of a given instance.\n    //!\n    //! @return  The ID.\n    id_type id(void) const { return m_ID; }\n\n    //! @brief  Check whether this is the external face or not.\n    bool isExternal(void) const { return m_isExternal; }\n\n    //! @brief  Get a string representation.\n    std::string toString(void) const;\n\n    //! @brief  Access the neighbour pairs.\n    std::map<id_type, std::vector<std::pair<Node_SP, Node_SP>>> getNbrPairs(void) {return m_nbrPairs;}\n\n    //! @brief  Get a vector of all Sides that are relevant to a given TreePlacement.\n    Sides getRelevantSidesForPlacement(TreePlacement_SP tp) const;\n\n    //! @brief  Compute all the possible ways of placing a given Tree into this Face,\n    //!         at a given root Node belonging to this Face.\n    //!\n    //! @param[out] tps  A vector of TreePlacements to which all those allocated by this\n    //!                  method are to be added.\n    //! @param[in] tree  The Tree to be placed.\n    //! @param[in] root  The Node, belonging to this Face, where the Tree is to attach.\n    void listAllPossibleTreePlacements(TreePlacements &tps, Tree_SP tree, Node_SP root);\n\n    //! @brief  List the compass directions in which an edge could point if it were\n    //!         anchored at the given Node, and pointed inward, into the Face.\n    CompassDirs inwardDirsAvailable(Node_SP node);\n\n    //! @brief  To be used after the face has been expanded to make room for the tree.\n    //!         This method adds a large node to the graph, representing the bounding\n    //!         box of the tree, with padding.\n    //!         The treenode is constrained to lie beside its root node.\n    //! @param[in] tp  A TreePlacement representing the Tree to be placed.\n    //! @param[in] padding  Optional padding to be added to the tree box.\n    //! @sa TreePlacement::getTreeBox for interpretation of the padding.\n    void insertTreeNode(TreePlacement_SP tp, double padding=0);\n\n    //! @brief  Compute a projection sequence to remove/prevent overlaps between the given\n    //!         TreePlacement's tree box, and any existing tree boxes or ordinary perimeter\n    //!         Nodes on relevant Sides of this Face.\n    //! @param[in] tp  The TreePlacement to be added to this Face.\n    //! @param[in] padding  Optional padding for the new tree box.\n    //! @return  A ProjSeq representing the computed projection sequence.\n    //!\n    //! @note  In the case where tp's root lies on two sides of the face, these two\n    //! sides must be aligned in complementary dimensions (i.e. one in x, and one\n    //! in y), so the sepcos generated here are always independent.\n    //!\n    //! That is, if each side has an existing treenode that must be pushed away,\n    //! the sepco for one tree will never achieve the push for the other, since\n    //! these pushes /must/ be done in complementary dimensions.\n    //!\n    //! Therefore there is no need to wait until after the first removal has been\n    //! actually performed to compute the sepco for the second removal; it cannot\n    //! be affected by the first one. This means we can safely compute them simultaneously.\n    ProjSeq_SP computeCollateralProjSeq(TreePlacement_SP tp, double padding=0);\n\n    //! @brief  Convenience function for applying a ProjSeq with all the appropriate options.\n    //! @param[in] ps  The ProjSeq to be applied.\n    //! @return boolean, saying whether all the projections were successful.\n    bool applyProjSeq(ProjSeq &ps);\n\n    //! @brief  Perform collateral expansion for a given TreePlacement. This means\n    //!         pushing Nodes and tree boxes on relevant Sides out of the way, to make\n    //!         room for the new tree box.\n    //! @param[in] tp  The TreePlacement requiring space.\n    //! @param[in] padding  Optional padding to be added to the new tree box. Leave\n    //!                     negative if you want padding equal to iel/4 to be automatically\n    //!                     applied, where iel is the underlying graph's current ideal edge\n    //!                     length.\n    //! @return  The ProjSeq that was used to achieve the required expansion. This\n    //!          ProjSeq will have been already evaluated and applied when returned.\n    //! @throws  Runtime exception if any of the collateral expansion projections\n    //!          are infeasible. In theory this should never happen.\n    ProjSeq_SP doCollateralExpansion(TreePlacement_SP tp, double padding=-1);\n\n    //! @brief  Build LineSegments to represent all those segments of the internal boundary\n    //!         of this Face that face in a given direction. These segments can represent\n    //!         aligned Edges, or parts of boundaries of Nodes or tree boxes.\n    //! @param[in] facingDir  CardinalDir telling which side the segments should face.\n    //! @param[out] closedSegs  Vector in which to store all constructed closed segments.\n    //! @param[out] openSegs  Vector in which to store all constructed open segments.\n    //! @param[in] ignoreTP  Optional TreePlacement whose collateral tree boxes should be ignored.\n    //!\n    //! @note  Whether a boundary segment is closed or open means whether one crosses the interior\n    //! boundary of the face at the endpoints (yes for closed, no for open).\n    //!\n    //! For example, if facingDir is SOUTH, then closedSegs will get one LineSegment for every \n    //! horizontal Edge in the Face, while openSegs will get a LineSegment representing the \n    //! southern boundary of (a) each Node in the Face, and (b) each Tree box in the Face.\n    void buildBdrySegsFacingOneDir(CardinalDir facingDir,\n                                   LineSegments &closedSegs, LineSegments &openSegs,\n                                   TreePlacement_SP ignoreTP = nullptr);\n\n    //! @brief  Build the best projection sequence for a given tree placement.\n    //! @param[in] tp  The TreePlacement to be added to this Face.\n    //! @param[in] padding  Optional padding for the new tree box.\n    //! @param[in] doCostlierDimensionFirst  See TreePlacement::buildBestProjSeq.\n    //! @param[in] estimateMethod  See defn of ExpansionEstimateMethod enum class.\n    //! @return  A ProjSeq representing the computed projection sequence.\n    ProjSeq_SP buildBestProjSeq(TreePlacement_SP tp, double padding=0,\n                                bool doCostlierDimensionFirst=false,\n                                ExpansionEstimateMethod estimateMethod=ExpansionEstimateMethod::CONSTRAINTS);\n\n    //! @brief  Get all the Sides of this Face that lie opposite a given LineSegment.\n    //! @param[in] seg  The LineSegment in question.\n    //! @param[in] openInterval  Set true if you want to consider the overlap with the LineSegment's\n    //!                          open interval instead of closed (the default).\n    //! @return  Vector of Sides.\n    Sides getAllSidesOppositeSegment(LineSegment &seg, bool openInterval=false) const;\n\n    //! @brief  Get all TreePlacements that have been added to this Face.\n    //! @return  Vector of TreePlacements.\n    TreePlacements getAllTreePlacements(void) const;\n\n    //! @brief  Get the set of all TreePlacements that have been added to this Face.\n    //! @return  Set of TreePlacements.\n    std::set<TreePlacement_SP> getSetOfAllTreePlacements(void) const;\n\n    //! @brief  Get all TreePlacements that have been added to this Face.\n    //! @param[out] tps  Vector of TreePlacements to which those belonging to this\n    //!                  Face should be added.\n    void getAllTreePlacements(TreePlacements &tps) const;\n\n    //! @brief  After tree placements have been chosen and performed, get a count of trees\n    //!         by growth direction.\n    //! @param[out] counts  Map into which the counts should be added.\n    //! @param[in] scaleBySize  Set true if for each tree you actually want to count its number\n    //!                         of nodes. In other words, the final counts you get actually indicate\n    //!                         the number of nodes in trees that grow in the given directions.\n    void getNumTreesByGrowthDir(std::map<CardinalDir, size_t> &counts, bool scaleBySize=false) const;\n\nprivate:\n\n    //! Construction steps:\n    void computeNbrPairs(void);\n    void computeSides(void);\n    void buildNexes(void);\n\n    //! @brief Scanning through this Face's nodeseq, look for the first place where\n    //!        a bend occurs, i.e. where the incoming and outgoing directions are different.\n    //! @return  The index where the first bend occurs.\n    //! @note  We say a bend occurs at an index, not at a Node, since a Node may\n    //! be encountered more than once during traversal of the Face. On one encounter\n    //! a bend may happen there, while on another it may not. Consider for example\n    //! the external face and node x here:\n    //!\n    //!                 etc.\n    //!                  |\n    //!            etc.--x\n    //!                  |\n    //!                 etc.\n    //!\n    //! In this example node x is encountered three times: twice a bend occurs\n    //! there; once it does not.\n    size_t findIndexOfFirstBend(void);\n\n    //! Check the constrained cardinal direction from one node to another.\n    //! Since we only work with constrained 4-planar orthogonal graphs, this should always be defined.\n    //! @throws  Runtime error if no cardinal constraint has been defined for these nodes.\n    CardinalDir direc(const Node_SP &u, const Node_SP &v);\n\n    //! For class-specific generation of unique IDs:\n    static id_type nextID;\n    //! An instance's own unique ID:\n    const id_type m_ID;\n\n    //! The Graph to which the Face belongs:\n    Graph_SP m_graph;\n    //! All Nodes belonging to the face, in clockwise order:\n    Nodes m_nodeSeq;\n    //! The number of Nodes in the Face:\n    size_t m_n;\n    //! Flag indicating whether this Face is the external one:\n    bool m_isExternal = false;\n    //! For any given Node u belonging to the Face, we want to be able to look up\n    //! its \"neighbour pairs\", by which we mean those pairs of Nodes (v, w) such that\n    //! the sequence v -> u -> w is encountered in clockwise cyclic traversal of the Face.\n    //! So we keep a lookup of the form,\n    //!             u.id --> [{v0, w0}, {v1, w1}, ...]\n    std::map<id_type, std::vector<std::pair<Node_SP, Node_SP>>> m_nbrPairs;\n    //! The Sides of the Face:\n    Sides m_sides;\n    //! The Nexes, indexed by the IDs of the Nodes they represent:\n    NexesById m_nexesByNodeIds;\n    //! Nodes representing Trees placed into this Face:\n    NodesById m_treeNodes;\n    //! We keep a record of any TreePlacements placed at any Nodes of this Face.\n    //! Since at most one Tree can be rooted at any given Node, we need record at most\n    //! one TreePlacement per Node.\n    std::map<id_type, TreePlacement_SP> m_treePlacementsByNodeIds;\n\n};\n\n\n} // namespace dialect\n\n#endif // DIALECT_FACES_H\n"
  },
  {
    "path": "cola/libdialect/gen_bend_seq_lookup.py",
    "content": "#!/usr/bin/python\n\"\"\"\n/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libdialect - A library for computing DiAlEcT layouts:\n *                 D = Decompose/Distribute\n *                 A = Arrange\n *                 E = Expand/Emend\n *                 T = Transform\n *\n * Copyright (C) 2018  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n * Author(s):   Steve Kieffer   <http://skieffer.info>\n*/\n\nThis Python script generates the file bendseqlookup.cpp.\n\nIt is included so that it can be understood where the lookup table for\nminimal-length bend sequences comes from, and for the sake of future\ndevelopment.\n\nThe lookup table gives the bend sequences that can occur on bend-minimal\npaths from node A to node Z, leaving A in direction d0 and entering Z in\ndirection d1.\n\nNote a subtlety here: Whereas the direction in which you depart from node A\nis the same as the side of A from which you depart, these two notions (direction\nof travel, and side of incidence) are always in opposition with the node Z at\nthe end of the path.\n\nFor example, if you enter node Z while traveling east, you will enter it\nfrom its west side. The direction d1 would be east in this example. That is,\nthe direction d1 is the direction in which you are taveling, NOT the side\nof Z at which you enter.\n\nIn order to use the table you must also give the compass direction c from\nnode Z to node A. Here, c is cardinal if A and Z are aligned, else ordinal.\n\nAll bend-minimal sequences were determined and written by hand for the case\nin which d1 == EAST, and the results are recorded in the eastFinalLookup\ndictionary below.\n\nThere, the codes r, g, j, n stand, respectively, for the TLC, TRC, BRC, and\nBLC bend shapes. (Lowercase 'r' and 'j' look roughly like the TLC and BRC bends;\nin the Korean Hangul alphabet, the letters for the 'g' and 'n' sounds look\nlike the TRC and BLC bends.)\n\nAs for the compass direction c from node Z to node A, we replace this with a\ncode number p in {0, 1, ... 8}, where these integers represent the positions\nin the following grid:\n           ___ ___ ___\n          | 0 | 1 | 2 |\n          `--- --- ---'\n          | 3 | 4 | 5 |\n          `--- --- ---'\n          | 6 | 7 | 8 |\n          `--- --- ---'\nThe idea is that Z sits at position 4, and p will indicate at which position A\nsits, where\n\n    p == 0 means A.x < Z.x ^ A.y < Z.y,\n    p == 1 means A.x == Z.x ^ A.y < Z.y,\n    ...\n    p == 8 means A.x > Z.x ^ A.y > Z.y.\n\nHOWEVER: It turns out the the bend sequences for A at position 1 are identical\nwith those for A at position 2; likewise pos 4 is equivalent to pos 5, and pos\n7 is equivalent to pos 8. If you are wondering how node A could be at position\n4 (doesn't that mean it lies right on top of node Z?), remember that e.g. in a\nfigure-8 network, you can have a chain which is not a cycle but which\nnevertheless has the same node at each end. I.e. A and Z can be the same node.\n\nBecause the 2-5-8 column works the same as the 1-4-7 column in the table, the\neastFinalLookup in fact has no entries for positions 1, 4, 7.  For these we\nsimply consult 2, 5, and 8, respectively.\n\nIn order to utilise the eastFinalLookup in generating the FULL lookup table for\nC++, we use the lookupMinimalBendSeqs function. This essentially achieves an\nalgebraic conjugation, rotating the input values to conform to d1 being EAST, then\nun-rotating the results before returning them, to match the case that was actually\nrequested.\n\nThe final C++ table is accessed using\n\n                    minimalBendSeqs.at(c).at(d0).at(d1)\n\nin order to obtain a vector of vectors, giving all possible bend-minimal bend sequences\nfor the situation in question. You always get at least one sequence, but that sequence\nitself may be empty, if in fact the best path has zero bends.\n\"\"\"\n\nE, S, W, N = 0, 1, 2, 3\nr, g, j, n = 0, 3, 5, 2\n\neastFinalLookup = {\n    0: {\n        E: [[g,n]],\n        S: [[n]],\n        W: [[r,n]],\n        N: [[r,g,n], [g,r,n]]\n    },\n    2: {\n        E: [[j,g,r,n], [g,j,r,n], [g,j,n,r]],\n        S: [[j,r,n], [j,n,r]],\n        W: [[r,n]],\n        N: [[g,r,n]]\n    },\n    3: {\n        E: [[]],\n        S: [[n,j,r]],\n        W: [[n,r,g,n], [r,n,j,r]],\n        N: [[r,g,n]]\n    },\n    5: {\n        E: [[j,g,r,n], [g,j,n,r]],\n        S: [[j,n,r]],\n        W: [[n,g,r,n], [r,j,n,r]],\n        N: [[g,r,n]]\n    },\n    6: {\n        E: [[j,r]],\n        S: [[n,j,r], [j,n,r]],\n        W: [[n,r]],\n        N: [[r]]\n    },\n    8: {\n        E: [[g,j,n,r], [j,g,n,r], [j,g,r,n]],\n        S: [[j,n,r]],\n        W: [[n,r]],\n        N: [[g,n,r], [g,r,n]]\n    }\n}\n\ndef lookupMinimalBendSeqs(p, d0, d1):\n    \"\"\"\n    :param p: The square (0 through 8) in which node A (start of path) sits\n    :param d0: Compass direction in which to depart from A\n    :param d1: Compass direction in which to enter Z (end of path)\n\n    :return: a list [s0, s1, ..., sk-1] where each si is a list of LinkShapes.\n             These are all and only the sequences of bends that can occur on\n             a bend-minimal orthogonal route from node A to node Z, with the\n             prescribed departure and arrival directions d0 and d1.\n\n             You always get at least one si, but it itself may be empty (meaning\n             that the best path has zero bends).\n    \"\"\"\n    pMap = {\n        E: [0, 2, 2, 3, 5, 5, 6, 8, 8],\n        S: [6, 3, 0, 8, 5, 2, 8, 5, 2],\n        W: [8, 8, 6, 5, 5, 3, 2, 2, 0],\n        N: [2, 5, 8, 2, 5, 8, 0, 3, 6]\n    }[d1]\n    d0Map = {\n        E: [0, 1, 2, 3],\n        S: [3, 0, 1, 2],\n        W: [2, 3, 0, 1],\n        N: [1, 2, 3, 0]\n    }[d1]\n    bendMap = {\n        E: {r:r, g:g, j:j, n:n},\n        S: {r:g, g:j, j:n, n:r},\n        W: {r:j, g:n, j:r, n:g},\n        N: {r:n, g:r, j:g, n:j}\n    }[d1]\n    return [\n        [ bendMap[b] for b in seq ]\n        for seq in eastFinalLookup[pMap[p]][d0Map[d0]]\n    ]\n\npDirs = \"NW NORTH NE WEST GLORIOSKYZERO! EAST SW SOUTH SE\".split()\n\ndirs = \"EAST SOUTH WEST NORTH\".split()\n\nbends = \"TLC H BLC TRC V BRC\".split()\n\ndef genLookup():\n    t = 'const map<CompassDir, map<CardinalDir, map<CardinalDir, vector<vector<LinkShape>>>>> dialect::minimalBendSeqs{\\n'\n    for p in range(9):\n        if p == 4: continue  # We skip this case since there is no compass dir for position 4 in the table!\n        t += (' ' * 4) + '{CompassDir::%s, {\\n' % pDirs[p]\n        for d0 in range(4):\n            t += (' ' * 8) + '{CardinalDir::%s, {\\n' % dirs[d0]\n            for d1 in range(4):\n                t += (' ' * 12) + '{CardinalDir::%s, {\\n' % dirs[d1]\n                seqs = lookupMinimalBendSeqs(p, d0, d1)\n                m = len(seqs)\n                for i, seq in enumerate(seqs):\n                    t += (' ' * 16) + '{'\n                    t += ', '.join(['LinkShape::%s' % bends[j] for j in seq])\n                    t += '}' + (',' if i < m-1 else '') + '\\n'\n                t += (' ' * 12) + '}}' + (',' if d1 < 3 else '') + '\\n'\n            t += (' ' * 8) + '}}' + (',' if d0 < 3 else '') + '\\n'\n        t += (' ' * 4) + '}}' + (',' if p < 8 else '') + '\\n'\n    t += '};\\n'\n    return t\n\nCPP_HEADER = \"\"\"\\\n/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libdialect - A library for computing DiAlEcT layouts:\n *                 D = Decompose/Distribute\n *                 A = Arrange\n *                 E = Expand/Emend\n *                 T = Transform\n *\n * Copyright (C) 2018  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n * Author(s):   Steve Kieffer   <http://skieffer.info>\n*/\n\n/*\n * Generated by gen_bend_seq_lookup.py\n *\n*/\n\n#include <map>\n#include <vector>\n\n#include \"libdialect/ortho.h\"\n#include \"libdialect/chains.h\"\n\nusing dialect::CompassDir;\nusing dialect::CardinalDir;\nusing dialect::LinkShape;\nusing std::map;\nusing std::vector;\n\n\"\"\"\n\ndef test1():\n    print genLookup()\n\ndef writeCppModule():\n    code = ''\n    code += CPP_HEADER\n    code += genLookup()\n    with open('bendseqlookup.cpp', 'w') as f:\n        f.write(code)\n\nif __name__=='__main__':\n    #test1()\n    writeCppModule()\n"
  },
  {
    "path": "cola/libdialect/gen_qa_lookup.py",
    "content": "#!/usr/bin/python\n\"\"\"\n/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libdialect - A library for computing DiAlEcT layouts:\n *                 D = Decompose/Distribute\n *                 A = Arrange\n *                 E = Expand/Emend\n *                 T = Transform\n *\n * Copyright (C) 2018  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n * Author(s):   Steve Kieffer   <http://skieffer.info>\n*/\n\nThis Python script generates the file qalookup.cpp.\n\nIt is included only so that it can be understood where the lookup table\nfor quad actions in qalookup.cpp comes from, as well as for any future\ndevelopment in which it may be desired that the quad actions work\ndifferently.\n\nThe lookup table is formatted as a five-dimensional array. If the quadrants are\nenumerated as follows:\n\n                            |\n                         Q2 | Q3\n                        ----+----\n                         Q1 | Q0\n                            |\n\nthen let p, q, r, s be the (reduced) number of nodes in quadrants Q0, Q1, Q2,\nQ3, respectively. To say the number is \"reduced\" means that values >= 2 are\nreplaced by 2 itself. Thus, the only possible values are 0, 1, and 2.\n\nFurthermore let c be the binary-coded representation of which semiaxes are to\nbe used:\n            1's bit: 1 if EAST is to be used; else 0\n            2's bit: 1 if SOUTH is to be used; else 0\n            4's bit: 1 if WEST is to be used; else 0\n            8's bit: 1 if NORTH is to be used; else 0\n\nThen entry [p][q][r][s][c] in the table is a string naming all the quad actions\nthat use all and only the semiaxes coded by c, when the reduced number of nodes\nin the four quadrants are p, q, r, s respectively.\n\nThe quad actions are coded as strings of four code letters, A, B, C, D,\nindicating the action for each of the four quadrants, as follows:\n\n        A: \"Anticlockwise\": Assign the node nearest the anticlockwise\n           end of the quadrant to the neighbouring semiaxis. E.g. in\n           quadrant Q0 assign the node nearest EAST to that semiaxis.\n        B: \"Both\": Do both the A and C actions.\n        C: \"Clockwise\": Assign the node nearest the clockwise\n           end of the quadrant to the neighbouring semiaxis. E.g. in\n           quadrant Q0 assign the node nearest SOUTH to that semiaxis.\n        D: \"Do nothing\".\n\nThe quad action codes (in general there may be many for a given p, q, r, s, c)\nare separated by spaces.\n\nThe table is to be accessed using the lookupQuadActions function declared in\nthe qalookup.h header file.\n\"\"\"\n\nfrom collections import defaultdict\n\nclass Vect:\n    \"\"\"\n    A vector to represent assignments to semiaxes.\n    \"\"\"\n\n    def __init__(self, *args):\n        self.comps = args\n\n    def __add__(self,other):\n        return Vect(*[a+b for a,b in zip(self.comps,other.comps)])\n\n    def __repr__(self):\n        s = ''\n        for c in self.comps:\n            s += ',%s'%c\n        s = '('+s[1:]+')'\n        return s\n\n    def invalid(self):\n        \"\"\"\n        An assignment to semiaxes is invalid iff any entry is greater than 1.\n        \"\"\"\n        for c in self.comps:\n            if c > 1:\n                return True\n        return False\n\n    def height(self):\n        return sum(self.comps)\n\n    def binaryUsageCode(self):\n        \"\"\"\n        Return an integer from 0 to 15 indicating which semiaxes\n        are occupied, encoding semiaxis Sn in the nth binary bit.\n        \"\"\"\n        code = 0\n        s = 1\n        for c in self.comps:\n            if c > 0: code += s\n            s *= 2\n        return code\n\n    def missing(self):\n        \"\"\"\n        Return a list of the indices that get a 0, i.e. to which\n        no node has been assigned.\n        \"\"\"\n        m = []\n        for i in range(len(self.comps)):\n            if self.comps[i] == 0:\n                m.append(i)\n        return m\n\n#    |   \n#  r | s \n#    |\n# ---+---\n#    |\n#  q | p\n#    |\n\n\"\"\"\nHere we use Vect's to represent how many nodes will be assigned to each semiaxis,\nwhen each of the possible actions is taken in each quadrant.\n\nFor example under pH we represent the assignments for the actions D, A, B, C in\nthe first quadrant.\n\"\"\"\n\npH = [\n    Vect(0,0,0,0),\n    Vect(1,0,0,0),\n    Vect(1,1,0,0),\n    Vect(0,1,0,0)\n]\n\nqH = [\n    Vect(0,0,0,0),\n    Vect(0,1,0,0),\n    Vect(0,1,1,0),\n    Vect(0,0,1,0)\n]\n\nrH = [\n    Vect(0,0,0,0),\n    Vect(0,0,1,0),\n    Vect(0,0,1,1),\n    Vect(0,0,0,1)\n]\n\nsH = [\n    Vect(0,0,0,0),\n    Vect(0,0,0,1),\n    Vect(1,0,0,1),\n    Vect(1,0,0,0)\n]\n\n\ndef enumerate(d):\n    \"\"\"\n    d: a reduced distribution\n\n    We write the list of legal quad actions to fill each possible set of semiaxes.\n    \"\"\"\n    # Note the possible choices for each quadrant.\n    choices = []\n    for c in d:\n        choices.append([\n            [0],\n            [0,1,3],\n            [0,1,2,3]\n        ][c])\n    qas = defaultdict(list)\n    code_letters = \"DABC\"\n    # Iterate over all possible actions.\n    for p in choices[0]:\n        h0 = Vect(0,0,0,0) # E, S, W, N\n        h1 = h0 + pH[p]\n        for q in choices[1]:\n            h2 = h1 + qH[q]\n            for r in choices[2]:\n                h3 = h2 + rH[r]\n                for s in choices[3]:\n                    hits = h3 + sH[s]\n                    # If the hits vector is invalid, we're trying to do something\n                    # impossible, so we skip this case.\n                    if hits.invalid(): continue\n                    # If we didn't make any assignments at all, then there's nothing to report.\n                    H = hits.height()\n                    if H == 0: continue\n                    # Otherwise we'll record this as a valid quad action.\n                    assert(1 <= H and H <= 4)\n                    B = hits.binaryUsageCode()\n                    qa = '%s%s%s%s'% tuple(map(\n                        (lambda n : code_letters[n]), [p,q,r,s]\n                    ))\n                    qas[B].append(qa)\n    return ['\"' + ' '.join(qas[i]) + '\"' for i in range(16)]\n\nCPP_HEADER = \"\"\"\\\n/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libdialect - A library for computing DiAlEcT layouts:\n *                 D = Decompose/Distribute\n *                 A = Arrange\n *                 E = Expand/Emend\n *                 T = Transform\n *\n * Copyright (C) 2018  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n * Author(s):   Steve Kieffer   <http://skieffer.info>\n*/\n\n/*\n * Generated by gen_qa_lookup.py\n *\n*/\n\n#include <string>\n#include <sstream>\n#include <iterator>\n#include <vector>\n\n#include \"libdialect/quadaction.h\"\n\nusing std::string;\nusing std::istringstream;\nusing std::istream_iterator;\nusing std::vector;\n\n\"\"\"\n\nCPP_FOOTER = \"\"\"\nvector<string> dialect::lookupQuadActions(size_t p, size_t q, size_t r, size_t s, size_t c) {\n    string words = quadActionLookup[p][q][r][s][c];\n    // Thanks to https://stackoverflow.com/a/237280\n    istringstream iss(words);\n    vector<string> tokens{istream_iterator<string>{iss}, istream_iterator<string>{}};\n    //\n    return tokens;\n}\n\n\"\"\"\n\ndef writeCppArray():\n    code = ''\n    code += \"const string quadActionLookup[3][3][3][3][16] = {\\n\"\n    for p in range(3):\n        code += \"  {\\n\"\n        for q in range(3):\n            code += \"    {\\n\"\n            for r in range(3):\n                code += \"      {\\n\"\n                for s in range(3):\n                    dist = (p, q, r, s)\n                    e = enumerate(dist)\n                    code += \"        {\" + (', '.join(e)) + \"}\" + (',\\n' if s < 2 else '\\n')\n                code += \"      }\" + (',\\n' if r < 2 else '\\n')\n            code += \"    }\" + (',\\n' if q < 2 else '\\n')\n        code += \"  }\" + (',\\n' if p < 2 else '\\n')\n    code += \"};\\n\"\n    return code\n\ndef writeCppModule():\n    code = ''\n    code += CPP_HEADER\n    code += writeCppArray()\n    code += CPP_FOOTER\n    with open('qalookup.cpp', 'w') as f:\n        f.write(code)\n\nif __name__=='__main__':\n    writeCppModule()\n\n"
  },
  {
    "path": "cola/libdialect/graphs.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libdialect - A library for computing DiAlEcT layouts:\n *                 D = Decompose/Distribute\n *                 A = Arrange\n *                 E = Expand/Emend\n *                 T = Transform\n *\n * Copyright (C) 2018  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n * Author(s):   Steve Kieffer   <http://skieffer.info>\n*/\n\n#include <algorithm>\n#include <vector>\n#include <memory>\n#include <deque>\n#include <utility>\n#include <string>\n#include <sstream>\n#include <iostream>\n#include <map>\n#include <stdexcept>\n#include <cmath>\n#include <iterator>\n#include <functional>\n\n#include \"libavoid/geomtypes.h\"\n#include \"libvpsc/rectangle.h\"\n#include \"libcola/cluster.h\"\n#include \"libcola/cola.h\"\n\n#include \"libdialect/constraints.h\"\n#include \"libdialect/io.h\"\n#include \"libdialect/util.h\"\n#include \"libdialect/ortho.h\"\n#include \"libdialect/logging.h\"\n#include \"libdialect/routing.h\"\n#include \"libdialect/graphs.h\"\n\nusing namespace dialect;\n\nusing std::max;\nusing std::min;\nusing std::vector;\nusing std::shared_ptr;\nusing std::make_shared;\nusing std::deque;\nusing std::pair;\nusing std::string;\nusing std::ostringstream;\nusing std::map;\nusing std::fabs;\n\nusing vpsc::Rectangle;\nusing vpsc::Rectangles;\n\nusing cola::CompoundConstraints;\n\nusing Avoid::Point;\n\nid_type Node::nextID = 0;\nid_type Edge::nextID = 0;\n\n//! @brief  Adding two bounding boxes returns the bounding box of their union.\nBoundingBox operator+(const BoundingBox &lhs, const BoundingBox &rhs) {\n    BoundingBox sum = lhs;\n    sum += rhs;\n    return sum;\n}\n\nbool operator==(const BoundingBox &lhs, const BoundingBox &rhs) {\n    return lhs.x==rhs.x && lhs.X==rhs.X && lhs.y==rhs.y && lhs.Y==rhs.Y;\n}\n\nbool operator!=(const BoundingBox &lhs, const BoundingBox &rhs) {\n    return !(lhs==rhs);\n}\n\nBoundingBox &BoundingBox::operator+=(const BoundingBox &rhs) {\n    x = min(x, rhs.x);\n    X = max(X, rhs.X);\n    y = min(y, rhs.y);\n    Y = max(Y, rhs.Y);\n    return *this;\n}\n\nstring BoundingBox::repr(void) const {\n    return string_format(\"[%.2f, %.2f] x [%.2f, %.2f]\", x, X, y, Y);\n}\n\nLineSegment_SP BoundingBox::buildSideSegment(CardinalDir side) const {\n    switch(side) {\n    case CardinalDir::EAST:\n        return std::make_shared<LineSegment>(Point(X, y), Point(X, Y));\n    case CardinalDir::WEST:\n        return std::make_shared<LineSegment>(Point(x, y), Point(x, Y));\n    case CardinalDir::SOUTH:\n        return std::make_shared<LineSegment>(Point(x, Y), Point(X, Y));\n    case CardinalDir::NORTH:\n        return std::make_shared<LineSegment>(Point(x, y), Point(X, y));\n    default:\n        COLA_ASSERT(false);\n\n    }\n}\n\nGraph::Graph(const Graph &G)\n    : m_debugOutputPath(G.m_debugOutputPath),\n      m_projectionDebugLevel(G.m_projectionDebugLevel),\n      m_sepMatrix(G.m_sepMatrix),\n      m_iel(G.m_iel),\n      m_needNewRectangles(true),\n      m_nodes(G.m_nodes),\n      m_edges(G.m_edges),\n      m_maxDeg(G.m_maxDeg)\n{\n    // We deliberately do not copy any of the \"cola stuff\",\n    // namely m_cgr, m_needNewRectangles, and m_cfdl.\n\n    // As for the SepMatrix, we are happy to have a copy of that from\n    // the existing Graph, except our copy must point back to this Graph.\n    m_sepMatrix.setGraph(this);\n}\n\nGraph::~Graph(void) {\n    delete m_cfdl;\n    for (Rectangle *r : m_cgr.rs) delete r;\n}\n\nGraph &Graph::operator=(Graph other) {\n    // Thanks to https://stackoverflow.com/a/3279550\n    swap(*this, other);\n    return *this;\n}\n\nunsigned Graph::getMaxDegree(void) const {\n    return m_maxDeg;\n}\n\nvoid Graph::addNode(Node_SP node, bool takeOwnership) {\n    // Note that, after this operation, it will be necessary to\n    // recompute Rectangles.\n    m_needNewRectangles = true;\n    // Add a copy of the Node_SP to our lookup table.\n    m_nodes.emplace(node->id(), node);\n    if (takeOwnership) {\n        // Tell the Node that this is its Graph.\n        node->setGraph(*this);\n    }\n}\n\nNode_SP Graph::addNode(void) {\n    Node_SP u = Node::allocate();\n    addNode(u);\n    return u;\n}\n\nNode_SP Graph::addNode(double w, double h) {\n    Node_SP u = Node::allocate(w, h);\n    addNode(u);\n    return u;\n}\n\nNode_SP Graph::addNode(double cx, double cy, double w, double h) {\n    Node_SP u = Node::allocate(cx, cy, w, h);\n    addNode(u);\n    return u;\n}\n\nvoid Graph::addEdge(Edge_SP edge, bool takeOwnership) {\n    // Add a copy of the Edge_SP to our lookup table.\n    m_edges.emplace(edge->id(), edge);\n    if (takeOwnership) {\n        // Tell the Node that this is its Graph.\n        edge->setGraph(*this);\n    }\n    // Update the Graph's max degree.\n    m_maxDeg = max(m_maxDeg, edge->getSourceEnd()->getDegree());\n    m_maxDeg = max(m_maxDeg, edge->getTargetEnd()->getDegree());\n}\n\nEdge_SP Graph::addEdge(Node_SP src, Node_SP tgt) {\n    Edge_SP e = Edge::allocate(src, tgt);\n    addEdge(e);\n    return e;\n}\n\nEdge_SP Graph::addEdge(const id_type &srcID, const id_type &tgtID) {\n    Node_SP src = getNode(srcID),\n            tgt = getNode(tgtID);\n    return addEdge(src, tgt);\n}\n\nbool Graph::hasNode(const id_type &id) const {\n    return m_nodes.find(id) != m_nodes.end();\n}\n\nbool Graph::hasEdge(const id_type &id) const {\n    return m_edges.find(id) != m_edges.end();\n}\n\nvoid Graph::severEdge(Edge &edge) {\n    // Call the Edge's sever method in order to remove the Edge\n    // from each of its endpoint Nodes.\n    edge.sever();\n    // And delete the Edge from our lookup.\n    m_edges.erase(edge.id());\n    // Maximum degree may have changed.\n    recomputeMaxDegree();\n}\n\nvoid Graph::severNode(const Node &node) {\n    EdgesById edges = node.getCopyOfEdgeLookup();\n    for (auto p : edges) {\n        severEdge(*p.second);\n    }\n}\n\nvector<Node_SP> Graph::severNodeNotingNeighbours(const Node &node) {\n    vector<Node_SP> nbrs;\n    EdgesById edges(node.getEdgeLookup());\n    for (auto p : edges) {\n        Edge_SP &e = p.second;\n        nbrs.push_back(e->getOtherEnd(node));\n        severEdge(*e);\n    }\n    return nbrs;\n}\n\nvoid Graph::removeNode(const Node &node) {\n    // Note that, after this operation, it will be necessary to\n    // recompute Rectangles.\n    m_needNewRectangles = true;\n    // Remove the Node from the SepMatrix.\n    m_sepMatrix.removeNode(node.id());\n    // Remove the Node from our own lookup.\n    m_nodes.erase(node.id());\n}\n\nvoid Graph::removeNodes(const NodesById &nodes) {\n    // Note that, after this operation, it will be necessary to\n    // recompute Rectangles.\n    m_needNewRectangles = true;\n    // Remove the Nodes from the SepMatrix.\n    m_sepMatrix.removeNodes(nodes);\n    // Remove the Nodes from our own lookup.\n    // We take advantage of the ordering of the maps in order to do\n    // the removal in one pass.\n    NodesById N;\n    auto p = m_nodes.cbegin();\n    auto q = nodes.cbegin();\n    while (p != m_nodes.cend() && q != nodes.cend()) {\n        id_type i = (*p).first, j = (*q).first;\n        if (i > j) ++q;\n        else {\n            if (i < j) N.insert(*p);\n            ++p;\n        }\n    }\n    while (p != m_nodes.cend()) {\n        N.insert(*p);\n        ++p;\n    }\n    m_nodes = N;\n}\n\nvoid Graph::severAndRemoveNode(const Node &node) {\n    severNode(node);\n    removeNode(node);\n}\n\nvoid Graph::severAndRemoveNode(id_type nodeID) {\n    Node_SP node = getNode(nodeID);\n    if (node != nullptr) severAndRemoveNode(*node);\n}\n\nNodes Graph::cloneNode(id_type id) {\n    Node_SP baseNode = getNode(id);\n    EdgesById edges = baseNode->getCopyOfEdgeLookup();\n    Nodes clones;\n    bool first = true;\n    for (auto p : edges) {\n        // Skip one edge.\n        if (first) {\n            first = false;\n            continue;\n        }\n        // For every other edge, we make a clone.\n        Node_SP clone = Node::allocate();\n        clone->copyGeometry(*baseNode);\n        clone->copyOtherGhostProperties(*baseNode);\n        addNode(clone);\n        clones.push_back(clone);\n        // Get the existing node at the other end of the edge.\n        Edge_SP e = p.second;\n        Node_SP nbr = e->getOtherEnd(*baseNode);\n        // Cut the old edge and add a new one.\n        severEdge(*e);\n        Edge_SP f = Edge::allocate(clone, nbr);\n        addEdge(f);\n    }\n    return clones;\n}\n\nNode_SP Graph::getNode(const id_type &id) const {\n    // Use .at() rather than [] so that we throw an exception\n    // in the case of a nonexistent ID, rather than creating a new Node_SP.\n    // (I.e. so this method can be const.)\n    return m_nodes.at(id);\n}\n\nNodesById Graph::getNodeLookupWithIgnore(const Nodes &ignore) const {\n    // Build set of IDs to be ignored.\n    std::set<id_type> toIgnore;\n    for (auto u : ignore) toIgnore.insert(u->id());\n    // Build desired lookup.\n    NodesById desired;\n    std::set_difference(m_nodes.begin(), m_nodes.end(), toIgnore.begin(), toIgnore.end(),\n                        std::inserter(desired, desired.end()), NodeIdCmp());\n    return desired;\n}\n\nNodesById Graph::getNodeLookupWithIgnore(const NodesById &ignore) const {\n    // Build desired lookup.\n    NodesById desired;\n    std::set_difference(m_nodes.begin(), m_nodes.end(), ignore.begin(), ignore.end(),\n                        std::inserter(desired, desired.end()),\n                        [](const IdNodePair &a, const IdNodePair &b)->bool {\n        return a.first < b.first;\n    });\n    return desired;\n}\n\ndouble Graph::computeAvgNodeDim(void) const {\n    double s = 0;\n    size_t n = 0;\n    dimensions d;\n    for (auto p : m_nodes) {\n        d = p.second->getDimensions();\n        s += d.first + d.second;\n        n += 2;\n    }\n    return s/n;\n}\n\nBoundingBox Graph::getBoundingBox(const NodesById &ignore, bool includeBends) const {\n    // First filter out the Nodes that are to be ignored.\n    vector<IdNodePair> keep(m_nodes.size());\n    auto it = std::set_difference(\n        m_nodes.cbegin(), m_nodes.cend(), ignore.cbegin(), ignore.cend(), keep.begin(),\n        [](const IdNodePair &lhs, const IdNodePair &rhs){ return lhs.first < rhs.first; }\n    );\n    keep.resize(it - keep.begin());\n    // Initialize an empty box.\n    BoundingBox box;\n    // Add each Node's box to it.\n    for (auto p : keep) {\n        box += p.second->getBoundingBox();\n    }\n    // If we want to include bend points, then also add each Edge's box.\n    if (includeBends) {\n        for (auto p : m_edges) {\n            box += p.second->getBoundingBox();\n        }\n    }\n    return box;\n}\n\nvector<Graph_SP> Graph::getConnComps(void) const {\n    vector<Graph_SP> comps;\n    // Make a copy of the Node lookup. This will keep track of any Nodes we have\n    // not yet explored in our BFSes.\n    NodesById remaining(m_nodes);\n    while (!remaining.empty()) {\n        // Initialize a new component Graph.\n        Graph_SP new_comp = make_shared<Graph>();\n        // Take a remaining Node...\n        auto it = remaining.cbegin();\n        Node_SP u0 = it->second;\n        remaining.erase(it);\n        // ...and add it to the new component.\n        new_comp->addNode(u0, false);\n        // We do BFS outward from this node.\n        // We use a queue holding pairs: an Edge to follow, and the Node we reach\n        // by following it.\n        deque<pair<Edge_SP, Node_SP>> bfs_queue;\n        // Initialize the queue with the edges incident to the initial node.\n        EdgesById initialEdges = u0->getEdgeLookup();\n        size_t n = initialEdges.size();\n        bfs_queue.resize(n);\n        std::transform(\n            initialEdges.cbegin(), initialEdges.cend(), bfs_queue.begin(),\n            [&u0](const IdEdgePair &p) -> pair<Edge_SP, Node_SP> {\n                return {p.second, p.second->getOtherEnd(*u0)};\n            }\n        );\n        // Now do BFS.\n        Edge_SP e;\n        Node_SP v;\n        while (!bfs_queue.empty()) {\n            // Take from the front of the queue.\n            e = bfs_queue.front().first;\n            v = bfs_queue.front().second;\n            bfs_queue.pop_front();\n            // Add the Edge if not already in the new component.\n            if (!new_comp->hasEdge(e->id())) new_comp->addEdge(e, false);\n            // If the Node is already in the new component then continue to next case.\n            if (new_comp->hasNode(v->id())) continue;\n            // Otherwise add the Node to the new component...\n            new_comp->addNode(v, false);\n            // ...remove it from the remaining set...\n            remaining.erase(v->id());\n            // ...and extend the queue using the new node's incident edges.\n            EdgesById newEdges = v->getEdgeLookup();\n            n = newEdges.size();\n            size_t m = bfs_queue.size();\n            bfs_queue.resize(m+n);\n            std::transform(\n                newEdges.cbegin(), newEdges.cend(), bfs_queue.end() - n,\n                [&v](const IdEdgePair &p) -> pair<Edge_SP, Node_SP> {\n                    return {p.second, p.second->getOtherEnd(*v)};\n                }\n            );\n        }\n        // When the queue is empty we should have explored the entire\n        // connected component. Add it to the list.\n        comps.push_back(new_comp);\n    }\n    // Return the list of components.\n    return comps;\n}\n\nvoid Graph::getChainsAndCycles(std::vector<std::deque<Node_SP> > &chains, std::vector<std::deque<Node_SP> > &cycles) {\n    // First identify all links in the Graph, i.e. Nodes of degree 2.\n    std::set<Node_SP> allLinks;\n    for (auto p : m_nodes) {\n        Node_SP u = p.second;\n        if (u->getDegree() == 2) allLinks.insert(u);\n    }\n    // Now we explore all the links, building chains and cycles.\n    while (!allLinks.empty()) {\n        // Take any link still in the set.\n        auto it = allLinks.begin();\n        Node_SP L0 = *it;\n        allLinks.erase(it);\n        // Initialise a deque to hold all links in the chain to which L0 belongs.\n        std::deque<Node_SP> links{L0};\n        // Get the two Edges incident to L0, and prepare to explore in both directions.\n        const EdgesById &E0 = L0->getEdgeLookup();\n        COLA_ASSERT(E0.size() == 2);\n        int direc = -1;\n        bool isPolygon = false;\n        for (auto p : E0) {\n            Edge_SP e = p.second;\n            if (isPolygon) break;\n            // Explore from link L0 in one direction.\n            direc *= -1;\n            Node_SP last = L0;\n            bool done = false;\n            while (!done) {\n                // Consider the next node in the current direction.\n                Node_SP next = e->getOtherEnd(*last);\n                if (next == L0) {\n                    // In this case the entire connected component to which L0 belongs is\n                    // a mere polygon.\n                    isPolygon = true;\n                    cycles.push_back(links);\n                    links.clear();\n                    done = true;\n                } else if (next->getDegree() == 2) {\n                    // This must be a link which we have not encountered before.\n                    allLinks.erase(next);\n                    // Add this link to the correct side of the deque, according to the\n                    // direction in which we are currently exploring.\n                    if (direc == 1) {\n                        links.push_back(next);\n                    } else {\n                        links.push_front(next);\n                    }\n                    // Get that one of the two incident edges to node 'next' that leads onward, away from 'last'.\n                    const EdgesById &E1 = next->getEdgeLookup();\n                    for (auto q : E1) {\n                        if (q.second != e) {\n                            e = q.second;\n                            break;\n                        }\n                    }\n                    last = next;\n                } else {\n                    // We've reached the \"anchor node\" at one end of the chain.\n                    done = true;\n                }\n            }\n        }\n        // Now we have explored from link L0 in both directions, or else found that\n        // it belonged to a polygon. The case is the former iff links is nonempty.\n        if (!links.empty()) chains.push_back(links);\n    }\n}\n\nstring Graph::writeTglf(bool useExternalIds) const {\n    map<id_type, unsigned> id2ext;\n    int base_id = 0;\n    ostringstream ss, edges_ss;\n    // Nodes\n    if (useExternalIds) {\n        /* We will write external IDs for all Nodes for which they have been set.\n         * However, in case there are some nodes that do not have external IDs (which happens,\n         * for example, when new nodes, such as bend nodes, have been generated), we first\n         * determine the maximum external ID, and then generate new IDs based on that.\n        */\n        int max_ext_id = -1;\n        int first_int_id_lacking_ext = -1;\n        for (auto pair : m_nodes) {\n            id_type id = pair.first;\n            Node_SP &u = pair.second;\n            int ext_id = u->getExternalId();\n            max_ext_id = max(max_ext_id, ext_id);\n            if (ext_id == -1 && first_int_id_lacking_ext == -1) first_int_id_lacking_ext = id;\n        }\n        base_id = max_ext_id + 1;\n        // However, to make debugging easier, we also want to avoid shifting any internal IDs\n        // unless necessary in order to avoid collisions.\n        if (first_int_id_lacking_ext > max_ext_id) base_id = 0;\n    }\n    for (auto pair : m_nodes) {\n        id_type id = pair.first;\n        Node_SP node = pair.second;\n        Point c = node->getCentre();\n        dimensions d = node->getDimensions();\n        if (useExternalIds) {\n            int ext_id = node->getExternalId();\n            if (ext_id < 0) ext_id = base_id + id;\n            id2ext.insert({id, ext_id});\n            id = (id_type) ext_id;\n        }\n        ss << id << \" \" << c.x << \" \" << c.y << \" \" << d.first << \" \" << d.second << \"\\n\";\n    }\n    // Edges\n    for (auto p : m_edges) {\n        id_type sid = p.second->getSourceEnd()->id(),\n                tid = p.second->getTargetEnd()->id();\n        if (useExternalIds) {\n            sid = id2ext.at(sid);\n            tid = id2ext.at(tid);\n        }\n        edges_ss << sid << \" \" << tid << p.second->writeRouteTglf() << \"\\n\";\n    }\n    string edges_tglf = edges_ss.str();\n    // SepCos\n    string sepcos_tglf = m_sepMatrix.writeTglf(id2ext);\n    // Put it all together.\n    bool have_edges  = !edges_tglf.empty(),\n         have_sepcos = !sepcos_tglf.empty();\n    if (have_edges || have_sepcos) {\n        ss << \"#\\n\" << edges_tglf;\n        if (have_sepcos) {\n            ss << \"#\\n\" << sepcos_tglf;\n        }\n    }\n    return ss.str();\n}\n\nstring Graph::writeSvg(bool useExternalIds) const {\n    NodesById ignore;\n    bool includeBends = true;\n    BoundingBox b = getBoundingBox(ignore, includeBends);\n    double pad = 8;\n    b.x -= pad; b.X += pad; b.y -= pad; b.Y += pad;\n    ostringstream ss;\n    ss << \"<?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?>\\n\";\n    ss << \"<svg xmlns:inkscape=\\\"http://www.inkscape.org/namespaces/inkscape\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"100%%\\\" height=\\\"100%%\\\" \";\n    ss << string_format(\"viewBox=\\\"%g %g %g %g\\\">\\n\", b.x, b.y, b.w(), b.h());\n    // Edges\n    for (auto p : m_edges) {\n        Edge_SP e = p.second;\n        ss << e->writeSvg();\n    }\n    // Nodes\n    for (auto p : m_nodes) {\n        Node_SP u = p.second;\n        ss << u->writeSvg(useExternalIds);\n    }\n    ss << \"</svg>\\n\";\n    return ss.str();\n}\n\nvoid Graph::recomputeMaxDegree(void) {\n    unsigned m = 0;\n    for (auto p : m_nodes) m = max(m, p.second->getDegree());\n    m_maxDeg = m;\n}\n\ndouble Graph::autoInferIEL(void) {\n    m_iel = 2*computeAvgNodeDim();\n    return m_iel;\n}\n\ndouble Graph::getIEL(void) {\n    if (m_iel == 0) autoInferIEL();\n    return m_iel;\n}\n\ndouble Graph::recomputeIEL(void) {\n    autoInferIEL();\n    return m_iel;\n}\n\ndouble Graph::computeStress(void) {\n    // Update the positions in our CFDL object.\n    for (auto p : m_nodes) {\n        Node_SP &u = p.second;\n        id_type id = u->id();\n        Point c = u->getCentre();\n        m_cfdl->X[m_cgr.id2ix.at(id)] = c.x;\n        m_cfdl->Y[m_cgr.id2ix.at(id)] = c.y;\n    }\n    // Then ask it to compute the stress.\n    return m_cfdl->computeStress();\n}\n\nColaGraphRep &Graph::updateColaGraphRep(void) {\n    // Only redo the Rectangles and index maps if necessary.\n    if (m_needNewRectangles) {\n        for (auto r : m_cgr.rs) delete r;\n        m_cgr.rs.clear();\n        m_cgr.id2ix.clear();\n        m_cgr.ix2id.clear();\n        size_t i = 0;\n        for (auto p : m_nodes) {\n            BoundingBox b = p.second->getBoundingBox();\n            m_cgr.rs.push_back(new Rectangle(b.x, b.X, b.y, b.Y));\n            m_cgr.id2ix.emplace(p.first, i);\n            m_cgr.ix2id.emplace(i, p.first);\n            ++i;\n        }\n        // Note that it is now unnecessary to recompute Rectangles.\n        m_needNewRectangles = false;\n    }\n    // We always redo the cola::Edges. They are simple pairs of IDs,\n    // and we pass copies around, rather than pointers.\n    m_cgr.es.clear();\n    for (auto p : m_edges) {\n        m_cgr.es.emplace_back(\n            m_cgr.id2ix[p.second->getSourceEnd()->id()],\n            m_cgr.id2ix[p.second->getTargetEnd()->id()]\n        );\n    }\n    // Update the CFDL too.\n    delete m_cfdl;\n    m_cfdl = new cola::ConstrainedFDLayout(\n        m_cgr.rs, m_cgr.es, m_iel\n    );\n    // Return\n    return m_cgr;\n}\n\ncola::RootCluster *Graph::buildRootCluster(const ColaOptions &opts) {\n    // Delete the old cluster, if any.\n    delete m_cgr.rc;\n    // Allocate a new one.\n    cola::RootCluster *rc = new cola::RootCluster();\n    // Add clusters.\n    for (NodesById nodes : opts.nodeClusters) {\n        cola::RectangularCluster *c = new cola::RectangularCluster();\n        for (auto p : nodes) {\n            id_type id = p.first;\n            c->addChildNode(m_cgr.id2ix.at(id));\n        }\n        rc->addChildCluster(c);\n    }\n    // Store and return.\n    m_cgr.rc = rc;\n    return rc;\n}\n\nvoid Graph::updateNodesFromRects(bool xAxis, bool yAxis) {\n    for (auto p : m_nodes) {\n        Rectangle *r = m_cgr.rs.at(m_cgr.id2ix[p.second->id()]);\n        Node_SP u = p.second;\n        if (xAxis) u->updateXCoordFromRect(r);\n        if (yAxis) u->updateYCoordFromRect(r);\n    }\n}\n\nvoid Graph::rotate90cw(ColaOptions *opts) {\n    // Prepare node map, edge map, sep transform, and pass to generic method.\n    auto nodeMap = Compass::getRotationFunction(CardinalDir::EAST, CardinalDir::SOUTH);\n    std::function<void(Edge_SP)> edgeMap = [](Edge_SP e)->void{e->rotate90cw();};\n    SepTransform st = SepTransform::ROTATE90CW;\n    rotate90(nodeMap, edgeMap, st, opts);\n}\n\nvoid Graph::rotate90acw(ColaOptions *opts) {\n    // Prepare node map, edge map, sep transform, and pass to generic method.\n    auto nodeMap = Compass::getRotationFunction(CardinalDir::EAST, CardinalDir::NORTH);\n    std::function<void(Edge_SP)> edgeMap = [](Edge_SP e)->void{e->rotate90acw();};\n    SepTransform st = SepTransform::ROTATE90ACW;\n    rotate90(nodeMap, edgeMap, st, opts);\n}\n\nvoid Graph::rotate90(PlaneMap nodeMap, std::function<void (Edge_SP)> edgeMap, SepTransform st, ColaOptions *opts) {\n\n    // Set up for logging.\n    Logger *logger = opts != nullptr ? opts->logger : nullptr;\n    unsigned ln = logger != nullptr ? logger->nextLoggingIndex : 0;\n    unsigned lns = 0;\n    std::function<void(string)> log = [this, logger](string name)->void{\n        if (logger!=nullptr) logger->log(*this, name);\n    };\n\n    // Rotate nodes.\n    // Note: This just means rotating their coordinates, not flipping their dimensions.\n    // The latter would be an operation quite outside what layout is intended to do.\n    for (auto p : m_nodes) {\n        Node_SP u = p.second;\n        Point q = u->getCentre(),\n              r = nodeMap(q);\n        u->setCentre(r.x, r.y);\n    }\n    log(string_format(\"%02d_%02d_rotated_nodes\", ln, lns++));\n    // Rotate edges (i.e. ask them to rotate their connector routes).\n    for (auto p : m_edges) edgeMap(p.second);\n    log(string_format(\"%02d_%02d_rotated_edges\", ln, lns++));\n    // Rotate constraints.\n    m_sepMatrix.transform(st);\n    log(string_format(\"%02d_%02d_rotated_constraints\", ln, lns++));\n    // And finally destress if requested.\n    if (opts != nullptr) {\n        if (logger != nullptr) logger->nextLoggingIndex = ln + 1;\n        destress(*opts);\n    }\n}\n\nvoid Graph::rotate180(void) {\n    // Rotate nodes.\n    auto f = Compass::getRotationFunction(CardinalDir::EAST, CardinalDir::WEST);\n    for (auto p : m_nodes) {\n        Node_SP u = p.second;\n        Point q = u->getCentre(),\n              r = f(q);\n        u->setCentre(r.x, r.y);\n    }\n    // Rotate edges.\n    for (auto p : m_edges) p.second->rotate180();\n    // Rotate constraints.\n    m_sepMatrix.transform(SepTransform::ROTATE180);\n}\n\nvoid Graph::translate(double dx, double dy) {\n    // Translate nodes.\n    for (auto p : m_nodes) p.second->translate(dx, dy);\n    // Rotate edges.\n    for (auto p : m_edges) p.second->translate(dx, dy);\n}\n\nvoid Graph::putInBasePosition(void) {\n    clearAllRoutes();\n    clearAllConstraints();\n    size_t z = 0;\n    for (auto p : m_nodes) {\n        Node_SP u = p.second;\n        u->setCentre(z, z);\n        ++z;\n    }\n}\n\nbool Graph::hasSameLayoutAs(const Graph &other, double tol, id_map *idMap) const {\n    try {\n        // We start by building a lookup of the other Graph's Nodes by the IDs of\n        // this Graph's corresponding Nodes.\n        NodesById yourNodesByMyIds;\n        if (idMap == nullptr) {\n            // Build an ID map from the external IDs of this Graph's Nodes\n            // to their internal IDs.\n            id_map g;\n            for (auto p : m_nodes) {\n                Node_SP u = p.second;\n                g.insert({u->getExternalId(), u->id()});\n            }\n            // Now we can build the lookup we want.\n            for (auto p : other.getNodeLookup()) {\n                Node_SP u = p.second;\n                yourNodesByMyIds.insert({g.at(u->getExternalId()), u});\n            }\n        } else {\n            for (auto p : other.getNodeLookup()) {\n                Node_SP u = p.second;\n                yourNodesByMyIds.insert({idMap->at(u->id()), u});\n            }\n        }\n        // Next we need a lookup for the Edges of the other Graph.\n        SparseIdMatrix2d<Edge_SP>::type yourEdges = other.getEdgeBySrcIdTgtIdLookup();\n        // Check node positions.\n        for (auto p : m_nodes) {\n            Node_SP u = p.second,\n                    v = yourNodesByMyIds.at(u->id());\n            Point cu = u->getCentre(),\n                  cv = v->getCentre(),\n                  dc = cv - cu;\n            if (fabs(dc.x) > tol || fabs(dc.y) > tol) return false;\n        }\n        // Check edge routes.\n        for (auto p : m_edges) {\n            Edge_SP e = p.second;\n            Node_SP s = yourNodesByMyIds.at(e->getSourceEnd()->id()),\n                    t = yourNodesByMyIds.at(e->getTargetEnd()->id());\n            Edge_SP f = yourEdges.at(s->id()).at(t->id());\n            vector<Point> eRoute = e->getRoute(),\n                          fRoute = f->getRoute();\n            if (eRoute.size() != fRoute.size()) return false;\n            auto it = eRoute.begin();\n            auto jt = fRoute.begin();\n            while (it != eRoute.end()) {\n                Point dc = *it - *jt;\n                if (fabs(dc.x) > tol || fabs(dc.y) > tol) return false;\n                ++it; ++jt;\n            }\n        }\n    } catch (std::out_of_range const&) {\n        // We invoke the .at() method of various maps, above.\n        // If any of these fails, the two Graphs do not have the same layout.\n        return false;\n    }\n    // If we make it to the end, all tests are passed.\n    return true;\n}\n\nSparseIdMatrix2d<Edge_SP>::type Graph::getEdgeBySrcIdTgtIdLookup(void) const {\n    SparseIdMatrix2d<Edge_SP>::type lookup;\n    for (auto p : m_edges) {\n        Edge_SP e = p.second;\n        Node_SP s = e->getSourceEnd(),\n                t = e->getTargetEnd();\n        lookup[s->id()][t->id()] = e;\n    }\n    return lookup;\n}\n\nvoid Graph::destress(void) {\n    ColaOptions opts;\n    destress(opts);\n}\n\nvoid Graph::destress(const ColaOptions &opts) {\n\n    // Set up for logging.\n    Logger *logger = opts.logger;\n    unsigned ln = logger != nullptr ? logger->nextLoggingIndex : 0;\n    unsigned lns = 0;\n    std::function<void(Graph&, string)> log = [logger](Graph &H, string name)->void{\n        if (logger!=nullptr) logger->log(H, name);\n    };\n\n    // Handle the version with solidified edges separately:\n    if (opts.solidifyAlignedEdges) {\n        // Copy the opts and deactivate the aligned edges option to avoid infinite loop.\n        ColaOptions opts2(opts);\n        opts2.solidifyAlignedEdges = false;\n        // Also make sure the options request makeFeasible, which should always be done first,\n        // so that any overlaps between edgenodes are resolved in the right way.\n        // Don't use any extra border.\n        opts2.makeFeasible = true;\n        opts2.makeFeasible_xBorder = 0;\n        opts2.makeFeasible_yBorder = 0;\n        // Make two copies of this graph, with solidified edges in each dimension, and destress there.\n        // Since the new Graphs point to the same Nodes, the layout is successfully updated automatically.\n        Graph Hx(*this), Hy(*this);\n\n        // Work in x-dimension, with solid vertical edges:\n        Hy.solidifyAlignedEdges(vpsc::YDIM, opts2);\n        log(Hy, string_format(\"%02d_%02d_with_solid_V_edges\", ln, lns++));\n        opts2.xAxis = true;\n        opts2.yAxis = false;\n        Hy.destress(opts2);\n        log(Hy, string_format(\"%02d_%02d_destressed_with_solid_V_edges\", ln, lns++));\n\n        // Work in y-dimension, with solid horizontal edges:\n        Hx.solidifyAlignedEdges(vpsc::XDIM, opts2);\n        log(Hx, string_format(\"%02d_%02d_with_solid_H_edges\", ln, lns++));\n        opts2.xAxis = false;\n        opts2.yAxis = true;\n        Hx.destress(opts2);\n        log(Hx, string_format(\"%02d_%02d_destressed_with_solid_H_edges\", ln, lns++));\n\n    } else {\n        // Make sure our rectangles etc. are up to date.\n        updateColaGraphRep();\n        // Set up the clustering, if any.\n        buildRootCluster(opts);\n        // Set up the ideal edge length.\n        double iel = opts.idealEdgeLength;\n        if (iel == 0) iel = getIEL();\n        // If using neighbour stress, apply the scalar.\n        if (opts.useNeighbourStress) iel *= opts.nbrStressIELScalar;\n        // Set up the constraints.\n        // Start with a copy of those given.\n        cola::CompoundConstraints ccs(opts.ccs);\n        // And add the SepMatrix.\n        // (We cannot simply add the SepMatrix to the given vector, since this would lead to redundant\n        //  constraints if the same ColaOptions object was used again.)\n        ccs.push_back(&m_sepMatrix);\n        // Construct and run the layout object.\n        if (opts.useMajorization) {\n            // We use ConstrainedMajorizationLayout.\n            cola::ConstrainedMajorizationLayout alg(\n                        m_cgr.rs, m_cgr.es, m_cgr.rc, iel,\n                        opts.eLengths, opts.doneTest, opts.preIteration, opts.useNeighbourStress\n            );\n\n            alg.setAvoidOverlaps(opts.preventOverlaps);\n            alg.setScaling(opts.useScaling);\n            alg.setConstraints(&ccs);\n            alg.run(opts.xAxis, opts.yAxis);\n        } else {\n            // We use ConstrainedFDLayout.\n            cola::ConstrainedFDLayout alg(\n                        m_cgr.rs, m_cgr.es, iel, opts.eLengths, opts.doneTest, opts.preIteration\n            );\n            alg.setAvoidNodeOverlaps(opts.preventOverlaps);\n            alg.setUseNeighbourStress(opts.useNeighbourStress);\n            alg.setConstraints(ccs);\n            alg.setClusterHierarchy(m_cgr.rc);\n            if (opts.makeFeasible) alg.makeFeasible(opts.makeFeasible_xBorder, opts.makeFeasible_yBorder);\n            alg.run(opts.xAxis, opts.yAxis);\n        }\n        // Update node positions.\n        updateNodesFromRects(opts.xAxis, opts.yAxis);\n    }\n}\n\nstring Graph::writeId2Ix(void) const {\n    ostringstream ss;\n    for (auto p : m_cgr.id2ix) ss << p.first << \": \" << p.second << std::endl;\n    return ss.str();\n}\n\nstring Graph::writeIx2Id(void) const {\n    ostringstream ss;\n    for (auto p : m_cgr.ix2id) ss << p.first << \": \" << p.second << std::endl;\n    return ss.str();\n}\n\nvoid Graph::makeFeasible(const ColaOptions &opts) {\n\n    // Set up for logging.\n    Logger *logger = opts.logger;\n    unsigned ln = logger != nullptr ? logger->nextLoggingIndex : 0;\n    unsigned lns = 0;\n    std::function<void(Graph&, string)> log = [logger](Graph &H, string name)->void{\n        if (logger!=nullptr) logger->log(H, name);\n    };\n\n    // Handle the version with solidified edges separately:\n    if (opts.solidifyAlignedEdges) {\n        // Copy the opts and deactivate the aligned edges option to avoid infinite loop.\n        ColaOptions opts2(opts);\n        opts2.solidifyAlignedEdges = false;\n        // Make a copy of this graph, with solidified edges in both dimensions, and make feasible there.\n        Graph H(*this);\n        H.solidifyAlignedEdges(vpsc::XDIM, opts2);\n        //log(H, string_format(\"%02d_%02d_solid_H_edges\", ln, lns++));\n        H.solidifyAlignedEdges(vpsc::YDIM, opts2);\n        log(H, string_format(\"%02d_%02d_solid_H_and_V_edges\", ln, lns++));\n        H.makeFeasible(opts2);\n    } else {\n        // Make sure our rectangles etc. are up to date.\n        updateColaGraphRep();\n        // Set up the clustering, if any.\n        buildRootCluster(opts);\n        // Set up the ideal edge length.\n        // While makeFeasible only does projection (so IEL is irrelevant), we do need to\n        // construct a CFDL object to do it, which requires an IEL.\n        double iel = opts.idealEdgeLength;\n        if (iel == 0) iel = getIEL();\n        // Set up the constraints.\n        // Start with a copy of those given.\n        cola::CompoundConstraints ccs(opts.ccs);\n        // And add the SepMatrix.\n        ccs.push_back(&m_sepMatrix);\n        // Construct the layout object and ask it to make feasible.\n        cola::ConstrainedFDLayout alg(\n            m_cgr.rs, m_cgr.es, iel, opts.eLengths, opts.doneTest, opts.preIteration\n        );\n        alg.setAvoidNodeOverlaps(opts.preventOverlaps);\n        alg.setConstraints(ccs);\n        alg.setClusterHierarchy(m_cgr.rc);\n        alg.makeFeasible(opts.makeFeasible_xBorder, opts.makeFeasible_yBorder);\n        // Update node positions.\n        updateNodesFromRects(opts.xAxis, opts.yAxis);\n    }\n}\n\nint Graph::project(const ColaOptions &opts, vpsc::Dim dim, int accept) {\n    // Handle the version with solidified edges separately:\n    if (opts.solidifyAlignedEdges) {\n        // Copy the opts and deactivate the aligned edges option to avoid infinite loop.\n        ColaOptions opts2(opts);\n        opts2.solidifyAlignedEdges = false;\n        // Make a copy of this graph, with solidified edges, and project there.\n        // Since the new Graph points to the same Nodes, the layout is successfully updated automatically.\n        Graph H(*this);\n        H.solidifyAlignedEdges(vpsc::conjugate(dim), opts2);\n        return H.project(opts2, dim, accept);\n    } else {\n        // Make sure our rectangles etc. are up to date.\n        updateColaGraphRep();\n        // Set up the constraints.\n        // Start with a copy of those given.\n        cola::CompoundConstraints ccs(opts.ccs);\n        // And add the SepMatrix.\n        ccs.push_back(&m_sepMatrix);\n        // Project.\n        unsigned debugLevel = m_projectionDebugLevel;\n        cola::ProjectionResult result = cola::projectOntoCCs(dim, m_cgr.rs, ccs, opts.preventOverlaps, accept, debugLevel);\n        if (debugLevel > 0) {\n            std::string usi = result.unsatinfo;\n            size_t n = usi.length();\n            if (n > 77) { // Header is 77 chars. String is longer iff has actual unsat constraints.\n                // Show ix2id map.\n                std::cout << \"VPSC var indices to Node Ids:\\n\" << std::endl;\n                for (auto p : m_cgr.ix2id) std::cout << p.first << \" --> \" << p.second << \"\\n\";\n                // Show graph.\n                writeStringToFile(writeTglf(), m_debugOutputPath+\"failed_projection.tglf\");\n            }\n            std::cout << result.unsatinfo << std::endl;\n        }\n        int errorLevel = result.errorLevel;\n        // Accept new node positions conditionally:\n        if (errorLevel <= accept) updateNodesFromRects();\n        // Return the error level.\n        return errorLevel;\n    }\n}\n\nint Graph::projectOntoSepCo(const ColaOptions &opts, SepCo_SP sepco, int accept) {\n    updateColaGraphRep();\n    ColaOptions opts2(opts);\n    sepco->generateColaConstraints(m_cgr, opts2.ccs);\n    return project(opts2, sepco->dim, accept);\n}\n\nbool Graph::applyProjSeq(const ColaOptions &opts, ProjSeq &ps, int accept) {\n    updateColaGraphRep();\n    // Set up the ideal edge length.\n    double iel = opts.idealEdgeLength;\n    if (iel == 0) iel = getIEL();\n    // Do stress computations iff iel >= 0.\n    double lastStress = 0.0;\n    if (iel >= 0) lastStress = computeStress();\n    // We will check whether all projections work.\n    bool allOK = true;\n    // Get first projection.\n    Projection_SP proj = ps.nextProjection();\n    // Keep going until there are no more.\n    while (proj != nullptr) {\n        // Act only if projection is nonempty.\n        if (proj->size() > 0) {\n            // Copy the options and set the constraints in the copy.\n            ColaOptions projOpts(opts);\n            projOpts.ccs = proj->generateColaConstraints(m_cgr);\n            // Do the projection.\n            int result = project(projOpts, proj->dim, accept);\n            // Clean up.\n            for (cola::CompoundConstraint *cc : projOpts.ccs) delete cc;\n            // If result not acceptable, note this.\n            if (result > accept) allOK = false;\n            // Do stress computation if desired.\n            if (iel >= 0) {\n                double stress = computeStress();\n                double dS = stress - lastStress;\n                ps.noteStresschange(dS);\n                lastStress = stress;\n            }\n            // Now break if the projection didn't work.\n            if (!allOK) break;\n        }\n        // Get the next projection.\n        proj = ps.nextProjection();\n    }\n    // Report whether all projections worked or not.\n    return allOK;\n}\n\nvoid Graph::solidifyAlignedEdges(vpsc::Dim dim, const ColaOptions &opts) {\n    // For the nodes representing aligned Edges, we avoid making rectangles that would be shorter\n    // than a certain minimal length. (If they are zero length, VPSC is unhappy.)\n    // Constants have been experimnetally determined.\n    const double MIN_LENGTH = 0.01;\n    const double GAP = 1;\n    // Exemptions may be passed in the ColaOptions, in the form of an EdgesById lookup.\n    // Thus have two ordered lookups of Edges to compare, so iterate properly for linear time complexity.\n    auto it = m_edges.begin();\n    auto jt = opts.solidEdgeExemptions.cbegin();\n    auto exemptionsEnd = opts.solidEdgeExemptions.cend();\n    while (it != m_edges.end()) {\n        auto p = *it;\n        if (jt != exemptionsEnd) {\n            auto q = *jt;\n            id_type id = p.first,\n                    jd = q.first;\n            if (id > jd) {\n                ++jt;\n                continue;\n            } else if (id == jd) {\n                // This edge is exempt.\n                ++it;\n                continue;\n            }\n        }\n        ++it;\n        // Otherwise the edge is not exempt.\n        Edge_SP &e = p.second;\n        Node_SP src = e->getSourceEnd(),\n                tgt = e->getTargetEnd();\n        id_type sid = src->id(),\n                tid = tgt->id();\n        bool edgeIsAligned = dim == vpsc::HORIZONTAL ?\n                    m_sepMatrix.areHAligned(sid, tid) :\n                    m_sepMatrix.areVAligned(sid, tid);\n        if (edgeIsAligned) {\n            // Form the \"edgenode\".\n            Node_SP edgeNode = Node::allocate();\n            // Get local nodes of matching IDs.\n            // This is important so that we get the latest coordinates.\n            // (When working with GhostNodes, there may be different, older Nodes,\n            // at the ends of the Edge itself.)\n            src = m_nodes.at(sid);\n            tgt = m_nodes.at(tid);\n            // Get bounding boxes and centres.\n            BoundingBox bsrc = src->getBoundingBox(),\n                        btgt = tgt->getBoundingBox();\n            Point csrc = src->getCentre(),\n                  ctgt = tgt->getCentre();\n            // We'll need to set the direction and gap for the constraints.\n            SepDir sd;\n            double srcGap, tgtGap;\n            // Set position and dimensions for edgenode, and determine the cardinal direction.\n            if (dim == vpsc::VERTICAL) {\n                double h = min(\n                    fabs(btgt.y - bsrc.Y), fabs(bsrc.y - btgt.Y)\n                ) - 2*GAP;\n                if (h < MIN_LENGTH) continue;\n                edgeNode->setDims(m_edge_thickness, h);\n                double cx = (csrc.x + ctgt.x) / 2.0,\n                       cy = min(bsrc.Y, btgt.Y) + h/2.0 + GAP;\n                edgeNode->setCentre(cx, cy);\n                if (csrc.y < ctgt.y) {\n                    sd = SepDir::SOUTH;\n                    srcGap = cy - csrc.y;\n                    tgtGap = ctgt.y - cy;\n                } else {\n                    sd = SepDir::NORTH;\n                    srcGap = csrc.y - cy;\n                    tgtGap = cy - ctgt.y;\n                }\n            } else {\n                double w = min(\n                    fabs(btgt.x - bsrc.X), fabs(bsrc.x - btgt.X)\n                ) - 2*GAP;\n                if (w < MIN_LENGTH) continue;\n                edgeNode->setDims(w, m_edge_thickness);\n                double cy = (csrc.y + ctgt.y) / 2.0,\n                       cx = min(bsrc.X, btgt.X) + w/2.0 + GAP;\n                edgeNode->setCentre(cx, cy);\n                if (csrc.x < ctgt.x) {\n                    sd = SepDir::EAST;\n                    srcGap = cx - csrc.x;\n                    tgtGap = ctgt.x - cx;\n                } else {\n                    sd = SepDir::WEST;\n                    srcGap = csrc.x - cx;\n                    tgtGap = cx - ctgt.x;\n                }\n            }\n            // Add the node to the graph.\n            addNode(edgeNode);\n            // Set constraints.\n            // NB: It is very important that we free the constraint on src and tgt in addition\n            // to setting the new constraints on src and the edgeNode, and on tgt and edgeNode.\n            // Otherwise we will pass redundant equality constraints to VPSC, which will report\n            // an unsatisfiability.\n            id_type sid = src->id(),\n                    tid = tgt->id(),\n                    eid = edgeNode->id();\n            m_sepMatrix.free(sid, tid);\n            // NB: Another very important implementation detail is that we use CENTRE gaps\n            // here, not BDRY gaps. For if the user has set an extra boundary gap in the SepMatrix,\n            // then the gaps will be made much larger than we want.\n            // Objection: But the gap is irrelevant because when using solid vertical edges\n            // we only project in the x-dimension, and vice versa.\n            // Reply: That is /one/ way in which solid edges are used, in particular when they are\n            // used by the Graph's destress method. However there are other times when both vertical and\n            // horizontal edges are used in conjunction, while projecting in both dimensions; for example,\n            // this happens in the Graph's makeFeasible method.\n            m_sepMatrix.addSep(sid, eid, GapType::CENTRE, sd, SepType::INEQ, srcGap);\n            m_sepMatrix.addSep(eid, tid, GapType::CENTRE, sd, SepType::INEQ, tgtGap);\n        }\n    }\n}\n\nNodesById Graph::buildUniqueBendPoints(void) {\n    // Initialise return value.\n    NodesById bendNodes;\n    // We want to be able to find nearby nodes, since we'll consider any within\n    // half-integer distance to be the same.\n    NearbyObjectFinder<Node_SP> nof(0.5);\n    // Consider all Edges in the Graph:\n    for (auto pair : m_edges) {\n        Edge_SP &e = pair.second;\n        vector<Point> route = e->getRoute();\n        // If the route does not contain at least three points, then it has no bends,\n        // so we skip this Edge.\n        size_t N = route.size();\n        if (N < 3) continue;\n        // Otherwise we need to prepare the vector of bend Nodes on this Edge's route.\n        Nodes routeBends;\n        // For display/testing purposes, we want the bend nodes we create to\n        // look smaller than the average node in the graph.\n        double bendNodeSize = getIEL()/8.0;\n        // Consider the interior points of the route.\n        for (size_t j = 1; j < N - 1; ++j) {\n            Point p = route[j];\n            // Do we already have a bend node near enough to this point?\n            Node_SP bend = nof.findObject(p.x, p.y);\n            // If not, we will create a new bend node.\n            if (bend == nullptr) {\n                bend = Node::allocate();\n                // Set its position and dimensions.\n                bend->setCentre(p.x, p.y);\n                bend->setDims(bendNodeSize, bendNodeSize);\n                // Record it in the lookup.\n                bendNodes[bend->id()] = bend;\n                // And put it in the object finder.\n                nof.addObject(p.x, p.y, bend);\n            }\n            // Whether we created a new bend node, or found an existing one near enough to the\n            // given route point, add the bend to the Edge's route.\n            routeBends.push_back(bend);\n        }\n        // Set the route bends in the Edge.\n        e->setBendNodes(routeBends);\n    }\n    // Return.\n    return bendNodes;\n}\n\nvoid Graph::pushNodePositions(void) {\n    std::map<id_type, Point> positions;\n    for (auto p : m_nodes) {\n        Node_SP &u = p.second;\n        id_type id = u->id();\n        Point c = u->getCentre();\n        positions.insert({id, c});\n    }\n    m_posStack.push(positions);\n}\n\nbool Graph::popNodePositions(void) {\n    // If stack is empty, return false.\n    if (m_posStack.empty()) return false;\n    // Otherwise restore Node positions based on top element on stack.\n    std::map<id_type, Point> &positions = m_posStack.top();\n    for (auto p : m_nodes) {\n        Node_SP &u = p.second;\n        id_type id = u->id();\n        Point c = positions.at(id);\n        u->setCentre(c.x, c.y);\n    }\n    // Pop the top element and return true.\n    m_posStack.pop();\n    return true;\n}\n\nvoid Graph::padAllNodes(double dw, double dh) {\n    for (auto p : m_nodes) {\n        Node_SP u = p.second;\n        u->addPadding(dw, dh);\n    }\n}\n\nvoid Graph::setPosesInCorrespNodes(Graph &H) {\n    NodesById nodes_H = H.getNodeLookup();\n    auto it = m_nodes.begin();\n    auto jt = nodes_H.begin();\n    while (it != m_nodes.end() && jt != nodes_H.end()) {\n        auto p = *it;\n        auto q = *jt;\n        id_type i = p.first,\n                j = q.first;\n        if (i > j) ++jt;\n        else {\n            if (i == j) {\n                Point c = p.second->getCentre();\n                q.second->setCentre(c.x, c.y);\n            }\n            ++it;\n        }\n    }\n}\n\nvoid Graph::padCorrespNodes(Graph &H, double dw, double dh, const NodesById &ignore) {\n    NodesById nodes_G = getNodeLookupWithIgnore(ignore);\n    NodesById nodes_H = H.getNodeLookup();\n    auto it = nodes_G.begin();\n    auto jt = nodes_H.begin();\n    while (it != nodes_G.end() && jt != nodes_H.end()) {\n        auto p = *it;\n        auto q = *jt;\n        id_type i = p.first,\n                j = q.first;\n        if (i > j) ++jt;\n        else {\n            if (i == j) {\n                q.second->addPadding(dw, dh);\n            }\n            ++it;\n        }\n    }\n}\n\nvoid Graph::setRoutesInCorrespEdges(Graph &H, bool directed) {\n    // First build a lookup for Edges in H by [srcID][tgtID].\n    SparseIdMatrix2d<Edge_SP>::type lookup_H;\n    EdgesById edges_H = H.getEdgeLookup();\n    for (auto p : edges_H) {\n        Edge_SP f = p.second;\n        id_type sid = f->getSourceEnd()->id(),\n                tid = f->getTargetEnd()->id();\n        lookup_H[sid][tid] = f;\n    }\n    // Now iterate over the Edges of this Graph, setting routes where\n    // a match is found.\n    for (auto p : m_edges) {\n        Edge_SP e = p.second;\n        id_type sid = e->getSourceEnd()->id(),\n                tid = e->getTargetEnd()->id();\n        // See if H has an Edge with same src and tgt.\n        Edge_SP f = lookup_H[sid][tid];\n        bool reversed = false;\n        // If not, and if we're considering edges to be undirected, then\n        // we get to try again, with the IDs swapped.\n        if (f == nullptr && !directed) {\n            f = lookup_H[tid][sid];\n            // In this case we'll have to reverse the order of the route points.\n            reversed = true;\n        }\n        // If we managed to find an Edge, set its route.\n        if (f != nullptr) {\n            vector<Point> e_route = e->getRoute();\n            if (reversed) std::reverse(e_route.begin(), e_route.end());\n            f->setRoute(e_route);\n        }\n    }\n}\n\nvoid Graph::clearAllRoutes(void) {\n    for (auto p : m_edges) {\n        Edge_SP e = p.second;\n        e->clearRouteAndBends();\n    }\n}\n\nvoid Graph::buildRoutes(void) {\n    for (auto p : m_edges) {\n        Edge_SP e = p.second;\n        e->buildRouteFromBends();\n    }\n}\n\nvoid Graph::route(Avoid::RouterFlag routingType) {\n    clearAllRoutes();\n    RoutingAdapter ra(routingType);\n    ra.addNodes(m_nodes);\n    ra.addEdges(m_edges);\n    ra.route();\n}\n\nvoid Graph::addBendlessSubnetworkToRoutingAdapter(RoutingAdapter &ra) {\n    ra.addNodes(m_nodes);\n    EdgesById edges;\n    for (auto p : m_edges) if (!p.second->hasBendNodes()) edges.insert(p);\n    ra.addEdges(edges);\n}\n\nvoid Graph::clearAllConstraints(void) {\n    m_sepMatrix.clear();\n}\n\nvoid Graph::setCorrespondingConstraints(Graph &H) {\n    m_sepMatrix.setCorrespondingConstraints(H.getSepMatrix());\n}\n\nvoid Graph::transformClosedSubset(SepTransform tf, const std::set<id_type> &ids) {\n    m_sepMatrix.transformClosedSubset(tf, ids);\n}\n\nvoid Graph::transformOpenSubset(SepTransform tf, const std::set<id_type> &ids) {\n    m_sepMatrix.transformOpenSubset(tf, ids);\n}\n"
  },
  {
    "path": "cola/libdialect/graphs.h",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libdialect - A library for computing DiAlEcT layouts:\n *                 D = Decompose/Distribute\n *                 A = Arrange\n *                 E = Expand/Emend\n *                 T = Transform\n *\n * Copyright (C) 2018  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n * Author(s):   Steve Kieffer   <http://skieffer.info>\n*/\n\n#ifndef DIALECT_GRAPHS_H\n#define DIALECT_GRAPHS_H\n\n#include <vector>\n#include <cfloat>\n#include <string>\n#include <map>\n#include <utility>\n#include <stack>\n#include <deque>\n#include <functional>\n\n#include \"libvpsc/rectangle.h\"\n#include \"libcola/compound_constraints.h\"\n#include \"libcola/cluster.h\"\n#include \"libcola/cola.h\"\n#include \"libavoid/libavoid.h\"\n\n#include \"libdialect/commontypes.h\"\n#include \"libdialect/constraints.h\"\n#include \"libdialect/routing.h\"\n#include \"libdialect/ortho.h\"\n#include \"libdialect/logging.h\"\n\nnamespace dialect {\n\n//! @brief  A bounding box, given by the extreme coordinates.\nstruct BoundingBox {\n\n    //! @brief  Standard constructor.\n    //!\n    //! @param[in]  x  Lower bound on x-coordinates of the box.\n    //! @param[in]  X  Upper bound on x-coordinates of the box.\n    //! @param[in]  y  Lower bound on y-coordinates of the box.\n    //! @param[in]  Y  Upper bound on y-coordinates of the box.\n    BoundingBox(double x, double X, double y, double Y) :\n        x(x), X(X), y(y), Y(Y) {}\n\n    //! @brief  Default constructor.\n    //!\n    //! Constructs a bounding box that serves as \"zero\" when adding boxes together.\n    //! Can be thought of as the box whose interior consists solely of the point\n    //! at infinity on the Riemann Sphere.\n    BoundingBox(void) :\n        x(DBL_MAX), X(-DBL_MAX), y(DBL_MAX), Y(-DBL_MAX) {}\n\n    //! @brief  Adding two bounding boxes returns the bounding box of their union.\n    BoundingBox &operator+=(const BoundingBox &rhs);\n\n    //! @brief  Write a simple representation of the bounding box.\n    std::string repr(void) const;\n\n    //! @brief  Get the width of the box.\n    double w(void) const { return X - x; }\n\n    //! @brief  Get the height of the box.\n    double h(void) const { return Y - y; }\n\n    //! @brief  Get the interval in a given dimension.\n    //! @param[in] dim  The desired interval's variable dimension; thus, X if you want the box's\n    //!                 horizontal interval, Y if you want its vertical interval.\n    interval getInterval(vpsc::Dim dim) { return dim == vpsc::XDIM ? std::make_pair(x, X) : std::make_pair(y, Y); }\n\n    //! @brief  Get the centre of the box.\n    Avoid::Point centre(void) const { return Avoid::Point((x+X)/2.0, (y+Y)/2.0); }\n\n    //! @brief  Build a LineSegment representing a side of the box.\n    LineSegment_SP buildSideSegment(CardinalDir side) const;\n\n    //! @brief  Compute the perimeter of the box.\n    double perimeter(void) const { return 2*(w() + h()); }\n\n    double x;\n    double X;\n    double y;\n    double Y;\n};\n\n//! @brief  Provides a simple way to set any or all of the various\n//!         optional arguments to libcola layout methods.\nstruct ColaOptions {\n    //! Leave the ideal edge length set to zero if you want the Graph to\n    //! automatically substitute its own ideal edge length.\n    double idealEdgeLength = 0;\n    //! Prevent overlaps between nodes?\n    bool preventOverlaps = false;\n    //! Solidify aligned edges? When used in conjunction with the preventOverlaps\n    //! option, this can prevent overlaps between nodes and aligned edges.\n    bool solidifyAlignedEdges = false;\n    //! Specify edges that should not be solidified.\n    EdgesById solidEdgeExemptions;\n    //! Work in the x-dimension?\n    bool xAxis = true;\n    //! Work in the y-dimension?\n    bool yAxis = true;\n    //! When using a ConstrainedFDLayout, do makeFeasible before running?\n    bool makeFeasible = false;\n    //! The CFDL makeFeasible operation allows you to set extra border thickness\n    //! on rectangles in the x- and y-dimensions. You can set those values here.\n    double makeFeasible_xBorder = 0;\n    double makeFeasible_yBorder = 0;\n    //! Use neighbour stress? If true this means that only those stress terms\n    //! will be counted for pairs of nodes connected by an edge.\n    bool useNeighbourStress = false;\n    //! Ordinarily we use neighbour stress in an attempt to make the layout more\n    //! compact. In order to encourage this, we usually scale the IEL by a small\n    //! fraction as well. The scalar can be set here.\n    double nbrStressIELScalar = 1/20.0;\n    //! If you want to use a ConstrainedFDLayout, leave useMajorization false;\n    //! if you want to use a ConstrainedMajorizationLayout, set it true.\n    bool useMajorization = false;\n    //! If using a ConstrainedMajorizationLayout, say whether you want scaling.\n    bool useScaling = false;\n    //! Any /additional/ constraints in the form of cola::CompoundConstraints\n    //! may be set here. Note that these are added to the constraints already\n    //! recorded in the graph's SepMatrix.\n    cola::CompoundConstraints ccs;\n    //! Collection of Node lookups, in which to register clusters.\n    std::vector<NodesById> nodeClusters;\n    //! Just as with cola::ConstrainedFDLayout, you may set individual ideal\n    //! edge lengths, as well as a custom convergence test, and a function to\n    //! be called prior to each iteration.\n    cola::EdgeLengths eLengths = cola::StandardEdgeLengths;\n    cola::TestConvergence* doneTest = nullptr;\n    cola::PreIteration* preIteration = nullptr;\n    //! Optional logger.\n    Logger *logger = nullptr;\n};\n\n//! @brief  Bundles those data structures required in order to represent\n//!         a Graph in libcola, and to map infomration between the libcola\n//!         and libdialect representations.\nstruct ColaGraphRep {\n    vpsc::Rectangles rs;\n    std::vector<cola::Edge> es;\n    cola::RootCluster *rc = nullptr;\n    //! A mapping from Node IDs to indices in the rs Rectangles vector:\n    std::map<id_type, size_t> id2ix;\n    //! The inverse mapping, from indices in the rs Rectangles vector to Node IDs:\n    std::map<size_t, id_type> ix2id;\n};\n\n//! @brief  Useful for set operations on Node lookups.\n//! @note  Thanks to https://stackoverflow.com/a/15579928\nstruct NodeIdCmp {\n    bool operator()(id_type i, const std::pair<id_type, Node_SP> &p) const {\n        return i < p.first;\n    }\n    bool operator()(const std::pair<id_type, Node_SP> &p, id_type i) const {\n        return p.first < i;\n    }\n};\n\n//! @brief  The Graph class represents graphs consisting of nodes and edges.\n//!\nclass Graph {\npublic:\n    //! @brief  Default constructor.\n    Graph(void) : m_sepMatrix(this) {}\n\n    //! @brief  Copy constructor.\n    Graph(const Graph &G);\n\n    //! @brief  Destructor\n    ~Graph(void);\n\n    //! @brief  Swap operator.\n    friend void swap(Graph &first, Graph &second) {\n        using std::swap;\n        swap(first.m_debugOutputPath, second.m_debugOutputPath);\n        swap(first.m_projectionDebugLevel, second.m_projectionDebugLevel);\n        swap(first.m_sepMatrix, second.m_sepMatrix);\n        swap(first.m_iel, second.m_iel);\n        swap(first.m_cgr, second.m_cgr);\n        swap(first.m_needNewRectangles, second.m_needNewRectangles);\n        swap(first.m_cfdl, second.m_cfdl);\n        swap(first.m_nodes, second.m_nodes);\n        swap(first.m_edges, second.m_edges);\n        swap(first.m_maxDeg, second.m_maxDeg);\n    }\n\n    //! @brief  Copy-assignment operator.\n    //! @note  Pass-by-value is deliberate. See https://stackoverflow.com/a/3279550\n    Graph &operator=(const Graph other);\n\n    //! @brief  Reports the maximum degree of any Node in this Graph.\n    //!\n    //! The value is automatically maintained as you add or remove Nodes\n    //! from the Graph.\n    //!\n    //! @return  Maximum degree of any Node in the Graph.\n    //!\n    unsigned getMaxDegree(void) const;\n\n    //! @brief  Add a Node to this Graph.\n    //!\n    //! @param[in]  node  The Node to be added to the Graph.\n    //! @param[in]  takeOwnership  Controls whether the Node will record this Graph\n    //!                            as being the one to which it belongs.\n    void addNode(Node_SP node, bool takeOwnership = true);\n\n    //! @brief  Add a new Node to this Graph.\n    //! @return  The new Node.\n    Node_SP addNode(void);\n\n    //! @brief  Add a new Node to this Graph, setting dimensions.\n    //! @param[in] w  Width of Node.\n    //! @param[in] h  Height of Node.\n    //! @return  The new Node.\n    Node_SP addNode(double w, double h);\n\n    //! @brief  Add a new Node to this Graph, setting position and dimensions.\n    //! @param[in] cx  Centre x-coordinate of Node.\n    //! @param[in] cy  Centre y-coordinate of Node.\n    //! @param[in] w  Width of Node.\n    //! @param[in] h  Height of Node.\n    //! @return  The new Node.\n    Node_SP addNode(double cx, double cy, double w, double h);\n\n    //! @brief  Add an Edge to this Graph.\n    //!\n    //! @param[in]  edge  The Edge to be added to the Graph.\n    //! @param[in]  takeOwnership  Controls whether the Edge will record this Graph\n    //!                            as being the one to which it belongs.\n    void addEdge(Edge_SP edge, bool takeOwnership = true);\n\n    //! @brief  Add a new Edge to this Graph.\n    //! @param[in, out]  src  The source Node.\n    //! @param[in, out]  tgt  The target Node.\n    //! @note  Nodes are also informed of their linkage to this new Edge.\n    //! @return  The new Edge.\n    Edge_SP addEdge(Node_SP src, Node_SP tgt);\n\n    //! @brief  Add an Edge by specifying the IDs of its endpoint Nodes.\n    //!\n    //! @param[in] srcID  The ID of the Node that is to sit at the source end of the new Edge.\n    //! @param[in] tgtID  The ID of the Node that is to sit at the target end of the new Edge.\n    //! @return  A shared pointer to the new Edge.\n    Edge_SP addEdge(const id_type &srcID, const id_type &tgtID);\n\n    //! @brief  Say whether this Graph has a Node of the given ID.\n    //!\n    //! @return  boolean\n    bool hasNode(const id_type &id) const;\n\n    //! @brief  Say whether this Graph has an Edge of the given ID.\n    //!\n    //! @return  boolean\n    bool hasEdge(const id_type &id) const;\n\n    //! @brief  Sever an Edge in this Graph.\n    //!\n    //! The Edge is removed from the Graph, and from both of its endpoint\n    //! Nodes as well.\n    //!\n    //! @param[in]  edge  The Edge to be severed from the Graph.\n    void severEdge(dialect::Edge &edge);\n\n    //! @brief  Sever all the Edges incident to a Node in this Graph.\n    //!\n    //! @note  This method only cuts the incident Edges; it does /not/ also\n    //!        remove the Node itself from the Graph.\n    //!\n    //! @param[in]  node  The Node whose Edges are to be severed.\n    //!\n    //! @sa severAndRemoveNode\n    void severNode(const dialect::Node &node);\n\n    //! @brief  Like severNode but also returns a vector of all Nodes that\n    //!         were neighbours before severing.\n    //!\n    //! @sa  severNode\n    std::vector<Node_SP> severNodeNotingNeighbours(const dialect::Node &node);\n\n    //! @brief  Remove a Node from this Graph.\n    //!\n    //! @note  This method only removes the Node itself; it does not also\n    //!        sever the incident Edges.\n    //!\n    //! @param[in]  node  The Node to be removed from the Graph.\n    //!\n    //! @sa severAndRemoveNode\n    void removeNode(const dialect::Node &node);\n\n    //! @brief  Remove several Nodes from this Graph.\n    //!\n    //! @param[in]  nodes  The Nodes to be removed from the Graph.\n    //!\n    //! @sa removeNode\n    void removeNodes(const NodesById &nodes);\n\n    //! @brief Convenience method to completely remove a Node from the Graph.\n    //!\n    //! @sa severNode\n    //! @sa removeNode\n    void severAndRemoveNode(const dialect::Node &node);\n\n    //! @brief Convenience method to completely remove a Node from the Graph.\n    //!\n    //! @sa severNode\n    //! @sa removeNode\n    void severAndRemoveNode(id_type nodeID);\n\n    //! @brief  Clone a node completely. There will be as many copies of the original\n    //!         node as it had edges, and each clone will be a leaf.\n    //! @param[in] id  The ID of the node to be cloned.\n    //! @return Vector of new clones added to the graph.\n    Nodes cloneNode(id_type id);\n\n    //! @brief  Look up a Node by ID.\n    //!\n    //! @throws  out_of_range exception if there is no Node by the given ID.\n    //!\n    //! @return  The Node with the given ID, if present.\n    Node_SP getNode(const id_type &id) const;\n\n    //! @brief  Read-only access to this Graph's lookup map for Nodes by their ID.\n    const NodesById &getNodeLookup(void) const { return m_nodes; }\n\n    //! @brief  Build a NodesById lookup with some Nodes omitted.\n    NodesById getNodeLookupWithIgnore(const Nodes &ignore) const;\n\n    //! @brief  Build a NodesById lookup with some Nodes omitted.\n    NodesById getNodeLookupWithIgnore(const NodesById &ignore) const;\n\n    //! @brief  Read-only access to this Graph's lookup map for Edges by their ID.\n    const EdgesById &getEdgeLookup(void) const { return m_edges; }\n\n    //! @brief  Say how many Nodes there are in this Graph.\n    size_t getNumNodes(void) const { return m_nodes.size(); }\n\n    //! @brief  Say how many Edges there are in this Graph.\n    size_t getNumEdges(void) const { return m_edges.size(); }\n\n    //! @brief  Say whether the Graph is empty, meaning that it has no Nodes.\n    bool isEmpty(void) const { return m_nodes.empty(); }\n\n    //! @brief  Say whether the Graph is a tree.\n    bool isTree(void) const { return getNumEdges() == getNumNodes() - 1; }\n\n    //! @brief  Compute the average of all heights and widths of Nodes\n    //!         in this Graph.\n    //!\n    //! @return  The average.\n    double computeAvgNodeDim(void) const;\n\n    //! @brief  Read the ideal edge length of this Graph.\n    //!\n    //! @note  If the current value is zero (which is true of all new Graphs), the Graph\n    //!        will first auto-infer an ideal edge length equal to twice the average node\n    //!        dimension, store that value, and return it.\n    //!\n    //! @warning  Once this method has been called, the Graph will NOT recompute its IEL\n    //!           on subsequent calls, even if Nodes have been added or taken away.\n    //!\n    //! @sa Graph::recomputeIEL\n    double getIEL(void);\n\n    //! @brief  Recompute, store, and return the Graph's ideal edge length.\n    //!\n    //! @note  As in the getIEL method, the value will be twice the average dimension\n    //!        of Nodes currently in the Graph.\n    //!\n    //! @sa Graph::getIEL\n    double recomputeIEL(void);\n\n    //! @brief  Get the bounding box for this Graph.\n    //!\n    //! @param[in]  ignore  Optional set of Nodes (as NodesByID) to leave out of the box.\n    //! @param[in]  includeBends  Say whether bend points of connector routes\n    //!                           should be included in the box.\n    //!\n    //! @return  The bounding box.\n    //!\n    //! @sa getBoundingBoxDimensions\n    BoundingBox getBoundingBox(\n                const NodesById &ignore = NodesById(),\n                bool includeBends = false\n            ) const;\n\n    //! @brief  Get the connected components of this Graph.\n    //!\n    //! Note that the Nodes and Edges in the component Graphs will be\n    //! the same objects as those in this Graph.\n    //!\n    //! @return  A vector of shared pointers to Graphs.\n    std::vector<Graph_SP> getConnComps(void) const;\n\n    //! @brief  Identify all sequences of consecutive \"links\" (degree-2 nodes) in this graph.\n    //! @param[out] chains  Vector of deques of Nodes, where each identified \"chain\" will be recorded.\n    //!                     A \"chain\" is a consecutive sequence of \"links\" whose endpoints are distinct.\n    //! @param[out] cycles  Vector of deques of Nodes, where each identified \"cycle\" will be recorded.\n    //!                     A \"cycles\" is a consecutive sequence of \"links\" that forms a closed loop.\n    void getChainsAndCycles(std::vector<std::deque<Node_SP>> &chains, std::vector<std::deque<Node_SP>> &cycles);\n\n    //! @brief  Write TGLF to represent this Graph.\n    //! @param[in] useExternalIds  When a Graph is built from TGLF its Nodes store the IDs that\n    //!                            were used there. Set true if you want these same IDs to be\n    //!                            written out as well. Otherwise the internal unique Node IDs are used.\n    //! @return  A string containing the TGLF.\n    std::string writeTglf(bool useExternalIds = false) const;\n\n    //! @brief  Write SVG to represent this Graph.\n    //! @param[in] useExternalIds  When a Graph is built from TGLF its Nodes store the IDs that\n    //!                            were used there. Set true if you want these same IDs to be\n    //!                            written out as well. Otherwise the internal unique Node IDs are used.\n    //! @return  A string containing the SVG.\n    std::string writeSvg(bool useExternalIds = false) const;\n\n    //! @brief  Write the Node ID --> Rectangle Index map.\n    //!         Useful for debugging.\n    //! @return  String representation of the map.\n    std::string writeId2Ix(void) const;\n\n    //! @brief  Write the Rectangle Index --> Node ID map.\n    //!         Useful for debugging.\n    //! @return  String representation of the map.\n    std::string writeIx2Id(void) const;\n\n    //! @brief  Rotate the layout -- and the constraints -- 90 degrees clockwise.\n    //! @param[in] opts  ColaOptions to control destressing operation after rotation.\n    //!                  This is optional; pass nullptr if you do not want to destress.\n    //! @note If any nodes are non-square, i.e. have aspect ratio different from 1:1, then destressing\n    //!       is recommended after a 90-degree rotation. The relationships between oblong nodes can\n    //!       change dramatically when rotating 90 degrees.\n    //! @sa Graph::rotate90acw\n    //! @sa Graph::rotate180\n    void rotate90cw(ColaOptions *opts=nullptr);\n\n    //! @brief  Rotate the layout -- and the constraints -- 90 degrees anticlockwise.\n    //! @param[in] opts  ColaOptions to control destressing operation after rotation.\n    //!                  This is optional; pass nullptr if you do not want to destress.\n    //! @note If any nodes are non-square, i.e. have aspect ratio different from 1:1, then destressing\n    //!       is recommended after a 90-degree rotation. The relationships between oblong nodes can\n    //!       change dramatically when rotating 90 degrees.\n    //! @sa Graph::rotate90cw\n    //! @sa Graph::rotate180\n    void rotate90acw(ColaOptions *opts=nullptr);\n\n    //! @brief  Rotate the layout -- and the constraints -- 180 degrees.\n    //! @note Unlinke the 90-degree rotations, rotating 180 degrees can be viewed as a simple rigid\n    //!       transformation, and there is no reason to destress afterward.\n    //! @sa Graph::rotate90cw\n    //! @sa Graph::rotate90acw\n    void rotate180(void);\n\n    //! @brief  Translate the entire layout by a given amount in each dimension.\n    //! @param[in] dx  The amount by which to translate in the x-dimension.\n    //! @param[in] dy  The amount by which to translate in the y-dimension.\n    void translate(double dx, double dy);\n\n    //! @brief  Put the Graph into a basic position useful for making unit test inputs.\n    //!         The Nodes are put in a row, all Edge routes are cleared, and all constraints\n    //!         are cleared.\n    //!\n    //!         The criteria are: (1) all nodes have distinct positions, and (2) the\n    //!         layout is a bad one. Condition (1) is needed so that Cola doesn't generate\n    //!         random starting positions.\n    void putInBasePosition(void);\n\n    //! @brief  Check whether this Graph has the same layout as another, up to a given\n    //!         tolerance.\n    //! @note   Checks Node positions and Edge routes, but not constraints.\n    //! @param[in] other  The other Graph.\n    //! @param[in] tol  Tolerance for checking equality of floats.\n    //! @param[in] idMap  Optional mapping from the IDs of the other Graph to the IDs of\n    //!                   the corresponding Nodes of this Graph. If not provided, the\n    //!                   correspondence is by the Nodes' external IDs.\n    bool hasSameLayoutAs(const Graph &other, double tol=0.001, id_map *idMap = nullptr) const;\n\n    //! @brief  Get a lookup for the Edges of this Graph by the IDs of their source and\n    //!         target Nodes, in that order.\n    SparseIdMatrix2d<Edge_SP>::type getEdgeBySrcIdTgtIdLookup(void) const;\n\n    //! @brief  Reduce stress via libcola's gradient-descent procedures.\n    //!\n    //! @param[in]  opts  options to control the layout.\n    //!\n    //! @note  In opts, set the idealEdgeLength to 0 if you want the Graph to automatically\n    //!        supply a reasonable ideal edge length.\n    void destress(const ColaOptions &opts);\n\n    //! @brief  Convenience method to destress with default options.\n    void destress(void);\n\n    //! @brief  Add Nodes to represent aligned Edges in one dimension, constraining them to stay aligned.\n    //! @param[in] dim  Solidify only those aligned Edges whose variable coordinate is in this dimension.\n    //!                 Thus, horizontally aligned edges for XDIM; vertically aligned for YDIM.\n    //! @param[in] opts  Here you can set Edge exemptions, i.e. a set of Edges that should not be solidified.\n    void solidifyAlignedEdges(vpsc::Dim dim, const ColaOptions &opts);\n\n    //! @brief  Make feasible. This means that, among those constraints that offer alternatives,\n    //!         we look for satisfiable alternatives in order of increasing cost (cost = separation violation).\n    //! This is useful with nonoverlap constraints.\n    //!\n    //! @param[in] opts  The usual ColaOptions.\n    //! @note  Simply uses the method by the same name in the cola::ConstrainedFDLayout class.\n    void makeFeasible(const ColaOptions &opts);\n\n    //! @brief  Project onto cola constraints.\n    //! @param[in] opts  Options, including any additional constraints onto which to project\n    //!                  (in addition to the Graph's existing SepMatrix).\n    //! @note            All options relating to edge length are ignored, since this is only a projection.\n    //! @param[in] dim  The dimension in which to project.\n    //! @param[in] accept  Acceptance level. See doctext for cola::projectOntoCCs.\n    //! @return  Error level. See cola::projectOntoCCs.\n    int project(const ColaOptions &opts, vpsc::Dim dim, int accept=0);\n\n    //! @brief  Convenience method to project onto a single SepCo object.\n    //! Apart from the SepCo, parameters and return value are as for the ordinary project method.\n    //! @sa Graph::project.\n    int projectOntoSepCo(const ColaOptions &opts, SepCo_SP sepco, int accept=0);\n\n    //! @brief  Attempt to apply the projections given by a ProjSeq object.\n    //!         Give up as soon as any of them fails.\n    //! @param[in] opts  Options.\n    //! @param[in] ps  The ProjSeq to be applied.\n    //! @param[in] accept  Acceptance level. See doctext for cola::projectOntoCCs.\n    //!\n    //! @note  In addition to the zero idealEdgeLength convention employed by the destress\n    //!        method, here a negative idealEdgeLength in the opts parameter may be used\n    //!        to indicate that you do not want the stress changes induced by the projections\n    //!        to be evaluated. Otherwise they will be.\n    //! @return boolean, saying whether all the projections were successful, at the given\n    //!         acceptance level.\n    bool applyProjSeq(const ColaOptions &opts, ProjSeq &ps, int accept=0);\n\n\n    //! @brief  For use with various layout actions, this method asks the Graph\n    //!         to update Node positions based on its internal vpsc Rectangles that\n    //!         were used in the layout operation.\n    //! @param[in] xAxis  Set true iff the x-coordinates of the nodes should be updated.\n    //! @param[in] yAxis  Set true iff the y-coordinates of the nodes should be updated.\n    void updateNodesFromRects(bool xAxis=true, bool yAxis=true);\n\n    //! @brief  Refresh, as needed, the data structures necessary for applying the\n    //!         methods of libcola to this Graph.\n    //!\n    //! @warning  If Nodes have been added to or removed from the Graph since the\n    //!           last time this method was called, the old Rectangles will be\n    //!           deleted.\n    //!\n    //!           Clients are therefore advised to utilise methods like Graph::destress\n    //!           instead of creating their own instances of ConstrainedFDLayout. At the\n    //!           least, they must not reuse layout objects that were created before\n    //!           adding or removing Nodes from the Graph (which makes sense anyway).\n    //!\n    //! @return  A reference to the (updated) ColaGraphRep.\n    ColaGraphRep &updateColaGraphRep(void);\n\n    //! @brief  Build a cola::RootCluster based on the node clusters specified in a ColaOptions\n    //!         object.\n    //! @note  The RootCluster will also be stored in the Graph's ColaGraphRep.\n    //! @warning The old RootCluster stored in the Graph's ColaGraphRep (if any) will be deleted.\n    //! @return The RootCluster.\n    cola::RootCluster *buildRootCluster(const ColaOptions &opts);\n\n    //! @brief  Access the cola graph rep for this Graph.\n    ColaGraphRep &getColaGraphRep(void) { return m_cgr; }\n\n    //! @brief  Access the separation matrix for this Graph.\n    SepMatrix &getSepMatrix(void) { return m_sepMatrix; }\n\n    //! @brief  Build and return Nodes representing every point at which any Edge\n    //!         has a bend in its connector route. Importantly, for any given point\n    //!         in the plane, at most one Node will built to represent that point,\n    //!         even if different edges have a bend there. While perhaps counterintuitive,\n    //!         this is most helpful in the operation of planarising a given Graph.\n    //!\n    //! @note  The new Nodes are /not/ added to the Graph.\n    //!\n    //! @note  As an important side effect, the sequence of Nodes representing\n    //!        the bend points of each Edge is set as the \"bend nodes\" of that Edge.\n    NodesById buildUniqueBendPoints(void);\n\n    //! @brief  Save node positions on internal stack.\n    void pushNodePositions(void);\n\n    //! @brief  Restore node positions from internal stack.\n    //! @return  true if positions were restored; false if stack was empty\n    bool popNodePositions(void);\n\n    //! @brief  Set the edge thickness.\n    void setEdgeThickness(double t) { m_edge_thickness = t; }\n\n    //! @brief  Get the edge thickness.\n    double getEdgeThickness(void) { return m_edge_thickness; }\n\n    //! @brief  Add padding to all ndoes.\n    void padAllNodes(double dw, double dh);\n\n    //! @brief  Update positions of Nodes in a given Graph to equal those of the\n    //!         corresponding Nodes (same ID) in this Graph.\n    //! @param[out] H  The Graph whose Node positions are to be updated.\n    void setPosesInCorrespNodes(Graph &H);\n\n    //! @brief  Add padding to those Nodes in a given Graph that\n    //!         correspond to Nodes (same ID) in this Graph.\n    //! @param[out] H  The Graph whose corresp. Nodes are to be padded.\n    //! @param[in] dw  width padding\n    //! @param[in] dh  height padding\n    //! @param[in] ignore  Nodes in *this* graph (not H) that should be skipped.\n    void padCorrespNodes(Graph &H, double dw, double dh, const NodesById &ignore = {});\n\n    //! @brief  Update routes of Edges in a given Graph to equal those of the\n    //!         corresponding Edges (same source and target) in this Graph.\n    //! @param[out] H  The Graph whose Edge routes are to be updated.\n    //! @param[in] directed  Set true if Edges are to be understood as directed, i.e. if\n    //!                      in order to match the Edges have to have the same source and\n    //!                      the same target. Otherwise only the set {source ID, target ID}\n    //!                      has to be the same. Default: false (i.e. undirected edges).\n    void setRoutesInCorrespEdges(Graph &H, bool directed=false);\n\n    //! @brief  Do a libavoid connector routing on all Edges in the Graph.\n    //! @param[in] routingType  The type of routing you want (orthogonal or polyline).\n    void route(Avoid::RouterFlag routingType);\n\n    //! @brief  Clear all Edge routes.\n    void clearAllRoutes(void);\n\n    //! @brief  Ask all Edges to build their routes based on their bend nodes.\n    void buildRoutes(void);\n\n    //! @brief Add all Nodes, and all those Edges having no bend nodes within them, to a given\n    //!        RoutingAdapter. This is useful when precisely those Edges are viewed as needing\n    //!        a route which do not already have any bend nodes.\n    //! @param[out] ra  The RoutingAdapter to which the Nodes and Edges are to be added.\n    void addBendlessSubnetworkToRoutingAdapter(RoutingAdapter &ra);\n\n    //! @brief  Clear all constraints in this Graph's SepMatrix.\n    void clearAllConstraints(void);\n\n    //! @brief  Set corresponding constraints in another Graph.\n    //!         This means that for each constraint between nodes of IDs id1 and id2 in this\n    //!         Graph's SepMatrix, we set that constraint in the other Graph if and only if it too\n    //!         contains Nodes of IDs id1 and id2.\n    //! @param[out] H  The other Graph.\n    void setCorrespondingConstraints(Graph &H);\n\n    //! @brief  Apply a transformation to a closed subset of all Nodes.\n    //!\n    //! @param[in]  tf  the transformation to be performed\n    //! @param[in]  ids  the set of IDs of all Nodes to which the transformation\n    //!                  should be applied. /Both/ Nodes must be in the set.\n    //! @sa transformOpenSubset\n    void transformClosedSubset(SepTransform tf, const std::set<id_type> &ids);\n    \n    //! @brief  Apply a transformation to an open subset of all Nodes.\n    //!\n    //! @param[in]  tf  the transformation to be performed\n    //! @param[in]  ids  the set of IDs of all Nodes to which the transformation\n    //!                  should be applied. /At least one/ Node must be in the set.\n    //! @sa transformClosedSubset\n    void transformOpenSubset(SepTransform tf, const std::set<id_type> &ids);\n\n    // For debugging:\n    std::string m_debugOutputPath = \"\";\n    unsigned m_projectionDebugLevel = 0;\n\nprivate:\n    SepMatrix m_sepMatrix;\n\n    //! Ideal edge length\n    double m_iel = 0;\n\n    //! For some operations we represent aligned edges by (narrow) dummy nodes.\n    //! Here we can set the thickness of those nodes.\n    double m_edge_thickness = 10;\n\n    //! @brief  Automatically pick a good ideal edge length.\n    //!\n    //! @note  The chosen length will be twice the average node dimension.\n    //!\n    //! @note  Besides being returned, the chosen ideal edge length is\n    //!        also stored in the Graph.\n    //!\n    //! @return  The chosen ideal edge length.\n    double autoInferIEL(void);\n\n    //! Sometimes we need to recompute the max degree, as when a Graph is\n    //! modified or constructed programmatically in certain ways.\n    void recomputeMaxDegree(void);\n\n    //! Compute the stress of the current position.\n    double computeStress(void);\n\n    //! Common implementation for the two directional 90-degree rotation methods.\n    void rotate90(PlaneMap nodeMap, std::function<void(Edge_SP)> edgeMap, SepTransform st, ColaOptions *opts=nullptr);\n\n    //! For building ConstrainedFDLayout objects we keep a ColaGraphRep.\n    ColaGraphRep m_cgr;\n    //! Keep track of whether the set of Nodes has changed since last time we\n    //! computed Rectangles for the CGR.\n    bool m_needNewRectangles = true;\n    //! We also keep a ConstrainedFDLayout, for use in computing stress.\n    cola::ConstrainedFDLayout *m_cfdl = nullptr;\n\n    //! Lookup table for Nodes by ID:\n    NodesById m_nodes;\n    //! Lookup table for Edges by ID:\n    EdgesById m_edges;\n    //! We keep track of the maximum degree of any Node in this Graph:\n    unsigned m_maxDeg = 0;\n\n    //! Node position stack, for saving positions while attempting\n    //! possible layouts.\n    std::stack<std::map<id_type, Avoid::Point>> m_posStack;\n\n};\n\n//! @brief  The Node class represents nodes in a graph.\n//!\nclass Node {\npublic:\n    //! @brief  Factory function, to get a shared pointer to a Node\n    //!         allocated on the heap. We make the constructors protected,\n    //!         in order to ensure that Nodes always come with a control block.\n    //! @return  A shared_ptr to Node (Node_SP).\n    static Node_SP allocate(void);\n\n    //! @brief  Convenience factory function to set dimensions.\n    static Node_SP allocate(double w, double h);\n\n    //! @brief  Convenience factory function to set position and dimensions.\n    static Node_SP allocate(double cx, double dy, double w, double h);\n\n    //! @brief  Allocate a GhostNode of this Node.\n    GhostNode_SP makeGhost(void) const;\n\n    //! @brief  Copy-assignment operator\n    dialect::Node &operator=(const dialect::Node&) = default;\n\n    //! @brief  Destructor\n    virtual ~Node(void) = default;\n\n    //! @brief  Access the unique ID of a given instance.\n    //!\n    //! @return  The ID.\n    virtual id_type id(void) const { return m_ID; }\n\n    //! @brief  Check the degree (number of incident Edges) of the Node.\n    //!\n    //! @return  The degree of the Node\n    unsigned getDegree(void) const { return m_degree; }\n\n    //! @brief  Tell the Node which Graph it belongs to.\n    //!\n    //! @param[in]  graph  The Graph to which the Node is to belong.\n    void setGraph(Graph &graph) { m_graph = &graph; }\n\n    //! @brief  Access the Graph to which the Node belongs.\n    Graph *getGraph(void) { return m_graph; }\n\n    //! @brief  Add an incident Edge.\n    void addEdge(const Edge_SP &edge);\n\n    //! @brief  Remove an incident Edge.\n    void removeEdge(const dialect::Edge &edge);\n\n    //! @brief  Read-only access to this Node's lookup map for Edges by their ID.\n    const EdgesById &getEdgeLookup(void) const { return m_edges; }\n\n    //! @brief  Get a copy of this Node's lookup map for Edges by their ID.\n    EdgesById getCopyOfEdgeLookup(void) const { return m_edges; }\n\n    //! @brief  Give this Node the same coordinates and dimensions as another.\n    void copyGeometry(const dialect::Node &other);\n\n    //! @brief  Besides copying geometry, there may be other properties we wish\n    //!         to copy; in particular, properties that are suitable to be copied\n    //!         by a GhostNode.\n    void copyOtherGhostProperties(const dialect::Node &other);\n\n    //! @brief  Get an ordered pair (half-width, half-height) for this Node.\n    dimensions getHalfDimensions(void) const;\n\n    //! @brief  Get an ordered pair (width, height) for this Node.\n    dimensions getDimensions(void) const;\n\n    //! @brief  Get the bounding box for this Node.\n    BoundingBox getBoundingBox(void) const;\n\n    //! @brief  Get the point on the boundary of this Node in a given direction\n    //!         from its centre.\n    Avoid::Point getBoundaryCompassPt(CompassDir dir) const;\n\n    //! @brief  Set the position of the node, by setting its centre coordinates.\n    void setCentre(double cx, double cy);\n\n    //! @brief  Update the position of the node, by adding to its centre coordinates.\n    void translate(double dx, double dy);\n\n    //! @brief  Apply a mapping from libavoid Points to libavoid Points, to this Node's centre.\n    void applyPlaneMap(PlaneMap map);\n\n    //! @brief  Get the centre coordinates of the node.\n    Avoid::Point getCentre(void) const;\n\n    //! @brief  Set an externally-determined ID. (This is useful for TGLF and other\n    //!         interfacing operations.)\n    void setExternalId(unsigned id) { m_externalID = id; }\n\n    //! @brief  Get the external ID.\n    int getExternalId(void) { return m_externalID; }\n\n    //! @brief  Get the neighbours of this Node.\n    dialect::Nodes getNeighbours(void) const;\n\n    //! @brief  Get the neighbours of this Node, listed in clockwise cyclic order\n    //!         (assuming the usual graphics convention of x increasing to the right\n    //!         and y increasing downward).\n    dialect::Nodes getNeighboursCwCyclic(void) const;\n\n    //! @brief  Get the neighbours of this Node that sit as the target\n    //!         end of the connecting Edge.\n    //!\n    //! @return  vector of the children of this Node\n    virtual dialect::Nodes getChildren(void) const;\n\n    //! @brief  Set the dimensions of the node.\n    void setDims(double w, double h);\n\n    //! @brief  Set the bounding box of the node. This sets both the dimensions and the centre point.\n    //! @param[in] x  The minimum x-coord of the box.\n    //! @param[in] X  The maximum x-coord of the box.\n    //! @param[in] y  The minimum y-coord of the box.\n    //! @param[in] Y  The maximum y-coord of the box.\n    void setBoundingBox(double x, double X, double y, double Y);\n\n    //! @brief  Add padding to the node's dimensions.\n    //! @note  Amounts can be positive or negative, thus adding or subtracting padding.\n    void addPadding(double dw, double dh);\n\n    //! @brief  Update the position of this Node to equal that of the given Rectangle.\n    void updatePosnFromRect(vpsc::Rectangle *r);\n\n    //! @brief  Update the x-coordinate of this Node to equal that of the given Rectangle.\n    void updateXCoordFromRect(vpsc::Rectangle *r);\n\n    //! @brief  Update the y-coordinate of this Node to equal that of the given Rectangle.\n    void updateYCoordFromRect(vpsc::Rectangle *r);\n\n    //! @brief  Build and return a Polygon to represent this Node in libavoid.\n    Avoid::Polygon makeLibavoidPolygon(void) const;\n\n    //! @brief  Check whether this Node has been marked as being a root. This is\n    //!         useful when working with trees, and can be safely ignored when\n    //!         working with other sorts of graphs.\n    bool isRoot(void) const { return m_isRoot; }\n\n    //! @brief  Say whether this Node is a root. This is useful when working with\n    //!         trees, and can be safely ignored when working with other sorts of graphs.\n    void setIsRoot(bool isRoot) { m_isRoot = isRoot; }\n\n    //! @brief  Check whether this Node lies opposite a LineSegment, i.e. whether\n    //!         the sides of the Node lying parallel to the segment intersect its\n    //!         interval.\n    //! @param seg  The LineSegment in question.\n    //! @param openInterval  Boolean saying whether we should treat the interval\n    //!                      in question as an open one (i.e. not including its\n    //!                      endpoints). Defaults to false, so that the closed\n    //!                      interval is considered by default.\n    bool liesOppositeSegment(const LineSegment &seg, bool openInterval=false);\n\n    //! @brief  Write SVG to represent this Node.\n    //! @param[in] useExternalId  If true, write external ID as label; otherwise write\n    //!                           internal unique ID.\n    //! @return  A string containing the SVG.\n    std::string writeSvg(bool useExternalId = false) const;\n\nprotected:\n\n    //! @brief  Default constructor.\n    //!\n    //! Each Node has an ID number, unique among Nodes (but not necessarily\n    //! distinct from ID numbers of objects of other classes).\n    Node(void) : m_ID(nextID++) {}\n\n    //! @brief  Construct with dimensions.\n    Node(double w, double h) : m_ID(nextID++), m_w(w), m_h(h) {}\n\n    //! @brief  Construct with position and dimensions.\n    Node(double cx, double cy, double w, double h) : m_ID(nextID++), m_cx(cx), m_cy(cy), m_w(w), m_h(h) {}\n\n    //! @brief  Copy constructor.\n    Node(const dialect::Node&) = default;\n\n    //! An instance's own unique ID:\n    const id_type m_ID;\n\n    //! A Node can store an ID specified externally, as by TGLF.\n    //! Although external IDs are restricted to non-negative integers, we store the ID as\n    //! an integer, so that we can use a negative value to indicate that none has been set.\n    int m_externalID = -1;\n\n    //! Lookup table for incident Edges by Edge's ID:\n    EdgesById m_edges;\n\nprivate:\n    //! For class-specific generation of unique IDs:\n    static id_type nextID;\n\n    //! A Node can exist outside of any Graph; when it does belong to a Graph,\n    //! we keep a pointer to it here:\n    Graph *m_graph = nullptr;\n\n    //! Lookup table for incident Edges by the ID of the Node at the opposite end:\n    EdgesById m_edges_by_opp_id;\n\n    //! Degree of the Node, i.e. number of incident edges:\n    unsigned m_degree = 0;\n\n    //! Coordinates of the centre point of the Node:\n    double m_cx = 0.0;\n    double m_cy = 0.0;\n\n    //! Dimensions:\n    //! We provide a reasonable non-zero default size, because our algorithms require\n    //! nodes to have positive dimensions.\n    //! The default size is deliberately non-square in order to better test the code,\n    //! which must handle non-square nodes.\n    double m_w = 100.0;\n    double m_h = 60.0;\n\n    //! We often work with trees, in which case it can be useful to be able to mark\n    //! a Node as being a root. While this field is meaningless in the many cases where\n    //! we work with graphs which are not trees, it can be safely ignored in those cases.\n    bool m_isRoot = false;\n\n};\n\n//! @brief  A GhostNode represents another Node.\n//!\n//! When working with techniques that involve decomposing a graph into parts,\n//! and then reassembling those parts, it is often useful to have a node in one\n//! part represent a node in another part. For example this can be a useful way\n//! to manage the nodes where the two parts intersect. The GhostNode class\n//! supports this by representing a given Node.\nclass GhostNode : public Node {\npublic:\n\n    //! @brief  Factory function.\n    //!\n    //! @return  A shared_ptr to GhostNode (GhostNode_SP).\n    static GhostNode_SP allocate(const Node &node) { return GhostNode_SP(new GhostNode(node)); }\n\n    //! @brief  Return an appropriate ID number.\n    //!\n    //! Whether the GhostNode's actual ID is returned, or that of the\n    //! Node it represents, depends whether it is set to masquerade.\n    virtual id_type id(void) const {\n        return m_doMasquerade ? m_originalNodeId : m_ID;\n    }\n\n    //! @brief  Simple way to get the true ID of this GhostNode, even\n    //!         if it is currently set to masquerade as the Node it represents.\n    id_type trueID(void) const { return m_ID; }\n\n    //! @brief  As in the Node class, get the neighbours of this Node\n    //!         that sit as the target end of the connecting Edge.\n    //!\n    //! This method performs the same function as the overriden method\n    //! in the base Node class. It is only reimplemented in order to\n    //! ensure that the GhostNode's id() function is used properly.\n    virtual Nodes getChildren(void) const;\n\n    //! @brief  Say whether the GhostNode should masquerade as the original Node.\n    void setMasquerade(bool doMasquerade) { m_doMasquerade = doMasquerade; }\n\nprotected:\n\n    //! @brief  We always make a GhostNode as a copy of a plain Node.\n    GhostNode(const Node &node)\n      : Node(),\n        m_doMasquerade(false),\n        m_originalNodeId(node.id())\n    {\n        // We also copy the given Node's geometry.\n        copyGeometry(node);\n        // And copy other properties.\n        copyOtherGhostProperties(node);\n    }\n\nprivate:\n\n    //! @brief  Default constructor is deleted.\n    GhostNode(void) = delete;\n\n    //! @brief  Copy constructor is deleted.\n    GhostNode(const GhostNode&) = delete;\n\n    //! Sometimes you want a GhostNode to masquerade as the Node it represents by\n    //! returning that Node's ID instead of its own.\n    bool m_doMasquerade;\n\n    //! As Nodes, GhostNodes get a unique ID drawn from the same ID space as all Nodes.\n    //! This is their \"true ID\". However, they also keep a record of the ID of the\n    //! proper Node they represent.\n    id_type m_originalNodeId;\n\n};\n\n\n//! @brief  The Edge class represents edges in a graph.\n//!\nclass Edge {\npublic:\n    //! @brief  Factory function.\n    //!\n    //! We make all constructors private and offer a factory function\n    //! instead, in order to ensure that instances are allocated on the\n    //! heap, and always come with a shared ptr control block.\n    //!\n    //! @return  A shared_ptr to Node (Node_SP).\n    static Edge_SP allocate(const Node_SP &src, const Node_SP &tgt);\n\n    //! @brief  Copy-assignment operator\n    Edge &operator=(const dialect::Edge&) = default;\n\n    //! @brief  Destructor\n    ~Edge(void) = default;\n\n    //! @brief  Access the unique ID of this instance.\n    //!\n    //! @return  The ID.\n    id_type id(void) const { return m_ID; }\n\n    //! @brief  Get the opposite endpt, from a given one\n    //!\n    //! @param[in]  end1  A Node lying at one end of this Edge.\n    //!\n    //! @return  The Node_SP lying at the other end.\n    Node_SP getOtherEnd(const dialect::Node &end1) const;\n\n    //! @brief  Get read-only access to the Node at the source end of this Edge.\n    Node_SP getSourceEnd(void) const { return Node_SP(m_src); }\n\n    //! @brief  Get read-only access to the Node at the target end of this Edge.\n    Node_SP getTargetEnd(void) const { return Node_SP(m_tgt); }\n\n    //! @brief  Get a pair {srcID, tgtID} giving the IDs of the source and target Nodes.\n    std::pair<id_type, id_type> getEndIds(void) const { return {Node_SP(m_src)->id(), Node_SP(m_tgt)->id()}; }\n\n    //! @brief  Tell the Edge which Graph it belongs to.\n    //!\n    //! @param[in]  graph  The Graph to which the Edge is to belong.\n    void setGraph(Graph &graph) { m_graph = &graph; }\n\n    //! @brief  \"Sever\" this Edge, i.e. remove it from the Nodes to which\n    //!         it is attached.\n    void sever(void);\n\n    //! @brief  Get the bounding box for the edge,\n    //!         including its end points and route points.\n    BoundingBox getBoundingBox(void) const;\n\n    //! @brief  Add a point to the route.\n    void addRoutePoint(double x, double y);\n\n    //! @brief  Set (overwriting) the entire route.\n    void setRoute(std::vector<Avoid::Point> route);\n\n    //! @brief  Get a copy of the Edge's route member. May be empty.\n    //! @note  If you are interested in drawing a connector, see the getRoutePoints method.\n    //! @sa getRoutePoints\n    std::vector<Avoid::Point> getRoute(void) const { return m_route; }\n\n    //! @brief  Get route points.\n    //! @note  This method returns the points that form the route you would draw for\n    //!        this edge. If the m_route vector is nonempty, a copy is returned.\n    //!        Otherwise you get a vector of two points: the centre of the source\n    //!        Node, and the centre of the target Node.\n    //! @sa getRoute\n    std::vector<Avoid::Point> getRoutePoints(void) const;\n\n    //! @brief  Write TGLF to represent the route for this Edge.\n    //!\n    //! @return  A string containing the TGLF.\n    std::string writeRouteTglf(void) const;\n\n    //! @brief  Build and return a pair of libavoid ConnEnds to represent\n    //!         the endpoints of this Edge.\n    std::pair<Avoid::ConnEnd, Avoid::ConnEnd> makeLibavoidConnEnds(\n            Avoid::ConnDirFlags srcDirs=Avoid::ConnDirAll, Avoid::ConnDirFlags tgtDirs=Avoid::ConnDirAll);\n\n    //! @brief  Set the bend nodes. These should be Nodes representing the bend points\n    //!         in the Edge's route.\n    void setBendNodes(Nodes bends) { m_bendNodes = bends; }\n\n    //! @brief  Add a single bend node.\n    void addBendNode(Node_SP bn) { m_bendNodes.push_back(bn); }\n\n    //! @brief  Access the Edge's bend nodes.\n    Nodes getBendNodes(void) { return m_bendNodes; }\n\n    //! @brief  Check whether this Edge has any bend nodes.\n    bool hasBendNodes(void) { return !m_bendNodes.empty(); }\n\n    //! @brief  Rotate the connector route 90 degrees clockwise.\n    void rotate90cw(void);\n\n    //! @brief  Rotate the connector route 90 degrees anticlockwise.\n    void rotate90acw(void);\n\n    //! @brief  Rotate the connector route 180 degrees.\n    void rotate180(void);\n\n    //! @brief  Translate the connector route by a given amount in each dimension.\n    //! @param[in] dx  The amount by which to translate in the x-dimension.\n    //! @param[in] dy  The amount by which to translate in the y-dimension.\n    void translate(double dx, double dy);\n\n    //! @brief  Clear the connector route and drop all bend nodes.\n    void clearRouteAndBends(void);\n\n    //! @brief  Build a connector route based on the bend nodes.\n    void buildRouteFromBends(void);\n\n    //! @brief  Write SVG to represent this Edge.\n    //! @return  A string containing the SVG.\n    std::string writeSvg(void) const;\n\n    //! @brief  Write the data for a polyline SVG path for this Edge's connector route.\n    std::string writePolylineConnectorData(void) const;\n\n    //! @brief  Write the data for an orthogonal SVG path for this Edge's connector route,\n    //!         using rounded bends.\n    std::string writeRoundedOrthoConnectorData(void) const;\n\nprivate:\n    //! @brief  Standard constructor.\n    //!\n    //! Each Edge has an ID number, unique among Edges (but not necessarily\n    //! distinct from ID numbers of objects of other classes).\n    //!\n    Edge(const Node_SP &src, const Node_SP &tgt);\n\n    //! @brief  No default constructor; Edges must be initialised with their\n    //!         endpoint Nodes.\n    Edge(void) = delete;\n\n    //! For class-specific generation of unique IDs:\n    static id_type nextID;\n\n    //! An instance's own unique ID:\n    const id_type m_ID;\n\n    //! An Edge can exist outside of any Graph; when it does belong to a Graph,\n    //! we keep a pointer to it here:\n    Graph *m_graph = nullptr;\n\n    //! Whether or not the Edge will be depicted as directed, we keep track of\n    //! the two endpoints as a \"source\" end and \"target\" end (\"src\" and \"tgt\").\n    //! Since Nodes keep shared pointers to all their incident Edges, we break\n    //! the cycle by having Edges keep only /weak/ pointers back to their\n    //! endpoints. (Otherwise we'll have ref counts that never go to zero, hence\n    //! a memory leak.)\n    Node_WP m_src;\n    Node_WP m_tgt;\n\n    //! Points for connector routing for the Edge:\n    std::vector<Avoid::Point> m_route;\n\n    //! Nodes to represent bends in the route.\n    Nodes m_bendNodes;\n};\n\n\n} // namespace dialect\n\n// Global Operators\ndialect::BoundingBox operator+(const dialect::BoundingBox &lhs, const dialect::BoundingBox &rhs);\nbool operator==(const dialect::BoundingBox &lhs, const dialect::BoundingBox &rhs);\nbool operator!=(const dialect::BoundingBox &lhs, const dialect::BoundingBox &rhs);\n\n#endif // DIALECT_GRAPHS_H\n"
  },
  {
    "path": "cola/libdialect/hola.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libdialect - A library for computing DiAlEcT layouts:\n *                 D = Decompose/Distribute\n *                 A = Arrange\n *                 E = Expand/Emend\n *                 T = Transform\n *\n * Copyright (C) 2018  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n * Author(s):   Steve Kieffer   <http://skieffer.info>\n*/\n\n#include <memory>\n#include <functional>\n#include <string>\n#include <iostream>\n#include <cmath>\n\n#include \"libvpsc/rectangle.h\"\n#include \"libavoid/libavoid.h\"\n\n#include \"libdialect/commontypes.h\"\n#include \"libdialect/graphs.h\"\n#include \"libdialect/peeling.h\"\n#include \"libdialect/trees.h\"\n#include \"libdialect/nodeconfig.h\"\n#include \"libdialect/aca.h\"\n#include \"libdialect/chains.h\"\n#include \"libdialect/routing.h\"\n#include \"libdialect/planarise.h\"\n#include \"libdialect/faces.h\"\n#include \"libdialect/treeplacement.h\"\n#include \"libdialect/nearalign.h\"\n#include \"libdialect/logging.h\"\n#include \"libdialect/util.h\"\n#include \"libdialect/hola.h\"\n\nusing namespace dialect;\n\nusing std::string;\n\nvoid dialect::doHOLA(Graph &G) {\n    HolaOpts opts;\n    doHOLA(G, opts);\n}\n\nvoid dialect::doHOLA(Graph &G, const HolaOpts &holaOpts, Logger *logger) {\n\n    // If there's no edges, there's nothing to do.\n    if (G.getNumEdges() == 0) return;\n\n    // Prepare logging functions in case a logger is given.\n    std::function<void(Graph&, string)> log = [logger](Graph &H, string name)->void{\n        if (logger!=nullptr) logger->log(H, name);\n    };\n    std::function<void(unsigned)> nli = [logger](unsigned ln)->void{\n        if (logger != nullptr) logger->nextLoggingIndex = ln;\n    };\n    // Initialise a logging index.\n    unsigned ln = 0;\n\n    // We let the given graph auto-infer its own ideal edge length, based on node sizes.\n    double IEL = G.getIEL();\n    // Pad nodes\n    double nodePadding = holaOpts.nodePaddingScalar*IEL;\n    G.padAllNodes(nodePadding, nodePadding);\n    // We need to dismantle the graph, so we begin by making a copy and we work on that instead.\n    // We allocate this copy on the heap, and manage it with a shared ptr, since many of our tools\n    // require that.\n    Graph_SP Gcopy = std::make_shared<Graph>(G);\n    // Clear any existing connector routes, for better logging output.\n    Gcopy->clearAllRoutes();\n\n    // Peel.\n    Trees trees = peel(*Gcopy);\n    // After peeling, the input graph is peeled down to its own core.\n    // Ac-cor-dingly : ) we rename it...\n    Graph_SP &core = Gcopy;\n\n    log(*core, string_format(\"%02d_core\", ln++));\n\n    // If it's just a tree, layout and quit.\n    // We recognise this case by there being exactly one tree, containing the same number of\n    // nodes as the original graph.\n    if (trees.size() == 1 && trees.front()->underlyingGraph()->getNumNodes() == G.getNumNodes()) {\n        // Give the tree a symmetric layout.\n        Tree_SP &tree = trees.front();\n        tree->symmetricLayout(\n            holaOpts.defaultTreeGrowthDir,\n            holaOpts.treeLayoutScalar_nodeSep*IEL,\n            holaOpts.treeLayoutScalar_rankSep*IEL,\n            holaOpts.preferConvexTrees\n        );\n        // Route the edges.\n        RoutingAdapter ra(Avoid::OrthogonalRouting);\n        ra.router.setRoutingOption(Avoid::nudgeOrthogonalSegmentsConnectedToShapes, true);\n        ra.router.setRoutingOption(Avoid::nudgeSharedPathsWithCommonEndPoint, true);\n        ra.router.setRoutingParameter(Avoid::idealNudgingDistance, holaOpts.routingAbs_nudgingDistance);\n        tree->addNetworkToRoutingAdapter(ra, holaOpts.wholeTreeRouting);\n        ra.route();\n        // Remove node padding.\n        G.padAllNodes(-nodePadding, -nodePadding);\n        // Set layout data in original Graph.\n        tree->underlyingGraph()->setPosesInCorrespNodes(G);\n        tree->underlyingGraph()->setRoutesInCorrespEdges(G);\n        tree->addConstraints(G, true);\n        // Done.\n        return;\n    }\n\n    // Otherwise we do have a core and trees.\n\n    // Start with a plain destress -- no constraints, no overlap prevention -- in order to begin\n    // giving the nodes a reasonable distribution in the plane.\n    core->destress();\n\n    log(*core, string_format(\"%02d_free_destress_core\", ln++));\n\n    // Now destress again, this time removing any node overlaps.\n    ColaOptions colaOpts;\n    colaOpts.preventOverlaps = true;\n    core->destress(colaOpts);\n\n    log(*core, string_format(\"%02d_OP_destress_core\", ln++));\n\n    // Layout the hubs.\n    nli(ln);\n    OrthoHubLayoutOptions ohlOpts;\n    ohlOpts.avoidFlatTriangles = holaOpts.orthoHubAvoidFlatTriangles;\n    OrthoHubLayout ohl(core, ohlOpts);\n    ohl.layout(logger);\n\n    log(*core, string_format(\"%02d_core_ortho_hub\", ln++));\n\n    // Set extra gap for boundary constraints.\n    core->getSepMatrix().setExtraBdryGap(IEL/2.0);\n\n    // Dissipate any stress accumulated during ortho hub layout, aiming to regain a natrual\n    // distribution for the nodes that remain unconstrained, and perhaps regain natural symmetries.\n    // This time, besides just preventing overlaps between nodes, we also prevent any nodes from\n    // overlapping with aligned edges.\n    colaOpts.solidifyAlignedEdges = true;\n    colaOpts.logger = logger;\n    nli(ln);\n    core->destress(colaOpts);\n\n    log(*core, string_format(\"%02d_EOP_destress_core\", ln++));\n\n    // Next we lay out the links.\n    // We may or may not build Chains for this process. Later we will need to know whether chains\n    // were built, so the vector of Chains is declared at this scope.\n    Chains chains;\n    if (holaOpts.useACAforLinks) {\n        // Use ACA.\n        ACALayout aca(core);\n        aca.createAlignments();\n        // ACA is an older algorithm, from before we used Graphs.\n        // For backward compatibility, it does not automatically update its Graph with the\n        // positions and constraints from the layout, because it does not always /have/ a Graph.\n        // So we ask it to do the update.\n        aca.updateGraph();\n    } else {\n        // Use shape-conforming chain layout.\n        chains = buildAllChainsInGraph(core);\n        for (Chain_SP chain : chains) chain->takeShapeBasedConfiguration();\n        // We project before destressing with edge-node overlap prevention, so that the edges of\n        // the chain can be axis aligned first.\n        // We do NOT want overlap prevention for the projection, because the new chain configuration\n        // constraints may very well reverse one or more orthogonal orderings, and we need them to\n        // be free to do that.\n        colaOpts.preventOverlaps = false;\n        colaOpts.solidifyAlignedEdges = false;\n        core->project(colaOpts, vpsc::XDIM);\n        core->project(colaOpts, vpsc::YDIM);\n    }\n\n    // Destress with overlap prevention including aligned edges.\n    // At this time we also prepare for the next step, which involves connector routing.\n    // To ensure the routing is possible, we ensure there is some gap between all nodes.\n    // We do this by adding padding, destressing, and then removing this padding.\n    colaOpts.preventOverlaps = true;\n    colaOpts.solidifyAlignedEdges = true;\n    nli(ln);\n    double preRoutingGapIELScalar = 0.125;\n    double preRoutingGap = preRoutingGapIELScalar*IEL;\n    core->padAllNodes(preRoutingGap, preRoutingGap);\n    core->destress(colaOpts);\n    core->padAllNodes(-preRoutingGap, -preRoutingGap);\n    if (holaOpts.useACAforLinks) {\n        log(*core, string_format(\"%02d_core_link_config_ACA\", ln++));\n    } else {\n        log(*core, string_format(\"%02d_core_link_config_Chains\", ln++));\n    }\n\n    // Next is the phase in which we planarise the core.\n    // However, we want a 4-planar orthogonal layout with no leaves for this phase, so we first\n    // perform a special orthogonal connector routing, which ensures that no nodes will become\n    // leaves in the planarisation. (It does this by ensuring that connectors are routed to at\n    // least two distinct sides of each node.)\n    LeaflessOrthoRouter lor(core, holaOpts);\n    nli(ln);\n    lor.route(logger);\n    ++ln;\n\n    log(*core, string_format(\"%02d_core_leafless_ortho_route\", ln++));\n\n    OrthoPlanariser op(core);\n    Graph_SP P = op.planarise();\n\n    log(*P, string_format(\"%02d_planar_graph_P\", ln++));\n\n    // Set extra gap for boundary constraints.\n    P->getSepMatrix().setExtraBdryGap(IEL/2.0);\n    // Destress the new planar graph P, aiming to regain possible natural symmetries.\n    // But use overlap prevention so that the structure cannot change.\n    // (Note that now /all/ edges are aligned, so we have total edge-node overlap prevention.)\n    colaOpts.preventOverlaps = true;\n    colaOpts.solidifyAlignedEdges = true;\n    nli(ln);\n    P->destress(colaOpts);\n\n    log(*P, string_format(\"%02d_P_EOP_destress\", ln++));\n\n    // Now we want to reattach the trees, choosing faces of the planarised core in which to\n    // place them.\n    // First the trees need their own symmetric layout.\n    unsigned lns = 0;  // initialise logging sub-index\n    for (Tree_SP tree : trees) {\n        tree->symmetricLayout(\n            holaOpts.defaultTreeGrowthDir,\n            holaOpts.treeLayoutScalar_nodeSep*IEL,\n            holaOpts.treeLayoutScalar_rankSep*IEL,\n            holaOpts.preferConvexTrees\n        );\n        log(*(tree->underlyingGraph()), string_format(\"%02d_%02d_symm_tree\", ln, lns++));\n    }\n\n    ++ln;\n    nli(ln);\n    // Now we can choose faces and reattach them.\n    FaceSet_SP faceSet = reattachTrees(P, trees, holaOpts, logger);\n    ++ln;\n    // We will need the vector of chosen tree placements.\n    TreePlacements tps = faceSet->getAllTreePlacements();\n\n    // Next we insert the actual trees back into the planar graph.\n    // The trees come with buffer nodes. We build a record of those, so they can be\n    // ignored where necessary.\n    NodesById bufferNodes;\n    EdgesById treeEdges;\n    std::vector<NodesById> clustersSansBufferNodes;\n    for (auto tp : tps) {\n        tp->applyGeometryToTree();\n        NodesById treeNodes;\n        NodesById buffNodes;\n        tp->insertTreeIntoGraph(*P, treeNodes, buffNodes, treeEdges);\n        clustersSansBufferNodes.push_back(treeNodes);\n        treeNodes.insert(buffNodes.begin(), buffNodes.end());\n        bufferNodes.insert(buffNodes.begin(), buffNodes.end());\n        colaOpts.nodeClusters.push_back(treeNodes);\n    }\n\n    log(*P, string_format(\"%02d_P_with_trees\", ln++));\n\n    // We don't need solid edges within the trees; moreover, this would cause constraint\n    // conflicts since the tree nodes now belong to clusters to which their solid edges\n    // would not belong.\n    colaOpts.solidEdgeExemptions = treeEdges;\n    // Destress using neighbour stress, in order to compactify.\n    colaOpts.useNeighbourStress = true;\n    // Now that we are using clusters to keep the tree nodes together, we make sure\n    // we do not use majorization, since ConstrainedMajorizationLayout does not work\n    // with RectangularClusters.\n    colaOpts.useMajorization = false;\n\n    nli(ln);\n    P->destress(colaOpts);\n\n    log(*P, string_format(\"%02d_P_nbr_destress\", ln++));\n\n    // Do near alignments.\n    if (holaOpts.do_near_align) {\n        AlignmentTable atab(*P, bufferNodes);\n        for (size_t i = 0; i < holaOpts.align_reps; ++i) {\n            doNearAlignments(*P, atab, bufferNodes, holaOpts);\n            // After each attempt to add alignment constraints, destress, again using\n            // neighbour stress and majorization.\n            nli(ln);\n            P->destress(colaOpts);\n            log(*P, string_format(\"%02d_P_near_alignments\", ln++));\n        }\n    }\n\n    // Delete buffer nodes.\n    P->removeNodes(bufferNodes);\n    colaOpts.nodeClusters = clustersSansBufferNodes;\n\n    // Rotate if desired.\n    if (holaOpts.preferredAspectRatio != AspectRatioClass::NONE) {\n        BoundingBox b = P->getBoundingBox(bufferNodes);\n        double w = b.w(),\n               h = b.h();\n        bool scaleBySize = true;\n        unsigned quarterTurnsCW = 0;\n        auto counts = faceSet->getNumTreesByGrowthDir(scaleBySize);\n        if ((w < h && holaOpts.preferredAspectRatio == AspectRatioClass::LANDSCAPE) ||\n            (h < w && holaOpts.preferredAspectRatio == AspectRatioClass::PORTRAIT)) {\n            // Need to rotate 90 degrees to get preferred aspect ratio.\n            // There are two ways to do this (clockwise and anticlockwise).\n            // In order to choose one, consult the preferred tree growth direction.\n            // Determine how many trees grow in the two directions 90 degrees away from this one.\n            CardinalDir q = holaOpts.preferredTreeGrowthDir,\n                        p = Compass::cardRotateAcw90(q),\n                        r = Compass::cardRotateCw90(q);\n            size_t np = counts[p],\n                   nr = counts[r];\n            nli(ln);\n            if (np >= nr) {\n                // In this case rotating clockwise will put more trees in the preferred\n                // growth direction.\n                P->rotate90cw(&colaOpts);\n                // We need to rotate the constraints in the core too, since later we're\n                // going to write those into the original graph.\n                core->getSepMatrix().transform(SepTransform::ROTATE90CW);\n                quarterTurnsCW = 1;\n            } else {\n                // In this case rotating anticlockwise is preferred.\n                P->rotate90acw(&colaOpts);\n                core->getSepMatrix().transform(SepTransform::ROTATE90ACW);\n                quarterTurnsCW = 3;\n            }\n            ln += 2;\n        } else {\n            // In this case we may rotate 180 degrees if that would put more trees in the preferred\n            // growth direction.\n            CardinalDir q = holaOpts.preferredTreeGrowthDir,\n                        s = Compass::cardFlip(q);\n            size_t nq = counts[q],\n                   ns = counts[s];\n            if (ns > nq) {\n                P->rotate180();\n                core->getSepMatrix().transform(SepTransform::ROTATE180);\n                quarterTurnsCW = 2;\n            }\n        }\n        // Update Tree growth directions as needed.\n        if (quarterTurnsCW != 0) {\n            for (Tree_SP tree : trees) tree->rotateGrowthDirCW(quarterTurnsCW);\n        }\n    }\n\n    log(*P, string_format(\"%02d_P_rotation\", ln++));\n\n    // Translate if desired.\n    if (holaOpts.putUlcAtOrigin) {\n        NodesById ignore; // leave empty; don't ignore any nodes\n        bool includeBends = true; // we want the edge routes included\n        BoundingBox b = P->getBoundingBox(ignore, includeBends);\n        double dx = -b.x,\n               dy = -b.y;\n        P->translate(dx, dy);\n    }\n\n    log(*P, string_format(\"%02d_P_translation\", ln++));\n\n    // At this point, we can ask the planar graph P to set node positions in the original graph G.\n    // This is because it is now true that for every node u in G, there is a node v in P with v.ID == u.ID.\n    // Initially, P had a GhostNode representing each Node in the core of G. But now we have also added\n    // the Trees into P (by calling insertTreeIntoGraph on each TreePlacement). P may have additional nodes\n    // that do not correspond to any nodes in G, but this does not matter.\n    P->setPosesInCorrespNodes(G);\n    // Similarly, P now holds the full set of constraints that we want to keep, so we can ask it to set\n    // those into G as well.\n    G.clearAllConstraints();\n    core->setCorrespondingConstraints(G);\n    P->setCorrespondingConstraints(G);\n    // Set extra gap for boundary constraints.\n    G.getSepMatrix().setExtraBdryGap(IEL/2.0);\n\n    // Final connector routing.\n    G.clearAllRoutes();\n\n    if (chains.size() > 0) {\n        // If we used Chains, then there may be AestheticBends that were set as route points for certain\n        // connectors. For these we made Nodes and added them to the core graph. We then made GhostNodes of\n        // these, in the planar graph P. In subsequent layout of P, the positions of these GhostNodes were updated.\n        // However, the Chains themselves still retain pointers not to these GhostNodes, but to the original\n        // AestheticBend nodes that were added to the core graph. Therefore before we can ask the Chains to add\n        // these route points into the Edges of the original Graph G, we must ask P to update their positions.\n        P->setPosesInCorrespNodes(*core);\n        for (Chain_SP ch : chains) ch->addAestheticBendsToEdges();\n        G.buildRoutes();\n    }\n    // Set up a routing adapter.\n    RoutingAdapter ra(Avoid::OrthogonalRouting);\n    ra.router.setRoutingOption(Avoid::nudgeOrthogonalSegmentsConnectedToShapes, true);\n    ra.router.setRoutingOption(Avoid::nudgeSharedPathsWithCommonEndPoint, true);\n    ra.router.setRoutingParameter(Avoid::crossingPenalty, 2*IEL);\n    ra.router.setRoutingParameter(Avoid::segmentPenalty, IEL/2.0);\n    ra.router.setRoutingParameter(Avoid::idealNudgingDistance, holaOpts.routingAbs_nudgingDistance);\n    // Ask the core graph to add its nodes, and just those edges that do not have any bend nodes.\n    // After asking G to clear all routes (remember G has the same Edges as core), these will be all and only\n    // those Edges for which no Chain set any aesthetic bend.\n    \n    // Remove part of the node padding now, to ensure open channels for connector routing.\n    double nodePaddingLayer1 = 2*preRoutingGapIELScalar*nodePadding;\n    double nodePaddingLayer2 = nodePadding - nodePaddingLayer1;\n    core->padAllNodes(-nodePaddingLayer1, -nodePaddingLayer1);\n    \n    core->addBendlessSubnetworkToRoutingAdapter(ra);\n    // Ask each Tree to add its network to the router.\n    for (Tree_SP tree : trees) {\n        tree->underlyingGraph()->padAllNodes(-nodePaddingLayer1, -nodePaddingLayer1);\n        tree->padCorrespNonRootNodes(G, -nodePaddingLayer1, -nodePaddingLayer1);\n        tree->addNetworkToRoutingAdapter(ra, holaOpts.peeledTreeRouting, core);\n    }\n    // Do the routing.\n    ra.route();\n    // Again, since the Edges of core also belong to G, those routes are already set in the original graph G.\n    // However the Edges of the Trees are new ones that were never in G. So we need to set those routes.\n    for (Tree_SP tree : trees) {\n        tree->underlyingGraph()->setRoutesInCorrespEdges(G);\n    }\n\n    // Remove remaining node padding.\n    G.padAllNodes(-nodePaddingLayer2, -nodePaddingLayer2);\n}\n"
  },
  {
    "path": "cola/libdialect/hola.h",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libdialect - A library for computing DiAlEcT layouts:\n *                 D = Decompose/Distribute\n *                 A = Arrange\n *                 E = Expand/Emend\n *                 T = Transform\n *\n * Copyright (C) 2018  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n * Author(s):   Steve Kieffer   <http://skieffer.info>\n*/\n\n#ifndef DIALECT_HOLA_H\n#define DIALECT_HOLA_H\n\n#include <string>\n#include <vector>\n\n#include \"libdialect/commontypes.h\"\n#include \"libdialect/opts.h\"\n#include \"libdialect/logging.h\"\n\nnamespace dialect {\n\n//! @brief  Apply the HOLA layout algorithm to the given Graph.\n//!         See Steve Kieffer, Tim Dwyer, Kim Marriott, and Michael Wybrow.\n//!         HOLA: Human-like Orthogonal Network Layout.\n//!         IEEE Transactions on Visualization and Computer Graphics 22, no. 1 (2016): 349-358.\n//! @param[in, out] G  The Graph to be laid out. Node positions are updated in-place. Constraints\n//!                    are set in the Graph's SepMatrix.\n//! @param[in] opts  Options controlling the layout.\n//! @param[out] logger  Optional pointer to a Logger in which to record TGLF for various stages\n//!                     of the layout process. Useful for debugging.\nvoid doHOLA(dialect::Graph &G, const dialect::HolaOpts &holaOpts, dialect::Logger *logger = nullptr);\n\n//! @brief  Convenience function to do HOLA layout with default options.\n//! @param[in, out] G  The Graph to be laid out. Node positions are updated in-place. Constraints\n//!                    are set in the Graph's SepMatrix.\nvoid doHOLA(dialect::Graph &G);\n\n\n} // namespace dialect\n\n#endif // DIALECT_HOLA_H\n"
  },
  {
    "path": "cola/libdialect/io.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libdialect - A library for computing DiAlEcT layouts:\n *                 D = Decompose/Distribute\n *                 A = Arrange\n *                 E = Expand/Emend\n *                 T = Transform\n *\n * Copyright (C) 2018  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n * Author(s):   Steve Kieffer   <http://skieffer.info>\n*/\n\n#include <fstream>\n#include <sstream>\n#include <string>\n#include <vector>\n#include <memory>\n#include <sys/stat.h>\n#include <stdexcept>\n\n#include \"libvpsc/assertions.h\"\n#include \"libdialect/commontypes.h\"\n#include \"libdialect/graphs.h\"\n#include \"libdialect/io.h\"\n#include \"libdialect/constraints.h\"\n\nusing namespace dialect;\n\nusing std::istream;\nusing std::ifstream;\nusing std::ofstream;\nusing std::string;\nusing std::getline;\nusing std::istringstream;\nusing std::vector;\nusing std::endl;\n\nGraph_SP dialect::buildGraphFromTglf(std::string &s) {\n    istringstream in(s);\n    return buildGraphFromTglf(in);\n}\n\n// Simple line-based parsing:\n//   https://stackoverflow.com/questions/7868936/read-file-line-by-line\n//   https://stackoverflow.com/a/7868998\nGraph_SP dialect::buildGraphFromTglf(istream &in) {\n    Graph_SP graph = std::make_shared<Graph>();\n    NodesById nodesByExternalId;\n    unsigned extId;\n    string line;\n    unsigned state = 0;\n    double cx, cy, w, h;\n    unsigned i1, i2;\n    char gtc, dir, rel1, rel2;\n    double gap;\n    Node_SP node;\n    Edge_SP edge;\n    while (getline(in, line)) {\n        // Skip empty lines.\n        if (line.empty()) continue;\n        // Comment lines begin with \"//\". (See https://stackoverflow.com/a/40441240)\n        if (line.rfind(\"//\", 0) == 0) continue;\n        // Check for \"#\" lines.\n        if (line == \"#\") {\n            // Time to change state.\n            COLA_ASSERT(++state < 3);\n            // And continue to the next line.\n            continue;\n        }\n        // Otherwise it should be a data line.\n        istringstream iss(line);\n        switch (state) {\n        case 0:\n            // NODES\n            COLA_ASSERT(iss >> extId >> cx >> cy >> w >> h);\n            COLA_ASSERT(w > 0);\n            COLA_ASSERT(h > 0);\n            node = Node::allocate();\n            node->setExternalId(extId);\n            node->setCentre(cx, cy);\n            node->setDims(w, h);\n            graph->addNode(node);\n            nodesByExternalId.insert({extId, node});\n            break;\n        case 1:\n            // LINKS\n            COLA_ASSERT(iss >> i1 >> i2);\n            edge = Edge::allocate(nodesByExternalId[i1], nodesByExternalId[i2]);\n            while (iss >> cx >> cy) {\n                edge->addRoutePoint(cx, cy);\n            }\n            graph->addEdge(edge);\n            break;\n        case 2:\n            // SEPCOS\n            COLA_ASSERT(iss >> i1 >> i2 >> gtc >> dir >> rel1 >> rel2 >> gap);\n            id_type j1 = nodesByExternalId[i1]->id(),\n                    j2 = nodesByExternalId[i2]->id();\n            GapType gt{};\n            SepDir sd{};\n            SepType st{};\n            switch(gtc) {\n                case 'B': gt=GapType::BDRY; break;\n                case 'C': gt=GapType::CENTRE; break;\n                default:\n                    COLA_ASSERT(false);\n            }\n            switch(dir) {\n                case 'E': sd=SepDir::EAST; break;\n                case 'S': sd=SepDir::SOUTH; break;\n                case 'W': sd=SepDir::WEST; break;\n                case 'N': sd=SepDir::NORTH; break;\n                case 'R': sd=SepDir::RIGHT; break;\n                case 'D': sd=SepDir::DOWN; break;\n                case 'L': sd=SepDir::LEFT; break;\n                case 'U': sd=SepDir::UP; break;\n                case 'X': sd=SepDir::RIGHT; break;\n                case 'Y': sd=SepDir::DOWN; break;\n                default:\n                    COLA_ASSERT(false);\n            }\n            switch(rel1) {\n                case '=': st=SepType::EQ; break;\n                case '>': st=SepType::INEQ; break;\n                default:\n                    COLA_ASSERT(false);\n            }\n            graph->getSepMatrix().addSep(j1, j2, gt, sd, st, gap);\n            break;\n        }\n    }\n    return graph;\n}\n\nGraph_SP dialect::buildGraphFromTglfFile(const string &filepath) {\n    struct stat buf;\n    if (stat(filepath.c_str(), &buf) == -1) {\n        const std::string msg = \"File does not exist: \" + filepath;\n        throw std::runtime_error(msg);\n    }\n    ifstream infile(filepath);\n    return buildGraphFromTglf(infile);\n}\n\nvoid dialect::writeStringToFile(const std::string &s, const std::string &filepath) {\n    ofstream outfile(filepath);\n    outfile << s;\n    outfile.close();\n}\n"
  },
  {
    "path": "cola/libdialect/io.h",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libdialect - A library for computing DiAlEcT layouts:\n *                 D = Decompose/Distribute\n *                 A = Arrange\n *                 E = Expand/Emend\n *                 T = Transform\n *\n * Copyright (C) 2018  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n * Author(s):   Steve Kieffer   <http://skieffer.info>\n*/\n\n#ifndef DIALECT_IO_H\n#define DIALECT_IO_H\n\n#include <istream>\n#include <string>\n#include <memory>\n#include <iostream>\n#include <cstdio>\n\nnamespace dialect {\n\nclass Graph;\n\n/*\n * Support for TGLF: Trivial Graph Layout Format.\n *\n * TGLF looks like this:\n *\n * // This line is a comment.\n * i0 cx0 cy0 w0 h0\n * i1 cx1 cy1 w1 h1\n * ...\n * in xn yn wn hn\n * #\n * i0 i1\n * i2 i3 a  b  c  d\n * i4 i5 a' b'\n * i6 i7\n * ...\n * #\n * j0 j1 T  D  R  G\n * j2 j3 T' D' R' G'\n * ...\n *\n * and is of the form:\n *\n * NODES\n * #\n * LINKS\n * #\n * SEPCOS\n *\n * where\n *\n * NODES defines one node per line, giving an ID as an unsigned int, followed by\n * four floats: the x and y coordinates of the centre of the node, and its width\n * and height.\n *\n * LINKS defines one link (or \"edge\" or \"connector\") per line. A line begins\n * with two node IDs, as defined in NODES. This is followed by zero or more pairs\n * of floats giving the (x, y)-coordinates of route points. The centres of the\n * source and target nodes are implicit route points, and should not be listed.\n *\n * SEPCOS defines one separation constraint per line. As with the LINKS,\n * a line begins with two node IDs. This is followed by a *gap type*,\n * a *direction*, a *relation*, and a *gap* G.\n * \n *   gap type: a character among: B, C\n *      B: \"boundary gap\". The gap is between the node boundaries.\n *      C: \"centre gap\". The gap is between the node centres.\n * \n *   direction: a character among: N, S, E, W, U, D, L, R, X, Y\n *      N, S, E, W: north, south, east, west. A separation, plus an alignment.\n *      U, D, L, R: up, down, left, right. Just a separation.\n *      X, Y: synonyms for R and D, respectively\n * \n *   relation: one of the strings '>=' or '=='\n *      >=: the constraint sets a minimum gap\n *      ==: the constraint sets an exact gap\n * \n *   gap: a float value, specifying the desired gap\n *\n * The NODES section must be nonempty, but either or both of the LINKS\n * and SEPCOS sections may be empty or omitted.\n *\n*/\n\n//! @brief  Build a Graph object from TGLF.\n//!\n//! @param[in]  in  An istream containing TGLF.\n//!\n//! @return  A Graph built on the given TGLF.\nstd::shared_ptr<Graph> buildGraphFromTglf(std::istream &in);\n\n//! @brief  Build a Graph object from TGLF.\n//!\n//! @param[in]  in  A string containing TGLF.\n//!\n//! @return  A Graph built on the given TGLF.\nstd::shared_ptr<Graph> buildGraphFromTglf(std::string &s);\n\n//! @brief  Build a Graph object from a file containing TGLF.\n//!\n//! @param[in]  filepath  Full filesystem path to a file containing TGLF.\n//!\n//! @return  A Graph built on the given TGLF.\nstd::shared_ptr<Graph> buildGraphFromTglfFile(const std::string &filepath);\n\n//! @brief  Write a string to a file.\n//!\n//! @param[in]  s  the string to be written\n//! @param[in]  filepath  full filesystem path to the file to be written\nvoid writeStringToFile(const std::string &s, const std::string &filepath);\n\n} // namespace dialect\n\n#endif // DIALECT_IO_H\n"
  },
  {
    "path": "cola/libdialect/libdialect.h",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libdialect - A library for computing DiAlEcT layouts:\n *                 D = Decompose/Distribute\n *                 A = Arrange\n *                 E = Expand/Emend\n *                 T = Transform\n *\n * Copyright (C) 2018  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n * Author(s):   Steve Kieffer   <http://skieffer.info>\n*/\n\n//! @file  libdialect.h\n//! @brief Standard libdialect include file which includes all libdialect\n//!        functionality.\n\n/**\n * @namespace dialect\n * @brief libdialect: A library for computing human-like orthogonal network\n *        (DiAlEcT) layouts.\n *\n */\n#ifndef DIALECT_LIBDIALECT_H\n#define DIALECT_LIBDIALECT_H\n\n#include \"libdialect/aca.h\"\n#include \"libdialect/hola.h\"\n\n#endif\n\n\n"
  },
  {
    "path": "cola/libdialect/libdialect.pc.in",
    "content": "prefix=@prefix@\nexec_prefix=@exec_prefix@\nlibdir=@libdir@\nincludedir=@includedir@\n\nName: libdialect\nDescription: DiAlEcT = Distribute + Arrange + Emend + Transform\nURL: http://www.adaptagrams.org/\nVersion: @VERSION@\nLibs: -L${libdir} -ldialect\nCflags: -I${includedir}/libdialect\n\n"
  },
  {
    "path": "cola/libdialect/logging.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libdialect - A library for computing DiAlEcT layouts:\n *                 D = Decompose/Distribute\n *                 A = Arrange\n *                 E = Expand/Emend\n *                 T = Transform\n *\n * Copyright (C) 2018  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n * Author(s):   Steve Kieffer   <http://skieffer.info>\n*/\n\n#include <string>\n#include <vector>\n#include <iostream>\n\n#include \"libdialect/io.h\"\n#include \"libdialect/graphs.h\"\n#include \"libdialect/logging.h\"\n\nusing namespace dialect;\n\nusing std::string;\nusing std::vector;\n\nLogger::Logger(std::string outputDir, std::string prefix, bool verbose, bool addSVG)\n    : outputDir(outputDir), prefix(prefix), verbose(verbose), addSVG(addSVG)\n{\n    if (outputDir.size() > 0) hasOutputDir = true;\n    if (prefix.size() > 0) {\n        hasPrefix = true;\n        prefix += \"_\";\n    }\n}\n\nvoid Logger::log(std::string content, std::string name) {\n    // At least we record the content.\n    contents.push_back(content);\n    // Was a name given?\n    if (name.size() > 0) {\n        names.push_back(name);\n        // Write to stdout?\n        if (verbose) std::cout << \"Log: \" << name << std::endl;\n        // Do we have an output directory?\n        if (hasOutputDir) {\n            // Set prefix if provided.\n            if (hasPrefix) name = prefix + name;\n            // Write.\n            string path = outputDir + name;\n            writeStringToFile(content, path);\n        }\n    }\n}\n\nvoid Logger::log(Graph &G, std::string name) {\n    string tglf = G.writeTglf();\n    log(tglf, name+\".tglf\");\n    if (addSVG) {\n        string svg = G.writeSvg();\n        log(svg, name+\".svg\");\n    }\n}\n\nstring Logger::writeFullPathForFilename(std::string name) {\n    if (hasPrefix) name = prefix + name;\n    string path = outputDir + name;\n    return path;\n}\n"
  },
  {
    "path": "cola/libdialect/logging.h",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libdialect - A library for computing DiAlEcT layouts:\n *                 D = Decompose/Distribute\n *                 A = Arrange\n *                 E = Expand/Emend\n *                 T = Transform\n *\n * Copyright (C) 2018  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n * Author(s):   Steve Kieffer   <http://skieffer.info>\n*/\n\n#ifndef DIALECT_LOGGING_H\n#define DIALECT_LOGGING_H\n\n#include <string>\n#include <vector>\n\n#include \"libdialect/commontypes.h\"\n\nnamespace dialect {\n\nstruct Logger {\n    std::string outputDir = \"\";\n    std::string prefix = \"\";\n    std::vector<std::string> contents;\n    std::vector<std::string> names;\n    bool hasOutputDir = false;\n    bool hasPrefix = false;\n    //! Control whether the logger writes to stdout the name of each file recorded:\n    bool verbose = false;\n    //! If true, then when logging TGLF for a graph, also log SVG:\n    bool addSVG = false;\n\n    //! Sometimes it is useful to be able to record a number that should be used in a\n    //! prefix by various processes. Helps when separate processes are being logged.\n    //! This is not used by the Logger itself. It is only a convenience for use by clients.\n    unsigned nextLoggingIndex = 0;\n\n    //! @brief  Standard constructor.\n    //! @param[in] outputDir  Optional name of output directory in which files should be written.\n    //! @param[in] prefix  Optional prefix to put at start of all file names.\n    //! @param[in] verbose  Set true if you want the logger to write each recorded name to stdout.\n    //! @param[in] addSVG  Set true if you want the logger to also write an SVG file, each time it\n    //!     writes a TGLF file.\n    //!\n    //! @note  If no outputDir is given, then strings are only saved in this object.\n    //! @note  If a prefix is given, an underscore will be automatically appended to it.\n    Logger(std::string outputDir = \"\", std::string prefix = \"\",\n        bool verbose = false, bool addSVG = false);\n\n    //! @brief  Record a string, optionally to a named file in the output dir.\n    //! @param[in] content  The string to be recorded.\n    //! @param[in] name  The name under which to record it.\n    void log(std::string content, std::string name=\"\");\n\n    //! @brief  Convenience method to log the TGLF for a Graph.\n    //! @param[in] G  The Graph whose TGLF is to be logged.\n    //! @param[in] name  The filename for the TGLF file WITHOUT the \".tglf\" suffix. The suffix\n    //!                  is automatically added for you.\n    void log(Graph &G, std::string name=\"\");\n\n    //! @brief  Given a filename, prepend the output directory and prefix (if given) in order\n    //!         to write the full path.\n    //! @return The full path.\n    std::string writeFullPathForFilename(std::string name);\n\n};\n\n\n} // namespace dialect\n\n#endif // DIALECT_LOGGING_H\n"
  },
  {
    "path": "cola/libdialect/nearalign.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libdialect - A library for computing DiAlEcT layouts:\n *                 D = Decompose/Distribute\n *                 A = Arrange\n *                 E = Expand/Emend\n *                 T = Transform\n *\n * Copyright (C) 2018  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n * Author(s):   Steve Kieffer   <http://skieffer.info>\n*/\n\n#include <math.h>\n#include <cmath>\n#include <utility>\n#include <memory>\n#include <vector>\n#include <algorithm>\n#include <stdexcept>\n#include <iterator>\n#include <map>\n#include <set>\n\n#include \"libvpsc/rectangle.h\"\n#include \"libavoid/geomtypes.h\"\n\n#include \"libdialect/commontypes.h\"\n#include \"libdialect/ortho.h\"\n#include \"libdialect/graphs.h\"\n#include \"libdialect/planarise.h\"\n#include \"libdialect/util.h\"\n#include \"libdialect/constraints.h\"\n#include \"libdialect/nearalign.h\"\n\nusing namespace dialect;\n\nusing std::pair;\nusing std::vector;\nusing std::map;\nusing std::set;\nusing std::fabs;\n\nusing Avoid::Point;\n\n\nAlignmentTable::AlignmentTable(Graph &graph, const Nodes &ignore) {\n    SepMatrix &matrix = graph.getSepMatrix();\n    // Get the lookup of Nodes we care about.\n    NodesById care = graph.getNodeLookupWithIgnore(ignore);\n    addAlignments(care, matrix);\n}\n\nAlignmentTable::AlignmentTable(Graph &graph, const NodesById &ignore) {\n    SepMatrix &matrix = graph.getSepMatrix();\n    // Get the lookup of Nodes we care about.\n    NodesById care = graph.getNodeLookupWithIgnore(ignore);\n    addAlignments(care, matrix);\n}\n\nvoid AlignmentTable::addAlignments(const NodesById &nodes, const SepMatrix &matrix) {\n    // Add alignments with transitive closure for each pair of distinct nodes.\n    for (auto it = nodes.begin(); it != std::prev(nodes.end()); ++it) {\n        for (auto jt = std::next(it); jt != nodes.end(); ++jt) {\n            id_type i = (*it).first,\n                    j = (*jt).first;\n            if (matrix.areHAligned(i, j)) addAlignment(i, j, AlignmentFlag::HALIGN);\n            else if (matrix.areVAligned(i, j)) addAlignment(i, j, AlignmentFlag::VALIGN);\n        }\n    }\n}\n\nbool AlignmentTable::areAligned(id_type uid, id_type vid, AlignmentFlag flag) {\n    return (state[uid][vid] & flag) == flag;\n}\n\nvector<id_type> AlignmentTable::getAlignedIds(id_type uid, AlignmentFlag flag) {\n    vector<id_type> ids{uid};\n    for (auto it = state[uid].begin(); it != state[uid].end(); ++it) {\n        auto p = *it;\n        if ((p.second & flag) == flag) ids.push_back(p.first);\n    }\n    return ids;\n}\n\nvoid AlignmentTable::addAlignment(id_type uid, id_type vid, AlignmentFlag flag) {\n    // Get the alignment vectors.\n    vector<id_type> Au = getAlignedIds(uid, flag),\n                    Av = getAlignedIds(vid, flag);\n    // Record that everything in Au is aligned with everything in Av.\n    for (id_type id1 : Au) {\n        for (id_type id2 : Av) {\n            state[id1][id2] |= flag;\n            state[id2][id1] |= flag;\n        }\n    }\n}\n\nvoid AlignmentTable::noteInfeasibility(id_type uid, id_type vid, AlignmentFlag flag) {\n    if (flag == AlignmentFlag::HALIGN) {\n        state[uid][vid] |= AlignmentFlag::HINFEAS;\n        state[vid][uid] |= AlignmentFlag::HINFEAS;\n    } else if (flag == AlignmentFlag::VALIGN) {\n        state[uid][vid] |= AlignmentFlag::VINFEAS;\n        state[vid][uid] |= AlignmentFlag::VINFEAS;\n    }\n}\n\nbool AlignmentTable::isMarkedInfeasible(id_type uid, id_type vid, AlignmentFlag flag) {\n    AlignmentFlag infeas = flag == AlignmentFlag::HALIGN ? AlignmentFlag::HINFEAS : AlignmentFlag::VINFEAS;\n    return (state[uid][vid] & infeas) == infeas;\n}\n\n\ndouble dialect::manhattan(Node_SP u, Node_SP v) {\n    Point uc = u->getCentre(),\n          vc = v->getCentre();\n    return fabs(uc.x - vc.x) + fabs(uc.y - vc.y);\n}\n\nvoid PotentialAlignment::remove(void) {\n    // If not yet removed...\n    if (!removed) {\n        // ...remove self from linked list by linking prev and next to each other.\n        if (prev != nullptr) prev->next = next;\n        if (next != nullptr) next->prev = prev;\n        // And now mark self as removed.\n        removed = true;\n    }\n}\n\nvoid PotentialAlignment::addToGraph(Graph &G) {\n    SepMatrix &matrix = G.getSepMatrix();\n    id_type uid = u->id(),\n            vid = v->id();\n    if (flag == AlignmentFlag::HALIGN) matrix.hAlign(uid, vid);\n    else matrix.vAlign(uid, vid);\n}\n\nSepCo_SP PotentialAlignment::writeSepCo(void) {\n    vpsc::Dim dim = flag == AlignmentFlag::HALIGN ? vpsc::YDIM : vpsc::XDIM;\n    return std::make_shared<SepCo>(dim, u, v, 0, true);\n}\n\nsize_t dialect::doNearAlignments(Graph &graph, AlignmentTable &atab, NodesById &ignore, const HolaOpts &opts, bool reattempt) {\n    size_t successCount = 0;\n    using vpsc::XDIM;\n    using vpsc::YDIM;\n    // Set up maps.\n    map<vpsc::Dim, bool> active{\n        {XDIM, true}, {YDIM, true}\n    };\n    map<vpsc::Dim, AlignmentFlag> d2a{\n        {XDIM, AlignmentFlag::VALIGN}, {YDIM, AlignmentFlag::HALIGN}\n    };\n    // Get nodes of interest.\n    NodesById nodes = graph.getNodeLookupWithIgnore(ignore);\n    // Compute parameters.\n    double iel = graph.getIEL(),\n           hkw = iel * opts.nearAlignScalar_kinkWidth / 2.0,\n           asc = iel * opts.nearAlignScalar_scope;\n    // Prepare cola options.\n    ColaOptions colaOpts;\n    colaOpts.preventOverlaps = true;\n    colaOpts.solidifyAlignedEdges = true;\n    // As long as either dimension is \"active\", keep going.\n    vpsc::Dim dim = XDIM;\n    while (active[XDIM] || active[YDIM]) {\n        dim = vpsc::conjugate(dim);\n        AlignmentFlag aflag = d2a[dim];\n        active[dim] = false;\n        // Build map from node IDs to vector of nodes that are candidates for alignment\n        // with that node, in the current dimension.\n        map<id_type, Nodes> candidates;\n        // Build open and close Events for the nodes.\n        Events evts;\n        evts.reserve(2*nodes.size());\n        for (auto p : nodes) {\n            Node_SP u = p.second;\n            Point c = u->getCentre();\n            double z = dim == XDIM ? c.x - hkw : c.y - hkw,\n                   Z = dim == XDIM ? c.x + hkw : c.y + hkw;\n            evts.push_back(new Event(z, u, EventType::OPEN));\n            evts.push_back(new Event(Z, u, EventType::CLOSE));\n        }\n        // Sort by coordinate.\n        std::sort(evts.begin(), evts.end(), [](const Event *a, const Event *b)->bool{return a->varCoord < b->varCoord;});\n        // Maintain a set of \"open\" Node IDs:\n        set<id_type> openIds;\n        // Scan through the events.\n        for (Event *evt : evts) {\n            if (evt->type == EventType::OPEN) {\n                Node_SP u = evt->getNode();\n                id_type uid = u->id();\n                Nodes &uCand = candidates[uid];\n                Point uc = u->getCentre();\n                for (id_type vid : openIds) {\n                    Node_SP v = nodes[vid];\n                    Point vc = v->getCentre();\n                    bool inScope = dim == XDIM ? fabs(uc.y - vc.y) <= asc : fabs(uc.x - vc.x) <= asc;\n                    if (inScope && !atab.areAligned(uid, vid, aflag)) {\n                        // The nodes are within scope of one another, and not yet aligned.\n                        Nodes &vCand = candidates[vid];\n                        // We don't want to record the candidate twice, so just store it once in the\n                        // vector for the node with smaller ID.\n                        if (uid < vid) {\n                            uCand.push_back(v);\n                        } else {\n                            vCand.push_back(u);\n                        }\n                    }\n                }\n                // Finally, note that node u is now open.\n                openIds.insert(uid);\n            } else if (evt->type == EventType::CLOSE) {\n                openIds.erase(evt->getNode()->id());\n            }\n        }\n        // Clean up Events.\n        for (Event *evt : evts) delete evt;\n        // Now build PotentialAlignments, one for each candidate.\n        PotentialAlignments pas;\n        for (auto p : candidates) {\n            Node_SP u = nodes[p.first];\n            for (Node_SP v : p.second) {\n                if (reattempt || !atab.isMarkedInfeasible(u->id(), v->id(), aflag)) {\n                    pas.push_back(new PotentialAlignment(u, v, aflag));\n                }\n            }\n        }\n        // If there aren't any, just move on.\n        if (pas.empty()) continue;\n        // Otherwise sort by cost.\n        std::sort(pas.begin(), pas.end(), [](const PotentialAlignment *a, const PotentialAlignment *b)->bool{return a->cost < b->cost;});\n        // Build linked list.\n        for (auto it = pas.begin(); it != pas.end(); ++it) {\n            PotentialAlignment *p = *it;\n            if (it != pas.begin()) {\n                PotentialAlignment *o = *std::prev(it);\n                p->prev = o;\n            }\n            auto jt = std::next(it);\n            if (jt != pas.end()) {\n                PotentialAlignment *q = *jt;\n                p->next = q;\n            }\n        }\n        // Build a lookup, from pairs of node IDs to PotentialAlignments.\n        SparseIdMatrix2d<PotentialAlignment*>::type paIndex;\n        for (PotentialAlignment *pa : pas) {\n            id_type uid = pa->u->id(),\n                    vid = pa->v->id();\n            paIndex[uid][vid] = pa;\n            paIndex[vid][uid] = pa;\n        }\n        // Now we choose the \"prime\" alignments, so called because the process by which we choose\n        // them is much like the Sieve of Eratosthenes.\n        PotentialAlignments primePAs;\n        PotentialAlignment *first = pas.front();\n        while (first != nullptr) {\n            // Accept the first PA.\n            primePAs.push_back(first);\n            // Let u, v be the two nodes involved.\n            Node_SP u = first->u,\n                    v = first->v;\n            id_type uid = u->id(),\n                    vid = v->id();\n            // Cross off any other PA in which u or v is involved.\n            auto uLookup = paIndex[uid];\n            for (auto it = uLookup.begin(); it != uLookup.end(); ++it) {\n                PotentialAlignment *pa = (*it).second;\n                if (pa != nullptr) pa->remove();\n            }\n            auto vLookup = paIndex[vid];\n            for (auto it = vLookup.begin(); it != vLookup.end(); ++it) {\n                PotentialAlignment *pa = (*it).second;\n                if (pa != nullptr) pa->remove();\n            }\n            // Furthermore, for any node w already aligned with u, remove any potential\n            // alignment of w with v. Likewise for nodes already aligned with v.\n            vector<id_type> Au = atab.getAlignedIds(uid, aflag);\n            for (id_type wid : Au) {\n                PotentialAlignment *pa = paIndex[uid][wid];\n                if (pa != nullptr) pa->remove();\n            }\n            vector<id_type> Av = atab.getAlignedIds(vid, aflag);\n            for (id_type wid : Av) {\n                PotentialAlignment *pa = paIndex[vid][wid];\n                if (pa != nullptr) pa->remove();\n            }\n            // Advance pointer.\n            first = first->next;\n        }\n        // Attempt to apply the prime alignments.\n        for (PotentialAlignment *pa : primePAs) {\n            SepCo_SP sc = pa->writeSepCo();\n            int result = graph.projectOntoSepCo(colaOpts, sc);\n            if (result == 0) {\n                // Projection was successful.\n                pa->addToTable(atab);\n                pa->addToGraph(graph);\n                ++successCount;\n            } else {\n                // Projection failed.\n                pa->noteInfeasibility(atab);\n            }\n        }\n        // Clean up PotentialAlignments.\n        for (PotentialAlignment *pa : pas) delete pa;\n    }\n    return successCount;\n}\n"
  },
  {
    "path": "cola/libdialect/nearalign.h",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libdialect - A library for computing DiAlEcT layouts:\n *                 D = Decompose/Distribute\n *                 A = Arrange\n *                 E = Expand/Emend\n *                 T = Transform\n *\n * Copyright (C) 2018  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n * Author(s):   Steve Kieffer   <http://skieffer.info>\n*/\n\n#ifndef DIALECT_NEARALIGN_H\n#define DIALECT_NEARALIGN_H\n\n#include <vector>\n#include <memory>\n\n#include \"libdialect/constraints.h\"\n#include \"libdialect/opts.h\"\n#include \"libdialect/commontypes.h\"\n\nnamespace dialect {\n\nenum class AlignmentFlag {\n    NONE = 0,\n    HALIGN = 1,\n    VALIGN = 2,\n    HINFEAS = 4,\n    VINFEAS = 8\n};\n\n//! Thanks to https://stackoverflow.com/a/1448478\ninline AlignmentFlag operator&(AlignmentFlag a, AlignmentFlag b)\n{return static_cast<AlignmentFlag>(static_cast<int>(a) & static_cast<int>(b));}\n\ninline AlignmentFlag& operator|= (AlignmentFlag& a, AlignmentFlag b) { return (AlignmentFlag&)((int&)a |= (int)b); }\n\nstruct AlignmentTable {\n\n    //! @brief  Construct an alignment table for a given Graph, optionally ignoring certain Nodes.\n    AlignmentTable(Graph &graph, const Nodes &ignore);\n\n    //! @brief  Construct an alignment table for a given Graph, optionally ignoring certain Nodes.\n    AlignmentTable(Graph &graph, const NodesById &ignore);\n\n    //! @brief  Check whether two nodes are aligned.\n    //! @param[in] uid  The id of one of the ndoes.\n    //! @param[in] vid  The id of the other node.\n    //! @param[in] flag  The type of alignment to check for.\n    //! @return true iff the nodes are aligned according to the given flag.\n    bool areAligned(id_type uid, id_type vid, AlignmentFlag flag);\n\n    //! @brief  Add an alignment with transitive closure.\n    //! @param[in] uid  The id of one of the nodes to be aligned.\n    //! @param[in] vid  The id of the other node to be aligned.\n    //! @param[in] flag  The type of alignment to be recorded.\n    void addAlignment(id_type uid, id_type vid, AlignmentFlag flag);\n\n    //! @brief  Add all existing alignments for a set of Nodes, based on a given SepMatrix.\n    //! @param[in] nodes  The set of nodes.\n    //! @param[in] matrix  The SepMatrix.\n    void addAlignments(const NodesById &nodes, const SepMatrix &matrix);\n\n    //! @brief  Get all IDs that are aligned with a given one.\n    //! @param[in] uid  The given ID.\n    //! @param[in] flag  The type of alignment you are interested in.\n    //! @return  Vector of IDs of all nodes -- including this one -- that are aligned with this one.\n    std::vector<id_type> getAlignedIds(id_type uid, AlignmentFlag flag);\n\n    //! @brief  Note that a particular alignment type is infeasible.\n    //! @param[in] uid  The id of one of the nodes that cannot be aligned.\n    //! @param[in] vid  The id of the other node that cannot be aligned.\n    //! @param[in] flag  The type of alignment whose infeasibility is to be recorded.\n    //!\n    //! @note  Client should pass HALIGN or VALIGN, i.e. the type of alignment that is infeasible,\n    //!         NOT one of the _INFEAS flags itself.\n    void noteInfeasibility(id_type uid, id_type vid, AlignmentFlag flag);\n\n    //! @brief  Check whether a given type of alignemnt has been marked infeasible.\n    //! @param[in] uid  The id of one of the nodes in question.\n    //! @param[in] vid  The id of the other node in question.\n    //! @param[in] flag  The type of alignment in question.\n    //! @return  true iff the alignment in question has been marked infeasible.\n    bool isMarkedInfeasible(id_type uid, id_type vid, AlignmentFlag flag);\n\n    //! The sparse table where all flags are stored:\n    SparseIdMatrix2d<AlignmentFlag>::type state;\n};\n\n\n//! @brief  Report the \"Manhattan distance\" between two nodes.\ndouble manhattan(Node_SP u, Node_SP v);\n\n\nstruct PotentialAlignment {\n\n    //! @brief  Standard Constructor.\n    PotentialAlignment(Node_SP u, Node_SP v, AlignmentFlag flag)\n        : u(u),\n          v(v),\n          flag(flag),\n          cost(manhattan(u, v)) {}\n\n    //! @brief  Remove from linked list.\n    void remove(void);\n\n    //! @brief  Add this alignment to an AlignmentTable.\n    void addToTable(AlignmentTable &table) { table.addAlignment(u->id(), v->id(), flag); }\n\n    //! @brief  Note infeasibility of this alignment in in AlignmentTable.\n    void noteInfeasibility(AlignmentTable &table) { table.noteInfeasibility(u->id(), v->id(), flag); }\n\n    //! @brief  Write a SepCo to represent this alignment.\n    SepCo_SP writeSepCo(void);\n\n    //! @brief  Add this alignment to a Graph.\n    void addToGraph(Graph &G);\n\n    Node_SP u;\n    Node_SP v;\n    AlignmentFlag flag;\n    double cost;\n    // For managing linked list:\n    bool removed = false;\n    PotentialAlignment *prev = nullptr;\n    PotentialAlignment *next = nullptr;\n};\n\ntypedef std::vector<PotentialAlignment*> PotentialAlignments;\n\n//! @brief  Look for nodes that are nearly aligned, and try to align them.\n//!\n//! @param[in, out] graph  The Graph whose nodes are to be aligned, and in whose SepMatrix alignments\n//!                        should be recorded when made.\n//! @param[in, out] atab  An AlignmentTable for the given Graph.\n//! @param[in] opts  HolaOpts object to set parameters for the process.\n//! @param[in] reattempt  Set true for a more aggressive process that reattempts alignments even after\n//!                       they have been marked infeasible (in case other changes in the meantime might\n//!                       have made them now feasible). Default: false.\n//! @return  Number of successful alignments.\nsize_t doNearAlignments(dialect::Graph &graph, dialect::AlignmentTable &atab, dialect::NodesById &ignore, const dialect::HolaOpts &opts, bool reattempt=false);\n\n\n\n} // namespace dialect\n\n#endif // DIALECT_NEARALIGN_H\n"
  },
  {
    "path": "cola/libdialect/nexes.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libdialect - A library for computing DiAlEcT layouts:\n *                 D = Decompose/Distribute\n *                 A = Arrange\n *                 E = Expand/Emend\n *                 T = Transform\n *\n * Copyright (C) 2018  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n * Author(s):   Steve Kieffer   <http://skieffer.info>\n*/\n\n#include <set>\n#include <vector>\n#include <sstream>\n\n#include \"libvpsc/assertions.h\"\n\n#include \"libdialect/ortho.h\"\n#include \"libdialect/graphs.h\"\n#include \"libdialect/faces.h\"\n\nusing namespace dialect;\n\nconst std::map<CompassDir, size_t> Nexus::DIREC_TO_INITIAL_SEARCH_INDEX{\n    {CompassDir::NE, 0},\n    {CompassDir::EAST, 1},\n    {CompassDir::SE, 2},\n    {CompassDir::SOUTH, 3},\n    {CompassDir::SW, 4},\n    {CompassDir::WEST, 5},\n    {CompassDir::NW, 6},\n    {CompassDir::NORTH, 7}\n};\n\nvoid Nexus::addSide(Side_SP side) {\n    // Our tests below will be negative (i.e. that our Node be /not/ the last, or\n    // /not/ the first on the Side). So as a check, we first ensure that the Node actually\n    // does belong to the Side at all!\n    COLA_ASSERT(side->containsNode(m_node->id()));\n    // Determine the forward and reverse directions for the Side.\n    CardinalDir fwd = side->getForwardDirec(),\n                rev = Compass::cardFlip(fwd);\n    // If our Node is not the last on the Side, then the Side exits our Node to its forward direction.\n    if (m_node != side->lastNode()) writeSlot(fwd, NexusPolarity::EXIT_TO, side);\n    // If our Node is not the first on the Side, then the Side enters our Node from its reverse direction.\n    if (m_node != side->firstNode()) writeSlot(rev, NexusPolarity::ENTER_FROM, side);\n}\n\nstd::set<Side_SP> Nexus::getNeighboursOfADirection(CompassDir direc) {\n    std::set<Side_SP> nbrs;\n    // If the Nexus is empty, so is the set of neighbours.\n    if (m_isEmpty) return nbrs;\n    // Otherwise, this Nexus holds at least one Side.\n    // Get the initial search index.\n    size_t i0 = Nexus::DIREC_TO_INITIAL_SEARCH_INDEX.at(direc);\n    // To manage search in the two directions, we use a vector of \"index differentials\".\n    // Here, 7 is just -1 mod 8. But it's important that we use a positive number, since\n    // we are working with size_t's.\n    std::vector<size_t> diffs{1, 7};\n    for (size_t di : diffs) {\n        // Start at the initial index.\n        size_t i = i0;\n        while (m_slots[i] == nullptr) {\n            i = (i + di) % 8;\n            // Since we already checked that this Nexus is not empty, we should not cycle.\n            // Just to be sure:\n            COLA_ASSERT(i != i0);\n        }\n        // We have encountered a non-empty slot. We can record its Side as a neighbour.\n        nbrs.insert(m_slots[i]);\n        // Subtle point: For the anticlockwise search we want to start at the index just\n        // prior to the one where we started the clockwise search.\n        i0 = (i0 + 7) % 8;\n    }\n    return nbrs;\n}\n\nvoid Nexus::writeSlot(CardinalDir direc, NexusPolarity polarity, Side_SP side) {\n    /*\n     * We rely on the actual enum values of the directions and the polarities so that\n     * the formula 2*direc + polarity yields:\n     *      0       enter from east\n     *      1       exit to east\n     *      2       enter from south\n     *      3       exit to south\n     *      4       enter from west\n     *      5       exit to west\n     *      6       enter from north\n     *      7       exit to north\n     * This is the order in which the Side SP's will be stored in the eight slots, and this\n     * ordering is actually important, when it comes time to compute the neighbours of a given\n     * direction.\n     */\n    size_t d = (size_t) direc,\n           p = (size_t) polarity,\n           i = 2*d + p;\n    m_slots[i] = side;\n    // One slot having been written, this Nexus is not empty.\n    m_isEmpty = false;\n}\n\nstd::string Nexus::toString(void) const {\n    std::ostringstream ss;\n    ss << \"Nexus for Node \" << m_node->id() << \":\" << std::endl;\n    if (m_isEmpty) {\n        ss << \"    empty.\";\n    } else {\n        for (size_t i = 0; i < 8; ++i) {\n            Side_SP S = m_slots[i];\n            if (S != nullptr) {\n                if (i%2 == 0) {\n                    ss << \"    Entering from the \" << Compass::cardToString((CardinalDir)(i/2));\n                } else {\n                    ss << \"    Exiting to the \" << Compass::cardToString((CardinalDir)((i-1)/2));\n                }\n                ss << \": \" << S->toString() << std::endl;\n            }\n        }\n    }\n    return ss.str();\n}\n"
  },
  {
    "path": "cola/libdialect/nodeconfig.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libdialect - A library for computing DiAlEcT layouts:\n *                 D = Decompose/Distribute\n *                 A = Arrange\n *                 E = Expand/Emend\n *                 T = Transform\n *\n * Copyright (C) 2018  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n * Author(s):   Steve Kieffer   <http://skieffer.info>\n*/\n\n#include <algorithm>\n#include <deque>\n#include <memory>\n#include <functional>\n#include <string>\n\n#include \"libavoid/geomtypes.h\"\n\n#include \"libdialect/commontypes.h\"\n#include \"libdialect/quadaction.h\"\n#include \"libdialect/graphs.h\"\n#include \"libdialect/util.h\"\n#include \"libdialect/logging.h\"\n#include \"libdialect/nodeconfig.h\"\n\nusing namespace dialect;\n\nusing Avoid::Point;\n\nusing std::string;\n\nOrthoHubLayout::OrthoHubLayout(Graph_SP G, OrthoHubLayoutOptions opts)\n    : m_graph(G),\n      m_opts(opts),\n      m_cgr(G->updateColaGraphRep()),\n      m_aca(G),\n      m_edgeLookup(m_cgr.rs.size(), m_cgr.rs.size())\n{\n    // Make vector of \"hubs\", i.e. nodes of degree 3 and up, sorted by descending degree.\n    // First grab all Nodes, filtering out those of degree less than 3.\n    const NodesById &node_lookup = m_graph->getNodeLookup();\n    m_hubs.reserve(node_lookup.size());\n    size_t h = 0;\n    for (auto p : node_lookup) {\n        if (opts.includeLinks || p.second->getDegree() > 2) {\n            m_hubs.push_back(p.second);\n            ++h;\n        }\n    }\n    m_hubs.resize(h);\n    // And sort by descending degree.\n    std::stable_sort(m_hubs.begin(), m_hubs.end(),\n        [](const Node_SP &a, const Node_SP &b) -> bool {return a->getDegree() > b->getDegree();}\n    );\n    // Make lookup for edge indices by their endpt indices.\n    for (size_t j = 0; j < m_cgr.es.size(); ++j) {\n        auto e = m_cgr.es[j];\n        m_edgeLookup(e.first, e.second) = j;\n        m_edgeLookup(e.second, e.first) = j;\n    }\n    // If we're avoiding flat triangles, then we'll need to build the adjacency matrix for\n    // all Nodes in the Graph, by ID.\n    if (opts.avoidFlatTriangles) {\n        for (auto p : m_graph->getEdgeLookup()) {\n            id_type id1 = p.second->getSourceEnd()->id(),\n                    id2 = p.second->getTargetEnd()->id();\n            m_adjMat[id1][id2] = 1;\n            m_adjMat[id2][id1] = 1;\n        }\n    }\n    // When we destress, we want overlap prevention.\n    m_colaOpts.preventOverlaps = true;\n}\n\nbool OrthoHubLayout::makesFlatTriangle(const Assignment_SP &asgn) {\n    // An Assignment makes a flat triangle iff it assigned a pair of connected\n    // neighbours to North & South, and/or to East & West.\n    for (size_t i = 0; i < 2; ++i) {\n        // When i == 0 we get the Nbrs assigned to the East and West semiaxes;\n        // when i == 1 we get the Nbrs assigned to the South and North semiaxes.\n        Nbr_SP u1 = asgn->semis[i],\n               u2 = asgn->semis[i+2];\n        if (u1 != nullptr && u2 != nullptr) {\n            // Both semiaxes have a Nbr assigned to them.\n            // Are the corresponding Nodes connected?\n            // We check the adjacency matrix.\n            if (m_adjMat[u1->id][u2->id] > 0) return true;\n        }\n    }\n    // We did not find that there would be a flat triangle.\n    return false;\n}\n\nAssignments OrthoHubLayout::getAssignmentsForNode(const Node_SP &node) const {\n    // First construct a Nbr to represent each neighbouring Node of the given one.\n    Nodes nbrNodes = node->getNeighbours();\n    Nbrs nbrs;\n    Point p0 = node->getCentre();\n    for (Node_SP u : nbrNodes) {\n        Point p1 = u->getCentre();\n        double dx = p1.x - p0.x,\n               dy = p1.y - p0.y;\n        Nbr_SP nbr = std::make_shared<Nbr>(u->id(), dx, dy);\n        nbrs.push_back(nbr);\n    }\n    // Now form the Arrangement based on these Nbrs, and ask it to compute\n    // all possible Assignments.\n    Arrangement arr(nbrs);\n    return arr.computeAllAssignments();\n}\n\nvoid OrthoHubLayout::layout(Logger *logger) {\n\n    // Set up for logging.\n    unsigned ln = logger != nullptr ? logger->nextLoggingIndex : 0;\n    unsigned lns = 0;\n    std::function<void(string)> log = [this, logger](string name)->void{\n        if (logger!=nullptr) logger->log(*(this->m_graph), name);\n    };\n\n    // We iterate over all hubs.\n    auto hub_ptr = m_hubs.begin(),\n         hub_end = m_hubs.end();\n    // Flag saying whether we can reduce stress and try a node again:\n    bool mightNeedToDestress = true;\n    // ACASepFlags corresponding to semiaxes:\n    ACASepFlag sepFlags[4] = {ACAEAST, ACASOUTH, ACAWEST, ACANORTH};\n    while (hub_ptr != hub_end) {\n        // Consider next hub.\n        Node_SP hub = *hub_ptr;\n        // Compute the possible assignments of neighbours to compass directions,\n        // in order of descending desirability.\n        // First make sure the Node objects have the most up-to-date positions.\n        // This is so that the costs of the assignments are correctly evaluated.\n        m_graph->updateNodesFromRects();\n        Assignments v = getAssignmentsForNode(hub);\n        // We need to turn the vector into a deque.\n        std::deque<Assignment_SP> asgns;\n        asgns.resize(v.size());\n        // We may also filter it if we're avoiding flat triangles.\n        if (m_opts.avoidFlatTriangles) {\n            auto it = std::copy_if(v.cbegin(), v.cend(), asgns.begin(),\n                [this](const Assignment_SP &a) -> bool { return !makesFlatTriangle(a); }\n            );\n            asgns.resize(it - asgns.begin());\n        } else {\n            std::copy(v.cbegin(), v.cend(), asgns.begin());\n        }\n        // If there are no viable Assignments, move on to the next hub.\n        if (asgns.size() == 0) {\n            ++hub_ptr;\n            continue;\n        }\n        // Otherwise, begin attempting the Assignments.\n        // Quit either when one works, or when we run out.\n        bool success = false;\n        OrderedAlignments oas;\n        while (!asgns.empty()) {\n            // Pop next Assignment.\n            Assignment_SP asgn = asgns.front();\n            asgns.pop_front();\n            // Free allocated objects from previous attempt.\n            for (OrderedAlignment *oa : oas) {\n                delete oa->separation;\n                delete oa->alignment;\n                delete oa;\n            }\n            oas.clear();\n            // Consider each semiaxis.\n            for (size_t i = 0; i < 4; ++i) {\n                // Consider the Nbr assigned to semiaxis i.\n                Nbr_SP nbr = asgn->semis[i];\n                // If none, continue.\n                if (nbr == nullptr) continue;\n                // If the corresponding Node is already logically aligned with the hub Node, then we do nothing.\n                /* NB: This is not just to save time. In fact if you give VPSC redundant\n                 * equality constraints it will mark the second one as unsatisfiable.\n                 * This is because once one constraint is active, it will think the\n                 * other is still inactive and violated. To satisfy that one it\n                 * will try to split the block to which the two variables already\n                 * belong, and fail because there are only equality constraints\n                 * along the path between them. Since we are calling ACA's\n                 * 'allOrNothing' method, this one \"unsatisfiable\" constraint will\n                 * cause the entire node arrangement to fail.)\n                 */\n                size_t hub_ix = m_cgr.id2ix[hub->id()],\n                       nbr_ix = m_cgr.id2ix[nbr->id];\n                if (m_aca.nodesAreAligned(hub_ix, nbr_ix)) continue;\n                // Otherwise create an OrderedAlignment.\n                size_t edge_ix = m_edgeLookup(hub_ix, nbr_ix);\n                OrderedAlignment *oa = m_aca.initOrdAlign(hub_ix, nbr_ix, sepFlags[i], edge_ix);\n                oas.push_back(oa);\n            }\n            // Attempt to apply the constraints.\n            success = m_aca.applyOAsAllOrNothing(oas);\n            if (success) break;\n        }\n        // Now we have either found an assignment that works, or tried them all and none of them worked.\n        if (success) {\n            // An assignment was successful. Move on to next hub.\n            ++hub_ptr;\n            mightNeedToDestress = true;\n            if (logger != nullptr) m_graph->updateNodesFromRects();\n            log(string_format(\"%02d_%02d_config_node_%d\", ln, lns++, hub->id()));\n        } else if (mightNeedToDestress) {\n            // If we were not able to configure this hub, it may be that relieving\n            // stress in the graph will permit us to configure it. So destress and try this one again.\n            // However, set the flag to indicate there will not be another attempt at this.\n            m_graph->destress(m_colaOpts);\n            mightNeedToDestress = false;\n            log(string_format(\"%02d_%02d_destress\", ln, lns++));\n        } else {\n            // If we have already tried relieving stress once, and we /still/ couldn't\n            // apply any assignment, then we give up on this node and move on to the next.\n            // Note that we must leave mightNeedToDestress equal to False, because since we have\n            // tried destressing once already, there is no reason to destress again until at least\n            // one more node has been configured.\n            ++hub_ptr;\n        }\n    }\n    // Accept final positions and constraints.\n    m_graph->updateNodesFromRects();\n    m_aca.updateSepMatrix();\n}\n"
  },
  {
    "path": "cola/libdialect/nodeconfig.h",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libdialect - A library for computing DiAlEcT layouts:\n *                 D = Decompose/Distribute\n *                 A = Arrange\n *                 E = Expand/Emend\n *                 T = Transform\n *\n * Copyright (C) 2018  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n * Author(s):   Steve Kieffer   <http://skieffer.info>\n*/\n\n#ifndef DIALECT_NODECONFIG_H\n#define DIALECT_NODECONFIG_H\n\n#include \"libdialect/commontypes.h\"\n#include \"libdialect/graphs.h\"\n#include \"libdialect/util.h\"\n#include \"libdialect/aca.h\"\n#include \"libdialect/quadaction.h\"\n#include \"libdialect/logging.h\"\n\nnamespace dialect {\n\n//! @brief  Options to control OrthoHubLayout\nstruct OrthoHubLayoutOptions {\n    //! If three nodes u, v, w in a graph form a triangle -- i.e. a subgraph isomorphic\n    //! to K3 -- then we may wish to prevent the \"flattening\"\n    //! of this triangle, i.e. the configuration of any one of the three nodes in such\n    //! a way that the other two are assigned to opposite compass directions, e.g. assigning\n    //! u and w to be north and south, resp., of v. To prevent this, set this option to true.\n    //! \n    //! As an example of why you might want to set this option to false, consider that then\n    //! the graph K4 gets a planar layout. When used in combination with routing by libavoid,\n    //! flat triangles are not always bad.\n    bool avoidFlatTriangles = true;\n\n    //! By default, we attempt to configure only Nodes of degree 3 or higher.\n    //! The idea is that nodes of degree 2 (a.k.a. \"links\") be handled by a different\n    //! procedure, such as the ACA algorithm.\n    //! However, good results can also be obtained by performing ortho hub layout on\n    //! all nodes, of any degree. If that is desired, set the includeLinks option to true.\n    bool includeLinks = false;\n};\n\n//! @brief  A layout object that tries to orthogonalise hubs.\n//!         This means it visits nodes of degrees 3 or higher, and\n//!         tries to set their neighbours in cardinal compass directions\n//!         from it.\nclass OrthoHubLayout {\npublic:\n    //! @brief  Standard constructor\n    //!\n    //! @param[in, out]  G  the underlying Graph\n    //! @param[in]  opts  options to control the layout\n    OrthoHubLayout(Graph_SP G, OrthoHubLayoutOptions opts);\n\n    //! @brief  Try to orthogonalise hubs.\n    //!\n    //! @param[in] logger  Optional logger to record the individual layout steps.\n    void layout(Logger *logger=nullptr);\n\nprivate:\n\n    bool makesFlatTriangle(const Assignment_SP &asgn);\n    Assignments getAssignmentsForNode(const Node_SP &node) const;\n\n    Graph_SP m_graph;\n    OrthoHubLayoutOptions m_opts;\n    ColaGraphRep &m_cgr;\n    ColaOptions m_colaOpts;\n    ACALayout m_aca;\n    Nodes m_hubs;\n    // We can use a dense data structure, Matrix2d, for the edge lookup, because\n    // edges name rectangles by the latter's index in the rectangles vector. Therefore if the size of\n    // the matrix equals that of the rectangles vector, there is always a place for every index.\n    Matrix2d<size_t> m_edgeLookup;\n    // On the other hand, we must use a sparse data structure for the node adjacency matrix, since\n    // there can easily be a Node ID that is greater than or equal to the total number of Nodes in\n    // the Graph. For example, such a situation is especially common in cases where a Graph has been\n    // broken into separate pieces.\n    SparseIdMatrix2d<unsigned>::type m_adjMat;\n};\n\n\n} // namespace dialect\n\n#endif // DIALECT_NODECONFIG_H\n"
  },
  {
    "path": "cola/libdialect/nodes.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libdialect - A library for computing DiAlEcT layouts:\n *                 D = Decompose/Distribute\n *                 A = Arrange\n *                 E = Expand/Emend\n *                 T = Transform\n *\n * Copyright (C) 2018  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n * Author(s):   Steve Kieffer   <http://skieffer.info>\n*/\n\n#include <cmath>\n#include <sstream>\n\n#include \"libavoid/geomtypes.h\"\n\n#include \"libdialect/commontypes.h\"\n#include \"libdialect/util.h\"\n#include \"libdialect/ortho.h\"\n#include \"libdialect/graphs.h\"\n\nusing std::vector;\nusing std::string;\n\nusing namespace dialect;\n\nusing Avoid::Polygon;\nusing Avoid::Point;\n\nNode_SP Node::allocate(void) {\n    // Cannot use make_shared because Node constructor is private.\n    return Node_SP(new Node());\n}\n\nNode_SP Node::allocate(double w, double h) {\n    return Node_SP(new Node(w, h));\n}\n\nNode_SP Node::allocate(double cx, double cy, double w, double h) {\n    return Node_SP(new Node(cx, cy, w, h));\n}\n\nGhostNode_SP Node::makeGhost(void) const {\n    return GhostNode::allocate(*this);\n}\n\nvoid Node::addEdge(const Edge_SP &edge) {\n    // Record the Edge in our lookup tables.\n    // (1) Edges by their own IDs:\n    m_edges.emplace(edge->id(), edge);\n    // (2) Edges by the ID of the Node at the opposite end:\n    Node_SP opposite_end = edge->getOtherEnd(*this);\n    m_edges_by_opp_id.emplace(opposite_end->id(), edge);\n    // And increment the degree of this Node.\n    ++m_degree;\n}\n\nvoid Node::removeEdge(const Edge &edge) {\n    // Remove the Edge from our lookup tables.\n    // (1) Edges by their own IDs:\n    m_edges.erase(edge.id());\n    // (2) Edges by the ID of the Node at the opposite end:\n    Node_SP opposite_end = edge.getOtherEnd(*this);\n    m_edges_by_opp_id.erase(opposite_end->id());\n    // And decrement the degree of this Node.\n    --m_degree;\n}\n\nvoid Node::setCentre(double cx, double cy) {\n    m_cx = cx;\n    m_cy = cy;\n}\n\nvoid Node::translate(double dx, double dy) {\n    m_cx += dx;\n    m_cy += dy;\n}\n\nvoid Node::applyPlaneMap(PlaneMap map) {\n    Point p = map(Point(m_cx, m_cy));\n    m_cx = p.x;\n    m_cy = p.y;\n}\n\nvoid Node::setDims(double w, double h) {\n    m_w = w;\n    m_h = h;\n}\n\nvoid Node::addPadding(double dw, double dh) {\n    m_w += dw;\n    m_h += dh;\n}\n\nvoid Node::setBoundingBox(double x, double X, double y, double Y) {\n    COLA_ASSERT(x < X && y < Y);\n    m_w = X - x;\n    m_h = Y - y;\n    m_cx = x + m_w/2.0;\n    m_cy = y + m_h/2.0;\n}\n\nvoid Node::copyGeometry(const Node &other) {\n    m_cx = other.m_cx;\n    m_cy = other.m_cy;\n    m_w  = other.m_w;\n    m_h  = other.m_h;\n}\n\nvoid Node::copyOtherGhostProperties(const Node &other) {\n    m_isRoot = other.m_isRoot;\n}\n\ndimensions Node::getHalfDimensions(void) const {\n    return dimensions(m_w/2.0, m_h/2.0);\n}\n\ndimensions Node::getDimensions(void) const {\n    return dimensions(m_w, m_h);\n}\n\nAvoid::Point Node::getCentre(void) const {\n    return Avoid::Point(m_cx, m_cy);\n}\n\nBoundingBox Node::getBoundingBox(void) const {\n    dimensions hd = getHalfDimensions();\n    return BoundingBox(\n        m_cx - hd.first, m_cx + hd.first,\n        m_cy - hd.second, m_cy + hd.second\n    );\n}\n\nvoid Node::updatePosnFromRect(vpsc::Rectangle *r) {\n    m_cx = r->getCentreX();\n    m_cy = r->getCentreY();\n}\n\nvoid Node::updateXCoordFromRect(vpsc::Rectangle *r) {\n    m_cx = r->getCentreX();\n}\n\nvoid Node::updateYCoordFromRect(vpsc::Rectangle *r) {\n    m_cy = r->getCentreY();\n}\n\nNodes Node::getNeighbours(void) const {\n    Nodes nbrs;\n    for (auto p : m_edges) {\n        Node_SP other = p.second->getOtherEnd(*this);\n        nbrs.push_back(other);\n    }\n    return nbrs;\n}\n\nNodes Node::getNeighboursCwCyclic(void) const {\n    Nodes nbrs = getNeighbours();\n    std::sort(nbrs.begin(), nbrs.end(), [this](const Node_SP &a, const Node_SP &b) -> bool {\n        Point c_a = a->getCentre(),\n              c_b = b->getCentre();\n        double A = std::atan2(c_a.y - m_cy, c_a.x - m_cx),\n               B = std::atan2(c_b.y - m_cy, c_b.x - m_cx);\n        return A < B;\n    });\n    return nbrs;\n}\n\nNodes Node::getChildren(void) const {\n    Nodes children;\n    // Look through all incident Edges to this Node.\n    for (auto p : m_edges) {\n        // When the target end of the Edge is different from\n        // this Node itself, we have a child of this Node.\n        Node_SP tgt = p.second->getTargetEnd();\n        if (tgt->id() != m_ID) {\n            children.push_back(tgt);\n        }\n    }\n    return children;\n}\n\nNodes GhostNode::getChildren(void) const {\n    Nodes children;\n    // Look through all incident Edges to this Node.\n    for (auto p : m_edges) {\n        // When the target end of the Edge is different from\n        // this Node itself, we have a child of this Node.\n        Node_SP tgt = p.second->getTargetEnd();\n        // Since this is a GhostNode, whose purpose is sometimes to report a\n        // \"fake ID\", we must call the instance's own id() function here, rather\n        // than simply accessing the member field m_ID, as we can do in the base Node class.\n        if (tgt->id() != id()) {\n            children.push_back(tgt);\n        }\n    }\n    return children;\n}\n\nstring Node::writeSvg(bool useExternalId) const {\n    BoundingBox b = getBoundingBox();\n    string label = string_format(\"%d\", (useExternalId ? m_externalID : m_ID));\n    double dy = 5;\n    double L = (double) label.length();\n    double dx = -(4*L + 1);\n    std::ostringstream ss;\n    ss << \"<g>\\n\";\n    ss << \"<rect stroke=\\\"black\\\" stroke-width=\\\"1\\\" fill=\\\"gray\\\" opacity=\\\"0.5\\\" \";\n    ss << string_format(\"x=\\\"%.2f\\\" y=\\\"%.2f\\\" width=\\\"%.2f\\\" height=\\\"%.2f\\\"/>\\n\", b.x, b.y, b.w(), b.h());\n    ss << \"<text font-family=\\\"sans-serif\\\" \";\n    ss << string_format(\"x=\\\"%.2f\\\" y=\\\"%.2f\\\">\\n\", m_cx + dx, m_cy + dy);\n    ss << label << \"\\n\";\n    ss << \"</text>\\n\";\n    ss << \"</g>\\n\";\n    return ss.str();\n}\n\nPolygon Node::makeLibavoidPolygon(void) const {\n    Polygon poly(4);\n    BoundingBox b = getBoundingBox();\n    poly.setPoint(0, Point(b.x, b.y));\n    poly.setPoint(1, Point(b.X, b.y));\n    poly.setPoint(2, Point(b.X, b.Y));\n    poly.setPoint(3, Point(b.x, b.Y));\n    return poly;\n}\n\nbool Node::liesOppositeSegment(const LineSegment &seg, bool openInterval) {\n    BoundingBox bb = getBoundingBox();\n    double a = seg.varDim == vpsc::XDIM ? bb.x : bb.y,\n           b = seg.varDim == vpsc::XDIM ? bb.X : bb.Y;\n    return openInterval ? seg.openIntervalIntersects(a, b) :\n                          seg.closedIntervalIntersects(a, b);\n}\n\nPoint Node::getBoundaryCompassPt(CompassDir dir) const {\n    Point sgns = Compass::vectorSigns(dir);\n    double hw = m_w/2.0,\n           hh = m_h/2.0;\n    return Point(m_cx + sgns.x * hw, m_cy + sgns.y * hh);\n}\n"
  },
  {
    "path": "cola/libdialect/opts.h",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libdialect - A library for computing DiAlEcT layouts:\n *                 D = Decompose/Distribute\n *                 A = Arrange\n *                 E = Expand/Emend\n *                 T = Transform\n *\n * Copyright (C) 2018  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n * Author(s):   Steve Kieffer   <http://skieffer.info>\n*/\n\n#ifndef DIALECT_OPTS_H\n#define DIALECT_OPTS_H\n\n#include \"libdialect/ortho.h\"\n\nnamespace dialect {\n\nenum class AspectRatioClass {\n    NONE, PORTRAIT, LANDSCAPE\n};\n\n//! When routing connectors for Trees, the set of allowed connection directions\n//! depends on the application.\n//!\n//! In, for example, a NORTH-growing tree, an edge between ranks i and i + 1\n//! will always be allowed to connect only to the south (S) port of a node in\n//! rank i + 1.\n//!\n//! The TreeRoutingType controls the directions allowed for connection to nodes in\n//! rank i, as follows:\n//!\n//! STRICT:  only N is allowed.\n//! CORE_ATTACHMENT:  N, E, W are allowed for the root node if it has exactly one child and\n//!                   is transversely displaced from its one child; otherwise only N.\n//! MONOTONIC:  N, E, W are allowed for all nodes on rank i.\nenum class TreeRoutingType {\n    STRICT,\n    CORE_ATTACHMENT,\n    MONOTONIC\n};\n\n//! When expanding faces in order to make room to place the trees, there are different\n//! ways to estimate which is the best dimension in which to operate first.\n//!\n//! SPACE: Look at the available space in each dimension.\n//! CONSTRAINTS: Compute the separation constraints you would use in each dimension, and\n//!              sum their violations.\nenum class ExpansionEstimateMethod {\n    SPACE,\n    CONSTRAINTS\n};\n\nstruct HolaOpts {\n\n    //! Tree layout\n\n    //! When the whole graph is a tree, in what direction should the tree grow?\n    CardinalDir defaultTreeGrowthDir = CardinalDir::SOUTH;\n    //! Minimal gap between nodes on the same rank, as scalar multiplier of ideal\n    //! edge length (IEL):\n    double treeLayoutScalar_nodeSep = 0.25;\n    //! Minimal gap between ranks (again, IEL scalar):\n    double treeLayoutScalar_rankSep = 1.0;\n    //! Control whether the subtrees are ordered in symmetric tree layout\n    //! so as to promote convex layouts.\n    bool preferConvexTrees = true;\n    //! Control how connectors are routed for peeled trees:\n    TreeRoutingType peeledTreeRouting = TreeRoutingType::CORE_ATTACHMENT;\n    //! Control how connectors are routed for graphs which are themselves trees:\n    TreeRoutingType wholeTreeRouting = TreeRoutingType::MONOTONIC;\n\n    //! In HOLA, we distinguish between \"leaves\" (nodes of degree 1), \"links\"\n    //! (nodes of degree 2), and \"hubs\" (nodes of degree 3 or greater).\n    //! The leaves -- and nodes that become leaves when the existing leaves are\n    //! removed -- are handled separately as \"trees\".\n    //! The following options control hub layout, and link layout.\n\n    //! Hub configuration\n\n    //! Say whether \"flat triangles\" should be avoided when using the\n    //! OrthoHubLayout.\n    bool orthoHubAvoidFlatTriangles = true;\n\n    //! Link configuration\n\n    //! You can use the ACA algorithm for links; or you can use the\n    //! shape-conforming chain configuration method, which examines whole chains\n    //! of links, and tries to put the bends at the locations that the present\n    //! geometry favours.\n    //!\n    //! In tests, ACA has been preferred on medium and large networks, while\n    //! the shape-conforming method has performed well on (very) small networks.\n    bool useACAforLinks = true;\n\n    //! Routing\n\n    //! For various routing parameters, we find it makes sense to select\n    //! the quantity by multiplying the graph's ideal edge length by\n    //! a scalar, set here.\n    double routingScalar_crossingPenalty = 2;\n    double routingScalar_segmentPenalty = 0.5;\n    //! Other routing parameters take an absolute value.\n    double routingAbs_nudgingDistance = 4.0;\n\n\n    //! Tree Placement\n\n    //! Prefer trees to be placed in a cardinal, rather than ordinal, direction:\n    bool treePlacement_favourCardinal = true;\n    //! Prefer trees to be placed in the external, rather than an internal, face:\n    bool treePlacement_favourExternal = true;\n    //! Prefer trees to be placed where there are the fewest other trees considering\n    //! using that same space:\n    bool treePlacement_favourIsolation = true;\n\n\n    //! Expansion\n\n    //! When expanding faces to make room for trees, and choosing a dimension in which\n    //! to operate first, you may want to try choosing the costlier dimension. The theory\n    //! would be that in some cases this will mean no expansion is needed at all in the\n    //! second dimension.\n    bool expansion_doCostlierDimensionFirst = false;\n    ExpansionEstimateMethod expansion_estimateMethod = ExpansionEstimateMethod::CONSTRAINTS;\n\n\n    //! Near Alignment (see nearalign.h)\n\n    //! Attempt near alignments?\n    bool do_near_align = true;\n    //! How many alignment attempts?\n    unsigned align_reps = 2;\n\n    //! As with the routing parameters, we find that it makes sense to set parameters\n    //! for the \"near alignment\" process as scalar multiples of the graph's ideal edge length.\n\n    //! What is the maximum width of a \"kink\" that should be straightened out?\n    double nearAlignScalar_kinkWidth = 0.25;\n    //! How far away should we look from a given node for others that should be aligned with it?\n    double nearAlignScalar_scope = 1.0;\n\n\n    //! Misc\n\n    //! Padding to be added to nodes during layout, in order to maintain gaps between them:\n    //! Again, this is a scalar multiplier of the IEL.\n    double nodePaddingScalar = 0.25;\n\n\n    //! Finishing\n\n    //! If you prefer a particular type of aspect ratio, set it here. The final layout\n    //! will be rotated as necessary.\n    AspectRatioClass preferredAspectRatio = AspectRatioClass::LANDSCAPE;\n    //! If there is a preferred aspect ratio, there are always two rotations that achieve\n    //! it. In order to decide between these two, HOLA will try to make more trees have\n    //! the preferred tree growth direction.\n    CardinalDir preferredTreeGrowthDir = CardinalDir::SOUTH;\n    //! A layout can always be translated, so we can normalise by putting the upper left\n    //! corner of the bounding box at the origin.\n    bool putUlcAtOrigin = true;\n\n};\n\n\n} // namespace dialect\n\n#endif // DIALECT_OPTS_H\n"
  },
  {
    "path": "cola/libdialect/ortho.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libdialect - A library for computing DiAlEcT layouts:\n *                 D = Decompose/Distribute\n *                 A = Arrange\n *                 E = Expand/Emend\n *                 T = Transform\n *\n * Copyright (C) 2018  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n * Author(s):   Steve Kieffer   <http://skieffer.info>\n*/\n\n#include <vector>\n#include <set>\n#include <math.h>\n#include <memory>\n#include <string>\n#include <functional>\n#include <stdexcept>\n\n#include \"libvpsc/assertions.h\"\n#include \"libvpsc/rectangle.h\"\n#include \"libavoid/libavoid.h\"\n\n#include \"libdialect/graphs.h\"\n#include \"libdialect/ortho.h\"\n\nusing namespace dialect;\n\nusing std::vector;\nusing std::set;\nusing std::map;\nusing std::max;\nusing std::min;\n\nusing vpsc::Dim;\nusing Avoid::Point;\n\n\nCompassDir Compass::compassDirection(Avoid::Point p0, Avoid::Point p1) {\n    double dx = p1.x - p0.x,\n           dy = p1.y - p0.y;\n    if (dx == 0 && dy == 0) throw std::runtime_error(\"No compass direction between coincident points.\");\n    if (dx == 0) {\n        return dy > 0 ? CompassDir::SOUTH : CompassDir::NORTH;\n    }\n    if (dy == 0) {\n        return dx > 0 ? CompassDir::EAST : CompassDir::WEST;\n    }\n    if (dx > 0) {\n        return dy > 0 ? CompassDir::SE : CompassDir::NE;\n    } else {\n        return dy > 0 ? CompassDir::SW : CompassDir::NW;\n    }\n}\n\nCompassDir Compass::compassDirection(std::shared_ptr<Node> u0, std::shared_ptr<Node> u1) {\n    Point p0 = u0->getCentre(),\n          p1 = u1->getCentre();\n    return Compass::compassDirection(p0, p1);\n}\n\nCardinalDir Compass::cardinalDirection(Avoid::Point p0, Avoid::Point p1) {\n    double dx = p1.x - p0.x,\n           dy = p1.y - p0.y;\n    if (fabs(dy) <= fabs(dx)) {\n        return dx > 0 ? CardinalDir::EAST : CardinalDir::WEST;\n    } else {\n        return dy > 0 ? CardinalDir::SOUTH : CardinalDir::NORTH;\n    }\n}\n\nCardinalDir Compass::cardinalDirection(std::shared_ptr<Node> u0, std::shared_ptr<Node> u1) {\n    Point p0 = u0->getCentre(),\n          p1 = u1->getCentre();\n    return Compass::cardinalDirection(p0, p1);\n}\n\nCardinalDirs Compass::cardinalComponents(CompassDir d) {\n    switch(d) {\n    case CompassDir::SE: return {CardinalDir::SOUTH, CardinalDir::EAST};\n    case CompassDir::SW: return {CardinalDir::SOUTH, CardinalDir::WEST};\n    case CompassDir::NW: return {CardinalDir::NORTH, CardinalDir::WEST};\n    case CompassDir::NE: return {CardinalDir::NORTH, CardinalDir::EAST};\n    default:\n        // If the direction is already cardinal, then just return a vector containing\n        // only this one direction.\n        return {(CardinalDir) d};\n    }\n}\n\nPlaneMap Compass::getRotationFunction(CardinalDir fromDir, CardinalDir toDir) {\n    int a = (int) fromDir,\n        b = (int) toDir,\n        d = b - a;\n    unsigned n = (unsigned)(d < 0 ? d + 4 : d);\n    switch(n) {\n    case 0:\n        return [](const Point &p)->Point{return p;};\n    case 1:\n        return [](const Point &p)->Point{return Point(-p.y, p.x);};\n    case 2:\n        return [](const Point &p)->Point{return Point(-p.x, -p.y);};\n    case 3:\n        return [](const Point &p)->Point{return Point(p.y, -p.x);};\n    default:\n        // Cannot happen.\n        COLA_ASSERT(false);\n    }\n}\n\nInplacePlaneMap Compass::getInplaceRotationFunction(CardinalDir fromDir, CardinalDir toDir) {\n    int a = (int) fromDir,\n        b = (int) toDir,\n        d = b - a;\n    unsigned n = (unsigned)(d < 0 ? d + 4 : d);\n    switch(n) {\n    case 0:\n        return [](Point &p)->void{COLA_UNUSED(p);};\n    case 1:\n        return [](Point &p)->void{double t = p.x; p.x = -p.y; p.y = t;};\n    case 2:\n        return [](Point &p)->void{p.x = -p.x; p.y = -p.y;};\n    case 3:\n        return [](Point &p)->void{double t = p.x; p.x = p.y; p.y = -t;};\n    default:\n        // Cannot happen.\n        COLA_ASSERT(false);\n    }\n}\n\nPoint Compass::vectorSigns(CompassDir d) {\n    switch(d) {\n    case CompassDir::EAST:  return Point( 1,  0);\n    case CompassDir::SE:    return Point( 1,  1);\n    case CompassDir::SOUTH: return Point( 0,  1);\n    case CompassDir::SW:    return Point(-1,  1);\n    case CompassDir::WEST:  return Point(-1,  0);\n    case CompassDir::NW:    return Point(-1, -1);\n    case CompassDir::NORTH: return Point( 0, -1);\n    case CompassDir::NE:    return Point( 1, -1);\n    default:\n        COLA_ASSERT(false);\n    }\n}\n\nconst CardinalDirs Compass::cwCards{\n    CardinalDir::EAST, CardinalDir::SOUTH, CardinalDir::WEST, CardinalDir::NORTH\n};\n\nconst CardinalDirs Compass::acwCards{\n    CardinalDir::EAST, CardinalDir::NORTH, CardinalDir::WEST, CardinalDir::SOUTH\n};\n\nconst CompassDirs Compass::cwAllDoubled{\n    CompassDir::EAST, CompassDir::SE, CompassDir::SOUTH, CompassDir::SW,\n    CompassDir::WEST, CompassDir::NW, CompassDir::NORTH, CompassDir::NE,\n    CompassDir::EAST, CompassDir::SE, CompassDir::SOUTH, CompassDir::SW,\n    CompassDir::WEST, CompassDir::NW, CompassDir::NORTH, CompassDir::NE\n};\n\nconst CompassDirs Compass::acwAllDoubled{\n    CompassDir::EAST, CompassDir::NE, CompassDir::NORTH, CompassDir::NW,\n    CompassDir::WEST, CompassDir::SW, CompassDir::SOUTH, CompassDir::SE,\n    CompassDir::EAST, CompassDir::NE, CompassDir::NORTH, CompassDir::NW,\n    CompassDir::WEST, CompassDir::SW, CompassDir::SOUTH, CompassDir::SE\n};\n\nconst set<CardinalDir> Compass::vertical{\n    CardinalDir::NORTH, CardinalDir::SOUTH\n};\n\nconst set<CardinalDir> Compass::horizontal{\n    CardinalDir::EAST, CardinalDir::WEST\n};\n\nconst map<CardinalDir, Avoid::ConnDirFlag> Compass::libavoidConnDirs{\n    {CardinalDir::EAST,  Avoid::ConnDirRight},\n    {CardinalDir::SOUTH, Avoid::ConnDirDown},\n    {CardinalDir::WEST,  Avoid::ConnDirLeft},\n    {CardinalDir::NORTH, Avoid::ConnDirUp}\n};\n\nconst map<CompassDir, CompassDir> Compass::rotateCw90{\n    {CompassDir::EAST,  CompassDir::SOUTH},\n    {CompassDir::SE,    CompassDir::SW},\n    {CompassDir::SOUTH, CompassDir::WEST},\n    {CompassDir::SW,    CompassDir::NW},\n    {CompassDir::WEST,  CompassDir::NORTH},\n    {CompassDir::NW,    CompassDir::NE},\n    {CompassDir::NORTH, CompassDir::EAST},\n    {CompassDir::NE,    CompassDir::SE}\n};\n\nconst map<CompassDir, CompassDir> Compass::flip{\n    {CompassDir::EAST,  CompassDir::WEST},\n    {CompassDir::SE,    CompassDir::NW},\n    {CompassDir::SOUTH, CompassDir::NORTH},\n    {CompassDir::SW,    CompassDir::NE},\n    {CompassDir::WEST,  CompassDir::EAST},\n    {CompassDir::NW,    CompassDir::SE},\n    {CompassDir::NORTH, CompassDir::SOUTH},\n    {CompassDir::NE,    CompassDir::SW}\n};\n\nconst map<CardinalDir, Dim> Compass::varDim{\n    {CardinalDir::EAST,  Dim::XDIM},\n    {CardinalDir::WEST,  Dim::XDIM},\n    {CardinalDir::SOUTH, Dim::YDIM},\n    {CardinalDir::NORTH, Dim::YDIM}\n};\n\nconst map<CardinalDir, Dim> Compass::constDim{\n    {CardinalDir::EAST,  Dim::YDIM},\n    {CardinalDir::WEST,  Dim::YDIM},\n    {CardinalDir::SOUTH, Dim::XDIM},\n    {CardinalDir::NORTH, Dim::XDIM}\n};\n\nCardinalDir Compass::cardRotateCw90(CardinalDir d) {\n    return (CardinalDir) Compass::rotateCw90.at( (CompassDir) d );\n}\n\nCardinalDir Compass::cardRotateAcw90(CardinalDir d) {\n    return (CardinalDir) Compass::rotateCw90.at( Compass::flip.at( (CompassDir) d ) );\n}\n\nCardinalDir Compass::cardFlip(CardinalDir d) {\n    return (CardinalDir) Compass::flip.at( (CompassDir) d );\n}\n\nstd::string Compass::dirToString(CompassDir d) {\n    switch(d) {\n    case CompassDir::EAST: return \"EAST\";\n    case CompassDir::SOUTH: return \"SOUTH\";\n    case CompassDir::WEST: return \"WEST\";\n    case CompassDir::NORTH: return \"NORTH\";\n    case CompassDir::SE: return \"SE\";\n    case CompassDir::SW: return \"SW\";\n    case CompassDir::NW: return \"NW\";\n    case CompassDir::NE: return \"NE\";\n    default :\n        COLA_ASSERT(false);\n    }\n}\n\nstd::string Compass::cardToString(CardinalDir d) {\n    switch(d) {\n    case CardinalDir::EAST: return \"EAST\";\n    case CardinalDir::SOUTH: return \"SOUTH\";\n    case CardinalDir::WEST: return \"WEST\";\n    case CardinalDir::NORTH: return \"NORTH\";\n    default:\n        COLA_ASSERT(false);\n    }\n}\n\nconst double LineSegment::EPSILON = 0.1;\n\nbool LineSegment::closedIntervalIntersects(double a, double b) const {\n    return wl <= b && a <= wh;\n}\n\nbool LineSegment::openIntervalIntersects(double a, double b) const {\n    return b - wl > LineSegment::EPSILON && wh - a > LineSegment::EPSILON;\n}\n\nbool LineSegment::closedIntervalIncludesCoord(double a) const {\n    return wl <= a && a <= wh;\n}\n\nbool LineSegment::openIntervalIncludesCoord(double a) const {\n    return a - wl > LineSegment::EPSILON && wh - a > LineSegment::EPSILON;\n}\n\ninterval LineSegment::closedIntervalIntersection(double a, double b) const {\n    // If no intersection, return empty interval.\n    if (!closedIntervalIntersects(a, b)) return {1, 0};\n    // Otherwise there is some intersection.\n    return {max(a, wl), min(b, wh)};\n}\n\ninterval LineSegment::openIntervalIntersection(double a, double b) const {\n    // If no intersection, return empty interval.\n    if (!openIntervalIntersects(a, b)) return {1, 0};\n    // Otherwise there is some intersection.\n    return {max(a, wl), min(b, wh)};\n}\n\nint LineSegment::ptOnWhichSide(Avoid::Point p) const {\n    double z1 = Compass::isVerticalCard(direc) ? p.x : p.y;\n    return coordOnWhichSide(z1);\n}\n\nint LineSegment::coordOnWhichSide(double z1) const {\n    return z1 < z ? -1 : (z1 > z ? 1 : 0);\n}\n"
  },
  {
    "path": "cola/libdialect/ortho.h",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libdialect - A library for computing DiAlEcT layouts:\n *                 D = Decompose/Distribute\n *                 A = Arrange\n *                 E = Expand/Emend\n *                 T = Transform\n *\n * Copyright (C) 2018  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n * Author(s):   Steve Kieffer   <http://skieffer.info>\n*/\n\n#ifndef DIALECT_ORTHO_H\n#define DIALECT_ORTHO_H\n\n#include <vector>\n#include <set>\n#include <memory>\n#include <map>\n#include <string>\n#include <functional>\n#include <algorithm>\n#include <utility>\n\n#include \"libvpsc/rectangle.h\"\n#include \"libavoid/libavoid.h\"\n\n#include \"libdialect/commontypes.h\"\n\nnamespace dialect {\n\nclass Node;\n\nenum class CompassDir {\n    EAST,\n    SOUTH,\n    WEST,\n    NORTH,\n    SE,\n    SW,\n    NW,\n    NE\n};\n\nenum class CardinalDir {\n    EAST,\n    SOUTH,\n    WEST,\n    NORTH\n};\n\ntypedef std::vector<CompassDir> CompassDirs;\ntypedef std::vector<CardinalDir> CardinalDirs;\n\nstruct Compass {\n\n    //! @brief  Check whether a compass direction is vertical.\n    static bool isVertical(CompassDir d) {\n        return d == CompassDir::NORTH || d == CompassDir::SOUTH;\n    }\n\n    //! @brief  Check whether a compass direction is horizontal.\n    static bool isHorizontal(CompassDir d) {\n        return d == CompassDir::EAST || d == CompassDir::WEST;\n    }\n\n    //! @brief  Check whether a cardinal direction is vertical.\n    static bool isVerticalCard(CardinalDir d) {\n        return d == CardinalDir::NORTH || d == CardinalDir::SOUTH;\n    }\n\n    //! @brief  Check whether a cardinal direction is vertical.\n    static bool isHorizontalCard(CardinalDir d) {\n        return d == CardinalDir::EAST || d == CardinalDir::WEST;\n    }\n\n    //! @brief  Check whether a compass direction is in a given dimension.\n    static bool isInDim(CompassDir d, vpsc::Dim dim) {\n        return dim == vpsc::HORIZONTAL ? isHorizontal(d) : isVertical(d);\n    }\n\n    //! @brief  Check whether a compass direction is \"increasing\", i.e. the\n    //!         variable coordinate increases in this direction.\n    static bool isIncreasing(CompassDir d) {\n        return d == CompassDir::EAST || d == CompassDir::SOUTH;\n    }\n\n    //! @brief  Check whether a compass direction is \"decreasing\", i.e. the\n    //!         variable coordinate decreases in this direction.\n    static bool isDecreasing(CompassDir d) {\n        return d == CompassDir::NORTH || d == CompassDir::WEST;\n    }\n\n    //! @brief  Check whether a cardinal direction is \"increasing\", i.e. the\n    //!         variable coordinate increases in this direction.\n    static bool isIncreasingCard(CardinalDir d) {\n        return d == CardinalDir::EAST || d == CardinalDir::SOUTH;\n    }\n\n    //! @brief  Check whether a cardinal direction is \"decreasing\", i.e. the\n    //!         variable coordinate decreases in this direction.\n    static bool isDecreasingCard(CardinalDir d) {\n        return d == CardinalDir::WEST || d == CardinalDir::NORTH;\n    }\n\n    //! @brief  Check whether two cardinal directions are in the same dimension.\n    //! @sa Compass::arePerpendicular\n    static bool sameDimension(CardinalDir d0, CardinalDir d1) {\n        return (unsigned)(d0) % 2 == (unsigned)(d1) % 2;\n    }\n\n    //! @brief  Check whether two cardinal directions are perpendicular.\n    //! @sa Compass::sameDimension\n    static bool arePerpendicular(CardinalDir d0, CardinalDir d1) {\n        return (unsigned)(d0) % 2 != (unsigned)(d1) % 2;\n    }\n\n    //! @brief  Determine the predominant compass direction from point\n    //!         p0 to point p1.\n    static CompassDir compassDirection(Avoid::Point p0, Avoid::Point p1);\n\n    //! @brief  Convenience method to determine the compass direction\n    //!         from Node u0 to Node u1.\n    static CompassDir compassDirection(std::shared_ptr<Node> u0, std::shared_ptr<Node> u1);\n\n    //! @brief  Determine the predominant cardinal direction from point\n    //!         p0 to point p1.\n    static CardinalDir cardinalDirection(Avoid::Point p0, Avoid::Point p1);\n\n    //! @brief  Convenience method to determine the cardinal direction\n    //!         from Node u0 to Node u1.\n    static CardinalDir cardinalDirection(std::shared_ptr<Node> u0, std::shared_ptr<Node> u1);\n\n    //! @brief  Say whether a CompassDir is cardinal.\n    static bool isCardinal(CompassDir d) { return ((unsigned) d) < 4; }\n\n    //! @brief Rotate a cardinal direction clockwise 90 degrees.\n    static CardinalDir cardRotateCw90(CardinalDir d);\n\n    //! @brief Rotate a cardinal direction anticlockwise 90 degrees.\n    static CardinalDir cardRotateAcw90(CardinalDir d);\n\n    //! @brief Flip a cardinal direction.\n    static CardinalDir cardFlip(CardinalDir d);\n\n    //! @brief Write the name of a CompassDir.\n    static std::string dirToString(CompassDir d);\n\n    //! @brief Write the name of a CardinalDir.\n    static std::string cardToString(CardinalDir d);\n\n    //! @brief Get the cardinal components of a given direction.\n    static CardinalDirs cardinalComponents(CompassDir d);\n\n    //! @brief Get a function that rotates points by the angular displacement\n    //!        from one cardinal direction to another.\n    //! @param[in] fromDir  The starting cardinal direction.\n    //! @param[in] toDir  The ending cardinal direction.\n    //! @return  A function from Avoid::Points to Avoid::Points.\n    //! @sa Compass::getInplaceRotationFunction\n    static PlaneMap getRotationFunction(CardinalDir fromDir, CardinalDir toDir);\n\n    //! @brief Get a function that rotates points by the angular displacement\n    //!        from one cardinal direction to another.\n    //! @param[in] fromDir  The starting cardinal direction.\n    //! @param[in] toDir  The ending cardinal direction.\n    //! @return  A function that alters Avoid::Points in-place.\n    //! @sa Compass::getRotationFunction\n    static InplacePlaneMap getInplaceRotationFunction(CardinalDir fromDir, CardinalDir toDir);\n\n    //! @brief Get the signs of the coordinates of a vector pointing in the given direction.\n    //! @param[in] d  The direction.\n    //! @return  An Avoid::Point (xs, ys), where xs in {-1, 0, 1} represents the sign of the\n    //!          x-coordinate of a vector lying in the \"octant\" represented by the given direction,\n    //!          and likewise for ys. Here an \"octant\" is a semiaxis for a cardinal direction,\n    //!          and an open quadrant for an ordinal direction.\n    static Avoid::Point vectorSigns(CompassDir d);\n\n    //! Cardinal directions in clockwise order, starting with EAST\n    static const CardinalDirs cwCards;\n\n    //! Cardinal directions in anticlockwise order, starting with EAST\n    static const CardinalDirs acwCards;\n\n    //! All compass directions, in clockwise order, with the list doubled, i.e.\n    //! given twice. The doubling is useful when seeking intervals in this cyclic order.\n    //! The list starts with EAST.\n    static const CompassDirs cwAllDoubled;\n\n    //! Like cwAllDoubled, only this time in anticlockwise order.\n    static const CompassDirs acwAllDoubled;\n\n    //! The vertical cardinal directions:\n    static const std::set<CardinalDir> vertical;\n\n    //! The horizontal cardinal directions:\n    static const std::set<CardinalDir> horizontal;\n\n    //! Map cardinal directions to corresponding libavoid connection direction flags.\n    static const std::map<CardinalDir, Avoid::ConnDirFlag> libavoidConnDirs;\n\n    //! Rotate clockwise 90 degrees.\n    static const std::map<CompassDir, CompassDir> rotateCw90;\n\n    //! Flip a given direction (or rotate 180 degrees).\n    static const std::map<CompassDir, CompassDir> flip;\n\n    //! Map cardinal direcs to their variable dimension.\n    static const std::map<CardinalDir, vpsc::Dim> varDim;\n\n    //! Map cardinal direcs to their constant dimension.\n    static const std::map<CardinalDir, vpsc::Dim> constDim;\n\n};\n\ntypedef std::pair<double, double> interval;\n\nstruct LineSegment {\n    LineSegment(Avoid::Point p0, Avoid::Point p1)\n        : p0(p0), p1(p1),\n          x0(p0.x), y0(p0.y),\n          x1(p1.x), y1(p1.y),\n          direc(Compass::cardinalDirection(p0, p1)),\n          varDim(Compass::varDim.at(direc)),\n          constDim(Compass::constDim.at(direc))\n    {\n        if (Compass::isVerticalCard(direc)) {\n            z = x0; w0 = y0; w1 = y1;\n        } else {\n            z = y0; w0 = x0; w1 = x1;\n        }\n        auto p = std::minmax(w0, w1);\n        wl = p.first;\n        wh = p.second;\n        length = wh - wl;\n    }\n\n    //! @brief  Get the constant coordinate.\n    double getConstCoord(void) const { return z; }\n\n    //! @brief  Check whether the closed interval spanned by this segment\n    //!         intersects a given closed interval [a, b].\n    //! @param a  Low end of the interval.\n    //! @param b  High end of the interval.\n    bool closedIntervalIntersects(double a, double b) const;\n\n    //! @brief  Check whether the open interval spanned by this segment\n    //!         intersects a given open interval (a, b).\n    //! @param a  Low end of the interval.\n    //! @param b  High end of the interval.\n    bool openIntervalIntersects(double a, double b) const;\n\n    //! @brief  Check whether the closed interval spanned by this segment\n    //!         includes a given value.\n    //! @param a  The value in question.\n    bool closedIntervalIncludesCoord(double a) const;\n\n    //! @brief  Check whether the open interval spanned by this segment\n    //!         includes a given value.\n    //! @param a  The value in question.\n    bool openIntervalIncludesCoord(double a) const;\n\n    //! @brief  Compute the intersection of this segment's closed interval, with\n    //!         the given interval.\n    //! @param a  Low end of the interval.\n    //! @param b  High end of the interval.\n    //! @return  an interval representing the intersection.\n    //!\n    //! @note  If the intersection is empty, we return an \"empty interval\" in which\n    //!        the second coordinate is less than the first.\n    interval closedIntervalIntersection(double a, double b) const;\n\n    //! @brief  Compute the intersection of this segment's open interval, with\n    //!         the given interval.\n    //! @param a  Low end of the interval.\n    //! @param b  High end of the interval.\n    //! @return  an interval representing the intersection.\n    //!\n    //! @note  If the intersection is empty, we return an \"empty interval\" in which\n    //!        the second coordinate is less than the first.\n    interval openIntervalIntersection(double a, double b) const;\n\n    //! @brief  Check on which side of the line segment a given point lies.\n    //! @param p  The point in question.\n    //! @return  An integer in {-1, 0, 1} indicating, respectively, that in the dimension in\n    //!          which the line segment is constant, the point's coordinate is less than,\n    //!          equal to, or greater than the constant coord of the segment.\n    int ptOnWhichSide(Avoid::Point p) const;\n\n    //! @brief  Check whether a given coord is less than, equal to, or greater than the\n    //!         line segment's constant coord.\n    //! @param z  The coordinate in question.\n    //! @return  An integer in {-1, 0, 1} indicating, respectively, that the given coordinate\n    //!          is less than, equal to, or greater that the segment's constant coord.\n    int coordOnWhichSide(double z1) const;\n\n    static const double EPSILON;\n\n    Avoid::Point p0;\n    Avoid::Point p1;\n    //! Coords of point p0:\n    double x0;\n    double y0;\n    //! Coords of point p1:\n    double x1;\n    double y1;\n    //! Direction from p0 to p1:\n    CardinalDir direc;\n    //! Variable dimension:\n    vpsc::Dim varDim;\n    //! Constant dimension:\n    vpsc::Dim constDim;\n    //! Constant coordinate:\n    double z;\n    //! Variable coordinate of point p0:\n    double w0;\n    //! Variable coordinate of point p1:\n    double w1;\n    //! Low variable coordinate:\n    double wl;\n    //! High variable coordinate:\n    double wh;\n    //! Length:\n    double length;\n};\n\n\n} // namespace dialect\n\n#endif // DIALECT_ORTHO_H\n"
  },
  {
    "path": "cola/libdialect/peeling.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libdialect - A library for computing DiAlEcT layouts:\n *                 D = Decompose/Distribute\n *                 A = Arrange\n *                 E = Expand/Emend\n *                 T = Transform\n *\n * Copyright (C) 2018  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n * Author(s):   Steve Kieffer   <http://skieffer.info>\n*/\n\n#include <memory>\n#include <vector>\n\n#include \"libvpsc/assertions.h\"\n\n#include \"libdialect/commontypes.h\"\n#include \"libdialect/peeling.h\"\n#include \"libdialect/trees.h\"\n\nusing namespace dialect;\n\nusing std::dynamic_pointer_cast;\nusing std::vector;\nusing std::make_shared;\n\nid_type PeeledNode::nextTreeSerialNumber = 0;\n\nvoid Stem::addSelfToGraph(Graph &H) {\n    // First make sure the Graph has PeeledNodes representing the\n    // plain Nodes at the ends of this Stem.\n    Node_SP plain_leaf(m_plain_leaf);\n    Node_SP plain_root(m_plain_root);\n    PeeledNode_SP tree_leaf, tree_root;\n    // Leaf:\n    if (H.hasNode(plain_leaf->id())) {\n        tree_leaf = dynamic_pointer_cast<PeeledNode>(H.getNode(plain_leaf->id()));\n    } else {\n        tree_leaf = PeeledNode::allocate(*plain_leaf);\n        tree_leaf->setMasquerade(true);\n        H.addNode(tree_leaf);\n    }\n    // Root:\n    if (H.hasNode(plain_root->id())) {\n        tree_root = dynamic_pointer_cast<PeeledNode>(H.getNode(plain_root->id()));\n    } else {\n        tree_root = PeeledNode::allocate(*plain_root);\n        tree_root->setMasquerade(true);\n        H.addNode(tree_root);\n    }\n    // Ensure that the root node's serial number is largest.\n    tree_root->updateSerialNumber();\n    // Now add an Edge to the Graph connecting root and leaf.\n    // We always make the root end the source, so that, when regarded as\n    // made up of directed Edges the tree will flow from root to leaves.\n    H.addEdge(Edge::allocate(tree_root, tree_leaf));\n}\n\nvector<Stem_SP> dialect::makeStemsFromLeaves(const NodesById &leaves) {\n    // Prepare the return vector.\n    vector<Stem_SP> stems;\n    // Iterate over the leaves.\n    for (auto p : leaves) {\n        // Get the leaf and its incident edges.\n        Node_SP &leaf = p.second;\n        const EdgesById &edges = leaf->getEdgeLookup();\n        // leaf is supposed to actually be a leaf in the graph, i.e. should\n        // have degree 1.\n        COLA_ASSERT(edges.size() == 1);\n        // This means we can get the one incident edge, and the node at the other end.\n        Edge_SP edge = edges.cbegin()->second;\n        Node_SP root = edge->getOtherEnd(*leaf);\n        // Create the Stem.\n        stems.push_back(make_shared<Stem>(leaf, root));\n    }\n    return stems;\n}\n\nPeeledNode_SP dialect::identifyRootNode(const Graph &graph) {\n    // We want to find the PeeledNode of maximal serial number.\n    id_type candidate_id;\n    id_type max_serial_no = 0;\n    const NodesById &nodes = graph.getNodeLookup();\n    // Iterate over all nodes in the graph.\n    for (auto p : nodes) {\n        Node_SP &node = p.second;\n        // Cast as PeeledNode.\n        PeeledNode_SP pn = dynamic_pointer_cast<PeeledNode>(node);\n        // If serial number is larger, make this node the candidate.\n        if (pn->m_treeSerialNumber >= max_serial_no) {\n            max_serial_no = pn->m_treeSerialNumber;\n            candidate_id = pn->id();\n        }\n    }\n    // Mark the root node.\n    PeeledNode_SP root = dynamic_pointer_cast<PeeledNode>(graph.getNode(candidate_id));\n    root->setIsRoot(true);\n    // And return a shared pointer to it.\n    return root;\n}\n\nNodeBuckets::NodeBuckets(Graph &graph) :\n    m_graph(graph),\n    m_maxDegree(graph.getMaxDegree()),\n    m_buckets(m_maxDegree + 1)\n{\n    // Fill the buckets.\n    for (auto p : graph.getNodeLookup()) {\n        // Each node gets placed in a bucket according to its degree.\n        unsigned degree = p.second->getDegree();\n        m_buckets[degree].insert(p);\n    }\n}\n\nNodesById NodeBuckets::takeLeaves(void) {\n    // Make a copy of the bucket of leaves, i.e. nodes of degree 1.\n    NodesById leaves(m_buckets[1]);\n    // Now can clear the leaf bucket...\n    m_buckets[1].clear();\n    // ...and return the copy.\n    return leaves;\n}\n\nbool NodeBuckets::moveNode(id_type id, unsigned oldDegree, unsigned newDegree) {\n    // Make sure neither degree is too large.\n    if (oldDegree > m_maxDegree || newDegree > m_maxDegree) return false;\n    // Look for the node in the old bucket.\n    NodesById &oldBucket = m_buckets[oldDegree];\n    auto it = oldBucket.find(id);\n    // If it's not in there, then fail.\n    if (it == oldBucket.end()) return false;\n    // Otherwise go ahead and move it.\n    NodesById &newBucket = m_buckets[newDegree];\n    newBucket.insert(*it);\n    oldBucket.erase(it);\n    return true;\n}\n\nvoid NodeBuckets::severNodes(const NodesById &nodes) {\n    // Iterate over the given Nodes.\n    for (auto p : nodes) {\n        Node_SP &u = p.second;\n        // Sever incident edges and get a vector of erstwhile neighbouring nodes.\n        vector<Node_SP> nbrs = m_graph.severNodeNotingNeighbours(*u);\n        // Move each former neighbour up one bucket.\n        for (Node_SP v : nbrs) {\n            unsigned degree = v->getDegree();\n            moveNode(v->id(), degree + 1, degree);\n        }\n    }\n    // And remove the Nodes fully from the Graph.\n    m_graph.removeNodes(nodes);\n}\n\nTrees dialect::peel(Graph &G) {\n    // Initialise a fresh Graph, essentially a workspace where we'll build the trees.\n    Graph H;\n    // The NodeBuckets object keeps the nodes in G sorted by degree.\n    NodeBuckets buckets(G);\n    // Start by getting the initial leaves.\n    NodesById leaves = buckets.takeLeaves();\n    while (!leaves.empty()) {\n        // Make stems from leaves.\n        vector<Stem_SP> stems = makeStemsFromLeaves(leaves);\n        // Cut the leaves out of the graph.\n        buckets.severNodes(leaves);\n        if (G.isEmpty()) {\n            // This case only arises when G was a tree with a double centre U--V\n            // At this point we must have:\n            //     stems == [Stem(U,V), Stem(V,U)]\n            // and we must only add one (doesn't matter which) of those stems to H.\n            COLA_ASSERT(stems.size() == 2);\n            stems.pop_back();\n        }\n        // Add the stems to the new graph.\n        for (Stem_SP stem : stems) stem->addSelfToGraph(H);\n        // And now see if there are any newly-created leaves.\n        leaves = buckets.takeLeaves();\n    }\n    // We have now repeatedly cut off all leaves until none remain, reconnecting\n    // the removed leaves in the new graph H.\n    // The connected components of H are the trees.\n    Graphs comps = H.getConnComps();\n    // Build and return Trees.\n    Trees trees;\n    bool G_empty = G.isEmpty();\n    for (Graph_SP comp : comps) {\n        PeeledNode_SP root = identifyRootNode(*comp);\n        // Except in the case of a pure tree with a double centre, in which case the\n        // original graph G is now empty, the node that is the root of each tree is\n        // a GhostNode of a Node still belonging to the original Graph.\n        // This is the \"attachment point\". For use later on, we mark that original\n        // node as \"root\" as well (unless G is empty).\n        if (!G_empty) {\n            Node_SP originalRoot = G.getNode(root->id());\n            originalRoot->setIsRoot(true);\n        }\n        // Finally, construct and record the Tree.\n        Tree_SP tree = make_shared<Tree>(comp, root);\n        trees.push_back(tree);\n    }\n    // And return.\n    return trees;\n}\n"
  },
  {
    "path": "cola/libdialect/peeling.h",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libdialect - A library for computing DiAlEcT layouts:\n *                 D = Decompose/Distribute\n *                 A = Arrange\n *                 E = Expand/Emend\n *                 T = Transform\n *\n * Copyright (C) 2018  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n * Author(s):   Steve Kieffer   <http://skieffer.info>\n*/\n\n#ifndef DIALECT_PEELING_H\n#define DIALECT_PEELING_H\n\n#include <memory>\n#include <vector>\n\n#include \"libdialect/commontypes.h\"\n#include \"libdialect/graphs.h\"\n\nnamespace dialect {\n\nclass PeeledNode;\nstruct Stem;\n\ntypedef std::shared_ptr<PeeledNode> PeeledNode_SP;\ntypedef std::shared_ptr<Stem> Stem_SP;\n\n//! @brief  Mark as \"root\" the PeeledNode having largest serial number.\n//!\n//! @note  The Graph must contain only PeeledNodes.\n//!\n//! @return  The PeeledNode identified as root.\nPeeledNode_SP identifyRootNode(const Graph &graph);\n\n//! @brief  A PeeledNode is a type of GhostNode, used in the peeling process.\nclass PeeledNode : public GhostNode {\n    friend struct Stem;\n    friend PeeledNode_SP identifyRootNode(const Graph &graph);\npublic:\n    //! @brief  Factory function.\n    //!\n    //! @return  A shared_ptr to PeeledNode (PeeledNode_SP).\n    static PeeledNode_SP allocate(const Node &node) { return PeeledNode_SP(new PeeledNode(node)); }\n\n    //! @brief  Copy-assignment operator\n    PeeledNode &operator=(const PeeledNode&) = default;\n\n    //! @brief  Destructor\n    virtual ~PeeledNode(void) = default;\n\nprivate:\n    //! @brief  Default constructor is deleted.\n    PeeledNode(void) = delete;\n\n    //! @brief  Copy constructor is deleted.\n    PeeledNode(const PeeledNode&) = delete;\n\n    //! @brief  We always make a PeeledNode as a copy of a plain Node.\n    PeeledNode(const Node &node)\n      : GhostNode(node),\n        m_treeSerialNumber(nextTreeSerialNumber++) {}\n\n    //! PeeledNodes keep a \"tree serial number\" that is\n    //! useful in figuring out which PeeledNode is the root Node of the peeled tree.\n    static id_type nextTreeSerialNumber;\n    id_type m_treeSerialNumber;\n    void updateSerialNumber(void) { m_treeSerialNumber = nextTreeSerialNumber++; }\n\n};\n\n\n//! Represents a leaf node, along with its one edge and neighbour.\nstruct Stem {\n    Stem(const Node_SP &leaf, const Node_SP &root) : m_plain_leaf(leaf), m_plain_root(root) {}\n    Node_WP m_plain_leaf;\n    Node_WP m_plain_root;\n    void addSelfToGraph(Graph &H);\n};\n\n//! @brief  Make a Stem object to represent each leaf.\nstd::vector<Stem_SP> makeStemsFromLeaves(const NodesById &leaves);\n\n//! For sorting all the nodes of a graph into \"buckets\" according\n//! to their degree.\n//! You can take all the leaves (degree-1 nodes) and you can move\n//! a node from one bucket to another.\nstruct NodeBuckets {\n    //! @brief  Initialize a set of node buckets for the given Graph.\n    //!\n    //! Creates buckets for all degrees up to the Graph's max degree,\n    //! and populates these. Each bucket contains a NodesById map.\n    NodeBuckets(Graph &graph);\n\n    //! @brief  Return a copy of the bucket of leaves, and clear the latter.\n    NodesById takeLeaves(void);\n\n    //! @brief  Move a node from one bucket to another.\n    //!\n    //! @param[in]  id  The ID of the Node to be moved.\n    //! @param[in]  oldDegree  The bucket in which the Node should be found.\n    //! @param[in]  newDegree  The bucket to which the Node should be moved.\n    //!\n    //! @return  boolean saying whether the Node was found and moved.\n    bool moveNode(id_type id, unsigned oldDegree, unsigned newDegree);\n\n    //! @brief  Sever the given Nodes from our Graph.\n    //!\n    //! @note  This method does modify the Graph.\n    //!        For each given Node, all incident Edges are severed, and the Node\n    //!        is removed from the Graph.\n    //!        The neighbouring Nodes are moved to new buckets as appropriate.\n    //! @note  The given Nodes themselves are NOT moved to new buckets.\n    //!        This preserves the freedom to handle that operation separately.\n    void severNodes(const NodesById &nodes);\n\n    Graph &m_graph;\n    unsigned m_maxDegree;\n    std::vector<NodesById> m_buckets;\n};\n\n//! @brief  Perform the \"peeling\" process, in which the exterior trees are\n//!         removed from the given Graph.\n//!\n//! @note  See Abello, James, Frank Van Ham, and Neeraj Krishnan.\n//!         \"Ask-graphview: A large scale graph visualization system.\"\n//!         IEEE transactions on visualization and computer graphics 12\n//!         no. 5 (2006): 669-676.\n//!\n//! @note  The given Graph is modiifed in place. It will be pared down\n//!        to its own /core/ -- i.e. all that remains after the trees have\n//!        been peeled away.\n//!\n//!        Each tree includes a root node which is a copy of a node that\n//!        remains in the core.\n//!\n//!        The underlying Graphs of the created Trees consist of PeeledNodes.\n//!\n//!        In the case that the given Graph is itself a tree, the remaining core\n//!        will consist only of the tree's root node. Meanwhile the one Tree will\n//!        be a copy of the entire original graph.\n//!\n//! @return  The trees.\nTrees peel(Graph &G);\n\n} // namespace dialect\n\n#endif // DIALECT_PEELING_H\n"
  },
  {
    "path": "cola/libdialect/planarise.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libdialect - A library for computing DiAlEcT layouts:\n *                 D = Decompose/Distribute\n *                 A = Arrange\n *                 E = Expand/Emend\n *                 T = Transform\n *\n * Copyright (C) 2018  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n * Author(s):   Steve Kieffer   <http://skieffer.info>\n*/\n\n#include <math.h>\n#include <utility>\n#include <memory>\n#include <vector>\n#include <algorithm>\n#include <set>\n\n#include \"libavoid/geomtypes.h\"\n\n#include \"libdialect/commontypes.h\"\n#include \"libdialect/ortho.h\"\n#include \"libdialect/graphs.h\"\n#include \"libdialect/planarise.h\"\n#include \"libdialect/util.h\"\n#include \"libdialect/constraints.h\"\n\nusing namespace dialect;\n\nusing std::pair;\nusing std::vector;\n\nusing Avoid::Point;\n\nEdgeSegment::EdgeSegment(Node_SP node1, Node_SP node2) {\n    Point c1 = node1->getCentre(),\n          c2 = node2->getCentre();\n    double dx = c2.x - c1.x,\n           dy = c2.y - c1.y;\n    if (fabs(dy) <= fabs(dx)) {\n        orientation = vpsc::HORIZONTAL;\n        constCoord = c1.y;\n        if (dx > 0) {\n            lowerBound = c1.x;\n            upperBound = c2.x;\n            openingNode = node1;\n            closingNode = node2;\n        } else {\n            lowerBound = c2.x;\n            upperBound = c1.x;\n            openingNode = node2;\n            closingNode = node1;\n        }\n    } else {\n        orientation = vpsc::VERTICAL;\n        constCoord = c1.x;\n        if (dy > 0) {\n            lowerBound = c1.y;\n            upperBound = c2.y;\n            openingNode = node1;\n            closingNode = node2;\n        } else {\n            lowerBound = c2.y;\n            upperBound = c1.y;\n            openingNode = node2;\n            closingNode = node1;\n        }\n    }\n}\n\nvoid EdgeSegment::setNewClosingNode(Node_SP u) {\n    closingNode = u;\n    Point c = u->getCentre();\n    upperBound = orientation == vpsc::HORIZONTAL ? c.x : c.y;\n}\n\nstd::pair<Event*, Event*> EdgeSegment::getEvents(void) {\n    Event *opening = new Event(this, openingNode, EventType::OPEN);\n    Event *closing = new Event(this, closingNode, EventType::CLOSE);\n    opening->companion = closing;\n    closing->companion = opening;\n    return {opening, closing};\n}\n\nvoid EdgeSegment::addSep(SepMatrix &m) const {\n    SepDir d = orientation == vpsc::HORIZONTAL ? SepDir::EAST : SepDir::SOUTH;\n    m.addSep(openingNode->id(), closingNode->id(), GapType::CENTRE, d, SepType::INEQ, upperBound - lowerBound);\n}\n\nEvent::Event(EdgeSegment *seg, Node_SP endpt, EventType type)\n    : seg(seg),\n      endpt(endpt),\n      type(type),\n      companion(nullptr)\n{\n    Point c = endpt->getCentre();\n    constCoord = seg->orientation == vpsc::HORIZONTAL ? c.y : c.x;\n    varCoord = seg->orientation == vpsc::HORIZONTAL ? c.x : c.y;\n}\n\nEvent::Event(double varCoord, Node_SP node, EventType type)\n    : seg(nullptr),\n      endpt(node),\n      varCoord(varCoord),\n      type(type),\n      companion(nullptr) {}\n\ndouble Event::x(void) {\n    return endpt->getCentre().x;\n}\n\ndouble Event::y(void) {\n    return endpt->getCentre().y;\n}\n\nvoid OrthoPlanariser::removeEdgeOverlaps(void) {\n    // Initialise the new Graph and give it a GhostNode to represent each node in the\n    // given Graph G.\n    // The GhostNodes will be set to masquerade as the original Nodes, i.e. to report\n    // the original Nodes' IDs. This helps us to later create the Edges for the new Graph.\n    m_overlapFreeGraph = std::make_shared<Graph>();\n    for (auto pair : m_givenGraph->getNodeLookup()) {\n        Node_SP &u = pair.second;\n        GhostNode_SP g = GhostNode::allocate(*u);\n        g->setMasquerade(true);\n        m_overlapFreeGraph->addNode(g);\n    }\n    // We also add a Node for every bend point in G.\n    // When we ask G to create the unique bend point nodes, as a side-effect those nodes\n    // are also set the \"bend nodes\" of the Edges.\n    NodesById bps = m_givenGraph->buildUniqueBendPoints();\n    for (auto pair : bps) {\n        Node_SP &b = pair.second;\n        m_overlapFreeGraph->addNode(b);\n    }\n    // Since G's Edges now have their bend nodes, we can now build segments to represent the\n    // connector routes.\n    buildSegments(m_givenGraph);\n    // Sort the segments by orientation.\n    size_t n = m_edgeSegments.size();\n    EdgeSegments hsegs, vsegs;\n    hsegs.reserve(n);\n    vsegs.reserve(n);\n    for (EdgeSegment *seg : m_edgeSegments) {\n        if (seg->orientation == vpsc::HORIZONTAL) {\n            hsegs.push_back(seg);\n        } else {\n            vsegs.push_back(seg);\n        }\n    }\n    hsegs.shrink_to_fit();\n    vsegs.shrink_to_fit();\n    // Compute node groups\n    NodeGroups hgps = computeNodeGroups(hsegs),\n               vgps = computeNodeGroups(vsegs);\n    // Finally, we can construct the Edges for the new graph based on the node groups.\n    vector<NodeGroups> allGps{hgps, vgps};\n    for (NodeGroups gps: allGps) {\n        for (Nodes gp: gps) {\n            for (size_t i = 0; i + 1 < gp.size(); ++i) {\n                // Subtle point: the Nodes in the groups are from the original graph.\n                // We want to construct Edges not on these, but on Nodes of the same\n                // ID, in the new overlap-free Graph.\n                Node_SP &s_orig = gp[i],\n                        &t_orig = gp[i+1],\n                        s = m_overlapFreeGraph->getNode(s_orig->id()),\n                        t = m_overlapFreeGraph->getNode(t_orig->id());\n                Edge_SP e = Edge::allocate(s, t);\n                m_overlapFreeGraph->addEdge(e);\n            }\n        }\n    }\n}\n\n\nvoid OrthoPlanariser::buildSegments(Graph_SP G) {\n    // We use this method twice, on different graphs. So we begin by making\n    // sure any old segments are cleared out.\n    deleteSegments();\n    // Iterate over the edges of the graph.\n    for (auto pair : G->getEdgeLookup()) {\n        Edge_SP &e = pair.second;\n        Nodes bps = e->getBendNodes();\n        size_t num_bends = bps.size();\n        Node_SP src = e->getSourceEnd(),\n                tgt = e->getTargetEnd();\n        if (num_bends == 0) {\n            // In this case we only need a segment from src node to tgt node.\n            m_edgeSegments.push_back(new EdgeSegment(src, tgt));\n        } else {\n            // Otherwise we start with a segment from src node to first bp.\n            m_edgeSegments.push_back(new EdgeSegment(src, bps.front()));\n            // Then run a sliding window of length two over the bps to create internal segments.\n            for (size_t i = 0; i < num_bends - 1; ++i) {\n                m_edgeSegments.push_back(new EdgeSegment(bps[i], bps[i+1]));\n            }\n            // And finish with a segment from the last bp to the tgt node.\n            m_edgeSegments.push_back(new EdgeSegment(bps.back(), tgt));\n        }\n    }\n}\n\nvoid OrthoPlanariser::deleteSegments(void) {\n    for (EdgeSegment *s : m_edgeSegments) {\n        delete s;\n    }\n    m_edgeSegments.clear();\n}\n\nNodeGroups OrthoPlanariser::computeNodeGroups(EdgeSegments segs) {\n    // Initialise return value.\n    NodeGroups groups;\n    // Partition the segments by their constant coordinate, with (experimentally determined) half-integer tolerance.\n    vector<EdgeSegments> parts = partition<EdgeSegment*>(segs, [](EdgeSegment *s) -> double {return s->constCoord;}, 0.5);\n    // Compute Node groups for each part.\n    for (EdgeSegments part : parts) {\n        // Build vector of events.\n        Events evts;\n        for (EdgeSegment *seg : part) {\n            pair<Event*, Event*> p = seg->getEvents();\n            evts.push_back(p.first);\n            evts.push_back(p.second);\n        }\n        // Sort events by increasing variable coord.\n        std::sort(evts.begin(), evts.end(), [](Event *a, Event *b) -> bool {return a->varCoord < b->varCoord;});\n        // Initialise an empty Node group, and set of open segments.\n        Nodes group;\n        std::set<EdgeSegment*> openSegs;\n        // Iterate over the events.\n        for (Event *evt : evts) {\n            Node_SP &endpt = evt->endpt;\n            // Add the endpt to the group, but not if the group already ends with this Node.\n            if (group.size() == 0 || group.back() != endpt) group.push_back(endpt);\n            // Keep track of which segments are open.\n            if (evt->type == EventType::OPEN) {\n                openSegs.insert(evt->seg);\n            } else if (evt->type == EventType::CLOSE) {\n                openSegs.erase(evt->seg);\n                // If no open segments remain, this group is complete.\n                if (openSegs.empty()) {\n                    // Record a copy of the group.\n                    groups.push_back(group);\n                    // Clear it, for the next group.\n                    group.clear();\n                }\n            }\n            // We are done using this Event, so we can delete it right now.\n            delete evt;\n        }\n    }\n    // Return\n    return groups;\n}\n\nbool dialect::CompareActiveEvents(Event *a, Event *b) {\n    // Experimentally determined tolerance:\n    const double TOLERANCE = 1.0;\n    double ya = a->y(),\n           yb = b->y();\n    // If the y-coord of the second Event is greater than that of the first Event\n    // by more than the tolerance, then we say that the first Event comes first.\n    if (yb - ya > TOLERANCE) return true;\n    // If the other way around, the second Event comes first.\n    if (ya - yb > TOLERANCE) return false;\n    // Otherwise the two coords are within the tolerance of one another, so we base\n    // the ordering instead on the event types.\n    // We want CLOSE to come before SUSTAIN, which comes before OPEN.\n    // We have defined the enum items in this order, so the following test works:\n    return a->type < b->type;\n}\n\nNodes OrthoPlanariser::computeCrossings(void) {\n    /* Plan: Every edge in the overlap-free graph is a simple, straight segment. We build an\n     * EdgeSegment to represent each of these, and collect the open and close events for all\n     * segments. We partition the events by x-coord, and we process the parts one at a time,\n     * working from left to right. As we go, we maintain the set of open horizontal segments.\n     * As we work from top to bottom through a given x-part, we will encounter open and close\n     * events for the vertical segments having that x-coord, as well as sustain events for\n     * any horizontal segments that are still open at this x-coord. There is an intersection\n     * if and only if there is an open horizontal segment while a vertical segment is also\n     * open. When we encounter an intersection, we (a) create a new node to represent it,\n     * (b) split the open horizontal segment into two halves at that point, and (c) do likewise\n     * for the open vertical segment.\n     */\n    // Prepare return value.\n    Nodes crossingNodes;\n    // For display/testing purposes, we want the crossing nodes we create to\n    // look smaller than the average node in the graph.\n    double crossingNodeSize = m_givenGraph->getIEL()/8.0;\n    // Build all Events for all segments.\n    Events evts;\n    for (EdgeSegment *seg : m_edgeSegments) {\n        pair<Event*, Event*> p = seg->getEvents();\n        evts.push_back(p.first);\n        evts.push_back(p.second);\n    }\n    // Partition by x-coord.\n    // Experimentally determined partition tolerance:\n    const double tol = 0.8;\n    vector<Events> xparts = partition<Event*>(evts, [](Event *e)->double{return e->x();}, tol);\n    // Set of Events representing open horizontal segments:\n    std::set<Event*> openH;\n    // Iterate over the x-parts.\n    for (Events part : xparts) {\n        // Event pointer representing open vertical segment:\n        Event *openV = nullptr;\n        // Vector of active Events:\n        Events active;\n        // All open horizontals, and all events in the current x-part, are active.\n        active.resize(openH.size() + part.size());\n        auto it = std::copy(openH.begin(), openH.end(), active.begin());\n        std::copy(part.begin(), part.end(), it);\n        active.shrink_to_fit();\n        // Sort the active events.\n        std::sort(active.begin(), active.end(), CompareActiveEvents);\n        // Now we can iterate over the active events.\n        for (Event *evt : active) {\n            switch(evt->type) {\n            case EventType::CLOSE:\n                // What is closing? A horizontal or a vertical segment? Act accordingly.\n                if (evt->seg->orientation == vpsc::HORIZONTAL) {\n                    // We have hit the close event for a horizontal segment. We must remove the\n                    // corresponding sustain event from the set.\n                    openH.erase(evt->companion);\n                } else {\n                    // There is no longer an open vertical segment.\n                    openV = nullptr;\n                }\n                break;\n            case EventType::OPEN:\n                // What is opening? A horizontal or a vertical segment? Act accordingly.\n                if (evt->seg->orientation == vpsc::HORIZONTAL) {\n                    // Turn the open event into a sustain event, and add it to the set.\n                    evt->type = EventType::SUSTAIN;\n                    openH.insert(evt);\n                } else {\n                    // Note the open vertical segment.\n                    openV = evt;\n                }\n                break;\n            case EventType::SUSTAIN:\n                // This event indicates to us that a horizontal segment is open at this point.\n                // Is there also an open vertical segment?\n                if (openV != nullptr) {\n                    // There is also an open vertical segment, so we have an intersection.\n                    // First create a new node to represent the crossing.\n                    Node_SP cr = Node::allocate();\n                    cr->setCentre(openV->constCoord, evt->constCoord);\n                    cr->setDims(crossingNodeSize, crossingNodeSize);\n                    // Store it in the return vector.\n                    crossingNodes.push_back(cr);\n                    // Set it as the new closing node of the two open segments.\n                    evt->seg->setNewClosingNode(cr);\n                    openV->seg->setNewClosingNode(cr);\n                    // Make a new horizontal segment to carry on for the open one, and store it globally.\n                    EdgeSegment *hseg = new EdgeSegment(cr, evt->companion->endpt);\n                    evt->companion->seg = hseg;\n                    m_edgeSegments.push_back(hseg);\n                    // Make a new vertical segment to carry on for the open one, and store it globally.\n                    EdgeSegment *vseg = new EdgeSegment(cr, openV->companion->endpt);\n                    openV->companion->seg = vseg;\n                    m_edgeSegments.push_back(vseg);\n                    // Update the two open events.\n                    // By updating the event representing the open horizontal segment...\n                    evt->seg = hseg;\n                    evt->endpt = cr;\n                    evt->varCoord = openV->constCoord;\n                    // ...we can simply leave it in the openH set.\n                    // Likewise, by updating the event representing the open vertical segment...\n                    openV->seg = vseg;\n                    openV->endpt = cr;\n                    openV->varCoord = evt->constCoord;\n                    // ...it continues to correctly represent the open vertical segment.\n                }\n                break;\n            }\n        }\n    }\n    // We're done using all the Events, so we can clean them up.\n    for (Event *e : evts) delete e;\n    // Return the vector of new crosing nodes.\n    return crossingNodes;\n}\n\nvoid OrthoPlanariser::removeEdgeCrossings(void) {\n    m_planarGraph = std::make_shared<Graph>();\n    // Start the new graph with a ghost of each node in the overlap-free graph.\n    for (auto pair : m_overlapFreeGraph->getNodeLookup()) {\n        Node_SP &u = pair.second;\n        GhostNode_SP g = GhostNode::allocate(*u);\n        g->setMasquerade(true);\n        m_planarGraph->addNode(g);\n    }\n    // Build segments based on the Edges in the overlap-free graph.\n    buildSegments(m_overlapFreeGraph);\n    // Compute the crossing nodes, adding new segments as needed.\n    Nodes crossingNodes = computeCrossings();\n    // Add the crossing nodes to the graph.\n    for (Node_SP u : crossingNodes) {\n        m_planarGraph->addNode(u);\n    }\n    // The graph gets one edge for each of the current segments.\n    for (EdgeSegment *s : m_edgeSegments) {\n        // Subtle point: Although we're going to use the EdgeSegments as a guide\n        // to tell us what Edges to create, the Edges are not to link the Nodes\n        // named in the EdgeSegments; they are to link those Nodes in the new,\n        // planar Graph, that have the same IDs as those Nodes.\n        Node_SP src = m_planarGraph->getNode(s->openingNode->id()),\n                tgt = m_planarGraph->getNode(s->closingNode->id());\n        m_planarGraph->addEdge(Edge::allocate(src, tgt));\n    }\n    // Add constraints, if requested.\n    if (m_opts.generateConstraints) {\n        SepMatrix &m = m_planarGraph->getSepMatrix();\n        for (EdgeSegment *s : m_edgeSegments) {\n            s->addSep(m);\n        }\n    }\n}\n"
  },
  {
    "path": "cola/libdialect/planarise.h",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libdialect - A library for computing DiAlEcT layouts:\n *                 D = Decompose/Distribute\n *                 A = Arrange\n *                 E = Expand/Emend\n *                 T = Transform\n *\n * Copyright (C) 2018  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n * Author(s):   Steve Kieffer   <http://skieffer.info>\n*/\n\n#ifndef DIALECT_PLANARISE_H\n#define DIALECT_PLANARISE_H\n\n#include <vector>\n#include <utility>\n\n#include \"libvpsc/rectangle.h\"\n\n#include \"libdialect/commontypes.h\"\n#include \"libdialect/constraints.h\"\n\nnamespace dialect {\n\nstruct Event;\n\n//! Represents an axis-aligned segment of an orthogonal connector route.\nstruct EdgeSegment {\n\n    //! @brief  Standard constructor\n    //! @param[in] node1  a Node representing one endpoint of the segment\n    //! @param[in] node2  a Node representing the other endpoint of the segment\n    EdgeSegment(Node_SP node1, Node_SP node2);\n\n    //! @brief  Substitute a new Node as the closing node of the segment.\n    //!         This is useful during our scan line process.\n    void setNewClosingNode(Node_SP u);\n\n    //! @brief  Generate the two Events, in order, representing the opening\n    //!         and closing of this segment.\n    std::pair<Event*, Event*> getEvents(void);\n\n    //! @brief  Update a SepMatrix with a constraint requiring this segment to\n    //!         remain aligned and at least its current length.\n    void addSep(SepMatrix &m) const;\n\n    //! The orientation of the segment (horizontal or vertical):\n    vpsc::Dim orientation;\n    //! The value of the coordinate that does not change:\n    double constCoord;\n    //! The lower bound on the coordinate that does change:\n    double lowerBound;\n    //! The upper bound on the coordinate that does change:\n    double upperBound;\n    //! The node that sits at the end where the lower bound on the variable coordinate occurs:\n    Node_SP openingNode;\n    //! The node that sits at the end where the upper bound on the variable coordinate occurs:\n    Node_SP closingNode;\n\n};\n\nenum class EventType {\n    // Note: It is actually important that they be in this order:\n    CLOSE, SUSTAIN, OPEN\n    // (See CompareActiveEvents function.)\n};\n\nstruct Event {\n\n    //! @brief  Constructor for use with planarisation.\n    Event(EdgeSegment *seg, Node_SP endpt, EventType type);\n\n    //! @brief  Constructor for use with the \"near alignments\" process.\n    //!         See nearalign.h.\n    Event(double varCoord, Node_SP node, EventType type);\n\n    Node_SP getNode(void) { return endpt; }\n\n    EdgeSegment *seg;\n    Node_SP endpt;\n    double constCoord;\n    double varCoord;\n    EventType type;\n    Event *companion;\n    double x(void);\n    double y(void);\n};\n\n//! We need a special function for comparing Events, using a positive tolerance.\n//! Here's why. Suppose vertical segment A has its south end at (0, 0), and horizontal\n//! segment B has its east end at (0, -0.00000000001). This means that /technically/\n//! A and B intersect. However (http://xkcd.com/1475/) you probably don't actually want\n//! to treat this as an intersection. The comparison function is designed so that,\n//! when the list of active events is sorted, the \"close\" event for segment A will come\n//! /before/ the \"sustain\" event for segment B, instead of the other way around, as\n//! dictated by their exact y-coordinates. This way we will /not/ detect an intersection\n//! between A and B.\nbool CompareActiveEvents(Event *a, Event *b);\n\ntypedef std::vector<EdgeSegment*> EdgeSegments;\ntypedef std::vector<Event*> Events;\ntypedef std::vector<Nodes> NodeGroups;\n\nstruct OrthoPlanariserOptions {\n    //! When planarising an orthogonally routed graph, we may generate new nodes to\n    //! stand in place of bend points and crossing points. Unconstrained, these would\n    //! introduce new articulation points, at which formerly straight connector segments\n    //! could now bend. If it is desired that these new nodes be so constrained that\n    //! no such bends can occur, leave this option set to true.\n    bool generateConstraints = true;\n};\n\n//! This class is for planarising orthogonally routed graphs.\n//! To say that a graph G is orthogonally routed means a certain condition on\n//! the connector route stored in each Edge; namely, that precisely one coordinate\n//! change between consecutive route points.\nclass OrthoPlanariser {\npublic:\n    //! @brief  Standard constructor.\n    //!\n    //! @param[in] G  The Graph to be planarised.\n    //!\n    //! @note  The given Graph is not altered. A new, planar version is constructed.\n    OrthoPlanariser(const Graph_SP &G) : m_givenGraph(G) {}\n\n    /* Memory model:\n     *\n     * Many objects are allocated in the lifecycle of an OrthoPlanariser, but\n     * cleaning up is nevertheless quite simple.\n     *\n     * Among the three Graphs -- given, overlap-free, and planar -- the first\n     * and the last are the client's responsibility, since those are this object's\n     * input and output. The overlap-free graph is an intermediate workspace and\n     * should be destroyed, and it will be destroyed automatically, since all the\n     * allocated objects of which it is made -- Nodes, Edges, and the Graph itself --\n     * are managed solely by shared pointers.\n     *\n     * Apart from Graphs, Nodes, and Edges, we allocate EdgeSegments and Events.\n     *\n     * Events are always cleaned up before even exiting those methods that use them\n     * (namely computeNodeGroups and computeCrossings).\n     *\n     * In every place where an EdgeSegment is allocated (there are only two placed:\n     * buildSegments, and computeCrossings), a pointer is pushed into m_edgeSegments.\n     * Pointers are removed from that vector in only one place: the\n     * deleteSegments method; and here of course, it comes only after deleting those\n     * EdgeSegments to which they pointed. Therefore calling deleteSegments is all\n     * that is needed to free all EdgeSegments ever allocated. Since that is called\n     * at the end of the planarise method, there is nothing for the destructor to do.\n     */\n    ~OrthoPlanariser(void) {}\n\n    //! @brief  Set the options.\n    void setOpts(const OrthoPlanariserOptions &opts) { m_opts = opts; }\n\n    //! @brief  Compute a planarisation of the given Graph.\n    //! @return  The planarised Graph.\n    Graph_SP planarise(void) {\n        // There are two steps.\n        // (1) First we construct an overlap-free graph based on the given one.\n        // In this graph, there are no edge-overlaps, but there may still be edge-crossings.\n        removeEdgeOverlaps();\n        // (2) Then we construct a planar graph based on the overlap-free one.\n        // Here we remove any edge-crossings.\n        removeEdgeCrossings();\n        // There are some allocated EdgeSegment objects left over afterward.\n        // Clean them up now, since they are no longer needed.\n        deleteSegments();\n        // The planar graph is the result we produce for the client.\n        return m_planarGraph;\n    }\n\nprivate:\n\n    //! @brief  Remove the edge overlaps in the given routed orthogonal graph.\n    //!\n    //! Compute new Graph having all the nodes of the given Graph G, plus\n    //! a node for each bend point in the routes of G. Its edges\n    //! cover the routes of G, in the sense of point-sets in the\n    //! plane, but none of its edges overlap.\n    void removeEdgeOverlaps(void);\n    //! @brief  Remove the edge crossings in the overlap-free graph.\n    //!\n    //! Again, a new Graph is computed, having all the nodes of hte overlap-free one,\n    //! plus a \"crossing node\" at each place where edges cross in that one.\n    //! This graph is planar.\n    void removeEdgeCrossings(void);\n    //! @brief  Build EdgeSegment objects for all the Edges in the Graph G.\n    //!         Store the segments in m_edgeSegments.\n    void buildSegments(Graph_SP G);\n    //! @brief  Clean up m_edgeSegments, freeing allocated objects.\n    void deleteSegments(void);\n    //! @brief  A utility function for removing edge overlaps.\n    //! @param[in] segs  a vector of EdgeSegments, all of which should be of\n    //!                 the same orientation\n    //! @return  NodeGroups (vector of vectors of Node_SP's), where each group\n    //!          gives the Nodes (bend or otherwise) that participate in a common\n    //!          sequence of overlapping segments, listed in order of increasing\n    //!          variable-coord.\n    NodeGroups computeNodeGroups(EdgeSegments segs);\n    //! @brief  Locate and remove all edge crossings in the overlap-free graph.\n    //!\n    //! This is the method that actually generates new nodes and new edge segments,\n    //! each time an intersection is found. Meanwhile it is the removeEdgeCrossings\n    //! method that actually puts it all together into a new, planar graph.\n    //!\n    //! @return  The new crossing nodes generated. (New edge segments are just stashed\n    //!          in m_edgeSegments.)\n    Nodes computeCrossings(void);\n\n    OrthoPlanariserOptions m_opts;\n\n    EdgeSegments m_edgeSegments;\n\n    Graph_SP m_givenGraph;\n    Graph_SP m_overlapFreeGraph;\n    Graph_SP m_planarGraph;\n};\n\n\n} // namespace dialect\n\n#endif // DIALECT_PLANARISE_H\n"
  },
  {
    "path": "cola/libdialect/qalookup.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libdialect - A library for computing DiAlEcT layouts:\n *                 D = Decompose/Distribute\n *                 A = Arrange\n *                 E = Expand/Emend\n *                 T = Transform\n *\n * Copyright (C) 2018  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n * Author(s):   Steve Kieffer   <http://skieffer.info>\n*/\n\n/*\n * Generated by gen_qa_lookup.py\n *\n*/\n\n#include <string>\n#include <sstream>\n#include <iterator>\n#include <vector>\n\n#include \"libdialect/quadaction.h\"\n\nusing std::string;\nusing std::istringstream;\nusing std::istream_iterator;\nusing std::vector;\n\nconst string quadActionLookup[3][3][3][3][16] = {\n  {\n    {\n      {\n        {\"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\"},\n        {\"\", \"DDDC\", \"\", \"\", \"\", \"\", \"\", \"\", \"DDDA\", \"\", \"\", \"\", \"\", \"\", \"\", \"\"},\n        {\"\", \"DDDC\", \"\", \"\", \"\", \"\", \"\", \"\", \"DDDA\", \"DDDB\", \"\", \"\", \"\", \"\", \"\", \"\"}\n      },\n      {\n        {\"\", \"\", \"\", \"\", \"DDAD\", \"\", \"\", \"\", \"DDCD\", \"\", \"\", \"\", \"\", \"\", \"\", \"\"},\n        {\"\", \"DDDC\", \"\", \"\", \"DDAD\", \"DDAC\", \"\", \"\", \"DDDA DDCD\", \"DDCC\", \"\", \"\", \"DDAA\", \"\", \"\", \"\"},\n        {\"\", \"DDDC\", \"\", \"\", \"DDAD\", \"DDAC\", \"\", \"\", \"DDDA DDCD\", \"DDDB DDCC\", \"\", \"\", \"DDAA\", \"DDAB\", \"\", \"\"}\n      },\n      {\n        {\"\", \"\", \"\", \"\", \"DDAD\", \"\", \"\", \"\", \"DDCD\", \"\", \"\", \"\", \"DDBD\", \"\", \"\", \"\"},\n        {\"\", \"DDDC\", \"\", \"\", \"DDAD\", \"DDAC\", \"\", \"\", \"DDDA DDCD\", \"DDCC\", \"\", \"\", \"DDAA DDBD\", \"DDBC\", \"\", \"\"},\n        {\"\", \"DDDC\", \"\", \"\", \"DDAD\", \"DDAC\", \"\", \"\", \"DDDA DDCD\", \"DDDB DDCC\", \"\", \"\", \"DDAA DDBD\", \"DDAB DDBC\", \"\", \"\"}\n      }\n    },\n    {\n      {\n        {\"\", \"\", \"DADD\", \"\", \"DCDD\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\"},\n        {\"\", \"DDDC\", \"DADD\", \"DADC\", \"DCDD\", \"DCDC\", \"\", \"\", \"DDDA\", \"\", \"DADA\", \"\", \"DCDA\", \"\", \"\", \"\"},\n        {\"\", \"DDDC\", \"DADD\", \"DADC\", \"DCDD\", \"DCDC\", \"\", \"\", \"DDDA\", \"DDDB\", \"DADA\", \"DADB\", \"DCDA\", \"DCDB\", \"\", \"\"}\n      },\n      {\n        {\"\", \"\", \"DADD\", \"\", \"DDAD DCDD\", \"\", \"DAAD\", \"\", \"DDCD\", \"\", \"DACD\", \"\", \"DCCD\", \"\", \"\", \"\"},\n        {\"\", \"DDDC\", \"DADD\", \"DADC\", \"DDAD DCDD\", \"DDAC DCDC\", \"DAAD\", \"DAAC\", \"DDDA DDCD\", \"DDCC\", \"DADA DACD\", \"DACC\", \"DDAA DCDA DCCD\", \"DCCC\", \"DAAA\", \"\"},\n        {\"\", \"DDDC\", \"DADD\", \"DADC\", \"DDAD DCDD\", \"DDAC DCDC\", \"DAAD\", \"DAAC\", \"DDDA DDCD\", \"DDDB DDCC\", \"DADA DACD\", \"DADB DACC\", \"DDAA DCDA DCCD\", \"DDAB DCDB DCCC\", \"DAAA\", \"DAAB\"}\n      },\n      {\n        {\"\", \"\", \"DADD\", \"\", \"DDAD DCDD\", \"\", \"DAAD\", \"\", \"DDCD\", \"\", \"DACD\", \"\", \"DDBD DCCD\", \"\", \"DABD\", \"\"},\n        {\"\", \"DDDC\", \"DADD\", \"DADC\", \"DDAD DCDD\", \"DDAC DCDC\", \"DAAD\", \"DAAC\", \"DDDA DDCD\", \"DDCC\", \"DADA DACD\", \"DACC\", \"DDAA DDBD DCDA DCCD\", \"DDBC DCCC\", \"DAAA DABD\", \"DABC\"},\n        {\"\", \"DDDC\", \"DADD\", \"DADC\", \"DDAD DCDD\", \"DDAC DCDC\", \"DAAD\", \"DAAC\", \"DDDA DDCD\", \"DDDB DDCC\", \"DADA DACD\", \"DADB DACC\", \"DDAA DDBD DCDA DCCD\", \"DDAB DDBC DCDB DCCC\", \"DAAA DABD\", \"DAAB DABC\"}\n      }\n    },\n    {\n      {\n        {\"\", \"\", \"DADD\", \"\", \"DCDD\", \"\", \"DBDD\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\"},\n        {\"\", \"DDDC\", \"DADD\", \"DADC\", \"DCDD\", \"DCDC\", \"DBDD\", \"DBDC\", \"DDDA\", \"\", \"DADA\", \"\", \"DCDA\", \"\", \"DBDA\", \"\"},\n        {\"\", \"DDDC\", \"DADD\", \"DADC\", \"DCDD\", \"DCDC\", \"DBDD\", \"DBDC\", \"DDDA\", \"DDDB\", \"DADA\", \"DADB\", \"DCDA\", \"DCDB\", \"DBDA\", \"DBDB\"}\n      },\n      {\n        {\"\", \"\", \"DADD\", \"\", \"DDAD DCDD\", \"\", \"DAAD DBDD\", \"\", \"DDCD\", \"\", \"DACD\", \"\", \"DCCD\", \"\", \"DBCD\", \"\"},\n        {\"\", \"DDDC\", \"DADD\", \"DADC\", \"DDAD DCDD\", \"DDAC DCDC\", \"DAAD DBDD\", \"DAAC DBDC\", \"DDDA DDCD\", \"DDCC\", \"DADA DACD\", \"DACC\", \"DDAA DCDA DCCD\", \"DCCC\", \"DAAA DBDA DBCD\", \"DBCC\"},\n        {\"\", \"DDDC\", \"DADD\", \"DADC\", \"DDAD DCDD\", \"DDAC DCDC\", \"DAAD DBDD\", \"DAAC DBDC\", \"DDDA DDCD\", \"DDDB DDCC\", \"DADA DACD\", \"DADB DACC\", \"DDAA DCDA DCCD\", \"DDAB DCDB DCCC\", \"DAAA DBDA DBCD\", \"DAAB DBDB DBCC\"}\n      },\n      {\n        {\"\", \"\", \"DADD\", \"\", \"DDAD DCDD\", \"\", \"DAAD DBDD\", \"\", \"DDCD\", \"\", \"DACD\", \"\", \"DDBD DCCD\", \"\", \"DABD DBCD\", \"\"},\n        {\"\", \"DDDC\", \"DADD\", \"DADC\", \"DDAD DCDD\", \"DDAC DCDC\", \"DAAD DBDD\", \"DAAC DBDC\", \"DDDA DDCD\", \"DDCC\", \"DADA DACD\", \"DACC\", \"DDAA DDBD DCDA DCCD\", \"DDBC DCCC\", \"DAAA DABD DBDA DBCD\", \"DABC DBCC\"},\n        {\"\", \"DDDC\", \"DADD\", \"DADC\", \"DDAD DCDD\", \"DDAC DCDC\", \"DAAD DBDD\", \"DAAC DBDC\", \"DDDA DDCD\", \"DDDB DDCC\", \"DADA DACD\", \"DADB DACC\", \"DDAA DDBD DCDA DCCD\", \"DDAB DDBC DCDB DCCC\", \"DAAA DABD DBDA DBCD\", \"DAAB DABC DBDB DBCC\"}\n      }\n    }\n  },\n  {\n    {\n      {\n        {\"\", \"ADDD\", \"CDDD\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\"},\n        {\"\", \"DDDC ADDD\", \"CDDD\", \"CDDC\", \"\", \"\", \"\", \"\", \"DDDA\", \"ADDA\", \"CDDA\", \"\", \"\", \"\", \"\", \"\"},\n        {\"\", \"DDDC ADDD\", \"CDDD\", \"CDDC\", \"\", \"\", \"\", \"\", \"DDDA\", \"DDDB ADDA\", \"CDDA\", \"CDDB\", \"\", \"\", \"\", \"\"}\n      },\n      {\n        {\"\", \"ADDD\", \"CDDD\", \"\", \"DDAD\", \"ADAD\", \"CDAD\", \"\", \"DDCD\", \"ADCD\", \"CDCD\", \"\", \"\", \"\", \"\", \"\"},\n        {\"\", \"DDDC ADDD\", \"CDDD\", \"CDDC\", \"DDAD\", \"DDAC ADAD\", \"CDAD\", \"CDAC\", \"DDDA DDCD\", \"DDCC ADDA ADCD\", \"CDDA CDCD\", \"CDCC\", \"DDAA\", \"ADAA\", \"CDAA\", \"\"},\n        {\"\", \"DDDC ADDD\", \"CDDD\", \"CDDC\", \"DDAD\", \"DDAC ADAD\", \"CDAD\", \"CDAC\", \"DDDA DDCD\", \"DDDB DDCC ADDA ADCD\", \"CDDA CDCD\", \"CDDB CDCC\", \"DDAA\", \"DDAB ADAA\", \"CDAA\", \"CDAB\"}\n      },\n      {\n        {\"\", \"ADDD\", \"CDDD\", \"\", \"DDAD\", \"ADAD\", \"CDAD\", \"\", \"DDCD\", \"ADCD\", \"CDCD\", \"\", \"DDBD\", \"ADBD\", \"CDBD\", \"\"},\n        {\"\", \"DDDC ADDD\", \"CDDD\", \"CDDC\", \"DDAD\", \"DDAC ADAD\", \"CDAD\", \"CDAC\", \"DDDA DDCD\", \"DDCC ADDA ADCD\", \"CDDA CDCD\", \"CDCC\", \"DDAA DDBD\", \"DDBC ADAA ADBD\", \"CDAA CDBD\", \"CDBC\"},\n        {\"\", \"DDDC ADDD\", \"CDDD\", \"CDDC\", \"DDAD\", \"DDAC ADAD\", \"CDAD\", \"CDAC\", \"DDDA DDCD\", \"DDDB DDCC ADDA ADCD\", \"CDDA CDCD\", \"CDDB CDCC\", \"DDAA DDBD\", \"DDAB DDBC ADAA ADBD\", \"CDAA CDBD\", \"CDAB CDBC\"}\n      }\n    },\n    {\n      {\n        {\"\", \"ADDD\", \"DADD CDDD\", \"AADD\", \"DCDD\", \"ACDD\", \"CCDD\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\"},\n        {\"\", \"DDDC ADDD\", \"DADD CDDD\", \"DADC AADD CDDC\", \"DCDD\", \"DCDC ACDD\", \"CCDD\", \"CCDC\", \"DDDA\", \"ADDA\", \"DADA CDDA\", \"AADA\", \"DCDA\", \"ACDA\", \"CCDA\", \"\"},\n        {\"\", \"DDDC ADDD\", \"DADD CDDD\", \"DADC AADD CDDC\", \"DCDD\", \"DCDC ACDD\", \"CCDD\", \"CCDC\", \"DDDA\", \"DDDB ADDA\", \"DADA CDDA\", \"DADB AADA CDDB\", \"DCDA\", \"DCDB ACDA\", \"CCDA\", \"CCDB\"}\n      },\n      {\n        {\"\", \"ADDD\", \"DADD CDDD\", \"AADD\", \"DDAD DCDD\", \"ADAD ACDD\", \"DAAD CDAD CCDD\", \"AAAD\", \"DDCD\", \"ADCD\", \"DACD CDCD\", \"AACD\", \"DCCD\", \"ACCD\", \"CCCD\", \"\"},\n        {\"\", \"DDDC ADDD\", \"DADD CDDD\", \"DADC AADD CDDC\", \"DDAD DCDD\", \"DDAC DCDC ADAD ACDD\", \"DAAD CDAD CCDD\", \"DAAC AAAD CDAC CCDC\", \"DDDA DDCD\", \"DDCC ADDA ADCD\", \"DADA DACD CDDA CDCD\", \"DACC AADA AACD CDCC\", \"DDAA DCDA DCCD\", \"DCCC ADAA ACDA ACCD\", \"DAAA CDAA CCDA CCCD\", \"AAAA CCCC\"},\n        {\"\", \"DDDC ADDD\", \"DADD CDDD\", \"DADC AADD CDDC\", \"DDAD DCDD\", \"DDAC DCDC ADAD ACDD\", \"DAAD CDAD CCDD\", \"DAAC AAAD CDAC CCDC\", \"DDDA DDCD\", \"DDDB DDCC ADDA ADCD\", \"DADA DACD CDDA CDCD\", \"DADB DACC AADA AACD CDDB CDCC\", \"DDAA DCDA DCCD\", \"DDAB DCDB DCCC ADAA ACDA ACCD\", \"DAAA CDAA CCDA CCCD\", \"DAAB AAAA CDAB CCDB CCCC\"}\n      },\n      {\n        {\"\", \"ADDD\", \"DADD CDDD\", \"AADD\", \"DDAD DCDD\", \"ADAD ACDD\", \"DAAD CDAD CCDD\", \"AAAD\", \"DDCD\", \"ADCD\", \"DACD CDCD\", \"AACD\", \"DDBD DCCD\", \"ADBD ACCD\", \"DABD CDBD CCCD\", \"AABD\"},\n        {\"\", \"DDDC ADDD\", \"DADD CDDD\", \"DADC AADD CDDC\", \"DDAD DCDD\", \"DDAC DCDC ADAD ACDD\", \"DAAD CDAD CCDD\", \"DAAC AAAD CDAC CCDC\", \"DDDA DDCD\", \"DDCC ADDA ADCD\", \"DADA DACD CDDA CDCD\", \"DACC AADA AACD CDCC\", \"DDAA DDBD DCDA DCCD\", \"DDBC DCCC ADAA ADBD ACDA ACCD\", \"DAAA DABD CDAA CDBD CCDA CCCD\", \"DABC AAAA AABD CDBC CCCC\"},\n        {\"\", \"DDDC ADDD\", \"DADD CDDD\", \"DADC AADD CDDC\", \"DDAD DCDD\", \"DDAC DCDC ADAD ACDD\", \"DAAD CDAD CCDD\", \"DAAC AAAD CDAC CCDC\", \"DDDA DDCD\", \"DDDB DDCC ADDA ADCD\", \"DADA DACD CDDA CDCD\", \"DADB DACC AADA AACD CDDB CDCC\", \"DDAA DDBD DCDA DCCD\", \"DDAB DDBC DCDB DCCC ADAA ADBD ACDA ACCD\", \"DAAA DABD CDAA CDBD CCDA CCCD\", \"DAAB DABC AAAA AABD CDAB CDBC CCDB CCCC\"}\n      }\n    },\n    {\n      {\n        {\"\", \"ADDD\", \"DADD CDDD\", \"AADD\", \"DCDD\", \"ACDD\", \"DBDD CCDD\", \"ABDD\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\"},\n        {\"\", \"DDDC ADDD\", \"DADD CDDD\", \"DADC AADD CDDC\", \"DCDD\", \"DCDC ACDD\", \"DBDD CCDD\", \"DBDC ABDD CCDC\", \"DDDA\", \"ADDA\", \"DADA CDDA\", \"AADA\", \"DCDA\", \"ACDA\", \"DBDA CCDA\", \"ABDA\"},\n        {\"\", \"DDDC ADDD\", \"DADD CDDD\", \"DADC AADD CDDC\", \"DCDD\", \"DCDC ACDD\", \"DBDD CCDD\", \"DBDC ABDD CCDC\", \"DDDA\", \"DDDB ADDA\", \"DADA CDDA\", \"DADB AADA CDDB\", \"DCDA\", \"DCDB ACDA\", \"DBDA CCDA\", \"DBDB ABDA CCDB\"}\n      },\n      {\n        {\"\", \"ADDD\", \"DADD CDDD\", \"AADD\", \"DDAD DCDD\", \"ADAD ACDD\", \"DAAD DBDD CDAD CCDD\", \"AAAD ABDD\", \"DDCD\", \"ADCD\", \"DACD CDCD\", \"AACD\", \"DCCD\", \"ACCD\", \"DBCD CCCD\", \"ABCD\"},\n        {\"\", \"DDDC ADDD\", \"DADD CDDD\", \"DADC AADD CDDC\", \"DDAD DCDD\", \"DDAC DCDC ADAD ACDD\", \"DAAD DBDD CDAD CCDD\", \"DAAC DBDC AAAD ABDD CDAC CCDC\", \"DDDA DDCD\", \"DDCC ADDA ADCD\", \"DADA DACD CDDA CDCD\", \"DACC AADA AACD CDCC\", \"DDAA DCDA DCCD\", \"DCCC ADAA ACDA ACCD\", \"DAAA DBDA DBCD CDAA CCDA CCCD\", \"DBCC AAAA ABDA ABCD CCCC\"},\n        {\"\", \"DDDC ADDD\", \"DADD CDDD\", \"DADC AADD CDDC\", \"DDAD DCDD\", \"DDAC DCDC ADAD ACDD\", \"DAAD DBDD CDAD CCDD\", \"DAAC DBDC AAAD ABDD CDAC CCDC\", \"DDDA DDCD\", \"DDDB DDCC ADDA ADCD\", \"DADA DACD CDDA CDCD\", \"DADB DACC AADA AACD CDDB CDCC\", \"DDAA DCDA DCCD\", \"DDAB DCDB DCCC ADAA ACDA ACCD\", \"DAAA DBDA DBCD CDAA CCDA CCCD\", \"DAAB DBDB DBCC AAAA ABDA ABCD CDAB CCDB CCCC\"}\n      },\n      {\n        {\"\", \"ADDD\", \"DADD CDDD\", \"AADD\", \"DDAD DCDD\", \"ADAD ACDD\", \"DAAD DBDD CDAD CCDD\", \"AAAD ABDD\", \"DDCD\", \"ADCD\", \"DACD CDCD\", \"AACD\", \"DDBD DCCD\", \"ADBD ACCD\", \"DABD DBCD CDBD CCCD\", \"AABD ABCD\"},\n        {\"\", \"DDDC ADDD\", \"DADD CDDD\", \"DADC AADD CDDC\", \"DDAD DCDD\", \"DDAC DCDC ADAD ACDD\", \"DAAD DBDD CDAD CCDD\", \"DAAC DBDC AAAD ABDD CDAC CCDC\", \"DDDA DDCD\", \"DDCC ADDA ADCD\", \"DADA DACD CDDA CDCD\", \"DACC AADA AACD CDCC\", \"DDAA DDBD DCDA DCCD\", \"DDBC DCCC ADAA ADBD ACDA ACCD\", \"DAAA DABD DBDA DBCD CDAA CDBD CCDA CCCD\", \"DABC DBCC AAAA AABD ABDA ABCD CDBC CCCC\"},\n        {\"\", \"DDDC ADDD\", \"DADD CDDD\", \"DADC AADD CDDC\", \"DDAD DCDD\", \"DDAC DCDC ADAD ACDD\", \"DAAD DBDD CDAD CCDD\", \"DAAC DBDC AAAD ABDD CDAC CCDC\", \"DDDA DDCD\", \"DDDB DDCC ADDA ADCD\", \"DADA DACD CDDA CDCD\", \"DADB DACC AADA AACD CDDB CDCC\", \"DDAA DDBD DCDA DCCD\", \"DDAB DDBC DCDB DCCC ADAA ADBD ACDA ACCD\", \"DAAA DABD DBDA DBCD CDAA CDBD CCDA CCCD\", \"DAAB DABC DBDB DBCC AAAA AABD ABDA ABCD CDAB CDBC CCDB CCCC\"}\n      }\n    }\n  },\n  {\n    {\n      {\n        {\"\", \"ADDD\", \"CDDD\", \"BDDD\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\"},\n        {\"\", \"DDDC ADDD\", \"CDDD\", \"BDDD CDDC\", \"\", \"\", \"\", \"\", \"DDDA\", \"ADDA\", \"CDDA\", \"BDDA\", \"\", \"\", \"\", \"\"},\n        {\"\", \"DDDC ADDD\", \"CDDD\", \"BDDD CDDC\", \"\", \"\", \"\", \"\", \"DDDA\", \"DDDB ADDA\", \"CDDA\", \"BDDA CDDB\", \"\", \"\", \"\", \"\"}\n      },\n      {\n        {\"\", \"ADDD\", \"CDDD\", \"BDDD\", \"DDAD\", \"ADAD\", \"CDAD\", \"BDAD\", \"DDCD\", \"ADCD\", \"CDCD\", \"BDCD\", \"\", \"\", \"\", \"\"},\n        {\"\", \"DDDC ADDD\", \"CDDD\", \"BDDD CDDC\", \"DDAD\", \"DDAC ADAD\", \"CDAD\", \"BDAD CDAC\", \"DDDA DDCD\", \"DDCC ADDA ADCD\", \"CDDA CDCD\", \"BDDA BDCD CDCC\", \"DDAA\", \"ADAA\", \"CDAA\", \"BDAA\"},\n        {\"\", \"DDDC ADDD\", \"CDDD\", \"BDDD CDDC\", \"DDAD\", \"DDAC ADAD\", \"CDAD\", \"BDAD CDAC\", \"DDDA DDCD\", \"DDDB DDCC ADDA ADCD\", \"CDDA CDCD\", \"BDDA BDCD CDDB CDCC\", \"DDAA\", \"DDAB ADAA\", \"CDAA\", \"BDAA CDAB\"}\n      },\n      {\n        {\"\", \"ADDD\", \"CDDD\", \"BDDD\", \"DDAD\", \"ADAD\", \"CDAD\", \"BDAD\", \"DDCD\", \"ADCD\", \"CDCD\", \"BDCD\", \"DDBD\", \"ADBD\", \"CDBD\", \"BDBD\"},\n        {\"\", \"DDDC ADDD\", \"CDDD\", \"BDDD CDDC\", \"DDAD\", \"DDAC ADAD\", \"CDAD\", \"BDAD CDAC\", \"DDDA DDCD\", \"DDCC ADDA ADCD\", \"CDDA CDCD\", \"BDDA BDCD CDCC\", \"DDAA DDBD\", \"DDBC ADAA ADBD\", \"CDAA CDBD\", \"BDAA BDBD CDBC\"},\n        {\"\", \"DDDC ADDD\", \"CDDD\", \"BDDD CDDC\", \"DDAD\", \"DDAC ADAD\", \"CDAD\", \"BDAD CDAC\", \"DDDA DDCD\", \"DDDB DDCC ADDA ADCD\", \"CDDA CDCD\", \"BDDA BDCD CDDB CDCC\", \"DDAA DDBD\", \"DDAB DDBC ADAA ADBD\", \"CDAA CDBD\", \"BDAA BDBD CDAB CDBC\"}\n      }\n    },\n    {\n      {\n        {\"\", \"ADDD\", \"DADD CDDD\", \"AADD BDDD\", \"DCDD\", \"ACDD\", \"CCDD\", \"BCDD\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\"},\n        {\"\", \"DDDC ADDD\", \"DADD CDDD\", \"DADC AADD BDDD CDDC\", \"DCDD\", \"DCDC ACDD\", \"CCDD\", \"BCDD CCDC\", \"DDDA\", \"ADDA\", \"DADA CDDA\", \"AADA BDDA\", \"DCDA\", \"ACDA\", \"CCDA\", \"BCDA\"},\n        {\"\", \"DDDC ADDD\", \"DADD CDDD\", \"DADC AADD BDDD CDDC\", \"DCDD\", \"DCDC ACDD\", \"CCDD\", \"BCDD CCDC\", \"DDDA\", \"DDDB ADDA\", \"DADA CDDA\", \"DADB AADA BDDA CDDB\", \"DCDA\", \"DCDB ACDA\", \"CCDA\", \"BCDA CCDB\"}\n      },\n      {\n        {\"\", \"ADDD\", \"DADD CDDD\", \"AADD BDDD\", \"DDAD DCDD\", \"ADAD ACDD\", \"DAAD CDAD CCDD\", \"AAAD BDAD BCDD\", \"DDCD\", \"ADCD\", \"DACD CDCD\", \"AACD BDCD\", \"DCCD\", \"ACCD\", \"CCCD\", \"BCCD\"},\n        {\"\", \"DDDC ADDD\", \"DADD CDDD\", \"DADC AADD BDDD CDDC\", \"DDAD DCDD\", \"DDAC DCDC ADAD ACDD\", \"DAAD CDAD CCDD\", \"DAAC AAAD BDAD BCDD CDAC CCDC\", \"DDDA DDCD\", \"DDCC ADDA ADCD\", \"DADA DACD CDDA CDCD\", \"DACC AADA AACD BDDA BDCD CDCC\", \"DDAA DCDA DCCD\", \"DCCC ADAA ACDA ACCD\", \"DAAA CDAA CCDA CCCD\", \"AAAA BDAA BCDA BCCD CCCC\"},\n        {\"\", \"DDDC ADDD\", \"DADD CDDD\", \"DADC AADD BDDD CDDC\", \"DDAD DCDD\", \"DDAC DCDC ADAD ACDD\", \"DAAD CDAD CCDD\", \"DAAC AAAD BDAD BCDD CDAC CCDC\", \"DDDA DDCD\", \"DDDB DDCC ADDA ADCD\", \"DADA DACD CDDA CDCD\", \"DADB DACC AADA AACD BDDA BDCD CDDB CDCC\", \"DDAA DCDA DCCD\", \"DDAB DCDB DCCC ADAA ACDA ACCD\", \"DAAA CDAA CCDA CCCD\", \"DAAB AAAA BDAA BCDA BCCD CDAB CCDB CCCC\"}\n      },\n      {\n        {\"\", \"ADDD\", \"DADD CDDD\", \"AADD BDDD\", \"DDAD DCDD\", \"ADAD ACDD\", \"DAAD CDAD CCDD\", \"AAAD BDAD BCDD\", \"DDCD\", \"ADCD\", \"DACD CDCD\", \"AACD BDCD\", \"DDBD DCCD\", \"ADBD ACCD\", \"DABD CDBD CCCD\", \"AABD BDBD BCCD\"},\n        {\"\", \"DDDC ADDD\", \"DADD CDDD\", \"DADC AADD BDDD CDDC\", \"DDAD DCDD\", \"DDAC DCDC ADAD ACDD\", \"DAAD CDAD CCDD\", \"DAAC AAAD BDAD BCDD CDAC CCDC\", \"DDDA DDCD\", \"DDCC ADDA ADCD\", \"DADA DACD CDDA CDCD\", \"DACC AADA AACD BDDA BDCD CDCC\", \"DDAA DDBD DCDA DCCD\", \"DDBC DCCC ADAA ADBD ACDA ACCD\", \"DAAA DABD CDAA CDBD CCDA CCCD\", \"DABC AAAA AABD BDAA BDBD BCDA BCCD CDBC CCCC\"},\n        {\"\", \"DDDC ADDD\", \"DADD CDDD\", \"DADC AADD BDDD CDDC\", \"DDAD DCDD\", \"DDAC DCDC ADAD ACDD\", \"DAAD CDAD CCDD\", \"DAAC AAAD BDAD BCDD CDAC CCDC\", \"DDDA DDCD\", \"DDDB DDCC ADDA ADCD\", \"DADA DACD CDDA CDCD\", \"DADB DACC AADA AACD BDDA BDCD CDDB CDCC\", \"DDAA DDBD DCDA DCCD\", \"DDAB DDBC DCDB DCCC ADAA ADBD ACDA ACCD\", \"DAAA DABD CDAA CDBD CCDA CCCD\", \"DAAB DABC AAAA AABD BDAA BDBD BCDA BCCD CDAB CDBC CCDB CCCC\"}\n      }\n    },\n    {\n      {\n        {\"\", \"ADDD\", \"DADD CDDD\", \"AADD BDDD\", \"DCDD\", \"ACDD\", \"DBDD CCDD\", \"ABDD BCDD\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\"},\n        {\"\", \"DDDC ADDD\", \"DADD CDDD\", \"DADC AADD BDDD CDDC\", \"DCDD\", \"DCDC ACDD\", \"DBDD CCDD\", \"DBDC ABDD BCDD CCDC\", \"DDDA\", \"ADDA\", \"DADA CDDA\", \"AADA BDDA\", \"DCDA\", \"ACDA\", \"DBDA CCDA\", \"ABDA BCDA\"},\n        {\"\", \"DDDC ADDD\", \"DADD CDDD\", \"DADC AADD BDDD CDDC\", \"DCDD\", \"DCDC ACDD\", \"DBDD CCDD\", \"DBDC ABDD BCDD CCDC\", \"DDDA\", \"DDDB ADDA\", \"DADA CDDA\", \"DADB AADA BDDA CDDB\", \"DCDA\", \"DCDB ACDA\", \"DBDA CCDA\", \"DBDB ABDA BCDA CCDB\"}\n      },\n      {\n        {\"\", \"ADDD\", \"DADD CDDD\", \"AADD BDDD\", \"DDAD DCDD\", \"ADAD ACDD\", \"DAAD DBDD CDAD CCDD\", \"AAAD ABDD BDAD BCDD\", \"DDCD\", \"ADCD\", \"DACD CDCD\", \"AACD BDCD\", \"DCCD\", \"ACCD\", \"DBCD CCCD\", \"ABCD BCCD\"},\n        {\"\", \"DDDC ADDD\", \"DADD CDDD\", \"DADC AADD BDDD CDDC\", \"DDAD DCDD\", \"DDAC DCDC ADAD ACDD\", \"DAAD DBDD CDAD CCDD\", \"DAAC DBDC AAAD ABDD BDAD BCDD CDAC CCDC\", \"DDDA DDCD\", \"DDCC ADDA ADCD\", \"DADA DACD CDDA CDCD\", \"DACC AADA AACD BDDA BDCD CDCC\", \"DDAA DCDA DCCD\", \"DCCC ADAA ACDA ACCD\", \"DAAA DBDA DBCD CDAA CCDA CCCD\", \"DBCC AAAA ABDA ABCD BDAA BCDA BCCD CCCC\"},\n        {\"\", \"DDDC ADDD\", \"DADD CDDD\", \"DADC AADD BDDD CDDC\", \"DDAD DCDD\", \"DDAC DCDC ADAD ACDD\", \"DAAD DBDD CDAD CCDD\", \"DAAC DBDC AAAD ABDD BDAD BCDD CDAC CCDC\", \"DDDA DDCD\", \"DDDB DDCC ADDA ADCD\", \"DADA DACD CDDA CDCD\", \"DADB DACC AADA AACD BDDA BDCD CDDB CDCC\", \"DDAA DCDA DCCD\", \"DDAB DCDB DCCC ADAA ACDA ACCD\", \"DAAA DBDA DBCD CDAA CCDA CCCD\", \"DAAB DBDB DBCC AAAA ABDA ABCD BDAA BCDA BCCD CDAB CCDB CCCC\"}\n      },\n      {\n        {\"\", \"ADDD\", \"DADD CDDD\", \"AADD BDDD\", \"DDAD DCDD\", \"ADAD ACDD\", \"DAAD DBDD CDAD CCDD\", \"AAAD ABDD BDAD BCDD\", \"DDCD\", \"ADCD\", \"DACD CDCD\", \"AACD BDCD\", \"DDBD DCCD\", \"ADBD ACCD\", \"DABD DBCD CDBD CCCD\", \"AABD ABCD BDBD BCCD\"},\n        {\"\", \"DDDC ADDD\", \"DADD CDDD\", \"DADC AADD BDDD CDDC\", \"DDAD DCDD\", \"DDAC DCDC ADAD ACDD\", \"DAAD DBDD CDAD CCDD\", \"DAAC DBDC AAAD ABDD BDAD BCDD CDAC CCDC\", \"DDDA DDCD\", \"DDCC ADDA ADCD\", \"DADA DACD CDDA CDCD\", \"DACC AADA AACD BDDA BDCD CDCC\", \"DDAA DDBD DCDA DCCD\", \"DDBC DCCC ADAA ADBD ACDA ACCD\", \"DAAA DABD DBDA DBCD CDAA CDBD CCDA CCCD\", \"DABC DBCC AAAA AABD ABDA ABCD BDAA BDBD BCDA BCCD CDBC CCCC\"},\n        {\"\", \"DDDC ADDD\", \"DADD CDDD\", \"DADC AADD BDDD CDDC\", \"DDAD DCDD\", \"DDAC DCDC ADAD ACDD\", \"DAAD DBDD CDAD CCDD\", \"DAAC DBDC AAAD ABDD BDAD BCDD CDAC CCDC\", \"DDDA DDCD\", \"DDDB DDCC ADDA ADCD\", \"DADA DACD CDDA CDCD\", \"DADB DACC AADA AACD BDDA BDCD CDDB CDCC\", \"DDAA DDBD DCDA DCCD\", \"DDAB DDBC DCDB DCCC ADAA ADBD ACDA ACCD\", \"DAAA DABD DBDA DBCD CDAA CDBD CCDA CCCD\", \"DAAB DABC DBDB DBCC AAAA AABD ABDA ABCD BDAA BDBD BCDA BCCD CDAB CDBC CCDB CCCC\"}\n      }\n    }\n  }\n};\n\nvector<string> dialect::lookupQuadActions(size_t p, size_t q, size_t r, size_t s, size_t c) {\n    string words = quadActionLookup[p][q][r][s][c];\n    // Thanks to https://stackoverflow.com/a/237280\n    istringstream iss(words);\n    vector<string> tokens{istream_iterator<string>{iss}, istream_iterator<string>{}};\n    //\n    return tokens;\n}\n"
  },
  {
    "path": "cola/libdialect/quadaction.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libdialect - A library for computing DiAlEcT layouts:\n *                 D = Decompose/Distribute\n *                 A = Arrange\n *                 E = Expand/Emend\n *                 T = Transform\n *\n * Copyright (C) 2018  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n * Author(s):   Steve Kieffer   <http://skieffer.info>\n*/\n\n#include <string>\n#include <algorithm>\n#include <vector>\n#include <memory>\n\n#include \"libvpsc/assertions.h\"\n#include \"libdialect/util.h\"\n#include \"libdialect/quadaction.h\"\n\nusing std::make_shared;\nusing std::vector;\nusing std::string;\nusing std::sort;\n\nusing namespace dialect;\n\nNbr::Nbr(id_type id, double dx, double dy) :\n    id(id), x(dx), y(dy) {\n    // At least one of dx and dy must be nonzero, since otherwise\n    // this Nbr would sit right atop the centre node, which is not\n    // allowed.\n    COLA_ASSERT(!(dx==0 && dy==0));\n}\n\nunsigned Nbr::octalCode() const {\n    // Semiaxes 0,1,2,3 get octal codes 0,2,4,6;\n    // Quadrants 0,1,2,3 get octal codes 1,3,5,7.\n    return (\n        x > 0 ? (y > 0 ? 1 : y == 0 ? 0 : 7) :\n        x < 0 ? (y > 0 ? 3 : y == 0 ? 4 : 5) :\n                (y > 0 ? 2 : 6)\n    );\n}\n\ndouble Nbr::deflection() const {\n    double x2 = x*x, y2 = y*y, l2 = x2 + y2;\n    unsigned o = octalCode();\n    // If we are in the clopen first or third quadrants, then the\n    // squared sign of the angle from the start of the quadrant is\n    // y^2 over radius^2; else the numerator is x^2 instead.\n    return (o==0 || o==1 || o==4 || o==5) ? y2/l2 : x2/l2;\n}\n\nsize_t Assignment::cardinality() const {\n    // To compute the cardinality of the Assignment we initialise\n    // a counter to zero, and increment for each non null ptr.\n    size_t c = 0;\n    for (auto p : semis) {\n        if (p != nullptr) {\n            ++c;\n        }\n    }\n    return c;\n}\n\nAssignment Assignment::makeUnion(const Assignment &other) const {\n    // If any entry in this Assignment is null, copy the entry from the other;\n    // else copy the entry from this.\n    // Meanwhile, costs sum.\n    return Assignment(\n        {\n            semis[0] == nullptr ? other.semis[0] : semis[0],\n            semis[1] == nullptr ? other.semis[1] : semis[1],\n            semis[2] == nullptr ? other.semis[2] : semis[2],\n            semis[3] == nullptr ? other.semis[3] : semis[3]\n        },\n        cost + other.cost\n    );\n}\n\nstring Assignment::toString() const {\n    // E.g. if Nbrs 3, 7, 8 are assigned to semiaxes E, S, N resp.,\n    // represent this as \"3 7 - 8\".\n    string s;\n    for (unsigned i = 0; i < 4; ++i) {\n        if (i > 0) s += \" \";\n        if (semis[i] == nullptr) {\n            s += \"-\";\n        } else {\n            s += string_format(\"%d\", semis[i]->id);\n        }\n    }\n    return s;\n}\n\nQuad::Quad(unsigned int num) : num(num) {\n    // The only valid num's for quadrants are 0, 1, 2, 3.\n    COLA_ASSERT(num <= 3);\n}\n\nvoid Quad::sortAndComputeCosts() {\n    // If we have no Nbrs, then there's no sorting, and no cost.\n    if (nbrs.empty()) {\n        ACost = 0;\n        CCost = 0;\n        return;\n    }\n    // Sort the Nbrs by deflection\n    sort(nbrs.begin(), nbrs.end(),\n        [](const Nbr_SP &a, const Nbr_SP &b) -> bool {\n            return a->deflection() < b->deflection();\n        }\n    );\n    // Anticlockwise assignment cost equals deflection of first Nbr\n    ACost = nbrs[0]->deflection();\n    // Clockwise assignment cost equals 1 - deflection of last Nbr\n    CCost = 1 - nbrs[size()-1]->deflection();\n}\n\nAssignment Quad::constructAssignmentForAction(char action) const {\n    Nbrs semis{nullptr, nullptr, nullptr, nullptr};\n    double cost = 0;\n    // If doing anticlockwise assignment, add ACost, and assign first Nbr to\n    // semiaxis of same number as this quadrant.\n    if (action == 'A' || action == 'B') {\n        semis[num] = nbrs[0];\n        cost += ACost;\n    }\n    // If doing clockwise assignment, add CCost, and assign last Nbr to semiaxis\n    // of number one greater than this quadrant, mod 4.\n    if (action == 'C' || action == 'B') {\n        semis[(num + 1) % 4] = nbrs[size()-1];\n        cost += CCost;\n    }\n    return Assignment(semis, cost);\n}\n\nArrangement::Arrangement(Nbrs nbrs) :\n    nbrs(nbrs),\n    semis({nullptr, nullptr, nullptr, nullptr}),\n    quads({make_shared<Quad>(0), make_shared<Quad>(1), make_shared<Quad>(2), make_shared<Quad>(3)})\n{\n    // Assign Nbrs to semis and quads based on their octals.\n    for (auto p : nbrs) {\n        unsigned o = p->octalCode();\n        if (o % 2 == 0) {\n            unsigned s = o/2;\n            semis[s] = p;\n        } else {\n            unsigned q = (o-1)/2;\n            quads[q]->addNbr(p);\n        }\n    }\n    // Now all Quads can sort and compute costs.\n    for (auto p : quads) {\n        p->sortAndComputeCosts();\n    }\n}\n\nvector<unsigned> Arrangement::vacancy() const {\n    // for each semiaxis, write 0 if vacant, 1 if occupied\n    return {\n        semis[0] == nullptr ? (unsigned) 0 : (unsigned) 1,\n        semis[1] == nullptr ? (unsigned) 0 : (unsigned) 1,\n        semis[2] == nullptr ? (unsigned) 0 : (unsigned) 1,\n        semis[3] == nullptr ? (unsigned) 0 : (unsigned) 1,\n    };\n}\n\nvector<unsigned> Arrangement::dist() const {\n    // write the size of each quad\n    return {\n        (unsigned) quads[0]->size(), (unsigned) quads[1]->size(),\n        (unsigned) quads[2]->size(), (unsigned) quads[3]->size()\n    };\n}\n\nvector<unsigned> Arrangement::rDist() const {\n    // get basic distribution vector, then reduce\n    vector<unsigned> d = dist();\n    return {\n        d[0] > 2 ? (unsigned) 2 : d[0],\n        d[1] > 2 ? (unsigned) 2 : d[1],\n        d[2] > 2 ? (unsigned) 2 : d[2],\n        d[3] > 2 ? (unsigned) 2 : d[3]\n    };\n}\n\nAssignment_SP Arrangement::getBasicAssignment() const {\n    // the basic assignment is \"as is\", i.e. with existing occupations,\n    // and no cost\n    return make_shared<Assignment>(semis, 0);\n}\n\nAssignment_SP Arrangement::getAssignmentForQuadAction(std::string quadAction) const {\n    // Start with the basic assignment.\n    Assignment_SP a = getBasicAssignment();\n    // Then in each quadrant, try applying the corresponding character out of the\n    // quad action string.\n    // Unite the results.\n    for (unsigned i = 0; i < 4; ++i) {\n        Assignment aq = quads[i]->constructAssignmentForAction(quadAction[i]);\n        a = make_shared<Assignment>(a->makeUnion(aq));\n    }\n    return a;\n}\n\nAssignments Arrangement::computeNAssignments(unsigned N) const {\n    Assignments asgns;\n    // There are only four compass directions, so N cannot exceed 4.\n    if (N > 4) return asgns;\n    // We need to have at least as many neighbours as the number of\n    // assignments we are asked to make.\n    if (nbrs.size() < N) return asgns;\n    // Some semiaxes may already have Nbrs assigned to them.\n    // Let n be the number of semiaxes waiting to be filled before\n    // we have an N-assignment.\n    vector<unsigned> vac = vacancy();\n    int n = N;\n    for (unsigned i = 0; i < 4; ++i) n -= vac[i];\n    // If n < 0 then we already have /more/ than N semiaxes with neighbours\n    // on them, so an N-assignment, strictly speaking, is not possible.\n    if (n < 0) return asgns;\n    // If n == 0, then there is only one possible N-assignment, namely,\n    // the one that is already there.\n    if (n == 0) {\n        asgns.push_back(getBasicAssignment());\n        return asgns;\n    }\n    // Otherwise n > 0.\n    // Let f be the number of \"free\" Nbrs, i.e. those in the interiors\n    // of the quadrants.\n    int f = 0;\n    for (unsigned i = 0; i < 4; ++i) f += quads[i]->size();\n    // If f < n, then there are n > 0 semiaxes waiting to be filled before\n    // we have an N-assignment, but this node has fewer than n free nbrs,\n    // so there is no way to make an N-assignment.\n    if (f < n) return asgns;\n    // Otherwise, there are n > 0 semiaxes waiting to be filled before we\n    // have an N-assignment, and this node has at least n free nbrs, so it\n    // is potentially possible to make an N-assignment.\n    // Get the reduced distribution.\n    vector<unsigned> d = rDist();\n    // Get the semiaxis codes with the right cardinality.\n    vector<unsigned> codes = SEMIAXIS_SETS_BY_CARDINALITY[n];\n    // Make binary code for the vacancy vector.\n    unsigned a = 1;\n    unsigned vacCode = 0;\n    for (unsigned i = 0; i < 4; ++i) {\n        vacCode += (1-vac[i])*a;\n        a *= 2;\n    }\n    // Iterate over the codes.\n    for (unsigned c : codes) {\n        // If it's not a subset of the vacant semiaxes, then skip it.\n        if ((c & vacCode) != c) continue;\n        // Otherwise look up the quad actions.\n        vector<string> quadActions = lookupQuadActions(d[0], d[1], d[2], d[3], c);\n        // For each action, record an assignment.\n        for (string qa : quadActions) {\n            asgns.push_back(getAssignmentForQuadAction(qa));\n        }\n    }\n    // Sort the assignments by cost.\n    sort(asgns.begin(), asgns.end(),\n        [](const Assignment_SP &a, const Assignment_SP &b) -> bool {\n            return a->cost < b->cost;\n        }\n    );\n    return asgns;\n}\n\nAssignments Arrangement::computeAllAssignments() const {\n    // Concatenate the results for N-assignments with N equal to 4 first,\n    // then 3, 2, and 1 in that order.\n    Assignments a4 = computeNAssignments(4);\n    Assignments a3 = computeNAssignments(3);\n    Assignments a2 = computeNAssignments(2);\n    Assignments a1 = computeNAssignments(1);\n    Assignments a;\n    a.reserve(a4.size()+a3.size()+a2.size()+a1.size());\n    a.insert(a.end(), a4.cbegin(), a4.cend());\n    a.insert(a.end(), a3.cbegin(), a3.cend());\n    a.insert(a.end(), a2.cbegin(), a2.cend());\n    a.insert(a.end(), a1.cbegin(), a1.cend());\n    return a;\n}\n"
  },
  {
    "path": "cola/libdialect/quadaction.h",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libdialect - A library for computing DiAlEcT layouts:\n *                 D = Decompose/Distribute\n *                 A = Arrange\n *                 E = Expand/Emend\n *                 T = Transform\n *\n * Copyright (C) 2018  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n * Author(s):   Steve Kieffer   <http://skieffer.info>\n*/\n\n#ifndef DIALECT_QUADACTION_H\n#define DIALECT_QUADACTION_H\n\n#include <string>\n#include <vector>\n\n#include \"libdialect/commontypes.h\"\n\nnamespace dialect {\n\n//! @brief  Look up legal quad actions\n//!\n//! @param[in]  p  = 0, 1, or 2, indicating whether there are 0, 1, or >= 2\n//!                nodes in the first quadrant\n//! @param[in]  q  like p, only for the second quadrant\n//! @param[in]  r  like p, only for the third quadrant\n//! @param[in]  s  like p, only for the fourth quadrant\n//! @param[in]  c  binary coded representation of which semiaxes are to be used:\n//!                 1's bit: 1 if EAST is to be used; else 0\n//!                 2's bit: 1 if SOUTH is to be used; else 0\n//!                 4's bit: 1 if WEST is to be used; else 0\n//!                 8's bit: 1 if NORTH is to be used; else 0\n//!\n//! @return  vector of strings, naming the legal quad actions\n//!\nstd::vector<std::string> lookupQuadActions(size_t p, size_t q, size_t r, size_t s, size_t c);\n\n//! Using the binary coding for vacant semiaxes described in the doctext for\n//! the lookupQuadActions function, each integer 0, 1, ..., 15 describes a subset\n//! of the set of all semiaxes. It is useful to have these subset codes sorted\n//! by cardinality of the set.\nconst std::vector<unsigned> SEMIAXIS_SETS_BY_CARDINALITY[5] = {\n    {0},\n    {1, 2, 4, 8},\n    {3, 5, 9, 6, 10, 12},\n    {14, 13, 11, 7},\n    {15}\n};\n\n//! @brief  Represents a neighbouring node to a central node.\nstruct Nbr {\n\n    //! @brief  Standard constructor.\n    //!\n    //! @param[in]  id  a unique identifier; useful for associating an\n    //!             instance with the node it represents\n    //! @param[in]  dx  x-displacement of this Nbr relative to central node\n    //! @param[in]  dy  y-displacement of this Nbr relative to central node\n    Nbr(id_type id, double dx, double dy);\n\n    //! @return  A code number from 0 to 7, indicating where this neighbour\n    //!         lies relative to the central node:\n    //!             Semiaxes 0,1,2,3 get octal codes 0,2,4,6;\n    //!             Quadrants 0,1,2,3 get octal codes 1,3,5,7.\n    unsigned octalCode(void) const;\n\n    //! @brief  A measure of how far into its quadrant this nbr lies, in the\n    //!         clockwise direction.\n    //!\n    //! @return If this nbr lies in quadrant n or on semiaxis n, then return\n    //!         the squared sine of the angle that this nbr makes with semiaxis n.\n    double deflection(void) const;\n\n    id_type id;\n    double x;\n    double y;\n};\n\n//! @brief  Represents an assignment of nbrs to semiaxes, and records the\n//!         cost of this assignment.\nstruct Assignment {\n\n    //! @brief  Standard constructor.\n    //!\n    //! @param[in]  semis  vector of four shared ptrs to Nbrs, representing\n    //!                    the Nbrs assigned to the four semiaxes, starting\n    //!                    with East and proceding clockwise. Should be equal\n    //!                    to nullptr if no Nbr is present on a given semiaxis.\n    //! @param[in]  cost  the cost of this assignment, which measures the sum\n    //!                   of angular displacements of Nbrs from their original\n    //!                   positions\n    Assignment(const Nbrs &semis, double cost) : semis(semis), cost(cost) {}\n\n    //! @brief  Default constructor.\n    //!\n    //! Constructs an \"empty\" Assignment, with no Nbrs and zero cost.\n    Assignment(void) : semis({nullptr, nullptr, nullptr, nullptr}), cost(0) {}\n\n    //! @brief  Return the \"cardinality\" of this Assignment, i.e. the number\n    //!         of Nbrs assigned to semiaxes.\n    size_t cardinality(void) const;\n\n    //! @brief  Create union of two Assignments.\n    //!\n    //! @return  A new Assignment representing the union of this one with\n    //!          the other.\n    //!\n    //! @note  This function assumes you never try to put more than one\n    //!        Nbr on a given semiaxis. If you do, you will get an incorrect\n    //!        result; an exception will not be raised.\n    Assignment makeUnion(const Assignment &other) const;\n\n    //! @brief  Write a string representation, listing the id of the Nbr\n    //!         assigned to each semiaxis. For example if Nbrs 3, 7, 8 are\n    //!         assigned to semiaxes E, S, N resp., represent this as \"3 7 - 8\".\n    //!\n    //! @return  string representation.\n    std::string toString(void) const;\n\n    Nbrs semis;\n    double cost;\n};\n\n//! @brief  Represents a quadrant, relative to a central node.\nstruct Quad {\n\n    //! @brief  Standard constructor.\n    //!\n    //! @param[in]  num  The number of this quadrant in {0, 1, 2, 3}\n    Quad(unsigned int num);\n\n    //! @brief  Add a neighbour.\n    void addNbr(const Nbr_SP &nbr) { nbrs.push_back(nbr); }\n\n    //! @brief  Say how many Nbrs are in this quadrant.\n    size_t size(void) const { return nbrs.size(); }\n\n    //! @brief  To be called after all nbrs have been added.\n    //!         Sorts the nbrs into clockwise order, and then computes\n    //!         and stores the costs associated with the clockwise and\n    //!         anticlockwise actions.\n    void sortAndComputeCosts(void);\n\n    //! @brief  Construct an Assignment indicating which Nbr(s) were assigned\n    //!         to which semiaxes, and representing the cost.\n    //!\n    //! @param[in]  action  an action code letter, in {A, B, C, D}:\n    //!                         A: Anticlockwise\n    //!                         B: Both\n    //!                         C: Clockwise\n    //!                         D: Do nothing\n    //!\n    //! @return  the Assignment\n    Assignment constructAssignmentForAction(char action) const;\n\n    //! The number of this quadrant, 0, 1, 2, or 3\n    unsigned num;\n    //! The Nbrs that lie in this quadrant\n    Nbrs nbrs;\n    //! Cost for anticlockwise action\n    double ACost;\n    //! Cost for clockwise action\n    double CCost;\n};\n\n//! @brief  Represents the arrangement of all Nbrs around a centre node.\nstruct Arrangement {\n\n    //! @brief  Standard constructor.\n    //!\n    //! @param[in]  nbrs  all the Nbrs of the (implied) centre node\n    Arrangement(Nbrs nbrs);\n\n    //! @brief  Get the \"vacancy vector\" for this Arrangement\n    //!\n    //! @return  vector of 0's and 1's, where 0 means the corresponding semiaxis\n    //!          is vacant, and 1 means it is occupied\n    std::vector<unsigned> vacancy(void) const;\n\n    //! @brief  Get the \"distribution vector\" for this Arrangement\n    //!\n    //! @return  vector telling how many Nbrs are in each quadrant\n    std::vector<unsigned> dist(void) const;\n\n    //! @brief  Get the \"reduced distribution vector\" for this Arrangement\n    //!\n    //! @return  vector of 0's, 1's, and 2's telling, respectively, whether there\n    //!          are zero, one, or >= 2 Nbrs are in each quadrant\n    std::vector<unsigned> rDist(void) const;\n\n    //! @brief  Get the \"basic Assignment\" for this Arrangement.\n    //!\n    //! @return  the Assignment in which no quad actions have been taken, i.e.\n    //!          in which the semiaxees are just as initially defined, and in\n    //!          which the cost is zero.\n    Assignment_SP getBasicAssignment(void) const;\n\n    //! @brief  Get the Assignment resulting from a given quad action.\n    //!\n    //! @param[in]  quadAction  a string of four letters chosen from among\n    //!                     {A, B, C, D}, representing the action to be taken\n    //!                     in each of the four quadrants.\n    //!\n    //! @return  the Assignment resulting from the quad action.\n    Assignment_SP getAssignmentForQuadAction(std::string quadAction) const;\n\n    //! @brief  Compute all possible Assignments in which precisely\n    //!         N semiaxes are occupied, sorted by ascending cost.\n    //!\n    //! @param[in]  N  the number of semiaxes to be occupied\n    //!\n    //! @return  vector of Assignment_SPs, sorted by ascending cost.\n    Assignments computeNAssignments(unsigned N) const;\n\n    //! @brief  Compute all possible Assignments.\n    //!\n    //! @return  vector of Assignment_SPs. The ordering is such that any and\n    //!          all 4-assignments come first, in order of ascending cost,\n    //!          followed by any and all 3-assignments, again in order of\n    //!          ascending cost, then likewise for 2- and 1-assignments.\n    Assignments computeAllAssignments(void) const;\n\n    //! All Nbrs in the Arrangement\n    Nbrs nbrs;\n    //! The semiaxes\n    Nbrs semis;\n    //! The quadrants\n    Quads quads;\n};\n\n\n} // namespace dialect\n\n#endif  // DIALECT_QUADACTION_H\n"
  },
  {
    "path": "cola/libdialect/routing.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libdialect - A library for computing DiAlEcT layouts:\n *                 D = Decompose/Distribute\n *                 A = Arrange\n *                 E = Expand/Emend\n *                 T = Transform\n *\n * Copyright (C) 2018  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n * Author(s):   Steve Kieffer   <http://skieffer.info>\n*/\n\n#include <vector>\n#include <utility>\n#include <math.h>\n#include <string>\n\n#include \"libvpsc/assertions.h\"\n#include \"libavoid/libavoid.h\"\n\n#include \"libdialect/util.h\"\n#include \"libdialect/graphs.h\"\n#include \"libdialect/ortho.h\"\n#include \"libdialect/routing.h\"\n\nusing namespace dialect;\n\nusing Avoid::Router;\nusing Avoid::Point;\nusing Avoid::Polygon;\nusing Avoid::PolyLine;\nusing Avoid::ConnRef;\nusing Avoid::ConnEnd;\nusing Avoid::ConnDirFlags;\nusing Avoid::ShapeRef;\n\nusing std::vector;\n\ntypedef std::pair<ConnEnd, ConnEnd> ConnEndPair;\n\nvoid RoutingAdapter::addNodes(const NodesById &nodes) {\n    for (auto p : nodes) {\n        // Ask the node to compute its polygon.\n        Polygon poly = p.second->makeLibavoidPolygon();\n        // Allocate a ShapeRef and add it to the router.\n        ShapeRef *sr = new ShapeRef(&router, poly);\n        // Store in local lookup.\n        nodeIdToShapeRef.insert({p.first, sr});\n    }\n}\n\nvoid RoutingAdapter::addEdges(const EdgesById &edges, const EdgeConnDirsById *connDirs) {\n    // We take advantage of the ordered nature of the maps.\n    auto it = edges.begin();\n    if (connDirs != nullptr) {\n        auto jt = connDirs->begin();\n        // Before falling off the end of either map...\n        while (it != edges.end() && jt != connDirs->end()) {\n            auto p = *it;\n            auto q = *jt;\n            // Record the Edge in the local lookup.\n            this->edges.insert(p);\n            // Get the two IDs.\n            id_type i = p.first,\n                    j = q.first;\n            // Advance the connDirs iterator iff its ID lags the edges ID.\n            if (i > j) ++jt;\n            // In all other cases we are able to test whether the current Edge's ID\n            // is in the connDirs map.\n            else {\n                // Allocate a ConnRef and add it to the router.\n                ConnRef *cr = new ConnRef(&router);\n                // Store it in the lookup map by Edge ID.\n                edgeIdToConnRef.insert({i, cr});\n                // Get the ConnEnds.\n                ConnEndPair ends;\n                if (i==j) {\n                    // If the two IDs are equal then this Edge has special connDirs.\n                    auto cd = q.second;\n                    ends = p.second->makeLibavoidConnEnds(cd.first, cd.second);\n                } else {\n                    // Otherwise it does not.\n                    ends = p.second->makeLibavoidConnEnds();\n                }\n                // Set the ends in the ConnRef.\n                cr->setEndpoints(ends.first, ends.second);\n                ++it;\n            }\n        }\n    }\n    // In case we fell off the end of the connDirs map first, then all remaining edges\n    // take the default of ConnDirAll.\n    while (it != edges.end()) {\n        auto p = *it;\n        // Record the Edge in the local lookup.\n        this->edges.insert(p);\n        // Allocate a ConnRef and add it to the router.\n        ConnRef *cr = new ConnRef(&router);\n        // Store it in the lookup map by Edge ID.\n        edgeIdToConnRef.insert({p.first, cr});\n        // Get the ConnEnds.\n        ConnEndPair ends = p.second->makeLibavoidConnEnds();\n        // Set the ends in the ConnRef.\n        cr->setEndpoints(ends.first, ends.second);\n        ++it;\n    }\n}\n\nvoid RoutingAdapter::route(RouteProcessing processing) {\n    router.processTransaction();\n    if (processing >= RouteProcessing::RECORD) recordRoutes(processing == RouteProcessing::REFINE_AND_RECORD);\n}\n\nvoid RoutingAdapter::recordRoutes(bool refine) {\n    // Our Edge lookup and ConnRef lookup maps should always have exacty the same (ordered) domain,\n    // so we can iterate over them in tandem.\n    auto it = edges.begin();\n    auto jt = edgeIdToConnRef.begin();\n    while (it != edges.end()) {\n        auto p = *it;\n        auto q = *jt;\n        COLA_ASSERT(p.first == q.first);\n        // Get the Points in the connector route.\n        PolyLine poly = q.second->displayRoute();\n        vector<Point> pts = poly.ps;\n        if (refine) {\n            // On some examples we were getting \"S-bends\" in which the middle segment\n            // was about 10e-15 in length. We remove any such segments here.\n            double epsilon = 0.001;\n            // We will always keep the first and last route points.\n            // As for the remaining, \"interior\" points of the route, we will scan\n            // over them with a sliding window of length 2. Any time the two points\n            // in the window are within epsilon of one another (in both dimensions),\n            // we will skip both.\n            vector<Point> refined_pts;\n            size_t M = pts.size();\n            // We expect that there are at least two route points.\n            COLA_ASSERT( M >= 2);\n            // the number of interior points:\n            size_t N = M - 2;\n            size_t i = 0;\n            // We always keep the first route point.\n            refined_pts.push_back(pts[0]);\n            // Now the sliding window:\n            while (i + 1 < N) {\n                Point p = pts[i+1],\n                      q = pts[i+2];\n                double dx = q.x - p.x,\n                       dy = q.y - p.y;\n                if (fabs(dx) < epsilon && fabs(dy) < epsilon) {\n                    // p and q are essentially coincident, so they add nothing to\n                    // the route, and we can skip them both.\n                    // Advance the sliding window by 2.\n                    i += 2;\n                } else {\n                    // p and q are actually distinct points, so we keep the first,\n                    // and advance the sliding window by 1.\n                    refined_pts.push_back(p);\n                    ++i;\n                }\n            }\n            // When we exit the while loop, it could be that while there is no room left\n            // for the entire sliding window of length 2, still there is one point left\n            // to consider. We catch that case here:\n            if (i < N) {\n                refined_pts.push_back(pts[i+1]);\n            }\n            // And finally, we always keep the last route point.\n            refined_pts.push_back(pts[N+1]);\n            // Overwrite original pts vector.\n            pts = refined_pts;\n        }\n        // Record the route.\n        p.second->setRoute(pts);\n        // Advance both iterators.\n        ++it;\n        ++jt;\n    }\n}\n\n\nLeaflessOrthoRouter::LeaflessOrthoRouter(Graph_SP G, const HolaOpts &opts)\n    : m_graph(G),\n      m_n(G->getNumNodes()),\n      m_ra(Avoid::OrthogonalRouting),\n      m_iel(G->getIEL())\n{\n    // Set up the router.\n    m_ra.router.setRoutingOption(Avoid::nudgeSharedPathsWithCommonEndPoint, false);\n    m_ra.router.setRoutingParameter(Avoid::crossingPenalty, opts.routingScalar_crossingPenalty*m_iel);\n    m_ra.router.setRoutingParameter(Avoid::segmentPenalty, opts.routingScalar_segmentPenalty*m_iel);\n    m_ra.addNodes(G->getNodeLookup());\n    EdgesById edges = G->getEdgeLookup();\n    m_ra.addEdges(edges);\n    // Record that all connection directions are initially allowed for both ends of each Edge.\n    for (auto p : edges) {\n        m_allowedConnDirs[p.first][p.second->getSourceEnd()->id()] = Avoid::ConnDirAll;\n        m_allowedConnDirs[p.first][p.second->getTargetEnd()->id()] = Avoid::ConnDirAll;\n    }\n}\n\nvoid LeaflessOrthoRouter::setShapeBufferDistanceIELScalar(double a) {\n    m_ra.router.setRoutingParameter(Avoid::shapeBufferDistance, a*m_iel);\n}\n\nCardinalDir LeaflessOrthoRouter::departureDir(const Edge_SP &e, const Node_SP &u) const {\n    ConnRef *cr = m_ra.edgeIdToConnRef.at(e->id());\n    PolyLine poly = cr->displayRoute();\n    vector<Point> pts = poly.ps;\n    Point p0, p1;\n    if (u->id() == e->getSourceEnd()->id()) {\n        // Node u is the source end of Edge e.\n        // So we want the first two points in the route, in order.\n        p0 = pts[0];\n        p1 = pts[1];\n    } else {\n        // Node u is the target end of Edge e.\n        // So we want the last two points in the route, in reverse order.\n        size_t L = pts.size();\n        p0 = pts[L-1];\n        p1 = pts[L-2];\n    }\n    return Compass::cardinalDirection(p0, p1);\n}\n\nvoid LeaflessOrthoRouter::route(Logger *logger) {\n\n    // Set up for logging.\n    unsigned ln = logger != nullptr ? logger->nextLoggingIndex : 0;\n    std::function<void(unsigned)> log = [ln, this, logger](unsigned n)->void{\n        if (logger!=nullptr) {\n            std::string fn = string_format(\"%02d_%02d_routing_attempt\", ln, n);\n            std::string path = logger->writeFullPathForFilename(fn);\n            this->m_ra.router.outputInstanceToSVG(path);\n        }\n    };\n\n    /*\n     * We may need to route multiple times to ensure that at least two sides of each node are being used,\n     * but in theory we should never have to route more than 4n+1 times.\n     *\n     *  Proof: We always begin with an initial routing. We want to show it could be necessary to re-route\n     *  at most 4n times.\n     *\n     *  In order to see this, we first argue that the worst-case scenario for any single node is that it\n     *  require four routings. Consider some node u all of whose edges have been routed to one side, s0. We\n     *  pick some edge e0 incident to u, say that it may not connect to side s0, and re-route for the first time.\n     *\n     *  While unlikely, it could be that, for whatever reason, now all edges incident to node u are routed to some other side,\n     *  s1. We then pick some edge e1 (could be the same or different from e0), forbid it from connecting to\n     *  side s1, and re-route for a second time.\n     *\n     *  Again, for whatever reason, all edges could now connect to one\n     *  of the two remaining sides, s2. Continuing in this way, we could be led to re-route a third and a fourth time. But\n     *  prior to the fourth re-routing it would be the case that for each side si of node u, there was\n     *  some edge ei incident to u that had been forbidden from connecting on side si. Therefore on the fourth\n     *  re-routing it would be impossible for all edges to connect on any single side of u.\n     *\n     *  So far we have handled a single node. However, in again a highly unlikely worst-case scenario, it could be\n     *  that during the first five routings no other node besides u was a pseudoleaf (had all edges routed to one side),\n     *  but after the fifth some other node became a pseudoleaf. In this way we could be led to do four re-routings\n     *  for each node in the graph. QED\n     *\n     * In practice, it would probably be very rare for more that two routings to ever be necessary. For this\n     * requires the odd circumstance, considered in the proof, that forbidding one edge from connecting on a\n     * given side somehow results in /all/ edges incident at that node migrating to some other, single side.\n     */\n    // As explained in the comments above, at most 4n+1 routings should ever be needed.\n    // We let our for-loop go to a 4n+2nd iteration, so we can catch any error with an assertion.\n    size_t maxRoutings = 4*m_n + 1;\n    for (size_t numRoutings = 0; numRoutings <= maxRoutings; numRoutings++) {\n        m_ra.router.processTransaction();\n        log(numRoutings + 1);\n        COLA_ASSERT(numRoutings < maxRoutings);\n        // For testing purposes, we may want to record the results of\n        // each routing attempt.\n        if (recordEachAttempt) {\n            m_ra.recordRoutes(true);\n            routingAttemptTglf.push_back(m_graph->writeTglf());\n        }\n        // Are there any nodes having all of their edges routed\n        // out of just one side? This is what we want to prevent.\n        // Such nodes would become leaves in a planarisation, so we\n        // call them \"pseudoleaves\".\n        Nodes pseudoLeaves;\n        // For each such Node (if any), there is a sole direction in which\n        // all connectors depart. We keep track of those directions as we work.\n        vector<CardinalDir> soleDepartureDirecs;\n        // Check each Node in the Graph:\n        for (auto p : m_graph->getNodeLookup()) {\n            Node_SP &u = p.second;\n            const EdgesById edgeLookup = u->getEdgeLookup();\n            // Sanity check, that Node u is not an actual leaf:\n            COLA_ASSERT(edgeLookup.size() > 1);\n            // Determine the departure direction from Node u for its first Edge.\n            auto edge_it = edgeLookup.cbegin();\n            CardinalDir d0 = departureDir((*edge_it).second, u);\n            // If two or more directions have been used, some edge must depart\n            // in a different direction than this one.\n            bool isPseudoLeaf = true;\n            for (auto jt = ++edge_it; jt != edgeLookup.cend(); ++jt) {\n                CardinalDir d1 = departureDir((*jt).second, u);\n                if (d1 != d0) {\n                    isPseudoLeaf = false;\n                    break;\n                }\n            }\n            if (isPseudoLeaf) {\n                pseudoLeaves.push_back(u);\n                soleDepartureDirecs.push_back(d0);\n            }\n        }\n        // Are there any pseudoleaves?\n        if (pseudoLeaves.empty()) {\n            // If there are none, then we're done routing, and can break out of the outer loop.\n            break;\n        } else {\n            for (size_t i = 0; i < pseudoLeaves.size(); ++i) {\n                Node_SP u = pseudoLeaves[i];\n                CardinalDir d0 = soleDepartureDirecs[i];\n                // Now among all Edges incident at this Node we must select one that is still\n                // allowed to depart in at least two directions (hence at least one different\n                // from d0), and remove direction d0 from its list of allowed directions.\n                //\n                // Secondarily, we would like to choose an Edge e such that if v is the Node\n                // at the other end, then the predominant cardinal direction from Node u to Node v\n                // is different than d0. That is likely a suitable Edge to depart in a different\n                // direction.\n                Edge_SP candidate = nullptr;\n                for (auto p : u->getEdgeLookup()) {\n                    Edge_SP &e = p.second;\n                    // If this Edge is only allowed the one direction, then skip it.\n                    if (isSoleDirec(m_allowedConnDirs.at(e->id()).at(u->id()))) continue;\n                    // Otherwise mark it as the candidate.\n                    candidate = e;\n                    // Determine the predominant cardinal direction from Node u to the Node v at\n                    // the opposite end of Edge e.\n                    Node_SP v = e->getOtherEnd(*u);\n                    CardinalDir d1 = Compass::cardinalDirection(u, v);\n                    // If this is different from direction d0, then we're happy to accept this candidate.\n                    if (d1 != d0) break;\n                }\n                // Start with the directions allowed last time:\n                ConnDirFlags available = m_allowedConnDirs.at(candidate->id()).at(u->id());\n                // XOR with the connection flag corresponding to cardinal direction d0,\n                // so that this direction is no longer allowed.\n                available ^= Compass::libavoidConnDirs.at(d0);\n                // Record the new value.\n                m_allowedConnDirs[candidate->id()][u->id()] = available;\n                // Set a new ConnEnd.\n                Point p = u->getCentre();\n                ConnEnd end(p, available);\n                ConnRef *cr = m_ra.edgeIdToConnRef.at(candidate->id());\n                if (u->id() == candidate->getSourceEnd()->id()) {\n                    cr->setSourceEndpoint(end);\n                } else {\n                    cr->setDestEndpoint(end);\n                }\n            }\n        }\n    }\n    // Finally, the routing is done and we can set the connector routes in the Edge objects.\n    m_ra.recordRoutes(true);\n}\n"
  },
  {
    "path": "cola/libdialect/routing.h",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libdialect - A library for computing DiAlEcT layouts:\n *                 D = Decompose/Distribute\n *                 A = Arrange\n *                 E = Expand/Emend\n *                 T = Transform\n *\n * Copyright (C) 2018  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n * Author(s):   Steve Kieffer   <http://skieffer.info>\n*/\n\n#ifndef DIALECT_ROUTING_H\n#define DIALECT_ROUTING_H\n\n#include <map>\n#include <string>\n#include <vector>\n#include <utility>\n\n#include \"libavoid/libavoid.h\"\n\n#include \"libdialect/commontypes.h\"\n#include \"libdialect/opts.h\"\n#include \"libdialect/ortho.h\"\n#include \"libdialect/logging.h\"\n\nnamespace dialect {\n\ntypedef std::pair<Avoid::ConnDirFlags, Avoid::ConnDirFlags> EdgeConnDirs;\ntypedef std::map<id_type, EdgeConnDirs> EdgeConnDirsById;\n\n//! Control how much processing should be done on connector routes by the RoutingAdapter.\nenum class RouteProcessing {\n    //! Don't do anything.\n    NONE,\n    //! Record the connector routes in the Edges, exactly as returned by the Router.\n    RECORD,\n    //! Record the connector routes in the Edges after first doing post-processing to\n    //! remove extremely small S-bends.\n    REFINE_AND_RECORD\n};\n\n//! @brief  Adapter to easily apply libavoid::Routers to libdialect::Graphs.\nstruct RoutingAdapter {\n\n    //! @brief  Standard Constructor.\n    //! @param[in] flag  A RouterFlag to say what kind of routing is desired (polyline or orthogonal).\n    RoutingAdapter(Avoid::RouterFlag flag) : router(flag) {}\n\n    //! @brief  Add nodes.\n    //! @param[in] nodes  The Nodes to be added, given by a NodesById mapping.\n    void addNodes(const NodesById &nodes);\n\n    //! @brief  Add edges.\n    //! @param[in] edges  The Edges to be added, given by an EdgesById mapping.\n    //! @param[in] connDirs  Optional specification of the allowed connection directions at the source and\n    //!                      target ends of the Edges. Specifically, an Edge's ID should map to a pair\n    //!                      (srcConnDirs, tgtConnDirs) giving the allowed directions for source and target\n    //!                      respectively. For any Edge whose ID is not present in the mapping, all connection\n    //!                      directions are allowed at both ends.\n    void addEdges(const EdgesById &edges, const EdgeConnDirsById *connDirs = nullptr);\n\n    //! @brief  Do the routing.\n    //! @param[in] processing  Set to the desired level of route processing. Default: routes are\n    //!                        recorded in Edges, without any post-processing.\n    //! @sa RouteProcessing enum.\n    void route(RouteProcessing processing = RouteProcessing::RECORD);\n\n    //! @brief  Record the routes in the Edges.\n    //! @param[in] refine  Say whether the routes should be refined before recording.\n    void recordRoutes(bool refine = false);\n\n    //! The Router\n    Avoid::Router router;\n    //! Lookup for Edges\n    EdgesById edges;\n    //! Lookup an Edge's associated ConnRef* by the Edge's ID.\n    std::map<id_type, Avoid::ConnRef*> edgeIdToConnRef;\n    //! Lookup a Node's associated ShapeRef* by the Node's ID.\n    std::map<id_type, Avoid::ShapeRef*> nodeIdToShapeRef;\n};\n\n\n//! @brief  Does a special orthogonal routing in a graph having no leaves,\n//!         ensuring that at least two distinct sides of every node are\n//!         used as connection points. This is useful if we later wish to\n//!         planarise the layout, since it ensures that no node will become\n//!         a leaf in that process.\nclass LeaflessOrthoRouter {\npublic:\n    //! @brief  Standard constructor.\n    //!\n    //! @param[in]  G  the Graph in which the routing is to be done. This Graph must\n    //!                not have any leaves, i.e. Nodes of degree 1.\n    //! @param[in]  opts  a HolaOptions object from which we can read settings\n    //!                   for the router.\n    LeaflessOrthoRouter(Graph_SP G, const HolaOpts &opts);\n\n    //! @brief  Destructor.\n    ~LeaflessOrthoRouter(void) {\n        /*  The only newly allocated objects are the ConnRefs and ShapeRefs allocated\n         *  in the constructor.\n         *\n         *  But the libavoid::Router takes responsibility for these, and frees them\n         *  all in its own destructor.\n         *\n         *  Since we keep a Router instance, not a pointer, our Router is automatically\n         *  destroyed when this LeaflessOrthoRouter is destroyed.\n         *\n         *  So there is nothing for us to do.\n         */\n    }\n\n    //! @brief  Do the routing.\n    void route(Logger *logger = nullptr);\n\n    //! @brief  Set the Router's shapeBufferDistance parameter as a scalar multiple of the\n    //!         ideal edge length read from the Graph.\n    //! @warning  This is provided only as a convenience for testing. In the HOLA algorithm\n    //!           for which this is designed, shapeBufferDistance should always be zero.\n    //!           Positive values there may result in failures to route.\n    //!           HOLA uses its own node padding instead, for this purpose.\n    void setShapeBufferDistanceIELScalar(double a);\n\n    //! For testing, it is useful to be able to see the result of each\n    //! attempt to do the routing.\n    //! If desired, set recordEachAttempt to true.\n    //! Then the TGLF for each routing attmept will be available in\n    //! routingAttemptTglf.\n    bool recordEachAttempt = false;\n    std::vector<std::string> routingAttemptTglf;\n\nprivate:\n\n    //! @brief  Determine the compass direction in which the routed connector\n    //!         for Edge e departs from Node u.\n    CardinalDir departureDir(const Edge_SP &e, const Node_SP &u) const;\n\n    //! @brief  Say whether a set of connection directions denotes just a\n    //!         sole direction.\n    inline bool isSoleDirec(Avoid::ConnDirFlags dirs) const {\n        return dirs == Avoid::ConnDirUp || dirs == Avoid::ConnDirDown || dirs == Avoid::ConnDirLeft || dirs == Avoid::ConnDirRight;\n    }\n\n    Graph_SP m_graph;\n    size_t m_n; // number of nodes in the graph\n    RoutingAdapter m_ra;\n    double m_iel;\n\n    //! Lookup allowed connection directions by IDs [eID][nID], where\n    //! eID is an Edge ID, and nID is the ID of either the source or target\n    //! Node of that Edge.\n    SparseIdMatrix2d<Avoid::ConnDirFlags>::type m_allowedConnDirs;\n\n};\n\n\n\n\n} // namespace dialect\n\n#endif // DIALECT_ROUTING_H\n"
  },
  {
    "path": "cola/libdialect/sides.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libdialect - A library for computing DiAlEcT layouts:\n *                 D = Decompose/Distribute\n *                 A = Arrange\n *                 E = Expand/Emend\n *                 T = Transform\n *\n * Copyright (C) 2018  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n * Author(s):   Steve Kieffer   <http://skieffer.info>\n*/\n\n#include <sstream>\n#include <memory>\n#include <algorithm>\n#include <vector>\n#include <stdexcept>\n#include <cmath>\n\n#include \"libvpsc/assertions.h\"\n#include \"libavoid/geomtypes.h\"\n\n#include \"libdialect/ortho.h\"\n#include \"libdialect/graphs.h\"\n#include \"libdialect/faces.h\"\n#include \"libdialect/treeplacement.h\"\n#include \"libdialect/constraints.h\"\n\nusing namespace dialect;\n\nusing std::vector;\n\nusing Avoid::Point;\n\nSide::Side(Nodes nodeSeq, CardinalDir direc)\n    : m_nodeSeq(nodeSeq),\n      m_forward(direc),\n      m_inward(Compass::cardRotateCw90(direc)),\n      m_vardim(Compass::varDim.at(direc)),\n      m_constdim(Compass::constDim.at(direc)){}\n\nbool Side::containsNode(id_type id) const {\n    for (Node_SP v : m_nodeSeq) {\n        if (v->id() == id) return true;\n    }\n    return false;\n}\n\nsize_t Side::findNodeIndex(id_type id) const {\n    for (size_t i = 0; i < m_nodeSeq.size(); ++i) {\n        Node_SP v = m_nodeSeq[i];\n        if (v->id() == id) return i;\n    }\n    return -1;\n}\n\nCardinalDir Side::getForwardDirec(void) const {\n    return m_forward;\n}\n\nNode_SP Side::firstNode(void) const {\n    if (m_nodeSeq.empty()) return nullptr;\n    return m_nodeSeq.front();\n}\n\nNode_SP Side::lastNode(void) const {\n    if (m_nodeSeq.empty()) return nullptr;\n    return m_nodeSeq.back();\n}\n\nstd::string Side::toString(void) const {\n    std::ostringstream ss;\n    ss << \"Side: \" << Compass::cardToString(m_forward) << \":\";\n    for (Node_SP u : getNodeSeq()) ss << \" \" << u->id();\n    return ss.str();\n}\n\nsize_t Side::getNumRootNodes(void) const {\n    size_t N = 0;\n    for (Node_SP u : m_nodeSeq) if (u->isRoot()) ++N;\n    return N;\n}\n\nvoid Side::addTreePlacement(TreePlacement_SP tp) {\n    // Sanity check: must not add a TreePlacement whose root Node does not\n    // belong to this Side.\n    COLA_ASSERT(containsNode(tp->getRootNode()->id()));\n    // Record the placement.\n    m_treePlacements.insert(tp);\n}\n\nProjSeq_SP Side::computeCollateralProjSeq(TreePlacement_SP tp, double padding) {\n    // Sanity check: TreePlacement's root Node must belong to this Side.\n    COLA_ASSERT(containsNode(tp->getRootNode()->id()));\n    // Initialise return value.\n    ProjSeq_SP ps = std::make_shared<ProjSeq>();\n    // Get the tree box for the new placement, and the root node.\n    Node_SP treeBox = tp->buildTreeBox(padding),\n            rootNode = tp->getRootNode();\n    // Get their dimensions and coordinates.\n    dimensions tDims = treeBox->getDimensions(),\n               rDims = rootNode->getDimensions();\n    Point tPt = treeBox->getCentre(),\n          rPt = rootNode->getCentre();\n    double tw = tDims.first,\n           th = tDims.second,\n           tu = tPt.x,\n           tv = tPt.y,\n           rw = rDims.first,\n           rh = rDims.second,\n           rx = rPt.x,\n           ry = rPt.y;\n    // Compute a segment representing the extent of the new tree node in\n    // the Side's inward direction.\n    LineSegment *seg = nullptr;\n    switch(m_inward) {\n    case CardinalDir::NORTH:\n        seg = new LineSegment(Point(rx, ry-rh/2.0), Point(rx, ry+tv-th/2.0));\n        break;\n    case CardinalDir::EAST:\n        seg = new LineSegment(Point(rx+rw/2.0, ry), Point(rx+tu+tw/2.0, ry));\n        break;\n    case CardinalDir::SOUTH:\n        seg = new LineSegment(Point(rx, ry+rh/2.0), Point(rx, ry+tv+th/2.0));\n        break;\n    case CardinalDir::WEST:\n        seg = new LineSegment(Point(rx-rw/2.0, ry), Point(rx+tu-tw/2.0, ry));\n        break;\n    }\n    // May need constraints only if the segment points inward w.r.t. this Side.\n    if (seg->direc == m_inward) {\n        SepCoSet sepcos;\n        // Handle nodes on each side of the root node.\n        size_t i0 = findNodeIndex(rootNode->id()),\n               n = m_nodeSeq.size(),\n               nb = i0,\n               na = n - 1 - i0;\n        // Perimeter nodes:\n        Nodes before(nb), after(na);\n        std::copy_n(m_nodeSeq.begin(), nb, before.begin());\n        std::copy(m_nodeSeq.begin()+i0+1, m_nodeSeq.end(), after.begin());\n        // Tree nodes:\n        for (TreePlacement_SP tp1 : m_treePlacements) {\n            Node_SP r = tp1->getRootNode();\n            size_t i1 = findNodeIndex(r->id());\n            // In practice we typically will be computing this projection sequence\n            // before the new treeplacement has been made, so i1 probably will not\n            // be equal to i0. However, rather than demand this condition, we simply\n            // skip that case if it arises.\n            if (i1 == i0) continue;\n            // Otherwise proceed.\n            // The other tree placement should already have its box node.\n            Node_SP b1 = tp1->getBoxNode();\n            COLA_ASSERT(b1 != nullptr);\n            // Add the box node to the appropriate list, before or after.\n            if (i1 < i0) before.push_back(b1);\n            else after.push_back(b1);\n        }\n        // Filter out any nodes that do not lie opposite the segment computed above.\n        auto it = std::remove_if(before.begin(), before.end(), [seg](const Node_SP &u)->bool{\n            return !u->liesOppositeSegment(*seg, true);\n        });\n        before.erase(it, before.end());\n        it = std::remove_if(after.begin(), after.end(), [seg](const Node_SP &u)->bool{\n            return !u->liesOppositeSegment(*seg, true);\n        });\n        after.erase(it, after.end());\n        // Now we must process the \"before\" nodes and the \"after\" nodes.\n        // We prepare data to manage these two jobs with a for-loop.\n        vector<int> signs;\n        if (Compass::isIncreasingCard(m_forward)) signs = {-1, 1}; else signs = {1, -1};\n        vector<Nodes> nodeLists = {before, after};\n        bool isHoriz = Compass::isHorizontalCard(m_forward);\n        Node_SP left = nullptr,\n                right = nullptr;\n        double gap;\n        for (size_t j = 0; j < 2; ++j) {\n            Nodes nodes = nodeLists[j];\n            int sign = signs[j];\n            // For each node in the list, set up a constraint with the root node.\n            for (Node_SP u : nodes) {\n                left = sign == 1 ? rootNode : u;\n                right = sign == 1 ? u : rootNode;\n                // Compute gap.\n                dimensions ud = u->getDimensions();\n                double w = ud.first,\n                       h = ud.second;\n                gap = isHoriz ? w/2.0 + sign*tu + tw/2.0 : h/2.0 + sign*tv + th/2.0;\n                // Add a SepCo.\n                sepcos.insert(std::make_shared<SepCo>(m_vardim, left, right, gap));\n            }\n        }\n        // If we generated any separation constraints, add them to the projection sequence.\n        if (!sepcos.empty()) ps->addProjection(sepcos, m_vardim);\n    }\n    // Clean up.\n    delete seg;\n    // Return the projection sequence.\n    return ps;\n}\n\ninterval Side::closedInterval(void) const {\n    BoundingBox b;\n    // Among the proper nodes belonging to this Side, we need only consider the first and last.\n    b += m_nodeSeq.front()->getBoundingBox();\n    b += m_nodeSeq.back()->getBoundingBox();\n    // We also must consider any attached treeboxes.\n    for (TreePlacement_SP tp : m_treePlacements) b += tp->getBoxNode()->getBoundingBox();\n    return b.getInterval(m_vardim);\n}\n\ninterval Side::getIntervalOppositeSegment(LineSegment &seg, bool openInterval) const {\n    // If we do not run parallel, return empty interval.\n    if (Compass::arePerpendicular(m_forward, seg.direc)) return {1, 0};\n    // Otherwise compute and return intersection.\n    interval I = closedInterval();\n    double a = I.first,\n           b = I.second;\n    return openInterval ? seg.openIntervalIntersection(a, b) : seg.closedIntervalIntersection(a, b);\n}\n\nbool Side::liesOppositeSegment(LineSegment &seg, bool openInterval) const {\n    // Compute the interval of intersection of this Side with the given segment.\n    interval I = getIntervalOppositeSegment(seg, openInterval);\n    // And say whether it's nonempty.\n    return I.first <= I.second;\n}\n\ndouble Side::getCentreCoord(void) const {\n    // Since we assume all Nodes on the Side are centre-aligned, we can check any one of them.\n    Node_SP u = m_nodeSeq.front();\n    Point c = u->getCentre();\n    return m_constdim == vpsc::XDIM ? c.x : c.y;\n}\n\nAvoid::Point Side::getFirstPtOppositeSegment(LineSegment &seg) const {\n    // Compute the interval of intersection of this Side with the given segment.\n    interval I = getIntervalOppositeSegment(seg);\n    // If it's empty, that's an error.\n    if (I.first > I.second) throw std::runtime_error(\"Empty intersection between Side and LineSegment\");\n    // Otherwise determine the first point on the interval.\n    double w = I.first,\n           z = getCentreCoord();\n    return m_constdim == vpsc::XDIM ? Point(z, w) : Point(w, z);\n}\n\ndouble Side::halfWidthOppositeSegment(LineSegment &seg) const {\n    // Compute the interval of intersection of this Side with the given segment.\n    interval I = getIntervalOppositeSegment(seg);\n    // If it's empty, return -1.\n    if (I.first > I.second) return -1;\n    // Determine whether the segment lies on our low side or high side.\n    double centreCoord = getCentreCoord();\n    // NB: Since we ask the segment about the side (opposite of what we want to know),\n    // we must negate the result!\n    int side = -seg.coordOnWhichSide(centreCoord);\n    // If in-line, we consider that we have no half-width opposite such a segment.\n    if (side == 0) return -1;\n\n    // Initialize the half-width to that of an edgenode in the underlying Graph.\n    Graph *G = m_nodeSeq.front()->getGraph();\n    // The Nodes in Sides always belong to some Graph. Check:\n    COLA_ASSERT(G != nullptr);\n    double halfWidth = G->getEdgeThickness()/2.0;\n\n    // Now iterate over all Nodes, checking the relevant dimension of those\n    // whose relevant interval intersects the given segment.\n    // We consider both the proper Nodes belonging to this Side, and any attached treeboxes.\n\n    // Prepare a Nodes vector.\n    Nodes nodes(m_nodeSeq.size() + m_treePlacements.size());\n    // Copy all the proper Nodes into it.\n    auto it = std::copy(m_nodeSeq.begin(), m_nodeSeq.end(), nodes.begin());\n    // Copy all the treeboxes into it.\n    std::transform(m_treePlacements.begin(), m_treePlacements.end(), it, [](const TreePlacement_SP &tp)->Node_SP{\n        return tp->getBoxNode();\n    });\n\n    double a = I.first,\n           b = I.second;\n    bool sideIsHoriz = Compass::isHorizontalCard(m_forward);\n    for (Node_SP u : nodes) {\n        BoundingBox box = u->getBoundingBox();\n        double c, d, e, hw;\n        if (sideIsHoriz) {\n            c = box.x;\n            d = box.X;\n            e = side == -1 ? box.y : box.Y;\n            hw = fabs(e - centreCoord);\n        } else {\n            c = box.y;\n            d = box.Y;\n            e = side == -1 ? box.x : box.X;\n            hw = fabs(e - centreCoord);\n        }\n        if (b > c && d > a && hw > halfWidth) halfWidth = hw;\n    }\n    return halfWidth;\n}\n"
  },
  {
    "path": "cola/libdialect/tests/Makefile.am",
    "content": "AM_CPPFLAGS = -I$(top_srcdir)\n\nLDADD = \\\n  $(top_builddir)/libvpsc/libvpsc.la \\\n  $(top_builddir)/libcola/libcola.la \\\n  $(top_builddir)/libavoid/libavoid.la \\\n  $(top_builddir)/libdialect/libdialect.la\n\n# Basic unit testing:\ncheck_PROGRAMS = \\\n  aca assignments bbox bendcosts chainconfig01 chainconfig02 chainconfig03 \\\n  chainsandcycles cmplayout01 collateralexpand01 collateralexpand02 conncomps \\\n  containedsegment01 destress destress02 destress_aca \\\n  expand01 expand02 expand03 expand04 expand05 expand06 expand07 expand08 expand09 \\\n  extrabdrygap faceset01 faceset02 hola10 hola11 hola12 \\\n  hola_arpa hola_belnet hola_cernet hola_claranet hola_garr hola_janetlense hola_slovakia \\\n  holalonenode hola_tree inserttrees01 leaflessroute01 leaflessroute02 lookupqas nbroctal \\\n  nearalign01 nearalign02 nearby negativesepco negativezero nodeconfig01 nudgeopt \\\n  partition01 peel planarise01 planarise02 projseq01 readconstraints \\\n  rotate01 rotate02 rotate03 rotate04 routing01 sep_matrix_iter solidify symmtree \\\n  tglf01 treeboxes01 treeplacement01 treeplacement02 treeplacement03 trees trees2 vpsc01\n\n# Test HOLA on some larger and more interesting SBGN and metro map diagrams:\n# Takes a few minutes.\n#check_PROGRAMS = holasbgn01 holasbgn02 holametro01 holasbgn03 holasbgn04\n\n# HOLA speed testing on random graphs of a range of sizes and densities.\n# Takes a few minutes.\n# Writes timings to stdout. (But to see that you must run it outside the testing\n# framework.)\n#check_PROGRAMS = holaRand\n\naca_SOURCES = aca.cpp\nassignments_SOURCES = assignments.cpp\nbbox_SOURCES = bbox.cpp\nbendcosts_SOURCES = bendcosts.cpp\nchainconfig01_SOURCES = chainconfig01.cpp\nchainconfig02_SOURCES = chainconfig02.cpp\nchainconfig03_SOURCES = chainconfig03.cpp\nchainsandcycles_SOURCES = chainsandcycles.cpp\ncmplayout01_SOURCES = cmplayout01.cpp\ncollateralexpand01_SOURCES = collateralexpand01.cpp\ncollateralexpand02_SOURCES = collateralexpand02.cpp\nconncomps_SOURCES = conncomps.cpp\ncontainedsegment01_SOURCES = containedsegment01.cpp\ndestress_SOURCES = destress.cpp\ndestress02_SOURCES = destress02.cpp\ndestress_aca_SOURCES = destress_aca.cpp\nexpand01_SOURCES = expand01.cpp\nexpand02_SOURCES = expand02.cpp\nexpand03_SOURCES = expand03.cpp\nexpand04_SOURCES = expand04.cpp\nexpand05_SOURCES = expand05.cpp\nexpand06_SOURCES = expand06.cpp\nexpand07_SOURCES = expand07.cpp\nexpand08_SOURCES = expand08.cpp\nexpand09_SOURCES = expand09.cpp\nextrabdrygap_SOURCES = extrabdrygap.cpp\nfaceset01_SOURCES = faceset01.cpp\nfaceset02_SOURCES = faceset02.cpp\nhola10_SOURCES = hola10.cpp\nhola11_SOURCES = hola11.cpp\nhola12_SOURCES = hola12.cpp\nhola_arpa_SOURCES = hola_arpa.cpp\nhola_belnet_SOURCES = hola_belnet.cpp\nhola_cernet_SOURCES = hola_cernet.cpp\nhola_claranet_SOURCES = hola_claranet.cpp\nhola_garr_SOURCES = hola_garr.cpp\nhola_janetlense_SOURCES = hola_janetlense.cpp\nhola_slovakia_SOURCES = hola_slovakia.cpp\nholalonenode_SOURCES = holalonenode.cpp\nhola_tree_SOURCES = hola_tree.cpp\ninserttrees01_SOURCES = inserttrees01.cpp\nleaflessroute01_SOURCES = leaflessroute01.cpp\nleaflessroute02_SOURCES = leaflessroute02.cpp\nlookupqas_SOURCES = lookupqas.cpp\nnbroctal_SOURCES = nbroctal.cpp\nnearalign01_SOURCES = nearalign01.cpp\nnearalign02_SOURCES = nearalign02.cpp\nnearby_SOURCES = nearby.cpp\nnegativesepco_SOURCES = negativesepco.cpp\nnegativezero_SOURCES = negativezero.cpp\nnodeconfig01_SOURCES = nodeconfig01.cpp\nnudgeopt_SOURCES = nudgeopt.cpp\npartition01_SOURCES = partition01.cpp\npeel_SOURCES = peel.cpp\nplanarise01_SOURCES = planarise01.cpp\nplanarise02_SOURCES = planarise02.cpp\nprojseq01_SOURCES = projseq01.cpp\nreadconstraints_SOURCES = readconstraints.cpp\nrotate01_SOURCES = rotate01.cpp\nrotate02_SOURCES = rotate02.cpp\nrotate03_SOURCES = rotate03.cpp\nrotate04_SOURCES = rotate04.cpp\nrouting01_SOURCES = routing01.cpp\nsep_matrix_iter_SOURCES = sep_matrix_iter.cpp\nsolidify_SOURCES = solidify.cpp\nsymmtree_SOURCES = symmtree.cpp\ntglf01_SOURCES = tglf01.cpp\ntreeboxes01_SOURCES = treeboxes01.cpp\ntreeplacement01_SOURCES = treeplacement01.cpp\ntreeplacement02_SOURCES = treeplacement02.cpp\ntreeplacement03_SOURCES = treeplacement03.cpp\ntrees_SOURCES = trees.cpp\ntrees2_SOURCES = trees2.cpp\nvpsc01_SOURCES = vpsc01.cpp\nholasbgn01_SOURCES = holasbgn01.cpp\nholasbgn02_SOURCES = holasbgn02.cpp\nholametro01_SOURCES = holametro01.cpp\nholasbgn03_SOURCES = holasbgn03.cpp\nholasbgn04_SOURCES = holasbgn04.cpp\nholaRand_SOURCES = holaRand.cpp\n\nTESTS = $(check_PROGRAMS)\n"
  },
  {
    "path": "cola/libdialect/tests/aca.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libdialect - A library for computing DiAlEcT layouts:\n *                 D = Decompose/Distribute\n *                 A = Arrange\n *                 E = Expand/Emend\n *                 T = Transform\n *\n * Copyright (C) 2018  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n * Author(s):   Steve Kieffer   <http://skieffer.info>\n*/\n\n#include <string>\n#include <vector>\n#include <utility>\n#include <iostream>\n\n#include \"libvpsc/assertions.h\"\n#include \"libdialect/commontypes.h\"\n#include \"libdialect/io.h\"\n#include \"libdialect/graphs.h\"\n#include \"libdialect/aca.h\"\n\nusing namespace dialect;\n\nusing std::string;\nusing std::vector;\nusing std::pair;\nusing std::cout;\nusing std::endl;\n\nvector< pair<string, string> > names {\n    {\"special\", \"X_4\"},\n    {\"random\", \"v40e44\"},\n    {\"metro\", \"sydney\"}\n};\n\nint main(void) {\n    cout << \"ACA\" << endl;\n    for (auto p : names) {\n        string dir = p.first, file = p.second;\n        Graph_SP graph = buildGraphFromTglfFile(\"graphs/\"+dir+\"/\"+file+\".tglf\");\n        cout << dir << \"/\" << file << \"...\" << std::flush;\n        graph->getIEL();\n        ACALayout aca(graph);\n        aca.outputInstanceToSVG(\"output/\" \"aca_\"+dir+\"_\"+file+\"_instance\");\n        aca.layout();\n        graph->updateNodesFromRects();\n        aca.updateSepMatrix();\n        cout << \"done\" << endl;\n        writeStringToFile(graph->writeTglf(), \"output/\" \"aca_\"+dir+\"_\"+file+\".tglf\");\n    }\n    return 0;\n}\n"
  },
  {
    "path": "cola/libdialect/tests/assignments.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libdialect - A library for computing DiAlEcT layouts:\n *                 D = Decompose/Distribute\n *                 A = Arrange\n *                 E = Expand/Emend\n *                 T = Transform\n *\n * Copyright (C) 2018  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n * Author(s):   Steve Kieffer   <http://skieffer.info>\n*/\n\n#include <memory>\n#include <iostream>\n#include <vector>\n\n#include \"libvpsc/assertions.h\"\n#include \"libdialect/commontypes.h\"\n#include \"libdialect/util.h\"\n#include \"libdialect/quadaction.h\"\n\nusing std::cout;\nusing std::endl;\nusing std::vector;\nusing std::make_shared;\n\nusing namespace dialect;\n\nint main(void) {\n\n    // Test constructing some Assignments, and checking\n    // their cardinality.\n\n    Nbr_SP n0 = make_shared<Nbr>(0, 1, 0);\n    Nbr_SP n1 = make_shared<Nbr>(1, 1, 1);\n    Nbr_SP n2 = make_shared<Nbr>(2, 1, 2);\n    Nbr_SP n3 = make_shared<Nbr>(3, 1, 3);\n\n    Nbrs semis{n0, n1, nullptr, n3};\n\n    Assignment a(semis, 0);\n    COLA_ASSERT(a.cardinality() == 3);\n\n    Assignment a2({nullptr, nullptr, n2, nullptr}, 0);\n    COLA_ASSERT(a2.cardinality() == 1);\n\n    Assignment a3 = a2.makeUnion(a);\n    COLA_ASSERT(a3.cardinality() == 4);\n\n    Assignment a4;\n    COLA_ASSERT(a4.cardinality() == 0);\n\n    // Build a Quad, then sort and compute costs.\n    Quad q(0);\n    q.addNbr(n1);\n    q.addNbr(n2);\n    q.sortAndComputeCosts();\n\n    /*\n    std::cout << \"ACost: \" << q.ACost << std::endl;\n    std::cout << \"CCost: \" << q.CCost << std::endl;\n\n    std::cout << q.ACost - 0.5 << std::endl;\n    std::cout << q.CCost - 0.2 << std::endl;\n    */\n\n    COLA_ASSERT(approx_equal(q.ACost, 0.5));\n    COLA_ASSERT(approx_equal(q.CCost, 0.2));\n\n    // Ask a Quad to construct the Assignment for a given action\n\n    Assignment qa = q.constructAssignmentForAction('B');\n    COLA_ASSERT(qa.cardinality() == 2);\n    COLA_ASSERT(approx_equal(qa.cost, 0.7));\n\n    // Build an Arrangement\n\n    // One on East semiaxis\n    Nbr_SP u0 = make_shared<Nbr>(0, 1, 0);\n    // One in Q0\n    Nbr_SP u1 = make_shared<Nbr>(1, 1, 1);\n    // Two in Q1\n    Nbr_SP u2 = make_shared<Nbr>(2, -1, 2);\n    Nbr_SP u3 = make_shared<Nbr>(3, -1, 1);\n    // Three in Q2\n    Nbr_SP u4 = make_shared<Nbr>(4, -2, -1);\n    Nbr_SP u5 = make_shared<Nbr>(5, -1, -1);\n    Nbr_SP u6 = make_shared<Nbr>(6, -1, -2);\n    // One in Q3\n    Nbr_SP u7 = make_shared<Nbr>(7, 1, -1);\n\n    Arrangement r({u0, u1, u2, u3, u4, u5, u6, u7});\n\n    // Check the vacancy, distribution, and reduced distribution vectors.\n    vector<unsigned> vac = {1, 0, 0, 0};\n    COLA_ASSERT(r.vacancy() == vac);\n    vector<unsigned> d = {1, 2, 3, 1};\n    COLA_ASSERT(r.dist() == d);\n    vector<unsigned> rdist = {1, 2, 2, 1};\n    COLA_ASSERT(r.rDist() == rdist);\n    // Check the basic assignment.\n    Assignment_SP ba = r.getBasicAssignment();\n    COLA_ASSERT(ba->cardinality() == 1);\n    COLA_ASSERT(ba->cost == 0);\n    // Check the assignment for quad action CDBD\n    Assignment_SP qaa = r.getAssignmentForQuadAction(\"CDBD\");\n    // cardinality:\n    COLA_ASSERT(qaa->cardinality() == 4);\n    // cost:\n    //cout << qaa.cost << endl;\n    COLA_ASSERT(approx_equal(qaa->cost, 0.9));\n    // check that the expected nodes got assigned to the semiaxes:\n    COLA_ASSERT(qaa->semis[0]->id == 0);\n    COLA_ASSERT(qaa->semis[1]->id == 1);\n    COLA_ASSERT(qaa->semis[2]->id == 4);\n    COLA_ASSERT(qaa->semis[3]->id == 6);\n\n    // Full test: Check the list of Assignments for an Arrangement.\n    /* We consider a case where the most\n    preferable 3-assignment can fail due to an existing alignment\n    constraint, and we need to choose the best Plan B.\n\n           v\n               c   w\n        u          x\n\n    Alignments: H(c,w); V(w,x); H(u,x)\n\n    If a and b are the angles that uc and vc make with semiaxis 2,\n    respectively, then assume we have 0 < a < b < 45.\n    In this case the assignment (w - u v) is the most preferred,\n    but it is thwarted by the existing alignments.\n    Our algorithm should successfully identify (w u v -) as the next\n    best alternative.\n    */\n    Nbr_SP v0 = make_shared<Nbr>(0, 1, 0);\n    Nbr_SP v1 = make_shared<Nbr>(1, -1, 0.5);\n    Nbr_SP v2 = make_shared<Nbr>(2, -0.866, -0.5);\n    Arrangement r2({v0, v1, v2});\n    Assignments A = r2.computeAllAssignments();\n    /*\n    for (auto p : A) {\n        cout << p->toString() << endl;\n    }\n    */\n    COLA_ASSERT(A[0]->toString() == \"0 - 1 2\");\n    COLA_ASSERT(A[1]->toString() == \"0 1 2 -\");\n\n    return 0;\n}\n"
  },
  {
    "path": "cola/libdialect/tests/bbox.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libdialect - A library for computing DiAlEcT layouts:\n *                 D = Decompose/Distribute\n *                 A = Arrange\n *                 E = Expand/Emend\n *                 T = Transform\n *\n * Copyright (C) 2018  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n * Author(s):   Steve Kieffer   <http://skieffer.info>\n*/\n\n#include <iostream>\n#include <vector>\n\n#include \"libvpsc/assertions.h\"\n#include \"libdialect/io.h\"\n#include \"libdialect/graphs.h\"\n\nusing namespace dialect;\n\nusing std::cout;\nusing std::endl;\nusing std::vector;\n\nint main(void) {\n    Graph graph = *buildGraphFromTglfFile(\"graphs/\" \"special/core_with_trees.tglf\");\n    // First check the bounding box of the whole graph.\n    BoundingBox bb1 = graph.getBoundingBox();\n    cout << \"Whole: \" << bb1.repr() << endl;\n    COLA_ASSERT(bb1 == BoundingBox(196, 811, 67, 653));\n    // Now try ignoring some nodes.\n    NodesById ignore_map;\n    const NodesById &lookup = graph.getNodeLookup();\n    // First try ignoring a set that actually changes the box.\n    vector<id_type> ignore{7, 8, 9, 10};\n    for (id_type id : ignore) {\n        ignore_map.emplace(id, lookup.at(id));\n    }\n    BoundingBox bb2 = graph.getBoundingBox(ignore_map);\n    cout << \"Minus NE tree: \" << bb2.repr() << endl;\n    COLA_ASSERT(bb2 == BoundingBox(196, 720, 178, 653));\n    // Now instead try ingoring a set that doesn't change the box.\n    ignore = vector<id_type>{6, 2, 3, 5};\n    ignore_map.clear();\n    for (id_type id : ignore) {\n        ignore_map.emplace(id, lookup.at(id));\n    }\n    BoundingBox bb3 = graph.getBoundingBox(ignore_map);\n    cout << \"Minus some nodes in the middle: \" << bb3.repr() << endl;\n    COLA_ASSERT(bb3 == bb1);\n    return 0;\n}\n"
  },
  {
    "path": "cola/libdialect/tests/bendcosts.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libdialect - A library for computing DiAlEcT layouts:\n *                 D = Decompose/Distribute\n *                 A = Arrange\n *                 E = Expand/Emend\n *                 T = Transform\n *\n * Copyright (C) 2018  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n * Author(s):   Steve Kieffer   <http://skieffer.info>\n*/\n\n#include <vector>\n#include <deque>\n#include <sstream>\n\n#include \"libvpsc/assertions.h\"\n\n#include \"libdialect/commontypes.h\"\n#include \"libdialect/io.h\"\n#include \"libdialect/util.h\"\n#include \"libdialect/graphs.h\"\n#include \"libdialect/chains.h\"\n\nusing namespace dialect;\n\nusing std::vector;\nusing std::deque;\nusing std::cout;\nusing std::endl;\n\nint main(void) {\n    Graph_SP graph = buildGraphFromTglfFile(\"graphs/\" \"special/bend_costs.tglf\");\n    writeStringToFile(graph->writeTglf(), \"output/\" \"bendcosts_\" \"layout.tglf\");\n\n    vector<deque<Node_SP>> chains, cycles;\n    graph->getChainsAndCycles(chains, cycles);\n    COLA_ASSERT(chains.size() == 1);\n    COLA_ASSERT(cycles.size() == 1);\n\n    cout << \"Cycle bend costs for TLC:\" << endl;\n    Chain theCycle(graph, cycles[0], true);\n    double c[16] = {1, 2, 3, 4, 5, 6, 7, 8, 7, 6, 5, 4, 3, 2, 1, 0};\n    for (size_t i = 0; i < 16; ++i) {\n        double cost = theCycle.bendCost(LinkShape::TLC, i);\n        cout << i << \": \" << cost << endl;\n        COLA_ASSERT(approx_equal(cost, c[i]/8.0, 0.001));\n    }\n\n    cout << \"Chain bend costs for TLC:\" << endl;\n    Chain theChain(graph, chains[0]);\n    double c2[7] = {0, 0, 1, 2, 3, 4, 4};\n    for (size_t i = 0; i < 7; ++i) {\n        double cost = theChain.bendCost(LinkShape::TLC, i);\n        cout << i << \": \" << cost << endl;\n        COLA_ASSERT(approx_equal(cost, c2[i]/4.0, 0.001));\n    }\n\n    return 0;\n}\n"
  },
  {
    "path": "cola/libdialect/tests/chainconfig01.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libdialect - A library for computing DiAlEcT layouts:\n *                 D = Decompose/Distribute\n *                 A = Arrange\n *                 E = Expand/Emend\n *                 T = Transform\n *\n * Copyright (C) 2018  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n * Author(s):   Steve Kieffer   <http://skieffer.info>\n*/\n\n#include <vector>\n#include <deque>\n#include <iostream>\n\n#include \"libvpsc/assertions.h\"\n#include \"libvpsc/rectangle.h\"\n\n#include \"libdialect/commontypes.h\"\n#include \"libdialect/io.h\"\n#include \"libdialect/util.h\"\n#include \"libdialect/graphs.h\"\n#include \"libdialect/ortho.h\"\n#include \"libdialect/constraints.h\"\n#include \"libdialect/chains.h\"\n\nusing namespace dialect;\n\nusing std::vector;\nusing std::deque;\nusing std::cout;\nusing std::endl;\n\nint main(void) {\n    Graph_SP graph = buildGraphFromTglfFile(\"graphs/\" \"special/chainconfig01.tglf\");\n    graph->getSepMatrix().setCardinalOP(0, 1, CardinalDir::SOUTH);\n    graph->getSepMatrix().setCardinalOP(16, 15, CardinalDir::NORTH);\n    writeStringToFile(graph->writeTglf(), \"output/\" \"chainconfig01_\" \"00_initial.tglf\");\n    vector<deque<Node_SP>> chains, cycles;\n    graph->getChainsAndCycles(chains, cycles);\n    COLA_ASSERT(chains.size() == 1);\n    COLA_ASSERT(cycles.size() == 0);\n    Chain chain(graph, chains[0]);\n    chain.takeShapeBasedConfiguration();\n    ColaOptions opts;\n    graph->project(opts, vpsc::XDIM);\n    writeStringToFile(graph->writeTglf(), \"output/\" \"chainconfig01_\" \"01_projX.tglf\");\n    graph->project(opts, vpsc::YDIM);\n    writeStringToFile(graph->writeTglf(), \"output/\" \"chainconfig01_\" \"02_projY.tglf\");\n    graph->destress();\n    writeStringToFile(graph->writeTglf(), \"output/\" \"chainconfig01_\" \"03_destress.tglf\");\n    return 0;\n}\n"
  },
  {
    "path": "cola/libdialect/tests/chainconfig02.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libdialect - A library for computing DiAlEcT layouts:\n *                 D = Decompose/Distribute\n *                 A = Arrange\n *                 E = Expand/Emend\n *                 T = Transform\n *\n * Copyright (C) 2018  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n * Author(s):   Steve Kieffer   <http://skieffer.info>\n*/\n\n#include <vector>\n#include <deque>\n#include <iostream>\n\n#include \"libvpsc/assertions.h\"\n#include \"libvpsc/rectangle.h\"\n\n#include \"libdialect/commontypes.h\"\n#include \"libdialect/io.h\"\n#include \"libdialect/util.h\"\n#include \"libdialect/graphs.h\"\n#include \"libdialect/ortho.h\"\n#include \"libdialect/chains.h\"\n\nusing namespace dialect;\n\nusing std::vector;\nusing std::deque;\nusing std::cout;\nusing std::endl;\n\nint main(void) {\n    Graph_SP graph = buildGraphFromTglfFile(\"graphs/\" \"special/chainconfig01.tglf\");\n    graph->getSepMatrix().setCardinalOP(0, 1, CardinalDir::WEST);\n    graph->getSepMatrix().setCardinalOP(16, 15, CardinalDir::EAST);\n    writeStringToFile(graph->writeTglf(), \"output/\" \"chainconfig02_\" \"00_initial.tglf\");\n    vector<deque<Node_SP>> chains, cycles;\n    graph->getChainsAndCycles(chains, cycles);\n    COLA_ASSERT(chains.size() == 1);\n    COLA_ASSERT(cycles.size() == 0);\n    Chain chain(graph, chains[0]);\n    chain.takeShapeBasedConfiguration();\n    ColaOptions opts;\n    graph->project(opts, vpsc::XDIM);\n    writeStringToFile(graph->writeTglf(), \"output/\" \"chainconfig02_\" \"01_projX.tglf\");\n    graph->project(opts, vpsc::YDIM);\n    writeStringToFile(graph->writeTglf(), \"output/\" \"chainconfig02_\" \"02_projY.tglf\");\n    graph->destress();\n    writeStringToFile(graph->writeTglf(), \"output/\" \"chainconfig02_\" \"03_destress.tglf\");\n    return 0;\n}\n"
  },
  {
    "path": "cola/libdialect/tests/chainconfig03.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libdialect - A library for computing DiAlEcT layouts:\n *                 D = Decompose/Distribute\n *                 A = Arrange\n *                 E = Expand/Emend\n *                 T = Transform\n *\n * Copyright (C) 2018  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n * Author(s):   Steve Kieffer   <http://skieffer.info>\n*/\n\n#include <vector>\n#include <deque>\n#include <iostream>\n#include <memory>\n\n#include \"libvpsc/assertions.h\"\n#include \"libvpsc/rectangle.h\"\n\n#include \"libdialect/commontypes.h\"\n#include \"libdialect/io.h\"\n#include \"libdialect/util.h\"\n#include \"libdialect/graphs.h\"\n#include \"libdialect/ortho.h\"\n#include \"libdialect/constraints.h\"\n#include \"libdialect/chains.h\"\n\nusing namespace dialect;\n\nusing std::vector;\nusing std::deque;\nusing std::cout;\nusing std::endl;\n\n// This time our goal is to test the ability of AestheticBends to set bend nodes\n// in their associated Edges.\n\nint main(void) {\n    Graph_SP graph = buildGraphFromTglfFile(\"graphs/\" \"special/chainconfig01.tglf\");\n    graph->getSepMatrix().setCardinalOP(0, 1, CardinalDir::SOUTH);\n    graph->getSepMatrix().setCardinalOP(16, 15, CardinalDir::NORTH);\n    writeStringToFile(graph->writeTglf(), \"output/\" \"chainconfig03_\" \"00_initial.tglf\");\n\n    // Work on a copy of the original graph.\n    Graph_SP H = std::make_shared<Graph>(*graph);\n    vector<deque<Node_SP>> chains, cycles;\n    H->getChainsAndCycles(chains, cycles);\n    COLA_ASSERT(chains.size() == 1);\n    COLA_ASSERT(cycles.size() == 0);\n    Chain chain(H, chains[0]);\n    chain.takeShapeBasedConfiguration();\n    if (true) {\n        ColaOptions opts;\n        H->project(opts, vpsc::XDIM);\n        H->project(opts, vpsc::YDIM);\n    }\n    // Set the routes in the original graph.\n    graph->clearAllRoutes();\n    chain.addAestheticBendsToEdges();\n    graph->buildRoutes();\n    writeStringToFile(graph->writeTglf(), \"output/\" \"chainconfig03_\" \"01_with_routes.tglf\");\n\n    return 0;\n}\n"
  },
  {
    "path": "cola/libdialect/tests/chainsandcycles.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libdialect - A library for computing DiAlEcT layouts:\n *                 D = Decompose/Distribute\n *                 A = Arrange\n *                 E = Expand/Emend\n *                 T = Transform\n *\n * Copyright (C) 2018  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n * Author(s):   Steve Kieffer   <http://skieffer.info>\n*/\n\n#include <vector>\n#include <deque>\n#include <iostream>\n\n#include \"libvpsc/assertions.h\"\n\n#include \"libdialect/commontypes.h\"\n#include \"libdialect/io.h\"\n#include \"libdialect/util.h\"\n#include \"libdialect/graphs.h\"\n\nusing namespace dialect;\n\nusing std::vector;\nusing std::deque;\nusing std::cout;\nusing std::endl;\n\nint main(void) {\n    Graph_SP graph = buildGraphFromTglfFile(\"graphs/\" \"special/chains_and_cycles.tglf\");\n    vector<deque<Node_SP>> chains, cycles;\n    graph->getChainsAndCycles(chains, cycles);\n\n    // Chains\n    cout << \"Chains:\" << endl;\n    for (auto d : chains) {\n        for (auto u : d) {\n            cout << u->id() << \" \";\n        }\n        cout << endl;\n    }\n\n    // Cycles\n    cout << \"Cycles:\" << endl;\n    for (auto d : cycles) {\n        for (auto u : d) {\n            cout << u->id() << \" \";\n        }\n        cout << endl;\n    }\n\n    COLA_ASSERT(chains.size() == 8);\n    COLA_ASSERT(cycles.size() == 1);\n\n    return 0;\n}\n"
  },
  {
    "path": "cola/libdialect/tests/cmplayout01.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libdialect - A library for computing DiAlEcT layouts:\n *                 D = Decompose/Distribute\n *                 A = Arrange\n *                 E = Expand/Emend\n *                 T = Transform\n *\n * Copyright (C) 2018  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n * Author(s):   Steve Kieffer   <http://skieffer.info>\n*/\n\n#include \"libvpsc/assertions.h\"\n\n#include \"libdialect/commontypes.h\"\n#include \"libdialect/io.h\"\n#include \"libdialect/util.h\"\n#include \"libdialect/graphs.h\"\n\nusing namespace dialect;\n\nint main(void) {\n\n    Graph_SP graph1 = buildGraphFromTglfFile(\"graphs/\" \"special/cmplayout01.tglf\");\n    Graph_SP graph1b = buildGraphFromTglfFile(\"graphs/\" \"special/cmplayout01.tglf\");\n    Graph_SP graph2 = buildGraphFromTglfFile(\"graphs/\" \"special/cmplayout02.tglf\");\n    Graph_SP graph3 = buildGraphFromTglfFile(\"graphs/\" \"special/cmplayout03.tglf\");\n    Graph_SP graph4 = buildGraphFromTglfFile(\"graphs/\" \"special/cmplayout04.tglf\");\n\n    COLA_ASSERT(graph1->hasSameLayoutAs(*graph1b));\n    COLA_ASSERT(!graph1->hasSameLayoutAs(*graph2));\n    COLA_ASSERT(!graph1->hasSameLayoutAs(*graph3));\n    COLA_ASSERT(!graph1->hasSameLayoutAs(*graph4));\n\n}\n"
  },
  {
    "path": "cola/libdialect/tests/collateralexpand01.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libdialect - A library for computing DiAlEcT layouts:\n *                 D = Decompose/Distribute\n *                 A = Arrange\n *                 E = Expand/Emend\n *                 T = Transform\n *\n * Copyright (C) 2018  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n * Author(s):   Steve Kieffer   <http://skieffer.info>\n*/\n\n#include <vector>\n#include <iostream>\n\n#include \"libvpsc/assertions.h\"\n\n#include \"libdialect/commontypes.h\"\n#include \"libdialect/io.h\"\n#include \"libdialect/graphs.h\"\n#include \"libdialect/util.h\"\n#include \"libdialect/routing.h\"\n#include \"libdialect/opts.h\"\n#include \"libdialect/planarise.h\"\n#include \"libdialect/faces.h\"\n#include \"libdialect/peeling.h\"\n#include \"libdialect/trees.h\"\n#include \"libdialect/treeplacement.h\"\n#include \"libdialect/constraints.h\"\n\nusing namespace dialect;\n\nusing std::vector;\nusing std::cout;\nusing std::endl;\n\nvector<id_type> nodes2ids(Nodes nodes) {\n    vector<id_type> ids;\n    for (Node_SP u : nodes) ids.push_back(u->id());\n    return ids;\n}\n\nint main(void) {\n\n    HolaOpts opts;\n    // Build a graph.\n    Graph_SP graph = buildGraphFromTglfFile(\"graphs/\" \"special/treeplacement5.tglf\");\n    // Peel.\n    Trees trees = peel(*graph);\n    // There should be two trees.\n    COLA_ASSERT(trees.size() == 2);\n    // Give the trees their symmetric layout.\n    double iel = graph->getIEL();\n    for (Tree_SP t : trees) t->symmetricLayout(CardinalDir::EAST, iel/4.0, iel, opts.preferConvexTrees);\n    // Do an ortho routing and planarise the core.\n    LeaflessOrthoRouter lor(graph, opts);\n    lor.setShapeBufferDistanceIELScalar(0.125);\n    lor.route();\n    OrthoPlanariser op(graph);\n    Graph_SP P = op.planarise();\n    writeStringToFile(P->writeTglf(), \"output/\" \"collateralexpand01_\" \"planar_layout.tglf\");\n\n    // Compute the face set.\n    FaceSet faceSet(P);\n\n    // Get ahold of the two trees, rooted at nodes 0 and 9.\n    Tree_SP t0 = nullptr,\n            t9 = nullptr;\n    for (Tree_SP t : trees) {\n        if (t->getRootNodeID() == 0) t0 = t;\n        else if (t->getRootNodeID() == 9) t9 = t;\n        if (t0 != nullptr && t9 != nullptr) break;\n    }\n    // Show the trees' layout.\n    writeStringToFile(t0->underlyingGraph()->writeTglf(), \"output/\" \"collateralexpand01_\" \"tree0_layout.tglf\");\n    writeStringToFile(t9->underlyingGraph()->writeTglf(), \"output/\" \"collateralexpand01_\" \"tree9_layout.tglf\");\n\n    //bool verbose = false;\n\n    // Get all possible placements, with the usual settings:\n    opts.treePlacement_favourCardinal = true;\n    opts.treePlacement_favourExternal = true;\n    opts.treePlacement_favourIsolation = true;\n    TreePlacements tps0 = faceSet.listAllPossibleTreePlacements(t0);\n    //if (verbose) for (TreePlacement_SP tp : tps) cout << tp->toString();\n    TreePlacements tps9 = faceSet.listAllPossibleTreePlacements(t9);\n\n    // Get the NORTH placements.\n    TreePlacement_SP north0 = nullptr,\n                     north9 = nullptr;\n    for (TreePlacement_SP tp : tps0) if (tp->getPlacementDir() == CompassDir::NORTH) {north0 = tp; break;}\n    for (TreePlacement_SP tp : tps9) if (tp->getPlacementDir() == CompassDir::NORTH) {north9 = tp; break;}\n\n    // Insert the tree boxes.\n    double padding = iel/4.0;\n    north0->insertTreeNode(padding);\n    north9->insertTreeNode(padding);\n    // Show the result.\n    std::string tglfWithBoxes = P->writeTglf();\n    writeStringToFile(tglfWithBoxes, \"output/\" \"collateralexpand01_\" \"with_tree_boxes.tglf\");\n\n    Sides sides = faceSet.getExternalFace()->getRelevantSidesForPlacement(north0);\n    Side_SP S = sides.front();\n    ProjSeq_SP ps0 = S->computeCollateralProjSeq(north0, padding),\n               ps9 = S->computeCollateralProjSeq(north9, padding);\n\n    // In this case, each ProjSeq should have exactly one Projection, which should\n    // have exactly one SepCo. We check that these are as expected.\n\n    cout << ps0->toString() << endl;\n    cout << ps9->toString() << endl;\n\n    Projection_SP p0 = ps0->nextProjection(),\n                  p9 = ps9->nextProjection();\n\n    SepCo_SP sc0 = *(p0->sepCoSet.begin()),\n             sc9 = *(p9->sepCoSet.begin());\n\n    COLA_ASSERT(sc0->dim == vpsc::XDIM);\n    COLA_ASSERT(sc0->left->id() == 0);\n    COLA_ASSERT(sc0->right->id() == 89);\n    COLA_ASSERT(sc0->gap == 600);\n\n    COLA_ASSERT(sc9->dim == vpsc::XDIM);\n    COLA_ASSERT(sc9->left->id() == 87);\n    COLA_ASSERT(sc9->right->id() == 9);\n    COLA_ASSERT(sc9->gap == 570);\n\n    return 0;\n}\n"
  },
  {
    "path": "cola/libdialect/tests/collateralexpand02.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libdialect - A library for computing DiAlEcT layouts:\n *                 D = Decompose/Distribute\n *                 A = Arrange\n *                 E = Expand/Emend\n *                 T = Transform\n *\n * Copyright (C) 2018  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n * Author(s):   Steve Kieffer   <http://skieffer.info>\n*/\n\n#include <vector>\n#include <iostream>\n\n#include \"libvpsc/assertions.h\"\n\n#include \"libdialect/commontypes.h\"\n#include \"libdialect/io.h\"\n#include \"libdialect/graphs.h\"\n#include \"libdialect/util.h\"\n#include \"libdialect/routing.h\"\n#include \"libdialect/opts.h\"\n#include \"libdialect/planarise.h\"\n#include \"libdialect/faces.h\"\n#include \"libdialect/peeling.h\"\n#include \"libdialect/trees.h\"\n#include \"libdialect/treeplacement.h\"\n#include \"libdialect/constraints.h\"\n\nusing namespace dialect;\n\nusing std::vector;\nusing std::cout;\nusing std::endl;\n\nvector<id_type> nodes2ids(Nodes nodes) {\n    vector<id_type> ids;\n    for (Node_SP u : nodes) ids.push_back(u->id());\n    return ids;\n}\n\nint main(void) {\n\n    HolaOpts opts;\n    // Build a graph.\n    Graph_SP graph = buildGraphFromTglfFile(\"graphs/\" \"special/treeplacement5.tglf\");\n    // Peel.\n    Trees trees = peel(*graph);\n    // There should be two trees.\n    COLA_ASSERT(trees.size() == 2);\n    // Give the trees their symmetric layout.\n    double iel = graph->getIEL();\n    for (Tree_SP t : trees) t->symmetricLayout(CardinalDir::EAST, iel/4.0, iel, opts.preferConvexTrees);\n    // Do an ortho routing and planarise the core.\n    LeaflessOrthoRouter lor(graph, opts);\n    lor.setShapeBufferDistanceIELScalar(0.125);\n    lor.route();\n    OrthoPlanariser op(graph);\n    Graph_SP P = op.planarise();\n    writeStringToFile(P->writeTglf(), \"output/\" \"collateralexpand02_\" \"planar_layout.tglf\");\n\n    // Compute the face set.\n    FaceSet faceSet(P);\n\n    // Get ahold of the two trees, rooted at nodes 0 and 9.\n    Tree_SP t0 = nullptr,\n            t9 = nullptr;\n    for (Tree_SP t : trees) {\n        if (t->getRootNodeID() == 0) t0 = t;\n        else if (t->getRootNodeID() == 9) t9 = t;\n        if (t0 != nullptr && t9 != nullptr) break;\n    }\n    // Show the trees' layout.\n    writeStringToFile(t0->underlyingGraph()->writeTglf(), \"output/\" \"collateralexpand02_\" \"tree0_layout.tglf\");\n    writeStringToFile(t9->underlyingGraph()->writeTglf(), \"output/\" \"collateralexpand02_\" \"tree9_layout.tglf\");\n\n    //bool verbose = false;\n\n    // Get all possible placements, with the usual settings:\n    opts.treePlacement_favourCardinal = true;\n    opts.treePlacement_favourExternal = true;\n    opts.treePlacement_favourIsolation = true;\n    TreePlacements tps0 = faceSet.listAllPossibleTreePlacements(t0);\n    //if (verbose) for (TreePlacement_SP tp : tps) cout << tp->toString();\n    TreePlacements tps9 = faceSet.listAllPossibleTreePlacements(t9);\n\n    // Get the NORTH placements.\n    TreePlacement_SP north0 = nullptr,\n                     north9 = nullptr;\n    for (TreePlacement_SP tp : tps0) if (tp->getPlacementDir() == CompassDir::NORTH) {north0 = tp; break;}\n    for (TreePlacement_SP tp : tps9) if (tp->getPlacementDir() == CompassDir::NORTH) {north9 = tp; break;}\n\n    // Insert the tree box for the placement at node 0.\n    double padding = iel/4.0;\n    north0->insertTreeNode(padding);\n    // Show the result.\n    writeStringToFile(P->writeTglf(), \"output/\" \"collateralexpand02_\" \"00_with_tree_box_at_0.tglf\");\n\n    // Now do collateral expansion for the placement at node 9.\n    ProjSeq_SP ps9 = faceSet.getExternalFace()->doCollateralExpansion(north9);\n    cout << ps9->toString() << endl;\n    // Show the result.\n    writeStringToFile(P->writeTglf(), \"output/\" \"collateralexpand02_\" \"01_expanded_for_box_at_9.tglf\");\n\n    // Insert the tree box for the placement at node 9.\n    north9->insertTreeNode(padding);\n    // Show the result.\n    writeStringToFile(P->writeTglf(), \"output/\" \"collateralexpand02_\" \"02_with_tree_box_at_9.tglf\");\n\n    return 0;\n}\n"
  },
  {
    "path": "cola/libdialect/tests/conncomps.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libdialect - A library for computing DiAlEcT layouts:\n *                 D = Decompose/Distribute\n *                 A = Arrange\n *                 E = Expand/Emend\n *                 T = Transform\n *\n * Copyright (C) 2018  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n * Author(s):   Steve Kieffer   <http://skieffer.info>\n*/\n\n#include <vector>\n\n#include \"libvpsc/assertions.h\"\n#include \"libdialect/io.h\"\n#include \"libdialect/util.h\"\n#include \"libdialect/graphs.h\"\n\nusing namespace dialect;\n\nusing std::vector;\n\nint main(void) {\n    Graph graph = *buildGraphFromTglfFile(\"graphs/\" \"special/components.tglf\");\n    vector<Graph_SP> comps = graph.getConnComps();\n    // We designed the test case with 7 components.\n    // First check the raw number.\n    COLA_ASSERT(comps.size() == 7);\n    // And also write each component to a separate file for visual check.\n    size_t i = 0;\n    for (auto p : comps) {\n        writeStringToFile(\n            p->writeTglf(),\n            string_format(\"output/\" \"conncomps_\" \"comp_%d.tglf\", i++)\n        );\n    }\n    return 0;\n}\n"
  },
  {
    "path": "cola/libdialect/tests/containedsegment01.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libdialect - A library for computing DiAlEcT layouts:\n *                 D = Decompose/Distribute\n *                 A = Arrange\n *                 E = Expand/Emend\n *                 T = Transform\n *\n * Copyright (C) 2018  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n * Author(s):   Steve Kieffer   <http://skieffer.info>\n*/\n\n#include <vector>\n#include <iostream>\n\n#include \"libvpsc/assertions.h\"\n#include \"libavoid/geomtypes.h\"\n\n#include \"libdialect/commontypes.h\"\n#include \"libdialect/io.h\"\n#include \"libdialect/graphs.h\"\n#include \"libdialect/util.h\"\n#include \"libdialect/routing.h\"\n#include \"libdialect/opts.h\"\n#include \"libdialect/planarise.h\"\n#include \"libdialect/faces.h\"\n#include \"libdialect/peeling.h\"\n#include \"libdialect/trees.h\"\n#include \"libdialect/treeplacement.h\"\n#include \"libdialect/expansion.h\"\n\nusing namespace dialect;\n\nusing Avoid::Point;\n\nusing std::vector;\nusing std::cout;\nusing std::endl;\n\nvector<id_type> nodes2ids(Nodes nodes) {\n    vector<id_type> ids;\n    for (Node_SP u : nodes) ids.push_back(u->id());\n    return ids;\n}\n\nint main(void) {\n\n    HolaOpts opts;\n    // Build a graph.\n    Graph_SP graph = buildGraphFromTglfFile(\"graphs/\" \"special/treeplacement4.tglf\");\n    // Peel.\n    Trees trees = peel(*graph);\n    // There should be two trees.\n    COLA_ASSERT(trees.size() == 2);\n    // Give the trees their symmetric layout.\n    double iel = graph->getIEL();\n    for (Tree_SP t : trees) t->symmetricLayout(CardinalDir::EAST, iel/4.0, iel, opts.preferConvexTrees);\n    // Do an ortho routing and planarise the core.\n    LeaflessOrthoRouter lor(graph, opts);\n    lor.setShapeBufferDistanceIELScalar(0.125);\n    lor.route();\n    OrthoPlanariser op(graph);\n    Graph_SP P = op.planarise();\n    writeStringToFile(P->writeTglf(), \"output/\" \"containedsegment01_\" \"planar_layout.tglf\");\n\n    // Compute the face set.\n    FaceSet faceSet(P);\n\n    // Get ahold of the tree rooted at node 0.\n    Tree_SP t0 = nullptr;\n    for (Tree_SP t : trees) {\n        if (t->getRootNodeID() == 0) {\n            t0 = t;\n            break;\n        }\n    }\n    // Show the tree's layout.\n    //writeStringToFile(t0->underlyingGraph()->writeTglf(), \"output/\" \"containedsegment01_\" \"tree_layout.tglf\");\n\n    bool verbose = false;\n\n    // Get all possible placements, with the usual settings:\n    opts.treePlacement_favourCardinal = true;\n    opts.treePlacement_favourExternal = true;\n    opts.treePlacement_favourIsolation = true;\n    TreePlacements tps = faceSet.listAllPossibleTreePlacements(t0);\n    if (verbose) for (TreePlacement_SP tp : tps) cout << tp->toString();\n\n    // If in choosing a best placement we no longer favour external placement,\n    // then the tree should be placed SOUTH, due to isolation.\n    opts.treePlacement_favourExternal = false;\n    TreePlacement_SP best = chooseBestPlacement(tps, opts);\n    if (verbose) cout << best->toString();\n    COLA_ASSERT(best->getPlacementDir() == CompassDir::SOUTH);\n\n    // Compute the ContainedSegments for this placement.\n    vector<ContainedSegment_SP> cses;\n    ExpansionManager em(best, vpsc::HORIZONTAL);\n    for (ExpansionGoal_SP eg : em.getGoals()) {\n        bool ignoreCollateralTreeBoxes = true;\n        ContainedSegment_SP cs = eg->computeContainedSegment(ignoreCollateralTreeBoxes);\n        cses.push_back(cs);\n        cout << cs->toString() << endl;\n    }\n\n    // Insert the tree box for this placement.\n    double padding = iel/4.0;\n    best->insertTreeNode(padding);\n    // Show the result.\n    std::string tglfWithBox = P->writeTglf();\n    writeStringToFile(tglfWithBox, \"output/\" \"containedsegment01_\" \"with_tree_box.tglf\");\n\n    // Check\n    Node_SP u0 = graph->getNode(0),\n            u1 = graph->getNode(1),\n            u2 = graph->getNode(2),\n            u7 = graph->getNode(7),\n            ub = best->getBoxNode();\n    cout << \"box node id: \" << ub->id() << endl;\n    Point   c0 = u0->getCentre(),\n            c1 = u1->getCentre(),\n            c7 = u7->getCentre();\n    BoundingBox b0 = u0->getBoundingBox(),\n                b2 = u2->getBoundingBox(),\n                bb = ub->getBoundingBox();\n\n    cout << \"Basept should be: \" << c0.x << \",\" << b0.Y << endl;\n    cout << \"South goal should be to \" << b2.y << \" toward \" << bb.Y << endl;\n    cout << \"West goal should be to \" << c7.x << \" toward \" << bb.x << endl;\n    cout << \"East goal should be to \" << c1.x << \" toward \" << bb.X << endl;\n\n    Point bp = Point(c0.x, b0.Y);\n    COLA_ASSERT(cses[0]->basept == bp);\n    COLA_ASSERT(cses[1]->basept == bp);\n    COLA_ASSERT(cses[2]->basept == bp);\n\n    COLA_ASSERT(cses[0]->localGoalPt.y  == b2.y);\n    COLA_ASSERT(cses[0]->globalGoalPt.y == bb.Y);\n\n    COLA_ASSERT(cses[1]->localGoalPt.x  == c7.x);\n    COLA_ASSERT(cses[1]->globalGoalPt.x == bb.x);\n\n    COLA_ASSERT(cses[2]->localGoalPt.x  == c1.x);\n    COLA_ASSERT(cses[2]->globalGoalPt.x == bb.X);\n\n    return 0;\n}\n"
  },
  {
    "path": "cola/libdialect/tests/destress.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libdialect - A library for computing DiAlEcT layouts:\n *                 D = Decompose/Distribute\n *                 A = Arrange\n *                 E = Expand/Emend\n *                 T = Transform\n *\n * Copyright (C) 2018  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n * Author(s):   Steve Kieffer   <http://skieffer.info>\n*/\n\n#include <iostream>\n\n#include \"libdialect/commontypes.h\"\n#include \"libdialect/io.h\"\n#include \"libdialect/graphs.h\"\n\nusing namespace dialect;\n\nusing std::cout;\nusing std::endl;\n\nint main(void) {\n\n    ColaOptions opts;\n\n    // CFDL\n    cout << \"Destress metro/sydney using CFDL...\" << endl;\n    Graph_SP graph = buildGraphFromTglfFile(\"graphs/\" \"metro/sydney.tglf\");\n    graph->destress(opts);\n    writeStringToFile(graph->writeTglf(), \"output/\" \"destress_\" \"metro_sydney_cfdl.tglf\");\n\n    // CML\n    cout << \"Destress metro/sydney using CML...\" << endl;\n    Graph_SP graph2 = buildGraphFromTglfFile(\"graphs/\" \"metro/sydney.tglf\");\n    opts.useMajorization = true;\n    graph2->destress(opts);\n    writeStringToFile(graph2->writeTglf(), \"output/\" \"destress_\" \"metro_sydney_cml.tglf\");\n\n    return 0;\n}\n"
  },
  {
    "path": "cola/libdialect/tests/destress02.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libdialect - A library for computing DiAlEcT layouts:\n *                 D = Decompose/Distribute\n *                 A = Arrange\n *                 E = Expand/Emend\n *                 T = Transform\n *\n * Copyright (C) 2018  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n * Author(s):   Steve Kieffer   <http://skieffer.info>\n*/\n\n#include <iostream>\n\n#include \"libdialect/commontypes.h\"\n#include \"libdialect/io.h\"\n#include \"libdialect/graphs.h\"\n\nusing namespace dialect;\n\nusing std::cout;\nusing std::endl;\n\nint main(void) {\n\n    ColaOptions opts;\n    Graph_SP graph = buildGraphFromTglfFile(\"graphs/\" \"special/coincidentnodes.tglf\");\n    graph->destress(opts);\n    writeStringToFile(graph->writeTglf(), \"output/\" \"destress02_\" \"destressed.tglf\");\n\n    return 0;\n}\n"
  },
  {
    "path": "cola/libdialect/tests/destress_aca.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libdialect - A library for computing DiAlEcT layouts:\n *                 D = Decompose/Distribute\n *                 A = Arrange\n *                 E = Expand/Emend\n *                 T = Transform\n *\n * Copyright (C) 2018  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n * Author(s):   Steve Kieffer   <http://skieffer.info>\n*/\n\n#include <string>\n#include <vector>\n#include <utility>\n#include <iostream>\n\n#include \"libvpsc/assertions.h\"\n#include \"libdialect/commontypes.h\"\n#include \"libdialect/io.h\"\n#include \"libdialect/graphs.h\"\n#include \"libdialect/aca.h\"\n\nusing namespace dialect;\n\nusing std::string;\nusing std::vector;\nusing std::pair;\nusing std::cout;\nusing std::endl;\n\nvector< pair<string, string> > names {\n      {\"special\", \"X_4\"}\n    , {\"random\", \"v40e44\"}\n    , {\"metro\", \"sydney\"}\n};\n\nint main(void) {\n    cout << \"ACA + Destress\" << endl;\n    ColaOptions opts;\n    //opts.useMajorization = true;\n    for (auto p : names) {\n        string dir = p.first, file = p.second;\n        Graph_SP graph = buildGraphFromTglfFile(\"graphs/\"+dir+\"/\"+file+\".tglf\");\n        cout << dir << \"/\" << file << \"...\" << std::flush;\n        graph->getIEL();\n        ACALayout aca(graph);\n        //aca.outputInstanceToSVG(\"output/\" \"destress_aca_\"+dir+\"_\"+file+\"_instance\");\n        aca.layout();\n        graph->updateNodesFromRects();\n        aca.updateSepMatrix();\n        graph->destress(opts);\n        cout << \"done\" << endl;\n        writeStringToFile(graph->writeTglf(), \"output/\" \"destress_aca_\"+dir+\"_\"+file+\".tglf\");\n    }\n    return 0;\n}\n"
  },
  {
    "path": "cola/libdialect/tests/expand01.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libdialect - A library for computing DiAlEcT layouts:\n *                 D = Decompose/Distribute\n *                 A = Arrange\n *                 E = Expand/Emend\n *                 T = Transform\n *\n * Copyright (C) 2018  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n * Author(s):   Steve Kieffer   <http://skieffer.info>\n*/\n\n#include <vector>\n#include <iostream>\n\n#include \"libvpsc/assertions.h\"\n\n#include \"libdialect/commontypes.h\"\n#include \"libdialect/io.h\"\n#include \"libdialect/graphs.h\"\n#include \"libdialect/util.h\"\n#include \"libdialect/routing.h\"\n#include \"libdialect/opts.h\"\n#include \"libdialect/planarise.h\"\n#include \"libdialect/faces.h\"\n#include \"libdialect/peeling.h\"\n#include \"libdialect/trees.h\"\n#include \"libdialect/treeplacement.h\"\n#include \"libdialect/constraints.h\"\n\nusing namespace dialect;\n\nusing std::vector;\nusing std::cout;\nusing std::endl;\n\nvector<id_type> nodes2ids(Nodes nodes) {\n    vector<id_type> ids;\n    for (Node_SP u : nodes) ids.push_back(u->id());\n    return ids;\n}\n\nint main(void) {\n\n    // Purpose of test: See that an interior face can be expanded to make room for a single tree box.\n\n    HolaOpts opts;\n    // Build a graph.\n    Graph_SP graph = buildGraphFromTglfFile(\"graphs/\" \"special/treeplacement4.tglf\");\n    // Peel.\n    Trees trees = peel(*graph);\n    // There should be two trees.\n    COLA_ASSERT(trees.size() == 2);\n    // Give the trees their symmetric layout.\n    double iel = graph->getIEL();\n    for (Tree_SP t : trees) t->symmetricLayout(CardinalDir::EAST, iel/4.0, iel, opts.preferConvexTrees);\n    // Do an ortho routing and planarise the core.\n    LeaflessOrthoRouter lor(graph, opts);\n    lor.setShapeBufferDistanceIELScalar(0.125);\n    lor.route();\n    OrthoPlanariser op(graph);\n    Graph_SP P = op.planarise();\n    writeStringToFile(P->writeTglf(), \"output/\" \"expand01_\" \"planar_layout.tglf\");\n\n    // Compute the face set.\n    FaceSet faceSet(P);\n\n    // Get ahold of the tree rooted at node 0.\n    Tree_SP t0 = nullptr;\n    for (Tree_SP t : trees) {\n        if (t->getRootNodeID() == 0) {\n            t0 = t;\n            break;\n        }\n    }\n    // Show the tree's layout.\n    //writeStringToFile(t0->underlyingGraph()->writeTglf(), \"output/\" \"expand01_\" \"tree_layout.tglf\");\n\n    bool verbose = false;\n\n    // Get all possible placements, with the usual settings:\n    opts.treePlacement_favourCardinal = true;\n    opts.treePlacement_favourExternal = true;\n    opts.treePlacement_favourIsolation = true;\n    TreePlacements tps = faceSet.listAllPossibleTreePlacements(t0);\n    if (verbose) for (TreePlacement_SP tp : tps) cout << tp->toString();\n\n    // If in choosing a best placement we no longer favour external placement,\n    // then the tree should be placed SOUTH, due to isolation.\n    opts.treePlacement_favourExternal = false;\n    TreePlacement_SP best = chooseBestPlacement(tps, opts);\n    if (verbose) cout << best->toString();\n    COLA_ASSERT(best->getPlacementDir() == CompassDir::SOUTH);\n\n    // Expand the face to make room for the tree box.\n    bool doCostlierDimFirst = true;\n    double padding = iel/4.0;\n    ProjSeq_SP ps = best->buildBestProjSeq(padding, doCostlierDimFirst);\n    ColaOptions colaOpts;\n    colaOpts.preventOverlaps = true;\n    colaOpts.solidifyAlignedEdges = true;\n    P->applyProjSeq(colaOpts, *ps);\n    writeStringToFile(P->writeTglf(), \"output/\" \"expand01_\" \"expanded.tglf\");\n\n    // Insert the tree box for this placement.\n    best->insertTreeNode(padding);\n    // Show the result.\n    std::string tglfWithBox = P->writeTglf();\n    writeStringToFile(tglfWithBox, \"output/\" \"expand01_\" \"expanded_with_tree_box.tglf\");\n\n\n\n\n    return 0;\n}\n"
  },
  {
    "path": "cola/libdialect/tests/expand02.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libdialect - A library for computing DiAlEcT layouts:\n *                 D = Decompose/Distribute\n *                 A = Arrange\n *                 E = Expand/Emend\n *                 T = Transform\n *\n * Copyright (C) 2018  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n * Author(s):   Steve Kieffer   <http://skieffer.info>\n*/\n\n#include <vector>\n#include <iostream>\n\n#include \"libvpsc/assertions.h\"\n\n#include \"libdialect/commontypes.h\"\n#include \"libdialect/io.h\"\n#include \"libdialect/graphs.h\"\n#include \"libdialect/util.h\"\n#include \"libdialect/routing.h\"\n#include \"libdialect/opts.h\"\n#include \"libdialect/planarise.h\"\n#include \"libdialect/faces.h\"\n#include \"libdialect/peeling.h\"\n#include \"libdialect/trees.h\"\n#include \"libdialect/treeplacement.h\"\n#include \"libdialect/constraints.h\"\n\nusing namespace dialect;\n\nusing std::vector;\nusing std::cout;\nusing std::endl;\n\nvector<id_type> nodes2ids(Nodes nodes) {\n    vector<id_type> ids;\n    for (Node_SP u : nodes) ids.push_back(u->id());\n    return ids;\n}\n\nint main(void) {\n\n    HolaOpts opts;\n    // Build a graph.\n    Graph_SP graph = buildGraphFromTglfFile(\"graphs/\" \"special/expand02.tglf\");\n    // Peel.\n    Trees trees = peel(*graph);\n    // There should be two trees.\n    COLA_ASSERT(trees.size() == 2);\n    // Give the trees their symmetric layout.\n    double iel = graph->getIEL();\n    for (Tree_SP t : trees) t->symmetricLayout(CardinalDir::EAST, iel/4.0, iel, opts.preferConvexTrees);\n    // Do an ortho routing and planarise the core.\n    LeaflessOrthoRouter lor(graph, opts);\n    lor.setShapeBufferDistanceIELScalar(0.125);\n    lor.route();\n    OrthoPlanariser op(graph);\n    Graph_SP P = op.planarise();\n    writeStringToFile(P->writeTglf(), \"output/\" \"expand02_\" \"planar_layout.tglf\");\n\n    // Compute the face set.\n    FaceSet faceSet(P);\n\n    // Get ahold of the two trees, rooted at nodes 0 and 9.\n    Tree_SP t0 = nullptr,\n            t9 = nullptr;\n    for (Tree_SP t : trees) {\n        if (t->getRootNodeID() == 0) t0 = t;\n        else if (t->getRootNodeID() == 9) t9 = t;\n        if (t0 != nullptr && t9 != nullptr) break;\n    }\n    // Show the trees' layout.\n    //writeStringToFile(t0->underlyingGraph()->writeTglf(), \"output/\" \"expand02_\" \"tree0_layout.tglf\");\n    //writeStringToFile(t9->underlyingGraph()->writeTglf(), \"output/\" \"expand02_\" \"tree9_layout.tglf\");\n\n    //bool verbose = false;\n\n    // Get all possible placements, with the usual settings:\n    opts.treePlacement_favourCardinal = true;\n    opts.treePlacement_favourExternal = true;\n    opts.treePlacement_favourIsolation = true;\n    TreePlacements tps0 = faceSet.listAllPossibleTreePlacements(t0);\n    //if (verbose) for (TreePlacement_SP tp : tps) cout << tp->toString();\n    TreePlacements tps9 = faceSet.listAllPossibleTreePlacements(t9);\n\n    // Get the SOUTH placement at node 0, and the SW placement at node 9 with WEST growth direction.\n    TreePlacement_SP tp0 = nullptr,\n                     tp9 = nullptr;\n    for (TreePlacement_SP tp : tps0) if (tp->getPlacementDir() == CompassDir::SOUTH) {tp0 = tp; break;}\n    for (TreePlacement_SP tp : tps9) if (tp->getPlacementDir() == CompassDir::SW && tp->getGrowthDir() == CardinalDir::WEST) {tp9 = tp; break;}\n\n    // Set up for expansions.\n    bool doCostlierDimFirst = true;\n    double padding = iel/4.0;\n    ColaOptions colaOpts;\n    colaOpts.preventOverlaps = true;\n    colaOpts.solidifyAlignedEdges = true;\n\n    // Expand to make room for tree at node 0, insert the tree box, and show the result.\n    ProjSeq_SP ps0 = tp0->buildBestProjSeq(padding, doCostlierDimFirst);\n    P->applyProjSeq(colaOpts, *ps0);\n    tp0->insertTreeNode(padding);\n    writeStringToFile(P->writeTglf(), \"output/\" \"expand02_\" \"00_tree0_placed.tglf\");\n\n    // Now do likewise for the tree at node 9.\n    ProjSeq_SP ps9 = tp9->buildBestProjSeq(padding, doCostlierDimFirst);\n    P->applyProjSeq(colaOpts, *ps9);\n    tp9->insertTreeNode(padding);\n    writeStringToFile(P->writeTglf(), \"output/\" \"expand02_\" \"01_tree9_placed.tglf\");\n\n    return 0;\n}\n"
  },
  {
    "path": "cola/libdialect/tests/expand03.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libdialect - A library for computing DiAlEcT layouts:\n *                 D = Decompose/Distribute\n *                 A = Arrange\n *                 E = Expand/Emend\n *                 T = Transform\n *\n * Copyright (C) 2018  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n * Author(s):   Steve Kieffer   <http://skieffer.info>\n*/\n\n#include <vector>\n#include <iostream>\n\n#include \"libvpsc/assertions.h\"\n\n#include \"libdialect/commontypes.h\"\n#include \"libdialect/io.h\"\n#include \"libdialect/graphs.h\"\n#include \"libdialect/util.h\"\n#include \"libdialect/routing.h\"\n#include \"libdialect/opts.h\"\n#include \"libdialect/planarise.h\"\n#include \"libdialect/faces.h\"\n#include \"libdialect/peeling.h\"\n#include \"libdialect/trees.h\"\n#include \"libdialect/treeplacement.h\"\n#include \"libdialect/constraints.h\"\n#include \"libdialect/nodeconfig.h\"\n\nusing namespace dialect;\n\nusing std::vector;\nusing std::cout;\nusing std::endl;\n\nint main(void) {\n\n    HolaOpts opts;\n    // Build a graph.\n    Graph_SP graph = buildGraphFromTglfFile(\"graphs/\" \"special/expand03.tglf\");\n    // Peel.\n    Trees trees = peel(*graph);\n    // Do an OrthoHub layout on the core.\n    OrthoHubLayoutOptions ohl_opts;\n    OrthoHubLayout ohl(graph, ohl_opts);\n    ohl.layout();\n    // Show result.\n    writeStringToFile(graph->writeTglf(), \"output/\" \"expand03_\" \"ortho_core.tglf\");\n    // There should be four trees.\n    COLA_ASSERT(trees.size() == 4);\n    // Give the trees their symmetric layout.\n    double iel = graph->getIEL();\n    for (Tree_SP t : trees) t->symmetricLayout(CardinalDir::EAST, iel/4.0, iel, opts.preferConvexTrees);\n    // Do an ortho routing and planarise the core.\n    LeaflessOrthoRouter lor(graph, opts);\n    lor.setShapeBufferDistanceIELScalar(0.125);\n    lor.route();\n    OrthoPlanariser op(graph);\n    Graph_SP P = op.planarise();\n    //writeStringToFile(P->writeTglf(), \"output/\" \"expand03_\" \"planar_layout.tglf\");\n\n    // Reattach trees.\n    //P->m_debugOutputPath = \"output/\" \"expand03_\";\n    //P->m_projectionDebugLevel = 2;\n    reattachTrees(P, trees, opts);\n    writeStringToFile(P->writeTglf(), \"output/\" \"expand03_\" \"with_tree_boxes.tglf\");\n\n    return 0;\n}\n"
  },
  {
    "path": "cola/libdialect/tests/expand04.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libdialect - A library for computing DiAlEcT layouts:\n *                 D = Decompose/Distribute\n *                 A = Arrange\n *                 E = Expand/Emend\n *                 T = Transform\n *\n * Copyright (C) 2018  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n * Author(s):   Steve Kieffer   <http://skieffer.info>\n*/\n\n#include <vector>\n#include <iostream>\n#include <memory>\n\n#include \"libvpsc/assertions.h\"\n\n#include \"libdialect/commontypes.h\"\n#include \"libdialect/io.h\"\n#include \"libdialect/graphs.h\"\n#include \"libdialect/util.h\"\n#include \"libdialect/routing.h\"\n#include \"libdialect/opts.h\"\n#include \"libdialect/planarise.h\"\n#include \"libdialect/faces.h\"\n#include \"libdialect/peeling.h\"\n#include \"libdialect/trees.h\"\n#include \"libdialect/treeplacement.h\"\n#include \"libdialect/constraints.h\"\n#include \"libdialect/nodeconfig.h\"\n\nusing namespace dialect;\n\nusing std::vector;\nusing std::cout;\nusing std::endl;\n\nint main(void) {\n\n    HolaOpts opts;\n    // Build a graph.\n    Graph_SP graph = buildGraphFromTglfFile(\"graphs/\" \"special/expand04.tglf\");\n    // Peel.\n    Trees trees = peel(*graph);\n\n    // Give the trees their symmetric layout.\n    double iel = graph->getIEL();\n    Tree_SP t0 = nullptr,\n            t1 = nullptr;\n    for (Tree_SP t : trees) {\n        t->symmetricLayout(CardinalDir::EAST, iel/4.0, iel, opts.preferConvexTrees);\n        id_type rid = t->getRootNodeID();\n        if (rid == 0) t0 = t;\n        else if (rid == 1) t1 = t;\n    }\n\n    // Planarise the core.\n    OrthoPlanariser op(graph);\n    Graph_SP P = op.planarise();\n    writeStringToFile(P->writeTglf(), \"output/\" \"expand04_\" \"00_planar_layout.tglf\");\n\n    // Compute the faces of the core.\n    FaceSet_SP faceset = std::make_shared<FaceSet>(P);\n    // Get all placements for both trees.\n    TreePlacements tps0 = faceset->listAllPossibleTreePlacements(t0);\n    TreePlacements tps1 = faceset->listAllPossibleTreePlacements(t1);\n    // Find the ones we want.\n    TreePlacement_SP tp0 = nullptr,\n                     tp1 = nullptr;\n    for (TreePlacement_SP tp : tps0) {\n        if (tp->getPlacementDir() == CompassDir::EAST) {\n            tp0 = tp;\n            break;\n        }\n    }\n    for (TreePlacement_SP tp : tps1) {\n        if (tp->getPlacementDir() == CompassDir::WEST) {\n            tp1 = tp;\n            break;\n        }\n    }\n    // Attach the one at Node 1.\n    double padding = P->getIEL()/4.0;\n    tp1->insertTreeNode(padding);\n    writeStringToFile(P->writeTglf(), \"output/\" \"expand04_\" \"01_with_first_tree_box.tglf\");\n\n    // Now try to expand for the placement at Node 0.\n    ProjSeq_SP ps = tp0->buildBestProjSeq(padding, true);\n    writeStringToFile(P->writeTglf(), \"output/\" \"expand04_\" \"02_build_proj_seq.tglf\");\n\n    ColaOptions colaOpts;\n    colaOpts.preventOverlaps = true;\n    colaOpts.solidifyAlignedEdges = true;\n    P->applyProjSeq(colaOpts, *ps);\n    writeStringToFile(P->writeTglf(), \"output/\" \"expand04_\" \"03_apply_proj_seq.tglf\");\n\n    // Insert the other tree node.\n    tp0->insertTreeNode(padding);\n    writeStringToFile(P->writeTglf(), \"output/\" \"expand04_\" \"04_insert_second_tree_box.tglf\");\n\n    return 0;\n}\n"
  },
  {
    "path": "cola/libdialect/tests/expand05.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libdialect - A library for computing DiAlEcT layouts:\n *                 D = Decompose/Distribute\n *                 A = Arrange\n *                 E = Expand/Emend\n *                 T = Transform\n *\n * Copyright (C) 2018  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n * Author(s):   Steve Kieffer   <http://skieffer.info>\n*/\n\n#include <vector>\n#include <iostream>\n#include <memory>\n\n#include \"libvpsc/assertions.h\"\n\n#include \"libdialect/commontypes.h\"\n#include \"libdialect/io.h\"\n#include \"libdialect/graphs.h\"\n#include \"libdialect/util.h\"\n#include \"libdialect/routing.h\"\n#include \"libdialect/opts.h\"\n#include \"libdialect/planarise.h\"\n#include \"libdialect/faces.h\"\n#include \"libdialect/peeling.h\"\n#include \"libdialect/trees.h\"\n#include \"libdialect/treeplacement.h\"\n#include \"libdialect/constraints.h\"\n#include \"libdialect/nodeconfig.h\"\n\nusing namespace dialect;\n\nusing std::vector;\nusing std::cout;\nusing std::endl;\n\nint main(void) {\n\n    HolaOpts opts;\n    // Build the graph.\n    Graph_SP graph = buildGraphFromTglfFile(\"graphs/\" \"special/expand05.tglf\");\n    // Peel.\n    Trees trees = peel(*graph);\n\n    // Give the trees their symmetric layout.\n    double iel = graph->getIEL();\n    Tree_SP t0 = nullptr;\n    for (Tree_SP t : trees) {\n        t->symmetricLayout(CardinalDir::EAST, iel/4.0, iel, opts.preferConvexTrees);\n        id_type rid = t->getRootNodeID();\n        if (rid == 0) t0 = t;\n    }\n\n    // Planarise the core.\n    OrthoPlanariser op(graph);\n    Graph_SP P = op.planarise();\n    writeStringToFile(P->writeTglf(), \"output/\" \"expand05_\" \"00_planar_layout.tglf\");\n\n    // Compute the faces of the core.\n    FaceSet_SP faceset = std::make_shared<FaceSet>(P);\n    // Get all placements for the tree.\n    TreePlacements tps0 = faceset->listAllPossibleTreePlacements(t0);\n    // Find the one we want.\n    TreePlacement_SP tp0 = nullptr;\n    for (TreePlacement_SP tp : tps0) {\n        if (tp->getPlacementDir() == CompassDir::SE && tp->getGrowthDir() == CardinalDir::EAST) {\n            tp0 = tp;\n            break;\n        }\n    }\n\n    // Attempt to expand for the placement.\n    double padding = P->getIEL()/4.0;\n    ProjSeq_SP ps = tp0->buildBestProjSeq(padding, true);\n\n    ColaOptions colaOpts;\n    colaOpts.preventOverlaps = true;\n    colaOpts.solidifyAlignedEdges = true;\n    P->applyProjSeq(colaOpts, *ps);\n\n    // Insert the tree node.\n    tp0->insertTreeNode(padding);\n    writeStringToFile(P->writeTglf(), \"output/\" \"expand05_\" \"01_insert_tree_box.tglf\");\n\n    return 0;\n}\n"
  },
  {
    "path": "cola/libdialect/tests/expand06.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libdialect - A library for computing DiAlEcT layouts:\n *                 D = Decompose/Distribute\n *                 A = Arrange\n *                 E = Expand/Emend\n *                 T = Transform\n *\n * Copyright (C) 2018  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n * Author(s):   Steve Kieffer   <http://skieffer.info>\n*/\n\n#include <vector>\n#include <iostream>\n#include <memory>\n\n#include \"libvpsc/assertions.h\"\n\n#include \"libdialect/commontypes.h\"\n#include \"libdialect/io.h\"\n#include \"libdialect/graphs.h\"\n#include \"libdialect/util.h\"\n#include \"libdialect/routing.h\"\n#include \"libdialect/opts.h\"\n#include \"libdialect/planarise.h\"\n#include \"libdialect/faces.h\"\n#include \"libdialect/peeling.h\"\n#include \"libdialect/trees.h\"\n#include \"libdialect/treeplacement.h\"\n#include \"libdialect/constraints.h\"\n#include \"libdialect/nodeconfig.h\"\n#include \"libdialect/logging.h\"\n\nusing namespace dialect;\n\nusing std::vector;\nusing std::cout;\nusing std::endl;\n\nint main(void) {\n\n    Logger *logger = new Logger(\"output/\", \"expand06_\", true);\n\n    Graph G;\n    Node_SP u0 = Node::allocate();\n    u0->setDims(30, 30);\n    u0->setCentre(0, 0);\n    G.addNode(u0);\n    Node_SP u1 = Node::allocate();\n    u1->setDims(30, 30);\n    u1->setCentre(100, 0);\n    G.addNode(u1);\n    Edge_SP e0 = Edge::allocate(u0, u1);\n    G.addEdge(e0);\n\n#define twoD\n#ifdef twoD\n    Node_SP u2 = Node::allocate();\n    u2->setDims(30, 30);\n    u2->setCentre(100, 100);\n    G.addNode(u2);\n    Node_SP u3 = Node::allocate();\n    u3->setDims(30, 30);\n    u3->setCentre(0, 100);\n    G.addNode(u3);\n    Edge_SP e1 = Edge::allocate(u1, u2);\n    Edge_SP e2 = Edge::allocate(u2, u3);\n    Edge_SP e3 = Edge::allocate(u3, u0);\n    G.addEdge(e1);\n    G.addEdge(e2);\n    G.addEdge(e3);\n#endif\n\n    SepMatrix &m = G.getSepMatrix();\n\n#define BG\n#ifdef BG\n    m.setCardinalOP(0, 1, CardinalDir::EAST);\n#ifdef twoD\n    m.setCardinalOP(1, 2, CardinalDir::SOUTH);\n    m.setCardinalOP(2, 3, CardinalDir::WEST);\n    m.setCardinalOP(3, 0, CardinalDir::NORTH);\n#endif\n#else\n    m.hAlign(0, 1);\n#ifdef twoD\n    m.hAlign(2, 3);\n    m.vAlign(1, 2);\n    m.vAlign(0, 3);\n#endif\n#endif\n\n#define EBG\n#ifdef EBG\n    m.setExtraBdryGap(20);\n#endif\n\n    logger->log(G, \"00_initial\");\n\n    ColaOptions colaOpts;\n    colaOpts.preventOverlaps = true;\n    colaOpts.solidifyAlignedEdges = true;\n    colaOpts.logger = logger;\n    for (int i = 1; i < 3; ++i) {\n        logger->nextLoggingIndex = i;\n        G.makeFeasible(colaOpts);\n        logger->log(G, string_format(\"%02d_make_feasible_result.tglf\", i));\n    }\n\n    return 0;\n}\n"
  },
  {
    "path": "cola/libdialect/tests/expand07.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libdialect - A library for computing DiAlEcT layouts:\n *                 D = Decompose/Distribute\n *                 A = Arrange\n *                 E = Expand/Emend\n *                 T = Transform\n *\n * Copyright (C) 2018  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n * Author(s):   Steve Kieffer   <http://skieffer.info>\n*/\n\n#include <vector>\n#include <iostream>\n#include <memory>\n\n#include \"libvpsc/assertions.h\"\n\n#include \"libdialect/commontypes.h\"\n#include \"libdialect/io.h\"\n#include \"libdialect/graphs.h\"\n#include \"libdialect/util.h\"\n#include \"libdialect/routing.h\"\n#include \"libdialect/opts.h\"\n#include \"libdialect/planarise.h\"\n#include \"libdialect/faces.h\"\n#include \"libdialect/peeling.h\"\n#include \"libdialect/trees.h\"\n#include \"libdialect/treeplacement.h\"\n#include \"libdialect/constraints.h\"\n#include \"libdialect/nodeconfig.h\"\n#include \"libdialect/logging.h\"\n\nusing namespace dialect;\n\nusing std::vector;\nusing std::cout;\nusing std::endl;\n\nint main(void) {\n\n    Logger *logger = new Logger(\"output/\", \"expand07_\", true);\n    Graph G = *buildGraphFromTglfFile(\"graphs/\" \"special/expand07.tglf\");\n\n//#define cut10\n#ifdef cut10\n    G.severAndRemoveNode(10);\n    G.addEdgeByIDs(9, 14);\n    G.getSepMatrix().vAlign(9, 14);\n    logger->log(G, \"000_cut_10\");\n#endif\n\n    vector<id_type> ids{\n        4, 3, 13, 5, 6, 7\n    };\n    for (id_type id : ids) G.severAndRemoveNode(id);\n\n//#define EBG\n#ifdef EBG\n    G.getSepMatrix().setExtraBdryGap(20);\n#endif\n\n    logger->log(G, \"00_initial\");\n\n    ColaOptions colaOpts;\n    colaOpts.preventOverlaps = true;\n    colaOpts.solidifyAlignedEdges = true;\n    colaOpts.logger = logger;\n    for (int i = 1; i < 5; ++i) {\n        logger->nextLoggingIndex = i;\n        G.makeFeasible(colaOpts);\n        logger->log(G, string_format(\"%02d_make_feasible_result.tglf\", i));\n    }\n\n    return 0;\n}\n"
  },
  {
    "path": "cola/libdialect/tests/expand08.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libdialect - A library for computing DiAlEcT layouts:\n *                 D = Decompose/Distribute\n *                 A = Arrange\n *                 E = Expand/Emend\n *                 T = Transform\n *\n * Copyright (C) 2018  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n * Author(s):   Steve Kieffer   <http://skieffer.info>\n*/\n\n#include <vector>\n#include <iostream>\n#include <memory>\n\n#include \"libvpsc/assertions.h\"\n\n#include \"libdialect/commontypes.h\"\n#include \"libdialect/io.h\"\n#include \"libdialect/graphs.h\"\n#include \"libdialect/util.h\"\n#include \"libdialect/routing.h\"\n#include \"libdialect/opts.h\"\n#include \"libdialect/planarise.h\"\n#include \"libdialect/faces.h\"\n#include \"libdialect/peeling.h\"\n#include \"libdialect/trees.h\"\n#include \"libdialect/treeplacement.h\"\n#include \"libdialect/constraints.h\"\n#include \"libdialect/nodeconfig.h\"\n\nusing namespace dialect;\n\nusing std::vector;\nusing std::cout;\nusing std::endl;\n\nint main(void) {\n\n    HolaOpts opts;\n    // Build a graph.\n    Graph_SP graph = buildGraphFromTglfFile(\"graphs/\" \"special/expand08.tglf\");\n    // Peel.\n    Trees trees = peel(*graph);\n\n    // Give the trees their symmetric layout.\n    double iel = graph->getIEL();\n    Tree_SP t0 = nullptr,\n            t2 = nullptr;\n    for (Tree_SP t : trees) {\n        t->symmetricLayout(CardinalDir::EAST, iel/4.0, iel, opts.preferConvexTrees);\n        id_type rid = t->getRootNodeID();\n        if (rid == 0) t0 = t;\n        else if (rid == 2) t2 = t;\n    }\n\n    // Planarise the core.\n    OrthoPlanariser op(graph);\n    Graph_SP P = op.planarise();\n    writeStringToFile(P->writeTglf(), \"output/\" \"expand08_\" \"00_planar_layout.tglf\");\n\n    // Compute the faces of the core.\n    FaceSet_SP faceset = std::make_shared<FaceSet>(P);\n    // Get all placements for both trees.\n    TreePlacements tps0 = faceset->listAllPossibleTreePlacements(t0);\n    TreePlacements tps2 = faceset->listAllPossibleTreePlacements(t2);\n    // Find the ones we want.\n    TreePlacement_SP tp0 = nullptr,\n                     tp2 = nullptr;\n    for (TreePlacement_SP tp : tps0) {\n        if (tp->getPlacementDir() == CompassDir::EAST) {\n            tp0 = tp;\n            break;\n        }\n    }\n    for (TreePlacement_SP tp : tps2) {\n        if (tp->getPlacementDir() == CompassDir::SOUTH) {\n            tp2 = tp;\n            break;\n        }\n    }\n    // Attach the one at Node 0.\n    double padding = P->getIEL()/4.0;\n    tp0->insertTreeNode(padding);\n    writeStringToFile(P->writeTglf(), \"output/\" \"expand08_\" \"01_with_first_tree_box.tglf\");\n\n    // Now try to expand for the placement at Node 0.\n    ProjSeq_SP ps = tp2->buildBestProjSeq(padding, false);\n    writeStringToFile(P->writeTglf(), \"output/\" \"expand08_\" \"02_build_proj_seq.tglf\");\n\n    ColaOptions colaOpts;\n    colaOpts.preventOverlaps = true;\n    colaOpts.solidifyAlignedEdges = true;\n    P->applyProjSeq(colaOpts, *ps);\n    writeStringToFile(P->writeTglf(), \"output/\" \"expand08_\" \"03_apply_proj_seq.tglf\");\n\n    // Insert the other tree node.\n    tp2->insertTreeNode(padding);\n    writeStringToFile(P->writeTglf(), \"output/\" \"expand08_\" \"04_insert_second_tree_box.tglf\");\n\n    return 0;\n}\n"
  },
  {
    "path": "cola/libdialect/tests/expand09.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libdialect - A library for computing DiAlEcT layouts:\n *                 D = Decompose/Distribute\n *                 A = Arrange\n *                 E = Expand/Emend\n *                 T = Transform\n *\n * Copyright (C) 2018  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n * Author(s):   Steve Kieffer   <http://skieffer.info>\n*/\n\n#include <vector>\n#include <iostream>\n#include <memory>\n\n#include \"libvpsc/assertions.h\"\n\n#include \"libdialect/commontypes.h\"\n#include \"libdialect/io.h\"\n#include \"libdialect/graphs.h\"\n#include \"libdialect/util.h\"\n#include \"libdialect/routing.h\"\n#include \"libdialect/opts.h\"\n#include \"libdialect/planarise.h\"\n#include \"libdialect/faces.h\"\n#include \"libdialect/peeling.h\"\n#include \"libdialect/trees.h\"\n#include \"libdialect/treeplacement.h\"\n#include \"libdialect/constraints.h\"\n#include \"libdialect/nodeconfig.h\"\n\nusing namespace dialect;\n\nusing std::vector;\nusing std::cout;\nusing std::endl;\n\nint main(void) {\n\n    HolaOpts opts;\n    // Build a graph.\n    Graph_SP graph = buildGraphFromTglfFile(\"graphs/\" \"special/expand09.tglf\");\n    // Peel.\n    Trees trees = peel(*graph);\n\n    // Give the trees their symmetric layout.\n    double iel = graph->getIEL();\n    Tree_SP t0 = nullptr,\n            t2 = nullptr;\n    for (Tree_SP t : trees) {\n        t->symmetricLayout(CardinalDir::EAST, iel/4.0, iel, opts.preferConvexTrees);\n        id_type rid = t->getRootNodeID();\n        if (rid == 0) t0 = t;\n        else if (rid == 2) t2 = t;\n    }\n\n    // Planarise the core.\n    OrthoPlanariser op(graph);\n    Graph_SP P = op.planarise();\n    writeStringToFile(P->writeTglf(), \"output/\" \"expand09_\" \"00_planar_layout.tglf\");\n\n    // Compute the faces of the core.\n    FaceSet_SP faceset = std::make_shared<FaceSet>(P);\n    // Get all placements for both trees.\n    TreePlacements tps0 = faceset->listAllPossibleTreePlacements(t0);\n    TreePlacements tps2 = faceset->listAllPossibleTreePlacements(t2);\n    // Find the ones we want.\n    TreePlacement_SP tp0 = nullptr,\n                     tp2 = nullptr;\n    for (TreePlacement_SP tp : tps0) {\n        if (tp->getPlacementDir() == CompassDir::EAST) {\n            tp0 = tp;\n            break;\n        }\n    }\n    for (TreePlacement_SP tp : tps2) {\n        if (tp->getPlacementDir() == CompassDir::SOUTH) {\n            tp2 = tp;\n            break;\n        }\n    }\n    // Attach the one at Node 0.\n    double padding = P->getIEL()/4.0;\n    tp0->insertTreeNode(padding);\n    writeStringToFile(P->writeTglf(), \"output/\" \"expand09_\" \"01_with_first_tree_box.tglf\");\n\n    // Now try to expand for the placement at Node 0.\n    ProjSeq_SP ps = tp2->buildBestProjSeq(padding, false);\n    writeStringToFile(P->writeTglf(), \"output/\" \"expand09_\" \"02_build_proj_seq.tglf\");\n\n    ColaOptions colaOpts;\n    colaOpts.preventOverlaps = true;\n    colaOpts.solidifyAlignedEdges = true;\n    P->applyProjSeq(colaOpts, *ps);\n    writeStringToFile(P->writeTglf(), \"output/\" \"expand09_\" \"03_apply_proj_seq.tglf\");\n\n    // Insert the other tree node.\n    tp2->insertTreeNode(padding);\n    writeStringToFile(P->writeTglf(), \"output/\" \"expand09_\" \"04_insert_second_tree_box.tglf\");\n\n    return 0;\n}\n"
  },
  {
    "path": "cola/libdialect/tests/extrabdrygap.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libdialect - A library for computing DiAlEcT layouts:\n *                 D = Decompose/Distribute\n *                 A = Arrange\n *                 E = Expand/Emend\n *                 T = Transform\n *\n * Copyright (C) 2018  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n * Author(s):   Steve Kieffer   <http://skieffer.info>\n*/\n\n#include \"libvpsc/assertions.h\"\n#include \"libvpsc/rectangle.h\"\n\n#include \"libdialect/io.h\"\n#include \"libdialect/constraints.h\"\n#include \"libdialect/ortho.h\"\n#include \"libdialect/graphs.h\"\n\nusing namespace dialect;\n\nint main(void) {\n\n    Graph_SP graph = buildGraphFromTglfFile(\"graphs/\" \"special/X_4.tglf\");\n    SepMatrix &m = graph->getSepMatrix();\n    m.setCardinalOP(4, 9, CardinalDir::EAST);\n    m.setCardinalOP(4, 5, CardinalDir::SOUTH);\n    m.setCardinalOP(4, 3, CardinalDir::WEST);\n    m.setCardinalOP(4, 13, CardinalDir::NORTH);\n    ColaOptions opts;\n    opts.idealEdgeLength = 10;\n    opts.preventOverlaps = true;\n    graph->destress(opts);\n    writeStringToFile(graph->writeTglf(), \"output/\" \"extrabdrygap_\" \"01_zero_gap.tglf\");\n    m.setExtraBdryGap(30);\n    graph->destress(opts);\n    writeStringToFile(graph->writeTglf(), \"output/\" \"extrabdrygap_\" \"02_extra_gap.tglf\");\n\n}\n"
  },
  {
    "path": "cola/libdialect/tests/faceset01.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libdialect - A library for computing DiAlEcT layouts:\n *                 D = Decompose/Distribute\n *                 A = Arrange\n *                 E = Expand/Emend\n *                 T = Transform\n *\n * Copyright (C) 2018  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n * Author(s):   Steve Kieffer   <http://skieffer.info>\n*/\n\n#include <vector>\n#include <iostream>\n\n#include \"libvpsc/assertions.h\"\n\n#include \"libdialect/commontypes.h\"\n#include \"libdialect/io.h\"\n#include \"libdialect/graphs.h\"\n#include \"libdialect/util.h\"\n#include \"libdialect/routing.h\"\n#include \"libdialect/opts.h\"\n#include \"libdialect/planarise.h\"\n#include \"libdialect/faces.h\"\n\nusing namespace dialect;\n\nusing std::vector;\nusing std::cout;\nusing std::endl;\n\nvector<id_type> nodes2ids(Nodes nodes) {\n    vector<id_type> ids;\n    for (Node_SP u : nodes) ids.push_back(u->id());\n    return ids;\n}\n\nint main(void) {\n\n    // Build a 4-planar, orthogonal layout.\n    Graph_SP graph = buildGraphFromTglfFile(\"graphs/\" \"special/bundlecross.tglf\");\n    HolaOpts opts;\n    LeaflessOrthoRouter lor(graph, opts);\n    lor.setShapeBufferDistanceIELScalar(0.125);\n    lor.route();\n    OrthoPlanariser op(graph);\n    Graph_SP P = op.planarise();\n    writeStringToFile(P->writeTglf(), \"output/\" \"faceset01_\" \"planar_layout.tglf\");\n    // Compute the face set.\n    FaceSet faceSet(P);\n\n    // There should be seven faces.\n    COLA_ASSERT(faceSet.getNumFaces() == 7);\n\n    // Check each face's node sequence.\n    vector<id_type> idSeqs[7] = {\n        {8, 5, 39, 22, 20, 0},\n        {5, 8, 0, 7, 6, 18, 4, 23, 19},\n        {5, 19, 23, 21, 39},\n        {0, 20, 1, 2, 22, 39, 6, 7},\n        {20, 22, 2, 1},\n        {21, 23, 4, 3},\n        {3, 4, 18, 6, 39, 21}\n    };\n    Faces faces = faceSet.getFaces();\n    for (size_t i = 0; i < 7; ++i) {\n        Face_SP F = faces[i];\n        vector<id_type> ids = nodes2ids(F->getNodeSeq());\n        for (id_type id : ids) cout << id << \" \";\n        cout << endl;\n        COLA_ASSERT(ids == idSeqs[i]);\n    }\n\n    // Check external face.\n    for (size_t i = 0; i < 7; ++i) {\n        Face_SP F = faces[i];\n        if (i == 1) { COLA_ASSERT(F->isExternal()); }\n        else { COLA_ASSERT(!F->isExternal()); }\n    }\n\n    // Look at the Sides and Nexes for the concave face #3:\n    Face_SP cc = faces[3];\n    cout << \"Sides and Nexes for lower-left concave Face:\" << endl;\n    for (Side_SP S : cc->getSides()) cout << S->toString() << endl;\n    for (auto p : cc->getNexusLookup()) cout << p.second->toString();\n\n    return 0;\n}\n"
  },
  {
    "path": "cola/libdialect/tests/faceset02.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libdialect - A library for computing DiAlEcT layouts:\n *                 D = Decompose/Distribute\n *                 A = Arrange\n *                 E = Expand/Emend\n *                 T = Transform\n *\n * Copyright (C) 2018  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n * Author(s):   Steve Kieffer   <http://skieffer.info>\n*/\n\n#include <vector>\n#include <iostream>\n#include <map>\n#include <utility>\n#include <set>\n\n#include \"libvpsc/assertions.h\"\n\n#include \"libdialect/commontypes.h\"\n#include \"libdialect/io.h\"\n#include \"libdialect/graphs.h\"\n#include \"libdialect/util.h\"\n#include \"libdialect/routing.h\"\n#include \"libdialect/opts.h\"\n#include \"libdialect/planarise.h\"\n#include \"libdialect/faces.h\"\n\nusing namespace dialect;\n\nusing std::vector;\nusing std::cout;\nusing std::endl;\n\nvector<id_type> nodes2ids(Nodes nodes) {\n    vector<id_type> ids;\n    for (Node_SP u : nodes) ids.push_back(u->id());\n    return ids;\n}\n\nint main(void) {\n\n    // Build a 4-planar, orthogonal layout.\n    Graph_SP graph = buildGraphFromTglfFile(\"graphs/\" \"special/3cross4cross.tglf\");\n    HolaOpts opts;\n    LeaflessOrthoRouter lor(graph, opts);\n    lor.setShapeBufferDistanceIELScalar(0.125);\n    lor.route();\n    OrthoPlanariser op(graph);\n    Graph_SP P = op.planarise();\n    writeStringToFile(P->writeTglf(), \"output/\" \"faceset02_\" \"planar_layout.tglf\");\n    // Compute the face set.\n    FaceSet faceSet(P);\n\n    // Get the external face.\n    Face_SP ext = faceSet.getExternalFace();\n\n    // Display the ids in the node sequence.\n    cout << \"External face:\" << endl << \"    \";\n    Nodes extNodes = ext->getNodeSeq();\n    vector<id_type> extIds = nodes2ids(extNodes);\n    for (id_type id : extIds) cout << id << \" \";\n    cout << endl;\n\n    // We check that data structures have been properly constructed for\n    // our 3-crossing (at node #4) and 4-crossing (at node #11).\n    vector<id_type> crossings{4, 11};\n\n    // Test the neighbour pairs.\n    std::map<id_type, std::vector<std::pair<Node_SP, Node_SP>>> nbrPairs = ext->getNbrPairs();\n    for (id_type id : crossings) {\n        auto pairs = nbrPairs.at(id);\n        cout << string_format(\"Pairs for node %d:\", id) << endl;\n        for (auto q : pairs) {\n            cout << string_format(\"    %d, %d\", q.first->id(), q.second->id()) << endl;\n        }\n    }\n    // There should be the right number of them.\n    COLA_ASSERT(nbrPairs[4].size() == 3);\n    COLA_ASSERT(nbrPairs[11].size() == 4);\n\n    // Show the Sides that include our crossing nodes.\n    cout << \"Sides including crossing Nodes 4 and 11:\" << endl;\n    Sides sides = ext->getSides();\n    for (size_t i = 0; i < sides.size(); ++i) {\n        Side_SP S = sides[i];\n        if (S->containsNode(4) || S->containsNode(11)) {\n            cout << i << \": \" << S->toString() << endl;\n        }\n    }\n\n    // Show the Nexes, and check that they determine the correct neighbours of important directions.\n    std::map<id_type, vector<CompassDir>> direcsPerCrossing{\n        {4,  {CompassDir::NE, CompassDir::EAST, CompassDir::SE, CompassDir::SW, CompassDir::NW}},\n        {11, {CompassDir::NE, CompassDir::SE, CompassDir::SW, CompassDir::NW}}\n    };\n    std::map<id_type, vector<std::set<Side_SP>>> answersPerCrossing{\n        {4, {\n                {sides[31]}, {sides[31]}, {sides[31]}, {sides[24], sides[25]}, {sides[37], sides[38]}\n            }\n        },\n        {11, {\n                {sides[42], sides[43]}, {sides[19], sides[20]}, {sides[12], sides[13]}, {sides[3], sides[4]}\n            }\n        }\n    };\n    NexesById nexusLookup = ext->getNexusLookup();\n    for (id_type id : crossings) {\n        cout << \"Crossing at \" << id << endl;\n        Nexus_SP nexus = nexusLookup.at(id);\n        //cout << nexus->toString();\n        vector<CompassDir> direcs = direcsPerCrossing.at(id);\n        vector<std::set<Side_SP>> answers = answersPerCrossing.at(id);\n        for (size_t i = 0; i < direcs.size(); ++i) {\n            CompassDir d = direcs.at(i);\n            std::set<Side_SP> answer = answers.at(i);\n            std::set<Side_SP> sides = nexus->getNeighboursOfADirection(d);\n            COLA_ASSERT(sides == answer);\n            cout << \"Neighbours of \" << Compass::dirToString(d) << \":\" << endl;\n            for (Side_SP S : sides) cout << \"    \" << S->toString() << endl;\n        }\n    }\n\n    return 0;\n}\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/metro/london.gml",
    "content": "Creator\t\"yFiles\"\nVersion\t\"2.11\"\ngraph\n[\n\thierarchic\t1\n\tlabel\t\"\"\n\tdirected\t1\n\tnode\n\t[\n\t\tid\t0\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-423.8833527214987\n\t\t\ty\t285.3573178615852\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t1\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t64.014986467972\n\t\t\ty\t-168.57444636970587\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t2\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t515.9323978757131\n\t\t\ty\t53.39212013775534\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t3\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-459.17412306245683\n\t\t\ty\t-331.7282072792452\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t4\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t514.3708207854443\n\t\t\ty\t-8.908471748068791\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t5\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-201.36374623903595\n\t\t\ty\t110.83417216118454\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t6\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-111.05004758284849\n\t\t\ty\t143.64406587500207\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t7\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-105.1407191305073\n\t\t\ty\t-287.07738815967133\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t8\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-511.07712166363376\n\t\t\ty\t329.97654897229506\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t9\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t489.27447505017653\n\t\t\ty\t237.6095568189669\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t10\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t100.81976719915247\n\t\t\ty\t73.20826059241483\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t11\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-179.42753472893645\n\t\t\ty\t-301.44877564409165\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t12\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-508.5607965764972\n\t\t\ty\t-308.30804040779526\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t13\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-245.67166455643303\n\t\t\ty\t244.10536981402902\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t14\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-541.6878176219665\n\t\t\ty\t56.95695387128745\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t15\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t404.9132147844623\n\t\t\ty\t95.31414721978115\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t16\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-142.9661399372726\n\t\t\ty\t-346.32685952568124\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t17\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-182.60372155226003\n\t\t\ty\t-123.03307065561933\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t18\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-351.679889130492\n\t\t\ty\t123.74389266329865\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t19\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-363.37577539360257\n\t\t\ty\t220.2922809515493\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t20\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t251.20515923728772\n\t\t\ty\t289.8149115676789\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t21\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t24.3958728254363\n\t\t\ty\t158.349528714852\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t22\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-372.553049544836\n\t\t\ty\t164.84982458465151\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t23\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-110.02808389034487\n\t\t\ty\t-277.1006701666833\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t24\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t558.9524809809532\n\t\t\ty\t-238.02264882927733\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t25\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t47.07708713415707\n\t\t\ty\t-245.57073709000485\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t26\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-216.12587112475063\n\t\t\ty\t-263.4456505202951\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t27\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t67.06301188611337\n\t\t\ty\t235.0944524328845\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t28\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t55.96028062393748\n\t\t\ty\t100.31700641972634\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t29\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t365.0041570142\n\t\t\ty\t169.60451231116394\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t30\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-108.22944679932527\n\t\t\ty\t1.6076292080797998\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t31\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-289.8022771608589\n\t\t\ty\t235.54736205794984\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t32\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-472.51431600987223\n\t\t\ty\t-178.03261644499588\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t33\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-523.1698104724775\n\t\t\ty\t272.2867383305535\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t34\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-189.74457850214918\n\t\t\ty\t-338.12475982298884\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t35\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t390.45911955647875\n\t\t\ty\t114.40433929795864\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t36\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-0.663033742429775\n\t\t\ty\t189.0915929989983\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t37\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t150.43836356238376\n\t\t\ty\t-84.32105959725669\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t38\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-408.32402171783065\n\t\t\ty\t-94.07033854850312\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t39\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t251.4875661395855\n\t\t\ty\t146.80378146388512\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t40\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t32.078850889995124\n\t\t\ty\t10.83107724859667\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t41\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-411.7253714696063\n\t\t\ty\t-329.5597820578304\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t42\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t521.7125318911205\n\t\t\ty\t-117.1380488001854\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t43\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-409.8601516673525\n\t\t\ty\t318.7893458753116\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t44\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-469.6478807803561\n\t\t\ty\t45.17354202303585\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t45\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t391.94541121436396\n\t\t\ty\t-36.36515051434105\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t46\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-244.42849374843775\n\t\t\ty\t-358.91311827168636\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t47\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t208.48176341905446\n\t\t\ty\t-349.2304313734063\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t48\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t16.943543733303613\n\t\t\ty\t-51.736397951837546\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t49\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-514.0950991309455\n\t\t\ty\t45.864372578466714\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t50\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t75.27922839274436\n\t\t\ty\t86.41501167017236\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t51\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-154.68634104369465\n\t\t\ty\t-250.8278871970549\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t52\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-392.0063899062283\n\t\t\ty\t18.17976985429152\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t53\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t456.8063166146451\n\t\t\ty\t-302.0188605984566\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t54\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t571.8373859838669\n\t\t\ty\t-336.834709110723\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t55\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t426.1783094861487\n\t\t\ty\t-109.55886601475697\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t56\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-500.52210382357725\n\t\t\ty\t255.7009280040253\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t57\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t181.8408671076462\n\t\t\ty\t-113.7183680515954\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t58\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-507.2475099408143\n\t\t\ty\t-90.40864864333713\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t59\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t7.549741141512868\n\t\t\ty\t241.02620807876576\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t60\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t198.84973495736153\n\t\t\ty\t180.08588459154964\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t61\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t346.13908755752993\n\t\t\ty\t298.5781544279479\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t62\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-366.79954395427023\n\t\t\ty\t58.39523365358224\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t63\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t298.6528786998067\n\t\t\ty\t134.51133784038927\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t64\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t311.4800721128996\n\t\t\ty\t-34.610522262978975\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t65\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-133.9414889618098\n\t\t\ty\t311.04719240873635\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t66\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t76.83868083671837\n\t\t\ty\t110.6016509943359\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t67\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t208.11300822476255\n\t\t\ty\t-33.467636710583804\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t68\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-452.7182380537718\n\t\t\ty\t-175.66140507537457\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t69\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-41.06802405810197\n\t\t\ty\t169.25303925965875\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t70\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-473.97329652230655\n\t\t\ty\t-169.4333967984742\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t71\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-130.6160324631383\n\t\t\ty\t139.6313094979953\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t72\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-102.34521692606171\n\t\t\ty\t120.29151012933215\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t73\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t164.60084161736893\n\t\t\ty\t124.24489379531371\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t74\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t170.9676143081174\n\t\t\ty\t-314.60655176598914\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t75\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-120.34521848433099\n\t\t\ty\t-126.30403158941613\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t76\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t361.63921723561816\n\t\t\ty\t283.3041499881467\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t77\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t485.80721817129233\n\t\t\ty\t52.12611528819957\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t78\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t190.03176850620616\n\t\t\ty\t-14.469990292711827\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t79\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t203.68362892607956\n\t\t\ty\t-344.8666205472622\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t80\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t316.9126003993846\n\t\t\ty\t159.82650362510833\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t81\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-45.73054307310224\n\t\t\ty\t-21.00601756532302\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t82\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-164.72551653303776\n\t\t\ty\t36.820290285305646\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t83\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t50.758559711327166\n\t\t\ty\t-200.5746485142244\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t84\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-514.9816041495717\n\t\t\ty\t-42.94725256417462\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t85\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t503.0152715153338\n\t\t\ty\t-173.35180842765166\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t86\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-520.09047707442\n\t\t\ty\t71.78387286183647\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t87\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t318.7338238967135\n\t\t\ty\t49.21478788906143\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t88\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-129.0376056962562\n\t\t\ty\t-269.55147798056225\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t89\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t165.29645506498252\n\t\t\ty\t-50.03305132829348\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t90\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t294.2499706120616\n\t\t\ty\t-272.60315235377584\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t91\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t197.84168239563292\n\t\t\ty\t-40.42901413782448\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t92\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t484.0636629879182\n\t\t\ty\t320.4787670566009\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t93\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-88.84042801950073\n\t\t\ty\t-367.6512865217919\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t94\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t214.37847518550257\n\t\t\ty\t50.147444093088836\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t95\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t386.7280413850199\n\t\t\ty\t13.582437735784879\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t96\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-64.30327899905353\n\t\t\ty\t176.05949995708022\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t97\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-430.5031121628222\n\t\t\ty\t89.11819350611034\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t98\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-129.44184585861666\n\t\t\ty\t114.63985765497432\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t99\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t512.9120956342972\n\t\t\ty\t-227.07428940924186\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t100\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-564.6881731186307\n\t\t\ty\t311.7570639255889\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t101\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-282.84836514601943\n\t\t\ty\t336.2950400532145\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t102\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t281.1463002445803\n\t\t\ty\t215.51979843335607\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t103\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t352.6183820670483\n\t\t\ty\t283.5585381813496\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t104\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t134.8699960836043\n\t\t\ty\t-36.74163746621315\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t105\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t413.40174873063086\n\t\t\ty\t-248.37634439792168\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t106\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-450.4776089182218\n\t\t\ty\t37.99508619979218\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t107\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-128.31910756936765\n\t\t\ty\t-235.81413303080413\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t108\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t487.57938733637593\n\t\t\ty\t167.1351441683496\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t109\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t516.8967108209629\n\t\t\ty\t-101.73752083033014\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t110\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-483.70783793461936\n\t\t\ty\t319.72475608404534\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t111\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t252.96837021412614\n\t\t\ty\t138.64715577114532\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t112\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-427.430077462496\n\t\t\ty\t-255.57370710682926\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t113\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t464.8711971112343\n\t\t\ty\t-94.9686184503318\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t114\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t457.77935419078017\n\t\t\ty\t-143.64981226326637\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t115\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t360.5300404371677\n\t\t\ty\t34.8732998632575\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t116\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t49.89280471200118\n\t\t\ty\t-234.93880519724925\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t117\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t250.20998913930907\n\t\t\ty\t-195.38465132639095\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t118\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-73.43283912449476\n\t\t\ty\t-189.55832910096393\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t119\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t521.4108889340737\n\t\t\ty\t-145.43819564875798\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t120\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t123.98163688248121\n\t\t\ty\t-176.35229163101917\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t121\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-523.3115129755619\n\t\t\ty\t378.62309074222526\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t122\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-457.39924475026214\n\t\t\ty\t-100.86640512023865\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t123\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-497.16418360007106\n\t\t\ty\t281.2184121424757\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t124\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-387.5381851051635\n\t\t\ty\t288.64824730851853\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t125\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-199.53705238098746\n\t\t\ty\t-260.1010334824659\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t126\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-173.88730770564644\n\t\t\ty\t335.22227412250174\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t127\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t566.2118434351137\n\t\t\ty\t297.7138626941729\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t128\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-217.054958179575\n\t\t\ty\t366.46732755147843\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t129\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t64.6343366032977\n\t\t\ty\t95.98655794835105\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t130\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t25.38322292902319\n\t\t\ty\t-158.00083067267417\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t131\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t474.1475641147649\n\t\t\ty\t210.00403823714737\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t132\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-233.80443966640155\n\t\t\ty\t-368.52590745422185\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t133\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-134.5393415722928\n\t\t\ty\t29.142541341296067\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t134\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-395.9033072224639\n\t\t\ty\t169.59340787398276\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t135\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-379.5608649721893\n\t\t\ty\t45.162008142544835\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t136\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-502.19512595831077\n\t\t\ty\t140.48313994213925\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t137\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t142.54150815138996\n\t\t\ty\t-92.20098667151615\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t138\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-518.1937925148851\n\t\t\ty\t156.09692801839947\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t139\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-270.27802823596204\n\t\t\ty\t-30.629594947528915\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t140\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-4.738284029450597\n\t\t\ty\t313.7172266726767\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t141\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-41.95089555527136\n\t\t\ty\t-22.126962305995846\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t142\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t263.7680353753583\n\t\t\ty\t102.24559701640538\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t143\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t436.23726095754216\n\t\t\ty\t371.0225464204352\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t144\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t64.05390744255169\n\t\t\ty\t297.77524966095666\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t145\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t345.8302886977016\n\t\t\ty\t-18.178491468208847\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t146\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-445.842368738894\n\t\t\ty\t-114.07026391778516\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t147\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-521.0871739463927\n\t\t\ty\t211.5808206897018\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t148\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t242.18880593805352\n\t\t\ty\t-348.3712575450828\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t149\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t107.95333221704334\n\t\t\ty\t152.84001018981814\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t150\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-123.57127335118071\n\t\t\ty\t-287.6922609428584\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t151\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t392.7071398148614\n\t\t\ty\t98.34065473401273\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t152\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-67.73085301851\n\t\t\ty\t-205.8292412864549\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t153\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-416.97590393375077\n\t\t\ty\t-206.89589380524598\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t154\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t148.32766821125017\n\t\t\ty\t330.79578966022063\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t155\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-142.08383349401544\n\t\t\ty\t-127.2514809898201\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t156\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t245.0110893512758\n\t\t\ty\t97.34005753145345\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t157\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t121.34568359183572\n\t\t\ty\t-205.54872466670457\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t158\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-48.17586532451071\n\t\t\ty\t-258.29240181085385\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t159\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t306.8917160646399\n\t\t\ty\t-150.57737623145067\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t160\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t217.8408343379872\n\t\t\ty\t-319.6554985177344\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t161\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-139.25440631895452\n\t\t\ty\t331.40217249153545\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t162\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t403.97049064528505\n\t\t\ty\t-307.1828317496548\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t163\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-52.628930157972036\n\t\t\ty\t-287.47569950788636\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t164\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-496.0431246856022\n\t\t\ty\t300.0067250435699\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t165\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t398.6449320790739\n\t\t\ty\t-298.0804134785116\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t166\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-563.548828498852\n\t\t\ty\t221.6182918079503\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t167\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-484.6332609429818\n\t\t\ty\t-8.370975611055371\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t168\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t338.994512338263\n\t\t\ty\t-204.24421546571708\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t169\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t379.6935099747227\n\t\t\ty\t-283.1965639854057\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t170\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t151.3339406124677\n\t\t\ty\t-243.4458002479422\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t171\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t205.31569826259158\n\t\t\ty\t-259.2548536983952\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t172\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-407.8206440731056\n\t\t\ty\t209.28806980583306\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t173\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t310.04554898681397\n\t\t\ty\t250.1203065156501\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t174\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-228.7154081585619\n\t\t\ty\t97.99064965446956\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t175\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-485.0627469709731\n\t\t\ty\t321.62881616519576\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t176\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-286.39382630402923\n\t\t\ty\t-261.5790223463554\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t177\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-238.9003570760151\n\t\t\ty\t224.56605839276813\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t178\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t140.25711740930706\n\t\t\ty\t-294.794013651947\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t179\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t28.998926722630017\n\t\t\ty\t106.04379987076987\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t180\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t238.0307322471101\n\t\t\ty\t-77.83719588817786\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t181\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t415.2776188060749\n\t\t\ty\t283.1598205610327\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t182\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-136.57912847532123\n\t\t\ty\t271.1716567479841\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t183\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-411.06065325184625\n\t\t\ty\t339.1142778727731\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t184\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t371.31009381522074\n\t\t\ty\t-102.47783273826087\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t185\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t117.1664329324999\n\t\t\ty\t292.1677223539681\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t186\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t469.8361111433603\n\t\t\ty\t-329.60343954189904\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t187\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t161.047489585667\n\t\t\ty\t-298.580746795633\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t188\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t37.379249992522205\n\t\t\ty\t316.08060605320577\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t189\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-44.90291124722114\n\t\t\ty\t331.65515243350296\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t190\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-168.85944014273178\n\t\t\ty\t-291.3913566122504\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t191\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-150.35245398152938\n\t\t\ty\t-273.0229375534269\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t192\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-377.6000477071042\n\t\t\ty\t-132.14839600967056\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t193\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-179.01487039072697\n\t\t\ty\t233.5655146538444\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t194\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t76.25749913248194\n\t\t\ty\t-155.45275281332022\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t195\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t224.48846782234\n\t\t\ty\t-236.23182213505896\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t196\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t81.46903426851384\n\t\t\ty\t-276.55043666929765\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t197\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t473.0066505272348\n\t\t\ty\t-187.27569028003677\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t198\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t377.8882457942999\n\t\t\ty\t333.6395703590689\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t199\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-304.71241494710137\n\t\t\ty\t186.94507390977833\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t200\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-355.97736151670614\n\t\t\ty\t-8.907798771325474\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t201\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-449.565762650002\n\t\t\ty\t-170.33319637951593\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t202\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t136.29988616797368\n\t\t\ty\t134.8347938142456\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t203\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-40.872653314612194\n\t\t\ty\t-171.62271648494894\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t204\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-358.17691048575773\n\t\t\ty\t52.459648064123314\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t205\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t136.70695623068775\n\t\t\ty\t85.68764939695637\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t206\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-490.32944479994046\n\t\t\ty\t-374.63085889197936\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t207\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t254.1545992916774\n\t\t\ty\t-178.319702458049\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t208\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t265.1652946659808\n\t\t\ty\t278.93393055183276\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t209\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t460.55855481389017\n\t\t\ty\t-331.98888297771026\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t210\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t528.0035482537323\n\t\t\ty\t-24.264476846345133\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t211\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t158.78144799276959\n\t\t\ty\t209.37665538088606\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t212\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t485.68916660512673\n\t\t\ty\t-242.7579771485672\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t213\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-95.221652724781\n\t\t\ty\t-41.51984472829179\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t214\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-259.6277271254472\n\t\t\ty\t-345.3690479507971\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t215\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-42.66303040059097\n\t\t\ty\t362.3376118220864\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t216\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-475.0649226599759\n\t\t\ty\t165.02611973729006\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t217\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-372.07138757231405\n\t\t\ty\t-279.3371452481609\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t218\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t207.00776253672484\n\t\t\ty\t215.1554251645656\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t219\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t451.8690180473643\n\t\t\ty\t-100.84602638419466\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t220\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-180.47134108378805\n\t\t\ty\t84.36440065546799\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t221\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t393.09308777098784\n\t\t\ty\t113.77472430706479\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t222\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t67.49020612545098\n\t\t\ty\t1.035492670710994\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t223\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-186.45459944399244\n\t\t\ty\t48.58440522513803\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t224\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t289.6320879933286\n\t\t\ty\t234.76577321995353\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t225\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t483.48061862499003\n\t\t\ty\t139.31505890437165\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t226\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-215.9435378701836\n\t\t\ty\t-202.8538987813513\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t227\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t211.85351984452734\n\t\t\ty\t227.72968875668641\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t228\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-135.95165148987394\n\t\t\ty\t-299.3377868889033\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t229\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t299.4580257466848\n\t\t\ty\t-14.183749334028334\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t230\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-421.21477579785005\n\t\t\ty\t212.10409245781466\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t231\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-473.4523328417514\n\t\t\ty\t120.08135742213273\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t232\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-502.88485877745575\n\t\t\ty\t187.92173806402332\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t233\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-56.66314479112975\n\t\t\ty\t54.603938772230265\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t234\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t17.17149196579021\n\t\t\ty\t-119.79326206290489\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t235\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-259.956453147826\n\t\t\ty\t111.09319322309449\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t236\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t342.27531754213123\n\t\t\ty\t299.40587831719483\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t237\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t386.98769071921834\n\t\t\ty\t-273.03317863154564\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t238\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-454.6478925966462\n\t\t\ty\t-68.51109975749728\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t239\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-114.29133625666549\n\t\t\ty\t24.42395684802159\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t240\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-538.0394679921984\n\t\t\ty\t311.09484671607083\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t241\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-327.89340151817396\n\t\t\ty\t124.63449889108728\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t242\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t218.9940873515552\n\t\t\ty\t-311.8279864210425\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t243\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t6.248281719265719\n\t\t\ty\t123.49983476636328\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t244\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-401.8253753703691\n\t\t\ty\t-178.19615719380818\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t245\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-118.29207871122247\n\t\t\ty\t-13.038335989018378\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t246\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t0.6074528225827862\n\t\t\ty\t143.2786734002508\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t247\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t571.1360531949508\n\t\t\ty\t108.54501145877822\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t248\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-478.0861893417064\n\t\t\ty\t-50.985980582109164\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t249\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-240.83262972518446\n\t\t\ty\t23.71712745933735\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t250\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-563.2057398699625\n\t\t\ty\t-203.31414862684233\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t251\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t375.7882529483038\n\t\t\ty\t-309.27110828137063\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t252\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t345.3100612786368\n\t\t\ty\t-279.1584025587486\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t253\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-428.1100027887642\n\t\t\ty\t-112.12377107308998\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t254\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t520.6955600874794\n\t\t\ty\t-212.6094233559203\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t255\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-340.0686283404168\n\t\t\ty\t-79.42181878652997\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t256\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-541.8654260552878\n\t\t\ty\t251.66828632911313\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t257\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t525.4268680319008\n\t\t\ty\t-319.6850888622788\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t258\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-166.35191606625915\n\t\t\ty\t216.26121954422274\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t259\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-533.638329439719\n\t\t\ty\t43.302584234699054\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t260\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t43.047928755098496\n\t\t\ty\t-159.5432014945842\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t261\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-392.38490288839466\n\t\t\ty\t-294.19599941926833\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t262\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t62.81220341676294\n\t\t\ty\t-380.9520495341114\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t263\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-22.95352193508404\n\t\t\ty\t165.1823097026554\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t264\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t401.73399139009416\n\t\t\ty\t90.2747122381395\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t265\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t459.065088537734\n\t\t\ty\t51.20210426503701\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t266\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t269.2830573662641\n\t\t\ty\t-217.07418747544443\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t267\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-293.73390621230317\n\t\t\ty\t290.66587611952696\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t268\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-381.1964115632968\n\t\t\ty\t-322.94993405314125\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t269\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-569.9306371330067\n\t\t\ty\t216.2454548176928\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t270\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-138.05354820090577\n\t\t\ty\t-92.65615052500016\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t271\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t2.245629468765742\n\t\t\ty\t269.3267889160436\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t272\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t369.1055861959038\n\t\t\ty\t79.08233229715552\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t273\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-4.242767107175723\n\t\t\ty\t-15.166584231601064\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t274\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t83.09133221143293\n\t\t\ty\t303.4536533032498\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t275\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t163.4758991763823\n\t\t\ty\t21.327301234236472\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t276\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t246.83121996183797\n\t\t\ty\t278.33192105897035\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t277\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t402.06940885480276\n\t\t\ty\t-147.79224323849465\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t278\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-329.45955638230265\n\t\t\ty\t15.890812912637216\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t279\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-377.3270817578774\n\t\t\ty\t367.5378601279548\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t280\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-143.45107835320238\n\t\t\ty\t-233.98804389739837\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t281\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t284.8768562277287\n\t\t\ty\t280.9243249323989\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t282\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-65.18901449366638\n\t\t\ty\t-247.81727465279863\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t283\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-65.92527695718269\n\t\t\ty\t-380.03929395506236\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t284\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t185.056335826995\n\t\t\ty\t268.5055154594447\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t285\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t281.3181653579976\n\t\t\ty\t16.01555891027118\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t286\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t485.567039076617\n\t\t\ty\t248.55622243498271\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t287\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-414.4747841414657\n\t\t\ty\t-336.3942118780113\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t288\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-222.31401990627313\n\t\t\ty\t-134.8680742717298\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t289\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-200.8205079114676\n\t\t\ty\t9.242192034237007\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t290\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t274.3752247700711\n\t\t\ty\t180.41837727300344\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t291\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t88.54382356444944\n\t\t\ty\t216.46793685006014\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t292\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t242.4514356532303\n\t\t\ty\t170.78544243275383\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t293\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-461.10857768398\n\t\t\ty\t-222.16735739089532\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t294\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-524.4743685429382\n\t\t\ty\t215.28392631503732\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t295\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-205.66938522618057\n\t\t\ty\t-22.246937152189275\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t296\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t316.1708902484294\n\t\t\ty\t-44.030120924665766\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t0\n\t\ttarget\t1\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t1\n\t\ttarget\t2\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t2\n\t\ttarget\t3\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t3\n\t\ttarget\t4\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t4\n\t\ttarget\t5\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t5\n\t\ttarget\t6\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t6\n\t\ttarget\t7\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t7\n\t\ttarget\t8\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t8\n\t\ttarget\t9\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t9\n\t\ttarget\t10\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t10\n\t\ttarget\t11\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t11\n\t\ttarget\t12\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t12\n\t\ttarget\t13\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t13\n\t\ttarget\t14\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t14\n\t\ttarget\t15\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t15\n\t\ttarget\t16\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t16\n\t\ttarget\t17\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t17\n\t\ttarget\t18\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t18\n\t\ttarget\t19\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t19\n\t\ttarget\t20\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t20\n\t\ttarget\t21\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t21\n\t\ttarget\t22\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t22\n\t\ttarget\t23\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t23\n\t\ttarget\t24\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t25\n\t\ttarget\t26\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t26\n\t\ttarget\t27\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t27\n\t\ttarget\t28\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t28\n\t\ttarget\t29\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t29\n\t\ttarget\t30\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t30\n\t\ttarget\t31\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t31\n\t\ttarget\t32\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t33\n\t\ttarget\t34\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t34\n\t\ttarget\t32\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t32\n\t\ttarget\t35\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t35\n\t\ttarget\t36\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t36\n\t\ttarget\t37\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t37\n\t\ttarget\t38\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t38\n\t\ttarget\t39\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t39\n\t\ttarget\t40\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t40\n\t\ttarget\t41\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t41\n\t\ttarget\t42\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t42\n\t\ttarget\t43\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t43\n\t\ttarget\t18\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t18\n\t\ttarget\t44\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t44\n\t\ttarget\t45\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t45\n\t\ttarget\t46\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t46\n\t\ttarget\t47\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t47\n\t\ttarget\t48\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t48\n\t\ttarget\t49\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t49\n\t\ttarget\t50\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t50\n\t\ttarget\t51\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t51\n\t\ttarget\t52\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t52\n\t\ttarget\t53\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t53\n\t\ttarget\t54\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t54\n\t\ttarget\t55\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t55\n\t\ttarget\t56\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t56\n\t\ttarget\t57\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t54\n\t\ttarget\t58\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t58\n\t\ttarget\t59\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t59\n\t\ttarget\t60\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t60\n\t\ttarget\t61\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t61\n\t\ttarget\t62\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t62\n\t\ttarget\t63\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t63\n\t\ttarget\t64\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t64\n\t\ttarget\t65\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t65\n\t\ttarget\t66\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t66\n\t\ttarget\t67\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t67\n\t\ttarget\t57\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t57\n\t\ttarget\t68\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t68\n\t\ttarget\t69\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t69\n\t\ttarget\t70\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t70\n\t\ttarget\t71\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t71\n\t\ttarget\t72\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t73\n\t\ttarget\t74\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t74\n\t\ttarget\t49\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t49\n\t\ttarget\t75\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t75\n\t\ttarget\t76\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t76\n\t\ttarget\t77\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t77\n\t\ttarget\t78\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t78\n\t\ttarget\t79\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t79\n\t\ttarget\t80\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t80\n\t\ttarget\t16\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t16\n\t\ttarget\t81\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t81\n\t\ttarget\t13\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t13\n\t\ttarget\t82\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t82\n\t\ttarget\t39\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t39\n\t\ttarget\t83\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t83\n\t\ttarget\t84\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t84\n\t\ttarget\t85\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t85\n\t\ttarget\t86\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t86\n\t\ttarget\t87\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t87\n\t\ttarget\t88\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t88\n\t\ttarget\t89\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t89\n\t\ttarget\t21\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t21\n\t\ttarget\t90\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t90\n\t\ttarget\t91\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t91\n\t\ttarget\t92\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t92\n\t\ttarget\t93\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t93\n\t\ttarget\t94\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t94\n\t\ttarget\t73\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t33\n\t\ttarget\t95\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t95\n\t\ttarget\t96\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t96\n\t\ttarget\t97\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t97\n\t\ttarget\t98\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t99\n\t\ttarget\t100\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t100\n\t\ttarget\t101\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t101\n\t\ttarget\t98\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t98\n\t\ttarget\t102\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t102\n\t\ttarget\t103\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t103\n\t\ttarget\t104\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t104\n\t\ttarget\t105\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t105\n\t\ttarget\t106\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t106\n\t\ttarget\t107\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t108\n\t\ttarget\t107\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t109\n\t\ttarget\t110\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t110\n\t\ttarget\t111\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t111\n\t\ttarget\t112\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t112\n\t\ttarget\t113\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t113\n\t\ttarget\t114\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t114\n\t\ttarget\t115\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t115\n\t\ttarget\t116\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t116\n\t\ttarget\t107\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t107\n\t\ttarget\t83\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t107\n\t\ttarget\t84\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t73\n\t\ttarget\t117\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t117\n\t\ttarget\t118\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t118\n\t\ttarget\t119\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t119\n\t\ttarget\t51\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t51\n\t\ttarget\t120\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t120\n\t\ttarget\t121\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t121\n\t\ttarget\t122\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t122\n\t\ttarget\t123\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t123\n\t\ttarget\t124\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t124\n\t\ttarget\t125\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t125\n\t\ttarget\t126\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t126\n\t\ttarget\t127\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t127\n\t\ttarget\t128\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t128\n\t\ttarget\t129\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t129\n\t\ttarget\t130\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t130\n\t\ttarget\t131\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t131\n\t\ttarget\t132\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t132\n\t\ttarget\t133\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t133\n\t\ttarget\t134\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t135\n\t\ttarget\t118\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t118\n\t\ttarget\t136\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t136\n\t\ttarget\t137\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t137\n\t\ttarget\t138\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t138\n\t\ttarget\t139\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t139\n\t\ttarget\t140\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t140\n\t\ttarget\t141\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t140\n\t\ttarget\t142\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t104\n\t\ttarget\t143\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t143\n\t\ttarget\t144\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t144\n\t\ttarget\t145\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t145\n\t\ttarget\t146\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t146\n\t\ttarget\t147\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t147\n\t\ttarget\t148\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t148\n\t\ttarget\t13\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t49\n\t\ttarget\t117\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t149\n\t\ttarget\t150\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t150\n\t\ttarget\t151\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t151\n\t\ttarget\t152\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t152\n\t\ttarget\t153\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t153\n\t\ttarget\t154\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t154\n\t\ttarget\t155\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t155\n\t\ttarget\t156\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t156\n\t\ttarget\t157\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t157\n\t\ttarget\t158\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t158\n\t\ttarget\t159\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t159\n\t\ttarget\t160\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t160\n\t\ttarget\t161\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t161\n\t\ttarget\t16\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t16\n\t\ttarget\t43\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t43\n\t\ttarget\t162\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t162\n\t\ttarget\t89\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t89\n\t\ttarget\t22\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t22\n\t\ttarget\t163\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t163\n\t\ttarget\t164\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t164\n\t\ttarget\t165\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t165\n\t\ttarget\t139\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t139\n\t\ttarget\t166\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t166\n\t\ttarget\t167\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t167\n\t\ttarget\t168\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t168\n\t\ttarget\t122\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t122\n\t\ttarget\t52\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t169\n\t\ttarget\t170\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t170\n\t\ttarget\t171\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t171\n\t\ttarget\t172\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t172\n\t\ttarget\t173\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t173\n\t\ttarget\t174\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t174\n\t\ttarget\t175\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t175\n\t\ttarget\t176\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t177\n\t\ttarget\t178\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t178\n\t\ttarget\t179\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t179\n\t\ttarget\t180\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t180\n\t\ttarget\t181\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t181\n\t\ttarget\t182\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t182\n\t\ttarget\t183\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t183\n\t\ttarget\t184\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t184\n\t\ttarget\t176\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t176\n\t\ttarget\t185\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t185\n\t\ttarget\t186\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t186\n\t\ttarget\t153\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t187\n\t\ttarget\t188\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t188\n\t\ttarget\t189\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t189\n\t\ttarget\t190\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t190\n\t\ttarget\t191\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t191\n\t\ttarget\t192\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t192\n\t\ttarget\t193\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t193\n\t\ttarget\t194\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t194\n\t\ttarget\t195\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t195\n\t\ttarget\t196\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t197\n\t\ttarget\t198\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t198\n\t\ttarget\t199\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t199\n\t\ttarget\t200\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t200\n\t\ttarget\t201\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t202\n\t\ttarget\t201\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t201\n\t\ttarget\t203\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t203\n\t\ttarget\t204\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t204\n\t\ttarget\t205\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t205\n\t\ttarget\t206\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t206\n\t\ttarget\t207\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t207\n\t\ttarget\t196\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t196\n\t\ttarget\t208\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t196\n\t\ttarget\t209\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t208\n\t\ttarget\t209\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t209\n\t\ttarget\t214\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t214\n\t\ttarget\t215\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t215\n\t\ttarget\t44\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t44\n\t\ttarget\t216\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t216\n\t\ttarget\t20\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t22\n\t\ttarget\t213\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t209\n\t\ttarget\t78\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t78\n\t\ttarget\t210\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t210\n\t\ttarget\t211\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t211\n\t\ttarget\t75\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t75\n\t\ttarget\t48\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t48\n\t\ttarget\t164\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t164\n\t\ttarget\t212\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t212\n\t\ttarget\t24\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t24\n\t\ttarget\t213\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t213\n\t\ttarget\t217\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t217\n\t\ttarget\t218\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t218\n\t\ttarget\t219\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t219\n\t\ttarget\t220\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t220\n\t\ttarget\t221\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t221\n\t\ttarget\t222\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t222\n\t\ttarget\t223\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t223\n\t\ttarget\t224\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t224\n\t\ttarget\t225\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t225\n\t\ttarget\t226\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t226\n\t\ttarget\t227\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t228\n\t\ttarget\t229\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t228\n\t\ttarget\t230\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t229\n\t\ttarget\t230\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t230\n\t\ttarget\t231\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t231\n\t\ttarget\t232\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t232\n\t\ttarget\t233\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t233\n\t\ttarget\t234\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t234\n\t\ttarget\t235\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t235\n\t\ttarget\t236\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t236\n\t\ttarget\t237\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t237\n\t\ttarget\t96\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t183\n\t\ttarget\t238\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t238\n\t\ttarget\t239\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t239\n\t\ttarget\t240\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t240\n\t\ttarget\t241\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t241\n\t\ttarget\t242\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t242\n\t\ttarget\t243\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t243\n\t\ttarget\t95\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t85\n\t\ttarget\t244\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t244\n\t\ttarget\t245\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t245\n\t\ttarget\t162\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t162\n\t\ttarget\t19\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t19\n\t\ttarget\t216\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t216\n\t\ttarget\t246\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t246\n\t\ttarget\t45\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t45\n\t\ttarget\t247\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t247\n\t\ttarget\t78\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t78\n\t\ttarget\t248\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t248\n\t\ttarget\t249\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t249\n\t\ttarget\t250\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t250\n\t\ttarget\t251\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t251\n\t\ttarget\t252\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t252\n\t\ttarget\t253\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t253\n\t\ttarget\t254\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t254\n\t\ttarget\t255\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t255\n\t\ttarget\t256\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t256\n\t\ttarget\t257\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t257\n\t\ttarget\t258\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t258\n\t\ttarget\t259\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t260\n\t\ttarget\t218\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t218\n\t\ttarget\t261\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t261\n\t\ttarget\t262\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t262\n\t\ttarget\t87\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t87\n\t\ttarget\t162\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t162\n\t\ttarget\t18\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t18\n\t\ttarget\t214\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t78\n\t\ttarget\t263\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t263\n\t\ttarget\t251\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t251\n\t\ttarget\t264\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t264\n\t\ttarget\t265\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t265\n\t\ttarget\t266\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t266\n\t\ttarget\t267\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t22\n\t\ttarget\t48\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t48\n\t\ttarget\t136\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t296\n\t\ttarget\t136\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t136\n\t\ttarget\t268\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t268\n\t\ttarget\t269\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t269\n\t\ttarget\t270\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t269\n\t\ttarget\t275\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t270\n\t\ttarget\t271\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t271\n\t\ttarget\t272\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t272\n\t\ttarget\t273\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t273\n\t\ttarget\t274\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t274\n\t\ttarget\t52\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t270\n\t\ttarget\t275\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t275\n\t\ttarget\t166\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t166\n\t\ttarget\t276\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t276\n\t\ttarget\t277\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t277\n\t\ttarget\t278\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t278\n\t\ttarget\t279\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t279\n\t\ttarget\t280\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t280\n\t\ttarget\t281\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t281\n\t\ttarget\t282\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t282\n\t\ttarget\t283\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t283\n\t\ttarget\t284\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t284\n\t\ttarget\t285\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t270\n\t\ttarget\t286\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t286\n\t\ttarget\t287\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t287\n\t\ttarget\t168\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t168\n\t\ttarget\t288\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t288\n\t\ttarget\t289\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t289\n\t\ttarget\t290\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t290\n\t\ttarget\t291\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t291\n\t\ttarget\t292\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t292\n\t\ttarget\t293\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t293\n\t\ttarget\t294\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t294\n\t\ttarget\t295\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n]\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/metro/london.tglf",
    "content": "0 -423.000 285.000 30.000 30.000\n1 64.000 -168.000 30.000 30.000\n2 515.000 53.000 30.000 30.000\n3 -459.000 -331.000 30.000 30.000\n4 514.000 -8.000 30.000 30.000\n5 -201.000 110.000 30.000 30.000\n6 -111.000 143.000 30.000 30.000\n7 -105.000 -287.000 30.000 30.000\n8 -511.000 329.000 30.000 30.000\n9 489.000 237.000 30.000 30.000\n10 100.000 73.000 30.000 30.000\n11 -179.000 -301.000 30.000 30.000\n12 -508.000 -308.000 30.000 30.000\n13 -245.000 244.000 30.000 30.000\n14 -541.000 56.000 30.000 30.000\n15 404.000 95.000 30.000 30.000\n16 -142.000 -346.000 30.000 30.000\n17 -182.000 -123.000 30.000 30.000\n18 -351.000 123.000 30.000 30.000\n19 -363.000 220.000 30.000 30.000\n20 251.000 289.000 30.000 30.000\n21 24.000 158.000 30.000 30.000\n22 -372.000 164.000 30.000 30.000\n23 -110.000 -277.000 30.000 30.000\n24 558.000 -238.000 30.000 30.000\n25 47.000 -245.000 30.000 30.000\n26 -216.000 -263.000 30.000 30.000\n27 67.000 235.000 30.000 30.000\n28 55.000 100.000 30.000 30.000\n29 365.000 169.000 30.000 30.000\n30 -108.000 1.000 30.000 30.000\n31 -289.000 235.000 30.000 30.000\n32 -472.000 -178.000 30.000 30.000\n33 -523.000 272.000 30.000 30.000\n34 -189.000 -338.000 30.000 30.000\n35 390.000 114.000 30.000 30.000\n36 0.000 189.000 30.000 30.000\n37 150.000 -84.000 30.000 30.000\n38 -408.000 -94.000 30.000 30.000\n39 251.000 146.000 30.000 30.000\n40 32.000 10.000 30.000 30.000\n41 -411.000 -329.000 30.000 30.000\n42 521.000 -117.000 30.000 30.000\n43 -409.000 318.000 30.000 30.000\n44 -469.000 45.000 30.000 30.000\n45 391.000 -36.000 30.000 30.000\n46 -244.000 -358.000 30.000 30.000\n47 208.000 -349.000 30.000 30.000\n48 16.000 -51.000 30.000 30.000\n49 -514.000 45.000 30.000 30.000\n50 75.000 86.000 30.000 30.000\n51 -154.000 -250.000 30.000 30.000\n52 -392.000 18.000 30.000 30.000\n53 456.000 -302.000 30.000 30.000\n54 571.000 -336.000 30.000 30.000\n55 426.000 -109.000 30.000 30.000\n56 -500.000 255.000 30.000 30.000\n57 181.000 -113.000 30.000 30.000\n58 -507.000 -90.000 30.000 30.000\n59 7.000 241.000 30.000 30.000\n60 198.000 180.000 30.000 30.000\n61 346.000 298.000 30.000 30.000\n62 -366.000 58.000 30.000 30.000\n63 298.000 134.000 30.000 30.000\n64 311.000 -34.000 30.000 30.000\n65 -133.000 311.000 30.000 30.000\n66 76.000 110.000 30.000 30.000\n67 208.000 -33.000 30.000 30.000\n68 -452.000 -175.000 30.000 30.000\n69 -41.000 169.000 30.000 30.000\n70 -473.000 -169.000 30.000 30.000\n71 -130.000 139.000 30.000 30.000\n72 -102.000 120.000 30.000 30.000\n73 164.000 124.000 30.000 30.000\n74 170.000 -314.000 30.000 30.000\n75 -120.000 -126.000 30.000 30.000\n76 361.000 283.000 30.000 30.000\n77 485.000 52.000 30.000 30.000\n78 190.000 -14.000 30.000 30.000\n79 203.000 -344.000 30.000 30.000\n80 316.000 159.000 30.000 30.000\n81 -45.000 -21.000 30.000 30.000\n82 -164.000 36.000 30.000 30.000\n83 50.000 -200.000 30.000 30.000\n84 -514.000 -42.000 30.000 30.000\n85 503.000 -173.000 30.000 30.000\n86 -520.000 71.000 30.000 30.000\n87 318.000 49.000 30.000 30.000\n88 -129.000 -269.000 30.000 30.000\n89 165.000 -50.000 30.000 30.000\n90 294.000 -272.000 30.000 30.000\n91 197.000 -40.000 30.000 30.000\n92 484.000 320.000 30.000 30.000\n93 -88.000 -367.000 30.000 30.000\n94 214.000 50.000 30.000 30.000\n95 386.000 13.000 30.000 30.000\n96 -64.000 176.000 30.000 30.000\n97 -430.000 89.000 30.000 30.000\n98 -129.000 114.000 30.000 30.000\n99 512.000 -227.000 30.000 30.000\n100 -564.000 311.000 30.000 30.000\n101 -282.000 336.000 30.000 30.000\n102 281.000 215.000 30.000 30.000\n103 352.000 283.000 30.000 30.000\n104 134.000 -36.000 30.000 30.000\n105 413.000 -248.000 30.000 30.000\n106 -450.000 37.000 30.000 30.000\n107 -128.000 -235.000 30.000 30.000\n108 487.000 167.000 30.000 30.000\n109 516.000 -101.000 30.000 30.000\n110 -483.000 319.000 30.000 30.000\n111 252.000 138.000 30.000 30.000\n112 -427.000 -255.000 30.000 30.000\n113 464.000 -94.000 30.000 30.000\n114 457.000 -143.000 30.000 30.000\n115 360.000 34.000 30.000 30.000\n116 49.000 -234.000 30.000 30.000\n117 250.000 -195.000 30.000 30.000\n118 -73.000 -189.000 30.000 30.000\n119 521.000 -145.000 30.000 30.000\n120 123.000 -176.000 30.000 30.000\n121 -523.000 378.000 30.000 30.000\n122 -457.000 -100.000 30.000 30.000\n123 -497.000 281.000 30.000 30.000\n124 -387.000 288.000 30.000 30.000\n125 -199.000 -260.000 30.000 30.000\n126 -173.000 335.000 30.000 30.000\n127 566.000 297.000 30.000 30.000\n128 -217.000 366.000 30.000 30.000\n129 64.000 95.000 30.000 30.000\n130 25.000 -158.000 30.000 30.000\n131 474.000 210.000 30.000 30.000\n132 -233.000 -368.000 30.000 30.000\n133 -134.000 29.000 30.000 30.000\n134 -395.000 169.000 30.000 30.000\n135 -379.000 45.000 30.000 30.000\n136 -502.000 140.000 30.000 30.000\n137 142.000 -92.000 30.000 30.000\n138 -518.000 156.000 30.000 30.000\n139 -270.000 -30.000 30.000 30.000\n140 -4.000 313.000 30.000 30.000\n141 -41.000 -22.000 30.000 30.000\n142 263.000 102.000 30.000 30.000\n143 436.000 371.000 30.000 30.000\n144 64.000 297.000 30.000 30.000\n145 345.000 -18.000 30.000 30.000\n146 -445.000 -114.000 30.000 30.000\n147 -521.000 211.000 30.000 30.000\n148 242.000 -348.000 30.000 30.000\n149 107.000 152.000 30.000 30.000\n150 -123.000 -287.000 30.000 30.000\n151 392.000 98.000 30.000 30.000\n152 -67.000 -205.000 30.000 30.000\n153 -416.000 -206.000 30.000 30.000\n154 148.000 330.000 30.000 30.000\n155 -142.000 -127.000 30.000 30.000\n156 245.000 97.000 30.000 30.000\n157 121.000 -205.000 30.000 30.000\n158 -48.000 -258.000 30.000 30.000\n159 306.000 -150.000 30.000 30.000\n160 217.000 -319.000 30.000 30.000\n161 -139.000 331.000 30.000 30.000\n162 403.000 -307.000 30.000 30.000\n163 -52.000 -287.000 30.000 30.000\n164 -496.000 300.000 30.000 30.000\n165 398.000 -298.000 30.000 30.000\n166 -563.000 221.000 30.000 30.000\n167 -484.000 -8.000 30.000 30.000\n168 338.000 -204.000 30.000 30.000\n169 379.000 -283.000 30.000 30.000\n170 151.000 -243.000 30.000 30.000\n171 205.000 -259.000 30.000 30.000\n172 -407.000 209.000 30.000 30.000\n173 310.000 250.000 30.000 30.000\n174 -228.000 97.000 30.000 30.000\n175 -485.000 321.000 30.000 30.000\n176 -286.000 -261.000 30.000 30.000\n177 -238.000 224.000 30.000 30.000\n178 140.000 -294.000 30.000 30.000\n179 28.000 106.000 30.000 30.000\n180 238.000 -77.000 30.000 30.000\n181 415.000 283.000 30.000 30.000\n182 -136.000 271.000 30.000 30.000\n183 -411.000 339.000 30.000 30.000\n184 371.000 -102.000 30.000 30.000\n185 117.000 292.000 30.000 30.000\n186 469.000 -329.000 30.000 30.000\n187 161.000 -298.000 30.000 30.000\n188 37.000 316.000 30.000 30.000\n189 -44.000 331.000 30.000 30.000\n190 -168.000 -291.000 30.000 30.000\n191 -150.000 -273.000 30.000 30.000\n192 -377.000 -132.000 30.000 30.000\n193 -179.000 233.000 30.000 30.000\n194 76.000 -155.000 30.000 30.000\n195 224.000 -236.000 30.000 30.000\n196 81.000 -276.000 30.000 30.000\n197 473.000 -187.000 30.000 30.000\n198 377.000 333.000 30.000 30.000\n199 -304.000 186.000 30.000 30.000\n200 -355.000 -8.000 30.000 30.000\n201 -449.000 -170.000 30.000 30.000\n202 136.000 134.000 30.000 30.000\n203 -40.000 -171.000 30.000 30.000\n204 -358.000 52.000 30.000 30.000\n205 136.000 85.000 30.000 30.000\n206 -490.000 -374.000 30.000 30.000\n207 254.000 -178.000 30.000 30.000\n208 265.000 278.000 30.000 30.000\n209 460.000 -331.000 30.000 30.000\n210 528.000 -24.000 30.000 30.000\n211 158.000 209.000 30.000 30.000\n212 485.000 -242.000 30.000 30.000\n213 -95.000 -41.000 30.000 30.000\n214 -259.000 -345.000 30.000 30.000\n215 -42.000 362.000 30.000 30.000\n216 -475.000 165.000 30.000 30.000\n217 -372.000 -279.000 30.000 30.000\n218 207.000 215.000 30.000 30.000\n219 451.000 -100.000 30.000 30.000\n220 -180.000 84.000 30.000 30.000\n221 393.000 113.000 30.000 30.000\n222 67.000 1.000 30.000 30.000\n223 -186.000 48.000 30.000 30.000\n224 289.000 234.000 30.000 30.000\n225 483.000 139.000 30.000 30.000\n226 -215.000 -202.000 30.000 30.000\n227 211.000 227.000 30.000 30.000\n228 -135.000 -299.000 30.000 30.000\n229 299.000 -14.000 30.000 30.000\n230 -421.000 212.000 30.000 30.000\n231 -473.000 120.000 30.000 30.000\n232 -502.000 187.000 30.000 30.000\n233 -56.000 54.000 30.000 30.000\n234 17.000 -119.000 30.000 30.000\n235 -259.000 111.000 30.000 30.000\n236 342.000 299.000 30.000 30.000\n237 386.000 -273.000 30.000 30.000\n238 -454.000 -68.000 30.000 30.000\n239 -114.000 24.000 30.000 30.000\n240 -538.000 311.000 30.000 30.000\n241 -327.000 124.000 30.000 30.000\n242 218.000 -311.000 30.000 30.000\n243 6.000 123.000 30.000 30.000\n244 -401.000 -178.000 30.000 30.000\n245 -118.000 -13.000 30.000 30.000\n246 0.000 143.000 30.000 30.000\n247 571.000 108.000 30.000 30.000\n248 -478.000 -50.000 30.000 30.000\n249 -240.000 23.000 30.000 30.000\n250 -563.000 -203.000 30.000 30.000\n251 375.000 -309.000 30.000 30.000\n252 345.000 -279.000 30.000 30.000\n253 -428.000 -112.000 30.000 30.000\n254 520.000 -212.000 30.000 30.000\n255 -340.000 -79.000 30.000 30.000\n256 -541.000 251.000 30.000 30.000\n257 525.000 -319.000 30.000 30.000\n258 -166.000 216.000 30.000 30.000\n259 -533.000 43.000 30.000 30.000\n260 43.000 -159.000 30.000 30.000\n261 -392.000 -294.000 30.000 30.000\n262 62.000 -380.000 30.000 30.000\n263 -22.000 165.000 30.000 30.000\n264 401.000 90.000 30.000 30.000\n265 459.000 51.000 30.000 30.000\n266 269.000 -217.000 30.000 30.000\n267 -293.000 290.000 30.000 30.000\n268 -381.000 -322.000 30.000 30.000\n269 -569.000 216.000 30.000 30.000\n270 -138.000 -92.000 30.000 30.000\n271 2.000 269.000 30.000 30.000\n272 369.000 79.000 30.000 30.000\n273 -4.000 -15.000 30.000 30.000\n274 83.000 303.000 30.000 30.000\n275 163.000 21.000 30.000 30.000\n276 246.000 278.000 30.000 30.000\n277 402.000 -147.000 30.000 30.000\n278 -329.000 15.000 30.000 30.000\n279 -377.000 367.000 30.000 30.000\n280 -143.000 -233.000 30.000 30.000\n281 284.000 280.000 30.000 30.000\n282 -65.000 -247.000 30.000 30.000\n283 -65.000 -380.000 30.000 30.000\n284 185.000 268.000 30.000 30.000\n285 281.000 16.000 30.000 30.000\n286 485.000 248.000 30.000 30.000\n287 -414.000 -336.000 30.000 30.000\n288 -222.000 -134.000 30.000 30.000\n289 -200.000 9.000 30.000 30.000\n290 274.000 180.000 30.000 30.000\n291 88.000 216.000 30.000 30.000\n292 242.000 170.000 30.000 30.000\n293 -461.000 -222.000 30.000 30.000\n294 -524.000 215.000 30.000 30.000\n295 -205.000 -22.000 30.000 30.000\n296 316.000 -44.000 30.000 30.000\n#\n260 218\n208 209\n26 27\n39 40\n209 214\n239 240\n266 267\n110 111\n224 225\n169 170\n23 24\n199 200\n95 96\n242 243\n200 201\n252 253\n48 164\n140 141\n97 98\n287 168\n236 237\n251 252\n104 105\n282 283\n154 155\n160 161\n274 52\n74 49\n207 196\n182 183\n284 285\n190 191\n132 133\n34 32\n46 47\n100 101\n214 215\n18 214\n128 129\n45 247\n126 127\n5 6\n96 97\n145 146\n173 174\n81 13\n187 188\n13 82\n3 4\n0 1\n139 166\n86 87\n2 3\n4 5\n204 205\n127 128\n21 22\n44 45\n168 288\n192 193\n64 65\n69 70\n263 251\n39 83\n256 257\n12 13\n237 96\n94 73\n20 21\n205 206\n18 44\n117 118\n216 20\n149 150\n22 213\n59 60\n194 195\n231 232\n184 176\n235 236\n58 59\n289 290\n101 98\n139 140\n210 211\n157 158\n78 263\n162 19\n164 165\n32 35\n24 213\n221 222\n178 179\n17 18\n162 18\n135 118\n137 138\n83 84\n222 223\n92 93\n25 26\n51 120\n223 224\n152 153\n240 241\n14 15\n277 278\n90 91\n196 208\n9 10\n48 136\n70 71\n247 78\n37 38\n57 68\n114 115\n33 95\n270 286\n75 76\n27 28\n185 186\n156 157\n251 264\n245 162\n118 119\n174 175\n45 46\n188 189\n254 255\n136 137\n270 271\n73 74\n125 126\n124 125\n150 151\n73 117\n193 194\n99 100\n6 7\n118 136\n22 48\n8 9\n89 22\n143 144\n87 88\n104 143\n243 95\n109 110\n138 139\n162 89\n203 204\n290 291\n102 103\n228 230\n122 123\n286 287\n65 66\n43 162\n196 209\n144 145\n292 293\n63 64\n105 106\n181 182\n7 8\n265 266\n16 43\n262 87\n280 281\n270 275\n31 32\n197 198\n172 173\n258 259\n244 245\n230 231\n167 168\n177 178\n229 230\n189 190\n16 81\n219 220\n85 86\n233 234\n186 153\n275 166\n216 246\n107 84\n291 292\n228 229\n195 196\n103 104\n123 124\n106 107\n155 156\n67 57\n273 274\n288 289\n225 226\n19 216\n77 78\n163 164\n130 131\n271 272\n218 219\n54 55\n53 54\n170 171\n171 172\n60 61\n198 199\n161 16\n158 159\n283 284\n61 62\n44 216\n264 265\n215 44\n212 24\n249 250\n29 30\n85 244\n75 48\n272 273\n84 85\n41 42\n253 254\n269 270\n56 57\n112 113\n11 12\n49 117\n88 89\n217 218\n211 75\n40 41\n119 51\n71 72\n42 43\n111 112\n218 261\n148 13\n293 294\n116 107\n80 16\n121 122\n202 201\n166 167\n151 152\n82 39\n49 75\n49 50\n159 160\n47 48\n115 116\n146 147\n122 52\n22 163\n91 92\n43 18\n107 83\n54 58\n16 17\n234 235\n180 181\n129 130\n191 192\n78 79\n246 45\n201 203\n179 180\n19 20\n28 29\n66 67\n113 114\n269 275\n38 39\n238 239\n52 53\n15 16\n164 212\n48 49\n147 148\n168 122\n30 31\n294 295\n296 136\n176 185\n250 251\n98 102\n13 14\n87 162\n165 139\n18 19\n213 217\n279 280\n257 258\n93 94\n133 134\n1 2\n183 184\n261 262\n183 238\n22 23\n79 80\n68 69\n281 282\n89 21\n62 63\n36 37\n206 207\n226 227\n241 242\n35 36\n78 210\n140 142\n78 248\n175 176\n248 249\n50 51\n209 78\n232 233\n276 277\n278 279\n268 269\n51 52\n21 90\n153 154\n166 276\n10 11\n55 56\n120 121\n33 34\n76 77\n131 132\n220 221\n136 268\n255 256\n108 107\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/metro/melb.gml",
    "content": "Creator\t\"yFiles\"\nVersion\t\"2.12\"\ngraph\n[\n\thierarchic\t1\n\tlabel\t\"\"\n\tdirected\t1\n\tnode\n\t[\n\t\tid\t0\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-768.8386157957937\n\t\t\ty\t1688.9758231514388\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t1\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t3355.4333171418803\n\t\t\ty\t3730.0446769530245\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t2\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t92.82050802344747\n\t\t\ty\t1907.243547602271\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t3\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t4009.472505871525\n\t\t\ty\t1957.9087468242778\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t4\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t4297.42910696188\n\t\t\ty\t450.66953702445085\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t5\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t3046.7606636751416\n\t\t\ty\t3009.504188725852\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t6\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t4789.248500243453\n\t\t\ty\t3708.380181389508\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t7\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t5593.422803475\n\t\t\ty\t2938.949476561515\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t8\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t3832.9966782463225\n\t\t\ty\t3211.3553004124083\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t9\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t5437.171763752632\n\t\t\ty\t2181.1294823344515\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t10\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t2706.461503936179\n\t\t\ty\t4397.804102278132\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t11\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t573.1339923754392\n\t\t\ty\t558.7622741573352\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t12\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t5036.762582453185\n\t\t\ty\t775.4752541456808\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t13\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t5645.366208426775\n\t\t\ty\t1307.7562099180593\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t14\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t2663.984855177529\n\t\t\ty\t71.55868215260011\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t15\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t4113.083165793324\n\t\t\ty\t4804.888314186106\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t16\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t4942.786086004741\n\t\t\ty\t902.2380999158897\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t17\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t5682.560643200761\n\t\t\ty\t3896.9150564990214\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t18\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t1698.5864411677212\n\t\t\ty\t861.4496594048114\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t19\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-449.253806804095\n\t\t\ty\t3138.8874950323193\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t20\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t1020.0747715217035\n\t\t\ty\t1536.98719027582\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t21\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t4472.795904937568\n\t\t\ty\t1116.7064877805246\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t22\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t4766.019106595415\n\t\t\ty\t4816.783750501009\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t23\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-1102.9205945679453\n\t\t\ty\t484.80896517038764\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t24\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t59.7540596964202\n\t\t\ty\t98.96814102205815\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t25\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t4571.628771778212\n\t\t\ty\t2389.3215194216873\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t26\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t4923.212028432687\n\t\t\ty\t1996.1701525166686\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t27\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-392.4195601069089\n\t\t\ty\t3410.062634862024\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t28\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t4216.004109396188\n\t\t\ty\t-492.48889540942645\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t29\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t491.8462728213474\n\t\t\ty\t3456.408337826091\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t30\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t4613.8022062242135\n\t\t\ty\t3720.7718758692026\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t31\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t5145.066903631977\n\t\t\ty\t2547.2673057627353\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t32\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t5296.158208547541\n\t\t\ty\t1002.3857773187619\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t33\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t1793.8446103760152\n\t\t\ty\t2614.2332059988844\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t34\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t1992.8972417709879\n\t\t\ty\t3819.143700577366\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t35\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t4904.3152963890725\n\t\t\ty\t3109.3997378200497\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t36\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t5788.3518571830145\n\t\t\ty\t3187.8437372861745\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t37\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t1819.3135936087237\n\t\t\ty\t3770.3353594505616\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t38\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t4903.9584619866055\n\t\t\ty\t3892.543987079177\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t39\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t5377.700730046234\n\t\t\ty\t3684.3174096211296\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t40\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t468.11391782814167\n\t\t\ty\t153.60872843335903\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t41\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-744.1344230203472\n\t\t\ty\t2322.1249509925274\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t42\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t45.69743741582761\n\t\t\ty\t1038.355592555288\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t43\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t4529.9762903006\n\t\t\ty\t3933.4813341863173\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t44\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t5510.289410328048\n\t\t\ty\t899.8254441291999\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t45\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t1421.2514661826222\n\t\t\ty\t1611.6231241125543\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t46\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t1175.8733936479816\n\t\t\ty\t123.00458279957809\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t47\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t4863.334992409086\n\t\t\ty\t128.45114444827107\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t48\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t509.6858093572496\n\t\t\ty\t4171.731386056016\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t49\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t4792.803053353526\n\t\t\ty\t2804.293732321249\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t50\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-568.1151635151816\n\t\t\ty\t2194.5116154099014\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t51\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t3966.8930157729546\n\t\t\ty\t1592.477851635293\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t52\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t3610.832368038038\n\t\t\ty\t4083.5600588529032\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t53\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t536.7426877163828\n\t\t\ty\t1958.6657424716204\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t54\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t849.0453034245725\n\t\t\ty\t353.5636421908166\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t55\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t4001.7361494078496\n\t\t\ty\t1803.268199924431\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t56\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t4672.243950193186\n\t\t\ty\t2599.940868420545\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t57\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t4165.001958760918\n\t\t\ty\t1477.1954642688838\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t58\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-629.5670338349507\n\t\t\ty\t4610.743099271138\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t59\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t4129.6699043100625\n\t\t\ty\t1566.745145176977\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t60\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t1879.5794850721436\n\t\t\ty\t746.8034424100013\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t61\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t2188.1876607477116\n\t\t\ty\t-232.4318141094173\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t62\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t1991.2049091451772\n\t\t\ty\t1161.300356958204\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t63\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-673.1874052607329\n\t\t\ty\t4030.377005484029\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t64\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t7.08615135861055\n\t\t\ty\t3367.5523660886706\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t65\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t5798.3378427884745\n\t\t\ty\t2672.387732644167\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t66\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t1157.2685462009404\n\t\t\ty\t4682.6063060297165\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t67\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t3620.1743671057\n\t\t\ty\t3413.4029377845927\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t68\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t3223.7184918409375\n\t\t\ty\t904.0197603039537\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t69\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-7.891800765165954\n\t\t\ty\t913.9539871281133\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t70\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t255.19804828612018\n\t\t\ty\t-16.828021992999197\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t71\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t2322.3603513283592\n\t\t\ty\t1920.024828809987\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t72\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t1121.3258735344684\n\t\t\ty\t4980.461569679813\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t73\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t3382.0277937704186\n\t\t\ty\t4669.577429741691\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t74\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t5323.288298007723\n\t\t\ty\t1545.8732016325062\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t75\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-1015.4598917575227\n\t\t\ty\t1180.393379675037\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t76\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t6075.295938091834\n\t\t\ty\t3357.6055296847367\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t77\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t1892.467216660722\n\t\t\ty\t3991.628695395537\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t78\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t5974.63612251591\n\t\t\ty\t2116.7635664135214\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t79\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t408.82364120815896\n\t\t\ty\t-112.04006862024454\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t80\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t137.04611544070008\n\t\t\ty\t3352.515555184344\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t81\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t4005.957900185602\n\t\t\ty\t4935.274414626073\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t82\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-859.8594846114111\n\t\t\ty\t2514.6166551608217\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t83\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t982.1845889529395\n\t\t\ty\t2725.5203515320472\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t84\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t4454.753904901998\n\t\t\ty\t4113.781978127087\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t85\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t5970.503705771555\n\t\t\ty\t1715.5976267679052\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t86\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t2980.310579244794\n\t\t\ty\t2915.081441674197\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t87\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t579.0711361700728\n\t\t\ty\t2311.023238217119\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t88\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t3351.7170842704527\n\t\t\ty\t2505.301168082336\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t89\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t2971.5261378737587\n\t\t\ty\t3984.5504900773694\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t90\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t2911.7738121847256\n\t\t\ty\t-482.9123114102679\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t91\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t5632.844775839455\n\t\t\ty\t3597.9688030101224\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t92\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t4496.731706389342\n\t\t\ty\t4470.654922057249\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t93\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t3973.082956275456\n\t\t\ty\t4726.94136988723\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t94\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t4023.374167552347\n\t\t\ty\t3922.8903689185954\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t95\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t797.1886942946007\n\t\t\ty\t4903.970480627725\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t96\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-286.11746748981545\n\t\t\ty\t3958.8518650457854\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t97\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t2530.0010587888482\n\t\t\ty\t-526.5968457202632\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t98\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t5757.750309485129\n\t\t\ty\t3251.8860694943473\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t99\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t2887.6259666765586\n\t\t\ty\t2204.805168669151\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t100\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t3408.133386251381\n\t\t\ty\t4790.943123606181\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t101\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t1753.5639964388483\n\t\t\ty\t1077.0438362080527\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t102\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t4695.286767859777\n\t\t\ty\t4207.092525844465\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t103\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t822.2868111209914\n\t\t\ty\t805.0252704643401\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t104\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t1592.1092327254755\n\t\t\ty\t-9.227528693684008\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t105\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-1093.6042017763655\n\t\t\ty\t1294.2263366112877\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t106\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t3406.325033637614\n\t\t\ty\t3581.9236214130915\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t107\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t4914.0679340403985\n\t\t\ty\t3109.9577358178008\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t108\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-703.5390445420929\n\t\t\ty\t3541.874417227262\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t109\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t2595.180340379699\n\t\t\ty\t-341.3211841168642\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t110\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t5138.528532720082\n\t\t\ty\t3248.650208616745\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t111\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t5631.323375869644\n\t\t\ty\t4167.662564003835\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t112\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t2951.202757077502\n\t\t\ty\t1536.2812283983963\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t113\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t6046.857561527454\n\t\t\ty\t3331.8846575972425\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t114\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t4723.290612603324\n\t\t\ty\t4433.680793785953\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t115\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t3945.2261861319776\n\t\t\ty\t73.17758955563056\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t116\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-549.5870046203243\n\t\t\ty\t4399.749647764483\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t117\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t242.9380666063587\n\t\t\ty\t3721.449161563498\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t118\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t2294.076205829393\n\t\t\ty\t1408.5509844645658\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t119\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t3430.9440406985013\n\t\t\ty\t4536.121640029943\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t120\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t2617.6894005482363\n\t\t\ty\t2816.671091519992\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t121\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t4427.573717470807\n\t\t\ty\t4197.895089824243\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t122\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t3374.5879684165084\n\t\t\ty\t1719.2561996657214\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t123\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t170.76796907632843\n\t\t\ty\t3171.4805101879233\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t124\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t1858.7492167668474\n\t\t\ty\t646.6747117731184\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t125\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-345.9706507874074\n\t\t\ty\t1194.083727490598\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t126\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-488.35271110402095\n\t\t\ty\t765.3164998702168\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t127\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t1104.335211313065\n\t\t\ty\t272.1513850836908\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t128\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t2584.5636574605587\n\t\t\ty\t2988.6874835487565\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t129\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t5831.1920829275505\n\t\t\ty\t1410.2127266219577\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t130\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t4672.681878595938\n\t\t\ty\t2193.7086626562204\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t131\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t2416.0856407227648\n\t\t\ty\t900.5683640032894\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t132\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t3997.4202768154537\n\t\t\ty\t1201.9604936628882\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t133\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t4232.7611733588965\n\t\t\ty\t2586.088270454803\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t134\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t1104.7087822539906\n\t\t\ty\t3526.553235224137\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t135\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t5431.09550939412\n\t\t\ty\t1930.4842591996166\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t136\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-634.699768512382\n\t\t\ty\t3687.325215303669\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t137\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-39.241971100150295\n\t\t\ty\t981.1223676379036\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t138\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t3148.703929185137\n\t\t\ty\t2120.1927318555113\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t139\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t5211.424463877153\n\t\t\ty\t-71.26796997204008\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t140\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-737.0364479163627\n\t\t\ty\t375.6907383495985\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t141\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t1967.99896667018\n\t\t\ty\t581.252688722067\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t142\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t2656.2514116796356\n\t\t\ty\t-377.9524179521668\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t143\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t4110.121144554664\n\t\t\ty\t2785.5415683456995\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t144\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t815.1328871326816\n\t\t\ty\t2044.5427795541664\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t145\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t2613.1667439924186\n\t\t\ty\t450.7361297354845\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t146\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t900.3582971329133\n\t\t\ty\t1275.3872896300725\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t147\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t3485.0255167280056\n\t\t\ty\t-169.26592974115005\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t148\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t674.1643841918424\n\t\t\ty\t446.9584023332536\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t149\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t4503.12788392294\n\t\t\ty\t-409.4866099651491\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t150\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t2289.3301465195314\n\t\t\ty\t2225.9025331948424\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t151\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t615.5075038072796\n\t\t\ty\t3231.8696683930107\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t152\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-18.400984474144934\n\t\t\ty\t4361.395060926757\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t153\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t98.13060166206469\n\t\t\ty\t4113.5956242052935\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t154\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t5481.595568390498\n\t\t\ty\t4737.7162100700025\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t155\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t5258.28635049151\n\t\t\ty\t714.1721855253361\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t156\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t1791.9829593288837\n\t\t\ty\t344.2691909366812\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t157\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t5864.5278268211805\n\t\t\ty\t566.6709137452872\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t158\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t484.3699893255591\n\t\t\ty\t-274.7817212403678\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t159\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t5631.46626078018\n\t\t\ty\t2335.8051413731446\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t160\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t3238.3486800360542\n\t\t\ty\t1686.0830860711444\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t161\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t2420.6635098319503\n\t\t\ty\t500.8804094156244\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t162\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t3732.0516396562434\n\t\t\ty\t4065.8632774831513\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t163\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t2720.934724639039\n\t\t\ty\t1775.8228316897853\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t164\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t927.7465531939933\n\t\t\ty\t3580.613490598623\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t165\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t1326.5649362341992\n\t\t\ty\t-171.53640088544205\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t166\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-750.7628019818261\n\t\t\ty\t377.8152486845164\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t167\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t3076.257951007954\n\t\t\ty\t4095.871987101332\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t168\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t1040.219698243745\n\t\t\ty\t-384.576976556212\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t169\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-86.92060185054424\n\t\t\ty\t30.721259892237413\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t170\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t1596.25100600613\n\t\t\ty\t2210.078822082291\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t171\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-1059.7802327002935\n\t\t\ty\t4775.466121708783\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t172\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t5793.608161180515\n\t\t\ty\t3480.7063210473098\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t173\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t5179.098322394647\n\t\t\ty\t4691.496090884528\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t174\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t4244.076101600119\n\t\t\ty\t4606.500477470533\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t175\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t2377.1404963628415\n\t\t\ty\t2044.4087875513083\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t176\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t165.57945803620623\n\t\t\ty\t4407.2322233509885\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t177\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-185.49284913106544\n\t\t\ty\t1344.1192939773496\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t178\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t3862.5777085229865\n\t\t\ty\t1028.7801988512367\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t179\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t154.1181455087717\n\t\t\ty\t2844.6896374531607\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t180\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t585.269742559811\n\t\t\ty\t4447.894848808536\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t181\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-1040.4968397895207\n\t\t\ty\t1563.5236408996034\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t182\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t4646.912421878233\n\t\t\ty\t2842.376665702323\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t183\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t498.3330882127343\n\t\t\ty\t937.9257189239331\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t184\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t5783.930945148146\n\t\t\ty\t1771.1334237734413\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t185\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t2319.921287597558\n\t\t\ty\t1023.9705848938531\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t186\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t2260.009809027793\n\t\t\ty\t4562.945150811946\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t187\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t6066.555406323824\n\t\t\ty\t2188.1746945966743\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t188\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t1566.972064602748\n\t\t\ty\t3738.2345875701913\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t189\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t1055.2084857973514\n\t\t\ty\t2391.592247464809\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t190\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-801.9790994399092\n\t\t\ty\t1714.6943135609863\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t191\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t1403.9961270676827\n\t\t\ty\t3.692787047522529\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t192\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t174.78507543298406\n\t\t\ty\t3870.277247030276\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t193\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-1055.3123058575031\n\t\t\ty\t4734.696213528776\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t194\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t4330.62098806988\n\t\t\ty\t1700.797514774642\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t195\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t1746.6440453542582\n\t\t\ty\t1144.9614338914876\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t196\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t3048.7490533534356\n\t\t\ty\t3679.232826393304\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t197\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t1934.7511434289868\n\t\t\ty\t4408.533423546131\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t198\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-14.940245597363628\n\t\t\ty\t3054.747051382912\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t199\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t2906.226306257195\n\t\t\ty\t2085.0584107039153\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t200\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t943.7983120591398\n\t\t\ty\t-518.5178881234162\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t201\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t4010.6249938732235\n\t\t\ty\t3414.977304389987\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t202\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t5823.847387586649\n\t\t\ty\t3765.2864784648827\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t203\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t5161.936102070741\n\t\t\ty\t2142.195365048348\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t204\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t4661.949495776293\n\t\t\ty\t1180.7604946635533\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t205\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-862.6549222042303\n\t\t\ty\t256.31480270708323\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t206\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t3162.9696504315625\n\t\t\ty\t56.30929185862351\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t207\n\t\tlabel\t\"31\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t4928.066678616388\n\t\t\ty\t1127.9981444502894\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"31\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t208\n\t\tlabel\t\"32\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t626.1761580451257\n\t\t\ty\t341.29293667241143\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"32\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t209\n\t\tlabel\t\"34\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t387.58290144853777\n\t\t\ty\t1246.0965037461076\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"34\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t210\n\t\tlabel\t\"36\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t3866.5196445588217\n\t\t\ty\t-53.141236262372445\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"36\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t0\n\t\ttarget\t11\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t1\n\t\ttarget\t2\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t2\n\t\ttarget\t68\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t3\n\t\ttarget\t4\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t4\n\t\ttarget\t5\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t5\n\t\ttarget\t6\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t6\n\t\ttarget\t7\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t7\n\t\ttarget\t8\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t8\n\t\ttarget\t9\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t9\n\t\ttarget\t10\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t10\n\t\ttarget\t86\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t11\n\t\ttarget\t32\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t11\n\t\ttarget\t42\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t12\n\t\ttarget\t32\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t12\n\t\ttarget\t42\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t13\n\t\ttarget\t14\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t14\n\t\ttarget\t15\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t15\n\t\ttarget\t16\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t16\n\t\ttarget\t17\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t17\n\t\ttarget\t18\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t18\n\t\ttarget\t19\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t19\n\t\ttarget\t20\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t20\n\t\ttarget\t21\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t21\n\t\ttarget\t22\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t22\n\t\ttarget\t23\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t23\n\t\ttarget\t24\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t24\n\t\ttarget\t25\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t25\n\t\ttarget\t68\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t26\n\t\ttarget\t27\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t27\n\t\ttarget\t28\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t28\n\t\ttarget\t29\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t29\n\t\ttarget\t30\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t30\n\t\ttarget\t31\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t31\n\t\ttarget\t70\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t32\n\t\ttarget\t33\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t33\n\t\ttarget\t34\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t34\n\t\ttarget\t170\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t35\n\t\ttarget\t36\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t36\n\t\ttarget\t37\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t37\n\t\ttarget\t38\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t38\n\t\ttarget\t86\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t39\n\t\ttarget\t40\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t40\n\t\ttarget\t41\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t41\n\t\ttarget\t146\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t42\n\t\ttarget\t32\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t43\n\t\ttarget\t44\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t44\n\t\ttarget\t45\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t45\n\t\ttarget\t46\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t46\n\t\ttarget\t47\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t47\n\t\ttarget\t207\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t43\n\t\ttarget\t48\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t48\n\t\ttarget\t49\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t49\n\t\ttarget\t50\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t50\n\t\ttarget\t208\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t51\n\t\ttarget\t52\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t52\n\t\ttarget\t11\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t53\n\t\ttarget\t54\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t54\n\t\ttarget\t55\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t55\n\t\ttarget\t56\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t56\n\t\ttarget\t57\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t57\n\t\ttarget\t58\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t58\n\t\ttarget\t59\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t59\n\t\ttarget\t60\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t60\n\t\ttarget\t61\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t61\n\t\ttarget\t62\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t62\n\t\ttarget\t63\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t63\n\t\ttarget\t64\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t64\n\t\ttarget\t65\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t65\n\t\ttarget\t66\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t66\n\t\ttarget\t67\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t67\n\t\ttarget\t74\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t68\n\t\ttarget\t69\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t69\n\t\ttarget\t98\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t70\n\t\ttarget\t71\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t71\n\t\ttarget\t72\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t72\n\t\ttarget\t73\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t73\n\t\ttarget\t51\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t74\n\t\ttarget\t75\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t75\n\t\ttarget\t76\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t76\n\t\ttarget\t77\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t77\n\t\ttarget\t78\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t78\n\t\ttarget\t12\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t79\n\t\ttarget\t80\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t80\n\t\ttarget\t81\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t81\n\t\ttarget\t82\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t82\n\t\ttarget\t43\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t79\n\t\ttarget\t83\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t83\n\t\ttarget\t84\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t84\n\t\ttarget\t85\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t85\n\t\ttarget\t112\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t86\n\t\ttarget\t87\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t87\n\t\ttarget\t88\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t88\n\t\ttarget\t89\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t89\n\t\ttarget\t90\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t90\n\t\ttarget\t91\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t91\n\t\ttarget\t92\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t92\n\t\ttarget\t93\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t93\n\t\ttarget\t94\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t94\n\t\ttarget\t95\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t95\n\t\ttarget\t96\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t96\n\t\ttarget\t97\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t97\n\t\ttarget\t70\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t98\n\t\ttarget\t99\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t99\n\t\ttarget\t79\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t100\n\t\ttarget\t101\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t101\n\t\ttarget\t102\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t102\n\t\ttarget\t103\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t103\n\t\ttarget\t104\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t104\n\t\ttarget\t105\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t105\n\t\ttarget\t106\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t106\n\t\ttarget\t107\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t107\n\t\ttarget\t108\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t108\n\t\ttarget\t109\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t109\n\t\ttarget\t110\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t110\n\t\ttarget\t111\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t111\n\t\ttarget\t51\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t112\n\t\ttarget\t113\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t113\n\t\ttarget\t114\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t114\n\t\ttarget\t209\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t112\n\t\ttarget\t203\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t112\n\t\ttarget\t115\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t115\n\t\ttarget\t116\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t116\n\t\ttarget\t117\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t117\n\t\ttarget\t203\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t118\n\t\ttarget\t119\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t119\n\t\ttarget\t120\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t120\n\t\ttarget\t121\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t121\n\t\ttarget\t122\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t122\n\t\ttarget\t123\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t123\n\t\ttarget\t124\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t124\n\t\ttarget\t125\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t125\n\t\ttarget\t126\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t126\n\t\ttarget\t127\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t127\n\t\ttarget\t128\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t128\n\t\ttarget\t0\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t129\n\t\ttarget\t130\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t130\n\t\ttarget\t131\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t131\n\t\ttarget\t132\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t132\n\t\ttarget\t133\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t133\n\t\ttarget\t134\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t134\n\t\ttarget\t135\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t135\n\t\ttarget\t136\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t136\n\t\ttarget\t137\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t137\n\t\ttarget\t138\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t138\n\t\ttarget\t139\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t139\n\t\ttarget\t140\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t140\n\t\ttarget\t141\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t141\n\t\ttarget\t142\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t142\n\t\ttarget\t143\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t143\n\t\ttarget\t144\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t144\n\t\ttarget\t145\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t145\n\t\ttarget\t74\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t146\n\t\ttarget\t147\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t147\n\t\ttarget\t148\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t148\n\t\ttarget\t149\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t149\n\t\ttarget\t150\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t150\n\t\ttarget\t151\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t151\n\t\ttarget\t152\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t152\n\t\ttarget\t153\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t153\n\t\ttarget\t154\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t154\n\t\ttarget\t155\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t155\n\t\ttarget\t156\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t156\n\t\ttarget\t157\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t157\n\t\ttarget\t165\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t158\n\t\ttarget\t159\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t159\n\t\ttarget\t160\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t160\n\t\ttarget\t161\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t161\n\t\ttarget\t162\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t162\n\t\ttarget\t163\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t163\n\t\ttarget\t164\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t164\n\t\ttarget\t146\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t165\n\t\ttarget\t166\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t166\n\t\ttarget\t167\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t167\n\t\ttarget\t168\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t168\n\t\ttarget\t169\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t169\n\t\ttarget\t0\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t170\n\t\ttarget\t42\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t170\n\t\ttarget\t98\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t171\n\t\ttarget\t172\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t172\n\t\ttarget\t173\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t173\n\t\ttarget\t174\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t174\n\t\ttarget\t175\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t175\n\t\ttarget\t176\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t176\n\t\ttarget\t177\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t177\n\t\ttarget\t178\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t178\n\t\ttarget\t179\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t179\n\t\ttarget\t180\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t180\n\t\ttarget\t181\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t181\n\t\ttarget\t182\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t182\n\t\ttarget\t183\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t183\n\t\ttarget\t98\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t184\n\t\ttarget\t185\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t185\n\t\ttarget\t186\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t186\n\t\ttarget\t187\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t187\n\t\ttarget\t188\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t188\n\t\ttarget\t189\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t189\n\t\ttarget\t190\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t190\n\t\ttarget\t191\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t191\n\t\ttarget\t192\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t192\n\t\ttarget\t193\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t193\n\t\ttarget\t194\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t194\n\t\ttarget\t195\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t195\n\t\ttarget\t196\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t196\n\t\ttarget\t197\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t197\n\t\ttarget\t198\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t198\n\t\ttarget\t199\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t199\n\t\ttarget\t200\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t200\n\t\ttarget\t201\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t201\n\t\ttarget\t202\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t202\n\t\ttarget\t165\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t203\n\t\ttarget\t204\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t204\n\t\ttarget\t205\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t205\n\t\ttarget\t206\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t206\n\t\ttarget\t210\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n]\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/metro/melb.tglf",
    "content": "0 -768.000 1688.000 30.000 30.000\n1 3355.000 3730.000 30.000 30.000\n2 92.000 1907.000 30.000 30.000\n3 4009.000 1957.000 30.000 30.000\n4 4297.000 450.000 30.000 30.000\n5 3046.000 3009.000 30.000 30.000\n6 4789.000 3708.000 30.000 30.000\n7 5593.000 2938.000 30.000 30.000\n8 3832.000 3211.000 30.000 30.000\n9 5437.000 2181.000 30.000 30.000\n10 2706.000 4397.000 30.000 30.000\n11 573.000 558.000 30.000 30.000\n12 5036.000 775.000 30.000 30.000\n13 5645.000 1307.000 30.000 30.000\n14 2663.000 71.000 30.000 30.000\n15 4113.000 4804.000 30.000 30.000\n16 4942.000 902.000 30.000 30.000\n17 5682.000 3896.000 30.000 30.000\n18 1698.000 861.000 30.000 30.000\n19 -449.000 3138.000 30.000 30.000\n20 1020.000 1536.000 30.000 30.000\n21 4472.000 1116.000 30.000 30.000\n22 4766.000 4816.000 30.000 30.000\n23 -1102.000 484.000 30.000 30.000\n24 59.000 98.000 30.000 30.000\n25 4571.000 2389.000 30.000 30.000\n26 4923.000 1996.000 30.000 30.000\n27 -392.000 3410.000 30.000 30.000\n28 4216.000 -492.000 30.000 30.000\n29 491.000 3456.000 30.000 30.000\n30 4613.000 3720.000 30.000 30.000\n31 5145.000 2547.000 30.000 30.000\n32 5296.000 1002.000 30.000 30.000\n33 1793.000 2614.000 30.000 30.000\n34 1992.000 3819.000 30.000 30.000\n35 4904.000 3109.000 30.000 30.000\n36 5788.000 3187.000 30.000 30.000\n37 1819.000 3770.000 30.000 30.000\n38 4903.000 3892.000 30.000 30.000\n39 5377.000 3684.000 30.000 30.000\n40 468.000 153.000 30.000 30.000\n41 -744.000 2322.000 30.000 30.000\n42 45.000 1038.000 30.000 30.000\n43 4529.000 3933.000 30.000 30.000\n44 5510.000 899.000 30.000 30.000\n45 1421.000 1611.000 30.000 30.000\n46 1175.000 123.000 30.000 30.000\n47 4863.000 128.000 30.000 30.000\n48 509.000 4171.000 30.000 30.000\n49 4792.000 2804.000 30.000 30.000\n50 -568.000 2194.000 30.000 30.000\n51 3966.000 1592.000 30.000 30.000\n52 3610.000 4083.000 30.000 30.000\n53 536.000 1958.000 30.000 30.000\n54 849.000 353.000 30.000 30.000\n55 4001.000 1803.000 30.000 30.000\n56 4672.000 2599.000 30.000 30.000\n57 4165.000 1477.000 30.000 30.000\n58 -629.000 4610.000 30.000 30.000\n59 4129.000 1566.000 30.000 30.000\n60 1879.000 746.000 30.000 30.000\n61 2188.000 -232.000 30.000 30.000\n62 1991.000 1161.000 30.000 30.000\n63 -673.000 4030.000 30.000 30.000\n64 7.000 3367.000 30.000 30.000\n65 5798.000 2672.000 30.000 30.000\n66 1157.000 4682.000 30.000 30.000\n67 3620.000 3413.000 30.000 30.000\n68 3223.000 904.000 30.000 30.000\n69 -7.000 913.000 30.000 30.000\n70 255.000 -16.000 30.000 30.000\n71 2322.000 1920.000 30.000 30.000\n72 1121.000 4980.000 30.000 30.000\n73 3382.000 4669.000 30.000 30.000\n74 5323.000 1545.000 30.000 30.000\n75 -1015.000 1180.000 30.000 30.000\n76 6075.000 3357.000 30.000 30.000\n77 1892.000 3991.000 30.000 30.000\n78 5974.000 2116.000 30.000 30.000\n79 408.000 -112.000 30.000 30.000\n80 137.000 3352.000 30.000 30.000\n81 4005.000 4935.000 30.000 30.000\n82 -859.000 2514.000 30.000 30.000\n83 982.000 2725.000 30.000 30.000\n84 4454.000 4113.000 30.000 30.000\n85 5970.000 1715.000 30.000 30.000\n86 2980.000 2915.000 30.000 30.000\n87 579.000 2311.000 30.000 30.000\n88 3351.000 2505.000 30.000 30.000\n89 2971.000 3984.000 30.000 30.000\n90 2911.000 -482.000 30.000 30.000\n91 5632.000 3597.000 30.000 30.000\n92 4496.000 4470.000 30.000 30.000\n93 3973.000 4726.000 30.000 30.000\n94 4023.000 3922.000 30.000 30.000\n95 797.000 4903.000 30.000 30.000\n96 -286.000 3958.000 30.000 30.000\n97 2530.000 -526.000 30.000 30.000\n98 5757.000 3251.000 30.000 30.000\n99 2887.000 2204.000 30.000 30.000\n100 3408.000 4790.000 30.000 30.000\n101 1753.000 1077.000 30.000 30.000\n102 4695.000 4207.000 30.000 30.000\n103 822.000 805.000 30.000 30.000\n104 1592.000 -9.000 30.000 30.000\n105 -1093.000 1294.000 30.000 30.000\n106 3406.000 3581.000 30.000 30.000\n107 4914.000 3109.000 30.000 30.000\n108 -703.000 3541.000 30.000 30.000\n109 2595.000 -341.000 30.000 30.000\n110 5138.000 3248.000 30.000 30.000\n111 5631.000 4167.000 30.000 30.000\n112 2951.000 1536.000 30.000 30.000\n113 6046.000 3331.000 30.000 30.000\n114 4723.000 4433.000 30.000 30.000\n115 3945.000 73.000 30.000 30.000\n116 -549.000 4399.000 30.000 30.000\n117 242.000 3721.000 30.000 30.000\n118 2294.000 1408.000 30.000 30.000\n119 3430.000 4536.000 30.000 30.000\n120 2617.000 2816.000 30.000 30.000\n121 4427.000 4197.000 30.000 30.000\n122 3374.000 1719.000 30.000 30.000\n123 170.000 3171.000 30.000 30.000\n124 1858.000 646.000 30.000 30.000\n125 -345.000 1194.000 30.000 30.000\n126 -488.000 765.000 30.000 30.000\n127 1104.000 272.000 30.000 30.000\n128 2584.000 2988.000 30.000 30.000\n129 5831.000 1410.000 30.000 30.000\n130 4672.000 2193.000 30.000 30.000\n131 2416.000 900.000 30.000 30.000\n132 3997.000 1201.000 30.000 30.000\n133 4232.000 2586.000 30.000 30.000\n134 1104.000 3526.000 30.000 30.000\n135 5431.000 1930.000 30.000 30.000\n136 -634.000 3687.000 30.000 30.000\n137 -39.000 981.000 30.000 30.000\n138 3148.000 2120.000 30.000 30.000\n139 5211.000 -71.000 30.000 30.000\n140 -737.000 375.000 30.000 30.000\n141 1967.000 581.000 30.000 30.000\n142 2656.000 -377.000 30.000 30.000\n143 4110.000 2785.000 30.000 30.000\n144 815.000 2044.000 30.000 30.000\n145 2613.000 450.000 30.000 30.000\n146 900.000 1275.000 30.000 30.000\n147 3485.000 -169.000 30.000 30.000\n148 674.000 446.000 30.000 30.000\n149 4503.000 -409.000 30.000 30.000\n150 2289.000 2225.000 30.000 30.000\n151 615.000 3231.000 30.000 30.000\n152 -18.000 4361.000 30.000 30.000\n153 98.000 4113.000 30.000 30.000\n154 5481.000 4737.000 30.000 30.000\n155 5258.000 714.000 30.000 30.000\n156 1791.000 344.000 30.000 30.000\n157 5864.000 566.000 30.000 30.000\n158 484.000 -274.000 30.000 30.000\n159 5631.000 2335.000 30.000 30.000\n160 3238.000 1686.000 30.000 30.000\n161 2420.000 500.000 30.000 30.000\n162 3732.000 4065.000 30.000 30.000\n163 2720.000 1775.000 30.000 30.000\n164 927.000 3580.000 30.000 30.000\n165 1326.000 -171.000 30.000 30.000\n166 -750.000 377.000 30.000 30.000\n167 3076.000 4095.000 30.000 30.000\n168 1040.000 -384.000 30.000 30.000\n169 -86.000 30.000 30.000 30.000\n170 1596.000 2210.000 30.000 30.000\n171 -1059.000 4775.000 30.000 30.000\n172 5793.000 3480.000 30.000 30.000\n173 5179.000 4691.000 30.000 30.000\n174 4244.000 4606.000 30.000 30.000\n175 2377.000 2044.000 30.000 30.000\n176 165.000 4407.000 30.000 30.000\n177 -185.000 1344.000 30.000 30.000\n178 3862.000 1028.000 30.000 30.000\n179 154.000 2844.000 30.000 30.000\n180 585.000 4447.000 30.000 30.000\n181 -1040.000 1563.000 30.000 30.000\n182 4646.000 2842.000 30.000 30.000\n183 498.000 937.000 30.000 30.000\n184 5783.000 1771.000 30.000 30.000\n185 2319.000 1023.000 30.000 30.000\n186 2260.000 4562.000 30.000 30.000\n187 6066.000 2188.000 30.000 30.000\n188 1566.000 3738.000 30.000 30.000\n189 1055.000 2391.000 30.000 30.000\n190 -801.000 1714.000 30.000 30.000\n191 1403.000 3.000 30.000 30.000\n192 174.000 3870.000 30.000 30.000\n193 -1055.000 4734.000 30.000 30.000\n194 4330.000 1700.000 30.000 30.000\n195 1746.000 1144.000 30.000 30.000\n196 3048.000 3679.000 30.000 30.000\n197 1934.000 4408.000 30.000 30.000\n198 -14.000 3054.000 30.000 30.000\n199 2906.000 2085.000 30.000 30.000\n200 943.000 -518.000 30.000 30.000\n201 4010.000 3414.000 30.000 30.000\n202 5823.000 3765.000 30.000 30.000\n203 5161.000 2142.000 30.000 30.000\n204 4661.000 1180.000 30.000 30.000\n205 -862.000 256.000 30.000 30.000\n206 3162.000 56.000 30.000 30.000\n207 4928.000 1127.000 30.000 30.000\n208 626.000 341.000 30.000 30.000\n209 387.000 1246.000 30.000 30.000\n210 3866.000 -53.000 30.000 30.000\n#\n177 178\n141 142\n85 112\n48 49\n94 95\n82 43\n203 204\n188 189\n46 47\n184 185\n205 206\n143 144\n34 170\n112 203\n11 42\n19 20\n31 70\n30 31\n187 188\n4 5\n93 94\n162 163\n102 103\n163 164\n8 9\n80 81\n3 4\n49 50\n114 209\n7 8\n197 198\n88 89\n70 71\n51 52\n74 75\n84 85\n172 173\n61 62\n169 0\n183 98\n167 168\n171 172\n33 34\n182 183\n73 51\n26 27\n41 146\n79 83\n20 21\n116 117\n110 111\n185 186\n62 63\n139 140\n12 32\n77 78\n175 176\n50 208\n123 124\n173 174\n47 207\n91 92\n104 105\n149 150\n192 193\n165 166\n154 155\n14 15\n128 0\n86 87\n99 79\n130 131\n44 45\n196 197\n179 180\n142 143\n151 152\n52 11\n45 46\n134 135\n136 137\n97 70\n120 121\n24 25\n15 16\n56 57\n16 17\n150 151\n144 145\n109 110\n10 86\n170 42\n122 123\n126 127\n176 177\n43 48\n96 97\n112 113\n186 187\n75 76\n40 41\n146 147\n11 32\n53 54\n168 169\n135 136\n190 191\n174 175\n6 7\n118 119\n17 18\n64 65\n60 61\n115 116\n178 179\n98 99\n5 6\n125 126\n160 161\n191 192\n54 55\n181 182\n206 210\n29 30\n101 102\n13 14\n43 44\n131 132\n127 128\n152 153\n164 146\n201 202\n78 12\n55 56\n37 38\n195 196\n63 64\n69 98\n100 101\n194 195\n67 74\n147 148\n42 32\n68 69\n57 58\n1 2\n159 160\n39 40\n2 68\n204 205\n113 114\n180 181\n9 10\n83 84\n193 194\n140 141\n28 29\n138 139\n79 80\n18 19\n156 157\n137 138\n198 199\n72 73\n90 91\n157 165\n200 201\n105 106\n199 200\n145 74\n95 96\n65 66\n166 167\n25 68\n38 86\n81 82\n124 125\n119 120\n117 203\n58 59\n89 90\n108 109\n76 77\n27 28\n158 159\n153 154\n66 67\n132 133\n36 37\n106 107\n87 88\n23 24\n92 93\n111 51\n59 60\n155 156\n112 115\n170 98\n161 162\n12 42\n133 134\n121 122\n32 33\n21 22\n202 165\n189 190\n148 149\n103 104\n129 130\n107 108\n71 72\n0 11\n22 23\n35 36\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/metro/sydney.gml",
    "content": "Creator\t\"yFiles\"\nVersion\t\"2.11\"\ngraph\n[\n\thierarchic\t1\n\tlabel\t\"\"\n\tdirected\t1\n\tnode\n\t[\n\t\tid\t0\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-97.78691407004277\n\t\t\ty\t193.91195939885415\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t1\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-562.1973506886451\n\t\t\ty\t197.36454920961887\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t2\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t28.130605454897136\n\t\t\ty\t31.659351311610124\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t3\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t201.65834894952013\n\t\t\ty\t122.11461555774463\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t4\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-321.57978179791905\n\t\t\ty\t-119.82015833613798\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t5\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-203.0418367248899\n\t\t\ty\t-373.67063252687205\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t6\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t40.34737280279762\n\t\t\ty\t-227.17292081898734\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t7\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t566.083400484991\n\t\t\ty\t-204.8499065531753\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t8\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-190.3250026870391\n\t\t\ty\t0.3723848320400407\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t9\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t552.9626294837187\n\t\t\ty\t-201.65388832396084\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t10\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-227.04031999102045\n\t\t\ty\t302.1337609832249\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t11\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-456.9450225353378\n\t\t\ty\t-303.76678545914353\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t12\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-1.6866608112233052\n\t\t\ty\t-162.05922536068013\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t13\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t92.6242316550738\n\t\t\ty\t268.2987767402409\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t14\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t70.26041300278678\n\t\t\ty\t-110.09836001071693\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t15\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-257.1264792835623\n\t\t\ty\t364.1592204670336\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t16\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t370.8481394272044\n\t\t\ty\t-3.9465554416992745\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t17\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t132.70780057485626\n\t\t\ty\t47.9336862467087\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t18\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-130.21408378513428\n\t\t\ty\t-162.72037002981077\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t19\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t409.68430653868324\n\t\t\ty\t-154.23530507963991\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t20\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t99.10543506014824\n\t\t\ty\t148.36893181527296\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t21\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-353.9040864117212\n\t\t\ty\t162.05038711816894\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t22\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-54.360488421622904\n\t\t\ty\t-218.23227750126304\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t23\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t156.11258048538593\n\t\t\ty\t-153.02547258283275\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t24\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-104.48059033239258\n\t\t\ty\t-203.5571877297127\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t25\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-447.52105240522957\n\t\t\ty\t382.1293133205836\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t26\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t535.8859926441421\n\t\t\ty\t50.324863279367946\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t27\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t79.4332799849143\n\t\t\ty\t72.42256797842913\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t28\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-381.9020872433688\n\t\t\ty\t-368.95772166786924\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t29\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-520.7266062197177\n\t\t\ty\t-152.9550624383827\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t30\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-337.09623314731755\n\t\t\ty\t-55.91639942395278\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t31\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-433.64978178704587\n\t\t\ty\t134.04423657624318\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t32\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-348.67949078213076\n\t\t\ty\t-245.85835842359404\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t33\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t188.21749109948018\n\t\t\ty\t-17.987357996625008\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t34\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t384.33144248831104\n\t\t\ty\t180.1948915617453\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t35\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t239.20810707980945\n\t\t\ty\t258.5397421162626\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t36\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t155.98024436089645\n\t\t\ty\t-364.12748742564867\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t37\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t402.84363151473565\n\t\t\ty\t-107.58235541112663\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t38\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t64.99549077816062\n\t\t\ty\t289.82675203821395\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t39\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-507.7874612829612\n\t\t\ty\t-124.89393364630303\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t40\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t567.7314554333209\n\t\t\ty\t276.20162570763716\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t41\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-82.22339747980152\n\t\t\ty\t-121.32521157884764\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t42\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t196.95592443354008\n\t\t\ty\t346.83990135670956\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t43\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-71.0187222244295\n\t\t\ty\t250.33639605139024\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t44\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-276.1451082310226\n\t\t\ty\t40.6102041553944\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t45\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-560.4431440385652\n\t\t\ty\t-198.2327260270225\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t46\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t142.55635910008505\n\t\t\ty\t-258.83594054737466\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t47\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-423.49816085195766\n\t\t\ty\t-89.31461864376075\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t48\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-430.4979598464779\n\t\t\ty\t342.54799833590823\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t49\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t467.4380815792597\n\t\t\ty\t-97.38703535544823\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t50\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t183.11557785037633\n\t\t\ty\t-309.6018209109815\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t51\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t45.31898445595334\n\t\t\ty\t126.39853273805187\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t52\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-321.5696140665233\n\t\t\ty\t2.935670410588557\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t53\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-335.6415639074976\n\t\t\ty\t379.90653378296474\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t54\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-463.3530944266022\n\t\t\ty\t288.65812754337185\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t55\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t368.526779789844\n\t\t\ty\t-377.69558588279835\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t56\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-173.00868941127317\n\t\t\ty\t204.48859535405745\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t57\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-113.96567697227727\n\t\t\ty\t52.58618070225782\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t58\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t439.7424026863324\n\t\t\ty\t-64.80471083164588\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t59\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t544.8890609434341\n\t\t\ty\t2.3677447751114755\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t60\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-429.11778847770796\n\t\t\ty\t20.13605367663638\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t61\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-257.1236959570145\n\t\t\ty\t-13.42697027507404\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t62\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-43.49134659618653\n\t\t\ty\t-185.190596689147\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t63\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t235.16295714594548\n\t\t\ty\t-95.59769833314255\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t64\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t61.9249450400099\n\t\t\ty\t220.30868655300856\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t65\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t436.1760795337767\n\t\t\ty\t-227.0681572377266\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t66\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-530.8095488389973\n\t\t\ty\t207.57924028437276\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t67\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t63.449259921446924\n\t\t\ty\t-245.15833946295527\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t68\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-88.11830713882375\n\t\t\ty\t317.36812566474475\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t69\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t315.7638893358028\n\t\t\ty\t380.1014276902464\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t70\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t368.8695566782502\n\t\t\ty\t108.93433285761103\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t71\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-454.85589075684095\n\t\t\ty\t118.96627366525757\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t72\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t56.070651193262165\n\t\t\ty\t40.95185684624789\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t73\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t470.0855353091781\n\t\t\ty\t118.34321894525397\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t74\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t470.3751122921585\n\t\t\ty\t342.5915200472135\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t75\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-335.1837991037735\n\t\t\ty\t-186.5143982075383\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t76\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-291.70717845196594\n\t\t\ty\t-222.49290142252792\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t77\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t368.3982829425912\n\t\t\ty\t320.05638406087405\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t78\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t246.2921471476211\n\t\t\ty\t-183.62064482967435\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t79\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t125.08363806033526\n\t\t\ty\t139.87341567596218\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t80\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t74.33159550306686\n\t\t\ty\t60.786771534407194\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t81\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-563.4652158501368\n\t\t\ty\t-2.892027480029185\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t82\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-314.2946214553521\n\t\t\ty\t40.474186309239826\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t83\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-138.68532639424944\n\t\t\ty\t340.3548992171237\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t84\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-369.96276136070105\n\t\t\ty\t-374.4186083950106\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t85\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t159.43423581741672\n\t\t\ty\t291.8265120074225\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t86\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t16.064684422461255\n\t\t\ty\t281.0709668509045\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t87\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t558.7266619824686\n\t\t\ty\t209.94380087378727\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t88\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t488.7575656059789\n\t\t\ty\t154.4599340457005\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t89\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-554.6099730167539\n\t\t\ty\t-102.19249434060765\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t90\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-333.69099907405564\n\t\t\ty\t-381.98726448207833\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t91\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-521.7926946082043\n\t\t\ty\t-54.57164909124168\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t92\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-51.37314806844404\n\t\t\ty\t-5.2066414920982425\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t93\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-150.28674898983047\n\t\t\ty\t352.1792411014892\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t94\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t424.1354713856513\n\t\t\ty\t152.4015781465755\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t95\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t473.93250460403465\n\t\t\ty\t-240.29581452084176\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t96\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-111.02558069590424\n\t\t\ty\t-87.1657293549805\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t97\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t532.2609524133379\n\t\t\ty\t-305.5226294211066\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t98\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t21.050592140448202\n\t\t\ty\t-326.28491517860033\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t99\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t362.60495872369233\n\t\t\ty\t-316.64743291784174\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t100\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-466.13522186448336\n\t\t\ty\t-284.8741435634121\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t101\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t118.02852728484947\n\t\t\ty\t-95.22334415064023\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t102\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t242.5898664414874\n\t\t\ty\t-178.5486057280814\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t103\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-470.1122353462144\n\t\t\ty\t166.86288999784642\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t104\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t251.53121548194815\n\t\t\ty\t-4.986143995352336\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t105\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t481.75571754835937\n\t\t\ty\t105.2284569922146\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t106\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t510.8428907028738\n\t\t\ty\t49.826331205189604\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t107\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t220.3573223649223\n\t\t\ty\t-307.60285041973714\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t108\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-90.7860117266506\n\t\t\ty\t-292.46514426287376\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t109\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-379.7550718105737\n\t\t\ty\t-211.34781811722988\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t110\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-249.82952198612736\n\t\t\ty\t-16.453774998627807\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t111\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-322.9503821155498\n\t\t\ty\t349.4955181302596\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t112\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t308.665546433547\n\t\t\ty\t-382.54569405642184\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t113\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-219.1585134692237\n\t\t\ty\t-238.67071880758132\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t114\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-85.24933346610464\n\t\t\ty\t6.179578724410874\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t115\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t441.424181595332\n\t\t\ty\t348.6209401941551\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t116\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t78.33400545592633\n\t\t\ty\t-357.2721204205493\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t117\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t150.27485372667252\n\t\t\ty\t168.64828531392288\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t118\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t270.34017510504657\n\t\t\ty\t72.15126248223146\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t119\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-168.6801125638063\n\t\t\ty\t129.9415761288792\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t120\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t547.9867054109959\n\t\t\ty\t-244.8406433143905\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t121\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-299.1897883227445\n\t\t\ty\t-240.25089147795688\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t122\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t383.38799189920815\n\t\t\ty\t-11.117411575687356\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t123\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-232.77299869962104\n\t\t\ty\t-107.7508163009337\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t124\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-160.71430237994838\n\t\t\ty\t-262.4714241135924\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t125\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-499.5906922031561\n\t\t\ty\t-27.18480903809609\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t126\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t338.3881949433014\n\t\t\ty\t11.100661760938351\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t127\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-464.05065383501943\n\t\t\ty\t262.4121466967513\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t128\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-159.42318286512335\n\t\t\ty\t181.96317977178217\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t129\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-205.6498743907121\n\t\t\ty\t-3.837982331802152\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t130\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-436.89188023320656\n\t\t\ty\t14.840473527745928\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t131\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-482.51884594805875\n\t\t\ty\t-366.7384800007809\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t132\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-415.09614986682976\n\t\t\ty\t-354.1730521292987\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t133\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t24.504493536733207\n\t\t\ty\t-208.22974009961996\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t134\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t499.0791348193436\n\t\t\ty\t306.1632379156247\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t135\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-390.32739990760206\n\t\t\ty\t273.3083720198082\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t136\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t271.0099738464743\n\t\t\ty\t-75.10116216556594\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t137\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-48.77743884613176\n\t\t\ty\t-82.58800761021934\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t138\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-362.51347687672796\n\t\t\ty\t-348.8857370319088\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t139\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t374.0083588639949\n\t\t\ty\t267.1911078601772\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t140\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-553.1623028981592\n\t\t\ty\t189.11575111560842\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t141\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t328.52394507111455\n\t\t\ty\t197.0186484053537\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t142\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t161.34495585150592\n\t\t\ty\t92.94397731623809\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t143\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t352.57339117268066\n\t\t\ty\t-140.7490314883344\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t144\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t166.78938541785715\n\t\t\ty\t-16.347489731533983\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t145\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-416.955824341646\n\t\t\ty\t246.43881809816276\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t146\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-432.4031006189675\n\t\t\ty\t-27.884615368053517\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t147\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t437.0299352601272\n\t\t\ty\t-357.8655478071509\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t148\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-502.2402735235207\n\t\t\ty\t-116.387279522077\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t149\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t377.9360509043454\n\t\t\ty\t-308.7653509472218\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t150\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-345.4800949963405\n\t\t\ty\t-347.8784828948428\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t151\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t167.18043008511756\n\t\t\ty\t-370.1793579934345\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t152\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-98.29758422039646\n\t\t\ty\t272.103665721305\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t153\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t223.67489481200448\n\t\t\ty\t-65.33497130142769\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t154\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-322.419868639878\n\t\t\ty\t217.63618816161454\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t155\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-302.55990230435356\n\t\t\ty\t19.972385753577782\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t156\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t440.24205212323875\n\t\t\ty\t-331.03121909396066\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t157\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t19.467113724359365\n\t\t\ty\t333.5041191733088\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t158\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t56.61848309603283\n\t\t\ty\t115.02162143402114\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t159\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-261.70636868837005\n\t\t\ty\t46.009409107610225\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t160\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t470.5936504384133\n\t\t\ty\t356.9513126658933\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t161\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-456.2889264705991\n\t\t\ty\t214.84370394210532\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t162\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-273.99390586327814\n\t\t\ty\t258.7162961530339\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t163\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t66.56018451571697\n\t\t\ty\t-63.1981428755102\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t164\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-361.19900843594826\n\t\t\ty\t135.56219080887104\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t165\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-510.2902492492681\n\t\t\ty\t-25.47229440019032\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t166\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t223.15624590859136\n\t\t\ty\t-23.473522464714335\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t167\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-229.95912176026826\n\t\t\ty\t-296.617066873962\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t168\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-20.944132655608087\n\t\t\ty\t-219.5739401790993\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t169\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t210.58418898824743\n\t\t\ty\t51.36730562414499\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t170\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t178.52865691476507\n\t\t\ty\t62.344915013483615\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t171\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t391.8729783641728\n\t\t\ty\t153.57867906700938\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t172\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t211.6096024204369\n\t\t\ty\t59.3785209541432\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t126\n\t\ttarget\t47\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t47\n\t\ttarget\t35\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t35\n\t\ttarget\t166\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t166\n\t\ttarget\t102\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t102\n\t\ttarget\t154\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t154\n\t\ttarget\t127\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t127\n\t\ttarget\t134\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t134\n\t\ttarget\t121\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t121\n\t\ttarget\t89\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t89\n\t\ttarget\t16\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t50\n\t\ttarget\t116\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t116\n\t\ttarget\t75\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t75\n\t\ttarget\t162\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t162\n\t\ttarget\t139\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t139\n\t\ttarget\t100\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t100\n\t\ttarget\t130\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t130\n\t\ttarget\t43\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t43\n\t\ttarget\t16\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t16\n\t\ttarget\t136\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t136\n\t\ttarget\t149\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t149\n\t\ttarget\t114\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t114\n\t\ttarget\t161\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t161\n\t\ttarget\t164\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t164\n\t\ttarget\t113\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t113\n\t\ttarget\t62\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t62\n\t\ttarget\t58\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t58\n\t\ttarget\t36\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t36\n\t\ttarget\t5\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t5\n\t\ttarget\t82\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t82\n\t\ttarget\t55\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t82\n\t\ttarget\t110\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t110\n\t\ttarget\t55\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t55\n\t\ttarget\t65\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t65\n\t\ttarget\t142\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t142\n\t\ttarget\t18\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t18\n\t\ttarget\t40\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t40\n\t\ttarget\t3\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t3\n\t\ttarget\t143\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t143\n\t\ttarget\t81\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t81\n\t\ttarget\t118\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t118\n\t\ttarget\t141\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t141\n\t\ttarget\t105\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t105\n\t\ttarget\t87\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t87\n\t\ttarget\t122\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t122\n\t\ttarget\t30\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t30\n\t\ttarget\t150\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t150\n\t\ttarget\t170\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t170\n\t\ttarget\t95\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t95\n\t\ttarget\t108\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t108\n\t\ttarget\t160\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t160\n\t\ttarget\t168\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t168\n\t\ttarget\t138\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t138\n\t\ttarget\t2\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t2\n\t\ttarget\t31\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t31\n\t\ttarget\t132\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t132\n\t\ttarget\t83\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t83\n\t\ttarget\t72\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t72\n\t\ttarget\t57\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t57\n\t\ttarget\t120\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t120\n\t\ttarget\t151\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t151\n\t\ttarget\t157\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t157\n\t\ttarget\t155\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t155\n\t\ttarget\t156\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t156\n\t\ttarget\t66\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t66\n\t\ttarget\t4\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t4\n\t\ttarget\t99\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t99\n\t\ttarget\t101\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t101\n\t\ttarget\t12\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t66\n\t\ttarget\t106\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t106\n\t\ttarget\t148\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t148\n\t\ttarget\t115\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t115\n\t\ttarget\t9\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t9\n\t\ttarget\t32\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t32\n\t\ttarget\t52\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t52\n\t\ttarget\t48\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t48\n\t\ttarget\t41\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t41\n\t\ttarget\t163\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t163\n\t\ttarget\t93\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t93\n\t\ttarget\t125\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t125\n\t\ttarget\t38\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t38\n\t\ttarget\t107\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t107\n\t\ttarget\t142\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t26\n\t\ttarget\t146\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t146\n\t\ttarget\t45\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t45\n\t\ttarget\t133\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t133\n\t\ttarget\t20\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t20\n\t\ttarget\t131\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t131\n\t\ttarget\t36\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t62\n\t\ttarget\t94\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t94\n\t\ttarget\t60\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t60\n\t\ttarget\t172\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t172\n\t\ttarget\t54\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t54\n\t\ttarget\t23\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t23\n\t\ttarget\t19\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t19\n\t\ttarget\t158\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t158\n\t\ttarget\t84\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t84\n\t\ttarget\t29\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t29\n\t\ttarget\t56\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t56\n\t\ttarget\t88\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t88\n\t\ttarget\t69\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t69\n\t\ttarget\t96\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t96\n\t\ttarget\t80\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t80\n\t\ttarget\t21\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t21\n\t\ttarget\t86\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t56\n\t\ttarget\t64\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t64\n\t\ttarget\t46\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t46\n\t\ttarget\t112\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t112\n\t\ttarget\t124\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t124\n\t\ttarget\t111\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t111\n\t\ttarget\t128\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t128\n\t\ttarget\t104\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t104\n\t\ttarget\t13\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t13\n\t\ttarget\t74\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t74\n\t\ttarget\t14\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t14\n\t\ttarget\t8\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t8\n\t\ttarget\t152\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t152\n\t\ttarget\t167\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t167\n\t\ttarget\t70\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t70\n\t\ttarget\t42\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t42\n\t\ttarget\t92\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t92\n\t\ttarget\t59\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t59\n\t\ttarget\t30\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t30\n\t\ttarget\t103\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t103\n\t\ttarget\t137\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t137\n\t\ttarget\t34\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t34\n\t\ttarget\t170\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t94\n\t\ttarget\t58\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t19\n\t\ttarget\t28\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t28\n\t\ttarget\t153\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t153\n\t\ttarget\t79\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t79\n\t\ttarget\t33\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t33\n\t\ttarget\t135\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t135\n\t\ttarget\t123\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t123\n\t\ttarget\t11\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t11\n\t\ttarget\t82\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t15\n\t\ttarget\t135\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t15\n\t\ttarget\t123\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t15\n\t\ttarget\t171\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t171\n\t\ttarget\t7\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t7\n\t\ttarget\t119\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t119\n\t\ttarget\t165\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t165\n\t\ttarget\t78\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t78\n\t\ttarget\t10\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t10\n\t\ttarget\t22\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t22\n\t\ttarget\t24\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t24\n\t\ttarget\t67\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t67\n\t\ttarget\t44\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t44\n\t\ttarget\t90\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t90\n\t\ttarget\t145\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t145\n\t\ttarget\t140\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t140\n\t\ttarget\t53\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t53\n\t\ttarget\t122\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t159\n\t\ttarget\t63\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t63\n\t\ttarget\t51\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t51\n\t\ttarget\t85\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t85\n\t\ttarget\t144\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t39\n\t\ttarget\t169\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t169\n\t\ttarget\t25\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t25\n\t\ttarget\t97\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t97\n\t\ttarget\t61\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t61\n\t\ttarget\t76\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t76\n\t\ttarget\t144\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t144\n\t\ttarget\t71\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t71\n\t\ttarget\t37\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t37\n\t\ttarget\t109\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t109\n\t\ttarget\t98\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t98\n\t\ttarget\t117\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t117\n\t\ttarget\t68\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t68\n\t\ttarget\t0\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t0\n\t\ttarget\t27\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t27\n\t\ttarget\t77\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t77\n\t\ttarget\t129\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t129\n\t\ttarget\t6\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t6\n\t\ttarget\t1\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t1\n\t\ttarget\t167\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t167\n\t\ttarget\t147\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t147\n\t\ttarget\t145\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t150\n\t\ttarget\t91\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t91\n\t\ttarget\t73\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t73\n\t\ttarget\t49\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t49\n\t\ttarget\t17\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n]\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/metro/sydney.tglf",
    "content": "0 -97.000 193.000 30.000 30.000\n1 -562.000 197.000 30.000 30.000\n2 28.000 31.000 30.000 30.000\n3 201.000 122.000 30.000 30.000\n4 -321.000 -119.000 30.000 30.000\n5 -203.000 -373.000 30.000 30.000\n6 40.000 -227.000 30.000 30.000\n7 566.000 -204.000 30.000 30.000\n8 -190.000 0.000 30.000 30.000\n9 552.000 -201.000 30.000 30.000\n10 -227.000 302.000 30.000 30.000\n11 -456.000 -303.000 30.000 30.000\n12 -1.000 -162.000 30.000 30.000\n13 92.000 268.000 30.000 30.000\n14 70.000 -110.000 30.000 30.000\n15 -257.000 364.000 30.000 30.000\n16 370.000 -3.000 30.000 30.000\n17 132.000 47.000 30.000 30.000\n18 -130.000 -162.000 30.000 30.000\n19 409.000 -154.000 30.000 30.000\n20 99.000 148.000 30.000 30.000\n21 -353.000 162.000 30.000 30.000\n22 -54.000 -218.000 30.000 30.000\n23 156.000 -153.000 30.000 30.000\n24 -104.000 -203.000 30.000 30.000\n25 -447.000 382.000 30.000 30.000\n26 535.000 50.000 30.000 30.000\n27 79.000 72.000 30.000 30.000\n28 -381.000 -368.000 30.000 30.000\n29 -520.000 -152.000 30.000 30.000\n30 -337.000 -55.000 30.000 30.000\n31 -433.000 134.000 30.000 30.000\n32 -348.000 -245.000 30.000 30.000\n33 188.000 -17.000 30.000 30.000\n34 384.000 180.000 30.000 30.000\n35 239.000 258.000 30.000 30.000\n36 155.000 -364.000 30.000 30.000\n37 402.000 -107.000 30.000 30.000\n38 64.000 289.000 30.000 30.000\n39 -507.000 -124.000 30.000 30.000\n40 567.000 276.000 30.000 30.000\n41 -82.000 -121.000 30.000 30.000\n42 196.000 346.000 30.000 30.000\n43 -71.000 250.000 30.000 30.000\n44 -276.000 40.000 30.000 30.000\n45 -560.000 -198.000 30.000 30.000\n46 142.000 -258.000 30.000 30.000\n47 -423.000 -89.000 30.000 30.000\n48 -430.000 342.000 30.000 30.000\n49 467.000 -97.000 30.000 30.000\n50 183.000 -309.000 30.000 30.000\n51 45.000 126.000 30.000 30.000\n52 -321.000 2.000 30.000 30.000\n53 -335.000 379.000 30.000 30.000\n54 -463.000 288.000 30.000 30.000\n55 368.000 -377.000 30.000 30.000\n56 -173.000 204.000 30.000 30.000\n57 -113.000 52.000 30.000 30.000\n58 439.000 -64.000 30.000 30.000\n59 544.000 2.000 30.000 30.000\n60 -429.000 20.000 30.000 30.000\n61 -257.000 -13.000 30.000 30.000\n62 -43.000 -185.000 30.000 30.000\n63 235.000 -95.000 30.000 30.000\n64 61.000 220.000 30.000 30.000\n65 436.000 -227.000 30.000 30.000\n66 -530.000 207.000 30.000 30.000\n67 63.000 -245.000 30.000 30.000\n68 -88.000 317.000 30.000 30.000\n69 315.000 380.000 30.000 30.000\n70 368.000 108.000 30.000 30.000\n71 -454.000 118.000 30.000 30.000\n72 56.000 40.000 30.000 30.000\n73 470.000 118.000 30.000 30.000\n74 470.000 342.000 30.000 30.000\n75 -335.000 -186.000 30.000 30.000\n76 -291.000 -222.000 30.000 30.000\n77 368.000 320.000 30.000 30.000\n78 246.000 -183.000 30.000 30.000\n79 125.000 139.000 30.000 30.000\n80 74.000 60.000 30.000 30.000\n81 -563.000 -2.000 30.000 30.000\n82 -314.000 40.000 30.000 30.000\n83 -138.000 340.000 30.000 30.000\n84 -369.000 -374.000 30.000 30.000\n85 159.000 291.000 30.000 30.000\n86 16.000 281.000 30.000 30.000\n87 558.000 209.000 30.000 30.000\n88 488.000 154.000 30.000 30.000\n89 -554.000 -102.000 30.000 30.000\n90 -333.000 -381.000 30.000 30.000\n91 -521.000 -54.000 30.000 30.000\n92 -51.000 -5.000 30.000 30.000\n93 -150.000 352.000 30.000 30.000\n94 424.000 152.000 30.000 30.000\n95 473.000 -240.000 30.000 30.000\n96 -111.000 -87.000 30.000 30.000\n97 532.000 -305.000 30.000 30.000\n98 21.000 -326.000 30.000 30.000\n99 362.000 -316.000 30.000 30.000\n100 -466.000 -284.000 30.000 30.000\n101 118.000 -95.000 30.000 30.000\n102 242.000 -178.000 30.000 30.000\n103 -470.000 166.000 30.000 30.000\n104 251.000 -4.000 30.000 30.000\n105 481.000 105.000 30.000 30.000\n106 510.000 49.000 30.000 30.000\n107 220.000 -307.000 30.000 30.000\n108 -90.000 -292.000 30.000 30.000\n109 -379.000 -211.000 30.000 30.000\n110 -249.000 -16.000 30.000 30.000\n111 -322.000 349.000 30.000 30.000\n112 308.000 -382.000 30.000 30.000\n113 -219.000 -238.000 30.000 30.000\n114 -85.000 6.000 30.000 30.000\n115 441.000 348.000 30.000 30.000\n116 78.000 -357.000 30.000 30.000\n117 150.000 168.000 30.000 30.000\n118 270.000 72.000 30.000 30.000\n119 -168.000 129.000 30.000 30.000\n120 547.000 -244.000 30.000 30.000\n121 -299.000 -240.000 30.000 30.000\n122 383.000 -11.000 30.000 30.000\n123 -232.000 -107.000 30.000 30.000\n124 -160.000 -262.000 30.000 30.000\n125 -499.000 -27.000 30.000 30.000\n126 338.000 11.000 30.000 30.000\n127 -464.000 262.000 30.000 30.000\n128 -159.000 181.000 30.000 30.000\n129 -205.000 -3.000 30.000 30.000\n130 -436.000 14.000 30.000 30.000\n131 -482.000 -366.000 30.000 30.000\n132 -415.000 -354.000 30.000 30.000\n133 24.000 -208.000 30.000 30.000\n134 499.000 306.000 30.000 30.000\n135 -390.000 273.000 30.000 30.000\n136 271.000 -75.000 30.000 30.000\n137 -48.000 -82.000 30.000 30.000\n138 -362.000 -348.000 30.000 30.000\n139 374.000 267.000 30.000 30.000\n140 -553.000 189.000 30.000 30.000\n141 328.000 197.000 30.000 30.000\n142 161.000 92.000 30.000 30.000\n143 352.000 -140.000 30.000 30.000\n144 166.000 -16.000 30.000 30.000\n145 -416.000 246.000 30.000 30.000\n146 -432.000 -27.000 30.000 30.000\n147 437.000 -357.000 30.000 30.000\n148 -502.000 -116.000 30.000 30.000\n149 377.000 -308.000 30.000 30.000\n150 -345.000 -347.000 30.000 30.000\n151 167.000 -370.000 30.000 30.000\n152 -98.000 272.000 30.000 30.000\n153 223.000 -65.000 30.000 30.000\n154 -322.000 217.000 30.000 30.000\n155 -302.000 19.000 30.000 30.000\n156 440.000 -331.000 30.000 30.000\n157 19.000 333.000 30.000 30.000\n158 56.000 115.000 30.000 30.000\n159 -261.000 46.000 30.000 30.000\n160 470.000 356.000 30.000 30.000\n161 -456.000 214.000 30.000 30.000\n162 -273.000 258.000 30.000 30.000\n163 66.000 -63.000 30.000 30.000\n164 -361.000 135.000 30.000 30.000\n165 -510.000 -25.000 30.000 30.000\n166 223.000 -23.000 30.000 30.000\n167 -229.000 -296.000 30.000 30.000\n168 -20.000 -219.000 30.000 30.000\n169 210.000 51.000 30.000 30.000\n170 178.000 62.000 30.000 30.000\n171 391.000 153.000 30.000 30.000\n172 211.000 59.000 30.000 30.000\n#\n62 94\n15 123\n30 103\n1 167\n73 49\n153 79\n145 140\n55 65\n133 20\n75 162\n71 37\n11 82\n169 25\n170 95\n67 44\n161 164\n152 167\n126 47\n140 53\n106 148\n78 10\n99 101\n164 113\n171 7\n91 73\n122 30\n66 4\n84 29\n38 107\n98 117\n36 5\n54 23\n16 136\n112 124\n19 28\n5 82\n132 83\n45 133\n56 88\n50 116\n46 112\n97 61\n77 129\n74 14\n82 110\n165 78\n94 60\n142 18\n119 165\n6 1\n137 34\n59 30\n134 121\n109 98\n81 118\n52 48\n14 8\n123 11\n113 62\n136 149\n34 170\n4 99\n32 52\n63 51\n65 142\n51 85\n35 166\n41 163\n20 131\n28 153\n27 77\n29 56\n107 142\n89 16\n53 122\n162 139\n163 93\n88 69\n144 71\n124 111\n138 2\n30 150\n93 125\n42 92\n149 114\n108 160\n139 100\n129 6\n40 3\n82 55\n154 127\n166 102\n125 38\n21 86\n39 169\n100 130\n72 57\n115 9\n9 32\n23 19\n85 144\n95 108\n118 141\n156 66\n128 104\n172 54\n120 151\n19 158\n66 106\n114 161\n0 27\n160 168\n116 75\n155 156\n101 12\n150 170\n110 55\n22 24\n168 138\n167 70\n96 80\n47 35\n56 64\n90 145\n64 46\n127 134\n143 81\n62 58\n26 146\n48 41\n33 135\n13 74\n79 33\n61 76\n111 128\n24 67\n60 172\n8 152\n43 16\n135 123\n158 84\n49 17\n130 43\n102 154\n10 22\n94 58\n151 157\n37 109\n159 63\n87 122\n57 120\n18 40\n146 45\n44 90\n2 31\n15 135\n3 143\n117 68\n31 132\n105 87\n167 147\n131 36\n70 42\n83 72\n103 137\n92 59\n80 21\n69 96\n148 115\n147 145\n121 89\n15 171\n150 91\n141 105\n25 97\n58 36\n7 119\n104 13\n68 0\n76 144\n157 155\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/metro/wien-kurz.gml",
    "content": "Creator\t\"yFiles\"\nVersion\t\"2.11\"\ngraph\n[\n\thierarchic\t1\n\tlabel\t\"\"\n\tdirected\t1\n\tnode\n\t[\n\t\tid\t0\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t80.90251104978654\n\t\t\ty\t-80.76715755143971\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t1\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t296.7253701377896\n\t\t\ty\t-346.7919705847594\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t2\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-397.96509764121106\n\t\t\ty\t83.90766310010679\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t3\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-518.5468248481618\n\t\t\ty\t281.900717013486\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t4\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-83.97733382255831\n\t\t\ty\t37.15333752229395\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t5\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-78.28061466559302\n\t\t\ty\t-92.90922182314313\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t6\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-110.43752445995204\n\t\t\ty\t243.4376979183736\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t7\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t380.06426915986697\n\t\t\ty\t-93.28551713338032\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t8\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t535.04038022838\n\t\t\ty\t293.92651813193015\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t9\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-38.91347768140213\n\t\t\ty\t232.05869675510394\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t10\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-9.085360138713327\n\t\t\ty\t-304.0333963221457\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t11\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t269.4161853897772\n\t\t\ty\t312.8351903688821\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t12\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t428.3425849990589\n\t\t\ty\t220.97928283740578\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t13\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-565.4777194589515\n\t\t\ty\t-155.97664958560478\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t14\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-290.9059469722378\n\t\t\ty\t94.78063942639653\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t15\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-277.54040142734254\n\t\t\ty\t-362.9719181703795\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t16\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-85.965167398294\n\t\t\ty\t-211.85991296715497\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t17\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-246.9901687169688\n\t\t\ty\t318.71347660579204\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t18\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t461.67412685793124\n\t\t\ty\t-276.8788767124929\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t19\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t545.4911047203684\n\t\t\ty\t31.82380366769536\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t20\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t44.44797808732551\n\t\t\ty\t-267.581959822275\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t21\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-14.20106382018389\n\t\t\ty\t-102.80776063868143\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t22\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-142.44142388696378\n\t\t\ty\t-177.49019150087614\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t23\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t10.997356498877593\n\t\t\ty\t307.96380268770713\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t24\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-546.6943209465237\n\t\t\ty\t-45.00247045338233\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t25\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t249.00544588526554\n\t\t\ty\t228.82262849903714\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t26\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t307.93066779387925\n\t\t\ty\t109.97348808983406\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t27\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-88.38173351219098\n\t\t\ty\t-181.0849831485416\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t28\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-314.95163225522504\n\t\t\ty\t106.69093810226741\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t29\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t397.2648803486147\n\t\t\ty\t-154.2018418109607\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t30\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t64.76350130681772\n\t\t\ty\t-43.83992808316708\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t31\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-528.4629419349408\n\t\t\ty\t233.32085101439964\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t32\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t115.56008778925911\n\t\t\ty\t-220.40878346422184\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t33\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-226.3761310551032\n\t\t\ty\t176.85601086979307\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t34\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t517.0123986786161\n\t\t\ty\t-326.16153745648666\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t35\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-269.6438428127214\n\t\t\ty\t-307.2441124780461\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t36\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t435.29414913904054\n\t\t\ty\t-255.83309438560627\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t37\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-513.3972609703272\n\t\t\ty\t309.2899922293584\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t38\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-147.6394947101814\n\t\t\ty\t-378.2258630405579\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t39\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t437.2677011786627\n\t\t\ty\t87.65124794258435\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t40\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t376.54383155412654\n\t\t\ty\t-265.4585455121842\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t41\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-174.8868240682441\n\t\t\ty\t-204.11976792344598\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t42\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-514.8615496260906\n\t\t\ty\t382.47282339920366\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t43\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t497.07657626512196\n\t\t\ty\t117.7580044681979\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t44\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t368.3540816818228\n\t\t\ty\t-33.800700170786286\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t45\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t566.6643025666904\n\t\t\ty\t-113.14299747626762\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t46\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-355.2104149634051\n\t\t\ty\t-196.21555150132946\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t47\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-420.61448210851376\n\t\t\ty\t-150.9843457197879\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t48\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t230.32025523431162\n\t\t\ty\t-26.1393286880878\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t49\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-352.95904308756394\n\t\t\ty\t-113.4842576008432\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t50\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-332.9985488258409\n\t\t\ty\t-262.1406040906462\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t51\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-69.00011250166244\n\t\t\ty\t-225.8069160524013\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t52\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t160.27033472959738\n\t\t\ty\t38.76744561928979\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t53\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-338.6124589219354\n\t\t\ty\t79.6005737034626\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t54\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t527.3750075612409\n\t\t\ty\t266.4495655023496\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t55\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-283.6384679440782\n\t\t\ty\t-209.83113976625467\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t56\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t555.5762399817136\n\t\t\ty\t-57.87775151818943\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t57\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-51.61866908490583\n\t\t\ty\t-115.92658385036759\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t58\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-557.7477079649748\n\t\t\ty\t-8.954073853289344\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t59\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t357.5698765405908\n\t\t\ty\t-133.7816057715093\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t60\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-220.40926155049033\n\t\t\ty\t-69.07714129708171\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t61\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t300.9284410659827\n\t\t\ty\t-5.6141913205188985\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t62\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-205.92606466197913\n\t\t\ty\t-290.15461208470515\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t63\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t339.29886366196104\n\t\t\ty\t-226.82505355350105\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t64\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-442.5442315017763\n\t\t\ty\t-218.06578931082385\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t65\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t341.56658136380065\n\t\t\ty\t-147.1290736252233\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t66\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t488.38738438270025\n\t\t\ty\t101.03854402430227\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t67\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-335.33136808057844\n\t\t\ty\t30.831717329661785\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t68\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t539.2784186867384\n\t\t\ty\t-298.9598078749998\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t69\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-539.4924304547633\n\t\t\ty\t362.37257634874334\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t70\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t1.377207920108276\n\t\t\ty\t309.41094285235704\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t71\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t571.8800438513763\n\t\t\ty\t294.45217913046827\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t72\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-570.5793598688543\n\t\t\ty\t92.71735638588206\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t73\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t214.00376173899826\n\t\t\ty\t-269.2712305281772\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t74\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t370.5381805714568\n\t\t\ty\t-71.25010879022307\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t75\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-448.8287804477234\n\t\t\ty\t18.756013464070406\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t76\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t509.39877325326256\n\t\t\ty\t-276.12720230524786\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t77\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t78.4716126561533\n\t\t\ty\t-362.7734340897311\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t78\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t95.86259484893287\n\t\t\ty\t170.04890702513876\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t79\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t277.40407661264976\n\t\t\ty\t301.247508027314\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t80\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-196.3611788075109\n\t\t\ty\t-342.21170850605546\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t81\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t175.5561096598111\n\t\t\ty\t36.64599108151782\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t82\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-505.3371026226222\n\t\t\ty\t197.00212509845392\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t83\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-364.6598917986985\n\t\t\ty\t-129.7460805489186\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t0\n\t\ttarget\t1\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t1\n\t\ttarget\t2\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t2\n\t\ttarget\t3\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t3\n\t\ttarget\t4\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t4\n\t\ttarget\t5\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t5\n\t\ttarget\t6\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t6\n\t\ttarget\t7\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t7\n\t\ttarget\t8\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t8\n\t\ttarget\t9\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t9\n\t\ttarget\t10\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t10\n\t\ttarget\t11\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t11\n\t\ttarget\t12\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t12\n\t\ttarget\t13\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t13\n\t\ttarget\t14\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t14\n\t\ttarget\t15\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t15\n\t\ttarget\t16\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t16\n\t\ttarget\t17\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t17\n\t\ttarget\t18\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t18\n\t\ttarget\t19\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t20\n\t\ttarget\t21\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t21\n\t\ttarget\t22\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t22\n\t\ttarget\t23\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t23\n\t\ttarget\t24\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t24\n\t\ttarget\t25\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t25\n\t\ttarget\t26\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t26\n\t\ttarget\t27\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t27\n\t\ttarget\t7\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t7\n\t\ttarget\t28\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t28\n\t\ttarget\t29\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t29\n\t\ttarget\t30\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t30\n\t\ttarget\t31\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t31\n\t\ttarget\t32\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t32\n\t\ttarget\t33\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t33\n\t\ttarget\t34\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t34\n\t\ttarget\t35\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t35\n\t\ttarget\t36\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t36\n\t\ttarget\t18\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t18\n\t\ttarget\t37\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t37\n\t\ttarget\t38\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t38\n\t\ttarget\t39\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t39\n\t\ttarget\t40\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t40\n\t\ttarget\t41\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t42\n\t\ttarget\t43\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t43\n\t\ttarget\t44\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t44\n\t\ttarget\t45\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t45\n\t\ttarget\t46\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t46\n\t\ttarget\t29\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t29\n\t\ttarget\t47\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t47\n\t\ttarget\t48\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t48\n\t\ttarget\t49\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t49\n\t\ttarget\t50\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t50\n\t\ttarget\t51\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t51\n\t\ttarget\t52\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t52\n\t\ttarget\t13\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t13\n\t\ttarget\t53\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t53\n\t\ttarget\t54\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t54\n\t\ttarget\t55\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t55\n\t\ttarget\t56\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t56\n\t\ttarget\t57\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t57\n\t\ttarget\t58\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t58\n\t\ttarget\t59\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t59\n\t\ttarget\t60\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t61\n\t\ttarget\t62\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t62\n\t\ttarget\t63\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t63\n\t\ttarget\t64\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t64\n\t\ttarget\t11\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t11\n\t\ttarget\t51\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t51\n\t\ttarget\t14\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t14\n\t\ttarget\t65\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t65\n\t\ttarget\t66\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t66\n\t\ttarget\t67\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t67\n\t\ttarget\t68\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t68\n\t\ttarget\t69\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t69\n\t\ttarget\t70\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t70\n\t\ttarget\t71\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t71\n\t\ttarget\t72\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t72\n\t\ttarget\t73\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t73\n\t\ttarget\t74\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t74\n\t\ttarget\t75\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t75\n\t\ttarget\t76\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t11\n\t\ttarget\t77\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t77\n\t\ttarget\t49\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t49\n\t\ttarget\t78\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t78\n\t\ttarget\t79\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t79\n\t\ttarget\t15\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t15\n\t\ttarget\t80\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t80\n\t\ttarget\t66\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t66\n\t\ttarget\t81\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t81\n\t\ttarget\t82\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t82\n\t\ttarget\t83\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n]\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/metro/wien-kurz.tglf",
    "content": "0 80.000 -80.000 30.000 30.000\n1 296.000 -346.000 30.000 30.000\n2 -397.000 83.000 30.000 30.000\n3 -518.000 281.000 30.000 30.000\n4 -83.000 37.000 30.000 30.000\n5 -78.000 -92.000 30.000 30.000\n6 -110.000 243.000 30.000 30.000\n7 380.000 -93.000 30.000 30.000\n8 535.000 293.000 30.000 30.000\n9 -38.000 232.000 30.000 30.000\n10 -9.000 -304.000 30.000 30.000\n11 269.000 312.000 30.000 30.000\n12 428.000 220.000 30.000 30.000\n13 -565.000 -155.000 30.000 30.000\n14 -290.000 94.000 30.000 30.000\n15 -277.000 -362.000 30.000 30.000\n16 -85.000 -211.000 30.000 30.000\n17 -246.000 318.000 30.000 30.000\n18 461.000 -276.000 30.000 30.000\n19 545.000 31.000 30.000 30.000\n20 44.000 -267.000 30.000 30.000\n21 -14.000 -102.000 30.000 30.000\n22 -142.000 -177.000 30.000 30.000\n23 10.000 307.000 30.000 30.000\n24 -546.000 -45.000 30.000 30.000\n25 249.000 228.000 30.000 30.000\n26 307.000 109.000 30.000 30.000\n27 -88.000 -181.000 30.000 30.000\n28 -314.000 106.000 30.000 30.000\n29 397.000 -154.000 30.000 30.000\n30 64.000 -43.000 30.000 30.000\n31 -528.000 233.000 30.000 30.000\n32 115.000 -220.000 30.000 30.000\n33 -226.000 176.000 30.000 30.000\n34 517.000 -326.000 30.000 30.000\n35 -269.000 -307.000 30.000 30.000\n36 435.000 -255.000 30.000 30.000\n37 -513.000 309.000 30.000 30.000\n38 -147.000 -378.000 30.000 30.000\n39 437.000 87.000 30.000 30.000\n40 376.000 -265.000 30.000 30.000\n41 -174.000 -204.000 30.000 30.000\n42 -514.000 382.000 30.000 30.000\n43 497.000 117.000 30.000 30.000\n44 368.000 -33.000 30.000 30.000\n45 566.000 -113.000 30.000 30.000\n46 -355.000 -196.000 30.000 30.000\n47 -420.000 -150.000 30.000 30.000\n48 230.000 -26.000 30.000 30.000\n49 -352.000 -113.000 30.000 30.000\n50 -332.000 -262.000 30.000 30.000\n51 -69.000 -225.000 30.000 30.000\n52 160.000 38.000 30.000 30.000\n53 -338.000 79.000 30.000 30.000\n54 527.000 266.000 30.000 30.000\n55 -283.000 -209.000 30.000 30.000\n56 555.000 -57.000 30.000 30.000\n57 -51.000 -115.000 30.000 30.000\n58 -557.000 -8.000 30.000 30.000\n59 357.000 -133.000 30.000 30.000\n60 -220.000 -69.000 30.000 30.000\n61 300.000 -5.000 30.000 30.000\n62 -205.000 -290.000 30.000 30.000\n63 339.000 -226.000 30.000 30.000\n64 -442.000 -218.000 30.000 30.000\n65 341.000 -147.000 30.000 30.000\n66 488.000 101.000 30.000 30.000\n67 -335.000 30.000 30.000 30.000\n68 539.000 -298.000 30.000 30.000\n69 -539.000 362.000 30.000 30.000\n70 1.000 309.000 30.000 30.000\n71 571.000 294.000 30.000 30.000\n72 -570.000 92.000 30.000 30.000\n73 214.000 -269.000 30.000 30.000\n74 370.000 -71.000 30.000 30.000\n75 -448.000 18.000 30.000 30.000\n76 509.000 -276.000 30.000 30.000\n77 78.000 -362.000 30.000 30.000\n78 95.000 170.000 30.000 30.000\n79 277.000 301.000 30.000 30.000\n80 -196.000 -342.000 30.000 30.000\n81 175.000 36.000 30.000 30.000\n82 -505.000 197.000 30.000 30.000\n83 -364.000 -129.000 30.000 30.000\n#\n14 15\n0 1\n30 31\n1 2\n38 39\n13 14\n14 65\n54 55\n37 38\n10 11\n51 52\n11 51\n25 26\n40 41\n5 6\n81 82\n31 32\n23 24\n50 51\n9 10\n49 78\n58 59\n67 68\n33 34\n73 74\n18 37\n22 23\n6 7\n2 3\n72 73\n75 76\n53 54\n15 80\n43 44\n11 77\n21 22\n70 71\n29 47\n52 13\n20 21\n27 7\n55 56\n16 17\n13 53\n39 40\n80 66\n44 45\n32 33\n51 14\n36 18\n64 11\n78 79\n46 29\n71 72\n49 50\n68 69\n82 83\n48 49\n66 81\n61 62\n79 15\n8 9\n15 16\n17 18\n4 5\n63 64\n7 28\n57 58\n65 66\n3 4\n56 57\n42 43\n77 49\n26 27\n59 60\n7 8\n34 35\n29 30\n74 75\n62 63\n12 13\n11 12\n69 70\n24 25\n18 19\n47 48\n66 67\n28 29\n35 36\n45 46\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/makeCorpus.py",
    "content": "#!/usr/bin/python\n\nimport os\n\ndef genNM():\n    nm = []\n    for n in range(10, 210, 10):\n        M = int(round(1.5*n))\n        d = int(round((M-n)/5))\n        nm.extend([(n,m) for m in range(n, M+1, d)])\n    return nm\n\nif __name__ == '__main__':\n    nm = genNM()\n    for n, m in nm:\n        os.system('./randomGraph -a %d %d' % (n, m))\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/randomGraph",
    "content": "#!/usr/bin/python\n\nimport sys, random\n\ndef usage():\n    s = ''\n    s += '\\n'\n    s += 'USAGE:\\n'\n    s += 'To create a random connected graph, use\\n'\n    s += '      ./randomGraph OPTION n m\\n'\n    s += 'where n is the number of nodes you want,\\n'\n    s += 'and m is the number of edges you want,\\n'\n    s += '(must have n-1 <= m <= n(n-1)/2)\\n'\n    s += 'and where OPTION is:\\n'\n    s += '    -a: automatic filename v%de%d.tgf%(n,m)\\n'\n    s += '    -s: write to stdout\\n'\n    return s\n\nclass Node:\n\n    def __init__(self,graph,index):\n        self.graph = graph\n        self.index = index\n        self.friends = []\n        self.strangers = range(index)\n\n    def randomStranger(self):\n        s = len(self.strangers)\n        if s == 0: return None\n        j = random.randint(0,s-1)\n        return self.strangers[j]\n\n    def hasFriend(self,i):\n        return i in self.friends\n\n    def addStranger(self,i):\n        self.strangers.append(i)\n        self.graph.markNodeIndexUnsat(self.index)\n\n    def addFriend(self,i):\n        if self.hasFriend(i): return\n        self.friends.append(i)\n        self.strangers.remove(i)\n        if not self.strangers:\n            self.graph.markNodeIndexSat(self.index)\n\n\nclass Graph:\n\n    def __init__(self):\n        self.size = 0\n        self.nodes = []\n        self.edges = []\n        self.unsatNI = [] # unsaturated node indices\n\n    def newNode(self):\n        \"Create and return a new node for this graph.\"\n        n = self.size\n        N = Node(self,n)\n        if n > 0:\n            self.unsatNI = range(n+1)\n            # Tell old nodes about new stranger.\n            for M in self.nodes:\n                M.strangers.append(n)\n        self.nodes.append(N)\n        self.size = n + 1\n        return N\n\n    def markNodeIndexSat(self,i):\n        self.unsatNI.remove(i)\n\n    def markNodeIndexUnsat(self,i):\n        self.unsatNI.append(i)\n\n    def edgeMayExist(self,si,ti):\n        \"Check whether the indices are within bounds.\"\n        n = self.size\n        return si < n and ti < n\n\n    def edgeExists(self,si,ti):\n        \"Say whether nodes si, ti yet share an edge.\"\n        if not self.edgeMayExist(si,ti): return False\n        sn = self.nodes[si]\n        return sn.hasFriend(ti)\n\n    def isComplete(self):\n        \"Is this graph complete?\"\n        return len(self.unsatNI) == 0\n\n    def addEdge(self,si,ti):\n        \"Add the edge (si,ti) if possible.\"\n        if self.edgeMayExist(si,ti) and not self.edgeExists(si,ti):\n            sn = self.nodes[si]\n            tn = self.nodes[ti]\n            # Inform the nodes\n            sn.addFriend(ti)\n            tn.addFriend(si)\n            # Record edge locally\n            self.edges.append( (si,ti) )\n\n    def addRandomEdge(self):\n        \"Add a random edge if possible, and return it.\"\n        if self.isComplete(): return None\n        # Choose an unsaturated node at random.\n        u = len(self.unsatNI)\n        j = random.randint(0,u-1)\n        si = self.unsatNI[j]\n        sn = self.nodes[si]\n        ti = sn.randomStranger()\n        self.addEdge(si,ti)\n        return (si,ti)\n\n    def addRandomConnectedNode(self):\n        \"Create a new node and attach it to a random existing node.\"\n        sn = self.newNode()\n        if self.size > 1:\n            si = sn.index\n            ti = sn.randomStranger()\n            self.addEdge(si,ti)\n\n    def tgf(self):\n        t = ''\n        for n in self.nodes:\n            t += '%d\\n'%n.index\n        t += '#\\n'\n        for e in self.edges:\n            t += '%d %d\\n'%e\n        return t\n\ndef genRandGraph(n,m):\n    \"\"\"\n    Generate a random connected graph of n nodes and m edges.\n    \"\"\"\n    if m < n - 1 or m > n*(n - 1)/2:\n        print 'ERROR: m must be between n-1 and n(n-1)/2 inclusive.'\n        sys.exit(1)\n    G = Graph()\n    # First create n nodes, connected by a spanning tree.\n    for i in range(n):\n        G.addRandomConnectedNode()\n    # There are now n - 1 edges in the graph.\n    # Add m - n + 1 more.\n    for j in range(m - n + 1):\n        G.addRandomEdge()\n    return G\n\ndef genRandGraphByDensity(n,d):\n    G = Graph()\n    N = 0\n    if d < 1 or d > (n-1)/2.0:\n        print 'ERROR: d must be between 1 and (n-1)/2, inclusive'\n        sys.exit(1)\n    p = (d-1)/d\n    while N < n:\n        r = random.random()\n        if r < p:\n            G.addRandomEdge()\n        else:\n            G.addRandomConnectedNode()\n            N += 1\n    return G\n\n\ndef readCmdLine():\n    try:\n        opt = sys.argv[1]\n        if opt not in ['-a','-s']: raise Exception()\n        n = int(sys.argv[2])\n        m = int(sys.argv[3])\n        if m < n-1 or m > n*(n-1)/2.0: raise Exception()\n        return (opt,n,m)\n    except:\n        print usage()\n        sys.exit(1)\n\ndef main():\n    opt,n,m = readCmdLine()\n    G = genRandGraph(n,m)\n    tgf = G.tgf()\n    if opt == '-a':\n        fn = 'v%de%d.tgf'%(n,m)\n        open(fn,'w').write(tgf)\n    elif opt == '-s':\n        sys.stdout.write(tgf)\n\nif __name__ == '__main__':\n    main()\n\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v100e100.gml",
    "content": "graph\n[\n    node\n    [\n        id    0\n        label    \"\"\n        graphics\n        [\n            x    784.25\n            y    553.70\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    1\n        label    \"\"\n        graphics\n        [\n            x    344.02\n            y    751.41\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    2\n        label    \"\"\n        graphics\n        [\n            x    195.23\n            y    66.27\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    3\n        label    \"\"\n        graphics\n        [\n            x    715.22\n            y    373.00\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    4\n        label    \"\"\n        graphics\n        [\n            x    571.84\n            y    641.91\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    5\n        label    \"\"\n        graphics\n        [\n            x    439.39\n            y    765.36\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    6\n        label    \"\"\n        graphics\n        [\n            x    97.85\n            y    782.40\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    7\n        label    \"\"\n        graphics\n        [\n            x    588.91\n            y    373.22\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    8\n        label    \"\"\n        graphics\n        [\n            x    488.37\n            y    418.52\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    9\n        label    \"\"\n        graphics\n        [\n            x    681.58\n            y    211.58\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    10\n        label    \"\"\n        graphics\n        [\n            x    136.65\n            y    679.78\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    11\n        label    \"\"\n        graphics\n        [\n            x    868.14\n            y    842.19\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    12\n        label    \"\"\n        graphics\n        [\n            x    808.65\n            y    565.11\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    13\n        label    \"\"\n        graphics\n        [\n            x    629.48\n            y    848.28\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    14\n        label    \"\"\n        graphics\n        [\n            x    530.51\n            y    579.79\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    15\n        label    \"\"\n        graphics\n        [\n            x    807.94\n            y    429.84\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    16\n        label    \"\"\n        graphics\n        [\n            x    174.14\n            y    490.13\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    17\n        label    \"\"\n        graphics\n        [\n            x    112.84\n            y    260.54\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    18\n        label    \"\"\n        graphics\n        [\n            x    261.58\n            y    380.72\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    19\n        label    \"\"\n        graphics\n        [\n            x    678.21\n            y    134.50\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    20\n        label    \"\"\n        graphics\n        [\n            x    513.33\n            y    813.39\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    21\n        label    \"\"\n        graphics\n        [\n            x    670.25\n            y    36.70\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    22\n        label    \"\"\n        graphics\n        [\n            x    114.57\n            y    110.99\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    23\n        label    \"\"\n        graphics\n        [\n            x    341.18\n            y    183.77\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    24\n        label    \"\"\n        graphics\n        [\n            x    735.67\n            y    41.86\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    25\n        label    \"\"\n        graphics\n        [\n            x    334.08\n            y    449.03\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    26\n        label    \"\"\n        graphics\n        [\n            x    446.47\n            y    267.43\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    27\n        label    \"\"\n        graphics\n        [\n            x    497.57\n            y    309.31\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    28\n        label    \"\"\n        graphics\n        [\n            x    722.96\n            y    741.30\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    29\n        label    \"\"\n        graphics\n        [\n            x    851.79\n            y    365.53\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    30\n        label    \"\"\n        graphics\n        [\n            x    7.83\n            y    389.24\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    31\n        label    \"\"\n        graphics\n        [\n            x    856.46\n            y    188.92\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    32\n        label    \"\"\n        graphics\n        [\n            x    300.17\n            y    585.07\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    33\n        label    \"\"\n        graphics\n        [\n            x    408.95\n            y    707.03\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    34\n        label    \"\"\n        graphics\n        [\n            x    233.46\n            y    870.61\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    35\n        label    \"\"\n        graphics\n        [\n            x    101.10\n            y    228.11\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    36\n        label    \"\"\n        graphics\n        [\n            x    360.81\n            y    731.09\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    37\n        label    \"\"\n        graphics\n        [\n            x    506.45\n            y    689.07\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    38\n        label    \"\"\n        graphics\n        [\n            x    95.84\n            y    735.82\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    39\n        label    \"\"\n        graphics\n        [\n            x    510.71\n            y    46.15\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    40\n        label    \"\"\n        graphics\n        [\n            x    433.21\n            y    327.13\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    41\n        label    \"\"\n        graphics\n        [\n            x    861.68\n            y    58.64\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    42\n        label    \"\"\n        graphics\n        [\n            x    174.61\n            y    527.65\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    43\n        label    \"\"\n        graphics\n        [\n            x    489.61\n            y    157.34\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    44\n        label    \"\"\n        graphics\n        [\n            x    747.72\n            y    715.31\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    45\n        label    \"\"\n        graphics\n        [\n            x    558.94\n            y    863.88\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    46\n        label    \"\"\n        graphics\n        [\n            x    746.86\n            y    160.81\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    47\n        label    \"\"\n        graphics\n        [\n            x    345.07\n            y    823.72\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    48\n        label    \"\"\n        graphics\n        [\n            x    258.60\n            y    8.83\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    49\n        label    \"\"\n        graphics\n        [\n            x    653.08\n            y    496.33\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    50\n        label    \"\"\n        graphics\n        [\n            x    507.31\n            y    706.35\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    51\n        label    \"\"\n        graphics\n        [\n            x    738.98\n            y    242.14\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    52\n        label    \"\"\n        graphics\n        [\n            x    39.53\n            y    164.20\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    53\n        label    \"\"\n        graphics\n        [\n            x    528.85\n            y    149.89\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    54\n        label    \"\"\n        graphics\n        [\n            x    272.07\n            y    820.60\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    55\n        label    \"\"\n        graphics\n        [\n            x    66.65\n            y    886.93\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    56\n        label    \"\"\n        graphics\n        [\n            x    130.18\n            y    140.46\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    57\n        label    \"\"\n        graphics\n        [\n            x    542.89\n            y    864.09\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    58\n        label    \"\"\n        graphics\n        [\n            x    663.60\n            y    557.19\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    59\n        label    \"\"\n        graphics\n        [\n            x    598.23\n            y    489.27\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    60\n        label    \"\"\n        graphics\n        [\n            x    604.33\n            y    781.51\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    61\n        label    \"\"\n        graphics\n        [\n            x    401.42\n            y    803.67\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    62\n        label    \"\"\n        graphics\n        [\n            x    134.92\n            y    775.47\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    63\n        label    \"\"\n        graphics\n        [\n            x    189.99\n            y    593.42\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    64\n        label    \"\"\n        graphics\n        [\n            x    501.78\n            y    832.65\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    65\n        label    \"\"\n        graphics\n        [\n            x    82.82\n            y    334.42\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    66\n        label    \"\"\n        graphics\n        [\n            x    36.13\n            y    101.58\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    67\n        label    \"\"\n        graphics\n        [\n            x    276.65\n            y    153.80\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    68\n        label    \"\"\n        graphics\n        [\n            x    355.20\n            y    887.62\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    69\n        label    \"\"\n        graphics\n        [\n            x    147.23\n            y    770.55\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    70\n        label    \"\"\n        graphics\n        [\n            x    881.52\n            y    632.15\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    71\n        label    \"\"\n        graphics\n        [\n            x    383.10\n            y    15.54\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    72\n        label    \"\"\n        graphics\n        [\n            x    746.20\n            y    600.58\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    73\n        label    \"\"\n        graphics\n        [\n            x    536.33\n            y    621.25\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    74\n        label    \"\"\n        graphics\n        [\n            x    325.76\n            y    770.14\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    75\n        label    \"\"\n        graphics\n        [\n            x    565.19\n            y    532.12\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    76\n        label    \"\"\n        graphics\n        [\n            x    502.09\n            y    708.84\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    77\n        label    \"\"\n        graphics\n        [\n            x    75.00\n            y    288.43\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    78\n        label    \"\"\n        graphics\n        [\n            x    817.77\n            y    328.86\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    79\n        label    \"\"\n        graphics\n        [\n            x    831.53\n            y    807.09\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    80\n        label    \"\"\n        graphics\n        [\n            x    211.53\n            y    886.88\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    81\n        label    \"\"\n        graphics\n        [\n            x    820.08\n            y    718.37\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    82\n        label    \"\"\n        graphics\n        [\n            x    799.21\n            y    237.65\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    83\n        label    \"\"\n        graphics\n        [\n            x    712.42\n            y    66.74\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    84\n        label    \"\"\n        graphics\n        [\n            x    860.42\n            y    431.10\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    85\n        label    \"\"\n        graphics\n        [\n            x    666.89\n            y    627.56\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    86\n        label    \"\"\n        graphics\n        [\n            x    436.34\n            y    289.14\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    87\n        label    \"\"\n        graphics\n        [\n            x    537.75\n            y    674.09\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    88\n        label    \"\"\n        graphics\n        [\n            x    487.07\n            y    242.15\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    89\n        label    \"\"\n        graphics\n        [\n            x    810.70\n            y    143.80\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    90\n        label    \"\"\n        graphics\n        [\n            x    397.34\n            y    799.18\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    91\n        label    \"\"\n        graphics\n        [\n            x    546.80\n            y    456.69\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    92\n        label    \"\"\n        graphics\n        [\n            x    170.58\n            y    503.41\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    93\n        label    \"\"\n        graphics\n        [\n            x    306.78\n            y    463.73\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    94\n        label    \"\"\n        graphics\n        [\n            x    654.55\n            y    288.10\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    95\n        label    \"\"\n        graphics\n        [\n            x    843.65\n            y    46.65\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    96\n        label    \"\"\n        graphics\n        [\n            x    607.98\n            y    243.03\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    97\n        label    \"\"\n        graphics\n        [\n            x    356.76\n            y    153.30\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    98\n        label    \"\"\n        graphics\n        [\n            x    654.55\n            y    873.60\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    99\n        label    \"\"\n        graphics\n        [\n            x    458.68\n            y    589.76\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    edge\n    [\n        source    1\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    10\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    11\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    12\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    13\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    14\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    15\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    16\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    17\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    18\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    19\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    2\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    20\n        target    19\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    21\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    22\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    23\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    24\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    25\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    26\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    27\n        target    25\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    28\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    29\n        target    27\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    3\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    30\n        target    27\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    31\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    32\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    33\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    34\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    35\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    36\n        target    26\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    37\n        target    26\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    38\n        target    28\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    39\n        target    19\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    4\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    40\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    41\n        target    25\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    42\n        target    41\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    43\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    44\n        target    33\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    45\n        target    43\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    46\n        target    29\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    47\n        target    39\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    48\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    49\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    5\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    50\n        target    25\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    51\n        target    46\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    52\n        target    25\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    53\n        target    30\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    54\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    55\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    56\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    57\n        target    29\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    58\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    59\n        target    43\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    6\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    60\n        target    39\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    61\n        target    57\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    62\n        target    19\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    63\n        target    48\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    63\n        target    85\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    64\n        target    47\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    65\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    66\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    67\n        target    52\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    68\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    69\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    7\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    70\n        target    24\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    71\n        target    40\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    72\n        target    46\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    73\n        target    41\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    74\n        target    49\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    75\n        target    49\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    76\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    77\n        target    56\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    78\n        target    42\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    79\n        target    26\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    8\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    80\n        target    26\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    81\n        target    48\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    82\n        target    38\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    83\n        target    71\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    84\n        target    38\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    85\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    86\n        target    46\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    87\n        target    36\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    88\n        target    54\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    89\n        target    41\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    9\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    90\n        target    71\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    91\n        target    41\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    92\n        target    33\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    93\n        target    85\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    94\n        target    36\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    95\n        target    56\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    96\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    97\n        target    38\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    98\n        target    25\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    99\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n]\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v100e100.tglf",
    "content": "0 784.000 553.000 30.000 30.000\n1 344.000 751.000 30.000 30.000\n2 195.000 66.000 30.000 30.000\n3 715.000 373.000 30.000 30.000\n4 571.000 641.000 30.000 30.000\n5 439.000 765.000 30.000 30.000\n6 97.000 782.000 30.000 30.000\n7 588.000 373.000 30.000 30.000\n8 488.000 418.000 30.000 30.000\n9 681.000 211.000 30.000 30.000\n10 136.000 679.000 30.000 30.000\n11 868.000 842.000 30.000 30.000\n12 808.000 565.000 30.000 30.000\n13 629.000 848.000 30.000 30.000\n14 530.000 579.000 30.000 30.000\n15 807.000 429.000 30.000 30.000\n16 174.000 490.000 30.000 30.000\n17 112.000 260.000 30.000 30.000\n18 261.000 380.000 30.000 30.000\n19 678.000 134.000 30.000 30.000\n20 513.000 813.000 30.000 30.000\n21 670.000 36.000 30.000 30.000\n22 114.000 110.000 30.000 30.000\n23 341.000 183.000 30.000 30.000\n24 735.000 41.000 30.000 30.000\n25 334.000 449.000 30.000 30.000\n26 446.000 267.000 30.000 30.000\n27 497.000 309.000 30.000 30.000\n28 722.000 741.000 30.000 30.000\n29 851.000 365.000 30.000 30.000\n30 7.000 389.000 30.000 30.000\n31 856.000 188.000 30.000 30.000\n32 300.000 585.000 30.000 30.000\n33 408.000 707.000 30.000 30.000\n34 233.000 870.000 30.000 30.000\n35 101.000 228.000 30.000 30.000\n36 360.000 731.000 30.000 30.000\n37 506.000 689.000 30.000 30.000\n38 95.000 735.000 30.000 30.000\n39 510.000 46.000 30.000 30.000\n40 433.000 327.000 30.000 30.000\n41 861.000 58.000 30.000 30.000\n42 174.000 527.000 30.000 30.000\n43 489.000 157.000 30.000 30.000\n44 747.000 715.000 30.000 30.000\n45 558.000 863.000 30.000 30.000\n46 746.000 160.000 30.000 30.000\n47 345.000 823.000 30.000 30.000\n48 258.000 8.000 30.000 30.000\n49 653.000 496.000 30.000 30.000\n50 507.000 706.000 30.000 30.000\n51 738.000 242.000 30.000 30.000\n52 39.000 164.000 30.000 30.000\n53 528.000 149.000 30.000 30.000\n54 272.000 820.000 30.000 30.000\n55 66.000 886.000 30.000 30.000\n56 130.000 140.000 30.000 30.000\n57 542.000 864.000 30.000 30.000\n58 663.000 557.000 30.000 30.000\n59 598.000 489.000 30.000 30.000\n60 604.000 781.000 30.000 30.000\n61 401.000 803.000 30.000 30.000\n62 134.000 775.000 30.000 30.000\n63 189.000 593.000 30.000 30.000\n64 501.000 832.000 30.000 30.000\n65 82.000 334.000 30.000 30.000\n66 36.000 101.000 30.000 30.000\n67 276.000 153.000 30.000 30.000\n68 355.000 887.000 30.000 30.000\n69 147.000 770.000 30.000 30.000\n70 881.000 632.000 30.000 30.000\n71 383.000 15.000 30.000 30.000\n72 746.000 600.000 30.000 30.000\n73 536.000 621.000 30.000 30.000\n74 325.000 770.000 30.000 30.000\n75 565.000 532.000 30.000 30.000\n76 502.000 708.000 30.000 30.000\n77 75.000 288.000 30.000 30.000\n78 817.000 328.000 30.000 30.000\n79 831.000 807.000 30.000 30.000\n80 211.000 886.000 30.000 30.000\n81 820.000 718.000 30.000 30.000\n82 799.000 237.000 30.000 30.000\n83 712.000 66.000 30.000 30.000\n84 860.000 431.000 30.000 30.000\n85 666.000 627.000 30.000 30.000\n86 436.000 289.000 30.000 30.000\n87 537.000 674.000 30.000 30.000\n88 487.000 242.000 30.000 30.000\n89 810.000 143.000 30.000 30.000\n90 397.000 799.000 30.000 30.000\n91 546.000 456.000 30.000 30.000\n92 170.000 503.000 30.000 30.000\n93 306.000 463.000 30.000 30.000\n94 654.000 288.000 30.000 30.000\n95 843.000 46.000 30.000 30.000\n96 607.000 243.000 30.000 30.000\n97 356.000 153.000 30.000 30.000\n98 654.000 873.000 30.000 30.000\n99 458.000 589.000 30.000 30.000\n#\n3 1\n7 5\n22 13\n9 3\n53 30\n17 5\n31 2\n73 41\n37 26\n12 6\n27 25\n19 3\n71 40\n79 26\n96 18\n76 22\n99 16\n61 57\n52 25\n4 3\n54 16\n74 49\n25 22\n63 48\n77 56\n80 26\n46 29\n18 0\n69 9\n62 19\n2 0\n60 39\n86 46\n81 48\n15 8\n21 7\n24 1\n58 10\n23 15\n44 33\n38 28\n36 26\n49 5\n66 2\n48 17\n47 39\n32 7\n1 0\n40 17\n20 19\n72 46\n83 71\n67 52\n91 41\n42 41\n26 21\n82 38\n13 12\n39 19\n65 8\n41 25\n70 24\n57 29\n85 15\n50 25\n45 43\n97 38\n78 42\n10 3\n5 1\n89 41\n64 47\n92 33\n30 27\n35 15\n34 14\n59 43\n8 3\n84 38\n51 46\n93 85\n55 1\n94 36\n68 16\n63 85\n75 49\n29 27\n56 18\n14 3\n88 54\n33 22\n90 71\n95 56\n6 1\n98 25\n28 9\n11 1\n87 36\n16 15\n43 18\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v100e110.gml",
    "content": "graph\n[\n    node\n    [\n        id    0\n        label    \"\"\n        graphics\n        [\n            x    657.44\n            y    584.79\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    1\n        label    \"\"\n        graphics\n        [\n            x    352.50\n            y    453.79\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    2\n        label    \"\"\n        graphics\n        [\n            x    5.95\n            y    215.41\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    3\n        label    \"\"\n        graphics\n        [\n            x    189.35\n            y    216.37\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    4\n        label    \"\"\n        graphics\n        [\n            x    273.12\n            y    459.38\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    5\n        label    \"\"\n        graphics\n        [\n            x    463.04\n            y    339.34\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    6\n        label    \"\"\n        graphics\n        [\n            x    11.99\n            y    695.95\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    7\n        label    \"\"\n        graphics\n        [\n            x    345.80\n            y    175.83\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    8\n        label    \"\"\n        graphics\n        [\n            x    747.81\n            y    766.03\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    9\n        label    \"\"\n        graphics\n        [\n            x    629.26\n            y    231.18\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    10\n        label    \"\"\n        graphics\n        [\n            x    588.57\n            y    252.55\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    11\n        label    \"\"\n        graphics\n        [\n            x    420.34\n            y    15.85\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    12\n        label    \"\"\n        graphics\n        [\n            x    340.77\n            y    617.90\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    13\n        label    \"\"\n        graphics\n        [\n            x    153.34\n            y    496.26\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    14\n        label    \"\"\n        graphics\n        [\n            x    794.73\n            y    365.93\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    15\n        label    \"\"\n        graphics\n        [\n            x    687.18\n            y    542.43\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    16\n        label    \"\"\n        graphics\n        [\n            x    431.45\n            y    880.74\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    17\n        label    \"\"\n        graphics\n        [\n            x    699.40\n            y    560.89\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    18\n        label    \"\"\n        graphics\n        [\n            x    863.88\n            y    102.04\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    19\n        label    \"\"\n        graphics\n        [\n            x    215.28\n            y    152.65\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    20\n        label    \"\"\n        graphics\n        [\n            x    450.20\n            y    151.66\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    21\n        label    \"\"\n        graphics\n        [\n            x    458.34\n            y    358.89\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    22\n        label    \"\"\n        graphics\n        [\n            x    98.82\n            y    857.09\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    23\n        label    \"\"\n        graphics\n        [\n            x    474.12\n            y    887.19\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    24\n        label    \"\"\n        graphics\n        [\n            x    474.71\n            y    27.49\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    25\n        label    \"\"\n        graphics\n        [\n            x    60.08\n            y    749.43\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    26\n        label    \"\"\n        graphics\n        [\n            x    607.84\n            y    535.22\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    27\n        label    \"\"\n        graphics\n        [\n            x    899.15\n            y    480.07\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    28\n        label    \"\"\n        graphics\n        [\n            x    21.40\n            y    500.29\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    29\n        label    \"\"\n        graphics\n        [\n            x    785.64\n            y    27.45\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    30\n        label    \"\"\n        graphics\n        [\n            x    610.33\n            y    562.10\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    31\n        label    \"\"\n        graphics\n        [\n            x    284.15\n            y    617.94\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    32\n        label    \"\"\n        graphics\n        [\n            x    724.76\n            y    226.97\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    33\n        label    \"\"\n        graphics\n        [\n            x    37.81\n            y    766.85\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    34\n        label    \"\"\n        graphics\n        [\n            x    796.68\n            y    205.47\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    35\n        label    \"\"\n        graphics\n        [\n            x    472.85\n            y    88.58\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    36\n        label    \"\"\n        graphics\n        [\n            x    28.97\n            y    896.97\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    37\n        label    \"\"\n        graphics\n        [\n            x    145.94\n            y    894.03\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    38\n        label    \"\"\n        graphics\n        [\n            x    828.05\n            y    512.81\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    39\n        label    \"\"\n        graphics\n        [\n            x    73.19\n            y    132.14\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    40\n        label    \"\"\n        graphics\n        [\n            x    110.31\n            y    546.49\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    41\n        label    \"\"\n        graphics\n        [\n            x    164.12\n            y    362.51\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    42\n        label    \"\"\n        graphics\n        [\n            x    567.28\n            y    40.56\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    43\n        label    \"\"\n        graphics\n        [\n            x    798.59\n            y    704.22\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    44\n        label    \"\"\n        graphics\n        [\n            x    732.89\n            y    12.16\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    45\n        label    \"\"\n        graphics\n        [\n            x    158.82\n            y    30.08\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    46\n        label    \"\"\n        graphics\n        [\n            x    37.05\n            y    477.27\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    47\n        label    \"\"\n        graphics\n        [\n            x    296.15\n            y    863.31\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    48\n        label    \"\"\n        graphics\n        [\n            x    868.76\n            y    774.69\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    49\n        label    \"\"\n        graphics\n        [\n            x    642.54\n            y    595.35\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    50\n        label    \"\"\n        graphics\n        [\n            x    550.91\n            y    85.61\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    51\n        label    \"\"\n        graphics\n        [\n            x    313.72\n            y    682.36\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    52\n        label    \"\"\n        graphics\n        [\n            x    122.28\n            y    242.41\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    53\n        label    \"\"\n        graphics\n        [\n            x    584.26\n            y    401.80\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    54\n        label    \"\"\n        graphics\n        [\n            x    890.96\n            y    598.18\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    55\n        label    \"\"\n        graphics\n        [\n            x    491.87\n            y    344.28\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    56\n        label    \"\"\n        graphics\n        [\n            x    406.71\n            y    660.94\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    57\n        label    \"\"\n        graphics\n        [\n            x    419.77\n            y    226.43\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    58\n        label    \"\"\n        graphics\n        [\n            x    844.32\n            y    789.82\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    59\n        label    \"\"\n        graphics\n        [\n            x    103.31\n            y    424.28\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    60\n        label    \"\"\n        graphics\n        [\n            x    467.08\n            y    326.56\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    61\n        label    \"\"\n        graphics\n        [\n            x    347.45\n            y    48.96\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    62\n        label    \"\"\n        graphics\n        [\n            x    391.74\n            y    71.80\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    63\n        label    \"\"\n        graphics\n        [\n            x    107.69\n            y    337.78\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    64\n        label    \"\"\n        graphics\n        [\n            x    205.45\n            y    362.25\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    65\n        label    \"\"\n        graphics\n        [\n            x    150.71\n            y    641.38\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    66\n        label    \"\"\n        graphics\n        [\n            x    791.47\n            y    863.39\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    67\n        label    \"\"\n        graphics\n        [\n            x    573.19\n            y    352.85\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    68\n        label    \"\"\n        graphics\n        [\n            x    186.89\n            y    559.23\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    69\n        label    \"\"\n        graphics\n        [\n            x    858.31\n            y    367.81\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    70\n        label    \"\"\n        graphics\n        [\n            x    299.23\n            y    161.75\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    71\n        label    \"\"\n        graphics\n        [\n            x    262.34\n            y    444.88\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    72\n        label    \"\"\n        graphics\n        [\n            x    877.61\n            y    642.23\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    73\n        label    \"\"\n        graphics\n        [\n            x    650.04\n            y    299.91\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    74\n        label    \"\"\n        graphics\n        [\n            x    894.49\n            y    15.35\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    75\n        label    \"\"\n        graphics\n        [\n            x    652.82\n            y    513.85\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    76\n        label    \"\"\n        graphics\n        [\n            x    236.38\n            y    584.33\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    77\n        label    \"\"\n        graphics\n        [\n            x    758.54\n            y    497.00\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    78\n        label    \"\"\n        graphics\n        [\n            x    429.29\n            y    180.04\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    79\n        label    \"\"\n        graphics\n        [\n            x    45.75\n            y    299.63\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    80\n        label    \"\"\n        graphics\n        [\n            x    806.46\n            y    137.34\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    81\n        label    \"\"\n        graphics\n        [\n            x    18.48\n            y    197.15\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    82\n        label    \"\"\n        graphics\n        [\n            x    369.55\n            y    839.91\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    83\n        label    \"\"\n        graphics\n        [\n            x    128.00\n            y    154.33\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    84\n        label    \"\"\n        graphics\n        [\n            x    871.81\n            y    186.14\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    85\n        label    \"\"\n        graphics\n        [\n            x    112.36\n            y    361.81\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    86\n        label    \"\"\n        graphics\n        [\n            x    823.41\n            y    624.75\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    87\n        label    \"\"\n        graphics\n        [\n            x    267.87\n            y    108.89\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    88\n        label    \"\"\n        graphics\n        [\n            x    403.75\n            y    610.31\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    89\n        label    \"\"\n        graphics\n        [\n            x    403.52\n            y    18.76\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    90\n        label    \"\"\n        graphics\n        [\n            x    216.76\n            y    815.57\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    91\n        label    \"\"\n        graphics\n        [\n            x    349.66\n            y    381.55\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    92\n        label    \"\"\n        graphics\n        [\n            x    719.86\n            y    294.21\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    93\n        label    \"\"\n        graphics\n        [\n            x    812.12\n            y    821.09\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    94\n        label    \"\"\n        graphics\n        [\n            x    44.18\n            y    84.66\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    95\n        label    \"\"\n        graphics\n        [\n            x    301.83\n            y    62.70\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    96\n        label    \"\"\n        graphics\n        [\n            x    519.22\n            y    568.70\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    97\n        label    \"\"\n        graphics\n        [\n            x    546.90\n            y    507.32\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    98\n        label    \"\"\n        graphics\n        [\n            x    806.51\n            y    836.73\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    99\n        label    \"\"\n        graphics\n        [\n            x    81.40\n            y    468.60\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    edge\n    [\n        source    1\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    10\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    11\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    12\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    13\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    14\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    15\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    16\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    17\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    18\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    19\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    19\n        target    57\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    2\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    20\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    21\n        target    19\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    22\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    23\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    23\n        target    63\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    23\n        target    97\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    24\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    25\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    26\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    27\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    28\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    29\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    3\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    30\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    31\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    32\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    33\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    34\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    35\n        target    52\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    35\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    36\n        target    25\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    37\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    38\n        target    24\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    39\n        target    29\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    39\n        target    86\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    4\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    4\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    40\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    41\n        target    19\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    42\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    43\n        target    41\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    44\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    45\n        target    29\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    46\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    47\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    48\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    49\n        target    38\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    5\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    5\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    50\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    51\n        target    48\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    52\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    53\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    54\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    55\n        target    45\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    56\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    57\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    58\n        target    33\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    59\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    59\n        target    81\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    6\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    60\n        target    46\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    61\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    62\n        target    37\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    63\n        target    39\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    64\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    65\n        target    31\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    66\n        target    33\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    66\n        target    41\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    67\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    68\n        target    48\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    69\n        target    49\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    7\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    70\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    71\n        target    41\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    72\n        target    59\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    73\n        target    71\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    74\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    75\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    76\n        target    56\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    77\n        target    24\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    78\n        target    73\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    79\n        target    77\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    8\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    80\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    81\n        target    80\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    82\n        target    49\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    83\n        target    70\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    84\n        target    47\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    85\n        target    27\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    85\n        target    33\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    86\n        target    64\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    87\n        target    33\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    88\n        target    32\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    89\n        target    38\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    9\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    90\n        target    43\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    91\n        target    41\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    92\n        target    72\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    93\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    94\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    95\n        target    84\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    96\n        target    95\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    97\n        target    61\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    97\n        target    81\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    98\n        target    19\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    99\n        target    33\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n]\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v100e110.tglf",
    "content": "0 657.000 584.000 30.000 30.000\n1 352.000 453.000 30.000 30.000\n2 5.000 215.000 30.000 30.000\n3 189.000 216.000 30.000 30.000\n4 273.000 459.000 30.000 30.000\n5 463.000 339.000 30.000 30.000\n6 11.000 695.000 30.000 30.000\n7 345.000 175.000 30.000 30.000\n8 747.000 766.000 30.000 30.000\n9 629.000 231.000 30.000 30.000\n10 588.000 252.000 30.000 30.000\n11 420.000 15.000 30.000 30.000\n12 340.000 617.000 30.000 30.000\n13 153.000 496.000 30.000 30.000\n14 794.000 365.000 30.000 30.000\n15 687.000 542.000 30.000 30.000\n16 431.000 880.000 30.000 30.000\n17 699.000 560.000 30.000 30.000\n18 863.000 102.000 30.000 30.000\n19 215.000 152.000 30.000 30.000\n20 450.000 151.000 30.000 30.000\n21 458.000 358.000 30.000 30.000\n22 98.000 857.000 30.000 30.000\n23 474.000 887.000 30.000 30.000\n24 474.000 27.000 30.000 30.000\n25 60.000 749.000 30.000 30.000\n26 607.000 535.000 30.000 30.000\n27 899.000 480.000 30.000 30.000\n28 21.000 500.000 30.000 30.000\n29 785.000 27.000 30.000 30.000\n30 610.000 562.000 30.000 30.000\n31 284.000 617.000 30.000 30.000\n32 724.000 226.000 30.000 30.000\n33 37.000 766.000 30.000 30.000\n34 796.000 205.000 30.000 30.000\n35 472.000 88.000 30.000 30.000\n36 28.000 896.000 30.000 30.000\n37 145.000 894.000 30.000 30.000\n38 828.000 512.000 30.000 30.000\n39 73.000 132.000 30.000 30.000\n40 110.000 546.000 30.000 30.000\n41 164.000 362.000 30.000 30.000\n42 567.000 40.000 30.000 30.000\n43 798.000 704.000 30.000 30.000\n44 732.000 12.000 30.000 30.000\n45 158.000 30.000 30.000 30.000\n46 37.000 477.000 30.000 30.000\n47 296.000 863.000 30.000 30.000\n48 868.000 774.000 30.000 30.000\n49 642.000 595.000 30.000 30.000\n50 550.000 85.000 30.000 30.000\n51 313.000 682.000 30.000 30.000\n52 122.000 242.000 30.000 30.000\n53 584.000 401.000 30.000 30.000\n54 890.000 598.000 30.000 30.000\n55 491.000 344.000 30.000 30.000\n56 406.000 660.000 30.000 30.000\n57 419.000 226.000 30.000 30.000\n58 844.000 789.000 30.000 30.000\n59 103.000 424.000 30.000 30.000\n60 467.000 326.000 30.000 30.000\n61 347.000 48.000 30.000 30.000\n62 391.000 71.000 30.000 30.000\n63 107.000 337.000 30.000 30.000\n64 205.000 362.000 30.000 30.000\n65 150.000 641.000 30.000 30.000\n66 791.000 863.000 30.000 30.000\n67 573.000 352.000 30.000 30.000\n68 186.000 559.000 30.000 30.000\n69 858.000 367.000 30.000 30.000\n70 299.000 161.000 30.000 30.000\n71 262.000 444.000 30.000 30.000\n72 877.000 642.000 30.000 30.000\n73 650.000 299.000 30.000 30.000\n74 894.000 15.000 30.000 30.000\n75 652.000 513.000 30.000 30.000\n76 236.000 584.000 30.000 30.000\n77 758.000 497.000 30.000 30.000\n78 429.000 180.000 30.000 30.000\n79 45.000 299.000 30.000 30.000\n80 806.000 137.000 30.000 30.000\n81 18.000 197.000 30.000 30.000\n82 369.000 839.000 30.000 30.000\n83 128.000 154.000 30.000 30.000\n84 871.000 186.000 30.000 30.000\n85 112.000 361.000 30.000 30.000\n86 823.000 624.000 30.000 30.000\n87 267.000 108.000 30.000 30.000\n88 403.000 610.000 30.000 30.000\n89 403.000 18.000 30.000 30.000\n90 216.000 815.000 30.000 30.000\n91 349.000 381.000 30.000 30.000\n92 719.000 294.000 30.000 30.000\n93 812.000 821.000 30.000 30.000\n94 44.000 84.000 30.000 30.000\n95 301.000 62.000 30.000 30.000\n96 519.000 568.000 30.000 30.000\n97 546.000 507.000 30.000 30.000\n98 806.000 836.000 30.000 30.000\n99 81.000 468.000 30.000 30.000\n#\n46 22\n84 47\n20 5\n27 18\n82 49\n35 52\n36 25\n32 1\n33 14\n77 24\n40 5\n78 73\n18 6\n89 38\n81 80\n12 4\n88 32\n99 33\n71 41\n63 39\n43 41\n85 27\n23 13\n79 77\n60 46\n28 6\n69 49\n87 33\n44 17\n97 81\n55 45\n19 2\n13 8\n47 10\n92 72\n50 23\n83 70\n42 2\n64 11\n56 3\n97 61\n24 16\n16 1\n11 4\n34 11\n76 56\n37 23\n72 59\n25 23\n65 31\n4 10\n22 9\n5 3\n30 13\n90 43\n5 17\n94 22\n8 2\n95 84\n48 1\n91 41\n96 95\n93 11\n73 71\n2 0\n39 29\n53 4\n31 0\n41 19\n61 8\n14 5\n67 0\n38 24\n9 5\n45 29\n3 1\n19 57\n66 33\n75 22\n98 19\n59 81\n23 63\n26 2\n85 33\n4 2\n59 7\n62 37\n35 8\n1 0\n10 6\n57 22\n23 97\n15 13\n51 48\n39 86\n80 4\n52 14\n21 19\n66 41\n70 8\n58 33\n54 6\n86 64\n6 5\n17 15\n74 11\n68 48\n29 21\n49 38\n7 6\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v100e120.gml",
    "content": "graph\n[\n    node\n    [\n        id    0\n        label    \"\"\n        graphics\n        [\n            x    322.48\n            y    541.99\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    1\n        label    \"\"\n        graphics\n        [\n            x    248.20\n            y    871.63\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    2\n        label    \"\"\n        graphics\n        [\n            x    511.83\n            y    731.96\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    3\n        label    \"\"\n        graphics\n        [\n            x    831.30\n            y    711.56\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    4\n        label    \"\"\n        graphics\n        [\n            x    8.37\n            y    29.73\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    5\n        label    \"\"\n        graphics\n        [\n            x    860.55\n            y    710.12\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    6\n        label    \"\"\n        graphics\n        [\n            x    268.26\n            y    643.85\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    7\n        label    \"\"\n        graphics\n        [\n            x    325.47\n            y    868.82\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    8\n        label    \"\"\n        graphics\n        [\n            x    15.05\n            y    862.83\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    9\n        label    \"\"\n        graphics\n        [\n            x    671.25\n            y    694.13\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    10\n        label    \"\"\n        graphics\n        [\n            x    277.39\n            y    836.89\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    11\n        label    \"\"\n        graphics\n        [\n            x    378.03\n            y    469.60\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    12\n        label    \"\"\n        graphics\n        [\n            x    427.90\n            y    40.21\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    13\n        label    \"\"\n        graphics\n        [\n            x    59.39\n            y    495.27\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    14\n        label    \"\"\n        graphics\n        [\n            x    770.43\n            y    452.60\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    15\n        label    \"\"\n        graphics\n        [\n            x    112.97\n            y    199.51\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    16\n        label    \"\"\n        graphics\n        [\n            x    837.15\n            y    617.26\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    17\n        label    \"\"\n        graphics\n        [\n            x    192.27\n            y    826.23\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    18\n        label    \"\"\n        graphics\n        [\n            x    644.96\n            y    882.72\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    19\n        label    \"\"\n        graphics\n        [\n            x    464.12\n            y    873.49\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    20\n        label    \"\"\n        graphics\n        [\n            x    879.26\n            y    519.96\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    21\n        label    \"\"\n        graphics\n        [\n            x    548.16\n            y    203.01\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    22\n        label    \"\"\n        graphics\n        [\n            x    209.20\n            y    0.45\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    23\n        label    \"\"\n        graphics\n        [\n            x    49.44\n            y    490.73\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    24\n        label    \"\"\n        graphics\n        [\n            x    721.70\n            y    693.36\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    25\n        label    \"\"\n        graphics\n        [\n            x    270.32\n            y    500.74\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    26\n        label    \"\"\n        graphics\n        [\n            x    482.15\n            y    530.24\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    27\n        label    \"\"\n        graphics\n        [\n            x    316.65\n            y    854.56\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    28\n        label    \"\"\n        graphics\n        [\n            x    770.95\n            y    556.74\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    29\n        label    \"\"\n        graphics\n        [\n            x    662.06\n            y    426.02\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    30\n        label    \"\"\n        graphics\n        [\n            x    362.21\n            y    79.17\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    31\n        label    \"\"\n        graphics\n        [\n            x    303.47\n            y    93.21\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    32\n        label    \"\"\n        graphics\n        [\n            x    732.50\n            y    808.34\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    33\n        label    \"\"\n        graphics\n        [\n            x    283.59\n            y    723.66\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    34\n        label    \"\"\n        graphics\n        [\n            x    264.87\n            y    438.05\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    35\n        label    \"\"\n        graphics\n        [\n            x    899.01\n            y    132.60\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    36\n        label    \"\"\n        graphics\n        [\n            x    101.67\n            y    805.44\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    37\n        label    \"\"\n        graphics\n        [\n            x    258.75\n            y    588.08\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    38\n        label    \"\"\n        graphics\n        [\n            x    226.34\n            y    357.51\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    39\n        label    \"\"\n        graphics\n        [\n            x    409.33\n            y    872.85\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    40\n        label    \"\"\n        graphics\n        [\n            x    352.19\n            y    45.48\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    41\n        label    \"\"\n        graphics\n        [\n            x    129.72\n            y    533.85\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    42\n        label    \"\"\n        graphics\n        [\n            x    140.09\n            y    385.67\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    43\n        label    \"\"\n        graphics\n        [\n            x    654.05\n            y    92.73\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    44\n        label    \"\"\n        graphics\n        [\n            x    830.50\n            y    184.49\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    45\n        label    \"\"\n        graphics\n        [\n            x    250.03\n            y    724.07\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    46\n        label    \"\"\n        graphics\n        [\n            x    882.05\n            y    234.38\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    47\n        label    \"\"\n        graphics\n        [\n            x    29.51\n            y    780.87\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    48\n        label    \"\"\n        graphics\n        [\n            x    111.22\n            y    89.85\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    49\n        label    \"\"\n        graphics\n        [\n            x    431.74\n            y    704.99\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    50\n        label    \"\"\n        graphics\n        [\n            x    389.92\n            y    475.18\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    51\n        label    \"\"\n        graphics\n        [\n            x    694.36\n            y    548.52\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    52\n        label    \"\"\n        graphics\n        [\n            x    473.08\n            y    439.15\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    53\n        label    \"\"\n        graphics\n        [\n            x    851.49\n            y    104.10\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    54\n        label    \"\"\n        graphics\n        [\n            x    422.99\n            y    662.45\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    55\n        label    \"\"\n        graphics\n        [\n            x    159.32\n            y    43.34\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    56\n        label    \"\"\n        graphics\n        [\n            x    338.32\n            y    436.29\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    57\n        label    \"\"\n        graphics\n        [\n            x    882.55\n            y    731.88\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    58\n        label    \"\"\n        graphics\n        [\n            x    16.82\n            y    107.48\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    59\n        label    \"\"\n        graphics\n        [\n            x    689.98\n            y    750.11\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    60\n        label    \"\"\n        graphics\n        [\n            x    126.74\n            y    888.09\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    61\n        label    \"\"\n        graphics\n        [\n            x    225.48\n            y    643.27\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    62\n        label    \"\"\n        graphics\n        [\n            x    115.93\n            y    495.14\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    63\n        label    \"\"\n        graphics\n        [\n            x    503.12\n            y    603.96\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    64\n        label    \"\"\n        graphics\n        [\n            x    43.73\n            y    848.99\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    65\n        label    \"\"\n        graphics\n        [\n            x    643.28\n            y    643.40\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    66\n        label    \"\"\n        graphics\n        [\n            x    283.65\n            y    114.28\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    67\n        label    \"\"\n        graphics\n        [\n            x    529.98\n            y    707.60\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    68\n        label    \"\"\n        graphics\n        [\n            x    401.08\n            y    16.48\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    69\n        label    \"\"\n        graphics\n        [\n            x    452.10\n            y    609.51\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    70\n        label    \"\"\n        graphics\n        [\n            x    779.38\n            y    157.35\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    71\n        label    \"\"\n        graphics\n        [\n            x    879.39\n            y    620.35\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    72\n        label    \"\"\n        graphics\n        [\n            x    98.89\n            y    651.75\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    73\n        label    \"\"\n        graphics\n        [\n            x    49.25\n            y    709.61\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    74\n        label    \"\"\n        graphics\n        [\n            x    304.43\n            y    511.57\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    75\n        label    \"\"\n        graphics\n        [\n            x    59.64\n            y    11.31\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    76\n        label    \"\"\n        graphics\n        [\n            x    327.77\n            y    273.45\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    77\n        label    \"\"\n        graphics\n        [\n            x    854.95\n            y    71.52\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    78\n        label    \"\"\n        graphics\n        [\n            x    20.40\n            y    284.19\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    79\n        label    \"\"\n        graphics\n        [\n            x    736.37\n            y    805.89\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    80\n        label    \"\"\n        graphics\n        [\n            x    214.09\n            y    801.29\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    81\n        label    \"\"\n        graphics\n        [\n            x    648.41\n            y    244.05\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    82\n        label    \"\"\n        graphics\n        [\n            x    146.90\n            y    296.56\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    83\n        label    \"\"\n        graphics\n        [\n            x    743.71\n            y    179.12\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    84\n        label    \"\"\n        graphics\n        [\n            x    840.08\n            y    229.91\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    85\n        label    \"\"\n        graphics\n        [\n            x    795.87\n            y    335.48\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    86\n        label    \"\"\n        graphics\n        [\n            x    566.16\n            y    866.47\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    87\n        label    \"\"\n        graphics\n        [\n            x    527.41\n            y    245.31\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    88\n        label    \"\"\n        graphics\n        [\n            x    439.77\n            y    461.73\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    89\n        label    \"\"\n        graphics\n        [\n            x    430.38\n            y    784.81\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    90\n        label    \"\"\n        graphics\n        [\n            x    139.87\n            y    81.34\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    91\n        label    \"\"\n        graphics\n        [\n            x    293.42\n            y    265.89\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    92\n        label    \"\"\n        graphics\n        [\n            x    322.18\n            y    560.27\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    93\n        label    \"\"\n        graphics\n        [\n            x    412.21\n            y    483.86\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    94\n        label    \"\"\n        graphics\n        [\n            x    566.90\n            y    621.47\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    95\n        label    \"\"\n        graphics\n        [\n            x    481.81\n            y    583.93\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    96\n        label    \"\"\n        graphics\n        [\n            x    564.24\n            y    624.41\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    97\n        label    \"\"\n        graphics\n        [\n            x    867.93\n            y    871.20\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    98\n        label    \"\"\n        graphics\n        [\n            x    812.52\n            y    81.23\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    99\n        label    \"\"\n        graphics\n        [\n            x    552.50\n            y    22.27\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    edge\n    [\n        source    0\n        target    44\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    1\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    10\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    11\n        target    33\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    11\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    12\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    13\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    14\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    15\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    16\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    16\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    17\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    17\n        target    78\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    18\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    19\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    2\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    20\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    21\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    22\n        target    43\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    22\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    23\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    24\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    25\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    25\n        target    65\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    26\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    27\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    28\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    29\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    3\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    30\n        target    24\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    31\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    32\n        target    26\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    33\n        target    19\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    34\n        target    24\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    35\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    36\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    37\n        target    32\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    38\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    39\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    4\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    40\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    40\n        target    61\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    41\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    42\n        target    31\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    43\n        target    31\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    44\n        target    29\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    45\n        target    32\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    46\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    47\n        target    34\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    48\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    48\n        target    24\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    48\n        target    80\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    49\n        target    20\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    5\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    50\n        target    33\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    51\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    52\n        target    33\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    53\n        target    28\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    53\n        target    38\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    54\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    55\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    55\n        target    45\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    56\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    56\n        target    88\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    57\n        target    32\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    58\n        target    38\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    59\n        target    49\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    6\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    60\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    61\n        target    70\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    61\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    62\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    62\n        target    33\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    63\n        target    33\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    63\n        target    92\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    64\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    65\n        target    54\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    66\n        target    63\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    67\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    68\n        target    50\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    69\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    7\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    70\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    71\n        target    33\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    72\n        target    26\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    72\n        target    35\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    73\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    74\n        target    67\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    75\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    76\n        target    42\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    77\n        target    59\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    78\n        target    48\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    79\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    8\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    80\n        target    32\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    80\n        target    61\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    81\n        target    26\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    82\n        target    40\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    82\n        target    57\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    83\n        target    59\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    84\n        target    32\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    85\n        target    66\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    86\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    87\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    88\n        target    28\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    88\n        target    87\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    89\n        target    42\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    9\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    90\n        target    87\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    91\n        target    59\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    92\n        target    36\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    93\n        target    63\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    94\n        target    52\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    94\n        target    56\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    95\n        target    61\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    96\n        target    45\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    96\n        target    60\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    97\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    98\n        target    40\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    99\n        target    66\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n]\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v100e120.tglf",
    "content": "0 322.000 541.000 30.000 30.000\n1 248.000 871.000 30.000 30.000\n2 511.000 731.000 30.000 30.000\n3 831.000 711.000 30.000 30.000\n4 8.000 29.000 30.000 30.000\n5 860.000 710.000 30.000 30.000\n6 268.000 643.000 30.000 30.000\n7 325.000 868.000 30.000 30.000\n8 15.000 862.000 30.000 30.000\n9 671.000 694.000 30.000 30.000\n10 277.000 836.000 30.000 30.000\n11 378.000 469.000 30.000 30.000\n12 427.000 40.000 30.000 30.000\n13 59.000 495.000 30.000 30.000\n14 770.000 452.000 30.000 30.000\n15 112.000 199.000 30.000 30.000\n16 837.000 617.000 30.000 30.000\n17 192.000 826.000 30.000 30.000\n18 644.000 882.000 30.000 30.000\n19 464.000 873.000 30.000 30.000\n20 879.000 519.000 30.000 30.000\n21 548.000 203.000 30.000 30.000\n22 209.000 0.000 30.000 30.000\n23 49.000 490.000 30.000 30.000\n24 721.000 693.000 30.000 30.000\n25 270.000 500.000 30.000 30.000\n26 482.000 530.000 30.000 30.000\n27 316.000 854.000 30.000 30.000\n28 770.000 556.000 30.000 30.000\n29 662.000 426.000 30.000 30.000\n30 362.000 79.000 30.000 30.000\n31 303.000 93.000 30.000 30.000\n32 732.000 808.000 30.000 30.000\n33 283.000 723.000 30.000 30.000\n34 264.000 438.000 30.000 30.000\n35 899.000 132.000 30.000 30.000\n36 101.000 805.000 30.000 30.000\n37 258.000 588.000 30.000 30.000\n38 226.000 357.000 30.000 30.000\n39 409.000 872.000 30.000 30.000\n40 352.000 45.000 30.000 30.000\n41 129.000 533.000 30.000 30.000\n42 140.000 385.000 30.000 30.000\n43 654.000 92.000 30.000 30.000\n44 830.000 184.000 30.000 30.000\n45 250.000 724.000 30.000 30.000\n46 882.000 234.000 30.000 30.000\n47 29.000 780.000 30.000 30.000\n48 111.000 89.000 30.000 30.000\n49 431.000 704.000 30.000 30.000\n50 389.000 475.000 30.000 30.000\n51 694.000 548.000 30.000 30.000\n52 473.000 439.000 30.000 30.000\n53 851.000 104.000 30.000 30.000\n54 422.000 662.000 30.000 30.000\n55 159.000 43.000 30.000 30.000\n56 338.000 436.000 30.000 30.000\n57 882.000 731.000 30.000 30.000\n58 16.000 107.000 30.000 30.000\n59 689.000 750.000 30.000 30.000\n60 126.000 888.000 30.000 30.000\n61 225.000 643.000 30.000 30.000\n62 115.000 495.000 30.000 30.000\n63 503.000 603.000 30.000 30.000\n64 43.000 848.000 30.000 30.000\n65 643.000 643.000 30.000 30.000\n66 283.000 114.000 30.000 30.000\n67 529.000 707.000 30.000 30.000\n68 401.000 16.000 30.000 30.000\n69 452.000 609.000 30.000 30.000\n70 779.000 157.000 30.000 30.000\n71 879.000 620.000 30.000 30.000\n72 98.000 651.000 30.000 30.000\n73 49.000 709.000 30.000 30.000\n74 304.000 511.000 30.000 30.000\n75 59.000 11.000 30.000 30.000\n76 327.000 273.000 30.000 30.000\n77 854.000 71.000 30.000 30.000\n78 20.000 284.000 30.000 30.000\n79 736.000 805.000 30.000 30.000\n80 214.000 801.000 30.000 30.000\n81 648.000 244.000 30.000 30.000\n82 146.000 296.000 30.000 30.000\n83 743.000 179.000 30.000 30.000\n84 840.000 229.000 30.000 30.000\n85 795.000 335.000 30.000 30.000\n86 566.000 866.000 30.000 30.000\n87 527.000 245.000 30.000 30.000\n88 439.000 461.000 30.000 30.000\n89 430.000 784.000 30.000 30.000\n90 139.000 81.000 30.000 30.000\n91 293.000 265.000 30.000 30.000\n92 322.000 560.000 30.000 30.000\n93 412.000 483.000 30.000 30.000\n94 566.000 621.000 30.000 30.000\n95 481.000 583.000 30.000 30.000\n96 564.000 624.000 30.000 30.000\n97 867.000 871.000 30.000 30.000\n98 812.000 81.000 30.000 30.000\n99 552.000 22.000 30.000 30.000\n#\n39 10\n80 32\n97 8\n96 60\n36 14\n28 14\n17 78\n33 19\n7 5\n50 33\n37 32\n55 45\n10 9\n46 12\n69 16\n38 15\n54 22\n86 5\n5 4\n41 12\n47 34\n51 13\n67 1\n94 52\n87 5\n58 38\n96 45\n48 80\n56 88\n0 44\n20 9\n64 21\n81 26\n73 21\n88 87\n55 22\n49 20\n45 32\n31 22\n18 8\n62 33\n25 65\n21 15\n75 13\n68 50\n3 0\n35 5\n11 33\n22 43\n53 28\n32 26\n23 4\n30 24\n72 35\n16 12\n59 49\n17 2\n79 16\n43 31\n71 33\n99 66\n66 63\n61 8\n22 8\n14 8\n16 5\n92 36\n56 6\n57 32\n77 59\n61 70\n76 42\n91 59\n15 9\n83 59\n48 16\n25 13\n70 15\n24 5\n1 0\n74 67\n53 38\n72 26\n95 61\n63 33\n40 61\n8 0\n42 31\n98 40\n89 42\n13 3\n4 3\n29 14\n11 6\n84 32\n82 57\n93 63\n62 12\n26 5\n63 92\n48 24\n85 66\n6 2\n40 21\n94 56\n9 0\n80 61\n2 1\n90 87\n19 3\n34 24\n52 33\n88 28\n44 29\n12 4\n60 12\n78 48\n27 11\n82 40\n65 54\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v100e130.gml",
    "content": "graph\n[\n    node\n    [\n        id    0\n        label    \"\"\n        graphics\n        [\n            x    171.71\n            y    778.67\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    1\n        label    \"\"\n        graphics\n        [\n            x    605.20\n            y    615.62\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    2\n        label    \"\"\n        graphics\n        [\n            x    692.90\n            y    624.52\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    3\n        label    \"\"\n        graphics\n        [\n            x    774.26\n            y    164.90\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    4\n        label    \"\"\n        graphics\n        [\n            x    169.19\n            y    125.90\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    5\n        label    \"\"\n        graphics\n        [\n            x    270.98\n            y    316.64\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    6\n        label    \"\"\n        graphics\n        [\n            x    821.87\n            y    231.98\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    7\n        label    \"\"\n        graphics\n        [\n            x    406.70\n            y    34.06\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    8\n        label    \"\"\n        graphics\n        [\n            x    48.90\n            y    715.43\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    9\n        label    \"\"\n        graphics\n        [\n            x    406.07\n            y    121.33\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    10\n        label    \"\"\n        graphics\n        [\n            x    294.66\n            y    319.62\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    11\n        label    \"\"\n        graphics\n        [\n            x    570.54\n            y    529.73\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    12\n        label    \"\"\n        graphics\n        [\n            x    401.50\n            y    447.88\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    13\n        label    \"\"\n        graphics\n        [\n            x    411.06\n            y    164.87\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    14\n        label    \"\"\n        graphics\n        [\n            x    708.91\n            y    156.56\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    15\n        label    \"\"\n        graphics\n        [\n            x    23.63\n            y    68.65\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    16\n        label    \"\"\n        graphics\n        [\n            x    315.52\n            y    604.46\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    17\n        label    \"\"\n        graphics\n        [\n            x    540.60\n            y    870.33\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    18\n        label    \"\"\n        graphics\n        [\n            x    514.25\n            y    826.32\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    19\n        label    \"\"\n        graphics\n        [\n            x    262.83\n            y    771.24\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    20\n        label    \"\"\n        graphics\n        [\n            x    230.11\n            y    475.08\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    21\n        label    \"\"\n        graphics\n        [\n            x    778.85\n            y    431.73\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    22\n        label    \"\"\n        graphics\n        [\n            x    899.78\n            y    179.48\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    23\n        label    \"\"\n        graphics\n        [\n            x    4.58\n            y    242.59\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    24\n        label    \"\"\n        graphics\n        [\n            x    791.52\n            y    852.69\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    25\n        label    \"\"\n        graphics\n        [\n            x    764.62\n            y    194.78\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    26\n        label    \"\"\n        graphics\n        [\n            x    526.78\n            y    641.51\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    27\n        label    \"\"\n        graphics\n        [\n            x    163.36\n            y    241.29\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    28\n        label    \"\"\n        graphics\n        [\n            x    15.78\n            y    259.88\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    29\n        label    \"\"\n        graphics\n        [\n            x    626.02\n            y    889.40\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    30\n        label    \"\"\n        graphics\n        [\n            x    889.09\n            y    59.31\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    31\n        label    \"\"\n        graphics\n        [\n            x    66.39\n            y    413.43\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    32\n        label    \"\"\n        graphics\n        [\n            x    365.55\n            y    852.49\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    33\n        label    \"\"\n        graphics\n        [\n            x    461.07\n            y    55.09\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    34\n        label    \"\"\n        graphics\n        [\n            x    44.37\n            y    481.96\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    35\n        label    \"\"\n        graphics\n        [\n            x    601.22\n            y    746.42\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    36\n        label    \"\"\n        graphics\n        [\n            x    336.08\n            y    208.70\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    37\n        label    \"\"\n        graphics\n        [\n            x    747.03\n            y    94.28\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    38\n        label    \"\"\n        graphics\n        [\n            x    743.05\n            y    265.13\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    39\n        label    \"\"\n        graphics\n        [\n            x    598.29\n            y    198.78\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    40\n        label    \"\"\n        graphics\n        [\n            x    688.46\n            y    289.04\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    41\n        label    \"\"\n        graphics\n        [\n            x    725.06\n            y    392.09\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    42\n        label    \"\"\n        graphics\n        [\n            x    2.07\n            y    197.43\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    43\n        label    \"\"\n        graphics\n        [\n            x    688.69\n            y    296.73\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    44\n        label    \"\"\n        graphics\n        [\n            x    229.31\n            y    734.97\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    45\n        label    \"\"\n        graphics\n        [\n            x    339.64\n            y    483.90\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    46\n        label    \"\"\n        graphics\n        [\n            x    755.30\n            y    29.71\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    47\n        label    \"\"\n        graphics\n        [\n            x    298.88\n            y    99.45\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    48\n        label    \"\"\n        graphics\n        [\n            x    509.10\n            y    364.40\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    49\n        label    \"\"\n        graphics\n        [\n            x    732.41\n            y    361.03\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    50\n        label    \"\"\n        graphics\n        [\n            x    614.57\n            y    608.56\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    51\n        label    \"\"\n        graphics\n        [\n            x    775.10\n            y    241.21\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    52\n        label    \"\"\n        graphics\n        [\n            x    21.84\n            y    477.10\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    53\n        label    \"\"\n        graphics\n        [\n            x    872.88\n            y    114.52\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    54\n        label    \"\"\n        graphics\n        [\n            x    798.87\n            y    60.32\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    55\n        label    \"\"\n        graphics\n        [\n            x    170.18\n            y    763.83\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    56\n        label    \"\"\n        graphics\n        [\n            x    323.75\n            y    629.25\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    57\n        label    \"\"\n        graphics\n        [\n            x    624.61\n            y    640.01\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    58\n        label    \"\"\n        graphics\n        [\n            x    699.72\n            y    553.20\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    59\n        label    \"\"\n        graphics\n        [\n            x    574.29\n            y    534.35\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    60\n        label    \"\"\n        graphics\n        [\n            x    841.81\n            y    127.88\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    61\n        label    \"\"\n        graphics\n        [\n            x    225.56\n            y    221.52\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    62\n        label    \"\"\n        graphics\n        [\n            x    77.15\n            y    239.88\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    63\n        label    \"\"\n        graphics\n        [\n            x    181.75\n            y    391.73\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    64\n        label    \"\"\n        graphics\n        [\n            x    695.62\n            y    635.61\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    65\n        label    \"\"\n        graphics\n        [\n            x    327.39\n            y    245.17\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    66\n        label    \"\"\n        graphics\n        [\n            x    753.81\n            y    571.65\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    67\n        label    \"\"\n        graphics\n        [\n            x    769.22\n            y    146.05\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    68\n        label    \"\"\n        graphics\n        [\n            x    211.79\n            y    35.48\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    69\n        label    \"\"\n        graphics\n        [\n            x    199.64\n            y    141.40\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    70\n        label    \"\"\n        graphics\n        [\n            x    429.34\n            y    331.31\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    71\n        label    \"\"\n        graphics\n        [\n            x    833.97\n            y    888.75\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    72\n        label    \"\"\n        graphics\n        [\n            x    506.29\n            y    351.86\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    73\n        label    \"\"\n        graphics\n        [\n            x    779.82\n            y    249.15\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    74\n        label    \"\"\n        graphics\n        [\n            x    697.54\n            y    796.15\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    75\n        label    \"\"\n        graphics\n        [\n            x    612.88\n            y    67.48\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    76\n        label    \"\"\n        graphics\n        [\n            x    235.95\n            y    804.40\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    77\n        label    \"\"\n        graphics\n        [\n            x    7.02\n            y    752.73\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    78\n        label    \"\"\n        graphics\n        [\n            x    864.78\n            y    13.48\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    79\n        label    \"\"\n        graphics\n        [\n            x    429.04\n            y    448.44\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    80\n        label    \"\"\n        graphics\n        [\n            x    486.24\n            y    165.25\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    81\n        label    \"\"\n        graphics\n        [\n            x    345.69\n            y    183.46\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    82\n        label    \"\"\n        graphics\n        [\n            x    533.74\n            y    50.37\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    83\n        label    \"\"\n        graphics\n        [\n            x    601.40\n            y    601.90\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    84\n        label    \"\"\n        graphics\n        [\n            x    726.79\n            y    583.85\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    85\n        label    \"\"\n        graphics\n        [\n            x    52.29\n            y    703.31\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    86\n        label    \"\"\n        graphics\n        [\n            x    145.10\n            y    30.69\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    87\n        label    \"\"\n        graphics\n        [\n            x    712.68\n            y    602.24\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    88\n        label    \"\"\n        graphics\n        [\n            x    308.55\n            y    838.11\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    89\n        label    \"\"\n        graphics\n        [\n            x    318.30\n            y    853.25\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    90\n        label    \"\"\n        graphics\n        [\n            x    777.14\n            y    273.37\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    91\n        label    \"\"\n        graphics\n        [\n            x    59.42\n            y    402.86\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    92\n        label    \"\"\n        graphics\n        [\n            x    220.03\n            y    160.24\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    93\n        label    \"\"\n        graphics\n        [\n            x    890.01\n            y    734.44\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    94\n        label    \"\"\n        graphics\n        [\n            x    308.69\n            y    318.57\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    95\n        label    \"\"\n        graphics\n        [\n            x    778.67\n            y    135.01\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    96\n        label    \"\"\n        graphics\n        [\n            x    38.94\n            y    131.23\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    97\n        label    \"\"\n        graphics\n        [\n            x    282.19\n            y    231.01\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    98\n        label    \"\"\n        graphics\n        [\n            x    379.61\n            y    632.03\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    99\n        label    \"\"\n        graphics\n        [\n            x    21.25\n            y    637.42\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    edge\n    [\n        source    0\n        target    95\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    1\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    10\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    11\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    12\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    13\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    14\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    15\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    15\n        target    77\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    16\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    16\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    17\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    18\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    18\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    19\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    2\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    20\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    21\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    22\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    23\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    24\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    25\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    25\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    26\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    26\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    27\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    28\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    29\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    3\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    30\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    31\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    31\n        target    97\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    32\n        target    31\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    33\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    33\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    34\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    34\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    35\n        target    25\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    35\n        target    57\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    36\n        target    25\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    37\n        target    31\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    37\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    38\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    39\n        target    25\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    4\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    40\n        target    32\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    41\n        target    27\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    42\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    43\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    43\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    43\n        target    51\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    44\n        target    40\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    45\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    45\n        target    93\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    46\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    47\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    48\n        target    29\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    49\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    49\n        target    44\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    5\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    50\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    51\n        target    31\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    52\n        target    30\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    53\n        target    41\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    53\n        target    50\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    54\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    55\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    56\n        target    19\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    57\n        target    44\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    58\n        target    42\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    58\n        target    75\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    59\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    6\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    60\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    61\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    61\n        target    31\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    62\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    63\n        target    30\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    63\n        target    74\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    64\n        target    31\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    64\n        target    35\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    65\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    66\n        target    53\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    66\n        target    89\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    66\n        target    96\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    67\n        target    47\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    68\n        target    48\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    69\n        target    36\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    7\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    7\n        target    47\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    70\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    71\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    71\n        target    28\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    72\n        target    36\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    73\n        target    45\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    74\n        target    32\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    74\n        target    46\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    74\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    75\n        target    60\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    76\n        target    53\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    77\n        target    34\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    78\n        target    43\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    79\n        target    37\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    8\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    80\n        target    41\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    81\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    82\n        target    39\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    83\n        target    20\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    84\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    85\n        target    76\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    86\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    87\n        target    66\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    88\n        target    39\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    89\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    9\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    9\n        target    87\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    90\n        target    40\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    90\n        target    74\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    91\n        target    68\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    91\n        target    97\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    92\n        target    29\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    93\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    93\n        target    34\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    94\n        target    71\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    95\n        target    27\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    96\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    97\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    97\n        target    40\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    98\n        target    62\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    99\n        target    80\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n]\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v100e130.tglf",
    "content": "0 171.000 778.000 30.000 30.000\n1 605.000 615.000 30.000 30.000\n2 692.000 624.000 30.000 30.000\n3 774.000 164.000 30.000 30.000\n4 169.000 125.000 30.000 30.000\n5 270.000 316.000 30.000 30.000\n6 821.000 231.000 30.000 30.000\n7 406.000 34.000 30.000 30.000\n8 48.000 715.000 30.000 30.000\n9 406.000 121.000 30.000 30.000\n10 294.000 319.000 30.000 30.000\n11 570.000 529.000 30.000 30.000\n12 401.000 447.000 30.000 30.000\n13 411.000 164.000 30.000 30.000\n14 708.000 156.000 30.000 30.000\n15 23.000 68.000 30.000 30.000\n16 315.000 604.000 30.000 30.000\n17 540.000 870.000 30.000 30.000\n18 514.000 826.000 30.000 30.000\n19 262.000 771.000 30.000 30.000\n20 230.000 475.000 30.000 30.000\n21 778.000 431.000 30.000 30.000\n22 899.000 179.000 30.000 30.000\n23 4.000 242.000 30.000 30.000\n24 791.000 852.000 30.000 30.000\n25 764.000 194.000 30.000 30.000\n26 526.000 641.000 30.000 30.000\n27 163.000 241.000 30.000 30.000\n28 15.000 259.000 30.000 30.000\n29 626.000 889.000 30.000 30.000\n30 889.000 59.000 30.000 30.000\n31 66.000 413.000 30.000 30.000\n32 365.000 852.000 30.000 30.000\n33 461.000 55.000 30.000 30.000\n34 44.000 481.000 30.000 30.000\n35 601.000 746.000 30.000 30.000\n36 336.000 208.000 30.000 30.000\n37 747.000 94.000 30.000 30.000\n38 743.000 265.000 30.000 30.000\n39 598.000 198.000 30.000 30.000\n40 688.000 289.000 30.000 30.000\n41 725.000 392.000 30.000 30.000\n42 2.000 197.000 30.000 30.000\n43 688.000 296.000 30.000 30.000\n44 229.000 734.000 30.000 30.000\n45 339.000 483.000 30.000 30.000\n46 755.000 29.000 30.000 30.000\n47 298.000 99.000 30.000 30.000\n48 509.000 364.000 30.000 30.000\n49 732.000 361.000 30.000 30.000\n50 614.000 608.000 30.000 30.000\n51 775.000 241.000 30.000 30.000\n52 21.000 477.000 30.000 30.000\n53 872.000 114.000 30.000 30.000\n54 798.000 60.000 30.000 30.000\n55 170.000 763.000 30.000 30.000\n56 323.000 629.000 30.000 30.000\n57 624.000 640.000 30.000 30.000\n58 699.000 553.000 30.000 30.000\n59 574.000 534.000 30.000 30.000\n60 841.000 127.000 30.000 30.000\n61 225.000 221.000 30.000 30.000\n62 77.000 239.000 30.000 30.000\n63 181.000 391.000 30.000 30.000\n64 695.000 635.000 30.000 30.000\n65 327.000 245.000 30.000 30.000\n66 753.000 571.000 30.000 30.000\n67 769.000 146.000 30.000 30.000\n68 211.000 35.000 30.000 30.000\n69 199.000 141.000 30.000 30.000\n70 429.000 331.000 30.000 30.000\n71 833.000 888.000 30.000 30.000\n72 506.000 351.000 30.000 30.000\n73 779.000 249.000 30.000 30.000\n74 697.000 796.000 30.000 30.000\n75 612.000 67.000 30.000 30.000\n76 235.000 804.000 30.000 30.000\n77 7.000 752.000 30.000 30.000\n78 864.000 13.000 30.000 30.000\n79 429.000 448.000 30.000 30.000\n80 486.000 165.000 30.000 30.000\n81 345.000 183.000 30.000 30.000\n82 533.000 50.000 30.000 30.000\n83 601.000 601.000 30.000 30.000\n84 726.000 583.000 30.000 30.000\n85 52.000 703.000 30.000 30.000\n86 145.000 30.000 30.000 30.000\n87 712.000 602.000 30.000 30.000\n88 308.000 838.000 30.000 30.000\n89 318.000 853.000 30.000 30.000\n90 777.000 273.000 30.000 30.000\n91 59.000 402.000 30.000 30.000\n92 220.000 160.000 30.000 30.000\n93 890.000 734.000 30.000 30.000\n94 308.000 318.000 30.000 30.000\n95 778.000 135.000 30.000 30.000\n96 38.000 131.000 30.000 30.000\n97 282.000 231.000 30.000 30.000\n98 379.000 632.000 30.000 30.000\n99 21.000 637.000 30.000 30.000\n#\n6 0\n57 44\n99 80\n72 36\n45 93\n18 5\n42 7\n20 11\n53 41\n8 3\n77 34\n26 12\n71 28\n82 39\n95 27\n9 87\n28 12\n49 10\n3 0\n64 35\n80 41\n21 2\n62 13\n14 8\n16 17\n4 0\n22 15\n36 25\n0 95\n66 89\n51 31\n37 4\n83 20\n53 50\n11 5\n55 14\n65 10\n66 96\n49 44\n97 40\n93 34\n24 11\n35 57\n17 3\n89 22\n74 5\n25 4\n23 9\n90 40\n92 29\n52 30\n38 14\n61 15\n44 40\n66 53\n33 10\n60 6\n30 16\n25 7\n12 3\n27 11\n91 97\n69 36\n88 39\n56 19\n85 76\n87 66\n74 32\n31 97\n29 5\n70 14\n58 75\n91 68\n97 14\n37 31\n73 45\n34 8\n39 25\n13 5\n1 0\n16 14\n90 74\n68 48\n33 14\n10 2\n43 51\n7 47\n94 71\n47 21\n26 15\n96 4\n98 62\n78 43\n76 53\n7 3\n15 13\n71 18\n63 30\n93 16\n75 60\n48 29\n54 13\n67 47\n2 0\n61 31\n79 37\n43 22\n58 42\n74 46\n63 74\n46 16\n15 77\n31 2\n84 10\n34 6\n41 27\n40 32\n45 4\n50 18\n18 8\n64 31\n9 3\n35 25\n81 17\n19 15\n86 9\n43 2\n32 31\n5 3\n59 22\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v100e140.gml",
    "content": "graph\n[\n    node\n    [\n        id    0\n        label    \"\"\n        graphics\n        [\n            x    886.90\n            y    237.58\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    1\n        label    \"\"\n        graphics\n        [\n            x    196.68\n            y    859.94\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    2\n        label    \"\"\n        graphics\n        [\n            x    635.05\n            y    479.91\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    3\n        label    \"\"\n        graphics\n        [\n            x    593.16\n            y    459.10\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    4\n        label    \"\"\n        graphics\n        [\n            x    180.31\n            y    302.13\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    5\n        label    \"\"\n        graphics\n        [\n            x    762.04\n            y    277.97\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    6\n        label    \"\"\n        graphics\n        [\n            x    585.55\n            y    172.27\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    7\n        label    \"\"\n        graphics\n        [\n            x    357.71\n            y    559.07\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    8\n        label    \"\"\n        graphics\n        [\n            x    767.97\n            y    287.93\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    9\n        label    \"\"\n        graphics\n        [\n            x    499.06\n            y    254.25\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    10\n        label    \"\"\n        graphics\n        [\n            x    211.21\n            y    378.81\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    11\n        label    \"\"\n        graphics\n        [\n            x    602.26\n            y    840.59\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    12\n        label    \"\"\n        graphics\n        [\n            x    119.62\n            y    704.41\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    13\n        label    \"\"\n        graphics\n        [\n            x    22.28\n            y    584.45\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    14\n        label    \"\"\n        graphics\n        [\n            x    347.89\n            y    717.53\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    15\n        label    \"\"\n        graphics\n        [\n            x    440.40\n            y    67.23\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    16\n        label    \"\"\n        graphics\n        [\n            x    223.20\n            y    437.61\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    17\n        label    \"\"\n        graphics\n        [\n            x    633.83\n            y    232.42\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    18\n        label    \"\"\n        graphics\n        [\n            x    330.59\n            y    87.60\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    19\n        label    \"\"\n        graphics\n        [\n            x    617.55\n            y    111.67\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    20\n        label    \"\"\n        graphics\n        [\n            x    674.19\n            y    808.97\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    21\n        label    \"\"\n        graphics\n        [\n            x    546.25\n            y    729.02\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    22\n        label    \"\"\n        graphics\n        [\n            x    510.84\n            y    693.00\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    23\n        label    \"\"\n        graphics\n        [\n            x    119.13\n            y    513.45\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    24\n        label    \"\"\n        graphics\n        [\n            x    262.13\n            y    367.58\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    25\n        label    \"\"\n        graphics\n        [\n            x    321.04\n            y    340.22\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    26\n        label    \"\"\n        graphics\n        [\n            x    291.44\n            y    705.22\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    27\n        label    \"\"\n        graphics\n        [\n            x    569.75\n            y    114.01\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    28\n        label    \"\"\n        graphics\n        [\n            x    73.55\n            y    781.96\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    29\n        label    \"\"\n        graphics\n        [\n            x    623.65\n            y    272.49\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    30\n        label    \"\"\n        graphics\n        [\n            x    172.05\n            y    215.59\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    31\n        label    \"\"\n        graphics\n        [\n            x    62.29\n            y    558.86\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    32\n        label    \"\"\n        graphics\n        [\n            x    679.85\n            y    97.60\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    33\n        label    \"\"\n        graphics\n        [\n            x    286.11\n            y    742.49\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    34\n        label    \"\"\n        graphics\n        [\n            x    247.80\n            y    256.42\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    35\n        label    \"\"\n        graphics\n        [\n            x    456.36\n            y    626.67\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    36\n        label    \"\"\n        graphics\n        [\n            x    519.16\n            y    465.07\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    37\n        label    \"\"\n        graphics\n        [\n            x    824.25\n            y    580.41\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    38\n        label    \"\"\n        graphics\n        [\n            x    235.26\n            y    713.88\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    39\n        label    \"\"\n        graphics\n        [\n            x    134.04\n            y    768.67\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    40\n        label    \"\"\n        graphics\n        [\n            x    553.03\n            y    773.37\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    41\n        label    \"\"\n        graphics\n        [\n            x    749.42\n            y    384.45\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    42\n        label    \"\"\n        graphics\n        [\n            x    128.63\n            y    501.91\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    43\n        label    \"\"\n        graphics\n        [\n            x    75.38\n            y    631.48\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    44\n        label    \"\"\n        graphics\n        [\n            x    403.78\n            y    629.74\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    45\n        label    \"\"\n        graphics\n        [\n            x    814.16\n            y    890.71\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    46\n        label    \"\"\n        graphics\n        [\n            x    574.54\n            y    473.91\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    47\n        label    \"\"\n        graphics\n        [\n            x    178.69\n            y    591.86\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    48\n        label    \"\"\n        graphics\n        [\n            x    200.96\n            y    462.36\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    49\n        label    \"\"\n        graphics\n        [\n            x    821.59\n            y    14.94\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    50\n        label    \"\"\n        graphics\n        [\n            x    239.07\n            y    770.94\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    51\n        label    \"\"\n        graphics\n        [\n            x    461.75\n            y    894.88\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    52\n        label    \"\"\n        graphics\n        [\n            x    571.15\n            y    339.40\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    53\n        label    \"\"\n        graphics\n        [\n            x    135.82\n            y    205.20\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    54\n        label    \"\"\n        graphics\n        [\n            x    312.49\n            y    897.13\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    55\n        label    \"\"\n        graphics\n        [\n            x    626.06\n            y    204.10\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    56\n        label    \"\"\n        graphics\n        [\n            x    258.99\n            y    428.04\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    57\n        label    \"\"\n        graphics\n        [\n            x    817.64\n            y    448.42\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    58\n        label    \"\"\n        graphics\n        [\n            x    677.82\n            y    577.25\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    59\n        label    \"\"\n        graphics\n        [\n            x    398.73\n            y    67.89\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    60\n        label    \"\"\n        graphics\n        [\n            x    772.82\n            y    215.87\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    61\n        label    \"\"\n        graphics\n        [\n            x    355.58\n            y    387.89\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    62\n        label    \"\"\n        graphics\n        [\n            x    302.83\n            y    630.88\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    63\n        label    \"\"\n        graphics\n        [\n            x    456.41\n            y    78.81\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    64\n        label    \"\"\n        graphics\n        [\n            x    70.43\n            y    861.58\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    65\n        label    \"\"\n        graphics\n        [\n            x    833.55\n            y    568.86\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    66\n        label    \"\"\n        graphics\n        [\n            x    575.34\n            y    208.34\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    67\n        label    \"\"\n        graphics\n        [\n            x    734.43\n            y    826.96\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    68\n        label    \"\"\n        graphics\n        [\n            x    873.80\n            y    179.10\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    69\n        label    \"\"\n        graphics\n        [\n            x    794.52\n            y    512.24\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    70\n        label    \"\"\n        graphics\n        [\n            x    71.78\n            y    832.60\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    71\n        label    \"\"\n        graphics\n        [\n            x    228.85\n            y    429.75\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    72\n        label    \"\"\n        graphics\n        [\n            x    115.79\n            y    622.76\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    73\n        label    \"\"\n        graphics\n        [\n            x    817.59\n            y    500.13\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    74\n        label    \"\"\n        graphics\n        [\n            x    45.60\n            y    78.71\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    75\n        label    \"\"\n        graphics\n        [\n            x    556.33\n            y    370.31\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    76\n        label    \"\"\n        graphics\n        [\n            x    205.90\n            y    515.51\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    77\n        label    \"\"\n        graphics\n        [\n            x    550.55\n            y    707.35\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    78\n        label    \"\"\n        graphics\n        [\n            x    213.20\n            y    298.73\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    79\n        label    \"\"\n        graphics\n        [\n            x    823.05\n            y    625.73\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    80\n        label    \"\"\n        graphics\n        [\n            x    452.19\n            y    856.64\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    81\n        label    \"\"\n        graphics\n        [\n            x    440.20\n            y    299.86\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    82\n        label    \"\"\n        graphics\n        [\n            x    360.28\n            y    495.80\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    83\n        label    \"\"\n        graphics\n        [\n            x    510.49\n            y    434.19\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    84\n        label    \"\"\n        graphics\n        [\n            x    8.64\n            y    271.16\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    85\n        label    \"\"\n        graphics\n        [\n            x    722.11\n            y    177.91\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    86\n        label    \"\"\n        graphics\n        [\n            x    574.61\n            y    610.43\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    87\n        label    \"\"\n        graphics\n        [\n            x    435.60\n            y    464.63\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    88\n        label    \"\"\n        graphics\n        [\n            x    22.89\n            y    339.77\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    89\n        label    \"\"\n        graphics\n        [\n            x    124.20\n            y    651.20\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    90\n        label    \"\"\n        graphics\n        [\n            x    773.11\n            y    823.12\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    91\n        label    \"\"\n        graphics\n        [\n            x    267.39\n            y    467.19\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    92\n        label    \"\"\n        graphics\n        [\n            x    156.67\n            y    342.16\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    93\n        label    \"\"\n        graphics\n        [\n            x    544.87\n            y    602.76\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    94\n        label    \"\"\n        graphics\n        [\n            x    605.07\n            y    152.81\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    95\n        label    \"\"\n        graphics\n        [\n            x    785.75\n            y    400.02\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    96\n        label    \"\"\n        graphics\n        [\n            x    229.69\n            y    421.06\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    97\n        label    \"\"\n        graphics\n        [\n            x    785.08\n            y    806.25\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    98\n        label    \"\"\n        graphics\n        [\n            x    580.12\n            y    872.28\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    99\n        label    \"\"\n        graphics\n        [\n            x    688.08\n            y    637.83\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    edge\n    [\n        source    1\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    1\n        target    84\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    10\n        target    26\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    10\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    11\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    12\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    12\n        target    51\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    13\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    14\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    15\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    16\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    17\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    18\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    19\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    2\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    20\n        target    61\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    20\n        target    69\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    20\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    21\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    22\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    23\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    24\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    25\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    26\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    27\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    28\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    29\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    3\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    3\n        target    46\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    30\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    31\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    32\n        target    19\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    32\n        target    76\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    33\n        target    28\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    34\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    35\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    36\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    37\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    38\n        target    37\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    39\n        target    28\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    4\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    40\n        target    33\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    41\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    41\n        target    38\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    42\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    43\n        target    37\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    44\n        target    33\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    44\n        target    37\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    44\n        target    41\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    44\n        target    49\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    45\n        target    35\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    46\n        target    36\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    46\n        target    37\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    46\n        target    70\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    47\n        target    43\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    47\n        target    52\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    48\n        target    37\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    49\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    49\n        target    38\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    5\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    50\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    50\n        target    99\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    51\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    51\n        target    42\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    52\n        target    37\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    52\n        target    39\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    53\n        target    30\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    54\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    54\n        target    20\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    54\n        target    61\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    55\n        target    38\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    56\n        target    54\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    57\n        target    49\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    58\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    58\n        target    44\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    59\n        target    44\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    6\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    60\n        target    31\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    60\n        target    48\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    61\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    62\n        target    25\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    62\n        target    44\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    62\n        target    48\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    63\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    64\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    64\n        target    75\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    65\n        target    43\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    66\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    67\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    67\n        target    32\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    67\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    68\n        target    26\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    69\n        target    54\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    7\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    70\n        target    48\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    70\n        target    72\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    71\n        target    32\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    72\n        target    28\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    72\n        target    55\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    73\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    74\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    75\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    75\n        target    57\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    75\n        target    58\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    76\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    77\n        target    19\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    78\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    78\n        target    61\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    79\n        target    28\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    8\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    80\n        target    54\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    80\n        target    97\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    81\n        target    36\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    82\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    83\n        target    25\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    83\n        target    68\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    84\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    85\n        target    31\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    85\n        target    80\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    86\n        target    35\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    87\n        target    63\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    87\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    87\n        target    70\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    88\n        target    70\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    89\n        target    81\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    9\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    90\n        target    68\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    90\n        target    87\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    91\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    92\n        target    19\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    92\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    93\n        target    74\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    94\n        target    44\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    94\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    95\n        target    88\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    96\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    97\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    98\n        target    73\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    99\n        target    52\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    99\n        target    53\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n]\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v100e140.tglf",
    "content": "0 886.000 237.000 30.000 30.000\n1 196.000 859.000 30.000 30.000\n2 635.000 479.000 30.000 30.000\n3 593.000 459.000 30.000 30.000\n4 180.000 302.000 30.000 30.000\n5 762.000 277.000 30.000 30.000\n6 585.000 172.000 30.000 30.000\n7 357.000 559.000 30.000 30.000\n8 767.000 287.000 30.000 30.000\n9 499.000 254.000 30.000 30.000\n10 211.000 378.000 30.000 30.000\n11 602.000 840.000 30.000 30.000\n12 119.000 704.000 30.000 30.000\n13 22.000 584.000 30.000 30.000\n14 347.000 717.000 30.000 30.000\n15 440.000 67.000 30.000 30.000\n16 223.000 437.000 30.000 30.000\n17 633.000 232.000 30.000 30.000\n18 330.000 87.000 30.000 30.000\n19 617.000 111.000 30.000 30.000\n20 674.000 808.000 30.000 30.000\n21 546.000 729.000 30.000 30.000\n22 510.000 693.000 30.000 30.000\n23 119.000 513.000 30.000 30.000\n24 262.000 367.000 30.000 30.000\n25 321.000 340.000 30.000 30.000\n26 291.000 705.000 30.000 30.000\n27 569.000 114.000 30.000 30.000\n28 73.000 781.000 30.000 30.000\n29 623.000 272.000 30.000 30.000\n30 172.000 215.000 30.000 30.000\n31 62.000 558.000 30.000 30.000\n32 679.000 97.000 30.000 30.000\n33 286.000 742.000 30.000 30.000\n34 247.000 256.000 30.000 30.000\n35 456.000 626.000 30.000 30.000\n36 519.000 465.000 30.000 30.000\n37 824.000 580.000 30.000 30.000\n38 235.000 713.000 30.000 30.000\n39 134.000 768.000 30.000 30.000\n40 553.000 773.000 30.000 30.000\n41 749.000 384.000 30.000 30.000\n42 128.000 501.000 30.000 30.000\n43 75.000 631.000 30.000 30.000\n44 403.000 629.000 30.000 30.000\n45 814.000 890.000 30.000 30.000\n46 574.000 473.000 30.000 30.000\n47 178.000 591.000 30.000 30.000\n48 200.000 462.000 30.000 30.000\n49 821.000 14.000 30.000 30.000\n50 239.000 770.000 30.000 30.000\n51 461.000 894.000 30.000 30.000\n52 571.000 339.000 30.000 30.000\n53 135.000 205.000 30.000 30.000\n54 312.000 897.000 30.000 30.000\n55 626.000 204.000 30.000 30.000\n56 258.000 428.000 30.000 30.000\n57 817.000 448.000 30.000 30.000\n58 677.000 577.000 30.000 30.000\n59 398.000 67.000 30.000 30.000\n60 772.000 215.000 30.000 30.000\n61 355.000 387.000 30.000 30.000\n62 302.000 630.000 30.000 30.000\n63 456.000 78.000 30.000 30.000\n64 70.000 861.000 30.000 30.000\n65 833.000 568.000 30.000 30.000\n66 575.000 208.000 30.000 30.000\n67 734.000 826.000 30.000 30.000\n68 873.000 179.000 30.000 30.000\n69 794.000 512.000 30.000 30.000\n70 71.000 832.000 30.000 30.000\n71 228.000 429.000 30.000 30.000\n72 115.000 622.000 30.000 30.000\n73 817.000 500.000 30.000 30.000\n74 45.000 78.000 30.000 30.000\n75 556.000 370.000 30.000 30.000\n76 205.000 515.000 30.000 30.000\n77 550.000 707.000 30.000 30.000\n78 213.000 298.000 30.000 30.000\n79 823.000 625.000 30.000 30.000\n80 452.000 856.000 30.000 30.000\n81 440.000 299.000 30.000 30.000\n82 360.000 495.000 30.000 30.000\n83 510.000 434.000 30.000 30.000\n84 8.000 271.000 30.000 30.000\n85 722.000 177.000 30.000 30.000\n86 574.000 610.000 30.000 30.000\n87 435.000 464.000 30.000 30.000\n88 22.000 339.000 30.000 30.000\n89 124.000 651.000 30.000 30.000\n90 773.000 823.000 30.000 30.000\n91 267.000 467.000 30.000 30.000\n92 156.000 342.000 30.000 30.000\n93 544.000 602.000 30.000 30.000\n94 605.000 152.000 30.000 30.000\n95 785.000 400.000 30.000 30.000\n96 229.000 421.000 30.000 30.000\n97 785.000 806.000 30.000 30.000\n98 580.000 872.000 30.000 30.000\n99 688.000 637.000 30.000 30.000\n#\n64 12\n40 33\n99 53\n87 7\n11 7\n30 23\n12 10\n46 36\n47 43\n32 19\n27 1\n34 3\n25 11\n75 58\n22 6\n98 73\n13 8\n75 17\n85 80\n9 5\n48 37\n63 13\n46 37\n94 5\n20 61\n54 20\n45 35\n92 23\n86 35\n6 3\n77 19\n57 49\n43 37\n60 48\n64 75\n44 33\n16 13\n78 1\n68 26\n50 23\n72 55\n61 18\n24 23\n47 52\n50 99\n38 37\n60 31\n55 38\n56 54\n29 10\n49 15\n66 0\n79 28\n95 88\n74 22\n41 2\n28 12\n62 25\n17 13\n80 54\n94 44\n32 76\n20 8\n21 5\n70 48\n99 52\n3 46\n23 3\n19 12\n83 68\n81 36\n62 44\n7 2\n80 97\n33 28\n67 17\n87 63\n69 54\n41 38\n59 44\n78 61\n82 3\n2 1\n88 70\n44 37\n76 13\n37 16\n44 49\n85 31\n84 6\n4 3\n1 84\n93 74\n5 1\n89 81\n73 5\n53 30\n71 32\n90 68\n39 28\n52 37\n14 11\n91 9\n70 72\n44 41\n10 6\n8 7\n96 15\n18 14\n65 43\n26 9\n1 0\n15 5\n58 2\n72 28\n92 19\n36 10\n83 25\n10 26\n42 14\n87 70\n3 1\n54 16\n67 5\n46 70\n90 87\n54 61\n52 39\n62 48\n75 57\n58 44\n35 22\n12 51\n31 21\n97 13\n49 38\n51 18\n67 32\n20 69\n51 42\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v100e150.gml",
    "content": "graph\n[\n    node\n    [\n        id    0\n        label    \"\"\n        graphics\n        [\n            x    22.28\n            y    161.41\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    1\n        label    \"\"\n        graphics\n        [\n            x    170.92\n            y    218.15\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    2\n        label    \"\"\n        graphics\n        [\n            x    119.75\n            y    799.86\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    3\n        label    \"\"\n        graphics\n        [\n            x    640.86\n            y    847.54\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    4\n        label    \"\"\n        graphics\n        [\n            x    899.70\n            y    529.45\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    5\n        label    \"\"\n        graphics\n        [\n            x    624.04\n            y    814.82\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    6\n        label    \"\"\n        graphics\n        [\n            x    42.94\n            y    170.06\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    7\n        label    \"\"\n        graphics\n        [\n            x    639.86\n            y    400.08\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    8\n        label    \"\"\n        graphics\n        [\n            x    19.27\n            y    75.33\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    9\n        label    \"\"\n        graphics\n        [\n            x    738.76\n            y    36.15\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    10\n        label    \"\"\n        graphics\n        [\n            x    566.05\n            y    685.66\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    11\n        label    \"\"\n        graphics\n        [\n            x    149.02\n            y    236.64\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    12\n        label    \"\"\n        graphics\n        [\n            x    772.94\n            y    326.95\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    13\n        label    \"\"\n        graphics\n        [\n            x    719.11\n            y    663.73\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    14\n        label    \"\"\n        graphics\n        [\n            x    584.74\n            y    212.10\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    15\n        label    \"\"\n        graphics\n        [\n            x    627.97\n            y    43.73\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    16\n        label    \"\"\n        graphics\n        [\n            x    669.45\n            y    800.63\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    17\n        label    \"\"\n        graphics\n        [\n            x    859.82\n            y    535.08\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    18\n        label    \"\"\n        graphics\n        [\n            x    572.19\n            y    681.44\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    19\n        label    \"\"\n        graphics\n        [\n            x    121.14\n            y    231.25\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    20\n        label    \"\"\n        graphics\n        [\n            x    442.59\n            y    497.78\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    21\n        label    \"\"\n        graphics\n        [\n            x    394.17\n            y    748.16\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    22\n        label    \"\"\n        graphics\n        [\n            x    112.22\n            y    537.08\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    23\n        label    \"\"\n        graphics\n        [\n            x    24.72\n            y    292.11\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    24\n        label    \"\"\n        graphics\n        [\n            x    108.49\n            y    860.38\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    25\n        label    \"\"\n        graphics\n        [\n            x    111.41\n            y    525.61\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    26\n        label    \"\"\n        graphics\n        [\n            x    755.45\n            y    813.08\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    27\n        label    \"\"\n        graphics\n        [\n            x    400.02\n            y    13.84\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    28\n        label    \"\"\n        graphics\n        [\n            x    841.15\n            y    364.38\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    29\n        label    \"\"\n        graphics\n        [\n            x    221.90\n            y    83.74\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    30\n        label    \"\"\n        graphics\n        [\n            x    634.56\n            y    374.68\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    31\n        label    \"\"\n        graphics\n        [\n            x    877.94\n            y    32.07\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    32\n        label    \"\"\n        graphics\n        [\n            x    492.29\n            y    865.26\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    33\n        label    \"\"\n        graphics\n        [\n            x    373.93\n            y    236.54\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    34\n        label    \"\"\n        graphics\n        [\n            x    770.38\n            y    465.82\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    35\n        label    \"\"\n        graphics\n        [\n            x    363.02\n            y    579.75\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    36\n        label    \"\"\n        graphics\n        [\n            x    414.81\n            y    745.42\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    37\n        label    \"\"\n        graphics\n        [\n            x    639.54\n            y    399.04\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    38\n        label    \"\"\n        graphics\n        [\n            x    195.82\n            y    732.70\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    39\n        label    \"\"\n        graphics\n        [\n            x    668.11\n            y    325.42\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    40\n        label    \"\"\n        graphics\n        [\n            x    395.07\n            y    281.31\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    41\n        label    \"\"\n        graphics\n        [\n            x    126.10\n            y    645.41\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    42\n        label    \"\"\n        graphics\n        [\n            x    744.29\n            y    235.23\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    43\n        label    \"\"\n        graphics\n        [\n            x    338.32\n            y    848.05\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    44\n        label    \"\"\n        graphics\n        [\n            x    587.33\n            y    110.00\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    45\n        label    \"\"\n        graphics\n        [\n            x    83.12\n            y    417.16\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    46\n        label    \"\"\n        graphics\n        [\n            x    236.98\n            y    375.47\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    47\n        label    \"\"\n        graphics\n        [\n            x    880.07\n            y    754.79\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    48\n        label    \"\"\n        graphics\n        [\n            x    77.86\n            y    368.65\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    49\n        label    \"\"\n        graphics\n        [\n            x    218.46\n            y    35.01\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    50\n        label    \"\"\n        graphics\n        [\n            x    883.34\n            y    343.17\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    51\n        label    \"\"\n        graphics\n        [\n            x    685.27\n            y    29.03\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    52\n        label    \"\"\n        graphics\n        [\n            x    769.08\n            y    743.80\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    53\n        label    \"\"\n        graphics\n        [\n            x    266.43\n            y    434.46\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    54\n        label    \"\"\n        graphics\n        [\n            x    335.52\n            y    367.15\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    55\n        label    \"\"\n        graphics\n        [\n            x    646.18\n            y    866.80\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    56\n        label    \"\"\n        graphics\n        [\n            x    563.53\n            y    552.53\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    57\n        label    \"\"\n        graphics\n        [\n            x    803.21\n            y    561.91\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    58\n        label    \"\"\n        graphics\n        [\n            x    650.67\n            y    814.11\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    59\n        label    \"\"\n        graphics\n        [\n            x    74.39\n            y    205.03\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    60\n        label    \"\"\n        graphics\n        [\n            x    157.61\n            y    895.89\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    61\n        label    \"\"\n        graphics\n        [\n            x    129.28\n            y    135.03\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    62\n        label    \"\"\n        graphics\n        [\n            x    540.07\n            y    343.66\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    63\n        label    \"\"\n        graphics\n        [\n            x    520.18\n            y    179.91\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    64\n        label    \"\"\n        graphics\n        [\n            x    584.51\n            y    750.17\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    65\n        label    \"\"\n        graphics\n        [\n            x    446.57\n            y    65.16\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    66\n        label    \"\"\n        graphics\n        [\n            x    797.55\n            y    856.81\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    67\n        label    \"\"\n        graphics\n        [\n            x    479.33\n            y    808.16\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    68\n        label    \"\"\n        graphics\n        [\n            x    847.00\n            y    193.43\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    69\n        label    \"\"\n        graphics\n        [\n            x    626.47\n            y    706.24\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    70\n        label    \"\"\n        graphics\n        [\n            x    492.20\n            y    345.93\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    71\n        label    \"\"\n        graphics\n        [\n            x    777.43\n            y    99.07\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    72\n        label    \"\"\n        graphics\n        [\n            x    842.30\n            y    626.73\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    73\n        label    \"\"\n        graphics\n        [\n            x    797.08\n            y    558.76\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    74\n        label    \"\"\n        graphics\n        [\n            x    653.47\n            y    648.15\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    75\n        label    \"\"\n        graphics\n        [\n            x    272.21\n            y    816.01\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    76\n        label    \"\"\n        graphics\n        [\n            x    235.74\n            y    46.58\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    77\n        label    \"\"\n        graphics\n        [\n            x    94.07\n            y    600.52\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    78\n        label    \"\"\n        graphics\n        [\n            x    163.73\n            y    174.51\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    79\n        label    \"\"\n        graphics\n        [\n            x    425.27\n            y    694.72\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    80\n        label    \"\"\n        graphics\n        [\n            x    878.62\n            y    381.75\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    81\n        label    \"\"\n        graphics\n        [\n            x    62.20\n            y    639.34\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    82\n        label    \"\"\n        graphics\n        [\n            x    587.12\n            y    37.65\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    83\n        label    \"\"\n        graphics\n        [\n            x    158.94\n            y    469.43\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    84\n        label    \"\"\n        graphics\n        [\n            x    615.34\n            y    248.22\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    85\n        label    \"\"\n        graphics\n        [\n            x    405.36\n            y    864.96\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    86\n        label    \"\"\n        graphics\n        [\n            x    555.28\n            y    742.47\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    87\n        label    \"\"\n        graphics\n        [\n            x    515.29\n            y    776.34\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    88\n        label    \"\"\n        graphics\n        [\n            x    413.69\n            y    182.62\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    89\n        label    \"\"\n        graphics\n        [\n            x    229.56\n            y    867.06\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    90\n        label    \"\"\n        graphics\n        [\n            x    122.23\n            y    782.53\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    91\n        label    \"\"\n        graphics\n        [\n            x    732.12\n            y    512.58\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    92\n        label    \"\"\n        graphics\n        [\n            x    140.31\n            y    684.50\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    93\n        label    \"\"\n        graphics\n        [\n            x    39.66\n            y    161.99\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    94\n        label    \"\"\n        graphics\n        [\n            x    436.72\n            y    510.26\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    95\n        label    \"\"\n        graphics\n        [\n            x    391.13\n            y    758.24\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    96\n        label    \"\"\n        graphics\n        [\n            x    188.37\n            y    74.78\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    97\n        label    \"\"\n        graphics\n        [\n            x    782.42\n            y    159.31\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    98\n        label    \"\"\n        graphics\n        [\n            x    147.44\n            y    51.18\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    99\n        label    \"\"\n        graphics\n        [\n            x    734.24\n            y    329.04\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    edge\n    [\n        source    1\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    10\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    11\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    11\n        target    66\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    12\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    12\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    12\n        target    55\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    13\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    13\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    14\n        target    19\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    14\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    15\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    16\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    17\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    18\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    19\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    2\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    20\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    21\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    22\n        target    19\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    23\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    23\n        target    25\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    24\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    24\n        target    46\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    25\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    25\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    26\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    26\n        target    82\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    27\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    27\n        target    52\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    28\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    28\n        target    26\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    29\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    3\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    3\n        target    59\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    30\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    31\n        target    26\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    32\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    33\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    33\n        target    45\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    34\n        target    33\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    34\n        target    43\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    34\n        target    59\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    35\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    36\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    37\n        target    34\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    38\n        target    45\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    38\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    39\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    4\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    4\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    40\n        target    27\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    41\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    42\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    43\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    44\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    44\n        target    68\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    45\n        target    29\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    46\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    47\n        target    43\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    48\n        target    34\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    48\n        target    85\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    49\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    5\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    50\n        target    20\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    50\n        target    46\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    51\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    52\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    53\n        target    26\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    53\n        target    96\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    54\n        target    20\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    54\n        target    78\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    55\n        target    51\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    55\n        target    53\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    55\n        target    74\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    56\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    56\n        target    39\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    57\n        target    32\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    58\n        target    50\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    59\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    59\n        target    57\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    59\n        target    62\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    6\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    60\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    60\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    61\n        target    43\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    62\n        target    50\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    63\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    64\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    64\n        target    51\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    65\n        target    57\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    66\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    66\n        target    40\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    67\n        target    38\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    68\n        target    38\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    68\n        target    42\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    68\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    69\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    69\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    7\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    70\n        target    42\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    70\n        target    46\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    70\n        target    48\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    71\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    71\n        target    70\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    72\n        target    66\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    73\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    74\n        target    31\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    74\n        target    45\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    75\n        target    20\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    75\n        target    27\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    76\n        target    72\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    77\n        target    37\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    77\n        target    64\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    77\n        target    84\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    78\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    78\n        target    66\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    79\n        target    46\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    8\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    80\n        target    45\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    81\n        target    56\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    82\n        target    45\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    83\n        target    34\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    84\n        target    64\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    85\n        target    38\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    86\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    86\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    87\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    88\n        target    38\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    89\n        target    83\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    9\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    9\n        target    49\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    9\n        target    97\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    90\n        target    66\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    91\n        target    63\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    92\n        target    26\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    93\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    93\n        target    41\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    93\n        target    84\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    93\n        target    87\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    93\n        target    99\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    94\n        target    26\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    95\n        target    54\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    96\n        target    87\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    97\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    97\n        target    50\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    97\n        target    81\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    98\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    99\n        target    29\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    99\n        target    33\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n]\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v100e150.tglf",
    "content": "0 22.000 161.000 30.000 30.000\n1 170.000 218.000 30.000 30.000\n2 119.000 799.000 30.000 30.000\n3 640.000 847.000 30.000 30.000\n4 899.000 529.000 30.000 30.000\n5 624.000 814.000 30.000 30.000\n6 42.000 170.000 30.000 30.000\n7 639.000 400.000 30.000 30.000\n8 19.000 75.000 30.000 30.000\n9 738.000 36.000 30.000 30.000\n10 566.000 685.000 30.000 30.000\n11 149.000 236.000 30.000 30.000\n12 772.000 326.000 30.000 30.000\n13 719.000 663.000 30.000 30.000\n14 584.000 212.000 30.000 30.000\n15 627.000 43.000 30.000 30.000\n16 669.000 800.000 30.000 30.000\n17 859.000 535.000 30.000 30.000\n18 572.000 681.000 30.000 30.000\n19 121.000 231.000 30.000 30.000\n20 442.000 497.000 30.000 30.000\n21 394.000 748.000 30.000 30.000\n22 112.000 537.000 30.000 30.000\n23 24.000 292.000 30.000 30.000\n24 108.000 860.000 30.000 30.000\n25 111.000 525.000 30.000 30.000\n26 755.000 813.000 30.000 30.000\n27 400.000 13.000 30.000 30.000\n28 841.000 364.000 30.000 30.000\n29 221.000 83.000 30.000 30.000\n30 634.000 374.000 30.000 30.000\n31 877.000 32.000 30.000 30.000\n32 492.000 865.000 30.000 30.000\n33 373.000 236.000 30.000 30.000\n34 770.000 465.000 30.000 30.000\n35 363.000 579.000 30.000 30.000\n36 414.000 745.000 30.000 30.000\n37 639.000 399.000 30.000 30.000\n38 195.000 732.000 30.000 30.000\n39 668.000 325.000 30.000 30.000\n40 395.000 281.000 30.000 30.000\n41 126.000 645.000 30.000 30.000\n42 744.000 235.000 30.000 30.000\n43 338.000 848.000 30.000 30.000\n44 587.000 110.000 30.000 30.000\n45 83.000 417.000 30.000 30.000\n46 236.000 375.000 30.000 30.000\n47 880.000 754.000 30.000 30.000\n48 77.000 368.000 30.000 30.000\n49 218.000 35.000 30.000 30.000\n50 883.000 343.000 30.000 30.000\n51 685.000 29.000 30.000 30.000\n52 769.000 743.000 30.000 30.000\n53 266.000 434.000 30.000 30.000\n54 335.000 367.000 30.000 30.000\n55 646.000 866.000 30.000 30.000\n56 563.000 552.000 30.000 30.000\n57 803.000 561.000 30.000 30.000\n58 650.000 814.000 30.000 30.000\n59 74.000 205.000 30.000 30.000\n60 157.000 895.000 30.000 30.000\n61 129.000 135.000 30.000 30.000\n62 540.000 343.000 30.000 30.000\n63 520.000 179.000 30.000 30.000\n64 584.000 750.000 30.000 30.000\n65 446.000 65.000 30.000 30.000\n66 797.000 856.000 30.000 30.000\n67 479.000 808.000 30.000 30.000\n68 847.000 193.000 30.000 30.000\n69 626.000 706.000 30.000 30.000\n70 492.000 345.000 30.000 30.000\n71 777.000 99.000 30.000 30.000\n72 842.000 626.000 30.000 30.000\n73 797.000 558.000 30.000 30.000\n74 653.000 648.000 30.000 30.000\n75 272.000 816.000 30.000 30.000\n76 235.000 46.000 30.000 30.000\n77 94.000 600.000 30.000 30.000\n78 163.000 174.000 30.000 30.000\n79 425.000 694.000 30.000 30.000\n80 878.000 381.000 30.000 30.000\n81 62.000 639.000 30.000 30.000\n82 587.000 37.000 30.000 30.000\n83 158.000 469.000 30.000 30.000\n84 615.000 248.000 30.000 30.000\n85 405.000 864.000 30.000 30.000\n86 555.000 742.000 30.000 30.000\n87 515.000 776.000 30.000 30.000\n88 413.000 182.000 30.000 30.000\n89 229.000 867.000 30.000 30.000\n90 122.000 782.000 30.000 30.000\n91 732.000 512.000 30.000 30.000\n92 140.000 684.000 30.000 30.000\n93 39.000 161.000 30.000 30.000\n94 436.000 510.000 30.000 30.000\n95 391.000 758.000 30.000 30.000\n96 188.000 74.000 30.000 30.000\n97 782.000 159.000 30.000 30.000\n98 147.000 51.000 30.000 30.000\n99 734.000 329.000 30.000 30.000\n#\n52 12\n69 18\n74 45\n27 52\n77 84\n56 13\n26 82\n83 34\n25 17\n59 1\n89 83\n68 38\n90 66\n32 7\n99 29\n31 26\n72 66\n77 64\n23 0\n30 4\n12 2\n55 53\n20 3\n2 1\n66 40\n95 54\n13 9\n91 63\n99 33\n68 42\n40 27\n3 59\n11 66\n75 27\n79 46\n93 84\n39 13\n46 10\n71 2\n65 57\n61 43\n64 14\n22 19\n9 49\n98 14\n71 70\n96 87\n59 62\n70 46\n60 11\n92 26\n24 22\n34 33\n16 1\n47 43\n48 85\n97 50\n51 7\n86 21\n43 12\n67 38\n50 20\n25 14\n88 38\n9 97\n60 15\n55 74\n11 4\n26 23\n33 4\n21 0\n76 72\n19 8\n15 5\n35 23\n64 51\n4 0\n58 50\n53 96\n56 39\n34 59\n28 26\n4 16\n10 5\n45 29\n44 68\n73 2\n80 45\n28 11\n8 6\n59 57\n94 26\n14 19\n9 3\n3 0\n27 5\n37 34\n14 5\n34 43\n1 0\n97 16\n93 21\n6 5\n69 13\n81 56\n36 17\n87 14\n49 0\n24 46\n42 23\n70 48\n97 81\n54 20\n38 45\n44 17\n12 55\n53 26\n18 12\n12 5\n41 12\n93 41\n93 99\n70 42\n62 50\n68 8\n75 20\n86 15\n82 45\n54 78\n48 34\n57 32\n66 4\n93 87\n77 37\n23 25\n5 4\n33 45\n13 12\n78 66\n85 38\n17 10\n50 46\n74 31\n55 51\n29 22\n84 64\n63 21\n7 4\n78 10\n38 5\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v10e10.gml",
    "content": "graph\n[\n    node\n    [\n        id    0\n        label    \"\"\n        graphics\n        [\n            x    35.54\n            y    225.85\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    1\n        label    \"\"\n        graphics\n        [\n            x    179.49\n            y    250.65\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    2\n        label    \"\"\n        graphics\n        [\n            x    56.15\n            y    54.13\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    3\n        label    \"\"\n        graphics\n        [\n            x    233.35\n            y    158.61\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    4\n        label    \"\"\n        graphics\n        [\n            x    129.80\n            y    271.94\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    5\n        label    \"\"\n        graphics\n        [\n            x    217.66\n            y    146.75\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    6\n        label    \"\"\n        graphics\n        [\n            x    277.40\n            y    98.16\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    7\n        label    \"\"\n        graphics\n        [\n            x    211.71\n            y    164.35\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    8\n        label    \"\"\n        graphics\n        [\n            x    168.70\n            y    196.49\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    9\n        label    \"\"\n        graphics\n        [\n            x    267.57\n            y    88.71\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    edge\n    [\n        source    1\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    2\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    3\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    4\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    5\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    6\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    6\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    7\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    8\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    9\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n]\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v10e10.tglf",
    "content": "0 35.000 225.000 30.000 30.000\n1 179.000 250.000 30.000 30.000\n2 56.000 54.000 30.000 30.000\n3 233.000 158.000 30.000 30.000\n4 129.000 271.000 30.000 30.000\n5 217.000 146.000 30.000 30.000\n6 277.000 98.000 30.000 30.000\n7 211.000 164.000 30.000 30.000\n8 168.000 196.000 30.000 30.000\n9 267.000 88.000 30.000 30.000\n#\n1 0\n4 1\n7 1\n2 1\n3 1\n8 3\n6 8\n5 2\n9 8\n6 2\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v10e11.gml",
    "content": "graph\n[\n    node\n    [\n        id    0\n        label    \"\"\n        graphics\n        [\n            x    224.75\n            y    208.24\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    1\n        label    \"\"\n        graphics\n        [\n            x    58.06\n            y    136.71\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    2\n        label    \"\"\n        graphics\n        [\n            x    276.70\n            y    10.07\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    3\n        label    \"\"\n        graphics\n        [\n            x    29.63\n            y    251.12\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    4\n        label    \"\"\n        graphics\n        [\n            x    204.36\n            y    158.84\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    5\n        label    \"\"\n        graphics\n        [\n            x    55.40\n            y    24.91\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    6\n        label    \"\"\n        graphics\n        [\n            x    12.02\n            y    47.46\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    7\n        label    \"\"\n        graphics\n        [\n            x    67.47\n            y    66.28\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    8\n        label    \"\"\n        graphics\n        [\n            x    52.80\n            y    210.33\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    9\n        label    \"\"\n        graphics\n        [\n            x    185.05\n            y    276.41\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    edge\n    [\n        source    1\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    2\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    3\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    4\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    4\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    5\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    6\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    7\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    7\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    8\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    9\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n]\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v10e11.tglf",
    "content": "0 224.000 208.000 30.000 30.000\n1 58.000 136.000 30.000 30.000\n2 276.000 10.000 30.000 30.000\n3 29.000 251.000 30.000 30.000\n4 204.000 158.000 30.000 30.000\n5 55.000 24.000 30.000 30.000\n6 12.000 47.000 30.000 30.000\n7 67.000 66.000 30.000 30.000\n8 52.000 210.000 30.000 30.000\n9 185.000 276.000 30.000 30.000\n#\n5 1\n9 1\n4 8\n3 2\n7 1\n1 0\n8 5\n4 1\n2 1\n6 0\n7 6\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v10e12.gml",
    "content": "graph\n[\n    node\n    [\n        id    0\n        label    \"\"\n        graphics\n        [\n            x    123.42\n            y    213.59\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    1\n        label    \"\"\n        graphics\n        [\n            x    215.19\n            y    253.24\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    2\n        label    \"\"\n        graphics\n        [\n            x    156.43\n            y    199.95\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    3\n        label    \"\"\n        graphics\n        [\n            x    208.05\n            y    208.34\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    4\n        label    \"\"\n        graphics\n        [\n            x    164.03\n            y    34.08\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    5\n        label    \"\"\n        graphics\n        [\n            x    232.78\n            y    80.10\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    6\n        label    \"\"\n        graphics\n        [\n            x    16.88\n            y    232.89\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    7\n        label    \"\"\n        graphics\n        [\n            x    269.60\n            y    58.20\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    8\n        label    \"\"\n        graphics\n        [\n            x    60.41\n            y    15.49\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    9\n        label    \"\"\n        graphics\n        [\n            x    183.98\n            y    42.66\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    edge\n    [\n        source    0\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    1\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    2\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    3\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    4\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    5\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    5\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    6\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    7\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    8\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    9\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    9\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n]\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v10e12.tglf",
    "content": "0 123.000 213.000 30.000 30.000\n1 215.000 253.000 30.000 30.000\n2 156.000 199.000 30.000 30.000\n3 208.000 208.000 30.000 30.000\n4 164.000 34.000 30.000 30.000\n5 232.000 80.000 30.000 30.000\n6 16.000 232.000 30.000 30.000\n7 269.000 58.000 30.000 30.000\n8 60.000 15.000 30.000 30.000\n9 183.000 42.000 30.000 30.000\n#\n1 0\n8 7\n7 0\n2 1\n9 2\n0 2\n4 1\n9 7\n5 2\n3 0\n5 3\n6 2\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v10e13.gml",
    "content": "graph\n[\n    node\n    [\n        id    0\n        label    \"\"\n        graphics\n        [\n            x    281.27\n            y    156.98\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    1\n        label    \"\"\n        graphics\n        [\n            x    126.46\n            y    14.44\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    2\n        label    \"\"\n        graphics\n        [\n            x    1.79\n            y    239.58\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    3\n        label    \"\"\n        graphics\n        [\n            x    129.47\n            y    152.16\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    4\n        label    \"\"\n        graphics\n        [\n            x    28.04\n            y    211.02\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    5\n        label    \"\"\n        graphics\n        [\n            x    130.62\n            y    3.60\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    6\n        label    \"\"\n        graphics\n        [\n            x    41.73\n            y    58.28\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    7\n        label    \"\"\n        graphics\n        [\n            x    6.77\n            y    207.81\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    8\n        label    \"\"\n        graphics\n        [\n            x    99.17\n            y    182.80\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    9\n        label    \"\"\n        graphics\n        [\n            x    88.32\n            y    13.82\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    edge\n    [\n        source    1\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    1\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    2\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    2\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    3\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    3\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    4\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    5\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    6\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    6\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    7\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    8\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    9\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n]\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v10e13.tglf",
    "content": "0 281.000 156.000 30.000 30.000\n1 126.000 14.000 30.000 30.000\n2 1.000 239.000 30.000 30.000\n3 129.000 152.000 30.000 30.000\n4 28.000 211.000 30.000 30.000\n5 130.000 3.000 30.000 30.000\n6 41.000 58.000 30.000 30.000\n7 6.000 207.000 30.000 30.000\n8 99.000 182.000 30.000 30.000\n9 88.000 13.000 30.000 30.000\n#\n5 0\n2 6\n7 6\n6 4\n9 1\n4 2\n1 8\n6 0\n3 9\n1 0\n2 0\n3 1\n8 6\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v10e14.gml",
    "content": "graph\n[\n    node\n    [\n        id    0\n        label    \"\"\n        graphics\n        [\n            x    235.24\n            y    8.06\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    1\n        label    \"\"\n        graphics\n        [\n            x    130.35\n            y    248.88\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    2\n        label    \"\"\n        graphics\n        [\n            x    258.00\n            y    164.77\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    3\n        label    \"\"\n        graphics\n        [\n            x    265.79\n            y    84.21\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    4\n        label    \"\"\n        graphics\n        [\n            x    102.05\n            y    27.73\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    5\n        label    \"\"\n        graphics\n        [\n            x    43.81\n            y    17.96\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    6\n        label    \"\"\n        graphics\n        [\n            x    0.73\n            y    102.79\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    7\n        label    \"\"\n        graphics\n        [\n            x    31.92\n            y    259.93\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    8\n        label    \"\"\n        graphics\n        [\n            x    86.77\n            y    214.10\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    9\n        label    \"\"\n        graphics\n        [\n            x    276.22\n            y    199.56\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    edge\n    [\n        source    1\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    1\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    1\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    2\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    2\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    3\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    3\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    4\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    4\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    5\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    6\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    7\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    8\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    9\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n]\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v10e14.tglf",
    "content": "0 235.000 8.000 30.000 30.000\n1 130.000 248.000 30.000 30.000\n2 258.000 164.000 30.000 30.000\n3 265.000 84.000 30.000 30.000\n4 102.000 27.000 30.000 30.000\n5 43.000 17.000 30.000 30.000\n6 0.000 102.000 30.000 30.000\n7 31.000 259.000 30.000 30.000\n8 86.000 214.000 30.000 30.000\n9 276.000 199.000 30.000 30.000\n#\n3 6\n9 3\n1 0\n1 9\n5 0\n6 5\n8 1\n2 1\n1 3\n7 4\n2 7\n4 3\n3 0\n4 1\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v10e15.gml",
    "content": "graph\n[\n    node\n    [\n        id    0\n        label    \"\"\n        graphics\n        [\n            x    209.42\n            y    153.06\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    1\n        label    \"\"\n        graphics\n        [\n            x    52.89\n            y    272.53\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    2\n        label    \"\"\n        graphics\n        [\n            x    251.69\n            y    224.20\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    3\n        label    \"\"\n        graphics\n        [\n            x    119.46\n            y    86.37\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    4\n        label    \"\"\n        graphics\n        [\n            x    63.59\n            y    26.50\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    5\n        label    \"\"\n        graphics\n        [\n            x    131.24\n            y    168.08\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    6\n        label    \"\"\n        graphics\n        [\n            x    254.64\n            y    215.63\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    7\n        label    \"\"\n        graphics\n        [\n            x    235.84\n            y    186.20\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    8\n        label    \"\"\n        graphics\n        [\n            x    127.23\n            y    100.27\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    9\n        label    \"\"\n        graphics\n        [\n            x    201.34\n            y    130.75\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    edge\n    [\n        source    0\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    1\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    2\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    2\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    2\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    3\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    4\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    4\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    4\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    5\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    6\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    6\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    7\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    8\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    9\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n]\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v10e15.tglf",
    "content": "0 209.000 153.000 30.000 30.000\n1 52.000 272.000 30.000 30.000\n2 251.000 224.000 30.000 30.000\n3 119.000 86.000 30.000 30.000\n4 63.000 26.000 30.000 30.000\n5 131.000 168.000 30.000 30.000\n6 254.000 215.000 30.000 30.000\n7 235.000 186.000 30.000 30.000\n8 127.000 100.000 30.000 30.000\n9 201.000 130.000 30.000 30.000\n#\n6 3\n9 7\n5 4\n2 1\n4 2\n3 0\n8 0\n6 2\n4 1\n0 5\n2 3\n4 0\n2 0\n7 2\n1 0\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v110e110.gml",
    "content": "graph\n[\n    node\n    [\n        id    0\n        label    \"\"\n        graphics\n        [\n            x    456.98\n            y    91.23\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    1\n        label    \"\"\n        graphics\n        [\n            x    817.44\n            y    840.19\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    2\n        label    \"\"\n        graphics\n        [\n            x    149.71\n            y    878.57\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    3\n        label    \"\"\n        graphics\n        [\n            x    178.53\n            y    691.47\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    4\n        label    \"\"\n        graphics\n        [\n            x    386.45\n            y    34.41\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    5\n        label    \"\"\n        graphics\n        [\n            x    649.00\n            y    744.02\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    6\n        label    \"\"\n        graphics\n        [\n            x    480.37\n            y    264.24\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    7\n        label    \"\"\n        graphics\n        [\n            x    577.98\n            y    851.55\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    8\n        label    \"\"\n        graphics\n        [\n            x    312.39\n            y    477.07\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    9\n        label    \"\"\n        graphics\n        [\n            x    582.28\n            y    383.21\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    10\n        label    \"\"\n        graphics\n        [\n            x    301.58\n            y    421.22\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    11\n        label    \"\"\n        graphics\n        [\n            x    401.98\n            y    906.96\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    12\n        label    \"\"\n        graphics\n        [\n            x    432.88\n            y    217.78\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    13\n        label    \"\"\n        graphics\n        [\n            x    263.50\n            y    532.74\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    14\n        label    \"\"\n        graphics\n        [\n            x    550.47\n            y    348.50\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    15\n        label    \"\"\n        graphics\n        [\n            x    385.14\n            y    483.36\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    16\n        label    \"\"\n        graphics\n        [\n            x    5.80\n            y    149.29\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    17\n        label    \"\"\n        graphics\n        [\n            x    408.03\n            y    75.70\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    18\n        label    \"\"\n        graphics\n        [\n            x    139.97\n            y    823.30\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    19\n        label    \"\"\n        graphics\n        [\n            x    163.99\n            y    167.13\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    20\n        label    \"\"\n        graphics\n        [\n            x    343.83\n            y    381.55\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    21\n        label    \"\"\n        graphics\n        [\n            x    643.90\n            y    239.07\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    22\n        label    \"\"\n        graphics\n        [\n            x    666.62\n            y    942.57\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    23\n        label    \"\"\n        graphics\n        [\n            x    274.81\n            y    383.61\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    24\n        label    \"\"\n        graphics\n        [\n            x    762.35\n            y    873.86\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    25\n        label    \"\"\n        graphics\n        [\n            x    157.71\n            y    380.41\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    26\n        label    \"\"\n        graphics\n        [\n            x    124.24\n            y    382.33\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    27\n        label    \"\"\n        graphics\n        [\n            x    811.73\n            y    484.21\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    28\n        label    \"\"\n        graphics\n        [\n            x    356.69\n            y    842.39\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    29\n        label    \"\"\n        graphics\n        [\n            x    802.59\n            y    588.61\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    30\n        label    \"\"\n        graphics\n        [\n            x    525.67\n            y    646.24\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    31\n        label    \"\"\n        graphics\n        [\n            x    308.05\n            y    122.26\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    32\n        label    \"\"\n        graphics\n        [\n            x    25.65\n            y    226.77\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    33\n        label    \"\"\n        graphics\n        [\n            x    753.27\n            y    637.42\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    34\n        label    \"\"\n        graphics\n        [\n            x    388.70\n            y    273.08\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    35\n        label    \"\"\n        graphics\n        [\n            x    729.21\n            y    490.60\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    36\n        label    \"\"\n        graphics\n        [\n            x    943.00\n            y    789.64\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    37\n        label    \"\"\n        graphics\n        [\n            x    345.65\n            y    49.56\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    38\n        label    \"\"\n        graphics\n        [\n            x    714.87\n            y    741.33\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    39\n        label    \"\"\n        graphics\n        [\n            x    355.12\n            y    135.98\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    40\n        label    \"\"\n        graphics\n        [\n            x    392.62\n            y    705.27\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    41\n        label    \"\"\n        graphics\n        [\n            x    34.70\n            y    821.25\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    42\n        label    \"\"\n        graphics\n        [\n            x    300.56\n            y    478.17\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    43\n        label    \"\"\n        graphics\n        [\n            x    812.04\n            y    891.60\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    44\n        label    \"\"\n        graphics\n        [\n            x    437.17\n            y    773.46\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    45\n        label    \"\"\n        graphics\n        [\n            x    817.58\n            y    509.45\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    46\n        label    \"\"\n        graphics\n        [\n            x    625.10\n            y    444.89\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    47\n        label    \"\"\n        graphics\n        [\n            x    65.21\n            y    502.44\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    48\n        label    \"\"\n        graphics\n        [\n            x    375.75\n            y    640.15\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    49\n        label    \"\"\n        graphics\n        [\n            x    82.05\n            y    733.11\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    50\n        label    \"\"\n        graphics\n        [\n            x    151.96\n            y    275.80\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    51\n        label    \"\"\n        graphics\n        [\n            x    346.24\n            y    756.44\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    52\n        label    \"\"\n        graphics\n        [\n            x    842.61\n            y    693.77\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    53\n        label    \"\"\n        graphics\n        [\n            x    299.39\n            y    183.97\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    54\n        label    \"\"\n        graphics\n        [\n            x    325.04\n            y    309.61\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    55\n        label    \"\"\n        graphics\n        [\n            x    434.50\n            y    306.42\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    56\n        label    \"\"\n        graphics\n        [\n            x    759.52\n            y    459.03\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    57\n        label    \"\"\n        graphics\n        [\n            x    160.13\n            y    253.77\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    58\n        label    \"\"\n        graphics\n        [\n            x    366.87\n            y    917.98\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    59\n        label    \"\"\n        graphics\n        [\n            x    58.77\n            y    59.56\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    60\n        label    \"\"\n        graphics\n        [\n            x    673.13\n            y    785.97\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    61\n        label    \"\"\n        graphics\n        [\n            x    821.71\n            y    723.93\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    62\n        label    \"\"\n        graphics\n        [\n            x    672.31\n            y    894.11\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    63\n        label    \"\"\n        graphics\n        [\n            x    39.13\n            y    327.90\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    64\n        label    \"\"\n        graphics\n        [\n            x    351.71\n            y    738.49\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    65\n        label    \"\"\n        graphics\n        [\n            x    213.83\n            y    705.90\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    66\n        label    \"\"\n        graphics\n        [\n            x    764.39\n            y    112.41\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    67\n        label    \"\"\n        graphics\n        [\n            x    727.41\n            y    811.40\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    68\n        label    \"\"\n        graphics\n        [\n            x    743.77\n            y    38.47\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    69\n        label    \"\"\n        graphics\n        [\n            x    869.76\n            y    452.89\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    70\n        label    \"\"\n        graphics\n        [\n            x    894.88\n            y    466.73\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    71\n        label    \"\"\n        graphics\n        [\n            x    618.69\n            y    108.45\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    72\n        label    \"\"\n        graphics\n        [\n            x    246.65\n            y    746.90\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    73\n        label    \"\"\n        graphics\n        [\n            x    527.87\n            y    647.98\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    74\n        label    \"\"\n        graphics\n        [\n            x    554.12\n            y    564.62\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    75\n        label    \"\"\n        graphics\n        [\n            x    138.56\n            y    642.93\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    76\n        label    \"\"\n        graphics\n        [\n            x    224.61\n            y    712.40\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    77\n        label    \"\"\n        graphics\n        [\n            x    703.79\n            y    662.98\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    78\n        label    \"\"\n        graphics\n        [\n            x    190.68\n            y    246.09\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    79\n        label    \"\"\n        graphics\n        [\n            x    159.97\n            y    624.04\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    80\n        label    \"\"\n        graphics\n        [\n            x    619.52\n            y    235.14\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    81\n        label    \"\"\n        graphics\n        [\n            x    587.37\n            y    361.31\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    82\n        label    \"\"\n        graphics\n        [\n            x    935.57\n            y    409.07\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    83\n        label    \"\"\n        graphics\n        [\n            x    824.93\n            y    768.12\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    84\n        label    \"\"\n        graphics\n        [\n            x    720.80\n            y    493.98\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    85\n        label    \"\"\n        graphics\n        [\n            x    266.14\n            y    308.57\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    86\n        label    \"\"\n        graphics\n        [\n            x    51.80\n            y    664.68\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    87\n        label    \"\"\n        graphics\n        [\n            x    928.84\n            y    864.21\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    88\n        label    \"\"\n        graphics\n        [\n            x    409.00\n            y    792.18\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    89\n        label    \"\"\n        graphics\n        [\n            x    810.25\n            y    646.71\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    90\n        label    \"\"\n        graphics\n        [\n            x    714.98\n            y    96.63\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    91\n        label    \"\"\n        graphics\n        [\n            x    420.11\n            y    501.79\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    92\n        label    \"\"\n        graphics\n        [\n            x    181.37\n            y    555.70\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    93\n        label    \"\"\n        graphics\n        [\n            x    157.50\n            y    521.34\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    94\n        label    \"\"\n        graphics\n        [\n            x    354.47\n            y    865.88\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    95\n        label    \"\"\n        graphics\n        [\n            x    868.27\n            y    87.62\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    96\n        label    \"\"\n        graphics\n        [\n            x    141.84\n            y    605.74\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    97\n        label    \"\"\n        graphics\n        [\n            x    29.24\n            y    671.16\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    98\n        label    \"\"\n        graphics\n        [\n            x    761.90\n            y    24.45\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    99\n        label    \"\"\n        graphics\n        [\n            x    312.92\n            y    707.37\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    100\n        label    \"\"\n        graphics\n        [\n            x    282.97\n            y    247.76\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    101\n        label    \"\"\n        graphics\n        [\n            x    294.23\n            y    454.86\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    102\n        label    \"\"\n        graphics\n        [\n            x    638.43\n            y    729.66\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    103\n        label    \"\"\n        graphics\n        [\n            x    407.62\n            y    102.02\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    104\n        label    \"\"\n        graphics\n        [\n            x    101.42\n            y    836.09\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    105\n        label    \"\"\n        graphics\n        [\n            x    124.21\n            y    428.74\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    106\n        label    \"\"\n        graphics\n        [\n            x    763.77\n            y    41.55\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    107\n        label    \"\"\n        graphics\n        [\n            x    808.57\n            y    394.34\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    108\n        label    \"\"\n        graphics\n        [\n            x    243.59\n            y    673.23\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    109\n        label    \"\"\n        graphics\n        [\n            x    473.88\n            y    184.55\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    edge\n    [\n        source    1\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    10\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    100\n        target    85\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    101\n        target    26\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    102\n        target    72\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    103\n        target    29\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    104\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    105\n        target    90\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    106\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    107\n        target    91\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    108\n        target    65\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    109\n        target    28\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    11\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    12\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    13\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    14\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    15\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    16\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    17\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    18\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    19\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    2\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    20\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    21\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    22\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    23\n        target    19\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    24\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    25\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    26\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    27\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    28\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    29\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    3\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    30\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    31\n        target    30\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    32\n        target    31\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    33\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    34\n        target    27\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    35\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    36\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    37\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    38\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    39\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    4\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    40\n        target    39\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    41\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    42\n        target    36\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    42\n        target    97\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    43\n        target    38\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    44\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    45\n        target    27\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    46\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    47\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    48\n        target    27\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    49\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    5\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    50\n        target    43\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    51\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    52\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    53\n        target    42\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    54\n        target    37\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    55\n        target    38\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    56\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    57\n        target    52\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    58\n        target    51\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    59\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    6\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    60\n        target    48\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    61\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    62\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    63\n        target    49\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    64\n        target    26\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    65\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    66\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    67\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    68\n        target    64\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    69\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    7\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    70\n        target    30\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    71\n        target    63\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    72\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    73\n        target    32\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    74\n        target    34\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    75\n        target    25\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    76\n        target    56\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    77\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    78\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    79\n        target    71\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    8\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    80\n        target    38\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    81\n        target    33\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    82\n        target    42\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    83\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    84\n        target    59\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    85\n        target    43\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    86\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    87\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    88\n        target    30\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    89\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    9\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    90\n        target    62\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    91\n        target    71\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    92\n        target    70\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    93\n        target    19\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    94\n        target    83\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    95\n        target    26\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    96\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    97\n        target    65\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    98\n        target    53\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    99\n        target    69\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n]\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v110e110.tglf",
    "content": "0 456.000 91.000 30.000 30.000\n1 817.000 840.000 30.000 30.000\n2 149.000 878.000 30.000 30.000\n3 178.000 691.000 30.000 30.000\n4 386.000 34.000 30.000 30.000\n5 649.000 744.000 30.000 30.000\n6 480.000 264.000 30.000 30.000\n7 577.000 851.000 30.000 30.000\n8 312.000 477.000 30.000 30.000\n9 582.000 383.000 30.000 30.000\n10 301.000 421.000 30.000 30.000\n11 401.000 906.000 30.000 30.000\n12 432.000 217.000 30.000 30.000\n13 263.000 532.000 30.000 30.000\n14 550.000 348.000 30.000 30.000\n15 385.000 483.000 30.000 30.000\n16 5.000 149.000 30.000 30.000\n17 408.000 75.000 30.000 30.000\n18 139.000 823.000 30.000 30.000\n19 163.000 167.000 30.000 30.000\n20 343.000 381.000 30.000 30.000\n21 643.000 239.000 30.000 30.000\n22 666.000 942.000 30.000 30.000\n23 274.000 383.000 30.000 30.000\n24 762.000 873.000 30.000 30.000\n25 157.000 380.000 30.000 30.000\n26 124.000 382.000 30.000 30.000\n27 811.000 484.000 30.000 30.000\n28 356.000 842.000 30.000 30.000\n29 802.000 588.000 30.000 30.000\n30 525.000 646.000 30.000 30.000\n31 308.000 122.000 30.000 30.000\n32 25.000 226.000 30.000 30.000\n33 753.000 637.000 30.000 30.000\n34 388.000 273.000 30.000 30.000\n35 729.000 490.000 30.000 30.000\n36 943.000 789.000 30.000 30.000\n37 345.000 49.000 30.000 30.000\n38 714.000 741.000 30.000 30.000\n39 355.000 135.000 30.000 30.000\n40 392.000 705.000 30.000 30.000\n41 34.000 821.000 30.000 30.000\n42 300.000 478.000 30.000 30.000\n43 812.000 891.000 30.000 30.000\n44 437.000 773.000 30.000 30.000\n45 817.000 509.000 30.000 30.000\n46 625.000 444.000 30.000 30.000\n47 65.000 502.000 30.000 30.000\n48 375.000 640.000 30.000 30.000\n49 82.000 733.000 30.000 30.000\n50 151.000 275.000 30.000 30.000\n51 346.000 756.000 30.000 30.000\n52 842.000 693.000 30.000 30.000\n53 299.000 183.000 30.000 30.000\n54 325.000 309.000 30.000 30.000\n55 434.000 306.000 30.000 30.000\n56 759.000 459.000 30.000 30.000\n57 160.000 253.000 30.000 30.000\n58 366.000 917.000 30.000 30.000\n59 58.000 59.000 30.000 30.000\n60 673.000 785.000 30.000 30.000\n61 821.000 723.000 30.000 30.000\n62 672.000 894.000 30.000 30.000\n63 39.000 327.000 30.000 30.000\n64 351.000 738.000 30.000 30.000\n65 213.000 705.000 30.000 30.000\n66 764.000 112.000 30.000 30.000\n67 727.000 811.000 30.000 30.000\n68 743.000 38.000 30.000 30.000\n69 869.000 452.000 30.000 30.000\n70 894.000 466.000 30.000 30.000\n71 618.000 108.000 30.000 30.000\n72 246.000 746.000 30.000 30.000\n73 527.000 647.000 30.000 30.000\n74 554.000 564.000 30.000 30.000\n75 138.000 642.000 30.000 30.000\n76 224.000 712.000 30.000 30.000\n77 703.000 662.000 30.000 30.000\n78 190.000 246.000 30.000 30.000\n79 159.000 624.000 30.000 30.000\n80 619.000 235.000 30.000 30.000\n81 587.000 361.000 30.000 30.000\n82 935.000 409.000 30.000 30.000\n83 824.000 768.000 30.000 30.000\n84 720.000 493.000 30.000 30.000\n85 266.000 308.000 30.000 30.000\n86 51.000 664.000 30.000 30.000\n87 928.000 864.000 30.000 30.000\n88 409.000 792.000 30.000 30.000\n89 810.000 646.000 30.000 30.000\n90 714.000 96.000 30.000 30.000\n91 420.000 501.000 30.000 30.000\n92 181.000 555.000 30.000 30.000\n93 157.000 521.000 30.000 30.000\n94 354.000 865.000 30.000 30.000\n95 868.000 87.000 30.000 30.000\n96 141.000 605.000 30.000 30.000\n97 29.000 671.000 30.000 30.000\n98 761.000 24.000 30.000 30.000\n99 312.000 707.000 30.000 30.000\n100 282.000 247.000 30.000 30.000\n101 294.000 454.000 30.000 30.000\n102 638.000 729.000 30.000 30.000\n103 407.000 102.000 30.000 30.000\n104 101.000 836.000 30.000 30.000\n105 124.000 428.000 30.000 30.000\n106 763.000 41.000 30.000 30.000\n107 808.000 394.000 30.000 30.000\n108 243.000 673.000 30.000 30.000\n109 473.000 184.000 30.000 30.000\n#\n88 30\n64 26\n69 3\n39 8\n12 2\n102 72\n52 14\n66 4\n109 28\n59 2\n13 7\n47 23\n24 15\n37 7\n106 7\n78 4\n86 4\n93 19\n58 51\n15 4\n2 0\n19 8\n30 13\n56 2\n21 11\n46 14\n103 29\n8 4\n11 6\n25 21\n79 71\n84 59\n104 23\n60 48\n33 1\n90 62\n92 70\n62 13\n20 16\n32 31\n35 23\n23 19\n36 0\n76 56\n10 6\n44 5\n94 83\n49 12\n70 30\n82 42\n77 5\n42 36\n6 1\n45 27\n40 39\n108 65\n14 9\n9 3\n29 23\n71 63\n1 0\n81 33\n68 64\n42 97\n43 38\n85 43\n41 16\n72 18\n67 9\n16 13\n7 0\n91 71\n105 90\n96 3\n63 49\n57 52\n95 26\n89 10\n51 22\n101 26\n3 0\n18 7\n55 38\n99 69\n61 18\n53 42\n17 8\n54 37\n38 16\n34 27\n80 38\n83 23\n73 32\n28 18\n74 34\n107 91\n50 43\n48 27\n98 53\n65 4\n26 8\n97 65\n5 4\n31 30\n22 21\n87 14\n27 9\n100 85\n75 25\n4 3\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v110e121.gml",
    "content": "graph\n[\n    node\n    [\n        id    0\n        label    \"\"\n        graphics\n        [\n            x    308.18\n            y    530.72\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    1\n        label    \"\"\n        graphics\n        [\n            x    519.90\n            y    431.84\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    2\n        label    \"\"\n        graphics\n        [\n            x    924.11\n            y    812.38\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    3\n        label    \"\"\n        graphics\n        [\n            x    25.12\n            y    249.91\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    4\n        label    \"\"\n        graphics\n        [\n            x    243.00\n            y    631.52\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    5\n        label    \"\"\n        graphics\n        [\n            x    45.21\n            y    337.44\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    6\n        label    \"\"\n        graphics\n        [\n            x    230.60\n            y    116.95\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    7\n        label    \"\"\n        graphics\n        [\n            x    4.42\n            y    705.62\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    8\n        label    \"\"\n        graphics\n        [\n            x    782.50\n            y    703.50\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    9\n        label    \"\"\n        graphics\n        [\n            x    362.19\n            y    719.18\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    10\n        label    \"\"\n        graphics\n        [\n            x    680.66\n            y    811.20\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    11\n        label    \"\"\n        graphics\n        [\n            x    853.95\n            y    399.90\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    12\n        label    \"\"\n        graphics\n        [\n            x    275.38\n            y    644.59\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    13\n        label    \"\"\n        graphics\n        [\n            x    588.20\n            y    504.80\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    14\n        label    \"\"\n        graphics\n        [\n            x    676.91\n            y    106.67\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    15\n        label    \"\"\n        graphics\n        [\n            x    643.37\n            y    675.92\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    16\n        label    \"\"\n        graphics\n        [\n            x    559.13\n            y    593.27\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    17\n        label    \"\"\n        graphics\n        [\n            x    576.71\n            y    375.45\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    18\n        label    \"\"\n        graphics\n        [\n            x    359.99\n            y    416.53\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    19\n        label    \"\"\n        graphics\n        [\n            x    451.76\n            y    900.40\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    20\n        label    \"\"\n        graphics\n        [\n            x    6.61\n            y    841.30\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    21\n        label    \"\"\n        graphics\n        [\n            x    733.80\n            y    791.59\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    22\n        label    \"\"\n        graphics\n        [\n            x    63.34\n            y    235.43\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    23\n        label    \"\"\n        graphics\n        [\n            x    604.82\n            y    307.73\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    24\n        label    \"\"\n        graphics\n        [\n            x    702.05\n            y    506.40\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    25\n        label    \"\"\n        graphics\n        [\n            x    622.40\n            y    352.87\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    26\n        label    \"\"\n        graphics\n        [\n            x    435.24\n            y    526.97\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    27\n        label    \"\"\n        graphics\n        [\n            x    398.62\n            y    631.17\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    28\n        label    \"\"\n        graphics\n        [\n            x    382.28\n            y    934.66\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    29\n        label    \"\"\n        graphics\n        [\n            x    321.09\n            y    444.85\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    30\n        label    \"\"\n        graphics\n        [\n            x    466.49\n            y    378.54\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    31\n        label    \"\"\n        graphics\n        [\n            x    257.51\n            y    264.78\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    32\n        label    \"\"\n        graphics\n        [\n            x    926.73\n            y    931.10\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    33\n        label    \"\"\n        graphics\n        [\n            x    654.46\n            y    127.78\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    34\n        label    \"\"\n        graphics\n        [\n            x    190.31\n            y    179.06\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    35\n        label    \"\"\n        graphics\n        [\n            x    443.72\n            y    865.12\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    36\n        label    \"\"\n        graphics\n        [\n            x    735.54\n            y    807.23\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    37\n        label    \"\"\n        graphics\n        [\n            x    919.05\n            y    241.76\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    38\n        label    \"\"\n        graphics\n        [\n            x    885.25\n            y    298.93\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    39\n        label    \"\"\n        graphics\n        [\n            x    775.99\n            y    777.70\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    40\n        label    \"\"\n        graphics\n        [\n            x    836.68\n            y    679.11\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    41\n        label    \"\"\n        graphics\n        [\n            x    658.21\n            y    684.23\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    42\n        label    \"\"\n        graphics\n        [\n            x    56.26\n            y    419.63\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    43\n        label    \"\"\n        graphics\n        [\n            x    830.08\n            y    259.29\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    44\n        label    \"\"\n        graphics\n        [\n            x    57.22\n            y    634.83\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    45\n        label    \"\"\n        graphics\n        [\n            x    519.48\n            y    791.22\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    46\n        label    \"\"\n        graphics\n        [\n            x    597.67\n            y    507.53\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    47\n        label    \"\"\n        graphics\n        [\n            x    399.17\n            y    481.33\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    48\n        label    \"\"\n        graphics\n        [\n            x    276.87\n            y    386.83\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    49\n        label    \"\"\n        graphics\n        [\n            x    657.75\n            y    903.42\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    50\n        label    \"\"\n        graphics\n        [\n            x    62.48\n            y    712.94\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    51\n        label    \"\"\n        graphics\n        [\n            x    747.62\n            y    465.85\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    52\n        label    \"\"\n        graphics\n        [\n            x    138.88\n            y    686.71\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    53\n        label    \"\"\n        graphics\n        [\n            x    171.88\n            y    387.81\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    54\n        label    \"\"\n        graphics\n        [\n            x    470.09\n            y    887.84\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    55\n        label    \"\"\n        graphics\n        [\n            x    324.10\n            y    42.33\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    56\n        label    \"\"\n        graphics\n        [\n            x    570.06\n            y    818.90\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    57\n        label    \"\"\n        graphics\n        [\n            x    787.59\n            y    335.56\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    58\n        label    \"\"\n        graphics\n        [\n            x    554.93\n            y    938.34\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    59\n        label    \"\"\n        graphics\n        [\n            x    728.32\n            y    642.28\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    60\n        label    \"\"\n        graphics\n        [\n            x    832.77\n            y    383.77\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    61\n        label    \"\"\n        graphics\n        [\n            x    931.49\n            y    27.61\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    62\n        label    \"\"\n        graphics\n        [\n            x    567.40\n            y    572.95\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    63\n        label    \"\"\n        graphics\n        [\n            x    559.87\n            y    824.93\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    64\n        label    \"\"\n        graphics\n        [\n            x    74.56\n            y    847.15\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    65\n        label    \"\"\n        graphics\n        [\n            x    922.47\n            y    776.48\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    66\n        label    \"\"\n        graphics\n        [\n            x    907.56\n            y    225.89\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    67\n        label    \"\"\n        graphics\n        [\n            x    706.52\n            y    417.14\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    68\n        label    \"\"\n        graphics\n        [\n            x    725.10\n            y    206.92\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    69\n        label    \"\"\n        graphics\n        [\n            x    382.98\n            y    198.20\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    70\n        label    \"\"\n        graphics\n        [\n            x    843.32\n            y    904.10\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    71\n        label    \"\"\n        graphics\n        [\n            x    405.27\n            y    50.53\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    72\n        label    \"\"\n        graphics\n        [\n            x    230.75\n            y    4.07\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    73\n        label    \"\"\n        graphics\n        [\n            x    117.62\n            y    904.98\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    74\n        label    \"\"\n        graphics\n        [\n            x    497.66\n            y    134.58\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    75\n        label    \"\"\n        graphics\n        [\n            x    340.35\n            y    500.60\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    76\n        label    \"\"\n        graphics\n        [\n            x    774.89\n            y    384.56\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    77\n        label    \"\"\n        graphics\n        [\n            x    123.36\n            y    441.84\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    78\n        label    \"\"\n        graphics\n        [\n            x    617.04\n            y    168.30\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    79\n        label    \"\"\n        graphics\n        [\n            x    836.59\n            y    52.87\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    80\n        label    \"\"\n        graphics\n        [\n            x    562.45\n            y    188.81\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    81\n        label    \"\"\n        graphics\n        [\n            x    219.61\n            y    321.54\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    82\n        label    \"\"\n        graphics\n        [\n            x    144.89\n            y    210.45\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    83\n        label    \"\"\n        graphics\n        [\n            x    58.02\n            y    437.43\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    84\n        label    \"\"\n        graphics\n        [\n            x    917.23\n            y    467.57\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    85\n        label    \"\"\n        graphics\n        [\n            x    764.51\n            y    287.49\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    86\n        label    \"\"\n        graphics\n        [\n            x    774.41\n            y    326.67\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    87\n        label    \"\"\n        graphics\n        [\n            x    301.01\n            y    224.24\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    88\n        label    \"\"\n        graphics\n        [\n            x    892.94\n            y    295.09\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    89\n        label    \"\"\n        graphics\n        [\n            x    776.25\n            y    20.21\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    90\n        label    \"\"\n        graphics\n        [\n            x    728.06\n            y    215.56\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    91\n        label    \"\"\n        graphics\n        [\n            x    844.10\n            y    235.21\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    92\n        label    \"\"\n        graphics\n        [\n            x    294.43\n            y    765.06\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    93\n        label    \"\"\n        graphics\n        [\n            x    195.27\n            y    662.19\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    94\n        label    \"\"\n        graphics\n        [\n            x    798.76\n            y    872.11\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    95\n        label    \"\"\n        graphics\n        [\n            x    563.90\n            y    166.22\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    96\n        label    \"\"\n        graphics\n        [\n            x    372.43\n            y    145.71\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    97\n        label    \"\"\n        graphics\n        [\n            x    756.24\n            y    863.66\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    98\n        label    \"\"\n        graphics\n        [\n            x    322.57\n            y    36.41\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    99\n        label    \"\"\n        graphics\n        [\n            x    193.87\n            y    104.87\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    100\n        label    \"\"\n        graphics\n        [\n            x    63.98\n            y    294.90\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    101\n        label    \"\"\n        graphics\n        [\n            x    19.66\n            y    252.46\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    102\n        label    \"\"\n        graphics\n        [\n            x    406.14\n            y    454.83\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    103\n        label    \"\"\n        graphics\n        [\n            x    607.77\n            y    167.46\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    104\n        label    \"\"\n        graphics\n        [\n            x    648.49\n            y    320.89\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    105\n        label    \"\"\n        graphics\n        [\n            x    93.69\n            y    588.41\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    106\n        label    \"\"\n        graphics\n        [\n            x    664.32\n            y    775.43\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    107\n        label    \"\"\n        graphics\n        [\n            x    45.41\n            y    131.75\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    108\n        label    \"\"\n        graphics\n        [\n            x    135.87\n            y    78.63\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    109\n        label    \"\"\n        graphics\n        [\n            x    554.43\n            y    201.29\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    edge\n    [\n        source    1\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    10\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    100\n        target    68\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    101\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    101\n        target    28\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    102\n        target    28\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    103\n        target    26\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    104\n        target    79\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    105\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    106\n        target    36\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    106\n        target    58\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    107\n        target    61\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    108\n        target    99\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    109\n        target    43\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    11\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    12\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    13\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    14\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    15\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    16\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    16\n        target    34\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    17\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    18\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    19\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    2\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    20\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    21\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    22\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    23\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    24\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    25\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    25\n        target    43\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    26\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    27\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    28\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    29\n        target    25\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    3\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    30\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    31\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    32\n        target    30\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    33\n        target    28\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    34\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    35\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    36\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    37\n        target    31\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    38\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    39\n        target    38\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    4\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    4\n        target    53\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    40\n        target    38\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    41\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    42\n        target    35\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    43\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    44\n        target    42\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    45\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    45\n        target    86\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    46\n        target    45\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    47\n        target    20\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    48\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    49\n        target    108\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    49\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    5\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    50\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    51\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    52\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    53\n        target    47\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    54\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    55\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    55\n        target    46\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    56\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    56\n        target    96\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    57\n        target    104\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    57\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    58\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    59\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    6\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    60\n        target    58\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    61\n        target    32\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    62\n        target    45\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    63\n        target    32\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    64\n        target    20\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    65\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    66\n        target    24\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    67\n        target    24\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    68\n        target    34\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    69\n        target    26\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    7\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    70\n        target    60\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    71\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    71\n        target    72\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    72\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    73\n        target    27\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    74\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    75\n        target    29\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    76\n        target    19\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    77\n        target    27\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    78\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    79\n        target    24\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    8\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    80\n        target    65\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    81\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    82\n        target    26\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    83\n        target    53\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    84\n        target    63\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    85\n        target    51\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    86\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    87\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    87\n        target    32\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    88\n        target    81\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    89\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    9\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    90\n        target    44\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    91\n        target    38\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    92\n        target    26\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    93\n        target    68\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    94\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    95\n        target    33\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    96\n        target    95\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    97\n        target    39\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    98\n        target    66\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    99\n        target    83\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n]\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v110e121.tglf",
    "content": "0 308.000 530.000 30.000 30.000\n1 519.000 431.000 30.000 30.000\n2 924.000 812.000 30.000 30.000\n3 25.000 249.000 30.000 30.000\n4 243.000 631.000 30.000 30.000\n5 45.000 337.000 30.000 30.000\n6 230.000 116.000 30.000 30.000\n7 4.000 705.000 30.000 30.000\n8 782.000 703.000 30.000 30.000\n9 362.000 719.000 30.000 30.000\n10 680.000 811.000 30.000 30.000\n11 853.000 399.000 30.000 30.000\n12 275.000 644.000 30.000 30.000\n13 588.000 504.000 30.000 30.000\n14 676.000 106.000 30.000 30.000\n15 643.000 675.000 30.000 30.000\n16 559.000 593.000 30.000 30.000\n17 576.000 375.000 30.000 30.000\n18 359.000 416.000 30.000 30.000\n19 451.000 900.000 30.000 30.000\n20 6.000 841.000 30.000 30.000\n21 733.000 791.000 30.000 30.000\n22 63.000 235.000 30.000 30.000\n23 604.000 307.000 30.000 30.000\n24 702.000 506.000 30.000 30.000\n25 622.000 352.000 30.000 30.000\n26 435.000 526.000 30.000 30.000\n27 398.000 631.000 30.000 30.000\n28 382.000 934.000 30.000 30.000\n29 321.000 444.000 30.000 30.000\n30 466.000 378.000 30.000 30.000\n31 257.000 264.000 30.000 30.000\n32 926.000 931.000 30.000 30.000\n33 654.000 127.000 30.000 30.000\n34 190.000 179.000 30.000 30.000\n35 443.000 865.000 30.000 30.000\n36 735.000 807.000 30.000 30.000\n37 919.000 241.000 30.000 30.000\n38 885.000 298.000 30.000 30.000\n39 775.000 777.000 30.000 30.000\n40 836.000 679.000 30.000 30.000\n41 658.000 684.000 30.000 30.000\n42 56.000 419.000 30.000 30.000\n43 830.000 259.000 30.000 30.000\n44 57.000 634.000 30.000 30.000\n45 519.000 791.000 30.000 30.000\n46 597.000 507.000 30.000 30.000\n47 399.000 481.000 30.000 30.000\n48 276.000 386.000 30.000 30.000\n49 657.000 903.000 30.000 30.000\n50 62.000 712.000 30.000 30.000\n51 747.000 465.000 30.000 30.000\n52 138.000 686.000 30.000 30.000\n53 171.000 387.000 30.000 30.000\n54 470.000 887.000 30.000 30.000\n55 324.000 42.000 30.000 30.000\n56 570.000 818.000 30.000 30.000\n57 787.000 335.000 30.000 30.000\n58 554.000 938.000 30.000 30.000\n59 728.000 642.000 30.000 30.000\n60 832.000 383.000 30.000 30.000\n61 931.000 27.000 30.000 30.000\n62 567.000 572.000 30.000 30.000\n63 559.000 824.000 30.000 30.000\n64 74.000 847.000 30.000 30.000\n65 922.000 776.000 30.000 30.000\n66 907.000 225.000 30.000 30.000\n67 706.000 417.000 30.000 30.000\n68 725.000 206.000 30.000 30.000\n69 382.000 198.000 30.000 30.000\n70 843.000 904.000 30.000 30.000\n71 405.000 50.000 30.000 30.000\n72 230.000 4.000 30.000 30.000\n73 117.000 904.000 30.000 30.000\n74 497.000 134.000 30.000 30.000\n75 340.000 500.000 30.000 30.000\n76 774.000 384.000 30.000 30.000\n77 123.000 441.000 30.000 30.000\n78 617.000 168.000 30.000 30.000\n79 836.000 52.000 30.000 30.000\n80 562.000 188.000 30.000 30.000\n81 219.000 321.000 30.000 30.000\n82 144.000 210.000 30.000 30.000\n83 58.000 437.000 30.000 30.000\n84 917.000 467.000 30.000 30.000\n85 764.000 287.000 30.000 30.000\n86 774.000 326.000 30.000 30.000\n87 301.000 224.000 30.000 30.000\n88 892.000 295.000 30.000 30.000\n89 776.000 20.000 30.000 30.000\n90 728.000 215.000 30.000 30.000\n91 844.000 235.000 30.000 30.000\n92 294.000 765.000 30.000 30.000\n93 195.000 662.000 30.000 30.000\n94 798.000 872.000 30.000 30.000\n95 563.000 166.000 30.000 30.000\n96 372.000 145.000 30.000 30.000\n97 756.000 863.000 30.000 30.000\n98 322.000 36.000 30.000 30.000\n99 193.000 104.000 30.000 30.000\n100 63.000 294.000 30.000 30.000\n101 19.000 252.000 30.000 30.000\n102 406.000 454.000 30.000 30.000\n103 607.000 167.000 30.000 30.000\n104 648.000 320.000 30.000 30.000\n105 93.000 588.000 30.000 30.000\n106 664.000 775.000 30.000 30.000\n107 45.000 131.000 30.000 30.000\n108 135.000 78.000 30.000 30.000\n109 554.000 201.000 30.000 30.000\n#\n7 2\n1 0\n16 0\n9 3\n22 16\n41 0\n105 9\n31 17\n2 0\n3 0\n60 58\n10 1\n35 11\n4 53\n87 32\n89 23\n21 14\n101 10\n68 34\n49 14\n25 4\n67 24\n38 9\n8 1\n99 83\n65 12\n61 32\n17 2\n79 24\n59 1\n4 3\n104 79\n5 2\n42 35\n84 63\n28 2\n34 9\n50 8\n55 18\n45 18\n64 20\n91 38\n27 18\n33 28\n74 22\n108 99\n92 26\n14 3\n66 24\n16 34\n62 45\n97 39\n72 21\n23 4\n11 10\n90 44\n44 42\n82 26\n54 1\n56 96\n12 4\n69 26\n19 8\n76 19\n13 2\n40 38\n52 22\n96 95\n80 65\n107 61\n63 32\n39 38\n47 20\n103 26\n43 14\n58 6\n53 47\n102 28\n98 66\n86 4\n106 58\n37 31\n81 5\n77 27\n55 46\n49 108\n71 7\n94 12\n6 3\n30 14\n71 72\n106 36\n25 43\n46 45\n73 27\n15 3\n87 15\n100 68\n24 17\n32 30\n57 104\n95 33\n56 21\n20 15\n26 8\n88 81\n45 86\n57 22\n36 9\n83 53\n93 68\n75 29\n70 60\n101 28\n109 43\n51 10\n78 22\n18 15\n48 16\n29 25\n85 51\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v110e132.gml",
    "content": "graph\n[\n    node\n    [\n        id    0\n        label    \"\"\n        graphics\n        [\n            x    121.12\n            y    530.24\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    1\n        label    \"\"\n        graphics\n        [\n            x    669.77\n            y    544.36\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    2\n        label    \"\"\n        graphics\n        [\n            x    84.62\n            y    696.95\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    3\n        label    \"\"\n        graphics\n        [\n            x    465.82\n            y    641.15\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    4\n        label    \"\"\n        graphics\n        [\n            x    841.53\n            y    268.83\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    5\n        label    \"\"\n        graphics\n        [\n            x    222.14\n            y    410.20\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    6\n        label    \"\"\n        graphics\n        [\n            x    659.80\n            y    842.63\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    7\n        label    \"\"\n        graphics\n        [\n            x    864.09\n            y    387.74\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    8\n        label    \"\"\n        graphics\n        [\n            x    219.69\n            y    577.02\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    9\n        label    \"\"\n        graphics\n        [\n            x    448.04\n            y    714.89\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    10\n        label    \"\"\n        graphics\n        [\n            x    31.72\n            y    559.64\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    11\n        label    \"\"\n        graphics\n        [\n            x    228.13\n            y    279.60\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    12\n        label    \"\"\n        graphics\n        [\n            x    823.30\n            y    683.49\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    13\n        label    \"\"\n        graphics\n        [\n            x    626.61\n            y    693.05\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    14\n        label    \"\"\n        graphics\n        [\n            x    782.56\n            y    579.47\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    15\n        label    \"\"\n        graphics\n        [\n            x    477.97\n            y    541.54\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    16\n        label    \"\"\n        graphics\n        [\n            x    261.75\n            y    833.67\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    17\n        label    \"\"\n        graphics\n        [\n            x    798.43\n            y    71.25\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    18\n        label    \"\"\n        graphics\n        [\n            x    894.32\n            y    487.50\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    19\n        label    \"\"\n        graphics\n        [\n            x    846.02\n            y    607.42\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    20\n        label    \"\"\n        graphics\n        [\n            x    634.78\n            y    447.90\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    21\n        label    \"\"\n        graphics\n        [\n            x    694.32\n            y    624.59\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    22\n        label    \"\"\n        graphics\n        [\n            x    401.23\n            y    49.75\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    23\n        label    \"\"\n        graphics\n        [\n            x    874.86\n            y    119.47\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    24\n        label    \"\"\n        graphics\n        [\n            x    803.02\n            y    573.01\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    25\n        label    \"\"\n        graphics\n        [\n            x    570.83\n            y    536.97\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    26\n        label    \"\"\n        graphics\n        [\n            x    272.76\n            y    480.65\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    27\n        label    \"\"\n        graphics\n        [\n            x    619.72\n            y    722.32\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    28\n        label    \"\"\n        graphics\n        [\n            x    268.69\n            y    415.83\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    29\n        label    \"\"\n        graphics\n        [\n            x    874.93\n            y    271.21\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    30\n        label    \"\"\n        graphics\n        [\n            x    175.81\n            y    285.79\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    31\n        label    \"\"\n        graphics\n        [\n            x    456.41\n            y    319.23\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    32\n        label    \"\"\n        graphics\n        [\n            x    473.36\n            y    500.30\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    33\n        label    \"\"\n        graphics\n        [\n            x    130.57\n            y    439.99\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    34\n        label    \"\"\n        graphics\n        [\n            x    893.91\n            y    479.00\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    35\n        label    \"\"\n        graphics\n        [\n            x    499.58\n            y    260.77\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    36\n        label    \"\"\n        graphics\n        [\n            x    351.27\n            y    415.98\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    37\n        label    \"\"\n        graphics\n        [\n            x    284.94\n            y    785.75\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    38\n        label    \"\"\n        graphics\n        [\n            x    368.16\n            y    615.54\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    39\n        label    \"\"\n        graphics\n        [\n            x    741.80\n            y    137.61\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    40\n        label    \"\"\n        graphics\n        [\n            x    383.21\n            y    904.77\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    41\n        label    \"\"\n        graphics\n        [\n            x    882.66\n            y    596.11\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    42\n        label    \"\"\n        graphics\n        [\n            x    137.44\n            y    450.94\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    43\n        label    \"\"\n        graphics\n        [\n            x    839.51\n            y    702.74\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    44\n        label    \"\"\n        graphics\n        [\n            x    196.68\n            y    860.40\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    45\n        label    \"\"\n        graphics\n        [\n            x    860.98\n            y    278.02\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    46\n        label    \"\"\n        graphics\n        [\n            x    304.59\n            y    565.79\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    47\n        label    \"\"\n        graphics\n        [\n            x    180.89\n            y    510.93\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    48\n        label    \"\"\n        graphics\n        [\n            x    658.53\n            y    782.18\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    49\n        label    \"\"\n        graphics\n        [\n            x    378.39\n            y    760.33\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    50\n        label    \"\"\n        graphics\n        [\n            x    42.77\n            y    495.71\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    51\n        label    \"\"\n        graphics\n        [\n            x    869.49\n            y    18.72\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    52\n        label    \"\"\n        graphics\n        [\n            x    806.82\n            y    811.39\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    53\n        label    \"\"\n        graphics\n        [\n            x    699.87\n            y    797.08\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    54\n        label    \"\"\n        graphics\n        [\n            x    5.57\n            y    923.67\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    55\n        label    \"\"\n        graphics\n        [\n            x    249.79\n            y    532.15\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    56\n        label    \"\"\n        graphics\n        [\n            x    938.74\n            y    572.17\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    57\n        label    \"\"\n        graphics\n        [\n            x    154.13\n            y    461.45\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    58\n        label    \"\"\n        graphics\n        [\n            x    602.65\n            y    863.99\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    59\n        label    \"\"\n        graphics\n        [\n            x    377.78\n            y    636.67\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    60\n        label    \"\"\n        graphics\n        [\n            x    627.33\n            y    423.32\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    61\n        label    \"\"\n        graphics\n        [\n            x    464.22\n            y    430.23\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    62\n        label    \"\"\n        graphics\n        [\n            x    62.46\n            y    884.45\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    63\n        label    \"\"\n        graphics\n        [\n            x    351.98\n            y    437.40\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    64\n        label    \"\"\n        graphics\n        [\n            x    839.21\n            y    246.60\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    65\n        label    \"\"\n        graphics\n        [\n            x    310.05\n            y    636.03\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    66\n        label    \"\"\n        graphics\n        [\n            x    840.37\n            y    511.78\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    67\n        label    \"\"\n        graphics\n        [\n            x    303.22\n            y    0.24\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    68\n        label    \"\"\n        graphics\n        [\n            x    695.74\n            y    406.14\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    69\n        label    \"\"\n        graphics\n        [\n            x    79.00\n            y    607.84\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    70\n        label    \"\"\n        graphics\n        [\n            x    426.04\n            y    93.17\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    71\n        label    \"\"\n        graphics\n        [\n            x    349.31\n            y    703.04\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    72\n        label    \"\"\n        graphics\n        [\n            x    24.69\n            y    928.75\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    73\n        label    \"\"\n        graphics\n        [\n            x    642.14\n            y    590.07\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    74\n        label    \"\"\n        graphics\n        [\n            x    682.19\n            y    197.95\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    75\n        label    \"\"\n        graphics\n        [\n            x    722.78\n            y    72.67\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    76\n        label    \"\"\n        graphics\n        [\n            x    28.10\n            y    167.12\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    77\n        label    \"\"\n        graphics\n        [\n            x    5.90\n            y    491.74\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    78\n        label    \"\"\n        graphics\n        [\n            x    706.66\n            y    378.68\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    79\n        label    \"\"\n        graphics\n        [\n            x    126.00\n            y    514.10\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    80\n        label    \"\"\n        graphics\n        [\n            x    331.72\n            y    210.73\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    81\n        label    \"\"\n        graphics\n        [\n            x    931.89\n            y    605.36\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    82\n        label    \"\"\n        graphics\n        [\n            x    791.25\n            y    414.03\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    83\n        label    \"\"\n        graphics\n        [\n            x    827.87\n            y    814.78\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    84\n        label    \"\"\n        graphics\n        [\n            x    794.95\n            y    321.06\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    85\n        label    \"\"\n        graphics\n        [\n            x    630.86\n            y    729.05\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    86\n        label    \"\"\n        graphics\n        [\n            x    315.84\n            y    48.98\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    87\n        label    \"\"\n        graphics\n        [\n            x    510.49\n            y    488.23\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    88\n        label    \"\"\n        graphics\n        [\n            x    52.71\n            y    78.54\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    89\n        label    \"\"\n        graphics\n        [\n            x    325.56\n            y    266.15\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    90\n        label    \"\"\n        graphics\n        [\n            x    772.98\n            y    39.94\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    91\n        label    \"\"\n        graphics\n        [\n            x    110.06\n            y    42.99\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    92\n        label    \"\"\n        graphics\n        [\n            x    659.14\n            y    503.24\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    93\n        label    \"\"\n        graphics\n        [\n            x    895.73\n            y    379.46\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    94\n        label    \"\"\n        graphics\n        [\n            x    571.20\n            y    245.19\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    95\n        label    \"\"\n        graphics\n        [\n            x    228.43\n            y    290.13\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    96\n        label    \"\"\n        graphics\n        [\n            x    643.70\n            y    309.29\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    97\n        label    \"\"\n        graphics\n        [\n            x    608.18\n            y    317.53\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    98\n        label    \"\"\n        graphics\n        [\n            x    613.43\n            y    451.86\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    99\n        label    \"\"\n        graphics\n        [\n            x    247.78\n            y    920.70\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    100\n        label    \"\"\n        graphics\n        [\n            x    736.29\n            y    676.28\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    101\n        label    \"\"\n        graphics\n        [\n            x    415.52\n            y    201.70\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    102\n        label    \"\"\n        graphics\n        [\n            x    637.92\n            y    646.16\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    103\n        label    \"\"\n        graphics\n        [\n            x    27.01\n            y    434.27\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    104\n        label    \"\"\n        graphics\n        [\n            x    226.99\n            y    523.71\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    105\n        label    \"\"\n        graphics\n        [\n            x    479.62\n            y    397.32\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    106\n        label    \"\"\n        graphics\n        [\n            x    477.04\n            y    472.48\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    107\n        label    \"\"\n        graphics\n        [\n            x    627.05\n            y    231.22\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    108\n        label    \"\"\n        graphics\n        [\n            x    402.41\n            y    847.15\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    109\n        label    \"\"\n        graphics\n        [\n            x    228.91\n            y    52.64\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    edge\n    [\n        source    1\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    1\n        target    102\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    1\n        target    47\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    10\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    100\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    101\n        target    87\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    102\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    102\n        target    27\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    103\n        target    101\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    103\n        target    70\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    104\n        target    74\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    105\n        target    63\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    105\n        target    87\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    106\n        target    81\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    107\n        target    34\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    108\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    109\n        target    89\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    11\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    12\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    13\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    14\n        target    107\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    14\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    15\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    16\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    17\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    18\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    19\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    2\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    20\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    21\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    21\n        target    90\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    22\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    23\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    24\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    24\n        target    67\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    25\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    26\n        target    25\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    27\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    28\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    29\n        target    100\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    29\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    3\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    30\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    31\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    31\n        target    48\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    31\n        target    67\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    32\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    33\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    34\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    35\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    36\n        target    24\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    37\n        target    29\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    38\n        target    30\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    39\n        target    36\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    4\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    40\n        target    20\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    41\n        target    36\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    42\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    43\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    43\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    43\n        target    41\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    44\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    45\n        target    43\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    46\n        target    39\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    47\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    48\n        target    24\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    49\n        target    28\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    49\n        target    29\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    5\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    50\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    51\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    52\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    53\n        target    28\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    54\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    55\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    55\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    55\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    56\n        target    25\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    57\n        target    40\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    58\n        target    57\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    59\n        target    30\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    6\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    60\n        target    43\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    61\n        target    103\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    61\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    62\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    63\n        target    26\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    64\n        target    42\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    65\n        target    60\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    66\n        target    63\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    67\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    68\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    69\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    7\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    70\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    71\n        target    27\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    71\n        target    93\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    72\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    73\n        target    20\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    73\n        target    51\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    74\n        target    66\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    75\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    76\n        target    63\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    77\n        target    30\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    78\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    79\n        target    46\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    8\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    80\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    81\n        target    53\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    82\n        target    49\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    82\n        target    64\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    83\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    84\n        target    54\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    85\n        target    105\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    85\n        target    42\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    86\n        target    78\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    87\n        target    44\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    88\n        target    68\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    89\n        target    86\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    9\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    90\n        target    48\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    90\n        target    93\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    91\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    92\n        target    53\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    93\n        target    87\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    94\n        target    65\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    95\n        target    84\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    96\n        target    109\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    96\n        target    27\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    97\n        target    35\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    98\n        target    66\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    99\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n]\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v110e132.tglf",
    "content": "0 121.000 530.000 30.000 30.000\n1 669.000 544.000 30.000 30.000\n2 84.000 696.000 30.000 30.000\n3 465.000 641.000 30.000 30.000\n4 841.000 268.000 30.000 30.000\n5 222.000 410.000 30.000 30.000\n6 659.000 842.000 30.000 30.000\n7 864.000 387.000 30.000 30.000\n8 219.000 577.000 30.000 30.000\n9 448.000 714.000 30.000 30.000\n10 31.000 559.000 30.000 30.000\n11 228.000 279.000 30.000 30.000\n12 823.000 683.000 30.000 30.000\n13 626.000 693.000 30.000 30.000\n14 782.000 579.000 30.000 30.000\n15 477.000 541.000 30.000 30.000\n16 261.000 833.000 30.000 30.000\n17 798.000 71.000 30.000 30.000\n18 894.000 487.000 30.000 30.000\n19 846.000 607.000 30.000 30.000\n20 634.000 447.000 30.000 30.000\n21 694.000 624.000 30.000 30.000\n22 401.000 49.000 30.000 30.000\n23 874.000 119.000 30.000 30.000\n24 803.000 573.000 30.000 30.000\n25 570.000 536.000 30.000 30.000\n26 272.000 480.000 30.000 30.000\n27 619.000 722.000 30.000 30.000\n28 268.000 415.000 30.000 30.000\n29 874.000 271.000 30.000 30.000\n30 175.000 285.000 30.000 30.000\n31 456.000 319.000 30.000 30.000\n32 473.000 500.000 30.000 30.000\n33 130.000 439.000 30.000 30.000\n34 893.000 479.000 30.000 30.000\n35 499.000 260.000 30.000 30.000\n36 351.000 415.000 30.000 30.000\n37 284.000 785.000 30.000 30.000\n38 368.000 615.000 30.000 30.000\n39 741.000 137.000 30.000 30.000\n40 383.000 904.000 30.000 30.000\n41 882.000 596.000 30.000 30.000\n42 137.000 450.000 30.000 30.000\n43 839.000 702.000 30.000 30.000\n44 196.000 860.000 30.000 30.000\n45 860.000 278.000 30.000 30.000\n46 304.000 565.000 30.000 30.000\n47 180.000 510.000 30.000 30.000\n48 658.000 782.000 30.000 30.000\n49 378.000 760.000 30.000 30.000\n50 42.000 495.000 30.000 30.000\n51 869.000 18.000 30.000 30.000\n52 806.000 811.000 30.000 30.000\n53 699.000 797.000 30.000 30.000\n54 5.000 923.000 30.000 30.000\n55 249.000 532.000 30.000 30.000\n56 938.000 572.000 30.000 30.000\n57 154.000 461.000 30.000 30.000\n58 602.000 863.000 30.000 30.000\n59 377.000 636.000 30.000 30.000\n60 627.000 423.000 30.000 30.000\n61 464.000 430.000 30.000 30.000\n62 62.000 884.000 30.000 30.000\n63 351.000 437.000 30.000 30.000\n64 839.000 246.000 30.000 30.000\n65 310.000 636.000 30.000 30.000\n66 840.000 511.000 30.000 30.000\n67 303.000 0.000 30.000 30.000\n68 695.000 406.000 30.000 30.000\n69 79.000 607.000 30.000 30.000\n70 426.000 93.000 30.000 30.000\n71 349.000 703.000 30.000 30.000\n72 24.000 928.000 30.000 30.000\n73 642.000 590.000 30.000 30.000\n74 682.000 197.000 30.000 30.000\n75 722.000 72.000 30.000 30.000\n76 28.000 167.000 30.000 30.000\n77 5.000 491.000 30.000 30.000\n78 706.000 378.000 30.000 30.000\n79 126.000 514.000 30.000 30.000\n80 331.000 210.000 30.000 30.000\n81 931.000 605.000 30.000 30.000\n82 791.000 414.000 30.000 30.000\n83 827.000 814.000 30.000 30.000\n84 794.000 321.000 30.000 30.000\n85 630.000 729.000 30.000 30.000\n86 315.000 48.000 30.000 30.000\n87 510.000 488.000 30.000 30.000\n88 52.000 78.000 30.000 30.000\n89 325.000 266.000 30.000 30.000\n90 772.000 39.000 30.000 30.000\n91 110.000 42.000 30.000 30.000\n92 659.000 503.000 30.000 30.000\n93 895.000 379.000 30.000 30.000\n94 571.000 245.000 30.000 30.000\n95 228.000 290.000 30.000 30.000\n96 643.000 309.000 30.000 30.000\n97 608.000 317.000 30.000 30.000\n98 613.000 451.000 30.000 30.000\n99 247.000 920.000 30.000 30.000\n100 736.000 676.000 30.000 30.000\n101 415.000 201.000 30.000 30.000\n102 637.000 646.000 30.000 30.000\n103 27.000 434.000 30.000 30.000\n104 226.000 523.000 30.000 30.000\n105 479.000 397.000 30.000 30.000\n106 477.000 472.000 30.000 30.000\n107 627.000 231.000 30.000 30.000\n108 402.000 847.000 30.000 30.000\n109 228.000 52.000 30.000 30.000\n#\n31 2\n21 11\n49 28\n45 43\n73 51\n30 21\n55 5\n78 3\n76 63\n88 68\n106 81\n81 53\n29 100\n103 70\n79 46\n31 48\n93 87\n84 54\n96 109\n65 60\n97 35\n43 4\n52 0\n101 87\n48 24\n23 14\n27 9\n56 25\n33 1\n28 16\n43 41\n19 12\n47 16\n102 15\n94 65\n108 11\n40 20\n69 16\n91 23\n85 105\n51 18\n82 64\n1 102\n90 48\n82 49\n92 53\n42 5\n80 2\n62 3\n7 2\n8 1\n85 42\n90 93\n14 7\n21 90\n20 14\n22 3\n16 4\n2 0\n9 2\n38 30\n75 0\n71 93\n86 78\n3 0\n43 22\n63 26\n10 6\n24 67\n107 34\n44 11\n18 7\n104 74\n83 1\n1 47\n14 107\n74 66\n105 63\n54 22\n70 12\n31 67\n49 29\n102 27\n34 10\n37 29\n58 57\n73 20\n36 24\n32 7\n66 63\n25 5\n61 103\n41 36\n46 39\n55 21\n29 13\n98 66\n57 40\n17 0\n96 27\n64 42\n67 0\n77 30\n72 0\n12 6\n26 25\n89 86\n15 14\n35 7\n95 84\n60 43\n109 89\n103 101\n71 27\n100 15\n87 44\n59 30\n4 0\n99 18\n68 0\n24 10\n1 0\n5 2\n53 28\n61 12\n39 36\n6 4\n55 16\n11 3\n105 87\n50 22\n13 9\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v110e143.gml",
    "content": "graph\n[\n    node\n    [\n        id    0\n        label    \"\"\n        graphics\n        [\n            x    896.49\n            y    743.94\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    1\n        label    \"\"\n        graphics\n        [\n            x    498.26\n            y    403.88\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    2\n        label    \"\"\n        graphics\n        [\n            x    213.76\n            y    840.23\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    3\n        label    \"\"\n        graphics\n        [\n            x    856.88\n            y    158.37\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    4\n        label    \"\"\n        graphics\n        [\n            x    20.01\n            y    219.30\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    5\n        label    \"\"\n        graphics\n        [\n            x    449.89\n            y    140.00\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    6\n        label    \"\"\n        graphics\n        [\n            x    631.27\n            y    577.07\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    7\n        label    \"\"\n        graphics\n        [\n            x    388.45\n            y    943.34\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    8\n        label    \"\"\n        graphics\n        [\n            x    624.45\n            y    81.66\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    9\n        label    \"\"\n        graphics\n        [\n            x    394.93\n            y    516.98\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    10\n        label    \"\"\n        graphics\n        [\n            x    846.20\n            y    434.85\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    11\n        label    \"\"\n        graphics\n        [\n            x    492.66\n            y    118.17\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    12\n        label    \"\"\n        graphics\n        [\n            x    370.38\n            y    97.89\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    13\n        label    \"\"\n        graphics\n        [\n            x    615.58\n            y    94.42\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    14\n        label    \"\"\n        graphics\n        [\n            x    226.77\n            y    606.19\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    15\n        label    \"\"\n        graphics\n        [\n            x    751.35\n            y    251.20\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    16\n        label    \"\"\n        graphics\n        [\n            x    506.07\n            y    570.92\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    17\n        label    \"\"\n        graphics\n        [\n            x    114.22\n            y    153.29\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    18\n        label    \"\"\n        graphics\n        [\n            x    240.37\n            y    629.52\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    19\n        label    \"\"\n        graphics\n        [\n            x    819.21\n            y    409.34\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    20\n        label    \"\"\n        graphics\n        [\n            x    937.48\n            y    149.67\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    21\n        label    \"\"\n        graphics\n        [\n            x    725.05\n            y    921.86\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    22\n        label    \"\"\n        graphics\n        [\n            x    718.22\n            y    907.88\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    23\n        label    \"\"\n        graphics\n        [\n            x    163.32\n            y    818.12\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    24\n        label    \"\"\n        graphics\n        [\n            x    674.80\n            y    23.92\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    25\n        label    \"\"\n        graphics\n        [\n            x    633.27\n            y    860.25\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    26\n        label    \"\"\n        graphics\n        [\n            x    753.47\n            y    430.81\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    27\n        label    \"\"\n        graphics\n        [\n            x    724.21\n            y    737.09\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    28\n        label    \"\"\n        graphics\n        [\n            x    235.81\n            y    299.63\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    29\n        label    \"\"\n        graphics\n        [\n            x    151.62\n            y    834.46\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    30\n        label    \"\"\n        graphics\n        [\n            x    641.92\n            y    723.70\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    31\n        label    \"\"\n        graphics\n        [\n            x    131.49\n            y    579.10\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    32\n        label    \"\"\n        graphics\n        [\n            x    166.29\n            y    119.33\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    33\n        label    \"\"\n        graphics\n        [\n            x    98.77\n            y    64.58\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    34\n        label    \"\"\n        graphics\n        [\n            x    306.98\n            y    580.30\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    35\n        label    \"\"\n        graphics\n        [\n            x    355.97\n            y    383.08\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    36\n        label    \"\"\n        graphics\n        [\n            x    859.84\n            y    830.92\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    37\n        label    \"\"\n        graphics\n        [\n            x    563.32\n            y    129.69\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    38\n        label    \"\"\n        graphics\n        [\n            x    701.03\n            y    328.61\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    39\n        label    \"\"\n        graphics\n        [\n            x    628.25\n            y    798.73\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    40\n        label    \"\"\n        graphics\n        [\n            x    432.94\n            y    8.55\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    41\n        label    \"\"\n        graphics\n        [\n            x    211.62\n            y    51.14\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    42\n        label    \"\"\n        graphics\n        [\n            x    802.61\n            y    448.65\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    43\n        label    \"\"\n        graphics\n        [\n            x    534.55\n            y    608.80\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    44\n        label    \"\"\n        graphics\n        [\n            x    243.22\n            y    235.20\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    45\n        label    \"\"\n        graphics\n        [\n            x    742.94\n            y    64.61\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    46\n        label    \"\"\n        graphics\n        [\n            x    137.63\n            y    29.68\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    47\n        label    \"\"\n        graphics\n        [\n            x    607.45\n            y    270.75\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    48\n        label    \"\"\n        graphics\n        [\n            x    286.17\n            y    776.89\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    49\n        label    \"\"\n        graphics\n        [\n            x    63.96\n            y    105.30\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    50\n        label    \"\"\n        graphics\n        [\n            x    791.87\n            y    701.50\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    51\n        label    \"\"\n        graphics\n        [\n            x    27.96\n            y    122.78\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    52\n        label    \"\"\n        graphics\n        [\n            x    798.34\n            y    699.51\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    53\n        label    \"\"\n        graphics\n        [\n            x    912.19\n            y    786.91\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    54\n        label    \"\"\n        graphics\n        [\n            x    70.91\n            y    23.40\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    55\n        label    \"\"\n        graphics\n        [\n            x    189.45\n            y    615.86\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    56\n        label    \"\"\n        graphics\n        [\n            x    324.52\n            y    163.57\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    57\n        label    \"\"\n        graphics\n        [\n            x    642.78\n            y    565.67\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    58\n        label    \"\"\n        graphics\n        [\n            x    174.45\n            y    697.29\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    59\n        label    \"\"\n        graphics\n        [\n            x    56.48\n            y    632.93\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    60\n        label    \"\"\n        graphics\n        [\n            x    794.90\n            y    626.23\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    61\n        label    \"\"\n        graphics\n        [\n            x    301.08\n            y    835.33\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    62\n        label    \"\"\n        graphics\n        [\n            x    203.08\n            y    734.67\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    63\n        label    \"\"\n        graphics\n        [\n            x    264.11\n            y    837.64\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    64\n        label    \"\"\n        graphics\n        [\n            x    578.00\n            y    675.95\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    65\n        label    \"\"\n        graphics\n        [\n            x    71.96\n            y    581.29\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    66\n        label    \"\"\n        graphics\n        [\n            x    372.45\n            y    681.93\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    67\n        label    \"\"\n        graphics\n        [\n            x    826.60\n            y    834.12\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    68\n        label    \"\"\n        graphics\n        [\n            x    34.65\n            y    716.39\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    69\n        label    \"\"\n        graphics\n        [\n            x    774.61\n            y    328.80\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    70\n        label    \"\"\n        graphics\n        [\n            x    916.44\n            y    117.24\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    71\n        label    \"\"\n        graphics\n        [\n            x    934.64\n            y    650.48\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    72\n        label    \"\"\n        graphics\n        [\n            x    693.78\n            y    390.56\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    73\n        label    \"\"\n        graphics\n        [\n            x    819.06\n            y    561.56\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    74\n        label    \"\"\n        graphics\n        [\n            x    627.89\n            y    386.79\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    75\n        label    \"\"\n        graphics\n        [\n            x    311.47\n            y    679.72\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    76\n        label    \"\"\n        graphics\n        [\n            x    633.10\n            y    168.18\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    77\n        label    \"\"\n        graphics\n        [\n            x    71.59\n            y    426.39\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    78\n        label    \"\"\n        graphics\n        [\n            x    465.23\n            y    776.36\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    79\n        label    \"\"\n        graphics\n        [\n            x    132.95\n            y    582.76\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    80\n        label    \"\"\n        graphics\n        [\n            x    103.04\n            y    67.23\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    81\n        label    \"\"\n        graphics\n        [\n            x    319.58\n            y    284.08\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    82\n        label    \"\"\n        graphics\n        [\n            x    107.86\n            y    200.14\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    83\n        label    \"\"\n        graphics\n        [\n            x    863.53\n            y    799.37\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    84\n        label    \"\"\n        graphics\n        [\n            x    749.64\n            y    582.68\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    85\n        label    \"\"\n        graphics\n        [\n            x    788.15\n            y    676.00\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    86\n        label    \"\"\n        graphics\n        [\n            x    914.44\n            y    875.44\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    87\n        label    \"\"\n        graphics\n        [\n            x    414.33\n            y    171.10\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    88\n        label    \"\"\n        graphics\n        [\n            x    98.66\n            y    194.68\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    89\n        label    \"\"\n        graphics\n        [\n            x    128.74\n            y    732.08\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    90\n        label    \"\"\n        graphics\n        [\n            x    460.36\n            y    304.28\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    91\n        label    \"\"\n        graphics\n        [\n            x    938.86\n            y    121.06\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    92\n        label    \"\"\n        graphics\n        [\n            x    535.31\n            y    566.60\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    93\n        label    \"\"\n        graphics\n        [\n            x    506.92\n            y    353.61\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    94\n        label    \"\"\n        graphics\n        [\n            x    421.94\n            y    473.93\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    95\n        label    \"\"\n        graphics\n        [\n            x    527.74\n            y    268.55\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    96\n        label    \"\"\n        graphics\n        [\n            x    653.38\n            y    899.72\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    97\n        label    \"\"\n        graphics\n        [\n            x    527.11\n            y    27.28\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    98\n        label    \"\"\n        graphics\n        [\n            x    599.61\n            y    10.60\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    99\n        label    \"\"\n        graphics\n        [\n            x    291.27\n            y    579.75\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    100\n        label    \"\"\n        graphics\n        [\n            x    46.62\n            y    490.59\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    101\n        label    \"\"\n        graphics\n        [\n            x    494.94\n            y    328.40\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    102\n        label    \"\"\n        graphics\n        [\n            x    30.58\n            y    458.07\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    103\n        label    \"\"\n        graphics\n        [\n            x    461.91\n            y    446.42\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    104\n        label    \"\"\n        graphics\n        [\n            x    383.95\n            y    503.96\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    105\n        label    \"\"\n        graphics\n        [\n            x    796.52\n            y    865.36\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    106\n        label    \"\"\n        graphics\n        [\n            x    347.39\n            y    791.83\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    107\n        label    \"\"\n        graphics\n        [\n            x    559.87\n            y    241.85\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    108\n        label    \"\"\n        graphics\n        [\n            x    339.50\n            y    232.31\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    109\n        label    \"\"\n        graphics\n        [\n            x    477.04\n            y    943.03\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    edge\n    [\n        source    0\n        target    75\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    1\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    1\n        target    32\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    10\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    100\n        target    47\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    100\n        target    87\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    100\n        target    91\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    101\n        target    19\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    101\n        target    96\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    102\n        target    65\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    103\n        target    37\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    104\n        target    95\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    105\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    106\n        target    24\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    107\n        target    82\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    108\n        target    86\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    109\n        target    53\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    11\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    12\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    13\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    14\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    14\n        target    103\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    14\n        target    71\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    15\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    16\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    17\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    18\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    18\n        target    94\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    19\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    2\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    2\n        target    58\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    20\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    21\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    22\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    23\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    24\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    25\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    25\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    26\n        target    25\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    27\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    27\n        target    49\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    27\n        target    76\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    28\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    28\n        target    39\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    29\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    3\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    30\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    30\n        target    94\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    31\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    32\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    32\n        target    83\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    33\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    34\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    35\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    35\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    36\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    37\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    38\n        target    26\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    39\n        target    100\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    39\n        target    25\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    4\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    40\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    41\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    42\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    43\n        target    33\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    44\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    45\n        target    27\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    45\n        target    32\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    46\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    47\n        target    20\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    48\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    49\n        target    24\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    49\n        target    45\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    5\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    50\n        target    42\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    51\n        target    109\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    51\n        target    37\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    52\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    53\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    53\n        target    36\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    54\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    55\n        target    46\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    56\n        target    47\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    56\n        target    90\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    57\n        target    30\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    58\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    59\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    6\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    60\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    61\n        target    54\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    62\n        target    28\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    62\n        target    43\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    63\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    64\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    64\n        target    75\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    65\n        target    60\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    66\n        target    35\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    66\n        target    62\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    67\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    68\n        target    65\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    69\n        target    27\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    7\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    70\n        target    68\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    71\n        target    61\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    72\n        target    42\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    73\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    74\n        target    55\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    75\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    76\n        target    63\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    76\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    77\n        target    50\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    78\n        target    63\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    78\n        target    90\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    79\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    79\n        target    44\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    8\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    80\n        target    73\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    81\n        target    46\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    81\n        target    67\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    82\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    83\n        target    72\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    84\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    85\n        target    74\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    85\n        target    82\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    86\n        target    109\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    86\n        target    44\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    87\n        target    60\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    87\n        target    95\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    88\n        target    77\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    89\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    89\n        target    94\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    9\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    90\n        target    64\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    91\n        target    88\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    92\n        target    35\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    93\n        target    41\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    94\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    95\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    96\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    97\n        target    24\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    98\n        target    72\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    99\n        target    44\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    99\n        target    47\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n]\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v110e143.tglf",
    "content": "0 896.000 743.000 30.000 30.000\n1 498.000 403.000 30.000 30.000\n2 213.000 840.000 30.000 30.000\n3 856.000 158.000 30.000 30.000\n4 20.000 219.000 30.000 30.000\n5 449.000 140.000 30.000 30.000\n6 631.000 577.000 30.000 30.000\n7 388.000 943.000 30.000 30.000\n8 624.000 81.000 30.000 30.000\n9 394.000 516.000 30.000 30.000\n10 846.000 434.000 30.000 30.000\n11 492.000 118.000 30.000 30.000\n12 370.000 97.000 30.000 30.000\n13 615.000 94.000 30.000 30.000\n14 226.000 606.000 30.000 30.000\n15 751.000 251.000 30.000 30.000\n16 506.000 570.000 30.000 30.000\n17 114.000 153.000 30.000 30.000\n18 240.000 629.000 30.000 30.000\n19 819.000 409.000 30.000 30.000\n20 937.000 149.000 30.000 30.000\n21 725.000 921.000 30.000 30.000\n22 718.000 907.000 30.000 30.000\n23 163.000 818.000 30.000 30.000\n24 674.000 23.000 30.000 30.000\n25 633.000 860.000 30.000 30.000\n26 753.000 430.000 30.000 30.000\n27 724.000 737.000 30.000 30.000\n28 235.000 299.000 30.000 30.000\n29 151.000 834.000 30.000 30.000\n30 641.000 723.000 30.000 30.000\n31 131.000 579.000 30.000 30.000\n32 166.000 119.000 30.000 30.000\n33 98.000 64.000 30.000 30.000\n34 306.000 580.000 30.000 30.000\n35 355.000 383.000 30.000 30.000\n36 859.000 830.000 30.000 30.000\n37 563.000 129.000 30.000 30.000\n38 701.000 328.000 30.000 30.000\n39 628.000 798.000 30.000 30.000\n40 432.000 8.000 30.000 30.000\n41 211.000 51.000 30.000 30.000\n42 802.000 448.000 30.000 30.000\n43 534.000 608.000 30.000 30.000\n44 243.000 235.000 30.000 30.000\n45 742.000 64.000 30.000 30.000\n46 137.000 29.000 30.000 30.000\n47 607.000 270.000 30.000 30.000\n48 286.000 776.000 30.000 30.000\n49 63.000 105.000 30.000 30.000\n50 791.000 701.000 30.000 30.000\n51 27.000 122.000 30.000 30.000\n52 798.000 699.000 30.000 30.000\n53 912.000 786.000 30.000 30.000\n54 70.000 23.000 30.000 30.000\n55 189.000 615.000 30.000 30.000\n56 324.000 163.000 30.000 30.000\n57 642.000 565.000 30.000 30.000\n58 174.000 697.000 30.000 30.000\n59 56.000 632.000 30.000 30.000\n60 794.000 626.000 30.000 30.000\n61 301.000 835.000 30.000 30.000\n62 203.000 734.000 30.000 30.000\n63 264.000 837.000 30.000 30.000\n64 578.000 675.000 30.000 30.000\n65 71.000 581.000 30.000 30.000\n66 372.000 681.000 30.000 30.000\n67 826.000 834.000 30.000 30.000\n68 34.000 716.000 30.000 30.000\n69 774.000 328.000 30.000 30.000\n70 916.000 117.000 30.000 30.000\n71 934.000 650.000 30.000 30.000\n72 693.000 390.000 30.000 30.000\n73 819.000 561.000 30.000 30.000\n74 627.000 386.000 30.000 30.000\n75 311.000 679.000 30.000 30.000\n76 633.000 168.000 30.000 30.000\n77 71.000 426.000 30.000 30.000\n78 465.000 776.000 30.000 30.000\n79 132.000 582.000 30.000 30.000\n80 103.000 67.000 30.000 30.000\n81 319.000 284.000 30.000 30.000\n82 107.000 200.000 30.000 30.000\n83 863.000 799.000 30.000 30.000\n84 749.000 582.000 30.000 30.000\n85 788.000 676.000 30.000 30.000\n86 914.000 875.000 30.000 30.000\n87 414.000 171.000 30.000 30.000\n88 98.000 194.000 30.000 30.000\n89 128.000 732.000 30.000 30.000\n90 460.000 304.000 30.000 30.000\n91 938.000 121.000 30.000 30.000\n92 535.000 566.000 30.000 30.000\n93 506.000 353.000 30.000 30.000\n94 421.000 473.000 30.000 30.000\n95 527.000 268.000 30.000 30.000\n96 653.000 899.000 30.000 30.000\n97 527.000 27.000 30.000 30.000\n98 599.000 10.000 30.000 30.000\n99 291.000 579.000 30.000 30.000\n100 46.000 490.000 30.000 30.000\n101 494.000 328.000 30.000 30.000\n102 30.000 458.000 30.000 30.000\n103 461.000 446.000 30.000 30.000\n104 383.000 503.000 30.000 30.000\n105 796.000 865.000 30.000 30.000\n106 347.000 791.000 30.000 30.000\n107 559.000 241.000 30.000 30.000\n108 339.000 232.000 30.000 30.000\n109 477.000 943.000 30.000 30.000\n#\n20 18\n21 16\n87 60\n105 6\n43 33\n22 15\n85 74\n45 32\n74 55\n26 25\n80 73\n62 28\n49 24\n27 76\n92 35\n32 83\n58 12\n84 22\n18 8\n2 1\n51 109\n6 5\n45 27\n3 0\n1 0\n5 2\n60 18\n7 6\n35 17\n0 75\n14 1\n101 19\n14 71\n49 45\n108 86\n66 35\n100 87\n100 91\n86 109\n109 53\n101 96\n12 4\n44 13\n27 10\n64 75\n8 2\n81 67\n62 43\n53 3\n32 4\n83 72\n11 10\n38 26\n17 7\n77 50\n52 16\n25 6\n104 95\n29 17\n42 12\n24 18\n100 47\n71 61\n81 46\n23 0\n46 12\n40 11\n30 16\n30 94\n82 7\n14 103\n27 49\n86 44\n57 30\n72 42\n48 17\n93 41\n9 8\n70 68\n95 2\n91 88\n64 13\n4 2\n59 4\n63 15\n66 62\n33 21\n16 8\n65 60\n89 0\n88 77\n35 23\n98 72\n31 13\n54 17\n2 58\n36 9\n61 54\n78 90\n53 36\n28 39\n47 20\n79 44\n1 32\n94 15\n73 14\n18 94\n55 46\n76 63\n39 25\n76 7\n106 24\n37 10\n90 64\n107 82\n19 8\n87 95\n79 0\n97 24\n96 14\n28 15\n99 47\n99 44\n75 18\n15 4\n103 37\n41 14\n102 65\n13 11\n85 82\n51 37\n39 100\n89 94\n25 10\n34 1\n56 47\n50 42\n68 65\n69 27\n56 90\n78 63\n10 1\n67 21\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v110e154.gml",
    "content": "graph\n[\n    node\n    [\n        id    0\n        label    \"\"\n        graphics\n        [\n            x    876.70\n            y    841.81\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    1\n        label    \"\"\n        graphics\n        [\n            x    186.15\n            y    737.41\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    2\n        label    \"\"\n        graphics\n        [\n            x    909.31\n            y    858.44\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    3\n        label    \"\"\n        graphics\n        [\n            x    520.02\n            y    923.64\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    4\n        label    \"\"\n        graphics\n        [\n            x    325.78\n            y    340.83\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    5\n        label    \"\"\n        graphics\n        [\n            x    417.95\n            y    280.39\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    6\n        label    \"\"\n        graphics\n        [\n            x    96.29\n            y    158.02\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    7\n        label    \"\"\n        graphics\n        [\n            x    534.65\n            y    123.44\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    8\n        label    \"\"\n        graphics\n        [\n            x    1.41\n            y    828.37\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    9\n        label    \"\"\n        graphics\n        [\n            x    918.93\n            y    631.57\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    10\n        label    \"\"\n        graphics\n        [\n            x    747.38\n            y    186.28\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    11\n        label    \"\"\n        graphics\n        [\n            x    882.63\n            y    842.51\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    12\n        label    \"\"\n        graphics\n        [\n            x    349.54\n            y    469.48\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    13\n        label    \"\"\n        graphics\n        [\n            x    664.70\n            y    827.94\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    14\n        label    \"\"\n        graphics\n        [\n            x    100.52\n            y    157.95\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    15\n        label    \"\"\n        graphics\n        [\n            x    286.42\n            y    18.49\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    16\n        label    \"\"\n        graphics\n        [\n            x    165.83\n            y    444.18\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    17\n        label    \"\"\n        graphics\n        [\n            x    465.25\n            y    205.96\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    18\n        label    \"\"\n        graphics\n        [\n            x    332.68\n            y    393.54\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    19\n        label    \"\"\n        graphics\n        [\n            x    586.56\n            y    381.92\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    20\n        label    \"\"\n        graphics\n        [\n            x    504.62\n            y    664.33\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    21\n        label    \"\"\n        graphics\n        [\n            x    445.10\n            y    880.77\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    22\n        label    \"\"\n        graphics\n        [\n            x    888.00\n            y    185.88\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    23\n        label    \"\"\n        graphics\n        [\n            x    202.00\n            y    638.53\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    24\n        label    \"\"\n        graphics\n        [\n            x    403.41\n            y    659.98\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    25\n        label    \"\"\n        graphics\n        [\n            x    684.64\n            y    82.15\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    26\n        label    \"\"\n        graphics\n        [\n            x    934.96\n            y    895.47\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    27\n        label    \"\"\n        graphics\n        [\n            x    676.07\n            y    862.90\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    28\n        label    \"\"\n        graphics\n        [\n            x    495.28\n            y    681.23\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    29\n        label    \"\"\n        graphics\n        [\n            x    205.43\n            y    223.83\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    30\n        label    \"\"\n        graphics\n        [\n            x    52.05\n            y    269.85\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    31\n        label    \"\"\n        graphics\n        [\n            x    874.08\n            y    395.81\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    32\n        label    \"\"\n        graphics\n        [\n            x    543.49\n            y    941.60\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    33\n        label    \"\"\n        graphics\n        [\n            x    123.17\n            y    78.17\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    34\n        label    \"\"\n        graphics\n        [\n            x    646.31\n            y    525.60\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    35\n        label    \"\"\n        graphics\n        [\n            x    464.01\n            y    564.77\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    36\n        label    \"\"\n        graphics\n        [\n            x    327.98\n            y    474.62\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    37\n        label    \"\"\n        graphics\n        [\n            x    193.62\n            y    196.07\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    38\n        label    \"\"\n        graphics\n        [\n            x    150.37\n            y    846.80\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    39\n        label    \"\"\n        graphics\n        [\n            x    935.49\n            y    613.99\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    40\n        label    \"\"\n        graphics\n        [\n            x    85.49\n            y    413.79\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    41\n        label    \"\"\n        graphics\n        [\n            x    816.78\n            y    853.14\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    42\n        label    \"\"\n        graphics\n        [\n            x    934.90\n            y    140.34\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    43\n        label    \"\"\n        graphics\n        [\n            x    9.24\n            y    858.12\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    44\n        label    \"\"\n        graphics\n        [\n            x    359.84\n            y    663.15\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    45\n        label    \"\"\n        graphics\n        [\n            x    125.59\n            y    835.90\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    46\n        label    \"\"\n        graphics\n        [\n            x    824.92\n            y    400.43\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    47\n        label    \"\"\n        graphics\n        [\n            x    519.59\n            y    865.57\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    48\n        label    \"\"\n        graphics\n        [\n            x    217.52\n            y    865.22\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    49\n        label    \"\"\n        graphics\n        [\n            x    634.70\n            y    142.41\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    50\n        label    \"\"\n        graphics\n        [\n            x    846.76\n            y    894.82\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    51\n        label    \"\"\n        graphics\n        [\n            x    197.36\n            y    515.38\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    52\n        label    \"\"\n        graphics\n        [\n            x    345.07\n            y    870.46\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    53\n        label    \"\"\n        graphics\n        [\n            x    194.75\n            y    401.65\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    54\n        label    \"\"\n        graphics\n        [\n            x    207.62\n            y    933.79\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    55\n        label    \"\"\n        graphics\n        [\n            x    916.88\n            y    101.44\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    56\n        label    \"\"\n        graphics\n        [\n            x    123.05\n            y    623.87\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    57\n        label    \"\"\n        graphics\n        [\n            x    363.22\n            y    1.61\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    58\n        label    \"\"\n        graphics\n        [\n            x    32.08\n            y    342.95\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    59\n        label    \"\"\n        graphics\n        [\n            x    355.33\n            y    814.86\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    60\n        label    \"\"\n        graphics\n        [\n            x    18.88\n            y    355.25\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    61\n        label    \"\"\n        graphics\n        [\n            x    757.33\n            y    126.21\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    62\n        label    \"\"\n        graphics\n        [\n            x    767.81\n            y    770.49\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    63\n        label    \"\"\n        graphics\n        [\n            x    141.76\n            y    575.13\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    64\n        label    \"\"\n        graphics\n        [\n            x    323.41\n            y    765.95\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    65\n        label    \"\"\n        graphics\n        [\n            x    874.81\n            y    0.54\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    66\n        label    \"\"\n        graphics\n        [\n            x    715.37\n            y    34.86\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    67\n        label    \"\"\n        graphics\n        [\n            x    529.88\n            y    686.86\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    68\n        label    \"\"\n        graphics\n        [\n            x    165.64\n            y    941.39\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    69\n        label    \"\"\n        graphics\n        [\n            x    600.15\n            y    303.66\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    70\n        label    \"\"\n        graphics\n        [\n            x    10.29\n            y    667.46\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    71\n        label    \"\"\n        graphics\n        [\n            x    370.46\n            y    308.60\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    72\n        label    \"\"\n        graphics\n        [\n            x    453.11\n            y    204.64\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    73\n        label    \"\"\n        graphics\n        [\n            x    250.49\n            y    791.77\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    74\n        label    \"\"\n        graphics\n        [\n            x    541.93\n            y    616.02\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    75\n        label    \"\"\n        graphics\n        [\n            x    748.18\n            y    639.96\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    76\n        label    \"\"\n        graphics\n        [\n            x    394.48\n            y    459.72\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    77\n        label    \"\"\n        graphics\n        [\n            x    306.16\n            y    428.70\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    78\n        label    \"\"\n        graphics\n        [\n            x    794.79\n            y    456.93\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    79\n        label    \"\"\n        graphics\n        [\n            x    540.97\n            y    352.12\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    80\n        label    \"\"\n        graphics\n        [\n            x    542.62\n            y    85.15\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    81\n        label    \"\"\n        graphics\n        [\n            x    896.63\n            y    516.43\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    82\n        label    \"\"\n        graphics\n        [\n            x    296.86\n            y    405.53\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    83\n        label    \"\"\n        graphics\n        [\n            x    123.49\n            y    119.80\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    84\n        label    \"\"\n        graphics\n        [\n            x    414.56\n            y    384.05\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    85\n        label    \"\"\n        graphics\n        [\n            x    112.75\n            y    22.26\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    86\n        label    \"\"\n        graphics\n        [\n            x    42.31\n            y    288.50\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    87\n        label    \"\"\n        graphics\n        [\n            x    740.32\n            y    581.98\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    88\n        label    \"\"\n        graphics\n        [\n            x    762.40\n            y    673.11\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    89\n        label    \"\"\n        graphics\n        [\n            x    782.78\n            y    236.64\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    90\n        label    \"\"\n        graphics\n        [\n            x    262.23\n            y    819.11\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    91\n        label    \"\"\n        graphics\n        [\n            x    477.69\n            y    630.40\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    92\n        label    \"\"\n        graphics\n        [\n            x    206.12\n            y    459.06\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    93\n        label    \"\"\n        graphics\n        [\n            x    633.08\n            y    40.45\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    94\n        label    \"\"\n        graphics\n        [\n            x    506.21\n            y    860.38\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    95\n        label    \"\"\n        graphics\n        [\n            x    244.89\n            y    267.84\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    96\n        label    \"\"\n        graphics\n        [\n            x    457.78\n            y    825.04\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    97\n        label    \"\"\n        graphics\n        [\n            x    203.84\n            y    294.23\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    98\n        label    \"\"\n        graphics\n        [\n            x    742.72\n            y    243.99\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    99\n        label    \"\"\n        graphics\n        [\n            x    660.74\n            y    699.55\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    100\n        label    \"\"\n        graphics\n        [\n            x    924.92\n            y    28.03\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    101\n        label    \"\"\n        graphics\n        [\n            x    415.47\n            y    609.68\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    102\n        label    \"\"\n        graphics\n        [\n            x    751.16\n            y    537.39\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    103\n        label    \"\"\n        graphics\n        [\n            x    737.13\n            y    66.34\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    104\n        label    \"\"\n        graphics\n        [\n            x    586.92\n            y    669.76\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    105\n        label    \"\"\n        graphics\n        [\n            x    319.80\n            y    417.01\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    106\n        label    \"\"\n        graphics\n        [\n            x    762.29\n            y    336.62\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    107\n        label    \"\"\n        graphics\n        [\n            x    864.12\n            y    855.44\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    108\n        label    \"\"\n        graphics\n        [\n            x    99.97\n            y    116.36\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    109\n        label    \"\"\n        graphics\n        [\n            x    897.56\n            y    711.00\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    edge\n    [\n        source    1\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    10\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    100\n        target    96\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    101\n        target    96\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    102\n        target    87\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    103\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    104\n        target    53\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    105\n        target    99\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    106\n        target    49\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    107\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    107\n        target    98\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    108\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    109\n        target    84\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    11\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    11\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    11\n        target    68\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    12\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    13\n        target    31\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    13\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    14\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    15\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    15\n        target    52\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    16\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    16\n        target    81\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    17\n        target    103\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    17\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    18\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    19\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    2\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    2\n        target    109\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    20\n        target    46\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    20\n        target    50\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    20\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    21\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    22\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    23\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    23\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    24\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    24\n        target    69\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    25\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    26\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    27\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    28\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    28\n        target    81\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    29\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    3\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    30\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    31\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    32\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    33\n        target    104\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    33\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    34\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    34\n        target    37\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    35\n        target    30\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    36\n        target    20\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    37\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    37\n        target    19\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    37\n        target    97\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    38\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    38\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    39\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    39\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    39\n        target    29\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    39\n        target    91\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    4\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    40\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    40\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    40\n        target    28\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    41\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    42\n        target    102\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    42\n        target    27\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    42\n        target    49\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    43\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    44\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    45\n        target    24\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    45\n        target    29\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    45\n        target    49\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    46\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    47\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    48\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    49\n        target    26\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    5\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    5\n        target    63\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    50\n        target    37\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    51\n        target    43\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    51\n        target    64\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    52\n        target    42\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    53\n        target    46\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    54\n        target    38\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    54\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    55\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    56\n        target    53\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    57\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    58\n        target    108\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    58\n        target    20\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    59\n        target    51\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    6\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    60\n        target    44\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    61\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    62\n        target    60\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    63\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    64\n        target    60\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    65\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    65\n        target    75\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    66\n        target    59\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    67\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    67\n        target    50\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    68\n        target    39\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    69\n        target    104\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    69\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    7\n        target    43\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    7\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    70\n        target    29\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    71\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    72\n        target    37\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    73\n        target    61\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    74\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    75\n        target    59\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    76\n        target    59\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    77\n        target    76\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    78\n        target    30\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    79\n        target    28\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    79\n        target    66\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    8\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    8\n        target    93\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    80\n        target    20\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    81\n        target    68\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    82\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    83\n        target    45\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    83\n        target    47\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    84\n        target    46\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    84\n        target    74\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    85\n        target    67\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    86\n        target    73\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    86\n        target    78\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    87\n        target    57\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    88\n        target    46\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    89\n        target    37\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    9\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    90\n        target    80\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    91\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    91\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    92\n        target    64\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    93\n        target    42\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    93\n        target    70\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    94\n        target    74\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    95\n        target    56\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    95\n        target    68\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    96\n        target    73\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    97\n        target    63\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    98\n        target    48\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    98\n        target    66\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    99\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    99\n        target    97\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n]\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v110e154.tglf",
    "content": "0 876.000 841.000 30.000 30.000\n1 186.000 737.000 30.000 30.000\n2 909.000 858.000 30.000 30.000\n3 520.000 923.000 30.000 30.000\n4 325.000 340.000 30.000 30.000\n5 417.000 280.000 30.000 30.000\n6 96.000 158.000 30.000 30.000\n7 534.000 123.000 30.000 30.000\n8 1.000 828.000 30.000 30.000\n9 918.000 631.000 30.000 30.000\n10 747.000 186.000 30.000 30.000\n11 882.000 842.000 30.000 30.000\n12 349.000 469.000 30.000 30.000\n13 664.000 827.000 30.000 30.000\n14 100.000 157.000 30.000 30.000\n15 286.000 18.000 30.000 30.000\n16 165.000 444.000 30.000 30.000\n17 465.000 205.000 30.000 30.000\n18 332.000 393.000 30.000 30.000\n19 586.000 381.000 30.000 30.000\n20 504.000 664.000 30.000 30.000\n21 445.000 880.000 30.000 30.000\n22 888.000 185.000 30.000 30.000\n23 202.000 638.000 30.000 30.000\n24 403.000 659.000 30.000 30.000\n25 684.000 82.000 30.000 30.000\n26 934.000 895.000 30.000 30.000\n27 676.000 862.000 30.000 30.000\n28 495.000 681.000 30.000 30.000\n29 205.000 223.000 30.000 30.000\n30 52.000 269.000 30.000 30.000\n31 874.000 395.000 30.000 30.000\n32 543.000 941.000 30.000 30.000\n33 123.000 78.000 30.000 30.000\n34 646.000 525.000 30.000 30.000\n35 464.000 564.000 30.000 30.000\n36 327.000 474.000 30.000 30.000\n37 193.000 196.000 30.000 30.000\n38 150.000 846.000 30.000 30.000\n39 935.000 613.000 30.000 30.000\n40 85.000 413.000 30.000 30.000\n41 816.000 853.000 30.000 30.000\n42 934.000 140.000 30.000 30.000\n43 9.000 858.000 30.000 30.000\n44 359.000 663.000 30.000 30.000\n45 125.000 835.000 30.000 30.000\n46 824.000 400.000 30.000 30.000\n47 519.000 865.000 30.000 30.000\n48 217.000 865.000 30.000 30.000\n49 634.000 142.000 30.000 30.000\n50 846.000 894.000 30.000 30.000\n51 197.000 515.000 30.000 30.000\n52 345.000 870.000 30.000 30.000\n53 194.000 401.000 30.000 30.000\n54 207.000 933.000 30.000 30.000\n55 916.000 101.000 30.000 30.000\n56 123.000 623.000 30.000 30.000\n57 363.000 1.000 30.000 30.000\n58 32.000 342.000 30.000 30.000\n59 355.000 814.000 30.000 30.000\n60 18.000 355.000 30.000 30.000\n61 757.000 126.000 30.000 30.000\n62 767.000 770.000 30.000 30.000\n63 141.000 575.000 30.000 30.000\n64 323.000 765.000 30.000 30.000\n65 874.000 0.000 30.000 30.000\n66 715.000 34.000 30.000 30.000\n67 529.000 686.000 30.000 30.000\n68 165.000 941.000 30.000 30.000\n69 600.000 303.000 30.000 30.000\n70 10.000 667.000 30.000 30.000\n71 370.000 308.000 30.000 30.000\n72 453.000 204.000 30.000 30.000\n73 250.000 791.000 30.000 30.000\n74 541.000 616.000 30.000 30.000\n75 748.000 639.000 30.000 30.000\n76 394.000 459.000 30.000 30.000\n77 306.000 428.000 30.000 30.000\n78 794.000 456.000 30.000 30.000\n79 540.000 352.000 30.000 30.000\n80 542.000 85.000 30.000 30.000\n81 896.000 516.000 30.000 30.000\n82 296.000 405.000 30.000 30.000\n83 123.000 119.000 30.000 30.000\n84 414.000 384.000 30.000 30.000\n85 112.000 22.000 30.000 30.000\n86 42.000 288.000 30.000 30.000\n87 740.000 581.000 30.000 30.000\n88 762.000 673.000 30.000 30.000\n89 782.000 236.000 30.000 30.000\n90 262.000 819.000 30.000 30.000\n91 477.000 630.000 30.000 30.000\n92 206.000 459.000 30.000 30.000\n93 633.000 40.000 30.000 30.000\n94 506.000 860.000 30.000 30.000\n95 244.000 267.000 30.000 30.000\n96 457.000 825.000 30.000 30.000\n97 203.000 294.000 30.000 30.000\n98 742.000 243.000 30.000 30.000\n99 660.000 699.000 30.000 30.000\n100 924.000 28.000 30.000 30.000\n101 415.000 609.000 30.000 30.000\n102 751.000 537.000 30.000 30.000\n103 737.000 66.000 30.000 30.000\n104 586.000 669.000 30.000 30.000\n105 319.000 417.000 30.000 30.000\n106 762.000 336.000 30.000 30.000\n107 864.000 855.000 30.000 30.000\n108 99.000 116.000 30.000 30.000\n109 897.000 711.000 30.000 30.000\n#\n37 19\n98 66\n30 7\n97 63\n10 3\n28 6\n58 108\n67 2\n7 43\n35 30\n102 87\n98 48\n26 12\n89 37\n24 22\n36 20\n51 43\n106 49\n16 8\n6 3\n23 14\n45 24\n4 3\n31 0\n37 97\n28 81\n29 2\n109 84\n71 0\n13 31\n65 7\n14 2\n104 53\n40 0\n88 46\n77 76\n43 17\n18 6\n39 29\n108 15\n11 68\n40 28\n70 29\n9 3\n2 109\n57 10\n20 46\n59 51\n54 4\n45 29\n44 14\n17 103\n42 102\n55 12\n86 78\n99 23\n5 63\n65 75\n50 37\n22 4\n46 10\n54 38\n48 12\n63 21\n85 67\n2 0\n53 46\n56 53\n84 46\n17 7\n78 30\n40 15\n58 20\n39 91\n51 64\n39 21\n32 14\n33 104\n20 50\n74 5\n39 15\n64 60\n24 69\n66 59\n69 104\n95 56\n12 0\n86 73\n61 2\n8 0\n94 74\n27 18\n82 4\n33 11\n99 97\n34 18\n92 64\n72 37\n107 98\n1 0\n41 21\n93 70\n105 99\n79 66\n80 20\n7 6\n83 45\n100 96\n13 7\n62 60\n15 52\n87 57\n73 61\n103 6\n47 2\n25 1\n11 12\n67 50\n90 80\n3 1\n60 44\n101 96\n75 59\n45 49\n84 74\n52 42\n95 68\n16 81\n19 13\n93 42\n83 47\n23 13\n69 6\n34 37\n79 28\n15 2\n49 26\n42 49\n21 3\n91 11\n107 21\n38 8\n38 3\n68 39\n91 1\n37 13\n42 27\n76 59\n20 6\n11 10\n5 4\n8 93\n96 73\n81 68\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v110e165.gml",
    "content": "graph\n[\n    node\n    [\n        id    0\n        label    \"\"\n        graphics\n        [\n            x    538.85\n            y    389.24\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    1\n        label    \"\"\n        graphics\n        [\n            x    196.36\n            y    10.50\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    2\n        label    \"\"\n        graphics\n        [\n            x    624.83\n            y    23.38\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    3\n        label    \"\"\n        graphics\n        [\n            x    353.97\n            y    53.92\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    4\n        label    \"\"\n        graphics\n        [\n            x    863.99\n            y    537.44\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    5\n        label    \"\"\n        graphics\n        [\n            x    41.91\n            y    300.02\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    6\n        label    \"\"\n        graphics\n        [\n            x    597.37\n            y    371.32\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    7\n        label    \"\"\n        graphics\n        [\n            x    140.29\n            y    941.06\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    8\n        label    \"\"\n        graphics\n        [\n            x    560.46\n            y    806.81\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    9\n        label    \"\"\n        graphics\n        [\n            x    909.19\n            y    390.23\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    10\n        label    \"\"\n        graphics\n        [\n            x    789.88\n            y    345.72\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    11\n        label    \"\"\n        graphics\n        [\n            x    96.48\n            y    916.42\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    12\n        label    \"\"\n        graphics\n        [\n            x    711.84\n            y    681.34\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    13\n        label    \"\"\n        graphics\n        [\n            x    293.60\n            y    71.91\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    14\n        label    \"\"\n        graphics\n        [\n            x    896.20\n            y    245.78\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    15\n        label    \"\"\n        graphics\n        [\n            x    260.55\n            y    778.69\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    16\n        label    \"\"\n        graphics\n        [\n            x    613.93\n            y    138.29\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    17\n        label    \"\"\n        graphics\n        [\n            x    671.24\n            y    489.85\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    18\n        label    \"\"\n        graphics\n        [\n            x    293.80\n            y    562.31\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    19\n        label    \"\"\n        graphics\n        [\n            x    636.39\n            y    701.99\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    20\n        label    \"\"\n        graphics\n        [\n            x    218.21\n            y    236.82\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    21\n        label    \"\"\n        graphics\n        [\n            x    423.21\n            y    691.02\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    22\n        label    \"\"\n        graphics\n        [\n            x    290.42\n            y    682.65\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    23\n        label    \"\"\n        graphics\n        [\n            x    391.60\n            y    453.71\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    24\n        label    \"\"\n        graphics\n        [\n            x    443.09\n            y    271.02\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    25\n        label    \"\"\n        graphics\n        [\n            x    443.11\n            y    666.59\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    26\n        label    \"\"\n        graphics\n        [\n            x    450.38\n            y    920.02\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    27\n        label    \"\"\n        graphics\n        [\n            x    445.72\n            y    795.96\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    28\n        label    \"\"\n        graphics\n        [\n            x    188.79\n            y    134.68\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    29\n        label    \"\"\n        graphics\n        [\n            x    618.22\n            y    656.72\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    30\n        label    \"\"\n        graphics\n        [\n            x    449.06\n            y    755.29\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    31\n        label    \"\"\n        graphics\n        [\n            x    542.26\n            y    927.47\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    32\n        label    \"\"\n        graphics\n        [\n            x    478.68\n            y    899.68\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    33\n        label    \"\"\n        graphics\n        [\n            x    339.16\n            y    601.97\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    34\n        label    \"\"\n        graphics\n        [\n            x    359.76\n            y    784.95\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    35\n        label    \"\"\n        graphics\n        [\n            x    695.79\n            y    65.56\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    36\n        label    \"\"\n        graphics\n        [\n            x    746.87\n            y    228.98\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    37\n        label    \"\"\n        graphics\n        [\n            x    745.80\n            y    79.44\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    38\n        label    \"\"\n        graphics\n        [\n            x    474.22\n            y    365.83\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    39\n        label    \"\"\n        graphics\n        [\n            x    635.94\n            y    833.28\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    40\n        label    \"\"\n        graphics\n        [\n            x    686.55\n            y    90.04\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    41\n        label    \"\"\n        graphics\n        [\n            x    149.49\n            y    236.01\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    42\n        label    \"\"\n        graphics\n        [\n            x    687.80\n            y    167.42\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    43\n        label    \"\"\n        graphics\n        [\n            x    920.59\n            y    159.71\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    44\n        label    \"\"\n        graphics\n        [\n            x    111.34\n            y    758.20\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    45\n        label    \"\"\n        graphics\n        [\n            x    347.11\n            y    118.08\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    46\n        label    \"\"\n        graphics\n        [\n            x    163.95\n            y    565.89\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    47\n        label    \"\"\n        graphics\n        [\n            x    675.03\n            y    113.21\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    48\n        label    \"\"\n        graphics\n        [\n            x    895.89\n            y    536.51\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    49\n        label    \"\"\n        graphics\n        [\n            x    354.76\n            y    251.10\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    50\n        label    \"\"\n        graphics\n        [\n            x    155.48\n            y    473.81\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    51\n        label    \"\"\n        graphics\n        [\n            x    279.97\n            y    807.17\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    52\n        label    \"\"\n        graphics\n        [\n            x    390.41\n            y    895.85\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    53\n        label    \"\"\n        graphics\n        [\n            x    812.36\n            y    460.80\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    54\n        label    \"\"\n        graphics\n        [\n            x    426.60\n            y    439.56\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    55\n        label    \"\"\n        graphics\n        [\n            x    662.08\n            y    890.36\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    56\n        label    \"\"\n        graphics\n        [\n            x    847.95\n            y    55.31\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    57\n        label    \"\"\n        graphics\n        [\n            x    817.70\n            y    927.40\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    58\n        label    \"\"\n        graphics\n        [\n            x    302.08\n            y    854.95\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    59\n        label    \"\"\n        graphics\n        [\n            x    364.06\n            y    932.86\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    60\n        label    \"\"\n        graphics\n        [\n            x    297.99\n            y    294.63\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    61\n        label    \"\"\n        graphics\n        [\n            x    54.96\n            y    622.67\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    62\n        label    \"\"\n        graphics\n        [\n            x    57.00\n            y    190.50\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    63\n        label    \"\"\n        graphics\n        [\n            x    439.54\n            y    296.65\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    64\n        label    \"\"\n        graphics\n        [\n            x    574.08\n            y    467.73\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    65\n        label    \"\"\n        graphics\n        [\n            x    481.08\n            y    145.50\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    66\n        label    \"\"\n        graphics\n        [\n            x    377.90\n            y    720.47\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    67\n        label    \"\"\n        graphics\n        [\n            x    23.56\n            y    104.81\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    68\n        label    \"\"\n        graphics\n        [\n            x    71.63\n            y    521.32\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    69\n        label    \"\"\n        graphics\n        [\n            x    402.65\n            y    835.73\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    70\n        label    \"\"\n        graphics\n        [\n            x    323.77\n            y    911.87\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    71\n        label    \"\"\n        graphics\n        [\n            x    137.34\n            y    667.70\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    72\n        label    \"\"\n        graphics\n        [\n            x    668.01\n            y    687.09\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    73\n        label    \"\"\n        graphics\n        [\n            x    79.69\n            y    244.21\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    74\n        label    \"\"\n        graphics\n        [\n            x    399.55\n            y    408.15\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    75\n        label    \"\"\n        graphics\n        [\n            x    632.67\n            y    182.31\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    76\n        label    \"\"\n        graphics\n        [\n            x    344.29\n            y    315.66\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    77\n        label    \"\"\n        graphics\n        [\n            x    414.79\n            y    90.12\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    78\n        label    \"\"\n        graphics\n        [\n            x    70.35\n            y    294.46\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    79\n        label    \"\"\n        graphics\n        [\n            x    22.94\n            y    712.38\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    80\n        label    \"\"\n        graphics\n        [\n            x    654.09\n            y    579.19\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    81\n        label    \"\"\n        graphics\n        [\n            x    331.47\n            y    831.50\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    82\n        label    \"\"\n        graphics\n        [\n            x    40.95\n            y    730.29\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    83\n        label    \"\"\n        graphics\n        [\n            x    132.58\n            y    637.95\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    84\n        label    \"\"\n        graphics\n        [\n            x    401.72\n            y    448.69\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    85\n        label    \"\"\n        graphics\n        [\n            x    321.28\n            y    222.23\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    86\n        label    \"\"\n        graphics\n        [\n            x    377.20\n            y    870.25\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    87\n        label    \"\"\n        graphics\n        [\n            x    437.42\n            y    174.04\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    88\n        label    \"\"\n        graphics\n        [\n            x    919.67\n            y    226.79\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    89\n        label    \"\"\n        graphics\n        [\n            x    115.90\n            y    764.38\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    90\n        label    \"\"\n        graphics\n        [\n            x    843.34\n            y    390.71\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    91\n        label    \"\"\n        graphics\n        [\n            x    48.68\n            y    373.96\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    92\n        label    \"\"\n        graphics\n        [\n            x    588.52\n            y    2.78\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    93\n        label    \"\"\n        graphics\n        [\n            x    907.38\n            y    44.15\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    94\n        label    \"\"\n        graphics\n        [\n            x    943.46\n            y    60.70\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    95\n        label    \"\"\n        graphics\n        [\n            x    810.44\n            y    738.25\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    96\n        label    \"\"\n        graphics\n        [\n            x    578.27\n            y    127.61\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    97\n        label    \"\"\n        graphics\n        [\n            x    506.71\n            y    130.45\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    98\n        label    \"\"\n        graphics\n        [\n            x    179.85\n            y    737.96\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    99\n        label    \"\"\n        graphics\n        [\n            x    499.24\n            y    791.37\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    100\n        label    \"\"\n        graphics\n        [\n            x    787.68\n            y    399.63\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    101\n        label    \"\"\n        graphics\n        [\n            x    589.72\n            y    417.25\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    102\n        label    \"\"\n        graphics\n        [\n            x    924.28\n            y    935.28\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    103\n        label    \"\"\n        graphics\n        [\n            x    379.55\n            y    429.41\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    104\n        label    \"\"\n        graphics\n        [\n            x    907.90\n            y    835.91\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    105\n        label    \"\"\n        graphics\n        [\n            x    355.71\n            y    594.82\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    106\n        label    \"\"\n        graphics\n        [\n            x    146.64\n            y    532.81\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    107\n        label    \"\"\n        graphics\n        [\n            x    199.40\n            y    808.06\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    108\n        label    \"\"\n        graphics\n        [\n            x    575.93\n            y    309.25\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    109\n        label    \"\"\n        graphics\n        [\n            x    885.47\n            y    790.94\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    edge\n    [\n        source    1\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    10\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    100\n        target    19\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    100\n        target    57\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    100\n        target    60\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    101\n        target    19\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    102\n        target    93\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    103\n        target    58\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    104\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    105\n        target    109\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    105\n        target    52\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    106\n        target    59\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    106\n        target    99\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    107\n        target    69\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    107\n        target    94\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    108\n        target    60\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    108\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    109\n        target    77\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    11\n        target    38\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    11\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    11\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    12\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    12\n        target    94\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    13\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    13\n        target    29\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    14\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    15\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    15\n        target    60\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    15\n        target    73\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    16\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    17\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    17\n        target    26\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    18\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    19\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    2\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    2\n        target    54\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    2\n        target    59\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    20\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    21\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    21\n        target    44\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    22\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    23\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    24\n        target    19\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    24\n        target    62\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    24\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    24\n        target    97\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    25\n        target    100\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    25\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    26\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    27\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    28\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    29\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    3\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    30\n        target    24\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    31\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    32\n        target    62\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    32\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    33\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    34\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    35\n        target    24\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    36\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    37\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    38\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    39\n        target    34\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    39\n        target    38\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    39\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    39\n        target    79\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    4\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    40\n        target    34\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    41\n        target    28\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    41\n        target    89\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    42\n        target    19\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    43\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    43\n        target    24\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    43\n        target    34\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    43\n        target    69\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    44\n        target    41\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    45\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    45\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    46\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    47\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    47\n        target    81\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    48\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    49\n        target    27\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    49\n        target    90\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    5\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    50\n        target    29\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    51\n        target    30\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    51\n        target    47\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    52\n        target    40\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    53\n        target    102\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    53\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    54\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    54\n        target    67\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    54\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    55\n        target    52\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    55\n        target    79\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    56\n        target    24\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    56\n        target    48\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    57\n        target    48\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    58\n        target    36\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    59\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    6\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    60\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    61\n        target    40\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    62\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    62\n        target    97\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    63\n        target    59\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    64\n        target    54\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    65\n        target    58\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    66\n        target    19\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    66\n        target    84\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    67\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    68\n        target    52\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    69\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    69\n        target    27\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    7\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    70\n        target    51\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    71\n        target    58\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    72\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    73\n        target    100\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    73\n        target    67\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    74\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    75\n        target    39\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    75\n        target    50\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    75\n        target    95\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    76\n        target    54\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    77\n        target    35\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    78\n        target    24\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    79\n        target    25\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    8\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    80\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    81\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    81\n        target    40\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    81\n        target    43\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    81\n        target    98\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    82\n        target    34\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    83\n        target    58\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    84\n        target    39\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    84\n        target    55\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    84\n        target    57\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    85\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    85\n        target    90\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    86\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    86\n        target    89\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    86\n        target    94\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    87\n        target    53\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    88\n        target    71\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    89\n        target    49\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    89\n        target    82\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    9\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    90\n        target    64\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    90\n        target    83\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    91\n        target    49\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    92\n        target    90\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    93\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    94\n        target    67\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    95\n        target    77\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    96\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    97\n        target    28\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    97\n        target    64\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    98\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    98\n        target    87\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    99\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    99\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n]\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v110e165.tglf",
    "content": "0 538.000 389.000 30.000 30.000\n1 196.000 10.000 30.000 30.000\n2 624.000 23.000 30.000 30.000\n3 353.000 53.000 30.000 30.000\n4 863.000 537.000 30.000 30.000\n5 41.000 300.000 30.000 30.000\n6 597.000 371.000 30.000 30.000\n7 140.000 941.000 30.000 30.000\n8 560.000 806.000 30.000 30.000\n9 909.000 390.000 30.000 30.000\n10 789.000 345.000 30.000 30.000\n11 96.000 916.000 30.000 30.000\n12 711.000 681.000 30.000 30.000\n13 293.000 71.000 30.000 30.000\n14 896.000 245.000 30.000 30.000\n15 260.000 778.000 30.000 30.000\n16 613.000 138.000 30.000 30.000\n17 671.000 489.000 30.000 30.000\n18 293.000 562.000 30.000 30.000\n19 636.000 701.000 30.000 30.000\n20 218.000 236.000 30.000 30.000\n21 423.000 691.000 30.000 30.000\n22 290.000 682.000 30.000 30.000\n23 391.000 453.000 30.000 30.000\n24 443.000 271.000 30.000 30.000\n25 443.000 666.000 30.000 30.000\n26 450.000 920.000 30.000 30.000\n27 445.000 795.000 30.000 30.000\n28 188.000 134.000 30.000 30.000\n29 618.000 656.000 30.000 30.000\n30 449.000 755.000 30.000 30.000\n31 542.000 927.000 30.000 30.000\n32 478.000 899.000 30.000 30.000\n33 339.000 601.000 30.000 30.000\n34 359.000 784.000 30.000 30.000\n35 695.000 65.000 30.000 30.000\n36 746.000 228.000 30.000 30.000\n37 745.000 79.000 30.000 30.000\n38 474.000 365.000 30.000 30.000\n39 635.000 833.000 30.000 30.000\n40 686.000 90.000 30.000 30.000\n41 149.000 236.000 30.000 30.000\n42 687.000 167.000 30.000 30.000\n43 920.000 159.000 30.000 30.000\n44 111.000 758.000 30.000 30.000\n45 347.000 118.000 30.000 30.000\n46 163.000 565.000 30.000 30.000\n47 675.000 113.000 30.000 30.000\n48 895.000 536.000 30.000 30.000\n49 354.000 251.000 30.000 30.000\n50 155.000 473.000 30.000 30.000\n51 279.000 807.000 30.000 30.000\n52 390.000 895.000 30.000 30.000\n53 812.000 460.000 30.000 30.000\n54 426.000 439.000 30.000 30.000\n55 662.000 890.000 30.000 30.000\n56 847.000 55.000 30.000 30.000\n57 817.000 927.000 30.000 30.000\n58 302.000 854.000 30.000 30.000\n59 364.000 932.000 30.000 30.000\n60 297.000 294.000 30.000 30.000\n61 54.000 622.000 30.000 30.000\n62 57.000 190.000 30.000 30.000\n63 439.000 296.000 30.000 30.000\n64 574.000 467.000 30.000 30.000\n65 481.000 145.000 30.000 30.000\n66 377.000 720.000 30.000 30.000\n67 23.000 104.000 30.000 30.000\n68 71.000 521.000 30.000 30.000\n69 402.000 835.000 30.000 30.000\n70 323.000 911.000 30.000 30.000\n71 137.000 667.000 30.000 30.000\n72 668.000 687.000 30.000 30.000\n73 79.000 244.000 30.000 30.000\n74 399.000 408.000 30.000 30.000\n75 632.000 182.000 30.000 30.000\n76 344.000 315.000 30.000 30.000\n77 414.000 90.000 30.000 30.000\n78 70.000 294.000 30.000 30.000\n79 22.000 712.000 30.000 30.000\n80 654.000 579.000 30.000 30.000\n81 331.000 831.000 30.000 30.000\n82 40.000 730.000 30.000 30.000\n83 132.000 637.000 30.000 30.000\n84 401.000 448.000 30.000 30.000\n85 321.000 222.000 30.000 30.000\n86 377.000 870.000 30.000 30.000\n87 437.000 174.000 30.000 30.000\n88 919.000 226.000 30.000 30.000\n89 115.000 764.000 30.000 30.000\n90 843.000 390.000 30.000 30.000\n91 48.000 373.000 30.000 30.000\n92 588.000 2.000 30.000 30.000\n93 907.000 44.000 30.000 30.000\n94 943.000 60.000 30.000 30.000\n95 810.000 738.000 30.000 30.000\n96 578.000 127.000 30.000 30.000\n97 506.000 130.000 30.000 30.000\n98 179.000 737.000 30.000 30.000\n99 499.000 791.000 30.000 30.000\n100 787.000 399.000 30.000 30.000\n101 589.000 417.000 30.000 30.000\n102 924.000 935.000 30.000 30.000\n103 379.000 429.000 30.000 30.000\n104 907.000 835.000 30.000 30.000\n105 355.000 594.000 30.000 30.000\n106 146.000 532.000 30.000 30.000\n107 199.000 808.000 30.000 30.000\n108 575.000 309.000 30.000 30.000\n109 885.000 790.000 30.000 30.000\n#\n55 79\n104 15\n24 97\n2 59\n98 87\n38 14\n66 84\n91 49\n39 7\n84 55\n72 10\n30 24\n32 62\n15 60\n75 39\n16 0\n5 2\n69 13\n35 24\n86 94\n84 57\n85 90\n39 34\n12 94\n55 52\n99 16\n39 38\n79 25\n14 1\n67 23\n86 89\n43 10\n63 59\n108 9\n89 82\n44 41\n11 4\n98 21\n24 62\n51 47\n81 12\n95 77\n49 90\n92 90\n81 40\n88 71\n66 19\n75 50\n29 22\n11 38\n32 7\n108 60\n99 2\n96 17\n100 60\n37 2\n84 39\n73 67\n57 48\n97 64\n75 95\n50 29\n13 29\n107 69\n87 53\n69 27\n101 19\n73 100\n90 83\n102 93\n65 58\n34 22\n25 13\n21 44\n82 34\n80 15\n25 100\n3 0\n33 3\n52 40\n10 5\n54 8\n46 23\n21 12\n22 8\n51 30\n74 21\n89 49\n103 58\n8 4\n4 1\n6 2\n107 94\n27 7\n9 1\n70 51\n45 1\n49 27\n81 43\n2 54\n109 77\n12 6\n83 58\n64 54\n61 40\n105 52\n43 69\n68 52\n41 28\n15 73\n42 19\n105 109\n2 1\n13 0\n106 59\n94 67\n54 6\n53 102\n97 28\n11 7\n43 24\n60 1\n28 5\n85 13\n100 19\n93 13\n39 79\n71 58\n54 67\n78 24\n76 54\n23 18\n1 0\n26 0\n56 24\n47 81\n48 13\n45 5\n40 34\n58 36\n36 4\n100 57\n47 7\n24 19\n90 64\n24 7\n20 14\n17 26\n106 99\n56 48\n86 13\n81 98\n17 13\n59 10\n41 89\n19 16\n7 1\n31 9\n15 5\n43 34\n62 18\n53 11\n62 97\n18 12\n77 35\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v120e120.gml",
    "content": "graph\n[\n    node\n    [\n        id    0\n        label    \"\"\n        graphics\n        [\n            x    602.02\n            y    126.78\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    1\n        label    \"\"\n        graphics\n        [\n            x    417.73\n            y    410.77\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    2\n        label    \"\"\n        graphics\n        [\n            x    131.61\n            y    309.21\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    3\n        label    \"\"\n        graphics\n        [\n            x    743.39\n            y    400.79\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    4\n        label    \"\"\n        graphics\n        [\n            x    96.52\n            y    166.27\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    5\n        label    \"\"\n        graphics\n        [\n            x    575.75\n            y    252.09\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    6\n        label    \"\"\n        graphics\n        [\n            x    832.84\n            y    293.74\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    7\n        label    \"\"\n        graphics\n        [\n            x    274.81\n            y    521.06\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    8\n        label    \"\"\n        graphics\n        [\n            x    825.59\n            y    655.60\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    9\n        label    \"\"\n        graphics\n        [\n            x    119.03\n            y    320.91\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    10\n        label    \"\"\n        graphics\n        [\n            x    179.29\n            y    931.90\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    11\n        label    \"\"\n        graphics\n        [\n            x    422.71\n            y    578.30\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    12\n        label    \"\"\n        graphics\n        [\n            x    427.25\n            y    71.44\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    13\n        label    \"\"\n        graphics\n        [\n            x    78.99\n            y    273.44\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    14\n        label    \"\"\n        graphics\n        [\n            x    495.54\n            y    367.95\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    15\n        label    \"\"\n        graphics\n        [\n            x    787.27\n            y    785.47\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    16\n        label    \"\"\n        graphics\n        [\n            x    745.93\n            y    916.43\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    17\n        label    \"\"\n        graphics\n        [\n            x    118.58\n            y    165.25\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    18\n        label    \"\"\n        graphics\n        [\n            x    710.08\n            y    494.95\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    19\n        label    \"\"\n        graphics\n        [\n            x    6.63\n            y    792.58\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    20\n        label    \"\"\n        graphics\n        [\n            x    800.91\n            y    293.41\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    21\n        label    \"\"\n        graphics\n        [\n            x    685.93\n            y    357.67\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    22\n        label    \"\"\n        graphics\n        [\n            x    836.87\n            y    960.95\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    23\n        label    \"\"\n        graphics\n        [\n            x    358.76\n            y    261.17\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    24\n        label    \"\"\n        graphics\n        [\n            x    326.53\n            y    704.03\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    25\n        label    \"\"\n        graphics\n        [\n            x    236.19\n            y    39.18\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    26\n        label    \"\"\n        graphics\n        [\n            x    606.83\n            y    865.25\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    27\n        label    \"\"\n        graphics\n        [\n            x    798.77\n            y    275.47\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    28\n        label    \"\"\n        graphics\n        [\n            x    327.77\n            y    885.33\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    29\n        label    \"\"\n        graphics\n        [\n            x    918.97\n            y    129.40\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    30\n        label    \"\"\n        graphics\n        [\n            x    548.47\n            y    270.94\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    31\n        label    \"\"\n        graphics\n        [\n            x    766.23\n            y    976.36\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    32\n        label    \"\"\n        graphics\n        [\n            x    139.86\n            y    186.02\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    33\n        label    \"\"\n        graphics\n        [\n            x    930.64\n            y    110.25\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    34\n        label    \"\"\n        graphics\n        [\n            x    683.05\n            y    607.84\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    35\n        label    \"\"\n        graphics\n        [\n            x    9.56\n            y    376.40\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    36\n        label    \"\"\n        graphics\n        [\n            x    31.65\n            y    125.10\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    37\n        label    \"\"\n        graphics\n        [\n            x    649.89\n            y    108.98\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    38\n        label    \"\"\n        graphics\n        [\n            x    354.04\n            y    425.67\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    39\n        label    \"\"\n        graphics\n        [\n            x    827.74\n            y    93.32\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    40\n        label    \"\"\n        graphics\n        [\n            x    161.86\n            y    969.71\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    41\n        label    \"\"\n        graphics\n        [\n            x    705.24\n            y    851.69\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    42\n        label    \"\"\n        graphics\n        [\n            x    758.71\n            y    490.49\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    43\n        label    \"\"\n        graphics\n        [\n            x    102.05\n            y    52.22\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    44\n        label    \"\"\n        graphics\n        [\n            x    404.91\n            y    200.66\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    45\n        label    \"\"\n        graphics\n        [\n            x    769.58\n            y    139.92\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    46\n        label    \"\"\n        graphics\n        [\n            x    599.27\n            y    911.97\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    47\n        label    \"\"\n        graphics\n        [\n            x    306.56\n            y    872.57\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    48\n        label    \"\"\n        graphics\n        [\n            x    702.45\n            y    263.54\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    49\n        label    \"\"\n        graphics\n        [\n            x    372.04\n            y    261.54\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    50\n        label    \"\"\n        graphics\n        [\n            x    181.94\n            y    221.09\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    51\n        label    \"\"\n        graphics\n        [\n            x    194.72\n            y    252.00\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    52\n        label    \"\"\n        graphics\n        [\n            x    80.08\n            y    155.85\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    53\n        label    \"\"\n        graphics\n        [\n            x    534.16\n            y    457.49\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    54\n        label    \"\"\n        graphics\n        [\n            x    483.24\n            y    772.79\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    55\n        label    \"\"\n        graphics\n        [\n            x    958.15\n            y    205.17\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    56\n        label    \"\"\n        graphics\n        [\n            x    273.62\n            y    896.27\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    57\n        label    \"\"\n        graphics\n        [\n            x    289.07\n            y    476.97\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    58\n        label    \"\"\n        graphics\n        [\n            x    752.51\n            y    47.61\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    59\n        label    \"\"\n        graphics\n        [\n            x    189.67\n            y    848.62\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    60\n        label    \"\"\n        graphics\n        [\n            x    63.38\n            y    867.55\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    61\n        label    \"\"\n        graphics\n        [\n            x    504.82\n            y    936.46\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    62\n        label    \"\"\n        graphics\n        [\n            x    0.35\n            y    142.84\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    63\n        label    \"\"\n        graphics\n        [\n            x    405.81\n            y    8.96\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    64\n        label    \"\"\n        graphics\n        [\n            x    278.04\n            y    822.83\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    65\n        label    \"\"\n        graphics\n        [\n            x    24.77\n            y    419.07\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    66\n        label    \"\"\n        graphics\n        [\n            x    695.77\n            y    767.26\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    67\n        label    \"\"\n        graphics\n        [\n            x    276.95\n            y    574.60\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    68\n        label    \"\"\n        graphics\n        [\n            x    484.94\n            y    864.79\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    69\n        label    \"\"\n        graphics\n        [\n            x    916.82\n            y    534.47\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    70\n        label    \"\"\n        graphics\n        [\n            x    615.43\n            y    265.21\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    71\n        label    \"\"\n        graphics\n        [\n            x    300.42\n            y    212.57\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    72\n        label    \"\"\n        graphics\n        [\n            x    715.36\n            y    875.09\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    73\n        label    \"\"\n        graphics\n        [\n            x    358.82\n            y    329.92\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    74\n        label    \"\"\n        graphics\n        [\n            x    698.03\n            y    864.59\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    75\n        label    \"\"\n        graphics\n        [\n            x    180.76\n            y    105.46\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    76\n        label    \"\"\n        graphics\n        [\n            x    623.47\n            y    842.07\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    77\n        label    \"\"\n        graphics\n        [\n            x    826.93\n            y    636.82\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    78\n        label    \"\"\n        graphics\n        [\n            x    691.74\n            y    821.82\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    79\n        label    \"\"\n        graphics\n        [\n            x    463.76\n            y    227.85\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    80\n        label    \"\"\n        graphics\n        [\n            x    689.32\n            y    382.08\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    81\n        label    \"\"\n        graphics\n        [\n            x    556.07\n            y    41.58\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    82\n        label    \"\"\n        graphics\n        [\n            x    260.57\n            y    48.22\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    83\n        label    \"\"\n        graphics\n        [\n            x    417.49\n            y    209.42\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    84\n        label    \"\"\n        graphics\n        [\n            x    158.54\n            y    786.09\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    85\n        label    \"\"\n        graphics\n        [\n            x    76.40\n            y    928.56\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    86\n        label    \"\"\n        graphics\n        [\n            x    449.82\n            y    629.09\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    87\n        label    \"\"\n        graphics\n        [\n            x    765.98\n            y    541.95\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    88\n        label    \"\"\n        graphics\n        [\n            x    324.64\n            y    336.16\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    89\n        label    \"\"\n        graphics\n        [\n            x    17.15\n            y    411.59\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    90\n        label    \"\"\n        graphics\n        [\n            x    286.68\n            y    65.59\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    91\n        label    \"\"\n        graphics\n        [\n            x    819.21\n            y    300.83\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    92\n        label    \"\"\n        graphics\n        [\n            x    177.14\n            y    279.16\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    93\n        label    \"\"\n        graphics\n        [\n            x    615.90\n            y    199.43\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    94\n        label    \"\"\n        graphics\n        [\n            x    936.57\n            y    883.43\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    95\n        label    \"\"\n        graphics\n        [\n            x    727.54\n            y    538.51\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    96\n        label    \"\"\n        graphics\n        [\n            x    669.87\n            y    805.88\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    97\n        label    \"\"\n        graphics\n        [\n            x    657.08\n            y    182.79\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    98\n        label    \"\"\n        graphics\n        [\n            x    477.42\n            y    712.62\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    99\n        label    \"\"\n        graphics\n        [\n            x    925.72\n            y    780.63\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    100\n        label    \"\"\n        graphics\n        [\n            x    504.52\n            y    375.63\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    101\n        label    \"\"\n        graphics\n        [\n            x    463.11\n            y    817.07\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    102\n        label    \"\"\n        graphics\n        [\n            x    849.49\n            y    826.51\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    103\n        label    \"\"\n        graphics\n        [\n            x    52.52\n            y    771.81\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    104\n        label    \"\"\n        graphics\n        [\n            x    813.61\n            y    894.89\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    105\n        label    \"\"\n        graphics\n        [\n            x    83.13\n            y    224.53\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    106\n        label    \"\"\n        graphics\n        [\n            x    233.87\n            y    722.78\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    107\n        label    \"\"\n        graphics\n        [\n            x    616.64\n            y    596.21\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    108\n        label    \"\"\n        graphics\n        [\n            x    610.69\n            y    782.65\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    109\n        label    \"\"\n        graphics\n        [\n            x    134.90\n            y    974.65\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    110\n        label    \"\"\n        graphics\n        [\n            x    325.42\n            y    567.34\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    111\n        label    \"\"\n        graphics\n        [\n            x    307.97\n            y    348.82\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    112\n        label    \"\"\n        graphics\n        [\n            x    691.78\n            y    78.44\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    113\n        label    \"\"\n        graphics\n        [\n            x    508.71\n            y    692.98\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    114\n        label    \"\"\n        graphics\n        [\n            x    23.90\n            y    709.59\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    115\n        label    \"\"\n        graphics\n        [\n            x    287.70\n            y    508.81\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    116\n        label    \"\"\n        graphics\n        [\n            x    126.12\n            y    89.05\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    117\n        label    \"\"\n        graphics\n        [\n            x    674.72\n            y    780.62\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    118\n        label    \"\"\n        graphics\n        [\n            x    574.79\n            y    665.10\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    119\n        label    \"\"\n        graphics\n        [\n            x    313.55\n            y    922.59\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    edge\n    [\n        source    1\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    10\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    100\n        target    96\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    101\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    102\n        target    59\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    103\n        target    100\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    104\n        target    72\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    105\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    106\n        target    92\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    107\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    108\n        target    87\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    109\n        target    73\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    11\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    110\n        target    44\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    111\n        target    39\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    112\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    113\n        target    83\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    114\n        target    55\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    115\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    116\n        target    101\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    117\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    118\n        target    83\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    119\n        target    117\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    12\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    13\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    14\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    15\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    16\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    17\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    18\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    19\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    2\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    20\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    21\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    22\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    23\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    24\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    25\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    26\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    27\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    28\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    29\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    3\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    30\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    31\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    32\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    33\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    34\n        target    30\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    35\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    36\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    37\n        target    19\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    38\n        target    36\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    39\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    4\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    40\n        target    35\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    41\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    42\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    43\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    44\n        target    30\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    45\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    46\n        target    37\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    47\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    48\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    49\n        target    19\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    5\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    50\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    51\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    52\n        target    42\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    53\n        target    20\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    54\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    55\n        target    44\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    56\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    57\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    58\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    58\n        target    80\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    59\n        target    51\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    6\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    60\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    61\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    62\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    63\n        target    31\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    64\n        target    62\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    65\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    66\n        target    33\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    67\n        target    49\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    68\n        target    29\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    69\n        target    55\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    7\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    70\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    71\n        target    49\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    72\n        target    39\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    73\n        target    49\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    74\n        target    29\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    75\n        target    74\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    76\n        target    74\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    77\n        target    45\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    78\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    79\n        target    29\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    8\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    80\n        target    77\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    81\n        target    68\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    82\n        target    73\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    83\n        target    61\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    84\n        target    59\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    85\n        target    72\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    86\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    87\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    88\n        target    61\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    89\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    9\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    90\n        target    85\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    91\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    92\n        target    62\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    93\n        target    45\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    94\n        target    84\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    95\n        target    34\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    96\n        target    83\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    97\n        target    47\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    98\n        target    36\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    99\n        target    41\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n]\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v120e120.tglf",
    "content": "0 602.000 126.000 30.000 30.000\n1 417.000 410.000 30.000 30.000\n2 131.000 309.000 30.000 30.000\n3 743.000 400.000 30.000 30.000\n4 96.000 166.000 30.000 30.000\n5 575.000 252.000 30.000 30.000\n6 832.000 293.000 30.000 30.000\n7 274.000 521.000 30.000 30.000\n8 825.000 655.000 30.000 30.000\n9 119.000 320.000 30.000 30.000\n10 179.000 931.000 30.000 30.000\n11 422.000 578.000 30.000 30.000\n12 427.000 71.000 30.000 30.000\n13 78.000 273.000 30.000 30.000\n14 495.000 367.000 30.000 30.000\n15 787.000 785.000 30.000 30.000\n16 745.000 916.000 30.000 30.000\n17 118.000 165.000 30.000 30.000\n18 710.000 494.000 30.000 30.000\n19 6.000 792.000 30.000 30.000\n20 800.000 293.000 30.000 30.000\n21 685.000 357.000 30.000 30.000\n22 836.000 960.000 30.000 30.000\n23 358.000 261.000 30.000 30.000\n24 326.000 704.000 30.000 30.000\n25 236.000 39.000 30.000 30.000\n26 606.000 865.000 30.000 30.000\n27 798.000 275.000 30.000 30.000\n28 327.000 885.000 30.000 30.000\n29 918.000 129.000 30.000 30.000\n30 548.000 270.000 30.000 30.000\n31 766.000 976.000 30.000 30.000\n32 139.000 186.000 30.000 30.000\n33 930.000 110.000 30.000 30.000\n34 683.000 607.000 30.000 30.000\n35 9.000 376.000 30.000 30.000\n36 31.000 125.000 30.000 30.000\n37 649.000 108.000 30.000 30.000\n38 354.000 425.000 30.000 30.000\n39 827.000 93.000 30.000 30.000\n40 161.000 969.000 30.000 30.000\n41 705.000 851.000 30.000 30.000\n42 758.000 490.000 30.000 30.000\n43 102.000 52.000 30.000 30.000\n44 404.000 200.000 30.000 30.000\n45 769.000 139.000 30.000 30.000\n46 599.000 911.000 30.000 30.000\n47 306.000 872.000 30.000 30.000\n48 702.000 263.000 30.000 30.000\n49 372.000 261.000 30.000 30.000\n50 181.000 221.000 30.000 30.000\n51 194.000 252.000 30.000 30.000\n52 80.000 155.000 30.000 30.000\n53 534.000 457.000 30.000 30.000\n54 483.000 772.000 30.000 30.000\n55 958.000 205.000 30.000 30.000\n56 273.000 896.000 30.000 30.000\n57 289.000 476.000 30.000 30.000\n58 752.000 47.000 30.000 30.000\n59 189.000 848.000 30.000 30.000\n60 63.000 867.000 30.000 30.000\n61 504.000 936.000 30.000 30.000\n62 0.000 142.000 30.000 30.000\n63 405.000 8.000 30.000 30.000\n64 278.000 822.000 30.000 30.000\n65 24.000 419.000 30.000 30.000\n66 695.000 767.000 30.000 30.000\n67 276.000 574.000 30.000 30.000\n68 484.000 864.000 30.000 30.000\n69 916.000 534.000 30.000 30.000\n70 615.000 265.000 30.000 30.000\n71 300.000 212.000 30.000 30.000\n72 715.000 875.000 30.000 30.000\n73 358.000 329.000 30.000 30.000\n74 698.000 864.000 30.000 30.000\n75 180.000 105.000 30.000 30.000\n76 623.000 842.000 30.000 30.000\n77 826.000 636.000 30.000 30.000\n78 691.000 821.000 30.000 30.000\n79 463.000 227.000 30.000 30.000\n80 689.000 382.000 30.000 30.000\n81 556.000 41.000 30.000 30.000\n82 260.000 48.000 30.000 30.000\n83 417.000 209.000 30.000 30.000\n84 158.000 786.000 30.000 30.000\n85 76.000 928.000 30.000 30.000\n86 449.000 629.000 30.000 30.000\n87 765.000 541.000 30.000 30.000\n88 324.000 336.000 30.000 30.000\n89 17.000 411.000 30.000 30.000\n90 286.000 65.000 30.000 30.000\n91 819.000 300.000 30.000 30.000\n92 177.000 279.000 30.000 30.000\n93 615.000 199.000 30.000 30.000\n94 936.000 883.000 30.000 30.000\n95 727.000 538.000 30.000 30.000\n96 669.000 805.000 30.000 30.000\n97 657.000 182.000 30.000 30.000\n98 477.000 712.000 30.000 30.000\n99 925.000 780.000 30.000 30.000\n100 504.000 375.000 30.000 30.000\n101 463.000 817.000 30.000 30.000\n102 849.000 826.000 30.000 30.000\n103 52.000 771.000 30.000 30.000\n104 813.000 894.000 30.000 30.000\n105 83.000 224.000 30.000 30.000\n106 233.000 722.000 30.000 30.000\n107 616.000 596.000 30.000 30.000\n108 610.000 782.000 30.000 30.000\n109 134.000 974.000 30.000 30.000\n110 325.000 567.000 30.000 30.000\n111 307.000 348.000 30.000 30.000\n112 691.000 78.000 30.000 30.000\n113 508.000 692.000 30.000 30.000\n114 23.000 709.000 30.000 30.000\n115 287.000 508.000 30.000 30.000\n116 126.000 89.000 30.000 30.000\n117 674.000 780.000 30.000 30.000\n118 574.000 665.000 30.000 30.000\n119 313.000 922.000 30.000 30.000\n#\n88 61\n90 85\n74 29\n76 74\n50 17\n33 15\n113 83\n12 10\n114 55\n46 37\n20 13\n91 23\n16 13\n24 1\n107 6\n100 96\n108 87\n106 92\n60 17\n53 20\n119 117\n38 36\n63 31\n75 74\n85 72\n71 49\n2 0\n56 16\n72 39\n29 16\n15 13\n66 33\n34 30\n55 44\n79 29\n11 6\n52 42\n117 9\n118 83\n62 8\n49 19\n10 8\n81 68\n17 13\n6 3\n18 9\n14 4\n103 100\n3 1\n112 23\n58 8\n43 10\n99 41\n68 29\n22 4\n116 101\n30 1\n94 84\n7 4\n39 18\n26 8\n9 4\n86 9\n36 3\n82 73\n83 61\n21 13\n61 16\n93 45\n23 1\n4 3\n40 35\n115 9\n54 7\n35 21\n98 36\n97 47\n59 51\n51 3\n80 77\n78 5\n47 3\n64 62\n31 23\n77 45\n92 62\n48 4\n19 12\n57 14\n58 80\n110 44\n89 21\n8 2\n102 59\n101 14\n1 0\n25 0\n13 4\n84 59\n42 23\n95 34\n105 7\n32 14\n87 6\n111 39\n96 83\n5 4\n65 3\n44 30\n104 72\n27 13\n41 11\n70 3\n37 19\n28 17\n67 49\n69 55\n109 73\n45 8\n73 49\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v120e132.gml",
    "content": "graph\n[\n    node\n    [\n        id    0\n        label    \"\"\n        graphics\n        [\n            x    859.72\n            y    917.44\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    1\n        label    \"\"\n        graphics\n        [\n            x    139.38\n            y    732.79\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    2\n        label    \"\"\n        graphics\n        [\n            x    429.84\n            y    256.72\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    3\n        label    \"\"\n        graphics\n        [\n            x    654.14\n            y    897.54\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    4\n        label    \"\"\n        graphics\n        [\n            x    14.96\n            y    37.33\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    5\n        label    \"\"\n        graphics\n        [\n            x    744.42\n            y    56.40\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    6\n        label    \"\"\n        graphics\n        [\n            x    188.23\n            y    329.62\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    7\n        label    \"\"\n        graphics\n        [\n            x    891.71\n            y    85.34\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    8\n        label    \"\"\n        graphics\n        [\n            x    71.60\n            y    560.98\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    9\n        label    \"\"\n        graphics\n        [\n            x    916.75\n            y    310.71\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    10\n        label    \"\"\n        graphics\n        [\n            x    309.35\n            y    880.48\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    11\n        label    \"\"\n        graphics\n        [\n            x    920.91\n            y    12.93\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    12\n        label    \"\"\n        graphics\n        [\n            x    374.48\n            y    44.00\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    13\n        label    \"\"\n        graphics\n        [\n            x    588.18\n            y    644.49\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    14\n        label    \"\"\n        graphics\n        [\n            x    519.44\n            y    469.39\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    15\n        label    \"\"\n        graphics\n        [\n            x    128.47\n            y    122.15\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    16\n        label    \"\"\n        graphics\n        [\n            x    686.64\n            y    105.33\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    17\n        label    \"\"\n        graphics\n        [\n            x    382.32\n            y    457.03\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    18\n        label    \"\"\n        graphics\n        [\n            x    148.53\n            y    264.39\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    19\n        label    \"\"\n        graphics\n        [\n            x    363.28\n            y    875.12\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    20\n        label    \"\"\n        graphics\n        [\n            x    757.17\n            y    41.72\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    21\n        label    \"\"\n        graphics\n        [\n            x    855.61\n            y    94.29\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    22\n        label    \"\"\n        graphics\n        [\n            x    836.80\n            y    759.58\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    23\n        label    \"\"\n        graphics\n        [\n            x    770.25\n            y    183.57\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    24\n        label    \"\"\n        graphics\n        [\n            x    372.72\n            y    497.90\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    25\n        label    \"\"\n        graphics\n        [\n            x    756.84\n            y    653.05\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    26\n        label    \"\"\n        graphics\n        [\n            x    722.80\n            y    670.69\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    27\n        label    \"\"\n        graphics\n        [\n            x    732.79\n            y    658.40\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    28\n        label    \"\"\n        graphics\n        [\n            x    543.18\n            y    314.44\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    29\n        label    \"\"\n        graphics\n        [\n            x    911.87\n            y    755.38\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    30\n        label    \"\"\n        graphics\n        [\n            x    823.10\n            y    909.77\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    31\n        label    \"\"\n        graphics\n        [\n            x    42.87\n            y    958.47\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    32\n        label    \"\"\n        graphics\n        [\n            x    427.25\n            y    667.17\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    33\n        label    \"\"\n        graphics\n        [\n            x    2.29\n            y    373.84\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    34\n        label    \"\"\n        graphics\n        [\n            x    315.63\n            y    115.00\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    35\n        label    \"\"\n        graphics\n        [\n            x    206.89\n            y    445.91\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    36\n        label    \"\"\n        graphics\n        [\n            x    201.40\n            y    679.56\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    37\n        label    \"\"\n        graphics\n        [\n            x    595.71\n            y    512.61\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    38\n        label    \"\"\n        graphics\n        [\n            x    264.56\n            y    840.61\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    39\n        label    \"\"\n        graphics\n        [\n            x    365.77\n            y    36.34\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    40\n        label    \"\"\n        graphics\n        [\n            x    44.73\n            y    928.05\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    41\n        label    \"\"\n        graphics\n        [\n            x    871.28\n            y    946.18\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    42\n        label    \"\"\n        graphics\n        [\n            x    114.11\n            y    701.97\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    43\n        label    \"\"\n        graphics\n        [\n            x    138.87\n            y    752.79\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    44\n        label    \"\"\n        graphics\n        [\n            x    136.43\n            y    236.27\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    45\n        label    \"\"\n        graphics\n        [\n            x    134.43\n            y    321.23\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    46\n        label    \"\"\n        graphics\n        [\n            x    557.75\n            y    289.28\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    47\n        label    \"\"\n        graphics\n        [\n            x    943.39\n            y    85.20\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    48\n        label    \"\"\n        graphics\n        [\n            x    170.27\n            y    103.58\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    49\n        label    \"\"\n        graphics\n        [\n            x    131.72\n            y    91.51\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    50\n        label    \"\"\n        graphics\n        [\n            x    61.36\n            y    19.06\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    51\n        label    \"\"\n        graphics\n        [\n            x    70.77\n            y    478.27\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    52\n        label    \"\"\n        graphics\n        [\n            x    551.19\n            y    496.65\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    53\n        label    \"\"\n        graphics\n        [\n            x    833.16\n            y    789.20\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    54\n        label    \"\"\n        graphics\n        [\n            x    80.39\n            y    752.99\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    55\n        label    \"\"\n        graphics\n        [\n            x    141.48\n            y    667.95\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    56\n        label    \"\"\n        graphics\n        [\n            x    90.64\n            y    63.73\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    57\n        label    \"\"\n        graphics\n        [\n            x    662.49\n            y    235.83\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    58\n        label    \"\"\n        graphics\n        [\n            x    645.27\n            y    401.79\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    59\n        label    \"\"\n        graphics\n        [\n            x    692.40\n            y    519.48\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    60\n        label    \"\"\n        graphics\n        [\n            x    208.00\n            y    906.88\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    61\n        label    \"\"\n        graphics\n        [\n            x    379.20\n            y    514.53\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    62\n        label    \"\"\n        graphics\n        [\n            x    740.40\n            y    253.44\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    63\n        label    \"\"\n        graphics\n        [\n            x    142.25\n            y    107.76\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    64\n        label    \"\"\n        graphics\n        [\n            x    83.28\n            y    247.92\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    65\n        label    \"\"\n        graphics\n        [\n            x    443.65\n            y    523.66\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    66\n        label    \"\"\n        graphics\n        [\n            x    133.03\n            y    364.98\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    67\n        label    \"\"\n        graphics\n        [\n            x    691.50\n            y    720.21\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    68\n        label    \"\"\n        graphics\n        [\n            x    218.60\n            y    284.83\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    69\n        label    \"\"\n        graphics\n        [\n            x    277.50\n            y    74.62\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    70\n        label    \"\"\n        graphics\n        [\n            x    195.91\n            y    681.41\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    71\n        label    \"\"\n        graphics\n        [\n            x    553.54\n            y    147.39\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    72\n        label    \"\"\n        graphics\n        [\n            x    571.10\n            y    815.02\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    73\n        label    \"\"\n        graphics\n        [\n            x    485.52\n            y    457.60\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    74\n        label    \"\"\n        graphics\n        [\n            x    249.19\n            y    447.32\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    75\n        label    \"\"\n        graphics\n        [\n            x    139.36\n            y    674.36\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    76\n        label    \"\"\n        graphics\n        [\n            x    331.24\n            y    392.67\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    77\n        label    \"\"\n        graphics\n        [\n            x    214.21\n            y    183.63\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    78\n        label    \"\"\n        graphics\n        [\n            x    87.69\n            y    939.44\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    79\n        label    \"\"\n        graphics\n        [\n            x    176.97\n            y    412.42\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    80\n        label    \"\"\n        graphics\n        [\n            x    434.64\n            y    229.15\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    81\n        label    \"\"\n        graphics\n        [\n            x    621.69\n            y    182.29\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    82\n        label    \"\"\n        graphics\n        [\n            x    252.51\n            y    249.96\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    83\n        label    \"\"\n        graphics\n        [\n            x    145.91\n            y    260.90\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    84\n        label    \"\"\n        graphics\n        [\n            x    403.79\n            y    215.57\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    85\n        label    \"\"\n        graphics\n        [\n            x    472.17\n            y    231.64\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    86\n        label    \"\"\n        graphics\n        [\n            x    185.35\n            y    408.76\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    87\n        label    \"\"\n        graphics\n        [\n            x    800.07\n            y    892.65\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    88\n        label    \"\"\n        graphics\n        [\n            x    225.43\n            y    156.73\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    89\n        label    \"\"\n        graphics\n        [\n            x    187.09\n            y    791.26\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    90\n        label    \"\"\n        graphics\n        [\n            x    685.23\n            y    847.26\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    91\n        label    \"\"\n        graphics\n        [\n            x    583.70\n            y    674.78\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    92\n        label    \"\"\n        graphics\n        [\n            x    525.92\n            y    63.95\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    93\n        label    \"\"\n        graphics\n        [\n            x    979.69\n            y    291.04\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    94\n        label    \"\"\n        graphics\n        [\n            x    407.48\n            y    298.48\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    95\n        label    \"\"\n        graphics\n        [\n            x    430.34\n            y    196.78\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    96\n        label    \"\"\n        graphics\n        [\n            x    68.72\n            y    105.08\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    97\n        label    \"\"\n        graphics\n        [\n            x    885.19\n            y    590.72\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    98\n        label    \"\"\n        graphics\n        [\n            x    698.40\n            y    879.09\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    99\n        label    \"\"\n        graphics\n        [\n            x    852.10\n            y    571.07\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    100\n        label    \"\"\n        graphics\n        [\n            x    838.14\n            y    823.40\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    101\n        label    \"\"\n        graphics\n        [\n            x    957.24\n            y    708.48\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    102\n        label    \"\"\n        graphics\n        [\n            x    445.47\n            y    715.07\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    103\n        label    \"\"\n        graphics\n        [\n            x    640.57\n            y    358.83\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    104\n        label    \"\"\n        graphics\n        [\n            x    721.00\n            y    714.54\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    105\n        label    \"\"\n        graphics\n        [\n            x    374.02\n            y    804.41\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    106\n        label    \"\"\n        graphics\n        [\n            x    317.14\n            y    36.02\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    107\n        label    \"\"\n        graphics\n        [\n            x    872.41\n            y    614.24\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    108\n        label    \"\"\n        graphics\n        [\n            x    229.12\n            y    163.84\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    109\n        label    \"\"\n        graphics\n        [\n            x    163.33\n            y    620.60\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    110\n        label    \"\"\n        graphics\n        [\n            x    494.14\n            y    827.78\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    111\n        label    \"\"\n        graphics\n        [\n            x    743.59\n            y    268.50\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    112\n        label    \"\"\n        graphics\n        [\n            x    971.82\n            y    132.96\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    113\n        label    \"\"\n        graphics\n        [\n            x    83.45\n            y    917.43\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    114\n        label    \"\"\n        graphics\n        [\n            x    11.02\n            y    382.63\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    115\n        label    \"\"\n        graphics\n        [\n            x    654.50\n            y    126.05\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    116\n        label    \"\"\n        graphics\n        [\n            x    691.96\n            y    965.76\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    117\n        label    \"\"\n        graphics\n        [\n            x    782.79\n            y    716.60\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    118\n        label    \"\"\n        graphics\n        [\n            x    864.35\n            y    500.88\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    119\n        label    \"\"\n        graphics\n        [\n            x    201.01\n            y    746.19\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    edge\n    [\n        source    1\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    10\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    100\n        target    63\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    101\n        target    44\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    101\n        target    73\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    102\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    103\n        target    87\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    104\n        target    86\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    105\n        target    101\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    106\n        target    104\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    107\n        target    34\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    108\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    108\n        target    58\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    109\n        target    76\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    11\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    110\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    111\n        target    56\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    112\n        target    26\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    113\n        target    32\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    114\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    115\n        target    45\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    115\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    116\n        target    112\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    117\n        target    26\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    118\n        target    79\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    119\n        target    38\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    12\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    13\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    14\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    15\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    16\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    17\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    18\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    19\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    2\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    20\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    21\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    22\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    23\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    24\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    25\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    26\n        target    19\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    27\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    27\n        target    87\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    28\n        target    19\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    29\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    3\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    30\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    31\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    32\n        target    25\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    33\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    34\n        target    30\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    35\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    36\n        target    33\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    37\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    38\n        target    25\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    39\n        target    38\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    39\n        target    70\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    4\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    40\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    41\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    42\n        target    24\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    43\n        target    25\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    44\n        target    26\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    45\n        target    27\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    46\n        target    45\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    47\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    48\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    49\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    5\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    50\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    51\n        target    45\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    52\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    53\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    54\n        target    34\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    55\n        target    29\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    56\n        target    45\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    57\n        target    54\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    58\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    59\n        target    30\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    6\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    60\n        target    58\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    61\n        target    53\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    62\n        target    43\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    63\n        target    36\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    64\n        target    119\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    64\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    65\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    66\n        target    25\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    67\n        target    46\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    68\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    69\n        target    37\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    7\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    70\n        target    25\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    71\n        target    37\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    72\n        target    33\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    73\n        target    37\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    74\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    75\n        target    36\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    76\n        target    111\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    76\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    76\n        target    94\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    77\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    78\n        target    52\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    79\n        target    26\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    79\n        target    53\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    8\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    80\n        target    31\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    80\n        target    34\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    81\n        target    65\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    82\n        target    35\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    83\n        target    59\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    84\n        target    59\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    85\n        target    36\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    86\n        target    70\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    87\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    88\n        target    55\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    89\n        target    35\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    9\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    9\n        target    50\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    90\n        target    69\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    91\n        target    39\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    92\n        target    26\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    93\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    94\n        target    35\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    95\n        target    55\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    96\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    97\n        target    62\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    97\n        target    96\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    98\n        target    102\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    98\n        target    38\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    99\n        target    91\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n]\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v120e132.tglf",
    "content": "0 859.000 917.000 30.000 30.000\n1 139.000 732.000 30.000 30.000\n2 429.000 256.000 30.000 30.000\n3 654.000 897.000 30.000 30.000\n4 14.000 37.000 30.000 30.000\n5 744.000 56.000 30.000 30.000\n6 188.000 329.000 30.000 30.000\n7 891.000 85.000 30.000 30.000\n8 71.000 560.000 30.000 30.000\n9 916.000 310.000 30.000 30.000\n10 309.000 880.000 30.000 30.000\n11 920.000 12.000 30.000 30.000\n12 374.000 44.000 30.000 30.000\n13 588.000 644.000 30.000 30.000\n14 519.000 469.000 30.000 30.000\n15 128.000 122.000 30.000 30.000\n16 686.000 105.000 30.000 30.000\n17 382.000 457.000 30.000 30.000\n18 148.000 264.000 30.000 30.000\n19 363.000 875.000 30.000 30.000\n20 757.000 41.000 30.000 30.000\n21 855.000 94.000 30.000 30.000\n22 836.000 759.000 30.000 30.000\n23 770.000 183.000 30.000 30.000\n24 372.000 497.000 30.000 30.000\n25 756.000 653.000 30.000 30.000\n26 722.000 670.000 30.000 30.000\n27 732.000 658.000 30.000 30.000\n28 543.000 314.000 30.000 30.000\n29 911.000 755.000 30.000 30.000\n30 823.000 909.000 30.000 30.000\n31 42.000 958.000 30.000 30.000\n32 427.000 667.000 30.000 30.000\n33 2.000 373.000 30.000 30.000\n34 315.000 115.000 30.000 30.000\n35 206.000 445.000 30.000 30.000\n36 201.000 679.000 30.000 30.000\n37 595.000 512.000 30.000 30.000\n38 264.000 840.000 30.000 30.000\n39 365.000 36.000 30.000 30.000\n40 44.000 928.000 30.000 30.000\n41 871.000 946.000 30.000 30.000\n42 114.000 701.000 30.000 30.000\n43 138.000 752.000 30.000 30.000\n44 136.000 236.000 30.000 30.000\n45 134.000 321.000 30.000 30.000\n46 557.000 289.000 30.000 30.000\n47 943.000 85.000 30.000 30.000\n48 170.000 103.000 30.000 30.000\n49 131.000 91.000 30.000 30.000\n50 61.000 19.000 30.000 30.000\n51 70.000 478.000 30.000 30.000\n52 551.000 496.000 30.000 30.000\n53 833.000 789.000 30.000 30.000\n54 80.000 752.000 30.000 30.000\n55 141.000 667.000 30.000 30.000\n56 90.000 63.000 30.000 30.000\n57 662.000 235.000 30.000 30.000\n58 645.000 401.000 30.000 30.000\n59 692.000 519.000 30.000 30.000\n60 208.000 906.000 30.000 30.000\n61 379.000 514.000 30.000 30.000\n62 740.000 253.000 30.000 30.000\n63 142.000 107.000 30.000 30.000\n64 83.000 247.000 30.000 30.000\n65 443.000 523.000 30.000 30.000\n66 133.000 364.000 30.000 30.000\n67 691.000 720.000 30.000 30.000\n68 218.000 284.000 30.000 30.000\n69 277.000 74.000 30.000 30.000\n70 195.000 681.000 30.000 30.000\n71 553.000 147.000 30.000 30.000\n72 571.000 815.000 30.000 30.000\n73 485.000 457.000 30.000 30.000\n74 249.000 447.000 30.000 30.000\n75 139.000 674.000 30.000 30.000\n76 331.000 392.000 30.000 30.000\n77 214.000 183.000 30.000 30.000\n78 87.000 939.000 30.000 30.000\n79 176.000 412.000 30.000 30.000\n80 434.000 229.000 30.000 30.000\n81 621.000 182.000 30.000 30.000\n82 252.000 249.000 30.000 30.000\n83 145.000 260.000 30.000 30.000\n84 403.000 215.000 30.000 30.000\n85 472.000 231.000 30.000 30.000\n86 185.000 408.000 30.000 30.000\n87 800.000 892.000 30.000 30.000\n88 225.000 156.000 30.000 30.000\n89 187.000 791.000 30.000 30.000\n90 685.000 847.000 30.000 30.000\n91 583.000 674.000 30.000 30.000\n92 525.000 63.000 30.000 30.000\n93 979.000 291.000 30.000 30.000\n94 407.000 298.000 30.000 30.000\n95 430.000 196.000 30.000 30.000\n96 68.000 105.000 30.000 30.000\n97 885.000 590.000 30.000 30.000\n98 698.000 879.000 30.000 30.000\n99 852.000 571.000 30.000 30.000\n100 838.000 823.000 30.000 30.000\n101 957.000 708.000 30.000 30.000\n102 445.000 715.000 30.000 30.000\n103 640.000 358.000 30.000 30.000\n104 721.000 714.000 30.000 30.000\n105 374.000 804.000 30.000 30.000\n106 317.000 36.000 30.000 30.000\n107 872.000 614.000 30.000 30.000\n108 229.000 163.000 30.000 30.000\n109 163.000 620.000 30.000 30.000\n110 494.000 827.000 30.000 30.000\n111 743.000 268.000 30.000 30.000\n112 971.000 132.000 30.000 30.000\n113 83.000 917.000 30.000 30.000\n114 11.000 382.000 30.000 30.000\n115 654.000 126.000 30.000 30.000\n116 691.000 965.000 30.000 30.000\n117 782.000 716.000 30.000 30.000\n118 864.000 500.000 30.000 30.000\n119 201.000 746.000 30.000 30.000\n#\n14 7\n89 35\n102 21\n44 26\n50 11\n74 21\n73 37\n113 32\n24 7\n76 94\n9 50\n22 15\n26 19\n80 31\n16 8\n31 6\n15 14\n98 102\n6 1\n112 26\n104 86\n36 33\n103 87\n72 33\n56 45\n34 30\n87 9\n27 16\n62 43\n38 25\n32 25\n2 0\n92 26\n81 65\n68 9\n94 35\n45 27\n93 4\n111 56\n108 10\n9 2\n106 104\n78 52\n80 34\n85 36\n79 26\n79 53\n17 2\n109 76\n28 19\n88 55\n20 2\n41 17\n95 55\n48 7\n96 3\n99 91\n29 16\n60 58\n115 7\n18 5\n51 45\n49 17\n76 9\n4 3\n83 59\n7 4\n61 53\n115 45\n53 22\n101 73\n59 30\n39 70\n97 96\n76 111\n55 29\n12 1\n118 79\n27 87\n11 1\n58 12\n70 25\n75 36\n37 16\n97 62\n84 59\n105 101\n47 7\n91 39\n1 0\n39 38\n5 0\n77 18\n98 38\n101 44\n54 34\n65 13\n25 15\n108 58\n90 69\n35 21\n57 54\n67 46\n114 3\n117 26\n21 13\n42 24\n43 25\n46 45\n107 34\n119 38\n110 2\n64 119\n64 18\n86 70\n23 14\n52 4\n82 35\n10 0\n8 1\n30 15\n69 37\n40 23\n66 25\n63 36\n33 5\n116 112\n3 1\n100 63\n71 37\n19 14\n13 3\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v120e144.gml",
    "content": "graph\n[\n    node\n    [\n        id    0\n        label    \"\"\n        graphics\n        [\n            x    827.69\n            y    577.14\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    1\n        label    \"\"\n        graphics\n        [\n            x    673.61\n            y    165.98\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    2\n        label    \"\"\n        graphics\n        [\n            x    576.77\n            y    744.79\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    3\n        label    \"\"\n        graphics\n        [\n            x    53.85\n            y    695.79\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    4\n        label    \"\"\n        graphics\n        [\n            x    283.21\n            y    402.64\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    5\n        label    \"\"\n        graphics\n        [\n            x    885.77\n            y    81.33\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    6\n        label    \"\"\n        graphics\n        [\n            x    449.52\n            y    496.35\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    7\n        label    \"\"\n        graphics\n        [\n            x    419.23\n            y    42.92\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    8\n        label    \"\"\n        graphics\n        [\n            x    191.43\n            y    822.86\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    9\n        label    \"\"\n        graphics\n        [\n            x    737.37\n            y    137.45\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    10\n        label    \"\"\n        graphics\n        [\n            x    755.53\n            y    455.71\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    11\n        label    \"\"\n        graphics\n        [\n            x    636.63\n            y    957.76\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    12\n        label    \"\"\n        graphics\n        [\n            x    824.83\n            y    184.67\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    13\n        label    \"\"\n        graphics\n        [\n            x    261.16\n            y    706.37\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    14\n        label    \"\"\n        graphics\n        [\n            x    482.85\n            y    793.98\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    15\n        label    \"\"\n        graphics\n        [\n            x    577.51\n            y    742.34\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    16\n        label    \"\"\n        graphics\n        [\n            x    600.73\n            y    387.73\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    17\n        label    \"\"\n        graphics\n        [\n            x    99.45\n            y    830.39\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    18\n        label    \"\"\n        graphics\n        [\n            x    415.84\n            y    90.56\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    19\n        label    \"\"\n        graphics\n        [\n            x    14.35\n            y    697.31\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    20\n        label    \"\"\n        graphics\n        [\n            x    689.10\n            y    467.78\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    21\n        label    \"\"\n        graphics\n        [\n            x    47.76\n            y    325.21\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    22\n        label    \"\"\n        graphics\n        [\n            x    373.79\n            y    631.88\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    23\n        label    \"\"\n        graphics\n        [\n            x    493.83\n            y    380.69\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    24\n        label    \"\"\n        graphics\n        [\n            x    539.23\n            y    554.38\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    25\n        label    \"\"\n        graphics\n        [\n            x    258.31\n            y    767.07\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    26\n        label    \"\"\n        graphics\n        [\n            x    267.15\n            y    274.33\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    27\n        label    \"\"\n        graphics\n        [\n            x    211.43\n            y    726.78\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    28\n        label    \"\"\n        graphics\n        [\n            x    30.36\n            y    200.04\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    29\n        label    \"\"\n        graphics\n        [\n            x    915.02\n            y    848.52\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    30\n        label    \"\"\n        graphics\n        [\n            x    424.81\n            y    61.69\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    31\n        label    \"\"\n        graphics\n        [\n            x    831.04\n            y    679.98\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    32\n        label    \"\"\n        graphics\n        [\n            x    95.17\n            y    276.68\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    33\n        label    \"\"\n        graphics\n        [\n            x    394.77\n            y    561.70\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    34\n        label    \"\"\n        graphics\n        [\n            x    749.27\n            y    731.29\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    35\n        label    \"\"\n        graphics\n        [\n            x    801.27\n            y    210.61\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    36\n        label    \"\"\n        graphics\n        [\n            x    525.89\n            y    933.90\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    37\n        label    \"\"\n        graphics\n        [\n            x    770.58\n            y    138.25\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    38\n        label    \"\"\n        graphics\n        [\n            x    579.15\n            y    811.62\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    39\n        label    \"\"\n        graphics\n        [\n            x    556.06\n            y    411.19\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    40\n        label    \"\"\n        graphics\n        [\n            x    668.44\n            y    354.02\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    41\n        label    \"\"\n        graphics\n        [\n            x    135.57\n            y    898.85\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    42\n        label    \"\"\n        graphics\n        [\n            x    220.21\n            y    418.83\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    43\n        label    \"\"\n        graphics\n        [\n            x    635.27\n            y    238.51\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    44\n        label    \"\"\n        graphics\n        [\n            x    125.00\n            y    467.67\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    45\n        label    \"\"\n        graphics\n        [\n            x    325.76\n            y    785.69\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    46\n        label    \"\"\n        graphics\n        [\n            x    625.06\n            y    756.92\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    47\n        label    \"\"\n        graphics\n        [\n            x    151.70\n            y    339.75\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    48\n        label    \"\"\n        graphics\n        [\n            x    888.09\n            y    901.50\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    49\n        label    \"\"\n        graphics\n        [\n            x    545.57\n            y    230.27\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    50\n        label    \"\"\n        graphics\n        [\n            x    540.17\n            y    376.22\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    51\n        label    \"\"\n        graphics\n        [\n            x    248.13\n            y    911.46\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    52\n        label    \"\"\n        graphics\n        [\n            x    848.31\n            y    340.82\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    53\n        label    \"\"\n        graphics\n        [\n            x    425.58\n            y    249.05\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    54\n        label    \"\"\n        graphics\n        [\n            x    335.56\n            y    22.32\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    55\n        label    \"\"\n        graphics\n        [\n            x    490.11\n            y    700.27\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    56\n        label    \"\"\n        graphics\n        [\n            x    413.34\n            y    60.96\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    57\n        label    \"\"\n        graphics\n        [\n            x    490.43\n            y    299.34\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    58\n        label    \"\"\n        graphics\n        [\n            x    510.66\n            y    864.94\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    59\n        label    \"\"\n        graphics\n        [\n            x    691.40\n            y    503.54\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    60\n        label    \"\"\n        graphics\n        [\n            x    279.76\n            y    840.92\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    61\n        label    \"\"\n        graphics\n        [\n            x    89.83\n            y    522.64\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    62\n        label    \"\"\n        graphics\n        [\n            x    194.33\n            y    834.34\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    63\n        label    \"\"\n        graphics\n        [\n            x    445.57\n            y    945.99\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    64\n        label    \"\"\n        graphics\n        [\n            x    211.31\n            y    567.83\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    65\n        label    \"\"\n        graphics\n        [\n            x    636.86\n            y    824.94\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    66\n        label    \"\"\n        graphics\n        [\n            x    760.40\n            y    579.47\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    67\n        label    \"\"\n        graphics\n        [\n            x    782.64\n            y    771.95\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    68\n        label    \"\"\n        graphics\n        [\n            x    338.03\n            y    361.51\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    69\n        label    \"\"\n        graphics\n        [\n            x    296.78\n            y    631.23\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    70\n        label    \"\"\n        graphics\n        [\n            x    857.42\n            y    24.68\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    71\n        label    \"\"\n        graphics\n        [\n            x    96.36\n            y    780.21\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    72\n        label    \"\"\n        graphics\n        [\n            x    315.77\n            y    458.28\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    73\n        label    \"\"\n        graphics\n        [\n            x    170.05\n            y    392.35\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    74\n        label    \"\"\n        graphics\n        [\n            x    189.93\n            y    942.71\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    75\n        label    \"\"\n        graphics\n        [\n            x    27.35\n            y    565.03\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    76\n        label    \"\"\n        graphics\n        [\n            x    392.74\n            y    92.78\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    77\n        label    \"\"\n        graphics\n        [\n            x    303.96\n            y    950.92\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    78\n        label    \"\"\n        graphics\n        [\n            x    755.26\n            y    444.44\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    79\n        label    \"\"\n        graphics\n        [\n            x    416.43\n            y    468.69\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    80\n        label    \"\"\n        graphics\n        [\n            x    438.77\n            y    86.29\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    81\n        label    \"\"\n        graphics\n        [\n            x    353.15\n            y    457.86\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    82\n        label    \"\"\n        graphics\n        [\n            x    903.31\n            y    360.94\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    83\n        label    \"\"\n        graphics\n        [\n            x    498.92\n            y    898.50\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    84\n        label    \"\"\n        graphics\n        [\n            x    834.97\n            y    787.64\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    85\n        label    \"\"\n        graphics\n        [\n            x    405.30\n            y    19.15\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    86\n        label    \"\"\n        graphics\n        [\n            x    245.75\n            y    984.98\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    87\n        label    \"\"\n        graphics\n        [\n            x    501.68\n            y    634.85\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    88\n        label    \"\"\n        graphics\n        [\n            x    369.74\n            y    101.01\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    89\n        label    \"\"\n        graphics\n        [\n            x    472.09\n            y    51.40\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    90\n        label    \"\"\n        graphics\n        [\n            x    641.54\n            y    298.07\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    91\n        label    \"\"\n        graphics\n        [\n            x    600.53\n            y    149.98\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    92\n        label    \"\"\n        graphics\n        [\n            x    60.15\n            y    742.98\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    93\n        label    \"\"\n        graphics\n        [\n            x    259.11\n            y    504.45\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    94\n        label    \"\"\n        graphics\n        [\n            x    323.83\n            y    693.64\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    95\n        label    \"\"\n        graphics\n        [\n            x    580.51\n            y    624.38\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    96\n        label    \"\"\n        graphics\n        [\n            x    720.12\n            y    129.18\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    97\n        label    \"\"\n        graphics\n        [\n            x    449.07\n            y    335.05\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    98\n        label    \"\"\n        graphics\n        [\n            x    338.17\n            y    303.35\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    99\n        label    \"\"\n        graphics\n        [\n            x    66.22\n            y    115.25\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    100\n        label    \"\"\n        graphics\n        [\n            x    455.87\n            y    74.86\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    101\n        label    \"\"\n        graphics\n        [\n            x    338.72\n            y    407.72\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    102\n        label    \"\"\n        graphics\n        [\n            x    197.77\n            y    581.88\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    103\n        label    \"\"\n        graphics\n        [\n            x    122.01\n            y    359.75\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    104\n        label    \"\"\n        graphics\n        [\n            x    192.15\n            y    176.12\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    105\n        label    \"\"\n        graphics\n        [\n            x    914.69\n            y    575.70\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    106\n        label    \"\"\n        graphics\n        [\n            x    222.80\n            y    549.60\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    107\n        label    \"\"\n        graphics\n        [\n            x    444.76\n            y    874.18\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    108\n        label    \"\"\n        graphics\n        [\n            x    537.09\n            y    864.99\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    109\n        label    \"\"\n        graphics\n        [\n            x    10.03\n            y    16.42\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    110\n        label    \"\"\n        graphics\n        [\n            x    340.67\n            y    347.18\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    111\n        label    \"\"\n        graphics\n        [\n            x    119.80\n            y    648.25\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    112\n        label    \"\"\n        graphics\n        [\n            x    549.02\n            y    503.26\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    113\n        label    \"\"\n        graphics\n        [\n            x    851.87\n            y    741.90\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    114\n        label    \"\"\n        graphics\n        [\n            x    753.61\n            y    705.67\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    115\n        label    \"\"\n        graphics\n        [\n            x    331.31\n            y    849.40\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    116\n        label    \"\"\n        graphics\n        [\n            x    642.63\n            y    286.85\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    117\n        label    \"\"\n        graphics\n        [\n            x    872.29\n            y    486.31\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    118\n        label    \"\"\n        graphics\n        [\n            x    610.33\n            y    702.57\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    119\n        label    \"\"\n        graphics\n        [\n            x    952.37\n            y    710.94\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    edge\n    [\n        source    0\n        target    84\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    1\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    10\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    100\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    101\n        target    24\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    102\n        target    19\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    103\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    104\n        target    36\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    104\n        target    78\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    105\n        target    85\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    106\n        target    62\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    107\n        target    47\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    107\n        target    48\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    108\n        target    55\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    109\n        target    100\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    11\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    110\n        target    77\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    111\n        target    88\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    112\n        target    35\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    113\n        target    39\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    114\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    115\n        target    60\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    116\n        target    33\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    117\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    118\n        target    24\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    119\n        target    26\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    119\n        target    80\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    12\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    12\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    13\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    14\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    15\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    16\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    17\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    18\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    19\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    19\n        target    65\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    2\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    20\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    21\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    22\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    23\n        target    19\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    24\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    25\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    26\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    27\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    28\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    29\n        target    24\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    3\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    30\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    31\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    31\n        target    59\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    32\n        target    29\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    33\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    34\n        target    29\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    35\n        target    33\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    36\n        target    30\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    37\n        target    26\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    38\n        target    30\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    39\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    4\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    40\n        target    36\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    41\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    42\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    43\n        target    33\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    44\n        target    24\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    45\n        target    36\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    46\n        target    19\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    47\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    48\n        target    47\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    49\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    5\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    50\n        target    106\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    50\n        target    45\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    51\n        target    39\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    51\n        target    65\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    51\n        target    98\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    52\n        target    19\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    53\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    53\n        target    56\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    54\n        target    50\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    55\n        target    26\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    56\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    57\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    57\n        target    36\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    58\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    59\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    59\n        target    26\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    6\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    60\n        target    37\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    61\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    62\n        target    60\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    63\n        target    60\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    64\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    65\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    66\n        target    31\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    67\n        target    49\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    68\n        target    66\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    69\n        target    56\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    7\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    70\n        target    34\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    70\n        target    49\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    70\n        target    87\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    71\n        target    39\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    72\n        target    67\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    73\n        target    50\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    74\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    75\n        target    72\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    76\n        target    34\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    77\n        target    42\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    78\n        target    28\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    79\n        target    72\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    8\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    80\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    81\n        target    26\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    82\n        target    64\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    82\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    83\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    84\n        target    37\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    84\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    85\n        target    59\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    86\n        target    52\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    87\n        target    49\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    88\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    88\n        target    68\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    89\n        target    46\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    9\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    9\n        target    65\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    90\n        target    19\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    91\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    92\n        target    109\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    92\n        target    43\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    92\n        target    63\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    93\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    93\n        target    53\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    94\n        target    62\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    95\n        target    47\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    95\n        target    82\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    96\n        target    26\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    96\n        target    54\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    97\n        target    29\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    98\n        target    69\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    98\n        target    96\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    99\n        target    90\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n]\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v120e144.tglf",
    "content": "0 827.000 577.000 30.000 30.000\n1 673.000 165.000 30.000 30.000\n2 576.000 744.000 30.000 30.000\n3 53.000 695.000 30.000 30.000\n4 283.000 402.000 30.000 30.000\n5 885.000 81.000 30.000 30.000\n6 449.000 496.000 30.000 30.000\n7 419.000 42.000 30.000 30.000\n8 191.000 822.000 30.000 30.000\n9 737.000 137.000 30.000 30.000\n10 755.000 455.000 30.000 30.000\n11 636.000 957.000 30.000 30.000\n12 824.000 184.000 30.000 30.000\n13 261.000 706.000 30.000 30.000\n14 482.000 793.000 30.000 30.000\n15 577.000 742.000 30.000 30.000\n16 600.000 387.000 30.000 30.000\n17 99.000 830.000 30.000 30.000\n18 415.000 90.000 30.000 30.000\n19 14.000 697.000 30.000 30.000\n20 689.000 467.000 30.000 30.000\n21 47.000 325.000 30.000 30.000\n22 373.000 631.000 30.000 30.000\n23 493.000 380.000 30.000 30.000\n24 539.000 554.000 30.000 30.000\n25 258.000 767.000 30.000 30.000\n26 267.000 274.000 30.000 30.000\n27 211.000 726.000 30.000 30.000\n28 30.000 200.000 30.000 30.000\n29 915.000 848.000 30.000 30.000\n30 424.000 61.000 30.000 30.000\n31 831.000 679.000 30.000 30.000\n32 95.000 276.000 30.000 30.000\n33 394.000 561.000 30.000 30.000\n34 749.000 731.000 30.000 30.000\n35 801.000 210.000 30.000 30.000\n36 525.000 933.000 30.000 30.000\n37 770.000 138.000 30.000 30.000\n38 579.000 811.000 30.000 30.000\n39 556.000 411.000 30.000 30.000\n40 668.000 354.000 30.000 30.000\n41 135.000 898.000 30.000 30.000\n42 220.000 418.000 30.000 30.000\n43 635.000 238.000 30.000 30.000\n44 125.000 467.000 30.000 30.000\n45 325.000 785.000 30.000 30.000\n46 625.000 756.000 30.000 30.000\n47 151.000 339.000 30.000 30.000\n48 888.000 901.000 30.000 30.000\n49 545.000 230.000 30.000 30.000\n50 540.000 376.000 30.000 30.000\n51 248.000 911.000 30.000 30.000\n52 848.000 340.000 30.000 30.000\n53 425.000 249.000 30.000 30.000\n54 335.000 22.000 30.000 30.000\n55 490.000 700.000 30.000 30.000\n56 413.000 60.000 30.000 30.000\n57 490.000 299.000 30.000 30.000\n58 510.000 864.000 30.000 30.000\n59 691.000 503.000 30.000 30.000\n60 279.000 840.000 30.000 30.000\n61 89.000 522.000 30.000 30.000\n62 194.000 834.000 30.000 30.000\n63 445.000 945.000 30.000 30.000\n64 211.000 567.000 30.000 30.000\n65 636.000 824.000 30.000 30.000\n66 760.000 579.000 30.000 30.000\n67 782.000 771.000 30.000 30.000\n68 338.000 361.000 30.000 30.000\n69 296.000 631.000 30.000 30.000\n70 857.000 24.000 30.000 30.000\n71 96.000 780.000 30.000 30.000\n72 315.000 458.000 30.000 30.000\n73 170.000 392.000 30.000 30.000\n74 189.000 942.000 30.000 30.000\n75 27.000 565.000 30.000 30.000\n76 392.000 92.000 30.000 30.000\n77 303.000 950.000 30.000 30.000\n78 755.000 444.000 30.000 30.000\n79 416.000 468.000 30.000 30.000\n80 438.000 86.000 30.000 30.000\n81 353.000 457.000 30.000 30.000\n82 903.000 360.000 30.000 30.000\n83 498.000 898.000 30.000 30.000\n84 834.000 787.000 30.000 30.000\n85 405.000 19.000 30.000 30.000\n86 245.000 984.000 30.000 30.000\n87 501.000 634.000 30.000 30.000\n88 369.000 101.000 30.000 30.000\n89 472.000 51.000 30.000 30.000\n90 641.000 298.000 30.000 30.000\n91 600.000 149.000 30.000 30.000\n92 60.000 742.000 30.000 30.000\n93 259.000 504.000 30.000 30.000\n94 323.000 693.000 30.000 30.000\n95 580.000 624.000 30.000 30.000\n96 720.000 129.000 30.000 30.000\n97 449.000 335.000 30.000 30.000\n98 338.000 303.000 30.000 30.000\n99 66.000 115.000 30.000 30.000\n100 455.000 74.000 30.000 30.000\n101 338.000 407.000 30.000 30.000\n102 197.000 581.000 30.000 30.000\n103 122.000 359.000 30.000 30.000\n104 192.000 176.000 30.000 30.000\n105 914.000 575.000 30.000 30.000\n106 222.000 549.000 30.000 30.000\n107 444.000 874.000 30.000 30.000\n108 537.000 864.000 30.000 30.000\n109 10.000 16.000 30.000 30.000\n110 340.000 347.000 30.000 30.000\n111 119.000 648.000 30.000 30.000\n112 549.000 503.000 30.000 30.000\n113 851.000 741.000 30.000 30.000\n114 753.000 705.000 30.000 30.000\n115 331.000 849.000 30.000 30.000\n116 642.000 286.000 30.000 30.000\n117 872.000 486.000 30.000 30.000\n118 610.000 702.000 30.000 30.000\n119 952.000 710.000 30.000 30.000\n#\n91 2\n36 30\n15 5\n100 11\n52 19\n2 1\n6 2\n41 9\n20 6\n71 39\n81 26\n94 62\n21 13\n66 31\n112 35\n79 72\n69 56\n99 90\n48 47\n92 43\n93 53\n107 47\n32 29\n80 3\n87 49\n95 47\n0 84\n8 1\n51 65\n108 55\n111 88\n9 65\n44 24\n59 26\n73 50\n38 30\n118 24\n82 64\n97 29\n19 12\n89 46\n104 78\n12 5\n70 87\n62 60\n119 26\n86 52\n92 63\n98 69\n78 28\n39 6\n84 37\n106 62\n95 82\n107 48\n23 19\n19 65\n27 0\n67 49\n7 3\n64 15\n101 24\n53 56\n68 66\n3 1\n83 7\n45 36\n25 0\n84 9\n70 49\n93 12\n88 16\n59 14\n42 3\n109 100\n96 54\n96 26\n16 12\n115 60\n30 3\n110 77\n76 34\n34 29\n18 4\n24 8\n92 109\n55 26\n119 80\n37 26\n10 9\n72 67\n33 0\n22 18\n12 4\n117 23\n56 4\n85 59\n88 68\n11 1\n60 37\n40 36\n43 33\n102 19\n57 36\n50 106\n14 9\n105 85\n5 3\n70 34\n4 2\n51 39\n51 98\n46 19\n49 21\n57 16\n9 5\n98 96\n75 72\n26 0\n116 33\n63 60\n31 59\n31 13\n114 5\n113 39\n90 19\n53 16\n77 42\n58 8\n103 3\n13 3\n54 50\n1 0\n29 24\n82 9\n61 21\n74 2\n17 16\n50 45\n28 12\n65 8\n35 33\n104 36\n47 6\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v120e156.gml",
    "content": "graph\n[\n    node\n    [\n        id    0\n        label    \"\"\n        graphics\n        [\n            x    197.95\n            y    293.71\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    1\n        label    \"\"\n        graphics\n        [\n            x    822.49\n            y    755.85\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    2\n        label    \"\"\n        graphics\n        [\n            x    431.68\n            y    163.82\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    3\n        label    \"\"\n        graphics\n        [\n            x    610.08\n            y    266.43\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    4\n        label    \"\"\n        graphics\n        [\n            x    216.46\n            y    417.26\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    5\n        label    \"\"\n        graphics\n        [\n            x    613.92\n            y    78.25\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    6\n        label    \"\"\n        graphics\n        [\n            x    681.35\n            y    861.47\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    7\n        label    \"\"\n        graphics\n        [\n            x    820.16\n            y    675.06\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    8\n        label    \"\"\n        graphics\n        [\n            x    18.96\n            y    218.66\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    9\n        label    \"\"\n        graphics\n        [\n            x    230.30\n            y    28.53\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    10\n        label    \"\"\n        graphics\n        [\n            x    87.27\n            y    151.92\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    11\n        label    \"\"\n        graphics\n        [\n            x    580.35\n            y    897.15\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    12\n        label    \"\"\n        graphics\n        [\n            x    46.73\n            y    355.30\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    13\n        label    \"\"\n        graphics\n        [\n            x    427.47\n            y    698.66\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    14\n        label    \"\"\n        graphics\n        [\n            x    341.46\n            y    237.59\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    15\n        label    \"\"\n        graphics\n        [\n            x    747.98\n            y    792.19\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    16\n        label    \"\"\n        graphics\n        [\n            x    74.48\n            y    706.55\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    17\n        label    \"\"\n        graphics\n        [\n            x    415.86\n            y    641.70\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    18\n        label    \"\"\n        graphics\n        [\n            x    376.02\n            y    891.87\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    19\n        label    \"\"\n        graphics\n        [\n            x    78.60\n            y    410.07\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    20\n        label    \"\"\n        graphics\n        [\n            x    887.92\n            y    570.75\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    21\n        label    \"\"\n        graphics\n        [\n            x    903.48\n            y    705.44\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    22\n        label    \"\"\n        graphics\n        [\n            x    659.04\n            y    618.34\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    23\n        label    \"\"\n        graphics\n        [\n            x    120.57\n            y    341.20\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    24\n        label    \"\"\n        graphics\n        [\n            x    151.61\n            y    746.32\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    25\n        label    \"\"\n        graphics\n        [\n            x    21.98\n            y    866.78\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    26\n        label    \"\"\n        graphics\n        [\n            x    300.87\n            y    561.08\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    27\n        label    \"\"\n        graphics\n        [\n            x    665.39\n            y    203.49\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    28\n        label    \"\"\n        graphics\n        [\n            x    639.59\n            y    255.78\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    29\n        label    \"\"\n        graphics\n        [\n            x    881.69\n            y    28.09\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    30\n        label    \"\"\n        graphics\n        [\n            x    923.92\n            y    592.62\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    31\n        label    \"\"\n        graphics\n        [\n            x    126.43\n            y    119.52\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    32\n        label    \"\"\n        graphics\n        [\n            x    144.14\n            y    965.53\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    33\n        label    \"\"\n        graphics\n        [\n            x    74.11\n            y    579.84\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    34\n        label    \"\"\n        graphics\n        [\n            x    337.89\n            y    166.43\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    35\n        label    \"\"\n        graphics\n        [\n            x    367.10\n            y    863.30\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    36\n        label    \"\"\n        graphics\n        [\n            x    167.06\n            y    343.90\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    37\n        label    \"\"\n        graphics\n        [\n            x    227.02\n            y    421.99\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    38\n        label    \"\"\n        graphics\n        [\n            x    317.35\n            y    656.16\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    39\n        label    \"\"\n        graphics\n        [\n            x    405.86\n            y    760.65\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    40\n        label    \"\"\n        graphics\n        [\n            x    914.99\n            y    9.75\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    41\n        label    \"\"\n        graphics\n        [\n            x    829.36\n            y    136.55\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    42\n        label    \"\"\n        graphics\n        [\n            x    526.58\n            y    488.65\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    43\n        label    \"\"\n        graphics\n        [\n            x    633.91\n            y    472.66\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    44\n        label    \"\"\n        graphics\n        [\n            x    803.39\n            y    366.70\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    45\n        label    \"\"\n        graphics\n        [\n            x    72.42\n            y    689.86\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    46\n        label    \"\"\n        graphics\n        [\n            x    670.59\n            y    586.19\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    47\n        label    \"\"\n        graphics\n        [\n            x    788.97\n            y    269.40\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    48\n        label    \"\"\n        graphics\n        [\n            x    864.31\n            y    696.68\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    49\n        label    \"\"\n        graphics\n        [\n            x    983.27\n            y    648.05\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    50\n        label    \"\"\n        graphics\n        [\n            x    967.84\n            y    371.98\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    51\n        label    \"\"\n        graphics\n        [\n            x    916.08\n            y    884.71\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    52\n        label    \"\"\n        graphics\n        [\n            x    186.05\n            y    975.39\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    53\n        label    \"\"\n        graphics\n        [\n            x    25.34\n            y    388.95\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    54\n        label    \"\"\n        graphics\n        [\n            x    675.32\n            y    679.61\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    55\n        label    \"\"\n        graphics\n        [\n            x    27.31\n            y    842.48\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    56\n        label    \"\"\n        graphics\n        [\n            x    186.97\n            y    447.59\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    57\n        label    \"\"\n        graphics\n        [\n            x    357.28\n            y    467.21\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    58\n        label    \"\"\n        graphics\n        [\n            x    90.14\n            y    576.72\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    59\n        label    \"\"\n        graphics\n        [\n            x    266.94\n            y    778.44\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    60\n        label    \"\"\n        graphics\n        [\n            x    898.77\n            y    868.88\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    61\n        label    \"\"\n        graphics\n        [\n            x    279.81\n            y    405.11\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    62\n        label    \"\"\n        graphics\n        [\n            x    943.65\n            y    258.15\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    63\n        label    \"\"\n        graphics\n        [\n            x    405.77\n            y    666.19\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    64\n        label    \"\"\n        graphics\n        [\n            x    844.75\n            y    316.71\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    65\n        label    \"\"\n        graphics\n        [\n            x    433.15\n            y    487.31\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    66\n        label    \"\"\n        graphics\n        [\n            x    559.40\n            y    590.30\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    67\n        label    \"\"\n        graphics\n        [\n            x    817.04\n            y    509.33\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    68\n        label    \"\"\n        graphics\n        [\n            x    669.10\n            y    493.04\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    69\n        label    \"\"\n        graphics\n        [\n            x    811.00\n            y    672.70\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    70\n        label    \"\"\n        graphics\n        [\n            x    154.68\n            y    630.57\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    71\n        label    \"\"\n        graphics\n        [\n            x    830.20\n            y    59.90\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    72\n        label    \"\"\n        graphics\n        [\n            x    303.46\n            y    334.15\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    73\n        label    \"\"\n        graphics\n        [\n            x    580.48\n            y    636.82\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    74\n        label    \"\"\n        graphics\n        [\n            x    937.43\n            y    420.91\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    75\n        label    \"\"\n        graphics\n        [\n            x    323.77\n            y    966.86\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    76\n        label    \"\"\n        graphics\n        [\n            x    419.16\n            y    676.30\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    77\n        label    \"\"\n        graphics\n        [\n            x    850.86\n            y    524.48\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    78\n        label    \"\"\n        graphics\n        [\n            x    479.18\n            y    107.52\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    79\n        label    \"\"\n        graphics\n        [\n            x    977.39\n            y    729.86\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    80\n        label    \"\"\n        graphics\n        [\n            x    598.02\n            y    793.03\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    81\n        label    \"\"\n        graphics\n        [\n            x    942.99\n            y    435.83\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    82\n        label    \"\"\n        graphics\n        [\n            x    273.80\n            y    892.77\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    83\n        label    \"\"\n        graphics\n        [\n            x    361.02\n            y    382.88\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    84\n        label    \"\"\n        graphics\n        [\n            x    358.73\n            y    944.43\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    85\n        label    \"\"\n        graphics\n        [\n            x    491.80\n            y    377.16\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    86\n        label    \"\"\n        graphics\n        [\n            x    605.21\n            y    960.02\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    87\n        label    \"\"\n        graphics\n        [\n            x    954.42\n            y    682.69\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    88\n        label    \"\"\n        graphics\n        [\n            x    317.97\n            y    723.46\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    89\n        label    \"\"\n        graphics\n        [\n            x    618.05\n            y    385.00\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    90\n        label    \"\"\n        graphics\n        [\n            x    177.10\n            y    849.38\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    91\n        label    \"\"\n        graphics\n        [\n            x    517.91\n            y    932.64\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    92\n        label    \"\"\n        graphics\n        [\n            x    106.48\n            y    528.14\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    93\n        label    \"\"\n        graphics\n        [\n            x    345.83\n            y    887.62\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    94\n        label    \"\"\n        graphics\n        [\n            x    684.80\n            y    810.16\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    95\n        label    \"\"\n        graphics\n        [\n            x    137.16\n            y    871.90\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    96\n        label    \"\"\n        graphics\n        [\n            x    4.61\n            y    537.96\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    97\n        label    \"\"\n        graphics\n        [\n            x    749.62\n            y    102.77\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    98\n        label    \"\"\n        graphics\n        [\n            x    25.02\n            y    197.97\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    99\n        label    \"\"\n        graphics\n        [\n            x    688.03\n            y    745.92\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    100\n        label    \"\"\n        graphics\n        [\n            x    143.14\n            y    65.04\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    101\n        label    \"\"\n        graphics\n        [\n            x    552.72\n            y    765.14\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    102\n        label    \"\"\n        graphics\n        [\n            x    924.79\n            y    400.35\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    103\n        label    \"\"\n        graphics\n        [\n            x    12.35\n            y    631.04\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    104\n        label    \"\"\n        graphics\n        [\n            x    541.36\n            y    706.43\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    105\n        label    \"\"\n        graphics\n        [\n            x    307.19\n            y    873.60\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    106\n        label    \"\"\n        graphics\n        [\n            x    757.91\n            y    56.52\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    107\n        label    \"\"\n        graphics\n        [\n            x    411.27\n            y    775.76\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    108\n        label    \"\"\n        graphics\n        [\n            x    60.96\n            y    364.76\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    109\n        label    \"\"\n        graphics\n        [\n            x    190.07\n            y    753.77\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    110\n        label    \"\"\n        graphics\n        [\n            x    287.39\n            y    234.49\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    111\n        label    \"\"\n        graphics\n        [\n            x    827.52\n            y    661.38\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    112\n        label    \"\"\n        graphics\n        [\n            x    408.92\n            y    919.01\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    113\n        label    \"\"\n        graphics\n        [\n            x    885.75\n            y    788.96\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    114\n        label    \"\"\n        graphics\n        [\n            x    481.24\n            y    137.32\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    115\n        label    \"\"\n        graphics\n        [\n            x    104.73\n            y    868.99\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    116\n        label    \"\"\n        graphics\n        [\n            x    184.35\n            y    968.46\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    117\n        label    \"\"\n        graphics\n        [\n            x    449.33\n            y    310.02\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    118\n        label    \"\"\n        graphics\n        [\n            x    15.42\n            y    941.67\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    119\n        label    \"\"\n        graphics\n        [\n            x    378.20\n            y    869.27\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    edge\n    [\n        source    0\n        target    96\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    1\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    1\n        target    63\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    10\n        target    72\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    10\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    100\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    101\n        target    41\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    102\n        target    88\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    103\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    104\n        target    69\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    104\n        target    95\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    105\n        target    104\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    106\n        target    76\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    107\n        target    24\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    108\n        target    97\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    109\n        target    108\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    109\n        target    68\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    11\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    11\n        target    83\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    110\n        target    60\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    111\n        target    37\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    112\n        target    55\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    112\n        target    64\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    113\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    114\n        target    33\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    115\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    115\n        target    93\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    116\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    117\n        target    106\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    118\n        target    98\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    119\n        target    64\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    119\n        target    71\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    12\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    13\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    14\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    15\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    16\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    17\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    17\n        target    49\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    18\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    19\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    2\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    20\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    21\n        target    101\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    21\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    21\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    21\n        target    47\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    22\n        target    19\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    23\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    24\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    25\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    25\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    26\n        target    24\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    27\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    28\n        target    24\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    29\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    3\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    30\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    31\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    32\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    33\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    34\n        target    24\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    34\n        target    46\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    35\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    36\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    36\n        target    55\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    36\n        target    64\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    37\n        target    25\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    38\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    39\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    4\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    40\n        target    37\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    41\n        target    26\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    42\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    43\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    44\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    44\n        target    77\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    45\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    45\n        target    60\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    46\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    46\n        target    85\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    46\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    47\n        target    45\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    48\n        target    25\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    49\n        target    35\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    49\n        target    41\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    5\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    50\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    51\n        target    25\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    52\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    52\n        target    98\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    53\n        target    52\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    54\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    55\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    56\n        target    36\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    57\n        target    54\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    58\n        target    28\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    59\n        target    27\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    6\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    60\n        target    26\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    61\n        target    48\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    62\n        target    19\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    63\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    64\n        target    45\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    64\n        target    55\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    65\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    66\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    66\n        target    101\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    67\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    67\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    68\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    68\n        target    85\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    69\n        target    37\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    7\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    7\n        target    92\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    70\n        target    48\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    71\n        target    47\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    72\n        target    44\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    73\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    73\n        target    27\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    74\n        target    66\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    75\n        target    48\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    76\n        target    48\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    76\n        target    63\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    77\n        target    50\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    78\n        target    51\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    79\n        target    63\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    8\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    80\n        target    48\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    81\n        target    67\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    82\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    82\n        target    68\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    82\n        target    72\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    83\n        target    26\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    84\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    84\n        target    48\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    85\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    85\n        target    64\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    86\n        target    72\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    87\n        target    48\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    88\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    89\n        target    73\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    9\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    90\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    91\n        target    19\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    91\n        target    65\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    92\n        target    66\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    93\n        target    43\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    93\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    94\n        target    28\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    95\n        target    75\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    96\n        target    70\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    97\n        target    58\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    98\n        target    60\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    98\n        target    77\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    99\n        target    30\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n]\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v120e156.tglf",
    "content": "0 197.000 293.000 30.000 30.000\n1 822.000 755.000 30.000 30.000\n2 431.000 163.000 30.000 30.000\n3 610.000 266.000 30.000 30.000\n4 216.000 417.000 30.000 30.000\n5 613.000 78.000 30.000 30.000\n6 681.000 861.000 30.000 30.000\n7 820.000 675.000 30.000 30.000\n8 18.000 218.000 30.000 30.000\n9 230.000 28.000 30.000 30.000\n10 87.000 151.000 30.000 30.000\n11 580.000 897.000 30.000 30.000\n12 46.000 355.000 30.000 30.000\n13 427.000 698.000 30.000 30.000\n14 341.000 237.000 30.000 30.000\n15 747.000 792.000 30.000 30.000\n16 74.000 706.000 30.000 30.000\n17 415.000 641.000 30.000 30.000\n18 376.000 891.000 30.000 30.000\n19 78.000 410.000 30.000 30.000\n20 887.000 570.000 30.000 30.000\n21 903.000 705.000 30.000 30.000\n22 659.000 618.000 30.000 30.000\n23 120.000 341.000 30.000 30.000\n24 151.000 746.000 30.000 30.000\n25 21.000 866.000 30.000 30.000\n26 300.000 561.000 30.000 30.000\n27 665.000 203.000 30.000 30.000\n28 639.000 255.000 30.000 30.000\n29 881.000 28.000 30.000 30.000\n30 923.000 592.000 30.000 30.000\n31 126.000 119.000 30.000 30.000\n32 144.000 965.000 30.000 30.000\n33 74.000 579.000 30.000 30.000\n34 337.000 166.000 30.000 30.000\n35 367.000 863.000 30.000 30.000\n36 167.000 343.000 30.000 30.000\n37 227.000 421.000 30.000 30.000\n38 317.000 656.000 30.000 30.000\n39 405.000 760.000 30.000 30.000\n40 914.000 9.000 30.000 30.000\n41 829.000 136.000 30.000 30.000\n42 526.000 488.000 30.000 30.000\n43 633.000 472.000 30.000 30.000\n44 803.000 366.000 30.000 30.000\n45 72.000 689.000 30.000 30.000\n46 670.000 586.000 30.000 30.000\n47 788.000 269.000 30.000 30.000\n48 864.000 696.000 30.000 30.000\n49 983.000 648.000 30.000 30.000\n50 967.000 371.000 30.000 30.000\n51 916.000 884.000 30.000 30.000\n52 186.000 975.000 30.000 30.000\n53 25.000 388.000 30.000 30.000\n54 675.000 679.000 30.000 30.000\n55 27.000 842.000 30.000 30.000\n56 186.000 447.000 30.000 30.000\n57 357.000 467.000 30.000 30.000\n58 90.000 576.000 30.000 30.000\n59 266.000 778.000 30.000 30.000\n60 898.000 868.000 30.000 30.000\n61 279.000 405.000 30.000 30.000\n62 943.000 258.000 30.000 30.000\n63 405.000 666.000 30.000 30.000\n64 844.000 316.000 30.000 30.000\n65 433.000 487.000 30.000 30.000\n66 559.000 590.000 30.000 30.000\n67 817.000 509.000 30.000 30.000\n68 669.000 493.000 30.000 30.000\n69 811.000 672.000 30.000 30.000\n70 154.000 630.000 30.000 30.000\n71 830.000 59.000 30.000 30.000\n72 303.000 334.000 30.000 30.000\n73 580.000 636.000 30.000 30.000\n74 937.000 420.000 30.000 30.000\n75 323.000 966.000 30.000 30.000\n76 419.000 676.000 30.000 30.000\n77 850.000 524.000 30.000 30.000\n78 479.000 107.000 30.000 30.000\n79 977.000 729.000 30.000 30.000\n80 598.000 793.000 30.000 30.000\n81 942.000 435.000 30.000 30.000\n82 273.000 892.000 30.000 30.000\n83 361.000 382.000 30.000 30.000\n84 358.000 944.000 30.000 30.000\n85 491.000 377.000 30.000 30.000\n86 605.000 960.000 30.000 30.000\n87 954.000 682.000 30.000 30.000\n88 317.000 723.000 30.000 30.000\n89 618.000 385.000 30.000 30.000\n90 177.000 849.000 30.000 30.000\n91 517.000 932.000 30.000 30.000\n92 106.000 528.000 30.000 30.000\n93 345.000 887.000 30.000 30.000\n94 684.000 810.000 30.000 30.000\n95 137.000 871.000 30.000 30.000\n96 4.000 537.000 30.000 30.000\n97 749.000 102.000 30.000 30.000\n98 25.000 197.000 30.000 30.000\n99 688.000 745.000 30.000 30.000\n100 143.000 65.000 30.000 30.000\n101 552.000 765.000 30.000 30.000\n102 924.000 400.000 30.000 30.000\n103 12.000 631.000 30.000 30.000\n104 541.000 706.000 30.000 30.000\n105 307.000 873.000 30.000 30.000\n106 757.000 56.000 30.000 30.000\n107 411.000 775.000 30.000 30.000\n108 60.000 364.000 30.000 30.000\n109 190.000 753.000 30.000 30.000\n110 287.000 234.000 30.000 30.000\n111 827.000 661.000 30.000 30.000\n112 408.000 919.000 30.000 30.000\n113 885.000 788.000 30.000 30.000\n114 481.000 137.000 30.000 30.000\n115 104.000 868.000 30.000 30.000\n116 184.000 968.000 30.000 30.000\n117 449.000 310.000 30.000 30.000\n118 15.000 941.000 30.000 30.000\n119 378.000 869.000 30.000 30.000\n#\n86 72\n99 30\n39 11\n52 98\n67 21\n115 93\n76 63\n60 26\n25 0\n102 88\n82 68\n100 18\n44 77\n17 49\n21 47\n41 26\n25 8\n15 10\n53 52\n45 2\n7 4\n45 60\n110 60\n1 0\n48 25\n115 17\n70 48\n66 1\n101 41\n56 36\n28 24\n119 64\n8 2\n18 1\n85 11\n78 51\n82 72\n4 2\n107 24\n97 58\n31 2\n108 97\n109 108\n58 28\n116 0\n54 2\n80 48\n88 22\n33 3\n91 65\n38 0\n50 1\n64 55\n112 55\n76 48\n12 9\n82 18\n29 15\n117 106\n105 104\n112 64\n93 43\n90 17\n84 48\n5 3\n36 55\n36 1\n68 85\n36 64\n104 69\n10 72\n63 0\n35 2\n118 98\n46 85\n79 63\n98 60\n23 22\n11 10\n16 5\n27 12\n1 63\n114 33\n21 2\n49 35\n62 19\n19 17\n13 11\n32 6\n21 16\n43 0\n67 17\n30 21\n104 95\n21 101\n42 21\n57 54\n34 24\n59 27\n51 25\n73 2\n22 19\n3 0\n20 12\n7 92\n2 1\n94 28\n74 66\n46 22\n71 47\n84 3\n17 10\n81 67\n69 37\n46 9\n77 50\n64 45\n34 46\n106 76\n61 48\n73 27\n0 96\n96 70\n24 2\n55 11\n37 25\n14 10\n65 18\n75 48\n83 26\n98 77\n92 66\n85 64\n47 45\n44 11\n93 6\n89 73\n103 2\n119 71\n10 8\n72 44\n87 48\n9 0\n111 37\n52 10\n113 12\n11 83\n26 24\n49 41\n66 101\n109 68\n6 1\n40 37\n91 19\n95 75\n68 15\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v120e168.gml",
    "content": "graph\n[\n    node\n    [\n        id    0\n        label    \"\"\n        graphics\n        [\n            x    573.09\n            y    102.92\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    1\n        label    \"\"\n        graphics\n        [\n            x    262.73\n            y    828.16\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    2\n        label    \"\"\n        graphics\n        [\n            x    879.47\n            y    455.80\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    3\n        label    \"\"\n        graphics\n        [\n            x    525.75\n            y    390.57\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    4\n        label    \"\"\n        graphics\n        [\n            x    229.76\n            y    634.73\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    5\n        label    \"\"\n        graphics\n        [\n            x    247.46\n            y    189.09\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    6\n        label    \"\"\n        graphics\n        [\n            x    255.13\n            y    373.33\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    7\n        label    \"\"\n        graphics\n        [\n            x    807.78\n            y    192.37\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    8\n        label    \"\"\n        graphics\n        [\n            x    525.09\n            y    297.80\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    9\n        label    \"\"\n        graphics\n        [\n            x    504.81\n            y    857.26\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    10\n        label    \"\"\n        graphics\n        [\n            x    110.07\n            y    608.07\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    11\n        label    \"\"\n        graphics\n        [\n            x    48.90\n            y    540.73\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    12\n        label    \"\"\n        graphics\n        [\n            x    67.43\n            y    475.30\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    13\n        label    \"\"\n        graphics\n        [\n            x    212.87\n            y    749.76\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    14\n        label    \"\"\n        graphics\n        [\n            x    144.89\n            y    296.16\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    15\n        label    \"\"\n        graphics\n        [\n            x    716.23\n            y    318.14\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    16\n        label    \"\"\n        graphics\n        [\n            x    370.72\n            y    726.25\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    17\n        label    \"\"\n        graphics\n        [\n            x    326.51\n            y    643.65\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    18\n        label    \"\"\n        graphics\n        [\n            x    708.17\n            y    511.79\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    19\n        label    \"\"\n        graphics\n        [\n            x    458.43\n            y    474.27\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    20\n        label    \"\"\n        graphics\n        [\n            x    329.07\n            y    426.15\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    21\n        label    \"\"\n        graphics\n        [\n            x    572.80\n            y    101.86\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    22\n        label    \"\"\n        graphics\n        [\n            x    178.78\n            y    482.38\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    23\n        label    \"\"\n        graphics\n        [\n            x    6.23\n            y    169.02\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    24\n        label    \"\"\n        graphics\n        [\n            x    524.77\n            y    194.50\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    25\n        label    \"\"\n        graphics\n        [\n            x    655.49\n            y    458.83\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    26\n        label    \"\"\n        graphics\n        [\n            x    473.92\n            y    685.71\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    27\n        label    \"\"\n        graphics\n        [\n            x    612.90\n            y    13.77\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    28\n        label    \"\"\n        graphics\n        [\n            x    46.75\n            y    923.03\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    29\n        label    \"\"\n        graphics\n        [\n            x    326.22\n            y    829.91\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    30\n        label    \"\"\n        graphics\n        [\n            x    207.52\n            y    215.71\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    31\n        label    \"\"\n        graphics\n        [\n            x    902.85\n            y    283.76\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    32\n        label    \"\"\n        graphics\n        [\n            x    468.82\n            y    26.11\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    33\n        label    \"\"\n        graphics\n        [\n            x    627.61\n            y    874.90\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    34\n        label    \"\"\n        graphics\n        [\n            x    533.69\n            y    977.17\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    35\n        label    \"\"\n        graphics\n        [\n            x    141.78\n            y    768.10\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    36\n        label    \"\"\n        graphics\n        [\n            x    219.43\n            y    813.65\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    37\n        label    \"\"\n        graphics\n        [\n            x    802.39\n            y    402.76\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    38\n        label    \"\"\n        graphics\n        [\n            x    531.69\n            y    745.79\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    39\n        label    \"\"\n        graphics\n        [\n            x    811.44\n            y    91.98\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    40\n        label    \"\"\n        graphics\n        [\n            x    54.47\n            y    173.34\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    41\n        label    \"\"\n        graphics\n        [\n            x    252.03\n            y    773.80\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    42\n        label    \"\"\n        graphics\n        [\n            x    659.03\n            y    825.71\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    43\n        label    \"\"\n        graphics\n        [\n            x    542.32\n            y    39.64\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    44\n        label    \"\"\n        graphics\n        [\n            x    442.39\n            y    279.25\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    45\n        label    \"\"\n        graphics\n        [\n            x    273.81\n            y    28.70\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    46\n        label    \"\"\n        graphics\n        [\n            x    125.15\n            y    379.94\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    47\n        label    \"\"\n        graphics\n        [\n            x    104.72\n            y    526.93\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    48\n        label    \"\"\n        graphics\n        [\n            x    816.72\n            y    617.74\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    49\n        label    \"\"\n        graphics\n        [\n            x    891.50\n            y    155.02\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    50\n        label    \"\"\n        graphics\n        [\n            x    335.06\n            y    391.28\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    51\n        label    \"\"\n        graphics\n        [\n            x    273.96\n            y    120.69\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    52\n        label    \"\"\n        graphics\n        [\n            x    972.22\n            y    176.95\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    53\n        label    \"\"\n        graphics\n        [\n            x    89.70\n            y    289.66\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    54\n        label    \"\"\n        graphics\n        [\n            x    785.01\n            y    319.69\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    55\n        label    \"\"\n        graphics\n        [\n            x    414.80\n            y    960.13\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    56\n        label    \"\"\n        graphics\n        [\n            x    361.76\n            y    348.11\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    57\n        label    \"\"\n        graphics\n        [\n            x    688.54\n            y    164.02\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    58\n        label    \"\"\n        graphics\n        [\n            x    141.97\n            y    887.87\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    59\n        label    \"\"\n        graphics\n        [\n            x    802.48\n            y    529.71\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    60\n        label    \"\"\n        graphics\n        [\n            x    418.76\n            y    760.03\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    61\n        label    \"\"\n        graphics\n        [\n            x    966.86\n            y    551.56\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    62\n        label    \"\"\n        graphics\n        [\n            x    27.14\n            y    795.02\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    63\n        label    \"\"\n        graphics\n        [\n            x    910.03\n            y    58.50\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    64\n        label    \"\"\n        graphics\n        [\n            x    43.58\n            y    493.74\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    65\n        label    \"\"\n        graphics\n        [\n            x    515.69\n            y    161.75\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    66\n        label    \"\"\n        graphics\n        [\n            x    904.57\n            y    884.91\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    67\n        label    \"\"\n        graphics\n        [\n            x    477.53\n            y    421.84\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    68\n        label    \"\"\n        graphics\n        [\n            x    570.05\n            y    984.69\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    69\n        label    \"\"\n        graphics\n        [\n            x    407.12\n            y    65.73\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    70\n        label    \"\"\n        graphics\n        [\n            x    162.60\n            y    518.10\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    71\n        label    \"\"\n        graphics\n        [\n            x    730.24\n            y    567.04\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    72\n        label    \"\"\n        graphics\n        [\n            x    128.81\n            y    936.49\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    73\n        label    \"\"\n        graphics\n        [\n            x    289.68\n            y    674.58\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    74\n        label    \"\"\n        graphics\n        [\n            x    804.35\n            y    689.25\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    75\n        label    \"\"\n        graphics\n        [\n            x    394.08\n            y    637.81\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    76\n        label    \"\"\n        graphics\n        [\n            x    237.16\n            y    92.45\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    77\n        label    \"\"\n        graphics\n        [\n            x    542.53\n            y    202.88\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    78\n        label    \"\"\n        graphics\n        [\n            x    347.63\n            y    870.69\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    79\n        label    \"\"\n        graphics\n        [\n            x    803.10\n            y    333.28\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    80\n        label    \"\"\n        graphics\n        [\n            x    236.57\n            y    148.30\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    81\n        label    \"\"\n        graphics\n        [\n            x    499.50\n            y    560.22\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    82\n        label    \"\"\n        graphics\n        [\n            x    465.15\n            y    276.35\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    83\n        label    \"\"\n        graphics\n        [\n            x    814.75\n            y    918.90\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    84\n        label    \"\"\n        graphics\n        [\n            x    472.04\n            y    39.01\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    85\n        label    \"\"\n        graphics\n        [\n            x    409.23\n            y    230.42\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    86\n        label    \"\"\n        graphics\n        [\n            x    958.03\n            y    677.40\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    87\n        label    \"\"\n        graphics\n        [\n            x    593.77\n            y    20.13\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    88\n        label    \"\"\n        graphics\n        [\n            x    466.74\n            y    151.56\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    89\n        label    \"\"\n        graphics\n        [\n            x    628.90\n            y    404.82\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    90\n        label    \"\"\n        graphics\n        [\n            x    206.48\n            y    42.66\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    91\n        label    \"\"\n        graphics\n        [\n            x    198.99\n            y    396.32\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    92\n        label    \"\"\n        graphics\n        [\n            x    583.32\n            y    252.32\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    93\n        label    \"\"\n        graphics\n        [\n            x    476.35\n            y    687.25\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    94\n        label    \"\"\n        graphics\n        [\n            x    635.79\n            y    477.14\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    95\n        label    \"\"\n        graphics\n        [\n            x    911.88\n            y    915.88\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    96\n        label    \"\"\n        graphics\n        [\n            x    893.99\n            y    798.75\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    97\n        label    \"\"\n        graphics\n        [\n            x    939.54\n            y    926.42\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    98\n        label    \"\"\n        graphics\n        [\n            x    785.54\n            y    235.66\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    99\n        label    \"\"\n        graphics\n        [\n            x    488.61\n            y    479.72\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    100\n        label    \"\"\n        graphics\n        [\n            x    579.66\n            y    318.35\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    101\n        label    \"\"\n        graphics\n        [\n            x    103.64\n            y    958.65\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    102\n        label    \"\"\n        graphics\n        [\n            x    759.29\n            y    50.69\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    103\n        label    \"\"\n        graphics\n        [\n            x    428.84\n            y    308.06\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    104\n        label    \"\"\n        graphics\n        [\n            x    382.20\n            y    842.29\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    105\n        label    \"\"\n        graphics\n        [\n            x    474.43\n            y    15.39\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    106\n        label    \"\"\n        graphics\n        [\n            x    335.26\n            y    474.75\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    107\n        label    \"\"\n        graphics\n        [\n            x    321.91\n            y    245.28\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    108\n        label    \"\"\n        graphics\n        [\n            x    191.54\n            y    408.22\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    109\n        label    \"\"\n        graphics\n        [\n            x    249.75\n            y    693.24\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    110\n        label    \"\"\n        graphics\n        [\n            x    475.98\n            y    352.81\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    111\n        label    \"\"\n        graphics\n        [\n            x    344.88\n            y    816.74\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    112\n        label    \"\"\n        graphics\n        [\n            x    75.81\n            y    46.61\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    113\n        label    \"\"\n        graphics\n        [\n            x    865.21\n            y    167.61\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    114\n        label    \"\"\n        graphics\n        [\n            x    777.18\n            y    320.73\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    115\n        label    \"\"\n        graphics\n        [\n            x    708.40\n            y    360.92\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    116\n        label    \"\"\n        graphics\n        [\n            x    39.94\n            y    287.96\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    117\n        label    \"\"\n        graphics\n        [\n            x    712.46\n            y    0.10\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    118\n        label    \"\"\n        graphics\n        [\n            x    953.54\n            y    774.77\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    119\n        label    \"\"\n        graphics\n        [\n            x    945.84\n            y    525.13\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    edge\n    [\n        source    0\n        target    77\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    1\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    10\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    100\n        target    83\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    101\n        target    100\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    101\n        target    74\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    102\n        target    50\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    103\n        target    38\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    104\n        target    64\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    105\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    105\n        target    82\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    106\n        target    72\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    107\n        target    54\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    108\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    109\n        target    79\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    11\n        target    41\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    11\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    110\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    110\n        target    29\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    110\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    110\n        target    35\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    111\n        target    78\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    112\n        target    48\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    113\n        target    50\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    114\n        target    89\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    115\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    116\n        target    114\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    116\n        target    32\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    117\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    118\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    119\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    119\n        target    80\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    12\n        target    48\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    12\n        target    53\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    12\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    13\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    13\n        target    57\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    14\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    15\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    16\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    17\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    18\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    19\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    19\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    2\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    20\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    21\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    22\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    23\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    23\n        target    96\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    24\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    25\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    26\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    27\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    27\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    27\n        target    26\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    27\n        target    44\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    28\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    29\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    3\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    3\n        target    70\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    30\n        target    25\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    31\n        target    26\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    32\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    32\n        target    69\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    32\n        target    75\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    33\n        target    47\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    33\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    34\n        target    26\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    35\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    36\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    37\n        target    36\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    37\n        target    91\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    38\n        target    33\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    38\n        target    36\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    39\n        target    118\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    39\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    4\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    4\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    40\n        target    24\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    41\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    42\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    43\n        target    38\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    43\n        target    94\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    44\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    45\n        target    32\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    45\n        target    88\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    46\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    46\n        target    42\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    46\n        target    69\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    47\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    48\n        target    26\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    49\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    5\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    50\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    51\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    51\n        target    38\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    52\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    53\n        target    36\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    53\n        target    44\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    54\n        target    53\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    55\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    55\n        target    47\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    56\n        target    52\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    57\n        target    19\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    58\n        target    54\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    59\n        target    47\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    6\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    6\n        target    104\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    6\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    60\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    61\n        target    46\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    62\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    63\n        target    36\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    64\n        target    54\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    65\n        target    31\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    65\n        target    91\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    66\n        target    45\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    67\n        target    47\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    67\n        target    60\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    68\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    69\n        target    29\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    7\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    70\n        target    35\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    71\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    72\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    72\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    73\n        target    67\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    74\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    75\n        target    65\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    76\n        target    39\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    76\n        target    45\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    77\n        target    63\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    78\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    79\n        target    45\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    8\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    8\n        target    83\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    80\n        target    71\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    81\n        target    31\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    82\n        target    80\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    83\n        target    44\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    84\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    85\n        target    62\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    86\n        target    33\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    87\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    87\n        target    31\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    88\n        target    66\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    89\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    89\n        target    60\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    9\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    90\n        target    56\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    90\n        target    62\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    90\n        target    81\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    91\n        target    19\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    91\n        target    74\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    92\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    92\n        target    33\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    93\n        target    46\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    94\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    94\n        target    49\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    94\n        target    76\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    95\n        target    62\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    96\n        target    19\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    97\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    97\n        target    47\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    98\n        target    56\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    99\n        target    43\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    99\n        target    66\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n]\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v120e168.tglf",
    "content": "0 573.000 102.000 30.000 30.000\n1 262.000 828.000 30.000 30.000\n2 879.000 455.000 30.000 30.000\n3 525.000 390.000 30.000 30.000\n4 229.000 634.000 30.000 30.000\n5 247.000 189.000 30.000 30.000\n6 255.000 373.000 30.000 30.000\n7 807.000 192.000 30.000 30.000\n8 525.000 297.000 30.000 30.000\n9 504.000 857.000 30.000 30.000\n10 110.000 608.000 30.000 30.000\n11 48.000 540.000 30.000 30.000\n12 67.000 475.000 30.000 30.000\n13 212.000 749.000 30.000 30.000\n14 144.000 296.000 30.000 30.000\n15 716.000 318.000 30.000 30.000\n16 370.000 726.000 30.000 30.000\n17 326.000 643.000 30.000 30.000\n18 708.000 511.000 30.000 30.000\n19 458.000 474.000 30.000 30.000\n20 329.000 426.000 30.000 30.000\n21 572.000 101.000 30.000 30.000\n22 178.000 482.000 30.000 30.000\n23 6.000 169.000 30.000 30.000\n24 524.000 194.000 30.000 30.000\n25 655.000 458.000 30.000 30.000\n26 473.000 685.000 30.000 30.000\n27 612.000 13.000 30.000 30.000\n28 46.000 923.000 30.000 30.000\n29 326.000 829.000 30.000 30.000\n30 207.000 215.000 30.000 30.000\n31 902.000 283.000 30.000 30.000\n32 468.000 26.000 30.000 30.000\n33 627.000 874.000 30.000 30.000\n34 533.000 977.000 30.000 30.000\n35 141.000 768.000 30.000 30.000\n36 219.000 813.000 30.000 30.000\n37 802.000 402.000 30.000 30.000\n38 531.000 745.000 30.000 30.000\n39 811.000 91.000 30.000 30.000\n40 54.000 173.000 30.000 30.000\n41 252.000 773.000 30.000 30.000\n42 659.000 825.000 30.000 30.000\n43 542.000 39.000 30.000 30.000\n44 442.000 279.000 30.000 30.000\n45 273.000 28.000 30.000 30.000\n46 125.000 379.000 30.000 30.000\n47 104.000 526.000 30.000 30.000\n48 816.000 617.000 30.000 30.000\n49 891.000 155.000 30.000 30.000\n50 335.000 391.000 30.000 30.000\n51 273.000 120.000 30.000 30.000\n52 972.000 176.000 30.000 30.000\n53 89.000 289.000 30.000 30.000\n54 785.000 319.000 30.000 30.000\n55 414.000 960.000 30.000 30.000\n56 361.000 348.000 30.000 30.000\n57 688.000 164.000 30.000 30.000\n58 141.000 887.000 30.000 30.000\n59 802.000 529.000 30.000 30.000\n60 418.000 760.000 30.000 30.000\n61 966.000 551.000 30.000 30.000\n62 27.000 795.000 30.000 30.000\n63 910.000 58.000 30.000 30.000\n64 43.000 493.000 30.000 30.000\n65 515.000 161.000 30.000 30.000\n66 904.000 884.000 30.000 30.000\n67 477.000 421.000 30.000 30.000\n68 570.000 984.000 30.000 30.000\n69 407.000 65.000 30.000 30.000\n70 162.000 518.000 30.000 30.000\n71 730.000 567.000 30.000 30.000\n72 128.000 936.000 30.000 30.000\n73 289.000 674.000 30.000 30.000\n74 804.000 689.000 30.000 30.000\n75 394.000 637.000 30.000 30.000\n76 237.000 92.000 30.000 30.000\n77 542.000 202.000 30.000 30.000\n78 347.000 870.000 30.000 30.000\n79 803.000 333.000 30.000 30.000\n80 236.000 148.000 30.000 30.000\n81 499.000 560.000 30.000 30.000\n82 465.000 276.000 30.000 30.000\n83 814.000 918.000 30.000 30.000\n84 472.000 39.000 30.000 30.000\n85 409.000 230.000 30.000 30.000\n86 958.000 677.000 30.000 30.000\n87 593.000 20.000 30.000 30.000\n88 466.000 151.000 30.000 30.000\n89 628.000 404.000 30.000 30.000\n90 206.000 42.000 30.000 30.000\n91 198.000 396.000 30.000 30.000\n92 583.000 252.000 30.000 30.000\n93 476.000 687.000 30.000 30.000\n94 635.000 477.000 30.000 30.000\n95 911.000 915.000 30.000 30.000\n96 893.000 798.000 30.000 30.000\n97 939.000 926.000 30.000 30.000\n98 785.000 235.000 30.000 30.000\n99 488.000 479.000 30.000 30.000\n100 579.000 318.000 30.000 30.000\n101 103.000 958.000 30.000 30.000\n102 759.000 50.000 30.000 30.000\n103 428.000 308.000 30.000 30.000\n104 382.000 842.000 30.000 30.000\n105 474.000 15.000 30.000 30.000\n106 335.000 474.000 30.000 30.000\n107 321.000 245.000 30.000 30.000\n108 191.000 408.000 30.000 30.000\n109 249.000 693.000 30.000 30.000\n110 475.000 352.000 30.000 30.000\n111 344.000 816.000 30.000 30.000\n112 75.000 46.000 30.000 30.000\n113 865.000 167.000 30.000 30.000\n114 777.000 320.000 30.000 30.000\n115 708.000 360.000 30.000 30.000\n116 39.000 287.000 30.000 30.000\n117 712.000 0.000 30.000 30.000\n118 953.000 774.000 30.000 30.000\n119 945.000 525.000 30.000 30.000\n#\n84 5\n118 3\n41 3\n43 38\n85 62\n27 26\n10 1\n104 64\n78 9\n103 38\n12 7\n110 35\n53 36\n6 0\n13 12\n1 0\n91 19\n29 17\n97 21\n101 74\n15 3\n72 16\n86 33\n48 26\n70 35\n0 77\n90 81\n34 26\n114 89\n14 0\n94 76\n117 12\n43 94\n9 8\n89 60\n59 47\n45 88\n62 9\n35 22\n107 54\n65 31\n55 4\n42 18\n40 24\n11 41\n26 1\n37 91\n94 17\n6 104\n49 23\n76 45\n22 11\n89 23\n21 3\n45 32\n12 48\n50 0\n3 1\n72 17\n8 83\n32 69\n73 67\n64 54\n38 33\n82 80\n44 13\n58 54\n97 47\n60 1\n91 74\n95 62\n112 48\n3 70\n67 60\n77 63\n55 47\n80 71\n54 53\n11 9\n27 11\n4 0\n19 2\n83 44\n63 36\n99 43\n105 23\n46 69\n68 0\n19 15\n76 39\n27 1\n116 32\n30 25\n5 2\n90 56\n108 4\n111 78\n28 17\n23 5\n32 75\n33 47\n105 82\n88 66\n32 18\n33 7\n109 79\n87 31\n52 0\n115 4\n110 13\n71 2\n18 3\n47 9\n81 31\n4 2\n99 66\n17 1\n98 56\n66 45\n24 16\n51 2\n93 46\n92 33\n46 0\n51 38\n36 0\n2 1\n119 17\n27 44\n106 72\n100 83\n7 4\n38 36\n119 80\n6 7\n75 65\n110 29\n46 42\n90 62\n23 96\n65 91\n53 44\n74 11\n102 50\n20 11\n39 118\n12 53\n113 50\n56 52\n67 47\n8 2\n25 2\n94 49\n116 114\n61 46\n37 36\n96 19\n101 100\n39 13\n110 3\n92 23\n69 29\n31 26\n13 57\n79 45\n57 19\n87 14\n16 15\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v120e180.gml",
    "content": "graph\n[\n    node\n    [\n        id    0\n        label    \"\"\n        graphics\n        [\n            x    22.85\n            y    947.79\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    1\n        label    \"\"\n        graphics\n        [\n            x    265.76\n            y    468.64\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    2\n        label    \"\"\n        graphics\n        [\n            x    40.14\n            y    734.29\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    3\n        label    \"\"\n        graphics\n        [\n            x    896.50\n            y    934.94\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    4\n        label    \"\"\n        graphics\n        [\n            x    765.89\n            y    628.51\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    5\n        label    \"\"\n        graphics\n        [\n            x    364.03\n            y    887.40\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    6\n        label    \"\"\n        graphics\n        [\n            x    857.58\n            y    744.17\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    7\n        label    \"\"\n        graphics\n        [\n            x    56.33\n            y    268.71\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    8\n        label    \"\"\n        graphics\n        [\n            x    591.79\n            y    255.09\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    9\n        label    \"\"\n        graphics\n        [\n            x    638.23\n            y    656.57\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    10\n        label    \"\"\n        graphics\n        [\n            x    520.16\n            y    813.39\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    11\n        label    \"\"\n        graphics\n        [\n            x    79.58\n            y    591.40\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    12\n        label    \"\"\n        graphics\n        [\n            x    377.60\n            y    712.23\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    13\n        label    \"\"\n        graphics\n        [\n            x    296.23\n            y    698.67\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    14\n        label    \"\"\n        graphics\n        [\n            x    377.29\n            y    320.85\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    15\n        label    \"\"\n        graphics\n        [\n            x    738.46\n            y    269.63\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    16\n        label    \"\"\n        graphics\n        [\n            x    654.74\n            y    631.73\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    17\n        label    \"\"\n        graphics\n        [\n            x    352.14\n            y    267.43\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    18\n        label    \"\"\n        graphics\n        [\n            x    711.50\n            y    747.35\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    19\n        label    \"\"\n        graphics\n        [\n            x    94.72\n            y    224.04\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    20\n        label    \"\"\n        graphics\n        [\n            x    720.43\n            y    750.88\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    21\n        label    \"\"\n        graphics\n        [\n            x    516.11\n            y    224.41\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    22\n        label    \"\"\n        graphics\n        [\n            x    41.91\n            y    867.89\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    23\n        label    \"\"\n        graphics\n        [\n            x    375.36\n            y    40.90\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    24\n        label    \"\"\n        graphics\n        [\n            x    721.90\n            y    285.31\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    25\n        label    \"\"\n        graphics\n        [\n            x    658.38\n            y    586.53\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    26\n        label    \"\"\n        graphics\n        [\n            x    827.41\n            y    460.10\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    27\n        label    \"\"\n        graphics\n        [\n            x    603.15\n            y    206.01\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    28\n        label    \"\"\n        graphics\n        [\n            x    871.49\n            y    436.61\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    29\n        label    \"\"\n        graphics\n        [\n            x    614.63\n            y    260.94\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    30\n        label    \"\"\n        graphics\n        [\n            x    258.43\n            y    487.62\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    31\n        label    \"\"\n        graphics\n        [\n            x    285.66\n            y    945.06\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    32\n        label    \"\"\n        graphics\n        [\n            x    130.15\n            y    787.72\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    33\n        label    \"\"\n        graphics\n        [\n            x    258.93\n            y    76.16\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    34\n        label    \"\"\n        graphics\n        [\n            x    43.88\n            y    373.55\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    35\n        label    \"\"\n        graphics\n        [\n            x    474.56\n            y    950.34\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    36\n        label    \"\"\n        graphics\n        [\n            x    344.50\n            y    150.52\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    37\n        label    \"\"\n        graphics\n        [\n            x    472.47\n            y    653.11\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    38\n        label    \"\"\n        graphics\n        [\n            x    236.16\n            y    76.53\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    39\n        label    \"\"\n        graphics\n        [\n            x    14.00\n            y    64.65\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    40\n        label    \"\"\n        graphics\n        [\n            x    213.36\n            y    726.93\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    41\n        label    \"\"\n        graphics\n        [\n            x    365.85\n            y    351.88\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    42\n        label    \"\"\n        graphics\n        [\n            x    644.63\n            y    695.98\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    43\n        label    \"\"\n        graphics\n        [\n            x    230.59\n            y    366.25\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    44\n        label    \"\"\n        graphics\n        [\n            x    963.86\n            y    347.50\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    45\n        label    \"\"\n        graphics\n        [\n            x    74.63\n            y    10.14\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    46\n        label    \"\"\n        graphics\n        [\n            x    579.46\n            y    256.25\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    47\n        label    \"\"\n        graphics\n        [\n            x    889.01\n            y    544.95\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    48\n        label    \"\"\n        graphics\n        [\n            x    476.65\n            y    644.57\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    49\n        label    \"\"\n        graphics\n        [\n            x    243.31\n            y    668.18\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    50\n        label    \"\"\n        graphics\n        [\n            x    681.91\n            y    681.73\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    51\n        label    \"\"\n        graphics\n        [\n            x    280.48\n            y    956.53\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    52\n        label    \"\"\n        graphics\n        [\n            x    369.15\n            y    215.02\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    53\n        label    \"\"\n        graphics\n        [\n            x    397.86\n            y    532.96\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    54\n        label    \"\"\n        graphics\n        [\n            x    944.90\n            y    60.38\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    55\n        label    \"\"\n        graphics\n        [\n            x    919.89\n            y    508.70\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    56\n        label    \"\"\n        graphics\n        [\n            x    652.28\n            y    401.91\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    57\n        label    \"\"\n        graphics\n        [\n            x    271.60\n            y    464.58\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    58\n        label    \"\"\n        graphics\n        [\n            x    269.97\n            y    963.91\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    59\n        label    \"\"\n        graphics\n        [\n            x    26.18\n            y    415.96\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    60\n        label    \"\"\n        graphics\n        [\n            x    340.52\n            y    235.38\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    61\n        label    \"\"\n        graphics\n        [\n            x    169.52\n            y    542.38\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    62\n        label    \"\"\n        graphics\n        [\n            x    116.72\n            y    712.43\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    63\n        label    \"\"\n        graphics\n        [\n            x    381.85\n            y    510.47\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    64\n        label    \"\"\n        graphics\n        [\n            x    222.79\n            y    195.07\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    65\n        label    \"\"\n        graphics\n        [\n            x    239.29\n            y    53.97\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    66\n        label    \"\"\n        graphics\n        [\n            x    215.01\n            y    371.75\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    67\n        label    \"\"\n        graphics\n        [\n            x    388.39\n            y    406.69\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    68\n        label    \"\"\n        graphics\n        [\n            x    656.84\n            y    907.90\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    69\n        label    \"\"\n        graphics\n        [\n            x    489.36\n            y    14.65\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    70\n        label    \"\"\n        graphics\n        [\n            x    979.40\n            y    134.20\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    71\n        label    \"\"\n        graphics\n        [\n            x    66.36\n            y    356.98\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    72\n        label    \"\"\n        graphics\n        [\n            x    351.12\n            y    844.20\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    73\n        label    \"\"\n        graphics\n        [\n            x    792.80\n            y    621.60\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    74\n        label    \"\"\n        graphics\n        [\n            x    50.09\n            y    807.30\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    75\n        label    \"\"\n        graphics\n        [\n            x    638.31\n            y    380.88\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    76\n        label    \"\"\n        graphics\n        [\n            x    819.15\n            y    104.46\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    77\n        label    \"\"\n        graphics\n        [\n            x    95.69\n            y    744.63\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    78\n        label    \"\"\n        graphics\n        [\n            x    390.34\n            y    661.02\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    79\n        label    \"\"\n        graphics\n        [\n            x    557.93\n            y    941.12\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    80\n        label    \"\"\n        graphics\n        [\n            x    966.04\n            y    635.10\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    81\n        label    \"\"\n        graphics\n        [\n            x    461.53\n            y    109.18\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    82\n        label    \"\"\n        graphics\n        [\n            x    472.10\n            y    804.63\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    83\n        label    \"\"\n        graphics\n        [\n            x    421.38\n            y    821.07\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    84\n        label    \"\"\n        graphics\n        [\n            x    860.17\n            y    135.54\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    85\n        label    \"\"\n        graphics\n        [\n            x    305.81\n            y    552.18\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    86\n        label    \"\"\n        graphics\n        [\n            x    151.01\n            y    299.72\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    87\n        label    \"\"\n        graphics\n        [\n            x    225.93\n            y    146.23\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    88\n        label    \"\"\n        graphics\n        [\n            x    774.51\n            y    111.66\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    89\n        label    \"\"\n        graphics\n        [\n            x    515.03\n            y    660.41\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    90\n        label    \"\"\n        graphics\n        [\n            x    978.61\n            y    533.58\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    91\n        label    \"\"\n        graphics\n        [\n            x    924.56\n            y    777.01\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    92\n        label    \"\"\n        graphics\n        [\n            x    87.27\n            y    27.88\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    93\n        label    \"\"\n        graphics\n        [\n            x    792.99\n            y    90.33\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    94\n        label    \"\"\n        graphics\n        [\n            x    939.53\n            y    736.66\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    95\n        label    \"\"\n        graphics\n        [\n            x    715.40\n            y    681.94\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    96\n        label    \"\"\n        graphics\n        [\n            x    746.91\n            y    385.70\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    97\n        label    \"\"\n        graphics\n        [\n            x    77.36\n            y    146.20\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    98\n        label    \"\"\n        graphics\n        [\n            x    861.64\n            y    235.92\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    99\n        label    \"\"\n        graphics\n        [\n            x    143.08\n            y    499.49\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    100\n        label    \"\"\n        graphics\n        [\n            x    936.13\n            y    46.57\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    101\n        label    \"\"\n        graphics\n        [\n            x    351.25\n            y    798.54\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    102\n        label    \"\"\n        graphics\n        [\n            x    914.50\n            y    612.10\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    103\n        label    \"\"\n        graphics\n        [\n            x    663.13\n            y    422.40\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    104\n        label    \"\"\n        graphics\n        [\n            x    7.68\n            y    218.63\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    105\n        label    \"\"\n        graphics\n        [\n            x    513.50\n            y    52.94\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    106\n        label    \"\"\n        graphics\n        [\n            x    589.46\n            y    225.19\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    107\n        label    \"\"\n        graphics\n        [\n            x    131.98\n            y    681.41\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    108\n        label    \"\"\n        graphics\n        [\n            x    83.30\n            y    901.12\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    109\n        label    \"\"\n        graphics\n        [\n            x    360.24\n            y    941.80\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    110\n        label    \"\"\n        graphics\n        [\n            x    772.47\n            y    880.80\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    111\n        label    \"\"\n        graphics\n        [\n            x    322.61\n            y    111.15\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    112\n        label    \"\"\n        graphics\n        [\n            x    539.18\n            y    840.69\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    113\n        label    \"\"\n        graphics\n        [\n            x    659.64\n            y    543.47\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    114\n        label    \"\"\n        graphics\n        [\n            x    174.52\n            y    849.85\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    115\n        label    \"\"\n        graphics\n        [\n            x    966.35\n            y    669.29\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    116\n        label    \"\"\n        graphics\n        [\n            x    111.73\n            y    311.45\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    117\n        label    \"\"\n        graphics\n        [\n            x    355.89\n            y    591.44\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    118\n        label    \"\"\n        graphics\n        [\n            x    983.62\n            y    634.34\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    119\n        label    \"\"\n        graphics\n        [\n            x    335.72\n            y    495.42\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    edge\n    [\n        source    1\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    10\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    100\n        target    45\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    101\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    101\n        target    95\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    102\n        target    50\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    103\n        target    46\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    104\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    104\n        target    80\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    105\n        target    76\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    106\n        target    28\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    107\n        target    52\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    108\n        target    117\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    108\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    109\n        target    102\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    109\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    109\n        target    53\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    11\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    110\n        target    28\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    111\n        target    110\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    112\n        target    104\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    112\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    112\n        target    72\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    113\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    114\n        target    25\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    114\n        target    53\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    114\n        target    92\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    115\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    115\n        target    50\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    116\n        target    67\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    117\n        target    102\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    117\n        target    98\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    118\n        target    76\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    119\n        target    114\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    12\n        target    101\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    12\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    12\n        target    79\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    13\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    13\n        target    70\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    14\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    15\n        target    47\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    15\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    16\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    17\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    18\n        target    110\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    18\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    19\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    19\n        target    54\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    2\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    20\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    21\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    22\n        target    108\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    22\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    23\n        target    19\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    24\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    25\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    26\n        target    24\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    27\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    28\n        target    43\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    28\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    29\n        target    115\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    29\n        target    20\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    3\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    3\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    30\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    31\n        target    26\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    32\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    33\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    34\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    35\n        target    27\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    35\n        target    77\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    36\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    37\n        target    117\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    37\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    38\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    38\n        target    79\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    39\n        target    26\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    4\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    4\n        target    57\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    40\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    40\n        target    49\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    41\n        target    105\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    41\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    42\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    42\n        target    40\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    42\n        target    55\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    43\n        target    36\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    44\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    44\n        target    29\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    45\n        target    29\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    45\n        target    47\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    46\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    47\n        target    43\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    47\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    47\n        target    83\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    48\n        target    27\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    49\n        target    19\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    49\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    5\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    5\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    5\n        target    49\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    5\n        target    85\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    50\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    50\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    50\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    51\n        target    32\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    52\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    53\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    53\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    53\n        target    24\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    54\n        target    35\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    55\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    56\n        target    33\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    57\n        target    119\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    57\n        target    30\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    58\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    59\n        target    30\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    6\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    60\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    61\n        target    58\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    62\n        target    61\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    63\n        target    53\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    64\n        target    36\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    65\n        target    50\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    66\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    66\n        target    87\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    67\n        target    20\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    67\n        target    64\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    68\n        target    51\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    69\n        target    45\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    69\n        target    75\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    7\n        target    28\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    7\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    7\n        target    93\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    70\n        target    20\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    71\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    71\n        target    32\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    72\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    72\n        target    35\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    73\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    74\n        target    38\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    75\n        target    118\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    75\n        target    53\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    76\n        target    75\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    77\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    78\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    79\n        target    25\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    8\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    80\n        target    55\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    81\n        target    38\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    82\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    83\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    83\n        target    77\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    83\n        target    87\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    84\n        target    33\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    85\n        target    27\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    85\n        target    30\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    85\n        target    64\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    85\n        target    68\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    86\n        target    67\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    86\n        target    77\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    86\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    87\n        target    78\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    87\n        target    86\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    88\n        target    75\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    89\n        target    79\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    9\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    90\n        target    62\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    91\n        target    50\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    92\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    93\n        target    31\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    94\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    94\n        target    58\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    95\n        target    72\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    96\n        target    84\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    97\n        target    104\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    97\n        target    38\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    97\n        target    43\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    98\n        target    74\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    99\n        target    72\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n]\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v120e180.tglf",
    "content": "0 22.000 947.000 30.000 30.000\n1 265.000 468.000 30.000 30.000\n2 40.000 734.000 30.000 30.000\n3 896.000 934.000 30.000 30.000\n4 765.000 628.000 30.000 30.000\n5 364.000 887.000 30.000 30.000\n6 857.000 744.000 30.000 30.000\n7 56.000 268.000 30.000 30.000\n8 591.000 255.000 30.000 30.000\n9 638.000 656.000 30.000 30.000\n10 520.000 813.000 30.000 30.000\n11 79.000 591.000 30.000 30.000\n12 377.000 712.000 30.000 30.000\n13 296.000 698.000 30.000 30.000\n14 377.000 320.000 30.000 30.000\n15 738.000 269.000 30.000 30.000\n16 654.000 631.000 30.000 30.000\n17 352.000 267.000 30.000 30.000\n18 711.000 747.000 30.000 30.000\n19 94.000 224.000 30.000 30.000\n20 720.000 750.000 30.000 30.000\n21 516.000 224.000 30.000 30.000\n22 41.000 867.000 30.000 30.000\n23 375.000 40.000 30.000 30.000\n24 721.000 285.000 30.000 30.000\n25 658.000 586.000 30.000 30.000\n26 827.000 460.000 30.000 30.000\n27 603.000 206.000 30.000 30.000\n28 871.000 436.000 30.000 30.000\n29 614.000 260.000 30.000 30.000\n30 258.000 487.000 30.000 30.000\n31 285.000 945.000 30.000 30.000\n32 130.000 787.000 30.000 30.000\n33 258.000 76.000 30.000 30.000\n34 43.000 373.000 30.000 30.000\n35 474.000 950.000 30.000 30.000\n36 344.000 150.000 30.000 30.000\n37 472.000 653.000 30.000 30.000\n38 236.000 76.000 30.000 30.000\n39 14.000 64.000 30.000 30.000\n40 213.000 726.000 30.000 30.000\n41 365.000 351.000 30.000 30.000\n42 644.000 695.000 30.000 30.000\n43 230.000 366.000 30.000 30.000\n44 963.000 347.000 30.000 30.000\n45 74.000 10.000 30.000 30.000\n46 579.000 256.000 30.000 30.000\n47 889.000 544.000 30.000 30.000\n48 476.000 644.000 30.000 30.000\n49 243.000 668.000 30.000 30.000\n50 681.000 681.000 30.000 30.000\n51 280.000 956.000 30.000 30.000\n52 369.000 215.000 30.000 30.000\n53 397.000 532.000 30.000 30.000\n54 944.000 60.000 30.000 30.000\n55 919.000 508.000 30.000 30.000\n56 652.000 401.000 30.000 30.000\n57 271.000 464.000 30.000 30.000\n58 269.000 963.000 30.000 30.000\n59 26.000 415.000 30.000 30.000\n60 340.000 235.000 30.000 30.000\n61 169.000 542.000 30.000 30.000\n62 116.000 712.000 30.000 30.000\n63 381.000 510.000 30.000 30.000\n64 222.000 195.000 30.000 30.000\n65 239.000 53.000 30.000 30.000\n66 215.000 371.000 30.000 30.000\n67 388.000 406.000 30.000 30.000\n68 656.000 907.000 30.000 30.000\n69 489.000 14.000 30.000 30.000\n70 979.000 134.000 30.000 30.000\n71 66.000 356.000 30.000 30.000\n72 351.000 844.000 30.000 30.000\n73 792.000 621.000 30.000 30.000\n74 50.000 807.000 30.000 30.000\n75 638.000 380.000 30.000 30.000\n76 819.000 104.000 30.000 30.000\n77 95.000 744.000 30.000 30.000\n78 390.000 661.000 30.000 30.000\n79 557.000 941.000 30.000 30.000\n80 966.000 635.000 30.000 30.000\n81 461.000 109.000 30.000 30.000\n82 472.000 804.000 30.000 30.000\n83 421.000 821.000 30.000 30.000\n84 860.000 135.000 30.000 30.000\n85 305.000 552.000 30.000 30.000\n86 151.000 299.000 30.000 30.000\n87 225.000 146.000 30.000 30.000\n88 774.000 111.000 30.000 30.000\n89 515.000 660.000 30.000 30.000\n90 978.000 533.000 30.000 30.000\n91 924.000 777.000 30.000 30.000\n92 87.000 27.000 30.000 30.000\n93 792.000 90.000 30.000 30.000\n94 939.000 736.000 30.000 30.000\n95 715.000 681.000 30.000 30.000\n96 746.000 385.000 30.000 30.000\n97 77.000 146.000 30.000 30.000\n98 861.000 235.000 30.000 30.000\n99 143.000 499.000 30.000 30.000\n100 936.000 46.000 30.000 30.000\n101 351.000 798.000 30.000 30.000\n102 914.000 612.000 30.000 30.000\n103 663.000 422.000 30.000 30.000\n104 7.000 218.000 30.000 30.000\n105 513.000 52.000 30.000 30.000\n106 589.000 225.000 30.000 30.000\n107 131.000 681.000 30.000 30.000\n108 83.000 901.000 30.000 30.000\n109 360.000 941.000 30.000 30.000\n110 772.000 880.000 30.000 30.000\n111 322.000 111.000 30.000 30.000\n112 539.000 840.000 30.000 30.000\n113 659.000 543.000 30.000 30.000\n114 174.000 849.000 30.000 30.000\n115 966.000 669.000 30.000 30.000\n116 111.000 311.000 30.000 30.000\n117 355.000 591.000 30.000 30.000\n118 983.000 634.000 30.000 30.000\n119 335.000 495.000 30.000 30.000\n#\n5 49\n106 28\n85 68\n23 19\n47 83\n72 21\n112 72\n40 11\n50 6\n73 0\n52 22\n27 3\n74 38\n28 9\n80 55\n43 36\n7 28\n35 27\n113 8\n66 87\n85 30\n49 19\n42 22\n26 24\n57 30\n33 17\n112 21\n71 32\n83 87\n17 16\n48 27\n41 105\n59 30\n14 3\n94 58\n47 5\n88 75\n5 85\n60 15\n34 6\n109 53\n108 12\n83 3\n19 54\n9 4\n6 0\n37 16\n75 118\n50 12\n104 22\n10 0\n40 49\n4 1\n117 98\n53 24\n86 67\n22 7\n11 6\n114 92\n2 0\n115 50\n7 93\n97 38\n42 40\n18 16\n63 53\n61 58\n92 11\n62 61\n15 47\n77 2\n65 50\n21 1\n53 12\n42 55\n109 102\n114 25\n5 22\n38 1\n13 70\n37 117\n45 47\n115 22\n97 43\n29 20\n24 4\n64 36\n84 33\n8 1\n102 50\n104 80\n54 35\n100 45\n83 77\n105 76\n82 22\n47 43\n36 2\n56 33\n35 77\n85 27\n31 26\n3 15\n18 110\n118 76\n12 79\n110 28\n49 21\n45 29\n55 17\n75 53\n112 104\n109 15\n95 72\n20 6\n98 74\n69 45\n93 31\n101 8\n87 86\n5 1\n86 77\n86 8\n116 67\n68 51\n4 57\n32 12\n114 53\n107 52\n94 12\n67 64\n89 79\n76 75\n103 46\n91 50\n39 26\n51 32\n111 110\n69 75\n7 5\n79 25\n16 13\n46 21\n3 1\n70 20\n96 84\n99 72\n22 108\n50 22\n117 102\n67 20\n101 95\n57 119\n15 5\n13 12\n12 101\n12 6\n28 43\n119 114\n90 62\n44 18\n44 29\n97 104\n58 12\n85 64\n41 6\n53 18\n29 115\n30 0\n25 16\n66 7\n81 38\n78 11\n72 35\n1 0\n19 1\n87 78\n108 117\n71 14\n38 79\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v130e130.gml",
    "content": "graph\n[\n    node\n    [\n        id    0\n        label    \"\"\n        graphics\n        [\n            x    325.30\n            y    564.62\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    1\n        label    \"\"\n        graphics\n        [\n            x    1008.81\n            y    330.93\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    2\n        label    \"\"\n        graphics\n        [\n            x    863.93\n            y    709.19\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    3\n        label    \"\"\n        graphics\n        [\n            x    125.31\n            y    417.65\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    4\n        label    \"\"\n        graphics\n        [\n            x    416.00\n            y    580.90\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    5\n        label    \"\"\n        graphics\n        [\n            x    512.22\n            y    185.99\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    6\n        label    \"\"\n        graphics\n        [\n            x    466.39\n            y    318.88\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    7\n        label    \"\"\n        graphics\n        [\n            x    529.82\n            y    975.29\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    8\n        label    \"\"\n        graphics\n        [\n            x    811.34\n            y    287.96\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    9\n        label    \"\"\n        graphics\n        [\n            x    319.79\n            y    315.36\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    10\n        label    \"\"\n        graphics\n        [\n            x    133.41\n            y    270.92\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    11\n        label    \"\"\n        graphics\n        [\n            x    861.72\n            y    544.90\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    12\n        label    \"\"\n        graphics\n        [\n            x    913.29\n            y    227.44\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    13\n        label    \"\"\n        graphics\n        [\n            x    511.01\n            y    631.03\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    14\n        label    \"\"\n        graphics\n        [\n            x    758.29\n            y    877.03\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    15\n        label    \"\"\n        graphics\n        [\n            x    513.23\n            y    94.55\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    16\n        label    \"\"\n        graphics\n        [\n            x    435.53\n            y    913.15\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    17\n        label    \"\"\n        graphics\n        [\n            x    292.64\n            y    897.71\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    18\n        label    \"\"\n        graphics\n        [\n            x    36.34\n            y    654.55\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    19\n        label    \"\"\n        graphics\n        [\n            x    762.29\n            y    899.51\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    20\n        label    \"\"\n        graphics\n        [\n            x    527.54\n            y    914.08\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    21\n        label    \"\"\n        graphics\n        [\n            x    47.87\n            y    693.96\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    22\n        label    \"\"\n        graphics\n        [\n            x    854.03\n            y    65.33\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    23\n        label    \"\"\n        graphics\n        [\n            x    544.30\n            y    127.32\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    24\n        label    \"\"\n        graphics\n        [\n            x    117.13\n            y    260.88\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    25\n        label    \"\"\n        graphics\n        [\n            x    400.28\n            y    11.80\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    26\n        label    \"\"\n        graphics\n        [\n            x    34.02\n            y    1012.84\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    27\n        label    \"\"\n        graphics\n        [\n            x    732.87\n            y    813.59\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    28\n        label    \"\"\n        graphics\n        [\n            x    498.35\n            y    65.70\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    29\n        label    \"\"\n        graphics\n        [\n            x    387.54\n            y    595.21\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    30\n        label    \"\"\n        graphics\n        [\n            x    175.48\n            y    143.52\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    31\n        label    \"\"\n        graphics\n        [\n            x    620.84\n            y    627.18\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    32\n        label    \"\"\n        graphics\n        [\n            x    180.40\n            y    306.78\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    33\n        label    \"\"\n        graphics\n        [\n            x    813.74\n            y    923.11\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    34\n        label    \"\"\n        graphics\n        [\n            x    351.85\n            y    647.46\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    35\n        label    \"\"\n        graphics\n        [\n            x    180.43\n            y    116.66\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    36\n        label    \"\"\n        graphics\n        [\n            x    302.11\n            y    726.90\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    37\n        label    \"\"\n        graphics\n        [\n            x    904.67\n            y    231.72\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    38\n        label    \"\"\n        graphics\n        [\n            x    596.59\n            y    772.07\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    39\n        label    \"\"\n        graphics\n        [\n            x    173.98\n            y    200.29\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    40\n        label    \"\"\n        graphics\n        [\n            x    47.69\n            y    908.60\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    41\n        label    \"\"\n        graphics\n        [\n            x    585.28\n            y    329.42\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    42\n        label    \"\"\n        graphics\n        [\n            x    641.65\n            y    809.24\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    43\n        label    \"\"\n        graphics\n        [\n            x    833.09\n            y    268.37\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    44\n        label    \"\"\n        graphics\n        [\n            x    963.17\n            y    97.62\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    45\n        label    \"\"\n        graphics\n        [\n            x    190.04\n            y    703.73\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    46\n        label    \"\"\n        graphics\n        [\n            x    238.13\n            y    149.19\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    47\n        label    \"\"\n        graphics\n        [\n            x    421.70\n            y    105.77\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    48\n        label    \"\"\n        graphics\n        [\n            x    812.37\n            y    363.20\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    49\n        label    \"\"\n        graphics\n        [\n            x    580.08\n            y    988.69\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    50\n        label    \"\"\n        graphics\n        [\n            x    434.57\n            y    44.11\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    51\n        label    \"\"\n        graphics\n        [\n            x    889.02\n            y    541.71\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    52\n        label    \"\"\n        graphics\n        [\n            x    680.06\n            y    117.57\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    53\n        label    \"\"\n        graphics\n        [\n            x    166.06\n            y    57.90\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    54\n        label    \"\"\n        graphics\n        [\n            x    68.42\n            y    194.19\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    55\n        label    \"\"\n        graphics\n        [\n            x    980.88\n            y    65.41\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    56\n        label    \"\"\n        graphics\n        [\n            x    446.09\n            y    489.40\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    57\n        label    \"\"\n        graphics\n        [\n            x    259.88\n            y    613.22\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    58\n        label    \"\"\n        graphics\n        [\n            x    588.99\n            y    728.14\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    59\n        label    \"\"\n        graphics\n        [\n            x    979.04\n            y    32.30\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    60\n        label    \"\"\n        graphics\n        [\n            x    521.72\n            y    297.04\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    61\n        label    \"\"\n        graphics\n        [\n            x    605.39\n            y    197.29\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    62\n        label    \"\"\n        graphics\n        [\n            x    177.03\n            y    362.07\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    63\n        label    \"\"\n        graphics\n        [\n            x    832.83\n            y    333.62\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    64\n        label    \"\"\n        graphics\n        [\n            x    211.51\n            y    307.94\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    65\n        label    \"\"\n        graphics\n        [\n            x    967.72\n            y    325.74\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    66\n        label    \"\"\n        graphics\n        [\n            x    274.96\n            y    354.14\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    67\n        label    \"\"\n        graphics\n        [\n            x    293.85\n            y    299.11\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    68\n        label    \"\"\n        graphics\n        [\n            x    964.71\n            y    568.63\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    69\n        label    \"\"\n        graphics\n        [\n            x    558.57\n            y    617.83\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    70\n        label    \"\"\n        graphics\n        [\n            x    27.84\n            y    341.22\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    71\n        label    \"\"\n        graphics\n        [\n            x    984.72\n            y    979.45\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    72\n        label    \"\"\n        graphics\n        [\n            x    14.43\n            y    304.30\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    73\n        label    \"\"\n        graphics\n        [\n            x    144.08\n            y    3.93\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    74\n        label    \"\"\n        graphics\n        [\n            x    699.53\n            y    371.01\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    75\n        label    \"\"\n        graphics\n        [\n            x    96.22\n            y    969.94\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    76\n        label    \"\"\n        graphics\n        [\n            x    734.84\n            y    97.72\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    77\n        label    \"\"\n        graphics\n        [\n            x    345.47\n            y    288.26\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    78\n        label    \"\"\n        graphics\n        [\n            x    210.05\n            y    2.91\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    79\n        label    \"\"\n        graphics\n        [\n            x    993.12\n            y    278.51\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    80\n        label    \"\"\n        graphics\n        [\n            x    570.07\n            y    468.78\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    81\n        label    \"\"\n        graphics\n        [\n            x    437.12\n            y    110.03\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    82\n        label    \"\"\n        graphics\n        [\n            x    240.89\n            y    862.16\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    83\n        label    \"\"\n        graphics\n        [\n            x    622.18\n            y    583.31\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    84\n        label    \"\"\n        graphics\n        [\n            x    460.08\n            y    194.10\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    85\n        label    \"\"\n        graphics\n        [\n            x    356.79\n            y    1016.30\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    86\n        label    \"\"\n        graphics\n        [\n            x    845.26\n            y    832.16\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    87\n        label    \"\"\n        graphics\n        [\n            x    614.81\n            y    1006.61\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    88\n        label    \"\"\n        graphics\n        [\n            x    152.85\n            y    223.32\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    89\n        label    \"\"\n        graphics\n        [\n            x    453.17\n            y    401.50\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    90\n        label    \"\"\n        graphics\n        [\n            x    365.02\n            y    665.42\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    91\n        label    \"\"\n        graphics\n        [\n            x    764.91\n            y    81.91\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    92\n        label    \"\"\n        graphics\n        [\n            x    765.95\n            y    900.08\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    93\n        label    \"\"\n        graphics\n        [\n            x    823.82\n            y    900.14\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    94\n        label    \"\"\n        graphics\n        [\n            x    244.57\n            y    258.76\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    95\n        label    \"\"\n        graphics\n        [\n            x    726.51\n            y    1003.08\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    96\n        label    \"\"\n        graphics\n        [\n            x    947.54\n            y    731.02\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    97\n        label    \"\"\n        graphics\n        [\n            x    953.30\n            y    261.23\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    98\n        label    \"\"\n        graphics\n        [\n            x    803.57\n            y    577.53\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    99\n        label    \"\"\n        graphics\n        [\n            x    17.13\n            y    559.18\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    100\n        label    \"\"\n        graphics\n        [\n            x    59.72\n            y    561.46\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    101\n        label    \"\"\n        graphics\n        [\n            x    771.71\n            y    175.97\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    102\n        label    \"\"\n        graphics\n        [\n            x    880.43\n            y    774.72\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    103\n        label    \"\"\n        graphics\n        [\n            x    154.07\n            y    583.67\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    104\n        label    \"\"\n        graphics\n        [\n            x    172.89\n            y    590.73\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    105\n        label    \"\"\n        graphics\n        [\n            x    815.42\n            y    4.79\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    106\n        label    \"\"\n        graphics\n        [\n            x    746.87\n            y    58.50\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    107\n        label    \"\"\n        graphics\n        [\n            x    907.63\n            y    963.35\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    108\n        label    \"\"\n        graphics\n        [\n            x    807.80\n            y    582.13\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    109\n        label    \"\"\n        graphics\n        [\n            x    605.47\n            y    611.95\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    110\n        label    \"\"\n        graphics\n        [\n            x    85.95\n            y    518.87\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    111\n        label    \"\"\n        graphics\n        [\n            x    970.16\n            y    88.66\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    112\n        label    \"\"\n        graphics\n        [\n            x    438.80\n            y    524.11\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    113\n        label    \"\"\n        graphics\n        [\n            x    731.78\n            y    3.93\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    114\n        label    \"\"\n        graphics\n        [\n            x    934.26\n            y    187.61\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    115\n        label    \"\"\n        graphics\n        [\n            x    419.77\n            y    972.47\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    116\n        label    \"\"\n        graphics\n        [\n            x    435.76\n            y    1015.25\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    117\n        label    \"\"\n        graphics\n        [\n            x    768.88\n            y    469.93\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    118\n        label    \"\"\n        graphics\n        [\n            x    600.25\n            y    54.65\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    119\n        label    \"\"\n        graphics\n        [\n            x    790.10\n            y    178.46\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    120\n        label    \"\"\n        graphics\n        [\n            x    684.41\n            y    583.13\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    121\n        label    \"\"\n        graphics\n        [\n            x    901.31\n            y    858.30\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    122\n        label    \"\"\n        graphics\n        [\n            x    335.41\n            y    368.84\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    123\n        label    \"\"\n        graphics\n        [\n            x    404.71\n            y    7.82\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    124\n        label    \"\"\n        graphics\n        [\n            x    953.80\n            y    561.42\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    125\n        label    \"\"\n        graphics\n        [\n            x    750.63\n            y    415.65\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    126\n        label    \"\"\n        graphics\n        [\n            x    162.69\n            y    717.34\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    127\n        label    \"\"\n        graphics\n        [\n            x    816.56\n            y    391.21\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    128\n        label    \"\"\n        graphics\n        [\n            x    334.13\n            y    269.53\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    129\n        label    \"\"\n        graphics\n        [\n            x    125.03\n            y    267.78\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    edge\n    [\n        source    1\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    10\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    100\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    101\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    102\n        target    82\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    103\n        target    65\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    104\n        target    34\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    105\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    106\n        target    30\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    107\n        target    90\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    108\n        target    74\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    109\n        target    29\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    11\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    110\n        target    94\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    111\n        target    78\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    112\n        target    20\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    113\n        target    96\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    114\n        target    109\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    115\n        target    28\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    116\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    117\n        target    65\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    118\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    119\n        target    86\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    12\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    120\n        target    113\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    121\n        target    29\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    122\n        target    38\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    123\n        target    48\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    124\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    125\n        target    38\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    126\n        target    64\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    127\n        target    103\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    128\n        target    95\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    129\n        target    107\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    13\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    14\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    15\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    16\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    17\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    18\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    19\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    2\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    20\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    21\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    22\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    23\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    24\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    25\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    26\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    27\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    28\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    29\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    3\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    30\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    31\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    32\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    33\n        target    20\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    34\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    35\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    36\n        target    33\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    37\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    38\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    39\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    4\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    40\n        target    32\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    41\n        target    33\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    42\n        target    20\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    43\n        target    35\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    44\n        target    39\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    45\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    46\n        target    38\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    47\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    48\n        target    36\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    49\n        target    29\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    5\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    50\n        target    43\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    51\n        target    32\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    52\n        target    25\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    53\n        target    49\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    54\n        target    27\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    55\n        target    43\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    56\n        target    44\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    57\n        target    39\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    58\n        target    42\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    59\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    6\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    60\n        target    27\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    61\n        target    37\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    62\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    63\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    64\n        target    51\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    65\n        target    55\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    66\n        target    37\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    67\n        target    66\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    68\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    69\n        target    50\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    7\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    70\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    71\n        target    70\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    72\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    73\n        target    58\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    74\n        target    44\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    75\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    76\n        target    28\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    77\n        target    71\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    78\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    79\n        target    70\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    8\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    80\n        target    47\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    81\n        target    27\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    82\n        target    69\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    83\n        target    36\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    84\n        target    64\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    85\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    86\n        target    80\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    87\n        target    38\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    88\n        target    40\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    89\n        target    75\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    9\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    90\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    91\n        target    74\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    92\n        target    70\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    93\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    94\n        target    90\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    95\n        target    65\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    96\n        target    65\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    97\n        target    20\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    97\n        target    50\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    98\n        target    39\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    99\n        target    76\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n]\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v130e130.tglf",
    "content": "0 325.000 564.000 30.000 30.000\n1 1008.000 330.000 30.000 30.000\n2 863.000 709.000 30.000 30.000\n3 125.000 417.000 30.000 30.000\n4 416.000 580.000 30.000 30.000\n5 512.000 185.000 30.000 30.000\n6 466.000 318.000 30.000 30.000\n7 529.000 975.000 30.000 30.000\n8 811.000 287.000 30.000 30.000\n9 319.000 315.000 30.000 30.000\n10 133.000 270.000 30.000 30.000\n11 861.000 544.000 30.000 30.000\n12 913.000 227.000 30.000 30.000\n13 511.000 631.000 30.000 30.000\n14 758.000 877.000 30.000 30.000\n15 513.000 94.000 30.000 30.000\n16 435.000 913.000 30.000 30.000\n17 292.000 897.000 30.000 30.000\n18 36.000 654.000 30.000 30.000\n19 762.000 899.000 30.000 30.000\n20 527.000 914.000 30.000 30.000\n21 47.000 693.000 30.000 30.000\n22 854.000 65.000 30.000 30.000\n23 544.000 127.000 30.000 30.000\n24 117.000 260.000 30.000 30.000\n25 400.000 11.000 30.000 30.000\n26 34.000 1012.000 30.000 30.000\n27 732.000 813.000 30.000 30.000\n28 498.000 65.000 30.000 30.000\n29 387.000 595.000 30.000 30.000\n30 175.000 143.000 30.000 30.000\n31 620.000 627.000 30.000 30.000\n32 180.000 306.000 30.000 30.000\n33 813.000 923.000 30.000 30.000\n34 351.000 647.000 30.000 30.000\n35 180.000 116.000 30.000 30.000\n36 302.000 726.000 30.000 30.000\n37 904.000 231.000 30.000 30.000\n38 596.000 772.000 30.000 30.000\n39 173.000 200.000 30.000 30.000\n40 47.000 908.000 30.000 30.000\n41 585.000 329.000 30.000 30.000\n42 641.000 809.000 30.000 30.000\n43 833.000 268.000 30.000 30.000\n44 963.000 97.000 30.000 30.000\n45 190.000 703.000 30.000 30.000\n46 238.000 149.000 30.000 30.000\n47 421.000 105.000 30.000 30.000\n48 812.000 363.000 30.000 30.000\n49 580.000 988.000 30.000 30.000\n50 434.000 44.000 30.000 30.000\n51 889.000 541.000 30.000 30.000\n52 680.000 117.000 30.000 30.000\n53 166.000 57.000 30.000 30.000\n54 68.000 194.000 30.000 30.000\n55 980.000 65.000 30.000 30.000\n56 446.000 489.000 30.000 30.000\n57 259.000 613.000 30.000 30.000\n58 588.000 728.000 30.000 30.000\n59 979.000 32.000 30.000 30.000\n60 521.000 297.000 30.000 30.000\n61 605.000 197.000 30.000 30.000\n62 177.000 362.000 30.000 30.000\n63 832.000 333.000 30.000 30.000\n64 211.000 307.000 30.000 30.000\n65 967.000 325.000 30.000 30.000\n66 274.000 354.000 30.000 30.000\n67 293.000 299.000 30.000 30.000\n68 964.000 568.000 30.000 30.000\n69 558.000 617.000 30.000 30.000\n70 27.000 341.000 30.000 30.000\n71 984.000 979.000 30.000 30.000\n72 14.000 304.000 30.000 30.000\n73 144.000 3.000 30.000 30.000\n74 699.000 371.000 30.000 30.000\n75 96.000 969.000 30.000 30.000\n76 734.000 97.000 30.000 30.000\n77 345.000 288.000 30.000 30.000\n78 210.000 2.000 30.000 30.000\n79 993.000 278.000 30.000 30.000\n80 570.000 468.000 30.000 30.000\n81 437.000 110.000 30.000 30.000\n82 240.000 862.000 30.000 30.000\n83 622.000 583.000 30.000 30.000\n84 460.000 194.000 30.000 30.000\n85 356.000 1016.000 30.000 30.000\n86 845.000 832.000 30.000 30.000\n87 614.000 1006.000 30.000 30.000\n88 152.000 223.000 30.000 30.000\n89 453.000 401.000 30.000 30.000\n90 365.000 665.000 30.000 30.000\n91 764.000 81.000 30.000 30.000\n92 765.000 900.000 30.000 30.000\n93 823.000 900.000 30.000 30.000\n94 244.000 258.000 30.000 30.000\n95 726.000 1003.000 30.000 30.000\n96 947.000 731.000 30.000 30.000\n97 953.000 261.000 30.000 30.000\n98 803.000 577.000 30.000 30.000\n99 17.000 559.000 30.000 30.000\n100 59.000 561.000 30.000 30.000\n101 771.000 175.000 30.000 30.000\n102 880.000 774.000 30.000 30.000\n103 154.000 583.000 30.000 30.000\n104 172.000 590.000 30.000 30.000\n105 815.000 4.000 30.000 30.000\n106 746.000 58.000 30.000 30.000\n107 907.000 963.000 30.000 30.000\n108 807.000 582.000 30.000 30.000\n109 605.000 611.000 30.000 30.000\n110 85.000 518.000 30.000 30.000\n111 970.000 88.000 30.000 30.000\n112 438.000 524.000 30.000 30.000\n113 731.000 3.000 30.000 30.000\n114 934.000 187.000 30.000 30.000\n115 419.000 972.000 30.000 30.000\n116 435.000 1015.000 30.000 30.000\n117 768.000 469.000 30.000 30.000\n118 600.000 54.000 30.000 30.000\n119 790.000 178.000 30.000 30.000\n120 684.000 583.000 30.000 30.000\n121 901.000 858.000 30.000 30.000\n122 335.000 368.000 30.000 30.000\n123 404.000 7.000 30.000 30.000\n124 953.000 561.000 30.000 30.000\n125 750.000 415.000 30.000 30.000\n126 162.000 717.000 30.000 30.000\n127 816.000 391.000 30.000 30.000\n128 334.000 269.000 30.000 30.000\n129 125.000 267.000 30.000 30.000\n#\n60 27\n70 9\n94 90\n116 18\n4 3\n24 13\n39 0\n88 40\n97 50\n121 29\n71 70\n42 20\n107 90\n48 36\n13 10\n99 76\n26 15\n47 23\n52 25\n56 44\n12 8\n102 82\n49 29\n109 29\n54 27\n95 65\n112 20\n55 43\n85 15\n80 47\n59 10\n124 9\n86 80\n38 11\n5 2\n66 37\n106 30\n119 86\n90 15\n33 20\n117 65\n84 64\n2 1\n50 43\n30 3\n118 0\n6 5\n45 13\n93 14\n22 15\n61 37\n122 38\n87 38\n35 0\n125 38\n83 36\n7 5\n126 64\n81 27\n57 39\n120 113\n43 35\n76 28\n29 12\n19 8\n8 3\n1 0\n101 3\n31 23\n28 5\n103 65\n20 13\n32 9\n9 4\n46 38\n14 12\n104 34\n108 74\n15 8\n111 78\n115 28\n97 20\n113 96\n129 107\n34 13\n74 44\n36 33\n67 66\n27 13\n3 2\n127 103\n25 22\n64 51\n65 55\n10 0\n98 39\n72 2\n105 2\n17 9\n100 12\n53 49\n63 0\n128 95\n77 71\n91 74\n114 109\n110 94\n92 70\n69 50\n18 10\n23 2\n21 12\n68 11\n75 18\n51 32\n11 10\n79 70\n37 23\n16 13\n78 5\n41 33\n62 17\n44 39\n82 69\n58 42\n73 58\n123 48\n89 75\n40 32\n96 65\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v130e143.gml",
    "content": "graph\n[\n    node\n    [\n        id    0\n        label    \"\"\n        graphics\n        [\n            x    108.87\n            y    298.32\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    1\n        label    \"\"\n        graphics\n        [\n            x    917.61\n            y    525.45\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    2\n        label    \"\"\n        graphics\n        [\n            x    725.70\n            y    775.79\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    3\n        label    \"\"\n        graphics\n        [\n            x    550.54\n            y    747.69\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    4\n        label    \"\"\n        graphics\n        [\n            x    56.54\n            y    370.50\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    5\n        label    \"\"\n        graphics\n        [\n            x    870.95\n            y    646.87\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    6\n        label    \"\"\n        graphics\n        [\n            x    685.22\n            y    223.60\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    7\n        label    \"\"\n        graphics\n        [\n            x    97.15\n            y    630.44\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    8\n        label    \"\"\n        graphics\n        [\n            x    188.15\n            y    638.62\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    9\n        label    \"\"\n        graphics\n        [\n            x    1008.41\n            y    613.59\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    10\n        label    \"\"\n        graphics\n        [\n            x    395.55\n            y    676.87\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    11\n        label    \"\"\n        graphics\n        [\n            x    712.66\n            y    260.92\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    12\n        label    \"\"\n        graphics\n        [\n            x    205.65\n            y    1022.85\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    13\n        label    \"\"\n        graphics\n        [\n            x    92.95\n            y    271.64\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    14\n        label    \"\"\n        graphics\n        [\n            x    388.21\n            y    241.67\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    15\n        label    \"\"\n        graphics\n        [\n            x    23.94\n            y    310.68\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    16\n        label    \"\"\n        graphics\n        [\n            x    523.82\n            y    696.37\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    17\n        label    \"\"\n        graphics\n        [\n            x    714.43\n            y    480.96\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    18\n        label    \"\"\n        graphics\n        [\n            x    319.13\n            y    470.33\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    19\n        label    \"\"\n        graphics\n        [\n            x    570.76\n            y    814.64\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    20\n        label    \"\"\n        graphics\n        [\n            x    201.97\n            y    305.18\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    21\n        label    \"\"\n        graphics\n        [\n            x    447.47\n            y    898.63\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    22\n        label    \"\"\n        graphics\n        [\n            x    67.35\n            y    252.23\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    23\n        label    \"\"\n        graphics\n        [\n            x    134.18\n            y    512.41\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    24\n        label    \"\"\n        graphics\n        [\n            x    455.65\n            y    127.61\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    25\n        label    \"\"\n        graphics\n        [\n            x    612.41\n            y    793.24\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    26\n        label    \"\"\n        graphics\n        [\n            x    395.66\n            y    846.15\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    27\n        label    \"\"\n        graphics\n        [\n            x    6.57\n            y    311.36\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    28\n        label    \"\"\n        graphics\n        [\n            x    497.13\n            y    700.60\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    29\n        label    \"\"\n        graphics\n        [\n            x    211.37\n            y    192.62\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    30\n        label    \"\"\n        graphics\n        [\n            x    395.98\n            y    33.79\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    31\n        label    \"\"\n        graphics\n        [\n            x    376.76\n            y    777.37\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    32\n        label    \"\"\n        graphics\n        [\n            x    553.15\n            y    545.44\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    33\n        label    \"\"\n        graphics\n        [\n            x    1022.30\n            y    217.36\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    34\n        label    \"\"\n        graphics\n        [\n            x    255.23\n            y    357.10\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    35\n        label    \"\"\n        graphics\n        [\n            x    595.03\n            y    131.79\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    36\n        label    \"\"\n        graphics\n        [\n            x    727.41\n            y    13.76\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    37\n        label    \"\"\n        graphics\n        [\n            x    176.55\n            y    556.15\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    38\n        label    \"\"\n        graphics\n        [\n            x    233.16\n            y    333.93\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    39\n        label    \"\"\n        graphics\n        [\n            x    540.84\n            y    375.03\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    40\n        label    \"\"\n        graphics\n        [\n            x    609.06\n            y    875.26\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    41\n        label    \"\"\n        graphics\n        [\n            x    862.64\n            y    271.28\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    42\n        label    \"\"\n        graphics\n        [\n            x    967.71\n            y    353.43\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    43\n        label    \"\"\n        graphics\n        [\n            x    62.98\n            y    100.49\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    44\n        label    \"\"\n        graphics\n        [\n            x    814.55\n            y    729.50\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    45\n        label    \"\"\n        graphics\n        [\n            x    711.40\n            y    907.65\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    46\n        label    \"\"\n        graphics\n        [\n            x    80.72\n            y    203.59\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    47\n        label    \"\"\n        graphics\n        [\n            x    354.26\n            y    207.99\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    48\n        label    \"\"\n        graphics\n        [\n            x    277.54\n            y    636.11\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    49\n        label    \"\"\n        graphics\n        [\n            x    924.71\n            y    754.58\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    50\n        label    \"\"\n        graphics\n        [\n            x    651.69\n            y    483.71\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    51\n        label    \"\"\n        graphics\n        [\n            x    230.07\n            y    610.87\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    52\n        label    \"\"\n        graphics\n        [\n            x    950.30\n            y    654.52\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    53\n        label    \"\"\n        graphics\n        [\n            x    241.66\n            y    801.12\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    54\n        label    \"\"\n        graphics\n        [\n            x    931.51\n            y    4.90\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    55\n        label    \"\"\n        graphics\n        [\n            x    51.98\n            y    185.48\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    56\n        label    \"\"\n        graphics\n        [\n            x    861.14\n            y    950.28\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    57\n        label    \"\"\n        graphics\n        [\n            x    210.43\n            y    51.66\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    58\n        label    \"\"\n        graphics\n        [\n            x    811.91\n            y    988.23\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    59\n        label    \"\"\n        graphics\n        [\n            x    681.43\n            y    34.88\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    60\n        label    \"\"\n        graphics\n        [\n            x    317.17\n            y    742.23\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    61\n        label    \"\"\n        graphics\n        [\n            x    196.99\n            y    707.62\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    62\n        label    \"\"\n        graphics\n        [\n            x    436.77\n            y    477.59\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    63\n        label    \"\"\n        graphics\n        [\n            x    25.30\n            y    761.86\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    64\n        label    \"\"\n        graphics\n        [\n            x    180.74\n            y    190.76\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    65\n        label    \"\"\n        graphics\n        [\n            x    318.70\n            y    183.26\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    66\n        label    \"\"\n        graphics\n        [\n            x    571.56\n            y    928.05\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    67\n        label    \"\"\n        graphics\n        [\n            x    278.54\n            y    386.52\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    68\n        label    \"\"\n        graphics\n        [\n            x    344.45\n            y    164.51\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    69\n        label    \"\"\n        graphics\n        [\n            x    49.71\n            y    614.35\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    70\n        label    \"\"\n        graphics\n        [\n            x    217.06\n            y    547.52\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    71\n        label    \"\"\n        graphics\n        [\n            x    36.14\n            y    525.62\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    72\n        label    \"\"\n        graphics\n        [\n            x    319.83\n            y    584.85\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    73\n        label    \"\"\n        graphics\n        [\n            x    637.63\n            y    431.44\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    74\n        label    \"\"\n        graphics\n        [\n            x    392.66\n            y    700.42\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    75\n        label    \"\"\n        graphics\n        [\n            x    472.86\n            y    1008.75\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    76\n        label    \"\"\n        graphics\n        [\n            x    718.02\n            y    172.28\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    77\n        label    \"\"\n        graphics\n        [\n            x    972.64\n            y    314.52\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    78\n        label    \"\"\n        graphics\n        [\n            x    280.95\n            y    356.35\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    79\n        label    \"\"\n        graphics\n        [\n            x    44.55\n            y    547.59\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    80\n        label    \"\"\n        graphics\n        [\n            x    633.93\n            y    396.46\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    81\n        label    \"\"\n        graphics\n        [\n            x    266.87\n            y    34.11\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    82\n        label    \"\"\n        graphics\n        [\n            x    617.96\n            y    452.61\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    83\n        label    \"\"\n        graphics\n        [\n            x    241.30\n            y    968.95\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    84\n        label    \"\"\n        graphics\n        [\n            x    884.06\n            y    696.01\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    85\n        label    \"\"\n        graphics\n        [\n            x    434.49\n            y    721.06\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    86\n        label    \"\"\n        graphics\n        [\n            x    510.95\n            y    909.41\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    87\n        label    \"\"\n        graphics\n        [\n            x    790.58\n            y    250.12\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    88\n        label    \"\"\n        graphics\n        [\n            x    985.68\n            y    981.82\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    89\n        label    \"\"\n        graphics\n        [\n            x    839.43\n            y    598.73\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    90\n        label    \"\"\n        graphics\n        [\n            x    885.37\n            y    347.74\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    91\n        label    \"\"\n        graphics\n        [\n            x    579.07\n            y    975.02\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    92\n        label    \"\"\n        graphics\n        [\n            x    351.40\n            y    252.30\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    93\n        label    \"\"\n        graphics\n        [\n            x    369.53\n            y    437.86\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    94\n        label    \"\"\n        graphics\n        [\n            x    994.09\n            y    481.80\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    95\n        label    \"\"\n        graphics\n        [\n            x    729.40\n            y    840.34\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    96\n        label    \"\"\n        graphics\n        [\n            x    435.60\n            y    79.49\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    97\n        label    \"\"\n        graphics\n        [\n            x    772.74\n            y    541.68\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    98\n        label    \"\"\n        graphics\n        [\n            x    228.23\n            y    941.16\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    99\n        label    \"\"\n        graphics\n        [\n            x    614.71\n            y    860.59\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    100\n        label    \"\"\n        graphics\n        [\n            x    522.85\n            y    227.30\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    101\n        label    \"\"\n        graphics\n        [\n            x    684.13\n            y    632.68\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    102\n        label    \"\"\n        graphics\n        [\n            x    519.30\n            y    102.41\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    103\n        label    \"\"\n        graphics\n        [\n            x    772.42\n            y    556.24\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    104\n        label    \"\"\n        graphics\n        [\n            x    518.33\n            y    468.58\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    105\n        label    \"\"\n        graphics\n        [\n            x    881.48\n            y    180.42\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    106\n        label    \"\"\n        graphics\n        [\n            x    612.43\n            y    784.52\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    107\n        label    \"\"\n        graphics\n        [\n            x    159.63\n            y    286.63\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    108\n        label    \"\"\n        graphics\n        [\n            x    420.52\n            y    536.64\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    109\n        label    \"\"\n        graphics\n        [\n            x    1017.76\n            y    515.03\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    110\n        label    \"\"\n        graphics\n        [\n            x    619.07\n            y    931.61\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    111\n        label    \"\"\n        graphics\n        [\n            x    260.05\n            y    871.17\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    112\n        label    \"\"\n        graphics\n        [\n            x    723.21\n            y    130.47\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    113\n        label    \"\"\n        graphics\n        [\n            x    100.80\n            y    308.66\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    114\n        label    \"\"\n        graphics\n        [\n            x    741.90\n            y    499.69\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    115\n        label    \"\"\n        graphics\n        [\n            x    1011.36\n            y    730.92\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    116\n        label    \"\"\n        graphics\n        [\n            x    387.38\n            y    841.57\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    117\n        label    \"\"\n        graphics\n        [\n            x    1018.65\n            y    906.32\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    118\n        label    \"\"\n        graphics\n        [\n            x    611.07\n            y    216.92\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    119\n        label    \"\"\n        graphics\n        [\n            x    766.81\n            y    28.64\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    120\n        label    \"\"\n        graphics\n        [\n            x    706.86\n            y    294.94\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    121\n        label    \"\"\n        graphics\n        [\n            x    713.17\n            y    545.93\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    122\n        label    \"\"\n        graphics\n        [\n            x    73.01\n            y    379.85\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    123\n        label    \"\"\n        graphics\n        [\n            x    943.91\n            y    429.73\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    124\n        label    \"\"\n        graphics\n        [\n            x    709.34\n            y    322.01\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    125\n        label    \"\"\n        graphics\n        [\n            x    795.46\n            y    448.10\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    126\n        label    \"\"\n        graphics\n        [\n            x    0.10\n            y    315.60\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    127\n        label    \"\"\n        graphics\n        [\n            x    117.01\n            y    870.67\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    128\n        label    \"\"\n        graphics\n        [\n            x    578.38\n            y    798.70\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    129\n        label    \"\"\n        graphics\n        [\n            x    401.53\n            y    882.46\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    edge\n    [\n        source    1\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    1\n        target    36\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    10\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    100\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    101\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    102\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    103\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    103\n        target    67\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    104\n        target    92\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    105\n        target    19\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    106\n        target    34\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    107\n        target    51\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    108\n        target    35\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    109\n        target    37\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    11\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    110\n        target    59\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    111\n        target    59\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    112\n        target    104\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    113\n        target    66\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    113\n        target    71\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    114\n        target    96\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    115\n        target    39\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    116\n        target    82\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    117\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    118\n        target    24\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    119\n        target    110\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    12\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    120\n        target    85\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    121\n        target    120\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    122\n        target    38\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    123\n        target    43\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    124\n        target    98\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    125\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    126\n        target    104\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    127\n        target    30\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    128\n        target    111\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    129\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    13\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    14\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    15\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    16\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    17\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    18\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    19\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    19\n        target    62\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    2\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    20\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    21\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    22\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    23\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    24\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    25\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    26\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    27\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    28\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    29\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    3\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    30\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    31\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    32\n        target    19\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    33\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    34\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    34\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    35\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    35\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    36\n        target    20\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    37\n        target    29\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    38\n        target    32\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    39\n        target    19\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    4\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    40\n        target    37\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    41\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    42\n        target    34\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    43\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    44\n        target    31\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    45\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    46\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    47\n        target    26\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    48\n        target    29\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    49\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    5\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    50\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    51\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    52\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    52\n        target    79\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    53\n        target    32\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    54\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    55\n        target    53\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    56\n        target    53\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    57\n        target    42\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    58\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    59\n        target    57\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    6\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    6\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    6\n        target    65\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    60\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    60\n        target    42\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    61\n        target    25\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    62\n        target    56\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    63\n        target    56\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    64\n        target    33\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    64\n        target    51\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    65\n        target    36\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    66\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    67\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    68\n        target    47\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    69\n        target    61\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    7\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    70\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    71\n        target    34\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    72\n        target    25\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    73\n        target    63\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    74\n        target    19\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    75\n        target    67\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    76\n        target    54\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    77\n        target    52\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    78\n        target    63\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    79\n        target    74\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    8\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    80\n        target    70\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    81\n        target    48\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    82\n        target    24\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    83\n        target    41\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    84\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    85\n        target    71\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    86\n        target    70\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    87\n        target    41\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    88\n        target    25\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    89\n        target    80\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    9\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    90\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    91\n        target    46\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    92\n        target    26\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    93\n        target    73\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    93\n        target    99\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    94\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    94\n        target    76\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    95\n        target    54\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    96\n        target    46\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    97\n        target    50\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    98\n        target    94\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    99\n        target    36\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    99\n        target    94\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n]\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v130e143.tglf",
    "content": "0 108.000 298.000 30.000 30.000\n1 917.000 525.000 30.000 30.000\n2 725.000 775.000 30.000 30.000\n3 550.000 747.000 30.000 30.000\n4 56.000 370.000 30.000 30.000\n5 870.000 646.000 30.000 30.000\n6 685.000 223.000 30.000 30.000\n7 97.000 630.000 30.000 30.000\n8 188.000 638.000 30.000 30.000\n9 1008.000 613.000 30.000 30.000\n10 395.000 676.000 30.000 30.000\n11 712.000 260.000 30.000 30.000\n12 205.000 1022.000 30.000 30.000\n13 92.000 271.000 30.000 30.000\n14 388.000 241.000 30.000 30.000\n15 23.000 310.000 30.000 30.000\n16 523.000 696.000 30.000 30.000\n17 714.000 480.000 30.000 30.000\n18 319.000 470.000 30.000 30.000\n19 570.000 814.000 30.000 30.000\n20 201.000 305.000 30.000 30.000\n21 447.000 898.000 30.000 30.000\n22 67.000 252.000 30.000 30.000\n23 134.000 512.000 30.000 30.000\n24 455.000 127.000 30.000 30.000\n25 612.000 793.000 30.000 30.000\n26 395.000 846.000 30.000 30.000\n27 6.000 311.000 30.000 30.000\n28 497.000 700.000 30.000 30.000\n29 211.000 192.000 30.000 30.000\n30 395.000 33.000 30.000 30.000\n31 376.000 777.000 30.000 30.000\n32 553.000 545.000 30.000 30.000\n33 1022.000 217.000 30.000 30.000\n34 255.000 357.000 30.000 30.000\n35 595.000 131.000 30.000 30.000\n36 727.000 13.000 30.000 30.000\n37 176.000 556.000 30.000 30.000\n38 233.000 333.000 30.000 30.000\n39 540.000 375.000 30.000 30.000\n40 609.000 875.000 30.000 30.000\n41 862.000 271.000 30.000 30.000\n42 967.000 353.000 30.000 30.000\n43 62.000 100.000 30.000 30.000\n44 814.000 729.000 30.000 30.000\n45 711.000 907.000 30.000 30.000\n46 80.000 203.000 30.000 30.000\n47 354.000 207.000 30.000 30.000\n48 277.000 636.000 30.000 30.000\n49 924.000 754.000 30.000 30.000\n50 651.000 483.000 30.000 30.000\n51 230.000 610.000 30.000 30.000\n52 950.000 654.000 30.000 30.000\n53 241.000 801.000 30.000 30.000\n54 931.000 4.000 30.000 30.000\n55 51.000 185.000 30.000 30.000\n56 861.000 950.000 30.000 30.000\n57 210.000 51.000 30.000 30.000\n58 811.000 988.000 30.000 30.000\n59 681.000 34.000 30.000 30.000\n60 317.000 742.000 30.000 30.000\n61 196.000 707.000 30.000 30.000\n62 436.000 477.000 30.000 30.000\n63 25.000 761.000 30.000 30.000\n64 180.000 190.000 30.000 30.000\n65 318.000 183.000 30.000 30.000\n66 571.000 928.000 30.000 30.000\n67 278.000 386.000 30.000 30.000\n68 344.000 164.000 30.000 30.000\n69 49.000 614.000 30.000 30.000\n70 217.000 547.000 30.000 30.000\n71 36.000 525.000 30.000 30.000\n72 319.000 584.000 30.000 30.000\n73 637.000 431.000 30.000 30.000\n74 392.000 700.000 30.000 30.000\n75 472.000 1008.000 30.000 30.000\n76 718.000 172.000 30.000 30.000\n77 972.000 314.000 30.000 30.000\n78 280.000 356.000 30.000 30.000\n79 44.000 547.000 30.000 30.000\n80 633.000 396.000 30.000 30.000\n81 266.000 34.000 30.000 30.000\n82 617.000 452.000 30.000 30.000\n83 241.000 968.000 30.000 30.000\n84 884.000 696.000 30.000 30.000\n85 434.000 721.000 30.000 30.000\n86 510.000 909.000 30.000 30.000\n87 790.000 250.000 30.000 30.000\n88 985.000 981.000 30.000 30.000\n89 839.000 598.000 30.000 30.000\n90 885.000 347.000 30.000 30.000\n91 579.000 975.000 30.000 30.000\n92 351.000 252.000 30.000 30.000\n93 369.000 437.000 30.000 30.000\n94 994.000 481.000 30.000 30.000\n95 729.000 840.000 30.000 30.000\n96 435.000 79.000 30.000 30.000\n97 772.000 541.000 30.000 30.000\n98 228.000 941.000 30.000 30.000\n99 614.000 860.000 30.000 30.000\n100 522.000 227.000 30.000 30.000\n101 684.000 632.000 30.000 30.000\n102 519.000 102.000 30.000 30.000\n103 772.000 556.000 30.000 30.000\n104 518.000 468.000 30.000 30.000\n105 881.000 180.000 30.000 30.000\n106 612.000 784.000 30.000 30.000\n107 159.000 286.000 30.000 30.000\n108 420.000 536.000 30.000 30.000\n109 1017.000 515.000 30.000 30.000\n110 619.000 931.000 30.000 30.000\n111 260.000 871.000 30.000 30.000\n112 723.000 130.000 30.000 30.000\n113 100.000 308.000 30.000 30.000\n114 741.000 499.000 30.000 30.000\n115 1011.000 730.000 30.000 30.000\n116 387.000 841.000 30.000 30.000\n117 1018.000 906.000 30.000 30.000\n118 611.000 216.000 30.000 30.000\n119 766.000 28.000 30.000 30.000\n120 706.000 294.000 30.000 30.000\n121 713.000 545.000 30.000 30.000\n122 73.000 379.000 30.000 30.000\n123 943.000 429.000 30.000 30.000\n124 709.000 322.000 30.000 30.000\n125 795.000 448.000 30.000 30.000\n126 0.000 315.000 30.000 30.000\n127 117.000 870.000 30.000 30.000\n128 578.000 798.000 30.000 30.000\n129 401.000 882.000 30.000 30.000\n#\n92 26\n58 2\n33 7\n3 2\n31 6\n13 12\n57 42\n73 63\n120 85\n22 2\n6 65\n43 16\n37 29\n97 50\n51 6\n103 67\n119 110\n10 4\n69 61\n48 29\n28 8\n35 18\n115 39\n60 13\n86 70\n93 73\n105 19\n27 11\n94 76\n89 80\n46 5\n93 99\n108 35\n100 16\n44 31\n114 96\n106 34\n123 43\n36 20\n107 51\n118 24\n12 1\n70 8\n111 59\n40 37\n63 56\n24 7\n47 26\n99 94\n19 3\n52 79\n23 17\n34 8\n84 12\n26 4\n90 5\n83 41\n75 67\n122 38\n32 19\n11 8\n41 18\n5 1\n66 7\n102 12\n65 36\n109 37\n62 56\n53 32\n78 63\n15 12\n112 104\n50 13\n124 98\n72 25\n4 1\n80 70\n60 42\n2 1\n110 59\n71 34\n9 2\n42 34\n113 71\n67 3\n39 19\n95 54\n30 23\n7 5\n128 111\n82 24\n99 36\n54 4\n91 46\n94 21\n79 74\n103 2\n17 3\n76 54\n56 53\n113 66\n8 7\n74 19\n81 48\n1 36\n98 94\n6 0\n64 33\n116 82\n85 71\n129 6\n125 14\n117 23\n18 8\n16 11\n61 25\n127 30\n38 32\n35 8\n77 52\n49 8\n68 47\n45 21\n121 120\n34 17\n96 46\n104 92\n126 104\n19 62\n6 1\n20 6\n21 5\n14 2\n64 51\n88 25\n59 57\n87 41\n29 11\n1 0\n25 6\n101 21\n52 2\n55 53\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v130e156.gml",
    "content": "graph\n[\n    node\n    [\n        id    0\n        label    \"\"\n        graphics\n        [\n            x    720.99\n            y    915.11\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    1\n        label    \"\"\n        graphics\n        [\n            x    993.46\n            y    975.92\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    2\n        label    \"\"\n        graphics\n        [\n            x    990.23\n            y    590.72\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    3\n        label    \"\"\n        graphics\n        [\n            x    666.92\n            y    835.78\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    4\n        label    \"\"\n        graphics\n        [\n            x    403.68\n            y    46.63\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    5\n        label    \"\"\n        graphics\n        [\n            x    833.43\n            y    564.03\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    6\n        label    \"\"\n        graphics\n        [\n            x    155.08\n            y    345.44\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    7\n        label    \"\"\n        graphics\n        [\n            x    898.33\n            y    594.88\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    8\n        label    \"\"\n        graphics\n        [\n            x    286.74\n            y    48.83\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    9\n        label    \"\"\n        graphics\n        [\n            x    648.61\n            y    624.67\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    10\n        label    \"\"\n        graphics\n        [\n            x    384.65\n            y    365.19\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    11\n        label    \"\"\n        graphics\n        [\n            x    837.45\n            y    863.94\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    12\n        label    \"\"\n        graphics\n        [\n            x    697.43\n            y    142.39\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    13\n        label    \"\"\n        graphics\n        [\n            x    333.77\n            y    312.77\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    14\n        label    \"\"\n        graphics\n        [\n            x    982.85\n            y    97.40\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    15\n        label    \"\"\n        graphics\n        [\n            x    455.63\n            y    908.11\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    16\n        label    \"\"\n        graphics\n        [\n            x    671.39\n            y    986.45\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    17\n        label    \"\"\n        graphics\n        [\n            x    555.19\n            y    94.74\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    18\n        label    \"\"\n        graphics\n        [\n            x    948.90\n            y    584.31\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    19\n        label    \"\"\n        graphics\n        [\n            x    597.22\n            y    841.71\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    20\n        label    \"\"\n        graphics\n        [\n            x    741.02\n            y    803.23\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    21\n        label    \"\"\n        graphics\n        [\n            x    820.84\n            y    92.42\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    22\n        label    \"\"\n        graphics\n        [\n            x    782.38\n            y    239.60\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    23\n        label    \"\"\n        graphics\n        [\n            x    502.66\n            y    379.54\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    24\n        label    \"\"\n        graphics\n        [\n            x    743.99\n            y    831.90\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    25\n        label    \"\"\n        graphics\n        [\n            x    637.13\n            y    612.49\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    26\n        label    \"\"\n        graphics\n        [\n            x    292.43\n            y    856.17\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    27\n        label    \"\"\n        graphics\n        [\n            x    332.63\n            y    343.86\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    28\n        label    \"\"\n        graphics\n        [\n            x    581.37\n            y    74.14\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    29\n        label    \"\"\n        graphics\n        [\n            x    221.90\n            y    540.15\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    30\n        label    \"\"\n        graphics\n        [\n            x    368.79\n            y    74.82\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    31\n        label    \"\"\n        graphics\n        [\n            x    886.15\n            y    198.05\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    32\n        label    \"\"\n        graphics\n        [\n            x    732.09\n            y    690.59\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    33\n        label    \"\"\n        graphics\n        [\n            x    863.53\n            y    394.42\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    34\n        label    \"\"\n        graphics\n        [\n            x    921.87\n            y    136.48\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    35\n        label    \"\"\n        graphics\n        [\n            x    869.68\n            y    256.72\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    36\n        label    \"\"\n        graphics\n        [\n            x    66.98\n            y    759.63\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    37\n        label    \"\"\n        graphics\n        [\n            x    267.32\n            y    598.70\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    38\n        label    \"\"\n        graphics\n        [\n            x    133.94\n            y    872.37\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    39\n        label    \"\"\n        graphics\n        [\n            x    574.06\n            y    619.81\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    40\n        label    \"\"\n        graphics\n        [\n            x    757.16\n            y    130.58\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    41\n        label    \"\"\n        graphics\n        [\n            x    598.81\n            y    445.63\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    42\n        label    \"\"\n        graphics\n        [\n            x    727.33\n            y    302.76\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    43\n        label    \"\"\n        graphics\n        [\n            x    736.61\n            y    577.67\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    44\n        label    \"\"\n        graphics\n        [\n            x    243.09\n            y    715.94\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    45\n        label    \"\"\n        graphics\n        [\n            x    968.74\n            y    353.96\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    46\n        label    \"\"\n        graphics\n        [\n            x    573.02\n            y    311.19\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    47\n        label    \"\"\n        graphics\n        [\n            x    421.48\n            y    864.99\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    48\n        label    \"\"\n        graphics\n        [\n            x    106.60\n            y    193.17\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    49\n        label    \"\"\n        graphics\n        [\n            x    754.53\n            y    837.59\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    50\n        label    \"\"\n        graphics\n        [\n            x    1000.75\n            y    426.43\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    51\n        label    \"\"\n        graphics\n        [\n            x    249.42\n            y    140.38\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    52\n        label    \"\"\n        graphics\n        [\n            x    451.82\n            y    178.32\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    53\n        label    \"\"\n        graphics\n        [\n            x    526.49\n            y    266.56\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    54\n        label    \"\"\n        graphics\n        [\n            x    377.51\n            y    0.27\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    55\n        label    \"\"\n        graphics\n        [\n            x    155.69\n            y    8.64\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    56\n        label    \"\"\n        graphics\n        [\n            x    439.82\n            y    294.28\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    57\n        label    \"\"\n        graphics\n        [\n            x    346.44\n            y    922.11\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    58\n        label    \"\"\n        graphics\n        [\n            x    100.21\n            y    332.51\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    59\n        label    \"\"\n        graphics\n        [\n            x    325.82\n            y    795.80\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    60\n        label    \"\"\n        graphics\n        [\n            x    955.35\n            y    20.55\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    61\n        label    \"\"\n        graphics\n        [\n            x    512.40\n            y    955.34\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    62\n        label    \"\"\n        graphics\n        [\n            x    646.21\n            y    310.51\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    63\n        label    \"\"\n        graphics\n        [\n            x    810.05\n            y    543.14\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    64\n        label    \"\"\n        graphics\n        [\n            x    328.61\n            y    44.47\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    65\n        label    \"\"\n        graphics\n        [\n            x    463.45\n            y    108.53\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    66\n        label    \"\"\n        graphics\n        [\n            x    217.51\n            y    57.94\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    67\n        label    \"\"\n        graphics\n        [\n            x    390.10\n            y    103.66\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    68\n        label    \"\"\n        graphics\n        [\n            x    791.77\n            y    474.90\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    69\n        label    \"\"\n        graphics\n        [\n            x    392.85\n            y    390.83\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    70\n        label    \"\"\n        graphics\n        [\n            x    778.75\n            y    176.66\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    71\n        label    \"\"\n        graphics\n        [\n            x    993.69\n            y    345.95\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    72\n        label    \"\"\n        graphics\n        [\n            x    439.87\n            y    112.70\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    73\n        label    \"\"\n        graphics\n        [\n            x    194.55\n            y    589.18\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    74\n        label    \"\"\n        graphics\n        [\n            x    79.87\n            y    355.39\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    75\n        label    \"\"\n        graphics\n        [\n            x    1014.16\n            y    747.94\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    76\n        label    \"\"\n        graphics\n        [\n            x    984.29\n            y    131.60\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    77\n        label    \"\"\n        graphics\n        [\n            x    28.30\n            y    889.61\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    78\n        label    \"\"\n        graphics\n        [\n            x    234.15\n            y    91.24\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    79\n        label    \"\"\n        graphics\n        [\n            x    694.92\n            y    795.40\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    80\n        label    \"\"\n        graphics\n        [\n            x    104.34\n            y    1005.22\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    81\n        label    \"\"\n        graphics\n        [\n            x    625.80\n            y    172.87\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    82\n        label    \"\"\n        graphics\n        [\n            x    235.89\n            y    708.74\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    83\n        label    \"\"\n        graphics\n        [\n            x    885.06\n            y    777.15\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    84\n        label    \"\"\n        graphics\n        [\n            x    562.54\n            y    423.62\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    85\n        label    \"\"\n        graphics\n        [\n            x    886.48\n            y    683.89\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    86\n        label    \"\"\n        graphics\n        [\n            x    32.93\n            y    142.92\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    87\n        label    \"\"\n        graphics\n        [\n            x    226.69\n            y    177.35\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    88\n        label    \"\"\n        graphics\n        [\n            x    302.30\n            y    374.19\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    89\n        label    \"\"\n        graphics\n        [\n            x    200.06\n            y    998.67\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    90\n        label    \"\"\n        graphics\n        [\n            x    590.63\n            y    393.53\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    91\n        label    \"\"\n        graphics\n        [\n            x    689.14\n            y    317.86\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    92\n        label    \"\"\n        graphics\n        [\n            x    918.42\n            y    223.79\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    93\n        label    \"\"\n        graphics\n        [\n            x    172.04\n            y    928.36\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    94\n        label    \"\"\n        graphics\n        [\n            x    678.64\n            y    599.39\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    95\n        label    \"\"\n        graphics\n        [\n            x    576.55\n            y    336.16\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    96\n        label    \"\"\n        graphics\n        [\n            x    212.60\n            y    929.51\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    97\n        label    \"\"\n        graphics\n        [\n            x    600.88\n            y    529.59\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    98\n        label    \"\"\n        graphics\n        [\n            x    12.08\n            y    971.15\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    99\n        label    \"\"\n        graphics\n        [\n            x    666.79\n            y    844.49\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    100\n        label    \"\"\n        graphics\n        [\n            x    679.46\n            y    247.65\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    101\n        label    \"\"\n        graphics\n        [\n            x    896.67\n            y    513.53\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    102\n        label    \"\"\n        graphics\n        [\n            x    19.48\n            y    710.77\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    103\n        label    \"\"\n        graphics\n        [\n            x    264.27\n            y    732.15\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    104\n        label    \"\"\n        graphics\n        [\n            x    403.06\n            y    443.06\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    105\n        label    \"\"\n        graphics\n        [\n            x    718.11\n            y    158.66\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    106\n        label    \"\"\n        graphics\n        [\n            x    283.29\n            y    1024.72\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    107\n        label    \"\"\n        graphics\n        [\n            x    97.57\n            y    1007.96\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    108\n        label    \"\"\n        graphics\n        [\n            x    751.37\n            y    939.72\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    109\n        label    \"\"\n        graphics\n        [\n            x    732.41\n            y    919.12\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    110\n        label    \"\"\n        graphics\n        [\n            x    102.94\n            y    473.77\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    111\n        label    \"\"\n        graphics\n        [\n            x    465.67\n            y    136.29\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    112\n        label    \"\"\n        graphics\n        [\n            x    957.82\n            y    770.79\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    113\n        label    \"\"\n        graphics\n        [\n            x    985.11\n            y    4.18\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    114\n        label    \"\"\n        graphics\n        [\n            x    926.13\n            y    894.61\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    115\n        label    \"\"\n        graphics\n        [\n            x    352.16\n            y    807.77\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    116\n        label    \"\"\n        graphics\n        [\n            x    691.67\n            y    1023.34\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    117\n        label    \"\"\n        graphics\n        [\n            x    220.05\n            y    712.97\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    118\n        label    \"\"\n        graphics\n        [\n            x    186.95\n            y    287.44\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    119\n        label    \"\"\n        graphics\n        [\n            x    414.02\n            y    856.53\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    120\n        label    \"\"\n        graphics\n        [\n            x    984.82\n            y    800.56\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    121\n        label    \"\"\n        graphics\n        [\n            x    789.82\n            y    678.73\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    122\n        label    \"\"\n        graphics\n        [\n            x    189.56\n            y    816.85\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    123\n        label    \"\"\n        graphics\n        [\n            x    21.85\n            y    957.77\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    124\n        label    \"\"\n        graphics\n        [\n            x    321.42\n            y    403.34\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    125\n        label    \"\"\n        graphics\n        [\n            x    754.03\n            y    765.63\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    126\n        label    \"\"\n        graphics\n        [\n            x    794.27\n            y    288.31\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    127\n        label    \"\"\n        graphics\n        [\n            x    255.92\n            y    667.52\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    128\n        label    \"\"\n        graphics\n        [\n            x    805.23\n            y    963.15\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    129\n        label    \"\"\n        graphics\n        [\n            x    818.53\n            y    524.68\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    edge\n    [\n        source    1\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    10\n        target    113\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    10\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    100\n        target    73\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    101\n        target    86\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    102\n        target    38\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    103\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    104\n        target    91\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    105\n        target    91\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    106\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    106\n        target    95\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    107\n        target    31\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    108\n        target    36\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    109\n        target    95\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    11\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    11\n        target    34\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    110\n        target    38\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    111\n        target    64\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    112\n        target    77\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    113\n        target    105\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    114\n        target    27\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    114\n        target    88\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    115\n        target    82\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    116\n        target    44\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    116\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    117\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    117\n        target    49\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    118\n        target    31\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    119\n        target    64\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    119\n        target    83\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    12\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    120\n        target    98\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    121\n        target    77\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    122\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    123\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    124\n        target    118\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    125\n        target    74\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    126\n        target    107\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    126\n        target    73\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    127\n        target    110\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    128\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    129\n        target    77\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    13\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    14\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    15\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    16\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    17\n        target    50\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    17\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    17\n        target    82\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    18\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    19\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    2\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    20\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    21\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    21\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    21\n        target    98\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    22\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    23\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    23\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    24\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    25\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    26\n        target    19\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    27\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    28\n        target    19\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    29\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    3\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    3\n        target    53\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    30\n        target    20\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    30\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    31\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    32\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    32\n        target    64\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    33\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    34\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    35\n        target    34\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    36\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    37\n        target    25\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    38\n        target    32\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    38\n        target    50\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    39\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    4\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    40\n        target    20\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    41\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    42\n        target    41\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    43\n        target    25\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    44\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    45\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    46\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    47\n        target    46\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    48\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    49\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    5\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    50\n        target    24\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    51\n        target    31\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    52\n        target    28\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    53\n        target    112\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    53\n        target    52\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    54\n        target    45\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    55\n        target    49\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    56\n        target    20\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    56\n        target    40\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    57\n        target    102\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    57\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    58\n        target    19\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    58\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    59\n        target    42\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    6\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    60\n        target    36\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    61\n        target    20\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    62\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    63\n        target    42\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    64\n        target    27\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    65\n        target    25\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    66\n        target    65\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    67\n        target    35\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    68\n        target    38\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    69\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    7\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    70\n        target    63\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    71\n        target    43\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    71\n        target    68\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    72\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    73\n        target    19\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    74\n        target    71\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    75\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    76\n        target    30\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    77\n        target    68\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    78\n        target    54\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    79\n        target    76\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    8\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    80\n        target    73\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    81\n        target    33\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    81\n        target    68\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    81\n        target    87\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    82\n        target    49\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    83\n        target    56\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    84\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    85\n        target    71\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    86\n        target    76\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    87\n        target    53\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    87\n        target    77\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    88\n        target    65\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    89\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    89\n        target    76\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    9\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    90\n        target    51\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    91\n        target    112\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    91\n        target    51\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    92\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    93\n        target    20\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    94\n        target    76\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    95\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    96\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    97\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    98\n        target    20\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    99\n        target    80\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n]\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v130e156.tglf",
    "content": "0 720.000 915.000 30.000 30.000\n1 993.000 975.000 30.000 30.000\n2 990.000 590.000 30.000 30.000\n3 666.000 835.000 30.000 30.000\n4 403.000 46.000 30.000 30.000\n5 833.000 564.000 30.000 30.000\n6 155.000 345.000 30.000 30.000\n7 898.000 594.000 30.000 30.000\n8 286.000 48.000 30.000 30.000\n9 648.000 624.000 30.000 30.000\n10 384.000 365.000 30.000 30.000\n11 837.000 863.000 30.000 30.000\n12 697.000 142.000 30.000 30.000\n13 333.000 312.000 30.000 30.000\n14 982.000 97.000 30.000 30.000\n15 455.000 908.000 30.000 30.000\n16 671.000 986.000 30.000 30.000\n17 555.000 94.000 30.000 30.000\n18 948.000 584.000 30.000 30.000\n19 597.000 841.000 30.000 30.000\n20 741.000 803.000 30.000 30.000\n21 820.000 92.000 30.000 30.000\n22 782.000 239.000 30.000 30.000\n23 502.000 379.000 30.000 30.000\n24 743.000 831.000 30.000 30.000\n25 637.000 612.000 30.000 30.000\n26 292.000 856.000 30.000 30.000\n27 332.000 343.000 30.000 30.000\n28 581.000 74.000 30.000 30.000\n29 221.000 540.000 30.000 30.000\n30 368.000 74.000 30.000 30.000\n31 886.000 198.000 30.000 30.000\n32 732.000 690.000 30.000 30.000\n33 863.000 394.000 30.000 30.000\n34 921.000 136.000 30.000 30.000\n35 869.000 256.000 30.000 30.000\n36 66.000 759.000 30.000 30.000\n37 267.000 598.000 30.000 30.000\n38 133.000 872.000 30.000 30.000\n39 574.000 619.000 30.000 30.000\n40 757.000 130.000 30.000 30.000\n41 598.000 445.000 30.000 30.000\n42 727.000 302.000 30.000 30.000\n43 736.000 577.000 30.000 30.000\n44 243.000 715.000 30.000 30.000\n45 968.000 353.000 30.000 30.000\n46 573.000 311.000 30.000 30.000\n47 421.000 864.000 30.000 30.000\n48 106.000 193.000 30.000 30.000\n49 754.000 837.000 30.000 30.000\n50 1000.000 426.000 30.000 30.000\n51 249.000 140.000 30.000 30.000\n52 451.000 178.000 30.000 30.000\n53 526.000 266.000 30.000 30.000\n54 377.000 0.000 30.000 30.000\n55 155.000 8.000 30.000 30.000\n56 439.000 294.000 30.000 30.000\n57 346.000 922.000 30.000 30.000\n58 100.000 332.000 30.000 30.000\n59 325.000 795.000 30.000 30.000\n60 955.000 20.000 30.000 30.000\n61 512.000 955.000 30.000 30.000\n62 646.000 310.000 30.000 30.000\n63 810.000 543.000 30.000 30.000\n64 328.000 44.000 30.000 30.000\n65 463.000 108.000 30.000 30.000\n66 217.000 57.000 30.000 30.000\n67 390.000 103.000 30.000 30.000\n68 791.000 474.000 30.000 30.000\n69 392.000 390.000 30.000 30.000\n70 778.000 176.000 30.000 30.000\n71 993.000 345.000 30.000 30.000\n72 439.000 112.000 30.000 30.000\n73 194.000 589.000 30.000 30.000\n74 79.000 355.000 30.000 30.000\n75 1014.000 747.000 30.000 30.000\n76 984.000 131.000 30.000 30.000\n77 28.000 889.000 30.000 30.000\n78 234.000 91.000 30.000 30.000\n79 694.000 795.000 30.000 30.000\n80 104.000 1005.000 30.000 30.000\n81 625.000 172.000 30.000 30.000\n82 235.000 708.000 30.000 30.000\n83 885.000 777.000 30.000 30.000\n84 562.000 423.000 30.000 30.000\n85 886.000 683.000 30.000 30.000\n86 32.000 142.000 30.000 30.000\n87 226.000 177.000 30.000 30.000\n88 302.000 374.000 30.000 30.000\n89 200.000 998.000 30.000 30.000\n90 590.000 393.000 30.000 30.000\n91 689.000 317.000 30.000 30.000\n92 918.000 223.000 30.000 30.000\n93 172.000 928.000 30.000 30.000\n94 678.000 599.000 30.000 30.000\n95 576.000 336.000 30.000 30.000\n96 212.000 929.000 30.000 30.000\n97 600.000 529.000 30.000 30.000\n98 12.000 971.000 30.000 30.000\n99 666.000 844.000 30.000 30.000\n100 679.000 247.000 30.000 30.000\n101 896.000 513.000 30.000 30.000\n102 19.000 710.000 30.000 30.000\n103 264.000 732.000 30.000 30.000\n104 403.000 443.000 30.000 30.000\n105 718.000 158.000 30.000 30.000\n106 283.000 1024.000 30.000 30.000\n107 97.000 1007.000 30.000 30.000\n108 751.000 939.000 30.000 30.000\n109 732.000 919.000 30.000 30.000\n110 102.000 473.000 30.000 30.000\n111 465.000 136.000 30.000 30.000\n112 957.000 770.000 30.000 30.000\n113 985.000 4.000 30.000 30.000\n114 926.000 894.000 30.000 30.000\n115 352.000 807.000 30.000 30.000\n116 691.000 1023.000 30.000 30.000\n117 220.000 712.000 30.000 30.000\n118 186.000 287.000 30.000 30.000\n119 414.000 856.000 30.000 30.000\n120 984.000 800.000 30.000 30.000\n121 789.000 678.000 30.000 30.000\n122 189.000 816.000 30.000 30.000\n123 21.000 957.000 30.000 30.000\n124 321.000 403.000 30.000 30.000\n125 754.000 765.000 30.000 30.000\n126 794.000 288.000 30.000 30.000\n127 255.000 667.000 30.000 30.000\n128 805.000 963.000 30.000 30.000\n129 818.000 524.000 30.000 30.000\n#\n20 15\n73 19\n102 38\n117 49\n27 16\n37 25\n97 17\n4 3\n59 42\n71 68\n116 44\n15 0\n30 8\n12 10\n47 46\n43 25\n41 8\n10 6\n25 15\n38 50\n113 105\n32 11\n35 34\n28 19\n71 43\n9 6\n14 0\n72 17\n52 28\n127 110\n33 0\n21 18\n111 64\n17 8\n44 8\n108 36\n23 22\n89 76\n21 3\n106 95\n60 36\n50 24\n69 7\n79 76\n104 91\n3 2\n16 10\n2 1\n116 8\n51 31\n7 2\n115 82\n10 113\n122 21\n123 11\n112 77\n57 8\n58 4\n114 27\n29 2\n89 17\n49 21\n118 31\n54 45\n129 77\n48 10\n53 52\n42 41\n96 8\n23 2\n106 6\n40 20\n21 98\n26 19\n67 35\n80 73\n83 56\n99 80\n121 77\n32 64\n34 5\n101 86\n55 49\n103 8\n119 64\n98 20\n110 38\n64 27\n128 7\n90 51\n63 42\n81 68\n95 23\n126 107\n13 10\n70 63\n126 73\n114 88\n38 32\n119 83\n93 20\n84 22\n8 1\n39 22\n124 118\n109 95\n11 34\n86 76\n87 77\n24 12\n120 98\n88 65\n85 71\n3 53\n78 54\n36 2\n58 19\n18 8\n92 23\n75 11\n94 76\n68 38\n77 68\n61 20\n76 30\n53 112\n91 112\n57 102\n1 0\n17 50\n56 20\n5 1\n11 3\n45 2\n81 87\n65 25\n105 91\n31 3\n81 33\n56 40\n30 20\n66 65\n107 31\n22 3\n100 73\n19 8\n125 74\n6 1\n74 71\n117 22\n46 12\n82 49\n17 82\n87 53\n91 51\n62 4\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v130e169.gml",
    "content": "graph\n[\n    node\n    [\n        id    0\n        label    \"\"\n        graphics\n        [\n            x    814.95\n            y    74.30\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    1\n        label    \"\"\n        graphics\n        [\n            x    810.55\n            y    1024.01\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    2\n        label    \"\"\n        graphics\n        [\n            x    8.88\n            y    814.00\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    3\n        label    \"\"\n        graphics\n        [\n            x    458.33\n            y    652.34\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    4\n        label    \"\"\n        graphics\n        [\n            x    197.86\n            y    44.28\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    5\n        label    \"\"\n        graphics\n        [\n            x    223.03\n            y    304.71\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    6\n        label    \"\"\n        graphics\n        [\n            x    792.23\n            y    440.48\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    7\n        label    \"\"\n        graphics\n        [\n            x    973.66\n            y    364.70\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    8\n        label    \"\"\n        graphics\n        [\n            x    577.97\n            y    329.72\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    9\n        label    \"\"\n        graphics\n        [\n            x    1018.61\n            y    191.55\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    10\n        label    \"\"\n        graphics\n        [\n            x    938.77\n            y    272.20\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    11\n        label    \"\"\n        graphics\n        [\n            x    749.76\n            y    132.29\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    12\n        label    \"\"\n        graphics\n        [\n            x    611.71\n            y    368.65\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    13\n        label    \"\"\n        graphics\n        [\n            x    506.92\n            y    902.02\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    14\n        label    \"\"\n        graphics\n        [\n            x    292.13\n            y    263.79\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    15\n        label    \"\"\n        graphics\n        [\n            x    896.48\n            y    831.34\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    16\n        label    \"\"\n        graphics\n        [\n            x    369.41\n            y    956.70\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    17\n        label    \"\"\n        graphics\n        [\n            x    763.79\n            y    206.94\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    18\n        label    \"\"\n        graphics\n        [\n            x    47.78\n            y    980.35\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    19\n        label    \"\"\n        graphics\n        [\n            x    791.80\n            y    376.47\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    20\n        label    \"\"\n        graphics\n        [\n            x    648.30\n            y    579.51\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    21\n        label    \"\"\n        graphics\n        [\n            x    61.70\n            y    252.38\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    22\n        label    \"\"\n        graphics\n        [\n            x    661.79\n            y    29.30\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    23\n        label    \"\"\n        graphics\n        [\n            x    312.50\n            y    164.38\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    24\n        label    \"\"\n        graphics\n        [\n            x    306.38\n            y    370.92\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    25\n        label    \"\"\n        graphics\n        [\n            x    241.14\n            y    785.38\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    26\n        label    \"\"\n        graphics\n        [\n            x    800.54\n            y    140.82\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    27\n        label    \"\"\n        graphics\n        [\n            x    1023.37\n            y    921.48\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    28\n        label    \"\"\n        graphics\n        [\n            x    521.97\n            y    890.53\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    29\n        label    \"\"\n        graphics\n        [\n            x    628.72\n            y    814.01\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    30\n        label    \"\"\n        graphics\n        [\n            x    673.97\n            y    120.47\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    31\n        label    \"\"\n        graphics\n        [\n            x    933.80\n            y    196.55\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    32\n        label    \"\"\n        graphics\n        [\n            x    145.67\n            y    310.70\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    33\n        label    \"\"\n        graphics\n        [\n            x    726.83\n            y    654.50\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    34\n        label    \"\"\n        graphics\n        [\n            x    317.31\n            y    319.24\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    35\n        label    \"\"\n        graphics\n        [\n            x    579.47\n            y    934.91\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    36\n        label    \"\"\n        graphics\n        [\n            x    170.90\n            y    403.88\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    37\n        label    \"\"\n        graphics\n        [\n            x    1005.73\n            y    656.04\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    38\n        label    \"\"\n        graphics\n        [\n            x    741.44\n            y    158.93\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    39\n        label    \"\"\n        graphics\n        [\n            x    521.98\n            y    211.50\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    40\n        label    \"\"\n        graphics\n        [\n            x    538.50\n            y    997.01\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    41\n        label    \"\"\n        graphics\n        [\n            x    75.95\n            y    712.41\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    42\n        label    \"\"\n        graphics\n        [\n            x    399.62\n            y    862.61\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    43\n        label    \"\"\n        graphics\n        [\n            x    171.63\n            y    593.97\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    44\n        label    \"\"\n        graphics\n        [\n            x    1002.09\n            y    579.04\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    45\n        label    \"\"\n        graphics\n        [\n            x    585.91\n            y    597.80\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    46\n        label    \"\"\n        graphics\n        [\n            x    517.81\n            y    497.21\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    47\n        label    \"\"\n        graphics\n        [\n            x    870.47\n            y    811.04\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    48\n        label    \"\"\n        graphics\n        [\n            x    793.01\n            y    418.07\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    49\n        label    \"\"\n        graphics\n        [\n            x    534.08\n            y    169.70\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    50\n        label    \"\"\n        graphics\n        [\n            x    983.71\n            y    930.69\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    51\n        label    \"\"\n        graphics\n        [\n            x    95.25\n            y    176.70\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    52\n        label    \"\"\n        graphics\n        [\n            x    960.61\n            y    983.99\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    53\n        label    \"\"\n        graphics\n        [\n            x    319.95\n            y    644.23\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    54\n        label    \"\"\n        graphics\n        [\n            x    783.21\n            y    757.52\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    55\n        label    \"\"\n        graphics\n        [\n            x    55.16\n            y    723.62\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    56\n        label    \"\"\n        graphics\n        [\n            x    377.27\n            y    807.69\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    57\n        label    \"\"\n        graphics\n        [\n            x    249.36\n            y    973.96\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    58\n        label    \"\"\n        graphics\n        [\n            x    1006.59\n            y    995.68\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    59\n        label    \"\"\n        graphics\n        [\n            x    312.62\n            y    751.70\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    60\n        label    \"\"\n        graphics\n        [\n            x    891.51\n            y    342.70\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    61\n        label    \"\"\n        graphics\n        [\n            x    729.92\n            y    472.54\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    62\n        label    \"\"\n        graphics\n        [\n            x    347.55\n            y    288.41\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    63\n        label    \"\"\n        graphics\n        [\n            x    365.63\n            y    836.41\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    64\n        label    \"\"\n        graphics\n        [\n            x    983.10\n            y    638.26\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    65\n        label    \"\"\n        graphics\n        [\n            x    444.96\n            y    905.66\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    66\n        label    \"\"\n        graphics\n        [\n            x    870.41\n            y    1007.76\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    67\n        label    \"\"\n        graphics\n        [\n            x    898.94\n            y    829.73\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    68\n        label    \"\"\n        graphics\n        [\n            x    876.69\n            y    562.08\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    69\n        label    \"\"\n        graphics\n        [\n            x    153.10\n            y    931.85\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    70\n        label    \"\"\n        graphics\n        [\n            x    674.46\n            y    436.12\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    71\n        label    \"\"\n        graphics\n        [\n            x    749.55\n            y    347.39\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    72\n        label    \"\"\n        graphics\n        [\n            x    638.77\n            y    374.87\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    73\n        label    \"\"\n        graphics\n        [\n            x    732.54\n            y    941.52\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    74\n        label    \"\"\n        graphics\n        [\n            x    787.99\n            y    659.06\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    75\n        label    \"\"\n        graphics\n        [\n            x    8.11\n            y    932.86\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    76\n        label    \"\"\n        graphics\n        [\n            x    1015.81\n            y    385.23\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    77\n        label    \"\"\n        graphics\n        [\n            x    911.77\n            y    1017.89\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    78\n        label    \"\"\n        graphics\n        [\n            x    209.15\n            y    779.33\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    79\n        label    \"\"\n        graphics\n        [\n            x    164.56\n            y    191.48\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    80\n        label    \"\"\n        graphics\n        [\n            x    768.36\n            y    650.86\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    81\n        label    \"\"\n        graphics\n        [\n            x    6.24\n            y    345.14\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    82\n        label    \"\"\n        graphics\n        [\n            x    15.74\n            y    562.78\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    83\n        label    \"\"\n        graphics\n        [\n            x    135.88\n            y    156.08\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    84\n        label    \"\"\n        graphics\n        [\n            x    948.13\n            y    323.08\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    85\n        label    \"\"\n        graphics\n        [\n            x    954.50\n            y    857.54\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    86\n        label    \"\"\n        graphics\n        [\n            x    851.13\n            y    177.66\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    87\n        label    \"\"\n        graphics\n        [\n            x    516.54\n            y    344.68\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    88\n        label    \"\"\n        graphics\n        [\n            x    352.09\n            y    184.61\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    89\n        label    \"\"\n        graphics\n        [\n            x    672.76\n            y    523.41\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    90\n        label    \"\"\n        graphics\n        [\n            x    109.42\n            y    368.24\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    91\n        label    \"\"\n        graphics\n        [\n            x    308.10\n            y    761.88\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    92\n        label    \"\"\n        graphics\n        [\n            x    865.28\n            y    39.26\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    93\n        label    \"\"\n        graphics\n        [\n            x    47.50\n            y    394.42\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    94\n        label    \"\"\n        graphics\n        [\n            x    1002.15\n            y    766.97\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    95\n        label    \"\"\n        graphics\n        [\n            x    319.49\n            y    1023.46\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    96\n        label    \"\"\n        graphics\n        [\n            x    97.85\n            y    911.24\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    97\n        label    \"\"\n        graphics\n        [\n            x    30.99\n            y    348.36\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    98\n        label    \"\"\n        graphics\n        [\n            x    173.21\n            y    70.94\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    99\n        label    \"\"\n        graphics\n        [\n            x    437.70\n            y    496.28\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    100\n        label    \"\"\n        graphics\n        [\n            x    922.40\n            y    175.99\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    101\n        label    \"\"\n        graphics\n        [\n            x    452.58\n            y    204.62\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    102\n        label    \"\"\n        graphics\n        [\n            x    405.56\n            y    621.86\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    103\n        label    \"\"\n        graphics\n        [\n            x    636.62\n            y    928.90\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    104\n        label    \"\"\n        graphics\n        [\n            x    861.89\n            y    370.89\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    105\n        label    \"\"\n        graphics\n        [\n            x    18.25\n            y    877.21\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    106\n        label    \"\"\n        graphics\n        [\n            x    1016.71\n            y    720.86\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    107\n        label    \"\"\n        graphics\n        [\n            x    147.11\n            y    337.84\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    108\n        label    \"\"\n        graphics\n        [\n            x    981.28\n            y    813.90\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    109\n        label    \"\"\n        graphics\n        [\n            x    751.26\n            y    612.18\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    110\n        label    \"\"\n        graphics\n        [\n            x    57.22\n            y    164.93\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    111\n        label    \"\"\n        graphics\n        [\n            x    759.91\n            y    937.61\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    112\n        label    \"\"\n        graphics\n        [\n            x    951.59\n            y    575.25\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    113\n        label    \"\"\n        graphics\n        [\n            x    816.33\n            y    967.69\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    114\n        label    \"\"\n        graphics\n        [\n            x    538.10\n            y    744.33\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    115\n        label    \"\"\n        graphics\n        [\n            x    215.45\n            y    685.27\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    116\n        label    \"\"\n        graphics\n        [\n            x    819.40\n            y    801.52\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    117\n        label    \"\"\n        graphics\n        [\n            x    595.87\n            y    965.00\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    118\n        label    \"\"\n        graphics\n        [\n            x    163.60\n            y    43.90\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    119\n        label    \"\"\n        graphics\n        [\n            x    478.74\n            y    525.22\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    120\n        label    \"\"\n        graphics\n        [\n            x    691.39\n            y    568.17\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    121\n        label    \"\"\n        graphics\n        [\n            x    839.93\n            y    932.76\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    122\n        label    \"\"\n        graphics\n        [\n            x    893.75\n            y    1025.13\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    123\n        label    \"\"\n        graphics\n        [\n            x    542.63\n            y    373.23\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    124\n        label    \"\"\n        graphics\n        [\n            x    649.91\n            y    907.78\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    125\n        label    \"\"\n        graphics\n        [\n            x    602.12\n            y    74.58\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    126\n        label    \"\"\n        graphics\n        [\n            x    495.16\n            y    325.62\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    127\n        label    \"\"\n        graphics\n        [\n            x    512.66\n            y    431.76\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    128\n        label    \"\"\n        graphics\n        [\n            x    1011.16\n            y    540.37\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    129\n        label    \"\"\n        graphics\n        [\n            x    176.47\n            y    909.19\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    edge\n    [\n        source    1\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    10\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    100\n        target    102\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    100\n        target    30\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    101\n        target    80\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    102\n        target    35\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    102\n        target    72\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    103\n        target    37\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    104\n        target    45\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    104\n        target    73\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    105\n        target    110\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    105\n        target    76\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    106\n        target    51\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    107\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    107\n        target    98\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    108\n        target    84\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    109\n        target    39\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    109\n        target    80\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    11\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    110\n        target    37\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    111\n        target    100\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    111\n        target    46\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    111\n        target    99\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    112\n        target    41\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    113\n        target    61\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    113\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    114\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    114\n        target    32\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    114\n        target    47\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    115\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    116\n        target    24\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    117\n        target    98\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    118\n        target    114\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    118\n        target    61\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    119\n        target    31\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    119\n        target    32\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    12\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    120\n        target    83\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    121\n        target    51\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    122\n        target    48\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    123\n        target    61\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    124\n        target    108\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    124\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    125\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    126\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    127\n        target    101\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    128\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    129\n        target    64\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    13\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    13\n        target    93\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    14\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    15\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    16\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    17\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    18\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    19\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    2\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    20\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    21\n        target    101\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    21\n        target    20\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    22\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    23\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    24\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    25\n        target    128\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    25\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    26\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    26\n        target    95\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    27\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    28\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    29\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    29\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    3\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    3\n        target    84\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    30\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    30\n        target    65\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    31\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    32\n        target    24\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    33\n        target    24\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    33\n        target    97\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    34\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    35\n        target    29\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    36\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    37\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    38\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    39\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    4\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    4\n        target    30\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    40\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    41\n        target    123\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    41\n        target    37\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    42\n        target    41\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    42\n        target    61\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    43\n        target    109\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    43\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    44\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    45\n        target    20\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    45\n        target    74\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    45\n        target    76\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    46\n        target    43\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    47\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    48\n        target    44\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    49\n        target    38\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    5\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    5\n        target    58\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    50\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    51\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    52\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    53\n        target    19\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    54\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    55\n        target    20\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    56\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    57\n        target    41\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    58\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    59\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    6\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    60\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    60\n        target    37\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    61\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    62\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    62\n        target    61\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    63\n        target    46\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    64\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    65\n        target    42\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    66\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    67\n        target    64\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    68\n        target    67\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    69\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    7\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    70\n        target    64\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    71\n        target    28\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    72\n        target    55\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    73\n        target    42\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    74\n        target    62\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    75\n        target    58\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    76\n        target    63\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    77\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    78\n        target    39\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    79\n        target    50\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    8\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    80\n        target    25\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    81\n        target    51\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    82\n        target    59\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    83\n        target    39\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    84\n        target    45\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    84\n        target    57\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    85\n        target    45\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    86\n        target    43\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    86\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    87\n        target    104\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    87\n        target    37\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    87\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    88\n        target    82\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    89\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    9\n        target    106\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    9\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    90\n        target    43\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    90\n        target    44\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    91\n        target    39\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    92\n        target    70\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    93\n        target    60\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    94\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    95\n        target    66\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    96\n        target    62\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    97\n        target    102\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    97\n        target    38\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    98\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    99\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    99\n        target    94\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    99\n        target    97\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n]\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v130e169.tglf",
    "content": "0 814.000 74.000 30.000 30.000\n1 810.000 1024.000 30.000 30.000\n2 8.000 814.000 30.000 30.000\n3 458.000 652.000 30.000 30.000\n4 197.000 44.000 30.000 30.000\n5 223.000 304.000 30.000 30.000\n6 792.000 440.000 30.000 30.000\n7 973.000 364.000 30.000 30.000\n8 577.000 329.000 30.000 30.000\n9 1018.000 191.000 30.000 30.000\n10 938.000 272.000 30.000 30.000\n11 749.000 132.000 30.000 30.000\n12 611.000 368.000 30.000 30.000\n13 506.000 902.000 30.000 30.000\n14 292.000 263.000 30.000 30.000\n15 896.000 831.000 30.000 30.000\n16 369.000 956.000 30.000 30.000\n17 763.000 206.000 30.000 30.000\n18 47.000 980.000 30.000 30.000\n19 791.000 376.000 30.000 30.000\n20 648.000 579.000 30.000 30.000\n21 61.000 252.000 30.000 30.000\n22 661.000 29.000 30.000 30.000\n23 312.000 164.000 30.000 30.000\n24 306.000 370.000 30.000 30.000\n25 241.000 785.000 30.000 30.000\n26 800.000 140.000 30.000 30.000\n27 1023.000 921.000 30.000 30.000\n28 521.000 890.000 30.000 30.000\n29 628.000 814.000 30.000 30.000\n30 673.000 120.000 30.000 30.000\n31 933.000 196.000 30.000 30.000\n32 145.000 310.000 30.000 30.000\n33 726.000 654.000 30.000 30.000\n34 317.000 319.000 30.000 30.000\n35 579.000 934.000 30.000 30.000\n36 170.000 403.000 30.000 30.000\n37 1005.000 656.000 30.000 30.000\n38 741.000 158.000 30.000 30.000\n39 521.000 211.000 30.000 30.000\n40 538.000 997.000 30.000 30.000\n41 75.000 712.000 30.000 30.000\n42 399.000 862.000 30.000 30.000\n43 171.000 593.000 30.000 30.000\n44 1002.000 579.000 30.000 30.000\n45 585.000 597.000 30.000 30.000\n46 517.000 497.000 30.000 30.000\n47 870.000 811.000 30.000 30.000\n48 793.000 418.000 30.000 30.000\n49 534.000 169.000 30.000 30.000\n50 983.000 930.000 30.000 30.000\n51 95.000 176.000 30.000 30.000\n52 960.000 983.000 30.000 30.000\n53 319.000 644.000 30.000 30.000\n54 783.000 757.000 30.000 30.000\n55 55.000 723.000 30.000 30.000\n56 377.000 807.000 30.000 30.000\n57 249.000 973.000 30.000 30.000\n58 1006.000 995.000 30.000 30.000\n59 312.000 751.000 30.000 30.000\n60 891.000 342.000 30.000 30.000\n61 729.000 472.000 30.000 30.000\n62 347.000 288.000 30.000 30.000\n63 365.000 836.000 30.000 30.000\n64 983.000 638.000 30.000 30.000\n65 444.000 905.000 30.000 30.000\n66 870.000 1007.000 30.000 30.000\n67 898.000 829.000 30.000 30.000\n68 876.000 562.000 30.000 30.000\n69 153.000 931.000 30.000 30.000\n70 674.000 436.000 30.000 30.000\n71 749.000 347.000 30.000 30.000\n72 638.000 374.000 30.000 30.000\n73 732.000 941.000 30.000 30.000\n74 787.000 659.000 30.000 30.000\n75 8.000 932.000 30.000 30.000\n76 1015.000 385.000 30.000 30.000\n77 911.000 1017.000 30.000 30.000\n78 209.000 779.000 30.000 30.000\n79 164.000 191.000 30.000 30.000\n80 768.000 650.000 30.000 30.000\n81 6.000 345.000 30.000 30.000\n82 15.000 562.000 30.000 30.000\n83 135.000 156.000 30.000 30.000\n84 948.000 323.000 30.000 30.000\n85 954.000 857.000 30.000 30.000\n86 851.000 177.000 30.000 30.000\n87 516.000 344.000 30.000 30.000\n88 352.000 184.000 30.000 30.000\n89 672.000 523.000 30.000 30.000\n90 109.000 368.000 30.000 30.000\n91 308.000 761.000 30.000 30.000\n92 865.000 39.000 30.000 30.000\n93 47.000 394.000 30.000 30.000\n94 1002.000 766.000 30.000 30.000\n95 319.000 1023.000 30.000 30.000\n96 97.000 911.000 30.000 30.000\n97 30.000 348.000 30.000 30.000\n98 173.000 70.000 30.000 30.000\n99 437.000 496.000 30.000 30.000\n100 922.000 175.000 30.000 30.000\n101 452.000 204.000 30.000 30.000\n102 405.000 621.000 30.000 30.000\n103 636.000 928.000 30.000 30.000\n104 861.000 370.000 30.000 30.000\n105 18.000 877.000 30.000 30.000\n106 1016.000 720.000 30.000 30.000\n107 147.000 337.000 30.000 30.000\n108 981.000 813.000 30.000 30.000\n109 751.000 612.000 30.000 30.000\n110 57.000 164.000 30.000 30.000\n111 759.000 937.000 30.000 30.000\n112 951.000 575.000 30.000 30.000\n113 816.000 967.000 30.000 30.000\n114 538.000 744.000 30.000 30.000\n115 215.000 685.000 30.000 30.000\n116 819.000 801.000 30.000 30.000\n117 595.000 965.000 30.000 30.000\n118 163.000 43.000 30.000 30.000\n119 478.000 525.000 30.000 30.000\n120 691.000 568.000 30.000 30.000\n121 839.000 932.000 30.000 30.000\n122 893.000 1025.000 30.000 30.000\n123 542.000 373.000 30.000 30.000\n124 649.000 907.000 30.000 30.000\n125 602.000 74.000 30.000 30.000\n126 495.000 325.000 30.000 30.000\n127 512.000 431.000 30.000 30.000\n128 1011.000 540.000 30.000 30.000\n129 176.000 909.000 30.000 30.000\n#\n38 14\n85 45\n83 39\n21 101\n118 61\n43 109\n84 45\n104 73\n113 7\n30 65\n14 4\n107 98\n118 114\n125 9\n46 43\n110 37\n81 51\n109 80\n128 18\n122 48\n119 32\n124 11\n44 14\n69 12\n9 2\n12 1\n103 37\n114 16\n111 46\n88 82\n57 41\n50 16\n29 22\n5 58\n126 2\n27 12\n93 60\n3 0\n59 18\n25 2\n61 2\n24 16\n74 62\n60 37\n100 30\n101 80\n36 16\n90 43\n96 62\n80 25\n108 84\n22 10\n7 1\n70 64\n87 7\n19 11\n127 101\n39 13\n40 15\n11 7\n17 3\n129 64\n95 66\n54 3\n86 43\n48 44\n37 12\n89 22\n18 6\n120 83\n87 37\n107 12\n58 21\n91 39\n102 72\n9 106\n41 37\n112 41\n119 31\n68 67\n62 61\n55 20\n29 2\n35 29\n49 38\n4 3\n123 61\n60 16\n105 76\n42 61\n90 44\n3 84\n98 10\n5 0\n13 8\n77 16\n47 3\n41 123\n67 64\n31 17\n51 13\n111 99\n99 97\n33 24\n114 47\n53 19\n43 21\n34 22\n1 0\n111 100\n66 1\n73 42\n15 12\n92 70\n26 11\n26 95\n76 63\n115 7\n8 0\n78 39\n100 102\n75 58\n82 59\n23 13\n20 1\n104 45\n72 55\n63 46\n102 35\n56 4\n116 24\n65 42\n124 108\n86 5\n13 93\n94 14\n109 39\n87 104\n99 94\n25 128\n10 8\n6 5\n16 5\n28 16\n105 110\n30 0\n106 51\n45 76\n84 57\n117 98\n32 24\n45 20\n45 74\n113 61\n33 97\n121 51\n99 4\n42 41\n114 32\n79 50\n2 0\n71 28\n97 102\n4 30\n52 6\n21 20\n64 0\n97 38\n62 6\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v130e182.gml",
    "content": "graph\n[\n    node\n    [\n        id    0\n        label    \"\"\n        graphics\n        [\n            x    535.59\n            y    998.19\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    1\n        label    \"\"\n        graphics\n        [\n            x    846.41\n            y    547.39\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    2\n        label    \"\"\n        graphics\n        [\n            x    654.91\n            y    904.47\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    3\n        label    \"\"\n        graphics\n        [\n            x    971.48\n            y    529.59\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    4\n        label    \"\"\n        graphics\n        [\n            x    535.34\n            y    544.36\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    5\n        label    \"\"\n        graphics\n        [\n            x    425.62\n            y    523.52\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    6\n        label    \"\"\n        graphics\n        [\n            x    32.64\n            y    599.20\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    7\n        label    \"\"\n        graphics\n        [\n            x    933.72\n            y    665.96\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    8\n        label    \"\"\n        graphics\n        [\n            x    869.72\n            y    776.97\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    9\n        label    \"\"\n        graphics\n        [\n            x    657.68\n            y    9.08\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    10\n        label    \"\"\n        graphics\n        [\n            x    501.64\n            y    791.00\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    11\n        label    \"\"\n        graphics\n        [\n            x    891.34\n            y    932.20\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    12\n        label    \"\"\n        graphics\n        [\n            x    1012.21\n            y    994.52\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    13\n        label    \"\"\n        graphics\n        [\n            x    775.54\n            y    892.46\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    14\n        label    \"\"\n        graphics\n        [\n            x    603.31\n            y    469.54\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    15\n        label    \"\"\n        graphics\n        [\n            x    869.55\n            y    203.46\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    16\n        label    \"\"\n        graphics\n        [\n            x    330.40\n            y    131.47\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    17\n        label    \"\"\n        graphics\n        [\n            x    554.95\n            y    749.95\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    18\n        label    \"\"\n        graphics\n        [\n            x    463.34\n            y    58.95\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    19\n        label    \"\"\n        graphics\n        [\n            x    169.68\n            y    191.68\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    20\n        label    \"\"\n        graphics\n        [\n            x    484.17\n            y    275.07\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    21\n        label    \"\"\n        graphics\n        [\n            x    548.65\n            y    604.87\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    22\n        label    \"\"\n        graphics\n        [\n            x    306.86\n            y    225.33\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    23\n        label    \"\"\n        graphics\n        [\n            x    459.50\n            y    970.03\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    24\n        label    \"\"\n        graphics\n        [\n            x    999.09\n            y    915.78\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    25\n        label    \"\"\n        graphics\n        [\n            x    262.31\n            y    50.35\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    26\n        label    \"\"\n        graphics\n        [\n            x    0.16\n            y    140.81\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    27\n        label    \"\"\n        graphics\n        [\n            x    966.82\n            y    778.17\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    28\n        label    \"\"\n        graphics\n        [\n            x    483.69\n            y    809.29\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    29\n        label    \"\"\n        graphics\n        [\n            x    156.41\n            y    67.10\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    30\n        label    \"\"\n        graphics\n        [\n            x    270.54\n            y    96.66\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    31\n        label    \"\"\n        graphics\n        [\n            x    987.59\n            y    711.26\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    32\n        label    \"\"\n        graphics\n        [\n            x    162.72\n            y    964.48\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    33\n        label    \"\"\n        graphics\n        [\n            x    24.56\n            y    221.40\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    34\n        label    \"\"\n        graphics\n        [\n            x    312.97\n            y    1009.94\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    35\n        label    \"\"\n        graphics\n        [\n            x    348.48\n            y    965.19\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    36\n        label    \"\"\n        graphics\n        [\n            x    94.31\n            y    770.08\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    37\n        label    \"\"\n        graphics\n        [\n            x    473.14\n            y    364.40\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    38\n        label    \"\"\n        graphics\n        [\n            x    830.17\n            y    381.22\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    39\n        label    \"\"\n        graphics\n        [\n            x    971.85\n            y    102.20\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    40\n        label    \"\"\n        graphics\n        [\n            x    357.79\n            y    673.32\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    41\n        label    \"\"\n        graphics\n        [\n            x    342.57\n            y    835.52\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    42\n        label    \"\"\n        graphics\n        [\n            x    415.37\n            y    275.44\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    43\n        label    \"\"\n        graphics\n        [\n            x    711.81\n            y    393.15\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    44\n        label    \"\"\n        graphics\n        [\n            x    364.85\n            y    16.58\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    45\n        label    \"\"\n        graphics\n        [\n            x    929.88\n            y    879.26\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    46\n        label    \"\"\n        graphics\n        [\n            x    162.39\n            y    730.27\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    47\n        label    \"\"\n        graphics\n        [\n            x    924.29\n            y    403.95\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    48\n        label    \"\"\n        graphics\n        [\n            x    967.69\n            y    859.19\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    49\n        label    \"\"\n        graphics\n        [\n            x    146.61\n            y    475.90\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    50\n        label    \"\"\n        graphics\n        [\n            x    201.29\n            y    298.14\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    51\n        label    \"\"\n        graphics\n        [\n            x    853.31\n            y    165.53\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    52\n        label    \"\"\n        graphics\n        [\n            x    466.39\n            y    182.82\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    53\n        label    \"\"\n        graphics\n        [\n            x    692.03\n            y    702.36\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    54\n        label    \"\"\n        graphics\n        [\n            x    209.71\n            y    895.60\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    55\n        label    \"\"\n        graphics\n        [\n            x    287.64\n            y    602.04\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    56\n        label    \"\"\n        graphics\n        [\n            x    434.44\n            y    610.61\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    57\n        label    \"\"\n        graphics\n        [\n            x    147.76\n            y    500.98\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    58\n        label    \"\"\n        graphics\n        [\n            x    122.24\n            y    222.97\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    59\n        label    \"\"\n        graphics\n        [\n            x    838.89\n            y    432.57\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    60\n        label    \"\"\n        graphics\n        [\n            x    579.11\n            y    928.55\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    61\n        label    \"\"\n        graphics\n        [\n            x    366.07\n            y    1011.53\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    62\n        label    \"\"\n        graphics\n        [\n            x    230.24\n            y    184.09\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    63\n        label    \"\"\n        graphics\n        [\n            x    269.51\n            y    261.66\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    64\n        label    \"\"\n        graphics\n        [\n            x    454.47\n            y    651.58\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    65\n        label    \"\"\n        graphics\n        [\n            x    886.53\n            y    184.62\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    66\n        label    \"\"\n        graphics\n        [\n            x    1.91\n            y    53.71\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    67\n        label    \"\"\n        graphics\n        [\n            x    16.60\n            y    349.41\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    68\n        label    \"\"\n        graphics\n        [\n            x    648.41\n            y    233.40\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    69\n        label    \"\"\n        graphics\n        [\n            x    595.99\n            y    73.85\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    70\n        label    \"\"\n        graphics\n        [\n            x    918.12\n            y    745.79\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    71\n        label    \"\"\n        graphics\n        [\n            x    835.05\n            y    190.73\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    72\n        label    \"\"\n        graphics\n        [\n            x    142.77\n            y    849.16\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    73\n        label    \"\"\n        graphics\n        [\n            x    563.69\n            y    262.53\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    74\n        label    \"\"\n        graphics\n        [\n            x    516.47\n            y    113.46\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    75\n        label    \"\"\n        graphics\n        [\n            x    532.66\n            y    812.14\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    76\n        label    \"\"\n        graphics\n        [\n            x    891.11\n            y    357.75\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    77\n        label    \"\"\n        graphics\n        [\n            x    298.51\n            y    883.07\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    78\n        label    \"\"\n        graphics\n        [\n            x    518.80\n            y    231.28\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    79\n        label    \"\"\n        graphics\n        [\n            x    840.51\n            y    308.32\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    80\n        label    \"\"\n        graphics\n        [\n            x    93.58\n            y    1001.89\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    81\n        label    \"\"\n        graphics\n        [\n            x    786.75\n            y    627.24\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    82\n        label    \"\"\n        graphics\n        [\n            x    813.89\n            y    191.78\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    83\n        label    \"\"\n        graphics\n        [\n            x    504.38\n            y    205.16\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    84\n        label    \"\"\n        graphics\n        [\n            x    936.79\n            y    258.55\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    85\n        label    \"\"\n        graphics\n        [\n            x    278.85\n            y    45.29\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    86\n        label    \"\"\n        graphics\n        [\n            x    205.01\n            y    259.13\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    87\n        label    \"\"\n        graphics\n        [\n            x    227.52\n            y    110.63\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    88\n        label    \"\"\n        graphics\n        [\n            x    490.87\n            y    225.77\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    89\n        label    \"\"\n        graphics\n        [\n            x    544.78\n            y    689.37\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    90\n        label    \"\"\n        graphics\n        [\n            x    706.41\n            y    815.79\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    91\n        label    \"\"\n        graphics\n        [\n            x    500.53\n            y    601.05\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    92\n        label    \"\"\n        graphics\n        [\n            x    1002.93\n            y    650.20\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    93\n        label    \"\"\n        graphics\n        [\n            x    107.83\n            y    574.05\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    94\n        label    \"\"\n        graphics\n        [\n            x    138.74\n            y    376.02\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    95\n        label    \"\"\n        graphics\n        [\n            x    682.98\n            y    513.69\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    96\n        label    \"\"\n        graphics\n        [\n            x    493.85\n            y    231.24\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    97\n        label    \"\"\n        graphics\n        [\n            x    443.23\n            y    251.76\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    98\n        label    \"\"\n        graphics\n        [\n            x    122.25\n            y    84.27\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    99\n        label    \"\"\n        graphics\n        [\n            x    1002.55\n            y    785.51\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    100\n        label    \"\"\n        graphics\n        [\n            x    497.85\n            y    951.21\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    101\n        label    \"\"\n        graphics\n        [\n            x    501.70\n            y    459.74\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    102\n        label    \"\"\n        graphics\n        [\n            x    583.52\n            y    165.40\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    103\n        label    \"\"\n        graphics\n        [\n            x    468.80\n            y    138.68\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    104\n        label    \"\"\n        graphics\n        [\n            x    675.53\n            y    328.21\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    105\n        label    \"\"\n        graphics\n        [\n            x    642.97\n            y    167.26\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    106\n        label    \"\"\n        graphics\n        [\n            x    687.31\n            y    686.70\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    107\n        label    \"\"\n        graphics\n        [\n            x    14.54\n            y    962.80\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    108\n        label    \"\"\n        graphics\n        [\n            x    417.53\n            y    102.76\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    109\n        label    \"\"\n        graphics\n        [\n            x    465.68\n            y    133.61\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    110\n        label    \"\"\n        graphics\n        [\n            x    27.36\n            y    303.15\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    111\n        label    \"\"\n        graphics\n        [\n            x    980.80\n            y    788.74\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    112\n        label    \"\"\n        graphics\n        [\n            x    892.80\n            y    634.75\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    113\n        label    \"\"\n        graphics\n        [\n            x    684.21\n            y    782.79\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    114\n        label    \"\"\n        graphics\n        [\n            x    922.43\n            y    737.95\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    115\n        label    \"\"\n        graphics\n        [\n            x    224.48\n            y    343.89\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    116\n        label    \"\"\n        graphics\n        [\n            x    89.81\n            y    954.82\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    117\n        label    \"\"\n        graphics\n        [\n            x    511.08\n            y    836.08\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    118\n        label    \"\"\n        graphics\n        [\n            x    323.37\n            y    821.65\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    119\n        label    \"\"\n        graphics\n        [\n            x    788.50\n            y    65.13\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    120\n        label    \"\"\n        graphics\n        [\n            x    261.29\n            y    107.76\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    121\n        label    \"\"\n        graphics\n        [\n            x    186.61\n            y    275.14\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    122\n        label    \"\"\n        graphics\n        [\n            x    141.33\n            y    636.69\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    123\n        label    \"\"\n        graphics\n        [\n            x    990.68\n            y    408.05\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    124\n        label    \"\"\n        graphics\n        [\n            x    688.11\n            y    543.00\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    125\n        label    \"\"\n        graphics\n        [\n            x    155.21\n            y    868.39\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    126\n        label    \"\"\n        graphics\n        [\n            x    751.41\n            y    351.40\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    127\n        label    \"\"\n        graphics\n        [\n            x    233.43\n            y    79.43\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    128\n        label    \"\"\n        graphics\n        [\n            x    135.72\n            y    247.03\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    129\n        label    \"\"\n        graphics\n        [\n            x    24.59\n            y    994.01\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    edge\n    [\n        source    1\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    1\n        target    67\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    10\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    10\n        target    41\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    100\n        target    44\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    100\n        target    55\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    101\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    102\n        target    36\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    103\n        target    66\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    104\n        target    91\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    105\n        target    49\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    106\n        target    45\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    107\n        target    94\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    108\n        target    50\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    109\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    11\n        target    116\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    11\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    11\n        target    60\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    110\n        target    61\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    111\n        target    71\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    112\n        target    38\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    113\n        target    101\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    114\n        target    96\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    115\n        target    50\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    116\n        target    72\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    116\n        target    79\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    117\n        target    88\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    118\n        target    109\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    119\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    119\n        target    113\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    119\n        target    53\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    12\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    120\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    121\n        target    105\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    121\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    122\n        target    98\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    123\n        target    58\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    124\n        target    128\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    124\n        target    78\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    124\n        target    80\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    125\n        target    59\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    126\n        target    106\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    126\n        target    121\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    127\n        target    81\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    128\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    128\n        target    63\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    129\n        target    121\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    13\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    14\n        target    36\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    14\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    15\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    15\n        target    20\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    16\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    17\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    17\n        target    60\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    18\n        target    122\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    18\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    19\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    19\n        target    78\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    2\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    2\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    20\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    21\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    21\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    21\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    22\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    23\n        target    114\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    23\n        target    32\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    23\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    24\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    25\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    25\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    26\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    27\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    28\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    28\n        target    74\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    29\n        target    28\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    29\n        target    50\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    3\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    30\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    31\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    32\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    33\n        target    28\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    34\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    35\n        target    24\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    36\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    37\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    38\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    39\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    4\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    40\n        target    32\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    41\n        target    40\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    42\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    42\n        target    39\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    43\n        target    106\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    43\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    44\n        target    105\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    44\n        target    35\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    45\n        target    31\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    45\n        target    36\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    45\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    46\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    46\n        target    48\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    47\n        target    36\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    47\n        target    90\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    48\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    48\n        target    31\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    48\n        target    93\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    49\n        target    31\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    5\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    50\n        target    37\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    51\n        target    122\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    51\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    52\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    53\n        target    51\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    54\n        target    41\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    55\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    56\n        target    53\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    56\n        target    82\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    57\n        target    28\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    58\n        target    57\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    58\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    59\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    6\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    60\n        target    56\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    60\n        target    98\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    61\n        target    108\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    61\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    62\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    63\n        target    41\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    64\n        target    107\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    64\n        target    33\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    65\n        target    57\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    65\n        target    62\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    66\n        target    47\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    67\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    68\n        target    40\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    68\n        target    46\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    69\n        target    41\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    7\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    70\n        target    42\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    71\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    72\n        target    47\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    72\n        target    51\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    73\n        target    72\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    74\n        target    37\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    75\n        target    35\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    76\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    77\n        target    48\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    78\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    79\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    8\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    80\n        target    51\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    81\n        target    26\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    81\n        target    39\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    82\n        target    29\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    82\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    83\n        target    19\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    84\n        target    31\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    85\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    86\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    86\n        target    127\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    86\n        target    83\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    87\n        target    29\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    87\n        target    60\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    88\n        target    81\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    89\n        target    122\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    89\n        target    37\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    9\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    90\n        target    35\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    90\n        target    76\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    90\n        target    88\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    91\n        target    24\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    92\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    93\n        target    31\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    94\n        target    31\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    95\n        target    64\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    96\n        target    41\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    96\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    97\n        target    73\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    98\n        target    86\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    99\n        target    89\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n]\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v130e182.tglf",
    "content": "0 535.000 998.000 30.000 30.000\n1 846.000 547.000 30.000 30.000\n2 654.000 904.000 30.000 30.000\n3 971.000 529.000 30.000 30.000\n4 535.000 544.000 30.000 30.000\n5 425.000 523.000 30.000 30.000\n6 32.000 599.000 30.000 30.000\n7 933.000 665.000 30.000 30.000\n8 869.000 776.000 30.000 30.000\n9 657.000 9.000 30.000 30.000\n10 501.000 791.000 30.000 30.000\n11 891.000 932.000 30.000 30.000\n12 1012.000 994.000 30.000 30.000\n13 775.000 892.000 30.000 30.000\n14 603.000 469.000 30.000 30.000\n15 869.000 203.000 30.000 30.000\n16 330.000 131.000 30.000 30.000\n17 554.000 749.000 30.000 30.000\n18 463.000 58.000 30.000 30.000\n19 169.000 191.000 30.000 30.000\n20 484.000 275.000 30.000 30.000\n21 548.000 604.000 30.000 30.000\n22 306.000 225.000 30.000 30.000\n23 459.000 970.000 30.000 30.000\n24 999.000 915.000 30.000 30.000\n25 262.000 50.000 30.000 30.000\n26 0.000 140.000 30.000 30.000\n27 966.000 778.000 30.000 30.000\n28 483.000 809.000 30.000 30.000\n29 156.000 67.000 30.000 30.000\n30 270.000 96.000 30.000 30.000\n31 987.000 711.000 30.000 30.000\n32 162.000 964.000 30.000 30.000\n33 24.000 221.000 30.000 30.000\n34 312.000 1009.000 30.000 30.000\n35 348.000 965.000 30.000 30.000\n36 94.000 770.000 30.000 30.000\n37 473.000 364.000 30.000 30.000\n38 830.000 381.000 30.000 30.000\n39 971.000 102.000 30.000 30.000\n40 357.000 673.000 30.000 30.000\n41 342.000 835.000 30.000 30.000\n42 415.000 275.000 30.000 30.000\n43 711.000 393.000 30.000 30.000\n44 364.000 16.000 30.000 30.000\n45 929.000 879.000 30.000 30.000\n46 162.000 730.000 30.000 30.000\n47 924.000 403.000 30.000 30.000\n48 967.000 859.000 30.000 30.000\n49 146.000 475.000 30.000 30.000\n50 201.000 298.000 30.000 30.000\n51 853.000 165.000 30.000 30.000\n52 466.000 182.000 30.000 30.000\n53 692.000 702.000 30.000 30.000\n54 209.000 895.000 30.000 30.000\n55 287.000 602.000 30.000 30.000\n56 434.000 610.000 30.000 30.000\n57 147.000 500.000 30.000 30.000\n58 122.000 222.000 30.000 30.000\n59 838.000 432.000 30.000 30.000\n60 579.000 928.000 30.000 30.000\n61 366.000 1011.000 30.000 30.000\n62 230.000 184.000 30.000 30.000\n63 269.000 261.000 30.000 30.000\n64 454.000 651.000 30.000 30.000\n65 886.000 184.000 30.000 30.000\n66 1.000 53.000 30.000 30.000\n67 16.000 349.000 30.000 30.000\n68 648.000 233.000 30.000 30.000\n69 595.000 73.000 30.000 30.000\n70 918.000 745.000 30.000 30.000\n71 835.000 190.000 30.000 30.000\n72 142.000 849.000 30.000 30.000\n73 563.000 262.000 30.000 30.000\n74 516.000 113.000 30.000 30.000\n75 532.000 812.000 30.000 30.000\n76 891.000 357.000 30.000 30.000\n77 298.000 883.000 30.000 30.000\n78 518.000 231.000 30.000 30.000\n79 840.000 308.000 30.000 30.000\n80 93.000 1001.000 30.000 30.000\n81 786.000 627.000 30.000 30.000\n82 813.000 191.000 30.000 30.000\n83 504.000 205.000 30.000 30.000\n84 936.000 258.000 30.000 30.000\n85 278.000 45.000 30.000 30.000\n86 205.000 259.000 30.000 30.000\n87 227.000 110.000 30.000 30.000\n88 490.000 225.000 30.000 30.000\n89 544.000 689.000 30.000 30.000\n90 706.000 815.000 30.000 30.000\n91 500.000 601.000 30.000 30.000\n92 1002.000 650.000 30.000 30.000\n93 107.000 574.000 30.000 30.000\n94 138.000 376.000 30.000 30.000\n95 682.000 513.000 30.000 30.000\n96 493.000 231.000 30.000 30.000\n97 443.000 251.000 30.000 30.000\n98 122.000 84.000 30.000 30.000\n99 1002.000 785.000 30.000 30.000\n100 497.000 951.000 30.000 30.000\n101 501.000 459.000 30.000 30.000\n102 583.000 165.000 30.000 30.000\n103 468.000 138.000 30.000 30.000\n104 675.000 328.000 30.000 30.000\n105 642.000 167.000 30.000 30.000\n106 687.000 686.000 30.000 30.000\n107 14.000 962.000 30.000 30.000\n108 417.000 102.000 30.000 30.000\n109 465.000 133.000 30.000 30.000\n110 27.000 303.000 30.000 30.000\n111 980.000 788.000 30.000 30.000\n112 892.000 634.000 30.000 30.000\n113 684.000 782.000 30.000 30.000\n114 922.000 737.000 30.000 30.000\n115 224.000 343.000 30.000 30.000\n116 89.000 954.000 30.000 30.000\n117 511.000 836.000 30.000 30.000\n118 323.000 821.000 30.000 30.000\n119 788.000 65.000 30.000 30.000\n120 261.000 107.000 30.000 30.000\n121 186.000 275.000 30.000 30.000\n122 141.000 636.000 30.000 30.000\n123 990.000 408.000 30.000 30.000\n124 688.000 543.000 30.000 30.000\n125 155.000 868.000 30.000 30.000\n126 751.000 351.000 30.000 30.000\n127 233.000 79.000 30.000 30.000\n128 135.000 247.000 30.000 30.000\n129 24.000 994.000 30.000 30.000\n#\n97 73\n9 3\n27 21\n76 11\n109 8\n40 32\n21 17\n48 22\n128 63\n120 13\n43 2\n65 57\n114 96\n82 7\n64 33\n60 98\n128 22\n52 12\n35 24\n49 31\n65 62\n129 121\n43 106\n55 6\n91 24\n119 53\n100 44\n63 41\n15 20\n85 0\n100 55\n11 4\n96 41\n92 12\n31 7\n25 16\n68 40\n88 81\n18 122\n51 122\n111 71\n113 101\n75 35\n2 0\n119 11\n45 5\n116 72\n23 114\n45 36\n19 17\n53 51\n51 5\n17 60\n77 48\n71 23\n62 2\n86 0\n58 57\n119 113\n42 39\n78 9\n87 29\n48 93\n87 60\n116 79\n81 26\n61 108\n41 40\n38 7\n20 9\n42 18\n64 107\n6 2\n1 67\n8 2\n14 5\n15 13\n44 105\n90 35\n34 18\n3 0\n83 19\n46 48\n37 22\n25 1\n32 4\n48 31\n12 8\n18 16\n5 0\n127 81\n19 78\n105 49\n58 6\n81 39\n84 31\n90 76\n23 32\n30 1\n106 45\n68 46\n107 94\n28 10\n82 29\n89 122\n70 42\n110 61\n47 36\n57 28\n121 105\n99 89\n39 12\n121 18\n72 51\n101 15\n56 82\n13 7\n54 41\n1 0\n17 16\n69 41\n73 72\n36 17\n56 53\n23 4\n44 35\n124 80\n115 50\n90 88\n108 50\n10 1\n117 88\n26 22\n66 47\n118 109\n24 13\n79 21\n93 31\n103 66\n29 50\n59 6\n45 31\n94 31\n50 37\n21 9\n67 14\n74 37\n98 86\n126 121\n95 64\n86 127\n112 38\n124 128\n60 56\n89 37\n16 8\n22 7\n61 23\n102 36\n104 91\n96 8\n11 60\n126 106\n72 47\n122 98\n86 83\n14 36\n4 3\n123 58\n46 18\n47 90\n11 116\n2 11\n124 78\n21 13\n33 28\n80 51\n125 59\n28 74\n7 5\n29 28\n10 41\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v130e195.gml",
    "content": "graph\n[\n    node\n    [\n        id    0\n        label    \"\"\n        graphics\n        [\n            x    512.57\n            y    869.84\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    1\n        label    \"\"\n        graphics\n        [\n            x    1.20\n            y    86.59\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    2\n        label    \"\"\n        graphics\n        [\n            x    1001.18\n            y    950.96\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    3\n        label    \"\"\n        graphics\n        [\n            x    956.16\n            y    501.93\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    4\n        label    \"\"\n        graphics\n        [\n            x    193.64\n            y    227.38\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    5\n        label    \"\"\n        graphics\n        [\n            x    121.57\n            y    1008.20\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    6\n        label    \"\"\n        graphics\n        [\n            x    38.83\n            y    750.98\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    7\n        label    \"\"\n        graphics\n        [\n            x    190.31\n            y    569.46\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    8\n        label    \"\"\n        graphics\n        [\n            x    863.90\n            y    439.79\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    9\n        label    \"\"\n        graphics\n        [\n            x    6.56\n            y    768.05\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    10\n        label    \"\"\n        graphics\n        [\n            x    328.21\n            y    935.38\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    11\n        label    \"\"\n        graphics\n        [\n            x    983.48\n            y    888.93\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    12\n        label    \"\"\n        graphics\n        [\n            x    262.24\n            y    128.53\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    13\n        label    \"\"\n        graphics\n        [\n            x    183.91\n            y    877.79\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    14\n        label    \"\"\n        graphics\n        [\n            x    999.32\n            y    82.65\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    15\n        label    \"\"\n        graphics\n        [\n            x    991.13\n            y    1014.68\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    16\n        label    \"\"\n        graphics\n        [\n            x    683.13\n            y    951.37\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    17\n        label    \"\"\n        graphics\n        [\n            x    1012.84\n            y    37.59\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    18\n        label    \"\"\n        graphics\n        [\n            x    808.85\n            y    5.76\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    19\n        label    \"\"\n        graphics\n        [\n            x    517.71\n            y    918.15\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    20\n        label    \"\"\n        graphics\n        [\n            x    163.73\n            y    780.41\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    21\n        label    \"\"\n        graphics\n        [\n            x    863.62\n            y    258.51\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    22\n        label    \"\"\n        graphics\n        [\n            x    829.30\n            y    873.56\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    23\n        label    \"\"\n        graphics\n        [\n            x    973.60\n            y    864.79\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    24\n        label    \"\"\n        graphics\n        [\n            x    423.20\n            y    183.61\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    25\n        label    \"\"\n        graphics\n        [\n            x    340.37\n            y    106.52\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    26\n        label    \"\"\n        graphics\n        [\n            x    420.74\n            y    679.34\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    27\n        label    \"\"\n        graphics\n        [\n            x    538.64\n            y    422.61\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    28\n        label    \"\"\n        graphics\n        [\n            x    769.32\n            y    919.21\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    29\n        label    \"\"\n        graphics\n        [\n            x    304.31\n            y    567.52\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    30\n        label    \"\"\n        graphics\n        [\n            x    939.67\n            y    674.23\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    31\n        label    \"\"\n        graphics\n        [\n            x    22.92\n            y    505.86\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    32\n        label    \"\"\n        graphics\n        [\n            x    842.96\n            y    660.94\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    33\n        label    \"\"\n        graphics\n        [\n            x    42.39\n            y    153.83\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    34\n        label    \"\"\n        graphics\n        [\n            x    661.25\n            y    203.83\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    35\n        label    \"\"\n        graphics\n        [\n            x    395.73\n            y    284.61\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    36\n        label    \"\"\n        graphics\n        [\n            x    725.53\n            y    426.57\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    37\n        label    \"\"\n        graphics\n        [\n            x    233.75\n            y    482.27\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    38\n        label    \"\"\n        graphics\n        [\n            x    859.01\n            y    906.17\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    39\n        label    \"\"\n        graphics\n        [\n            x    544.79\n            y    61.47\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    40\n        label    \"\"\n        graphics\n        [\n            x    121.56\n            y    483.80\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    41\n        label    \"\"\n        graphics\n        [\n            x    492.83\n            y    459.40\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    42\n        label    \"\"\n        graphics\n        [\n            x    62.23\n            y    880.63\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    43\n        label    \"\"\n        graphics\n        [\n            x    144.52\n            y    282.24\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    44\n        label    \"\"\n        graphics\n        [\n            x    408.39\n            y    431.76\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    45\n        label    \"\"\n        graphics\n        [\n            x    138.12\n            y    175.66\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    46\n        label    \"\"\n        graphics\n        [\n            x    365.15\n            y    707.67\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    47\n        label    \"\"\n        graphics\n        [\n            x    601.66\n            y    770.20\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    48\n        label    \"\"\n        graphics\n        [\n            x    106.05\n            y    503.38\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    49\n        label    \"\"\n        graphics\n        [\n            x    6.03\n            y    80.48\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    50\n        label    \"\"\n        graphics\n        [\n            x    5.11\n            y    668.03\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    51\n        label    \"\"\n        graphics\n        [\n            x    205.47\n            y    480.53\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    52\n        label    \"\"\n        graphics\n        [\n            x    364.65\n            y    916.61\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    53\n        label    \"\"\n        graphics\n        [\n            x    216.32\n            y    397.38\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    54\n        label    \"\"\n        graphics\n        [\n            x    174.89\n            y    736.79\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    55\n        label    \"\"\n        graphics\n        [\n            x    880.92\n            y    81.36\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    56\n        label    \"\"\n        graphics\n        [\n            x    439.03\n            y    433.84\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    57\n        label    \"\"\n        graphics\n        [\n            x    727.50\n            y    453.83\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    58\n        label    \"\"\n        graphics\n        [\n            x    317.94\n            y    943.62\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    59\n        label    \"\"\n        graphics\n        [\n            x    219.56\n            y    335.07\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    60\n        label    \"\"\n        graphics\n        [\n            x    230.44\n            y    700.55\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    61\n        label    \"\"\n        graphics\n        [\n            x    1000.42\n            y    534.49\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    62\n        label    \"\"\n        graphics\n        [\n            x    800.24\n            y    482.11\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    63\n        label    \"\"\n        graphics\n        [\n            x    336.92\n            y    926.86\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    64\n        label    \"\"\n        graphics\n        [\n            x    153.94\n            y    154.28\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    65\n        label    \"\"\n        graphics\n        [\n            x    667.71\n            y    952.57\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    66\n        label    \"\"\n        graphics\n        [\n            x    850.37\n            y    646.91\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    67\n        label    \"\"\n        graphics\n        [\n            x    444.27\n            y    335.75\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    68\n        label    \"\"\n        graphics\n        [\n            x    787.08\n            y    773.82\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    69\n        label    \"\"\n        graphics\n        [\n            x    664.04\n            y    900.96\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    70\n        label    \"\"\n        graphics\n        [\n            x    962.51\n            y    336.14\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    71\n        label    \"\"\n        graphics\n        [\n            x    190.69\n            y    500.67\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    72\n        label    \"\"\n        graphics\n        [\n            x    547.48\n            y    265.06\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    73\n        label    \"\"\n        graphics\n        [\n            x    996.26\n            y    683.36\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    74\n        label    \"\"\n        graphics\n        [\n            x    11.42\n            y    212.04\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    75\n        label    \"\"\n        graphics\n        [\n            x    971.59\n            y    585.94\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    76\n        label    \"\"\n        graphics\n        [\n            x    286.58\n            y    782.26\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    77\n        label    \"\"\n        graphics\n        [\n            x    793.36\n            y    600.52\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    78\n        label    \"\"\n        graphics\n        [\n            x    461.98\n            y    53.52\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    79\n        label    \"\"\n        graphics\n        [\n            x    317.88\n            y    89.73\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    80\n        label    \"\"\n        graphics\n        [\n            x    467.15\n            y    57.08\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    81\n        label    \"\"\n        graphics\n        [\n            x    729.93\n            y    555.70\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    82\n        label    \"\"\n        graphics\n        [\n            x    287.72\n            y    711.76\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    83\n        label    \"\"\n        graphics\n        [\n            x    818.12\n            y    649.25\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    84\n        label    \"\"\n        graphics\n        [\n            x    1018.38\n            y    159.94\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    85\n        label    \"\"\n        graphics\n        [\n            x    863.35\n            y    461.35\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    86\n        label    \"\"\n        graphics\n        [\n            x    700.17\n            y    153.64\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    87\n        label    \"\"\n        graphics\n        [\n            x    767.44\n            y    190.27\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    88\n        label    \"\"\n        graphics\n        [\n            x    442.68\n            y    560.34\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    89\n        label    \"\"\n        graphics\n        [\n            x    170.43\n            y    183.91\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    90\n        label    \"\"\n        graphics\n        [\n            x    912.27\n            y    727.68\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    91\n        label    \"\"\n        graphics\n        [\n            x    747.55\n            y    636.53\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    92\n        label    \"\"\n        graphics\n        [\n            x    848.03\n            y    727.16\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    93\n        label    \"\"\n        graphics\n        [\n            x    201.08\n            y    775.32\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    94\n        label    \"\"\n        graphics\n        [\n            x    620.44\n            y    7.47\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    95\n        label    \"\"\n        graphics\n        [\n            x    430.26\n            y    621.82\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    96\n        label    \"\"\n        graphics\n        [\n            x    494.33\n            y    816.54\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    97\n        label    \"\"\n        graphics\n        [\n            x    112.08\n            y    181.05\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    98\n        label    \"\"\n        graphics\n        [\n            x    968.46\n            y    76.47\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    99\n        label    \"\"\n        graphics\n        [\n            x    498.98\n            y    661.97\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    100\n        label    \"\"\n        graphics\n        [\n            x    495.69\n            y    41.29\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    101\n        label    \"\"\n        graphics\n        [\n            x    168.65\n            y    282.07\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    102\n        label    \"\"\n        graphics\n        [\n            x    701.19\n            y    323.66\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    103\n        label    \"\"\n        graphics\n        [\n            x    707.68\n            y    752.19\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    104\n        label    \"\"\n        graphics\n        [\n            x    441.86\n            y    1013.87\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    105\n        label    \"\"\n        graphics\n        [\n            x    532.40\n            y    71.37\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    106\n        label    \"\"\n        graphics\n        [\n            x    243.56\n            y    37.54\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    107\n        label    \"\"\n        graphics\n        [\n            x    419.45\n            y    739.20\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    108\n        label    \"\"\n        graphics\n        [\n            x    397.71\n            y    1001.53\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    109\n        label    \"\"\n        graphics\n        [\n            x    204.13\n            y    1003.16\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    110\n        label    \"\"\n        graphics\n        [\n            x    982.01\n            y    468.04\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    111\n        label    \"\"\n        graphics\n        [\n            x    900.53\n            y    645.61\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    112\n        label    \"\"\n        graphics\n        [\n            x    782.07\n            y    752.28\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    113\n        label    \"\"\n        graphics\n        [\n            x    528.16\n            y    161.84\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    114\n        label    \"\"\n        graphics\n        [\n            x    863.75\n            y    253.86\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    115\n        label    \"\"\n        graphics\n        [\n            x    172.55\n            y    878.74\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    116\n        label    \"\"\n        graphics\n        [\n            x    748.91\n            y    8.10\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    117\n        label    \"\"\n        graphics\n        [\n            x    979.01\n            y    953.44\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    118\n        label    \"\"\n        graphics\n        [\n            x    661.32\n            y    754.76\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    119\n        label    \"\"\n        graphics\n        [\n            x    734.39\n            y    927.40\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    120\n        label    \"\"\n        graphics\n        [\n            x    734.19\n            y    415.29\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    121\n        label    \"\"\n        graphics\n        [\n            x    786.97\n            y    201.82\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    122\n        label    \"\"\n        graphics\n        [\n            x    783.55\n            y    192.88\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    123\n        label    \"\"\n        graphics\n        [\n            x    41.57\n            y    219.08\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    124\n        label    \"\"\n        graphics\n        [\n            x    561.18\n            y    202.15\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    125\n        label    \"\"\n        graphics\n        [\n            x    537.84\n            y    735.77\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    126\n        label    \"\"\n        graphics\n        [\n            x    118.65\n            y    1006.36\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    127\n        label    \"\"\n        graphics\n        [\n            x    589.20\n            y    345.91\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    128\n        label    \"\"\n        graphics\n        [\n            x    523.29\n            y    905.67\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    129\n        label    \"\"\n        graphics\n        [\n            x    1026.01\n            y    443.81\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    edge\n    [\n        source    1\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    10\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    100\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    100\n        target    37\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    101\n        target    82\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    102\n        target    78\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    103\n        target    97\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    104\n        target    19\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    104\n        target    77\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    105\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    105\n        target    31\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    106\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    107\n        target    29\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    108\n        target    38\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    109\n        target    71\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    109\n        target    85\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    11\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    110\n        target    45\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    110\n        target    99\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    111\n        target    86\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    111\n        target    91\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    112\n        target    128\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    112\n        target    25\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    112\n        target    94\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    113\n        target    86\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    114\n        target    129\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    114\n        target    55\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    115\n        target    64\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    116\n        target    108\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    117\n        target    20\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    117\n        target    99\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    118\n        target    108\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    118\n        target    54\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    118\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    119\n        target    102\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    12\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    12\n        target    31\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    120\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    120\n        target    35\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    120\n        target    99\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    121\n        target    120\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    122\n        target    63\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    123\n        target    53\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    123\n        target    79\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    124\n        target    56\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    124\n        target    69\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    125\n        target    109\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    125\n        target    88\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    126\n        target    34\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    127\n        target    37\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    128\n        target    116\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    129\n        target    87\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    13\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    14\n        target    29\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    14\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    15\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    16\n        target    126\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    16\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    17\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    18\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    19\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    2\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    2\n        target    124\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    2\n        target    30\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    20\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    21\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    22\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    23\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    24\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    25\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    26\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    26\n        target    29\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    26\n        target    55\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    27\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    28\n        target    20\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    29\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    29\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    3\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    30\n        target    103\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    30\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    31\n        target    56\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    31\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    32\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    33\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    34\n        target    20\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    34\n        target    91\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    35\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    36\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    37\n        target    33\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    37\n        target    48\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    38\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    39\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    39\n        target    43\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    4\n        target    113\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    4\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    40\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    41\n        target    28\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    42\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    43\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    44\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    45\n        target    28\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    46\n        target    41\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    47\n        target    31\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    48\n        target    36\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    48\n        target    85\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    49\n        target    47\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    5\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    50\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    50\n        target    61\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    51\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    52\n        target    114\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    52\n        target    39\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    53\n        target    19\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    54\n        target    51\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    55\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    55\n        target    93\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    56\n        target    28\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    57\n        target    48\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    58\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    59\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    6\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    60\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    61\n        target    31\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    62\n        target    114\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    62\n        target    29\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    63\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    63\n        target    40\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    64\n        target    40\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    64\n        target    44\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    65\n        target    31\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    66\n        target    38\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    66\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    67\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    68\n        target    53\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    68\n        target    57\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    68\n        target    77\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    69\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    7\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    70\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    71\n        target    25\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    71\n        target    33\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    71\n        target    58\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    72\n        target    51\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    72\n        target    97\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    73\n        target    33\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    73\n        target    35\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    73\n        target    96\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    73\n        target    97\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    74\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    74\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    75\n        target    116\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    75\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    76\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    76\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    77\n        target    115\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    77\n        target    49\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    78\n        target    70\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    79\n        target    35\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    79\n        target    86\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    8\n        target    113\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    8\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    80\n        target    64\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    81\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    81\n        target    64\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    82\n        target    30\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    82\n        target    57\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    83\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    83\n        target    29\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    83\n        target    45\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    84\n        target    78\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    85\n        target    29\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    86\n        target    40\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    86\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    87\n        target    33\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    88\n        target    61\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    89\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    89\n        target    57\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    89\n        target    87\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    9\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    9\n        target    84\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    90\n        target    63\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    91\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    92\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    92\n        target    40\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    93\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    93\n        target    53\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    94\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    95\n        target    89\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    96\n        target    28\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    96\n        target    66\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    97\n        target    59\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    97\n        target    74\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    98\n        target    41\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    99\n        target    84\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    99\n        target    87\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n]\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v130e195.tglf",
    "content": "0 512.000 869.000 30.000 30.000\n1 1.000 86.000 30.000 30.000\n2 1001.000 950.000 30.000 30.000\n3 956.000 501.000 30.000 30.000\n4 193.000 227.000 30.000 30.000\n5 121.000 1008.000 30.000 30.000\n6 38.000 750.000 30.000 30.000\n7 190.000 569.000 30.000 30.000\n8 863.000 439.000 30.000 30.000\n9 6.000 768.000 30.000 30.000\n10 328.000 935.000 30.000 30.000\n11 983.000 888.000 30.000 30.000\n12 262.000 128.000 30.000 30.000\n13 183.000 877.000 30.000 30.000\n14 999.000 82.000 30.000 30.000\n15 991.000 1014.000 30.000 30.000\n16 683.000 951.000 30.000 30.000\n17 1012.000 37.000 30.000 30.000\n18 808.000 5.000 30.000 30.000\n19 517.000 918.000 30.000 30.000\n20 163.000 780.000 30.000 30.000\n21 863.000 258.000 30.000 30.000\n22 829.000 873.000 30.000 30.000\n23 973.000 864.000 30.000 30.000\n24 423.000 183.000 30.000 30.000\n25 340.000 106.000 30.000 30.000\n26 420.000 679.000 30.000 30.000\n27 538.000 422.000 30.000 30.000\n28 769.000 919.000 30.000 30.000\n29 304.000 567.000 30.000 30.000\n30 939.000 674.000 30.000 30.000\n31 22.000 505.000 30.000 30.000\n32 842.000 660.000 30.000 30.000\n33 42.000 153.000 30.000 30.000\n34 661.000 203.000 30.000 30.000\n35 395.000 284.000 30.000 30.000\n36 725.000 426.000 30.000 30.000\n37 233.000 482.000 30.000 30.000\n38 859.000 906.000 30.000 30.000\n39 544.000 61.000 30.000 30.000\n40 121.000 483.000 30.000 30.000\n41 492.000 459.000 30.000 30.000\n42 62.000 880.000 30.000 30.000\n43 144.000 282.000 30.000 30.000\n44 408.000 431.000 30.000 30.000\n45 138.000 175.000 30.000 30.000\n46 365.000 707.000 30.000 30.000\n47 601.000 770.000 30.000 30.000\n48 106.000 503.000 30.000 30.000\n49 6.000 80.000 30.000 30.000\n50 5.000 668.000 30.000 30.000\n51 205.000 480.000 30.000 30.000\n52 364.000 916.000 30.000 30.000\n53 216.000 397.000 30.000 30.000\n54 174.000 736.000 30.000 30.000\n55 880.000 81.000 30.000 30.000\n56 439.000 433.000 30.000 30.000\n57 727.000 453.000 30.000 30.000\n58 317.000 943.000 30.000 30.000\n59 219.000 335.000 30.000 30.000\n60 230.000 700.000 30.000 30.000\n61 1000.000 534.000 30.000 30.000\n62 800.000 482.000 30.000 30.000\n63 336.000 926.000 30.000 30.000\n64 153.000 154.000 30.000 30.000\n65 667.000 952.000 30.000 30.000\n66 850.000 646.000 30.000 30.000\n67 444.000 335.000 30.000 30.000\n68 787.000 773.000 30.000 30.000\n69 664.000 900.000 30.000 30.000\n70 962.000 336.000 30.000 30.000\n71 190.000 500.000 30.000 30.000\n72 547.000 265.000 30.000 30.000\n73 996.000 683.000 30.000 30.000\n74 11.000 212.000 30.000 30.000\n75 971.000 585.000 30.000 30.000\n76 286.000 782.000 30.000 30.000\n77 793.000 600.000 30.000 30.000\n78 461.000 53.000 30.000 30.000\n79 317.000 89.000 30.000 30.000\n80 467.000 57.000 30.000 30.000\n81 729.000 555.000 30.000 30.000\n82 287.000 711.000 30.000 30.000\n83 818.000 649.000 30.000 30.000\n84 1018.000 159.000 30.000 30.000\n85 863.000 461.000 30.000 30.000\n86 700.000 153.000 30.000 30.000\n87 767.000 190.000 30.000 30.000\n88 442.000 560.000 30.000 30.000\n89 170.000 183.000 30.000 30.000\n90 912.000 727.000 30.000 30.000\n91 747.000 636.000 30.000 30.000\n92 848.000 727.000 30.000 30.000\n93 201.000 775.000 30.000 30.000\n94 620.000 7.000 30.000 30.000\n95 430.000 621.000 30.000 30.000\n96 494.000 816.000 30.000 30.000\n97 112.000 181.000 30.000 30.000\n98 968.000 76.000 30.000 30.000\n99 498.000 661.000 30.000 30.000\n100 495.000 41.000 30.000 30.000\n101 168.000 282.000 30.000 30.000\n102 701.000 323.000 30.000 30.000\n103 707.000 752.000 30.000 30.000\n104 441.000 1013.000 30.000 30.000\n105 532.000 71.000 30.000 30.000\n106 243.000 37.000 30.000 30.000\n107 419.000 739.000 30.000 30.000\n108 397.000 1001.000 30.000 30.000\n109 204.000 1003.000 30.000 30.000\n110 982.000 468.000 30.000 30.000\n111 900.000 645.000 30.000 30.000\n112 782.000 752.000 30.000 30.000\n113 528.000 161.000 30.000 30.000\n114 863.000 253.000 30.000 30.000\n115 172.000 878.000 30.000 30.000\n116 748.000 8.000 30.000 30.000\n117 979.000 953.000 30.000 30.000\n118 661.000 754.000 30.000 30.000\n119 734.000 927.000 30.000 30.000\n120 734.000 415.000 30.000 30.000\n121 786.000 201.000 30.000 30.000\n122 783.000 192.000 30.000 30.000\n123 41.000 219.000 30.000 30.000\n124 561.000 202.000 30.000 30.000\n125 537.000 735.000 30.000 30.000\n126 118.000 1006.000 30.000 30.000\n127 589.000 345.000 30.000 30.000\n128 523.000 905.000 30.000 30.000\n129 1026.000 443.000 30.000 30.000\n#\n16 13\n104 77\n109 85\n95 89\n104 19\n58 12\n118 108\n80 64\n44 9\n123 53\n112 128\n14 7\n127 37\n111 86\n9 8\n17 10\n62 29\n117 99\n64 44\n1 0\n101 82\n114 55\n77 115\n59 22\n14 29\n87 33\n76 12\n66 38\n55 93\n119 102\n74 23\n3 1\n93 53\n102 78\n24 16\n48 85\n71 33\n55 9\n68 53\n41 28\n34 20\n50 61\n120 14\n112 94\n68 77\n60 10\n128 116\n42 21\n82 30\n105 31\n82 57\n38 1\n115 64\n94 11\n11 0\n6 5\n118 7\n63 12\n9 84\n73 97\n22 16\n77 49\n120 35\n37 33\n91 0\n126 34\n56 28\n125 88\n2 30\n28 20\n83 29\n83 2\n100 17\n79 35\n21 15\n39 43\n113 86\n35 3\n43 5\n96 28\n47 31\n45 28\n52 39\n110 45\n112 25\n20 16\n51 10\n31 56\n2 124\n15 9\n129 87\n100 37\n97 59\n36 2\n84 78\n75 18\n63 40\n33 15\n74 2\n75 116\n30 16\n99 87\n29 15\n121 120\n85 29\n73 96\n124 69\n30 103\n89 21\n89 57\n2 1\n70 9\n93 3\n26 18\n5 3\n25 18\n31 8\n46 41\n52 114\n125 109\n92 2\n88 61\n117 20\n10 1\n123 79\n108 38\n86 8\n37 48\n49 47\n48 36\n19 3\n73 33\n57 48\n98 41\n53 19\n4 2\n39 4\n18 1\n4 113\n62 114\n26 55\n16 126\n40 8\n110 99\n81 3\n99 84\n64 40\n122 63\n29 23\n67 11\n66 5\n92 40\n111 91\n68 57\n12 31\n26 29\n81 64\n34 91\n106 2\n71 58\n65 31\n103 97\n54 51\n79 86\n69 9\n107 29\n96 66\n86 40\n8 4\n116 108\n7 1\n72 97\n105 1\n97 74\n120 99\n90 63\n89 87\n76 7\n118 54\n109 71\n23 15\n32 4\n114 129\n83 45\n78 70\n61 31\n12 1\n124 56\n71 25\n73 35\n8 113\n72 51\n13 2\n50 14\n27 21\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v140e140.gml",
    "content": "graph\n[\n    node\n    [\n        id    0\n        label    \"\"\n        graphics\n        [\n            x    120.39\n            y    558.51\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    1\n        label    \"\"\n        graphics\n        [\n            x    894.52\n            y    782.40\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    2\n        label    \"\"\n        graphics\n        [\n            x    405.96\n            y    716.83\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    3\n        label    \"\"\n        graphics\n        [\n            x    329.12\n            y    838.59\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    4\n        label    \"\"\n        graphics\n        [\n            x    693.92\n            y    770.59\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    5\n        label    \"\"\n        graphics\n        [\n            x    423.51\n            y    470.71\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    6\n        label    \"\"\n        graphics\n        [\n            x    804.25\n            y    171.32\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    7\n        label    \"\"\n        graphics\n        [\n            x    278.57\n            y    653.44\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    8\n        label    \"\"\n        graphics\n        [\n            x    272.65\n            y    946.05\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    9\n        label    \"\"\n        graphics\n        [\n            x    541.86\n            y    875.65\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    10\n        label    \"\"\n        graphics\n        [\n            x    994.94\n            y    632.35\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    11\n        label    \"\"\n        graphics\n        [\n            x    949.83\n            y    357.19\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    12\n        label    \"\"\n        graphics\n        [\n            x    615.02\n            y    670.61\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    13\n        label    \"\"\n        graphics\n        [\n            x    112.51\n            y    323.99\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    14\n        label    \"\"\n        graphics\n        [\n            x    834.42\n            y    675.80\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    15\n        label    \"\"\n        graphics\n        [\n            x    923.60\n            y    270.77\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    16\n        label    \"\"\n        graphics\n        [\n            x    799.06\n            y    222.80\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    17\n        label    \"\"\n        graphics\n        [\n            x    993.17\n            y    316.76\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    18\n        label    \"\"\n        graphics\n        [\n            x    715.87\n            y    923.46\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    19\n        label    \"\"\n        graphics\n        [\n            x    964.12\n            y    691.52\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    20\n        label    \"\"\n        graphics\n        [\n            x    381.36\n            y    110.92\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    21\n        label    \"\"\n        graphics\n        [\n            x    81.53\n            y    25.31\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    22\n        label    \"\"\n        graphics\n        [\n            x    303.99\n            y    258.98\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    23\n        label    \"\"\n        graphics\n        [\n            x    492.71\n            y    887.90\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    24\n        label    \"\"\n        graphics\n        [\n            x    825.32\n            y    53.41\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    25\n        label    \"\"\n        graphics\n        [\n            x    380.93\n            y    415.43\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    26\n        label    \"\"\n        graphics\n        [\n            x    70.32\n            y    79.16\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    27\n        label    \"\"\n        graphics\n        [\n            x    839.11\n            y    981.73\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    28\n        label    \"\"\n        graphics\n        [\n            x    863.71\n            y    344.87\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    29\n        label    \"\"\n        graphics\n        [\n            x    453.85\n            y    982.88\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    30\n        label    \"\"\n        graphics\n        [\n            x    319.77\n            y    556.02\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    31\n        label    \"\"\n        graphics\n        [\n            x    654.55\n            y    859.95\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    32\n        label    \"\"\n        graphics\n        [\n            x    956.09\n            y    886.88\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    33\n        label    \"\"\n        graphics\n        [\n            x    607.45\n            y    144.44\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    34\n        label    \"\"\n        graphics\n        [\n            x    405.58\n            y    644.76\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    35\n        label    \"\"\n        graphics\n        [\n            x    476.06\n            y    906.13\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    36\n        label    \"\"\n        graphics\n        [\n            x    278.10\n            y    200.89\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    37\n        label    \"\"\n        graphics\n        [\n            x    115.64\n            y    334.22\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    38\n        label    \"\"\n        graphics\n        [\n            x    9.41\n            y    21.07\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    39\n        label    \"\"\n        graphics\n        [\n            x    456.15\n            y    639.82\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    40\n        label    \"\"\n        graphics\n        [\n            x    166.00\n            y    424.87\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    41\n        label    \"\"\n        graphics\n        [\n            x    386.54\n            y    19.09\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    42\n        label    \"\"\n        graphics\n        [\n            x    507.62\n            y    298.47\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    43\n        label    \"\"\n        graphics\n        [\n            x    441.44\n            y    440.34\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    44\n        label    \"\"\n        graphics\n        [\n            x    1014.11\n            y    994.67\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    45\n        label    \"\"\n        graphics\n        [\n            x    323.11\n            y    59.44\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    46\n        label    \"\"\n        graphics\n        [\n            x    528.59\n            y    788.55\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    47\n        label    \"\"\n        graphics\n        [\n            x    429.30\n            y    1013.22\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    48\n        label    \"\"\n        graphics\n        [\n            x    119.13\n            y    72.84\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    49\n        label    \"\"\n        graphics\n        [\n            x    646.78\n            y    92.01\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    50\n        label    \"\"\n        graphics\n        [\n            x    394.95\n            y    631.18\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    51\n        label    \"\"\n        graphics\n        [\n            x    630.69\n            y    159.55\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    52\n        label    \"\"\n        graphics\n        [\n            x    679.37\n            y    484.72\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    53\n        label    \"\"\n        graphics\n        [\n            x    524.09\n            y    211.23\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    54\n        label    \"\"\n        graphics\n        [\n            x    111.27\n            y    635.60\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    55\n        label    \"\"\n        graphics\n        [\n            x    517.06\n            y    1011.56\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    56\n        label    \"\"\n        graphics\n        [\n            x    327.56\n            y    547.74\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    57\n        label    \"\"\n        graphics\n        [\n            x    961.49\n            y    144.32\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    58\n        label    \"\"\n        graphics\n        [\n            x    1007.87\n            y    446.39\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    59\n        label    \"\"\n        graphics\n        [\n            x    878.15\n            y    1013.93\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    60\n        label    \"\"\n        graphics\n        [\n            x    997.78\n            y    617.64\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    61\n        label    \"\"\n        graphics\n        [\n            x    128.06\n            y    997.96\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    62\n        label    \"\"\n        graphics\n        [\n            x    694.22\n            y    510.09\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    63\n        label    \"\"\n        graphics\n        [\n            x    715.11\n            y    297.17\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    64\n        label    \"\"\n        graphics\n        [\n            x    689.90\n            y    559.48\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    65\n        label    \"\"\n        graphics\n        [\n            x    525.27\n            y    266.84\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    66\n        label    \"\"\n        graphics\n        [\n            x    132.03\n            y    292.90\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    67\n        label    \"\"\n        graphics\n        [\n            x    1025.51\n            y    512.21\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    68\n        label    \"\"\n        graphics\n        [\n            x    363.91\n            y    24.16\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    69\n        label    \"\"\n        graphics\n        [\n            x    302.02\n            y    701.71\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    70\n        label    \"\"\n        graphics\n        [\n            x    592.43\n            y    721.80\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    71\n        label    \"\"\n        graphics\n        [\n            x    275.56\n            y    252.12\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    72\n        label    \"\"\n        graphics\n        [\n            x    785.84\n            y    458.31\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    73\n        label    \"\"\n        graphics\n        [\n            x    894.28\n            y    673.19\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    74\n        label    \"\"\n        graphics\n        [\n            x    519.04\n            y    163.54\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    75\n        label    \"\"\n        graphics\n        [\n            x    480.53\n            y    183.77\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    76\n        label    \"\"\n        graphics\n        [\n            x    1029.02\n            y    844.18\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    77\n        label    \"\"\n        graphics\n        [\n            x    403.64\n            y    462.50\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    78\n        label    \"\"\n        graphics\n        [\n            x    223.17\n            y    1038.93\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    79\n        label    \"\"\n        graphics\n        [\n            x    393.13\n            y    1004.96\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    80\n        label    \"\"\n        graphics\n        [\n            x    717.96\n            y    682.61\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    81\n        label    \"\"\n        graphics\n        [\n            x    954.11\n            y    290.65\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    82\n        label    \"\"\n        graphics\n        [\n            x    126.60\n            y    310.50\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    83\n        label    \"\"\n        graphics\n        [\n            x    468.78\n            y    1020.34\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    84\n        label    \"\"\n        graphics\n        [\n            x    741.20\n            y    667.76\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    85\n        label    \"\"\n        graphics\n        [\n            x    457.00\n            y    963.42\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    86\n        label    \"\"\n        graphics\n        [\n            x    292.45\n            y    948.67\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    87\n        label    \"\"\n        graphics\n        [\n            x    759.68\n            y    82.20\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    88\n        label    \"\"\n        graphics\n        [\n            x    327.75\n            y    16.26\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    89\n        label    \"\"\n        graphics\n        [\n            x    227.40\n            y    358.01\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    90\n        label    \"\"\n        graphics\n        [\n            x    920.17\n            y    578.10\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    91\n        label    \"\"\n        graphics\n        [\n            x    534.44\n            y    846.54\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    92\n        label    \"\"\n        graphics\n        [\n            x    265.31\n            y    767.81\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    93\n        label    \"\"\n        graphics\n        [\n            x    404.98\n            y    835.50\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    94\n        label    \"\"\n        graphics\n        [\n            x    101.27\n            y    905.82\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    95\n        label    \"\"\n        graphics\n        [\n            x    443.44\n            y    958.15\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    96\n        label    \"\"\n        graphics\n        [\n            x    202.69\n            y    85.67\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    97\n        label    \"\"\n        graphics\n        [\n            x    358.43\n            y    874.32\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    98\n        label    \"\"\n        graphics\n        [\n            x    338.99\n            y    301.52\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    99\n        label    \"\"\n        graphics\n        [\n            x    446.23\n            y    235.03\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    100\n        label    \"\"\n        graphics\n        [\n            x    671.01\n            y    145.67\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    101\n        label    \"\"\n        graphics\n        [\n            x    632.20\n            y    795.47\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    102\n        label    \"\"\n        graphics\n        [\n            x    110.38\n            y    78.81\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    103\n        label    \"\"\n        graphics\n        [\n            x    214.41\n            y    602.93\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    104\n        label    \"\"\n        graphics\n        [\n            x    956.81\n            y    524.94\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    105\n        label    \"\"\n        graphics\n        [\n            x    474.40\n            y    872.68\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    106\n        label    \"\"\n        graphics\n        [\n            x    137.64\n            y    253.62\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    107\n        label    \"\"\n        graphics\n        [\n            x    536.19\n            y    854.52\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    108\n        label    \"\"\n        graphics\n        [\n            x    343.43\n            y    128.65\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    109\n        label    \"\"\n        graphics\n        [\n            x    897.76\n            y    1063.61\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    110\n        label    \"\"\n        graphics\n        [\n            x    808.59\n            y    459.75\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    111\n        label    \"\"\n        graphics\n        [\n            x    22.73\n            y    758.70\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    112\n        label    \"\"\n        graphics\n        [\n            x    616.82\n            y    901.58\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    113\n        label    \"\"\n        graphics\n        [\n            x    169.06\n            y    777.58\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    114\n        label    \"\"\n        graphics\n        [\n            x    851.26\n            y    837.07\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    115\n        label    \"\"\n        graphics\n        [\n            x    652.94\n            y    155.03\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    116\n        label    \"\"\n        graphics\n        [\n            x    627.58\n            y    258.85\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    117\n        label    \"\"\n        graphics\n        [\n            x    281.76\n            y    185.75\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    118\n        label    \"\"\n        graphics\n        [\n            x    200.29\n            y    447.56\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    119\n        label    \"\"\n        graphics\n        [\n            x    778.33\n            y    978.47\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    120\n        label    \"\"\n        graphics\n        [\n            x    583.87\n            y    29.57\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    121\n        label    \"\"\n        graphics\n        [\n            x    655.01\n            y    277.02\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    122\n        label    \"\"\n        graphics\n        [\n            x    610.95\n            y    156.73\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    123\n        label    \"\"\n        graphics\n        [\n            x    673.64\n            y    958.40\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    124\n        label    \"\"\n        graphics\n        [\n            x    977.58\n            y    968.23\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    125\n        label    \"\"\n        graphics\n        [\n            x    460.93\n            y    407.94\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    126\n        label    \"\"\n        graphics\n        [\n            x    925.77\n            y    4.66\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    127\n        label    \"\"\n        graphics\n        [\n            x    242.04\n            y    448.09\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    128\n        label    \"\"\n        graphics\n        [\n            x    240.38\n            y    59.86\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    129\n        label    \"\"\n        graphics\n        [\n            x    557.87\n            y    860.28\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    130\n        label    \"\"\n        graphics\n        [\n            x    312.21\n            y    281.26\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    131\n        label    \"\"\n        graphics\n        [\n            x    950.40\n            y    23.56\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    132\n        label    \"\"\n        graphics\n        [\n            x    41.48\n            y    264.09\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    133\n        label    \"\"\n        graphics\n        [\n            x    1033.42\n            y    705.23\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    134\n        label    \"\"\n        graphics\n        [\n            x    537.30\n            y    301.96\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    135\n        label    \"\"\n        graphics\n        [\n            x    759.17\n            y    293.74\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    136\n        label    \"\"\n        graphics\n        [\n            x    892.58\n            y    952.06\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    137\n        label    \"\"\n        graphics\n        [\n            x    564.12\n            y    272.95\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    138\n        label    \"\"\n        graphics\n        [\n            x    486.19\n            y    593.37\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    139\n        label    \"\"\n        graphics\n        [\n            x    665.96\n            y    928.83\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    edge\n    [\n        source    1\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    10\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    100\n        target    78\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    101\n        target    96\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    102\n        target    31\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    103\n        target    98\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    104\n        target    63\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    105\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    106\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    107\n        target    69\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    108\n        target    61\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    109\n        target    56\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    11\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    110\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    111\n        target    55\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    112\n        target    35\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    113\n        target    29\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    114\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    115\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    116\n        target    74\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    117\n        target    51\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    118\n        target    108\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    119\n        target    60\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    12\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    120\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    121\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    122\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    123\n        target    50\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    124\n        target    107\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    125\n        target    27\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    126\n        target    114\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    127\n        target    111\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    128\n        target    33\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    129\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    13\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    130\n        target    20\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    131\n        target    95\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    132\n        target    131\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    133\n        target    99\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    134\n        target    128\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    135\n        target    107\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    136\n        target    53\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    137\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    138\n        target    35\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    139\n        target    57\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    14\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    15\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    16\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    17\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    18\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    19\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    2\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    20\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    21\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    22\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    23\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    24\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    25\n        target    19\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    26\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    27\n        target    26\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    28\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    29\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    3\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    30\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    31\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    32\n        target    20\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    33\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    34\n        target    24\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    35\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    36\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    37\n        target    29\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    38\n        target    25\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    39\n        target    37\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    4\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    40\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    41\n        target    38\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    42\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    43\n        target    19\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    44\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    45\n        target    36\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    46\n        target    27\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    47\n        target    30\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    48\n        target    47\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    49\n        target    43\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    5\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    50\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    51\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    52\n        target    36\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    53\n        target    25\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    54\n        target    19\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    55\n        target    35\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    56\n        target    30\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    57\n        target    35\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    58\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    59\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    6\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    60\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    61\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    62\n        target    38\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    63\n        target    43\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    64\n        target    44\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    65\n        target    25\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    66\n        target    44\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    67\n        target    49\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    68\n        target    26\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    69\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    7\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    70\n        target    61\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    71\n        target    44\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    72\n        target    46\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    73\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    74\n        target    20\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    75\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    76\n        target    32\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    77\n        target    70\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    78\n        target    73\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    79\n        target    63\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    79\n        target    80\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    8\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    80\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    81\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    82\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    83\n        target    63\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    84\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    85\n        target    20\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    86\n        target    30\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    87\n        target    27\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    88\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    89\n        target    84\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    9\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    90\n        target    49\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    91\n        target    89\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    92\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    93\n        target    26\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    94\n        target    91\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    95\n        target    94\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    96\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    97\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    98\n        target    31\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    99\n        target    73\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n]\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v140e140.tglf",
    "content": "0 120.000 558.000 30.000 30.000\n1 894.000 782.000 30.000 30.000\n2 405.000 716.000 30.000 30.000\n3 329.000 838.000 30.000 30.000\n4 693.000 770.000 30.000 30.000\n5 423.000 470.000 30.000 30.000\n6 804.000 171.000 30.000 30.000\n7 278.000 653.000 30.000 30.000\n8 272.000 946.000 30.000 30.000\n9 541.000 875.000 30.000 30.000\n10 994.000 632.000 30.000 30.000\n11 949.000 357.000 30.000 30.000\n12 615.000 670.000 30.000 30.000\n13 112.000 323.000 30.000 30.000\n14 834.000 675.000 30.000 30.000\n15 923.000 270.000 30.000 30.000\n16 799.000 222.000 30.000 30.000\n17 993.000 316.000 30.000 30.000\n18 715.000 923.000 30.000 30.000\n19 964.000 691.000 30.000 30.000\n20 381.000 110.000 30.000 30.000\n21 81.000 25.000 30.000 30.000\n22 303.000 258.000 30.000 30.000\n23 492.000 887.000 30.000 30.000\n24 825.000 53.000 30.000 30.000\n25 380.000 415.000 30.000 30.000\n26 70.000 79.000 30.000 30.000\n27 839.000 981.000 30.000 30.000\n28 863.000 344.000 30.000 30.000\n29 453.000 982.000 30.000 30.000\n30 319.000 556.000 30.000 30.000\n31 654.000 859.000 30.000 30.000\n32 956.000 886.000 30.000 30.000\n33 607.000 144.000 30.000 30.000\n34 405.000 644.000 30.000 30.000\n35 476.000 906.000 30.000 30.000\n36 278.000 200.000 30.000 30.000\n37 115.000 334.000 30.000 30.000\n38 9.000 21.000 30.000 30.000\n39 456.000 639.000 30.000 30.000\n40 166.000 424.000 30.000 30.000\n41 386.000 19.000 30.000 30.000\n42 507.000 298.000 30.000 30.000\n43 441.000 440.000 30.000 30.000\n44 1014.000 994.000 30.000 30.000\n45 323.000 59.000 30.000 30.000\n46 528.000 788.000 30.000 30.000\n47 429.000 1013.000 30.000 30.000\n48 119.000 72.000 30.000 30.000\n49 646.000 92.000 30.000 30.000\n50 394.000 631.000 30.000 30.000\n51 630.000 159.000 30.000 30.000\n52 679.000 484.000 30.000 30.000\n53 524.000 211.000 30.000 30.000\n54 111.000 635.000 30.000 30.000\n55 517.000 1011.000 30.000 30.000\n56 327.000 547.000 30.000 30.000\n57 961.000 144.000 30.000 30.000\n58 1007.000 446.000 30.000 30.000\n59 878.000 1013.000 30.000 30.000\n60 997.000 617.000 30.000 30.000\n61 128.000 997.000 30.000 30.000\n62 694.000 510.000 30.000 30.000\n63 715.000 297.000 30.000 30.000\n64 689.000 559.000 30.000 30.000\n65 525.000 266.000 30.000 30.000\n66 132.000 292.000 30.000 30.000\n67 1025.000 512.000 30.000 30.000\n68 363.000 24.000 30.000 30.000\n69 302.000 701.000 30.000 30.000\n70 592.000 721.000 30.000 30.000\n71 275.000 252.000 30.000 30.000\n72 785.000 458.000 30.000 30.000\n73 894.000 673.000 30.000 30.000\n74 519.000 163.000 30.000 30.000\n75 480.000 183.000 30.000 30.000\n76 1029.000 844.000 30.000 30.000\n77 403.000 462.000 30.000 30.000\n78 223.000 1038.000 30.000 30.000\n79 393.000 1004.000 30.000 30.000\n80 717.000 682.000 30.000 30.000\n81 954.000 290.000 30.000 30.000\n82 126.000 310.000 30.000 30.000\n83 468.000 1020.000 30.000 30.000\n84 741.000 667.000 30.000 30.000\n85 457.000 963.000 30.000 30.000\n86 292.000 948.000 30.000 30.000\n87 759.000 82.000 30.000 30.000\n88 327.000 16.000 30.000 30.000\n89 227.000 358.000 30.000 30.000\n90 920.000 578.000 30.000 30.000\n91 534.000 846.000 30.000 30.000\n92 265.000 767.000 30.000 30.000\n93 404.000 835.000 30.000 30.000\n94 101.000 905.000 30.000 30.000\n95 443.000 958.000 30.000 30.000\n96 202.000 85.000 30.000 30.000\n97 358.000 874.000 30.000 30.000\n98 338.000 301.000 30.000 30.000\n99 446.000 235.000 30.000 30.000\n100 671.000 145.000 30.000 30.000\n101 632.000 795.000 30.000 30.000\n102 110.000 78.000 30.000 30.000\n103 214.000 602.000 30.000 30.000\n104 956.000 524.000 30.000 30.000\n105 474.000 872.000 30.000 30.000\n106 137.000 253.000 30.000 30.000\n107 536.000 854.000 30.000 30.000\n108 343.000 128.000 30.000 30.000\n109 897.000 1063.000 30.000 30.000\n110 808.000 459.000 30.000 30.000\n111 22.000 758.000 30.000 30.000\n112 616.000 901.000 30.000 30.000\n113 169.000 777.000 30.000 30.000\n114 851.000 837.000 30.000 30.000\n115 652.000 155.000 30.000 30.000\n116 627.000 258.000 30.000 30.000\n117 281.000 185.000 30.000 30.000\n118 200.000 447.000 30.000 30.000\n119 778.000 978.000 30.000 30.000\n120 583.000 29.000 30.000 30.000\n121 655.000 277.000 30.000 30.000\n122 610.000 156.000 30.000 30.000\n123 673.000 958.000 30.000 30.000\n124 977.000 968.000 30.000 30.000\n125 460.000 407.000 30.000 30.000\n126 925.000 4.000 30.000 30.000\n127 242.000 448.000 30.000 30.000\n128 240.000 59.000 30.000 30.000\n129 557.000 860.000 30.000 30.000\n130 312.000 281.000 30.000 30.000\n131 950.000 23.000 30.000 30.000\n132 41.000 264.000 30.000 30.000\n133 1033.000 705.000 30.000 30.000\n134 537.000 301.000 30.000 30.000\n135 759.000 293.000 30.000 30.000\n136 892.000 952.000 30.000 30.000\n137 564.000 272.000 30.000 30.000\n138 486.000 593.000 30.000 30.000\n139 665.000 928.000 30.000 30.000\n#\n129 0\n39 37\n26 10\n56 30\n13 7\n119 60\n5 4\n108 61\n58 10\n10 7\n7 6\n95 94\n72 46\n101 96\n19 4\n60 8\n44 5\n103 98\n15 0\n67 49\n25 19\n63 43\n28 14\n83 63\n81 21\n1 0\n16 12\n112 35\n18 15\n137 0\n116 74\n35 12\n47 30\n126 114\n84 1\n64 44\n55 35\n136 53\n52 36\n86 30\n78 73\n80 11\n8 0\n9 1\n51 1\n2 0\n111 55\n4 3\n79 63\n96 16\n59 0\n65 25\n23 4\n117 51\n91 89\n53 25\n12 9\n102 31\n70 61\n114 22\n74 20\n89 84\n3 0\n115 13\n66 44\n120 7\n77 70\n100 78\n62 38\n45 36\n138 35\n79 80\n75 6\n11 2\n92 16\n135 107\n29 11\n134 128\n121 0\n107 69\n97 2\n99 73\n24 9\n50 16\n38 25\n20 17\n76 32\n113 29\n133 99\n27 26\n21 2\n37 29\n98 31\n68 26\n36 17\n49 43\n109 56\n54 19\n46 27\n128 33\n22 9\n122 21\n125 27\n43 19\n31 11\n124 107\n40 5\n69 23\n32 20\n14 9\n33 21\n130 20\n105 16\n57 35\n139 57\n87 27\n90 49\n30 14\n17 5\n71 44\n6 0\n34 24\n131 95\n132 131\n123 50\n118 108\n127 111\n48 47\n82 1\n42 23\n73 3\n94 91\n61 9\n88 2\n106 4\n85 20\n110 2\n93 26\n104 63\n41 38\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v140e154.gml",
    "content": "graph\n[\n    node\n    [\n        id    0\n        label    \"\"\n        graphics\n        [\n            x    216.27\n            y    867.45\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    1\n        label    \"\"\n        graphics\n        [\n            x    471.80\n            y    120.62\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    2\n        label    \"\"\n        graphics\n        [\n            x    39.81\n            y    102.44\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    3\n        label    \"\"\n        graphics\n        [\n            x    449.47\n            y    702.16\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    4\n        label    \"\"\n        graphics\n        [\n            x    908.48\n            y    699.72\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    5\n        label    \"\"\n        graphics\n        [\n            x    673.91\n            y    814.90\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    6\n        label    \"\"\n        graphics\n        [\n            x    399.69\n            y    935.34\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    7\n        label    \"\"\n        graphics\n        [\n            x    113.60\n            y    630.14\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    8\n        label    \"\"\n        graphics\n        [\n            x    960.68\n            y    565.35\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    9\n        label    \"\"\n        graphics\n        [\n            x    681.00\n            y    205.19\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    10\n        label    \"\"\n        graphics\n        [\n            x    529.60\n            y    5.81\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    11\n        label    \"\"\n        graphics\n        [\n            x    137.22\n            y    124.90\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    12\n        label    \"\"\n        graphics\n        [\n            x    1001.51\n            y    447.01\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    13\n        label    \"\"\n        graphics\n        [\n            x    916.91\n            y    29.74\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    14\n        label    \"\"\n        graphics\n        [\n            x    786.82\n            y    316.94\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    15\n        label    \"\"\n        graphics\n        [\n            x    793.34\n            y    976.80\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    16\n        label    \"\"\n        graphics\n        [\n            x    882.47\n            y    384.36\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    17\n        label    \"\"\n        graphics\n        [\n            x    962.74\n            y    257.05\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    18\n        label    \"\"\n        graphics\n        [\n            x    608.67\n            y    467.82\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    19\n        label    \"\"\n        graphics\n        [\n            x    360.97\n            y    726.05\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    20\n        label    \"\"\n        graphics\n        [\n            x    597.21\n            y    352.75\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    21\n        label    \"\"\n        graphics\n        [\n            x    450.28\n            y    193.10\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    22\n        label    \"\"\n        graphics\n        [\n            x    717.31\n            y    603.43\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    23\n        label    \"\"\n        graphics\n        [\n            x    601.92\n            y    1010.88\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    24\n        label    \"\"\n        graphics\n        [\n            x    10.17\n            y    351.16\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    25\n        label    \"\"\n        graphics\n        [\n            x    769.65\n            y    382.51\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    26\n        label    \"\"\n        graphics\n        [\n            x    480.28\n            y    755.28\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    27\n        label    \"\"\n        graphics\n        [\n            x    931.05\n            y    638.91\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    28\n        label    \"\"\n        graphics\n        [\n            x    634.16\n            y    567.07\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    29\n        label    \"\"\n        graphics\n        [\n            x    616.82\n            y    793.44\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    30\n        label    \"\"\n        graphics\n        [\n            x    599.72\n            y    844.38\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    31\n        label    \"\"\n        graphics\n        [\n            x    284.89\n            y    950.65\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    32\n        label    \"\"\n        graphics\n        [\n            x    158.05\n            y    514.00\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    33\n        label    \"\"\n        graphics\n        [\n            x    377.73\n            y    606.24\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    34\n        label    \"\"\n        graphics\n        [\n            x    11.32\n            y    446.49\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    35\n        label    \"\"\n        graphics\n        [\n            x    773.01\n            y    935.30\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    36\n        label    \"\"\n        graphics\n        [\n            x    1062.37\n            y    26.75\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    37\n        label    \"\"\n        graphics\n        [\n            x    325.61\n            y    455.99\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    38\n        label    \"\"\n        graphics\n        [\n            x    480.91\n            y    569.30\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    39\n        label    \"\"\n        graphics\n        [\n            x    161.94\n            y    222.49\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    40\n        label    \"\"\n        graphics\n        [\n            x    295.16\n            y    161.44\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    41\n        label    \"\"\n        graphics\n        [\n            x    342.73\n            y    116.43\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    42\n        label    \"\"\n        graphics\n        [\n            x    984.76\n            y    12.06\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    43\n        label    \"\"\n        graphics\n        [\n            x    146.34\n            y    898.02\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    44\n        label    \"\"\n        graphics\n        [\n            x    559.65\n            y    333.45\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    45\n        label    \"\"\n        graphics\n        [\n            x    256.49\n            y    670.89\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    46\n        label    \"\"\n        graphics\n        [\n            x    321.31\n            y    829.31\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    47\n        label    \"\"\n        graphics\n        [\n            x    537.33\n            y    278.52\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    48\n        label    \"\"\n        graphics\n        [\n            x    756.58\n            y    636.07\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    49\n        label    \"\"\n        graphics\n        [\n            x    405.53\n            y    169.57\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    50\n        label    \"\"\n        graphics\n        [\n            x    95.96\n            y    345.89\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    51\n        label    \"\"\n        graphics\n        [\n            x    767.39\n            y    430.19\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    52\n        label    \"\"\n        graphics\n        [\n            x    638.96\n            y    480.10\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    53\n        label    \"\"\n        graphics\n        [\n            x    794.19\n            y    301.84\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    54\n        label    \"\"\n        graphics\n        [\n            x    893.56\n            y    290.19\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    55\n        label    \"\"\n        graphics\n        [\n            x    203.25\n            y    154.60\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    56\n        label    \"\"\n        graphics\n        [\n            x    1007.58\n            y    11.98\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    57\n        label    \"\"\n        graphics\n        [\n            x    1026.27\n            y    428.72\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    58\n        label    \"\"\n        graphics\n        [\n            x    471.60\n            y    1035.87\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    59\n        label    \"\"\n        graphics\n        [\n            x    592.34\n            y    274.55\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    60\n        label    \"\"\n        graphics\n        [\n            x    42.01\n            y    701.39\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    61\n        label    \"\"\n        graphics\n        [\n            x    1015.83\n            y    430.56\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    62\n        label    \"\"\n        graphics\n        [\n            x    32.38\n            y    93.29\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    63\n        label    \"\"\n        graphics\n        [\n            x    948.82\n            y    803.44\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    64\n        label    \"\"\n        graphics\n        [\n            x    941.85\n            y    422.31\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    65\n        label    \"\"\n        graphics\n        [\n            x    909.12\n            y    173.62\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    66\n        label    \"\"\n        graphics\n        [\n            x    58.99\n            y    775.98\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    67\n        label    \"\"\n        graphics\n        [\n            x    625.13\n            y    553.68\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    68\n        label    \"\"\n        graphics\n        [\n            x    163.81\n            y    755.64\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    69\n        label    \"\"\n        graphics\n        [\n            x    847.98\n            y    424.89\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    70\n        label    \"\"\n        graphics\n        [\n            x    90.09\n            y    82.28\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    71\n        label    \"\"\n        graphics\n        [\n            x    833.89\n            y    513.05\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    72\n        label    \"\"\n        graphics\n        [\n            x    72.67\n            y    519.45\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    73\n        label    \"\"\n        graphics\n        [\n            x    195.45\n            y    380.90\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    74\n        label    \"\"\n        graphics\n        [\n            x    623.96\n            y    389.46\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    75\n        label    \"\"\n        graphics\n        [\n            x    85.69\n            y    393.44\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    76\n        label    \"\"\n        graphics\n        [\n            x    1034.49\n            y    913.66\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    77\n        label    \"\"\n        graphics\n        [\n            x    842.02\n            y    174.28\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    78\n        label    \"\"\n        graphics\n        [\n            x    261.63\n            y    204.76\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    79\n        label    \"\"\n        graphics\n        [\n            x    902.67\n            y    317.79\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    80\n        label    \"\"\n        graphics\n        [\n            x    518.42\n            y    648.34\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    81\n        label    \"\"\n        graphics\n        [\n            x    429.90\n            y    959.57\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    82\n        label    \"\"\n        graphics\n        [\n            x    891.96\n            y    1017.27\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    83\n        label    \"\"\n        graphics\n        [\n            x    994.42\n            y    309.24\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    84\n        label    \"\"\n        graphics\n        [\n            x    557.81\n            y    438.72\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    85\n        label    \"\"\n        graphics\n        [\n            x    796.98\n            y    735.67\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    86\n        label    \"\"\n        graphics\n        [\n            x    885.77\n            y    302.98\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    87\n        label    \"\"\n        graphics\n        [\n            x    876.83\n            y    0.82\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    88\n        label    \"\"\n        graphics\n        [\n            x    71.58\n            y    109.54\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    89\n        label    \"\"\n        graphics\n        [\n            x    1034.11\n            y    593.51\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    90\n        label    \"\"\n        graphics\n        [\n            x    779.13\n            y    631.53\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    91\n        label    \"\"\n        graphics\n        [\n            x    280.53\n            y    533.21\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    92\n        label    \"\"\n        graphics\n        [\n            x    563.63\n            y    705.80\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    93\n        label    \"\"\n        graphics\n        [\n            x    572.66\n            y    369.68\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    94\n        label    \"\"\n        graphics\n        [\n            x    417.67\n            y    577.69\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    95\n        label    \"\"\n        graphics\n        [\n            x    870.61\n            y    779.75\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    96\n        label    \"\"\n        graphics\n        [\n            x    857.44\n            y    268.19\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    97\n        label    \"\"\n        graphics\n        [\n            x    714.83\n            y    1061.12\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    98\n        label    \"\"\n        graphics\n        [\n            x    280.38\n            y    924.82\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    99\n        label    \"\"\n        graphics\n        [\n            x    735.85\n            y    72.70\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    100\n        label    \"\"\n        graphics\n        [\n            x    954.92\n            y    286.04\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    101\n        label    \"\"\n        graphics\n        [\n            x    938.09\n            y    884.66\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    102\n        label    \"\"\n        graphics\n        [\n            x    686.50\n            y    908.75\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    103\n        label    \"\"\n        graphics\n        [\n            x    901.64\n            y    1059.73\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    104\n        label    \"\"\n        graphics\n        [\n            x    531.82\n            y    974.44\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    105\n        label    \"\"\n        graphics\n        [\n            x    64.64\n            y    355.13\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    106\n        label    \"\"\n        graphics\n        [\n            x    364.39\n            y    955.44\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    107\n        label    \"\"\n        graphics\n        [\n            x    634.68\n            y    378.50\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    108\n        label    \"\"\n        graphics\n        [\n            x    34.02\n            y    409.05\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    109\n        label    \"\"\n        graphics\n        [\n            x    467.83\n            y    285.75\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    110\n        label    \"\"\n        graphics\n        [\n            x    66.83\n            y    854.60\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    111\n        label    \"\"\n        graphics\n        [\n            x    797.60\n            y    838.22\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    112\n        label    \"\"\n        graphics\n        [\n            x    154.90\n            y    1058.02\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    113\n        label    \"\"\n        graphics\n        [\n            x    389.92\n            y    333.06\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    114\n        label    \"\"\n        graphics\n        [\n            x    97.83\n            y    39.64\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    115\n        label    \"\"\n        graphics\n        [\n            x    829.10\n            y    892.48\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    116\n        label    \"\"\n        graphics\n        [\n            x    891.30\n            y    613.24\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    117\n        label    \"\"\n        graphics\n        [\n            x    334.73\n            y    456.22\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    118\n        label    \"\"\n        graphics\n        [\n            x    266.07\n            y    559.55\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    119\n        label    \"\"\n        graphics\n        [\n            x    937.64\n            y    315.51\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    120\n        label    \"\"\n        graphics\n        [\n            x    461.38\n            y    209.46\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    121\n        label    \"\"\n        graphics\n        [\n            x    453.55\n            y    560.77\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    122\n        label    \"\"\n        graphics\n        [\n            x    403.03\n            y    710.19\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    123\n        label    \"\"\n        graphics\n        [\n            x    1020.69\n            y    757.27\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    124\n        label    \"\"\n        graphics\n        [\n            x    680.03\n            y    810.57\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    125\n        label    \"\"\n        graphics\n        [\n            x    52.85\n            y    72.64\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    126\n        label    \"\"\n        graphics\n        [\n            x    995.24\n            y    372.32\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    127\n        label    \"\"\n        graphics\n        [\n            x    226.09\n            y    441.31\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    128\n        label    \"\"\n        graphics\n        [\n            x    832.61\n            y    108.72\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    129\n        label    \"\"\n        graphics\n        [\n            x    100.57\n            y    278.00\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    130\n        label    \"\"\n        graphics\n        [\n            x    475.74\n            y    795.47\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    131\n        label    \"\"\n        graphics\n        [\n            x    1053.26\n            y    935.00\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    132\n        label    \"\"\n        graphics\n        [\n            x    1053.25\n            y    390.55\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    133\n        label    \"\"\n        graphics\n        [\n            x    205.13\n            y    615.77\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    134\n        label    \"\"\n        graphics\n        [\n            x    263.27\n            y    734.00\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    135\n        label    \"\"\n        graphics\n        [\n            x    430.34\n            y    581.63\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    136\n        label    \"\"\n        graphics\n        [\n            x    590.83\n            y    669.95\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    137\n        label    \"\"\n        graphics\n        [\n            x    1.07\n            y    685.01\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    138\n        label    \"\"\n        graphics\n        [\n            x    469.23\n            y    975.53\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    139\n        label    \"\"\n        graphics\n        [\n            x    790.49\n            y    313.33\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    edge\n    [\n        source    1\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    10\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    100\n        target    47\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    101\n        target    53\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    102\n        target    35\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    103\n        target    52\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    104\n        target    48\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    105\n        target    49\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    106\n        target    88\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    107\n        target    44\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    108\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    109\n        target    90\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    11\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    110\n        target    78\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    111\n        target    49\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    112\n        target    90\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    113\n        target    56\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    114\n        target    92\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    115\n        target    80\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    116\n        target    54\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    117\n        target    108\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    118\n        target    72\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    119\n        target    45\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    12\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    120\n        target    65\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    121\n        target    74\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    122\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    123\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    124\n        target    50\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    125\n        target    45\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    126\n        target    119\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    127\n        target    106\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    128\n        target    55\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    129\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    13\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    130\n        target    119\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    131\n        target    30\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    132\n        target    47\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    133\n        target    132\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    133\n        target    43\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    134\n        target    130\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    135\n        target    118\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    136\n        target    118\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    137\n        target    42\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    137\n        target    59\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    138\n        target    135\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    139\n        target    130\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    14\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    15\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    16\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    16\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    16\n        target    87\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    17\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    18\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    19\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    2\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    20\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    21\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    22\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    23\n        target    19\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    24\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    25\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    26\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    27\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    28\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    28\n        target    98\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    29\n        target    24\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    3\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    30\n        target    20\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    31\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    32\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    33\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    34\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    35\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    36\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    36\n        target    74\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    37\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    38\n        target    33\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    39\n        target    28\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    4\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    40\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    41\n        target    35\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    42\n        target    123\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    42\n        target    30\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    43\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    44\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    44\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    45\n        target    136\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    45\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    46\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    47\n        target    35\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    48\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    49\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    49\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    5\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    50\n        target    42\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    51\n        target    20\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    51\n        target    90\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    52\n        target    31\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    53\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    54\n        target    36\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    55\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    56\n        target    37\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    57\n        target    47\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    58\n        target    33\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    59\n        target    46\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    6\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    60\n        target    24\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    61\n        target    58\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    61\n        target    80\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    62\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    63\n        target    31\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    64\n        target    55\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    65\n        target    36\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    66\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    67\n        target    42\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    67\n        target    75\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    68\n        target    63\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    69\n        target    59\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    7\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    70\n        target    42\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    71\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    72\n        target    42\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    73\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    74\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    75\n        target    35\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    76\n        target    24\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    77\n        target    29\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    78\n        target    56\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    79\n        target    30\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    79\n        target    73\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    8\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    80\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    81\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    81\n        target    64\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    82\n        target    64\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    83\n        target    40\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    84\n        target    51\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    85\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    86\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    87\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    88\n        target    48\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    89\n        target    55\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    9\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    90\n        target    73\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    91\n        target    71\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    92\n        target    29\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    93\n        target    49\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    94\n        target    68\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    95\n        target    89\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    96\n        target    45\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    97\n        target    76\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    98\n        target    24\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    99\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n]\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v140e154.tglf",
    "content": "0 216.000 867.000 30.000 30.000\n1 471.000 120.000 30.000 30.000\n2 39.000 102.000 30.000 30.000\n3 449.000 702.000 30.000 30.000\n4 908.000 699.000 30.000 30.000\n5 673.000 814.000 30.000 30.000\n6 399.000 935.000 30.000 30.000\n7 113.000 630.000 30.000 30.000\n8 960.000 565.000 30.000 30.000\n9 681.000 205.000 30.000 30.000\n10 529.000 5.000 30.000 30.000\n11 137.000 124.000 30.000 30.000\n12 1001.000 447.000 30.000 30.000\n13 916.000 29.000 30.000 30.000\n14 786.000 316.000 30.000 30.000\n15 793.000 976.000 30.000 30.000\n16 882.000 384.000 30.000 30.000\n17 962.000 257.000 30.000 30.000\n18 608.000 467.000 30.000 30.000\n19 360.000 726.000 30.000 30.000\n20 597.000 352.000 30.000 30.000\n21 450.000 193.000 30.000 30.000\n22 717.000 603.000 30.000 30.000\n23 601.000 1010.000 30.000 30.000\n24 10.000 351.000 30.000 30.000\n25 769.000 382.000 30.000 30.000\n26 480.000 755.000 30.000 30.000\n27 931.000 638.000 30.000 30.000\n28 634.000 567.000 30.000 30.000\n29 616.000 793.000 30.000 30.000\n30 599.000 844.000 30.000 30.000\n31 284.000 950.000 30.000 30.000\n32 158.000 514.000 30.000 30.000\n33 377.000 606.000 30.000 30.000\n34 11.000 446.000 30.000 30.000\n35 773.000 935.000 30.000 30.000\n36 1062.000 26.000 30.000 30.000\n37 325.000 455.000 30.000 30.000\n38 480.000 569.000 30.000 30.000\n39 161.000 222.000 30.000 30.000\n40 295.000 161.000 30.000 30.000\n41 342.000 116.000 30.000 30.000\n42 984.000 12.000 30.000 30.000\n43 146.000 898.000 30.000 30.000\n44 559.000 333.000 30.000 30.000\n45 256.000 670.000 30.000 30.000\n46 321.000 829.000 30.000 30.000\n47 537.000 278.000 30.000 30.000\n48 756.000 636.000 30.000 30.000\n49 405.000 169.000 30.000 30.000\n50 95.000 345.000 30.000 30.000\n51 767.000 430.000 30.000 30.000\n52 638.000 480.000 30.000 30.000\n53 794.000 301.000 30.000 30.000\n54 893.000 290.000 30.000 30.000\n55 203.000 154.000 30.000 30.000\n56 1007.000 11.000 30.000 30.000\n57 1026.000 428.000 30.000 30.000\n58 471.000 1035.000 30.000 30.000\n59 592.000 274.000 30.000 30.000\n60 42.000 701.000 30.000 30.000\n61 1015.000 430.000 30.000 30.000\n62 32.000 93.000 30.000 30.000\n63 948.000 803.000 30.000 30.000\n64 941.000 422.000 30.000 30.000\n65 909.000 173.000 30.000 30.000\n66 58.000 775.000 30.000 30.000\n67 625.000 553.000 30.000 30.000\n68 163.000 755.000 30.000 30.000\n69 847.000 424.000 30.000 30.000\n70 90.000 82.000 30.000 30.000\n71 833.000 513.000 30.000 30.000\n72 72.000 519.000 30.000 30.000\n73 195.000 380.000 30.000 30.000\n74 623.000 389.000 30.000 30.000\n75 85.000 393.000 30.000 30.000\n76 1034.000 913.000 30.000 30.000\n77 842.000 174.000 30.000 30.000\n78 261.000 204.000 30.000 30.000\n79 902.000 317.000 30.000 30.000\n80 518.000 648.000 30.000 30.000\n81 429.000 959.000 30.000 30.000\n82 891.000 1017.000 30.000 30.000\n83 994.000 309.000 30.000 30.000\n84 557.000 438.000 30.000 30.000\n85 796.000 735.000 30.000 30.000\n86 885.000 302.000 30.000 30.000\n87 876.000 0.000 30.000 30.000\n88 71.000 109.000 30.000 30.000\n89 1034.000 593.000 30.000 30.000\n90 779.000 631.000 30.000 30.000\n91 280.000 533.000 30.000 30.000\n92 563.000 705.000 30.000 30.000\n93 572.000 369.000 30.000 30.000\n94 417.000 577.000 30.000 30.000\n95 870.000 779.000 30.000 30.000\n96 857.000 268.000 30.000 30.000\n97 714.000 1061.000 30.000 30.000\n98 280.000 924.000 30.000 30.000\n99 735.000 72.000 30.000 30.000\n100 954.000 286.000 30.000 30.000\n101 938.000 884.000 30.000 30.000\n102 686.000 908.000 30.000 30.000\n103 901.000 1059.000 30.000 30.000\n104 531.000 974.000 30.000 30.000\n105 64.000 355.000 30.000 30.000\n106 364.000 955.000 30.000 30.000\n107 634.000 378.000 30.000 30.000\n108 34.000 409.000 30.000 30.000\n109 467.000 285.000 30.000 30.000\n110 66.000 854.000 30.000 30.000\n111 797.000 838.000 30.000 30.000\n112 154.000 1058.000 30.000 30.000\n113 389.000 333.000 30.000 30.000\n114 97.000 39.000 30.000 30.000\n115 829.000 892.000 30.000 30.000\n116 891.000 613.000 30.000 30.000\n117 334.000 456.000 30.000 30.000\n118 266.000 559.000 30.000 30.000\n119 937.000 315.000 30.000 30.000\n120 461.000 209.000 30.000 30.000\n121 453.000 560.000 30.000 30.000\n122 403.000 710.000 30.000 30.000\n123 1020.000 757.000 30.000 30.000\n124 680.000 810.000 30.000 30.000\n125 52.000 72.000 30.000 30.000\n126 995.000 372.000 30.000 30.000\n127 226.000 441.000 30.000 30.000\n128 832.000 108.000 30.000 30.000\n129 100.000 278.000 30.000 30.000\n130 475.000 795.000 30.000 30.000\n131 1053.000 935.000 30.000 30.000\n132 1053.000 390.000 30.000 30.000\n133 205.000 615.000 30.000 30.000\n134 263.000 734.000 30.000 30.000\n135 430.000 581.000 30.000 30.000\n136 590.000 669.000 30.000 30.000\n137 1.000 685.000 30.000 30.000\n138 469.000 975.000 30.000 30.000\n139 790.000 313.000 30.000 30.000\n#\n119 45\n81 64\n5 2\n76 24\n60 24\n16 87\n38 33\n39 28\n48 22\n58 33\n80 11\n130 119\n66 21\n90 73\n126 119\n35 1\n131 30\n106 88\n28 5\n74 22\n81 22\n77 29\n41 35\n37 12\n10 0\n53 0\n114 92\n52 31\n78 56\n43 14\n67 42\n19 11\n61 58\n9 0\n102 35\n135 118\n93 49\n79 30\n94 68\n84 51\n91 71\n59 46\n7 4\n124 50\n79 73\n11 2\n45 21\n123 22\n14 7\n57 47\n134 130\n65 36\n40 1\n44 17\n13 10\n113 56\n44 1\n88 48\n115 80\n136 118\n104 48\n33 16\n30 20\n56 37\n31 18\n92 29\n54 36\n133 132\n71 21\n99 1\n116 54\n110 78\n17 10\n82 64\n42 30\n70 42\n2 0\n1 0\n46 22\n47 35\n29 24\n49 18\n137 59\n105 49\n4 3\n138 135\n122 22\n86 21\n69 59\n107 44\n73 0\n64 55\n101 53\n6 1\n63 31\n89 55\n25 16\n26 18\n83 40\n97 76\n49 8\n36 74\n85 2\n103 52\n16 17\n27 4\n128 55\n118 72\n139 130\n12 3\n67 75\n28 98\n95 89\n21 14\n32 7\n120 65\n36 10\n87 1\n111 49\n16 5\n109 90\n34 6\n24 11\n22 10\n108 22\n125 45\n20 13\n137 42\n55 12\n133 43\n45 136\n117 108\n51 20\n50 42\n8 0\n127 106\n98 24\n132 47\n72 42\n62 13\n51 90\n96 45\n100 47\n15 8\n112 90\n23 19\n129 13\n61 80\n42 123\n18 13\n3 0\n75 35\n68 63\n121 74\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v140e168.gml",
    "content": "graph\n[\n    node\n    [\n        id    0\n        label    \"\"\n        graphics\n        [\n            x    717.60\n            y    509.21\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    1\n        label    \"\"\n        graphics\n        [\n            x    710.52\n            y    523.63\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    2\n        label    \"\"\n        graphics\n        [\n            x    383.13\n            y    320.99\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    3\n        label    \"\"\n        graphics\n        [\n            x    208.09\n            y    380.75\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    4\n        label    \"\"\n        graphics\n        [\n            x    29.89\n            y    178.34\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    5\n        label    \"\"\n        graphics\n        [\n            x    737.24\n            y    199.59\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    6\n        label    \"\"\n        graphics\n        [\n            x    673.75\n            y    283.20\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    7\n        label    \"\"\n        graphics\n        [\n            x    270.17\n            y    890.89\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    8\n        label    \"\"\n        graphics\n        [\n            x    757.77\n            y    480.25\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    9\n        label    \"\"\n        graphics\n        [\n            x    84.35\n            y    888.30\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    10\n        label    \"\"\n        graphics\n        [\n            x    700.58\n            y    295.87\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    11\n        label    \"\"\n        graphics\n        [\n            x    546.42\n            y    976.41\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    12\n        label    \"\"\n        graphics\n        [\n            x    884.93\n            y    543.31\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    13\n        label    \"\"\n        graphics\n        [\n            x    609.59\n            y    1034.31\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    14\n        label    \"\"\n        graphics\n        [\n            x    107.28\n            y    623.11\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    15\n        label    \"\"\n        graphics\n        [\n            x    270.69\n            y    252.61\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    16\n        label    \"\"\n        graphics\n        [\n            x    901.87\n            y    471.89\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    17\n        label    \"\"\n        graphics\n        [\n            x    157.10\n            y    957.07\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    18\n        label    \"\"\n        graphics\n        [\n            x    958.88\n            y    496.66\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    19\n        label    \"\"\n        graphics\n        [\n            x    626.38\n            y    180.51\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    20\n        label    \"\"\n        graphics\n        [\n            x    395.57\n            y    472.56\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    21\n        label    \"\"\n        graphics\n        [\n            x    1059.65\n            y    1005.41\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    22\n        label    \"\"\n        graphics\n        [\n            x    227.42\n            y    233.04\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    23\n        label    \"\"\n        graphics\n        [\n            x    1004.82\n            y    1005.07\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    24\n        label    \"\"\n        graphics\n        [\n            x    707.28\n            y    657.72\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    25\n        label    \"\"\n        graphics\n        [\n            x    730.59\n            y    487.33\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    26\n        label    \"\"\n        graphics\n        [\n            x    567.38\n            y    113.01\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    27\n        label    \"\"\n        graphics\n        [\n            x    723.41\n            y    535.66\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    28\n        label    \"\"\n        graphics\n        [\n            x    822.56\n            y    157.96\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    29\n        label    \"\"\n        graphics\n        [\n            x    883.11\n            y    198.16\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    30\n        label    \"\"\n        graphics\n        [\n            x    275.84\n            y    759.33\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    31\n        label    \"\"\n        graphics\n        [\n            x    259.46\n            y    211.04\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    32\n        label    \"\"\n        graphics\n        [\n            x    777.59\n            y    849.77\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    33\n        label    \"\"\n        graphics\n        [\n            x    148.64\n            y    686.28\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    34\n        label    \"\"\n        graphics\n        [\n            x    255.40\n            y    206.80\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    35\n        label    \"\"\n        graphics\n        [\n            x    935.07\n            y    543.33\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    36\n        label    \"\"\n        graphics\n        [\n            x    863.82\n            y    974.38\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    37\n        label    \"\"\n        graphics\n        [\n            x    616.15\n            y    31.34\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    38\n        label    \"\"\n        graphics\n        [\n            x    566.97\n            y    600.94\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    39\n        label    \"\"\n        graphics\n        [\n            x    1041.49\n            y    493.39\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    40\n        label    \"\"\n        graphics\n        [\n            x    1055.00\n            y    435.04\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    41\n        label    \"\"\n        graphics\n        [\n            x    869.34\n            y    172.19\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    42\n        label    \"\"\n        graphics\n        [\n            x    488.86\n            y    997.85\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    43\n        label    \"\"\n        graphics\n        [\n            x    692.11\n            y    97.86\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    44\n        label    \"\"\n        graphics\n        [\n            x    594.57\n            y    938.24\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    45\n        label    \"\"\n        graphics\n        [\n            x    603.75\n            y    377.02\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    46\n        label    \"\"\n        graphics\n        [\n            x    1041.90\n            y    237.08\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    47\n        label    \"\"\n        graphics\n        [\n            x    330.61\n            y    536.38\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    48\n        label    \"\"\n        graphics\n        [\n            x    60.82\n            y    671.81\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    49\n        label    \"\"\n        graphics\n        [\n            x    450.23\n            y    801.08\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    50\n        label    \"\"\n        graphics\n        [\n            x    962.31\n            y    819.20\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    51\n        label    \"\"\n        graphics\n        [\n            x    788.05\n            y    8.59\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    52\n        label    \"\"\n        graphics\n        [\n            x    706.19\n            y    304.94\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    53\n        label    \"\"\n        graphics\n        [\n            x    668.13\n            y    491.67\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    54\n        label    \"\"\n        graphics\n        [\n            x    965.77\n            y    111.56\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    55\n        label    \"\"\n        graphics\n        [\n            x    115.79\n            y    125.60\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    56\n        label    \"\"\n        graphics\n        [\n            x    986.83\n            y    306.90\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    57\n        label    \"\"\n        graphics\n        [\n            x    784.35\n            y    313.58\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    58\n        label    \"\"\n        graphics\n        [\n            x    795.45\n            y    398.25\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    59\n        label    \"\"\n        graphics\n        [\n            x    941.69\n            y    653.23\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    60\n        label    \"\"\n        graphics\n        [\n            x    474.93\n            y    247.56\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    61\n        label    \"\"\n        graphics\n        [\n            x    414.08\n            y    1028.36\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    62\n        label    \"\"\n        graphics\n        [\n            x    440.28\n            y    572.48\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    63\n        label    \"\"\n        graphics\n        [\n            x    978.21\n            y    977.28\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    64\n        label    \"\"\n        graphics\n        [\n            x    940.51\n            y    124.29\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    65\n        label    \"\"\n        graphics\n        [\n            x    513.89\n            y    73.97\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    66\n        label    \"\"\n        graphics\n        [\n            x    669.17\n            y    762.97\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    67\n        label    \"\"\n        graphics\n        [\n            x    1048.67\n            y    200.19\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    68\n        label    \"\"\n        graphics\n        [\n            x    990.39\n            y    823.34\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    69\n        label    \"\"\n        graphics\n        [\n            x    542.51\n            y    730.79\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    70\n        label    \"\"\n        graphics\n        [\n            x    852.87\n            y    150.56\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    71\n        label    \"\"\n        graphics\n        [\n            x    750.37\n            y    606.67\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    72\n        label    \"\"\n        graphics\n        [\n            x    787.97\n            y    990.48\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    73\n        label    \"\"\n        graphics\n        [\n            x    734.59\n            y    428.97\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    74\n        label    \"\"\n        graphics\n        [\n            x    947.05\n            y    239.41\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    75\n        label    \"\"\n        graphics\n        [\n            x    3.48\n            y    323.55\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    76\n        label    \"\"\n        graphics\n        [\n            x    586.64\n            y    279.10\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    77\n        label    \"\"\n        graphics\n        [\n            x    47.40\n            y    930.82\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    78\n        label    \"\"\n        graphics\n        [\n            x    91.19\n            y    724.08\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    79\n        label    \"\"\n        graphics\n        [\n            x    615.81\n            y    791.60\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    80\n        label    \"\"\n        graphics\n        [\n            x    128.37\n            y    779.18\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    81\n        label    \"\"\n        graphics\n        [\n            x    110.60\n            y    49.43\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    82\n        label    \"\"\n        graphics\n        [\n            x    980.88\n            y    222.89\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    83\n        label    \"\"\n        graphics\n        [\n            x    530.66\n            y    810.29\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    84\n        label    \"\"\n        graphics\n        [\n            x    634.00\n            y    444.21\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    85\n        label    \"\"\n        graphics\n        [\n            x    604.84\n            y    966.62\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    86\n        label    \"\"\n        graphics\n        [\n            x    4.81\n            y    490.81\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    87\n        label    \"\"\n        graphics\n        [\n            x    831.50\n            y    939.60\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    88\n        label    \"\"\n        graphics\n        [\n            x    936.89\n            y    757.18\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    89\n        label    \"\"\n        graphics\n        [\n            x    712.57\n            y    138.25\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    90\n        label    \"\"\n        graphics\n        [\n            x    399.60\n            y    647.45\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    91\n        label    \"\"\n        graphics\n        [\n            x    702.79\n            y    628.95\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    92\n        label    \"\"\n        graphics\n        [\n            x    908.72\n            y    326.81\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    93\n        label    \"\"\n        graphics\n        [\n            x    385.36\n            y    138.96\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    94\n        label    \"\"\n        graphics\n        [\n            x    633.25\n            y    524.59\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    95\n        label    \"\"\n        graphics\n        [\n            x    960.95\n            y    111.90\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    96\n        label    \"\"\n        graphics\n        [\n            x    712.70\n            y    1017.80\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    97\n        label    \"\"\n        graphics\n        [\n            x    608.55\n            y    523.31\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    98\n        label    \"\"\n        graphics\n        [\n            x    393.84\n            y    709.97\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    99\n        label    \"\"\n        graphics\n        [\n            x    655.99\n            y    214.03\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    100\n        label    \"\"\n        graphics\n        [\n            x    273.89\n            y    912.06\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    101\n        label    \"\"\n        graphics\n        [\n            x    584.64\n            y    857.47\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    102\n        label    \"\"\n        graphics\n        [\n            x    671.97\n            y    696.20\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    103\n        label    \"\"\n        graphics\n        [\n            x    83.38\n            y    881.48\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    104\n        label    \"\"\n        graphics\n        [\n            x    731.71\n            y    322.65\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    105\n        label    \"\"\n        graphics\n        [\n            x    870.71\n            y    255.46\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    106\n        label    \"\"\n        graphics\n        [\n            x    134.33\n            y    407.18\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    107\n        label    \"\"\n        graphics\n        [\n            x    268.81\n            y    232.09\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    108\n        label    \"\"\n        graphics\n        [\n            x    673.76\n            y    37.36\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    109\n        label    \"\"\n        graphics\n        [\n            x    974.50\n            y    575.06\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    110\n        label    \"\"\n        graphics\n        [\n            x    925.09\n            y    667.72\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    111\n        label    \"\"\n        graphics\n        [\n            x    499.71\n            y    433.82\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    112\n        label    \"\"\n        graphics\n        [\n            x    487.26\n            y    454.43\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    113\n        label    \"\"\n        graphics\n        [\n            x    907.77\n            y    518.99\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    114\n        label    \"\"\n        graphics\n        [\n            x    1046.72\n            y    23.11\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    115\n        label    \"\"\n        graphics\n        [\n            x    510.04\n            y    883.84\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    116\n        label    \"\"\n        graphics\n        [\n            x    511.04\n            y    1024.78\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    117\n        label    \"\"\n        graphics\n        [\n            x    809.81\n            y    527.74\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    118\n        label    \"\"\n        graphics\n        [\n            x    398.85\n            y    862.56\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    119\n        label    \"\"\n        graphics\n        [\n            x    960.98\n            y    851.22\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    120\n        label    \"\"\n        graphics\n        [\n            x    1017.35\n            y    834.85\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    121\n        label    \"\"\n        graphics\n        [\n            x    214.90\n            y    764.90\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    122\n        label    \"\"\n        graphics\n        [\n            x    908.55\n            y    997.63\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    123\n        label    \"\"\n        graphics\n        [\n            x    773.64\n            y    682.81\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    124\n        label    \"\"\n        graphics\n        [\n            x    463.88\n            y    517.25\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    125\n        label    \"\"\n        graphics\n        [\n            x    472.15\n            y    449.39\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    126\n        label    \"\"\n        graphics\n        [\n            x    621.32\n            y    714.10\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    127\n        label    \"\"\n        graphics\n        [\n            x    396.08\n            y    411.49\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    128\n        label    \"\"\n        graphics\n        [\n            x    266.16\n            y    153.27\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    129\n        label    \"\"\n        graphics\n        [\n            x    185.48\n            y    187.27\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    130\n        label    \"\"\n        graphics\n        [\n            x    46.94\n            y    289.94\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    131\n        label    \"\"\n        graphics\n        [\n            x    462.68\n            y    989.20\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    132\n        label    \"\"\n        graphics\n        [\n            x    722.94\n            y    826.52\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    133\n        label    \"\"\n        graphics\n        [\n            x    577.05\n            y    953.63\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    134\n        label    \"\"\n        graphics\n        [\n            x    116.58\n            y    564.97\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    135\n        label    \"\"\n        graphics\n        [\n            x    345.78\n            y    154.80\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    136\n        label    \"\"\n        graphics\n        [\n            x    964.06\n            y    1040.58\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    137\n        label    \"\"\n        graphics\n        [\n            x    163.08\n            y    462.76\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    138\n        label    \"\"\n        graphics\n        [\n            x    391.19\n            y    88.26\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    139\n        label    \"\"\n        graphics\n        [\n            x    105.46\n            y    70.47\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    edge\n    [\n        source    1\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    1\n        target    72\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    1\n        target    75\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    10\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    100\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    100\n        target    54\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    101\n        target    62\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    102\n        target    116\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    102\n        target    49\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    102\n        target    98\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    103\n        target    35\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    103\n        target    71\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    104\n        target    72\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    105\n        target    51\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    106\n        target    51\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    107\n        target    97\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    108\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    109\n        target    51\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    11\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    110\n        target    56\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    111\n        target    37\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    112\n        target    43\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    113\n        target    20\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    114\n        target    64\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    115\n        target    33\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    116\n        target    33\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    117\n        target    51\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    118\n        target    19\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    118\n        target    58\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    119\n        target    61\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    12\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    12\n        target    24\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    120\n        target    79\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    121\n        target    108\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    122\n        target    56\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    123\n        target    92\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    124\n        target    93\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    125\n        target    65\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    126\n        target    104\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    127\n        target    109\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    128\n        target    115\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    129\n        target    46\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    13\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    130\n        target    110\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    131\n        target    99\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    132\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    133\n        target    103\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    133\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    134\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    135\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    136\n        target    91\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    137\n        target    69\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    138\n        target    82\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    139\n        target    111\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    139\n        target    64\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    14\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    15\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    16\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    16\n        target    62\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    17\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    18\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    19\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    2\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    20\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    21\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    22\n        target    127\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    22\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    23\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    24\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    25\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    26\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    27\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    28\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    29\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    3\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    30\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    30\n        target    55\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    31\n        target    102\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    31\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    32\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    32\n        target    58\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    33\n        target    31\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    34\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    34\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    35\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    36\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    37\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    38\n        target    30\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    39\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    4\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    40\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    40\n        target    79\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    41\n        target    26\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    42\n        target    121\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    42\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    43\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    44\n        target    31\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    45\n        target    30\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    46\n        target    126\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    46\n        target    43\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    47\n        target    26\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    48\n        target    24\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    49\n        target    35\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    5\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    50\n        target    32\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    51\n        target    133\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    51\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    52\n        target    20\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    53\n        target    24\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    54\n        target    49\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    55\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    56\n        target    24\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    57\n        target    19\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    58\n        target    51\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    59\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    6\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    60\n        target    111\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    60\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    61\n        target    31\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    62\n        target    45\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    63\n        target    108\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    63\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    64\n        target    57\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    65\n        target    121\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    65\n        target    32\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    66\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    66\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    67\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    68\n        target    43\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    69\n        target    40\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    7\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    70\n        target    49\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    71\n        target    41\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    72\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    73\n        target    47\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    74\n        target    55\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    75\n        target    30\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    76\n        target    64\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    77\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    78\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    78\n        target    24\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    78\n        target    81\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    79\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    8\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    80\n        target    54\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    81\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    82\n        target    36\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    83\n        target    44\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    84\n        target    82\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    85\n        target    43\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    86\n        target    54\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    87\n        target    68\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    88\n        target    32\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    89\n        target    38\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    9\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    90\n        target    104\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    90\n        target    72\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    91\n        target    104\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    91\n        target    48\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    92\n        target    26\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    93\n        target    77\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    94\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    95\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    96\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    96\n        target    90\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    97\n        target    58\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    98\n        target    79\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    99\n        target    43\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n]\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v140e168.tglf",
    "content": "0 717.000 509.000 30.000 30.000\n1 710.000 523.000 30.000 30.000\n2 383.000 320.000 30.000 30.000\n3 208.000 380.000 30.000 30.000\n4 29.000 178.000 30.000 30.000\n5 737.000 199.000 30.000 30.000\n6 673.000 283.000 30.000 30.000\n7 270.000 890.000 30.000 30.000\n8 757.000 480.000 30.000 30.000\n9 84.000 888.000 30.000 30.000\n10 700.000 295.000 30.000 30.000\n11 546.000 976.000 30.000 30.000\n12 884.000 543.000 30.000 30.000\n13 609.000 1034.000 30.000 30.000\n14 107.000 623.000 30.000 30.000\n15 270.000 252.000 30.000 30.000\n16 901.000 471.000 30.000 30.000\n17 157.000 957.000 30.000 30.000\n18 958.000 496.000 30.000 30.000\n19 626.000 180.000 30.000 30.000\n20 395.000 472.000 30.000 30.000\n21 1059.000 1005.000 30.000 30.000\n22 227.000 233.000 30.000 30.000\n23 1004.000 1005.000 30.000 30.000\n24 707.000 657.000 30.000 30.000\n25 730.000 487.000 30.000 30.000\n26 567.000 113.000 30.000 30.000\n27 723.000 535.000 30.000 30.000\n28 822.000 157.000 30.000 30.000\n29 883.000 198.000 30.000 30.000\n30 275.000 759.000 30.000 30.000\n31 259.000 211.000 30.000 30.000\n32 777.000 849.000 30.000 30.000\n33 148.000 686.000 30.000 30.000\n34 255.000 206.000 30.000 30.000\n35 935.000 543.000 30.000 30.000\n36 863.000 974.000 30.000 30.000\n37 616.000 31.000 30.000 30.000\n38 566.000 600.000 30.000 30.000\n39 1041.000 493.000 30.000 30.000\n40 1055.000 435.000 30.000 30.000\n41 869.000 172.000 30.000 30.000\n42 488.000 997.000 30.000 30.000\n43 692.000 97.000 30.000 30.000\n44 594.000 938.000 30.000 30.000\n45 603.000 377.000 30.000 30.000\n46 1041.000 237.000 30.000 30.000\n47 330.000 536.000 30.000 30.000\n48 60.000 671.000 30.000 30.000\n49 450.000 801.000 30.000 30.000\n50 962.000 819.000 30.000 30.000\n51 788.000 8.000 30.000 30.000\n52 706.000 304.000 30.000 30.000\n53 668.000 491.000 30.000 30.000\n54 965.000 111.000 30.000 30.000\n55 115.000 125.000 30.000 30.000\n56 986.000 306.000 30.000 30.000\n57 784.000 313.000 30.000 30.000\n58 795.000 398.000 30.000 30.000\n59 941.000 653.000 30.000 30.000\n60 474.000 247.000 30.000 30.000\n61 414.000 1028.000 30.000 30.000\n62 440.000 572.000 30.000 30.000\n63 978.000 977.000 30.000 30.000\n64 940.000 124.000 30.000 30.000\n65 513.000 73.000 30.000 30.000\n66 669.000 762.000 30.000 30.000\n67 1048.000 200.000 30.000 30.000\n68 990.000 823.000 30.000 30.000\n69 542.000 730.000 30.000 30.000\n70 852.000 150.000 30.000 30.000\n71 750.000 606.000 30.000 30.000\n72 787.000 990.000 30.000 30.000\n73 734.000 428.000 30.000 30.000\n74 947.000 239.000 30.000 30.000\n75 3.000 323.000 30.000 30.000\n76 586.000 279.000 30.000 30.000\n77 47.000 930.000 30.000 30.000\n78 91.000 724.000 30.000 30.000\n79 615.000 791.000 30.000 30.000\n80 128.000 779.000 30.000 30.000\n81 110.000 49.000 30.000 30.000\n82 980.000 222.000 30.000 30.000\n83 530.000 810.000 30.000 30.000\n84 634.000 444.000 30.000 30.000\n85 604.000 966.000 30.000 30.000\n86 4.000 490.000 30.000 30.000\n87 831.000 939.000 30.000 30.000\n88 936.000 757.000 30.000 30.000\n89 712.000 138.000 30.000 30.000\n90 399.000 647.000 30.000 30.000\n91 702.000 628.000 30.000 30.000\n92 908.000 326.000 30.000 30.000\n93 385.000 138.000 30.000 30.000\n94 633.000 524.000 30.000 30.000\n95 960.000 111.000 30.000 30.000\n96 712.000 1017.000 30.000 30.000\n97 608.000 523.000 30.000 30.000\n98 393.000 709.000 30.000 30.000\n99 655.000 214.000 30.000 30.000\n100 273.000 912.000 30.000 30.000\n101 584.000 857.000 30.000 30.000\n102 671.000 696.000 30.000 30.000\n103 83.000 881.000 30.000 30.000\n104 731.000 322.000 30.000 30.000\n105 870.000 255.000 30.000 30.000\n106 134.000 407.000 30.000 30.000\n107 268.000 232.000 30.000 30.000\n108 673.000 37.000 30.000 30.000\n109 974.000 575.000 30.000 30.000\n110 925.000 667.000 30.000 30.000\n111 499.000 433.000 30.000 30.000\n112 487.000 454.000 30.000 30.000\n113 907.000 518.000 30.000 30.000\n114 1046.000 23.000 30.000 30.000\n115 510.000 883.000 30.000 30.000\n116 511.000 1024.000 30.000 30.000\n117 809.000 527.000 30.000 30.000\n118 398.000 862.000 30.000 30.000\n119 960.000 851.000 30.000 30.000\n120 1017.000 834.000 30.000 30.000\n121 214.000 764.000 30.000 30.000\n122 908.000 997.000 30.000 30.000\n123 773.000 682.000 30.000 30.000\n124 463.000 517.000 30.000 30.000\n125 472.000 449.000 30.000 30.000\n126 621.000 714.000 30.000 30.000\n127 396.000 411.000 30.000 30.000\n128 266.000 153.000 30.000 30.000\n129 185.000 187.000 30.000 30.000\n130 46.000 289.000 30.000 30.000\n131 462.000 989.000 30.000 30.000\n132 722.000 826.000 30.000 30.000\n133 577.000 953.000 30.000 30.000\n134 116.000 564.000 30.000 30.000\n135 345.000 154.000 30.000 30.000\n136 964.000 1040.000 30.000 30.000\n137 163.000 462.000 30.000 30.000\n138 391.000 88.000 30.000 30.000\n139 105.000 70.000 30.000 30.000\n#\n125 65\n95 22\n88 32\n59 9\n65 32\n11 9\n33 31\n72 7\n96 11\n38 30\n61 31\n1 72\n19 5\n118 19\n67 16\n133 103\n8 7\n111 37\n89 38\n63 18\n58 51\n31 102\n46 126\n3 1\n106 51\n48 24\n129 46\n42 121\n87 68\n69 40\n102 98\n64 57\n130 110\n47 26\n41 26\n105 51\n74 55\n115 33\n128 115\n90 72\n120 79\n1 75\n73 47\n54 49\n96 90\n10 1\n82 36\n36 22\n28 9\n138 82\n45 30\n139 64\n85 43\n137 69\n133 16\n22 14\n62 45\n102 49\n22 127\n20 11\n43 7\n119 61\n24 17\n30 55\n60 111\n131 99\n40 13\n136 91\n139 111\n123 92\n70 49\n90 104\n132 0\n103 71\n27 23\n46 43\n98 79\n127 109\n92 26\n1 0\n15 1\n6 0\n113 20\n86 54\n52 20\n135 18\n63 108\n51 133\n103 35\n78 12\n116 33\n81 6\n53 24\n75 30\n84 82\n94 5\n107 97\n12 1\n76 64\n117 51\n35 14\n112 43\n71 41\n110 56\n68 43\n18 15\n16 0\n49 35\n50 32\n39 2\n31 15\n55 13\n21 17\n40 79\n42 4\n83 44\n91 104\n37 18\n122 56\n5 3\n51 6\n44 31\n66 15\n124 93\n79 3\n32 58\n118 58\n121 108\n4 2\n13 12\n93 77\n126 104\n17 9\n66 13\n56 24\n100 54\n78 81\n101 62\n34 8\n100 5\n29 13\n2 1\n7 3\n12 24\n32 16\n114 64\n109 51\n23 10\n25 1\n34 11\n9 1\n65 121\n77 7\n30 16\n57 19\n14 10\n78 24\n134 21\n16 62\n91 48\n99 43\n97 58\n26 22\n80 54\n102 116\n60 3\n104 72\n108 15\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v140e182.gml",
    "content": "graph\n[\n    node\n    [\n        id    0\n        label    \"\"\n        graphics\n        [\n            x    65.18\n            y    602.55\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    1\n        label    \"\"\n        graphics\n        [\n            x    1010.65\n            y    750.59\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    2\n        label    \"\"\n        graphics\n        [\n            x    282.41\n            y    1016.05\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    3\n        label    \"\"\n        graphics\n        [\n            x    782.40\n            y    679.99\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    4\n        label    \"\"\n        graphics\n        [\n            x    940.80\n            y    469.98\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    5\n        label    \"\"\n        graphics\n        [\n            x    817.56\n            y    700.46\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    6\n        label    \"\"\n        graphics\n        [\n            x    844.64\n            y    420.08\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    7\n        label    \"\"\n        graphics\n        [\n            x    295.55\n            y    853.83\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    8\n        label    \"\"\n        graphics\n        [\n            x    913.46\n            y    52.85\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    9\n        label    \"\"\n        graphics\n        [\n            x    904.02\n            y    971.71\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    10\n        label    \"\"\n        graphics\n        [\n            x    265.25\n            y    1054.35\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    11\n        label    \"\"\n        graphics\n        [\n            x    651.55\n            y    263.64\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    12\n        label    \"\"\n        graphics\n        [\n            x    1019.51\n            y    1014.59\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    13\n        label    \"\"\n        graphics\n        [\n            x    485.65\n            y    63.23\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    14\n        label    \"\"\n        graphics\n        [\n            x    463.30\n            y    557.10\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    15\n        label    \"\"\n        graphics\n        [\n            x    162.47\n            y    939.56\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    16\n        label    \"\"\n        graphics\n        [\n            x    745.76\n            y    12.74\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    17\n        label    \"\"\n        graphics\n        [\n            x    25.40\n            y    488.59\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    18\n        label    \"\"\n        graphics\n        [\n            x    977.87\n            y    687.18\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    19\n        label    \"\"\n        graphics\n        [\n            x    88.65\n            y    481.89\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    20\n        label    \"\"\n        graphics\n        [\n            x    791.32\n            y    984.13\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    21\n        label    \"\"\n        graphics\n        [\n            x    285.43\n            y    906.66\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    22\n        label    \"\"\n        graphics\n        [\n            x    1028.10\n            y    803.87\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    23\n        label    \"\"\n        graphics\n        [\n            x    206.91\n            y    260.07\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    24\n        label    \"\"\n        graphics\n        [\n            x    393.32\n            y    56.40\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    25\n        label    \"\"\n        graphics\n        [\n            x    289.17\n            y    41.11\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    26\n        label    \"\"\n        graphics\n        [\n            x    871.46\n            y    61.19\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    27\n        label    \"\"\n        graphics\n        [\n            x    152.24\n            y    606.66\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    28\n        label    \"\"\n        graphics\n        [\n            x    160.41\n            y    661.18\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    29\n        label    \"\"\n        graphics\n        [\n            x    861.47\n            y    412.83\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    30\n        label    \"\"\n        graphics\n        [\n            x    738.30\n            y    330.60\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    31\n        label    \"\"\n        graphics\n        [\n            x    34.36\n            y    326.06\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    32\n        label    \"\"\n        graphics\n        [\n            x    896.67\n            y    807.93\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    33\n        label    \"\"\n        graphics\n        [\n            x    734.13\n            y    344.39\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    34\n        label    \"\"\n        graphics\n        [\n            x    666.55\n            y    204.67\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    35\n        label    \"\"\n        graphics\n        [\n            x    909.35\n            y    597.92\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    36\n        label    \"\"\n        graphics\n        [\n            x    107.86\n            y    455.76\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    37\n        label    \"\"\n        graphics\n        [\n            x    1057.54\n            y    849.93\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    38\n        label    \"\"\n        graphics\n        [\n            x    1019.83\n            y    756.31\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    39\n        label    \"\"\n        graphics\n        [\n            x    164.93\n            y    456.84\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    40\n        label    \"\"\n        graphics\n        [\n            x    70.28\n            y    635.40\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    41\n        label    \"\"\n        graphics\n        [\n            x    524.24\n            y    1013.88\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    42\n        label    \"\"\n        graphics\n        [\n            x    645.61\n            y    394.17\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    43\n        label    \"\"\n        graphics\n        [\n            x    491.34\n            y    895.98\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    44\n        label    \"\"\n        graphics\n        [\n            x    565.33\n            y    602.65\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    45\n        label    \"\"\n        graphics\n        [\n            x    127.40\n            y    317.59\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    46\n        label    \"\"\n        graphics\n        [\n            x    922.80\n            y    150.94\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    47\n        label    \"\"\n        graphics\n        [\n            x    275.32\n            y    123.07\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    48\n        label    \"\"\n        graphics\n        [\n            x    794.16\n            y    908.90\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    49\n        label    \"\"\n        graphics\n        [\n            x    703.80\n            y    747.51\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    50\n        label    \"\"\n        graphics\n        [\n            x    489.95\n            y    352.90\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    51\n        label    \"\"\n        graphics\n        [\n            x    536.61\n            y    736.51\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    52\n        label    \"\"\n        graphics\n        [\n            x    870.60\n            y    175.82\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    53\n        label    \"\"\n        graphics\n        [\n            x    80.80\n            y    652.25\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    54\n        label    \"\"\n        graphics\n        [\n            x    75.96\n            y    578.52\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    55\n        label    \"\"\n        graphics\n        [\n            x    514.16\n            y    326.57\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    56\n        label    \"\"\n        graphics\n        [\n            x    559.87\n            y    927.72\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    57\n        label    \"\"\n        graphics\n        [\n            x    223.81\n            y    326.33\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    58\n        label    \"\"\n        graphics\n        [\n            x    891.48\n            y    929.62\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    59\n        label    \"\"\n        graphics\n        [\n            x    561.85\n            y    1033.45\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    60\n        label    \"\"\n        graphics\n        [\n            x    277.60\n            y    117.85\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    61\n        label    \"\"\n        graphics\n        [\n            x    911.72\n            y    671.13\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    62\n        label    \"\"\n        graphics\n        [\n            x    913.00\n            y    783.68\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    63\n        label    \"\"\n        graphics\n        [\n            x    370.11\n            y    633.77\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    64\n        label    \"\"\n        graphics\n        [\n            x    980.45\n            y    482.19\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    65\n        label    \"\"\n        graphics\n        [\n            x    533.94\n            y    559.54\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    66\n        label    \"\"\n        graphics\n        [\n            x    808.32\n            y    549.73\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    67\n        label    \"\"\n        graphics\n        [\n            x    17.01\n            y    309.96\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    68\n        label    \"\"\n        graphics\n        [\n            x    539.93\n            y    649.92\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    69\n        label    \"\"\n        graphics\n        [\n            x    250.57\n            y    647.10\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    70\n        label    \"\"\n        graphics\n        [\n            x    691.68\n            y    791.52\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    71\n        label    \"\"\n        graphics\n        [\n            x    938.71\n            y    17.66\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    72\n        label    \"\"\n        graphics\n        [\n            x    6.35\n            y    803.37\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    73\n        label    \"\"\n        graphics\n        [\n            x    738.62\n            y    149.88\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    74\n        label    \"\"\n        graphics\n        [\n            x    238.92\n            y    819.55\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    75\n        label    \"\"\n        graphics\n        [\n            x    272.25\n            y    606.81\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    76\n        label    \"\"\n        graphics\n        [\n            x    989.52\n            y    300.61\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    77\n        label    \"\"\n        graphics\n        [\n            x    1024.21\n            y    12.25\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    78\n        label    \"\"\n        graphics\n        [\n            x    673.45\n            y    37.53\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    79\n        label    \"\"\n        graphics\n        [\n            x    933.19\n            y    697.21\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    80\n        label    \"\"\n        graphics\n        [\n            x    846.84\n            y    885.65\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    81\n        label    \"\"\n        graphics\n        [\n            x    330.79\n            y    426.33\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    82\n        label    \"\"\n        graphics\n        [\n            x    829.02\n            y    814.92\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    83\n        label    \"\"\n        graphics\n        [\n            x    61.90\n            y    371.88\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    84\n        label    \"\"\n        graphics\n        [\n            x    520.62\n            y    773.54\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    85\n        label    \"\"\n        graphics\n        [\n            x    504.50\n            y    753.13\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    86\n        label    \"\"\n        graphics\n        [\n            x    843.69\n            y    944.20\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    87\n        label    \"\"\n        graphics\n        [\n            x    816.97\n            y    1044.99\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    88\n        label    \"\"\n        graphics\n        [\n            x    560.64\n            y    252.73\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    89\n        label    \"\"\n        graphics\n        [\n            x    324.92\n            y    256.39\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    90\n        label    \"\"\n        graphics\n        [\n            x    615.73\n            y    319.70\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    91\n        label    \"\"\n        graphics\n        [\n            x    151.89\n            y    515.38\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    92\n        label    \"\"\n        graphics\n        [\n            x    1009.00\n            y    834.26\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    93\n        label    \"\"\n        graphics\n        [\n            x    258.41\n            y    563.45\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    94\n        label    \"\"\n        graphics\n        [\n            x    81.32\n            y    1007.57\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    95\n        label    \"\"\n        graphics\n        [\n            x    747.44\n            y    365.62\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    96\n        label    \"\"\n        graphics\n        [\n            x    858.70\n            y    394.97\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    97\n        label    \"\"\n        graphics\n        [\n            x    1007.53\n            y    366.73\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    98\n        label    \"\"\n        graphics\n        [\n            x    343.18\n            y    197.93\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    99\n        label    \"\"\n        graphics\n        [\n            x    321.41\n            y    314.34\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    100\n        label    \"\"\n        graphics\n        [\n            x    267.81\n            y    161.92\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    101\n        label    \"\"\n        graphics\n        [\n            x    38.55\n            y    135.41\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    102\n        label    \"\"\n        graphics\n        [\n            x    842.50\n            y    71.79\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    103\n        label    \"\"\n        graphics\n        [\n            x    629.31\n            y    795.56\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    104\n        label    \"\"\n        graphics\n        [\n            x    984.05\n            y    754.91\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    105\n        label    \"\"\n        graphics\n        [\n            x    78.28\n            y    896.84\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    106\n        label    \"\"\n        graphics\n        [\n            x    421.67\n            y    103.26\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    107\n        label    \"\"\n        graphics\n        [\n            x    404.21\n            y    466.52\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    108\n        label    \"\"\n        graphics\n        [\n            x    88.67\n            y    83.63\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    109\n        label    \"\"\n        graphics\n        [\n            x    123.72\n            y    489.10\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    110\n        label    \"\"\n        graphics\n        [\n            x    782.54\n            y    303.73\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    111\n        label    \"\"\n        graphics\n        [\n            x    352.03\n            y    981.05\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    112\n        label    \"\"\n        graphics\n        [\n            x    624.25\n            y    991.79\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    113\n        label    \"\"\n        graphics\n        [\n            x    688.09\n            y    416.85\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    114\n        label    \"\"\n        graphics\n        [\n            x    769.44\n            y    16.38\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    115\n        label    \"\"\n        graphics\n        [\n            x    288.53\n            y    274.63\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    116\n        label    \"\"\n        graphics\n        [\n            x    614.57\n            y    232.93\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    117\n        label    \"\"\n        graphics\n        [\n            x    177.77\n            y    973.29\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    118\n        label    \"\"\n        graphics\n        [\n            x    374.52\n            y    622.52\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    119\n        label    \"\"\n        graphics\n        [\n            x    867.18\n            y    763.75\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    120\n        label    \"\"\n        graphics\n        [\n            x    1003.99\n            y    777.07\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    121\n        label    \"\"\n        graphics\n        [\n            x    536.48\n            y    834.09\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    122\n        label    \"\"\n        graphics\n        [\n            x    1052.21\n            y    814.00\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    123\n        label    \"\"\n        graphics\n        [\n            x    891.76\n            y    814.64\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    124\n        label    \"\"\n        graphics\n        [\n            x    25.76\n            y    706.72\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    125\n        label    \"\"\n        graphics\n        [\n            x    349.86\n            y    688.10\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    126\n        label    \"\"\n        graphics\n        [\n            x    851.61\n            y    826.75\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    127\n        label    \"\"\n        graphics\n        [\n            x    618.70\n            y    95.62\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    128\n        label    \"\"\n        graphics\n        [\n            x    744.84\n            y    514.88\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    129\n        label    \"\"\n        graphics\n        [\n            x    88.58\n            y    693.74\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    130\n        label    \"\"\n        graphics\n        [\n            x    848.62\n            y    232.65\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    131\n        label    \"\"\n        graphics\n        [\n            x    941.47\n            y    683.55\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    132\n        label    \"\"\n        graphics\n        [\n            x    428.37\n            y    279.64\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    133\n        label    \"\"\n        graphics\n        [\n            x    529.43\n            y    322.51\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    134\n        label    \"\"\n        graphics\n        [\n            x    936.10\n            y    259.10\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    135\n        label    \"\"\n        graphics\n        [\n            x    739.38\n            y    979.17\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    136\n        label    \"\"\n        graphics\n        [\n            x    229.35\n            y    420.96\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    137\n        label    \"\"\n        graphics\n        [\n            x    324.64\n            y    1003.39\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    138\n        label    \"\"\n        graphics\n        [\n            x    155.52\n            y    571.80\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    139\n        label    \"\"\n        graphics\n        [\n            x    274.88\n            y    150.77\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    edge\n    [\n        source    1\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    10\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    100\n        target    37\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    101\n        target    76\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    102\n        target    41\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    103\n        target    101\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    104\n        target    20\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    105\n        target    55\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    106\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    107\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    107\n        target    52\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    108\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    108\n        target    93\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    109\n        target    71\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    11\n        target    132\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    11\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    11\n        target    72\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    110\n        target    101\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    110\n        target    55\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    111\n        target    65\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    112\n        target    133\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    112\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    112\n        target    78\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    113\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    114\n        target    109\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    115\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    115\n        target    93\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    116\n        target    35\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    117\n        target    107\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    118\n        target    110\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    119\n        target    99\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    12\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    120\n        target    72\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    121\n        target    62\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    121\n        target    94\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    122\n        target    68\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    123\n        target    27\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    124\n        target    121\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    124\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    124\n        target    76\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    125\n        target    88\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    126\n        target    101\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    126\n        target    55\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    127\n        target    114\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    128\n        target    47\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    129\n        target    112\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    13\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    130\n        target    103\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    130\n        target    47\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    131\n        target    129\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    131\n        target    44\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    132\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    132\n        target    58\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    133\n        target    114\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    134\n        target    131\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    135\n        target    47\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    136\n        target    43\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    137\n        target    57\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    138\n        target    88\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    139\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    139\n        target    47\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    14\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    15\n        target    117\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    15\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    16\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    17\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    18\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    18\n        target    54\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    19\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    2\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    20\n        target    117\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    20\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    21\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    21\n        target    96\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    22\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    23\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    24\n        target    100\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    24\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    25\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    26\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    27\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    28\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    29\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    3\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    30\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    31\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    32\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    33\n        target    120\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    33\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    34\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    35\n        target    26\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    36\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    37\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    38\n        target    29\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    39\n        target    25\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    4\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    40\n        target    134\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    40\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    41\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    42\n        target    102\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    42\n        target    32\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    43\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    43\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    44\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    45\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    46\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    46\n        target    69\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    47\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    48\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    49\n        target    33\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    5\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    50\n        target    25\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    50\n        target    33\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    50\n        target    77\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    51\n        target    118\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    51\n        target    36\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    52\n        target    109\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    52\n        target    46\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    53\n        target    44\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    54\n        target    33\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    55\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    56\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    57\n        target    27\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    57\n        target    96\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    58\n        target    32\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    59\n        target    20\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    6\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    60\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    61\n        target    36\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    62\n        target    31\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    63\n        target    41\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    64\n        target    26\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    65\n        target    25\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    66\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    67\n        target    34\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    68\n        target    24\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    69\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    69\n        target    20\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    7\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    70\n        target    57\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    71\n        target    40\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    71\n        target    57\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    72\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    73\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    74\n        target    26\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    75\n        target    24\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    76\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    77\n        target    68\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    78\n        target    71\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    78\n        target    79\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    79\n        target    24\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    8\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    8\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    8\n        target    39\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    80\n        target    29\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    81\n        target    19\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    82\n        target    45\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    83\n        target    138\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    83\n        target    61\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    84\n        target    28\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    85\n        target    54\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    86\n        target    85\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    87\n        target    37\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    87\n        target    76\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    88\n        target    54\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    89\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    9\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    9\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    90\n        target    79\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    91\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    91\n        target    40\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    92\n        target    77\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    93\n        target    67\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    94\n        target    137\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    94\n        target    56\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    94\n        target    92\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    95\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    96\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    97\n        target    74\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    98\n        target    95\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    99\n        target    109\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    99\n        target    65\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n]\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v140e182.tglf",
    "content": "0 65.000 602.000 30.000 30.000\n1 1010.000 750.000 30.000 30.000\n2 282.000 1016.000 30.000 30.000\n3 782.000 679.000 30.000 30.000\n4 940.000 469.000 30.000 30.000\n5 817.000 700.000 30.000 30.000\n6 844.000 420.000 30.000 30.000\n7 295.000 853.000 30.000 30.000\n8 913.000 52.000 30.000 30.000\n9 904.000 971.000 30.000 30.000\n10 265.000 1054.000 30.000 30.000\n11 651.000 263.000 30.000 30.000\n12 1019.000 1014.000 30.000 30.000\n13 485.000 63.000 30.000 30.000\n14 463.000 557.000 30.000 30.000\n15 162.000 939.000 30.000 30.000\n16 745.000 12.000 30.000 30.000\n17 25.000 488.000 30.000 30.000\n18 977.000 687.000 30.000 30.000\n19 88.000 481.000 30.000 30.000\n20 791.000 984.000 30.000 30.000\n21 285.000 906.000 30.000 30.000\n22 1028.000 803.000 30.000 30.000\n23 206.000 260.000 30.000 30.000\n24 393.000 56.000 30.000 30.000\n25 289.000 41.000 30.000 30.000\n26 871.000 61.000 30.000 30.000\n27 152.000 606.000 30.000 30.000\n28 160.000 661.000 30.000 30.000\n29 861.000 412.000 30.000 30.000\n30 738.000 330.000 30.000 30.000\n31 34.000 326.000 30.000 30.000\n32 896.000 807.000 30.000 30.000\n33 734.000 344.000 30.000 30.000\n34 666.000 204.000 30.000 30.000\n35 909.000 597.000 30.000 30.000\n36 107.000 455.000 30.000 30.000\n37 1057.000 849.000 30.000 30.000\n38 1019.000 756.000 30.000 30.000\n39 164.000 456.000 30.000 30.000\n40 70.000 635.000 30.000 30.000\n41 524.000 1013.000 30.000 30.000\n42 645.000 394.000 30.000 30.000\n43 491.000 895.000 30.000 30.000\n44 565.000 602.000 30.000 30.000\n45 127.000 317.000 30.000 30.000\n46 922.000 150.000 30.000 30.000\n47 275.000 123.000 30.000 30.000\n48 794.000 908.000 30.000 30.000\n49 703.000 747.000 30.000 30.000\n50 489.000 352.000 30.000 30.000\n51 536.000 736.000 30.000 30.000\n52 870.000 175.000 30.000 30.000\n53 80.000 652.000 30.000 30.000\n54 75.000 578.000 30.000 30.000\n55 514.000 326.000 30.000 30.000\n56 559.000 927.000 30.000 30.000\n57 223.000 326.000 30.000 30.000\n58 891.000 929.000 30.000 30.000\n59 561.000 1033.000 30.000 30.000\n60 277.000 117.000 30.000 30.000\n61 911.000 671.000 30.000 30.000\n62 913.000 783.000 30.000 30.000\n63 370.000 633.000 30.000 30.000\n64 980.000 482.000 30.000 30.000\n65 533.000 559.000 30.000 30.000\n66 808.000 549.000 30.000 30.000\n67 17.000 309.000 30.000 30.000\n68 539.000 649.000 30.000 30.000\n69 250.000 647.000 30.000 30.000\n70 691.000 791.000 30.000 30.000\n71 938.000 17.000 30.000 30.000\n72 6.000 803.000 30.000 30.000\n73 738.000 149.000 30.000 30.000\n74 238.000 819.000 30.000 30.000\n75 272.000 606.000 30.000 30.000\n76 989.000 300.000 30.000 30.000\n77 1024.000 12.000 30.000 30.000\n78 673.000 37.000 30.000 30.000\n79 933.000 697.000 30.000 30.000\n80 846.000 885.000 30.000 30.000\n81 330.000 426.000 30.000 30.000\n82 829.000 814.000 30.000 30.000\n83 61.000 371.000 30.000 30.000\n84 520.000 773.000 30.000 30.000\n85 504.000 753.000 30.000 30.000\n86 843.000 944.000 30.000 30.000\n87 816.000 1044.000 30.000 30.000\n88 560.000 252.000 30.000 30.000\n89 324.000 256.000 30.000 30.000\n90 615.000 319.000 30.000 30.000\n91 151.000 515.000 30.000 30.000\n92 1009.000 834.000 30.000 30.000\n93 258.000 563.000 30.000 30.000\n94 81.000 1007.000 30.000 30.000\n95 747.000 365.000 30.000 30.000\n96 858.000 394.000 30.000 30.000\n97 1007.000 366.000 30.000 30.000\n98 343.000 197.000 30.000 30.000\n99 321.000 314.000 30.000 30.000\n100 267.000 161.000 30.000 30.000\n101 38.000 135.000 30.000 30.000\n102 842.000 71.000 30.000 30.000\n103 629.000 795.000 30.000 30.000\n104 984.000 754.000 30.000 30.000\n105 78.000 896.000 30.000 30.000\n106 421.000 103.000 30.000 30.000\n107 404.000 466.000 30.000 30.000\n108 88.000 83.000 30.000 30.000\n109 123.000 489.000 30.000 30.000\n110 782.000 303.000 30.000 30.000\n111 352.000 981.000 30.000 30.000\n112 624.000 991.000 30.000 30.000\n113 688.000 416.000 30.000 30.000\n114 769.000 16.000 30.000 30.000\n115 288.000 274.000 30.000 30.000\n116 614.000 232.000 30.000 30.000\n117 177.000 973.000 30.000 30.000\n118 374.000 622.000 30.000 30.000\n119 867.000 763.000 30.000 30.000\n120 1003.000 777.000 30.000 30.000\n121 536.000 834.000 30.000 30.000\n122 1052.000 814.000 30.000 30.000\n123 891.000 814.000 30.000 30.000\n124 25.000 706.000 30.000 30.000\n125 349.000 688.000 30.000 30.000\n126 851.000 826.000 30.000 30.000\n127 618.000 95.000 30.000 30.000\n128 744.000 514.000 30.000 30.000\n129 88.000 693.000 30.000 30.000\n130 848.000 232.000 30.000 30.000\n131 941.000 683.000 30.000 30.000\n132 428.000 279.000 30.000 30.000\n133 529.000 322.000 30.000 30.000\n134 936.000 259.000 30.000 30.000\n135 739.000 979.000 30.000 30.000\n136 229.000 420.000 30.000 30.000\n137 324.000 1003.000 30.000 30.000\n138 155.000 571.000 30.000 30.000\n139 274.000 150.000 30.000 30.000\n#\n122 68\n124 121\n8 2\n78 79\n61 36\n69 1\n14 10\n37 18\n115 93\n81 19\n109 71\n40 134\n24 3\n94 56\n105 55\n59 20\n11 132\n132 58\n121 62\n116 35\n33 21\n64 26\n139 47\n21 14\n29 8\n31 1\n11 72\n99 65\n91 40\n93 67\n13 12\n52 46\n119 99\n8 39\n101 76\n15 117\n126 55\n10 9\n97 74\n136 43\n19 15\n49 33\n8 10\n54 33\n73 5\n83 61\n112 78\n79 24\n131 129\n18 13\n103 101\n95 10\n104 20\n44 12\n83 138\n75 24\n138 88\n43 7\n115 0\n107 18\n130 103\n62 31\n108 9\n50 25\n130 47\n71 57\n107 52\n112 133\n20 117\n100 37\n77 68\n18 54\n106 2\n121 94\n72 7\n131 44\n45 10\n102 41\n51 36\n87 37\n113 21\n5 4\n76 1\n27 23\n68 24\n42 32\n36 21\n23 2\n67 34\n11 5\n60 8\n118 110\n69 20\n128 47\n133 114\n25 13\n26 17\n20 6\n87 76\n139 13\n71 40\n112 7\n96 22\n38 29\n40 2\n34 6\n53 44\n51 118\n124 14\n129 112\n9 0\n50 33\n7 6\n70 57\n108 93\n16 4\n33 120\n98 95\n82 45\n111 65\n94 92\n135 47\n4 0\n120 72\n78 71\n32 12\n50 77\n132 4\n88 54\n89 11\n124 76\n28 17\n56 18\n114 109\n123 27\n30 22\n46 3\n90 79\n65 25\n6 4\n21 96\n110 55\n92 77\n134 131\n1 0\n2 1\n126 101\n57 27\n24 100\n42 102\n22 13\n85 54\n57 96\n12 2\n63 41\n39 25\n110 101\n84 28\n55 4\n137 57\n15 2\n86 85\n74 26\n41 14\n80 29\n35 26\n52 109\n43 1\n58 32\n99 109\n46 69\n94 137\n66 9\n125 88\n127 114\n9 22\n17 15\n91 10\n3 2\n48 13\n117 107\n47 0\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v140e196.gml",
    "content": "graph\n[\n    node\n    [\n        id    0\n        label    \"\"\n        graphics\n        [\n            x    509.68\n            y    607.88\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    1\n        label    \"\"\n        graphics\n        [\n            x    230.33\n            y    387.59\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    2\n        label    \"\"\n        graphics\n        [\n            x    158.31\n            y    574.67\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    3\n        label    \"\"\n        graphics\n        [\n            x    644.47\n            y    1028.15\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    4\n        label    \"\"\n        graphics\n        [\n            x    842.07\n            y    110.75\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    5\n        label    \"\"\n        graphics\n        [\n            x    577.71\n            y    274.56\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    6\n        label    \"\"\n        graphics\n        [\n            x    678.01\n            y    827.23\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    7\n        label    \"\"\n        graphics\n        [\n            x    339.79\n            y    1054.21\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    8\n        label    \"\"\n        graphics\n        [\n            x    625.85\n            y    663.85\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    9\n        label    \"\"\n        graphics\n        [\n            x    308.91\n            y    881.01\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    10\n        label    \"\"\n        graphics\n        [\n            x    414.06\n            y    134.98\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    11\n        label    \"\"\n        graphics\n        [\n            x    836.95\n            y    30.97\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    12\n        label    \"\"\n        graphics\n        [\n            x    246.78\n            y    668.15\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    13\n        label    \"\"\n        graphics\n        [\n            x    741.15\n            y    816.25\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    14\n        label    \"\"\n        graphics\n        [\n            x    682.23\n            y    494.69\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    15\n        label    \"\"\n        graphics\n        [\n            x    231.50\n            y    165.25\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    16\n        label    \"\"\n        graphics\n        [\n            x    827.25\n            y    751.16\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    17\n        label    \"\"\n        graphics\n        [\n            x    122.65\n            y    20.74\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    18\n        label    \"\"\n        graphics\n        [\n            x    763.90\n            y    922.75\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    19\n        label    \"\"\n        graphics\n        [\n            x    325.22\n            y    440.28\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    20\n        label    \"\"\n        graphics\n        [\n            x    740.57\n            y    44.01\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    21\n        label    \"\"\n        graphics\n        [\n            x    646.78\n            y    1055.43\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    22\n        label    \"\"\n        graphics\n        [\n            x    768.09\n            y    993.80\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    23\n        label    \"\"\n        graphics\n        [\n            x    1057.05\n            y    536.35\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    24\n        label    \"\"\n        graphics\n        [\n            x    353.01\n            y    582.43\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    25\n        label    \"\"\n        graphics\n        [\n            x    155.53\n            y    954.58\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    26\n        label    \"\"\n        graphics\n        [\n            x    79.17\n            y    994.26\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    27\n        label    \"\"\n        graphics\n        [\n            x    572.19\n            y    455.42\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    28\n        label    \"\"\n        graphics\n        [\n            x    189.83\n            y    619.36\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    29\n        label    \"\"\n        graphics\n        [\n            x    123.66\n            y    71.85\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    30\n        label    \"\"\n        graphics\n        [\n            x    213.91\n            y    130.74\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    31\n        label    \"\"\n        graphics\n        [\n            x    925.80\n            y    759.46\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    32\n        label    \"\"\n        graphics\n        [\n            x    1030.98\n            y    485.75\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    33\n        label    \"\"\n        graphics\n        [\n            x    577.33\n            y    613.54\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    34\n        label    \"\"\n        graphics\n        [\n            x    774.73\n            y    859.98\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    35\n        label    \"\"\n        graphics\n        [\n            x    174.30\n            y    49.21\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    36\n        label    \"\"\n        graphics\n        [\n            x    211.35\n            y    564.06\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    37\n        label    \"\"\n        graphics\n        [\n            x    282.24\n            y    227.58\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    38\n        label    \"\"\n        graphics\n        [\n            x    582.25\n            y    394.39\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    39\n        label    \"\"\n        graphics\n        [\n            x    929.65\n            y    426.93\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    40\n        label    \"\"\n        graphics\n        [\n            x    37.02\n            y    307.38\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    41\n        label    \"\"\n        graphics\n        [\n            x    525.26\n            y    817.86\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    42\n        label    \"\"\n        graphics\n        [\n            x    1008.24\n            y    854.74\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    43\n        label    \"\"\n        graphics\n        [\n            x    637.37\n            y    736.91\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    44\n        label    \"\"\n        graphics\n        [\n            x    483.38\n            y    990.39\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    45\n        label    \"\"\n        graphics\n        [\n            x    408.33\n            y    481.03\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    46\n        label    \"\"\n        graphics\n        [\n            x    578.70\n            y    874.34\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    47\n        label    \"\"\n        graphics\n        [\n            x    362.19\n            y    112.84\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    48\n        label    \"\"\n        graphics\n        [\n            x    70.07\n            y    564.29\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    49\n        label    \"\"\n        graphics\n        [\n            x    584.98\n            y    748.25\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    50\n        label    \"\"\n        graphics\n        [\n            x    371.57\n            y    541.28\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    51\n        label    \"\"\n        graphics\n        [\n            x    141.51\n            y    964.67\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    52\n        label    \"\"\n        graphics\n        [\n            x    642.43\n            y    937.12\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    53\n        label    \"\"\n        graphics\n        [\n            x    577.66\n            y    508.17\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    54\n        label    \"\"\n        graphics\n        [\n            x    487.19\n            y    200.40\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    55\n        label    \"\"\n        graphics\n        [\n            x    442.44\n            y    884.85\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    56\n        label    \"\"\n        graphics\n        [\n            x    1021.92\n            y    5.78\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    57\n        label    \"\"\n        graphics\n        [\n            x    1051.35\n            y    836.80\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    58\n        label    \"\"\n        graphics\n        [\n            x    541.01\n            y    263.91\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    59\n        label    \"\"\n        graphics\n        [\n            x    92.76\n            y    205.58\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    60\n        label    \"\"\n        graphics\n        [\n            x    302.46\n            y    1035.03\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    61\n        label    \"\"\n        graphics\n        [\n            x    862.69\n            y    636.86\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    62\n        label    \"\"\n        graphics\n        [\n            x    309.69\n            y    415.81\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    63\n        label    \"\"\n        graphics\n        [\n            x    760.25\n            y    140.22\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    64\n        label    \"\"\n        graphics\n        [\n            x    48.24\n            y    635.47\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    65\n        label    \"\"\n        graphics\n        [\n            x    857.90\n            y    1046.68\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    66\n        label    \"\"\n        graphics\n        [\n            x    494.07\n            y    952.98\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    67\n        label    \"\"\n        graphics\n        [\n            x    854.54\n            y    106.58\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    68\n        label    \"\"\n        graphics\n        [\n            x    15.71\n            y    463.08\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    69\n        label    \"\"\n        graphics\n        [\n            x    714.70\n            y    539.15\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    70\n        label    \"\"\n        graphics\n        [\n            x    556.89\n            y    447.48\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    71\n        label    \"\"\n        graphics\n        [\n            x    416.08\n            y    80.85\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    72\n        label    \"\"\n        graphics\n        [\n            x    474.09\n            y    967.32\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    73\n        label    \"\"\n        graphics\n        [\n            x    490.24\n            y    760.68\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    74\n        label    \"\"\n        graphics\n        [\n            x    911.08\n            y    808.77\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    75\n        label    \"\"\n        graphics\n        [\n            x    927.52\n            y    880.71\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    76\n        label    \"\"\n        graphics\n        [\n            x    383.38\n            y    565.41\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    77\n        label    \"\"\n        graphics\n        [\n            x    739.20\n            y    284.22\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    78\n        label    \"\"\n        graphics\n        [\n            x    765.09\n            y    84.09\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    79\n        label    \"\"\n        graphics\n        [\n            x    1017.35\n            y    711.38\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    80\n        label    \"\"\n        graphics\n        [\n            x    6.53\n            y    631.10\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    81\n        label    \"\"\n        graphics\n        [\n            x    413.10\n            y    830.91\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    82\n        label    \"\"\n        graphics\n        [\n            x    516.87\n            y    286.95\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    83\n        label    \"\"\n        graphics\n        [\n            x    827.27\n            y    775.48\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    84\n        label    \"\"\n        graphics\n        [\n            x    602.10\n            y    234.21\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    85\n        label    \"\"\n        graphics\n        [\n            x    1021.56\n            y    832.22\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    86\n        label    \"\"\n        graphics\n        [\n            x    612.86\n            y    185.57\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    87\n        label    \"\"\n        graphics\n        [\n            x    191.55\n            y    1017.97\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    88\n        label    \"\"\n        graphics\n        [\n            x    301.95\n            y    950.70\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    89\n        label    \"\"\n        graphics\n        [\n            x    421.85\n            y    393.97\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    90\n        label    \"\"\n        graphics\n        [\n            x    794.62\n            y    314.71\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    91\n        label    \"\"\n        graphics\n        [\n            x    49.35\n            y    925.47\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    92\n        label    \"\"\n        graphics\n        [\n            x    446.33\n            y    234.39\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    93\n        label    \"\"\n        graphics\n        [\n            x    955.87\n            y    147.90\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    94\n        label    \"\"\n        graphics\n        [\n            x    752.88\n            y    253.52\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    95\n        label    \"\"\n        graphics\n        [\n            x    806.59\n            y    1052.97\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    96\n        label    \"\"\n        graphics\n        [\n            x    274.09\n            y    556.28\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    97\n        label    \"\"\n        graphics\n        [\n            x    6.12\n            y    582.22\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    98\n        label    \"\"\n        graphics\n        [\n            x    692.66\n            y    619.02\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    99\n        label    \"\"\n        graphics\n        [\n            x    719.15\n            y    595.99\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    100\n        label    \"\"\n        graphics\n        [\n            x    731.85\n            y    917.41\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    101\n        label    \"\"\n        graphics\n        [\n            x    1023.95\n            y    132.36\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    102\n        label    \"\"\n        graphics\n        [\n            x    937.74\n            y    17.64\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    103\n        label    \"\"\n        graphics\n        [\n            x    277.86\n            y    1029.24\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    104\n        label    \"\"\n        graphics\n        [\n            x    687.71\n            y    913.89\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    105\n        label    \"\"\n        graphics\n        [\n            x    541.34\n            y    865.40\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    106\n        label    \"\"\n        graphics\n        [\n            x    1064.14\n            y    781.57\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    107\n        label    \"\"\n        graphics\n        [\n            x    53.06\n            y    212.82\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    108\n        label    \"\"\n        graphics\n        [\n            x    919.95\n            y    919.55\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    109\n        label    \"\"\n        graphics\n        [\n            x    1019.48\n            y    600.68\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    110\n        label    \"\"\n        graphics\n        [\n            x    107.41\n            y    905.32\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    111\n        label    \"\"\n        graphics\n        [\n            x    742.02\n            y    338.22\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    112\n        label    \"\"\n        graphics\n        [\n            x    468.45\n            y    359.70\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    113\n        label    \"\"\n        graphics\n        [\n            x    201.15\n            y    267.35\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    114\n        label    \"\"\n        graphics\n        [\n            x    310.65\n            y    269.99\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    115\n        label    \"\"\n        graphics\n        [\n            x    157.97\n            y    655.43\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    116\n        label    \"\"\n        graphics\n        [\n            x    443.90\n            y    532.93\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    117\n        label    \"\"\n        graphics\n        [\n            x    760.01\n            y    280.76\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    118\n        label    \"\"\n        graphics\n        [\n            x    1048.20\n            y    623.92\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    119\n        label    \"\"\n        graphics\n        [\n            x    297.70\n            y    944.34\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    120\n        label    \"\"\n        graphics\n        [\n            x    893.53\n            y    297.79\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    121\n        label    \"\"\n        graphics\n        [\n            x    442.89\n            y    125.07\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    122\n        label    \"\"\n        graphics\n        [\n            x    59.57\n            y    588.92\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    123\n        label    \"\"\n        graphics\n        [\n            x    683.27\n            y    841.79\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    124\n        label    \"\"\n        graphics\n        [\n            x    771.14\n            y    270.00\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    125\n        label    \"\"\n        graphics\n        [\n            x    943.92\n            y    601.25\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    126\n        label    \"\"\n        graphics\n        [\n            x    243.64\n            y    29.00\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    127\n        label    \"\"\n        graphics\n        [\n            x    956.59\n            y    664.04\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    128\n        label    \"\"\n        graphics\n        [\n            x    53.06\n            y    226.74\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    129\n        label    \"\"\n        graphics\n        [\n            x    852.03\n            y    885.30\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    130\n        label    \"\"\n        graphics\n        [\n            x    865.48\n            y    1028.06\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    131\n        label    \"\"\n        graphics\n        [\n            x    74.94\n            y    317.68\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    132\n        label    \"\"\n        graphics\n        [\n            x    708.10\n            y    159.93\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    133\n        label    \"\"\n        graphics\n        [\n            x    523.45\n            y    926.24\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    134\n        label    \"\"\n        graphics\n        [\n            x    457.71\n            y    163.50\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    135\n        label    \"\"\n        graphics\n        [\n            x    345.35\n            y    23.12\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    136\n        label    \"\"\n        graphics\n        [\n            x    330.84\n            y    209.69\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    137\n        label    \"\"\n        graphics\n        [\n            x    1042.35\n            y    687.50\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    138\n        label    \"\"\n        graphics\n        [\n            x    1015.72\n            y    29.27\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    139\n        label    \"\"\n        graphics\n        [\n            x    332.93\n            y    954.94\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    edge\n    [\n        source    1\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    1\n        target    53\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    10\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    100\n        target    102\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    100\n        target    29\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    100\n        target    85\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    101\n        target    55\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    102\n        target    39\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    103\n        target    89\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    104\n        target    29\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    104\n        target    94\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    104\n        target    95\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    105\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    106\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    107\n        target    76\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    108\n        target    70\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    108\n        target    76\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    108\n        target    89\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    109\n        target    66\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    11\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    110\n        target    41\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    111\n        target    45\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    112\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    113\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    114\n        target    35\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    115\n        target    104\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    116\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    117\n        target    98\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    118\n        target    116\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    119\n        target    61\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    12\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    120\n        target    109\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    121\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    121\n        target    89\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    122\n        target    57\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    123\n        target    94\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    124\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    124\n        target    87\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    125\n        target    116\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    126\n        target    36\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    126\n        target    95\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    127\n        target    28\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    128\n        target    126\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    128\n        target    32\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    129\n        target    46\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    13\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    130\n        target    72\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    131\n        target    74\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    132\n        target    89\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    133\n        target    110\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    133\n        target    87\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    134\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    134\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    134\n        target    99\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    135\n        target    50\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    136\n        target    48\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    137\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    138\n        target    49\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    139\n        target    92\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    14\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    15\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    16\n        target    118\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    16\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    17\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    18\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    19\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    19\n        target    24\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    19\n        target    39\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    2\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    20\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    21\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    22\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    22\n        target    54\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    23\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    24\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    25\n        target    19\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    25\n        target    87\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    26\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    26\n        target    43\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    27\n        target    19\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    28\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    29\n        target    116\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    29\n        target    126\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    29\n        target    24\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    29\n        target    88\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    3\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    30\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    30\n        target    26\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    31\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    32\n        target    27\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    32\n        target    98\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    33\n        target    115\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    33\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    34\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    34\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    35\n        target    28\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    36\n        target    26\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    37\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    37\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    38\n        target    27\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    39\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    4\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    40\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    40\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    41\n        target    27\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    42\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    43\n        target    42\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    44\n        target    19\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    44\n        target    74\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    45\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    46\n        target    32\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    47\n        target    26\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    48\n        target    37\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    49\n        target    26\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    5\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    5\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    50\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    51\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    52\n        target    41\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    53\n        target    37\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    54\n        target    47\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    55\n        target    39\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    56\n        target    43\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    56\n        target    50\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    57\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    58\n        target    45\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    58\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    59\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    59\n        target    97\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    6\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    60\n        target    19\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    60\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    61\n        target    44\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    62\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    63\n        target    41\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    64\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    65\n        target    52\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    66\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    67\n        target    29\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    68\n        target    63\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    69\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    7\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    70\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    71\n        target    27\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    71\n        target    90\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    72\n        target    56\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    73\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    73\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    74\n        target    128\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    74\n        target    43\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    75\n        target    105\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    75\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    75\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    76\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    77\n        target    73\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    78\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    78\n        target    110\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    78\n        target    123\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    79\n        target    35\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    79\n        target    39\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    8\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    80\n        target    36\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    80\n        target    37\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    81\n        target    58\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    82\n        target    81\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    82\n        target    89\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    83\n        target    28\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    84\n        target    30\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    84\n        target    33\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    85\n        target    83\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    86\n        target    113\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    86\n        target    50\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    87\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    88\n        target    80\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    89\n        target    119\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    89\n        target    75\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    89\n        target    95\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    9\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    90\n        target    42\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    90\n        target    83\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    91\n        target    73\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    92\n        target    90\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    93\n        target    109\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    93\n        target    32\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    93\n        target    69\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    94\n        target    116\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    94\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    94\n        target    40\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    94\n        target    51\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    95\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    96\n        target    33\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    97\n        target    43\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    98\n        target    136\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    98\n        target    42\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    98\n        target    86\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    99\n        target    36\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n]\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v140e196.tglf",
    "content": "0 509.000 607.000 30.000 30.000\n1 230.000 387.000 30.000 30.000\n2 158.000 574.000 30.000 30.000\n3 644.000 1028.000 30.000 30.000\n4 842.000 110.000 30.000 30.000\n5 577.000 274.000 30.000 30.000\n6 678.000 827.000 30.000 30.000\n7 339.000 1054.000 30.000 30.000\n8 625.000 663.000 30.000 30.000\n9 308.000 881.000 30.000 30.000\n10 414.000 134.000 30.000 30.000\n11 836.000 30.000 30.000 30.000\n12 246.000 668.000 30.000 30.000\n13 741.000 816.000 30.000 30.000\n14 682.000 494.000 30.000 30.000\n15 231.000 165.000 30.000 30.000\n16 827.000 751.000 30.000 30.000\n17 122.000 20.000 30.000 30.000\n18 763.000 922.000 30.000 30.000\n19 325.000 440.000 30.000 30.000\n20 740.000 44.000 30.000 30.000\n21 646.000 1055.000 30.000 30.000\n22 768.000 993.000 30.000 30.000\n23 1057.000 536.000 30.000 30.000\n24 353.000 582.000 30.000 30.000\n25 155.000 954.000 30.000 30.000\n26 79.000 994.000 30.000 30.000\n27 572.000 455.000 30.000 30.000\n28 189.000 619.000 30.000 30.000\n29 123.000 71.000 30.000 30.000\n30 213.000 130.000 30.000 30.000\n31 925.000 759.000 30.000 30.000\n32 1030.000 485.000 30.000 30.000\n33 577.000 613.000 30.000 30.000\n34 774.000 859.000 30.000 30.000\n35 174.000 49.000 30.000 30.000\n36 211.000 564.000 30.000 30.000\n37 282.000 227.000 30.000 30.000\n38 582.000 394.000 30.000 30.000\n39 929.000 426.000 30.000 30.000\n40 37.000 307.000 30.000 30.000\n41 525.000 817.000 30.000 30.000\n42 1008.000 854.000 30.000 30.000\n43 637.000 736.000 30.000 30.000\n44 483.000 990.000 30.000 30.000\n45 408.000 481.000 30.000 30.000\n46 578.000 874.000 30.000 30.000\n47 362.000 112.000 30.000 30.000\n48 70.000 564.000 30.000 30.000\n49 584.000 748.000 30.000 30.000\n50 371.000 541.000 30.000 30.000\n51 141.000 964.000 30.000 30.000\n52 642.000 937.000 30.000 30.000\n53 577.000 508.000 30.000 30.000\n54 487.000 200.000 30.000 30.000\n55 442.000 884.000 30.000 30.000\n56 1021.000 5.000 30.000 30.000\n57 1051.000 836.000 30.000 30.000\n58 541.000 263.000 30.000 30.000\n59 92.000 205.000 30.000 30.000\n60 302.000 1035.000 30.000 30.000\n61 862.000 636.000 30.000 30.000\n62 309.000 415.000 30.000 30.000\n63 760.000 140.000 30.000 30.000\n64 48.000 635.000 30.000 30.000\n65 857.000 1046.000 30.000 30.000\n66 494.000 952.000 30.000 30.000\n67 854.000 106.000 30.000 30.000\n68 15.000 463.000 30.000 30.000\n69 714.000 539.000 30.000 30.000\n70 556.000 447.000 30.000 30.000\n71 416.000 80.000 30.000 30.000\n72 474.000 967.000 30.000 30.000\n73 490.000 760.000 30.000 30.000\n74 911.000 808.000 30.000 30.000\n75 927.000 880.000 30.000 30.000\n76 383.000 565.000 30.000 30.000\n77 739.000 284.000 30.000 30.000\n78 765.000 84.000 30.000 30.000\n79 1017.000 711.000 30.000 30.000\n80 6.000 631.000 30.000 30.000\n81 413.000 830.000 30.000 30.000\n82 516.000 286.000 30.000 30.000\n83 827.000 775.000 30.000 30.000\n84 602.000 234.000 30.000 30.000\n85 1021.000 832.000 30.000 30.000\n86 612.000 185.000 30.000 30.000\n87 191.000 1017.000 30.000 30.000\n88 301.000 950.000 30.000 30.000\n89 421.000 393.000 30.000 30.000\n90 794.000 314.000 30.000 30.000\n91 49.000 925.000 30.000 30.000\n92 446.000 234.000 30.000 30.000\n93 955.000 147.000 30.000 30.000\n94 752.000 253.000 30.000 30.000\n95 806.000 1052.000 30.000 30.000\n96 274.000 556.000 30.000 30.000\n97 6.000 582.000 30.000 30.000\n98 692.000 619.000 30.000 30.000\n99 719.000 595.000 30.000 30.000\n100 731.000 917.000 30.000 30.000\n101 1023.000 132.000 30.000 30.000\n102 937.000 17.000 30.000 30.000\n103 277.000 1029.000 30.000 30.000\n104 687.000 913.000 30.000 30.000\n105 541.000 865.000 30.000 30.000\n106 1064.000 781.000 30.000 30.000\n107 53.000 212.000 30.000 30.000\n108 919.000 919.000 30.000 30.000\n109 1019.000 600.000 30.000 30.000\n110 107.000 905.000 30.000 30.000\n111 742.000 338.000 30.000 30.000\n112 468.000 359.000 30.000 30.000\n113 201.000 267.000 30.000 30.000\n114 310.000 269.000 30.000 30.000\n115 157.000 655.000 30.000 30.000\n116 443.000 532.000 30.000 30.000\n117 760.000 280.000 30.000 30.000\n118 1048.000 623.000 30.000 30.000\n119 297.000 944.000 30.000 30.000\n120 893.000 297.000 30.000 30.000\n121 442.000 125.000 30.000 30.000\n122 59.000 588.000 30.000 30.000\n123 683.000 841.000 30.000 30.000\n124 771.000 270.000 30.000 30.000\n125 943.000 601.000 30.000 30.000\n126 243.000 29.000 30.000 30.000\n127 956.000 664.000 30.000 30.000\n128 53.000 226.000 30.000 30.000\n129 852.000 885.000 30.000 30.000\n130 865.000 1028.000 30.000 30.000\n131 74.000 317.000 30.000 30.000\n132 708.000 159.000 30.000 30.000\n133 523.000 926.000 30.000 30.000\n134 457.000 163.000 30.000 30.000\n135 345.000 23.000 30.000 30.000\n136 330.000 209.000 30.000 30.000\n137 1042.000 687.000 30.000 30.000\n138 1015.000 29.000 30.000 30.000\n139 332.000 954.000 30.000 30.000\n#\n53 37\n101 55\n74 128\n36 26\n123 94\n100 85\n65 52\n19 24\n104 29\n10 4\n73 18\n59 97\n83 28\n20 13\n134 4\n29 126\n27 19\n49 26\n105 7\n1 53\n119 61\n115 104\n76 21\n124 22\n54 47\n92 90\n26 0\n32 98\n118 116\n55 39\n58 9\n60 5\n38 27\n136 48\n48 37\n75 105\n3 1\n98 136\n58 45\n94 51\n135 50\n34 14\n85 83\n80 36\n8 3\n46 32\n90 42\n94 40\n106 8\n128 126\n71 27\n64 2\n16 118\n40 2\n19 11\n68 63\n103 89\n13 12\n139 92\n100 102\n107 76\n66 16\n12 4\n73 21\n41 27\n110 41\n56 43\n79 35\n112 11\n26 43\n111 45\n116 5\n88 80\n90 83\n124 87\n127 28\n125 116\n94 116\n25 19\n93 69\n25 87\n134 99\n80 37\n69 16\n98 86\n74 43\n75 3\n9 0\n39 7\n67 29\n22 13\n108 89\n126 36\n82 89\n5 2\n96 33\n31 5\n78 110\n75 23\n93 32\n4 2\n94 21\n42 14\n18 17\n33 23\n104 95\n84 33\n21 17\n132 89\n81 58\n133 110\n130 72\n72 56\n28 9\n126 95\n79 39\n108 76\n109 66\n87 3\n37 23\n128 32\n52 41\n78 11\n29 116\n2 1\n108 70\n22 54\n121 2\n29 88\n78 123\n44 74\n23 9\n35 28\n120 109\n122 57\n86 50\n99 36\n117 98\n114 35\n14 13\n7 2\n86 113\n45 10\n134 6\n113 8\n44 19\n50 16\n71 90\n100 29\n70 7\n11 1\n60 19\n30 13\n82 81\n15 2\n34 6\n1 0\n89 119\n77 73\n133 87\n89 95\n97 43\n121 89\n138 49\n62 21\n29 24\n5 12\n51 0\n89 75\n59 10\n37 7\n131 74\n17 16\n43 42\n137 22\n104 94\n24 7\n129 46\n56 50\n33 115\n47 26\n19 39\n30 26\n91 73\n16 9\n84 30\n57 7\n93 109\n40 9\n32 27\n61 44\n98 42\n63 41\n95 10\n102 39\n6 1\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v140e210.gml",
    "content": "graph\n[\n    node\n    [\n        id    0\n        label    \"\"\n        graphics\n        [\n            x    221.45\n            y    649.82\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    1\n        label    \"\"\n        graphics\n        [\n            x    1040.74\n            y    22.85\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    2\n        label    \"\"\n        graphics\n        [\n            x    819.77\n            y    379.28\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    3\n        label    \"\"\n        graphics\n        [\n            x    213.47\n            y    245.52\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    4\n        label    \"\"\n        graphics\n        [\n            x    903.04\n            y    301.02\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    5\n        label    \"\"\n        graphics\n        [\n            x    509.52\n            y    80.76\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    6\n        label    \"\"\n        graphics\n        [\n            x    414.05\n            y    322.32\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    7\n        label    \"\"\n        graphics\n        [\n            x    637.21\n            y    554.77\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    8\n        label    \"\"\n        graphics\n        [\n            x    585.74\n            y    880.09\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    9\n        label    \"\"\n        graphics\n        [\n            x    451.54\n            y    881.01\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    10\n        label    \"\"\n        graphics\n        [\n            x    699.05\n            y    574.93\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    11\n        label    \"\"\n        graphics\n        [\n            x    143.89\n            y    61.02\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    12\n        label    \"\"\n        graphics\n        [\n            x    975.05\n            y    851.73\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    13\n        label    \"\"\n        graphics\n        [\n            x    1031.78\n            y    925.80\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    14\n        label    \"\"\n        graphics\n        [\n            x    281.87\n            y    486.71\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    15\n        label    \"\"\n        graphics\n        [\n            x    351.50\n            y    789.91\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    16\n        label    \"\"\n        graphics\n        [\n            x    430.31\n            y    161.08\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    17\n        label    \"\"\n        graphics\n        [\n            x    457.25\n            y    992.87\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    18\n        label    \"\"\n        graphics\n        [\n            x    44.97\n            y    335.41\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    19\n        label    \"\"\n        graphics\n        [\n            x    122.29\n            y    339.93\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    20\n        label    \"\"\n        graphics\n        [\n            x    817.01\n            y    150.32\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    21\n        label    \"\"\n        graphics\n        [\n            x    286.21\n            y    351.34\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    22\n        label    \"\"\n        graphics\n        [\n            x    542.39\n            y    639.38\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    23\n        label    \"\"\n        graphics\n        [\n            x    620.09\n            y    305.30\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    24\n        label    \"\"\n        graphics\n        [\n            x    258.11\n            y    1036.26\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    25\n        label    \"\"\n        graphics\n        [\n            x    459.26\n            y    289.19\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    26\n        label    \"\"\n        graphics\n        [\n            x    353.61\n            y    566.12\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    27\n        label    \"\"\n        graphics\n        [\n            x    1046.96\n            y    1036.66\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    28\n        label    \"\"\n        graphics\n        [\n            x    450.98\n            y    891.57\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    29\n        label    \"\"\n        graphics\n        [\n            x    180.35\n            y    387.74\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    30\n        label    \"\"\n        graphics\n        [\n            x    512.51\n            y    229.42\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    31\n        label    \"\"\n        graphics\n        [\n            x    225.59\n            y    464.73\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    32\n        label    \"\"\n        graphics\n        [\n            x    982.05\n            y    1010.68\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    33\n        label    \"\"\n        graphics\n        [\n            x    82.11\n            y    605.44\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    34\n        label    \"\"\n        graphics\n        [\n            x    48.90\n            y    1002.62\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    35\n        label    \"\"\n        graphics\n        [\n            x    443.60\n            y    538.16\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    36\n        label    \"\"\n        graphics\n        [\n            x    636.92\n            y    942.31\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    37\n        label    \"\"\n        graphics\n        [\n            x    383.14\n            y    636.70\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    38\n        label    \"\"\n        graphics\n        [\n            x    394.98\n            y    1053.33\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    39\n        label    \"\"\n        graphics\n        [\n            x    557.41\n            y    668.88\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    40\n        label    \"\"\n        graphics\n        [\n            x    393.85\n            y    836.35\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    41\n        label    \"\"\n        graphics\n        [\n            x    52.58\n            y    640.80\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    42\n        label    \"\"\n        graphics\n        [\n            x    643.33\n            y    200.31\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    43\n        label    \"\"\n        graphics\n        [\n            x    849.07\n            y    159.58\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    44\n        label    \"\"\n        graphics\n        [\n            x    582.89\n            y    108.18\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    45\n        label    \"\"\n        graphics\n        [\n            x    549.78\n            y    610.49\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    46\n        label    \"\"\n        graphics\n        [\n            x    965.03\n            y    365.69\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    47\n        label    \"\"\n        graphics\n        [\n            x    327.50\n            y    47.79\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    48\n        label    \"\"\n        graphics\n        [\n            x    412.34\n            y    1030.70\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    49\n        label    \"\"\n        graphics\n        [\n            x    981.12\n            y    952.59\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    50\n        label    \"\"\n        graphics\n        [\n            x    796.08\n            y    70.56\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    51\n        label    \"\"\n        graphics\n        [\n            x    992.89\n            y    591.82\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    52\n        label    \"\"\n        graphics\n        [\n            x    474.86\n            y    682.48\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    53\n        label    \"\"\n        graphics\n        [\n            x    443.20\n            y    11.14\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    54\n        label    \"\"\n        graphics\n        [\n            x    466.84\n            y    429.79\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    55\n        label    \"\"\n        graphics\n        [\n            x    788.80\n            y    433.84\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    56\n        label    \"\"\n        graphics\n        [\n            x    23.29\n            y    941.07\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    57\n        label    \"\"\n        graphics\n        [\n            x    605.58\n            y    302.71\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    58\n        label    \"\"\n        graphics\n        [\n            x    1026.37\n            y    266.43\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    59\n        label    \"\"\n        graphics\n        [\n            x    212.20\n            y    534.03\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    60\n        label    \"\"\n        graphics\n        [\n            x    330.65\n            y    211.50\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    61\n        label    \"\"\n        graphics\n        [\n            x    855.69\n            y    429.32\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    62\n        label    \"\"\n        graphics\n        [\n            x    779.73\n            y    717.84\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    63\n        label    \"\"\n        graphics\n        [\n            x    281.34\n            y    608.63\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    64\n        label    \"\"\n        graphics\n        [\n            x    454.61\n            y    160.52\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    65\n        label    \"\"\n        graphics\n        [\n            x    394.55\n            y    578.70\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    66\n        label    \"\"\n        graphics\n        [\n            x    911.19\n            y    313.39\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    67\n        label    \"\"\n        graphics\n        [\n            x    215.00\n            y    557.17\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    68\n        label    \"\"\n        graphics\n        [\n            x    457.69\n            y    324.19\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    69\n        label    \"\"\n        graphics\n        [\n            x    966.25\n            y    816.74\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    70\n        label    \"\"\n        graphics\n        [\n            x    572.89\n            y    397.59\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    71\n        label    \"\"\n        graphics\n        [\n            x    263.86\n            y    735.42\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    72\n        label    \"\"\n        graphics\n        [\n            x    716.49\n            y    783.57\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    73\n        label    \"\"\n        graphics\n        [\n            x    583.73\n            y    281.20\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    74\n        label    \"\"\n        graphics\n        [\n            x    221.41\n            y    956.20\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    75\n        label    \"\"\n        graphics\n        [\n            x    384.59\n            y    417.78\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    76\n        label    \"\"\n        graphics\n        [\n            x    175.86\n            y    350.08\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    77\n        label    \"\"\n        graphics\n        [\n            x    917.05\n            y    968.27\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    78\n        label    \"\"\n        graphics\n        [\n            x    364.78\n            y    35.64\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    79\n        label    \"\"\n        graphics\n        [\n            x    334.59\n            y    534.94\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    80\n        label    \"\"\n        graphics\n        [\n            x    296.37\n            y    297.00\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    81\n        label    \"\"\n        graphics\n        [\n            x    586.09\n            y    979.93\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    82\n        label    \"\"\n        graphics\n        [\n            x    398.83\n            y    328.71\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    83\n        label    \"\"\n        graphics\n        [\n            x    552.65\n            y    621.62\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    84\n        label    \"\"\n        graphics\n        [\n            x    117.36\n            y    663.87\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    85\n        label    \"\"\n        graphics\n        [\n            x    285.65\n            y    108.90\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    86\n        label    \"\"\n        graphics\n        [\n            x    822.38\n            y    465.91\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    87\n        label    \"\"\n        graphics\n        [\n            x    1036.56\n            y    586.59\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    88\n        label    \"\"\n        graphics\n        [\n            x    740.67\n            y    178.79\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    89\n        label    \"\"\n        graphics\n        [\n            x    220.66\n            y    638.86\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    90\n        label    \"\"\n        graphics\n        [\n            x    382.30\n            y    798.94\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    91\n        label    \"\"\n        graphics\n        [\n            x    624.53\n            y    403.71\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    92\n        label    \"\"\n        graphics\n        [\n            x    931.48\n            y    622.33\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    93\n        label    \"\"\n        graphics\n        [\n            x    141.83\n            y    902.53\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    94\n        label    \"\"\n        graphics\n        [\n            x    118.49\n            y    780.34\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    95\n        label    \"\"\n        graphics\n        [\n            x    66.00\n            y    475.06\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    96\n        label    \"\"\n        graphics\n        [\n            x    44.44\n            y    966.91\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    97\n        label    \"\"\n        graphics\n        [\n            x    328.08\n            y    1051.08\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    98\n        label    \"\"\n        graphics\n        [\n            x    586.85\n            y    911.96\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    99\n        label    \"\"\n        graphics\n        [\n            x    160.38\n            y    605.88\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    100\n        label    \"\"\n        graphics\n        [\n            x    337.40\n            y    576.10\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    101\n        label    \"\"\n        graphics\n        [\n            x    381.31\n            y    676.55\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    102\n        label    \"\"\n        graphics\n        [\n            x    797.27\n            y    804.16\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    103\n        label    \"\"\n        graphics\n        [\n            x    903.42\n            y    177.69\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    104\n        label    \"\"\n        graphics\n        [\n            x    82.23\n            y    330.88\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    105\n        label    \"\"\n        graphics\n        [\n            x    379.69\n            y    741.88\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    106\n        label    \"\"\n        graphics\n        [\n            x    353.53\n            y    437.15\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    107\n        label    \"\"\n        graphics\n        [\n            x    715.10\n            y    944.36\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    108\n        label    \"\"\n        graphics\n        [\n            x    938.23\n            y    803.83\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    109\n        label    \"\"\n        graphics\n        [\n            x    377.81\n            y    413.47\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    110\n        label    \"\"\n        graphics\n        [\n            x    887.82\n            y    872.98\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    111\n        label    \"\"\n        graphics\n        [\n            x    381.35\n            y    374.84\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    112\n        label    \"\"\n        graphics\n        [\n            x    939.83\n            y    811.17\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    113\n        label    \"\"\n        graphics\n        [\n            x    298.13\n            y    870.76\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    114\n        label    \"\"\n        graphics\n        [\n            x    552.91\n            y    1049.23\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    115\n        label    \"\"\n        graphics\n        [\n            x    574.58\n            y    287.20\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    116\n        label    \"\"\n        graphics\n        [\n            x    994.58\n            y    755.00\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    117\n        label    \"\"\n        graphics\n        [\n            x    660.63\n            y    1015.60\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    118\n        label    \"\"\n        graphics\n        [\n            x    619.13\n            y    674.48\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    119\n        label    \"\"\n        graphics\n        [\n            x    447.89\n            y    348.44\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    120\n        label    \"\"\n        graphics\n        [\n            x    626.50\n            y    652.61\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    121\n        label    \"\"\n        graphics\n        [\n            x    302.36\n            y    834.75\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    122\n        label    \"\"\n        graphics\n        [\n            x    1043.20\n            y    782.84\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    123\n        label    \"\"\n        graphics\n        [\n            x    423.67\n            y    727.79\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    124\n        label    \"\"\n        graphics\n        [\n            x    936.12\n            y    441.39\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    125\n        label    \"\"\n        graphics\n        [\n            x    472.07\n            y    829.74\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    126\n        label    \"\"\n        graphics\n        [\n            x    503.76\n            y    781.80\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    127\n        label    \"\"\n        graphics\n        [\n            x    750.11\n            y    864.49\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    128\n        label    \"\"\n        graphics\n        [\n            x    54.44\n            y    770.61\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    129\n        label    \"\"\n        graphics\n        [\n            x    436.50\n            y    1028.80\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    130\n        label    \"\"\n        graphics\n        [\n            x    1051.86\n            y    280.02\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    131\n        label    \"\"\n        graphics\n        [\n            x    579.27\n            y    656.36\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    132\n        label    \"\"\n        graphics\n        [\n            x    830.23\n            y    713.09\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    133\n        label    \"\"\n        graphics\n        [\n            x    1017.82\n            y    322.87\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    134\n        label    \"\"\n        graphics\n        [\n            x    455.86\n            y    1018.16\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    135\n        label    \"\"\n        graphics\n        [\n            x    315.52\n            y    1030.41\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    136\n        label    \"\"\n        graphics\n        [\n            x    747.00\n            y    199.39\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    137\n        label    \"\"\n        graphics\n        [\n            x    884.45\n            y    673.58\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    138\n        label    \"\"\n        graphics\n        [\n            x    911.88\n            y    685.00\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    139\n        label    \"\"\n        graphics\n        [\n            x    427.92\n            y    590.00\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    edge\n    [\n        source    1\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    10\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    10\n        target    72\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    10\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    100\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    101\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    101\n        target    53\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    102\n        target    42\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    103\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    104\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    104\n        target    34\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    105\n        target    123\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    105\n        target    67\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    106\n        target    133\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    106\n        target    71\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    106\n        target    75\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    107\n        target    33\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    107\n        target    82\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    108\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    109\n        target    98\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    11\n        target    38\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    11\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    110\n        target    76\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    111\n        target    108\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    112\n        target    43\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    113\n        target    81\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    114\n        target    79\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    115\n        target    113\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    115\n        target    49\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    115\n        target    79\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    116\n        target    53\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    116\n        target    67\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    117\n        target    38\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    118\n        target    104\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    118\n        target    111\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    118\n        target    92\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    119\n        target    48\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    119\n        target    71\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    12\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    12\n        target    99\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    120\n        target    103\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    120\n        target    44\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    120\n        target    57\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    121\n        target    20\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    121\n        target    77\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    122\n        target    49\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    123\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    124\n        target    82\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    125\n        target    109\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    126\n        target    74\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    127\n        target    115\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    127\n        target    60\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    128\n        target    25\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    128\n        target    26\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    129\n        target    127\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    13\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    130\n        target    102\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    131\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    131\n        target    44\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    132\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    132\n        target    27\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    133\n        target    119\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    133\n        target    37\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    134\n        target    101\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    134\n        target    29\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    134\n        target    87\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    135\n        target    72\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    136\n        target    75\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    137\n        target    117\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    137\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    137\n        target    34\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    138\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    139\n        target    111\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    14\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    14\n        target    85\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    15\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    15\n        target    57\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    15\n        target    95\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    16\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    17\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    17\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    18\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    19\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    2\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    2\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    2\n        target    62\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    2\n        target    80\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    20\n        target    125\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    20\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    21\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    22\n        target    19\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    22\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    23\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    24\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    25\n        target    118\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    25\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    26\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    27\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    27\n        target    19\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    28\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    29\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    3\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    30\n        target    20\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    31\n        target    126\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    31\n        target    20\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    32\n        target    111\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    32\n        target    30\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    33\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    33\n        target    30\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    34\n        target    31\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    35\n        target    31\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    36\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    37\n        target    29\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    38\n        target    34\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    38\n        target    56\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    39\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    4\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    4\n        target    56\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    40\n        target    24\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    41\n        target    20\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    42\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    42\n        target    50\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    43\n        target    34\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    44\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    45\n        target    34\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    46\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    47\n        target    118\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    47\n        target    43\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    48\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    49\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    49\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    5\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    5\n        target    96\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    50\n        target    26\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    51\n        target    29\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    52\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    52\n        target    40\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    53\n        target    20\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    54\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    55\n        target    136\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    55\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    55\n        target    33\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    56\n        target    32\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    57\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    58\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    59\n        target    32\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    59\n        target    87\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    6\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    60\n        target    19\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    60\n        target    24\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    61\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    61\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    62\n        target    60\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    63\n        target    135\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    63\n        target    40\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    64\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    65\n        target    25\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    66\n        target    32\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    67\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    68\n        target    39\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    68\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    69\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    7\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    70\n        target    46\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    71\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    72\n        target    63\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    72\n        target    67\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    73\n        target    63\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    74\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    75\n        target    70\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    75\n        target    77\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    76\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    77\n        target    123\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    77\n        target    66\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    78\n        target    36\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    79\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    8\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    8\n        target    81\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    80\n        target    50\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    80\n        target    72\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    81\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    81\n        target    93\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    82\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    82\n        target    42\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    83\n        target    70\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    84\n        target    102\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    84\n        target    75\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    85\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    86\n        target    79\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    87\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    87\n        target    98\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    88\n        target    129\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    88\n        target    76\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    89\n        target    122\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    89\n        target    79\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    9\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    9\n        target    131\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    9\n        target    35\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    90\n        target    63\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    91\n        target    86\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    92\n        target    71\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    93\n        target    90\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    94\n        target    35\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    94\n        target    45\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    94\n        target    86\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    95\n        target    41\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    96\n        target    58\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    97\n        target    58\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    98\n        target    52\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    99\n        target    93\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n]\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v140e210.tglf",
    "content": "0 221.000 649.000 30.000 30.000\n1 1040.000 22.000 30.000 30.000\n2 819.000 379.000 30.000 30.000\n3 213.000 245.000 30.000 30.000\n4 903.000 301.000 30.000 30.000\n5 509.000 80.000 30.000 30.000\n6 414.000 322.000 30.000 30.000\n7 637.000 554.000 30.000 30.000\n8 585.000 880.000 30.000 30.000\n9 451.000 881.000 30.000 30.000\n10 699.000 574.000 30.000 30.000\n11 143.000 61.000 30.000 30.000\n12 975.000 851.000 30.000 30.000\n13 1031.000 925.000 30.000 30.000\n14 281.000 486.000 30.000 30.000\n15 351.000 789.000 30.000 30.000\n16 430.000 161.000 30.000 30.000\n17 457.000 992.000 30.000 30.000\n18 44.000 335.000 30.000 30.000\n19 122.000 339.000 30.000 30.000\n20 817.000 150.000 30.000 30.000\n21 286.000 351.000 30.000 30.000\n22 542.000 639.000 30.000 30.000\n23 620.000 305.000 30.000 30.000\n24 258.000 1036.000 30.000 30.000\n25 459.000 289.000 30.000 30.000\n26 353.000 566.000 30.000 30.000\n27 1046.000 1036.000 30.000 30.000\n28 450.000 891.000 30.000 30.000\n29 180.000 387.000 30.000 30.000\n30 512.000 229.000 30.000 30.000\n31 225.000 464.000 30.000 30.000\n32 982.000 1010.000 30.000 30.000\n33 82.000 605.000 30.000 30.000\n34 48.000 1002.000 30.000 30.000\n35 443.000 538.000 30.000 30.000\n36 636.000 942.000 30.000 30.000\n37 383.000 636.000 30.000 30.000\n38 394.000 1053.000 30.000 30.000\n39 557.000 668.000 30.000 30.000\n40 393.000 836.000 30.000 30.000\n41 52.000 640.000 30.000 30.000\n42 643.000 200.000 30.000 30.000\n43 849.000 159.000 30.000 30.000\n44 582.000 108.000 30.000 30.000\n45 549.000 610.000 30.000 30.000\n46 965.000 365.000 30.000 30.000\n47 327.000 47.000 30.000 30.000\n48 412.000 1030.000 30.000 30.000\n49 981.000 952.000 30.000 30.000\n50 796.000 70.000 30.000 30.000\n51 992.000 591.000 30.000 30.000\n52 474.000 682.000 30.000 30.000\n53 443.000 11.000 30.000 30.000\n54 466.000 429.000 30.000 30.000\n55 788.000 433.000 30.000 30.000\n56 23.000 941.000 30.000 30.000\n57 605.000 302.000 30.000 30.000\n58 1026.000 266.000 30.000 30.000\n59 212.000 534.000 30.000 30.000\n60 330.000 211.000 30.000 30.000\n61 855.000 429.000 30.000 30.000\n62 779.000 717.000 30.000 30.000\n63 281.000 608.000 30.000 30.000\n64 454.000 160.000 30.000 30.000\n65 394.000 578.000 30.000 30.000\n66 911.000 313.000 30.000 30.000\n67 215.000 557.000 30.000 30.000\n68 457.000 324.000 30.000 30.000\n69 966.000 816.000 30.000 30.000\n70 572.000 397.000 30.000 30.000\n71 263.000 735.000 30.000 30.000\n72 716.000 783.000 30.000 30.000\n73 583.000 281.000 30.000 30.000\n74 221.000 956.000 30.000 30.000\n75 384.000 417.000 30.000 30.000\n76 175.000 350.000 30.000 30.000\n77 917.000 968.000 30.000 30.000\n78 364.000 35.000 30.000 30.000\n79 334.000 534.000 30.000 30.000\n80 296.000 297.000 30.000 30.000\n81 586.000 979.000 30.000 30.000\n82 398.000 328.000 30.000 30.000\n83 552.000 621.000 30.000 30.000\n84 117.000 663.000 30.000 30.000\n85 285.000 108.000 30.000 30.000\n86 822.000 465.000 30.000 30.000\n87 1036.000 586.000 30.000 30.000\n88 740.000 178.000 30.000 30.000\n89 220.000 638.000 30.000 30.000\n90 382.000 798.000 30.000 30.000\n91 624.000 403.000 30.000 30.000\n92 931.000 622.000 30.000 30.000\n93 141.000 902.000 30.000 30.000\n94 118.000 780.000 30.000 30.000\n95 66.000 475.000 30.000 30.000\n96 44.000 966.000 30.000 30.000\n97 328.000 1051.000 30.000 30.000\n98 586.000 911.000 30.000 30.000\n99 160.000 605.000 30.000 30.000\n100 337.000 576.000 30.000 30.000\n101 381.000 676.000 30.000 30.000\n102 797.000 804.000 30.000 30.000\n103 903.000 177.000 30.000 30.000\n104 82.000 330.000 30.000 30.000\n105 379.000 741.000 30.000 30.000\n106 353.000 437.000 30.000 30.000\n107 715.000 944.000 30.000 30.000\n108 938.000 803.000 30.000 30.000\n109 377.000 413.000 30.000 30.000\n110 887.000 872.000 30.000 30.000\n111 381.000 374.000 30.000 30.000\n112 939.000 811.000 30.000 30.000\n113 298.000 870.000 30.000 30.000\n114 552.000 1049.000 30.000 30.000\n115 574.000 287.000 30.000 30.000\n116 994.000 755.000 30.000 30.000\n117 660.000 1015.000 30.000 30.000\n118 619.000 674.000 30.000 30.000\n119 447.000 348.000 30.000 30.000\n120 626.000 652.000 30.000 30.000\n121 302.000 834.000 30.000 30.000\n122 1043.000 782.000 30.000 30.000\n123 423.000 727.000 30.000 30.000\n124 936.000 441.000 30.000 30.000\n125 472.000 829.000 30.000 30.000\n126 503.000 781.000 30.000 30.000\n127 750.000 864.000 30.000 30.000\n128 54.000 770.000 30.000 30.000\n129 436.000 1028.000 30.000 30.000\n130 1051.000 280.000 30.000 30.000\n131 579.000 656.000 30.000 30.000\n132 830.000 713.000 30.000 30.000\n133 1017.000 322.000 30.000 30.000\n134 455.000 1018.000 30.000 30.000\n135 315.000 1030.000 30.000 30.000\n136 747.000 199.000 30.000 30.000\n137 884.000 673.000 30.000 30.000\n138 911.000 685.000 30.000 30.000\n139 427.000 590.000 30.000 30.000\n#\n97 58\n98 52\n134 87\n15 95\n109 98\n106 75\n93 90\n17 15\n49 10\n117 38\n101 1\n71 0\n86 79\n3 0\n81 93\n26 16\n104 34\n112 43\n20 8\n116 67\n44 22\n110 76\n22 19\n67 3\n82 2\n89 79\n11 38\n88 129\n94 45\n47 118\n100 16\n134 29\n41 20\n22 5\n31 20\n9 0\n42 2\n40 24\n70 46\n85 2\n62 60\n121 77\n61 3\n23 1\n77 123\n106 133\n53 20\n37 29\n136 75\n104 12\n38 34\n2 80\n135 72\n106 71\n27 19\n60 24\n137 22\n33 10\n18 9\n80 50\n19 18\n123 6\n114 79\n9 131\n4 1\n116 53\n80 72\n63 135\n131 17\n95 41\n56 32\n103 14\n119 48\n122 49\n15 57\n34 31\n128 25\n120 44\n25 118\n68 39\n10 14\n47 43\n4 56\n63 40\n52 23\n17 12\n14 13\n120 103\n125 109\n2 62\n111 108\n94 86\n54 9\n65 25\n50 26\n88 76\n130 102\n12 99\n131 44\n46 3\n127 115\n52 40\n127 60\n6 4\n137 34\n126 74\n87 98\n96 58\n90 63\n118 111\n87 12\n132 14\n42 50\n68 9\n132 27\n33 30\n84 102\n77 66\n32 30\n61 8\n16 15\n64 0\n29 14\n12 3\n21 5\n107 82\n55 14\n38 56\n55 33\n36 4\n73 63\n57 7\n89 122\n76 3\n45 34\n13 3\n84 75\n8 0\n43 34\n74 15\n133 119\n7 6\n118 92\n55 136\n113 81\n5 96\n10 72\n49 9\n35 31\n2 1\n121 20\n75 70\n59 32\n14 85\n120 57\n59 87\n78 36\n129 127\n24 7\n108 13\n75 77\n107 33\n128 26\n1 0\n69 10\n81 0\n2 13\n20 125\n82 42\n137 117\n28 10\n9 35\n11 8\n138 2\n5 1\n72 63\n8 81\n99 93\n118 104\n105 67\n139 111\n15 14\n51 29\n27 11\n105 123\n134 101\n119 71\n94 35\n115 49\n25 14\n124 82\n58 9\n48 7\n31 126\n101 53\n79 3\n60 19\n32 111\n72 67\n92 71\n30 20\n91 86\n115 113\n102 42\n115 79\n133 37\n39 0\n66 32\n10 9\n83 70\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v150e150.gml",
    "content": "graph\n[\n    node\n    [\n        id    0\n        label    \"\"\n        graphics\n        [\n            x    750.21\n            y    1040.51\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    1\n        label    \"\"\n        graphics\n        [\n            x    85.46\n            y    825.43\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    2\n        label    \"\"\n        graphics\n        [\n            x    924.11\n            y    645.00\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    3\n        label    \"\"\n        graphics\n        [\n            x    340.18\n            y    142.90\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    4\n        label    \"\"\n        graphics\n        [\n            x    692.45\n            y    937.55\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    5\n        label    \"\"\n        graphics\n        [\n            x    300.79\n            y    789.92\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    6\n        label    \"\"\n        graphics\n        [\n            x    410.12\n            y    413.88\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    7\n        label    \"\"\n        graphics\n        [\n            x    721.28\n            y    703.90\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    8\n        label    \"\"\n        graphics\n        [\n            x    85.42\n            y    203.87\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    9\n        label    \"\"\n        graphics\n        [\n            x    406.25\n            y    1002.50\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    10\n        label    \"\"\n        graphics\n        [\n            x    972.04\n            y    334.66\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    11\n        label    \"\"\n        graphics\n        [\n            x    871.96\n            y    1034.94\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    12\n        label    \"\"\n        graphics\n        [\n            x    744.41\n            y    1045.84\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    13\n        label    \"\"\n        graphics\n        [\n            x    676.51\n            y    1076.17\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    14\n        label    \"\"\n        graphics\n        [\n            x    425.64\n            y    685.93\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    15\n        label    \"\"\n        graphics\n        [\n            x    520.48\n            y    11.04\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    16\n        label    \"\"\n        graphics\n        [\n            x    947.34\n            y    500.03\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    17\n        label    \"\"\n        graphics\n        [\n            x    902.12\n            y    154.95\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    18\n        label    \"\"\n        graphics\n        [\n            x    795.56\n            y    25.88\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    19\n        label    \"\"\n        graphics\n        [\n            x    559.36\n            y    356.37\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    20\n        label    \"\"\n        graphics\n        [\n            x    289.97\n            y    281.58\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    21\n        label    \"\"\n        graphics\n        [\n            x    214.16\n            y    145.02\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    22\n        label    \"\"\n        graphics\n        [\n            x    332.17\n            y    535.18\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    23\n        label    \"\"\n        graphics\n        [\n            x    449.00\n            y    1074.13\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    24\n        label    \"\"\n        graphics\n        [\n            x    1093.68\n            y    317.56\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    25\n        label    \"\"\n        graphics\n        [\n            x    431.96\n            y    930.62\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    26\n        label    \"\"\n        graphics\n        [\n            x    833.70\n            y    177.42\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    27\n        label    \"\"\n        graphics\n        [\n            x    733.31\n            y    87.36\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    28\n        label    \"\"\n        graphics\n        [\n            x    640.70\n            y    1099.05\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    29\n        label    \"\"\n        graphics\n        [\n            x    663.54\n            y    306.47\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    30\n        label    \"\"\n        graphics\n        [\n            x    820.84\n            y    861.19\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    31\n        label    \"\"\n        graphics\n        [\n            x    42.98\n            y    473.46\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    32\n        label    \"\"\n        graphics\n        [\n            x    57.86\n            y    1025.53\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    33\n        label    \"\"\n        graphics\n        [\n            x    325.00\n            y    905.10\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    34\n        label    \"\"\n        graphics\n        [\n            x    219.90\n            y    410.96\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    35\n        label    \"\"\n        graphics\n        [\n            x    197.99\n            y    1038.82\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    36\n        label    \"\"\n        graphics\n        [\n            x    724.30\n            y    507.64\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    37\n        label    \"\"\n        graphics\n        [\n            x    1082.94\n            y    403.50\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    38\n        label    \"\"\n        graphics\n        [\n            x    607.14\n            y    33.39\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    39\n        label    \"\"\n        graphics\n        [\n            x    829.68\n            y    617.54\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    40\n        label    \"\"\n        graphics\n        [\n            x    199.50\n            y    761.60\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    41\n        label    \"\"\n        graphics\n        [\n            x    294.17\n            y    234.27\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    42\n        label    \"\"\n        graphics\n        [\n            x    26.42\n            y    420.68\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    43\n        label    \"\"\n        graphics\n        [\n            x    319.41\n            y    750.90\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    44\n        label    \"\"\n        graphics\n        [\n            x    278.08\n            y    798.05\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    45\n        label    \"\"\n        graphics\n        [\n            x    108.58\n            y    1074.40\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    46\n        label    \"\"\n        graphics\n        [\n            x    725.11\n            y    771.56\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    47\n        label    \"\"\n        graphics\n        [\n            x    71.07\n            y    874.72\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    48\n        label    \"\"\n        graphics\n        [\n            x    547.77\n            y    618.41\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    49\n        label    \"\"\n        graphics\n        [\n            x    905.34\n            y    876.60\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    50\n        label    \"\"\n        graphics\n        [\n            x    727.50\n            y    1071.96\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    51\n        label    \"\"\n        graphics\n        [\n            x    449.86\n            y    391.72\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    52\n        label    \"\"\n        graphics\n        [\n            x    147.08\n            y    713.70\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    53\n        label    \"\"\n        graphics\n        [\n            x    814.76\n            y    455.10\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    54\n        label    \"\"\n        graphics\n        [\n            x    38.30\n            y    896.91\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    55\n        label    \"\"\n        graphics\n        [\n            x    980.85\n            y    191.31\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    56\n        label    \"\"\n        graphics\n        [\n            x    858.22\n            y    721.93\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    57\n        label    \"\"\n        graphics\n        [\n            x    87.56\n            y    197.27\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    58\n        label    \"\"\n        graphics\n        [\n            x    1051.10\n            y    699.88\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    59\n        label    \"\"\n        graphics\n        [\n            x    931.50\n            y    646.12\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    60\n        label    \"\"\n        graphics\n        [\n            x    525.58\n            y    680.08\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    61\n        label    \"\"\n        graphics\n        [\n            x    289.48\n            y    518.35\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    62\n        label    \"\"\n        graphics\n        [\n            x    710.05\n            y    650.80\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    63\n        label    \"\"\n        graphics\n        [\n            x    811.10\n            y    413.19\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    64\n        label    \"\"\n        graphics\n        [\n            x    474.70\n            y    361.29\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    65\n        label    \"\"\n        graphics\n        [\n            x    176.31\n            y    571.19\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    66\n        label    \"\"\n        graphics\n        [\n            x    824.07\n            y    13.03\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    67\n        label    \"\"\n        graphics\n        [\n            x    462.12\n            y    746.18\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    68\n        label    \"\"\n        graphics\n        [\n            x    323.38\n            y    419.92\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    69\n        label    \"\"\n        graphics\n        [\n            x    840.93\n            y    525.96\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    70\n        label    \"\"\n        graphics\n        [\n            x    149.81\n            y    0.66\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    71\n        label    \"\"\n        graphics\n        [\n            x    590.34\n            y    902.24\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    72\n        label    \"\"\n        graphics\n        [\n            x    958.41\n            y    138.73\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    73\n        label    \"\"\n        graphics\n        [\n            x    816.40\n            y    1015.43\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    74\n        label    \"\"\n        graphics\n        [\n            x    214.86\n            y    945.27\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    75\n        label    \"\"\n        graphics\n        [\n            x    646.74\n            y    153.64\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    76\n        label    \"\"\n        graphics\n        [\n            x    287.59\n            y    970.54\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    77\n        label    \"\"\n        graphics\n        [\n            x    127.24\n            y    158.33\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    78\n        label    \"\"\n        graphics\n        [\n            x    473.26\n            y    697.34\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    79\n        label    \"\"\n        graphics\n        [\n            x    866.63\n            y    393.58\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    80\n        label    \"\"\n        graphics\n        [\n            x    737.80\n            y    33.79\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    81\n        label    \"\"\n        graphics\n        [\n            x    778.03\n            y    915.57\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    82\n        label    \"\"\n        graphics\n        [\n            x    271.93\n            y    985.99\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    83\n        label    \"\"\n        graphics\n        [\n            x    672.44\n            y    1.82\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    84\n        label    \"\"\n        graphics\n        [\n            x    846.87\n            y    901.49\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    85\n        label    \"\"\n        graphics\n        [\n            x    134.82\n            y    418.51\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    86\n        label    \"\"\n        graphics\n        [\n            x    966.07\n            y    1066.69\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    87\n        label    \"\"\n        graphics\n        [\n            x    159.63\n            y    837.75\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    88\n        label    \"\"\n        graphics\n        [\n            x    103.67\n            y    875.64\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    89\n        label    \"\"\n        graphics\n        [\n            x    931.61\n            y    622.97\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    90\n        label    \"\"\n        graphics\n        [\n            x    634.87\n            y    313.53\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    91\n        label    \"\"\n        graphics\n        [\n            x    58.88\n            y    313.83\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    92\n        label    \"\"\n        graphics\n        [\n            x    645.72\n            y    187.57\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    93\n        label    \"\"\n        graphics\n        [\n            x    692.33\n            y    255.28\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    94\n        label    \"\"\n        graphics\n        [\n            x    153.64\n            y    447.89\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    95\n        label    \"\"\n        graphics\n        [\n            x    92.79\n            y    5.78\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    96\n        label    \"\"\n        graphics\n        [\n            x    1065.85\n            y    138.62\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    97\n        label    \"\"\n        graphics\n        [\n            x    436.93\n            y    484.25\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    98\n        label    \"\"\n        graphics\n        [\n            x    430.86\n            y    205.61\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    99\n        label    \"\"\n        graphics\n        [\n            x    710.20\n            y    31.90\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    100\n        label    \"\"\n        graphics\n        [\n            x    939.85\n            y    691.65\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    101\n        label    \"\"\n        graphics\n        [\n            x    946.58\n            y    956.15\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    102\n        label    \"\"\n        graphics\n        [\n            x    404.06\n            y    619.47\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    103\n        label    \"\"\n        graphics\n        [\n            x    730.60\n            y    515.38\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    104\n        label    \"\"\n        graphics\n        [\n            x    471.93\n            y    757.86\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    105\n        label    \"\"\n        graphics\n        [\n            x    864.86\n            y    162.37\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    106\n        label    \"\"\n        graphics\n        [\n            x    28.97\n            y    788.54\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    107\n        label    \"\"\n        graphics\n        [\n            x    501.64\n            y    59.07\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    108\n        label    \"\"\n        graphics\n        [\n            x    235.87\n            y    967.02\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    109\n        label    \"\"\n        graphics\n        [\n            x    883.99\n            y    126.34\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    110\n        label    \"\"\n        graphics\n        [\n            x    367.52\n            y    671.64\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    111\n        label    \"\"\n        graphics\n        [\n            x    342.04\n            y    485.54\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    112\n        label    \"\"\n        graphics\n        [\n            x    901.56\n            y    547.36\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    113\n        label    \"\"\n        graphics\n        [\n            x    746.38\n            y    998.77\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    114\n        label    \"\"\n        graphics\n        [\n            x    159.98\n            y    897.52\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    115\n        label    \"\"\n        graphics\n        [\n            x    206.29\n            y    124.45\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    116\n        label    \"\"\n        graphics\n        [\n            x    323.72\n            y    236.97\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    117\n        label    \"\"\n        graphics\n        [\n            x    684.94\n            y    56.13\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    118\n        label    \"\"\n        graphics\n        [\n            x    113.58\n            y    565.24\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    119\n        label    \"\"\n        graphics\n        [\n            x    100.75\n            y    305.01\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    120\n        label    \"\"\n        graphics\n        [\n            x    17.81\n            y    845.54\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    121\n        label    \"\"\n        graphics\n        [\n            x    257.94\n            y    400.17\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    122\n        label    \"\"\n        graphics\n        [\n            x    196.21\n            y    315.83\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    123\n        label    \"\"\n        graphics\n        [\n            x    206.57\n            y    805.90\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    124\n        label    \"\"\n        graphics\n        [\n            x    146.27\n            y    791.33\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    125\n        label    \"\"\n        graphics\n        [\n            x    289.08\n            y    205.41\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    126\n        label    \"\"\n        graphics\n        [\n            x    518.35\n            y    984.41\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    127\n        label    \"\"\n        graphics\n        [\n            x    1077.19\n            y    502.14\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    128\n        label    \"\"\n        graphics\n        [\n            x    568.63\n            y    765.26\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    129\n        label    \"\"\n        graphics\n        [\n            x    436.41\n            y    552.78\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    130\n        label    \"\"\n        graphics\n        [\n            x    790.16\n            y    463.58\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    131\n        label    \"\"\n        graphics\n        [\n            x    367.51\n            y    397.53\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    132\n        label    \"\"\n        graphics\n        [\n            x    822.21\n            y    130.39\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    133\n        label    \"\"\n        graphics\n        [\n            x    1023.58\n            y    242.06\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    134\n        label    \"\"\n        graphics\n        [\n            x    993.10\n            y    936.11\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    135\n        label    \"\"\n        graphics\n        [\n            x    58.32\n            y    764.53\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    136\n        label    \"\"\n        graphics\n        [\n            x    549.77\n            y    806.50\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    137\n        label    \"\"\n        graphics\n        [\n            x    21.62\n            y    706.82\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    138\n        label    \"\"\n        graphics\n        [\n            x    671.11\n            y    746.58\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    139\n        label    \"\"\n        graphics\n        [\n            x    1051.23\n            y    156.80\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    140\n        label    \"\"\n        graphics\n        [\n            x    46.27\n            y    555.70\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    141\n        label    \"\"\n        graphics\n        [\n            x    1089.75\n            y    365.09\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    142\n        label    \"\"\n        graphics\n        [\n            x    569.29\n            y    210.83\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    143\n        label    \"\"\n        graphics\n        [\n            x    308.50\n            y    268.88\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    144\n        label    \"\"\n        graphics\n        [\n            x    1087.83\n            y    119.05\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    145\n        label    \"\"\n        graphics\n        [\n            x    525.14\n            y    330.23\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    146\n        label    \"\"\n        graphics\n        [\n            x    445.02\n            y    351.80\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    147\n        label    \"\"\n        graphics\n        [\n            x    366.83\n            y    1090.82\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    148\n        label    \"\"\n        graphics\n        [\n            x    502.76\n            y    408.72\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    149\n        label    \"\"\n        graphics\n        [\n            x    876.02\n            y    1082.60\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    edge\n    [\n        source    1\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    10\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    100\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    101\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    102\n        target    29\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    103\n        target    98\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    104\n        target    52\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    105\n        target    59\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    106\n        target    103\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    107\n        target    30\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    108\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    109\n        target    60\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    11\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    110\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    111\n        target    45\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    112\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    113\n        target    101\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    114\n        target    79\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    115\n        target    80\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    116\n        target    105\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    117\n        target    37\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    118\n        target    72\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    119\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    12\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    120\n        target    41\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    121\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    122\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    123\n        target    115\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    124\n        target    83\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    125\n        target    34\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    126\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    127\n        target    79\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    128\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    129\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    13\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    130\n        target    36\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    131\n        target    41\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    132\n        target    46\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    133\n        target    43\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    134\n        target    119\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    135\n        target    43\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    136\n        target    98\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    137\n        target    28\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    138\n        target    117\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    139\n        target    85\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    14\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    140\n        target    52\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    141\n        target    116\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    142\n        target    138\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    143\n        target    92\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    144\n        target    37\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    145\n        target    110\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    146\n        target    132\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    147\n        target    42\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    148\n        target    125\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    149\n        target    82\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    15\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    16\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    17\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    18\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    19\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    2\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    20\n        target    19\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    21\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    22\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    23\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    24\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    25\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    26\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    27\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    28\n        target    26\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    29\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    3\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    30\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    31\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    32\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    33\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    34\n        target    28\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    35\n        target    34\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    36\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    37\n        target    33\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    38\n        target    24\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    39\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    4\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    4\n        target    27\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    40\n        target    32\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    41\n        target    28\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    42\n        target    24\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    43\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    44\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    45\n        target    29\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    46\n        target    36\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    47\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    48\n        target    28\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    49\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    5\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    50\n        target    49\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    51\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    52\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    53\n        target    44\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    54\n        target    35\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    55\n        target    45\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    56\n        target    38\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    57\n        target    55\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    58\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    59\n        target    39\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    6\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    60\n        target    34\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    61\n        target    54\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    62\n        target    52\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    63\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    64\n        target    31\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    65\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    66\n        target    19\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    67\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    68\n        target    30\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    69\n        target    44\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    7\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    70\n        target    38\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    71\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    72\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    73\n        target    33\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    74\n        target    36\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    75\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    76\n        target    70\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    77\n        target    71\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    78\n        target    62\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    79\n        target    62\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    8\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    80\n        target    54\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    81\n        target    20\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    82\n        target    30\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    83\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    84\n        target    80\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    85\n        target    79\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    86\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    87\n        target    62\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    88\n        target    60\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    89\n        target    85\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    9\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    90\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    91\n        target    66\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    92\n        target    29\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    93\n        target    84\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    94\n        target    28\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    95\n        target    50\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    96\n        target    33\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    97\n        target    33\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    98\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    99\n        target    42\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n]\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v150e150.tglf",
    "content": "0 750.000 1040.000 30.000 30.000\n1 85.000 825.000 30.000 30.000\n2 924.000 645.000 30.000 30.000\n3 340.000 142.000 30.000 30.000\n4 692.000 937.000 30.000 30.000\n5 300.000 789.000 30.000 30.000\n6 410.000 413.000 30.000 30.000\n7 721.000 703.000 30.000 30.000\n8 85.000 203.000 30.000 30.000\n9 406.000 1002.000 30.000 30.000\n10 972.000 334.000 30.000 30.000\n11 871.000 1034.000 30.000 30.000\n12 744.000 1045.000 30.000 30.000\n13 676.000 1076.000 30.000 30.000\n14 425.000 685.000 30.000 30.000\n15 520.000 11.000 30.000 30.000\n16 947.000 500.000 30.000 30.000\n17 902.000 154.000 30.000 30.000\n18 795.000 25.000 30.000 30.000\n19 559.000 356.000 30.000 30.000\n20 289.000 281.000 30.000 30.000\n21 214.000 145.000 30.000 30.000\n22 332.000 535.000 30.000 30.000\n23 449.000 1074.000 30.000 30.000\n24 1093.000 317.000 30.000 30.000\n25 431.000 930.000 30.000 30.000\n26 833.000 177.000 30.000 30.000\n27 733.000 87.000 30.000 30.000\n28 640.000 1099.000 30.000 30.000\n29 663.000 306.000 30.000 30.000\n30 820.000 861.000 30.000 30.000\n31 42.000 473.000 30.000 30.000\n32 57.000 1025.000 30.000 30.000\n33 325.000 905.000 30.000 30.000\n34 219.000 410.000 30.000 30.000\n35 197.000 1038.000 30.000 30.000\n36 724.000 507.000 30.000 30.000\n37 1082.000 403.000 30.000 30.000\n38 607.000 33.000 30.000 30.000\n39 829.000 617.000 30.000 30.000\n40 199.000 761.000 30.000 30.000\n41 294.000 234.000 30.000 30.000\n42 26.000 420.000 30.000 30.000\n43 319.000 750.000 30.000 30.000\n44 278.000 798.000 30.000 30.000\n45 108.000 1074.000 30.000 30.000\n46 725.000 771.000 30.000 30.000\n47 71.000 874.000 30.000 30.000\n48 547.000 618.000 30.000 30.000\n49 905.000 876.000 30.000 30.000\n50 727.000 1071.000 30.000 30.000\n51 449.000 391.000 30.000 30.000\n52 147.000 713.000 30.000 30.000\n53 814.000 455.000 30.000 30.000\n54 38.000 896.000 30.000 30.000\n55 980.000 191.000 30.000 30.000\n56 858.000 721.000 30.000 30.000\n57 87.000 197.000 30.000 30.000\n58 1051.000 699.000 30.000 30.000\n59 931.000 646.000 30.000 30.000\n60 525.000 680.000 30.000 30.000\n61 289.000 518.000 30.000 30.000\n62 710.000 650.000 30.000 30.000\n63 811.000 413.000 30.000 30.000\n64 474.000 361.000 30.000 30.000\n65 176.000 571.000 30.000 30.000\n66 824.000 13.000 30.000 30.000\n67 462.000 746.000 30.000 30.000\n68 323.000 419.000 30.000 30.000\n69 840.000 525.000 30.000 30.000\n70 149.000 0.000 30.000 30.000\n71 590.000 902.000 30.000 30.000\n72 958.000 138.000 30.000 30.000\n73 816.000 1015.000 30.000 30.000\n74 214.000 945.000 30.000 30.000\n75 646.000 153.000 30.000 30.000\n76 287.000 970.000 30.000 30.000\n77 127.000 158.000 30.000 30.000\n78 473.000 697.000 30.000 30.000\n79 866.000 393.000 30.000 30.000\n80 737.000 33.000 30.000 30.000\n81 778.000 915.000 30.000 30.000\n82 271.000 985.000 30.000 30.000\n83 672.000 1.000 30.000 30.000\n84 846.000 901.000 30.000 30.000\n85 134.000 418.000 30.000 30.000\n86 966.000 1066.000 30.000 30.000\n87 159.000 837.000 30.000 30.000\n88 103.000 875.000 30.000 30.000\n89 931.000 622.000 30.000 30.000\n90 634.000 313.000 30.000 30.000\n91 58.000 313.000 30.000 30.000\n92 645.000 187.000 30.000 30.000\n93 692.000 255.000 30.000 30.000\n94 153.000 447.000 30.000 30.000\n95 92.000 5.000 30.000 30.000\n96 1065.000 138.000 30.000 30.000\n97 436.000 484.000 30.000 30.000\n98 430.000 205.000 30.000 30.000\n99 710.000 31.000 30.000 30.000\n100 939.000 691.000 30.000 30.000\n101 946.000 956.000 30.000 30.000\n102 404.000 619.000 30.000 30.000\n103 730.000 515.000 30.000 30.000\n104 471.000 757.000 30.000 30.000\n105 864.000 162.000 30.000 30.000\n106 28.000 788.000 30.000 30.000\n107 501.000 59.000 30.000 30.000\n108 235.000 967.000 30.000 30.000\n109 883.000 126.000 30.000 30.000\n110 367.000 671.000 30.000 30.000\n111 342.000 485.000 30.000 30.000\n112 901.000 547.000 30.000 30.000\n113 746.000 998.000 30.000 30.000\n114 159.000 897.000 30.000 30.000\n115 206.000 124.000 30.000 30.000\n116 323.000 236.000 30.000 30.000\n117 684.000 56.000 30.000 30.000\n118 113.000 565.000 30.000 30.000\n119 100.000 305.000 30.000 30.000\n120 17.000 845.000 30.000 30.000\n121 257.000 400.000 30.000 30.000\n122 196.000 315.000 30.000 30.000\n123 206.000 805.000 30.000 30.000\n124 146.000 791.000 30.000 30.000\n125 289.000 205.000 30.000 30.000\n126 518.000 984.000 30.000 30.000\n127 1077.000 502.000 30.000 30.000\n128 568.000 765.000 30.000 30.000\n129 436.000 552.000 30.000 30.000\n130 790.000 463.000 30.000 30.000\n131 367.000 397.000 30.000 30.000\n132 822.000 130.000 30.000 30.000\n133 1023.000 242.000 30.000 30.000\n134 993.000 936.000 30.000 30.000\n135 58.000 764.000 30.000 30.000\n136 549.000 806.000 30.000 30.000\n137 21.000 706.000 30.000 30.000\n138 671.000 746.000 30.000 30.000\n139 1051.000 156.000 30.000 30.000\n140 46.000 555.000 30.000 30.000\n141 1089.000 365.000 30.000 30.000\n142 569.000 210.000 30.000 30.000\n143 308.000 268.000 30.000 30.000\n144 1087.000 119.000 30.000 30.000\n145 525.000 330.000 30.000 30.000\n146 445.000 351.000 30.000 30.000\n147 366.000 1090.000 30.000 30.000\n148 502.000 408.000 30.000 30.000\n149 876.000 1082.000 30.000 30.000\n#\n68 30\n35 34\n55 45\n140 52\n66 19\n105 59\n98 17\n143 92\n56 38\n33 12\n46 36\n114 79\n120 41\n101 10\n24 12\n124 83\n23 8\n102 29\n9 8\n72 18\n118 72\n22 2\n86 23\n20 19\n13 1\n108 23\n76 70\n111 45\n84 80\n94 28\n32 8\n123 115\n144 37\n38 24\n37 33\n18 7\n126 18\n21 8\n42 24\n103 98\n106 103\n100 23\n125 34\n142 138\n30 17\n70 38\n93 84\n54 35\n31 1\n146 132\n90 23\n131 41\n137 28\n122 16\n145 110\n1 0\n78 62\n148 125\n112 8\n57 55\n41 28\n65 9\n5 3\n80 54\n83 18\n149 82\n51 4\n91 66\n11 2\n52 9\n107 30\n40 32\n61 54\n109 60\n138 117\n19 2\n69 44\n74 36\n39 3\n14 12\n28 26\n27 9\n67 5\n45 29\n29 2\n53 44\n92 29\n147 42\n7 2\n136 98\n12 10\n132 46\n129 9\n85 79\n75 7\n59 39\n117 37\n96 33\n119 3\n116 105\n64 31\n58 18\n133 43\n36 8\n77 71\n89 85\n50 49\n97 33\n113 101\n62 52\n34 28\n6 3\n4 1\n71 16\n81 20\n25 18\n82 30\n115 80\n130 36\n48 28\n128 14\n3 2\n110 18\n121 3\n141 116\n135 43\n99 42\n26 7\n127 79\n60 34\n95 50\n49 1\n79 62\n17 8\n88 60\n104 52\n4 27\n16 12\n73 33\n43 6\n134 119\n139 85\n44 3\n15 0\n8 2\n10 8\n63 15\n2 0\n87 62\n47 11\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v150e165.gml",
    "content": "graph\n[\n    node\n    [\n        id    0\n        label    \"\"\n        graphics\n        [\n            x    771.98\n            y    1004.90\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    1\n        label    \"\"\n        graphics\n        [\n            x    965.89\n            y    1056.86\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    2\n        label    \"\"\n        graphics\n        [\n            x    334.19\n            y    261.33\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    3\n        label    \"\"\n        graphics\n        [\n            x    1078.73\n            y    529.00\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    4\n        label    \"\"\n        graphics\n        [\n            x    336.78\n            y    1092.89\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    5\n        label    \"\"\n        graphics\n        [\n            x    627.63\n            y    691.99\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    6\n        label    \"\"\n        graphics\n        [\n            x    593.81\n            y    345.17\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    7\n        label    \"\"\n        graphics\n        [\n            x    31.16\n            y    89.05\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    8\n        label    \"\"\n        graphics\n        [\n            x    34.78\n            y    246.56\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    9\n        label    \"\"\n        graphics\n        [\n            x    184.10\n            y    938.20\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    10\n        label    \"\"\n        graphics\n        [\n            x    299.26\n            y    7.71\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    11\n        label    \"\"\n        graphics\n        [\n            x    853.99\n            y    843.07\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    12\n        label    \"\"\n        graphics\n        [\n            x    1022.13\n            y    310.92\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    13\n        label    \"\"\n        graphics\n        [\n            x    1029.99\n            y    981.07\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    14\n        label    \"\"\n        graphics\n        [\n            x    731.07\n            y    33.74\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    15\n        label    \"\"\n        graphics\n        [\n            x    719.26\n            y    410.18\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    16\n        label    \"\"\n        graphics\n        [\n            x    41.56\n            y    544.97\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    17\n        label    \"\"\n        graphics\n        [\n            x    122.06\n            y    106.57\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    18\n        label    \"\"\n        graphics\n        [\n            x    487.05\n            y    94.08\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    19\n        label    \"\"\n        graphics\n        [\n            x    768.19\n            y    1057.27\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    20\n        label    \"\"\n        graphics\n        [\n            x    889.59\n            y    263.78\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    21\n        label    \"\"\n        graphics\n        [\n            x    432.17\n            y    926.43\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    22\n        label    \"\"\n        graphics\n        [\n            x    261.87\n            y    116.32\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    23\n        label    \"\"\n        graphics\n        [\n            x    938.06\n            y    1021.43\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    24\n        label    \"\"\n        graphics\n        [\n            x    574.89\n            y    230.54\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    25\n        label    \"\"\n        graphics\n        [\n            x    103.68\n            y    209.59\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    26\n        label    \"\"\n        graphics\n        [\n            x    892.35\n            y    694.54\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    27\n        label    \"\"\n        graphics\n        [\n            x    961.62\n            y    990.13\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    28\n        label    \"\"\n        graphics\n        [\n            x    744.29\n            y    886.31\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    29\n        label    \"\"\n        graphics\n        [\n            x    75.55\n            y    539.56\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    30\n        label    \"\"\n        graphics\n        [\n            x    266.28\n            y    263.87\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    31\n        label    \"\"\n        graphics\n        [\n            x    205.16\n            y    592.61\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    32\n        label    \"\"\n        graphics\n        [\n            x    583.60\n            y    553.81\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    33\n        label    \"\"\n        graphics\n        [\n            x    1094.87\n            y    1016.76\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    34\n        label    \"\"\n        graphics\n        [\n            x    647.69\n            y    165.02\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    35\n        label    \"\"\n        graphics\n        [\n            x    468.75\n            y    29.33\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    36\n        label    \"\"\n        graphics\n        [\n            x    874.00\n            y    598.80\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    37\n        label    \"\"\n        graphics\n        [\n            x    455.96\n            y    663.27\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    38\n        label    \"\"\n        graphics\n        [\n            x    993.26\n            y    564.29\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    39\n        label    \"\"\n        graphics\n        [\n            x    235.67\n            y    1039.45\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    40\n        label    \"\"\n        graphics\n        [\n            x    701.36\n            y    1094.89\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    41\n        label    \"\"\n        graphics\n        [\n            x    720.73\n            y    222.19\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    42\n        label    \"\"\n        graphics\n        [\n            x    71.66\n            y    654.48\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    43\n        label    \"\"\n        graphics\n        [\n            x    965.95\n            y    925.45\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    44\n        label    \"\"\n        graphics\n        [\n            x    857.30\n            y    246.07\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    45\n        label    \"\"\n        graphics\n        [\n            x    515.09\n            y    909.18\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    46\n        label    \"\"\n        graphics\n        [\n            x    39.62\n            y    343.72\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    47\n        label    \"\"\n        graphics\n        [\n            x    718.73\n            y    390.73\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    48\n        label    \"\"\n        graphics\n        [\n            x    91.77\n            y    1097.26\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    49\n        label    \"\"\n        graphics\n        [\n            x    54.76\n            y    250.62\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    50\n        label    \"\"\n        graphics\n        [\n            x    38.44\n            y    100.84\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    51\n        label    \"\"\n        graphics\n        [\n            x    200.42\n            y    705.02\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    52\n        label    \"\"\n        graphics\n        [\n            x    278.14\n            y    152.31\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    53\n        label    \"\"\n        graphics\n        [\n            x    70.80\n            y    143.38\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    54\n        label    \"\"\n        graphics\n        [\n            x    589.56\n            y    744.96\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    55\n        label    \"\"\n        graphics\n        [\n            x    1076.14\n            y    876.99\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    56\n        label    \"\"\n        graphics\n        [\n            x    548.78\n            y    332.27\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    57\n        label    \"\"\n        graphics\n        [\n            x    863.93\n            y    376.91\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    58\n        label    \"\"\n        graphics\n        [\n            x    269.10\n            y    266.77\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    59\n        label    \"\"\n        graphics\n        [\n            x    289.39\n            y    823.83\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    60\n        label    \"\"\n        graphics\n        [\n            x    449.24\n            y    441.11\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    61\n        label    \"\"\n        graphics\n        [\n            x    227.39\n            y    906.19\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    62\n        label    \"\"\n        graphics\n        [\n            x    477.99\n            y    1084.60\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    63\n        label    \"\"\n        graphics\n        [\n            x    588.59\n            y    147.99\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    64\n        label    \"\"\n        graphics\n        [\n            x    940.98\n            y    698.09\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    65\n        label    \"\"\n        graphics\n        [\n            x    798.24\n            y    1082.35\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    66\n        label    \"\"\n        graphics\n        [\n            x    167.49\n            y    399.49\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    67\n        label    \"\"\n        graphics\n        [\n            x    250.84\n            y    148.45\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    68\n        label    \"\"\n        graphics\n        [\n            x    301.95\n            y    496.97\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    69\n        label    \"\"\n        graphics\n        [\n            x    691.88\n            y    688.13\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    70\n        label    \"\"\n        graphics\n        [\n            x    286.62\n            y    801.65\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    71\n        label    \"\"\n        graphics\n        [\n            x    873.77\n            y    776.00\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    72\n        label    \"\"\n        graphics\n        [\n            x    29.50\n            y    1015.58\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    73\n        label    \"\"\n        graphics\n        [\n            x    916.10\n            y    141.19\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    74\n        label    \"\"\n        graphics\n        [\n            x    553.23\n            y    667.74\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    75\n        label    \"\"\n        graphics\n        [\n            x    350.60\n            y    226.97\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    76\n        label    \"\"\n        graphics\n        [\n            x    623.17\n            y    643.49\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    77\n        label    \"\"\n        graphics\n        [\n            x    891.68\n            y    391.73\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    78\n        label    \"\"\n        graphics\n        [\n            x    1095.75\n            y    480.31\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    79\n        label    \"\"\n        graphics\n        [\n            x    578.32\n            y    565.38\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    80\n        label    \"\"\n        graphics\n        [\n            x    615.52\n            y    32.73\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    81\n        label    \"\"\n        graphics\n        [\n            x    894.77\n            y    988.01\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    82\n        label    \"\"\n        graphics\n        [\n            x    737.62\n            y    630.38\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    83\n        label    \"\"\n        graphics\n        [\n            x    731.37\n            y    103.19\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    84\n        label    \"\"\n        graphics\n        [\n            x    687.07\n            y    1072.32\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    85\n        label    \"\"\n        graphics\n        [\n            x    912.82\n            y    1026.04\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    86\n        label    \"\"\n        graphics\n        [\n            x    560.17\n            y    730.29\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    87\n        label    \"\"\n        graphics\n        [\n            x    889.94\n            y    411.76\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    88\n        label    \"\"\n        graphics\n        [\n            x    54.15\n            y    537.71\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    89\n        label    \"\"\n        graphics\n        [\n            x    923.63\n            y    653.56\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    90\n        label    \"\"\n        graphics\n        [\n            x    230.39\n            y    378.57\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    91\n        label    \"\"\n        graphics\n        [\n            x    496.59\n            y    396.93\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    92\n        label    \"\"\n        graphics\n        [\n            x    202.60\n            y    804.06\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    93\n        label    \"\"\n        graphics\n        [\n            x    902.44\n            y    552.73\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    94\n        label    \"\"\n        graphics\n        [\n            x    495.40\n            y    619.20\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    95\n        label    \"\"\n        graphics\n        [\n            x    219.85\n            y    192.72\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    96\n        label    \"\"\n        graphics\n        [\n            x    500.81\n            y    1015.45\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    97\n        label    \"\"\n        graphics\n        [\n            x    241.27\n            y    793.45\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    98\n        label    \"\"\n        graphics\n        [\n            x    577.94\n            y    521.19\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    99\n        label    \"\"\n        graphics\n        [\n            x    196.48\n            y    384.96\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    100\n        label    \"\"\n        graphics\n        [\n            x    385.44\n            y    220.89\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    101\n        label    \"\"\n        graphics\n        [\n            x    322.27\n            y    605.80\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    102\n        label    \"\"\n        graphics\n        [\n            x    683.78\n            y    270.04\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    103\n        label    \"\"\n        graphics\n        [\n            x    329.08\n            y    108.06\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    104\n        label    \"\"\n        graphics\n        [\n            x    871.13\n            y    143.89\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    105\n        label    \"\"\n        graphics\n        [\n            x    636.97\n            y    757.47\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    106\n        label    \"\"\n        graphics\n        [\n            x    464.71\n            y    32.30\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    107\n        label    \"\"\n        graphics\n        [\n            x    736.75\n            y    332.63\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    108\n        label    \"\"\n        graphics\n        [\n            x    327.03\n            y    574.72\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    109\n        label    \"\"\n        graphics\n        [\n            x    110.29\n            y    1071.97\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    110\n        label    \"\"\n        graphics\n        [\n            x    513.03\n            y    475.24\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    111\n        label    \"\"\n        graphics\n        [\n            x    808.23\n            y    141.56\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    112\n        label    \"\"\n        graphics\n        [\n            x    431.50\n            y    1033.36\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    113\n        label    \"\"\n        graphics\n        [\n            x    987.33\n            y    283.69\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    114\n        label    \"\"\n        graphics\n        [\n            x    942.14\n            y    417.29\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    115\n        label    \"\"\n        graphics\n        [\n            x    265.00\n            y    946.59\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    116\n        label    \"\"\n        graphics\n        [\n            x    868.15\n            y    503.05\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    117\n        label    \"\"\n        graphics\n        [\n            x    177.09\n            y    879.74\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    118\n        label    \"\"\n        graphics\n        [\n            x    716.79\n            y    691.88\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    119\n        label    \"\"\n        graphics\n        [\n            x    706.69\n            y    573.16\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    120\n        label    \"\"\n        graphics\n        [\n            x    429.70\n            y    288.17\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    121\n        label    \"\"\n        graphics\n        [\n            x    738.75\n            y    1088.15\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    122\n        label    \"\"\n        graphics\n        [\n            x    971.48\n            y    236.78\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    123\n        label    \"\"\n        graphics\n        [\n            x    363.85\n            y    700.69\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    124\n        label    \"\"\n        graphics\n        [\n            x    123.63\n            y    756.39\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    125\n        label    \"\"\n        graphics\n        [\n            x    180.40\n            y    988.10\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    126\n        label    \"\"\n        graphics\n        [\n            x    518.82\n            y    884.08\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    127\n        label    \"\"\n        graphics\n        [\n            x    1067.35\n            y    704.42\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    128\n        label    \"\"\n        graphics\n        [\n            x    72.12\n            y    382.40\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    129\n        label    \"\"\n        graphics\n        [\n            x    62.97\n            y    1098.50\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    130\n        label    \"\"\n        graphics\n        [\n            x    1043.68\n            y    161.08\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    131\n        label    \"\"\n        graphics\n        [\n            x    814.77\n            y    78.50\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    132\n        label    \"\"\n        graphics\n        [\n            x    389.33\n            y    320.67\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    133\n        label    \"\"\n        graphics\n        [\n            x    379.42\n            y    209.31\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    134\n        label    \"\"\n        graphics\n        [\n            x    364.27\n            y    549.76\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    135\n        label    \"\"\n        graphics\n        [\n            x    206.57\n            y    51.47\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    136\n        label    \"\"\n        graphics\n        [\n            x    306.31\n            y    952.42\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    137\n        label    \"\"\n        graphics\n        [\n            x    226.32\n            y    150.05\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    138\n        label    \"\"\n        graphics\n        [\n            x    795.67\n            y    454.72\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    139\n        label    \"\"\n        graphics\n        [\n            x    1011.97\n            y    789.67\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    140\n        label    \"\"\n        graphics\n        [\n            x    866.04\n            y    80.72\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    141\n        label    \"\"\n        graphics\n        [\n            x    253.21\n            y    743.17\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    142\n        label    \"\"\n        graphics\n        [\n            x    553.87\n            y    1048.48\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    143\n        label    \"\"\n        graphics\n        [\n            x    960.91\n            y    552.64\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    144\n        label    \"\"\n        graphics\n        [\n            x    592.45\n            y    1102.07\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    145\n        label    \"\"\n        graphics\n        [\n            x    734.04\n            y    1015.67\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    146\n        label    \"\"\n        graphics\n        [\n            x    7.18\n            y    912.86\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    147\n        label    \"\"\n        graphics\n        [\n            x    455.96\n            y    718.36\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    148\n        label    \"\"\n        graphics\n        [\n            x    488.24\n            y    950.12\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    149\n        label    \"\"\n        graphics\n        [\n            x    664.11\n            y    394.95\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    edge\n    [\n        source    1\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    1\n        target    105\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    10\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    100\n        target    46\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    101\n        target    97\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    102\n        target    55\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    103\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    104\n        target    81\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    105\n        target    95\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    106\n        target    46\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    107\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    108\n        target    84\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    109\n        target    44\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    11\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    11\n        target    115\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    110\n        target    105\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    110\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    111\n        target    45\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    112\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    113\n        target    103\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    114\n        target    34\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    115\n        target    49\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    116\n        target    43\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    117\n        target    108\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    118\n        target    70\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    119\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    12\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    12\n        target    111\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    120\n        target    83\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    121\n        target    34\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    122\n        target    84\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    123\n        target    64\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    124\n        target    36\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    125\n        target    107\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    125\n        target    122\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    126\n        target    113\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    127\n        target    24\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    128\n        target    124\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    129\n        target    105\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    13\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    130\n        target    36\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    131\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    132\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    133\n        target    66\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    134\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    135\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    136\n        target    96\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    137\n        target    34\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    137\n        target    99\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    138\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    139\n        target    93\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    14\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    140\n        target    62\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    141\n        target    85\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    142\n        target    95\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    143\n        target    68\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    144\n        target    86\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    145\n        target    86\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    146\n        target    111\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    147\n        target    86\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    148\n        target    140\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    149\n        target    120\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    15\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    16\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    17\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    18\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    18\n        target    81\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    19\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    19\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    2\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    20\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    21\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    22\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    23\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    24\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    25\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    26\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    27\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    28\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    29\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    3\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    30\n        target    19\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    31\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    32\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    33\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    33\n        target    141\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    34\n        target    31\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    35\n        target    30\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    36\n        target    31\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    37\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    38\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    39\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    39\n        target    20\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    4\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    40\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    40\n        target    50\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    41\n        target    31\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    42\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    43\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    44\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    45\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    46\n        target    30\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    47\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    48\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    49\n        target    33\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    5\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    50\n        target    30\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    51\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    52\n        target    101\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    52\n        target    27\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    53\n        target    106\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    53\n        target    26\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    54\n        target    27\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    55\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    56\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    57\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    58\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    59\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    6\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    60\n        target    50\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    61\n        target    47\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    62\n        target    58\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    63\n        target    25\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    64\n        target    40\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    64\n        target    99\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    65\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    66\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    67\n        target    39\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    68\n        target    30\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    69\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    7\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    70\n        target    39\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    71\n        target    36\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    72\n        target    51\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    73\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    74\n        target    45\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    75\n        target    64\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    75\n        target    70\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    76\n        target    53\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    77\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    78\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    79\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    8\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    80\n        target    69\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    81\n        target    61\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    82\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    82\n        target    63\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    83\n        target    62\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    84\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    85\n        target    66\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    86\n        target    26\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    87\n        target    19\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    88\n        target    39\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    89\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    9\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    90\n        target    53\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    91\n        target    28\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    92\n        target    90\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    93\n        target    59\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    94\n        target    37\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    95\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    96\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    97\n        target    89\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    98\n        target    97\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    99\n        target    59\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n]\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v150e165.tglf",
    "content": "0 771.000 1004.000 30.000 30.000\n1 965.000 1056.000 30.000 30.000\n2 334.000 261.000 30.000 30.000\n3 1078.000 529.000 30.000 30.000\n4 336.000 1092.000 30.000 30.000\n5 627.000 691.000 30.000 30.000\n6 593.000 345.000 30.000 30.000\n7 31.000 89.000 30.000 30.000\n8 34.000 246.000 30.000 30.000\n9 184.000 938.000 30.000 30.000\n10 299.000 7.000 30.000 30.000\n11 853.000 843.000 30.000 30.000\n12 1022.000 310.000 30.000 30.000\n13 1029.000 981.000 30.000 30.000\n14 731.000 33.000 30.000 30.000\n15 719.000 410.000 30.000 30.000\n16 41.000 544.000 30.000 30.000\n17 122.000 106.000 30.000 30.000\n18 487.000 94.000 30.000 30.000\n19 768.000 1057.000 30.000 30.000\n20 889.000 263.000 30.000 30.000\n21 432.000 926.000 30.000 30.000\n22 261.000 116.000 30.000 30.000\n23 938.000 1021.000 30.000 30.000\n24 574.000 230.000 30.000 30.000\n25 103.000 209.000 30.000 30.000\n26 892.000 694.000 30.000 30.000\n27 961.000 990.000 30.000 30.000\n28 744.000 886.000 30.000 30.000\n29 75.000 539.000 30.000 30.000\n30 266.000 263.000 30.000 30.000\n31 205.000 592.000 30.000 30.000\n32 583.000 553.000 30.000 30.000\n33 1094.000 1016.000 30.000 30.000\n34 647.000 165.000 30.000 30.000\n35 468.000 29.000 30.000 30.000\n36 874.000 598.000 30.000 30.000\n37 455.000 663.000 30.000 30.000\n38 993.000 564.000 30.000 30.000\n39 235.000 1039.000 30.000 30.000\n40 701.000 1094.000 30.000 30.000\n41 720.000 222.000 30.000 30.000\n42 71.000 654.000 30.000 30.000\n43 965.000 925.000 30.000 30.000\n44 857.000 246.000 30.000 30.000\n45 515.000 909.000 30.000 30.000\n46 39.000 343.000 30.000 30.000\n47 718.000 390.000 30.000 30.000\n48 91.000 1097.000 30.000 30.000\n49 54.000 250.000 30.000 30.000\n50 38.000 100.000 30.000 30.000\n51 200.000 705.000 30.000 30.000\n52 278.000 152.000 30.000 30.000\n53 70.000 143.000 30.000 30.000\n54 589.000 744.000 30.000 30.000\n55 1076.000 876.000 30.000 30.000\n56 548.000 332.000 30.000 30.000\n57 863.000 376.000 30.000 30.000\n58 269.000 266.000 30.000 30.000\n59 289.000 823.000 30.000 30.000\n60 449.000 441.000 30.000 30.000\n61 227.000 906.000 30.000 30.000\n62 477.000 1084.000 30.000 30.000\n63 588.000 147.000 30.000 30.000\n64 940.000 698.000 30.000 30.000\n65 798.000 1082.000 30.000 30.000\n66 167.000 399.000 30.000 30.000\n67 250.000 148.000 30.000 30.000\n68 301.000 496.000 30.000 30.000\n69 691.000 688.000 30.000 30.000\n70 286.000 801.000 30.000 30.000\n71 873.000 776.000 30.000 30.000\n72 29.000 1015.000 30.000 30.000\n73 916.000 141.000 30.000 30.000\n74 553.000 667.000 30.000 30.000\n75 350.000 226.000 30.000 30.000\n76 623.000 643.000 30.000 30.000\n77 891.000 391.000 30.000 30.000\n78 1095.000 480.000 30.000 30.000\n79 578.000 565.000 30.000 30.000\n80 615.000 32.000 30.000 30.000\n81 894.000 988.000 30.000 30.000\n82 737.000 630.000 30.000 30.000\n83 731.000 103.000 30.000 30.000\n84 687.000 1072.000 30.000 30.000\n85 912.000 1026.000 30.000 30.000\n86 560.000 730.000 30.000 30.000\n87 889.000 411.000 30.000 30.000\n88 54.000 537.000 30.000 30.000\n89 923.000 653.000 30.000 30.000\n90 230.000 378.000 30.000 30.000\n91 496.000 396.000 30.000 30.000\n92 202.000 804.000 30.000 30.000\n93 902.000 552.000 30.000 30.000\n94 495.000 619.000 30.000 30.000\n95 219.000 192.000 30.000 30.000\n96 500.000 1015.000 30.000 30.000\n97 241.000 793.000 30.000 30.000\n98 577.000 521.000 30.000 30.000\n99 196.000 384.000 30.000 30.000\n100 385.000 220.000 30.000 30.000\n101 322.000 605.000 30.000 30.000\n102 683.000 270.000 30.000 30.000\n103 329.000 108.000 30.000 30.000\n104 871.000 143.000 30.000 30.000\n105 636.000 757.000 30.000 30.000\n106 464.000 32.000 30.000 30.000\n107 736.000 332.000 30.000 30.000\n108 327.000 574.000 30.000 30.000\n109 110.000 1071.000 30.000 30.000\n110 513.000 475.000 30.000 30.000\n111 808.000 141.000 30.000 30.000\n112 431.000 1033.000 30.000 30.000\n113 987.000 283.000 30.000 30.000\n114 942.000 417.000 30.000 30.000\n115 265.000 946.000 30.000 30.000\n116 868.000 503.000 30.000 30.000\n117 177.000 879.000 30.000 30.000\n118 716.000 691.000 30.000 30.000\n119 706.000 573.000 30.000 30.000\n120 429.000 288.000 30.000 30.000\n121 738.000 1088.000 30.000 30.000\n122 971.000 236.000 30.000 30.000\n123 363.000 700.000 30.000 30.000\n124 123.000 756.000 30.000 30.000\n125 180.000 988.000 30.000 30.000\n126 518.000 884.000 30.000 30.000\n127 1067.000 704.000 30.000 30.000\n128 72.000 382.000 30.000 30.000\n129 62.000 1098.000 30.000 30.000\n130 1043.000 161.000 30.000 30.000\n131 814.000 78.000 30.000 30.000\n132 389.000 320.000 30.000 30.000\n133 379.000 209.000 30.000 30.000\n134 364.000 549.000 30.000 30.000\n135 206.000 51.000 30.000 30.000\n136 306.000 952.000 30.000 30.000\n137 226.000 150.000 30.000 30.000\n138 795.000 454.000 30.000 30.000\n139 1011.000 789.000 30.000 30.000\n140 866.000 80.000 30.000 30.000\n141 253.000 743.000 30.000 30.000\n142 553.000 1048.000 30.000 30.000\n143 960.000 552.000 30.000 30.000\n144 592.000 1102.000 30.000 30.000\n145 734.000 1015.000 30.000 30.000\n146 7.000 912.000 30.000 30.000\n147 455.000 718.000 30.000 30.000\n148 488.000 950.000 30.000 30.000\n149 664.000 394.000 30.000 30.000\n#\n70 39\n33 141\n39 20\n122 84\n6 5\n62 58\n84 22\n10 7\n126 113\n132 14\n138 2\n124 36\n64 99\n110 22\n67 39\n54 27\n39 17\n88 39\n115 49\n89 23\n19 15\n100 46\n1 105\n7 0\n134 7\n18 10\n140 62\n41 31\n31 9\n2 1\n12 10\n24 8\n135 22\n74 45\n44 16\n79 12\n49 33\n130 36\n147 86\n3 1\n45 4\n28 22\n75 70\n82 63\n98 97\n110 105\n137 34\n23 6\n71 36\n144 86\n55 8\n96 2\n1 0\n8 4\n51 17\n136 96\n4 3\n22 2\n102 55\n111 45\n129 105\n116 43\n72 51\n18 81\n104 81\n101 97\n25 12\n143 68\n53 26\n11 1\n40 13\n146 111\n83 62\n14 11\n47 22\n81 61\n66 7\n117 108\n131 14\n69 23\n20 11\n34 31\n58 14\n5 3\n27 10\n26 0\n97 89\n125 107\n59 5\n94 37\n60 50\n112 6\n141 85\n50 30\n114 34\n92 90\n76 53\n13 5\n33 11\n145 86\n11 115\n53 106\n12 111\n149 120\n73 12\n56 1\n48 6\n119 14\n38 16\n142 95\n37 1\n17 2\n108 84\n103 1\n40 50\n95 18\n106 46\n82 17\n75 64\n125 122\n148 140\n91 28\n113 103\n9 5\n64 40\n46 30\n86 26\n107 11\n16 8\n105 95\n52 101\n118 70\n78 18\n42 15\n123 64\n35 30\n61 47\n80 69\n43 11\n32 13\n93 59\n99 59\n19 13\n128 124\n57 21\n120 83\n15 13\n85 66\n109 44\n52 27\n137 99\n87 19\n90 53\n68 30\n30 19\n65 9\n77 2\n36 31\n133 66\n121 34\n139 93\n21 14\n63 25\n29 6\n127 24\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v150e180.gml",
    "content": "graph\n[\n    node\n    [\n        id    0\n        label    \"\"\n        graphics\n        [\n            x    493.54\n            y    789.67\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    1\n        label    \"\"\n        graphics\n        [\n            x    950.89\n            y    1055.77\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    2\n        label    \"\"\n        graphics\n        [\n            x    711.00\n            y    715.81\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    3\n        label    \"\"\n        graphics\n        [\n            x    263.61\n            y    78.61\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    4\n        label    \"\"\n        graphics\n        [\n            x    61.77\n            y    329.48\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    5\n        label    \"\"\n        graphics\n        [\n            x    405.49\n            y    959.16\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    6\n        label    \"\"\n        graphics\n        [\n            x    989.81\n            y    662.64\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    7\n        label    \"\"\n        graphics\n        [\n            x    1064.89\n            y    54.78\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    8\n        label    \"\"\n        graphics\n        [\n            x    976.00\n            y    225.03\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    9\n        label    \"\"\n        graphics\n        [\n            x    427.80\n            y    144.26\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    10\n        label    \"\"\n        graphics\n        [\n            x    887.02\n            y    381.80\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    11\n        label    \"\"\n        graphics\n        [\n            x    106.34\n            y    874.34\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    12\n        label    \"\"\n        graphics\n        [\n            x    329.01\n            y    106.86\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    13\n        label    \"\"\n        graphics\n        [\n            x    154.88\n            y    317.03\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    14\n        label    \"\"\n        graphics\n        [\n            x    297.28\n            y    555.39\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    15\n        label    \"\"\n        graphics\n        [\n            x    327.12\n            y    145.93\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    16\n        label    \"\"\n        graphics\n        [\n            x    326.28\n            y    66.83\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    17\n        label    \"\"\n        graphics\n        [\n            x    565.57\n            y    453.83\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    18\n        label    \"\"\n        graphics\n        [\n            x    533.12\n            y    42.42\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    19\n        label    \"\"\n        graphics\n        [\n            x    915.13\n            y    53.09\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    20\n        label    \"\"\n        graphics\n        [\n            x    382.54\n            y    503.10\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    21\n        label    \"\"\n        graphics\n        [\n            x    343.52\n            y    741.84\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    22\n        label    \"\"\n        graphics\n        [\n            x    113.56\n            y    810.28\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    23\n        label    \"\"\n        graphics\n        [\n            x    83.96\n            y    298.12\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    24\n        label    \"\"\n        graphics\n        [\n            x    1034.56\n            y    63.37\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    25\n        label    \"\"\n        graphics\n        [\n            x    105.26\n            y    1019.85\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    26\n        label    \"\"\n        graphics\n        [\n            x    312.18\n            y    733.59\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    27\n        label    \"\"\n        graphics\n        [\n            x    1011.97\n            y    286.26\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    28\n        label    \"\"\n        graphics\n        [\n            x    18.13\n            y    799.32\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    29\n        label    \"\"\n        graphics\n        [\n            x    460.95\n            y    774.41\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    30\n        label    \"\"\n        graphics\n        [\n            x    527.12\n            y    1073.81\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    31\n        label    \"\"\n        graphics\n        [\n            x    967.54\n            y    1039.41\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    32\n        label    \"\"\n        graphics\n        [\n            x    109.19\n            y    402.88\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    33\n        label    \"\"\n        graphics\n        [\n            x    266.60\n            y    605.64\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    34\n        label    \"\"\n        graphics\n        [\n            x    469.72\n            y    552.26\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    35\n        label    \"\"\n        graphics\n        [\n            x    136.57\n            y    833.86\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    36\n        label    \"\"\n        graphics\n        [\n            x    43.55\n            y    879.69\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    37\n        label    \"\"\n        graphics\n        [\n            x    764.83\n            y    10.51\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    38\n        label    \"\"\n        graphics\n        [\n            x    746.51\n            y    490.68\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    39\n        label    \"\"\n        graphics\n        [\n            x    814.35\n            y    390.37\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    40\n        label    \"\"\n        graphics\n        [\n            x    379.76\n            y    113.93\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    41\n        label    \"\"\n        graphics\n        [\n            x    237.00\n            y    619.58\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    42\n        label    \"\"\n        graphics\n        [\n            x    1031.77\n            y    1002.77\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    43\n        label    \"\"\n        graphics\n        [\n            x    607.37\n            y    855.25\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    44\n        label    \"\"\n        graphics\n        [\n            x    287.64\n            y    243.86\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    45\n        label    \"\"\n        graphics\n        [\n            x    638.77\n            y    443.71\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    46\n        label    \"\"\n        graphics\n        [\n            x    335.06\n            y    636.12\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    47\n        label    \"\"\n        graphics\n        [\n            x    680.08\n            y    341.94\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    48\n        label    \"\"\n        graphics\n        [\n            x    1014.28\n            y    118.06\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    49\n        label    \"\"\n        graphics\n        [\n            x    643.60\n            y    783.06\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    50\n        label    \"\"\n        graphics\n        [\n            x    118.91\n            y    69.96\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    51\n        label    \"\"\n        graphics\n        [\n            x    163.46\n            y    89.88\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    52\n        label    \"\"\n        graphics\n        [\n            x    452.45\n            y    755.02\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    53\n        label    \"\"\n        graphics\n        [\n            x    198.28\n            y    200.16\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    54\n        label    \"\"\n        graphics\n        [\n            x    244.93\n            y    346.58\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    55\n        label    \"\"\n        graphics\n        [\n            x    428.09\n            y    909.02\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    56\n        label    \"\"\n        graphics\n        [\n            x    993.50\n            y    703.87\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    57\n        label    \"\"\n        graphics\n        [\n            x    64.40\n            y    738.57\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    58\n        label    \"\"\n        graphics\n        [\n            x    902.76\n            y    820.10\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    59\n        label    \"\"\n        graphics\n        [\n            x    133.01\n            y    441.85\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    60\n        label    \"\"\n        graphics\n        [\n            x    454.10\n            y    1038.00\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    61\n        label    \"\"\n        graphics\n        [\n            x    163.04\n            y    842.91\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    62\n        label    \"\"\n        graphics\n        [\n            x    826.80\n            y    1068.21\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    63\n        label    \"\"\n        graphics\n        [\n            x    385.42\n            y    603.71\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    64\n        label    \"\"\n        graphics\n        [\n            x    448.55\n            y    629.06\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    65\n        label    \"\"\n        graphics\n        [\n            x    490.64\n            y    928.90\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    66\n        label    \"\"\n        graphics\n        [\n            x    90.67\n            y    1084.44\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    67\n        label    \"\"\n        graphics\n        [\n            x    153.20\n            y    134.96\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    68\n        label    \"\"\n        graphics\n        [\n            x    71.40\n            y    656.49\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    69\n        label    \"\"\n        graphics\n        [\n            x    577.76\n            y    459.94\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    70\n        label    \"\"\n        graphics\n        [\n            x    1067.62\n            y    1060.99\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    71\n        label    \"\"\n        graphics\n        [\n            x    1059.52\n            y    557.38\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    72\n        label    \"\"\n        graphics\n        [\n            x    464.16\n            y    698.62\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    73\n        label    \"\"\n        graphics\n        [\n            x    52.91\n            y    917.45\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    74\n        label    \"\"\n        graphics\n        [\n            x    730.69\n            y    783.40\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    75\n        label    \"\"\n        graphics\n        [\n            x    862.63\n            y    70.69\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    76\n        label    \"\"\n        graphics\n        [\n            x    109.72\n            y    557.96\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    77\n        label    \"\"\n        graphics\n        [\n            x    585.99\n            y    617.85\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    78\n        label    \"\"\n        graphics\n        [\n            x    806.18\n            y    783.29\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    79\n        label    \"\"\n        graphics\n        [\n            x    890.78\n            y    1009.31\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    80\n        label    \"\"\n        graphics\n        [\n            x    608.54\n            y    759.17\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    81\n        label    \"\"\n        graphics\n        [\n            x    20.29\n            y    29.86\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    82\n        label    \"\"\n        graphics\n        [\n            x    405.06\n            y    770.83\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    83\n        label    \"\"\n        graphics\n        [\n            x    972.33\n            y    907.68\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    84\n        label    \"\"\n        graphics\n        [\n            x    987.07\n            y    21.88\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    85\n        label    \"\"\n        graphics\n        [\n            x    1.44\n            y    525.08\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    86\n        label    \"\"\n        graphics\n        [\n            x    1001.72\n            y    1099.43\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    87\n        label    \"\"\n        graphics\n        [\n            x    230.91\n            y    849.97\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    88\n        label    \"\"\n        graphics\n        [\n            x    556.70\n            y    715.64\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    89\n        label    \"\"\n        graphics\n        [\n            x    371.47\n            y    977.39\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    90\n        label    \"\"\n        graphics\n        [\n            x    879.00\n            y    158.85\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    91\n        label    \"\"\n        graphics\n        [\n            x    409.21\n            y    278.16\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    92\n        label    \"\"\n        graphics\n        [\n            x    8.35\n            y    864.38\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    93\n        label    \"\"\n        graphics\n        [\n            x    900.60\n            y    576.93\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    94\n        label    \"\"\n        graphics\n        [\n            x    701.66\n            y    150.34\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    95\n        label    \"\"\n        graphics\n        [\n            x    69.33\n            y    616.35\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    96\n        label    \"\"\n        graphics\n        [\n            x    845.61\n            y    284.31\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    97\n        label    \"\"\n        graphics\n        [\n            x    424.21\n            y    1033.23\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    98\n        label    \"\"\n        graphics\n        [\n            x    958.38\n            y    77.82\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    99\n        label    \"\"\n        graphics\n        [\n            x    102.97\n            y    524.11\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    100\n        label    \"\"\n        graphics\n        [\n            x    816.82\n            y    74.84\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    101\n        label    \"\"\n        graphics\n        [\n            x    445.09\n            y    64.31\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    102\n        label    \"\"\n        graphics\n        [\n            x    876.54\n            y    154.46\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    103\n        label    \"\"\n        graphics\n        [\n            x    554.54\n            y    389.71\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    104\n        label    \"\"\n        graphics\n        [\n            x    227.90\n            y    144.98\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    105\n        label    \"\"\n        graphics\n        [\n            x    434.31\n            y    725.55\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    106\n        label    \"\"\n        graphics\n        [\n            x    279.78\n            y    913.31\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    107\n        label    \"\"\n        graphics\n        [\n            x    1017.79\n            y    300.62\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    108\n        label    \"\"\n        graphics\n        [\n            x    924.54\n            y    699.43\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    109\n        label    \"\"\n        graphics\n        [\n            x    628.17\n            y    113.08\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    110\n        label    \"\"\n        graphics\n        [\n            x    1032.37\n            y    649.09\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    111\n        label    \"\"\n        graphics\n        [\n            x    114.88\n            y    748.51\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    112\n        label    \"\"\n        graphics\n        [\n            x    240.23\n            y    578.73\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    113\n        label    \"\"\n        graphics\n        [\n            x    928.05\n            y    64.73\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    114\n        label    \"\"\n        graphics\n        [\n            x    278.97\n            y    836.36\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    115\n        label    \"\"\n        graphics\n        [\n            x    745.74\n            y    409.75\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    116\n        label    \"\"\n        graphics\n        [\n            x    59.06\n            y    810.52\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    117\n        label    \"\"\n        graphics\n        [\n            x    405.83\n            y    390.18\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    118\n        label    \"\"\n        graphics\n        [\n            x    274.34\n            y    577.61\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    119\n        label    \"\"\n        graphics\n        [\n            x    662.12\n            y    136.40\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    120\n        label    \"\"\n        graphics\n        [\n            x    1053.88\n            y    444.89\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    121\n        label    \"\"\n        graphics\n        [\n            x    718.04\n            y    9.95\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    122\n        label    \"\"\n        graphics\n        [\n            x    769.87\n            y    18.60\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    123\n        label    \"\"\n        graphics\n        [\n            x    326.90\n            y    840.52\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    124\n        label    \"\"\n        graphics\n        [\n            x    1055.45\n            y    630.73\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    125\n        label    \"\"\n        graphics\n        [\n            x    1003.31\n            y    1001.46\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    126\n        label    \"\"\n        graphics\n        [\n            x    438.25\n            y    707.35\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    127\n        label    \"\"\n        graphics\n        [\n            x    536.67\n            y    83.06\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    128\n        label    \"\"\n        graphics\n        [\n            x    211.19\n            y    1029.52\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    129\n        label    \"\"\n        graphics\n        [\n            x    969.44\n            y    1032.31\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    130\n        label    \"\"\n        graphics\n        [\n            x    651.14\n            y    872.62\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    131\n        label    \"\"\n        graphics\n        [\n            x    610.41\n            y    531.73\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    132\n        label    \"\"\n        graphics\n        [\n            x    482.32\n            y    634.96\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    133\n        label    \"\"\n        graphics\n        [\n            x    480.41\n            y    108.27\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    134\n        label    \"\"\n        graphics\n        [\n            x    78.46\n            y    790.15\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    135\n        label    \"\"\n        graphics\n        [\n            x    470.84\n            y    759.83\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    136\n        label    \"\"\n        graphics\n        [\n            x    205.54\n            y    32.23\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    137\n        label    \"\"\n        graphics\n        [\n            x    552.98\n            y    174.08\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    138\n        label    \"\"\n        graphics\n        [\n            x    320.39\n            y    634.53\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    139\n        label    \"\"\n        graphics\n        [\n            x    1034.35\n            y    659.99\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    140\n        label    \"\"\n        graphics\n        [\n            x    1002.63\n            y    412.02\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    141\n        label    \"\"\n        graphics\n        [\n            x    632.38\n            y    147.01\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    142\n        label    \"\"\n        graphics\n        [\n            x    110.75\n            y    1087.28\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    143\n        label    \"\"\n        graphics\n        [\n            x    797.68\n            y    888.04\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    144\n        label    \"\"\n        graphics\n        [\n            x    352.48\n            y    991.43\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    145\n        label    \"\"\n        graphics\n        [\n            x    426.75\n            y    231.80\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    146\n        label    \"\"\n        graphics\n        [\n            x    209.44\n            y    458.57\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    147\n        label    \"\"\n        graphics\n        [\n            x    1085.54\n            y    987.49\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    148\n        label    \"\"\n        graphics\n        [\n            x    1065.49\n            y    520.21\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    149\n        label    \"\"\n        graphics\n        [\n            x    633.23\n            y    948.08\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    edge\n    [\n        source    1\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    10\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    100\n        target    27\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    101\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    102\n        target    90\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    103\n        target    28\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    104\n        target    67\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    105\n        target    29\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    106\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    107\n        target    41\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    108\n        target    112\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    108\n        target    67\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    109\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    11\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    110\n        target    57\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    111\n        target    107\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    112\n        target    101\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    112\n        target    106\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    113\n        target    29\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    114\n        target    116\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    114\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    115\n        target    107\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    115\n        target    144\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    115\n        target    98\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    116\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    117\n        target    115\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    118\n        target    108\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    118\n        target    66\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    119\n        target    32\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    12\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    120\n        target    51\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    121\n        target    78\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    122\n        target    40\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    123\n        target    149\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    123\n        target    53\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    124\n        target    81\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    125\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    126\n        target    102\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    127\n        target    53\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    128\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    129\n        target    25\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    13\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    130\n        target    73\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    131\n        target    50\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    132\n        target    116\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    133\n        target    105\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    133\n        target    46\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    134\n        target    62\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    135\n        target    110\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    136\n        target    146\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    136\n        target    76\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    137\n        target    77\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    138\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    139\n        target    34\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    14\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    140\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    141\n        target    136\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    142\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    143\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    144\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    145\n        target    103\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    146\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    147\n        target    112\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    148\n        target    37\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    149\n        target    117\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    15\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    16\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    17\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    18\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    19\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    19\n        target    99\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    2\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    20\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    21\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    22\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    23\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    24\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    25\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    26\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    26\n        target    28\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    27\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    27\n        target    46\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    28\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    29\n        target    64\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    29\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    3\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    30\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    31\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    32\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    33\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    34\n        target    133\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    34\n        target    29\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    35\n        target    104\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    35\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    36\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    37\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    37\n        target    73\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    38\n        target    36\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    38\n        target    95\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    39\n        target    26\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    4\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    40\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    41\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    42\n        target    30\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    43\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    43\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    44\n        target    35\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    45\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    46\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    47\n        target    104\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    47\n        target    25\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    48\n        target    20\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    49\n        target    27\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    49\n        target    31\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    5\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    5\n        target    66\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    50\n        target    46\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    51\n        target    32\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    51\n        target    40\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    52\n        target    43\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    53\n        target    26\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    54\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    54\n        target    101\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    55\n        target    47\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    56\n        target    37\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    57\n        target    42\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    58\n        target    41\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    59\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    6\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    60\n        target    48\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    61\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    61\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    62\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    63\n        target    46\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    64\n        target    28\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    65\n        target    20\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    66\n        target    51\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    67\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    67\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    67\n        target    27\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    68\n        target    26\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    69\n        target    47\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    7\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    70\n        target    50\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    71\n        target    27\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    71\n        target    55\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    72\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    73\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    74\n        target    40\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    75\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    75\n        target    71\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    76\n        target    41\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    77\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    78\n        target    56\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    79\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    8\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    8\n        target    35\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    80\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    81\n        target    41\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    82\n        target    61\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    83\n        target    47\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    84\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    85\n        target    54\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    86\n        target    81\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    87\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    88\n        target    26\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    89\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    9\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    90\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    91\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    92\n        target    70\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    93\n        target    28\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    94\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    95\n        target    128\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    95\n        target    47\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    96\n        target    92\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    97\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    98\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    99\n        target    75\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    99\n        target    94\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n]\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v150e180.tglf",
    "content": "0 493.000 789.000 30.000 30.000\n1 950.000 1055.000 30.000 30.000\n2 711.000 715.000 30.000 30.000\n3 263.000 78.000 30.000 30.000\n4 61.000 329.000 30.000 30.000\n5 405.000 959.000 30.000 30.000\n6 989.000 662.000 30.000 30.000\n7 1064.000 54.000 30.000 30.000\n8 976.000 225.000 30.000 30.000\n9 427.000 144.000 30.000 30.000\n10 887.000 381.000 30.000 30.000\n11 106.000 874.000 30.000 30.000\n12 329.000 106.000 30.000 30.000\n13 154.000 317.000 30.000 30.000\n14 297.000 555.000 30.000 30.000\n15 327.000 145.000 30.000 30.000\n16 326.000 66.000 30.000 30.000\n17 565.000 453.000 30.000 30.000\n18 533.000 42.000 30.000 30.000\n19 915.000 53.000 30.000 30.000\n20 382.000 503.000 30.000 30.000\n21 343.000 741.000 30.000 30.000\n22 113.000 810.000 30.000 30.000\n23 83.000 298.000 30.000 30.000\n24 1034.000 63.000 30.000 30.000\n25 105.000 1019.000 30.000 30.000\n26 312.000 733.000 30.000 30.000\n27 1011.000 286.000 30.000 30.000\n28 18.000 799.000 30.000 30.000\n29 460.000 774.000 30.000 30.000\n30 527.000 1073.000 30.000 30.000\n31 967.000 1039.000 30.000 30.000\n32 109.000 402.000 30.000 30.000\n33 266.000 605.000 30.000 30.000\n34 469.000 552.000 30.000 30.000\n35 136.000 833.000 30.000 30.000\n36 43.000 879.000 30.000 30.000\n37 764.000 10.000 30.000 30.000\n38 746.000 490.000 30.000 30.000\n39 814.000 390.000 30.000 30.000\n40 379.000 113.000 30.000 30.000\n41 237.000 619.000 30.000 30.000\n42 1031.000 1002.000 30.000 30.000\n43 607.000 855.000 30.000 30.000\n44 287.000 243.000 30.000 30.000\n45 638.000 443.000 30.000 30.000\n46 335.000 636.000 30.000 30.000\n47 680.000 341.000 30.000 30.000\n48 1014.000 118.000 30.000 30.000\n49 643.000 783.000 30.000 30.000\n50 118.000 69.000 30.000 30.000\n51 163.000 89.000 30.000 30.000\n52 452.000 755.000 30.000 30.000\n53 198.000 200.000 30.000 30.000\n54 244.000 346.000 30.000 30.000\n55 428.000 909.000 30.000 30.000\n56 993.000 703.000 30.000 30.000\n57 64.000 738.000 30.000 30.000\n58 902.000 820.000 30.000 30.000\n59 133.000 441.000 30.000 30.000\n60 454.000 1038.000 30.000 30.000\n61 163.000 842.000 30.000 30.000\n62 826.000 1068.000 30.000 30.000\n63 385.000 603.000 30.000 30.000\n64 448.000 629.000 30.000 30.000\n65 490.000 928.000 30.000 30.000\n66 90.000 1084.000 30.000 30.000\n67 153.000 134.000 30.000 30.000\n68 71.000 656.000 30.000 30.000\n69 577.000 459.000 30.000 30.000\n70 1067.000 1060.000 30.000 30.000\n71 1059.000 557.000 30.000 30.000\n72 464.000 698.000 30.000 30.000\n73 52.000 917.000 30.000 30.000\n74 730.000 783.000 30.000 30.000\n75 862.000 70.000 30.000 30.000\n76 109.000 557.000 30.000 30.000\n77 585.000 617.000 30.000 30.000\n78 806.000 783.000 30.000 30.000\n79 890.000 1009.000 30.000 30.000\n80 608.000 759.000 30.000 30.000\n81 20.000 29.000 30.000 30.000\n82 405.000 770.000 30.000 30.000\n83 972.000 907.000 30.000 30.000\n84 987.000 21.000 30.000 30.000\n85 1.000 525.000 30.000 30.000\n86 1001.000 1099.000 30.000 30.000\n87 230.000 849.000 30.000 30.000\n88 556.000 715.000 30.000 30.000\n89 371.000 977.000 30.000 30.000\n90 879.000 158.000 30.000 30.000\n91 409.000 278.000 30.000 30.000\n92 8.000 864.000 30.000 30.000\n93 900.000 576.000 30.000 30.000\n94 701.000 150.000 30.000 30.000\n95 69.000 616.000 30.000 30.000\n96 845.000 284.000 30.000 30.000\n97 424.000 1033.000 30.000 30.000\n98 958.000 77.000 30.000 30.000\n99 102.000 524.000 30.000 30.000\n100 816.000 74.000 30.000 30.000\n101 445.000 64.000 30.000 30.000\n102 876.000 154.000 30.000 30.000\n103 554.000 389.000 30.000 30.000\n104 227.000 144.000 30.000 30.000\n105 434.000 725.000 30.000 30.000\n106 279.000 913.000 30.000 30.000\n107 1017.000 300.000 30.000 30.000\n108 924.000 699.000 30.000 30.000\n109 628.000 113.000 30.000 30.000\n110 1032.000 649.000 30.000 30.000\n111 114.000 748.000 30.000 30.000\n112 240.000 578.000 30.000 30.000\n113 928.000 64.000 30.000 30.000\n114 278.000 836.000 30.000 30.000\n115 745.000 409.000 30.000 30.000\n116 59.000 810.000 30.000 30.000\n117 405.000 390.000 30.000 30.000\n118 274.000 577.000 30.000 30.000\n119 662.000 136.000 30.000 30.000\n120 1053.000 444.000 30.000 30.000\n121 718.000 9.000 30.000 30.000\n122 769.000 18.000 30.000 30.000\n123 326.000 840.000 30.000 30.000\n124 1055.000 630.000 30.000 30.000\n125 1003.000 1001.000 30.000 30.000\n126 438.000 707.000 30.000 30.000\n127 536.000 83.000 30.000 30.000\n128 211.000 1029.000 30.000 30.000\n129 969.000 1032.000 30.000 30.000\n130 651.000 872.000 30.000 30.000\n131 610.000 531.000 30.000 30.000\n132 482.000 634.000 30.000 30.000\n133 480.000 108.000 30.000 30.000\n134 78.000 790.000 30.000 30.000\n135 470.000 759.000 30.000 30.000\n136 205.000 32.000 30.000 30.000\n137 552.000 174.000 30.000 30.000\n138 320.000 634.000 30.000 30.000\n139 1034.000 659.000 30.000 30.000\n140 1002.000 412.000 30.000 30.000\n141 632.000 147.000 30.000 30.000\n142 110.000 1087.000 30.000 30.000\n143 797.000 888.000 30.000 30.000\n144 352.000 991.000 30.000 30.000\n145 426.000 231.000 30.000 30.000\n146 209.000 458.000 30.000 30.000\n147 1085.000 987.000 30.000 30.000\n148 1065.000 520.000 30.000 30.000\n149 633.000 948.000 30.000 30.000\n#\n90 12\n33 0\n17 16\n115 107\n55 47\n109 15\n131 50\n35 11\n26 14\n12 10\n117 115\n73 11\n105 29\n13 8\n20 7\n85 54\n119 32\n58 41\n99 75\n61 9\n87 14\n142 10\n116 21\n32 15\n108 67\n108 112\n124 81\n69 47\n2 0\n76 41\n38 95\n93 28\n53 26\n43 18\n83 47\n61 7\n133 105\n60 48\n95 47\n132 116\n27 46\n35 104\n129 25\n84 10\n125 21\n10 3\n136 76\n77 5\n48 20\n100 27\n22 12\n26 28\n113 29\n51 40\n54 1\n19 99\n23 3\n38 36\n98 5\n68 26\n139 34\n133 46\n34 133\n78 56\n29 64\n128 16\n115 98\n63 46\n104 67\n56 37\n96 92\n123 53\n59 9\n36 6\n80 10\n44 35\n111 107\n46 21\n107 41\n114 116\n28 18\n42 30\n40 23\n97 7\n67 27\n45 3\n121 78\n134 62\n112 101\n8 0\n47 104\n67 2\n6 0\n72 4\n147 112\n50 46\n103 28\n57 42\n41 3\n49 31\n140 4\n16 11\n126 102\n47 25\n110 57\n74 40\n25 10\n65 20\n91 5\n127 53\n86 81\n118 66\n118 108\n130 73\n136 146\n11 3\n18 14\n49 27\n71 55\n30 14\n19 8\n106 16\n27 14\n71 27\n138 11\n31 3\n143 4\n9 8\n149 117\n115 144\n92 70\n34 29\n14 1\n21 11\n114 14\n39 26\n120 51\n135 110\n75 4\n37 73\n70 50\n43 5\n101 0\n94 4\n15 5\n7 5\n1 0\n5 0\n8 35\n4 3\n64 28\n54 101\n112 106\n67 23\n89 18\n24 15\n51 32\n66 51\n82 61\n123 149\n79 7\n81 41\n29 8\n75 71\n148 37\n95 128\n37 0\n137 77\n88 26\n146 5\n5 66\n122 40\n102 90\n99 94\n144 7\n3 1\n52 43\n141 136\n62 8\n145 103\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v150e195.gml",
    "content": "graph\n[\n    node\n    [\n        id    0\n        label    \"\"\n        graphics\n        [\n            x    757.01\n            y    955.54\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    1\n        label    \"\"\n        graphics\n        [\n            x    164.18\n            y    117.90\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    2\n        label    \"\"\n        graphics\n        [\n            x    30.53\n            y    110.25\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    3\n        label    \"\"\n        graphics\n        [\n            x    543.25\n            y    665.52\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    4\n        label    \"\"\n        graphics\n        [\n            x    48.15\n            y    969.93\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    5\n        label    \"\"\n        graphics\n        [\n            x    622.91\n            y    358.61\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    6\n        label    \"\"\n        graphics\n        [\n            x    30.51\n            y    748.98\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    7\n        label    \"\"\n        graphics\n        [\n            x    623.83\n            y    676.55\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    8\n        label    \"\"\n        graphics\n        [\n            x    858.25\n            y    872.12\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    9\n        label    \"\"\n        graphics\n        [\n            x    57.28\n            y    1040.29\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    10\n        label    \"\"\n        graphics\n        [\n            x    854.14\n            y    749.53\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    11\n        label    \"\"\n        graphics\n        [\n            x    905.90\n            y    380.16\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    12\n        label    \"\"\n        graphics\n        [\n            x    584.11\n            y    901.16\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    13\n        label    \"\"\n        graphics\n        [\n            x    830.12\n            y    756.00\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    14\n        label    \"\"\n        graphics\n        [\n            x    611.92\n            y    4.40\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    15\n        label    \"\"\n        graphics\n        [\n            x    659.07\n            y    579.29\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    16\n        label    \"\"\n        graphics\n        [\n            x    495.47\n            y    199.31\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    17\n        label    \"\"\n        graphics\n        [\n            x    1006.69\n            y    528.77\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    18\n        label    \"\"\n        graphics\n        [\n            x    769.52\n            y    133.88\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    19\n        label    \"\"\n        graphics\n        [\n            x    1100.77\n            y    521.60\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    20\n        label    \"\"\n        graphics\n        [\n            x    944.94\n            y    114.73\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    21\n        label    \"\"\n        graphics\n        [\n            x    906.35\n            y    1072.51\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    22\n        label    \"\"\n        graphics\n        [\n            x    875.09\n            y    80.00\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    23\n        label    \"\"\n        graphics\n        [\n            x    50.28\n            y    804.80\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    24\n        label    \"\"\n        graphics\n        [\n            x    1046.69\n            y    124.79\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    25\n        label    \"\"\n        graphics\n        [\n            x    932.31\n            y    975.71\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    26\n        label    \"\"\n        graphics\n        [\n            x    793.23\n            y    457.32\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    27\n        label    \"\"\n        graphics\n        [\n            x    157.19\n            y    751.48\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    28\n        label    \"\"\n        graphics\n        [\n            x    585.10\n            y    241.23\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    29\n        label    \"\"\n        graphics\n        [\n            x    972.39\n            y    709.32\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    30\n        label    \"\"\n        graphics\n        [\n            x    815.40\n            y    143.95\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    31\n        label    \"\"\n        graphics\n        [\n            x    855.05\n            y    362.11\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    32\n        label    \"\"\n        graphics\n        [\n            x    904.48\n            y    112.57\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    33\n        label    \"\"\n        graphics\n        [\n            x    855.41\n            y    177.58\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    34\n        label    \"\"\n        graphics\n        [\n            x    492.73\n            y    798.89\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    35\n        label    \"\"\n        graphics\n        [\n            x    1094.11\n            y    991.77\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    36\n        label    \"\"\n        graphics\n        [\n            x    716.80\n            y    951.16\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    37\n        label    \"\"\n        graphics\n        [\n            x    795.92\n            y    799.63\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    38\n        label    \"\"\n        graphics\n        [\n            x    762.14\n            y    586.39\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    39\n        label    \"\"\n        graphics\n        [\n            x    697.85\n            y    165.56\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    40\n        label    \"\"\n        graphics\n        [\n            x    395.11\n            y    881.94\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    41\n        label    \"\"\n        graphics\n        [\n            x    460.86\n            y    15.34\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    42\n        label    \"\"\n        graphics\n        [\n            x    870.35\n            y    267.95\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    43\n        label    \"\"\n        graphics\n        [\n            x    593.12\n            y    454.09\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    44\n        label    \"\"\n        graphics\n        [\n            x    335.36\n            y    892.70\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    45\n        label    \"\"\n        graphics\n        [\n            x    485.27\n            y    64.53\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    46\n        label    \"\"\n        graphics\n        [\n            x    797.23\n            y    272.65\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    47\n        label    \"\"\n        graphics\n        [\n            x    372.09\n            y    526.43\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    48\n        label    \"\"\n        graphics\n        [\n            x    434.79\n            y    273.87\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    49\n        label    \"\"\n        graphics\n        [\n            x    385.23\n            y    364.03\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    50\n        label    \"\"\n        graphics\n        [\n            x    108.58\n            y    705.94\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    51\n        label    \"\"\n        graphics\n        [\n            x    392.42\n            y    267.08\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    52\n        label    \"\"\n        graphics\n        [\n            x    952.92\n            y    534.51\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    53\n        label    \"\"\n        graphics\n        [\n            x    363.31\n            y    269.27\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    54\n        label    \"\"\n        graphics\n        [\n            x    56.36\n            y    762.73\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    55\n        label    \"\"\n        graphics\n        [\n            x    60.93\n            y    182.17\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    56\n        label    \"\"\n        graphics\n        [\n            x    948.80\n            y    207.01\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    57\n        label    \"\"\n        graphics\n        [\n            x    1059.52\n            y    366.47\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    58\n        label    \"\"\n        graphics\n        [\n            x    411.58\n            y    352.11\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    59\n        label    \"\"\n        graphics\n        [\n            x    303.43\n            y    313.57\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    60\n        label    \"\"\n        graphics\n        [\n            x    1016.86\n            y    1049.21\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    61\n        label    \"\"\n        graphics\n        [\n            x    985.81\n            y    949.92\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    62\n        label    \"\"\n        graphics\n        [\n            x    911.18\n            y    110.42\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    63\n        label    \"\"\n        graphics\n        [\n            x    50.80\n            y    67.12\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    64\n        label    \"\"\n        graphics\n        [\n            x    992.93\n            y    973.43\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    65\n        label    \"\"\n        graphics\n        [\n            x    970.41\n            y    209.46\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    66\n        label    \"\"\n        graphics\n        [\n            x    323.38\n            y    408.10\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    67\n        label    \"\"\n        graphics\n        [\n            x    685.26\n            y    96.16\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    68\n        label    \"\"\n        graphics\n        [\n            x    53.23\n            y    919.65\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    69\n        label    \"\"\n        graphics\n        [\n            x    963.49\n            y    552.38\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    70\n        label    \"\"\n        graphics\n        [\n            x    71.64\n            y    115.95\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    71\n        label    \"\"\n        graphics\n        [\n            x    924.39\n            y    294.01\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    72\n        label    \"\"\n        graphics\n        [\n            x    746.39\n            y    30.09\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    73\n        label    \"\"\n        graphics\n        [\n            x    86.99\n            y    637.49\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    74\n        label    \"\"\n        graphics\n        [\n            x    225.27\n            y    650.52\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    75\n        label    \"\"\n        graphics\n        [\n            x    580.50\n            y    681.66\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    76\n        label    \"\"\n        graphics\n        [\n            x    994.52\n            y    24.55\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    77\n        label    \"\"\n        graphics\n        [\n            x    340.65\n            y    777.11\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    78\n        label    \"\"\n        graphics\n        [\n            x    326.38\n            y    459.68\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    79\n        label    \"\"\n        graphics\n        [\n            x    629.88\n            y    250.66\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    80\n        label    \"\"\n        graphics\n        [\n            x    1034.26\n            y    1091.88\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    81\n        label    \"\"\n        graphics\n        [\n            x    77.70\n            y    1044.19\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    82\n        label    \"\"\n        graphics\n        [\n            x    1016.79\n            y    926.15\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    83\n        label    \"\"\n        graphics\n        [\n            x    659.08\n            y    523.54\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    84\n        label    \"\"\n        graphics\n        [\n            x    474.44\n            y    419.32\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    85\n        label    \"\"\n        graphics\n        [\n            x    39.53\n            y    434.55\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    86\n        label    \"\"\n        graphics\n        [\n            x    231.24\n            y    823.54\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    87\n        label    \"\"\n        graphics\n        [\n            x    1016.08\n            y    1089.75\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    88\n        label    \"\"\n        graphics\n        [\n            x    327.49\n            y    817.82\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    89\n        label    \"\"\n        graphics\n        [\n            x    202.87\n            y    201.32\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    90\n        label    \"\"\n        graphics\n        [\n            x    61.42\n            y    362.16\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    91\n        label    \"\"\n        graphics\n        [\n            x    173.09\n            y    594.71\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    92\n        label    \"\"\n        graphics\n        [\n            x    232.62\n            y    144.40\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    93\n        label    \"\"\n        graphics\n        [\n            x    117.70\n            y    943.28\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    94\n        label    \"\"\n        graphics\n        [\n            x    247.67\n            y    621.87\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    95\n        label    \"\"\n        graphics\n        [\n            x    944.96\n            y    424.16\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    96\n        label    \"\"\n        graphics\n        [\n            x    13.00\n            y    142.74\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    97\n        label    \"\"\n        graphics\n        [\n            x    675.31\n            y    601.91\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    98\n        label    \"\"\n        graphics\n        [\n            x    397.31\n            y    361.80\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    99\n        label    \"\"\n        graphics\n        [\n            x    127.22\n            y    403.11\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    100\n        label    \"\"\n        graphics\n        [\n            x    371.04\n            y    590.18\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    101\n        label    \"\"\n        graphics\n        [\n            x    977.24\n            y    946.09\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    102\n        label    \"\"\n        graphics\n        [\n            x    489.05\n            y    767.58\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    103\n        label    \"\"\n        graphics\n        [\n            x    906.76\n            y    355.01\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    104\n        label    \"\"\n        graphics\n        [\n            x    592.26\n            y    659.94\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    105\n        label    \"\"\n        graphics\n        [\n            x    1098.24\n            y    1020.61\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    106\n        label    \"\"\n        graphics\n        [\n            x    576.77\n            y    603.14\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    107\n        label    \"\"\n        graphics\n        [\n            x    333.86\n            y    911.78\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    108\n        label    \"\"\n        graphics\n        [\n            x    612.10\n            y    35.37\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    109\n        label    \"\"\n        graphics\n        [\n            x    113.41\n            y    1083.27\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    110\n        label    \"\"\n        graphics\n        [\n            x    904.81\n            y    1097.47\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    111\n        label    \"\"\n        graphics\n        [\n            x    540.97\n            y    255.31\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    112\n        label    \"\"\n        graphics\n        [\n            x    881.18\n            y    559.06\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    113\n        label    \"\"\n        graphics\n        [\n            x    584.56\n            y    294.11\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    114\n        label    \"\"\n        graphics\n        [\n            x    490.33\n            y    39.18\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    115\n        label    \"\"\n        graphics\n        [\n            x    985.98\n            y    38.32\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    116\n        label    \"\"\n        graphics\n        [\n            x    378.73\n            y    680.32\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    117\n        label    \"\"\n        graphics\n        [\n            x    644.06\n            y    152.00\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    118\n        label    \"\"\n        graphics\n        [\n            x    639.54\n            y    451.65\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    119\n        label    \"\"\n        graphics\n        [\n            x    889.48\n            y    836.27\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    120\n        label    \"\"\n        graphics\n        [\n            x    844.67\n            y    213.74\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    121\n        label    \"\"\n        graphics\n        [\n            x    339.48\n            y    99.67\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    122\n        label    \"\"\n        graphics\n        [\n            x    8.19\n            y    435.03\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    123\n        label    \"\"\n        graphics\n        [\n            x    978.54\n            y    572.30\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    124\n        label    \"\"\n        graphics\n        [\n            x    973.62\n            y    606.83\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    125\n        label    \"\"\n        graphics\n        [\n            x    338.71\n            y    792.76\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    126\n        label    \"\"\n        graphics\n        [\n            x    166.83\n            y    239.36\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    127\n        label    \"\"\n        graphics\n        [\n            x    452.54\n            y    1015.03\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    128\n        label    \"\"\n        graphics\n        [\n            x    705.58\n            y    723.35\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    129\n        label    \"\"\n        graphics\n        [\n            x    41.28\n            y    520.79\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    130\n        label    \"\"\n        graphics\n        [\n            x    453.46\n            y    975.26\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    131\n        label    \"\"\n        graphics\n        [\n            x    280.28\n            y    436.20\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    132\n        label    \"\"\n        graphics\n        [\n            x    170.83\n            y    644.48\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    133\n        label    \"\"\n        graphics\n        [\n            x    360.80\n            y    849.13\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    134\n        label    \"\"\n        graphics\n        [\n            x    875.97\n            y    425.70\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    135\n        label    \"\"\n        graphics\n        [\n            x    920.85\n            y    558.24\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    136\n        label    \"\"\n        graphics\n        [\n            x    815.90\n            y    846.20\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    137\n        label    \"\"\n        graphics\n        [\n            x    507.55\n            y    236.01\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    138\n        label    \"\"\n        graphics\n        [\n            x    1032.25\n            y    713.40\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    139\n        label    \"\"\n        graphics\n        [\n            x    999.31\n            y    624.60\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    140\n        label    \"\"\n        graphics\n        [\n            x    536.45\n            y    796.53\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    141\n        label    \"\"\n        graphics\n        [\n            x    660.29\n            y    1046.80\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    142\n        label    \"\"\n        graphics\n        [\n            x    716.42\n            y    206.50\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    143\n        label    \"\"\n        graphics\n        [\n            x    750.42\n            y    93.89\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    144\n        label    \"\"\n        graphics\n        [\n            x    1030.96\n            y    536.87\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    145\n        label    \"\"\n        graphics\n        [\n            x    261.48\n            y    859.99\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    146\n        label    \"\"\n        graphics\n        [\n            x    962.63\n            y    655.24\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    147\n        label    \"\"\n        graphics\n        [\n            x    482.03\n            y    687.76\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    148\n        label    \"\"\n        graphics\n        [\n            x    385.00\n            y    497.78\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    149\n        label    \"\"\n        graphics\n        [\n            x    976.58\n            y    63.44\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    edge\n    [\n        source    1\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    10\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    100\n        target    94\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    101\n        target    92\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    102\n        target    45\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    103\n        target    73\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    104\n        target    19\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    105\n        target    59\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    106\n        target    65\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    107\n        target    94\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    108\n        target    80\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    109\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    109\n        target    99\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    11\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    110\n        target    25\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    111\n        target    56\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    111\n        target    64\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    112\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    113\n        target    20\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    113\n        target    45\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    113\n        target    65\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    113\n        target    99\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    114\n        target    104\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    114\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    115\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    116\n        target    68\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    117\n        target    45\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    117\n        target    77\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    118\n        target    115\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    118\n        target    43\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    119\n        target    81\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    12\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    120\n        target    50\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    121\n        target    81\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    122\n        target    139\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    122\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    122\n        target    46\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    123\n        target    103\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    123\n        target    66\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    123\n        target    77\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    124\n        target    118\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    124\n        target    19\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    125\n        target    101\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    126\n        target    51\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    127\n        target    106\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    128\n        target    102\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    129\n        target    122\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    13\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    130\n        target    103\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    130\n        target    128\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    130\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    131\n        target    47\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    131\n        target    57\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    132\n        target    95\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    133\n        target    69\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    134\n        target    75\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    135\n        target    94\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    136\n        target    142\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    136\n        target    67\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    137\n        target    89\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    138\n        target    83\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    139\n        target    49\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    14\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    140\n        target    38\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    141\n        target    70\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    142\n        target    119\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    142\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    143\n        target    129\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    144\n        target    103\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    145\n        target    130\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    145\n        target    96\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    146\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    147\n        target    139\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    147\n        target    41\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    148\n        target    71\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    149\n        target    76\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    15\n        target    116\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    15\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    16\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    17\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    18\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    19\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    2\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    2\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    20\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    21\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    22\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    23\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    24\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    25\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    26\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    27\n        target    20\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    28\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    28\n        target    48\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    29\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    3\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    30\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    31\n        target    107\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    31\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    32\n        target    142\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    32\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    33\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    34\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    35\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    36\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    37\n        target    33\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    38\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    39\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    39\n        target    24\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    39\n        target    29\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    39\n        target    91\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    4\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    40\n        target    39\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    41\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    42\n        target    30\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    43\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    44\n        target    39\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    45\n        target    27\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    45\n        target    31\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    45\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    46\n        target    44\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    47\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    48\n        target    117\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    48\n        target    34\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    49\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    49\n        target    19\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    5\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    5\n        target    81\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    50\n        target    39\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    51\n        target    37\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    52\n        target    34\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    52\n        target    76\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    53\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    54\n        target    52\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    55\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    56\n        target    54\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    56\n        target    73\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    57\n        target    28\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    58\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    58\n        target    26\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    59\n        target    25\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    6\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    60\n        target    53\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    61\n        target    52\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    61\n        target    56\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    62\n        target    45\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    63\n        target    51\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    64\n        target    30\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    65\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    66\n        target    20\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    67\n        target    47\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    67\n        target    56\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    68\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    69\n        target    38\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    7\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    70\n        target    20\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    70\n        target    67\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    71\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    72\n        target    56\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    73\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    74\n        target    44\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    74\n        target    47\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    75\n        target    40\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    76\n        target    66\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    77\n        target    113\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    77\n        target    24\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    78\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    79\n        target    24\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    8\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    80\n        target    28\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    81\n        target    45\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    82\n        target    66\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    83\n        target    24\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    84\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    85\n        target    28\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    85\n        target    36\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    86\n        target    107\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    86\n        target    77\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    87\n        target    68\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    88\n        target    76\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    89\n        target    54\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    9\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    90\n        target    48\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    90\n        target    54\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    91\n        target    79\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    92\n        target    26\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    93\n        target    88\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    94\n        target    54\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    95\n        target    93\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    96\n        target    54\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    97\n        target    37\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    97\n        target    61\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    98\n        target    102\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    98\n        target    37\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    99\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n]\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v150e195.tglf",
    "content": "0 757.000 955.000 30.000 30.000\n1 164.000 117.000 30.000 30.000\n2 30.000 110.000 30.000 30.000\n3 543.000 665.000 30.000 30.000\n4 48.000 969.000 30.000 30.000\n5 622.000 358.000 30.000 30.000\n6 30.000 748.000 30.000 30.000\n7 623.000 676.000 30.000 30.000\n8 858.000 872.000 30.000 30.000\n9 57.000 1040.000 30.000 30.000\n10 854.000 749.000 30.000 30.000\n11 905.000 380.000 30.000 30.000\n12 584.000 901.000 30.000 30.000\n13 830.000 756.000 30.000 30.000\n14 611.000 4.000 30.000 30.000\n15 659.000 579.000 30.000 30.000\n16 495.000 199.000 30.000 30.000\n17 1006.000 528.000 30.000 30.000\n18 769.000 133.000 30.000 30.000\n19 1100.000 521.000 30.000 30.000\n20 944.000 114.000 30.000 30.000\n21 906.000 1072.000 30.000 30.000\n22 875.000 80.000 30.000 30.000\n23 50.000 804.000 30.000 30.000\n24 1046.000 124.000 30.000 30.000\n25 932.000 975.000 30.000 30.000\n26 793.000 457.000 30.000 30.000\n27 157.000 751.000 30.000 30.000\n28 585.000 241.000 30.000 30.000\n29 972.000 709.000 30.000 30.000\n30 815.000 143.000 30.000 30.000\n31 855.000 362.000 30.000 30.000\n32 904.000 112.000 30.000 30.000\n33 855.000 177.000 30.000 30.000\n34 492.000 798.000 30.000 30.000\n35 1094.000 991.000 30.000 30.000\n36 716.000 951.000 30.000 30.000\n37 795.000 799.000 30.000 30.000\n38 762.000 586.000 30.000 30.000\n39 697.000 165.000 30.000 30.000\n40 395.000 881.000 30.000 30.000\n41 460.000 15.000 30.000 30.000\n42 870.000 267.000 30.000 30.000\n43 593.000 454.000 30.000 30.000\n44 335.000 892.000 30.000 30.000\n45 485.000 64.000 30.000 30.000\n46 797.000 272.000 30.000 30.000\n47 372.000 526.000 30.000 30.000\n48 434.000 273.000 30.000 30.000\n49 385.000 364.000 30.000 30.000\n50 108.000 705.000 30.000 30.000\n51 392.000 267.000 30.000 30.000\n52 952.000 534.000 30.000 30.000\n53 363.000 269.000 30.000 30.000\n54 56.000 762.000 30.000 30.000\n55 60.000 182.000 30.000 30.000\n56 948.000 207.000 30.000 30.000\n57 1059.000 366.000 30.000 30.000\n58 411.000 352.000 30.000 30.000\n59 303.000 313.000 30.000 30.000\n60 1016.000 1049.000 30.000 30.000\n61 985.000 949.000 30.000 30.000\n62 911.000 110.000 30.000 30.000\n63 50.000 67.000 30.000 30.000\n64 992.000 973.000 30.000 30.000\n65 970.000 209.000 30.000 30.000\n66 323.000 408.000 30.000 30.000\n67 685.000 96.000 30.000 30.000\n68 53.000 919.000 30.000 30.000\n69 963.000 552.000 30.000 30.000\n70 71.000 115.000 30.000 30.000\n71 924.000 294.000 30.000 30.000\n72 746.000 30.000 30.000 30.000\n73 86.000 637.000 30.000 30.000\n74 225.000 650.000 30.000 30.000\n75 580.000 681.000 30.000 30.000\n76 994.000 24.000 30.000 30.000\n77 340.000 777.000 30.000 30.000\n78 326.000 459.000 30.000 30.000\n79 629.000 250.000 30.000 30.000\n80 1034.000 1091.000 30.000 30.000\n81 77.000 1044.000 30.000 30.000\n82 1016.000 926.000 30.000 30.000\n83 659.000 523.000 30.000 30.000\n84 474.000 419.000 30.000 30.000\n85 39.000 434.000 30.000 30.000\n86 231.000 823.000 30.000 30.000\n87 1016.000 1089.000 30.000 30.000\n88 327.000 817.000 30.000 30.000\n89 202.000 201.000 30.000 30.000\n90 61.000 362.000 30.000 30.000\n91 173.000 594.000 30.000 30.000\n92 232.000 144.000 30.000 30.000\n93 117.000 943.000 30.000 30.000\n94 247.000 621.000 30.000 30.000\n95 944.000 424.000 30.000 30.000\n96 13.000 142.000 30.000 30.000\n97 675.000 601.000 30.000 30.000\n98 397.000 361.000 30.000 30.000\n99 127.000 403.000 30.000 30.000\n100 371.000 590.000 30.000 30.000\n101 977.000 946.000 30.000 30.000\n102 489.000 767.000 30.000 30.000\n103 906.000 355.000 30.000 30.000\n104 592.000 659.000 30.000 30.000\n105 1098.000 1020.000 30.000 30.000\n106 576.000 603.000 30.000 30.000\n107 333.000 911.000 30.000 30.000\n108 612.000 35.000 30.000 30.000\n109 113.000 1083.000 30.000 30.000\n110 904.000 1097.000 30.000 30.000\n111 540.000 255.000 30.000 30.000\n112 881.000 559.000 30.000 30.000\n113 584.000 294.000 30.000 30.000\n114 490.000 39.000 30.000 30.000\n115 985.000 38.000 30.000 30.000\n116 378.000 680.000 30.000 30.000\n117 644.000 152.000 30.000 30.000\n118 639.000 451.000 30.000 30.000\n119 889.000 836.000 30.000 30.000\n120 844.000 213.000 30.000 30.000\n121 339.000 99.000 30.000 30.000\n122 8.000 435.000 30.000 30.000\n123 978.000 572.000 30.000 30.000\n124 973.000 606.000 30.000 30.000\n125 338.000 792.000 30.000 30.000\n126 166.000 239.000 30.000 30.000\n127 452.000 1015.000 30.000 30.000\n128 705.000 723.000 30.000 30.000\n129 41.000 520.000 30.000 30.000\n130 453.000 975.000 30.000 30.000\n131 280.000 436.000 30.000 30.000\n132 170.000 644.000 30.000 30.000\n133 360.000 849.000 30.000 30.000\n134 875.000 425.000 30.000 30.000\n135 920.000 558.000 30.000 30.000\n136 815.000 846.000 30.000 30.000\n137 507.000 236.000 30.000 30.000\n138 1032.000 713.000 30.000 30.000\n139 999.000 624.000 30.000 30.000\n140 536.000 796.000 30.000 30.000\n141 660.000 1046.000 30.000 30.000\n142 716.000 206.000 30.000 30.000\n143 750.000 93.000 30.000 30.000\n144 1030.000 536.000 30.000 30.000\n145 261.000 859.000 30.000 30.000\n146 962.000 655.000 30.000 30.000\n147 482.000 687.000 30.000 30.000\n148 385.000 497.000 30.000 30.000\n149 976.000 63.000 30.000 30.000\n#\n143 129\n2 1\n98 102\n108 80\n76 66\n128 102\n131 47\n54 52\n48 117\n68 0\n94 54\n3 0\n15 14\n28 48\n32 8\n122 46\n74 44\n6 1\n46 44\n135 94\n96 54\n61 56\n65 4\n73 16\n97 37\n39 2\n42 30\n104 19\n20 5\n123 66\n28 16\n12 5\n84 4\n83 24\n147 41\n113 20\n74 47\n13 3\n123 103\n129 122\n126 51\n122 139\n19 4\n7 0\n112 3\n113 99\n121 81\n77 24\n32 142\n87 68\n85 28\n92 26\n18 6\n142 9\n17 13\n70 67\n39 24\n48 34\n24 14\n40 39\n97 61\n29 9\n124 118\n124 19\n35 9\n51 37\n31 13\n109 99\n132 95\n80 28\n141 70\n39 29\n86 107\n21 7\n52 34\n31 107\n130 6\n58 26\n120 50\n136 67\n41 23\n63 51\n66 20\n111 64\n49 17\n59 25\n38 11\n113 45\n145 130\n106 65\n52 76\n34 15\n79 24\n62 45\n90 54\n15 116\n118 43\n45 8\n14 13\n33 8\n117 77\n43 10\n53 1\n4 2\n130 103\n5 81\n125 101\n107 94\n91 79\n75 40\n47 14\n136 142\n69 38\n127 106\n23 5\n56 73\n8 2\n102 45\n115 23\n86 77\n77 113\n99 3\n39 91\n130 128\n45 27\n27 20\n105 59\n101 92\n147 139\n142 119\n149 76\n9 0\n113 65\n118 115\n144 103\n85 36\n56 54\n146 7\n11 8\n116 68\n16 10\n5 2\n26 6\n137 89\n134 75\n70 20\n82 66\n71 23\n110 25\n90 48\n131 57\n78 21\n22 15\n138 83\n140 38\n98 37\n88 76\n25 9\n114 23\n139 49\n67 47\n37 33\n119 81\n122 21\n1 0\n148 71\n30 7\n133 69\n10 0\n89 54\n81 45\n49 19\n93 88\n36 5\n145 96\n72 56\n67 56\n61 52\n44 39\n50 39\n100 94\n45 31\n57 28\n109 21\n60 53\n95 93\n55 9\n117 45\n123 77\n64 30\n103 73\n114 104\n58 10\n2 14\n111 56\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v150e210.gml",
    "content": "graph\n[\n    node\n    [\n        id    0\n        label    \"\"\n        graphics\n        [\n            x    363.54\n            y    946.37\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    1\n        label    \"\"\n        graphics\n        [\n            x    968.62\n            y    14.19\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    2\n        label    \"\"\n        graphics\n        [\n            x    868.99\n            y    1091.26\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    3\n        label    \"\"\n        graphics\n        [\n            x    245.35\n            y    913.26\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    4\n        label    \"\"\n        graphics\n        [\n            x    69.35\n            y    299.72\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    5\n        label    \"\"\n        graphics\n        [\n            x    792.00\n            y    187.85\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    6\n        label    \"\"\n        graphics\n        [\n            x    756.81\n            y    122.60\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    7\n        label    \"\"\n        graphics\n        [\n            x    101.55\n            y    424.07\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    8\n        label    \"\"\n        graphics\n        [\n            x    827.29\n            y    11.93\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    9\n        label    \"\"\n        graphics\n        [\n            x    1087.44\n            y    1042.01\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    10\n        label    \"\"\n        graphics\n        [\n            x    1026.86\n            y    551.38\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    11\n        label    \"\"\n        graphics\n        [\n            x    683.67\n            y    982.86\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    12\n        label    \"\"\n        graphics\n        [\n            x    145.05\n            y    793.71\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    13\n        label    \"\"\n        graphics\n        [\n            x    592.81\n            y    1043.54\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    14\n        label    \"\"\n        graphics\n        [\n            x    190.32\n            y    114.55\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    15\n        label    \"\"\n        graphics\n        [\n            x    556.50\n            y    307.87\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    16\n        label    \"\"\n        graphics\n        [\n            x    551.96\n            y    1062.60\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    17\n        label    \"\"\n        graphics\n        [\n            x    611.43\n            y    967.61\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    18\n        label    \"\"\n        graphics\n        [\n            x    546.05\n            y    463.32\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    19\n        label    \"\"\n        graphics\n        [\n            x    132.49\n            y    61.47\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    20\n        label    \"\"\n        graphics\n        [\n            x    753.26\n            y    963.94\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    21\n        label    \"\"\n        graphics\n        [\n            x    105.35\n            y    498.46\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    22\n        label    \"\"\n        graphics\n        [\n            x    743.64\n            y    21.28\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    23\n        label    \"\"\n        graphics\n        [\n            x    889.57\n            y    691.46\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    24\n        label    \"\"\n        graphics\n        [\n            x    956.89\n            y    941.76\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    25\n        label    \"\"\n        graphics\n        [\n            x    702.42\n            y    222.24\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    26\n        label    \"\"\n        graphics\n        [\n            x    957.70\n            y    592.24\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    27\n        label    \"\"\n        graphics\n        [\n            x    432.10\n            y    633.75\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    28\n        label    \"\"\n        graphics\n        [\n            x    513.25\n            y    982.45\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    29\n        label    \"\"\n        graphics\n        [\n            x    1044.00\n            y    519.65\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    30\n        label    \"\"\n        graphics\n        [\n            x    543.14\n            y    1059.69\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    31\n        label    \"\"\n        graphics\n        [\n            x    528.01\n            y    392.70\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    32\n        label    \"\"\n        graphics\n        [\n            x    353.08\n            y    422.46\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    33\n        label    \"\"\n        graphics\n        [\n            x    74.57\n            y    151.46\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    34\n        label    \"\"\n        graphics\n        [\n            x    944.97\n            y    153.56\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    35\n        label    \"\"\n        graphics\n        [\n            x    255.95\n            y    677.82\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    36\n        label    \"\"\n        graphics\n        [\n            x    43.30\n            y    1030.76\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    37\n        label    \"\"\n        graphics\n        [\n            x    149.46\n            y    862.84\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    38\n        label    \"\"\n        graphics\n        [\n            x    411.70\n            y    269.60\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    39\n        label    \"\"\n        graphics\n        [\n            x    396.61\n            y    520.00\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    40\n        label    \"\"\n        graphics\n        [\n            x    454.23\n            y    925.54\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    41\n        label    \"\"\n        graphics\n        [\n            x    377.40\n            y    585.91\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    42\n        label    \"\"\n        graphics\n        [\n            x    404.51\n            y    555.91\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    43\n        label    \"\"\n        graphics\n        [\n            x    394.11\n            y    813.51\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    44\n        label    \"\"\n        graphics\n        [\n            x    937.51\n            y    8.45\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    45\n        label    \"\"\n        graphics\n        [\n            x    851.46\n            y    1058.23\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    46\n        label    \"\"\n        graphics\n        [\n            x    1001.19\n            y    458.91\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    47\n        label    \"\"\n        graphics\n        [\n            x    970.58\n            y    300.90\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    48\n        label    \"\"\n        graphics\n        [\n            x    409.54\n            y    665.56\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    49\n        label    \"\"\n        graphics\n        [\n            x    552.31\n            y    105.99\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    50\n        label    \"\"\n        graphics\n        [\n            x    728.71\n            y    271.82\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    51\n        label    \"\"\n        graphics\n        [\n            x    123.12\n            y    183.11\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    52\n        label    \"\"\n        graphics\n        [\n            x    338.21\n            y    1089.94\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    53\n        label    \"\"\n        graphics\n        [\n            x    180.42\n            y    18.84\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    54\n        label    \"\"\n        graphics\n        [\n            x    488.85\n            y    980.82\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    55\n        label    \"\"\n        graphics\n        [\n            x    609.08\n            y    164.21\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    56\n        label    \"\"\n        graphics\n        [\n            x    667.06\n            y    544.50\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    57\n        label    \"\"\n        graphics\n        [\n            x    444.94\n            y    453.44\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    58\n        label    \"\"\n        graphics\n        [\n            x    583.07\n            y    248.54\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    59\n        label    \"\"\n        graphics\n        [\n            x    729.60\n            y    113.65\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    60\n        label    \"\"\n        graphics\n        [\n            x    505.94\n            y    548.41\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    61\n        label    \"\"\n        graphics\n        [\n            x    1065.14\n            y    4.05\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    62\n        label    \"\"\n        graphics\n        [\n            x    376.32\n            y    1093.41\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    63\n        label    \"\"\n        graphics\n        [\n            x    862.72\n            y    84.41\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    64\n        label    \"\"\n        graphics\n        [\n            x    500.38\n            y    786.95\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    65\n        label    \"\"\n        graphics\n        [\n            x    996.72\n            y    282.62\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    66\n        label    \"\"\n        graphics\n        [\n            x    910.75\n            y    835.33\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    67\n        label    \"\"\n        graphics\n        [\n            x    300.79\n            y    180.59\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    68\n        label    \"\"\n        graphics\n        [\n            x    332.93\n            y    91.13\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    69\n        label    \"\"\n        graphics\n        [\n            x    203.82\n            y    732.09\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    70\n        label    \"\"\n        graphics\n        [\n            x    293.65\n            y    380.06\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    71\n        label    \"\"\n        graphics\n        [\n            x    455.89\n            y    558.15\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    72\n        label    \"\"\n        graphics\n        [\n            x    134.57\n            y    632.25\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    73\n        label    \"\"\n        graphics\n        [\n            x    69.65\n            y    984.54\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    74\n        label    \"\"\n        graphics\n        [\n            x    846.72\n            y    654.36\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    75\n        label    \"\"\n        graphics\n        [\n            x    301.78\n            y    563.73\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    76\n        label    \"\"\n        graphics\n        [\n            x    658.85\n            y    172.15\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    77\n        label    \"\"\n        graphics\n        [\n            x    798.12\n            y    813.62\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    78\n        label    \"\"\n        graphics\n        [\n            x    574.73\n            y    785.88\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    79\n        label    \"\"\n        graphics\n        [\n            x    768.43\n            y    517.83\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    80\n        label    \"\"\n        graphics\n        [\n            x    1084.66\n            y    352.44\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    81\n        label    \"\"\n        graphics\n        [\n            x    995.06\n            y    21.49\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    82\n        label    \"\"\n        graphics\n        [\n            x    80.87\n            y    39.90\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    83\n        label    \"\"\n        graphics\n        [\n            x    77.99\n            y    789.89\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    84\n        label    \"\"\n        graphics\n        [\n            x    493.88\n            y    767.17\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    85\n        label    \"\"\n        graphics\n        [\n            x    23.85\n            y    277.65\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    86\n        label    \"\"\n        graphics\n        [\n            x    1050.42\n            y    353.31\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    87\n        label    \"\"\n        graphics\n        [\n            x    75.61\n            y    624.17\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    88\n        label    \"\"\n        graphics\n        [\n            x    699.48\n            y    806.95\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    89\n        label    \"\"\n        graphics\n        [\n            x    524.69\n            y    335.07\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    90\n        label    \"\"\n        graphics\n        [\n            x    738.34\n            y    650.42\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    91\n        label    \"\"\n        graphics\n        [\n            x    690.85\n            y    618.65\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    92\n        label    \"\"\n        graphics\n        [\n            x    292.45\n            y    579.28\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    93\n        label    \"\"\n        graphics\n        [\n            x    814.77\n            y    40.88\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    94\n        label    \"\"\n        graphics\n        [\n            x    139.72\n            y    607.40\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    95\n        label    \"\"\n        graphics\n        [\n            x    491.58\n            y    582.83\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    96\n        label    \"\"\n        graphics\n        [\n            x    922.57\n            y    210.58\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    97\n        label    \"\"\n        graphics\n        [\n            x    1008.49\n            y    4.04\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    98\n        label    \"\"\n        graphics\n        [\n            x    943.45\n            y    63.37\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    99\n        label    \"\"\n        graphics\n        [\n            x    917.39\n            y    443.70\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    100\n        label    \"\"\n        graphics\n        [\n            x    804.83\n            y    512.48\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    101\n        label    \"\"\n        graphics\n        [\n            x    892.49\n            y    151.32\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    102\n        label    \"\"\n        graphics\n        [\n            x    470.08\n            y    209.61\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    103\n        label    \"\"\n        graphics\n        [\n            x    1074.72\n            y    471.30\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    104\n        label    \"\"\n        graphics\n        [\n            x    679.22\n            y    1095.76\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    105\n        label    \"\"\n        graphics\n        [\n            x    959.87\n            y    586.25\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    106\n        label    \"\"\n        graphics\n        [\n            x    73.73\n            y    143.57\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    107\n        label    \"\"\n        graphics\n        [\n            x    450.28\n            y    923.25\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    108\n        label    \"\"\n        graphics\n        [\n            x    359.48\n            y    771.59\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    109\n        label    \"\"\n        graphics\n        [\n            x    300.58\n            y    862.61\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    110\n        label    \"\"\n        graphics\n        [\n            x    36.25\n            y    301.55\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    111\n        label    \"\"\n        graphics\n        [\n            x    2.06\n            y    570.75\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    112\n        label    \"\"\n        graphics\n        [\n            x    72.12\n            y    821.95\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    113\n        label    \"\"\n        graphics\n        [\n            x    731.36\n            y    541.75\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    114\n        label    \"\"\n        graphics\n        [\n            x    172.52\n            y    38.41\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    115\n        label    \"\"\n        graphics\n        [\n            x    1068.24\n            y    102.08\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    116\n        label    \"\"\n        graphics\n        [\n            x    893.46\n            y    343.50\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    117\n        label    \"\"\n        graphics\n        [\n            x    726.90\n            y    735.92\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    118\n        label    \"\"\n        graphics\n        [\n            x    956.63\n            y    933.64\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    119\n        label    \"\"\n        graphics\n        [\n            x    850.70\n            y    1070.21\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    120\n        label    \"\"\n        graphics\n        [\n            x    311.71\n            y    469.05\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    121\n        label    \"\"\n        graphics\n        [\n            x    437.43\n            y    832.54\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    122\n        label    \"\"\n        graphics\n        [\n            x    888.60\n            y    534.99\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    123\n        label    \"\"\n        graphics\n        [\n            x    208.62\n            y    651.07\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    124\n        label    \"\"\n        graphics\n        [\n            x    763.39\n            y    254.24\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    125\n        label    \"\"\n        graphics\n        [\n            x    144.84\n            y    123.97\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    126\n        label    \"\"\n        graphics\n        [\n            x    1097.17\n            y    513.10\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    127\n        label    \"\"\n        graphics\n        [\n            x    761.34\n            y    448.22\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    128\n        label    \"\"\n        graphics\n        [\n            x    88.03\n            y    833.02\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    129\n        label    \"\"\n        graphics\n        [\n            x    175.93\n            y    697.20\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    130\n        label    \"\"\n        graphics\n        [\n            x    45.51\n            y    677.69\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    131\n        label    \"\"\n        graphics\n        [\n            x    881.79\n            y    84.27\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    132\n        label    \"\"\n        graphics\n        [\n            x    96.85\n            y    990.92\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    133\n        label    \"\"\n        graphics\n        [\n            x    44.80\n            y    111.06\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    134\n        label    \"\"\n        graphics\n        [\n            x    878.77\n            y    927.92\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    135\n        label    \"\"\n        graphics\n        [\n            x    338.39\n            y    78.88\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    136\n        label    \"\"\n        graphics\n        [\n            x    305.44\n            y    55.46\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    137\n        label    \"\"\n        graphics\n        [\n            x    315.32\n            y    861.32\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    138\n        label    \"\"\n        graphics\n        [\n            x    905.68\n            y    504.59\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    139\n        label    \"\"\n        graphics\n        [\n            x    604.01\n            y    579.15\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    140\n        label    \"\"\n        graphics\n        [\n            x    607.97\n            y    953.59\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    141\n        label    \"\"\n        graphics\n        [\n            x    532.17\n            y    10.19\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    142\n        label    \"\"\n        graphics\n        [\n            x    140.04\n            y    853.54\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    143\n        label    \"\"\n        graphics\n        [\n            x    533.88\n            y    578.05\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    144\n        label    \"\"\n        graphics\n        [\n            x    497.62\n            y    152.57\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    145\n        label    \"\"\n        graphics\n        [\n            x    275.03\n            y    1014.38\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    146\n        label    \"\"\n        graphics\n        [\n            x    475.76\n            y    7.05\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    147\n        label    \"\"\n        graphics\n        [\n            x    40.96\n            y    96.79\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    148\n        label    \"\"\n        graphics\n        [\n            x    16.32\n            y    963.79\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    149\n        label    \"\"\n        graphics\n        [\n            x    972.63\n            y    26.91\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    edge\n    [\n        source    1\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    10\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    100\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    101\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    101\n        target    69\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    102\n        target    36\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    102\n        target    99\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    103\n        target    37\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    103\n        target    61\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    103\n        target    72\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    104\n        target    47\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    105\n        target    66\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    106\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    106\n        target    29\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    107\n        target    90\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    108\n        target    20\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    109\n        target    28\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    109\n        target    30\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    11\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    110\n        target    54\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    111\n        target    69\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    112\n        target    74\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    113\n        target    85\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    114\n        target    29\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    114\n        target    57\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    115\n        target    62\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    116\n        target    79\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    117\n        target    113\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    118\n        target    28\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    118\n        target    79\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    119\n        target    100\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    119\n        target    19\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    12\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    120\n        target    106\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    121\n        target    102\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    122\n        target    62\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    123\n        target    80\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    124\n        target    87\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    125\n        target    20\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    126\n        target    50\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    126\n        target    69\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    127\n        target    34\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    128\n        target    71\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    129\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    129\n        target    34\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    13\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    130\n        target    123\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    131\n        target    73\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    132\n        target    25\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    132\n        target    45\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    133\n        target    115\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    134\n        target    108\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    134\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    135\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    135\n        target    92\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    136\n        target    105\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    137\n        target    27\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    137\n        target    49\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    137\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    138\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    138\n        target    58\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    139\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    14\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    140\n        target    58\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    141\n        target    72\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    142\n        target    32\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    142\n        target    61\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    143\n        target    75\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    144\n        target    57\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    145\n        target    58\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    145\n        target    87\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    146\n        target    124\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    147\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    148\n        target    67\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    149\n        target    112\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    15\n        target    113\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    15\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    16\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    17\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    18\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    19\n        target    130\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    19\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    2\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    20\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    20\n        target    91\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    21\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    22\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    22\n        target    132\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    22\n        target    20\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    22\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    23\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    24\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    25\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    26\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    27\n        target    108\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    27\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    28\n        target    135\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    28\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    29\n        target    24\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    3\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    3\n        target    71\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    30\n        target    24\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    30\n        target    37\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    31\n        target    27\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    32\n        target    111\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    32\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    32\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    33\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    34\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    34\n        target    147\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    34\n        target    31\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    35\n        target    25\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    36\n        target    34\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    37\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    38\n        target    29\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    38\n        target    30\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    39\n        target    36\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    39\n        target    41\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    4\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    40\n        target    20\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    41\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    42\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    43\n        target    42\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    44\n        target    101\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    44\n        target    35\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    44\n        target    43\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    45\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    46\n        target    47\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    46\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    47\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    47\n        target    80\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    48\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    49\n        target    30\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    5\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    50\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    51\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    52\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    53\n        target    44\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    54\n        target    51\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    55\n        target    24\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    56\n        target    53\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    57\n        target    39\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    58\n        target    56\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    59\n        target    31\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    59\n        target    37\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    6\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    60\n        target    19\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    61\n        target    133\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    61\n        target    49\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    62\n        target    43\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    63\n        target    44\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    64\n        target    42\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    65\n        target    57\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    66\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    67\n        target    43\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    67\n        target    62\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    68\n        target    64\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    69\n        target    110\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    69\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    7\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    70\n        target    29\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    71\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    71\n        target    123\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    71\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    72\n        target    47\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    72\n        target    66\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    73\n        target    105\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    73\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    74\n        target    34\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    75\n        target    32\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    76\n        target    102\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    76\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    77\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    77\n        target    71\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    78\n        target    33\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    79\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    8\n        target    133\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    8\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    80\n        target    36\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    80\n        target    48\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    81\n        target    58\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    81\n        target    60\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    82\n        target    50\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    82\n        target    59\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    83\n        target    68\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    84\n        target    79\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    85\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    86\n        target    37\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    87\n        target    64\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    88\n        target    62\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    88\n        target    71\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    89\n        target    87\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    9\n        target    142\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    9\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    90\n        target    130\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    90\n        target    61\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    91\n        target    47\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    91\n        target    65\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    92\n        target    78\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    93\n        target    81\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    94\n        target    83\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    95\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    95\n        target    92\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    96\n        target    100\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    96\n        target    90\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    97\n        target    27\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    98\n        target    136\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    98\n        target    90\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    99\n        target    27\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    99\n        target    78\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n]\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v150e210.tglf",
    "content": "0 363.000 946.000 30.000 30.000\n1 968.000 14.000 30.000 30.000\n2 868.000 1091.000 30.000 30.000\n3 245.000 913.000 30.000 30.000\n4 69.000 299.000 30.000 30.000\n5 792.000 187.000 30.000 30.000\n6 756.000 122.000 30.000 30.000\n7 101.000 424.000 30.000 30.000\n8 827.000 11.000 30.000 30.000\n9 1087.000 1042.000 30.000 30.000\n10 1026.000 551.000 30.000 30.000\n11 683.000 982.000 30.000 30.000\n12 145.000 793.000 30.000 30.000\n13 592.000 1043.000 30.000 30.000\n14 190.000 114.000 30.000 30.000\n15 556.000 307.000 30.000 30.000\n16 551.000 1062.000 30.000 30.000\n17 611.000 967.000 30.000 30.000\n18 546.000 463.000 30.000 30.000\n19 132.000 61.000 30.000 30.000\n20 753.000 963.000 30.000 30.000\n21 105.000 498.000 30.000 30.000\n22 743.000 21.000 30.000 30.000\n23 889.000 691.000 30.000 30.000\n24 956.000 941.000 30.000 30.000\n25 702.000 222.000 30.000 30.000\n26 957.000 592.000 30.000 30.000\n27 432.000 633.000 30.000 30.000\n28 513.000 982.000 30.000 30.000\n29 1044.000 519.000 30.000 30.000\n30 543.000 1059.000 30.000 30.000\n31 528.000 392.000 30.000 30.000\n32 353.000 422.000 30.000 30.000\n33 74.000 151.000 30.000 30.000\n34 944.000 153.000 30.000 30.000\n35 255.000 677.000 30.000 30.000\n36 43.000 1030.000 30.000 30.000\n37 149.000 862.000 30.000 30.000\n38 411.000 269.000 30.000 30.000\n39 396.000 520.000 30.000 30.000\n40 454.000 925.000 30.000 30.000\n41 377.000 585.000 30.000 30.000\n42 404.000 555.000 30.000 30.000\n43 394.000 813.000 30.000 30.000\n44 937.000 8.000 30.000 30.000\n45 851.000 1058.000 30.000 30.000\n46 1001.000 458.000 30.000 30.000\n47 970.000 300.000 30.000 30.000\n48 409.000 665.000 30.000 30.000\n49 552.000 105.000 30.000 30.000\n50 728.000 271.000 30.000 30.000\n51 123.000 183.000 30.000 30.000\n52 338.000 1089.000 30.000 30.000\n53 180.000 18.000 30.000 30.000\n54 488.000 980.000 30.000 30.000\n55 609.000 164.000 30.000 30.000\n56 667.000 544.000 30.000 30.000\n57 444.000 453.000 30.000 30.000\n58 583.000 248.000 30.000 30.000\n59 729.000 113.000 30.000 30.000\n60 505.000 548.000 30.000 30.000\n61 1065.000 4.000 30.000 30.000\n62 376.000 1093.000 30.000 30.000\n63 862.000 84.000 30.000 30.000\n64 500.000 786.000 30.000 30.000\n65 996.000 282.000 30.000 30.000\n66 910.000 835.000 30.000 30.000\n67 300.000 180.000 30.000 30.000\n68 332.000 91.000 30.000 30.000\n69 203.000 732.000 30.000 30.000\n70 293.000 380.000 30.000 30.000\n71 455.000 558.000 30.000 30.000\n72 134.000 632.000 30.000 30.000\n73 69.000 984.000 30.000 30.000\n74 846.000 654.000 30.000 30.000\n75 301.000 563.000 30.000 30.000\n76 658.000 172.000 30.000 30.000\n77 798.000 813.000 30.000 30.000\n78 574.000 785.000 30.000 30.000\n79 768.000 517.000 30.000 30.000\n80 1084.000 352.000 30.000 30.000\n81 995.000 21.000 30.000 30.000\n82 80.000 39.000 30.000 30.000\n83 77.000 789.000 30.000 30.000\n84 493.000 767.000 30.000 30.000\n85 23.000 277.000 30.000 30.000\n86 1050.000 353.000 30.000 30.000\n87 75.000 624.000 30.000 30.000\n88 699.000 806.000 30.000 30.000\n89 524.000 335.000 30.000 30.000\n90 738.000 650.000 30.000 30.000\n91 690.000 618.000 30.000 30.000\n92 292.000 579.000 30.000 30.000\n93 814.000 40.000 30.000 30.000\n94 139.000 607.000 30.000 30.000\n95 491.000 582.000 30.000 30.000\n96 922.000 210.000 30.000 30.000\n97 1008.000 4.000 30.000 30.000\n98 943.000 63.000 30.000 30.000\n99 917.000 443.000 30.000 30.000\n100 804.000 512.000 30.000 30.000\n101 892.000 151.000 30.000 30.000\n102 470.000 209.000 30.000 30.000\n103 1074.000 471.000 30.000 30.000\n104 679.000 1095.000 30.000 30.000\n105 959.000 586.000 30.000 30.000\n106 73.000 143.000 30.000 30.000\n107 450.000 923.000 30.000 30.000\n108 359.000 771.000 30.000 30.000\n109 300.000 862.000 30.000 30.000\n110 36.000 301.000 30.000 30.000\n111 2.000 570.000 30.000 30.000\n112 72.000 821.000 30.000 30.000\n113 731.000 541.000 30.000 30.000\n114 172.000 38.000 30.000 30.000\n115 1068.000 102.000 30.000 30.000\n116 893.000 343.000 30.000 30.000\n117 726.000 735.000 30.000 30.000\n118 956.000 933.000 30.000 30.000\n119 850.000 1070.000 30.000 30.000\n120 311.000 469.000 30.000 30.000\n121 437.000 832.000 30.000 30.000\n122 888.000 534.000 30.000 30.000\n123 208.000 651.000 30.000 30.000\n124 763.000 254.000 30.000 30.000\n125 144.000 123.000 30.000 30.000\n126 1097.000 513.000 30.000 30.000\n127 761.000 448.000 30.000 30.000\n128 88.000 833.000 30.000 30.000\n129 175.000 697.000 30.000 30.000\n130 45.000 677.000 30.000 30.000\n131 881.000 84.000 30.000 30.000\n132 96.000 990.000 30.000 30.000\n133 44.000 111.000 30.000 30.000\n134 878.000 927.000 30.000 30.000\n135 338.000 78.000 30.000 30.000\n136 305.000 55.000 30.000 30.000\n137 315.000 861.000 30.000 30.000\n138 905.000 504.000 30.000 30.000\n139 604.000 579.000 30.000 30.000\n140 607.000 953.000 30.000 30.000\n141 532.000 10.000 30.000 30.000\n142 140.000 853.000 30.000 30.000\n143 533.000 578.000 30.000 30.000\n144 497.000 152.000 30.000 30.000\n145 275.000 1014.000 30.000 30.000\n146 475.000 7.000 30.000 30.000\n147 40.000 96.000 30.000 30.000\n148 16.000 963.000 30.000 30.000\n149 972.000 26.000 30.000 30.000\n#\n32 9\n114 57\n34 13\n83 68\n93 81\n2 1\n130 123\n30 24\n3 0\n124 87\n6 4\n47 80\n149 112\n43 42\n113 85\n106 29\n137 8\n115 62\n10 3\n95 12\n15 9\n50 9\n90 130\n95 92\n135 14\n134 7\n60 19\n128 71\n129 13\n142 32\n117 113\n121 102\n148 67\n9 8\n84 79\n77 12\n14 2\n73 8\n81 60\n140 58\n101 69\n76 6\n145 58\n109 30\n30 37\n23 1\n44 43\n21 3\n119 100\n66 21\n36 34\n139 18\n116 79\n40 20\n114 29\n59 37\n15 113\n135 92\n72 47\n65 57\n133 115\n45 21\n103 37\n94 83\n90 61\n25 10\n81 58\n31 27\n138 23\n85 15\n143 75\n120 106\n57 39\n104 47\n77 71\n33 2\n71 10\n99 27\n38 30\n20 91\n26 4\n132 45\n119 19\n92 78\n17 2\n34 31\n32 111\n89 87\n19 16\n111 69\n61 133\n39 36\n106 21\n69 6\n136 105\n86 37\n28 135\n8 7\n110 54\n47 7\n126 50\n147 12\n19 130\n62 43\n80 36\n99 78\n107 90\n7 3\n72 66\n96 100\n9 142\n88 71\n134 108\n91 47\n70 29\n12 9\n5 2\n3 71\n98 90\n16 7\n102 36\n127 34\n27 6\n82 59\n144 57\n109 28\n71 123\n54 51\n76 102\n71 7\n37 15\n29 24\n46 47\n52 7\n69 110\n118 28\n18 10\n48 7\n138 58\n68 64\n141 72\n73 105\n20 13\n24 14\n1 0\n142 61\n75 32\n42 16\n49 30\n146 124\n103 72\n39 41\n51 5\n56 53\n122 62\n28 6\n132 25\n4 3\n27 108\n41 0\n103 61\n22 132\n44 35\n46 6\n98 136\n123 80\n8 133\n91 65\n137 27\n22 11\n34 147\n131 73\n88 62\n53 44\n55 24\n80 48\n82 50\n112 74\n59 31\n137 49\n126 69\n101 21\n96 90\n74 34\n44 101\n22 20\n87 64\n58 56\n145 87\n105 66\n63 44\n100 14\n64 42\n97 27\n61 49\n22 9\n78 33\n35 25\n67 43\n11 7\n67 62\n118 79\n102 99\n125 20\n129 34\n38 29\n32 3\n108 20\n79 16\n13 12\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v150e225.gml",
    "content": "graph\n[\n    node\n    [\n        id    0\n        label    \"\"\n        graphics\n        [\n            x    1045.60\n            y    845.75\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    1\n        label    \"\"\n        graphics\n        [\n            x    498.84\n            y    260.09\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    2\n        label    \"\"\n        graphics\n        [\n            x    659.09\n            y    888.90\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    3\n        label    \"\"\n        graphics\n        [\n            x    401.33\n            y    170.65\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    4\n        label    \"\"\n        graphics\n        [\n            x    89.49\n            y    9.02\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    5\n        label    \"\"\n        graphics\n        [\n            x    242.16\n            y    633.08\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    6\n        label    \"\"\n        graphics\n        [\n            x    356.94\n            y    1064.23\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    7\n        label    \"\"\n        graphics\n        [\n            x    431.76\n            y    868.91\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    8\n        label    \"\"\n        graphics\n        [\n            x    200.68\n            y    263.90\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    9\n        label    \"\"\n        graphics\n        [\n            x    900.89\n            y    398.04\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    10\n        label    \"\"\n        graphics\n        [\n            x    431.93\n            y    726.57\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    11\n        label    \"\"\n        graphics\n        [\n            x    282.09\n            y    1040.26\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    12\n        label    \"\"\n        graphics\n        [\n            x    259.86\n            y    933.30\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    13\n        label    \"\"\n        graphics\n        [\n            x    380.29\n            y    343.68\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    14\n        label    \"\"\n        graphics\n        [\n            x    0.81\n            y    576.25\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    15\n        label    \"\"\n        graphics\n        [\n            x    877.90\n            y    127.67\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    16\n        label    \"\"\n        graphics\n        [\n            x    373.77\n            y    317.65\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    17\n        label    \"\"\n        graphics\n        [\n            x    526.78\n            y    1037.95\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    18\n        label    \"\"\n        graphics\n        [\n            x    523.35\n            y    756.08\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    19\n        label    \"\"\n        graphics\n        [\n            x    844.14\n            y    313.99\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    20\n        label    \"\"\n        graphics\n        [\n            x    834.83\n            y    296.54\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    21\n        label    \"\"\n        graphics\n        [\n            x    299.36\n            y    246.31\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    22\n        label    \"\"\n        graphics\n        [\n            x    108.79\n            y    595.58\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    23\n        label    \"\"\n        graphics\n        [\n            x    11.60\n            y    1015.99\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    24\n        label    \"\"\n        graphics\n        [\n            x    79.37\n            y    892.73\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    25\n        label    \"\"\n        graphics\n        [\n            x    743.61\n            y    701.92\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    26\n        label    \"\"\n        graphics\n        [\n            x    1102.02\n            y    97.06\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    27\n        label    \"\"\n        graphics\n        [\n            x    445.94\n            y    427.95\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    28\n        label    \"\"\n        graphics\n        [\n            x    32.21\n            y    122.70\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    29\n        label    \"\"\n        graphics\n        [\n            x    139.29\n            y    516.06\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    30\n        label    \"\"\n        graphics\n        [\n            x    365.71\n            y    990.94\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    31\n        label    \"\"\n        graphics\n        [\n            x    742.36\n            y    508.19\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    32\n        label    \"\"\n        graphics\n        [\n            x    371.08\n            y    153.65\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    33\n        label    \"\"\n        graphics\n        [\n            x    555.54\n            y    849.08\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    34\n        label    \"\"\n        graphics\n        [\n            x    486.84\n            y    796.06\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    35\n        label    \"\"\n        graphics\n        [\n            x    784.11\n            y    105.85\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    36\n        label    \"\"\n        graphics\n        [\n            x    382.87\n            y    319.02\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    37\n        label    \"\"\n        graphics\n        [\n            x    579.99\n            y    248.92\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    38\n        label    \"\"\n        graphics\n        [\n            x    874.45\n            y    735.12\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    39\n        label    \"\"\n        graphics\n        [\n            x    961.50\n            y    920.25\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    40\n        label    \"\"\n        graphics\n        [\n            x    849.92\n            y    958.68\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    41\n        label    \"\"\n        graphics\n        [\n            x    513.85\n            y    862.70\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    42\n        label    \"\"\n        graphics\n        [\n            x    1084.61\n            y    86.04\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    43\n        label    \"\"\n        graphics\n        [\n            x    1075.60\n            y    417.09\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    44\n        label    \"\"\n        graphics\n        [\n            x    229.21\n            y    618.57\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    45\n        label    \"\"\n        graphics\n        [\n            x    714.89\n            y    56.55\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    46\n        label    \"\"\n        graphics\n        [\n            x    919.93\n            y    602.55\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    47\n        label    \"\"\n        graphics\n        [\n            x    112.85\n            y    766.11\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    48\n        label    \"\"\n        graphics\n        [\n            x    955.12\n            y    162.88\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    49\n        label    \"\"\n        graphics\n        [\n            x    132.82\n            y    901.61\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    50\n        label    \"\"\n        graphics\n        [\n            x    359.63\n            y    988.59\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    51\n        label    \"\"\n        graphics\n        [\n            x    1020.79\n            y    94.18\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    52\n        label    \"\"\n        graphics\n        [\n            x    443.98\n            y    12.30\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    53\n        label    \"\"\n        graphics\n        [\n            x    265.09\n            y    470.25\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    54\n        label    \"\"\n        graphics\n        [\n            x    670.80\n            y    275.94\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    55\n        label    \"\"\n        graphics\n        [\n            x    759.64\n            y    134.32\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    56\n        label    \"\"\n        graphics\n        [\n            x    982.96\n            y    1031.45\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    57\n        label    \"\"\n        graphics\n        [\n            x    496.87\n            y    579.82\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    58\n        label    \"\"\n        graphics\n        [\n            x    671.42\n            y    1069.27\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    59\n        label    \"\"\n        graphics\n        [\n            x    520.26\n            y    851.22\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    60\n        label    \"\"\n        graphics\n        [\n            x    119.17\n            y    89.94\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    61\n        label    \"\"\n        graphics\n        [\n            x    526.94\n            y    444.18\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    62\n        label    \"\"\n        graphics\n        [\n            x    611.63\n            y    919.29\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    63\n        label    \"\"\n        graphics\n        [\n            x    166.29\n            y    700.74\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    64\n        label    \"\"\n        graphics\n        [\n            x    709.23\n            y    27.84\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    65\n        label    \"\"\n        graphics\n        [\n            x    510.16\n            y    300.15\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    66\n        label    \"\"\n        graphics\n        [\n            x    373.83\n            y    846.28\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    67\n        label    \"\"\n        graphics\n        [\n            x    1028.67\n            y    73.97\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    68\n        label    \"\"\n        graphics\n        [\n            x    226.53\n            y    904.38\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    69\n        label    \"\"\n        graphics\n        [\n            x    193.89\n            y    35.73\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    70\n        label    \"\"\n        graphics\n        [\n            x    106.68\n            y    252.77\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    71\n        label    \"\"\n        graphics\n        [\n            x    1081.06\n            y    128.61\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    72\n        label    \"\"\n        graphics\n        [\n            x    109.65\n            y    480.89\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    73\n        label    \"\"\n        graphics\n        [\n            x    585.85\n            y    381.86\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    74\n        label    \"\"\n        graphics\n        [\n            x    870.68\n            y    1090.13\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    75\n        label    \"\"\n        graphics\n        [\n            x    943.25\n            y    37.44\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    76\n        label    \"\"\n        graphics\n        [\n            x    378.48\n            y    727.35\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    77\n        label    \"\"\n        graphics\n        [\n            x    719.01\n            y    521.83\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    78\n        label    \"\"\n        graphics\n        [\n            x    244.44\n            y    70.51\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    79\n        label    \"\"\n        graphics\n        [\n            x    192.18\n            y    805.34\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    80\n        label    \"\"\n        graphics\n        [\n            x    313.50\n            y    769.15\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    81\n        label    \"\"\n        graphics\n        [\n            x    149.42\n            y    392.37\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    82\n        label    \"\"\n        graphics\n        [\n            x    349.90\n            y    308.72\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    83\n        label    \"\"\n        graphics\n        [\n            x    612.58\n            y    328.80\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    84\n        label    \"\"\n        graphics\n        [\n            x    115.37\n            y    533.48\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    85\n        label    \"\"\n        graphics\n        [\n            x    228.74\n            y    314.92\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    86\n        label    \"\"\n        graphics\n        [\n            x    45.47\n            y    861.85\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    87\n        label    \"\"\n        graphics\n        [\n            x    1019.54\n            y    924.48\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    88\n        label    \"\"\n        graphics\n        [\n            x    480.23\n            y    303.72\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    89\n        label    \"\"\n        graphics\n        [\n            x    456.77\n            y    163.68\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    90\n        label    \"\"\n        graphics\n        [\n            x    886.53\n            y    1057.05\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    91\n        label    \"\"\n        graphics\n        [\n            x    23.48\n            y    228.99\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    92\n        label    \"\"\n        graphics\n        [\n            x    194.26\n            y    418.44\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    93\n        label    \"\"\n        graphics\n        [\n            x    95.23\n            y    383.30\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    94\n        label    \"\"\n        graphics\n        [\n            x    287.78\n            y    915.48\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    95\n        label    \"\"\n        graphics\n        [\n            x    1082.83\n            y    1012.75\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    96\n        label    \"\"\n        graphics\n        [\n            x    477.66\n            y    19.85\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    97\n        label    \"\"\n        graphics\n        [\n            x    1066.43\n            y    885.07\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    98\n        label    \"\"\n        graphics\n        [\n            x    533.02\n            y    53.93\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    99\n        label    \"\"\n        graphics\n        [\n            x    944.87\n            y    314.59\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    100\n        label    \"\"\n        graphics\n        [\n            x    475.65\n            y    33.83\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    101\n        label    \"\"\n        graphics\n        [\n            x    740.00\n            y    546.96\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    102\n        label    \"\"\n        graphics\n        [\n            x    352.38\n            y    803.54\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    103\n        label    \"\"\n        graphics\n        [\n            x    143.26\n            y    780.20\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    104\n        label    \"\"\n        graphics\n        [\n            x    307.75\n            y    649.18\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    105\n        label    \"\"\n        graphics\n        [\n            x    875.87\n            y    112.68\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    106\n        label    \"\"\n        graphics\n        [\n            x    740.06\n            y    971.15\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    107\n        label    \"\"\n        graphics\n        [\n            x    1050.05\n            y    214.56\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    108\n        label    \"\"\n        graphics\n        [\n            x    521.12\n            y    684.97\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    109\n        label    \"\"\n        graphics\n        [\n            x    607.97\n            y    953.07\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    110\n        label    \"\"\n        graphics\n        [\n            x    1009.11\n            y    962.05\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    111\n        label    \"\"\n        graphics\n        [\n            x    337.69\n            y    767.50\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    112\n        label    \"\"\n        graphics\n        [\n            x    1092.87\n            y    994.61\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    113\n        label    \"\"\n        graphics\n        [\n            x    662.70\n            y    989.48\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    114\n        label    \"\"\n        graphics\n        [\n            x    409.84\n            y    1011.40\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    115\n        label    \"\"\n        graphics\n        [\n            x    645.62\n            y    719.81\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    116\n        label    \"\"\n        graphics\n        [\n            x    496.90\n            y    1063.52\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    117\n        label    \"\"\n        graphics\n        [\n            x    644.66\n            y    490.52\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    118\n        label    \"\"\n        graphics\n        [\n            x    158.76\n            y    474.99\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    119\n        label    \"\"\n        graphics\n        [\n            x    938.58\n            y    3.24\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    120\n        label    \"\"\n        graphics\n        [\n            x    1068.24\n            y    338.94\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    121\n        label    \"\"\n        graphics\n        [\n            x    777.29\n            y    790.72\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    122\n        label    \"\"\n        graphics\n        [\n            x    841.48\n            y    540.34\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    123\n        label    \"\"\n        graphics\n        [\n            x    862.87\n            y    926.60\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    124\n        label    \"\"\n        graphics\n        [\n            x    326.98\n            y    471.27\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    125\n        label    \"\"\n        graphics\n        [\n            x    224.19\n            y    534.64\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    126\n        label    \"\"\n        graphics\n        [\n            x    316.17\n            y    108.88\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    127\n        label    \"\"\n        graphics\n        [\n            x    406.63\n            y    858.80\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    128\n        label    \"\"\n        graphics\n        [\n            x    798.42\n            y    150.65\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    129\n        label    \"\"\n        graphics\n        [\n            x    443.02\n            y    349.51\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    130\n        label    \"\"\n        graphics\n        [\n            x    715.88\n            y    905.47\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    131\n        label    \"\"\n        graphics\n        [\n            x    874.97\n            y    925.51\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    132\n        label    \"\"\n        graphics\n        [\n            x    115.29\n            y    916.17\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    133\n        label    \"\"\n        graphics\n        [\n            x    763.50\n            y    30.34\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    134\n        label    \"\"\n        graphics\n        [\n            x    762.66\n            y    604.12\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    135\n        label    \"\"\n        graphics\n        [\n            x    801.78\n            y    700.80\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    136\n        label    \"\"\n        graphics\n        [\n            x    883.21\n            y    535.75\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    137\n        label    \"\"\n        graphics\n        [\n            x    910.45\n            y    477.46\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    138\n        label    \"\"\n        graphics\n        [\n            x    35.20\n            y    401.06\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    139\n        label    \"\"\n        graphics\n        [\n            x    641.42\n            y    875.23\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    140\n        label    \"\"\n        graphics\n        [\n            x    342.49\n            y    521.67\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    141\n        label    \"\"\n        graphics\n        [\n            x    8.55\n            y    862.59\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    142\n        label    \"\"\n        graphics\n        [\n            x    816.05\n            y    284.52\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    143\n        label    \"\"\n        graphics\n        [\n            x    439.89\n            y    656.84\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    144\n        label    \"\"\n        graphics\n        [\n            x    950.81\n            y    908.97\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    145\n        label    \"\"\n        graphics\n        [\n            x    1018.29\n            y    320.54\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    146\n        label    \"\"\n        graphics\n        [\n            x    547.09\n            y    473.37\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    147\n        label    \"\"\n        graphics\n        [\n            x    520.70\n            y    987.31\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    148\n        label    \"\"\n        graphics\n        [\n            x    931.37\n            y    174.68\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    149\n        label    \"\"\n        graphics\n        [\n            x    433.16\n            y    550.04\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    edge\n    [\n        source    0\n        target    127\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    0\n        target    81\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    1\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    10\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    10\n        target    110\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    100\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    101\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    101\n        target    69\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    102\n        target    54\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    103\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    104\n        target    101\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    104\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    105\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    106\n        target    48\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    107\n        target    45\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    108\n        target    107\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    109\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    11\n        target    113\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    11\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    110\n        target    80\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    111\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    112\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    113\n        target    48\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    113\n        target    50\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    114\n        target    20\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    114\n        target    34\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    115\n        target    104\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    115\n        target    108\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    116\n        target    28\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    117\n        target    123\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    117\n        target    32\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    118\n        target    96\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    119\n        target    63\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    12\n        target    53\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    12\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    120\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    121\n        target    44\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    121\n        target    80\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    122\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    123\n        target    104\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    123\n        target    145\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    124\n        target    75\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    125\n        target    50\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    126\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    127\n        target    118\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    128\n        target    113\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    129\n        target    111\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    129\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    13\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    130\n        target    121\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    131\n        target    95\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    132\n        target    103\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    133\n        target    129\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    133\n        target    86\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    134\n        target    99\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    135\n        target    127\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    136\n        target    43\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    137\n        target    132\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    137\n        target    72\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    138\n        target    136\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    139\n        target    109\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    139\n        target    73\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    14\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    140\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    141\n        target    62\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    141\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    142\n        target    83\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    142\n        target    87\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    143\n        target    121\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    143\n        target    82\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    144\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    144\n        target    32\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    144\n        target    56\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    145\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    145\n        target    31\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    145\n        target    66\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    146\n        target    126\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    146\n        target    48\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    147\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    148\n        target    114\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    148\n        target    140\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    149\n        target    119\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    149\n        target    25\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    15\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    15\n        target    39\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    16\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    17\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    17\n        target    86\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    18\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    19\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    19\n        target    138\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    2\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    2\n        target    109\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    20\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    21\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    22\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    23\n        target    132\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    23\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    23\n        target    57\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    24\n        target    131\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    24\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    25\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    26\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    27\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    27\n        target    61\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    28\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    29\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    3\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    30\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    30\n        target    127\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    31\n        target    110\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    31\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    31\n        target    32\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    32\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    32\n        target    52\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    33\n        target    27\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    34\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    34\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    35\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    36\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    37\n        target    145\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    37\n        target    28\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    37\n        target    35\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    38\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    39\n        target    32\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    4\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    40\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    41\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    41\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    42\n        target    137\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    42\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    43\n        target    36\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    44\n        target    33\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    45\n        target    37\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    45\n        target    79\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    46\n        target    33\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    47\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    47\n        target    38\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    47\n        target    60\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    48\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    49\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    5\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    5\n        target    83\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    50\n        target    48\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    51\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    51\n        target    144\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    52\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    53\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    53\n        target    62\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    54\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    55\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    56\n        target    44\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    57\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    58\n        target    39\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    59\n        target    36\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    6\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    60\n        target    33\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    61\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    62\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    63\n        target    24\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    64\n        target    45\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    65\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    65\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    66\n        target    113\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    66\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    66\n        target    46\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    67\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    68\n        target    19\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    69\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    69\n        target    149\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    7\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    7\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    70\n        target    19\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    71\n        target    52\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    72\n        target    121\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    72\n        target    46\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    73\n        target    67\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    74\n        target    34\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    75\n        target    42\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    75\n        target    60\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    76\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    76\n        target    54\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    77\n        target    52\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    77\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    78\n        target    33\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    79\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    79\n        target    43\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    8\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    80\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    81\n        target    51\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    82\n        target    126\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    82\n        target    28\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    83\n        target    35\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    83\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    84\n        target    26\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    84\n        target    63\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    85\n        target    126\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    85\n        target    73\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    85\n        target    95\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    86\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    86\n        target    77\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    86\n        target    90\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    87\n        target    53\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    88\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    88\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    89\n        target    72\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    9\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    9\n        target    46\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    9\n        target    50\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    9\n        target    61\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    90\n        target    121\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    90\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    90\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    91\n        target    36\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    92\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    93\n        target    77\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    94\n        target    85\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    95\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    96\n        target    62\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    96\n        target    79\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    97\n        target    77\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    98\n        target    135\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    98\n        target    47\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    98\n        target    87\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    99\n        target    78\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n]\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v150e225.tglf",
    "content": "0 1045.000 845.000 30.000 30.000\n1 498.000 260.000 30.000 30.000\n2 659.000 888.000 30.000 30.000\n3 401.000 170.000 30.000 30.000\n4 89.000 9.000 30.000 30.000\n5 242.000 633.000 30.000 30.000\n6 356.000 1064.000 30.000 30.000\n7 431.000 868.000 30.000 30.000\n8 200.000 263.000 30.000 30.000\n9 900.000 398.000 30.000 30.000\n10 431.000 726.000 30.000 30.000\n11 282.000 1040.000 30.000 30.000\n12 259.000 933.000 30.000 30.000\n13 380.000 343.000 30.000 30.000\n14 0.000 576.000 30.000 30.000\n15 877.000 127.000 30.000 30.000\n16 373.000 317.000 30.000 30.000\n17 526.000 1037.000 30.000 30.000\n18 523.000 756.000 30.000 30.000\n19 844.000 313.000 30.000 30.000\n20 834.000 296.000 30.000 30.000\n21 299.000 246.000 30.000 30.000\n22 108.000 595.000 30.000 30.000\n23 11.000 1015.000 30.000 30.000\n24 79.000 892.000 30.000 30.000\n25 743.000 701.000 30.000 30.000\n26 1102.000 97.000 30.000 30.000\n27 445.000 427.000 30.000 30.000\n28 32.000 122.000 30.000 30.000\n29 139.000 516.000 30.000 30.000\n30 365.000 990.000 30.000 30.000\n31 742.000 508.000 30.000 30.000\n32 371.000 153.000 30.000 30.000\n33 555.000 849.000 30.000 30.000\n34 486.000 796.000 30.000 30.000\n35 784.000 105.000 30.000 30.000\n36 382.000 319.000 30.000 30.000\n37 579.000 248.000 30.000 30.000\n38 874.000 735.000 30.000 30.000\n39 961.000 920.000 30.000 30.000\n40 849.000 958.000 30.000 30.000\n41 513.000 862.000 30.000 30.000\n42 1084.000 86.000 30.000 30.000\n43 1075.000 417.000 30.000 30.000\n44 229.000 618.000 30.000 30.000\n45 714.000 56.000 30.000 30.000\n46 919.000 602.000 30.000 30.000\n47 112.000 766.000 30.000 30.000\n48 955.000 162.000 30.000 30.000\n49 132.000 901.000 30.000 30.000\n50 359.000 988.000 30.000 30.000\n51 1020.000 94.000 30.000 30.000\n52 443.000 12.000 30.000 30.000\n53 265.000 470.000 30.000 30.000\n54 670.000 275.000 30.000 30.000\n55 759.000 134.000 30.000 30.000\n56 982.000 1031.000 30.000 30.000\n57 496.000 579.000 30.000 30.000\n58 671.000 1069.000 30.000 30.000\n59 520.000 851.000 30.000 30.000\n60 119.000 89.000 30.000 30.000\n61 526.000 444.000 30.000 30.000\n62 611.000 919.000 30.000 30.000\n63 166.000 700.000 30.000 30.000\n64 709.000 27.000 30.000 30.000\n65 510.000 300.000 30.000 30.000\n66 373.000 846.000 30.000 30.000\n67 1028.000 73.000 30.000 30.000\n68 226.000 904.000 30.000 30.000\n69 193.000 35.000 30.000 30.000\n70 106.000 252.000 30.000 30.000\n71 1081.000 128.000 30.000 30.000\n72 109.000 480.000 30.000 30.000\n73 585.000 381.000 30.000 30.000\n74 870.000 1090.000 30.000 30.000\n75 943.000 37.000 30.000 30.000\n76 378.000 727.000 30.000 30.000\n77 719.000 521.000 30.000 30.000\n78 244.000 70.000 30.000 30.000\n79 192.000 805.000 30.000 30.000\n80 313.000 769.000 30.000 30.000\n81 149.000 392.000 30.000 30.000\n82 349.000 308.000 30.000 30.000\n83 612.000 328.000 30.000 30.000\n84 115.000 533.000 30.000 30.000\n85 228.000 314.000 30.000 30.000\n86 45.000 861.000 30.000 30.000\n87 1019.000 924.000 30.000 30.000\n88 480.000 303.000 30.000 30.000\n89 456.000 163.000 30.000 30.000\n90 886.000 1057.000 30.000 30.000\n91 23.000 228.000 30.000 30.000\n92 194.000 418.000 30.000 30.000\n93 95.000 383.000 30.000 30.000\n94 287.000 915.000 30.000 30.000\n95 1082.000 1012.000 30.000 30.000\n96 477.000 19.000 30.000 30.000\n97 1066.000 885.000 30.000 30.000\n98 533.000 53.000 30.000 30.000\n99 944.000 314.000 30.000 30.000\n100 475.000 33.000 30.000 30.000\n101 740.000 546.000 30.000 30.000\n102 352.000 803.000 30.000 30.000\n103 143.000 780.000 30.000 30.000\n104 307.000 649.000 30.000 30.000\n105 875.000 112.000 30.000 30.000\n106 740.000 971.000 30.000 30.000\n107 1050.000 214.000 30.000 30.000\n108 521.000 684.000 30.000 30.000\n109 607.000 953.000 30.000 30.000\n110 1009.000 962.000 30.000 30.000\n111 337.000 767.000 30.000 30.000\n112 1092.000 994.000 30.000 30.000\n113 662.000 989.000 30.000 30.000\n114 409.000 1011.000 30.000 30.000\n115 645.000 719.000 30.000 30.000\n116 496.000 1063.000 30.000 30.000\n117 644.000 490.000 30.000 30.000\n118 158.000 474.000 30.000 30.000\n119 938.000 3.000 30.000 30.000\n120 1068.000 338.000 30.000 30.000\n121 777.000 790.000 30.000 30.000\n122 841.000 540.000 30.000 30.000\n123 862.000 926.000 30.000 30.000\n124 326.000 471.000 30.000 30.000\n125 224.000 534.000 30.000 30.000\n126 316.000 108.000 30.000 30.000\n127 406.000 858.000 30.000 30.000\n128 798.000 150.000 30.000 30.000\n129 443.000 349.000 30.000 30.000\n130 715.000 905.000 30.000 30.000\n131 874.000 925.000 30.000 30.000\n132 115.000 916.000 30.000 30.000\n133 763.000 30.000 30.000 30.000\n134 762.000 604.000 30.000 30.000\n135 801.000 700.000 30.000 30.000\n136 883.000 535.000 30.000 30.000\n137 910.000 477.000 30.000 30.000\n138 35.000 401.000 30.000 30.000\n139 641.000 875.000 30.000 30.000\n140 342.000 521.000 30.000 30.000\n141 8.000 862.000 30.000 30.000\n142 816.000 284.000 30.000 30.000\n143 439.000 656.000 30.000 30.000\n144 950.000 908.000 30.000 30.000\n145 1018.000 320.000 30.000 30.000\n146 547.000 473.000 30.000 30.000\n147 520.000 987.000 30.000 30.000\n148 931.000 174.000 30.000 30.000\n149 433.000 550.000 30.000 30.000\n#\n144 32\n98 135\n147 4\n7 3\n130 121\n145 31\n146 48\n42 18\n15 39\n108 107\n23 57\n123 104\n148 140\n137 132\n44 33\n94 85\n0 81\n38 23\n77 6\n9 46\n53 62\n104 13\n10 110\n133 86\n9 1\n37 145\n140 14\n127 118\n79 10\n126 0\n84 63\n52 0\n110 80\n101 23\n85 73\n69 149\n121 44\n133 129\n149 25\n145 12\n67 2\n96 79\n24 131\n50 48\n115 104\n66 23\n137 72\n76 54\n21 7\n124 75\n87 53\n39 32\n72 46\n78 33\n40 6\n122 10\n75 42\n117 32\n146 126\n31 16\n32 22\n37 35\n23 132\n141 62\n47 38\n90 22\n34 15\n35 16\n107 45\n10 0\n15 0\n134 99\n66 46\n7 5\n114 20\n17 86\n24 21\n145 66\n14 4\n54 21\n41 10\n141 7\n8 0\n65 21\n70 19\n98 47\n41 0\n95 14\n76 21\n135 127\n53 3\n47 0\n57 15\n113 48\n86 90\n17 7\n118 96\n69 11\n28 1\n105 8\n77 52\n89 72\n90 121\n116 28\n85 95\n2 109\n60 33\n88 23\n56 44\n144 11\n6 0\n25 9\n91 36\n9 50\n68 19\n19 12\n142 83\n42 137\n27 61\n71 52\n45 79\n13 8\n79 43\n31 110\n85 126\n9 61\n1 0\n102 54\n11 2\n34 22\n5 4\n131 95\n117 123\n112 6\n142 87\n18 5\n59 36\n30 127\n99 78\n73 67\n26 21\n82 126\n12 53\n43 36\n2 1\n132 103\n49 15\n20 16\n92 8\n32 52\n75 60\n11 113\n136 43\n98 87\n80 2\n45 37\n64 45\n74 34\n101 69\n5 83\n97 77\n83 7\n139 109\n63 24\n23 4\n139 73\n27 10\n90 9\n129 111\n113 50\n143 121\n111 8\n61 3\n125 50\n96 62\n37 28\n30 1\n144 56\n31 32\n149 119\n121 80\n129 15\n93 77\n82 28\n109 4\n62 13\n0 127\n58 39\n84 26\n115 108\n81 51\n51 12\n4 1\n33 27\n104 101\n51 144\n119 63\n123 145\n83 35\n143 82\n103 21\n148 114\n16 8\n55 7\n100 3\n47 60\n86 77\n66 113\n29 4\n48 13\n12 6\n138 136\n120 18\n72 121\n65 14\n88 22\n106 48\n114 34\n128 113\n36 14\n86 10\n3 2\n19 138\n46 33\n22 11\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v160e160.gml",
    "content": "graph\n[\n    node\n    [\n        id    0\n        label    \"\"\n        graphics\n        [\n            x    100.61\n            y    562.28\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    1\n        label    \"\"\n        graphics\n        [\n            x    198.09\n            y    957.01\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    2\n        label    \"\"\n        graphics\n        [\n            x    708.33\n            y    241.78\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    3\n        label    \"\"\n        graphics\n        [\n            x    963.28\n            y    684.28\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    4\n        label    \"\"\n        graphics\n        [\n            x    77.54\n            y    346.64\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    5\n        label    \"\"\n        graphics\n        [\n            x    174.17\n            y    654.28\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    6\n        label    \"\"\n        graphics\n        [\n            x    711.38\n            y    383.74\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    7\n        label    \"\"\n        graphics\n        [\n            x    660.75\n            y    1053.42\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    8\n        label    \"\"\n        graphics\n        [\n            x    168.38\n            y    1021.62\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    9\n        label    \"\"\n        graphics\n        [\n            x    757.15\n            y    1123.39\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    10\n        label    \"\"\n        graphics\n        [\n            x    563.12\n            y    1079.88\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    11\n        label    \"\"\n        graphics\n        [\n            x    413.89\n            y    448.82\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    12\n        label    \"\"\n        graphics\n        [\n            x    917.22\n            y    316.16\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    13\n        label    \"\"\n        graphics\n        [\n            x    311.51\n            y    170.35\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    14\n        label    \"\"\n        graphics\n        [\n            x    528.90\n            y    646.46\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    15\n        label    \"\"\n        graphics\n        [\n            x    720.19\n            y    531.33\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    16\n        label    \"\"\n        graphics\n        [\n            x    82.59\n            y    289.05\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    17\n        label    \"\"\n        graphics\n        [\n            x    827.28\n            y    144.04\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    18\n        label    \"\"\n        graphics\n        [\n            x    569.56\n            y    154.19\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    19\n        label    \"\"\n        graphics\n        [\n            x    651.89\n            y    768.64\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    20\n        label    \"\"\n        graphics\n        [\n            x    357.94\n            y    101.53\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    21\n        label    \"\"\n        graphics\n        [\n            x    72.02\n            y    575.91\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    22\n        label    \"\"\n        graphics\n        [\n            x    833.57\n            y    514.40\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    23\n        label    \"\"\n        graphics\n        [\n            x    72.34\n            y    1063.30\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    24\n        label    \"\"\n        graphics\n        [\n            x    51.17\n            y    701.04\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    25\n        label    \"\"\n        graphics\n        [\n            x    484.25\n            y    698.68\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    26\n        label    \"\"\n        graphics\n        [\n            x    486.84\n            y    691.09\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    27\n        label    \"\"\n        graphics\n        [\n            x    857.63\n            y    261.88\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    28\n        label    \"\"\n        graphics\n        [\n            x    911.40\n            y    464.30\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    29\n        label    \"\"\n        graphics\n        [\n            x    527.23\n            y    549.02\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    30\n        label    \"\"\n        graphics\n        [\n            x    258.04\n            y    659.06\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    31\n        label    \"\"\n        graphics\n        [\n            x    795.46\n            y    243.57\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    32\n        label    \"\"\n        graphics\n        [\n            x    97.48\n            y    512.50\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    33\n        label    \"\"\n        graphics\n        [\n            x    983.10\n            y    866.28\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    34\n        label    \"\"\n        graphics\n        [\n            x    778.16\n            y    892.09\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    35\n        label    \"\"\n        graphics\n        [\n            x    689.85\n            y    78.45\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    36\n        label    \"\"\n        graphics\n        [\n            x    261.94\n            y    235.66\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    37\n        label    \"\"\n        graphics\n        [\n            x    857.19\n            y    759.71\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    38\n        label    \"\"\n        graphics\n        [\n            x    713.06\n            y    260.71\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    39\n        label    \"\"\n        graphics\n        [\n            x    895.38\n            y    25.99\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    40\n        label    \"\"\n        graphics\n        [\n            x    177.03\n            y    378.04\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    41\n        label    \"\"\n        graphics\n        [\n            x    459.06\n            y    378.67\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    42\n        label    \"\"\n        graphics\n        [\n            x    28.10\n            y    369.67\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    43\n        label    \"\"\n        graphics\n        [\n            x    867.12\n            y    647.55\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    44\n        label    \"\"\n        graphics\n        [\n            x    733.73\n            y    1111.93\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    45\n        label    \"\"\n        graphics\n        [\n            x    877.17\n            y    87.46\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    46\n        label    \"\"\n        graphics\n        [\n            x    513.66\n            y    1127.75\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    47\n        label    \"\"\n        graphics\n        [\n            x    735.06\n            y    570.11\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    48\n        label    \"\"\n        graphics\n        [\n            x    375.91\n            y    891.58\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    49\n        label    \"\"\n        graphics\n        [\n            x    500.23\n            y    245.46\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    50\n        label    \"\"\n        graphics\n        [\n            x    50.97\n            y    290.66\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    51\n        label    \"\"\n        graphics\n        [\n            x    462.87\n            y    839.23\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    52\n        label    \"\"\n        graphics\n        [\n            x    1002.39\n            y    532.07\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    53\n        label    \"\"\n        graphics\n        [\n            x    253.93\n            y    403.81\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    54\n        label    \"\"\n        graphics\n        [\n            x    638.27\n            y    829.01\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    55\n        label    \"\"\n        graphics\n        [\n            x    858.54\n            y    315.88\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    56\n        label    \"\"\n        graphics\n        [\n            x    539.73\n            y    362.40\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    57\n        label    \"\"\n        graphics\n        [\n            x    602.14\n            y    31.35\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    58\n        label    \"\"\n        graphics\n        [\n            x    535.09\n            y    311.65\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    59\n        label    \"\"\n        graphics\n        [\n            x    442.49\n            y    919.08\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    60\n        label    \"\"\n        graphics\n        [\n            x    530.72\n            y    201.59\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    61\n        label    \"\"\n        graphics\n        [\n            x    1001.66\n            y    11.92\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    62\n        label    \"\"\n        graphics\n        [\n            x    981.39\n            y    857.35\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    63\n        label    \"\"\n        graphics\n        [\n            x    45.39\n            y    869.52\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    64\n        label    \"\"\n        graphics\n        [\n            x    314.81\n            y    360.68\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    65\n        label    \"\"\n        graphics\n        [\n            x    70.20\n            y    342.30\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    66\n        label    \"\"\n        graphics\n        [\n            x    852.91\n            y    1022.96\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    67\n        label    \"\"\n        graphics\n        [\n            x    436.56\n            y    773.42\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    68\n        label    \"\"\n        graphics\n        [\n            x    1073.85\n            y    569.09\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    69\n        label    \"\"\n        graphics\n        [\n            x    267.12\n            y    570.13\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    70\n        label    \"\"\n        graphics\n        [\n            x    785.19\n            y    450.88\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    71\n        label    \"\"\n        graphics\n        [\n            x    161.11\n            y    380.36\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    72\n        label    \"\"\n        graphics\n        [\n            x    766.21\n            y    495.95\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    73\n        label    \"\"\n        graphics\n        [\n            x    306.44\n            y    563.46\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    74\n        label    \"\"\n        graphics\n        [\n            x    213.49\n            y    89.87\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    75\n        label    \"\"\n        graphics\n        [\n            x    713.74\n            y    106.79\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    76\n        label    \"\"\n        graphics\n        [\n            x    561.97\n            y    883.97\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    77\n        label    \"\"\n        graphics\n        [\n            x    0.79\n            y    495.85\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    78\n        label    \"\"\n        graphics\n        [\n            x    402.67\n            y    801.95\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    79\n        label    \"\"\n        graphics\n        [\n            x    551.68\n            y    170.75\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    80\n        label    \"\"\n        graphics\n        [\n            x    330.44\n            y    477.46\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    81\n        label    \"\"\n        graphics\n        [\n            x    1090.51\n            y    644.25\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    82\n        label    \"\"\n        graphics\n        [\n            x    969.78\n            y    591.83\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    83\n        label    \"\"\n        graphics\n        [\n            x    1109.51\n            y    845.93\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    84\n        label    \"\"\n        graphics\n        [\n            x    500.40\n            y    1038.68\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    85\n        label    \"\"\n        graphics\n        [\n            x    317.29\n            y    1127.60\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    86\n        label    \"\"\n        graphics\n        [\n            x    1133.88\n            y    618.21\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    87\n        label    \"\"\n        graphics\n        [\n            x    142.02\n            y    1091.82\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    88\n        label    \"\"\n        graphics\n        [\n            x    507.98\n            y    965.95\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    89\n        label    \"\"\n        graphics\n        [\n            x    1018.36\n            y    1008.79\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    90\n        label    \"\"\n        graphics\n        [\n            x    630.86\n            y    529.69\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    91\n        label    \"\"\n        graphics\n        [\n            x    386.57\n            y    369.37\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    92\n        label    \"\"\n        graphics\n        [\n            x    221.23\n            y    467.50\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    93\n        label    \"\"\n        graphics\n        [\n            x    1037.59\n            y    828.21\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    94\n        label    \"\"\n        graphics\n        [\n            x    117.02\n            y    851.57\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    95\n        label    \"\"\n        graphics\n        [\n            x    438.12\n            y    647.67\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    96\n        label    \"\"\n        graphics\n        [\n            x    921.22\n            y    911.12\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    97\n        label    \"\"\n        graphics\n        [\n            x    253.39\n            y    806.91\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    98\n        label    \"\"\n        graphics\n        [\n            x    979.16\n            y    542.87\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    99\n        label    \"\"\n        graphics\n        [\n            x    426.35\n            y    343.11\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    100\n        label    \"\"\n        graphics\n        [\n            x    161.90\n            y    304.15\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    101\n        label    \"\"\n        graphics\n        [\n            x    786.47\n            y    1129.47\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    102\n        label    \"\"\n        graphics\n        [\n            x    264.08\n            y    673.43\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    103\n        label    \"\"\n        graphics\n        [\n            x    690.44\n            y    880.97\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    104\n        label    \"\"\n        graphics\n        [\n            x    6.48\n            y    245.36\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    105\n        label    \"\"\n        graphics\n        [\n            x    1106.54\n            y    1005.62\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    106\n        label    \"\"\n        graphics\n        [\n            x    89.95\n            y    789.72\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    107\n        label    \"\"\n        graphics\n        [\n            x    170.59\n            y    682.50\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    108\n        label    \"\"\n        graphics\n        [\n            x    141.08\n            y    210.23\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    109\n        label    \"\"\n        graphics\n        [\n            x    137.79\n            y    998.14\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    110\n        label    \"\"\n        graphics\n        [\n            x    185.96\n            y    1079.95\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    111\n        label    \"\"\n        graphics\n        [\n            x    29.89\n            y    221.88\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    112\n        label    \"\"\n        graphics\n        [\n            x    1022.76\n            y    424.80\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    113\n        label    \"\"\n        graphics\n        [\n            x    613.77\n            y    1002.81\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    114\n        label    \"\"\n        graphics\n        [\n            x    644.19\n            y    905.33\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    115\n        label    \"\"\n        graphics\n        [\n            x    259.00\n            y    688.35\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    116\n        label    \"\"\n        graphics\n        [\n            x    118.90\n            y    146.84\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    117\n        label    \"\"\n        graphics\n        [\n            x    845.05\n            y    602.06\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    118\n        label    \"\"\n        graphics\n        [\n            x    109.09\n            y    1127.46\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    119\n        label    \"\"\n        graphics\n        [\n            x    181.01\n            y    673.90\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    120\n        label    \"\"\n        graphics\n        [\n            x    1007.78\n            y    710.58\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    121\n        label    \"\"\n        graphics\n        [\n            x    266.82\n            y    746.87\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    122\n        label    \"\"\n        graphics\n        [\n            x    490.46\n            y    867.57\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    123\n        label    \"\"\n        graphics\n        [\n            x    662.25\n            y    749.41\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    124\n        label    \"\"\n        graphics\n        [\n            x    266.16\n            y    1101.47\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    125\n        label    \"\"\n        graphics\n        [\n            x    502.31\n            y    246.42\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    126\n        label    \"\"\n        graphics\n        [\n            x    1023.34\n            y    465.97\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    127\n        label    \"\"\n        graphics\n        [\n            x    1094.62\n            y    618.62\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    128\n        label    \"\"\n        graphics\n        [\n            x    9.91\n            y    841.54\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    129\n        label    \"\"\n        graphics\n        [\n            x    117.09\n            y    655.83\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    130\n        label    \"\"\n        graphics\n        [\n            x    63.60\n            y    201.46\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    131\n        label    \"\"\n        graphics\n        [\n            x    692.69\n            y    748.96\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    132\n        label    \"\"\n        graphics\n        [\n            x    1051.22\n            y    375.90\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    133\n        label    \"\"\n        graphics\n        [\n            x    512.70\n            y    456.87\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    134\n        label    \"\"\n        graphics\n        [\n            x    193.73\n            y    460.83\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    135\n        label    \"\"\n        graphics\n        [\n            x    168.52\n            y    608.19\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    136\n        label    \"\"\n        graphics\n        [\n            x    920.79\n            y    40.27\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    137\n        label    \"\"\n        graphics\n        [\n            x    618.65\n            y    335.00\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    138\n        label    \"\"\n        graphics\n        [\n            x    566.30\n            y    110.48\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    139\n        label    \"\"\n        graphics\n        [\n            x    365.76\n            y    229.65\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    140\n        label    \"\"\n        graphics\n        [\n            x    81.11\n            y    124.96\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    141\n        label    \"\"\n        graphics\n        [\n            x    412.33\n            y    417.26\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    142\n        label    \"\"\n        graphics\n        [\n            x    1015.00\n            y    751.50\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    143\n        label    \"\"\n        graphics\n        [\n            x    347.34\n            y    382.86\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    144\n        label    \"\"\n        graphics\n        [\n            x    1054.21\n            y    692.56\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    145\n        label    \"\"\n        graphics\n        [\n            x    280.62\n            y    296.98\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    146\n        label    \"\"\n        graphics\n        [\n            x    496.51\n            y    112.18\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    147\n        label    \"\"\n        graphics\n        [\n            x    80.69\n            y    514.82\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    148\n        label    \"\"\n        graphics\n        [\n            x    1006.29\n            y    138.48\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    149\n        label    \"\"\n        graphics\n        [\n            x    928.48\n            y    430.77\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    150\n        label    \"\"\n        graphics\n        [\n            x    57.55\n            y    1068.54\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    151\n        label    \"\"\n        graphics\n        [\n            x    971.03\n            y    406.05\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    152\n        label    \"\"\n        graphics\n        [\n            x    1085.38\n            y    542.55\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    153\n        label    \"\"\n        graphics\n        [\n            x    1096.62\n            y    986.82\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    154\n        label    \"\"\n        graphics\n        [\n            x    207.16\n            y    487.82\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    155\n        label    \"\"\n        graphics\n        [\n            x    346.30\n            y    1070.72\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    156\n        label    \"\"\n        graphics\n        [\n            x    343.65\n            y    99.73\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    157\n        label    \"\"\n        graphics\n        [\n            x    69.36\n            y    1017.42\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    158\n        label    \"\"\n        graphics\n        [\n            x    893.95\n            y    884.62\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    159\n        label    \"\"\n        graphics\n        [\n            x    411.82\n            y    36.08\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    edge\n    [\n        source    1\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    10\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    100\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    101\n        target    38\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    102\n        target    39\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    103\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    104\n        target    77\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    105\n        target    68\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    106\n        target    37\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    107\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    108\n        target    93\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    109\n        target    107\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    11\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    110\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    111\n        target    38\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    112\n        target    74\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    113\n        target    25\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    114\n        target    69\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    115\n        target    62\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    116\n        target    50\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    117\n        target    116\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    118\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    119\n        target    59\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    12\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    120\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    121\n        target    105\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    122\n        target    120\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    123\n        target    117\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    124\n        target    123\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    125\n        target    80\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    126\n        target    20\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    127\n        target    99\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    128\n        target    57\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    129\n        target    33\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    13\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    130\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    131\n        target    64\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    132\n        target    98\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    133\n        target    71\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    134\n        target    60\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    135\n        target    104\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    136\n        target    129\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    137\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    138\n        target    50\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    139\n        target    53\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    14\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    140\n        target    99\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    141\n        target    131\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    142\n        target    46\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    143\n        target    49\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    144\n        target    142\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    145\n        target    97\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    146\n        target    77\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    147\n        target    133\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    148\n        target    27\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    149\n        target    114\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    15\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    150\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    151\n        target    105\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    152\n        target    88\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    153\n        target    117\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    154\n        target    106\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    155\n        target    113\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    156\n        target    152\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    157\n        target    34\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    158\n        target    77\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    159\n        target    37\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    16\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    17\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    18\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    19\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    2\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    20\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    21\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    22\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    23\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    24\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    25\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    26\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    27\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    28\n        target    26\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    29\n        target    28\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    3\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    30\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    31\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    32\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    33\n        target    28\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    34\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    35\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    36\n        target    27\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    37\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    38\n        target    33\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    39\n        target    29\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    4\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    40\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    41\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    42\n        target    30\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    43\n        target    35\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    44\n        target    43\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    45\n        target    39\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    46\n        target    42\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    47\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    48\n        target    25\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    49\n        target    34\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    5\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    50\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    51\n        target    26\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    52\n        target    32\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    53\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    54\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    55\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    56\n        target    29\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    57\n        target    27\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    58\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    59\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    6\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    60\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    61\n        target    57\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    62\n        target    26\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    63\n        target    28\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    64\n        target    46\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    65\n        target    61\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    66\n        target    38\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    67\n        target    41\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    68\n        target    61\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    69\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    7\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    70\n        target    34\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    71\n        target    34\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    72\n        target    24\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    73\n        target    60\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    74\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    75\n        target    40\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    76\n        target    57\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    77\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    78\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    79\n        target    53\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    8\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    80\n        target    50\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    81\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    82\n        target    60\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    83\n        target    57\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    84\n        target    19\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    84\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    85\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    86\n        target    72\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    87\n        target    29\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    88\n        target    31\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    89\n        target    58\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    9\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    90\n        target    27\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    91\n        target    77\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    92\n        target    27\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    93\n        target    77\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    94\n        target    72\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    95\n        target    65\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    96\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    97\n        target    76\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    98\n        target    40\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    99\n        target    19\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n]\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v160e160.tglf",
    "content": "0 100.000 562.000 30.000 30.000\n1 198.000 957.000 30.000 30.000\n2 708.000 241.000 30.000 30.000\n3 963.000 684.000 30.000 30.000\n4 77.000 346.000 30.000 30.000\n5 174.000 654.000 30.000 30.000\n6 711.000 383.000 30.000 30.000\n7 660.000 1053.000 30.000 30.000\n8 168.000 1021.000 30.000 30.000\n9 757.000 1123.000 30.000 30.000\n10 563.000 1079.000 30.000 30.000\n11 413.000 448.000 30.000 30.000\n12 917.000 316.000 30.000 30.000\n13 311.000 170.000 30.000 30.000\n14 528.000 646.000 30.000 30.000\n15 720.000 531.000 30.000 30.000\n16 82.000 289.000 30.000 30.000\n17 827.000 144.000 30.000 30.000\n18 569.000 154.000 30.000 30.000\n19 651.000 768.000 30.000 30.000\n20 357.000 101.000 30.000 30.000\n21 72.000 575.000 30.000 30.000\n22 833.000 514.000 30.000 30.000\n23 72.000 1063.000 30.000 30.000\n24 51.000 701.000 30.000 30.000\n25 484.000 698.000 30.000 30.000\n26 486.000 691.000 30.000 30.000\n27 857.000 261.000 30.000 30.000\n28 911.000 464.000 30.000 30.000\n29 527.000 549.000 30.000 30.000\n30 258.000 659.000 30.000 30.000\n31 795.000 243.000 30.000 30.000\n32 97.000 512.000 30.000 30.000\n33 983.000 866.000 30.000 30.000\n34 778.000 892.000 30.000 30.000\n35 689.000 78.000 30.000 30.000\n36 261.000 235.000 30.000 30.000\n37 857.000 759.000 30.000 30.000\n38 713.000 260.000 30.000 30.000\n39 895.000 25.000 30.000 30.000\n40 177.000 378.000 30.000 30.000\n41 459.000 378.000 30.000 30.000\n42 28.000 369.000 30.000 30.000\n43 867.000 647.000 30.000 30.000\n44 733.000 1111.000 30.000 30.000\n45 877.000 87.000 30.000 30.000\n46 513.000 1127.000 30.000 30.000\n47 735.000 570.000 30.000 30.000\n48 375.000 891.000 30.000 30.000\n49 500.000 245.000 30.000 30.000\n50 50.000 290.000 30.000 30.000\n51 462.000 839.000 30.000 30.000\n52 1002.000 532.000 30.000 30.000\n53 253.000 403.000 30.000 30.000\n54 638.000 829.000 30.000 30.000\n55 858.000 315.000 30.000 30.000\n56 539.000 362.000 30.000 30.000\n57 602.000 31.000 30.000 30.000\n58 535.000 311.000 30.000 30.000\n59 442.000 919.000 30.000 30.000\n60 530.000 201.000 30.000 30.000\n61 1001.000 11.000 30.000 30.000\n62 981.000 857.000 30.000 30.000\n63 45.000 869.000 30.000 30.000\n64 314.000 360.000 30.000 30.000\n65 70.000 342.000 30.000 30.000\n66 852.000 1022.000 30.000 30.000\n67 436.000 773.000 30.000 30.000\n68 1073.000 569.000 30.000 30.000\n69 267.000 570.000 30.000 30.000\n70 785.000 450.000 30.000 30.000\n71 161.000 380.000 30.000 30.000\n72 766.000 495.000 30.000 30.000\n73 306.000 563.000 30.000 30.000\n74 213.000 89.000 30.000 30.000\n75 713.000 106.000 30.000 30.000\n76 561.000 883.000 30.000 30.000\n77 0.000 495.000 30.000 30.000\n78 402.000 801.000 30.000 30.000\n79 551.000 170.000 30.000 30.000\n80 330.000 477.000 30.000 30.000\n81 1090.000 644.000 30.000 30.000\n82 969.000 591.000 30.000 30.000\n83 1109.000 845.000 30.000 30.000\n84 500.000 1038.000 30.000 30.000\n85 317.000 1127.000 30.000 30.000\n86 1133.000 618.000 30.000 30.000\n87 142.000 1091.000 30.000 30.000\n88 507.000 965.000 30.000 30.000\n89 1018.000 1008.000 30.000 30.000\n90 630.000 529.000 30.000 30.000\n91 386.000 369.000 30.000 30.000\n92 221.000 467.000 30.000 30.000\n93 1037.000 828.000 30.000 30.000\n94 117.000 851.000 30.000 30.000\n95 438.000 647.000 30.000 30.000\n96 921.000 911.000 30.000 30.000\n97 253.000 806.000 30.000 30.000\n98 979.000 542.000 30.000 30.000\n99 426.000 343.000 30.000 30.000\n100 161.000 304.000 30.000 30.000\n101 786.000 1129.000 30.000 30.000\n102 264.000 673.000 30.000 30.000\n103 690.000 880.000 30.000 30.000\n104 6.000 245.000 30.000 30.000\n105 1106.000 1005.000 30.000 30.000\n106 89.000 789.000 30.000 30.000\n107 170.000 682.000 30.000 30.000\n108 141.000 210.000 30.000 30.000\n109 137.000 998.000 30.000 30.000\n110 185.000 1079.000 30.000 30.000\n111 29.000 221.000 30.000 30.000\n112 1022.000 424.000 30.000 30.000\n113 613.000 1002.000 30.000 30.000\n114 644.000 905.000 30.000 30.000\n115 259.000 688.000 30.000 30.000\n116 118.000 146.000 30.000 30.000\n117 845.000 602.000 30.000 30.000\n118 109.000 1127.000 30.000 30.000\n119 181.000 673.000 30.000 30.000\n120 1007.000 710.000 30.000 30.000\n121 266.000 746.000 30.000 30.000\n122 490.000 867.000 30.000 30.000\n123 662.000 749.000 30.000 30.000\n124 266.000 1101.000 30.000 30.000\n125 502.000 246.000 30.000 30.000\n126 1023.000 465.000 30.000 30.000\n127 1094.000 618.000 30.000 30.000\n128 9.000 841.000 30.000 30.000\n129 117.000 655.000 30.000 30.000\n130 63.000 201.000 30.000 30.000\n131 692.000 748.000 30.000 30.000\n132 1051.000 375.000 30.000 30.000\n133 512.000 456.000 30.000 30.000\n134 193.000 460.000 30.000 30.000\n135 168.000 608.000 30.000 30.000\n136 920.000 40.000 30.000 30.000\n137 618.000 335.000 30.000 30.000\n138 566.000 110.000 30.000 30.000\n139 365.000 229.000 30.000 30.000\n140 81.000 124.000 30.000 30.000\n141 412.000 417.000 30.000 30.000\n142 1015.000 751.000 30.000 30.000\n143 347.000 382.000 30.000 30.000\n144 1054.000 692.000 30.000 30.000\n145 280.000 296.000 30.000 30.000\n146 496.000 112.000 30.000 30.000\n147 80.000 514.000 30.000 30.000\n148 1006.000 138.000 30.000 30.000\n149 928.000 430.000 30.000 30.000\n150 57.000 1068.000 30.000 30.000\n151 971.000 406.000 30.000 30.000\n152 1085.000 542.000 30.000 30.000\n153 1096.000 986.000 30.000 30.000\n154 207.000 487.000 30.000 30.000\n155 346.000 1070.000 30.000 30.000\n156 343.000 99.000 30.000 30.000\n157 69.000 1017.000 30.000 30.000\n158 893.000 884.000 30.000 30.000\n159 411.000 36.000 30.000 30.000\n#\n84 19\n60 2\n76 57\n68 61\n103 6\n158 77\n149 114\n5 3\n4 3\n20 2\n148 27\n2 0\n119 59\n22 21\n156 152\n151 105\n127 99\n86 72\n26 14\n154 106\n1 0\n139 53\n55 7\n63 28\n104 77\n25 8\n43 35\n16 4\n113 25\n150 18\n137 3\n111 38\n118 0\n141 131\n29 28\n48 25\n73 60\n124 123\n129 33\n102 39\n62 26\n21 9\n79 53\n9 6\n109 107\n143 49\n15 1\n153 117\n97 76\n47 17\n90 27\n52 32\n130 16\n39 29\n53 13\n95 65\n42 30\n126 20\n98 40\n3 0\n7 5\n37 16\n78 22\n144 142\n131 64\n59 7\n91 77\n75 40\n140 99\n114 69\n27 10\n88 31\n51 26\n8 4\n36 27\n35 0\n85 2\n125 80\n61 57\n107 13\n13 4\n157 34\n65 61\n138 50\n159 37\n134 60\n110 23\n101 38\n121 105\n45 39\n67 41\n14 10\n56 29\n120 8\n106 37\n46 42\n34 22\n155 113\n11 6\n10 9\n81 11\n19 10\n112 74\n123 117\n38 33\n17 4\n146 77\n57 27\n83 57\n136 129\n58 3\n72 24\n28 26\n94 72\n108 93\n69 14\n64 46\n49 34\n84 9\n32 0\n41 5\n135 104\n44 43\n116 50\n66 38\n82 60\n50 14\n115 62\n122 120\n96 7\n23 17\n89 58\n24 2\n12 0\n80 50\n105 68\n30 0\n117 116\n93 77\n100 14\n147 133\n33 28\n18 12\n6 3\n133 71\n99 19\n40 21\n77 3\n71 34\n70 34\n92 27\n31 9\n152 88\n54 5\n128 57\n87 29\n142 46\n132 98\n74 12\n145 97\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v160e176.gml",
    "content": "graph\n[\n    node\n    [\n        id    0\n        label    \"\"\n        graphics\n        [\n            x    1060.45\n            y    1044.18\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    1\n        label    \"\"\n        graphics\n        [\n            x    370.00\n            y    373.92\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    2\n        label    \"\"\n        graphics\n        [\n            x    90.84\n            y    403.43\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    3\n        label    \"\"\n        graphics\n        [\n            x    621.31\n            y    764.23\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    4\n        label    \"\"\n        graphics\n        [\n            x    922.46\n            y    829.77\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    5\n        label    \"\"\n        graphics\n        [\n            x    847.79\n            y    764.27\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    6\n        label    \"\"\n        graphics\n        [\n            x    619.76\n            y    1032.46\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    7\n        label    \"\"\n        graphics\n        [\n            x    191.87\n            y    468.13\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    8\n        label    \"\"\n        graphics\n        [\n            x    12.41\n            y    936.25\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    9\n        label    \"\"\n        graphics\n        [\n            x    760.77\n            y    176.57\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    10\n        label    \"\"\n        graphics\n        [\n            x    180.52\n            y    629.01\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    11\n        label    \"\"\n        graphics\n        [\n            x    171.24\n            y    244.46\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    12\n        label    \"\"\n        graphics\n        [\n            x    1122.28\n            y    219.58\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    13\n        label    \"\"\n        graphics\n        [\n            x    285.18\n            y    578.77\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    14\n        label    \"\"\n        graphics\n        [\n            x    289.23\n            y    365.03\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    15\n        label    \"\"\n        graphics\n        [\n            x    542.42\n            y    1057.77\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    16\n        label    \"\"\n        graphics\n        [\n            x    535.83\n            y    625.65\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    17\n        label    \"\"\n        graphics\n        [\n            x    1106.55\n            y    108.30\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    18\n        label    \"\"\n        graphics\n        [\n            x    1100.99\n            y    375.45\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    19\n        label    \"\"\n        graphics\n        [\n            x    543.82\n            y    1107.16\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    20\n        label    \"\"\n        graphics\n        [\n            x    896.76\n            y    253.90\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    21\n        label    \"\"\n        graphics\n        [\n            x    698.77\n            y    411.91\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    22\n        label    \"\"\n        graphics\n        [\n            x    231.99\n            y    454.71\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    23\n        label    \"\"\n        graphics\n        [\n            x    272.84\n            y    196.95\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    24\n        label    \"\"\n        graphics\n        [\n            x    1059.99\n            y    732.55\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    25\n        label    \"\"\n        graphics\n        [\n            x    1078.73\n            y    218.32\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    26\n        label    \"\"\n        graphics\n        [\n            x    87.13\n            y    511.72\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    27\n        label    \"\"\n        graphics\n        [\n            x    1015.49\n            y    114.69\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    28\n        label    \"\"\n        graphics\n        [\n            x    640.66\n            y    1103.04\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    29\n        label    \"\"\n        graphics\n        [\n            x    769.28\n            y    44.22\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    30\n        label    \"\"\n        graphics\n        [\n            x    834.28\n            y    204.18\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    31\n        label    \"\"\n        graphics\n        [\n            x    444.30\n            y    357.21\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    32\n        label    \"\"\n        graphics\n        [\n            x    1089.04\n            y    93.51\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    33\n        label    \"\"\n        graphics\n        [\n            x    73.73\n            y    933.84\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    34\n        label    \"\"\n        graphics\n        [\n            x    1029.41\n            y    991.19\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    35\n        label    \"\"\n        graphics\n        [\n            x    40.77\n            y    283.13\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    36\n        label    \"\"\n        graphics\n        [\n            x    294.16\n            y    728.52\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    37\n        label    \"\"\n        graphics\n        [\n            x    926.74\n            y    694.70\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    38\n        label    \"\"\n        graphics\n        [\n            x    1109.39\n            y    580.07\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    39\n        label    \"\"\n        graphics\n        [\n            x    869.93\n            y    821.44\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    40\n        label    \"\"\n        graphics\n        [\n            x    838.62\n            y    30.55\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    41\n        label    \"\"\n        graphics\n        [\n            x    730.61\n            y    771.10\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    42\n        label    \"\"\n        graphics\n        [\n            x    512.11\n            y    270.16\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    43\n        label    \"\"\n        graphics\n        [\n            x    347.51\n            y    1043.00\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    44\n        label    \"\"\n        graphics\n        [\n            x    697.29\n            y    683.28\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    45\n        label    \"\"\n        graphics\n        [\n            x    159.91\n            y    796.76\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    46\n        label    \"\"\n        graphics\n        [\n            x    313.39\n            y    986.72\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    47\n        label    \"\"\n        graphics\n        [\n            x    1100.15\n            y    830.79\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    48\n        label    \"\"\n        graphics\n        [\n            x    1108.87\n            y    708.01\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    49\n        label    \"\"\n        graphics\n        [\n            x    221.73\n            y    1027.13\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    50\n        label    \"\"\n        graphics\n        [\n            x    258.95\n            y    652.69\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    51\n        label    \"\"\n        graphics\n        [\n            x    625.98\n            y    610.42\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    52\n        label    \"\"\n        graphics\n        [\n            x    237.79\n            y    1137.94\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    53\n        label    \"\"\n        graphics\n        [\n            x    139.01\n            y    484.94\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    54\n        label    \"\"\n        graphics\n        [\n            x    100.70\n            y    787.38\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    55\n        label    \"\"\n        graphics\n        [\n            x    582.46\n            y    142.70\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    56\n        label    \"\"\n        graphics\n        [\n            x    563.41\n            y    354.94\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    57\n        label    \"\"\n        graphics\n        [\n            x    372.34\n            y    11.16\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    58\n        label    \"\"\n        graphics\n        [\n            x    186.49\n            y    92.75\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    59\n        label    \"\"\n        graphics\n        [\n            x    430.52\n            y    530.72\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    60\n        label    \"\"\n        graphics\n        [\n            x    385.95\n            y    648.83\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    61\n        label    \"\"\n        graphics\n        [\n            x    1080.79\n            y    510.87\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    62\n        label    \"\"\n        graphics\n        [\n            x    871.90\n            y    90.90\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    63\n        label    \"\"\n        graphics\n        [\n            x    874.04\n            y    838.59\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    64\n        label    \"\"\n        graphics\n        [\n            x    689.87\n            y    530.91\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    65\n        label    \"\"\n        graphics\n        [\n            x    1074.86\n            y    267.84\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    66\n        label    \"\"\n        graphics\n        [\n            x    681.00\n            y    717.71\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    67\n        label    \"\"\n        graphics\n        [\n            x    317.65\n            y    818.49\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    68\n        label    \"\"\n        graphics\n        [\n            x    128.96\n            y    343.61\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    69\n        label    \"\"\n        graphics\n        [\n            x    727.40\n            y    661.42\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    70\n        label    \"\"\n        graphics\n        [\n            x    115.56\n            y    622.99\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    71\n        label    \"\"\n        graphics\n        [\n            x    416.63\n            y    576.42\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    72\n        label    \"\"\n        graphics\n        [\n            x    969.91\n            y    367.85\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    73\n        label    \"\"\n        graphics\n        [\n            x    114.40\n            y    488.26\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    74\n        label    \"\"\n        graphics\n        [\n            x    685.33\n            y    202.36\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    75\n        label    \"\"\n        graphics\n        [\n            x    87.69\n            y    307.16\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    76\n        label    \"\"\n        graphics\n        [\n            x    482.37\n            y    551.74\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    77\n        label    \"\"\n        graphics\n        [\n            x    333.75\n            y    816.09\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    78\n        label    \"\"\n        graphics\n        [\n            x    694.12\n            y    615.71\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    79\n        label    \"\"\n        graphics\n        [\n            x    222.63\n            y    709.09\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    80\n        label    \"\"\n        graphics\n        [\n            x    731.39\n            y    130.89\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    81\n        label    \"\"\n        graphics\n        [\n            x    203.71\n            y    506.92\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    82\n        label    \"\"\n        graphics\n        [\n            x    195.20\n            y    861.01\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    83\n        label    \"\"\n        graphics\n        [\n            x    574.51\n            y    357.20\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    84\n        label    \"\"\n        graphics\n        [\n            x    1102.13\n            y    687.06\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    85\n        label    \"\"\n        graphics\n        [\n            x    102.77\n            y    1002.73\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    86\n        label    \"\"\n        graphics\n        [\n            x    383.28\n            y    429.55\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    87\n        label    \"\"\n        graphics\n        [\n            x    901.76\n            y    726.64\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    88\n        label    \"\"\n        graphics\n        [\n            x    656.63\n            y    885.86\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    89\n        label    \"\"\n        graphics\n        [\n            x    261.50\n            y    1063.29\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    90\n        label    \"\"\n        graphics\n        [\n            x    810.91\n            y    185.91\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    91\n        label    \"\"\n        graphics\n        [\n            x    129.75\n            y    46.06\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    92\n        label    \"\"\n        graphics\n        [\n            x    389.00\n            y    861.47\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    93\n        label    \"\"\n        graphics\n        [\n            x    325.30\n            y    459.18\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    94\n        label    \"\"\n        graphics\n        [\n            x    291.15\n            y    571.66\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    95\n        label    \"\"\n        graphics\n        [\n            x    1037.18\n            y    496.55\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    96\n        label    \"\"\n        graphics\n        [\n            x    1135.00\n            y    558.18\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    97\n        label    \"\"\n        graphics\n        [\n            x    45.40\n            y    175.58\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    98\n        label    \"\"\n        graphics\n        [\n            x    726.21\n            y    340.92\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    99\n        label    \"\"\n        graphics\n        [\n            x    433.14\n            y    290.28\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    100\n        label    \"\"\n        graphics\n        [\n            x    996.09\n            y    560.80\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    101\n        label    \"\"\n        graphics\n        [\n            x    100.68\n            y    208.72\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    102\n        label    \"\"\n        graphics\n        [\n            x    436.30\n            y    70.60\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    103\n        label    \"\"\n        graphics\n        [\n            x    1112.84\n            y    977.63\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    104\n        label    \"\"\n        graphics\n        [\n            x    206.83\n            y    348.03\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    105\n        label    \"\"\n        graphics\n        [\n            x    47.05\n            y    44.67\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    106\n        label    \"\"\n        graphics\n        [\n            x    353.55\n            y    654.13\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    107\n        label    \"\"\n        graphics\n        [\n            x    970.59\n            y    19.33\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    108\n        label    \"\"\n        graphics\n        [\n            x    17.04\n            y    819.49\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    109\n        label    \"\"\n        graphics\n        [\n            x    247.88\n            y    131.54\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    110\n        label    \"\"\n        graphics\n        [\n            x    409.00\n            y    388.76\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    111\n        label    \"\"\n        graphics\n        [\n            x    770.97\n            y    859.63\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    112\n        label    \"\"\n        graphics\n        [\n            x    778.56\n            y    1051.51\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    113\n        label    \"\"\n        graphics\n        [\n            x    45.82\n            y    897.75\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    114\n        label    \"\"\n        graphics\n        [\n            x    562.49\n            y    485.38\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    115\n        label    \"\"\n        graphics\n        [\n            x    894.85\n            y    911.05\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    116\n        label    \"\"\n        graphics\n        [\n            x    965.60\n            y    1011.40\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    117\n        label    \"\"\n        graphics\n        [\n            x    620.40\n            y    881.15\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    118\n        label    \"\"\n        graphics\n        [\n            x    401.97\n            y    885.82\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    119\n        label    \"\"\n        graphics\n        [\n            x    119.67\n            y    739.71\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    120\n        label    \"\"\n        graphics\n        [\n            x    307.10\n            y    962.49\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    121\n        label    \"\"\n        graphics\n        [\n            x    172.32\n            y    34.26\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    122\n        label    \"\"\n        graphics\n        [\n            x    49.45\n            y    418.80\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    123\n        label    \"\"\n        graphics\n        [\n            x    396.69\n            y    84.14\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    124\n        label    \"\"\n        graphics\n        [\n            x    1056.26\n            y    1075.23\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    125\n        label    \"\"\n        graphics\n        [\n            x    509.17\n            y    150.20\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    126\n        label    \"\"\n        graphics\n        [\n            x    519.61\n            y    726.33\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    127\n        label    \"\"\n        graphics\n        [\n            x    168.81\n            y    907.57\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    128\n        label    \"\"\n        graphics\n        [\n            x    1005.30\n            y    158.66\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    129\n        label    \"\"\n        graphics\n        [\n            x    951.67\n            y    227.88\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    130\n        label    \"\"\n        graphics\n        [\n            x    325.36\n            y    425.88\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    131\n        label    \"\"\n        graphics\n        [\n            x    735.56\n            y    22.34\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    132\n        label    \"\"\n        graphics\n        [\n            x    157.52\n            y    462.46\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    133\n        label    \"\"\n        graphics\n        [\n            x    448.31\n            y    762.73\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    134\n        label    \"\"\n        graphics\n        [\n            x    549.75\n            y    539.18\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    135\n        label    \"\"\n        graphics\n        [\n            x    403.79\n            y    31.54\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    136\n        label    \"\"\n        graphics\n        [\n            x    753.13\n            y    953.67\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    137\n        label    \"\"\n        graphics\n        [\n            x    197.26\n            y    679.19\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    138\n        label    \"\"\n        graphics\n        [\n            x    206.19\n            y    340.81\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    139\n        label    \"\"\n        graphics\n        [\n            x    762.53\n            y    226.18\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    140\n        label    \"\"\n        graphics\n        [\n            x    167.24\n            y    1051.79\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    141\n        label    \"\"\n        graphics\n        [\n            x    82.78\n            y    131.31\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    142\n        label    \"\"\n        graphics\n        [\n            x    1115.00\n            y    19.49\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    143\n        label    \"\"\n        graphics\n        [\n            x    591.69\n            y    255.36\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    144\n        label    \"\"\n        graphics\n        [\n            x    349.24\n            y    1112.46\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    145\n        label    \"\"\n        graphics\n        [\n            x    64.17\n            y    839.11\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    146\n        label    \"\"\n        graphics\n        [\n            x    959.66\n            y    575.40\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    147\n        label    \"\"\n        graphics\n        [\n            x    392.09\n            y    360.39\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    148\n        label    \"\"\n        graphics\n        [\n            x    541.87\n            y    655.57\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    149\n        label    \"\"\n        graphics\n        [\n            x    548.08\n            y    848.10\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    150\n        label    \"\"\n        graphics\n        [\n            x    57.74\n            y    198.03\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    151\n        label    \"\"\n        graphics\n        [\n            x    415.91\n            y    979.74\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    152\n        label    \"\"\n        graphics\n        [\n            x    1093.64\n            y    799.44\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    153\n        label    \"\"\n        graphics\n        [\n            x    798.97\n            y    51.60\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    154\n        label    \"\"\n        graphics\n        [\n            x    270.68\n            y    62.16\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    155\n        label    \"\"\n        graphics\n        [\n            x    541.49\n            y    826.37\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    156\n        label    \"\"\n        graphics\n        [\n            x    242.77\n            y    1036.56\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    157\n        label    \"\"\n        graphics\n        [\n            x    940.27\n            y    283.09\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    158\n        label    \"\"\n        graphics\n        [\n            x    892.44\n            y    179.13\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    159\n        label    \"\"\n        graphics\n        [\n            x    789.24\n            y    348.41\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    edge\n    [\n        source    1\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    10\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    100\n        target    47\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    101\n        target    43\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    102\n        target    60\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    103\n        target    45\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    104\n        target    90\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    105\n        target    87\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    106\n        target    67\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    107\n        target    98\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    108\n        target    44\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    109\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    11\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    110\n        target    99\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    111\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    112\n        target    103\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    113\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    114\n        target    63\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    115\n        target    44\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    116\n        target    65\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    117\n        target    68\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    118\n        target    63\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    119\n        target    103\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    12\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    120\n        target    105\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    120\n        target    51\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    121\n        target    67\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    122\n        target    124\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    122\n        target    27\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    123\n        target    116\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    124\n        target    113\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    125\n        target    83\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    126\n        target    85\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    127\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    128\n        target    71\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    129\n        target    72\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    13\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    130\n        target    64\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    131\n        target    75\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    132\n        target    49\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    133\n        target    49\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    134\n        target    81\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    135\n        target    38\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    136\n        target    126\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    137\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    137\n        target    46\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    138\n        target    112\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    139\n        target    88\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    14\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    140\n        target    106\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    141\n        target    108\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    142\n        target    122\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    142\n        target    143\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    143\n        target    51\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    144\n        target    32\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    145\n        target    96\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    146\n        target    140\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    147\n        target    75\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    148\n        target    93\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    149\n        target    99\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    15\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    150\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    151\n        target    50\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    152\n        target    110\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    153\n        target    117\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    154\n        target    113\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    155\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    156\n        target    149\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    157\n        target    130\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    157\n        target    60\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    158\n        target    33\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    159\n        target    35\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    16\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    17\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    18\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    19\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    2\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    20\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    21\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    21\n        target    66\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    22\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    23\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    24\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    25\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    25\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    26\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    27\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    28\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    29\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    3\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    30\n        target    27\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    31\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    32\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    32\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    33\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    34\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    35\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    36\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    37\n        target    19\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    38\n        target    31\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    39\n        target    35\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    4\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    40\n        target    119\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    40\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    41\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    42\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    43\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    44\n        target    38\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    45\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    46\n        target    32\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    47\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    48\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    49\n        target    31\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    5\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    50\n        target    30\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    51\n        target    33\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    52\n        target    50\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    53\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    54\n        target    35\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    55\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    55\n        target    47\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    56\n        target    28\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    57\n        target    24\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    58\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    59\n        target    19\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    6\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    60\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    61\n        target    59\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    62\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    63\n        target    124\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    63\n        target    34\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    64\n        target    42\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    65\n        target    111\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    65\n        target    56\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    65\n        target    77\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    66\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    67\n        target    41\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    67\n        target    64\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    68\n        target    31\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    69\n        target    115\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    69\n        target    68\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    7\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    70\n        target    44\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    71\n        target    44\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    72\n        target    37\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    73\n        target    59\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    74\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    74\n        target    66\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    75\n        target    60\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    76\n        target    72\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    77\n        target    66\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    78\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    79\n        target    38\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    79\n        target    44\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    8\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    80\n        target    54\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    81\n        target    52\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    82\n        target    38\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    83\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    84\n        target    72\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    85\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    86\n        target    40\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    87\n        target    50\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    88\n        target    35\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    89\n        target    28\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    9\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    90\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    91\n        target    84\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    92\n        target    54\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    93\n        target    32\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    94\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    95\n        target    88\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    96\n        target    40\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    97\n        target    59\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    98\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    99\n        target    97\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n]\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v160e176.tglf",
    "content": "0 1060.000 1044.000 30.000 30.000\n1 370.000 373.000 30.000 30.000\n2 90.000 403.000 30.000 30.000\n3 621.000 764.000 30.000 30.000\n4 922.000 829.000 30.000 30.000\n5 847.000 764.000 30.000 30.000\n6 619.000 1032.000 30.000 30.000\n7 191.000 468.000 30.000 30.000\n8 12.000 936.000 30.000 30.000\n9 760.000 176.000 30.000 30.000\n10 180.000 629.000 30.000 30.000\n11 171.000 244.000 30.000 30.000\n12 1122.000 219.000 30.000 30.000\n13 285.000 578.000 30.000 30.000\n14 289.000 365.000 30.000 30.000\n15 542.000 1057.000 30.000 30.000\n16 535.000 625.000 30.000 30.000\n17 1106.000 108.000 30.000 30.000\n18 1100.000 375.000 30.000 30.000\n19 543.000 1107.000 30.000 30.000\n20 896.000 253.000 30.000 30.000\n21 698.000 411.000 30.000 30.000\n22 231.000 454.000 30.000 30.000\n23 272.000 196.000 30.000 30.000\n24 1059.000 732.000 30.000 30.000\n25 1078.000 218.000 30.000 30.000\n26 87.000 511.000 30.000 30.000\n27 1015.000 114.000 30.000 30.000\n28 640.000 1103.000 30.000 30.000\n29 769.000 44.000 30.000 30.000\n30 834.000 204.000 30.000 30.000\n31 444.000 357.000 30.000 30.000\n32 1089.000 93.000 30.000 30.000\n33 73.000 933.000 30.000 30.000\n34 1029.000 991.000 30.000 30.000\n35 40.000 283.000 30.000 30.000\n36 294.000 728.000 30.000 30.000\n37 926.000 694.000 30.000 30.000\n38 1109.000 580.000 30.000 30.000\n39 869.000 821.000 30.000 30.000\n40 838.000 30.000 30.000 30.000\n41 730.000 771.000 30.000 30.000\n42 512.000 270.000 30.000 30.000\n43 347.000 1043.000 30.000 30.000\n44 697.000 683.000 30.000 30.000\n45 159.000 796.000 30.000 30.000\n46 313.000 986.000 30.000 30.000\n47 1100.000 830.000 30.000 30.000\n48 1108.000 708.000 30.000 30.000\n49 221.000 1027.000 30.000 30.000\n50 258.000 652.000 30.000 30.000\n51 625.000 610.000 30.000 30.000\n52 237.000 1137.000 30.000 30.000\n53 139.000 484.000 30.000 30.000\n54 100.000 787.000 30.000 30.000\n55 582.000 142.000 30.000 30.000\n56 563.000 354.000 30.000 30.000\n57 372.000 11.000 30.000 30.000\n58 186.000 92.000 30.000 30.000\n59 430.000 530.000 30.000 30.000\n60 385.000 648.000 30.000 30.000\n61 1080.000 510.000 30.000 30.000\n62 871.000 90.000 30.000 30.000\n63 874.000 838.000 30.000 30.000\n64 689.000 530.000 30.000 30.000\n65 1074.000 267.000 30.000 30.000\n66 681.000 717.000 30.000 30.000\n67 317.000 818.000 30.000 30.000\n68 128.000 343.000 30.000 30.000\n69 727.000 661.000 30.000 30.000\n70 115.000 622.000 30.000 30.000\n71 416.000 576.000 30.000 30.000\n72 969.000 367.000 30.000 30.000\n73 114.000 488.000 30.000 30.000\n74 685.000 202.000 30.000 30.000\n75 87.000 307.000 30.000 30.000\n76 482.000 551.000 30.000 30.000\n77 333.000 816.000 30.000 30.000\n78 694.000 615.000 30.000 30.000\n79 222.000 709.000 30.000 30.000\n80 731.000 130.000 30.000 30.000\n81 203.000 506.000 30.000 30.000\n82 195.000 861.000 30.000 30.000\n83 574.000 357.000 30.000 30.000\n84 1102.000 687.000 30.000 30.000\n85 102.000 1002.000 30.000 30.000\n86 383.000 429.000 30.000 30.000\n87 901.000 726.000 30.000 30.000\n88 656.000 885.000 30.000 30.000\n89 261.000 1063.000 30.000 30.000\n90 810.000 185.000 30.000 30.000\n91 129.000 46.000 30.000 30.000\n92 389.000 861.000 30.000 30.000\n93 325.000 459.000 30.000 30.000\n94 291.000 571.000 30.000 30.000\n95 1037.000 496.000 30.000 30.000\n96 1135.000 558.000 30.000 30.000\n97 45.000 175.000 30.000 30.000\n98 726.000 340.000 30.000 30.000\n99 433.000 290.000 30.000 30.000\n100 996.000 560.000 30.000 30.000\n101 100.000 208.000 30.000 30.000\n102 436.000 70.000 30.000 30.000\n103 1112.000 977.000 30.000 30.000\n104 206.000 348.000 30.000 30.000\n105 47.000 44.000 30.000 30.000\n106 353.000 654.000 30.000 30.000\n107 970.000 19.000 30.000 30.000\n108 17.000 819.000 30.000 30.000\n109 247.000 131.000 30.000 30.000\n110 409.000 388.000 30.000 30.000\n111 770.000 859.000 30.000 30.000\n112 778.000 1051.000 30.000 30.000\n113 45.000 897.000 30.000 30.000\n114 562.000 485.000 30.000 30.000\n115 894.000 911.000 30.000 30.000\n116 965.000 1011.000 30.000 30.000\n117 620.000 881.000 30.000 30.000\n118 401.000 885.000 30.000 30.000\n119 119.000 739.000 30.000 30.000\n120 307.000 962.000 30.000 30.000\n121 172.000 34.000 30.000 30.000\n122 49.000 418.000 30.000 30.000\n123 396.000 84.000 30.000 30.000\n124 1056.000 1075.000 30.000 30.000\n125 509.000 150.000 30.000 30.000\n126 519.000 726.000 30.000 30.000\n127 168.000 907.000 30.000 30.000\n128 1005.000 158.000 30.000 30.000\n129 951.000 227.000 30.000 30.000\n130 325.000 425.000 30.000 30.000\n131 735.000 22.000 30.000 30.000\n132 157.000 462.000 30.000 30.000\n133 448.000 762.000 30.000 30.000\n134 549.000 539.000 30.000 30.000\n135 403.000 31.000 30.000 30.000\n136 753.000 953.000 30.000 30.000\n137 197.000 679.000 30.000 30.000\n138 206.000 340.000 30.000 30.000\n139 762.000 226.000 30.000 30.000\n140 167.000 1051.000 30.000 30.000\n141 82.000 131.000 30.000 30.000\n142 1115.000 19.000 30.000 30.000\n143 591.000 255.000 30.000 30.000\n144 349.000 1112.000 30.000 30.000\n145 64.000 839.000 30.000 30.000\n146 959.000 575.000 30.000 30.000\n147 392.000 360.000 30.000 30.000\n148 541.000 655.000 30.000 30.000\n149 548.000 848.000 30.000 30.000\n150 57.000 198.000 30.000 30.000\n151 415.000 979.000 30.000 30.000\n152 1093.000 799.000 30.000 30.000\n153 798.000 51.000 30.000 30.000\n154 270.000 62.000 30.000 30.000\n155 541.000 826.000 30.000 30.000\n156 242.000 1036.000 30.000 30.000\n157 940.000 283.000 30.000 30.000\n158 892.000 179.000 30.000 30.000\n159 789.000 348.000 30.000 30.000\n#\n107 98\n32 6\n140 106\n24 4\n149 99\n11 2\n127 6\n113 23\n97 59\n21 66\n132 49\n72 37\n69 68\n155 9\n136 126\n33 3\n93 32\n88 35\n146 140\n131 75\n12 8\n123 116\n112 103\n25 8\n142 143\n130 64\n59 19\n39 35\n124 113\n158 33\n22 15\n25 23\n133 49\n34 21\n57 24\n7 5\n18 16\n13 8\n106 67\n125 83\n1 0\n118 63\n152 110\n65 77\n137 16\n115 44\n104 90\n79 44\n6 4\n61 59\n23 15\n151 50\n62 13\n98 18\n74 66\n70 44\n5 2\n27 11\n20 8\n144 32\n42 3\n120 105\n15 11\n78 2\n43 2\n145 96\n110 99\n84 72\n73 59\n135 38\n63 124\n31 4\n147 75\n65 56\n19 14\n35 17\n111 11\n156 149\n95 88\n96 40\n142 122\n16 11\n41 9\n36 4\n4 1\n143 51\n74 18\n64 42\n69 115\n44 38\n87 50\n10 5\n65 111\n76 72\n117 68\n63 34\n58 2\n120 51\n29 17\n141 108\n138 112\n105 87\n119 103\n102 60\n66 11\n92 54\n54 35\n86 40\n9 2\n126 85\n30 27\n45 2\n128 71\n154 113\n108 44\n55 12\n53 16\n77 66\n83 9\n75 60\n52 50\n116 65\n90 11\n40 119\n47 4\n38 31\n99 97\n60 5\n48 21\n68 31\n49 31\n82 38\n46 32\n103 45\n37 19\n122 124\n94 11\n28 5\n85 10\n122 27\n157 130\n55 47\n71 44\n67 41\n129 72\n121 67\n134 81\n100 47\n79 38\n80 54\n26 8\n14 7\n51 33\n21 14\n148 93\n150 0\n67 64\n8 0\n114 63\n2 1\n157 60\n56 28\n3 1\n101 43\n109 2\n91 84\n159 35\n17 10\n50 30\n89 28\n32 5\n40 2\n81 52\n139 88\n137 46\n153 117\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v160e192.gml",
    "content": "graph\n[\n    node\n    [\n        id    0\n        label    \"\"\n        graphics\n        [\n            x    151.79\n            y    258.08\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    1\n        label    \"\"\n        graphics\n        [\n            x    210.74\n            y    138.52\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    2\n        label    \"\"\n        graphics\n        [\n            x    53.49\n            y    502.91\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    3\n        label    \"\"\n        graphics\n        [\n            x    412.22\n            y    568.00\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    4\n        label    \"\"\n        graphics\n        [\n            x    331.19\n            y    717.03\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    5\n        label    \"\"\n        graphics\n        [\n            x    1052.61\n            y    521.64\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    6\n        label    \"\"\n        graphics\n        [\n            x    45.83\n            y    1081.37\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    7\n        label    \"\"\n        graphics\n        [\n            x    762.61\n            y    90.82\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    8\n        label    \"\"\n        graphics\n        [\n            x    1017.43\n            y    223.50\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    9\n        label    \"\"\n        graphics\n        [\n            x    831.56\n            y    1058.87\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    10\n        label    \"\"\n        graphics\n        [\n            x    215.65\n            y    1001.05\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    11\n        label    \"\"\n        graphics\n        [\n            x    130.15\n            y    687.77\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    12\n        label    \"\"\n        graphics\n        [\n            x    167.77\n            y    298.69\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    13\n        label    \"\"\n        graphics\n        [\n            x    351.47\n            y    450.18\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    14\n        label    \"\"\n        graphics\n        [\n            x    677.10\n            y    935.58\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    15\n        label    \"\"\n        graphics\n        [\n            x    1136.30\n            y    293.41\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    16\n        label    \"\"\n        graphics\n        [\n            x    445.15\n            y    894.56\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    17\n        label    \"\"\n        graphics\n        [\n            x    1011.19\n            y    690.21\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    18\n        label    \"\"\n        graphics\n        [\n            x    932.33\n            y    759.98\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    19\n        label    \"\"\n        graphics\n        [\n            x    912.21\n            y    644.65\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    20\n        label    \"\"\n        graphics\n        [\n            x    242.68\n            y    70.13\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    21\n        label    \"\"\n        graphics\n        [\n            x    1012.47\n            y    472.16\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    22\n        label    \"\"\n        graphics\n        [\n            x    448.88\n            y    1032.24\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    23\n        label    \"\"\n        graphics\n        [\n            x    1038.75\n            y    815.58\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    24\n        label    \"\"\n        graphics\n        [\n            x    524.00\n            y    1028.55\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    25\n        label    \"\"\n        graphics\n        [\n            x    604.67\n            y    776.71\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    26\n        label    \"\"\n        graphics\n        [\n            x    84.43\n            y    607.37\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    27\n        label    \"\"\n        graphics\n        [\n            x    663.04\n            y    250.87\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    28\n        label    \"\"\n        graphics\n        [\n            x    81.22\n            y    541.07\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    29\n        label    \"\"\n        graphics\n        [\n            x    177.01\n            y    473.28\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    30\n        label    \"\"\n        graphics\n        [\n            x    725.76\n            y    188.48\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    31\n        label    \"\"\n        graphics\n        [\n            x    330.47\n            y    728.01\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    32\n        label    \"\"\n        graphics\n        [\n            x    1048.67\n            y    183.19\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    33\n        label    \"\"\n        graphics\n        [\n            x    430.35\n            y    928.14\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    34\n        label    \"\"\n        graphics\n        [\n            x    936.93\n            y    1115.89\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    35\n        label    \"\"\n        graphics\n        [\n            x    1016.97\n            y    456.43\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    36\n        label    \"\"\n        graphics\n        [\n            x    519.43\n            y    499.60\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    37\n        label    \"\"\n        graphics\n        [\n            x    402.14\n            y    149.05\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    38\n        label    \"\"\n        graphics\n        [\n            x    1061.45\n            y    1011.90\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    39\n        label    \"\"\n        graphics\n        [\n            x    652.33\n            y    82.82\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    40\n        label    \"\"\n        graphics\n        [\n            x    905.74\n            y    923.15\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    41\n        label    \"\"\n        graphics\n        [\n            x    207.43\n            y    828.60\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    42\n        label    \"\"\n        graphics\n        [\n            x    548.83\n            y    300.93\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    43\n        label    \"\"\n        graphics\n        [\n            x    1069.92\n            y    628.54\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    44\n        label    \"\"\n        graphics\n        [\n            x    248.00\n            y    402.83\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    45\n        label    \"\"\n        graphics\n        [\n            x    869.99\n            y    815.26\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    46\n        label    \"\"\n        graphics\n        [\n            x    298.57\n            y    7.16\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    47\n        label    \"\"\n        graphics\n        [\n            x    692.95\n            y    353.50\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    48\n        label    \"\"\n        graphics\n        [\n            x    534.14\n            y    64.32\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    49\n        label    \"\"\n        graphics\n        [\n            x    1123.66\n            y    1050.17\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    50\n        label    \"\"\n        graphics\n        [\n            x    1109.09\n            y    1004.86\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    51\n        label    \"\"\n        graphics\n        [\n            x    1025.56\n            y    63.58\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    52\n        label    \"\"\n        graphics\n        [\n            x    10.81\n            y    1009.93\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    53\n        label    \"\"\n        graphics\n        [\n            x    595.92\n            y    621.92\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    54\n        label    \"\"\n        graphics\n        [\n            x    1072.98\n            y    61.69\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    55\n        label    \"\"\n        graphics\n        [\n            x    945.40\n            y    211.84\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    56\n        label    \"\"\n        graphics\n        [\n            x    356.73\n            y    367.05\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    57\n        label    \"\"\n        graphics\n        [\n            x    932.36\n            y    330.06\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    58\n        label    \"\"\n        graphics\n        [\n            x    1073.03\n            y    902.39\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    59\n        label    \"\"\n        graphics\n        [\n            x    364.26\n            y    697.43\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    60\n        label    \"\"\n        graphics\n        [\n            x    848.58\n            y    206.10\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    61\n        label    \"\"\n        graphics\n        [\n            x    537.57\n            y    1036.99\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    62\n        label    \"\"\n        graphics\n        [\n            x    917.53\n            y    833.04\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    63\n        label    \"\"\n        graphics\n        [\n            x    701.91\n            y    577.86\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    64\n        label    \"\"\n        graphics\n        [\n            x    273.11\n            y    787.39\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    65\n        label    \"\"\n        graphics\n        [\n            x    814.78\n            y    601.99\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    66\n        label    \"\"\n        graphics\n        [\n            x    629.59\n            y    725.48\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    67\n        label    \"\"\n        graphics\n        [\n            x    984.03\n            y    106.48\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    68\n        label    \"\"\n        graphics\n        [\n            x    1006.48\n            y    200.64\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    69\n        label    \"\"\n        graphics\n        [\n            x    204.07\n            y    635.49\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    70\n        label    \"\"\n        graphics\n        [\n            x    362.43\n            y    426.31\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    71\n        label    \"\"\n        graphics\n        [\n            x    915.16\n            y    892.80\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    72\n        label    \"\"\n        graphics\n        [\n            x    0.16\n            y    104.06\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    73\n        label    \"\"\n        graphics\n        [\n            x    567.22\n            y    526.09\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    74\n        label    \"\"\n        graphics\n        [\n            x    1116.39\n            y    561.89\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    75\n        label    \"\"\n        graphics\n        [\n            x    19.60\n            y    98.85\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    76\n        label    \"\"\n        graphics\n        [\n            x    973.74\n            y    554.00\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    77\n        label    \"\"\n        graphics\n        [\n            x    1.59\n            y    803.27\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    78\n        label    \"\"\n        graphics\n        [\n            x    53.26\n            y    174.39\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    79\n        label    \"\"\n        graphics\n        [\n            x    292.67\n            y    765.29\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    80\n        label    \"\"\n        graphics\n        [\n            x    675.18\n            y    246.28\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    81\n        label    \"\"\n        graphics\n        [\n            x    118.06\n            y    540.44\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    82\n        label    \"\"\n        graphics\n        [\n            x    497.76\n            y    264.93\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    83\n        label    \"\"\n        graphics\n        [\n            x    122.32\n            y    248.70\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    84\n        label    \"\"\n        graphics\n        [\n            x    871.80\n            y    1043.00\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    85\n        label    \"\"\n        graphics\n        [\n            x    433.99\n            y    316.93\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    86\n        label    \"\"\n        graphics\n        [\n            x    595.52\n            y    1053.55\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    87\n        label    \"\"\n        graphics\n        [\n            x    58.51\n            y    950.60\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    88\n        label    \"\"\n        graphics\n        [\n            x    20.65\n            y    636.33\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    89\n        label    \"\"\n        graphics\n        [\n            x    396.88\n            y    64.21\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    90\n        label    \"\"\n        graphics\n        [\n            x    379.90\n            y    224.23\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    91\n        label    \"\"\n        graphics\n        [\n            x    639.60\n            y    707.28\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    92\n        label    \"\"\n        graphics\n        [\n            x    802.00\n            y    354.16\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    93\n        label    \"\"\n        graphics\n        [\n            x    773.51\n            y    830.75\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    94\n        label    \"\"\n        graphics\n        [\n            x    698.90\n            y    313.41\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    95\n        label    \"\"\n        graphics\n        [\n            x    475.38\n            y    846.40\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    96\n        label    \"\"\n        graphics\n        [\n            x    796.88\n            y    17.20\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    97\n        label    \"\"\n        graphics\n        [\n            x    304.66\n            y    440.78\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    98\n        label    \"\"\n        graphics\n        [\n            x    1135.96\n            y    432.16\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    99\n        label    \"\"\n        graphics\n        [\n            x    212.73\n            y    787.24\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    100\n        label    \"\"\n        graphics\n        [\n            x    309.00\n            y    391.07\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    101\n        label    \"\"\n        graphics\n        [\n            x    663.51\n            y    473.18\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    102\n        label    \"\"\n        graphics\n        [\n            x    406.96\n            y    857.40\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    103\n        label    \"\"\n        graphics\n        [\n            x    660.92\n            y    124.72\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    104\n        label    \"\"\n        graphics\n        [\n            x    477.57\n            y    1032.85\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    105\n        label    \"\"\n        graphics\n        [\n            x    205.12\n            y    806.28\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    106\n        label    \"\"\n        graphics\n        [\n            x    318.79\n            y    288.44\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    107\n        label    \"\"\n        graphics\n        [\n            x    1035.47\n            y    797.38\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    108\n        label    \"\"\n        graphics\n        [\n            x    945.82\n            y    105.76\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    109\n        label    \"\"\n        graphics\n        [\n            x    824.16\n            y    642.91\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    110\n        label    \"\"\n        graphics\n        [\n            x    662.02\n            y    16.79\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    111\n        label    \"\"\n        graphics\n        [\n            x    540.87\n            y    77.33\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    112\n        label    \"\"\n        graphics\n        [\n            x    56.71\n            y    30.23\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    113\n        label    \"\"\n        graphics\n        [\n            x    256.87\n            y    1032.44\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    114\n        label    \"\"\n        graphics\n        [\n            x    600.17\n            y    754.99\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    115\n        label    \"\"\n        graphics\n        [\n            x    712.16\n            y    73.56\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    116\n        label    \"\"\n        graphics\n        [\n            x    282.94\n            y    11.11\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    117\n        label    \"\"\n        graphics\n        [\n            x    607.83\n            y    1053.54\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    118\n        label    \"\"\n        graphics\n        [\n            x    673.97\n            y    766.80\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    119\n        label    \"\"\n        graphics\n        [\n            x    641.71\n            y    983.44\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    120\n        label    \"\"\n        graphics\n        [\n            x    669.64\n            y    742.33\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    121\n        label    \"\"\n        graphics\n        [\n            x    202.18\n            y    397.27\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    122\n        label    \"\"\n        graphics\n        [\n            x    558.31\n            y    369.92\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    123\n        label    \"\"\n        graphics\n        [\n            x    594.75\n            y    879.98\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    124\n        label    \"\"\n        graphics\n        [\n            x    832.38\n            y    1119.96\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    125\n        label    \"\"\n        graphics\n        [\n            x    469.66\n            y    342.90\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    126\n        label    \"\"\n        graphics\n        [\n            x    289.05\n            y    788.90\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    127\n        label    \"\"\n        graphics\n        [\n            x    282.99\n            y    389.63\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    128\n        label    \"\"\n        graphics\n        [\n            x    238.67\n            y    402.65\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    129\n        label    \"\"\n        graphics\n        [\n            x    270.37\n            y    807.27\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    130\n        label    \"\"\n        graphics\n        [\n            x    681.08\n            y    175.37\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    131\n        label    \"\"\n        graphics\n        [\n            x    633.38\n            y    641.05\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    132\n        label    \"\"\n        graphics\n        [\n            x    837.34\n            y    343.59\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    133\n        label    \"\"\n        graphics\n        [\n            x    235.67\n            y    20.17\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    134\n        label    \"\"\n        graphics\n        [\n            x    473.36\n            y    848.70\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    135\n        label    \"\"\n        graphics\n        [\n            x    28.65\n            y    681.41\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    136\n        label    \"\"\n        graphics\n        [\n            x    1013.52\n            y    263.13\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    137\n        label    \"\"\n        graphics\n        [\n            x    405.07\n            y    336.25\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    138\n        label    \"\"\n        graphics\n        [\n            x    468.91\n            y    594.63\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    139\n        label    \"\"\n        graphics\n        [\n            x    69.78\n            y    1092.29\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    140\n        label    \"\"\n        graphics\n        [\n            x    589.44\n            y    1033.05\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    141\n        label    \"\"\n        graphics\n        [\n            x    72.33\n            y    379.29\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    142\n        label    \"\"\n        graphics\n        [\n            x    366.56\n            y    18.97\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    143\n        label    \"\"\n        graphics\n        [\n            x    457.91\n            y    725.66\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    144\n        label    \"\"\n        graphics\n        [\n            x    886.10\n            y    333.21\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    145\n        label    \"\"\n        graphics\n        [\n            x    556.57\n            y    1063.09\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    146\n        label    \"\"\n        graphics\n        [\n            x    311.67\n            y    472.38\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    147\n        label    \"\"\n        graphics\n        [\n            x    1003.41\n            y    550.47\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    148\n        label    \"\"\n        graphics\n        [\n            x    866.98\n            y    276.84\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    149\n        label    \"\"\n        graphics\n        [\n            x    298.82\n            y    846.55\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    150\n        label    \"\"\n        graphics\n        [\n            x    717.52\n            y    687.31\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    151\n        label    \"\"\n        graphics\n        [\n            x    1026.91\n            y    353.10\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    152\n        label    \"\"\n        graphics\n        [\n            x    751.60\n            y    503.50\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    153\n        label    \"\"\n        graphics\n        [\n            x    419.78\n            y    607.11\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    154\n        label    \"\"\n        graphics\n        [\n            x    697.02\n            y    1107.38\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    155\n        label    \"\"\n        graphics\n        [\n            x    466.59\n            y    201.85\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    156\n        label    \"\"\n        graphics\n        [\n            x    156.57\n            y    670.96\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    157\n        label    \"\"\n        graphics\n        [\n            x    460.25\n            y    214.27\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    158\n        label    \"\"\n        graphics\n        [\n            x    883.10\n            y    865.46\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    159\n        label    \"\"\n        graphics\n        [\n            x    365.29\n            y    372.59\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    edge\n    [\n        source    1\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    10\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    10\n        target    124\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    100\n        target    40\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    101\n        target    88\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    102\n        target    63\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    103\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    104\n        target    48\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    105\n        target    93\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    106\n        target    32\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    107\n        target    25\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    107\n        target    94\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    108\n        target    103\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    109\n        target    83\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    11\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    110\n        target    98\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    111\n        target    32\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    112\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    113\n        target    112\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    114\n        target    72\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    115\n        target    111\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    116\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    117\n        target    111\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    118\n        target    35\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    119\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    12\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    120\n        target    79\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    121\n        target    38\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    122\n        target    111\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    123\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    123\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    124\n        target    26\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    125\n        target    55\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    126\n        target    81\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    127\n        target    32\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    128\n        target    78\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    129\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    13\n        target    54\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    13\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    130\n        target    119\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    131\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    131\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    132\n        target    130\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    132\n        target    55\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    133\n        target    74\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    134\n        target    110\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    135\n        target    63\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    136\n        target    62\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    137\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    138\n        target    35\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    139\n        target    114\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    14\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    140\n        target    139\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    140\n        target    39\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    141\n        target    79\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    142\n        target    29\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    142\n        target    30\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    143\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    144\n        target    54\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    145\n        target    93\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    146\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    147\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    148\n        target    32\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    148\n        target    95\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    149\n        target    74\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    149\n        target    97\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    15\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    150\n        target    56\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    151\n        target    83\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    152\n        target    90\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    153\n        target    117\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    154\n        target    41\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    155\n        target    131\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    155\n        target    56\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    155\n        target    83\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    156\n        target    38\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    157\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    158\n        target    117\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    159\n        target    122\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    16\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    17\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    18\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    19\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    2\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    20\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    21\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    22\n        target    19\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    23\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    24\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    25\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    26\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    27\n        target    25\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    28\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    29\n        target    143\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    29\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    3\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    30\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    31\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    32\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    33\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    34\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    35\n        target    31\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    36\n        target    133\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    36\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    37\n        target    32\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    38\n        target    30\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    38\n        target    62\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    39\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    4\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    40\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    40\n        target    74\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    41\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    42\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    43\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    44\n        target    30\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    45\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    46\n        target    44\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    47\n        target    40\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    48\n        target    36\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    48\n        target    39\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    49\n        target    111\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    49\n        target    115\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    49\n        target    32\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    5\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    50\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    51\n        target    33\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    52\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    53\n        target    156\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    53\n        target    34\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    54\n        target    44\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    55\n        target    44\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    56\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    57\n        target    43\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    58\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    59\n        target    38\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    59\n        target    68\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    6\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    60\n        target    100\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    60\n        target    43\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    61\n        target    32\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    62\n        target    48\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    63\n        target    58\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    64\n        target    60\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    65\n        target    26\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    65\n        target    59\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    65\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    66\n        target    58\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    67\n        target    31\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    68\n        target    57\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    69\n        target    59\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    7\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    70\n        target    53\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    71\n        target    64\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    72\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    72\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    73\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    74\n        target    31\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    75\n        target    155\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    75\n        target    59\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    76\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    76\n        target    71\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    77\n        target    19\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    78\n        target    116\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    78\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    79\n        target    59\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    8\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    80\n        target    20\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    81\n        target    32\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    82\n        target    30\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    82\n        target    61\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    83\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    84\n        target    83\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    85\n        target    139\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    85\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    86\n        target    20\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    87\n        target    41\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    88\n        target    84\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    89\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    9\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    9\n        target    88\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    90\n        target    67\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    91\n        target    73\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    92\n        target    84\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    93\n        target    53\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    94\n        target    47\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    95\n        target    54\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    96\n        target    127\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    96\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    97\n        target    64\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    98\n        target    53\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    98\n        target    93\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    99\n        target    49\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n]\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v160e192.tglf",
    "content": "0 151.000 258.000 30.000 30.000\n1 210.000 138.000 30.000 30.000\n2 53.000 502.000 30.000 30.000\n3 412.000 568.000 30.000 30.000\n4 331.000 717.000 30.000 30.000\n5 1052.000 521.000 30.000 30.000\n6 45.000 1081.000 30.000 30.000\n7 762.000 90.000 30.000 30.000\n8 1017.000 223.000 30.000 30.000\n9 831.000 1058.000 30.000 30.000\n10 215.000 1001.000 30.000 30.000\n11 130.000 687.000 30.000 30.000\n12 167.000 298.000 30.000 30.000\n13 351.000 450.000 30.000 30.000\n14 677.000 935.000 30.000 30.000\n15 1136.000 293.000 30.000 30.000\n16 445.000 894.000 30.000 30.000\n17 1011.000 690.000 30.000 30.000\n18 932.000 759.000 30.000 30.000\n19 912.000 644.000 30.000 30.000\n20 242.000 70.000 30.000 30.000\n21 1012.000 472.000 30.000 30.000\n22 448.000 1032.000 30.000 30.000\n23 1038.000 815.000 30.000 30.000\n24 524.000 1028.000 30.000 30.000\n25 604.000 776.000 30.000 30.000\n26 84.000 607.000 30.000 30.000\n27 663.000 250.000 30.000 30.000\n28 81.000 541.000 30.000 30.000\n29 177.000 473.000 30.000 30.000\n30 725.000 188.000 30.000 30.000\n31 330.000 728.000 30.000 30.000\n32 1048.000 183.000 30.000 30.000\n33 430.000 928.000 30.000 30.000\n34 936.000 1115.000 30.000 30.000\n35 1016.000 456.000 30.000 30.000\n36 519.000 499.000 30.000 30.000\n37 402.000 149.000 30.000 30.000\n38 1061.000 1011.000 30.000 30.000\n39 652.000 82.000 30.000 30.000\n40 905.000 923.000 30.000 30.000\n41 207.000 828.000 30.000 30.000\n42 548.000 300.000 30.000 30.000\n43 1069.000 628.000 30.000 30.000\n44 248.000 402.000 30.000 30.000\n45 869.000 815.000 30.000 30.000\n46 298.000 7.000 30.000 30.000\n47 692.000 353.000 30.000 30.000\n48 534.000 64.000 30.000 30.000\n49 1123.000 1050.000 30.000 30.000\n50 1109.000 1004.000 30.000 30.000\n51 1025.000 63.000 30.000 30.000\n52 10.000 1009.000 30.000 30.000\n53 595.000 621.000 30.000 30.000\n54 1072.000 61.000 30.000 30.000\n55 945.000 211.000 30.000 30.000\n56 356.000 367.000 30.000 30.000\n57 932.000 330.000 30.000 30.000\n58 1073.000 902.000 30.000 30.000\n59 364.000 697.000 30.000 30.000\n60 848.000 206.000 30.000 30.000\n61 537.000 1036.000 30.000 30.000\n62 917.000 833.000 30.000 30.000\n63 701.000 577.000 30.000 30.000\n64 273.000 787.000 30.000 30.000\n65 814.000 601.000 30.000 30.000\n66 629.000 725.000 30.000 30.000\n67 984.000 106.000 30.000 30.000\n68 1006.000 200.000 30.000 30.000\n69 204.000 635.000 30.000 30.000\n70 362.000 426.000 30.000 30.000\n71 915.000 892.000 30.000 30.000\n72 0.000 104.000 30.000 30.000\n73 567.000 526.000 30.000 30.000\n74 1116.000 561.000 30.000 30.000\n75 19.000 98.000 30.000 30.000\n76 973.000 554.000 30.000 30.000\n77 1.000 803.000 30.000 30.000\n78 53.000 174.000 30.000 30.000\n79 292.000 765.000 30.000 30.000\n80 675.000 246.000 30.000 30.000\n81 118.000 540.000 30.000 30.000\n82 497.000 264.000 30.000 30.000\n83 122.000 248.000 30.000 30.000\n84 871.000 1043.000 30.000 30.000\n85 433.000 316.000 30.000 30.000\n86 595.000 1053.000 30.000 30.000\n87 58.000 950.000 30.000 30.000\n88 20.000 636.000 30.000 30.000\n89 396.000 64.000 30.000 30.000\n90 379.000 224.000 30.000 30.000\n91 639.000 707.000 30.000 30.000\n92 802.000 354.000 30.000 30.000\n93 773.000 830.000 30.000 30.000\n94 698.000 313.000 30.000 30.000\n95 475.000 846.000 30.000 30.000\n96 796.000 17.000 30.000 30.000\n97 304.000 440.000 30.000 30.000\n98 1135.000 432.000 30.000 30.000\n99 212.000 787.000 30.000 30.000\n100 309.000 391.000 30.000 30.000\n101 663.000 473.000 30.000 30.000\n102 406.000 857.000 30.000 30.000\n103 660.000 124.000 30.000 30.000\n104 477.000 1032.000 30.000 30.000\n105 205.000 806.000 30.000 30.000\n106 318.000 288.000 30.000 30.000\n107 1035.000 797.000 30.000 30.000\n108 945.000 105.000 30.000 30.000\n109 824.000 642.000 30.000 30.000\n110 662.000 16.000 30.000 30.000\n111 540.000 77.000 30.000 30.000\n112 56.000 30.000 30.000 30.000\n113 256.000 1032.000 30.000 30.000\n114 600.000 754.000 30.000 30.000\n115 712.000 73.000 30.000 30.000\n116 282.000 11.000 30.000 30.000\n117 607.000 1053.000 30.000 30.000\n118 673.000 766.000 30.000 30.000\n119 641.000 983.000 30.000 30.000\n120 669.000 742.000 30.000 30.000\n121 202.000 397.000 30.000 30.000\n122 558.000 369.000 30.000 30.000\n123 594.000 879.000 30.000 30.000\n124 832.000 1119.000 30.000 30.000\n125 469.000 342.000 30.000 30.000\n126 289.000 788.000 30.000 30.000\n127 282.000 389.000 30.000 30.000\n128 238.000 402.000 30.000 30.000\n129 270.000 807.000 30.000 30.000\n130 681.000 175.000 30.000 30.000\n131 633.000 641.000 30.000 30.000\n132 837.000 343.000 30.000 30.000\n133 235.000 20.000 30.000 30.000\n134 473.000 848.000 30.000 30.000\n135 28.000 681.000 30.000 30.000\n136 1013.000 263.000 30.000 30.000\n137 405.000 336.000 30.000 30.000\n138 468.000 594.000 30.000 30.000\n139 69.000 1092.000 30.000 30.000\n140 589.000 1033.000 30.000 30.000\n141 72.000 379.000 30.000 30.000\n142 366.000 18.000 30.000 30.000\n143 457.000 725.000 30.000 30.000\n144 886.000 333.000 30.000 30.000\n145 556.000 1063.000 30.000 30.000\n146 311.000 472.000 30.000 30.000\n147 1003.000 550.000 30.000 30.000\n148 866.000 276.000 30.000 30.000\n149 298.000 846.000 30.000 30.000\n150 717.000 687.000 30.000 30.000\n151 1026.000 353.000 30.000 30.000\n152 751.000 503.000 30.000 30.000\n153 419.000 607.000 30.000 30.000\n154 697.000 1107.000 30.000 30.000\n155 466.000 201.000 30.000 30.000\n156 156.000 670.000 30.000 30.000\n157 460.000 214.000 30.000 30.000\n158 883.000 865.000 30.000 30.000\n159 365.000 372.000 30.000 30.000\n#\n10 0\n122 111\n100 40\n76 71\n8 7\n67 31\n49 32\n60 43\n73 18\n81 32\n16 4\n53 34\n103 22\n158 117\n149 97\n34 7\n87 41\n23 11\n2 1\n9 2\n64 60\n32 13\n114 72\n65 59\n117 111\n119 16\n153 117\n112 3\n97 64\n143 6\n60 100\n54 44\n95 54\n150 56\n85 139\n96 127\n72 1\n156 38\n136 62\n89 7\n51 33\n29 23\n65 26\n7 3\n35 31\n108 103\n38 62\n19 9\n50 23\n65 6\n120 79\n144 54\n39 4\n88 84\n76 21\n6 4\n70 53\n129 1\n37 32\n75 155\n157 17\n151 83\n26 8\n115 111\n133 74\n68 57\n121 38\n92 84\n155 56\n125 55\n77 19\n126 81\n93 53\n33 1\n36 133\n148 32\n13 54\n48 36\n111 32\n107 25\n4 1\n147 15\n142 29\n71 64\n154 41\n48 39\n14 8\n22 19\n134 110\n86 20\n12 4\n127 32\n5 4\n135 63\n43 23\n142 30\n56 18\n15 0\n13 9\n80 20\n145 93\n10 124\n25 12\n11 8\n118 35\n146 7\n72 18\n140 139\n137 16\n47 40\n155 83\n61 32\n1 0\n20 15\n31 11\n106 32\n49 111\n69 59\n57 43\n132 130\n99 49\n138 35\n42 12\n40 74\n28 13\n130 119\n63 58\n131 6\n74 31\n29 143\n27 25\n83 0\n139 114\n159 122\n141 79\n38 30\n155 131\n101 88\n102 63\n30 10\n84 83\n62 48\n98 53\n45 16\n123 18\n36 18\n96 14\n85 3\n104 48\n91 73\n94 47\n41 7\n110 98\n105 93\n79 59\n109 83\n17 11\n59 68\n49 115\n78 116\n140 39\n53 156\n148 95\n128 78\n44 30\n131 14\n21 3\n46 44\n9 88\n24 11\n116 22\n98 93\n82 30\n149 74\n107 94\n132 55\n124 26\n113 112\n90 67\n55 44\n58 3\n75 59\n123 15\n40 22\n82 61\n66 58\n18 4\n52 16\n152 90\n78 4\n3 1\n59 38\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v160e208.gml",
    "content": "graph\n[\n    node\n    [\n        id    0\n        label    \"\"\n        graphics\n        [\n            x    855.40\n            y    572.90\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    1\n        label    \"\"\n        graphics\n        [\n            x    250.81\n            y    535.31\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    2\n        label    \"\"\n        graphics\n        [\n            x    83.06\n            y    124.36\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    3\n        label    \"\"\n        graphics\n        [\n            x    643.71\n            y    626.36\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    4\n        label    \"\"\n        graphics\n        [\n            x    1117.84\n            y    1123.64\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    5\n        label    \"\"\n        graphics\n        [\n            x    1137.46\n            y    300.84\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    6\n        label    \"\"\n        graphics\n        [\n            x    759.00\n            y    342.06\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    7\n        label    \"\"\n        graphics\n        [\n            x    836.07\n            y    202.37\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    8\n        label    \"\"\n        graphics\n        [\n            x    1057.77\n            y    794.58\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    9\n        label    \"\"\n        graphics\n        [\n            x    210.91\n            y    208.79\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    10\n        label    \"\"\n        graphics\n        [\n            x    1114.83\n            y    437.19\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    11\n        label    \"\"\n        graphics\n        [\n            x    234.39\n            y    822.56\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    12\n        label    \"\"\n        graphics\n        [\n            x    583.89\n            y    953.95\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    13\n        label    \"\"\n        graphics\n        [\n            x    459.28\n            y    423.67\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    14\n        label    \"\"\n        graphics\n        [\n            x    300.70\n            y    113.24\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    15\n        label    \"\"\n        graphics\n        [\n            x    550.54\n            y    1089.83\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    16\n        label    \"\"\n        graphics\n        [\n            x    935.52\n            y    888.10\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    17\n        label    \"\"\n        graphics\n        [\n            x    170.92\n            y    94.23\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    18\n        label    \"\"\n        graphics\n        [\n            x    836.75\n            y    346.26\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    19\n        label    \"\"\n        graphics\n        [\n            x    796.85\n            y    942.87\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    20\n        label    \"\"\n        graphics\n        [\n            x    1114.65\n            y    454.15\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    21\n        label    \"\"\n        graphics\n        [\n            x    924.12\n            y    559.18\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    22\n        label    \"\"\n        graphics\n        [\n            x    147.05\n            y    193.76\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    23\n        label    \"\"\n        graphics\n        [\n            x    574.75\n            y    16.75\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    24\n        label    \"\"\n        graphics\n        [\n            x    538.95\n            y    869.36\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    25\n        label    \"\"\n        graphics\n        [\n            x    601.24\n            y    279.17\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    26\n        label    \"\"\n        graphics\n        [\n            x    667.20\n            y    190.12\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    27\n        label    \"\"\n        graphics\n        [\n            x    268.53\n            y    80.00\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    28\n        label    \"\"\n        graphics\n        [\n            x    1102.80\n            y    347.28\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    29\n        label    \"\"\n        graphics\n        [\n            x    649.55\n            y    238.26\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    30\n        label    \"\"\n        graphics\n        [\n            x    263.33\n            y    652.93\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    31\n        label    \"\"\n        graphics\n        [\n            x    722.61\n            y    972.48\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    32\n        label    \"\"\n        graphics\n        [\n            x    756.78\n            y    321.60\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    33\n        label    \"\"\n        graphics\n        [\n            x    615.39\n            y    448.10\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    34\n        label    \"\"\n        graphics\n        [\n            x    401.89\n            y    462.42\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    35\n        label    \"\"\n        graphics\n        [\n            x    1076.28\n            y    180.84\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    36\n        label    \"\"\n        graphics\n        [\n            x    513.75\n            y    190.41\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    37\n        label    \"\"\n        graphics\n        [\n            x    404.12\n            y    154.54\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    38\n        label    \"\"\n        graphics\n        [\n            x    841.16\n            y    1004.07\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    39\n        label    \"\"\n        graphics\n        [\n            x    1054.06\n            y    573.38\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    40\n        label    \"\"\n        graphics\n        [\n            x    388.84\n            y    279.52\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    41\n        label    \"\"\n        graphics\n        [\n            x    351.96\n            y    53.06\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    42\n        label    \"\"\n        graphics\n        [\n            x    913.80\n            y    821.94\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    43\n        label    \"\"\n        graphics\n        [\n            x    877.77\n            y    754.44\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    44\n        label    \"\"\n        graphics\n        [\n            x    1018.16\n            y    37.18\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    45\n        label    \"\"\n        graphics\n        [\n            x    843.55\n            y    57.97\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    46\n        label    \"\"\n        graphics\n        [\n            x    425.17\n            y    421.26\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    47\n        label    \"\"\n        graphics\n        [\n            x    694.84\n            y    91.73\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    48\n        label    \"\"\n        graphics\n        [\n            x    722.56\n            y    443.38\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    49\n        label    \"\"\n        graphics\n        [\n            x    1110.00\n            y    63.71\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    50\n        label    \"\"\n        graphics\n        [\n            x    748.36\n            y    160.05\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    51\n        label    \"\"\n        graphics\n        [\n            x    401.64\n            y    1024.52\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    52\n        label    \"\"\n        graphics\n        [\n            x    288.03\n            y    601.95\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    53\n        label    \"\"\n        graphics\n        [\n            x    95.46\n            y    226.61\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    54\n        label    \"\"\n        graphics\n        [\n            x    249.75\n            y    1109.08\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    55\n        label    \"\"\n        graphics\n        [\n            x    1114.27\n            y    821.67\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    56\n        label    \"\"\n        graphics\n        [\n            x    409.68\n            y    439.88\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    57\n        label    \"\"\n        graphics\n        [\n            x    1047.66\n            y    693.82\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    58\n        label    \"\"\n        graphics\n        [\n            x    444.38\n            y    543.25\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    59\n        label    \"\"\n        graphics\n        [\n            x    29.32\n            y    940.12\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    60\n        label    \"\"\n        graphics\n        [\n            x    82.14\n            y    1097.19\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    61\n        label    \"\"\n        graphics\n        [\n            x    99.20\n            y    240.48\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    62\n        label    \"\"\n        graphics\n        [\n            x    71.08\n            y    207.71\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    63\n        label    \"\"\n        graphics\n        [\n            x    813.05\n            y    195.68\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    64\n        label    \"\"\n        graphics\n        [\n            x    673.21\n            y    142.79\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    65\n        label    \"\"\n        graphics\n        [\n            x    575.74\n            y    276.30\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    66\n        label    \"\"\n        graphics\n        [\n            x    1066.27\n            y    713.60\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    67\n        label    \"\"\n        graphics\n        [\n            x    47.44\n            y    446.97\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    68\n        label    \"\"\n        graphics\n        [\n            x    722.74\n            y    77.83\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    69\n        label    \"\"\n        graphics\n        [\n            x    938.23\n            y    955.70\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    70\n        label    \"\"\n        graphics\n        [\n            x    1130.80\n            y    71.28\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    71\n        label    \"\"\n        graphics\n        [\n            x    927.16\n            y    1044.18\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    72\n        label    \"\"\n        graphics\n        [\n            x    207.37\n            y    647.41\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    73\n        label    \"\"\n        graphics\n        [\n            x    298.60\n            y    490.05\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    74\n        label    \"\"\n        graphics\n        [\n            x    407.87\n            y    1133.86\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    75\n        label    \"\"\n        graphics\n        [\n            x    75.14\n            y    994.31\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    76\n        label    \"\"\n        graphics\n        [\n            x    577.23\n            y    744.17\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    77\n        label    \"\"\n        graphics\n        [\n            x    468.86\n            y    89.80\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    78\n        label    \"\"\n        graphics\n        [\n            x    788.62\n            y    898.20\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    79\n        label    \"\"\n        graphics\n        [\n            x    490.46\n            y    595.69\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    80\n        label    \"\"\n        graphics\n        [\n            x    32.31\n            y    647.05\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    81\n        label    \"\"\n        graphics\n        [\n            x    157.32\n            y    1042.52\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    82\n        label    \"\"\n        graphics\n        [\n            x    742.24\n            y    680.64\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    83\n        label    \"\"\n        graphics\n        [\n            x    244.26\n            y    1098.20\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    84\n        label    \"\"\n        graphics\n        [\n            x    349.00\n            y    378.48\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    85\n        label    \"\"\n        graphics\n        [\n            x    1124.73\n            y    747.32\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    86\n        label    \"\"\n        graphics\n        [\n            x    271.27\n            y    156.45\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    87\n        label    \"\"\n        graphics\n        [\n            x    483.71\n            y    139.78\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    88\n        label    \"\"\n        graphics\n        [\n            x    970.19\n            y    148.78\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    89\n        label    \"\"\n        graphics\n        [\n            x    309.52\n            y    816.38\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    90\n        label    \"\"\n        graphics\n        [\n            x    388.48\n            y    415.30\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    91\n        label    \"\"\n        graphics\n        [\n            x    462.13\n            y    463.53\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    92\n        label    \"\"\n        graphics\n        [\n            x    76.95\n            y    710.37\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    93\n        label    \"\"\n        graphics\n        [\n            x    57.98\n            y    788.00\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    94\n        label    \"\"\n        graphics\n        [\n            x    158.88\n            y    1021.08\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    95\n        label    \"\"\n        graphics\n        [\n            x    883.32\n            y    313.30\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    96\n        label    \"\"\n        graphics\n        [\n            x    766.97\n            y    716.80\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    97\n        label    \"\"\n        graphics\n        [\n            x    465.03\n            y    304.20\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    98\n        label    \"\"\n        graphics\n        [\n            x    336.40\n            y    290.65\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    99\n        label    \"\"\n        graphics\n        [\n            x    706.61\n            y    461.92\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    100\n        label    \"\"\n        graphics\n        [\n            x    35.38\n            y    492.68\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    101\n        label    \"\"\n        graphics\n        [\n            x    972.82\n            y    424.18\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    102\n        label    \"\"\n        graphics\n        [\n            x    587.96\n            y    726.21\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    103\n        label    \"\"\n        graphics\n        [\n            x    444.94\n            y    636.77\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    104\n        label    \"\"\n        graphics\n        [\n            x    761.98\n            y    482.89\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    105\n        label    \"\"\n        graphics\n        [\n            x    654.18\n            y    808.31\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    106\n        label    \"\"\n        graphics\n        [\n            x    360.27\n            y    1092.02\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    107\n        label    \"\"\n        graphics\n        [\n            x    1131.87\n            y    650.99\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    108\n        label    \"\"\n        graphics\n        [\n            x    936.90\n            y    962.37\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    109\n        label    \"\"\n        graphics\n        [\n            x    422.07\n            y    475.33\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    110\n        label    \"\"\n        graphics\n        [\n            x    421.34\n            y    152.62\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    111\n        label    \"\"\n        graphics\n        [\n            x    202.99\n            y    524.12\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    112\n        label    \"\"\n        graphics\n        [\n            x    846.18\n            y    930.40\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    113\n        label    \"\"\n        graphics\n        [\n            x    522.16\n            y    632.25\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    114\n        label    \"\"\n        graphics\n        [\n            x    31.52\n            y    827.22\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    115\n        label    \"\"\n        graphics\n        [\n            x    735.81\n            y    664.22\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    116\n        label    \"\"\n        graphics\n        [\n            x    747.36\n            y    265.22\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    117\n        label    \"\"\n        graphics\n        [\n            x    1068.20\n            y    1035.76\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    118\n        label    \"\"\n        graphics\n        [\n            x    88.41\n            y    429.80\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    119\n        label    \"\"\n        graphics\n        [\n            x    857.19\n            y    226.42\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    120\n        label    \"\"\n        graphics\n        [\n            x    796.63\n            y    686.00\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    121\n        label    \"\"\n        graphics\n        [\n            x    527.13\n            y    83.96\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    122\n        label    \"\"\n        graphics\n        [\n            x    1014.66\n            y    559.70\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    123\n        label    \"\"\n        graphics\n        [\n            x    294.74\n            y    483.71\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    124\n        label    \"\"\n        graphics\n        [\n            x    880.51\n            y    164.58\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    125\n        label    \"\"\n        graphics\n        [\n            x    31.68\n            y    277.46\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    126\n        label    \"\"\n        graphics\n        [\n            x    1082.80\n            y    255.69\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    127\n        label    \"\"\n        graphics\n        [\n            x    456.35\n            y    774.84\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    128\n        label    \"\"\n        graphics\n        [\n            x    119.42\n            y    1114.82\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    129\n        label    \"\"\n        graphics\n        [\n            x    1057.26\n            y    897.06\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    130\n        label    \"\"\n        graphics\n        [\n            x    320.14\n            y    255.24\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    131\n        label    \"\"\n        graphics\n        [\n            x    1044.86\n            y    558.01\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    132\n        label    \"\"\n        graphics\n        [\n            x    1132.37\n            y    891.77\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    133\n        label    \"\"\n        graphics\n        [\n            x    461.49\n            y    505.39\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    134\n        label    \"\"\n        graphics\n        [\n            x    845.26\n            y    44.57\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    135\n        label    \"\"\n        graphics\n        [\n            x    701.18\n            y    829.98\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    136\n        label    \"\"\n        graphics\n        [\n            x    462.32\n            y    343.09\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    137\n        label    \"\"\n        graphics\n        [\n            x    1051.75\n            y    525.42\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    138\n        label    \"\"\n        graphics\n        [\n            x    585.86\n            y    535.48\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    139\n        label    \"\"\n        graphics\n        [\n            x    1097.24\n            y    999.26\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    140\n        label    \"\"\n        graphics\n        [\n            x    344.83\n            y    1006.26\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    141\n        label    \"\"\n        graphics\n        [\n            x    52.04\n            y    958.14\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    142\n        label    \"\"\n        graphics\n        [\n            x    258.18\n            y    52.43\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    143\n        label    \"\"\n        graphics\n        [\n            x    680.52\n            y    471.63\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    144\n        label    \"\"\n        graphics\n        [\n            x    91.42\n            y    990.97\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    145\n        label    \"\"\n        graphics\n        [\n            x    999.42\n            y    911.39\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    146\n        label    \"\"\n        graphics\n        [\n            x    747.41\n            y    537.26\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    147\n        label    \"\"\n        graphics\n        [\n            x    1099.85\n            y    354.49\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    148\n        label    \"\"\n        graphics\n        [\n            x    64.80\n            y    444.82\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    149\n        label    \"\"\n        graphics\n        [\n            x    40.43\n            y    253.45\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    150\n        label    \"\"\n        graphics\n        [\n            x    1117.99\n            y    76.88\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    151\n        label    \"\"\n        graphics\n        [\n            x    282.23\n            y    564.02\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    152\n        label    \"\"\n        graphics\n        [\n            x    426.59\n            y    66.49\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    153\n        label    \"\"\n        graphics\n        [\n            x    868.01\n            y    624.51\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    154\n        label    \"\"\n        graphics\n        [\n            x    699.89\n            y    1059.08\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    155\n        label    \"\"\n        graphics\n        [\n            x    316.56\n            y    812.35\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    156\n        label    \"\"\n        graphics\n        [\n            x    432.44\n            y    536.00\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    157\n        label    \"\"\n        graphics\n        [\n            x    78.09\n            y    771.78\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    158\n        label    \"\"\n        graphics\n        [\n            x    453.35\n            y    638.88\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    159\n        label    \"\"\n        graphics\n        [\n            x    495.49\n            y    803.76\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    edge\n    [\n        source    1\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    10\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    100\n        target    64\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    101\n        target    55\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    102\n        target    87\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    103\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    103\n        target    64\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    104\n        target    27\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    104\n        target    51\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    105\n        target    32\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    106\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    107\n        target    104\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    108\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    109\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    109\n        target    42\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    11\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    110\n        target    29\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    110\n        target    52\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    111\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    112\n        target    92\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    113\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    113\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    113\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    114\n        target    38\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    115\n        target    66\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    116\n        target    59\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    117\n        target    110\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    118\n        target    108\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    119\n        target    34\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    12\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    120\n        target    119\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    120\n        target    70\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    121\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    122\n        target    100\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    122\n        target    107\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    122\n        target    136\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    123\n        target    112\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    124\n        target    120\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    125\n        target    78\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    126\n        target    68\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    127\n        target    36\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    127\n        target    54\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    128\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    129\n        target    122\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    13\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    130\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    130\n        target    116\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    131\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    132\n        target    39\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    133\n        target    26\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    134\n        target    137\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    134\n        target    93\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    135\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    136\n        target    99\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    137\n        target    131\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    138\n        target    104\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    138\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    138\n        target    64\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    139\n        target    132\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    14\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    14\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    140\n        target    132\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    140\n        target    38\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    141\n        target    20\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    142\n        target    30\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    143\n        target    47\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    143\n        target    54\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    144\n        target    66\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    145\n        target    124\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    146\n        target    93\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    147\n        target    35\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    148\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    149\n        target    126\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    149\n        target    158\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    15\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    150\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    150\n        target    87\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    151\n        target    118\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    152\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    153\n        target    27\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    153\n        target    39\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    154\n        target    86\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    155\n        target    51\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    156\n        target    127\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    157\n        target    96\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    158\n        target    151\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    159\n        target    157\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    16\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    16\n        target    136\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    17\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    18\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    19\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    19\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    19\n        target    75\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    19\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    2\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    20\n        target    113\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    20\n        target    19\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    21\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    22\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    22\n        target    154\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    23\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    24\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    25\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    25\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    26\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    27\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    27\n        target    20\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    28\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    29\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    3\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    30\n        target    152\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    30\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    31\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    32\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    32\n        target    78\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    33\n        target    19\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    34\n        target    30\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    35\n        target    27\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    36\n        target    27\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    37\n        target    20\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    38\n        target    32\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    39\n        target    37\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    4\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    40\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    41\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    41\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    42\n        target    36\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    42\n        target    75\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    43\n        target    40\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    44\n        target    40\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    45\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    45\n        target    54\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    46\n        target    37\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    47\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    48\n        target    130\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    48\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    49\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    5\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    5\n        target    98\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    50\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    51\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    52\n        target    47\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    53\n        target    33\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    53\n        target    86\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    54\n        target    34\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    55\n        target    52\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    56\n        target    47\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    57\n        target    50\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    57\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    58\n        target    113\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    58\n        target    26\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    58\n        target    46\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    59\n        target    55\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    59\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    6\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    60\n        target    32\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    61\n        target    33\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    62\n        target    41\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    62\n        target    55\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    63\n        target    19\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    64\n        target    46\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    65\n        target    36\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    66\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    67\n        target    143\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    67\n        target    65\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    68\n        target    28\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    69\n        target    68\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    7\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    70\n        target    25\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    71\n        target    69\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    72\n        target    20\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    72\n        target    55\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    73\n        target    40\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    74\n        target    59\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    75\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    76\n        target    24\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    77\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    77\n        target    75\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    78\n        target    42\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    79\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    8\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    80\n        target    37\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    81\n        target    58\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    82\n        target    65\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    83\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    84\n        target    82\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    84\n        target    88\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    85\n        target    32\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    86\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    87\n        target    62\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    88\n        target    63\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    88\n        target    85\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    89\n        target    50\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    9\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    90\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    90\n        target    87\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    91\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    92\n        target    50\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    93\n        target    75\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    94\n        target    71\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    94\n        target    82\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    95\n        target    24\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    96\n        target    87\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    97\n        target    103\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    97\n        target    70\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    98\n        target    69\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    99\n        target    36\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n]\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v160e208.tglf",
    "content": "0 855.000 572.000 30.000 30.000\n1 250.000 535.000 30.000 30.000\n2 83.000 124.000 30.000 30.000\n3 643.000 626.000 30.000 30.000\n4 1117.000 1123.000 30.000 30.000\n5 1137.000 300.000 30.000 30.000\n6 759.000 342.000 30.000 30.000\n7 836.000 202.000 30.000 30.000\n8 1057.000 794.000 30.000 30.000\n9 210.000 208.000 30.000 30.000\n10 1114.000 437.000 30.000 30.000\n11 234.000 822.000 30.000 30.000\n12 583.000 953.000 30.000 30.000\n13 459.000 423.000 30.000 30.000\n14 300.000 113.000 30.000 30.000\n15 550.000 1089.000 30.000 30.000\n16 935.000 888.000 30.000 30.000\n17 170.000 94.000 30.000 30.000\n18 836.000 346.000 30.000 30.000\n19 796.000 942.000 30.000 30.000\n20 1114.000 454.000 30.000 30.000\n21 924.000 559.000 30.000 30.000\n22 147.000 193.000 30.000 30.000\n23 574.000 16.000 30.000 30.000\n24 538.000 869.000 30.000 30.000\n25 601.000 279.000 30.000 30.000\n26 667.000 190.000 30.000 30.000\n27 268.000 80.000 30.000 30.000\n28 1102.000 347.000 30.000 30.000\n29 649.000 238.000 30.000 30.000\n30 263.000 652.000 30.000 30.000\n31 722.000 972.000 30.000 30.000\n32 756.000 321.000 30.000 30.000\n33 615.000 448.000 30.000 30.000\n34 401.000 462.000 30.000 30.000\n35 1076.000 180.000 30.000 30.000\n36 513.000 190.000 30.000 30.000\n37 404.000 154.000 30.000 30.000\n38 841.000 1004.000 30.000 30.000\n39 1054.000 573.000 30.000 30.000\n40 388.000 279.000 30.000 30.000\n41 351.000 53.000 30.000 30.000\n42 913.000 821.000 30.000 30.000\n43 877.000 754.000 30.000 30.000\n44 1018.000 37.000 30.000 30.000\n45 843.000 57.000 30.000 30.000\n46 425.000 421.000 30.000 30.000\n47 694.000 91.000 30.000 30.000\n48 722.000 443.000 30.000 30.000\n49 1110.000 63.000 30.000 30.000\n50 748.000 160.000 30.000 30.000\n51 401.000 1024.000 30.000 30.000\n52 288.000 601.000 30.000 30.000\n53 95.000 226.000 30.000 30.000\n54 249.000 1109.000 30.000 30.000\n55 1114.000 821.000 30.000 30.000\n56 409.000 439.000 30.000 30.000\n57 1047.000 693.000 30.000 30.000\n58 444.000 543.000 30.000 30.000\n59 29.000 940.000 30.000 30.000\n60 82.000 1097.000 30.000 30.000\n61 99.000 240.000 30.000 30.000\n62 71.000 207.000 30.000 30.000\n63 813.000 195.000 30.000 30.000\n64 673.000 142.000 30.000 30.000\n65 575.000 276.000 30.000 30.000\n66 1066.000 713.000 30.000 30.000\n67 47.000 446.000 30.000 30.000\n68 722.000 77.000 30.000 30.000\n69 938.000 955.000 30.000 30.000\n70 1130.000 71.000 30.000 30.000\n71 927.000 1044.000 30.000 30.000\n72 207.000 647.000 30.000 30.000\n73 298.000 490.000 30.000 30.000\n74 407.000 1133.000 30.000 30.000\n75 75.000 994.000 30.000 30.000\n76 577.000 744.000 30.000 30.000\n77 468.000 89.000 30.000 30.000\n78 788.000 898.000 30.000 30.000\n79 490.000 595.000 30.000 30.000\n80 32.000 647.000 30.000 30.000\n81 157.000 1042.000 30.000 30.000\n82 742.000 680.000 30.000 30.000\n83 244.000 1098.000 30.000 30.000\n84 349.000 378.000 30.000 30.000\n85 1124.000 747.000 30.000 30.000\n86 271.000 156.000 30.000 30.000\n87 483.000 139.000 30.000 30.000\n88 970.000 148.000 30.000 30.000\n89 309.000 816.000 30.000 30.000\n90 388.000 415.000 30.000 30.000\n91 462.000 463.000 30.000 30.000\n92 76.000 710.000 30.000 30.000\n93 57.000 788.000 30.000 30.000\n94 158.000 1021.000 30.000 30.000\n95 883.000 313.000 30.000 30.000\n96 766.000 716.000 30.000 30.000\n97 465.000 304.000 30.000 30.000\n98 336.000 290.000 30.000 30.000\n99 706.000 461.000 30.000 30.000\n100 35.000 492.000 30.000 30.000\n101 972.000 424.000 30.000 30.000\n102 587.000 726.000 30.000 30.000\n103 444.000 636.000 30.000 30.000\n104 761.000 482.000 30.000 30.000\n105 654.000 808.000 30.000 30.000\n106 360.000 1092.000 30.000 30.000\n107 1131.000 650.000 30.000 30.000\n108 936.000 962.000 30.000 30.000\n109 422.000 475.000 30.000 30.000\n110 421.000 152.000 30.000 30.000\n111 202.000 524.000 30.000 30.000\n112 846.000 930.000 30.000 30.000\n113 522.000 632.000 30.000 30.000\n114 31.000 827.000 30.000 30.000\n115 735.000 664.000 30.000 30.000\n116 747.000 265.000 30.000 30.000\n117 1068.000 1035.000 30.000 30.000\n118 88.000 429.000 30.000 30.000\n119 857.000 226.000 30.000 30.000\n120 796.000 686.000 30.000 30.000\n121 527.000 83.000 30.000 30.000\n122 1014.000 559.000 30.000 30.000\n123 294.000 483.000 30.000 30.000\n124 880.000 164.000 30.000 30.000\n125 31.000 277.000 30.000 30.000\n126 1082.000 255.000 30.000 30.000\n127 456.000 774.000 30.000 30.000\n128 119.000 1114.000 30.000 30.000\n129 1057.000 897.000 30.000 30.000\n130 320.000 255.000 30.000 30.000\n131 1044.000 558.000 30.000 30.000\n132 1132.000 891.000 30.000 30.000\n133 461.000 505.000 30.000 30.000\n134 845.000 44.000 30.000 30.000\n135 701.000 829.000 30.000 30.000\n136 462.000 343.000 30.000 30.000\n137 1051.000 525.000 30.000 30.000\n138 585.000 535.000 30.000 30.000\n139 1097.000 999.000 30.000 30.000\n140 344.000 1006.000 30.000 30.000\n141 52.000 958.000 30.000 30.000\n142 258.000 52.000 30.000 30.000\n143 680.000 471.000 30.000 30.000\n144 91.000 990.000 30.000 30.000\n145 999.000 911.000 30.000 30.000\n146 747.000 537.000 30.000 30.000\n147 1099.000 354.000 30.000 30.000\n148 64.000 444.000 30.000 30.000\n149 40.000 253.000 30.000 30.000\n150 1117.000 76.000 30.000 30.000\n151 282.000 564.000 30.000 30.000\n152 426.000 66.000 30.000 30.000\n153 868.000 624.000 30.000 30.000\n154 699.000 1059.000 30.000 30.000\n155 316.000 812.000 30.000 30.000\n156 432.000 536.000 30.000 30.000\n157 78.000 771.000 30.000 30.000\n158 453.000 638.000 30.000 30.000\n159 495.000 803.000 30.000 30.000\n#\n143 47\n115 66\n75 22\n157 96\n141 20\n72 55\n132 39\n120 70\n20 19\n126 68\n130 11\n53 33\n42 75\n32 10\n82 65\n19 15\n138 104\n114 38\n100 64\n58 113\n57 8\n87 62\n144 66\n48 130\n52 47\n135 15\n91 3\n111 18\n159 157\n98 69\n40 14\n109 18\n84 88\n26 23\n81 58\n150 87\n42 36\n148 12\n71 69\n113 12\n158 151\n19 9\n63 19\n12 1\n138 21\n156 127\n44 40\n113 22\n90 14\n109 42\n117 110\n30 152\n80 37\n133 26\n86 18\n134 137\n154 86\n153 27\n48 2\n118 108\n140 132\n45 54\n56 47\n122 100\n123 112\n19 75\n15 2\n149 126\n107 104\n112 92\n22 154\n150 6\n51 4\n13 7\n32 78\n22 15\n136 99\n129 122\n45 4\n134 93\n76 24\n94 71\n95 24\n77 75\n3 2\n116 59\n2 1\n147 35\n7 4\n110 29\n67 143\n125 78\n27 20\n58 26\n146 93\n14 2\n11 1\n17 12\n16 136\n77 23\n96 87\n55 52\n62 41\n16 0\n88 85\n18 6\n67 65\n14 6\n35 27\n127 54\n25 16\n103 23\n69 68\n155 51\n138 64\n4 0\n102 87\n97 103\n10 1\n143 54\n66 11\n68 28\n142 30\n88 63\n153 39\n131 13\n60 32\n78 42\n120 119\n19 11\n122 107\n27 14\n145 124\n62 55\n90 87\n59 55\n36 27\n58 46\n6 0\n128 16\n28 7\n47 16\n124 120\n104 51\n20 113\n38 32\n93 75\n110 52\n8 3\n5 98\n105 32\n70 25\n151 118\n89 50\n34 30\n104 27\n49 6\n92 50\n39 37\n61 33\n137 131\n57 50\n65 36\n83 7\n84 82\n43 40\n99 36\n73 40\n101 55\n106 21\n85 32\n152 10\n119 34\n103 64\n121 21\n30 7\n64 46\n139 132\n9 1\n79 1\n53 86\n94 82\n50 2\n46 37\n108 4\n127 36\n41 15\n37 20\n122 136\n21 3\n97 70\n24 0\n74 59\n5 1\n29 10\n59 9\n23 12\n149 158\n1 0\n113 7\n140 38\n31 0\n54 34\n25 10\n33 19\n41 5\n72 20\n130 116\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v160e224.gml",
    "content": "graph\n[\n    node\n    [\n        id    0\n        label    \"\"\n        graphics\n        [\n            x    888.64\n            y    885.58\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    1\n        label    \"\"\n        graphics\n        [\n            x    763.46\n            y    901.50\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    2\n        label    \"\"\n        graphics\n        [\n            x    643.15\n            y    751.46\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    3\n        label    \"\"\n        graphics\n        [\n            x    39.46\n            y    746.13\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    4\n        label    \"\"\n        graphics\n        [\n            x    272.98\n            y    94.18\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    5\n        label    \"\"\n        graphics\n        [\n            x    230.45\n            y    979.91\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    6\n        label    \"\"\n        graphics\n        [\n            x    353.20\n            y    934.67\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    7\n        label    \"\"\n        graphics\n        [\n            x    605.93\n            y    1107.81\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    8\n        label    \"\"\n        graphics\n        [\n            x    272.49\n            y    771.13\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    9\n        label    \"\"\n        graphics\n        [\n            x    535.98\n            y    286.21\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    10\n        label    \"\"\n        graphics\n        [\n            x    644.22\n            y    392.19\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    11\n        label    \"\"\n        graphics\n        [\n            x    12.15\n            y    294.49\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    12\n        label    \"\"\n        graphics\n        [\n            x    724.83\n            y    0.26\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    13\n        label    \"\"\n        graphics\n        [\n            x    347.54\n            y    119.94\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    14\n        label    \"\"\n        graphics\n        [\n            x    1109.41\n            y    834.95\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    15\n        label    \"\"\n        graphics\n        [\n            x    843.76\n            y    199.10\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    16\n        label    \"\"\n        graphics\n        [\n            x    1045.69\n            y    552.10\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    17\n        label    \"\"\n        graphics\n        [\n            x    976.02\n            y    37.77\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    18\n        label    \"\"\n        graphics\n        [\n            x    772.26\n            y    480.83\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    19\n        label    \"\"\n        graphics\n        [\n            x    911.94\n            y    546.51\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    20\n        label    \"\"\n        graphics\n        [\n            x    991.53\n            y    261.02\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    21\n        label    \"\"\n        graphics\n        [\n            x    54.54\n            y    1098.68\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    22\n        label    \"\"\n        graphics\n        [\n            x    207.93\n            y    1123.61\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    23\n        label    \"\"\n        graphics\n        [\n            x    880.47\n            y    1032.53\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    24\n        label    \"\"\n        graphics\n        [\n            x    403.14\n            y    481.84\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    25\n        label    \"\"\n        graphics\n        [\n            x    180.71\n            y    511.82\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    26\n        label    \"\"\n        graphics\n        [\n            x    666.75\n            y    24.79\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    27\n        label    \"\"\n        graphics\n        [\n            x    400.37\n            y    938.08\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    28\n        label    \"\"\n        graphics\n        [\n            x    562.09\n            y    430.49\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    29\n        label    \"\"\n        graphics\n        [\n            x    650.16\n            y    286.17\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    30\n        label    \"\"\n        graphics\n        [\n            x    1137.08\n            y    744.21\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    31\n        label    \"\"\n        graphics\n        [\n            x    1127.33\n            y    579.17\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    32\n        label    \"\"\n        graphics\n        [\n            x    695.87\n            y    372.65\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    33\n        label    \"\"\n        graphics\n        [\n            x    124.48\n            y    406.37\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    34\n        label    \"\"\n        graphics\n        [\n            x    742.15\n            y    639.43\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    35\n        label    \"\"\n        graphics\n        [\n            x    1056.20\n            y    590.11\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    36\n        label    \"\"\n        graphics\n        [\n            x    379.60\n            y    1082.38\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    37\n        label    \"\"\n        graphics\n        [\n            x    1055.53\n            y    817.79\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    38\n        label    \"\"\n        graphics\n        [\n            x    333.13\n            y    838.91\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    39\n        label    \"\"\n        graphics\n        [\n            x    332.46\n            y    1038.91\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    40\n        label    \"\"\n        graphics\n        [\n            x    626.32\n            y    292.51\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    41\n        label    \"\"\n        graphics\n        [\n            x    512.14\n            y    1056.60\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    42\n        label    \"\"\n        graphics\n        [\n            x    1009.47\n            y    5.26\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    43\n        label    \"\"\n        graphics\n        [\n            x    966.11\n            y    675.24\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    44\n        label    \"\"\n        graphics\n        [\n            x    417.77\n            y    335.19\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    45\n        label    \"\"\n        graphics\n        [\n            x    44.30\n            y    815.33\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    46\n        label    \"\"\n        graphics\n        [\n            x    1120.42\n            y    329.63\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    47\n        label    \"\"\n        graphics\n        [\n            x    38.84\n            y    958.19\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    48\n        label    \"\"\n        graphics\n        [\n            x    878.82\n            y    40.01\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    49\n        label    \"\"\n        graphics\n        [\n            x    367.23\n            y    701.59\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    50\n        label    \"\"\n        graphics\n        [\n            x    416.60\n            y    389.38\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    51\n        label    \"\"\n        graphics\n        [\n            x    296.95\n            y    174.23\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    52\n        label    \"\"\n        graphics\n        [\n            x    638.98\n            y    277.71\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    53\n        label    \"\"\n        graphics\n        [\n            x    455.91\n            y    613.84\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    54\n        label    \"\"\n        graphics\n        [\n            x    99.74\n            y    724.02\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    55\n        label    \"\"\n        graphics\n        [\n            x    733.13\n            y    1111.15\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    56\n        label    \"\"\n        graphics\n        [\n            x    644.22\n            y    1046.70\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    57\n        label    \"\"\n        graphics\n        [\n            x    897.65\n            y    767.95\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    58\n        label    \"\"\n        graphics\n        [\n            x    624.38\n            y    691.02\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    59\n        label    \"\"\n        graphics\n        [\n            x    577.78\n            y    419.95\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    60\n        label    \"\"\n        graphics\n        [\n            x    910.88\n            y    713.93\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    61\n        label    \"\"\n        graphics\n        [\n            x    966.41\n            y    810.54\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    62\n        label    \"\"\n        graphics\n        [\n            x    810.84\n            y    442.44\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    63\n        label    \"\"\n        graphics\n        [\n            x    707.31\n            y    795.67\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    64\n        label    \"\"\n        graphics\n        [\n            x    334.15\n            y    946.14\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    65\n        label    \"\"\n        graphics\n        [\n            x    226.41\n            y    142.45\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    66\n        label    \"\"\n        graphics\n        [\n            x    701.26\n            y    617.91\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    67\n        label    \"\"\n        graphics\n        [\n            x    448.92\n            y    665.23\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    68\n        label    \"\"\n        graphics\n        [\n            x    549.63\n            y    730.18\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    69\n        label    \"\"\n        graphics\n        [\n            x    81.98\n            y    1100.41\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    70\n        label    \"\"\n        graphics\n        [\n            x    283.84\n            y    591.90\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    71\n        label    \"\"\n        graphics\n        [\n            x    920.94\n            y    796.76\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    72\n        label    \"\"\n        graphics\n        [\n            x    1079.78\n            y    667.61\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    73\n        label    \"\"\n        graphics\n        [\n            x    327.53\n            y    215.59\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    74\n        label    \"\"\n        graphics\n        [\n            x    188.41\n            y    732.74\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    75\n        label    \"\"\n        graphics\n        [\n            x    783.54\n            y    198.27\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    76\n        label    \"\"\n        graphics\n        [\n            x    644.70\n            y    967.88\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    77\n        label    \"\"\n        graphics\n        [\n            x    1033.98\n            y    1086.78\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    78\n        label    \"\"\n        graphics\n        [\n            x    18.12\n            y    400.98\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    79\n        label    \"\"\n        graphics\n        [\n            x    148.21\n            y    417.65\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    80\n        label    \"\"\n        graphics\n        [\n            x    336.77\n            y    835.08\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    81\n        label    \"\"\n        graphics\n        [\n            x    965.93\n            y    533.13\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    82\n        label    \"\"\n        graphics\n        [\n            x    229.31\n            y    1054.03\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    83\n        label    \"\"\n        graphics\n        [\n            x    680.69\n            y    440.47\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    84\n        label    \"\"\n        graphics\n        [\n            x    20.92\n            y    849.02\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    85\n        label    \"\"\n        graphics\n        [\n            x    962.35\n            y    382.94\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    86\n        label    \"\"\n        graphics\n        [\n            x    946.95\n            y    650.14\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    87\n        label    \"\"\n        graphics\n        [\n            x    856.37\n            y    278.69\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    88\n        label    \"\"\n        graphics\n        [\n            x    654.63\n            y    306.77\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    89\n        label    \"\"\n        graphics\n        [\n            x    570.45\n            y    88.00\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    90\n        label    \"\"\n        graphics\n        [\n            x    642.78\n            y    39.33\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    91\n        label    \"\"\n        graphics\n        [\n            x    471.01\n            y    274.74\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    92\n        label    \"\"\n        graphics\n        [\n            x    539.20\n            y    1009.35\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    93\n        label    \"\"\n        graphics\n        [\n            x    431.39\n            y    808.74\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    94\n        label    \"\"\n        graphics\n        [\n            x    673.41\n            y    546.31\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    95\n        label    \"\"\n        graphics\n        [\n            x    362.92\n            y    896.90\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    96\n        label    \"\"\n        graphics\n        [\n            x    347.77\n            y    1035.42\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    97\n        label    \"\"\n        graphics\n        [\n            x    535.15\n            y    1067.32\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    98\n        label    \"\"\n        graphics\n        [\n            x    646.09\n            y    936.65\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    99\n        label    \"\"\n        graphics\n        [\n            x    538.65\n            y    356.91\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    100\n        label    \"\"\n        graphics\n        [\n            x    274.88\n            y    700.75\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    101\n        label    \"\"\n        graphics\n        [\n            x    816.71\n            y    697.52\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    102\n        label    \"\"\n        graphics\n        [\n            x    869.05\n            y    1019.92\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    103\n        label    \"\"\n        graphics\n        [\n            x    922.18\n            y    584.52\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    104\n        label    \"\"\n        graphics\n        [\n            x    223.07\n            y    1010.42\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    105\n        label    \"\"\n        graphics\n        [\n            x    688.89\n            y    695.09\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    106\n        label    \"\"\n        graphics\n        [\n            x    909.59\n            y    999.68\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    107\n        label    \"\"\n        graphics\n        [\n            x    687.79\n            y    41.57\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    108\n        label    \"\"\n        graphics\n        [\n            x    827.25\n            y    446.00\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    109\n        label    \"\"\n        graphics\n        [\n            x    327.02\n            y    845.56\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    110\n        label    \"\"\n        graphics\n        [\n            x    137.18\n            y    289.67\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    111\n        label    \"\"\n        graphics\n        [\n            x    298.90\n            y    222.76\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    112\n        label    \"\"\n        graphics\n        [\n            x    519.42\n            y    1088.04\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    113\n        label    \"\"\n        graphics\n        [\n            x    115.81\n            y    812.17\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    114\n        label    \"\"\n        graphics\n        [\n            x    889.01\n            y    120.73\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    115\n        label    \"\"\n        graphics\n        [\n            x    550.60\n            y    671.45\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    116\n        label    \"\"\n        graphics\n        [\n            x    1128.68\n            y    173.82\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    117\n        label    \"\"\n        graphics\n        [\n            x    754.63\n            y    169.87\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    118\n        label    \"\"\n        graphics\n        [\n            x    592.51\n            y    678.60\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    119\n        label    \"\"\n        graphics\n        [\n            x    130.94\n            y    793.32\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    120\n        label    \"\"\n        graphics\n        [\n            x    1113.30\n            y    183.92\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    121\n        label    \"\"\n        graphics\n        [\n            x    612.18\n            y    987.80\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    122\n        label    \"\"\n        graphics\n        [\n            x    956.21\n            y    216.12\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    123\n        label    \"\"\n        graphics\n        [\n            x    342.63\n            y    989.89\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    124\n        label    \"\"\n        graphics\n        [\n            x    951.91\n            y    588.81\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    125\n        label    \"\"\n        graphics\n        [\n            x    1105.19\n            y    838.58\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    126\n        label    \"\"\n        graphics\n        [\n            x    412.01\n            y    685.00\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    127\n        label    \"\"\n        graphics\n        [\n            x    736.23\n            y    33.23\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    128\n        label    \"\"\n        graphics\n        [\n            x    675.07\n            y    162.88\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    129\n        label    \"\"\n        graphics\n        [\n            x    509.05\n            y    778.04\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    130\n        label    \"\"\n        graphics\n        [\n            x    479.32\n            y    920.82\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    131\n        label    \"\"\n        graphics\n        [\n            x    792.09\n            y    540.33\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    132\n        label    \"\"\n        graphics\n        [\n            x    539.17\n            y    412.93\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    133\n        label    \"\"\n        graphics\n        [\n            x    9.35\n            y    388.72\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    134\n        label    \"\"\n        graphics\n        [\n            x    868.28\n            y    672.83\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    135\n        label    \"\"\n        graphics\n        [\n            x    105.28\n            y    275.72\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    136\n        label    \"\"\n        graphics\n        [\n            x    568.84\n            y    853.97\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    137\n        label    \"\"\n        graphics\n        [\n            x    1027.71\n            y    1101.06\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    138\n        label    \"\"\n        graphics\n        [\n            x    772.22\n            y    507.07\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    139\n        label    \"\"\n        graphics\n        [\n            x    225.92\n            y    121.52\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    140\n        label    \"\"\n        graphics\n        [\n            x    1026.78\n            y    166.07\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    141\n        label    \"\"\n        graphics\n        [\n            x    712.75\n            y    869.65\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    142\n        label    \"\"\n        graphics\n        [\n            x    741.15\n            y    912.70\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    143\n        label    \"\"\n        graphics\n        [\n            x    707.30\n            y    102.08\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    144\n        label    \"\"\n        graphics\n        [\n            x    937.35\n            y    897.45\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    145\n        label    \"\"\n        graphics\n        [\n            x    557.17\n            y    602.23\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    146\n        label    \"\"\n        graphics\n        [\n            x    425.96\n            y    821.21\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    147\n        label    \"\"\n        graphics\n        [\n            x    602.08\n            y    996.47\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    148\n        label    \"\"\n        graphics\n        [\n            x    557.05\n            y    750.27\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    149\n        label    \"\"\n        graphics\n        [\n            x    862.42\n            y    596.39\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    150\n        label    \"\"\n        graphics\n        [\n            x    1072.43\n            y    394.02\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    151\n        label    \"\"\n        graphics\n        [\n            x    927.81\n            y    563.36\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    152\n        label    \"\"\n        graphics\n        [\n            x    886.45\n            y    979.17\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    153\n        label    \"\"\n        graphics\n        [\n            x    232.14\n            y    1060.50\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    154\n        label    \"\"\n        graphics\n        [\n            x    545.70\n            y    750.33\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    155\n        label    \"\"\n        graphics\n        [\n            x    654.85\n            y    1122.46\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    156\n        label    \"\"\n        graphics\n        [\n            x    882.53\n            y    379.79\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    157\n        label    \"\"\n        graphics\n        [\n            x    392.65\n            y    657.37\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    158\n        label    \"\"\n        graphics\n        [\n            x    997.35\n            y    888.78\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    159\n        label    \"\"\n        graphics\n        [\n            x    653.75\n            y    313.41\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    edge\n    [\n        source    1\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    10\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    10\n        target    71\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    100\n        target    82\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    101\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    102\n        target    36\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    103\n        target    30\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    103\n        target    70\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    103\n        target    78\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    104\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    104\n        target    31\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    105\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    105\n        target    45\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    106\n        target    67\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    107\n        target    28\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    107\n        target    72\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    108\n        target    24\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    109\n        target    80\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    11\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    11\n        target    68\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    11\n        target    86\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    110\n        target    54\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    111\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    112\n        target    54\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    112\n        target    96\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    113\n        target    114\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    113\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    114\n        target    109\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    114\n        target    84\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    115\n        target    56\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    116\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    117\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    118\n        target    50\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    119\n        target    117\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    12\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    12\n        target    78\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    120\n        target    113\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    121\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    122\n        target    102\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    123\n        target    154\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    123\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    124\n        target    118\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    125\n        target    61\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    125\n        target    65\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    126\n        target    121\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    127\n        target    101\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    127\n        target    124\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    127\n        target    27\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    128\n        target    90\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    129\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    13\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    130\n        target    89\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    131\n        target    76\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    132\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    132\n        target    81\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    133\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    134\n        target    79\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    135\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    135\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    136\n        target    130\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    137\n        target    88\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    138\n        target    24\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    139\n        target    116\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    139\n        target    62\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    14\n        target    115\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    14\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    14\n        target    53\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    140\n        target    40\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    141\n        target    41\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    141\n        target    62\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    142\n        target    46\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    143\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    144\n        target    80\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    145\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    145\n        target    57\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    146\n        target    35\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    146\n        target    92\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    147\n        target    135\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    148\n        target    105\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    149\n        target    59\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    15\n        target    144\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    15\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    150\n        target    149\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    151\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    151\n        target    51\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    152\n        target    76\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    153\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    153\n        target    94\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    154\n        target    43\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    155\n        target    106\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    155\n        target    134\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    155\n        target    24\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    156\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    156\n        target    27\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    156\n        target    81\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    157\n        target    105\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    158\n        target    118\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    158\n        target    151\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    159\n        target    136\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    159\n        target    90\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    16\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    17\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    18\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    19\n        target    134\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    19\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    2\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    2\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    2\n        target    71\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    2\n        target    85\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    20\n        target    100\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    20\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    21\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    22\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    22\n        target    141\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    23\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    24\n        target    19\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    25\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    26\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    27\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    28\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    28\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    29\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    29\n        target    45\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    3\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    3\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    30\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    31\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    32\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    33\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    34\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    35\n        target    26\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    36\n        target    33\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    36\n        target    63\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    37\n        target    35\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    38\n        target    139\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    38\n        target    19\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    39\n        target    36\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    4\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    4\n        target    108\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    4\n        target    134\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    4\n        target    55\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    40\n        target    30\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    41\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    42\n        target    29\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    43\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    44\n        target    19\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    45\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    45\n        target    46\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    46\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    47\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    48\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    48\n        target    62\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    49\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    5\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    50\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    51\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    52\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    53\n        target    110\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    53\n        target    37\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    54\n        target    47\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    55\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    55\n        target    81\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    56\n        target    53\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    57\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    57\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    58\n        target    50\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    59\n        target    20\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    59\n        target    27\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    6\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    6\n        target    77\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    60\n        target    51\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    61\n        target    20\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    61\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    62\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    63\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    64\n        target    41\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    65\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    65\n        target    25\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    66\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    66\n        target    40\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    67\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    68\n        target    27\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    68\n        target    76\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    69\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    7\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    70\n        target    60\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    71\n        target    42\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    72\n        target    61\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    72\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    73\n        target    44\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    74\n        target    65\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    75\n        target    36\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    76\n        target    52\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    77\n        target    52\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    77\n        target    53\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    78\n        target    59\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    79\n        target    159\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    79\n        target    55\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    8\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    80\n        target    75\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    81\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    82\n        target    73\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    83\n        target    54\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    83\n        target    69\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    84\n        target    65\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    85\n        target    81\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    86\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    87\n        target    31\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    88\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    89\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    89\n        target    71\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    9\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    90\n        target    140\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    90\n        target    19\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    91\n        target    60\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    92\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    93\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    94\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    94\n        target    79\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    95\n        target    86\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    96\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    97\n        target    57\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    98\n        target    96\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    99\n        target    57\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n]\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v160e224.tglf",
    "content": "0 888.000 885.000 30.000 30.000\n1 763.000 901.000 30.000 30.000\n2 643.000 751.000 30.000 30.000\n3 39.000 746.000 30.000 30.000\n4 272.000 94.000 30.000 30.000\n5 230.000 979.000 30.000 30.000\n6 353.000 934.000 30.000 30.000\n7 605.000 1107.000 30.000 30.000\n8 272.000 771.000 30.000 30.000\n9 535.000 286.000 30.000 30.000\n10 644.000 392.000 30.000 30.000\n11 12.000 294.000 30.000 30.000\n12 724.000 0.000 30.000 30.000\n13 347.000 119.000 30.000 30.000\n14 1109.000 834.000 30.000 30.000\n15 843.000 199.000 30.000 30.000\n16 1045.000 552.000 30.000 30.000\n17 976.000 37.000 30.000 30.000\n18 772.000 480.000 30.000 30.000\n19 911.000 546.000 30.000 30.000\n20 991.000 261.000 30.000 30.000\n21 54.000 1098.000 30.000 30.000\n22 207.000 1123.000 30.000 30.000\n23 880.000 1032.000 30.000 30.000\n24 403.000 481.000 30.000 30.000\n25 180.000 511.000 30.000 30.000\n26 666.000 24.000 30.000 30.000\n27 400.000 938.000 30.000 30.000\n28 562.000 430.000 30.000 30.000\n29 650.000 286.000 30.000 30.000\n30 1137.000 744.000 30.000 30.000\n31 1127.000 579.000 30.000 30.000\n32 695.000 372.000 30.000 30.000\n33 124.000 406.000 30.000 30.000\n34 742.000 639.000 30.000 30.000\n35 1056.000 590.000 30.000 30.000\n36 379.000 1082.000 30.000 30.000\n37 1055.000 817.000 30.000 30.000\n38 333.000 838.000 30.000 30.000\n39 332.000 1038.000 30.000 30.000\n40 626.000 292.000 30.000 30.000\n41 512.000 1056.000 30.000 30.000\n42 1009.000 5.000 30.000 30.000\n43 966.000 675.000 30.000 30.000\n44 417.000 335.000 30.000 30.000\n45 44.000 815.000 30.000 30.000\n46 1120.000 329.000 30.000 30.000\n47 38.000 958.000 30.000 30.000\n48 878.000 40.000 30.000 30.000\n49 367.000 701.000 30.000 30.000\n50 416.000 389.000 30.000 30.000\n51 296.000 174.000 30.000 30.000\n52 638.000 277.000 30.000 30.000\n53 455.000 613.000 30.000 30.000\n54 99.000 724.000 30.000 30.000\n55 733.000 1111.000 30.000 30.000\n56 644.000 1046.000 30.000 30.000\n57 897.000 767.000 30.000 30.000\n58 624.000 691.000 30.000 30.000\n59 577.000 419.000 30.000 30.000\n60 910.000 713.000 30.000 30.000\n61 966.000 810.000 30.000 30.000\n62 810.000 442.000 30.000 30.000\n63 707.000 795.000 30.000 30.000\n64 334.000 946.000 30.000 30.000\n65 226.000 142.000 30.000 30.000\n66 701.000 617.000 30.000 30.000\n67 448.000 665.000 30.000 30.000\n68 549.000 730.000 30.000 30.000\n69 81.000 1100.000 30.000 30.000\n70 283.000 591.000 30.000 30.000\n71 920.000 796.000 30.000 30.000\n72 1079.000 667.000 30.000 30.000\n73 327.000 215.000 30.000 30.000\n74 188.000 732.000 30.000 30.000\n75 783.000 198.000 30.000 30.000\n76 644.000 967.000 30.000 30.000\n77 1033.000 1086.000 30.000 30.000\n78 18.000 400.000 30.000 30.000\n79 148.000 417.000 30.000 30.000\n80 336.000 835.000 30.000 30.000\n81 965.000 533.000 30.000 30.000\n82 229.000 1054.000 30.000 30.000\n83 680.000 440.000 30.000 30.000\n84 20.000 849.000 30.000 30.000\n85 962.000 382.000 30.000 30.000\n86 946.000 650.000 30.000 30.000\n87 856.000 278.000 30.000 30.000\n88 654.000 306.000 30.000 30.000\n89 570.000 88.000 30.000 30.000\n90 642.000 39.000 30.000 30.000\n91 471.000 274.000 30.000 30.000\n92 539.000 1009.000 30.000 30.000\n93 431.000 808.000 30.000 30.000\n94 673.000 546.000 30.000 30.000\n95 362.000 896.000 30.000 30.000\n96 347.000 1035.000 30.000 30.000\n97 535.000 1067.000 30.000 30.000\n98 646.000 936.000 30.000 30.000\n99 538.000 356.000 30.000 30.000\n100 274.000 700.000 30.000 30.000\n101 816.000 697.000 30.000 30.000\n102 869.000 1019.000 30.000 30.000\n103 922.000 584.000 30.000 30.000\n104 223.000 1010.000 30.000 30.000\n105 688.000 695.000 30.000 30.000\n106 909.000 999.000 30.000 30.000\n107 687.000 41.000 30.000 30.000\n108 827.000 446.000 30.000 30.000\n109 327.000 845.000 30.000 30.000\n110 137.000 289.000 30.000 30.000\n111 298.000 222.000 30.000 30.000\n112 519.000 1088.000 30.000 30.000\n113 115.000 812.000 30.000 30.000\n114 889.000 120.000 30.000 30.000\n115 550.000 671.000 30.000 30.000\n116 1128.000 173.000 30.000 30.000\n117 754.000 169.000 30.000 30.000\n118 592.000 678.000 30.000 30.000\n119 130.000 793.000 30.000 30.000\n120 1113.000 183.000 30.000 30.000\n121 612.000 987.000 30.000 30.000\n122 956.000 216.000 30.000 30.000\n123 342.000 989.000 30.000 30.000\n124 951.000 588.000 30.000 30.000\n125 1105.000 838.000 30.000 30.000\n126 412.000 685.000 30.000 30.000\n127 736.000 33.000 30.000 30.000\n128 675.000 162.000 30.000 30.000\n129 509.000 778.000 30.000 30.000\n130 479.000 920.000 30.000 30.000\n131 792.000 540.000 30.000 30.000\n132 539.000 412.000 30.000 30.000\n133 9.000 388.000 30.000 30.000\n134 868.000 672.000 30.000 30.000\n135 105.000 275.000 30.000 30.000\n136 568.000 853.000 30.000 30.000\n137 1027.000 1101.000 30.000 30.000\n138 772.000 507.000 30.000 30.000\n139 225.000 121.000 30.000 30.000\n140 1026.000 166.000 30.000 30.000\n141 712.000 869.000 30.000 30.000\n142 741.000 912.000 30.000 30.000\n143 707.000 102.000 30.000 30.000\n144 937.000 897.000 30.000 30.000\n145 557.000 602.000 30.000 30.000\n146 425.000 821.000 30.000 30.000\n147 602.000 996.000 30.000 30.000\n148 557.000 750.000 30.000 30.000\n149 862.000 596.000 30.000 30.000\n150 1072.000 394.000 30.000 30.000\n151 927.000 563.000 30.000 30.000\n152 886.000 979.000 30.000 30.000\n153 232.000 1060.000 30.000 30.000\n154 545.000 750.000 30.000 30.000\n155 654.000 1122.000 30.000 30.000\n156 882.000 379.000 30.000 30.000\n157 392.000 657.000 30.000 30.000\n158 997.000 888.000 30.000 30.000\n159 653.000 313.000 30.000 30.000\n#\n99 57\n107 72\n157 105\n110 54\n65 25\n101 7\n63 21\n156 18\n33 23\n103 30\n147 135\n6 77\n159 90\n112 54\n135 16\n85 81\n154 43\n4 108\n153 94\n133 4\n29 3\n104 1\n93 1\n148 105\n47 6\n144 80\n10 71\n61 7\n43 15\n17 5\n15 144\n155 24\n134 79\n156 27\n138 24\n16 6\n94 21\n78 59\n37 35\n22 141\n5 4\n25 10\n36 63\n12 78\n124 118\n21 13\n92 15\n11 68\n39 36\n119 117\n68 76\n13 2\n114 84\n146 92\n54 47\n11 86\n111 22\n2 0\n4 55\n72 61\n48 62\n97 57\n105 17\n83 54\n6 4\n76 52\n15 8\n24 19\n46 4\n18 6\n108 24\n75 36\n10 3\n38 139\n145 57\n3 9\n45 21\n72 9\n45 46\n2 5\n95 86\n142 46\n151 51\n83 69\n121 21\n131 76\n155 106\n140 40\n14 115\n109 80\n118 50\n28 14\n145 16\n116 17\n77 53\n56 53\n64 41\n141 41\n52 12\n9 5\n53 37\n82 73\n69 8\n3 0\n94 79\n68 27\n74 65\n90 140\n127 27\n66 40\n107 28\n41 18\n40 30\n136 130\n112 96\n42 29\n126 121\n128 90\n38 19\n135 1\n67 15\n98 96\n28 0\n14 53\n146 35\n123 8\n141 62\n29 45\n50 11\n149 59\n23 17\n71 42\n59 27\n102 36\n152 76\n70 60\n49 13\n27 10\n114 109\n129 9\n89 2\n30 5\n66 17\n150 149\n22 0\n4 134\n120 113\n81 17\n19 4\n156 81\n125 61\n80 75\n59 20\n123 154\n158 151\n122 102\n137 88\n103 70\n32 10\n7 4\n127 101\n158 118\n127 124\n8 4\n125 65\n55 81\n113 21\n57 21\n104 31\n1 0\n12 2\n31 10\n61 20\n14 5\n90 19\n62 23\n86 4\n20 100\n96 22\n143 14\n79 159\n153 6\n139 116\n91 60\n100 82\n51 5\n4 1\n2 71\n19 134\n65 23\n26 15\n89 71\n132 21\n139 62\n11 6\n60 51\n132 81\n77 52\n84 65\n151 5\n115 56\n113 114\n79 55\n87 31\n53 110\n106 67\n48 14\n105 45\n88 13\n2 85\n58 50\n20 2\n34 6\n155 134\n36 33\n130 89\n103 78\n73 44\n117 11\n57 0\n55 21\n44 19\n159 136\n35 26\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v160e240.gml",
    "content": "graph\n[\n    node\n    [\n        id    0\n        label    \"\"\n        graphics\n        [\n            x    1012.49\n            y    467.75\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    1\n        label    \"\"\n        graphics\n        [\n            x    476.32\n            y    970.86\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    2\n        label    \"\"\n        graphics\n        [\n            x    933.84\n            y    763.16\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    3\n        label    \"\"\n        graphics\n        [\n            x    646.68\n            y    686.76\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    4\n        label    \"\"\n        graphics\n        [\n            x    821.53\n            y    59.08\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    5\n        label    \"\"\n        graphics\n        [\n            x    879.42\n            y    482.80\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    6\n        label    \"\"\n        graphics\n        [\n            x    499.30\n            y    1068.34\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    7\n        label    \"\"\n        graphics\n        [\n            x    795.46\n            y    581.03\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    8\n        label    \"\"\n        graphics\n        [\n            x    697.72\n            y    939.55\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    9\n        label    \"\"\n        graphics\n        [\n            x    880.53\n            y    587.04\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    10\n        label    \"\"\n        graphics\n        [\n            x    510.10\n            y    83.69\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    11\n        label    \"\"\n        graphics\n        [\n            x    243.11\n            y    1075.82\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    12\n        label    \"\"\n        graphics\n        [\n            x    919.81\n            y    1054.91\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    13\n        label    \"\"\n        graphics\n        [\n            x    911.40\n            y    56.86\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    14\n        label    \"\"\n        graphics\n        [\n            x    357.73\n            y    29.00\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    15\n        label    \"\"\n        graphics\n        [\n            x    1120.95\n            y    1027.32\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    16\n        label    \"\"\n        graphics\n        [\n            x    456.26\n            y    961.88\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    17\n        label    \"\"\n        graphics\n        [\n            x    334.85\n            y    172.60\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    18\n        label    \"\"\n        graphics\n        [\n            x    27.53\n            y    911.67\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    19\n        label    \"\"\n        graphics\n        [\n            x    353.93\n            y    1050.86\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    20\n        label    \"\"\n        graphics\n        [\n            x    247.03\n            y    112.42\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    21\n        label    \"\"\n        graphics\n        [\n            x    474.50\n            y    1137.43\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    22\n        label    \"\"\n        graphics\n        [\n            x    561.06\n            y    889.40\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    23\n        label    \"\"\n        graphics\n        [\n            x    719.20\n            y    733.75\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    24\n        label    \"\"\n        graphics\n        [\n            x    153.79\n            y    756.31\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    25\n        label    \"\"\n        graphics\n        [\n            x    166.63\n            y    8.68\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    26\n        label    \"\"\n        graphics\n        [\n            x    33.13\n            y    415.18\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    27\n        label    \"\"\n        graphics\n        [\n            x    764.63\n            y    1075.37\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    28\n        label    \"\"\n        graphics\n        [\n            x    20.52\n            y    824.52\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    29\n        label    \"\"\n        graphics\n        [\n            x    453.43\n            y    495.10\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    30\n        label    \"\"\n        graphics\n        [\n            x    828.14\n            y    621.22\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    31\n        label    \"\"\n        graphics\n        [\n            x    354.45\n            y    449.08\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    32\n        label    \"\"\n        graphics\n        [\n            x    443.25\n            y    976.18\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    33\n        label    \"\"\n        graphics\n        [\n            x    451.87\n            y    597.21\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    34\n        label    \"\"\n        graphics\n        [\n            x    1041.67\n            y    205.48\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    35\n        label    \"\"\n        graphics\n        [\n            x    375.03\n            y    639.71\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    36\n        label    \"\"\n        graphics\n        [\n            x    827.79\n            y    1131.88\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    37\n        label    \"\"\n        graphics\n        [\n            x    404.46\n            y    857.00\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    38\n        label    \"\"\n        graphics\n        [\n            x    469.91\n            y    1016.56\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    39\n        label    \"\"\n        graphics\n        [\n            x    135.15\n            y    45.91\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    40\n        label    \"\"\n        graphics\n        [\n            x    42.24\n            y    518.90\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    41\n        label    \"\"\n        graphics\n        [\n            x    977.44\n            y    274.41\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    42\n        label    \"\"\n        graphics\n        [\n            x    339.94\n            y    699.67\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    43\n        label    \"\"\n        graphics\n        [\n            x    693.84\n            y    941.31\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    44\n        label    \"\"\n        graphics\n        [\n            x    444.35\n            y    605.36\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    45\n        label    \"\"\n        graphics\n        [\n            x    432.73\n            y    892.12\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    46\n        label    \"\"\n        graphics\n        [\n            x    614.06\n            y    399.87\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    47\n        label    \"\"\n        graphics\n        [\n            x    114.51\n            y    560.24\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    48\n        label    \"\"\n        graphics\n        [\n            x    970.68\n            y    115.95\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    49\n        label    \"\"\n        graphics\n        [\n            x    1072.88\n            y    134.13\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    50\n        label    \"\"\n        graphics\n        [\n            x    121.30\n            y    1001.12\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    51\n        label    \"\"\n        graphics\n        [\n            x    266.22\n            y    274.35\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    52\n        label    \"\"\n        graphics\n        [\n            x    581.74\n            y    454.08\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    53\n        label    \"\"\n        graphics\n        [\n            x    962.79\n            y    391.62\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    54\n        label    \"\"\n        graphics\n        [\n            x    991.83\n            y    272.62\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    55\n        label    \"\"\n        graphics\n        [\n            x    1006.50\n            y    689.06\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    56\n        label    \"\"\n        graphics\n        [\n            x    296.39\n            y    405.65\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    57\n        label    \"\"\n        graphics\n        [\n            x    618.62\n            y    1073.13\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    58\n        label    \"\"\n        graphics\n        [\n            x    1006.31\n            y    148.15\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    59\n        label    \"\"\n        graphics\n        [\n            x    758.69\n            y    665.39\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    60\n        label    \"\"\n        graphics\n        [\n            x    561.95\n            y    9.35\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    61\n        label    \"\"\n        graphics\n        [\n            x    1021.27\n            y    275.14\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    62\n        label    \"\"\n        graphics\n        [\n            x    472.47\n            y    189.16\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    63\n        label    \"\"\n        graphics\n        [\n            x    262.83\n            y    833.50\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    64\n        label    \"\"\n        graphics\n        [\n            x    417.34\n            y    587.29\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    65\n        label    \"\"\n        graphics\n        [\n            x    620.90\n            y    26.80\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    66\n        label    \"\"\n        graphics\n        [\n            x    632.80\n            y    853.51\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    67\n        label    \"\"\n        graphics\n        [\n            x    668.22\n            y    1026.76\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    68\n        label    \"\"\n        graphics\n        [\n            x    1040.52\n            y    226.58\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    69\n        label    \"\"\n        graphics\n        [\n            x    852.84\n            y    602.65\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    70\n        label    \"\"\n        graphics\n        [\n            x    936.58\n            y    132.87\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    71\n        label    \"\"\n        graphics\n        [\n            x    662.89\n            y    386.22\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    72\n        label    \"\"\n        graphics\n        [\n            x    1071.95\n            y    1116.38\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    73\n        label    \"\"\n        graphics\n        [\n            x    717.61\n            y    230.68\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    74\n        label    \"\"\n        graphics\n        [\n            x    919.21\n            y    96.99\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    75\n        label    \"\"\n        graphics\n        [\n            x    257.28\n            y    512.16\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    76\n        label    \"\"\n        graphics\n        [\n            x    520.66\n            y    231.81\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    77\n        label    \"\"\n        graphics\n        [\n            x    69.65\n            y    714.17\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    78\n        label    \"\"\n        graphics\n        [\n            x    565.38\n            y    431.52\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    79\n        label    \"\"\n        graphics\n        [\n            x    568.42\n            y    1040.83\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    80\n        label    \"\"\n        graphics\n        [\n            x    901.94\n            y    117.73\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    81\n        label    \"\"\n        graphics\n        [\n            x    593.25\n            y    926.89\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    82\n        label    \"\"\n        graphics\n        [\n            x    277.93\n            y    722.17\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    83\n        label    \"\"\n        graphics\n        [\n            x    257.96\n            y    414.19\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    84\n        label    \"\"\n        graphics\n        [\n            x    787.80\n            y    917.88\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    85\n        label    \"\"\n        graphics\n        [\n            x    349.48\n            y    600.73\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    86\n        label    \"\"\n        graphics\n        [\n            x    187.38\n            y    1118.67\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    87\n        label    \"\"\n        graphics\n        [\n            x    360.97\n            y    333.22\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    88\n        label    \"\"\n        graphics\n        [\n            x    207.98\n            y    873.02\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    89\n        label    \"\"\n        graphics\n        [\n            x    377.80\n            y    1084.34\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    90\n        label    \"\"\n        graphics\n        [\n            x    634.76\n            y    870.83\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    91\n        label    \"\"\n        graphics\n        [\n            x    592.66\n            y    517.41\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    92\n        label    \"\"\n        graphics\n        [\n            x    319.07\n            y    1100.72\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    93\n        label    \"\"\n        graphics\n        [\n            x    8.40\n            y    160.29\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    94\n        label    \"\"\n        graphics\n        [\n            x    1079.19\n            y    270.16\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    95\n        label    \"\"\n        graphics\n        [\n            x    1113.21\n            y    385.17\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    96\n        label    \"\"\n        graphics\n        [\n            x    283.15\n            y    1134.62\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    97\n        label    \"\"\n        graphics\n        [\n            x    456.62\n            y    11.12\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    98\n        label    \"\"\n        graphics\n        [\n            x    88.60\n            y    473.54\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    99\n        label    \"\"\n        graphics\n        [\n            x    468.94\n            y    780.10\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    100\n        label    \"\"\n        graphics\n        [\n            x    1029.33\n            y    653.18\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    101\n        label    \"\"\n        graphics\n        [\n            x    685.79\n            y    712.05\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    102\n        label    \"\"\n        graphics\n        [\n            x    789.84\n            y    884.85\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    103\n        label    \"\"\n        graphics\n        [\n            x    760.19\n            y    164.37\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    104\n        label    \"\"\n        graphics\n        [\n            x    949.05\n            y    78.93\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    105\n        label    \"\"\n        graphics\n        [\n            x    64.50\n            y    1056.80\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    106\n        label    \"\"\n        graphics\n        [\n            x    741.87\n            y    675.64\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    107\n        label    \"\"\n        graphics\n        [\n            x    1122.66\n            y    28.78\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    108\n        label    \"\"\n        graphics\n        [\n            x    646.98\n            y    783.50\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    109\n        label    \"\"\n        graphics\n        [\n            x    334.51\n            y    695.48\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    110\n        label    \"\"\n        graphics\n        [\n            x    1069.89\n            y    1110.12\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    111\n        label    \"\"\n        graphics\n        [\n            x    507.13\n            y    183.58\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    112\n        label    \"\"\n        graphics\n        [\n            x    264.19\n            y    860.40\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    113\n        label    \"\"\n        graphics\n        [\n            x    257.50\n            y    467.17\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    114\n        label    \"\"\n        graphics\n        [\n            x    261.72\n            y    1033.36\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    115\n        label    \"\"\n        graphics\n        [\n            x    554.44\n            y    1089.82\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    116\n        label    \"\"\n        graphics\n        [\n            x    166.55\n            y    1061.01\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    117\n        label    \"\"\n        graphics\n        [\n            x    433.65\n            y    993.50\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    118\n        label    \"\"\n        graphics\n        [\n            x    838.54\n            y    1014.81\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    119\n        label    \"\"\n        graphics\n        [\n            x    826.72\n            y    786.78\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    120\n        label    \"\"\n        graphics\n        [\n            x    763.49\n            y    877.53\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    121\n        label    \"\"\n        graphics\n        [\n            x    407.76\n            y    446.22\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    122\n        label    \"\"\n        graphics\n        [\n            x    934.78\n            y    346.48\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    123\n        label    \"\"\n        graphics\n        [\n            x    210.69\n            y    168.10\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    124\n        label    \"\"\n        graphics\n        [\n            x    131.92\n            y    863.82\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    125\n        label    \"\"\n        graphics\n        [\n            x    615.95\n            y    955.89\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    126\n        label    \"\"\n        graphics\n        [\n            x    82.89\n            y    452.73\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    127\n        label    \"\"\n        graphics\n        [\n            x    1094.59\n            y    667.15\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    128\n        label    \"\"\n        graphics\n        [\n            x    728.21\n            y    258.71\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    129\n        label    \"\"\n        graphics\n        [\n            x    1102.14\n            y    487.12\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    130\n        label    \"\"\n        graphics\n        [\n            x    1060.35\n            y    763.75\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    131\n        label    \"\"\n        graphics\n        [\n            x    19.68\n            y    89.94\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    132\n        label    \"\"\n        graphics\n        [\n            x    1107.20\n            y    1021.28\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    133\n        label    \"\"\n        graphics\n        [\n            x    1089.28\n            y    766.68\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    134\n        label    \"\"\n        graphics\n        [\n            x    1085.46\n            y    1114.26\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    135\n        label    \"\"\n        graphics\n        [\n            x    149.53\n            y    516.81\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    136\n        label    \"\"\n        graphics\n        [\n            x    980.14\n            y    5.62\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    137\n        label    \"\"\n        graphics\n        [\n            x    284.92\n            y    31.69\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    138\n        label    \"\"\n        graphics\n        [\n            x    1009.98\n            y    529.26\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    139\n        label    \"\"\n        graphics\n        [\n            x    855.36\n            y    337.06\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    140\n        label    \"\"\n        graphics\n        [\n            x    116.93\n            y    632.42\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    141\n        label    \"\"\n        graphics\n        [\n            x    1105.39\n            y    662.62\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    142\n        label    \"\"\n        graphics\n        [\n            x    860.88\n            y    442.19\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    143\n        label    \"\"\n        graphics\n        [\n            x    78.80\n            y    1094.70\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    144\n        label    \"\"\n        graphics\n        [\n            x    774.26\n            y    1094.20\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    145\n        label    \"\"\n        graphics\n        [\n            x    488.86\n            y    268.45\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    146\n        label    \"\"\n        graphics\n        [\n            x    1022.83\n            y    317.92\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    147\n        label    \"\"\n        graphics\n        [\n            x    556.11\n            y    363.88\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    148\n        label    \"\"\n        graphics\n        [\n            x    603.12\n            y    434.46\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    149\n        label    \"\"\n        graphics\n        [\n            x    658.60\n            y    837.59\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    150\n        label    \"\"\n        graphics\n        [\n            x    408.06\n            y    808.00\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    151\n        label    \"\"\n        graphics\n        [\n            x    833.76\n            y    825.51\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    152\n        label    \"\"\n        graphics\n        [\n            x    1077.02\n            y    42.68\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    153\n        label    \"\"\n        graphics\n        [\n            x    685.72\n            y    891.91\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    154\n        label    \"\"\n        graphics\n        [\n            x    438.46\n            y    820.07\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    155\n        label    \"\"\n        graphics\n        [\n            x    760.11\n            y    775.16\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    156\n        label    \"\"\n        graphics\n        [\n            x    522.61\n            y    449.97\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    157\n        label    \"\"\n        graphics\n        [\n            x    472.81\n            y    1100.82\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    158\n        label    \"\"\n        graphics\n        [\n            x    547.16\n            y    695.91\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    159\n        label    \"\"\n        graphics\n        [\n            x    97.11\n            y    1010.43\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    edge\n    [\n        source    0\n        target    132\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    1\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    10\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    10\n        target    43\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    100\n        target    56\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    101\n        target    55\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    102\n        target    58\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    103\n        target    74\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    103\n        target    90\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    104\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    104\n        target    71\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    104\n        target    81\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    105\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    106\n        target    135\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    106\n        target    52\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    107\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    108\n        target    65\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    109\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    109\n        target    70\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    11\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    110\n        target    59\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    111\n        target    143\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    111\n        target    39\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    111\n        target    83\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    112\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    112\n        target    71\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    112\n        target    73\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    113\n        target    81\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    114\n        target    109\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    114\n        target    29\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    114\n        target    77\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    115\n        target    70\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    115\n        target    75\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    116\n        target    25\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    116\n        target    74\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    117\n        target    42\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    118\n        target    58\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    119\n        target    33\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    12\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    120\n        target    102\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    121\n        target    53\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    122\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    123\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    124\n        target    90\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    125\n        target    40\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    125\n        target    42\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    126\n        target    42\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    127\n        target    88\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    128\n        target    144\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    128\n        target    74\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    129\n        target    128\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    129\n        target    60\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    13\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    130\n        target    24\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    130\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    131\n        target    61\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    132\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    133\n        target    126\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    133\n        target    40\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    133\n        target    91\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    134\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    135\n        target    88\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    136\n        target    79\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    137\n        target    128\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    138\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    139\n        target    81\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    139\n        target    97\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    14\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    140\n        target    85\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    141\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    142\n        target    74\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    143\n        target    25\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    143\n        target    28\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    144\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    145\n        target    48\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    146\n        target    148\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    146\n        target    40\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    147\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    148\n        target    133\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    148\n        target    44\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    148\n        target    96\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    149\n        target    96\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    15\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    150\n        target    144\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    151\n        target    118\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    151\n        target    36\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    152\n        target    76\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    152\n        target    81\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    153\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    154\n        target    105\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    154\n        target    24\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    154\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    155\n        target    122\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    155\n        target    27\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    156\n        target    120\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    156\n        target    86\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    157\n        target    122\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    158\n        target    41\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    159\n        target    142\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    159\n        target    60\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    16\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    16\n        target    140\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    17\n        target    100\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    17\n        target    115\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    17\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    17\n        target    47\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    18\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    19\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    2\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    20\n        target    136\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    20\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    21\n        target    116\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    21\n        target    150\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    21\n        target    20\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    22\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    23\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    24\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    24\n        target    39\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    25\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    26\n        target    31\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    26\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    27\n        target    19\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    28\n        target    123\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    28\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    29\n        target    45\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    29\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    29\n        target    84\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    3\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    30\n        target    137\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    30\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    30\n        target    20\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    30\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    31\n        target    113\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    31\n        target    30\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    32\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    33\n        target    30\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    34\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    35\n        target    139\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    35\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    35\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    36\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    37\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    38\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    38\n        target    32\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    39\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    4\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    4\n        target    64\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    40\n        target    20\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    40\n        target    84\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    41\n        target    35\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    42\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    42\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    43\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    43\n        target    146\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    43\n        target    66\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    44\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    44\n        target    68\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    45\n        target    31\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    46\n        target    123\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    46\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    47\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    47\n        target    51\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    48\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    49\n        target    25\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    5\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    50\n        target    35\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    51\n        target    19\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    52\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    53\n        target    42\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    53\n        target    60\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    54\n        target    123\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    54\n        target    30\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    55\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    56\n        target    152\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    56\n        target    153\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    56\n        target    31\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    57\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    58\n        target    19\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    59\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    6\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    60\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    61\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    61\n        target    58\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    61\n        target    88\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    62\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    63\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    63\n        target    79\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    64\n        target    44\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    65\n        target    57\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    66\n        target    53\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    67\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    67\n        target    39\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    68\n        target    24\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    69\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    7\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    70\n        target    27\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    70\n        target    78\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    71\n        target    38\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    72\n        target    65\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    73\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    73\n        target    50\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    74\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    74\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    75\n        target    59\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    76\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    77\n        target    64\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    78\n        target    38\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    78\n        target    49\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    79\n        target    19\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    8\n        target    101\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    8\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    80\n        target    40\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    81\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    82\n        target    50\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    83\n        target    25\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    83\n        target    71\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    84\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    84\n        target    61\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    85\n        target    114\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    85\n        target    19\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    86\n        target    122\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    86\n        target    44\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    86\n        target    98\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    87\n        target    60\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    88\n        target    82\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    89\n        target    82\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    9\n        target    157\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    9\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    90\n        target    52\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    91\n        target    129\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    91\n        target    64\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    92\n        target    143\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    92\n        target    81\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    93\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    94\n        target    87\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    95\n        target    92\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    96\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    97\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    98\n        target    61\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    99\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n]\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v160e240.tglf",
    "content": "0 1012.000 467.000 30.000 30.000\n1 476.000 970.000 30.000 30.000\n2 933.000 763.000 30.000 30.000\n3 646.000 686.000 30.000 30.000\n4 821.000 59.000 30.000 30.000\n5 879.000 482.000 30.000 30.000\n6 499.000 1068.000 30.000 30.000\n7 795.000 581.000 30.000 30.000\n8 697.000 939.000 30.000 30.000\n9 880.000 587.000 30.000 30.000\n10 510.000 83.000 30.000 30.000\n11 243.000 1075.000 30.000 30.000\n12 919.000 1054.000 30.000 30.000\n13 911.000 56.000 30.000 30.000\n14 357.000 29.000 30.000 30.000\n15 1120.000 1027.000 30.000 30.000\n16 456.000 961.000 30.000 30.000\n17 334.000 172.000 30.000 30.000\n18 27.000 911.000 30.000 30.000\n19 353.000 1050.000 30.000 30.000\n20 247.000 112.000 30.000 30.000\n21 474.000 1137.000 30.000 30.000\n22 561.000 889.000 30.000 30.000\n23 719.000 733.000 30.000 30.000\n24 153.000 756.000 30.000 30.000\n25 166.000 8.000 30.000 30.000\n26 33.000 415.000 30.000 30.000\n27 764.000 1075.000 30.000 30.000\n28 20.000 824.000 30.000 30.000\n29 453.000 495.000 30.000 30.000\n30 828.000 621.000 30.000 30.000\n31 354.000 449.000 30.000 30.000\n32 443.000 976.000 30.000 30.000\n33 451.000 597.000 30.000 30.000\n34 1041.000 205.000 30.000 30.000\n35 375.000 639.000 30.000 30.000\n36 827.000 1131.000 30.000 30.000\n37 404.000 857.000 30.000 30.000\n38 469.000 1016.000 30.000 30.000\n39 135.000 45.000 30.000 30.000\n40 42.000 518.000 30.000 30.000\n41 977.000 274.000 30.000 30.000\n42 339.000 699.000 30.000 30.000\n43 693.000 941.000 30.000 30.000\n44 444.000 605.000 30.000 30.000\n45 432.000 892.000 30.000 30.000\n46 614.000 399.000 30.000 30.000\n47 114.000 560.000 30.000 30.000\n48 970.000 115.000 30.000 30.000\n49 1072.000 134.000 30.000 30.000\n50 121.000 1001.000 30.000 30.000\n51 266.000 274.000 30.000 30.000\n52 581.000 454.000 30.000 30.000\n53 962.000 391.000 30.000 30.000\n54 991.000 272.000 30.000 30.000\n55 1006.000 689.000 30.000 30.000\n56 296.000 405.000 30.000 30.000\n57 618.000 1073.000 30.000 30.000\n58 1006.000 148.000 30.000 30.000\n59 758.000 665.000 30.000 30.000\n60 561.000 9.000 30.000 30.000\n61 1021.000 275.000 30.000 30.000\n62 472.000 189.000 30.000 30.000\n63 262.000 833.000 30.000 30.000\n64 417.000 587.000 30.000 30.000\n65 620.000 26.000 30.000 30.000\n66 632.000 853.000 30.000 30.000\n67 668.000 1026.000 30.000 30.000\n68 1040.000 226.000 30.000 30.000\n69 852.000 602.000 30.000 30.000\n70 936.000 132.000 30.000 30.000\n71 662.000 386.000 30.000 30.000\n72 1071.000 1116.000 30.000 30.000\n73 717.000 230.000 30.000 30.000\n74 919.000 96.000 30.000 30.000\n75 257.000 512.000 30.000 30.000\n76 520.000 231.000 30.000 30.000\n77 69.000 714.000 30.000 30.000\n78 565.000 431.000 30.000 30.000\n79 568.000 1040.000 30.000 30.000\n80 901.000 117.000 30.000 30.000\n81 593.000 926.000 30.000 30.000\n82 277.000 722.000 30.000 30.000\n83 257.000 414.000 30.000 30.000\n84 787.000 917.000 30.000 30.000\n85 349.000 600.000 30.000 30.000\n86 187.000 1118.000 30.000 30.000\n87 360.000 333.000 30.000 30.000\n88 207.000 873.000 30.000 30.000\n89 377.000 1084.000 30.000 30.000\n90 634.000 870.000 30.000 30.000\n91 592.000 517.000 30.000 30.000\n92 319.000 1100.000 30.000 30.000\n93 8.000 160.000 30.000 30.000\n94 1079.000 270.000 30.000 30.000\n95 1113.000 385.000 30.000 30.000\n96 283.000 1134.000 30.000 30.000\n97 456.000 11.000 30.000 30.000\n98 88.000 473.000 30.000 30.000\n99 468.000 780.000 30.000 30.000\n100 1029.000 653.000 30.000 30.000\n101 685.000 712.000 30.000 30.000\n102 789.000 884.000 30.000 30.000\n103 760.000 164.000 30.000 30.000\n104 949.000 78.000 30.000 30.000\n105 64.000 1056.000 30.000 30.000\n106 741.000 675.000 30.000 30.000\n107 1122.000 28.000 30.000 30.000\n108 646.000 783.000 30.000 30.000\n109 334.000 695.000 30.000 30.000\n110 1069.000 1110.000 30.000 30.000\n111 507.000 183.000 30.000 30.000\n112 264.000 860.000 30.000 30.000\n113 257.000 467.000 30.000 30.000\n114 261.000 1033.000 30.000 30.000\n115 554.000 1089.000 30.000 30.000\n116 166.000 1061.000 30.000 30.000\n117 433.000 993.000 30.000 30.000\n118 838.000 1014.000 30.000 30.000\n119 826.000 786.000 30.000 30.000\n120 763.000 877.000 30.000 30.000\n121 407.000 446.000 30.000 30.000\n122 934.000 346.000 30.000 30.000\n123 210.000 168.000 30.000 30.000\n124 131.000 863.000 30.000 30.000\n125 615.000 955.000 30.000 30.000\n126 82.000 452.000 30.000 30.000\n127 1094.000 667.000 30.000 30.000\n128 728.000 258.000 30.000 30.000\n129 1102.000 487.000 30.000 30.000\n130 1060.000 763.000 30.000 30.000\n131 19.000 89.000 30.000 30.000\n132 1107.000 1021.000 30.000 30.000\n133 1089.000 766.000 30.000 30.000\n134 1085.000 1114.000 30.000 30.000\n135 149.000 516.000 30.000 30.000\n136 980.000 5.000 30.000 30.000\n137 284.000 31.000 30.000 30.000\n138 1009.000 529.000 30.000 30.000\n139 855.000 337.000 30.000 30.000\n140 116.000 632.000 30.000 30.000\n141 1105.000 662.000 30.000 30.000\n142 860.000 442.000 30.000 30.000\n143 78.000 1094.000 30.000 30.000\n144 774.000 1094.000 30.000 30.000\n145 488.000 268.000 30.000 30.000\n146 1022.000 317.000 30.000 30.000\n147 556.000 363.000 30.000 30.000\n148 603.000 434.000 30.000 30.000\n149 658.000 837.000 30.000 30.000\n150 408.000 808.000 30.000 30.000\n151 833.000 825.000 30.000 30.000\n152 1077.000 42.000 30.000 30.000\n153 685.000 891.000 30.000 30.000\n154 438.000 820.000 30.000 30.000\n155 760.000 775.000 30.000 30.000\n156 522.000 449.000 30.000 30.000\n157 472.000 1100.000 30.000 30.000\n158 547.000 695.000 30.000 30.000\n159 97.000 1010.000 30.000 30.000\n#\n30 137\n133 91\n56 31\n116 25\n129 60\n135 88\n111 39\n34 17\n1 0\n127 88\n91 64\n78 49\n79 19\n157 122\n154 105\n137 128\n63 11\n51 19\n143 25\n3 1\n11 9\n17 16\n153 9\n2 0\n112 73\n114 109\n155 122\n32 12\n128 144\n95 92\n80 40\n37 22\n86 98\n110 59\n57 12\n53 42\n64 44\n55 9\n100 56\n129 128\n86 122\n40 20\n15 7\n136 79\n151 118\n43 66\n17 115\n144 0\n154 9\n6 2\n103 74\n20 136\n31 30\n42 10\n155 27\n133 126\n115 70\n59 22\n104 71\n70 27\n62 6\n33 30\n35 6\n159 60\n66 53\n111 83\n101 55\n26 6\n104 11\n18 3\n69 21\n65 57\n109 17\n52 13\n104 81\n114 29\n139 81\n10 3\n60 15\n74 23\n156 120\n83 25\n125 40\n41 35\n132 4\n146 148\n47 51\n56 153\n115 75\n154 24\n17 47\n103 90\n25 15\n8 7\n72 65\n48 10\n97 13\n126 42\n30 15\n146 40\n35 139\n67 39\n92 143\n24 12\n94 87\n102 58\n35 21\n38 13\n68 24\n124 90\n93 3\n85 19\n16 0\n130 9\n54 30\n71 38\n46 123\n134 13\n98 61\n108 65\n40 84\n29 45\n27 19\n4 0\n118 58\n45 31\n9 5\n139 97\n49 25\n84 4\n46 3\n29 84\n42 12\n75 59\n61 88\n92 81\n147 9\n44 68\n4 64\n74 18\n73 15\n36 11\n78 38\n14 2\n54 123\n112 17\n125 42\n13 11\n38 32\n106 135\n24 39\n152 76\n141 4\n30 8\n5 1\n120 102\n26 31\n53 60\n86 44\n73 50\n67 15\n28 23\n114 77\n23 6\n30 20\n47 18\n151 36\n109 70\n133 40\n81 17\n12 7\n117 42\n99 23\n84 61\n61 58\n148 44\n43 13\n158 41\n148 96\n145 48\n112 71\n152 81\n106 52\n121 53\n21 116\n138 12\n83 71\n76 13\n28 123\n128 74\n140 85\n148 133\n107 21\n17 100\n10 43\n87 60\n50 35\n159 142\n89 82\n105 11\n31 113\n44 14\n20 2\n90 52\n7 0\n116 74\n82 50\n150 144\n149 96\n39 3\n77 64\n113 81\n96 22\n63 79\n43 146\n111 143\n119 33\n91 129\n61 15\n16 140\n21 150\n8 101\n122 14\n0 132\n88 82\n156 86\n56 152\n70 78\n130 24\n123 3\n143 28\n29 8\n22 2\n131 61\n21 20\n142 74\n58 19\n9 157\n85 114\n19 3\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v170e170.gml",
    "content": "graph\n[\n    node\n    [\n        id    0\n        label    \"\"\n        graphics\n        [\n            x    803.73\n            y    338.20\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    1\n        label    \"\"\n        graphics\n        [\n            x    300.45\n            y    612.81\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    2\n        label    \"\"\n        graphics\n        [\n            x    282.80\n            y    766.23\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    3\n        label    \"\"\n        graphics\n        [\n            x    683.32\n            y    41.18\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    4\n        label    \"\"\n        graphics\n        [\n            x    374.99\n            y    743.87\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    5\n        label    \"\"\n        graphics\n        [\n            x    1000.31\n            y    803.62\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    6\n        label    \"\"\n        graphics\n        [\n            x    146.64\n            y    903.63\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    7\n        label    \"\"\n        graphics\n        [\n            x    1024.57\n            y    779.68\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    8\n        label    \"\"\n        graphics\n        [\n            x    828.04\n            y    897.63\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    9\n        label    \"\"\n        graphics\n        [\n            x    1010.10\n            y    697.94\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    10\n        label    \"\"\n        graphics\n        [\n            x    613.04\n            y    862.26\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    11\n        label    \"\"\n        graphics\n        [\n            x    135.55\n            y    732.02\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    12\n        label    \"\"\n        graphics\n        [\n            x    292.64\n            y    878.72\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    13\n        label    \"\"\n        graphics\n        [\n            x    466.38\n            y    188.20\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    14\n        label    \"\"\n        graphics\n        [\n            x    267.39\n            y    2.98\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    15\n        label    \"\"\n        graphics\n        [\n            x    595.04\n            y    78.15\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    16\n        label    \"\"\n        graphics\n        [\n            x    496.08\n            y    937.56\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    17\n        label    \"\"\n        graphics\n        [\n            x    665.81\n            y    751.96\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    18\n        label    \"\"\n        graphics\n        [\n            x    260.41\n            y    196.53\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    19\n        label    \"\"\n        graphics\n        [\n            x    718.88\n            y    1146.52\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    20\n        label    \"\"\n        graphics\n        [\n            x    402.93\n            y    492.18\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    21\n        label    \"\"\n        graphics\n        [\n            x    386.25\n            y    1109.19\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    22\n        label    \"\"\n        graphics\n        [\n            x    191.94\n            y    568.20\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    23\n        label    \"\"\n        graphics\n        [\n            x    789.88\n            y    782.78\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    24\n        label    \"\"\n        graphics\n        [\n            x    65.94\n            y    1061.54\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    25\n        label    \"\"\n        graphics\n        [\n            x    577.83\n            y    1027.07\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    26\n        label    \"\"\n        graphics\n        [\n            x    336.59\n            y    504.57\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    27\n        label    \"\"\n        graphics\n        [\n            x    55.19\n            y    690.08\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    28\n        label    \"\"\n        graphics\n        [\n            x    211.10\n            y    571.30\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    29\n        label    \"\"\n        graphics\n        [\n            x    124.40\n            y    936.98\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    30\n        label    \"\"\n        graphics\n        [\n            x    169.60\n            y    523.65\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    31\n        label    \"\"\n        graphics\n        [\n            x    1001.95\n            y    31.33\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    32\n        label    \"\"\n        graphics\n        [\n            x    495.91\n            y    790.17\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    33\n        label    \"\"\n        graphics\n        [\n            x    513.38\n            y    489.58\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    34\n        label    \"\"\n        graphics\n        [\n            x    723.49\n            y    76.92\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    35\n        label    \"\"\n        graphics\n        [\n            x    0.16\n            y    1048.05\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    36\n        label    \"\"\n        graphics\n        [\n            x    899.85\n            y    994.81\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    37\n        label    \"\"\n        graphics\n        [\n            x    20.83\n            y    514.47\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    38\n        label    \"\"\n        graphics\n        [\n            x    940.83\n            y    1074.72\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    39\n        label    \"\"\n        graphics\n        [\n            x    216.62\n            y    1075.18\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    40\n        label    \"\"\n        graphics\n        [\n            x    1094.65\n            y    692.86\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    41\n        label    \"\"\n        graphics\n        [\n            x    518.98\n            y    973.38\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    42\n        label    \"\"\n        graphics\n        [\n            x    30.78\n            y    842.18\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    43\n        label    \"\"\n        graphics\n        [\n            x    5.39\n            y    83.35\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    44\n        label    \"\"\n        graphics\n        [\n            x    1057.27\n            y    541.33\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    45\n        label    \"\"\n        graphics\n        [\n            x    469.20\n            y    1004.48\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    46\n        label    \"\"\n        graphics\n        [\n            x    60.80\n            y    61.55\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    47\n        label    \"\"\n        graphics\n        [\n            x    450.21\n            y    913.50\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    48\n        label    \"\"\n        graphics\n        [\n            x    20.72\n            y    625.61\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    49\n        label    \"\"\n        graphics\n        [\n            x    461.45\n            y    814.49\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    50\n        label    \"\"\n        graphics\n        [\n            x    1129.62\n            y    229.25\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    51\n        label    \"\"\n        graphics\n        [\n            x    436.95\n            y    695.83\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    52\n        label    \"\"\n        graphics\n        [\n            x    55.62\n            y    254.05\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    53\n        label    \"\"\n        graphics\n        [\n            x    451.02\n            y    549.71\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    54\n        label    \"\"\n        graphics\n        [\n            x    469.10\n            y    628.52\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    55\n        label    \"\"\n        graphics\n        [\n            x    326.83\n            y    174.09\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    56\n        label    \"\"\n        graphics\n        [\n            x    814.05\n            y    446.81\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    57\n        label    \"\"\n        graphics\n        [\n            x    850.09\n            y    914.75\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    58\n        label    \"\"\n        graphics\n        [\n            x    459.84\n            y    1012.44\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    59\n        label    \"\"\n        graphics\n        [\n            x    129.56\n            y    579.00\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    60\n        label    \"\"\n        graphics\n        [\n            x    111.17\n            y    1165.36\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    61\n        label    \"\"\n        graphics\n        [\n            x    1044.70\n            y    169.12\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    62\n        label    \"\"\n        graphics\n        [\n            x    187.62\n            y    256.15\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    63\n        label    \"\"\n        graphics\n        [\n            x    995.64\n            y    515.83\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    64\n        label    \"\"\n        graphics\n        [\n            x    289.55\n            y    1132.34\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    65\n        label    \"\"\n        graphics\n        [\n            x    908.98\n            y    432.01\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    66\n        label    \"\"\n        graphics\n        [\n            x    301.62\n            y    947.69\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    67\n        label    \"\"\n        graphics\n        [\n            x    974.29\n            y    664.18\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    68\n        label    \"\"\n        graphics\n        [\n            x    713.82\n            y    17.96\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    69\n        label    \"\"\n        graphics\n        [\n            x    713.92\n            y    716.37\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    70\n        label    \"\"\n        graphics\n        [\n            x    642.64\n            y    3.42\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    71\n        label    \"\"\n        graphics\n        [\n            x    923.75\n            y    546.12\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    72\n        label    \"\"\n        graphics\n        [\n            x    170.38\n            y    889.63\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    73\n        label    \"\"\n        graphics\n        [\n            x    74.26\n            y    552.40\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    74\n        label    \"\"\n        graphics\n        [\n            x    289.29\n            y    62.43\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    75\n        label    \"\"\n        graphics\n        [\n            x    167.56\n            y    481.50\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    76\n        label    \"\"\n        graphics\n        [\n            x    241.91\n            y    117.02\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    77\n        label    \"\"\n        graphics\n        [\n            x    900.77\n            y    906.23\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    78\n        label    \"\"\n        graphics\n        [\n            x    323.70\n            y    1088.83\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    79\n        label    \"\"\n        graphics\n        [\n            x    527.89\n            y    855.95\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    80\n        label    \"\"\n        graphics\n        [\n            x    426.60\n            y    564.14\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    81\n        label    \"\"\n        graphics\n        [\n            x    901.95\n            y    1114.58\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    82\n        label    \"\"\n        graphics\n        [\n            x    917.99\n            y    192.40\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    83\n        label    \"\"\n        graphics\n        [\n            x    294.14\n            y    192.00\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    84\n        label    \"\"\n        graphics\n        [\n            x    1142.22\n            y    765.92\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    85\n        label    \"\"\n        graphics\n        [\n            x    718.39\n            y    795.75\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    86\n        label    \"\"\n        graphics\n        [\n            x    737.86\n            y    622.61\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    87\n        label    \"\"\n        graphics\n        [\n            x    193.94\n            y    243.28\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    88\n        label    \"\"\n        graphics\n        [\n            x    614.21\n            y    277.01\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    89\n        label    \"\"\n        graphics\n        [\n            x    1110.07\n            y    597.44\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    90\n        label    \"\"\n        graphics\n        [\n            x    344.71\n            y    427.34\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    91\n        label    \"\"\n        graphics\n        [\n            x    162.38\n            y    1136.50\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    92\n        label    \"\"\n        graphics\n        [\n            x    1141.67\n            y    526.70\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    93\n        label    \"\"\n        graphics\n        [\n            x    541.87\n            y    781.14\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    94\n        label    \"\"\n        graphics\n        [\n            x    14.07\n            y    74.77\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    95\n        label    \"\"\n        graphics\n        [\n            x    361.34\n            y    1030.82\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    96\n        label    \"\"\n        graphics\n        [\n            x    831.77\n            y    275.26\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    97\n        label    \"\"\n        graphics\n        [\n            x    58.88\n            y    872.56\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    98\n        label    \"\"\n        graphics\n        [\n            x    1143.70\n            y    1167.74\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    99\n        label    \"\"\n        graphics\n        [\n            x    205.05\n            y    1070.98\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    100\n        label    \"\"\n        graphics\n        [\n            x    776.34\n            y    272.18\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    101\n        label    \"\"\n        graphics\n        [\n            x    1108.77\n            y    96.24\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    102\n        label    \"\"\n        graphics\n        [\n            x    1102.36\n            y    434.56\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    103\n        label    \"\"\n        graphics\n        [\n            x    855.51\n            y    265.69\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    104\n        label    \"\"\n        graphics\n        [\n            x    920.72\n            y    796.25\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    105\n        label    \"\"\n        graphics\n        [\n            x    113.81\n            y    345.76\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    106\n        label    \"\"\n        graphics\n        [\n            x    383.33\n            y    18.16\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    107\n        label    \"\"\n        graphics\n        [\n            x    875.82\n            y    645.46\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    108\n        label    \"\"\n        graphics\n        [\n            x    359.23\n            y    192.84\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    109\n        label    \"\"\n        graphics\n        [\n            x    1101.50\n            y    937.84\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    110\n        label    \"\"\n        graphics\n        [\n            x    154.85\n            y    847.79\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    111\n        label    \"\"\n        graphics\n        [\n            x    892.49\n            y    199.28\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    112\n        label    \"\"\n        graphics\n        [\n            x    1063.26\n            y    156.89\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    113\n        label    \"\"\n        graphics\n        [\n            x    910.33\n            y    785.54\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    114\n        label    \"\"\n        graphics\n        [\n            x    688.96\n            y    582.05\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    115\n        label    \"\"\n        graphics\n        [\n            x    793.60\n            y    625.11\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    116\n        label    \"\"\n        graphics\n        [\n            x    1056.81\n            y    1095.99\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    117\n        label    \"\"\n        graphics\n        [\n            x    833.61\n            y    723.04\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    118\n        label    \"\"\n        graphics\n        [\n            x    333.80\n            y    815.91\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    119\n        label    \"\"\n        graphics\n        [\n            x    886.97\n            y    676.39\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    120\n        label    \"\"\n        graphics\n        [\n            x    75.53\n            y    191.90\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    121\n        label    \"\"\n        graphics\n        [\n            x    95.04\n            y    870.07\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    122\n        label    \"\"\n        graphics\n        [\n            x    570.95\n            y    168.29\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    123\n        label    \"\"\n        graphics\n        [\n            x    357.46\n            y    330.43\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    124\n        label    \"\"\n        graphics\n        [\n            x    533.65\n            y    787.83\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    125\n        label    \"\"\n        graphics\n        [\n            x    178.41\n            y    794.55\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    126\n        label    \"\"\n        graphics\n        [\n            x    393.68\n            y    379.80\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    127\n        label    \"\"\n        graphics\n        [\n            x    990.66\n            y    1017.19\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    128\n        label    \"\"\n        graphics\n        [\n            x    941.76\n            y    772.86\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    129\n        label    \"\"\n        graphics\n        [\n            x    403.49\n            y    61.45\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    130\n        label    \"\"\n        graphics\n        [\n            x    1145.81\n            y    686.77\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    131\n        label    \"\"\n        graphics\n        [\n            x    627.34\n            y    17.38\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    132\n        label    \"\"\n        graphics\n        [\n            x    31.39\n            y    997.58\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    133\n        label    \"\"\n        graphics\n        [\n            x    453.84\n            y    161.99\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    134\n        label    \"\"\n        graphics\n        [\n            x    606.97\n            y    546.79\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    135\n        label    \"\"\n        graphics\n        [\n            x    478.04\n            y    1168.86\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    136\n        label    \"\"\n        graphics\n        [\n            x    874.88\n            y    516.00\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    137\n        label    \"\"\n        graphics\n        [\n            x    261.36\n            y    649.95\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    138\n        label    \"\"\n        graphics\n        [\n            x    940.16\n            y    191.48\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    139\n        label    \"\"\n        graphics\n        [\n            x    480.47\n            y    432.97\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    140\n        label    \"\"\n        graphics\n        [\n            x    515.02\n            y    1087.01\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    141\n        label    \"\"\n        graphics\n        [\n            x    986.71\n            y    645.74\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    142\n        label    \"\"\n        graphics\n        [\n            x    812.43\n            y    668.52\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    143\n        label    \"\"\n        graphics\n        [\n            x    252.20\n            y    861.29\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    144\n        label    \"\"\n        graphics\n        [\n            x    520.05\n            y    196.63\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    145\n        label    \"\"\n        graphics\n        [\n            x    803.12\n            y    491.07\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    146\n        label    \"\"\n        graphics\n        [\n            x    1045.85\n            y    668.68\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    147\n        label    \"\"\n        graphics\n        [\n            x    248.73\n            y    846.84\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    148\n        label    \"\"\n        graphics\n        [\n            x    131.73\n            y    687.81\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    149\n        label    \"\"\n        graphics\n        [\n            x    609.18\n            y    345.63\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    150\n        label    \"\"\n        graphics\n        [\n            x    737.16\n            y    811.40\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    151\n        label    \"\"\n        graphics\n        [\n            x    597.41\n            y    535.80\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    152\n        label    \"\"\n        graphics\n        [\n            x    873.41\n            y    314.05\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    153\n        label    \"\"\n        graphics\n        [\n            x    875.09\n            y    785.17\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    154\n        label    \"\"\n        graphics\n        [\n            x    1072.65\n            y    737.99\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    155\n        label    \"\"\n        graphics\n        [\n            x    2.81\n            y    389.81\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    156\n        label    \"\"\n        graphics\n        [\n            x    551.81\n            y    341.82\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    157\n        label    \"\"\n        graphics\n        [\n            x    1128.57\n            y    528.13\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    158\n        label    \"\"\n        graphics\n        [\n            x    1034.25\n            y    4.08\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    159\n        label    \"\"\n        graphics\n        [\n            x    1157.00\n            y    838.16\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    160\n        label    \"\"\n        graphics\n        [\n            x    993.04\n            y    438.41\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    161\n        label    \"\"\n        graphics\n        [\n            x    1027.50\n            y    246.90\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    162\n        label    \"\"\n        graphics\n        [\n            x    1036.09\n            y    457.55\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    163\n        label    \"\"\n        graphics\n        [\n            x    892.96\n            y    100.01\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    164\n        label    \"\"\n        graphics\n        [\n            x    72.38\n            y    898.59\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    165\n        label    \"\"\n        graphics\n        [\n            x    1049.18\n            y    824.80\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    166\n        label    \"\"\n        graphics\n        [\n            x    112.79\n            y    458.72\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    167\n        label    \"\"\n        graphics\n        [\n            x    410.95\n            y    698.93\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    168\n        label    \"\"\n        graphics\n        [\n            x    892.97\n            y    87.30\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    169\n        label    \"\"\n        graphics\n        [\n            x    306.10\n            y    945.58\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    edge\n    [\n        source    1\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    10\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    100\n        target    40\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    101\n        target    41\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    102\n        target    80\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    103\n        target    66\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    104\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    105\n        target    93\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    106\n        target    102\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    107\n        target    47\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    108\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    109\n        target    84\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    11\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    110\n        target    75\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    111\n        target    93\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    112\n        target    86\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    113\n        target    85\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    114\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    115\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    116\n        target    96\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    117\n        target    102\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    118\n        target    65\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    119\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    12\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    120\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    121\n        target    90\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    122\n        target    84\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    123\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    124\n        target    83\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    125\n        target    86\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    126\n        target    96\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    127\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    128\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    129\n        target    112\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    13\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    130\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    131\n        target    28\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    132\n        target    39\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    133\n        target    89\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    134\n        target    79\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    135\n        target    102\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    136\n        target    29\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    137\n        target    106\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    138\n        target    92\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    139\n        target    112\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    14\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    140\n        target    28\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    141\n        target    95\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    142\n        target    116\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    143\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    144\n        target    130\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    145\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    146\n        target    19\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    147\n        target    142\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    148\n        target    103\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    149\n        target    33\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    15\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    150\n        target    69\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    151\n        target    49\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    152\n        target    75\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    153\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    154\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    155\n        target    39\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    156\n        target    36\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    157\n        target    19\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    158\n        target    80\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    159\n        target    130\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    16\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    160\n        target    111\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    161\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    162\n        target    93\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    163\n        target    68\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    164\n        target    152\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    165\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    166\n        target    83\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    167\n        target    165\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    168\n        target    123\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    169\n        target    132\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    17\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    18\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    19\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    2\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    20\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    20\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    21\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    22\n        target    20\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    23\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    24\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    25\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    26\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    27\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    28\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    29\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    3\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    30\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    31\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    32\n        target    24\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    33\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    34\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    35\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    36\n        target    34\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    37\n        target    35\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    38\n        target    34\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    39\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    4\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    40\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    41\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    42\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    43\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    44\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    45\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    46\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    47\n        target    34\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    48\n        target    46\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    49\n        target    29\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    5\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    50\n        target    19\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    51\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    52\n        target    43\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    53\n        target    28\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    54\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    55\n        target    26\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    56\n        target    53\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    57\n        target    40\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    58\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    59\n        target    26\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    6\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    60\n        target    51\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    61\n        target    59\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    62\n        target    60\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    63\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    64\n        target    42\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    65\n        target    57\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    66\n        target    20\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    67\n        target    44\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    68\n        target    66\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    69\n        target    58\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    7\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    70\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    71\n        target    69\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    72\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    73\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    74\n        target    19\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    75\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    76\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    77\n        target    48\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    78\n        target    39\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    79\n        target    44\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    8\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    80\n        target    57\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    81\n        target    30\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    82\n        target    66\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    83\n        target    36\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    84\n        target    50\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    85\n        target    44\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    86\n        target    32\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    87\n        target    57\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    88\n        target    75\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    89\n        target    61\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    9\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    90\n        target    31\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    91\n        target    77\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    92\n        target    28\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    93\n        target    36\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    94\n        target    78\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    95\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    96\n        target    64\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    97\n        target    67\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    98\n        target    25\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    99\n        target    76\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n]\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v170e170.tglf",
    "content": "0 803.000 338.000 30.000 30.000\n1 300.000 612.000 30.000 30.000\n2 282.000 766.000 30.000 30.000\n3 683.000 41.000 30.000 30.000\n4 374.000 743.000 30.000 30.000\n5 1000.000 803.000 30.000 30.000\n6 146.000 903.000 30.000 30.000\n7 1024.000 779.000 30.000 30.000\n8 828.000 897.000 30.000 30.000\n9 1010.000 697.000 30.000 30.000\n10 613.000 862.000 30.000 30.000\n11 135.000 732.000 30.000 30.000\n12 292.000 878.000 30.000 30.000\n13 466.000 188.000 30.000 30.000\n14 267.000 2.000 30.000 30.000\n15 595.000 78.000 30.000 30.000\n16 496.000 937.000 30.000 30.000\n17 665.000 751.000 30.000 30.000\n18 260.000 196.000 30.000 30.000\n19 718.000 1146.000 30.000 30.000\n20 402.000 492.000 30.000 30.000\n21 386.000 1109.000 30.000 30.000\n22 191.000 568.000 30.000 30.000\n23 789.000 782.000 30.000 30.000\n24 65.000 1061.000 30.000 30.000\n25 577.000 1027.000 30.000 30.000\n26 336.000 504.000 30.000 30.000\n27 55.000 690.000 30.000 30.000\n28 211.000 571.000 30.000 30.000\n29 124.000 936.000 30.000 30.000\n30 169.000 523.000 30.000 30.000\n31 1001.000 31.000 30.000 30.000\n32 495.000 790.000 30.000 30.000\n33 513.000 489.000 30.000 30.000\n34 723.000 76.000 30.000 30.000\n35 0.000 1048.000 30.000 30.000\n36 899.000 994.000 30.000 30.000\n37 20.000 514.000 30.000 30.000\n38 940.000 1074.000 30.000 30.000\n39 216.000 1075.000 30.000 30.000\n40 1094.000 692.000 30.000 30.000\n41 518.000 973.000 30.000 30.000\n42 30.000 842.000 30.000 30.000\n43 5.000 83.000 30.000 30.000\n44 1057.000 541.000 30.000 30.000\n45 469.000 1004.000 30.000 30.000\n46 60.000 61.000 30.000 30.000\n47 450.000 913.000 30.000 30.000\n48 20.000 625.000 30.000 30.000\n49 461.000 814.000 30.000 30.000\n50 1129.000 229.000 30.000 30.000\n51 436.000 695.000 30.000 30.000\n52 55.000 254.000 30.000 30.000\n53 451.000 549.000 30.000 30.000\n54 469.000 628.000 30.000 30.000\n55 326.000 174.000 30.000 30.000\n56 814.000 446.000 30.000 30.000\n57 850.000 914.000 30.000 30.000\n58 459.000 1012.000 30.000 30.000\n59 129.000 579.000 30.000 30.000\n60 111.000 1165.000 30.000 30.000\n61 1044.000 169.000 30.000 30.000\n62 187.000 256.000 30.000 30.000\n63 995.000 515.000 30.000 30.000\n64 289.000 1132.000 30.000 30.000\n65 908.000 432.000 30.000 30.000\n66 301.000 947.000 30.000 30.000\n67 974.000 664.000 30.000 30.000\n68 713.000 17.000 30.000 30.000\n69 713.000 716.000 30.000 30.000\n70 642.000 3.000 30.000 30.000\n71 923.000 546.000 30.000 30.000\n72 170.000 889.000 30.000 30.000\n73 74.000 552.000 30.000 30.000\n74 289.000 62.000 30.000 30.000\n75 167.000 481.000 30.000 30.000\n76 241.000 117.000 30.000 30.000\n77 900.000 906.000 30.000 30.000\n78 323.000 1088.000 30.000 30.000\n79 527.000 855.000 30.000 30.000\n80 426.000 564.000 30.000 30.000\n81 901.000 1114.000 30.000 30.000\n82 917.000 192.000 30.000 30.000\n83 294.000 192.000 30.000 30.000\n84 1142.000 765.000 30.000 30.000\n85 718.000 795.000 30.000 30.000\n86 737.000 622.000 30.000 30.000\n87 193.000 243.000 30.000 30.000\n88 614.000 277.000 30.000 30.000\n89 1110.000 597.000 30.000 30.000\n90 344.000 427.000 30.000 30.000\n91 162.000 1136.000 30.000 30.000\n92 1141.000 526.000 30.000 30.000\n93 541.000 781.000 30.000 30.000\n94 14.000 74.000 30.000 30.000\n95 361.000 1030.000 30.000 30.000\n96 831.000 275.000 30.000 30.000\n97 58.000 872.000 30.000 30.000\n98 1143.000 1167.000 30.000 30.000\n99 205.000 1070.000 30.000 30.000\n100 776.000 272.000 30.000 30.000\n101 1108.000 96.000 30.000 30.000\n102 1102.000 434.000 30.000 30.000\n103 855.000 265.000 30.000 30.000\n104 920.000 796.000 30.000 30.000\n105 113.000 345.000 30.000 30.000\n106 383.000 18.000 30.000 30.000\n107 875.000 645.000 30.000 30.000\n108 359.000 192.000 30.000 30.000\n109 1101.000 937.000 30.000 30.000\n110 154.000 847.000 30.000 30.000\n111 892.000 199.000 30.000 30.000\n112 1063.000 156.000 30.000 30.000\n113 910.000 785.000 30.000 30.000\n114 688.000 582.000 30.000 30.000\n115 793.000 625.000 30.000 30.000\n116 1056.000 1095.000 30.000 30.000\n117 833.000 723.000 30.000 30.000\n118 333.000 815.000 30.000 30.000\n119 886.000 676.000 30.000 30.000\n120 75.000 191.000 30.000 30.000\n121 95.000 870.000 30.000 30.000\n122 570.000 168.000 30.000 30.000\n123 357.000 330.000 30.000 30.000\n124 533.000 787.000 30.000 30.000\n125 178.000 794.000 30.000 30.000\n126 393.000 379.000 30.000 30.000\n127 990.000 1017.000 30.000 30.000\n128 941.000 772.000 30.000 30.000\n129 403.000 61.000 30.000 30.000\n130 1145.000 686.000 30.000 30.000\n131 627.000 17.000 30.000 30.000\n132 31.000 997.000 30.000 30.000\n133 453.000 161.000 30.000 30.000\n134 606.000 546.000 30.000 30.000\n135 478.000 1168.000 30.000 30.000\n136 874.000 516.000 30.000 30.000\n137 261.000 649.000 30.000 30.000\n138 940.000 191.000 30.000 30.000\n139 480.000 432.000 30.000 30.000\n140 515.000 1087.000 30.000 30.000\n141 986.000 645.000 30.000 30.000\n142 812.000 668.000 30.000 30.000\n143 252.000 861.000 30.000 30.000\n144 520.000 196.000 30.000 30.000\n145 803.000 491.000 30.000 30.000\n146 1045.000 668.000 30.000 30.000\n147 248.000 846.000 30.000 30.000\n148 131.000 687.000 30.000 30.000\n149 609.000 345.000 30.000 30.000\n150 737.000 811.000 30.000 30.000\n151 597.000 535.000 30.000 30.000\n152 873.000 314.000 30.000 30.000\n153 875.000 785.000 30.000 30.000\n154 1072.000 737.000 30.000 30.000\n155 2.000 389.000 30.000 30.000\n156 551.000 341.000 30.000 30.000\n157 1128.000 528.000 30.000 30.000\n158 1034.000 4.000 30.000 30.000\n159 1157.000 838.000 30.000 30.000\n160 993.000 438.000 30.000 30.000\n161 1027.000 246.000 30.000 30.000\n162 1036.000 457.000 30.000 30.000\n163 892.000 100.000 30.000 30.000\n164 72.000 898.000 30.000 30.000\n165 1049.000 824.000 30.000 30.000\n166 112.000 458.000 30.000 30.000\n167 410.000 698.000 30.000 30.000\n168 892.000 87.000 30.000 30.000\n169 306.000 945.000 30.000 30.000\n#\n3 0\n97 67\n78 39\n93 36\n12 6\n106 102\n27 13\n103 66\n138 92\n79 44\n32 24\n36 34\n26 23\n82 66\n46 16\n152 75\n81 30\n5 0\n149 33\n48 46\n144 130\n42 7\n145 12\n107 47\n10 4\n50 19\n47 34\n116 96\n65 57\n28 21\n96 64\n80 57\n95 16\n55 26\n164 152\n68 66\n15 0\n154 18\n22 20\n58 1\n127 21\n122 84\n40 9\n72 15\n8 3\n166 83\n117 102\n45 4\n113 85\n100 40\n163 68\n16 15\n9 1\n19 4\n160 111\n155 39\n21 4\n73 9\n139 112\n132 39\n35 0\n52 43\n167 165\n43 1\n4 2\n1 0\n44 6\n14 9\n125 86\n77 48\n7 2\n57 40\n169 132\n59 26\n157 19\n64 42\n101 41\n156 36\n102 80\n121 90\n83 36\n151 49\n153 6\n136 29\n74 19\n25 8\n84 50\n6 0\n147 142\n94 78\n110 75\n109 84\n11 2\n69 58\n41 17\n161 21\n115 17\n20 10\n118 65\n143 0\n111 93\n75 22\n137 106\n142 116\n76 13\n24 22\n158 80\n51 16\n54 1\n128 21\n141 95\n168 123\n105 93\n159 130\n98 25\n61 59\n56 53\n53 28\n33 5\n140 28\n99 76\n39 21\n30 14\n63 1\n66 20\n18 2\n60 51\n104 10\n135 102\n49 29\n133 89\n71 69\n20 18\n92 28\n29 5\n91 77\n114 23\n134 79\n23 10\n90 31\n67 44\n124 83\n162 93\n120 8\n165 11\n146 19\n17 13\n89 61\n112 86\n70 21\n119 5\n85 44\n148 103\n13 11\n123 17\n126 96\n108 0\n2 0\n86 32\n131 28\n34 15\n88 75\n129 112\n87 57\n37 35\n38 34\n150 69\n31 0\n62 60\n130 3\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v170e187.gml",
    "content": "graph\n[\n    node\n    [\n        id    0\n        label    \"\"\n        graphics\n        [\n            x    9.53\n            y    523.90\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    1\n        label    \"\"\n        graphics\n        [\n            x    312.19\n            y    333.97\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    2\n        label    \"\"\n        graphics\n        [\n            x    168.46\n            y    883.19\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    3\n        label    \"\"\n        graphics\n        [\n            x    502.02\n            y    410.64\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    4\n        label    \"\"\n        graphics\n        [\n            x    1115.87\n            y    869.43\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    5\n        label    \"\"\n        graphics\n        [\n            x    336.49\n            y    763.23\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    6\n        label    \"\"\n        graphics\n        [\n            x    209.93\n            y    554.80\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    7\n        label    \"\"\n        graphics\n        [\n            x    144.73\n            y    1125.22\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    8\n        label    \"\"\n        graphics\n        [\n            x    92.46\n            y    1158.18\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    9\n        label    \"\"\n        graphics\n        [\n            x    189.75\n            y    244.37\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    10\n        label    \"\"\n        graphics\n        [\n            x    1030.63\n            y    942.68\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    11\n        label    \"\"\n        graphics\n        [\n            x    245.56\n            y    1059.33\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    12\n        label    \"\"\n        graphics\n        [\n            x    719.49\n            y    80.85\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    13\n        label    \"\"\n        graphics\n        [\n            x    524.99\n            y    220.38\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    14\n        label    \"\"\n        graphics\n        [\n            x    889.22\n            y    530.21\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    15\n        label    \"\"\n        graphics\n        [\n            x    241.28\n            y    28.99\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    16\n        label    \"\"\n        graphics\n        [\n            x    449.50\n            y    39.19\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    17\n        label    \"\"\n        graphics\n        [\n            x    26.18\n            y    1032.84\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    18\n        label    \"\"\n        graphics\n        [\n            x    145.24\n            y    75.28\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    19\n        label    \"\"\n        graphics\n        [\n            x    916.08\n            y    776.58\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    20\n        label    \"\"\n        graphics\n        [\n            x    490.90\n            y    297.99\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    21\n        label    \"\"\n        graphics\n        [\n            x    985.33\n            y    10.80\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    22\n        label    \"\"\n        graphics\n        [\n            x    1157.31\n            y    1164.27\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    23\n        label    \"\"\n        graphics\n        [\n            x    227.81\n            y    500.72\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    24\n        label    \"\"\n        graphics\n        [\n            x    634.15\n            y    820.63\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    25\n        label    \"\"\n        graphics\n        [\n            x    12.18\n            y    220.67\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    26\n        label    \"\"\n        graphics\n        [\n            x    516.86\n            y    496.36\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    27\n        label    \"\"\n        graphics\n        [\n            x    285.54\n            y    128.41\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    28\n        label    \"\"\n        graphics\n        [\n            x    1064.61\n            y    269.14\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    29\n        label    \"\"\n        graphics\n        [\n            x    1153.10\n            y    430.52\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    30\n        label    \"\"\n        graphics\n        [\n            x    109.28\n            y    55.96\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    31\n        label    \"\"\n        graphics\n        [\n            x    979.14\n            y    936.85\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    32\n        label    \"\"\n        graphics\n        [\n            x    425.53\n            y    658.03\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    33\n        label    \"\"\n        graphics\n        [\n            x    486.19\n            y    1034.96\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    34\n        label    \"\"\n        graphics\n        [\n            x    494.01\n            y    231.00\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    35\n        label    \"\"\n        graphics\n        [\n            x    1085.13\n            y    168.58\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    36\n        label    \"\"\n        graphics\n        [\n            x    152.37\n            y    734.56\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    37\n        label    \"\"\n        graphics\n        [\n            x    471.46\n            y    348.53\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    38\n        label    \"\"\n        graphics\n        [\n            x    783.04\n            y    78.62\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    39\n        label    \"\"\n        graphics\n        [\n            x    792.00\n            y    294.01\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    40\n        label    \"\"\n        graphics\n        [\n            x    238.57\n            y    285.97\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    41\n        label    \"\"\n        graphics\n        [\n            x    67.36\n            y    921.71\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    42\n        label    \"\"\n        graphics\n        [\n            x    1106.77\n            y    584.67\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    43\n        label    \"\"\n        graphics\n        [\n            x    1000.93\n            y    384.24\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    44\n        label    \"\"\n        graphics\n        [\n            x    391.05\n            y    1018.37\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    45\n        label    \"\"\n        graphics\n        [\n            x    179.39\n            y    1017.06\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    46\n        label    \"\"\n        graphics\n        [\n            x    855.48\n            y    485.34\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    47\n        label    \"\"\n        graphics\n        [\n            x    159.48\n            y    619.04\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    48\n        label    \"\"\n        graphics\n        [\n            x    263.12\n            y    954.04\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    49\n        label    \"\"\n        graphics\n        [\n            x    819.63\n            y    983.12\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    50\n        label    \"\"\n        graphics\n        [\n            x    199.14\n            y    141.21\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    51\n        label    \"\"\n        graphics\n        [\n            x    158.94\n            y    272.72\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    52\n        label    \"\"\n        graphics\n        [\n            x    992.18\n            y    782.52\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    53\n        label    \"\"\n        graphics\n        [\n            x    141.98\n            y    1015.34\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    54\n        label    \"\"\n        graphics\n        [\n            x    330.12\n            y    1044.15\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    55\n        label    \"\"\n        graphics\n        [\n            x    823.13\n            y    1088.92\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    56\n        label    \"\"\n        graphics\n        [\n            x    64.76\n            y    1148.55\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    57\n        label    \"\"\n        graphics\n        [\n            x    348.41\n            y    1095.08\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    58\n        label    \"\"\n        graphics\n        [\n            x    475.43\n            y    318.48\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    59\n        label    \"\"\n        graphics\n        [\n            x    925.59\n            y    1157.66\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    60\n        label    \"\"\n        graphics\n        [\n            x    917.99\n            y    342.55\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    61\n        label    \"\"\n        graphics\n        [\n            x    1077.89\n            y    577.40\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    62\n        label    \"\"\n        graphics\n        [\n            x    1165.47\n            y    202.13\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    63\n        label    \"\"\n        graphics\n        [\n            x    1051.08\n            y    974.68\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    64\n        label    \"\"\n        graphics\n        [\n            x    461.58\n            y    269.61\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    65\n        label    \"\"\n        graphics\n        [\n            x    903.00\n            y    285.65\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    66\n        label    \"\"\n        graphics\n        [\n            x    521.72\n            y    324.35\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    67\n        label    \"\"\n        graphics\n        [\n            x    499.93\n            y    504.96\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    68\n        label    \"\"\n        graphics\n        [\n            x    519.59\n            y    440.17\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    69\n        label    \"\"\n        graphics\n        [\n            x    446.94\n            y    545.91\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    70\n        label    \"\"\n        graphics\n        [\n            x    471.38\n            y    20.29\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    71\n        label    \"\"\n        graphics\n        [\n            x    752.95\n            y    688.95\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    72\n        label    \"\"\n        graphics\n        [\n            x    643.19\n            y    1158.66\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    73\n        label    \"\"\n        graphics\n        [\n            x    1158.88\n            y    791.20\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    74\n        label    \"\"\n        graphics\n        [\n            x    821.71\n            y    477.17\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    75\n        label    \"\"\n        graphics\n        [\n            x    402.65\n            y    72.09\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    76\n        label    \"\"\n        graphics\n        [\n            x    181.89\n            y    614.72\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    77\n        label    \"\"\n        graphics\n        [\n            x    117.13\n            y    988.87\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    78\n        label    \"\"\n        graphics\n        [\n            x    377.31\n            y    690.67\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    79\n        label    \"\"\n        graphics\n        [\n            x    504.51\n            y    369.68\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    80\n        label    \"\"\n        graphics\n        [\n            x    84.36\n            y    526.27\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    81\n        label    \"\"\n        graphics\n        [\n            x    794.06\n            y    789.69\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    82\n        label    \"\"\n        graphics\n        [\n            x    152.13\n            y    1039.04\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    83\n        label    \"\"\n        graphics\n        [\n            x    960.07\n            y    1114.59\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    84\n        label    \"\"\n        graphics\n        [\n            x    828.41\n            y    602.00\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    85\n        label    \"\"\n        graphics\n        [\n            x    101.29\n            y    504.49\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    86\n        label    \"\"\n        graphics\n        [\n            x    361.60\n            y    432.59\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    87\n        label    \"\"\n        graphics\n        [\n            x    997.34\n            y    94.71\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    88\n        label    \"\"\n        graphics\n        [\n            x    685.68\n            y    163.20\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    89\n        label    \"\"\n        graphics\n        [\n            x    859.63\n            y    143.73\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    90\n        label    \"\"\n        graphics\n        [\n            x    89.34\n            y    1135.13\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    91\n        label    \"\"\n        graphics\n        [\n            x    1053.37\n            y    248.63\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    92\n        label    \"\"\n        graphics\n        [\n            x    535.60\n            y    581.70\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    93\n        label    \"\"\n        graphics\n        [\n            x    499.03\n            y    862.73\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    94\n        label    \"\"\n        graphics\n        [\n            x    451.68\n            y    434.63\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    95\n        label    \"\"\n        graphics\n        [\n            x    437.35\n            y    384.62\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    96\n        label    \"\"\n        graphics\n        [\n            x    483.19\n            y    931.95\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    97\n        label    \"\"\n        graphics\n        [\n            x    663.20\n            y    1069.00\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    98\n        label    \"\"\n        graphics\n        [\n            x    166.93\n            y    101.67\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    99\n        label    \"\"\n        graphics\n        [\n            x    244.13\n            y    280.51\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    100\n        label    \"\"\n        graphics\n        [\n            x    778.88\n            y    52.05\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    101\n        label    \"\"\n        graphics\n        [\n            x    332.68\n            y    226.17\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    102\n        label    \"\"\n        graphics\n        [\n            x    917.73\n            y    990.74\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    103\n        label    \"\"\n        graphics\n        [\n            x    545.57\n            y    71.10\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    104\n        label    \"\"\n        graphics\n        [\n            x    147.77\n            y    1086.50\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    105\n        label    \"\"\n        graphics\n        [\n            x    176.15\n            y    1060.76\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    106\n        label    \"\"\n        graphics\n        [\n            x    136.95\n            y    606.85\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    107\n        label    \"\"\n        graphics\n        [\n            x    913.18\n            y    662.76\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    108\n        label    \"\"\n        graphics\n        [\n            x    969.98\n            y    86.42\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    109\n        label    \"\"\n        graphics\n        [\n            x    907.45\n            y    1132.59\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    110\n        label    \"\"\n        graphics\n        [\n            x    193.50\n            y    747.28\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    111\n        label    \"\"\n        graphics\n        [\n            x    940.96\n            y    64.76\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    112\n        label    \"\"\n        graphics\n        [\n            x    842.26\n            y    551.14\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    113\n        label    \"\"\n        graphics\n        [\n            x    169.92\n            y    665.96\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    114\n        label    \"\"\n        graphics\n        [\n            x    689.68\n            y    762.08\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    115\n        label    \"\"\n        graphics\n        [\n            x    214.52\n            y    844.09\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    116\n        label    \"\"\n        graphics\n        [\n            x    840.84\n            y    1133.48\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    117\n        label    \"\"\n        graphics\n        [\n            x    1165.11\n            y    485.08\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    118\n        label    \"\"\n        graphics\n        [\n            x    412.02\n            y    422.95\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    119\n        label    \"\"\n        graphics\n        [\n            x    648.33\n            y    1044.23\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    120\n        label    \"\"\n        graphics\n        [\n            x    173.13\n            y    102.58\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    121\n        label    \"\"\n        graphics\n        [\n            x    445.58\n            y    727.06\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    122\n        label    \"\"\n        graphics\n        [\n            x    423.13\n            y    1000.82\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    123\n        label    \"\"\n        graphics\n        [\n            x    621.77\n            y    180.84\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    124\n        label    \"\"\n        graphics\n        [\n            x    276.50\n            y    539.01\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    125\n        label    \"\"\n        graphics\n        [\n            x    1085.53\n            y    896.60\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    126\n        label    \"\"\n        graphics\n        [\n            x    545.80\n            y    485.01\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    127\n        label    \"\"\n        graphics\n        [\n            x    180.04\n            y    629.08\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    128\n        label    \"\"\n        graphics\n        [\n            x    747.91\n            y    670.76\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    129\n        label    \"\"\n        graphics\n        [\n            x    112.39\n            y    1036.71\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    130\n        label    \"\"\n        graphics\n        [\n            x    479.58\n            y    423.57\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    131\n        label    \"\"\n        graphics\n        [\n            x    423.21\n            y    849.97\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    132\n        label    \"\"\n        graphics\n        [\n            x    569.09\n            y    203.37\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    133\n        label    \"\"\n        graphics\n        [\n            x    50.73\n            y    818.16\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    134\n        label    \"\"\n        graphics\n        [\n            x    1156.25\n            y    484.82\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    135\n        label    \"\"\n        graphics\n        [\n            x    450.77\n            y    279.25\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    136\n        label    \"\"\n        graphics\n        [\n            x    793.20\n            y    1057.90\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    137\n        label    \"\"\n        graphics\n        [\n            x    678.34\n            y    563.51\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    138\n        label    \"\"\n        graphics\n        [\n            x    861.44\n            y    993.68\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    139\n        label    \"\"\n        graphics\n        [\n            x    112.48\n            y    1152.88\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    140\n        label    \"\"\n        graphics\n        [\n            x    603.83\n            y    13.05\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    141\n        label    \"\"\n        graphics\n        [\n            x    665.92\n            y    266.79\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    142\n        label    \"\"\n        graphics\n        [\n            x    172.10\n            y    346.73\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    143\n        label    \"\"\n        graphics\n        [\n            x    326.41\n            y    231.73\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    144\n        label    \"\"\n        graphics\n        [\n            x    300.03\n            y    32.57\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    145\n        label    \"\"\n        graphics\n        [\n            x    916.84\n            y    914.70\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    146\n        label    \"\"\n        graphics\n        [\n            x    69.76\n            y    265.02\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    147\n        label    \"\"\n        graphics\n        [\n            x    285.97\n            y    889.20\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    148\n        label    \"\"\n        graphics\n        [\n            x    661.44\n            y    199.21\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    149\n        label    \"\"\n        graphics\n        [\n            x    587.24\n            y    683.57\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    150\n        label    \"\"\n        graphics\n        [\n            x    301.57\n            y    430.31\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    151\n        label    \"\"\n        graphics\n        [\n            x    1055.85\n            y    468.39\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    152\n        label    \"\"\n        graphics\n        [\n            x    988.78\n            y    268.26\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    153\n        label    \"\"\n        graphics\n        [\n            x    228.08\n            y    83.53\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    154\n        label    \"\"\n        graphics\n        [\n            x    1075.20\n            y    885.80\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    155\n        label    \"\"\n        graphics\n        [\n            x    468.10\n            y    1091.28\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    156\n        label    \"\"\n        graphics\n        [\n            x    692.70\n            y    495.54\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    157\n        label    \"\"\n        graphics\n        [\n            x    399.21\n            y    151.26\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    158\n        label    \"\"\n        graphics\n        [\n            x    39.66\n            y    805.94\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    159\n        label    \"\"\n        graphics\n        [\n            x    447.17\n            y    184.35\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    160\n        label    \"\"\n        graphics\n        [\n            x    1019.19\n            y    318.20\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    161\n        label    \"\"\n        graphics\n        [\n            x    529.74\n            y    247.92\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    162\n        label    \"\"\n        graphics\n        [\n            x    1060.52\n            y    311.26\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    163\n        label    \"\"\n        graphics\n        [\n            x    994.59\n            y    617.42\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    164\n        label    \"\"\n        graphics\n        [\n            x    526.60\n            y    51.66\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    165\n        label    \"\"\n        graphics\n        [\n            x    700.42\n            y    808.65\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    166\n        label    \"\"\n        graphics\n        [\n            x    676.46\n            y    141.63\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    167\n        label    \"\"\n        graphics\n        [\n            x    12.63\n            y    112.35\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    168\n        label    \"\"\n        graphics\n        [\n            x    819.77\n            y    1016.08\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    169\n        label    \"\"\n        graphics\n        [\n            x    279.22\n            y    354.45\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    edge\n    [\n        source    1\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    10\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    10\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    100\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    101\n        target    64\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    102\n        target    19\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    103\n        target    157\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    103\n        target    82\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    104\n        target    160\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    104\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    105\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    106\n        target    47\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    107\n        target    97\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    108\n        target    65\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    109\n        target    166\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    109\n        target    64\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    11\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    110\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    111\n        target    32\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    112\n        target    105\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    113\n        target    90\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    114\n        target    30\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    115\n        target    62\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    116\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    117\n        target    71\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    118\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    119\n        target    109\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    119\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    12\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    120\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    121\n        target    100\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    122\n        target    93\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    123\n        target    39\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    124\n        target    145\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    124\n        target    40\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    124\n        target    85\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    125\n        target    73\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    126\n        target    43\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    127\n        target    120\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    127\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    128\n        target    75\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    129\n        target    92\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    13\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    130\n        target    105\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    131\n        target    120\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    132\n        target    89\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    133\n        target    70\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    134\n        target    43\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    135\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    136\n        target    71\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    137\n        target    80\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    138\n        target    62\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    139\n        target    29\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    14\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    140\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    141\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    142\n        target    125\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    143\n        target    31\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    144\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    145\n        target    56\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    146\n        target    88\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    147\n        target    61\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    148\n        target    52\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    149\n        target    114\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    15\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    150\n        target    144\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    151\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    152\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    153\n        target    26\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    154\n        target    117\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    155\n        target    116\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    156\n        target    89\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    157\n        target    40\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    158\n        target    61\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    159\n        target    131\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    159\n        target    54\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    16\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    160\n        target    78\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    161\n        target    54\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    162\n        target    135\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    163\n        target    156\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    164\n        target    108\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    164\n        target    65\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    165\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    166\n        target    78\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    167\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    168\n        target    100\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    169\n        target    150\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    17\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    18\n        target    116\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    18\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    19\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    2\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    20\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    21\n        target    19\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    22\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    23\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    24\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    25\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    26\n        target    24\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    26\n        target    62\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    27\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    28\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    29\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    3\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    30\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    31\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    32\n        target    31\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    33\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    34\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    35\n        target    30\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    36\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    37\n        target    24\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    38\n        target    35\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    39\n        target    29\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    4\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    40\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    41\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    42\n        target    29\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    43\n        target    25\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    44\n        target    19\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    45\n        target    34\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    46\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    47\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    48\n        target    44\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    49\n        target    32\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    5\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    50\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    51\n        target    32\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    52\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    53\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    54\n        target    31\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    54\n        target    40\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    55\n        target    52\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    56\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    57\n        target    56\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    58\n        target    44\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    59\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    6\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    60\n        target    46\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    61\n        target    56\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    62\n        target    46\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    63\n        target    32\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    64\n        target    34\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    65\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    66\n        target    162\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    66\n        target    42\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    67\n        target    41\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    68\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    69\n        target    46\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    7\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    70\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    71\n        target    35\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    72\n        target    32\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    73\n        target    71\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    74\n        target    45\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    75\n        target    66\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    76\n        target    24\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    77\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    78\n        target    67\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    79\n        target    67\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    8\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    80\n        target    54\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    81\n        target    40\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    82\n        target    62\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    83\n        target    49\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    84\n        target    32\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    85\n        target    106\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    85\n        target    134\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    85\n        target    48\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    86\n        target    78\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    87\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    88\n        target    31\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    89\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    9\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    90\n        target    20\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    91\n        target    38\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    92\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    93\n        target    57\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    94\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    95\n        target    57\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    95\n        target    68\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    96\n        target    32\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    97\n        target    153\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    97\n        target    25\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    98\n        target    60\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    99\n        target    46\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n]\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v170e187.tglf",
    "content": "0 9.000 523.000 30.000 30.000\n1 312.000 333.000 30.000 30.000\n2 168.000 883.000 30.000 30.000\n3 502.000 410.000 30.000 30.000\n4 1115.000 869.000 30.000 30.000\n5 336.000 763.000 30.000 30.000\n6 209.000 554.000 30.000 30.000\n7 144.000 1125.000 30.000 30.000\n8 92.000 1158.000 30.000 30.000\n9 189.000 244.000 30.000 30.000\n10 1030.000 942.000 30.000 30.000\n11 245.000 1059.000 30.000 30.000\n12 719.000 80.000 30.000 30.000\n13 524.000 220.000 30.000 30.000\n14 889.000 530.000 30.000 30.000\n15 241.000 28.000 30.000 30.000\n16 449.000 39.000 30.000 30.000\n17 26.000 1032.000 30.000 30.000\n18 145.000 75.000 30.000 30.000\n19 916.000 776.000 30.000 30.000\n20 490.000 297.000 30.000 30.000\n21 985.000 10.000 30.000 30.000\n22 1157.000 1164.000 30.000 30.000\n23 227.000 500.000 30.000 30.000\n24 634.000 820.000 30.000 30.000\n25 12.000 220.000 30.000 30.000\n26 516.000 496.000 30.000 30.000\n27 285.000 128.000 30.000 30.000\n28 1064.000 269.000 30.000 30.000\n29 1153.000 430.000 30.000 30.000\n30 109.000 55.000 30.000 30.000\n31 979.000 936.000 30.000 30.000\n32 425.000 658.000 30.000 30.000\n33 486.000 1034.000 30.000 30.000\n34 494.000 231.000 30.000 30.000\n35 1085.000 168.000 30.000 30.000\n36 152.000 734.000 30.000 30.000\n37 471.000 348.000 30.000 30.000\n38 783.000 78.000 30.000 30.000\n39 792.000 294.000 30.000 30.000\n40 238.000 285.000 30.000 30.000\n41 67.000 921.000 30.000 30.000\n42 1106.000 584.000 30.000 30.000\n43 1000.000 384.000 30.000 30.000\n44 391.000 1018.000 30.000 30.000\n45 179.000 1017.000 30.000 30.000\n46 855.000 485.000 30.000 30.000\n47 159.000 619.000 30.000 30.000\n48 263.000 954.000 30.000 30.000\n49 819.000 983.000 30.000 30.000\n50 199.000 141.000 30.000 30.000\n51 158.000 272.000 30.000 30.000\n52 992.000 782.000 30.000 30.000\n53 141.000 1015.000 30.000 30.000\n54 330.000 1044.000 30.000 30.000\n55 823.000 1088.000 30.000 30.000\n56 64.000 1148.000 30.000 30.000\n57 348.000 1095.000 30.000 30.000\n58 475.000 318.000 30.000 30.000\n59 925.000 1157.000 30.000 30.000\n60 917.000 342.000 30.000 30.000\n61 1077.000 577.000 30.000 30.000\n62 1165.000 202.000 30.000 30.000\n63 1051.000 974.000 30.000 30.000\n64 461.000 269.000 30.000 30.000\n65 903.000 285.000 30.000 30.000\n66 521.000 324.000 30.000 30.000\n67 499.000 504.000 30.000 30.000\n68 519.000 440.000 30.000 30.000\n69 446.000 545.000 30.000 30.000\n70 471.000 20.000 30.000 30.000\n71 752.000 688.000 30.000 30.000\n72 643.000 1158.000 30.000 30.000\n73 1158.000 791.000 30.000 30.000\n74 821.000 477.000 30.000 30.000\n75 402.000 72.000 30.000 30.000\n76 181.000 614.000 30.000 30.000\n77 117.000 988.000 30.000 30.000\n78 377.000 690.000 30.000 30.000\n79 504.000 369.000 30.000 30.000\n80 84.000 526.000 30.000 30.000\n81 794.000 789.000 30.000 30.000\n82 152.000 1039.000 30.000 30.000\n83 960.000 1114.000 30.000 30.000\n84 828.000 602.000 30.000 30.000\n85 101.000 504.000 30.000 30.000\n86 361.000 432.000 30.000 30.000\n87 997.000 94.000 30.000 30.000\n88 685.000 163.000 30.000 30.000\n89 859.000 143.000 30.000 30.000\n90 89.000 1135.000 30.000 30.000\n91 1053.000 248.000 30.000 30.000\n92 535.000 581.000 30.000 30.000\n93 499.000 862.000 30.000 30.000\n94 451.000 434.000 30.000 30.000\n95 437.000 384.000 30.000 30.000\n96 483.000 931.000 30.000 30.000\n97 663.000 1069.000 30.000 30.000\n98 166.000 101.000 30.000 30.000\n99 244.000 280.000 30.000 30.000\n100 778.000 52.000 30.000 30.000\n101 332.000 226.000 30.000 30.000\n102 917.000 990.000 30.000 30.000\n103 545.000 71.000 30.000 30.000\n104 147.000 1086.000 30.000 30.000\n105 176.000 1060.000 30.000 30.000\n106 136.000 606.000 30.000 30.000\n107 913.000 662.000 30.000 30.000\n108 969.000 86.000 30.000 30.000\n109 907.000 1132.000 30.000 30.000\n110 193.000 747.000 30.000 30.000\n111 940.000 64.000 30.000 30.000\n112 842.000 551.000 30.000 30.000\n113 169.000 665.000 30.000 30.000\n114 689.000 762.000 30.000 30.000\n115 214.000 844.000 30.000 30.000\n116 840.000 1133.000 30.000 30.000\n117 1165.000 485.000 30.000 30.000\n118 412.000 422.000 30.000 30.000\n119 648.000 1044.000 30.000 30.000\n120 173.000 102.000 30.000 30.000\n121 445.000 727.000 30.000 30.000\n122 423.000 1000.000 30.000 30.000\n123 621.000 180.000 30.000 30.000\n124 276.000 539.000 30.000 30.000\n125 1085.000 896.000 30.000 30.000\n126 545.000 485.000 30.000 30.000\n127 180.000 629.000 30.000 30.000\n128 747.000 670.000 30.000 30.000\n129 112.000 1036.000 30.000 30.000\n130 479.000 423.000 30.000 30.000\n131 423.000 849.000 30.000 30.000\n132 569.000 203.000 30.000 30.000\n133 50.000 818.000 30.000 30.000\n134 1156.000 484.000 30.000 30.000\n135 450.000 279.000 30.000 30.000\n136 793.000 1057.000 30.000 30.000\n137 678.000 563.000 30.000 30.000\n138 861.000 993.000 30.000 30.000\n139 112.000 1152.000 30.000 30.000\n140 603.000 13.000 30.000 30.000\n141 665.000 266.000 30.000 30.000\n142 172.000 346.000 30.000 30.000\n143 326.000 231.000 30.000 30.000\n144 300.000 32.000 30.000 30.000\n145 916.000 914.000 30.000 30.000\n146 69.000 265.000 30.000 30.000\n147 285.000 889.000 30.000 30.000\n148 661.000 199.000 30.000 30.000\n149 587.000 683.000 30.000 30.000\n150 301.000 430.000 30.000 30.000\n151 1055.000 468.000 30.000 30.000\n152 988.000 268.000 30.000 30.000\n153 228.000 83.000 30.000 30.000\n154 1075.000 885.000 30.000 30.000\n155 468.000 1091.000 30.000 30.000\n156 692.000 495.000 30.000 30.000\n157 399.000 151.000 30.000 30.000\n158 39.000 805.000 30.000 30.000\n159 447.000 184.000 30.000 30.000\n160 1019.000 318.000 30.000 30.000\n161 529.000 247.000 30.000 30.000\n162 1060.000 311.000 30.000 30.000\n163 994.000 617.000 30.000 30.000\n164 526.000 51.000 30.000 30.000\n165 700.000 808.000 30.000 30.000\n166 676.000 141.000 30.000 30.000\n167 12.000 112.000 30.000 30.000\n168 819.000 1016.000 30.000 30.000\n169 279.000 354.000 30.000 30.000\n#\n107 97\n31 14\n113 90\n95 57\n41 8\n111 32\n40 13\n163 156\n114 30\n32 31\n160 78\n124 145\n70 7\n104 160\n123 39\n129 92\n146 88\n103 82\n151 0\n15 1\n93 57\n155 116\n102 19\n153 26\n14 5\n26 24\n152 21\n75 66\n115 62\n121 100\n86 78\n61 56\n36 17\n57 56\n148 52\n89 13\n164 108\n39 29\n105 23\n94 1\n98 60\n62 46\n168 100\n13 2\n99 46\n134 43\n97 25\n27 6\n21 19\n28 22\n46 8\n87 17\n52 22\n169 150\n149 114\n26 62\n128 75\n66 162\n90 20\n42 29\n103 157\n150 144\n45 34\n136 71\n165 13\n106 47\n85 106\n76 24\n24 16\n43 25\n167 23\n95 68\n88 31\n161 54\n73 71\n74 45\n159 54\n157 40\n4 0\n80 54\n10 4\n118 23\n18 13\n19 8\n71 35\n69 46\n30 7\n44 19\n108 65\n7 1\n56 18\n68 10\n20 15\n144 14\n48 44\n127 2\n158 61\n2 0\n53 13\n143 31\n82 62\n81 40\n112 105\n35 30\n50 13\n117 71\n119 109\n131 120\n23 5\n37 24\n83 49\n58 44\n17 0\n147 61\n132 89\n96 32\n78 67\n166 78\n51 32\n101 64\n164 65\n145 56\n109 64\n126 43\n47 4\n110 21\n127 120\n84 32\n85 48\n63 32\n29 5\n133 70\n141 17\n6 1\n142 125\n137 80\n92 22\n124 40\n140 22\n122 93\n59 18\n54 31\n109 166\n1 0\n64 34\n54 40\n139 29\n100 0\n3 0\n130 105\n66 42\n55 52\n97 153\n125 73\n38 35\n72 32\n120 15\n49 32\n116 14\n79 67\n22 15\n8 7\n9 0\n162 135\n91 38\n16 6\n156 89\n154 117\n138 62\n124 85\n135 18\n119 14\n67 41\n34 10\n11 1\n60 46\n25 13\n104 4\n18 116\n5 4\n77 23\n159 131\n10 13\n33 22\n85 134\n12 10\n65 17\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v170e204.gml",
    "content": "graph\n[\n    node\n    [\n        id    0\n        label    \"\"\n        graphics\n        [\n            x    1071.07\n            y    304.11\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    1\n        label    \"\"\n        graphics\n        [\n            x    1098.11\n            y    1073.67\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    2\n        label    \"\"\n        graphics\n        [\n            x    316.94\n            y    770.25\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    3\n        label    \"\"\n        graphics\n        [\n            x    574.90\n            y    354.53\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    4\n        label    \"\"\n        graphics\n        [\n            x    869.39\n            y    1116.75\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    5\n        label    \"\"\n        graphics\n        [\n            x    1061.00\n            y    664.59\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    6\n        label    \"\"\n        graphics\n        [\n            x    1119.81\n            y    685.48\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    7\n        label    \"\"\n        graphics\n        [\n            x    496.77\n            y    528.63\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    8\n        label    \"\"\n        graphics\n        [\n            x    1166.92\n            y    50.10\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    9\n        label    \"\"\n        graphics\n        [\n            x    437.76\n            y    635.04\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    10\n        label    \"\"\n        graphics\n        [\n            x    248.56\n            y    678.38\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    11\n        label    \"\"\n        graphics\n        [\n            x    1042.92\n            y    522.63\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    12\n        label    \"\"\n        graphics\n        [\n            x    1084.03\n            y    1010.27\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    13\n        label    \"\"\n        graphics\n        [\n            x    730.05\n            y    1133.72\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    14\n        label    \"\"\n        graphics\n        [\n            x    705.39\n            y    356.88\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    15\n        label    \"\"\n        graphics\n        [\n            x    1030.29\n            y    1117.06\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    16\n        label    \"\"\n        graphics\n        [\n            x    666.46\n            y    868.82\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    17\n        label    \"\"\n        graphics\n        [\n            x    237.23\n            y    919.60\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    18\n        label    \"\"\n        graphics\n        [\n            x    319.97\n            y    257.81\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    19\n        label    \"\"\n        graphics\n        [\n            x    95.15\n            y    1065.53\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    20\n        label    \"\"\n        graphics\n        [\n            x    708.21\n            y    864.92\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    21\n        label    \"\"\n        graphics\n        [\n            x    354.53\n            y    721.78\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    22\n        label    \"\"\n        graphics\n        [\n            x    1029.51\n            y    509.84\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    23\n        label    \"\"\n        graphics\n        [\n            x    1058.95\n            y    1049.18\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    24\n        label    \"\"\n        graphics\n        [\n            x    109.81\n            y    609.55\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    25\n        label    \"\"\n        graphics\n        [\n            x    436.91\n            y    351.59\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    26\n        label    \"\"\n        graphics\n        [\n            x    74.65\n            y    503.26\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    27\n        label    \"\"\n        graphics\n        [\n            x    879.03\n            y    7.10\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    28\n        label    \"\"\n        graphics\n        [\n            x    121.37\n            y    87.88\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    29\n        label    \"\"\n        graphics\n        [\n            x    242.85\n            y    736.35\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    30\n        label    \"\"\n        graphics\n        [\n            x    78.60\n            y    1026.97\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    31\n        label    \"\"\n        graphics\n        [\n            x    236.49\n            y    367.70\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    32\n        label    \"\"\n        graphics\n        [\n            x    518.58\n            y    598.35\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    33\n        label    \"\"\n        graphics\n        [\n            x    819.68\n            y    1078.25\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    34\n        label    \"\"\n        graphics\n        [\n            x    1145.98\n            y    718.81\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    35\n        label    \"\"\n        graphics\n        [\n            x    616.68\n            y    73.98\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    36\n        label    \"\"\n        graphics\n        [\n            x    40.63\n            y    244.20\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    37\n        label    \"\"\n        graphics\n        [\n            x    851.43\n            y    666.00\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    38\n        label    \"\"\n        graphics\n        [\n            x    180.51\n            y    243.88\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    39\n        label    \"\"\n        graphics\n        [\n            x    519.33\n            y    633.94\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    40\n        label    \"\"\n        graphics\n        [\n            x    1066.13\n            y    479.95\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    41\n        label    \"\"\n        graphics\n        [\n            x    112.71\n            y    849.12\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    42\n        label    \"\"\n        graphics\n        [\n            x    812.64\n            y    750.05\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    43\n        label    \"\"\n        graphics\n        [\n            x    134.30\n            y    336.17\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    44\n        label    \"\"\n        graphics\n        [\n            x    124.80\n            y    439.76\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    45\n        label    \"\"\n        graphics\n        [\n            x    178.24\n            y    1119.50\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    46\n        label    \"\"\n        graphics\n        [\n            x    745.90\n            y    619.89\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    47\n        label    \"\"\n        graphics\n        [\n            x    7.06\n            y    119.00\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    48\n        label    \"\"\n        graphics\n        [\n            x    254.31\n            y    959.92\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    49\n        label    \"\"\n        graphics\n        [\n            x    717.81\n            y    211.66\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    50\n        label    \"\"\n        graphics\n        [\n            x    79.95\n            y    309.62\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    51\n        label    \"\"\n        graphics\n        [\n            x    512.22\n            y    216.17\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    52\n        label    \"\"\n        graphics\n        [\n            x    918.32\n            y    564.50\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    53\n        label    \"\"\n        graphics\n        [\n            x    315.73\n            y    1019.77\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    54\n        label    \"\"\n        graphics\n        [\n            x    778.74\n            y    1112.09\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    55\n        label    \"\"\n        graphics\n        [\n            x    74.72\n            y    822.83\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    56\n        label    \"\"\n        graphics\n        [\n            x    785.57\n            y    1035.81\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    57\n        label    \"\"\n        graphics\n        [\n            x    714.16\n            y    1045.33\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    58\n        label    \"\"\n        graphics\n        [\n            x    674.01\n            y    996.81\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    59\n        label    \"\"\n        graphics\n        [\n            x    393.74\n            y    1150.06\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    60\n        label    \"\"\n        graphics\n        [\n            x    192.58\n            y    703.61\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    61\n        label    \"\"\n        graphics\n        [\n            x    1031.02\n            y    1121.19\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    62\n        label    \"\"\n        graphics\n        [\n            x    751.56\n            y    1049.62\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    63\n        label    \"\"\n        graphics\n        [\n            x    692.62\n            y    620.38\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    64\n        label    \"\"\n        graphics\n        [\n            x    916.77\n            y    1098.84\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    65\n        label    \"\"\n        graphics\n        [\n            x    211.65\n            y    388.91\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    66\n        label    \"\"\n        graphics\n        [\n            x    1169.99\n            y    251.71\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    67\n        label    \"\"\n        graphics\n        [\n            x    526.13\n            y    948.97\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    68\n        label    \"\"\n        graphics\n        [\n            x    1083.82\n            y    598.40\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    69\n        label    \"\"\n        graphics\n        [\n            x    223.15\n            y    79.26\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    70\n        label    \"\"\n        graphics\n        [\n            x    999.08\n            y    1170.59\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    71\n        label    \"\"\n        graphics\n        [\n            x    14.84\n            y    24.06\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    72\n        label    \"\"\n        graphics\n        [\n            x    1045.15\n            y    579.14\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    73\n        label    \"\"\n        graphics\n        [\n            x    18.01\n            y    252.55\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    74\n        label    \"\"\n        graphics\n        [\n            x    1118.37\n            y    216.22\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    75\n        label    \"\"\n        graphics\n        [\n            x    738.63\n            y    1108.70\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    76\n        label    \"\"\n        graphics\n        [\n            x    1117.07\n            y    1119.13\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    77\n        label    \"\"\n        graphics\n        [\n            x    822.61\n            y    877.01\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    78\n        label    \"\"\n        graphics\n        [\n            x    661.10\n            y    1014.08\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    79\n        label    \"\"\n        graphics\n        [\n            x    80.20\n            y    657.37\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    80\n        label    \"\"\n        graphics\n        [\n            x    392.38\n            y    482.26\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    81\n        label    \"\"\n        graphics\n        [\n            x    987.12\n            y    161.19\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    82\n        label    \"\"\n        graphics\n        [\n            x    1115.08\n            y    562.68\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    83\n        label    \"\"\n        graphics\n        [\n            x    825.21\n            y    1029.67\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    84\n        label    \"\"\n        graphics\n        [\n            x    133.42\n            y    493.12\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    85\n        label    \"\"\n        graphics\n        [\n            x    982.57\n            y    156.50\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    86\n        label    \"\"\n        graphics\n        [\n            x    869.78\n            y    834.96\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    87\n        label    \"\"\n        graphics\n        [\n            x    738.06\n            y    202.11\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    88\n        label    \"\"\n        graphics\n        [\n            x    98.79\n            y    435.98\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    89\n        label    \"\"\n        graphics\n        [\n            x    1108.95\n            y    5.28\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    90\n        label    \"\"\n        graphics\n        [\n            x    435.54\n            y    347.29\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    91\n        label    \"\"\n        graphics\n        [\n            x    386.11\n            y    662.95\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    92\n        label    \"\"\n        graphics\n        [\n            x    256.62\n            y    1055.38\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    93\n        label    \"\"\n        graphics\n        [\n            x    694.88\n            y    1005.79\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    94\n        label    \"\"\n        graphics\n        [\n            x    201.46\n            y    387.71\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    95\n        label    \"\"\n        graphics\n        [\n            x    285.15\n            y    470.10\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    96\n        label    \"\"\n        graphics\n        [\n            x    796.29\n            y    645.40\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    97\n        label    \"\"\n        graphics\n        [\n            x    665.89\n            y    415.16\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    98\n        label    \"\"\n        graphics\n        [\n            x    829.44\n            y    1086.99\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    99\n        label    \"\"\n        graphics\n        [\n            x    1167.08\n            y    204.59\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    100\n        label    \"\"\n        graphics\n        [\n            x    757.97\n            y    936.47\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    101\n        label    \"\"\n        graphics\n        [\n            x    564.63\n            y    897.53\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    102\n        label    \"\"\n        graphics\n        [\n            x    757.63\n            y    309.10\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    103\n        label    \"\"\n        graphics\n        [\n            x    680.93\n            y    0.16\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    104\n        label    \"\"\n        graphics\n        [\n            x    338.95\n            y    713.68\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    105\n        label    \"\"\n        graphics\n        [\n            x    252.22\n            y    434.36\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    106\n        label    \"\"\n        graphics\n        [\n            x    1136.69\n            y    1057.57\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    107\n        label    \"\"\n        graphics\n        [\n            x    331.15\n            y    495.18\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    108\n        label    \"\"\n        graphics\n        [\n            x    219.41\n            y    381.12\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    109\n        label    \"\"\n        graphics\n        [\n            x    1071.85\n            y    183.99\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    110\n        label    \"\"\n        graphics\n        [\n            x    996.18\n            y    474.83\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    111\n        label    \"\"\n        graphics\n        [\n            x    886.83\n            y    1169.90\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    112\n        label    \"\"\n        graphics\n        [\n            x    917.69\n            y    215.14\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    113\n        label    \"\"\n        graphics\n        [\n            x    196.94\n            y    948.62\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    114\n        label    \"\"\n        graphics\n        [\n            x    1016.14\n            y    763.95\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    115\n        label    \"\"\n        graphics\n        [\n            x    840.38\n            y    836.40\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    116\n        label    \"\"\n        graphics\n        [\n            x    541.74\n            y    194.13\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    117\n        label    \"\"\n        graphics\n        [\n            x    599.29\n            y    378.77\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    118\n        label    \"\"\n        graphics\n        [\n            x    11.00\n            y    733.56\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    119\n        label    \"\"\n        graphics\n        [\n            x    9.17\n            y    493.16\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    120\n        label    \"\"\n        graphics\n        [\n            x    546.22\n            y    1120.70\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    121\n        label    \"\"\n        graphics\n        [\n            x    857.38\n            y    341.69\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    122\n        label    \"\"\n        graphics\n        [\n            x    174.35\n            y    722.71\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    123\n        label    \"\"\n        graphics\n        [\n            x    1132.43\n            y    618.47\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    124\n        label    \"\"\n        graphics\n        [\n            x    377.98\n            y    1116.45\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    125\n        label    \"\"\n        graphics\n        [\n            x    1169.53\n            y    646.38\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    126\n        label    \"\"\n        graphics\n        [\n            x    5.17\n            y    760.08\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    127\n        label    \"\"\n        graphics\n        [\n            x    25.64\n            y    20.19\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    128\n        label    \"\"\n        graphics\n        [\n            x    1135.30\n            y    443.35\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    129\n        label    \"\"\n        graphics\n        [\n            x    1138.47\n            y    242.14\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    130\n        label    \"\"\n        graphics\n        [\n            x    114.66\n            y    1005.20\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    131\n        label    \"\"\n        graphics\n        [\n            x    343.35\n            y    455.01\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    132\n        label    \"\"\n        graphics\n        [\n            x    382.34\n            y    491.87\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    133\n        label    \"\"\n        graphics\n        [\n            x    335.37\n            y    676.71\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    134\n        label    \"\"\n        graphics\n        [\n            x    700.39\n            y    804.23\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    135\n        label    \"\"\n        graphics\n        [\n            x    1116.90\n            y    607.32\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    136\n        label    \"\"\n        graphics\n        [\n            x    698.86\n            y    443.30\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    137\n        label    \"\"\n        graphics\n        [\n            x    427.66\n            y    845.78\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    138\n        label    \"\"\n        graphics\n        [\n            x    84.51\n            y    719.60\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    139\n        label    \"\"\n        graphics\n        [\n            x    444.17\n            y    986.95\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    140\n        label    \"\"\n        graphics\n        [\n            x    337.07\n            y    197.34\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    141\n        label    \"\"\n        graphics\n        [\n            x    115.58\n            y    755.33\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    142\n        label    \"\"\n        graphics\n        [\n            x    681.62\n            y    391.79\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    143\n        label    \"\"\n        graphics\n        [\n            x    1046.40\n            y    153.51\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    144\n        label    \"\"\n        graphics\n        [\n            x    240.89\n            y    46.17\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    145\n        label    \"\"\n        graphics\n        [\n            x    263.19\n            y    600.80\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    146\n        label    \"\"\n        graphics\n        [\n            x    154.12\n            y    712.84\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    147\n        label    \"\"\n        graphics\n        [\n            x    782.91\n            y    332.05\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    148\n        label    \"\"\n        graphics\n        [\n            x    927.71\n            y    998.61\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    149\n        label    \"\"\n        graphics\n        [\n            x    440.99\n            y    355.20\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    150\n        label    \"\"\n        graphics\n        [\n            x    329.77\n            y    930.56\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    151\n        label    \"\"\n        graphics\n        [\n            x    806.40\n            y    344.93\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    152\n        label    \"\"\n        graphics\n        [\n            x    136.41\n            y    231.42\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    153\n        label    \"\"\n        graphics\n        [\n            x    1035.65\n            y    192.96\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    154\n        label    \"\"\n        graphics\n        [\n            x    88.45\n            y    229.14\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    155\n        label    \"\"\n        graphics\n        [\n            x    750.00\n            y    606.83\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    156\n        label    \"\"\n        graphics\n        [\n            x    1009.76\n            y    181.14\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    157\n        label    \"\"\n        graphics\n        [\n            x    878.12\n            y    1114.29\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    158\n        label    \"\"\n        graphics\n        [\n            x    537.46\n            y    383.99\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    159\n        label    \"\"\n        graphics\n        [\n            x    872.06\n            y    819.19\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    160\n        label    \"\"\n        graphics\n        [\n            x    864.87\n            y    1013.02\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    161\n        label    \"\"\n        graphics\n        [\n            x    417.80\n            y    1010.51\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    162\n        label    \"\"\n        graphics\n        [\n            x    958.20\n            y    156.52\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    163\n        label    \"\"\n        graphics\n        [\n            x    505.94\n            y    926.34\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    164\n        label    \"\"\n        graphics\n        [\n            x    714.14\n            y    698.11\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    165\n        label    \"\"\n        graphics\n        [\n            x    598.35\n            y    165.05\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    166\n        label    \"\"\n        graphics\n        [\n            x    719.49\n            y    834.33\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    167\n        label    \"\"\n        graphics\n        [\n            x    532.70\n            y    624.46\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    168\n        label    \"\"\n        graphics\n        [\n            x    439.38\n            y    113.49\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    169\n        label    \"\"\n        graphics\n        [\n            x    541.01\n            y    469.38\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    edge\n    [\n        source    1\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    10\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    100\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    101\n        target    57\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    102\n        target    142\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    102\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    103\n        target    101\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    104\n        target    19\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    105\n        target    40\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    106\n        target    25\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    107\n        target    104\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    107\n        target    80\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    108\n        target    92\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    109\n        target    39\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    11\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    110\n        target    164\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    110\n        target    74\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    111\n        target    105\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    112\n        target    30\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    113\n        target    19\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    113\n        target    92\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    114\n        target    75\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    115\n        target    160\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    115\n        target    43\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    115\n        target    70\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    116\n        target    24\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    117\n        target    88\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    118\n        target    41\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    119\n        target    45\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    12\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    120\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    121\n        target    79\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    122\n        target    42\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    123\n        target    29\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    123\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    124\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    125\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    125\n        target    83\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    126\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    127\n        target    59\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    128\n        target    89\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    129\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    13\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    130\n        target    62\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    131\n        target    123\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    131\n        target    77\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    132\n        target    156\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    132\n        target    72\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    133\n        target    119\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    134\n        target    60\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    135\n        target    29\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    136\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    136\n        target    89\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    137\n        target    83\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    138\n        target    119\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    139\n        target    42\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    139\n        target    61\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    14\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    140\n        target    108\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    141\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    142\n        target    114\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    143\n        target    130\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    143\n        target    135\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    143\n        target    98\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    144\n        target    41\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    145\n        target    111\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    146\n        target    107\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    147\n        target    68\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    148\n        target    123\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    148\n        target    132\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    148\n        target    50\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    149\n        target    64\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    15\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    150\n        target    91\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    151\n        target    38\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    152\n        target    169\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    152\n        target    47\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    153\n        target    26\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    154\n        target    30\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    154\n        target    70\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    155\n        target    143\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    156\n        target    105\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    156\n        target    44\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    157\n        target    63\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    158\n        target    144\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    159\n        target    110\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    16\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    160\n        target    72\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    161\n        target    56\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    162\n        target    153\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    163\n        target    154\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    164\n        target    36\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    165\n        target    68\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    166\n        target    121\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    167\n        target    33\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    168\n        target    70\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    169\n        target    94\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    17\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    18\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    18\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    19\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    2\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    20\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    21\n        target    20\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    22\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    23\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    24\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    25\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    26\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    27\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    28\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    29\n        target    19\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    3\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    30\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    31\n        target    30\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    32\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    33\n        target    19\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    33\n        target    87\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    34\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    35\n        target    24\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    36\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    37\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    38\n        target    27\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    39\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    4\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    40\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    41\n        target    27\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    42\n        target    41\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    43\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    43\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    44\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    45\n        target    31\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    46\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    47\n        target    42\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    48\n        target    44\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    49\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    5\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    50\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    50\n        target    45\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    51\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    52\n        target    50\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    53\n        target    52\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    53\n        target    60\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    54\n        target    33\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    55\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    56\n        target    41\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    57\n        target    122\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    57\n        target    20\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    58\n        target    40\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    59\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    6\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    60\n        target    45\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    61\n        target    34\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    62\n        target    52\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    63\n        target    57\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    63\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    64\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    65\n        target    24\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    66\n        target    53\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    67\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    68\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    69\n        target    48\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    7\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    70\n        target    38\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    71\n        target    69\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    72\n        target    61\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    73\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    73\n        target    68\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    73\n        target    79\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    74\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    75\n        target    37\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    76\n        target    43\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    77\n        target    51\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    78\n        target    105\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    78\n        target    35\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    78\n        target    44\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    79\n        target    39\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    8\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    80\n        target    27\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    81\n        target    69\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    82\n        target    56\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    83\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    84\n        target    140\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    84\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    85\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    86\n        target    79\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    87\n        target    34\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    88\n        target    84\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    89\n        target    79\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    9\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    90\n        target    55\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    91\n        target    20\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    92\n        target    120\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    92\n        target    63\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    92\n        target    84\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    93\n        target    68\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    94\n        target    25\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    95\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    95\n        target    68\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    96\n        target    44\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    96\n        target    99\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    97\n        target    42\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    98\n        target    87\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    99\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n]\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v170e204.tglf",
    "content": "0 1071.000 304.000 30.000 30.000\n1 1098.000 1073.000 30.000 30.000\n2 316.000 770.000 30.000 30.000\n3 574.000 354.000 30.000 30.000\n4 869.000 1116.000 30.000 30.000\n5 1061.000 664.000 30.000 30.000\n6 1119.000 685.000 30.000 30.000\n7 496.000 528.000 30.000 30.000\n8 1166.000 50.000 30.000 30.000\n9 437.000 635.000 30.000 30.000\n10 248.000 678.000 30.000 30.000\n11 1042.000 522.000 30.000 30.000\n12 1084.000 1010.000 30.000 30.000\n13 730.000 1133.000 30.000 30.000\n14 705.000 356.000 30.000 30.000\n15 1030.000 1117.000 30.000 30.000\n16 666.000 868.000 30.000 30.000\n17 237.000 919.000 30.000 30.000\n18 319.000 257.000 30.000 30.000\n19 95.000 1065.000 30.000 30.000\n20 708.000 864.000 30.000 30.000\n21 354.000 721.000 30.000 30.000\n22 1029.000 509.000 30.000 30.000\n23 1058.000 1049.000 30.000 30.000\n24 109.000 609.000 30.000 30.000\n25 436.000 351.000 30.000 30.000\n26 74.000 503.000 30.000 30.000\n27 879.000 7.000 30.000 30.000\n28 121.000 87.000 30.000 30.000\n29 242.000 736.000 30.000 30.000\n30 78.000 1026.000 30.000 30.000\n31 236.000 367.000 30.000 30.000\n32 518.000 598.000 30.000 30.000\n33 819.000 1078.000 30.000 30.000\n34 1145.000 718.000 30.000 30.000\n35 616.000 73.000 30.000 30.000\n36 40.000 244.000 30.000 30.000\n37 851.000 666.000 30.000 30.000\n38 180.000 243.000 30.000 30.000\n39 519.000 633.000 30.000 30.000\n40 1066.000 479.000 30.000 30.000\n41 112.000 849.000 30.000 30.000\n42 812.000 750.000 30.000 30.000\n43 134.000 336.000 30.000 30.000\n44 124.000 439.000 30.000 30.000\n45 178.000 1119.000 30.000 30.000\n46 745.000 619.000 30.000 30.000\n47 7.000 119.000 30.000 30.000\n48 254.000 959.000 30.000 30.000\n49 717.000 211.000 30.000 30.000\n50 79.000 309.000 30.000 30.000\n51 512.000 216.000 30.000 30.000\n52 918.000 564.000 30.000 30.000\n53 315.000 1019.000 30.000 30.000\n54 778.000 1112.000 30.000 30.000\n55 74.000 822.000 30.000 30.000\n56 785.000 1035.000 30.000 30.000\n57 714.000 1045.000 30.000 30.000\n58 674.000 996.000 30.000 30.000\n59 393.000 1150.000 30.000 30.000\n60 192.000 703.000 30.000 30.000\n61 1031.000 1121.000 30.000 30.000\n62 751.000 1049.000 30.000 30.000\n63 692.000 620.000 30.000 30.000\n64 916.000 1098.000 30.000 30.000\n65 211.000 388.000 30.000 30.000\n66 1169.000 251.000 30.000 30.000\n67 526.000 948.000 30.000 30.000\n68 1083.000 598.000 30.000 30.000\n69 223.000 79.000 30.000 30.000\n70 999.000 1170.000 30.000 30.000\n71 14.000 24.000 30.000 30.000\n72 1045.000 579.000 30.000 30.000\n73 18.000 252.000 30.000 30.000\n74 1118.000 216.000 30.000 30.000\n75 738.000 1108.000 30.000 30.000\n76 1117.000 1119.000 30.000 30.000\n77 822.000 877.000 30.000 30.000\n78 661.000 1014.000 30.000 30.000\n79 80.000 657.000 30.000 30.000\n80 392.000 482.000 30.000 30.000\n81 987.000 161.000 30.000 30.000\n82 1115.000 562.000 30.000 30.000\n83 825.000 1029.000 30.000 30.000\n84 133.000 493.000 30.000 30.000\n85 982.000 156.000 30.000 30.000\n86 869.000 834.000 30.000 30.000\n87 738.000 202.000 30.000 30.000\n88 98.000 435.000 30.000 30.000\n89 1108.000 5.000 30.000 30.000\n90 435.000 347.000 30.000 30.000\n91 386.000 662.000 30.000 30.000\n92 256.000 1055.000 30.000 30.000\n93 694.000 1005.000 30.000 30.000\n94 201.000 387.000 30.000 30.000\n95 285.000 470.000 30.000 30.000\n96 796.000 645.000 30.000 30.000\n97 665.000 415.000 30.000 30.000\n98 829.000 1086.000 30.000 30.000\n99 1167.000 204.000 30.000 30.000\n100 757.000 936.000 30.000 30.000\n101 564.000 897.000 30.000 30.000\n102 757.000 309.000 30.000 30.000\n103 680.000 0.000 30.000 30.000\n104 338.000 713.000 30.000 30.000\n105 252.000 434.000 30.000 30.000\n106 1136.000 1057.000 30.000 30.000\n107 331.000 495.000 30.000 30.000\n108 219.000 381.000 30.000 30.000\n109 1071.000 183.000 30.000 30.000\n110 996.000 474.000 30.000 30.000\n111 886.000 1169.000 30.000 30.000\n112 917.000 215.000 30.000 30.000\n113 196.000 948.000 30.000 30.000\n114 1016.000 763.000 30.000 30.000\n115 840.000 836.000 30.000 30.000\n116 541.000 194.000 30.000 30.000\n117 599.000 378.000 30.000 30.000\n118 11.000 733.000 30.000 30.000\n119 9.000 493.000 30.000 30.000\n120 546.000 1120.000 30.000 30.000\n121 857.000 341.000 30.000 30.000\n122 174.000 722.000 30.000 30.000\n123 1132.000 618.000 30.000 30.000\n124 377.000 1116.000 30.000 30.000\n125 1169.000 646.000 30.000 30.000\n126 5.000 760.000 30.000 30.000\n127 25.000 20.000 30.000 30.000\n128 1135.000 443.000 30.000 30.000\n129 1138.000 242.000 30.000 30.000\n130 114.000 1005.000 30.000 30.000\n131 343.000 455.000 30.000 30.000\n132 382.000 491.000 30.000 30.000\n133 335.000 676.000 30.000 30.000\n134 700.000 804.000 30.000 30.000\n135 1116.000 607.000 30.000 30.000\n136 698.000 443.000 30.000 30.000\n137 427.000 845.000 30.000 30.000\n138 84.000 719.000 30.000 30.000\n139 444.000 986.000 30.000 30.000\n140 337.000 197.000 30.000 30.000\n141 115.000 755.000 30.000 30.000\n142 681.000 391.000 30.000 30.000\n143 1046.000 153.000 30.000 30.000\n144 240.000 46.000 30.000 30.000\n145 263.000 600.000 30.000 30.000\n146 154.000 712.000 30.000 30.000\n147 782.000 332.000 30.000 30.000\n148 927.000 998.000 30.000 30.000\n149 440.000 355.000 30.000 30.000\n150 329.000 930.000 30.000 30.000\n151 806.000 344.000 30.000 30.000\n152 136.000 231.000 30.000 30.000\n153 1035.000 192.000 30.000 30.000\n154 88.000 229.000 30.000 30.000\n155 750.000 606.000 30.000 30.000\n156 1009.000 181.000 30.000 30.000\n157 878.000 1114.000 30.000 30.000\n158 537.000 383.000 30.000 30.000\n159 872.000 819.000 30.000 30.000\n160 864.000 1013.000 30.000 30.000\n161 417.000 1010.000 30.000 30.000\n162 958.000 156.000 30.000 30.000\n163 505.000 926.000 30.000 30.000\n164 714.000 698.000 30.000 30.000\n165 598.000 165.000 30.000 30.000\n166 719.000 834.000 30.000 30.000\n167 532.000 624.000 30.000 30.000\n168 439.000 113.000 30.000 30.000\n169 541.000 469.000 30.000 30.000\n#\n61 34\n63 9\n125 83\n97 42\n2 0\n22 15\n142 114\n154 70\n131 77\n125 2\n136 15\n123 8\n56 41\n131 123\n123 29\n166 121\n25 8\n112 30\n95 0\n100 5\n163 154\n44 17\n102 142\n96 99\n118 41\n148 50\n143 135\n122 42\n144 41\n161 56\n37 4\n53 60\n115 70\n52 50\n120 17\n16 0\n158 144\n148 123\n73 79\n151 38\n85 18\n139 61\n124 7\n121 79\n29 19\n27 5\n107 104\n84 4\n64 16\n93 68\n35 24\n91 20\n132 156\n78 105\n73 16\n136 89\n145 111\n46 13\n55 10\n31 30\n152 169\n132 72\n107 80\n143 130\n130 62\n160 72\n8 6\n51 1\n78 44\n114 75\n48 44\n4 2\n155 143\n59 17\n126 18\n32 17\n80 27\n153 26\n65 24\n138 119\n147 68\n103 101\n134 60\n140 108\n96 44\n50 45\n111 105\n13 9\n129 6\n6 5\n68 5\n133 119\n79 39\n30 1\n41 27\n43 1\n33 87\n92 84\n21 20\n24 21\n67 23\n165 68\n50 2\n169 94\n99 12\n42 41\n156 44\n110 164\n63 57\n154 30\n88 84\n47 42\n150 91\n115 43\n102 6\n110 74\n60 45\n113 92\n104 19\n84 140\n12 6\n38 27\n116 24\n139 42\n152 47\n11 7\n73 68\n92 63\n83 7\n81 69\n62 52\n53 52\n58 40\n92 120\n20 6\n127 59\n95 68\n119 45\n168 70\n71 69\n90 55\n1 0\n162 153\n115 160\n23 11\n26 2\n143 98\n66 53\n77 51\n146 107\n43 15\n87 34\n40 13\n14 1\n33 19\n36 5\n18 7\n106 25\n39 6\n10 0\n135 29\n74 16\n109 39\n72 61\n117 88\n86 79\n54 33\n164 36\n101 57\n57 122\n149 64\n69 48\n15 11\n57 20\n98 87\n167 33\n75 37\n89 79\n148 132\n3 0\n108 92\n19 11\n156 105\n5 2\n7 3\n45 31\n78 35\n49 16\n82 56\n113 19\n105 40\n18 9\n157 63\n9 8\n137 83\n34 10\n17 14\n70 38\n28 12\n141 9\n76 43\n159 110\n94 25\n128 89\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v170e221.gml",
    "content": "graph\n[\n    node\n    [\n        id    0\n        label    \"\"\n        graphics\n        [\n            x    618.33\n            y    364.27\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    1\n        label    \"\"\n        graphics\n        [\n            x    525.08\n            y    230.43\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    2\n        label    \"\"\n        graphics\n        [\n            x    504.70\n            y    624.99\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    3\n        label    \"\"\n        graphics\n        [\n            x    444.04\n            y    882.72\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    4\n        label    \"\"\n        graphics\n        [\n            x    891.69\n            y    1033.97\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    5\n        label    \"\"\n        graphics\n        [\n            x    187.15\n            y    701.72\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    6\n        label    \"\"\n        graphics\n        [\n            x    512.07\n            y    813.79\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    7\n        label    \"\"\n        graphics\n        [\n            x    684.40\n            y    553.88\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    8\n        label    \"\"\n        graphics\n        [\n            x    423.65\n            y    714.41\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    9\n        label    \"\"\n        graphics\n        [\n            x    566.22\n            y    166.09\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    10\n        label    \"\"\n        graphics\n        [\n            x    1165.76\n            y    1027.31\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    11\n        label    \"\"\n        graphics\n        [\n            x    322.34\n            y    457.04\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    12\n        label    \"\"\n        graphics\n        [\n            x    535.58\n            y    258.97\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    13\n        label    \"\"\n        graphics\n        [\n            x    692.81\n            y    693.05\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    14\n        label    \"\"\n        graphics\n        [\n            x    1015.21\n            y    190.30\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    15\n        label    \"\"\n        graphics\n        [\n            x    621.99\n            y    394.86\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    16\n        label    \"\"\n        graphics\n        [\n            x    1121.93\n            y    1002.75\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    17\n        label    \"\"\n        graphics\n        [\n            x    908.65\n            y    1135.18\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    18\n        label    \"\"\n        graphics\n        [\n            x    970.63\n            y    8.45\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    19\n        label    \"\"\n        graphics\n        [\n            x    180.79\n            y    107.72\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    20\n        label    \"\"\n        graphics\n        [\n            x    600.70\n            y    297.46\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    21\n        label    \"\"\n        graphics\n        [\n            x    1109.33\n            y    157.83\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    22\n        label    \"\"\n        graphics\n        [\n            x    882.98\n            y    205.48\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    23\n        label    \"\"\n        graphics\n        [\n            x    784.21\n            y    143.45\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    24\n        label    \"\"\n        graphics\n        [\n            x    686.14\n            y    974.35\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    25\n        label    \"\"\n        graphics\n        [\n            x    513.62\n            y    352.21\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    26\n        label    \"\"\n        graphics\n        [\n            x    748.32\n            y    25.11\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    27\n        label    \"\"\n        graphics\n        [\n            x    331.42\n            y    329.51\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    28\n        label    \"\"\n        graphics\n        [\n            x    534.49\n            y    955.64\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    29\n        label    \"\"\n        graphics\n        [\n            x    816.79\n            y    740.69\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    30\n        label    \"\"\n        graphics\n        [\n            x    159.87\n            y    749.59\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    31\n        label    \"\"\n        graphics\n        [\n            x    21.65\n            y    330.47\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    32\n        label    \"\"\n        graphics\n        [\n            x    186.01\n            y    7.26\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    33\n        label    \"\"\n        graphics\n        [\n            x    904.51\n            y    813.83\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    34\n        label    \"\"\n        graphics\n        [\n            x    528.37\n            y    968.95\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    35\n        label    \"\"\n        graphics\n        [\n            x    368.01\n            y    472.95\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    36\n        label    \"\"\n        graphics\n        [\n            x    1141.27\n            y    74.29\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    37\n        label    \"\"\n        graphics\n        [\n            x    275.96\n            y    1141.57\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    38\n        label    \"\"\n        graphics\n        [\n            x    592.76\n            y    871.20\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    39\n        label    \"\"\n        graphics\n        [\n            x    43.07\n            y    828.30\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    40\n        label    \"\"\n        graphics\n        [\n            x    672.68\n            y    346.77\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    41\n        label    \"\"\n        graphics\n        [\n            x    451.46\n            y    917.26\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    42\n        label    \"\"\n        graphics\n        [\n            x    1154.77\n            y    976.31\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    43\n        label    \"\"\n        graphics\n        [\n            x    387.78\n            y    752.61\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    44\n        label    \"\"\n        graphics\n        [\n            x    511.41\n            y    339.70\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    45\n        label    \"\"\n        graphics\n        [\n            x    563.86\n            y    782.91\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    46\n        label    \"\"\n        graphics\n        [\n            x    707.69\n            y    1032.04\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    47\n        label    \"\"\n        graphics\n        [\n            x    570.02\n            y    304.70\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    48\n        label    \"\"\n        graphics\n        [\n            x    159.87\n            y    162.75\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    49\n        label    \"\"\n        graphics\n        [\n            x    800.05\n            y    841.00\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    50\n        label    \"\"\n        graphics\n        [\n            x    452.94\n            y    534.50\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    51\n        label    \"\"\n        graphics\n        [\n            x    603.78\n            y    517.48\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    52\n        label    \"\"\n        graphics\n        [\n            x    176.93\n            y    654.92\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    53\n        label    \"\"\n        graphics\n        [\n            x    687.10\n            y    475.90\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    54\n        label    \"\"\n        graphics\n        [\n            x    1110.02\n            y    868.72\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    55\n        label    \"\"\n        graphics\n        [\n            x    828.89\n            y    452.56\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    56\n        label    \"\"\n        graphics\n        [\n            x    363.86\n            y    1065.69\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    57\n        label    \"\"\n        graphics\n        [\n            x    84.53\n            y    978.38\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    58\n        label    \"\"\n        graphics\n        [\n            x    21.94\n            y    278.12\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    59\n        label    \"\"\n        graphics\n        [\n            x    567.34\n            y    929.28\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    60\n        label    \"\"\n        graphics\n        [\n            x    742.97\n            y    136.20\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    61\n        label    \"\"\n        graphics\n        [\n            x    1158.39\n            y    408.34\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    62\n        label    \"\"\n        graphics\n        [\n            x    557.52\n            y    1111.98\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    63\n        label    \"\"\n        graphics\n        [\n            x    115.18\n            y    609.63\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    64\n        label    \"\"\n        graphics\n        [\n            x    9.79\n            y    55.99\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    65\n        label    \"\"\n        graphics\n        [\n            x    1127.62\n            y    43.18\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    66\n        label    \"\"\n        graphics\n        [\n            x    898.20\n            y    173.81\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    67\n        label    \"\"\n        graphics\n        [\n            x    298.65\n            y    973.62\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    68\n        label    \"\"\n        graphics\n        [\n            x    979.01\n            y    329.25\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    69\n        label    \"\"\n        graphics\n        [\n            x    88.26\n            y    1020.06\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    70\n        label    \"\"\n        graphics\n        [\n            x    277.98\n            y    386.38\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    71\n        label    \"\"\n        graphics\n        [\n            x    1083.09\n            y    894.80\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    72\n        label    \"\"\n        graphics\n        [\n            x    407.09\n            y    27.62\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    73\n        label    \"\"\n        graphics\n        [\n            x    102.75\n            y    294.34\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    74\n        label    \"\"\n        graphics\n        [\n            x    504.25\n            y    594.92\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    75\n        label    \"\"\n        graphics\n        [\n            x    1164.24\n            y    174.66\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    76\n        label    \"\"\n        graphics\n        [\n            x    220.71\n            y    649.71\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    77\n        label    \"\"\n        graphics\n        [\n            x    858.56\n            y    810.59\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    78\n        label    \"\"\n        graphics\n        [\n            x    981.75\n            y    789.34\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    79\n        label    \"\"\n        graphics\n        [\n            x    1042.07\n            y    634.77\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    80\n        label    \"\"\n        graphics\n        [\n            x    951.75\n            y    1002.94\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    81\n        label    \"\"\n        graphics\n        [\n            x    169.72\n            y    414.45\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    82\n        label    \"\"\n        graphics\n        [\n            x    253.04\n            y    1087.38\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    83\n        label    \"\"\n        graphics\n        [\n            x    1020.30\n            y    703.38\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    84\n        label    \"\"\n        graphics\n        [\n            x    278.41\n            y    341.56\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    85\n        label    \"\"\n        graphics\n        [\n            x    130.45\n            y    318.43\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    86\n        label    \"\"\n        graphics\n        [\n            x    435.98\n            y    33.01\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    87\n        label    \"\"\n        graphics\n        [\n            x    346.47\n            y    203.01\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    88\n        label    \"\"\n        graphics\n        [\n            x    284.97\n            y    586.76\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    89\n        label    \"\"\n        graphics\n        [\n            x    577.94\n            y    285.03\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    90\n        label    \"\"\n        graphics\n        [\n            x    647.03\n            y    1035.30\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    91\n        label    \"\"\n        graphics\n        [\n            x    689.74\n            y    175.97\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    92\n        label    \"\"\n        graphics\n        [\n            x    1099.54\n            y    415.12\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    93\n        label    \"\"\n        graphics\n        [\n            x    865.10\n            y    881.11\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    94\n        label    \"\"\n        graphics\n        [\n            x    956.17\n            y    918.18\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    95\n        label    \"\"\n        graphics\n        [\n            x    874.76\n            y    831.45\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    96\n        label    \"\"\n        graphics\n        [\n            x    420.94\n            y    92.76\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    97\n        label    \"\"\n        graphics\n        [\n            x    798.06\n            y    446.87\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    98\n        label    \"\"\n        graphics\n        [\n            x    419.75\n            y    435.31\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    99\n        label    \"\"\n        graphics\n        [\n            x    1020.33\n            y    742.67\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    100\n        label    \"\"\n        graphics\n        [\n            x    191.83\n            y    505.19\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    101\n        label    \"\"\n        graphics\n        [\n            x    106.14\n            y    1152.52\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    102\n        label    \"\"\n        graphics\n        [\n            x    194.23\n            y    464.21\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    103\n        label    \"\"\n        graphics\n        [\n            x    418.09\n            y    680.86\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    104\n        label    \"\"\n        graphics\n        [\n            x    27.30\n            y    1159.77\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    105\n        label    \"\"\n        graphics\n        [\n            x    137.20\n            y    117.70\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    106\n        label    \"\"\n        graphics\n        [\n            x    94.49\n            y    821.79\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    107\n        label    \"\"\n        graphics\n        [\n            x    160.18\n            y    546.19\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    108\n        label    \"\"\n        graphics\n        [\n            x    789.33\n            y    440.07\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    109\n        label    \"\"\n        graphics\n        [\n            x    40.38\n            y    1003.49\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    110\n        label    \"\"\n        graphics\n        [\n            x    380.12\n            y    754.34\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    111\n        label    \"\"\n        graphics\n        [\n            x    914.30\n            y    263.40\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    112\n        label    \"\"\n        graphics\n        [\n            x    944.87\n            y    725.23\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    113\n        label    \"\"\n        graphics\n        [\n            x    592.20\n            y    837.51\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    114\n        label    \"\"\n        graphics\n        [\n            x    503.43\n            y    241.23\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    115\n        label    \"\"\n        graphics\n        [\n            x    342.91\n            y    647.99\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    116\n        label    \"\"\n        graphics\n        [\n            x    834.52\n            y    125.56\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    117\n        label    \"\"\n        graphics\n        [\n            x    669.09\n            y    211.31\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    118\n        label    \"\"\n        graphics\n        [\n            x    70.89\n            y    273.35\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    119\n        label    \"\"\n        graphics\n        [\n            x    392.02\n            y    1082.24\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    120\n        label    \"\"\n        graphics\n        [\n            x    365.23\n            y    129.91\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    121\n        label    \"\"\n        graphics\n        [\n            x    618.25\n            y    1036.81\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    122\n        label    \"\"\n        graphics\n        [\n            x    394.84\n            y    935.47\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    123\n        label    \"\"\n        graphics\n        [\n            x    769.08\n            y    78.63\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    124\n        label    \"\"\n        graphics\n        [\n            x    1035.52\n            y    210.74\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    125\n        label    \"\"\n        graphics\n        [\n            x    185.25\n            y    610.34\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    126\n        label    \"\"\n        graphics\n        [\n            x    219.34\n            y    241.01\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    127\n        label    \"\"\n        graphics\n        [\n            x    594.35\n            y    573.84\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    128\n        label    \"\"\n        graphics\n        [\n            x    412.95\n            y    822.10\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    129\n        label    \"\"\n        graphics\n        [\n            x    1135.49\n            y    102.08\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    130\n        label    \"\"\n        graphics\n        [\n            x    639.24\n            y    565.42\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    131\n        label    \"\"\n        graphics\n        [\n            x    1029.37\n            y    139.10\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    132\n        label    \"\"\n        graphics\n        [\n            x    466.28\n            y    1007.82\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    133\n        label    \"\"\n        graphics\n        [\n            x    784.11\n            y    1.65\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    134\n        label    \"\"\n        graphics\n        [\n            x    1081.21\n            y    291.95\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    135\n        label    \"\"\n        graphics\n        [\n            x    66.82\n            y    717.02\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    136\n        label    \"\"\n        graphics\n        [\n            x    751.44\n            y    570.52\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    137\n        label    \"\"\n        graphics\n        [\n            x    988.43\n            y    72.27\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    138\n        label    \"\"\n        graphics\n        [\n            x    501.50\n            y    426.02\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    139\n        label    \"\"\n        graphics\n        [\n            x    1010.68\n            y    805.82\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    140\n        label    \"\"\n        graphics\n        [\n            x    988.85\n            y    997.93\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    141\n        label    \"\"\n        graphics\n        [\n            x    3.70\n            y    634.77\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    142\n        label    \"\"\n        graphics\n        [\n            x    1129.79\n            y    641.13\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    143\n        label    \"\"\n        graphics\n        [\n            x    621.81\n            y    1093.24\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    144\n        label    \"\"\n        graphics\n        [\n            x    219.50\n            y    665.97\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    145\n        label    \"\"\n        graphics\n        [\n            x    247.04\n            y    481.34\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    146\n        label    \"\"\n        graphics\n        [\n            x    500.07\n            y    129.87\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    147\n        label    \"\"\n        graphics\n        [\n            x    134.97\n            y    5.12\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    148\n        label    \"\"\n        graphics\n        [\n            x    538.14\n            y    931.25\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    149\n        label    \"\"\n        graphics\n        [\n            x    733.91\n            y    1162.68\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    150\n        label    \"\"\n        graphics\n        [\n            x    1037.65\n            y    1151.54\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    151\n        label    \"\"\n        graphics\n        [\n            x    428.23\n            y    542.73\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    152\n        label    \"\"\n        graphics\n        [\n            x    1163.98\n            y    383.40\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    153\n        label    \"\"\n        graphics\n        [\n            x    808.64\n            y    1033.53\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    154\n        label    \"\"\n        graphics\n        [\n            x    331.85\n            y    774.24\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    155\n        label    \"\"\n        graphics\n        [\n            x    269.00\n            y    846.93\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    156\n        label    \"\"\n        graphics\n        [\n            x    1080.13\n            y    448.14\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    157\n        label    \"\"\n        graphics\n        [\n            x    241.82\n            y    326.10\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    158\n        label    \"\"\n        graphics\n        [\n            x    404.80\n            y    1031.96\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    159\n        label    \"\"\n        graphics\n        [\n            x    561.08\n            y    433.97\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    160\n        label    \"\"\n        graphics\n        [\n            x    1054.67\n            y    788.87\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    161\n        label    \"\"\n        graphics\n        [\n            x    467.76\n            y    519.95\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    162\n        label    \"\"\n        graphics\n        [\n            x    600.30\n            y    872.23\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    163\n        label    \"\"\n        graphics\n        [\n            x    633.15\n            y    25.33\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    164\n        label    \"\"\n        graphics\n        [\n            x    855.32\n            y    556.28\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    165\n        label    \"\"\n        graphics\n        [\n            x    268.21\n            y    166.08\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    166\n        label    \"\"\n        graphics\n        [\n            x    227.78\n            y    405.40\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    167\n        label    \"\"\n        graphics\n        [\n            x    529.36\n            y    807.53\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    168\n        label    \"\"\n        graphics\n        [\n            x    683.57\n            y    71.34\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    169\n        label    \"\"\n        graphics\n        [\n            x    1162.28\n            y    954.44\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    edge\n    [\n        source    1\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    10\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    100\n        target    56\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    101\n        target    34\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    101\n        target    77\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    102\n        target    106\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    102\n        target    96\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    103\n        target    139\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    103\n        target    71\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    104\n        target    86\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    105\n        target    24\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    106\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    106\n        target    67\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    107\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    108\n        target    144\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    108\n        target    89\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    109\n        target    55\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    11\n        target    151\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    11\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    110\n        target    35\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    111\n        target    108\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    112\n        target    71\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    113\n        target    35\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    114\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    114\n        target    152\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    115\n        target    61\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    116\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    117\n        target    40\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    118\n        target    139\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    118\n        target    25\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    119\n        target    111\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    12\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    120\n        target    84\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    121\n        target    56\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    121\n        target    89\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    122\n        target    41\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    123\n        target    35\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    123\n        target    66\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    124\n        target    112\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    125\n        target    83\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    126\n        target    93\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    127\n        target    108\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    128\n        target    137\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    128\n        target    43\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    129\n        target    36\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    129\n        target    68\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    13\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    130\n        target    70\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    130\n        target    84\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    131\n        target    37\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    132\n        target    119\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    132\n        target    19\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    132\n        target    32\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    133\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    134\n        target    54\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    135\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    136\n        target    84\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    137\n        target    30\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    137\n        target    65\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    138\n        target    128\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    138\n        target    99\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    139\n        target    134\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    14\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    14\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    140\n        target    48\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    141\n        target    100\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    141\n        target    104\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    142\n        target    46\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    143\n        target    119\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    144\n        target    77\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    144\n        target    95\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    145\n        target    105\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    146\n        target    24\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    146\n        target    88\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    147\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    148\n        target    129\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    149\n        target    92\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    15\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    150\n        target    32\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    151\n        target    123\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    151\n        target    34\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    152\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    153\n        target    71\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    154\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    155\n        target    106\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    156\n        target    78\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    157\n        target    32\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    158\n        target    133\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    159\n        target    87\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    159\n        target    90\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    16\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    16\n        target    133\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    16\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    16\n        target    56\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    160\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    161\n        target    142\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    161\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    161\n        target    80\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    162\n        target    125\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    162\n        target    146\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    163\n        target    44\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    164\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    164\n        target    92\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    165\n        target    147\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    166\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    167\n        target    66\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    168\n        target    32\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    169\n        target    141\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    17\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    18\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    19\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    2\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    20\n        target    19\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    21\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    22\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    23\n        target    19\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    23\n        target    42\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    24\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    25\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    26\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    27\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    28\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    29\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    3\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    3\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    30\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    31\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    32\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    33\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    34\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    35\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    36\n        target    145\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    36\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    37\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    37\n        target    19\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    38\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    39\n        target    122\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    39\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    4\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    4\n        target    164\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    40\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    41\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    42\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    43\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    44\n        target    33\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    45\n        target    40\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    45\n        target    78\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    46\n        target    116\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    46\n        target    37\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    47\n        target    44\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    48\n        target    44\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    49\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    49\n        target    90\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    5\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    50\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    51\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    52\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    53\n        target    50\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    54\n        target    31\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    55\n        target    46\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    55\n        target    52\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    56\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    57\n        target    48\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    58\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    59\n        target    128\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    59\n        target    51\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    6\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    60\n        target    55\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    61\n        target    56\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    62\n        target    116\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    62\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    63\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    64\n        target    44\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    64\n        target    83\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    65\n        target    131\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    65\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    66\n        target    127\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    66\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    67\n        target    35\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    68\n        target    24\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    69\n        target    46\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    7\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    70\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    71\n        target    70\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    72\n        target    30\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    73\n        target    60\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    74\n        target    59\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    75\n        target    118\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    75\n        target    44\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    76\n        target    72\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    77\n        target    51\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    78\n        target    109\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    78\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    79\n        target    57\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    8\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    8\n        target    82\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    80\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    81\n        target    72\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    82\n        target    25\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    83\n        target    71\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    84\n        target    66\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    85\n        target    29\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    86\n        target    74\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    87\n        target    84\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    88\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    89\n        target    42\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    9\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    90\n        target    140\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    90\n        target    57\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    91\n        target    89\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    92\n        target    29\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    93\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    93\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    93\n        target    88\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    94\n        target    82\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    95\n        target    74\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    96\n        target    57\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    97\n        target    50\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    98\n        target    42\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    99\n        target    107\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    99\n        target    34\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n]\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v170e221.tglf",
    "content": "0 618.000 364.000 30.000 30.000\n1 525.000 230.000 30.000 30.000\n2 504.000 624.000 30.000 30.000\n3 444.000 882.000 30.000 30.000\n4 891.000 1033.000 30.000 30.000\n5 187.000 701.000 30.000 30.000\n6 512.000 813.000 30.000 30.000\n7 684.000 553.000 30.000 30.000\n8 423.000 714.000 30.000 30.000\n9 566.000 166.000 30.000 30.000\n10 1165.000 1027.000 30.000 30.000\n11 322.000 457.000 30.000 30.000\n12 535.000 258.000 30.000 30.000\n13 692.000 693.000 30.000 30.000\n14 1015.000 190.000 30.000 30.000\n15 621.000 394.000 30.000 30.000\n16 1121.000 1002.000 30.000 30.000\n17 908.000 1135.000 30.000 30.000\n18 970.000 8.000 30.000 30.000\n19 180.000 107.000 30.000 30.000\n20 600.000 297.000 30.000 30.000\n21 1109.000 157.000 30.000 30.000\n22 882.000 205.000 30.000 30.000\n23 784.000 143.000 30.000 30.000\n24 686.000 974.000 30.000 30.000\n25 513.000 352.000 30.000 30.000\n26 748.000 25.000 30.000 30.000\n27 331.000 329.000 30.000 30.000\n28 534.000 955.000 30.000 30.000\n29 816.000 740.000 30.000 30.000\n30 159.000 749.000 30.000 30.000\n31 21.000 330.000 30.000 30.000\n32 186.000 7.000 30.000 30.000\n33 904.000 813.000 30.000 30.000\n34 528.000 968.000 30.000 30.000\n35 368.000 472.000 30.000 30.000\n36 1141.000 74.000 30.000 30.000\n37 275.000 1141.000 30.000 30.000\n38 592.000 871.000 30.000 30.000\n39 43.000 828.000 30.000 30.000\n40 672.000 346.000 30.000 30.000\n41 451.000 917.000 30.000 30.000\n42 1154.000 976.000 30.000 30.000\n43 387.000 752.000 30.000 30.000\n44 511.000 339.000 30.000 30.000\n45 563.000 782.000 30.000 30.000\n46 707.000 1032.000 30.000 30.000\n47 570.000 304.000 30.000 30.000\n48 159.000 162.000 30.000 30.000\n49 800.000 841.000 30.000 30.000\n50 452.000 534.000 30.000 30.000\n51 603.000 517.000 30.000 30.000\n52 176.000 654.000 30.000 30.000\n53 687.000 475.000 30.000 30.000\n54 1110.000 868.000 30.000 30.000\n55 828.000 452.000 30.000 30.000\n56 363.000 1065.000 30.000 30.000\n57 84.000 978.000 30.000 30.000\n58 21.000 278.000 30.000 30.000\n59 567.000 929.000 30.000 30.000\n60 742.000 136.000 30.000 30.000\n61 1158.000 408.000 30.000 30.000\n62 557.000 1111.000 30.000 30.000\n63 115.000 609.000 30.000 30.000\n64 9.000 55.000 30.000 30.000\n65 1127.000 43.000 30.000 30.000\n66 898.000 173.000 30.000 30.000\n67 298.000 973.000 30.000 30.000\n68 979.000 329.000 30.000 30.000\n69 88.000 1020.000 30.000 30.000\n70 277.000 386.000 30.000 30.000\n71 1083.000 894.000 30.000 30.000\n72 407.000 27.000 30.000 30.000\n73 102.000 294.000 30.000 30.000\n74 504.000 594.000 30.000 30.000\n75 1164.000 174.000 30.000 30.000\n76 220.000 649.000 30.000 30.000\n77 858.000 810.000 30.000 30.000\n78 981.000 789.000 30.000 30.000\n79 1042.000 634.000 30.000 30.000\n80 951.000 1002.000 30.000 30.000\n81 169.000 414.000 30.000 30.000\n82 253.000 1087.000 30.000 30.000\n83 1020.000 703.000 30.000 30.000\n84 278.000 341.000 30.000 30.000\n85 130.000 318.000 30.000 30.000\n86 435.000 33.000 30.000 30.000\n87 346.000 203.000 30.000 30.000\n88 284.000 586.000 30.000 30.000\n89 577.000 285.000 30.000 30.000\n90 647.000 1035.000 30.000 30.000\n91 689.000 175.000 30.000 30.000\n92 1099.000 415.000 30.000 30.000\n93 865.000 881.000 30.000 30.000\n94 956.000 918.000 30.000 30.000\n95 874.000 831.000 30.000 30.000\n96 420.000 92.000 30.000 30.000\n97 798.000 446.000 30.000 30.000\n98 419.000 435.000 30.000 30.000\n99 1020.000 742.000 30.000 30.000\n100 191.000 505.000 30.000 30.000\n101 106.000 1152.000 30.000 30.000\n102 194.000 464.000 30.000 30.000\n103 418.000 680.000 30.000 30.000\n104 27.000 1159.000 30.000 30.000\n105 137.000 117.000 30.000 30.000\n106 94.000 821.000 30.000 30.000\n107 160.000 546.000 30.000 30.000\n108 789.000 440.000 30.000 30.000\n109 40.000 1003.000 30.000 30.000\n110 380.000 754.000 30.000 30.000\n111 914.000 263.000 30.000 30.000\n112 944.000 725.000 30.000 30.000\n113 592.000 837.000 30.000 30.000\n114 503.000 241.000 30.000 30.000\n115 342.000 647.000 30.000 30.000\n116 834.000 125.000 30.000 30.000\n117 669.000 211.000 30.000 30.000\n118 70.000 273.000 30.000 30.000\n119 392.000 1082.000 30.000 30.000\n120 365.000 129.000 30.000 30.000\n121 618.000 1036.000 30.000 30.000\n122 394.000 935.000 30.000 30.000\n123 769.000 78.000 30.000 30.000\n124 1035.000 210.000 30.000 30.000\n125 185.000 610.000 30.000 30.000\n126 219.000 241.000 30.000 30.000\n127 594.000 573.000 30.000 30.000\n128 412.000 822.000 30.000 30.000\n129 1135.000 102.000 30.000 30.000\n130 639.000 565.000 30.000 30.000\n131 1029.000 139.000 30.000 30.000\n132 466.000 1007.000 30.000 30.000\n133 784.000 1.000 30.000 30.000\n134 1081.000 291.000 30.000 30.000\n135 66.000 717.000 30.000 30.000\n136 751.000 570.000 30.000 30.000\n137 988.000 72.000 30.000 30.000\n138 501.000 426.000 30.000 30.000\n139 1010.000 805.000 30.000 30.000\n140 988.000 997.000 30.000 30.000\n141 3.000 634.000 30.000 30.000\n142 1129.000 641.000 30.000 30.000\n143 621.000 1093.000 30.000 30.000\n144 219.000 665.000 30.000 30.000\n145 247.000 481.000 30.000 30.000\n146 500.000 129.000 30.000 30.000\n147 134.000 5.000 30.000 30.000\n148 538.000 931.000 30.000 30.000\n149 733.000 1162.000 30.000 30.000\n150 1037.000 1151.000 30.000 30.000\n151 428.000 542.000 30.000 30.000\n152 1163.000 383.000 30.000 30.000\n153 808.000 1033.000 30.000 30.000\n154 331.000 774.000 30.000 30.000\n155 269.000 846.000 30.000 30.000\n156 1080.000 448.000 30.000 30.000\n157 241.000 326.000 30.000 30.000\n158 404.000 1031.000 30.000 30.000\n159 561.000 433.000 30.000 30.000\n160 1054.000 788.000 30.000 30.000\n161 467.000 519.000 30.000 30.000\n162 600.000 872.000 30.000 30.000\n163 633.000 25.000 30.000 30.000\n164 855.000 556.000 30.000 30.000\n165 268.000 166.000 30.000 30.000\n166 227.000 405.000 30.000 30.000\n167 529.000 807.000 30.000 30.000\n168 683.000 71.000 30.000 30.000\n169 1162.000 954.000 30.000 30.000\n#\n37 19\n8 4\n29 17\n58 23\n96 57\n158 133\n70 23\n161 16\n45 40\n161 142\n144 95\n116 2\n68 24\n144 77\n59 51\n111 108\n73 60\n89 42\n69 46\n100 56\n49 90\n19 8\n9 2\n143 119\n67 35\n129 68\n7 2\n36 8\n32 23\n87 84\n23 42\n130 84\n25 4\n11 4\n82 25\n61 56\n161 80\n33 10\n109 55\n47 44\n36 145\n117 40\n128 43\n22 21\n64 44\n39 122\n132 119\n139 134\n146 24\n54 31\n46 116\n28 4\n50 16\n92 29\n165 147\n88 1\n34 10\n75 118\n156 78\n52 17\n21 16\n103 71\n12 5\n42 3\n1 0\n102 96\n166 12\n6 4\n150 32\n102 106\n40 12\n53 50\n65 131\n86 74\n11 151\n30 10\n45 78\n20 19\n101 34\n41 7\n76 72\n3 2\n159 87\n132 32\n152 12\n90 57\n106 67\n122 41\n149 92\n80 8\n107 22\n167 66\n98 42\n151 123\n38 5\n151 34\n62 116\n93 16\n145 105\n16 133\n131 37\n24 22\n93 2\n125 83\n17 1\n35 8\n133 18\n78 23\n105 24\n49 9\n71 70\n14 23\n106 11\n62 7\n5 0\n60 55\n48 44\n160 1\n99 107\n55 52\n110 35\n4 1\n141 100\n83 71\n3 15\n129 36\n114 152\n104 86\n153 71\n90 140\n78 109\n59 128\n16 4\n65 17\n16 56\n163 44\n157 32\n164 92\n135 8\n55 46\n46 37\n113 35\n147 18\n138 99\n141 104\n118 139\n137 65\n124 112\n114 0\n84 66\n43 0\n37 10\n148 129\n108 89\n134 54\n2 1\n64 83\n51 3\n168 32\n154 9\n137 30\n79 57\n118 25\n115 61\n85 29\n146 88\n140 48\n101 77\n14 5\n123 66\n81 72\n10 2\n75 44\n8 82\n112 71\n66 18\n130 70\n27 7\n95 74\n103 139\n136 84\n169 141\n31 13\n162 125\n159 90\n63 6\n15 10\n132 19\n72 30\n128 137\n162 146\n23 19\n26 8\n16 10\n77 51\n123 35\n119 111\n108 144\n164 22\n142 46\n121 56\n66 127\n39 4\n126 93\n91 89\n4 164\n155 106\n18 4\n57 48\n13 10\n127 108\n138 128\n94 82\n97 50\n56 9\n74 59\n121 89\n99 34\n44 33\n120 84\n93 88\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v170e238.gml",
    "content": "graph\n[\n    node\n    [\n        id    0\n        label    \"\"\n        graphics\n        [\n            x    31.72\n            y    948.74\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    1\n        label    \"\"\n        graphics\n        [\n            x    879.52\n            y    466.05\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    2\n        label    \"\"\n        graphics\n        [\n            x    116.03\n            y    276.05\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    3\n        label    \"\"\n        graphics\n        [\n            x    295.26\n            y    929.34\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    4\n        label    \"\"\n        graphics\n        [\n            x    619.00\n            y    69.94\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    5\n        label    \"\"\n        graphics\n        [\n            x    1075.10\n            y    372.56\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    6\n        label    \"\"\n        graphics\n        [\n            x    251.90\n            y    749.99\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    7\n        label    \"\"\n        graphics\n        [\n            x    637.18\n            y    616.15\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    8\n        label    \"\"\n        graphics\n        [\n            x    1098.55\n            y    183.09\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    9\n        label    \"\"\n        graphics\n        [\n            x    365.67\n            y    1139.97\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    10\n        label    \"\"\n        graphics\n        [\n            x    1027.71\n            y    476.05\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    11\n        label    \"\"\n        graphics\n        [\n            x    650.65\n            y    1111.09\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    12\n        label    \"\"\n        graphics\n        [\n            x    910.48\n            y    1032.19\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    13\n        label    \"\"\n        graphics\n        [\n            x    302.74\n            y    56.12\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    14\n        label    \"\"\n        graphics\n        [\n            x    630.47\n            y    538.47\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    15\n        label    \"\"\n        graphics\n        [\n            x    744.16\n            y    757.47\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    16\n        label    \"\"\n        graphics\n        [\n            x    660.31\n            y    81.85\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    17\n        label    \"\"\n        graphics\n        [\n            x    99.30\n            y    676.39\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    18\n        label    \"\"\n        graphics\n        [\n            x    684.74\n            y    1006.08\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    19\n        label    \"\"\n        graphics\n        [\n            x    193.25\n            y    291.16\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    20\n        label    \"\"\n        graphics\n        [\n            x    723.47\n            y    59.82\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    21\n        label    \"\"\n        graphics\n        [\n            x    717.82\n            y    67.03\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    22\n        label    \"\"\n        graphics\n        [\n            x    759.34\n            y    570.56\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    23\n        label    \"\"\n        graphics\n        [\n            x    223.90\n            y    688.60\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    24\n        label    \"\"\n        graphics\n        [\n            x    92.43\n            y    341.93\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    25\n        label    \"\"\n        graphics\n        [\n            x    1031.27\n            y    787.26\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    26\n        label    \"\"\n        graphics\n        [\n            x    901.13\n            y    169.26\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    27\n        label    \"\"\n        graphics\n        [\n            x    243.85\n            y    15.25\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    28\n        label    \"\"\n        graphics\n        [\n            x    20.09\n            y    442.92\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    29\n        label    \"\"\n        graphics\n        [\n            x    158.91\n            y    16.22\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    30\n        label    \"\"\n        graphics\n        [\n            x    110.80\n            y    568.32\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    31\n        label    \"\"\n        graphics\n        [\n            x    508.11\n            y    206.74\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    32\n        label    \"\"\n        graphics\n        [\n            x    357.26\n            y    25.67\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    33\n        label    \"\"\n        graphics\n        [\n            x    809.31\n            y    684.14\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    34\n        label    \"\"\n        graphics\n        [\n            x    423.92\n            y    249.22\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    35\n        label    \"\"\n        graphics\n        [\n            x    727.62\n            y    74.15\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    36\n        label    \"\"\n        graphics\n        [\n            x    888.50\n            y    1021.10\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    37\n        label    \"\"\n        graphics\n        [\n            x    281.47\n            y    756.41\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    38\n        label    \"\"\n        graphics\n        [\n            x    1061.20\n            y    22.84\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    39\n        label    \"\"\n        graphics\n        [\n            x    509.27\n            y    699.72\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    40\n        label    \"\"\n        graphics\n        [\n            x    351.32\n            y    517.96\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    41\n        label    \"\"\n        graphics\n        [\n            x    549.36\n            y    28.31\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    42\n        label    \"\"\n        graphics\n        [\n            x    736.10\n            y    498.91\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    43\n        label    \"\"\n        graphics\n        [\n            x    896.78\n            y    973.82\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    44\n        label    \"\"\n        graphics\n        [\n            x    405.85\n            y    1029.19\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    45\n        label    \"\"\n        graphics\n        [\n            x    620.03\n            y    607.32\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    46\n        label    \"\"\n        graphics\n        [\n            x    1051.88\n            y    376.85\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    47\n        label    \"\"\n        graphics\n        [\n            x    211.57\n            y    491.41\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    48\n        label    \"\"\n        graphics\n        [\n            x    513.35\n            y    736.52\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    49\n        label    \"\"\n        graphics\n        [\n            x    113.92\n            y    565.04\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    50\n        label    \"\"\n        graphics\n        [\n            x    783.61\n            y    1015.38\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    51\n        label    \"\"\n        graphics\n        [\n            x    7.55\n            y    215.28\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    52\n        label    \"\"\n        graphics\n        [\n            x    382.52\n            y    453.16\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    53\n        label    \"\"\n        graphics\n        [\n            x    808.14\n            y    772.65\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    54\n        label    \"\"\n        graphics\n        [\n            x    1045.23\n            y    1168.10\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    55\n        label    \"\"\n        graphics\n        [\n            x    284.39\n            y    941.64\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    56\n        label    \"\"\n        graphics\n        [\n            x    908.50\n            y    639.54\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    57\n        label    \"\"\n        graphics\n        [\n            x    546.11\n            y    472.11\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    58\n        label    \"\"\n        graphics\n        [\n            x    787.54\n            y    282.47\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    59\n        label    \"\"\n        graphics\n        [\n            x    736.60\n            y    724.60\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    60\n        label    \"\"\n        graphics\n        [\n            x    1105.59\n            y    555.11\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    61\n        label    \"\"\n        graphics\n        [\n            x    641.45\n            y    531.89\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    62\n        label    \"\"\n        graphics\n        [\n            x    1165.45\n            y    1021.47\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    63\n        label    \"\"\n        graphics\n        [\n            x    672.19\n            y    206.24\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    64\n        label    \"\"\n        graphics\n        [\n            x    856.21\n            y    774.01\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    65\n        label    \"\"\n        graphics\n        [\n            x    181.99\n            y    756.65\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    66\n        label    \"\"\n        graphics\n        [\n            x    359.78\n            y    26.35\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    67\n        label    \"\"\n        graphics\n        [\n            x    594.52\n            y    633.95\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    68\n        label    \"\"\n        graphics\n        [\n            x    832.22\n            y    1055.39\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    69\n        label    \"\"\n        graphics\n        [\n            x    798.10\n            y    939.28\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    70\n        label    \"\"\n        graphics\n        [\n            x    220.31\n            y    1087.73\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    71\n        label    \"\"\n        graphics\n        [\n            x    13.06\n            y    31.93\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    72\n        label    \"\"\n        graphics\n        [\n            x    1083.03\n            y    1041.38\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    73\n        label    \"\"\n        graphics\n        [\n            x    486.41\n            y    517.34\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    74\n        label    \"\"\n        graphics\n        [\n            x    407.24\n            y    962.55\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    75\n        label    \"\"\n        graphics\n        [\n            x    571.56\n            y    372.43\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    76\n        label    \"\"\n        graphics\n        [\n            x    377.84\n            y    1042.30\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    77\n        label    \"\"\n        graphics\n        [\n            x    963.63\n            y    756.88\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    78\n        label    \"\"\n        graphics\n        [\n            x    1000.49\n            y    786.67\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    79\n        label    \"\"\n        graphics\n        [\n            x    747.76\n            y    996.52\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    80\n        label    \"\"\n        graphics\n        [\n            x    940.80\n            y    402.65\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    81\n        label    \"\"\n        graphics\n        [\n            x    63.55\n            y    544.16\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    82\n        label    \"\"\n        graphics\n        [\n            x    1170.87\n            y    840.10\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    83\n        label    \"\"\n        graphics\n        [\n            x    374.91\n            y    730.08\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    84\n        label    \"\"\n        graphics\n        [\n            x    11.37\n            y    3.43\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    85\n        label    \"\"\n        graphics\n        [\n            x    989.19\n            y    1113.69\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    86\n        label    \"\"\n        graphics\n        [\n            x    35.87\n            y    152.39\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    87\n        label    \"\"\n        graphics\n        [\n            x    894.18\n            y    915.21\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    88\n        label    \"\"\n        graphics\n        [\n            x    1036.28\n            y    45.04\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    89\n        label    \"\"\n        graphics\n        [\n            x    954.46\n            y    1153.95\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    90\n        label    \"\"\n        graphics\n        [\n            x    915.51\n            y    1163.60\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    91\n        label    \"\"\n        graphics\n        [\n            x    980.45\n            y    463.40\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    92\n        label    \"\"\n        graphics\n        [\n            x    665.41\n            y    625.46\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    93\n        label    \"\"\n        graphics\n        [\n            x    268.39\n            y    104.31\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    94\n        label    \"\"\n        graphics\n        [\n            x    1150.34\n            y    1115.25\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    95\n        label    \"\"\n        graphics\n        [\n            x    1137.91\n            y    460.99\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    96\n        label    \"\"\n        graphics\n        [\n            x    651.66\n            y    217.85\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    97\n        label    \"\"\n        graphics\n        [\n            x    148.76\n            y    166.63\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    98\n        label    \"\"\n        graphics\n        [\n            x    862.72\n            y    211.65\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    99\n        label    \"\"\n        graphics\n        [\n            x    9.11\n            y    609.30\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    100\n        label    \"\"\n        graphics\n        [\n            x    1121.30\n            y    141.76\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    101\n        label    \"\"\n        graphics\n        [\n            x    878.44\n            y    939.75\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    102\n        label    \"\"\n        graphics\n        [\n            x    568.15\n            y    1099.01\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    103\n        label    \"\"\n        graphics\n        [\n            x    946.94\n            y    500.46\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    104\n        label    \"\"\n        graphics\n        [\n            x    52.78\n            y    301.51\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    105\n        label    \"\"\n        graphics\n        [\n            x    912.34\n            y    226.64\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    106\n        label    \"\"\n        graphics\n        [\n            x    966.04\n            y    778.99\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    107\n        label    \"\"\n        graphics\n        [\n            x    70.30\n            y    853.47\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    108\n        label    \"\"\n        graphics\n        [\n            x    825.02\n            y    812.40\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    109\n        label    \"\"\n        graphics\n        [\n            x    364.34\n            y    770.29\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    110\n        label    \"\"\n        graphics\n        [\n            x    897.42\n            y    838.43\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    111\n        label    \"\"\n        graphics\n        [\n            x    332.13\n            y    50.91\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    112\n        label    \"\"\n        graphics\n        [\n            x    959.69\n            y    840.85\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    113\n        label    \"\"\n        graphics\n        [\n            x    780.81\n            y    1131.76\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    114\n        label    \"\"\n        graphics\n        [\n            x    160.04\n            y    570.75\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    115\n        label    \"\"\n        graphics\n        [\n            x    653.83\n            y    480.34\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    116\n        label    \"\"\n        graphics\n        [\n            x    569.40\n            y    151.15\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    117\n        label    \"\"\n        graphics\n        [\n            x    907.76\n            y    819.79\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    118\n        label    \"\"\n        graphics\n        [\n            x    188.59\n            y    9.90\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    119\n        label    \"\"\n        graphics\n        [\n            x    1098.36\n            y    1066.98\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    120\n        label    \"\"\n        graphics\n        [\n            x    140.39\n            y    381.31\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    121\n        label    \"\"\n        graphics\n        [\n            x    291.47\n            y    396.43\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    122\n        label    \"\"\n        graphics\n        [\n            x    97.14\n            y    803.27\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    123\n        label    \"\"\n        graphics\n        [\n            x    436.55\n            y    11.37\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    124\n        label    \"\"\n        graphics\n        [\n            x    1069.16\n            y    677.80\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    125\n        label    \"\"\n        graphics\n        [\n            x    143.43\n            y    1171.68\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    126\n        label    \"\"\n        graphics\n        [\n            x    866.61\n            y    1129.17\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    127\n        label    \"\"\n        graphics\n        [\n            x    885.96\n            y    866.05\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    128\n        label    \"\"\n        graphics\n        [\n            x    50.92\n            y    734.77\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    129\n        label    \"\"\n        graphics\n        [\n            x    482.27\n            y    696.01\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    130\n        label    \"\"\n        graphics\n        [\n            x    743.58\n            y    777.67\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    131\n        label    \"\"\n        graphics\n        [\n            x    1084.31\n            y    243.49\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    132\n        label    \"\"\n        graphics\n        [\n            x    1025.57\n            y    389.53\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    133\n        label    \"\"\n        graphics\n        [\n            x    1056.56\n            y    94.07\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    134\n        label    \"\"\n        graphics\n        [\n            x    789.35\n            y    880.50\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    135\n        label    \"\"\n        graphics\n        [\n            x    504.52\n            y    458.50\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    136\n        label    \"\"\n        graphics\n        [\n            x    378.75\n            y    581.24\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    137\n        label    \"\"\n        graphics\n        [\n            x    739.86\n            y    43.50\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    138\n        label    \"\"\n        graphics\n        [\n            x    1035.91\n            y    865.53\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    139\n        label    \"\"\n        graphics\n        [\n            x    926.49\n            y    1166.16\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    140\n        label    \"\"\n        graphics\n        [\n            x    402.85\n            y    1094.16\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    141\n        label    \"\"\n        graphics\n        [\n            x    675.79\n            y    818.47\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    142\n        label    \"\"\n        graphics\n        [\n            x    816.53\n            y    9.15\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    143\n        label    \"\"\n        graphics\n        [\n            x    382.73\n            y    709.85\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    144\n        label    \"\"\n        graphics\n        [\n            x    905.57\n            y    789.67\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    145\n        label    \"\"\n        graphics\n        [\n            x    1093.16\n            y    983.35\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    146\n        label    \"\"\n        graphics\n        [\n            x    533.05\n            y    794.28\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    147\n        label    \"\"\n        graphics\n        [\n            x    475.79\n            y    125.10\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    148\n        label    \"\"\n        graphics\n        [\n            x    159.87\n            y    850.04\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    149\n        label    \"\"\n        graphics\n        [\n            x    289.49\n            y    1172.52\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    150\n        label    \"\"\n        graphics\n        [\n            x    1095.55\n            y    76.44\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    151\n        label    \"\"\n        graphics\n        [\n            x    974.53\n            y    21.55\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    152\n        label    \"\"\n        graphics\n        [\n            x    720.18\n            y    787.15\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    153\n        label    \"\"\n        graphics\n        [\n            x    1078.74\n            y    310.01\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    154\n        label    \"\"\n        graphics\n        [\n            x    417.55\n            y    1096.13\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    155\n        label    \"\"\n        graphics\n        [\n            x    897.40\n            y    652.12\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    156\n        label    \"\"\n        graphics\n        [\n            x    932.50\n            y    349.95\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    157\n        label    \"\"\n        graphics\n        [\n            x    493.04\n            y    159.43\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    158\n        label    \"\"\n        graphics\n        [\n            x    461.40\n            y    981.52\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    159\n        label    \"\"\n        graphics\n        [\n            x    351.15\n            y    579.55\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    160\n        label    \"\"\n        graphics\n        [\n            x    1093.26\n            y    10.00\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    161\n        label    \"\"\n        graphics\n        [\n            x    694.51\n            y    12.76\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    162\n        label    \"\"\n        graphics\n        [\n            x    147.32\n            y    24.58\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    163\n        label    \"\"\n        graphics\n        [\n            x    515.96\n            y    639.83\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    164\n        label    \"\"\n        graphics\n        [\n            x    1132.98\n            y    779.85\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    165\n        label    \"\"\n        graphics\n        [\n            x    327.76\n            y    965.89\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    166\n        label    \"\"\n        graphics\n        [\n            x    1165.48\n            y    803.45\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    167\n        label    \"\"\n        graphics\n        [\n            x    68.76\n            y    913.07\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    168\n        label    \"\"\n        graphics\n        [\n            x    934.98\n            y    571.37\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    169\n        label    \"\"\n        graphics\n        [\n            x    720.94\n            y    525.06\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    edge\n    [\n        source    0\n        target    24\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    1\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    1\n        target    63\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    10\n        target    73\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    10\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    100\n        target    92\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    101\n        target    39\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    101\n        target    68\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    102\n        target    54\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    103\n        target    81\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    104\n        target    52\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    105\n        target    31\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    106\n        target    65\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    106\n        target    93\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    107\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    108\n        target    66\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    108\n        target    92\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    109\n        target    44\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    109\n        target    93\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    11\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    110\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    110\n        target    34\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    111\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    112\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    113\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    113\n        target    97\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    114\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    115\n        target    69\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    116\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    117\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    117\n        target    84\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    118\n        target    108\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    119\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    12\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    120\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    120\n        target    74\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    121\n        target    165\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    121\n        target    25\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    121\n        target    42\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    122\n        target    91\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    123\n        target    88\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    124\n        target    83\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    125\n        target    158\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    125\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    125\n        target    48\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    126\n        target    48\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    126\n        target    61\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    127\n        target    61\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    128\n        target    101\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    129\n        target    93\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    13\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    130\n        target    129\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    131\n        target    124\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    131\n        target    68\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    132\n        target    86\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    132\n        target    88\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    133\n        target    30\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    134\n        target    42\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    135\n        target    107\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    135\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    136\n        target    119\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    137\n        target    67\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    137\n        target    90\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    138\n        target    82\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    139\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    14\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    140\n        target    91\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    141\n        target    46\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    142\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    143\n        target    125\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    143\n        target    20\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    143\n        target    68\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    143\n        target    96\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    144\n        target    115\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    145\n        target    20\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    146\n        target    102\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    146\n        target    128\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    147\n        target    104\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    147\n        target    118\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    147\n        target    56\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    148\n        target    87\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    149\n        target    31\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    15\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    150\n        target    122\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    151\n        target    160\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    151\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    151\n        target    64\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    151\n        target    83\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    152\n        target    114\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    153\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    154\n        target    33\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    155\n        target    118\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    156\n        target    85\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    157\n        target    114\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    157\n        target    33\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    158\n        target    73\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    159\n        target    128\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    159\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    159\n        target    67\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    16\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    160\n        target    109\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    160\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    161\n        target    93\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    162\n        target    54\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    163\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    163\n        target    66\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    164\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    164\n        target    66\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    165\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    165\n        target    29\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    166\n        target    68\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    166\n        target    96\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    167\n        target    62\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    168\n        target    156\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    169\n        target    34\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    17\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    18\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    19\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    2\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    2\n        target    129\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    2\n        target    37\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    20\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    21\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    21\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    22\n        target    129\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    22\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    23\n        target    115\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    23\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    24\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    24\n        target    20\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    25\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    26\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    27\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    28\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    29\n        target    124\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    29\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    3\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    30\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    31\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    32\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    33\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    34\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    35\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    36\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    37\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    38\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    39\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    4\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    40\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    41\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    42\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    43\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    43\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    44\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    45\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    45\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    46\n        target    37\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    47\n        target    33\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    48\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    49\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    49\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    5\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    50\n        target    19\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    50\n        target    26\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    51\n        target    47\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    51\n        target    66\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    52\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    53\n        target    37\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    53\n        target    90\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    54\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    55\n        target    45\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    56\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    56\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    57\n        target    30\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    58\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    58\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    59\n        target    35\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    6\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    60\n        target    41\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    60\n        target    87\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    61\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    62\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    62\n        target    30\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    63\n        target    59\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    64\n        target    43\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    65\n        target    56\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    66\n        target    27\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    66\n        target    96\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    67\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    68\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    69\n        target    141\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    69\n        target    49\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    7\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    70\n        target    30\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    71\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    71\n        target    80\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    72\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    73\n        target    48\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    74\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    75\n        target    57\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    75\n        target    73\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    76\n        target    43\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    77\n        target    44\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    77\n        target    87\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    78\n        target    155\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    78\n        target    54\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    79\n        target    146\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    79\n        target    157\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    79\n        target    39\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    8\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    80\n        target    48\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    81\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    82\n        target    154\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    82\n        target    28\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    83\n        target    74\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    84\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    85\n        target    61\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    86\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    86\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    86\n        target    69\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    87\n        target    78\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    88\n        target    76\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    89\n        target    86\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    9\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    9\n        target    46\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    90\n        target    27\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    90\n        target    69\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    91\n        target    63\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    92\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    93\n        target    70\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    94\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    95\n        target    42\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    96\n        target    42\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    97\n        target    66\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    97\n        target    69\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    98\n        target    61\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    98\n        target    94\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    99\n        target    58\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n]\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v170e238.tglf",
    "content": "0 31.000 948.000 30.000 30.000\n1 879.000 466.000 30.000 30.000\n2 116.000 276.000 30.000 30.000\n3 295.000 929.000 30.000 30.000\n4 619.000 69.000 30.000 30.000\n5 1075.000 372.000 30.000 30.000\n6 251.000 749.000 30.000 30.000\n7 637.000 616.000 30.000 30.000\n8 1098.000 183.000 30.000 30.000\n9 365.000 1139.000 30.000 30.000\n10 1027.000 476.000 30.000 30.000\n11 650.000 1111.000 30.000 30.000\n12 910.000 1032.000 30.000 30.000\n13 302.000 56.000 30.000 30.000\n14 630.000 538.000 30.000 30.000\n15 744.000 757.000 30.000 30.000\n16 660.000 81.000 30.000 30.000\n17 99.000 676.000 30.000 30.000\n18 684.000 1006.000 30.000 30.000\n19 193.000 291.000 30.000 30.000\n20 723.000 59.000 30.000 30.000\n21 717.000 67.000 30.000 30.000\n22 759.000 570.000 30.000 30.000\n23 223.000 688.000 30.000 30.000\n24 92.000 341.000 30.000 30.000\n25 1031.000 787.000 30.000 30.000\n26 901.000 169.000 30.000 30.000\n27 243.000 15.000 30.000 30.000\n28 20.000 442.000 30.000 30.000\n29 158.000 16.000 30.000 30.000\n30 110.000 568.000 30.000 30.000\n31 508.000 206.000 30.000 30.000\n32 357.000 25.000 30.000 30.000\n33 809.000 684.000 30.000 30.000\n34 423.000 249.000 30.000 30.000\n35 727.000 74.000 30.000 30.000\n36 888.000 1021.000 30.000 30.000\n37 281.000 756.000 30.000 30.000\n38 1061.000 22.000 30.000 30.000\n39 509.000 699.000 30.000 30.000\n40 351.000 517.000 30.000 30.000\n41 549.000 28.000 30.000 30.000\n42 736.000 498.000 30.000 30.000\n43 896.000 973.000 30.000 30.000\n44 405.000 1029.000 30.000 30.000\n45 620.000 607.000 30.000 30.000\n46 1051.000 376.000 30.000 30.000\n47 211.000 491.000 30.000 30.000\n48 513.000 736.000 30.000 30.000\n49 113.000 565.000 30.000 30.000\n50 783.000 1015.000 30.000 30.000\n51 7.000 215.000 30.000 30.000\n52 382.000 453.000 30.000 30.000\n53 808.000 772.000 30.000 30.000\n54 1045.000 1168.000 30.000 30.000\n55 284.000 941.000 30.000 30.000\n56 908.000 639.000 30.000 30.000\n57 546.000 472.000 30.000 30.000\n58 787.000 282.000 30.000 30.000\n59 736.000 724.000 30.000 30.000\n60 1105.000 555.000 30.000 30.000\n61 641.000 531.000 30.000 30.000\n62 1165.000 1021.000 30.000 30.000\n63 672.000 206.000 30.000 30.000\n64 856.000 774.000 30.000 30.000\n65 181.000 756.000 30.000 30.000\n66 359.000 26.000 30.000 30.000\n67 594.000 633.000 30.000 30.000\n68 832.000 1055.000 30.000 30.000\n69 798.000 939.000 30.000 30.000\n70 220.000 1087.000 30.000 30.000\n71 13.000 31.000 30.000 30.000\n72 1083.000 1041.000 30.000 30.000\n73 486.000 517.000 30.000 30.000\n74 407.000 962.000 30.000 30.000\n75 571.000 372.000 30.000 30.000\n76 377.000 1042.000 30.000 30.000\n77 963.000 756.000 30.000 30.000\n78 1000.000 786.000 30.000 30.000\n79 747.000 996.000 30.000 30.000\n80 940.000 402.000 30.000 30.000\n81 63.000 544.000 30.000 30.000\n82 1170.000 840.000 30.000 30.000\n83 374.000 730.000 30.000 30.000\n84 11.000 3.000 30.000 30.000\n85 989.000 1113.000 30.000 30.000\n86 35.000 152.000 30.000 30.000\n87 894.000 915.000 30.000 30.000\n88 1036.000 45.000 30.000 30.000\n89 954.000 1153.000 30.000 30.000\n90 915.000 1163.000 30.000 30.000\n91 980.000 463.000 30.000 30.000\n92 665.000 625.000 30.000 30.000\n93 268.000 104.000 30.000 30.000\n94 1150.000 1115.000 30.000 30.000\n95 1137.000 460.000 30.000 30.000\n96 651.000 217.000 30.000 30.000\n97 148.000 166.000 30.000 30.000\n98 862.000 211.000 30.000 30.000\n99 9.000 609.000 30.000 30.000\n100 1121.000 141.000 30.000 30.000\n101 878.000 939.000 30.000 30.000\n102 568.000 1099.000 30.000 30.000\n103 946.000 500.000 30.000 30.000\n104 52.000 301.000 30.000 30.000\n105 912.000 226.000 30.000 30.000\n106 966.000 778.000 30.000 30.000\n107 70.000 853.000 30.000 30.000\n108 825.000 812.000 30.000 30.000\n109 364.000 770.000 30.000 30.000\n110 897.000 838.000 30.000 30.000\n111 332.000 50.000 30.000 30.000\n112 959.000 840.000 30.000 30.000\n113 780.000 1131.000 30.000 30.000\n114 160.000 570.000 30.000 30.000\n115 653.000 480.000 30.000 30.000\n116 569.000 151.000 30.000 30.000\n117 907.000 819.000 30.000 30.000\n118 188.000 9.000 30.000 30.000\n119 1098.000 1066.000 30.000 30.000\n120 140.000 381.000 30.000 30.000\n121 291.000 396.000 30.000 30.000\n122 97.000 803.000 30.000 30.000\n123 436.000 11.000 30.000 30.000\n124 1069.000 677.000 30.000 30.000\n125 143.000 1171.000 30.000 30.000\n126 866.000 1129.000 30.000 30.000\n127 885.000 866.000 30.000 30.000\n128 50.000 734.000 30.000 30.000\n129 482.000 696.000 30.000 30.000\n130 743.000 777.000 30.000 30.000\n131 1084.000 243.000 30.000 30.000\n132 1025.000 389.000 30.000 30.000\n133 1056.000 94.000 30.000 30.000\n134 789.000 880.000 30.000 30.000\n135 504.000 458.000 30.000 30.000\n136 378.000 581.000 30.000 30.000\n137 739.000 43.000 30.000 30.000\n138 1035.000 865.000 30.000 30.000\n139 926.000 1166.000 30.000 30.000\n140 402.000 1094.000 30.000 30.000\n141 675.000 818.000 30.000 30.000\n142 816.000 9.000 30.000 30.000\n143 382.000 709.000 30.000 30.000\n144 905.000 789.000 30.000 30.000\n145 1093.000 983.000 30.000 30.000\n146 533.000 794.000 30.000 30.000\n147 475.000 125.000 30.000 30.000\n148 159.000 850.000 30.000 30.000\n149 289.000 1172.000 30.000 30.000\n150 1095.000 76.000 30.000 30.000\n151 974.000 21.000 30.000 30.000\n152 720.000 787.000 30.000 30.000\n153 1078.000 310.000 30.000 30.000\n154 417.000 1096.000 30.000 30.000\n155 897.000 652.000 30.000 30.000\n156 932.000 349.000 30.000 30.000\n157 493.000 159.000 30.000 30.000\n158 461.000 981.000 30.000 30.000\n159 351.000 579.000 30.000 30.000\n160 1093.000 10.000 30.000 30.000\n161 694.000 12.000 30.000 30.000\n162 147.000 24.000 30.000 30.000\n163 515.000 639.000 30.000 30.000\n164 1132.000 779.000 30.000 30.000\n165 327.000 965.000 30.000 30.000\n166 1165.000 803.000 30.000 30.000\n167 68.000 913.000 30.000 30.000\n168 934.000 571.000 30.000 30.000\n169 720.000 525.000 30.000 30.000\n#\n35 9\n59 35\n61 10\n155 118\n31 12\n46 37\n94 12\n147 104\n150 122\n42 3\n164 66\n54 4\n97 66\n125 48\n117 84\n160 109\n58 17\n143 68\n37 7\n117 13\n76 43\n8 2\n62 0\n139 6\n121 42\n66 96\n43 4\n137 90\n100 92\n109 44\n109 93\n47 33\n21 6\n7 5\n103 81\n11 3\n140 91\n86 14\n97 69\n157 114\n2 129\n65 56\n165 2\n22 129\n116 9\n82 28\n168 156\n0 24\n142 17\n143 20\n3 2\n162 54\n132 88\n149 31\n110 34\n130 129\n28 6\n96 42\n151 83\n52 2\n145 20\n169 34\n72 0\n147 118\n6 1\n113 14\n113 97\n124 83\n104 52\n68 15\n51 47\n22 7\n166 68\n14 3\n147 56\n63 59\n49 1\n159 67\n82 154\n126 48\n1 63\n32 11\n19 2\n154 33\n126 61\n102 54\n91 63\n123 88\n16 2\n78 54\n2 0\n56 11\n73 48\n90 69\n17 12\n143 96\n29 124\n146 128\n159 128\n112 21\n79 39\n50 19\n75 57\n166 96\n125 158\n99 58\n9 46\n131 68\n78 155\n41 1\n143 125\n121 25\n108 66\n45 16\n135 18\n49 12\n89 86\n101 68\n40 13\n95 42\n44 7\n4 3\n106 65\n120 74\n153 13\n158 73\n110 0\n98 61\n79 157\n101 39\n45 10\n144 115\n10 8\n115 69\n165 29\n1 0\n79 146\n151 160\n34 16\n107 2\n20 11\n38 8\n23 115\n160 16\n146 102\n122 91\n88 76\n53 37\n77 44\n156 85\n85 61\n64 43\n15 8\n58 15\n30 21\n13 4\n106 93\n129 93\n27 23\n57 30\n148 87\n39 21\n77 87\n71 80\n161 93\n67 4\n50 26\n55 45\n86 15\n120 12\n151 2\n81 22\n53 90\n29 22\n56 18\n137 67\n43 22\n157 33\n51 66\n163 66\n25 4\n18 4\n24 14\n83 74\n141 46\n135 107\n23 9\n151 64\n74 23\n136 119\n121 165\n86 69\n9 1\n21 5\n127 61\n33 12\n92 10\n111 5\n134 42\n70 30\n167 62\n90 27\n62 30\n66 27\n60 41\n98 94\n87 78\n132 86\n48 9\n138 82\n133 30\n60 87\n12 6\n80 48\n108 92\n105 31\n131 124\n128 101\n84 5\n152 114\n118 108\n93 70\n119 17\n69 141\n24 20\n26 15\n159 15\n2 37\n75 73\n164 2\n163 3\n5 3\n69 49\n10 73\n71 8\n125 17\n114 9\n36 11\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v170e255.gml",
    "content": "graph\n[\n    node\n    [\n        id    0\n        label    \"\"\n        graphics\n        [\n            x    927.13\n            y    316.00\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    1\n        label    \"\"\n        graphics\n        [\n            x    996.19\n            y    464.75\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    2\n        label    \"\"\n        graphics\n        [\n            x    946.26\n            y    173.56\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    3\n        label    \"\"\n        graphics\n        [\n            x    631.77\n            y    607.55\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    4\n        label    \"\"\n        graphics\n        [\n            x    754.05\n            y    943.43\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    5\n        label    \"\"\n        graphics\n        [\n            x    959.69\n            y    1141.11\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    6\n        label    \"\"\n        graphics\n        [\n            x    1145.89\n            y    793.50\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    7\n        label    \"\"\n        graphics\n        [\n            x    74.95\n            y    896.15\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    8\n        label    \"\"\n        graphics\n        [\n            x    114.97\n            y    589.61\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    9\n        label    \"\"\n        graphics\n        [\n            x    853.62\n            y    414.80\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    10\n        label    \"\"\n        graphics\n        [\n            x    386.20\n            y    92.68\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    11\n        label    \"\"\n        graphics\n        [\n            x    1019.09\n            y    1098.87\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    12\n        label    \"\"\n        graphics\n        [\n            x    76.00\n            y    1044.45\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    13\n        label    \"\"\n        graphics\n        [\n            x    295.62\n            y    29.00\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    14\n        label    \"\"\n        graphics\n        [\n            x    956.66\n            y    881.63\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    15\n        label    \"\"\n        graphics\n        [\n            x    450.57\n            y    412.43\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    16\n        label    \"\"\n        graphics\n        [\n            x    421.42\n            y    157.46\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    17\n        label    \"\"\n        graphics\n        [\n            x    807.39\n            y    566.04\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    18\n        label    \"\"\n        graphics\n        [\n            x    316.41\n            y    720.52\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    19\n        label    \"\"\n        graphics\n        [\n            x    479.77\n            y    232.44\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    20\n        label    \"\"\n        graphics\n        [\n            x    620.91\n            y    729.30\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    21\n        label    \"\"\n        graphics\n        [\n            x    872.98\n            y    215.94\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    22\n        label    \"\"\n        graphics\n        [\n            x    537.27\n            y    784.27\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    23\n        label    \"\"\n        graphics\n        [\n            x    283.01\n            y    1163.96\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    24\n        label    \"\"\n        graphics\n        [\n            x    373.94\n            y    436.46\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    25\n        label    \"\"\n        graphics\n        [\n            x    138.95\n            y    351.04\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    26\n        label    \"\"\n        graphics\n        [\n            x    751.49\n            y    411.02\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    27\n        label    \"\"\n        graphics\n        [\n            x    1099.51\n            y    844.06\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    28\n        label    \"\"\n        graphics\n        [\n            x    833.84\n            y    80.24\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    29\n        label    \"\"\n        graphics\n        [\n            x    283.90\n            y    711.27\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    30\n        label    \"\"\n        graphics\n        [\n            x    314.10\n            y    314.73\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    31\n        label    \"\"\n        graphics\n        [\n            x    921.91\n            y    330.35\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    32\n        label    \"\"\n        graphics\n        [\n            x    341.34\n            y    66.84\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    33\n        label    \"\"\n        graphics\n        [\n            x    829.70\n            y    161.22\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    34\n        label    \"\"\n        graphics\n        [\n            x    907.38\n            y    582.60\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    35\n        label    \"\"\n        graphics\n        [\n            x    666.29\n            y    507.41\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    36\n        label    \"\"\n        graphics\n        [\n            x    362.45\n            y    1148.56\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    37\n        label    \"\"\n        graphics\n        [\n            x    117.94\n            y    537.48\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    38\n        label    \"\"\n        graphics\n        [\n            x    650.50\n            y    1158.47\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    39\n        label    \"\"\n        graphics\n        [\n            x    889.08\n            y    698.70\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    40\n        label    \"\"\n        graphics\n        [\n            x    975.64\n            y    744.67\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    41\n        label    \"\"\n        graphics\n        [\n            x    1090.00\n            y    152.85\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    42\n        label    \"\"\n        graphics\n        [\n            x    93.94\n            y    1040.69\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    43\n        label    \"\"\n        graphics\n        [\n            x    530.23\n            y    58.45\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    44\n        label    \"\"\n        graphics\n        [\n            x    964.06\n            y    490.11\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    45\n        label    \"\"\n        graphics\n        [\n            x    712.87\n            y    1119.01\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    46\n        label    \"\"\n        graphics\n        [\n            x    995.52\n            y    895.53\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    47\n        label    \"\"\n        graphics\n        [\n            x    333.21\n            y    160.70\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    48\n        label    \"\"\n        graphics\n        [\n            x    206.67\n            y    189.21\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    49\n        label    \"\"\n        graphics\n        [\n            x    1147.58\n            y    294.12\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    50\n        label    \"\"\n        graphics\n        [\n            x    1144.84\n            y    575.44\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    51\n        label    \"\"\n        graphics\n        [\n            x    795.66\n            y    753.94\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    52\n        label    \"\"\n        graphics\n        [\n            x    290.51\n            y    370.59\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    53\n        label    \"\"\n        graphics\n        [\n            x    861.94\n            y    162.47\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    54\n        label    \"\"\n        graphics\n        [\n            x    1079.00\n            y    2.42\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    55\n        label    \"\"\n        graphics\n        [\n            x    803.61\n            y    303.85\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    56\n        label    \"\"\n        graphics\n        [\n            x    496.46\n            y    627.73\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    57\n        label    \"\"\n        graphics\n        [\n            x    428.42\n            y    1090.16\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    58\n        label    \"\"\n        graphics\n        [\n            x    289.94\n            y    895.49\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    59\n        label    \"\"\n        graphics\n        [\n            x    883.67\n            y    1120.04\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    60\n        label    \"\"\n        graphics\n        [\n            x    905.15\n            y    1106.86\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    61\n        label    \"\"\n        graphics\n        [\n            x    949.15\n            y    423.05\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    62\n        label    \"\"\n        graphics\n        [\n            x    525.75\n            y    718.82\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    63\n        label    \"\"\n        graphics\n        [\n            x    169.03\n            y    50.96\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    64\n        label    \"\"\n        graphics\n        [\n            x    650.18\n            y    959.55\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    65\n        label    \"\"\n        graphics\n        [\n            x    1105.19\n            y    1129.71\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    66\n        label    \"\"\n        graphics\n        [\n            x    806.10\n            y    1016.03\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    67\n        label    \"\"\n        graphics\n        [\n            x    556.26\n            y    619.39\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    68\n        label    \"\"\n        graphics\n        [\n            x    911.36\n            y    860.34\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    69\n        label    \"\"\n        graphics\n        [\n            x    191.55\n            y    1087.09\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    70\n        label    \"\"\n        graphics\n        [\n            x    530.39\n            y    622.35\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    71\n        label    \"\"\n        graphics\n        [\n            x    976.55\n            y    82.26\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    72\n        label    \"\"\n        graphics\n        [\n            x    790.23\n            y    676.71\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    73\n        label    \"\"\n        graphics\n        [\n            x    584.18\n            y    129.48\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    74\n        label    \"\"\n        graphics\n        [\n            x    1098.39\n            y    326.39\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    75\n        label    \"\"\n        graphics\n        [\n            x    363.30\n            y    508.76\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    76\n        label    \"\"\n        graphics\n        [\n            x    709.07\n            y    331.94\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    77\n        label    \"\"\n        graphics\n        [\n            x    211.16\n            y    463.00\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    78\n        label    \"\"\n        graphics\n        [\n            x    1.95\n            y    132.02\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    79\n        label    \"\"\n        graphics\n        [\n            x    428.27\n            y    786.78\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    80\n        label    \"\"\n        graphics\n        [\n            x    727.01\n            y    127.76\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    81\n        label    \"\"\n        graphics\n        [\n            x    768.56\n            y    749.23\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    82\n        label    \"\"\n        graphics\n        [\n            x    372.76\n            y    1149.94\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    83\n        label    \"\"\n        graphics\n        [\n            x    905.52\n            y    481.23\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    84\n        label    \"\"\n        graphics\n        [\n            x    207.77\n            y    654.77\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    85\n        label    \"\"\n        graphics\n        [\n            x    256.74\n            y    1011.89\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    86\n        label    \"\"\n        graphics\n        [\n            x    426.18\n            y    814.68\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    87\n        label    \"\"\n        graphics\n        [\n            x    258.84\n            y    71.81\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    88\n        label    \"\"\n        graphics\n        [\n            x    299.05\n            y    618.43\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    89\n        label    \"\"\n        graphics\n        [\n            x    1094.54\n            y    810.33\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    90\n        label    \"\"\n        graphics\n        [\n            x    311.35\n            y    187.21\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    91\n        label    \"\"\n        graphics\n        [\n            x    190.72\n            y    422.11\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    92\n        label    \"\"\n        graphics\n        [\n            x    302.78\n            y    717.08\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    93\n        label    \"\"\n        graphics\n        [\n            x    687.77\n            y    906.23\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    94\n        label    \"\"\n        graphics\n        [\n            x    357.48\n            y    900.77\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    95\n        label    \"\"\n        graphics\n        [\n            x    834.74\n            y    242.13\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    96\n        label    \"\"\n        graphics\n        [\n            x    665.03\n            y    811.84\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    97\n        label    \"\"\n        graphics\n        [\n            x    916.35\n            y    849.74\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    98\n        label    \"\"\n        graphics\n        [\n            x    709.81\n            y    224.06\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    99\n        label    \"\"\n        graphics\n        [\n            x    269.64\n            y    6.78\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    100\n        label    \"\"\n        graphics\n        [\n            x    707.23\n            y    1034.37\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    101\n        label    \"\"\n        graphics\n        [\n            x    1008.36\n            y    219.75\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    102\n        label    \"\"\n        graphics\n        [\n            x    447.90\n            y    301.17\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    103\n        label    \"\"\n        graphics\n        [\n            x    234.25\n            y    300.32\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    104\n        label    \"\"\n        graphics\n        [\n            x    129.88\n            y    667.42\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    105\n        label    \"\"\n        graphics\n        [\n            x    881.31\n            y    11.32\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    106\n        label    \"\"\n        graphics\n        [\n            x    229.96\n            y    238.37\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    107\n        label    \"\"\n        graphics\n        [\n            x    664.90\n            y    346.86\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    108\n        label    \"\"\n        graphics\n        [\n            x    709.30\n            y    912.22\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    109\n        label    \"\"\n        graphics\n        [\n            x    153.97\n            y    160.59\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    110\n        label    \"\"\n        graphics\n        [\n            x    515.57\n            y    141.07\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    111\n        label    \"\"\n        graphics\n        [\n            x    768.52\n            y    456.30\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    112\n        label    \"\"\n        graphics\n        [\n            x    714.71\n            y    1016.02\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    113\n        label    \"\"\n        graphics\n        [\n            x    729.26\n            y    1011.64\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    114\n        label    \"\"\n        graphics\n        [\n            x    30.22\n            y    288.62\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    115\n        label    \"\"\n        graphics\n        [\n            x    470.30\n            y    1083.45\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    116\n        label    \"\"\n        graphics\n        [\n            x    1145.09\n            y    885.07\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    117\n        label    \"\"\n        graphics\n        [\n            x    955.12\n            y    64.23\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    118\n        label    \"\"\n        graphics\n        [\n            x    1166.45\n            y    814.69\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    119\n        label    \"\"\n        graphics\n        [\n            x    24.35\n            y    841.49\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    120\n        label    \"\"\n        graphics\n        [\n            x    422.28\n            y    570.08\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    121\n        label    \"\"\n        graphics\n        [\n            x    744.18\n            y    920.93\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    122\n        label    \"\"\n        graphics\n        [\n            x    1025.14\n            y    1169.44\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    123\n        label    \"\"\n        graphics\n        [\n            x    811.77\n            y    837.52\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    124\n        label    \"\"\n        graphics\n        [\n            x    88.05\n            y    148.39\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    125\n        label    \"\"\n        graphics\n        [\n            x    1154.69\n            y    61.54\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    126\n        label    \"\"\n        graphics\n        [\n            x    839.60\n            y    937.72\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    127\n        label    \"\"\n        graphics\n        [\n            x    496.75\n            y    449.87\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    128\n        label    \"\"\n        graphics\n        [\n            x    386.35\n            y    913.82\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    129\n        label    \"\"\n        graphics\n        [\n            x    120.09\n            y    831.01\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    130\n        label    \"\"\n        graphics\n        [\n            x    660.86\n            y    871.71\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    131\n        label    \"\"\n        graphics\n        [\n            x    14.93\n            y    1112.51\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    132\n        label    \"\"\n        graphics\n        [\n            x    983.95\n            y    608.04\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    133\n        label    \"\"\n        graphics\n        [\n            x    1078.63\n            y    1024.56\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    134\n        label    \"\"\n        graphics\n        [\n            x    856.21\n            y    1024.43\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    135\n        label    \"\"\n        graphics\n        [\n            x    1172.22\n            y    1153.31\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    136\n        label    \"\"\n        graphics\n        [\n            x    169.41\n            y    109.79\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    137\n        label    \"\"\n        graphics\n        [\n            x    651.85\n            y    266.97\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    138\n        label    \"\"\n        graphics\n        [\n            x    944.21\n            y    730.23\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    139\n        label    \"\"\n        graphics\n        [\n            x    1167.98\n            y    848.10\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    140\n        label    \"\"\n        graphics\n        [\n            x    646.47\n            y    1166.21\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    141\n        label    \"\"\n        graphics\n        [\n            x    471.55\n            y    36.36\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    142\n        label    \"\"\n        graphics\n        [\n            x    161.86\n            y    1008.29\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    143\n        label    \"\"\n        graphics\n        [\n            x    70.24\n            y    193.06\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    144\n        label    \"\"\n        graphics\n        [\n            x    577.27\n            y    884.72\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    145\n        label    \"\"\n        graphics\n        [\n            x    890.65\n            y    275.94\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    146\n        label    \"\"\n        graphics\n        [\n            x    980.58\n            y    606.61\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    147\n        label    \"\"\n        graphics\n        [\n            x    954.06\n            y    569.45\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    148\n        label    \"\"\n        graphics\n        [\n            x    40.77\n            y    613.52\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    149\n        label    \"\"\n        graphics\n        [\n            x    673.85\n            y    863.57\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    150\n        label    \"\"\n        graphics\n        [\n            x    893.57\n            y    1162.34\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    151\n        label    \"\"\n        graphics\n        [\n            x    1080.25\n            y    194.03\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    152\n        label    \"\"\n        graphics\n        [\n            x    1128.54\n            y    695.53\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    153\n        label    \"\"\n        graphics\n        [\n            x    159.57\n            y    406.90\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    154\n        label    \"\"\n        graphics\n        [\n            x    252.95\n            y    357.22\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    155\n        label    \"\"\n        graphics\n        [\n            x    791.43\n            y    945.57\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    156\n        label    \"\"\n        graphics\n        [\n            x    289.57\n            y    1075.48\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    157\n        label    \"\"\n        graphics\n        [\n            x    845.09\n            y    817.62\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    158\n        label    \"\"\n        graphics\n        [\n            x    500.35\n            y    406.37\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    159\n        label    \"\"\n        graphics\n        [\n            x    780.55\n            y    811.74\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    160\n        label    \"\"\n        graphics\n        [\n            x    1126.40\n            y    626.46\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    161\n        label    \"\"\n        graphics\n        [\n            x    951.18\n            y    268.04\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    162\n        label    \"\"\n        graphics\n        [\n            x    951.88\n            y    58.26\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    163\n        label    \"\"\n        graphics\n        [\n            x    528.54\n            y    218.26\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    164\n        label    \"\"\n        graphics\n        [\n            x    644.46\n            y    507.26\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    165\n        label    \"\"\n        graphics\n        [\n            x    940.43\n            y    1023.47\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    166\n        label    \"\"\n        graphics\n        [\n            x    682.71\n            y    680.15\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    167\n        label    \"\"\n        graphics\n        [\n            x    728.10\n            y    288.34\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    168\n        label    \"\"\n        graphics\n        [\n            x    1078.35\n            y    1057.69\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    169\n        label    \"\"\n        graphics\n        [\n            x    889.32\n            y    253.68\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    edge\n    [\n        source    1\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    10\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    100\n        target    121\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    100\n        target    20\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    100\n        target    63\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    100\n        target    76\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    101\n        target    34\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    102\n        target    101\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    103\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    104\n        target    33\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    104\n        target    80\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    105\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    106\n        target    50\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    107\n        target    33\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    108\n        target    94\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    109\n        target    73\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    11\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    11\n        target    80\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    110\n        target    102\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    110\n        target    29\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    110\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    111\n        target    104\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    111\n        target    83\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    112\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    112\n        target    60\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    112\n        target    94\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    113\n        target    120\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    113\n        target    63\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    114\n        target    79\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    115\n        target    56\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    116\n        target    143\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    116\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    117\n        target    133\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    117\n        target    29\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    118\n        target    113\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    118\n        target    166\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    118\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    119\n        target    44\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    119\n        target    74\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    12\n        target    153\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    12\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    120\n        target    108\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    121\n        target    79\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    122\n        target    19\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    123\n        target    32\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    124\n        target    138\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    124\n        target    52\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    125\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    125\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    125\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    126\n        target    111\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    127\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    127\n        target    36\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    128\n        target    92\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    129\n        target    113\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    13\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    130\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    130\n        target    26\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    131\n        target    26\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    132\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    133\n        target    101\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    133\n        target    110\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    133\n        target    46\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    134\n        target    105\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    134\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    134\n        target    74\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    135\n        target    65\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    136\n        target    122\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    136\n        target    69\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    137\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    138\n        target    137\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    139\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    14\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    14\n        target    103\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    140\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    141\n        target    55\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    141\n        target    90\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    142\n        target    121\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    142\n        target    160\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    143\n        target    68\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    143\n        target    78\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    144\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    144\n        target    94\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    145\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    146\n        target    132\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    147\n        target    59\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    148\n        target    82\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    149\n        target    35\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    15\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    150\n        target    149\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    151\n        target    157\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    151\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    152\n        target    137\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    152\n        target    74\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    153\n        target    88\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    154\n        target    125\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    154\n        target    60\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    155\n        target    27\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    155\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    156\n        target    27\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    156\n        target    91\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    157\n        target    130\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    158\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    158\n        target    162\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    159\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    159\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    16\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    160\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    161\n        target    119\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    161\n        target    133\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    162\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    163\n        target    144\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    164\n        target    57\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    165\n        target    126\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    166\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    167\n        target    106\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    167\n        target    107\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    168\n        target    127\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    169\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    17\n        target    111\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    17\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    18\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    19\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    2\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    20\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    20\n        target    111\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    21\n        target    19\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    22\n        target    19\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    23\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    24\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    25\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    26\n        target    24\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    26\n        target    31\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    27\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    28\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    29\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    3\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    30\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    30\n        target    74\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    31\n        target    20\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    32\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    32\n        target    94\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    33\n        target    138\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    33\n        target    32\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    34\n        target    27\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    35\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    36\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    37\n        target    30\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    37\n        target    82\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    38\n        target    30\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    38\n        target    37\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    39\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    4\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    40\n        target    29\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    40\n        target    39\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    41\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    41\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    42\n        target    31\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    42\n        target    36\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    43\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    44\n        target    36\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    45\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    46\n        target    37\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    47\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    48\n        target    34\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    49\n        target    36\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    5\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    50\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    51\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    52\n        target    113\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    52\n        target    147\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    52\n        target    154\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    52\n        target    36\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    52\n        target    39\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    53\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    53\n        target    98\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    54\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    55\n        target    54\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    55\n        target    67\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    56\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    57\n        target    46\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    58\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    59\n        target    20\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    6\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    60\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    61\n        target    50\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    61\n        target    51\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    62\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    62\n        target    45\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    62\n        target    81\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    63\n        target    30\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    64\n        target    32\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    64\n        target    68\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    64\n        target    87\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    65\n        target    129\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    65\n        target    148\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    65\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    65\n        target    80\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    66\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    66\n        target    139\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    66\n        target    54\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    67\n        target    41\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    68\n        target    34\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    69\n        target    68\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    7\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    70\n        target    108\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    70\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    71\n        target    56\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    72\n        target    107\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    72\n        target    156\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    72\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    73\n        target    39\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    73\n        target    47\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    74\n        target    126\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    74\n        target    26\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    75\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    75\n        target    54\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    76\n        target    53\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    77\n        target    25\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    78\n        target    63\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    79\n        target    68\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    8\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    80\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    81\n        target    25\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    82\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    83\n        target    68\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    84\n        target    81\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    85\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    85\n        target    74\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    86\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    86\n        target    36\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    87\n        target    159\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    87\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    87\n        target    74\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    88\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    89\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    89\n        target    88\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    9\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    90\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    90\n        target    67\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    90\n        target    74\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    91\n        target    59\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    92\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    92\n        target    64\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    93\n        target    43\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    93\n        target    80\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    94\n        target    79\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    94\n        target    98\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    95\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    96\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    97\n        target    138\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    97\n        target    63\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    98\n        target    30\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    98\n        target    90\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    99\n        target    35\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n]\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v170e255.tglf",
    "content": "0 927.000 316.000 30.000 30.000\n1 996.000 464.000 30.000 30.000\n2 946.000 173.000 30.000 30.000\n3 631.000 607.000 30.000 30.000\n4 754.000 943.000 30.000 30.000\n5 959.000 1141.000 30.000 30.000\n6 1145.000 793.000 30.000 30.000\n7 74.000 896.000 30.000 30.000\n8 114.000 589.000 30.000 30.000\n9 853.000 414.000 30.000 30.000\n10 386.000 92.000 30.000 30.000\n11 1019.000 1098.000 30.000 30.000\n12 76.000 1044.000 30.000 30.000\n13 295.000 29.000 30.000 30.000\n14 956.000 881.000 30.000 30.000\n15 450.000 412.000 30.000 30.000\n16 421.000 157.000 30.000 30.000\n17 807.000 566.000 30.000 30.000\n18 316.000 720.000 30.000 30.000\n19 479.000 232.000 30.000 30.000\n20 620.000 729.000 30.000 30.000\n21 872.000 215.000 30.000 30.000\n22 537.000 784.000 30.000 30.000\n23 283.000 1163.000 30.000 30.000\n24 373.000 436.000 30.000 30.000\n25 138.000 351.000 30.000 30.000\n26 751.000 411.000 30.000 30.000\n27 1099.000 844.000 30.000 30.000\n28 833.000 80.000 30.000 30.000\n29 283.000 711.000 30.000 30.000\n30 314.000 314.000 30.000 30.000\n31 921.000 330.000 30.000 30.000\n32 341.000 66.000 30.000 30.000\n33 829.000 161.000 30.000 30.000\n34 907.000 582.000 30.000 30.000\n35 666.000 507.000 30.000 30.000\n36 362.000 1148.000 30.000 30.000\n37 117.000 537.000 30.000 30.000\n38 650.000 1158.000 30.000 30.000\n39 889.000 698.000 30.000 30.000\n40 975.000 744.000 30.000 30.000\n41 1090.000 152.000 30.000 30.000\n42 93.000 1040.000 30.000 30.000\n43 530.000 58.000 30.000 30.000\n44 964.000 490.000 30.000 30.000\n45 712.000 1119.000 30.000 30.000\n46 995.000 895.000 30.000 30.000\n47 333.000 160.000 30.000 30.000\n48 206.000 189.000 30.000 30.000\n49 1147.000 294.000 30.000 30.000\n50 1144.000 575.000 30.000 30.000\n51 795.000 753.000 30.000 30.000\n52 290.000 370.000 30.000 30.000\n53 861.000 162.000 30.000 30.000\n54 1079.000 2.000 30.000 30.000\n55 803.000 303.000 30.000 30.000\n56 496.000 627.000 30.000 30.000\n57 428.000 1090.000 30.000 30.000\n58 289.000 895.000 30.000 30.000\n59 883.000 1120.000 30.000 30.000\n60 905.000 1106.000 30.000 30.000\n61 949.000 423.000 30.000 30.000\n62 525.000 718.000 30.000 30.000\n63 169.000 50.000 30.000 30.000\n64 650.000 959.000 30.000 30.000\n65 1105.000 1129.000 30.000 30.000\n66 806.000 1016.000 30.000 30.000\n67 556.000 619.000 30.000 30.000\n68 911.000 860.000 30.000 30.000\n69 191.000 1087.000 30.000 30.000\n70 530.000 622.000 30.000 30.000\n71 976.000 82.000 30.000 30.000\n72 790.000 676.000 30.000 30.000\n73 584.000 129.000 30.000 30.000\n74 1098.000 326.000 30.000 30.000\n75 363.000 508.000 30.000 30.000\n76 709.000 331.000 30.000 30.000\n77 211.000 463.000 30.000 30.000\n78 1.000 132.000 30.000 30.000\n79 428.000 786.000 30.000 30.000\n80 727.000 127.000 30.000 30.000\n81 768.000 749.000 30.000 30.000\n82 372.000 1149.000 30.000 30.000\n83 905.000 481.000 30.000 30.000\n84 207.000 654.000 30.000 30.000\n85 256.000 1011.000 30.000 30.000\n86 426.000 814.000 30.000 30.000\n87 258.000 71.000 30.000 30.000\n88 299.000 618.000 30.000 30.000\n89 1094.000 810.000 30.000 30.000\n90 311.000 187.000 30.000 30.000\n91 190.000 422.000 30.000 30.000\n92 302.000 717.000 30.000 30.000\n93 687.000 906.000 30.000 30.000\n94 357.000 900.000 30.000 30.000\n95 834.000 242.000 30.000 30.000\n96 665.000 811.000 30.000 30.000\n97 916.000 849.000 30.000 30.000\n98 709.000 224.000 30.000 30.000\n99 269.000 6.000 30.000 30.000\n100 707.000 1034.000 30.000 30.000\n101 1008.000 219.000 30.000 30.000\n102 447.000 301.000 30.000 30.000\n103 234.000 300.000 30.000 30.000\n104 129.000 667.000 30.000 30.000\n105 881.000 11.000 30.000 30.000\n106 229.000 238.000 30.000 30.000\n107 664.000 346.000 30.000 30.000\n108 709.000 912.000 30.000 30.000\n109 153.000 160.000 30.000 30.000\n110 515.000 141.000 30.000 30.000\n111 768.000 456.000 30.000 30.000\n112 714.000 1016.000 30.000 30.000\n113 729.000 1011.000 30.000 30.000\n114 30.000 288.000 30.000 30.000\n115 470.000 1083.000 30.000 30.000\n116 1145.000 885.000 30.000 30.000\n117 955.000 64.000 30.000 30.000\n118 1166.000 814.000 30.000 30.000\n119 24.000 841.000 30.000 30.000\n120 422.000 570.000 30.000 30.000\n121 744.000 920.000 30.000 30.000\n122 1025.000 1169.000 30.000 30.000\n123 811.000 837.000 30.000 30.000\n124 88.000 148.000 30.000 30.000\n125 1154.000 61.000 30.000 30.000\n126 839.000 937.000 30.000 30.000\n127 496.000 449.000 30.000 30.000\n128 386.000 913.000 30.000 30.000\n129 120.000 831.000 30.000 30.000\n130 660.000 871.000 30.000 30.000\n131 14.000 1112.000 30.000 30.000\n132 983.000 608.000 30.000 30.000\n133 1078.000 1024.000 30.000 30.000\n134 856.000 1024.000 30.000 30.000\n135 1172.000 1153.000 30.000 30.000\n136 169.000 109.000 30.000 30.000\n137 651.000 266.000 30.000 30.000\n138 944.000 730.000 30.000 30.000\n139 1167.000 848.000 30.000 30.000\n140 646.000 1166.000 30.000 30.000\n141 471.000 36.000 30.000 30.000\n142 161.000 1008.000 30.000 30.000\n143 70.000 193.000 30.000 30.000\n144 577.000 884.000 30.000 30.000\n145 890.000 275.000 30.000 30.000\n146 980.000 606.000 30.000 30.000\n147 954.000 569.000 30.000 30.000\n148 40.000 613.000 30.000 30.000\n149 673.000 863.000 30.000 30.000\n150 893.000 1162.000 30.000 30.000\n151 1080.000 194.000 30.000 30.000\n152 1128.000 695.000 30.000 30.000\n153 159.000 406.000 30.000 30.000\n154 252.000 357.000 30.000 30.000\n155 791.000 945.000 30.000 30.000\n156 289.000 1075.000 30.000 30.000\n157 845.000 817.000 30.000 30.000\n158 500.000 406.000 30.000 30.000\n159 780.000 811.000 30.000 30.000\n160 1126.000 626.000 30.000 30.000\n161 951.000 268.000 30.000 30.000\n162 951.000 58.000 30.000 30.000\n163 528.000 218.000 30.000 30.000\n164 644.000 507.000 30.000 30.000\n165 940.000 1023.000 30.000 30.000\n166 682.000 680.000 30.000 30.000\n167 728.000 288.000 30.000 30.000\n168 1078.000 1057.000 30.000 30.000\n169 889.000 253.000 30.000 30.000\n#\n134 74\n65 129\n139 12\n112 22\n15 2\n73 39\n72 107\n167 106\n97 138\n52 36\n93 43\n89 88\n155 27\n26 24\n4 3\n154 125\n81 25\n118 166\n49 36\n48 34\n159 6\n157 130\n82 1\n9 3\n32 94\n17 3\n110 29\n150 149\n65 6\n140 4\n62 81\n64 68\n109 73\n144 17\n79 68\n127 36\n57 46\n130 0\n58 2\n74 26\n105 8\n93 80\n99 35\n161 133\n30 6\n21 19\n36 15\n149 35\n106 50\n120 108\n47 23\n94 79\n143 68\n158 162\n27 10\n10 1\n85 10\n115 56\n22 19\n69 68\n134 105\n125 14\n133 46\n19 12\n5 1\n55 54\n3 1\n6 4\n77 25\n86 2\n124 138\n111 83\n127 16\n92 22\n113 63\n72 18\n75 54\n26 31\n148 82\n13 8\n52 39\n51 18\n8 1\n41 2\n117 133\n124 52\n160 0\n29 10\n121 79\n129 113\n86 36\n52 147\n163 144\n94 98\n134 7\n126 111\n147 59\n133 101\n156 27\n104 33\n97 63\n104 80\n108 94\n11 3\n90 74\n92 64\n100 20\n23 5\n16 3\n76 53\n65 80\n20 111\n42 31\n30 74\n154 60\n137 22\n73 47\n102 101\n32 18\n111 104\n2 0\n67 41\n66 139\n142 121\n44 36\n84 81\n144 94\n136 122\n1 0\n17 111\n37 82\n151 9\n52 154\n55 67\n146 132\n110 102\n113 120\n164 57\n95 0\n7 4\n107 33\n118 113\n96 8\n133 110\n167 107\n125 21\n53 1\n56 6\n152 74\n123 32\n66 54\n130 26\n114 79\n28 21\n12 9\n169 3\n138 137\n50 3\n33 32\n101 34\n71 56\n132 17\n88 10\n119 74\n38 30\n165 126\n87 159\n162 14\n168 127\n38 37\n43 16\n65 148\n117 29\n52 113\n110 8\n35 4\n20 10\n87 3\n85 74\n141 90\n78 63\n135 65\n70 23\n125 12\n41 9\n66 10\n61 51\n72 156\n33 138\n14 103\n45 17\n156 91\n39 7\n112 60\n161 119\n91 59\n119 44\n143 78\n131 26\n100 76\n68 34\n61 50\n151 157\n40 39\n37 30\n116 18\n64 32\n24 5\n64 87\n75 23\n54 11\n40 29\n18 8\n60 16\n136 69\n118 18\n62 45\n103 16\n112 94\n152 137\n11 80\n90 18\n155 4\n12 153\n141 55\n100 63\n74 126\n62 22\n63 30\n159 1\n90 67\n98 30\n100 121\n116 143\n89 8\n42 36\n70 108\n128 92\n87 74\n31 20\n59 20\n83 68\n80 15\n34 27\n53 98\n158 15\n14 1\n25 12\n153 88\n46 37\n145 17\n98 90\n142 160\n166 0\n122 19\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v180e180.gml",
    "content": "graph\n[\n    node\n    [\n        id    0\n        label    \"\"\n        graphics\n        [\n            x    1132.49\n            y    762.19\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    1\n        label    \"\"\n        graphics\n        [\n            x    164.66\n            y    583.23\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    2\n        label    \"\"\n        graphics\n        [\n            x    74.15\n            y    734.22\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    3\n        label    \"\"\n        graphics\n        [\n            x    493.37\n            y    818.38\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    4\n        label    \"\"\n        graphics\n        [\n            x    426.29\n            y    755.60\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    5\n        label    \"\"\n        graphics\n        [\n            x    88.86\n            y    1034.21\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    6\n        label    \"\"\n        graphics\n        [\n            x    1199.50\n            y    859.29\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    7\n        label    \"\"\n        graphics\n        [\n            x    999.39\n            y    128.26\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    8\n        label    \"\"\n        graphics\n        [\n            x    543.90\n            y    129.63\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    9\n        label    \"\"\n        graphics\n        [\n            x    370.12\n            y    828.01\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    10\n        label    \"\"\n        graphics\n        [\n            x    1061.17\n            y    297.44\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    11\n        label    \"\"\n        graphics\n        [\n            x    409.88\n            y    352.23\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    12\n        label    \"\"\n        graphics\n        [\n            x    534.65\n            y    903.78\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    13\n        label    \"\"\n        graphics\n        [\n            x    1177.55\n            y    107.50\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    14\n        label    \"\"\n        graphics\n        [\n            x    1089.89\n            y    193.70\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    15\n        label    \"\"\n        graphics\n        [\n            x    195.91\n            y    716.67\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    16\n        label    \"\"\n        graphics\n        [\n            x    145.24\n            y    647.11\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    17\n        label    \"\"\n        graphics\n        [\n            x    568.33\n            y    971.75\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    18\n        label    \"\"\n        graphics\n        [\n            x    1083.01\n            y    1133.35\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    19\n        label    \"\"\n        graphics\n        [\n            x    388.53\n            y    1080.09\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    20\n        label    \"\"\n        graphics\n        [\n            x    746.36\n            y    158.87\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    21\n        label    \"\"\n        graphics\n        [\n            x    929.12\n            y    696.13\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    22\n        label    \"\"\n        graphics\n        [\n            x    649.92\n            y    1093.50\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    23\n        label    \"\"\n        graphics\n        [\n            x    670.84\n            y    1154.66\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    24\n        label    \"\"\n        graphics\n        [\n            x    119.84\n            y    1060.01\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    25\n        label    \"\"\n        graphics\n        [\n            x    468.14\n            y    671.98\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    26\n        label    \"\"\n        graphics\n        [\n            x    401.50\n            y    141.60\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    27\n        label    \"\"\n        graphics\n        [\n            x    58.90\n            y    452.90\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    28\n        label    \"\"\n        graphics\n        [\n            x    282.13\n            y    562.63\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    29\n        label    \"\"\n        graphics\n        [\n            x    265.09\n            y    497.31\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    30\n        label    \"\"\n        graphics\n        [\n            x    77.90\n            y    445.38\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    31\n        label    \"\"\n        graphics\n        [\n            x    57.93\n            y    804.16\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    32\n        label    \"\"\n        graphics\n        [\n            x    505.37\n            y    1173.90\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    33\n        label    \"\"\n        graphics\n        [\n            x    101.89\n            y    336.04\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    34\n        label    \"\"\n        graphics\n        [\n            x    77.34\n            y    109.74\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    35\n        label    \"\"\n        graphics\n        [\n            x    884.63\n            y    391.39\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    36\n        label    \"\"\n        graphics\n        [\n            x    738.48\n            y    1160.79\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    37\n        label    \"\"\n        graphics\n        [\n            x    1162.84\n            y    552.12\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    38\n        label    \"\"\n        graphics\n        [\n            x    764.39\n            y    870.39\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    39\n        label    \"\"\n        graphics\n        [\n            x    1124.62\n            y    823.04\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    40\n        label    \"\"\n        graphics\n        [\n            x    2.55\n            y    994.61\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    41\n        label    \"\"\n        graphics\n        [\n            x    698.53\n            y    1193.97\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    42\n        label    \"\"\n        graphics\n        [\n            x    541.15\n            y    825.82\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    43\n        label    \"\"\n        graphics\n        [\n            x    614.35\n            y    743.90\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    44\n        label    \"\"\n        graphics\n        [\n            x    801.42\n            y    523.67\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    45\n        label    \"\"\n        graphics\n        [\n            x    772.11\n            y    336.00\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    46\n        label    \"\"\n        graphics\n        [\n            x    611.80\n            y    285.21\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    47\n        label    \"\"\n        graphics\n        [\n            x    166.96\n            y    1023.31\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    48\n        label    \"\"\n        graphics\n        [\n            x    89.31\n            y    468.39\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    49\n        label    \"\"\n        graphics\n        [\n            x    766.16\n            y    859.82\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    50\n        label    \"\"\n        graphics\n        [\n            x    65.48\n            y    793.24\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    51\n        label    \"\"\n        graphics\n        [\n            x    1143.07\n            y    446.11\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    52\n        label    \"\"\n        graphics\n        [\n            x    651.48\n            y    1044.81\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    53\n        label    \"\"\n        graphics\n        [\n            x    236.87\n            y    753.40\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    54\n        label    \"\"\n        graphics\n        [\n            x    768.86\n            y    121.34\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    55\n        label    \"\"\n        graphics\n        [\n            x    840.96\n            y    264.07\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    56\n        label    \"\"\n        graphics\n        [\n            x    309.94\n            y    1166.28\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    57\n        label    \"\"\n        graphics\n        [\n            x    967.54\n            y    265.96\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    58\n        label    \"\"\n        graphics\n        [\n            x    110.84\n            y    332.36\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    59\n        label    \"\"\n        graphics\n        [\n            x    24.37\n            y    509.38\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    60\n        label    \"\"\n        graphics\n        [\n            x    1020.07\n            y    1043.12\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    61\n        label    \"\"\n        graphics\n        [\n            x    737.42\n            y    858.55\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    62\n        label    \"\"\n        graphics\n        [\n            x    80.26\n            y    427.27\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    63\n        label    \"\"\n        graphics\n        [\n            x    979.81\n            y    65.42\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    64\n        label    \"\"\n        graphics\n        [\n            x    1072.11\n            y    308.45\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    65\n        label    \"\"\n        graphics\n        [\n            x    743.03\n            y    838.45\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    66\n        label    \"\"\n        graphics\n        [\n            x    984.48\n            y    197.42\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    67\n        label    \"\"\n        graphics\n        [\n            x    635.66\n            y    490.30\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    68\n        label    \"\"\n        graphics\n        [\n            x    247.67\n            y    88.13\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    69\n        label    \"\"\n        graphics\n        [\n            x    1157.54\n            y    21.75\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    70\n        label    \"\"\n        graphics\n        [\n            x    1083.48\n            y    409.38\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    71\n        label    \"\"\n        graphics\n        [\n            x    1014.29\n            y    296.66\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    72\n        label    \"\"\n        graphics\n        [\n            x    704.56\n            y    1166.69\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    73\n        label    \"\"\n        graphics\n        [\n            x    802.39\n            y    540.53\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    74\n        label    \"\"\n        graphics\n        [\n            x    683.01\n            y    1038.13\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    75\n        label    \"\"\n        graphics\n        [\n            x    1120.19\n            y    1072.49\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    76\n        label    \"\"\n        graphics\n        [\n            x    860.84\n            y    1109.42\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    77\n        label    \"\"\n        graphics\n        [\n            x    878.32\n            y    590.93\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    78\n        label    \"\"\n        graphics\n        [\n            x    157.37\n            y    963.69\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    79\n        label    \"\"\n        graphics\n        [\n            x    502.34\n            y    1191.51\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    80\n        label    \"\"\n        graphics\n        [\n            x    1118.29\n            y    161.83\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    81\n        label    \"\"\n        graphics\n        [\n            x    298.49\n            y    253.01\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    82\n        label    \"\"\n        graphics\n        [\n            x    1027.01\n            y    910.27\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    83\n        label    \"\"\n        graphics\n        [\n            x    156.12\n            y    62.61\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    84\n        label    \"\"\n        graphics\n        [\n            x    452.85\n            y    154.73\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    85\n        label    \"\"\n        graphics\n        [\n            x    775.80\n            y    925.64\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    86\n        label    \"\"\n        graphics\n        [\n            x    1112.21\n            y    508.03\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    87\n        label    \"\"\n        graphics\n        [\n            x    821.35\n            y    416.12\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    88\n        label    \"\"\n        graphics\n        [\n            x    358.55\n            y    212.20\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    89\n        label    \"\"\n        graphics\n        [\n            x    1130.49\n            y    1032.56\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    90\n        label    \"\"\n        graphics\n        [\n            x    280.17\n            y    243.49\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    91\n        label    \"\"\n        graphics\n        [\n            x    1074.57\n            y    574.52\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    92\n        label    \"\"\n        graphics\n        [\n            x    467.96\n            y    1154.39\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    93\n        label    \"\"\n        graphics\n        [\n            x    882.70\n            y    857.11\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    94\n        label    \"\"\n        graphics\n        [\n            x    1165.59\n            y    844.59\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    95\n        label    \"\"\n        graphics\n        [\n            x    1169.35\n            y    388.22\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    96\n        label    \"\"\n        graphics\n        [\n            x    498.41\n            y    515.11\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    97\n        label    \"\"\n        graphics\n        [\n            x    744.38\n            y    691.55\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    98\n        label    \"\"\n        graphics\n        [\n            x    240.79\n            y    864.21\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    99\n        label    \"\"\n        graphics\n        [\n            x    1164.06\n            y    5.18\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    100\n        label    \"\"\n        graphics\n        [\n            x    194.32\n            y    272.55\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    101\n        label    \"\"\n        graphics\n        [\n            x    690.86\n            y    950.14\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    102\n        label    \"\"\n        graphics\n        [\n            x    555.99\n            y    525.19\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    103\n        label    \"\"\n        graphics\n        [\n            x    410.48\n            y    1093.56\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    104\n        label    \"\"\n        graphics\n        [\n            x    1178.79\n            y    191.00\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    105\n        label    \"\"\n        graphics\n        [\n            x    847.35\n            y    164.56\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    106\n        label    \"\"\n        graphics\n        [\n            x    925.81\n            y    813.32\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    107\n        label    \"\"\n        graphics\n        [\n            x    1090.56\n            y    843.11\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    108\n        label    \"\"\n        graphics\n        [\n            x    510.93\n            y    271.59\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    109\n        label    \"\"\n        graphics\n        [\n            x    434.67\n            y    374.91\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    110\n        label    \"\"\n        graphics\n        [\n            x    224.73\n            y    296.88\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    111\n        label    \"\"\n        graphics\n        [\n            x    822.82\n            y    914.93\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    112\n        label    \"\"\n        graphics\n        [\n            x    447.39\n            y    1044.53\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    113\n        label    \"\"\n        graphics\n        [\n            x    1124.32\n            y    104.45\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    114\n        label    \"\"\n        graphics\n        [\n            x    121.65\n            y    921.68\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    115\n        label    \"\"\n        graphics\n        [\n            x    1.63\n            y    310.34\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    116\n        label    \"\"\n        graphics\n        [\n            x    296.50\n            y    101.17\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    117\n        label    \"\"\n        graphics\n        [\n            x    819.77\n            y    874.11\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    118\n        label    \"\"\n        graphics\n        [\n            x    344.90\n            y    305.65\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    119\n        label    \"\"\n        graphics\n        [\n            x    488.73\n            y    507.54\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    120\n        label    \"\"\n        graphics\n        [\n            x    425.93\n            y    938.01\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    121\n        label    \"\"\n        graphics\n        [\n            x    221.32\n            y    329.25\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    122\n        label    \"\"\n        graphics\n        [\n            x    1128.96\n            y    679.16\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    123\n        label    \"\"\n        graphics\n        [\n            x    349.11\n            y    983.25\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    124\n        label    \"\"\n        graphics\n        [\n            x    1121.30\n            y    919.05\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    125\n        label    \"\"\n        graphics\n        [\n            x    296.24\n            y    1123.92\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    126\n        label    \"\"\n        graphics\n        [\n            x    121.56\n            y    24.53\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    127\n        label    \"\"\n        graphics\n        [\n            x    140.91\n            y    681.40\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    128\n        label    \"\"\n        graphics\n        [\n            x    852.03\n            y    245.46\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    129\n        label    \"\"\n        graphics\n        [\n            x    1115.35\n            y    390.53\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    130\n        label    \"\"\n        graphics\n        [\n            x    979.78\n            y    956.18\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    131\n        label    \"\"\n        graphics\n        [\n            x    119.62\n            y    371.88\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    132\n        label    \"\"\n        graphics\n        [\n            x    175.13\n            y    772.19\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    133\n        label    \"\"\n        graphics\n        [\n            x    19.40\n            y    255.73\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    134\n        label    \"\"\n        graphics\n        [\n            x    1148.80\n            y    748.50\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    135\n        label    \"\"\n        graphics\n        [\n            x    782.83\n            y    685.91\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    136\n        label    \"\"\n        graphics\n        [\n            x    585.90\n            y    207.48\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    137\n        label    \"\"\n        graphics\n        [\n            x    1133.34\n            y    1198.53\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    138\n        label    \"\"\n        graphics\n        [\n            x    740.52\n            y    968.65\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    139\n        label    \"\"\n        graphics\n        [\n            x    456.51\n            y    1067.73\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    140\n        label    \"\"\n        graphics\n        [\n            x    718.07\n            y    975.03\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    141\n        label    \"\"\n        graphics\n        [\n            x    289.63\n            y    650.70\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    142\n        label    \"\"\n        graphics\n        [\n            x    1159.80\n            y    1055.28\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    143\n        label    \"\"\n        graphics\n        [\n            x    91.55\n            y    1102.53\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    144\n        label    \"\"\n        graphics\n        [\n            x    76.17\n            y    301.47\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    145\n        label    \"\"\n        graphics\n        [\n            x    998.40\n            y    845.51\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    146\n        label    \"\"\n        graphics\n        [\n            x    509.50\n            y    291.92\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    147\n        label    \"\"\n        graphics\n        [\n            x    1166.45\n            y    1055.05\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    148\n        label    \"\"\n        graphics\n        [\n            x    453.16\n            y    854.90\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    149\n        label    \"\"\n        graphics\n        [\n            x    488.67\n            y    1206.19\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    150\n        label    \"\"\n        graphics\n        [\n            x    351.02\n            y    1017.43\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    151\n        label    \"\"\n        graphics\n        [\n            x    1101.71\n            y    387.37\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    152\n        label    \"\"\n        graphics\n        [\n            x    401.89\n            y    236.34\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    153\n        label    \"\"\n        graphics\n        [\n            x    812.13\n            y    123.21\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    154\n        label    \"\"\n        graphics\n        [\n            x    1146.22\n            y    313.46\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    155\n        label    \"\"\n        graphics\n        [\n            x    459.68\n            y    804.80\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    156\n        label    \"\"\n        graphics\n        [\n            x    492.13\n            y    314.26\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    157\n        label    \"\"\n        graphics\n        [\n            x    249.07\n            y    286.07\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    158\n        label    \"\"\n        graphics\n        [\n            x    1111.37\n            y    1118.93\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    159\n        label    \"\"\n        graphics\n        [\n            x    430.34\n            y    183.83\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    160\n        label    \"\"\n        graphics\n        [\n            x    951.98\n            y    1164.90\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    161\n        label    \"\"\n        graphics\n        [\n            x    56.04\n            y    14.90\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    162\n        label    \"\"\n        graphics\n        [\n            x    1064.96\n            y    612.58\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    163\n        label    \"\"\n        graphics\n        [\n            x    734.26\n            y    1205.45\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    164\n        label    \"\"\n        graphics\n        [\n            x    1207.35\n            y    101.53\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    165\n        label    \"\"\n        graphics\n        [\n            x    498.30\n            y    1075.09\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    166\n        label    \"\"\n        graphics\n        [\n            x    644.08\n            y    838.15\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    167\n        label    \"\"\n        graphics\n        [\n            x    807.74\n            y    171.49\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    168\n        label    \"\"\n        graphics\n        [\n            x    549.04\n            y    761.66\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    169\n        label    \"\"\n        graphics\n        [\n            x    240.56\n            y    915.88\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    170\n        label    \"\"\n        graphics\n        [\n            x    194.30\n            y    369.64\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    171\n        label    \"\"\n        graphics\n        [\n            x    517.26\n            y    1075.77\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    172\n        label    \"\"\n        graphics\n        [\n            x    1085.17\n            y    164.61\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    173\n        label    \"\"\n        graphics\n        [\n            x    556.06\n            y    741.38\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    174\n        label    \"\"\n        graphics\n        [\n            x    54.28\n            y    522.53\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    175\n        label    \"\"\n        graphics\n        [\n            x    475.00\n            y    681.85\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    176\n        label    \"\"\n        graphics\n        [\n            x    238.50\n            y    34.45\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    177\n        label    \"\"\n        graphics\n        [\n            x    788.06\n            y    900.27\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    178\n        label    \"\"\n        graphics\n        [\n            x    766.28\n            y    1130.88\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    179\n        label    \"\"\n        graphics\n        [\n            x    458.01\n            y    847.59\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    edge\n    [\n        source    1\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    10\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    100\n        target    79\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    101\n        target    28\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    102\n        target    75\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    103\n        target    20\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    104\n        target    35\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    105\n        target    29\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    106\n        target    92\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    107\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    108\n        target    77\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    109\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    11\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    110\n        target    75\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    111\n        target    25\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    112\n        target    99\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    113\n        target    69\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    114\n        target    37\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    115\n        target    30\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    116\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    117\n        target    104\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    118\n        target    64\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    119\n        target    79\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    12\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    120\n        target    19\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    121\n        target    116\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    122\n        target    37\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    123\n        target    76\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    124\n        target    24\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    125\n        target    73\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    126\n        target    88\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    127\n        target    115\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    128\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    129\n        target    100\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    13\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    130\n        target    98\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    131\n        target    80\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    132\n        target    54\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    133\n        target    36\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    134\n        target    52\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    135\n        target    19\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    136\n        target    53\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    137\n        target    99\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    138\n        target    116\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    139\n        target    69\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    14\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    140\n        target    89\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    141\n        target    19\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    142\n        target    58\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    143\n        target    52\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    144\n        target    75\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    145\n        target    75\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    146\n        target    28\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    147\n        target    143\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    148\n        target    76\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    149\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    15\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    150\n        target    143\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    151\n        target    119\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    152\n        target    95\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    153\n        target    39\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    154\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    155\n        target    112\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    156\n        target    39\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    157\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    158\n        target    100\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    159\n        target    106\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    16\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    160\n        target    143\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    161\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    162\n        target    63\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    163\n        target    84\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    164\n        target    77\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    165\n        target    110\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    166\n        target    160\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    167\n        target    102\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    168\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    169\n        target    55\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    17\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    170\n        target    134\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    171\n        target    28\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    172\n        target    137\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    173\n        target    158\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    174\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    175\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    176\n        target    136\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    177\n        target    48\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    178\n        target    148\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    179\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    18\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    19\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    2\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    20\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    21\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    22\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    23\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    24\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    25\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    26\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    27\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    28\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    29\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    3\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    30\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    31\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    32\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    33\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    34\n        target    33\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    35\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    36\n        target    30\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    37\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    38\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    39\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    4\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    40\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    41\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    42\n        target    27\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    43\n        target    42\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    44\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    45\n        target    20\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    46\n        target    32\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    47\n        target    31\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    48\n        target    30\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    49\n        target    42\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    5\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    50\n        target    35\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    51\n        target    50\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    52\n        target    44\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    53\n        target    34\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    54\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    55\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    56\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    57\n        target    26\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    58\n        target    56\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    59\n        target    55\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    6\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    60\n        target    59\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    61\n        target    50\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    62\n        target    45\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    63\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    64\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    65\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    66\n        target    36\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    67\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    68\n        target    65\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    69\n        target    60\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    7\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    70\n        target    63\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    71\n        target    26\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    72\n        target    50\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    73\n        target    39\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    74\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    75\n        target    49\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    76\n        target    31\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    77\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    78\n        target    55\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    79\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    8\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    80\n        target    61\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    81\n        target    30\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    82\n        target    51\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    83\n        target    57\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    84\n        target    81\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    85\n        target    42\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    86\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    87\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    88\n        target    78\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    89\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    9\n        target    138\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    9\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    90\n        target    75\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    91\n        target    78\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    92\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    93\n        target    60\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    94\n        target    63\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    95\n        target    94\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    96\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    97\n        target    87\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    98\n        target    62\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    99\n        target    87\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n]\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v180e180.tglf",
    "content": "0 1132.000 762.000 30.000 30.000\n1 164.000 583.000 30.000 30.000\n2 74.000 734.000 30.000 30.000\n3 493.000 818.000 30.000 30.000\n4 426.000 755.000 30.000 30.000\n5 88.000 1034.000 30.000 30.000\n6 1199.000 859.000 30.000 30.000\n7 999.000 128.000 30.000 30.000\n8 543.000 129.000 30.000 30.000\n9 370.000 828.000 30.000 30.000\n10 1061.000 297.000 30.000 30.000\n11 409.000 352.000 30.000 30.000\n12 534.000 903.000 30.000 30.000\n13 1177.000 107.000 30.000 30.000\n14 1089.000 193.000 30.000 30.000\n15 195.000 716.000 30.000 30.000\n16 145.000 647.000 30.000 30.000\n17 568.000 971.000 30.000 30.000\n18 1083.000 1133.000 30.000 30.000\n19 388.000 1080.000 30.000 30.000\n20 746.000 158.000 30.000 30.000\n21 929.000 696.000 30.000 30.000\n22 649.000 1093.000 30.000 30.000\n23 670.000 1154.000 30.000 30.000\n24 119.000 1060.000 30.000 30.000\n25 468.000 671.000 30.000 30.000\n26 401.000 141.000 30.000 30.000\n27 58.000 452.000 30.000 30.000\n28 282.000 562.000 30.000 30.000\n29 265.000 497.000 30.000 30.000\n30 77.000 445.000 30.000 30.000\n31 57.000 804.000 30.000 30.000\n32 505.000 1173.000 30.000 30.000\n33 101.000 336.000 30.000 30.000\n34 77.000 109.000 30.000 30.000\n35 884.000 391.000 30.000 30.000\n36 738.000 1160.000 30.000 30.000\n37 1162.000 552.000 30.000 30.000\n38 764.000 870.000 30.000 30.000\n39 1124.000 823.000 30.000 30.000\n40 2.000 994.000 30.000 30.000\n41 698.000 1193.000 30.000 30.000\n42 541.000 825.000 30.000 30.000\n43 614.000 743.000 30.000 30.000\n44 801.000 523.000 30.000 30.000\n45 772.000 336.000 30.000 30.000\n46 611.000 285.000 30.000 30.000\n47 166.000 1023.000 30.000 30.000\n48 89.000 468.000 30.000 30.000\n49 766.000 859.000 30.000 30.000\n50 65.000 793.000 30.000 30.000\n51 1143.000 446.000 30.000 30.000\n52 651.000 1044.000 30.000 30.000\n53 236.000 753.000 30.000 30.000\n54 768.000 121.000 30.000 30.000\n55 840.000 264.000 30.000 30.000\n56 309.000 1166.000 30.000 30.000\n57 967.000 265.000 30.000 30.000\n58 110.000 332.000 30.000 30.000\n59 24.000 509.000 30.000 30.000\n60 1020.000 1043.000 30.000 30.000\n61 737.000 858.000 30.000 30.000\n62 80.000 427.000 30.000 30.000\n63 979.000 65.000 30.000 30.000\n64 1072.000 308.000 30.000 30.000\n65 743.000 838.000 30.000 30.000\n66 984.000 197.000 30.000 30.000\n67 635.000 490.000 30.000 30.000\n68 247.000 88.000 30.000 30.000\n69 1157.000 21.000 30.000 30.000\n70 1083.000 409.000 30.000 30.000\n71 1014.000 296.000 30.000 30.000\n72 704.000 1166.000 30.000 30.000\n73 802.000 540.000 30.000 30.000\n74 683.000 1038.000 30.000 30.000\n75 1120.000 1072.000 30.000 30.000\n76 860.000 1109.000 30.000 30.000\n77 878.000 590.000 30.000 30.000\n78 157.000 963.000 30.000 30.000\n79 502.000 1191.000 30.000 30.000\n80 1118.000 161.000 30.000 30.000\n81 298.000 253.000 30.000 30.000\n82 1027.000 910.000 30.000 30.000\n83 156.000 62.000 30.000 30.000\n84 452.000 154.000 30.000 30.000\n85 775.000 925.000 30.000 30.000\n86 1112.000 508.000 30.000 30.000\n87 821.000 416.000 30.000 30.000\n88 358.000 212.000 30.000 30.000\n89 1130.000 1032.000 30.000 30.000\n90 280.000 243.000 30.000 30.000\n91 1074.000 574.000 30.000 30.000\n92 467.000 1154.000 30.000 30.000\n93 882.000 857.000 30.000 30.000\n94 1165.000 844.000 30.000 30.000\n95 1169.000 388.000 30.000 30.000\n96 498.000 515.000 30.000 30.000\n97 744.000 691.000 30.000 30.000\n98 240.000 864.000 30.000 30.000\n99 1164.000 5.000 30.000 30.000\n100 194.000 272.000 30.000 30.000\n101 690.000 950.000 30.000 30.000\n102 555.000 525.000 30.000 30.000\n103 410.000 1093.000 30.000 30.000\n104 1178.000 191.000 30.000 30.000\n105 847.000 164.000 30.000 30.000\n106 925.000 813.000 30.000 30.000\n107 1090.000 843.000 30.000 30.000\n108 510.000 271.000 30.000 30.000\n109 434.000 374.000 30.000 30.000\n110 224.000 296.000 30.000 30.000\n111 822.000 914.000 30.000 30.000\n112 447.000 1044.000 30.000 30.000\n113 1124.000 104.000 30.000 30.000\n114 121.000 921.000 30.000 30.000\n115 1.000 310.000 30.000 30.000\n116 296.000 101.000 30.000 30.000\n117 819.000 874.000 30.000 30.000\n118 344.000 305.000 30.000 30.000\n119 488.000 507.000 30.000 30.000\n120 425.000 938.000 30.000 30.000\n121 221.000 329.000 30.000 30.000\n122 1128.000 679.000 30.000 30.000\n123 349.000 983.000 30.000 30.000\n124 1121.000 919.000 30.000 30.000\n125 296.000 1123.000 30.000 30.000\n126 121.000 24.000 30.000 30.000\n127 140.000 681.000 30.000 30.000\n128 852.000 245.000 30.000 30.000\n129 1115.000 390.000 30.000 30.000\n130 979.000 956.000 30.000 30.000\n131 119.000 371.000 30.000 30.000\n132 175.000 772.000 30.000 30.000\n133 19.000 255.000 30.000 30.000\n134 1148.000 748.000 30.000 30.000\n135 782.000 685.000 30.000 30.000\n136 585.000 207.000 30.000 30.000\n137 1133.000 1198.000 30.000 30.000\n138 740.000 968.000 30.000 30.000\n139 456.000 1067.000 30.000 30.000\n140 718.000 975.000 30.000 30.000\n141 289.000 650.000 30.000 30.000\n142 1159.000 1055.000 30.000 30.000\n143 91.000 1102.000 30.000 30.000\n144 76.000 301.000 30.000 30.000\n145 998.000 845.000 30.000 30.000\n146 509.000 291.000 30.000 30.000\n147 1166.000 1055.000 30.000 30.000\n148 453.000 854.000 30.000 30.000\n149 488.000 1206.000 30.000 30.000\n150 351.000 1017.000 30.000 30.000\n151 1101.000 387.000 30.000 30.000\n152 401.000 236.000 30.000 30.000\n153 812.000 123.000 30.000 30.000\n154 1146.000 313.000 30.000 30.000\n155 459.000 804.000 30.000 30.000\n156 492.000 314.000 30.000 30.000\n157 249.000 286.000 30.000 30.000\n158 1111.000 1118.000 30.000 30.000\n159 430.000 183.000 30.000 30.000\n160 951.000 1164.000 30.000 30.000\n161 56.000 14.000 30.000 30.000\n162 1064.000 612.000 30.000 30.000\n163 734.000 1205.000 30.000 30.000\n164 1207.000 101.000 30.000 30.000\n165 498.000 1075.000 30.000 30.000\n166 644.000 838.000 30.000 30.000\n167 807.000 171.000 30.000 30.000\n168 549.000 761.000 30.000 30.000\n169 240.000 915.000 30.000 30.000\n170 194.000 369.000 30.000 30.000\n171 517.000 1075.000 30.000 30.000\n172 1085.000 164.000 30.000 30.000\n173 556.000 741.000 30.000 30.000\n174 54.000 522.000 30.000 30.000\n175 475.000 681.000 30.000 30.000\n176 238.000 34.000 30.000 30.000\n177 788.000 900.000 30.000 30.000\n178 766.000 1130.000 30.000 30.000\n179 458.000 847.000 30.000 30.000\n#\n168 14\n121 116\n3 2\n79 11\n148 76\n5 0\n70 63\n67 2\n43 42\n10 6\n89 4\n82 51\n7 6\n175 18\n104 35\n110 75\n140 89\n171 28\n26 0\n98 62\n128 22\n45 20\n115 30\n151 119\n143 52\n159 106\n33 16\n166 160\n169 55\n173 158\n21 8\n95 94\n126 88\n40 18\n114 37\n105 29\n35 18\n16 2\n102 75\n109 0\n160 143\n19 7\n156 39\n144 75\n163 84\n93 60\n18 17\n34 33\n65 23\n152 95\n32 9\n157 14\n60 59\n146 28\n36 30\n88 78\n87 18\n164 77\n162 63\n8 3\n25 2\n44 18\n132 54\n124 24\n6 2\n1 0\n96 0\n83 57\n113 69\n77 22\n108 77\n90 75\n177 48\n62 45\n13 0\n120 19\n73 39\n20 10\n76 31\n155 112\n12 1\n119 79\n14 8\n161 13\n53 34\n48 30\n158 100\n91 78\n131 80\n127 115\n74 17\n11 2\n52 44\n134 52\n56 9\n103 20\n69 60\n51 50\n125 73\n136 53\n84 81\n42 27\n4 1\n55 1\n17 16\n27 23\n176 136\n28 11\n58 56\n142 58\n100 79\n106 92\n130 98\n122 37\n23 8\n59 55\n172 137\n99 87\n129 100\n112 99\n39 13\n137 99\n149 23\n22 6\n49 42\n37 4\n145 75\n170 134\n30 17\n24 9\n80 61\n116 13\n75 49\n133 36\n68 65\n50 35\n71 26\n174 7\n61 50\n72 50\n118 64\n94 63\n167 102\n46 32\n178 148\n117 104\n15 12\n101 28\n63 4\n64 9\n57 26\n165 110\n141 19\n78 55\n86 16\n139 69\n107 5\n123 76\n54 21\n85 42\n154 1\n92 0\n9 6\n97 87\n47 31\n66 36\n135 19\n147 143\n153 39\n41 1\n81 30\n38 8\n29 16\n111 25\n179 11\n31 21\n9 138\n2 0\n138 116\n150 143\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v180e198.gml",
    "content": "graph\n[\n    node\n    [\n        id    0\n        label    \"\"\n        graphics\n        [\n            x    611.85\n            y    579.41\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    1\n        label    \"\"\n        graphics\n        [\n            x    683.04\n            y    476.39\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    2\n        label    \"\"\n        graphics\n        [\n            x    709.59\n            y    542.92\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    3\n        label    \"\"\n        graphics\n        [\n            x    729.09\n            y    592.64\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    4\n        label    \"\"\n        graphics\n        [\n            x    265.34\n            y    99.54\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    5\n        label    \"\"\n        graphics\n        [\n            x    618.21\n            y    248.67\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    6\n        label    \"\"\n        graphics\n        [\n            x    360.66\n            y    442.51\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    7\n        label    \"\"\n        graphics\n        [\n            x    959.22\n            y    257.18\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    8\n        label    \"\"\n        graphics\n        [\n            x    412.78\n            y    852.83\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    9\n        label    \"\"\n        graphics\n        [\n            x    441.27\n            y    789.77\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    10\n        label    \"\"\n        graphics\n        [\n            x    293.74\n            y    1159.62\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    11\n        label    \"\"\n        graphics\n        [\n            x    1149.47\n            y    861.59\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    12\n        label    \"\"\n        graphics\n        [\n            x    790.59\n            y    463.06\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    13\n        label    \"\"\n        graphics\n        [\n            x    899.82\n            y    152.68\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    14\n        label    \"\"\n        graphics\n        [\n            x    1185.62\n            y    390.50\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    15\n        label    \"\"\n        graphics\n        [\n            x    712.62\n            y    214.76\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    16\n        label    \"\"\n        graphics\n        [\n            x    807.15\n            y    981.34\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    17\n        label    \"\"\n        graphics\n        [\n            x    406.75\n            y    882.20\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    18\n        label    \"\"\n        graphics\n        [\n            x    938.88\n            y    967.20\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    19\n        label    \"\"\n        graphics\n        [\n            x    944.98\n            y    714.74\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    20\n        label    \"\"\n        graphics\n        [\n            x    707.09\n            y    535.25\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    21\n        label    \"\"\n        graphics\n        [\n            x    432.34\n            y    356.82\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    22\n        label    \"\"\n        graphics\n        [\n            x    1052.61\n            y    1198.75\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    23\n        label    \"\"\n        graphics\n        [\n            x    996.71\n            y    1086.31\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    24\n        label    \"\"\n        graphics\n        [\n            x    328.84\n            y    1035.68\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    25\n        label    \"\"\n        graphics\n        [\n            x    36.93\n            y    232.70\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    26\n        label    \"\"\n        graphics\n        [\n            x    533.45\n            y    635.84\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    27\n        label    \"\"\n        graphics\n        [\n            x    347.25\n            y    640.42\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    28\n        label    \"\"\n        graphics\n        [\n            x    88.87\n            y    950.04\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    29\n        label    \"\"\n        graphics\n        [\n            x    17.35\n            y    559.51\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    30\n        label    \"\"\n        graphics\n        [\n            x    197.52\n            y    609.96\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    31\n        label    \"\"\n        graphics\n        [\n            x    512.69\n            y    1045.42\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    32\n        label    \"\"\n        graphics\n        [\n            x    186.69\n            y    313.14\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    33\n        label    \"\"\n        graphics\n        [\n            x    588.55\n            y    591.48\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    34\n        label    \"\"\n        graphics\n        [\n            x    53.11\n            y    1134.03\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    35\n        label    \"\"\n        graphics\n        [\n            x    878.30\n            y    630.78\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    36\n        label    \"\"\n        graphics\n        [\n            x    101.69\n            y    583.42\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    37\n        label    \"\"\n        graphics\n        [\n            x    186.36\n            y    572.60\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    38\n        label    \"\"\n        graphics\n        [\n            x    982.40\n            y    1188.70\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    39\n        label    \"\"\n        graphics\n        [\n            x    299.55\n            y    325.66\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    40\n        label    \"\"\n        graphics\n        [\n            x    911.97\n            y    1089.41\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    41\n        label    \"\"\n        graphics\n        [\n            x    364.58\n            y    237.14\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    42\n        label    \"\"\n        graphics\n        [\n            x    1163.91\n            y    1069.56\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    43\n        label    \"\"\n        graphics\n        [\n            x    113.20\n            y    1172.12\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    44\n        label    \"\"\n        graphics\n        [\n            x    1008.54\n            y    860.44\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    45\n        label    \"\"\n        graphics\n        [\n            x    176.99\n            y    292.44\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    46\n        label    \"\"\n        graphics\n        [\n            x    876.66\n            y    134.70\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    47\n        label    \"\"\n        graphics\n        [\n            x    993.00\n            y    638.97\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    48\n        label    \"\"\n        graphics\n        [\n            x    569.01\n            y    1138.07\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    49\n        label    \"\"\n        graphics\n        [\n            x    546.84\n            y    1164.12\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    50\n        label    \"\"\n        graphics\n        [\n            x    654.55\n            y    189.15\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    51\n        label    \"\"\n        graphics\n        [\n            x    842.34\n            y    92.18\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    52\n        label    \"\"\n        graphics\n        [\n            x    1010.42\n            y    857.42\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    53\n        label    \"\"\n        graphics\n        [\n            x    948.03\n            y    610.22\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    54\n        label    \"\"\n        graphics\n        [\n            x    756.41\n            y    73.71\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    55\n        label    \"\"\n        graphics\n        [\n            x    323.34\n            y    574.60\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    56\n        label    \"\"\n        graphics\n        [\n            x    956.29\n            y    187.73\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    57\n        label    \"\"\n        graphics\n        [\n            x    407.42\n            y    526.93\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    58\n        label    \"\"\n        graphics\n        [\n            x    850.38\n            y    433.49\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    59\n        label    \"\"\n        graphics\n        [\n            x    605.54\n            y    583.79\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    60\n        label    \"\"\n        graphics\n        [\n            x    642.64\n            y    391.87\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    61\n        label    \"\"\n        graphics\n        [\n            x    111.91\n            y    25.46\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    62\n        label    \"\"\n        graphics\n        [\n            x    906.58\n            y    679.81\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    63\n        label    \"\"\n        graphics\n        [\n            x    454.39\n            y    742.94\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    64\n        label    \"\"\n        graphics\n        [\n            x    359.53\n            y    54.48\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    65\n        label    \"\"\n        graphics\n        [\n            x    1011.39\n            y    811.00\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    66\n        label    \"\"\n        graphics\n        [\n            x    538.27\n            y    808.61\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    67\n        label    \"\"\n        graphics\n        [\n            x    721.83\n            y    98.43\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    68\n        label    \"\"\n        graphics\n        [\n            x    1204.62\n            y    646.95\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    69\n        label    \"\"\n        graphics\n        [\n            x    541.28\n            y    1019.93\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    70\n        label    \"\"\n        graphics\n        [\n            x    921.81\n            y    224.05\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    71\n        label    \"\"\n        graphics\n        [\n            x    1111.45\n            y    1015.84\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    72\n        label    \"\"\n        graphics\n        [\n            x    719.66\n            y    575.03\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    73\n        label    \"\"\n        graphics\n        [\n            x    972.77\n            y    454.05\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    74\n        label    \"\"\n        graphics\n        [\n            x    765.44\n            y    746.11\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    75\n        label    \"\"\n        graphics\n        [\n            x    962.10\n            y    723.73\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    76\n        label    \"\"\n        graphics\n        [\n            x    951.23\n            y    332.86\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    77\n        label    \"\"\n        graphics\n        [\n            x    805.39\n            y    1066.39\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    78\n        label    \"\"\n        graphics\n        [\n            x    66.16\n            y    263.66\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    79\n        label    \"\"\n        graphics\n        [\n            x    1094.69\n            y    678.02\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    80\n        label    \"\"\n        graphics\n        [\n            x    367.70\n            y    871.79\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    81\n        label    \"\"\n        graphics\n        [\n            x    1047.11\n            y    225.43\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    82\n        label    \"\"\n        graphics\n        [\n            x    834.29\n            y    1100.05\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    83\n        label    \"\"\n        graphics\n        [\n            x    517.44\n            y    346.81\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    84\n        label    \"\"\n        graphics\n        [\n            x    202.70\n            y    37.67\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    85\n        label    \"\"\n        graphics\n        [\n            x    19.83\n            y    627.71\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    86\n        label    \"\"\n        graphics\n        [\n            x    251.81\n            y    580.11\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    87\n        label    \"\"\n        graphics\n        [\n            x    804.63\n            y    511.25\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    88\n        label    \"\"\n        graphics\n        [\n            x    143.91\n            y    295.90\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    89\n        label    \"\"\n        graphics\n        [\n            x    676.55\n            y    729.80\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    90\n        label    \"\"\n        graphics\n        [\n            x    287.11\n            y    100.89\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    91\n        label    \"\"\n        graphics\n        [\n            x    656.03\n            y    706.55\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    92\n        label    \"\"\n        graphics\n        [\n            x    74.91\n            y    842.17\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    93\n        label    \"\"\n        graphics\n        [\n            x    1131.84\n            y    657.87\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    94\n        label    \"\"\n        graphics\n        [\n            x    567.36\n            y    796.92\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    95\n        label    \"\"\n        graphics\n        [\n            x    407.58\n            y    1173.41\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    96\n        label    \"\"\n        graphics\n        [\n            x    393.12\n            y    77.89\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    97\n        label    \"\"\n        graphics\n        [\n            x    472.01\n            y    439.97\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    98\n        label    \"\"\n        graphics\n        [\n            x    718.07\n            y    31.77\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    99\n        label    \"\"\n        graphics\n        [\n            x    567.98\n            y    270.62\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    100\n        label    \"\"\n        graphics\n        [\n            x    417.59\n            y    340.25\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    101\n        label    \"\"\n        graphics\n        [\n            x    996.56\n            y    1204.45\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    102\n        label    \"\"\n        graphics\n        [\n            x    296.92\n            y    603.32\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    103\n        label    \"\"\n        graphics\n        [\n            x    1073.89\n            y    243.90\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    104\n        label    \"\"\n        graphics\n        [\n            x    894.82\n            y    1115.54\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    105\n        label    \"\"\n        graphics\n        [\n            x    303.22\n            y    355.83\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    106\n        label    \"\"\n        graphics\n        [\n            x    791.52\n            y    626.32\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    107\n        label    \"\"\n        graphics\n        [\n            x    511.51\n            y    196.03\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    108\n        label    \"\"\n        graphics\n        [\n            x    361.46\n            y    1150.85\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    109\n        label    \"\"\n        graphics\n        [\n            x    482.01\n            y    1025.46\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    110\n        label    \"\"\n        graphics\n        [\n            x    1128.87\n            y    721.78\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    111\n        label    \"\"\n        graphics\n        [\n            x    45.58\n            y    1071.72\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    112\n        label    \"\"\n        graphics\n        [\n            x    668.30\n            y    913.32\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    113\n        label    \"\"\n        graphics\n        [\n            x    937.03\n            y    1183.61\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    114\n        label    \"\"\n        graphics\n        [\n            x    350.71\n            y    1065.58\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    115\n        label    \"\"\n        graphics\n        [\n            x    455.91\n            y    1180.90\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    116\n        label    \"\"\n        graphics\n        [\n            x    67.29\n            y    23.32\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    117\n        label    \"\"\n        graphics\n        [\n            x    95.97\n            y    474.80\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    118\n        label    \"\"\n        graphics\n        [\n            x    434.84\n            y    1068.54\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    119\n        label    \"\"\n        graphics\n        [\n            x    592.98\n            y    779.83\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    120\n        label    \"\"\n        graphics\n        [\n            x    1160.39\n            y    778.06\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    121\n        label    \"\"\n        graphics\n        [\n            x    983.32\n            y    1071.15\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    122\n        label    \"\"\n        graphics\n        [\n            x    715.76\n            y    511.30\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    123\n        label    \"\"\n        graphics\n        [\n            x    1050.03\n            y    1071.25\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    124\n        label    \"\"\n        graphics\n        [\n            x    126.22\n            y    1145.01\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    125\n        label    \"\"\n        graphics\n        [\n            x    552.28\n            y    915.43\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    126\n        label    \"\"\n        graphics\n        [\n            x    1049.01\n            y    922.64\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    127\n        label    \"\"\n        graphics\n        [\n            x    513.66\n            y    511.50\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    128\n        label    \"\"\n        graphics\n        [\n            x    50.46\n            y    498.27\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    129\n        label    \"\"\n        graphics\n        [\n            x    417.83\n            y    379.37\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    130\n        label    \"\"\n        graphics\n        [\n            x    98.98\n            y    181.96\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    131\n        label    \"\"\n        graphics\n        [\n            x    148.30\n            y    10.60\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    132\n        label    \"\"\n        graphics\n        [\n            x    934.52\n            y    1182.93\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    133\n        label    \"\"\n        graphics\n        [\n            x    185.64\n            y    105.68\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    134\n        label    \"\"\n        graphics\n        [\n            x    155.56\n            y    488.33\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    135\n        label    \"\"\n        graphics\n        [\n            x    462.34\n            y    684.96\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    136\n        label    \"\"\n        graphics\n        [\n            x    1200.82\n            y    1123.18\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    137\n        label    \"\"\n        graphics\n        [\n            x    694.68\n            y    1181.98\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    138\n        label    \"\"\n        graphics\n        [\n            x    382.96\n            y    818.49\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    139\n        label    \"\"\n        graphics\n        [\n            x    159.63\n            y    664.97\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    140\n        label    \"\"\n        graphics\n        [\n            x    912.72\n            y    235.28\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    141\n        label    \"\"\n        graphics\n        [\n            x    71.94\n            y    1088.64\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    142\n        label    \"\"\n        graphics\n        [\n            x    305.68\n            y    642.50\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    143\n        label    \"\"\n        graphics\n        [\n            x    1191.56\n            y    815.17\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    144\n        label    \"\"\n        graphics\n        [\n            x    619.80\n            y    895.81\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    145\n        label    \"\"\n        graphics\n        [\n            x    593.30\n            y    773.16\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    146\n        label    \"\"\n        graphics\n        [\n            x    65.09\n            y    742.86\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    147\n        label    \"\"\n        graphics\n        [\n            x    1079.40\n            y    765.77\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    148\n        label    \"\"\n        graphics\n        [\n            x    571.11\n            y    1097.82\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    149\n        label    \"\"\n        graphics\n        [\n            x    37.77\n            y    190.50\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    150\n        label    \"\"\n        graphics\n        [\n            x    43.85\n            y    86.09\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    151\n        label    \"\"\n        graphics\n        [\n            x    841.40\n            y    520.96\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    152\n        label    \"\"\n        graphics\n        [\n            x    74.05\n            y    222.39\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    153\n        label    \"\"\n        graphics\n        [\n            x    819.26\n            y    963.63\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    154\n        label    \"\"\n        graphics\n        [\n            x    306.22\n            y    898.05\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    155\n        label    \"\"\n        graphics\n        [\n            x    596.32\n            y    1129.00\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    156\n        label    \"\"\n        graphics\n        [\n            x    724.88\n            y    759.45\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    157\n        label    \"\"\n        graphics\n        [\n            x    279.05\n            y    885.64\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    158\n        label    \"\"\n        graphics\n        [\n            x    151.67\n            y    792.86\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    159\n        label    \"\"\n        graphics\n        [\n            x    327.49\n            y    293.15\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    160\n        label    \"\"\n        graphics\n        [\n            x    665.47\n            y    1067.01\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    161\n        label    \"\"\n        graphics\n        [\n            x    1137.53\n            y    494.33\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    162\n        label    \"\"\n        graphics\n        [\n            x    747.91\n            y    449.60\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    163\n        label    \"\"\n        graphics\n        [\n            x    1116.10\n            y    414.55\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    164\n        label    \"\"\n        graphics\n        [\n            x    39.58\n            y    706.72\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    165\n        label    \"\"\n        graphics\n        [\n            x    647.36\n            y    263.33\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    166\n        label    \"\"\n        graphics\n        [\n            x    996.03\n            y    996.83\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    167\n        label    \"\"\n        graphics\n        [\n            x    1046.01\n            y    1114.00\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    168\n        label    \"\"\n        graphics\n        [\n            x    582.42\n            y    442.81\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    169\n        label    \"\"\n        graphics\n        [\n            x    806.63\n            y    460.78\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    170\n        label    \"\"\n        graphics\n        [\n            x    179.80\n            y    648.04\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    171\n        label    \"\"\n        graphics\n        [\n            x    958.81\n            y    1104.69\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    172\n        label    \"\"\n        graphics\n        [\n            x    439.47\n            y    54.03\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    173\n        label    \"\"\n        graphics\n        [\n            x    681.26\n            y    490.38\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    174\n        label    \"\"\n        graphics\n        [\n            x    728.02\n            y    956.60\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    175\n        label    \"\"\n        graphics\n        [\n            x    146.52\n            y    95.74\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    176\n        label    \"\"\n        graphics\n        [\n            x    1010.27\n            y    49.50\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    177\n        label    \"\"\n        graphics\n        [\n            x    1030.83\n            y    304.28\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    178\n        label    \"\"\n        graphics\n        [\n            x    639.12\n            y    632.00\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    179\n        label    \"\"\n        graphics\n        [\n            x    330.33\n            y    802.02\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    edge\n    [\n        source    1\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    10\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    100\n        target    60\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    100\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    101\n        target    77\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    102\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    102\n        target    93\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    103\n        target    50\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    104\n        target    69\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    105\n        target    37\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    106\n        target    100\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    107\n        target    67\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    108\n        target    55\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    109\n        target    101\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    11\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    110\n        target    43\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    110\n        target    75\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    111\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    112\n        target    31\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    113\n        target    38\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    114\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    115\n        target    69\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    116\n        target    103\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    117\n        target    32\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    118\n        target    110\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    119\n        target    69\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    12\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    120\n        target    46\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    121\n        target    73\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    122\n        target    109\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    123\n        target    109\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    124\n        target    70\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    125\n        target    47\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    126\n        target    89\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    127\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    128\n        target    62\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    129\n        target    61\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    129\n        target    81\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    13\n        target    77\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    13\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    130\n        target    73\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    131\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    132\n        target    84\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    133\n        target    39\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    134\n        target    50\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    135\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    136\n        target    35\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    137\n        target    92\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    138\n        target    101\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    138\n        target    93\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    139\n        target    29\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    14\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    140\n        target    134\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    141\n        target    25\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    142\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    143\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    144\n        target    64\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    145\n        target    87\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    146\n        target    86\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    146\n        target    94\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    147\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    147\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    148\n        target    122\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    149\n        target    98\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    15\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    150\n        target    144\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    151\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    152\n        target    86\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    153\n        target    88\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    154\n        target    78\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    155\n        target    75\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    156\n        target    88\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    157\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    158\n        target    28\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    159\n        target    48\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    16\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    160\n        target    152\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    161\n        target    102\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    162\n        target    66\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    163\n        target    117\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    164\n        target    73\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    165\n        target    29\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    166\n        target    99\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    167\n        target    116\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    167\n        target    117\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    168\n        target    143\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    169\n        target    98\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    17\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    170\n        target    24\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    171\n        target    110\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    172\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    172\n        target    91\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    173\n        target    129\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    174\n        target    135\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    175\n        target    168\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    176\n        target    134\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    177\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    178\n        target    159\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    178\n        target    60\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    179\n        target    113\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    18\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    19\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    2\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    20\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    21\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    21\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    22\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    22\n        target    56\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    23\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    24\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    25\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    26\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    27\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    27\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    28\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    28\n        target    169\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    29\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    3\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    30\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    31\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    32\n        target    145\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    32\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    33\n        target    28\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    34\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    35\n        target    26\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    36\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    37\n        target    26\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    38\n        target    37\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    39\n        target    26\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    4\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    40\n        target    31\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    41\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    42\n        target    20\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    43\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    44\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    45\n        target    20\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    46\n        target    26\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    47\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    48\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    49\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    5\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    50\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    50\n        target    26\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    51\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    52\n        target    154\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    52\n        target    51\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    53\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    54\n        target    30\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    55\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    56\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    57\n        target    30\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    58\n        target    33\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    59\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    6\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    60\n        target    52\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    61\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    62\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    63\n        target    36\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    64\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    65\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    66\n        target    53\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    67\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    68\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    69\n        target    46\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    7\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    70\n        target    45\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    71\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    72\n        target    42\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    73\n        target    20\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    74\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    75\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    76\n        target    31\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    77\n        target    32\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    78\n        target    34\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    79\n        target    30\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    8\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    80\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    81\n        target    76\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    82\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    83\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    84\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    85\n        target    77\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    86\n        target    43\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    87\n        target    64\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    88\n        target    29\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    89\n        target    73\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    9\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    90\n        target    71\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    91\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    92\n        target    175\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    92\n        target    70\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    93\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    94\n        target    32\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    95\n        target    35\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    96\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    97\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    98\n        target    92\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    99\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n]\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v180e198.tglf",
    "content": "0 611.000 579.000 30.000 30.000\n1 683.000 476.000 30.000 30.000\n2 709.000 542.000 30.000 30.000\n3 729.000 592.000 30.000 30.000\n4 265.000 99.000 30.000 30.000\n5 618.000 248.000 30.000 30.000\n6 360.000 442.000 30.000 30.000\n7 959.000 257.000 30.000 30.000\n8 412.000 852.000 30.000 30.000\n9 441.000 789.000 30.000 30.000\n10 293.000 1159.000 30.000 30.000\n11 1149.000 861.000 30.000 30.000\n12 790.000 463.000 30.000 30.000\n13 899.000 152.000 30.000 30.000\n14 1185.000 390.000 30.000 30.000\n15 712.000 214.000 30.000 30.000\n16 807.000 981.000 30.000 30.000\n17 406.000 882.000 30.000 30.000\n18 938.000 967.000 30.000 30.000\n19 944.000 714.000 30.000 30.000\n20 707.000 535.000 30.000 30.000\n21 432.000 356.000 30.000 30.000\n22 1052.000 1198.000 30.000 30.000\n23 996.000 1086.000 30.000 30.000\n24 328.000 1035.000 30.000 30.000\n25 36.000 232.000 30.000 30.000\n26 533.000 635.000 30.000 30.000\n27 347.000 640.000 30.000 30.000\n28 88.000 950.000 30.000 30.000\n29 17.000 559.000 30.000 30.000\n30 197.000 609.000 30.000 30.000\n31 512.000 1045.000 30.000 30.000\n32 186.000 313.000 30.000 30.000\n33 588.000 591.000 30.000 30.000\n34 53.000 1134.000 30.000 30.000\n35 878.000 630.000 30.000 30.000\n36 101.000 583.000 30.000 30.000\n37 186.000 572.000 30.000 30.000\n38 982.000 1188.000 30.000 30.000\n39 299.000 325.000 30.000 30.000\n40 911.000 1089.000 30.000 30.000\n41 364.000 237.000 30.000 30.000\n42 1163.000 1069.000 30.000 30.000\n43 113.000 1172.000 30.000 30.000\n44 1008.000 860.000 30.000 30.000\n45 176.000 292.000 30.000 30.000\n46 876.000 134.000 30.000 30.000\n47 993.000 638.000 30.000 30.000\n48 569.000 1138.000 30.000 30.000\n49 546.000 1164.000 30.000 30.000\n50 654.000 189.000 30.000 30.000\n51 842.000 92.000 30.000 30.000\n52 1010.000 857.000 30.000 30.000\n53 948.000 610.000 30.000 30.000\n54 756.000 73.000 30.000 30.000\n55 323.000 574.000 30.000 30.000\n56 956.000 187.000 30.000 30.000\n57 407.000 526.000 30.000 30.000\n58 850.000 433.000 30.000 30.000\n59 605.000 583.000 30.000 30.000\n60 642.000 391.000 30.000 30.000\n61 111.000 25.000 30.000 30.000\n62 906.000 679.000 30.000 30.000\n63 454.000 742.000 30.000 30.000\n64 359.000 54.000 30.000 30.000\n65 1011.000 811.000 30.000 30.000\n66 538.000 808.000 30.000 30.000\n67 721.000 98.000 30.000 30.000\n68 1204.000 646.000 30.000 30.000\n69 541.000 1019.000 30.000 30.000\n70 921.000 224.000 30.000 30.000\n71 1111.000 1015.000 30.000 30.000\n72 719.000 575.000 30.000 30.000\n73 972.000 454.000 30.000 30.000\n74 765.000 746.000 30.000 30.000\n75 962.000 723.000 30.000 30.000\n76 951.000 332.000 30.000 30.000\n77 805.000 1066.000 30.000 30.000\n78 66.000 263.000 30.000 30.000\n79 1094.000 678.000 30.000 30.000\n80 367.000 871.000 30.000 30.000\n81 1047.000 225.000 30.000 30.000\n82 834.000 1100.000 30.000 30.000\n83 517.000 346.000 30.000 30.000\n84 202.000 37.000 30.000 30.000\n85 19.000 627.000 30.000 30.000\n86 251.000 580.000 30.000 30.000\n87 804.000 511.000 30.000 30.000\n88 143.000 295.000 30.000 30.000\n89 676.000 729.000 30.000 30.000\n90 287.000 100.000 30.000 30.000\n91 656.000 706.000 30.000 30.000\n92 74.000 842.000 30.000 30.000\n93 1131.000 657.000 30.000 30.000\n94 567.000 796.000 30.000 30.000\n95 407.000 1173.000 30.000 30.000\n96 393.000 77.000 30.000 30.000\n97 472.000 439.000 30.000 30.000\n98 718.000 31.000 30.000 30.000\n99 567.000 270.000 30.000 30.000\n100 417.000 340.000 30.000 30.000\n101 996.000 1204.000 30.000 30.000\n102 296.000 603.000 30.000 30.000\n103 1073.000 243.000 30.000 30.000\n104 894.000 1115.000 30.000 30.000\n105 303.000 355.000 30.000 30.000\n106 791.000 626.000 30.000 30.000\n107 511.000 196.000 30.000 30.000\n108 361.000 1150.000 30.000 30.000\n109 482.000 1025.000 30.000 30.000\n110 1128.000 721.000 30.000 30.000\n111 45.000 1071.000 30.000 30.000\n112 668.000 913.000 30.000 30.000\n113 937.000 1183.000 30.000 30.000\n114 350.000 1065.000 30.000 30.000\n115 455.000 1180.000 30.000 30.000\n116 67.000 23.000 30.000 30.000\n117 95.000 474.000 30.000 30.000\n118 434.000 1068.000 30.000 30.000\n119 592.000 779.000 30.000 30.000\n120 1160.000 778.000 30.000 30.000\n121 983.000 1071.000 30.000 30.000\n122 715.000 511.000 30.000 30.000\n123 1050.000 1071.000 30.000 30.000\n124 126.000 1145.000 30.000 30.000\n125 552.000 915.000 30.000 30.000\n126 1049.000 922.000 30.000 30.000\n127 513.000 511.000 30.000 30.000\n128 50.000 498.000 30.000 30.000\n129 417.000 379.000 30.000 30.000\n130 98.000 181.000 30.000 30.000\n131 148.000 10.000 30.000 30.000\n132 934.000 1182.000 30.000 30.000\n133 185.000 105.000 30.000 30.000\n134 155.000 488.000 30.000 30.000\n135 462.000 684.000 30.000 30.000\n136 1200.000 1123.000 30.000 30.000\n137 694.000 1181.000 30.000 30.000\n138 382.000 818.000 30.000 30.000\n139 159.000 664.000 30.000 30.000\n140 912.000 235.000 30.000 30.000\n141 71.000 1088.000 30.000 30.000\n142 305.000 642.000 30.000 30.000\n143 1191.000 815.000 30.000 30.000\n144 619.000 895.000 30.000 30.000\n145 593.000 773.000 30.000 30.000\n146 65.000 742.000 30.000 30.000\n147 1079.000 765.000 30.000 30.000\n148 571.000 1097.000 30.000 30.000\n149 37.000 190.000 30.000 30.000\n150 43.000 86.000 30.000 30.000\n151 841.000 520.000 30.000 30.000\n152 74.000 222.000 30.000 30.000\n153 819.000 963.000 30.000 30.000\n154 306.000 898.000 30.000 30.000\n155 596.000 1129.000 30.000 30.000\n156 724.000 759.000 30.000 30.000\n157 279.000 885.000 30.000 30.000\n158 151.000 792.000 30.000 30.000\n159 327.000 293.000 30.000 30.000\n160 665.000 1067.000 30.000 30.000\n161 1137.000 494.000 30.000 30.000\n162 747.000 449.000 30.000 30.000\n163 1116.000 414.000 30.000 30.000\n164 39.000 706.000 30.000 30.000\n165 647.000 263.000 30.000 30.000\n166 996.000 996.000 30.000 30.000\n167 1046.000 1114.000 30.000 30.000\n168 582.000 442.000 30.000 30.000\n169 806.000 460.000 30.000 30.000\n170 179.000 648.000 30.000 30.000\n171 958.000 1104.000 30.000 30.000\n172 439.000 54.000 30.000 30.000\n173 681.000 490.000 30.000 30.000\n174 728.000 956.000 30.000 30.000\n175 146.000 95.000 30.000 30.000\n176 1010.000 49.000 30.000 30.000\n177 1030.000 304.000 30.000 30.000\n178 639.000 632.000 30.000 30.000\n179 330.000 802.000 30.000 30.000\n#\n140 134\n146 86\n62 4\n17 1\n44 2\n68 0\n145 87\n15 2\n12 9\n35 26\n8 0\n124 70\n59 11\n84 3\n13 77\n91 7\n125 47\n88 29\n20 9\n9 3\n138 101\n113 38\n73 20\n23 22\n28 169\n83 1\n123 109\n26 0\n129 61\n72 42\n162 66\n174 135\n37 26\n152 86\n79 30\n7 5\n48 15\n167 116\n78 34\n101 77\n173 129\n54 30\n61 5\n136 35\n179 113\n77 32\n157 6\n164 73\n96 21\n139 29\n14 3\n114 5\n27 21\n167 117\n129 81\n126 89\n163 117\n19 9\n175 168\n141 25\n5 4\n52 154\n22 56\n168 143\n165 29\n87 64\n105 37\n6 4\n28 1\n133 39\n11 1\n21 5\n55 16\n149 98\n120 46\n85 77\n24 8\n111 6\n169 98\n151 8\n172 91\n4 1\n33 28\n172 12\n102 93\n32 145\n41 2\n144 64\n53 1\n46 26\n158 28\n104 69\n106 100\n147 14\n92 175\n128 62\n146 94\n137 92\n178 159\n143 1\n118 110\n67 1\n65 7\n107 67\n150 144\n138 93\n56 1\n110 75\n1 0\n34 23\n52 51\n131 10\n30 5\n63 36\n70 45\n16 13\n57 30\n50 14\n40 31\n160 152\n22 12\n21 11\n51 0\n115 69\n170 24\n32 18\n102 23\n112 31\n66 53\n122 109\n92 70\n156 88\n89 73\n39 26\n177 1\n64 1\n13 8\n18 5\n42 20\n132 84\n82 10\n95 35\n27 18\n127 5\n100 60\n171 110\n147 23\n98 92\n50 26\n76 31\n31 0\n38 37\n153 88\n47 16\n110 43\n142 18\n135 8\n81 76\n121 73\n36 10\n108 55\n117 32\n166 99\n58 33\n176 134\n80 3\n178 60\n99 23\n134 50\n116 103\n2 1\n97 9\n93 8\n3 1\n29 6\n159 48\n45 20\n86 43\n49 11\n94 32\n155 75\n161 102\n90 71\n10 2\n43 7\n109 101\n154 78\n119 69\n103 50\n74 4\n60 52\n69 46\n75 22\n130 73\n148 122\n71 14\n25 0\n100 9\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v180e216.gml",
    "content": "graph\n[\n    node\n    [\n        id    0\n        label    \"\"\n        graphics\n        [\n            x    713.01\n            y    798.11\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    1\n        label    \"\"\n        graphics\n        [\n            x    297.71\n            y    464.91\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    2\n        label    \"\"\n        graphics\n        [\n            x    437.30\n            y    1167.32\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    3\n        label    \"\"\n        graphics\n        [\n            x    1054.07\n            y    920.47\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    4\n        label    \"\"\n        graphics\n        [\n            x    317.06\n            y    277.50\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    5\n        label    \"\"\n        graphics\n        [\n            x    877.60\n            y    101.17\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    6\n        label    \"\"\n        graphics\n        [\n            x    1106.85\n            y    41.35\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    7\n        label    \"\"\n        graphics\n        [\n            x    697.34\n            y    1043.95\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    8\n        label    \"\"\n        graphics\n        [\n            x    162.29\n            y    542.60\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    9\n        label    \"\"\n        graphics\n        [\n            x    647.07\n            y    999.14\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    10\n        label    \"\"\n        graphics\n        [\n            x    952.19\n            y    143.37\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    11\n        label    \"\"\n        graphics\n        [\n            x    972.59\n            y    353.40\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    12\n        label    \"\"\n        graphics\n        [\n            x    1022.82\n            y    587.21\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    13\n        label    \"\"\n        graphics\n        [\n            x    380.75\n            y    388.68\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    14\n        label    \"\"\n        graphics\n        [\n            x    506.78\n            y    773.70\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    15\n        label    \"\"\n        graphics\n        [\n            x    346.89\n            y    848.73\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    16\n        label    \"\"\n        graphics\n        [\n            x    922.17\n            y    780.77\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    17\n        label    \"\"\n        graphics\n        [\n            x    601.75\n            y    33.67\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    18\n        label    \"\"\n        graphics\n        [\n            x    1073.17\n            y    1086.48\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    19\n        label    \"\"\n        graphics\n        [\n            x    374.70\n            y    73.75\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    20\n        label    \"\"\n        graphics\n        [\n            x    523.36\n            y    701.92\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    21\n        label    \"\"\n        graphics\n        [\n            x    749.53\n            y    253.06\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    22\n        label    \"\"\n        graphics\n        [\n            x    278.85\n            y    1197.37\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    23\n        label    \"\"\n        graphics\n        [\n            x    867.67\n            y    550.28\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    24\n        label    \"\"\n        graphics\n        [\n            x    23.31\n            y    76.94\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    25\n        label    \"\"\n        graphics\n        [\n            x    877.33\n            y    536.49\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    26\n        label    \"\"\n        graphics\n        [\n            x    1099.48\n            y    536.33\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    27\n        label    \"\"\n        graphics\n        [\n            x    1094.12\n            y    1073.93\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    28\n        label    \"\"\n        graphics\n        [\n            x    204.81\n            y    153.76\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    29\n        label    \"\"\n        graphics\n        [\n            x    304.50\n            y    367.02\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    30\n        label    \"\"\n        graphics\n        [\n            x    706.53\n            y    357.74\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    31\n        label    \"\"\n        graphics\n        [\n            x    147.81\n            y    1097.45\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    32\n        label    \"\"\n        graphics\n        [\n            x    228.41\n            y    65.21\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    33\n        label    \"\"\n        graphics\n        [\n            x    1185.37\n            y    384.26\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    34\n        label    \"\"\n        graphics\n        [\n            x    298.59\n            y    246.25\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    35\n        label    \"\"\n        graphics\n        [\n            x    41.77\n            y    406.61\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    36\n        label    \"\"\n        graphics\n        [\n            x    941.58\n            y    962.82\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    37\n        label    \"\"\n        graphics\n        [\n            x    1199.37\n            y    222.55\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    38\n        label    \"\"\n        graphics\n        [\n            x    364.88\n            y    542.22\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    39\n        label    \"\"\n        graphics\n        [\n            x    37.28\n            y    71.91\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    40\n        label    \"\"\n        graphics\n        [\n            x    772.94\n            y    315.22\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    41\n        label    \"\"\n        graphics\n        [\n            x    1169.49\n            y    686.28\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    42\n        label    \"\"\n        graphics\n        [\n            x    461.15\n            y    809.47\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    43\n        label    \"\"\n        graphics\n        [\n            x    937.07\n            y    803.65\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    44\n        label    \"\"\n        graphics\n        [\n            x    1158.76\n            y    563.67\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    45\n        label    \"\"\n        graphics\n        [\n            x    197.25\n            y    423.41\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    46\n        label    \"\"\n        graphics\n        [\n            x    716.82\n            y    882.17\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    47\n        label    \"\"\n        graphics\n        [\n            x    233.77\n            y    35.30\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    48\n        label    \"\"\n        graphics\n        [\n            x    484.05\n            y    577.52\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    49\n        label    \"\"\n        graphics\n        [\n            x    360.83\n            y    970.20\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    50\n        label    \"\"\n        graphics\n        [\n            x    906.44\n            y    258.35\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    51\n        label    \"\"\n        graphics\n        [\n            x    562.63\n            y    261.07\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    52\n        label    \"\"\n        graphics\n        [\n            x    979.96\n            y    1067.92\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    53\n        label    \"\"\n        graphics\n        [\n            x    379.05\n            y    410.30\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    54\n        label    \"\"\n        graphics\n        [\n            x    19.52\n            y    567.84\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    55\n        label    \"\"\n        graphics\n        [\n            x    381.62\n            y    763.83\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    56\n        label    \"\"\n        graphics\n        [\n            x    942.75\n            y    370.50\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    57\n        label    \"\"\n        graphics\n        [\n            x    730.81\n            y    259.19\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    58\n        label    \"\"\n        graphics\n        [\n            x    837.68\n            y    1115.31\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    59\n        label    \"\"\n        graphics\n        [\n            x    1095.33\n            y    312.05\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    60\n        label    \"\"\n        graphics\n        [\n            x    28.54\n            y    791.62\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    61\n        label    \"\"\n        graphics\n        [\n            x    209.77\n            y    645.26\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    62\n        label    \"\"\n        graphics\n        [\n            x    1119.35\n            y    126.77\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    63\n        label    \"\"\n        graphics\n        [\n            x    412.38\n            y    472.13\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    64\n        label    \"\"\n        graphics\n        [\n            x    675.20\n            y    911.46\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    65\n        label    \"\"\n        graphics\n        [\n            x    702.59\n            y    909.85\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    66\n        label    \"\"\n        graphics\n        [\n            x    152.63\n            y    1091.25\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    67\n        label    \"\"\n        graphics\n        [\n            x    44.60\n            y    790.80\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    68\n        label    \"\"\n        graphics\n        [\n            x    17.30\n            y    87.77\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    69\n        label    \"\"\n        graphics\n        [\n            x    225.13\n            y    18.53\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    70\n        label    \"\"\n        graphics\n        [\n            x    612.54\n            y    79.55\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    71\n        label    \"\"\n        graphics\n        [\n            x    2.77\n            y    542.31\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    72\n        label    \"\"\n        graphics\n        [\n            x    1117.56\n            y    259.01\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    73\n        label    \"\"\n        graphics\n        [\n            x    1078.36\n            y    586.15\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    74\n        label    \"\"\n        graphics\n        [\n            x    1123.63\n            y    664.02\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    75\n        label    \"\"\n        graphics\n        [\n            x    1206.82\n            y    274.96\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    76\n        label    \"\"\n        graphics\n        [\n            x    522.96\n            y    1040.53\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    77\n        label    \"\"\n        graphics\n        [\n            x    538.10\n            y    79.19\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    78\n        label    \"\"\n        graphics\n        [\n            x    1131.47\n            y    1167.72\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    79\n        label    \"\"\n        graphics\n        [\n            x    7.35\n            y    87.35\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    80\n        label    \"\"\n        graphics\n        [\n            x    719.42\n            y    762.34\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    81\n        label    \"\"\n        graphics\n        [\n            x    373.90\n            y    1101.72\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    82\n        label    \"\"\n        graphics\n        [\n            x    652.30\n            y    586.21\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    83\n        label    \"\"\n        graphics\n        [\n            x    256.99\n            y    822.22\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    84\n        label    \"\"\n        graphics\n        [\n            x    675.12\n            y    452.51\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    85\n        label    \"\"\n        graphics\n        [\n            x    1025.97\n            y    136.85\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    86\n        label    \"\"\n        graphics\n        [\n            x    1160.15\n            y    888.06\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    87\n        label    \"\"\n        graphics\n        [\n            x    480.42\n            y    850.75\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    88\n        label    \"\"\n        graphics\n        [\n            x    345.38\n            y    285.27\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    89\n        label    \"\"\n        graphics\n        [\n            x    865.29\n            y    621.79\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    90\n        label    \"\"\n        graphics\n        [\n            x    298.79\n            y    1098.13\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    91\n        label    \"\"\n        graphics\n        [\n            x    425.56\n            y    1181.28\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    92\n        label    \"\"\n        graphics\n        [\n            x    987.11\n            y    1177.60\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    93\n        label    \"\"\n        graphics\n        [\n            x    640.85\n            y    983.98\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    94\n        label    \"\"\n        graphics\n        [\n            x    659.94\n            y    433.84\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    95\n        label    \"\"\n        graphics\n        [\n            x    1124.66\n            y    883.09\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    96\n        label    \"\"\n        graphics\n        [\n            x    729.50\n            y    202.85\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    97\n        label    \"\"\n        graphics\n        [\n            x    990.30\n            y    103.42\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    98\n        label    \"\"\n        graphics\n        [\n            x    0.01\n            y    172.15\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    99\n        label    \"\"\n        graphics\n        [\n            x    673.50\n            y    913.15\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    100\n        label    \"\"\n        graphics\n        [\n            x    995.88\n            y    266.90\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    101\n        label    \"\"\n        graphics\n        [\n            x    940.05\n            y    637.51\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    102\n        label    \"\"\n        graphics\n        [\n            x    678.88\n            y    1076.70\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    103\n        label    \"\"\n        graphics\n        [\n            x    84.21\n            y    908.88\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    104\n        label    \"\"\n        graphics\n        [\n            x    881.86\n            y    268.63\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    105\n        label    \"\"\n        graphics\n        [\n            x    88.54\n            y    668.59\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    106\n        label    \"\"\n        graphics\n        [\n            x    131.26\n            y    496.72\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    107\n        label    \"\"\n        graphics\n        [\n            x    1204.35\n            y    588.64\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    108\n        label    \"\"\n        graphics\n        [\n            x    411.44\n            y    347.32\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    109\n        label    \"\"\n        graphics\n        [\n            x    258.11\n            y    525.63\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    110\n        label    \"\"\n        graphics\n        [\n            x    831.73\n            y    957.64\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    111\n        label    \"\"\n        graphics\n        [\n            x    46.07\n            y    781.29\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    112\n        label    \"\"\n        graphics\n        [\n            x    571.22\n            y    297.65\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    113\n        label    \"\"\n        graphics\n        [\n            x    250.89\n            y    1199.31\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    114\n        label    \"\"\n        graphics\n        [\n            x    240.77\n            y    106.76\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    115\n        label    \"\"\n        graphics\n        [\n            x    679.19\n            y    517.11\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    116\n        label    \"\"\n        graphics\n        [\n            x    999.66\n            y    599.23\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    117\n        label    \"\"\n        graphics\n        [\n            x    95.23\n            y    714.40\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    118\n        label    \"\"\n        graphics\n        [\n            x    1076.37\n            y    77.52\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    119\n        label    \"\"\n        graphics\n        [\n            x    260.65\n            y    291.01\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    120\n        label    \"\"\n        graphics\n        [\n            x    468.39\n            y    222.85\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    121\n        label    \"\"\n        graphics\n        [\n            x    10.89\n            y    105.99\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    122\n        label    \"\"\n        graphics\n        [\n            x    158.82\n            y    985.21\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    123\n        label    \"\"\n        graphics\n        [\n            x    247.71\n            y    567.77\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    124\n        label    \"\"\n        graphics\n        [\n            x    8.39\n            y    1110.80\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    125\n        label    \"\"\n        graphics\n        [\n            x    737.03\n            y    146.07\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    126\n        label    \"\"\n        graphics\n        [\n            x    1182.21\n            y    379.95\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    127\n        label    \"\"\n        graphics\n        [\n            x    1204.34\n            y    370.36\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    128\n        label    \"\"\n        graphics\n        [\n            x    322.55\n            y    1001.73\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    129\n        label    \"\"\n        graphics\n        [\n            x    623.25\n            y    81.21\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    130\n        label    \"\"\n        graphics\n        [\n            x    358.53\n            y    1099.82\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    131\n        label    \"\"\n        graphics\n        [\n            x    584.47\n            y    1179.09\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    132\n        label    \"\"\n        graphics\n        [\n            x    947.87\n            y    946.85\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    133\n        label    \"\"\n        graphics\n        [\n            x    287.61\n            y    316.78\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    134\n        label    \"\"\n        graphics\n        [\n            x    1163.45\n            y    659.32\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    135\n        label    \"\"\n        graphics\n        [\n            x    1109.69\n            y    690.93\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    136\n        label    \"\"\n        graphics\n        [\n            x    660.32\n            y    608.84\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    137\n        label    \"\"\n        graphics\n        [\n            x    823.82\n            y    1112.71\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    138\n        label    \"\"\n        graphics\n        [\n            x    12.84\n            y    807.44\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    139\n        label    \"\"\n        graphics\n        [\n            x    243.78\n            y    663.80\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    140\n        label    \"\"\n        graphics\n        [\n            x    942.81\n            y    681.36\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    141\n        label    \"\"\n        graphics\n        [\n            x    435.16\n            y    715.45\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    142\n        label    \"\"\n        graphics\n        [\n            x    485.31\n            y    574.43\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    143\n        label    \"\"\n        graphics\n        [\n            x    86.63\n            y    56.12\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    144\n        label    \"\"\n        graphics\n        [\n            x    22.28\n            y    572.18\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    145\n        label    \"\"\n        graphics\n        [\n            x    285.92\n            y    342.59\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    146\n        label    \"\"\n        graphics\n        [\n            x    402.31\n            y    191.61\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    147\n        label    \"\"\n        graphics\n        [\n            x    721.06\n            y    911.63\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    148\n        label    \"\"\n        graphics\n        [\n            x    413.70\n            y    742.86\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    149\n        label    \"\"\n        graphics\n        [\n            x    77.92\n            y    1021.47\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    150\n        label    \"\"\n        graphics\n        [\n            x    1106.84\n            y    937.39\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    151\n        label    \"\"\n        graphics\n        [\n            x    502.59\n            y    717.43\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    152\n        label    \"\"\n        graphics\n        [\n            x    816.40\n            y    281.60\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    153\n        label    \"\"\n        graphics\n        [\n            x    925.13\n            y    156.55\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    154\n        label    \"\"\n        graphics\n        [\n            x    731.48\n            y    1201.22\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    155\n        label    \"\"\n        graphics\n        [\n            x    657.49\n            y    279.95\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    156\n        label    \"\"\n        graphics\n        [\n            x    958.67\n            y    143.23\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    157\n        label    \"\"\n        graphics\n        [\n            x    973.94\n            y    1022.00\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    158\n        label    \"\"\n        graphics\n        [\n            x    421.35\n            y    382.90\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    159\n        label    \"\"\n        graphics\n        [\n            x    531.56\n            y    1046.61\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    160\n        label    \"\"\n        graphics\n        [\n            x    374.08\n            y    733.81\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    161\n        label    \"\"\n        graphics\n        [\n            x    1158.23\n            y    812.27\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    162\n        label    \"\"\n        graphics\n        [\n            x    1128.90\n            y    938.93\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    163\n        label    \"\"\n        graphics\n        [\n            x    1029.18\n            y    364.44\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    164\n        label    \"\"\n        graphics\n        [\n            x    616.89\n            y    301.56\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    165\n        label    \"\"\n        graphics\n        [\n            x    117.90\n            y    265.00\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    166\n        label    \"\"\n        graphics\n        [\n            x    275.57\n            y    80.25\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    167\n        label    \"\"\n        graphics\n        [\n            x    631.23\n            y    1170.11\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    168\n        label    \"\"\n        graphics\n        [\n            x    723.90\n            y    598.09\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    169\n        label    \"\"\n        graphics\n        [\n            x    411.72\n            y    379.79\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    170\n        label    \"\"\n        graphics\n        [\n            x    881.85\n            y    439.48\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    171\n        label    \"\"\n        graphics\n        [\n            x    1033.21\n            y    1096.64\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    172\n        label    \"\"\n        graphics\n        [\n            x    515.93\n            y    312.78\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    173\n        label    \"\"\n        graphics\n        [\n            x    887.50\n            y    1110.39\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    174\n        label    \"\"\n        graphics\n        [\n            x    698.75\n            y    159.82\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    175\n        label    \"\"\n        graphics\n        [\n            x    655.92\n            y    460.08\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    176\n        label    \"\"\n        graphics\n        [\n            x    171.65\n            y    791.00\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    177\n        label    \"\"\n        graphics\n        [\n            x    626.23\n            y    226.12\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    178\n        label    \"\"\n        graphics\n        [\n            x    550.44\n            y    944.06\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    179\n        label    \"\"\n        graphics\n        [\n            x    1155.71\n            y    578.11\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    edge\n    [\n        source    1\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    10\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    100\n        target    50\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    101\n        target    31\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    102\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    102\n        target    34\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    103\n        target    44\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    104\n        target    58\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    105\n        target    60\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    106\n        target    102\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    106\n        target    84\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    107\n        target    59\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    108\n        target    45\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    109\n        target    63\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    11\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    110\n        target    49\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    111\n        target    36\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    111\n        target    46\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    112\n        target    20\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    112\n        target    61\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    113\n        target    25\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    114\n        target    44\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    115\n        target    19\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    116\n        target    59\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    117\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    118\n        target    133\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    118\n        target    90\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    119\n        target    140\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    119\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    12\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    120\n        target    100\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    121\n        target    24\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    122\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    123\n        target    48\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    124\n        target    101\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    125\n        target    66\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    126\n        target    107\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    127\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    128\n        target    105\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    128\n        target    112\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    129\n        target    38\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    13\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    13\n        target    113\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    130\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    131\n        target    105\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    132\n        target    105\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    133\n        target    144\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    133\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    134\n        target    119\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    135\n        target    37\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    135\n        target    72\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    135\n        target    81\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    135\n        target    93\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    136\n        target    48\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    137\n        target    70\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    138\n        target    102\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    139\n        target    88\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    14\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    140\n        target    137\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    140\n        target    155\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    141\n        target    92\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    142\n        target    43\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    143\n        target    118\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    144\n        target    19\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    145\n        target    70\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    146\n        target    70\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    147\n        target    57\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    148\n        target    50\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    148\n        target    58\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    149\n        target    48\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    15\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    150\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    151\n        target    55\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    152\n        target    62\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    153\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    153\n        target    36\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    153\n        target    46\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    154\n        target    144\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    155\n        target    80\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    156\n        target    40\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    157\n        target    66\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    158\n        target    116\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    159\n        target    136\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    16\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    160\n        target    133\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    161\n        target    30\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    162\n        target    69\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    163\n        target    48\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    164\n        target    63\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    164\n        target    95\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    165\n        target    141\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    166\n        target    55\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    167\n        target    76\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    168\n        target    154\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    169\n        target    167\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    17\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    170\n        target    103\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    171\n        target    28\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    172\n        target    116\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    173\n        target    124\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    174\n        target    140\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    175\n        target    157\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    176\n        target    172\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    177\n        target    158\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    178\n        target    85\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    179\n        target    20\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    18\n        target    66\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    18\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    19\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    19\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    2\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    20\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    21\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    22\n        target    19\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    23\n        target    20\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    24\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    25\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    26\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    26\n        target    169\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    27\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    28\n        target    26\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    29\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    29\n        target    118\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    3\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    30\n        target    26\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    31\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    32\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    33\n        target    25\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    34\n        target    19\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    35\n        target    27\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    36\n        target    29\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    37\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    37\n        target    81\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    38\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    39\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    4\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    40\n        target    36\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    41\n        target    36\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    42\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    43\n        target    128\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    43\n        target    24\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    44\n        target    37\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    45\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    46\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    47\n        target    20\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    48\n        target    28\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    49\n        target    24\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    5\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    50\n        target    33\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    51\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    52\n        target    37\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    53\n        target    28\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    53\n        target    49\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    54\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    55\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    56\n        target    49\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    57\n        target    116\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    57\n        target    19\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    57\n        target    85\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    58\n        target    57\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    59\n        target    57\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    6\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    60\n        target    39\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    60\n        target    78\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    61\n        target    58\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    62\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    62\n        target    30\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    63\n        target    48\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    63\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    64\n        target    60\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    65\n        target    35\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    66\n        target    42\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    67\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    68\n        target    63\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    69\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    7\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    70\n        target    60\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    71\n        target    104\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    71\n        target    53\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    72\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    73\n        target    138\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    73\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    74\n        target    45\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    75\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    76\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    77\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    78\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    79\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    8\n        target    155\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    8\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    80\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    81\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    82\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    83\n        target    56\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    84\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    85\n        target    80\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    86\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    87\n        target    153\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    87\n        target    160\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    87\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    88\n        target    70\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    89\n        target    53\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    89\n        target    86\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    9\n        target    29\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    9\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    90\n        target    24\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    91\n        target    41\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    92\n        target    61\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    93\n        target    52\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    94\n        target    57\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    95\n        target    53\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    96\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    97\n        target    69\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    97\n        target    73\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    98\n        target    90\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    99\n        target    27\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n]\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v180e216.tglf",
    "content": "0 713.000 798.000 30.000 30.000\n1 297.000 464.000 30.000 30.000\n2 437.000 1167.000 30.000 30.000\n3 1054.000 920.000 30.000 30.000\n4 317.000 277.000 30.000 30.000\n5 877.000 101.000 30.000 30.000\n6 1106.000 41.000 30.000 30.000\n7 697.000 1043.000 30.000 30.000\n8 162.000 542.000 30.000 30.000\n9 647.000 999.000 30.000 30.000\n10 952.000 143.000 30.000 30.000\n11 972.000 353.000 30.000 30.000\n12 1022.000 587.000 30.000 30.000\n13 380.000 388.000 30.000 30.000\n14 506.000 773.000 30.000 30.000\n15 346.000 848.000 30.000 30.000\n16 922.000 780.000 30.000 30.000\n17 601.000 33.000 30.000 30.000\n18 1073.000 1086.000 30.000 30.000\n19 374.000 73.000 30.000 30.000\n20 523.000 701.000 30.000 30.000\n21 749.000 253.000 30.000 30.000\n22 278.000 1197.000 30.000 30.000\n23 867.000 550.000 30.000 30.000\n24 23.000 76.000 30.000 30.000\n25 877.000 536.000 30.000 30.000\n26 1099.000 536.000 30.000 30.000\n27 1094.000 1073.000 30.000 30.000\n28 204.000 153.000 30.000 30.000\n29 304.000 367.000 30.000 30.000\n30 706.000 357.000 30.000 30.000\n31 147.000 1097.000 30.000 30.000\n32 228.000 65.000 30.000 30.000\n33 1185.000 384.000 30.000 30.000\n34 298.000 246.000 30.000 30.000\n35 41.000 406.000 30.000 30.000\n36 941.000 962.000 30.000 30.000\n37 1199.000 222.000 30.000 30.000\n38 364.000 542.000 30.000 30.000\n39 37.000 71.000 30.000 30.000\n40 772.000 315.000 30.000 30.000\n41 1169.000 686.000 30.000 30.000\n42 461.000 809.000 30.000 30.000\n43 937.000 803.000 30.000 30.000\n44 1158.000 563.000 30.000 30.000\n45 197.000 423.000 30.000 30.000\n46 716.000 882.000 30.000 30.000\n47 233.000 35.000 30.000 30.000\n48 484.000 577.000 30.000 30.000\n49 360.000 970.000 30.000 30.000\n50 906.000 258.000 30.000 30.000\n51 562.000 261.000 30.000 30.000\n52 979.000 1067.000 30.000 30.000\n53 379.000 410.000 30.000 30.000\n54 19.000 567.000 30.000 30.000\n55 381.000 763.000 30.000 30.000\n56 942.000 370.000 30.000 30.000\n57 730.000 259.000 30.000 30.000\n58 837.000 1115.000 30.000 30.000\n59 1095.000 312.000 30.000 30.000\n60 28.000 791.000 30.000 30.000\n61 209.000 645.000 30.000 30.000\n62 1119.000 126.000 30.000 30.000\n63 412.000 472.000 30.000 30.000\n64 675.000 911.000 30.000 30.000\n65 702.000 909.000 30.000 30.000\n66 152.000 1091.000 30.000 30.000\n67 44.000 790.000 30.000 30.000\n68 17.000 87.000 30.000 30.000\n69 225.000 18.000 30.000 30.000\n70 612.000 79.000 30.000 30.000\n71 2.000 542.000 30.000 30.000\n72 1117.000 259.000 30.000 30.000\n73 1078.000 586.000 30.000 30.000\n74 1123.000 664.000 30.000 30.000\n75 1206.000 274.000 30.000 30.000\n76 522.000 1040.000 30.000 30.000\n77 538.000 79.000 30.000 30.000\n78 1131.000 1167.000 30.000 30.000\n79 7.000 87.000 30.000 30.000\n80 719.000 762.000 30.000 30.000\n81 373.000 1101.000 30.000 30.000\n82 652.000 586.000 30.000 30.000\n83 256.000 822.000 30.000 30.000\n84 675.000 452.000 30.000 30.000\n85 1025.000 136.000 30.000 30.000\n86 1160.000 888.000 30.000 30.000\n87 480.000 850.000 30.000 30.000\n88 345.000 285.000 30.000 30.000\n89 865.000 621.000 30.000 30.000\n90 298.000 1098.000 30.000 30.000\n91 425.000 1181.000 30.000 30.000\n92 987.000 1177.000 30.000 30.000\n93 640.000 983.000 30.000 30.000\n94 659.000 433.000 30.000 30.000\n95 1124.000 883.000 30.000 30.000\n96 729.000 202.000 30.000 30.000\n97 990.000 103.000 30.000 30.000\n98 0.000 172.000 30.000 30.000\n99 673.000 913.000 30.000 30.000\n100 995.000 266.000 30.000 30.000\n101 940.000 637.000 30.000 30.000\n102 678.000 1076.000 30.000 30.000\n103 84.000 908.000 30.000 30.000\n104 881.000 268.000 30.000 30.000\n105 88.000 668.000 30.000 30.000\n106 131.000 496.000 30.000 30.000\n107 1204.000 588.000 30.000 30.000\n108 411.000 347.000 30.000 30.000\n109 258.000 525.000 30.000 30.000\n110 831.000 957.000 30.000 30.000\n111 46.000 781.000 30.000 30.000\n112 571.000 297.000 30.000 30.000\n113 250.000 1199.000 30.000 30.000\n114 240.000 106.000 30.000 30.000\n115 679.000 517.000 30.000 30.000\n116 999.000 599.000 30.000 30.000\n117 95.000 714.000 30.000 30.000\n118 1076.000 77.000 30.000 30.000\n119 260.000 291.000 30.000 30.000\n120 468.000 222.000 30.000 30.000\n121 10.000 105.000 30.000 30.000\n122 158.000 985.000 30.000 30.000\n123 247.000 567.000 30.000 30.000\n124 8.000 1110.000 30.000 30.000\n125 737.000 146.000 30.000 30.000\n126 1182.000 379.000 30.000 30.000\n127 1204.000 370.000 30.000 30.000\n128 322.000 1001.000 30.000 30.000\n129 623.000 81.000 30.000 30.000\n130 358.000 1099.000 30.000 30.000\n131 584.000 1179.000 30.000 30.000\n132 947.000 946.000 30.000 30.000\n133 287.000 316.000 30.000 30.000\n134 1163.000 659.000 30.000 30.000\n135 1109.000 690.000 30.000 30.000\n136 660.000 608.000 30.000 30.000\n137 823.000 1112.000 30.000 30.000\n138 12.000 807.000 30.000 30.000\n139 243.000 663.000 30.000 30.000\n140 942.000 681.000 30.000 30.000\n141 435.000 715.000 30.000 30.000\n142 485.000 574.000 30.000 30.000\n143 86.000 56.000 30.000 30.000\n144 22.000 572.000 30.000 30.000\n145 285.000 342.000 30.000 30.000\n146 402.000 191.000 30.000 30.000\n147 721.000 911.000 30.000 30.000\n148 413.000 742.000 30.000 30.000\n149 77.000 1021.000 30.000 30.000\n150 1106.000 937.000 30.000 30.000\n151 502.000 717.000 30.000 30.000\n152 816.000 281.000 30.000 30.000\n153 925.000 156.000 30.000 30.000\n154 731.000 1201.000 30.000 30.000\n155 657.000 279.000 30.000 30.000\n156 958.000 143.000 30.000 30.000\n157 973.000 1022.000 30.000 30.000\n158 421.000 382.000 30.000 30.000\n159 531.000 1046.000 30.000 30.000\n160 374.000 733.000 30.000 30.000\n161 1158.000 812.000 30.000 30.000\n162 1128.000 938.000 30.000 30.000\n163 1029.000 364.000 30.000 30.000\n164 616.000 301.000 30.000 30.000\n165 117.000 265.000 30.000 30.000\n166 275.000 80.000 30.000 30.000\n167 631.000 1170.000 30.000 30.000\n168 723.000 598.000 30.000 30.000\n169 411.000 379.000 30.000 30.000\n170 881.000 439.000 30.000 30.000\n171 1033.000 1096.000 30.000 30.000\n172 515.000 312.000 30.000 30.000\n173 887.000 1110.000 30.000 30.000\n174 698.000 159.000 30.000 30.000\n175 655.000 460.000 30.000 30.000\n176 171.000 791.000 30.000 30.000\n177 626.000 226.000 30.000 30.000\n178 550.000 944.000 30.000 30.000\n179 1155.000 578.000 30.000 30.000\n#\n68 63\n127 16\n164 95\n57 19\n108 45\n48 28\n53 28\n179 20\n124 101\n130 18\n173 124\n106 102\n58 57\n19 18\n65 35\n156 40\n72 7\n107 59\n112 20\n6 1\n18 8\n81 17\n40 36\n155 80\n14 4\n75 8\n176 172\n21 17\n111 36\n51 9\n49 24\n13 0\n3 1\n140 155\n19 10\n145 70\n113 25\n174 140\n99 27\n135 93\n13 113\n93 52\n18 66\n165 141\n152 62\n137 70\n55 0\n95 53\n44 37\n9 6\n8 155\n63 48\n61 58\n170 103\n59 57\n91 41\n27 2\n110 49\n150 22\n37 81\n106 84\n147 57\n157 66\n5 0\n96 12\n70 60\n100 50\n103 44\n140 137\n149 48\n120 100\n89 86\n115 19\n117 2\n41 36\n94 57\n17 6\n29 0\n135 81\n153 36\n146 70\n144 19\n136 48\n102 34\n92 61\n168 154\n86 21\n123 48\n97 69\n31 0\n118 133\n104 58\n60 78\n69 22\n84 15\n141 92\n85 80\n131 105\n122 8\n34 19\n22 19\n73 138\n42 22\n11 7\n62 30\n177 158\n98 90\n129 38\n133 144\n166 55\n4 3\n8 2\n101 31\n32 2\n26 169\n82 5\n138 102\n2 0\n63 9\n60 39\n64 60\n76 17\n162 69\n43 128\n87 153\n112 61\n148 58\n83 56\n175 157\n57 85\n7 5\n126 107\n26 1\n121 24\n74 45\n67 17\n118 90\n178 85\n125 66\n28 26\n128 105\n56 49\n36 29\n87 160\n77 1\n139 88\n24 10\n87 6\n142 43\n167 76\n133 2\n153 13\n46 23\n102 23\n88 70\n153 46\n43 24\n159 136\n111 46\n119 16\n47 20\n37 15\n116 59\n79 18\n119 140\n62 3\n15 7\n109 63\n53 49\n151 55\n143 118\n114 44\n171 28\n164 63\n39 12\n132 105\n135 72\n57 116\n30 26\n20 17\n73 5\n45 16\n25 15\n12 11\n128 112\n38 9\n9 29\n10 7\n135 37\n148 50\n169 167\n163 48\n172 116\n89 53\n23 20\n35 27\n158 116\n50 33\n54 1\n78 2\n1 0\n90 24\n160 133\n71 53\n105 60\n134 119\n71 104\n66 42\n52 37\n161 30\n33 25\n97 73\n16 5\n29 118\n80 1\n154 144\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v180e234.gml",
    "content": "graph\n[\n    node\n    [\n        id    0\n        label    \"\"\n        graphics\n        [\n            x    448.62\n            y    39.57\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    1\n        label    \"\"\n        graphics\n        [\n            x    375.62\n            y    828.74\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    2\n        label    \"\"\n        graphics\n        [\n            x    924.09\n            y    1102.70\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    3\n        label    \"\"\n        graphics\n        [\n            x    1142.87\n            y    334.80\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    4\n        label    \"\"\n        graphics\n        [\n            x    432.71\n            y    384.28\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    5\n        label    \"\"\n        graphics\n        [\n            x    1193.49\n            y    556.65\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    6\n        label    \"\"\n        graphics\n        [\n            x    730.35\n            y    857.37\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    7\n        label    \"\"\n        graphics\n        [\n            x    839.03\n            y    587.03\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    8\n        label    \"\"\n        graphics\n        [\n            x    74.69\n            y    570.08\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    9\n        label    \"\"\n        graphics\n        [\n            x    546.09\n            y    1151.92\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    10\n        label    \"\"\n        graphics\n        [\n            x    559.16\n            y    886.35\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    11\n        label    \"\"\n        graphics\n        [\n            x    123.92\n            y    56.60\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    12\n        label    \"\"\n        graphics\n        [\n            x    187.45\n            y    590.06\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    13\n        label    \"\"\n        graphics\n        [\n            x    1109.54\n            y    1160.09\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    14\n        label    \"\"\n        graphics\n        [\n            x    741.69\n            y    861.59\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    15\n        label    \"\"\n        graphics\n        [\n            x    741.02\n            y    619.40\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    16\n        label    \"\"\n        graphics\n        [\n            x    463.72\n            y    732.94\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    17\n        label    \"\"\n        graphics\n        [\n            x    513.66\n            y    325.62\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    18\n        label    \"\"\n        graphics\n        [\n            x    807.86\n            y    1005.65\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    19\n        label    \"\"\n        graphics\n        [\n            x    609.95\n            y    1009.02\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    20\n        label    \"\"\n        graphics\n        [\n            x    125.21\n            y    81.49\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    21\n        label    \"\"\n        graphics\n        [\n            x    61.57\n            y    211.60\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    22\n        label    \"\"\n        graphics\n        [\n            x    975.36\n            y    105.11\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    23\n        label    \"\"\n        graphics\n        [\n            x    125.75\n            y    152.21\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    24\n        label    \"\"\n        graphics\n        [\n            x    220.03\n            y    112.13\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    25\n        label    \"\"\n        graphics\n        [\n            x    927.14\n            y    628.94\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    26\n        label    \"\"\n        graphics\n        [\n            x    780.61\n            y    78.34\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    27\n        label    \"\"\n        graphics\n        [\n            x    194.10\n            y    339.46\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    28\n        label    \"\"\n        graphics\n        [\n            x    361.25\n            y    962.47\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    29\n        label    \"\"\n        graphics\n        [\n            x    322.50\n            y    21.80\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    30\n        label    \"\"\n        graphics\n        [\n            x    791.98\n            y    743.31\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    31\n        label    \"\"\n        graphics\n        [\n            x    20.20\n            y    773.64\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    32\n        label    \"\"\n        graphics\n        [\n            x    80.81\n            y    767.42\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    33\n        label    \"\"\n        graphics\n        [\n            x    30.94\n            y    674.62\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    34\n        label    \"\"\n        graphics\n        [\n            x    551.57\n            y    110.58\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    35\n        label    \"\"\n        graphics\n        [\n            x    847.53\n            y    308.48\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    36\n        label    \"\"\n        graphics\n        [\n            x    1023.42\n            y    511.22\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    37\n        label    \"\"\n        graphics\n        [\n            x    497.23\n            y    748.83\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    38\n        label    \"\"\n        graphics\n        [\n            x    299.79\n            y    1110.49\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    39\n        label    \"\"\n        graphics\n        [\n            x    649.31\n            y    586.60\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    40\n        label    \"\"\n        graphics\n        [\n            x    189.58\n            y    467.22\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    41\n        label    \"\"\n        graphics\n        [\n            x    1187.59\n            y    620.25\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    42\n        label    \"\"\n        graphics\n        [\n            x    443.01\n            y    709.73\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    43\n        label    \"\"\n        graphics\n        [\n            x    99.69\n            y    30.41\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    44\n        label    \"\"\n        graphics\n        [\n            x    358.21\n            y    379.26\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    45\n        label    \"\"\n        graphics\n        [\n            x    1182.48\n            y    505.94\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    46\n        label    \"\"\n        graphics\n        [\n            x    143.94\n            y    872.77\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    47\n        label    \"\"\n        graphics\n        [\n            x    362.44\n            y    1089.18\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    48\n        label    \"\"\n        graphics\n        [\n            x    574.08\n            y    1156.73\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    49\n        label    \"\"\n        graphics\n        [\n            x    31.69\n            y    57.98\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    50\n        label    \"\"\n        graphics\n        [\n            x    548.03\n            y    209.30\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    51\n        label    \"\"\n        graphics\n        [\n            x    251.19\n            y    108.28\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    52\n        label    \"\"\n        graphics\n        [\n            x    405.68\n            y    584.69\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    53\n        label    \"\"\n        graphics\n        [\n            x    943.45\n            y    327.10\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    54\n        label    \"\"\n        graphics\n        [\n            x    701.02\n            y    847.03\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    55\n        label    \"\"\n        graphics\n        [\n            x    850.38\n            y    916.57\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    56\n        label    \"\"\n        graphics\n        [\n            x    684.40\n            y    626.92\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    57\n        label    \"\"\n        graphics\n        [\n            x    143.77\n            y    1183.48\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    58\n        label    \"\"\n        graphics\n        [\n            x    1064.12\n            y    283.33\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    59\n        label    \"\"\n        graphics\n        [\n            x    119.22\n            y    63.30\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    60\n        label    \"\"\n        graphics\n        [\n            x    25.10\n            y    1017.53\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    61\n        label    \"\"\n        graphics\n        [\n            x    868.62\n            y    854.90\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    62\n        label    \"\"\n        graphics\n        [\n            x    887.14\n            y    39.26\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    63\n        label    \"\"\n        graphics\n        [\n            x    1057.15\n            y    37.62\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    64\n        label    \"\"\n        graphics\n        [\n            x    896.93\n            y    504.91\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    65\n        label    \"\"\n        graphics\n        [\n            x    413.68\n            y    93.75\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    66\n        label    \"\"\n        graphics\n        [\n            x    127.63\n            y    441.03\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    67\n        label    \"\"\n        graphics\n        [\n            x    1020.86\n            y    737.52\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    68\n        label    \"\"\n        graphics\n        [\n            x    1204.61\n            y    94.73\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    69\n        label    \"\"\n        graphics\n        [\n            x    193.30\n            y    1025.70\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    70\n        label    \"\"\n        graphics\n        [\n            x    812.25\n            y    1024.10\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    71\n        label    \"\"\n        graphics\n        [\n            x    879.41\n            y    667.28\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    72\n        label    \"\"\n        graphics\n        [\n            x    536.62\n            y    303.78\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    73\n        label    \"\"\n        graphics\n        [\n            x    640.11\n            y    108.65\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    74\n        label    \"\"\n        graphics\n        [\n            x    332.74\n            y    828.05\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    75\n        label    \"\"\n        graphics\n        [\n            x    683.20\n            y    1168.07\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    76\n        label    \"\"\n        graphics\n        [\n            x    396.92\n            y    640.51\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    77\n        label    \"\"\n        graphics\n        [\n            x    182.59\n            y    641.74\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    78\n        label    \"\"\n        graphics\n        [\n            x    988.53\n            y    612.41\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    79\n        label    \"\"\n        graphics\n        [\n            x    905.89\n            y    599.01\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    80\n        label    \"\"\n        graphics\n        [\n            x    520.85\n            y    967.45\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    81\n        label    \"\"\n        graphics\n        [\n            x    43.03\n            y    298.97\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    82\n        label    \"\"\n        graphics\n        [\n            x    1189.35\n            y    533.26\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    83\n        label    \"\"\n        graphics\n        [\n            x    1120.21\n            y    136.92\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    84\n        label    \"\"\n        graphics\n        [\n            x    74.66\n            y    910.33\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    85\n        label    \"\"\n        graphics\n        [\n            x    6.08\n            y    342.75\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    86\n        label    \"\"\n        graphics\n        [\n            x    504.31\n            y    135.20\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    87\n        label    \"\"\n        graphics\n        [\n            x    601.59\n            y    253.87\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    88\n        label    \"\"\n        graphics\n        [\n            x    910.01\n            y    296.86\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    89\n        label    \"\"\n        graphics\n        [\n            x    1136.59\n            y    375.36\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    90\n        label    \"\"\n        graphics\n        [\n            x    925.37\n            y    1091.82\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    91\n        label    \"\"\n        graphics\n        [\n            x    959.37\n            y    53.57\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    92\n        label    \"\"\n        graphics\n        [\n            x    78.22\n            y    1036.14\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    93\n        label    \"\"\n        graphics\n        [\n            x    492.65\n            y    851.27\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    94\n        label    \"\"\n        graphics\n        [\n            x    1135.22\n            y    25.21\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    95\n        label    \"\"\n        graphics\n        [\n            x    387.12\n            y    22.03\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    96\n        label    \"\"\n        graphics\n        [\n            x    1140.48\n            y    1126.31\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    97\n        label    \"\"\n        graphics\n        [\n            x    624.60\n            y    251.82\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    98\n        label    \"\"\n        graphics\n        [\n            x    201.17\n            y    686.75\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    99\n        label    \"\"\n        graphics\n        [\n            x    956.03\n            y    540.76\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    100\n        label    \"\"\n        graphics\n        [\n            x    403.15\n            y    387.80\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    101\n        label    \"\"\n        graphics\n        [\n            x    916.22\n            y    163.55\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    102\n        label    \"\"\n        graphics\n        [\n            x    861.24\n            y    1127.51\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    103\n        label    \"\"\n        graphics\n        [\n            x    128.62\n            y    1162.35\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    104\n        label    \"\"\n        graphics\n        [\n            x    757.21\n            y    71.68\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    105\n        label    \"\"\n        graphics\n        [\n            x    48.99\n            y    1132.34\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    106\n        label    \"\"\n        graphics\n        [\n            x    867.95\n            y    746.97\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    107\n        label    \"\"\n        graphics\n        [\n            x    93.42\n            y    617.91\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    108\n        label    \"\"\n        graphics\n        [\n            x    95.26\n            y    952.89\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    109\n        label    \"\"\n        graphics\n        [\n            x    96.63\n            y    794.82\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    110\n        label    \"\"\n        graphics\n        [\n            x    169.99\n            y    483.72\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    111\n        label    \"\"\n        graphics\n        [\n            x    1202.45\n            y    210.59\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    112\n        label    \"\"\n        graphics\n        [\n            x    999.37\n            y    103.03\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    113\n        label    \"\"\n        graphics\n        [\n            x    1090.06\n            y    251.26\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    114\n        label    \"\"\n        graphics\n        [\n            x    427.56\n            y    442.53\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    115\n        label    \"\"\n        graphics\n        [\n            x    453.50\n            y    476.57\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    116\n        label    \"\"\n        graphics\n        [\n            x    496.69\n            y    1193.07\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    117\n        label    \"\"\n        graphics\n        [\n            x    994.26\n            y    310.37\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    118\n        label    \"\"\n        graphics\n        [\n            x    963.66\n            y    1205.20\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    119\n        label    \"\"\n        graphics\n        [\n            x    460.97\n            y    472.25\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    120\n        label    \"\"\n        graphics\n        [\n            x    433.93\n            y    328.79\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    121\n        label    \"\"\n        graphics\n        [\n            x    1051.33\n            y    1056.97\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    122\n        label    \"\"\n        graphics\n        [\n            x    390.60\n            y    286.93\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    123\n        label    \"\"\n        graphics\n        [\n            x    762.52\n            y    1056.48\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    124\n        label    \"\"\n        graphics\n        [\n            x    637.75\n            y    8.14\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    125\n        label    \"\"\n        graphics\n        [\n            x    238.26\n            y    94.07\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    126\n        label    \"\"\n        graphics\n        [\n            x    687.53\n            y    498.74\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    127\n        label    \"\"\n        graphics\n        [\n            x    527.37\n            y    90.25\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    128\n        label    \"\"\n        graphics\n        [\n            x    226.56\n            y    615.74\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    129\n        label    \"\"\n        graphics\n        [\n            x    802.71\n            y    194.11\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    130\n        label    \"\"\n        graphics\n        [\n            x    380.66\n            y    1026.06\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    131\n        label    \"\"\n        graphics\n        [\n            x    547.50\n            y    558.82\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    132\n        label    \"\"\n        graphics\n        [\n            x    714.23\n            y    311.43\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    133\n        label    \"\"\n        graphics\n        [\n            x    497.06\n            y    305.97\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    134\n        label    \"\"\n        graphics\n        [\n            x    401.97\n            y    452.26\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    135\n        label    \"\"\n        graphics\n        [\n            x    1046.89\n            y    859.46\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    136\n        label    \"\"\n        graphics\n        [\n            x    996.73\n            y    428.04\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    137\n        label    \"\"\n        graphics\n        [\n            x    359.63\n            y    284.15\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    138\n        label    \"\"\n        graphics\n        [\n            x    1061.39\n            y    577.33\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    139\n        label    \"\"\n        graphics\n        [\n            x    561.05\n            y    582.22\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    140\n        label    \"\"\n        graphics\n        [\n            x    821.86\n            y    389.59\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    141\n        label    \"\"\n        graphics\n        [\n            x    767.98\n            y    510.94\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    142\n        label    \"\"\n        graphics\n        [\n            x    863.60\n            y    1135.49\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    143\n        label    \"\"\n        graphics\n        [\n            x    965.20\n            y    655.03\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    144\n        label    \"\"\n        graphics\n        [\n            x    74.46\n            y    960.88\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    145\n        label    \"\"\n        graphics\n        [\n            x    709.89\n            y    771.74\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    146\n        label    \"\"\n        graphics\n        [\n            x    50.45\n            y    804.68\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    147\n        label    \"\"\n        graphics\n        [\n            x    227.81\n            y    1070.54\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    148\n        label    \"\"\n        graphics\n        [\n            x    117.16\n            y    407.21\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    149\n        label    \"\"\n        graphics\n        [\n            x    278.86\n            y    1058.62\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    150\n        label    \"\"\n        graphics\n        [\n            x    1060.36\n            y    380.67\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    151\n        label    \"\"\n        graphics\n        [\n            x    659.34\n            y    844.93\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    152\n        label    \"\"\n        graphics\n        [\n            x    929.16\n            y    708.51\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    153\n        label    \"\"\n        graphics\n        [\n            x    700.19\n            y    520.65\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    154\n        label    \"\"\n        graphics\n        [\n            x    1179.84\n            y    1055.34\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    155\n        label    \"\"\n        graphics\n        [\n            x    513.66\n            y    292.53\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    156\n        label    \"\"\n        graphics\n        [\n            x    473.27\n            y    388.95\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    157\n        label    \"\"\n        graphics\n        [\n            x    708.12\n            y    635.52\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    158\n        label    \"\"\n        graphics\n        [\n            x    865.35\n            y    138.63\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    159\n        label    \"\"\n        graphics\n        [\n            x    182.32\n            y    353.08\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    160\n        label    \"\"\n        graphics\n        [\n            x    1192.04\n            y    483.12\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    161\n        label    \"\"\n        graphics\n        [\n            x    761.19\n            y    171.18\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    162\n        label    \"\"\n        graphics\n        [\n            x    487.00\n            y    328.31\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    163\n        label    \"\"\n        graphics\n        [\n            x    230.78\n            y    928.72\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    164\n        label    \"\"\n        graphics\n        [\n            x    14.19\n            y    705.51\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    165\n        label    \"\"\n        graphics\n        [\n            x    703.26\n            y    793.83\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    166\n        label    \"\"\n        graphics\n        [\n            x    804.91\n            y    1195.33\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    167\n        label    \"\"\n        graphics\n        [\n            x    45.62\n            y    841.21\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    168\n        label    \"\"\n        graphics\n        [\n            x    206.51\n            y    266.05\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    169\n        label    \"\"\n        graphics\n        [\n            x    571.80\n            y    112.35\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    170\n        label    \"\"\n        graphics\n        [\n            x    117.55\n            y    837.48\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    171\n        label    \"\"\n        graphics\n        [\n            x    1041.87\n            y    924.09\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    172\n        label    \"\"\n        graphics\n        [\n            x    685.23\n            y    277.42\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    173\n        label    \"\"\n        graphics\n        [\n            x    2.08\n            y    705.15\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    174\n        label    \"\"\n        graphics\n        [\n            x    628.77\n            y    428.19\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    175\n        label    \"\"\n        graphics\n        [\n            x    986.50\n            y    664.65\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    176\n        label    \"\"\n        graphics\n        [\n            x    990.90\n            y    968.75\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    177\n        label    \"\"\n        graphics\n        [\n            x    762.22\n            y    882.76\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    178\n        label    \"\"\n        graphics\n        [\n            x    1142.24\n            y    792.98\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    179\n        label    \"\"\n        graphics\n        [\n            x    708.24\n            y    473.03\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    edge\n    [\n        source    1\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    10\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    100\n        target    151\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    100\n        target    48\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    101\n        target    50\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    102\n        target    100\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    102\n        target    150\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    103\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    103\n        target    72\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    104\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    105\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    105\n        target    74\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    106\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    107\n        target    128\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    107\n        target    30\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    108\n        target    97\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    109\n        target    40\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    11\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    110\n        target    66\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    111\n        target    24\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    112\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    112\n        target    73\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    113\n        target    78\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    114\n        target    100\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    115\n        target    44\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    115\n        target    59\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    116\n        target    77\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    117\n        target    105\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    118\n        target    112\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    119\n        target    67\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    12\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    120\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    120\n        target    172\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    121\n        target    66\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    122\n        target    146\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    122\n        target    29\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    122\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    122\n        target    72\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    122\n        target    96\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    123\n        target    65\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    124\n        target    112\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    125\n        target    112\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    126\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    126\n        target    173\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    126\n        target    30\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    127\n        target    101\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    128\n        target    63\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    129\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    129\n        target    49\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    13\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    130\n        target    32\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    130\n        target    50\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    131\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    132\n        target    115\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    132\n        target    56\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    132\n        target    69\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    133\n        target    30\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    134\n        target    36\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    135\n        target    64\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    136\n        target    54\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    137\n        target    132\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    138\n        target    24\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    139\n        target    73\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    14\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    140\n        target    62\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    141\n        target    118\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    142\n        target    33\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    143\n        target    46\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    144\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    145\n        target    118\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    145\n        target    40\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    145\n        target    42\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    146\n        target    127\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    147\n        target    105\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    147\n        target    56\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    147\n        target    69\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    148\n        target    102\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    149\n        target    107\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    15\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    150\n        target    148\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    151\n        target    89\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    152\n        target    75\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    153\n        target    132\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    154\n        target    58\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    155\n        target    151\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    156\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    157\n        target    72\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    158\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    159\n        target    103\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    16\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    160\n        target    24\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    160\n        target    69\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    161\n        target    119\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    162\n        target    161\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    163\n        target    134\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    163\n        target    97\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    164\n        target    101\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    164\n        target    42\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    165\n        target    34\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    165\n        target    97\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    166\n        target    70\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    167\n        target    108\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    168\n        target    143\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    168\n        target    149\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    169\n        target    90\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    17\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    170\n        target    94\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    171\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    172\n        target    141\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    172\n        target    146\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    173\n        target    54\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    174\n        target    95\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    175\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    175\n        target    27\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    176\n        target    102\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    177\n        target    127\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    178\n        target    62\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    178\n        target    81\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    179\n        target    24\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    18\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    19\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    2\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    20\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    21\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    22\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    23\n        target    20\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    24\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    25\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    26\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    27\n        target    122\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    27\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    28\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    29\n        target    28\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    29\n        target    97\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    3\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    3\n        target    152\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    3\n        target    32\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    30\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    31\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    32\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    33\n        target    28\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    33\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    34\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    35\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    36\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    37\n        target    36\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    38\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    39\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    4\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    40\n        target    29\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    41\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    42\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    43\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    44\n        target    34\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    45\n        target    27\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    46\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    47\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    48\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    49\n        target    37\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    5\n        target    110\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    5\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    50\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    50\n        target    135\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    51\n        target    44\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    52\n        target    19\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    53\n        target    37\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    54\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    55\n        target    19\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    56\n        target    155\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    56\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    56\n        target    96\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    57\n        target    50\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    58\n        target    141\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    58\n        target    29\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    59\n        target    117\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    59\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    59\n        target    20\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    6\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    60\n        target    110\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    60\n        target    29\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    61\n        target    32\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    62\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    63\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    64\n        target    27\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    65\n        target    20\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    66\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    67\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    67\n        target    33\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    68\n        target    41\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    69\n        target    26\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    7\n        target    108\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    7\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    70\n        target    39\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    71\n        target    60\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    72\n        target    154\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    72\n        target    70\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    73\n        target    20\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    74\n        target    61\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    75\n        target    55\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    76\n        target    103\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    76\n        target    68\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    77\n        target    20\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    77\n        target    40\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    78\n        target    39\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    79\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    79\n        target    55\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    8\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    80\n        target    169\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    80\n        target    29\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    81\n        target    64\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    82\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    83\n        target    75\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    84\n        target    72\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    85\n        target    39\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    86\n        target    57\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    87\n        target    39\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    88\n        target    167\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    88\n        target    31\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    89\n        target    167\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    89\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    9\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    90\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    91\n        target    70\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    92\n        target    30\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    93\n        target    151\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    93\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    94\n        target    29\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    95\n        target    37\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    95\n        target    48\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    96\n        target    53\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    96\n        target    95\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    97\n        target    75\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    98\n        target    86\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    99\n        target    88\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n]\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v180e234.tglf",
    "content": "0 448.000 39.000 30.000 30.000\n1 375.000 828.000 30.000 30.000\n2 924.000 1102.000 30.000 30.000\n3 1142.000 334.000 30.000 30.000\n4 432.000 384.000 30.000 30.000\n5 1193.000 556.000 30.000 30.000\n6 730.000 857.000 30.000 30.000\n7 839.000 587.000 30.000 30.000\n8 74.000 570.000 30.000 30.000\n9 546.000 1151.000 30.000 30.000\n10 559.000 886.000 30.000 30.000\n11 123.000 56.000 30.000 30.000\n12 187.000 590.000 30.000 30.000\n13 1109.000 1160.000 30.000 30.000\n14 741.000 861.000 30.000 30.000\n15 741.000 619.000 30.000 30.000\n16 463.000 732.000 30.000 30.000\n17 513.000 325.000 30.000 30.000\n18 807.000 1005.000 30.000 30.000\n19 609.000 1009.000 30.000 30.000\n20 125.000 81.000 30.000 30.000\n21 61.000 211.000 30.000 30.000\n22 975.000 105.000 30.000 30.000\n23 125.000 152.000 30.000 30.000\n24 220.000 112.000 30.000 30.000\n25 927.000 628.000 30.000 30.000\n26 780.000 78.000 30.000 30.000\n27 194.000 339.000 30.000 30.000\n28 361.000 962.000 30.000 30.000\n29 322.000 21.000 30.000 30.000\n30 791.000 743.000 30.000 30.000\n31 20.000 773.000 30.000 30.000\n32 80.000 767.000 30.000 30.000\n33 30.000 674.000 30.000 30.000\n34 551.000 110.000 30.000 30.000\n35 847.000 308.000 30.000 30.000\n36 1023.000 511.000 30.000 30.000\n37 497.000 748.000 30.000 30.000\n38 299.000 1110.000 30.000 30.000\n39 649.000 586.000 30.000 30.000\n40 189.000 467.000 30.000 30.000\n41 1187.000 620.000 30.000 30.000\n42 443.000 709.000 30.000 30.000\n43 99.000 30.000 30.000 30.000\n44 358.000 379.000 30.000 30.000\n45 1182.000 505.000 30.000 30.000\n46 143.000 872.000 30.000 30.000\n47 362.000 1089.000 30.000 30.000\n48 574.000 1156.000 30.000 30.000\n49 31.000 57.000 30.000 30.000\n50 548.000 209.000 30.000 30.000\n51 251.000 108.000 30.000 30.000\n52 405.000 584.000 30.000 30.000\n53 943.000 327.000 30.000 30.000\n54 701.000 847.000 30.000 30.000\n55 850.000 916.000 30.000 30.000\n56 684.000 626.000 30.000 30.000\n57 143.000 1183.000 30.000 30.000\n58 1064.000 283.000 30.000 30.000\n59 119.000 63.000 30.000 30.000\n60 25.000 1017.000 30.000 30.000\n61 868.000 854.000 30.000 30.000\n62 887.000 39.000 30.000 30.000\n63 1057.000 37.000 30.000 30.000\n64 896.000 504.000 30.000 30.000\n65 413.000 93.000 30.000 30.000\n66 127.000 441.000 30.000 30.000\n67 1020.000 737.000 30.000 30.000\n68 1204.000 94.000 30.000 30.000\n69 193.000 1025.000 30.000 30.000\n70 812.000 1024.000 30.000 30.000\n71 879.000 667.000 30.000 30.000\n72 536.000 303.000 30.000 30.000\n73 640.000 108.000 30.000 30.000\n74 332.000 828.000 30.000 30.000\n75 683.000 1168.000 30.000 30.000\n76 396.000 640.000 30.000 30.000\n77 182.000 641.000 30.000 30.000\n78 988.000 612.000 30.000 30.000\n79 905.000 599.000 30.000 30.000\n80 520.000 967.000 30.000 30.000\n81 43.000 298.000 30.000 30.000\n82 1189.000 533.000 30.000 30.000\n83 1120.000 136.000 30.000 30.000\n84 74.000 910.000 30.000 30.000\n85 6.000 342.000 30.000 30.000\n86 504.000 135.000 30.000 30.000\n87 601.000 253.000 30.000 30.000\n88 910.000 296.000 30.000 30.000\n89 1136.000 375.000 30.000 30.000\n90 925.000 1091.000 30.000 30.000\n91 959.000 53.000 30.000 30.000\n92 78.000 1036.000 30.000 30.000\n93 492.000 851.000 30.000 30.000\n94 1135.000 25.000 30.000 30.000\n95 387.000 22.000 30.000 30.000\n96 1140.000 1126.000 30.000 30.000\n97 624.000 251.000 30.000 30.000\n98 201.000 686.000 30.000 30.000\n99 956.000 540.000 30.000 30.000\n100 403.000 387.000 30.000 30.000\n101 916.000 163.000 30.000 30.000\n102 861.000 1127.000 30.000 30.000\n103 128.000 1162.000 30.000 30.000\n104 757.000 71.000 30.000 30.000\n105 48.000 1132.000 30.000 30.000\n106 867.000 746.000 30.000 30.000\n107 93.000 617.000 30.000 30.000\n108 95.000 952.000 30.000 30.000\n109 96.000 794.000 30.000 30.000\n110 169.000 483.000 30.000 30.000\n111 1202.000 210.000 30.000 30.000\n112 999.000 103.000 30.000 30.000\n113 1090.000 251.000 30.000 30.000\n114 427.000 442.000 30.000 30.000\n115 453.000 476.000 30.000 30.000\n116 496.000 1193.000 30.000 30.000\n117 994.000 310.000 30.000 30.000\n118 963.000 1205.000 30.000 30.000\n119 460.000 472.000 30.000 30.000\n120 433.000 328.000 30.000 30.000\n121 1051.000 1056.000 30.000 30.000\n122 390.000 286.000 30.000 30.000\n123 762.000 1056.000 30.000 30.000\n124 637.000 8.000 30.000 30.000\n125 238.000 94.000 30.000 30.000\n126 687.000 498.000 30.000 30.000\n127 527.000 90.000 30.000 30.000\n128 226.000 615.000 30.000 30.000\n129 802.000 194.000 30.000 30.000\n130 380.000 1026.000 30.000 30.000\n131 547.000 558.000 30.000 30.000\n132 714.000 311.000 30.000 30.000\n133 497.000 305.000 30.000 30.000\n134 401.000 452.000 30.000 30.000\n135 1046.000 859.000 30.000 30.000\n136 996.000 428.000 30.000 30.000\n137 359.000 284.000 30.000 30.000\n138 1061.000 577.000 30.000 30.000\n139 561.000 582.000 30.000 30.000\n140 821.000 389.000 30.000 30.000\n141 767.000 510.000 30.000 30.000\n142 863.000 1135.000 30.000 30.000\n143 965.000 655.000 30.000 30.000\n144 74.000 960.000 30.000 30.000\n145 709.000 771.000 30.000 30.000\n146 50.000 804.000 30.000 30.000\n147 227.000 1070.000 30.000 30.000\n148 117.000 407.000 30.000 30.000\n149 278.000 1058.000 30.000 30.000\n150 1060.000 380.000 30.000 30.000\n151 659.000 844.000 30.000 30.000\n152 929.000 708.000 30.000 30.000\n153 700.000 520.000 30.000 30.000\n154 1179.000 1055.000 30.000 30.000\n155 513.000 292.000 30.000 30.000\n156 473.000 388.000 30.000 30.000\n157 708.000 635.000 30.000 30.000\n158 865.000 138.000 30.000 30.000\n159 182.000 353.000 30.000 30.000\n160 1192.000 483.000 30.000 30.000\n161 761.000 171.000 30.000 30.000\n162 487.000 328.000 30.000 30.000\n163 230.000 928.000 30.000 30.000\n164 14.000 705.000 30.000 30.000\n165 703.000 793.000 30.000 30.000\n166 804.000 1195.000 30.000 30.000\n167 45.000 841.000 30.000 30.000\n168 206.000 266.000 30.000 30.000\n169 571.000 112.000 30.000 30.000\n170 117.000 837.000 30.000 30.000\n171 1041.000 924.000 30.000 30.000\n172 685.000 277.000 30.000 30.000\n173 2.000 705.000 30.000 30.000\n174 628.000 428.000 30.000 30.000\n175 986.000 664.000 30.000 30.000\n176 990.000 968.000 30.000 30.000\n177 762.000 882.000 30.000 30.000\n178 1142.000 792.000 30.000 30.000\n179 708.000 473.000 30.000 30.000\n#\n102 150\n168 149\n114 100\n104 17\n8 5\n116 77\n129 49\n144 5\n13 7\n122 6\n160 69\n12 7\n32 5\n18 2\n57 50\n72 70\n62 7\n6 1\n162 161\n100 48\n86 57\n46 2\n25 16\n64 27\n124 112\n150 148\n38 14\n122 96\n56 96\n146 127\n129 21\n137 132\n120 14\n149 107\n159 103\n172 141\n11 10\n168 143\n55 19\n88 31\n95 48\n31 17\n50 135\n123 65\n80 29\n27 122\n79 55\n28 17\n154 58\n95 37\n10 9\n60 29\n53 37\n171 8\n99 88\n152 75\n30 7\n36 10\n127 101\n134 36\n63 17\n145 118\n142 33\n1 0\n141 118\n70 39\n139 73\n88 167\n3 32\n165 34\n40 29\n43 3\n93 151\n151 89\n27 23\n67 33\n140 62\n101 50\n109 40\n165 97\n135 64\n125 112\n67 13\n17 7\n60 110\n34 0\n130 50\n92 30\n48 17\n175 12\n84 72\n111 24\n112 21\n178 81\n89 6\n22 5\n3 152\n37 36\n157 72\n130 32\n164 101\n163 97\n91 70\n5 4\n167 108\n66 9\n79 3\n138 24\n122 146\n45 27\n14 2\n147 56\n5 110\n132 69\n107 30\n158 23\n3 0\n19 17\n131 7\n42 6\n108 97\n4 1\n103 72\n72 154\n143 46\n107 128\n96 53\n52 19\n73 20\n47 15\n121 66\n90 11\n56 155\n161 119\n74 61\n132 115\n176 102\n54 12\n100 151\n145 40\n68 41\n112 73\n148 102\n119 67\n59 117\n7 108\n122 72\n118 112\n170 94\n76 68\n81 64\n105 74\n145 42\n177 127\n2 1\n21 16\n133 30\n96 95\n56 6\n23 20\n106 15\n35 1\n156 16\n98 86\n20 3\n105 3\n9 5\n39 16\n126 30\n136 54\n94 29\n49 37\n15 5\n160 24\n58 29\n179 24\n122 29\n172 146\n147 69\n115 59\n7 3\n126 15\n26 2\n61 32\n132 56\n85 39\n75 55\n77 40\n117 105\n120 172\n69 26\n87 39\n82 15\n97 75\n155 151\n76 103\n29 97\n147 105\n78 39\n24 4\n16 8\n89 167\n110 66\n103 13\n169 90\n80 169\n115 44\n153 132\n41 21\n178 62\n173 54\n174 95\n59 15\n65 20\n77 20\n175 27\n126 173\n102 100\n33 5\n163 134\n59 20\n83 75\n128 63\n164 42\n93 7\n50 10\n44 34\n113 78\n166 70\n51 44\n33 28\n29 28\n58 141\n71 60\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v180e252.gml",
    "content": "graph\n[\n    node\n    [\n        id    0\n        label    \"\"\n        graphics\n        [\n            x    40.40\n            y    1129.22\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    1\n        label    \"\"\n        graphics\n        [\n            x    433.29\n            y    1082.30\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    2\n        label    \"\"\n        graphics\n        [\n            x    539.67\n            y    848.41\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    3\n        label    \"\"\n        graphics\n        [\n            x    1043.69\n            y    531.90\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    4\n        label    \"\"\n        graphics\n        [\n            x    24.09\n            y    835.62\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    5\n        label    \"\"\n        graphics\n        [\n            x    1071.31\n            y    1072.58\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    6\n        label    \"\"\n        graphics\n        [\n            x    838.17\n            y    458.60\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    7\n        label    \"\"\n        graphics\n        [\n            x    449.39\n            y    813.38\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    8\n        label    \"\"\n        graphics\n        [\n            x    201.80\n            y    1203.52\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    9\n        label    \"\"\n        graphics\n        [\n            x    934.23\n            y    1175.86\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    10\n        label    \"\"\n        graphics\n        [\n            x    1149.48\n            y    786.20\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    11\n        label    \"\"\n        graphics\n        [\n            x    624.82\n            y    237.49\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    12\n        label    \"\"\n        graphics\n        [\n            x    1184.94\n            y    671.13\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    13\n        label    \"\"\n        graphics\n        [\n            x    248.45\n            y    929.26\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    14\n        label    \"\"\n        graphics\n        [\n            x    914.49\n            y    146.59\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    15\n        label    \"\"\n        graphics\n        [\n            x    69.29\n            y    355.13\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    16\n        label    \"\"\n        graphics\n        [\n            x    446.83\n            y    295.81\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    17\n        label    \"\"\n        graphics\n        [\n            x    1150.70\n            y    449.28\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    18\n        label    \"\"\n        graphics\n        [\n            x    188.56\n            y    181.08\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    19\n        label    \"\"\n        graphics\n        [\n            x    347.77\n            y    518.98\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    20\n        label    \"\"\n        graphics\n        [\n            x    800.85\n            y    1094.65\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    21\n        label    \"\"\n        graphics\n        [\n            x    576.63\n            y    932.25\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    22\n        label    \"\"\n        graphics\n        [\n            x    440.51\n            y    2.30\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    23\n        label    \"\"\n        graphics\n        [\n            x    611.73\n            y    708.22\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    24\n        label    \"\"\n        graphics\n        [\n            x    884.27\n            y    509.85\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    25\n        label    \"\"\n        graphics\n        [\n            x    631.90\n            y    538.93\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    26\n        label    \"\"\n        graphics\n        [\n            x    853.09\n            y    1041.99\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    27\n        label    \"\"\n        graphics\n        [\n            x    204.55\n            y    621.84\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    28\n        label    \"\"\n        graphics\n        [\n            x    897.42\n            y    448.64\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    29\n        label    \"\"\n        graphics\n        [\n            x    546.60\n            y    295.55\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    30\n        label    \"\"\n        graphics\n        [\n            x    362.00\n            y    247.07\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    31\n        label    \"\"\n        graphics\n        [\n            x    130.06\n            y    580.80\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    32\n        label    \"\"\n        graphics\n        [\n            x    154.55\n            y    904.80\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    33\n        label    \"\"\n        graphics\n        [\n            x    926.21\n            y    466.94\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    34\n        label    \"\"\n        graphics\n        [\n            x    120.01\n            y    828.15\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    35\n        label    \"\"\n        graphics\n        [\n            x    133.47\n            y    712.09\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    36\n        label    \"\"\n        graphics\n        [\n            x    1103.89\n            y    28.17\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    37\n        label    \"\"\n        graphics\n        [\n            x    296.36\n            y    1068.75\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    38\n        label    \"\"\n        graphics\n        [\n            x    141.68\n            y    134.83\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    39\n        label    \"\"\n        graphics\n        [\n            x    357.10\n            y    507.14\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    40\n        label    \"\"\n        graphics\n        [\n            x    823.92\n            y    225.28\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    41\n        label    \"\"\n        graphics\n        [\n            x    1028.74\n            y    344.67\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    42\n        label    \"\"\n        graphics\n        [\n            x    1118.94\n            y    751.37\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    43\n        label    \"\"\n        graphics\n        [\n            x    733.35\n            y    345.86\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    44\n        label    \"\"\n        graphics\n        [\n            x    892.87\n            y    621.86\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    45\n        label    \"\"\n        graphics\n        [\n            x    180.87\n            y    1022.28\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    46\n        label    \"\"\n        graphics\n        [\n            x    104.77\n            y    992.56\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    47\n        label    \"\"\n        graphics\n        [\n            x    834.05\n            y    921.43\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    48\n        label    \"\"\n        graphics\n        [\n            x    854.75\n            y    851.40\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    49\n        label    \"\"\n        graphics\n        [\n            x    328.04\n            y    224.15\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    50\n        label    \"\"\n        graphics\n        [\n            x    859.54\n            y    188.26\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    51\n        label    \"\"\n        graphics\n        [\n            x    1191.39\n            y    1197.03\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    52\n        label    \"\"\n        graphics\n        [\n            x    478.95\n            y    578.65\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    53\n        label    \"\"\n        graphics\n        [\n            x    168.00\n            y    137.31\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    54\n        label    \"\"\n        graphics\n        [\n            x    996.49\n            y    809.58\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    55\n        label    \"\"\n        graphics\n        [\n            x    1174.53\n            y    236.80\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    56\n        label    \"\"\n        graphics\n        [\n            x    648.63\n            y    250.81\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    57\n        label    \"\"\n        graphics\n        [\n            x    562.75\n            y    682.00\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    58\n        label    \"\"\n        graphics\n        [\n            x    976.21\n            y    549.25\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    59\n        label    \"\"\n        graphics\n        [\n            x    303.91\n            y    1169.33\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    60\n        label    \"\"\n        graphics\n        [\n            x    494.53\n            y    23.70\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    61\n        label    \"\"\n        graphics\n        [\n            x    375.18\n            y    604.66\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    62\n        label    \"\"\n        graphics\n        [\n            x    888.41\n            y    853.12\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    63\n        label    \"\"\n        graphics\n        [\n            x    673.17\n            y    594.68\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    64\n        label    \"\"\n        graphics\n        [\n            x    1186.71\n            y    425.43\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    65\n        label    \"\"\n        graphics\n        [\n            x    1006.61\n            y    12.94\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    66\n        label    \"\"\n        graphics\n        [\n            x    447.34\n            y    305.28\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    67\n        label    \"\"\n        graphics\n        [\n            x    700.57\n            y    833.65\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    68\n        label    \"\"\n        graphics\n        [\n            x    1062.67\n            y    675.57\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    69\n        label    \"\"\n        graphics\n        [\n            x    23.55\n            y    89.69\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    70\n        label    \"\"\n        graphics\n        [\n            x    407.02\n            y    591.95\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    71\n        label    \"\"\n        graphics\n        [\n            x    4.50\n            y    965.88\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    72\n        label    \"\"\n        graphics\n        [\n            x    288.21\n            y    602.66\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    73\n        label    \"\"\n        graphics\n        [\n            x    1128.44\n            y    170.71\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    74\n        label    \"\"\n        graphics\n        [\n            x    434.12\n            y    384.62\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    75\n        label    \"\"\n        graphics\n        [\n            x    244.42\n            y    1147.69\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    76\n        label    \"\"\n        graphics\n        [\n            x    1116.04\n            y    1117.37\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    77\n        label    \"\"\n        graphics\n        [\n            x    752.89\n            y    191.51\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    78\n        label    \"\"\n        graphics\n        [\n            x    117.30\n            y    683.83\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    79\n        label    \"\"\n        graphics\n        [\n            x    1168.43\n            y    568.90\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    80\n        label    \"\"\n        graphics\n        [\n            x    530.19\n            y    896.56\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    81\n        label    \"\"\n        graphics\n        [\n            x    329.97\n            y    858.10\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    82\n        label    \"\"\n        graphics\n        [\n            x    285.34\n            y    124.57\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    83\n        label    \"\"\n        graphics\n        [\n            x    21.23\n            y    921.16\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    84\n        label    \"\"\n        graphics\n        [\n            x    606.00\n            y    965.02\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    85\n        label    \"\"\n        graphics\n        [\n            x    617.99\n            y    33.79\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    86\n        label    \"\"\n        graphics\n        [\n            x    1054.96\n            y    617.45\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    87\n        label    \"\"\n        graphics\n        [\n            x    332.31\n            y    1099.88\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    88\n        label    \"\"\n        graphics\n        [\n            x    1131.78\n            y    315.01\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    89\n        label    \"\"\n        graphics\n        [\n            x    50.08\n            y    1170.59\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    90\n        label    \"\"\n        graphics\n        [\n            x    705.82\n            y    640.09\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    91\n        label    \"\"\n        graphics\n        [\n            x    198.17\n            y    1131.04\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    92\n        label    \"\"\n        graphics\n        [\n            x    740.80\n            y    855.67\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    93\n        label    \"\"\n        graphics\n        [\n            x    772.41\n            y    649.31\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    94\n        label    \"\"\n        graphics\n        [\n            x    60.33\n            y    135.41\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    95\n        label    \"\"\n        graphics\n        [\n            x    1133.46\n            y    432.37\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    96\n        label    \"\"\n        graphics\n        [\n            x    168.21\n            y    472.79\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    97\n        label    \"\"\n        graphics\n        [\n            x    824.66\n            y    318.99\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    98\n        label    \"\"\n        graphics\n        [\n            x    38.10\n            y    270.72\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    99\n        label    \"\"\n        graphics\n        [\n            x    1147.32\n            y    174.83\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    100\n        label    \"\"\n        graphics\n        [\n            x    107.12\n            y    1025.90\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    101\n        label    \"\"\n        graphics\n        [\n            x    1043.01\n            y    665.62\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    102\n        label    \"\"\n        graphics\n        [\n            x    137.66\n            y    847.01\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    103\n        label    \"\"\n        graphics\n        [\n            x    295.01\n            y    206.81\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    104\n        label    \"\"\n        graphics\n        [\n            x    405.53\n            y    1031.81\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    105\n        label    \"\"\n        graphics\n        [\n            x    718.78\n            y    399.74\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    106\n        label    \"\"\n        graphics\n        [\n            x    883.83\n            y    279.14\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    107\n        label    \"\"\n        graphics\n        [\n            x    245.27\n            y    1205.04\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    108\n        label    \"\"\n        graphics\n        [\n            x    1177.67\n            y    1076.70\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    109\n        label    \"\"\n        graphics\n        [\n            x    903.99\n            y    551.13\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    110\n        label    \"\"\n        graphics\n        [\n            x    646.20\n            y    1004.76\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    111\n        label    \"\"\n        graphics\n        [\n            x    1045.03\n            y    8.33\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    112\n        label    \"\"\n        graphics\n        [\n            x    922.16\n            y    555.27\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    113\n        label    \"\"\n        graphics\n        [\n            x    703.72\n            y    575.62\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    114\n        label    \"\"\n        graphics\n        [\n            x    123.92\n            y    449.23\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    115\n        label    \"\"\n        graphics\n        [\n            x    19.22\n            y    1095.34\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    116\n        label    \"\"\n        graphics\n        [\n            x    1038.83\n            y    847.56\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    117\n        label    \"\"\n        graphics\n        [\n            x    411.38\n            y    478.80\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    118\n        label    \"\"\n        graphics\n        [\n            x    444.39\n            y    637.00\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    119\n        label    \"\"\n        graphics\n        [\n            x    652.93\n            y    964.03\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    120\n        label    \"\"\n        graphics\n        [\n            x    1060.34\n            y    928.98\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    121\n        label    \"\"\n        graphics\n        [\n            x    465.45\n            y    468.30\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    122\n        label    \"\"\n        graphics\n        [\n            x    698.40\n            y    470.23\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    123\n        label    \"\"\n        graphics\n        [\n            x    1022.79\n            y    1089.73\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    124\n        label    \"\"\n        graphics\n        [\n            x    90.37\n            y    979.69\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    125\n        label    \"\"\n        graphics\n        [\n            x    678.01\n            y    131.30\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    126\n        label    \"\"\n        graphics\n        [\n            x    938.08\n            y    377.33\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    127\n        label    \"\"\n        graphics\n        [\n            x    1195.86\n            y    1172.17\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    128\n        label    \"\"\n        graphics\n        [\n            x    58.59\n            y    147.98\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    129\n        label    \"\"\n        graphics\n        [\n            x    978.10\n            y    330.16\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    130\n        label    \"\"\n        graphics\n        [\n            x    12.45\n            y    819.28\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    131\n        label    \"\"\n        graphics\n        [\n            x    622.84\n            y    625.93\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    132\n        label    \"\"\n        graphics\n        [\n            x    329.01\n            y    52.24\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    133\n        label    \"\"\n        graphics\n        [\n            x    536.15\n            y    1132.48\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    134\n        label    \"\"\n        graphics\n        [\n            x    709.20\n            y    767.06\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    135\n        label    \"\"\n        graphics\n        [\n            x    1025.79\n            y    385.49\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    136\n        label    \"\"\n        graphics\n        [\n            x    1179.37\n            y    185.14\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    137\n        label    \"\"\n        graphics\n        [\n            x    376.77\n            y    1092.20\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    138\n        label    \"\"\n        graphics\n        [\n            x    581.48\n            y    356.01\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    139\n        label    \"\"\n        graphics\n        [\n            x    1011.05\n            y    470.91\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    140\n        label    \"\"\n        graphics\n        [\n            x    518.20\n            y    179.75\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    141\n        label    \"\"\n        graphics\n        [\n            x    927.08\n            y    152.32\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    142\n        label    \"\"\n        graphics\n        [\n            x    786.46\n            y    345.35\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    143\n        label    \"\"\n        graphics\n        [\n            x    1013.83\n            y    593.92\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    144\n        label    \"\"\n        graphics\n        [\n            x    256.84\n            y    588.68\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    145\n        label    \"\"\n        graphics\n        [\n            x    1118.20\n            y    932.25\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    146\n        label    \"\"\n        graphics\n        [\n            x    92.97\n            y    1200.53\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    147\n        label    \"\"\n        graphics\n        [\n            x    891.57\n            y    1051.84\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    148\n        label    \"\"\n        graphics\n        [\n            x    1034.69\n            y    77.86\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    149\n        label    \"\"\n        graphics\n        [\n            x    153.59\n            y    17.23\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    150\n        label    \"\"\n        graphics\n        [\n            x    463.75\n            y    312.73\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    151\n        label    \"\"\n        graphics\n        [\n            x    1091.27\n            y    591.00\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    152\n        label    \"\"\n        graphics\n        [\n            x    719.77\n            y    626.95\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    153\n        label    \"\"\n        graphics\n        [\n            x    33.17\n            y    1091.14\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    154\n        label    \"\"\n        graphics\n        [\n            x    654.01\n            y    66.95\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    155\n        label    \"\"\n        graphics\n        [\n            x    375.74\n            y    10.02\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    156\n        label    \"\"\n        graphics\n        [\n            x    778.68\n            y    344.13\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    157\n        label    \"\"\n        graphics\n        [\n            x    733.95\n            y    685.20\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    158\n        label    \"\"\n        graphics\n        [\n            x    245.19\n            y    1084.96\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    159\n        label    \"\"\n        graphics\n        [\n            x    320.76\n            y    878.71\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    160\n        label    \"\"\n        graphics\n        [\n            x    121.79\n            y    531.77\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    161\n        label    \"\"\n        graphics\n        [\n            x    752.35\n            y    53.95\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    162\n        label    \"\"\n        graphics\n        [\n            x    72.43\n            y    297.70\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    163\n        label    \"\"\n        graphics\n        [\n            x    53.59\n            y    796.81\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    164\n        label    \"\"\n        graphics\n        [\n            x    142.19\n            y    728.71\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    165\n        label    \"\"\n        graphics\n        [\n            x    203.43\n            y    376.95\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    166\n        label    \"\"\n        graphics\n        [\n            x    1118.72\n            y    31.43\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    167\n        label    \"\"\n        graphics\n        [\n            x    517.38\n            y    1190.18\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    168\n        label    \"\"\n        graphics\n        [\n            x    266.25\n            y    768.29\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    169\n        label    \"\"\n        graphics\n        [\n            x    382.57\n            y    627.32\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    170\n        label    \"\"\n        graphics\n        [\n            x    772.24\n            y    676.24\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    171\n        label    \"\"\n        graphics\n        [\n            x    18.35\n            y    889.71\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    172\n        label    \"\"\n        graphics\n        [\n            x    392.35\n            y    62.07\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    173\n        label    \"\"\n        graphics\n        [\n            x    645.36\n            y    191.93\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    174\n        label    \"\"\n        graphics\n        [\n            x    344.83\n            y    444.16\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    175\n        label    \"\"\n        graphics\n        [\n            x    1112.73\n            y    671.29\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    176\n        label    \"\"\n        graphics\n        [\n            x    672.75\n            y    1158.97\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    177\n        label    \"\"\n        graphics\n        [\n            x    1038.86\n            y    572.87\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    178\n        label    \"\"\n        graphics\n        [\n            x    358.06\n            y    693.96\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    179\n        label    \"\"\n        graphics\n        [\n            x    892.51\n            y    498.31\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    edge\n    [\n        source    1\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    10\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    100\n        target    29\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    101\n        target    78\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    102\n        target    51\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    103\n        target    79\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    104\n        target    58\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    105\n        target    38\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    106\n        target    52\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    106\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    107\n        target    104\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    107\n        target    93\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    108\n        target    40\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    109\n        target    38\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    11\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    110\n        target    83\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    111\n        target    87\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    112\n        target    85\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    113\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    113\n        target    74\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    114\n        target    59\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    115\n        target    107\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    116\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    117\n        target    110\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    118\n        target    61\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    119\n        target    117\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    12\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    120\n        target    91\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    121\n        target    178\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    121\n        target    39\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    122\n        target    43\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    123\n        target    142\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    123\n        target    85\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    124\n        target    83\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    125\n        target    108\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    126\n        target    54\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    126\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    127\n        target    122\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    128\n        target    146\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    128\n        target    39\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    129\n        target    84\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    13\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    130\n        target    101\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    131\n        target    101\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    132\n        target    55\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    133\n        target    152\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    133\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    134\n        target    31\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    135\n        target    148\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    135\n        target    27\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    136\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    136\n        target    124\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    137\n        target    106\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    137\n        target    156\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    138\n        target    117\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    139\n        target    130\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    139\n        target    76\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    14\n        target    122\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    14\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    14\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    140\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    141\n        target    123\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    141\n        target    55\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    142\n        target    36\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    143\n        target    49\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    144\n        target    122\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    145\n        target    110\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    145\n        target    119\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    146\n        target    65\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    147\n        target    79\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    147\n        target    86\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    148\n        target    80\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    149\n        target    120\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    149\n        target    20\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    15\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    150\n        target    123\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    150\n        target    51\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    151\n        target    24\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    152\n        target    80\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    153\n        target    74\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    154\n        target    150\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    154\n        target    39\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    154\n        target    70\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    155\n        target    56\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    156\n        target    135\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    157\n        target    44\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    157\n        target    88\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    158\n        target    126\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    158\n        target    69\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    159\n        target    37\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    159\n        target    59\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    16\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    160\n        target    152\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    161\n        target    54\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    162\n        target    50\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    163\n        target    82\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    164\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    164\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    165\n        target    130\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    166\n        target    77\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    167\n        target    76\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    168\n        target    146\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    169\n        target    37\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    17\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    17\n        target    61\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    170\n        target    36\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    171\n        target    143\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    172\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    172\n        target    60\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    173\n        target    141\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    174\n        target    36\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    175\n        target    116\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    175\n        target    98\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    176\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    176\n        target    67\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    177\n        target    86\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    178\n        target    129\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    178\n        target    167\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    179\n        target    162\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    179\n        target    168\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    18\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    19\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    2\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    20\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    21\n        target    148\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    21\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    22\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    23\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    24\n        target    101\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    24\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    25\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    26\n        target    178\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    26\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    27\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    28\n        target    106\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    28\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    29\n        target    165\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    29\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    29\n        target    41\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    3\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    30\n        target    26\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    30\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    31\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    32\n        target    26\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    33\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    34\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    34\n        target    74\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    35\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    36\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    36\n        target    177\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    37\n        target    140\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    37\n        target    34\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    38\n        target    36\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    38\n        target    81\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    39\n        target    36\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    4\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    40\n        target    168\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    40\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    41\n        target    101\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    41\n        target    150\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    41\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    42\n        target    41\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    43\n        target    36\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    44\n        target    24\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    45\n        target    25\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    46\n        target    101\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    46\n        target    36\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    47\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    48\n        target    19\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    49\n        target    37\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    5\n        target    150\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    5\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    50\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    51\n        target    47\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    52\n        target    46\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    52\n        target    61\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    53\n        target    51\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    54\n        target    31\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    54\n        target    32\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    55\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    55\n        target    26\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    55\n        target    36\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    56\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    57\n        target    30\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    57\n        target    50\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    58\n        target    30\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    58\n        target    64\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    59\n        target    161\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    59\n        target    44\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    6\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    60\n        target    122\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    60\n        target    36\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    60\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    60\n        target    80\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    61\n        target    33\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    62\n        target    131\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    62\n        target    58\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    63\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    64\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    65\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    66\n        target    64\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    67\n        target    40\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    68\n        target    45\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    69\n        target    139\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    69\n        target    32\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    7\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    70\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    71\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    71\n        target    57\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    71\n        target    96\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    72\n        target    19\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    72\n        target    39\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    73\n        target    62\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    73\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    74\n        target    67\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    75\n        target    52\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    76\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    77\n        target    29\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    78\n        target    33\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    79\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    79\n        target    55\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    8\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    80\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    81\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    82\n        target    33\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    83\n        target    179\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    83\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    83\n        target    61\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    84\n        target    143\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    84\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    85\n        target    28\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    86\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    87\n        target    82\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    88\n        target    151\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    88\n        target    68\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    89\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    89\n        target    68\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    9\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    90\n        target    30\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    90\n        target    78\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    91\n        target    48\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    91\n        target    90\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    92\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    92\n        target    97\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    93\n        target    62\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    94\n        target    72\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    95\n        target    80\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    96\n        target    63\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    97\n        target    94\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    98\n        target    46\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    98\n        target    85\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    99\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n]\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v180e252.tglf",
    "content": "0 40.000 1129.000 30.000 30.000\n1 433.000 1082.000 30.000 30.000\n2 539.000 848.000 30.000 30.000\n3 1043.000 531.000 30.000 30.000\n4 24.000 835.000 30.000 30.000\n5 1071.000 1072.000 30.000 30.000\n6 838.000 458.000 30.000 30.000\n7 449.000 813.000 30.000 30.000\n8 201.000 1203.000 30.000 30.000\n9 934.000 1175.000 30.000 30.000\n10 1149.000 786.000 30.000 30.000\n11 624.000 237.000 30.000 30.000\n12 1184.000 671.000 30.000 30.000\n13 248.000 929.000 30.000 30.000\n14 914.000 146.000 30.000 30.000\n15 69.000 355.000 30.000 30.000\n16 446.000 295.000 30.000 30.000\n17 1150.000 449.000 30.000 30.000\n18 188.000 181.000 30.000 30.000\n19 347.000 518.000 30.000 30.000\n20 800.000 1094.000 30.000 30.000\n21 576.000 932.000 30.000 30.000\n22 440.000 2.000 30.000 30.000\n23 611.000 708.000 30.000 30.000\n24 884.000 509.000 30.000 30.000\n25 631.000 538.000 30.000 30.000\n26 853.000 1041.000 30.000 30.000\n27 204.000 621.000 30.000 30.000\n28 897.000 448.000 30.000 30.000\n29 546.000 295.000 30.000 30.000\n30 362.000 247.000 30.000 30.000\n31 130.000 580.000 30.000 30.000\n32 154.000 904.000 30.000 30.000\n33 926.000 466.000 30.000 30.000\n34 120.000 828.000 30.000 30.000\n35 133.000 712.000 30.000 30.000\n36 1103.000 28.000 30.000 30.000\n37 296.000 1068.000 30.000 30.000\n38 141.000 134.000 30.000 30.000\n39 357.000 507.000 30.000 30.000\n40 823.000 225.000 30.000 30.000\n41 1028.000 344.000 30.000 30.000\n42 1118.000 751.000 30.000 30.000\n43 733.000 345.000 30.000 30.000\n44 892.000 621.000 30.000 30.000\n45 180.000 1022.000 30.000 30.000\n46 104.000 992.000 30.000 30.000\n47 834.000 921.000 30.000 30.000\n48 854.000 851.000 30.000 30.000\n49 328.000 224.000 30.000 30.000\n50 859.000 188.000 30.000 30.000\n51 1191.000 1197.000 30.000 30.000\n52 478.000 578.000 30.000 30.000\n53 168.000 137.000 30.000 30.000\n54 996.000 809.000 30.000 30.000\n55 1174.000 236.000 30.000 30.000\n56 648.000 250.000 30.000 30.000\n57 562.000 682.000 30.000 30.000\n58 976.000 549.000 30.000 30.000\n59 303.000 1169.000 30.000 30.000\n60 494.000 23.000 30.000 30.000\n61 375.000 604.000 30.000 30.000\n62 888.000 853.000 30.000 30.000\n63 673.000 594.000 30.000 30.000\n64 1186.000 425.000 30.000 30.000\n65 1006.000 12.000 30.000 30.000\n66 447.000 305.000 30.000 30.000\n67 700.000 833.000 30.000 30.000\n68 1062.000 675.000 30.000 30.000\n69 23.000 89.000 30.000 30.000\n70 407.000 591.000 30.000 30.000\n71 4.000 965.000 30.000 30.000\n72 288.000 602.000 30.000 30.000\n73 1128.000 170.000 30.000 30.000\n74 434.000 384.000 30.000 30.000\n75 244.000 1147.000 30.000 30.000\n76 1116.000 1117.000 30.000 30.000\n77 752.000 191.000 30.000 30.000\n78 117.000 683.000 30.000 30.000\n79 1168.000 568.000 30.000 30.000\n80 530.000 896.000 30.000 30.000\n81 329.000 858.000 30.000 30.000\n82 285.000 124.000 30.000 30.000\n83 21.000 921.000 30.000 30.000\n84 606.000 965.000 30.000 30.000\n85 617.000 33.000 30.000 30.000\n86 1054.000 617.000 30.000 30.000\n87 332.000 1099.000 30.000 30.000\n88 1131.000 315.000 30.000 30.000\n89 50.000 1170.000 30.000 30.000\n90 705.000 640.000 30.000 30.000\n91 198.000 1131.000 30.000 30.000\n92 740.000 855.000 30.000 30.000\n93 772.000 649.000 30.000 30.000\n94 60.000 135.000 30.000 30.000\n95 1133.000 432.000 30.000 30.000\n96 168.000 472.000 30.000 30.000\n97 824.000 318.000 30.000 30.000\n98 38.000 270.000 30.000 30.000\n99 1147.000 174.000 30.000 30.000\n100 107.000 1025.000 30.000 30.000\n101 1043.000 665.000 30.000 30.000\n102 137.000 847.000 30.000 30.000\n103 295.000 206.000 30.000 30.000\n104 405.000 1031.000 30.000 30.000\n105 718.000 399.000 30.000 30.000\n106 883.000 279.000 30.000 30.000\n107 245.000 1205.000 30.000 30.000\n108 1177.000 1076.000 30.000 30.000\n109 903.000 551.000 30.000 30.000\n110 646.000 1004.000 30.000 30.000\n111 1045.000 8.000 30.000 30.000\n112 922.000 555.000 30.000 30.000\n113 703.000 575.000 30.000 30.000\n114 123.000 449.000 30.000 30.000\n115 19.000 1095.000 30.000 30.000\n116 1038.000 847.000 30.000 30.000\n117 411.000 478.000 30.000 30.000\n118 444.000 637.000 30.000 30.000\n119 652.000 964.000 30.000 30.000\n120 1060.000 928.000 30.000 30.000\n121 465.000 468.000 30.000 30.000\n122 698.000 470.000 30.000 30.000\n123 1022.000 1089.000 30.000 30.000\n124 90.000 979.000 30.000 30.000\n125 678.000 131.000 30.000 30.000\n126 938.000 377.000 30.000 30.000\n127 1195.000 1172.000 30.000 30.000\n128 58.000 147.000 30.000 30.000\n129 978.000 330.000 30.000 30.000\n130 12.000 819.000 30.000 30.000\n131 622.000 625.000 30.000 30.000\n132 329.000 52.000 30.000 30.000\n133 536.000 1132.000 30.000 30.000\n134 709.000 767.000 30.000 30.000\n135 1025.000 385.000 30.000 30.000\n136 1179.000 185.000 30.000 30.000\n137 376.000 1092.000 30.000 30.000\n138 581.000 356.000 30.000 30.000\n139 1011.000 470.000 30.000 30.000\n140 518.000 179.000 30.000 30.000\n141 927.000 152.000 30.000 30.000\n142 786.000 345.000 30.000 30.000\n143 1013.000 593.000 30.000 30.000\n144 256.000 588.000 30.000 30.000\n145 1118.000 932.000 30.000 30.000\n146 92.000 1200.000 30.000 30.000\n147 891.000 1051.000 30.000 30.000\n148 1034.000 77.000 30.000 30.000\n149 153.000 17.000 30.000 30.000\n150 463.000 312.000 30.000 30.000\n151 1091.000 591.000 30.000 30.000\n152 719.000 626.000 30.000 30.000\n153 33.000 1091.000 30.000 30.000\n154 654.000 66.000 30.000 30.000\n155 375.000 10.000 30.000 30.000\n156 778.000 344.000 30.000 30.000\n157 733.000 685.000 30.000 30.000\n158 245.000 1084.000 30.000 30.000\n159 320.000 878.000 30.000 30.000\n160 121.000 531.000 30.000 30.000\n161 752.000 53.000 30.000 30.000\n162 72.000 297.000 30.000 30.000\n163 53.000 796.000 30.000 30.000\n164 142.000 728.000 30.000 30.000\n165 203.000 376.000 30.000 30.000\n166 1118.000 31.000 30.000 30.000\n167 517.000 1190.000 30.000 30.000\n168 266.000 768.000 30.000 30.000\n169 382.000 627.000 30.000 30.000\n170 772.000 676.000 30.000 30.000\n171 18.000 889.000 30.000 30.000\n172 392.000 62.000 30.000 30.000\n173 645.000 191.000 30.000 30.000\n174 344.000 444.000 30.000 30.000\n175 1112.000 671.000 30.000 30.000\n176 672.000 1158.000 30.000 30.000\n177 1038.000 572.000 30.000 30.000\n178 358.000 693.000 30.000 30.000\n179 892.000 498.000 30.000 30.000\n#\n124 83\n14 4\n136 124\n89 23\n175 116\n87 82\n44 24\n78 33\n158 69\n178 167\n86 10\n158 126\n161 54\n58 64\n62 58\n117 110\n147 86\n49 37\n29 18\n135 148\n179 162\n174 36\n135 27\n94 72\n106 52\n61 33\n147 79\n72 19\n98 46\n41 150\n168 146\n109 38\n128 39\n90 30\n102 51\n173 141\n14 122\n167 76\n148 80\n71 18\n115 107\n59 161\n95 80\n54 32\n155 56\n42 41\n72 39\n5 150\n38 36\n156 135\n30 7\n92 6\n1 0\n172 11\n40 4\n131 101\n177 86\n31 9\n108 40\n33 23\n85 28\n39 36\n2 0\n163 82\n120 91\n150 51\n52 61\n112 85\n53 51\n162 50\n6 0\n121 178\n37 140\n154 70\n169 37\n79 55\n91 90\n141 123\n24 16\n45 25\n35 18\n70 16\n17 61\n92 97\n43 36\n59 44\n140 12\n141 55\n83 179\n41 8\n73 62\n110 83\n143 49\n104 58\n137 106\n48 19\n65 8\n29 41\n122 43\n80 0\n52 46\n76 13\n26 178\n165 130\n21 148\n116 6\n137 156\n41 101\n89 68\n123 85\n64 21\n134 31\n7 3\n166 77\n10 4\n84 143\n139 130\n175 98\n3 2\n67 40\n27 3\n107 104\n83 61\n30 26\n130 101\n153 74\n5 2\n57 50\n32 26\n154 150\n12 9\n152 80\n18 12\n159 59\n69 32\n100 29\n55 13\n82 33\n36 16\n75 52\n151 24\n57 30\n164 3\n66 64\n20 4\n54 31\n125 108\n81 13\n34 74\n160 152\n4 3\n103 79\n60 122\n101 78\n157 44\n170 36\n19 7\n99 22\n157 88\n62 131\n88 68\n14 2\n113 12\n114 59\n11 7\n113 74\n105 38\n17 0\n28 106\n119 117\n127 122\n58 30\n145 119\n164 12\n133 23\n139 76\n149 120\n51 47\n98 85\n8 6\n118 61\n23 21\n176 5\n77 29\n74 67\n123 142\n178 129\n79 1\n26 8\n13 5\n138 117\n171 143\n154 39\n97 94\n47 6\n22 2\n144 122\n133 152\n55 26\n21 15\n71 96\n60 4\n40 168\n179 168\n63 4\n73 9\n38 81\n69 139\n46 36\n107 93\n46 101\n136 12\n121 39\n159 37\n29 165\n16 9\n15 3\n149 20\n128 146\n55 36\n60 36\n9 6\n88 151\n176 67\n129 84\n71 57\n24 101\n93 62\n50 14\n172 60\n56 15\n60 80\n36 177\n83 23\n142 36\n34 15\n132 55\n126 6\n96 63\n90 78\n150 123\n91 48\n106 8\n28 8\n145 110\n25 2\n84 22\n126 54\n37 34\n68 45\n111 87\n146 65\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v180e270.gml",
    "content": "graph\n[\n    node\n    [\n        id    0\n        label    \"\"\n        graphics\n        [\n            x    1004.73\n            y    188.13\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    1\n        label    \"\"\n        graphics\n        [\n            x    973.65\n            y    236.81\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    2\n        label    \"\"\n        graphics\n        [\n            x    733.65\n            y    392.31\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    3\n        label    \"\"\n        graphics\n        [\n            x    165.09\n            y    1011.84\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    4\n        label    \"\"\n        graphics\n        [\n            x    82.78\n            y    317.76\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    5\n        label    \"\"\n        graphics\n        [\n            x    496.06\n            y    875.30\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    6\n        label    \"\"\n        graphics\n        [\n            x    62.48\n            y    419.91\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    7\n        label    \"\"\n        graphics\n        [\n            x    250.49\n            y    772.71\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    8\n        label    \"\"\n        graphics\n        [\n            x    1158.62\n            y    366.92\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    9\n        label    \"\"\n        graphics\n        [\n            x    474.15\n            y    993.18\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    10\n        label    \"\"\n        graphics\n        [\n            x    921.23\n            y    783.18\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    11\n        label    \"\"\n        graphics\n        [\n            x    902.40\n            y    1089.65\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    12\n        label    \"\"\n        graphics\n        [\n            x    175.05\n            y    920.52\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    13\n        label    \"\"\n        graphics\n        [\n            x    1041.40\n            y    182.01\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    14\n        label    \"\"\n        graphics\n        [\n            x    752.23\n            y    589.57\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    15\n        label    \"\"\n        graphics\n        [\n            x    468.20\n            y    153.61\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    16\n        label    \"\"\n        graphics\n        [\n            x    202.68\n            y    1023.91\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    17\n        label    \"\"\n        graphics\n        [\n            x    382.88\n            y    746.12\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    18\n        label    \"\"\n        graphics\n        [\n            x    652.45\n            y    1004.26\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    19\n        label    \"\"\n        graphics\n        [\n            x    668.32\n            y    533.85\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    20\n        label    \"\"\n        graphics\n        [\n            x    1180.19\n            y    1190.19\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    21\n        label    \"\"\n        graphics\n        [\n            x    112.96\n            y    799.06\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    22\n        label    \"\"\n        graphics\n        [\n            x    440.28\n            y    561.10\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    23\n        label    \"\"\n        graphics\n        [\n            x    963.42\n            y    407.16\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    24\n        label    \"\"\n        graphics\n        [\n            x    860.05\n            y    295.58\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    25\n        label    \"\"\n        graphics\n        [\n            x    507.25\n            y    947.63\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    26\n        label    \"\"\n        graphics\n        [\n            x    875.62\n            y    1079.70\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    27\n        label    \"\"\n        graphics\n        [\n            x    630.52\n            y    394.96\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    28\n        label    \"\"\n        graphics\n        [\n            x    302.56\n            y    515.47\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    29\n        label    \"\"\n        graphics\n        [\n            x    1115.75\n            y    1045.28\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    30\n        label    \"\"\n        graphics\n        [\n            x    618.44\n            y    223.88\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    31\n        label    \"\"\n        graphics\n        [\n            x    479.08\n            y    426.48\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    32\n        label    \"\"\n        graphics\n        [\n            x    996.91\n            y    397.80\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    33\n        label    \"\"\n        graphics\n        [\n            x    2.53\n            y    488.34\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    34\n        label    \"\"\n        graphics\n        [\n            x    546.82\n            y    917.65\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    35\n        label    \"\"\n        graphics\n        [\n            x    261.88\n            y    420.59\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    36\n        label    \"\"\n        graphics\n        [\n            x    579.78\n            y    104.76\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    37\n        label    \"\"\n        graphics\n        [\n            x    121.78\n            y    769.42\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    38\n        label    \"\"\n        graphics\n        [\n            x    148.62\n            y    698.28\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    39\n        label    \"\"\n        graphics\n        [\n            x    872.61\n            y    380.72\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    40\n        label    \"\"\n        graphics\n        [\n            x    368.83\n            y    512.65\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    41\n        label    \"\"\n        graphics\n        [\n            x    381.69\n            y    775.24\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    42\n        label    \"\"\n        graphics\n        [\n            x    418.03\n            y    256.36\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    43\n        label    \"\"\n        graphics\n        [\n            x    718.38\n            y    235.57\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    44\n        label    \"\"\n        graphics\n        [\n            x    615.71\n            y    731.45\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    45\n        label    \"\"\n        graphics\n        [\n            x    352.62\n            y    142.20\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    46\n        label    \"\"\n        graphics\n        [\n            x    807.38\n            y    533.37\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    47\n        label    \"\"\n        graphics\n        [\n            x    459.67\n            y    694.76\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    48\n        label    \"\"\n        graphics\n        [\n            x    488.61\n            y    165.46\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    49\n        label    \"\"\n        graphics\n        [\n            x    763.48\n            y    30.45\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    50\n        label    \"\"\n        graphics\n        [\n            x    1134.80\n            y    565.25\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    51\n        label    \"\"\n        graphics\n        [\n            x    1006.85\n            y    693.97\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    52\n        label    \"\"\n        graphics\n        [\n            x    282.82\n            y    360.85\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    53\n        label    \"\"\n        graphics\n        [\n            x    987.74\n            y    55.07\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    54\n        label    \"\"\n        graphics\n        [\n            x    61.65\n            y    598.17\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    55\n        label    \"\"\n        graphics\n        [\n            x    1068.89\n            y    441.60\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    56\n        label    \"\"\n        graphics\n        [\n            x    718.89\n            y    1005.52\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    57\n        label    \"\"\n        graphics\n        [\n            x    447.74\n            y    921.28\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    58\n        label    \"\"\n        graphics\n        [\n            x    1078.98\n            y    18.52\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    59\n        label    \"\"\n        graphics\n        [\n            x    175.70\n            y    615.64\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    60\n        label    \"\"\n        graphics\n        [\n            x    768.93\n            y    1043.25\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    61\n        label    \"\"\n        graphics\n        [\n            x    861.59\n            y    1117.00\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    62\n        label    \"\"\n        graphics\n        [\n            x    1132.99\n            y    65.72\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    63\n        label    \"\"\n        graphics\n        [\n            x    1021.09\n            y    1184.99\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    64\n        label    \"\"\n        graphics\n        [\n            x    872.99\n            y    1180.48\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    65\n        label    \"\"\n        graphics\n        [\n            x    1188.93\n            y    1057.38\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    66\n        label    \"\"\n        graphics\n        [\n            x    129.47\n            y    113.97\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    67\n        label    \"\"\n        graphics\n        [\n            x    1066.26\n            y    69.36\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    68\n        label    \"\"\n        graphics\n        [\n            x    132.19\n            y    636.81\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    69\n        label    \"\"\n        graphics\n        [\n            x    376.21\n            y    874.64\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    70\n        label    \"\"\n        graphics\n        [\n            x    819.68\n            y    919.36\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    71\n        label    \"\"\n        graphics\n        [\n            x    1035.95\n            y    323.02\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    72\n        label    \"\"\n        graphics\n        [\n            x    809.86\n            y    15.64\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    73\n        label    \"\"\n        graphics\n        [\n            x    458.37\n            y    533.13\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    74\n        label    \"\"\n        graphics\n        [\n            x    741.45\n            y    886.78\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    75\n        label    \"\"\n        graphics\n        [\n            x    1177.26\n            y    236.17\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    76\n        label    \"\"\n        graphics\n        [\n            x    733.41\n            y    161.82\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    77\n        label    \"\"\n        graphics\n        [\n            x    161.49\n            y    1071.18\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    78\n        label    \"\"\n        graphics\n        [\n            x    100.26\n            y    804.91\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    79\n        label    \"\"\n        graphics\n        [\n            x    1039.89\n            y    1138.13\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    80\n        label    \"\"\n        graphics\n        [\n            x    236.36\n            y    1168.05\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    81\n        label    \"\"\n        graphics\n        [\n            x    931.65\n            y    101.00\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    82\n        label    \"\"\n        graphics\n        [\n            x    700.53\n            y    11.49\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    83\n        label    \"\"\n        graphics\n        [\n            x    927.15\n            y    1059.82\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    84\n        label    \"\"\n        graphics\n        [\n            x    583.42\n            y    489.04\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    85\n        label    \"\"\n        graphics\n        [\n            x    891.57\n            y    991.88\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    86\n        label    \"\"\n        graphics\n        [\n            x    1149.32\n            y    963.32\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    87\n        label    \"\"\n        graphics\n        [\n            x    711.20\n            y    465.01\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    88\n        label    \"\"\n        graphics\n        [\n            x    888.39\n            y    27.66\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    89\n        label    \"\"\n        graphics\n        [\n            x    1144.03\n            y    1124.16\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    90\n        label    \"\"\n        graphics\n        [\n            x    45.43\n            y    841.16\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    91\n        label    \"\"\n        graphics\n        [\n            x    258.01\n            y    31.40\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    92\n        label    \"\"\n        graphics\n        [\n            x    648.29\n            y    161.44\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    93\n        label    \"\"\n        graphics\n        [\n            x    199.75\n            y    855.84\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    94\n        label    \"\"\n        graphics\n        [\n            x    1130.02\n            y    745.28\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    95\n        label    \"\"\n        graphics\n        [\n            x    39.96\n            y    594.83\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    96\n        label    \"\"\n        graphics\n        [\n            x    380.57\n            y    614.62\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    97\n        label    \"\"\n        graphics\n        [\n            x    775.93\n            y    1064.18\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    98\n        label    \"\"\n        graphics\n        [\n            x    596.20\n            y    452.53\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    99\n        label    \"\"\n        graphics\n        [\n            x    865.03\n            y    168.00\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    100\n        label    \"\"\n        graphics\n        [\n            x    270.92\n            y    572.61\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    101\n        label    \"\"\n        graphics\n        [\n            x    780.95\n            y    757.48\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    102\n        label    \"\"\n        graphics\n        [\n            x    30.13\n            y    42.09\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    103\n        label    \"\"\n        graphics\n        [\n            x    604.05\n            y    1179.27\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    104\n        label    \"\"\n        graphics\n        [\n            x    610.98\n            y    451.44\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    105\n        label    \"\"\n        graphics\n        [\n            x    616.75\n            y    922.68\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    106\n        label    \"\"\n        graphics\n        [\n            x    1061.61\n            y    912.09\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    107\n        label    \"\"\n        graphics\n        [\n            x    652.91\n            y    640.76\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    108\n        label    \"\"\n        graphics\n        [\n            x    362.85\n            y    1098.09\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    109\n        label    \"\"\n        graphics\n        [\n            x    972.04\n            y    152.85\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    110\n        label    \"\"\n        graphics\n        [\n            x    235.78\n            y    916.36\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    111\n        label    \"\"\n        graphics\n        [\n            x    458.74\n            y    1183.61\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    112\n        label    \"\"\n        graphics\n        [\n            x    501.89\n            y    560.41\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    113\n        label    \"\"\n        graphics\n        [\n            x    913.39\n            y    945.15\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    114\n        label    \"\"\n        graphics\n        [\n            x    251.41\n            y    714.62\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    115\n        label    \"\"\n        graphics\n        [\n            x    573.91\n            y    564.80\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    116\n        label    \"\"\n        graphics\n        [\n            x    629.23\n            y    517.43\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    117\n        label    \"\"\n        graphics\n        [\n            x    444.20\n            y    499.58\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    118\n        label    \"\"\n        graphics\n        [\n            x    48.79\n            y    873.36\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    119\n        label    \"\"\n        graphics\n        [\n            x    887.97\n            y    751.92\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    120\n        label    \"\"\n        graphics\n        [\n            x    455.29\n            y    68.76\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    121\n        label    \"\"\n        graphics\n        [\n            x    117.48\n            y    393.34\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    122\n        label    \"\"\n        graphics\n        [\n            x    70.47\n            y    19.72\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    123\n        label    \"\"\n        graphics\n        [\n            x    589.06\n            y    821.64\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    124\n        label    \"\"\n        graphics\n        [\n            x    396.68\n            y    581.06\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    125\n        label    \"\"\n        graphics\n        [\n            x    1052.35\n            y    1165.45\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    126\n        label    \"\"\n        graphics\n        [\n            x    575.29\n            y    737.70\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    127\n        label    \"\"\n        graphics\n        [\n            x    1099.68\n            y    1173.71\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    128\n        label    \"\"\n        graphics\n        [\n            x    106.39\n            y    244.68\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    129\n        label    \"\"\n        graphics\n        [\n            x    10.07\n            y    1070.57\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    130\n        label    \"\"\n        graphics\n        [\n            x    227.50\n            y    269.96\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    131\n        label    \"\"\n        graphics\n        [\n            x    979.14\n            y    857.48\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    132\n        label    \"\"\n        graphics\n        [\n            x    993.84\n            y    124.87\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    133\n        label    \"\"\n        graphics\n        [\n            x    885.74\n            y    418.07\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    134\n        label    \"\"\n        graphics\n        [\n            x    370.28\n            y    1076.56\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    135\n        label    \"\"\n        graphics\n        [\n            x    955.45\n            y    178.73\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    136\n        label    \"\"\n        graphics\n        [\n            x    701.64\n            y    291.80\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    137\n        label    \"\"\n        graphics\n        [\n            x    50.52\n            y    261.91\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    138\n        label    \"\"\n        graphics\n        [\n            x    101.63\n            y    1112.62\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    139\n        label    \"\"\n        graphics\n        [\n            x    215.51\n            y    1147.00\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    140\n        label    \"\"\n        graphics\n        [\n            x    491.30\n            y    254.96\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    141\n        label    \"\"\n        graphics\n        [\n            x    1115.37\n            y    402.50\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    142\n        label    \"\"\n        graphics\n        [\n            x    260.20\n            y    1125.03\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    143\n        label    \"\"\n        graphics\n        [\n            x    870.51\n            y    408.63\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    144\n        label    \"\"\n        graphics\n        [\n            x    534.40\n            y    939.26\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    145\n        label    \"\"\n        graphics\n        [\n            x    437.66\n            y    52.63\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    146\n        label    \"\"\n        graphics\n        [\n            x    586.32\n            y    271.60\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    147\n        label    \"\"\n        graphics\n        [\n            x    1163.42\n            y    535.43\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    148\n        label    \"\"\n        graphics\n        [\n            x    1198.69\n            y    966.41\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    149\n        label    \"\"\n        graphics\n        [\n            x    1019.09\n            y    821.72\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    150\n        label    \"\"\n        graphics\n        [\n            x    511.02\n            y    741.59\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    151\n        label    \"\"\n        graphics\n        [\n            x    1004.37\n            y    1111.36\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    152\n        label    \"\"\n        graphics\n        [\n            x    99.57\n            y    498.00\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    153\n        label    \"\"\n        graphics\n        [\n            x    903.37\n            y    616.92\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    154\n        label    \"\"\n        graphics\n        [\n            x    48.13\n            y    485.84\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    155\n        label    \"\"\n        graphics\n        [\n            x    505.47\n            y    1056.33\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    156\n        label    \"\"\n        graphics\n        [\n            x    34.46\n            y    680.25\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    157\n        label    \"\"\n        graphics\n        [\n            x    9.54\n            y    868.03\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    158\n        label    \"\"\n        graphics\n        [\n            x    684.71\n            y    542.10\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    159\n        label    \"\"\n        graphics\n        [\n            x    592.68\n            y    558.35\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    160\n        label    \"\"\n        graphics\n        [\n            x    1080.61\n            y    440.17\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    161\n        label    \"\"\n        graphics\n        [\n            x    644.12\n            y    150.60\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    162\n        label    \"\"\n        graphics\n        [\n            x    718.63\n            y    439.37\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    163\n        label    \"\"\n        graphics\n        [\n            x    585.89\n            y    335.11\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    164\n        label    \"\"\n        graphics\n        [\n            x    815.84\n            y    368.75\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    165\n        label    \"\"\n        graphics\n        [\n            x    87.24\n            y    716.36\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    166\n        label    \"\"\n        graphics\n        [\n            x    699.99\n            y    429.19\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    167\n        label    \"\"\n        graphics\n        [\n            x    967.81\n            y    60.26\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    168\n        label    \"\"\n        graphics\n        [\n            x    386.85\n            y    1067.75\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    169\n        label    \"\"\n        graphics\n        [\n            x    589.22\n            y    432.81\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    170\n        label    \"\"\n        graphics\n        [\n            x    225.56\n            y    713.75\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    171\n        label    \"\"\n        graphics\n        [\n            x    1051.04\n            y    268.51\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    172\n        label    \"\"\n        graphics\n        [\n            x    918.46\n            y    774.78\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    173\n        label    \"\"\n        graphics\n        [\n            x    296.41\n            y    1182.81\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    174\n        label    \"\"\n        graphics\n        [\n            x    387.18\n            y    688.92\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    175\n        label    \"\"\n        graphics\n        [\n            x    339.92\n            y    1061.39\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    176\n        label    \"\"\n        graphics\n        [\n            x    465.58\n            y    144.13\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    177\n        label    \"\"\n        graphics\n        [\n            x    142.62\n            y    1108.76\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    178\n        label    \"\"\n        graphics\n        [\n            x    450.52\n            y    183.79\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    179\n        label    \"\"\n        graphics\n        [\n            x    885.56\n            y    18.81\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    edge\n    [\n        source    0\n        target    145\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    1\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    10\n        target    120\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    10\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    100\n        target    71\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    101\n        target    34\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    102\n        target    95\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    103\n        target    128\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    103\n        target    96\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    104\n        target    49\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    105\n        target    26\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    106\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    107\n        target    40\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    108\n        target    103\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    109\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    11\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    110\n        target    78\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    111\n        target    102\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    112\n        target    39\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    113\n        target    56\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    113\n        target    96\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    114\n        target    96\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    115\n        target    96\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    116\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    116\n        target    31\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    117\n        target    104\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    118\n        target    125\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    118\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    119\n        target    113\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    119\n        target    41\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    12\n        target    167\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    12\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    120\n        target    97\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    121\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    122\n        target    29\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    123\n        target    46\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    124\n        target    87\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    125\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    126\n        target    69\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    127\n        target    109\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    128\n        target    97\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    129\n        target    33\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    13\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    130\n        target    100\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    130\n        target    65\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    131\n        target    53\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    131\n        target    60\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    132\n        target    63\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    133\n        target    62\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    134\n        target    104\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    135\n        target    25\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    136\n        target    64\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    137\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    138\n        target    63\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    139\n        target    136\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    14\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    140\n        target    68\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    141\n        target    137\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    141\n        target    159\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    142\n        target    40\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    143\n        target    139\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    144\n        target    90\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    145\n        target    125\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    145\n        target    144\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    146\n        target    19\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    147\n        target    75\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    148\n        target    29\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    148\n        target    33\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    148\n        target    34\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    149\n        target    123\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    149\n        target    155\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    149\n        target    160\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    149\n        target    29\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    15\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    150\n        target    24\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    151\n        target    127\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    151\n        target    176\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    152\n        target    130\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    152\n        target    155\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    153\n        target    122\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    153\n        target    157\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    153\n        target    32\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    154\n        target    146\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    155\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    156\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    156\n        target    116\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    157\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    157\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    158\n        target    112\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    159\n        target    136\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    16\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    160\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    160\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    161\n        target    43\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    162\n        target    129\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    162\n        target    51\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    163\n        target    125\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    164\n        target    97\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    165\n        target    118\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    165\n        target    39\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    166\n        target    116\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    166\n        target    31\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    167\n        target    106\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    167\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    167\n        target    120\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    168\n        target    36\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    169\n        target    103\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    17\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    170\n        target    39\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    170\n        target    43\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    170\n        target    58\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    171\n        target    146\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    171\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    171\n        target    63\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    172\n        target    103\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    172\n        target    130\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    173\n        target    105\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    174\n        target    167\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    174\n        target    53\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    175\n        target    64\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    176\n        target    123\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    176\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    177\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    177\n        target    38\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    178\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    179\n        target    88\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    179\n        target    97\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    18\n        target    178\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    18\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    19\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    2\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    2\n        target    164\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    20\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    21\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    22\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    23\n        target    126\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    23\n        target    20\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    24\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    25\n        target    115\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    25\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    26\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    27\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    27\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    28\n        target    20\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    28\n        target    33\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    29\n        target    109\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    29\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    3\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    30\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    30\n        target    35\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    30\n        target    42\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    31\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    32\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    32\n        target    154\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    33\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    33\n        target    92\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    34\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    34\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    35\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    36\n        target    30\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    37\n        target    30\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    37\n        target    74\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    38\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    39\n        target    36\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    4\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    4\n        target    120\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    4\n        target    72\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    40\n        target    161\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    40\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    40\n        target    59\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    41\n        target    128\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    41\n        target    35\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    41\n        target    67\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    41\n        target    86\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    42\n        target    38\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    43\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    43\n        target    76\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    44\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    44\n        target    150\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    45\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    45\n        target    71\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    46\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    46\n        target    32\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    47\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    48\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    49\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    49\n        target    151\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    5\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    5\n        target    53\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    50\n        target    114\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    50\n        target    20\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    50\n        target    27\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    51\n        target    44\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    52\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    52\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    53\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    54\n        target    30\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    55\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    55\n        target    54\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    56\n        target    52\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    57\n        target    135\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    57\n        target    55\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    58\n        target    112\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    58\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    59\n        target    34\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    59\n        target    53\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    6\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    60\n        target    148\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    60\n        target    172\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    60\n        target    31\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    61\n        target    106\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    61\n        target    52\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    62\n        target    25\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    62\n        target    49\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    63\n        target    28\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    63\n        target    40\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    64\n        target    60\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    65\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    65\n        target    51\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    65\n        target    52\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    66\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    67\n        target    50\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    68\n        target    42\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    69\n        target    47\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    69\n        target    57\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    7\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    7\n        target    123\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    7\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    70\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    71\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    72\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    72\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    73\n        target    51\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    73\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    74\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    75\n        target    25\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    76\n        target    59\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    77\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    78\n        target    168\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    78\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    79\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    8\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    80\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    81\n        target    47\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    81\n        target    72\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    82\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    83\n        target    40\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    83\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    84\n        target    170\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    84\n        target    77\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    85\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    86\n        target    30\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    87\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    88\n        target    60\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    89\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    9\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    9\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    90\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    91\n        target    117\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    91\n        target    32\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    92\n        target    30\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    93\n        target    57\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    94\n        target    76\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    95\n        target    52\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    95\n        target    92\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    96\n        target    35\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    96\n        target    56\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    97\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    98\n        target    67\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    99\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n]\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v180e270.tglf",
    "content": "0 1004.000 188.000 30.000 30.000\n1 973.000 236.000 30.000 30.000\n2 733.000 392.000 30.000 30.000\n3 165.000 1011.000 30.000 30.000\n4 82.000 317.000 30.000 30.000\n5 496.000 875.000 30.000 30.000\n6 62.000 419.000 30.000 30.000\n7 250.000 772.000 30.000 30.000\n8 1158.000 366.000 30.000 30.000\n9 474.000 993.000 30.000 30.000\n10 921.000 783.000 30.000 30.000\n11 902.000 1089.000 30.000 30.000\n12 175.000 920.000 30.000 30.000\n13 1041.000 182.000 30.000 30.000\n14 752.000 589.000 30.000 30.000\n15 468.000 153.000 30.000 30.000\n16 202.000 1023.000 30.000 30.000\n17 382.000 746.000 30.000 30.000\n18 652.000 1004.000 30.000 30.000\n19 668.000 533.000 30.000 30.000\n20 1180.000 1190.000 30.000 30.000\n21 112.000 799.000 30.000 30.000\n22 440.000 561.000 30.000 30.000\n23 963.000 407.000 30.000 30.000\n24 860.000 295.000 30.000 30.000\n25 507.000 947.000 30.000 30.000\n26 875.000 1079.000 30.000 30.000\n27 630.000 394.000 30.000 30.000\n28 302.000 515.000 30.000 30.000\n29 1115.000 1045.000 30.000 30.000\n30 618.000 223.000 30.000 30.000\n31 479.000 426.000 30.000 30.000\n32 996.000 397.000 30.000 30.000\n33 2.000 488.000 30.000 30.000\n34 546.000 917.000 30.000 30.000\n35 261.000 420.000 30.000 30.000\n36 579.000 104.000 30.000 30.000\n37 121.000 769.000 30.000 30.000\n38 148.000 698.000 30.000 30.000\n39 872.000 380.000 30.000 30.000\n40 368.000 512.000 30.000 30.000\n41 381.000 775.000 30.000 30.000\n42 418.000 256.000 30.000 30.000\n43 718.000 235.000 30.000 30.000\n44 615.000 731.000 30.000 30.000\n45 352.000 142.000 30.000 30.000\n46 807.000 533.000 30.000 30.000\n47 459.000 694.000 30.000 30.000\n48 488.000 165.000 30.000 30.000\n49 763.000 30.000 30.000 30.000\n50 1134.000 565.000 30.000 30.000\n51 1006.000 693.000 30.000 30.000\n52 282.000 360.000 30.000 30.000\n53 987.000 55.000 30.000 30.000\n54 61.000 598.000 30.000 30.000\n55 1068.000 441.000 30.000 30.000\n56 718.000 1005.000 30.000 30.000\n57 447.000 921.000 30.000 30.000\n58 1078.000 18.000 30.000 30.000\n59 175.000 615.000 30.000 30.000\n60 768.000 1043.000 30.000 30.000\n61 861.000 1117.000 30.000 30.000\n62 1132.000 65.000 30.000 30.000\n63 1021.000 1184.000 30.000 30.000\n64 872.000 1180.000 30.000 30.000\n65 1188.000 1057.000 30.000 30.000\n66 129.000 113.000 30.000 30.000\n67 1066.000 69.000 30.000 30.000\n68 132.000 636.000 30.000 30.000\n69 376.000 874.000 30.000 30.000\n70 819.000 919.000 30.000 30.000\n71 1035.000 323.000 30.000 30.000\n72 809.000 15.000 30.000 30.000\n73 458.000 533.000 30.000 30.000\n74 741.000 886.000 30.000 30.000\n75 1177.000 236.000 30.000 30.000\n76 733.000 161.000 30.000 30.000\n77 161.000 1071.000 30.000 30.000\n78 100.000 804.000 30.000 30.000\n79 1039.000 1138.000 30.000 30.000\n80 236.000 1168.000 30.000 30.000\n81 931.000 101.000 30.000 30.000\n82 700.000 11.000 30.000 30.000\n83 927.000 1059.000 30.000 30.000\n84 583.000 489.000 30.000 30.000\n85 891.000 991.000 30.000 30.000\n86 1149.000 963.000 30.000 30.000\n87 711.000 465.000 30.000 30.000\n88 888.000 27.000 30.000 30.000\n89 1144.000 1124.000 30.000 30.000\n90 45.000 841.000 30.000 30.000\n91 258.000 31.000 30.000 30.000\n92 648.000 161.000 30.000 30.000\n93 199.000 855.000 30.000 30.000\n94 1130.000 745.000 30.000 30.000\n95 39.000 594.000 30.000 30.000\n96 380.000 614.000 30.000 30.000\n97 775.000 1064.000 30.000 30.000\n98 596.000 452.000 30.000 30.000\n99 865.000 168.000 30.000 30.000\n100 270.000 572.000 30.000 30.000\n101 780.000 757.000 30.000 30.000\n102 30.000 42.000 30.000 30.000\n103 604.000 1179.000 30.000 30.000\n104 610.000 451.000 30.000 30.000\n105 616.000 922.000 30.000 30.000\n106 1061.000 912.000 30.000 30.000\n107 652.000 640.000 30.000 30.000\n108 362.000 1098.000 30.000 30.000\n109 972.000 152.000 30.000 30.000\n110 235.000 916.000 30.000 30.000\n111 458.000 1183.000 30.000 30.000\n112 501.000 560.000 30.000 30.000\n113 913.000 945.000 30.000 30.000\n114 251.000 714.000 30.000 30.000\n115 573.000 564.000 30.000 30.000\n116 629.000 517.000 30.000 30.000\n117 444.000 499.000 30.000 30.000\n118 48.000 873.000 30.000 30.000\n119 887.000 751.000 30.000 30.000\n120 455.000 68.000 30.000 30.000\n121 117.000 393.000 30.000 30.000\n122 70.000 19.000 30.000 30.000\n123 589.000 821.000 30.000 30.000\n124 396.000 581.000 30.000 30.000\n125 1052.000 1165.000 30.000 30.000\n126 575.000 737.000 30.000 30.000\n127 1099.000 1173.000 30.000 30.000\n128 106.000 244.000 30.000 30.000\n129 10.000 1070.000 30.000 30.000\n130 227.000 269.000 30.000 30.000\n131 979.000 857.000 30.000 30.000\n132 993.000 124.000 30.000 30.000\n133 885.000 418.000 30.000 30.000\n134 370.000 1076.000 30.000 30.000\n135 955.000 178.000 30.000 30.000\n136 701.000 291.000 30.000 30.000\n137 50.000 261.000 30.000 30.000\n138 101.000 1112.000 30.000 30.000\n139 215.000 1147.000 30.000 30.000\n140 491.000 254.000 30.000 30.000\n141 1115.000 402.000 30.000 30.000\n142 260.000 1125.000 30.000 30.000\n143 870.000 408.000 30.000 30.000\n144 534.000 939.000 30.000 30.000\n145 437.000 52.000 30.000 30.000\n146 586.000 271.000 30.000 30.000\n147 1163.000 535.000 30.000 30.000\n148 1198.000 966.000 30.000 30.000\n149 1019.000 821.000 30.000 30.000\n150 511.000 741.000 30.000 30.000\n151 1004.000 1111.000 30.000 30.000\n152 99.000 498.000 30.000 30.000\n153 903.000 616.000 30.000 30.000\n154 48.000 485.000 30.000 30.000\n155 505.000 1056.000 30.000 30.000\n156 34.000 680.000 30.000 30.000\n157 9.000 868.000 30.000 30.000\n158 684.000 542.000 30.000 30.000\n159 592.000 558.000 30.000 30.000\n160 1080.000 440.000 30.000 30.000\n161 644.000 150.000 30.000 30.000\n162 718.000 439.000 30.000 30.000\n163 585.000 335.000 30.000 30.000\n164 815.000 368.000 30.000 30.000\n165 87.000 716.000 30.000 30.000\n166 699.000 429.000 30.000 30.000\n167 967.000 60.000 30.000 30.000\n168 386.000 1067.000 30.000 30.000\n169 589.000 432.000 30.000 30.000\n170 225.000 713.000 30.000 30.000\n171 1051.000 268.000 30.000 30.000\n172 918.000 774.000 30.000 30.000\n173 296.000 1182.000 30.000 30.000\n174 387.000 688.000 30.000 30.000\n175 339.000 1061.000 30.000 30.000\n176 465.000 144.000 30.000 30.000\n177 142.000 1108.000 30.000 30.000\n178 450.000 183.000 30.000 30.000\n179 885.000 18.000 30.000 30.000\n#\n43 76\n78 168\n60 148\n7 1\n101 34\n153 157\n157 4\n0 145\n172 130\n22 14\n125 8\n41 35\n143 139\n173 105\n52 23\n44 150\n176 17\n149 155\n171 4\n110 78\n166 31\n96 56\n90 14\n124 87\n31 10\n12 167\n144 90\n23 20\n167 11\n113 56\n27 8\n167 120\n159 136\n79 15\n156 116\n38 9\n41 128\n18 6\n176 123\n55 12\n10 120\n48 23\n133 62\n175 64\n68 42\n50 27\n67 50\n63 40\n130 100\n164 97\n141 159\n100 71\n152 130\n15 2\n105 26\n123 46\n27 9\n113 96\n74 0\n169 103\n4 0\n84 77\n103 96\n71 4\n46 18\n46 32\n107 40\n140 68\n2 0\n51 44\n117 104\n122 29\n119 41\n64 60\n94 76\n177 38\n148 34\n32 154\n66 15\n56 52\n60 31\n146 19\n61 106\n151 127\n160 13\n162 129\n178 17\n9 7\n132 63\n86 30\n142 40\n47 18\n34 16\n19 10\n37 74\n5 53\n114 96\n53 13\n57 135\n97 0\n54 30\n49 151\n80 17\n120 97\n165 118\n149 123\n41 67\n33 2\n103 128\n7 14\n7 123\n135 25\n131 60\n128 97\n145 125\n70 21\n156 0\n148 29\n78 8\n5 1\n4 120\n55 54\n118 125\n72 7\n65 11\n13 5\n72 6\n50 20\n81 72\n85 6\n171 146\n37 30\n65 52\n32 0\n84 170\n16 5\n33 92\n30 35\n109 16\n102 95\n147 75\n50 114\n115 96\n118 16\n69 57\n30 42\n69 47\n165 39\n141 137\n172 103\n170 58\n20 14\n95 52\n42 38\n155 8\n157 21\n162 51\n26 18\n127 109\n91 117\n91 32\n73 51\n121 13\n36 30\n137 8\n18 178\n131 53\n75 25\n59 53\n28 33\n168 36\n52 7\n149 160\n88 60\n158 112\n25 18\n150 24\n10 3\n17 8\n43 16\n2 164\n145 144\n61 52\n62 25\n92 30\n179 88\n6 1\n95 92\n4 72\n174 167\n108 103\n160 1\n112 39\n11 10\n73 8\n8 0\n163 125\n149 29\n98 67\n40 22\n34 22\n40 161\n12 9\n45 23\n126 69\n14 2\n29 12\n89 17\n148 33\n76 59\n30 2\n63 28\n129 33\n138 63\n82 11\n39 36\n139 136\n134 104\n111 102\n40 59\n58 14\n49 11\n29 109\n179 97\n62 49\n151 176\n45 71\n177 2\n153 122\n170 43\n99 2\n83 9\n58 112\n21 0\n87 21\n154 146\n24 12\n93 57\n171 63\n161 43\n60 172\n28 20\n25 115\n153 32\n116 10\n23 126\n167 106\n41 86\n44 12\n119 113\n59 34\n9 1\n106 3\n174 53\n1 0\n77 15\n130 65\n136 64\n83 40\n65 51\n57 55\n104 49\n170 39\n152 155\n81 47\n166 116\n35 1\n3 1\n116 31\n96 35\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v190e190.gml",
    "content": "graph\n[\n    node\n    [\n        id    0\n        label    \"\"\n        graphics\n        [\n            x    717.41\n            y    122.12\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    1\n        label    \"\"\n        graphics\n        [\n            x    914.28\n            y    564.08\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    2\n        label    \"\"\n        graphics\n        [\n            x    1.21\n            y    335.00\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    3\n        label    \"\"\n        graphics\n        [\n            x    913.38\n            y    131.89\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    4\n        label    \"\"\n        graphics\n        [\n            x    885.53\n            y    819.27\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    5\n        label    \"\"\n        graphics\n        [\n            x    463.44\n            y    1230.58\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    6\n        label    \"\"\n        graphics\n        [\n            x    931.05\n            y    972.49\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    7\n        label    \"\"\n        graphics\n        [\n            x    938.08\n            y    973.18\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    8\n        label    \"\"\n        graphics\n        [\n            x    562.41\n            y    822.23\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    9\n        label    \"\"\n        graphics\n        [\n            x    539.97\n            y    823.79\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    10\n        label    \"\"\n        graphics\n        [\n            x    1113.90\n            y    381.65\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    11\n        label    \"\"\n        graphics\n        [\n            x    196.73\n            y    147.94\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    12\n        label    \"\"\n        graphics\n        [\n            x    709.70\n            y    632.01\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    13\n        label    \"\"\n        graphics\n        [\n            x    834.09\n            y    441.96\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    14\n        label    \"\"\n        graphics\n        [\n            x    19.35\n            y    1085.71\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    15\n        label    \"\"\n        graphics\n        [\n            x    819.10\n            y    452.07\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    16\n        label    \"\"\n        graphics\n        [\n            x    37.18\n            y    250.01\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    17\n        label    \"\"\n        graphics\n        [\n            x    890.94\n            y    90.99\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    18\n        label    \"\"\n        graphics\n        [\n            x    272.48\n            y    477.24\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    19\n        label    \"\"\n        graphics\n        [\n            x    63.11\n            y    1150.41\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    20\n        label    \"\"\n        graphics\n        [\n            x    29.37\n            y    155.36\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    21\n        label    \"\"\n        graphics\n        [\n            x    198.97\n            y    163.79\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    22\n        label    \"\"\n        graphics\n        [\n            x    984.72\n            y    904.15\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    23\n        label    \"\"\n        graphics\n        [\n            x    784.11\n            y    308.08\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    24\n        label    \"\"\n        graphics\n        [\n            x    259.34\n            y    638.67\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    25\n        label    \"\"\n        graphics\n        [\n            x    784.32\n            y    1188.04\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    26\n        label    \"\"\n        graphics\n        [\n            x    1137.28\n            y    850.02\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    27\n        label    \"\"\n        graphics\n        [\n            x    855.51\n            y    681.53\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    28\n        label    \"\"\n        graphics\n        [\n            x    1045.65\n            y    518.98\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    29\n        label    \"\"\n        graphics\n        [\n            x    759.73\n            y    994.02\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    30\n        label    \"\"\n        graphics\n        [\n            x    28.57\n            y    974.07\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    31\n        label    \"\"\n        graphics\n        [\n            x    866.31\n            y    671.67\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    32\n        label    \"\"\n        graphics\n        [\n            x    567.29\n            y    986.74\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    33\n        label    \"\"\n        graphics\n        [\n            x    970.35\n            y    939.95\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    34\n        label    \"\"\n        graphics\n        [\n            x    1128.00\n            y    668.34\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    35\n        label    \"\"\n        graphics\n        [\n            x    22.14\n            y    346.51\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    36\n        label    \"\"\n        graphics\n        [\n            x    1094.31\n            y    163.46\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    37\n        label    \"\"\n        graphics\n        [\n            x    758.02\n            y    199.61\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    38\n        label    \"\"\n        graphics\n        [\n            x    1058.56\n            y    753.25\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    39\n        label    \"\"\n        graphics\n        [\n            x    719.17\n            y    241.71\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    40\n        label    \"\"\n        graphics\n        [\n            x    830.16\n            y    460.52\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    41\n        label    \"\"\n        graphics\n        [\n            x    725.27\n            y    417.25\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    42\n        label    \"\"\n        graphics\n        [\n            x    332.53\n            y    899.21\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    43\n        label    \"\"\n        graphics\n        [\n            x    317.24\n            y    851.69\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    44\n        label    \"\"\n        graphics\n        [\n            x    430.85\n            y    905.23\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    45\n        label    \"\"\n        graphics\n        [\n            x    316.92\n            y    780.75\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    46\n        label    \"\"\n        graphics\n        [\n            x    846.86\n            y    73.42\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    47\n        label    \"\"\n        graphics\n        [\n            x    645.59\n            y    253.76\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    48\n        label    \"\"\n        graphics\n        [\n            x    241.54\n            y    829.78\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    49\n        label    \"\"\n        graphics\n        [\n            x    723.71\n            y    1170.91\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    50\n        label    \"\"\n        graphics\n        [\n            x    854.65\n            y    810.17\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    51\n        label    \"\"\n        graphics\n        [\n            x    618.39\n            y    697.15\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    52\n        label    \"\"\n        graphics\n        [\n            x    932.11\n            y    0.35\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    53\n        label    \"\"\n        graphics\n        [\n            x    193.89\n            y    571.97\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    54\n        label    \"\"\n        graphics\n        [\n            x    1131.10\n            y    773.38\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    55\n        label    \"\"\n        graphics\n        [\n            x    613.09\n            y    131.79\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    56\n        label    \"\"\n        graphics\n        [\n            x    767.33\n            y    726.85\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    57\n        label    \"\"\n        graphics\n        [\n            x    433.60\n            y    269.08\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    58\n        label    \"\"\n        graphics\n        [\n            x    302.44\n            y    180.28\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    59\n        label    \"\"\n        graphics\n        [\n            x    1233.18\n            y    345.72\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    60\n        label    \"\"\n        graphics\n        [\n            x    1004.28\n            y    972.76\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    61\n        label    \"\"\n        graphics\n        [\n            x    260.80\n            y    953.08\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    62\n        label    \"\"\n        graphics\n        [\n            x    863.79\n            y    907.90\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    63\n        label    \"\"\n        graphics\n        [\n            x    871.54\n            y    513.72\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    64\n        label    \"\"\n        graphics\n        [\n            x    840.36\n            y    102.05\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    65\n        label    \"\"\n        graphics\n        [\n            x    878.76\n            y    268.81\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    66\n        label    \"\"\n        graphics\n        [\n            x    1171.00\n            y    198.25\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    67\n        label    \"\"\n        graphics\n        [\n            x    992.07\n            y    173.03\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    68\n        label    \"\"\n        graphics\n        [\n            x    939.11\n            y    40.39\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    69\n        label    \"\"\n        graphics\n        [\n            x    528.40\n            y    1067.22\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    70\n        label    \"\"\n        graphics\n        [\n            x    58.05\n            y    690.85\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    71\n        label    \"\"\n        graphics\n        [\n            x    639.27\n            y    695.52\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    72\n        label    \"\"\n        graphics\n        [\n            x    958.76\n            y    270.75\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    73\n        label    \"\"\n        graphics\n        [\n            x    386.75\n            y    403.40\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    74\n        label    \"\"\n        graphics\n        [\n            x    923.79\n            y    371.67\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    75\n        label    \"\"\n        graphics\n        [\n            x    244.74\n            y    133.85\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    76\n        label    \"\"\n        graphics\n        [\n            x    298.77\n            y    1221.82\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    77\n        label    \"\"\n        graphics\n        [\n            x    348.33\n            y    260.71\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    78\n        label    \"\"\n        graphics\n        [\n            x    281.66\n            y    665.11\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    79\n        label    \"\"\n        graphics\n        [\n            x    501.82\n            y    133.36\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    80\n        label    \"\"\n        graphics\n        [\n            x    418.71\n            y    844.40\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    81\n        label    \"\"\n        graphics\n        [\n            x    518.38\n            y    489.43\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    82\n        label    \"\"\n        graphics\n        [\n            x    720.23\n            y    1124.42\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    83\n        label    \"\"\n        graphics\n        [\n            x    5.68\n            y    837.50\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    84\n        label    \"\"\n        graphics\n        [\n            x    261.30\n            y    19.48\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    85\n        label    \"\"\n        graphics\n        [\n            x    464.27\n            y    1134.06\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    86\n        label    \"\"\n        graphics\n        [\n            x    514.38\n            y    763.42\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    87\n        label    \"\"\n        graphics\n        [\n            x    940.16\n            y    1138.43\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    88\n        label    \"\"\n        graphics\n        [\n            x    307.81\n            y    1132.76\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    89\n        label    \"\"\n        graphics\n        [\n            x    393.09\n            y    723.14\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    90\n        label    \"\"\n        graphics\n        [\n            x    947.94\n            y    1137.38\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    91\n        label    \"\"\n        graphics\n        [\n            x    660.60\n            y    410.06\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    92\n        label    \"\"\n        graphics\n        [\n            x    1120.93\n            y    643.16\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    93\n        label    \"\"\n        graphics\n        [\n            x    459.29\n            y    1071.44\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    94\n        label    \"\"\n        graphics\n        [\n            x    613.35\n            y    920.88\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    95\n        label    \"\"\n        graphics\n        [\n            x    67.69\n            y    986.84\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    96\n        label    \"\"\n        graphics\n        [\n            x    83.03\n            y    1145.49\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    97\n        label    \"\"\n        graphics\n        [\n            x    1164.50\n            y    306.26\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    98\n        label    \"\"\n        graphics\n        [\n            x    961.48\n            y    138.62\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    99\n        label    \"\"\n        graphics\n        [\n            x    487.32\n            y    418.06\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    100\n        label    \"\"\n        graphics\n        [\n            x    523.94\n            y    1225.37\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    101\n        label    \"\"\n        graphics\n        [\n            x    1231.67\n            y    730.24\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    102\n        label    \"\"\n        graphics\n        [\n            x    881.48\n            y    1017.95\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    103\n        label    \"\"\n        graphics\n        [\n            x    373.04\n            y    779.15\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    104\n        label    \"\"\n        graphics\n        [\n            x    862.34\n            y    759.40\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    105\n        label    \"\"\n        graphics\n        [\n            x    921.81\n            y    563.86\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    106\n        label    \"\"\n        graphics\n        [\n            x    465.51\n            y    363.27\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    107\n        label    \"\"\n        graphics\n        [\n            x    138.25\n            y    1030.55\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    108\n        label    \"\"\n        graphics\n        [\n            x    653.88\n            y    591.02\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    109\n        label    \"\"\n        graphics\n        [\n            x    481.81\n            y    481.60\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    110\n        label    \"\"\n        graphics\n        [\n            x    535.41\n            y    664.93\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    111\n        label    \"\"\n        graphics\n        [\n            x    646.69\n            y    102.85\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    112\n        label    \"\"\n        graphics\n        [\n            x    990.71\n            y    361.38\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    113\n        label    \"\"\n        graphics\n        [\n            x    426.45\n            y    994.52\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    114\n        label    \"\"\n        graphics\n        [\n            x    939.40\n            y    102.76\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    115\n        label    \"\"\n        graphics\n        [\n            x    723.83\n            y    1209.81\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    116\n        label    \"\"\n        graphics\n        [\n            x    1095.87\n            y    645.68\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    117\n        label    \"\"\n        graphics\n        [\n            x    879.62\n            y    264.85\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    118\n        label    \"\"\n        graphics\n        [\n            x    795.50\n            y    607.38\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    119\n        label    \"\"\n        graphics\n        [\n            x    825.06\n            y    1130.97\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    120\n        label    \"\"\n        graphics\n        [\n            x    106.66\n            y    480.33\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    121\n        label    \"\"\n        graphics\n        [\n            x    1216.15\n            y    89.59\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    122\n        label    \"\"\n        graphics\n        [\n            x    1022.44\n            y    299.53\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    123\n        label    \"\"\n        graphics\n        [\n            x    917.38\n            y    179.08\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    124\n        label    \"\"\n        graphics\n        [\n            x    726.77\n            y    663.10\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    125\n        label    \"\"\n        graphics\n        [\n            x    187.45\n            y    508.85\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    126\n        label    \"\"\n        graphics\n        [\n            x    1213.75\n            y    958.27\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    127\n        label    \"\"\n        graphics\n        [\n            x    499.78\n            y    755.60\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    128\n        label    \"\"\n        graphics\n        [\n            x    690.18\n            y    1041.72\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    129\n        label    \"\"\n        graphics\n        [\n            x    765.42\n            y    263.06\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    130\n        label    \"\"\n        graphics\n        [\n            x    208.06\n            y    549.64\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    131\n        label    \"\"\n        graphics\n        [\n            x    194.12\n            y    192.28\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    132\n        label    \"\"\n        graphics\n        [\n            x    126.48\n            y    1210.95\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    133\n        label    \"\"\n        graphics\n        [\n            x    161.92\n            y    801.04\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    134\n        label    \"\"\n        graphics\n        [\n            x    338.81\n            y    823.14\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    135\n        label    \"\"\n        graphics\n        [\n            x    1062.23\n            y    520.12\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    136\n        label    \"\"\n        graphics\n        [\n            x    891.29\n            y    26.39\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    137\n        label    \"\"\n        graphics\n        [\n            x    466.38\n            y    790.67\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    138\n        label    \"\"\n        graphics\n        [\n            x    813.21\n            y    912.75\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    139\n        label    \"\"\n        graphics\n        [\n            x    843.46\n            y    656.28\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    140\n        label    \"\"\n        graphics\n        [\n            x    518.68\n            y    800.05\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    141\n        label    \"\"\n        graphics\n        [\n            x    174.95\n            y    861.60\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    142\n        label    \"\"\n        graphics\n        [\n            x    625.64\n            y    401.18\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    143\n        label    \"\"\n        graphics\n        [\n            x    986.45\n            y    1224.32\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    144\n        label    \"\"\n        graphics\n        [\n            x    1092.13\n            y    456.12\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    145\n        label    \"\"\n        graphics\n        [\n            x    1013.85\n            y    305.94\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    146\n        label    \"\"\n        graphics\n        [\n            x    1202.61\n            y    92.99\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    147\n        label    \"\"\n        graphics\n        [\n            x    594.16\n            y    1159.79\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    148\n        label    \"\"\n        graphics\n        [\n            x    812.65\n            y    946.01\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    149\n        label    \"\"\n        graphics\n        [\n            x    209.99\n            y    691.88\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    150\n        label    \"\"\n        graphics\n        [\n            x    421.95\n            y    386.72\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    151\n        label    \"\"\n        graphics\n        [\n            x    367.95\n            y    270.53\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    152\n        label    \"\"\n        graphics\n        [\n            x    693.18\n            y    879.07\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    153\n        label    \"\"\n        graphics\n        [\n            x    839.86\n            y    1140.31\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    154\n        label    \"\"\n        graphics\n        [\n            x    1173.00\n            y    579.78\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    155\n        label    \"\"\n        graphics\n        [\n            x    1199.78\n            y    683.85\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    156\n        label    \"\"\n        graphics\n        [\n            x    374.09\n            y    250.83\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    157\n        label    \"\"\n        graphics\n        [\n            x    37.87\n            y    1031.03\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    158\n        label    \"\"\n        graphics\n        [\n            x    702.28\n            y    724.16\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    159\n        label    \"\"\n        graphics\n        [\n            x    516.82\n            y    791.70\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    160\n        label    \"\"\n        graphics\n        [\n            x    1148.91\n            y    387.91\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    161\n        label    \"\"\n        graphics\n        [\n            x    1223.65\n            y    637.15\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    162\n        label    \"\"\n        graphics\n        [\n            x    297.10\n            y    1036.64\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    163\n        label    \"\"\n        graphics\n        [\n            x    1115.83\n            y    481.49\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    164\n        label    \"\"\n        graphics\n        [\n            x    166.78\n            y    667.44\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    165\n        label    \"\"\n        graphics\n        [\n            x    178.56\n            y    726.95\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    166\n        label    \"\"\n        graphics\n        [\n            x    1159.63\n            y    171.11\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    167\n        label    \"\"\n        graphics\n        [\n            x    380.19\n            y    1169.33\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    168\n        label    \"\"\n        graphics\n        [\n            x    586.79\n            y    126.68\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    169\n        label    \"\"\n        graphics\n        [\n            x    1193.19\n            y    442.79\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    170\n        label    \"\"\n        graphics\n        [\n            x    968.49\n            y    468.06\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    171\n        label    \"\"\n        graphics\n        [\n            x    143.51\n            y    1078.98\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    172\n        label    \"\"\n        graphics\n        [\n            x    1143.38\n            y    175.71\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    173\n        label    \"\"\n        graphics\n        [\n            x    283.20\n            y    705.36\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    174\n        label    \"\"\n        graphics\n        [\n            x    597.36\n            y    932.00\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    175\n        label    \"\"\n        graphics\n        [\n            x    433.28\n            y    134.53\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    176\n        label    \"\"\n        graphics\n        [\n            x    1010.59\n            y    1203.67\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    177\n        label    \"\"\n        graphics\n        [\n            x    1192.45\n            y    714.40\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    178\n        label    \"\"\n        graphics\n        [\n            x    506.45\n            y    174.59\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    179\n        label    \"\"\n        graphics\n        [\n            x    372.60\n            y    1126.70\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    180\n        label    \"\"\n        graphics\n        [\n            x    298.00\n            y    1152.24\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    181\n        label    \"\"\n        graphics\n        [\n            x    308.44\n            y    1240.20\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    182\n        label    \"\"\n        graphics\n        [\n            x    147.44\n            y    1053.65\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    183\n        label    \"\"\n        graphics\n        [\n            x    1237.40\n            y    903.89\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    184\n        label    \"\"\n        graphics\n        [\n            x    192.30\n            y    1176.45\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    185\n        label    \"\"\n        graphics\n        [\n            x    350.81\n            y    897.18\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    186\n        label    \"\"\n        graphics\n        [\n            x    1087.49\n            y    390.20\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    187\n        label    \"\"\n        graphics\n        [\n            x    426.33\n            y    269.90\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    188\n        label    \"\"\n        graphics\n        [\n            x    239.37\n            y    471.43\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    189\n        label    \"\"\n        graphics\n        [\n            x    334.64\n            y    1034.86\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    edge\n    [\n        source    1\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    10\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    100\n        target    34\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    101\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    102\n        target    32\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    103\n        target    45\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    104\n        target    102\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    105\n        target    90\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    106\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    107\n        target    31\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    108\n        target    101\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    109\n        target    56\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    11\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    110\n        target    40\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    111\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    112\n        target    44\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    113\n        target    49\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    114\n        target    68\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    115\n        target    64\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    116\n        target    109\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    117\n        target    60\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    118\n        target    113\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    119\n        target    59\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    12\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    120\n        target    114\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    121\n        target    20\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    122\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    123\n        target    30\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    124\n        target    19\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    125\n        target    124\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    126\n        target    106\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    127\n        target    40\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    128\n        target    74\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    129\n        target    124\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    13\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    130\n        target    20\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    131\n        target    56\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    132\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    133\n        target    119\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    134\n        target    64\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    135\n        target    79\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    136\n        target    116\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    137\n        target    28\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    138\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    139\n        target    76\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    14\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    140\n        target    99\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    141\n        target    72\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    142\n        target    42\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    143\n        target    92\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    144\n        target    97\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    145\n        target    83\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    146\n        target    134\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    147\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    148\n        target    50\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    149\n        target    96\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    15\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    150\n        target    104\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    151\n        target    147\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    152\n        target    59\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    153\n        target    52\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    154\n        target    59\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    155\n        target    36\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    156\n        target    113\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    157\n        target    115\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    158\n        target    82\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    159\n        target    128\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    16\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    160\n        target    32\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    161\n        target    157\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    162\n        target    123\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    163\n        target    76\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    164\n        target    147\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    165\n        target    100\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    166\n        target    115\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    167\n        target    72\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    168\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    169\n        target    132\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    17\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    170\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    171\n        target    46\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    172\n        target    20\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    173\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    174\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    175\n        target    122\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    176\n        target    109\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    176\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    177\n        target    173\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    178\n        target    175\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    179\n        target    131\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    18\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    180\n        target    147\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    181\n        target    121\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    182\n        target    127\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    183\n        target    110\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    184\n        target    38\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    185\n        target    155\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    186\n        target    164\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    187\n        target    75\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    188\n        target    102\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    189\n        target    31\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    19\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    2\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    20\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    21\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    22\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    23\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    24\n        target    19\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    25\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    26\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    27\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    28\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    29\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    3\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    30\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    31\n        target    27\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    32\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    33\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    34\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    35\n        target    25\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    36\n        target    34\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    37\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    38\n        target    32\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    39\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    4\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    40\n        target    35\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    41\n        target    29\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    42\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    43\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    44\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    45\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    46\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    47\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    48\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    49\n        target    26\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    5\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    50\n        target    47\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    51\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    52\n        target    37\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    53\n        target    41\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    54\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    55\n        target    40\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    56\n        target    52\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    57\n        target    55\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    58\n        target    52\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    59\n        target    44\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    6\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    60\n        target    51\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    61\n        target    44\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    62\n        target    43\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    63\n        target    51\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    64\n        target    63\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    65\n        target    40\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    66\n        target    61\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    67\n        target    59\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    68\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    69\n        target    39\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    7\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    70\n        target    45\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    71\n        target    56\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    72\n        target    56\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    73\n        target    29\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    74\n        target    46\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    75\n        target    36\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    76\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    77\n        target    49\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    78\n        target    31\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    79\n        target    46\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    8\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    80\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    81\n        target    27\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    82\n        target    79\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    83\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    84\n        target    33\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    85\n        target    48\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    86\n        target    52\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    87\n        target    75\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    88\n        target    47\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    89\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    9\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    90\n        target    64\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    91\n        target    87\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    92\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    93\n        target    84\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    94\n        target    68\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    95\n        target    63\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    96\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    97\n        target    46\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    98\n        target    40\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    99\n        target    93\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n]\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v190e190.tglf",
    "content": "0 717.000 122.000 30.000 30.000\n1 914.000 564.000 30.000 30.000\n2 1.000 335.000 30.000 30.000\n3 913.000 131.000 30.000 30.000\n4 885.000 819.000 30.000 30.000\n5 463.000 1230.000 30.000 30.000\n6 931.000 972.000 30.000 30.000\n7 938.000 973.000 30.000 30.000\n8 562.000 822.000 30.000 30.000\n9 539.000 823.000 30.000 30.000\n10 1113.000 381.000 30.000 30.000\n11 196.000 147.000 30.000 30.000\n12 709.000 632.000 30.000 30.000\n13 834.000 441.000 30.000 30.000\n14 19.000 1085.000 30.000 30.000\n15 819.000 452.000 30.000 30.000\n16 37.000 250.000 30.000 30.000\n17 890.000 90.000 30.000 30.000\n18 272.000 477.000 30.000 30.000\n19 63.000 1150.000 30.000 30.000\n20 29.000 155.000 30.000 30.000\n21 198.000 163.000 30.000 30.000\n22 984.000 904.000 30.000 30.000\n23 784.000 308.000 30.000 30.000\n24 259.000 638.000 30.000 30.000\n25 784.000 1188.000 30.000 30.000\n26 1137.000 850.000 30.000 30.000\n27 855.000 681.000 30.000 30.000\n28 1045.000 518.000 30.000 30.000\n29 759.000 994.000 30.000 30.000\n30 28.000 974.000 30.000 30.000\n31 866.000 671.000 30.000 30.000\n32 567.000 986.000 30.000 30.000\n33 970.000 939.000 30.000 30.000\n34 1128.000 668.000 30.000 30.000\n35 22.000 346.000 30.000 30.000\n36 1094.000 163.000 30.000 30.000\n37 758.000 199.000 30.000 30.000\n38 1058.000 753.000 30.000 30.000\n39 719.000 241.000 30.000 30.000\n40 830.000 460.000 30.000 30.000\n41 725.000 417.000 30.000 30.000\n42 332.000 899.000 30.000 30.000\n43 317.000 851.000 30.000 30.000\n44 430.000 905.000 30.000 30.000\n45 316.000 780.000 30.000 30.000\n46 846.000 73.000 30.000 30.000\n47 645.000 253.000 30.000 30.000\n48 241.000 829.000 30.000 30.000\n49 723.000 1170.000 30.000 30.000\n50 854.000 810.000 30.000 30.000\n51 618.000 697.000 30.000 30.000\n52 932.000 0.000 30.000 30.000\n53 193.000 571.000 30.000 30.000\n54 1131.000 773.000 30.000 30.000\n55 613.000 131.000 30.000 30.000\n56 767.000 726.000 30.000 30.000\n57 433.000 269.000 30.000 30.000\n58 302.000 180.000 30.000 30.000\n59 1233.000 345.000 30.000 30.000\n60 1004.000 972.000 30.000 30.000\n61 260.000 953.000 30.000 30.000\n62 863.000 907.000 30.000 30.000\n63 871.000 513.000 30.000 30.000\n64 840.000 102.000 30.000 30.000\n65 878.000 268.000 30.000 30.000\n66 1171.000 198.000 30.000 30.000\n67 992.000 173.000 30.000 30.000\n68 939.000 40.000 30.000 30.000\n69 528.000 1067.000 30.000 30.000\n70 58.000 690.000 30.000 30.000\n71 639.000 695.000 30.000 30.000\n72 958.000 270.000 30.000 30.000\n73 386.000 403.000 30.000 30.000\n74 923.000 371.000 30.000 30.000\n75 244.000 133.000 30.000 30.000\n76 298.000 1221.000 30.000 30.000\n77 348.000 260.000 30.000 30.000\n78 281.000 665.000 30.000 30.000\n79 501.000 133.000 30.000 30.000\n80 418.000 844.000 30.000 30.000\n81 518.000 489.000 30.000 30.000\n82 720.000 1124.000 30.000 30.000\n83 5.000 837.000 30.000 30.000\n84 261.000 19.000 30.000 30.000\n85 464.000 1134.000 30.000 30.000\n86 514.000 763.000 30.000 30.000\n87 940.000 1138.000 30.000 30.000\n88 307.000 1132.000 30.000 30.000\n89 393.000 723.000 30.000 30.000\n90 947.000 1137.000 30.000 30.000\n91 660.000 410.000 30.000 30.000\n92 1120.000 643.000 30.000 30.000\n93 459.000 1071.000 30.000 30.000\n94 613.000 920.000 30.000 30.000\n95 67.000 986.000 30.000 30.000\n96 83.000 1145.000 30.000 30.000\n97 1164.000 306.000 30.000 30.000\n98 961.000 138.000 30.000 30.000\n99 487.000 418.000 30.000 30.000\n100 523.000 1225.000 30.000 30.000\n101 1231.000 730.000 30.000 30.000\n102 881.000 1017.000 30.000 30.000\n103 373.000 779.000 30.000 30.000\n104 862.000 759.000 30.000 30.000\n105 921.000 563.000 30.000 30.000\n106 465.000 363.000 30.000 30.000\n107 138.000 1030.000 30.000 30.000\n108 653.000 591.000 30.000 30.000\n109 481.000 481.000 30.000 30.000\n110 535.000 664.000 30.000 30.000\n111 646.000 102.000 30.000 30.000\n112 990.000 361.000 30.000 30.000\n113 426.000 994.000 30.000 30.000\n114 939.000 102.000 30.000 30.000\n115 723.000 1209.000 30.000 30.000\n116 1095.000 645.000 30.000 30.000\n117 879.000 264.000 30.000 30.000\n118 795.000 607.000 30.000 30.000\n119 825.000 1130.000 30.000 30.000\n120 106.000 480.000 30.000 30.000\n121 1216.000 89.000 30.000 30.000\n122 1022.000 299.000 30.000 30.000\n123 917.000 179.000 30.000 30.000\n124 726.000 663.000 30.000 30.000\n125 187.000 508.000 30.000 30.000\n126 1213.000 958.000 30.000 30.000\n127 499.000 755.000 30.000 30.000\n128 690.000 1041.000 30.000 30.000\n129 765.000 263.000 30.000 30.000\n130 208.000 549.000 30.000 30.000\n131 194.000 192.000 30.000 30.000\n132 126.000 1210.000 30.000 30.000\n133 161.000 801.000 30.000 30.000\n134 338.000 823.000 30.000 30.000\n135 1062.000 520.000 30.000 30.000\n136 891.000 26.000 30.000 30.000\n137 466.000 790.000 30.000 30.000\n138 813.000 912.000 30.000 30.000\n139 843.000 656.000 30.000 30.000\n140 518.000 800.000 30.000 30.000\n141 174.000 861.000 30.000 30.000\n142 625.000 401.000 30.000 30.000\n143 986.000 1224.000 30.000 30.000\n144 1092.000 456.000 30.000 30.000\n145 1013.000 305.000 30.000 30.000\n146 1202.000 92.000 30.000 30.000\n147 594.000 1159.000 30.000 30.000\n148 812.000 946.000 30.000 30.000\n149 209.000 691.000 30.000 30.000\n150 421.000 386.000 30.000 30.000\n151 367.000 270.000 30.000 30.000\n152 693.000 879.000 30.000 30.000\n153 839.000 1140.000 30.000 30.000\n154 1173.000 579.000 30.000 30.000\n155 1199.000 683.000 30.000 30.000\n156 374.000 250.000 30.000 30.000\n157 37.000 1031.000 30.000 30.000\n158 702.000 724.000 30.000 30.000\n159 516.000 791.000 30.000 30.000\n160 1148.000 387.000 30.000 30.000\n161 1223.000 637.000 30.000 30.000\n162 297.000 1036.000 30.000 30.000\n163 1115.000 481.000 30.000 30.000\n164 166.000 667.000 30.000 30.000\n165 178.000 726.000 30.000 30.000\n166 1159.000 171.000 30.000 30.000\n167 380.000 1169.000 30.000 30.000\n168 586.000 126.000 30.000 30.000\n169 1193.000 442.000 30.000 30.000\n170 968.000 468.000 30.000 30.000\n171 143.000 1078.000 30.000 30.000\n172 1143.000 175.000 30.000 30.000\n173 283.000 705.000 30.000 30.000\n174 597.000 932.000 30.000 30.000\n175 433.000 134.000 30.000 30.000\n176 1010.000 1203.000 30.000 30.000\n177 1192.000 714.000 30.000 30.000\n178 506.000 174.000 30.000 30.000\n179 372.000 1126.000 30.000 30.000\n180 298.000 1152.000 30.000 30.000\n181 308.000 1240.000 30.000 30.000\n182 147.000 1053.000 30.000 30.000\n183 1237.000 903.000 30.000 30.000\n184 192.000 1176.000 30.000 30.000\n185 350.000 897.000 30.000 30.000\n186 1087.000 390.000 30.000 30.000\n187 426.000 269.000 30.000 30.000\n188 239.000 471.000 30.000 30.000\n189 334.000 1034.000 30.000 30.000\n#\n109 56\n34 1\n152 59\n159 128\n176 6\n35 25\n86 52\n31 27\n17 1\n29 11\n39 22\n129 124\n135 79\n172 20\n155 36\n116 109\n52 37\n93 84\n165 100\n140 99\n82 79\n60 51\n26 14\n73 29\n48 13\n139 76\n187 75\n122 12\n78 31\n88 47\n188 102\n181 121\n131 56\n118 113\n10 1\n145 83\n74 46\n95 63\n121 20\n2 1\n160 32\n38 32\n94 68\n81 27\n108 101\n22 16\n85 48\n21 8\n25 1\n13 5\n64 63\n36 34\n46 23\n176 109\n178 175\n83 21\n75 36\n156 113\n171 46\n51 5\n115 64\n100 34\n148 50\n182 127\n28 9\n151 147\n27 23\n164 147\n110 40\n104 102\n11 1\n125 124\n18 3\n4 0\n168 13\n62 43\n177 173\n67 59\n185 155\n59 44\n137 28\n127 40\n186 164\n169 132\n9 6\n6 5\n68 22\n57 55\n173 13\n102 32\n117 60\n111 15\n47 10\n179 131\n157 115\n114 68\n142 42\n134 64\n174 1\n72 56\n107 31\n124 19\n119 59\n158 82\n162 123\n149 96\n43 11\n3 2\n32 15\n132 13\n175 122\n15 8\n170 4\n189 31\n87 75\n154 59\n49 26\n184 38\n65 40\n99 93\n71 56\n23 4\n183 110\n55 40\n69 39\n19 11\n126 106\n105 90\n37 14\n84 33\n58 52\n153 52\n97 46\n61 44\n166 115\n92 4\n56 52\n144 97\n91 87\n16 1\n44 1\n123 30\n12 5\n120 114\n133 119\n76 21\n143 92\n50 47\n147 4\n40 35\n112 44\n136 116\n14 1\n101 18\n150 104\n33 17\n66 61\n45 13\n161 157\n63 51\n103 45\n98 40\n138 0\n89 12\n167 72\n80 8\n113 49\n20 6\n79 46\n8 7\n41 29\n7 2\n53 41\n77 49\n24 19\n90 64\n106 15\n42 15\n130 20\n141 72\n54 7\n163 76\n96 10\n70 45\n128 74\n5 3\n146 134\n30 22\n180 147\n1 0\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v190e209.gml",
    "content": "graph\n[\n    node\n    [\n        id    0\n        label    \"\"\n        graphics\n        [\n            x    241.45\n            y    234.40\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    1\n        label    \"\"\n        graphics\n        [\n            x    731.17\n            y    982.58\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    2\n        label    \"\"\n        graphics\n        [\n            x    331.48\n            y    254.84\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    3\n        label    \"\"\n        graphics\n        [\n            x    189.74\n            y    336.15\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    4\n        label    \"\"\n        graphics\n        [\n            x    763.00\n            y    44.16\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    5\n        label    \"\"\n        graphics\n        [\n            x    394.60\n            y    377.06\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    6\n        label    \"\"\n        graphics\n        [\n            x    169.25\n            y    1162.49\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    7\n        label    \"\"\n        graphics\n        [\n            x    390.62\n            y    240.57\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    8\n        label    \"\"\n        graphics\n        [\n            x    338.73\n            y    465.36\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    9\n        label    \"\"\n        graphics\n        [\n            x    1015.60\n            y    960.60\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    10\n        label    \"\"\n        graphics\n        [\n            x    735.26\n            y    266.05\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    11\n        label    \"\"\n        graphics\n        [\n            x    183.67\n            y    954.76\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    12\n        label    \"\"\n        graphics\n        [\n            x    1165.36\n            y    525.85\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    13\n        label    \"\"\n        graphics\n        [\n            x    373.15\n            y    257.61\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    14\n        label    \"\"\n        graphics\n        [\n            x    652.63\n            y    601.04\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    15\n        label    \"\"\n        graphics\n        [\n            x    782.79\n            y    132.88\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    16\n        label    \"\"\n        graphics\n        [\n            x    1069.05\n            y    1236.04\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    17\n        label    \"\"\n        graphics\n        [\n            x    414.66\n            y    1222.73\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    18\n        label    \"\"\n        graphics\n        [\n            x    1035.24\n            y    557.72\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    19\n        label    \"\"\n        graphics\n        [\n            x    428.04\n            y    779.07\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    20\n        label    \"\"\n        graphics\n        [\n            x    840.66\n            y    284.07\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    21\n        label    \"\"\n        graphics\n        [\n            x    634.52\n            y    244.59\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    22\n        label    \"\"\n        graphics\n        [\n            x    795.87\n            y    1045.66\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    23\n        label    \"\"\n        graphics\n        [\n            x    1190.31\n            y    745.64\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    24\n        label    \"\"\n        graphics\n        [\n            x    1186.14\n            y    270.57\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    25\n        label    \"\"\n        graphics\n        [\n            x    210.15\n            y    120.04\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    26\n        label    \"\"\n        graphics\n        [\n            x    95.41\n            y    433.79\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    27\n        label    \"\"\n        graphics\n        [\n            x    515.35\n            y    1032.31\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    28\n        label    \"\"\n        graphics\n        [\n            x    1042.65\n            y    181.87\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    29\n        label    \"\"\n        graphics\n        [\n            x    412.72\n            y    1135.97\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    30\n        label    \"\"\n        graphics\n        [\n            x    409.15\n            y    317.59\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    31\n        label    \"\"\n        graphics\n        [\n            x    912.54\n            y    973.87\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    32\n        label    \"\"\n        graphics\n        [\n            x    594.85\n            y    698.24\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    33\n        label    \"\"\n        graphics\n        [\n            x    1037.75\n            y    536.52\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    34\n        label    \"\"\n        graphics\n        [\n            x    741.04\n            y    388.32\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    35\n        label    \"\"\n        graphics\n        [\n            x    237.49\n            y    811.65\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    36\n        label    \"\"\n        graphics\n        [\n            x    228.18\n            y    48.02\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    37\n        label    \"\"\n        graphics\n        [\n            x    905.59\n            y    176.76\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    38\n        label    \"\"\n        graphics\n        [\n            x    396.14\n            y    773.53\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    39\n        label    \"\"\n        graphics\n        [\n            x    134.22\n            y    608.34\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    40\n        label    \"\"\n        graphics\n        [\n            x    93.13\n            y    156.11\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    41\n        label    \"\"\n        graphics\n        [\n            x    886.20\n            y    428.97\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    42\n        label    \"\"\n        graphics\n        [\n            x    735.18\n            y    682.66\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    43\n        label    \"\"\n        graphics\n        [\n            x    417.05\n            y    385.22\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    44\n        label    \"\"\n        graphics\n        [\n            x    49.16\n            y    1048.91\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    45\n        label    \"\"\n        graphics\n        [\n            x    719.71\n            y    583.60\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    46\n        label    \"\"\n        graphics\n        [\n            x    73.52\n            y    257.87\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    47\n        label    \"\"\n        graphics\n        [\n            x    678.09\n            y    645.13\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    48\n        label    \"\"\n        graphics\n        [\n            x    1166.13\n            y    1092.97\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    49\n        label    \"\"\n        graphics\n        [\n            x    564.94\n            y    368.08\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    50\n        label    \"\"\n        graphics\n        [\n            x    785.06\n            y    115.23\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    51\n        label    \"\"\n        graphics\n        [\n            x    487.29\n            y    844.29\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    52\n        label    \"\"\n        graphics\n        [\n            x    116.54\n            y    286.76\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    53\n        label    \"\"\n        graphics\n        [\n            x    1015.83\n            y    76.86\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    54\n        label    \"\"\n        graphics\n        [\n            x    1197.36\n            y    690.10\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    55\n        label    \"\"\n        graphics\n        [\n            x    866.95\n            y    528.86\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    56\n        label    \"\"\n        graphics\n        [\n            x    192.43\n            y    100.51\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    57\n        label    \"\"\n        graphics\n        [\n            x    132.25\n            y    30.48\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    58\n        label    \"\"\n        graphics\n        [\n            x    1008.51\n            y    417.44\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    59\n        label    \"\"\n        graphics\n        [\n            x    385.29\n            y    1133.82\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    60\n        label    \"\"\n        graphics\n        [\n            x    890.45\n            y    428.77\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    61\n        label    \"\"\n        graphics\n        [\n            x    1147.05\n            y    876.89\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    62\n        label    \"\"\n        graphics\n        [\n            x    247.39\n            y    722.41\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    63\n        label    \"\"\n        graphics\n        [\n            x    62.12\n            y    625.12\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    64\n        label    \"\"\n        graphics\n        [\n            x    791.50\n            y    1061.76\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    65\n        label    \"\"\n        graphics\n        [\n            x    584.01\n            y    350.13\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    66\n        label    \"\"\n        graphics\n        [\n            x    685.78\n            y    1058.86\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    67\n        label    \"\"\n        graphics\n        [\n            x    395.07\n            y    832.07\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    68\n        label    \"\"\n        graphics\n        [\n            x    36.39\n            y    888.12\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    69\n        label    \"\"\n        graphics\n        [\n            x    11.13\n            y    1126.14\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    70\n        label    \"\"\n        graphics\n        [\n            x    88.61\n            y    441.30\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    71\n        label    \"\"\n        graphics\n        [\n            x    610.75\n            y    664.45\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    72\n        label    \"\"\n        graphics\n        [\n            x    453.70\n            y    871.32\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    73\n        label    \"\"\n        graphics\n        [\n            x    57.50\n            y    364.07\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    74\n        label    \"\"\n        graphics\n        [\n            x    274.59\n            y    57.29\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    75\n        label    \"\"\n        graphics\n        [\n            x    926.36\n            y    294.08\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    76\n        label    \"\"\n        graphics\n        [\n            x    780.77\n            y    1130.42\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    77\n        label    \"\"\n        graphics\n        [\n            x    782.72\n            y    449.18\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    78\n        label    \"\"\n        graphics\n        [\n            x    456.87\n            y    999.13\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    79\n        label    \"\"\n        graphics\n        [\n            x    754.42\n            y    482.88\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    80\n        label    \"\"\n        graphics\n        [\n            x    58.31\n            y    675.73\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    81\n        label    \"\"\n        graphics\n        [\n            x    720.68\n            y    928.84\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    82\n        label    \"\"\n        graphics\n        [\n            x    942.88\n            y    621.13\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    83\n        label    \"\"\n        graphics\n        [\n            x    1213.31\n            y    1230.51\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    84\n        label    \"\"\n        graphics\n        [\n            x    1191.35\n            y    913.34\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    85\n        label    \"\"\n        graphics\n        [\n            x    1215.36\n            y    789.45\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    86\n        label    \"\"\n        graphics\n        [\n            x    208.74\n            y    700.85\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    87\n        label    \"\"\n        graphics\n        [\n            x    698.38\n            y    875.62\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    88\n        label    \"\"\n        graphics\n        [\n            x    438.60\n            y    563.60\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    89\n        label    \"\"\n        graphics\n        [\n            x    921.98\n            y    293.59\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    90\n        label    \"\"\n        graphics\n        [\n            x    1236.78\n            y    456.51\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    91\n        label    \"\"\n        graphics\n        [\n            x    454.34\n            y    484.95\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    92\n        label    \"\"\n        graphics\n        [\n            x    113.85\n            y    866.77\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    93\n        label    \"\"\n        graphics\n        [\n            x    159.63\n            y    511.46\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    94\n        label    \"\"\n        graphics\n        [\n            x    262.91\n            y    452.67\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    95\n        label    \"\"\n        graphics\n        [\n            x    454.38\n            y    876.08\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    96\n        label    \"\"\n        graphics\n        [\n            x    667.06\n            y    1234.62\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    97\n        label    \"\"\n        graphics\n        [\n            x    1101.29\n            y    6.64\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    98\n        label    \"\"\n        graphics\n        [\n            x    565.09\n            y    525.88\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    99\n        label    \"\"\n        graphics\n        [\n            x    637.98\n            y    13.99\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    100\n        label    \"\"\n        graphics\n        [\n            x    359.17\n            y    440.81\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    101\n        label    \"\"\n        graphics\n        [\n            x    221.20\n            y    1197.14\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    102\n        label    \"\"\n        graphics\n        [\n            x    23.05\n            y    372.19\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    103\n        label    \"\"\n        graphics\n        [\n            x    908.11\n            y    680.85\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    104\n        label    \"\"\n        graphics\n        [\n            x    960.66\n            y    1117.68\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    105\n        label    \"\"\n        graphics\n        [\n            x    1156.04\n            y    519.57\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    106\n        label    \"\"\n        graphics\n        [\n            x    1099.76\n            y    83.89\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    107\n        label    \"\"\n        graphics\n        [\n            x    758.60\n            y    1058.01\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    108\n        label    \"\"\n        graphics\n        [\n            x    1088.21\n            y    881.81\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    109\n        label    \"\"\n        graphics\n        [\n            x    903.86\n            y    388.40\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    110\n        label    \"\"\n        graphics\n        [\n            x    116.91\n            y    740.05\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    111\n        label    \"\"\n        graphics\n        [\n            x    353.89\n            y    211.00\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    112\n        label    \"\"\n        graphics\n        [\n            x    927.95\n            y    378.42\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    113\n        label    \"\"\n        graphics\n        [\n            x    691.87\n            y    209.04\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    114\n        label    \"\"\n        graphics\n        [\n            x    690.39\n            y    721.91\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    115\n        label    \"\"\n        graphics\n        [\n            x    935.49\n            y    219.73\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    116\n        label    \"\"\n        graphics\n        [\n            x    409.27\n            y    76.80\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    117\n        label    \"\"\n        graphics\n        [\n            x    830.86\n            y    245.12\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    118\n        label    \"\"\n        graphics\n        [\n            x    1030.62\n            y    435.96\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    119\n        label    \"\"\n        graphics\n        [\n            x    407.82\n            y    680.58\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    120\n        label    \"\"\n        graphics\n        [\n            x    1093.49\n            y    617.79\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    121\n        label    \"\"\n        graphics\n        [\n            x    960.39\n            y    574.31\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    122\n        label    \"\"\n        graphics\n        [\n            x    945.10\n            y    441.58\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    123\n        label    \"\"\n        graphics\n        [\n            x    9.88\n            y    676.79\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    124\n        label    \"\"\n        graphics\n        [\n            x    495.00\n            y    599.11\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    125\n        label    \"\"\n        graphics\n        [\n            x    461.92\n            y    982.47\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    126\n        label    \"\"\n        graphics\n        [\n            x    577.38\n            y    707.45\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    127\n        label    \"\"\n        graphics\n        [\n            x    773.68\n            y    384.03\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    128\n        label    \"\"\n        graphics\n        [\n            x    1018.15\n            y    914.07\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    129\n        label    \"\"\n        graphics\n        [\n            x    589.52\n            y    651.56\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    130\n        label    \"\"\n        graphics\n        [\n            x    906.81\n            y    379.67\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    131\n        label    \"\"\n        graphics\n        [\n            x    1030.89\n            y    551.83\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    132\n        label    \"\"\n        graphics\n        [\n            x    102.91\n            y    1101.75\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    133\n        label    \"\"\n        graphics\n        [\n            x    723.53\n            y    94.77\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    134\n        label    \"\"\n        graphics\n        [\n            x    110.50\n            y    724.52\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    135\n        label    \"\"\n        graphics\n        [\n            x    187.49\n            y    913.03\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    136\n        label    \"\"\n        graphics\n        [\n            x    527.86\n            y    48.54\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    137\n        label    \"\"\n        graphics\n        [\n            x    60.56\n            y    67.18\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    138\n        label    \"\"\n        graphics\n        [\n            x    976.99\n            y    84.64\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    139\n        label    \"\"\n        graphics\n        [\n            x    111.89\n            y    574.91\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    140\n        label    \"\"\n        graphics\n        [\n            x    605.63\n            y    491.34\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    141\n        label    \"\"\n        graphics\n        [\n            x    457.51\n            y    209.34\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    142\n        label    \"\"\n        graphics\n        [\n            x    722.00\n            y    54.60\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    143\n        label    \"\"\n        graphics\n        [\n            x    871.82\n            y    353.02\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    144\n        label    \"\"\n        graphics\n        [\n            x    431.49\n            y    349.35\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    145\n        label    \"\"\n        graphics\n        [\n            x    529.70\n            y    919.32\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    146\n        label    \"\"\n        graphics\n        [\n            x    736.83\n            y    382.85\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    147\n        label    \"\"\n        graphics\n        [\n            x    1225.55\n            y    190.22\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    148\n        label    \"\"\n        graphics\n        [\n            x    591.32\n            y    1217.83\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    149\n        label    \"\"\n        graphics\n        [\n            x    350.99\n            y    561.08\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    150\n        label    \"\"\n        graphics\n        [\n            x    152.62\n            y    351.42\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    151\n        label    \"\"\n        graphics\n        [\n            x    372.23\n            y    54.17\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    152\n        label    \"\"\n        graphics\n        [\n            x    0.72\n            y    240.35\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    153\n        label    \"\"\n        graphics\n        [\n            x    703.11\n            y    175.70\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    154\n        label    \"\"\n        graphics\n        [\n            x    906.82\n            y    492.37\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    155\n        label    \"\"\n        graphics\n        [\n            x    661.60\n            y    1044.92\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    156\n        label    \"\"\n        graphics\n        [\n            x    67.62\n            y    557.42\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    157\n        label    \"\"\n        graphics\n        [\n            x    761.98\n            y    725.35\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    158\n        label    \"\"\n        graphics\n        [\n            x    140.79\n            y    662.48\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    159\n        label    \"\"\n        graphics\n        [\n            x    1042.75\n            y    354.49\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    160\n        label    \"\"\n        graphics\n        [\n            x    376.44\n            y    634.59\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    161\n        label    \"\"\n        graphics\n        [\n            x    613.65\n            y    747.65\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    162\n        label    \"\"\n        graphics\n        [\n            x    786.36\n            y    372.69\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    163\n        label    \"\"\n        graphics\n        [\n            x    753.34\n            y    393.41\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    164\n        label    \"\"\n        graphics\n        [\n            x    1159.68\n            y    857.92\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    165\n        label    \"\"\n        graphics\n        [\n            x    557.60\n            y    176.71\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    166\n        label    \"\"\n        graphics\n        [\n            x    482.41\n            y    281.93\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    167\n        label    \"\"\n        graphics\n        [\n            x    1016.25\n            y    270.93\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    168\n        label    \"\"\n        graphics\n        [\n            x    1176.07\n            y    1073.72\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    169\n        label    \"\"\n        graphics\n        [\n            x    830.25\n            y    1152.68\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    170\n        label    \"\"\n        graphics\n        [\n            x    331.51\n            y    663.41\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    171\n        label    \"\"\n        graphics\n        [\n            x    124.81\n            y    1091.09\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    172\n        label    \"\"\n        graphics\n        [\n            x    132.79\n            y    621.19\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    173\n        label    \"\"\n        graphics\n        [\n            x    916.85\n            y    987.74\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    174\n        label    \"\"\n        graphics\n        [\n            x    1091.65\n            y    345.83\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    175\n        label    \"\"\n        graphics\n        [\n            x    144.55\n            y    909.36\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    176\n        label    \"\"\n        graphics\n        [\n            x    412.82\n            y    116.02\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    177\n        label    \"\"\n        graphics\n        [\n            x    596.08\n            y    993.64\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    178\n        label    \"\"\n        graphics\n        [\n            x    868.69\n            y    348.12\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    179\n        label    \"\"\n        graphics\n        [\n            x    272.46\n            y    535.90\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    180\n        label    \"\"\n        graphics\n        [\n            x    45.79\n            y    836.04\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    181\n        label    \"\"\n        graphics\n        [\n            x    392.56\n            y    79.39\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    182\n        label    \"\"\n        graphics\n        [\n            x    1012.39\n            y    411.22\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    183\n        label    \"\"\n        graphics\n        [\n            x    322.77\n            y    976.52\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    184\n        label    \"\"\n        graphics\n        [\n            x    65.72\n            y    228.72\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    185\n        label    \"\"\n        graphics\n        [\n            x    949.09\n            y    1166.37\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    186\n        label    \"\"\n        graphics\n        [\n            x    339.84\n            y    859.97\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    187\n        label    \"\"\n        graphics\n        [\n            x    909.55\n            y    864.07\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    188\n        label    \"\"\n        graphics\n        [\n            x    719.50\n            y    369.05\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    189\n        label    \"\"\n        graphics\n        [\n            x    248.47\n            y    636.97\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    edge\n    [\n        source    0\n        target    109\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    1\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    10\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    100\n        target    33\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    101\n        target    74\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    102\n        target    20\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    103\n        target    85\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    104\n        target    82\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    105\n        target    88\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    106\n        target    41\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    107\n        target    80\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    108\n        target    33\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    109\n        target    99\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    11\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    110\n        target    87\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    111\n        target    87\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    112\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    112\n        target    95\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    113\n        target    66\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    114\n        target    90\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    115\n        target    32\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    116\n        target    66\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    117\n        target    106\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    118\n        target    56\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    119\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    12\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    120\n        target    80\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    121\n        target    60\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    122\n        target    57\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    123\n        target    95\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    124\n        target    114\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    125\n        target    111\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    126\n        target    49\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    127\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    128\n        target    30\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    129\n        target    67\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    13\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    130\n        target    101\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    131\n        target    38\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    132\n        target    59\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    133\n        target    39\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    134\n        target    43\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    135\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    136\n        target    139\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    136\n        target    68\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    137\n        target    83\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    138\n        target    118\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    139\n        target    172\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    139\n        target    84\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    14\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    140\n        target    51\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    141\n        target    101\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    142\n        target    141\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    143\n        target    24\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    144\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    145\n        target    59\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    146\n        target    167\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    146\n        target    33\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    147\n        target    119\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    148\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    149\n        target    143\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    15\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    150\n        target    60\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    151\n        target    28\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    152\n        target    103\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    153\n        target    151\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    154\n        target    70\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    155\n        target    94\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    156\n        target    142\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    157\n        target    77\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    158\n        target    124\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    159\n        target    130\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    16\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    160\n        target    118\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    161\n        target    126\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    162\n        target    88\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    163\n        target    38\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    164\n        target    78\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    165\n        target    60\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    166\n        target    129\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    167\n        target    88\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    168\n        target    119\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    169\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    17\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    17\n        target    90\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    170\n        target    107\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    171\n        target    131\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    172\n        target    25\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    173\n        target    87\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    174\n        target    165\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    175\n        target    86\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    176\n        target    135\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    177\n        target    115\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    178\n        target    104\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    179\n        target    156\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    18\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    180\n        target    149\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    181\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    182\n        target    130\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    183\n        target    49\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    184\n        target    170\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    185\n        target    55\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    186\n        target    108\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    186\n        target    188\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    187\n        target    173\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    188\n        target    159\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    189\n        target    119\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    19\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    2\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    20\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    21\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    22\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    23\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    24\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    25\n        target    153\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    25\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    26\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    27\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    28\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    29\n        target    25\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    3\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    30\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    31\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    32\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    33\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    34\n        target    24\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    34\n        target    73\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    35\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    36\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    37\n        target    30\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    38\n        target    116\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    38\n        target    26\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    39\n        target    38\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    4\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    40\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    41\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    42\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    43\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    44\n        target    38\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    45\n        target    20\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    46\n        target    29\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    47\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    47\n        target    175\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    48\n        target    120\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    48\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    49\n        target    43\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    5\n        target    135\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    5\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    50\n        target    33\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    51\n        target    28\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    52\n        target    50\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    53\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    54\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    55\n        target    27\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    56\n        target    146\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    56\n        target    36\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    57\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    58\n        target    31\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    59\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    6\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    60\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    61\n        target    55\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    62\n        target    59\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    63\n        target    30\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    63\n        target    53\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    64\n        target    32\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    65\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    66\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    67\n        target    25\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    68\n        target    61\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    69\n        target    40\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    7\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    70\n        target    61\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    71\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    71\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    72\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    73\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    73\n        target    47\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    74\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    74\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    75\n        target    64\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    76\n        target    35\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    77\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    78\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    79\n        target    50\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    8\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    80\n        target    29\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    81\n        target    42\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    82\n        target    52\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    83\n        target    81\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    84\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    85\n        target    49\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    86\n        target    46\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    87\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    88\n        target    101\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    88\n        target    66\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    89\n        target    58\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    89\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    9\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    90\n        target    75\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    91\n        target    57\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    92\n        target    20\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    93\n        target    51\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    94\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    95\n        target    74\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    96\n        target    82\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    97\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    98\n        target    61\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    99\n        target    56\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n]\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v190e209.tglf",
    "content": "0 241.000 234.000 30.000 30.000\n1 731.000 982.000 30.000 30.000\n2 331.000 254.000 30.000 30.000\n3 189.000 336.000 30.000 30.000\n4 763.000 44.000 30.000 30.000\n5 394.000 377.000 30.000 30.000\n6 169.000 1162.000 30.000 30.000\n7 390.000 240.000 30.000 30.000\n8 338.000 465.000 30.000 30.000\n9 1015.000 960.000 30.000 30.000\n10 735.000 266.000 30.000 30.000\n11 183.000 954.000 30.000 30.000\n12 1165.000 525.000 30.000 30.000\n13 373.000 257.000 30.000 30.000\n14 652.000 601.000 30.000 30.000\n15 782.000 132.000 30.000 30.000\n16 1069.000 1236.000 30.000 30.000\n17 414.000 1222.000 30.000 30.000\n18 1035.000 557.000 30.000 30.000\n19 428.000 779.000 30.000 30.000\n20 840.000 284.000 30.000 30.000\n21 634.000 244.000 30.000 30.000\n22 795.000 1045.000 30.000 30.000\n23 1190.000 745.000 30.000 30.000\n24 1186.000 270.000 30.000 30.000\n25 210.000 120.000 30.000 30.000\n26 95.000 433.000 30.000 30.000\n27 515.000 1032.000 30.000 30.000\n28 1042.000 181.000 30.000 30.000\n29 412.000 1135.000 30.000 30.000\n30 409.000 317.000 30.000 30.000\n31 912.000 973.000 30.000 30.000\n32 594.000 698.000 30.000 30.000\n33 1037.000 536.000 30.000 30.000\n34 741.000 388.000 30.000 30.000\n35 237.000 811.000 30.000 30.000\n36 228.000 48.000 30.000 30.000\n37 905.000 176.000 30.000 30.000\n38 396.000 773.000 30.000 30.000\n39 134.000 608.000 30.000 30.000\n40 93.000 156.000 30.000 30.000\n41 886.000 428.000 30.000 30.000\n42 735.000 682.000 30.000 30.000\n43 417.000 385.000 30.000 30.000\n44 49.000 1048.000 30.000 30.000\n45 719.000 583.000 30.000 30.000\n46 73.000 257.000 30.000 30.000\n47 678.000 645.000 30.000 30.000\n48 1166.000 1092.000 30.000 30.000\n49 564.000 368.000 30.000 30.000\n50 785.000 115.000 30.000 30.000\n51 487.000 844.000 30.000 30.000\n52 116.000 286.000 30.000 30.000\n53 1015.000 76.000 30.000 30.000\n54 1197.000 690.000 30.000 30.000\n55 866.000 528.000 30.000 30.000\n56 192.000 100.000 30.000 30.000\n57 132.000 30.000 30.000 30.000\n58 1008.000 417.000 30.000 30.000\n59 385.000 1133.000 30.000 30.000\n60 890.000 428.000 30.000 30.000\n61 1147.000 876.000 30.000 30.000\n62 247.000 722.000 30.000 30.000\n63 62.000 625.000 30.000 30.000\n64 791.000 1061.000 30.000 30.000\n65 584.000 350.000 30.000 30.000\n66 685.000 1058.000 30.000 30.000\n67 395.000 832.000 30.000 30.000\n68 36.000 888.000 30.000 30.000\n69 11.000 1126.000 30.000 30.000\n70 88.000 441.000 30.000 30.000\n71 610.000 664.000 30.000 30.000\n72 453.000 871.000 30.000 30.000\n73 57.000 364.000 30.000 30.000\n74 274.000 57.000 30.000 30.000\n75 926.000 294.000 30.000 30.000\n76 780.000 1130.000 30.000 30.000\n77 782.000 449.000 30.000 30.000\n78 456.000 999.000 30.000 30.000\n79 754.000 482.000 30.000 30.000\n80 58.000 675.000 30.000 30.000\n81 720.000 928.000 30.000 30.000\n82 942.000 621.000 30.000 30.000\n83 1213.000 1230.000 30.000 30.000\n84 1191.000 913.000 30.000 30.000\n85 1215.000 789.000 30.000 30.000\n86 208.000 700.000 30.000 30.000\n87 698.000 875.000 30.000 30.000\n88 438.000 563.000 30.000 30.000\n89 921.000 293.000 30.000 30.000\n90 1236.000 456.000 30.000 30.000\n91 454.000 484.000 30.000 30.000\n92 113.000 866.000 30.000 30.000\n93 159.000 511.000 30.000 30.000\n94 262.000 452.000 30.000 30.000\n95 454.000 876.000 30.000 30.000\n96 667.000 1234.000 30.000 30.000\n97 1101.000 6.000 30.000 30.000\n98 565.000 525.000 30.000 30.000\n99 637.000 13.000 30.000 30.000\n100 359.000 440.000 30.000 30.000\n101 221.000 1197.000 30.000 30.000\n102 23.000 372.000 30.000 30.000\n103 908.000 680.000 30.000 30.000\n104 960.000 1117.000 30.000 30.000\n105 1156.000 519.000 30.000 30.000\n106 1099.000 83.000 30.000 30.000\n107 758.000 1058.000 30.000 30.000\n108 1088.000 881.000 30.000 30.000\n109 903.000 388.000 30.000 30.000\n110 116.000 740.000 30.000 30.000\n111 353.000 211.000 30.000 30.000\n112 927.000 378.000 30.000 30.000\n113 691.000 209.000 30.000 30.000\n114 690.000 721.000 30.000 30.000\n115 935.000 219.000 30.000 30.000\n116 409.000 76.000 30.000 30.000\n117 830.000 245.000 30.000 30.000\n118 1030.000 435.000 30.000 30.000\n119 407.000 680.000 30.000 30.000\n120 1093.000 617.000 30.000 30.000\n121 960.000 574.000 30.000 30.000\n122 945.000 441.000 30.000 30.000\n123 9.000 676.000 30.000 30.000\n124 495.000 599.000 30.000 30.000\n125 461.000 982.000 30.000 30.000\n126 577.000 707.000 30.000 30.000\n127 773.000 384.000 30.000 30.000\n128 1018.000 914.000 30.000 30.000\n129 589.000 651.000 30.000 30.000\n130 906.000 379.000 30.000 30.000\n131 1030.000 551.000 30.000 30.000\n132 102.000 1101.000 30.000 30.000\n133 723.000 94.000 30.000 30.000\n134 110.000 724.000 30.000 30.000\n135 187.000 913.000 30.000 30.000\n136 527.000 48.000 30.000 30.000\n137 60.000 67.000 30.000 30.000\n138 976.000 84.000 30.000 30.000\n139 111.000 574.000 30.000 30.000\n140 605.000 491.000 30.000 30.000\n141 457.000 209.000 30.000 30.000\n142 722.000 54.000 30.000 30.000\n143 871.000 353.000 30.000 30.000\n144 431.000 349.000 30.000 30.000\n145 529.000 919.000 30.000 30.000\n146 736.000 382.000 30.000 30.000\n147 1225.000 190.000 30.000 30.000\n148 591.000 1217.000 30.000 30.000\n149 350.000 561.000 30.000 30.000\n150 152.000 351.000 30.000 30.000\n151 372.000 54.000 30.000 30.000\n152 0.000 240.000 30.000 30.000\n153 703.000 175.000 30.000 30.000\n154 906.000 492.000 30.000 30.000\n155 661.000 1044.000 30.000 30.000\n156 67.000 557.000 30.000 30.000\n157 761.000 725.000 30.000 30.000\n158 140.000 662.000 30.000 30.000\n159 1042.000 354.000 30.000 30.000\n160 376.000 634.000 30.000 30.000\n161 613.000 747.000 30.000 30.000\n162 786.000 372.000 30.000 30.000\n163 753.000 393.000 30.000 30.000\n164 1159.000 857.000 30.000 30.000\n165 557.000 176.000 30.000 30.000\n166 482.000 281.000 30.000 30.000\n167 1016.000 270.000 30.000 30.000\n168 1176.000 1073.000 30.000 30.000\n169 830.000 1152.000 30.000 30.000\n170 331.000 663.000 30.000 30.000\n171 124.000 1091.000 30.000 30.000\n172 132.000 621.000 30.000 30.000\n173 916.000 987.000 30.000 30.000\n174 1091.000 345.000 30.000 30.000\n175 144.000 909.000 30.000 30.000\n176 412.000 116.000 30.000 30.000\n177 596.000 993.000 30.000 30.000\n178 868.000 348.000 30.000 30.000\n179 272.000 535.000 30.000 30.000\n180 45.000 836.000 30.000 30.000\n181 392.000 79.000 30.000 30.000\n182 1012.000 411.000 30.000 30.000\n183 322.000 976.000 30.000 30.000\n184 65.000 228.000 30.000 30.000\n185 949.000 1166.000 30.000 30.000\n186 339.000 859.000 30.000 30.000\n187 909.000 864.000 30.000 30.000\n188 719.000 369.000 30.000 30.000\n189 248.000 636.000 30.000 30.000\n#\n123 95\n78 4\n49 43\n76 35\n97 11\n136 68\n25 153\n70 61\n142 141\n6 1\n164 78\n114 90\n182 130\n19 12\n33 5\n38 116\n53 21\n133 39\n42 11\n81 42\n93 51\n23 4\n156 142\n15 10\n41 13\n154 70\n131 38\n92 20\n98 61\n186 188\n130 101\n20 6\n88 66\n122 57\n28 8\n148 9\n106 41\n185 55\n34 24\n101 74\n94 7\n116 66\n1 0\n107 80\n178 104\n38 26\n67 25\n45 20\n87 1\n109 99\n187 173\n153 151\n47 175\n60 5\n121 60\n4 2\n91 57\n152 103\n89 58\n102 20\n66 1\n135 1\n171 131\n136 139\n9 8\n99 56\n17 90\n40 1\n65 13\n21 4\n95 74\n139 84\n117 106\n57 18\n24 10\n77 9\n173 87\n181 11\n139 172\n159 130\n73 47\n144 23\n85 49\n35 21\n160 118\n68 61\n32 2\n151 28\n180 149\n112 95\n120 80\n111 87\n186 108\n157 77\n13 5\n179 156\n118 56\n7 5\n141 101\n69 40\n174 165\n86 46\n83 81\n22 3\n63 53\n145 59\n48 120\n29 25\n89 6\n124 114\n5 3\n96 82\n5 135\n82 52\n175 86\n113 66\n90 75\n177 115\n16 0\n79 50\n75 64\n71 22\n46 29\n47 17\n105 88\n188 159\n36 7\n51 28\n137 83\n27 3\n161 126\n55 27\n108 33\n127 10\n150 60\n165 60\n56 146\n3 2\n138 118\n26 15\n44 38\n64 32\n126 49\n128 30\n103 85\n143 24\n129 67\n80 29\n34 73\n146 33\n63 30\n125 111\n112 18\n73 21\n134 43\n119 0\n10 5\n2 0\n167 88\n8 6\n183 49\n56 36\n72 17\n155 94\n189 119\n170 107\n100 33\n74 10\n110 87\n18 1\n17 1\n88 101\n184 170\n146 167\n31 5\n62 59\n172 25\n104 82\n11 9\n37 30\n52 50\n25 6\n30 8\n50 33\n48 8\n166 129\n115 32\n140 51\n149 143\n54 7\n158 124\n59 13\n0 109\n61 55\n58 31\n43 12\n39 38\n176 135\n12 3\n14 5\n84 10\n169 2\n132 59\n163 38\n74 4\n71 9\n168 119\n147 119\n162 88\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v190e228.gml",
    "content": "graph\n[\n    node\n    [\n        id    0\n        label    \"\"\n        graphics\n        [\n            x    146.23\n            y    27.06\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    1\n        label    \"\"\n        graphics\n        [\n            x    599.49\n            y    1194.36\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    2\n        label    \"\"\n        graphics\n        [\n            x    612.48\n            y    365.94\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    3\n        label    \"\"\n        graphics\n        [\n            x    1186.14\n            y    326.32\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    4\n        label    \"\"\n        graphics\n        [\n            x    1137.04\n            y    564.25\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    5\n        label    \"\"\n        graphics\n        [\n            x    1218.17\n            y    650.23\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    6\n        label    \"\"\n        graphics\n        [\n            x    835.85\n            y    5.01\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    7\n        label    \"\"\n        graphics\n        [\n            x    93.66\n            y    570.23\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    8\n        label    \"\"\n        graphics\n        [\n            x    958.27\n            y    216.38\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    9\n        label    \"\"\n        graphics\n        [\n            x    166.39\n            y    886.16\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    10\n        label    \"\"\n        graphics\n        [\n            x    647.56\n            y    212.41\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    11\n        label    \"\"\n        graphics\n        [\n            x    1138.46\n            y    706.61\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    12\n        label    \"\"\n        graphics\n        [\n            x    1054.82\n            y    149.59\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    13\n        label    \"\"\n        graphics\n        [\n            x    541.69\n            y    722.19\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    14\n        label    \"\"\n        graphics\n        [\n            x    647.51\n            y    771.83\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    15\n        label    \"\"\n        graphics\n        [\n            x    906.06\n            y    1191.07\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    16\n        label    \"\"\n        graphics\n        [\n            x    774.91\n            y    248.89\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    17\n        label    \"\"\n        graphics\n        [\n            x    409.13\n            y    292.21\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    18\n        label    \"\"\n        graphics\n        [\n            x    1102.21\n            y    166.42\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    19\n        label    \"\"\n        graphics\n        [\n            x    134.50\n            y    1208.30\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    20\n        label    \"\"\n        graphics\n        [\n            x    586.71\n            y    651.35\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    21\n        label    \"\"\n        graphics\n        [\n            x    317.28\n            y    85.18\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    22\n        label    \"\"\n        graphics\n        [\n            x    587.90\n            y    423.47\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    23\n        label    \"\"\n        graphics\n        [\n            x    85.02\n            y    529.69\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    24\n        label    \"\"\n        graphics\n        [\n            x    1028.76\n            y    1212.31\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    25\n        label    \"\"\n        graphics\n        [\n            x    326.78\n            y    450.73\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    26\n        label    \"\"\n        graphics\n        [\n            x    926.75\n            y    987.57\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    27\n        label    \"\"\n        graphics\n        [\n            x    968.63\n            y    1109.05\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    28\n        label    \"\"\n        graphics\n        [\n            x    1110.18\n            y    514.22\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    29\n        label    \"\"\n        graphics\n        [\n            x    381.85\n            y    971.78\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    30\n        label    \"\"\n        graphics\n        [\n            x    739.01\n            y    1022.72\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    31\n        label    \"\"\n        graphics\n        [\n            x    1076.29\n            y    1158.33\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    32\n        label    \"\"\n        graphics\n        [\n            x    111.14\n            y    930.51\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    33\n        label    \"\"\n        graphics\n        [\n            x    66.98\n            y    204.69\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    34\n        label    \"\"\n        graphics\n        [\n            x    717.92\n            y    1106.51\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    35\n        label    \"\"\n        graphics\n        [\n            x    1221.76\n            y    1152.81\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    36\n        label    \"\"\n        graphics\n        [\n            x    232.55\n            y    831.41\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    37\n        label    \"\"\n        graphics\n        [\n            x    567.78\n            y    505.20\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    38\n        label    \"\"\n        graphics\n        [\n            x    509.57\n            y    596.64\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    39\n        label    \"\"\n        graphics\n        [\n            x    610.30\n            y    127.47\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    40\n        label    \"\"\n        graphics\n        [\n            x    290.37\n            y    177.27\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    41\n        label    \"\"\n        graphics\n        [\n            x    232.88\n            y    28.28\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    42\n        label    \"\"\n        graphics\n        [\n            x    1199.45\n            y    167.26\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    43\n        label    \"\"\n        graphics\n        [\n            x    695.87\n            y    734.92\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    44\n        label    \"\"\n        graphics\n        [\n            x    1089.79\n            y    265.93\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    45\n        label    \"\"\n        graphics\n        [\n            x    230.67\n            y    609.74\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    46\n        label    \"\"\n        graphics\n        [\n            x    1185.66\n            y    607.91\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    47\n        label    \"\"\n        graphics\n        [\n            x    689.05\n            y    625.66\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    48\n        label    \"\"\n        graphics\n        [\n            x    881.68\n            y    364.87\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    49\n        label    \"\"\n        graphics\n        [\n            x    452.60\n            y    991.71\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    50\n        label    \"\"\n        graphics\n        [\n            x    1051.97\n            y    879.55\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    51\n        label    \"\"\n        graphics\n        [\n            x    529.48\n            y    946.63\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    52\n        label    \"\"\n        graphics\n        [\n            x    593.09\n            y    801.08\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    53\n        label    \"\"\n        graphics\n        [\n            x    263.83\n            y    649.21\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    54\n        label    \"\"\n        graphics\n        [\n            x    687.18\n            y    184.92\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    55\n        label    \"\"\n        graphics\n        [\n            x    314.64\n            y    679.16\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    56\n        label    \"\"\n        graphics\n        [\n            x    116.98\n            y    1115.08\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    57\n        label    \"\"\n        graphics\n        [\n            x    1054.17\n            y    91.19\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    58\n        label    \"\"\n        graphics\n        [\n            x    872.47\n            y    139.19\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    59\n        label    \"\"\n        graphics\n        [\n            x    1143.70\n            y    358.22\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    60\n        label    \"\"\n        graphics\n        [\n            x    273.99\n            y    689.32\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    61\n        label    \"\"\n        graphics\n        [\n            x    342.08\n            y    63.60\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    62\n        label    \"\"\n        graphics\n        [\n            x    235.81\n            y    1013.03\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    63\n        label    \"\"\n        graphics\n        [\n            x    386.62\n            y    970.21\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    64\n        label    \"\"\n        graphics\n        [\n            x    932.15\n            y    600.86\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    65\n        label    \"\"\n        graphics\n        [\n            x    424.44\n            y    968.44\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    66\n        label    \"\"\n        graphics\n        [\n            x    428.78\n            y    502.40\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    67\n        label    \"\"\n        graphics\n        [\n            x    788.00\n            y    261.25\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    68\n        label    \"\"\n        graphics\n        [\n            x    1012.98\n            y    161.86\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    69\n        label    \"\"\n        graphics\n        [\n            x    1206.81\n            y    509.91\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    70\n        label    \"\"\n        graphics\n        [\n            x    1108.09\n            y    654.26\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    71\n        label    \"\"\n        graphics\n        [\n            x    344.08\n            y    881.55\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    72\n        label    \"\"\n        graphics\n        [\n            x    1085.48\n            y    804.70\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    73\n        label    \"\"\n        graphics\n        [\n            x    337.13\n            y    161.19\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    74\n        label    \"\"\n        graphics\n        [\n            x    942.33\n            y    325.79\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    75\n        label    \"\"\n        graphics\n        [\n            x    451.88\n            y    893.08\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    76\n        label    \"\"\n        graphics\n        [\n            x    682.09\n            y    547.54\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    77\n        label    \"\"\n        graphics\n        [\n            x    669.59\n            y    813.78\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    78\n        label    \"\"\n        graphics\n        [\n            x    317.76\n            y    107.49\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    79\n        label    \"\"\n        graphics\n        [\n            x    91.95\n            y    366.54\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    80\n        label    \"\"\n        graphics\n        [\n            x    24.45\n            y    412.40\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    81\n        label    \"\"\n        graphics\n        [\n            x    1185.73\n            y    891.89\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    82\n        label    \"\"\n        graphics\n        [\n            x    727.17\n            y    763.66\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    83\n        label    \"\"\n        graphics\n        [\n            x    469.12\n            y    82.26\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    84\n        label    \"\"\n        graphics\n        [\n            x    1229.59\n            y    978.70\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    85\n        label    \"\"\n        graphics\n        [\n            x    1157.99\n            y    729.84\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    86\n        label    \"\"\n        graphics\n        [\n            x    930.45\n            y    93.23\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    87\n        label    \"\"\n        graphics\n        [\n            x    673.54\n            y    289.23\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    88\n        label    \"\"\n        graphics\n        [\n            x    96.62\n            y    942.47\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    89\n        label    \"\"\n        graphics\n        [\n            x    1008.35\n            y    507.49\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    90\n        label    \"\"\n        graphics\n        [\n            x    284.73\n            y    222.04\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    91\n        label    \"\"\n        graphics\n        [\n            x    571.67\n            y    831.41\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    92\n        label    \"\"\n        graphics\n        [\n            x    1175.41\n            y    825.91\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    93\n        label    \"\"\n        graphics\n        [\n            x    1149.70\n            y    587.11\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    94\n        label    \"\"\n        graphics\n        [\n            x    313.58\n            y    139.72\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    95\n        label    \"\"\n        graphics\n        [\n            x    1085.91\n            y    414.41\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    96\n        label    \"\"\n        graphics\n        [\n            x    673.94\n            y    1083.32\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    97\n        label    \"\"\n        graphics\n        [\n            x    849.86\n            y    87.14\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    98\n        label    \"\"\n        graphics\n        [\n            x    141.13\n            y    573.87\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    99\n        label    \"\"\n        graphics\n        [\n            x    767.19\n            y    367.61\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    100\n        label    \"\"\n        graphics\n        [\n            x    1049.40\n            y    791.76\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    101\n        label    \"\"\n        graphics\n        [\n            x    590.20\n            y    590.32\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    102\n        label    \"\"\n        graphics\n        [\n            x    684.95\n            y    1118.43\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    103\n        label    \"\"\n        graphics\n        [\n            x    530.40\n            y    607.12\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    104\n        label    \"\"\n        graphics\n        [\n            x    1102.05\n            y    892.33\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    105\n        label    \"\"\n        graphics\n        [\n            x    371.21\n            y    467.96\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    106\n        label    \"\"\n        graphics\n        [\n            x    779.48\n            y    166.94\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    107\n        label    \"\"\n        graphics\n        [\n            x    1186.59\n            y    1159.41\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    108\n        label    \"\"\n        graphics\n        [\n            x    491.76\n            y    1056.98\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    109\n        label    \"\"\n        graphics\n        [\n            x    816.09\n            y    378.88\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    110\n        label    \"\"\n        graphics\n        [\n            x    1091.79\n            y    36.36\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    111\n        label    \"\"\n        graphics\n        [\n            x    417.11\n            y    1229.55\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    112\n        label    \"\"\n        graphics\n        [\n            x    251.57\n            y    469.35\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    113\n        label    \"\"\n        graphics\n        [\n            x    108.73\n            y    509.66\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    114\n        label    \"\"\n        graphics\n        [\n            x    908.21\n            y    943.71\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    115\n        label    \"\"\n        graphics\n        [\n            x    460.31\n            y    818.12\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    116\n        label    \"\"\n        graphics\n        [\n            x    392.72\n            y    1134.89\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    117\n        label    \"\"\n        graphics\n        [\n            x    528.79\n            y    217.89\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    118\n        label    \"\"\n        graphics\n        [\n            x    720.59\n            y    49.32\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    119\n        label    \"\"\n        graphics\n        [\n            x    930.12\n            y    1051.75\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    120\n        label    \"\"\n        graphics\n        [\n            x    1052.92\n            y    1109.00\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    121\n        label    \"\"\n        graphics\n        [\n            x    853.69\n            y    320.46\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    122\n        label    \"\"\n        graphics\n        [\n            x    941.35\n            y    776.90\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    123\n        label    \"\"\n        graphics\n        [\n            x    259.12\n            y    747.29\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    124\n        label    \"\"\n        graphics\n        [\n            x    558.40\n            y    1213.80\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    125\n        label    \"\"\n        graphics\n        [\n            x    168.97\n            y    104.58\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    126\n        label    \"\"\n        graphics\n        [\n            x    1050.29\n            y    413.54\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    127\n        label    \"\"\n        graphics\n        [\n            x    173.87\n            y    797.19\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    128\n        label    \"\"\n        graphics\n        [\n            x    634.38\n            y    125.95\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    129\n        label    \"\"\n        graphics\n        [\n            x    117.53\n            y    527.77\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    130\n        label    \"\"\n        graphics\n        [\n            x    86.03\n            y    302.22\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    131\n        label    \"\"\n        graphics\n        [\n            x    907.47\n            y    502.53\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    132\n        label    \"\"\n        graphics\n        [\n            x    398.62\n            y    1082.98\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    133\n        label    \"\"\n        graphics\n        [\n            x    1080.49\n            y    236.63\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    134\n        label    \"\"\n        graphics\n        [\n            x    1079.70\n            y    1036.93\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    135\n        label    \"\"\n        graphics\n        [\n            x    187.87\n            y    493.37\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    136\n        label    \"\"\n        graphics\n        [\n            x    27.68\n            y    599.92\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    137\n        label    \"\"\n        graphics\n        [\n            x    1221.99\n            y    145.81\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    138\n        label    \"\"\n        graphics\n        [\n            x    316.35\n            y    1067.24\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    139\n        label    \"\"\n        graphics\n        [\n            x    167.80\n            y    341.22\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    140\n        label    \"\"\n        graphics\n        [\n            x    829.86\n            y    639.31\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    141\n        label    \"\"\n        graphics\n        [\n            x    1054.98\n            y    894.41\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    142\n        label    \"\"\n        graphics\n        [\n            x    339.70\n            y    333.14\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    143\n        label    \"\"\n        graphics\n        [\n            x    1128.23\n            y    365.55\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    144\n        label    \"\"\n        graphics\n        [\n            x    866.26\n            y    92.48\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    145\n        label    \"\"\n        graphics\n        [\n            x    39.67\n            y    1041.64\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    146\n        label    \"\"\n        graphics\n        [\n            x    266.91\n            y    655.74\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    147\n        label    \"\"\n        graphics\n        [\n            x    418.65\n            y    751.45\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    148\n        label    \"\"\n        graphics\n        [\n            x    19.78\n            y    776.34\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    149\n        label    \"\"\n        graphics\n        [\n            x    755.04\n            y    617.06\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    150\n        label    \"\"\n        graphics\n        [\n            x    333.55\n            y    634.35\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    151\n        label    \"\"\n        graphics\n        [\n            x    1240.43\n            y    488.64\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    152\n        label    \"\"\n        graphics\n        [\n            x    1086.71\n            y    861.81\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    153\n        label    \"\"\n        graphics\n        [\n            x    1044.68\n            y    1095.88\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    154\n        label    \"\"\n        graphics\n        [\n            x    83.44\n            y    451.85\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    155\n        label    \"\"\n        graphics\n        [\n            x    263.54\n            y    28.07\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    156\n        label    \"\"\n        graphics\n        [\n            x    773.53\n            y    976.04\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    157\n        label    \"\"\n        graphics\n        [\n            x    1212.84\n            y    668.88\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    158\n        label    \"\"\n        graphics\n        [\n            x    244.27\n            y    60.59\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    159\n        label    \"\"\n        graphics\n        [\n            x    244.53\n            y    231.19\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    160\n        label    \"\"\n        graphics\n        [\n            x    1227.73\n            y    94.16\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    161\n        label    \"\"\n        graphics\n        [\n            x    729.43\n            y    403.14\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    162\n        label    \"\"\n        graphics\n        [\n            x    485.40\n            y    184.80\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    163\n        label    \"\"\n        graphics\n        [\n            x    936.33\n            y    225.14\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    164\n        label    \"\"\n        graphics\n        [\n            x    605.58\n            y    197.00\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    165\n        label    \"\"\n        graphics\n        [\n            x    709.18\n            y    1162.49\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    166\n        label    \"\"\n        graphics\n        [\n            x    572.59\n            y    87.16\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    167\n        label    \"\"\n        graphics\n        [\n            x    806.91\n            y    761.61\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    168\n        label    \"\"\n        graphics\n        [\n            x    1040.02\n            y    1199.05\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    169\n        label    \"\"\n        graphics\n        [\n            x    1129.87\n            y    619.02\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    170\n        label    \"\"\n        graphics\n        [\n            x    637.53\n            y    1019.61\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    171\n        label    \"\"\n        graphics\n        [\n            x    848.26\n            y    1238.44\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    172\n        label    \"\"\n        graphics\n        [\n            x    136.67\n            y    1190.32\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    173\n        label    \"\"\n        graphics\n        [\n            x    40.48\n            y    162.33\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    174\n        label    \"\"\n        graphics\n        [\n            x    682.79\n            y    711.00\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    175\n        label    \"\"\n        graphics\n        [\n            x    334.69\n            y    675.62\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    176\n        label    \"\"\n        graphics\n        [\n            x    430.47\n            y    1058.00\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    177\n        label    \"\"\n        graphics\n        [\n            x    925.78\n            y    108.46\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    178\n        label    \"\"\n        graphics\n        [\n            x    510.96\n            y    704.96\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    179\n        label    \"\"\n        graphics\n        [\n            x    106.51\n            y    432.92\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    180\n        label    \"\"\n        graphics\n        [\n            x    14.83\n            y    782.52\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    181\n        label    \"\"\n        graphics\n        [\n            x    490.01\n            y    688.17\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    182\n        label    \"\"\n        graphics\n        [\n            x    79.51\n            y    796.70\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    183\n        label    \"\"\n        graphics\n        [\n            x    796.49\n            y    99.86\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    184\n        label    \"\"\n        graphics\n        [\n            x    1204.57\n            y    567.77\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    185\n        label    \"\"\n        graphics\n        [\n            x    4.52\n            y    801.87\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    186\n        label    \"\"\n        graphics\n        [\n            x    868.16\n            y    70.06\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    187\n        label    \"\"\n        graphics\n        [\n            x    265.44\n            y    435.10\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    188\n        label    \"\"\n        graphics\n        [\n            x    264.60\n            y    1103.80\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    189\n        label    \"\"\n        graphics\n        [\n            x    938.49\n            y    616.93\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    edge\n    [\n        source    1\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    10\n        target    48\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    10\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    100\n        target    53\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    101\n        target    134\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    101\n        target    80\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    102\n        target    80\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    103\n        target    84\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    104\n        target    64\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    105\n        target    44\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    106\n        target    182\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    106\n        target    24\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    107\n        target    80\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    108\n        target    53\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    109\n        target    162\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    109\n        target    97\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    11\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    110\n        target    95\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    111\n        target    82\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    112\n        target    63\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    112\n        target    67\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    112\n        target    76\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    113\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    114\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    115\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    116\n        target    49\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    117\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    118\n        target    96\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    119\n        target    50\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    12\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    120\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    120\n        target    76\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    121\n        target    49\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    122\n        target    108\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    123\n        target    86\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    124\n        target    77\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    125\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    126\n        target    58\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    127\n        target    51\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    128\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    129\n        target    36\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    13\n        target    20\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    13\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    130\n        target    37\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    131\n        target    130\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    132\n        target    35\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    133\n        target    113\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    134\n        target    93\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    135\n        target    69\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    136\n        target    19\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    137\n        target    76\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    138\n        target    98\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    139\n        target    106\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    139\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    14\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    140\n        target    180\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    140\n        target    75\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    141\n        target    100\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    142\n        target    27\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    143\n        target    19\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    143\n        target    40\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    144\n        target    119\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    145\n        target    111\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    146\n        target    72\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    147\n        target    144\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    148\n        target    137\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    149\n        target    127\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    15\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    150\n        target    110\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    150\n        target    25\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    151\n        target    112\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    152\n        target    35\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    152\n        target    63\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    153\n        target    118\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    154\n        target    110\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    155\n        target    150\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    155\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    156\n        target    96\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    157\n        target    106\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    158\n        target    156\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    159\n        target    60\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    16\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    160\n        target    90\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    161\n        target    109\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    162\n        target    121\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    163\n        target    162\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    164\n        target    133\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    165\n        target    33\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    165\n        target    69\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    166\n        target    176\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    166\n        target    52\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    167\n        target    161\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    167\n        target    69\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    168\n        target    117\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    168\n        target    131\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    169\n        target    139\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    17\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    170\n        target    57\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    171\n        target    149\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    172\n        target    97\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    173\n        target    90\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    174\n        target    33\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    175\n        target    148\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    176\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    177\n        target    72\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    178\n        target    141\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    179\n        target    67\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    18\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    180\n        target    116\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    180\n        target    132\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    181\n        target    128\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    181\n        target    174\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    181\n        target    87\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    182\n        target    135\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    183\n        target    52\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    184\n        target    109\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    185\n        target    105\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    186\n        target    174\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    187\n        target    174\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    188\n        target    141\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    188\n        target    84\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    189\n        target    112\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    19\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    2\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    20\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    21\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    22\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    23\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    24\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    25\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    26\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    27\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    28\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    29\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    29\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    3\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    30\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    31\n        target    27\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    32\n        target    28\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    33\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    33\n        target    91\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    34\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    35\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    36\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    37\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    38\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    39\n        target    20\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    4\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    40\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    41\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    42\n        target    30\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    43\n        target    185\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    43\n        target    19\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    44\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    45\n        target    37\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    46\n        target    177\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    46\n        target    35\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    47\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    48\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    49\n        target    42\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    5\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    50\n        target    149\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    50\n        target    44\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    51\n        target    37\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    52\n        target    35\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    53\n        target    33\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    54\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    55\n        target    37\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    56\n        target    172\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    56\n        target    26\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    57\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    58\n        target    36\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    59\n        target    41\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    6\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    6\n        target    95\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    60\n        target    46\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    61\n        target    56\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    62\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    63\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    64\n        target    53\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    65\n        target    63\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    66\n        target    33\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    67\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    67\n        target    26\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    68\n        target    19\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    69\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    7\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    70\n        target    112\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    70\n        target    52\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    71\n        target    59\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    72\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    73\n        target    157\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    73\n        target    43\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    74\n        target    39\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    74\n        target    43\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    75\n        target    43\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    75\n        target    51\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    76\n        target    58\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    77\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    78\n        target    38\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    79\n        target    59\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    8\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    80\n        target    26\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    80\n        target    78\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    81\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    82\n        target    62\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    83\n        target    51\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    84\n        target    75\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    85\n        target    30\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    86\n        target    45\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    87\n        target    66\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    88\n        target    80\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    89\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    9\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    90\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    91\n        target    51\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    92\n        target    67\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    93\n        target    66\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    94\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    95\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    96\n        target    86\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    96\n        target    87\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    96\n        target    93\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    97\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    97\n        target    95\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    98\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    99\n        target    119\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    99\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n]\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v190e228.tglf",
    "content": "0 146.000 27.000 30.000 30.000\n1 599.000 1194.000 30.000 30.000\n2 612.000 365.000 30.000 30.000\n3 1186.000 326.000 30.000 30.000\n4 1137.000 564.000 30.000 30.000\n5 1218.000 650.000 30.000 30.000\n6 835.000 5.000 30.000 30.000\n7 93.000 570.000 30.000 30.000\n8 958.000 216.000 30.000 30.000\n9 166.000 886.000 30.000 30.000\n10 647.000 212.000 30.000 30.000\n11 1138.000 706.000 30.000 30.000\n12 1054.000 149.000 30.000 30.000\n13 541.000 722.000 30.000 30.000\n14 647.000 771.000 30.000 30.000\n15 906.000 1191.000 30.000 30.000\n16 774.000 248.000 30.000 30.000\n17 409.000 292.000 30.000 30.000\n18 1102.000 166.000 30.000 30.000\n19 134.000 1208.000 30.000 30.000\n20 586.000 651.000 30.000 30.000\n21 317.000 85.000 30.000 30.000\n22 587.000 423.000 30.000 30.000\n23 85.000 529.000 30.000 30.000\n24 1028.000 1212.000 30.000 30.000\n25 326.000 450.000 30.000 30.000\n26 926.000 987.000 30.000 30.000\n27 968.000 1109.000 30.000 30.000\n28 1110.000 514.000 30.000 30.000\n29 381.000 971.000 30.000 30.000\n30 739.000 1022.000 30.000 30.000\n31 1076.000 1158.000 30.000 30.000\n32 111.000 930.000 30.000 30.000\n33 66.000 204.000 30.000 30.000\n34 717.000 1106.000 30.000 30.000\n35 1221.000 1152.000 30.000 30.000\n36 232.000 831.000 30.000 30.000\n37 567.000 505.000 30.000 30.000\n38 509.000 596.000 30.000 30.000\n39 610.000 127.000 30.000 30.000\n40 290.000 177.000 30.000 30.000\n41 232.000 28.000 30.000 30.000\n42 1199.000 167.000 30.000 30.000\n43 695.000 734.000 30.000 30.000\n44 1089.000 265.000 30.000 30.000\n45 230.000 609.000 30.000 30.000\n46 1185.000 607.000 30.000 30.000\n47 689.000 625.000 30.000 30.000\n48 881.000 364.000 30.000 30.000\n49 452.000 991.000 30.000 30.000\n50 1051.000 879.000 30.000 30.000\n51 529.000 946.000 30.000 30.000\n52 593.000 801.000 30.000 30.000\n53 263.000 649.000 30.000 30.000\n54 687.000 184.000 30.000 30.000\n55 314.000 679.000 30.000 30.000\n56 116.000 1115.000 30.000 30.000\n57 1054.000 91.000 30.000 30.000\n58 872.000 139.000 30.000 30.000\n59 1143.000 358.000 30.000 30.000\n60 273.000 689.000 30.000 30.000\n61 342.000 63.000 30.000 30.000\n62 235.000 1013.000 30.000 30.000\n63 386.000 970.000 30.000 30.000\n64 932.000 600.000 30.000 30.000\n65 424.000 968.000 30.000 30.000\n66 428.000 502.000 30.000 30.000\n67 788.000 261.000 30.000 30.000\n68 1012.000 161.000 30.000 30.000\n69 1206.000 509.000 30.000 30.000\n70 1108.000 654.000 30.000 30.000\n71 344.000 881.000 30.000 30.000\n72 1085.000 804.000 30.000 30.000\n73 337.000 161.000 30.000 30.000\n74 942.000 325.000 30.000 30.000\n75 451.000 893.000 30.000 30.000\n76 682.000 547.000 30.000 30.000\n77 669.000 813.000 30.000 30.000\n78 317.000 107.000 30.000 30.000\n79 91.000 366.000 30.000 30.000\n80 24.000 412.000 30.000 30.000\n81 1185.000 891.000 30.000 30.000\n82 727.000 763.000 30.000 30.000\n83 469.000 82.000 30.000 30.000\n84 1229.000 978.000 30.000 30.000\n85 1157.000 729.000 30.000 30.000\n86 930.000 93.000 30.000 30.000\n87 673.000 289.000 30.000 30.000\n88 96.000 942.000 30.000 30.000\n89 1008.000 507.000 30.000 30.000\n90 284.000 222.000 30.000 30.000\n91 571.000 831.000 30.000 30.000\n92 1175.000 825.000 30.000 30.000\n93 1149.000 587.000 30.000 30.000\n94 313.000 139.000 30.000 30.000\n95 1085.000 414.000 30.000 30.000\n96 673.000 1083.000 30.000 30.000\n97 849.000 87.000 30.000 30.000\n98 141.000 573.000 30.000 30.000\n99 767.000 367.000 30.000 30.000\n100 1049.000 791.000 30.000 30.000\n101 590.000 590.000 30.000 30.000\n102 684.000 1118.000 30.000 30.000\n103 530.000 607.000 30.000 30.000\n104 1102.000 892.000 30.000 30.000\n105 371.000 467.000 30.000 30.000\n106 779.000 166.000 30.000 30.000\n107 1186.000 1159.000 30.000 30.000\n108 491.000 1056.000 30.000 30.000\n109 816.000 378.000 30.000 30.000\n110 1091.000 36.000 30.000 30.000\n111 417.000 1229.000 30.000 30.000\n112 251.000 469.000 30.000 30.000\n113 108.000 509.000 30.000 30.000\n114 908.000 943.000 30.000 30.000\n115 460.000 818.000 30.000 30.000\n116 392.000 1134.000 30.000 30.000\n117 528.000 217.000 30.000 30.000\n118 720.000 49.000 30.000 30.000\n119 930.000 1051.000 30.000 30.000\n120 1052.000 1109.000 30.000 30.000\n121 853.000 320.000 30.000 30.000\n122 941.000 776.000 30.000 30.000\n123 259.000 747.000 30.000 30.000\n124 558.000 1213.000 30.000 30.000\n125 168.000 104.000 30.000 30.000\n126 1050.000 413.000 30.000 30.000\n127 173.000 797.000 30.000 30.000\n128 634.000 125.000 30.000 30.000\n129 117.000 527.000 30.000 30.000\n130 86.000 302.000 30.000 30.000\n131 907.000 502.000 30.000 30.000\n132 398.000 1082.000 30.000 30.000\n133 1080.000 236.000 30.000 30.000\n134 1079.000 1036.000 30.000 30.000\n135 187.000 493.000 30.000 30.000\n136 27.000 599.000 30.000 30.000\n137 1221.000 145.000 30.000 30.000\n138 316.000 1067.000 30.000 30.000\n139 167.000 341.000 30.000 30.000\n140 829.000 639.000 30.000 30.000\n141 1054.000 894.000 30.000 30.000\n142 339.000 333.000 30.000 30.000\n143 1128.000 365.000 30.000 30.000\n144 866.000 92.000 30.000 30.000\n145 39.000 1041.000 30.000 30.000\n146 266.000 655.000 30.000 30.000\n147 418.000 751.000 30.000 30.000\n148 19.000 776.000 30.000 30.000\n149 755.000 617.000 30.000 30.000\n150 333.000 634.000 30.000 30.000\n151 1240.000 488.000 30.000 30.000\n152 1086.000 861.000 30.000 30.000\n153 1044.000 1095.000 30.000 30.000\n154 83.000 451.000 30.000 30.000\n155 263.000 28.000 30.000 30.000\n156 773.000 976.000 30.000 30.000\n157 1212.000 668.000 30.000 30.000\n158 244.000 60.000 30.000 30.000\n159 244.000 231.000 30.000 30.000\n160 1227.000 94.000 30.000 30.000\n161 729.000 403.000 30.000 30.000\n162 485.000 184.000 30.000 30.000\n163 936.000 225.000 30.000 30.000\n164 605.000 197.000 30.000 30.000\n165 709.000 1162.000 30.000 30.000\n166 572.000 87.000 30.000 30.000\n167 806.000 761.000 30.000 30.000\n168 1040.000 1199.000 30.000 30.000\n169 1129.000 619.000 30.000 30.000\n170 637.000 1019.000 30.000 30.000\n171 848.000 1238.000 30.000 30.000\n172 136.000 1190.000 30.000 30.000\n173 40.000 162.000 30.000 30.000\n174 682.000 711.000 30.000 30.000\n175 334.000 675.000 30.000 30.000\n176 430.000 1058.000 30.000 30.000\n177 925.000 108.000 30.000 30.000\n178 510.000 704.000 30.000 30.000\n179 106.000 432.000 30.000 30.000\n180 14.000 782.000 30.000 30.000\n181 490.000 688.000 30.000 30.000\n182 79.000 796.000 30.000 30.000\n183 796.000 99.000 30.000 30.000\n184 1204.000 567.000 30.000 30.000\n185 4.000 801.000 30.000 30.000\n186 868.000 70.000 30.000 30.000\n187 265.000 435.000 30.000 30.000\n188 264.000 1103.000 30.000 30.000\n189 938.000 616.000 30.000 30.000\n#\n182 135\n158 156\n154 110\n138 98\n152 35\n96 87\n102 80\n80 78\n46 35\n174 33\n75 51\n140 75\n170 57\n10 48\n58 36\n150 25\n128 16\n38 11\n178 141\n165 69\n152 63\n162 121\n88 80\n74 43\n184 109\n69 9\n116 49\n97 23\n142 27\n157 106\n186 174\n13 7\n155 7\n90 8\n146 72\n187 174\n41 11\n108 53\n75 43\n56 26\n33 91\n181 87\n46 177\n21 5\n7 1\n136 19\n73 43\n123 86\n94 0\n119 50\n70 52\n39 20\n185 105\n4 1\n80 26\n145 111\n56 172\n129 36\n8 1\n143 19\n14 11\n3 0\n13 20\n155 150\n141 100\n78 38\n166 52\n35 16\n92 67\n137 76\n120 16\n51 37\n83 51\n168 131\n96 93\n9 4\n161 109\n149 127\n103 84\n115 12\n6 95\n52 35\n132 35\n109 97\n181 174\n43 19\n2 0\n5 1\n139 106\n97 95\n165 33\n143 40\n93 66\n81 10\n54 22\n43 185\n84 75\n153 118\n163 162\n71 59\n86 45\n147 144\n113 7\n19 4\n59 41\n47 5\n181 128\n125 8\n68 19\n135 69\n175 148\n73 157\n172 97\n12 0\n25 14\n67 26\n33 12\n139 7\n74 39\n120 76\n55 37\n167 161\n28 5\n171 149\n23 6\n183 52\n65 63\n70 112\n117 5\n77 10\n134 93\n82 62\n49 42\n104 64\n66 33\n62 6\n27 10\n87 66\n44 3\n50 44\n67 17\n130 37\n76 58\n72 16\n151 112\n57 0\n118 96\n85 30\n101 80\n89 5\n179 67\n114 5\n150 110\n112 76\n159 60\n48 23\n105 44\n20 16\n79 59\n24 17\n16 13\n31 27\n10 7\n61 56\n180 116\n121 49\n18 5\n144 119\n177 72\n111 82\n30 4\n188 141\n109 162\n45 37\n167 69\n15 1\n148 137\n36 0\n11 1\n100 53\n106 182\n164 133\n60 46\n64 53\n140 180\n96 86\n22 14\n101 134\n112 67\n176 17\n37 14\n122 108\n32 28\n99 119\n6 3\n133 113\n91 51\n107 80\n95 17\n156 96\n189 112\n126 58\n160 90\n98 14\n1 0\n29 11\n42 30\n180 132\n166 176\n40 13\n99 13\n188 84\n110 95\n34 11\n26 0\n173 90\n124 77\n106 24\n17 4\n50 149\n112 63\n29 23\n169 139\n63 8\n53 33\n168 117\n131 130\n127 51\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v190e247.gml",
    "content": "graph\n[\n    node\n    [\n        id    0\n        label    \"\"\n        graphics\n        [\n            x    644.11\n            y    1133.39\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    1\n        label    \"\"\n        graphics\n        [\n            x    1006.79\n            y    3.03\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    2\n        label    \"\"\n        graphics\n        [\n            x    294.73\n            y    657.41\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    3\n        label    \"\"\n        graphics\n        [\n            x    246.45\n            y    1014.75\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    4\n        label    \"\"\n        graphics\n        [\n            x    1207.59\n            y    368.03\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    5\n        label    \"\"\n        graphics\n        [\n            x    629.94\n            y    320.87\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    6\n        label    \"\"\n        graphics\n        [\n            x    619.39\n            y    932.62\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    7\n        label    \"\"\n        graphics\n        [\n            x    1132.08\n            y    317.19\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    8\n        label    \"\"\n        graphics\n        [\n            x    376.42\n            y    765.85\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    9\n        label    \"\"\n        graphics\n        [\n            x    1203.22\n            y    895.10\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    10\n        label    \"\"\n        graphics\n        [\n            x    485.13\n            y    979.80\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    11\n        label    \"\"\n        graphics\n        [\n            x    670.96\n            y    657.01\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    12\n        label    \"\"\n        graphics\n        [\n            x    875.07\n            y    358.85\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    13\n        label    \"\"\n        graphics\n        [\n            x    10.13\n            y    234.74\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    14\n        label    \"\"\n        graphics\n        [\n            x    129.53\n            y    678.94\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    15\n        label    \"\"\n        graphics\n        [\n            x    1014.40\n            y    933.83\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    16\n        label    \"\"\n        graphics\n        [\n            x    283.28\n            y    860.66\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    17\n        label    \"\"\n        graphics\n        [\n            x    810.52\n            y    788.73\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    18\n        label    \"\"\n        graphics\n        [\n            x    26.28\n            y    140.56\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    19\n        label    \"\"\n        graphics\n        [\n            x    1218.19\n            y    1198.99\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    20\n        label    \"\"\n        graphics\n        [\n            x    1098.45\n            y    942.89\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    21\n        label    \"\"\n        graphics\n        [\n            x    835.90\n            y    1090.24\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    22\n        label    \"\"\n        graphics\n        [\n            x    731.80\n            y    302.60\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    23\n        label    \"\"\n        graphics\n        [\n            x    791.63\n            y    476.52\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    24\n        label    \"\"\n        graphics\n        [\n            x    916.70\n            y    307.66\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    25\n        label    \"\"\n        graphics\n        [\n            x    816.19\n            y    193.91\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    26\n        label    \"\"\n        graphics\n        [\n            x    336.41\n            y    237.46\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    27\n        label    \"\"\n        graphics\n        [\n            x    427.41\n            y    822.50\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    28\n        label    \"\"\n        graphics\n        [\n            x    1036.08\n            y    634.18\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    29\n        label    \"\"\n        graphics\n        [\n            x    707.86\n            y    921.11\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    30\n        label    \"\"\n        graphics\n        [\n            x    939.10\n            y    118.14\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    31\n        label    \"\"\n        graphics\n        [\n            x    110.09\n            y    627.27\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    32\n        label    \"\"\n        graphics\n        [\n            x    264.97\n            y    616.43\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    33\n        label    \"\"\n        graphics\n        [\n            x    3.11\n            y    545.22\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    34\n        label    \"\"\n        graphics\n        [\n            x    121.00\n            y    1094.23\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    35\n        label    \"\"\n        graphics\n        [\n            x    310.28\n            y    433.01\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    36\n        label    \"\"\n        graphics\n        [\n            x    1057.36\n            y    503.92\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    37\n        label    \"\"\n        graphics\n        [\n            x    877.20\n            y    1104.31\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    38\n        label    \"\"\n        graphics\n        [\n            x    848.81\n            y    737.65\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    39\n        label    \"\"\n        graphics\n        [\n            x    432.21\n            y    503.23\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    40\n        label    \"\"\n        graphics\n        [\n            x    536.35\n            y    763.47\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    41\n        label    \"\"\n        graphics\n        [\n            x    744.17\n            y    467.44\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    42\n        label    \"\"\n        graphics\n        [\n            x    987.45\n            y    222.37\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    43\n        label    \"\"\n        graphics\n        [\n            x    391.99\n            y    661.82\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    44\n        label    \"\"\n        graphics\n        [\n            x    1192.09\n            y    787.72\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    45\n        label    \"\"\n        graphics\n        [\n            x    1153.60\n            y    988.51\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    46\n        label    \"\"\n        graphics\n        [\n            x    1024.69\n            y    435.73\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    47\n        label    \"\"\n        graphics\n        [\n            x    599.94\n            y    645.63\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    48\n        label    \"\"\n        graphics\n        [\n            x    767.43\n            y    498.57\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    49\n        label    \"\"\n        graphics\n        [\n            x    445.60\n            y    34.05\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    50\n        label    \"\"\n        graphics\n        [\n            x    91.30\n            y    144.59\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    51\n        label    \"\"\n        graphics\n        [\n            x    898.65\n            y    55.30\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    52\n        label    \"\"\n        graphics\n        [\n            x    277.72\n            y    314.75\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    53\n        label    \"\"\n        graphics\n        [\n            x    528.11\n            y    225.16\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    54\n        label    \"\"\n        graphics\n        [\n            x    264.91\n            y    820.37\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    55\n        label    \"\"\n        graphics\n        [\n            x    649.13\n            y    793.38\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    56\n        label    \"\"\n        graphics\n        [\n            x    17.99\n            y    632.66\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    57\n        label    \"\"\n        graphics\n        [\n            x    51.16\n            y    523.22\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    58\n        label    \"\"\n        graphics\n        [\n            x    1239.60\n            y    270.40\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    59\n        label    \"\"\n        graphics\n        [\n            x    1233.78\n            y    135.89\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    60\n        label    \"\"\n        graphics\n        [\n            x    466.44\n            y    1056.31\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    61\n        label    \"\"\n        graphics\n        [\n            x    453.02\n            y    676.71\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    62\n        label    \"\"\n        graphics\n        [\n            x    481.85\n            y    125.84\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    63\n        label    \"\"\n        graphics\n        [\n            x    350.18\n            y    1195.89\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    64\n        label    \"\"\n        graphics\n        [\n            x    489.86\n            y    60.45\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    65\n        label    \"\"\n        graphics\n        [\n            x    1071.36\n            y    886.75\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    66\n        label    \"\"\n        graphics\n        [\n            x    243.33\n            y    180.35\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    67\n        label    \"\"\n        graphics\n        [\n            x    710.74\n            y    599.13\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    68\n        label    \"\"\n        graphics\n        [\n            x    635.31\n            y    45.02\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    69\n        label    \"\"\n        graphics\n        [\n            x    224.16\n            y    991.84\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    70\n        label    \"\"\n        graphics\n        [\n            x    866.69\n            y    788.13\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    71\n        label    \"\"\n        graphics\n        [\n            x    462.37\n            y    374.19\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    72\n        label    \"\"\n        graphics\n        [\n            x    710.73\n            y    1069.26\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    73\n        label    \"\"\n        graphics\n        [\n            x    568.66\n            y    1080.65\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    74\n        label    \"\"\n        graphics\n        [\n            x    825.47\n            y    1180.97\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    75\n        label    \"\"\n        graphics\n        [\n            x    422.65\n            y    601.37\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    76\n        label    \"\"\n        graphics\n        [\n            x    588.91\n            y    972.71\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    77\n        label    \"\"\n        graphics\n        [\n            x    437.53\n            y    185.68\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    78\n        label    \"\"\n        graphics\n        [\n            x    410.70\n            y    564.33\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    79\n        label    \"\"\n        graphics\n        [\n            x    343.79\n            y    1049.77\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    80\n        label    \"\"\n        graphics\n        [\n            x    87.34\n            y    1010.75\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    81\n        label    \"\"\n        graphics\n        [\n            x    1023.23\n            y    609.89\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    82\n        label    \"\"\n        graphics\n        [\n            x    356.31\n            y    236.21\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    83\n        label    \"\"\n        graphics\n        [\n            x    315.26\n            y    401.29\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    84\n        label    \"\"\n        graphics\n        [\n            x    307.35\n            y    529.14\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    85\n        label    \"\"\n        graphics\n        [\n            x    570.62\n            y    953.21\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    86\n        label    \"\"\n        graphics\n        [\n            x    1163.36\n            y    1157.11\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    87\n        label    \"\"\n        graphics\n        [\n            x    524.91\n            y    809.46\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    88\n        label    \"\"\n        graphics\n        [\n            x    992.75\n            y    923.76\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    89\n        label    \"\"\n        graphics\n        [\n            x    745.13\n            y    8.52\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    90\n        label    \"\"\n        graphics\n        [\n            x    436.29\n            y    703.42\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    91\n        label    \"\"\n        graphics\n        [\n            x    134.13\n            y    1214.00\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    92\n        label    \"\"\n        graphics\n        [\n            x    69.03\n            y    1161.52\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    93\n        label    \"\"\n        graphics\n        [\n            x    909.20\n            y    349.73\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    94\n        label    \"\"\n        graphics\n        [\n            x    187.27\n            y    170.17\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    95\n        label    \"\"\n        graphics\n        [\n            x    442.84\n            y    838.44\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    96\n        label    \"\"\n        graphics\n        [\n            x    705.41\n            y    9.67\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    97\n        label    \"\"\n        graphics\n        [\n            x    556.84\n            y    1001.13\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    98\n        label    \"\"\n        graphics\n        [\n            x    121.07\n            y    468.19\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    99\n        label    \"\"\n        graphics\n        [\n            x    5.09\n            y    952.73\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    100\n        label    \"\"\n        graphics\n        [\n            x    168.45\n            y    294.71\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    101\n        label    \"\"\n        graphics\n        [\n            x    825.88\n            y    998.23\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    102\n        label    \"\"\n        graphics\n        [\n            x    73.55\n            y    405.62\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    103\n        label    \"\"\n        graphics\n        [\n            x    184.02\n            y    628.90\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    104\n        label    \"\"\n        graphics\n        [\n            x    599.84\n            y    991.56\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    105\n        label    \"\"\n        graphics\n        [\n            x    376.32\n            y    1007.49\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    106\n        label    \"\"\n        graphics\n        [\n            x    751.00\n            y    343.78\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    107\n        label    \"\"\n        graphics\n        [\n            x    604.47\n            y    51.41\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    108\n        label    \"\"\n        graphics\n        [\n            x    670.43\n            y    1066.99\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    109\n        label    \"\"\n        graphics\n        [\n            x    737.22\n            y    706.01\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    110\n        label    \"\"\n        graphics\n        [\n            x    181.72\n            y    95.51\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    111\n        label    \"\"\n        graphics\n        [\n            x    395.05\n            y    861.16\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    112\n        label    \"\"\n        graphics\n        [\n            x    499.12\n            y    513.60\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    113\n        label    \"\"\n        graphics\n        [\n            x    1198.50\n            y    59.35\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    114\n        label    \"\"\n        graphics\n        [\n            x    489.78\n            y    835.99\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    115\n        label    \"\"\n        graphics\n        [\n            x    17.29\n            y    222.07\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    116\n        label    \"\"\n        graphics\n        [\n            x    652.33\n            y    1149.14\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    117\n        label    \"\"\n        graphics\n        [\n            x    961.18\n            y    358.41\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    118\n        label    \"\"\n        graphics\n        [\n            x    671.41\n            y    775.09\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    119\n        label    \"\"\n        graphics\n        [\n            x    609.77\n            y    611.18\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    120\n        label    \"\"\n        graphics\n        [\n            x    14.27\n            y    414.19\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    121\n        label    \"\"\n        graphics\n        [\n            x    66.22\n            y    627.87\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    122\n        label    \"\"\n        graphics\n        [\n            x    972.40\n            y    255.69\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    123\n        label    \"\"\n        graphics\n        [\n            x    994.70\n            y    612.98\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    124\n        label    \"\"\n        graphics\n        [\n            x    60.94\n            y    587.14\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    125\n        label    \"\"\n        graphics\n        [\n            x    740.94\n            y    75.68\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    126\n        label    \"\"\n        graphics\n        [\n            x    1078.81\n            y    693.47\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    127\n        label    \"\"\n        graphics\n        [\n            x    232.91\n            y    263.48\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    128\n        label    \"\"\n        graphics\n        [\n            x    994.96\n            y    560.06\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    129\n        label    \"\"\n        graphics\n        [\n            x    138.65\n            y    299.62\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    130\n        label    \"\"\n        graphics\n        [\n            x    747.27\n            y    718.85\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    131\n        label    \"\"\n        graphics\n        [\n            x    79.18\n            y    153.72\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    132\n        label    \"\"\n        graphics\n        [\n            x    206.38\n            y    124.05\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    133\n        label    \"\"\n        graphics\n        [\n            x    224.00\n            y    691.73\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    134\n        label    \"\"\n        graphics\n        [\n            x    738.61\n            y    756.72\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    135\n        label    \"\"\n        graphics\n        [\n            x    506.68\n            y    1178.37\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    136\n        label    \"\"\n        graphics\n        [\n            x    649.02\n            y    873.00\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    137\n        label    \"\"\n        graphics\n        [\n            x    226.98\n            y    664.62\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    138\n        label    \"\"\n        graphics\n        [\n            x    1074.01\n            y    844.65\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    139\n        label    \"\"\n        graphics\n        [\n            x    565.93\n            y    1036.81\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    140\n        label    \"\"\n        graphics\n        [\n            x    57.24\n            y    870.58\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    141\n        label    \"\"\n        graphics\n        [\n            x    203.77\n            y    738.56\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    142\n        label    \"\"\n        graphics\n        [\n            x    473.66\n            y    641.46\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    143\n        label    \"\"\n        graphics\n        [\n            x    159.35\n            y    1086.00\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    144\n        label    \"\"\n        graphics\n        [\n            x    48.47\n            y    818.40\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    145\n        label    \"\"\n        graphics\n        [\n            x    367.51\n            y    953.09\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    146\n        label    \"\"\n        graphics\n        [\n            x    1093.87\n            y    121.56\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    147\n        label    \"\"\n        graphics\n        [\n            x    986.65\n            y    1032.78\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    148\n        label    \"\"\n        graphics\n        [\n            x    58.01\n            y    96.00\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    149\n        label    \"\"\n        graphics\n        [\n            x    177.25\n            y    626.93\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    150\n        label    \"\"\n        graphics\n        [\n            x    447.40\n            y    1130.83\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    151\n        label    \"\"\n        graphics\n        [\n            x    703.32\n            y    1079.05\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    152\n        label    \"\"\n        graphics\n        [\n            x    333.91\n            y    1028.83\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    153\n        label    \"\"\n        graphics\n        [\n            x    1100.79\n            y    909.83\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    154\n        label    \"\"\n        graphics\n        [\n            x    286.55\n            y    654.90\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    155\n        label    \"\"\n        graphics\n        [\n            x    702.84\n            y    1214.01\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    156\n        label    \"\"\n        graphics\n        [\n            x    526.26\n            y    1002.13\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    157\n        label    \"\"\n        graphics\n        [\n            x    348.99\n            y    35.31\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    158\n        label    \"\"\n        graphics\n        [\n            x    298.26\n            y    1197.19\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    159\n        label    \"\"\n        graphics\n        [\n            x    882.99\n            y    611.54\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    160\n        label    \"\"\n        graphics\n        [\n            x    828.36\n            y    33.44\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    161\n        label    \"\"\n        graphics\n        [\n            x    1228.65\n            y    129.73\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    162\n        label    \"\"\n        graphics\n        [\n            x    339.04\n            y    494.81\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    163\n        label    \"\"\n        graphics\n        [\n            x    500.39\n            y    703.49\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    164\n        label    \"\"\n        graphics\n        [\n            x    780.67\n            y    857.78\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    165\n        label    \"\"\n        graphics\n        [\n            x    273.26\n            y    1176.48\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    166\n        label    \"\"\n        graphics\n        [\n            x    798.50\n            y    1148.00\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    167\n        label    \"\"\n        graphics\n        [\n            x    1174.93\n            y    713.28\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    168\n        label    \"\"\n        graphics\n        [\n            x    1031.71\n            y    372.03\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    169\n        label    \"\"\n        graphics\n        [\n            x    554.22\n            y    115.18\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    170\n        label    \"\"\n        graphics\n        [\n            x    428.01\n            y    37.29\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    171\n        label    \"\"\n        graphics\n        [\n            x    460.27\n            y    158.06\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    172\n        label    \"\"\n        graphics\n        [\n            x    860.06\n            y    576.47\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    173\n        label    \"\"\n        graphics\n        [\n            x    1221.84\n            y    1002.73\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    174\n        label    \"\"\n        graphics\n        [\n            x    247.74\n            y    349.05\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    175\n        label    \"\"\n        graphics\n        [\n            x    785.02\n            y    689.25\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    176\n        label    \"\"\n        graphics\n        [\n            x    968.43\n            y    1206.66\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    177\n        label    \"\"\n        graphics\n        [\n            x    137.29\n            y    1212.29\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    178\n        label    \"\"\n        graphics\n        [\n            x    881.81\n            y    671.57\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    179\n        label    \"\"\n        graphics\n        [\n            x    1222.02\n            y    1081.25\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    180\n        label    \"\"\n        graphics\n        [\n            x    824.52\n            y    803.54\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    181\n        label    \"\"\n        graphics\n        [\n            x    676.63\n            y    358.55\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    182\n        label    \"\"\n        graphics\n        [\n            x    249.98\n            y    1123.37\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    183\n        label    \"\"\n        graphics\n        [\n            x    1173.93\n            y    125.31\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    184\n        label    \"\"\n        graphics\n        [\n            x    112.71\n            y    470.65\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    185\n        label    \"\"\n        graphics\n        [\n            x    332.74\n            y    155.00\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    186\n        label    \"\"\n        graphics\n        [\n            x    1040.70\n            y    126.72\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    187\n        label    \"\"\n        graphics\n        [\n            x    323.21\n            y    503.41\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    188\n        label    \"\"\n        graphics\n        [\n            x    216.66\n            y    948.15\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    189\n        label    \"\"\n        graphics\n        [\n            x    791.54\n            y    1047.96\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    edge\n    [\n        source    1\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    10\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    100\n        target    88\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    101\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    101\n        target    52\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    102\n        target    20\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    102\n        target    84\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    102\n        target    99\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    103\n        target    24\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    104\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    105\n        target    32\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    106\n        target    116\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    106\n        target    32\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    107\n        target    35\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    108\n        target    51\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    109\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    109\n        target    41\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    11\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    110\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    110\n        target    179\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    111\n        target    98\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    112\n        target    58\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    112\n        target    87\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    113\n        target    120\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    113\n        target    87\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    114\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    114\n        target    82\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    115\n        target    60\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    116\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    117\n        target    108\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    118\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    118\n        target    26\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    119\n        target    102\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    12\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    120\n        target    28\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    121\n        target    27\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    122\n        target    33\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    123\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    124\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    125\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    126\n        target    93\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    127\n        target    87\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    128\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    128\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    129\n        target    36\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    13\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    13\n        target    54\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    13\n        target    78\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    130\n        target    72\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    131\n        target    51\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    131\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    132\n        target    80\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    133\n        target    165\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    133\n        target    25\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    134\n        target    107\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    134\n        target    188\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    135\n        target    81\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    136\n        target    32\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    137\n        target    55\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    138\n        target    136\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    139\n        target    121\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    14\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    14\n        target    138\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    140\n        target    132\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    141\n        target    114\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    141\n        target    162\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    142\n        target    127\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    142\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    142\n        target    158\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    143\n        target    36\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    144\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    144\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    145\n        target    67\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    146\n        target    57\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    147\n        target    110\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    147\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    147\n        target    44\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    148\n        target    50\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    149\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    149\n        target    107\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    149\n        target    87\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    15\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    150\n        target    74\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    151\n        target    113\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    152\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    153\n        target    146\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    154\n        target    93\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    155\n        target    75\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    156\n        target    143\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    156\n        target    172\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    157\n        target    52\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    158\n        target    131\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    159\n        target    66\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    16\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    16\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    160\n        target    27\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    161\n        target    113\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    161\n        target    28\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    161\n        target    63\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    162\n        target    32\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    163\n        target    135\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    164\n        target    75\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    165\n        target    104\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    166\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    167\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    168\n        target    93\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    169\n        target    167\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    169\n        target    46\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    17\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    170\n        target    39\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    170\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    171\n        target    71\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    172\n        target    90\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    173\n        target    149\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    174\n        target    126\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    175\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    176\n        target    162\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    177\n        target    146\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    177\n        target    55\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    177\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    178\n        target    43\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    179\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    18\n        target    132\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    18\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    180\n        target    110\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    180\n        target    50\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    181\n        target    39\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    182\n        target    125\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    183\n        target    155\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    183\n        target    56\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    184\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    185\n        target    95\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    186\n        target    63\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    187\n        target    73\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    188\n        target    112\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    189\n        target    85\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    19\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    2\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    20\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    21\n        target    106\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    21\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    22\n        target    107\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    22\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    23\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    23\n        target    38\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    24\n        target    169\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    24\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    25\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    26\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    26\n        target    28\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    27\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    28\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    29\n        target    27\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    3\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    30\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    31\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    32\n        target    25\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    33\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    34\n        target    24\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    35\n        target    24\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    36\n        target    35\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    37\n        target    183\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    37\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    38\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    39\n        target    147\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    39\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    4\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    40\n        target    26\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    41\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    42\n        target    20\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    43\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    44\n        target    167\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    44\n        target    34\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    45\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    45\n        target    78\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    46\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    47\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    48\n        target    20\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    49\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    5\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    5\n        target    55\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    50\n        target    48\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    51\n        target    41\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    52\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    53\n        target    109\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    53\n        target    47\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    53\n        target    79\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    54\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    54\n        target    86\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    55\n        target    52\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    56\n        target    42\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    57\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    58\n        target    126\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    58\n        target    31\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    59\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    6\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    60\n        target    135\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    60\n        target    50\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    61\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    61\n        target    85\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    62\n        target    39\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    63\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    64\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    65\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    66\n        target    42\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    67\n        target    60\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    68\n        target    46\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    68\n        target    97\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    69\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    7\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    70\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    71\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    72\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    73\n        target    26\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    74\n        target    71\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    75\n        target    34\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    76\n        target    134\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    76\n        target    42\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    77\n        target    65\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    78\n        target    88\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    78\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    79\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    79\n        target    44\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    8\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    80\n        target    38\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    81\n        target    52\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    82\n        target    62\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    83\n        target    49\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    84\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    85\n        target    68\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    86\n        target    70\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    87\n        target    20\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    88\n        target    45\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    89\n        target    50\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    9\n        target    134\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    9\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    90\n        target    36\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    91\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    91\n        target    149\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    92\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    93\n        target    77\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    94\n        target    74\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    95\n        target    74\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    96\n        target    77\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    97\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    98\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    99\n        target    97\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n]\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v190e247.tglf",
    "content": "0 644.000 1133.000 30.000 30.000\n1 1006.000 3.000 30.000 30.000\n2 294.000 657.000 30.000 30.000\n3 246.000 1014.000 30.000 30.000\n4 1207.000 368.000 30.000 30.000\n5 629.000 320.000 30.000 30.000\n6 619.000 932.000 30.000 30.000\n7 1132.000 317.000 30.000 30.000\n8 376.000 765.000 30.000 30.000\n9 1203.000 895.000 30.000 30.000\n10 485.000 979.000 30.000 30.000\n11 670.000 657.000 30.000 30.000\n12 875.000 358.000 30.000 30.000\n13 10.000 234.000 30.000 30.000\n14 129.000 678.000 30.000 30.000\n15 1014.000 933.000 30.000 30.000\n16 283.000 860.000 30.000 30.000\n17 810.000 788.000 30.000 30.000\n18 26.000 140.000 30.000 30.000\n19 1218.000 1198.000 30.000 30.000\n20 1098.000 942.000 30.000 30.000\n21 835.000 1090.000 30.000 30.000\n22 731.000 302.000 30.000 30.000\n23 791.000 476.000 30.000 30.000\n24 916.000 307.000 30.000 30.000\n25 816.000 193.000 30.000 30.000\n26 336.000 237.000 30.000 30.000\n27 427.000 822.000 30.000 30.000\n28 1036.000 634.000 30.000 30.000\n29 707.000 921.000 30.000 30.000\n30 939.000 118.000 30.000 30.000\n31 110.000 627.000 30.000 30.000\n32 264.000 616.000 30.000 30.000\n33 3.000 545.000 30.000 30.000\n34 121.000 1094.000 30.000 30.000\n35 310.000 433.000 30.000 30.000\n36 1057.000 503.000 30.000 30.000\n37 877.000 1104.000 30.000 30.000\n38 848.000 737.000 30.000 30.000\n39 432.000 503.000 30.000 30.000\n40 536.000 763.000 30.000 30.000\n41 744.000 467.000 30.000 30.000\n42 987.000 222.000 30.000 30.000\n43 391.000 661.000 30.000 30.000\n44 1192.000 787.000 30.000 30.000\n45 1153.000 988.000 30.000 30.000\n46 1024.000 435.000 30.000 30.000\n47 599.000 645.000 30.000 30.000\n48 767.000 498.000 30.000 30.000\n49 445.000 34.000 30.000 30.000\n50 91.000 144.000 30.000 30.000\n51 898.000 55.000 30.000 30.000\n52 277.000 314.000 30.000 30.000\n53 528.000 225.000 30.000 30.000\n54 264.000 820.000 30.000 30.000\n55 649.000 793.000 30.000 30.000\n56 17.000 632.000 30.000 30.000\n57 51.000 523.000 30.000 30.000\n58 1239.000 270.000 30.000 30.000\n59 1233.000 135.000 30.000 30.000\n60 466.000 1056.000 30.000 30.000\n61 453.000 676.000 30.000 30.000\n62 481.000 125.000 30.000 30.000\n63 350.000 1195.000 30.000 30.000\n64 489.000 60.000 30.000 30.000\n65 1071.000 886.000 30.000 30.000\n66 243.000 180.000 30.000 30.000\n67 710.000 599.000 30.000 30.000\n68 635.000 45.000 30.000 30.000\n69 224.000 991.000 30.000 30.000\n70 866.000 788.000 30.000 30.000\n71 462.000 374.000 30.000 30.000\n72 710.000 1069.000 30.000 30.000\n73 568.000 1080.000 30.000 30.000\n74 825.000 1180.000 30.000 30.000\n75 422.000 601.000 30.000 30.000\n76 588.000 972.000 30.000 30.000\n77 437.000 185.000 30.000 30.000\n78 410.000 564.000 30.000 30.000\n79 343.000 1049.000 30.000 30.000\n80 87.000 1010.000 30.000 30.000\n81 1023.000 609.000 30.000 30.000\n82 356.000 236.000 30.000 30.000\n83 315.000 401.000 30.000 30.000\n84 307.000 529.000 30.000 30.000\n85 570.000 953.000 30.000 30.000\n86 1163.000 1157.000 30.000 30.000\n87 524.000 809.000 30.000 30.000\n88 992.000 923.000 30.000 30.000\n89 745.000 8.000 30.000 30.000\n90 436.000 703.000 30.000 30.000\n91 134.000 1214.000 30.000 30.000\n92 69.000 1161.000 30.000 30.000\n93 909.000 349.000 30.000 30.000\n94 187.000 170.000 30.000 30.000\n95 442.000 838.000 30.000 30.000\n96 705.000 9.000 30.000 30.000\n97 556.000 1001.000 30.000 30.000\n98 121.000 468.000 30.000 30.000\n99 5.000 952.000 30.000 30.000\n100 168.000 294.000 30.000 30.000\n101 825.000 998.000 30.000 30.000\n102 73.000 405.000 30.000 30.000\n103 184.000 628.000 30.000 30.000\n104 599.000 991.000 30.000 30.000\n105 376.000 1007.000 30.000 30.000\n106 751.000 343.000 30.000 30.000\n107 604.000 51.000 30.000 30.000\n108 670.000 1066.000 30.000 30.000\n109 737.000 706.000 30.000 30.000\n110 181.000 95.000 30.000 30.000\n111 395.000 861.000 30.000 30.000\n112 499.000 513.000 30.000 30.000\n113 1198.000 59.000 30.000 30.000\n114 489.000 835.000 30.000 30.000\n115 17.000 222.000 30.000 30.000\n116 652.000 1149.000 30.000 30.000\n117 961.000 358.000 30.000 30.000\n118 671.000 775.000 30.000 30.000\n119 609.000 611.000 30.000 30.000\n120 14.000 414.000 30.000 30.000\n121 66.000 627.000 30.000 30.000\n122 972.000 255.000 30.000 30.000\n123 994.000 612.000 30.000 30.000\n124 60.000 587.000 30.000 30.000\n125 740.000 75.000 30.000 30.000\n126 1078.000 693.000 30.000 30.000\n127 232.000 263.000 30.000 30.000\n128 994.000 560.000 30.000 30.000\n129 138.000 299.000 30.000 30.000\n130 747.000 718.000 30.000 30.000\n131 79.000 153.000 30.000 30.000\n132 206.000 124.000 30.000 30.000\n133 224.000 691.000 30.000 30.000\n134 738.000 756.000 30.000 30.000\n135 506.000 1178.000 30.000 30.000\n136 649.000 873.000 30.000 30.000\n137 226.000 664.000 30.000 30.000\n138 1074.000 844.000 30.000 30.000\n139 565.000 1036.000 30.000 30.000\n140 57.000 870.000 30.000 30.000\n141 203.000 738.000 30.000 30.000\n142 473.000 641.000 30.000 30.000\n143 159.000 1086.000 30.000 30.000\n144 48.000 818.000 30.000 30.000\n145 367.000 953.000 30.000 30.000\n146 1093.000 121.000 30.000 30.000\n147 986.000 1032.000 30.000 30.000\n148 58.000 96.000 30.000 30.000\n149 177.000 626.000 30.000 30.000\n150 447.000 1130.000 30.000 30.000\n151 703.000 1079.000 30.000 30.000\n152 333.000 1028.000 30.000 30.000\n153 1100.000 909.000 30.000 30.000\n154 286.000 654.000 30.000 30.000\n155 702.000 1214.000 30.000 30.000\n156 526.000 1002.000 30.000 30.000\n157 348.000 35.000 30.000 30.000\n158 298.000 1197.000 30.000 30.000\n159 882.000 611.000 30.000 30.000\n160 828.000 33.000 30.000 30.000\n161 1228.000 129.000 30.000 30.000\n162 339.000 494.000 30.000 30.000\n163 500.000 703.000 30.000 30.000\n164 780.000 857.000 30.000 30.000\n165 273.000 1176.000 30.000 30.000\n166 798.000 1148.000 30.000 30.000\n167 1174.000 713.000 30.000 30.000\n168 1031.000 372.000 30.000 30.000\n169 554.000 115.000 30.000 30.000\n170 428.000 37.000 30.000 30.000\n171 460.000 158.000 30.000 30.000\n172 860.000 576.000 30.000 30.000\n173 1221.000 1002.000 30.000 30.000\n174 247.000 349.000 30.000 30.000\n175 785.000 689.000 30.000 30.000\n176 968.000 1206.000 30.000 30.000\n177 137.000 1212.000 30.000 30.000\n178 881.000 671.000 30.000 30.000\n179 1222.000 1081.000 30.000 30.000\n180 824.000 803.000 30.000 30.000\n181 676.000 358.000 30.000 30.000\n182 249.000 1123.000 30.000 30.000\n183 1173.000 125.000 30.000 30.000\n184 112.000 470.000 30.000 30.000\n185 332.000 155.000 30.000 30.000\n186 1040.000 126.000 30.000 30.000\n187 323.000 503.000 30.000 30.000\n188 216.000 948.000 30.000 30.000\n189 791.000 1047.000 30.000 30.000\n#\n53 109\n5 1\n41 10\n24 5\n140 132\n165 104\n13 12\n9 7\n101 52\n49 18\n186 63\n160 27\n156 172\n120 28\n37 22\n133 25\n18 132\n142 158\n83 49\n156 143\n89 50\n27 21\n182 125\n109 41\n77 65\n74 71\n147 110\n141 114\n112 87\n13 54\n58 126\n23 10\n22 17\n72 18\n16 9\n126 93\n54 86\n30 4\n3 1\n176 162\n149 87\n128 17\n145 67\n110 179\n123 14\n127 87\n115 60\n61 12\n151 113\n91 149\n177 9\n22 107\n107 35\n170 39\n178 43\n62 39\n128 8\n19 11\n93 77\n132 80\n67 60\n35 24\n7 2\n173 149\n91 14\n133 165\n159 66\n144 16\n163 135\n113 120\n134 107\n116 11\n149 107\n70 5\n179 12\n188 112\n117 108\n90 36\n14 13\n155 75\n147 23\n185 95\n33 16\n76 134\n102 99\n94 74\n97 9\n46 8\n134 188\n32 25\n55 52\n73 26\n169 46\n58 31\n16 3\n17 10\n181 39\n100 88\n106 116\n103 24\n48 20\n26 10\n71 1\n37 183\n66 42\n137 55\n158 131\n119 102\n80 38\n139 121\n25 12\n10 8\n39 147\n21 5\n114 82\n85 68\n78 88\n148 50\n121 27\n51 41\n28 8\n47 5\n23 38\n65 0\n150 74\n102 84\n52 3\n161 113\n113 87\n40 26\n44 34\n144 23\n78 9\n39 21\n18 3\n109 18\n157 52\n92 2\n6 4\n135 81\n110 17\n61 85\n172 90\n60 50\n53 47\n161 63\n38 7\n175 16\n1 0\n99 97\n142 15\n177 55\n24 169\n14 138\n63 16\n21 106\n164 75\n34 24\n161 28\n45 78\n168 93\n131 51\n4 2\n54 2\n111 98\n26 28\n96 77\n104 2\n112 58\n152 0\n131 9\n108 51\n9 134\n68 46\n136 32\n12 8\n180 110\n101 11\n69 9\n130 72\n141 162\n189 85\n68 97\n95 74\n171 71\n118 16\n154 93\n11 9\n8 1\n88 45\n87 20\n105 32\n174 126\n162 32\n187 73\n86 70\n149 1\n5 55\n184 15\n64 9\n50 48\n138 136\n146 57\n118 26\n81 52\n143 36\n98 7\n76 42\n53 79\n59 11\n44 167\n75 34\n106 32\n82 62\n183 56\n147 44\n183 155\n84 12\n36 35\n122 33\n142 127\n170 7\n2 0\n102 20\n57 23\n166 8\n153 146\n20 17\n177 146\n45 18\n79 44\n169 167\n13 78\n124 9\n42 20\n180 50\n60 135\n43 23\n129 36\n29 27\n79 18\n167 2\n56 42\n114 14\n125 18\n15 12\n31 22\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v190e266.gml",
    "content": "graph\n[\n    node\n    [\n        id    0\n        label    \"\"\n        graphics\n        [\n            x    216.38\n            y    24.96\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    1\n        label    \"\"\n        graphics\n        [\n            x    79.58\n            y    1064.97\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    2\n        label    \"\"\n        graphics\n        [\n            x    388.10\n            y    1124.25\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    3\n        label    \"\"\n        graphics\n        [\n            x    94.64\n            y    729.41\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    4\n        label    \"\"\n        graphics\n        [\n            x    222.07\n            y    29.92\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    5\n        label    \"\"\n        graphics\n        [\n            x    589.66\n            y    797.00\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    6\n        label    \"\"\n        graphics\n        [\n            x    640.72\n            y    900.67\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    7\n        label    \"\"\n        graphics\n        [\n            x    566.95\n            y    1228.69\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    8\n        label    \"\"\n        graphics\n        [\n            x    93.03\n            y    428.02\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    9\n        label    \"\"\n        graphics\n        [\n            x    497.01\n            y    748.26\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    10\n        label    \"\"\n        graphics\n        [\n            x    1132.42\n            y    363.31\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    11\n        label    \"\"\n        graphics\n        [\n            x    68.77\n            y    713.23\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    12\n        label    \"\"\n        graphics\n        [\n            x    627.27\n            y    1104.57\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    13\n        label    \"\"\n        graphics\n        [\n            x    250.73\n            y    775.82\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    14\n        label    \"\"\n        graphics\n        [\n            x    521.33\n            y    659.48\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    15\n        label    \"\"\n        graphics\n        [\n            x    389.80\n            y    763.95\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    16\n        label    \"\"\n        graphics\n        [\n            x    116.72\n            y    687.62\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    17\n        label    \"\"\n        graphics\n        [\n            x    10.71\n            y    592.31\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    18\n        label    \"\"\n        graphics\n        [\n            x    1000.87\n            y    278.67\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    19\n        label    \"\"\n        graphics\n        [\n            x    892.81\n            y    456.76\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    20\n        label    \"\"\n        graphics\n        [\n            x    542.43\n            y    443.90\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    21\n        label    \"\"\n        graphics\n        [\n            x    497.85\n            y    470.49\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    22\n        label    \"\"\n        graphics\n        [\n            x    1153.22\n            y    75.91\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    23\n        label    \"\"\n        graphics\n        [\n            x    66.58\n            y    168.75\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    24\n        label    \"\"\n        graphics\n        [\n            x    958.81\n            y    742.54\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    25\n        label    \"\"\n        graphics\n        [\n            x    441.03\n            y    920.39\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    26\n        label    \"\"\n        graphics\n        [\n            x    256.70\n            y    0.25\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    27\n        label    \"\"\n        graphics\n        [\n            x    739.35\n            y    149.07\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    28\n        label    \"\"\n        graphics\n        [\n            x    1124.75\n            y    64.65\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    29\n        label    \"\"\n        graphics\n        [\n            x    667.05\n            y    543.60\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    30\n        label    \"\"\n        graphics\n        [\n            x    788.78\n            y    1028.60\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    31\n        label    \"\"\n        graphics\n        [\n            x    1125.27\n            y    582.00\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    32\n        label    \"\"\n        graphics\n        [\n            x    1049.68\n            y    959.51\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    33\n        label    \"\"\n        graphics\n        [\n            x    803.84\n            y    72.02\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    34\n        label    \"\"\n        graphics\n        [\n            x    81.88\n            y    964.85\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    35\n        label    \"\"\n        graphics\n        [\n            x    968.81\n            y    887.64\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    36\n        label    \"\"\n        graphics\n        [\n            x    650.34\n            y    838.63\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    37\n        label    \"\"\n        graphics\n        [\n            x    279.34\n            y    262.59\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    38\n        label    \"\"\n        graphics\n        [\n            x    350.11\n            y    1153.69\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    39\n        label    \"\"\n        graphics\n        [\n            x    931.34\n            y    732.47\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    40\n        label    \"\"\n        graphics\n        [\n            x    1077.06\n            y    875.40\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    41\n        label    \"\"\n        graphics\n        [\n            x    1007.30\n            y    1064.86\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    42\n        label    \"\"\n        graphics\n        [\n            x    1165.57\n            y    990.99\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    43\n        label    \"\"\n        graphics\n        [\n            x    1121.05\n            y    1055.60\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    44\n        label    \"\"\n        graphics\n        [\n            x    231.28\n            y    1106.41\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    45\n        label    \"\"\n        graphics\n        [\n            x    732.41\n            y    1227.78\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    46\n        label    \"\"\n        graphics\n        [\n            x    236.94\n            y    876.36\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    47\n        label    \"\"\n        graphics\n        [\n            x    1223.78\n            y    346.77\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    48\n        label    \"\"\n        graphics\n        [\n            x    71.19\n            y    909.18\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    49\n        label    \"\"\n        graphics\n        [\n            x    383.62\n            y    203.29\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    50\n        label    \"\"\n        graphics\n        [\n            x    896.94\n            y    1184.41\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    51\n        label    \"\"\n        graphics\n        [\n            x    549.27\n            y    364.43\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    52\n        label    \"\"\n        graphics\n        [\n            x    730.68\n            y    567.44\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    53\n        label    \"\"\n        graphics\n        [\n            x    153.15\n            y    218.63\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    54\n        label    \"\"\n        graphics\n        [\n            x    962.54\n            y    667.36\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    55\n        label    \"\"\n        graphics\n        [\n            x    9.80\n            y    51.17\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    56\n        label    \"\"\n        graphics\n        [\n            x    1193.14\n            y    39.99\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    57\n        label    \"\"\n        graphics\n        [\n            x    267.29\n            y    739.80\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    58\n        label    \"\"\n        graphics\n        [\n            x    611.33\n            y    521.27\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    59\n        label    \"\"\n        graphics\n        [\n            x    425.59\n            y    378.47\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    60\n        label    \"\"\n        graphics\n        [\n            x    752.65\n            y    375.89\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    61\n        label    \"\"\n        graphics\n        [\n            x    1153.08\n            y    1131.05\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    62\n        label    \"\"\n        graphics\n        [\n            x    78.33\n            y    1155.29\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    63\n        label    \"\"\n        graphics\n        [\n            x    39.23\n            y    286.58\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    64\n        label    \"\"\n        graphics\n        [\n            x    574.49\n            y    919.16\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    65\n        label    \"\"\n        graphics\n        [\n            x    307.03\n            y    641.83\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    66\n        label    \"\"\n        graphics\n        [\n            x    234.19\n            y    957.99\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    67\n        label    \"\"\n        graphics\n        [\n            x    871.25\n            y    988.24\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    68\n        label    \"\"\n        graphics\n        [\n            x    1026.87\n            y    754.30\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    69\n        label    \"\"\n        graphics\n        [\n            x    1038.40\n            y    26.44\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    70\n        label    \"\"\n        graphics\n        [\n            x    1136.12\n            y    905.64\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    71\n        label    \"\"\n        graphics\n        [\n            x    146.13\n            y    859.99\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    72\n        label    \"\"\n        graphics\n        [\n            x    791.90\n            y    256.11\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    73\n        label    \"\"\n        graphics\n        [\n            x    65.38\n            y    787.57\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    74\n        label    \"\"\n        graphics\n        [\n            x    828.58\n            y    428.39\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    75\n        label    \"\"\n        graphics\n        [\n            x    294.63\n            y    639.43\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    76\n        label    \"\"\n        graphics\n        [\n            x    436.69\n            y    476.92\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    77\n        label    \"\"\n        graphics\n        [\n            x    1219.37\n            y    1065.24\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    78\n        label    \"\"\n        graphics\n        [\n            x    998.15\n            y    215.52\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    79\n        label    \"\"\n        graphics\n        [\n            x    747.66\n            y    424.81\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    80\n        label    \"\"\n        graphics\n        [\n            x    996.33\n            y    592.07\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    81\n        label    \"\"\n        graphics\n        [\n            x    179.65\n            y    485.08\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    82\n        label    \"\"\n        graphics\n        [\n            x    862.81\n            y    851.46\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    83\n        label    \"\"\n        graphics\n        [\n            x    1160.12\n            y    126.78\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    84\n        label    \"\"\n        graphics\n        [\n            x    988.25\n            y    636.02\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    85\n        label    \"\"\n        graphics\n        [\n            x    505.72\n            y    220.74\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    86\n        label    \"\"\n        graphics\n        [\n            x    995.51\n            y    136.31\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    87\n        label    \"\"\n        graphics\n        [\n            x    943.25\n            y    400.21\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    88\n        label    \"\"\n        graphics\n        [\n            x    844.13\n            y    425.44\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    89\n        label    \"\"\n        graphics\n        [\n            x    73.20\n            y    462.41\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    90\n        label    \"\"\n        graphics\n        [\n            x    309.80\n            y    439.66\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    91\n        label    \"\"\n        graphics\n        [\n            x    577.57\n            y    720.15\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    92\n        label    \"\"\n        graphics\n        [\n            x    30.23\n            y    854.68\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    93\n        label    \"\"\n        graphics\n        [\n            x    636.82\n            y    723.71\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    94\n        label    \"\"\n        graphics\n        [\n            x    237.13\n            y    957.83\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    95\n        label    \"\"\n        graphics\n        [\n            x    1105.12\n            y    519.59\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    96\n        label    \"\"\n        graphics\n        [\n            x    1197.16\n            y    1191.33\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    97\n        label    \"\"\n        graphics\n        [\n            x    1229.50\n            y    566.06\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    98\n        label    \"\"\n        graphics\n        [\n            x    247.67\n            y    181.77\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    99\n        label    \"\"\n        graphics\n        [\n            x    1110.34\n            y    480.24\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    100\n        label    \"\"\n        graphics\n        [\n            x    1159.75\n            y    354.61\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    101\n        label    \"\"\n        graphics\n        [\n            x    456.08\n            y    897.14\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    102\n        label    \"\"\n        graphics\n        [\n            x    50.00\n            y    702.34\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    103\n        label    \"\"\n        graphics\n        [\n            x    679.75\n            y    275.23\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    104\n        label    \"\"\n        graphics\n        [\n            x    158.79\n            y    96.29\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    105\n        label    \"\"\n        graphics\n        [\n            x    1022.85\n            y    988.71\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    106\n        label    \"\"\n        graphics\n        [\n            x    25.79\n            y    1004.39\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    107\n        label    \"\"\n        graphics\n        [\n            x    342.47\n            y    877.17\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    108\n        label    \"\"\n        graphics\n        [\n            x    626.11\n            y    8.31\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    109\n        label    \"\"\n        graphics\n        [\n            x    1061.69\n            y    405.12\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    110\n        label    \"\"\n        graphics\n        [\n            x    958.15\n            y    57.14\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    111\n        label    \"\"\n        graphics\n        [\n            x    1078.66\n            y    1180.88\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    112\n        label    \"\"\n        graphics\n        [\n            x    1057.85\n            y    45.33\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    113\n        label    \"\"\n        graphics\n        [\n            x    244.58\n            y    119.55\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    114\n        label    \"\"\n        graphics\n        [\n            x    109.48\n            y    19.91\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    115\n        label    \"\"\n        graphics\n        [\n            x    18.52\n            y    90.38\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    116\n        label    \"\"\n        graphics\n        [\n            x    844.30\n            y    114.67\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    117\n        label    \"\"\n        graphics\n        [\n            x    1065.07\n            y    701.81\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    118\n        label    \"\"\n        graphics\n        [\n            x    834.06\n            y    103.75\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    119\n        label    \"\"\n        graphics\n        [\n            x    199.92\n            y    440.76\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    120\n        label    \"\"\n        graphics\n        [\n            x    704.84\n            y    1151.03\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    121\n        label    \"\"\n        graphics\n        [\n            x    772.15\n            y    301.28\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    122\n        label    \"\"\n        graphics\n        [\n            x    258.39\n            y    835.64\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    123\n        label    \"\"\n        graphics\n        [\n            x    639.36\n            y    175.92\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    124\n        label    \"\"\n        graphics\n        [\n            x    785.32\n            y    63.04\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    125\n        label    \"\"\n        graphics\n        [\n            x    534.72\n            y    1200.22\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    126\n        label    \"\"\n        graphics\n        [\n            x    329.70\n            y    336.13\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    127\n        label    \"\"\n        graphics\n        [\n            x    809.26\n            y    339.72\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    128\n        label    \"\"\n        graphics\n        [\n            x    312.01\n            y    1028.73\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    129\n        label    \"\"\n        graphics\n        [\n            x    1009.65\n            y    495.58\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    130\n        label    \"\"\n        graphics\n        [\n            x    612.57\n            y    1100.17\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    131\n        label    \"\"\n        graphics\n        [\n            x    298.15\n            y    660.76\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    132\n        label    \"\"\n        graphics\n        [\n            x    254.25\n            y    532.79\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    133\n        label    \"\"\n        graphics\n        [\n            x    391.81\n            y    153.05\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    134\n        label    \"\"\n        graphics\n        [\n            x    1069.66\n            y    141.98\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    135\n        label    \"\"\n        graphics\n        [\n            x    736.25\n            y    618.21\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    136\n        label    \"\"\n        graphics\n        [\n            x    590.08\n            y    1011.85\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    137\n        label    \"\"\n        graphics\n        [\n            x    188.18\n            y    1128.28\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    138\n        label    \"\"\n        graphics\n        [\n            x    1190.04\n            y    1018.43\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    139\n        label    \"\"\n        graphics\n        [\n            x    766.78\n            y    1009.09\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    140\n        label    \"\"\n        graphics\n        [\n            x    97.72\n            y    754.28\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    141\n        label    \"\"\n        graphics\n        [\n            x    857.31\n            y    822.68\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    142\n        label    \"\"\n        graphics\n        [\n            x    747.37\n            y    353.71\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    143\n        label    \"\"\n        graphics\n        [\n            x    859.47\n            y    511.24\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    144\n        label    \"\"\n        graphics\n        [\n            x    672.55\n            y    809.70\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    145\n        label    \"\"\n        graphics\n        [\n            x    1060.08\n            y    324.39\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    146\n        label    \"\"\n        graphics\n        [\n            x    777.08\n            y    1179.80\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    147\n        label    \"\"\n        graphics\n        [\n            x    981.40\n            y    881.46\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    148\n        label    \"\"\n        graphics\n        [\n            x    238.95\n            y    453.10\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    149\n        label    \"\"\n        graphics\n        [\n            x    179.68\n            y    188.10\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    150\n        label    \"\"\n        graphics\n        [\n            x    1214.04\n            y    86.96\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    151\n        label    \"\"\n        graphics\n        [\n            x    272.88\n            y    1000.53\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    152\n        label    \"\"\n        graphics\n        [\n            x    1117.73\n            y    962.46\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    153\n        label    \"\"\n        graphics\n        [\n            x    470.29\n            y    696.53\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    154\n        label    \"\"\n        graphics\n        [\n            x    1204.47\n            y    1184.48\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    155\n        label    \"\"\n        graphics\n        [\n            x    508.51\n            y    559.37\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    156\n        label    \"\"\n        graphics\n        [\n            x    887.90\n            y    1168.91\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    157\n        label    \"\"\n        graphics\n        [\n            x    1215.05\n            y    270.42\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    158\n        label    \"\"\n        graphics\n        [\n            x    49.49\n            y    974.93\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    159\n        label    \"\"\n        graphics\n        [\n            x    1112.11\n            y    181.06\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    160\n        label    \"\"\n        graphics\n        [\n            x    706.79\n            y    755.40\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    161\n        label    \"\"\n        graphics\n        [\n            x    23.97\n            y    608.84\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    162\n        label    \"\"\n        graphics\n        [\n            x    738.91\n            y    1106.45\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    163\n        label    \"\"\n        graphics\n        [\n            x    516.32\n            y    157.15\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    164\n        label    \"\"\n        graphics\n        [\n            x    1065.68\n            y    2.75\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    165\n        label    \"\"\n        graphics\n        [\n            x    719.73\n            y    48.70\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    166\n        label    \"\"\n        graphics\n        [\n            x    114.05\n            y    428.53\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    167\n        label    \"\"\n        graphics\n        [\n            x    795.59\n            y    359.14\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    168\n        label    \"\"\n        graphics\n        [\n            x    329.02\n            y    859.28\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    169\n        label    \"\"\n        graphics\n        [\n            x    667.15\n            y    78.48\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    170\n        label    \"\"\n        graphics\n        [\n            x    1003.06\n            y    1208.85\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    171\n        label    \"\"\n        graphics\n        [\n            x    441.65\n            y    395.97\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    172\n        label    \"\"\n        graphics\n        [\n            x    800.89\n            y    970.24\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    173\n        label    \"\"\n        graphics\n        [\n            x    531.77\n            y    209.72\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    174\n        label    \"\"\n        graphics\n        [\n            x    534.66\n            y    1177.39\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    175\n        label    \"\"\n        graphics\n        [\n            x    616.64\n            y    1069.88\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    176\n        label    \"\"\n        graphics\n        [\n            x    258.10\n            y    320.47\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    177\n        label    \"\"\n        graphics\n        [\n            x    1130.69\n            y    971.31\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    178\n        label    \"\"\n        graphics\n        [\n            x    1044.91\n            y    833.88\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    179\n        label    \"\"\n        graphics\n        [\n            x    584.32\n            y    470.10\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    180\n        label    \"\"\n        graphics\n        [\n            x    608.70\n            y    722.58\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    181\n        label    \"\"\n        graphics\n        [\n            x    544.50\n            y    517.95\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    182\n        label    \"\"\n        graphics\n        [\n            x    1063.10\n            y    338.07\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    183\n        label    \"\"\n        graphics\n        [\n            x    243.95\n            y    922.16\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    184\n        label    \"\"\n        graphics\n        [\n            x    702.58\n            y    914.12\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    185\n        label    \"\"\n        graphics\n        [\n            x    238.22\n            y    998.51\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    186\n        label    \"\"\n        graphics\n        [\n            x    20.95\n            y    680.08\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    187\n        label    \"\"\n        graphics\n        [\n            x    1053.65\n            y    36.71\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    188\n        label    \"\"\n        graphics\n        [\n            x    255.19\n            y    396.63\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    189\n        label    \"\"\n        graphics\n        [\n            x    84.23\n            y    840.00\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    edge\n    [\n        source    1\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    1\n        target    159\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    10\n        target    127\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    10\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    100\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    100\n        target    20\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    101\n        target    58\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    102\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    103\n        target    86\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    104\n        target    73\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    105\n        target    104\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    105\n        target    165\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    106\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    106\n        target    41\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    107\n        target    186\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    107\n        target    62\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    108\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    109\n        target    53\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    11\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    110\n        target    144\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    110\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    111\n        target    74\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    112\n        target    92\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    113\n        target    109\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    114\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    114\n        target    148\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    115\n        target    103\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    116\n        target    89\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    117\n        target    36\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    117\n        target    50\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    118\n        target    41\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    119\n        target    105\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    119\n        target    98\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    12\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    120\n        target    59\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    121\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    122\n        target    28\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    123\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    124\n        target    92\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    125\n        target    110\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    126\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    127\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    128\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    129\n        target    28\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    13\n        target    27\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    13\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    130\n        target    92\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    130\n        target    97\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    131\n        target    91\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    132\n        target    50\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    133\n        target    33\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    134\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    135\n        target    95\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    136\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    136\n        target    185\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    137\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    138\n        target    174\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    138\n        target    54\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    139\n        target    133\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    139\n        target    175\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    139\n        target    68\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    14\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    140\n        target    87\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    141\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    142\n        target    135\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    143\n        target    130\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    143\n        target    89\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    144\n        target    75\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    145\n        target    50\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    146\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    147\n        target    136\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    148\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    148\n        target    99\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    149\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    15\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    150\n        target    54\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    151\n        target    45\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    152\n        target    177\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    152\n        target    61\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    153\n        target    86\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    154\n        target    124\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    154\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    155\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    155\n        target    145\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    156\n        target    52\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    157\n        target    147\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    157\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    158\n        target    118\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    159\n        target    156\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    16\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    160\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    161\n        target    122\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    161\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    162\n        target    31\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    163\n        target    122\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    164\n        target    130\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    165\n        target    122\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    165\n        target    58\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    166\n        target    125\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    167\n        target    61\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    168\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    169\n        target    26\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    17\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    170\n        target    159\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    170\n        target    46\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    171\n        target    45\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    172\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    173\n        target    27\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    174\n        target    100\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    175\n        target    165\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    175\n        target    46\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    175\n        target    61\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    176\n        target    138\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    177\n        target    114\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    178\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    179\n        target    114\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    18\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    180\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    181\n        target    125\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    181\n        target    92\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    182\n        target    109\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    183\n        target    164\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    183\n        target    41\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    184\n        target    131\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    184\n        target    153\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    185\n        target    111\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    185\n        target    45\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    186\n        target    26\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    187\n        target    66\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    187\n        target    76\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    188\n        target    153\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    189\n        target    186\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    19\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    2\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    20\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    21\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    22\n        target    118\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    22\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    22\n        target    85\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    23\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    24\n        target    127\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    24\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    25\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    25\n        target    51\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    26\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    27\n        target    102\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    27\n        target    133\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    27\n        target    141\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    27\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    27\n        target    57\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    28\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    29\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    29\n        target    43\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    29\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    3\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    30\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    30\n        target    137\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    31\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    32\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    33\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    34\n        target    20\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    35\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    36\n        target    180\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    36\n        target    32\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    36\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    37\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    37\n        target    161\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    37\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    37\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    38\n        target    29\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    38\n        target    83\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    39\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    4\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    4\n        target    137\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    40\n        target    141\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    40\n        target    28\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    41\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    41\n        target    40\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    42\n        target    153\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    42\n        target    20\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    43\n        target    25\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    44\n        target    38\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    45\n        target    41\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    45\n        target    52\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    46\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    47\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    48\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    49\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    49\n        target    72\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    5\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    50\n        target    181\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    50\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    51\n        target    33\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    52\n        target    38\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    53\n        target    50\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    54\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    55\n        target    39\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    56\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    57\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    57\n        target    156\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    58\n        target    24\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    59\n        target    187\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    59\n        target    42\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    6\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    6\n        target    84\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    60\n        target    59\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    61\n        target    131\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    61\n        target    29\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    62\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    63\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    64\n        target    59\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    65\n        target    64\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    66\n        target    33\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    66\n        target    65\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    67\n        target    33\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    68\n        target    24\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    69\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    69\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    7\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    70\n        target    65\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    71\n        target    32\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    72\n        target    101\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    72\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    73\n        target    128\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    73\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    73\n        target    97\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    74\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    75\n        target    36\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    76\n        target    167\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    76\n        target    20\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    76\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    77\n        target    36\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    78\n        target    58\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    79\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    8\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    80\n        target    155\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    80\n        target    30\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    81\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    82\n        target    42\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    82\n        target    90\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    83\n        target    56\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    84\n        target    35\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    84\n        target    69\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    85\n        target    71\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    86\n        target    75\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    87\n        target    34\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    88\n        target    85\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    89\n        target    153\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    89\n        target    182\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    89\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    9\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    90\n        target    27\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    91\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    92\n        target    79\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    93\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    93\n        target    77\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    93\n        target    92\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    94\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    95\n        target    142\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    95\n        target    90\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    96\n        target    163\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    96\n        target    52\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    96\n        target    68\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    97\n        target    65\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    98\n        target    36\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    99\n        target    55\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n]\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v190e266.tglf",
    "content": "0 216.000 24.000 30.000 30.000\n1 79.000 1064.000 30.000 30.000\n2 388.000 1124.000 30.000 30.000\n3 94.000 729.000 30.000 30.000\n4 222.000 29.000 30.000 30.000\n5 589.000 797.000 30.000 30.000\n6 640.000 900.000 30.000 30.000\n7 566.000 1228.000 30.000 30.000\n8 93.000 428.000 30.000 30.000\n9 497.000 748.000 30.000 30.000\n10 1132.000 363.000 30.000 30.000\n11 68.000 713.000 30.000 30.000\n12 627.000 1104.000 30.000 30.000\n13 250.000 775.000 30.000 30.000\n14 521.000 659.000 30.000 30.000\n15 389.000 763.000 30.000 30.000\n16 116.000 687.000 30.000 30.000\n17 10.000 592.000 30.000 30.000\n18 1000.000 278.000 30.000 30.000\n19 892.000 456.000 30.000 30.000\n20 542.000 443.000 30.000 30.000\n21 497.000 470.000 30.000 30.000\n22 1153.000 75.000 30.000 30.000\n23 66.000 168.000 30.000 30.000\n24 958.000 742.000 30.000 30.000\n25 441.000 920.000 30.000 30.000\n26 256.000 0.000 30.000 30.000\n27 739.000 149.000 30.000 30.000\n28 1124.000 64.000 30.000 30.000\n29 667.000 543.000 30.000 30.000\n30 788.000 1028.000 30.000 30.000\n31 1125.000 582.000 30.000 30.000\n32 1049.000 959.000 30.000 30.000\n33 803.000 72.000 30.000 30.000\n34 81.000 964.000 30.000 30.000\n35 968.000 887.000 30.000 30.000\n36 650.000 838.000 30.000 30.000\n37 279.000 262.000 30.000 30.000\n38 350.000 1153.000 30.000 30.000\n39 931.000 732.000 30.000 30.000\n40 1077.000 875.000 30.000 30.000\n41 1007.000 1064.000 30.000 30.000\n42 1165.000 990.000 30.000 30.000\n43 1121.000 1055.000 30.000 30.000\n44 231.000 1106.000 30.000 30.000\n45 732.000 1227.000 30.000 30.000\n46 236.000 876.000 30.000 30.000\n47 1223.000 346.000 30.000 30.000\n48 71.000 909.000 30.000 30.000\n49 383.000 203.000 30.000 30.000\n50 896.000 1184.000 30.000 30.000\n51 549.000 364.000 30.000 30.000\n52 730.000 567.000 30.000 30.000\n53 153.000 218.000 30.000 30.000\n54 962.000 667.000 30.000 30.000\n55 9.000 51.000 30.000 30.000\n56 1193.000 39.000 30.000 30.000\n57 267.000 739.000 30.000 30.000\n58 611.000 521.000 30.000 30.000\n59 425.000 378.000 30.000 30.000\n60 752.000 375.000 30.000 30.000\n61 1153.000 1131.000 30.000 30.000\n62 78.000 1155.000 30.000 30.000\n63 39.000 286.000 30.000 30.000\n64 574.000 919.000 30.000 30.000\n65 307.000 641.000 30.000 30.000\n66 234.000 957.000 30.000 30.000\n67 871.000 988.000 30.000 30.000\n68 1026.000 754.000 30.000 30.000\n69 1038.000 26.000 30.000 30.000\n70 1136.000 905.000 30.000 30.000\n71 146.000 859.000 30.000 30.000\n72 791.000 256.000 30.000 30.000\n73 65.000 787.000 30.000 30.000\n74 828.000 428.000 30.000 30.000\n75 294.000 639.000 30.000 30.000\n76 436.000 476.000 30.000 30.000\n77 1219.000 1065.000 30.000 30.000\n78 998.000 215.000 30.000 30.000\n79 747.000 424.000 30.000 30.000\n80 996.000 592.000 30.000 30.000\n81 179.000 485.000 30.000 30.000\n82 862.000 851.000 30.000 30.000\n83 1160.000 126.000 30.000 30.000\n84 988.000 636.000 30.000 30.000\n85 505.000 220.000 30.000 30.000\n86 995.000 136.000 30.000 30.000\n87 943.000 400.000 30.000 30.000\n88 844.000 425.000 30.000 30.000\n89 73.000 462.000 30.000 30.000\n90 309.000 439.000 30.000 30.000\n91 577.000 720.000 30.000 30.000\n92 30.000 854.000 30.000 30.000\n93 636.000 723.000 30.000 30.000\n94 237.000 957.000 30.000 30.000\n95 1105.000 519.000 30.000 30.000\n96 1197.000 1191.000 30.000 30.000\n97 1229.000 566.000 30.000 30.000\n98 247.000 181.000 30.000 30.000\n99 1110.000 480.000 30.000 30.000\n100 1159.000 354.000 30.000 30.000\n101 456.000 897.000 30.000 30.000\n102 50.000 702.000 30.000 30.000\n103 679.000 275.000 30.000 30.000\n104 158.000 96.000 30.000 30.000\n105 1022.000 988.000 30.000 30.000\n106 25.000 1004.000 30.000 30.000\n107 342.000 877.000 30.000 30.000\n108 626.000 8.000 30.000 30.000\n109 1061.000 405.000 30.000 30.000\n110 958.000 57.000 30.000 30.000\n111 1078.000 1180.000 30.000 30.000\n112 1057.000 45.000 30.000 30.000\n113 244.000 119.000 30.000 30.000\n114 109.000 19.000 30.000 30.000\n115 18.000 90.000 30.000 30.000\n116 844.000 114.000 30.000 30.000\n117 1065.000 701.000 30.000 30.000\n118 834.000 103.000 30.000 30.000\n119 199.000 440.000 30.000 30.000\n120 704.000 1151.000 30.000 30.000\n121 772.000 301.000 30.000 30.000\n122 258.000 835.000 30.000 30.000\n123 639.000 175.000 30.000 30.000\n124 785.000 63.000 30.000 30.000\n125 534.000 1200.000 30.000 30.000\n126 329.000 336.000 30.000 30.000\n127 809.000 339.000 30.000 30.000\n128 312.000 1028.000 30.000 30.000\n129 1009.000 495.000 30.000 30.000\n130 612.000 1100.000 30.000 30.000\n131 298.000 660.000 30.000 30.000\n132 254.000 532.000 30.000 30.000\n133 391.000 153.000 30.000 30.000\n134 1069.000 141.000 30.000 30.000\n135 736.000 618.000 30.000 30.000\n136 590.000 1011.000 30.000 30.000\n137 188.000 1128.000 30.000 30.000\n138 1190.000 1018.000 30.000 30.000\n139 766.000 1009.000 30.000 30.000\n140 97.000 754.000 30.000 30.000\n141 857.000 822.000 30.000 30.000\n142 747.000 353.000 30.000 30.000\n143 859.000 511.000 30.000 30.000\n144 672.000 809.000 30.000 30.000\n145 1060.000 324.000 30.000 30.000\n146 777.000 1179.000 30.000 30.000\n147 981.000 881.000 30.000 30.000\n148 238.000 453.000 30.000 30.000\n149 179.000 188.000 30.000 30.000\n150 1214.000 86.000 30.000 30.000\n151 272.000 1000.000 30.000 30.000\n152 1117.000 962.000 30.000 30.000\n153 470.000 696.000 30.000 30.000\n154 1204.000 1184.000 30.000 30.000\n155 508.000 559.000 30.000 30.000\n156 887.000 1168.000 30.000 30.000\n157 1215.000 270.000 30.000 30.000\n158 49.000 974.000 30.000 30.000\n159 1112.000 181.000 30.000 30.000\n160 706.000 755.000 30.000 30.000\n161 23.000 608.000 30.000 30.000\n162 738.000 1106.000 30.000 30.000\n163 516.000 157.000 30.000 30.000\n164 1065.000 2.000 30.000 30.000\n165 719.000 48.000 30.000 30.000\n166 114.000 428.000 30.000 30.000\n167 795.000 359.000 30.000 30.000\n168 329.000 859.000 30.000 30.000\n169 667.000 78.000 30.000 30.000\n170 1003.000 1208.000 30.000 30.000\n171 441.000 395.000 30.000 30.000\n172 800.000 970.000 30.000 30.000\n173 531.000 209.000 30.000 30.000\n174 534.000 1177.000 30.000 30.000\n175 616.000 1069.000 30.000 30.000\n176 258.000 320.000 30.000 30.000\n177 1130.000 971.000 30.000 30.000\n178 1044.000 833.000 30.000 30.000\n179 584.000 470.000 30.000 30.000\n180 608.000 722.000 30.000 30.000\n181 544.000 517.000 30.000 30.000\n182 1063.000 338.000 30.000 30.000\n183 243.000 922.000 30.000 30.000\n184 702.000 914.000 30.000 30.000\n185 238.000 998.000 30.000 30.000\n186 20.000 680.000 30.000 30.000\n187 1053.000 36.000 30.000 30.000\n188 255.000 396.000 30.000 30.000\n189 84.000 840.000 30.000 30.000\n#\n174 100\n30 137\n164 130\n182 109\n152 177\n140 87\n149 23\n103 86\n38 29\n189 186\n188 153\n106 41\n180 17\n16 11\n143 130\n31 10\n151 45\n126 13\n56 22\n161 6\n98 36\n93 92\n37 161\n99 55\n89 182\n26 8\n100 20\n11 4\n49 72\n27 133\n153 86\n161 122\n121 23\n146 14\n88 85\n21 9\n76 167\n116 89\n136 1\n9 1\n122 28\n44 38\n137 9\n47 6\n65 64\n102 5\n12 4\n110 144\n40 28\n74 10\n38 83\n29 43\n15 5\n20 18\n114 1\n61 29\n35 23\n145 50\n8 2\n134 9\n48 22\n123 6\n72 101\n128 4\n42 153\n84 35\n178 11\n77 36\n94 1\n50 6\n53 50\n37 18\n139 175\n82 90\n36 180\n187 76\n63 16\n34 20\n109 53\n73 97\n154 124\n24 8\n1 0\n108 17\n139 68\n106 4\n81 9\n49 23\n129 28\n169 26\n107 186\n155 145\n43 25\n139 133\n22 85\n165 58\n160 21\n117 36\n57 156\n115 103\n175 46\n138 174\n71 32\n66 33\n93 18\n60 59\n1 159\n23 15\n166 125\n155 10\n92 79\n91 13\n17 3\n84 69\n27 21\n185 45\n177 114\n41 23\n79 5\n135 95\n18 9\n96 163\n162 31\n69 8\n46 22\n105 104\n36 7\n87 34\n3 2\n95 142\n101 58\n119 98\n107 62\n78 58\n13 8\n10 127\n82 42\n170 159\n83 56\n150 54\n72 9\n25 13\n93 77\n80 155\n55 39\n167 61\n175 61\n59 42\n158 118\n10 8\n45 41\n24 127\n96 68\n142 135\n22 118\n147 136\n80 30\n172 6\n111 74\n76 20\n73 18\n64 59\n170 46\n184 153\n112 92\n119 105\n42 20\n5 3\n37 12\n100 11\n41 40\n67 33\n7 0\n89 153\n183 164\n130 97\n89 21\n181 125\n27 141\n136 185\n148 99\n163 122\n6 5\n86 75\n124 92\n156 52\n154 6\n51 33\n2 1\n175 165\n14 4\n113 109\n141 8\n171 45\n54 5\n105 165\n117 50\n57 15\n52 38\n120 59\n165 122\n45 52\n27 57\n76 8\n37 9\n143 89\n118 41\n62 22\n183 41\n58 24\n110 22\n68 24\n4 137\n69 13\n144 75\n50 181\n176 138\n70 65\n148 17\n125 110\n29 21\n61 131\n29 6\n19 6\n132 50\n28 11\n39 0\n133 33\n186 26\n131 91\n185 111\n59 187\n181 92\n138 54\n184 131\n25 51\n36 32\n13 27\n27 102\n168 22\n4 1\n159 156\n30 12\n152 61\n32 12\n90 27\n104 73\n97 65\n95 90\n157 7\n114 148\n75 36\n6 84\n130 92\n22 14\n187 66\n96 52\n179 114\n157 147\n127 11\n173 27\n73 128\n85 71\n66 65\n40 141\n33 16\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v190e285.gml",
    "content": "graph\n[\n    node\n    [\n        id    0\n        label    \"\"\n        graphics\n        [\n            x    199.70\n            y    876.55\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    1\n        label    \"\"\n        graphics\n        [\n            x    423.46\n            y    872.04\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    2\n        label    \"\"\n        graphics\n        [\n            x    970.56\n            y    920.91\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    3\n        label    \"\"\n        graphics\n        [\n            x    826.09\n            y    56.07\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    4\n        label    \"\"\n        graphics\n        [\n            x    1117.55\n            y    63.38\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    5\n        label    \"\"\n        graphics\n        [\n            x    477.71\n            y    790.45\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    6\n        label    \"\"\n        graphics\n        [\n            x    685.76\n            y    1080.20\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    7\n        label    \"\"\n        graphics\n        [\n            x    985.47\n            y    323.75\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    8\n        label    \"\"\n        graphics\n        [\n            x    807.29\n            y    882.13\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    9\n        label    \"\"\n        graphics\n        [\n            x    206.52\n            y    1161.96\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    10\n        label    \"\"\n        graphics\n        [\n            x    1022.11\n            y    306.88\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    11\n        label    \"\"\n        graphics\n        [\n            x    419.13\n            y    1105.61\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    12\n        label    \"\"\n        graphics\n        [\n            x    987.72\n            y    250.40\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    13\n        label    \"\"\n        graphics\n        [\n            x    1176.41\n            y    277.50\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    14\n        label    \"\"\n        graphics\n        [\n            x    818.49\n            y    629.57\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    15\n        label    \"\"\n        graphics\n        [\n            x    218.93\n            y    688.45\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    16\n        label    \"\"\n        graphics\n        [\n            x    1059.79\n            y    127.28\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    17\n        label    \"\"\n        graphics\n        [\n            x    470.49\n            y    1025.51\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    18\n        label    \"\"\n        graphics\n        [\n            x    781.94\n            y    513.13\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    19\n        label    \"\"\n        graphics\n        [\n            x    161.66\n            y    558.08\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    20\n        label    \"\"\n        graphics\n        [\n            x    828.41\n            y    981.77\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    21\n        label    \"\"\n        graphics\n        [\n            x    42.17\n            y    1023.56\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    22\n        label    \"\"\n        graphics\n        [\n            x    772.13\n            y    1077.62\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    23\n        label    \"\"\n        graphics\n        [\n            x    629.64\n            y    154.90\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    24\n        label    \"\"\n        graphics\n        [\n            x    362.03\n            y    531.46\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    25\n        label    \"\"\n        graphics\n        [\n            x    540.94\n            y    737.88\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    26\n        label    \"\"\n        graphics\n        [\n            x    831.92\n            y    349.73\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    27\n        label    \"\"\n        graphics\n        [\n            x    511.07\n            y    1198.83\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    28\n        label    \"\"\n        graphics\n        [\n            x    642.06\n            y    947.66\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    29\n        label    \"\"\n        graphics\n        [\n            x    1213.39\n            y    229.01\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    30\n        label    \"\"\n        graphics\n        [\n            x    838.68\n            y    606.33\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    31\n        label    \"\"\n        graphics\n        [\n            x    929.75\n            y    1120.83\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    32\n        label    \"\"\n        graphics\n        [\n            x    1154.37\n            y    431.47\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    33\n        label    \"\"\n        graphics\n        [\n            x    336.08\n            y    872.13\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    34\n        label    \"\"\n        graphics\n        [\n            x    18.55\n            y    908.26\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    35\n        label    \"\"\n        graphics\n        [\n            x    184.36\n            y    877.23\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    36\n        label    \"\"\n        graphics\n        [\n            x    77.65\n            y    568.09\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    37\n        label    \"\"\n        graphics\n        [\n            x    596.70\n            y    383.54\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    38\n        label    \"\"\n        graphics\n        [\n            x    150.35\n            y    70.72\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    39\n        label    \"\"\n        graphics\n        [\n            x    1172.28\n            y    352.88\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    40\n        label    \"\"\n        graphics\n        [\n            x    190.86\n            y    913.02\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    41\n        label    \"\"\n        graphics\n        [\n            x    513.71\n            y    190.63\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    42\n        label    \"\"\n        graphics\n        [\n            x    1070.29\n            y    907.08\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    43\n        label    \"\"\n        graphics\n        [\n            x    80.32\n            y    91.12\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    44\n        label    \"\"\n        graphics\n        [\n            x    297.20\n            y    1031.89\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    45\n        label    \"\"\n        graphics\n        [\n            x    44.87\n            y    660.66\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    46\n        label    \"\"\n        graphics\n        [\n            x    818.52\n            y    124.19\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    47\n        label    \"\"\n        graphics\n        [\n            x    149.19\n            y    398.73\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    48\n        label    \"\"\n        graphics\n        [\n            x    912.67\n            y    619.41\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    49\n        label    \"\"\n        graphics\n        [\n            x    548.28\n            y    4.32\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    50\n        label    \"\"\n        graphics\n        [\n            x    974.13\n            y    539.69\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    51\n        label    \"\"\n        graphics\n        [\n            x    540.92\n            y    402.89\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    52\n        label    \"\"\n        graphics\n        [\n            x    532.76\n            y    572.77\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    53\n        label    \"\"\n        graphics\n        [\n            x    1141.69\n            y    325.09\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    54\n        label    \"\"\n        graphics\n        [\n            x    535.16\n            y    857.68\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    55\n        label    \"\"\n        graphics\n        [\n            x    159.12\n            y    969.89\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    56\n        label    \"\"\n        graphics\n        [\n            x    23.44\n            y    826.89\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    57\n        label    \"\"\n        graphics\n        [\n            x    947.44\n            y    824.39\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    58\n        label    \"\"\n        graphics\n        [\n            x    74.07\n            y    598.61\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    59\n        label    \"\"\n        graphics\n        [\n            x    516.91\n            y    483.82\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    60\n        label    \"\"\n        graphics\n        [\n            x    1150.96\n            y    589.58\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    61\n        label    \"\"\n        graphics\n        [\n            x    974.14\n            y    565.08\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    62\n        label    \"\"\n        graphics\n        [\n            x    1163.24\n            y    853.06\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    63\n        label    \"\"\n        graphics\n        [\n            x    420.16\n            y    1117.48\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    64\n        label    \"\"\n        graphics\n        [\n            x    177.21\n            y    710.33\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    65\n        label    \"\"\n        graphics\n        [\n            x    1121.10\n            y    363.42\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    66\n        label    \"\"\n        graphics\n        [\n            x    1207.00\n            y    302.23\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    67\n        label    \"\"\n        graphics\n        [\n            x    513.93\n            y    89.96\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    68\n        label    \"\"\n        graphics\n        [\n            x    59.89\n            y    704.63\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    69\n        label    \"\"\n        graphics\n        [\n            x    311.23\n            y    744.72\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    70\n        label    \"\"\n        graphics\n        [\n            x    863.43\n            y    680.19\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    71\n        label    \"\"\n        graphics\n        [\n            x    126.51\n            y    564.09\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    72\n        label    \"\"\n        graphics\n        [\n            x    179.12\n            y    25.07\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    73\n        label    \"\"\n        graphics\n        [\n            x    928.28\n            y    445.58\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    74\n        label    \"\"\n        graphics\n        [\n            x    408.16\n            y    615.94\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    75\n        label    \"\"\n        graphics\n        [\n            x    762.27\n            y    215.38\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    76\n        label    \"\"\n        graphics\n        [\n            x    234.53\n            y    1060.00\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    77\n        label    \"\"\n        graphics\n        [\n            x    159.36\n            y    526.18\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    78\n        label    \"\"\n        graphics\n        [\n            x    1001.71\n            y    428.38\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    79\n        label    \"\"\n        graphics\n        [\n            x    150.73\n            y    1193.02\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    80\n        label    \"\"\n        graphics\n        [\n            x    246.35\n            y    498.40\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    81\n        label    \"\"\n        graphics\n        [\n            x    228.20\n            y    927.38\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    82\n        label    \"\"\n        graphics\n        [\n            x    1079.31\n            y    135.26\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    83\n        label    \"\"\n        graphics\n        [\n            x    116.08\n            y    78.07\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    84\n        label    \"\"\n        graphics\n        [\n            x    1146.29\n            y    465.02\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    85\n        label    \"\"\n        graphics\n        [\n            x    266.66\n            y    504.01\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    86\n        label    \"\"\n        graphics\n        [\n            x    1214.58\n            y    675.42\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    87\n        label    \"\"\n        graphics\n        [\n            x    421.36\n            y    520.87\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    88\n        label    \"\"\n        graphics\n        [\n            x    1225.60\n            y    1131.41\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    89\n        label    \"\"\n        graphics\n        [\n            x    418.94\n            y    575.22\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    90\n        label    \"\"\n        graphics\n        [\n            x    331.41\n            y    1087.20\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    91\n        label    \"\"\n        graphics\n        [\n            x    722.38\n            y    740.41\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    92\n        label    \"\"\n        graphics\n        [\n            x    390.59\n            y    1007.18\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    93\n        label    \"\"\n        graphics\n        [\n            x    315.34\n            y    1034.23\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    94\n        label    \"\"\n        graphics\n        [\n            x    937.03\n            y    1108.70\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    95\n        label    \"\"\n        graphics\n        [\n            x    519.41\n            y    552.98\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    96\n        label    \"\"\n        graphics\n        [\n            x    961.19\n            y    151.52\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    97\n        label    \"\"\n        graphics\n        [\n            x    911.45\n            y    1218.22\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    98\n        label    \"\"\n        graphics\n        [\n            x    806.42\n            y    475.42\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    99\n        label    \"\"\n        graphics\n        [\n            x    282.46\n            y    647.62\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    100\n        label    \"\"\n        graphics\n        [\n            x    928.97\n            y    1135.25\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    101\n        label    \"\"\n        graphics\n        [\n            x    531.07\n            y    1035.01\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    102\n        label    \"\"\n        graphics\n        [\n            x    1024.36\n            y    390.31\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    103\n        label    \"\"\n        graphics\n        [\n            x    196.39\n            y    574.01\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    104\n        label    \"\"\n        graphics\n        [\n            x    441.56\n            y    1106.94\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    105\n        label    \"\"\n        graphics\n        [\n            x    439.36\n            y    949.86\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    106\n        label    \"\"\n        graphics\n        [\n            x    263.05\n            y    699.10\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    107\n        label    \"\"\n        graphics\n        [\n            x    211.10\n            y    750.52\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    108\n        label    \"\"\n        graphics\n        [\n            x    722.76\n            y    687.35\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    109\n        label    \"\"\n        graphics\n        [\n            x    603.69\n            y    805.26\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    110\n        label    \"\"\n        graphics\n        [\n            x    415.70\n            y    389.14\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    111\n        label    \"\"\n        graphics\n        [\n            x    410.05\n            y    1036.39\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    112\n        label    \"\"\n        graphics\n        [\n            x    1134.46\n            y    949.41\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    113\n        label    \"\"\n        graphics\n        [\n            x    392.66\n            y    1052.78\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    114\n        label    \"\"\n        graphics\n        [\n            x    410.51\n            y    907.69\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    115\n        label    \"\"\n        graphics\n        [\n            x    547.47\n            y    86.57\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    116\n        label    \"\"\n        graphics\n        [\n            x    169.87\n            y    843.19\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    117\n        label    \"\"\n        graphics\n        [\n            x    828.56\n            y    1130.57\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    118\n        label    \"\"\n        graphics\n        [\n            x    769.65\n            y    330.00\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    119\n        label    \"\"\n        graphics\n        [\n            x    722.75\n            y    11.16\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    120\n        label    \"\"\n        graphics\n        [\n            x    932.05\n            y    874.61\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    121\n        label    \"\"\n        graphics\n        [\n            x    1041.40\n            y    1130.80\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    122\n        label    \"\"\n        graphics\n        [\n            x    819.95\n            y    211.16\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    123\n        label    \"\"\n        graphics\n        [\n            x    504.71\n            y    875.55\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    124\n        label    \"\"\n        graphics\n        [\n            x    202.41\n            y    651.69\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    125\n        label    \"\"\n        graphics\n        [\n            x    519.66\n            y    96.04\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    126\n        label    \"\"\n        graphics\n        [\n            x    87.24\n            y    602.19\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    127\n        label    \"\"\n        graphics\n        [\n            x    1117.28\n            y    150.36\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    128\n        label    \"\"\n        graphics\n        [\n            x    1014.53\n            y    566.54\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    129\n        label    \"\"\n        graphics\n        [\n            x    798.69\n            y    544.21\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    130\n        label    \"\"\n        graphics\n        [\n            x    1145.55\n            y    478.10\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    131\n        label    \"\"\n        graphics\n        [\n            x    585.94\n            y    1047.11\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    132\n        label    \"\"\n        graphics\n        [\n            x    367.74\n            y    552.37\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    133\n        label    \"\"\n        graphics\n        [\n            x    111.53\n            y    89.21\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    134\n        label    \"\"\n        graphics\n        [\n            x    441.28\n            y    470.00\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    135\n        label    \"\"\n        graphics\n        [\n            x    859.72\n            y    653.52\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    136\n        label    \"\"\n        graphics\n        [\n            x    1145.28\n            y    596.03\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    137\n        label    \"\"\n        graphics\n        [\n            x    275.44\n            y    876.78\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    138\n        label    \"\"\n        graphics\n        [\n            x    323.85\n            y    80.33\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    139\n        label    \"\"\n        graphics\n        [\n            x    414.48\n            y    503.19\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    140\n        label    \"\"\n        graphics\n        [\n            x    897.44\n            y    1002.60\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    141\n        label    \"\"\n        graphics\n        [\n            x    904.34\n            y    1017.93\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    142\n        label    \"\"\n        graphics\n        [\n            x    391.97\n            y    1043.20\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    143\n        label    \"\"\n        graphics\n        [\n            x    24.30\n            y    1169.01\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    144\n        label    \"\"\n        graphics\n        [\n            x    399.33\n            y    939.67\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    145\n        label    \"\"\n        graphics\n        [\n            x    272.16\n            y    329.71\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    146\n        label    \"\"\n        graphics\n        [\n            x    82.79\n            y    1038.66\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    147\n        label    \"\"\n        graphics\n        [\n            x    768.68\n            y    65.36\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    148\n        label    \"\"\n        graphics\n        [\n            x    490.49\n            y    582.08\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    149\n        label    \"\"\n        graphics\n        [\n            x    852.76\n            y    349.20\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    150\n        label    \"\"\n        graphics\n        [\n            x    118.96\n            y    419.68\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    151\n        label    \"\"\n        graphics\n        [\n            x    152.64\n            y    820.08\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    152\n        label    \"\"\n        graphics\n        [\n            x    560.95\n            y    290.78\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    153\n        label    \"\"\n        graphics\n        [\n            x    21.75\n            y    1004.04\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    154\n        label    \"\"\n        graphics\n        [\n            x    240.20\n            y    966.78\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    155\n        label    \"\"\n        graphics\n        [\n            x    334.91\n            y    1062.26\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    156\n        label    \"\"\n        graphics\n        [\n            x    1141.33\n            y    786.11\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    157\n        label    \"\"\n        graphics\n        [\n            x    958.06\n            y    485.34\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    158\n        label    \"\"\n        graphics\n        [\n            x    276.59\n            y    854.92\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    159\n        label    \"\"\n        graphics\n        [\n            x    724.46\n            y    591.97\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    160\n        label    \"\"\n        graphics\n        [\n            x    1139.21\n            y    535.75\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    161\n        label    \"\"\n        graphics\n        [\n            x    534.18\n            y    487.31\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    162\n        label    \"\"\n        graphics\n        [\n            x    1175.51\n            y    362.83\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    163\n        label    \"\"\n        graphics\n        [\n            x    214.87\n            y    582.49\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    164\n        label    \"\"\n        graphics\n        [\n            x    387.77\n            y    95.42\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    165\n        label    \"\"\n        graphics\n        [\n            x    221.66\n            y    40.80\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    166\n        label    \"\"\n        graphics\n        [\n            x    710.02\n            y    1011.13\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    167\n        label    \"\"\n        graphics\n        [\n            x    459.61\n            y    761.40\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    168\n        label    \"\"\n        graphics\n        [\n            x    662.62\n            y    308.28\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    169\n        label    \"\"\n        graphics\n        [\n            x    130.29\n            y    105.98\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    170\n        label    \"\"\n        graphics\n        [\n            x    874.37\n            y    713.81\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    171\n        label    \"\"\n        graphics\n        [\n            x    241.66\n            y    1123.93\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    172\n        label    \"\"\n        graphics\n        [\n            x    953.62\n            y    550.72\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    173\n        label    \"\"\n        graphics\n        [\n            x    466.96\n            y    222.36\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    174\n        label    \"\"\n        graphics\n        [\n            x    629.58\n            y    1210.37\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    175\n        label    \"\"\n        graphics\n        [\n            x    1141.00\n            y    169.19\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    176\n        label    \"\"\n        graphics\n        [\n            x    569.51\n            y    118.34\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    177\n        label    \"\"\n        graphics\n        [\n            x    1077.88\n            y    465.46\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    178\n        label    \"\"\n        graphics\n        [\n            x    309.58\n            y    630.23\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    179\n        label    \"\"\n        graphics\n        [\n            x    739.94\n            y    964.87\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    180\n        label    \"\"\n        graphics\n        [\n            x    454.95\n            y    623.89\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    181\n        label    \"\"\n        graphics\n        [\n            x    1219.55\n            y    16.52\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    182\n        label    \"\"\n        graphics\n        [\n            x    736.98\n            y    246.64\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    183\n        label    \"\"\n        graphics\n        [\n            x    621.65\n            y    160.81\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    184\n        label    \"\"\n        graphics\n        [\n            x    1072.80\n            y    1015.53\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    185\n        label    \"\"\n        graphics\n        [\n            x    920.13\n            y    502.92\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    186\n        label    \"\"\n        graphics\n        [\n            x    121.23\n            y    70.25\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    187\n        label    \"\"\n        graphics\n        [\n            x    1166.13\n            y    53.21\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    188\n        label    \"\"\n        graphics\n        [\n            x    34.10\n            y    1150.29\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    189\n        label    \"\"\n        graphics\n        [\n            x    696.60\n            y    907.22\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    edge\n    [\n        source    0\n        target    160\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    1\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    10\n        target    131\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    10\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    100\n        target    27\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    100\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    101\n        target    55\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    101\n        target    79\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    101\n        target    96\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    102\n        target    75\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    102\n        target    88\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    103\n        target    84\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    104\n        target    129\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    104\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    104\n        target    68\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    105\n        target    52\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    106\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    107\n        target    154\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    107\n        target    40\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    108\n        target    87\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    109\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    11\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    110\n        target    160\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    110\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    111\n        target    115\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    111\n        target    39\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    112\n        target    48\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    113\n        target    84\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    113\n        target    88\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    114\n        target    41\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    115\n        target    102\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    115\n        target    151\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    115\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    116\n        target    37\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    116\n        target    90\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    117\n        target    69\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    118\n        target    109\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    119\n        target    79\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    12\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    120\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    121\n        target    32\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    121\n        target    60\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    122\n        target    31\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    122\n        target    77\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    123\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    124\n        target    27\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    124\n        target    38\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    125\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    126\n        target    57\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    127\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    128\n        target    29\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    129\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    13\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    130\n        target    144\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    130\n        target    30\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    130\n        target    44\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    131\n        target    70\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    132\n        target    105\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    133\n        target    50\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    134\n        target    121\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    135\n        target    74\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    136\n        target    106\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    137\n        target    124\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    137\n        target    83\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    138\n        target    128\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    139\n        target    117\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    139\n        target    136\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    139\n        target    170\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    14\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    140\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    141\n        target    111\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    141\n        target    167\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    142\n        target    85\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    143\n        target    101\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    144\n        target    81\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    145\n        target    44\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    146\n        target    117\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    147\n        target    28\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    148\n        target    139\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    149\n        target    117\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    15\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    150\n        target    103\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    150\n        target    133\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    151\n        target    118\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    152\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    152\n        target    147\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    152\n        target    90\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    153\n        target    165\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    153\n        target    37\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    154\n        target    100\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    154\n        target    184\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    154\n        target    28\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    155\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    156\n        target    122\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    157\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    158\n        target    138\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    159\n        target    127\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    159\n        target    90\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    16\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    16\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    160\n        target    112\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    160\n        target    150\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    160\n        target    76\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    161\n        target    108\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    162\n        target    40\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    162\n        target    99\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    163\n        target    92\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    164\n        target    34\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    165\n        target    67\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    166\n        target    96\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    167\n        target    155\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    168\n        target    60\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    169\n        target    46\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    17\n        target    180\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    17\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    170\n        target    121\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    170\n        target    168\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    171\n        target    127\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    171\n        target    35\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    172\n        target    167\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    173\n        target    93\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    174\n        target    106\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    175\n        target    105\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    175\n        target    131\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    175\n        target    142\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    176\n        target    133\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    176\n        target    155\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    176\n        target    188\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    176\n        target    24\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    177\n        target    140\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    178\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    179\n        target    119\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    18\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    180\n        target    129\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    180\n        target    93\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    181\n        target    131\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    181\n        target    154\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    182\n        target    98\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    183\n        target    43\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    183\n        target    59\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    184\n        target    145\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    184\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    185\n        target    147\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    185\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    186\n        target    178\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    187\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    188\n        target    160\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    188\n        target    85\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    189\n        target    103\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    19\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    19\n        target    180\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    19\n        target    89\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    2\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    2\n        target    87\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    20\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    21\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    21\n        target    26\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    22\n        target    169\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    22\n        target    182\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    22\n        target    20\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    23\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    23\n        target    94\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    24\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    25\n        target    150\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    25\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    26\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    27\n        target    72\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    27\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    28\n        target    178\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    28\n        target    183\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    28\n        target    27\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    29\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    3\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    30\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    30\n        target    45\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    31\n        target    118\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    31\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    32\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    32\n        target    75\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    33\n        target    27\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    34\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    35\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    36\n        target    24\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    37\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    38\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    39\n        target    34\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    39\n        target    89\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    4\n        target    155\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    4\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    40\n        target    36\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    41\n        target    20\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    42\n        target    106\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    42\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    43\n        target    34\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    44\n        target    31\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    45\n        target    178\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    45\n        target    37\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    46\n        target    32\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    47\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    48\n        target    47\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    49\n        target    35\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    5\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    50\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    50\n        target    176\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    51\n        target    49\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    52\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    53\n        target    38\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    54\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    55\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    56\n        target    102\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    56\n        target    27\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    57\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    58\n        target    30\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    59\n        target    32\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    6\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    6\n        target    57\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    60\n        target    40\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    61\n        target    171\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    61\n        target    59\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    61\n        target    73\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    62\n        target    49\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    63\n        target    46\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    64\n        target    61\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    65\n        target    45\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    65\n        target    61\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    66\n        target    130\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    66\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    67\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    68\n        target    54\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    69\n        target    184\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    69\n        target    42\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    7\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    7\n        target    69\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    70\n        target    123\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    70\n        target    36\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    71\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    72\n        target    48\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    73\n        target    124\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    73\n        target    50\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    73\n        target    67\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    73\n        target    86\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    74\n        target    43\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    75\n        target    105\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    75\n        target    64\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    76\n        target    39\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    77\n        target    46\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    78\n        target    35\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    79\n        target    67\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    8\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    8\n        target    171\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    80\n        target    24\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    81\n        target    31\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    82\n        target    45\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    83\n        target    39\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    84\n        target    186\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    84\n        target    49\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    85\n        target    102\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    85\n        target    45\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    86\n        target    128\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    86\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    87\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    88\n        target    62\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    89\n        target    24\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    89\n        target    84\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    9\n        target    69\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    9\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    90\n        target    125\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    90\n        target    57\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    90\n        target    74\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    91\n        target    61\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    92\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    93\n        target    35\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    94\n        target    33\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    94\n        target    93\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    95\n        target    175\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    95\n        target    29\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    95\n        target    82\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    96\n        target    139\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    96\n        target    57\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    96\n        target    97\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    97\n        target    118\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    97\n        target    94\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    98\n        target    55\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    99\n        target    122\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    99\n        target    80\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n]\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v190e285.tglf",
    "content": "0 199.000 876.000 30.000 30.000\n1 423.000 872.000 30.000 30.000\n2 970.000 920.000 30.000 30.000\n3 826.000 56.000 30.000 30.000\n4 1117.000 63.000 30.000 30.000\n5 477.000 790.000 30.000 30.000\n6 685.000 1080.000 30.000 30.000\n7 985.000 323.000 30.000 30.000\n8 807.000 882.000 30.000 30.000\n9 206.000 1161.000 30.000 30.000\n10 1022.000 306.000 30.000 30.000\n11 419.000 1105.000 30.000 30.000\n12 987.000 250.000 30.000 30.000\n13 1176.000 277.000 30.000 30.000\n14 818.000 629.000 30.000 30.000\n15 218.000 688.000 30.000 30.000\n16 1059.000 127.000 30.000 30.000\n17 470.000 1025.000 30.000 30.000\n18 781.000 513.000 30.000 30.000\n19 161.000 558.000 30.000 30.000\n20 828.000 981.000 30.000 30.000\n21 42.000 1023.000 30.000 30.000\n22 772.000 1077.000 30.000 30.000\n23 629.000 154.000 30.000 30.000\n24 362.000 531.000 30.000 30.000\n25 540.000 737.000 30.000 30.000\n26 831.000 349.000 30.000 30.000\n27 511.000 1198.000 30.000 30.000\n28 642.000 947.000 30.000 30.000\n29 1213.000 229.000 30.000 30.000\n30 838.000 606.000 30.000 30.000\n31 929.000 1120.000 30.000 30.000\n32 1154.000 431.000 30.000 30.000\n33 336.000 872.000 30.000 30.000\n34 18.000 908.000 30.000 30.000\n35 184.000 877.000 30.000 30.000\n36 77.000 568.000 30.000 30.000\n37 596.000 383.000 30.000 30.000\n38 150.000 70.000 30.000 30.000\n39 1172.000 352.000 30.000 30.000\n40 190.000 913.000 30.000 30.000\n41 513.000 190.000 30.000 30.000\n42 1070.000 907.000 30.000 30.000\n43 80.000 91.000 30.000 30.000\n44 297.000 1031.000 30.000 30.000\n45 44.000 660.000 30.000 30.000\n46 818.000 124.000 30.000 30.000\n47 149.000 398.000 30.000 30.000\n48 912.000 619.000 30.000 30.000\n49 548.000 4.000 30.000 30.000\n50 974.000 539.000 30.000 30.000\n51 540.000 402.000 30.000 30.000\n52 532.000 572.000 30.000 30.000\n53 1141.000 325.000 30.000 30.000\n54 535.000 857.000 30.000 30.000\n55 159.000 969.000 30.000 30.000\n56 23.000 826.000 30.000 30.000\n57 947.000 824.000 30.000 30.000\n58 74.000 598.000 30.000 30.000\n59 516.000 483.000 30.000 30.000\n60 1150.000 589.000 30.000 30.000\n61 974.000 565.000 30.000 30.000\n62 1163.000 853.000 30.000 30.000\n63 420.000 1117.000 30.000 30.000\n64 177.000 710.000 30.000 30.000\n65 1121.000 363.000 30.000 30.000\n66 1207.000 302.000 30.000 30.000\n67 513.000 89.000 30.000 30.000\n68 59.000 704.000 30.000 30.000\n69 311.000 744.000 30.000 30.000\n70 863.000 680.000 30.000 30.000\n71 126.000 564.000 30.000 30.000\n72 179.000 25.000 30.000 30.000\n73 928.000 445.000 30.000 30.000\n74 408.000 615.000 30.000 30.000\n75 762.000 215.000 30.000 30.000\n76 234.000 1060.000 30.000 30.000\n77 159.000 526.000 30.000 30.000\n78 1001.000 428.000 30.000 30.000\n79 150.000 1193.000 30.000 30.000\n80 246.000 498.000 30.000 30.000\n81 228.000 927.000 30.000 30.000\n82 1079.000 135.000 30.000 30.000\n83 116.000 78.000 30.000 30.000\n84 1146.000 465.000 30.000 30.000\n85 266.000 504.000 30.000 30.000\n86 1214.000 675.000 30.000 30.000\n87 421.000 520.000 30.000 30.000\n88 1225.000 1131.000 30.000 30.000\n89 418.000 575.000 30.000 30.000\n90 331.000 1087.000 30.000 30.000\n91 722.000 740.000 30.000 30.000\n92 390.000 1007.000 30.000 30.000\n93 315.000 1034.000 30.000 30.000\n94 937.000 1108.000 30.000 30.000\n95 519.000 552.000 30.000 30.000\n96 961.000 151.000 30.000 30.000\n97 911.000 1218.000 30.000 30.000\n98 806.000 475.000 30.000 30.000\n99 282.000 647.000 30.000 30.000\n100 928.000 1135.000 30.000 30.000\n101 531.000 1035.000 30.000 30.000\n102 1024.000 390.000 30.000 30.000\n103 196.000 574.000 30.000 30.000\n104 441.000 1106.000 30.000 30.000\n105 439.000 949.000 30.000 30.000\n106 263.000 699.000 30.000 30.000\n107 211.000 750.000 30.000 30.000\n108 722.000 687.000 30.000 30.000\n109 603.000 805.000 30.000 30.000\n110 415.000 389.000 30.000 30.000\n111 410.000 1036.000 30.000 30.000\n112 1134.000 949.000 30.000 30.000\n113 392.000 1052.000 30.000 30.000\n114 410.000 907.000 30.000 30.000\n115 547.000 86.000 30.000 30.000\n116 169.000 843.000 30.000 30.000\n117 828.000 1130.000 30.000 30.000\n118 769.000 330.000 30.000 30.000\n119 722.000 11.000 30.000 30.000\n120 932.000 874.000 30.000 30.000\n121 1041.000 1130.000 30.000 30.000\n122 819.000 211.000 30.000 30.000\n123 504.000 875.000 30.000 30.000\n124 202.000 651.000 30.000 30.000\n125 519.000 96.000 30.000 30.000\n126 87.000 602.000 30.000 30.000\n127 1117.000 150.000 30.000 30.000\n128 1014.000 566.000 30.000 30.000\n129 798.000 544.000 30.000 30.000\n130 1145.000 478.000 30.000 30.000\n131 585.000 1047.000 30.000 30.000\n132 367.000 552.000 30.000 30.000\n133 111.000 89.000 30.000 30.000\n134 441.000 470.000 30.000 30.000\n135 859.000 653.000 30.000 30.000\n136 1145.000 596.000 30.000 30.000\n137 275.000 876.000 30.000 30.000\n138 323.000 80.000 30.000 30.000\n139 414.000 503.000 30.000 30.000\n140 897.000 1002.000 30.000 30.000\n141 904.000 1017.000 30.000 30.000\n142 391.000 1043.000 30.000 30.000\n143 24.000 1169.000 30.000 30.000\n144 399.000 939.000 30.000 30.000\n145 272.000 329.000 30.000 30.000\n146 82.000 1038.000 30.000 30.000\n147 768.000 65.000 30.000 30.000\n148 490.000 582.000 30.000 30.000\n149 852.000 349.000 30.000 30.000\n150 118.000 419.000 30.000 30.000\n151 152.000 820.000 30.000 30.000\n152 560.000 290.000 30.000 30.000\n153 21.000 1004.000 30.000 30.000\n154 240.000 966.000 30.000 30.000\n155 334.000 1062.000 30.000 30.000\n156 1141.000 786.000 30.000 30.000\n157 958.000 485.000 30.000 30.000\n158 276.000 854.000 30.000 30.000\n159 724.000 591.000 30.000 30.000\n160 1139.000 535.000 30.000 30.000\n161 534.000 487.000 30.000 30.000\n162 1175.000 362.000 30.000 30.000\n163 214.000 582.000 30.000 30.000\n164 387.000 95.000 30.000 30.000\n165 221.000 40.000 30.000 30.000\n166 710.000 1011.000 30.000 30.000\n167 459.000 761.000 30.000 30.000\n168 662.000 308.000 30.000 30.000\n169 130.000 105.000 30.000 30.000\n170 874.000 713.000 30.000 30.000\n171 241.000 1123.000 30.000 30.000\n172 953.000 550.000 30.000 30.000\n173 466.000 222.000 30.000 30.000\n174 629.000 1210.000 30.000 30.000\n175 1141.000 169.000 30.000 30.000\n176 569.000 118.000 30.000 30.000\n177 1077.000 465.000 30.000 30.000\n178 309.000 630.000 30.000 30.000\n179 739.000 964.000 30.000 30.000\n180 454.000 623.000 30.000 30.000\n181 1219.000 16.000 30.000 30.000\n182 736.000 246.000 30.000 30.000\n183 621.000 160.000 30.000 30.000\n184 1072.000 1015.000 30.000 30.000\n185 920.000 502.000 30.000 30.000\n186 121.000 70.000 30.000 30.000\n187 1166.000 53.000 30.000 30.000\n188 34.000 1150.000 30.000 30.000\n189 696.000 907.000 30.000 30.000\n#\n173 93\n66 130\n174 106\n111 39\n153 37\n8 0\n162 40\n139 117\n160 76\n22 169\n25 150\n90 74\n150 103\n101 96\n73 124\n95 82\n10 131\n4 3\n99 80\n30 17\n131 70\n179 119\n28 178\n3 0\n100 4\n141 167\n115 102\n63 46\n78 35\n129 8\n69 184\n186 178\n165 67\n0 160\n82 45\n89 24\n5 3\n87 9\n178 17\n38 12\n183 43\n84 186\n61 73\n46 32\n167 155\n125 1\n35 14\n57 18\n7 6\n132 105\n113 88\n90 57\n111 115\n121 32\n119 79\n81 31\n54 13\n64 61\n48 47\n94 33\n162 99\n16 14\n76 39\n94 93\n176 188\n110 160\n175 105\n28 183\n22 20\n19 89\n160 112\n45 178\n73 86\n65 45\n86 13\n171 127\n188 85\n91 61\n50 17\n90 125\n17 180\n152 147\n39 89\n92 18\n89 84\n11 0\n85 45\n126 57\n118 109\n114 41\n152 0\n110 17\n56 27\n120 2\n70 123\n105 52\n66 3\n135 74\n29 9\n13 0\n185 22\n28 27\n21 1\n148 139\n168 60\n184 145\n116 37\n80 24\n187 0\n45 37\n6 1\n172 167\n115 151\n176 24\n189 103\n104 129\n176 133\n51 49\n134 121\n123 22\n59 32\n26 14\n140 14\n122 31\n53 38\n75 64\n52 5\n19 1\n149 117\n9 8\n101 55\n151 118\n25 23\n183 59\n9 69\n142 85\n36 24\n2 0\n182 98\n58 30\n61 59\n14 4\n145 44\n101 79\n116 90\n133 50\n163 92\n160 150\n62 49\n99 122\n170 168\n175 131\n154 28\n37 10\n188 160\n161 108\n74 43\n137 83\n103 84\n73 50\n20 4\n70 36\n146 117\n115 17\n139 170\n156 122\n61 171\n8 171\n96 139\n56 102\n143 101\n152 90\n19 180\n100 27\n68 54\n33 27\n96 57\n171 35\n23 94\n124 38\n84 49\n75 105\n18 10\n166 96\n16 18\n30 45\n180 93\n181 154\n97 118\n7 69\n6 57\n27 9\n88 62\n96 97\n177 140\n128 29\n104 68\n1 0\n43 34\n34 23\n4 155\n102 75\n12 11\n102 88\n154 184\n42 106\n55 17\n79 67\n130 30\n107 154\n184 23\n104 15\n164 34\n15 6\n170 121\n106 12\n181 131\n73 67\n17 9\n32 75\n185 147\n60 40\n109 8\n24 11\n49 35\n77 46\n117 69\n176 155\n159 90\n159 127\n130 44\n10 3\n27 72\n42 13\n32 11\n22 182\n39 34\n71 3\n31 118\n112 48\n139 136\n158 138\n169 46\n21 26\n124 27\n40 36\n31 5\n180 129\n23 7\n154 100\n98 55\n95 175\n85 102\n69 42\n65 61\n47 11\n144 81\n127 16\n67 8\n175 142\n44 31\n72 48\n108 87\n157 7\n107 40\n95 29\n50 176\n147 28\n155 16\n113 84\n141 111\n130 144\n136 106\n2 87\n93 35\n121 60\n138 128\n150 133\n86 128\n97 94\n122 77\n83 39\n153 165\n41 20\n137 124\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v200e200.gml",
    "content": "graph\n[\n    node\n    [\n        id    0\n        label    \"\"\n        graphics\n        [\n            x    255.52\n            y    1149.74\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    1\n        label    \"\"\n        graphics\n        [\n            x    853.26\n            y    969.29\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    2\n        label    \"\"\n        graphics\n        [\n            x    1202.59\n            y    761.04\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    3\n        label    \"\"\n        graphics\n        [\n            x    634.42\n            y    1167.74\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    4\n        label    \"\"\n        graphics\n        [\n            x    846.27\n            y    663.94\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    5\n        label    \"\"\n        graphics\n        [\n            x    76.62\n            y    551.46\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    6\n        label    \"\"\n        graphics\n        [\n            x    35.15\n            y    140.45\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    7\n        label    \"\"\n        graphics\n        [\n            x    695.44\n            y    258.34\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    8\n        label    \"\"\n        graphics\n        [\n            x    1202.91\n            y    443.84\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    9\n        label    \"\"\n        graphics\n        [\n            x    847.13\n            y    64.70\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    10\n        label    \"\"\n        graphics\n        [\n            x    107.20\n            y    72.30\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    11\n        label    \"\"\n        graphics\n        [\n            x    695.82\n            y    492.63\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    12\n        label    \"\"\n        graphics\n        [\n            x    1238.12\n            y    1091.85\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    13\n        label    \"\"\n        graphics\n        [\n            x    771.09\n            y    803.41\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    14\n        label    \"\"\n        graphics\n        [\n            x    601.58\n            y    662.64\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    15\n        label    \"\"\n        graphics\n        [\n            x    543.93\n            y    990.60\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    16\n        label    \"\"\n        graphics\n        [\n            x    592.29\n            y    414.59\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    17\n        label    \"\"\n        graphics\n        [\n            x    96.92\n            y    724.41\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    18\n        label    \"\"\n        graphics\n        [\n            x    234.65\n            y    402.43\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    19\n        label    \"\"\n        graphics\n        [\n            x    1161.15\n            y    1006.01\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    20\n        label    \"\"\n        graphics\n        [\n            x    21.57\n            y    1224.42\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    21\n        label    \"\"\n        graphics\n        [\n            x    1135.84\n            y    986.28\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    22\n        label    \"\"\n        graphics\n        [\n            x    498.43\n            y    700.77\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    23\n        label    \"\"\n        graphics\n        [\n            x    301.94\n            y    6.97\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    24\n        label    \"\"\n        graphics\n        [\n            x    1169.38\n            y    283.93\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    25\n        label    \"\"\n        graphics\n        [\n            x    57.89\n            y    466.15\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    26\n        label    \"\"\n        graphics\n        [\n            x    1265.33\n            y    1216.47\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    27\n        label    \"\"\n        graphics\n        [\n            x    1200.73\n            y    20.84\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    28\n        label    \"\"\n        graphics\n        [\n            x    802.72\n            y    838.87\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    29\n        label    \"\"\n        graphics\n        [\n            x    4.04\n            y    741.31\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    30\n        label    \"\"\n        graphics\n        [\n            x    120.81\n            y    56.36\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    31\n        label    \"\"\n        graphics\n        [\n            x    465.38\n            y    280.42\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    32\n        label    \"\"\n        graphics\n        [\n            x    1083.00\n            y    1207.59\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    33\n        label    \"\"\n        graphics\n        [\n            x    1030.10\n            y    831.79\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    34\n        label    \"\"\n        graphics\n        [\n            x    1076.20\n            y    1167.90\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    35\n        label    \"\"\n        graphics\n        [\n            x    669.58\n            y    1147.17\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    36\n        label    \"\"\n        graphics\n        [\n            x    430.14\n            y    219.31\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    37\n        label    \"\"\n        graphics\n        [\n            x    469.28\n            y    1013.06\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    38\n        label    \"\"\n        graphics\n        [\n            x    412.43\n            y    269.62\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    39\n        label    \"\"\n        graphics\n        [\n            x    255.04\n            y    1070.22\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    40\n        label    \"\"\n        graphics\n        [\n            x    947.06\n            y    469.11\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    41\n        label    \"\"\n        graphics\n        [\n            x    1094.58\n            y    290.09\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    42\n        label    \"\"\n        graphics\n        [\n            x    384.75\n            y    786.64\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    43\n        label    \"\"\n        graphics\n        [\n            x    233.74\n            y    646.18\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    44\n        label    \"\"\n        graphics\n        [\n            x    822.61\n            y    1136.49\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    45\n        label    \"\"\n        graphics\n        [\n            x    296.23\n            y    10.62\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    46\n        label    \"\"\n        graphics\n        [\n            x    1255.10\n            y    55.45\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    47\n        label    \"\"\n        graphics\n        [\n            x    1123.67\n            y    538.65\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    48\n        label    \"\"\n        graphics\n        [\n            x    899.60\n            y    232.99\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    49\n        label    \"\"\n        graphics\n        [\n            x    1084.10\n            y    1155.63\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    50\n        label    \"\"\n        graphics\n        [\n            x    421.27\n            y    409.28\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    51\n        label    \"\"\n        graphics\n        [\n            x    156.14\n            y    1217.82\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    52\n        label    \"\"\n        graphics\n        [\n            x    963.08\n            y    199.50\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    53\n        label    \"\"\n        graphics\n        [\n            x    361.18\n            y    556.13\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    54\n        label    \"\"\n        graphics\n        [\n            x    589.08\n            y    152.94\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    55\n        label    \"\"\n        graphics\n        [\n            x    138.19\n            y    702.58\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    56\n        label    \"\"\n        graphics\n        [\n            x    773.88\n            y    369.83\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    57\n        label    \"\"\n        graphics\n        [\n            x    168.16\n            y    529.71\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    58\n        label    \"\"\n        graphics\n        [\n            x    423.03\n            y    275.78\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    59\n        label    \"\"\n        graphics\n        [\n            x    235.62\n            y    670.24\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    60\n        label    \"\"\n        graphics\n        [\n            x    370.26\n            y    393.85\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    61\n        label    \"\"\n        graphics\n        [\n            x    478.97\n            y    197.02\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    62\n        label    \"\"\n        graphics\n        [\n            x    1110.95\n            y    701.68\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    63\n        label    \"\"\n        graphics\n        [\n            x    1116.51\n            y    931.13\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    64\n        label    \"\"\n        graphics\n        [\n            x    103.90\n            y    495.51\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    65\n        label    \"\"\n        graphics\n        [\n            x    430.12\n            y    64.39\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    66\n        label    \"\"\n        graphics\n        [\n            x    493.50\n            y    1125.76\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    67\n        label    \"\"\n        graphics\n        [\n            x    1267.62\n            y    656.90\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    68\n        label    \"\"\n        graphics\n        [\n            x    713.43\n            y    1220.86\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    69\n        label    \"\"\n        graphics\n        [\n            x    495.11\n            y    173.40\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    70\n        label    \"\"\n        graphics\n        [\n            x    1009.99\n            y    988.18\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    71\n        label    \"\"\n        graphics\n        [\n            x    965.17\n            y    1190.84\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    72\n        label    \"\"\n        graphics\n        [\n            x    852.62\n            y    1077.76\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    73\n        label    \"\"\n        graphics\n        [\n            x    682.98\n            y    935.45\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    74\n        label    \"\"\n        graphics\n        [\n            x    121.89\n            y    915.73\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    75\n        label    \"\"\n        graphics\n        [\n            x    54.79\n            y    830.45\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    76\n        label    \"\"\n        graphics\n        [\n            x    970.23\n            y    523.59\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    77\n        label    \"\"\n        graphics\n        [\n            x    972.05\n            y    179.89\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    78\n        label    \"\"\n        graphics\n        [\n            x    484.69\n            y    846.62\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    79\n        label    \"\"\n        graphics\n        [\n            x    647.99\n            y    1034.26\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    80\n        label    \"\"\n        graphics\n        [\n            x    870.86\n            y    858.21\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    81\n        label    \"\"\n        graphics\n        [\n            x    453.20\n            y    1086.59\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    82\n        label    \"\"\n        graphics\n        [\n            x    644.02\n            y    473.56\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    83\n        label    \"\"\n        graphics\n        [\n            x    616.80\n            y    267.69\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    84\n        label    \"\"\n        graphics\n        [\n            x    225.90\n            y    1169.09\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    85\n        label    \"\"\n        graphics\n        [\n            x    1177.44\n            y    425.80\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    86\n        label    \"\"\n        graphics\n        [\n            x    560.33\n            y    1231.14\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    87\n        label    \"\"\n        graphics\n        [\n            x    806.45\n            y    1141.58\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    88\n        label    \"\"\n        graphics\n        [\n            x    1123.69\n            y    860.17\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    89\n        label    \"\"\n        graphics\n        [\n            x    171.16\n            y    1200.23\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    90\n        label    \"\"\n        graphics\n        [\n            x    524.32\n            y    1063.12\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    91\n        label    \"\"\n        graphics\n        [\n            x    646.77\n            y    1228.32\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    92\n        label    \"\"\n        graphics\n        [\n            x    387.08\n            y    66.09\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    93\n        label    \"\"\n        graphics\n        [\n            x    680.84\n            y    1103.65\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    94\n        label    \"\"\n        graphics\n        [\n            x    575.25\n            y    773.56\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    95\n        label    \"\"\n        graphics\n        [\n            x    907.80\n            y    915.19\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    96\n        label    \"\"\n        graphics\n        [\n            x    969.04\n            y    307.69\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    97\n        label    \"\"\n        graphics\n        [\n            x    79.00\n            y    1002.85\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    98\n        label    \"\"\n        graphics\n        [\n            x    167.01\n            y    944.84\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    99\n        label    \"\"\n        graphics\n        [\n            x    61.35\n            y    832.38\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    100\n        label    \"\"\n        graphics\n        [\n            x    69.49\n            y    632.74\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    101\n        label    \"\"\n        graphics\n        [\n            x    241.24\n            y    607.87\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    102\n        label    \"\"\n        graphics\n        [\n            x    741.81\n            y    1014.61\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    103\n        label    \"\"\n        graphics\n        [\n            x    356.50\n            y    1066.70\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    104\n        label    \"\"\n        graphics\n        [\n            x    1270.42\n            y    876.33\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    105\n        label    \"\"\n        graphics\n        [\n            x    529.70\n            y    556.47\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    106\n        label    \"\"\n        graphics\n        [\n            x    39.91\n            y    209.07\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    107\n        label    \"\"\n        graphics\n        [\n            x    1245.80\n            y    1115.15\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    108\n        label    \"\"\n        graphics\n        [\n            x    134.13\n            y    1134.92\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    109\n        label    \"\"\n        graphics\n        [\n            x    734.63\n            y    716.93\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    110\n        label    \"\"\n        graphics\n        [\n            x    902.10\n            y    285.30\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    111\n        label    \"\"\n        graphics\n        [\n            x    727.04\n            y    1174.13\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    112\n        label    \"\"\n        graphics\n        [\n            x    942.72\n            y    1272.25\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    113\n        label    \"\"\n        graphics\n        [\n            x    188.02\n            y    1144.78\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    114\n        label    \"\"\n        graphics\n        [\n            x    489.85\n            y    816.61\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    115\n        label    \"\"\n        graphics\n        [\n            x    979.73\n            y    1084.18\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    116\n        label    \"\"\n        graphics\n        [\n            x    357.84\n            y    1169.21\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    117\n        label    \"\"\n        graphics\n        [\n            x    641.67\n            y    1093.13\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    118\n        label    \"\"\n        graphics\n        [\n            x    262.38\n            y    723.86\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    119\n        label    \"\"\n        graphics\n        [\n            x    745.08\n            y    262.44\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    120\n        label    \"\"\n        graphics\n        [\n            x    1011.59\n            y    341.19\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    121\n        label    \"\"\n        graphics\n        [\n            x    114.36\n            y    861.92\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    122\n        label    \"\"\n        graphics\n        [\n            x    567.59\n            y    709.39\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    123\n        label    \"\"\n        graphics\n        [\n            x    166.83\n            y    190.22\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    124\n        label    \"\"\n        graphics\n        [\n            x    949.50\n            y    538.98\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    125\n        label    \"\"\n        graphics\n        [\n            x    952.78\n            y    943.14\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    126\n        label    \"\"\n        graphics\n        [\n            x    601.34\n            y    489.03\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    127\n        label    \"\"\n        graphics\n        [\n            x    161.59\n            y    1229.37\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    128\n        label    \"\"\n        graphics\n        [\n            x    568.13\n            y    804.10\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    129\n        label    \"\"\n        graphics\n        [\n            x    200.89\n            y    69.13\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    130\n        label    \"\"\n        graphics\n        [\n            x    1079.60\n            y    91.52\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    131\n        label    \"\"\n        graphics\n        [\n            x    1014.74\n            y    910.12\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    132\n        label    \"\"\n        graphics\n        [\n            x    1083.76\n            y    80.56\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    133\n        label    \"\"\n        graphics\n        [\n            x    521.56\n            y    277.17\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    134\n        label    \"\"\n        graphics\n        [\n            x    357.72\n            y    181.63\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    135\n        label    \"\"\n        graphics\n        [\n            x    906.20\n            y    16.28\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    136\n        label    \"\"\n        graphics\n        [\n            x    362.89\n            y    250.84\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    137\n        label    \"\"\n        graphics\n        [\n            x    677.83\n            y    389.00\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    138\n        label    \"\"\n        graphics\n        [\n            x    1259.51\n            y    1213.83\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    139\n        label    \"\"\n        graphics\n        [\n            x    667.88\n            y    181.42\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    140\n        label    \"\"\n        graphics\n        [\n            x    740.60\n            y    57.91\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    141\n        label    \"\"\n        graphics\n        [\n            x    246.88\n            y    357.55\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    142\n        label    \"\"\n        graphics\n        [\n            x    701.56\n            y    72.30\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    143\n        label    \"\"\n        graphics\n        [\n            x    1120.29\n            y    180.55\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    144\n        label    \"\"\n        graphics\n        [\n            x    1222.49\n            y    1200.18\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    145\n        label    \"\"\n        graphics\n        [\n            x    323.50\n            y    978.47\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    146\n        label    \"\"\n        graphics\n        [\n            x    1002.64\n            y    921.52\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    147\n        label    \"\"\n        graphics\n        [\n            x    145.98\n            y    1174.82\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    148\n        label    \"\"\n        graphics\n        [\n            x    701.23\n            y    378.11\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    149\n        label    \"\"\n        graphics\n        [\n            x    706.38\n            y    241.25\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    150\n        label    \"\"\n        graphics\n        [\n            x    524.28\n            y    19.46\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    151\n        label    \"\"\n        graphics\n        [\n            x    586.37\n            y    512.20\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    152\n        label    \"\"\n        graphics\n        [\n            x    1106.08\n            y    68.60\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    153\n        label    \"\"\n        graphics\n        [\n            x    221.32\n            y    1115.92\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    154\n        label    \"\"\n        graphics\n        [\n            x    640.94\n            y    804.15\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    155\n        label    \"\"\n        graphics\n        [\n            x    727.11\n            y    495.14\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    156\n        label    \"\"\n        graphics\n        [\n            x    901.52\n            y    1240.86\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    157\n        label    \"\"\n        graphics\n        [\n            x    639.03\n            y    947.76\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    158\n        label    \"\"\n        graphics\n        [\n            x    1001.03\n            y    651.11\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    159\n        label    \"\"\n        graphics\n        [\n            x    1136.91\n            y    617.07\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    160\n        label    \"\"\n        graphics\n        [\n            x    1172.79\n            y    782.08\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    161\n        label    \"\"\n        graphics\n        [\n            x    1199.14\n            y    759.84\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    162\n        label    \"\"\n        graphics\n        [\n            x    1142.07\n            y    1126.17\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    163\n        label    \"\"\n        graphics\n        [\n            x    54.61\n            y    701.77\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    164\n        label    \"\"\n        graphics\n        [\n            x    111.39\n            y    264.73\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    165\n        label    \"\"\n        graphics\n        [\n            x    589.56\n            y    141.00\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    166\n        label    \"\"\n        graphics\n        [\n            x    878.52\n            y    811.42\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    167\n        label    \"\"\n        graphics\n        [\n            x    766.26\n            y    1186.20\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    168\n        label    \"\"\n        graphics\n        [\n            x    154.78\n            y    509.61\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    169\n        label    \"\"\n        graphics\n        [\n            x    987.83\n            y    759.39\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    170\n        label    \"\"\n        graphics\n        [\n            x    1096.81\n            y    221.84\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    171\n        label    \"\"\n        graphics\n        [\n            x    519.78\n            y    434.23\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    172\n        label    \"\"\n        graphics\n        [\n            x    692.80\n            y    819.17\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    173\n        label    \"\"\n        graphics\n        [\n            x    526.29\n            y    940.35\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    174\n        label    \"\"\n        graphics\n        [\n            x    361.34\n            y    1202.16\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    175\n        label    \"\"\n        graphics\n        [\n            x    90.25\n            y    185.52\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    176\n        label    \"\"\n        graphics\n        [\n            x    108.99\n            y    967.78\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    177\n        label    \"\"\n        graphics\n        [\n            x    1211.61\n            y    34.23\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    178\n        label    \"\"\n        graphics\n        [\n            x    1095.23\n            y    301.39\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    179\n        label    \"\"\n        graphics\n        [\n            x    1029.48\n            y    531.21\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    180\n        label    \"\"\n        graphics\n        [\n            x    919.46\n            y    352.13\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    181\n        label    \"\"\n        graphics\n        [\n            x    673.80\n            y    1163.03\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    182\n        label    \"\"\n        graphics\n        [\n            x    323.08\n            y    507.52\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    183\n        label    \"\"\n        graphics\n        [\n            x    138.78\n            y    713.26\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    184\n        label    \"\"\n        graphics\n        [\n            x    657.87\n            y    888.78\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    185\n        label    \"\"\n        graphics\n        [\n            x    482.32\n            y    1098.27\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    186\n        label    \"\"\n        graphics\n        [\n            x    1224.21\n            y    155.04\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    187\n        label    \"\"\n        graphics\n        [\n            x    909.76\n            y    717.96\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    188\n        label    \"\"\n        graphics\n        [\n            x    903.77\n            y    1250.81\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    189\n        label    \"\"\n        graphics\n        [\n            x    1231.89\n            y    1245.33\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    190\n        label    \"\"\n        graphics\n        [\n            x    268.29\n            y    838.72\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    191\n        label    \"\"\n        graphics\n        [\n            x    929.54\n            y    458.02\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    192\n        label    \"\"\n        graphics\n        [\n            x    1150.68\n            y    398.27\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    193\n        label    \"\"\n        graphics\n        [\n            x    11.65\n            y    623.06\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    194\n        label    \"\"\n        graphics\n        [\n            x    732.37\n            y    204.21\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    195\n        label    \"\"\n        graphics\n        [\n            x    826.36\n            y    480.55\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    196\n        label    \"\"\n        graphics\n        [\n            x    561.01\n            y    752.32\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    197\n        label    \"\"\n        graphics\n        [\n            x    488.73\n            y    473.49\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    198\n        label    \"\"\n        graphics\n        [\n            x    601.68\n            y    72.86\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    199\n        label    \"\"\n        graphics\n        [\n            x    4.07\n            y    1094.62\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    edge\n    [\n        source    1\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    10\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    100\n        target    62\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    101\n        target    64\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    102\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    103\n        target    46\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    104\n        target    56\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    105\n        target    75\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    106\n        target    73\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    107\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    108\n        target    58\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    109\n        target    76\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    11\n        target    128\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    11\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    110\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    111\n        target    29\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    112\n        target    64\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    113\n        target    72\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    114\n        target    26\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    115\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    116\n        target    47\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    117\n        target    44\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    118\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    119\n        target    92\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    12\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    120\n        target    76\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    121\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    122\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    123\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    124\n        target    75\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    125\n        target    58\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    126\n        target    51\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    127\n        target    114\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    128\n        target    105\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    129\n        target    81\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    13\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    130\n        target    57\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    131\n        target    120\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    132\n        target    40\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    133\n        target    94\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    134\n        target    84\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    135\n        target    47\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    136\n        target    134\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    137\n        target    100\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    138\n        target    78\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    139\n        target    48\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    14\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    140\n        target    84\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    141\n        target    132\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    142\n        target    71\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    143\n        target    130\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    144\n        target    120\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    145\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    146\n        target    44\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    147\n        target    117\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    148\n        target    90\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    149\n        target    90\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    15\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    150\n        target    149\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    151\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    152\n        target    119\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    153\n        target    84\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    154\n        target    91\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    155\n        target    105\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    156\n        target    39\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    157\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    158\n        target    80\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    159\n        target    20\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    16\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    160\n        target    101\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    161\n        target    73\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    162\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    163\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    164\n        target    157\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    165\n        target    76\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    166\n        target    130\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    167\n        target    93\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    168\n        target    79\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    169\n        target    28\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    17\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    170\n        target    144\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    171\n        target    164\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    172\n        target    137\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    173\n        target    96\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    174\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    175\n        target    152\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    176\n        target    102\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    177\n        target    136\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    178\n        target    172\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    179\n        target    66\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    18\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    180\n        target    28\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    181\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    182\n        target    77\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    183\n        target    151\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    184\n        target    141\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    185\n        target    100\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    186\n        target    176\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    187\n        target    125\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    188\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    189\n        target    139\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    19\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    190\n        target    77\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    191\n        target    150\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    192\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    193\n        target    60\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    194\n        target    122\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    195\n        target    159\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    196\n        target    107\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    197\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    198\n        target    33\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    199\n        target    47\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    2\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    20\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    21\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    22\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    23\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    24\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    25\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    26\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    27\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    28\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    29\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    3\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    30\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    31\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    32\n        target    24\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    33\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    34\n        target    32\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    35\n        target    30\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    36\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    37\n        target    29\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    38\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    39\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    4\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    40\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    41\n        target    39\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    42\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    43\n        target    24\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    44\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    45\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    46\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    47\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    48\n        target    38\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    49\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    5\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    50\n        target    48\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    51\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    52\n        target    42\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    53\n        target    49\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    54\n        target    27\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    55\n        target    44\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    56\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    57\n        target    52\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    58\n        target    49\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    59\n        target    48\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    6\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    60\n        target    24\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    61\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    62\n        target    30\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    63\n        target    39\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    64\n        target    35\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    65\n        target    33\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    66\n        target    64\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    67\n        target    25\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    68\n        target    49\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    69\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    7\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    70\n        target    48\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    71\n        target    60\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    72\n        target    35\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    73\n        target    63\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    74\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    75\n        target    30\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    76\n        target    25\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    77\n        target    47\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    78\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    79\n        target    35\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    8\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    80\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    81\n        target    48\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    82\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    83\n        target    69\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    84\n        target    24\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    85\n        target    66\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    86\n        target    53\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    87\n        target    86\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    88\n        target    55\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    89\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    9\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    90\n        target    30\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    91\n        target    68\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    92\n        target    49\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    93\n        target    76\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    94\n        target    88\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    95\n        target    20\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    96\n        target    35\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    97\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    98\n        target    27\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    99\n        target    30\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n]\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v200e200.tglf",
    "content": "0 255.000 1149.000 30.000 30.000\n1 853.000 969.000 30.000 30.000\n2 1202.000 761.000 30.000 30.000\n3 634.000 1167.000 30.000 30.000\n4 846.000 663.000 30.000 30.000\n5 76.000 551.000 30.000 30.000\n6 35.000 140.000 30.000 30.000\n7 695.000 258.000 30.000 30.000\n8 1202.000 443.000 30.000 30.000\n9 847.000 64.000 30.000 30.000\n10 107.000 72.000 30.000 30.000\n11 695.000 492.000 30.000 30.000\n12 1238.000 1091.000 30.000 30.000\n13 771.000 803.000 30.000 30.000\n14 601.000 662.000 30.000 30.000\n15 543.000 990.000 30.000 30.000\n16 592.000 414.000 30.000 30.000\n17 96.000 724.000 30.000 30.000\n18 234.000 402.000 30.000 30.000\n19 1161.000 1006.000 30.000 30.000\n20 21.000 1224.000 30.000 30.000\n21 1135.000 986.000 30.000 30.000\n22 498.000 700.000 30.000 30.000\n23 301.000 6.000 30.000 30.000\n24 1169.000 283.000 30.000 30.000\n25 57.000 466.000 30.000 30.000\n26 1265.000 1216.000 30.000 30.000\n27 1200.000 20.000 30.000 30.000\n28 802.000 838.000 30.000 30.000\n29 4.000 741.000 30.000 30.000\n30 120.000 56.000 30.000 30.000\n31 465.000 280.000 30.000 30.000\n32 1083.000 1207.000 30.000 30.000\n33 1030.000 831.000 30.000 30.000\n34 1076.000 1167.000 30.000 30.000\n35 669.000 1147.000 30.000 30.000\n36 430.000 219.000 30.000 30.000\n37 469.000 1013.000 30.000 30.000\n38 412.000 269.000 30.000 30.000\n39 255.000 1070.000 30.000 30.000\n40 947.000 469.000 30.000 30.000\n41 1094.000 290.000 30.000 30.000\n42 384.000 786.000 30.000 30.000\n43 233.000 646.000 30.000 30.000\n44 822.000 1136.000 30.000 30.000\n45 296.000 10.000 30.000 30.000\n46 1255.000 55.000 30.000 30.000\n47 1123.000 538.000 30.000 30.000\n48 899.000 232.000 30.000 30.000\n49 1084.000 1155.000 30.000 30.000\n50 421.000 409.000 30.000 30.000\n51 156.000 1217.000 30.000 30.000\n52 963.000 199.000 30.000 30.000\n53 361.000 556.000 30.000 30.000\n54 589.000 152.000 30.000 30.000\n55 138.000 702.000 30.000 30.000\n56 773.000 369.000 30.000 30.000\n57 168.000 529.000 30.000 30.000\n58 423.000 275.000 30.000 30.000\n59 235.000 670.000 30.000 30.000\n60 370.000 393.000 30.000 30.000\n61 478.000 197.000 30.000 30.000\n62 1110.000 701.000 30.000 30.000\n63 1116.000 931.000 30.000 30.000\n64 103.000 495.000 30.000 30.000\n65 430.000 64.000 30.000 30.000\n66 493.000 1125.000 30.000 30.000\n67 1267.000 656.000 30.000 30.000\n68 713.000 1220.000 30.000 30.000\n69 495.000 173.000 30.000 30.000\n70 1009.000 988.000 30.000 30.000\n71 965.000 1190.000 30.000 30.000\n72 852.000 1077.000 30.000 30.000\n73 682.000 935.000 30.000 30.000\n74 121.000 915.000 30.000 30.000\n75 54.000 830.000 30.000 30.000\n76 970.000 523.000 30.000 30.000\n77 972.000 179.000 30.000 30.000\n78 484.000 846.000 30.000 30.000\n79 647.000 1034.000 30.000 30.000\n80 870.000 858.000 30.000 30.000\n81 453.000 1086.000 30.000 30.000\n82 644.000 473.000 30.000 30.000\n83 616.000 267.000 30.000 30.000\n84 225.000 1169.000 30.000 30.000\n85 1177.000 425.000 30.000 30.000\n86 560.000 1231.000 30.000 30.000\n87 806.000 1141.000 30.000 30.000\n88 1123.000 860.000 30.000 30.000\n89 171.000 1200.000 30.000 30.000\n90 524.000 1063.000 30.000 30.000\n91 646.000 1228.000 30.000 30.000\n92 387.000 66.000 30.000 30.000\n93 680.000 1103.000 30.000 30.000\n94 575.000 773.000 30.000 30.000\n95 907.000 915.000 30.000 30.000\n96 969.000 307.000 30.000 30.000\n97 79.000 1002.000 30.000 30.000\n98 167.000 944.000 30.000 30.000\n99 61.000 832.000 30.000 30.000\n100 69.000 632.000 30.000 30.000\n101 241.000 607.000 30.000 30.000\n102 741.000 1014.000 30.000 30.000\n103 356.000 1066.000 30.000 30.000\n104 1270.000 876.000 30.000 30.000\n105 529.000 556.000 30.000 30.000\n106 39.000 209.000 30.000 30.000\n107 1245.000 1115.000 30.000 30.000\n108 134.000 1134.000 30.000 30.000\n109 734.000 716.000 30.000 30.000\n110 902.000 285.000 30.000 30.000\n111 727.000 1174.000 30.000 30.000\n112 942.000 1272.000 30.000 30.000\n113 188.000 1144.000 30.000 30.000\n114 489.000 816.000 30.000 30.000\n115 979.000 1084.000 30.000 30.000\n116 357.000 1169.000 30.000 30.000\n117 641.000 1093.000 30.000 30.000\n118 262.000 723.000 30.000 30.000\n119 745.000 262.000 30.000 30.000\n120 1011.000 341.000 30.000 30.000\n121 114.000 861.000 30.000 30.000\n122 567.000 709.000 30.000 30.000\n123 166.000 190.000 30.000 30.000\n124 949.000 538.000 30.000 30.000\n125 952.000 943.000 30.000 30.000\n126 601.000 489.000 30.000 30.000\n127 161.000 1229.000 30.000 30.000\n128 568.000 804.000 30.000 30.000\n129 200.000 69.000 30.000 30.000\n130 1079.000 91.000 30.000 30.000\n131 1014.000 910.000 30.000 30.000\n132 1083.000 80.000 30.000 30.000\n133 521.000 277.000 30.000 30.000\n134 357.000 181.000 30.000 30.000\n135 906.000 16.000 30.000 30.000\n136 362.000 250.000 30.000 30.000\n137 677.000 389.000 30.000 30.000\n138 1259.000 1213.000 30.000 30.000\n139 667.000 181.000 30.000 30.000\n140 740.000 57.000 30.000 30.000\n141 246.000 357.000 30.000 30.000\n142 701.000 72.000 30.000 30.000\n143 1120.000 180.000 30.000 30.000\n144 1222.000 1200.000 30.000 30.000\n145 323.000 978.000 30.000 30.000\n146 1002.000 921.000 30.000 30.000\n147 145.000 1174.000 30.000 30.000\n148 701.000 378.000 30.000 30.000\n149 706.000 241.000 30.000 30.000\n150 524.000 19.000 30.000 30.000\n151 586.000 512.000 30.000 30.000\n152 1106.000 68.000 30.000 30.000\n153 221.000 1115.000 30.000 30.000\n154 640.000 804.000 30.000 30.000\n155 727.000 495.000 30.000 30.000\n156 901.000 1240.000 30.000 30.000\n157 639.000 947.000 30.000 30.000\n158 1001.000 651.000 30.000 30.000\n159 1136.000 617.000 30.000 30.000\n160 1172.000 782.000 30.000 30.000\n161 1199.000 759.000 30.000 30.000\n162 1142.000 1126.000 30.000 30.000\n163 54.000 701.000 30.000 30.000\n164 111.000 264.000 30.000 30.000\n165 589.000 141.000 30.000 30.000\n166 878.000 811.000 30.000 30.000\n167 766.000 1186.000 30.000 30.000\n168 154.000 509.000 30.000 30.000\n169 987.000 759.000 30.000 30.000\n170 1096.000 221.000 30.000 30.000\n171 519.000 434.000 30.000 30.000\n172 692.000 819.000 30.000 30.000\n173 526.000 940.000 30.000 30.000\n174 361.000 1202.000 30.000 30.000\n175 90.000 185.000 30.000 30.000\n176 108.000 967.000 30.000 30.000\n177 1211.000 34.000 30.000 30.000\n178 1095.000 301.000 30.000 30.000\n179 1029.000 531.000 30.000 30.000\n180 919.000 352.000 30.000 30.000\n181 673.000 1163.000 30.000 30.000\n182 323.000 507.000 30.000 30.000\n183 138.000 713.000 30.000 30.000\n184 657.000 888.000 30.000 30.000\n185 482.000 1098.000 30.000 30.000\n186 1224.000 155.000 30.000 30.000\n187 909.000 717.000 30.000 30.000\n188 903.000 1250.000 30.000 30.000\n189 1231.000 1245.000 30.000 30.000\n190 268.000 838.000 30.000 30.000\n191 929.000 458.000 30.000 30.000\n192 1150.000 398.000 30.000 30.000\n193 11.000 623.000 30.000 30.000\n194 732.000 204.000 30.000 30.000\n195 826.000 480.000 30.000 30.000\n196 561.000 752.000 30.000 30.000\n197 488.000 473.000 30.000 30.000\n198 601.000 72.000 30.000 30.000\n199 4.000 1094.000 30.000 30.000\n#\n23 9\n170 144\n22 7\n150 149\n174 8\n89 17\n180 28\n118 2\n189 139\n122 17\n106 73\n3 0\n127 114\n80 18\n184 141\n167 93\n59 48\n10 3\n112 64\n101 64\n190 77\n195 159\n126 51\n85 66\n171 164\n143 130\n64 35\n18 12\n98 27\n146 44\n53 49\n2 1\n24 4\n37 29\n130 57\n151 9\n42 2\n4 0\n192 6\n183 151\n36 16\n128 105\n61 6\n99 30\n164 157\n158 80\n160 101\n17 3\n125 58\n149 90\n173 96\n140 84\n111 29\n139 48\n79 35\n116 47\n196 107\n100 62\n156 39\n179 66\n114 26\n65 33\n81 48\n96 35\n45 6\n76 25\n39 12\n165 76\n11 9\n75 30\n87 86\n88 55\n157 22\n159 20\n172 137\n91 68\n77 47\n78 14\n83 69\n48 38\n162 6\n60 24\n82 12\n135 47\n47 15\n104 56\n1 0\n177 136\n187 125\n49 12\n161 73\n94 88\n145 2\n12 1\n69 7\n117 44\n51 16\n58 49\n109 76\n131 120\n6 5\n74 16\n133 94\n191 150\n84 24\n33 23\n92 49\n137 100\n68 49\n43 24\n44 14\n26 18\n199 47\n129 81\n188 11\n110 18\n97 16\n19 3\n185 100\n194 122\n155 105\n34 32\n134 84\n35 30\n72 35\n21 7\n86 53\n63 39\n71 60\n27 13\n32 24\n141 132\n67 25\n102 4\n113 72\n175 152\n38 18\n20 7\n132 40\n148 90\n124 75\n56 2\n119 92\n138 78\n186 176\n8 1\n16 12\n41 39\n154 91\n57 52\n7 5\n136 134\n93 76\n152 119\n25 11\n28 14\n9 6\n73 63\n168 79\n115 23\n166 130\n176 102\n95 20\n15 12\n198 33\n123 14\n70 48\n178 172\n105 75\n62 30\n120 76\n193 60\n40 18\n107 17\n147 117\n169 28\n5 2\n197 11\n50 48\n144 120\n182 77\n181 21\n30 9\n31 1\n11 128\n55 44\n14 3\n29 3\n163 6\n153 84\n103 46\n66 64\n52 42\n121 15\n13 7\n54 27\n90 30\n108 58\n46 6\n142 71\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v200e220.gml",
    "content": "graph\n[\n    node\n    [\n        id    0\n        label    \"\"\n        graphics\n        [\n            x    182.57\n            y    1201.22\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    1\n        label    \"\"\n        graphics\n        [\n            x    565.58\n            y    98.02\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    2\n        label    \"\"\n        graphics\n        [\n            x    889.56\n            y    1214.76\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    3\n        label    \"\"\n        graphics\n        [\n            x    93.76\n            y    1051.73\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    4\n        label    \"\"\n        graphics\n        [\n            x    209.52\n            y    272.06\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    5\n        label    \"\"\n        graphics\n        [\n            x    189.73\n            y    1037.11\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    6\n        label    \"\"\n        graphics\n        [\n            x    733.83\n            y    634.66\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    7\n        label    \"\"\n        graphics\n        [\n            x    1253.79\n            y    271.84\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    8\n        label    \"\"\n        graphics\n        [\n            x    350.65\n            y    1082.89\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    9\n        label    \"\"\n        graphics\n        [\n            x    472.34\n            y    156.08\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    10\n        label    \"\"\n        graphics\n        [\n            x    427.75\n            y    636.83\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    11\n        label    \"\"\n        graphics\n        [\n            x    193.80\n            y    239.88\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    12\n        label    \"\"\n        graphics\n        [\n            x    235.45\n            y    1135.68\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    13\n        label    \"\"\n        graphics\n        [\n            x    310.52\n            y    909.85\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    14\n        label    \"\"\n        graphics\n        [\n            x    315.23\n            y    990.14\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    15\n        label    \"\"\n        graphics\n        [\n            x    1183.46\n            y    861.67\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    16\n        label    \"\"\n        graphics\n        [\n            x    971.11\n            y    651.95\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    17\n        label    \"\"\n        graphics\n        [\n            x    27.34\n            y    617.91\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    18\n        label    \"\"\n        graphics\n        [\n            x    226.06\n            y    925.08\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    19\n        label    \"\"\n        graphics\n        [\n            x    809.96\n            y    728.44\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    20\n        label    \"\"\n        graphics\n        [\n            x    52.08\n            y    396.64\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    21\n        label    \"\"\n        graphics\n        [\n            x    976.51\n            y    468.28\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    22\n        label    \"\"\n        graphics\n        [\n            x    1095.27\n            y    219.60\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    23\n        label    \"\"\n        graphics\n        [\n            x    210.82\n            y    1049.56\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    24\n        label    \"\"\n        graphics\n        [\n            x    919.96\n            y    647.80\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    25\n        label    \"\"\n        graphics\n        [\n            x    1225.04\n            y    400.47\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    26\n        label    \"\"\n        graphics\n        [\n            x    252.42\n            y    61.61\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    27\n        label    \"\"\n        graphics\n        [\n            x    898.67\n            y    1227.40\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    28\n        label    \"\"\n        graphics\n        [\n            x    638.10\n            y    509.96\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    29\n        label    \"\"\n        graphics\n        [\n            x    433.20\n            y    968.87\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    30\n        label    \"\"\n        graphics\n        [\n            x    761.45\n            y    187.67\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    31\n        label    \"\"\n        graphics\n        [\n            x    84.22\n            y    554.70\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    32\n        label    \"\"\n        graphics\n        [\n            x    101.20\n            y    853.43\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    33\n        label    \"\"\n        graphics\n        [\n            x    491.82\n            y    1109.98\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    34\n        label    \"\"\n        graphics\n        [\n            x    141.72\n            y    745.32\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    35\n        label    \"\"\n        graphics\n        [\n            x    245.72\n            y    209.76\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    36\n        label    \"\"\n        graphics\n        [\n            x    1027.01\n            y    894.84\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    37\n        label    \"\"\n        graphics\n        [\n            x    1096.84\n            y    1157.95\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    38\n        label    \"\"\n        graphics\n        [\n            x    1056.17\n            y    673.14\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    39\n        label    \"\"\n        graphics\n        [\n            x    746.26\n            y    792.79\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    40\n        label    \"\"\n        graphics\n        [\n            x    1096.30\n            y    1088.19\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    41\n        label    \"\"\n        graphics\n        [\n            x    620.01\n            y    735.34\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    42\n        label    \"\"\n        graphics\n        [\n            x    150.11\n            y    82.37\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    43\n        label    \"\"\n        graphics\n        [\n            x    1019.76\n            y    1233.47\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    44\n        label    \"\"\n        graphics\n        [\n            x    197.61\n            y    90.69\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    45\n        label    \"\"\n        graphics\n        [\n            x    1153.21\n            y    1243.85\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    46\n        label    \"\"\n        graphics\n        [\n            x    219.53\n            y    173.41\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    47\n        label    \"\"\n        graphics\n        [\n            x    697.53\n            y    352.22\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    48\n        label    \"\"\n        graphics\n        [\n            x    1087.19\n            y    169.00\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    49\n        label    \"\"\n        graphics\n        [\n            x    237.40\n            y    194.53\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    50\n        label    \"\"\n        graphics\n        [\n            x    1074.90\n            y    915.57\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    51\n        label    \"\"\n        graphics\n        [\n            x    262.17\n            y    37.86\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    52\n        label    \"\"\n        graphics\n        [\n            x    456.46\n            y    1203.25\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    53\n        label    \"\"\n        graphics\n        [\n            x    897.29\n            y    1247.98\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    54\n        label    \"\"\n        graphics\n        [\n            x    381.94\n            y    633.60\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    55\n        label    \"\"\n        graphics\n        [\n            x    928.27\n            y    467.31\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    56\n        label    \"\"\n        graphics\n        [\n            x    821.90\n            y    1252.90\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    57\n        label    \"\"\n        graphics\n        [\n            x    863.33\n            y    31.47\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    58\n        label    \"\"\n        graphics\n        [\n            x    521.72\n            y    479.91\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    59\n        label    \"\"\n        graphics\n        [\n            x    720.88\n            y    1167.86\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    60\n        label    \"\"\n        graphics\n        [\n            x    19.45\n            y    1131.39\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    61\n        label    \"\"\n        graphics\n        [\n            x    983.96\n            y    161.01\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    62\n        label    \"\"\n        graphics\n        [\n            x    392.38\n            y    950.27\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    63\n        label    \"\"\n        graphics\n        [\n            x    917.20\n            y    950.62\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    64\n        label    \"\"\n        graphics\n        [\n            x    409.74\n            y    994.93\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    65\n        label    \"\"\n        graphics\n        [\n            x    847.84\n            y    249.39\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    66\n        label    \"\"\n        graphics\n        [\n            x    813.46\n            y    183.53\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    67\n        label    \"\"\n        graphics\n        [\n            x    378.10\n            y    606.38\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    68\n        label    \"\"\n        graphics\n        [\n            x    155.00\n            y    101.21\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    69\n        label    \"\"\n        graphics\n        [\n            x    842.76\n            y    670.59\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    70\n        label    \"\"\n        graphics\n        [\n            x    1127.71\n            y    391.01\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    71\n        label    \"\"\n        graphics\n        [\n            x    531.65\n            y    711.92\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    72\n        label    \"\"\n        graphics\n        [\n            x    357.06\n            y    528.82\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    73\n        label    \"\"\n        graphics\n        [\n            x    367.41\n            y    339.99\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    74\n        label    \"\"\n        graphics\n        [\n            x    1133.08\n            y    1020.38\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    75\n        label    \"\"\n        graphics\n        [\n            x    986.32\n            y    901.78\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    76\n        label    \"\"\n        graphics\n        [\n            x    1161.25\n            y    227.38\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    77\n        label    \"\"\n        graphics\n        [\n            x    463.25\n            y    400.05\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    78\n        label    \"\"\n        graphics\n        [\n            x    602.05\n            y    773.21\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    79\n        label    \"\"\n        graphics\n        [\n            x    531.42\n            y    310.07\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    80\n        label    \"\"\n        graphics\n        [\n            x    249.50\n            y    870.02\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    81\n        label    \"\"\n        graphics\n        [\n            x    595.17\n            y    377.16\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    82\n        label    \"\"\n        graphics\n        [\n            x    372.02\n            y    127.48\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    83\n        label    \"\"\n        graphics\n        [\n            x    419.47\n            y    69.62\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    84\n        label    \"\"\n        graphics\n        [\n            x    856.32\n            y    164.70\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    85\n        label    \"\"\n        graphics\n        [\n            x    726.16\n            y    875.87\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    86\n        label    \"\"\n        graphics\n        [\n            x    1115.58\n            y    524.12\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    87\n        label    \"\"\n        graphics\n        [\n            x    955.76\n            y    86.95\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    88\n        label    \"\"\n        graphics\n        [\n            x    151.41\n            y    413.99\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    89\n        label    \"\"\n        graphics\n        [\n            x    565.40\n            y    1082.33\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    90\n        label    \"\"\n        graphics\n        [\n            x    504.02\n            y    338.57\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    91\n        label    \"\"\n        graphics\n        [\n            x    546.74\n            y    1214.41\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    92\n        label    \"\"\n        graphics\n        [\n            x    256.87\n            y    733.38\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    93\n        label    \"\"\n        graphics\n        [\n            x    703.02\n            y    703.60\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    94\n        label    \"\"\n        graphics\n        [\n            x    771.09\n            y    1111.34\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    95\n        label    \"\"\n        graphics\n        [\n            x    973.43\n            y    682.49\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    96\n        label    \"\"\n        graphics\n        [\n            x    574.25\n            y    537.41\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    97\n        label    \"\"\n        graphics\n        [\n            x    610.31\n            y    843.17\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    98\n        label    \"\"\n        graphics\n        [\n            x    549.74\n            y    699.67\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    99\n        label    \"\"\n        graphics\n        [\n            x    1237.75\n            y    927.81\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    100\n        label    \"\"\n        graphics\n        [\n            x    8.54\n            y    888.02\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    101\n        label    \"\"\n        graphics\n        [\n            x    628.67\n            y    1093.78\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    102\n        label    \"\"\n        graphics\n        [\n            x    1248.25\n            y    681.18\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    103\n        label    \"\"\n        graphics\n        [\n            x    602.83\n            y    1175.49\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    104\n        label    \"\"\n        graphics\n        [\n            x    1101.40\n            y    515.31\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    105\n        label    \"\"\n        graphics\n        [\n            x    309.08\n            y    459.39\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    106\n        label    \"\"\n        graphics\n        [\n            x    968.72\n            y    584.24\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    107\n        label    \"\"\n        graphics\n        [\n            x    763.34\n            y    798.19\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    108\n        label    \"\"\n        graphics\n        [\n            x    489.89\n            y    890.18\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    109\n        label    \"\"\n        graphics\n        [\n            x    391.28\n            y    725.61\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    110\n        label    \"\"\n        graphics\n        [\n            x    1108.55\n            y    107.03\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    111\n        label    \"\"\n        graphics\n        [\n            x    1182.31\n            y    473.94\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    112\n        label    \"\"\n        graphics\n        [\n            x    796.16\n            y    1207.73\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    113\n        label    \"\"\n        graphics\n        [\n            x    1190.82\n            y    284.57\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    114\n        label    \"\"\n        graphics\n        [\n            x    590.74\n            y    984.35\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    115\n        label    \"\"\n        graphics\n        [\n            x    393.89\n            y    442.03\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    116\n        label    \"\"\n        graphics\n        [\n            x    93.04\n            y    1018.10\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    117\n        label    \"\"\n        graphics\n        [\n            x    476.79\n            y    25.36\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    118\n        label    \"\"\n        graphics\n        [\n            x    842.99\n            y    258.08\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    119\n        label    \"\"\n        graphics\n        [\n            x    292.72\n            y    1036.67\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    120\n        label    \"\"\n        graphics\n        [\n            x    1100.66\n            y    942.48\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    121\n        label    \"\"\n        graphics\n        [\n            x    673.06\n            y    536.10\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    122\n        label    \"\"\n        graphics\n        [\n            x    829.51\n            y    629.08\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    123\n        label    \"\"\n        graphics\n        [\n            x    63.19\n            y    668.08\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    124\n        label    \"\"\n        graphics\n        [\n            x    1171.69\n            y    1271.76\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    125\n        label    \"\"\n        graphics\n        [\n            x    63.73\n            y    315.93\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    126\n        label    \"\"\n        graphics\n        [\n            x    218.56\n            y    894.85\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    127\n        label    \"\"\n        graphics\n        [\n            x    1264.58\n            y    594.28\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    128\n        label    \"\"\n        graphics\n        [\n            x    311.28\n            y    580.86\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    129\n        label    \"\"\n        graphics\n        [\n            x    654.73\n            y    1238.44\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    130\n        label    \"\"\n        graphics\n        [\n            x    321.46\n            y    976.37\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    131\n        label    \"\"\n        graphics\n        [\n            x    804.18\n            y    511.13\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    132\n        label    \"\"\n        graphics\n        [\n            x    850.95\n            y    783.33\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    133\n        label    \"\"\n        graphics\n        [\n            x    1068.96\n            y    143.04\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    134\n        label    \"\"\n        graphics\n        [\n            x    438.78\n            y    1063.07\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    135\n        label    \"\"\n        graphics\n        [\n            x    1237.64\n            y    1013.00\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    136\n        label    \"\"\n        graphics\n        [\n            x    1180.02\n            y    892.89\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    137\n        label    \"\"\n        graphics\n        [\n            x    1100.83\n            y    321.99\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    138\n        label    \"\"\n        graphics\n        [\n            x    451.42\n            y    683.76\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    139\n        label    \"\"\n        graphics\n        [\n            x    1143.04\n            y    4.06\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    140\n        label    \"\"\n        graphics\n        [\n            x    1247.85\n            y    119.69\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    141\n        label    \"\"\n        graphics\n        [\n            x    1165.98\n            y    1247.99\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    142\n        label    \"\"\n        graphics\n        [\n            x    891.73\n            y    1120.09\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    143\n        label    \"\"\n        graphics\n        [\n            x    827.29\n            y    1195.66\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    144\n        label    \"\"\n        graphics\n        [\n            x    1201.54\n            y    1.03\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    145\n        label    \"\"\n        graphics\n        [\n            x    793.08\n            y    222.54\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    146\n        label    \"\"\n        graphics\n        [\n            x    1205.14\n            y    862.37\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    147\n        label    \"\"\n        graphics\n        [\n            x    131.01\n            y    170.17\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    148\n        label    \"\"\n        graphics\n        [\n            x    311.52\n            y    93.97\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    149\n        label    \"\"\n        graphics\n        [\n            x    959.69\n            y    1216.41\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    150\n        label    \"\"\n        graphics\n        [\n            x    707.05\n            y    466.97\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    151\n        label    \"\"\n        graphics\n        [\n            x    0.57\n            y    272.58\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    152\n        label    \"\"\n        graphics\n        [\n            x    600.21\n            y    36.47\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    153\n        label    \"\"\n        graphics\n        [\n            x    254.76\n            y    230.61\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    154\n        label    \"\"\n        graphics\n        [\n            x    7.67\n            y    682.54\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    155\n        label    \"\"\n        graphics\n        [\n            x    644.05\n            y    894.77\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    156\n        label    \"\"\n        graphics\n        [\n            x    985.74\n            y    733.73\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    157\n        label    \"\"\n        graphics\n        [\n            x    486.67\n            y    236.10\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    158\n        label    \"\"\n        graphics\n        [\n            x    902.98\n            y    371.49\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    159\n        label    \"\"\n        graphics\n        [\n            x    900.12\n            y    987.05\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    160\n        label    \"\"\n        graphics\n        [\n            x    628.95\n            y    104.12\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    161\n        label    \"\"\n        graphics\n        [\n            x    752.79\n            y    766.33\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    162\n        label    \"\"\n        graphics\n        [\n            x    778.97\n            y    165.41\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    163\n        label    \"\"\n        graphics\n        [\n            x    275.28\n            y    921.58\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    164\n        label    \"\"\n        graphics\n        [\n            x    848.18\n            y    329.29\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    165\n        label    \"\"\n        graphics\n        [\n            x    651.36\n            y    878.18\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    166\n        label    \"\"\n        graphics\n        [\n            x    1109.83\n            y    252.76\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    167\n        label    \"\"\n        graphics\n        [\n            x    701.81\n            y    647.74\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    168\n        label    \"\"\n        graphics\n        [\n            x    908.91\n            y    247.20\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    169\n        label    \"\"\n        graphics\n        [\n            x    413.08\n            y    1191.12\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    170\n        label    \"\"\n        graphics\n        [\n            x    503.24\n            y    1266.42\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    171\n        label    \"\"\n        graphics\n        [\n            x    1156.87\n            y    715.38\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    172\n        label    \"\"\n        graphics\n        [\n            x    535.07\n            y    199.41\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    173\n        label    \"\"\n        graphics\n        [\n            x    940.78\n            y    372.58\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    174\n        label    \"\"\n        graphics\n        [\n            x    692.23\n            y    832.59\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    175\n        label    \"\"\n        graphics\n        [\n            x    1121.61\n            y    1169.30\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    176\n        label    \"\"\n        graphics\n        [\n            x    660.10\n            y    898.89\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    177\n        label    \"\"\n        graphics\n        [\n            x    390.29\n            y    429.83\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    178\n        label    \"\"\n        graphics\n        [\n            x    841.17\n            y    1072.13\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    179\n        label    \"\"\n        graphics\n        [\n            x    45.29\n            y    1184.71\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    180\n        label    \"\"\n        graphics\n        [\n            x    629.11\n            y    938.25\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    181\n        label    \"\"\n        graphics\n        [\n            x    549.57\n            y    277.73\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    182\n        label    \"\"\n        graphics\n        [\n            x    680.06\n            y    642.92\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    183\n        label    \"\"\n        graphics\n        [\n            x    576.71\n            y    134.61\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    184\n        label    \"\"\n        graphics\n        [\n            x    216.40\n            y    646.75\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    185\n        label    \"\"\n        graphics\n        [\n            x    229.41\n            y    172.70\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    186\n        label    \"\"\n        graphics\n        [\n            x    431.13\n            y    673.47\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    187\n        label    \"\"\n        graphics\n        [\n            x    96.25\n            y    814.97\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    188\n        label    \"\"\n        graphics\n        [\n            x    603.48\n            y    1253.40\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    189\n        label    \"\"\n        graphics\n        [\n            x    254.79\n            y    281.63\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    190\n        label    \"\"\n        graphics\n        [\n            x    609.80\n            y    1217.42\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    191\n        label    \"\"\n        graphics\n        [\n            x    199.53\n            y    762.19\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    192\n        label    \"\"\n        graphics\n        [\n            x    961.73\n            y    1180.19\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    193\n        label    \"\"\n        graphics\n        [\n            x    1082.98\n            y    551.58\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    194\n        label    \"\"\n        graphics\n        [\n            x    41.45\n            y    161.02\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    195\n        label    \"\"\n        graphics\n        [\n            x    1101.55\n            y    418.22\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    196\n        label    \"\"\n        graphics\n        [\n            x    1171.98\n            y    293.34\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    197\n        label    \"\"\n        graphics\n        [\n            x    193.16\n            y    128.17\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    198\n        label    \"\"\n        graphics\n        [\n            x    362.38\n            y    893.59\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    199\n        label    \"\"\n        graphics\n        [\n            x    569.05\n            y    617.86\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    edge\n    [\n        source    1\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    10\n        target    183\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    10\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    100\n        target    54\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    101\n        target    39\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    102\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    103\n        target    82\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    104\n        target    71\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    105\n        target    48\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    106\n        target    20\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    107\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    108\n        target    90\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    108\n        target    94\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    109\n        target    52\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    109\n        target    69\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    11\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    110\n        target    19\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    111\n        target    95\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    112\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    113\n        target    108\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    114\n        target    73\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    115\n        target    53\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    116\n        target    73\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    117\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    118\n        target    199\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    118\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    119\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    119\n        target    101\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    12\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    12\n        target    87\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    120\n        target    192\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    120\n        target    92\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    121\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    122\n        target    38\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    123\n        target    55\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    124\n        target    93\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    125\n        target    79\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    126\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    127\n        target    63\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    128\n        target    69\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    129\n        target    93\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    13\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    130\n        target    40\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    131\n        target    55\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    132\n        target    30\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    133\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    134\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    135\n        target    46\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    136\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    136\n        target    123\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    136\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    137\n        target    125\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    138\n        target    37\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    139\n        target    138\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    14\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    140\n        target    132\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    140\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    141\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    142\n        target    40\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    143\n        target    88\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    144\n        target    51\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    145\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    146\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    147\n        target    25\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    148\n        target    115\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    149\n        target    119\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    15\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    150\n        target    139\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    151\n        target    20\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    152\n        target    110\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    153\n        target    98\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    154\n        target    73\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    155\n        target    83\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    156\n        target    104\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    157\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    158\n        target    58\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    159\n        target    50\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    16\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    160\n        target    130\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    161\n        target    144\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    162\n        target    66\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    163\n        target    20\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    164\n        target    90\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    165\n        target    37\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    166\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    167\n        target    112\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    168\n        target    123\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    169\n        target    86\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    17\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    170\n        target    90\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    171\n        target    101\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    172\n        target    136\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    173\n        target    42\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    174\n        target    141\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    175\n        target    115\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    176\n        target    117\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    177\n        target    129\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    178\n        target    112\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    179\n        target    143\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    18\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    180\n        target    105\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    181\n        target    98\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    182\n        target    97\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    183\n        target    89\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    184\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    185\n        target    133\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    186\n        target    131\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    186\n        target    83\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    187\n        target    139\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    188\n        target    34\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    189\n        target    130\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    19\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    190\n        target    106\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    191\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    192\n        target    107\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    193\n        target    108\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    194\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    195\n        target    147\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    196\n        target    105\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    197\n        target    24\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    198\n        target    132\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    198\n        target    155\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    198\n        target    54\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    199\n        target    143\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    2\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    20\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    21\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    22\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    23\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    24\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    25\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    26\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    27\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    28\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    29\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    3\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    30\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    31\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    32\n        target    30\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    33\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    34\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    35\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    36\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    37\n        target    29\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    38\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    39\n        target    36\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    4\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    40\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    41\n        target    34\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    41\n        target    65\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    42\n        target    37\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    43\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    44\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    45\n        target    20\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    46\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    47\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    48\n        target    44\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    49\n        target    44\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    5\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    50\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    51\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    52\n        target    30\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    53\n        target    38\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    54\n        target    28\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    55\n        target    151\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    55\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    56\n        target    53\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    57\n        target    49\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    58\n        target    36\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    59\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    6\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    60\n        target    48\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    61\n        target    37\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    62\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    63\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    64\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    65\n        target    60\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    66\n        target    123\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    66\n        target    45\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    67\n        target    42\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    68\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    69\n        target    40\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    7\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    70\n        target    58\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    71\n        target    24\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    72\n        target    69\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    73\n        target    63\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    74\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    75\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    75\n        target    38\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    76\n        target    56\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    77\n        target    65\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    78\n        target    73\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    79\n        target    109\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    79\n        target    47\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    8\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    80\n        target    55\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    81\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    82\n        target    48\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    83\n        target    72\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    84\n        target    52\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    85\n        target    34\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    86\n        target    121\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    86\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    87\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    87\n        target    47\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    88\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    89\n        target    78\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    9\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    90\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    91\n        target    50\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    92\n        target    64\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    93\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    93\n        target    64\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    94\n        target    76\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    95\n        target    78\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    96\n        target    70\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    97\n        target    39\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    98\n        target    61\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    99\n        target    19\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n]\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v200e220.tglf",
    "content": "0 182.000 1201.000 30.000 30.000\n1 565.000 98.000 30.000 30.000\n2 889.000 1214.000 30.000 30.000\n3 93.000 1051.000 30.000 30.000\n4 209.000 272.000 30.000 30.000\n5 189.000 1037.000 30.000 30.000\n6 733.000 634.000 30.000 30.000\n7 1253.000 271.000 30.000 30.000\n8 350.000 1082.000 30.000 30.000\n9 472.000 156.000 30.000 30.000\n10 427.000 636.000 30.000 30.000\n11 193.000 239.000 30.000 30.000\n12 235.000 1135.000 30.000 30.000\n13 310.000 909.000 30.000 30.000\n14 315.000 990.000 30.000 30.000\n15 1183.000 861.000 30.000 30.000\n16 971.000 651.000 30.000 30.000\n17 27.000 617.000 30.000 30.000\n18 226.000 925.000 30.000 30.000\n19 809.000 728.000 30.000 30.000\n20 52.000 396.000 30.000 30.000\n21 976.000 468.000 30.000 30.000\n22 1095.000 219.000 30.000 30.000\n23 210.000 1049.000 30.000 30.000\n24 919.000 647.000 30.000 30.000\n25 1225.000 400.000 30.000 30.000\n26 252.000 61.000 30.000 30.000\n27 898.000 1227.000 30.000 30.000\n28 638.000 509.000 30.000 30.000\n29 433.000 968.000 30.000 30.000\n30 761.000 187.000 30.000 30.000\n31 84.000 554.000 30.000 30.000\n32 101.000 853.000 30.000 30.000\n33 491.000 1109.000 30.000 30.000\n34 141.000 745.000 30.000 30.000\n35 245.000 209.000 30.000 30.000\n36 1027.000 894.000 30.000 30.000\n37 1096.000 1157.000 30.000 30.000\n38 1056.000 673.000 30.000 30.000\n39 746.000 792.000 30.000 30.000\n40 1096.000 1088.000 30.000 30.000\n41 620.000 735.000 30.000 30.000\n42 150.000 82.000 30.000 30.000\n43 1019.000 1233.000 30.000 30.000\n44 197.000 90.000 30.000 30.000\n45 1153.000 1243.000 30.000 30.000\n46 219.000 173.000 30.000 30.000\n47 697.000 352.000 30.000 30.000\n48 1087.000 169.000 30.000 30.000\n49 237.000 194.000 30.000 30.000\n50 1074.000 915.000 30.000 30.000\n51 262.000 37.000 30.000 30.000\n52 456.000 1203.000 30.000 30.000\n53 897.000 1247.000 30.000 30.000\n54 381.000 633.000 30.000 30.000\n55 928.000 467.000 30.000 30.000\n56 821.000 1252.000 30.000 30.000\n57 863.000 31.000 30.000 30.000\n58 521.000 479.000 30.000 30.000\n59 720.000 1167.000 30.000 30.000\n60 19.000 1131.000 30.000 30.000\n61 983.000 161.000 30.000 30.000\n62 392.000 950.000 30.000 30.000\n63 917.000 950.000 30.000 30.000\n64 409.000 994.000 30.000 30.000\n65 847.000 249.000 30.000 30.000\n66 813.000 183.000 30.000 30.000\n67 378.000 606.000 30.000 30.000\n68 155.000 101.000 30.000 30.000\n69 842.000 670.000 30.000 30.000\n70 1127.000 391.000 30.000 30.000\n71 531.000 711.000 30.000 30.000\n72 357.000 528.000 30.000 30.000\n73 367.000 339.000 30.000 30.000\n74 1133.000 1020.000 30.000 30.000\n75 986.000 901.000 30.000 30.000\n76 1161.000 227.000 30.000 30.000\n77 463.000 400.000 30.000 30.000\n78 602.000 773.000 30.000 30.000\n79 531.000 310.000 30.000 30.000\n80 249.000 870.000 30.000 30.000\n81 595.000 377.000 30.000 30.000\n82 372.000 127.000 30.000 30.000\n83 419.000 69.000 30.000 30.000\n84 856.000 164.000 30.000 30.000\n85 726.000 875.000 30.000 30.000\n86 1115.000 524.000 30.000 30.000\n87 955.000 86.000 30.000 30.000\n88 151.000 413.000 30.000 30.000\n89 565.000 1082.000 30.000 30.000\n90 504.000 338.000 30.000 30.000\n91 546.000 1214.000 30.000 30.000\n92 256.000 733.000 30.000 30.000\n93 703.000 703.000 30.000 30.000\n94 771.000 1111.000 30.000 30.000\n95 973.000 682.000 30.000 30.000\n96 574.000 537.000 30.000 30.000\n97 610.000 843.000 30.000 30.000\n98 549.000 699.000 30.000 30.000\n99 1237.000 927.000 30.000 30.000\n100 8.000 888.000 30.000 30.000\n101 628.000 1093.000 30.000 30.000\n102 1248.000 681.000 30.000 30.000\n103 602.000 1175.000 30.000 30.000\n104 1101.000 515.000 30.000 30.000\n105 309.000 459.000 30.000 30.000\n106 968.000 584.000 30.000 30.000\n107 763.000 798.000 30.000 30.000\n108 489.000 890.000 30.000 30.000\n109 391.000 725.000 30.000 30.000\n110 1108.000 107.000 30.000 30.000\n111 1182.000 473.000 30.000 30.000\n112 796.000 1207.000 30.000 30.000\n113 1190.000 284.000 30.000 30.000\n114 590.000 984.000 30.000 30.000\n115 393.000 442.000 30.000 30.000\n116 93.000 1018.000 30.000 30.000\n117 476.000 25.000 30.000 30.000\n118 842.000 258.000 30.000 30.000\n119 292.000 1036.000 30.000 30.000\n120 1100.000 942.000 30.000 30.000\n121 673.000 536.000 30.000 30.000\n122 829.000 629.000 30.000 30.000\n123 63.000 668.000 30.000 30.000\n124 1171.000 1271.000 30.000 30.000\n125 63.000 315.000 30.000 30.000\n126 218.000 894.000 30.000 30.000\n127 1264.000 594.000 30.000 30.000\n128 311.000 580.000 30.000 30.000\n129 654.000 1238.000 30.000 30.000\n130 321.000 976.000 30.000 30.000\n131 804.000 511.000 30.000 30.000\n132 850.000 783.000 30.000 30.000\n133 1068.000 143.000 30.000 30.000\n134 438.000 1063.000 30.000 30.000\n135 1237.000 1013.000 30.000 30.000\n136 1180.000 892.000 30.000 30.000\n137 1100.000 321.000 30.000 30.000\n138 451.000 683.000 30.000 30.000\n139 1143.000 4.000 30.000 30.000\n140 1247.000 119.000 30.000 30.000\n141 1165.000 1247.000 30.000 30.000\n142 891.000 1120.000 30.000 30.000\n143 827.000 1195.000 30.000 30.000\n144 1201.000 1.000 30.000 30.000\n145 793.000 222.000 30.000 30.000\n146 1205.000 862.000 30.000 30.000\n147 131.000 170.000 30.000 30.000\n148 311.000 93.000 30.000 30.000\n149 959.000 1216.000 30.000 30.000\n150 707.000 466.000 30.000 30.000\n151 0.000 272.000 30.000 30.000\n152 600.000 36.000 30.000 30.000\n153 254.000 230.000 30.000 30.000\n154 7.000 682.000 30.000 30.000\n155 644.000 894.000 30.000 30.000\n156 985.000 733.000 30.000 30.000\n157 486.000 236.000 30.000 30.000\n158 902.000 371.000 30.000 30.000\n159 900.000 987.000 30.000 30.000\n160 628.000 104.000 30.000 30.000\n161 752.000 766.000 30.000 30.000\n162 778.000 165.000 30.000 30.000\n163 275.000 921.000 30.000 30.000\n164 848.000 329.000 30.000 30.000\n165 651.000 878.000 30.000 30.000\n166 1109.000 252.000 30.000 30.000\n167 701.000 647.000 30.000 30.000\n168 908.000 247.000 30.000 30.000\n169 413.000 1191.000 30.000 30.000\n170 503.000 1266.000 30.000 30.000\n171 1156.000 715.000 30.000 30.000\n172 535.000 199.000 30.000 30.000\n173 940.000 372.000 30.000 30.000\n174 692.000 832.000 30.000 30.000\n175 1121.000 1169.000 30.000 30.000\n176 660.000 898.000 30.000 30.000\n177 390.000 429.000 30.000 30.000\n178 841.000 1072.000 30.000 30.000\n179 45.000 1184.000 30.000 30.000\n180 629.000 938.000 30.000 30.000\n181 549.000 277.000 30.000 30.000\n182 680.000 642.000 30.000 30.000\n183 576.000 134.000 30.000 30.000\n184 216.000 646.000 30.000 30.000\n185 229.000 172.000 30.000 30.000\n186 431.000 673.000 30.000 30.000\n187 96.000 814.000 30.000 30.000\n188 603.000 1253.000 30.000 30.000\n189 254.000 281.000 30.000 30.000\n190 609.000 1217.000 30.000 30.000\n191 199.000 762.000 30.000 30.000\n192 961.000 1180.000 30.000 30.000\n193 1082.000 551.000 30.000 30.000\n194 41.000 161.000 30.000 30.000\n195 1101.000 418.000 30.000 30.000\n196 1171.000 293.000 30.000 30.000\n197 193.000 128.000 30.000 30.000\n198 362.000 893.000 30.000 30.000\n199 569.000 617.000 30.000 30.000\n#\n87 47\n94 76\n11 2\n99 19\n49 44\n52 30\n129 93\n84 52\n156 104\n144 51\n62 13\n1 0\n145 10\n20 12\n136 1\n108 90\n160 130\n194 23\n63 21\n70 58\n146 10\n113 108\n164 90\n114 73\n35 6\n68 1\n9 5\n66 45\n176 117\n101 39\n118 199\n43 16\n130 40\n123 55\n104 71\n153 98\n131 55\n10 3\n120 92\n195 147\n107 1\n172 136\n93 3\n175 115\n137 125\n15 3\n16 7\n64 18\n177 129\n192 107\n165 37\n166 17\n47 18\n100 54\n136 2\n142 40\n92 64\n110 19\n6 2\n117 0\n79 109\n197 24\n121 17\n126 6\n188 34\n185 133\n46 8\n198 132\n96 70\n32 30\n149 119\n115 53\n14 3\n127 63\n87 3\n159 50\n89 78\n151 20\n140 132\n75 3\n86 5\n95 78\n181 98\n65 60\n155 83\n36 2\n77 65\n187 139\n71 24\n141 14\n53 38\n193 108\n179 143\n39 36\n119 1\n140 3\n19 12\n44 15\n85 34\n170 90\n108 94\n105 48\n33 17\n109 52\n80 55\n135 46\n93 64\n54 28\n109 69\n162 66\n169 86\n4 1\n189 130\n157 6\n97 39\n134 12\n133 2\n59 21\n21 14\n196 105\n184 21\n67 42\n56 53\n116 73\n55 151\n120 192\n26 2\n182 97\n34 6\n37 29\n41 65\n78 73\n48 44\n79 47\n154 73\n150 139\n7 4\n183 89\n171 101\n180 105\n124 93\n27 14\n125 79\n148 115\n72 69\n122 38\n88 14\n31 14\n18 11\n86 121\n29 9\n50 14\n73 63\n13 11\n24 8\n28 15\n76 56\n119 101\n136 123\n10 183\n139 138\n55 21\n38 7\n174 141\n5 2\n178 112\n2 0\n60 48\n118 9\n199 143\n191 15\n57 49\n66 123\n25 16\n61 37\n138 37\n132 30\n190 106\n198 155\n8 3\n42 37\n51 10\n40 23\n158 58\n30 23\n163 20\n91 50\n102 13\n152 110\n112 10\n186 131\n74 13\n83 72\n81 7\n90 9\n82 48\n45 20\n106 20\n186 83\n161 144\n143 88\n75 38\n167 112\n69 40\n173 42\n168 123\n111 95\n3 0\n22 5\n128 69\n12 5\n147 25\n58 36\n23 0\n103 82\n198 54\n12 87\n17 15\n41 34\n98 61\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v200e240.gml",
    "content": "graph\n[\n    node\n    [\n        id    0\n        label    \"\"\n        graphics\n        [\n            x    55.69\n            y    263.01\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    1\n        label    \"\"\n        graphics\n        [\n            x    126.05\n            y    915.51\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    2\n        label    \"\"\n        graphics\n        [\n            x    415.44\n            y    474.97\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    3\n        label    \"\"\n        graphics\n        [\n            x    1044.53\n            y    168.35\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    4\n        label    \"\"\n        graphics\n        [\n            x    790.68\n            y    643.29\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    5\n        label    \"\"\n        graphics\n        [\n            x    355.12\n            y    685.01\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    6\n        label    \"\"\n        graphics\n        [\n            x    276.86\n            y    861.08\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    7\n        label    \"\"\n        graphics\n        [\n            x    470.84\n            y    852.47\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    8\n        label    \"\"\n        graphics\n        [\n            x    882.78\n            y    972.15\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    9\n        label    \"\"\n        graphics\n        [\n            x    983.68\n            y    950.40\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    10\n        label    \"\"\n        graphics\n        [\n            x    358.82\n            y    190.68\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    11\n        label    \"\"\n        graphics\n        [\n            x    683.24\n            y    314.84\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    12\n        label    \"\"\n        graphics\n        [\n            x    1012.07\n            y    1080.77\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    13\n        label    \"\"\n        graphics\n        [\n            x    318.65\n            y    713.12\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    14\n        label    \"\"\n        graphics\n        [\n            x    902.74\n            y    321.52\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    15\n        label    \"\"\n        graphics\n        [\n            x    1042.47\n            y    993.62\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    16\n        label    \"\"\n        graphics\n        [\n            x    891.21\n            y    404.48\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    17\n        label    \"\"\n        graphics\n        [\n            x    703.86\n            y    796.57\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    18\n        label    \"\"\n        graphics\n        [\n            x    1224.27\n            y    158.81\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    19\n        label    \"\"\n        graphics\n        [\n            x    465.98\n            y    431.82\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    20\n        label    \"\"\n        graphics\n        [\n            x    1137.88\n            y    296.12\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    21\n        label    \"\"\n        graphics\n        [\n            x    772.41\n            y    995.16\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    22\n        label    \"\"\n        graphics\n        [\n            x    1162.95\n            y    716.58\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    23\n        label    \"\"\n        graphics\n        [\n            x    539.85\n            y    999.55\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    24\n        label    \"\"\n        graphics\n        [\n            x    1074.65\n            y    1024.19\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    25\n        label    \"\"\n        graphics\n        [\n            x    1173.40\n            y    689.45\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    26\n        label    \"\"\n        graphics\n        [\n            x    1151.42\n            y    81.12\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    27\n        label    \"\"\n        graphics\n        [\n            x    1206.49\n            y    891.66\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    28\n        label    \"\"\n        graphics\n        [\n            x    883.16\n            y    63.87\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    29\n        label    \"\"\n        graphics\n        [\n            x    247.23\n            y    863.23\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    30\n        label    \"\"\n        graphics\n        [\n            x    168.93\n            y    259.65\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    31\n        label    \"\"\n        graphics\n        [\n            x    631.93\n            y    85.00\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    32\n        label    \"\"\n        graphics\n        [\n            x    2.57\n            y    1111.19\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    33\n        label    \"\"\n        graphics\n        [\n            x    1024.84\n            y    646.49\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    34\n        label    \"\"\n        graphics\n        [\n            x    950.83\n            y    721.48\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    35\n        label    \"\"\n        graphics\n        [\n            x    1153.29\n            y    85.38\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    36\n        label    \"\"\n        graphics\n        [\n            x    231.77\n            y    701.32\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    37\n        label    \"\"\n        graphics\n        [\n            x    670.13\n            y    117.70\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    38\n        label    \"\"\n        graphics\n        [\n            x    594.97\n            y    740.57\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    39\n        label    \"\"\n        graphics\n        [\n            x    1030.85\n            y    241.12\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    40\n        label    \"\"\n        graphics\n        [\n            x    1072.08\n            y    1161.13\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    41\n        label    \"\"\n        graphics\n        [\n            x    556.66\n            y    371.02\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    42\n        label    \"\"\n        graphics\n        [\n            x    1154.93\n            y    746.10\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    43\n        label    \"\"\n        graphics\n        [\n            x    694.48\n            y    771.70\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    44\n        label    \"\"\n        graphics\n        [\n            x    682.95\n            y    1085.44\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    45\n        label    \"\"\n        graphics\n        [\n            x    1217.45\n            y    80.60\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    46\n        label    \"\"\n        graphics\n        [\n            x    819.75\n            y    505.15\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    47\n        label    \"\"\n        graphics\n        [\n            x    872.83\n            y    737.43\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    48\n        label    \"\"\n        graphics\n        [\n            x    906.24\n            y    1116.50\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    49\n        label    \"\"\n        graphics\n        [\n            x    180.53\n            y    440.73\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    50\n        label    \"\"\n        graphics\n        [\n            x    499.89\n            y    1209.12\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    51\n        label    \"\"\n        graphics\n        [\n            x    206.98\n            y    839.84\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    52\n        label    \"\"\n        graphics\n        [\n            x    1231.66\n            y    311.03\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    53\n        label    \"\"\n        graphics\n        [\n            x    1107.16\n            y    753.95\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    54\n        label    \"\"\n        graphics\n        [\n            x    1161.95\n            y    869.27\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    55\n        label    \"\"\n        graphics\n        [\n            x    1052.39\n            y    947.09\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    56\n        label    \"\"\n        graphics\n        [\n            x    1185.30\n            y    606.30\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    57\n        label    \"\"\n        graphics\n        [\n            x    327.38\n            y    171.66\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    58\n        label    \"\"\n        graphics\n        [\n            x    54.01\n            y    573.56\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    59\n        label    \"\"\n        graphics\n        [\n            x    398.57\n            y    735.42\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    60\n        label    \"\"\n        graphics\n        [\n            x    294.48\n            y    487.45\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    61\n        label    \"\"\n        graphics\n        [\n            x    987.61\n            y    217.89\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    62\n        label    \"\"\n        graphics\n        [\n            x    32.50\n            y    365.01\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    63\n        label    \"\"\n        graphics\n        [\n            x    258.45\n            y    966.09\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    64\n        label    \"\"\n        graphics\n        [\n            x    913.27\n            y    586.11\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    65\n        label    \"\"\n        graphics\n        [\n            x    568.95\n            y    430.89\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    66\n        label    \"\"\n        graphics\n        [\n            x    173.58\n            y    996.23\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    67\n        label    \"\"\n        graphics\n        [\n            x    350.20\n            y    633.33\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    68\n        label    \"\"\n        graphics\n        [\n            x    1265.33\n            y    940.80\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    69\n        label    \"\"\n        graphics\n        [\n            x    110.19\n            y    632.47\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    70\n        label    \"\"\n        graphics\n        [\n            x    470.10\n            y    1135.32\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    71\n        label    \"\"\n        graphics\n        [\n            x    987.46\n            y    443.08\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    72\n        label    \"\"\n        graphics\n        [\n            x    930.17\n            y    1243.20\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    73\n        label    \"\"\n        graphics\n        [\n            x    1173.90\n            y    513.43\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    74\n        label    \"\"\n        graphics\n        [\n            x    976.64\n            y    105.88\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    75\n        label    \"\"\n        graphics\n        [\n            x    356.44\n            y    294.13\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    76\n        label    \"\"\n        graphics\n        [\n            x    596.82\n            y    150.84\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    77\n        label    \"\"\n        graphics\n        [\n            x    206.28\n            y    1026.31\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    78\n        label    \"\"\n        graphics\n        [\n            x    1207.12\n            y    234.62\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    79\n        label    \"\"\n        graphics\n        [\n            x    538.23\n            y    982.13\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    80\n        label    \"\"\n        graphics\n        [\n            x    235.33\n            y    567.85\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    81\n        label    \"\"\n        graphics\n        [\n            x    277.88\n            y    588.00\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    82\n        label    \"\"\n        graphics\n        [\n            x    264.76\n            y    926.59\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    83\n        label    \"\"\n        graphics\n        [\n            x    786.65\n            y    651.89\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    84\n        label    \"\"\n        graphics\n        [\n            x    53.75\n            y    308.09\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    85\n        label    \"\"\n        graphics\n        [\n            x    1126.40\n            y    1056.61\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    86\n        label    \"\"\n        graphics\n        [\n            x    944.21\n            y    858.07\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    87\n        label    \"\"\n        graphics\n        [\n            x    887.37\n            y    523.62\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    88\n        label    \"\"\n        graphics\n        [\n            x    826.35\n            y    547.97\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    89\n        label    \"\"\n        graphics\n        [\n            x    119.02\n            y    175.93\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    90\n        label    \"\"\n        graphics\n        [\n            x    132.62\n            y    900.04\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    91\n        label    \"\"\n        graphics\n        [\n            x    829.27\n            y    966.46\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    92\n        label    \"\"\n        graphics\n        [\n            x    776.81\n            y    638.44\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    93\n        label    \"\"\n        graphics\n        [\n            x    246.91\n            y    1215.97\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    94\n        label    \"\"\n        graphics\n        [\n            x    604.10\n            y    889.08\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    95\n        label    \"\"\n        graphics\n        [\n            x    4.14\n            y    989.88\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    96\n        label    \"\"\n        graphics\n        [\n            x    667.69\n            y    1201.36\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    97\n        label    \"\"\n        graphics\n        [\n            x    117.56\n            y    691.53\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    98\n        label    \"\"\n        graphics\n        [\n            x    165.04\n            y    861.74\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    99\n        label    \"\"\n        graphics\n        [\n            x    1179.02\n            y    256.12\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    100\n        label    \"\"\n        graphics\n        [\n            x    712.75\n            y    915.78\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    101\n        label    \"\"\n        graphics\n        [\n            x    887.18\n            y    961.66\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    102\n        label    \"\"\n        graphics\n        [\n            x    672.24\n            y    575.59\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    103\n        label    \"\"\n        graphics\n        [\n            x    700.65\n            y    124.02\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    104\n        label    \"\"\n        graphics\n        [\n            x    739.33\n            y    955.53\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    105\n        label    \"\"\n        graphics\n        [\n            x    954.46\n            y    577.57\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    106\n        label    \"\"\n        graphics\n        [\n            x    1123.30\n            y    1102.60\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    107\n        label    \"\"\n        graphics\n        [\n            x    427.97\n            y    632.12\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    108\n        label    \"\"\n        graphics\n        [\n            x    973.36\n            y    636.30\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    109\n        label    \"\"\n        graphics\n        [\n            x    443.80\n            y    243.35\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    110\n        label    \"\"\n        graphics\n        [\n            x    877.77\n            y    488.96\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    111\n        label    \"\"\n        graphics\n        [\n            x    913.27\n            y    1106.63\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    112\n        label    \"\"\n        graphics\n        [\n            x    462.14\n            y    922.17\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    113\n        label    \"\"\n        graphics\n        [\n            x    985.64\n            y    1003.76\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    114\n        label    \"\"\n        graphics\n        [\n            x    520.85\n            y    143.32\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    115\n        label    \"\"\n        graphics\n        [\n            x    551.30\n            y    164.57\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    116\n        label    \"\"\n        graphics\n        [\n            x    1080.73\n            y    387.74\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    117\n        label    \"\"\n        graphics\n        [\n            x    78.49\n            y    186.90\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    118\n        label    \"\"\n        graphics\n        [\n            x    1131.51\n            y    1120.32\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    119\n        label    \"\"\n        graphics\n        [\n            x    192.67\n            y    450.91\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    120\n        label    \"\"\n        graphics\n        [\n            x    1213.42\n            y    1223.85\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    121\n        label    \"\"\n        graphics\n        [\n            x    598.35\n            y    1168.10\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    122\n        label    \"\"\n        graphics\n        [\n            x    193.36\n            y    459.87\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    123\n        label    \"\"\n        graphics\n        [\n            x    251.93\n            y    313.08\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    124\n        label    \"\"\n        graphics\n        [\n            x    1248.27\n            y    1251.56\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    125\n        label    \"\"\n        graphics\n        [\n            x    669.15\n            y    1160.72\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    126\n        label    \"\"\n        graphics\n        [\n            x    1204.12\n            y    758.67\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    127\n        label    \"\"\n        graphics\n        [\n            x    1089.36\n            y    201.48\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    128\n        label    \"\"\n        graphics\n        [\n            x    331.31\n            y    262.91\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    129\n        label    \"\"\n        graphics\n        [\n            x    751.38\n            y    784.58\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    130\n        label    \"\"\n        graphics\n        [\n            x    1095.53\n            y    809.69\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    131\n        label    \"\"\n        graphics\n        [\n            x    810.20\n            y    1069.35\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    132\n        label    \"\"\n        graphics\n        [\n            x    665.20\n            y    892.03\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    133\n        label    \"\"\n        graphics\n        [\n            x    299.73\n            y    205.36\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    134\n        label    \"\"\n        graphics\n        [\n            x    996.02\n            y    142.56\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    135\n        label    \"\"\n        graphics\n        [\n            x    126.84\n            y    33.83\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    136\n        label    \"\"\n        graphics\n        [\n            x    991.99\n            y    529.62\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    137\n        label    \"\"\n        graphics\n        [\n            x    346.03\n            y    65.14\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    138\n        label    \"\"\n        graphics\n        [\n            x    1239.81\n            y    4.40\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    139\n        label    \"\"\n        graphics\n        [\n            x    1196.43\n            y    623.50\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    140\n        label    \"\"\n        graphics\n        [\n            x    998.41\n            y    959.61\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    141\n        label    \"\"\n        graphics\n        [\n            x    1153.21\n            y    241.95\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    142\n        label    \"\"\n        graphics\n        [\n            x    1023.75\n            y    959.47\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    143\n        label    \"\"\n        graphics\n        [\n            x    990.33\n            y    1059.41\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    144\n        label    \"\"\n        graphics\n        [\n            x    378.99\n            y    782.08\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    145\n        label    \"\"\n        graphics\n        [\n            x    24.58\n            y    852.66\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    146\n        label    \"\"\n        graphics\n        [\n            x    647.68\n            y    381.54\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    147\n        label    \"\"\n        graphics\n        [\n            x    540.26\n            y    1156.57\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    148\n        label    \"\"\n        graphics\n        [\n            x    990.16\n            y    583.46\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    149\n        label    \"\"\n        graphics\n        [\n            x    458.10\n            y    553.03\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    150\n        label    \"\"\n        graphics\n        [\n            x    426.11\n            y    440.50\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    151\n        label    \"\"\n        graphics\n        [\n            x    1194.10\n            y    292.08\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    152\n        label    \"\"\n        graphics\n        [\n            x    489.44\n            y    312.73\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    153\n        label    \"\"\n        graphics\n        [\n            x    520.83\n            y    587.46\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    154\n        label    \"\"\n        graphics\n        [\n            x    1191.59\n            y    1031.00\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    155\n        label    \"\"\n        graphics\n        [\n            x    1086.57\n            y    367.11\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    156\n        label    \"\"\n        graphics\n        [\n            x    252.15\n            y    545.39\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    157\n        label    \"\"\n        graphics\n        [\n            x    949.25\n            y    1183.95\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    158\n        label    \"\"\n        graphics\n        [\n            x    628.99\n            y    308.54\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    159\n        label    \"\"\n        graphics\n        [\n            x    1266.60\n            y    658.20\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    160\n        label    \"\"\n        graphics\n        [\n            x    550.53\n            y    1215.91\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    161\n        label    \"\"\n        graphics\n        [\n            x    909.91\n            y    819.86\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    162\n        label    \"\"\n        graphics\n        [\n            x    489.99\n            y    1271.03\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    163\n        label    \"\"\n        graphics\n        [\n            x    907.82\n            y    352.60\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    164\n        label    \"\"\n        graphics\n        [\n            x    983.30\n            y    1070.36\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    165\n        label    \"\"\n        graphics\n        [\n            x    941.53\n            y    976.89\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    166\n        label    \"\"\n        graphics\n        [\n            x    832.29\n            y    851.34\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    167\n        label    \"\"\n        graphics\n        [\n            x    1162.64\n            y    443.32\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    168\n        label    \"\"\n        graphics\n        [\n            x    602.43\n            y    113.47\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    169\n        label    \"\"\n        graphics\n        [\n            x    1241.66\n            y    211.18\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    170\n        label    \"\"\n        graphics\n        [\n            x    679.38\n            y    596.36\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    171\n        label    \"\"\n        graphics\n        [\n            x    485.72\n            y    531.18\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    172\n        label    \"\"\n        graphics\n        [\n            x    260.43\n            y    464.59\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    173\n        label    \"\"\n        graphics\n        [\n            x    41.22\n            y    121.09\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    174\n        label    \"\"\n        graphics\n        [\n            x    357.96\n            y    294.76\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    175\n        label    \"\"\n        graphics\n        [\n            x    934.24\n            y    1022.76\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    176\n        label    \"\"\n        graphics\n        [\n            x    235.85\n            y    729.64\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    177\n        label    \"\"\n        graphics\n        [\n            x    1216.04\n            y    1046.73\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    178\n        label    \"\"\n        graphics\n        [\n            x    1136.52\n            y    1196.35\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    179\n        label    \"\"\n        graphics\n        [\n            x    133.26\n            y    1053.71\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    180\n        label    \"\"\n        graphics\n        [\n            x    898.61\n            y    849.66\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    181\n        label    \"\"\n        graphics\n        [\n            x    1038.85\n            y    116.20\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    182\n        label    \"\"\n        graphics\n        [\n            x    502.80\n            y    814.01\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    183\n        label    \"\"\n        graphics\n        [\n            x    809.20\n            y    1211.74\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    184\n        label    \"\"\n        graphics\n        [\n            x    88.31\n            y    207.11\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    185\n        label    \"\"\n        graphics\n        [\n            x    1124.88\n            y    1231.65\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    186\n        label    \"\"\n        graphics\n        [\n            x    470.65\n            y    892.01\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    187\n        label    \"\"\n        graphics\n        [\n            x    949.76\n            y    850.41\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    188\n        label    \"\"\n        graphics\n        [\n            x    314.50\n            y    740.01\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    189\n        label    \"\"\n        graphics\n        [\n            x    148.10\n            y    1187.41\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    190\n        label    \"\"\n        graphics\n        [\n            x    637.82\n            y    1263.62\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    191\n        label    \"\"\n        graphics\n        [\n            x    1145.65\n            y    541.54\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    192\n        label    \"\"\n        graphics\n        [\n            x    1009.41\n            y    649.45\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    193\n        label    \"\"\n        graphics\n        [\n            x    999.22\n            y    482.43\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    194\n        label    \"\"\n        graphics\n        [\n            x    587.87\n            y    607.74\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    195\n        label    \"\"\n        graphics\n        [\n            x    273.62\n            y    1253.08\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    196\n        label    \"\"\n        graphics\n        [\n            x    1068.05\n            y    253.73\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    197\n        label    \"\"\n        graphics\n        [\n            x    1149.77\n            y    469.15\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    198\n        label    \"\"\n        graphics\n        [\n            x    866.99\n            y    577.47\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    199\n        label    \"\"\n        graphics\n        [\n            x    1210.23\n            y    847.78\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    edge\n    [\n        source    1\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    1\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    1\n        target    63\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    10\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    100\n        target    84\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    101\n        target    48\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    102\n        target    65\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    103\n        target    26\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    104\n        target    96\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    105\n        target    81\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    106\n        target    81\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    107\n        target    103\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    108\n        target    106\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    109\n        target    79\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    11\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    110\n        target    31\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    110\n        target    87\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    111\n        target    52\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    112\n        target    176\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    112\n        target    40\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    113\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    113\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    114\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    115\n        target    102\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    116\n        target    46\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    117\n        target    29\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    118\n        target    108\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    119\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    12\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    12\n        target    157\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    120\n        target    39\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    121\n        target    107\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    121\n        target    68\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    122\n        target    97\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    123\n        target    29\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    124\n        target    99\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    125\n        target    84\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    126\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    127\n        target    106\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    127\n        target    29\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    128\n        target    117\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    128\n        target    94\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    129\n        target    100\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    13\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    130\n        target    192\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    130\n        target    87\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    130\n        target    99\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    131\n        target    113\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    132\n        target    80\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    133\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    134\n        target    117\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    135\n        target    34\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    136\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    137\n        target    63\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    138\n        target    75\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    138\n        target    76\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    139\n        target    64\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    14\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    140\n        target    116\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    141\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    141\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    142\n        target    39\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    143\n        target    48\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    144\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    145\n        target    123\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    146\n        target    148\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    146\n        target    61\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    147\n        target    115\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    147\n        target    163\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    148\n        target    47\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    149\n        target    69\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    149\n        target    79\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    15\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    150\n        target    60\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    151\n        target    115\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    152\n        target    108\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    153\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    154\n        target    145\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    155\n        target    89\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    156\n        target    148\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    157\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    158\n        target    118\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    158\n        target    164\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    158\n        target    65\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    159\n        target    20\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    159\n        target    67\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    16\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    160\n        target    115\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    161\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    162\n        target    60\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    163\n        target    120\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    164\n        target    118\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    165\n        target    145\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    166\n        target    106\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    167\n        target    45\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    168\n        target    146\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    169\n        target    82\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    17\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    170\n        target    91\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    171\n        target    140\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    172\n        target    50\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    173\n        target    36\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    174\n        target    69\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    175\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    176\n        target    169\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    177\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    178\n        target    137\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    179\n        target    175\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    18\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    180\n        target    34\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    181\n        target    93\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    182\n        target    37\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    183\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    184\n        target    122\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    185\n        target    25\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    185\n        target    71\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    186\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    187\n        target    152\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    188\n        target    146\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    188\n        target    19\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    188\n        target    81\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    189\n        target    73\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    189\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    19\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    190\n        target    102\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    191\n        target    101\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    191\n        target    178\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    192\n        target    76\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    193\n        target    71\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    194\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    195\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    195\n        target    65\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    196\n        target    195\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    197\n        target    82\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    198\n        target    107\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    198\n        target    119\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    199\n        target    82\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    2\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    20\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    21\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    22\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    23\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    24\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    25\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    26\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    27\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    28\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    29\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    3\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    30\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    31\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    32\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    33\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    34\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    35\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    36\n        target    20\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    37\n        target    34\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    38\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    39\n        target    25\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    4\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    40\n        target    34\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    41\n        target    37\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    42\n        target    28\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    43\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    44\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    45\n        target    24\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    46\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    47\n        target    24\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    48\n        target    38\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    49\n        target    41\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    5\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    50\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    51\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    52\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    52\n        target    139\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    52\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    53\n        target    33\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    54\n        target    103\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    54\n        target    134\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    54\n        target    29\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    55\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    56\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    57\n        target    29\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    58\n        target    38\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    59\n        target    30\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    59\n        target    63\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    6\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    60\n        target    52\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    61\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    62\n        target    117\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    62\n        target    47\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    63\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    63\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    64\n        target    32\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    65\n        target    56\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    66\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    66\n        target    32\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    67\n        target    36\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    68\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    69\n        target    50\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    7\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    70\n        target    38\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    71\n        target    28\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    72\n        target    43\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    73\n        target    28\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    74\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    75\n        target    116\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    75\n        target    24\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    76\n        target    34\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    77\n        target    50\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    78\n        target    66\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    79\n        target    122\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    79\n        target    69\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    8\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    80\n        target    38\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    81\n        target    62\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    82\n        target    163\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    82\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    83\n        target    36\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    84\n        target    68\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    84\n        target    96\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    85\n        target    26\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    85\n        target    43\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    86\n        target    27\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    87\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    88\n        target    77\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    89\n        target    47\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    9\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    90\n        target    82\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    91\n        target    33\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    92\n        target    81\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    93\n        target    24\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    94\n        target    101\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    94\n        target    52\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    95\n        target    46\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    96\n        target    35\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    97\n        target    76\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    98\n        target    166\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    98\n        target    41\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    99\n        target    58\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n]\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v200e240.tglf",
    "content": "0 55.000 263.000 30.000 30.000\n1 126.000 915.000 30.000 30.000\n2 415.000 474.000 30.000 30.000\n3 1044.000 168.000 30.000 30.000\n4 790.000 643.000 30.000 30.000\n5 355.000 685.000 30.000 30.000\n6 276.000 861.000 30.000 30.000\n7 470.000 852.000 30.000 30.000\n8 882.000 972.000 30.000 30.000\n9 983.000 950.000 30.000 30.000\n10 358.000 190.000 30.000 30.000\n11 683.000 314.000 30.000 30.000\n12 1012.000 1080.000 30.000 30.000\n13 318.000 713.000 30.000 30.000\n14 902.000 321.000 30.000 30.000\n15 1042.000 993.000 30.000 30.000\n16 891.000 404.000 30.000 30.000\n17 703.000 796.000 30.000 30.000\n18 1224.000 158.000 30.000 30.000\n19 465.000 431.000 30.000 30.000\n20 1137.000 296.000 30.000 30.000\n21 772.000 995.000 30.000 30.000\n22 1162.000 716.000 30.000 30.000\n23 539.000 999.000 30.000 30.000\n24 1074.000 1024.000 30.000 30.000\n25 1173.000 689.000 30.000 30.000\n26 1151.000 81.000 30.000 30.000\n27 1206.000 891.000 30.000 30.000\n28 883.000 63.000 30.000 30.000\n29 247.000 863.000 30.000 30.000\n30 168.000 259.000 30.000 30.000\n31 631.000 85.000 30.000 30.000\n32 2.000 1111.000 30.000 30.000\n33 1024.000 646.000 30.000 30.000\n34 950.000 721.000 30.000 30.000\n35 1153.000 85.000 30.000 30.000\n36 231.000 701.000 30.000 30.000\n37 670.000 117.000 30.000 30.000\n38 594.000 740.000 30.000 30.000\n39 1030.000 241.000 30.000 30.000\n40 1072.000 1161.000 30.000 30.000\n41 556.000 371.000 30.000 30.000\n42 1154.000 746.000 30.000 30.000\n43 694.000 771.000 30.000 30.000\n44 682.000 1085.000 30.000 30.000\n45 1217.000 80.000 30.000 30.000\n46 819.000 505.000 30.000 30.000\n47 872.000 737.000 30.000 30.000\n48 906.000 1116.000 30.000 30.000\n49 180.000 440.000 30.000 30.000\n50 499.000 1209.000 30.000 30.000\n51 206.000 839.000 30.000 30.000\n52 1231.000 311.000 30.000 30.000\n53 1107.000 753.000 30.000 30.000\n54 1161.000 869.000 30.000 30.000\n55 1052.000 947.000 30.000 30.000\n56 1185.000 606.000 30.000 30.000\n57 327.000 171.000 30.000 30.000\n58 54.000 573.000 30.000 30.000\n59 398.000 735.000 30.000 30.000\n60 294.000 487.000 30.000 30.000\n61 987.000 217.000 30.000 30.000\n62 32.000 365.000 30.000 30.000\n63 258.000 966.000 30.000 30.000\n64 913.000 586.000 30.000 30.000\n65 568.000 430.000 30.000 30.000\n66 173.000 996.000 30.000 30.000\n67 350.000 633.000 30.000 30.000\n68 1265.000 940.000 30.000 30.000\n69 110.000 632.000 30.000 30.000\n70 470.000 1135.000 30.000 30.000\n71 987.000 443.000 30.000 30.000\n72 930.000 1243.000 30.000 30.000\n73 1173.000 513.000 30.000 30.000\n74 976.000 105.000 30.000 30.000\n75 356.000 294.000 30.000 30.000\n76 596.000 150.000 30.000 30.000\n77 206.000 1026.000 30.000 30.000\n78 1207.000 234.000 30.000 30.000\n79 538.000 982.000 30.000 30.000\n80 235.000 567.000 30.000 30.000\n81 277.000 588.000 30.000 30.000\n82 264.000 926.000 30.000 30.000\n83 786.000 651.000 30.000 30.000\n84 53.000 308.000 30.000 30.000\n85 1126.000 1056.000 30.000 30.000\n86 944.000 858.000 30.000 30.000\n87 887.000 523.000 30.000 30.000\n88 826.000 547.000 30.000 30.000\n89 119.000 175.000 30.000 30.000\n90 132.000 900.000 30.000 30.000\n91 829.000 966.000 30.000 30.000\n92 776.000 638.000 30.000 30.000\n93 246.000 1215.000 30.000 30.000\n94 604.000 889.000 30.000 30.000\n95 4.000 989.000 30.000 30.000\n96 667.000 1201.000 30.000 30.000\n97 117.000 691.000 30.000 30.000\n98 165.000 861.000 30.000 30.000\n99 1179.000 256.000 30.000 30.000\n100 712.000 915.000 30.000 30.000\n101 887.000 961.000 30.000 30.000\n102 672.000 575.000 30.000 30.000\n103 700.000 124.000 30.000 30.000\n104 739.000 955.000 30.000 30.000\n105 954.000 577.000 30.000 30.000\n106 1123.000 1102.000 30.000 30.000\n107 427.000 632.000 30.000 30.000\n108 973.000 636.000 30.000 30.000\n109 443.000 243.000 30.000 30.000\n110 877.000 488.000 30.000 30.000\n111 913.000 1106.000 30.000 30.000\n112 462.000 922.000 30.000 30.000\n113 985.000 1003.000 30.000 30.000\n114 520.000 143.000 30.000 30.000\n115 551.000 164.000 30.000 30.000\n116 1080.000 387.000 30.000 30.000\n117 78.000 186.000 30.000 30.000\n118 1131.000 1120.000 30.000 30.000\n119 192.000 450.000 30.000 30.000\n120 1213.000 1223.000 30.000 30.000\n121 598.000 1168.000 30.000 30.000\n122 193.000 459.000 30.000 30.000\n123 251.000 313.000 30.000 30.000\n124 1248.000 1251.000 30.000 30.000\n125 669.000 1160.000 30.000 30.000\n126 1204.000 758.000 30.000 30.000\n127 1089.000 201.000 30.000 30.000\n128 331.000 262.000 30.000 30.000\n129 751.000 784.000 30.000 30.000\n130 1095.000 809.000 30.000 30.000\n131 810.000 1069.000 30.000 30.000\n132 665.000 892.000 30.000 30.000\n133 299.000 205.000 30.000 30.000\n134 996.000 142.000 30.000 30.000\n135 126.000 33.000 30.000 30.000\n136 991.000 529.000 30.000 30.000\n137 346.000 65.000 30.000 30.000\n138 1239.000 4.000 30.000 30.000\n139 1196.000 623.000 30.000 30.000\n140 998.000 959.000 30.000 30.000\n141 1153.000 241.000 30.000 30.000\n142 1023.000 959.000 30.000 30.000\n143 990.000 1059.000 30.000 30.000\n144 378.000 782.000 30.000 30.000\n145 24.000 852.000 30.000 30.000\n146 647.000 381.000 30.000 30.000\n147 540.000 1156.000 30.000 30.000\n148 990.000 583.000 30.000 30.000\n149 458.000 553.000 30.000 30.000\n150 426.000 440.000 30.000 30.000\n151 1194.000 292.000 30.000 30.000\n152 489.000 312.000 30.000 30.000\n153 520.000 587.000 30.000 30.000\n154 1191.000 1031.000 30.000 30.000\n155 1086.000 367.000 30.000 30.000\n156 252.000 545.000 30.000 30.000\n157 949.000 1183.000 30.000 30.000\n158 628.000 308.000 30.000 30.000\n159 1266.000 658.000 30.000 30.000\n160 550.000 1215.000 30.000 30.000\n161 909.000 819.000 30.000 30.000\n162 489.000 1271.000 30.000 30.000\n163 907.000 352.000 30.000 30.000\n164 983.000 1070.000 30.000 30.000\n165 941.000 976.000 30.000 30.000\n166 832.000 851.000 30.000 30.000\n167 1162.000 443.000 30.000 30.000\n168 602.000 113.000 30.000 30.000\n169 1241.000 211.000 30.000 30.000\n170 679.000 596.000 30.000 30.000\n171 485.000 531.000 30.000 30.000\n172 260.000 464.000 30.000 30.000\n173 41.000 121.000 30.000 30.000\n174 357.000 294.000 30.000 30.000\n175 934.000 1022.000 30.000 30.000\n176 235.000 729.000 30.000 30.000\n177 1216.000 1046.000 30.000 30.000\n178 1136.000 1196.000 30.000 30.000\n179 133.000 1053.000 30.000 30.000\n180 898.000 849.000 30.000 30.000\n181 1038.000 116.000 30.000 30.000\n182 502.000 814.000 30.000 30.000\n183 809.000 1211.000 30.000 30.000\n184 88.000 207.000 30.000 30.000\n185 1124.000 1231.000 30.000 30.000\n186 470.000 892.000 30.000 30.000\n187 949.000 850.000 30.000 30.000\n188 314.000 740.000 30.000 30.000\n189 148.000 1187.000 30.000 30.000\n190 637.000 1263.000 30.000 30.000\n191 1145.000 541.000 30.000 30.000\n192 1009.000 649.000 30.000 30.000\n193 999.000 482.000 30.000 30.000\n194 587.000 607.000 30.000 30.000\n195 273.000 1253.000 30.000 30.000\n196 1068.000 253.000 30.000 30.000\n197 1149.000 469.000 30.000 30.000\n198 866.000 577.000 30.000 30.000\n199 1210.000 847.000 30.000 30.000\n#\n177 9\n60 52\n108 106\n74 18\n1 0\n85 43\n94 52\n198 107\n43 0\n92 81\n14 7\n93 24\n3 0\n51 5\n20 15\n78 66\n116 46\n65 56\n178 137\n184 122\n61 18\n57 29\n173 36\n96 35\n157 5\n48 38\n72 43\n118 108\n35 17\n1 15\n179 175\n158 65\n7 2\n130 192\n185 25\n29 17\n28 5\n128 94\n98 166\n80 38\n141 11\n98 41\n155 89\n150 60\n102 65\n31 10\n38 14\n33 16\n197 82\n132 80\n166 106\n125 84\n62 47\n195 65\n172 50\n15 12\n115 102\n159 20\n50 10\n130 87\n164 118\n84 68\n105 81\n152 108\n56 6\n110 31\n128 117\n71 28\n163 120\n127 106\n148 47\n24 12\n47 24\n130 99\n165 145\n171 140\n88 77\n90 82\n11 6\n183 3\n189 73\n161 9\n87 12\n198 119\n134 117\n91 33\n186 14\n54 103\n113 9\n84 96\n45 24\n42 28\n149 69\n159 67\n196 195\n9 7\n127 29\n32 8\n190 102\n146 148\n77 50\n36 20\n176 169\n141 4\n103 26\n68 21\n58 38\n25 1\n8 0\n64 32\n95 46\n147 115\n187 152\n156 148\n52 6\n175 9\n126 4\n147 163\n112 40\n100 84\n12 157\n138 76\n169 82\n66 32\n160 115\n4 1\n23 14\n75 24\n75 116\n199 82\n188 19\n89 47\n113 17\n6 5\n59 30\n70 38\n16 14\n22 15\n136 2\n153 11\n76 34\n180 34\n40 34\n62 117\n189 9\n191 101\n81 62\n145 123\n26 8\n109 79\n168 146\n44 5\n194 21\n170 91\n121 107\n49 41\n101 48\n123 29\n120 39\n83 36\n193 71\n79 122\n41 37\n114 3\n82 163\n67 36\n5 2\n53 33\n121 68\n143 48\n85 26\n1 63\n129 100\n55 6\n73 28\n142 39\n146 61\n30 9\n119 21\n139 64\n137 63\n63 4\n149 79\n19 17\n111 52\n39 25\n59 63\n181 93\n34 7\n144 1\n133 22\n122 97\n79 69\n188 146\n158 118\n10 4\n117 29\n174 69\n13 0\n66 16\n140 116\n54 29\n107 103\n154 145\n94 101\n191 178\n18 10\n188 81\n151 115\n182 37\n195 16\n110 87\n2 0\n138 75\n167 45\n192 76\n52 11\n104 96\n86 27\n69 50\n27 4\n124 99\n99 58\n21 0\n162 60\n63 22\n158 164\n17 4\n82 6\n135 34\n106 81\n52 139\n54 134\n97 76\n131 113\n112 176\n37 34\n185 71\n12 10\n46 11\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v200e260.gml",
    "content": "graph\n[\n    node\n    [\n        id    0\n        label    \"\"\n        graphics\n        [\n            x    99.10\n            y    1263.81\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    1\n        label    \"\"\n        graphics\n        [\n            x    444.15\n            y    299.90\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    2\n        label    \"\"\n        graphics\n        [\n            x    1171.48\n            y    961.53\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    3\n        label    \"\"\n        graphics\n        [\n            x    723.31\n            y    714.61\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    4\n        label    \"\"\n        graphics\n        [\n            x    639.14\n            y    1252.86\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    5\n        label    \"\"\n        graphics\n        [\n            x    808.56\n            y    720.47\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    6\n        label    \"\"\n        graphics\n        [\n            x    324.08\n            y    1165.26\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    7\n        label    \"\"\n        graphics\n        [\n            x    948.62\n            y    695.87\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    8\n        label    \"\"\n        graphics\n        [\n            x    777.94\n            y    1228.06\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    9\n        label    \"\"\n        graphics\n        [\n            x    816.16\n            y    711.10\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    10\n        label    \"\"\n        graphics\n        [\n            x    568.33\n            y    971.32\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    11\n        label    \"\"\n        graphics\n        [\n            x    114.30\n            y    353.61\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    12\n        label    \"\"\n        graphics\n        [\n            x    1098.20\n            y    707.19\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    13\n        label    \"\"\n        graphics\n        [\n            x    546.16\n            y    457.04\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    14\n        label    \"\"\n        graphics\n        [\n            x    1125.74\n            y    796.93\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    15\n        label    \"\"\n        graphics\n        [\n            x    757.05\n            y    1070.05\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    16\n        label    \"\"\n        graphics\n        [\n            x    158.05\n            y    1107.32\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    17\n        label    \"\"\n        graphics\n        [\n            x    1153.80\n            y    921.07\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    18\n        label    \"\"\n        graphics\n        [\n            x    1179.56\n            y    414.65\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    19\n        label    \"\"\n        graphics\n        [\n            x    417.48\n            y    88.71\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    20\n        label    \"\"\n        graphics\n        [\n            x    360.82\n            y    1058.95\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    21\n        label    \"\"\n        graphics\n        [\n            x    323.60\n            y    1048.70\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    22\n        label    \"\"\n        graphics\n        [\n            x    955.30\n            y    712.18\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    23\n        label    \"\"\n        graphics\n        [\n            x    467.37\n            y    102.38\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    24\n        label    \"\"\n        graphics\n        [\n            x    981.57\n            y    1072.21\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    25\n        label    \"\"\n        graphics\n        [\n            x    301.54\n            y    199.14\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    26\n        label    \"\"\n        graphics\n        [\n            x    349.31\n            y    584.18\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    27\n        label    \"\"\n        graphics\n        [\n            x    155.47\n            y    243.95\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    28\n        label    \"\"\n        graphics\n        [\n            x    594.18\n            y    860.14\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    29\n        label    \"\"\n        graphics\n        [\n            x    260.72\n            y    1206.88\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    30\n        label    \"\"\n        graphics\n        [\n            x    293.00\n            y    670.81\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    31\n        label    \"\"\n        graphics\n        [\n            x    1012.51\n            y    178.87\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    32\n        label    \"\"\n        graphics\n        [\n            x    839.42\n            y    998.54\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    33\n        label    \"\"\n        graphics\n        [\n            x    448.35\n            y    1265.59\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    34\n        label    \"\"\n        graphics\n        [\n            x    1173.41\n            y    335.26\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    35\n        label    \"\"\n        graphics\n        [\n            x    116.23\n            y    1057.48\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    36\n        label    \"\"\n        graphics\n        [\n            x    326.03\n            y    1127.62\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    37\n        label    \"\"\n        graphics\n        [\n            x    945.31\n            y    178.78\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    38\n        label    \"\"\n        graphics\n        [\n            x    1077.78\n            y    137.07\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    39\n        label    \"\"\n        graphics\n        [\n            x    1005.20\n            y    1250.87\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    40\n        label    \"\"\n        graphics\n        [\n            x    116.83\n            y    1182.50\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    41\n        label    \"\"\n        graphics\n        [\n            x    617.59\n            y    843.34\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    42\n        label    \"\"\n        graphics\n        [\n            x    235.38\n            y    341.74\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    43\n        label    \"\"\n        graphics\n        [\n            x    694.74\n            y    731.46\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    44\n        label    \"\"\n        graphics\n        [\n            x    410.65\n            y    482.64\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    45\n        label    \"\"\n        graphics\n        [\n            x    284.20\n            y    1257.24\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    46\n        label    \"\"\n        graphics\n        [\n            x    117.57\n            y    697.84\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    47\n        label    \"\"\n        graphics\n        [\n            x    635.42\n            y    909.84\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    48\n        label    \"\"\n        graphics\n        [\n            x    422.68\n            y    1217.41\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    49\n        label    \"\"\n        graphics\n        [\n            x    65.16\n            y    841.34\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    50\n        label    \"\"\n        graphics\n        [\n            x    1216.23\n            y    893.83\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    51\n        label    \"\"\n        graphics\n        [\n            x    837.05\n            y    1157.33\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    52\n        label    \"\"\n        graphics\n        [\n            x    987.82\n            y    400.76\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    53\n        label    \"\"\n        graphics\n        [\n            x    335.05\n            y    446.92\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    54\n        label    \"\"\n        graphics\n        [\n            x    157.89\n            y    1158.17\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    55\n        label    \"\"\n        graphics\n        [\n            x    445.74\n            y    483.67\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    56\n        label    \"\"\n        graphics\n        [\n            x    1260.47\n            y    93.69\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    57\n        label    \"\"\n        graphics\n        [\n            x    351.25\n            y    405.08\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    58\n        label    \"\"\n        graphics\n        [\n            x    1160.10\n            y    5.48\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    59\n        label    \"\"\n        graphics\n        [\n            x    161.29\n            y    647.44\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    60\n        label    \"\"\n        graphics\n        [\n            x    1187.34\n            y    495.79\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    61\n        label    \"\"\n        graphics\n        [\n            x    861.51\n            y    219.33\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    62\n        label    \"\"\n        graphics\n        [\n            x    705.57\n            y    237.49\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    63\n        label    \"\"\n        graphics\n        [\n            x    970.52\n            y    461.03\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    64\n        label    \"\"\n        graphics\n        [\n            x    709.71\n            y    964.43\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    65\n        label    \"\"\n        graphics\n        [\n            x    44.77\n            y    663.03\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    66\n        label    \"\"\n        graphics\n        [\n            x    396.68\n            y    879.75\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    67\n        label    \"\"\n        graphics\n        [\n            x    210.83\n            y    77.19\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    68\n        label    \"\"\n        graphics\n        [\n            x    470.86\n            y    74.44\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    69\n        label    \"\"\n        graphics\n        [\n            x    275.69\n            y    322.18\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    70\n        label    \"\"\n        graphics\n        [\n            x    1032.00\n            y    1156.48\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    71\n        label    \"\"\n        graphics\n        [\n            x    499.47\n            y    458.49\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    72\n        label    \"\"\n        graphics\n        [\n            x    116.58\n            y    1172.23\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    73\n        label    \"\"\n        graphics\n        [\n            x    634.45\n            y    93.43\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    74\n        label    \"\"\n        graphics\n        [\n            x    232.69\n            y    355.33\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    75\n        label    \"\"\n        graphics\n        [\n            x    1071.41\n            y    936.06\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    76\n        label    \"\"\n        graphics\n        [\n            x    373.55\n            y    895.35\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    77\n        label    \"\"\n        graphics\n        [\n            x    268.22\n            y    831.62\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    78\n        label    \"\"\n        graphics\n        [\n            x    806.40\n            y    473.51\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    79\n        label    \"\"\n        graphics\n        [\n            x    279.23\n            y    134.40\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    80\n        label    \"\"\n        graphics\n        [\n            x    856.41\n            y    930.81\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    81\n        label    \"\"\n        graphics\n        [\n            x    423.32\n            y    197.91\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    82\n        label    \"\"\n        graphics\n        [\n            x    787.36\n            y    657.22\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    83\n        label    \"\"\n        graphics\n        [\n            x    134.01\n            y    1055.55\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    84\n        label    \"\"\n        graphics\n        [\n            x    830.37\n            y    1262.22\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    85\n        label    \"\"\n        graphics\n        [\n            x    647.13\n            y    137.68\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    86\n        label    \"\"\n        graphics\n        [\n            x    839.01\n            y    1267.70\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    87\n        label    \"\"\n        graphics\n        [\n            x    50.38\n            y    33.94\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    88\n        label    \"\"\n        graphics\n        [\n            x    1250.25\n            y    1170.26\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    89\n        label    \"\"\n        graphics\n        [\n            x    430.37\n            y    100.19\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    90\n        label    \"\"\n        graphics\n        [\n            x    677.11\n            y    1033.10\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    91\n        label    \"\"\n        graphics\n        [\n            x    416.10\n            y    152.87\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    92\n        label    \"\"\n        graphics\n        [\n            x    804.75\n            y    286.92\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    93\n        label    \"\"\n        graphics\n        [\n            x    27.75\n            y    802.22\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    94\n        label    \"\"\n        graphics\n        [\n            x    666.80\n            y    598.43\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    95\n        label    \"\"\n        graphics\n        [\n            x    956.91\n            y    1140.37\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    96\n        label    \"\"\n        graphics\n        [\n            x    279.33\n            y    125.74\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    97\n        label    \"\"\n        graphics\n        [\n            x    605.91\n            y    535.00\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    98\n        label    \"\"\n        graphics\n        [\n            x    185.63\n            y    879.41\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    99\n        label    \"\"\n        graphics\n        [\n            x    907.36\n            y    714.70\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    100\n        label    \"\"\n        graphics\n        [\n            x    768.78\n            y    1048.08\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    101\n        label    \"\"\n        graphics\n        [\n            x    5.13\n            y    341.45\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    102\n        label    \"\"\n        graphics\n        [\n            x    325.05\n            y    700.32\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    103\n        label    \"\"\n        graphics\n        [\n            x    1005.90\n            y    1095.51\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    104\n        label    \"\"\n        graphics\n        [\n            x    1133.73\n            y    647.84\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    105\n        label    \"\"\n        graphics\n        [\n            x    404.68\n            y    407.43\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    106\n        label    \"\"\n        graphics\n        [\n            x    684.28\n            y    171.62\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    107\n        label    \"\"\n        graphics\n        [\n            x    885.67\n            y    317.48\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    108\n        label    \"\"\n        graphics\n        [\n            x    381.22\n            y    1131.57\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    109\n        label    \"\"\n        graphics\n        [\n            x    453.98\n            y    253.91\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    110\n        label    \"\"\n        graphics\n        [\n            x    1087.26\n            y    730.21\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    111\n        label    \"\"\n        graphics\n        [\n            x    1177.94\n            y    611.66\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    112\n        label    \"\"\n        graphics\n        [\n            x    893.55\n            y    1116.21\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    113\n        label    \"\"\n        graphics\n        [\n            x    1096.71\n            y    415.81\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    114\n        label    \"\"\n        graphics\n        [\n            x    805.10\n            y    710.32\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    115\n        label    \"\"\n        graphics\n        [\n            x    686.22\n            y    9.96\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    116\n        label    \"\"\n        graphics\n        [\n            x    1101.79\n            y    136.97\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    117\n        label    \"\"\n        graphics\n        [\n            x    735.85\n            y    40.65\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    118\n        label    \"\"\n        graphics\n        [\n            x    1063.74\n            y    588.84\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    119\n        label    \"\"\n        graphics\n        [\n            x    1147.09\n            y    543.98\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    120\n        label    \"\"\n        graphics\n        [\n            x    366.46\n            y    657.51\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    121\n        label    \"\"\n        graphics\n        [\n            x    228.82\n            y    941.48\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    122\n        label    \"\"\n        graphics\n        [\n            x    1082.11\n            y    903.64\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    123\n        label    \"\"\n        graphics\n        [\n            x    1166.22\n            y    1117.00\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    124\n        label    \"\"\n        graphics\n        [\n            x    968.15\n            y    255.83\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    125\n        label    \"\"\n        graphics\n        [\n            x    123.90\n            y    873.67\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    126\n        label    \"\"\n        graphics\n        [\n            x    185.34\n            y    248.62\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    127\n        label    \"\"\n        graphics\n        [\n            x    430.53\n            y    907.34\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    128\n        label    \"\"\n        graphics\n        [\n            x    845.11\n            y    611.11\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    129\n        label    \"\"\n        graphics\n        [\n            x    1125.57\n            y    993.83\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    130\n        label    \"\"\n        graphics\n        [\n            x    51.91\n            y    379.70\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    131\n        label    \"\"\n        graphics\n        [\n            x    640.67\n            y    1071.95\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    132\n        label    \"\"\n        graphics\n        [\n            x    131.43\n            y    1149.64\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    133\n        label    \"\"\n        graphics\n        [\n            x    610.33\n            y    349.05\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    134\n        label    \"\"\n        graphics\n        [\n            x    253.36\n            y    929.04\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    135\n        label    \"\"\n        graphics\n        [\n            x    1028.52\n            y    586.28\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    136\n        label    \"\"\n        graphics\n        [\n            x    933.90\n            y    869.43\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    137\n        label    \"\"\n        graphics\n        [\n            x    700.59\n            y    773.18\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    138\n        label    \"\"\n        graphics\n        [\n            x    382.54\n            y    816.18\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    139\n        label    \"\"\n        graphics\n        [\n            x    372.01\n            y    1193.58\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    140\n        label    \"\"\n        graphics\n        [\n            x    1042.05\n            y    20.11\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    141\n        label    \"\"\n        graphics\n        [\n            x    314.19\n            y    41.06\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    142\n        label    \"\"\n        graphics\n        [\n            x    974.06\n            y    88.46\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    143\n        label    \"\"\n        graphics\n        [\n            x    943.46\n            y    563.67\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    144\n        label    \"\"\n        graphics\n        [\n            x    274.91\n            y    16.13\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    145\n        label    \"\"\n        graphics\n        [\n            x    599.20\n            y    590.73\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    146\n        label    \"\"\n        graphics\n        [\n            x    896.44\n            y    871.31\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    147\n        label    \"\"\n        graphics\n        [\n            x    830.68\n            y    892.05\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    148\n        label    \"\"\n        graphics\n        [\n            x    873.76\n            y    802.97\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    149\n        label    \"\"\n        graphics\n        [\n            x    406.94\n            y    258.14\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    150\n        label    \"\"\n        graphics\n        [\n            x    799.41\n            y    1009.95\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    151\n        label    \"\"\n        graphics\n        [\n            x    104.52\n            y    84.48\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    152\n        label    \"\"\n        graphics\n        [\n            x    904.07\n            y    260.42\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    153\n        label    \"\"\n        graphics\n        [\n            x    455.32\n            y    1084.80\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    154\n        label    \"\"\n        graphics\n        [\n            x    882.71\n            y    732.16\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    155\n        label    \"\"\n        graphics\n        [\n            x    1194.70\n            y    1234.78\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    156\n        label    \"\"\n        graphics\n        [\n            x    181.92\n            y    886.03\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    157\n        label    \"\"\n        graphics\n        [\n            x    877.86\n            y    272.84\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    158\n        label    \"\"\n        graphics\n        [\n            x    936.88\n            y    817.31\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    159\n        label    \"\"\n        graphics\n        [\n            x    805.59\n            y    591.40\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    160\n        label    \"\"\n        graphics\n        [\n            x    151.21\n            y    531.92\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    161\n        label    \"\"\n        graphics\n        [\n            x    1082.04\n            y    1159.17\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    162\n        label    \"\"\n        graphics\n        [\n            x    657.06\n            y    186.81\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    163\n        label    \"\"\n        graphics\n        [\n            x    910.86\n            y    746.44\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    164\n        label    \"\"\n        graphics\n        [\n            x    641.14\n            y    531.27\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    165\n        label    \"\"\n        graphics\n        [\n            x    1083.93\n            y    1235.65\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    166\n        label    \"\"\n        graphics\n        [\n            x    831.59\n            y    343.12\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    167\n        label    \"\"\n        graphics\n        [\n            x    477.41\n            y    681.48\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    168\n        label    \"\"\n        graphics\n        [\n            x    381.12\n            y    1133.35\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    169\n        label    \"\"\n        graphics\n        [\n            x    951.11\n            y    656.20\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    170\n        label    \"\"\n        graphics\n        [\n            x    994.91\n            y    109.49\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    171\n        label    \"\"\n        graphics\n        [\n            x    973.18\n            y    1221.07\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    172\n        label    \"\"\n        graphics\n        [\n            x    953.19\n            y    94.30\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    173\n        label    \"\"\n        graphics\n        [\n            x    816.27\n            y    679.77\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    174\n        label    \"\"\n        graphics\n        [\n            x    1002.73\n            y    427.66\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    175\n        label    \"\"\n        graphics\n        [\n            x    1196.36\n            y    916.43\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    176\n        label    \"\"\n        graphics\n        [\n            x    628.25\n            y    360.81\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    177\n        label    \"\"\n        graphics\n        [\n            x    45.22\n            y    1153.49\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    178\n        label    \"\"\n        graphics\n        [\n            x    1015.68\n            y    349.59\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    179\n        label    \"\"\n        graphics\n        [\n            x    788.45\n            y    266.84\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    180\n        label    \"\"\n        graphics\n        [\n            x    708.48\n            y    1016.38\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    181\n        label    \"\"\n        graphics\n        [\n            x    536.70\n            y    830.31\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    182\n        label    \"\"\n        graphics\n        [\n            x    463.16\n            y    646.68\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    183\n        label    \"\"\n        graphics\n        [\n            x    189.15\n            y    842.93\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    184\n        label    \"\"\n        graphics\n        [\n            x    1141.40\n            y    511.63\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    185\n        label    \"\"\n        graphics\n        [\n            x    810.96\n            y    19.78\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    186\n        label    \"\"\n        graphics\n        [\n            x    1111.85\n            y    327.61\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    187\n        label    \"\"\n        graphics\n        [\n            x    343.54\n            y    47.68\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    188\n        label    \"\"\n        graphics\n        [\n            x    883.08\n            y    605.31\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    189\n        label    \"\"\n        graphics\n        [\n            x    1076.06\n            y    82.12\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    190\n        label    \"\"\n        graphics\n        [\n            x    766.76\n            y    789.26\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    191\n        label    \"\"\n        graphics\n        [\n            x    934.01\n            y    834.14\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    192\n        label    \"\"\n        graphics\n        [\n            x    1008.05\n            y    670.18\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    193\n        label    \"\"\n        graphics\n        [\n            x    809.80\n            y    516.62\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    194\n        label    \"\"\n        graphics\n        [\n            x    19.88\n            y    975.39\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    195\n        label    \"\"\n        graphics\n        [\n            x    323.27\n            y    657.69\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    196\n        label    \"\"\n        graphics\n        [\n            x    43.27\n            y    281.00\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    197\n        label    \"\"\n        graphics\n        [\n            x    118.88\n            y    188.89\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    198\n        label    \"\"\n        graphics\n        [\n            x    881.17\n            y    517.33\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    199\n        label    \"\"\n        graphics\n        [\n            x    1013.23\n            y    723.59\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    edge\n    [\n        source    1\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    10\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    100\n        target    96\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    101\n        target    27\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    102\n        target    25\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    103\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    104\n        target    60\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    105\n        target    37\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    106\n        target    36\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    106\n        target    94\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    107\n        target    57\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    107\n        target    91\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    108\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    109\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    109\n        target    64\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    11\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    110\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    111\n        target    52\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    111\n        target    94\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    112\n        target    94\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    113\n        target    104\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    114\n        target    65\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    115\n        target    152\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    115\n        target    169\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    115\n        target    61\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    116\n        target    85\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    117\n        target    101\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    117\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    118\n        target    20\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    119\n        target    48\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    12\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    120\n        target    108\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    121\n        target    101\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    122\n        target    118\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    123\n        target    38\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    123\n        target    98\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    124\n        target    59\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    125\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    126\n        target    38\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    127\n        target    120\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    128\n        target    101\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    129\n        target    72\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    13\n        target    144\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    13\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    130\n        target    29\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    131\n        target    26\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    131\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    132\n        target    142\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    132\n        target    73\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    133\n        target    31\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    134\n        target    119\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    135\n        target    76\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    136\n        target    84\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    137\n        target    129\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    137\n        target    86\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    138\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    139\n        target    94\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    14\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    140\n        target    136\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    140\n        target    138\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    141\n        target    66\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    142\n        target    103\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    142\n        target    91\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    143\n        target    160\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    143\n        target    39\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    143\n        target    56\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    144\n        target    30\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    144\n        target    35\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    145\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    146\n        target    127\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    147\n        target    107\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    148\n        target    68\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    149\n        target    74\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    15\n        target    165\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    15\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    150\n        target    122\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    150\n        target    38\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    151\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    152\n        target    132\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    153\n        target    94\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    154\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    155\n        target    85\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    156\n        target    33\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    156\n        target    82\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    157\n        target    46\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    158\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    159\n        target    41\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    159\n        target    83\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    159\n        target    99\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    16\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    160\n        target    86\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    161\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    162\n        target    167\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    162\n        target    42\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    163\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    164\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    165\n        target    36\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    166\n        target    108\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    167\n        target    73\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    168\n        target    120\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    168\n        target    98\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    169\n        target    121\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    17\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    17\n        target    173\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    170\n        target    74\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    171\n        target    128\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    172\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    173\n        target    64\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    174\n        target    104\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    175\n        target    119\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    176\n        target    128\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    176\n        target    58\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    177\n        target    161\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    178\n        target    80\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    179\n        target    87\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    18\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    180\n        target    96\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    181\n        target    128\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    182\n        target    64\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    183\n        target    42\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    183\n        target    69\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    184\n        target    154\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    184\n        target    53\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    185\n        target    110\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    186\n        target    34\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    186\n        target    81\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    187\n        target    101\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    188\n        target    148\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    188\n        target    52\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    189\n        target    175\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    19\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    19\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    190\n        target    182\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    191\n        target    75\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    192\n        target    88\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    192\n        target    90\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    193\n        target    58\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    193\n        target    76\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    194\n        target    74\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    195\n        target    73\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    196\n        target    133\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    197\n        target    134\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    198\n        target    97\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    199\n        target    29\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    199\n        target    35\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    2\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    20\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    20\n        target    70\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    21\n        target    19\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    22\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    23\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    24\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    25\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    25\n        target    193\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    26\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    27\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    28\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    28\n        target    66\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    29\n        target    26\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    29\n        target    30\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    3\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    30\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    31\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    32\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    33\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    33\n        target    123\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    34\n        target    31\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    35\n        target    34\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    35\n        target    49\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    35\n        target    83\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    36\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    37\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    38\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    39\n        target    146\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    39\n        target    35\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    4\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    40\n        target    31\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    41\n        target    31\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    42\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    43\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    44\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    44\n        target    90\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    45\n        target    31\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    46\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    47\n        target    39\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    48\n        target    41\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    49\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    49\n        target    176\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    5\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    50\n        target    49\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    51\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    52\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    53\n        target    171\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    53\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    54\n        target    129\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    54\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    55\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    56\n        target    19\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    57\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    58\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    58\n        target    133\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    59\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    59\n        target    174\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    6\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    60\n        target    27\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    61\n        target    46\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    62\n        target    40\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    63\n        target    50\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    64\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    64\n        target    170\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    65\n        target    40\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    66\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    67\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    67\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    68\n        target    45\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    69\n        target    44\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    7\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    70\n        target    41\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    71\n        target    27\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    72\n        target    36\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    72\n        target    73\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    72\n        target    75\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    73\n        target    59\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    74\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    75\n        target    40\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    76\n        target    20\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    77\n        target    60\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    78\n        target    19\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    79\n        target    49\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    8\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    80\n        target    146\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    80\n        target    39\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    81\n        target    80\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    82\n        target    57\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    83\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    83\n        target    175\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    83\n        target    47\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    84\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    85\n        target    51\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    86\n        target    74\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    87\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    87\n        target    40\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    88\n        target    42\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    89\n        target    29\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    9\n        target    169\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    9\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    90\n        target    43\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    91\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    91\n        target    32\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    92\n        target    68\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    93\n        target    60\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    93\n        target    92\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    94\n        target    52\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    95\n        target    37\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    95\n        target    51\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    96\n        target    37\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    97\n        target    136\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    97\n        target    93\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    98\n        target    64\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    99\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n]\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v200e260.tglf",
    "content": "0 99.000 1263.000 30.000 30.000\n1 444.000 299.000 30.000 30.000\n2 1171.000 961.000 30.000 30.000\n3 723.000 714.000 30.000 30.000\n4 639.000 1252.000 30.000 30.000\n5 808.000 720.000 30.000 30.000\n6 324.000 1165.000 30.000 30.000\n7 948.000 695.000 30.000 30.000\n8 777.000 1228.000 30.000 30.000\n9 816.000 711.000 30.000 30.000\n10 568.000 971.000 30.000 30.000\n11 114.000 353.000 30.000 30.000\n12 1098.000 707.000 30.000 30.000\n13 546.000 457.000 30.000 30.000\n14 1125.000 796.000 30.000 30.000\n15 757.000 1070.000 30.000 30.000\n16 158.000 1107.000 30.000 30.000\n17 1153.000 921.000 30.000 30.000\n18 1179.000 414.000 30.000 30.000\n19 417.000 88.000 30.000 30.000\n20 360.000 1058.000 30.000 30.000\n21 323.000 1048.000 30.000 30.000\n22 955.000 712.000 30.000 30.000\n23 467.000 102.000 30.000 30.000\n24 981.000 1072.000 30.000 30.000\n25 301.000 199.000 30.000 30.000\n26 349.000 584.000 30.000 30.000\n27 155.000 243.000 30.000 30.000\n28 594.000 860.000 30.000 30.000\n29 260.000 1206.000 30.000 30.000\n30 293.000 670.000 30.000 30.000\n31 1012.000 178.000 30.000 30.000\n32 839.000 998.000 30.000 30.000\n33 448.000 1265.000 30.000 30.000\n34 1173.000 335.000 30.000 30.000\n35 116.000 1057.000 30.000 30.000\n36 326.000 1127.000 30.000 30.000\n37 945.000 178.000 30.000 30.000\n38 1077.000 137.000 30.000 30.000\n39 1005.000 1250.000 30.000 30.000\n40 116.000 1182.000 30.000 30.000\n41 617.000 843.000 30.000 30.000\n42 235.000 341.000 30.000 30.000\n43 694.000 731.000 30.000 30.000\n44 410.000 482.000 30.000 30.000\n45 284.000 1257.000 30.000 30.000\n46 117.000 697.000 30.000 30.000\n47 635.000 909.000 30.000 30.000\n48 422.000 1217.000 30.000 30.000\n49 65.000 841.000 30.000 30.000\n50 1216.000 893.000 30.000 30.000\n51 837.000 1157.000 30.000 30.000\n52 987.000 400.000 30.000 30.000\n53 335.000 446.000 30.000 30.000\n54 157.000 1158.000 30.000 30.000\n55 445.000 483.000 30.000 30.000\n56 1260.000 93.000 30.000 30.000\n57 351.000 405.000 30.000 30.000\n58 1160.000 5.000 30.000 30.000\n59 161.000 647.000 30.000 30.000\n60 1187.000 495.000 30.000 30.000\n61 861.000 219.000 30.000 30.000\n62 705.000 237.000 30.000 30.000\n63 970.000 461.000 30.000 30.000\n64 709.000 964.000 30.000 30.000\n65 44.000 663.000 30.000 30.000\n66 396.000 879.000 30.000 30.000\n67 210.000 77.000 30.000 30.000\n68 470.000 74.000 30.000 30.000\n69 275.000 322.000 30.000 30.000\n70 1032.000 1156.000 30.000 30.000\n71 499.000 458.000 30.000 30.000\n72 116.000 1172.000 30.000 30.000\n73 634.000 93.000 30.000 30.000\n74 232.000 355.000 30.000 30.000\n75 1071.000 936.000 30.000 30.000\n76 373.000 895.000 30.000 30.000\n77 268.000 831.000 30.000 30.000\n78 806.000 473.000 30.000 30.000\n79 279.000 134.000 30.000 30.000\n80 856.000 930.000 30.000 30.000\n81 423.000 197.000 30.000 30.000\n82 787.000 657.000 30.000 30.000\n83 134.000 1055.000 30.000 30.000\n84 830.000 1262.000 30.000 30.000\n85 647.000 137.000 30.000 30.000\n86 839.000 1267.000 30.000 30.000\n87 50.000 33.000 30.000 30.000\n88 1250.000 1170.000 30.000 30.000\n89 430.000 100.000 30.000 30.000\n90 677.000 1033.000 30.000 30.000\n91 416.000 152.000 30.000 30.000\n92 804.000 286.000 30.000 30.000\n93 27.000 802.000 30.000 30.000\n94 666.000 598.000 30.000 30.000\n95 956.000 1140.000 30.000 30.000\n96 279.000 125.000 30.000 30.000\n97 605.000 535.000 30.000 30.000\n98 185.000 879.000 30.000 30.000\n99 907.000 714.000 30.000 30.000\n100 768.000 1048.000 30.000 30.000\n101 5.000 341.000 30.000 30.000\n102 325.000 700.000 30.000 30.000\n103 1005.000 1095.000 30.000 30.000\n104 1133.000 647.000 30.000 30.000\n105 404.000 407.000 30.000 30.000\n106 684.000 171.000 30.000 30.000\n107 885.000 317.000 30.000 30.000\n108 381.000 1131.000 30.000 30.000\n109 453.000 253.000 30.000 30.000\n110 1087.000 730.000 30.000 30.000\n111 1177.000 611.000 30.000 30.000\n112 893.000 1116.000 30.000 30.000\n113 1096.000 415.000 30.000 30.000\n114 805.000 710.000 30.000 30.000\n115 686.000 9.000 30.000 30.000\n116 1101.000 136.000 30.000 30.000\n117 735.000 40.000 30.000 30.000\n118 1063.000 588.000 30.000 30.000\n119 1147.000 543.000 30.000 30.000\n120 366.000 657.000 30.000 30.000\n121 228.000 941.000 30.000 30.000\n122 1082.000 903.000 30.000 30.000\n123 1166.000 1117.000 30.000 30.000\n124 968.000 255.000 30.000 30.000\n125 123.000 873.000 30.000 30.000\n126 185.000 248.000 30.000 30.000\n127 430.000 907.000 30.000 30.000\n128 845.000 611.000 30.000 30.000\n129 1125.000 993.000 30.000 30.000\n130 51.000 379.000 30.000 30.000\n131 640.000 1071.000 30.000 30.000\n132 131.000 1149.000 30.000 30.000\n133 610.000 349.000 30.000 30.000\n134 253.000 929.000 30.000 30.000\n135 1028.000 586.000 30.000 30.000\n136 933.000 869.000 30.000 30.000\n137 700.000 773.000 30.000 30.000\n138 382.000 816.000 30.000 30.000\n139 372.000 1193.000 30.000 30.000\n140 1042.000 20.000 30.000 30.000\n141 314.000 41.000 30.000 30.000\n142 974.000 88.000 30.000 30.000\n143 943.000 563.000 30.000 30.000\n144 274.000 16.000 30.000 30.000\n145 599.000 590.000 30.000 30.000\n146 896.000 871.000 30.000 30.000\n147 830.000 892.000 30.000 30.000\n148 873.000 802.000 30.000 30.000\n149 406.000 258.000 30.000 30.000\n150 799.000 1009.000 30.000 30.000\n151 104.000 84.000 30.000 30.000\n152 904.000 260.000 30.000 30.000\n153 455.000 1084.000 30.000 30.000\n154 882.000 732.000 30.000 30.000\n155 1194.000 1234.000 30.000 30.000\n156 181.000 886.000 30.000 30.000\n157 877.000 272.000 30.000 30.000\n158 936.000 817.000 30.000 30.000\n159 805.000 591.000 30.000 30.000\n160 151.000 531.000 30.000 30.000\n161 1082.000 1159.000 30.000 30.000\n162 657.000 186.000 30.000 30.000\n163 910.000 746.000 30.000 30.000\n164 641.000 531.000 30.000 30.000\n165 1083.000 1235.000 30.000 30.000\n166 831.000 343.000 30.000 30.000\n167 477.000 681.000 30.000 30.000\n168 381.000 1133.000 30.000 30.000\n169 951.000 656.000 30.000 30.000\n170 994.000 109.000 30.000 30.000\n171 973.000 1221.000 30.000 30.000\n172 953.000 94.000 30.000 30.000\n173 816.000 679.000 30.000 30.000\n174 1002.000 427.000 30.000 30.000\n175 1196.000 916.000 30.000 30.000\n176 628.000 360.000 30.000 30.000\n177 45.000 1153.000 30.000 30.000\n178 1015.000 349.000 30.000 30.000\n179 788.000 266.000 30.000 30.000\n180 708.000 1016.000 30.000 30.000\n181 536.000 830.000 30.000 30.000\n182 463.000 646.000 30.000 30.000\n183 189.000 842.000 30.000 30.000\n184 1141.000 511.000 30.000 30.000\n185 810.000 19.000 30.000 30.000\n186 1111.000 327.000 30.000 30.000\n187 343.000 47.000 30.000 30.000\n188 883.000 605.000 30.000 30.000\n189 1076.000 82.000 30.000 30.000\n190 766.000 789.000 30.000 30.000\n191 934.000 834.000 30.000 30.000\n192 1008.000 670.000 30.000 30.000\n193 809.000 516.000 30.000 30.000\n194 19.000 975.000 30.000 30.000\n195 323.000 657.000 30.000 30.000\n196 43.000 281.000 30.000 30.000\n197 118.000 188.000 30.000 30.000\n198 881.000 517.000 30.000 30.000\n199 1013.000 723.000 30.000 30.000\n#\n82 57\n13 144\n193 58\n121 101\n81 80\n150 122\n157 46\n180 96\n25 193\n44 15\n141 66\n163 9\n18 5\n150 38\n107 57\n74 21\n156 82\n100 96\n9 169\n176 128\n186 34\n31 14\n186 81\n49 12\n124 59\n62 40\n179 87\n111 94\n64 170\n52 11\n21 19\n193 76\n192 90\n85 51\n162 42\n131 4\n15 165\n15 3\n142 91\n97 136\n119 48\n103 17\n40 31\n161 17\n58 133\n68 45\n151 3\n127 120\n149 74\n41 31\n132 142\n22 21\n132 73\n83 0\n109 0\n89 29\n11 2\n80 39\n84 17\n170 74\n93 92\n23 18\n63 50\n196 133\n94 52\n178 80\n184 154\n66 7\n120 108\n28 18\n24 11\n125 11\n43 5\n35 49\n4 0\n33 10\n169 121\n162 167\n33 123\n47 39\n86 74\n148 68\n60 27\n7 4\n112 94\n58 1\n139 94\n35 34\n37 4\n176 58\n54 129\n13 3\n67 15\n106 36\n174 104\n6 2\n165 36\n126 38\n106 94\n80 146\n136 84\n138 22\n107 91\n35 83\n140 138\n61 46\n168 120\n122 118\n108 9\n109 64\n183 69\n76 20\n160 86\n17 13\n144 35\n189 175\n55 15\n199 35\n143 160\n188 52\n59 174\n72 36\n98 64\n71 27\n184 53\n168 98\n167 73\n8 7\n185 110\n144 30\n78 19\n199 29\n39 146\n2 1\n72 73\n95 51\n73 59\n59 10\n129 72\n113 104\n48 41\n72 75\n133 31\n135 76\n105 37\n9 2\n57 2\n95 37\n51 0\n159 41\n26 2\n46 21\n142 103\n29 26\n77 60\n3 1\n128 101\n183 42\n83 175\n143 56\n110 4\n197 134\n137 129\n45 31\n93 60\n34 31\n173 64\n140 136\n1 0\n154 17\n152 132\n50 49\n104 60\n131 26\n190 182\n195 73\n91 32\n96 37\n87 40\n156 33\n191 75\n187 101\n198 97\n19 1\n181 128\n130 29\n159 99\n49 176\n123 38\n65 40\n194 74\n102 25\n143 39\n115 169\n182 64\n53 4\n99 4\n75 40\n44 90\n172 9\n166 108\n79 49\n87 16\n117 7\n19 14\n192 88\n111 52\n155 85\n114 65\n92 68\n42 0\n16 6\n56 19\n146 127\n38 23\n115 152\n70 41\n67 22\n20 15\n147 107\n115 61\n27 1\n30 9\n137 86\n123 98\n83 47\n145 15\n17 173\n28 66\n97 93\n54 18\n36 0\n39 35\n188 148\n171 128\n134 119\n5 0\n10 0\n164 15\n177 161\n153 94\n117 101\n175 119\n159 83\n90 43\n12 9\n69 44\n118 20\n32 23\n158 12\n29 30\n116 85\n25 18\n53 171\n91 21\n14 2\n20 70\n88 42\n64 13\n101 27\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v200e280.gml",
    "content": "graph\n[\n    node\n    [\n        id    0\n        label    \"\"\n        graphics\n        [\n            x    1002.56\n            y    739.34\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    1\n        label    \"\"\n        graphics\n        [\n            x    1255.94\n            y    940.20\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    2\n        label    \"\"\n        graphics\n        [\n            x    326.99\n            y    1249.84\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    3\n        label    \"\"\n        graphics\n        [\n            x    166.80\n            y    782.17\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    4\n        label    \"\"\n        graphics\n        [\n            x    1065.57\n            y    708.96\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    5\n        label    \"\"\n        graphics\n        [\n            x    968.70\n            y    584.35\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    6\n        label    \"\"\n        graphics\n        [\n            x    1174.91\n            y    429.89\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    7\n        label    \"\"\n        graphics\n        [\n            x    56.69\n            y    265.92\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    8\n        label    \"\"\n        graphics\n        [\n            x    919.21\n            y    906.07\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    9\n        label    \"\"\n        graphics\n        [\n            x    36.45\n            y    108.33\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    10\n        label    \"\"\n        graphics\n        [\n            x    990.29\n            y    690.51\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    11\n        label    \"\"\n        graphics\n        [\n            x    603.47\n            y    781.35\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    12\n        label    \"\"\n        graphics\n        [\n            x    1222.19\n            y    1067.64\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    13\n        label    \"\"\n        graphics\n        [\n            x    364.13\n            y    1026.81\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    14\n        label    \"\"\n        graphics\n        [\n            x    549.67\n            y    271.76\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    15\n        label    \"\"\n        graphics\n        [\n            x    1050.95\n            y    969.56\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    16\n        label    \"\"\n        graphics\n        [\n            x    373.29\n            y    33.30\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    17\n        label    \"\"\n        graphics\n        [\n            x    246.66\n            y    1152.59\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    18\n        label    \"\"\n        graphics\n        [\n            x    1159.47\n            y    811.08\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    19\n        label    \"\"\n        graphics\n        [\n            x    98.35\n            y    665.33\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    20\n        label    \"\"\n        graphics\n        [\n            x    199.70\n            y    1175.80\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    21\n        label    \"\"\n        graphics\n        [\n            x    141.86\n            y    1079.37\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    22\n        label    \"\"\n        graphics\n        [\n            x    411.65\n            y    708.46\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    23\n        label    \"\"\n        graphics\n        [\n            x    141.17\n            y    249.74\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    24\n        label    \"\"\n        graphics\n        [\n            x    997.81\n            y    484.04\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    25\n        label    \"\"\n        graphics\n        [\n            x    1134.67\n            y    484.91\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    26\n        label    \"\"\n        graphics\n        [\n            x    771.09\n            y    711.66\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    27\n        label    \"\"\n        graphics\n        [\n            x    644.25\n            y    40.91\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    28\n        label    \"\"\n        graphics\n        [\n            x    904.36\n            y    596.72\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    29\n        label    \"\"\n        graphics\n        [\n            x    67.42\n            y    1073.90\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    30\n        label    \"\"\n        graphics\n        [\n            x    395.61\n            y    419.89\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    31\n        label    \"\"\n        graphics\n        [\n            x    32.12\n            y    1210.18\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    32\n        label    \"\"\n        graphics\n        [\n            x    1161.67\n            y    1001.53\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    33\n        label    \"\"\n        graphics\n        [\n            x    283.75\n            y    187.39\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    34\n        label    \"\"\n        graphics\n        [\n            x    36.47\n            y    808.13\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    35\n        label    \"\"\n        graphics\n        [\n            x    116.20\n            y    815.45\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    36\n        label    \"\"\n        graphics\n        [\n            x    1243.75\n            y    434.45\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    37\n        label    \"\"\n        graphics\n        [\n            x    1027.35\n            y    448.09\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    38\n        label    \"\"\n        graphics\n        [\n            x    250.86\n            y    693.11\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    39\n        label    \"\"\n        graphics\n        [\n            x    32.72\n            y    733.63\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    40\n        label    \"\"\n        graphics\n        [\n            x    400.81\n            y    659.18\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    41\n        label    \"\"\n        graphics\n        [\n            x    490.86\n            y    1036.16\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    42\n        label    \"\"\n        graphics\n        [\n            x    520.51\n            y    18.47\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    43\n        label    \"\"\n        graphics\n        [\n            x    214.79\n            y    799.38\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    44\n        label    \"\"\n        graphics\n        [\n            x    334.29\n            y    1129.96\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    45\n        label    \"\"\n        graphics\n        [\n            x    1208.34\n            y    391.20\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    46\n        label    \"\"\n        graphics\n        [\n            x    184.49\n            y    681.45\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    47\n        label    \"\"\n        graphics\n        [\n            x    1016.15\n            y    905.28\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    48\n        label    \"\"\n        graphics\n        [\n            x    44.35\n            y    1011.64\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    49\n        label    \"\"\n        graphics\n        [\n            x    1029.52\n            y    98.02\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    50\n        label    \"\"\n        graphics\n        [\n            x    365.26\n            y    152.06\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    51\n        label    \"\"\n        graphics\n        [\n            x    724.86\n            y    1181.98\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    52\n        label    \"\"\n        graphics\n        [\n            x    654.02\n            y    953.48\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    53\n        label    \"\"\n        graphics\n        [\n            x    753.44\n            y    193.12\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    54\n        label    \"\"\n        graphics\n        [\n            x    533.10\n            y    1141.26\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    55\n        label    \"\"\n        graphics\n        [\n            x    1064.56\n            y    909.95\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    56\n        label    \"\"\n        graphics\n        [\n            x    3.92\n            y    401.95\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    57\n        label    \"\"\n        graphics\n        [\n            x    253.66\n            y    385.68\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    58\n        label    \"\"\n        graphics\n        [\n            x    30.20\n            y    106.35\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    59\n        label    \"\"\n        graphics\n        [\n            x    1206.95\n            y    380.10\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    60\n        label    \"\"\n        graphics\n        [\n            x    1011.30\n            y    796.68\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    61\n        label    \"\"\n        graphics\n        [\n            x    612.84\n            y    639.73\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    62\n        label    \"\"\n        graphics\n        [\n            x    1213.94\n            y    820.48\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    63\n        label    \"\"\n        graphics\n        [\n            x    131.20\n            y    743.23\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    64\n        label    \"\"\n        graphics\n        [\n            x    797.61\n            y    1232.71\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    65\n        label    \"\"\n        graphics\n        [\n            x    37.92\n            y    689.19\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    66\n        label    \"\"\n        graphics\n        [\n            x    18.24\n            y    72.04\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    67\n        label    \"\"\n        graphics\n        [\n            x    599.50\n            y    74.18\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    68\n        label    \"\"\n        graphics\n        [\n            x    855.20\n            y    1223.60\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    69\n        label    \"\"\n        graphics\n        [\n            x    1108.25\n            y    801.34\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    70\n        label    \"\"\n        graphics\n        [\n            x    767.27\n            y    648.38\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    71\n        label    \"\"\n        graphics\n        [\n            x    329.44\n            y    292.73\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    72\n        label    \"\"\n        graphics\n        [\n            x    785.59\n            y    206.61\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    73\n        label    \"\"\n        graphics\n        [\n            x    264.19\n            y    1204.03\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    74\n        label    \"\"\n        graphics\n        [\n            x    125.19\n            y    18.28\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    75\n        label    \"\"\n        graphics\n        [\n            x    886.12\n            y    711.30\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    76\n        label    \"\"\n        graphics\n        [\n            x    204.74\n            y    87.73\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    77\n        label    \"\"\n        graphics\n        [\n            x    836.84\n            y    494.92\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    78\n        label    \"\"\n        graphics\n        [\n            x    206.96\n            y    641.56\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    79\n        label    \"\"\n        graphics\n        [\n            x    670.34\n            y    1139.55\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    80\n        label    \"\"\n        graphics\n        [\n            x    1228.17\n            y    836.13\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    81\n        label    \"\"\n        graphics\n        [\n            x    104.21\n            y    333.48\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    82\n        label    \"\"\n        graphics\n        [\n            x    444.74\n            y    1201.01\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    83\n        label    \"\"\n        graphics\n        [\n            x    152.01\n            y    795.04\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    84\n        label    \"\"\n        graphics\n        [\n            x    1121.86\n            y    359.29\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    85\n        label    \"\"\n        graphics\n        [\n            x    1269.93\n            y    618.08\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    86\n        label    \"\"\n        graphics\n        [\n            x    87.75\n            y    473.81\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    87\n        label    \"\"\n        graphics\n        [\n            x    629.53\n            y    251.84\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    88\n        label    \"\"\n        graphics\n        [\n            x    578.61\n            y    92.48\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    89\n        label    \"\"\n        graphics\n        [\n            x    206.85\n            y    1236.25\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    90\n        label    \"\"\n        graphics\n        [\n            x    978.66\n            y    486.70\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    91\n        label    \"\"\n        graphics\n        [\n            x    416.81\n            y    171.16\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    92\n        label    \"\"\n        graphics\n        [\n            x    519.92\n            y    409.07\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    93\n        label    \"\"\n        graphics\n        [\n            x    1240.85\n            y    1016.28\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    94\n        label    \"\"\n        graphics\n        [\n            x    897.47\n            y    260.78\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    95\n        label    \"\"\n        graphics\n        [\n            x    1114.79\n            y    994.13\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    96\n        label    \"\"\n        graphics\n        [\n            x    491.14\n            y    1028.79\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    97\n        label    \"\"\n        graphics\n        [\n            x    890.24\n            y    473.57\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    98\n        label    \"\"\n        graphics\n        [\n            x    1159.82\n            y    552.30\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    99\n        label    \"\"\n        graphics\n        [\n            x    155.85\n            y    471.55\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    100\n        label    \"\"\n        graphics\n        [\n            x    810.09\n            y    793.79\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    101\n        label    \"\"\n        graphics\n        [\n            x    505.81\n            y    561.04\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    102\n        label    \"\"\n        graphics\n        [\n            x    1040.69\n            y    475.78\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    103\n        label    \"\"\n        graphics\n        [\n            x    1076.67\n            y    527.42\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    104\n        label    \"\"\n        graphics\n        [\n            x    657.54\n            y    526.75\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    105\n        label    \"\"\n        graphics\n        [\n            x    923.10\n            y    162.95\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    106\n        label    \"\"\n        graphics\n        [\n            x    247.90\n            y    302.11\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    107\n        label    \"\"\n        graphics\n        [\n            x    689.37\n            y    811.57\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    108\n        label    \"\"\n        graphics\n        [\n            x    957.43\n            y    801.42\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    109\n        label    \"\"\n        graphics\n        [\n            x    1228.67\n            y    567.23\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    110\n        label    \"\"\n        graphics\n        [\n            x    574.45\n            y    965.10\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    111\n        label    \"\"\n        graphics\n        [\n            x    830.45\n            y    630.31\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    112\n        label    \"\"\n        graphics\n        [\n            x    587.56\n            y    1235.16\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    113\n        label    \"\"\n        graphics\n        [\n            x    519.67\n            y    352.04\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    114\n        label    \"\"\n        graphics\n        [\n            x    237.04\n            y    678.37\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    115\n        label    \"\"\n        graphics\n        [\n            x    999.22\n            y    1082.57\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    116\n        label    \"\"\n        graphics\n        [\n            x    1079.84\n            y    328.54\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    117\n        label    \"\"\n        graphics\n        [\n            x    268.12\n            y    581.60\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    118\n        label    \"\"\n        graphics\n        [\n            x    552.62\n            y    243.73\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    119\n        label    \"\"\n        graphics\n        [\n            x    953.76\n            y    1241.80\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    120\n        label    \"\"\n        graphics\n        [\n            x    1261.49\n            y    671.34\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    121\n        label    \"\"\n        graphics\n        [\n            x    627.20\n            y    863.22\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    122\n        label    \"\"\n        graphics\n        [\n            x    145.67\n            y    389.93\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    123\n        label    \"\"\n        graphics\n        [\n            x    159.86\n            y    930.70\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    124\n        label    \"\"\n        graphics\n        [\n            x    963.10\n            y    815.55\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    125\n        label    \"\"\n        graphics\n        [\n            x    28.54\n            y    682.33\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    126\n        label    \"\"\n        graphics\n        [\n            x    1058.07\n            y    1024.08\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    127\n        label    \"\"\n        graphics\n        [\n            x    404.57\n            y    48.15\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    128\n        label    \"\"\n        graphics\n        [\n            x    1098.12\n            y    901.53\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    129\n        label    \"\"\n        graphics\n        [\n            x    659.85\n            y    75.88\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    130\n        label    \"\"\n        graphics\n        [\n            x    314.70\n            y    1150.87\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    131\n        label    \"\"\n        graphics\n        [\n            x    783.24\n            y    363.30\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    132\n        label    \"\"\n        graphics\n        [\n            x    261.32\n            y    167.48\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    133\n        label    \"\"\n        graphics\n        [\n            x    1120.99\n            y    349.87\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    134\n        label    \"\"\n        graphics\n        [\n            x    997.79\n            y    1165.58\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    135\n        label    \"\"\n        graphics\n        [\n            x    197.85\n            y    1023.37\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    136\n        label    \"\"\n        graphics\n        [\n            x    287.00\n            y    419.66\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    137\n        label    \"\"\n        graphics\n        [\n            x    937.03\n            y    909.94\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    138\n        label    \"\"\n        graphics\n        [\n            x    415.89\n            y    64.81\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    139\n        label    \"\"\n        graphics\n        [\n            x    480.85\n            y    550.15\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    140\n        label    \"\"\n        graphics\n        [\n            x    78.00\n            y    305.07\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    141\n        label    \"\"\n        graphics\n        [\n            x    621.15\n            y    400.67\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    142\n        label    \"\"\n        graphics\n        [\n            x    1043.85\n            y    535.91\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    143\n        label    \"\"\n        graphics\n        [\n            x    860.66\n            y    647.98\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    144\n        label    \"\"\n        graphics\n        [\n            x    993.75\n            y    358.77\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    145\n        label    \"\"\n        graphics\n        [\n            x    1203.66\n            y    292.00\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    146\n        label    \"\"\n        graphics\n        [\n            x    690.21\n            y    744.03\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    147\n        label    \"\"\n        graphics\n        [\n            x    427.98\n            y    856.63\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    148\n        label    \"\"\n        graphics\n        [\n            x    1235.76\n            y    479.38\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    149\n        label    \"\"\n        graphics\n        [\n            x    553.16\n            y    47.87\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    150\n        label    \"\"\n        graphics\n        [\n            x    1099.30\n            y    1239.29\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    151\n        label    \"\"\n        graphics\n        [\n            x    229.61\n            y    393.01\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    152\n        label    \"\"\n        graphics\n        [\n            x    337.69\n            y    797.61\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    153\n        label    \"\"\n        graphics\n        [\n            x    233.22\n            y    1009.84\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    154\n        label    \"\"\n        graphics\n        [\n            x    950.46\n            y    21.52\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    155\n        label    \"\"\n        graphics\n        [\n            x    79.34\n            y    472.24\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    156\n        label    \"\"\n        graphics\n        [\n            x    1097.27\n            y    528.46\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    157\n        label    \"\"\n        graphics\n        [\n            x    806.41\n            y    945.36\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    158\n        label    \"\"\n        graphics\n        [\n            x    320.29\n            y    372.29\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    159\n        label    \"\"\n        graphics\n        [\n            x    1200.31\n            y    888.08\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    160\n        label    \"\"\n        graphics\n        [\n            x    500.47\n            y    1021.38\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    161\n        label    \"\"\n        graphics\n        [\n            x    426.60\n            y    392.56\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    162\n        label    \"\"\n        graphics\n        [\n            x    265.08\n            y    655.03\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    163\n        label    \"\"\n        graphics\n        [\n            x    531.31\n            y    211.62\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    164\n        label    \"\"\n        graphics\n        [\n            x    449.82\n            y    868.70\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    165\n        label    \"\"\n        graphics\n        [\n            x    829.93\n            y    449.81\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    166\n        label    \"\"\n        graphics\n        [\n            x    774.89\n            y    1009.78\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    167\n        label    \"\"\n        graphics\n        [\n            x    942.64\n            y    1164.20\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    168\n        label    \"\"\n        graphics\n        [\n            x    539.87\n            y    1131.03\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    169\n        label    \"\"\n        graphics\n        [\n            x    618.70\n            y    323.07\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    170\n        label    \"\"\n        graphics\n        [\n            x    440.16\n            y    824.48\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    171\n        label    \"\"\n        graphics\n        [\n            x    57.58\n            y    1244.64\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    172\n        label    \"\"\n        graphics\n        [\n            x    353.94\n            y    926.23\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    173\n        label    \"\"\n        graphics\n        [\n            x    55.96\n            y    1123.55\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    174\n        label    \"\"\n        graphics\n        [\n            x    1162.68\n            y    236.47\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    175\n        label    \"\"\n        graphics\n        [\n            x    672.08\n            y    160.01\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    176\n        label    \"\"\n        graphics\n        [\n            x    1023.57\n            y    1207.50\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    177\n        label    \"\"\n        graphics\n        [\n            x    704.22\n            y    787.14\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    178\n        label    \"\"\n        graphics\n        [\n            x    1072.73\n            y    154.24\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    179\n        label    \"\"\n        graphics\n        [\n            x    549.27\n            y    335.89\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    180\n        label    \"\"\n        graphics\n        [\n            x    215.37\n            y    434.32\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    181\n        label    \"\"\n        graphics\n        [\n            x    693.15\n            y    567.34\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    182\n        label    \"\"\n        graphics\n        [\n            x    166.04\n            y    262.96\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    183\n        label    \"\"\n        graphics\n        [\n            x    1240.21\n            y    804.83\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    184\n        label    \"\"\n        graphics\n        [\n            x    436.14\n            y    1050.87\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    185\n        label    \"\"\n        graphics\n        [\n            x    691.24\n            y    953.68\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    186\n        label    \"\"\n        graphics\n        [\n            x    664.74\n            y    194.66\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    187\n        label    \"\"\n        graphics\n        [\n            x    29.75\n            y    127.46\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    188\n        label    \"\"\n        graphics\n        [\n            x    1031.86\n            y    579.37\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    189\n        label    \"\"\n        graphics\n        [\n            x    447.47\n            y    1197.83\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    190\n        label    \"\"\n        graphics\n        [\n            x    907.64\n            y    580.20\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    191\n        label    \"\"\n        graphics\n        [\n            x    477.32\n            y    1105.45\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    192\n        label    \"\"\n        graphics\n        [\n            x    787.10\n            y    193.64\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    193\n        label    \"\"\n        graphics\n        [\n            x    1194.51\n            y    724.18\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    194\n        label    \"\"\n        graphics\n        [\n            x    211.41\n            y    5.43\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    195\n        label    \"\"\n        graphics\n        [\n            x    699.95\n            y    640.50\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    196\n        label    \"\"\n        graphics\n        [\n            x    1189.06\n            y    600.33\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    197\n        label    \"\"\n        graphics\n        [\n            x    729.32\n            y    179.33\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    198\n        label    \"\"\n        graphics\n        [\n            x    630.58\n            y    1083.28\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    199\n        label    \"\"\n        graphics\n        [\n            x    514.06\n            y    66.66\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    edge\n    [\n        source    1\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    1\n        target    88\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    10\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    10\n        target    178\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    100\n        target    27\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    101\n        target    80\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    102\n        target    51\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    103\n        target    53\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    104\n        target    92\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    105\n        target    85\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    106\n        target    37\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    107\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    108\n        target    118\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    108\n        target    180\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    108\n        target    29\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    109\n        target    92\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    11\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    110\n        target    51\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    110\n        target    86\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    111\n        target    99\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    112\n        target    39\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    113\n        target    57\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    114\n        target    83\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    115\n        target    89\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    116\n        target    30\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    117\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    118\n        target    143\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    118\n        target    54\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    119\n        target    109\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    12\n        target    62\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    12\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    120\n        target    84\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    121\n        target    48\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    122\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    123\n        target    69\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    124\n        target    108\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    124\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    125\n        target    93\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    126\n        target    107\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    127\n        target    106\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    128\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    129\n        target    79\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    13\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    130\n        target    66\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    131\n        target    92\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    132\n        target    113\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    132\n        target    83\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    133\n        target    24\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    134\n        target    70\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    135\n        target    51\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    136\n        target    106\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    136\n        target    42\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    137\n        target    54\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    138\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    139\n        target    116\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    14\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    140\n        target    194\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    140\n        target    90\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    141\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    142\n        target    51\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    143\n        target    134\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    143\n        target    155\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    143\n        target    176\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    144\n        target    104\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    144\n        target    52\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    145\n        target    105\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    145\n        target    112\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    145\n        target    117\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    145\n        target    136\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    146\n        target    20\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    147\n        target    111\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    147\n        target    141\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    148\n        target    134\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    149\n        target    111\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    15\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    150\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    151\n        target    125\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    151\n        target    168\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    152\n        target    180\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    152\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    153\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    154\n        target    27\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    155\n        target    64\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    155\n        target    66\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    156\n        target    133\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    157\n        target    183\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    157\n        target    192\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    157\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    158\n        target    156\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    158\n        target    33\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    159\n        target    130\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    159\n        target    81\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    16\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    160\n        target    105\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    161\n        target    117\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    161\n        target    180\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    162\n        target    146\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    163\n        target    43\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    164\n        target    116\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    165\n        target    60\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    166\n        target    39\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    167\n        target    115\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    167\n        target    183\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    167\n        target    60\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    168\n        target    161\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    169\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    17\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    17\n        target    24\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    170\n        target    141\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    170\n        target    94\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    171\n        target    72\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    172\n        target    38\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    173\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    173\n        target    55\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    174\n        target    163\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    175\n        target    35\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    176\n        target    108\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    177\n        target    152\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    178\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    178\n        target    35\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    179\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    179\n        target    32\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    18\n        target    186\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    18\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    180\n        target    104\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    180\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    181\n        target    157\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    181\n        target    194\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    182\n        target    168\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    183\n        target    27\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    184\n        target    123\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    184\n        target    146\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    185\n        target    153\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    186\n        target    153\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    186\n        target    178\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    187\n        target    64\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    187\n        target    86\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    188\n        target    119\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    189\n        target    116\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    19\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    19\n        target    35\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    190\n        target    111\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    191\n        target    107\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    192\n        target    137\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    192\n        target    45\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    192\n        target    57\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    193\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    194\n        target    37\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    194\n        target    78\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    195\n        target    88\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    196\n        target    110\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    196\n        target    153\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    196\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    196\n        target    174\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    197\n        target    55\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    198\n        target    185\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    199\n        target    96\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    2\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    2\n        target    166\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    20\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    21\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    22\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    23\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    24\n        target    127\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    24\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    25\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    25\n        target    84\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    26\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    27\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    28\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    29\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    3\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    3\n        target    27\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    30\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    31\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    31\n        target    87\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    32\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    33\n        target    27\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    34\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    35\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    36\n        target    28\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    36\n        target    78\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    37\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    38\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    39\n        target    37\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    4\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    40\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    40\n        target    147\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    41\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    42\n        target    29\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    43\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    44\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    45\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    46\n        target    41\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    47\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    48\n        target    165\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    48\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    48\n        target    99\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    49\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    49\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    5\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    5\n        target    180\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    50\n        target    102\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    50\n        target    49\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    51\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    52\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    53\n        target    32\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    54\n        target    35\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    55\n        target    115\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    55\n        target    39\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    56\n        target    38\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    57\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    58\n        target    56\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    59\n        target    40\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    6\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    60\n        target    57\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    61\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    62\n        target    47\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    63\n        target    111\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    63\n        target    49\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    64\n        target    42\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    65\n        target    64\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    66\n        target    37\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    67\n        target    51\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    67\n        target    52\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    68\n        target    135\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    68\n        target    51\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    69\n        target    27\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    7\n        target    144\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    7\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    70\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    70\n        target    146\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    70\n        target    69\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    71\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    72\n        target    29\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    72\n        target    77\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    73\n        target    61\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    74\n        target    28\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    75\n        target    145\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    75\n        target    58\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    76\n        target    125\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    76\n        target    75\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    76\n        target    96\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    77\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    77\n        target    73\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    78\n        target    45\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    78\n        target    81\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    79\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    8\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    80\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    81\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    82\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    83\n        target    123\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    83\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    84\n        target    39\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    85\n        target    61\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    85\n        target    90\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    86\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    86\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    86\n        target    96\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    87\n        target    36\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    88\n        target    179\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    88\n        target    54\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    89\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    89\n        target    30\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    9\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    90\n        target    55\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    91\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    92\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    93\n        target    31\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    94\n        target    25\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    94\n        target    78\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    95\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    96\n        target    43\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    97\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    97\n        target    34\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    97\n        target    68\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    98\n        target    57\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    99\n        target    146\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    99\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n]\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v200e280.tglf",
    "content": "0 1002.000 739.000 30.000 30.000\n1 1255.000 940.000 30.000 30.000\n2 326.000 1249.000 30.000 30.000\n3 166.000 782.000 30.000 30.000\n4 1065.000 708.000 30.000 30.000\n5 968.000 584.000 30.000 30.000\n6 1174.000 429.000 30.000 30.000\n7 56.000 265.000 30.000 30.000\n8 919.000 906.000 30.000 30.000\n9 36.000 108.000 30.000 30.000\n10 990.000 690.000 30.000 30.000\n11 603.000 781.000 30.000 30.000\n12 1222.000 1067.000 30.000 30.000\n13 364.000 1026.000 30.000 30.000\n14 549.000 271.000 30.000 30.000\n15 1050.000 969.000 30.000 30.000\n16 373.000 33.000 30.000 30.000\n17 246.000 1152.000 30.000 30.000\n18 1159.000 811.000 30.000 30.000\n19 98.000 665.000 30.000 30.000\n20 199.000 1175.000 30.000 30.000\n21 141.000 1079.000 30.000 30.000\n22 411.000 708.000 30.000 30.000\n23 141.000 249.000 30.000 30.000\n24 997.000 484.000 30.000 30.000\n25 1134.000 484.000 30.000 30.000\n26 771.000 711.000 30.000 30.000\n27 644.000 40.000 30.000 30.000\n28 904.000 596.000 30.000 30.000\n29 67.000 1073.000 30.000 30.000\n30 395.000 419.000 30.000 30.000\n31 32.000 1210.000 30.000 30.000\n32 1161.000 1001.000 30.000 30.000\n33 283.000 187.000 30.000 30.000\n34 36.000 808.000 30.000 30.000\n35 116.000 815.000 30.000 30.000\n36 1243.000 434.000 30.000 30.000\n37 1027.000 448.000 30.000 30.000\n38 250.000 693.000 30.000 30.000\n39 32.000 733.000 30.000 30.000\n40 400.000 659.000 30.000 30.000\n41 490.000 1036.000 30.000 30.000\n42 520.000 18.000 30.000 30.000\n43 214.000 799.000 30.000 30.000\n44 334.000 1129.000 30.000 30.000\n45 1208.000 391.000 30.000 30.000\n46 184.000 681.000 30.000 30.000\n47 1016.000 905.000 30.000 30.000\n48 44.000 1011.000 30.000 30.000\n49 1029.000 98.000 30.000 30.000\n50 365.000 152.000 30.000 30.000\n51 724.000 1181.000 30.000 30.000\n52 654.000 953.000 30.000 30.000\n53 753.000 193.000 30.000 30.000\n54 533.000 1141.000 30.000 30.000\n55 1064.000 909.000 30.000 30.000\n56 3.000 401.000 30.000 30.000\n57 253.000 385.000 30.000 30.000\n58 30.000 106.000 30.000 30.000\n59 1206.000 380.000 30.000 30.000\n60 1011.000 796.000 30.000 30.000\n61 612.000 639.000 30.000 30.000\n62 1213.000 820.000 30.000 30.000\n63 131.000 743.000 30.000 30.000\n64 797.000 1232.000 30.000 30.000\n65 37.000 689.000 30.000 30.000\n66 18.000 72.000 30.000 30.000\n67 599.000 74.000 30.000 30.000\n68 855.000 1223.000 30.000 30.000\n69 1108.000 801.000 30.000 30.000\n70 767.000 648.000 30.000 30.000\n71 329.000 292.000 30.000 30.000\n72 785.000 206.000 30.000 30.000\n73 264.000 1204.000 30.000 30.000\n74 125.000 18.000 30.000 30.000\n75 886.000 711.000 30.000 30.000\n76 204.000 87.000 30.000 30.000\n77 836.000 494.000 30.000 30.000\n78 206.000 641.000 30.000 30.000\n79 670.000 1139.000 30.000 30.000\n80 1228.000 836.000 30.000 30.000\n81 104.000 333.000 30.000 30.000\n82 444.000 1201.000 30.000 30.000\n83 152.000 795.000 30.000 30.000\n84 1121.000 359.000 30.000 30.000\n85 1269.000 618.000 30.000 30.000\n86 87.000 473.000 30.000 30.000\n87 629.000 251.000 30.000 30.000\n88 578.000 92.000 30.000 30.000\n89 206.000 1236.000 30.000 30.000\n90 978.000 486.000 30.000 30.000\n91 416.000 171.000 30.000 30.000\n92 519.000 409.000 30.000 30.000\n93 1240.000 1016.000 30.000 30.000\n94 897.000 260.000 30.000 30.000\n95 1114.000 994.000 30.000 30.000\n96 491.000 1028.000 30.000 30.000\n97 890.000 473.000 30.000 30.000\n98 1159.000 552.000 30.000 30.000\n99 155.000 471.000 30.000 30.000\n100 810.000 793.000 30.000 30.000\n101 505.000 561.000 30.000 30.000\n102 1040.000 475.000 30.000 30.000\n103 1076.000 527.000 30.000 30.000\n104 657.000 526.000 30.000 30.000\n105 923.000 162.000 30.000 30.000\n106 247.000 302.000 30.000 30.000\n107 689.000 811.000 30.000 30.000\n108 957.000 801.000 30.000 30.000\n109 1228.000 567.000 30.000 30.000\n110 574.000 965.000 30.000 30.000\n111 830.000 630.000 30.000 30.000\n112 587.000 1235.000 30.000 30.000\n113 519.000 352.000 30.000 30.000\n114 237.000 678.000 30.000 30.000\n115 999.000 1082.000 30.000 30.000\n116 1079.000 328.000 30.000 30.000\n117 268.000 581.000 30.000 30.000\n118 552.000 243.000 30.000 30.000\n119 953.000 1241.000 30.000 30.000\n120 1261.000 671.000 30.000 30.000\n121 627.000 863.000 30.000 30.000\n122 145.000 389.000 30.000 30.000\n123 159.000 930.000 30.000 30.000\n124 963.000 815.000 30.000 30.000\n125 28.000 682.000 30.000 30.000\n126 1058.000 1024.000 30.000 30.000\n127 404.000 48.000 30.000 30.000\n128 1098.000 901.000 30.000 30.000\n129 659.000 75.000 30.000 30.000\n130 314.000 1150.000 30.000 30.000\n131 783.000 363.000 30.000 30.000\n132 261.000 167.000 30.000 30.000\n133 1120.000 349.000 30.000 30.000\n134 997.000 1165.000 30.000 30.000\n135 197.000 1023.000 30.000 30.000\n136 287.000 419.000 30.000 30.000\n137 937.000 909.000 30.000 30.000\n138 415.000 64.000 30.000 30.000\n139 480.000 550.000 30.000 30.000\n140 78.000 305.000 30.000 30.000\n141 621.000 400.000 30.000 30.000\n142 1043.000 535.000 30.000 30.000\n143 860.000 647.000 30.000 30.000\n144 993.000 358.000 30.000 30.000\n145 1203.000 292.000 30.000 30.000\n146 690.000 744.000 30.000 30.000\n147 427.000 856.000 30.000 30.000\n148 1235.000 479.000 30.000 30.000\n149 553.000 47.000 30.000 30.000\n150 1099.000 1239.000 30.000 30.000\n151 229.000 393.000 30.000 30.000\n152 337.000 797.000 30.000 30.000\n153 233.000 1009.000 30.000 30.000\n154 950.000 21.000 30.000 30.000\n155 79.000 472.000 30.000 30.000\n156 1097.000 528.000 30.000 30.000\n157 806.000 945.000 30.000 30.000\n158 320.000 372.000 30.000 30.000\n159 1200.000 888.000 30.000 30.000\n160 500.000 1021.000 30.000 30.000\n161 426.000 392.000 30.000 30.000\n162 265.000 655.000 30.000 30.000\n163 531.000 211.000 30.000 30.000\n164 449.000 868.000 30.000 30.000\n165 829.000 449.000 30.000 30.000\n166 774.000 1009.000 30.000 30.000\n167 942.000 1164.000 30.000 30.000\n168 539.000 1131.000 30.000 30.000\n169 618.000 323.000 30.000 30.000\n170 440.000 824.000 30.000 30.000\n171 57.000 1244.000 30.000 30.000\n172 353.000 926.000 30.000 30.000\n173 55.000 1123.000 30.000 30.000\n174 1162.000 236.000 30.000 30.000\n175 672.000 160.000 30.000 30.000\n176 1023.000 1207.000 30.000 30.000\n177 704.000 787.000 30.000 30.000\n178 1072.000 154.000 30.000 30.000\n179 549.000 335.000 30.000 30.000\n180 215.000 434.000 30.000 30.000\n181 693.000 567.000 30.000 30.000\n182 166.000 262.000 30.000 30.000\n183 1240.000 804.000 30.000 30.000\n184 436.000 1050.000 30.000 30.000\n185 691.000 953.000 30.000 30.000\n186 664.000 194.000 30.000 30.000\n187 29.000 127.000 30.000 30.000\n188 1031.000 579.000 30.000 30.000\n189 447.000 1197.000 30.000 30.000\n190 907.000 580.000 30.000 30.000\n191 477.000 1105.000 30.000 30.000\n192 787.000 193.000 30.000 30.000\n193 1194.000 724.000 30.000 30.000\n194 211.000 5.000 30.000 30.000\n195 699.000 640.000 30.000 30.000\n196 1189.000 600.000 30.000 30.000\n197 729.000 179.000 30.000 30.000\n198 630.000 1083.000 30.000 30.000\n199 514.000 66.000 30.000 30.000\n#\n93 31\n85 90\n183 27\n96 43\n192 57\n78 81\n50 102\n21 0\n170 141\n163 43\n194 78\n76 125\n117 23\n168 161\n76 96\n123 69\n191 107\n133 24\n24 9\n157 23\n1 88\n137 54\n5 1\n94 25\n10 178\n135 51\n58 56\n63 49\n72 77\n144 52\n62 47\n106 37\n64 42\n113 57\n46 41\n155 66\n103 53\n31 6\n167 183\n173 55\n89 15\n197 55\n177 152\n170 94\n38 15\n25 84\n196 174\n6 5\n147 141\n53 32\n152 7\n44 8\n160 105\n186 153\n3 0\n154 27\n8 7\n118 143\n159 130\n41 10\n10 1\n49 17\n143 176\n34 16\n114 83\n167 60\n109 92\n124 4\n143 134\n192 137\n16 15\n142 51\n55 115\n11 5\n148 134\n60 57\n14 5\n86 96\n182 168\n65 64\n119 109\n186 178\n161 180\n48 99\n77 73\n118 54\n33 27\n175 35\n82 5\n52 10\n68 135\n19 2\n94 78\n98 57\n136 106\n97 34\n88 179\n185 153\n167 115\n127 106\n157 192\n159 81\n108 180\n104 92\n7 3\n32 4\n155 64\n18 186\n49 21\n181 194\n99 146\n2 1\n192 45\n181 157\n121 48\n75 145\n112 39\n187 86\n101 80\n29 21\n57 12\n80 5\n128 21\n86 7\n179 32\n83 123\n88 54\n90 55\n91 1\n131 92\n74 28\n78 45\n187 64\n17 24\n87 36\n164 116\n122 7\n97 68\n132 113\n76 75\n59 40\n172 38\n140 90\n196 153\n179 1\n110 86\n108 29\n102 51\n7 144\n110 51\n55 39\n146 20\n50 49\n15 11\n61 22\n174 163\n18 7\n196 110\n24 127\n116 30\n162 146\n120 84\n9 1\n71 12\n95 5\n5 180\n124 108\n166 39\n19 35\n48 9\n193 0\n25 11\n66 37\n28 10\n83 16\n70 146\n85 61\n43 14\n132 83\n22 3\n26 15\n126 107\n39 37\n81 4\n35 10\n180 13\n17 1\n99 6\n184 123\n23 9\n153 22\n40 147\n54 35\n143 155\n140 194\n156 133\n158 33\n47 23\n136 42\n165 60\n195 88\n157 183\n1 0\n199 96\n36 78\n151 168\n79 9\n188 119\n190 111\n63 111\n196 16\n138 4\n92 9\n12 7\n97 16\n69 27\n75 58\n2 166\n30 23\n27 12\n84 39\n42 29\n70 13\n48 165\n171 72\n145 117\n31 87\n134 70\n129 79\n178 35\n70 69\n20 18\n36 28\n111 99\n13 6\n130 66\n68 51\n141 12\n150 18\n12 62\n105 85\n152 180\n198 185\n139 116\n37 10\n151 125\n144 104\n40 0\n86 15\n158 156\n73 61\n149 111\n3 27\n89 30\n72 29\n51 21\n115 89\n173 3\n67 52\n176 108\n100 27\n189 116\n145 105\n45 21\n107 21\n180 104\n161 117\n125 93\n147 111\n178 2\n56 38\n145 112\n145 136\n77 23\n194 37\n108 118\n67 51\n4 1\n169 1\n184 146\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v200e300.gml",
    "content": "graph\n[\n    node\n    [\n        id    0\n        label    \"\"\n        graphics\n        [\n            x    12.12\n            y    306.29\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    1\n        label    \"\"\n        graphics\n        [\n            x    61.47\n            y    437.05\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    2\n        label    \"\"\n        graphics\n        [\n            x    549.06\n            y    1113.05\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    3\n        label    \"\"\n        graphics\n        [\n            x    441.27\n            y    382.63\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    4\n        label    \"\"\n        graphics\n        [\n            x    836.70\n            y    684.42\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    5\n        label    \"\"\n        graphics\n        [\n            x    1156.58\n            y    224.15\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    6\n        label    \"\"\n        graphics\n        [\n            x    1139.55\n            y    430.93\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    7\n        label    \"\"\n        graphics\n        [\n            x    941.90\n            y    38.47\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    8\n        label    \"\"\n        graphics\n        [\n            x    786.98\n            y    360.91\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    9\n        label    \"\"\n        graphics\n        [\n            x    1218.90\n            y    38.89\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    10\n        label    \"\"\n        graphics\n        [\n            x    288.10\n            y    929.92\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    11\n        label    \"\"\n        graphics\n        [\n            x    1271.56\n            y    1126.11\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    12\n        label    \"\"\n        graphics\n        [\n            x    95.27\n            y    866.72\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    13\n        label    \"\"\n        graphics\n        [\n            x    669.45\n            y    105.23\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    14\n        label    \"\"\n        graphics\n        [\n            x    635.38\n            y    936.76\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    15\n        label    \"\"\n        graphics\n        [\n            x    1021.27\n            y    512.17\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    16\n        label    \"\"\n        graphics\n        [\n            x    199.90\n            y    168.42\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    17\n        label    \"\"\n        graphics\n        [\n            x    436.42\n            y    846.80\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    18\n        label    \"\"\n        graphics\n        [\n            x    943.65\n            y    660.94\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    19\n        label    \"\"\n        graphics\n        [\n            x    815.70\n            y    472.35\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    20\n        label    \"\"\n        graphics\n        [\n            x    774.92\n            y    245.21\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    21\n        label    \"\"\n        graphics\n        [\n            x    504.15\n            y    712.52\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    22\n        label    \"\"\n        graphics\n        [\n            x    638.04\n            y    688.83\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    23\n        label    \"\"\n        graphics\n        [\n            x    510.31\n            y    572.09\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    24\n        label    \"\"\n        graphics\n        [\n            x    673.34\n            y    812.97\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    25\n        label    \"\"\n        graphics\n        [\n            x    1156.68\n            y    231.92\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    26\n        label    \"\"\n        graphics\n        [\n            x    41.04\n            y    979.17\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    27\n        label    \"\"\n        graphics\n        [\n            x    324.49\n            y    26.50\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    28\n        label    \"\"\n        graphics\n        [\n            x    845.62\n            y    1234.10\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    29\n        label    \"\"\n        graphics\n        [\n            x    454.22\n            y    276.74\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    30\n        label    \"\"\n        graphics\n        [\n            x    526.38\n            y    876.09\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    31\n        label    \"\"\n        graphics\n        [\n            x    285.13\n            y    1164.91\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    32\n        label    \"\"\n        graphics\n        [\n            x    1110.44\n            y    979.35\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    33\n        label    \"\"\n        graphics\n        [\n            x    301.98\n            y    575.59\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    34\n        label    \"\"\n        graphics\n        [\n            x    641.76\n            y    667.05\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    35\n        label    \"\"\n        graphics\n        [\n            x    1219.68\n            y    326.87\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    36\n        label    \"\"\n        graphics\n        [\n            x    1201.38\n            y    866.75\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    37\n        label    \"\"\n        graphics\n        [\n            x    801.57\n            y    385.84\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    38\n        label    \"\"\n        graphics\n        [\n            x    259.10\n            y    218.16\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    39\n        label    \"\"\n        graphics\n        [\n            x    116.81\n            y    624.10\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    40\n        label    \"\"\n        graphics\n        [\n            x    247.26\n            y    293.93\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    41\n        label    \"\"\n        graphics\n        [\n            x    1094.52\n            y    1023.28\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    42\n        label    \"\"\n        graphics\n        [\n            x    589.74\n            y    508.79\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    43\n        label    \"\"\n        graphics\n        [\n            x    1146.97\n            y    468.19\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    44\n        label    \"\"\n        graphics\n        [\n            x    1112.76\n            y    636.27\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    45\n        label    \"\"\n        graphics\n        [\n            x    815.57\n            y    844.61\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    46\n        label    \"\"\n        graphics\n        [\n            x    780.03\n            y    1255.67\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    47\n        label    \"\"\n        graphics\n        [\n            x    397.92\n            y    291.64\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    48\n        label    \"\"\n        graphics\n        [\n            x    332.70\n            y    923.84\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    49\n        label    \"\"\n        graphics\n        [\n            x    5.63\n            y    530.52\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    50\n        label    \"\"\n        graphics\n        [\n            x    46.81\n            y    534.32\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    51\n        label    \"\"\n        graphics\n        [\n            x    564.78\n            y    1034.99\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    52\n        label    \"\"\n        graphics\n        [\n            x    1107.57\n            y    1161.96\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    53\n        label    \"\"\n        graphics\n        [\n            x    385.32\n            y    1033.85\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    54\n        label    \"\"\n        graphics\n        [\n            x    345.12\n            y    772.97\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    55\n        label    \"\"\n        graphics\n        [\n            x    1033.31\n            y    661.54\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    56\n        label    \"\"\n        graphics\n        [\n            x    651.26\n            y    1225.87\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    57\n        label    \"\"\n        graphics\n        [\n            x    1044.86\n            y    166.15\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    58\n        label    \"\"\n        graphics\n        [\n            x    1119.45\n            y    707.83\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    59\n        label    \"\"\n        graphics\n        [\n            x    1053.36\n            y    1073.25\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    60\n        label    \"\"\n        graphics\n        [\n            x    47.44\n            y    286.53\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    61\n        label    \"\"\n        graphics\n        [\n            x    918.39\n            y    781.00\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    62\n        label    \"\"\n        graphics\n        [\n            x    343.31\n            y    1094.71\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    63\n        label    \"\"\n        graphics\n        [\n            x    550.89\n            y    274.62\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    64\n        label    \"\"\n        graphics\n        [\n            x    651.35\n            y    237.63\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    65\n        label    \"\"\n        graphics\n        [\n            x    1216.76\n            y    936.72\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    66\n        label    \"\"\n        graphics\n        [\n            x    8.71\n            y    993.15\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    67\n        label    \"\"\n        graphics\n        [\n            x    196.81\n            y    870.43\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    68\n        label    \"\"\n        graphics\n        [\n            x    1153.93\n            y    770.68\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    69\n        label    \"\"\n        graphics\n        [\n            x    521.10\n            y    500.84\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    70\n        label    \"\"\n        graphics\n        [\n            x    278.10\n            y    741.10\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    71\n        label    \"\"\n        graphics\n        [\n            x    82.34\n            y    977.04\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    72\n        label    \"\"\n        graphics\n        [\n            x    465.44\n            y    1041.84\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    73\n        label    \"\"\n        graphics\n        [\n            x    87.25\n            y    1033.86\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    74\n        label    \"\"\n        graphics\n        [\n            x    422.29\n            y    39.56\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    75\n        label    \"\"\n        graphics\n        [\n            x    48.99\n            y    222.05\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    76\n        label    \"\"\n        graphics\n        [\n            x    320.89\n            y    151.54\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    77\n        label    \"\"\n        graphics\n        [\n            x    1055.18\n            y    714.88\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    78\n        label    \"\"\n        graphics\n        [\n            x    1224.01\n            y    12.78\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    79\n        label    \"\"\n        graphics\n        [\n            x    134.15\n            y    1128.84\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    80\n        label    \"\"\n        graphics\n        [\n            x    445.76\n            y    199.75\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    81\n        label    \"\"\n        graphics\n        [\n            x    687.45\n            y    660.75\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    82\n        label    \"\"\n        graphics\n        [\n            x    207.02\n            y    839.35\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    83\n        label    \"\"\n        graphics\n        [\n            x    227.44\n            y    598.99\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    84\n        label    \"\"\n        graphics\n        [\n            x    982.37\n            y    547.67\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    85\n        label    \"\"\n        graphics\n        [\n            x    919.15\n            y    554.65\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    86\n        label    \"\"\n        graphics\n        [\n            x    470.73\n            y    522.51\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    87\n        label    \"\"\n        graphics\n        [\n            x    660.74\n            y    292.26\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    88\n        label    \"\"\n        graphics\n        [\n            x    871.36\n            y    576.21\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    89\n        label    \"\"\n        graphics\n        [\n            x    1262.36\n            y    682.12\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    90\n        label    \"\"\n        graphics\n        [\n            x    735.18\n            y    1222.16\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    91\n        label    \"\"\n        graphics\n        [\n            x    1140.77\n            y    155.25\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    92\n        label    \"\"\n        graphics\n        [\n            x    147.94\n            y    480.30\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    93\n        label    \"\"\n        graphics\n        [\n            x    494.66\n            y    945.72\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    94\n        label    \"\"\n        graphics\n        [\n            x    706.14\n            y    227.90\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    95\n        label    \"\"\n        graphics\n        [\n            x    636.23\n            y    1052.72\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    96\n        label    \"\"\n        graphics\n        [\n            x    201.39\n            y    75.92\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    97\n        label    \"\"\n        graphics\n        [\n            x    938.96\n            y    361.34\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    98\n        label    \"\"\n        graphics\n        [\n            x    20.86\n            y    43.72\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    99\n        label    \"\"\n        graphics\n        [\n            x    242.00\n            y    904.48\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    100\n        label    \"\"\n        graphics\n        [\n            x    791.21\n            y    454.61\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    101\n        label    \"\"\n        graphics\n        [\n            x    5.35\n            y    12.18\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    102\n        label    \"\"\n        graphics\n        [\n            x    252.33\n            y    967.31\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    103\n        label    \"\"\n        graphics\n        [\n            x    99.75\n            y    166.01\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    104\n        label    \"\"\n        graphics\n        [\n            x    402.67\n            y    980.06\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    105\n        label    \"\"\n        graphics\n        [\n            x    862.09\n            y    178.11\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    106\n        label    \"\"\n        graphics\n        [\n            x    145.10\n            y    49.52\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    107\n        label    \"\"\n        graphics\n        [\n            x    1191.15\n            y    419.29\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    108\n        label    \"\"\n        graphics\n        [\n            x    576.26\n            y    126.35\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    109\n        label    \"\"\n        graphics\n        [\n            x    510.29\n            y    1053.03\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    110\n        label    \"\"\n        graphics\n        [\n            x    110.38\n            y    442.14\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    111\n        label    \"\"\n        graphics\n        [\n            x    753.22\n            y    1160.10\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    112\n        label    \"\"\n        graphics\n        [\n            x    512.53\n            y    514.33\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    113\n        label    \"\"\n        graphics\n        [\n            x    855.05\n            y    122.20\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    114\n        label    \"\"\n        graphics\n        [\n            x    792.48\n            y    22.21\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    115\n        label    \"\"\n        graphics\n        [\n            x    772.88\n            y    78.54\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    116\n        label    \"\"\n        graphics\n        [\n            x    722.96\n            y    34.04\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    117\n        label    \"\"\n        graphics\n        [\n            x    229.42\n            y    397.82\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    118\n        label    \"\"\n        graphics\n        [\n            x    642.54\n            y    160.17\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    119\n        label    \"\"\n        graphics\n        [\n            x    435.62\n            y    636.63\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    120\n        label    \"\"\n        graphics\n        [\n            x    863.95\n            y    1138.59\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    121\n        label    \"\"\n        graphics\n        [\n            x    361.10\n            y    946.16\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    122\n        label    \"\"\n        graphics\n        [\n            x    1038.73\n            y    1098.90\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    123\n        label    \"\"\n        graphics\n        [\n            x    260.12\n            y    414.86\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    124\n        label    \"\"\n        graphics\n        [\n            x    200.37\n            y    83.14\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    125\n        label    \"\"\n        graphics\n        [\n            x    376.69\n            y    142.51\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    126\n        label    \"\"\n        graphics\n        [\n            x    544.50\n            y    422.73\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    127\n        label    \"\"\n        graphics\n        [\n            x    246.80\n            y    899.61\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    128\n        label    \"\"\n        graphics\n        [\n            x    1046.48\n            y    643.25\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    129\n        label    \"\"\n        graphics\n        [\n            x    801.45\n            y    835.01\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    130\n        label    \"\"\n        graphics\n        [\n            x    0.74\n            y    195.27\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    131\n        label    \"\"\n        graphics\n        [\n            x    960.88\n            y    106.90\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    132\n        label    \"\"\n        graphics\n        [\n            x    140.01\n            y    1210.47\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    133\n        label    \"\"\n        graphics\n        [\n            x    1248.76\n            y    1020.19\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    134\n        label    \"\"\n        graphics\n        [\n            x    779.55\n            y    623.18\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    135\n        label    \"\"\n        graphics\n        [\n            x    18.15\n            y    591.62\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    136\n        label    \"\"\n        graphics\n        [\n            x    353.07\n            y    142.41\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    137\n        label    \"\"\n        graphics\n        [\n            x    984.07\n            y    162.28\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    138\n        label    \"\"\n        graphics\n        [\n            x    529.94\n            y    677.49\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    139\n        label    \"\"\n        graphics\n        [\n            x    418.20\n            y    201.13\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    140\n        label    \"\"\n        graphics\n        [\n            x    332.58\n            y    245.71\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    141\n        label    \"\"\n        graphics\n        [\n            x    1000.13\n            y    1266.36\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    142\n        label    \"\"\n        graphics\n        [\n            x    904.90\n            y    23.03\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    143\n        label    \"\"\n        graphics\n        [\n            x    283.52\n            y    1152.04\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    144\n        label    \"\"\n        graphics\n        [\n            x    163.95\n            y    985.57\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    145\n        label    \"\"\n        graphics\n        [\n            x    592.50\n            y    969.11\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    146\n        label    \"\"\n        graphics\n        [\n            x    405.85\n            y    216.71\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    147\n        label    \"\"\n        graphics\n        [\n            x    24.63\n            y    134.02\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    148\n        label    \"\"\n        graphics\n        [\n            x    21.40\n            y    899.75\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    149\n        label    \"\"\n        graphics\n        [\n            x    1028.81\n            y    215.94\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    150\n        label    \"\"\n        graphics\n        [\n            x    1147.95\n            y    49.40\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    151\n        label    \"\"\n        graphics\n        [\n            x    388.99\n            y    530.23\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    152\n        label    \"\"\n        graphics\n        [\n            x    674.05\n            y    391.96\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    153\n        label    \"\"\n        graphics\n        [\n            x    953.39\n            y    975.80\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    154\n        label    \"\"\n        graphics\n        [\n            x    567.61\n            y    1224.96\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    155\n        label    \"\"\n        graphics\n        [\n            x    243.53\n            y    855.78\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    156\n        label    \"\"\n        graphics\n        [\n            x    558.84\n            y    734.82\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    157\n        label    \"\"\n        graphics\n        [\n            x    742.42\n            y    951.13\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    158\n        label    \"\"\n        graphics\n        [\n            x    1183.69\n            y    1017.15\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    159\n        label    \"\"\n        graphics\n        [\n            x    650.83\n            y    173.33\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    160\n        label    \"\"\n        graphics\n        [\n            x    663.05\n            y    200.55\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    161\n        label    \"\"\n        graphics\n        [\n            x    246.64\n            y    634.35\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    162\n        label    \"\"\n        graphics\n        [\n            x    1141.77\n            y    1235.94\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    163\n        label    \"\"\n        graphics\n        [\n            x    900.35\n            y    1241.90\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    164\n        label    \"\"\n        graphics\n        [\n            x    499.62\n            y    1004.55\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    165\n        label    \"\"\n        graphics\n        [\n            x    433.09\n            y    376.61\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    166\n        label    \"\"\n        graphics\n        [\n            x    953.40\n            y    267.00\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    167\n        label    \"\"\n        graphics\n        [\n            x    702.51\n            y    164.98\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    168\n        label    \"\"\n        graphics\n        [\n            x    543.61\n            y    589.58\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    169\n        label    \"\"\n        graphics\n        [\n            x    396.22\n            y    503.71\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    170\n        label    \"\"\n        graphics\n        [\n            x    268.39\n            y    535.82\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    171\n        label    \"\"\n        graphics\n        [\n            x    1010.91\n            y    104.64\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    172\n        label    \"\"\n        graphics\n        [\n            x    1012.58\n            y    182.24\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    173\n        label    \"\"\n        graphics\n        [\n            x    841.12\n            y    407.73\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    174\n        label    \"\"\n        graphics\n        [\n            x    628.04\n            y    1102.91\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    175\n        label    \"\"\n        graphics\n        [\n            x    194.63\n            y    916.80\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    176\n        label    \"\"\n        graphics\n        [\n            x    362.93\n            y    707.31\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    177\n        label    \"\"\n        graphics\n        [\n            x    693.80\n            y    467.88\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    178\n        label    \"\"\n        graphics\n        [\n            x    1197.31\n            y    1009.28\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    179\n        label    \"\"\n        graphics\n        [\n            x    499.61\n            y    118.02\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    180\n        label    \"\"\n        graphics\n        [\n            x    347.20\n            y    667.97\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    181\n        label    \"\"\n        graphics\n        [\n            x    1063.31\n            y    124.07\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    182\n        label    \"\"\n        graphics\n        [\n            x    847.23\n            y    188.07\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    183\n        label    \"\"\n        graphics\n        [\n            x    960.47\n            y    877.11\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    184\n        label    \"\"\n        graphics\n        [\n            x    112.85\n            y    268.94\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    185\n        label    \"\"\n        graphics\n        [\n            x    739.35\n            y    639.68\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    186\n        label    \"\"\n        graphics\n        [\n            x    591.80\n            y    861.48\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    187\n        label    \"\"\n        graphics\n        [\n            x    11.27\n            y    613.66\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    188\n        label    \"\"\n        graphics\n        [\n            x    483.40\n            y    1247.49\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    189\n        label    \"\"\n        graphics\n        [\n            x    694.66\n            y    1062.45\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    190\n        label    \"\"\n        graphics\n        [\n            x    500.51\n            y    701.20\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    191\n        label    \"\"\n        graphics\n        [\n            x    787.18\n            y    1234.27\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    192\n        label    \"\"\n        graphics\n        [\n            x    1159.46\n            y    67.64\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    193\n        label    \"\"\n        graphics\n        [\n            x    1143.79\n            y    466.21\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    194\n        label    \"\"\n        graphics\n        [\n            x    109.04\n            y    879.36\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    195\n        label    \"\"\n        graphics\n        [\n            x    680.50\n            y    382.58\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    196\n        label    \"\"\n        graphics\n        [\n            x    705.36\n            y    936.17\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    197\n        label    \"\"\n        graphics\n        [\n            x    961.36\n            y    847.29\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    198\n        label    \"\"\n        graphics\n        [\n            x    1025.64\n            y    1043.87\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    199\n        label    \"\"\n        graphics\n        [\n            x    1200.92\n            y    1207.19\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    edge\n    [\n        source    0\n        target    142\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    1\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    10\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    100\n        target    45\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    101\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    102\n        target    47\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    102\n        target    81\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    103\n        target    68\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    104\n        target    40\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    105\n        target    102\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    105\n        target    34\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    106\n        target    77\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    107\n        target    27\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    107\n        target    86\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    108\n        target    29\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    109\n        target    51\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    11\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    110\n        target    125\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    110\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    110\n        target    79\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    111\n        target    97\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    112\n        target    65\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    113\n        target    69\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    114\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    114\n        target    51\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    115\n        target    39\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    116\n        target    81\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    117\n        target    80\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    118\n        target    42\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    118\n        target    82\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    119\n        target    133\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    119\n        target    177\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    119\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    12\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    120\n        target    98\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    121\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    122\n        target    88\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    122\n        target    99\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    123\n        target    106\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    124\n        target    42\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    125\n        target    50\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    125\n        target    71\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    126\n        target    79\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    127\n        target    110\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    127\n        target    147\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    127\n        target    92\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    128\n        target    119\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    128\n        target    167\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    128\n        target    82\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    129\n        target    119\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    13\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    130\n        target    104\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    131\n        target    82\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    132\n        target    52\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    133\n        target    115\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    134\n        target    115\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    134\n        target    52\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    135\n        target    60\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    136\n        target    111\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    137\n        target    124\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    137\n        target    191\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    138\n        target    132\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    138\n        target    157\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    139\n        target    135\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    14\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    14\n        target    149\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    140\n        target    177\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    140\n        target    24\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    141\n        target    71\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    141\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    142\n        target    154\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    142\n        target    194\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    142\n        target    85\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    143\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    144\n        target    81\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    145\n        target    89\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    146\n        target    113\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    146\n        target    116\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    147\n        target    91\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    148\n        target    145\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    148\n        target    77\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    149\n        target    138\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    149\n        target    28\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    15\n        target    125\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    15\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    150\n        target    37\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    150\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    151\n        target    163\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    151\n        target    80\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    152\n        target    33\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    152\n        target    61\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    153\n        target    109\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    154\n        target    141\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    154\n        target    65\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    155\n        target    148\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    155\n        target    65\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    156\n        target    184\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    156\n        target    69\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    157\n        target    198\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    157\n        target    45\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    158\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    159\n        target    97\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    16\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    16\n        target    174\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    160\n        target    102\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    161\n        target    101\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    161\n        target    118\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    162\n        target    120\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    163\n        target    139\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    164\n        target    100\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    164\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    165\n        target    86\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    166\n        target    115\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    166\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    166\n        target    98\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    167\n        target    96\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    168\n        target    20\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    168\n        target    68\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    168\n        target    71\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    169\n        target    146\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    169\n        target    73\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    17\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    170\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    170\n        target    61\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    171\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    171\n        target    76\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    172\n        target    86\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    173\n        target    85\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    174\n        target    89\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    175\n        target    169\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    176\n        target    68\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    177\n        target    84\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    178\n        target    26\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    178\n        target    97\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    179\n        target    101\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    179\n        target    114\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    179\n        target    117\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    18\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    18\n        target    50\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    180\n        target    24\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    181\n        target    104\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    182\n        target    86\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    183\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    184\n        target    103\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    184\n        target    147\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    185\n        target    195\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    185\n        target    60\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    186\n        target    121\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    186\n        target    140\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    187\n        target    168\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    188\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    189\n        target    173\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    19\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    190\n        target    43\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    191\n        target    134\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    192\n        target    166\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    192\n        target    185\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    193\n        target    115\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    193\n        target    43\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    193\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    194\n        target    109\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    195\n        target    184\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    196\n        target    186\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    196\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    196\n        target    35\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    197\n        target    94\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    198\n        target    119\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    199\n        target    89\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    2\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    20\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    21\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    22\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    23\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    24\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    25\n        target    109\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    25\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    26\n        target    116\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    26\n        target    152\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    26\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    26\n        target    160\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    26\n        target    92\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    27\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    28\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    29\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    29\n        target    41\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    3\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    30\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    31\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    32\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    32\n        target    28\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    33\n        target    107\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    33\n        target    20\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    34\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    35\n        target    33\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    36\n        target    29\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    37\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    38\n        target    147\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    38\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    39\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    4\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    40\n        target    174\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    40\n        target    39\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    40\n        target    64\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    41\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    41\n        target    99\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    42\n        target    19\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    43\n        target    108\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    43\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    43\n        target    48\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    44\n        target    113\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    44\n        target    30\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    44\n        target    71\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    45\n        target    34\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    46\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    47\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    48\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    49\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    5\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    50\n        target    24\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    51\n        target    129\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    51\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    52\n        target    30\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    53\n        target    169\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    53\n        target    50\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    54\n        target    28\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    55\n        target    31\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    56\n        target    101\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    56\n        target    50\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    57\n        target    38\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    58\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    58\n        target    91\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    59\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    6\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    6\n        target    31\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    60\n        target    37\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    61\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    61\n        target    42\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    62\n        target    155\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    62\n        target    39\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    63\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    63\n        target    124\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    64\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    65\n        target    60\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    66\n        target    101\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    66\n        target    176\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    66\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    66\n        target    64\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    67\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    68\n        target    27\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    68\n        target    38\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    69\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    7\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    70\n        target    66\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    71\n        target    56\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    72\n        target    29\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    73\n        target    19\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    74\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    75\n        target    35\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    76\n        target    146\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    76\n        target    27\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    76\n        target    40\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    77\n        target    34\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    78\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    79\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    79\n        target    162\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    79\n        target    57\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    8\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    80\n        target    73\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    81\n        target    20\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    81\n        target    58\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    82\n        target    25\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    83\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    83\n        target    47\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    84\n        target    39\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    85\n        target    79\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    86\n        target    177\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    86\n        target    73\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    86\n        target    92\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    87\n        target    76\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    88\n        target    19\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    89\n        target    79\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    9\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    9\n        target    43\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    90\n        target    118\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    90\n        target    71\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    91\n        target    43\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    91\n        target    82\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    92\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    92\n        target    72\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    93\n        target    36\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    94\n        target    29\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    94\n        target    67\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    95\n        target    145\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    95\n        target    48\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    96\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    97\n        target    71\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    98\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    98\n        target    54\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    99\n        target    181\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    99\n        target    68\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n]\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v200e300.tglf",
    "content": "0 12.000 306.000 30.000 30.000\n1 61.000 437.000 30.000 30.000\n2 549.000 1113.000 30.000 30.000\n3 441.000 382.000 30.000 30.000\n4 836.000 684.000 30.000 30.000\n5 1156.000 224.000 30.000 30.000\n6 1139.000 430.000 30.000 30.000\n7 941.000 38.000 30.000 30.000\n8 786.000 360.000 30.000 30.000\n9 1218.000 38.000 30.000 30.000\n10 288.000 929.000 30.000 30.000\n11 1271.000 1126.000 30.000 30.000\n12 95.000 866.000 30.000 30.000\n13 669.000 105.000 30.000 30.000\n14 635.000 936.000 30.000 30.000\n15 1021.000 512.000 30.000 30.000\n16 199.000 168.000 30.000 30.000\n17 436.000 846.000 30.000 30.000\n18 943.000 660.000 30.000 30.000\n19 815.000 472.000 30.000 30.000\n20 774.000 245.000 30.000 30.000\n21 504.000 712.000 30.000 30.000\n22 638.000 688.000 30.000 30.000\n23 510.000 572.000 30.000 30.000\n24 673.000 812.000 30.000 30.000\n25 1156.000 231.000 30.000 30.000\n26 41.000 979.000 30.000 30.000\n27 324.000 26.000 30.000 30.000\n28 845.000 1234.000 30.000 30.000\n29 454.000 276.000 30.000 30.000\n30 526.000 876.000 30.000 30.000\n31 285.000 1164.000 30.000 30.000\n32 1110.000 979.000 30.000 30.000\n33 301.000 575.000 30.000 30.000\n34 641.000 667.000 30.000 30.000\n35 1219.000 326.000 30.000 30.000\n36 1201.000 866.000 30.000 30.000\n37 801.000 385.000 30.000 30.000\n38 259.000 218.000 30.000 30.000\n39 116.000 624.000 30.000 30.000\n40 247.000 293.000 30.000 30.000\n41 1094.000 1023.000 30.000 30.000\n42 589.000 508.000 30.000 30.000\n43 1146.000 468.000 30.000 30.000\n44 1112.000 636.000 30.000 30.000\n45 815.000 844.000 30.000 30.000\n46 780.000 1255.000 30.000 30.000\n47 397.000 291.000 30.000 30.000\n48 332.000 923.000 30.000 30.000\n49 5.000 530.000 30.000 30.000\n50 46.000 534.000 30.000 30.000\n51 564.000 1034.000 30.000 30.000\n52 1107.000 1161.000 30.000 30.000\n53 385.000 1033.000 30.000 30.000\n54 345.000 772.000 30.000 30.000\n55 1033.000 661.000 30.000 30.000\n56 651.000 1225.000 30.000 30.000\n57 1044.000 166.000 30.000 30.000\n58 1119.000 707.000 30.000 30.000\n59 1053.000 1073.000 30.000 30.000\n60 47.000 286.000 30.000 30.000\n61 918.000 781.000 30.000 30.000\n62 343.000 1094.000 30.000 30.000\n63 550.000 274.000 30.000 30.000\n64 651.000 237.000 30.000 30.000\n65 1216.000 936.000 30.000 30.000\n66 8.000 993.000 30.000 30.000\n67 196.000 870.000 30.000 30.000\n68 1153.000 770.000 30.000 30.000\n69 521.000 500.000 30.000 30.000\n70 278.000 741.000 30.000 30.000\n71 82.000 977.000 30.000 30.000\n72 465.000 1041.000 30.000 30.000\n73 87.000 1033.000 30.000 30.000\n74 422.000 39.000 30.000 30.000\n75 48.000 222.000 30.000 30.000\n76 320.000 151.000 30.000 30.000\n77 1055.000 714.000 30.000 30.000\n78 1224.000 12.000 30.000 30.000\n79 134.000 1128.000 30.000 30.000\n80 445.000 199.000 30.000 30.000\n81 687.000 660.000 30.000 30.000\n82 207.000 839.000 30.000 30.000\n83 227.000 598.000 30.000 30.000\n84 982.000 547.000 30.000 30.000\n85 919.000 554.000 30.000 30.000\n86 470.000 522.000 30.000 30.000\n87 660.000 292.000 30.000 30.000\n88 871.000 576.000 30.000 30.000\n89 1262.000 682.000 30.000 30.000\n90 735.000 1222.000 30.000 30.000\n91 1140.000 155.000 30.000 30.000\n92 147.000 480.000 30.000 30.000\n93 494.000 945.000 30.000 30.000\n94 706.000 227.000 30.000 30.000\n95 636.000 1052.000 30.000 30.000\n96 201.000 75.000 30.000 30.000\n97 938.000 361.000 30.000 30.000\n98 20.000 43.000 30.000 30.000\n99 242.000 904.000 30.000 30.000\n100 791.000 454.000 30.000 30.000\n101 5.000 12.000 30.000 30.000\n102 252.000 967.000 30.000 30.000\n103 99.000 166.000 30.000 30.000\n104 402.000 980.000 30.000 30.000\n105 862.000 178.000 30.000 30.000\n106 145.000 49.000 30.000 30.000\n107 1191.000 419.000 30.000 30.000\n108 576.000 126.000 30.000 30.000\n109 510.000 1053.000 30.000 30.000\n110 110.000 442.000 30.000 30.000\n111 753.000 1160.000 30.000 30.000\n112 512.000 514.000 30.000 30.000\n113 855.000 122.000 30.000 30.000\n114 792.000 22.000 30.000 30.000\n115 772.000 78.000 30.000 30.000\n116 722.000 34.000 30.000 30.000\n117 229.000 397.000 30.000 30.000\n118 642.000 160.000 30.000 30.000\n119 435.000 636.000 30.000 30.000\n120 863.000 1138.000 30.000 30.000\n121 361.000 946.000 30.000 30.000\n122 1038.000 1098.000 30.000 30.000\n123 260.000 414.000 30.000 30.000\n124 200.000 83.000 30.000 30.000\n125 376.000 142.000 30.000 30.000\n126 544.000 422.000 30.000 30.000\n127 246.000 899.000 30.000 30.000\n128 1046.000 643.000 30.000 30.000\n129 801.000 835.000 30.000 30.000\n130 0.000 195.000 30.000 30.000\n131 960.000 106.000 30.000 30.000\n132 140.000 1210.000 30.000 30.000\n133 1248.000 1020.000 30.000 30.000\n134 779.000 623.000 30.000 30.000\n135 18.000 591.000 30.000 30.000\n136 353.000 142.000 30.000 30.000\n137 984.000 162.000 30.000 30.000\n138 529.000 677.000 30.000 30.000\n139 418.000 201.000 30.000 30.000\n140 332.000 245.000 30.000 30.000\n141 1000.000 1266.000 30.000 30.000\n142 904.000 23.000 30.000 30.000\n143 283.000 1152.000 30.000 30.000\n144 163.000 985.000 30.000 30.000\n145 592.000 969.000 30.000 30.000\n146 405.000 216.000 30.000 30.000\n147 24.000 134.000 30.000 30.000\n148 21.000 899.000 30.000 30.000\n149 1028.000 215.000 30.000 30.000\n150 1147.000 49.000 30.000 30.000\n151 388.000 530.000 30.000 30.000\n152 674.000 391.000 30.000 30.000\n153 953.000 975.000 30.000 30.000\n154 567.000 1224.000 30.000 30.000\n155 243.000 855.000 30.000 30.000\n156 558.000 734.000 30.000 30.000\n157 742.000 951.000 30.000 30.000\n158 1183.000 1017.000 30.000 30.000\n159 650.000 173.000 30.000 30.000\n160 663.000 200.000 30.000 30.000\n161 246.000 634.000 30.000 30.000\n162 1141.000 1235.000 30.000 30.000\n163 900.000 1241.000 30.000 30.000\n164 499.000 1004.000 30.000 30.000\n165 433.000 376.000 30.000 30.000\n166 953.000 267.000 30.000 30.000\n167 702.000 164.000 30.000 30.000\n168 543.000 589.000 30.000 30.000\n169 396.000 503.000 30.000 30.000\n170 268.000 535.000 30.000 30.000\n171 1010.000 104.000 30.000 30.000\n172 1012.000 182.000 30.000 30.000\n173 841.000 407.000 30.000 30.000\n174 628.000 1102.000 30.000 30.000\n175 194.000 916.000 30.000 30.000\n176 362.000 707.000 30.000 30.000\n177 693.000 467.000 30.000 30.000\n178 1197.000 1009.000 30.000 30.000\n179 499.000 118.000 30.000 30.000\n180 347.000 667.000 30.000 30.000\n181 1063.000 124.000 30.000 30.000\n182 847.000 188.000 30.000 30.000\n183 960.000 877.000 30.000 30.000\n184 112.000 268.000 30.000 30.000\n185 739.000 639.000 30.000 30.000\n186 591.000 861.000 30.000 30.000\n187 11.000 613.000 30.000 30.000\n188 483.000 1247.000 30.000 30.000\n189 694.000 1062.000 30.000 30.000\n190 500.000 701.000 30.000 30.000\n191 787.000 1234.000 30.000 30.000\n192 1159.000 67.000 30.000 30.000\n193 1143.000 466.000 30.000 30.000\n194 109.000 879.000 30.000 30.000\n195 680.000 382.000 30.000 30.000\n196 705.000 936.000 30.000 30.000\n197 961.000 847.000 30.000 30.000\n198 1025.000 1043.000 30.000 30.000\n199 1200.000 1207.000 30.000 30.000\n#\n55 31\n110 79\n152 61\n49 5\n195 184\n166 115\n189 173\n98 17\n89 79\n128 119\n128 82\n172 86\n97 71\n114 4\n194 109\n67 3\n126 79\n140 177\n76 40\n66 176\n179 114\n142 85\n40 64\n182 86\n39 22\n125 71\n85 79\n119 133\n168 68\n96 4\n43 17\n69 12\n142 154\n83 22\n10 8\n33 107\n110 125\n136 111\n70 66\n14 149\n109 51\n176 68\n112 65\n122 99\n149 28\n77 34\n162 120\n157 45\n177 84\n130 104\n147 91\n79 162\n50 24\n86 177\n144 81\n102 47\n196 35\n183 3\n94 29\n119 177\n129 119\n79 57\n99 68\n40 174\n32 13\n156 69\n198 119\n178 97\n46 4\n12 7\n115 39\n22 15\n166 98\n131 82\n56 101\n51 23\n21 13\n127 147\n104 40\n123 106\n24 18\n66 3\n29 22\n186 140\n143 21\n7 3\n17 15\n107 27\n190 43\n5 2\n167 96\n26 152\n185 195\n64 13\n170 61\n28 18\n124 42\n184 147\n54 28\n86 92\n25 23\n133 115\n62 39\n90 71\n61 42\n188 11\n127 92\n152 33\n18 1\n76 27\n119 9\n3 1\n171 76\n27 7\n186 121\n135 60\n110 18\n192 166\n151 163\n82 25\n23 13\n137 191\n196 23\n179 117\n74 13\n146 113\n15 2\n107 86\n43 108\n47 6\n121 18\n33 20\n26 160\n161 118\n151 80\n78 3\n94 67\n132 52\n83 47\n134 52\n2 1\n181 104\n58 91\n193 43\n187 168\n175 169\n100 45\n95 48\n184 103\n114 51\n90 118\n73 19\n91 43\n165 86\n31 10\n48 17\n185 60\n4 3\n57 38\n173 85\n80 73\n102 81\n106 77\n118 42\n137 124\n153 109\n18 50\n9 43\n148 145\n111 97\n13 6\n53 50\n68 38\n160 102\n63 124\n164 21\n92 72\n156 184\n148 77\n16 11\n60 37\n81 58\n196 186\n141 71\n108 29\n159 97\n26 116\n29 41\n155 148\n36 29\n75 35\n58 23\n91 82\n41 99\n168 71\n62 155\n180 24\n52 30\n95 145\n116 81\n81 20\n163 139\n41 22\n146 116\n199 89\n178 26\n87 76\n168 20\n103 68\n32 28\n86 73\n154 65\n161 101\n142 194\n16 174\n25 109\n174 89\n127 110\n0 142\n166 18\n118 82\n63 1\n138 132\n9 1\n105 34\n34 16\n1 0\n61 11\n120 98\n66 101\n30 8\n8 2\n149 138\n37 8\n157 198\n76 146\n44 71\n145 89\n19 12\n191 134\n71 56\n150 37\n72 29\n45 34\n125 50\n169 73\n140 24\n51 129\n105 102\n6 2\n92 17\n68 27\n192 185\n179 101\n15 125\n164 100\n98 54\n139 135\n138 157\n35 33\n193 115\n150 8\n128 167\n158 4\n59 11\n141 9\n170 21\n53 169\n84 39\n42 19\n56 50\n14 0\n65 60\n43 48\n169 146\n38 21\n6 31\n26 16\n197 94\n122 88\n99 181\n20 3\n26 92\n11 2\n134 115\n38 147\n44 113\n113 69\n88 19\n117 80\n155 65\n79 11\n44 30\n101 17\n40 39\n193 9\n66 64\n93 36\n154 141\n171 1\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v20e20.gml",
    "content": "graph\n[\n    node\n    [\n        id    0\n        label    \"\"\n        graphics\n        [\n            x    376.84\n            y    244.26\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    1\n        label    \"\"\n        graphics\n        [\n            x    218.15\n            y    131.33\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    2\n        label    \"\"\n        graphics\n        [\n            x    142.13\n            y    317.29\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    3\n        label    \"\"\n        graphics\n        [\n            x    237.63\n            y    352.53\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    4\n        label    \"\"\n        graphics\n        [\n            x    92.20\n            y    400.35\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    5\n        label    \"\"\n        graphics\n        [\n            x    197.52\n            y    166.74\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    6\n        label    \"\"\n        graphics\n        [\n            x    368.70\n            y    19.98\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    7\n        label    \"\"\n        graphics\n        [\n            x    104.70\n            y    1.65\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    8\n        label    \"\"\n        graphics\n        [\n            x    210.53\n            y    306.88\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    9\n        label    \"\"\n        graphics\n        [\n            x    318.90\n            y    212.35\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    10\n        label    \"\"\n        graphics\n        [\n            x    183.79\n            y    127.15\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    11\n        label    \"\"\n        graphics\n        [\n            x    215.06\n            y    356.75\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    12\n        label    \"\"\n        graphics\n        [\n            x    211.92\n            y    309.10\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    13\n        label    \"\"\n        graphics\n        [\n            x    32.15\n            y    108.82\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    14\n        label    \"\"\n        graphics\n        [\n            x    267.04\n            y    298.38\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    15\n        label    \"\"\n        graphics\n        [\n            x    355.28\n            y    374.60\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    16\n        label    \"\"\n        graphics\n        [\n            x    399.68\n            y    217.64\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    17\n        label    \"\"\n        graphics\n        [\n            x    144.40\n            y    326.44\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    18\n        label    \"\"\n        graphics\n        [\n            x    394.28\n            y    15.50\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    19\n        label    \"\"\n        graphics\n        [\n            x    368.38\n            y    42.70\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    edge\n    [\n        source    1\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    10\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    11\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    12\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    13\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    14\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    15\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    16\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    17\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    18\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    19\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    2\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    3\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    4\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    5\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    6\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    7\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    8\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    8\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    9\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n]\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v20e20.tglf",
    "content": "0 376.000 244.000 30.000 30.000\n1 218.000 131.000 30.000 30.000\n2 142.000 317.000 30.000 30.000\n3 237.000 352.000 30.000 30.000\n4 92.000 400.000 30.000 30.000\n5 197.000 166.000 30.000 30.000\n6 368.000 19.000 30.000 30.000\n7 104.000 1.000 30.000 30.000\n8 210.000 306.000 30.000 30.000\n9 318.000 212.000 30.000 30.000\n10 183.000 127.000 30.000 30.000\n11 215.000 356.000 30.000 30.000\n12 211.000 309.000 30.000 30.000\n13 32.000 108.000 30.000 30.000\n14 267.000 298.000 30.000 30.000\n15 355.000 374.000 30.000 30.000\n16 399.000 217.000 30.000 30.000\n17 144.000 326.000 30.000 30.000\n18 394.000 15.000 30.000 30.000\n19 368.000 42.000 30.000 30.000\n#\n13 2\n14 10\n2 1\n10 1\n7 2\n18 2\n4 2\n15 7\n9 3\n16 8\n1 0\n12 7\n8 18\n11 2\n5 4\n19 3\n8 5\n6 0\n3 0\n17 15\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v20e22.gml",
    "content": "graph\n[\n    node\n    [\n        id    0\n        label    \"\"\n        graphics\n        [\n            x    338.02\n            y    26.87\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    1\n        label    \"\"\n        graphics\n        [\n            x    148.69\n            y    282.23\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    2\n        label    \"\"\n        graphics\n        [\n            x    113.90\n            y    362.75\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    3\n        label    \"\"\n        graphics\n        [\n            x    0.71\n            y    108.65\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    4\n        label    \"\"\n        graphics\n        [\n            x    341.11\n            y    376.74\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    5\n        label    \"\"\n        graphics\n        [\n            x    282.11\n            y    32.61\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    6\n        label    \"\"\n        graphics\n        [\n            x    74.95\n            y    294.69\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    7\n        label    \"\"\n        graphics\n        [\n            x    92.31\n            y    154.80\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    8\n        label    \"\"\n        graphics\n        [\n            x    307.41\n            y    256.67\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    9\n        label    \"\"\n        graphics\n        [\n            x    324.14\n            y    173.10\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    10\n        label    \"\"\n        graphics\n        [\n            x    373.67\n            y    314.36\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    11\n        label    \"\"\n        graphics\n        [\n            x    224.90\n            y    23.06\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    12\n        label    \"\"\n        graphics\n        [\n            x    398.92\n            y    50.39\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    13\n        label    \"\"\n        graphics\n        [\n            x    78.61\n            y    105.66\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    14\n        label    \"\"\n        graphics\n        [\n            x    64.02\n            y    1.92\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    15\n        label    \"\"\n        graphics\n        [\n            x    41.09\n            y    12.54\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    16\n        label    \"\"\n        graphics\n        [\n            x    238.67\n            y    283.21\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    17\n        label    \"\"\n        graphics\n        [\n            x    40.36\n            y    4.66\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    18\n        label    \"\"\n        graphics\n        [\n            x    315.21\n            y    86.22\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    19\n        label    \"\"\n        graphics\n        [\n            x    228.67\n            y    395.35\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    edge\n    [\n        source    1\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    10\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    10\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    11\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    12\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    13\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    14\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    15\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    15\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    16\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    17\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    18\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    19\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    2\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    2\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    3\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    4\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    5\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    6\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    7\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    8\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    9\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n]\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v20e22.tglf",
    "content": "0 338.000 26.000 30.000 30.000\n1 148.000 282.000 30.000 30.000\n2 113.000 362.000 30.000 30.000\n3 0.000 108.000 30.000 30.000\n4 341.000 376.000 30.000 30.000\n5 282.000 32.000 30.000 30.000\n6 74.000 294.000 30.000 30.000\n7 92.000 154.000 30.000 30.000\n8 307.000 256.000 30.000 30.000\n9 324.000 173.000 30.000 30.000\n10 373.000 314.000 30.000 30.000\n11 224.000 23.000 30.000 30.000\n12 398.000 50.000 30.000 30.000\n13 78.000 105.000 30.000 30.000\n14 64.000 1.000 30.000 30.000\n15 41.000 12.000 30.000 30.000\n16 238.000 283.000 30.000 30.000\n17 40.000 4.000 30.000 30.000\n18 315.000 86.000 30.000 30.000\n19 228.000 395.000 30.000 30.000\n#\n14 4\n5 3\n10 16\n15 1\n16 5\n1 0\n3 1\n19 2\n15 17\n2 0\n11 9\n4 3\n9 2\n17 13\n12 8\n10 1\n18 12\n8 1\n13 12\n6 4\n2 12\n7 2\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v20e24.gml",
    "content": "graph\n[\n    node\n    [\n        id    0\n        label    \"\"\n        graphics\n        [\n            x    54.20\n            y    86.02\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    1\n        label    \"\"\n        graphics\n        [\n            x    205.12\n            y    147.29\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    2\n        label    \"\"\n        graphics\n        [\n            x    64.42\n            y    230.11\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    3\n        label    \"\"\n        graphics\n        [\n            x    53.56\n            y    314.95\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    4\n        label    \"\"\n        graphics\n        [\n            x    189.92\n            y    350.03\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    5\n        label    \"\"\n        graphics\n        [\n            x    320.14\n            y    67.80\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    6\n        label    \"\"\n        graphics\n        [\n            x    289.54\n            y    211.02\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    7\n        label    \"\"\n        graphics\n        [\n            x    75.83\n            y    64.55\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    8\n        label    \"\"\n        graphics\n        [\n            x    235.32\n            y    185.98\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    9\n        label    \"\"\n        graphics\n        [\n            x    222.32\n            y    223.85\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    10\n        label    \"\"\n        graphics\n        [\n            x    147.95\n            y    346.40\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    11\n        label    \"\"\n        graphics\n        [\n            x    360.26\n            y    52.37\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    12\n        label    \"\"\n        graphics\n        [\n            x    250.41\n            y    48.54\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    13\n        label    \"\"\n        graphics\n        [\n            x    134.65\n            y    342.35\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    14\n        label    \"\"\n        graphics\n        [\n            x    13.52\n            y    222.19\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    15\n        label    \"\"\n        graphics\n        [\n            x    270.98\n            y    283.33\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    16\n        label    \"\"\n        graphics\n        [\n            x    27.88\n            y    78.78\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    17\n        label    \"\"\n        graphics\n        [\n            x    3.23\n            y    395.50\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    18\n        label    \"\"\n        graphics\n        [\n            x    19.31\n            y    29.04\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    19\n        label    \"\"\n        graphics\n        [\n            x    99.36\n            y    391.25\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    edge\n    [\n        source    1\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    1\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    10\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    11\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    11\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    12\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    13\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    13\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    14\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    15\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    15\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    16\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    17\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    18\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    19\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    2\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    2\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    3\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    4\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    5\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    6\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    7\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    8\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    9\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n]\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v20e24.tglf",
    "content": "0 54.000 86.000 30.000 30.000\n1 205.000 147.000 30.000 30.000\n2 64.000 230.000 30.000 30.000\n3 53.000 314.000 30.000 30.000\n4 189.000 350.000 30.000 30.000\n5 320.000 67.000 30.000 30.000\n6 289.000 211.000 30.000 30.000\n7 75.000 64.000 30.000 30.000\n8 235.000 185.000 30.000 30.000\n9 222.000 223.000 30.000 30.000\n10 147.000 346.000 30.000 30.000\n11 360.000 52.000 30.000 30.000\n12 250.000 48.000 30.000 30.000\n13 134.000 342.000 30.000 30.000\n14 13.000 222.000 30.000 30.000\n15 270.000 283.000 30.000 30.000\n16 27.000 78.000 30.000 30.000\n17 3.000 395.000 30.000 30.000\n18 19.000 29.000 30.000 30.000\n19 99.000 391.000 30.000 30.000\n#\n15 6\n19 11\n3 1\n12 1\n11 6\n2 17\n7 3\n5 3\n17 14\n2 1\n13 10\n16 9\n8 7\n9 5\n18 11\n15 0\n4 0\n10 9\n11 4\n1 8\n14 11\n6 1\n1 0\n13 15\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v20e26.gml",
    "content": "graph\n[\n    node\n    [\n        id    0\n        label    \"\"\n        graphics\n        [\n            x    89.44\n            y    162.66\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    1\n        label    \"\"\n        graphics\n        [\n            x    248.94\n            y    173.48\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    2\n        label    \"\"\n        graphics\n        [\n            x    274.01\n            y    127.72\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    3\n        label    \"\"\n        graphics\n        [\n            x    62.08\n            y    299.43\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    4\n        label    \"\"\n        graphics\n        [\n            x    243.60\n            y    156.65\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    5\n        label    \"\"\n        graphics\n        [\n            x    10.77\n            y    123.99\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    6\n        label    \"\"\n        graphics\n        [\n            x    374.91\n            y    158.50\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    7\n        label    \"\"\n        graphics\n        [\n            x    159.01\n            y    83.02\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    8\n        label    \"\"\n        graphics\n        [\n            x    347.61\n            y    203.31\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    9\n        label    \"\"\n        graphics\n        [\n            x    359.40\n            y    133.52\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    10\n        label    \"\"\n        graphics\n        [\n            x    9.42\n            y    214.64\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    11\n        label    \"\"\n        graphics\n        [\n            x    192.54\n            y    86.45\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    12\n        label    \"\"\n        graphics\n        [\n            x    299.28\n            y    370.30\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    13\n        label    \"\"\n        graphics\n        [\n            x    168.43\n            y    285.06\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    14\n        label    \"\"\n        graphics\n        [\n            x    290.54\n            y    119.56\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    15\n        label    \"\"\n        graphics\n        [\n            x    73.74\n            y    393.01\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    16\n        label    \"\"\n        graphics\n        [\n            x    209.39\n            y    166.80\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    17\n        label    \"\"\n        graphics\n        [\n            x    78.45\n            y    343.33\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    18\n        label    \"\"\n        graphics\n        [\n            x    224.43\n            y    122.79\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    19\n        label    \"\"\n        graphics\n        [\n            x    294.17\n            y    357.44\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    edge\n    [\n        source    1\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    10\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    11\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    12\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    13\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    13\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    14\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    15\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    15\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    16\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    17\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    17\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    18\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    19\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    19\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    2\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    3\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    4\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    5\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    6\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    7\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    7\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    8\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    8\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    8\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    9\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n]\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v20e26.tglf",
    "content": "0 89.000 162.000 30.000 30.000\n1 248.000 173.000 30.000 30.000\n2 274.000 127.000 30.000 30.000\n3 62.000 299.000 30.000 30.000\n4 243.000 156.000 30.000 30.000\n5 10.000 123.000 30.000 30.000\n6 374.000 158.000 30.000 30.000\n7 159.000 83.000 30.000 30.000\n8 347.000 203.000 30.000 30.000\n9 359.000 133.000 30.000 30.000\n10 9.000 214.000 30.000 30.000\n11 192.000 86.000 30.000 30.000\n12 299.000 370.000 30.000 30.000\n13 168.000 285.000 30.000 30.000\n14 290.000 119.000 30.000 30.000\n15 73.000 393.000 30.000 30.000\n16 209.000 166.000 30.000 30.000\n17 78.000 343.000 30.000 30.000\n18 224.000 122.000 30.000 30.000\n19 294.000 357.000 30.000 30.000\n#\n4 3\n7 1\n17 14\n9 1\n15 17\n10 3\n5 4\n12 9\n17 2\n13 17\n7 4\n3 0\n16 9\n14 11\n2 1\n11 6\n8 5\n8 2\n1 0\n15 11\n13 11\n18 2\n19 14\n8 13\n6 2\n19 4\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v20e28.gml",
    "content": "graph\n[\n    node\n    [\n        id    0\n        label    \"\"\n        graphics\n        [\n            x    163.72\n            y    129.43\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    1\n        label    \"\"\n        graphics\n        [\n            x    102.23\n            y    396.40\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    2\n        label    \"\"\n        graphics\n        [\n            x    309.82\n            y    101.01\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    3\n        label    \"\"\n        graphics\n        [\n            x    134.46\n            y    309.13\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    4\n        label    \"\"\n        graphics\n        [\n            x    56.26\n            y    78.93\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    5\n        label    \"\"\n        graphics\n        [\n            x    19.40\n            y    204.30\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    6\n        label    \"\"\n        graphics\n        [\n            x    111.00\n            y    353.54\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    7\n        label    \"\"\n        graphics\n        [\n            x    282.28\n            y    258.56\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    8\n        label    \"\"\n        graphics\n        [\n            x    140.96\n            y    222.67\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    9\n        label    \"\"\n        graphics\n        [\n            x    366.17\n            y    193.95\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    10\n        label    \"\"\n        graphics\n        [\n            x    219.92\n            y    387.46\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    11\n        label    \"\"\n        graphics\n        [\n            x    122.13\n            y    391.86\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    12\n        label    \"\"\n        graphics\n        [\n            x    242.80\n            y    120.27\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    13\n        label    \"\"\n        graphics\n        [\n            x    401.10\n            y    50.04\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    14\n        label    \"\"\n        graphics\n        [\n            x    285.42\n            y    236.13\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    15\n        label    \"\"\n        graphics\n        [\n            x    397.05\n            y    379.66\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    16\n        label    \"\"\n        graphics\n        [\n            x    221.36\n            y    106.98\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    17\n        label    \"\"\n        graphics\n        [\n            x    34.30\n            y    22.86\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    18\n        label    \"\"\n        graphics\n        [\n            x    186.46\n            y    263.55\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    19\n        label    \"\"\n        graphics\n        [\n            x    330.24\n            y    210.21\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    edge\n    [\n        source    0\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    1\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    1\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    10\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    11\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    11\n        target    19\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    11\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    12\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    13\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    13\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    14\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    15\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    16\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    17\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    17\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    18\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    18\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    19\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    2\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    3\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    4\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    5\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    5\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    6\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    7\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    7\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    8\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    9\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n]\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v20e28.tglf",
    "content": "0 163.000 129.000 30.000 30.000\n1 102.000 396.000 30.000 30.000\n2 309.000 101.000 30.000 30.000\n3 134.000 309.000 30.000 30.000\n4 56.000 78.000 30.000 30.000\n5 19.000 204.000 30.000 30.000\n6 111.000 353.000 30.000 30.000\n7 282.000 258.000 30.000 30.000\n8 140.000 222.000 30.000 30.000\n9 366.000 193.000 30.000 30.000\n10 219.000 387.000 30.000 30.000\n11 122.000 391.000 30.000 30.000\n12 242.000 120.000 30.000 30.000\n13 401.000 50.000 30.000 30.000\n14 285.000 236.000 30.000 30.000\n15 397.000 379.000 30.000 30.000\n16 221.000 106.000 30.000 30.000\n17 34.000 22.000 30.000 30.000\n18 186.000 263.000 30.000 30.000\n19 330.000 210.000 30.000 30.000\n#\n18 12\n11 7\n12 10\n10 8\n6 2\n19 5\n17 4\n13 11\n15 12\n1 0\n7 15\n1 11\n3 0\n2 1\n14 10\n8 1\n9 2\n5 17\n18 13\n17 11\n5 3\n11 19\n7 3\n4 2\n11 12\n16 2\n0 5\n13 8\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v20e30.gml",
    "content": "graph\n[\n    node\n    [\n        id    0\n        label    \"\"\n        graphics\n        [\n            x    33.17\n            y    337.70\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    1\n        label    \"\"\n        graphics\n        [\n            x    23.47\n            y    93.18\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    2\n        label    \"\"\n        graphics\n        [\n            x    310.49\n            y    71.09\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    3\n        label    \"\"\n        graphics\n        [\n            x    76.50\n            y    296.38\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    4\n        label    \"\"\n        graphics\n        [\n            x    142.25\n            y    91.27\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    5\n        label    \"\"\n        graphics\n        [\n            x    85.17\n            y    127.67\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    6\n        label    \"\"\n        graphics\n        [\n            x    256.05\n            y    103.21\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    7\n        label    \"\"\n        graphics\n        [\n            x    390.30\n            y    353.45\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    8\n        label    \"\"\n        graphics\n        [\n            x    265.66\n            y    37.56\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    9\n        label    \"\"\n        graphics\n        [\n            x    351.24\n            y    259.14\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    10\n        label    \"\"\n        graphics\n        [\n            x    103.95\n            y    157.33\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    11\n        label    \"\"\n        graphics\n        [\n            x    336.23\n            y    39.48\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    12\n        label    \"\"\n        graphics\n        [\n            x    135.14\n            y    294.54\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    13\n        label    \"\"\n        graphics\n        [\n            x    189.62\n            y    222.36\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    14\n        label    \"\"\n        graphics\n        [\n            x    311.29\n            y    153.30\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    15\n        label    \"\"\n        graphics\n        [\n            x    208.18\n            y    105.53\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    16\n        label    \"\"\n        graphics\n        [\n            x    250.01\n            y    228.68\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    17\n        label    \"\"\n        graphics\n        [\n            x    88.11\n            y    105.03\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    18\n        label    \"\"\n        graphics\n        [\n            x    179.38\n            y    45.59\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    19\n        label    \"\"\n        graphics\n        [\n            x    216.35\n            y    199.47\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    edge\n    [\n        source    1\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    10\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    11\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    12\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    12\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    13\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    14\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    14\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    14\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    15\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    16\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    17\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    17\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    18\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    19\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    19\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    19\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    2\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    2\n        target    19\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    3\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    3\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    4\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    4\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    4\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    5\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    5\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    6\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    7\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    8\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    9\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n]\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v20e30.tglf",
    "content": "0 33.000 337.000 30.000 30.000\n1 23.000 93.000 30.000 30.000\n2 310.000 71.000 30.000 30.000\n3 76.000 296.000 30.000 30.000\n4 142.000 91.000 30.000 30.000\n5 85.000 127.000 30.000 30.000\n6 256.000 103.000 30.000 30.000\n7 390.000 353.000 30.000 30.000\n8 265.000 37.000 30.000 30.000\n9 351.000 259.000 30.000 30.000\n10 103.000 157.000 30.000 30.000\n11 336.000 39.000 30.000 30.000\n12 135.000 294.000 30.000 30.000\n13 189.000 222.000 30.000 30.000\n14 311.000 153.000 30.000 30.000\n15 208.000 105.000 30.000 30.000\n16 250.000 228.000 30.000 30.000\n17 88.000 105.000 30.000 30.000\n18 179.000 45.000 30.000 30.000\n19 216.000 199.000 30.000 30.000\n#\n13 0\n19 3\n14 9\n4 0\n7 1\n2 19\n5 3\n10 1\n17 13\n4 10\n12 8\n8 5\n12 10\n16 13\n5 4\n19 8\n18 11\n14 18\n11 4\n15 2\n17 1\n3 2\n19 14\n1 0\n3 8\n9 7\n2 0\n14 1\n6 5\n4 16\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v30e30.gml",
    "content": "graph\n[\n    node\n    [\n        id    0\n        label    \"\"\n        graphics\n        [\n            x    37.42\n            y    133.22\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    1\n        label    \"\"\n        graphics\n        [\n            x    251.17\n            y    313.18\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    2\n        label    \"\"\n        graphics\n        [\n            x    378.39\n            y    319.97\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    3\n        label    \"\"\n        graphics\n        [\n            x    222.38\n            y    487.72\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    4\n        label    \"\"\n        graphics\n        [\n            x    81.18\n            y    60.57\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    5\n        label    \"\"\n        graphics\n        [\n            x    486.92\n            y    231.80\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    6\n        label    \"\"\n        graphics\n        [\n            x    393.73\n            y    482.47\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    7\n        label    \"\"\n        graphics\n        [\n            x    407.54\n            y    250.76\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    8\n        label    \"\"\n        graphics\n        [\n            x    462.34\n            y    468.52\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    9\n        label    \"\"\n        graphics\n        [\n            x    456.97\n            y    431.20\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    10\n        label    \"\"\n        graphics\n        [\n            x    212.48\n            y    310.44\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    11\n        label    \"\"\n        graphics\n        [\n            x    114.97\n            y    422.68\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    12\n        label    \"\"\n        graphics\n        [\n            x    125.79\n            y    404.21\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    13\n        label    \"\"\n        graphics\n        [\n            x    337.71\n            y    246.72\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    14\n        label    \"\"\n        graphics\n        [\n            x    132.54\n            y    66.11\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    15\n        label    \"\"\n        graphics\n        [\n            x    40.97\n            y    433.90\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    16\n        label    \"\"\n        graphics\n        [\n            x    163.87\n            y    150.20\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    17\n        label    \"\"\n        graphics\n        [\n            x    282.33\n            y    9.61\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    18\n        label    \"\"\n        graphics\n        [\n            x    92.51\n            y    32.41\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    19\n        label    \"\"\n        graphics\n        [\n            x    262.53\n            y    90.45\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    20\n        label    \"\"\n        graphics\n        [\n            x    407.21\n            y    392.33\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    21\n        label    \"\"\n        graphics\n        [\n            x    448.89\n            y    381.43\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    22\n        label    \"\"\n        graphics\n        [\n            x    354.89\n            y    49.08\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    23\n        label    \"\"\n        graphics\n        [\n            x    240.50\n            y    22.06\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    24\n        label    \"\"\n        graphics\n        [\n            x    187.38\n            y    76.07\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    25\n        label    \"\"\n        graphics\n        [\n            x    147.38\n            y    338.88\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    26\n        label    \"\"\n        graphics\n        [\n            x    445.30\n            y    293.72\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    27\n        label    \"\"\n        graphics\n        [\n            x    240.16\n            y    90.15\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    28\n        label    \"\"\n        graphics\n        [\n            x    401.33\n            y    25.11\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    29\n        label    \"\"\n        graphics\n        [\n            x    200.54\n            y    258.75\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    edge\n    [\n        source    1\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    10\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    11\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    12\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    12\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    13\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    14\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    15\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    16\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    17\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    18\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    19\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    2\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    20\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    21\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    22\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    23\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    24\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    25\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    26\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    27\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    28\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    29\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    3\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    4\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    5\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    6\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    7\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    8\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    9\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n]\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v30e30.tglf",
    "content": "0 37.000 133.000 30.000 30.000\n1 251.000 313.000 30.000 30.000\n2 378.000 319.000 30.000 30.000\n3 222.000 487.000 30.000 30.000\n4 81.000 60.000 30.000 30.000\n5 486.000 231.000 30.000 30.000\n6 393.000 482.000 30.000 30.000\n7 407.000 250.000 30.000 30.000\n8 462.000 468.000 30.000 30.000\n9 456.000 431.000 30.000 30.000\n10 212.000 310.000 30.000 30.000\n11 114.000 422.000 30.000 30.000\n12 125.000 404.000 30.000 30.000\n13 337.000 246.000 30.000 30.000\n14 132.000 66.000 30.000 30.000\n15 40.000 433.000 30.000 30.000\n16 163.000 150.000 30.000 30.000\n17 282.000 9.000 30.000 30.000\n18 92.000 32.000 30.000 30.000\n19 262.000 90.000 30.000 30.000\n20 407.000 392.000 30.000 30.000\n21 448.000 381.000 30.000 30.000\n22 354.000 49.000 30.000 30.000\n23 240.000 22.000 30.000 30.000\n24 187.000 76.000 30.000 30.000\n25 147.000 338.000 30.000 30.000\n26 445.000 293.000 30.000 30.000\n27 240.000 90.000 30.000 30.000\n28 401.000 25.000 30.000 30.000\n29 200.000 258.000 30.000 30.000\n#\n6 2\n16 9\n7 4\n20 12\n4 2\n12 0\n12 8\n3 2\n11 1\n15 3\n25 23\n9 8\n19 4\n28 7\n26 8\n18 17\n21 10\n14 9\n17 15\n27 5\n8 3\n2 0\n23 4\n24 8\n13 5\n1 0\n22 11\n5 3\n29 18\n10 6\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v30e33.gml",
    "content": "graph\n[\n    node\n    [\n        id    0\n        label    \"\"\n        graphics\n        [\n            x    44.11\n            y    258.69\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    1\n        label    \"\"\n        graphics\n        [\n            x    64.61\n            y    18.17\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    2\n        label    \"\"\n        graphics\n        [\n            x    192.94\n            y    141.08\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    3\n        label    \"\"\n        graphics\n        [\n            x    177.26\n            y    470.88\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    4\n        label    \"\"\n        graphics\n        [\n            x    385.78\n            y    95.55\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    5\n        label    \"\"\n        graphics\n        [\n            x    73.38\n            y    140.42\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    6\n        label    \"\"\n        graphics\n        [\n            x    73.16\n            y    430.68\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    7\n        label    \"\"\n        graphics\n        [\n            x    263.37\n            y    234.54\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    8\n        label    \"\"\n        graphics\n        [\n            x    82.53\n            y    415.61\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    9\n        label    \"\"\n        graphics\n        [\n            x    425.53\n            y    428.42\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    10\n        label    \"\"\n        graphics\n        [\n            x    117.99\n            y    48.81\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    11\n        label    \"\"\n        graphics\n        [\n            x    203.59\n            y    120.63\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    12\n        label    \"\"\n        graphics\n        [\n            x    301.75\n            y    95.97\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    13\n        label    \"\"\n        graphics\n        [\n            x    107.87\n            y    124.56\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    14\n        label    \"\"\n        graphics\n        [\n            x    8.17\n            y    475.77\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    15\n        label    \"\"\n        graphics\n        [\n            x    434.97\n            y    190.20\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    16\n        label    \"\"\n        graphics\n        [\n            x    161.41\n            y    39.18\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    17\n        label    \"\"\n        graphics\n        [\n            x    335.17\n            y    342.97\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    18\n        label    \"\"\n        graphics\n        [\n            x    276.68\n            y    290.27\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    19\n        label    \"\"\n        graphics\n        [\n            x    181.43\n            y    406.45\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    20\n        label    \"\"\n        graphics\n        [\n            x    440.71\n            y    471.32\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    21\n        label    \"\"\n        graphics\n        [\n            x    267.43\n            y    71.63\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    22\n        label    \"\"\n        graphics\n        [\n            x    162.23\n            y    317.29\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    23\n        label    \"\"\n        graphics\n        [\n            x    331.00\n            y    112.01\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    24\n        label    \"\"\n        graphics\n        [\n            x    208.38\n            y    419.29\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    25\n        label    \"\"\n        graphics\n        [\n            x    85.79\n            y    228.26\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    26\n        label    \"\"\n        graphics\n        [\n            x    81.20\n            y    223.77\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    27\n        label    \"\"\n        graphics\n        [\n            x    187.75\n            y    400.54\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    28\n        label    \"\"\n        graphics\n        [\n            x    482.42\n            y    412.74\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    29\n        label    \"\"\n        graphics\n        [\n            x    370.72\n            y    48.37\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    edge\n    [\n        source    1\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    10\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    11\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    12\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    13\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    13\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    14\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    15\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    16\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    17\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    18\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    19\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    2\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    2\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    20\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    21\n        target    19\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    22\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    22\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    23\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    24\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    25\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    26\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    27\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    28\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    28\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    29\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    3\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    4\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    5\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    6\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    7\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    8\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    9\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n]\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v30e33.tglf",
    "content": "0 44.000 258.000 30.000 30.000\n1 64.000 18.000 30.000 30.000\n2 192.000 141.000 30.000 30.000\n3 177.000 470.000 30.000 30.000\n4 385.000 95.000 30.000 30.000\n5 73.000 140.000 30.000 30.000\n6 73.000 430.000 30.000 30.000\n7 263.000 234.000 30.000 30.000\n8 82.000 415.000 30.000 30.000\n9 425.000 428.000 30.000 30.000\n10 117.000 48.000 30.000 30.000\n11 203.000 120.000 30.000 30.000\n12 301.000 95.000 30.000 30.000\n13 107.000 124.000 30.000 30.000\n14 8.000 475.000 30.000 30.000\n15 434.000 190.000 30.000 30.000\n16 161.000 39.000 30.000 30.000\n17 335.000 342.000 30.000 30.000\n18 276.000 290.000 30.000 30.000\n19 181.000 406.000 30.000 30.000\n20 440.000 471.000 30.000 30.000\n21 267.000 71.000 30.000 30.000\n22 162.000 317.000 30.000 30.000\n23 331.000 112.000 30.000 30.000\n24 208.000 419.000 30.000 30.000\n25 85.000 228.000 30.000 30.000\n26 81.000 223.000 30.000 30.000\n27 187.000 400.000 30.000 30.000\n28 482.000 412.000 30.000 30.000\n29 370.000 48.000 30.000 30.000\n#\n1 0\n6 3\n29 18\n2 0\n16 9\n22 14\n3 0\n27 0\n28 13\n22 3\n4 1\n8 3\n11 5\n28 15\n2 21\n26 13\n24 7\n14 5\n13 1\n19 5\n7 1\n15 5\n12 1\n5 4\n18 13\n23 7\n20 13\n25 14\n9 8\n13 9\n17 14\n21 19\n10 1\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v30e36.gml",
    "content": "graph\n[\n    node\n    [\n        id    0\n        label    \"\"\n        graphics\n        [\n            x    153.97\n            y    114.76\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    1\n        label    \"\"\n        graphics\n        [\n            x    261.07\n            y    43.24\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    2\n        label    \"\"\n        graphics\n        [\n            x    54.39\n            y    472.47\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    3\n        label    \"\"\n        graphics\n        [\n            x    167.84\n            y    188.52\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    4\n        label    \"\"\n        graphics\n        [\n            x    176.47\n            y    385.76\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    5\n        label    \"\"\n        graphics\n        [\n            x    348.90\n            y    184.72\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    6\n        label    \"\"\n        graphics\n        [\n            x    379.98\n            y    253.82\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    7\n        label    \"\"\n        graphics\n        [\n            x    131.70\n            y    393.96\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    8\n        label    \"\"\n        graphics\n        [\n            x    419.09\n            y    167.57\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    9\n        label    \"\"\n        graphics\n        [\n            x    360.64\n            y    280.27\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    10\n        label    \"\"\n        graphics\n        [\n            x    80.67\n            y    181.03\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    11\n        label    \"\"\n        graphics\n        [\n            x    466.16\n            y    440.72\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    12\n        label    \"\"\n        graphics\n        [\n            x    393.47\n            y    218.94\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    13\n        label    \"\"\n        graphics\n        [\n            x    417.50\n            y    232.72\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    14\n        label    \"\"\n        graphics\n        [\n            x    173.61\n            y    491.08\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    15\n        label    \"\"\n        graphics\n        [\n            x    395.54\n            y    405.39\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    16\n        label    \"\"\n        graphics\n        [\n            x    129.73\n            y    68.24\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    17\n        label    \"\"\n        graphics\n        [\n            x    451.52\n            y    322.06\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    18\n        label    \"\"\n        graphics\n        [\n            x    130.61\n            y    94.11\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    19\n        label    \"\"\n        graphics\n        [\n            x    411.01\n            y    346.58\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    20\n        label    \"\"\n        graphics\n        [\n            x    66.93\n            y    307.13\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    21\n        label    \"\"\n        graphics\n        [\n            x    172.74\n            y    479.95\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    22\n        label    \"\"\n        graphics\n        [\n            x    239.59\n            y    31.54\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    23\n        label    \"\"\n        graphics\n        [\n            x    123.09\n            y    79.66\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    24\n        label    \"\"\n        graphics\n        [\n            x    451.57\n            y    112.07\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    25\n        label    \"\"\n        graphics\n        [\n            x    375.21\n            y    31.17\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    26\n        label    \"\"\n        graphics\n        [\n            x    138.24\n            y    217.85\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    27\n        label    \"\"\n        graphics\n        [\n            x    314.58\n            y    120.89\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    28\n        label    \"\"\n        graphics\n        [\n            x    10.14\n            y    165.05\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    29\n        label    \"\"\n        graphics\n        [\n            x    353.77\n            y    406.38\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    edge\n    [\n        source    1\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    10\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    11\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    12\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    13\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    14\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    15\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    15\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    16\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    16\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    17\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    17\n        target    28\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    18\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    19\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    2\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    20\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    21\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    22\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    23\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    24\n        target    20\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    24\n        target    28\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    25\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    26\n        target    19\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    26\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    27\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    27\n        target    26\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    28\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    29\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    3\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    4\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    4\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    5\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    6\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    7\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    8\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    9\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n]\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v30e36.tglf",
    "content": "0 153.000 114.000 30.000 30.000\n1 261.000 43.000 30.000 30.000\n2 54.000 472.000 30.000 30.000\n3 167.000 188.000 30.000 30.000\n4 176.000 385.000 30.000 30.000\n5 348.000 184.000 30.000 30.000\n6 379.000 253.000 30.000 30.000\n7 131.000 393.000 30.000 30.000\n8 419.000 167.000 30.000 30.000\n9 360.000 280.000 30.000 30.000\n10 80.000 181.000 30.000 30.000\n11 466.000 440.000 30.000 30.000\n12 393.000 218.000 30.000 30.000\n13 417.000 232.000 30.000 30.000\n14 173.000 491.000 30.000 30.000\n15 395.000 405.000 30.000 30.000\n16 129.000 68.000 30.000 30.000\n17 451.000 322.000 30.000 30.000\n18 130.000 94.000 30.000 30.000\n19 411.000 346.000 30.000 30.000\n20 66.000 307.000 30.000 30.000\n21 172.000 479.000 30.000 30.000\n22 239.000 31.000 30.000 30.000\n23 123.000 79.000 30.000 30.000\n24 451.000 112.000 30.000 30.000\n25 375.000 31.000 30.000 30.000\n26 138.000 217.000 30.000 30.000\n27 314.000 120.000 30.000 30.000\n28 10.000 165.000 30.000 30.000\n29 353.000 406.000 30.000 30.000\n#\n11 5\n6 0\n15 3\n20 1\n10 1\n26 19\n19 2\n4 2\n4 3\n21 2\n27 16\n3 2\n23 9\n16 9\n17 28\n26 5\n24 28\n25 12\n2 0\n8 3\n28 4\n14 1\n17 1\n9 4\n7 3\n22 4\n12 5\n5 2\n15 5\n1 0\n29 17\n24 20\n27 26\n13 2\n16 18\n18 14\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v30e39.gml",
    "content": "graph\n[\n    node\n    [\n        id    0\n        label    \"\"\n        graphics\n        [\n            x    372.70\n            y    300.74\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    1\n        label    \"\"\n        graphics\n        [\n            x    397.06\n            y    242.02\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    2\n        label    \"\"\n        graphics\n        [\n            x    371.69\n            y    71.29\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    3\n        label    \"\"\n        graphics\n        [\n            x    487.50\n            y    161.62\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    4\n        label    \"\"\n        graphics\n        [\n            x    245.77\n            y    248.60\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    5\n        label    \"\"\n        graphics\n        [\n            x    155.72\n            y    267.04\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    6\n        label    \"\"\n        graphics\n        [\n            x    153.50\n            y    415.34\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    7\n        label    \"\"\n        graphics\n        [\n            x    64.04\n            y    433.86\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    8\n        label    \"\"\n        graphics\n        [\n            x    301.55\n            y    291.40\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    9\n        label    \"\"\n        graphics\n        [\n            x    125.97\n            y    472.11\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    10\n        label    \"\"\n        graphics\n        [\n            x    296.87\n            y    182.86\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    11\n        label    \"\"\n        graphics\n        [\n            x    283.69\n            y    261.82\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    12\n        label    \"\"\n        graphics\n        [\n            x    148.97\n            y    311.32\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    13\n        label    \"\"\n        graphics\n        [\n            x    294.41\n            y    397.70\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    14\n        label    \"\"\n        graphics\n        [\n            x    319.74\n            y    211.47\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    15\n        label    \"\"\n        graphics\n        [\n            x    488.08\n            y    96.93\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    16\n        label    \"\"\n        graphics\n        [\n            x    457.78\n            y    208.29\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    17\n        label    \"\"\n        graphics\n        [\n            x    246.38\n            y    230.52\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    18\n        label    \"\"\n        graphics\n        [\n            x    370.26\n            y    184.58\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    19\n        label    \"\"\n        graphics\n        [\n            x    94.78\n            y    40.48\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    20\n        label    \"\"\n        graphics\n        [\n            x    379.43\n            y    120.73\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    21\n        label    \"\"\n        graphics\n        [\n            x    46.19\n            y    27.60\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    22\n        label    \"\"\n        graphics\n        [\n            x    264.22\n            y    260.41\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    23\n        label    \"\"\n        graphics\n        [\n            x    153.73\n            y    475.84\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    24\n        label    \"\"\n        graphics\n        [\n            x    363.80\n            y    245.59\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    25\n        label    \"\"\n        graphics\n        [\n            x    171.39\n            y    374.78\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    26\n        label    \"\"\n        graphics\n        [\n            x    106.10\n            y    0.76\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    27\n        label    \"\"\n        graphics\n        [\n            x    202.56\n            y    261.95\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    28\n        label    \"\"\n        graphics\n        [\n            x    382.09\n            y    4.38\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    29\n        label    \"\"\n        graphics\n        [\n            x    26.04\n            y    409.78\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    edge\n    [\n        source    1\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    1\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    1\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    1\n        target    25\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    1\n        target    28\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    10\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    11\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    12\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    13\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    14\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    15\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    15\n        target    29\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    16\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    17\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    18\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    19\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    2\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    20\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    20\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    21\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    22\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    22\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    23\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    24\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    25\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    26\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    26\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    27\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    28\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    29\n        target    24\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    3\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    4\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    5\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    5\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    6\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    7\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    8\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    9\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    9\n        target    26\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n]\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v30e39.tglf",
    "content": "0 372.000 300.000 30.000 30.000\n1 397.000 242.000 30.000 30.000\n2 371.000 71.000 30.000 30.000\n3 487.000 161.000 30.000 30.000\n4 245.000 248.000 30.000 30.000\n5 155.000 267.000 30.000 30.000\n6 153.000 415.000 30.000 30.000\n7 64.000 433.000 30.000 30.000\n8 301.000 291.000 30.000 30.000\n9 125.000 472.000 30.000 30.000\n10 296.000 182.000 30.000 30.000\n11 283.000 261.000 30.000 30.000\n12 148.000 311.000 30.000 30.000\n13 294.000 397.000 30.000 30.000\n14 319.000 211.000 30.000 30.000\n15 488.000 96.000 30.000 30.000\n16 457.000 208.000 30.000 30.000\n17 246.000 230.000 30.000 30.000\n18 370.000 184.000 30.000 30.000\n19 94.000 40.000 30.000 30.000\n20 379.000 120.000 30.000 30.000\n21 46.000 27.000 30.000 30.000\n22 264.000 260.000 30.000 30.000\n23 153.000 475.000 30.000 30.000\n24 363.000 245.000 30.000 30.000\n25 171.000 374.000 30.000 30.000\n26 106.000 0.000 30.000 30.000\n27 202.000 261.000 30.000 30.000\n28 382.000 4.000 30.000 30.000\n29 26.000 409.000 30.000 30.000\n#\n22 11\n14 5\n16 6\n1 10\n7 6\n1 28\n17 15\n18 1\n10 7\n5 21\n22 0\n5 3\n26 10\n1 23\n25 11\n1 25\n24 11\n8 6\n19 4\n13 0\n26 2\n2 1\n11 0\n27 23\n23 4\n9 1\n20 11\n15 13\n9 26\n4 0\n15 29\n6 5\n29 24\n20 3\n1 0\n3 1\n12 10\n21 2\n28 9\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v30e42.gml",
    "content": "graph\n[\n    node\n    [\n        id    0\n        label    \"\"\n        graphics\n        [\n            x    408.41\n            y    454.76\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    1\n        label    \"\"\n        graphics\n        [\n            x    311.36\n            y    438.14\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    2\n        label    \"\"\n        graphics\n        [\n            x    310.02\n            y    300.68\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    3\n        label    \"\"\n        graphics\n        [\n            x    113.41\n            y    110.83\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    4\n        label    \"\"\n        graphics\n        [\n            x    10.11\n            y    39.73\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    5\n        label    \"\"\n        graphics\n        [\n            x    33.62\n            y    117.41\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    6\n        label    \"\"\n        graphics\n        [\n            x    163.02\n            y    471.47\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    7\n        label    \"\"\n        graphics\n        [\n            x    53.31\n            y    174.17\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    8\n        label    \"\"\n        graphics\n        [\n            x    134.15\n            y    298.08\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    9\n        label    \"\"\n        graphics\n        [\n            x    360.20\n            y    261.98\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    10\n        label    \"\"\n        graphics\n        [\n            x    205.64\n            y    484.81\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    11\n        label    \"\"\n        graphics\n        [\n            x    385.49\n            y    52.38\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    12\n        label    \"\"\n        graphics\n        [\n            x    349.22\n            y    334.88\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    13\n        label    \"\"\n        graphics\n        [\n            x    259.22\n            y    236.05\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    14\n        label    \"\"\n        graphics\n        [\n            x    66.43\n            y    54.31\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    15\n        label    \"\"\n        graphics\n        [\n            x    115.83\n            y    477.76\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    16\n        label    \"\"\n        graphics\n        [\n            x    25.78\n            y    234.54\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    17\n        label    \"\"\n        graphics\n        [\n            x    154.10\n            y    16.90\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    18\n        label    \"\"\n        graphics\n        [\n            x    465.38\n            y    344.04\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    19\n        label    \"\"\n        graphics\n        [\n            x    284.05\n            y    171.31\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    20\n        label    \"\"\n        graphics\n        [\n            x    242.57\n            y    204.62\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    21\n        label    \"\"\n        graphics\n        [\n            x    132.66\n            y    284.07\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    22\n        label    \"\"\n        graphics\n        [\n            x    249.85\n            y    76.34\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    23\n        label    \"\"\n        graphics\n        [\n            x    487.39\n            y    63.98\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    24\n        label    \"\"\n        graphics\n        [\n            x    180.29\n            y    40.74\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    25\n        label    \"\"\n        graphics\n        [\n            x    421.46\n            y    2.98\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    26\n        label    \"\"\n        graphics\n        [\n            x    48.98\n            y    188.10\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    27\n        label    \"\"\n        graphics\n        [\n            x    45.11\n            y    394.94\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    28\n        label    \"\"\n        graphics\n        [\n            x    387.20\n            y    233.23\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    29\n        label    \"\"\n        graphics\n        [\n            x    429.36\n            y    384.70\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    edge\n    [\n        source    0\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    1\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    10\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    10\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    11\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    12\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    13\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    14\n        target    29\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    14\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    15\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    16\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    16\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    17\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    17\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    17\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    17\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    17\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    18\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    18\n        target    26\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    19\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    2\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    20\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    21\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    21\n        target    19\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    21\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    21\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    22\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    23\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    24\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    25\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    26\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    27\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    28\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    29\n        target    20\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    29\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    3\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    4\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    5\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    6\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    7\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    8\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    9\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n]\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v30e42.tglf",
    "content": "0 408.000 454.000 30.000 30.000\n1 311.000 438.000 30.000 30.000\n2 310.000 300.000 30.000 30.000\n3 113.000 110.000 30.000 30.000\n4 10.000 39.000 30.000 30.000\n5 33.000 117.000 30.000 30.000\n6 163.000 471.000 30.000 30.000\n7 53.000 174.000 30.000 30.000\n8 134.000 298.000 30.000 30.000\n9 360.000 261.000 30.000 30.000\n10 205.000 484.000 30.000 30.000\n11 385.000 52.000 30.000 30.000\n12 349.000 334.000 30.000 30.000\n13 259.000 236.000 30.000 30.000\n14 66.000 54.000 30.000 30.000\n15 115.000 477.000 30.000 30.000\n16 25.000 234.000 30.000 30.000\n17 154.000 16.000 30.000 30.000\n18 465.000 344.000 30.000 30.000\n19 284.000 171.000 30.000 30.000\n20 242.000 204.000 30.000 30.000\n21 132.000 284.000 30.000 30.000\n22 249.000 76.000 30.000 30.000\n23 487.000 63.000 30.000 30.000\n24 180.000 40.000 30.000 30.000\n25 421.000 2.000 30.000 30.000\n26 48.000 188.000 30.000 30.000\n27 45.000 394.000 30.000 30.000\n28 387.000 233.000 30.000 30.000\n29 429.000 384.000 30.000 30.000\n#\n15 5\n21 19\n10 4\n21 9\n5 0\n13 2\n27 13\n23 9\n10 13\n2 0\n17 14\n18 26\n25 18\n6 2\n22 18\n1 0\n28 21\n17 21\n21 13\n7 6\n16 12\n16 14\n14 6\n12 6\n8 3\n11 9\n17 23\n20 4\n29 20\n18 0\n19 4\n21 4\n14 29\n17 9\n24 2\n0 23\n26 1\n29 9\n4 0\n3 1\n9 7\n17 15\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v30e45.gml",
    "content": "graph\n[\n    node\n    [\n        id    0\n        label    \"\"\n        graphics\n        [\n            x    86.13\n            y    441.93\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    1\n        label    \"\"\n        graphics\n        [\n            x    158.63\n            y    303.10\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    2\n        label    \"\"\n        graphics\n        [\n            x    0.69\n            y    316.55\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    3\n        label    \"\"\n        graphics\n        [\n            x    382.84\n            y    252.47\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    4\n        label    \"\"\n        graphics\n        [\n            x    286.34\n            y    197.06\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    5\n        label    \"\"\n        graphics\n        [\n            x    167.37\n            y    228.68\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    6\n        label    \"\"\n        graphics\n        [\n            x    214.79\n            y    48.44\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    7\n        label    \"\"\n        graphics\n        [\n            x    148.37\n            y    129.93\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    8\n        label    \"\"\n        graphics\n        [\n            x    460.32\n            y    260.14\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    9\n        label    \"\"\n        graphics\n        [\n            x    10.74\n            y    478.72\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    10\n        label    \"\"\n        graphics\n        [\n            x    270.62\n            y    170.95\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    11\n        label    \"\"\n        graphics\n        [\n            x    20.63\n            y    170.37\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    12\n        label    \"\"\n        graphics\n        [\n            x    291.00\n            y    222.53\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    13\n        label    \"\"\n        graphics\n        [\n            x    111.94\n            y    225.97\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    14\n        label    \"\"\n        graphics\n        [\n            x    114.00\n            y    134.37\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    15\n        label    \"\"\n        graphics\n        [\n            x    296.86\n            y    421.97\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    16\n        label    \"\"\n        graphics\n        [\n            x    491.52\n            y    269.53\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    17\n        label    \"\"\n        graphics\n        [\n            x    491.76\n            y    325.45\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    18\n        label    \"\"\n        graphics\n        [\n            x    11.25\n            y    117.09\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    19\n        label    \"\"\n        graphics\n        [\n            x    270.65\n            y    111.54\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    20\n        label    \"\"\n        graphics\n        [\n            x    140.79\n            y    145.31\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    21\n        label    \"\"\n        graphics\n        [\n            x    132.92\n            y    386.37\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    22\n        label    \"\"\n        graphics\n        [\n            x    310.92\n            y    54.93\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    23\n        label    \"\"\n        graphics\n        [\n            x    201.46\n            y    362.35\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    24\n        label    \"\"\n        graphics\n        [\n            x    470.36\n            y    307.37\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    25\n        label    \"\"\n        graphics\n        [\n            x    120.86\n            y    144.11\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    26\n        label    \"\"\n        graphics\n        [\n            x    7.18\n            y    172.63\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    27\n        label    \"\"\n        graphics\n        [\n            x    372.46\n            y    474.31\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    28\n        label    \"\"\n        graphics\n        [\n            x    26.42\n            y    212.15\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    29\n        label    \"\"\n        graphics\n        [\n            x    239.20\n            y    449.46\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    edge\n    [\n        source    1\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    10\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    11\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    12\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    12\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    13\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    14\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    15\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    16\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    16\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    17\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    17\n        target    28\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    17\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    17\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    18\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    18\n        target    26\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    19\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    2\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    2\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    20\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    21\n        target    24\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    21\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    22\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    22\n        target    26\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    23\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    24\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    25\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    25\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    26\n        target    25\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    27\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    28\n        target    24\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    28\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    29\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    29\n        target    25\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    29\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    3\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    4\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    5\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    6\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    6\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    6\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    7\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    7\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    8\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    9\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n]\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v30e45.tglf",
    "content": "0 86.000 441.000 30.000 30.000\n1 158.000 303.000 30.000 30.000\n2 0.000 316.000 30.000 30.000\n3 382.000 252.000 30.000 30.000\n4 286.000 197.000 30.000 30.000\n5 167.000 228.000 30.000 30.000\n6 214.000 48.000 30.000 30.000\n7 148.000 129.000 30.000 30.000\n8 460.000 260.000 30.000 30.000\n9 10.000 478.000 30.000 30.000\n10 270.000 170.000 30.000 30.000\n11 20.000 170.000 30.000 30.000\n12 291.000 222.000 30.000 30.000\n13 111.000 225.000 30.000 30.000\n14 114.000 134.000 30.000 30.000\n15 296.000 421.000 30.000 30.000\n16 491.000 269.000 30.000 30.000\n17 491.000 325.000 30.000 30.000\n18 11.000 117.000 30.000 30.000\n19 270.000 111.000 30.000 30.000\n20 140.000 145.000 30.000 30.000\n21 132.000 386.000 30.000 30.000\n22 310.000 54.000 30.000 30.000\n23 201.000 362.000 30.000 30.000\n24 470.000 307.000 30.000 30.000\n25 120.000 144.000 30.000 30.000\n26 7.000 172.000 30.000 30.000\n27 372.000 474.000 30.000 30.000\n28 26.000 212.000 30.000 30.000\n29 239.000 449.000 30.000 30.000\n#\n23 15\n9 4\n29 15\n8 4\n10 7\n4 2\n5 2\n12 5\n13 0\n1 0\n25 8\n16 2\n17 8\n25 14\n6 2\n14 9\n29 4\n24 3\n2 1\n7 16\n17 15\n21 3\n11 8\n18 26\n3 1\n29 25\n20 2\n16 3\n28 3\n28 24\n17 5\n27 18\n21 24\n15 12\n17 28\n22 26\n22 12\n26 25\n18 15\n12 23\n6 15\n2 0\n6 5\n19 10\n7 0\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v40e40.gml",
    "content": "graph\n[\n    node\n    [\n        id    0\n        label    \"\"\n        graphics\n        [\n            x    435.22\n            y    255.31\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    1\n        label    \"\"\n        graphics\n        [\n            x    170.42\n            y    201.49\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    2\n        label    \"\"\n        graphics\n        [\n            x    250.83\n            y    261.86\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    3\n        label    \"\"\n        graphics\n        [\n            x    401.85\n            y    419.58\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    4\n        label    \"\"\n        graphics\n        [\n            x    67.61\n            y    66.64\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    5\n        label    \"\"\n        graphics\n        [\n            x    457.43\n            y    202.38\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    6\n        label    \"\"\n        graphics\n        [\n            x    448.33\n            y    562.04\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    7\n        label    \"\"\n        graphics\n        [\n            x    431.95\n            y    480.79\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    8\n        label    \"\"\n        graphics\n        [\n            x    353.10\n            y    79.96\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    9\n        label    \"\"\n        graphics\n        [\n            x    249.47\n            y    209.47\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    10\n        label    \"\"\n        graphics\n        [\n            x    418.37\n            y    420.86\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    11\n        label    \"\"\n        graphics\n        [\n            x    398.27\n            y    258.81\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    12\n        label    \"\"\n        graphics\n        [\n            x    501.33\n            y    361.31\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    13\n        label    \"\"\n        graphics\n        [\n            x    350.03\n            y    331.10\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    14\n        label    \"\"\n        graphics\n        [\n            x    17.12\n            y    295.80\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    15\n        label    \"\"\n        graphics\n        [\n            x    398.12\n            y    135.23\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    16\n        label    \"\"\n        graphics\n        [\n            x    556.25\n            y    509.26\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    17\n        label    \"\"\n        graphics\n        [\n            x    278.26\n            y    401.08\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    18\n        label    \"\"\n        graphics\n        [\n            x    331.61\n            y    80.04\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    19\n        label    \"\"\n        graphics\n        [\n            x    473.68\n            y    368.90\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    20\n        label    \"\"\n        graphics\n        [\n            x    315.65\n            y    249.19\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    21\n        label    \"\"\n        graphics\n        [\n            x    29.46\n            y    309.64\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    22\n        label    \"\"\n        graphics\n        [\n            x    439.02\n            y    108.06\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    23\n        label    \"\"\n        graphics\n        [\n            x    404.90\n            y    482.37\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    24\n        label    \"\"\n        graphics\n        [\n            x    386.75\n            y    479.01\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    25\n        label    \"\"\n        graphics\n        [\n            x    371.79\n            y    433.56\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    26\n        label    \"\"\n        graphics\n        [\n            x    522.54\n            y    69.08\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    27\n        label    \"\"\n        graphics\n        [\n            x    536.91\n            y    22.43\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    28\n        label    \"\"\n        graphics\n        [\n            x    216.77\n            y    101.20\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    29\n        label    \"\"\n        graphics\n        [\n            x    504.61\n            y    243.50\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    30\n        label    \"\"\n        graphics\n        [\n            x    221.48\n            y    516.72\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    31\n        label    \"\"\n        graphics\n        [\n            x    425.62\n            y    206.48\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    32\n        label    \"\"\n        graphics\n        [\n            x    46.39\n            y    439.45\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    33\n        label    \"\"\n        graphics\n        [\n            x    168.75\n            y    105.19\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    34\n        label    \"\"\n        graphics\n        [\n            x    169.32\n            y    261.16\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    35\n        label    \"\"\n        graphics\n        [\n            x    293.17\n            y    136.43\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    36\n        label    \"\"\n        graphics\n        [\n            x    123.65\n            y    3.72\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    37\n        label    \"\"\n        graphics\n        [\n            x    76.05\n            y    321.99\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    38\n        label    \"\"\n        graphics\n        [\n            x    423.92\n            y    186.72\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    39\n        label    \"\"\n        graphics\n        [\n            x    355.77\n            y    68.00\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    edge\n    [\n        source    1\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    10\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    11\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    12\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    13\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    14\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    15\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    16\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    17\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    18\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    19\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    2\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    20\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    21\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    22\n        target    19\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    23\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    24\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    25\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    26\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    27\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    28\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    29\n        target    20\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    3\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    3\n        target    39\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    30\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    31\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    32\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    33\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    34\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    35\n        target    19\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    36\n        target    35\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    37\n        target    27\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    38\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    39\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    4\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    5\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    6\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    7\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    8\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    9\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n]\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v40e40.tglf",
    "content": "0 435.000 255.000 30.000 30.000\n1 170.000 201.000 30.000 30.000\n2 250.000 261.000 30.000 30.000\n3 401.000 419.000 30.000 30.000\n4 67.000 66.000 30.000 30.000\n5 457.000 202.000 30.000 30.000\n6 448.000 562.000 30.000 30.000\n7 431.000 480.000 30.000 30.000\n8 353.000 79.000 30.000 30.000\n9 249.000 209.000 30.000 30.000\n10 418.000 420.000 30.000 30.000\n11 398.000 258.000 30.000 30.000\n12 501.000 361.000 30.000 30.000\n13 350.000 331.000 30.000 30.000\n14 17.000 295.000 30.000 30.000\n15 398.000 135.000 30.000 30.000\n16 556.000 509.000 30.000 30.000\n17 278.000 401.000 30.000 30.000\n18 331.000 80.000 30.000 30.000\n19 473.000 368.000 30.000 30.000\n20 315.000 249.000 30.000 30.000\n21 29.000 309.000 30.000 30.000\n22 439.000 108.000 30.000 30.000\n23 404.000 482.000 30.000 30.000\n24 386.000 479.000 30.000 30.000\n25 371.000 433.000 30.000 30.000\n26 522.000 69.000 30.000 30.000\n27 536.000 22.000 30.000 30.000\n28 216.000 101.000 30.000 30.000\n29 504.000 243.000 30.000 30.000\n30 221.000 516.000 30.000 30.000\n31 425.000 206.000 30.000 30.000\n32 46.000 439.000 30.000 30.000\n33 168.000 105.000 30.000 30.000\n34 169.000 261.000 30.000 30.000\n35 293.000 136.000 30.000 30.000\n36 123.000 3.000 30.000 30.000\n37 76.000 321.000 30.000 30.000\n38 423.000 186.000 30.000 30.000\n39 355.000 68.000 30.000 30.000\n#\n1 0\n27 11\n25 17\n12 4\n38 10\n33 1\n8 7\n17 11\n26 22\n29 20\n34 0\n21 12\n3 39\n15 10\n3 0\n31 21\n24 17\n30 21\n5 3\n37 27\n2 1\n7 3\n36 35\n4 3\n35 19\n19 3\n32 3\n13 5\n14 11\n11 7\n6 0\n18 10\n28 8\n23 22\n20 0\n16 11\n39 4\n22 19\n9 0\n10 4\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v40e42.gml",
    "content": "Creator\t\"yFiles\"\nVersion\t\"2.9\"\ngraph\n[\n\thierarchic\t1\n\tlabel\t\"\"\n\tdirected\t1\n\tnode\n\t[\n\t\tid\t0\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t201.27537096224626\n\t\t\ty\t-67.20653565133625\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t1\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t438.6801140111155\n\t\t\ty\t380.1383305633809\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t2\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-299.2819322516234\n\t\t\ty\t-142.73561785304236\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t3\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t281.3341001667916\n\t\t\ty\t-63.36042683763367\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t4\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-370.6083930708586\n\t\t\ty\t184.7067265472209\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t5\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-489.99661459563976\n\t\t\ty\t39.015454956494125\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t6\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t387.2018227744958\n\t\t\ty\t-249.35017531066484\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t7\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t429.68396235625744\n\t\t\ty\t146.8359239402912\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t8\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-154.46151385535495\n\t\t\ty\t111.25117827136569\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t9\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-367.6183086212628\n\t\t\ty\t38.26802510383476\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t10\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t414.5184882928496\n\t\t\ty\t-52.65369279252275\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t11\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-97.7906890715177\n\t\t\ty\t202.19755474655142\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t12\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t89.52813684654927\n\t\t\ty\t-118.46594083565009\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t13\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t229.0940495409477\n\t\t\ty\t-251.00284572597047\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t14\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t90.1529374874641\n\t\t\ty\t144.7457474540563\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t15\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-416.6235354123635\n\t\t\ty\t-27.358257117536084\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t16\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-24.320883432682876\n\t\t\ty\t-54.3354387216437\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t17\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t411.47469835962227\n\t\t\ty\t328.2432907500414\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t18\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t319.7913272830907\n\t\t\ty\t323.43756397614766\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t19\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t138.52536525699884\n\t\t\ty\t-6.894031916184815\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t20\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-191.12369960490236\n\t\t\ty\t-248.64622655614005\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t21\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t216.49411545082341\n\t\t\ty\t-43.913242935137816\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t22\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-19.531161586589292\n\t\t\ty\t6.549263167621518\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t23\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t448.6726342589907\n\t\t\ty\t-395.6122635987455\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t24\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-71.15128876524892\n\t\t\ty\t-71.65535465337092\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t25\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-27.251635926701624\n\t\t\ty\t-301.09661539978015\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t26\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t41.613295874152755\n\t\t\ty\t105.52034711892759\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t27\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t36.74491565723338\n\t\t\ty\t223.89907857790365\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t28\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t235.208107071438\n\t\t\ty\t-164.30888885941604\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t29\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t269.0873988887304\n\t\t\ty\t189.1072590953288\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t30\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t103.90233658467196\n\t\t\ty\t-237.04556646989133\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t31\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-474.1528656748796\n\t\t\ty\t227.29294899668264\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t32\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t290.54171419852753\n\t\t\ty\t-101.84355019909634\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t33\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t216.86254564046976\n\t\t\ty\t42.96259568607644\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t34\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t466.60213995869583\n\t\t\ty\t-215.55647686347783\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t35\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t470.9220106802636\n\t\t\ty\t303.16866828900265\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t36\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-356.3983411833314\n\t\t\ty\t214.25000360541367\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t37\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t4.52395836889292\n\t\t\ty\t-280.70319795122344\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t38\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-75.19410910899484\n\t\t\ty\t-292.4904789513748\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t39\n\t\tlabel\t\"\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t114.9054371411039\n\t\t\ty\t399.3131623791912\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t1\n\t\ttarget\t0\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t2\n\t\ttarget\t1\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t3\n\t\ttarget\t1\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t4\n\t\ttarget\t2\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t5\n\t\ttarget\t1\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t6\n\t\ttarget\t4\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t7\n\t\ttarget\t2\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t8\n\t\ttarget\t4\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t9\n\t\ttarget\t0\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t10\n\t\ttarget\t7\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t11\n\t\ttarget\t9\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t12\n\t\ttarget\t9\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t13\n\t\ttarget\t1\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t14\n\t\ttarget\t3\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t15\n\t\ttarget\t3\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t16\n\t\ttarget\t5\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t17\n\t\ttarget\t11\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t18\n\t\ttarget\t1\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t19\n\t\ttarget\t0\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t20\n\t\ttarget\t1\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t21\n\t\ttarget\t9\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t22\n\t\ttarget\t5\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t23\n\t\ttarget\t11\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t24\n\t\ttarget\t15\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t25\n\t\ttarget\t0\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t26\n\t\ttarget\t25\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t27\n\t\ttarget\t13\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t28\n\t\ttarget\t0\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t29\n\t\ttarget\t12\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t30\n\t\ttarget\t23\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t31\n\t\ttarget\t21\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t32\n\t\ttarget\t1\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t33\n\t\ttarget\t4\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t34\n\t\ttarget\t19\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t35\n\t\ttarget\t32\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t36\n\t\ttarget\t16\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t37\n\t\ttarget\t29\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t38\n\t\ttarget\t36\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t39\n\t\ttarget\t36\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t12\n\t\ttarget\t39\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t15\n\t\ttarget\t25\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t5\n\t\ttarget\t31\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n]\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v40e42.tglf",
    "content": "0 201.000 -67.000 30.000 30.000\n1 438.000 380.000 30.000 30.000\n2 -299.000 -142.000 30.000 30.000\n3 281.000 -63.000 30.000 30.000\n4 -370.000 184.000 30.000 30.000\n5 -489.000 39.000 30.000 30.000\n6 387.000 -249.000 30.000 30.000\n7 429.000 146.000 30.000 30.000\n8 -154.000 111.000 30.000 30.000\n9 -367.000 38.000 30.000 30.000\n10 414.000 -52.000 30.000 30.000\n11 -97.000 202.000 30.000 30.000\n12 89.000 -118.000 30.000 30.000\n13 229.000 -251.000 30.000 30.000\n14 90.000 144.000 30.000 30.000\n15 -416.000 -27.000 30.000 30.000\n16 -24.000 -54.000 30.000 30.000\n17 411.000 328.000 30.000 30.000\n18 319.000 323.000 30.000 30.000\n19 138.000 -6.000 30.000 30.000\n20 -191.000 -248.000 30.000 30.000\n21 216.000 -43.000 30.000 30.000\n22 -19.000 6.000 30.000 30.000\n23 448.000 -395.000 30.000 30.000\n24 -71.000 -71.000 30.000 30.000\n25 -27.000 -301.000 30.000 30.000\n26 41.000 105.000 30.000 30.000\n27 36.000 223.000 30.000 30.000\n28 235.000 -164.000 30.000 30.000\n29 269.000 189.000 30.000 30.000\n30 103.000 -237.000 30.000 30.000\n31 -474.000 227.000 30.000 30.000\n32 290.000 -101.000 30.000 30.000\n33 216.000 42.000 30.000 30.000\n34 466.000 -215.000 30.000 30.000\n35 470.000 303.000 30.000 30.000\n36 -356.000 214.000 30.000 30.000\n37 4.000 -280.000 30.000 30.000\n38 -75.000 -292.000 30.000 30.000\n39 114.000 399.000 30.000 30.000\n#\n12 9\n30 23\n9 0\n16 5\n5 1\n34 19\n36 16\n18 1\n5 31\n4 2\n11 9\n1 0\n38 36\n20 1\n6 4\n3 1\n8 4\n29 12\n39 36\n17 11\n12 39\n2 1\n24 15\n26 25\n37 29\n7 2\n31 21\n19 0\n23 11\n25 0\n27 13\n32 1\n21 9\n35 32\n15 25\n28 0\n22 5\n15 3\n33 4\n13 1\n10 7\n14 3\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v40e44.gml",
    "content": "graph\n[\n    node\n    [\n        id    0\n        label    \"\"\n        graphics\n        [\n            x    518.21\n            y    445.80\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    1\n        label    \"\"\n        graphics\n        [\n            x    456.09\n            y    466.04\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    2\n        label    \"\"\n        graphics\n        [\n            x    102.44\n            y    308.29\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    3\n        label    \"\"\n        graphics\n        [\n            x    89.72\n            y    530.31\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    4\n        label    \"\"\n        graphics\n        [\n            x    419.74\n            y    462.47\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    5\n        label    \"\"\n        graphics\n        [\n            x    387.99\n            y    253.41\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    6\n        label    \"\"\n        graphics\n        [\n            x    236.55\n            y    205.04\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    7\n        label    \"\"\n        graphics\n        [\n            x    138.70\n            y    205.50\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    8\n        label    \"\"\n        graphics\n        [\n            x    22.51\n            y    475.74\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    9\n        label    \"\"\n        graphics\n        [\n            x    332.47\n            y    556.45\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    10\n        label    \"\"\n        graphics\n        [\n            x    169.11\n            y    414.54\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    11\n        label    \"\"\n        graphics\n        [\n            x    448.83\n            y    312.40\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    12\n        label    \"\"\n        graphics\n        [\n            x    309.46\n            y    150.52\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    13\n        label    \"\"\n        graphics\n        [\n            x    353.75\n            y    43.64\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    14\n        label    \"\"\n        graphics\n        [\n            x    58.46\n            y    426.94\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    15\n        label    \"\"\n        graphics\n        [\n            x    91.43\n            y    325.06\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    16\n        label    \"\"\n        graphics\n        [\n            x    546.87\n            y    354.22\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    17\n        label    \"\"\n        graphics\n        [\n            x    177.20\n            y    370.40\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    18\n        label    \"\"\n        graphics\n        [\n            x    265.77\n            y    379.03\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    19\n        label    \"\"\n        graphics\n        [\n            x    62.32\n            y    56.01\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    20\n        label    \"\"\n        graphics\n        [\n            x    449.86\n            y    280.74\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    21\n        label    \"\"\n        graphics\n        [\n            x    285.79\n            y    500.40\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    22\n        label    \"\"\n        graphics\n        [\n            x    495.32\n            y    567.17\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    23\n        label    \"\"\n        graphics\n        [\n            x    459.08\n            y    387.28\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    24\n        label    \"\"\n        graphics\n        [\n            x    448.04\n            y    406.48\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    25\n        label    \"\"\n        graphics\n        [\n            x    110.64\n            y    524.84\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    26\n        label    \"\"\n        graphics\n        [\n            x    541.05\n            y    560.87\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    27\n        label    \"\"\n        graphics\n        [\n            x    242.73\n            y    145.23\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    28\n        label    \"\"\n        graphics\n        [\n            x    171.23\n            y    566.82\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    29\n        label    \"\"\n        graphics\n        [\n            x    22.81\n            y    347.50\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    30\n        label    \"\"\n        graphics\n        [\n            x    147.01\n            y    367.09\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    31\n        label    \"\"\n        graphics\n        [\n            x    472.31\n            y    344.13\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    32\n        label    \"\"\n        graphics\n        [\n            x    59.23\n            y    401.96\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    33\n        label    \"\"\n        graphics\n        [\n            x    293.70\n            y    227.86\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    34\n        label    \"\"\n        graphics\n        [\n            x    12.39\n            y    429.59\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    35\n        label    \"\"\n        graphics\n        [\n            x    376.08\n            y    288.28\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    36\n        label    \"\"\n        graphics\n        [\n            x    195.27\n            y    116.49\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    37\n        label    \"\"\n        graphics\n        [\n            x    238.77\n            y    176.08\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    38\n        label    \"\"\n        graphics\n        [\n            x    12.47\n            y    130.94\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    39\n        label    \"\"\n        graphics\n        [\n            x    171.28\n            y    144.21\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    edge\n    [\n        source    1\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    10\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    11\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    12\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    12\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    13\n        target    25\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    13\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    14\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    15\n        target    25\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    15\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    16\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    17\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    18\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    19\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    2\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    20\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    21\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    22\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    23\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    24\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    25\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    26\n        target    25\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    27\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    27\n        target    38\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    28\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    29\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    3\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    30\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    31\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    32\n        target    26\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    33\n        target    31\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    34\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    35\n        target    25\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    36\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    37\n        target    36\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    38\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    39\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    4\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    5\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    5\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    6\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    7\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    8\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    9\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n]\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v40e44.tglf",
    "content": "0 518.000 445.000 30.000 30.000\n1 456.000 466.000 30.000 30.000\n2 102.000 308.000 30.000 30.000\n3 89.000 530.000 30.000 30.000\n4 419.000 462.000 30.000 30.000\n5 387.000 253.000 30.000 30.000\n6 236.000 205.000 30.000 30.000\n7 138.000 205.000 30.000 30.000\n8 22.000 475.000 30.000 30.000\n9 332.000 556.000 30.000 30.000\n10 169.000 414.000 30.000 30.000\n11 448.000 312.000 30.000 30.000\n12 309.000 150.000 30.000 30.000\n13 353.000 43.000 30.000 30.000\n14 58.000 426.000 30.000 30.000\n15 91.000 325.000 30.000 30.000\n16 546.000 354.000 30.000 30.000\n17 177.000 370.000 30.000 30.000\n18 265.000 379.000 30.000 30.000\n19 62.000 56.000 30.000 30.000\n20 449.000 280.000 30.000 30.000\n21 285.000 500.000 30.000 30.000\n22 495.000 567.000 30.000 30.000\n23 459.000 387.000 30.000 30.000\n24 448.000 406.000 30.000 30.000\n25 110.000 524.000 30.000 30.000\n26 541.000 560.000 30.000 30.000\n27 242.000 145.000 30.000 30.000\n28 171.000 566.000 30.000 30.000\n29 22.000 347.000 30.000 30.000\n30 147.000 367.000 30.000 30.000\n31 472.000 344.000 30.000 30.000\n32 59.000 401.000 30.000 30.000\n33 293.000 227.000 30.000 30.000\n34 12.000 429.000 30.000 30.000\n35 376.000 288.000 30.000 30.000\n36 195.000 116.000 30.000 30.000\n37 238.000 176.000 30.000 30.000\n38 12.000 130.000 30.000 30.000\n39 171.000 144.000 30.000 30.000\n#\n27 10\n8 0\n3 1\n28 22\n27 38\n15 8\n34 18\n30 14\n36 3\n35 25\n14 11\n19 12\n39 5\n11 2\n33 31\n10 6\n38 15\n31 6\n18 0\n23 3\n12 6\n7 2\n24 12\n32 26\n13 25\n37 36\n13 6\n1 0\n26 25\n9 8\n5 2\n12 15\n6 5\n17 16\n4 1\n29 11\n16 1\n15 25\n2 0\n22 2\n25 22\n20 6\n5 11\n21 10\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v40e48.gml",
    "content": "graph\n[\n    node\n    [\n        id    0\n        label    \"\"\n        graphics\n        [\n            x    255.47\n            y    39.07\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    1\n        label    \"\"\n        graphics\n        [\n            x    331.88\n            y    42.84\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    2\n        label    \"\"\n        graphics\n        [\n            x    518.04\n            y    164.66\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    3\n        label    \"\"\n        graphics\n        [\n            x    57.91\n            y    356.29\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    4\n        label    \"\"\n        graphics\n        [\n            x    552.39\n            y    215.55\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    5\n        label    \"\"\n        graphics\n        [\n            x    154.04\n            y    139.39\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    6\n        label    \"\"\n        graphics\n        [\n            x    401.18\n            y    471.10\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    7\n        label    \"\"\n        graphics\n        [\n            x    449.56\n            y    505.17\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    8\n        label    \"\"\n        graphics\n        [\n            x    496.37\n            y    252.01\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    9\n        label    \"\"\n        graphics\n        [\n            x    54.72\n            y    196.90\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    10\n        label    \"\"\n        graphics\n        [\n            x    508.34\n            y    215.74\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    11\n        label    \"\"\n        graphics\n        [\n            x    25.16\n            y    210.88\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    12\n        label    \"\"\n        graphics\n        [\n            x    43.32\n            y    538.29\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    13\n        label    \"\"\n        graphics\n        [\n            x    554.51\n            y    102.13\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    14\n        label    \"\"\n        graphics\n        [\n            x    539.98\n            y    77.90\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    15\n        label    \"\"\n        graphics\n        [\n            x    31.36\n            y    352.41\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    16\n        label    \"\"\n        graphics\n        [\n            x    231.94\n            y    25.14\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    17\n        label    \"\"\n        graphics\n        [\n            x    420.05\n            y    299.91\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    18\n        label    \"\"\n        graphics\n        [\n            x    68.50\n            y    107.09\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    19\n        label    \"\"\n        graphics\n        [\n            x    526.83\n            y    478.50\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    20\n        label    \"\"\n        graphics\n        [\n            x    232.61\n            y    478.88\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    21\n        label    \"\"\n        graphics\n        [\n            x    35.96\n            y    282.44\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    22\n        label    \"\"\n        graphics\n        [\n            x    153.24\n            y    561.16\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    23\n        label    \"\"\n        graphics\n        [\n            x    376.88\n            y    206.19\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    24\n        label    \"\"\n        graphics\n        [\n            x    244.18\n            y    92.55\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    25\n        label    \"\"\n        graphics\n        [\n            x    485.84\n            y    457.37\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    26\n        label    \"\"\n        graphics\n        [\n            x    145.56\n            y    315.51\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    27\n        label    \"\"\n        graphics\n        [\n            x    451.85\n            y    302.66\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    28\n        label    \"\"\n        graphics\n        [\n            x    224.34\n            y    326.25\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    29\n        label    \"\"\n        graphics\n        [\n            x    61.40\n            y    102.45\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    30\n        label    \"\"\n        graphics\n        [\n            x    518.50\n            y    236.43\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    31\n        label    \"\"\n        graphics\n        [\n            x    32.34\n            y    379.92\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    32\n        label    \"\"\n        graphics\n        [\n            x    409.21\n            y    35.64\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    33\n        label    \"\"\n        graphics\n        [\n            x    135.88\n            y    535.29\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    34\n        label    \"\"\n        graphics\n        [\n            x    262.49\n            y    66.95\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    35\n        label    \"\"\n        graphics\n        [\n            x    285.03\n            y    156.78\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    36\n        label    \"\"\n        graphics\n        [\n            x    313.89\n            y    118.53\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    37\n        label    \"\"\n        graphics\n        [\n            x    59.12\n            y    565.83\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    38\n        label    \"\"\n        graphics\n        [\n            x    349.28\n            y    148.85\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    39\n        label    \"\"\n        graphics\n        [\n            x    31.09\n            y    189.59\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    edge\n    [\n        source    1\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    10\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    11\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    12\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    13\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    14\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    15\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    15\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    16\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    17\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    18\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    19\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    2\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    20\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    21\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    22\n        target    20\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    22\n        target    29\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    22\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    23\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    24\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    25\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    26\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    26\n        target    25\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    27\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    28\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    29\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    29\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    3\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    30\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    31\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    32\n        target    24\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    33\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    34\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    34\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    35\n        target    26\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    36\n        target    20\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    36\n        target    29\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    37\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    37\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    37\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    38\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    39\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    4\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    5\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    6\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    7\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    8\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    9\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n]\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v40e48.tglf",
    "content": "0 255.000 39.000 30.000 30.000\n1 331.000 42.000 30.000 30.000\n2 518.000 164.000 30.000 30.000\n3 57.000 356.000 30.000 30.000\n4 552.000 215.000 30.000 30.000\n5 154.000 139.000 30.000 30.000\n6 401.000 471.000 30.000 30.000\n7 449.000 505.000 30.000 30.000\n8 496.000 252.000 30.000 30.000\n9 54.000 196.000 30.000 30.000\n10 508.000 215.000 30.000 30.000\n11 25.000 210.000 30.000 30.000\n12 43.000 538.000 30.000 30.000\n13 554.000 102.000 30.000 30.000\n14 539.000 77.000 30.000 30.000\n15 31.000 352.000 30.000 30.000\n16 231.000 25.000 30.000 30.000\n17 420.000 299.000 30.000 30.000\n18 68.000 107.000 30.000 30.000\n19 526.000 478.000 30.000 30.000\n20 232.000 478.000 30.000 30.000\n21 35.000 282.000 30.000 30.000\n22 153.000 561.000 30.000 30.000\n23 376.000 206.000 30.000 30.000\n24 244.000 92.000 30.000 30.000\n25 485.000 457.000 30.000 30.000\n26 145.000 315.000 30.000 30.000\n27 451.000 302.000 30.000 30.000\n28 224.000 326.000 30.000 30.000\n29 61.000 102.000 30.000 30.000\n30 518.000 236.000 30.000 30.000\n31 32.000 379.000 30.000 30.000\n32 409.000 35.000 30.000 30.000\n33 135.000 535.000 30.000 30.000\n34 262.000 66.000 30.000 30.000\n35 285.000 156.000 30.000 30.000\n36 313.000 118.000 30.000 30.000\n37 59.000 565.000 30.000 30.000\n38 349.000 148.000 30.000 30.000\n39 31.000 189.000 30.000 30.000\n#\n27 21\n6 0\n26 1\n29 14\n7 6\n5 1\n13 7\n4 0\n10 8\n36 29\n8 5\n22 8\n36 20\n1 0\n23 0\n37 3\n32 24\n34 8\n33 5\n21 11\n2 1\n18 16\n37 8\n30 15\n37 9\n11 3\n29 11\n22 20\n3 2\n20 11\n22 29\n15 10\n38 16\n34 5\n39 2\n28 23\n35 26\n12 8\n15 9\n9 6\n31 23\n24 16\n17 4\n25 22\n26 25\n19 6\n16 3\n14 3\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v40e52.gml",
    "content": "graph\n[\n    node\n    [\n        id    0\n        label    \"\"\n        graphics\n        [\n            x    138.43\n            y    391.26\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    1\n        label    \"\"\n        graphics\n        [\n            x    409.10\n            y    106.49\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    2\n        label    \"\"\n        graphics\n        [\n            x    492.69\n            y    102.93\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    3\n        label    \"\"\n        graphics\n        [\n            x    40.09\n            y    62.95\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    4\n        label    \"\"\n        graphics\n        [\n            x    536.17\n            y    289.89\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    5\n        label    \"\"\n        graphics\n        [\n            x    172.76\n            y    181.95\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    6\n        label    \"\"\n        graphics\n        [\n            x    58.83\n            y    211.30\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    7\n        label    \"\"\n        graphics\n        [\n            x    483.04\n            y    96.58\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    8\n        label    \"\"\n        graphics\n        [\n            x    243.38\n            y    65.71\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    9\n        label    \"\"\n        graphics\n        [\n            x    289.68\n            y    179.39\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    10\n        label    \"\"\n        graphics\n        [\n            x    494.93\n            y    410.04\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    11\n        label    \"\"\n        graphics\n        [\n            x    83.91\n            y    129.97\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    12\n        label    \"\"\n        graphics\n        [\n            x    481.72\n            y    90.81\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    13\n        label    \"\"\n        graphics\n        [\n            x    128.71\n            y    207.27\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    14\n        label    \"\"\n        graphics\n        [\n            x    206.42\n            y    267.55\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    15\n        label    \"\"\n        graphics\n        [\n            x    469.83\n            y    388.53\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    16\n        label    \"\"\n        graphics\n        [\n            x    509.17\n            y    122.05\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    17\n        label    \"\"\n        graphics\n        [\n            x    180.63\n            y    209.89\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    18\n        label    \"\"\n        graphics\n        [\n            x    540.84\n            y    439.95\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    19\n        label    \"\"\n        graphics\n        [\n            x    57.01\n            y    513.39\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    20\n        label    \"\"\n        graphics\n        [\n            x    24.85\n            y    294.89\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    21\n        label    \"\"\n        graphics\n        [\n            x    269.74\n            y    152.64\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    22\n        label    \"\"\n        graphics\n        [\n            x    479.28\n            y    502.58\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    23\n        label    \"\"\n        graphics\n        [\n            x    19.01\n            y    109.70\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    24\n        label    \"\"\n        graphics\n        [\n            x    45.26\n            y    170.33\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    25\n        label    \"\"\n        graphics\n        [\n            x    244.51\n            y    406.22\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    26\n        label    \"\"\n        graphics\n        [\n            x    563.10\n            y    563.13\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    27\n        label    \"\"\n        graphics\n        [\n            x    431.19\n            y    239.65\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    28\n        label    \"\"\n        graphics\n        [\n            x    324.49\n            y    353.01\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    29\n        label    \"\"\n        graphics\n        [\n            x    483.47\n            y    526.09\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    30\n        label    \"\"\n        graphics\n        [\n            x    207.05\n            y    497.79\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    31\n        label    \"\"\n        graphics\n        [\n            x    141.73\n            y    202.62\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    32\n        label    \"\"\n        graphics\n        [\n            x    291.20\n            y    35.12\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    33\n        label    \"\"\n        graphics\n        [\n            x    535.99\n            y    27.32\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    34\n        label    \"\"\n        graphics\n        [\n            x    191.81\n            y    382.49\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    35\n        label    \"\"\n        graphics\n        [\n            x    3.28\n            y    345.88\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    36\n        label    \"\"\n        graphics\n        [\n            x    396.15\n            y    251.07\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    37\n        label    \"\"\n        graphics\n        [\n            x    30.81\n            y    132.53\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    38\n        label    \"\"\n        graphics\n        [\n            x    557.74\n            y    494.54\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    39\n        label    \"\"\n        graphics\n        [\n            x    18.55\n            y    268.79\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    edge\n    [\n        source    1\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    10\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    11\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    12\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    13\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    14\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    15\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    16\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    16\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    17\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    18\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    19\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    2\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    2\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    20\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    21\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    22\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    22\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    23\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    24\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    25\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    25\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    26\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    26\n        target    33\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    27\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    28\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    28\n        target    27\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    28\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    29\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    3\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    30\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    31\n        target    19\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    32\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    33\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    33\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    34\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    35\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    36\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    36\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    37\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    38\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    39\n        target    26\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    39\n        target    28\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    4\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    5\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    5\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    6\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    7\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    7\n        target    32\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    8\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    8\n        target    36\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    9\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n]\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v40e52.tglf",
    "content": "0 138.000 391.000 30.000 30.000\n1 409.000 106.000 30.000 30.000\n2 492.000 102.000 30.000 30.000\n3 40.000 62.000 30.000 30.000\n4 536.000 289.000 30.000 30.000\n5 172.000 181.000 30.000 30.000\n6 58.000 211.000 30.000 30.000\n7 483.000 96.000 30.000 30.000\n8 243.000 65.000 30.000 30.000\n9 289.000 179.000 30.000 30.000\n10 494.000 410.000 30.000 30.000\n11 83.000 129.000 30.000 30.000\n12 481.000 90.000 30.000 30.000\n13 128.000 207.000 30.000 30.000\n14 206.000 267.000 30.000 30.000\n15 469.000 388.000 30.000 30.000\n16 509.000 122.000 30.000 30.000\n17 180.000 209.000 30.000 30.000\n18 540.000 439.000 30.000 30.000\n19 57.000 513.000 30.000 30.000\n20 24.000 294.000 30.000 30.000\n21 269.000 152.000 30.000 30.000\n22 479.000 502.000 30.000 30.000\n23 19.000 109.000 30.000 30.000\n24 45.000 170.000 30.000 30.000\n25 244.000 406.000 30.000 30.000\n26 563.000 563.000 30.000 30.000\n27 431.000 239.000 30.000 30.000\n28 324.000 353.000 30.000 30.000\n29 483.000 526.000 30.000 30.000\n30 207.000 497.000 30.000 30.000\n31 141.000 202.000 30.000 30.000\n32 291.000 35.000 30.000 30.000\n33 535.000 27.000 30.000 30.000\n34 191.000 382.000 30.000 30.000\n35 3.000 345.000 30.000 30.000\n36 396.000 251.000 30.000 30.000\n37 30.000 132.000 30.000 30.000\n38 557.000 494.000 30.000 30.000\n39 18.000 268.000 30.000 30.000\n#\n16 11\n17 10\n19 13\n28 27\n26 17\n2 0\n5 7\n3 2\n36 12\n33 14\n2 17\n28 4\n22 18\n38 4\n33 8\n30 5\n15 6\n6 4\n36 9\n4 3\n27 22\n7 3\n11 8\n20 2\n8 36\n1 0\n18 6\n12 0\n9 8\n34 9\n22 1\n39 28\n29 12\n8 0\n28 12\n23 11\n14 1\n25 14\n10 9\n21 15\n39 26\n16 15\n32 16\n26 33\n5 4\n25 13\n31 19\n13 5\n35 18\n24 12\n7 32\n37 23\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v40e56.gml",
    "content": "graph\n[\n    node\n    [\n        id    0\n        label    \"\"\n        graphics\n        [\n            x    502.36\n            y    211.22\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    1\n        label    \"\"\n        graphics\n        [\n            x    474.95\n            y    401.10\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    2\n        label    \"\"\n        graphics\n        [\n            x    511.67\n            y    457.22\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    3\n        label    \"\"\n        graphics\n        [\n            x    493.67\n            y    465.11\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    4\n        label    \"\"\n        graphics\n        [\n            x    535.37\n            y    252.14\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    5\n        label    \"\"\n        graphics\n        [\n            x    129.72\n            y    392.40\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    6\n        label    \"\"\n        graphics\n        [\n            x    516.10\n            y    493.41\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    7\n        label    \"\"\n        graphics\n        [\n            x    157.59\n            y    547.30\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    8\n        label    \"\"\n        graphics\n        [\n            x    348.45\n            y    373.99\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    9\n        label    \"\"\n        graphics\n        [\n            x    211.73\n            y    534.20\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    10\n        label    \"\"\n        graphics\n        [\n            x    559.61\n            y    454.39\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    11\n        label    \"\"\n        graphics\n        [\n            x    492.27\n            y    156.95\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    12\n        label    \"\"\n        graphics\n        [\n            x    506.12\n            y    195.94\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    13\n        label    \"\"\n        graphics\n        [\n            x    106.48\n            y    45.89\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    14\n        label    \"\"\n        graphics\n        [\n            x    288.56\n            y    129.81\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    15\n        label    \"\"\n        graphics\n        [\n            x    346.76\n            y    341.04\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    16\n        label    \"\"\n        graphics\n        [\n            x    7.38\n            y    546.58\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    17\n        label    \"\"\n        graphics\n        [\n            x    50.87\n            y    232.17\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    18\n        label    \"\"\n        graphics\n        [\n            x    254.42\n            y    199.04\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    19\n        label    \"\"\n        graphics\n        [\n            x    210.02\n            y    16.91\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    20\n        label    \"\"\n        graphics\n        [\n            x    1.79\n            y    150.59\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    21\n        label    \"\"\n        graphics\n        [\n            x    307.72\n            y    361.72\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    22\n        label    \"\"\n        graphics\n        [\n            x    223.23\n            y    403.54\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    23\n        label    \"\"\n        graphics\n        [\n            x    93.25\n            y    302.09\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    24\n        label    \"\"\n        graphics\n        [\n            x    52.54\n            y    88.04\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    25\n        label    \"\"\n        graphics\n        [\n            x    117.41\n            y    269.27\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    26\n        label    \"\"\n        graphics\n        [\n            x    124.77\n            y    435.83\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    27\n        label    \"\"\n        graphics\n        [\n            x    110.12\n            y    201.17\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    28\n        label    \"\"\n        graphics\n        [\n            x    236.20\n            y    165.28\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    29\n        label    \"\"\n        graphics\n        [\n            x    429.49\n            y    308.50\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    30\n        label    \"\"\n        graphics\n        [\n            x    287.76\n            y    310.19\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    31\n        label    \"\"\n        graphics\n        [\n            x    0.58\n            y    152.24\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    32\n        label    \"\"\n        graphics\n        [\n            x    94.48\n            y    543.33\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    33\n        label    \"\"\n        graphics\n        [\n            x    132.62\n            y    100.20\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    34\n        label    \"\"\n        graphics\n        [\n            x    141.73\n            y    137.76\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    35\n        label    \"\"\n        graphics\n        [\n            x    503.77\n            y    218.56\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    36\n        label    \"\"\n        graphics\n        [\n            x    309.35\n            y    361.16\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    37\n        label    \"\"\n        graphics\n        [\n            x    442.67\n            y    407.06\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    38\n        label    \"\"\n        graphics\n        [\n            x    108.26\n            y    518.02\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    39\n        label    \"\"\n        graphics\n        [\n            x    194.29\n            y    516.92\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    edge\n    [\n        source    1\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    1\n        target    30\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    1\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    10\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    11\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    12\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    12\n        target    19\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    13\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    14\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    15\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    16\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    17\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    17\n        target    32\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    18\n        target    20\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    18\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    19\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    2\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    20\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    21\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    22\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    23\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    23\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    24\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    25\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    26\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    27\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    27\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    27\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    27\n        target    25\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    27\n        target    35\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    28\n        target    27\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    29\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    3\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    3\n        target    33\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    30\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    31\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    31\n        target    27\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    32\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    32\n        target    29\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    33\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    33\n        target    34\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    34\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    35\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    36\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    37\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    38\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    38\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    38\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    39\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    4\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    5\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    5\n        target    34\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    6\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    7\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    8\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    9\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n]\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v40e56.tglf",
    "content": "0 502.000 211.000 30.000 30.000\n1 474.000 401.000 30.000 30.000\n2 511.000 457.000 30.000 30.000\n3 493.000 465.000 30.000 30.000\n4 535.000 252.000 30.000 30.000\n5 129.000 392.000 30.000 30.000\n6 516.000 493.000 30.000 30.000\n7 157.000 547.000 30.000 30.000\n8 348.000 373.000 30.000 30.000\n9 211.000 534.000 30.000 30.000\n10 559.000 454.000 30.000 30.000\n11 492.000 156.000 30.000 30.000\n12 506.000 195.000 30.000 30.000\n13 106.000 45.000 30.000 30.000\n14 288.000 129.000 30.000 30.000\n15 346.000 341.000 30.000 30.000\n16 7.000 546.000 30.000 30.000\n17 50.000 232.000 30.000 30.000\n18 254.000 199.000 30.000 30.000\n19 210.000 16.000 30.000 30.000\n20 1.000 150.000 30.000 30.000\n21 307.000 361.000 30.000 30.000\n22 223.000 403.000 30.000 30.000\n23 93.000 302.000 30.000 30.000\n24 52.000 88.000 30.000 30.000\n25 117.000 269.000 30.000 30.000\n26 124.000 435.000 30.000 30.000\n27 110.000 201.000 30.000 30.000\n28 236.000 165.000 30.000 30.000\n29 429.000 308.000 30.000 30.000\n30 287.000 310.000 30.000 30.000\n31 0.000 152.000 30.000 30.000\n32 94.000 543.000 30.000 30.000\n33 132.000 100.000 30.000 30.000\n34 141.000 137.000 30.000 30.000\n35 503.000 218.000 30.000 30.000\n36 309.000 361.000 30.000 30.000\n37 442.000 407.000 30.000 30.000\n38 108.000 518.000 30.000 30.000\n39 194.000 516.000 30.000 30.000\n#\n1 30\n38 17\n15 0\n14 12\n12 0\n38 23\n27 17\n36 13\n29 21\n31 18\n27 25\n12 19\n22 5\n1 8\n30 0\n17 11\n31 27\n19 15\n17 32\n20 3\n24 8\n18 20\n27 14\n38 7\n10 4\n3 0\n28 27\n32 23\n18 3\n16 1\n23 13\n35 8\n26 3\n9 2\n25 9\n33 21\n8 5\n13 3\n2 1\n23 7\n34 15\n4 2\n5 34\n33 34\n3 33\n39 2\n21 0\n7 3\n5 1\n37 12\n27 22\n32 29\n1 0\n11 6\n27 35\n6 4\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v40e60.gml",
    "content": "graph\n[\n    node\n    [\n        id    0\n        label    \"\"\n        graphics\n        [\n            x    368.67\n            y    394.36\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    1\n        label    \"\"\n        graphics\n        [\n            x    6.03\n            y    519.26\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    2\n        label    \"\"\n        graphics\n        [\n            x    357.39\n            y    486.17\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    3\n        label    \"\"\n        graphics\n        [\n            x    167.30\n            y    327.08\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    4\n        label    \"\"\n        graphics\n        [\n            x    516.42\n            y    65.58\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    5\n        label    \"\"\n        graphics\n        [\n            x    499.33\n            y    73.00\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    6\n        label    \"\"\n        graphics\n        [\n            x    65.49\n            y    296.24\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    7\n        label    \"\"\n        graphics\n        [\n            x    490.86\n            y    454.47\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    8\n        label    \"\"\n        graphics\n        [\n            x    532.60\n            y    202.47\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    9\n        label    \"\"\n        graphics\n        [\n            x    293.13\n            y    307.85\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    10\n        label    \"\"\n        graphics\n        [\n            x    500.06\n            y    146.41\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    11\n        label    \"\"\n        graphics\n        [\n            x    546.93\n            y    320.58\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    12\n        label    \"\"\n        graphics\n        [\n            x    116.46\n            y    2.86\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    13\n        label    \"\"\n        graphics\n        [\n            x    221.88\n            y    466.52\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    14\n        label    \"\"\n        graphics\n        [\n            x    201.42\n            y    292.88\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    15\n        label    \"\"\n        graphics\n        [\n            x    38.20\n            y    557.01\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    16\n        label    \"\"\n        graphics\n        [\n            x    148.74\n            y    465.04\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    17\n        label    \"\"\n        graphics\n        [\n            x    350.72\n            y    7.02\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    18\n        label    \"\"\n        graphics\n        [\n            x    188.74\n            y    101.13\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    19\n        label    \"\"\n        graphics\n        [\n            x    498.28\n            y    216.77\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    20\n        label    \"\"\n        graphics\n        [\n            x    169.36\n            y    540.86\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    21\n        label    \"\"\n        graphics\n        [\n            x    508.48\n            y    565.29\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    22\n        label    \"\"\n        graphics\n        [\n            x    388.41\n            y    535.07\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    23\n        label    \"\"\n        graphics\n        [\n            x    290.71\n            y    375.72\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    24\n        label    \"\"\n        graphics\n        [\n            x    257.00\n            y    296.08\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    25\n        label    \"\"\n        graphics\n        [\n            x    373.76\n            y    116.79\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    26\n        label    \"\"\n        graphics\n        [\n            x    431.11\n            y    478.99\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    27\n        label    \"\"\n        graphics\n        [\n            x    525.12\n            y    153.76\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    28\n        label    \"\"\n        graphics\n        [\n            x    299.09\n            y    159.81\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    29\n        label    \"\"\n        graphics\n        [\n            x    29.86\n            y    536.06\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    30\n        label    \"\"\n        graphics\n        [\n            x    366.10\n            y    449.37\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    31\n        label    \"\"\n        graphics\n        [\n            x    88.82\n            y    298.04\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    32\n        label    \"\"\n        graphics\n        [\n            x    368.41\n            y    39.60\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    33\n        label    \"\"\n        graphics\n        [\n            x    24.14\n            y    522.90\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    34\n        label    \"\"\n        graphics\n        [\n            x    203.00\n            y    321.53\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    35\n        label    \"\"\n        graphics\n        [\n            x    33.18\n            y    348.55\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    36\n        label    \"\"\n        graphics\n        [\n            x    61.69\n            y    3.87\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    37\n        label    \"\"\n        graphics\n        [\n            x    450.48\n            y    456.98\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    38\n        label    \"\"\n        graphics\n        [\n            x    543.50\n            y    13.24\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    39\n        label    \"\"\n        graphics\n        [\n            x    97.78\n            y    235.30\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    edge\n    [\n        source    0\n        target    27\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    1\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    1\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    10\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    10\n        target    32\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    11\n        target    26\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    11\n        target    29\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    11\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    12\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    12\n        target    36\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    12\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    13\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    14\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    14\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    15\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    15\n        target    35\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    16\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    16\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    17\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    17\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    18\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    19\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    19\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    19\n        target    35\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    2\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    20\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    21\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    21\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    22\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    23\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    24\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    24\n        target    35\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    25\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    26\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    27\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    28\n        target    20\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    28\n        target    24\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    29\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    3\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    30\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    31\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    32\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    33\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    33\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    34\n        target    24\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    35\n        target    33\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    36\n        target    35\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    37\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    37\n        target    24\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    38\n        target    33\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    39\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    39\n        target    20\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    4\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    4\n        target    30\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    5\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    6\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    7\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    8\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    8\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    9\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n]\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v40e60.tglf",
    "content": "0 368.000 394.000 30.000 30.000\n1 6.000 519.000 30.000 30.000\n2 357.000 486.000 30.000 30.000\n3 167.000 327.000 30.000 30.000\n4 516.000 65.000 30.000 30.000\n5 499.000 73.000 30.000 30.000\n6 65.000 296.000 30.000 30.000\n7 490.000 454.000 30.000 30.000\n8 532.000 202.000 30.000 30.000\n9 293.000 307.000 30.000 30.000\n10 500.000 146.000 30.000 30.000\n11 546.000 320.000 30.000 30.000\n12 116.000 2.000 30.000 30.000\n13 221.000 466.000 30.000 30.000\n14 201.000 292.000 30.000 30.000\n15 38.000 557.000 30.000 30.000\n16 148.000 465.000 30.000 30.000\n17 350.000 7.000 30.000 30.000\n18 188.000 101.000 30.000 30.000\n19 498.000 216.000 30.000 30.000\n20 169.000 540.000 30.000 30.000\n21 508.000 565.000 30.000 30.000\n22 388.000 535.000 30.000 30.000\n23 290.000 375.000 30.000 30.000\n24 257.000 296.000 30.000 30.000\n25 373.000 116.000 30.000 30.000\n26 431.000 478.000 30.000 30.000\n27 525.000 153.000 30.000 30.000\n28 299.000 159.000 30.000 30.000\n29 29.000 536.000 30.000 30.000\n30 366.000 449.000 30.000 30.000\n31 88.000 298.000 30.000 30.000\n32 368.000 39.000 30.000 30.000\n33 24.000 522.000 30.000 30.000\n34 203.000 321.000 30.000 30.000\n35 33.000 348.000 30.000 30.000\n36 61.000 3.000 30.000 30.000\n37 450.000 456.000 30.000 30.000\n38 543.000 13.000 30.000 30.000\n39 97.000 235.000 30.000 30.000\n#\n19 3\n30 6\n20 11\n25 5\n7 1\n8 18\n11 4\n8 1\n24 35\n9 6\n5 3\n12 9\n12 10\n13 9\n16 8\n6 0\n16 3\n17 14\n39 18\n4 30\n28 20\n2 0\n1 0\n10 2\n37 24\n34 24\n37 22\n33 21\n1 6\n31 10\n23 16\n24 16\n33 14\n12 36\n28 24\n3 0\n14 2\n17 16\n39 20\n10 32\n21 12\n36 35\n19 35\n22 2\n27 21\n15 10\n15 35\n0 27\n38 33\n11 29\n11 26\n32 11\n35 33\n29 0\n19 13\n4 3\n14 6\n18 11\n26 10\n21 22\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v50e50.gml",
    "content": "graph\n[\n    node\n    [\n        id    0\n        label    \"\"\n        graphics\n        [\n            x    350.86\n            y    262.58\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    1\n        label    \"\"\n        graphics\n        [\n            x    3.42\n            y    524.62\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    2\n        label    \"\"\n        graphics\n        [\n            x    595.88\n            y    126.00\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    3\n        label    \"\"\n        graphics\n        [\n            x    425.39\n            y    343.96\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    4\n        label    \"\"\n        graphics\n        [\n            x    437.30\n            y    350.53\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    5\n        label    \"\"\n        graphics\n        [\n            x    600.61\n            y    468.90\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    6\n        label    \"\"\n        graphics\n        [\n            x    365.43\n            y    551.71\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    7\n        label    \"\"\n        graphics\n        [\n            x    622.41\n            y    114.49\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    8\n        label    \"\"\n        graphics\n        [\n            x    164.51\n            y    338.09\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    9\n        label    \"\"\n        graphics\n        [\n            x    212.39\n            y    443.65\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    10\n        label    \"\"\n        graphics\n        [\n            x    544.05\n            y    238.46\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    11\n        label    \"\"\n        graphics\n        [\n            x    212.52\n            y    568.32\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    12\n        label    \"\"\n        graphics\n        [\n            x    285.31\n            y    47.56\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    13\n        label    \"\"\n        graphics\n        [\n            x    327.68\n            y    312.18\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    14\n        label    \"\"\n        graphics\n        [\n            x    616.32\n            y    405.46\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    15\n        label    \"\"\n        graphics\n        [\n            x    485.85\n            y    517.48\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    16\n        label    \"\"\n        graphics\n        [\n            x    66.12\n            y    285.17\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    17\n        label    \"\"\n        graphics\n        [\n            x    259.32\n            y    117.87\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    18\n        label    \"\"\n        graphics\n        [\n            x    222.26\n            y    233.64\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    19\n        label    \"\"\n        graphics\n        [\n            x    347.73\n            y    275.01\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    20\n        label    \"\"\n        graphics\n        [\n            x    558.06\n            y    62.79\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    21\n        label    \"\"\n        graphics\n        [\n            x    381.93\n            y    377.08\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    22\n        label    \"\"\n        graphics\n        [\n            x    104.35\n            y    323.22\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    23\n        label    \"\"\n        graphics\n        [\n            x    26.71\n            y    382.63\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    24\n        label    \"\"\n        graphics\n        [\n            x    510.22\n            y    337.21\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    25\n        label    \"\"\n        graphics\n        [\n            x    31.26\n            y    105.20\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    26\n        label    \"\"\n        graphics\n        [\n            x    575.71\n            y    432.06\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    27\n        label    \"\"\n        graphics\n        [\n            x    304.19\n            y    188.57\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    28\n        label    \"\"\n        graphics\n        [\n            x    146.04\n            y    442.47\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    29\n        label    \"\"\n        graphics\n        [\n            x    26.83\n            y    23.93\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    30\n        label    \"\"\n        graphics\n        [\n            x    231.83\n            y    180.72\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    31\n        label    \"\"\n        graphics\n        [\n            x    188.28\n            y    264.46\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    32\n        label    \"\"\n        graphics\n        [\n            x    36.59\n            y    250.29\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    33\n        label    \"\"\n        graphics\n        [\n            x    243.59\n            y    503.38\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    34\n        label    \"\"\n        graphics\n        [\n            x    537.62\n            y    569.66\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    35\n        label    \"\"\n        graphics\n        [\n            x    492.69\n            y    25.52\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    36\n        label    \"\"\n        graphics\n        [\n            x    270.47\n            y    496.82\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    37\n        label    \"\"\n        graphics\n        [\n            x    14.61\n            y    320.79\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    38\n        label    \"\"\n        graphics\n        [\n            x    539.57\n            y    284.64\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    39\n        label    \"\"\n        graphics\n        [\n            x    349.40\n            y    261.52\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    40\n        label    \"\"\n        graphics\n        [\n            x    524.06\n            y    320.21\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    41\n        label    \"\"\n        graphics\n        [\n            x    275.85\n            y    482.20\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    42\n        label    \"\"\n        graphics\n        [\n            x    499.68\n            y    600.81\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    43\n        label    \"\"\n        graphics\n        [\n            x    200.44\n            y    287.05\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    44\n        label    \"\"\n        graphics\n        [\n            x    198.64\n            y    131.09\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    45\n        label    \"\"\n        graphics\n        [\n            x    544.44\n            y    256.40\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    46\n        label    \"\"\n        graphics\n        [\n            x    19.57\n            y    485.34\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    47\n        label    \"\"\n        graphics\n        [\n            x    112.20\n            y    450.24\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    48\n        label    \"\"\n        graphics\n        [\n            x    101.37\n            y    554.83\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    49\n        label    \"\"\n        graphics\n        [\n            x    367.52\n            y    166.34\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    edge\n    [\n        source    1\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    10\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    11\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    12\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    13\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    14\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    15\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    16\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    17\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    17\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    18\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    19\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    2\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    20\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    21\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    22\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    23\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    24\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    25\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    26\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    27\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    28\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    29\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    3\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    30\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    31\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    32\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    33\n        target    28\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    34\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    35\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    36\n        target    30\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    37\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    38\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    39\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    4\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    40\n        target    32\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    41\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    42\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    43\n        target    37\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    44\n        target    19\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    45\n        target    39\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    46\n        target    43\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    47\n        target    39\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    48\n        target    28\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    49\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    5\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    6\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    7\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    8\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    9\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n]\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v50e50.tglf",
    "content": "0 350.000 262.000 30.000 30.000\n1 3.000 524.000 30.000 30.000\n2 595.000 126.000 30.000 30.000\n3 425.000 343.000 30.000 30.000\n4 437.000 350.000 30.000 30.000\n5 600.000 468.000 30.000 30.000\n6 365.000 551.000 30.000 30.000\n7 622.000 114.000 30.000 30.000\n8 164.000 338.000 30.000 30.000\n9 212.000 443.000 30.000 30.000\n10 544.000 238.000 30.000 30.000\n11 212.000 568.000 30.000 30.000\n12 285.000 47.000 30.000 30.000\n13 327.000 312.000 30.000 30.000\n14 616.000 405.000 30.000 30.000\n15 485.000 517.000 30.000 30.000\n16 66.000 285.000 30.000 30.000\n17 259.000 117.000 30.000 30.000\n18 222.000 233.000 30.000 30.000\n19 347.000 275.000 30.000 30.000\n20 558.000 62.000 30.000 30.000\n21 381.000 377.000 30.000 30.000\n22 104.000 323.000 30.000 30.000\n23 26.000 382.000 30.000 30.000\n24 510.000 337.000 30.000 30.000\n25 31.000 105.000 30.000 30.000\n26 575.000 432.000 30.000 30.000\n27 304.000 188.000 30.000 30.000\n28 146.000 442.000 30.000 30.000\n29 26.000 23.000 30.000 30.000\n30 231.000 180.000 30.000 30.000\n31 188.000 264.000 30.000 30.000\n32 36.000 250.000 30.000 30.000\n33 243.000 503.000 30.000 30.000\n34 537.000 569.000 30.000 30.000\n35 492.000 25.000 30.000 30.000\n36 270.000 496.000 30.000 30.000\n37 14.000 320.000 30.000 30.000\n38 539.000 284.000 30.000 30.000\n39 349.000 261.000 30.000 30.000\n40 524.000 320.000 30.000 30.000\n41 275.000 482.000 30.000 30.000\n42 499.000 600.000 30.000 30.000\n43 200.000 287.000 30.000 30.000\n44 198.000 131.000 30.000 30.000\n45 544.000 256.000 30.000 30.000\n46 19.000 485.000 30.000 30.000\n47 112.000 450.000 30.000 30.000\n48 101.000 554.000 30.000 30.000\n49 367.000 166.000 30.000 30.000\n#\n23 3\n37 18\n45 39\n41 22\n48 28\n34 15\n46 43\n27 2\n4 2\n28 15\n22 8\n15 4\n3 1\n35 21\n26 18\n6 0\n2 1\n17 8\n49 17\n42 17\n30 5\n7 6\n18 16\n43 37\n16 8\n14 3\n44 19\n19 2\n40 32\n5 2\n17 16\n32 4\n33 28\n29 8\n47 39\n9 6\n8 1\n21 16\n20 0\n13 4\n31 3\n11 2\n1 0\n10 3\n39 11\n38 17\n25 4\n12 0\n36 30\n24 5\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v50e55.gml",
    "content": "graph\n[\n    node\n    [\n        id    0\n        label    \"\"\n        graphics\n        [\n            x    385.78\n            y    51.99\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    1\n        label    \"\"\n        graphics\n        [\n            x    496.64\n            y    106.56\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    2\n        label    \"\"\n        graphics\n        [\n            x    92.90\n            y    100.88\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    3\n        label    \"\"\n        graphics\n        [\n            x    309.31\n            y    372.68\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    4\n        label    \"\"\n        graphics\n        [\n            x    434.66\n            y    302.63\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    5\n        label    \"\"\n        graphics\n        [\n            x    353.69\n            y    159.95\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    6\n        label    \"\"\n        graphics\n        [\n            x    202.26\n            y    342.97\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    7\n        label    \"\"\n        graphics\n        [\n            x    29.87\n            y    182.21\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    8\n        label    \"\"\n        graphics\n        [\n            x    108.56\n            y    480.99\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    9\n        label    \"\"\n        graphics\n        [\n            x    345.99\n            y    214.79\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    10\n        label    \"\"\n        graphics\n        [\n            x    286.75\n            y    595.23\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    11\n        label    \"\"\n        graphics\n        [\n            x    494.28\n            y    182.03\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    12\n        label    \"\"\n        graphics\n        [\n            x    105.28\n            y    52.84\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    13\n        label    \"\"\n        graphics\n        [\n            x    115.16\n            y    456.37\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    14\n        label    \"\"\n        graphics\n        [\n            x    261.43\n            y    529.17\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    15\n        label    \"\"\n        graphics\n        [\n            x    523.43\n            y    505.29\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    16\n        label    \"\"\n        graphics\n        [\n            x    141.70\n            y    574.07\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    17\n        label    \"\"\n        graphics\n        [\n            x    494.52\n            y    565.67\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    18\n        label    \"\"\n        graphics\n        [\n            x    502.06\n            y    398.25\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    19\n        label    \"\"\n        graphics\n        [\n            x    309.54\n            y    169.57\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    20\n        label    \"\"\n        graphics\n        [\n            x    270.44\n            y    553.73\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    21\n        label    \"\"\n        graphics\n        [\n            x    232.69\n            y    460.30\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    22\n        label    \"\"\n        graphics\n        [\n            x    135.03\n            y    273.76\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    23\n        label    \"\"\n        graphics\n        [\n            x    377.37\n            y    559.95\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    24\n        label    \"\"\n        graphics\n        [\n            x    450.06\n            y    459.45\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    25\n        label    \"\"\n        graphics\n        [\n            x    21.03\n            y    63.79\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    26\n        label    \"\"\n        graphics\n        [\n            x    596.92\n            y    26.26\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    27\n        label    \"\"\n        graphics\n        [\n            x    57.98\n            y    88.78\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    28\n        label    \"\"\n        graphics\n        [\n            x    604.92\n            y    337.02\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    29\n        label    \"\"\n        graphics\n        [\n            x    615.20\n            y    438.81\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    30\n        label    \"\"\n        graphics\n        [\n            x    607.26\n            y    569.91\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    31\n        label    \"\"\n        graphics\n        [\n            x    334.87\n            y    401.60\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    32\n        label    \"\"\n        graphics\n        [\n            x    196.25\n            y    296.86\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    33\n        label    \"\"\n        graphics\n        [\n            x    80.40\n            y    118.43\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    34\n        label    \"\"\n        graphics\n        [\n            x    212.01\n            y    355.20\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    35\n        label    \"\"\n        graphics\n        [\n            x    194.08\n            y    497.48\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    36\n        label    \"\"\n        graphics\n        [\n            x    221.18\n            y    20.29\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    37\n        label    \"\"\n        graphics\n        [\n            x    543.17\n            y    336.73\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    38\n        label    \"\"\n        graphics\n        [\n            x    367.72\n            y    167.06\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    39\n        label    \"\"\n        graphics\n        [\n            x    559.65\n            y    154.66\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    40\n        label    \"\"\n        graphics\n        [\n            x    99.79\n            y    355.72\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    41\n        label    \"\"\n        graphics\n        [\n            x    239.18\n            y    463.54\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    42\n        label    \"\"\n        graphics\n        [\n            x    609.01\n            y    500.60\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    43\n        label    \"\"\n        graphics\n        [\n            x    483.12\n            y    353.71\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    44\n        label    \"\"\n        graphics\n        [\n            x    589.75\n            y    33.71\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    45\n        label    \"\"\n        graphics\n        [\n            x    403.40\n            y    565.26\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    46\n        label    \"\"\n        graphics\n        [\n            x    3.86\n            y    147.20\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    47\n        label    \"\"\n        graphics\n        [\n            x    566.30\n            y    397.60\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    48\n        label    \"\"\n        graphics\n        [\n            x    561.00\n            y    19.90\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    49\n        label    \"\"\n        graphics\n        [\n            x    389.56\n            y    313.87\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    edge\n    [\n        source    1\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    10\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    11\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    12\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    13\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    14\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    15\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    16\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    17\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    18\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    19\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    19\n        target    33\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    2\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    20\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    20\n        target    30\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    21\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    22\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    23\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    24\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    25\n        target    19\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    26\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    27\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    28\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    29\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    3\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    30\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    31\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    32\n        target    26\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    33\n        target    29\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    34\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    35\n        target    20\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    35\n        target    33\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    36\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    37\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    37\n        target    31\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    38\n        target    32\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    39\n        target    37\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    4\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    40\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    41\n        target    20\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    42\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    43\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    44\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    45\n        target    34\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    46\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    46\n        target    35\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    47\n        target    42\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    48\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    48\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    49\n        target    47\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    5\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    6\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    7\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    8\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    9\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n]\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v50e55.tglf",
    "content": "0 385.000 51.000 30.000 30.000\n1 496.000 106.000 30.000 30.000\n2 92.000 100.000 30.000 30.000\n3 309.000 372.000 30.000 30.000\n4 434.000 302.000 30.000 30.000\n5 353.000 159.000 30.000 30.000\n6 202.000 342.000 30.000 30.000\n7 29.000 182.000 30.000 30.000\n8 108.000 480.000 30.000 30.000\n9 345.000 214.000 30.000 30.000\n10 286.000 595.000 30.000 30.000\n11 494.000 182.000 30.000 30.000\n12 105.000 52.000 30.000 30.000\n13 115.000 456.000 30.000 30.000\n14 261.000 529.000 30.000 30.000\n15 523.000 505.000 30.000 30.000\n16 141.000 574.000 30.000 30.000\n17 494.000 565.000 30.000 30.000\n18 502.000 398.000 30.000 30.000\n19 309.000 169.000 30.000 30.000\n20 270.000 553.000 30.000 30.000\n21 232.000 460.000 30.000 30.000\n22 135.000 273.000 30.000 30.000\n23 377.000 559.000 30.000 30.000\n24 450.000 459.000 30.000 30.000\n25 21.000 63.000 30.000 30.000\n26 596.000 26.000 30.000 30.000\n27 57.000 88.000 30.000 30.000\n28 604.000 337.000 30.000 30.000\n29 615.000 438.000 30.000 30.000\n30 607.000 569.000 30.000 30.000\n31 334.000 401.000 30.000 30.000\n32 196.000 296.000 30.000 30.000\n33 80.000 118.000 30.000 30.000\n34 212.000 355.000 30.000 30.000\n35 194.000 497.000 30.000 30.000\n36 221.000 20.000 30.000 30.000\n37 543.000 336.000 30.000 30.000\n38 367.000 167.000 30.000 30.000\n39 559.000 154.000 30.000 30.000\n40 99.000 355.000 30.000 30.000\n41 239.000 463.000 30.000 30.000\n42 609.000 500.000 30.000 30.000\n43 483.000 353.000 30.000 30.000\n44 589.000 33.000 30.000 30.000\n45 403.000 565.000 30.000 30.000\n46 3.000 147.000 30.000 30.000\n47 566.000 397.000 30.000 30.000\n48 561.000 19.000 30.000 30.000\n49 389.000 313.000 30.000 30.000\n#\n4 3\n48 2\n12 9\n11 3\n28 9\n20 10\n39 37\n32 26\n24 12\n21 14\n48 11\n15 6\n42 8\n41 20\n19 33\n3 0\n1 0\n8 4\n16 0\n44 12\n27 18\n25 19\n26 9\n43 17\n47 42\n49 47\n7 4\n35 20\n6 1\n9 6\n10 5\n35 33\n37 13\n46 15\n29 10\n14 3\n36 16\n31 8\n38 32\n37 31\n45 34\n19 2\n46 35\n40 13\n23 8\n5 0\n30 10\n13 3\n17 14\n18 5\n33 29\n22 17\n34 12\n20 30\n2 0\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v50e60.gml",
    "content": "graph\n[\n    node\n    [\n        id    0\n        label    \"\"\n        graphics\n        [\n            x    78.95\n            y    356.96\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    1\n        label    \"\"\n        graphics\n        [\n            x    213.44\n            y    395.32\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    2\n        label    \"\"\n        graphics\n        [\n            x    38.55\n            y    325.72\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    3\n        label    \"\"\n        graphics\n        [\n            x    294.86\n            y    3.46\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    4\n        label    \"\"\n        graphics\n        [\n            x    380.91\n            y    170.28\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    5\n        label    \"\"\n        graphics\n        [\n            x    214.71\n            y    176.46\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    6\n        label    \"\"\n        graphics\n        [\n            x    555.02\n            y    383.05\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    7\n        label    \"\"\n        graphics\n        [\n            x    176.84\n            y    90.75\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    8\n        label    \"\"\n        graphics\n        [\n            x    561.46\n            y    458.89\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    9\n        label    \"\"\n        graphics\n        [\n            x    83.76\n            y    393.43\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    10\n        label    \"\"\n        graphics\n        [\n            x    403.81\n            y    401.74\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    11\n        label    \"\"\n        graphics\n        [\n            x    377.10\n            y    351.08\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    12\n        label    \"\"\n        graphics\n        [\n            x    558.70\n            y    406.53\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    13\n        label    \"\"\n        graphics\n        [\n            x    550.22\n            y    545.83\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    14\n        label    \"\"\n        graphics\n        [\n            x    61.58\n            y    340.74\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    15\n        label    \"\"\n        graphics\n        [\n            x    158.49\n            y    81.07\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    16\n        label    \"\"\n        graphics\n        [\n            x    401.84\n            y    307.48\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    17\n        label    \"\"\n        graphics\n        [\n            x    377.24\n            y    106.83\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    18\n        label    \"\"\n        graphics\n        [\n            x    577.10\n            y    248.72\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    19\n        label    \"\"\n        graphics\n        [\n            x    188.30\n            y    466.86\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    20\n        label    \"\"\n        graphics\n        [\n            x    448.36\n            y    312.15\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    21\n        label    \"\"\n        graphics\n        [\n            x    425.97\n            y    219.92\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    22\n        label    \"\"\n        graphics\n        [\n            x    105.82\n            y    299.83\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    23\n        label    \"\"\n        graphics\n        [\n            x    327.42\n            y    534.17\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    24\n        label    \"\"\n        graphics\n        [\n            x    34.02\n            y    241.44\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    25\n        label    \"\"\n        graphics\n        [\n            x    279.58\n            y    624.19\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    26\n        label    \"\"\n        graphics\n        [\n            x    506.68\n            y    259.77\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    27\n        label    \"\"\n        graphics\n        [\n            x    339.61\n            y    498.46\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    28\n        label    \"\"\n        graphics\n        [\n            x    255.69\n            y    317.64\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    29\n        label    \"\"\n        graphics\n        [\n            x    616.55\n            y    40.38\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    30\n        label    \"\"\n        graphics\n        [\n            x    460.49\n            y    450.08\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    31\n        label    \"\"\n        graphics\n        [\n            x    273.58\n            y    422.92\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    32\n        label    \"\"\n        graphics\n        [\n            x    186.49\n            y    409.10\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    33\n        label    \"\"\n        graphics\n        [\n            x    311.26\n            y    151.99\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    34\n        label    \"\"\n        graphics\n        [\n            x    426.90\n            y    451.74\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    35\n        label    \"\"\n        graphics\n        [\n            x    424.85\n            y    568.97\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    36\n        label    \"\"\n        graphics\n        [\n            x    146.17\n            y    58.10\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    37\n        label    \"\"\n        graphics\n        [\n            x    617.97\n            y    18.22\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    38\n        label    \"\"\n        graphics\n        [\n            x    1.44\n            y    75.32\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    39\n        label    \"\"\n        graphics\n        [\n            x    429.29\n            y    488.40\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    40\n        label    \"\"\n        graphics\n        [\n            x    590.67\n            y    353.54\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    41\n        label    \"\"\n        graphics\n        [\n            x    586.28\n            y    527.04\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    42\n        label    \"\"\n        graphics\n        [\n            x    40.82\n            y    313.58\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    43\n        label    \"\"\n        graphics\n        [\n            x    373.11\n            y    212.40\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    44\n        label    \"\"\n        graphics\n        [\n            x    502.57\n            y    464.42\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    45\n        label    \"\"\n        graphics\n        [\n            x    135.28\n            y    119.75\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    46\n        label    \"\"\n        graphics\n        [\n            x    598.19\n            y    3.23\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    47\n        label    \"\"\n        graphics\n        [\n            x    383.68\n            y    198.70\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    48\n        label    \"\"\n        graphics\n        [\n            x    395.72\n            y    157.52\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    49\n        label    \"\"\n        graphics\n        [\n            x    421.17\n            y    497.93\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    edge\n    [\n        source    1\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    10\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    11\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    12\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    12\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    13\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    14\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    15\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    15\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    16\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    17\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    18\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    19\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    2\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    20\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    20\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    21\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    22\n        target    20\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    23\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    24\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    25\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    26\n        target    20\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    27\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    28\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    29\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    3\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    3\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    30\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    31\n        target    27\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    32\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    33\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    34\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    34\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    35\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    36\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    36\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    37\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    38\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    38\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    39\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    4\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    40\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    40\n        target    25\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    41\n        target    27\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    41\n        target    47\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    42\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    43\n        target    19\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    44\n        target    25\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    45\n        target    44\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    46\n        target    24\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    47\n        target    33\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    48\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    49\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    49\n        target    43\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    49\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    5\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    6\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    7\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    8\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    9\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n]\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v50e60.tglf",
    "content": "0 78.000 356.000 30.000 30.000\n1 213.000 395.000 30.000 30.000\n2 38.000 325.000 30.000 30.000\n3 294.000 3.000 30.000 30.000\n4 380.000 170.000 30.000 30.000\n5 214.000 176.000 30.000 30.000\n6 555.000 383.000 30.000 30.000\n7 176.000 90.000 30.000 30.000\n8 561.000 458.000 30.000 30.000\n9 83.000 393.000 30.000 30.000\n10 403.000 401.000 30.000 30.000\n11 377.000 351.000 30.000 30.000\n12 558.000 406.000 30.000 30.000\n13 550.000 545.000 30.000 30.000\n14 61.000 340.000 30.000 30.000\n15 158.000 81.000 30.000 30.000\n16 401.000 307.000 30.000 30.000\n17 377.000 106.000 30.000 30.000\n18 577.000 248.000 30.000 30.000\n19 188.000 466.000 30.000 30.000\n20 448.000 312.000 30.000 30.000\n21 425.000 219.000 30.000 30.000\n22 105.000 299.000 30.000 30.000\n23 327.000 534.000 30.000 30.000\n24 34.000 241.000 30.000 30.000\n25 279.000 624.000 30.000 30.000\n26 506.000 259.000 30.000 30.000\n27 339.000 498.000 30.000 30.000\n28 255.000 317.000 30.000 30.000\n29 616.000 40.000 30.000 30.000\n30 460.000 450.000 30.000 30.000\n31 273.000 422.000 30.000 30.000\n32 186.000 409.000 30.000 30.000\n33 311.000 151.000 30.000 30.000\n34 426.000 451.000 30.000 30.000\n35 424.000 568.000 30.000 30.000\n36 146.000 58.000 30.000 30.000\n37 617.000 18.000 30.000 30.000\n38 1.000 75.000 30.000 30.000\n39 429.000 488.000 30.000 30.000\n40 590.000 353.000 30.000 30.000\n41 586.000 527.000 30.000 30.000\n42 40.000 313.000 30.000 30.000\n43 373.000 212.000 30.000 30.000\n44 502.000 464.000 30.000 30.000\n45 135.000 119.000 30.000 30.000\n46 598.000 3.000 30.000 30.000\n47 383.000 198.000 30.000 30.000\n48 395.000 157.000 30.000 30.000\n49 421.000 497.000 30.000 30.000\n#\n39 9\n10 3\n22 20\n48 16\n37 11\n20 13\n36 0\n5 4\n29 9\n7 4\n19 1\n49 43\n38 18\n11 1\n24 11\n26 20\n1 0\n2 1\n41 47\n9 8\n35 12\n3 1\n33 8\n8 4\n40 23\n21 8\n43 19\n46 24\n49 6\n44 25\n15 21\n3 2\n23 11\n32 17\n12 11\n28 5\n15 7\n18 5\n27 13\n47 33\n13 9\n41 27\n45 44\n38 7\n34 2\n14 1\n31 27\n16 3\n6 5\n30 23\n20 18\n4 1\n17 12\n25 7\n34 21\n42 21\n40 25\n12 7\n49 14\n36 10\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v50e65.gml",
    "content": "graph\n[\n    node\n    [\n        id    0\n        label    \"\"\n        graphics\n        [\n            x    236.36\n            y    75.50\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    1\n        label    \"\"\n        graphics\n        [\n            x    472.27\n            y    462.90\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    2\n        label    \"\"\n        graphics\n        [\n            x    419.11\n            y    123.96\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    3\n        label    \"\"\n        graphics\n        [\n            x    605.15\n            y    384.44\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    4\n        label    \"\"\n        graphics\n        [\n            x    164.21\n            y    182.97\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    5\n        label    \"\"\n        graphics\n        [\n            x    227.06\n            y    499.32\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    6\n        label    \"\"\n        graphics\n        [\n            x    363.78\n            y    299.09\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    7\n        label    \"\"\n        graphics\n        [\n            x    329.49\n            y    252.32\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    8\n        label    \"\"\n        graphics\n        [\n            x    213.77\n            y    379.54\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    9\n        label    \"\"\n        graphics\n        [\n            x    526.57\n            y    603.69\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    10\n        label    \"\"\n        graphics\n        [\n            x    122.48\n            y    246.58\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    11\n        label    \"\"\n        graphics\n        [\n            x    610.91\n            y    506.78\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    12\n        label    \"\"\n        graphics\n        [\n            x    172.77\n            y    571.72\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    13\n        label    \"\"\n        graphics\n        [\n            x    280.33\n            y    181.81\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    14\n        label    \"\"\n        graphics\n        [\n            x    487.72\n            y    177.91\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    15\n        label    \"\"\n        graphics\n        [\n            x    192.38\n            y    117.75\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    16\n        label    \"\"\n        graphics\n        [\n            x    3.32\n            y    196.49\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    17\n        label    \"\"\n        graphics\n        [\n            x    605.07\n            y    220.33\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    18\n        label    \"\"\n        graphics\n        [\n            x    201.44\n            y    481.67\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    19\n        label    \"\"\n        graphics\n        [\n            x    424.20\n            y    213.38\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    20\n        label    \"\"\n        graphics\n        [\n            x    183.35\n            y    98.57\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    21\n        label    \"\"\n        graphics\n        [\n            x    218.00\n            y    377.58\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    22\n        label    \"\"\n        graphics\n        [\n            x    546.06\n            y    625.66\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    23\n        label    \"\"\n        graphics\n        [\n            x    492.48\n            y    183.77\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    24\n        label    \"\"\n        graphics\n        [\n            x    465.94\n            y    271.85\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    25\n        label    \"\"\n        graphics\n        [\n            x    65.50\n            y    323.74\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    26\n        label    \"\"\n        graphics\n        [\n            x    4.63\n            y    70.39\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    27\n        label    \"\"\n        graphics\n        [\n            x    527.20\n            y    467.80\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    28\n        label    \"\"\n        graphics\n        [\n            x    368.83\n            y    123.46\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    29\n        label    \"\"\n        graphics\n        [\n            x    390.97\n            y    412.72\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    30\n        label    \"\"\n        graphics\n        [\n            x    431.82\n            y    596.67\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    31\n        label    \"\"\n        graphics\n        [\n            x    345.56\n            y    320.88\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    32\n        label    \"\"\n        graphics\n        [\n            x    589.75\n            y    154.25\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    33\n        label    \"\"\n        graphics\n        [\n            x    172.79\n            y    507.68\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    34\n        label    \"\"\n        graphics\n        [\n            x    388.09\n            y    246.89\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    35\n        label    \"\"\n        graphics\n        [\n            x    382.39\n            y    14.02\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    36\n        label    \"\"\n        graphics\n        [\n            x    230.86\n            y    295.93\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    37\n        label    \"\"\n        graphics\n        [\n            x    83.75\n            y    268.43\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    38\n        label    \"\"\n        graphics\n        [\n            x    62.48\n            y    118.58\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    39\n        label    \"\"\n        graphics\n        [\n            x    335.00\n            y    21.22\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    40\n        label    \"\"\n        graphics\n        [\n            x    404.03\n            y    277.92\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    41\n        label    \"\"\n        graphics\n        [\n            x    60.40\n            y    589.45\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    42\n        label    \"\"\n        graphics\n        [\n            x    635.41\n            y    557.93\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    43\n        label    \"\"\n        graphics\n        [\n            x    28.96\n            y    7.26\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    44\n        label    \"\"\n        graphics\n        [\n            x    113.20\n            y    58.10\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    45\n        label    \"\"\n        graphics\n        [\n            x    602.88\n            y    484.06\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    46\n        label    \"\"\n        graphics\n        [\n            x    307.82\n            y    45.60\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    47\n        label    \"\"\n        graphics\n        [\n            x    153.28\n            y    315.89\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    48\n        label    \"\"\n        graphics\n        [\n            x    62.87\n            y    102.09\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    49\n        label    \"\"\n        graphics\n        [\n            x    359.52\n            y    476.37\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    edge\n    [\n        source    1\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    10\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    11\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    11\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    12\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    13\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    14\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    15\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    15\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    16\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    17\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    17\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    18\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    18\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    19\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    2\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    2\n        target    33\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    20\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    21\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    22\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    22\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    23\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    23\n        target    31\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    24\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    25\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    25\n        target    33\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    26\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    27\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    28\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    29\n        target    20\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    3\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    30\n        target    25\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    30\n        target    47\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    30\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    31\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    31\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    32\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    33\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    33\n        target    30\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    34\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    35\n        target    24\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    36\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    37\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    37\n        target    28\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    38\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    39\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    39\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    4\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    40\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    40\n        target    25\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    41\n        target    37\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    42\n        target    25\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    43\n        target    38\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    44\n        target    19\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    45\n        target    20\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    46\n        target    45\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    47\n        target    20\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    48\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    49\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    5\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    6\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    7\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    8\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    9\n        target    24\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    9\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n]\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v50e65.tglf",
    "content": "0 236.000 75.000 30.000 30.000\n1 472.000 462.000 30.000 30.000\n2 419.000 123.000 30.000 30.000\n3 605.000 384.000 30.000 30.000\n4 164.000 182.000 30.000 30.000\n5 227.000 499.000 30.000 30.000\n6 363.000 299.000 30.000 30.000\n7 329.000 252.000 30.000 30.000\n8 213.000 379.000 30.000 30.000\n9 526.000 603.000 30.000 30.000\n10 122.000 246.000 30.000 30.000\n11 610.000 506.000 30.000 30.000\n12 172.000 571.000 30.000 30.000\n13 280.000 181.000 30.000 30.000\n14 487.000 177.000 30.000 30.000\n15 192.000 117.000 30.000 30.000\n16 3.000 196.000 30.000 30.000\n17 605.000 220.000 30.000 30.000\n18 201.000 481.000 30.000 30.000\n19 424.000 213.000 30.000 30.000\n20 183.000 98.000 30.000 30.000\n21 218.000 377.000 30.000 30.000\n22 546.000 625.000 30.000 30.000\n23 492.000 183.000 30.000 30.000\n24 465.000 271.000 30.000 30.000\n25 65.000 323.000 30.000 30.000\n26 4.000 70.000 30.000 30.000\n27 527.000 467.000 30.000 30.000\n28 368.000 123.000 30.000 30.000\n29 390.000 412.000 30.000 30.000\n30 431.000 596.000 30.000 30.000\n31 345.000 320.000 30.000 30.000\n32 589.000 154.000 30.000 30.000\n33 172.000 507.000 30.000 30.000\n34 388.000 246.000 30.000 30.000\n35 382.000 14.000 30.000 30.000\n36 230.000 295.000 30.000 30.000\n37 83.000 268.000 30.000 30.000\n38 62.000 118.000 30.000 30.000\n39 335.000 21.000 30.000 30.000\n40 404.000 277.000 30.000 30.000\n41 60.000 589.000 30.000 30.000\n42 635.000 557.000 30.000 30.000\n43 28.000 7.000 30.000 30.000\n44 113.000 58.000 30.000 30.000\n45 602.000 484.000 30.000 30.000\n46 307.000 45.000 30.000 30.000\n47 153.000 315.000 30.000 30.000\n48 62.000 102.000 30.000 30.000\n49 359.000 476.000 30.000 30.000\n#\n17 5\n32 17\n44 19\n11 12\n11 2\n40 25\n49 5\n26 8\n3 0\n9 3\n8 0\n20 12\n37 28\n48 15\n6 0\n39 21\n28 1\n30 25\n17 2\n14 5\n2 0\n5 0\n39 8\n30 9\n4 3\n43 38\n33 16\n33 30\n18 8\n27 7\n10 8\n7 1\n31 6\n29 20\n35 24\n34 15\n23 18\n13 10\n36 9\n38 15\n22 0\n9 24\n12 2\n1 0\n45 20\n30 47\n21 2\n47 20\n42 25\n22 11\n24 21\n46 45\n18 12\n37 17\n19 3\n16 15\n31 7\n23 31\n25 33\n25 23\n41 37\n15 0\n15 4\n40 18\n2 33\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v50e70.gml",
    "content": "graph\n[\n    node\n    [\n        id    0\n        label    \"\"\n        graphics\n        [\n            x    36.06\n            y    498.71\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    1\n        label    \"\"\n        graphics\n        [\n            x    396.57\n            y    526.42\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    2\n        label    \"\"\n        graphics\n        [\n            x    186.40\n            y    619.38\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    3\n        label    \"\"\n        graphics\n        [\n            x    352.81\n            y    623.76\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    4\n        label    \"\"\n        graphics\n        [\n            x    399.16\n            y    584.69\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    5\n        label    \"\"\n        graphics\n        [\n            x    425.36\n            y    27.11\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    6\n        label    \"\"\n        graphics\n        [\n            x    591.54\n            y    225.70\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    7\n        label    \"\"\n        graphics\n        [\n            x    93.05\n            y    90.94\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    8\n        label    \"\"\n        graphics\n        [\n            x    244.90\n            y    402.48\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    9\n        label    \"\"\n        graphics\n        [\n            x    59.45\n            y    546.98\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    10\n        label    \"\"\n        graphics\n        [\n            x    440.66\n            y    182.37\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    11\n        label    \"\"\n        graphics\n        [\n            x    99.87\n            y    85.55\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    12\n        label    \"\"\n        graphics\n        [\n            x    114.09\n            y    388.45\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    13\n        label    \"\"\n        graphics\n        [\n            x    409.44\n            y    237.55\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    14\n        label    \"\"\n        graphics\n        [\n            x    208.44\n            y    344.98\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    15\n        label    \"\"\n        graphics\n        [\n            x    476.60\n            y    497.33\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    16\n        label    \"\"\n        graphics\n        [\n            x    119.42\n            y    590.05\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    17\n        label    \"\"\n        graphics\n        [\n            x    289.81\n            y    336.11\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    18\n        label    \"\"\n        graphics\n        [\n            x    64.50\n            y    339.10\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    19\n        label    \"\"\n        graphics\n        [\n            x    270.52\n            y    509.00\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    20\n        label    \"\"\n        graphics\n        [\n            x    80.58\n            y    392.71\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    21\n        label    \"\"\n        graphics\n        [\n            x    502.92\n            y    373.19\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    22\n        label    \"\"\n        graphics\n        [\n            x    140.94\n            y    92.75\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    23\n        label    \"\"\n        graphics\n        [\n            x    301.51\n            y    555.98\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    24\n        label    \"\"\n        graphics\n        [\n            x    520.03\n            y    206.12\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    25\n        label    \"\"\n        graphics\n        [\n            x    564.67\n            y    46.26\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    26\n        label    \"\"\n        graphics\n        [\n            x    534.73\n            y    609.83\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    27\n        label    \"\"\n        graphics\n        [\n            x    268.42\n            y    484.55\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    28\n        label    \"\"\n        graphics\n        [\n            x    354.59\n            y    538.24\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    29\n        label    \"\"\n        graphics\n        [\n            x    480.18\n            y    265.83\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    30\n        label    \"\"\n        graphics\n        [\n            x    613.35\n            y    56.71\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    31\n        label    \"\"\n        graphics\n        [\n            x    422.04\n            y    545.90\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    32\n        label    \"\"\n        graphics\n        [\n            x    312.20\n            y    428.68\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    33\n        label    \"\"\n        graphics\n        [\n            x    351.45\n            y    361.11\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    34\n        label    \"\"\n        graphics\n        [\n            x    318.20\n            y    401.49\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    35\n        label    \"\"\n        graphics\n        [\n            x    48.88\n            y    458.08\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    36\n        label    \"\"\n        graphics\n        [\n            x    48.37\n            y    623.85\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    37\n        label    \"\"\n        graphics\n        [\n            x    383.86\n            y    601.07\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    38\n        label    \"\"\n        graphics\n        [\n            x    184.94\n            y    270.45\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    39\n        label    \"\"\n        graphics\n        [\n            x    180.57\n            y    107.98\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    40\n        label    \"\"\n        graphics\n        [\n            x    329.91\n            y    183.63\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    41\n        label    \"\"\n        graphics\n        [\n            x    145.65\n            y    617.39\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    42\n        label    \"\"\n        graphics\n        [\n            x    172.07\n            y    234.98\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    43\n        label    \"\"\n        graphics\n        [\n            x    466.80\n            y    380.76\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    44\n        label    \"\"\n        graphics\n        [\n            x    167.01\n            y    330.42\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    45\n        label    \"\"\n        graphics\n        [\n            x    151.98\n            y    411.98\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    46\n        label    \"\"\n        graphics\n        [\n            x    230.52\n            y    172.25\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    47\n        label    \"\"\n        graphics\n        [\n            x    178.57\n            y    91.50\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    48\n        label    \"\"\n        graphics\n        [\n            x    403.42\n            y    467.44\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    49\n        label    \"\"\n        graphics\n        [\n            x    23.95\n            y    323.00\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    edge\n    [\n        source    1\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    10\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    11\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    12\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    13\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    14\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    15\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    16\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    17\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    17\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    18\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    18\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    19\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    2\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    2\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    20\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    21\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    22\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    23\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    23\n        target    33\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    24\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    24\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    25\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    25\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    26\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    27\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    28\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    28\n        target    25\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    29\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    29\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    29\n        target    33\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    3\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    3\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    30\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    30\n        target    29\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    31\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    32\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    33\n        target    20\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    33\n        target    27\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    33\n        target    44\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    34\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    34\n        target    47\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    34\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    35\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    36\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    37\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    38\n        target    29\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    39\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    4\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    4\n        target    38\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    40\n        target    24\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    40\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    41\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    42\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    43\n        target    26\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    43\n        target    27\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    44\n        target    35\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    45\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    45\n        target    35\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    46\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    47\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    48\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    48\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    49\n        target    42\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    5\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    6\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    7\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    8\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    9\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    9\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n]\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v50e70.tglf",
    "content": "0 36.000 498.000 30.000 30.000\n1 396.000 526.000 30.000 30.000\n2 186.000 619.000 30.000 30.000\n3 352.000 623.000 30.000 30.000\n4 399.000 584.000 30.000 30.000\n5 425.000 27.000 30.000 30.000\n6 591.000 225.000 30.000 30.000\n7 93.000 90.000 30.000 30.000\n8 244.000 402.000 30.000 30.000\n9 59.000 546.000 30.000 30.000\n10 440.000 182.000 30.000 30.000\n11 99.000 85.000 30.000 30.000\n12 114.000 388.000 30.000 30.000\n13 409.000 237.000 30.000 30.000\n14 208.000 344.000 30.000 30.000\n15 476.000 497.000 30.000 30.000\n16 119.000 590.000 30.000 30.000\n17 289.000 336.000 30.000 30.000\n18 64.000 339.000 30.000 30.000\n19 270.000 509.000 30.000 30.000\n20 80.000 392.000 30.000 30.000\n21 502.000 373.000 30.000 30.000\n22 140.000 92.000 30.000 30.000\n23 301.000 555.000 30.000 30.000\n24 520.000 206.000 30.000 30.000\n25 564.000 46.000 30.000 30.000\n26 534.000 609.000 30.000 30.000\n27 268.000 484.000 30.000 30.000\n28 354.000 538.000 30.000 30.000\n29 480.000 265.000 30.000 30.000\n30 613.000 56.000 30.000 30.000\n31 422.000 545.000 30.000 30.000\n32 312.000 428.000 30.000 30.000\n33 351.000 361.000 30.000 30.000\n34 318.000 401.000 30.000 30.000\n35 48.000 458.000 30.000 30.000\n36 48.000 623.000 30.000 30.000\n37 383.000 601.000 30.000 30.000\n38 184.000 270.000 30.000 30.000\n39 180.000 107.000 30.000 30.000\n40 329.000 183.000 30.000 30.000\n41 145.000 617.000 30.000 30.000\n42 172.000 234.000 30.000 30.000\n43 466.000 380.000 30.000 30.000\n44 167.000 330.000 30.000 30.000\n45 151.000 411.000 30.000 30.000\n46 230.000 172.000 30.000 30.000\n47 178.000 91.000 30.000 30.000\n48 403.000 467.000 30.000 30.000\n49 23.000 323.000 30.000 30.000\n#\n9 7\n40 8\n19 4\n45 35\n36 6\n43 27\n25 8\n29 18\n31 7\n14 12\n2 1\n18 10\n42 22\n28 25\n49 42\n23 16\n21 15\n17 1\n47 13\n27 7\n17 14\n28 2\n24 11\n37 15\n32 21\n24 1\n3 21\n34 7\n29 33\n45 18\n34 10\n10 5\n43 26\n44 35\n3 0\n23 33\n1 0\n39 7\n7 5\n8 4\n9 12\n29 21\n30 29\n41 17\n2 11\n22 5\n20 8\n33 44\n40 24\n13 0\n4 38\n46 10\n12 5\n33 20\n26 11\n6 4\n33 27\n15 5\n11 3\n30 12\n48 17\n35 16\n48 0\n5 2\n16 1\n25 5\n18 5\n34 47\n38 29\n4 1\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v50e75.gml",
    "content": "graph\n[\n    node\n    [\n        id    0\n        label    \"\"\n        graphics\n        [\n            x    193.04\n            y    269.28\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    1\n        label    \"\"\n        graphics\n        [\n            x    220.65\n            y    66.51\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    2\n        label    \"\"\n        graphics\n        [\n            x    445.26\n            y    128.42\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    3\n        label    \"\"\n        graphics\n        [\n            x    505.44\n            y    45.65\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    4\n        label    \"\"\n        graphics\n        [\n            x    225.32\n            y    507.50\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    5\n        label    \"\"\n        graphics\n        [\n            x    61.18\n            y    99.17\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    6\n        label    \"\"\n        graphics\n        [\n            x    441.96\n            y    351.62\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    7\n        label    \"\"\n        graphics\n        [\n            x    573.63\n            y    123.67\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    8\n        label    \"\"\n        graphics\n        [\n            x    229.55\n            y    281.15\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    9\n        label    \"\"\n        graphics\n        [\n            x    450.99\n            y    130.15\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    10\n        label    \"\"\n        graphics\n        [\n            x    410.24\n            y    48.91\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    11\n        label    \"\"\n        graphics\n        [\n            x    387.30\n            y    563.28\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    12\n        label    \"\"\n        graphics\n        [\n            x    342.94\n            y    186.24\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    13\n        label    \"\"\n        graphics\n        [\n            x    299.32\n            y    408.27\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    14\n        label    \"\"\n        graphics\n        [\n            x    118.73\n            y    256.66\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    15\n        label    \"\"\n        graphics\n        [\n            x    552.89\n            y    268.94\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    16\n        label    \"\"\n        graphics\n        [\n            x    94.29\n            y    131.31\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    17\n        label    \"\"\n        graphics\n        [\n            x    583.78\n            y    363.08\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    18\n        label    \"\"\n        graphics\n        [\n            x    462.08\n            y    328.56\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    19\n        label    \"\"\n        graphics\n        [\n            x    82.33\n            y    556.11\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    20\n        label    \"\"\n        graphics\n        [\n            x    195.77\n            y    322.57\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    21\n        label    \"\"\n        graphics\n        [\n            x    305.23\n            y    406.57\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    22\n        label    \"\"\n        graphics\n        [\n            x    279.74\n            y    235.00\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    23\n        label    \"\"\n        graphics\n        [\n            x    483.59\n            y    247.91\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    24\n        label    \"\"\n        graphics\n        [\n            x    461.46\n            y    155.50\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    25\n        label    \"\"\n        graphics\n        [\n            x    310.62\n            y    67.03\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    26\n        label    \"\"\n        graphics\n        [\n            x    320.06\n            y    606.16\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    27\n        label    \"\"\n        graphics\n        [\n            x    259.09\n            y    156.66\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    28\n        label    \"\"\n        graphics\n        [\n            x    628.75\n            y    461.23\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    29\n        label    \"\"\n        graphics\n        [\n            x    417.93\n            y    133.67\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    30\n        label    \"\"\n        graphics\n        [\n            x    360.74\n            y    158.71\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    31\n        label    \"\"\n        graphics\n        [\n            x    536.95\n            y    174.83\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    32\n        label    \"\"\n        graphics\n        [\n            x    561.24\n            y    610.72\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    33\n        label    \"\"\n        graphics\n        [\n            x    570.19\n            y    433.97\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    34\n        label    \"\"\n        graphics\n        [\n            x    333.19\n            y    296.83\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    35\n        label    \"\"\n        graphics\n        [\n            x    134.66\n            y    541.46\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    36\n        label    \"\"\n        graphics\n        [\n            x    340.38\n            y    230.71\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    37\n        label    \"\"\n        graphics\n        [\n            x    3.78\n            y    176.67\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    38\n        label    \"\"\n        graphics\n        [\n            x    235.22\n            y    527.74\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    39\n        label    \"\"\n        graphics\n        [\n            x    602.79\n            y    566.69\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    40\n        label    \"\"\n        graphics\n        [\n            x    89.49\n            y    46.10\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    41\n        label    \"\"\n        graphics\n        [\n            x    329.39\n            y    485.26\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    42\n        label    \"\"\n        graphics\n        [\n            x    229.38\n            y    302.83\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    43\n        label    \"\"\n        graphics\n        [\n            x    28.74\n            y    258.94\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    44\n        label    \"\"\n        graphics\n        [\n            x    623.77\n            y    193.41\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    45\n        label    \"\"\n        graphics\n        [\n            x    412.71\n            y    95.97\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    46\n        label    \"\"\n        graphics\n        [\n            x    631.15\n            y    433.28\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    47\n        label    \"\"\n        graphics\n        [\n            x    46.77\n            y    199.65\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    48\n        label    \"\"\n        graphics\n        [\n            x    253.19\n            y    37.63\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    49\n        label    \"\"\n        graphics\n        [\n            x    380.28\n            y    372.34\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    edge\n    [\n        source    0\n        target    38\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    1\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    1\n        target    34\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    10\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    11\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    12\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    13\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    14\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    15\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    15\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    16\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    17\n        target    42\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    17\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    18\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    18\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    19\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    2\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    2\n        target    27\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    2\n        target    36\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    20\n        target    49\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    20\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    21\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    22\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    23\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    24\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    25\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    26\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    27\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    27\n        target    32\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    28\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    29\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    29\n        target    27\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    3\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    30\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    31\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    31\n        target    24\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    31\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    32\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    32\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    33\n        target    45\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    33\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    34\n        target    32\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    35\n        target    33\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    36\n        target    30\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    37\n        target    27\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    38\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    38\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    38\n        target    24\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    38\n        target    36\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    39\n        target    27\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    4\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    4\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    4\n        target    26\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    40\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    41\n        target    40\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    42\n        target    33\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    43\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    43\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    44\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    44\n        target    33\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    45\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    46\n        target    26\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    47\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    47\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    47\n        target    49\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    48\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    48\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    48\n        target    44\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    49\n        target    27\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    5\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    6\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    7\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    8\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    8\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    9\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n]\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v50e75.tglf",
    "content": "0 193.000 269.000 30.000 30.000\n1 220.000 66.000 30.000 30.000\n2 445.000 128.000 30.000 30.000\n3 505.000 45.000 30.000 30.000\n4 225.000 507.000 30.000 30.000\n5 61.000 99.000 30.000 30.000\n6 441.000 351.000 30.000 30.000\n7 573.000 123.000 30.000 30.000\n8 229.000 281.000 30.000 30.000\n9 450.000 130.000 30.000 30.000\n10 410.000 48.000 30.000 30.000\n11 387.000 563.000 30.000 30.000\n12 342.000 186.000 30.000 30.000\n13 299.000 408.000 30.000 30.000\n14 118.000 256.000 30.000 30.000\n15 552.000 268.000 30.000 30.000\n16 94.000 131.000 30.000 30.000\n17 583.000 363.000 30.000 30.000\n18 462.000 328.000 30.000 30.000\n19 82.000 556.000 30.000 30.000\n20 195.000 322.000 30.000 30.000\n21 305.000 406.000 30.000 30.000\n22 279.000 235.000 30.000 30.000\n23 483.000 247.000 30.000 30.000\n24 461.000 155.000 30.000 30.000\n25 310.000 67.000 30.000 30.000\n26 320.000 606.000 30.000 30.000\n27 259.000 156.000 30.000 30.000\n28 628.000 461.000 30.000 30.000\n29 417.000 133.000 30.000 30.000\n30 360.000 158.000 30.000 30.000\n31 536.000 174.000 30.000 30.000\n32 561.000 610.000 30.000 30.000\n33 570.000 433.000 30.000 30.000\n34 333.000 296.000 30.000 30.000\n35 134.000 541.000 30.000 30.000\n36 340.000 230.000 30.000 30.000\n37 3.000 176.000 30.000 30.000\n38 235.000 527.000 30.000 30.000\n39 602.000 566.000 30.000 30.000\n40 89.000 46.000 30.000 30.000\n41 329.000 485.000 30.000 30.000\n42 229.000 302.000 30.000 30.000\n43 28.000 258.000 30.000 30.000\n44 623.000 193.000 30.000 30.000\n45 412.000 95.000 30.000 30.000\n46 631.000 433.000 30.000 30.000\n47 46.000 199.000 30.000 30.000\n48 253.000 37.000 30.000 30.000\n49 380.000 372.000 30.000 30.000\n#\n21 8\n4 1\n20 8\n44 21\n0 38\n5 3\n17 5\n7 0\n12 3\n33 8\n31 24\n38 36\n32 18\n38 24\n45 12\n1 0\n4 16\n15 17\n42 33\n23 0\n38 12\n24 21\n16 11\n27 23\n44 33\n10 7\n43 5\n8 0\n46 26\n17 42\n41 40\n47 49\n34 32\n25 23\n31 0\n22 11\n39 27\n15 11\n36 30\n2 0\n26 5\n29 10\n20 49\n48 11\n3 1\n18 2\n27 32\n30 10\n11 4\n28 4\n6 0\n1 34\n33 45\n19 1\n47 21\n35 33\n14 5\n43 2\n9 1\n13 8\n2 27\n32 17\n8 6\n40 15\n49 27\n31 6\n29 27\n47 23\n37 27\n2 36\n18 10\n48 44\n38 23\n48 2\n4 26\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v60e60.gml",
    "content": "graph\n[\n    node\n    [\n        id    0\n        label    \"\"\n        graphics\n        [\n            x    510.59\n            y    297.97\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    1\n        label    \"\"\n        graphics\n        [\n            x    321.17\n            y    492.26\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    2\n        label    \"\"\n        graphics\n        [\n            x    209.66\n            y    573.84\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    3\n        label    \"\"\n        graphics\n        [\n            x    192.84\n            y    326.36\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    4\n        label    \"\"\n        graphics\n        [\n            x    276.97\n            y    263.67\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    5\n        label    \"\"\n        graphics\n        [\n            x    599.89\n            y    170.38\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    6\n        label    \"\"\n        graphics\n        [\n            x    653.50\n            y    687.02\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    7\n        label    \"\"\n        graphics\n        [\n            x    669.25\n            y    411.19\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    8\n        label    \"\"\n        graphics\n        [\n            x    693.40\n            y    227.47\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    9\n        label    \"\"\n        graphics\n        [\n            x    304.66\n            y    91.90\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    10\n        label    \"\"\n        graphics\n        [\n            x    408.41\n            y    506.72\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    11\n        label    \"\"\n        graphics\n        [\n            x    210.08\n            y    598.45\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    12\n        label    \"\"\n        graphics\n        [\n            x    277.40\n            y    367.85\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    13\n        label    \"\"\n        graphics\n        [\n            x    566.21\n            y    180.16\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    14\n        label    \"\"\n        graphics\n        [\n            x    70.14\n            y    478.60\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    15\n        label    \"\"\n        graphics\n        [\n            x    322.86\n            y    599.46\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    16\n        label    \"\"\n        graphics\n        [\n            x    507.97\n            y    5.93\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    17\n        label    \"\"\n        graphics\n        [\n            x    487.89\n            y    511.35\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    18\n        label    \"\"\n        graphics\n        [\n            x    386.88\n            y    344.50\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    19\n        label    \"\"\n        graphics\n        [\n            x    427.14\n            y    474.07\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    20\n        label    \"\"\n        graphics\n        [\n            x    255.01\n            y    329.35\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    21\n        label    \"\"\n        graphics\n        [\n            x    457.75\n            y    121.16\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    22\n        label    \"\"\n        graphics\n        [\n            x    667.65\n            y    73.09\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    23\n        label    \"\"\n        graphics\n        [\n            x    264.93\n            y    656.23\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    24\n        label    \"\"\n        graphics\n        [\n            x    278.81\n            y    334.62\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    25\n        label    \"\"\n        graphics\n        [\n            x    615.28\n            y    38.36\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    26\n        label    \"\"\n        graphics\n        [\n            x    642.21\n            y    273.33\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    27\n        label    \"\"\n        graphics\n        [\n            x    334.75\n            y    604.24\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    28\n        label    \"\"\n        graphics\n        [\n            x    155.47\n            y    451.89\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    29\n        label    \"\"\n        graphics\n        [\n            x    573.98\n            y    658.67\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    30\n        label    \"\"\n        graphics\n        [\n            x    330.48\n            y    657.55\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    31\n        label    \"\"\n        graphics\n        [\n            x    21.24\n            y    125.33\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    32\n        label    \"\"\n        graphics\n        [\n            x    329.20\n            y    4.54\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    33\n        label    \"\"\n        graphics\n        [\n            x    606.71\n            y    325.98\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    34\n        label    \"\"\n        graphics\n        [\n            x    645.69\n            y    284.59\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    35\n        label    \"\"\n        graphics\n        [\n            x    82.50\n            y    217.98\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    36\n        label    \"\"\n        graphics\n        [\n            x    282.99\n            y    209.73\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    37\n        label    \"\"\n        graphics\n        [\n            x    365.00\n            y    420.95\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    38\n        label    \"\"\n        graphics\n        [\n            x    650.26\n            y    468.43\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    39\n        label    \"\"\n        graphics\n        [\n            x    47.55\n            y    639.90\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    40\n        label    \"\"\n        graphics\n        [\n            x    227.34\n            y    593.28\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    41\n        label    \"\"\n        graphics\n        [\n            x    670.61\n            y    673.29\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    42\n        label    \"\"\n        graphics\n        [\n            x    223.82\n            y    638.21\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    43\n        label    \"\"\n        graphics\n        [\n            x    616.81\n            y    434.49\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    44\n        label    \"\"\n        graphics\n        [\n            x    465.63\n            y    95.80\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    45\n        label    \"\"\n        graphics\n        [\n            x    84.69\n            y    107.68\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    46\n        label    \"\"\n        graphics\n        [\n            x    561.07\n            y    83.69\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    47\n        label    \"\"\n        graphics\n        [\n            x    683.10\n            y    604.30\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    48\n        label    \"\"\n        graphics\n        [\n            x    433.86\n            y    263.50\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    49\n        label    \"\"\n        graphics\n        [\n            x    679.57\n            y    199.51\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    50\n        label    \"\"\n        graphics\n        [\n            x    146.62\n            y    571.44\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    51\n        label    \"\"\n        graphics\n        [\n            x    364.17\n            y    58.89\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    52\n        label    \"\"\n        graphics\n        [\n            x    264.37\n            y    51.46\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    53\n        label    \"\"\n        graphics\n        [\n            x    172.87\n            y    647.25\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    54\n        label    \"\"\n        graphics\n        [\n            x    197.46\n            y    590.50\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    55\n        label    \"\"\n        graphics\n        [\n            x    505.56\n            y    472.50\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    56\n        label    \"\"\n        graphics\n        [\n            x    483.74\n            y    178.65\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    57\n        label    \"\"\n        graphics\n        [\n            x    242.96\n            y    74.06\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    58\n        label    \"\"\n        graphics\n        [\n            x    594.90\n            y    55.97\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    59\n        label    \"\"\n        graphics\n        [\n            x    665.24\n            y    143.30\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    edge\n    [\n        source    1\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    10\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    11\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    12\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    13\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    14\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    15\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    16\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    17\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    18\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    19\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    2\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    20\n        target    19\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    21\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    22\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    23\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    24\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    25\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    26\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    27\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    28\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    29\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    3\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    30\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    31\n        target    30\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    32\n        target    26\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    32\n        target    49\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    33\n        target    30\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    34\n        target    19\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    35\n        target    19\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    36\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    37\n        target    20\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    38\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    39\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    4\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    40\n        target    25\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    41\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    42\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    43\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    44\n        target    38\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    45\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    46\n        target    26\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    47\n        target    44\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    48\n        target    42\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    49\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    5\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    50\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    51\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    52\n        target    32\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    53\n        target    32\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    54\n        target    49\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    55\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    56\n        target    32\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    57\n        target    32\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    58\n        target    32\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    59\n        target    41\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    6\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    7\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    8\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    9\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n]\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v60e60.tglf",
    "content": "0 510.000 297.000 30.000 30.000\n1 321.000 492.000 30.000 30.000\n2 209.000 573.000 30.000 30.000\n3 192.000 326.000 30.000 30.000\n4 276.000 263.000 30.000 30.000\n5 599.000 170.000 30.000 30.000\n6 653.000 687.000 30.000 30.000\n7 669.000 411.000 30.000 30.000\n8 693.000 227.000 30.000 30.000\n9 304.000 91.000 30.000 30.000\n10 408.000 506.000 30.000 30.000\n11 210.000 598.000 30.000 30.000\n12 277.000 367.000 30.000 30.000\n13 566.000 180.000 30.000 30.000\n14 70.000 478.000 30.000 30.000\n15 322.000 599.000 30.000 30.000\n16 507.000 5.000 30.000 30.000\n17 487.000 511.000 30.000 30.000\n18 386.000 344.000 30.000 30.000\n19 427.000 474.000 30.000 30.000\n20 255.000 329.000 30.000 30.000\n21 457.000 121.000 30.000 30.000\n22 667.000 73.000 30.000 30.000\n23 264.000 656.000 30.000 30.000\n24 278.000 334.000 30.000 30.000\n25 615.000 38.000 30.000 30.000\n26 642.000 273.000 30.000 30.000\n27 334.000 604.000 30.000 30.000\n28 155.000 451.000 30.000 30.000\n29 573.000 658.000 30.000 30.000\n30 330.000 657.000 30.000 30.000\n31 21.000 125.000 30.000 30.000\n32 329.000 4.000 30.000 30.000\n33 606.000 325.000 30.000 30.000\n34 645.000 284.000 30.000 30.000\n35 82.000 217.000 30.000 30.000\n36 282.000 209.000 30.000 30.000\n37 365.000 420.000 30.000 30.000\n38 650.000 468.000 30.000 30.000\n39 47.000 639.000 30.000 30.000\n40 227.000 593.000 30.000 30.000\n41 670.000 673.000 30.000 30.000\n42 223.000 638.000 30.000 30.000\n43 616.000 434.000 30.000 30.000\n44 465.000 95.000 30.000 30.000\n45 84.000 107.000 30.000 30.000\n46 561.000 83.000 30.000 30.000\n47 683.000 604.000 30.000 30.000\n48 433.000 263.000 30.000 30.000\n49 679.000 199.000 30.000 30.000\n50 146.000 571.000 30.000 30.000\n51 364.000 58.000 30.000 30.000\n52 264.000 51.000 30.000 30.000\n53 172.000 647.000 30.000 30.000\n54 197.000 590.000 30.000 30.000\n55 505.000 472.000 30.000 30.000\n56 483.000 178.000 30.000 30.000\n57 242.000 74.000 30.000 30.000\n58 594.000 55.000 30.000 30.000\n59 665.000 143.000 30.000 30.000\n#\n4 0\n55 12\n22 12\n13 7\n3 2\n5 1\n12 0\n34 19\n46 26\n51 1\n19 9\n37 20\n38 16\n32 26\n48 42\n56 32\n50 9\n2 1\n24 9\n43 8\n57 32\n32 49\n33 30\n36 9\n23 16\n17 11\n54 49\n20 19\n7 0\n52 32\n14 4\n10 9\n27 10\n18 5\n8 1\n25 4\n35 19\n40 25\n11 5\n49 22\n1 0\n16 2\n59 41\n26 3\n47 44\n44 38\n53 32\n15 3\n6 3\n21 17\n29 15\n45 9\n39 1\n58 32\n30 18\n31 30\n42 11\n9 5\n41 16\n28 18\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v60e66.gml",
    "content": "graph\n[\n    node\n    [\n        id    0\n        label    \"\"\n        graphics\n        [\n            x    485.52\n            y    226.68\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    1\n        label    \"\"\n        graphics\n        [\n            x    156.47\n            y    673.41\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    2\n        label    \"\"\n        graphics\n        [\n            x    439.44\n            y    329.85\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    3\n        label    \"\"\n        graphics\n        [\n            x    422.59\n            y    315.00\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    4\n        label    \"\"\n        graphics\n        [\n            x    114.52\n            y    124.08\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    5\n        label    \"\"\n        graphics\n        [\n            x    168.59\n            y    684.83\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    6\n        label    \"\"\n        graphics\n        [\n            x    194.67\n            y    122.46\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    7\n        label    \"\"\n        graphics\n        [\n            x    381.64\n            y    460.29\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    8\n        label    \"\"\n        graphics\n        [\n            x    137.12\n            y    694.59\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    9\n        label    \"\"\n        graphics\n        [\n            x    432.24\n            y    299.99\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    10\n        label    \"\"\n        graphics\n        [\n            x    191.02\n            y    694.66\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    11\n        label    \"\"\n        graphics\n        [\n            x    147.76\n            y    307.99\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    12\n        label    \"\"\n        graphics\n        [\n            x    321.36\n            y    251.81\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    13\n        label    \"\"\n        graphics\n        [\n            x    329.99\n            y    392.39\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    14\n        label    \"\"\n        graphics\n        [\n            x    537.26\n            y    135.87\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    15\n        label    \"\"\n        graphics\n        [\n            x    452.81\n            y    334.38\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    16\n        label    \"\"\n        graphics\n        [\n            x    271.60\n            y    92.13\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    17\n        label    \"\"\n        graphics\n        [\n            x    245.54\n            y    535.60\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    18\n        label    \"\"\n        graphics\n        [\n            x    481.47\n            y    171.96\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    19\n        label    \"\"\n        graphics\n        [\n            x    36.65\n            y    356.47\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    20\n        label    \"\"\n        graphics\n        [\n            x    609.89\n            y    514.13\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    21\n        label    \"\"\n        graphics\n        [\n            x    15.37\n            y    103.65\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    22\n        label    \"\"\n        graphics\n        [\n            x    667.28\n            y    311.04\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    23\n        label    \"\"\n        graphics\n        [\n            x    342.19\n            y    631.20\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    24\n        label    \"\"\n        graphics\n        [\n            x    361.10\n            y    403.32\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    25\n        label    \"\"\n        graphics\n        [\n            x    324.96\n            y    133.64\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    26\n        label    \"\"\n        graphics\n        [\n            x    627.02\n            y    137.62\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    27\n        label    \"\"\n        graphics\n        [\n            x    686.74\n            y    0.72\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    28\n        label    \"\"\n        graphics\n        [\n            x    200.32\n            y    600.36\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    29\n        label    \"\"\n        graphics\n        [\n            x    464.34\n            y    356.51\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    30\n        label    \"\"\n        graphics\n        [\n            x    543.92\n            y    317.49\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    31\n        label    \"\"\n        graphics\n        [\n            x    270.35\n            y    365.75\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    32\n        label    \"\"\n        graphics\n        [\n            x    54.53\n            y    563.54\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    33\n        label    \"\"\n        graphics\n        [\n            x    492.08\n            y    300.95\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    34\n        label    \"\"\n        graphics\n        [\n            x    152.49\n            y    430.85\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    35\n        label    \"\"\n        graphics\n        [\n            x    543.62\n            y    336.17\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    36\n        label    \"\"\n        graphics\n        [\n            x    609.22\n            y    506.21\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    37\n        label    \"\"\n        graphics\n        [\n            x    31.27\n            y    266.98\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    38\n        label    \"\"\n        graphics\n        [\n            x    265.28\n            y    490.29\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    39\n        label    \"\"\n        graphics\n        [\n            x    536.30\n            y    295.15\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    40\n        label    \"\"\n        graphics\n        [\n            x    289.00\n            y    409.33\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    41\n        label    \"\"\n        graphics\n        [\n            x    550.73\n            y    31.66\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    42\n        label    \"\"\n        graphics\n        [\n            x    380.55\n            y    87.17\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    43\n        label    \"\"\n        graphics\n        [\n            x    199.13\n            y    606.77\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    44\n        label    \"\"\n        graphics\n        [\n            x    64.04\n            y    169.05\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    45\n        label    \"\"\n        graphics\n        [\n            x    549.11\n            y    156.82\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    46\n        label    \"\"\n        graphics\n        [\n            x    286.26\n            y    376.46\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    47\n        label    \"\"\n        graphics\n        [\n            x    216.10\n            y    312.10\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    48\n        label    \"\"\n        graphics\n        [\n            x    585.23\n            y    200.88\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    49\n        label    \"\"\n        graphics\n        [\n            x    549.49\n            y    109.15\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    50\n        label    \"\"\n        graphics\n        [\n            x    607.68\n            y    453.01\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    51\n        label    \"\"\n        graphics\n        [\n            x    303.08\n            y    559.41\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    52\n        label    \"\"\n        graphics\n        [\n            x    675.84\n            y    23.14\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    53\n        label    \"\"\n        graphics\n        [\n            x    465.29\n            y    434.92\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    54\n        label    \"\"\n        graphics\n        [\n            x    360.43\n            y    536.89\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    55\n        label    \"\"\n        graphics\n        [\n            x    617.29\n            y    173.10\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    56\n        label    \"\"\n        graphics\n        [\n            x    584.99\n            y    529.66\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    57\n        label    \"\"\n        graphics\n        [\n            x    382.06\n            y    145.18\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    58\n        label    \"\"\n        graphics\n        [\n            x    472.22\n            y    494.93\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    59\n        label    \"\"\n        graphics\n        [\n            x    39.88\n            y    118.12\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    edge\n    [\n        source    0\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    1\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    10\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    11\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    12\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    13\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    14\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    15\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    16\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    17\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    18\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    19\n        target    48\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    19\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    2\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    20\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    20\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    21\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    22\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    23\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    24\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    25\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    26\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    27\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    28\n        target    24\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    28\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    29\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    3\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    3\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    30\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    31\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    32\n        target    24\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    33\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    34\n        target    19\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    35\n        target    32\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    36\n        target    27\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    37\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    38\n        target    20\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    39\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    4\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    40\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    41\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    42\n        target    30\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    43\n        target    26\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    44\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    44\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    45\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    46\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    47\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    48\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    49\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    5\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    50\n        target    39\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    51\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    52\n        target    24\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    53\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    54\n        target    25\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    54\n        target    50\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    55\n        target    37\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    56\n        target    44\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    57\n        target    29\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    58\n        target    37\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    59\n        target    46\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    6\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    7\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    8\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    9\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n]\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v60e66.tglf",
    "content": "0 485.000 226.000 30.000 30.000\n1 156.000 673.000 30.000 30.000\n2 439.000 329.000 30.000 30.000\n3 422.000 315.000 30.000 30.000\n4 114.000 124.000 30.000 30.000\n5 168.000 684.000 30.000 30.000\n6 194.000 122.000 30.000 30.000\n7 381.000 460.000 30.000 30.000\n8 137.000 694.000 30.000 30.000\n9 432.000 299.000 30.000 30.000\n10 191.000 694.000 30.000 30.000\n11 147.000 307.000 30.000 30.000\n12 321.000 251.000 30.000 30.000\n13 329.000 392.000 30.000 30.000\n14 537.000 135.000 30.000 30.000\n15 452.000 334.000 30.000 30.000\n16 271.000 92.000 30.000 30.000\n17 245.000 535.000 30.000 30.000\n18 481.000 171.000 30.000 30.000\n19 36.000 356.000 30.000 30.000\n20 609.000 514.000 30.000 30.000\n21 15.000 103.000 30.000 30.000\n22 667.000 311.000 30.000 30.000\n23 342.000 631.000 30.000 30.000\n24 361.000 403.000 30.000 30.000\n25 324.000 133.000 30.000 30.000\n26 627.000 137.000 30.000 30.000\n27 686.000 0.000 30.000 30.000\n28 200.000 600.000 30.000 30.000\n29 464.000 356.000 30.000 30.000\n30 543.000 317.000 30.000 30.000\n31 270.000 365.000 30.000 30.000\n32 54.000 563.000 30.000 30.000\n33 492.000 300.000 30.000 30.000\n34 152.000 430.000 30.000 30.000\n35 543.000 336.000 30.000 30.000\n36 609.000 506.000 30.000 30.000\n37 31.000 266.000 30.000 30.000\n38 265.000 490.000 30.000 30.000\n39 536.000 295.000 30.000 30.000\n40 289.000 409.000 30.000 30.000\n41 550.000 31.000 30.000 30.000\n42 380.000 87.000 30.000 30.000\n43 199.000 606.000 30.000 30.000\n44 64.000 169.000 30.000 30.000\n45 549.000 156.000 30.000 30.000\n46 286.000 376.000 30.000 30.000\n47 216.000 312.000 30.000 30.000\n48 585.000 200.000 30.000 30.000\n49 549.000 109.000 30.000 30.000\n50 607.000 453.000 30.000 30.000\n51 303.000 559.000 30.000 30.000\n52 675.000 23.000 30.000 30.000\n53 465.000 434.000 30.000 30.000\n54 360.000 536.000 30.000 30.000\n55 617.000 173.000 30.000 30.000\n56 584.000 529.000 30.000 30.000\n57 382.000 145.000 30.000 30.000\n58 472.000 494.000 30.000 30.000\n59 39.000 118.000 30.000 30.000\n#\n53 16\n23 1\n41 21\n54 50\n4 0\n38 20\n11 7\n25 12\n48 6\n7 6\n58 37\n31 22\n44 4\n20 4\n6 2\n15 10\n3 0\n40 9\n32 24\n30 6\n46 7\n51 5\n36 27\n19 9\n18 5\n47 23\n13 4\n3 23\n35 32\n33 21\n28 3\n56 44\n28 24\n39 11\n57 29\n16 15\n54 25\n29 22\n26 2\n5 1\n49 15\n17 14\n12 0\n20 17\n44 11\n19 48\n59 46\n2 0\n9 1\n10 5\n55 37\n22 21\n50 39\n34 19\n37 22\n14 12\n43 26\n21 1\n42 30\n24 4\n45 1\n0 15\n27 12\n8 3\n52 24\n1 0\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v60e72.gml",
    "content": "graph\n[\n    node\n    [\n        id    0\n        label    \"\"\n        graphics\n        [\n            x    228.43\n            y    626.62\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    1\n        label    \"\"\n        graphics\n        [\n            x    456.41\n            y    47.12\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    2\n        label    \"\"\n        graphics\n        [\n            x    678.23\n            y    264.80\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    3\n        label    \"\"\n        graphics\n        [\n            x    471.28\n            y    286.54\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    4\n        label    \"\"\n        graphics\n        [\n            x    645.54\n            y    523.49\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    5\n        label    \"\"\n        graphics\n        [\n            x    245.88\n            y    624.85\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    6\n        label    \"\"\n        graphics\n        [\n            x    84.11\n            y    255.49\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    7\n        label    \"\"\n        graphics\n        [\n            x    486.41\n            y    544.85\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    8\n        label    \"\"\n        graphics\n        [\n            x    191.55\n            y    666.52\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    9\n        label    \"\"\n        graphics\n        [\n            x    3.56\n            y    401.82\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    10\n        label    \"\"\n        graphics\n        [\n            x    585.44\n            y    243.02\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    11\n        label    \"\"\n        graphics\n        [\n            x    476.41\n            y    124.32\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    12\n        label    \"\"\n        graphics\n        [\n            x    570.88\n            y    658.24\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    13\n        label    \"\"\n        graphics\n        [\n            x    398.07\n            y    65.97\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    14\n        label    \"\"\n        graphics\n        [\n            x    41.33\n            y    491.99\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    15\n        label    \"\"\n        graphics\n        [\n            x    514.26\n            y    310.91\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    16\n        label    \"\"\n        graphics\n        [\n            x    393.46\n            y    90.13\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    17\n        label    \"\"\n        graphics\n        [\n            x    350.77\n            y    451.03\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    18\n        label    \"\"\n        graphics\n        [\n            x    16.82\n            y    308.06\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    19\n        label    \"\"\n        graphics\n        [\n            x    271.02\n            y    561.32\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    20\n        label    \"\"\n        graphics\n        [\n            x    291.98\n            y    284.54\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    21\n        label    \"\"\n        graphics\n        [\n            x    89.81\n            y    140.50\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    22\n        label    \"\"\n        graphics\n        [\n            x    639.13\n            y    107.10\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    23\n        label    \"\"\n        graphics\n        [\n            x    261.75\n            y    614.90\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    24\n        label    \"\"\n        graphics\n        [\n            x    432.63\n            y    634.56\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    25\n        label    \"\"\n        graphics\n        [\n            x    417.93\n            y    603.05\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    26\n        label    \"\"\n        graphics\n        [\n            x    316.49\n            y    308.42\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    27\n        label    \"\"\n        graphics\n        [\n            x    544.81\n            y    363.10\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    28\n        label    \"\"\n        graphics\n        [\n            x    559.69\n            y    678.33\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    29\n        label    \"\"\n        graphics\n        [\n            x    156.80\n            y    250.72\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    30\n        label    \"\"\n        graphics\n        [\n            x    418.84\n            y    576.21\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    31\n        label    \"\"\n        graphics\n        [\n            x    382.90\n            y    357.51\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    32\n        label    \"\"\n        graphics\n        [\n            x    240.04\n            y    74.39\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    33\n        label    \"\"\n        graphics\n        [\n            x    399.45\n            y    32.46\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    34\n        label    \"\"\n        graphics\n        [\n            x    668.75\n            y    163.25\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    35\n        label    \"\"\n        graphics\n        [\n            x    219.10\n            y    293.10\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    36\n        label    \"\"\n        graphics\n        [\n            x    232.34\n            y    329.58\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    37\n        label    \"\"\n        graphics\n        [\n            x    437.57\n            y    66.77\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    38\n        label    \"\"\n        graphics\n        [\n            x    631.98\n            y    627.76\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    39\n        label    \"\"\n        graphics\n        [\n            x    284.76\n            y    503.61\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    40\n        label    \"\"\n        graphics\n        [\n            x    381.72\n            y    237.78\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    41\n        label    \"\"\n        graphics\n        [\n            x    440.31\n            y    371.61\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    42\n        label    \"\"\n        graphics\n        [\n            x    306.47\n            y    71.42\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    43\n        label    \"\"\n        graphics\n        [\n            x    103.16\n            y    181.79\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    44\n        label    \"\"\n        graphics\n        [\n            x    149.10\n            y    101.86\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    45\n        label    \"\"\n        graphics\n        [\n            x    322.21\n            y    403.63\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    46\n        label    \"\"\n        graphics\n        [\n            x    397.28\n            y    556.19\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    47\n        label    \"\"\n        graphics\n        [\n            x    242.07\n            y    579.90\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    48\n        label    \"\"\n        graphics\n        [\n            x    282.37\n            y    267.84\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    49\n        label    \"\"\n        graphics\n        [\n            x    469.26\n            y    7.17\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    50\n        label    \"\"\n        graphics\n        [\n            x    247.30\n            y    34.93\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    51\n        label    \"\"\n        graphics\n        [\n            x    126.74\n            y    11.48\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    52\n        label    \"\"\n        graphics\n        [\n            x    638.36\n            y    343.90\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    53\n        label    \"\"\n        graphics\n        [\n            x    495.27\n            y    433.85\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    54\n        label    \"\"\n        graphics\n        [\n            x    159.63\n            y    348.29\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    55\n        label    \"\"\n        graphics\n        [\n            x    297.37\n            y    586.07\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    56\n        label    \"\"\n        graphics\n        [\n            x    431.45\n            y    545.45\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    57\n        label    \"\"\n        graphics\n        [\n            x    155.58\n            y    226.25\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    58\n        label    \"\"\n        graphics\n        [\n            x    444.33\n            y    685.10\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    59\n        label    \"\"\n        graphics\n        [\n            x    141.29\n            y    129.38\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    edge\n    [\n        source    1\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    10\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    11\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    12\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    13\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    14\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    15\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    16\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    17\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    18\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    19\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    19\n        target    50\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    2\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    20\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    21\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    22\n        target    59\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    22\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    23\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    24\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    24\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    25\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    26\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    27\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    28\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    29\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    3\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    3\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    30\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    31\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    32\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    33\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    34\n        target    31\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    35\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    36\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    37\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    37\n        target    26\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    38\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    39\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    39\n        target    20\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    4\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    40\n        target    20\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    41\n        target    24\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    42\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    43\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    44\n        target    28\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    45\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    45\n        target    33\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    46\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    46\n        target    44\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    47\n        target    39\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    48\n        target    35\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    49\n        target    33\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    5\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    5\n        target    24\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    50\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    51\n        target    29\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    52\n        target    25\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    53\n        target    38\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    53\n        target    43\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    54\n        target    38\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    55\n        target    45\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    56\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    57\n        target    25\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    58\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    58\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    59\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    59\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    59\n        target    51\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    6\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    7\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    8\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    9\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n]\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v60e72.tglf",
    "content": "0 228.000 626.000 30.000 30.000\n1 456.000 47.000 30.000 30.000\n2 678.000 264.000 30.000 30.000\n3 471.000 286.000 30.000 30.000\n4 645.000 523.000 30.000 30.000\n5 245.000 624.000 30.000 30.000\n6 84.000 255.000 30.000 30.000\n7 486.000 544.000 30.000 30.000\n8 191.000 666.000 30.000 30.000\n9 3.000 401.000 30.000 30.000\n10 585.000 243.000 30.000 30.000\n11 476.000 124.000 30.000 30.000\n12 570.000 658.000 30.000 30.000\n13 398.000 65.000 30.000 30.000\n14 41.000 491.000 30.000 30.000\n15 514.000 310.000 30.000 30.000\n16 393.000 90.000 30.000 30.000\n17 350.000 451.000 30.000 30.000\n18 16.000 308.000 30.000 30.000\n19 271.000 561.000 30.000 30.000\n20 291.000 284.000 30.000 30.000\n21 89.000 140.000 30.000 30.000\n22 639.000 107.000 30.000 30.000\n23 261.000 614.000 30.000 30.000\n24 432.000 634.000 30.000 30.000\n25 417.000 603.000 30.000 30.000\n26 316.000 308.000 30.000 30.000\n27 544.000 363.000 30.000 30.000\n28 559.000 678.000 30.000 30.000\n29 156.000 250.000 30.000 30.000\n30 418.000 576.000 30.000 30.000\n31 382.000 357.000 30.000 30.000\n32 240.000 74.000 30.000 30.000\n33 399.000 32.000 30.000 30.000\n34 668.000 163.000 30.000 30.000\n35 219.000 293.000 30.000 30.000\n36 232.000 329.000 30.000 30.000\n37 437.000 66.000 30.000 30.000\n38 631.000 627.000 30.000 30.000\n39 284.000 503.000 30.000 30.000\n40 381.000 237.000 30.000 30.000\n41 440.000 371.000 30.000 30.000\n42 306.000 71.000 30.000 30.000\n43 103.000 181.000 30.000 30.000\n44 149.000 101.000 30.000 30.000\n45 322.000 403.000 30.000 30.000\n46 397.000 556.000 30.000 30.000\n47 242.000 579.000 30.000 30.000\n48 282.000 267.000 30.000 30.000\n49 469.000 7.000 30.000 30.000\n50 247.000 34.000 30.000 30.000\n51 126.000 11.000 30.000 30.000\n52 638.000 343.000 30.000 30.000\n53 495.000 433.000 30.000 30.000\n54 159.000 348.000 30.000 30.000\n55 297.000 586.000 30.000 30.000\n56 431.000 545.000 30.000 30.000\n57 155.000 226.000 30.000 30.000\n58 444.000 685.000 30.000 30.000\n59 141.000 129.000 30.000 30.000\n#\n29 23\n46 13\n7 1\n56 8\n16 11\n24 3\n14 9\n19 50\n44 28\n18 10\n59 16\n53 43\n4 1\n45 33\n8 1\n24 1\n37 26\n32 10\n9 5\n45 3\n41 24\n2 0\n47 39\n34 31\n23 22\n58 12\n17 16\n51 29\n43 1\n28 22\n6 0\n53 38\n55 45\n27 16\n13 2\n50 16\n5 0\n3 2\n54 38\n30 14\n39 14\n26 0\n58 7\n19 5\n35 16\n48 35\n22 7\n15 4\n40 20\n12 11\n36 6\n1 0\n46 44\n49 33\n59 3\n39 20\n3 10\n20 11\n52 25\n57 25\n5 24\n37 22\n38 4\n59 51\n25 18\n33 16\n11 2\n10 6\n21 12\n42 7\n31 9\n22 59\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v60e78.gml",
    "content": "graph\n[\n    node\n    [\n        id    0\n        label    \"\"\n        graphics\n        [\n            x    178.16\n            y    621.32\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    1\n        label    \"\"\n        graphics\n        [\n            x    234.37\n            y    226.36\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    2\n        label    \"\"\n        graphics\n        [\n            x    51.30\n            y    126.84\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    3\n        label    \"\"\n        graphics\n        [\n            x    215.24\n            y    691.62\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    4\n        label    \"\"\n        graphics\n        [\n            x    329.51\n            y    361.26\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    5\n        label    \"\"\n        graphics\n        [\n            x    367.61\n            y    208.33\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    6\n        label    \"\"\n        graphics\n        [\n            x    366.10\n            y    274.31\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    7\n        label    \"\"\n        graphics\n        [\n            x    299.26\n            y    67.93\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    8\n        label    \"\"\n        graphics\n        [\n            x    366.07\n            y    249.05\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    9\n        label    \"\"\n        graphics\n        [\n            x    305.15\n            y    397.51\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    10\n        label    \"\"\n        graphics\n        [\n            x    146.42\n            y    532.24\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    11\n        label    \"\"\n        graphics\n        [\n            x    226.27\n            y    137.08\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    12\n        label    \"\"\n        graphics\n        [\n            x    193.81\n            y    589.53\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    13\n        label    \"\"\n        graphics\n        [\n            x    514.65\n            y    329.87\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    14\n        label    \"\"\n        graphics\n        [\n            x    506.74\n            y    632.80\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    15\n        label    \"\"\n        graphics\n        [\n            x    75.13\n            y    655.99\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    16\n        label    \"\"\n        graphics\n        [\n            x    678.68\n            y    138.73\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    17\n        label    \"\"\n        graphics\n        [\n            x    170.85\n            y    615.76\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    18\n        label    \"\"\n        graphics\n        [\n            x    316.64\n            y    262.53\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    19\n        label    \"\"\n        graphics\n        [\n            x    652.80\n            y    336.26\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    20\n        label    \"\"\n        graphics\n        [\n            x    50.71\n            y    151.78\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    21\n        label    \"\"\n        graphics\n        [\n            x    227.80\n            y    221.06\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    22\n        label    \"\"\n        graphics\n        [\n            x    452.37\n            y    310.35\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    23\n        label    \"\"\n        graphics\n        [\n            x    192.99\n            y    210.30\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    24\n        label    \"\"\n        graphics\n        [\n            x    561.94\n            y    180.11\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    25\n        label    \"\"\n        graphics\n        [\n            x    101.17\n            y    313.10\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    26\n        label    \"\"\n        graphics\n        [\n            x    183.54\n            y    633.47\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    27\n        label    \"\"\n        graphics\n        [\n            x    249.96\n            y    422.75\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    28\n        label    \"\"\n        graphics\n        [\n            x    232.51\n            y    577.51\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    29\n        label    \"\"\n        graphics\n        [\n            x    372.07\n            y    493.71\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    30\n        label    \"\"\n        graphics\n        [\n            x    463.59\n            y    654.00\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    31\n        label    \"\"\n        graphics\n        [\n            x    369.64\n            y    460.39\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    32\n        label    \"\"\n        graphics\n        [\n            x    120.46\n            y    540.50\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    33\n        label    \"\"\n        graphics\n        [\n            x    323.60\n            y    240.75\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    34\n        label    \"\"\n        graphics\n        [\n            x    296.03\n            y    69.63\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    35\n        label    \"\"\n        graphics\n        [\n            x    305.41\n            y    305.21\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    36\n        label    \"\"\n        graphics\n        [\n            x    291.17\n            y    618.78\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    37\n        label    \"\"\n        graphics\n        [\n            x    625.02\n            y    85.22\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    38\n        label    \"\"\n        graphics\n        [\n            x    423.29\n            y    78.87\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    39\n        label    \"\"\n        graphics\n        [\n            x    340.19\n            y    206.38\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    40\n        label    \"\"\n        graphics\n        [\n            x    416.47\n            y    140.40\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    41\n        label    \"\"\n        graphics\n        [\n            x    632.49\n            y    456.45\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    42\n        label    \"\"\n        graphics\n        [\n            x    407.38\n            y    236.34\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    43\n        label    \"\"\n        graphics\n        [\n            x    530.85\n            y    405.86\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    44\n        label    \"\"\n        graphics\n        [\n            x    167.53\n            y    228.89\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    45\n        label    \"\"\n        graphics\n        [\n            x    434.76\n            y    573.43\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    46\n        label    \"\"\n        graphics\n        [\n            x    92.66\n            y    84.20\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    47\n        label    \"\"\n        graphics\n        [\n            x    687.87\n            y    32.24\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    48\n        label    \"\"\n        graphics\n        [\n            x    669.15\n            y    613.34\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    49\n        label    \"\"\n        graphics\n        [\n            x    633.01\n            y    536.12\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    50\n        label    \"\"\n        graphics\n        [\n            x    31.82\n            y    26.07\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    51\n        label    \"\"\n        graphics\n        [\n            x    238.53\n            y    112.33\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    52\n        label    \"\"\n        graphics\n        [\n            x    225.86\n            y    458.27\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    53\n        label    \"\"\n        graphics\n        [\n            x    506.18\n            y    174.62\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    54\n        label    \"\"\n        graphics\n        [\n            x    313.95\n            y    337.31\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    55\n        label    \"\"\n        graphics\n        [\n            x    54.90\n            y    594.38\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    56\n        label    \"\"\n        graphics\n        [\n            x    188.88\n            y    210.67\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    57\n        label    \"\"\n        graphics\n        [\n            x    271.64\n            y    572.43\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    58\n        label    \"\"\n        graphics\n        [\n            x    308.55\n            y    520.02\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    59\n        label    \"\"\n        graphics\n        [\n            x    206.30\n            y    115.07\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    edge\n    [\n        source    1\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    1\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    1\n        target    59\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    10\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    10\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    11\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    12\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    13\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    14\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    15\n        target    27\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    15\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    16\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    17\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    18\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    19\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    2\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    2\n        target    50\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    20\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    21\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    22\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    22\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    23\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    24\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    24\n        target    19\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    25\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    26\n        target    29\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    26\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    27\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    28\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    29\n        target    27\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    29\n        target    31\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    29\n        target    35\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    3\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    30\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    31\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    32\n        target    24\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    33\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    34\n        target    24\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    35\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    35\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    36\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    37\n        target    25\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    37\n        target    28\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    38\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    39\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    4\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    4\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    40\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    41\n        target    29\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    41\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    42\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    43\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    43\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    44\n        target    37\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    45\n        target    27\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    46\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    47\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    48\n        target    19\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    48\n        target    38\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    49\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    5\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    50\n        target    30\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    51\n        target    44\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    52\n        target    39\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    53\n        target    29\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    53\n        target    32\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    54\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    55\n        target    36\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    56\n        target    45\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    57\n        target    33\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    58\n        target    24\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    58\n        target    27\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    59\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    59\n        target    26\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    6\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    7\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    8\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    9\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n]\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v60e78.tglf",
    "content": "0 178.000 621.000 30.000 30.000\n1 234.000 226.000 30.000 30.000\n2 51.000 126.000 30.000 30.000\n3 215.000 691.000 30.000 30.000\n4 329.000 361.000 30.000 30.000\n5 367.000 208.000 30.000 30.000\n6 366.000 274.000 30.000 30.000\n7 299.000 67.000 30.000 30.000\n8 366.000 249.000 30.000 30.000\n9 305.000 397.000 30.000 30.000\n10 146.000 532.000 30.000 30.000\n11 226.000 137.000 30.000 30.000\n12 193.000 589.000 30.000 30.000\n13 514.000 329.000 30.000 30.000\n14 506.000 632.000 30.000 30.000\n15 75.000 655.000 30.000 30.000\n16 678.000 138.000 30.000 30.000\n17 170.000 615.000 30.000 30.000\n18 316.000 262.000 30.000 30.000\n19 652.000 336.000 30.000 30.000\n20 50.000 151.000 30.000 30.000\n21 227.000 221.000 30.000 30.000\n22 452.000 310.000 30.000 30.000\n23 192.000 210.000 30.000 30.000\n24 561.000 180.000 30.000 30.000\n25 101.000 313.000 30.000 30.000\n26 183.000 633.000 30.000 30.000\n27 249.000 422.000 30.000 30.000\n28 232.000 577.000 30.000 30.000\n29 372.000 493.000 30.000 30.000\n30 463.000 654.000 30.000 30.000\n31 369.000 460.000 30.000 30.000\n32 120.000 540.000 30.000 30.000\n33 323.000 240.000 30.000 30.000\n34 296.000 69.000 30.000 30.000\n35 305.000 305.000 30.000 30.000\n36 291.000 618.000 30.000 30.000\n37 625.000 85.000 30.000 30.000\n38 423.000 78.000 30.000 30.000\n39 340.000 206.000 30.000 30.000\n40 416.000 140.000 30.000 30.000\n41 632.000 456.000 30.000 30.000\n42 407.000 236.000 30.000 30.000\n43 530.000 405.000 30.000 30.000\n44 167.000 228.000 30.000 30.000\n45 434.000 573.000 30.000 30.000\n46 92.000 84.000 30.000 30.000\n47 687.000 32.000 30.000 30.000\n48 669.000 613.000 30.000 30.000\n49 633.000 536.000 30.000 30.000\n50 31.000 26.000 30.000 30.000\n51 238.000 112.000 30.000 30.000\n52 225.000 458.000 30.000 30.000\n53 506.000 174.000 30.000 30.000\n54 313.000 337.000 30.000 30.000\n55 54.000 594.000 30.000 30.000\n56 188.000 210.000 30.000 30.000\n57 271.000 572.000 30.000 30.000\n58 308.000 520.000 30.000 30.000\n59 206.000 115.000 30.000 30.000\n#\n29 27\n22 21\n1 21\n35 0\n7 0\n23 17\n54 4\n15 5\n8 7\n51 44\n24 15\n42 6\n11 9\n57 33\n17 10\n59 10\n15 27\n5 0\n12 11\n48 38\n52 39\n29 35\n3 0\n27 2\n56 45\n39 18\n58 27\n25 12\n19 11\n9 0\n31 21\n13 4\n36 16\n34 24\n4 12\n47 13\n4 3\n29 31\n2 50\n6 2\n37 28\n18 8\n37 25\n1 59\n28 13\n14 10\n45 27\n32 24\n38 9\n26 8\n48 19\n59 26\n40 4\n53 32\n41 7\n55 36\n21 7\n10 5\n43 10\n44 37\n53 29\n50 30\n46 14\n1 0\n41 29\n16 15\n20 7\n35 15\n49 11\n22 2\n33 17\n30 9\n26 29\n24 19\n58 24\n2 1\n43 1\n10 6\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v60e84.gml",
    "content": "graph\n[\n    node\n    [\n        id    0\n        label    \"\"\n        graphics\n        [\n            x    265.86\n            y    93.83\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    1\n        label    \"\"\n        graphics\n        [\n            x    613.24\n            y    592.84\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    2\n        label    \"\"\n        graphics\n        [\n            x    639.81\n            y    500.56\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    3\n        label    \"\"\n        graphics\n        [\n            x    95.07\n            y    469.24\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    4\n        label    \"\"\n        graphics\n        [\n            x    189.84\n            y    475.41\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    5\n        label    \"\"\n        graphics\n        [\n            x    535.31\n            y    74.51\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    6\n        label    \"\"\n        graphics\n        [\n            x    164.38\n            y    224.70\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    7\n        label    \"\"\n        graphics\n        [\n            x    178.21\n            y    278.02\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    8\n        label    \"\"\n        graphics\n        [\n            x    397.90\n            y    279.88\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    9\n        label    \"\"\n        graphics\n        [\n            x    403.55\n            y    532.96\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    10\n        label    \"\"\n        graphics\n        [\n            x    527.99\n            y    63.33\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    11\n        label    \"\"\n        graphics\n        [\n            x    372.88\n            y    125.57\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    12\n        label    \"\"\n        graphics\n        [\n            x    125.28\n            y    508.60\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    13\n        label    \"\"\n        graphics\n        [\n            x    287.91\n            y    185.91\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    14\n        label    \"\"\n        graphics\n        [\n            x    606.48\n            y    575.99\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    15\n        label    \"\"\n        graphics\n        [\n            x    21.44\n            y    589.10\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    16\n        label    \"\"\n        graphics\n        [\n            x    638.68\n            y    439.46\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    17\n        label    \"\"\n        graphics\n        [\n            x    609.45\n            y    333.76\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    18\n        label    \"\"\n        graphics\n        [\n            x    545.74\n            y    307.05\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    19\n        label    \"\"\n        graphics\n        [\n            x    14.17\n            y    605.56\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    20\n        label    \"\"\n        graphics\n        [\n            x    465.74\n            y    373.00\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    21\n        label    \"\"\n        graphics\n        [\n            x    677.84\n            y    367.97\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    22\n        label    \"\"\n        graphics\n        [\n            x    261.98\n            y    85.38\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    23\n        label    \"\"\n        graphics\n        [\n            x    287.60\n            y    661.19\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    24\n        label    \"\"\n        graphics\n        [\n            x    144.76\n            y    695.00\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    25\n        label    \"\"\n        graphics\n        [\n            x    640.50\n            y    121.64\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    26\n        label    \"\"\n        graphics\n        [\n            x    112.96\n            y    212.92\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    27\n        label    \"\"\n        graphics\n        [\n            x    543.42\n            y    590.47\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    28\n        label    \"\"\n        graphics\n        [\n            x    202.87\n            y    508.49\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    29\n        label    \"\"\n        graphics\n        [\n            x    351.02\n            y    6.32\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    30\n        label    \"\"\n        graphics\n        [\n            x    117.68\n            y    21.89\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    31\n        label    \"\"\n        graphics\n        [\n            x    508.07\n            y    654.22\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    32\n        label    \"\"\n        graphics\n        [\n            x    94.43\n            y    621.70\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    33\n        label    \"\"\n        graphics\n        [\n            x    490.28\n            y    9.70\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    34\n        label    \"\"\n        graphics\n        [\n            x    343.83\n            y    69.63\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    35\n        label    \"\"\n        graphics\n        [\n            x    296.64\n            y    216.58\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    36\n        label    \"\"\n        graphics\n        [\n            x    178.55\n            y    519.79\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    37\n        label    \"\"\n        graphics\n        [\n            x    626.95\n            y    398.46\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    38\n        label    \"\"\n        graphics\n        [\n            x    268.47\n            y    461.86\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    39\n        label    \"\"\n        graphics\n        [\n            x    489.39\n            y    387.74\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    40\n        label    \"\"\n        graphics\n        [\n            x    226.18\n            y    181.50\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    41\n        label    \"\"\n        graphics\n        [\n            x    150.44\n            y    456.72\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    42\n        label    \"\"\n        graphics\n        [\n            x    381.95\n            y    80.39\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    43\n        label    \"\"\n        graphics\n        [\n            x    60.84\n            y    153.83\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    44\n        label    \"\"\n        graphics\n        [\n            x    129.18\n            y    593.35\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    45\n        label    \"\"\n        graphics\n        [\n            x    87.90\n            y    133.18\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    46\n        label    \"\"\n        graphics\n        [\n            x    141.71\n            y    318.04\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    47\n        label    \"\"\n        graphics\n        [\n            x    339.60\n            y    61.78\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    48\n        label    \"\"\n        graphics\n        [\n            x    347.85\n            y    317.93\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    49\n        label    \"\"\n        graphics\n        [\n            x    254.12\n            y    623.97\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    50\n        label    \"\"\n        graphics\n        [\n            x    458.72\n            y    444.94\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    51\n        label    \"\"\n        graphics\n        [\n            x    667.25\n            y    131.06\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    52\n        label    \"\"\n        graphics\n        [\n            x    389.48\n            y    34.96\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    53\n        label    \"\"\n        graphics\n        [\n            x    24.55\n            y    328.31\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    54\n        label    \"\"\n        graphics\n        [\n            x    541.90\n            y    342.43\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    55\n        label    \"\"\n        graphics\n        [\n            x    131.14\n            y    150.99\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    56\n        label    \"\"\n        graphics\n        [\n            x    156.74\n            y    607.20\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    57\n        label    \"\"\n        graphics\n        [\n            x    87.86\n            y    529.21\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    58\n        label    \"\"\n        graphics\n        [\n            x    414.17\n            y    570.00\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    59\n        label    \"\"\n        graphics\n        [\n            x    178.34\n            y    531.00\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    edge\n    [\n        source    0\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    1\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    1\n        target    34\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    10\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    11\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    11\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    12\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    13\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    14\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    15\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    16\n        target    39\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    16\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    17\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    17\n        target    55\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    18\n        target    20\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    18\n        target    29\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    18\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    19\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    2\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    20\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    21\n        target    19\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    22\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    23\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    23\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    24\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    25\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    26\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    26\n        target    46\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    27\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    27\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    28\n        target    19\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    29\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    3\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    3\n        target    46\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    30\n        target    28\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    30\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    31\n        target    30\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    32\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    33\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    34\n        target    30\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    35\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    36\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    37\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    38\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    38\n        target    54\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    38\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    39\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    4\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    40\n        target    19\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    41\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    42\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    42\n        target    47\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    43\n        target    28\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    44\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    45\n        target    27\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    45\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    45\n        target    53\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    46\n        target    34\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    47\n        target    41\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    47\n        target    48\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    48\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    49\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    5\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    50\n        target    31\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    50\n        target    40\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    51\n        target    35\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    52\n        target    40\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    53\n        target    25\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    53\n        target    51\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    54\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    54\n        target    32\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    55\n        target    40\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    56\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    57\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    57\n        target    26\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    58\n        target    29\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    58\n        target    46\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    59\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    6\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    6\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    7\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    8\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    9\n        target    27\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    9\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n]\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v60e84.tglf",
    "content": "0 265.000 93.000 30.000 30.000\n1 613.000 592.000 30.000 30.000\n2 639.000 500.000 30.000 30.000\n3 95.000 469.000 30.000 30.000\n4 189.000 475.000 30.000 30.000\n5 535.000 74.000 30.000 30.000\n6 164.000 224.000 30.000 30.000\n7 178.000 278.000 30.000 30.000\n8 397.000 279.000 30.000 30.000\n9 403.000 532.000 30.000 30.000\n10 527.000 63.000 30.000 30.000\n11 372.000 125.000 30.000 30.000\n12 125.000 508.000 30.000 30.000\n13 287.000 185.000 30.000 30.000\n14 606.000 575.000 30.000 30.000\n15 21.000 589.000 30.000 30.000\n16 638.000 439.000 30.000 30.000\n17 609.000 333.000 30.000 30.000\n18 545.000 307.000 30.000 30.000\n19 14.000 605.000 30.000 30.000\n20 465.000 373.000 30.000 30.000\n21 677.000 367.000 30.000 30.000\n22 261.000 85.000 30.000 30.000\n23 287.000 661.000 30.000 30.000\n24 144.000 695.000 30.000 30.000\n25 640.000 121.000 30.000 30.000\n26 112.000 212.000 30.000 30.000\n27 543.000 590.000 30.000 30.000\n28 202.000 508.000 30.000 30.000\n29 351.000 6.000 30.000 30.000\n30 117.000 21.000 30.000 30.000\n31 508.000 654.000 30.000 30.000\n32 94.000 621.000 30.000 30.000\n33 490.000 9.000 30.000 30.000\n34 343.000 69.000 30.000 30.000\n35 296.000 216.000 30.000 30.000\n36 178.000 519.000 30.000 30.000\n37 626.000 398.000 30.000 30.000\n38 268.000 461.000 30.000 30.000\n39 489.000 387.000 30.000 30.000\n40 226.000 181.000 30.000 30.000\n41 150.000 456.000 30.000 30.000\n42 381.000 80.000 30.000 30.000\n43 60.000 153.000 30.000 30.000\n44 129.000 593.000 30.000 30.000\n45 87.000 133.000 30.000 30.000\n46 141.000 318.000 30.000 30.000\n47 339.000 61.000 30.000 30.000\n48 347.000 317.000 30.000 30.000\n49 254.000 623.000 30.000 30.000\n50 458.000 444.000 30.000 30.000\n51 667.000 131.000 30.000 30.000\n52 389.000 34.000 30.000 30.000\n53 24.000 328.000 30.000 30.000\n54 541.000 342.000 30.000 30.000\n55 131.000 150.000 30.000 30.000\n56 156.000 607.000 30.000 30.000\n57 87.000 529.000 30.000 30.000\n58 414.000 570.000 30.000 30.000\n59 178.000 531.000 30.000 30.000\n#\n21 19\n40 19\n18 5\n58 29\n26 1\n35 21\n51 35\n1 0\n38 8\n34 30\n16 39\n32 14\n50 31\n33 17\n39 5\n20 5\n54 13\n2 1\n42 22\n23 12\n47 48\n56 4\n46 34\n38 5\n3 46\n55 40\n11 1\n8 4\n53 25\n30 28\n27 18\n22 21\n17 15\n25 5\n47 41\n11 23\n5 4\n43 28\n30 8\n36 1\n16 9\n58 46\n24 18\n17 55\n4 0\n3 2\n53 51\n57 26\n28 19\n48 1\n23 16\n18 20\n50 40\n41 10\n10 4\n45 53\n57 12\n0 22\n42 47\n38 54\n45 3\n6 4\n52 40\n29 22\n19 18\n18 29\n49 6\n45 27\n31 30\n59 10\n6 3\n15 4\n44 13\n27 7\n12 6\n37 13\n9 27\n14 0\n13 11\n1 34\n26 46\n7 5\n9 6\n54 32\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v60e90.gml",
    "content": "graph\n[\n    node\n    [\n        id    0\n        label    \"\"\n        graphics\n        [\n            x    243.82\n            y    279.13\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    1\n        label    \"\"\n        graphics\n        [\n            x    118.12\n            y    670.88\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    2\n        label    \"\"\n        graphics\n        [\n            x    312.26\n            y    400.75\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    3\n        label    \"\"\n        graphics\n        [\n            x    371.42\n            y    120.01\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    4\n        label    \"\"\n        graphics\n        [\n            x    24.75\n            y    138.73\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    5\n        label    \"\"\n        graphics\n        [\n            x    2.13\n            y    664.33\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    6\n        label    \"\"\n        graphics\n        [\n            x    462.22\n            y    360.44\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    7\n        label    \"\"\n        graphics\n        [\n            x    393.52\n            y    614.96\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    8\n        label    \"\"\n        graphics\n        [\n            x    419.50\n            y    194.50\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    9\n        label    \"\"\n        graphics\n        [\n            x    636.75\n            y    52.36\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    10\n        label    \"\"\n        graphics\n        [\n            x    76.71\n            y    111.56\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    11\n        label    \"\"\n        graphics\n        [\n            x    521.97\n            y    197.87\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    12\n        label    \"\"\n        graphics\n        [\n            x    25.27\n            y    271.59\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    13\n        label    \"\"\n        graphics\n        [\n            x    356.01\n            y    159.31\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    14\n        label    \"\"\n        graphics\n        [\n            x    10.14\n            y    430.49\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    15\n        label    \"\"\n        graphics\n        [\n            x    230.01\n            y    253.82\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    16\n        label    \"\"\n        graphics\n        [\n            x    532.47\n            y    134.71\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    17\n        label    \"\"\n        graphics\n        [\n            x    576.49\n            y    449.26\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    18\n        label    \"\"\n        graphics\n        [\n            x    89.41\n            y    546.82\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    19\n        label    \"\"\n        graphics\n        [\n            x    546.12\n            y    289.71\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    20\n        label    \"\"\n        graphics\n        [\n            x    571.28\n            y    175.07\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    21\n        label    \"\"\n        graphics\n        [\n            x    11.52\n            y    102.26\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    22\n        label    \"\"\n        graphics\n        [\n            x    486.47\n            y    619.44\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    23\n        label    \"\"\n        graphics\n        [\n            x    70.01\n            y    485.98\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    24\n        label    \"\"\n        graphics\n        [\n            x    320.40\n            y    552.16\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    25\n        label    \"\"\n        graphics\n        [\n            x    332.22\n            y    595.69\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    26\n        label    \"\"\n        graphics\n        [\n            x    477.21\n            y    62.43\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    27\n        label    \"\"\n        graphics\n        [\n            x    490.48\n            y    111.44\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    28\n        label    \"\"\n        graphics\n        [\n            x    484.76\n            y    189.82\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    29\n        label    \"\"\n        graphics\n        [\n            x    521.12\n            y    71.24\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    30\n        label    \"\"\n        graphics\n        [\n            x    492.72\n            y    589.19\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    31\n        label    \"\"\n        graphics\n        [\n            x    506.72\n            y    212.72\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    32\n        label    \"\"\n        graphics\n        [\n            x    550.90\n            y    127.62\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    33\n        label    \"\"\n        graphics\n        [\n            x    321.49\n            y    535.87\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    34\n        label    \"\"\n        graphics\n        [\n            x    156.52\n            y    93.72\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    35\n        label    \"\"\n        graphics\n        [\n            x    65.57\n            y    247.74\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    36\n        label    \"\"\n        graphics\n        [\n            x    684.66\n            y    118.30\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    37\n        label    \"\"\n        graphics\n        [\n            x    496.40\n            y    691.29\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    38\n        label    \"\"\n        graphics\n        [\n            x    170.02\n            y    527.74\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    39\n        label    \"\"\n        graphics\n        [\n            x    248.90\n            y    331.04\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    40\n        label    \"\"\n        graphics\n        [\n            x    619.31\n            y    16.80\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    41\n        label    \"\"\n        graphics\n        [\n            x    611.63\n            y    373.76\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    42\n        label    \"\"\n        graphics\n        [\n            x    123.78\n            y    146.43\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    43\n        label    \"\"\n        graphics\n        [\n            x    0.34\n            y    308.20\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    44\n        label    \"\"\n        graphics\n        [\n            x    584.95\n            y    0.61\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    45\n        label    \"\"\n        graphics\n        [\n            x    651.23\n            y    6.91\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    46\n        label    \"\"\n        graphics\n        [\n            x    558.22\n            y    87.33\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    47\n        label    \"\"\n        graphics\n        [\n            x    535.40\n            y    315.53\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    48\n        label    \"\"\n        graphics\n        [\n            x    406.55\n            y    157.47\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    49\n        label    \"\"\n        graphics\n        [\n            x    379.71\n            y    489.54\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    50\n        label    \"\"\n        graphics\n        [\n            x    680.15\n            y    625.67\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    51\n        label    \"\"\n        graphics\n        [\n            x    448.45\n            y    220.67\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    52\n        label    \"\"\n        graphics\n        [\n            x    103.15\n            y    81.23\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    53\n        label    \"\"\n        graphics\n        [\n            x    623.06\n            y    191.12\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    54\n        label    \"\"\n        graphics\n        [\n            x    405.58\n            y    625.78\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    55\n        label    \"\"\n        graphics\n        [\n            x    378.50\n            y    232.15\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    56\n        label    \"\"\n        graphics\n        [\n            x    35.64\n            y    619.56\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    57\n        label    \"\"\n        graphics\n        [\n            x    237.48\n            y    677.16\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    58\n        label    \"\"\n        graphics\n        [\n            x    474.13\n            y    423.40\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    59\n        label    \"\"\n        graphics\n        [\n            x    130.55\n            y    323.40\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    edge\n    [\n        source    0\n        target    40\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    1\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    1\n        target    35\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    10\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    11\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    11\n        target    38\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    11\n        target    41\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    12\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    12\n        target    51\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    13\n        target    39\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    13\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    14\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    14\n        target    55\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    15\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    15\n        target    29\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    15\n        target    47\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    16\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    17\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    17\n        target    39\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    18\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    19\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    19\n        target    25\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    2\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    2\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    20\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    20\n        target    32\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    21\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    22\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    22\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    23\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    23\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    24\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    24\n        target    56\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    25\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    26\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    27\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    28\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    29\n        target    25\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    3\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    3\n        target    35\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    30\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    31\n        target    20\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    32\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    32\n        target    36\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    33\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    34\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    35\n        target    29\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    36\n        target    19\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    37\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    38\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    39\n        target    29\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    4\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    40\n        target    33\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    41\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    42\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    43\n        target    38\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    44\n        target    27\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    45\n        target    33\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    46\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    46\n        target    31\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    47\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    47\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    47\n        target    27\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    47\n        target    31\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    48\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    48\n        target    46\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    49\n        target    29\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    49\n        target    50\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    5\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    50\n        target    48\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    51\n        target    37\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    52\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    52\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    52\n        target    39\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    53\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    53\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    54\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    55\n        target    40\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    56\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    57\n        target    55\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    58\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    58\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    59\n        target    58\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    6\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    7\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    7\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    8\n        target    30\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    8\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    9\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    9\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n]\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v60e90.tglf",
    "content": "0 243.000 279.000 30.000 30.000\n1 118.000 670.000 30.000 30.000\n2 312.000 400.000 30.000 30.000\n3 371.000 120.000 30.000 30.000\n4 24.000 138.000 30.000 30.000\n5 2.000 664.000 30.000 30.000\n6 462.000 360.000 30.000 30.000\n7 393.000 614.000 30.000 30.000\n8 419.000 194.000 30.000 30.000\n9 636.000 52.000 30.000 30.000\n10 76.000 111.000 30.000 30.000\n11 521.000 197.000 30.000 30.000\n12 25.000 271.000 30.000 30.000\n13 356.000 159.000 30.000 30.000\n14 10.000 430.000 30.000 30.000\n15 230.000 253.000 30.000 30.000\n16 532.000 134.000 30.000 30.000\n17 576.000 449.000 30.000 30.000\n18 89.000 546.000 30.000 30.000\n19 546.000 289.000 30.000 30.000\n20 571.000 175.000 30.000 30.000\n21 11.000 102.000 30.000 30.000\n22 486.000 619.000 30.000 30.000\n23 70.000 485.000 30.000 30.000\n24 320.000 552.000 30.000 30.000\n25 332.000 595.000 30.000 30.000\n26 477.000 62.000 30.000 30.000\n27 490.000 111.000 30.000 30.000\n28 484.000 189.000 30.000 30.000\n29 521.000 71.000 30.000 30.000\n30 492.000 589.000 30.000 30.000\n31 506.000 212.000 30.000 30.000\n32 550.000 127.000 30.000 30.000\n33 321.000 535.000 30.000 30.000\n34 156.000 93.000 30.000 30.000\n35 65.000 247.000 30.000 30.000\n36 684.000 118.000 30.000 30.000\n37 496.000 691.000 30.000 30.000\n38 170.000 527.000 30.000 30.000\n39 248.000 331.000 30.000 30.000\n40 619.000 16.000 30.000 30.000\n41 611.000 373.000 30.000 30.000\n42 123.000 146.000 30.000 30.000\n43 0.000 308.000 30.000 30.000\n44 584.000 0.000 30.000 30.000\n45 651.000 6.000 30.000 30.000\n46 558.000 87.000 30.000 30.000\n47 535.000 315.000 30.000 30.000\n48 406.000 157.000 30.000 30.000\n49 379.000 489.000 30.000 30.000\n50 680.000 625.000 30.000 30.000\n51 448.000 220.000 30.000 30.000\n52 103.000 81.000 30.000 30.000\n53 623.000 191.000 30.000 30.000\n54 405.000 625.000 30.000 30.000\n55 378.000 232.000 30.000 30.000\n56 35.000 619.000 30.000 30.000\n57 237.000 677.000 30.000 30.000\n58 474.000 423.000 30.000 30.000\n59 130.000 323.000 30.000 30.000\n#\n30 22\n13 39\n8 30\n21 12\n24 56\n53 0\n20 13\n20 32\n41 22\n39 29\n11 0\n9 8\n6 2\n58 11\n8 5\n2 0\n51 37\n3 35\n13 9\n28 3\n48 4\n11 38\n48 46\n14 55\n40 33\n25 12\n45 33\n49 29\n22 13\n5 4\n10 9\n23 6\n11 41\n22 0\n42 18\n7 6\n29 25\n57 55\n33 17\n52 17\n53 23\n36 19\n16 10\n19 25\n56 15\n35 29\n23 17\n47 1\n32 11\n34 3\n32 36\n15 47\n38 1\n15 29\n46 31\n46 23\n4 2\n50 48\n19 14\n54 10\n26 21\n15 0\n55 40\n7 18\n14 1\n37 15\n12 5\n58 18\n1 35\n44 27\n43 38\n59 58\n18 5\n49 50\n0 40\n27 7\n17 39\n12 51\n1 0\n17 15\n47 11\n2 11\n9 18\n47 31\n52 39\n31 20\n24 17\n3 2\n52 13\n47 27\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v70e105.gml",
    "content": "graph\n[\n    node\n    [\n        id    0\n        label    \"\"\n        graphics\n        [\n            x    622.13\n            y    78.10\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    1\n        label    \"\"\n        graphics\n        [\n            x    321.80\n            y    607.12\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    2\n        label    \"\"\n        graphics\n        [\n            x    62.86\n            y    418.27\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    3\n        label    \"\"\n        graphics\n        [\n            x    658.02\n            y    264.31\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    4\n        label    \"\"\n        graphics\n        [\n            x    493.27\n            y    267.33\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    5\n        label    \"\"\n        graphics\n        [\n            x    333.56\n            y    62.74\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    6\n        label    \"\"\n        graphics\n        [\n            x    563.33\n            y    220.38\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    7\n        label    \"\"\n        graphics\n        [\n            x    329.79\n            y    98.22\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    8\n        label    \"\"\n        graphics\n        [\n            x    552.40\n            y    142.67\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    9\n        label    \"\"\n        graphics\n        [\n            x    434.61\n            y    659.42\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    10\n        label    \"\"\n        graphics\n        [\n            x    107.00\n            y    128.56\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    11\n        label    \"\"\n        graphics\n        [\n            x    385.31\n            y    440.85\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    12\n        label    \"\"\n        graphics\n        [\n            x    679.99\n            y    341.47\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    13\n        label    \"\"\n        graphics\n        [\n            x    592.00\n            y    599.45\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    14\n        label    \"\"\n        graphics\n        [\n            x    124.42\n            y    50.85\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    15\n        label    \"\"\n        graphics\n        [\n            x    610.06\n            y    738.04\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    16\n        label    \"\"\n        graphics\n        [\n            x    708.53\n            y    393.92\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    17\n        label    \"\"\n        graphics\n        [\n            x    210.42\n            y    269.50\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    18\n        label    \"\"\n        graphics\n        [\n            x    104.96\n            y    121.54\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    19\n        label    \"\"\n        graphics\n        [\n            x    453.79\n            y    668.38\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    20\n        label    \"\"\n        graphics\n        [\n            x    118.15\n            y    464.73\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    21\n        label    \"\"\n        graphics\n        [\n            x    59.76\n            y    172.51\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    22\n        label    \"\"\n        graphics\n        [\n            x    610.52\n            y    187.54\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    23\n        label    \"\"\n        graphics\n        [\n            x    144.12\n            y    641.54\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    24\n        label    \"\"\n        graphics\n        [\n            x    251.75\n            y    720.32\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    25\n        label    \"\"\n        graphics\n        [\n            x    479.39\n            y    623.31\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    26\n        label    \"\"\n        graphics\n        [\n            x    68.76\n            y    58.76\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    27\n        label    \"\"\n        graphics\n        [\n            x    43.47\n            y    118.27\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    28\n        label    \"\"\n        graphics\n        [\n            x    263.23\n            y    595.36\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    29\n        label    \"\"\n        graphics\n        [\n            x    18.61\n            y    128.70\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    30\n        label    \"\"\n        graphics\n        [\n            x    628.74\n            y    168.10\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    31\n        label    \"\"\n        graphics\n        [\n            x    654.43\n            y    171.45\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    32\n        label    \"\"\n        graphics\n        [\n            x    472.13\n            y    264.14\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    33\n        label    \"\"\n        graphics\n        [\n            x    165.82\n            y    279.69\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    34\n        label    \"\"\n        graphics\n        [\n            x    18.31\n            y    244.47\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    35\n        label    \"\"\n        graphics\n        [\n            x    294.12\n            y    143.52\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    36\n        label    \"\"\n        graphics\n        [\n            x    584.75\n            y    541.00\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    37\n        label    \"\"\n        graphics\n        [\n            x    534.72\n            y    246.55\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    38\n        label    \"\"\n        graphics\n        [\n            x    186.72\n            y    141.90\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    39\n        label    \"\"\n        graphics\n        [\n            x    306.60\n            y    200.17\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    40\n        label    \"\"\n        graphics\n        [\n            x    673.15\n            y    108.22\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    41\n        label    \"\"\n        graphics\n        [\n            x    718.11\n            y    278.33\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    42\n        label    \"\"\n        graphics\n        [\n            x    481.59\n            y    529.78\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    43\n        label    \"\"\n        graphics\n        [\n            x    178.55\n            y    609.32\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    44\n        label    \"\"\n        graphics\n        [\n            x    747.75\n            y    81.02\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    45\n        label    \"\"\n        graphics\n        [\n            x    173.30\n            y    335.43\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    46\n        label    \"\"\n        graphics\n        [\n            x    89.71\n            y    68.49\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    47\n        label    \"\"\n        graphics\n        [\n            x    148.31\n            y    80.66\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    48\n        label    \"\"\n        graphics\n        [\n            x    469.97\n            y    35.92\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    49\n        label    \"\"\n        graphics\n        [\n            x    36.71\n            y    39.61\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    50\n        label    \"\"\n        graphics\n        [\n            x    222.18\n            y    602.93\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    51\n        label    \"\"\n        graphics\n        [\n            x    515.72\n            y    563.65\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    52\n        label    \"\"\n        graphics\n        [\n            x    362.42\n            y    364.23\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    53\n        label    \"\"\n        graphics\n        [\n            x    67.20\n            y    29.81\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    54\n        label    \"\"\n        graphics\n        [\n            x    424.03\n            y    678.16\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    55\n        label    \"\"\n        graphics\n        [\n            x    156.95\n            y    488.43\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    56\n        label    \"\"\n        graphics\n        [\n            x    246.79\n            y    245.58\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    57\n        label    \"\"\n        graphics\n        [\n            x    4.40\n            y    491.01\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    58\n        label    \"\"\n        graphics\n        [\n            x    682.16\n            y    390.25\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    59\n        label    \"\"\n        graphics\n        [\n            x    544.11\n            y    719.89\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    60\n        label    \"\"\n        graphics\n        [\n            x    288.43\n            y    275.86\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    61\n        label    \"\"\n        graphics\n        [\n            x    267.43\n            y    487.62\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    62\n        label    \"\"\n        graphics\n        [\n            x    21.15\n            y    87.21\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    63\n        label    \"\"\n        graphics\n        [\n            x    142.77\n            y    133.27\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    64\n        label    \"\"\n        graphics\n        [\n            x    76.35\n            y    109.30\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    65\n        label    \"\"\n        graphics\n        [\n            x    550.56\n            y    735.07\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    66\n        label    \"\"\n        graphics\n        [\n            x    32.18\n            y    706.35\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    67\n        label    \"\"\n        graphics\n        [\n            x    511.31\n            y    412.68\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    68\n        label    \"\"\n        graphics\n        [\n            x    696.34\n            y    494.47\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    69\n        label    \"\"\n        graphics\n        [\n            x    170.47\n            y    113.75\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    edge\n    [\n        source    0\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    0\n        target    38\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    0\n        target    46\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    1\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    1\n        target    53\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    10\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    11\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    12\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    12\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    13\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    14\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    15\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    16\n        target    32\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    16\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    17\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    17\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    18\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    19\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    2\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    20\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    20\n        target    43\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    21\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    21\n        target    43\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    22\n        target    19\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    23\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    23\n        target    28\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    24\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    25\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    25\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    26\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    26\n        target    47\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    27\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    28\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    29\n        target    24\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    3\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    30\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    31\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    31\n        target    62\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    32\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    33\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    34\n        target    30\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    35\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    36\n        target    29\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    36\n        target    37\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    37\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    37\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    38\n        target    48\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    38\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    39\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    39\n        target    29\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    39\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    4\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    40\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    40\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    41\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    41\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    42\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    43\n        target    38\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    44\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    45\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    46\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    47\n        target    27\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    47\n        target    56\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    48\n        target    40\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    49\n        target    35\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    5\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    50\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    50\n        target    45\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    50\n        target    47\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    50\n        target    58\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    51\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    52\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    53\n        target    41\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    53\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    54\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    55\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    55\n        target    37\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    55\n        target    53\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    56\n        target    28\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    57\n        target    36\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    58\n        target    52\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    58\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    59\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    59\n        target    39\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    6\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    60\n        target    19\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    60\n        target    54\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    61\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    62\n        target    30\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    63\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    64\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    65\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    66\n        target    36\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    66\n        target    60\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    66\n        target    63\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    67\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    67\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    68\n        target    62\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    69\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    7\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    7\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    8\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    8\n        target    37\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    8\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    9\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n]\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v70e105.tglf",
    "content": "0 622.000 78.000 30.000 30.000\n1 321.000 607.000 30.000 30.000\n2 62.000 418.000 30.000 30.000\n3 658.000 264.000 30.000 30.000\n4 493.000 267.000 30.000 30.000\n5 333.000 62.000 30.000 30.000\n6 563.000 220.000 30.000 30.000\n7 329.000 98.000 30.000 30.000\n8 552.000 142.000 30.000 30.000\n9 434.000 659.000 30.000 30.000\n10 107.000 128.000 30.000 30.000\n11 385.000 440.000 30.000 30.000\n12 679.000 341.000 30.000 30.000\n13 592.000 599.000 30.000 30.000\n14 124.000 50.000 30.000 30.000\n15 610.000 738.000 30.000 30.000\n16 708.000 393.000 30.000 30.000\n17 210.000 269.000 30.000 30.000\n18 104.000 121.000 30.000 30.000\n19 453.000 668.000 30.000 30.000\n20 118.000 464.000 30.000 30.000\n21 59.000 172.000 30.000 30.000\n22 610.000 187.000 30.000 30.000\n23 144.000 641.000 30.000 30.000\n24 251.000 720.000 30.000 30.000\n25 479.000 623.000 30.000 30.000\n26 68.000 58.000 30.000 30.000\n27 43.000 118.000 30.000 30.000\n28 263.000 595.000 30.000 30.000\n29 18.000 128.000 30.000 30.000\n30 628.000 168.000 30.000 30.000\n31 654.000 171.000 30.000 30.000\n32 472.000 264.000 30.000 30.000\n33 165.000 279.000 30.000 30.000\n34 18.000 244.000 30.000 30.000\n35 294.000 143.000 30.000 30.000\n36 584.000 541.000 30.000 30.000\n37 534.000 246.000 30.000 30.000\n38 186.000 141.000 30.000 30.000\n39 306.000 200.000 30.000 30.000\n40 673.000 108.000 30.000 30.000\n41 718.000 278.000 30.000 30.000\n42 481.000 529.000 30.000 30.000\n43 178.000 609.000 30.000 30.000\n44 747.000 81.000 30.000 30.000\n45 173.000 335.000 30.000 30.000\n46 89.000 68.000 30.000 30.000\n47 148.000 80.000 30.000 30.000\n48 469.000 35.000 30.000 30.000\n49 36.000 39.000 30.000 30.000\n50 222.000 602.000 30.000 30.000\n51 515.000 563.000 30.000 30.000\n52 362.000 364.000 30.000 30.000\n53 67.000 29.000 30.000 30.000\n54 424.000 678.000 30.000 30.000\n55 156.000 488.000 30.000 30.000\n56 246.000 245.000 30.000 30.000\n57 4.000 491.000 30.000 30.000\n58 682.000 390.000 30.000 30.000\n59 544.000 719.000 30.000 30.000\n60 288.000 275.000 30.000 30.000\n61 267.000 487.000 30.000 30.000\n62 21.000 87.000 30.000 30.000\n63 142.000 133.000 30.000 30.000\n64 76.000 109.000 30.000 30.000\n65 550.000 735.000 30.000 30.000\n66 32.000 706.000 30.000 30.000\n67 511.000 412.000 30.000 30.000\n68 696.000 494.000 30.000 30.000\n69 170.000 113.000 30.000 30.000\n#\n25 22\n31 62\n12 6\n23 28\n7 2\n28 2\n26 47\n12 23\n8 14\n60 54\n60 19\n6 0\n38 7\n30 21\n56 28\n11 4\n50 58\n58 8\n40 21\n39 29\n46 17\n53 41\n19 10\n1 53\n42 9\n62 30\n20 43\n21 10\n49 35\n50 3\n39 0\n0 17\n47 27\n38 48\n41 16\n55 37\n22 19\n16 7\n67 6\n18 8\n66 60\n50 45\n59 13\n63 10\n50 47\n21 43\n55 53\n14 9\n58 52\n10 5\n37 23\n1 0\n25 12\n29 24\n39 5\n31 16\n68 62\n0 46\n54 16\n32 13\n52 22\n20 14\n26 14\n66 36\n15 10\n69 9\n64 5\n33 8\n36 37\n2 0\n5 3\n40 6\n17 9\n61 18\n57 36\n51 17\n23 18\n3 0\n65 8\n17 2\n48 40\n45 17\n13 9\n37 3\n16 32\n36 29\n35 0\n34 30\n66 63\n0 38\n55 3\n4 3\n7 14\n47 56\n59 39\n43 38\n27 2\n53 8\n8 4\n44 22\n8 37\n9 8\n24 8\n41 2\n67 1\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v70e70.gml",
    "content": "graph\n[\n    node\n    [\n        id    0\n        label    \"\"\n        graphics\n        [\n            x    115.45\n            y    672.93\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    1\n        label    \"\"\n        graphics\n        [\n            x    427.84\n            y    155.69\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    2\n        label    \"\"\n        graphics\n        [\n            x    183.43\n            y    513.35\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    3\n        label    \"\"\n        graphics\n        [\n            x    315.94\n            y    353.13\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    4\n        label    \"\"\n        graphics\n        [\n            x    741.87\n            y    171.53\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    5\n        label    \"\"\n        graphics\n        [\n            x    323.65\n            y    700.93\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    6\n        label    \"\"\n        graphics\n        [\n            x    748.32\n            y    42.71\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    7\n        label    \"\"\n        graphics\n        [\n            x    430.44\n            y    752.75\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    8\n        label    \"\"\n        graphics\n        [\n            x    597.70\n            y    40.20\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    9\n        label    \"\"\n        graphics\n        [\n            x    156.73\n            y    125.79\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    10\n        label    \"\"\n        graphics\n        [\n            x    628.88\n            y    555.88\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    11\n        label    \"\"\n        graphics\n        [\n            x    417.73\n            y    261.01\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    12\n        label    \"\"\n        graphics\n        [\n            x    139.99\n            y    675.79\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    13\n        label    \"\"\n        graphics\n        [\n            x    49.49\n            y    458.41\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    14\n        label    \"\"\n        graphics\n        [\n            x    330.06\n            y    57.66\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    15\n        label    \"\"\n        graphics\n        [\n            x    239.39\n            y    704.44\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    16\n        label    \"\"\n        graphics\n        [\n            x    550.84\n            y    164.88\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    17\n        label    \"\"\n        graphics\n        [\n            x    229.12\n            y    266.81\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    18\n        label    \"\"\n        graphics\n        [\n            x    499.06\n            y    650.97\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    19\n        label    \"\"\n        graphics\n        [\n            x    101.24\n            y    209.13\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    20\n        label    \"\"\n        graphics\n        [\n            x    280.22\n            y    734.22\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    21\n        label    \"\"\n        graphics\n        [\n            x    636.52\n            y    578.81\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    22\n        label    \"\"\n        graphics\n        [\n            x    69.68\n            y    412.60\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    23\n        label    \"\"\n        graphics\n        [\n            x    118.29\n            y    696.48\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    24\n        label    \"\"\n        graphics\n        [\n            x    578.98\n            y    124.08\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    25\n        label    \"\"\n        graphics\n        [\n            x    727.86\n            y    244.60\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    26\n        label    \"\"\n        graphics\n        [\n            x    664.33\n            y    522.81\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    27\n        label    \"\"\n        graphics\n        [\n            x    687.47\n            y    679.89\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    28\n        label    \"\"\n        graphics\n        [\n            x    49.95\n            y    105.84\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    29\n        label    \"\"\n        graphics\n        [\n            x    195.47\n            y    357.59\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    30\n        label    \"\"\n        graphics\n        [\n            x    29.21\n            y    24.34\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    31\n        label    \"\"\n        graphics\n        [\n            x    433.76\n            y    477.19\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    32\n        label    \"\"\n        graphics\n        [\n            x    543.92\n            y    31.76\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    33\n        label    \"\"\n        graphics\n        [\n            x    430.25\n            y    176.93\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    34\n        label    \"\"\n        graphics\n        [\n            x    241.40\n            y    664.12\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    35\n        label    \"\"\n        graphics\n        [\n            x    480.26\n            y    430.12\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    36\n        label    \"\"\n        graphics\n        [\n            x    248.54\n            y    662.35\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    37\n        label    \"\"\n        graphics\n        [\n            x    563.81\n            y    418.82\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    38\n        label    \"\"\n        graphics\n        [\n            x    378.43\n            y    404.53\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    39\n        label    \"\"\n        graphics\n        [\n            x    178.26\n            y    185.54\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    40\n        label    \"\"\n        graphics\n        [\n            x    597.67\n            y    448.96\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    41\n        label    \"\"\n        graphics\n        [\n            x    177.18\n            y    13.69\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    42\n        label    \"\"\n        graphics\n        [\n            x    119.49\n            y    485.69\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    43\n        label    \"\"\n        graphics\n        [\n            x    716.72\n            y    437.57\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    44\n        label    \"\"\n        graphics\n        [\n            x    482.53\n            y    579.42\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    45\n        label    \"\"\n        graphics\n        [\n            x    49.53\n            y    494.42\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    46\n        label    \"\"\n        graphics\n        [\n            x    4.48\n            y    457.08\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    47\n        label    \"\"\n        graphics\n        [\n            x    413.48\n            y    140.21\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    48\n        label    \"\"\n        graphics\n        [\n            x    702.71\n            y    274.61\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    49\n        label    \"\"\n        graphics\n        [\n            x    577.25\n            y    150.10\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    50\n        label    \"\"\n        graphics\n        [\n            x    557.45\n            y    450.68\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    51\n        label    \"\"\n        graphics\n        [\n            x    134.15\n            y    584.46\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    52\n        label    \"\"\n        graphics\n        [\n            x    528.21\n            y    572.04\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    53\n        label    \"\"\n        graphics\n        [\n            x    682.81\n            y    358.13\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    54\n        label    \"\"\n        graphics\n        [\n            x    202.86\n            y    320.03\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    55\n        label    \"\"\n        graphics\n        [\n            x    625.96\n            y    244.18\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    56\n        label    \"\"\n        graphics\n        [\n            x    669.14\n            y    447.96\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    57\n        label    \"\"\n        graphics\n        [\n            x    524.19\n            y    419.17\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    58\n        label    \"\"\n        graphics\n        [\n            x    473.44\n            y    425.54\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    59\n        label    \"\"\n        graphics\n        [\n            x    598.17\n            y    101.98\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    60\n        label    \"\"\n        graphics\n        [\n            x    490.46\n            y    288.30\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    61\n        label    \"\"\n        graphics\n        [\n            x    383.96\n            y    287.88\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    62\n        label    \"\"\n        graphics\n        [\n            x    256.20\n            y    215.27\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    63\n        label    \"\"\n        graphics\n        [\n            x    3.65\n            y    33.81\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    64\n        label    \"\"\n        graphics\n        [\n            x    84.08\n            y    292.40\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    65\n        label    \"\"\n        graphics\n        [\n            x    331.60\n            y    264.77\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    66\n        label    \"\"\n        graphics\n        [\n            x    290.72\n            y    616.26\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    67\n        label    \"\"\n        graphics\n        [\n            x    627.65\n            y    305.99\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    68\n        label    \"\"\n        graphics\n        [\n            x    739.21\n            y    609.33\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    69\n        label    \"\"\n        graphics\n        [\n            x    650.43\n            y    396.93\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    edge\n    [\n        source    1\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    10\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    11\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    12\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    13\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    14\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    15\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    16\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    17\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    18\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    19\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    2\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    20\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    21\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    22\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    23\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    24\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    25\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    26\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    27\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    28\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    29\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    3\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    30\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    31\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    32\n        target    29\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    33\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    34\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    35\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    36\n        target    32\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    37\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    38\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    39\n        target    34\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    4\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    40\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    41\n        target    30\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    42\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    43\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    44\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    45\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    46\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    47\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    48\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    49\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    5\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    50\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    51\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    52\n        target    45\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    53\n        target    30\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    54\n        target    52\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    55\n        target    42\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    56\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    57\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    58\n        target    30\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    59\n        target    35\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    6\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    60\n        target    47\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    61\n        target    37\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    62\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    63\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    63\n        target    33\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    64\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    65\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    66\n        target    35\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    67\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    68\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    69\n        target    31\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    7\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    8\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    9\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n]\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v70e70.tglf",
    "content": "0 115.000 672.000 30.000 30.000\n1 427.000 155.000 30.000 30.000\n2 183.000 513.000 30.000 30.000\n3 315.000 353.000 30.000 30.000\n4 741.000 171.000 30.000 30.000\n5 323.000 700.000 30.000 30.000\n6 748.000 42.000 30.000 30.000\n7 430.000 752.000 30.000 30.000\n8 597.000 40.000 30.000 30.000\n9 156.000 125.000 30.000 30.000\n10 628.000 555.000 30.000 30.000\n11 417.000 261.000 30.000 30.000\n12 139.000 675.000 30.000 30.000\n13 49.000 458.000 30.000 30.000\n14 330.000 57.000 30.000 30.000\n15 239.000 704.000 30.000 30.000\n16 550.000 164.000 30.000 30.000\n17 229.000 266.000 30.000 30.000\n18 499.000 650.000 30.000 30.000\n19 101.000 209.000 30.000 30.000\n20 280.000 734.000 30.000 30.000\n21 636.000 578.000 30.000 30.000\n22 69.000 412.000 30.000 30.000\n23 118.000 696.000 30.000 30.000\n24 578.000 124.000 30.000 30.000\n25 727.000 244.000 30.000 30.000\n26 664.000 522.000 30.000 30.000\n27 687.000 679.000 30.000 30.000\n28 49.000 105.000 30.000 30.000\n29 195.000 357.000 30.000 30.000\n30 29.000 24.000 30.000 30.000\n31 433.000 477.000 30.000 30.000\n32 543.000 31.000 30.000 30.000\n33 430.000 176.000 30.000 30.000\n34 241.000 664.000 30.000 30.000\n35 480.000 430.000 30.000 30.000\n36 248.000 662.000 30.000 30.000\n37 563.000 418.000 30.000 30.000\n38 378.000 404.000 30.000 30.000\n39 178.000 185.000 30.000 30.000\n40 597.000 448.000 30.000 30.000\n41 177.000 13.000 30.000 30.000\n42 119.000 485.000 30.000 30.000\n43 716.000 437.000 30.000 30.000\n44 482.000 579.000 30.000 30.000\n45 49.000 494.000 30.000 30.000\n46 4.000 457.000 30.000 30.000\n47 413.000 140.000 30.000 30.000\n48 702.000 274.000 30.000 30.000\n49 577.000 150.000 30.000 30.000\n50 557.000 450.000 30.000 30.000\n51 134.000 584.000 30.000 30.000\n52 528.000 572.000 30.000 30.000\n53 682.000 358.000 30.000 30.000\n54 202.000 320.000 30.000 30.000\n55 625.000 244.000 30.000 30.000\n56 669.000 447.000 30.000 30.000\n57 524.000 419.000 30.000 30.000\n58 473.000 425.000 30.000 30.000\n59 598.000 101.000 30.000 30.000\n60 490.000 288.000 30.000 30.000\n61 383.000 287.000 30.000 30.000\n62 256.000 215.000 30.000 30.000\n63 3.000 33.000 30.000 30.000\n64 84.000 292.000 30.000 30.000\n65 331.000 264.000 30.000 30.000\n66 290.000 616.000 30.000 30.000\n67 627.000 305.000 30.000 30.000\n68 739.000 609.000 30.000 30.000\n69 650.000 396.000 30.000 30.000\n#\n20 12\n48 12\n41 30\n9 0\n56 1\n39 34\n57 11\n32 29\n7 6\n62 10\n33 10\n10 1\n59 35\n22 14\n13 8\n11 2\n15 1\n44 23\n60 47\n67 3\n29 13\n8 0\n38 5\n46 0\n36 32\n25 1\n52 45\n19 5\n34 23\n63 33\n68 1\n55 42\n47 0\n65 12\n23 2\n5 0\n4 2\n69 31\n28 22\n66 35\n64 16\n24 8\n3 2\n61 37\n49 23\n63 12\n54 52\n12 1\n16 15\n30 2\n45 14\n31 16\n35 5\n58 30\n6 5\n40 10\n14 5\n27 8\n17 6\n53 30\n43 9\n26 3\n1 0\n42 4\n18 0\n51 3\n50 9\n2 0\n21 4\n37 0\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v70e77.gml",
    "content": "graph\n[\n    node\n    [\n        id    0\n        label    \"\"\n        graphics\n        [\n            x    49.40\n            y    219.21\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    1\n        label    \"\"\n        graphics\n        [\n            x    70.87\n            y    714.61\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    2\n        label    \"\"\n        graphics\n        [\n            x    176.73\n            y    574.78\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    3\n        label    \"\"\n        graphics\n        [\n            x    220.69\n            y    667.57\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    4\n        label    \"\"\n        graphics\n        [\n            x    557.20\n            y    240.96\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    5\n        label    \"\"\n        graphics\n        [\n            x    183.64\n            y    454.23\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    6\n        label    \"\"\n        graphics\n        [\n            x    45.03\n            y    3.48\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    7\n        label    \"\"\n        graphics\n        [\n            x    620.34\n            y    590.07\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    8\n        label    \"\"\n        graphics\n        [\n            x    81.01\n            y    293.29\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    9\n        label    \"\"\n        graphics\n        [\n            x    37.10\n            y    678.80\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    10\n        label    \"\"\n        graphics\n        [\n            x    355.67\n            y    135.08\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    11\n        label    \"\"\n        graphics\n        [\n            x    413.44\n            y    379.58\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    12\n        label    \"\"\n        graphics\n        [\n            x    733.65\n            y    496.84\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    13\n        label    \"\"\n        graphics\n        [\n            x    723.72\n            y    398.20\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    14\n        label    \"\"\n        graphics\n        [\n            x    5.45\n            y    294.69\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    15\n        label    \"\"\n        graphics\n        [\n            x    96.80\n            y    348.06\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    16\n        label    \"\"\n        graphics\n        [\n            x    606.34\n            y    310.09\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    17\n        label    \"\"\n        graphics\n        [\n            x    674.21\n            y    236.96\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    18\n        label    \"\"\n        graphics\n        [\n            x    70.72\n            y    3.02\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    19\n        label    \"\"\n        graphics\n        [\n            x    124.07\n            y    549.42\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    20\n        label    \"\"\n        graphics\n        [\n            x    603.49\n            y    190.40\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    21\n        label    \"\"\n        graphics\n        [\n            x    186.33\n            y    533.97\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    22\n        label    \"\"\n        graphics\n        [\n            x    266.61\n            y    65.57\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    23\n        label    \"\"\n        graphics\n        [\n            x    377.74\n            y    218.12\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    24\n        label    \"\"\n        graphics\n        [\n            x    85.74\n            y    255.60\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    25\n        label    \"\"\n        graphics\n        [\n            x    690.21\n            y    694.37\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    26\n        label    \"\"\n        graphics\n        [\n            x    655.22\n            y    738.29\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    27\n        label    \"\"\n        graphics\n        [\n            x    350.07\n            y    322.23\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    28\n        label    \"\"\n        graphics\n        [\n            x    36.74\n            y    292.29\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    29\n        label    \"\"\n        graphics\n        [\n            x    352.35\n            y    541.52\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    30\n        label    \"\"\n        graphics\n        [\n            x    252.70\n            y    612.73\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    31\n        label    \"\"\n        graphics\n        [\n            x    494.98\n            y    177.11\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    32\n        label    \"\"\n        graphics\n        [\n            x    680.58\n            y    528.21\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    33\n        label    \"\"\n        graphics\n        [\n            x    658.73\n            y    38.05\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    34\n        label    \"\"\n        graphics\n        [\n            x    625.06\n            y    88.58\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    35\n        label    \"\"\n        graphics\n        [\n            x    244.63\n            y    261.16\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    36\n        label    \"\"\n        graphics\n        [\n            x    131.40\n            y    449.27\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    37\n        label    \"\"\n        graphics\n        [\n            x    592.86\n            y    392.40\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    38\n        label    \"\"\n        graphics\n        [\n            x    423.84\n            y    33.10\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    39\n        label    \"\"\n        graphics\n        [\n            x    714.00\n            y    679.40\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    40\n        label    \"\"\n        graphics\n        [\n            x    145.20\n            y    84.92\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    41\n        label    \"\"\n        graphics\n        [\n            x    351.54\n            y    17.03\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    42\n        label    \"\"\n        graphics\n        [\n            x    267.50\n            y    523.05\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    43\n        label    \"\"\n        graphics\n        [\n            x    724.47\n            y    714.49\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    44\n        label    \"\"\n        graphics\n        [\n            x    209.58\n            y    225.27\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    45\n        label    \"\"\n        graphics\n        [\n            x    235.81\n            y    677.87\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    46\n        label    \"\"\n        graphics\n        [\n            x    688.95\n            y    142.84\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    47\n        label    \"\"\n        graphics\n        [\n            x    34.99\n            y    158.48\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    48\n        label    \"\"\n        graphics\n        [\n            x    244.87\n            y    17.88\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    49\n        label    \"\"\n        graphics\n        [\n            x    278.36\n            y    244.28\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    50\n        label    \"\"\n        graphics\n        [\n            x    82.20\n            y    595.57\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    51\n        label    \"\"\n        graphics\n        [\n            x    347.44\n            y    271.64\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    52\n        label    \"\"\n        graphics\n        [\n            x    208.10\n            y    205.89\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    53\n        label    \"\"\n        graphics\n        [\n            x    473.82\n            y    424.22\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    54\n        label    \"\"\n        graphics\n        [\n            x    208.03\n            y    384.75\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    55\n        label    \"\"\n        graphics\n        [\n            x    751.80\n            y    397.08\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    56\n        label    \"\"\n        graphics\n        [\n            x    714.61\n            y    331.81\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    57\n        label    \"\"\n        graphics\n        [\n            x    196.52\n            y    436.33\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    58\n        label    \"\"\n        graphics\n        [\n            x    731.82\n            y    14.22\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    59\n        label    \"\"\n        graphics\n        [\n            x    277.93\n            y    705.53\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    60\n        label    \"\"\n        graphics\n        [\n            x    580.27\n            y    719.72\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    61\n        label    \"\"\n        graphics\n        [\n            x    511.57\n            y    600.88\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    62\n        label    \"\"\n        graphics\n        [\n            x    92.39\n            y    224.20\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    63\n        label    \"\"\n        graphics\n        [\n            x    450.15\n            y    148.85\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    64\n        label    \"\"\n        graphics\n        [\n            x    278.81\n            y    4.65\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    65\n        label    \"\"\n        graphics\n        [\n            x    465.58\n            y    536.83\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    66\n        label    \"\"\n        graphics\n        [\n            x    676.37\n            y    254.81\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    67\n        label    \"\"\n        graphics\n        [\n            x    77.27\n            y    227.24\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    68\n        label    \"\"\n        graphics\n        [\n            x    617.77\n            y    387.97\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    69\n        label    \"\"\n        graphics\n        [\n            x    696.35\n            y    555.34\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    edge\n    [\n        source    1\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    10\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    11\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    12\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    13\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    14\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    15\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    16\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    17\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    18\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    19\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    2\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    20\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    21\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    22\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    23\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    24\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    25\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    26\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    27\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    28\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    29\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    3\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    30\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    30\n        target    27\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    31\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    32\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    32\n        target    39\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    32\n        target    52\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    33\n        target    20\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    33\n        target    49\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    34\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    35\n        target    33\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    36\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    37\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    38\n        target    37\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    39\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    4\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    40\n        target    37\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    41\n        target    29\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    42\n        target    25\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    43\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    44\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    44\n        target    37\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    45\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    46\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    47\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    48\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    49\n        target    44\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    5\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    50\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    51\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    52\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    53\n        target    26\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    54\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    55\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    56\n        target    47\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    56\n        target    51\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    57\n        target    44\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    58\n        target    37\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    59\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    59\n        target    19\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    6\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    60\n        target    34\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    61\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    62\n        target    48\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    63\n        target    34\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    64\n        target    20\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    65\n        target    34\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    66\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    67\n        target    40\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    67\n        target    60\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    68\n        target    52\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    69\n        target    25\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    7\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    8\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    9\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n]\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v70e77.tglf",
    "content": "0 49.000 219.000 30.000 30.000\n1 70.000 714.000 30.000 30.000\n2 176.000 574.000 30.000 30.000\n3 220.000 667.000 30.000 30.000\n4 557.000 240.000 30.000 30.000\n5 183.000 454.000 30.000 30.000\n6 45.000 3.000 30.000 30.000\n7 620.000 590.000 30.000 30.000\n8 81.000 293.000 30.000 30.000\n9 37.000 678.000 30.000 30.000\n10 355.000 135.000 30.000 30.000\n11 413.000 379.000 30.000 30.000\n12 733.000 496.000 30.000 30.000\n13 723.000 398.000 30.000 30.000\n14 5.000 294.000 30.000 30.000\n15 96.000 348.000 30.000 30.000\n16 606.000 310.000 30.000 30.000\n17 674.000 236.000 30.000 30.000\n18 70.000 3.000 30.000 30.000\n19 124.000 549.000 30.000 30.000\n20 603.000 190.000 30.000 30.000\n21 186.000 533.000 30.000 30.000\n22 266.000 65.000 30.000 30.000\n23 377.000 218.000 30.000 30.000\n24 85.000 255.000 30.000 30.000\n25 690.000 694.000 30.000 30.000\n26 655.000 738.000 30.000 30.000\n27 350.000 322.000 30.000 30.000\n28 36.000 292.000 30.000 30.000\n29 352.000 541.000 30.000 30.000\n30 252.000 612.000 30.000 30.000\n31 494.000 177.000 30.000 30.000\n32 680.000 528.000 30.000 30.000\n33 658.000 38.000 30.000 30.000\n34 625.000 88.000 30.000 30.000\n35 244.000 261.000 30.000 30.000\n36 131.000 449.000 30.000 30.000\n37 592.000 392.000 30.000 30.000\n38 423.000 33.000 30.000 30.000\n39 714.000 679.000 30.000 30.000\n40 145.000 84.000 30.000 30.000\n41 351.000 17.000 30.000 30.000\n42 267.000 523.000 30.000 30.000\n43 724.000 714.000 30.000 30.000\n44 209.000 225.000 30.000 30.000\n45 235.000 677.000 30.000 30.000\n46 688.000 142.000 30.000 30.000\n47 34.000 158.000 30.000 30.000\n48 244.000 17.000 30.000 30.000\n49 278.000 244.000 30.000 30.000\n50 82.000 595.000 30.000 30.000\n51 347.000 271.000 30.000 30.000\n52 208.000 205.000 30.000 30.000\n53 473.000 424.000 30.000 30.000\n54 208.000 384.000 30.000 30.000\n55 751.000 397.000 30.000 30.000\n56 714.000 331.000 30.000 30.000\n57 196.000 436.000 30.000 30.000\n58 731.000 14.000 30.000 30.000\n59 277.000 705.000 30.000 30.000\n60 580.000 719.000 30.000 30.000\n61 511.000 600.000 30.000 30.000\n62 92.000 224.000 30.000 30.000\n63 450.000 148.000 30.000 30.000\n64 278.000 4.000 30.000 30.000\n65 465.000 536.000 30.000 30.000\n66 676.000 254.000 30.000 30.000\n67 77.000 227.000 30.000 30.000\n68 617.000 387.000 30.000 30.000\n69 696.000 555.000 30.000 30.000\n#\n23 9\n29 7\n27 3\n45 18\n26 14\n59 13\n62 48\n22 15\n69 25\n43 3\n50 0\n12 7\n54 13\n59 19\n21 15\n17 6\n47 21\n2 1\n67 60\n25 3\n11 7\n37 6\n44 23\n28 23\n44 37\n40 37\n57 44\n56 51\n16 10\n68 52\n61 2\n67 40\n46 10\n55 10\n9 7\n5 3\n20 16\n60 34\n14 3\n41 29\n31 21\n36 9\n38 37\n42 25\n13 0\n33 20\n32 39\n39 15\n34 4\n63 34\n65 34\n33 49\n53 26\n56 47\n35 33\n52 7\n48 7\n51 7\n15 7\n6 0\n66 4\n3 0\n58 37\n64 20\n32 13\n49 44\n24 9\n7 2\n18 3\n30 27\n8 5\n4 0\n19 4\n32 52\n1 0\n30 23\n10 4\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v70e84.gml",
    "content": "graph\n[\n    node\n    [\n        id    0\n        label    \"\"\n        graphics\n        [\n            x    31.32\n            y    689.17\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    1\n        label    \"\"\n        graphics\n        [\n            x    518.22\n            y    261.39\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    2\n        label    \"\"\n        graphics\n        [\n            x    680.50\n            y    119.89\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    3\n        label    \"\"\n        graphics\n        [\n            x    201.31\n            y    579.78\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    4\n        label    \"\"\n        graphics\n        [\n            x    722.78\n            y    168.28\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    5\n        label    \"\"\n        graphics\n        [\n            x    536.54\n            y    726.25\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    6\n        label    \"\"\n        graphics\n        [\n            x    721.92\n            y    409.04\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    7\n        label    \"\"\n        graphics\n        [\n            x    664.54\n            y    402.05\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    8\n        label    \"\"\n        graphics\n        [\n            x    541.97\n            y    735.44\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    9\n        label    \"\"\n        graphics\n        [\n            x    627.35\n            y    270.50\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    10\n        label    \"\"\n        graphics\n        [\n            x    150.58\n            y    545.87\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    11\n        label    \"\"\n        graphics\n        [\n            x    719.96\n            y    429.46\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    12\n        label    \"\"\n        graphics\n        [\n            x    577.28\n            y    73.06\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    13\n        label    \"\"\n        graphics\n        [\n            x    548.18\n            y    431.51\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    14\n        label    \"\"\n        graphics\n        [\n            x    96.06\n            y    260.59\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    15\n        label    \"\"\n        graphics\n        [\n            x    486.59\n            y    420.82\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    16\n        label    \"\"\n        graphics\n        [\n            x    738.74\n            y    749.76\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    17\n        label    \"\"\n        graphics\n        [\n            x    551.97\n            y    366.39\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    18\n        label    \"\"\n        graphics\n        [\n            x    264.72\n            y    494.92\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    19\n        label    \"\"\n        graphics\n        [\n            x    409.53\n            y    263.95\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    20\n        label    \"\"\n        graphics\n        [\n            x    610.82\n            y    550.99\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    21\n        label    \"\"\n        graphics\n        [\n            x    146.41\n            y    162.57\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    22\n        label    \"\"\n        graphics\n        [\n            x    455.23\n            y    579.47\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    23\n        label    \"\"\n        graphics\n        [\n            x    80.61\n            y    20.67\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    24\n        label    \"\"\n        graphics\n        [\n            x    201.27\n            y    468.17\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    25\n        label    \"\"\n        graphics\n        [\n            x    90.26\n            y    593.38\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    26\n        label    \"\"\n        graphics\n        [\n            x    233.19\n            y    0.02\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    27\n        label    \"\"\n        graphics\n        [\n            x    158.10\n            y    200.50\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    28\n        label    \"\"\n        graphics\n        [\n            x    531.01\n            y    99.35\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    29\n        label    \"\"\n        graphics\n        [\n            x    197.49\n            y    410.47\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    30\n        label    \"\"\n        graphics\n        [\n            x    94.44\n            y    728.11\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    31\n        label    \"\"\n        graphics\n        [\n            x    586.27\n            y    328.14\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    32\n        label    \"\"\n        graphics\n        [\n            x    647.86\n            y    104.02\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    33\n        label    \"\"\n        graphics\n        [\n            x    738.10\n            y    468.43\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    34\n        label    \"\"\n        graphics\n        [\n            x    174.50\n            y    182.00\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    35\n        label    \"\"\n        graphics\n        [\n            x    534.47\n            y    464.23\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    36\n        label    \"\"\n        graphics\n        [\n            x    619.41\n            y    116.05\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    37\n        label    \"\"\n        graphics\n        [\n            x    691.13\n            y    158.44\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    38\n        label    \"\"\n        graphics\n        [\n            x    230.53\n            y    378.40\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    39\n        label    \"\"\n        graphics\n        [\n            x    710.95\n            y    464.35\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    40\n        label    \"\"\n        graphics\n        [\n            x    413.30\n            y    84.58\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    41\n        label    \"\"\n        graphics\n        [\n            x    590.25\n            y    681.80\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    42\n        label    \"\"\n        graphics\n        [\n            x    592.03\n            y    504.22\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    43\n        label    \"\"\n        graphics\n        [\n            x    77.47\n            y    201.98\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    44\n        label    \"\"\n        graphics\n        [\n            x    487.34\n            y    59.08\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    45\n        label    \"\"\n        graphics\n        [\n            x    682.36\n            y    515.57\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    46\n        label    \"\"\n        graphics\n        [\n            x    266.72\n            y    696.86\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    47\n        label    \"\"\n        graphics\n        [\n            x    605.99\n            y    94.69\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    48\n        label    \"\"\n        graphics\n        [\n            x    142.44\n            y    144.18\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    49\n        label    \"\"\n        graphics\n        [\n            x    203.20\n            y    74.62\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    50\n        label    \"\"\n        graphics\n        [\n            x    414.10\n            y    453.21\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    51\n        label    \"\"\n        graphics\n        [\n            x    40.50\n            y    726.59\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    52\n        label    \"\"\n        graphics\n        [\n            x    748.83\n            y    460.13\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    53\n        label    \"\"\n        graphics\n        [\n            x    194.26\n            y    74.93\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    54\n        label    \"\"\n        graphics\n        [\n            x    428.37\n            y    338.28\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    55\n        label    \"\"\n        graphics\n        [\n            x    511.13\n            y    70.05\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    56\n        label    \"\"\n        graphics\n        [\n            x    224.48\n            y    208.26\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    57\n        label    \"\"\n        graphics\n        [\n            x    553.90\n            y    36.32\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    58\n        label    \"\"\n        graphics\n        [\n            x    159.60\n            y    591.83\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    59\n        label    \"\"\n        graphics\n        [\n            x    509.09\n            y    103.98\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    60\n        label    \"\"\n        graphics\n        [\n            x    128.97\n            y    242.53\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    61\n        label    \"\"\n        graphics\n        [\n            x    17.31\n            y    382.26\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    62\n        label    \"\"\n        graphics\n        [\n            x    208.50\n            y    447.95\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    63\n        label    \"\"\n        graphics\n        [\n            x    352.03\n            y    308.42\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    64\n        label    \"\"\n        graphics\n        [\n            x    717.77\n            y    359.40\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    65\n        label    \"\"\n        graphics\n        [\n            x    280.74\n            y    635.24\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    66\n        label    \"\"\n        graphics\n        [\n            x    658.00\n            y    393.90\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    67\n        label    \"\"\n        graphics\n        [\n            x    643.85\n            y    438.38\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    68\n        label    \"\"\n        graphics\n        [\n            x    163.89\n            y    554.86\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    69\n        label    \"\"\n        graphics\n        [\n            x    328.73\n            y    169.64\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    edge\n    [\n        source    1\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    10\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    10\n        target    52\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    11\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    12\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    13\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    14\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    15\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    16\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    17\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    18\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    19\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    2\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    20\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    21\n        target    20\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    21\n        target    63\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    22\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    22\n        target    20\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    23\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    23\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    24\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    25\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    26\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    27\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    28\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    29\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    3\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    30\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    31\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    32\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    33\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    33\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    34\n        target    20\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    35\n        target    27\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    36\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    37\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    38\n        target    33\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    39\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    4\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    40\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    41\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    42\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    42\n        target    31\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    42\n        target    34\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    43\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    44\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    45\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    45\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    46\n        target    24\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    47\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    47\n        target    33\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    48\n        target    29\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    49\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    5\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    50\n        target    20\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    50\n        target    57\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    51\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    52\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    52\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    53\n        target    35\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    53\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    54\n        target    47\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    55\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    56\n        target    39\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    57\n        target    55\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    58\n        target    25\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    59\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    59\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    6\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    60\n        target    32\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    61\n        target    40\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    62\n        target    29\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    62\n        target    53\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    63\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    64\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    65\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    65\n        target    37\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    66\n        target    46\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    67\n        target    59\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    68\n        target    49\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    69\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    7\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    8\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    9\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n]\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v70e84.tglf",
    "content": "0 31.000 689.000 30.000 30.000\n1 518.000 261.000 30.000 30.000\n2 680.000 119.000 30.000 30.000\n3 201.000 579.000 30.000 30.000\n4 722.000 168.000 30.000 30.000\n5 536.000 726.000 30.000 30.000\n6 721.000 409.000 30.000 30.000\n7 664.000 402.000 30.000 30.000\n8 541.000 735.000 30.000 30.000\n9 627.000 270.000 30.000 30.000\n10 150.000 545.000 30.000 30.000\n11 719.000 429.000 30.000 30.000\n12 577.000 73.000 30.000 30.000\n13 548.000 431.000 30.000 30.000\n14 96.000 260.000 30.000 30.000\n15 486.000 420.000 30.000 30.000\n16 738.000 749.000 30.000 30.000\n17 551.000 366.000 30.000 30.000\n18 264.000 494.000 30.000 30.000\n19 409.000 263.000 30.000 30.000\n20 610.000 550.000 30.000 30.000\n21 146.000 162.000 30.000 30.000\n22 455.000 579.000 30.000 30.000\n23 80.000 20.000 30.000 30.000\n24 201.000 468.000 30.000 30.000\n25 90.000 593.000 30.000 30.000\n26 233.000 0.000 30.000 30.000\n27 158.000 200.000 30.000 30.000\n28 531.000 99.000 30.000 30.000\n29 197.000 410.000 30.000 30.000\n30 94.000 728.000 30.000 30.000\n31 586.000 328.000 30.000 30.000\n32 647.000 104.000 30.000 30.000\n33 738.000 468.000 30.000 30.000\n34 174.000 182.000 30.000 30.000\n35 534.000 464.000 30.000 30.000\n36 619.000 116.000 30.000 30.000\n37 691.000 158.000 30.000 30.000\n38 230.000 378.000 30.000 30.000\n39 710.000 464.000 30.000 30.000\n40 413.000 84.000 30.000 30.000\n41 590.000 681.000 30.000 30.000\n42 592.000 504.000 30.000 30.000\n43 77.000 201.000 30.000 30.000\n44 487.000 59.000 30.000 30.000\n45 682.000 515.000 30.000 30.000\n46 266.000 696.000 30.000 30.000\n47 605.000 94.000 30.000 30.000\n48 142.000 144.000 30.000 30.000\n49 203.000 74.000 30.000 30.000\n50 414.000 453.000 30.000 30.000\n51 40.000 726.000 30.000 30.000\n52 748.000 460.000 30.000 30.000\n53 194.000 74.000 30.000 30.000\n54 428.000 338.000 30.000 30.000\n55 511.000 70.000 30.000 30.000\n56 224.000 208.000 30.000 30.000\n57 553.000 36.000 30.000 30.000\n58 159.000 591.000 30.000 30.000\n59 509.000 103.000 30.000 30.000\n60 128.000 242.000 30.000 30.000\n61 17.000 382.000 30.000 30.000\n62 208.000 447.000 30.000 30.000\n63 352.000 308.000 30.000 30.000\n64 717.000 359.000 30.000 30.000\n65 280.000 635.000 30.000 30.000\n66 658.000 393.000 30.000 30.000\n67 643.000 438.000 30.000 30.000\n68 163.000 554.000 30.000 30.000\n69 328.000 169.000 30.000 30.000\n#\n50 57\n52 1\n18 5\n60 32\n59 5\n42 22\n46 24\n30 16\n24 6\n37 0\n45 12\n34 20\n53 35\n41 8\n47 18\n38 33\n27 17\n21 20\n67 59\n33 21\n68 49\n53 9\n44 6\n63 12\n1 0\n51 9\n7 6\n58 25\n15 13\n25 14\n61 40\n62 29\n50 20\n65 23\n42 31\n48 29\n23 2\n26 8\n55 17\n14 5\n4 2\n42 34\n32 11\n56 39\n2 0\n22 11\n49 10\n23 10\n31 14\n12 9\n3 0\n57 55\n28 22\n65 37\n11 0\n43 17\n62 53\n59 11\n21 63\n47 33\n29 0\n8 3\n36 4\n69 21\n6 3\n13 12\n9 2\n16 8\n54 47\n17 2\n39 12\n33 16\n66 46\n22 20\n10 52\n20 4\n35 27\n52 23\n19 15\n64 13\n40 14\n10 0\n5 4\n45 1\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v70e91.gml",
    "content": "graph\n[\n    node\n    [\n        id    0\n        label    \"\"\n        graphics\n        [\n            x    229.45\n            y    562.06\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    1\n        label    \"\"\n        graphics\n        [\n            x    55.39\n            y    569.05\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    2\n        label    \"\"\n        graphics\n        [\n            x    486.65\n            y    142.85\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    3\n        label    \"\"\n        graphics\n        [\n            x    146.77\n            y    477.13\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    4\n        label    \"\"\n        graphics\n        [\n            x    298.24\n            y    386.56\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    5\n        label    \"\"\n        graphics\n        [\n            x    636.13\n            y    11.37\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    6\n        label    \"\"\n        graphics\n        [\n            x    252.37\n            y    265.92\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    7\n        label    \"\"\n        graphics\n        [\n            x    176.74\n            y    331.18\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    8\n        label    \"\"\n        graphics\n        [\n            x    660.34\n            y    111.87\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    9\n        label    \"\"\n        graphics\n        [\n            x    543.80\n            y    697.23\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    10\n        label    \"\"\n        graphics\n        [\n            x    542.43\n            y    443.23\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    11\n        label    \"\"\n        graphics\n        [\n            x    493.57\n            y    323.89\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    12\n        label    \"\"\n        graphics\n        [\n            x    470.91\n            y    271.71\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    13\n        label    \"\"\n        graphics\n        [\n            x    132.63\n            y    685.98\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    14\n        label    \"\"\n        graphics\n        [\n            x    581.86\n            y    82.05\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    15\n        label    \"\"\n        graphics\n        [\n            x    475.95\n            y    541.30\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    16\n        label    \"\"\n        graphics\n        [\n            x    444.46\n            y    691.31\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    17\n        label    \"\"\n        graphics\n        [\n            x    539.41\n            y    607.25\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    18\n        label    \"\"\n        graphics\n        [\n            x    728.93\n            y    330.81\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    19\n        label    \"\"\n        graphics\n        [\n            x    528.69\n            y    98.72\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    20\n        label    \"\"\n        graphics\n        [\n            x    198.77\n            y    568.06\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    21\n        label    \"\"\n        graphics\n        [\n            x    507.24\n            y    33.01\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    22\n        label    \"\"\n        graphics\n        [\n            x    209.06\n            y    377.03\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    23\n        label    \"\"\n        graphics\n        [\n            x    514.06\n            y    176.03\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    24\n        label    \"\"\n        graphics\n        [\n            x    573.98\n            y    102.44\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    25\n        label    \"\"\n        graphics\n        [\n            x    424.60\n            y    186.70\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    26\n        label    \"\"\n        graphics\n        [\n            x    421.43\n            y    322.74\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    27\n        label    \"\"\n        graphics\n        [\n            x    394.90\n            y    276.45\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    28\n        label    \"\"\n        graphics\n        [\n            x    513.05\n            y    433.33\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    29\n        label    \"\"\n        graphics\n        [\n            x    0.56\n            y    6.32\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    30\n        label    \"\"\n        graphics\n        [\n            x    519.44\n            y    487.91\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    31\n        label    \"\"\n        graphics\n        [\n            x    260.53\n            y    447.71\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    32\n        label    \"\"\n        graphics\n        [\n            x    640.00\n            y    301.39\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    33\n        label    \"\"\n        graphics\n        [\n            x    95.10\n            y    84.46\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    34\n        label    \"\"\n        graphics\n        [\n            x    9.58\n            y    398.39\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    35\n        label    \"\"\n        graphics\n        [\n            x    673.70\n            y    484.20\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    36\n        label    \"\"\n        graphics\n        [\n            x    81.67\n            y    477.63\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    37\n        label    \"\"\n        graphics\n        [\n            x    494.49\n            y    684.20\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    38\n        label    \"\"\n        graphics\n        [\n            x    160.27\n            y    329.29\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    39\n        label    \"\"\n        graphics\n        [\n            x    744.53\n            y    452.75\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    40\n        label    \"\"\n        graphics\n        [\n            x    236.93\n            y    340.01\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    41\n        label    \"\"\n        graphics\n        [\n            x    70.98\n            y    661.92\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    42\n        label    \"\"\n        graphics\n        [\n            x    681.49\n            y    315.52\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    43\n        label    \"\"\n        graphics\n        [\n            x    570.44\n            y    719.72\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    44\n        label    \"\"\n        graphics\n        [\n            x    667.24\n            y    674.85\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    45\n        label    \"\"\n        graphics\n        [\n            x    395.82\n            y    531.61\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    46\n        label    \"\"\n        graphics\n        [\n            x    629.59\n            y    499.42\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    47\n        label    \"\"\n        graphics\n        [\n            x    480.68\n            y    668.58\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    48\n        label    \"\"\n        graphics\n        [\n            x    170.13\n            y    584.67\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    49\n        label    \"\"\n        graphics\n        [\n            x    357.54\n            y    320.96\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    50\n        label    \"\"\n        graphics\n        [\n            x    347.61\n            y    411.80\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    51\n        label    \"\"\n        graphics\n        [\n            x    419.73\n            y    650.11\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    52\n        label    \"\"\n        graphics\n        [\n            x    489.46\n            y    407.09\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    53\n        label    \"\"\n        graphics\n        [\n            x    624.83\n            y    46.03\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    54\n        label    \"\"\n        graphics\n        [\n            x    690.87\n            y    4.42\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    55\n        label    \"\"\n        graphics\n        [\n            x    595.42\n            y    445.64\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    56\n        label    \"\"\n        graphics\n        [\n            x    428.52\n            y    381.39\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    57\n        label    \"\"\n        graphics\n        [\n            x    238.22\n            y    463.48\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    58\n        label    \"\"\n        graphics\n        [\n            x    381.61\n            y    387.17\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    59\n        label    \"\"\n        graphics\n        [\n            x    625.29\n            y    430.28\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    60\n        label    \"\"\n        graphics\n        [\n            x    487.90\n            y    742.41\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    61\n        label    \"\"\n        graphics\n        [\n            x    652.76\n            y    450.61\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    62\n        label    \"\"\n        graphics\n        [\n            x    370.35\n            y    103.13\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    63\n        label    \"\"\n        graphics\n        [\n            x    273.55\n            y    115.21\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    64\n        label    \"\"\n        graphics\n        [\n            x    349.23\n            y    706.83\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    65\n        label    \"\"\n        graphics\n        [\n            x    29.21\n            y    544.75\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    66\n        label    \"\"\n        graphics\n        [\n            x    607.30\n            y    394.67\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    67\n        label    \"\"\n        graphics\n        [\n            x    743.01\n            y    494.68\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    68\n        label    \"\"\n        graphics\n        [\n            x    439.19\n            y    347.57\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    69\n        label    \"\"\n        graphics\n        [\n            x    8.67\n            y    114.08\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    edge\n    [\n        source    0\n        target    53\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    1\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    1\n        target    66\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    10\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    11\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    12\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    12\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    13\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    14\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    14\n        target    26\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    15\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    15\n        target    69\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    16\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    16\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    17\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    17\n        target    69\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    18\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    19\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    2\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    2\n        target    40\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    20\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    21\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    21\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    22\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    22\n        target    48\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    23\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    24\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    25\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    26\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    27\n        target    26\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    28\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    29\n        target    19\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    3\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    30\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    31\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    32\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    32\n        target    56\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    33\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    34\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    35\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    36\n        target    34\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    37\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    37\n        target    67\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    38\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    39\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    4\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    4\n        target    57\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    40\n        target    32\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    40\n        target    66\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    41\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    42\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    43\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    44\n        target    25\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    45\n        target    43\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    46\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    47\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    47\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    48\n        target    47\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    49\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    49\n        target    39\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    5\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    50\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    51\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    52\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    53\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    54\n        target    32\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    54\n        target    68\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    55\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    56\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    57\n        target    52\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    58\n        target    36\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    59\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    6\n        target    36\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    6\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    60\n        target    24\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    60\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    61\n        target    54\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    62\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    63\n        target    42\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    64\n        target    53\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    65\n        target    34\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    66\n        target    32\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    66\n        target    42\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    67\n        target    66\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    68\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    68\n        target    34\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    69\n        target    53\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    7\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    8\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    9\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    9\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n]\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v70e91.tglf",
    "content": "0 229.000 562.000 30.000 30.000\n1 55.000 569.000 30.000 30.000\n2 486.000 142.000 30.000 30.000\n3 146.000 477.000 30.000 30.000\n4 298.000 386.000 30.000 30.000\n5 636.000 11.000 30.000 30.000\n6 252.000 265.000 30.000 30.000\n7 176.000 331.000 30.000 30.000\n8 660.000 111.000 30.000 30.000\n9 543.000 697.000 30.000 30.000\n10 542.000 443.000 30.000 30.000\n11 493.000 323.000 30.000 30.000\n12 470.000 271.000 30.000 30.000\n13 132.000 685.000 30.000 30.000\n14 581.000 82.000 30.000 30.000\n15 475.000 541.000 30.000 30.000\n16 444.000 691.000 30.000 30.000\n17 539.000 607.000 30.000 30.000\n18 728.000 330.000 30.000 30.000\n19 528.000 98.000 30.000 30.000\n20 198.000 568.000 30.000 30.000\n21 507.000 33.000 30.000 30.000\n22 209.000 377.000 30.000 30.000\n23 514.000 176.000 30.000 30.000\n24 573.000 102.000 30.000 30.000\n25 424.000 186.000 30.000 30.000\n26 421.000 322.000 30.000 30.000\n27 394.000 276.000 30.000 30.000\n28 513.000 433.000 30.000 30.000\n29 0.000 6.000 30.000 30.000\n30 519.000 487.000 30.000 30.000\n31 260.000 447.000 30.000 30.000\n32 640.000 301.000 30.000 30.000\n33 95.000 84.000 30.000 30.000\n34 9.000 398.000 30.000 30.000\n35 673.000 484.000 30.000 30.000\n36 81.000 477.000 30.000 30.000\n37 494.000 684.000 30.000 30.000\n38 160.000 329.000 30.000 30.000\n39 744.000 452.000 30.000 30.000\n40 236.000 340.000 30.000 30.000\n41 70.000 661.000 30.000 30.000\n42 681.000 315.000 30.000 30.000\n43 570.000 719.000 30.000 30.000\n44 667.000 674.000 30.000 30.000\n45 395.000 531.000 30.000 30.000\n46 629.000 499.000 30.000 30.000\n47 480.000 668.000 30.000 30.000\n48 170.000 584.000 30.000 30.000\n49 357.000 320.000 30.000 30.000\n50 347.000 411.000 30.000 30.000\n51 419.000 650.000 30.000 30.000\n52 489.000 407.000 30.000 30.000\n53 624.000 46.000 30.000 30.000\n54 690.000 4.000 30.000 30.000\n55 595.000 445.000 30.000 30.000\n56 428.000 381.000 30.000 30.000\n57 238.000 463.000 30.000 30.000\n58 381.000 387.000 30.000 30.000\n59 625.000 430.000 30.000 30.000\n60 487.000 742.000 30.000 30.000\n61 652.000 450.000 30.000 30.000\n62 370.000 103.000 30.000 30.000\n63 273.000 115.000 30.000 30.000\n64 349.000 706.000 30.000 30.000\n65 29.000 544.000 30.000 30.000\n66 607.000 394.000 30.000 30.000\n67 743.000 494.000 30.000 30.000\n68 439.000 347.000 30.000 30.000\n69 8.000 114.000 30.000 30.000\n#\n47 13\n47 3\n14 2\n6 5\n52 17\n61 54\n41 23\n5 2\n13 6\n64 53\n19 4\n30 3\n36 34\n57 52\n58 36\n0 53\n10 1\n2 40\n31 13\n22 48\n17 69\n20 13\n38 16\n45 43\n32 22\n2 0\n37 17\n60 4\n43 2\n62 3\n28 7\n21 16\n40 32\n25 15\n23 6\n8 3\n17 13\n54 32\n1 66\n39 5\n55 7\n68 34\n4 3\n37 67\n46 1\n53 12\n22 2\n54 68\n33 10\n66 32\n67 66\n9 3\n15 69\n16 0\n65 34\n68 2\n60 24\n49 10\n29 19\n9 10\n7 2\n69 53\n66 42\n4 57\n48 47\n44 25\n40 66\n24 3\n3 1\n12 0\n14 26\n56 7\n42 15\n21 13\n49 39\n27 26\n15 10\n35 1\n34 15\n1 0\n12 15\n11 7\n63 42\n26 3\n16 14\n59 5\n32 56\n6 36\n50 14\n51 21\n18 10\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v70e98.gml",
    "content": "graph\n[\n    node\n    [\n        id    0\n        label    \"\"\n        graphics\n        [\n            x    328.62\n            y    607.17\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    1\n        label    \"\"\n        graphics\n        [\n            x    747.70\n            y    168.43\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    2\n        label    \"\"\n        graphics\n        [\n            x    693.39\n            y    293.70\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    3\n        label    \"\"\n        graphics\n        [\n            x    740.64\n            y    623.55\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    4\n        label    \"\"\n        graphics\n        [\n            x    302.16\n            y    70.90\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    5\n        label    \"\"\n        graphics\n        [\n            x    427.51\n            y    49.45\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    6\n        label    \"\"\n        graphics\n        [\n            x    517.74\n            y    525.40\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    7\n        label    \"\"\n        graphics\n        [\n            x    246.33\n            y    342.30\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    8\n        label    \"\"\n        graphics\n        [\n            x    160.59\n            y    40.26\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    9\n        label    \"\"\n        graphics\n        [\n            x    230.91\n            y    444.70\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    10\n        label    \"\"\n        graphics\n        [\n            x    707.59\n            y    330.69\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    11\n        label    \"\"\n        graphics\n        [\n            x    652.49\n            y    633.79\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    12\n        label    \"\"\n        graphics\n        [\n            x    298.61\n            y    620.03\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    13\n        label    \"\"\n        graphics\n        [\n            x    108.62\n            y    42.55\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    14\n        label    \"\"\n        graphics\n        [\n            x    113.40\n            y    207.67\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    15\n        label    \"\"\n        graphics\n        [\n            x    599.47\n            y    510.38\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    16\n        label    \"\"\n        graphics\n        [\n            x    441.78\n            y    745.41\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    17\n        label    \"\"\n        graphics\n        [\n            x    295.27\n            y    289.82\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    18\n        label    \"\"\n        graphics\n        [\n            x    209.96\n            y    125.92\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    19\n        label    \"\"\n        graphics\n        [\n            x    320.60\n            y    476.82\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    20\n        label    \"\"\n        graphics\n        [\n            x    509.90\n            y    560.10\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    21\n        label    \"\"\n        graphics\n        [\n            x    73.07\n            y    719.90\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    22\n        label    \"\"\n        graphics\n        [\n            x    703.50\n            y    433.57\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    23\n        label    \"\"\n        graphics\n        [\n            x    220.07\n            y    610.95\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    24\n        label    \"\"\n        graphics\n        [\n            x    724.02\n            y    339.02\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    25\n        label    \"\"\n        graphics\n        [\n            x    587.60\n            y    311.76\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    26\n        label    \"\"\n        graphics\n        [\n            x    33.39\n            y    401.08\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    27\n        label    \"\"\n        graphics\n        [\n            x    29.61\n            y    198.69\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    28\n        label    \"\"\n        graphics\n        [\n            x    119.61\n            y    274.31\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    29\n        label    \"\"\n        graphics\n        [\n            x    260.19\n            y    553.01\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    30\n        label    \"\"\n        graphics\n        [\n            x    289.08\n            y    474.50\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    31\n        label    \"\"\n        graphics\n        [\n            x    20.49\n            y    327.63\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    32\n        label    \"\"\n        graphics\n        [\n            x    252.53\n            y    381.02\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    33\n        label    \"\"\n        graphics\n        [\n            x    275.67\n            y    523.02\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    34\n        label    \"\"\n        graphics\n        [\n            x    701.71\n            y    256.49\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    35\n        label    \"\"\n        graphics\n        [\n            x    260.64\n            y    254.67\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    36\n        label    \"\"\n        graphics\n        [\n            x    76.11\n            y    530.03\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    37\n        label    \"\"\n        graphics\n        [\n            x    311.84\n            y    238.45\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    38\n        label    \"\"\n        graphics\n        [\n            x    427.55\n            y    199.78\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    39\n        label    \"\"\n        graphics\n        [\n            x    193.80\n            y    631.78\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    40\n        label    \"\"\n        graphics\n        [\n            x    657.76\n            y    178.52\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    41\n        label    \"\"\n        graphics\n        [\n            x    257.34\n            y    172.85\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    42\n        label    \"\"\n        graphics\n        [\n            x    54.16\n            y    196.24\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    43\n        label    \"\"\n        graphics\n        [\n            x    65.38\n            y    28.60\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    44\n        label    \"\"\n        graphics\n        [\n            x    696.75\n            y    240.83\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    45\n        label    \"\"\n        graphics\n        [\n            x    127.73\n            y    558.36\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    46\n        label    \"\"\n        graphics\n        [\n            x    414.49\n            y    379.55\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    47\n        label    \"\"\n        graphics\n        [\n            x    457.65\n            y    109.47\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    48\n        label    \"\"\n        graphics\n        [\n            x    683.16\n            y    460.86\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    49\n        label    \"\"\n        graphics\n        [\n            x    23.35\n            y    692.77\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    50\n        label    \"\"\n        graphics\n        [\n            x    587.42\n            y    215.13\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    51\n        label    \"\"\n        graphics\n        [\n            x    239.71\n            y    437.61\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    52\n        label    \"\"\n        graphics\n        [\n            x    682.22\n            y    34.23\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    53\n        label    \"\"\n        graphics\n        [\n            x    260.46\n            y    698.58\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    54\n        label    \"\"\n        graphics\n        [\n            x    464.15\n            y    106.15\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    55\n        label    \"\"\n        graphics\n        [\n            x    613.56\n            y    373.00\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    56\n        label    \"\"\n        graphics\n        [\n            x    59.11\n            y    446.25\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    57\n        label    \"\"\n        graphics\n        [\n            x    629.61\n            y    566.31\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    58\n        label    \"\"\n        graphics\n        [\n            x    17.37\n            y    407.87\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    59\n        label    \"\"\n        graphics\n        [\n            x    262.74\n            y    340.76\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    60\n        label    \"\"\n        graphics\n        [\n            x    692.99\n            y    453.28\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    61\n        label    \"\"\n        graphics\n        [\n            x    164.79\n            y    660.66\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    62\n        label    \"\"\n        graphics\n        [\n            x    699.46\n            y    161.69\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    63\n        label    \"\"\n        graphics\n        [\n            x    11.82\n            y    259.57\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    64\n        label    \"\"\n        graphics\n        [\n            x    199.79\n            y    253.46\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    65\n        label    \"\"\n        graphics\n        [\n            x    726.80\n            y    201.06\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    66\n        label    \"\"\n        graphics\n        [\n            x    17.60\n            y    583.21\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    67\n        label    \"\"\n        graphics\n        [\n            x    552.97\n            y    267.66\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    68\n        label    \"\"\n        graphics\n        [\n            x    544.72\n            y    48.25\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    69\n        label    \"\"\n        graphics\n        [\n            x    43.72\n            y    41.24\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    edge\n    [\n        source    0\n        target    33\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    1\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    10\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    11\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    12\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    12\n        target    59\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    13\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    13\n        target    50\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    14\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    15\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    15\n        target    28\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    16\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    16\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    17\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    17\n        target    63\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    18\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    19\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    2\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    20\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    21\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    21\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    22\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    22\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    23\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    24\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    25\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    25\n        target    45\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    26\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    27\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    28\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    29\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    29\n        target    32\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    3\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    30\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    30\n        target    46\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    31\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    31\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    32\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    33\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    34\n        target    32\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    35\n        target    28\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    36\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    37\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    38\n        target    25\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    39\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    4\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    4\n        target    41\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    40\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    41\n        target    19\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    42\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    42\n        target    63\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    43\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    44\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    45\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    45\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    46\n        target    36\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    46\n        target    45\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    47\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    47\n        target    26\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    48\n        target    36\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    48\n        target    41\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    48\n        target    66\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    49\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    5\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    5\n        target    49\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    50\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    51\n        target    28\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    52\n        target    26\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    52\n        target    42\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    53\n        target    31\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    53\n        target    35\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    54\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    55\n        target    40\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    56\n        target    52\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    56\n        target    57\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    57\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    57\n        target    58\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    58\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    59\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    6\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    6\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    60\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    61\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    62\n        target    34\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    62\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    63\n        target    51\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    64\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    65\n        target    64\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    66\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    66\n        target    53\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    67\n        target    55\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    68\n        target    54\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    69\n        target    28\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    7\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    8\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    8\n        target    42\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    8\n        target    46\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    9\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n]\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v70e98.tglf",
    "content": "0 328.000 607.000 30.000 30.000\n1 747.000 168.000 30.000 30.000\n2 693.000 293.000 30.000 30.000\n3 740.000 623.000 30.000 30.000\n4 302.000 70.000 30.000 30.000\n5 427.000 49.000 30.000 30.000\n6 517.000 525.000 30.000 30.000\n7 246.000 342.000 30.000 30.000\n8 160.000 40.000 30.000 30.000\n9 230.000 444.000 30.000 30.000\n10 707.000 330.000 30.000 30.000\n11 652.000 633.000 30.000 30.000\n12 298.000 620.000 30.000 30.000\n13 108.000 42.000 30.000 30.000\n14 113.000 207.000 30.000 30.000\n15 599.000 510.000 30.000 30.000\n16 441.000 745.000 30.000 30.000\n17 295.000 289.000 30.000 30.000\n18 209.000 125.000 30.000 30.000\n19 320.000 476.000 30.000 30.000\n20 509.000 560.000 30.000 30.000\n21 73.000 719.000 30.000 30.000\n22 703.000 433.000 30.000 30.000\n23 220.000 610.000 30.000 30.000\n24 724.000 339.000 30.000 30.000\n25 587.000 311.000 30.000 30.000\n26 33.000 401.000 30.000 30.000\n27 29.000 198.000 30.000 30.000\n28 119.000 274.000 30.000 30.000\n29 260.000 553.000 30.000 30.000\n30 289.000 474.000 30.000 30.000\n31 20.000 327.000 30.000 30.000\n32 252.000 381.000 30.000 30.000\n33 275.000 523.000 30.000 30.000\n34 701.000 256.000 30.000 30.000\n35 260.000 254.000 30.000 30.000\n36 76.000 530.000 30.000 30.000\n37 311.000 238.000 30.000 30.000\n38 427.000 199.000 30.000 30.000\n39 193.000 631.000 30.000 30.000\n40 657.000 178.000 30.000 30.000\n41 257.000 172.000 30.000 30.000\n42 54.000 196.000 30.000 30.000\n43 65.000 28.000 30.000 30.000\n44 696.000 240.000 30.000 30.000\n45 127.000 558.000 30.000 30.000\n46 414.000 379.000 30.000 30.000\n47 457.000 109.000 30.000 30.000\n48 683.000 460.000 30.000 30.000\n49 23.000 692.000 30.000 30.000\n50 587.000 215.000 30.000 30.000\n51 239.000 437.000 30.000 30.000\n52 682.000 34.000 30.000 30.000\n53 260.000 698.000 30.000 30.000\n54 464.000 106.000 30.000 30.000\n55 613.000 373.000 30.000 30.000\n56 59.000 446.000 30.000 30.000\n57 629.000 566.000 30.000 30.000\n58 17.000 407.000 30.000 30.000\n59 262.000 340.000 30.000 30.000\n60 692.000 453.000 30.000 30.000\n61 164.000 660.000 30.000 30.000\n62 699.000 161.000 30.000 30.000\n63 11.000 259.000 30.000 30.000\n64 199.000 253.000 30.000 30.000\n65 726.000 201.000 30.000 30.000\n66 17.000 583.000 30.000 30.000\n67 552.000 267.000 30.000 30.000\n68 544.000 48.000 30.000 30.000\n69 43.000 41.000 30.000 30.000\n#\n39 11\n15 13\n5 1\n40 21\n33 11\n21 18\n35 28\n1 0\n29 10\n7 4\n34 32\n21 23\n61 13\n48 36\n30 46\n53 31\n16 15\n3 2\n38 25\n31 5\n8 42\n32 6\n25 45\n9 0\n49 22\n46 36\n8 4\n57 12\n41 19\n17 63\n22 15\n47 21\n43 1\n20 5\n13 12\n36 17\n52 26\n4 41\n4 1\n42 63\n66 53\n6 5\n23 8\n29 32\n45 21\n22 14\n46 45\n26 6\n55 40\n59 2\n2 0\n60 5\n57 58\n48 41\n31 0\n66 10\n8 46\n50 8\n12 0\n54 18\n19 9\n56 57\n52 42\n64 16\n12 59\n51 28\n42 21\n15 28\n27 4\n37 18\n6 10\n63 51\n0 33\n30 11\n11 6\n53 35\n24 9\n65 64\n58 21\n62 34\n62 5\n56 52\n25 15\n69 28\n14 1\n17 1\n10 4\n28 23\n48 66\n67 55\n5 49\n45 8\n68 54\n47 26\n13 50\n18 5\n44 10\n16 10\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v80e104.gml",
    "content": "graph\n[\n    node\n    [\n        id    0\n        label    \"\"\n        graphics\n        [\n            x    637.39\n            y    670.90\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    1\n        label    \"\"\n        graphics\n        [\n            x    692.83\n            y    738.57\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    2\n        label    \"\"\n        graphics\n        [\n            x    438.05\n            y    453.95\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    3\n        label    \"\"\n        graphics\n        [\n            x    611.66\n            y    588.69\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    4\n        label    \"\"\n        graphics\n        [\n            x    693.23\n            y    676.89\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    5\n        label    \"\"\n        graphics\n        [\n            x    14.90\n            y    521.96\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    6\n        label    \"\"\n        graphics\n        [\n            x    454.84\n            y    34.78\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    7\n        label    \"\"\n        graphics\n        [\n            x    707.97\n            y    773.98\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    8\n        label    \"\"\n        graphics\n        [\n            x    320.64\n            y    685.84\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    9\n        label    \"\"\n        graphics\n        [\n            x    315.11\n            y    278.79\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    10\n        label    \"\"\n        graphics\n        [\n            x    338.06\n            y    549.32\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    11\n        label    \"\"\n        graphics\n        [\n            x    207.31\n            y    283.59\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    12\n        label    \"\"\n        graphics\n        [\n            x    693.47\n            y    765.41\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    13\n        label    \"\"\n        graphics\n        [\n            x    727.62\n            y    424.73\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    14\n        label    \"\"\n        graphics\n        [\n            x    271.66\n            y    563.37\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    15\n        label    \"\"\n        graphics\n        [\n            x    79.18\n            y    269.89\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    16\n        label    \"\"\n        graphics\n        [\n            x    316.68\n            y    438.92\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    17\n        label    \"\"\n        graphics\n        [\n            x    91.64\n            y    552.74\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    18\n        label    \"\"\n        graphics\n        [\n            x    129.51\n            y    587.41\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    19\n        label    \"\"\n        graphics\n        [\n            x    552.78\n            y    686.70\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    20\n        label    \"\"\n        graphics\n        [\n            x    378.77\n            y    737.29\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    21\n        label    \"\"\n        graphics\n        [\n            x    170.68\n            y    428.12\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    22\n        label    \"\"\n        graphics\n        [\n            x    581.31\n            y    459.86\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    23\n        label    \"\"\n        graphics\n        [\n            x    804.93\n            y    752.11\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    24\n        label    \"\"\n        graphics\n        [\n            x    108.43\n            y    701.38\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    25\n        label    \"\"\n        graphics\n        [\n            x    673.61\n            y    321.60\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    26\n        label    \"\"\n        graphics\n        [\n            x    18.61\n            y    505.71\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    27\n        label    \"\"\n        graphics\n        [\n            x    9.15\n            y    358.15\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    28\n        label    \"\"\n        graphics\n        [\n            x    697.23\n            y    100.36\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    29\n        label    \"\"\n        graphics\n        [\n            x    482.36\n            y    122.49\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    30\n        label    \"\"\n        graphics\n        [\n            x    688.26\n            y    423.81\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    31\n        label    \"\"\n        graphics\n        [\n            x    176.75\n            y    370.81\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    32\n        label    \"\"\n        graphics\n        [\n            x    451.10\n            y    617.62\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    33\n        label    \"\"\n        graphics\n        [\n            x    537.77\n            y    689.79\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    34\n        label    \"\"\n        graphics\n        [\n            x    205.96\n            y    547.99\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    35\n        label    \"\"\n        graphics\n        [\n            x    505.82\n            y    124.28\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    36\n        label    \"\"\n        graphics\n        [\n            x    145.43\n            y    327.38\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    37\n        label    \"\"\n        graphics\n        [\n            x    435.84\n            y    80.03\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    38\n        label    \"\"\n        graphics\n        [\n            x    308.15\n            y    474.39\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    39\n        label    \"\"\n        graphics\n        [\n            x    758.71\n            y    426.69\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    40\n        label    \"\"\n        graphics\n        [\n            x    181.42\n            y    309.84\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    41\n        label    \"\"\n        graphics\n        [\n            x    390.54\n            y    736.07\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    42\n        label    \"\"\n        graphics\n        [\n            x    475.61\n            y    566.80\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    43\n        label    \"\"\n        graphics\n        [\n            x    707.81\n            y    275.35\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    44\n        label    \"\"\n        graphics\n        [\n            x    326.29\n            y    655.04\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    45\n        label    \"\"\n        graphics\n        [\n            x    625.17\n            y    82.58\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    46\n        label    \"\"\n        graphics\n        [\n            x    23.27\n            y    650.64\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    47\n        label    \"\"\n        graphics\n        [\n            x    769.95\n            y    650.63\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    48\n        label    \"\"\n        graphics\n        [\n            x    712.88\n            y    149.28\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    49\n        label    \"\"\n        graphics\n        [\n            x    272.16\n            y    434.44\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    50\n        label    \"\"\n        graphics\n        [\n            x    650.88\n            y    340.03\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    51\n        label    \"\"\n        graphics\n        [\n            x    667.43\n            y    779.75\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    52\n        label    \"\"\n        graphics\n        [\n            x    232.81\n            y    383.50\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    53\n        label    \"\"\n        graphics\n        [\n            x    261.84\n            y    663.81\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    54\n        label    \"\"\n        graphics\n        [\n            x    468.12\n            y    340.05\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    55\n        label    \"\"\n        graphics\n        [\n            x    295.06\n            y    737.87\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    56\n        label    \"\"\n        graphics\n        [\n            x    371.61\n            y    352.82\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    57\n        label    \"\"\n        graphics\n        [\n            x    723.19\n            y    715.48\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    58\n        label    \"\"\n        graphics\n        [\n            x    59.33\n            y    365.58\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    59\n        label    \"\"\n        graphics\n        [\n            x    571.38\n            y    269.79\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    60\n        label    \"\"\n        graphics\n        [\n            x    409.37\n            y    207.27\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    61\n        label    \"\"\n        graphics\n        [\n            x    287.82\n            y    84.00\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    62\n        label    \"\"\n        graphics\n        [\n            x    281.37\n            y    410.49\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    63\n        label    \"\"\n        graphics\n        [\n            x    582.42\n            y    627.59\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    64\n        label    \"\"\n        graphics\n        [\n            x    767.78\n            y    576.94\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    65\n        label    \"\"\n        graphics\n        [\n            x    75.70\n            y    268.92\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    66\n        label    \"\"\n        graphics\n        [\n            x    514.62\n            y    310.84\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    67\n        label    \"\"\n        graphics\n        [\n            x    752.87\n            y    764.65\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    68\n        label    \"\"\n        graphics\n        [\n            x    75.80\n            y    472.35\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    69\n        label    \"\"\n        graphics\n        [\n            x    29.29\n            y    45.04\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    70\n        label    \"\"\n        graphics\n        [\n            x    433.54\n            y    421.40\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    71\n        label    \"\"\n        graphics\n        [\n            x    760.44\n            y    708.79\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    72\n        label    \"\"\n        graphics\n        [\n            x    413.70\n            y    642.18\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    73\n        label    \"\"\n        graphics\n        [\n            x    498.48\n            y    500.89\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    74\n        label    \"\"\n        graphics\n        [\n            x    455.63\n            y    84.78\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    75\n        label    \"\"\n        graphics\n        [\n            x    78.74\n            y    465.17\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    76\n        label    \"\"\n        graphics\n        [\n            x    428.93\n            y    395.14\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    77\n        label    \"\"\n        graphics\n        [\n            x    374.98\n            y    525.14\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    78\n        label    \"\"\n        graphics\n        [\n            x    340.72\n            y    332.65\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    79\n        label    \"\"\n        graphics\n        [\n            x    353.34\n            y    57.53\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    edge\n    [\n        source    1\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    1\n        target    52\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    10\n        target    54\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    10\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    11\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    12\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    12\n        target    20\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    13\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    14\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    14\n        target    54\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    14\n        target    59\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    15\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    16\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    17\n        target    41\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    17\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    18\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    19\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    2\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    2\n        target    70\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    20\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    20\n        target    36\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    21\n        target    19\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    22\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    22\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    23\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    24\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    25\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    26\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    27\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    28\n        target    41\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    28\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    29\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    3\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    30\n        target    20\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    30\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    31\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    32\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    32\n        target    43\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    32\n        target    73\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    33\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    34\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    34\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    34\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    35\n        target    33\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    36\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    37\n        target    28\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    38\n        target    30\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    39\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    39\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    4\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    40\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    40\n        target    74\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    41\n        target    25\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    42\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    43\n        target    39\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    44\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    45\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    46\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    46\n        target    35\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    46\n        target    49\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    46\n        target    78\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    47\n        target    41\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    48\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    48\n        target    52\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    49\n        target    25\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    49\n        target    50\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    5\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    50\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    51\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    52\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    53\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    54\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    55\n        target    33\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    56\n        target    54\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    57\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    58\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    59\n        target    44\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    6\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    60\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    60\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    61\n        target    44\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    62\n        target    48\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    63\n        target    51\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    64\n        target    30\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    65\n        target    49\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    66\n        target    35\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    67\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    67\n        target    76\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    68\n        target    40\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    69\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    7\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    70\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    71\n        target    63\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    72\n        target    43\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    73\n        target    35\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    73\n        target    44\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    74\n        target    19\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    75\n        target    68\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    76\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    77\n        target    40\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    78\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    79\n        target    77\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    8\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    9\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n]\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v80e104.tglf",
    "content": "0 637.000 670.000 30.000 30.000\n1 692.000 738.000 30.000 30.000\n2 438.000 453.000 30.000 30.000\n3 611.000 588.000 30.000 30.000\n4 693.000 676.000 30.000 30.000\n5 14.000 521.000 30.000 30.000\n6 454.000 34.000 30.000 30.000\n7 707.000 773.000 30.000 30.000\n8 320.000 685.000 30.000 30.000\n9 315.000 278.000 30.000 30.000\n10 338.000 549.000 30.000 30.000\n11 207.000 283.000 30.000 30.000\n12 693.000 765.000 30.000 30.000\n13 727.000 424.000 30.000 30.000\n14 271.000 563.000 30.000 30.000\n15 79.000 269.000 30.000 30.000\n16 316.000 438.000 30.000 30.000\n17 91.000 552.000 30.000 30.000\n18 129.000 587.000 30.000 30.000\n19 552.000 686.000 30.000 30.000\n20 378.000 737.000 30.000 30.000\n21 170.000 428.000 30.000 30.000\n22 581.000 459.000 30.000 30.000\n23 804.000 752.000 30.000 30.000\n24 108.000 701.000 30.000 30.000\n25 673.000 321.000 30.000 30.000\n26 18.000 505.000 30.000 30.000\n27 9.000 358.000 30.000 30.000\n28 697.000 100.000 30.000 30.000\n29 482.000 122.000 30.000 30.000\n30 688.000 423.000 30.000 30.000\n31 176.000 370.000 30.000 30.000\n32 451.000 617.000 30.000 30.000\n33 537.000 689.000 30.000 30.000\n34 205.000 547.000 30.000 30.000\n35 505.000 124.000 30.000 30.000\n36 145.000 327.000 30.000 30.000\n37 435.000 80.000 30.000 30.000\n38 308.000 474.000 30.000 30.000\n39 758.000 426.000 30.000 30.000\n40 181.000 309.000 30.000 30.000\n41 390.000 736.000 30.000 30.000\n42 475.000 566.000 30.000 30.000\n43 707.000 275.000 30.000 30.000\n44 326.000 655.000 30.000 30.000\n45 625.000 82.000 30.000 30.000\n46 23.000 650.000 30.000 30.000\n47 769.000 650.000 30.000 30.000\n48 712.000 149.000 30.000 30.000\n49 272.000 434.000 30.000 30.000\n50 650.000 340.000 30.000 30.000\n51 667.000 779.000 30.000 30.000\n52 232.000 383.000 30.000 30.000\n53 261.000 663.000 30.000 30.000\n54 468.000 340.000 30.000 30.000\n55 295.000 737.000 30.000 30.000\n56 371.000 352.000 30.000 30.000\n57 723.000 715.000 30.000 30.000\n58 59.000 365.000 30.000 30.000\n59 571.000 269.000 30.000 30.000\n60 409.000 207.000 30.000 30.000\n61 287.000 84.000 30.000 30.000\n62 281.000 410.000 30.000 30.000\n63 582.000 627.000 30.000 30.000\n64 767.000 576.000 30.000 30.000\n65 75.000 268.000 30.000 30.000\n66 514.000 310.000 30.000 30.000\n67 752.000 764.000 30.000 30.000\n68 75.000 472.000 30.000 30.000\n69 29.000 45.000 30.000 30.000\n70 433.000 421.000 30.000 30.000\n71 760.000 708.000 30.000 30.000\n72 413.000 642.000 30.000 30.000\n73 498.000 500.000 30.000 30.000\n74 455.000 84.000 30.000 30.000\n75 78.000 465.000 30.000 30.000\n76 428.000 395.000 30.000 30.000\n77 374.000 525.000 30.000 30.000\n78 340.000 332.000 30.000 30.000\n79 353.000 57.000 30.000 30.000\n#\n39 5\n10 9\n59 44\n46 78\n60 3\n37 28\n45 23\n14 54\n51 4\n12 20\n8 7\n40 74\n32 73\n39 21\n77 40\n52 7\n58 16\n38 30\n68 40\n27 5\n57 17\n34 14\n46 49\n25 16\n62 48\n65 49\n12 2\n73 44\n43 39\n64 30\n74 19\n30 9\n30 20\n35 33\n14 59\n24 9\n16 8\n54 16\n3 1\n20 18\n32 18\n33 17\n6 5\n34 15\n36 5\n40 2\n17 41\n1 52\n70 15\n79 77\n5 2\n61 44\n78 18\n31 16\n66 35\n49 25\n2 0\n63 51\n4 0\n76 7\n34 21\n73 35\n42 21\n28 9\n23 9\n67 14\n69 23\n20 36\n22 12\n32 43\n1 0\n71 63\n18 5\n53 15\n10 54\n55 33\n67 76\n9 7\n44 15\n46 0\n21 19\n48 22\n13 3\n49 50\n17 6\n26 13\n7 2\n41 25\n22 11\n56 54\n48 52\n19 3\n60 0\n14 5\n28 41\n29 7\n11 5\n72 43\n47 41\n2 70\n50 5\n75 68\n15 9\n46 35\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v80e112.gml",
    "content": "graph\n[\n    node\n    [\n        id    0\n        label    \"\"\n        graphics\n        [\n            x    58.66\n            y    458.21\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    1\n        label    \"\"\n        graphics\n        [\n            x    30.09\n            y    794.77\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    2\n        label    \"\"\n        graphics\n        [\n            x    255.52\n            y    562.00\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    3\n        label    \"\"\n        graphics\n        [\n            x    536.46\n            y    281.70\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    4\n        label    \"\"\n        graphics\n        [\n            x    644.91\n            y    141.80\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    5\n        label    \"\"\n        graphics\n        [\n            x    710.64\n            y    650.19\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    6\n        label    \"\"\n        graphics\n        [\n            x    434.66\n            y    268.23\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    7\n        label    \"\"\n        graphics\n        [\n            x    624.28\n            y    258.07\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    8\n        label    \"\"\n        graphics\n        [\n            x    71.50\n            y    134.07\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    9\n        label    \"\"\n        graphics\n        [\n            x    371.01\n            y    154.89\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    10\n        label    \"\"\n        graphics\n        [\n            x    210.64\n            y    140.71\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    11\n        label    \"\"\n        graphics\n        [\n            x    601.19\n            y    405.39\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    12\n        label    \"\"\n        graphics\n        [\n            x    566.62\n            y    196.01\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    13\n        label    \"\"\n        graphics\n        [\n            x    396.74\n            y    25.21\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    14\n        label    \"\"\n        graphics\n        [\n            x    482.10\n            y    20.74\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    15\n        label    \"\"\n        graphics\n        [\n            x    403.48\n            y    772.72\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    16\n        label    \"\"\n        graphics\n        [\n            x    184.68\n            y    785.91\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    17\n        label    \"\"\n        graphics\n        [\n            x    5.08\n            y    373.92\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    18\n        label    \"\"\n        graphics\n        [\n            x    68.15\n            y    259.11\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    19\n        label    \"\"\n        graphics\n        [\n            x    683.84\n            y    664.14\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    20\n        label    \"\"\n        graphics\n        [\n            x    277.19\n            y    525.66\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    21\n        label    \"\"\n        graphics\n        [\n            x    672.81\n            y    442.62\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    22\n        label    \"\"\n        graphics\n        [\n            x    375.68\n            y    383.65\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    23\n        label    \"\"\n        graphics\n        [\n            x    525.60\n            y    568.54\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    24\n        label    \"\"\n        graphics\n        [\n            x    102.86\n            y    724.25\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    25\n        label    \"\"\n        graphics\n        [\n            x    244.94\n            y    587.65\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    26\n        label    \"\"\n        graphics\n        [\n            x    234.91\n            y    587.59\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    27\n        label    \"\"\n        graphics\n        [\n            x    59.13\n            y    168.64\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    28\n        label    \"\"\n        graphics\n        [\n            x    160.86\n            y    103.12\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    29\n        label    \"\"\n        graphics\n        [\n            x    613.28\n            y    645.02\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    30\n        label    \"\"\n        graphics\n        [\n            x    257.59\n            y    345.57\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    31\n        label    \"\"\n        graphics\n        [\n            x    708.39\n            y    345.03\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    32\n        label    \"\"\n        graphics\n        [\n            x    490.63\n            y    787.66\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    33\n        label    \"\"\n        graphics\n        [\n            x    731.63\n            y    48.81\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    34\n        label    \"\"\n        graphics\n        [\n            x    633.45\n            y    408.81\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    35\n        label    \"\"\n        graphics\n        [\n            x    715.83\n            y    99.07\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    36\n        label    \"\"\n        graphics\n        [\n            x    225.78\n            y    103.24\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    37\n        label    \"\"\n        graphics\n        [\n            x    285.63\n            y    497.12\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    38\n        label    \"\"\n        graphics\n        [\n            x    206.93\n            y    636.42\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    39\n        label    \"\"\n        graphics\n        [\n            x    797.40\n            y    756.36\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    40\n        label    \"\"\n        graphics\n        [\n            x    668.27\n            y    438.75\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    41\n        label    \"\"\n        graphics\n        [\n            x    214.68\n            y    20.77\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    42\n        label    \"\"\n        graphics\n        [\n            x    774.84\n            y    175.32\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    43\n        label    \"\"\n        graphics\n        [\n            x    799.57\n            y    775.98\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    44\n        label    \"\"\n        graphics\n        [\n            x    434.05\n            y    391.89\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    45\n        label    \"\"\n        graphics\n        [\n            x    621.09\n            y    654.98\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    46\n        label    \"\"\n        graphics\n        [\n            x    402.72\n            y    596.48\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    47\n        label    \"\"\n        graphics\n        [\n            x    468.45\n            y    396.89\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    48\n        label    \"\"\n        graphics\n        [\n            x    29.37\n            y    496.19\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    49\n        label    \"\"\n        graphics\n        [\n            x    428.44\n            y    334.41\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    50\n        label    \"\"\n        graphics\n        [\n            x    5.06\n            y    723.28\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    51\n        label    \"\"\n        graphics\n        [\n            x    145.83\n            y    713.93\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    52\n        label    \"\"\n        graphics\n        [\n            x    603.61\n            y    38.64\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    53\n        label    \"\"\n        graphics\n        [\n            x    362.30\n            y    1.62\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    54\n        label    \"\"\n        graphics\n        [\n            x    73.32\n            y    389.56\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    55\n        label    \"\"\n        graphics\n        [\n            x    504.94\n            y    223.11\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    56\n        label    \"\"\n        graphics\n        [\n            x    117.90\n            y    37.46\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    57\n        label    \"\"\n        graphics\n        [\n            x    296.63\n            y    205.84\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    58\n        label    \"\"\n        graphics\n        [\n            x    387.18\n            y    283.35\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    59\n        label    \"\"\n        graphics\n        [\n            x    676.53\n            y    259.24\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    60\n        label    \"\"\n        graphics\n        [\n            x    670.90\n            y    196.02\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    61\n        label    \"\"\n        graphics\n        [\n            x    343.29\n            y    598.65\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    62\n        label    \"\"\n        graphics\n        [\n            x    313.99\n            y    232.78\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    63\n        label    \"\"\n        graphics\n        [\n            x    472.73\n            y    13.14\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    64\n        label    \"\"\n        graphics\n        [\n            x    795.83\n            y    250.50\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    65\n        label    \"\"\n        graphics\n        [\n            x    728.17\n            y    83.92\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    66\n        label    \"\"\n        graphics\n        [\n            x    156.26\n            y    21.27\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    67\n        label    \"\"\n        graphics\n        [\n            x    199.66\n            y    457.67\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    68\n        label    \"\"\n        graphics\n        [\n            x    78.30\n            y    715.74\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    69\n        label    \"\"\n        graphics\n        [\n            x    257.23\n            y    195.93\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    70\n        label    \"\"\n        graphics\n        [\n            x    151.27\n            y    729.92\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    71\n        label    \"\"\n        graphics\n        [\n            x    94.92\n            y    146.32\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    72\n        label    \"\"\n        graphics\n        [\n            x    222.08\n            y    29.39\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    73\n        label    \"\"\n        graphics\n        [\n            x    180.18\n            y    511.22\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    74\n        label    \"\"\n        graphics\n        [\n            x    413.97\n            y    147.97\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    75\n        label    \"\"\n        graphics\n        [\n            x    626.08\n            y    615.42\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    76\n        label    \"\"\n        graphics\n        [\n            x    248.59\n            y    2.91\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    77\n        label    \"\"\n        graphics\n        [\n            x    280.64\n            y    178.43\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    78\n        label    \"\"\n        graphics\n        [\n            x    790.31\n            y    608.17\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    79\n        label    \"\"\n        graphics\n        [\n            x    504.84\n            y    460.52\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    edge\n    [\n        source    1\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    1\n        target    43\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    10\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    11\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    12\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    13\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    14\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    14\n        target    62\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    15\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    15\n        target    39\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    16\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    16\n        target    67\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    17\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    17\n        target    67\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    18\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    19\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    19\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    2\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    2\n        target    41\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    20\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    21\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    21\n        target    40\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    22\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    23\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    23\n        target    72\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    24\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    25\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    26\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    26\n        target    72\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    27\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    28\n        target    19\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    29\n        target    27\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    3\n        target    19\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    3\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    30\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    30\n        target    76\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    31\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    31\n        target    34\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    32\n        target    30\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    33\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    33\n        target    77\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    34\n        target    24\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    35\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    36\n        target    33\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    36\n        target    46\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    36\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    37\n        target    20\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    38\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    39\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    4\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    4\n        target    37\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    4\n        target    66\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    40\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    41\n        target    31\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    42\n        target    28\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    43\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    44\n        target    26\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    45\n        target    41\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    46\n        target    27\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    47\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    47\n        target    30\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    48\n        target    26\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    49\n        target    30\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    5\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    50\n        target    33\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    50\n        target    78\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    51\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    51\n        target    34\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    51\n        target    41\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    52\n        target    39\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    53\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    53\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    54\n        target    31\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    55\n        target    29\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    56\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    57\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    57\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    57\n        target    19\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    57\n        target    40\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    58\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    59\n        target    57\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    6\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    60\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    61\n        target    43\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    62\n        target    59\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    62\n        target    60\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    63\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    63\n        target    58\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    64\n        target    30\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    64\n        target    41\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    64\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    65\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    66\n        target    26\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    67\n        target    34\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    68\n        target    57\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    69\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    7\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    70\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    71\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    71\n        target    47\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    72\n        target    20\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    73\n        target    62\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    74\n        target    62\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    74\n        target    73\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    75\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    76\n        target    46\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    76\n        target    62\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    77\n        target    32\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    78\n        target    61\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    79\n        target    73\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    8\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    9\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n]\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v80e112.tglf",
    "content": "0 58.000 458.000 30.000 30.000\n1 30.000 794.000 30.000 30.000\n2 255.000 562.000 30.000 30.000\n3 536.000 281.000 30.000 30.000\n4 644.000 141.000 30.000 30.000\n5 710.000 650.000 30.000 30.000\n6 434.000 268.000 30.000 30.000\n7 624.000 258.000 30.000 30.000\n8 71.000 134.000 30.000 30.000\n9 371.000 154.000 30.000 30.000\n10 210.000 140.000 30.000 30.000\n11 601.000 405.000 30.000 30.000\n12 566.000 196.000 30.000 30.000\n13 396.000 25.000 30.000 30.000\n14 482.000 20.000 30.000 30.000\n15 403.000 772.000 30.000 30.000\n16 184.000 785.000 30.000 30.000\n17 5.000 373.000 30.000 30.000\n18 68.000 259.000 30.000 30.000\n19 683.000 664.000 30.000 30.000\n20 277.000 525.000 30.000 30.000\n21 672.000 442.000 30.000 30.000\n22 375.000 383.000 30.000 30.000\n23 525.000 568.000 30.000 30.000\n24 102.000 724.000 30.000 30.000\n25 244.000 587.000 30.000 30.000\n26 234.000 587.000 30.000 30.000\n27 59.000 168.000 30.000 30.000\n28 160.000 103.000 30.000 30.000\n29 613.000 645.000 30.000 30.000\n30 257.000 345.000 30.000 30.000\n31 708.000 345.000 30.000 30.000\n32 490.000 787.000 30.000 30.000\n33 731.000 48.000 30.000 30.000\n34 633.000 408.000 30.000 30.000\n35 715.000 99.000 30.000 30.000\n36 225.000 103.000 30.000 30.000\n37 285.000 497.000 30.000 30.000\n38 206.000 636.000 30.000 30.000\n39 797.000 756.000 30.000 30.000\n40 668.000 438.000 30.000 30.000\n41 214.000 20.000 30.000 30.000\n42 774.000 175.000 30.000 30.000\n43 799.000 775.000 30.000 30.000\n44 434.000 391.000 30.000 30.000\n45 621.000 654.000 30.000 30.000\n46 402.000 596.000 30.000 30.000\n47 468.000 396.000 30.000 30.000\n48 29.000 496.000 30.000 30.000\n49 428.000 334.000 30.000 30.000\n50 5.000 723.000 30.000 30.000\n51 145.000 713.000 30.000 30.000\n52 603.000 38.000 30.000 30.000\n53 362.000 1.000 30.000 30.000\n54 73.000 389.000 30.000 30.000\n55 504.000 223.000 30.000 30.000\n56 117.000 37.000 30.000 30.000\n57 296.000 205.000 30.000 30.000\n58 387.000 283.000 30.000 30.000\n59 676.000 259.000 30.000 30.000\n60 670.000 196.000 30.000 30.000\n61 343.000 598.000 30.000 30.000\n62 313.000 232.000 30.000 30.000\n63 472.000 13.000 30.000 30.000\n64 795.000 250.000 30.000 30.000\n65 728.000 83.000 30.000 30.000\n66 156.000 21.000 30.000 30.000\n67 199.000 457.000 30.000 30.000\n68 78.000 715.000 30.000 30.000\n69 257.000 195.000 30.000 30.000\n70 151.000 729.000 30.000 30.000\n71 94.000 146.000 30.000 30.000\n72 222.000 29.000 30.000 30.000\n73 180.000 511.000 30.000 30.000\n74 413.000 147.000 30.000 30.000\n75 626.000 615.000 30.000 30.000\n76 248.000 2.000 30.000 30.000\n77 280.000 178.000 30.000 30.000\n78 790.000 608.000 30.000 30.000\n79 504.000 460.000 30.000 30.000\n#\n33 11\n10 6\n57 40\n76 62\n72 20\n26 23\n51 10\n50 33\n13 5\n66 26\n38 16\n47 14\n79 73\n3 19\n12 9\n21 10\n69 0\n32 30\n48 26\n39 1\n4 2\n37 20\n42 28\n50 78\n14 62\n1 0\n62 60\n60 6\n67 34\n27 13\n53 14\n74 62\n56 9\n2 41\n14 4\n61 43\n55 29\n29 27\n64 41\n63 3\n31 2\n54 31\n73 62\n6 4\n68 57\n34 24\n77 32\n16 6\n36 9\n46 27\n22 16\n75 10\n24 22\n57 17\n15 39\n23 72\n35 6\n7 6\n16 67\n17 0\n30 76\n28 19\n20 18\n4 37\n25 5\n59 57\n36 33\n64 30\n70 23\n30 14\n71 47\n47 30\n58 16\n52 39\n40 11\n9 3\n8 1\n64 6\n41 31\n57 15\n3 2\n53 4\n21 40\n43 10\n36 46\n11 8\n71 10\n19 15\n57 19\n78 61\n15 12\n49 30\n23 18\n74 73\n62 59\n45 41\n51 41\n65 8\n33 77\n76 46\n44 26\n4 66\n18 13\n1 43\n5 0\n26 72\n2 1\n19 14\n17 67\n63 58\n51 34\n31 34\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v80e120.gml",
    "content": "graph\n[\n    node\n    [\n        id    0\n        label    \"\"\n        graphics\n        [\n            x    107.77\n            y    105.54\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    1\n        label    \"\"\n        graphics\n        [\n            x    260.60\n            y    204.72\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    2\n        label    \"\"\n        graphics\n        [\n            x    765.50\n            y    241.43\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    3\n        label    \"\"\n        graphics\n        [\n            x    255.69\n            y    47.18\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    4\n        label    \"\"\n        graphics\n        [\n            x    268.67\n            y    8.55\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    5\n        label    \"\"\n        graphics\n        [\n            x    582.34\n            y    525.99\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    6\n        label    \"\"\n        graphics\n        [\n            x    62.63\n            y    701.44\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    7\n        label    \"\"\n        graphics\n        [\n            x    666.19\n            y    468.55\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    8\n        label    \"\"\n        graphics\n        [\n            x    675.64\n            y    44.52\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    9\n        label    \"\"\n        graphics\n        [\n            x    117.81\n            y    557.77\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    10\n        label    \"\"\n        graphics\n        [\n            x    287.85\n            y    37.69\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    11\n        label    \"\"\n        graphics\n        [\n            x    343.64\n            y    574.45\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    12\n        label    \"\"\n        graphics\n        [\n            x    442.29\n            y    437.31\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    13\n        label    \"\"\n        graphics\n        [\n            x    599.90\n            y    468.60\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    14\n        label    \"\"\n        graphics\n        [\n            x    752.81\n            y    648.98\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    15\n        label    \"\"\n        graphics\n        [\n            x    727.06\n            y    297.24\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    16\n        label    \"\"\n        graphics\n        [\n            x    134.48\n            y    597.61\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    17\n        label    \"\"\n        graphics\n        [\n            x    603.29\n            y    334.33\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    18\n        label    \"\"\n        graphics\n        [\n            x    32.18\n            y    617.07\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    19\n        label    \"\"\n        graphics\n        [\n            x    129.53\n            y    184.81\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    20\n        label    \"\"\n        graphics\n        [\n            x    121.92\n            y    715.62\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    21\n        label    \"\"\n        graphics\n        [\n            x    168.00\n            y    704.05\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    22\n        label    \"\"\n        graphics\n        [\n            x    68.96\n            y    710.46\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    23\n        label    \"\"\n        graphics\n        [\n            x    294.73\n            y    425.12\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    24\n        label    \"\"\n        graphics\n        [\n            x    323.19\n            y    506.84\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    25\n        label    \"\"\n        graphics\n        [\n            x    748.47\n            y    171.43\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    26\n        label    \"\"\n        graphics\n        [\n            x    460.83\n            y    573.86\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    27\n        label    \"\"\n        graphics\n        [\n            x    311.25\n            y    58.61\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    28\n        label    \"\"\n        graphics\n        [\n            x    581.47\n            y    507.20\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    29\n        label    \"\"\n        graphics\n        [\n            x    426.44\n            y    538.83\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    30\n        label    \"\"\n        graphics\n        [\n            x    109.13\n            y    757.10\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    31\n        label    \"\"\n        graphics\n        [\n            x    677.47\n            y    341.16\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    32\n        label    \"\"\n        graphics\n        [\n            x    250.24\n            y    14.70\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    33\n        label    \"\"\n        graphics\n        [\n            x    367.07\n            y    607.83\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    34\n        label    \"\"\n        graphics\n        [\n            x    57.70\n            y    299.72\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    35\n        label    \"\"\n        graphics\n        [\n            x    799.26\n            y    795.81\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    36\n        label    \"\"\n        graphics\n        [\n            x    164.46\n            y    684.89\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    37\n        label    \"\"\n        graphics\n        [\n            x    447.34\n            y    680.04\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    38\n        label    \"\"\n        graphics\n        [\n            x    351.93\n            y    411.92\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    39\n        label    \"\"\n        graphics\n        [\n            x    632.86\n            y    493.56\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    40\n        label    \"\"\n        graphics\n        [\n            x    149.03\n            y    46.83\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    41\n        label    \"\"\n        graphics\n        [\n            x    400.13\n            y    125.75\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    42\n        label    \"\"\n        graphics\n        [\n            x    693.73\n            y    75.61\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    43\n        label    \"\"\n        graphics\n        [\n            x    423.23\n            y    762.96\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    44\n        label    \"\"\n        graphics\n        [\n            x    462.63\n            y    551.87\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    45\n        label    \"\"\n        graphics\n        [\n            x    426.75\n            y    719.39\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    46\n        label    \"\"\n        graphics\n        [\n            x    525.56\n            y    179.79\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    47\n        label    \"\"\n        graphics\n        [\n            x    359.68\n            y    632.42\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    48\n        label    \"\"\n        graphics\n        [\n            x    352.98\n            y    432.14\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    49\n        label    \"\"\n        graphics\n        [\n            x    478.51\n            y    662.16\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    50\n        label    \"\"\n        graphics\n        [\n            x    75.06\n            y    242.28\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    51\n        label    \"\"\n        graphics\n        [\n            x    610.40\n            y    98.11\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    52\n        label    \"\"\n        graphics\n        [\n            x    263.03\n            y    470.36\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    53\n        label    \"\"\n        graphics\n        [\n            x    245.67\n            y    161.85\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    54\n        label    \"\"\n        graphics\n        [\n            x    628.07\n            y    164.58\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    55\n        label    \"\"\n        graphics\n        [\n            x    766.89\n            y    91.61\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    56\n        label    \"\"\n        graphics\n        [\n            x    677.83\n            y    724.52\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    57\n        label    \"\"\n        graphics\n        [\n            x    370.29\n            y    511.92\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    58\n        label    \"\"\n        graphics\n        [\n            x    655.17\n            y    266.57\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    59\n        label    \"\"\n        graphics\n        [\n            x    168.04\n            y    550.59\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    60\n        label    \"\"\n        graphics\n        [\n            x    162.01\n            y    291.03\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    61\n        label    \"\"\n        graphics\n        [\n            x    275.24\n            y    440.97\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    62\n        label    \"\"\n        graphics\n        [\n            x    588.65\n            y    468.81\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    63\n        label    \"\"\n        graphics\n        [\n            x    433.51\n            y    304.41\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    64\n        label    \"\"\n        graphics\n        [\n            x    691.01\n            y    634.75\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    65\n        label    \"\"\n        graphics\n        [\n            x    697.50\n            y    110.60\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    66\n        label    \"\"\n        graphics\n        [\n            x    363.38\n            y    401.10\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    67\n        label    \"\"\n        graphics\n        [\n            x    394.91\n            y    225.63\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    68\n        label    \"\"\n        graphics\n        [\n            x    358.55\n            y    401.34\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    69\n        label    \"\"\n        graphics\n        [\n            x    393.64\n            y    548.52\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    70\n        label    \"\"\n        graphics\n        [\n            x    340.19\n            y    493.04\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    71\n        label    \"\"\n        graphics\n        [\n            x    265.23\n            y    515.12\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    72\n        label    \"\"\n        graphics\n        [\n            x    752.02\n            y    175.31\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    73\n        label    \"\"\n        graphics\n        [\n            x    439.32\n            y    769.18\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    74\n        label    \"\"\n        graphics\n        [\n            x    191.63\n            y    353.51\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    75\n        label    \"\"\n        graphics\n        [\n            x    392.01\n            y    493.05\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    76\n        label    \"\"\n        graphics\n        [\n            x    277.28\n            y    298.95\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    77\n        label    \"\"\n        graphics\n        [\n            x    315.33\n            y    614.42\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    78\n        label    \"\"\n        graphics\n        [\n            x    471.93\n            y    363.87\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    79\n        label    \"\"\n        graphics\n        [\n            x    628.30\n            y    612.09\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    edge\n    [\n        source    1\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    10\n        target    52\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    10\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    11\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    12\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    13\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    13\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    14\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    15\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    16\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    16\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    17\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    18\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    18\n        target    44\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    19\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    19\n        target    47\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    2\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    2\n        target    50\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    20\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    21\n        target    29\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    21\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    22\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    23\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    24\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    25\n        target    20\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    25\n        target    24\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    26\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    27\n        target    43\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    27\n        target    61\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    27\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    28\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    29\n        target    19\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    3\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    3\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    30\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    30\n        target    34\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    30\n        target    63\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    31\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    31\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    31\n        target    67\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    32\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    32\n        target    26\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    32\n        target    74\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    33\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    33\n        target    63\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    34\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    35\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    35\n        target    30\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    35\n        target    33\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    36\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    37\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    37\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    38\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    39\n        target    29\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    39\n        target    58\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    4\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    40\n        target    39\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    41\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    41\n        target    49\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    41\n        target    65\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    42\n        target    34\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    43\n        target    25\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    44\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    45\n        target    24\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    46\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    47\n        target    24\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    48\n        target    37\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    48\n        target    42\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    49\n        target    40\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    5\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    50\n        target    38\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    50\n        target    76\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    51\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    52\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    53\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    54\n        target    53\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    55\n        target    28\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    56\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    56\n        target    38\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    57\n        target    30\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    58\n        target    51\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    59\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    59\n        target    53\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    6\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    60\n        target    35\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    61\n        target    56\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    62\n        target    46\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    62\n        target    48\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    63\n        target    24\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    64\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    65\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    65\n        target    59\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    66\n        target    60\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    67\n        target    44\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    68\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    69\n        target    35\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    69\n        target    50\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    7\n        target    29\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    7\n        target    40\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    7\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    70\n        target    46\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    71\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    71\n        target    20\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    71\n        target    55\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    72\n        target    70\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    73\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    73\n        target    56\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    74\n        target    30\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    74\n        target    39\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    74\n        target    51\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    74\n        target    63\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    75\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    75\n        target    48\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    76\n        target    52\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    76\n        target    72\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    77\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    78\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    79\n        target    64\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    8\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    9\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n]\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v80e120.tglf",
    "content": "0 107.000 105.000 30.000 30.000\n1 260.000 204.000 30.000 30.000\n2 765.000 241.000 30.000 30.000\n3 255.000 47.000 30.000 30.000\n4 268.000 8.000 30.000 30.000\n5 582.000 525.000 30.000 30.000\n6 62.000 701.000 30.000 30.000\n7 666.000 468.000 30.000 30.000\n8 675.000 44.000 30.000 30.000\n9 117.000 557.000 30.000 30.000\n10 287.000 37.000 30.000 30.000\n11 343.000 574.000 30.000 30.000\n12 442.000 437.000 30.000 30.000\n13 599.000 468.000 30.000 30.000\n14 752.000 648.000 30.000 30.000\n15 727.000 297.000 30.000 30.000\n16 134.000 597.000 30.000 30.000\n17 603.000 334.000 30.000 30.000\n18 32.000 617.000 30.000 30.000\n19 129.000 184.000 30.000 30.000\n20 121.000 715.000 30.000 30.000\n21 168.000 704.000 30.000 30.000\n22 68.000 710.000 30.000 30.000\n23 294.000 425.000 30.000 30.000\n24 323.000 506.000 30.000 30.000\n25 748.000 171.000 30.000 30.000\n26 460.000 573.000 30.000 30.000\n27 311.000 58.000 30.000 30.000\n28 581.000 507.000 30.000 30.000\n29 426.000 538.000 30.000 30.000\n30 109.000 757.000 30.000 30.000\n31 677.000 341.000 30.000 30.000\n32 250.000 14.000 30.000 30.000\n33 367.000 607.000 30.000 30.000\n34 57.000 299.000 30.000 30.000\n35 799.000 795.000 30.000 30.000\n36 164.000 684.000 30.000 30.000\n37 447.000 680.000 30.000 30.000\n38 351.000 411.000 30.000 30.000\n39 632.000 493.000 30.000 30.000\n40 149.000 46.000 30.000 30.000\n41 400.000 125.000 30.000 30.000\n42 693.000 75.000 30.000 30.000\n43 423.000 762.000 30.000 30.000\n44 462.000 551.000 30.000 30.000\n45 426.000 719.000 30.000 30.000\n46 525.000 179.000 30.000 30.000\n47 359.000 632.000 30.000 30.000\n48 352.000 432.000 30.000 30.000\n49 478.000 662.000 30.000 30.000\n50 75.000 242.000 30.000 30.000\n51 610.000 98.000 30.000 30.000\n52 263.000 470.000 30.000 30.000\n53 245.000 161.000 30.000 30.000\n54 628.000 164.000 30.000 30.000\n55 766.000 91.000 30.000 30.000\n56 677.000 724.000 30.000 30.000\n57 370.000 511.000 30.000 30.000\n58 655.000 266.000 30.000 30.000\n59 168.000 550.000 30.000 30.000\n60 162.000 291.000 30.000 30.000\n61 275.000 440.000 30.000 30.000\n62 588.000 468.000 30.000 30.000\n63 433.000 304.000 30.000 30.000\n64 691.000 634.000 30.000 30.000\n65 697.000 110.000 30.000 30.000\n66 363.000 401.000 30.000 30.000\n67 394.000 225.000 30.000 30.000\n68 358.000 401.000 30.000 30.000\n69 393.000 548.000 30.000 30.000\n70 340.000 493.000 30.000 30.000\n71 265.000 515.000 30.000 30.000\n72 752.000 175.000 30.000 30.000\n73 439.000 769.000 30.000 30.000\n74 191.000 353.000 30.000 30.000\n75 392.000 493.000 30.000 30.000\n76 277.000 298.000 30.000 30.000\n77 315.000 614.000 30.000 30.000\n78 471.000 363.000 30.000 30.000\n79 628.000 612.000 30.000 30.000\n#\n32 26\n44 16\n16 13\n75 21\n3 16\n74 51\n10 52\n41 49\n38 21\n77 16\n71 20\n62 48\n48 37\n65 59\n27 43\n54 53\n75 48\n60 35\n21 6\n6 3\n36 4\n20 9\n63 24\n9 0\n65 3\n67 44\n29 19\n37 4\n48 42\n73 0\n8 0\n33 63\n2 1\n58 51\n15 9\n68 2\n56 16\n46 17\n18 44\n56 38\n61 56\n17 10\n52 12\n4 3\n31 6\n49 40\n13 2\n34 2\n35 12\n10 7\n71 55\n72 70\n22 2\n1 0\n78 17\n25 20\n2 50\n13 7\n64 22\n35 33\n31 2\n30 34\n71 15\n70 46\n73 56\n39 29\n74 39\n50 38\n41 65\n76 72\n45 24\n43 25\n7 6\n16 15\n59 53\n25 24\n32 23\n62 46\n37 2\n76 52\n7 40\n11 7\n79 64\n18 3\n26 4\n55 28\n50 76\n30 10\n7 29\n19 47\n39 58\n27 61\n5 1\n14 11\n40 39\n23 0\n21 29\n69 50\n35 30\n31 67\n24 23\n74 30\n53 10\n47 24\n27 7\n57 30\n12 11\n3 1\n69 35\n74 63\n32 74\n51 1\n30 63\n42 34\n28 23\n59 13\n33 2\n19 17\n41 2\n66 60\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v80e80.gml",
    "content": "graph\n[\n    node\n    [\n        id    0\n        label    \"\"\n        graphics\n        [\n            x    457.30\n            y    600.34\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    1\n        label    \"\"\n        graphics\n        [\n            x    714.50\n            y    658.16\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    2\n        label    \"\"\n        graphics\n        [\n            x    638.78\n            y    572.91\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    3\n        label    \"\"\n        graphics\n        [\n            x    578.56\n            y    747.10\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    4\n        label    \"\"\n        graphics\n        [\n            x    140.28\n            y    332.48\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    5\n        label    \"\"\n        graphics\n        [\n            x    318.18\n            y    522.73\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    6\n        label    \"\"\n        graphics\n        [\n            x    770.81\n            y    238.81\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    7\n        label    \"\"\n        graphics\n        [\n            x    87.98\n            y    259.78\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    8\n        label    \"\"\n        graphics\n        [\n            x    68.94\n            y    656.91\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    9\n        label    \"\"\n        graphics\n        [\n            x    234.86\n            y    38.48\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    10\n        label    \"\"\n        graphics\n        [\n            x    507.34\n            y    576.48\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    11\n        label    \"\"\n        graphics\n        [\n            x    473.94\n            y    402.28\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    12\n        label    \"\"\n        graphics\n        [\n            x    106.96\n            y    736.36\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    13\n        label    \"\"\n        graphics\n        [\n            x    421.52\n            y    711.20\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    14\n        label    \"\"\n        graphics\n        [\n            x    387.49\n            y    60.99\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    15\n        label    \"\"\n        graphics\n        [\n            x    639.92\n            y    281.41\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    16\n        label    \"\"\n        graphics\n        [\n            x    736.24\n            y    661.19\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    17\n        label    \"\"\n        graphics\n        [\n            x    326.69\n            y    322.06\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    18\n        label    \"\"\n        graphics\n        [\n            x    438.58\n            y    138.90\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    19\n        label    \"\"\n        graphics\n        [\n            x    459.98\n            y    672.28\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    20\n        label    \"\"\n        graphics\n        [\n            x    77.69\n            y    272.03\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    21\n        label    \"\"\n        graphics\n        [\n            x    304.36\n            y    317.52\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    22\n        label    \"\"\n        graphics\n        [\n            x    748.23\n            y    105.04\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    23\n        label    \"\"\n        graphics\n        [\n            x    445.13\n            y    594.86\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    24\n        label    \"\"\n        graphics\n        [\n            x    319.05\n            y    2.61\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    25\n        label    \"\"\n        graphics\n        [\n            x    445.36\n            y    771.84\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    26\n        label    \"\"\n        graphics\n        [\n            x    713.70\n            y    241.85\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    27\n        label    \"\"\n        graphics\n        [\n            x    98.61\n            y    42.30\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    28\n        label    \"\"\n        graphics\n        [\n            x    343.18\n            y    269.14\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    29\n        label    \"\"\n        graphics\n        [\n            x    405.59\n            y    285.07\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    30\n        label    \"\"\n        graphics\n        [\n            x    520.77\n            y    693.53\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    31\n        label    \"\"\n        graphics\n        [\n            x    28.48\n            y    771.30\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    32\n        label    \"\"\n        graphics\n        [\n            x    258.00\n            y    54.89\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    33\n        label    \"\"\n        graphics\n        [\n            x    74.91\n            y    796.85\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    34\n        label    \"\"\n        graphics\n        [\n            x    689.46\n            y    44.60\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    35\n        label    \"\"\n        graphics\n        [\n            x    46.45\n            y    13.48\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    36\n        label    \"\"\n        graphics\n        [\n            x    4.37\n            y    661.37\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    37\n        label    \"\"\n        graphics\n        [\n            x    407.02\n            y    204.23\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    38\n        label    \"\"\n        graphics\n        [\n            x    454.15\n            y    182.68\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    39\n        label    \"\"\n        graphics\n        [\n            x    642.71\n            y    518.49\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    40\n        label    \"\"\n        graphics\n        [\n            x    92.47\n            y    443.35\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    41\n        label    \"\"\n        graphics\n        [\n            x    24.14\n            y    71.36\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    42\n        label    \"\"\n        graphics\n        [\n            x    112.41\n            y    140.77\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    43\n        label    \"\"\n        graphics\n        [\n            x    86.91\n            y    359.76\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    44\n        label    \"\"\n        graphics\n        [\n            x    412.96\n            y    339.91\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    45\n        label    \"\"\n        graphics\n        [\n            x    775.43\n            y    294.00\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    46\n        label    \"\"\n        graphics\n        [\n            x    50.85\n            y    412.98\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    47\n        label    \"\"\n        graphics\n        [\n            x    477.59\n            y    321.21\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    48\n        label    \"\"\n        graphics\n        [\n            x    681.03\n            y    166.08\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    49\n        label    \"\"\n        graphics\n        [\n            x    118.50\n            y    657.42\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    50\n        label    \"\"\n        graphics\n        [\n            x    64.58\n            y    498.58\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    51\n        label    \"\"\n        graphics\n        [\n            x    590.68\n            y    220.36\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    52\n        label    \"\"\n        graphics\n        [\n            x    529.14\n            y    308.07\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    53\n        label    \"\"\n        graphics\n        [\n            x    551.91\n            y    324.32\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    54\n        label    \"\"\n        graphics\n        [\n            x    135.11\n            y    730.06\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    55\n        label    \"\"\n        graphics\n        [\n            x    422.62\n            y    649.94\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    56\n        label    \"\"\n        graphics\n        [\n            x    662.52\n            y    471.60\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    57\n        label    \"\"\n        graphics\n        [\n            x    606.34\n            y    81.83\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    58\n        label    \"\"\n        graphics\n        [\n            x    733.68\n            y    153.31\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    59\n        label    \"\"\n        graphics\n        [\n            x    357.98\n            y    419.72\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    60\n        label    \"\"\n        graphics\n        [\n            x    526.91\n            y    190.07\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    61\n        label    \"\"\n        graphics\n        [\n            x    286.00\n            y    660.72\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    62\n        label    \"\"\n        graphics\n        [\n            x    655.50\n            y    324.99\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    63\n        label    \"\"\n        graphics\n        [\n            x    356.92\n            y    252.30\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    64\n        label    \"\"\n        graphics\n        [\n            x    327.17\n            y    439.27\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    65\n        label    \"\"\n        graphics\n        [\n            x    365.85\n            y    302.71\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    66\n        label    \"\"\n        graphics\n        [\n            x    236.14\n            y    680.77\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    67\n        label    \"\"\n        graphics\n        [\n            x    549.01\n            y    641.23\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    68\n        label    \"\"\n        graphics\n        [\n            x    762.85\n            y    429.50\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    69\n        label    \"\"\n        graphics\n        [\n            x    299.13\n            y    534.50\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    70\n        label    \"\"\n        graphics\n        [\n            x    127.83\n            y    281.66\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    71\n        label    \"\"\n        graphics\n        [\n            x    18.18\n            y    219.76\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    72\n        label    \"\"\n        graphics\n        [\n            x    334.55\n            y    228.08\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    73\n        label    \"\"\n        graphics\n        [\n            x    776.84\n            y    177.64\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    74\n        label    \"\"\n        graphics\n        [\n            x    692.44\n            y    761.41\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    75\n        label    \"\"\n        graphics\n        [\n            x    323.42\n            y    28.79\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    76\n        label    \"\"\n        graphics\n        [\n            x    11.37\n            y    259.18\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    77\n        label    \"\"\n        graphics\n        [\n            x    267.98\n            y    97.14\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    78\n        label    \"\"\n        graphics\n        [\n            x    526.78\n            y    149.15\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    79\n        label    \"\"\n        graphics\n        [\n            x    337.82\n            y    516.75\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    edge\n    [\n        source    1\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    10\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    11\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    12\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    13\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    14\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    15\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    16\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    17\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    18\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    19\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    2\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    20\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    21\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    22\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    22\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    23\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    24\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    25\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    26\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    27\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    28\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    29\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    3\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    30\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    31\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    32\n        target    20\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    33\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    34\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    35\n        target    26\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    36\n        target    19\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    37\n        target    34\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    38\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    39\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    4\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    40\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    41\n        target    37\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    42\n        target    40\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    43\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    44\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    45\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    46\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    47\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    48\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    49\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    5\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    50\n        target    20\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    51\n        target    38\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    52\n        target    35\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    53\n        target    47\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    54\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    55\n        target    53\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    56\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    57\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    58\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    59\n        target    35\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    6\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    60\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    61\n        target    46\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    62\n        target    31\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    63\n        target    39\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    64\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    65\n        target    52\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    66\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    67\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    68\n        target    31\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    69\n        target    53\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    7\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    70\n        target    54\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    71\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    72\n        target    40\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    73\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    74\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    75\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    76\n        target    58\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    77\n        target    54\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    78\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    79\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    8\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    9\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n]\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v80e80.tglf",
    "content": "0 457.000 600.000 30.000 30.000\n1 714.000 658.000 30.000 30.000\n2 638.000 572.000 30.000 30.000\n3 578.000 747.000 30.000 30.000\n4 140.000 332.000 30.000 30.000\n5 318.000 522.000 30.000 30.000\n6 770.000 238.000 30.000 30.000\n7 87.000 259.000 30.000 30.000\n8 68.000 656.000 30.000 30.000\n9 234.000 38.000 30.000 30.000\n10 507.000 576.000 30.000 30.000\n11 473.000 402.000 30.000 30.000\n12 106.000 736.000 30.000 30.000\n13 421.000 711.000 30.000 30.000\n14 387.000 60.000 30.000 30.000\n15 639.000 281.000 30.000 30.000\n16 736.000 661.000 30.000 30.000\n17 326.000 322.000 30.000 30.000\n18 438.000 138.000 30.000 30.000\n19 459.000 672.000 30.000 30.000\n20 77.000 272.000 30.000 30.000\n21 304.000 317.000 30.000 30.000\n22 748.000 105.000 30.000 30.000\n23 445.000 594.000 30.000 30.000\n24 319.000 2.000 30.000 30.000\n25 445.000 771.000 30.000 30.000\n26 713.000 241.000 30.000 30.000\n27 98.000 42.000 30.000 30.000\n28 343.000 269.000 30.000 30.000\n29 405.000 285.000 30.000 30.000\n30 520.000 693.000 30.000 30.000\n31 28.000 771.000 30.000 30.000\n32 258.000 54.000 30.000 30.000\n33 74.000 796.000 30.000 30.000\n34 689.000 44.000 30.000 30.000\n35 46.000 13.000 30.000 30.000\n36 4.000 661.000 30.000 30.000\n37 407.000 204.000 30.000 30.000\n38 454.000 182.000 30.000 30.000\n39 642.000 518.000 30.000 30.000\n40 92.000 443.000 30.000 30.000\n41 24.000 71.000 30.000 30.000\n42 112.000 140.000 30.000 30.000\n43 86.000 359.000 30.000 30.000\n44 412.000 339.000 30.000 30.000\n45 775.000 294.000 30.000 30.000\n46 50.000 412.000 30.000 30.000\n47 477.000 321.000 30.000 30.000\n48 681.000 166.000 30.000 30.000\n49 118.000 657.000 30.000 30.000\n50 64.000 498.000 30.000 30.000\n51 590.000 220.000 30.000 30.000\n52 529.000 308.000 30.000 30.000\n53 551.000 324.000 30.000 30.000\n54 135.000 730.000 30.000 30.000\n55 422.000 649.000 30.000 30.000\n56 662.000 471.000 30.000 30.000\n57 606.000 81.000 30.000 30.000\n58 733.000 153.000 30.000 30.000\n59 357.000 419.000 30.000 30.000\n60 526.000 190.000 30.000 30.000\n61 286.000 660.000 30.000 30.000\n62 655.000 324.000 30.000 30.000\n63 356.000 252.000 30.000 30.000\n64 327.000 439.000 30.000 30.000\n65 365.000 302.000 30.000 30.000\n66 236.000 680.000 30.000 30.000\n67 549.000 641.000 30.000 30.000\n68 762.000 429.000 30.000 30.000\n69 299.000 534.000 30.000 30.000\n70 127.000 281.000 30.000 30.000\n71 18.000 219.000 30.000 30.000\n72 334.000 228.000 30.000 30.000\n73 776.000 177.000 30.000 30.000\n74 692.000 761.000 30.000 30.000\n75 323.000 28.000 30.000 30.000\n76 11.000 259.000 30.000 30.000\n77 267.000 97.000 30.000 30.000\n78 526.000 149.000 30.000 30.000\n79 337.000 516.000 30.000 30.000\n#\n40 10\n22 11\n38 0\n52 35\n18 9\n76 58\n30 4\n48 3\n70 54\n22 16\n33 2\n64 5\n41 37\n43 8\n75 12\n61 46\n37 34\n71 23\n13 10\n59 35\n5 0\n36 19\n12 0\n45 10\n7 5\n2 1\n14 6\n6 2\n34 21\n8 2\n42 40\n27 18\n67 16\n32 20\n28 4\n58 4\n47 16\n68 31\n55 53\n20 16\n72 40\n16 13\n15 9\n24 3\n74 17\n57 14\n31 17\n63 39\n78 8\n3 1\n35 26\n17 2\n21 6\n23 2\n4 0\n1 0\n60 16\n51 38\n26 10\n9 5\n62 31\n65 52\n77 54\n69 53\n54 16\n73 8\n29 5\n44 16\n39 7\n46 22\n19 7\n50 20\n66 21\n79 23\n10 2\n11 0\n53 47\n56 4\n25 2\n49 0\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v80e88.gml",
    "content": "graph\n[\n    node\n    [\n        id    0\n        label    \"\"\n        graphics\n        [\n            x    629.01\n            y    297.40\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    1\n        label    \"\"\n        graphics\n        [\n            x    290.97\n            y    634.67\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    2\n        label    \"\"\n        graphics\n        [\n            x    322.64\n            y    294.75\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    3\n        label    \"\"\n        graphics\n        [\n            x    721.61\n            y    793.00\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    4\n        label    \"\"\n        graphics\n        [\n            x    722.18\n            y    330.76\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    5\n        label    \"\"\n        graphics\n        [\n            x    761.79\n            y    747.61\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    6\n        label    \"\"\n        graphics\n        [\n            x    272.90\n            y    179.72\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    7\n        label    \"\"\n        graphics\n        [\n            x    375.33\n            y    160.06\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    8\n        label    \"\"\n        graphics\n        [\n            x    742.63\n            y    752.92\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    9\n        label    \"\"\n        graphics\n        [\n            x    236.85\n            y    523.16\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    10\n        label    \"\"\n        graphics\n        [\n            x    411.25\n            y    316.73\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    11\n        label    \"\"\n        graphics\n        [\n            x    189.37\n            y    98.08\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    12\n        label    \"\"\n        graphics\n        [\n            x    330.47\n            y    268.99\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    13\n        label    \"\"\n        graphics\n        [\n            x    361.39\n            y    523.37\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    14\n        label    \"\"\n        graphics\n        [\n            x    366.90\n            y    682.93\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    15\n        label    \"\"\n        graphics\n        [\n            x    443.72\n            y    294.56\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    16\n        label    \"\"\n        graphics\n        [\n            x    525.06\n            y    54.84\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    17\n        label    \"\"\n        graphics\n        [\n            x    154.00\n            y    261.84\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    18\n        label    \"\"\n        graphics\n        [\n            x    34.10\n            y    498.94\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    19\n        label    \"\"\n        graphics\n        [\n            x    372.78\n            y    555.63\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    20\n        label    \"\"\n        graphics\n        [\n            x    751.44\n            y    379.69\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    21\n        label    \"\"\n        graphics\n        [\n            x    786.18\n            y    196.49\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    22\n        label    \"\"\n        graphics\n        [\n            x    34.25\n            y    803.77\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    23\n        label    \"\"\n        graphics\n        [\n            x    447.82\n            y    179.63\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    24\n        label    \"\"\n        graphics\n        [\n            x    307.47\n            y    353.89\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    25\n        label    \"\"\n        graphics\n        [\n            x    137.19\n            y    749.81\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    26\n        label    \"\"\n        graphics\n        [\n            x    300.73\n            y    104.73\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    27\n        label    \"\"\n        graphics\n        [\n            x    594.10\n            y    28.56\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    28\n        label    \"\"\n        graphics\n        [\n            x    192.53\n            y    101.53\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    29\n        label    \"\"\n        graphics\n        [\n            x    451.04\n            y    58.49\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    30\n        label    \"\"\n        graphics\n        [\n            x    542.11\n            y    792.04\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    31\n        label    \"\"\n        graphics\n        [\n            x    309.52\n            y    210.96\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    32\n        label    \"\"\n        graphics\n        [\n            x    543.18\n            y    74.90\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    33\n        label    \"\"\n        graphics\n        [\n            x    533.47\n            y    528.26\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    34\n        label    \"\"\n        graphics\n        [\n            x    772.23\n            y    224.59\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    35\n        label    \"\"\n        graphics\n        [\n            x    618.49\n            y    474.31\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    36\n        label    \"\"\n        graphics\n        [\n            x    420.94\n            y    171.57\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    37\n        label    \"\"\n        graphics\n        [\n            x    780.01\n            y    742.75\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    38\n        label    \"\"\n        graphics\n        [\n            x    171.21\n            y    440.29\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    39\n        label    \"\"\n        graphics\n        [\n            x    583.81\n            y    764.48\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    40\n        label    \"\"\n        graphics\n        [\n            x    492.66\n            y    305.72\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    41\n        label    \"\"\n        graphics\n        [\n            x    131.91\n            y    315.00\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    42\n        label    \"\"\n        graphics\n        [\n            x    702.64\n            y    502.88\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    43\n        label    \"\"\n        graphics\n        [\n            x    450.79\n            y    438.41\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    44\n        label    \"\"\n        graphics\n        [\n            x    300.81\n            y    728.46\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    45\n        label    \"\"\n        graphics\n        [\n            x    779.13\n            y    600.83\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    46\n        label    \"\"\n        graphics\n        [\n            x    530.05\n            y    599.62\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    47\n        label    \"\"\n        graphics\n        [\n            x    639.14\n            y    99.33\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    48\n        label    \"\"\n        graphics\n        [\n            x    226.56\n            y    120.53\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    49\n        label    \"\"\n        graphics\n        [\n            x    349.37\n            y    756.76\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    50\n        label    \"\"\n        graphics\n        [\n            x    97.39\n            y    589.17\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    51\n        label    \"\"\n        graphics\n        [\n            x    488.90\n            y    800.27\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    52\n        label    \"\"\n        graphics\n        [\n            x    111.38\n            y    728.02\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    53\n        label    \"\"\n        graphics\n        [\n            x    757.08\n            y    190.95\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    54\n        label    \"\"\n        graphics\n        [\n            x    739.03\n            y    477.13\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    55\n        label    \"\"\n        graphics\n        [\n            x    23.97\n            y    747.90\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    56\n        label    \"\"\n        graphics\n        [\n            x    252.79\n            y    776.08\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    57\n        label    \"\"\n        graphics\n        [\n            x    429.88\n            y    621.78\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    58\n        label    \"\"\n        graphics\n        [\n            x    708.75\n            y    235.42\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    59\n        label    \"\"\n        graphics\n        [\n            x    248.35\n            y    114.42\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    60\n        label    \"\"\n        graphics\n        [\n            x    498.69\n            y    36.70\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    61\n        label    \"\"\n        graphics\n        [\n            x    331.25\n            y    229.31\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    62\n        label    \"\"\n        graphics\n        [\n            x    691.63\n            y    509.37\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    63\n        label    \"\"\n        graphics\n        [\n            x    452.22\n            y    347.03\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    64\n        label    \"\"\n        graphics\n        [\n            x    264.93\n            y    518.30\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    65\n        label    \"\"\n        graphics\n        [\n            x    294.59\n            y    60.08\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    66\n        label    \"\"\n        graphics\n        [\n            x    384.35\n            y    624.94\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    67\n        label    \"\"\n        graphics\n        [\n            x    326.01\n            y    277.60\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    68\n        label    \"\"\n        graphics\n        [\n            x    408.54\n            y    80.82\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    69\n        label    \"\"\n        graphics\n        [\n            x    789.85\n            y    472.02\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    70\n        label    \"\"\n        graphics\n        [\n            x    217.57\n            y    489.21\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    71\n        label    \"\"\n        graphics\n        [\n            x    387.14\n            y    752.77\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    72\n        label    \"\"\n        graphics\n        [\n            x    99.68\n            y    693.41\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    73\n        label    \"\"\n        graphics\n        [\n            x    276.34\n            y    678.21\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    74\n        label    \"\"\n        graphics\n        [\n            x    728.40\n            y    478.68\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    75\n        label    \"\"\n        graphics\n        [\n            x    485.92\n            y    383.43\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    76\n        label    \"\"\n        graphics\n        [\n            x    456.63\n            y    628.78\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    77\n        label    \"\"\n        graphics\n        [\n            x    369.22\n            y    232.77\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    78\n        label    \"\"\n        graphics\n        [\n            x    501.39\n            y    494.94\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    79\n        label    \"\"\n        graphics\n        [\n            x    507.91\n            y    327.41\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    edge\n    [\n        source    1\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    10\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    11\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    12\n        target    31\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    12\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    13\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    14\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    14\n        target    65\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    15\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    16\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    17\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    18\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    19\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    2\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    20\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    20\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    21\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    22\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    23\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    24\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    25\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    26\n        target    19\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    27\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    28\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    29\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    3\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    30\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    31\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    32\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    33\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    33\n        target    78\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    34\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    35\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    36\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    37\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    38\n        target    19\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    39\n        target    32\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    4\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    40\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    41\n        target    24\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    42\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    43\n        target    36\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    44\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    45\n        target    28\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    45\n        target    57\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    46\n        target    34\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    47\n        target    40\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    48\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    49\n        target    31\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    5\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    50\n        target    37\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    51\n        target    29\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    52\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    53\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    53\n        target    36\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    54\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    55\n        target    52\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    56\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    57\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    58\n        target    55\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    59\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    59\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    6\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    6\n        target    25\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    60\n        target    35\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    61\n        target    19\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    62\n        target    47\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    63\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    64\n        target    28\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    65\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    66\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    67\n        target    65\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    68\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    69\n        target    50\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    7\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    70\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    71\n        target    50\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    72\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    73\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    74\n        target    63\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    74\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    75\n        target    39\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    76\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    77\n        target    34\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    78\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    79\n        target    41\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    8\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    9\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n]\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v80e88.tglf",
    "content": "0 629.000 297.000 30.000 30.000\n1 290.000 634.000 30.000 30.000\n2 322.000 294.000 30.000 30.000\n3 721.000 793.000 30.000 30.000\n4 722.000 330.000 30.000 30.000\n5 761.000 747.000 30.000 30.000\n6 272.000 179.000 30.000 30.000\n7 375.000 160.000 30.000 30.000\n8 742.000 752.000 30.000 30.000\n9 236.000 523.000 30.000 30.000\n10 411.000 316.000 30.000 30.000\n11 189.000 98.000 30.000 30.000\n12 330.000 268.000 30.000 30.000\n13 361.000 523.000 30.000 30.000\n14 366.000 682.000 30.000 30.000\n15 443.000 294.000 30.000 30.000\n16 525.000 54.000 30.000 30.000\n17 154.000 261.000 30.000 30.000\n18 34.000 498.000 30.000 30.000\n19 372.000 555.000 30.000 30.000\n20 751.000 379.000 30.000 30.000\n21 786.000 196.000 30.000 30.000\n22 34.000 803.000 30.000 30.000\n23 447.000 179.000 30.000 30.000\n24 307.000 353.000 30.000 30.000\n25 137.000 749.000 30.000 30.000\n26 300.000 104.000 30.000 30.000\n27 594.000 28.000 30.000 30.000\n28 192.000 101.000 30.000 30.000\n29 451.000 58.000 30.000 30.000\n30 542.000 792.000 30.000 30.000\n31 309.000 210.000 30.000 30.000\n32 543.000 74.000 30.000 30.000\n33 533.000 528.000 30.000 30.000\n34 772.000 224.000 30.000 30.000\n35 618.000 474.000 30.000 30.000\n36 420.000 171.000 30.000 30.000\n37 780.000 742.000 30.000 30.000\n38 171.000 440.000 30.000 30.000\n39 583.000 764.000 30.000 30.000\n40 492.000 305.000 30.000 30.000\n41 131.000 315.000 30.000 30.000\n42 702.000 502.000 30.000 30.000\n43 450.000 438.000 30.000 30.000\n44 300.000 728.000 30.000 30.000\n45 779.000 600.000 30.000 30.000\n46 530.000 599.000 30.000 30.000\n47 639.000 99.000 30.000 30.000\n48 226.000 120.000 30.000 30.000\n49 349.000 756.000 30.000 30.000\n50 97.000 589.000 30.000 30.000\n51 488.000 800.000 30.000 30.000\n52 111.000 728.000 30.000 30.000\n53 757.000 190.000 30.000 30.000\n54 739.000 477.000 30.000 30.000\n55 23.000 747.000 30.000 30.000\n56 252.000 776.000 30.000 30.000\n57 429.000 621.000 30.000 30.000\n58 708.000 235.000 30.000 30.000\n59 248.000 114.000 30.000 30.000\n60 498.000 36.000 30.000 30.000\n61 331.000 229.000 30.000 30.000\n62 691.000 509.000 30.000 30.000\n63 452.000 347.000 30.000 30.000\n64 264.000 518.000 30.000 30.000\n65 294.000 60.000 30.000 30.000\n66 384.000 624.000 30.000 30.000\n67 326.000 277.000 30.000 30.000\n68 408.000 80.000 30.000 30.000\n69 789.000 472.000 30.000 30.000\n70 217.000 489.000 30.000 30.000\n71 387.000 752.000 30.000 30.000\n72 99.000 693.000 30.000 30.000\n73 276.000 678.000 30.000 30.000\n74 728.000 478.000 30.000 30.000\n75 485.000 383.000 30.000 30.000\n76 456.000 628.000 30.000 30.000\n77 369.000 232.000 30.000 30.000\n78 501.000 494.000 30.000 30.000\n79 507.000 327.000 30.000 30.000\n#\n37 17\n69 50\n4 3\n20 6\n53 36\n42 11\n33 15\n12 6\n9 3\n63 16\n22 14\n74 8\n30 17\n24 16\n47 40\n29 3\n41 24\n15 8\n1 0\n7 1\n2 0\n26 19\n35 3\n44 2\n3 1\n38 19\n10 0\n64 28\n72 1\n21 2\n51 29\n50 37\n57 16\n71 50\n39 32\n40 15\n74 63\n28 18\n45 28\n33 78\n52 12\n58 55\n61 19\n66 12\n5 1\n60 35\n27 5\n54 2\n6 1\n75 39\n14 65\n8 6\n17 8\n11 4\n67 65\n12 31\n79 41\n65 21\n48 14\n55 52\n20 14\n62 47\n56 16\n6 25\n46 34\n16 0\n70 6\n19 8\n59 6\n36 8\n77 34\n43 36\n76 13\n18 16\n31 2\n53 15\n32 0\n34 10\n13 2\n68 3\n14 5\n49 31\n59 13\n45 57\n23 15\n25 12\n73 18\n78 22\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v80e96.gml",
    "content": "graph\n[\n    node\n    [\n        id    0\n        label    \"\"\n        graphics\n        [\n            x    397.15\n            y    298.15\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    1\n        label    \"\"\n        graphics\n        [\n            x    456.04\n            y    469.23\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    2\n        label    \"\"\n        graphics\n        [\n            x    739.30\n            y    522.18\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    3\n        label    \"\"\n        graphics\n        [\n            x    8.97\n            y    64.37\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    4\n        label    \"\"\n        graphics\n        [\n            x    305.49\n            y    511.92\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    5\n        label    \"\"\n        graphics\n        [\n            x    541.46\n            y    80.55\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    6\n        label    \"\"\n        graphics\n        [\n            x    510.72\n            y    53.40\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    7\n        label    \"\"\n        graphics\n        [\n            x    799.66\n            y    95.85\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    8\n        label    \"\"\n        graphics\n        [\n            x    572.12\n            y    618.27\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    9\n        label    \"\"\n        graphics\n        [\n            x    752.86\n            y    782.24\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    10\n        label    \"\"\n        graphics\n        [\n            x    344.56\n            y    793.26\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    11\n        label    \"\"\n        graphics\n        [\n            x    227.07\n            y    647.42\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    12\n        label    \"\"\n        graphics\n        [\n            x    682.96\n            y    532.10\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    13\n        label    \"\"\n        graphics\n        [\n            x    284.78\n            y    390.56\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    14\n        label    \"\"\n        graphics\n        [\n            x    568.64\n            y    704.04\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    15\n        label    \"\"\n        graphics\n        [\n            x    437.27\n            y    422.58\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    16\n        label    \"\"\n        graphics\n        [\n            x    556.11\n            y    88.81\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    17\n        label    \"\"\n        graphics\n        [\n            x    314.35\n            y    533.62\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    18\n        label    \"\"\n        graphics\n        [\n            x    463.64\n            y    772.28\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    19\n        label    \"\"\n        graphics\n        [\n            x    509.30\n            y    498.93\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    20\n        label    \"\"\n        graphics\n        [\n            x    672.33\n            y    656.95\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    21\n        label    \"\"\n        graphics\n        [\n            x    393.93\n            y    179.48\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    22\n        label    \"\"\n        graphics\n        [\n            x    135.61\n            y    186.49\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    23\n        label    \"\"\n        graphics\n        [\n            x    315.40\n            y    205.99\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    24\n        label    \"\"\n        graphics\n        [\n            x    464.71\n            y    168.84\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    25\n        label    \"\"\n        graphics\n        [\n            x    239.21\n            y    66.53\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    26\n        label    \"\"\n        graphics\n        [\n            x    713.21\n            y    309.42\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    27\n        label    \"\"\n        graphics\n        [\n            x    313.48\n            y    352.27\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    28\n        label    \"\"\n        graphics\n        [\n            x    20.40\n            y    224.48\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    29\n        label    \"\"\n        graphics\n        [\n            x    66.13\n            y    539.41\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    30\n        label    \"\"\n        graphics\n        [\n            x    550.72\n            y    300.63\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    31\n        label    \"\"\n        graphics\n        [\n            x    714.61\n            y    195.76\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    32\n        label    \"\"\n        graphics\n        [\n            x    231.35\n            y    576.20\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    33\n        label    \"\"\n        graphics\n        [\n            x    783.63\n            y    481.46\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    34\n        label    \"\"\n        graphics\n        [\n            x    564.08\n            y    396.30\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    35\n        label    \"\"\n        graphics\n        [\n            x    252.76\n            y    139.93\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    36\n        label    \"\"\n        graphics\n        [\n            x    401.07\n            y    759.72\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    37\n        label    \"\"\n        graphics\n        [\n            x    755.31\n            y    583.99\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    38\n        label    \"\"\n        graphics\n        [\n            x    647.67\n            y    435.09\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    39\n        label    \"\"\n        graphics\n        [\n            x    120.98\n            y    63.17\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    40\n        label    \"\"\n        graphics\n        [\n            x    670.79\n            y    472.29\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    41\n        label    \"\"\n        graphics\n        [\n            x    278.33\n            y    168.65\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    42\n        label    \"\"\n        graphics\n        [\n            x    163.45\n            y    522.05\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    43\n        label    \"\"\n        graphics\n        [\n            x    560.54\n            y    619.18\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    44\n        label    \"\"\n        graphics\n        [\n            x    634.07\n            y    734.14\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    45\n        label    \"\"\n        graphics\n        [\n            x    469.55\n            y    786.56\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    46\n        label    \"\"\n        graphics\n        [\n            x    168.36\n            y    285.21\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    47\n        label    \"\"\n        graphics\n        [\n            x    308.52\n            y    154.59\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    48\n        label    \"\"\n        graphics\n        [\n            x    319.71\n            y    466.54\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    49\n        label    \"\"\n        graphics\n        [\n            x    444.74\n            y    582.55\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    50\n        label    \"\"\n        graphics\n        [\n            x    20.41\n            y    114.75\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    51\n        label    \"\"\n        graphics\n        [\n            x    118.73\n            y    738.04\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    52\n        label    \"\"\n        graphics\n        [\n            x    89.43\n            y    4.81\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    53\n        label    \"\"\n        graphics\n        [\n            x    223.39\n            y    305.44\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    54\n        label    \"\"\n        graphics\n        [\n            x    381.18\n            y    352.49\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    55\n        label    \"\"\n        graphics\n        [\n            x    300.20\n            y    775.57\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    56\n        label    \"\"\n        graphics\n        [\n            x    738.15\n            y    701.14\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    57\n        label    \"\"\n        graphics\n        [\n            x    700.37\n            y    297.79\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    58\n        label    \"\"\n        graphics\n        [\n            x    288.11\n            y    691.89\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    59\n        label    \"\"\n        graphics\n        [\n            x    73.74\n            y    477.31\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    60\n        label    \"\"\n        graphics\n        [\n            x    4.06\n            y    94.34\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    61\n        label    \"\"\n        graphics\n        [\n            x    56.51\n            y    709.59\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    62\n        label    \"\"\n        graphics\n        [\n            x    306.32\n            y    285.99\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    63\n        label    \"\"\n        graphics\n        [\n            x    720.85\n            y    722.92\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    64\n        label    \"\"\n        graphics\n        [\n            x    739.37\n            y    713.03\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    65\n        label    \"\"\n        graphics\n        [\n            x    732.13\n            y    729.75\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    66\n        label    \"\"\n        graphics\n        [\n            x    488.01\n            y    759.39\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    67\n        label    \"\"\n        graphics\n        [\n            x    417.04\n            y    589.71\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    68\n        label    \"\"\n        graphics\n        [\n            x    222.26\n            y    399.85\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    69\n        label    \"\"\n        graphics\n        [\n            x    597.18\n            y    38.62\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    70\n        label    \"\"\n        graphics\n        [\n            x    489.99\n            y    400.13\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    71\n        label    \"\"\n        graphics\n        [\n            x    409.90\n            y    214.74\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    72\n        label    \"\"\n        graphics\n        [\n            x    684.11\n            y    446.49\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    73\n        label    \"\"\n        graphics\n        [\n            x    716.65\n            y    797.35\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    74\n        label    \"\"\n        graphics\n        [\n            x    586.75\n            y    295.10\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    75\n        label    \"\"\n        graphics\n        [\n            x    3.26\n            y    432.75\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    76\n        label    \"\"\n        graphics\n        [\n            x    207.02\n            y    611.01\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    77\n        label    \"\"\n        graphics\n        [\n            x    108.79\n            y    190.32\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    78\n        label    \"\"\n        graphics\n        [\n            x    348.16\n            y    69.08\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    79\n        label    \"\"\n        graphics\n        [\n            x    309.09\n            y    717.28\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    edge\n    [\n        source    1\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    10\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    11\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    12\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    13\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    13\n        target    59\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    14\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    15\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    16\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    17\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    18\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    19\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    2\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    20\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    21\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    22\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    22\n        target    68\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    23\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    24\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    25\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    26\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    26\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    26\n        target    56\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    27\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    28\n        target    37\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    28\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    29\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    3\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    30\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    31\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    31\n        target    43\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    32\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    33\n        target    26\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    34\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    35\n        target    19\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    36\n        target    34\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    36\n        target    57\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    37\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    38\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    39\n        target    37\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    4\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    4\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    40\n        target    30\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    41\n        target    38\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    42\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    43\n        target    30\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    44\n        target    25\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    44\n        target    48\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    45\n        target    39\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    46\n        target    29\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    47\n        target    24\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    48\n        target    45\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    48\n        target    65\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    49\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    5\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    50\n        target    33\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    51\n        target    30\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    52\n        target    43\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    53\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    54\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    54\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    55\n        target    41\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    56\n        target    35\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    57\n        target    28\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    57\n        target    37\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    58\n        target    20\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    59\n        target    46\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    6\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    6\n        target    50\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    60\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    61\n        target    59\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    62\n        target    54\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    63\n        target    58\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    64\n        target    41\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    65\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    66\n        target    64\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    67\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    67\n        target    78\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    68\n        target    58\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    69\n        target    44\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    7\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    7\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    70\n        target    64\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    71\n        target    49\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    72\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    73\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    74\n        target    25\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    75\n        target    70\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    76\n        target    36\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    76\n        target    50\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    76\n        target    65\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    77\n        target    25\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    78\n        target    59\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    79\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    8\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    9\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n]\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v80e96.tglf",
    "content": "0 397.000 298.000 30.000 30.000\n1 456.000 469.000 30.000 30.000\n2 739.000 522.000 30.000 30.000\n3 8.000 64.000 30.000 30.000\n4 305.000 511.000 30.000 30.000\n5 541.000 80.000 30.000 30.000\n6 510.000 53.000 30.000 30.000\n7 799.000 95.000 30.000 30.000\n8 572.000 618.000 30.000 30.000\n9 752.000 782.000 30.000 30.000\n10 344.000 793.000 30.000 30.000\n11 227.000 647.000 30.000 30.000\n12 682.000 532.000 30.000 30.000\n13 284.000 390.000 30.000 30.000\n14 568.000 704.000 30.000 30.000\n15 437.000 422.000 30.000 30.000\n16 556.000 88.000 30.000 30.000\n17 314.000 533.000 30.000 30.000\n18 463.000 772.000 30.000 30.000\n19 509.000 498.000 30.000 30.000\n20 672.000 656.000 30.000 30.000\n21 393.000 179.000 30.000 30.000\n22 135.000 186.000 30.000 30.000\n23 315.000 205.000 30.000 30.000\n24 464.000 168.000 30.000 30.000\n25 239.000 66.000 30.000 30.000\n26 713.000 309.000 30.000 30.000\n27 313.000 352.000 30.000 30.000\n28 20.000 224.000 30.000 30.000\n29 66.000 539.000 30.000 30.000\n30 550.000 300.000 30.000 30.000\n31 714.000 195.000 30.000 30.000\n32 231.000 576.000 30.000 30.000\n33 783.000 481.000 30.000 30.000\n34 564.000 396.000 30.000 30.000\n35 252.000 139.000 30.000 30.000\n36 401.000 759.000 30.000 30.000\n37 755.000 583.000 30.000 30.000\n38 647.000 435.000 30.000 30.000\n39 120.000 63.000 30.000 30.000\n40 670.000 472.000 30.000 30.000\n41 278.000 168.000 30.000 30.000\n42 163.000 522.000 30.000 30.000\n43 560.000 619.000 30.000 30.000\n44 634.000 734.000 30.000 30.000\n45 469.000 786.000 30.000 30.000\n46 168.000 285.000 30.000 30.000\n47 308.000 154.000 30.000 30.000\n48 319.000 466.000 30.000 30.000\n49 444.000 582.000 30.000 30.000\n50 20.000 114.000 30.000 30.000\n51 118.000 738.000 30.000 30.000\n52 89.000 4.000 30.000 30.000\n53 223.000 305.000 30.000 30.000\n54 381.000 352.000 30.000 30.000\n55 300.000 775.000 30.000 30.000\n56 738.000 701.000 30.000 30.000\n57 700.000 297.000 30.000 30.000\n58 288.000 691.000 30.000 30.000\n59 73.000 477.000 30.000 30.000\n60 4.000 94.000 30.000 30.000\n61 56.000 709.000 30.000 30.000\n62 306.000 285.000 30.000 30.000\n63 720.000 722.000 30.000 30.000\n64 739.000 713.000 30.000 30.000\n65 732.000 729.000 30.000 30.000\n66 488.000 759.000 30.000 30.000\n67 417.000 589.000 30.000 30.000\n68 222.000 399.000 30.000 30.000\n69 597.000 38.000 30.000 30.000\n70 489.000 400.000 30.000 30.000\n71 409.000 214.000 30.000 30.000\n72 684.000 446.000 30.000 30.000\n73 716.000 797.000 30.000 30.000\n74 586.000 295.000 30.000 30.000\n75 3.000 432.000 30.000 30.000\n76 207.000 611.000 30.000 30.000\n77 108.000 190.000 30.000 30.000\n78 348.000 69.000 30.000 30.000\n79 309.000 717.000 30.000 30.000\n#\n76 36\n10 8\n18 3\n38 22\n4 12\n9 3\n48 65\n6 0\n72 7\n36 57\n13 12\n14 3\n12 10\n74 25\n8 6\n37 13\n26 56\n54 8\n26 4\n76 65\n24 22\n19 18\n1 0\n51 30\n22 68\n3 1\n63 58\n17 2\n48 45\n29 9\n13 59\n56 35\n71 49\n4 0\n44 25\n75 70\n26 0\n21 0\n55 41\n28 4\n23 12\n59 46\n78 59\n16 9\n53 8\n70 64\n7 3\n46 29\n47 24\n7 5\n57 28\n43 30\n28 37\n42 0\n25 2\n20 12\n54 14\n66 64\n11 10\n31 43\n64 41\n49 11\n15 7\n41 38\n68 58\n50 33\n57 37\n5 0\n76 50\n44 48\n32 11\n58 20\n61 59\n22 4\n65 10\n27 0\n67 5\n6 50\n73 1\n34 18\n30 12\n35 19\n31 21\n2 1\n67 78\n60 23\n79 23\n77 25\n62 54\n33 26\n52 43\n40 30\n39 37\n69 44\n45 39\n36 34\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v90e108.gml",
    "content": "graph\n[\n    node\n    [\n        id    0\n        label    \"\"\n        graphics\n        [\n            x    4.59\n            y    300.93\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    1\n        label    \"\"\n        graphics\n        [\n            x    700.28\n            y    759.25\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    2\n        label    \"\"\n        graphics\n        [\n            x    843.89\n            y    423.43\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    3\n        label    \"\"\n        graphics\n        [\n            x    631.91\n            y    716.95\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    4\n        label    \"\"\n        graphics\n        [\n            x    849.69\n            y    674.64\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    5\n        label    \"\"\n        graphics\n        [\n            x    266.03\n            y    446.04\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    6\n        label    \"\"\n        graphics\n        [\n            x    601.50\n            y    270.16\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    7\n        label    \"\"\n        graphics\n        [\n            x    810.42\n            y    704.96\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    8\n        label    \"\"\n        graphics\n        [\n            x    97.20\n            y    635.29\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    9\n        label    \"\"\n        graphics\n        [\n            x    227.22\n            y    400.31\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    10\n        label    \"\"\n        graphics\n        [\n            x    830.07\n            y    370.19\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    11\n        label    \"\"\n        graphics\n        [\n            x    257.44\n            y    761.10\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    12\n        label    \"\"\n        graphics\n        [\n            x    563.52\n            y    220.93\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    13\n        label    \"\"\n        graphics\n        [\n            x    298.29\n            y    616.52\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    14\n        label    \"\"\n        graphics\n        [\n            x    508.58\n            y    574.93\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    15\n        label    \"\"\n        graphics\n        [\n            x    630.64\n            y    29.97\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    16\n        label    \"\"\n        graphics\n        [\n            x    437.85\n            y    124.91\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    17\n        label    \"\"\n        graphics\n        [\n            x    90.18\n            y    576.46\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    18\n        label    \"\"\n        graphics\n        [\n            x    569.65\n            y    716.75\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    19\n        label    \"\"\n        graphics\n        [\n            x    735.08\n            y    823.97\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    20\n        label    \"\"\n        graphics\n        [\n            x    67.11\n            y    812.38\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    21\n        label    \"\"\n        graphics\n        [\n            x    479.62\n            y    514.22\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    22\n        label    \"\"\n        graphics\n        [\n            x    578.02\n            y    749.50\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    23\n        label    \"\"\n        graphics\n        [\n            x    699.19\n            y    335.67\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    24\n        label    \"\"\n        graphics\n        [\n            x    218.67\n            y    483.57\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    25\n        label    \"\"\n        graphics\n        [\n            x    110.50\n            y    532.48\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    26\n        label    \"\"\n        graphics\n        [\n            x    303.96\n            y    259.52\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    27\n        label    \"\"\n        graphics\n        [\n            x    11.97\n            y    698.01\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    28\n        label    \"\"\n        graphics\n        [\n            x    430.92\n            y    563.35\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    29\n        label    \"\"\n        graphics\n        [\n            x    92.34\n            y    154.09\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    30\n        label    \"\"\n        graphics\n        [\n            x    795.39\n            y    367.43\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    31\n        label    \"\"\n        graphics\n        [\n            x    770.26\n            y    603.21\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    32\n        label    \"\"\n        graphics\n        [\n            x    797.73\n            y    395.41\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    33\n        label    \"\"\n        graphics\n        [\n            x    580.80\n            y    505.45\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    34\n        label    \"\"\n        graphics\n        [\n            x    281.16\n            y    461.59\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    35\n        label    \"\"\n        graphics\n        [\n            x    826.40\n            y    315.59\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    36\n        label    \"\"\n        graphics\n        [\n            x    227.68\n            y    552.45\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    37\n        label    \"\"\n        graphics\n        [\n            x    30.95\n            y    665.07\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    38\n        label    \"\"\n        graphics\n        [\n            x    634.33\n            y    592.18\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    39\n        label    \"\"\n        graphics\n        [\n            x    710.30\n            y    14.87\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    40\n        label    \"\"\n        graphics\n        [\n            x    236.56\n            y    16.37\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    41\n        label    \"\"\n        graphics\n        [\n            x    249.52\n            y    709.99\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    42\n        label    \"\"\n        graphics\n        [\n            x    834.09\n            y    445.94\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    43\n        label    \"\"\n        graphics\n        [\n            x    546.44\n            y    681.86\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    44\n        label    \"\"\n        graphics\n        [\n            x    587.69\n            y    254.76\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    45\n        label    \"\"\n        graphics\n        [\n            x    343.81\n            y    201.29\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    46\n        label    \"\"\n        graphics\n        [\n            x    40.77\n            y    359.85\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    47\n        label    \"\"\n        graphics\n        [\n            x    600.13\n            y    766.12\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    48\n        label    \"\"\n        graphics\n        [\n            x    456.77\n            y    406.16\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    49\n        label    \"\"\n        graphics\n        [\n            x    410.96\n            y    236.85\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    50\n        label    \"\"\n        graphics\n        [\n            x    150.02\n            y    307.92\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    51\n        label    \"\"\n        graphics\n        [\n            x    693.07\n            y    62.23\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    52\n        label    \"\"\n        graphics\n        [\n            x    837.31\n            y    331.38\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    53\n        label    \"\"\n        graphics\n        [\n            x    350.42\n            y    161.16\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    54\n        label    \"\"\n        graphics\n        [\n            x    119.00\n            y    777.06\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    55\n        label    \"\"\n        graphics\n        [\n            x    685.45\n            y    36.80\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    56\n        label    \"\"\n        graphics\n        [\n            x    751.84\n            y    222.49\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    57\n        label    \"\"\n        graphics\n        [\n            x    473.26\n            y    389.09\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    58\n        label    \"\"\n        graphics\n        [\n            x    62.50\n            y    42.57\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    59\n        label    \"\"\n        graphics\n        [\n            x    550.76\n            y    486.21\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    60\n        label    \"\"\n        graphics\n        [\n            x    729.56\n            y    508.06\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    61\n        label    \"\"\n        graphics\n        [\n            x    581.36\n            y    138.13\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    62\n        label    \"\"\n        graphics\n        [\n            x    168.06\n            y    450.05\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    63\n        label    \"\"\n        graphics\n        [\n            x    509.93\n            y    521.51\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    64\n        label    \"\"\n        graphics\n        [\n            x    754.85\n            y    747.20\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    65\n        label    \"\"\n        graphics\n        [\n            x    378.14\n            y    459.54\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    66\n        label    \"\"\n        graphics\n        [\n            x    13.29\n            y    570.21\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    67\n        label    \"\"\n        graphics\n        [\n            x    300.16\n            y    720.49\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    68\n        label    \"\"\n        graphics\n        [\n            x    566.31\n            y    725.17\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    69\n        label    \"\"\n        graphics\n        [\n            x    482.29\n            y    116.89\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    70\n        label    \"\"\n        graphics\n        [\n            x    47.09\n            y    37.84\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    71\n        label    \"\"\n        graphics\n        [\n            x    449.57\n            y    400.94\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    72\n        label    \"\"\n        graphics\n        [\n            x    645.19\n            y    684.40\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    73\n        label    \"\"\n        graphics\n        [\n            x    688.08\n            y    851.80\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    74\n        label    \"\"\n        graphics\n        [\n            x    63.70\n            y    493.14\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    75\n        label    \"\"\n        graphics\n        [\n            x    584.71\n            y    376.41\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    76\n        label    \"\"\n        graphics\n        [\n            x    88.26\n            y    58.31\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    77\n        label    \"\"\n        graphics\n        [\n            x    342.56\n            y    849.74\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    78\n        label    \"\"\n        graphics\n        [\n            x    628.35\n            y    41.89\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    79\n        label    \"\"\n        graphics\n        [\n            x    2.53\n            y    169.12\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    80\n        label    \"\"\n        graphics\n        [\n            x    97.64\n            y    90.05\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    81\n        label    \"\"\n        graphics\n        [\n            x    819.95\n            y    818.63\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    82\n        label    \"\"\n        graphics\n        [\n            x    333.84\n            y    603.73\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    83\n        label    \"\"\n        graphics\n        [\n            x    564.78\n            y    26.02\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    84\n        label    \"\"\n        graphics\n        [\n            x    195.53\n            y    69.14\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    85\n        label    \"\"\n        graphics\n        [\n            x    41.42\n            y    198.46\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    86\n        label    \"\"\n        graphics\n        [\n            x    436.03\n            y    498.55\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    87\n        label    \"\"\n        graphics\n        [\n            x    393.47\n            y    672.53\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    88\n        label    \"\"\n        graphics\n        [\n            x    466.33\n            y    729.74\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    89\n        label    \"\"\n        graphics\n        [\n            x    355.48\n            y    574.84\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    edge\n    [\n        source    1\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    10\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    11\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    12\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    13\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    13\n        target    78\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    14\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    15\n        target    38\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    15\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    16\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    17\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    17\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    18\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    19\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    2\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    20\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    20\n        target    39\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    21\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    22\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    23\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    24\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    25\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    26\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    27\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    28\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    28\n        target    48\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    29\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    3\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    30\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    31\n        target    65\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    31\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    32\n        target    28\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    32\n        target    71\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    33\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    34\n        target    32\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    35\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    36\n        target    28\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    37\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    38\n        target    34\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    39\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    4\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    40\n        target    34\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    41\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    42\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    43\n        target    28\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    43\n        target    49\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    44\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    45\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    46\n        target    39\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    47\n        target    20\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    48\n        target    46\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    49\n        target    40\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    5\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    50\n        target    39\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    51\n        target    38\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    52\n        target    37\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    53\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    54\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    55\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    56\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    57\n        target    38\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    58\n        target    42\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    59\n        target    31\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    6\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    6\n        target    45\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    60\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    61\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    62\n        target    39\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    63\n        target    47\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    64\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    65\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    66\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    66\n        target    54\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    67\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    67\n        target    89\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    68\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    69\n        target    52\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    7\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    70\n        target    65\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    71\n        target    43\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    71\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    72\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    73\n        target    71\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    74\n        target    57\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    75\n        target    32\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    76\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    77\n        target    54\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    77\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    78\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    78\n        target    29\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    79\n        target    33\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    8\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    80\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    81\n        target    20\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    81\n        target    44\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    81\n        target    87\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    82\n        target    25\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    83\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    83\n        target    75\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    84\n        target    54\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    85\n        target    35\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    86\n        target    46\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    86\n        target    47\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    86\n        target    59\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    87\n        target    56\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    88\n        target    86\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    89\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    9\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n]\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v90e108.tglf",
    "content": "0 4.000 300.000 30.000 30.000\n1 700.000 759.000 30.000 30.000\n2 843.000 423.000 30.000 30.000\n3 631.000 716.000 30.000 30.000\n4 849.000 674.000 30.000 30.000\n5 266.000 446.000 30.000 30.000\n6 601.000 270.000 30.000 30.000\n7 810.000 704.000 30.000 30.000\n8 97.000 635.000 30.000 30.000\n9 227.000 400.000 30.000 30.000\n10 830.000 370.000 30.000 30.000\n11 257.000 761.000 30.000 30.000\n12 563.000 220.000 30.000 30.000\n13 298.000 616.000 30.000 30.000\n14 508.000 574.000 30.000 30.000\n15 630.000 29.000 30.000 30.000\n16 437.000 124.000 30.000 30.000\n17 90.000 576.000 30.000 30.000\n18 569.000 716.000 30.000 30.000\n19 735.000 823.000 30.000 30.000\n20 67.000 812.000 30.000 30.000\n21 479.000 514.000 30.000 30.000\n22 578.000 749.000 30.000 30.000\n23 699.000 335.000 30.000 30.000\n24 218.000 483.000 30.000 30.000\n25 110.000 532.000 30.000 30.000\n26 303.000 259.000 30.000 30.000\n27 11.000 698.000 30.000 30.000\n28 430.000 563.000 30.000 30.000\n29 92.000 154.000 30.000 30.000\n30 795.000 367.000 30.000 30.000\n31 770.000 603.000 30.000 30.000\n32 797.000 395.000 30.000 30.000\n33 580.000 505.000 30.000 30.000\n34 281.000 461.000 30.000 30.000\n35 826.000 315.000 30.000 30.000\n36 227.000 552.000 30.000 30.000\n37 30.000 665.000 30.000 30.000\n38 634.000 592.000 30.000 30.000\n39 710.000 14.000 30.000 30.000\n40 236.000 16.000 30.000 30.000\n41 249.000 709.000 30.000 30.000\n42 834.000 445.000 30.000 30.000\n43 546.000 681.000 30.000 30.000\n44 587.000 254.000 30.000 30.000\n45 343.000 201.000 30.000 30.000\n46 40.000 359.000 30.000 30.000\n47 600.000 766.000 30.000 30.000\n48 456.000 406.000 30.000 30.000\n49 410.000 236.000 30.000 30.000\n50 150.000 307.000 30.000 30.000\n51 693.000 62.000 30.000 30.000\n52 837.000 331.000 30.000 30.000\n53 350.000 161.000 30.000 30.000\n54 119.000 777.000 30.000 30.000\n55 685.000 36.000 30.000 30.000\n56 751.000 222.000 30.000 30.000\n57 473.000 389.000 30.000 30.000\n58 62.000 42.000 30.000 30.000\n59 550.000 486.000 30.000 30.000\n60 729.000 508.000 30.000 30.000\n61 581.000 138.000 30.000 30.000\n62 168.000 450.000 30.000 30.000\n63 509.000 521.000 30.000 30.000\n64 754.000 747.000 30.000 30.000\n65 378.000 459.000 30.000 30.000\n66 13.000 570.000 30.000 30.000\n67 300.000 720.000 30.000 30.000\n68 566.000 725.000 30.000 30.000\n69 482.000 116.000 30.000 30.000\n70 47.000 37.000 30.000 30.000\n71 449.000 400.000 30.000 30.000\n72 645.000 684.000 30.000 30.000\n73 688.000 851.000 30.000 30.000\n74 63.000 493.000 30.000 30.000\n75 584.000 376.000 30.000 30.000\n76 88.000 58.000 30.000 30.000\n77 342.000 849.000 30.000 30.000\n78 628.000 41.000 30.000 30.000\n79 2.000 169.000 30.000 30.000\n80 97.000 90.000 30.000 30.000\n81 819.000 818.000 30.000 30.000\n82 333.000 603.000 30.000 30.000\n83 564.000 26.000 30.000 30.000\n84 195.000 69.000 30.000 30.000\n85 41.000 198.000 30.000 30.000\n86 436.000 498.000 30.000 30.000\n87 393.000 672.000 30.000 30.000\n88 466.000 729.000 30.000 30.000\n89 355.000 574.000 30.000 30.000\n#\n26 5\n82 25\n62 39\n28 48\n7 2\n23 15\n20 13\n51 38\n54 8\n30 12\n11 2\n78 1\n67 89\n86 46\n59 31\n71 43\n12 1\n20 39\n63 47\n50 39\n46 39\n77 54\n66 3\n34 32\n80 1\n1 0\n71 8\n86 59\n32 28\n9 2\n89 6\n2 0\n74 57\n58 42\n29 6\n17 4\n21 2\n10 0\n22 4\n4 1\n69 52\n83 12\n73 71\n81 20\n86 47\n41 16\n45 4\n44 2\n68 5\n19 17\n42 17\n37 6\n38 34\n75 32\n72 9\n61 10\n78 29\n31 9\n40 34\n55 1\n47 20\n31 65\n18 4\n79 33\n66 54\n5 4\n8 2\n13 1\n87 56\n67 16\n35 22\n81 44\n56 9\n43 49\n39 18\n65 4\n84 54\n43 28\n3 0\n28 11\n33 21\n52 37\n6 4\n53 10\n27 18\n77 9\n57 38\n15 8\n76 4\n14 13\n6 45\n48 46\n13 78\n70 65\n64 16\n49 40\n88 86\n60 6\n16 8\n15 38\n32 71\n85 35\n36 28\n17 10\n81 87\n83 75\n24 8\n25 6\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v90e117.gml",
    "content": "graph\n[\n    node\n    [\n        id    0\n        label    \"\"\n        graphics\n        [\n            x    479.78\n            y    42.26\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    1\n        label    \"\"\n        graphics\n        [\n            x    270.29\n            y    242.21\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    2\n        label    \"\"\n        graphics\n        [\n            x    77.52\n            y    327.09\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    3\n        label    \"\"\n        graphics\n        [\n            x    722.78\n            y    516.34\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    4\n        label    \"\"\n        graphics\n        [\n            x    594.13\n            y    6.51\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    5\n        label    \"\"\n        graphics\n        [\n            x    447.87\n            y    367.52\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    6\n        label    \"\"\n        graphics\n        [\n            x    784.71\n            y    328.39\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    7\n        label    \"\"\n        graphics\n        [\n            x    435.94\n            y    126.88\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    8\n        label    \"\"\n        graphics\n        [\n            x    219.48\n            y    848.04\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    9\n        label    \"\"\n        graphics\n        [\n            x    83.99\n            y    593.61\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    10\n        label    \"\"\n        graphics\n        [\n            x    849.50\n            y    182.80\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    11\n        label    \"\"\n        graphics\n        [\n            x    411.01\n            y    240.47\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    12\n        label    \"\"\n        graphics\n        [\n            x    494.91\n            y    531.46\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    13\n        label    \"\"\n        graphics\n        [\n            x    740.67\n            y    126.59\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    14\n        label    \"\"\n        graphics\n        [\n            x    477.58\n            y    201.77\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    15\n        label    \"\"\n        graphics\n        [\n            x    663.37\n            y    683.14\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    16\n        label    \"\"\n        graphics\n        [\n            x    654.15\n            y    344.71\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    17\n        label    \"\"\n        graphics\n        [\n            x    785.50\n            y    297.28\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    18\n        label    \"\"\n        graphics\n        [\n            x    632.41\n            y    279.13\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    19\n        label    \"\"\n        graphics\n        [\n            x    445.16\n            y    299.69\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    20\n        label    \"\"\n        graphics\n        [\n            x    647.49\n            y    506.95\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    21\n        label    \"\"\n        graphics\n        [\n            x    99.76\n            y    274.48\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    22\n        label    \"\"\n        graphics\n        [\n            x    161.58\n            y    731.15\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    23\n        label    \"\"\n        graphics\n        [\n            x    688.39\n            y    285.14\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    24\n        label    \"\"\n        graphics\n        [\n            x    848.67\n            y    72.11\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    25\n        label    \"\"\n        graphics\n        [\n            x    474.17\n            y    261.97\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    26\n        label    \"\"\n        graphics\n        [\n            x    36.58\n            y    673.56\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    27\n        label    \"\"\n        graphics\n        [\n            x    303.83\n            y    207.56\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    28\n        label    \"\"\n        graphics\n        [\n            x    830.68\n            y    688.70\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    29\n        label    \"\"\n        graphics\n        [\n            x    640.02\n            y    766.34\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    30\n        label    \"\"\n        graphics\n        [\n            x    630.09\n            y    619.78\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    31\n        label    \"\"\n        graphics\n        [\n            x    589.55\n            y    261.31\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    32\n        label    \"\"\n        graphics\n        [\n            x    198.83\n            y    628.66\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    33\n        label    \"\"\n        graphics\n        [\n            x    25.96\n            y    745.80\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    34\n        label    \"\"\n        graphics\n        [\n            x    139.67\n            y    155.05\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    35\n        label    \"\"\n        graphics\n        [\n            x    550.06\n            y    637.62\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    36\n        label    \"\"\n        graphics\n        [\n            x    671.16\n            y    41.11\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    37\n        label    \"\"\n        graphics\n        [\n            x    60.48\n            y    721.47\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    38\n        label    \"\"\n        graphics\n        [\n            x    13.61\n            y    389.35\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    39\n        label    \"\"\n        graphics\n        [\n            x    426.39\n            y    306.79\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    40\n        label    \"\"\n        graphics\n        [\n            x    246.22\n            y    749.48\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    41\n        label    \"\"\n        graphics\n        [\n            x    799.94\n            y    2.38\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    42\n        label    \"\"\n        graphics\n        [\n            x    531.19\n            y    433.73\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    43\n        label    \"\"\n        graphics\n        [\n            x    828.07\n            y    714.45\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    44\n        label    \"\"\n        graphics\n        [\n            x    17.31\n            y    119.09\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    45\n        label    \"\"\n        graphics\n        [\n            x    212.09\n            y    262.64\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    46\n        label    \"\"\n        graphics\n        [\n            x    164.48\n            y    723.98\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    47\n        label    \"\"\n        graphics\n        [\n            x    0.53\n            y    618.68\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    48\n        label    \"\"\n        graphics\n        [\n            x    699.52\n            y    842.39\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    49\n        label    \"\"\n        graphics\n        [\n            x    704.08\n            y    274.35\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    50\n        label    \"\"\n        graphics\n        [\n            x    21.55\n            y    412.57\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    51\n        label    \"\"\n        graphics\n        [\n            x    76.45\n            y    818.51\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    52\n        label    \"\"\n        graphics\n        [\n            x    82.24\n            y    607.43\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    53\n        label    \"\"\n        graphics\n        [\n            x    278.46\n            y    571.90\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    54\n        label    \"\"\n        graphics\n        [\n            x    421.14\n            y    207.60\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    55\n        label    \"\"\n        graphics\n        [\n            x    639.36\n            y    689.83\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    56\n        label    \"\"\n        graphics\n        [\n            x    835.87\n            y    0.52\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    57\n        label    \"\"\n        graphics\n        [\n            x    180.42\n            y    832.95\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    58\n        label    \"\"\n        graphics\n        [\n            x    106.56\n            y    127.98\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    59\n        label    \"\"\n        graphics\n        [\n            x    196.32\n            y    748.13\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    60\n        label    \"\"\n        graphics\n        [\n            x    108.91\n            y    436.90\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    61\n        label    \"\"\n        graphics\n        [\n            x    38.94\n            y    71.92\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    62\n        label    \"\"\n        graphics\n        [\n            x    794.96\n            y    301.96\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    63\n        label    \"\"\n        graphics\n        [\n            x    824.60\n            y    739.57\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    64\n        label    \"\"\n        graphics\n        [\n            x    792.93\n            y    746.90\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    65\n        label    \"\"\n        graphics\n        [\n            x    232.69\n            y    53.69\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    66\n        label    \"\"\n        graphics\n        [\n            x    60.13\n            y    212.62\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    67\n        label    \"\"\n        graphics\n        [\n            x    138.64\n            y    743.76\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    68\n        label    \"\"\n        graphics\n        [\n            x    485.34\n            y    142.74\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    69\n        label    \"\"\n        graphics\n        [\n            x    377.86\n            y    294.91\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    70\n        label    \"\"\n        graphics\n        [\n            x    70.95\n            y    808.47\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    71\n        label    \"\"\n        graphics\n        [\n            x    302.84\n            y    424.07\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    72\n        label    \"\"\n        graphics\n        [\n            x    146.46\n            y    709.85\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    73\n        label    \"\"\n        graphics\n        [\n            x    799.74\n            y    689.36\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    74\n        label    \"\"\n        graphics\n        [\n            x    384.11\n            y    110.59\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    75\n        label    \"\"\n        graphics\n        [\n            x    401.23\n            y    768.96\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    76\n        label    \"\"\n        graphics\n        [\n            x    837.50\n            y    223.24\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    77\n        label    \"\"\n        graphics\n        [\n            x    364.96\n            y    287.51\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    78\n        label    \"\"\n        graphics\n        [\n            x    636.08\n            y    561.41\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    79\n        label    \"\"\n        graphics\n        [\n            x    540.38\n            y    719.83\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    80\n        label    \"\"\n        graphics\n        [\n            x    52.03\n            y    73.02\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    81\n        label    \"\"\n        graphics\n        [\n            x    579.80\n            y    40.60\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    82\n        label    \"\"\n        graphics\n        [\n            x    624.61\n            y    144.38\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    83\n        label    \"\"\n        graphics\n        [\n            x    822.12\n            y    479.92\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    84\n        label    \"\"\n        graphics\n        [\n            x    316.38\n            y    524.33\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    85\n        label    \"\"\n        graphics\n        [\n            x    56.74\n            y    147.98\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    86\n        label    \"\"\n        graphics\n        [\n            x    849.50\n            y    360.40\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    87\n        label    \"\"\n        graphics\n        [\n            x    471.50\n            y    129.67\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    88\n        label    \"\"\n        graphics\n        [\n            x    261.41\n            y    594.30\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    89\n        label    \"\"\n        graphics\n        [\n            x    247.45\n            y    193.57\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    edge\n    [\n        source    1\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    10\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    11\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    11\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    12\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    13\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    14\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    15\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    16\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    17\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    18\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    19\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    2\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    20\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    21\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    21\n        target    88\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    22\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    22\n        target    73\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    23\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    23\n        target    40\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    24\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    25\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    25\n        target    41\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    26\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    26\n        target    46\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    26\n        target    54\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    27\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    28\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    29\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    3\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    30\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    30\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    31\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    32\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    32\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    33\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    34\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    35\n        target    24\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    36\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    36\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    36\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    37\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    38\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    38\n        target    89\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    39\n        target    20\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    4\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    40\n        target    36\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    41\n        target    33\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    42\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    42\n        target    60\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    43\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    44\n        target    43\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    45\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    46\n        target    29\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    47\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    48\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    48\n        target    81\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    49\n        target    37\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    5\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    5\n        target    48\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    50\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    50\n        target    41\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    50\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    51\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    52\n        target    30\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    53\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    53\n        target    37\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    54\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    55\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    56\n        target    42\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    57\n        target    55\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    58\n        target    20\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    58\n        target    31\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    59\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    6\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    60\n        target    48\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    61\n        target    28\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    61\n        target    36\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    62\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    63\n        target    58\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    64\n        target    38\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    65\n        target    63\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    66\n        target    49\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    67\n        target    49\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    68\n        target    32\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    68\n        target    73\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    69\n        target    56\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    7\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    7\n        target    61\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    70\n        target    33\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    70\n        target    66\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    71\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    72\n        target    36\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    73\n        target    72\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    74\n        target    26\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    75\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    76\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    77\n        target    59\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    78\n        target    35\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    79\n        target    36\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    8\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    80\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    80\n        target    76\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    81\n        target    77\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    82\n        target    80\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    83\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    83\n        target    40\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    84\n        target    67\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    85\n        target    51\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    86\n        target    48\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    87\n        target    61\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    87\n        target    73\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    88\n        target    45\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    89\n        target    79\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    9\n        target    26\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    9\n        target    28\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    9\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n]\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v90e117.tglf",
    "content": "0 479.000 42.000 30.000 30.000\n1 270.000 242.000 30.000 30.000\n2 77.000 327.000 30.000 30.000\n3 722.000 516.000 30.000 30.000\n4 594.000 6.000 30.000 30.000\n5 447.000 367.000 30.000 30.000\n6 784.000 328.000 30.000 30.000\n7 435.000 126.000 30.000 30.000\n8 219.000 848.000 30.000 30.000\n9 83.000 593.000 30.000 30.000\n10 849.000 182.000 30.000 30.000\n11 411.000 240.000 30.000 30.000\n12 494.000 531.000 30.000 30.000\n13 740.000 126.000 30.000 30.000\n14 477.000 201.000 30.000 30.000\n15 663.000 683.000 30.000 30.000\n16 654.000 344.000 30.000 30.000\n17 785.000 297.000 30.000 30.000\n18 632.000 279.000 30.000 30.000\n19 445.000 299.000 30.000 30.000\n20 647.000 506.000 30.000 30.000\n21 99.000 274.000 30.000 30.000\n22 161.000 731.000 30.000 30.000\n23 688.000 285.000 30.000 30.000\n24 848.000 72.000 30.000 30.000\n25 474.000 261.000 30.000 30.000\n26 36.000 673.000 30.000 30.000\n27 303.000 207.000 30.000 30.000\n28 830.000 688.000 30.000 30.000\n29 640.000 766.000 30.000 30.000\n30 630.000 619.000 30.000 30.000\n31 589.000 261.000 30.000 30.000\n32 198.000 628.000 30.000 30.000\n33 25.000 745.000 30.000 30.000\n34 139.000 155.000 30.000 30.000\n35 550.000 637.000 30.000 30.000\n36 671.000 41.000 30.000 30.000\n37 60.000 721.000 30.000 30.000\n38 13.000 389.000 30.000 30.000\n39 426.000 306.000 30.000 30.000\n40 246.000 749.000 30.000 30.000\n41 799.000 2.000 30.000 30.000\n42 531.000 433.000 30.000 30.000\n43 828.000 714.000 30.000 30.000\n44 17.000 119.000 30.000 30.000\n45 212.000 262.000 30.000 30.000\n46 164.000 723.000 30.000 30.000\n47 0.000 618.000 30.000 30.000\n48 699.000 842.000 30.000 30.000\n49 704.000 274.000 30.000 30.000\n50 21.000 412.000 30.000 30.000\n51 76.000 818.000 30.000 30.000\n52 82.000 607.000 30.000 30.000\n53 278.000 571.000 30.000 30.000\n54 421.000 207.000 30.000 30.000\n55 639.000 689.000 30.000 30.000\n56 835.000 0.000 30.000 30.000\n57 180.000 832.000 30.000 30.000\n58 106.000 127.000 30.000 30.000\n59 196.000 748.000 30.000 30.000\n60 108.000 436.000 30.000 30.000\n61 38.000 71.000 30.000 30.000\n62 794.000 301.000 30.000 30.000\n63 824.000 739.000 30.000 30.000\n64 792.000 746.000 30.000 30.000\n65 232.000 53.000 30.000 30.000\n66 60.000 212.000 30.000 30.000\n67 138.000 743.000 30.000 30.000\n68 485.000 142.000 30.000 30.000\n69 377.000 294.000 30.000 30.000\n70 70.000 808.000 30.000 30.000\n71 302.000 424.000 30.000 30.000\n72 146.000 709.000 30.000 30.000\n73 799.000 689.000 30.000 30.000\n74 384.000 110.000 30.000 30.000\n75 401.000 768.000 30.000 30.000\n76 837.000 223.000 30.000 30.000\n77 364.000 287.000 30.000 30.000\n78 636.000 561.000 30.000 30.000\n79 540.000 719.000 30.000 30.000\n80 52.000 73.000 30.000 30.000\n81 579.000 40.000 30.000 30.000\n82 624.000 144.000 30.000 30.000\n83 822.000 479.000 30.000 30.000\n84 316.000 524.000 30.000 30.000\n85 56.000 147.000 30.000 30.000\n86 849.000 360.000 30.000 30.000\n87 471.000 129.000 30.000 30.000\n88 261.000 594.000 30.000 30.000\n89 247.000 193.000 30.000 30.000\n#\n67 49\n11 3\n21 8\n68 73\n9 8\n53 22\n83 40\n71 9\n6 4\n14 12\n9 28\n50 2\n34 4\n37 3\n23 14\n83 0\n22 73\n32 18\n50 41\n60 48\n80 76\n5 1\n42 14\n88 45\n30 15\n64 38\n22 11\n19 9\n49 37\n4 2\n86 48\n5 48\n74 26\n36 23\n26 18\n28 10\n61 28\n68 32\n54 2\n58 31\n48 7\n51 1\n25 41\n59 18\n38 89\n69 56\n46 29\n62 22\n48 81\n63 58\n41 33\n3 1\n52 30\n55 17\n40 36\n45 15\n61 36\n53 37\n30 14\n87 61\n65 63\n13 7\n21 88\n26 54\n72 36\n7 61\n26 46\n77 59\n33 21\n79 36\n82 80\n27 10\n18 12\n57 55\n80 11\n58 20\n36 15\n29 2\n32 10\n43 3\n24 8\n70 33\n20 1\n23 40\n47 10\n42 60\n1 0\n25 17\n35 24\n9 26\n8 5\n70 66\n39 20\n12 7\n10 9\n56 42\n50 6\n78 35\n7 4\n81 77\n38 14\n16 5\n73 72\n31 17\n17 6\n76 9\n75 3\n87 73\n89 79\n36 14\n2 0\n44 43\n11 7\n84 67\n85 51\n66 49\n15 0\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v90e126.gml",
    "content": "graph\n[\n    node\n    [\n        id    0\n        label    \"\"\n        graphics\n        [\n            x    298.73\n            y    712.86\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    1\n        label    \"\"\n        graphics\n        [\n            x    478.18\n            y    768.93\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    2\n        label    \"\"\n        graphics\n        [\n            x    197.96\n            y    66.99\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    3\n        label    \"\"\n        graphics\n        [\n            x    565.53\n            y    620.02\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    4\n        label    \"\"\n        graphics\n        [\n            x    844.84\n            y    31.82\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    5\n        label    \"\"\n        graphics\n        [\n            x    355.42\n            y    179.08\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    6\n        label    \"\"\n        graphics\n        [\n            x    372.01\n            y    655.67\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    7\n        label    \"\"\n        graphics\n        [\n            x    251.77\n            y    206.61\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    8\n        label    \"\"\n        graphics\n        [\n            x    352.64\n            y    790.67\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    9\n        label    \"\"\n        graphics\n        [\n            x    341.49\n            y    0.92\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    10\n        label    \"\"\n        graphics\n        [\n            x    485.89\n            y    463.07\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    11\n        label    \"\"\n        graphics\n        [\n            x    114.37\n            y    381.84\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    12\n        label    \"\"\n        graphics\n        [\n            x    743.60\n            y    805.81\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    13\n        label    \"\"\n        graphics\n        [\n            x    43.97\n            y    21.67\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    14\n        label    \"\"\n        graphics\n        [\n            x    793.36\n            y    838.27\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    15\n        label    \"\"\n        graphics\n        [\n            x    620.34\n            y    639.48\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    16\n        label    \"\"\n        graphics\n        [\n            x    646.67\n            y    330.28\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    17\n        label    \"\"\n        graphics\n        [\n            x    335.09\n            y    293.03\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    18\n        label    \"\"\n        graphics\n        [\n            x    63.39\n            y    507.65\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    19\n        label    \"\"\n        graphics\n        [\n            x    295.19\n            y    218.50\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    20\n        label    \"\"\n        graphics\n        [\n            x    720.27\n            y    3.99\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    21\n        label    \"\"\n        graphics\n        [\n            x    345.12\n            y    27.38\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    22\n        label    \"\"\n        graphics\n        [\n            x    294.53\n            y    83.27\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    23\n        label    \"\"\n        graphics\n        [\n            x    440.77\n            y    584.70\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    24\n        label    \"\"\n        graphics\n        [\n            x    27.81\n            y    170.05\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    25\n        label    \"\"\n        graphics\n        [\n            x    228.47\n            y    768.67\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    26\n        label    \"\"\n        graphics\n        [\n            x    240.25\n            y    316.21\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    27\n        label    \"\"\n        graphics\n        [\n            x    2.18\n            y    519.80\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    28\n        label    \"\"\n        graphics\n        [\n            x    69.97\n            y    178.29\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    29\n        label    \"\"\n        graphics\n        [\n            x    806.66\n            y    98.91\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    30\n        label    \"\"\n        graphics\n        [\n            x    677.94\n            y    129.78\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    31\n        label    \"\"\n        graphics\n        [\n            x    610.07\n            y    492.42\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    32\n        label    \"\"\n        graphics\n        [\n            x    207.68\n            y    160.56\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    33\n        label    \"\"\n        graphics\n        [\n            x    407.93\n            y    620.32\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    34\n        label    \"\"\n        graphics\n        [\n            x    12.34\n            y    7.42\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    35\n        label    \"\"\n        graphics\n        [\n            x    158.41\n            y    808.35\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    36\n        label    \"\"\n        graphics\n        [\n            x    660.97\n            y    770.38\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    37\n        label    \"\"\n        graphics\n        [\n            x    131.63\n            y    329.37\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    38\n        label    \"\"\n        graphics\n        [\n            x    692.85\n            y    35.61\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    39\n        label    \"\"\n        graphics\n        [\n            x    217.04\n            y    431.65\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    40\n        label    \"\"\n        graphics\n        [\n            x    452.24\n            y    395.22\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    41\n        label    \"\"\n        graphics\n        [\n            x    598.95\n            y    93.07\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    42\n        label    \"\"\n        graphics\n        [\n            x    589.27\n            y    730.52\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    43\n        label    \"\"\n        graphics\n        [\n            x    168.18\n            y    366.07\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    44\n        label    \"\"\n        graphics\n        [\n            x    3.66\n            y    580.18\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    45\n        label    \"\"\n        graphics\n        [\n            x    819.60\n            y    419.77\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    46\n        label    \"\"\n        graphics\n        [\n            x    251.16\n            y    505.14\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    47\n        label    \"\"\n        graphics\n        [\n            x    191.27\n            y    454.76\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    48\n        label    \"\"\n        graphics\n        [\n            x    660.10\n            y    845.07\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    49\n        label    \"\"\n        graphics\n        [\n            x    629.61\n            y    719.70\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    50\n        label    \"\"\n        graphics\n        [\n            x    8.47\n            y    509.31\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    51\n        label    \"\"\n        graphics\n        [\n            x    499.51\n            y    124.87\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    52\n        label    \"\"\n        graphics\n        [\n            x    357.16\n            y    403.92\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    53\n        label    \"\"\n        graphics\n        [\n            x    121.54\n            y    54.35\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    54\n        label    \"\"\n        graphics\n        [\n            x    81.48\n            y    454.91\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    55\n        label    \"\"\n        graphics\n        [\n            x    225.07\n            y    190.60\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    56\n        label    \"\"\n        graphics\n        [\n            x    620.98\n            y    479.15\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    57\n        label    \"\"\n        graphics\n        [\n            x    697.02\n            y    398.02\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    58\n        label    \"\"\n        graphics\n        [\n            x    402.01\n            y    527.10\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    59\n        label    \"\"\n        graphics\n        [\n            x    449.09\n            y    792.32\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    60\n        label    \"\"\n        graphics\n        [\n            x    826.37\n            y    32.31\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    61\n        label    \"\"\n        graphics\n        [\n            x    635.05\n            y    624.01\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    62\n        label    \"\"\n        graphics\n        [\n            x    105.34\n            y    342.05\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    63\n        label    \"\"\n        graphics\n        [\n            x    627.27\n            y    333.50\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    64\n        label    \"\"\n        graphics\n        [\n            x    15.74\n            y    656.11\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    65\n        label    \"\"\n        graphics\n        [\n            x    624.77\n            y    548.72\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    66\n        label    \"\"\n        graphics\n        [\n            x    390.61\n            y    495.91\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    67\n        label    \"\"\n        graphics\n        [\n            x    535.23\n            y    309.13\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    68\n        label    \"\"\n        graphics\n        [\n            x    506.67\n            y    806.86\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    69\n        label    \"\"\n        graphics\n        [\n            x    562.85\n            y    395.70\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    70\n        label    \"\"\n        graphics\n        [\n            x    806.63\n            y    136.36\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    71\n        label    \"\"\n        graphics\n        [\n            x    46.64\n            y    359.03\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    72\n        label    \"\"\n        graphics\n        [\n            x    146.06\n            y    165.83\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    73\n        label    \"\"\n        graphics\n        [\n            x    847.29\n            y    518.88\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    74\n        label    \"\"\n        graphics\n        [\n            x    655.09\n            y    770.75\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    75\n        label    \"\"\n        graphics\n        [\n            x    221.08\n            y    455.96\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    76\n        label    \"\"\n        graphics\n        [\n            x    332.22\n            y    639.96\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    77\n        label    \"\"\n        graphics\n        [\n            x    288.16\n            y    35.28\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    78\n        label    \"\"\n        graphics\n        [\n            x    522.43\n            y    751.00\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    79\n        label    \"\"\n        graphics\n        [\n            x    57.15\n            y    131.98\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    80\n        label    \"\"\n        graphics\n        [\n            x    448.47\n            y    72.13\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    81\n        label    \"\"\n        graphics\n        [\n            x    123.89\n            y    449.00\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    82\n        label    \"\"\n        graphics\n        [\n            x    16.04\n            y    506.43\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    83\n        label    \"\"\n        graphics\n        [\n            x    594.16\n            y    769.50\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    84\n        label    \"\"\n        graphics\n        [\n            x    505.43\n            y    842.46\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    85\n        label    \"\"\n        graphics\n        [\n            x    113.21\n            y    482.00\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    86\n        label    \"\"\n        graphics\n        [\n            x    220.82\n            y    561.53\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    87\n        label    \"\"\n        graphics\n        [\n            x    853.47\n            y    267.41\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    88\n        label    \"\"\n        graphics\n        [\n            x    458.86\n            y    345.09\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    89\n        label    \"\"\n        graphics\n        [\n            x    181.83\n            y    778.85\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    edge\n    [\n        source    1\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    10\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    11\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    12\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    12\n        target    25\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    13\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    14\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    15\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    16\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    17\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    17\n        target    67\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    18\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    19\n        target    50\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    19\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    2\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    20\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    20\n        target    62\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    21\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    22\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    22\n        target    58\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    23\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    24\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    25\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    25\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    26\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    27\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    28\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    28\n        target    84\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    29\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    3\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    30\n        target    20\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    31\n        target    20\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    31\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    32\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    32\n        target    31\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    32\n        target    54\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    33\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    34\n        target    58\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    34\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    35\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    35\n        target    49\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    36\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    36\n        target    28\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    36\n        target    32\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    37\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    38\n        target    29\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    39\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    4\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    40\n        target    24\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    41\n        target    33\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    42\n        target    29\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    42\n        target    31\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    43\n        target    19\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    43\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    43\n        target    35\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    44\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    44\n        target    30\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    44\n        target    74\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    45\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    46\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    47\n        target    26\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    48\n        target    24\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    49\n        target    19\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    49\n        target    32\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    5\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    50\n        target    44\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    51\n        target    19\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    52\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    53\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    54\n        target    39\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    54\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    54\n        target    55\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    55\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    56\n        target    20\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    57\n        target    51\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    58\n        target    51\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    59\n        target    47\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    6\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    60\n        target    24\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    61\n        target    55\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    62\n        target    19\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    62\n        target    40\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    62\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    63\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    64\n        target    32\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    65\n        target    25\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    66\n        target    38\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    66\n        target    52\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    66\n        target    65\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    67\n        target    56\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    68\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    68\n        target    74\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    68\n        target    81\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    69\n        target    61\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    69\n        target    63\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    7\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    7\n        target    59\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    70\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    70\n        target    66\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    71\n        target    58\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    72\n        target    19\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    72\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    73\n        target    19\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    74\n        target    30\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    74\n        target    79\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    75\n        target    35\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    75\n        target    83\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    76\n        target    68\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    77\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    78\n        target    36\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    79\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    8\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    80\n        target    37\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    81\n        target    56\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    82\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    83\n        target    45\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    83\n        target    61\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    84\n        target    20\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    84\n        target    63\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    85\n        target    73\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    86\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    87\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    88\n        target    46\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    89\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    89\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    9\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n]\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v90e126.tglf",
    "content": "0 298.000 712.000 30.000 30.000\n1 478.000 768.000 30.000 30.000\n2 197.000 66.000 30.000 30.000\n3 565.000 620.000 30.000 30.000\n4 844.000 31.000 30.000 30.000\n5 355.000 179.000 30.000 30.000\n6 372.000 655.000 30.000 30.000\n7 251.000 206.000 30.000 30.000\n8 352.000 790.000 30.000 30.000\n9 341.000 0.000 30.000 30.000\n10 485.000 463.000 30.000 30.000\n11 114.000 381.000 30.000 30.000\n12 743.000 805.000 30.000 30.000\n13 43.000 21.000 30.000 30.000\n14 793.000 838.000 30.000 30.000\n15 620.000 639.000 30.000 30.000\n16 646.000 330.000 30.000 30.000\n17 335.000 293.000 30.000 30.000\n18 63.000 507.000 30.000 30.000\n19 295.000 218.000 30.000 30.000\n20 720.000 3.000 30.000 30.000\n21 345.000 27.000 30.000 30.000\n22 294.000 83.000 30.000 30.000\n23 440.000 584.000 30.000 30.000\n24 27.000 170.000 30.000 30.000\n25 228.000 768.000 30.000 30.000\n26 240.000 316.000 30.000 30.000\n27 2.000 519.000 30.000 30.000\n28 69.000 178.000 30.000 30.000\n29 806.000 98.000 30.000 30.000\n30 677.000 129.000 30.000 30.000\n31 610.000 492.000 30.000 30.000\n32 207.000 160.000 30.000 30.000\n33 407.000 620.000 30.000 30.000\n34 12.000 7.000 30.000 30.000\n35 158.000 808.000 30.000 30.000\n36 660.000 770.000 30.000 30.000\n37 131.000 329.000 30.000 30.000\n38 692.000 35.000 30.000 30.000\n39 217.000 431.000 30.000 30.000\n40 452.000 395.000 30.000 30.000\n41 598.000 93.000 30.000 30.000\n42 589.000 730.000 30.000 30.000\n43 168.000 366.000 30.000 30.000\n44 3.000 580.000 30.000 30.000\n45 819.000 419.000 30.000 30.000\n46 251.000 505.000 30.000 30.000\n47 191.000 454.000 30.000 30.000\n48 660.000 845.000 30.000 30.000\n49 629.000 719.000 30.000 30.000\n50 8.000 509.000 30.000 30.000\n51 499.000 124.000 30.000 30.000\n52 357.000 403.000 30.000 30.000\n53 121.000 54.000 30.000 30.000\n54 81.000 454.000 30.000 30.000\n55 225.000 190.000 30.000 30.000\n56 620.000 479.000 30.000 30.000\n57 697.000 398.000 30.000 30.000\n58 402.000 527.000 30.000 30.000\n59 449.000 792.000 30.000 30.000\n60 826.000 32.000 30.000 30.000\n61 635.000 624.000 30.000 30.000\n62 105.000 342.000 30.000 30.000\n63 627.000 333.000 30.000 30.000\n64 15.000 656.000 30.000 30.000\n65 624.000 548.000 30.000 30.000\n66 390.000 495.000 30.000 30.000\n67 535.000 309.000 30.000 30.000\n68 506.000 806.000 30.000 30.000\n69 562.000 395.000 30.000 30.000\n70 806.000 136.000 30.000 30.000\n71 46.000 359.000 30.000 30.000\n72 146.000 165.000 30.000 30.000\n73 847.000 518.000 30.000 30.000\n74 655.000 770.000 30.000 30.000\n75 221.000 455.000 30.000 30.000\n76 332.000 639.000 30.000 30.000\n77 288.000 35.000 30.000 30.000\n78 522.000 751.000 30.000 30.000\n79 57.000 131.000 30.000 30.000\n80 448.000 72.000 30.000 30.000\n81 123.000 449.000 30.000 30.000\n82 16.000 506.000 30.000 30.000\n83 594.000 769.000 30.000 30.000\n84 505.000 842.000 30.000 30.000\n85 113.000 482.000 30.000 30.000\n86 220.000 561.000 30.000 30.000\n87 853.000 267.000 30.000 30.000\n88 458.000 345.000 30.000 30.000\n89 181.000 778.000 30.000 30.000\n#\n50 44\n83 45\n35 17\n61 55\n60 24\n52 6\n14 0\n49 19\n44 30\n33 0\n78 36\n64 32\n81 56\n62 40\n8 4\n17 67\n66 65\n9 4\n69 63\n76 68\n58 51\n36 22\n12 10\n22 16\n71 58\n34 6\n70 66\n45 7\n46 10\n31 6\n79 2\n36 28\n54 55\n28 16\n31 20\n29 0\n68 2\n74 79\n43 19\n28 84\n65 25\n3 1\n68 74\n7 59\n62 19\n6 1\n26 11\n84 20\n67 56\n53 17\n36 32\n89 8\n24 3\n25 22\n27 11\n38 29\n1 0\n39 9\n54 39\n16 1\n20 62\n32 54\n25 7\n86 18\n56 20\n66 38\n43 22\n70 4\n10 1\n42 29\n15 6\n34 58\n77 14\n42 31\n62 7\n68 81\n44 74\n35 49\n32 31\n57 51\n41 33\n19 50\n84 63\n66 52\n43 35\n69 61\n82 23\n20 17\n73 19\n55 11\n17 2\n13 2\n83 61\n48 24\n75 35\n88 46\n18 9\n12 25\n23 14\n75 83\n5 4\n22 58\n44 2\n40 24\n11 6\n85 73\n2 0\n54 4\n21 0\n30 20\n63 2\n74 30\n72 19\n87 6\n89 22\n72 4\n37 14\n7 1\n49 32\n47 26\n32 3\n19 9\n80 37\n59 47\n51 19\n4 0\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v90e135.gml",
    "content": "graph\n[\n    node\n    [\n        id    0\n        label    \"\"\n        graphics\n        [\n            x    535.34\n            y    1.37\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    1\n        label    \"\"\n        graphics\n        [\n            x    174.51\n            y    234.80\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    2\n        label    \"\"\n        graphics\n        [\n            x    735.67\n            y    21.88\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    3\n        label    \"\"\n        graphics\n        [\n            x    516.60\n            y    374.40\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    4\n        label    \"\"\n        graphics\n        [\n            x    851.41\n            y    698.16\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    5\n        label    \"\"\n        graphics\n        [\n            x    546.59\n            y    537.73\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    6\n        label    \"\"\n        graphics\n        [\n            x    840.00\n            y    820.85\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    7\n        label    \"\"\n        graphics\n        [\n            x    349.59\n            y    825.12\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    8\n        label    \"\"\n        graphics\n        [\n            x    380.19\n            y    826.90\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    9\n        label    \"\"\n        graphics\n        [\n            x    152.61\n            y    51.94\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    10\n        label    \"\"\n        graphics\n        [\n            x    724.19\n            y    38.05\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    11\n        label    \"\"\n        graphics\n        [\n            x    69.19\n            y    751.91\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    12\n        label    \"\"\n        graphics\n        [\n            x    98.87\n            y    849.10\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    13\n        label    \"\"\n        graphics\n        [\n            x    158.69\n            y    636.74\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    14\n        label    \"\"\n        graphics\n        [\n            x    365.47\n            y    607.69\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    15\n        label    \"\"\n        graphics\n        [\n            x    513.38\n            y    648.44\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    16\n        label    \"\"\n        graphics\n        [\n            x    444.38\n            y    144.91\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    17\n        label    \"\"\n        graphics\n        [\n            x    676.07\n            y    696.65\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    18\n        label    \"\"\n        graphics\n        [\n            x    242.58\n            y    286.18\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    19\n        label    \"\"\n        graphics\n        [\n            x    737.63\n            y    538.19\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    20\n        label    \"\"\n        graphics\n        [\n            x    231.25\n            y    478.70\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    21\n        label    \"\"\n        graphics\n        [\n            x    234.89\n            y    839.12\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    22\n        label    \"\"\n        graphics\n        [\n            x    404.79\n            y    117.01\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    23\n        label    \"\"\n        graphics\n        [\n            x    473.82\n            y    101.81\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    24\n        label    \"\"\n        graphics\n        [\n            x    789.85\n            y    423.49\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    25\n        label    \"\"\n        graphics\n        [\n            x    199.64\n            y    264.60\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    26\n        label    \"\"\n        graphics\n        [\n            x    185.50\n            y    598.65\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    27\n        label    \"\"\n        graphics\n        [\n            x    252.75\n            y    767.96\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    28\n        label    \"\"\n        graphics\n        [\n            x    115.66\n            y    711.53\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    29\n        label    \"\"\n        graphics\n        [\n            x    823.63\n            y    621.92\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    30\n        label    \"\"\n        graphics\n        [\n            x    292.48\n            y    642.34\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    31\n        label    \"\"\n        graphics\n        [\n            x    661.17\n            y    733.98\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    32\n        label    \"\"\n        graphics\n        [\n            x    207.75\n            y    515.73\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    33\n        label    \"\"\n        graphics\n        [\n            x    441.01\n            y    810.86\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    34\n        label    \"\"\n        graphics\n        [\n            x    366.33\n            y    531.92\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    35\n        label    \"\"\n        graphics\n        [\n            x    694.42\n            y    271.31\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    36\n        label    \"\"\n        graphics\n        [\n            x    179.77\n            y    852.35\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    37\n        label    \"\"\n        graphics\n        [\n            x    351.20\n            y    623.58\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    38\n        label    \"\"\n        graphics\n        [\n            x    31.28\n            y    268.19\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    39\n        label    \"\"\n        graphics\n        [\n            x    364.32\n            y    443.34\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    40\n        label    \"\"\n        graphics\n        [\n            x    15.99\n            y    197.86\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    41\n        label    \"\"\n        graphics\n        [\n            x    303.77\n            y    239.39\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    42\n        label    \"\"\n        graphics\n        [\n            x    332.05\n            y    627.52\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    43\n        label    \"\"\n        graphics\n        [\n            x    173.39\n            y    52.41\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    44\n        label    \"\"\n        graphics\n        [\n            x    276.95\n            y    811.91\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    45\n        label    \"\"\n        graphics\n        [\n            x    163.48\n            y    462.26\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    46\n        label    \"\"\n        graphics\n        [\n            x    671.46\n            y    59.32\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    47\n        label    \"\"\n        graphics\n        [\n            x    405.41\n            y    571.19\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    48\n        label    \"\"\n        graphics\n        [\n            x    12.48\n            y    128.62\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    49\n        label    \"\"\n        graphics\n        [\n            x    354.02\n            y    390.90\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    50\n        label    \"\"\n        graphics\n        [\n            x    380.83\n            y    775.67\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    51\n        label    \"\"\n        graphics\n        [\n            x    654.45\n            y    46.20\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    52\n        label    \"\"\n        graphics\n        [\n            x    747.27\n            y    464.95\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    53\n        label    \"\"\n        graphics\n        [\n            x    763.36\n            y    243.83\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    54\n        label    \"\"\n        graphics\n        [\n            x    488.33\n            y    728.29\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    55\n        label    \"\"\n        graphics\n        [\n            x    266.49\n            y    582.45\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    56\n        label    \"\"\n        graphics\n        [\n            x    164.14\n            y    11.74\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    57\n        label    \"\"\n        graphics\n        [\n            x    589.26\n            y    207.68\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    58\n        label    \"\"\n        graphics\n        [\n            x    368.38\n            y    657.55\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    59\n        label    \"\"\n        graphics\n        [\n            x    677.76\n            y    336.65\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    60\n        label    \"\"\n        graphics\n        [\n            x    30.17\n            y    748.15\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    61\n        label    \"\"\n        graphics\n        [\n            x    559.02\n            y    217.72\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    62\n        label    \"\"\n        graphics\n        [\n            x    299.25\n            y    610.26\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    63\n        label    \"\"\n        graphics\n        [\n            x    261.80\n            y    391.57\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    64\n        label    \"\"\n        graphics\n        [\n            x    428.08\n            y    296.18\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    65\n        label    \"\"\n        graphics\n        [\n            x    733.98\n            y    692.85\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    66\n        label    \"\"\n        graphics\n        [\n            x    192.77\n            y    181.25\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    67\n        label    \"\"\n        graphics\n        [\n            x    327.63\n            y    543.98\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    68\n        label    \"\"\n        graphics\n        [\n            x    844.52\n            y    132.88\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    69\n        label    \"\"\n        graphics\n        [\n            x    288.58\n            y    366.98\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    70\n        label    \"\"\n        graphics\n        [\n            x    328.25\n            y    708.52\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    71\n        label    \"\"\n        graphics\n        [\n            x    152.27\n            y    92.56\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    72\n        label    \"\"\n        graphics\n        [\n            x    370.84\n            y    372.67\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    73\n        label    \"\"\n        graphics\n        [\n            x    314.85\n            y    639.13\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    74\n        label    \"\"\n        graphics\n        [\n            x    795.96\n            y    666.49\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    75\n        label    \"\"\n        graphics\n        [\n            x    172.55\n            y    405.59\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    76\n        label    \"\"\n        graphics\n        [\n            x    583.09\n            y    293.82\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    77\n        label    \"\"\n        graphics\n        [\n            x    387.02\n            y    386.84\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    78\n        label    \"\"\n        graphics\n        [\n            x    112.98\n            y    302.86\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    79\n        label    \"\"\n        graphics\n        [\n            x    484.82\n            y    395.53\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    80\n        label    \"\"\n        graphics\n        [\n            x    173.55\n            y    852.30\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    81\n        label    \"\"\n        graphics\n        [\n            x    26.87\n            y    154.42\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    82\n        label    \"\"\n        graphics\n        [\n            x    443.99\n            y    476.91\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    83\n        label    \"\"\n        graphics\n        [\n            x    705.28\n            y    369.14\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    84\n        label    \"\"\n        graphics\n        [\n            x    202.86\n            y    142.46\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    85\n        label    \"\"\n        graphics\n        [\n            x    140.73\n            y    620.45\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    86\n        label    \"\"\n        graphics\n        [\n            x    129.82\n            y    839.78\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    87\n        label    \"\"\n        graphics\n        [\n            x    575.30\n            y    772.82\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    88\n        label    \"\"\n        graphics\n        [\n            x    405.18\n            y    599.04\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    89\n        label    \"\"\n        graphics\n        [\n            x    638.40\n            y    498.48\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    edge\n    [\n        source    1\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    1\n        target    26\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    10\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    11\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    12\n        target    25\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    12\n        target    68\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    12\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    13\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    14\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    14\n        target    84\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    15\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    15\n        target    34\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    15\n        target    46\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    16\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    17\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    18\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    19\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    19\n        target    55\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    2\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    20\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    20\n        target    67\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    21\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    21\n        target    48\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    22\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    23\n        target    19\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    23\n        target    84\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    24\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    25\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    25\n        target    20\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    25\n        target    60\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    26\n        target    58\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    26\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    27\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    28\n        target    23\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    28\n        target    44\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    29\n        target    26\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    29\n        target    64\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    3\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    3\n        target    19\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    3\n        target    61\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    30\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    31\n        target    49\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    31\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    32\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    33\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    33\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    34\n        target    24\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    35\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    36\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    37\n        target    30\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    37\n        target    80\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    37\n        target    87\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    38\n        target    32\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    39\n        target    26\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    4\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    4\n        target    31\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    4\n        target    39\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    40\n        target    38\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    41\n        target    29\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    42\n        target    26\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    43\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    44\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    45\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    45\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    46\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    47\n        target    35\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    48\n        target    30\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    49\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    49\n        target    86\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    5\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    50\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    51\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    51\n        target    36\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    52\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    52\n        target    59\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    53\n        target    27\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    53\n        target    39\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    54\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    55\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    56\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    56\n        target    84\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    56\n        target    86\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    57\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    58\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    58\n        target    47\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    59\n        target    36\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    6\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    60\n        target    49\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    61\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    62\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    63\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    63\n        target    48\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    64\n        target    35\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    64\n        target    55\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    65\n        target    47\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    65\n        target    54\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    66\n        target    26\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    66\n        target    37\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    66\n        target    88\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    67\n        target    26\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    68\n        target    31\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    69\n        target    32\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    69\n        target    55\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    69\n        target    58\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    7\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    70\n        target    69\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    71\n        target    33\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    71\n        target    69\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    72\n        target    58\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    73\n        target    39\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    73\n        target    65\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    74\n        target    64\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    75\n        target    33\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    76\n        target    65\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    77\n        target    29\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    78\n        target    51\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    78\n        target    61\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    79\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    8\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    80\n        target    28\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    81\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    81\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    81\n        target    66\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    82\n        target    34\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    82\n        target    74\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    83\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    83\n        target    87\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    84\n        target    72\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    85\n        target    41\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    86\n        target    46\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    87\n        target    43\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    88\n        target    73\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    89\n        target    44\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    89\n        target    87\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    9\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n]\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v90e135.tglf",
    "content": "0 535.000 1.000 30.000 30.000\n1 174.000 234.000 30.000 30.000\n2 735.000 21.000 30.000 30.000\n3 516.000 374.000 30.000 30.000\n4 851.000 698.000 30.000 30.000\n5 546.000 537.000 30.000 30.000\n6 840.000 820.000 30.000 30.000\n7 349.000 825.000 30.000 30.000\n8 380.000 826.000 30.000 30.000\n9 152.000 51.000 30.000 30.000\n10 724.000 38.000 30.000 30.000\n11 69.000 751.000 30.000 30.000\n12 98.000 849.000 30.000 30.000\n13 158.000 636.000 30.000 30.000\n14 365.000 607.000 30.000 30.000\n15 513.000 648.000 30.000 30.000\n16 444.000 144.000 30.000 30.000\n17 676.000 696.000 30.000 30.000\n18 242.000 286.000 30.000 30.000\n19 737.000 538.000 30.000 30.000\n20 231.000 478.000 30.000 30.000\n21 234.000 839.000 30.000 30.000\n22 404.000 117.000 30.000 30.000\n23 473.000 101.000 30.000 30.000\n24 789.000 423.000 30.000 30.000\n25 199.000 264.000 30.000 30.000\n26 185.000 598.000 30.000 30.000\n27 252.000 767.000 30.000 30.000\n28 115.000 711.000 30.000 30.000\n29 823.000 621.000 30.000 30.000\n30 292.000 642.000 30.000 30.000\n31 661.000 733.000 30.000 30.000\n32 207.000 515.000 30.000 30.000\n33 441.000 810.000 30.000 30.000\n34 366.000 531.000 30.000 30.000\n35 694.000 271.000 30.000 30.000\n36 179.000 852.000 30.000 30.000\n37 351.000 623.000 30.000 30.000\n38 31.000 268.000 30.000 30.000\n39 364.000 443.000 30.000 30.000\n40 15.000 197.000 30.000 30.000\n41 303.000 239.000 30.000 30.000\n42 332.000 627.000 30.000 30.000\n43 173.000 52.000 30.000 30.000\n44 276.000 811.000 30.000 30.000\n45 163.000 462.000 30.000 30.000\n46 671.000 59.000 30.000 30.000\n47 405.000 571.000 30.000 30.000\n48 12.000 128.000 30.000 30.000\n49 354.000 390.000 30.000 30.000\n50 380.000 775.000 30.000 30.000\n51 654.000 46.000 30.000 30.000\n52 747.000 464.000 30.000 30.000\n53 763.000 243.000 30.000 30.000\n54 488.000 728.000 30.000 30.000\n55 266.000 582.000 30.000 30.000\n56 164.000 11.000 30.000 30.000\n57 589.000 207.000 30.000 30.000\n58 368.000 657.000 30.000 30.000\n59 677.000 336.000 30.000 30.000\n60 30.000 748.000 30.000 30.000\n61 559.000 217.000 30.000 30.000\n62 299.000 610.000 30.000 30.000\n63 261.000 391.000 30.000 30.000\n64 428.000 296.000 30.000 30.000\n65 733.000 692.000 30.000 30.000\n66 192.000 181.000 30.000 30.000\n67 327.000 543.000 30.000 30.000\n68 844.000 132.000 30.000 30.000\n69 288.000 366.000 30.000 30.000\n70 328.000 708.000 30.000 30.000\n71 152.000 92.000 30.000 30.000\n72 370.000 372.000 30.000 30.000\n73 314.000 639.000 30.000 30.000\n74 795.000 666.000 30.000 30.000\n75 172.000 405.000 30.000 30.000\n76 583.000 293.000 30.000 30.000\n77 387.000 386.000 30.000 30.000\n78 112.000 302.000 30.000 30.000\n79 484.000 395.000 30.000 30.000\n80 173.000 852.000 30.000 30.000\n81 26.000 154.000 30.000 30.000\n82 443.000 476.000 30.000 30.000\n83 705.000 369.000 30.000 30.000\n84 202.000 142.000 30.000 30.000\n85 140.000 620.000 30.000 30.000\n86 129.000 839.000 30.000 30.000\n87 575.000 772.000 30.000 30.000\n88 405.000 599.000 30.000 30.000\n89 638.000 498.000 30.000 30.000\n#\n33 2\n50 15\n10 2\n11 3\n37 87\n66 26\n4 31\n47 35\n84 72\n65 47\n56 13\n40 38\n19 18\n69 32\n21 12\n87 43\n83 0\n33 10\n8 2\n34 24\n66 88\n80 28\n54 15\n49 12\n3 0\n39 26\n65 54\n48 30\n17 7\n9 6\n55 18\n63 10\n32 1\n31 49\n1 26\n64 55\n66 37\n18 8\n22 1\n6 1\n79 22\n51 1\n20 67\n74 64\n14 84\n12 8\n76 65\n29 26\n56 84\n73 65\n83 87\n71 69\n89 87\n30 16\n15 2\n4 0\n27 15\n53 27\n88 73\n60 49\n82 34\n43 2\n81 10\n13 5\n69 58\n20 2\n3 19\n52 1\n31 5\n72 58\n82 74\n28 44\n1 0\n15 34\n85 41\n26 7\n61 11\n77 29\n58 47\n57 0\n2 0\n37 80\n53 39\n70 69\n36 11\n38 32\n68 31\n28 23\n35 0\n21 48\n5 1\n7 6\n16 11\n64 35\n89 44\n81 13\n73 39\n51 36\n4 39\n46 0\n78 61\n26 58\n45 13\n67 26\n19 55\n41 29\n23 84\n25 60\n81 66\n3 61\n45 4\n12 25\n15 46\n86 46\n14 12\n59 36\n78 51\n23 19\n75 33\n44 17\n63 48\n52 59\n71 33\n12 68\n37 30\n58 16\n42 26\n49 86\n29 64\n24 23\n25 1\n69 55\n25 20\n56 86\n62 12\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v90e90.gml",
    "content": "graph\n[\n    node\n    [\n        id    0\n        label    \"\"\n        graphics\n        [\n            x    676.12\n            y    581.91\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    1\n        label    \"\"\n        graphics\n        [\n            x    556.12\n            y    367.33\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    2\n        label    \"\"\n        graphics\n        [\n            x    84.43\n            y    661.02\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    3\n        label    \"\"\n        graphics\n        [\n            x    686.99\n            y    771.99\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    4\n        label    \"\"\n        graphics\n        [\n            x    560.38\n            y    641.44\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    5\n        label    \"\"\n        graphics\n        [\n            x    735.00\n            y    103.15\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    6\n        label    \"\"\n        graphics\n        [\n            x    359.12\n            y    103.57\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    7\n        label    \"\"\n        graphics\n        [\n            x    729.54\n            y    33.57\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    8\n        label    \"\"\n        graphics\n        [\n            x    392.72\n            y    73.82\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    9\n        label    \"\"\n        graphics\n        [\n            x    612.11\n            y    278.84\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    10\n        label    \"\"\n        graphics\n        [\n            x    821.80\n            y    487.34\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    11\n        label    \"\"\n        graphics\n        [\n            x    336.29\n            y    547.36\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    12\n        label    \"\"\n        graphics\n        [\n            x    312.93\n            y    263.25\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    13\n        label    \"\"\n        graphics\n        [\n            x    324.36\n            y    581.07\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    14\n        label    \"\"\n        graphics\n        [\n            x    156.95\n            y    466.74\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    15\n        label    \"\"\n        graphics\n        [\n            x    382.26\n            y    410.43\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    16\n        label    \"\"\n        graphics\n        [\n            x    508.42\n            y    375.99\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    17\n        label    \"\"\n        graphics\n        [\n            x    350.92\n            y    14.95\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    18\n        label    \"\"\n        graphics\n        [\n            x    3.11\n            y    97.52\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    19\n        label    \"\"\n        graphics\n        [\n            x    314.77\n            y    352.06\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    20\n        label    \"\"\n        graphics\n        [\n            x    759.77\n            y    703.45\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    21\n        label    \"\"\n        graphics\n        [\n            x    230.40\n            y    428.65\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    22\n        label    \"\"\n        graphics\n        [\n            x    687.48\n            y    46.01\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    23\n        label    \"\"\n        graphics\n        [\n            x    659.27\n            y    439.66\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    24\n        label    \"\"\n        graphics\n        [\n            x    352.93\n            y    369.20\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    25\n        label    \"\"\n        graphics\n        [\n            x    216.76\n            y    64.74\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    26\n        label    \"\"\n        graphics\n        [\n            x    23.25\n            y    762.05\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    27\n        label    \"\"\n        graphics\n        [\n            x    522.62\n            y    640.60\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    28\n        label    \"\"\n        graphics\n        [\n            x    331.61\n            y    139.18\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    29\n        label    \"\"\n        graphics\n        [\n            x    508.10\n            y    673.90\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    30\n        label    \"\"\n        graphics\n        [\n            x    761.68\n            y    491.11\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    31\n        label    \"\"\n        graphics\n        [\n            x    362.64\n            y    333.60\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    32\n        label    \"\"\n        graphics\n        [\n            x    99.90\n            y    278.55\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    33\n        label    \"\"\n        graphics\n        [\n            x    369.17\n            y    359.08\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    34\n        label    \"\"\n        graphics\n        [\n            x    793.68\n            y    841.43\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    35\n        label    \"\"\n        graphics\n        [\n            x    94.28\n            y    643.58\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    36\n        label    \"\"\n        graphics\n        [\n            x    358.50\n            y    699.85\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    37\n        label    \"\"\n        graphics\n        [\n            x    849.20\n            y    161.38\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    38\n        label    \"\"\n        graphics\n        [\n            x    417.77\n            y    121.57\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    39\n        label    \"\"\n        graphics\n        [\n            x    339.58\n            y    278.37\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    40\n        label    \"\"\n        graphics\n        [\n            x    308.45\n            y    676.26\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    41\n        label    \"\"\n        graphics\n        [\n            x    591.03\n            y    190.57\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    42\n        label    \"\"\n        graphics\n        [\n            x    809.28\n            y    730.72\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    43\n        label    \"\"\n        graphics\n        [\n            x    155.98\n            y    129.14\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    44\n        label    \"\"\n        graphics\n        [\n            x    233.10\n            y    114.15\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    45\n        label    \"\"\n        graphics\n        [\n            x    680.52\n            y    217.25\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    46\n        label    \"\"\n        graphics\n        [\n            x    558.52\n            y    425.70\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    47\n        label    \"\"\n        graphics\n        [\n            x    557.69\n            y    159.12\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    48\n        label    \"\"\n        graphics\n        [\n            x    708.14\n            y    222.87\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    49\n        label    \"\"\n        graphics\n        [\n            x    164.96\n            y    544.83\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    50\n        label    \"\"\n        graphics\n        [\n            x    325.10\n            y    796.61\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    51\n        label    \"\"\n        graphics\n        [\n            x    692.31\n            y    689.83\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    52\n        label    \"\"\n        graphics\n        [\n            x    351.62\n            y    534.56\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    53\n        label    \"\"\n        graphics\n        [\n            x    129.24\n            y    235.44\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    54\n        label    \"\"\n        graphics\n        [\n            x    698.26\n            y    598.96\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    55\n        label    \"\"\n        graphics\n        [\n            x    229.85\n            y    392.56\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    56\n        label    \"\"\n        graphics\n        [\n            x    212.14\n            y    402.10\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    57\n        label    \"\"\n        graphics\n        [\n            x    318.85\n            y    847.08\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    58\n        label    \"\"\n        graphics\n        [\n            x    92.30\n            y    803.35\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    59\n        label    \"\"\n        graphics\n        [\n            x    199.47\n            y    811.77\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    60\n        label    \"\"\n        graphics\n        [\n            x    427.39\n            y    814.83\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    61\n        label    \"\"\n        graphics\n        [\n            x    209.98\n            y    273.02\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    62\n        label    \"\"\n        graphics\n        [\n            x    66.12\n            y    414.98\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    63\n        label    \"\"\n        graphics\n        [\n            x    572.62\n            y    587.78\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    64\n        label    \"\"\n        graphics\n        [\n            x    369.78\n            y    657.55\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    65\n        label    \"\"\n        graphics\n        [\n            x    687.10\n            y    331.40\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    66\n        label    \"\"\n        graphics\n        [\n            x    483.70\n            y    754.53\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    67\n        label    \"\"\n        graphics\n        [\n            x    569.03\n            y    447.64\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    68\n        label    \"\"\n        graphics\n        [\n            x    143.80\n            y    71.79\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    69\n        label    \"\"\n        graphics\n        [\n            x    695.77\n            y    259.00\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    70\n        label    \"\"\n        graphics\n        [\n            x    460.84\n            y    23.52\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    71\n        label    \"\"\n        graphics\n        [\n            x    716.72\n            y    446.35\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    72\n        label    \"\"\n        graphics\n        [\n            x    112.80\n            y    366.05\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    73\n        label    \"\"\n        graphics\n        [\n            x    342.93\n            y    315.26\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    74\n        label    \"\"\n        graphics\n        [\n            x    256.58\n            y    100.33\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    75\n        label    \"\"\n        graphics\n        [\n            x    843.75\n            y    478.54\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    76\n        label    \"\"\n        graphics\n        [\n            x    477.09\n            y    31.38\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    77\n        label    \"\"\n        graphics\n        [\n            x    764.93\n            y    108.77\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    78\n        label    \"\"\n        graphics\n        [\n            x    731.73\n            y    288.67\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    79\n        label    \"\"\n        graphics\n        [\n            x    583.44\n            y    41.03\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    80\n        label    \"\"\n        graphics\n        [\n            x    1.49\n            y    44.65\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    81\n        label    \"\"\n        graphics\n        [\n            x    380.66\n            y    44.39\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    82\n        label    \"\"\n        graphics\n        [\n            x    445.79\n            y    147.29\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    83\n        label    \"\"\n        graphics\n        [\n            x    767.39\n            y    1.19\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    84\n        label    \"\"\n        graphics\n        [\n            x    819.00\n            y    446.95\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    85\n        label    \"\"\n        graphics\n        [\n            x    808.91\n            y    481.60\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    86\n        label    \"\"\n        graphics\n        [\n            x    457.63\n            y    46.33\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    87\n        label    \"\"\n        graphics\n        [\n            x    133.40\n            y    794.54\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    88\n        label    \"\"\n        graphics\n        [\n            x    213.81\n            y    724.56\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    89\n        label    \"\"\n        graphics\n        [\n            x    767.17\n            y    472.93\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    edge\n    [\n        source    1\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    10\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    11\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    12\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    13\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    14\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    15\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    16\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    17\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    18\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    19\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    2\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    20\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    21\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    22\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    23\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    24\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    25\n        target    20\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    26\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    27\n        target    20\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    28\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    29\n        target    28\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    3\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    30\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    31\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    32\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    33\n        target    32\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    34\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    35\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    36\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    37\n        target    33\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    38\n        target    34\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    39\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    4\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    40\n        target    27\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    41\n        target    18\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    42\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    43\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    44\n        target    35\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    45\n        target    36\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    46\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    47\n        target    42\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    48\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    49\n        target    29\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    5\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    50\n        target    37\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    51\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    52\n        target    41\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    53\n        target    41\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    54\n        target    38\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    55\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    56\n        target    28\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    57\n        target    51\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    58\n        target    43\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    59\n        target    51\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    6\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    60\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    61\n        target    27\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    62\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    63\n        target    35\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    64\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    65\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    66\n        target    50\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    67\n        target    36\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    68\n        target    48\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    69\n        target    36\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    7\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    70\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    71\n        target    19\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    72\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    72\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    73\n        target    34\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    74\n        target    44\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    75\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    76\n        target    61\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    77\n        target    75\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    78\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    79\n        target    76\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    8\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    80\n        target    54\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    81\n        target    31\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    82\n        target    40\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    83\n        target    43\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    84\n        target    54\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    85\n        target    70\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    86\n        target    48\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    87\n        target    39\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    88\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    89\n        target    87\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    9\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n]\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v90e90.tglf",
    "content": "0 676.000 581.000 30.000 30.000\n1 556.000 367.000 30.000 30.000\n2 84.000 661.000 30.000 30.000\n3 686.000 771.000 30.000 30.000\n4 560.000 641.000 30.000 30.000\n5 735.000 103.000 30.000 30.000\n6 359.000 103.000 30.000 30.000\n7 729.000 33.000 30.000 30.000\n8 392.000 73.000 30.000 30.000\n9 612.000 278.000 30.000 30.000\n10 821.000 487.000 30.000 30.000\n11 336.000 547.000 30.000 30.000\n12 312.000 263.000 30.000 30.000\n13 324.000 581.000 30.000 30.000\n14 156.000 466.000 30.000 30.000\n15 382.000 410.000 30.000 30.000\n16 508.000 375.000 30.000 30.000\n17 350.000 14.000 30.000 30.000\n18 3.000 97.000 30.000 30.000\n19 314.000 352.000 30.000 30.000\n20 759.000 703.000 30.000 30.000\n21 230.000 428.000 30.000 30.000\n22 687.000 46.000 30.000 30.000\n23 659.000 439.000 30.000 30.000\n24 352.000 369.000 30.000 30.000\n25 216.000 64.000 30.000 30.000\n26 23.000 762.000 30.000 30.000\n27 522.000 640.000 30.000 30.000\n28 331.000 139.000 30.000 30.000\n29 508.000 673.000 30.000 30.000\n30 761.000 491.000 30.000 30.000\n31 362.000 333.000 30.000 30.000\n32 99.000 278.000 30.000 30.000\n33 369.000 359.000 30.000 30.000\n34 793.000 841.000 30.000 30.000\n35 94.000 643.000 30.000 30.000\n36 358.000 699.000 30.000 30.000\n37 849.000 161.000 30.000 30.000\n38 417.000 121.000 30.000 30.000\n39 339.000 278.000 30.000 30.000\n40 308.000 676.000 30.000 30.000\n41 591.000 190.000 30.000 30.000\n42 809.000 730.000 30.000 30.000\n43 155.000 129.000 30.000 30.000\n44 233.000 114.000 30.000 30.000\n45 680.000 217.000 30.000 30.000\n46 558.000 425.000 30.000 30.000\n47 557.000 159.000 30.000 30.000\n48 708.000 222.000 30.000 30.000\n49 164.000 544.000 30.000 30.000\n50 325.000 796.000 30.000 30.000\n51 692.000 689.000 30.000 30.000\n52 351.000 534.000 30.000 30.000\n53 129.000 235.000 30.000 30.000\n54 698.000 598.000 30.000 30.000\n55 229.000 392.000 30.000 30.000\n56 212.000 402.000 30.000 30.000\n57 318.000 847.000 30.000 30.000\n58 92.000 803.000 30.000 30.000\n59 199.000 811.000 30.000 30.000\n60 427.000 814.000 30.000 30.000\n61 209.000 273.000 30.000 30.000\n62 66.000 414.000 30.000 30.000\n63 572.000 587.000 30.000 30.000\n64 369.000 657.000 30.000 30.000\n65 687.000 331.000 30.000 30.000\n66 483.000 754.000 30.000 30.000\n67 569.000 447.000 30.000 30.000\n68 143.000 71.000 30.000 30.000\n69 695.000 259.000 30.000 30.000\n70 460.000 23.000 30.000 30.000\n71 716.000 446.000 30.000 30.000\n72 112.000 366.000 30.000 30.000\n73 342.000 315.000 30.000 30.000\n74 256.000 100.000 30.000 30.000\n75 843.000 478.000 30.000 30.000\n76 477.000 31.000 30.000 30.000\n77 764.000 108.000 30.000 30.000\n78 731.000 288.000 30.000 30.000\n79 583.000 41.000 30.000 30.000\n80 1.000 44.000 30.000 30.000\n81 380.000 44.000 30.000 30.000\n82 445.000 147.000 30.000 30.000\n83 767.000 1.000 30.000 30.000\n84 819.000 446.000 30.000 30.000\n85 808.000 481.000 30.000 30.000\n86 457.000 46.000 30.000 30.000\n87 133.000 794.000 30.000 30.000\n88 213.000 724.000 30.000 30.000\n89 767.000 472.000 30.000 30.000\n#\n56 28\n18 13\n22 10\n61 27\n4 2\n12 9\n34 12\n81 31\n64 10\n72 4\n49 29\n53 41\n87 39\n43 3\n10 2\n44 35\n60 14\n76 61\n11 6\n32 22\n30 8\n19 9\n65 15\n48 7\n72 22\n82 40\n29 28\n55 13\n38 34\n75 4\n79 76\n78 21\n40 27\n33 32\n2 1\n41 18\n86 48\n5 1\n59 51\n77 75\n36 3\n35 9\n70 16\n37 33\n50 37\n46 2\n74 44\n23 11\n31 14\n1 0\n25 20\n15 1\n24 9\n68 48\n28 4\n3 1\n6 2\n47 42\n51 4\n45 36\n7 0\n9 0\n67 36\n89 87\n16 0\n8 0\n54 38\n83 43\n85 70\n63 35\n17 2\n73 34\n27 20\n57 51\n20 7\n26 13\n88 22\n69 36\n66 50\n39 12\n14 2\n13 0\n80 54\n21 18\n84 54\n42 6\n71 19\n62 21\n52 41\n58 43\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v90e99.gml",
    "content": "graph\n[\n    node\n    [\n        id    0\n        label    \"\"\n        graphics\n        [\n            x    377.52\n            y    759.43\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    1\n        label    \"\"\n        graphics\n        [\n            x    296.33\n            y    687.36\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    2\n        label    \"\"\n        graphics\n        [\n            x    570.34\n            y    287.42\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    3\n        label    \"\"\n        graphics\n        [\n            x    581.10\n            y    384.60\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    4\n        label    \"\"\n        graphics\n        [\n            x    349.15\n            y    749.03\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    5\n        label    \"\"\n        graphics\n        [\n            x    706.04\n            y    753.69\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    6\n        label    \"\"\n        graphics\n        [\n            x    100.26\n            y    546.59\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    7\n        label    \"\"\n        graphics\n        [\n            x    20.73\n            y    62.35\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    8\n        label    \"\"\n        graphics\n        [\n            x    477.86\n            y    741.52\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    9\n        label    \"\"\n        graphics\n        [\n            x    1.95\n            y    434.00\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    10\n        label    \"\"\n        graphics\n        [\n            x    813.34\n            y    221.12\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    11\n        label    \"\"\n        graphics\n        [\n            x    145.12\n            y    587.51\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    12\n        label    \"\"\n        graphics\n        [\n            x    321.71\n            y    834.62\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    13\n        label    \"\"\n        graphics\n        [\n            x    838.86\n            y    335.08\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    14\n        label    \"\"\n        graphics\n        [\n            x    601.17\n            y    252.14\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    15\n        label    \"\"\n        graphics\n        [\n            x    611.01\n            y    144.28\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    16\n        label    \"\"\n        graphics\n        [\n            x    75.02\n            y    597.75\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    17\n        label    \"\"\n        graphics\n        [\n            x    167.75\n            y    404.81\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    18\n        label    \"\"\n        graphics\n        [\n            x    761.11\n            y    75.85\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    19\n        label    \"\"\n        graphics\n        [\n            x    467.01\n            y    119.34\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    20\n        label    \"\"\n        graphics\n        [\n            x    617.81\n            y    413.16\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    21\n        label    \"\"\n        graphics\n        [\n            x    452.11\n            y    668.94\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    22\n        label    \"\"\n        graphics\n        [\n            x    832.93\n            y    698.31\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    23\n        label    \"\"\n        graphics\n        [\n            x    593.10\n            y    802.97\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    24\n        label    \"\"\n        graphics\n        [\n            x    116.94\n            y    383.99\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    25\n        label    \"\"\n        graphics\n        [\n            x    82.69\n            y    34.68\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    26\n        label    \"\"\n        graphics\n        [\n            x    223.86\n            y    539.09\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    27\n        label    \"\"\n        graphics\n        [\n            x    294.09\n            y    604.91\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    28\n        label    \"\"\n        graphics\n        [\n            x    611.17\n            y    852.90\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    29\n        label    \"\"\n        graphics\n        [\n            x    620.79\n            y    692.79\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    30\n        label    \"\"\n        graphics\n        [\n            x    70.47\n            y    191.62\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    31\n        label    \"\"\n        graphics\n        [\n            x    486.53\n            y    350.26\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    32\n        label    \"\"\n        graphics\n        [\n            x    605.17\n            y    485.39\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    33\n        label    \"\"\n        graphics\n        [\n            x    639.44\n            y    272.01\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    34\n        label    \"\"\n        graphics\n        [\n            x    612.13\n            y    153.84\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    35\n        label    \"\"\n        graphics\n        [\n            x    515.01\n            y    311.81\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    36\n        label    \"\"\n        graphics\n        [\n            x    406.00\n            y    377.40\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    37\n        label    \"\"\n        graphics\n        [\n            x    318.95\n            y    667.73\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    38\n        label    \"\"\n        graphics\n        [\n            x    178.70\n            y    566.91\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    39\n        label    \"\"\n        graphics\n        [\n            x    626.10\n            y    716.39\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    40\n        label    \"\"\n        graphics\n        [\n            x    192.43\n            y    195.22\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    41\n        label    \"\"\n        graphics\n        [\n            x    588.54\n            y    733.62\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    42\n        label    \"\"\n        graphics\n        [\n            x    400.95\n            y    600.66\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    43\n        label    \"\"\n        graphics\n        [\n            x    622.50\n            y    672.39\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    44\n        label    \"\"\n        graphics\n        [\n            x    687.31\n            y    272.85\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    45\n        label    \"\"\n        graphics\n        [\n            x    540.92\n            y    391.19\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    46\n        label    \"\"\n        graphics\n        [\n            x    72.26\n            y    8.87\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    47\n        label    \"\"\n        graphics\n        [\n            x    601.43\n            y    796.81\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    48\n        label    \"\"\n        graphics\n        [\n            x    342.64\n            y    638.57\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    49\n        label    \"\"\n        graphics\n        [\n            x    695.39\n            y    284.21\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    50\n        label    \"\"\n        graphics\n        [\n            x    299.88\n            y    552.56\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    51\n        label    \"\"\n        graphics\n        [\n            x    467.78\n            y    682.00\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    52\n        label    \"\"\n        graphics\n        [\n            x    525.71\n            y    770.39\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    53\n        label    \"\"\n        graphics\n        [\n            x    42.01\n            y    600.36\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    54\n        label    \"\"\n        graphics\n        [\n            x    47.21\n            y    611.70\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    55\n        label    \"\"\n        graphics\n        [\n            x    741.20\n            y    59.75\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    56\n        label    \"\"\n        graphics\n        [\n            x    213.49\n            y    573.48\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    57\n        label    \"\"\n        graphics\n        [\n            x    148.54\n            y    550.74\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    58\n        label    \"\"\n        graphics\n        [\n            x    47.83\n            y    844.88\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    59\n        label    \"\"\n        graphics\n        [\n            x    59.69\n            y    257.36\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    60\n        label    \"\"\n        graphics\n        [\n            x    163.18\n            y    131.62\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    61\n        label    \"\"\n        graphics\n        [\n            x    61.42\n            y    574.27\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    62\n        label    \"\"\n        graphics\n        [\n            x    172.55\n            y    506.44\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    63\n        label    \"\"\n        graphics\n        [\n            x    602.95\n            y    268.16\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    64\n        label    \"\"\n        graphics\n        [\n            x    593.73\n            y    440.30\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    65\n        label    \"\"\n        graphics\n        [\n            x    545.55\n            y    786.94\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    66\n        label    \"\"\n        graphics\n        [\n            x    532.96\n            y    244.13\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    67\n        label    \"\"\n        graphics\n        [\n            x    38.07\n            y    324.88\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    68\n        label    \"\"\n        graphics\n        [\n            x    203.56\n            y    675.17\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    69\n        label    \"\"\n        graphics\n        [\n            x    636.19\n            y    95.51\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    70\n        label    \"\"\n        graphics\n        [\n            x    550.78\n            y    817.66\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    71\n        label    \"\"\n        graphics\n        [\n            x    402.02\n            y    789.71\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    72\n        label    \"\"\n        graphics\n        [\n            x    420.49\n            y    212.51\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    73\n        label    \"\"\n        graphics\n        [\n            x    42.73\n            y    445.87\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    74\n        label    \"\"\n        graphics\n        [\n            x    248.21\n            y    703.69\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    75\n        label    \"\"\n        graphics\n        [\n            x    749.36\n            y    274.69\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    76\n        label    \"\"\n        graphics\n        [\n            x    754.70\n            y    836.94\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    77\n        label    \"\"\n        graphics\n        [\n            x    553.68\n            y    276.56\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    78\n        label    \"\"\n        graphics\n        [\n            x    776.52\n            y    297.07\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    79\n        label    \"\"\n        graphics\n        [\n            x    108.14\n            y    822.16\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    80\n        label    \"\"\n        graphics\n        [\n            x    86.30\n            y    156.32\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    81\n        label    \"\"\n        graphics\n        [\n            x    847.01\n            y    143.08\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    82\n        label    \"\"\n        graphics\n        [\n            x    344.83\n            y    478.77\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    83\n        label    \"\"\n        graphics\n        [\n            x    48.70\n            y    427.30\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    84\n        label    \"\"\n        graphics\n        [\n            x    379.64\n            y    364.09\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    85\n        label    \"\"\n        graphics\n        [\n            x    256.36\n            y    220.17\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    86\n        label    \"\"\n        graphics\n        [\n            x    718.11\n            y    624.44\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#008000\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    87\n        label    \"\"\n        graphics\n        [\n            x    429.85\n            y    486.53\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    88\n        label    \"\"\n        graphics\n        [\n            x    93.94\n            y    469.99\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    node\n    [\n        id    89\n        label    \"\"\n        graphics\n        [\n            x    122.25\n            y    596.16\n            w    30.00\n            h    30.00\n            type    \"rectangle\"\n            fill    \"#CCCCEE\"\n            outline    \"#000\"\n        ]\n    ]\n    edge\n    [\n        source    1\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    10\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    11\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    12\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    13\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    14\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    15\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    16\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    17\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    18\n        target    14\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    19\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    2\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    20\n        target    7\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    21\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    21\n        target    85\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    22\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    23\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    24\n        target    22\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    25\n        target    6\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    26\n        target    9\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    27\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    28\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    29\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    3\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    30\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    31\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    32\n        target    10\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    32\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    33\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    34\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    35\n        target    21\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    36\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    37\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    38\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    39\n        target    29\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    4\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    40\n        target    38\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    41\n        target    26\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    42\n        target    39\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    43\n        target    17\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    44\n        target    11\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    45\n        target    42\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    46\n        target    45\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    47\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    48\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    49\n        target    34\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    5\n        target    0\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    50\n        target    49\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    51\n        target    30\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    52\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    52\n        target    76\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    53\n        target    29\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    54\n        target    52\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    55\n        target    41\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    56\n        target    47\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    57\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    58\n        target    39\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    59\n        target    57\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    6\n        target    2\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    60\n        target    45\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    61\n        target    8\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    62\n        target    53\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    63\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    64\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    65\n        target    55\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    66\n        target    43\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    67\n        target    24\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    68\n        target    50\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    69\n        target    24\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    7\n        target    3\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    7\n        target    68\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    70\n        target    43\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    71\n        target    28\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    72\n        target    28\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    73\n        target    13\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    73\n        target    86\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    74\n        target    37\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    74\n        target    59\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    75\n        target    16\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    76\n        target    72\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    77\n        target    66\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    78\n        target    58\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    79\n        target    42\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    8\n        target    4\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    8\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    80\n        target    74\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    81\n        target    39\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    81\n        target    54\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    82\n        target    26\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    83\n        target    82\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    84\n        target    15\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    85\n        target    5\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    86\n        target    12\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    87\n        target    71\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    88\n        target    20\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    88\n        target    33\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    88\n        target    76\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    89\n        target    36\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n    edge\n    [\n        source    9\n        target    1\n        graphics\n[\n            smoothBends    1\n            fill    \"#000000\"\n        ]\n    ]\n]\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/random/v90e99.tglf",
    "content": "0 377.000 759.000 30.000 30.000\n1 296.000 687.000 30.000 30.000\n2 570.000 287.000 30.000 30.000\n3 581.000 384.000 30.000 30.000\n4 349.000 749.000 30.000 30.000\n5 706.000 753.000 30.000 30.000\n6 100.000 546.000 30.000 30.000\n7 20.000 62.000 30.000 30.000\n8 477.000 741.000 30.000 30.000\n9 1.000 434.000 30.000 30.000\n10 813.000 221.000 30.000 30.000\n11 145.000 587.000 30.000 30.000\n12 321.000 834.000 30.000 30.000\n13 838.000 335.000 30.000 30.000\n14 601.000 252.000 30.000 30.000\n15 611.000 144.000 30.000 30.000\n16 75.000 597.000 30.000 30.000\n17 167.000 404.000 30.000 30.000\n18 761.000 75.000 30.000 30.000\n19 467.000 119.000 30.000 30.000\n20 617.000 413.000 30.000 30.000\n21 452.000 668.000 30.000 30.000\n22 832.000 698.000 30.000 30.000\n23 593.000 802.000 30.000 30.000\n24 116.000 383.000 30.000 30.000\n25 82.000 34.000 30.000 30.000\n26 223.000 539.000 30.000 30.000\n27 294.000 604.000 30.000 30.000\n28 611.000 852.000 30.000 30.000\n29 620.000 692.000 30.000 30.000\n30 70.000 191.000 30.000 30.000\n31 486.000 350.000 30.000 30.000\n32 605.000 485.000 30.000 30.000\n33 639.000 272.000 30.000 30.000\n34 612.000 153.000 30.000 30.000\n35 515.000 311.000 30.000 30.000\n36 406.000 377.000 30.000 30.000\n37 318.000 667.000 30.000 30.000\n38 178.000 566.000 30.000 30.000\n39 626.000 716.000 30.000 30.000\n40 192.000 195.000 30.000 30.000\n41 588.000 733.000 30.000 30.000\n42 400.000 600.000 30.000 30.000\n43 622.000 672.000 30.000 30.000\n44 687.000 272.000 30.000 30.000\n45 540.000 391.000 30.000 30.000\n46 72.000 8.000 30.000 30.000\n47 601.000 796.000 30.000 30.000\n48 342.000 638.000 30.000 30.000\n49 695.000 284.000 30.000 30.000\n50 299.000 552.000 30.000 30.000\n51 467.000 682.000 30.000 30.000\n52 525.000 770.000 30.000 30.000\n53 42.000 600.000 30.000 30.000\n54 47.000 611.000 30.000 30.000\n55 741.000 59.000 30.000 30.000\n56 213.000 573.000 30.000 30.000\n57 148.000 550.000 30.000 30.000\n58 47.000 844.000 30.000 30.000\n59 59.000 257.000 30.000 30.000\n60 163.000 131.000 30.000 30.000\n61 61.000 574.000 30.000 30.000\n62 172.000 506.000 30.000 30.000\n63 602.000 268.000 30.000 30.000\n64 593.000 440.000 30.000 30.000\n65 545.000 786.000 30.000 30.000\n66 532.000 244.000 30.000 30.000\n67 38.000 324.000 30.000 30.000\n68 203.000 675.000 30.000 30.000\n69 636.000 95.000 30.000 30.000\n70 550.000 817.000 30.000 30.000\n71 402.000 789.000 30.000 30.000\n72 420.000 212.000 30.000 30.000\n73 42.000 445.000 30.000 30.000\n74 248.000 703.000 30.000 30.000\n75 749.000 274.000 30.000 30.000\n76 754.000 836.000 30.000 30.000\n77 553.000 276.000 30.000 30.000\n78 776.000 297.000 30.000 30.000\n79 108.000 822.000 30.000 30.000\n80 86.000 156.000 30.000 30.000\n81 847.000 143.000 30.000 30.000\n82 344.000 478.000 30.000 30.000\n83 48.000 427.000 30.000 30.000\n84 379.000 364.000 30.000 30.000\n85 256.000 220.000 30.000 30.000\n86 718.000 624.000 30.000 30.000\n87 429.000 486.000 30.000 30.000\n88 93.000 469.000 30.000 30.000\n89 122.000 596.000 30.000 30.000\n#\n47 5\n26 9\n44 11\n22 3\n76 72\n14 5\n24 22\n43 17\n88 20\n33 12\n19 5\n59 57\n32 10\n83 82\n54 52\n58 39\n18 14\n79 42\n38 12\n48 12\n42 39\n86 12\n63 3\n41 26\n36 16\n88 33\n66 43\n30 12\n8 4\n23 3\n3 2\n75 16\n35 21\n7 3\n21 6\n81 54\n65 55\n12 3\n87 71\n45 42\n52 76\n25 6\n2 0\n6 2\n56 47\n72 28\n9 1\n80 74\n55 41\n7 68\n81 39\n74 59\n50 49\n21 85\n15 5\n39 29\n69 24\n32 13\n28 16\n52 16\n31 17\n88 76\n68 50\n71 28\n46 45\n74 37\n11 8\n84 15\n13 8\n77 66\n1 0\n61 8\n60 45\n82 26\n57 8\n4 2\n8 5\n27 10\n62 53\n10 3\n16 2\n37 8\n49 34\n73 13\n5 0\n40 38\n17 5\n78 58\n67 24\n29 17\n64 4\n51 30\n34 11\n20 7\n85 5\n89 36\n70 43\n73 86\n53 29\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/sbgn/calvin.tglf",
    "content": "0 0 0 30 30\n1 1 1 30 30\n2 2 2 30 30\n3 3 3 30 30\n4 4 4 30 30\n5 5 5 30 30\n6 6 6 30 30\n7 7 7 30 30\n8 8 8 30 30\n9 9 9 30 30\n10 10 10 30 30\n11 11 11 30 30\n12 12 12 10 10\n13 13 13 10 10\n14 14 14 10 10\n15 15 15 10 10\n16 16 16 10 10\n17 17 17 10 10\n18 18 18 10 10\n19 19 19 10 10\n20 20 20 10 10\n21 21 21 10 10\n22 22 22 10 10\n23 23 23 30 30\n24 24 24 30 30\n25 25 25 30 30\n26 26 26 10 10\n27 27 27 30 30\n28 28 28 10 10\n29 29 29 30 30\n30 30 30 30 30\n31 31 31 30 30\n32 32 32 30 30\n33 33 33 30 30\n34 34 34 30 30\n35 35 35 30 30\n36 36 36 30 30\n37 37 37 30 30\n38 38 38 30 30\n39 39 39 30 30\n40 40 40 54 30\n41 41 41 54 30\n42 42 42 54 30\n43 43 43 54 30\n44 44 44 54 30\n45 45 45 54 30\n46 46 46 54 30\n47 47 47 54 30\n48 48 48 54 30\n49 49 49 54 30\n50 50 50 54 30\n51 51 51 54 30\n52 52 52 54 30\n#\n20 32\n15 36\n13 25\n49 21\n41 13\n23 22\n42 14\n43 15\n20 4\n46 18\n34 16\n28 36\n47 19\n0 21\n26 30\n7 13\n48 20\n17 39\n16 3\n37 28\n33 19\n26 27\n51 26\n40 12\n29 14\n12 38\n25 22\n52 28\n13 8\n21 1\n11 17\n30 13\n2 13\n32 15\n18 35\n22 24\n19 35\n33 20\n45 17\n31 18\n38 18\n34 26\n9 17\n18 10\n44 16\n37 21\n16 31\n19 5\n6 15\n22 39\n5 12\n14 37\n21 11\n50 22\n15 29\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/sbgn/glyco.tglf",
    "content": "0 -92.000 431.000 30.000 30.000\n1 1457.000 544.000 30.000 30.000\n2 -65.000 1110.000 30.000 30.000\n3 1250.000 1044.000 30.000 30.000\n4 1383.000 256.000 30.000 30.000\n5 991.000 1601.000 30.000 30.000\n6 2000.000 975.000 30.000 30.000\n7 2098.000 328.000 30.000 30.000\n8 1235.000 1508.000 30.000 30.000\n9 1148.000 1623.000 30.000 30.000\n10 1381.000 1788.000 30.000 30.000\n11 855.000 1472.000 30.000 30.000\n12 1514.000 1098.000 30.000 30.000\n13 277.000 1027.000 30.000 30.000\n14 916.000 125.000 30.000 30.000\n15 1155.000 1433.000 30.000 30.000\n16 -196.000 323.000 30.000 30.000\n17 1960.000 1658.000 30.000 30.000\n18 413.000 242.000 30.000 30.000\n19 29.000 244.000 30.000 30.000\n20 1962.000 116.000 30.000 30.000\n21 -46.000 480.000 30.000 30.000\n22 1659.000 1744.000 30.000 30.000\n23 1992.000 760.000 30.000 30.000\n24 -11.000 358.000 30.000 30.000\n25 -437.000 1290.000 30.000 30.000\n26 1536.000 188.000 30.000 30.000\n27 1815.000 1036.000 30.000 30.000\n28 76.000 1076.000 30.000 30.000\n29 208.000 1062.000 30.000 30.000\n30 1827.000 1235.000 30.000 30.000\n31 -243.000 118.000 30.000 30.000\n32 1686.000 416.000 30.000 30.000\n33 1978.000 1719.000 30.000 30.000\n34 1604.000 1690.000 30.000 30.000\n35 109.000 913.000 30.000 30.000\n36 825.000 1715.000 30.000 30.000\n37 1878.000 1416.000 30.000 30.000\n38 2137.000 239.000 30.000 30.000\n39 48.000 1077.000 30.000 30.000\n40 1585.000 1539.000 30.000 30.000\n41 1618.000 1606.000 30.000 30.000\n42 2065.000 587.000 30.000 30.000\n43 193.000 748.000 30.000 30.000\n44 2117.000 838.000 30.000 30.000\n45 1906.000 189.000 30.000 30.000\n46 908.000 807.000 30.000 30.000\n47 301.000 176.000 30.000 30.000\n48 1184.000 1716.000 30.000 30.000\n49 1110.000 1044.000 30.000 30.000\n50 539.000 613.000 30.000 30.000\n51 -397.000 1602.000 30.000 30.000\n52 734.000 439.000 30.000 30.000\n53 1001.000 866.000 30.000 30.000\n54 233.000 763.000 30.000 30.000\n55 855.000 1190.000 30.000 30.000\n56 1726.000 1376.000 30.000 30.000\n57 1787.000 1512.000 30.000 30.000\n58 29.000 1600.000 30.000 30.000\n59 1990.000 1579.000 30.000 30.000\n60 1705.000 299.000 30.000 30.000\n61 1020.000 1094.000 30.000 30.000\n62 1391.000 1358.000 30.000 30.000\n63 2129.000 1030.000 30.000 30.000\n64 593.000 1783.000 30.000 30.000\n65 1055.000 966.000 30.000 30.000\n66 111.000 379.000 30.000 30.000\n67 1905.000 799.000 30.000 30.000\n68 731.000 1241.000 30.000 30.000\n69 1331.000 1420.000 30.000 30.000\n70 1382.000 789.000 30.000 30.000\n71 -222.000 1226.000 30.000 30.000\n72 1046.000 587.000 30.000 30.000\n73 -30.000 248.000 30.000 30.000\n74 466.000 131.000 30.000 30.000\n75 -92.000 1721.000 30.000 30.000\n76 1750.000 857.000 30.000 30.000\n77 765.000 213.000 30.000 30.000\n78 -164.000 1703.000 30.000 30.000\n79 293.000 1566.000 30.000 30.000\n80 -361.000 720.000 30.000 30.000\n81 1206.000 1227.000 30.000 30.000\n82 -397.000 1777.000 30.000 30.000\n83 1812.000 549.000 30.000 30.000\n84 -369.000 1303.000 30.000 30.000\n85 1178.000 1196.000 30.000 30.000\n86 1753.000 1158.000 30.000 30.000\n87 259.000 566.000 30.000 30.000\n88 181.000 1113.000 30.000 30.000\n89 1383.000 918.000 30.000 30.000\n90 639.000 395.000 30.000 30.000\n91 728.000 1263.000 30.000 30.000\n92 644.000 1049.000 30.000 30.000\n93 753.000 343.000 30.000 30.000\n94 1576.000 1396.000 30.000 30.000\n95 1879.000 246.000 30.000 30.000\n96 111.000 764.000 30.000 30.000\n97 195.000 1195.000 30.000 30.000\n98 1709.000 1177.000 30.000 30.000\n99 1331.000 268.000 30.000 30.000\n100 150.000 391.000 30.000 30.000\n101 2128.000 709.000 30.000 30.000\n102 65.000 1356.000 30.000 30.000\n103 97.000 712.000 30.000 30.000\n104 763.000 1661.000 30.000 30.000\n105 1263.000 844.000 30.000 30.000\n106 1354.000 1213.000 30.000 30.000\n107 521.000 490.000 30.000 30.000\n108 690.000 1152.000 30.000 30.000\n109 -312.000 1534.000 30.000 30.000\n110 -143.000 486.000 30.000 30.000\n111 711.000 737.000 30.000 30.000\n112 602.000 1201.000 30.000 30.000\n113 732.000 1508.000 30.000 30.000\n114 1740.000 1040.000 30.000 30.000\n115 -251.000 1212.000 30.000 30.000\n116 508.000 1403.000 30.000 30.000\n117 179.000 1635.000 30.000 30.000\n118 2143.000 336.000 30.000 30.000\n119 2141.000 1775.000 30.000 30.000\n120 1808.000 502.000 30.000 30.000\n121 1925.000 1091.000 30.000 30.000\n122 455.000 770.000 30.000 30.000\n123 134.000 299.000 30.000 30.000\n124 1349.000 1396.000 30.000 30.000\n125 1360.000 925.000 30.000 30.000\n126 518.000 1403.000 30.000 30.000\n127 276.000 944.000 30.000 30.000\n128 -187.000 512.000 30.000 30.000\n129 1901.000 1039.000 30.000 30.000\n130 1254.000 409.000 54.000 30.000\n131 207.000 1147.000 54.000 30.000\n132 -115.000 1130.000 54.000 30.000\n133 1319.000 899.000 54.000 30.000\n134 -285.000 1173.000 54.000 30.000\n135 1882.000 1076.000 54.000 30.000\n136 2035.000 382.000 54.000 30.000\n137 1421.000 1090.000 54.000 30.000\n138 183.000 1806.000 54.000 30.000\n139 211.000 1342.000 54.000 30.000\n140 1068.000 597.000 54.000 30.000\n141 178.000 1525.000 54.000 30.000\n142 -187.000 1044.000 54.000 30.000\n143 323.000 1203.000 54.000 30.000\n144 527.000 661.000 54.000 30.000\n145 35.000 1091.000 54.000 30.000\n146 1217.000 1159.000 54.000 30.000\n147 1095.000 1376.000 54.000 30.000\n148 1900.000 182.000 54.000 30.000\n149 770.000 522.000 54.000 30.000\n150 57.000 810.000 54.000 30.000\n151 2120.000 710.000 54.000 30.000\n152 213.000 248.000 54.000 30.000\n153 1359.000 492.000 54.000 30.000\n154 1988.000 187.000 54.000 30.000\n155 2156.000 191.000 54.000 30.000\n156 -230.000 337.000 54.000 30.000\n157 1689.000 970.000 54.000 30.000\n158 -153.000 327.000 54.000 30.000\n159 -30.000 971.000 54.000 30.000\n160 1049.000 1573.000 54.000 30.000\n161 832.000 1510.000 54.000 30.000\n162 1109.000 1045.000 54.000 30.000\n163 1292.000 552.000 54.000 30.000\n164 263.000 1409.000 54.000 30.000\n165 -110.000 851.000 54.000 30.000\n166 835.000 670.000 54.000 30.000\n167 1874.000 190.000 54.000 30.000\n168 1445.000 1010.000 54.000 30.000\n169 -475.000 1452.000 54.000 30.000\n#\n139 66\n118 74\n108 84\n64 122\n62 113\n117 72\n120 87\n100 104\n0 81\n88 112\n58 106\n110 85\n48 80\n90 115\n87 56\n132 59\n1 92\n99 65\n146 73\n70 117\n78 18\n72 118\n94 111\n74 120\n119 70\n92 100\n94 93\n78 107\n152 79\n17 57\n13 74\n76 115\n68 119\n92 10\n123 94\n47 77\n81 9\n6 86\n89 31\n106 91\n77 107\n109 73\n114 89\n25 91\n98 97\n101 64\n26 89\n67 106\n28 59\n108 86\n68 8\n77 36\n131 58\n101 82\n15 68\n95 96\n84 39\n57 37\n96 116\n102 90\n91 119\n34 57\n63 115\n137 64\n109 60\n166 94\n141 68\n19 86\n98 99\n134 61\n135 62\n74 4\n147 74\n104 105\n112 66\n162 89\n41 80\n80 120\n160 87\n87 118\n157 84\n114 76\n83 49\n91 126\n69 38\n83 129\n81 51\n86 29\n164 91\n150 77\n102 57\n81 109\n107 81\n66 111\n130 57\n113 88\n38 71\n90 124\n60 20\n140 67\n88 21\n59 16\n85 46\n14 67\n62 11\n125 60\n103 67\n59 100\n102 58\n105 75\n33 77\n85 47\n48 83\n82 23\n153 80\n115 96\n169 104\n12 73\n61 111\n2 62\n133 60\n143 70\n86 55\n67 5\n163 90\n113 63\n80 44\n127 85\n32 79\n86 109\n121 82\n87 30\n79 35\n75 102\n112 62\n40 58\n156 83\n79 39\n155 82\n104 102\n60 118\n58 43\n168 98\n149 76\n116 68\n80 52\n109 78\n89 128\n145 72\n100 98\n22 87\n71 109\n24 61\n63 114\n82 24\n151 78\n73 3\n144 71\n99 59\n42 96\n7 87\n106 69\n54 83\n122 94\n65 122\n154 81\n158 85\n57 103\n136 63\n96 45\n27 90\n142 69\n53 78\n73 108\n110 79\n99 92\n79 50\n161 88\n159 86\n138 65\n167 96\n148 75\n165 92\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/sbgn/keratan.tglf",
    "content": "0 -510.000 0.000 60.000 15.000\n1 -720.000 -780.000 90.000 15.000\n2 -129.000 556.000 110.000 15.000\n3 -268.000 -783.000 110.000 15.000\n4 408.000 -149.000 60.000 15.000\n5 722.000 -382.000 90.000 15.000\n6 416.000 -778.000 110.000 15.000\n7 -182.000 -951.000 60.000 15.000\n8 791.000 -422.000 100.000 15.000\n9 -938.000 535.000 120.000 15.000\n10 -677.000 207.000 120.000 15.000\n11 -445.000 -426.000 60.000 15.000\n12 -307.000 791.000 100.000 15.000\n13 190.000 602.000 120.000 15.000\n14 -975.000 -329.000 120.000 15.000\n15 -366.000 -281.000 60.000 15.000\n16 -805.000 274.000 100.000 15.000\n17 171.000 -35.000 120.000 15.000\n18 33.000 725.000 120.000 15.000\n19 -301.000 -638.000 60.000 15.000\n20 815.000 608.000 100.000 15.000\n21 -108.000 -754.000 120.000 15.000\n22 692.000 151.000 120.000 15.000\n23 -353.000 -812.000 60.000 15.000\n24 -543.000 -347.000 100.000 15.000\n25 -761.000 -839.000 120.000 15.000\n26 553.000 -530.000 120.000 15.000\n27 -268.000 -281.000 60.000 15.000\n28 -184.000 265.000 100.000 15.000\n29 -519.000 -511.000 120.000 15.000\n30 -800.000 198.000 120.000 15.000\n31 825.000 878.000 60.000 15.000\n32 891.000 859.000 90.000 15.000\n33 879.000 -422.000 110.000 15.000\n34 -916.000 -132.000 110.000 15.000\n35 783.000 -804.000 60.000 15.000\n36 77.000 -606.000 90.000 15.000\n37 -426.000 612.000 110.000 15.000\n38 913.000 959.000 110.000 15.000\n39 544.000 -214.000 60.000 15.000\n40 972.000 903.000 90.000 15.000\n41 -439.000 800.000 120.000 15.000\n42 501.000 50.000 120.000 15.000\n43 230.000 488.000 60.000 15.000\n44 864.000 828.000 90.000 15.000\n45 -718.000 12.000 120.000 15.000\n46 257.000 -811.000 120.000 15.000\n47 -82.000 -841.000 60.000 15.000\n48 -66.000 973.000 90.000 15.000\n49 -461.000 -733.000 120.000 15.000\n50 689.000 349.000 120.000 15.000\n51 -813.000 -109.000 60.000 15.000\n52 727.000 601.000 90.000 15.000\n53 34.000 -585.000 120.000 15.000\n54 -599.000 539.000 120.000 15.000\n55 110.000 -519.000 60.000 15.000\n56 668.000 -9.000 90.000 15.000\n57 581.000 -488.000 120.000 15.000\n58 760.000 470.000 120.000 15.000\n59 -549.000 476.000 60.000 15.000\n60 664.000 496.000 100.000 15.000\n61 -248.000 239.000 60.000 15.000\n62 -385.000 407.000 100.000 15.000\n63 -7.000 -846.000 110.000 15.000\n64 31.000 -942.000 60.000 15.000\n65 475.000 -695.000 100.000 15.000\n66 -965.000 -918.000 120.000 15.000\n67 -93.000 823.000 60.000 15.000\n68 942.000 22.000 100.000 15.000\n69 362.000 834.000 120.000 15.000\n70 -619.000 -287.000 60.000 15.000\n71 579.000 536.000 100.000 15.000\n72 215.000 -532.000 120.000 15.000\n73 461.000 -51.000 60.000 15.000\n74 479.000 586.000 100.000 15.000\n75 -651.000 421.000 120.000 15.000\n76 -167.000 914.000 60.000 15.000\n77 626.000 137.000 100.000 15.000\n78 -952.000 -914.000 120.000 15.000\n79 117.000 219.000 60.000 15.000\n80 130.000 343.000 100.000 15.000\n81 679.000 178.000 120.000 15.000\n82 -429.000 -384.000 60.000 15.000\n83 558.000 276.000 100.000 15.000\n84 727.000 -798.000 120.000 15.000\n85 -327.000 66.000 60.000 15.000\n86 -208.000 59.000 100.000 15.000\n87 497.000 -915.000 120.000 15.000\n88 -794.000 -663.000 60.000 15.000\n89 605.000 -573.000 100.000 15.000\n90 -526.000 -700.000 120.000 15.000\n91 569.000 -461.000 60.000 15.000\n92 7.000 573.000 100.000 15.000\n93 134.000 461.000 120.000 15.000\n94 -851.000 -117.000 60.000 15.000\n95 542.000 807.000 100.000 15.000\n96 415.000 56.000 60.000 15.000\n97 -547.000 -906.000 100.000 15.000\n98 -924.000 -358.000 60.000 15.000\n99 145.000 -31.000 110.000 15.000\n100 -662.000 788.000 40.000 15.000\n101 -424.000 -885.000 60.000 15.000\n102 559.000 -463.000 110.000 15.000\n103 -954.000 -139.000 40.000 15.000\n104 -764.000 -960.000 60.000 15.000\n105 -118.000 14.000 110.000 15.000\n106 883.000 -702.000 40.000 15.000\n107 801.000 -900.000 60.000 15.000\n108 699.000 -427.000 110.000 15.000\n109 602.000 -116.000 40.000 15.000\n110 -937.000 967.000 60.000 15.000\n111 -88.000 -649.000 110.000 15.000\n112 483.000 -89.000 40.000 15.000\n113 855.000 -343.000 60.000 15.000\n114 -114.000 908.000 110.000 15.000\n115 506.000 620.000 40.000 15.000\n116 -257.000 632.000 60.000 15.000\n117 846.000 22.000 110.000 15.000\n118 962.000 -647.000 40.000 15.000\n119 -721.000 -719.000 60.000 15.000\n120 319.000 123.000 110.000 15.000\n121 -790.000 -957.000 40.000 15.000\n122 -34.000 -165.000 60.000 15.000\n123 62.000 -885.000 110.000 15.000\n124 -141.000 -802.000 40.000 15.000\n125 -835.000 346.000 60.000 15.000\n126 583.000 -796.000 110.000 15.000\n127 -755.000 -420.000 40.000 15.000\n128 -639.000 943.000 60.000 15.000\n129 -807.000 -245.000 100.000 15.000\n130 -877.000 131.000 40.000 15.000\n131 840.000 -712.000 60.000 15.000\n132 -572.000 -70.000 100.000 15.000\n133 -72.000 -462.000 110.000 15.000\n134 621.000 798.000 40.000 15.000\n135 -12.000 998.000 60.000 15.000\n136 -331.000 -4.000 100.000 15.000\n137 69.000 -524.000 40.000 15.000\n138 -547.000 -271.000 60.000 15.000\n139 777.000 -402.000 100.000 15.000\n140 614.000 -827.000 40.000 15.000\n141 5.000 -337.000 60.000 15.000\n142 890.000 924.000 100.000 15.000\n143 -203.000 298.000 40.000 15.000\n144 229.000 118.000 60.000 15.000\n145 -19.000 -329.000 100.000 15.000\n146 -804.000 24.000 40.000 15.000\n147 -736.000 671.000 60.000 15.000\n148 363.000 -726.000 100.000 15.000\n149 -502.000 589.000 40.000 15.000\n150 -639.000 679.000 60.000 15.000\n151 11.000 904.000 100.000 15.000\n152 -543.000 -153.000 40.000 15.000\n153 -977.000 -975.000 60.000 15.000\n154 -456.000 290.000 100.000 15.000\n155 47.000 860.000 40.000 15.000\n156 -410.000 48.000 60.000 15.000\n157 250.000 839.000 100.000 15.000\n158 -72.000 -402.000 40.000 15.000\n159 162.000 657.000 60.000 15.000\n160 -757.000 -423.000 100.000 15.000\n161 979.000 -177.000 40.000 15.000\n162 722.000 118.000 60.000 15.000\n163 298.000 -703.000 100.000 15.000\n164 -707.000 4.000 40.000 15.000\n165 -823.000 -894.000 60.000 15.000\n166 -838.000 130.000 100.000 15.000\n167 864.000 645.000 40.000 15.000\n168 767.000 -795.000 60.000 15.000\n169 -284.000 255.000 90.000 15.000\n170 698.000 342.000 60.000 30.000\n171 -829.000 421.000 60.000 30.000\n172 391.000 -649.000 60.000 30.000\n173 -896.000 -424.000 60.000 30.000\n#\n141 142\n36 38\n44 46\n105 106\n61 62\n24 26\n78 77\n166 167\n45 44\n60 2\n162 163\n89 21\n5 6\n93 92\n40 42\n18 163\n62 37\n142 143\n126 127\n107 108\n10 157\n10 117\n15 16\n48 50\n28 30\n157 84\n129 37\n42 142\n4 5\n54 111\n82 83\n102 45\n151 78\n144 145\n170 171\n95 29\n21 20\n25 24\n65 41\n83 13\n63 62\n14 160\n79 80\n18 123\n151 152\n168 169\n154 155\n77 57\n71 49\n35 36\n75 74\n116 117\n51 52\n145 72\n119 120\n98 99\n132 33\n29 28\n53 52\n12 14\n139 140\n37 36\n108 109\n8 10\n125 126\n76 77\n91 92\n173 170\n135 136\n156 157\n50 148\n52 54\n153 154\n94 95\n17 16\n43 44\n7 8\n42 102\n57 56\n92 25\n150 151\n27 28\n81 80\n104 105\n22 126\n136 63\n50 108\n59 60\n38 139\n26 95\n102 103\n163 90\n66 65\n56 58\n88 89\n122 123\n54 151\n70 71\n19 20\n117 13\n32 34\n23 24\n58 114\n1 3\n11 12\n0 1\n34 136\n30 97\n101 102\n67 68\n33 32\n84 83\n20 22\n46 105\n86 17\n49 48\n111 57\n55 56\n72 71\n136 137\n64 65\n58 154\n16 18\n80 9\n14 120\n157 158\n39 40\n171 172\n120 121\n2 1\n73 74\n160 161\n99 41\n131 132\n129 130\n108 53\n110 111\n111 112\n172 173\n169 133\n166 93\n132 134\n145 146\n46 145\n74 53\n148 75\n38 99\n99 100\n90 89\n113 114\n22 166\n163 164\n123 21\n117 118\n154 81\n160 87\n9 8\n128 129\n87 86\n96 97\n133 132\n147 148\n85 86\n69 68\n47 48\n114 115\n138 139\n34 129\n105 49\n159 160\n6 60\n3 169\n123 124\n142 69\n126 25\n31 32\n168 170\n68 45\n41 40\n139 66\n165 166\n120 17\n148 149\n13 12\n114 9\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/sbgn/urea1.tglf",
    "content": "0 -201.000 146.000 50.000 15.000\n1 -202.000 126.000 80.000 15.000\n2 -202.000 168.000 60.000 15.000\n3 -222.000 149.000 40.000 15.000\n4 -242.000 133.000 70.000 15.000\n5 -297.000 75.000 50.000 15.000\n6 -277.000 52.000 80.000 15.000\n7 -277.000 93.000 70.000 15.000\n8 -317.000 61.000 60.000 15.000\n9 -324.000 241.000 20.000 15.000\n10 -304.000 233.000 80.000 15.000\n11 -329.000 261.000 90.000 15.000\n12 -277.000 274.000 30.000 15.000\n13 -264.000 254.000 80.000 15.000\n14 -280.000 294.000 90.000 15.000\n15 -284.000 240.000 130.000 15.000\n16 -282.000 314.000 70.000 15.000\n17 -304.000 314.000 40.000 15.000\n18 -284.000 336.000 50.000 15.000\n19 -263.000 334.000 70.000 15.000\n20 -341.000 125.000 60.000 15.000\n21 -362.000 125.000 80.000 15.000\n22 -350.000 104.000 50.000 15.000\n23 -321.000 122.000 90.000 15.000\n24 -224.000 227.000 70.000 15.000\n25 -244.000 235.000 70.000 15.000\n26 -229.000 208.000 80.000 15.000\n27 -244.000 255.000 40.000 15.000\n28 -224.000 253.000 80.000 15.000\n29 -382.000 123.000 60.000 15.000\n30 -218.000 188.000 90.000 15.000\n31 -315.000 22.000 50.000 15.000\n32 -275.000 15.000 40.000 15.000\n33 -295.000 27.000 50.000 15.000\n34 -336.000 41.000 90.000 15.000\n35 -181.000 153.000 40.000 15.000\n36 -162.000 173.000 50.000 15.000\n37 -194.000 194.000 60.000 15.000\n38 -182.000 175.000 70.000 15.000\n39 -301.000 103.000 70.000 15.000\n40 -312.000 281.000 140.000 15.000\n41 -152.000 152.000 90.000 15.000\n42 -138.000 192.000 40.000 15.000\n43 -163.000 202.000 40.000 15.000\n44 -142.000 172.000 70.000 15.000\n45 -90.000 187.000 70.000 15.000\n46 -130.000 148.000 50.000 15.000\n47 -153.000 131.000 40.000 15.000\n48 -95.000 122.000 70.000 15.000\n49 -262.000 113.000 60.000 15.000\n50 -326.000 145.000 50.000 15.000\n51 -339.000 164.000 40.000 15.000\n52 -75.000 103.000 70.000 15.000\n53 -75.000 128.000 70.000 15.000\n54 -97.000 89.000 60.000 15.000\n55 -55.000 64.000 90.000 15.000\n56 -66.000 176.000 70.000 15.000\n57 -46.000 194.000 60.000 15.000\n58 -34.000 174.000 90.000 15.000\n59 -40.000 154.000 70.000 15.000\n60 -17.000 154.000 60.000 15.000\n61 -35.000 134.000 90.000 15.000\n62 -40.000 346.000 90.000 15.000\n63 -60.000 334.000 70.000 15.000\n64 -64.000 354.000 60.000 15.000\n65 -73.000 314.000 90.000 15.000\n66 -72.000 83.000 70.000 15.000\n67 -79.000 61.000 60.000 15.000\n68 -99.000 69.000 90.000 15.000\n69 -60.000 151.000 70.000 15.000\n70 -55.000 130.000 60.000 15.000\n71 -19.000 114.000 90.000 15.000\n72 -108.000 216.000 70.000 15.000\n73 -124.000 236.000 40.000 15.000\n74 -118.000 195.000 100.000 15.000\n75 -70.000 206.000 70.000 15.000\n76 -87.000 225.000 40.000 15.000\n77 -50.000 215.000 100.000 15.000\n78 -144.000 222.000 70.000 15.000\n79 -161.000 242.000 40.000 15.000\n80 -177.000 222.000 90.000 15.000\n81 -142.000 91.000 70.000 15.000\n82 -116.000 112.000 90.000 15.000\n83 -156.000 71.000 40.000 15.000\n84 -136.000 110.000 90.000 15.000\n85 -122.000 168.000 70.000 15.000\n86 -102.000 168.000 90.000 15.000\n87 -107.000 142.000 70.000 15.000\n88 -87.000 148.000 70.000 15.000\n89 -102.000 245.000 70.000 15.000\n90 -141.000 258.000 40.000 15.000\n91 -121.000 265.000 70.000 15.000\n92 -101.000 276.000 90.000 15.000\n93 -81.000 294.000 70.000 15.000\n94 -75.000 274.000 100.000 15.000\n95 -52.000 256.000 80.000 15.000\n96 -67.000 237.000 70.000 15.000\n97 -38.000 236.000 90.000 15.000\n98 0.000 102.000 70.000 15.000\n99 20.000 93.000 40.000 15.000\n100 -13.000 82.000 70.000 15.000\n101 13.000 122.000 90.000 15.000\n102 -17.000 193.000 70.000 15.000\n103 2.000 176.000 40.000 15.000\n104 4.000 196.000 70.000 15.000\n105 -15.000 213.000 90.000 15.000\n106 -59.000 44.000 70.000 15.000\n107 -74.000 24.000 40.000 15.000\n108 -54.000 22.000 70.000 15.000\n109 -35.000 42.000 90.000 15.000\n110 -46.000 110.000 70.000 15.000\n111 -34.000 90.000 60.000 15.000\n#\n102 105\n46 44\n78 79\n6 5\n45 89\n110 111\n58 59\n41 46\n102 103\n9 11\n87 53\n74 78\n31 32\n69 71\n15 10\n63 64\n2 36\n89 91\n59 60\n20 22\n12 14\n102 104\n24 25\n106 108\n74 85\n106 109\n30 26\n96 94\n52 53\n69 53\n46 48\n42 45\n84 87\n10 9\n85 38\n88 86\n40 14\n88 45\n95 96\n42 43\n106 107\n56 57\n98 100\n8 31\n81 83\n72 73\n88 53\n85 53\n45 69\n25 28\n4 49\n98 101\n20 23\n45 72\n3 4\n5 7\n38 42\n52 55\n87 86\n81 84\n66 68\n98 99\n59 53\n89 90\n45 46\n3 2\n69 70\n13 12\n66 53\n16 18\n29 21\n59 61\n56 53\n31 33\n82 81\n78 80\n0 2\n14 16\n58 102\n46 47\n1 0\n110 61\n71 110\n25 13\n45 96\n42 44\n48 52\n71 98\n82 88\n93 94\n30 2\n45 56\n66 67\n92 93\n26 25\n45 75\n39 23\n21 20\n13 15\n56 58\n62 63\n50 51\n96 97\n23 50\n8 39\n55 106\n11 40\n16 19\n52 54\n75 76\n110 53\n75 77\n16 17\n35 36\n89 92\n31 34\n36 37\n25 27\n5 8\n55 66\n72 74\n85 86\n63 65\n93 65\n87 74\n36 38\n41 42\n49 7\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/special/3cross4cross.gml",
    "content": "Creator\t\"yFiles\"\nVersion\t\"2.12\"\ngraph\n[\n\thierarchic\t1\n\tlabel\t\"\"\n\tdirected\t1\n\tnode\n\t[\n\t\tid\t0\n\t\tlabel\t\"1\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t716.5\n\t\t\ty\t358.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"1\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t1\n\t\tlabel\t\"2\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t716.5\n\t\t\ty\t455.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"2\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t2\n\t\tlabel\t\"3\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t656.5\n\t\t\ty\t406.5\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"3\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t3\n\t\tlabel\t\"4\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t776.5\n\t\t\ty\t406.5\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"4\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t4\n\t\tlabel\t\"5\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t891.0\n\t\t\ty\t406.5\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"5\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t5\n\t\tlabel\t\"6\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t891.0\n\t\t\ty\t282.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"6\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t6\n\t\tlabel\t\"7\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t831.0\n\t\t\ty\t216.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"7\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t7\n\t\tlabel\t\"8\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t951.0\n\t\t\ty\t216.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"8\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t8\n\t\tlabel\t\"9\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t891.0\n\t\t\ty\t531.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"9\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t9\n\t\tlabel\t\"10\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t951.0\n\t\t\ty\t599.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"10\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t10\n\t\tlabel\t\"11\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t831.0\n\t\t\ty\t599.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"11\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t11\n\t\tlabel\t\"5\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t522.0\n\t\t\ty\t406.5\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"5\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t12\n\t\tlabel\t\"6\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t522.0\n\t\t\ty\t282.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"6\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t13\n\t\tlabel\t\"7\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t462.0\n\t\t\ty\t216.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"7\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t14\n\t\tlabel\t\"8\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t582.0\n\t\t\ty\t216.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"8\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t15\n\t\tlabel\t\"9\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t522.0\n\t\t\ty\t531.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"9\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t16\n\t\tlabel\t\"10\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t582.0\n\t\t\ty\t599.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"10\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t17\n\t\tlabel\t\"11\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t462.0\n\t\t\ty\t599.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"11\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t18\n\t\tlabel\t\"1\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t337.0\n\t\t\ty\t358.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"1\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t19\n\t\tlabel\t\"2\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t337.0\n\t\t\ty\t455.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"2\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t20\n\t\tlabel\t\"3\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t277.0\n\t\t\ty\t406.5\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"3\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t21\n\t\tlabel\t\"4\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t397.0\n\t\t\ty\t406.5\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"4\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t4\n\t\ttarget\t5\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t5\n\t\ttarget\t6\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t6\n\t\ttarget\t7\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t7\n\t\ttarget\t5\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t4\n\t\ttarget\t8\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t8\n\t\ttarget\t9\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t9\n\t\ttarget\t10\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t10\n\t\ttarget\t8\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t4\n\t\ttarget\t3\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t3\n\t\ttarget\t1\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t1\n\t\ttarget\t2\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t2\n\t\ttarget\t0\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t0\n\t\ttarget\t3\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t2\n\t\ttarget\t11\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t11\n\t\ttarget\t12\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t11\n\t\ttarget\t15\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t11\n\t\ttarget\t21\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t12\n\t\ttarget\t13\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t13\n\t\ttarget\t14\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t14\n\t\ttarget\t12\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t15\n\t\ttarget\t16\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t16\n\t\ttarget\t17\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t17\n\t\ttarget\t15\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t21\n\t\ttarget\t19\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t19\n\t\ttarget\t20\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t20\n\t\ttarget\t18\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t18\n\t\ttarget\t21\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n]\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/special/3cross4cross.tglf",
    "content": "0 716.000 358.000 30.000 30.000\n1 716.000 455.000 30.000 30.000\n2 656.000 406.000 30.000 30.000\n3 776.000 406.000 30.000 30.000\n4 891.000 406.000 30.000 30.000\n5 891.000 282.000 30.000 30.000\n6 831.000 216.000 30.000 30.000\n7 951.000 216.000 30.000 30.000\n8 891.000 531.000 30.000 30.000\n9 951.000 599.000 30.000 30.000\n10 831.000 599.000 30.000 30.000\n11 522.000 406.000 30.000 30.000\n12 522.000 282.000 30.000 30.000\n13 462.000 216.000 30.000 30.000\n14 582.000 216.000 30.000 30.000\n15 522.000 531.000 30.000 30.000\n16 582.000 599.000 30.000 30.000\n17 462.000 599.000 30.000 30.000\n18 337.000 358.000 30.000 30.000\n19 337.000 455.000 30.000 30.000\n20 277.000 406.000 30.000 30.000\n21 397.000 406.000 30.000 30.000\n#\n21 19\n1 2\n17 15\n2 11\n13 14\n5 6\n7 5\n11 21\n4 3\n6 7\n8 9\n4 5\n10 8\n16 17\n20 18\n3 1\n11 12\n4 8\n12 13\n2 0\n11 15\n19 20\n18 21\n0 3\n9 10\n14 12\n15 16\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/special/3cross4cross_wTrees.gml",
    "content": "Creator\t\"yFiles\"\nVersion\t\"2.12\"\ngraph\n[\n\thierarchic\t1\n\tlabel\t\"\"\n\tdirected\t1\n\tnode\n\t[\n\t\tid\t0\n\t\tlabel\t\"1\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t716.5\n\t\t\ty\t358.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"1\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t1\n\t\tlabel\t\"2\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t716.5\n\t\t\ty\t455.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"2\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t2\n\t\tlabel\t\"3\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t656.5\n\t\t\ty\t406.5\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"3\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t3\n\t\tlabel\t\"4\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t776.5\n\t\t\ty\t406.5\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"4\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t4\n\t\tlabel\t\"5\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t891.0\n\t\t\ty\t406.5\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"5\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t5\n\t\tlabel\t\"6\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t891.0\n\t\t\ty\t282.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"6\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t6\n\t\tlabel\t\"7\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t831.0\n\t\t\ty\t216.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"7\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t7\n\t\tlabel\t\"8\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t951.0\n\t\t\ty\t216.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"8\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t8\n\t\tlabel\t\"9\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t891.0\n\t\t\ty\t531.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"9\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t9\n\t\tlabel\t\"10\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t951.0\n\t\t\ty\t599.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"10\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t10\n\t\tlabel\t\"11\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t831.0\n\t\t\ty\t599.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"11\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t11\n\t\tlabel\t\"5\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t522.0\n\t\t\ty\t406.5\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"5\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t12\n\t\tlabel\t\"6\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t522.0\n\t\t\ty\t282.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"6\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t13\n\t\tlabel\t\"7\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t462.0\n\t\t\ty\t216.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"7\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t14\n\t\tlabel\t\"8\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t582.0\n\t\t\ty\t216.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"8\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t15\n\t\tlabel\t\"9\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t522.0\n\t\t\ty\t531.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"9\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t16\n\t\tlabel\t\"10\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t582.0\n\t\t\ty\t599.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"10\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t17\n\t\tlabel\t\"11\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t462.0\n\t\t\ty\t599.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"11\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t18\n\t\tlabel\t\"1\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t337.0\n\t\t\ty\t358.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"1\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t19\n\t\tlabel\t\"2\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t337.0\n\t\t\ty\t455.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"2\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t20\n\t\tlabel\t\"3\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t277.0\n\t\t\ty\t406.5\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"3\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t21\n\t\tlabel\t\"4\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t397.0\n\t\t\ty\t406.5\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"4\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t22\n\t\tlabel\t\"23\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t440.0\n\t\t\ty\t489.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"23\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t23\n\t\tlabel\t\"24\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t369.0\n\t\t\ty\t516.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"24\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t24\n\t\tlabel\t\"25\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t396.0\n\t\t\ty\t559.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"25\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t25\n\t\tlabel\t\"26\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t385.0\n\t\t\ty\t274.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"26\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t26\n\t\tlabel\t\"27\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t313.0\n\t\t\ty\t232.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"27\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t27\n\t\tlabel\t\"28\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t362.0\n\t\t\ty\t208.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"28\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t28\n\t\tlabel\t\"29\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t642.0\n\t\t\ty\t246.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"29\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t29\n\t\tlabel\t\"30\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t660.0\n\t\t\ty\t190.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"30\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t30\n\t\tlabel\t\"31\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t685.0\n\t\t\ty\t213.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"31\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t31\n\t\tlabel\t\"32\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t702.0\n\t\t\ty\t237.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"32\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t32\n\t\tlabel\t\"33\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t981.0\n\t\t\ty\t356.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"33\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t33\n\t\tlabel\t\"34\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t986.0\n\t\t\ty\t414.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"34\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t34\n\t\tlabel\t\"35\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t1046.0\n\t\t\ty\t406.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"35\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t4\n\t\ttarget\t5\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t5\n\t\ttarget\t6\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t6\n\t\ttarget\t7\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t7\n\t\ttarget\t5\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t4\n\t\ttarget\t8\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t8\n\t\ttarget\t9\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t9\n\t\ttarget\t10\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t10\n\t\ttarget\t8\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t4\n\t\ttarget\t3\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t3\n\t\ttarget\t1\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t1\n\t\ttarget\t2\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t2\n\t\ttarget\t0\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t0\n\t\ttarget\t3\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t2\n\t\ttarget\t11\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t11\n\t\ttarget\t12\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t11\n\t\ttarget\t15\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t11\n\t\ttarget\t21\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t12\n\t\ttarget\t13\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t13\n\t\ttarget\t14\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t14\n\t\ttarget\t12\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t15\n\t\ttarget\t16\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t16\n\t\ttarget\t17\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t17\n\t\ttarget\t15\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t21\n\t\ttarget\t19\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t19\n\t\ttarget\t20\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t20\n\t\ttarget\t18\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t18\n\t\ttarget\t21\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t11\n\t\ttarget\t22\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t22\n\t\ttarget\t23\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t22\n\t\ttarget\t24\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t21\n\t\ttarget\t25\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t25\n\t\ttarget\t26\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t25\n\t\ttarget\t27\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t12\n\t\ttarget\t28\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t28\n\t\ttarget\t29\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t28\n\t\ttarget\t30\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t28\n\t\ttarget\t31\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t4\n\t\ttarget\t33\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t4\n\t\ttarget\t32\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t33\n\t\ttarget\t34\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n]\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/special/3cross4cross_wTrees.tglf",
    "content": "0 716.000 358.000 30.000 30.000\n1 716.000 455.000 30.000 30.000\n2 656.000 406.000 30.000 30.000\n3 776.000 406.000 30.000 30.000\n4 891.000 406.000 30.000 30.000\n5 891.000 282.000 30.000 30.000\n6 831.000 216.000 30.000 30.000\n7 951.000 216.000 30.000 30.000\n8 891.000 531.000 30.000 30.000\n9 951.000 599.000 30.000 30.000\n10 831.000 599.000 30.000 30.000\n11 522.000 406.000 30.000 30.000\n12 522.000 282.000 30.000 30.000\n13 462.000 216.000 30.000 30.000\n14 582.000 216.000 30.000 30.000\n15 522.000 531.000 30.000 30.000\n16 582.000 599.000 30.000 30.000\n17 462.000 599.000 30.000 30.000\n18 337.000 358.000 30.000 30.000\n19 337.000 455.000 30.000 30.000\n20 277.000 406.000 30.000 30.000\n21 397.000 406.000 30.000 30.000\n22 440.000 489.000 30.000 30.000\n23 369.000 516.000 30.000 30.000\n24 396.000 559.000 30.000 30.000\n25 385.000 274.000 30.000 30.000\n26 313.000 232.000 30.000 30.000\n27 362.000 208.000 30.000 30.000\n28 642.000 246.000 30.000 30.000\n29 660.000 190.000 30.000 30.000\n30 685.000 213.000 30.000 30.000\n31 702.000 237.000 30.000 30.000\n32 981.000 356.000 30.000 30.000\n33 986.000 414.000 30.000 30.000\n34 1046.000 406.000 30.000 30.000\n#\n4 33\n4 32\n3 1\n11 22\n25 27\n15 16\n13 14\n21 25\n28 29\n8 9\n22 23\n2 11\n19 20\n20 18\n22 24\n18 21\n21 19\n17 15\n12 28\n2 0\n16 17\n25 26\n10 8\n4 3\n4 5\n5 6\n0 3\n28 31\n4 8\n14 12\n11 15\n9 10\n1 2\n11 12\n7 5\n12 13\n11 21\n28 30\n33 34\n6 7\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/special/Arpanet19728_input.tglf",
    "content": "// Derived from http://www.topology-zoo.org/dataset.html\n0 321.5 103.0 30.744216918945312 38.0\n1 441.0 175.0 30.312225341796875 38.0\n2 515.0 319.0 48.79234313964844 38.0\n3 336.0 319.0 22.944168090820312 38.0\n4 38.0 175.0 32.00422668457031 38.0\n5 126.0 103.0 40.332275390625 38.0\n6 69.0 319.0 21.6241455078125 38.0\n7 606.0 175.0 30.060226440429688 38.0\n8 153.0 175.0 31.476226806640625 38.0\n9 35.0 103.0 54.43238830566406 38.0\n10 474.0 247.0 33.012237548828125 38.0\n11 519.0 175.0 31.812225341796875 38.0\n12 281.0 247.0 157.1171417236328 38.0\n13 587.0 319.0 29.508224487304688 38.0\n14 209.0 411.0 48.86433410644531 38.0\n15 391.0 247.0 22.932159423828125 38.0\n16 167.0 483.0 24.720169067382812 38.0\n17 35.0 247.0 49.86033630371094 38.0\n18 581.0 247.0 35.76023864746094 38.0\n19 175.5 319.0 57.98442077636719 38.0\n20 162.0 247.0 28.51220703125 38.0\n21 378.0 411.0 28.596206665039062 38.0\n22 246.5 175.0 41.376312255859375 38.0\n23 83.0 411.0 24.720169067382812 38.0\n24 307.0 483.0 23.508163452148438 38.0\n25 434.5 319.0 35.316253662109375 38.0\n26 502.0 103.0 31.812225341796875 38.0\n27 234.0 555.0 55.11639404296875 38.0\n28 186.0 21.0 18.1201171875 38.0\n#\n0 28\n0 1\n1 10\n1 15\n2 10\n2 11\n3 12\n3 15\n4 17\n4 9\n5 8\n5 6\n6 17\n6 23\n7 18\n7 21\n8 20\n9 28\n10 25\n11 26\n12 22\n13 18\n13 14\n14 19\n16 23\n16 27\n19 20\n20 22\n21 25\n21 24\n24 27\n26 28"
  },
  {
    "path": "cola/libdialect/tests/graphs/special/Belnet2004.tglf",
    "content": "// Derived from http://www.topology-zoo.org/dataset.html\n0 726.0 -21.0 32.0 34.0\n1 523.5 -481.0 35.0 34.0\n2 665.0 -543.0 45.0 34.0\n3 28.5 -83.0 35.0 34.0\n4 762.0 -83.0 104.0 34.0\n5 149.0 -481.0 46.0 34.0\n6 89.5 -83.0 33.0 34.0\n7 168.0 -83.0 68.0 34.0\n8 459.5 -481.0 37.0 34.0\n9 221.0 -481.0 55.0 34.0\n10 552.0 -83.0 68.0 34.0\n11 650.5 -83.0 63.0 34.0\n12 384.0 -481.0 68.0 34.0\n13 398.0 -257.0 47.0 34.0\n14 465.0 -369.0 206.0 34.0\n15 731.0 -543.0 37.0 34.0\n16 375.0 -195.0 482.0 34.0\n17 711.0 -481.0 158.0 34.0\n18 599.0 -543.0 42.0 34.0\n19 793.0 -369.0 30.0 34.0\n20 509.0 -257.0 95.0 34.0\n21 809.0 -21.0 86.0 34.0\n22 300.0 -481.0 44.0 34.0\n#\n0 4\n1 14\n1 16\n2 17\n3 14\n3 16\n4 14\n4 16\n4 17\n4 21\n5 14\n5 16\n6 14\n6 16\n7 14\n7 16\n8 14\n8 16\n9 14\n9 16\n10 14\n10 16\n11 14\n11 16\n12 14\n12 16\n13 14\n13 16\n14 16\n14 17\n14 20\n14 22\n15 17\n16 17\n16 20\n16 22\n17 18\n17 19\n17 21"
  },
  {
    "path": "cola/libdialect/tests/graphs/special/Cernet.tglf",
    "content": "// Derived from http://www.topology-zoo.org/dataset.html\n0 119.0 -83.0 77.0 34.0\n1 521.0 -83.0 61.0 34.0\n2 582.0 -491.0 104.0 34.0\n3 800.0 -399.0 61.0 34.0\n4 629.0 -307.0 47.0 34.0\n5 422.0 -491.0 54.0 34.0\n6 510.0 -307.0 68.0 34.0\n7 618.0 -215.0 128.0 34.0\n8 797.0 -83.0 63.0 34.0\n9 362.0 -553.0 69.0 34.0\n10 197.0 -83.0 37.0 34.0\n11 294.0 -635.0 68.0 34.0\n12 263.0 -83.0 45.0 34.0\n13 114.0 -491.0 68.0 34.0\n14 407.0 -399.0 77.0 34.0\n15 324.5 -83.0 31.0 34.0\n16 398.0 -307.0 49.0 34.0\n17 197.0 -399.0 41.0 34.0\n18 587.0 -21.0 41.0 34.0\n19 216.0 -491.0 56.0 34.0\n20 660.0 -83.0 152.0 34.0\n21 180.0 -307.0 200.0 34.0\n22 653.0 -21.0 43.0 34.0\n23 131.0 -399.0 55.0 34.0\n24 725.0 -21.0 61.0 34.0\n25 32.0 -307.0 48.0 34.0\n26 375.5 -83.0 25.0 34.0\n27 317.0 -307.0 37.0 34.0\n28 966.0 -399.0 56.0 34.0\n29 467.0 -707.0 54.0 34.0\n30 623.0 -553.0 67.0 34.0\n31 450.0 -769.0 68.0 34.0\n32 869.5 -215.0 45.0 34.0\n33 437.0 -83.0 64.0 34.0\n34 968.0 -215.0 53.0 34.0\n35 822.0 -307.0 164.0 34.0\n36 897.5 -83.0 61.0 34.0\n37 666.0 -399.0 80.0 34.0\n38 32.0 -83.0 47.0 34.0\n39 534.0 -553.0 56.0 34.0\n40 357.0 -215.0 278.0 34.0\n#\n0 40\n1 7\n1 40\n2 3\n2 6\n2 9\n2 11\n2 30\n2 35\n2 39\n2 40\n3 35\n4 7\n4 37\n5 6\n5 14\n6 7\n6 14\n6 39\n6 40\n7 8\n7 20\n7 35\n9 40\n10 40\n11 21\n11 29\n11 30\n11 31\n12 40\n13 21\n13 23\n14 16\n15 40\n16 40\n17 19\n17 21\n18 20\n19 21\n20 22\n20 24\n20 40\n21 23\n21 40\n25 38\n25 40\n26 40\n27 40\n28 34\n28 35\n29 31\n32 35\n32 36\n33 40\n34 35\n35 36\n35 37\n38 40"
  },
  {
    "path": "cola/libdialect/tests/graphs/special/Claranet.tglf",
    "content": "// Derived from http://www.topology-zoo.org/dataset.html\n0 197.0 -83.0 46.0 34.0\n1 294.0 -207.0 80.0 34.0\n2 317.0 -145.0 47.0 34.0\n3 231.0 -279.0 86.0 34.0\n4 79.0 -413.0 30.0 34.0\n5 252.0 -413.0 44.0 34.0\n6 131.0 -413.0 37.0 34.0\n7 138.0 -341.0 128.0 34.0\n8 323.0 -279.0 59.0 34.0\n9 35.0 -207.0 68.0 34.0\n10 254.0 -341.0 55.0 34.0\n11 156.0 -207.0 92.0 34.0\n12 119.0 -145.0 63.0 34.0\n13 228.0 -21.0 44.0 34.0\n14 228.0 -145.0 92.0 34.0\n#\n0 13\n0 14\n1 2\n1 3\n1 8\n1 14\n3 7\n3 9\n3 10\n3 11\n3 14\n4 7\n5 7\n5 8\n6 7\n11 12\n11 14\n13 14"
  },
  {
    "path": "cola/libdialect/tests/graphs/special/Garr201001.tglf",
    "content": "// Derived from http://www.topology-zoo.org/dataset.html\n0 449.0 -831.0 46.0 34.0\n1 299.0 -923.0 41.0 34.0\n2 523.5 -1015.0 29.0 34.0\n3 311.0 -729.0 41.0 34.0\n4 543.0 -463.0 158.0 34.0\n5 366.0 -923.0 56.0 34.0\n6 222.0 -463.0 20.0 34.0\n7 564.0 -1015.0 20.0 34.0\n8 462.0 -565.0 68.0 34.0\n9 342.0 -247.0 20.0 34.0\n10 467.0 -21.0 22.0 34.0\n11 371.0 -391.0 22.0 34.0\n12 252.0 -565.0 128.0 34.0\n13 669.0 -923.0 74.0 34.0\n14 55.0 -729.0 30.0 34.0\n15 180.0 -1015.0 32.0 34.0\n16 465.0 -247.0 74.0 34.0\n17 418.5 -83.0 23.0 34.0\n18 467.0 -83.0 22.0 34.0\n19 513.0 -165.0 122.0 34.0\n20 125.0 -923.0 51.0 34.0\n21 605.5 -637.0 21.0 34.0\n22 215.0 -923.0 92.0 34.0\n23 575.0 -831.0 41.0 34.0\n24 630.0 -565.0 68.0 34.0\n25 533.0 -565.0 43.0 34.0\n26 528.0 -391.0 32.0 34.0\n27 653.0 -637.0 22.0 34.0\n28 582.0 -247.0 128.0 34.0\n29 610.5 -165.0 23.0 34.0\n30 515.5 -83.0 21.0 34.0\n31 593.0 -83.0 98.0 34.0\n32 635.0 -831.0 38.0 34.0\n33 515.0 -831.0 33.0 34.0\n34 423.0 -463.0 50.0 34.0\n35 408.0 -391.0 20.0 34.0\n36 12.0 -729.0 20.0 34.0\n37 225.0 -637.0 74.0 34.0\n38 285.0 -831.0 86.0 34.0\n39 611.5 -1015.0 21.0 34.0\n40 459.0 -729.0 218.0 34.0\n41 396.0 -1015.0 44.0 34.0\n42 522.0 -637.0 44.0 34.0\n43 345.0 -637.0 50.0 34.0\n44 377.5 -165.0 21.0 34.0\n45 143.0 -247.0 22.0 34.0\n46 425.0 -165.0 22.0 34.0\n47 585.0 -329.0 26.0 34.0\n48 537.0 -329.0 26.0 34.0\n49 345.0 -329.0 38.0 34.0\n50 191.0 -247.0 22.0 34.0\n51 228.0 -247.0 20.0 34.0\n52 216.0 -329.0 164.0 34.0\n53 276.5 -247.0 21.0 34.0\n#\n0 40\n1 38\n2 13\n3 43\n4 8\n4 12\n4 16\n4 24\n4 25\n4 26\n4 28\n4 40\n4 47\n5 15\n5 38\n5 40\n5 41\n6 12\n7 13\n8 34\n8 42\n8 43\n9 49\n10 18\n11 34\n12 34\n12 37\n12 38\n12 49\n12 52\n13 38\n13 39\n13 40\n14 37\n15 37\n16 19\n16 44\n16 46\n16 52\n17 19\n18 19\n19 28\n19 30\n19 31\n20 38\n21 24\n22 38\n23 40\n24 27\n24 28\n26 48\n28 29\n28 47\n28 48\n28 49\n32 40\n33 40\n34 35\n36 37\n37 38\n38 40\n40 41\n40 42\n40 43\n45 52\n50 52\n51 52\n52 53"
  },
  {
    "path": "cola/libdialect/tests/graphs/special/GtsSlovakia_input.tglf",
    "content": "// Derived from http://www.topology-zoo.org/dataset.html\n0 407.0 133.0 30.564224243164062 38.0\n1 473.0 133.0 47.47233581542969 38.0\n2 581.0 133.0 127.69291687011719 38.0\n3 518.0 727.0 41.70030212402344 38.0\n4 523.0 511.0 40.968292236328125 38.0\n5 279.0 133.0 88.5006103515625 38.0\n6 666.0 275.0 97.0 38.0\n7 675.0 645.0 36.060272216796875 38.0\n8 651.0 573.0 38.088287353515625 38.0\n9 655.5 511.0 50.088348388671875 38.0\n10 497.0 377.0 52.272369384765625 38.0\n11 677.0 727.0 40.08027648925781 38.0\n12 581.0 377.0 75.31253051757812 38.0\n13 599.0 727.0 55.89637756347656 38.0\n14 713.0 133.0 96.20468139648438 38.0\n15 557.0 573.0 62.868438720703125 38.0\n16 371.0 377.0 38.628265380859375 38.0\n17 827.0 133.0 83.74859619140625 38.0\n18 929.0 133.0 69.70849609375 38.0\n19 431.0 377.0 28.2362060546875 38.0\n20 665.0 377.0 42.08428955078125 38.0\n21 1019.0 133.0 57.69639587402344 38.0\n22 468.5 21.0 41.736297607421875 38.0\n23 41.0 21.0 71.92851257324219 38.0\n24 119.0 21.0 30.564224243164062 38.0\n25 740.5 727.0 20.112136840820312 38.0\n26 209.0 21.0 100.8607177734375 38.0\n27 272.0 275.0 32.68821716308594 38.0\n28 299.0 21.0 37.50025939941406 38.0\n29 446.5 449.0 30.300201416015625 38.0\n30 371.0 21.0 64.53646850585938 38.0\n31 260.0 377.0 96.16867065429688 38.0\n32 203.0 275.0 46.17631530761719 38.0\n33 131.0 275.0 51.02436828613281 38.0\n34 1091.0 133.0 30.564224243164062 38.0\n#\n0 6\n1 6\n2 6\n3 7\n3 4\n4 29\n4 8\n5 23\n5 24\n5 26\n5 27\n5 28\n5 30\n5 32\n5 22\n5 33\n5 6\n5 29\n6 10\n6 12\n6 14\n6 16\n6 17\n6 18\n6 19\n6 20\n6 21\n6 34\n6 7\n7 25\n7 11\n7 13\n7 15\n7 8\n8 9\n20 29\n27 31"
  },
  {
    "path": "cola/libdialect/tests/graphs/special/Janetlense.tglf",
    "content": "// Derived from http://www.topology-zoo.org/dataset.html\n0 389.0 -651.0 63.0 34.0\n1 576.0 -651.0 56.0 34.0\n2 915.0 -215.0 146.0 34.0\n3 756.0 -479.0 152.0 34.0\n4 695.0 -651.0 121.0 34.0\n5 963.0 -651.0 62.0 34.0\n6 972.0 -83.0 80.0 34.0\n7 774.0 -357.0 44.0 34.0\n8 839.0 -651.0 125.0 34.0\n9 77.0 -83.0 147.0 34.0\n10 209.0 -83.0 80.0 34.0\n11 1073.0 -83.0 65.0 34.0\n12 299.0 -651.0 70.0 34.0\n13 479.0 -651.0 80.0 34.0\n14 819.0 -21.0 122.0 34.0\n15 1231.0 -83.0 42.0 34.0\n16 551.0 -83.0 147.0 34.0\n17 1112.0 -21.0 131.0 34.0\n18 740.0 -713.0 141.0 34.0\n19 1157.0 -83.0 58.0 34.0\n#\n0 2\n0 3\n1 2\n1 3\n2 3\n2 4\n2 5\n2 6\n2 7\n2 8\n2 9\n2 10\n2 11\n2 12\n2 13\n2 15\n2 16\n2 19\n3 4\n3 5\n3 6\n3 7\n3 8\n3 9\n3 10\n3 11\n3 12\n3 13\n3 15\n3 16\n3 19\n4 18\n14 16\n17 19"
  },
  {
    "path": "cola/libdialect/tests/graphs/special/SepMatrixIter.tglf",
    "content": "0 0 0 5 5\n1 10 10 5 5\n2 20 20 5 5\n3 30 30 5 5\n4 40 40 5 5\n5 50 50 5 5\n6 60 60 5 5\n7 70 70 5 5\n8 80 80 5 5\n#\n#\n2 3 C E >= 10\n2 5 C E >= 10\n2 7 C E >= 10\n3 5 C E >= 10\n3 6 C E >= 10\n7 8 C E >= 10\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/special/X_4.gml",
    "content": "Creator\t\"yFiles\"\nVersion\t\"2.12\"\ngraph\n[\n\thierarchic\t1\n\tlabel\t\"\"\n\tdirected\t1\n\tnode\n\t[\n\t\tid\t0\n\t\tlabel\t\"1\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t278.0\n\t\t\ty\t630.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"1\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t1\n\t\tlabel\t\"2\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t325.0\n\t\t\ty\t598.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"2\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t2\n\t\tlabel\t\"3\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t403.0\n\t\t\ty\t551.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"3\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t3\n\t\tlabel\t\"4\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t470.0\n\t\t\ty\t504.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"4\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t4\n\t\tlabel\t\"5\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t518.0\n\t\t\ty\t465.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"5\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t5\n\t\tlabel\t\"6\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t570.0\n\t\t\ty\t508.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"6\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t6\n\t\tlabel\t\"7\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t624.0\n\t\t\ty\t556.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"7\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t7\n\t\tlabel\t\"8\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t673.0\n\t\t\ty\t596.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"8\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t8\n\t\tlabel\t\"9\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t724.0\n\t\t\ty\t636.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"9\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t9\n\t\tlabel\t\"10\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t571.0\n\t\t\ty\t418.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"10\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t10\n\t\tlabel\t\"11\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t623.0\n\t\t\ty\t372.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"11\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t11\n\t\tlabel\t\"12\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t687.0\n\t\t\ty\t313.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"12\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t12\n\t\tlabel\t\"13\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t756.0\n\t\t\ty\t246.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"13\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t13\n\t\tlabel\t\"14\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t443.0\n\t\t\ty\t409.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"14\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t14\n\t\tlabel\t\"15\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t374.0\n\t\t\ty\t358.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"15\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t15\n\t\tlabel\t\"16\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t323.0\n\t\t\ty\t296.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"16\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t16\n\t\tlabel\t\"17\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t268.0\n\t\t\ty\t245.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"17\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t0\n\t\ttarget\t1\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t1\n\t\ttarget\t2\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t2\n\t\ttarget\t3\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t3\n\t\ttarget\t4\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t4\n\t\ttarget\t9\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t9\n\t\ttarget\t10\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t10\n\t\ttarget\t11\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t11\n\t\ttarget\t12\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t8\n\t\ttarget\t7\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t7\n\t\ttarget\t6\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t6\n\t\ttarget\t5\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t5\n\t\ttarget\t4\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t4\n\t\ttarget\t13\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t13\n\t\ttarget\t14\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t14\n\t\ttarget\t15\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t15\n\t\ttarget\t16\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n]\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/special/X_4.tglf",
    "content": "0 278.000 630.000 30.000 30.000\n1 325.000 598.000 30.000 30.000\n2 403.000 551.000 30.000 30.000\n3 470.000 504.000 30.000 30.000\n4 518.000 465.000 30.000 30.000\n5 570.000 508.000 30.000 30.000\n6 624.000 556.000 30.000 30.000\n7 673.000 596.000 30.000 30.000\n8 724.000 636.000 30.000 30.000\n9 571.000 418.000 30.000 30.000\n10 623.000 372.000 30.000 30.000\n11 687.000 313.000 30.000 30.000\n12 756.000 246.000 30.000 30.000\n13 443.000 409.000 30.000 30.000\n14 374.000 358.000 30.000 30.000\n15 323.000 296.000 30.000 30.000\n16 268.000 245.000 30.000 30.000\n#\n4 9\n10 11\n7 6\n5 4\n6 5\n13 14\n0 1\n2 3\n9 10\n8 7\n14 15\n15 16\n11 12\n3 4\n4 13\n1 2\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/special/Y_4.gml",
    "content": "Creator\t\"yFiles\"\nVersion\t\"2.12\"\ngraph\n[\n\thierarchic\t1\n\tlabel\t\"\"\n\tdirected\t1\n\tnode\n\t[\n\t\tid\t0\n\t\tlabel\t\"1\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t386.0\n\t\t\ty\t156.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"1\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t1\n\t\tlabel\t\"2\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t421.0\n\t\t\ty\t193.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"2\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t2\n\t\tlabel\t\"3\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t460.0\n\t\t\ty\t244.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"3\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t3\n\t\tlabel\t\"4\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t495.0\n\t\t\ty\t281.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"4\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t4\n\t\tlabel\t\"5\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t538.0\n\t\t\ty\t334.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"5\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t5\n\t\tlabel\t\"6\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t581.0\n\t\t\ty\t299.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"6\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t6\n\t\tlabel\t\"7\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t631.0\n\t\t\ty\t258.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"7\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t7\n\t\tlabel\t\"8\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t674.0\n\t\t\ty\t216.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"8\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t8\n\t\tlabel\t\"9\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t717.0\n\t\t\ty\t178.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"9\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t9\n\t\tlabel\t\"10\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t536.0\n\t\t\ty\t395.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"10\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t10\n\t\tlabel\t\"11\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t529.0\n\t\t\ty\t456.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"11\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t11\n\t\tlabel\t\"12\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t515.0\n\t\t\ty\t504.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"12\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t12\n\t\tlabel\t\"13\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t506.0\n\t\t\ty\t564.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"13\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t0\n\t\ttarget\t1\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t1\n\t\ttarget\t2\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t2\n\t\ttarget\t3\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t3\n\t\ttarget\t4\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t4\n\t\ttarget\t5\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t5\n\t\ttarget\t6\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t6\n\t\ttarget\t7\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t7\n\t\ttarget\t8\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t4\n\t\ttarget\t9\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t9\n\t\ttarget\t10\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t10\n\t\ttarget\t11\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t11\n\t\ttarget\t12\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n]\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/special/Y_4.tglf",
    "content": "0 386.000 156.000 30.000 30.000\n1 421.000 193.000 30.000 30.000\n2 460.000 244.000 30.000 30.000\n3 495.000 281.000 30.000 30.000\n4 538.000 334.000 30.000 30.000\n5 581.000 299.000 30.000 30.000\n6 631.000 258.000 30.000 30.000\n7 674.000 216.000 30.000 30.000\n8 717.000 178.000 30.000 30.000\n9 536.000 395.000 30.000 30.000\n10 529.000 456.000 30.000 30.000\n11 515.000 504.000 30.000 30.000\n12 506.000 564.000 30.000 30.000\n#\n5 6\n9 10\n11 12\n10 11\n4 5\n2 3\n4 9\n3 4\n7 8\n6 7\n0 1\n1 2\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/special/aspectratio01.gml",
    "content": "Creator\t\"yFiles\"\nVersion\t\"2.12\"\ngraph\n[\n\thierarchic\t1\n\tlabel\t\"\"\n\tdirected\t1\n\tnode\n\t[\n\t\tid\t0\n\t\tlabel\t\"1\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t327.5\n\t\t\ty\t356.0\n\t\t\tw\t11.0\n\t\t\th\t308.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"1\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t1\n\t\tlabel\t\"1\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t353.5\n\t\t\ty\t356.0\n\t\t\tw\t11.0\n\t\t\th\t308.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"1\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t2\n\t\tlabel\t\"1\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t379.5\n\t\t\ty\t356.0\n\t\t\tw\t11.0\n\t\t\th\t308.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"1\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t3\n\t\tlabel\t\"1\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t405.5\n\t\t\ty\t356.0\n\t\t\tw\t11.0\n\t\t\th\t308.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"1\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t4\n\t\tlabel\t\"1\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t431.5\n\t\t\ty\t356.0\n\t\t\tw\t11.0\n\t\t\th\t308.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"1\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t5\n\t\tlabel\t\"1\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t457.5\n\t\t\ty\t356.0\n\t\t\tw\t11.0\n\t\t\th\t308.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"1\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t6\n\t\tlabel\t\"1\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t483.5\n\t\t\ty\t356.0\n\t\t\tw\t11.0\n\t\t\th\t308.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"1\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t7\n\t\tlabel\t\"1\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t509.5\n\t\t\ty\t356.0\n\t\t\tw\t11.0\n\t\t\th\t308.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"1\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t8\n\t\tlabel\t\"9\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t415.0\n\t\t\ty\t549.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"9\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t9\n\t\tlabel\t\"10\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t285.0\n\t\t\ty\t549.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"10\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t10\n\t\tlabel\t\"11\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t545.0\n\t\t\ty\t549.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"11\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t11\n\t\tlabel\t\"12\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t285.0\n\t\t\ty\t173.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"12\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t12\n\t\tlabel\t\"13\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t545.0\n\t\t\ty\t173.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"13\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t8\n\t\ttarget\t9\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t9\n\t\ttarget\t11\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t11\n\t\ttarget\t12\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t12\n\t\ttarget\t10\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t10\n\t\ttarget\t8\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t8\n\t\ttarget\t0\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t8\n\t\ttarget\t1\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t8\n\t\ttarget\t2\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t8\n\t\ttarget\t3\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t8\n\t\ttarget\t4\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t8\n\t\ttarget\t5\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t8\n\t\ttarget\t6\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t8\n\t\ttarget\t7\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n]\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/special/bend_costs.tglf",
    "content": "0 0 100 70 70\n1 0 241 70 70\n2 100 341 70 70\n3 241 341 70 70\n4 341 241 70 70\n5 341 100 70 70\n6 241 0 70 70\n7 100 0 70 70\n8 500 0 70 70\n9 600 100 70 70\n10 700 200 70 70\n11 841 200 70 70\n12 941 100 70 70\n13 1041 0 70 70\n#\n0 1\n1 2\n2 3\n3 4\n4 5\n5 6\n6 7\n7 0\n8 9\n9 10\n10 11\n11 12\n12 13\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/special/bundlecross.gml",
    "content": "Creator\t\"yFiles\"\nVersion\t\"2.12\"\ngraph\n[\n\thierarchic\t1\n\tlabel\t\"\"\n\tdirected\t1\n\tnode\n\t[\n\t\tid\t0\n\t\tlabel\t\"1\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t382.0\n\t\t\ty\t311.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"1\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t1\n\t\tlabel\t\"2\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t461.0\n\t\t\ty\t349.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"2\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t2\n\t\tlabel\t\"3\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t521.0\n\t\t\ty\t349.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"3\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t3\n\t\tlabel\t\"4\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t581.0\n\t\t\ty\t349.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"4\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t4\n\t\tlabel\t\"5\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t641.0\n\t\t\ty\t349.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"5\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t5\n\t\tlabel\t\"6\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t550.0\n\t\t\ty\t254.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"6\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t6\n\t\tlabel\t\"7\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t550.0\n\t\t\ty\t441.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"7\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t7\n\t\tlabel\t\"8\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t382.0\n\t\t\ty\t441.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"8\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t8\n\t\tlabel\t\"9\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t382.0\n\t\t\ty\t254.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"9\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t0\n\t\ttarget\t1\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t0\n\t\ttarget\t2\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t0\n\t\ttarget\t3\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t0\n\t\ttarget\t4\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t1\n\t\ttarget\t2\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t3\n\t\ttarget\t4\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t0\n\t\ttarget\t8\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t8\n\t\ttarget\t5\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t5\n\t\ttarget\t6\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t6\n\t\ttarget\t7\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t7\n\t\ttarget\t0\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t5\n\t\ttarget\t4\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t4\n\t\ttarget\t6\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n]\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/special/bundlecross.tglf",
    "content": "0 382.000 311.000 30.000 30.000\n1 461.000 349.000 30.000 30.000\n2 521.000 349.000 30.000 30.000\n3 581.000 349.000 30.000 30.000\n4 641.000 349.000 30.000 30.000\n5 550.000 254.000 30.000 30.000\n6 550.000 441.000 30.000 30.000\n7 382.000 441.000 30.000 30.000\n8 382.000 254.000 30.000 30.000\n#\n4 6\n6 7\n0 8\n5 4\n0 1\n7 0\n1 2\n0 3\n8 5\n0 2\n5 6\n0 4\n3 4\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/special/bundlerouting.gml",
    "content": "Creator\t\"yFiles\"\nVersion\t\"2.12\"\ngraph\n[\n\thierarchic\t1\n\tlabel\t\"\"\n\tdirected\t1\n\tnode\n\t[\n\t\tid\t0\n\t\tlabel\t\"1\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t382.0\n\t\t\ty\t311.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"1\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t1\n\t\tlabel\t\"2\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t461.0\n\t\t\ty\t349.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"2\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t2\n\t\tlabel\t\"3\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t521.0\n\t\t\ty\t349.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"3\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t3\n\t\tlabel\t\"4\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t581.0\n\t\t\ty\t349.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"4\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t4\n\t\tlabel\t\"5\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t641.0\n\t\t\ty\t349.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"5\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t5\n\t\tlabel\t\"6\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t309.0\n\t\t\ty\t259.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"6\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t6\n\t\tlabel\t\"7\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t309.0\n\t\t\ty\t198.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"7\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t7\n\t\tlabel\t\"8\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t309.0\n\t\t\ty\t144.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"8\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t8\n\t\tlabel\t\"9\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t309.0\n\t\t\ty\t89.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"9\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t0\n\t\ttarget\t1\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t0\n\t\ttarget\t2\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t0\n\t\ttarget\t3\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t0\n\t\ttarget\t4\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t1\n\t\ttarget\t2\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t2\n\t\ttarget\t3\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t3\n\t\ttarget\t4\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t5\n\t\ttarget\t6\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t6\n\t\ttarget\t7\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t7\n\t\ttarget\t8\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t0\n\t\ttarget\t5\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t0\n\t\ttarget\t6\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t0\n\t\ttarget\t7\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t0\n\t\ttarget\t8\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n]\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/special/bundlerouting.tglf",
    "content": "0 382.000 311.000 30.000 30.000\n1 461.000 349.000 30.000 30.000\n2 521.000 349.000 30.000 30.000\n3 581.000 349.000 30.000 30.000\n4 641.000 349.000 30.000 30.000\n5 309.000 259.000 30.000 30.000\n6 309.000 198.000 30.000 30.000\n7 309.000 144.000 30.000 30.000\n8 309.000 89.000 30.000 30.000\n#\n6 7\n0 3\n0 6\n1 2\n2 3\n0 7\n7 8\n5 6\n0 8\n0 2\n0 5\n0 4\n0 1\n3 4\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/special/bundlerouting1.gml",
    "content": "Creator\t\"yFiles\"\nVersion\t\"2.12\"\ngraph\n[\n\thierarchic\t1\n\tlabel\t\"\"\n\tdirected\t1\n\tnode\n\t[\n\t\tid\t0\n\t\tlabel\t\"1\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t382.0\n\t\t\ty\t311.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"1\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t1\n\t\tlabel\t\"2\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t461.0\n\t\t\ty\t349.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"2\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t2\n\t\tlabel\t\"3\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t521.0\n\t\t\ty\t349.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"3\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t3\n\t\tlabel\t\"4\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t581.0\n\t\t\ty\t349.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"4\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t4\n\t\tlabel\t\"5\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t641.0\n\t\t\ty\t349.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"5\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t0\n\t\ttarget\t1\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t0\n\t\ttarget\t2\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t0\n\t\ttarget\t3\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t0\n\t\ttarget\t4\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t1\n\t\ttarget\t2\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t2\n\t\ttarget\t3\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t3\n\t\ttarget\t4\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n]\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/special/bundlerouting1.tglf",
    "content": "0 382.000 311.000 30.000 30.000\n1 461.000 349.000 30.000 30.000\n2 521.000 349.000 30.000 30.000\n3 581.000 349.000 30.000 30.000\n4 641.000 349.000 30.000 30.000\n#\n1 2\n3 4\n0 2\n0 3\n2 3\n0 4\n0 1\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/special/bundlerouting2.gml",
    "content": "Creator\t\"yFiles\"\nVersion\t\"2.12\"\ngraph\n[\n\thierarchic\t1\n\tlabel\t\"\"\n\tdirected\t1\n\tnode\n\t[\n\t\tid\t0\n\t\tlabel\t\"1\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t382.0\n\t\t\ty\t311.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"1\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t1\n\t\tlabel\t\"2\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t461.0\n\t\t\ty\t349.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"2\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t2\n\t\tlabel\t\"3\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t521.0\n\t\t\ty\t349.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"3\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t3\n\t\tlabel\t\"4\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t581.0\n\t\t\ty\t349.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"4\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t4\n\t\tlabel\t\"5\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t641.0\n\t\t\ty\t349.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"5\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t5\n\t\tlabel\t\"6\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t309.0\n\t\t\ty\t259.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"6\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t6\n\t\tlabel\t\"7\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t309.0\n\t\t\ty\t198.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"7\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t7\n\t\tlabel\t\"8\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t309.0\n\t\t\ty\t144.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"8\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t8\n\t\tlabel\t\"9\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t309.0\n\t\t\ty\t89.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"9\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t0\n\t\ttarget\t1\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t0\n\t\ttarget\t2\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t0\n\t\ttarget\t3\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t0\n\t\ttarget\t4\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t1\n\t\ttarget\t2\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t2\n\t\ttarget\t3\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t3\n\t\ttarget\t4\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t5\n\t\ttarget\t6\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t6\n\t\ttarget\t7\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t7\n\t\ttarget\t8\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t0\n\t\ttarget\t5\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t0\n\t\ttarget\t6\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t0\n\t\ttarget\t7\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t0\n\t\ttarget\t8\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n]\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/special/bundlerouting2.tglf",
    "content": "0 382.000 311.000 30.000 30.000\n1 461.000 349.000 30.000 30.000\n2 521.000 349.000 30.000 30.000\n3 581.000 349.000 30.000 30.000\n4 641.000 349.000 30.000 30.000\n5 309.000 259.000 30.000 30.000\n6 309.000 198.000 30.000 30.000\n7 309.000 144.000 30.000 30.000\n8 309.000 89.000 30.000 30.000\n#\n0 4\n0 5\n0 2\n0 1\n6 7\n1 2\n2 3\n5 6\n0 7\n7 8\n0 6\n0 8\n0 3\n3 4\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/special/chainconfig01.gml",
    "content": "Creator\t\"yFiles\"\nVersion\t\"2.12\"\ngraph\n[\n\thierarchic\t1\n\tlabel\t\"\"\n\tdirected\t1\n\tnode\n\t[\n\t\tid\t0\n\t\tlabel\t\"1\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t358.0\n\t\t\ty\t102.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"1\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t1\n\t\tlabel\t\"2\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t293.0\n\t\t\ty\t128.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"2\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t2\n\t\tlabel\t\"3\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t242.0\n\t\t\ty\t189.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"3\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t3\n\t\tlabel\t\"4\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t224.0\n\t\t\ty\t267.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"4\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t4\n\t\tlabel\t\"5\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t236.0\n\t\t\ty\t347.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"5\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t5\n\t\tlabel\t\"6\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t292.0\n\t\t\ty\t384.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"6\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t6\n\t\tlabel\t\"7\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t374.0\n\t\t\ty\t396.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"7\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t7\n\t\tlabel\t\"8\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t455.0\n\t\t\ty\t404.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"8\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t8\n\t\tlabel\t\"9\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t530.0\n\t\t\ty\t415.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"9\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t9\n\t\tlabel\t\"10\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t598.0\n\t\t\ty\t423.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"10\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t10\n\t\tlabel\t\"11\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t669.0\n\t\t\ty\t434.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"11\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t11\n\t\tlabel\t\"12\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t729.0\n\t\t\ty\t451.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"12\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t12\n\t\tlabel\t\"13\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t772.0\n\t\t\ty\t492.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"13\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t13\n\t\tlabel\t\"14\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t800.0\n\t\t\ty\t545.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"14\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t14\n\t\tlabel\t\"15\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t798.0\n\t\t\ty\t602.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"15\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t15\n\t\tlabel\t\"16\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t783.0\n\t\t\ty\t665.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"16\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t16\n\t\tlabel\t\"17\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t746.0\n\t\t\ty\t714.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"17\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t0\n\t\ttarget\t1\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t1\n\t\ttarget\t2\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t2\n\t\ttarget\t3\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t3\n\t\ttarget\t4\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t4\n\t\ttarget\t5\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t5\n\t\ttarget\t6\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t6\n\t\ttarget\t7\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t7\n\t\ttarget\t8\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t8\n\t\ttarget\t9\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t9\n\t\ttarget\t10\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t10\n\t\ttarget\t11\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t11\n\t\ttarget\t12\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t12\n\t\ttarget\t13\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t13\n\t\ttarget\t14\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t14\n\t\ttarget\t15\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t15\n\t\ttarget\t16\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n]\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/special/chainconfig01.tglf",
    "content": "0 358.000 102.000 30.000 30.000\n1 293.000 128.000 30.000 30.000\n2 242.000 189.000 30.000 30.000\n3 224.000 267.000 30.000 30.000\n4 236.000 347.000 30.000 30.000\n5 292.000 384.000 30.000 30.000\n6 374.000 396.000 30.000 30.000\n7 455.000 404.000 30.000 30.000\n8 530.000 415.000 30.000 30.000\n9 598.000 423.000 30.000 30.000\n10 669.000 434.000 30.000 30.000\n11 729.000 451.000 30.000 30.000\n12 772.000 492.000 30.000 30.000\n13 800.000 545.000 30.000 30.000\n14 798.000 602.000 30.000 30.000\n15 783.000 665.000 30.000 30.000\n16 746.000 714.000 30.000 30.000\n#\n2 3\n0 1\n13 14\n11 12\n5 6\n3 4\n7 8\n14 15\n15 16\n4 5\n6 7\n9 10\n1 2\n12 13\n10 11\n8 9\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/special/chains_and_cycles.gml",
    "content": "Creator\t\"yFiles\"\nVersion\t\"2.12\"\ngraph\n[\n\thierarchic\t1\n\tlabel\t\"\"\n\tdirected\t1\n\tnode\n\t[\n\t\tid\t0\n\t\tlabel\t\"1\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t251.0\n\t\t\ty\t154.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"1\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t1\n\t\tlabel\t\"2\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t384.0\n\t\t\ty\t181.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"2\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t2\n\t\tlabel\t\"3\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t443.0\n\t\t\ty\t289.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"3\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t3\n\t\tlabel\t\"4\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t365.0\n\t\t\ty\t399.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"4\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t4\n\t\tlabel\t\"5\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t172.0\n\t\t\ty\t400.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"5\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t5\n\t\tlabel\t\"6\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t129.0\n\t\t\ty\t249.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"6\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t6\n\t\tlabel\t\"7\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t611.0\n\t\t\ty\t91.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"7\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t7\n\t\tlabel\t\"8\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t659.0\n\t\t\ty\t150.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"8\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t8\n\t\tlabel\t\"9\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t706.0\n\t\t\ty\t216.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"9\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t9\n\t\tlabel\t\"10\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t764.0\n\t\t\ty\t281.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"10\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t10\n\t\tlabel\t\"11\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t815.0\n\t\t\ty\t344.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"11\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t11\n\t\tlabel\t\"12\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t329.0\n\t\t\ty\t537.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"12\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t12\n\t\tlabel\t\"13\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t419.0\n\t\t\ty\t535.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"13\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t13\n\t\tlabel\t\"14\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t501.0\n\t\t\ty\t537.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"14\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t14\n\t\tlabel\t\"15\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t592.0\n\t\t\ty\t532.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"15\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t15\n\t\tlabel\t\"16\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t711.0\n\t\t\ty\t525.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"16\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t16\n\t\tlabel\t\"17\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t504.0\n\t\t\ty\t625.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"17\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t17\n\t\tlabel\t\"18\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t504.0\n\t\t\ty\t707.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"18\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t18\n\t\tlabel\t\"19\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t503.0\n\t\t\ty\t782.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"19\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t19\n\t\tlabel\t\"20\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t503.0\n\t\t\ty\t867.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"20\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t20\n\t\tlabel\t\"21\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t416.0\n\t\t\ty\t861.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"21\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t21\n\t\tlabel\t\"22\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t329.0\n\t\t\ty\t860.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"22\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t22\n\t\tlabel\t\"23\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t327.0\n\t\t\ty\t689.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"23\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t23\n\t\tlabel\t\"24\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t598.0\n\t\t\ty\t866.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"24\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t24\n\t\tlabel\t\"25\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t729.0\n\t\t\ty\t870.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"25\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t25\n\t\tlabel\t\"26\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t721.0\n\t\t\ty\t688.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"26\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t26\n\t\tlabel\t\"27\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t782.0\n\t\t\ty\t520.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"27\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t27\n\t\tlabel\t\"28\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t850.0\n\t\t\ty\t517.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"28\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t28\n\t\tlabel\t\"29\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t911.0\n\t\t\ty\t513.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"29\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t29\n\t\tlabel\t\"30\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t953.0\n\t\t\ty\t459.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"30\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t30\n\t\tlabel\t\"31\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t997.0\n\t\t\ty\t392.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"31\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t31\n\t\tlabel\t\"32\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t1070.0\n\t\t\ty\t368.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"32\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t32\n\t\tlabel\t\"33\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t1123.0\n\t\t\ty\t411.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"33\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t33\n\t\tlabel\t\"34\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t1140.0\n\t\t\ty\t486.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"34\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t34\n\t\tlabel\t\"35\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t1140.0\n\t\t\ty\t580.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"35\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t35\n\t\tlabel\t\"36\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t1087.0\n\t\t\ty\t637.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"36\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t36\n\t\tlabel\t\"37\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t998.0\n\t\t\ty\t623.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"37\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t37\n\t\tlabel\t\"38\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t945.0\n\t\t\ty\t582.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"38\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t38\n\t\tlabel\t\"39\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t635.0\n\t\t\ty\t442.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"39\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t39\n\t\tlabel\t\"40\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t713.0\n\t\t\ty\t390.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"40\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t40\n\t\tlabel\t\"41\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t779.0\n\t\t\ty\t438.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"41\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t41\n\t\tlabel\t\"42\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t580.0\n\t\t\ty\t380.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"42\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t42\n\t\tlabel\t\"43\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t681.0\n\t\t\ty\t325.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"43\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t0\n\t\ttarget\t1\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t1\n\t\ttarget\t2\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t2\n\t\ttarget\t3\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t3\n\t\ttarget\t4\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t4\n\t\ttarget\t5\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t5\n\t\ttarget\t0\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t6\n\t\ttarget\t7\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t7\n\t\ttarget\t8\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t8\n\t\ttarget\t9\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t9\n\t\ttarget\t10\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t11\n\t\ttarget\t12\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t12\n\t\ttarget\t13\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t13\n\t\ttarget\t14\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t14\n\t\ttarget\t15\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t13\n\t\ttarget\t16\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t16\n\t\ttarget\t17\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t17\n\t\ttarget\t18\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t18\n\t\ttarget\t19\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t19\n\t\ttarget\t20\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t20\n\t\ttarget\t21\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t21\n\t\ttarget\t22\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t22\n\t\ttarget\t11\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t19\n\t\ttarget\t23\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t23\n\t\ttarget\t24\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t24\n\t\ttarget\t25\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t25\n\t\ttarget\t15\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t15\n\t\ttarget\t26\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t26\n\t\ttarget\t27\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t27\n\t\ttarget\t28\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t28\n\t\ttarget\t29\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t29\n\t\ttarget\t30\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t30\n\t\ttarget\t31\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t31\n\t\ttarget\t32\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t32\n\t\ttarget\t33\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t33\n\t\ttarget\t34\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t34\n\t\ttarget\t35\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t35\n\t\ttarget\t36\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t36\n\t\ttarget\t37\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t37\n\t\ttarget\t28\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t15\n\t\ttarget\t38\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t15\n\t\ttarget\t39\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t15\n\t\ttarget\t40\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t38\n\t\ttarget\t39\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t40\n\t\ttarget\t39\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t38\n\t\ttarget\t40\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t38\n\t\ttarget\t41\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t39\n\t\ttarget\t42\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t41\n\t\ttarget\t42\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n]\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/special/chains_and_cycles.tglf",
    "content": "0 251.000 154.000 30.000 30.000\n1 384.000 181.000 30.000 30.000\n2 443.000 289.000 30.000 30.000\n3 365.000 399.000 30.000 30.000\n4 172.000 400.000 30.000 30.000\n5 129.000 249.000 30.000 30.000\n6 611.000 91.000 30.000 30.000\n7 659.000 150.000 30.000 30.000\n8 706.000 216.000 30.000 30.000\n9 764.000 281.000 30.000 30.000\n10 815.000 344.000 30.000 30.000\n11 329.000 537.000 30.000 30.000\n12 419.000 535.000 30.000 30.000\n13 501.000 537.000 30.000 30.000\n14 592.000 532.000 30.000 30.000\n15 711.000 525.000 30.000 30.000\n16 504.000 625.000 30.000 30.000\n17 504.000 707.000 30.000 30.000\n18 503.000 782.000 30.000 30.000\n19 503.000 867.000 30.000 30.000\n20 416.000 861.000 30.000 30.000\n21 329.000 860.000 30.000 30.000\n22 327.000 689.000 30.000 30.000\n23 598.000 866.000 30.000 30.000\n24 729.000 870.000 30.000 30.000\n25 721.000 688.000 30.000 30.000\n26 782.000 520.000 30.000 30.000\n27 850.000 517.000 30.000 30.000\n28 911.000 513.000 30.000 30.000\n29 953.000 459.000 30.000 30.000\n30 997.000 392.000 30.000 30.000\n31 1070.000 368.000 30.000 30.000\n32 1123.000 411.000 30.000 30.000\n33 1140.000 486.000 30.000 30.000\n34 1140.000 580.000 30.000 30.000\n35 1087.000 637.000 30.000 30.000\n36 998.000 623.000 30.000 30.000\n37 945.000 582.000 30.000 30.000\n38 635.000 442.000 30.000 30.000\n39 713.000 390.000 30.000 30.000\n40 779.000 438.000 30.000 30.000\n41 580.000 380.000 30.000 30.000\n42 681.000 325.000 30.000 30.000\n#\n19 23\n18 19\n20 21\n29 30\n37 28\n3 4\n1 2\n6 7\n25 15\n17 18\n36 37\n38 39\n38 40\n15 38\n4 5\n39 42\n33 34\n5 0\n28 29\n16 17\n15 40\n30 31\n9 10\n13 14\n2 3\n13 16\n38 41\n15 26\n40 39\n8 9\n35 36\n24 25\n7 8\n41 42\n21 22\n22 11\n31 32\n34 35\n14 15\n12 13\n27 28\n19 20\n0 1\n15 39\n32 33\n26 27\n11 12\n23 24\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/special/cmplayout01.tglf",
    "content": "0 426 200 30 30\n1 474 200 30 30\n2 450 325 98 87\n#\n0 1 426 200 426 172.292 474 172.292 474 200\n1 2 474 200 474 248.25 450 248.25 450 325\n0 2 426 200 388.292 200 388.292 325 450 325\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/special/cmplayout02.tglf",
    "content": "6 426 200 30 30\n7 474 200 30 30\n8 450 325 98 87\n14 426 172.292 12.7083 12.7083\n15 474 172.292 12.7083 12.7083\n16 474 248.25 12.7083 12.7083\n17 450 248.25 12.7083 12.7083\n18 388.292 200 12.7083 12.7083\n19 388.292 325 12.7083 12.7083\n#\n6 7 426 200 426 172.292 474 172.292 474 200\n7 8 474 200 474 248.25 450 248.25 450 325\n6 8 426 200 388.292 200 388.292 325 450 325\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/special/cmplayout03.tglf",
    "content": "0 426 200 30 30\n1 474 200 30 30\n2 450 325 98 87\n#\n0 1 426 200 426 152.292 474 152.292 474 200\n1 2 474 200 474 248.25 450 248.25 450 325\n0 2 426 200 388.292 200 388.292 325 450 325\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/special/cmplayout04.tglf",
    "content": "0 426 200 30 30\n1 474 210 30 30\n2 450 325 98 87\n#\n0 1 426 200 426 172.292 474 172.292 474 210\n1 2 474 210 474 248.25 450 248.25 450 325\n0 2 426 200 388.292 200 388.292 325 450 325\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/special/coincidentnodes.tglf",
    "content": "0 0 0 30 30\n1 0 0 30 30\n2 0 0 30 30\n3 0 0 30 30\n4 0 0 30 30\n5 0 0 30 30\n6 0 0 30 30\n7 0 0 30 30\n8 0 0 30 30\n9 0 0 30 30\n10 0 0 30 30\n11 0 0 30 30\n12 0 0 30 30\n13 0 0 30 30\n14 0 0 30 30\n15 0 0 30 30\n16 0 0 30 30\n17 0 0 30 30\n18 0 0 30 30\n19 0 0 30 30\n#\n15 6\n19 11\n3 1\n12 1\n11 6\n2 17\n7 3\n5 3\n17 14\n2 1\n13 10\n16 9\n8 7\n9 5\n18 11\n15 0\n4 0\n10 9\n11 4\n1 8\n14 11\n6 1\n1 0\n13 15\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/special/column8.gml",
    "content": "Creator\t\"yFiles\"\nVersion\t\"2.12\"\ngraph\n[\n\thierarchic\t1\n\tlabel\t\"\"\n\tdirected\t1\n\tnode\n\t[\n\t\tid\t0\n\t\tlabel\t\"1\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t729.0\n\t\t\ty\t76.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"1\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t1\n\t\tlabel\t\"2\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t729.0\n\t\t\ty\t167.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"2\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t2\n\t\tlabel\t\"3\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t729.0\n\t\t\ty\t270.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"3\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t3\n\t\tlabel\t\"4\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t729.0\n\t\t\ty\t361.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"4\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t4\n\t\tlabel\t\"5\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t729.0\n\t\t\ty\t445.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"5\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t5\n\t\tlabel\t\"6\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t729.0\n\t\t\ty\t530.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"6\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t6\n\t\tlabel\t\"7\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t729.0\n\t\t\ty\t613.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"7\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t7\n\t\tlabel\t\"8\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t729.0\n\t\t\ty\t696.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"8\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n]\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/special/column8.tglf",
    "content": "0 729.000 76.000 30.000 30.000\n1 729.000 167.000 30.000 30.000\n2 729.000 270.000 30.000 30.000\n3 729.000 361.000 30.000 30.000\n4 729.000 445.000 30.000 30.000\n5 729.000 530.000 30.000 30.000\n6 729.000 613.000 30.000 30.000\n7 729.000 696.000 30.000 30.000\n#\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/special/components.gml",
    "content": "Creator\t\"yFiles\"\nVersion\t\"2.12\"\ngraph\n[\n\thierarchic\t1\n\tlabel\t\"\"\n\tdirected\t1\n\tnode\n\t[\n\t\tid\t0\n\t\tlabel\t\"1\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t171.0\n\t\t\ty\t148.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"1\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t1\n\t\tlabel\t\"2\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t298.0\n\t\t\ty\t192.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"2\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t2\n\t\tlabel\t\"3\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t264.0\n\t\t\ty\t346.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"3\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t3\n\t\tlabel\t\"4\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t103.0\n\t\t\ty\t383.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"4\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t4\n\t\tlabel\t\"5\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t97.0\n\t\t\ty\t249.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"5\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t5\n\t\tlabel\t\"6\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t121.0\n\t\t\ty\t558.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"6\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t6\n\t\tlabel\t\"7\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t288.0\n\t\t\ty\t492.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"7\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t7\n\t\tlabel\t\"8\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t463.0\n\t\t\ty\t192.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"8\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t8\n\t\tlabel\t\"9\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t443.0\n\t\t\ty\t369.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"9\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t9\n\t\tlabel\t\"10\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t626.0\n\t\t\ty\t319.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"10\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t10\n\t\tlabel\t\"11\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t725.0\n\t\t\ty\t148.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"11\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t11\n\t\tlabel\t\"12\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t727.0\n\t\t\ty\t481.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"12\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t12\n\t\tlabel\t\"13\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t648.0\n\t\t\ty\t81.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"13\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t13\n\t\tlabel\t\"14\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t776.0\n\t\t\ty\t78.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"14\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t14\n\t\tlabel\t\"15\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t315.0\n\t\t\ty\t682.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"15\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t15\n\t\tlabel\t\"16\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t392.0\n\t\t\ty\t575.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"16\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t16\n\t\tlabel\t\"17\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t509.0\n\t\t\ty\t618.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"17\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t17\n\t\tlabel\t\"18\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t451.0\n\t\t\ty\t765.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"18\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t18\n\t\tlabel\t\"19\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t654.0\n\t\t\ty\t627.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"19\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t19\n\t\tlabel\t\"20\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t855.0\n\t\t\ty\t616.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"20\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t20\n\t\tlabel\t\"21\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t771.0\n\t\t\ty\t748.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"21\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t21\n\t\tlabel\t\"22\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t930.0\n\t\t\ty\t226.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"22\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t22\n\t\tlabel\t\"23\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t836.0\n\t\t\ty\t347.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"23\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t23\n\t\tlabel\t\"24\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t971.0\n\t\t\ty\t385.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"24\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t24\n\t\tlabel\t\"25\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t1082.0\n\t\t\ty\t427.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"25\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t25\n\t\tlabel\t\"26\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t1063.0\n\t\t\ty\t588.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"26\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t2\n\t\ttarget\t6\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t6\n\t\ttarget\t5\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t5\n\t\ttarget\t3\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t3\n\t\ttarget\t2\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t3\n\t\ttarget\t4\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t4\n\t\ttarget\t0\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t0\n\t\ttarget\t1\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t1\n\t\ttarget\t2\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t9\n\t\ttarget\t11\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t9\n\t\ttarget\t8\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t9\n\t\ttarget\t7\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t9\n\t\ttarget\t10\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t12\n\t\ttarget\t10\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t13\n\t\ttarget\t10\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t14\n\t\ttarget\t17\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t16\n\t\ttarget\t17\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t14\n\t\ttarget\t15\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t15\n\t\ttarget\t16\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t15\n\t\ttarget\t17\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t14\n\t\ttarget\t16\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t18\n\t\ttarget\t20\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t20\n\t\ttarget\t19\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t19\n\t\ttarget\t18\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t22\n\t\ttarget\t23\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t23\n\t\ttarget\t24\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n]\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/special/components.tglf",
    "content": "0 171.000 148.000 30.000 30.000\n1 298.000 192.000 30.000 30.000\n2 264.000 346.000 30.000 30.000\n3 103.000 383.000 30.000 30.000\n4 97.000 249.000 30.000 30.000\n5 121.000 558.000 30.000 30.000\n6 288.000 492.000 30.000 30.000\n7 463.000 192.000 30.000 30.000\n8 443.000 369.000 30.000 30.000\n9 626.000 319.000 30.000 30.000\n10 725.000 148.000 30.000 30.000\n11 727.000 481.000 30.000 30.000\n12 648.000 81.000 30.000 30.000\n13 776.000 78.000 30.000 30.000\n14 315.000 682.000 30.000 30.000\n15 392.000 575.000 30.000 30.000\n16 509.000 618.000 30.000 30.000\n17 451.000 765.000 30.000 30.000\n18 654.000 627.000 30.000 30.000\n19 855.000 616.000 30.000 30.000\n20 771.000 748.000 30.000 30.000\n21 930.000 226.000 30.000 30.000\n22 836.000 347.000 30.000 30.000\n23 971.000 385.000 30.000 30.000\n24 1082.000 427.000 30.000 30.000\n25 1063.000 588.000 30.000 30.000\n#\n4 0\n9 8\n19 18\n9 10\n20 19\n15 16\n1 2\n3 2\n0 1\n13 10\n14 16\n14 17\n14 15\n12 10\n18 20\n22 23\n6 5\n16 17\n15 17\n2 6\n3 4\n23 24\n9 7\n9 11\n5 3\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/special/core_with_trees.gml",
    "content": "Creator\t\"yFiles\"\nVersion\t\"2.12\"\ngraph\n[\n\thierarchic\t1\n\tlabel\t\"\"\n\tdirected\t1\n\tnode\n\t[\n\t\tid\t0\n\t\tlabel\t\"1\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t294.0\n\t\t\ty\t266.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"1\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t1\n\t\tlabel\t\"2\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t457.0\n\t\t\ty\t235.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"2\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t2\n\t\tlabel\t\"3\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t627.0\n\t\t\ty\t252.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"3\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t3\n\t\tlabel\t\"4\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t705.0\n\t\t\ty\t361.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"4\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t4\n\t\tlabel\t\"5\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t594.0\n\t\t\ty\t507.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"5\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t5\n\t\tlabel\t\"6\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t413.0\n\t\t\ty\t510.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"6\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t6\n\t\tlabel\t\"7\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t275.0\n\t\t\ty\t414.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"7\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t7\n\t\tlabel\t\"8\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t674.0\n\t\t\ty\t188.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"8\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t8\n\t\tlabel\t\"9\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t716.0\n\t\t\ty\t149.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"9\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t9\n\t\tlabel\t\"10\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t700.0\n\t\t\ty\t82.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"10\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t10\n\t\tlabel\t\"11\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t796.0\n\t\t\ty\t140.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"11\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t11\n\t\tlabel\t\"12\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t350.0\n\t\t\ty\t560.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"12\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t12\n\t\tlabel\t\"13\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t410.0\n\t\t\ty\t564.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"13\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t13\n\t\tlabel\t\"14\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t481.0\n\t\t\ty\t572.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"14\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t14\n\t\tlabel\t\"15\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t277.0\n\t\t\ty\t610.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"15\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t15\n\t\tlabel\t\"16\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t345.0\n\t\t\ty\t626.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"16\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t16\n\t\tlabel\t\"17\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t409.0\n\t\t\ty\t638.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"17\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t17\n\t\tlabel\t\"18\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t462.0\n\t\t\ty\t638.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"18\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t18\n\t\tlabel\t\"19\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t502.0\n\t\t\ty\t634.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"19\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t19\n\t\tlabel\t\"20\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t548.0\n\t\t\ty\t627.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"20\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t20\n\t\tlabel\t\"21\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t650.0\n\t\t\ty\t574.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"21\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t21\n\t\tlabel\t\"22\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t211.0\n\t\t\ty\t240.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"22\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t22\n\t\tlabel\t\"23\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t289.0\n\t\t\ty\t193.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"23\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t0\n\t\ttarget\t6\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t0\n\t\ttarget\t1\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t1\n\t\ttarget\t2\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t2\n\t\ttarget\t3\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t3\n\t\ttarget\t4\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t4\n\t\ttarget\t5\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t5\n\t\ttarget\t6\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t5\n\t\ttarget\t1\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t4\n\t\ttarget\t2\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t2\n\t\ttarget\t7\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t7\n\t\ttarget\t8\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t8\n\t\ttarget\t9\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t8\n\t\ttarget\t10\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t5\n\t\ttarget\t12\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t5\n\t\ttarget\t11\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t5\n\t\ttarget\t13\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t11\n\t\ttarget\t14\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t11\n\t\ttarget\t15\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t12\n\t\ttarget\t16\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t13\n\t\ttarget\t17\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t13\n\t\ttarget\t18\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t13\n\t\ttarget\t19\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t4\n\t\ttarget\t20\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t0\n\t\ttarget\t21\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t0\n\t\ttarget\t22\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n]\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/special/core_with_trees.tglf",
    "content": "0 294.000 266.000 30.000 30.000\n1 457.000 235.000 30.000 30.000\n2 627.000 252.000 30.000 30.000\n3 705.000 361.000 30.000 30.000\n4 594.000 507.000 30.000 30.000\n5 413.000 510.000 30.000 30.000\n6 275.000 414.000 30.000 30.000\n7 674.000 188.000 30.000 30.000\n8 716.000 149.000 30.000 30.000\n9 700.000 82.000 30.000 30.000\n10 796.000 140.000 30.000 30.000\n11 350.000 560.000 30.000 30.000\n12 410.000 564.000 30.000 30.000\n13 481.000 572.000 30.000 30.000\n14 277.000 610.000 30.000 30.000\n15 345.000 626.000 30.000 30.000\n16 409.000 638.000 30.000 30.000\n17 462.000 638.000 30.000 30.000\n18 502.000 634.000 30.000 30.000\n19 548.000 627.000 30.000 30.000\n20 650.000 574.000 30.000 30.000\n21 211.000 240.000 30.000 30.000\n22 289.000 193.000 30.000 30.000\n#\n0 1\n5 6\n8 10\n0 6\n12 16\n4 2\n1 2\n2 7\n5 12\n7 8\n5 1\n13 19\n2 3\n13 17\n8 9\n13 18\n0 21\n4 5\n5 13\n0 22\n11 15\n4 20\n11 14\n5 11\n3 4\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/special/expand02.gml",
    "content": "Creator\t\"yFiles\"\nVersion\t\"2.12\"\ngraph\n[\n\thierarchic\t1\n\tlabel\t\"\"\n\tdirected\t1\n\tnode\n\t[\n\t\tid\t0\n\t\tlabel\t\"1\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t546.0\n\t\t\ty\t319.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"1\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t1\n\t\tlabel\t\"2\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t742.0\n\t\t\ty\t319.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"2\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t2\n\t\tlabel\t\"3\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t546.0\n\t\t\ty\t529.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"3\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t3\n\t\tlabel\t\"4\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t742.0\n\t\t\ty\t529.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"4\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t4\n\t\tlabel\t\"5\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t481.0\n\t\t\ty\t249.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"5\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t5\n\t\tlabel\t\"6\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t397.0\n\t\t\ty\t218.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"6\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t6\n\t\tlabel\t\"7\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t436.0\n\t\t\ty\t182.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"7\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t7\n\t\tlabel\t\"8\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t397.0\n\t\t\ty\t319.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"8\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t8\n\t\tlabel\t\"9\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t397.0\n\t\t\ty\t529.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"9\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t9\n\t\tlabel\t\"10\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t905.0\n\t\t\ty\t319.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"10\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t10\n\t\tlabel\t\"11\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t905.0\n\t\t\ty\t529.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"11\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t11\n\t\tlabel\t\"12\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t957.0\n\t\t\ty\t238.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"12\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t12\n\t\tlabel\t\"13\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t300.0\n\t\t\ty\t203.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"13\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t13\n\t\tlabel\t\"14\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t330.0\n\t\t\ty\t155.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"14\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t14\n\t\tlabel\t\"15\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t379.0\n\t\t\ty\t113.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"15\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t15\n\t\tlabel\t\"16\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t553.0\n\t\t\ty\t228.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"16\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t16\n\t\tlabel\t\"17\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t549.0\n\t\t\ty\t160.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"17\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t17\n\t\tlabel\t\"18\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t506.0\n\t\t\ty\t99.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"18\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t18\n\t\tlabel\t\"19\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t558.0\n\t\t\ty\t90.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"19\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t19\n\t\tlabel\t\"20\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t617.0\n\t\t\ty\t90.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"20\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t20\n\t\tlabel\t\"21\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t427.0\n\t\t\ty\t93.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"21\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t21\n\t\tlabel\t\"22\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t486.0\n\t\t\ty\t149.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"22\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t22\n\t\tlabel\t\"23\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t560.0\n\t\t\ty\t31.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"23\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t23\n\t\tlabel\t\"24\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t884.0\n\t\t\ty\t239.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"24\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t24\n\t\tlabel\t\"25\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t828.0\n\t\t\ty\t237.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"25\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t25\n\t\tlabel\t\"26\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t1024.0\n\t\t\ty\t233.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"26\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t26\n\t\tlabel\t\"27\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t1091.0\n\t\t\ty\t229.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"27\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t27\n\t\tlabel\t\"28\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t770.0\n\t\t\ty\t233.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"28\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t28\n\t\tlabel\t\"29\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t705.0\n\t\t\ty\t235.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"29\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t29\n\t\tlabel\t\"30\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t1155.0\n\t\t\ty\t226.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"30\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t0\n\t\ttarget\t1\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t3\n\t\ttarget\t2\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t0\n\t\ttarget\t4\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t4\n\t\ttarget\t5\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t4\n\t\ttarget\t6\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t2\n\t\ttarget\t8\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t8\n\t\ttarget\t7\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t7\n\t\ttarget\t0\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t1\n\t\ttarget\t9\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t9\n\t\ttarget\t10\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t10\n\t\ttarget\t3\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t9\n\t\ttarget\t11\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t5\n\t\ttarget\t12\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t5\n\t\ttarget\t13\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t6\n\t\ttarget\t14\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t0\n\t\ttarget\t15\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t15\n\t\ttarget\t16\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t16\n\t\ttarget\t17\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t16\n\t\ttarget\t18\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t16\n\t\ttarget\t19\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t6\n\t\ttarget\t20\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t15\n\t\ttarget\t21\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t18\n\t\ttarget\t22\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t9\n\t\ttarget\t23\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t9\n\t\ttarget\t24\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t9\n\t\ttarget\t27\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t9\n\t\ttarget\t28\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t9\n\t\ttarget\t25\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t9\n\t\ttarget\t26\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t9\n\t\ttarget\t29\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n]\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/special/expand02.tglf",
    "content": "0 546.000 319.000 30.000 30.000\n1 742.000 319.000 30.000 30.000\n2 546.000 529.000 30.000 30.000\n3 742.000 529.000 30.000 30.000\n4 481.000 249.000 30.000 30.000\n5 397.000 218.000 30.000 30.000\n6 436.000 182.000 30.000 30.000\n7 397.000 319.000 30.000 30.000\n8 397.000 529.000 30.000 30.000\n9 905.000 319.000 30.000 30.000\n10 905.000 529.000 30.000 30.000\n11 957.000 238.000 30.000 30.000\n12 300.000 203.000 30.000 30.000\n13 330.000 155.000 30.000 30.000\n14 379.000 113.000 30.000 30.000\n15 553.000 228.000 30.000 30.000\n16 549.000 160.000 30.000 30.000\n17 506.000 99.000 30.000 30.000\n18 558.000 90.000 30.000 30.000\n19 617.000 90.000 30.000 30.000\n20 427.000 93.000 30.000 30.000\n21 486.000 149.000 30.000 30.000\n22 560.000 31.000 30.000 30.000\n23 884.000 239.000 30.000 30.000\n24 828.000 237.000 30.000 30.000\n25 1024.000 233.000 30.000 30.000\n26 1091.000 229.000 30.000 30.000\n27 770.000 233.000 30.000 30.000\n28 705.000 235.000 30.000 30.000\n29 1155.000 226.000 30.000 30.000\n#\n0 4\n9 26\n8 7\n10 3\n16 19\n6 20\n9 29\n0 15\n15 21\n9 28\n9 24\n3 2\n5 12\n2 8\n4 5\n16 17\n9 10\n15 16\n9 11\n7 0\n18 22\n1 9\n9 27\n0 1\n9 23\n4 6\n6 14\n5 13\n16 18\n9 25\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/special/expand03.gml",
    "content": "Creator\t\"yFiles\"\nVersion\t\"2.12\"\ngraph\n[\n\thierarchic\t1\n\tlabel\t\"\"\n\tdirected\t1\n\tnode\n\t[\n\t\tid\t0\n\t\tlabel\t\"1\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t445.0\n\t\t\ty\t142.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"1\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t1\n\t\tlabel\t\"2\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t671.0\n\t\t\ty\t136.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"2\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t2\n\t\tlabel\t\"3\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t877.0\n\t\t\ty\t129.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"3\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t3\n\t\tlabel\t\"4\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t887.0\n\t\t\ty\t327.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"4\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t4\n\t\tlabel\t\"5\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t899.0\n\t\t\ty\t515.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"5\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t5\n\t\tlabel\t\"6\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t676.0\n\t\t\ty\t516.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"6\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t6\n\t\tlabel\t\"7\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t464.0\n\t\t\ty\t511.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"7\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t7\n\t\tlabel\t\"8\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t451.0\n\t\t\ty\t316.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"8\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t8\n\t\tlabel\t\"9\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t672.0\n\t\t\ty\t313.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"9\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t9\n\t\tlabel\t\"10\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t552.0\n\t\t\ty\t313.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"10\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t10\n\t\tlabel\t\"11\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t676.0\n\t\t\ty\t422.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"11\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t11\n\t\tlabel\t\"12\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t799.0\n\t\t\ty\t311.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"12\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t12\n\t\tlabel\t\"13\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t668.0\n\t\t\ty\t216.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"13\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t13\n\t\tlabel\t\"14\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t931.0\n\t\t\ty\t206.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"14\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t14\n\t\tlabel\t\"15\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t988.0\n\t\t\ty\t171.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"15\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t15\n\t\tlabel\t\"16\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t991.0\n\t\t\ty\t238.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"16\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t16\n\t\tlabel\t\"17\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t1037.0\n\t\t\ty\t126.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"17\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t17\n\t\tlabel\t\"18\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t1037.0\n\t\t\ty\t173.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"18\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t18\n\t\tlabel\t\"19\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t1037.0\n\t\t\ty\t212.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"19\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t19\n\t\tlabel\t\"20\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t1040.0\n\t\t\ty\t275.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"20\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t20\n\t\tlabel\t\"21\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t1109.0\n\t\t\ty\t207.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"21\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t21\n\t\tlabel\t\"22\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t1109.0\n\t\t\ty\t168.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"22\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t22\n\t\tlabel\t\"23\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t1175.0\n\t\t\ty\t163.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"23\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t23\n\t\tlabel\t\"24\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t1178.0\n\t\t\ty\t203.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"24\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t24\n\t\tlabel\t\"25\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t1240.0\n\t\t\ty\t158.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"25\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t25\n\t\tlabel\t\"26\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t1240.0\n\t\t\ty\t200.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"26\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t26\n\t\tlabel\t\"14\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t962.0\n\t\t\ty\t446.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"14\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t27\n\t\tlabel\t\"15\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t1019.0\n\t\t\ty\t411.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"15\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t28\n\t\tlabel\t\"16\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t1022.0\n\t\t\ty\t478.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"16\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t29\n\t\tlabel\t\"17\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t1068.0\n\t\t\ty\t366.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"17\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t30\n\t\tlabel\t\"18\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t1068.0\n\t\t\ty\t413.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"18\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t31\n\t\tlabel\t\"19\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t1068.0\n\t\t\ty\t452.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"19\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t32\n\t\tlabel\t\"20\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t1071.0\n\t\t\ty\t515.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"20\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t33\n\t\tlabel\t\"21\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t1140.0\n\t\t\ty\t447.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"21\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t34\n\t\tlabel\t\"22\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t1140.0\n\t\t\ty\t408.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"22\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t35\n\t\tlabel\t\"23\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t1206.0\n\t\t\ty\t403.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"23\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t36\n\t\tlabel\t\"24\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t1209.0\n\t\t\ty\t443.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"24\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t37\n\t\tlabel\t\"25\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t1271.0\n\t\t\ty\t398.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"25\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t38\n\t\tlabel\t\"26\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t1271.0\n\t\t\ty\t440.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"26\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t39\n\t\tlabel\t\"14\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t739.0\n\t\t\ty\t682.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"14\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t40\n\t\tlabel\t\"15\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t796.0\n\t\t\ty\t647.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"15\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t41\n\t\tlabel\t\"16\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t799.0\n\t\t\ty\t714.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"16\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t42\n\t\tlabel\t\"17\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t845.0\n\t\t\ty\t602.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"17\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t43\n\t\tlabel\t\"18\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t845.0\n\t\t\ty\t649.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"18\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t44\n\t\tlabel\t\"19\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t845.0\n\t\t\ty\t688.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"19\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t45\n\t\tlabel\t\"20\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t848.0\n\t\t\ty\t751.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"20\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t46\n\t\tlabel\t\"21\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t917.0\n\t\t\ty\t683.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"21\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t47\n\t\tlabel\t\"22\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t917.0\n\t\t\ty\t644.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"22\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t48\n\t\tlabel\t\"23\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t983.0\n\t\t\ty\t639.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"23\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t49\n\t\tlabel\t\"24\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t986.0\n\t\t\ty\t679.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"24\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t50\n\t\tlabel\t\"25\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t1048.0\n\t\t\ty\t634.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"25\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t51\n\t\tlabel\t\"26\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t1048.0\n\t\t\ty\t676.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"26\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t52\n\t\tlabel\t\"14\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t549.0\n\t\t\ty\t-13.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"14\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t53\n\t\tlabel\t\"15\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t606.0\n\t\t\ty\t-48.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"15\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t54\n\t\tlabel\t\"16\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t609.0\n\t\t\ty\t19.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"16\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t55\n\t\tlabel\t\"17\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t655.0\n\t\t\ty\t-93.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"17\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t56\n\t\tlabel\t\"18\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t655.0\n\t\t\ty\t-46.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"18\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t57\n\t\tlabel\t\"19\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t655.0\n\t\t\ty\t-7.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"19\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t58\n\t\tlabel\t\"20\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t658.0\n\t\t\ty\t56.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"20\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t59\n\t\tlabel\t\"21\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t727.0\n\t\t\ty\t-12.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"21\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t60\n\t\tlabel\t\"22\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t727.0\n\t\t\ty\t-51.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"22\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t61\n\t\tlabel\t\"23\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t793.0\n\t\t\ty\t-56.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"23\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t62\n\t\tlabel\t\"24\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t796.0\n\t\t\ty\t-16.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"24\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t63\n\t\tlabel\t\"25\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t858.0\n\t\t\ty\t-61.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"25\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t64\n\t\tlabel\t\"26\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t858.0\n\t\t\ty\t-19.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"26\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t0\n\t\ttarget\t1\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t1\n\t\ttarget\t2\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t2\n\t\ttarget\t3\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t3\n\t\ttarget\t4\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t4\n\t\ttarget\t5\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t5\n\t\ttarget\t6\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t6\n\t\ttarget\t7\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t7\n\t\ttarget\t0\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t1\n\t\ttarget\t12\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t12\n\t\ttarget\t8\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t8\n\t\ttarget\t9\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t9\n\t\ttarget\t7\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t5\n\t\ttarget\t10\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t10\n\t\ttarget\t8\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t8\n\t\ttarget\t11\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t11\n\t\ttarget\t3\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t13\n\t\ttarget\t14\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t13\n\t\ttarget\t15\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t15\n\t\ttarget\t19\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t15\n\t\ttarget\t18\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t14\n\t\ttarget\t17\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t14\n\t\ttarget\t16\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t17\n\t\ttarget\t21\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t21\n\t\ttarget\t22\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t22\n\t\ttarget\t24\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t18\n\t\ttarget\t20\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t20\n\t\ttarget\t23\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t23\n\t\ttarget\t25\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t26\n\t\ttarget\t27\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t26\n\t\ttarget\t28\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t28\n\t\ttarget\t32\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t28\n\t\ttarget\t31\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t27\n\t\ttarget\t30\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t27\n\t\ttarget\t29\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t30\n\t\ttarget\t34\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t34\n\t\ttarget\t35\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t35\n\t\ttarget\t37\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t31\n\t\ttarget\t33\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t33\n\t\ttarget\t36\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t36\n\t\ttarget\t38\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t39\n\t\ttarget\t40\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t39\n\t\ttarget\t41\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t41\n\t\ttarget\t45\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t41\n\t\ttarget\t44\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t40\n\t\ttarget\t43\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t40\n\t\ttarget\t42\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t43\n\t\ttarget\t47\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t47\n\t\ttarget\t48\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t48\n\t\ttarget\t50\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t44\n\t\ttarget\t46\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t46\n\t\ttarget\t49\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t49\n\t\ttarget\t51\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t52\n\t\ttarget\t53\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t52\n\t\ttarget\t54\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t54\n\t\ttarget\t58\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t54\n\t\ttarget\t57\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t53\n\t\ttarget\t56\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t53\n\t\ttarget\t55\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t56\n\t\ttarget\t60\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t60\n\t\ttarget\t61\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t61\n\t\ttarget\t63\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t57\n\t\ttarget\t59\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t59\n\t\ttarget\t62\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t62\n\t\ttarget\t64\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t9\n\t\ttarget\t52\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t12\n\t\ttarget\t13\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t11\n\t\ttarget\t26\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t10\n\t\ttarget\t39\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n]\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/special/expand03.tglf",
    "content": "0 445.000 142.000 30.000 30.000\n1 671.000 136.000 30.000 30.000\n2 877.000 129.000 30.000 30.000\n3 887.000 327.000 30.000 30.000\n4 899.000 515.000 30.000 30.000\n5 676.000 516.000 30.000 30.000\n6 464.000 511.000 30.000 30.000\n7 451.000 316.000 30.000 30.000\n8 672.000 313.000 30.000 30.000\n9 552.000 313.000 30.000 30.000\n10 676.000 422.000 30.000 30.000\n11 799.000 311.000 30.000 30.000\n12 668.000 216.000 30.000 30.000\n13 931.000 206.000 30.000 30.000\n14 988.000 171.000 30.000 30.000\n15 991.000 238.000 30.000 30.000\n16 1037.000 126.000 30.000 30.000\n17 1037.000 173.000 30.000 30.000\n18 1037.000 212.000 30.000 30.000\n19 1040.000 275.000 30.000 30.000\n20 1109.000 207.000 30.000 30.000\n21 1109.000 168.000 30.000 30.000\n22 1175.000 163.000 30.000 30.000\n23 1178.000 203.000 30.000 30.000\n24 1240.000 158.000 30.000 30.000\n25 1240.000 200.000 30.000 30.000\n26 962.000 446.000 30.000 30.000\n27 1019.000 411.000 30.000 30.000\n28 1022.000 478.000 30.000 30.000\n29 1068.000 366.000 30.000 30.000\n30 1068.000 413.000 30.000 30.000\n31 1068.000 452.000 30.000 30.000\n32 1071.000 515.000 30.000 30.000\n33 1140.000 447.000 30.000 30.000\n34 1140.000 408.000 30.000 30.000\n35 1206.000 403.000 30.000 30.000\n36 1209.000 443.000 30.000 30.000\n37 1271.000 398.000 30.000 30.000\n38 1271.000 440.000 30.000 30.000\n39 739.000 682.000 30.000 30.000\n40 796.000 647.000 30.000 30.000\n41 799.000 714.000 30.000 30.000\n42 845.000 602.000 30.000 30.000\n43 845.000 649.000 30.000 30.000\n44 845.000 688.000 30.000 30.000\n45 848.000 751.000 30.000 30.000\n46 917.000 683.000 30.000 30.000\n47 917.000 644.000 30.000 30.000\n48 983.000 639.000 30.000 30.000\n49 986.000 679.000 30.000 30.000\n50 1048.000 634.000 30.000 30.000\n51 1048.000 676.000 30.000 30.000\n52 549.000 -13.000 30.000 30.000\n53 606.000 -48.000 30.000 30.000\n54 609.000 19.000 30.000 30.000\n55 655.000 -93.000 30.000 30.000\n56 655.000 -46.000 30.000 30.000\n57 655.000 -7.000 30.000 30.000\n58 658.000 56.000 30.000 30.000\n59 727.000 -12.000 30.000 30.000\n60 727.000 -51.000 30.000 30.000\n61 793.000 -56.000 30.000 30.000\n62 796.000 -16.000 30.000 30.000\n63 858.000 -61.000 30.000 30.000\n64 858.000 -19.000 30.000 30.000\n#\n26 27\n52 54\n40 42\n15 19\n7 0\n12 13\n1 2\n53 56\n14 16\n11 26\n10 8\n1 12\n56 60\n13 15\n28 31\n27 29\n2 3\n30 34\n12 8\n5 10\n39 41\n8 9\n28 32\n44 46\n49 51\n54 57\n3 4\n47 48\n15 18\n0 1\n61 63\n23 25\n4 5\n59 62\n21 22\n33 36\n5 6\n8 11\n9 52\n27 30\n36 38\n54 58\n10 39\n20 23\n43 47\n11 3\n9 7\n41 45\n46 49\n48 50\n53 55\n39 40\n57 59\n41 44\n26 28\n34 35\n13 14\n17 21\n6 7\n31 33\n52 53\n60 61\n22 24\n40 43\n18 20\n35 37\n14 17\n62 64\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/special/expand04.gml",
    "content": "Creator\t\"yFiles\"\nVersion\t\"2.12\"\ngraph\n[\n\thierarchic\t1\n\tlabel\t\"\"\n\tdirected\t1\n\tnode\n\t[\n\t\tid\t0\n\t\tlabel\t\"1\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t630.0\n\t\t\ty\t475.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"1\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t1\n\t\tlabel\t\"2\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t651.0\n\t\t\ty\t587.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"2\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t2\n\t\tlabel\t\"3\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t651.0\n\t\t\ty\t324.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"3\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t3\n\t\tlabel\t\"4\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t746.0\n\t\t\ty\t324.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"4\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t4\n\t\tlabel\t\"5\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t746.0\n\t\t\ty\t587.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"5\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t5\n\t\tlabel\t\"6\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t630.0\n\t\t\ty\t390.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"6\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t6\n\t\tlabel\t\"7\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t495.0\n\t\t\ty\t390.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"7\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t7\n\t\tlabel\t\"8\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t495.0\n\t\t\ty\t475.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"8\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t8\n\t\tlabel\t\"9\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t495.0\n\t\t\ty\t324.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"9\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t9\n\t\tlabel\t\"10\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t566.0\n\t\t\ty\t537.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"10\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t10\n\t\tlabel\t\"11\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t564.0\n\t\t\ty\t576.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"11\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t11\n\t\tlabel\t\"12\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t562.0\n\t\t\ty\t617.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"12\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t12\n\t\tlabel\t\"13\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t702.0\n\t\t\ty\t437.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"13\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t13\n\t\tlabel\t\"14\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t701.0\n\t\t\ty\t474.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"14\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t14\n\t\tlabel\t\"15\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t700.0\n\t\t\ty\t513.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"15\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t1\n\t\ttarget\t2\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t2\n\t\ttarget\t3\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t3\n\t\ttarget\t4\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t4\n\t\ttarget\t1\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t0\n\t\ttarget\t5\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t5\n\t\ttarget\t6\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t6\n\t\ttarget\t7\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t7\n\t\ttarget\t0\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t8\n\t\ttarget\t6\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t8\n\t\ttarget\t2\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t1\n\t\ttarget\t9\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t1\n\t\ttarget\t10\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t1\n\t\ttarget\t11\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t0\n\t\ttarget\t12\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t0\n\t\ttarget\t13\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t0\n\t\ttarget\t14\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n]\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/special/expand04.tglf",
    "content": "0 630.000 475.000 30.000 30.000\n1 651.000 587.000 30.000 30.000\n2 651.000 324.000 30.000 30.000\n3 746.000 324.000 30.000 30.000\n4 746.000 587.000 30.000 30.000\n5 630.000 390.000 30.000 30.000\n6 495.000 390.000 30.000 30.000\n7 495.000 475.000 30.000 30.000\n8 495.000 324.000 30.000 30.000\n9 566.000 537.000 30.000 30.000\n10 564.000 576.000 30.000 30.000\n11 562.000 617.000 30.000 30.000\n12 702.000 437.000 30.000 30.000\n13 701.000 474.000 30.000 30.000\n14 700.000 513.000 30.000 30.000\n#\n0 5\n2 3\n4 1\n1 9\n8 6\n1 10\n5 6\n0 14\n6 7\n3 4\n1 11\n8 2\n1 2\n7 0\n0 13\n0 12\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/special/expand04b.gml",
    "content": "Creator\t\"yFiles\"\nVersion\t\"2.12\"\ngraph\n[\n\thierarchic\t1\n\tlabel\t\"\"\n\tdirected\t1\n\tnode\n\t[\n\t\tid\t0\n\t\tlabel\t\"1\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t630.0\n\t\t\ty\t-475.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"1\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t1\n\t\tlabel\t\"2\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t651.0\n\t\t\ty\t-587.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"2\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t2\n\t\tlabel\t\"3\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t651.0\n\t\t\ty\t-324.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"3\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t3\n\t\tlabel\t\"4\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t746.0\n\t\t\ty\t-324.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"4\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t4\n\t\tlabel\t\"5\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t746.0\n\t\t\ty\t-587.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"5\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t5\n\t\tlabel\t\"6\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t630.0\n\t\t\ty\t-390.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"6\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t6\n\t\tlabel\t\"7\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t495.0\n\t\t\ty\t-390.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"7\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t7\n\t\tlabel\t\"8\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t495.0\n\t\t\ty\t-475.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"8\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t8\n\t\tlabel\t\"9\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t495.0\n\t\t\ty\t-324.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"9\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t9\n\t\tlabel\t\"10\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t566.0\n\t\t\ty\t-537.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"10\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t10\n\t\tlabel\t\"11\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t564.0\n\t\t\ty\t-576.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"11\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t11\n\t\tlabel\t\"12\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t562.0\n\t\t\ty\t-617.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"12\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t12\n\t\tlabel\t\"13\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t702.0\n\t\t\ty\t-437.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"13\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t13\n\t\tlabel\t\"14\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t701.0\n\t\t\ty\t-474.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"14\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t14\n\t\tlabel\t\"15\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t700.0\n\t\t\ty\t-513.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"15\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t1\n\t\ttarget\t2\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t2\n\t\ttarget\t3\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t3\n\t\ttarget\t4\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t4\n\t\ttarget\t1\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t0\n\t\ttarget\t5\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t5\n\t\ttarget\t6\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t6\n\t\ttarget\t7\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t7\n\t\ttarget\t0\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t8\n\t\ttarget\t6\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t8\n\t\ttarget\t2\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t1\n\t\ttarget\t9\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t1\n\t\ttarget\t10\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t1\n\t\ttarget\t11\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t0\n\t\ttarget\t12\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t0\n\t\ttarget\t13\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t0\n\t\ttarget\t14\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n]\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/special/expand04b.tglf",
    "content": "0 630.000 -475.000 30.000 30.000\n1 651.000 -587.000 30.000 30.000\n2 651.000 -324.000 30.000 30.000\n3 746.000 -324.000 30.000 30.000\n4 746.000 -587.000 30.000 30.000\n5 630.000 -390.000 30.000 30.000\n6 495.000 -390.000 30.000 30.000\n7 495.000 -475.000 30.000 30.000\n8 495.000 -324.000 30.000 30.000\n9 566.000 -537.000 30.000 30.000\n10 564.000 -576.000 30.000 30.000\n11 562.000 -617.000 30.000 30.000\n12 702.000 -437.000 30.000 30.000\n13 701.000 -474.000 30.000 30.000\n14 700.000 -513.000 30.000 30.000\n#\n0 12\n7 0\n0 13\n2 3\n0 5\n1 2\n1 10\n8 6\n1 11\n6 7\n0 14\n3 4\n1 9\n4 1\n5 6\n8 2\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/special/expand05.gml",
    "content": "Creator\t\"yFiles\"\nVersion\t\"2.12\"\ngraph\n[\n\thierarchic\t1\n\tlabel\t\"\"\n\tdirected\t1\n\tnode\n\t[\n\t\tid\t0\n\t\tlabel\t\"1\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t464.5\n\t\t\ty\t229.5\n\t\t\tw\t225.0\n\t\t\th\t55.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"1\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t1\n\t\tlabel\t\"2\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t464.5\n\t\t\ty\t367.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"2\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t2\n\t\tlabel\t\"3\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t533.0\n\t\t\ty\t367.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"3\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t3\n\t\tlabel\t\"4\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t533.0\n\t\t\ty\t443.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"4\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t4\n\t\tlabel\t\"5\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t700.0\n\t\t\ty\t443.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"5\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t5\n\t\tlabel\t\"6\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t700.0\n\t\t\ty\t229.5\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"6\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t6\n\t\tlabel\t\"7\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t584.0\n\t\t\ty\t304.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"7\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t7\n\t\tlabel\t\"8\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t650.0\n\t\t\ty\t273.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"8\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t8\n\t\tlabel\t\"9\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t630.0\n\t\t\ty\t324.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"9\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t9\n\t\tlabel\t\"10\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t605.0\n\t\t\ty\t372.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"10\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t10\n\t\tlabel\t\"11\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t573.0\n\t\t\ty\t417.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"11\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t0\n\t\ttarget\t1\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t1\n\t\ttarget\t2\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t2\n\t\ttarget\t3\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t3\n\t\ttarget\t4\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t4\n\t\ttarget\t5\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t5\n\t\ttarget\t0\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t0\n\t\ttarget\t6\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t6\n\t\ttarget\t7\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t6\n\t\ttarget\t8\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t6\n\t\ttarget\t9\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t6\n\t\ttarget\t10\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n]\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/special/expand05.tglf",
    "content": "0 464.000 229.000 225.000 55.000\n1 464.000 367.000 30.000 30.000\n2 533.000 367.000 30.000 30.000\n3 533.000 443.000 30.000 30.000\n4 700.000 443.000 30.000 30.000\n5 700.000 229.000 30.000 30.000\n6 584.000 304.000 30.000 30.000\n7 650.000 273.000 30.000 30.000\n8 630.000 324.000 30.000 30.000\n9 605.000 372.000 30.000 30.000\n10 573.000 417.000 30.000 30.000\n#\n0 1\n6 10\n6 7\n6 9\n1 2\n5 0\n4 5\n2 3\n3 4\n0 6\n6 8\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/special/expand07.tglf",
    "content": "1 322.018 -127.884 90 90\n5 322.018 208.39 90 90\n6 172.018 -127.884 90 90\n8 172.018 358.39 90 90\n10 22.0175 358.39 90 90\n12 172.018 508.39 90 90\n14 322.018 508.39 90 90\n17 472.018 508.39 90 90\n19 172.018 32.896 90 90\n24 22.0175 208.39 90 90\n27 22.0175 58.3897 90 90\n29 472.018 208.39 90 90\n94 322.018 32.896 22.5 22.5\n95 322.018 358.39 22.5 22.5\n96 22.0175 -177.884 22.5 22.5\n97 472.018 -177.884 22.5 22.5\n#\n96 97\n6 1\n19 94\n24 5\n5 29\n10 8\n8 95\n12 14\n14 17\n96 27\n27 24\n24 10\n6 19\n8 12\n1 94\n94 5\n5 95\n95 14\n97 29\n29 17\n#\n1 6 C W >= 150.000\n1 94 C S >= 160.780\n5 24 C W >= 300.000\n5 29 C E >= 150.000\n5 94 C N >= 157.994\n5 95 C S >= 150.000\n6 19 C S >= 160.780\n8 10 C W >= 150.000\n8 12 C S >= 150.000\n8 95 C E >= 150.000\n10 24 C N >= 150.000\n12 14 C E >= 150.000\n14 17 C E >= 150.000\n14 95 C N >= 150.000\n17 29 C N >= 300.000\n19 94 C E >= 150.000\n24 27 C N >= 150.000\n27 96 C N >= 236.274\n29 97 C N >= 386.274\n96 97 C E >= 450.000\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/special/expand08.gml",
    "content": "Creator\t\"yFiles\"\nVersion\t\"2.12\"\ngraph\n[\n\thierarchic\t1\n\tlabel\t\"\"\n\tdirected\t1\n\tnode\n\t[\n\t\tid\t0\n\t\tlabel\t\"1\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t534.0\n\t\t\ty\t445.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"1\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t1\n\t\tlabel\t\"2\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t534.0\n\t\t\ty\t555.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"2\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t2\n\t\tlabel\t\"3\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t416.0\n\t\t\ty\t555.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"3\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t3\n\t\tlabel\t\"4\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t416.0\n\t\t\ty\t445.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"4\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t4\n\t\tlabel\t\"22\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t586.0\n\t\t\ty\t380.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"22\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t5\n\t\tlabel\t\"13\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t463.0\n\t\t\ty\t259.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"13\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t6\n\t\tlabel\t\"14\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t524.0\n\t\t\ty\t261.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"14\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t7\n\t\tlabel\t\"15\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t585.0\n\t\t\ty\t261.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"15\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t8\n\t\tlabel\t\"16\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t640.0\n\t\t\ty\t261.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"16\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t9\n\t\tlabel\t\"17\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t705.0\n\t\t\ty\t261.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"17\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t10\n\t\tlabel\t\"21\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t495.0\n\t\t\ty\t380.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"21\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t11\n\t\tlabel\t\"22\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t193.0\n\t\t\ty\t502.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"22\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t12\n\t\tlabel\t\"9\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-127.0\n\t\t\ty\t383.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"9\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t13\n\t\tlabel\t\"10\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-74.0\n\t\t\ty\t386.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"10\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t14\n\t\tlabel\t\"11\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-31.0\n\t\t\ty\t383.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"11\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t15\n\t\tlabel\t\"12\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t23.0\n\t\t\ty\t383.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"12\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t16\n\t\tlabel\t\"13\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t70.0\n\t\t\ty\t381.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"13\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t17\n\t\tlabel\t\"14\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t131.0\n\t\t\ty\t383.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"14\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t18\n\t\tlabel\t\"15\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t192.0\n\t\t\ty\t383.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"15\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t19\n\t\tlabel\t\"16\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t247.0\n\t\t\ty\t383.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"16\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t20\n\t\tlabel\t\"17\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t312.0\n\t\t\ty\t383.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"17\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t21\n\t\tlabel\t\"18\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t362.0\n\t\t\ty\t380.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"18\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t22\n\t\tlabel\t\"23\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-44.0\n\t\t\ty\t465.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"23\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t23\n\t\tlabel\t\"24\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-43.0\n\t\t\ty\t503.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"24\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t24\n\t\tlabel\t\"25\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-46.0\n\t\t\ty\t548.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"25\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t25\n\t\tlabel\t\"26\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-47.0\n\t\t\ty\t598.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"26\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t26\n\t\tlabel\t\"27\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-49.0\n\t\t\ty\t641.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"27\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t27\n\t\tlabel\t\"28\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-50.0\n\t\t\ty\t685.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"28\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t28\n\t\tlabel\t\"29\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-50.0\n\t\t\ty\t737.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"29\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t29\n\t\tlabel\t\"30\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t777.0\n\t\t\ty\t264.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"30\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t30\n\t\tlabel\t\"31\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t416.0\n\t\t\ty\t260.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"31\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t0\n\t\ttarget\t1\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t1\n\t\ttarget\t2\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t2\n\t\ttarget\t3\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t3\n\t\ttarget\t0\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t4\n\t\ttarget\t5\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t4\n\t\ttarget\t6\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t4\n\t\ttarget\t7\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t4\n\t\ttarget\t8\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t4\n\t\ttarget\t9\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t0\n\t\ttarget\t10\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t0\n\t\ttarget\t4\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t11\n\t\ttarget\t12\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t11\n\t\ttarget\t13\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t11\n\t\ttarget\t14\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t11\n\t\ttarget\t15\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t11\n\t\ttarget\t16\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t11\n\t\ttarget\t17\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t11\n\t\ttarget\t18\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t11\n\t\ttarget\t19\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t11\n\t\ttarget\t20\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t11\n\t\ttarget\t21\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t2\n\t\ttarget\t11\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t11\n\t\ttarget\t22\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t11\n\t\ttarget\t23\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t11\n\t\ttarget\t24\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t11\n\t\ttarget\t25\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t11\n\t\ttarget\t26\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t11\n\t\ttarget\t27\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t11\n\t\ttarget\t28\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t4\n\t\ttarget\t30\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t4\n\t\ttarget\t29\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n]\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/special/expand08.tglf",
    "content": "0 534.000 445.000 30.000 30.000\n1 534.000 555.000 30.000 30.000\n2 416.000 555.000 30.000 30.000\n3 416.000 445.000 30.000 30.000\n4 586.000 380.000 30.000 30.000\n5 463.000 259.000 30.000 30.000\n6 524.000 261.000 30.000 30.000\n7 585.000 261.000 30.000 30.000\n8 640.000 261.000 30.000 30.000\n9 705.000 261.000 30.000 30.000\n10 495.000 380.000 30.000 30.000\n11 193.000 502.000 30.000 30.000\n12 -127.000 383.000 30.000 30.000\n13 -74.000 386.000 30.000 30.000\n14 -31.000 383.000 30.000 30.000\n15 23.000 383.000 30.000 30.000\n16 70.000 381.000 30.000 30.000\n17 131.000 383.000 30.000 30.000\n18 192.000 383.000 30.000 30.000\n19 247.000 383.000 30.000 30.000\n20 312.000 383.000 30.000 30.000\n21 362.000 380.000 30.000 30.000\n22 -44.000 465.000 30.000 30.000\n23 -43.000 503.000 30.000 30.000\n24 -46.000 548.000 30.000 30.000\n25 -47.000 598.000 30.000 30.000\n26 -49.000 641.000 30.000 30.000\n27 -50.000 685.000 30.000 30.000\n28 -50.000 737.000 30.000 30.000\n29 777.000 264.000 30.000 30.000\n30 416.000 260.000 30.000 30.000\n#\n4 7\n11 21\n4 30\n11 19\n11 22\n4 29\n11 25\n3 0\n11 26\n11 20\n2 11\n11 15\n4 9\n11 13\n11 28\n0 4\n11 18\n4 5\n4 8\n11 24\n4 6\n0 1\n11 17\n11 12\n11 16\n2 3\n0 10\n11 27\n11 23\n11 14\n1 2\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/special/expand09.gml",
    "content": "Creator\t\"yFiles\"\nVersion\t\"2.12\"\ngraph\n[\n\thierarchic\t1\n\tlabel\t\"\"\n\tdirected\t1\n\tnode\n\t[\n\t\tid\t0\n\t\tlabel\t\"1\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t534.0\n\t\t\ty\t445.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"1\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t1\n\t\tlabel\t\"2\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t534.0\n\t\t\ty\t555.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"2\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t2\n\t\tlabel\t\"3\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t416.0\n\t\t\ty\t555.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"3\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t3\n\t\tlabel\t\"22\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t586.0\n\t\t\ty\t380.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"22\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t4\n\t\tlabel\t\"13\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t463.0\n\t\t\ty\t259.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"13\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t5\n\t\tlabel\t\"14\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t524.0\n\t\t\ty\t261.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"14\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t6\n\t\tlabel\t\"15\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t585.0\n\t\t\ty\t261.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"15\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t7\n\t\tlabel\t\"16\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t640.0\n\t\t\ty\t261.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"16\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t8\n\t\tlabel\t\"17\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t705.0\n\t\t\ty\t261.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"17\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t9\n\t\tlabel\t\"21\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t495.0\n\t\t\ty\t380.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"21\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t10\n\t\tlabel\t\"22\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t193.0\n\t\t\ty\t502.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"22\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t11\n\t\tlabel\t\"9\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-127.0\n\t\t\ty\t383.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"9\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t12\n\t\tlabel\t\"10\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-74.0\n\t\t\ty\t386.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"10\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t13\n\t\tlabel\t\"11\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-31.0\n\t\t\ty\t383.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"11\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t14\n\t\tlabel\t\"12\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t23.0\n\t\t\ty\t383.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"12\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t15\n\t\tlabel\t\"13\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t70.0\n\t\t\ty\t381.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"13\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t16\n\t\tlabel\t\"14\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t131.0\n\t\t\ty\t383.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"14\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t17\n\t\tlabel\t\"15\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t192.0\n\t\t\ty\t383.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"15\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t18\n\t\tlabel\t\"16\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t247.0\n\t\t\ty\t383.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"16\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t19\n\t\tlabel\t\"17\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t312.0\n\t\t\ty\t383.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"17\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t20\n\t\tlabel\t\"18\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t362.0\n\t\t\ty\t380.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"18\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t21\n\t\tlabel\t\"23\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-44.0\n\t\t\ty\t465.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"23\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t22\n\t\tlabel\t\"24\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-43.0\n\t\t\ty\t503.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"24\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t23\n\t\tlabel\t\"25\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-46.0\n\t\t\ty\t548.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"25\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t24\n\t\tlabel\t\"26\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-47.0\n\t\t\ty\t598.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"26\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t25\n\t\tlabel\t\"27\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-49.0\n\t\t\ty\t641.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"27\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t26\n\t\tlabel\t\"28\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-50.0\n\t\t\ty\t685.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"28\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t27\n\t\tlabel\t\"29\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t-50.0\n\t\t\ty\t737.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"29\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t28\n\t\tlabel\t\"30\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t777.0\n\t\t\ty\t264.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"30\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t29\n\t\tlabel\t\"31\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t416.0\n\t\t\ty\t260.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"31\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t30\n\t\tlabel\t\"32\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t534.0\n\t\t\ty\t180.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"32\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t31\n\t\tlabel\t\"32\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t283.0\n\t\t\ty\t555.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"32\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t32\n\t\tlabel\t\"33\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t283.0\n\t\t\ty\t733.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"33\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t33\n\t\tlabel\t\"34\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t859.0\n\t\t\ty\t180.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"34\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t34\n\t\tlabel\t\"35\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t859.0\n\t\t\ty\t733.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"35\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t0\n\t\ttarget\t1\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t1\n\t\ttarget\t2\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t3\n\t\ttarget\t4\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t3\n\t\ttarget\t5\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t3\n\t\ttarget\t6\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t3\n\t\ttarget\t7\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t3\n\t\ttarget\t8\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t0\n\t\ttarget\t9\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t0\n\t\ttarget\t3\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t10\n\t\ttarget\t11\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t10\n\t\ttarget\t12\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t10\n\t\ttarget\t13\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t10\n\t\ttarget\t14\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t10\n\t\ttarget\t15\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t10\n\t\ttarget\t16\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t10\n\t\ttarget\t17\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t10\n\t\ttarget\t18\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t10\n\t\ttarget\t19\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t10\n\t\ttarget\t20\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t2\n\t\ttarget\t10\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t10\n\t\ttarget\t21\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t10\n\t\ttarget\t22\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t10\n\t\ttarget\t23\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t10\n\t\ttarget\t24\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t10\n\t\ttarget\t25\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t10\n\t\ttarget\t26\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t10\n\t\ttarget\t27\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t3\n\t\ttarget\t29\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t3\n\t\ttarget\t28\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t0\n\t\ttarget\t30\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t2\n\t\ttarget\t31\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t30\n\t\ttarget\t33\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t33\n\t\ttarget\t34\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t34\n\t\ttarget\t32\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t32\n\t\ttarget\t31\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n]\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/special/expand09.tglf",
    "content": "0 534.000 445.000 30.000 30.000\n1 534.000 555.000 30.000 30.000\n2 416.000 555.000 30.000 30.000\n3 586.000 380.000 30.000 30.000\n4 463.000 259.000 30.000 30.000\n5 524.000 261.000 30.000 30.000\n6 585.000 261.000 30.000 30.000\n7 640.000 261.000 30.000 30.000\n8 705.000 261.000 30.000 30.000\n9 495.000 380.000 30.000 30.000\n10 193.000 502.000 30.000 30.000\n11 -127.000 383.000 30.000 30.000\n12 -74.000 386.000 30.000 30.000\n13 -31.000 383.000 30.000 30.000\n14 23.000 383.000 30.000 30.000\n15 70.000 381.000 30.000 30.000\n16 131.000 383.000 30.000 30.000\n17 192.000 383.000 30.000 30.000\n18 247.000 383.000 30.000 30.000\n19 312.000 383.000 30.000 30.000\n20 362.000 380.000 30.000 30.000\n21 -44.000 465.000 30.000 30.000\n22 -43.000 503.000 30.000 30.000\n23 -46.000 548.000 30.000 30.000\n24 -47.000 598.000 30.000 30.000\n25 -49.000 641.000 30.000 30.000\n26 -50.000 685.000 30.000 30.000\n27 -50.000 737.000 30.000 30.000\n28 777.000 264.000 30.000 30.000\n29 416.000 260.000 30.000 30.000\n30 534.000 180.000 30.000 30.000\n31 283.000 555.000 30.000 30.000\n32 283.000 733.000 30.000 30.000\n33 859.000 180.000 30.000 30.000\n34 859.000 733.000 30.000 30.000\n#\n10 14\n10 11\n3 29\n33 34\n10 24\n10 27\n3 5\n10 25\n0 9\n10 19\n10 26\n1 2\n10 13\n3 4\n10 23\n10 20\n10 21\n2 31\n0 30\n10 12\n0 1\n3 7\n0 3\n10 17\n10 22\n3 28\n2 10\n10 18\n3 8\n10 15\n10 16\n32 31\n3 6\n30 33\n34 32\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/special/holasbgn01_layout.tglf",
    "content": "0 562.824 782.447 30 30\n1 1668.84 1192.21 30 30\n2 1593.79 1643.77 30 30\n3 244.706 1192.21 30 30\n4 642.059 1583.77 30 30\n5 965.767 782.447 30 30\n6 455.382 1066.56 30 30\n7 431.382 1346.06 30 30\n8 965.767 1564.54 30 30\n9 562.824 703.212 30 30\n10 1748.08 1192.21 30 30\n11 1673.03 1643.77 30 30\n12 323.941 1192.21 30 30\n13 735.779 1583.77 30 30\n14 965.767 861.682 30 30\n15 965.767 1691.44 30 30\n16 1668.84 828.859 30 30\n17 1182.22 703.212 30 30\n18 800.53 782.447 30 30\n19 534.618 1066.56 30 30\n20 562.824 1220.42 30 30\n21 1746.83 1769.42 30 30\n22 352.147 1346.06 30 30\n23 2055.78 1277.79 30 30\n24 1976.55 1403.03 30 30\n25 965.767 1206.29 30 30\n26 1416.77 1803.5 30 30\n27 1374.13 1275.91 30 30\n28 1589.61 828.859 30 30\n29 376.147 1066.56 30 30\n30 510.618 1346.06 30 30\n31 1337.54 1803.5 30 30\n32 86.2351 753.008 30 30\n33 800.53 577.565 30 30\n34 1261.46 703.212 30 30\n35 86.2351 673.773 30 30\n36 800.53 498.329 30 30\n37 1102.99 703.212 30 30\n38 875.13 987.329 30 30\n39 165.47 850.425 30 30\n40 1176.44 1066.56 30 30\n41 193.676 1504.54 30 30\n42 1248.48 1691.44 30 30\n43 1255.68 1066.56 30 30\n44 193.676 1346.06 30 30\n45 1169.25 1691.44 30 30\n46 350.643 498.329 30 30\n47 535.957 577.565 30 30\n48 193.676 1425.3 30 30\n49 35.2059 1464.91 30 30\n50 86.2351 832.244 30 30\n51 562.824 861.682 30 30\n52 193.676 1583.77 30 30\n53 800.53 703.212 30 30\n54 35.2059 1385.68 30 30\n55 613.853 1066.56 30 30\n56 272.912 1346.06 30 30\n57 1224.9 782.447 30 30\n58 1176.44 987.329 30 30\n59 1668.84 908.094 30 30\n60 642.059 1220.42 30 30\n61 1892.52 1403.03 30 30\n62 1593.79 1564.54 30 30\n63 1374.13 1564.54 30 30\n64 1892.89 1151.74 30 30\n65 1800.59 987.329 30 30\n66 1800.59 1564.54 30 30\n67 1045 782.447 30 30\n68 1045 1564.54 30 30\n69 962.928 987.329 30 30\n70 925.561 1425.3 30 30\n71 776.002 987.329 30 30\n72 735.779 1425.3 30 30\n73 244.706 1112.98 30 30\n74 642.059 1504.54 30 30\n75 1294.89 908.094 30 30\n76 1294.89 1645.03 30 30\n77 721.294 577.565 30 30\n78 721.294 782.447 30 30\n79 165.47 713.599 30 30\n80 272.912 1425.3 30 30\n81 642.059 703.212 30 30\n82 1976.55 1277.79 30 30\n83 114.441 1425.3 30 30\n84 165.47 987.329 30 30\n85 350.643 577.565 30 30\n86 455.382 987.329 30 30\n87 431.382 1425.3 30 30\n88 1701.23 1690.18 30 30\n89 1374.13 1724.26 30 30\n90 1294.89 1275.91 30 30\n91 1045 1206.29 30 30\n92 1668.84 1112.98 30 30\n93 1879.82 1277.39 30 30\n94 1800.59 1277.39 30 30\n95 1327.72 1691.44 30 30\n96 1207.43 1564.54 30 30\n97 1640.64 1066.56 30 30\n98 1589.61 987.329 30 30\n99 1668.84 987.329 30 30\n100 1509.19 987.329 30 30\n101 1976.55 1151.74 30 30\n102 1294.89 987.329 30 30\n103 1134.94 782.447 30 30\n104 1374.13 987.329 30 30\n105 1374.13 908.094 30 30\n106 1045 987.329 30 30\n107 721.294 703.212 30 30\n108 244.706 987.329 30 30\n109 642.059 987.329 30 30\n110 165.47 577.565 30 30\n111 1800.59 1403.03 30 30\n112 1701.23 1564.54 30 30\n113 1462.35 1564.54 30 30\n114 1374.13 1645.03 30 30\n115 1294.89 1564.54 30 30\n116 1126.21 1564.54 30 30\n117 830.53 1425.3 30 30\n118 642.059 1425.3 30 30\n119 1045 1425.3 30 30\n120 352.147 1425.3 30 30\n121 2055.78 1198.55 30 30\n122 1800.59 1151.74 30 30\n123 1879.82 1198.15 30 30\n124 1374.13 1196.68 30 30\n125 562.824 1299.65 30 30\n126 965.767 1285.53 30 30\n127 271.408 498.329 30 30\n128 1496.01 1803.5 30 30\n129 35.2059 1544.15 30 30\n130 1352.69 703.212 54 30\n131 1085.21 1066.56 54 30\n132 1760.08 828.859 54 30\n133 562.824 1141.18 54 30\n134 1892.52 1482.27 54 30\n135 1502.56 1643.77 54 30\n136 1374.13 1485.3 54 30\n137 1892.89 1072.5 54 30\n138 1891.82 987.329 54 30\n139 1800.59 1643.77 54 30\n140 965.767 703.212 54 30\n141 965.767 1471.71 54 30\n142 962.928 908.094 54 30\n143 925.561 1518.12 54 30\n144 776.002 908.094 54 30\n145 735.779 1504.54 54 30\n146 153.47 1192.21 54 30\n147 550.824 1583.77 54 30\n148 1294.89 828.859 54 30\n149 1203.66 1645.03 54 30\n150 800.53 656.8 54 30\n151 800.53 861.682 54 30\n152 86.2351 594.538 54 30\n153 193.676 1266.83 54 30\n154 562.824 623.976 54 30\n155 2055.78 1357.02 54 30\n156 35.2059 1306.44 54 30\n157 165.47 1066.56 54 30\n158 441.878 498.329 54 30\n159 284.912 1066.56 54 30\n160 601.853 1346.06 54 30\n161 1655.6 1769.42 54 30\n162 1246.3 1803.5 54 30\n163 1374.13 1355.15 54 30\n164 965.767 1127.06 54 30\n165 1577.61 1192.21 54 30\n166 1879.82 1356.62 54 30\n167 1078.01 1691.44 54 30\n168 1549.4 1066.56 54 30\n169 1374.13 1066.56 54 30\n#\n80 44 272.912 1421.3 233.294 1421.3 233.294 1346.06 193.676 1346.06\n40 58 1176.44 1066.56 1176.44 987.329\n48 80 193.676 1425.3 272.912 1425.3\n19 86 534.618 1066.56 534.618 1028.95 459.382 1028.95 459.382 987.329\n137 64 1892.89 1072.5 1892.89 1151.74\n119 70 1045 1425.3 925.561 1425.3\n90 124 1294.89 1271.91 1334.51 1271.91 1334.51 1196.68 1374.13 1196.68\n108 84 244.706 987.329 165.47 987.329\n103 67 1134.94 782.447 1045 782.447\n68 8 1045 1564.54 965.767 1564.54\n32 79 86.2351 753.008 123.853 753.008 123.853 715.599 165.47 715.599\n96 116 1207.43 1564.54 1126.21 1564.54\n108 86 244.706 987.329 455.382 987.329\n92 100 1668.84 1112.98 1509.19 1112.98 1509.19 987.329\n95 96 1327.72 1691.44 1327.72 1602.78 1211.43 1602.78 1211.43 1564.54\n86 109 455.382 987.329 642.059 987.329\n87 118 431.382 1425.3 642.059 1425.3\n107 81 721.294 703.212 642.059 703.212\n81 51 642.059 711.204 604.441 711.204 604.441 861.682 562.824 861.682\n158 85 441.878 498.329 441.878 537.947 354.643 537.947 354.643 577.565\n57 37 1218.9 782.447 1218.9 744.829 1102.99 744.829 1102.99 703.212\n6 86 455.382 1066.56 455.382 987.329\n132 59 1760.08 828.859 1760.08 868.476 1672.84 868.476 1672.84 908.094\n81 9 642.059 703.204 562.824 703.204\n113 88 1462.35 1564.54 1462.35 1690.18 1701.23 1690.18\n41 80 193.676 1504.54 231.294 1504.54 231.294 1429.3 272.912 1429.3\n69 38 962.928 987.329 875.13 987.329\n122 94 1800.59 1151.74 1800.59 1277.39\n28 59 1589.61 828.859 1589.61 868.476 1664.84 868.476 1664.84 908.094\n136 63 1374.13 1485.3 1374.13 1564.54\n68 119 1045 1564.54 1045 1425.3\n114 76 1374.13 1645.03 1294.89 1645.03\n73 3 244.706 1112.98 244.706 1192.21\n168 98 1549.4 1066.56 1549.4 1026.95 1587.61 1026.95 1587.61 987.329\n110 85 165.47 577.565 350.643 577.565\n24 61 1976.55 1403.03 1892.52 1403.03\n109 60 642.063 987.329 642.063 1220.42\n71 109 776.002 987.333 642.059 987.333\n148 75 1294.89 828.859 1294.89 908.094\n154 81 562.824 623.976 608.441 623.976 608.441 699.204 642.059 699.204\n67 106 1045 782.447 1045 987.329\n33 77 800.53 577.565 721.294 577.565\n0 81 562.824 782.447 600.441 782.447 600.441 707.204 642.059 707.204\n141 68 965.767 1471.71 1011.39 1471.71 1011.39 1560.54 1045 1560.54\n61 111 1892.52 1403.03 1800.59 1403.03\n89 31 1372.13 1724.26 1372.13 1765.88 1337.54 1765.88 1337.54 1803.5\n22 87 352.147 1346.06 352.147 1383.68 427.382 1383.68 427.382 1425.3\n83 49 114.441 1427.3 72.8235 1427.3 72.8235 1464.91 35.2059 1464.91\n100 98 1509.19 987.329 1589.61 987.329\n42 96 1248.48 1691.44 1248.48 1606.78 1207.43 1606.78 1207.43 1564.54\n169 104 1374.13 1066.56 1374.13 987.329\n78 107 721.294 782.447 721.294 703.212\n77 36 721.294 573.565 760.912 573.565 760.912 498.329 800.53 498.329\n109 73 638.063 987.329 638.063 1112.98 244.706 1112.98\n106 69 1045 987.329 962.928 987.329\n115 96 1294.89 1564.54 1207.43 1564.54\n98 99 1589.61 987.329 1668.84 987.329\n54 83 35.2059 1385.68 74.8235 1385.68 74.8235 1423.3 114.441 1423.3\n117 72 830.53 1425.3 735.779 1425.3\n84 39 165.47 987.329 165.47 850.425\n145 72 735.779 1504.54 735.779 1425.3\n112 62 1701.23 1564.54 1593.79 1564.54\n17 57 1182.22 703.212 1182.22 740.829 1222.9 740.829 1222.9 782.447\n155 82 2055.78 1357.02 2010.16 1357.02 2010.16 1281.79 1976.55 1281.79\n80 52 272.912 1433.3 235.294 1433.3 235.294 1583.77 193.676 1583.77\n164 91 965.767 1127.06 1011.39 1127.06 1011.39 1202.29 1045 1202.29\n47 77 535.957 577.565 721.294 577.565\n105 75 1374.13 908.094 1294.89 908.094\n114 89 1374.13 1645.03 1374.13 1724.26\n99 65 1668.84 987.329 1800.59 987.329\n102 90 1294.89 987.329 1294.89 1275.91\n150 77 800.53 656.8 754.912 656.8 754.912 581.565 721.294 581.565\n118 74 642.059 1425.3 642.059 1504.54\n123 94 1879.82 1198.15 1840.2 1198.15 1840.2 1273.39 1800.59 1273.39\n57 103 1224.9 782.447 1134.94 782.447\n27 90 1374.13 1275.91 1294.89 1275.91\n62 11 1597.79 1564.54 1597.79 1604.15 1673.03 1604.15 1673.03 1643.77\n135 62 1502.56 1643.77 1502.56 1604.15 1589.79 1604.15 1589.79 1564.54\n147 74 550.824 1583.77 550.824 1544.15 638.059 1544.15 638.059 1504.54\n163 90 1374.13 1355.15 1328.51 1355.15 1328.51 1279.91 1294.89 1279.91\n7 87 431.382 1346.06 431.382 1425.3\n74 120 642.059 1504.54 352.147 1504.54 352.147 1425.3\n79 50 165.47 719.599 127.853 719.599 127.853 832.244 86.2351 832.244\n73 108 244.706 1112.98 244.706 987.329\n116 68 1126.21 1564.54 1045 1564.54\n86 55 463.382 987.329 463.382 1024.95 613.853 1024.95 613.853 1066.56\n104 102 1374.13 987.329 1294.89 987.329\n63 115 1374.13 1564.54 1294.89 1564.54\n94 93 1800.59 1277.39 1879.82 1277.39\n78 18 721.294 782.447 800.53 782.447\n146 73 153.47 1192.21 153.47 1152.59 240.706 1152.59 240.706 1112.98\n143 70 925.561 1518.12 925.561 1425.3\n87 30 435.382 1425.3 435.382 1383.68 510.618 1383.68 510.618 1346.06\n98 97 1591.61 987.329 1591.61 1026.95 1640.64 1026.95 1640.64 1066.56\n113 63 1462.35 1564.54 1374.13 1564.54\n140 67 965.767 703.212 1011.39 703.212 1011.39 778.447 1045 778.447\n58 43 1180.44 987.329 1180.44 1026.95 1255.68 1026.95 1255.68 1066.56\n60 20 642.059 1220.42 562.824 1220.42\n109 78 642.059 983.333 721.294 983.333 721.294 782.447\n139 66 1800.59 1643.77 1800.59 1564.54\n96 45 1207.43 1564.54 1169.25 1691.44\n64 122 1892.89 1151.74 1800.59 1151.74\n166 94 1879.82 1356.62 1834.2 1356.62 1834.2 1281.39 1800.59 1281.39\n165 92 1577.61 1192.21 1577.61 1152.59 1664.84 1152.59 1664.84 1112.98\n133 60 562.824 1141.18 608.441 1141.18 608.441 1216.42 642.059 1216.42\n79 35 165.47 711.599 125.853 711.599 125.853 673.773 86.2351 673.773\n149 76 1203.66 1645.03 1294.89 1645.03\n120 87 352.147 1425.3 431.382 1425.3\n25 91 965.767 1206.29 1045 1206.29\n85 47 350.643 577.565 535.957 577.565\n162 89 1246.3 1803.5 1246.3 1761.88 1368.13 1761.88 1368.13 1724.26\n87 56 423.382 1425.3 423.382 1387.68 272.912 1387.68 272.912 1346.06\n72 118 735.779 1425.3 642.059 1425.3\n88 112 1701.23 1690.18 1701.23 1564.54\n89 128 1380.13 1724.26 1380.13 1761.88 1496.01 1761.88 1496.01 1803.5\n160 87 601.853 1346.06 601.853 1387.68 439.382 1387.68 439.382 1425.3\n14 67 965.767 861.682 1005.39 861.682 1005.39 786.447 1045 786.447\n100 104 1509.19 987.329 1374.13 987.329\n131 58 1085.21 1066.56 1085.21 1026.95 1172.44 1026.95 1172.44 987.329\n75 102 1294.89 908.094 1294.89 987.329\n70 117 925.561 1425.3 830.53 1425.3\n2 62 1593.79 1643.77 1593.79 1564.54\n26 89 1416.77 1803.5 1416.77 1765.88 1376.13 1765.88 1376.13 1724.26\n13 74 735.779 1583.77 735.779 1544.15 646.059 1544.15 646.059 1504.54\n60 118 642.059 1220.42 642.059 1425.3\n83 129 114.441 1431.3 76.8235 1431.3 76.8235 1544.15 35.2059 1544.15\n34 57 1261.46 703.212 1261.46 740.829 1226.9 740.829 1226.9 782.447\n152 79 86.2351 594.538 131.853 594.538 131.853 707.599 165.47 707.599\n153 80 193.676 1266.83 239.294 1266.83 239.294 1417.3 272.912 1417.3\n110 79 165.47 577.565 165.47 713.599\n125 60 562.824 1299.65 602.441 1299.65 602.441 1224.42 642.059 1224.42\n62 113 1593.79 1564.54 1462.35 1564.54\n90 115 1294.89 1275.91 1294.89 1564.54\n130 57 1352.69 703.212 1352.69 744.829 1230.9 744.829 1230.9 782.447\n15 68 965.767 1691.44 1005.39 1691.44 1005.39 1568.54 1045 1568.54\n102 58 1294.89 987.333 1176.44 987.333\n79 39 165.47 713.599 165.47 850.425\n91 126 1045 1210.29 1005.39 1210.29 1005.39 1285.53 965.767 1285.53\n38 71 875.13 987.329 776.002 987.329\n88 21 1703.23 1690.18 1703.23 1729.8 1746.83 1729.8 1746.83 1769.42\n58 106 1176.44 987.329 1045 987.329\n159 86 284.912 1066.56 284.912 1024.95 447.382 1024.95 447.382 987.329\n63 114 1374.13 1564.54 1374.13 1645.03\n156 83 35.2059 1306.44 80.8235 1306.44 80.8235 1419.3 114.441 1419.3\n59 16 1668.84 908.094 1668.84 828.859\n112 66 1701.23 1564.54 1800.59 1564.54\n91 119 1045 1206.29 1045 1425.3\n134 61 1892.52 1482.27 1892.52 1403.03\n161 88 1655.6 1769.42 1655.6 1729.8 1699.23 1729.8 1699.23 1690.18\n59 100 1668.84 908.094 1509.19 908.094 1509.19 987.329\n82 23 1976.55 1277.79 2055.78 1277.79\n94 111 1800.59 1277.39 1800.59 1403.03\n80 120 272.912 1425.3 352.147 1425.3\n76 115 1294.89 1645.03 1294.89 1564.54\n48 83 193.676 1425.3 114.441 1425.3\n167 96 1078.01 1691.44 1078.01 1604.78 1203.43 1604.78 1203.43 1564.54\n106 91 1045 987.329 1045 1206.29\n157 84 165.47 1066.56 165.47 987.329\n104 105 1374.13 987.329 1374.13 908.094\n101 82 1976.55 1151.74 1976.55 1277.79\n92 10 1672.84 1112.98 1672.84 1152.59 1748.08 1152.59 1748.08 1192.21\n1 92 1668.84 1192.21 1668.84 1112.98\n127 85 271.408 498.329 271.408 537.947 346.643 537.947 346.643 577.565\n74 4 642.059 1504.54 642.059 1583.77\n151 78 800.53 861.682 754.912 861.682 754.912 786.447 721.294 786.447\n53 78 800.53 703.212 760.912 703.212 760.912 778.447 721.294 778.447\n65 122 1800.59 987.329 1800.59 1151.74\n67 5 1045 782.447 965.767 782.447\n86 29 451.382 987.329 451.382 1028.95 376.147 1028.95 376.147 1066.56\n77 107 721.294 577.565 721.294 703.212\n142 69 962.928 908.094 962.928 987.329\n138 65 1891.82 987.329 1800.59 987.329\n12 73 323.941 1192.21 323.941 1152.59 248.706 1152.59 248.706 1112.98\n85 46 350.643 577.565 350.643 498.329\n99 59 1668.84 987.329 1668.84 908.094\n81 109 642.059 703.212 642.059 987.329\n82 24 1976.55 1277.79 1976.55 1403.03\n102 57 1294.89 983.333 1224.9 983.333 1224.9 782.447\n66 111 1800.59 1564.54 1800.59 1403.03\n121 82 2055.78 1198.55 2016.16 1198.55 2016.16 1273.79 1976.55 1273.79\n144 71 776.002 908.094 776.002 987.329\n101 64 1976.55 1151.74 1892.89 1151.74\n99 92 1668.84 987.329 1668.84 1112.98\n#\n0 9 B N >= 32.824\n0 51 B S >= 32.824\n0 81 B R >= 32.824\n1 10 B E >= 32.824\n1 92 C X == 0\n1 165 B W >= 32.824\n2 11 B E >= 32.824\n2 62 C X == 0\n2 135 B W >= 32.824\n3 12 B E >= 32.824\n3 73 C X == 0\n3 146 B W >= 32.824\n4 13 B E >= 32.824\n4 74 C X == 0\n4 147 B W >= 32.824\n5 14 B S >= 32.824\n5 67 B E >= 32.824\n5 140 B N >= 32.824\n6 19 B E >= 32.824\n6 29 B W >= 32.824\n6 86 C X == 0\n7 22 B W >= 32.824\n7 30 B E >= 32.824\n7 87 C X == 0\n8 15 B S >= 32.824\n8 68 B E >= 32.824\n8 141 B N >= 32.824\n9 81 C Y == 0\n9 154 B N >= 32.824\n13 145 C X == 0\n15 167 C Y == 0\n16 28 B W >= 32.824\n16 59 C X == 0\n16 132 B E >= 32.824\n17 34 B E >= 32.824\n17 37 B W >= 32.824\n18 53 B N >= 32.824\n18 78 B W >= 32.824\n18 151 B S >= 32.824\n19 55 B E >= 32.824\n20 60 B E >= 32.824\n20 125 B S >= 32.824\n20 133 B N >= 32.824\n21 161 B W >= 32.824\n22 56 B W >= 32.824\n23 82 B W >= 32.824\n23 121 B N >= 32.824\n23 155 B S >= 32.824\n24 61 C W >= 84.029\n24 82 C N >= 79.235\n25 91 B E >= 32.824\n25 126 B S >= 32.824\n25 164 B N >= 32.824\n26 31 B W >= 32.824\n26 128 B E >= 32.824\n27 90 B W >= 32.824\n27 124 B N >= 32.824\n27 163 B S >= 32.824\n29 159 B W >= 32.824\n30 160 B E >= 32.824\n31 162 B W >= 32.824\n32 35 B N >= 32.824\n32 50 B S >= 32.824\n32 79 B R >= 32.824\n33 36 B N >= 32.824\n33 77 B W >= 32.824\n33 150 B S >= 32.824\n34 130 B E >= 32.824\n35 152 B N >= 32.824\n38 69 C E >= 87.798\n38 71 C W >= 99.127\n39 79 C N >= 82.714\n39 84 C S >= 87.677\n40 43 B E >= 32.824\n40 58 C X == 0\n40 131 B W >= 32.824\n41 48 B N >= 32.824\n41 52 B S >= 32.824\n41 80 B R >= 32.824\n41 83 B L >= 32.824\n42 45 B W >= 32.824\n42 95 B E >= 32.824\n44 48 B S >= 32.824\n44 56 C Y == 0\n44 153 B N >= 32.824\n45 167 B W >= 32.824\n46 85 C X == 0\n46 127 B W >= 32.824\n46 158 B E >= 32.824\n47 77 C E >= 114.156\n47 85 C W >= 105.659\n48 80 C Y == 0\n48 83 C Y == 0\n49 54 B N >= 32.824\n49 83 B R >= 32.824\n49 129 B S >= 32.824\n53 107 C Y == 0\n54 156 B N >= 32.824\n57 103 C W >= 83.548\n57 130 B U >= 32.824\n58 102 B E >= 32.824\n58 106 C W >= 119.255\n58 131 B D >= 32.824\n59 99 C S >= 79.235\n59 132 B U >= 32.824\n60 109 B N >= 32.824\n60 118 C S >= 114.411\n61 111 C W >= 91.932\n61 134 B S >= 32.824\n62 112 C E >= 79.235\n62 113 C W >= 79.235\n62 135 B D >= 32.824\n63 113 C E >= 88.221\n63 114 C S >= 80.494\n63 115 C W >= 79.235\n63 136 B N >= 32.824\n64 101 C E >= 83.659\n64 122 C W >= 92.301\n64 137 B N >= 32.824\n65 99 C W >= 108.338\n65 122 C S >= 79.235\n65 138 B E >= 32.824\n66 111 C N >= 79.235\n66 112 C W >= 99.352\n66 139 B S >= 32.824\n67 103 C E >= 84.160\n67 106 C S >= 79.235\n68 116 C E >= 79.235\n68 119 C N >= 88.091\n69 106 C E >= 82.075\n69 142 B N >= 32.824\n70 117 C W >= 95.031\n70 119 C E >= 94.021\n70 143 B S >= 32.824\n71 109 B W >= 32.824\n71 144 B N >= 32.824\n72 117 C E >= 94.751\n72 118 C W >= 93.720\n72 145 B S >= 32.824\n73 108 C N >= 79.235\n73 146 B D >= 32.824\n74 118 C N >= 79.235\n74 147 B D >= 32.824\n75 102 C S >= 79.235\n75 105 C E >= 79.235\n75 148 B N >= 32.824\n76 114 C E >= 79.235\n76 115 C N >= 80.494\n76 149 B W >= 32.824\n77 107 C S >= 115.329\n78 107 C N >= 79.235\n79 110 C N >= 79.235\n80 120 B E >= 32.824\n81 107 C E >= 79.235\n81 109 C S >= 134.297\n82 101 C N >= 79.264\n84 108 C E >= 79.235\n84 157 B S >= 32.824\n85 110 C W >= 97.126\n85 158 B U >= 32.824\n86 108 C W >= 79.235\n86 109 C E >= 79.235\n86 159 B D >= 32.824\n87 118 C E >= 79.235\n87 120 C W >= 79.235\n87 160 B U >= 32.824\n88 112 C N >= 79.235\n88 161 B D >= 32.824\n89 114 B N >= 32.824\n89 162 B D >= 32.824\n90 102 C N >= 157.960\n90 115 C S >= 159.010\n91 106 C N >= 114.149\n91 119 C S >= 114.731\n92 99 C N >= 79.235\n92 165 B D >= 32.824\n93 94 B W >= 32.824\n93 123 B N >= 32.824\n93 166 B S >= 32.824\n94 111 C S >= 79.235\n94 122 C N >= 79.264\n96 115 C E >= 79.235\n96 116 C W >= 79.235\n96 167 B D >= 32.824\n97 168 B W >= 32.824\n98 99 C E >= 79.235\n98 100 C W >= 79.235\n98 168 B D >= 32.824\n100 104 C W >= 79.235\n102 104 C E >= 79.235\n104 105 C N >= 79.235\n104 169 B S >= 32.824\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/special/lone_node.gml",
    "content": "Creator\t\"yFiles\"\nVersion\t\"2.12\"\ngraph\n[\n\thierarchic\t1\n\tlabel\t\"\"\n\tdirected\t1\n\tnode\n\t[\n\t\tid\t0\n\t\tlabel\t\"1\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t493.0\n\t\t\ty\t374.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"1\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n]\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/special/lone_node.tglf",
    "content": "0 493.000 374.000 30.000 30.000\n#\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/special/nearalign01.gml",
    "content": "Creator\t\"yFiles\"\nVersion\t\"2.12\"\ngraph\n[\n\thierarchic\t1\n\tlabel\t\"\"\n\tdirected\t1\n\tnode\n\t[\n\t\tid\t0\n\t\tlabel\t\"1\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t576.0\n\t\t\ty\t481.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"1\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t1\n\t\tlabel\t\"2\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t584.0\n\t\t\ty\t418.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"2\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t2\n\t\tlabel\t\"3\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t592.0\n\t\t\ty\t360.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"3\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t3\n\t\tlabel\t\"4\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t597.0\n\t\t\ty\t316.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"4\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t4\n\t\tlabel\t\"5\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t601.0\n\t\t\ty\t267.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"5\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t0\n\t\ttarget\t1\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t1\n\t\ttarget\t2\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t2\n\t\ttarget\t3\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t3\n\t\ttarget\t4\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n]\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/special/nearalign01.tglf",
    "content": "0 576.000 481.000 30.000 30.000\n1 584.000 418.000 30.000 30.000\n2 592.000 360.000 30.000 30.000\n3 597.000 316.000 30.000 30.000\n4 601.000 267.000 30.000 30.000\n#\n1 2\n3 4\n0 1\n2 3\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/special/octogon.gml",
    "content": "Creator\t\"yFiles\"\nVersion\t\"2.12\"\ngraph\n[\n\thierarchic\t1\n\tlabel\t\"\"\n\tdirected\t1\n\tnode\n\t[\n\t\tid\t0\n\t\tlabel\t\"1\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t718.0\n\t\t\ty\t196.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"1\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t1\n\t\tlabel\t\"2\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t860.0\n\t\t\ty\t254.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"2\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t2\n\t\tlabel\t\"3\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t923.0\n\t\t\ty\t388.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"3\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t3\n\t\tlabel\t\"4\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t870.0\n\t\t\ty\t524.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"4\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t4\n\t\tlabel\t\"5\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t714.0\n\t\t\ty\t592.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"5\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t5\n\t\tlabel\t\"6\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t575.0\n\t\t\ty\t534.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"6\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t6\n\t\tlabel\t\"7\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t484.0\n\t\t\ty\t388.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"7\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t7\n\t\tlabel\t\"8\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t582.0\n\t\t\ty\t261.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"8\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t0\n\t\ttarget\t1\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t1\n\t\ttarget\t2\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t2\n\t\ttarget\t3\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t3\n\t\ttarget\t4\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t4\n\t\ttarget\t5\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t5\n\t\ttarget\t6\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t6\n\t\ttarget\t7\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t7\n\t\ttarget\t0\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n]\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/special/octogon.tglf",
    "content": "0 718.000 196.000 30.000 30.000\n1 860.000 254.000 30.000 30.000\n2 923.000 388.000 30.000 30.000\n3 870.000 524.000 30.000 30.000\n4 714.000 592.000 30.000 30.000\n5 575.000 534.000 30.000 30.000\n6 484.000 388.000 30.000 30.000\n7 582.000 261.000 30.000 30.000\n#\n7 0\n1 2\n6 7\n5 6\n2 3\n4 5\n0 1\n3 4\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/special/readconstraints.tglf",
    "content": "0 0 0 30 30\n1 100 100 30 30\n2 200 200 30 30\n3 300 300 30 30\n#\n#\n0 1 B E >= 30\n1 2 C U == 60\n3 2 B R >= 0\n\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/special/rotate01.gml",
    "content": "Creator\t\"yFiles\"\nVersion\t\"2.12\"\ngraph\n[\n\thierarchic\t1\n\tlabel\t\"\"\n\tdirected\t1\n\tnode\n\t[\n\t\tid\t0\n\t\tlabel\t\"1\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t426.0\n\t\t\ty\t171.5\n\t\t\tw\t30.0\n\t\t\th\t87.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"1\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tanchor\t\"c\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t1\n\t\tlabel\t\"2\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t522.5\n\t\t\ty\t200.0\n\t\t\tw\t127.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"2\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tanchor\t\"c\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t2\n\t\tlabel\t\"3\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t450.0\n\t\t\ty\t325.5\n\t\t\tw\t98.0\n\t\t\th\t87.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"3\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tanchor\t\"c\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t0\n\t\ttarget\t2\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t1\n\t\ttarget\t2\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t0\n\t\ttarget\t1\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n]\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/special/rotate01.tglf",
    "content": "0 426.000 171.000 30.000 87.000\n1 522.000 200.000 127.000 30.000\n2 450.000 325.000 98.000 87.000\n#\n0 2\n0 1\n1 2\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/special/rotate02.gml",
    "content": "Creator\t\"yFiles\"\nVersion\t\"2.12\"\ngraph\n[\n\thierarchic\t1\n\tlabel\t\"\"\n\tdirected\t1\n\tnode\n\t[\n\t\tid\t0\n\t\tlabel\t\"1\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t377.5\n\t\t\ty\t200.0\n\t\t\tw\t127.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"1\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tanchor\t\"c\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t1\n\t\tlabel\t\"2\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t522.5\n\t\t\ty\t200.0\n\t\t\tw\t127.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"2\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tanchor\t\"c\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t2\n\t\tlabel\t\"3\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t450.0\n\t\t\ty\t325.5\n\t\t\tw\t98.0\n\t\t\th\t87.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"3\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tanchor\t\"c\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t0\n\t\ttarget\t2\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t1\n\t\ttarget\t2\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t0\n\t\ttarget\t1\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n]\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/special/rotate02.tglf",
    "content": "0 377.000 200.000 127.000 30.000\n1 522.000 200.000 127.000 30.000\n2 450.000 325.000 98.000 87.000\n#\n1 2\n0 2\n0 1\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/special/routing01.gml",
    "content": "Creator\t\"yFiles\"\nVersion\t\"2.12\"\ngraph\n[\n\thierarchic\t1\n\tlabel\t\"\"\n\tdirected\t1\n\tnode\n\t[\n\t\tid\t0\n\t\tlabel\t\"1\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t452.0\n\t\t\ty\t259.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"1\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t1\n\t\tlabel\t\"2\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t482.0\n\t\t\ty\t259.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"2\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t2\n\t\tlabel\t\"3\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t467.0\n\t\t\ty\t310.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"3\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t3\n\t\tlabel\t\"4\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t467.0\n\t\t\ty\t208.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"4\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t4\n\t\tlabel\t\"1\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t661.5\n\t\t\ty\t259.0\n\t\t\tw\t79.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"1\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t5\n\t\tlabel\t\"2\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t739.0\n\t\t\ty\t259.0\n\t\t\tw\t90.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"2\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t6\n\t\tlabel\t\"3\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t701.0\n\t\t\ty\t310.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"3\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t7\n\t\tlabel\t\"4\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t701.0\n\t\t\ty\t208.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"4\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t2\n\t\ttarget\t3\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t2\n\t\ttarget\t0\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t6\n\t\ttarget\t7\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t6\n\t\ttarget\t4\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n]\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/special/routing01.tglf",
    "content": "0 452.000 259.000 30.000 30.000\n1 482.000 259.000 30.000 30.000\n2 467.000 310.000 30.000 30.000\n3 467.000 208.000 30.000 30.000\n4 661.000 259.000 79.000 30.000\n5 739.000 259.000 90.000 30.000\n6 701.000 310.000 30.000 30.000\n7 701.000 208.000 30.000 30.000\n#\n2 3\n6 4\n2 0\n6 7\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/special/samesiderouting.gml",
    "content": "Creator\t\"yFiles\"\nVersion\t\"2.12\"\ngraph\n[\n\thierarchic\t1\n\tlabel\t\"\"\n\tdirected\t1\n\tnode\n\t[\n\t\tid\t0\n\t\tlabel\t\"1\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t426.0\n\t\t\ty\t200.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"1\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t1\n\t\tlabel\t\"2\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t474.0\n\t\t\ty\t200.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"2\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t2\n\t\tlabel\t\"3\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t450.0\n\t\t\ty\t325.5\n\t\t\tw\t98.0\n\t\t\th\t87.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"3\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t0\n\t\ttarget\t2\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t1\n\t\ttarget\t2\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t0\n\t\ttarget\t1\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n]\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/special/samesiderouting.tglf",
    "content": "0 426.000 200.000 30.000 30.000\n1 474.000 200.000 30.000 30.000\n2 450.000 325.000 98.000 87.000\n#\n0 1\n1 2\n0 2\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/special/straight_6.gml",
    "content": "Creator\t\"yFiles\"\nVersion\t\"2.12\"\ngraph\n[\n\thierarchic\t1\n\tlabel\t\"\"\n\tdirected\t1\n\tnode\n\t[\n\t\tid\t0\n\t\tlabel\t\"1\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t405.0\n\t\t\ty\t469.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"1\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t1\n\t\tlabel\t\"2\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t522.0\n\t\t\ty\t420.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"2\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t2\n\t\tlabel\t\"3\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t647.0\n\t\t\ty\t366.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"3\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t3\n\t\tlabel\t\"4\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t761.0\n\t\t\ty\t324.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"4\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t4\n\t\tlabel\t\"5\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t876.0\n\t\t\ty\t254.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"5\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t5\n\t\tlabel\t\"6\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t1013.0\n\t\t\ty\t197.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"6\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t0\n\t\ttarget\t1\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t1\n\t\ttarget\t2\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t2\n\t\ttarget\t3\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t3\n\t\ttarget\t4\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t4\n\t\ttarget\t5\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t]\n\t]\n]\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/special/straight_6.tglf",
    "content": "0 405.000 469.000 30.000 30.000\n1 522.000 420.000 30.000 30.000\n2 647.000 366.000 30.000 30.000\n3 761.000 324.000 30.000 30.000\n4 876.000 254.000 30.000 30.000\n5 1013.000 197.000 30.000 30.000\n#\n4 5\n0 1\n3 4\n2 3\n1 2\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/special/treeplacement2.gml",
    "content": "Creator\t\"yFiles\"\nVersion\t\"2.12\"\ngraph\n[\n\thierarchic\t1\n\tlabel\t\"\"\n\tdirected\t1\n\tnode\n\t[\n\t\tid\t0\n\t\tlabel\t\"1\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t546.0\n\t\t\ty\t319.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"1\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t1\n\t\tlabel\t\"2\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t742.0\n\t\t\ty\t319.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"2\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t2\n\t\tlabel\t\"3\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t546.0\n\t\t\ty\t529.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"3\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t3\n\t\tlabel\t\"4\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t742.0\n\t\t\ty\t529.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"4\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t4\n\t\tlabel\t\"5\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t481.0\n\t\t\ty\t249.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"5\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t5\n\t\tlabel\t\"6\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t397.0\n\t\t\ty\t218.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"6\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t6\n\t\tlabel\t\"7\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t436.0\n\t\t\ty\t182.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"7\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t7\n\t\tlabel\t\"8\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t795.0\n\t\t\ty\t245.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"8\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t8\n\t\tlabel\t\"9\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t777.0\n\t\t\ty\t173.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"9\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t9\n\t\tlabel\t\"10\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t842.0\n\t\t\ty\t199.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"10\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t10\n\t\tlabel\t\"11\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t883.0\n\t\t\ty\t249.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"11\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t11\n\t\tlabel\t\"12\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t855.0\n\t\t\ty\t324.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"12\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t12\n\t\tlabel\t\"13\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t922.0\n\t\t\ty\t324.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"13\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t0\n\t\ttarget\t1\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t1\n\t\ttarget\t3\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t3\n\t\ttarget\t2\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t2\n\t\ttarget\t0\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t0\n\t\ttarget\t4\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t4\n\t\ttarget\t5\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t4\n\t\ttarget\t6\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t1\n\t\ttarget\t7\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t1\n\t\ttarget\t11\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t7\n\t\ttarget\t8\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t7\n\t\ttarget\t9\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t7\n\t\ttarget\t10\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t11\n\t\ttarget\t12\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n]\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/special/treeplacement2.tglf",
    "content": "0 546.000 319.000 30.000 30.000\n1 742.000 319.000 30.000 30.000\n2 546.000 529.000 30.000 30.000\n3 742.000 529.000 30.000 30.000\n4 481.000 249.000 30.000 30.000\n5 397.000 218.000 30.000 30.000\n6 436.000 182.000 30.000 30.000\n7 795.000 245.000 30.000 30.000\n8 777.000 173.000 30.000 30.000\n9 842.000 199.000 30.000 30.000\n10 883.000 249.000 30.000 30.000\n11 855.000 324.000 30.000 30.000\n12 922.000 324.000 30.000 30.000\n#\n11 12\n7 9\n0 1\n7 8\n4 6\n1 11\n4 5\n1 3\n0 4\n1 7\n3 2\n2 0\n7 10\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/special/treeplacement3.gml",
    "content": "Creator\t\"yFiles\"\nVersion\t\"2.12\"\ngraph\n[\n\thierarchic\t1\n\tlabel\t\"\"\n\tdirected\t1\n\tnode\n\t[\n\t\tid\t0\n\t\tlabel\t\"1\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t546.0\n\t\t\ty\t319.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"1\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t1\n\t\tlabel\t\"2\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t742.0\n\t\t\ty\t319.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"2\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t2\n\t\tlabel\t\"3\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t546.0\n\t\t\ty\t529.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"3\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t3\n\t\tlabel\t\"4\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t742.0\n\t\t\ty\t529.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"4\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t4\n\t\tlabel\t\"5\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t481.0\n\t\t\ty\t249.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"5\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t5\n\t\tlabel\t\"6\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t397.0\n\t\t\ty\t218.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"6\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t6\n\t\tlabel\t\"7\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t436.0\n\t\t\ty\t182.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"7\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t7\n\t\tlabel\t\"8\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t397.0\n\t\t\ty\t319.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"8\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t8\n\t\tlabel\t\"9\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t397.0\n\t\t\ty\t529.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"9\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t9\n\t\tlabel\t\"10\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t905.0\n\t\t\ty\t319.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"10\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t10\n\t\tlabel\t\"11\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t905.0\n\t\t\ty\t529.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"11\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t11\n\t\tlabel\t\"12\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t957.0\n\t\t\ty\t238.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"12\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t0\n\t\ttarget\t1\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t1\n\t\ttarget\t3\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t3\n\t\ttarget\t2\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t0\n\t\ttarget\t4\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t4\n\t\ttarget\t5\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t4\n\t\ttarget\t6\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t2\n\t\ttarget\t8\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t8\n\t\ttarget\t7\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t7\n\t\ttarget\t0\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t1\n\t\ttarget\t9\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t9\n\t\ttarget\t10\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t10\n\t\ttarget\t3\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t9\n\t\ttarget\t11\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n]\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/special/treeplacement3.tglf",
    "content": "0 546.000 319.000 30.000 30.000\n1 742.000 319.000 30.000 30.000\n2 546.000 529.000 30.000 30.000\n3 742.000 529.000 30.000 30.000\n4 481.000 249.000 30.000 30.000\n5 397.000 218.000 30.000 30.000\n6 436.000 182.000 30.000 30.000\n7 397.000 319.000 30.000 30.000\n8 397.000 529.000 30.000 30.000\n9 905.000 319.000 30.000 30.000\n10 905.000 529.000 30.000 30.000\n11 957.000 238.000 30.000 30.000\n#\n2 8\n4 6\n0 1\n0 4\n1 3\n4 5\n7 0\n10 3\n1 9\n3 2\n8 7\n9 11\n9 10\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/special/treeplacement4.gml",
    "content": "Creator\t\"yFiles\"\nVersion\t\"2.12\"\ngraph\n[\n\thierarchic\t1\n\tlabel\t\"\"\n\tdirected\t1\n\tnode\n\t[\n\t\tid\t0\n\t\tlabel\t\"1\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t546.0\n\t\t\ty\t319.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"1\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t1\n\t\tlabel\t\"2\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t742.0\n\t\t\ty\t319.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"2\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t2\n\t\tlabel\t\"3\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t546.0\n\t\t\ty\t529.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"3\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t3\n\t\tlabel\t\"4\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t742.0\n\t\t\ty\t529.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"4\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t4\n\t\tlabel\t\"5\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t481.0\n\t\t\ty\t249.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"5\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t5\n\t\tlabel\t\"6\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t397.0\n\t\t\ty\t218.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"6\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t6\n\t\tlabel\t\"7\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t436.0\n\t\t\ty\t182.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"7\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t7\n\t\tlabel\t\"8\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t397.0\n\t\t\ty\t319.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"8\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t8\n\t\tlabel\t\"9\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t397.0\n\t\t\ty\t529.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"9\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t9\n\t\tlabel\t\"10\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t905.0\n\t\t\ty\t319.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"10\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t10\n\t\tlabel\t\"11\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t905.0\n\t\t\ty\t529.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"11\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t11\n\t\tlabel\t\"12\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t957.0\n\t\t\ty\t238.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"12\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t12\n\t\tlabel\t\"13\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t300.0\n\t\t\ty\t203.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"13\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t13\n\t\tlabel\t\"14\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t330.0\n\t\t\ty\t155.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"14\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t14\n\t\tlabel\t\"15\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t379.0\n\t\t\ty\t113.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"15\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t15\n\t\tlabel\t\"16\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t553.0\n\t\t\ty\t228.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"16\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t16\n\t\tlabel\t\"17\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t549.0\n\t\t\ty\t160.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"17\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t17\n\t\tlabel\t\"18\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t506.0\n\t\t\ty\t99.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"18\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t18\n\t\tlabel\t\"19\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t558.0\n\t\t\ty\t90.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"19\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t19\n\t\tlabel\t\"20\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t617.0\n\t\t\ty\t90.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"20\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t20\n\t\tlabel\t\"21\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t427.0\n\t\t\ty\t93.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"21\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t21\n\t\tlabel\t\"22\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t486.0\n\t\t\ty\t149.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"22\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t22\n\t\tlabel\t\"23\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t560.0\n\t\t\ty\t31.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"23\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t0\n\t\ttarget\t1\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t1\n\t\ttarget\t3\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t3\n\t\ttarget\t2\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t0\n\t\ttarget\t4\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t4\n\t\ttarget\t5\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t4\n\t\ttarget\t6\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t2\n\t\ttarget\t8\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t8\n\t\ttarget\t7\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t7\n\t\ttarget\t0\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t1\n\t\ttarget\t9\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t9\n\t\ttarget\t10\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t10\n\t\ttarget\t3\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t9\n\t\ttarget\t11\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t5\n\t\ttarget\t12\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t5\n\t\ttarget\t13\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t6\n\t\ttarget\t14\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t0\n\t\ttarget\t15\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t15\n\t\ttarget\t16\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t16\n\t\ttarget\t17\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t16\n\t\ttarget\t18\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t16\n\t\ttarget\t19\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t6\n\t\ttarget\t20\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t15\n\t\ttarget\t21\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t18\n\t\ttarget\t22\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n]\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/special/treeplacement4.tglf",
    "content": "0 546.000 319.000 30.000 30.000\n1 742.000 319.000 30.000 30.000\n2 546.000 529.000 30.000 30.000\n3 742.000 529.000 30.000 30.000\n4 481.000 249.000 30.000 30.000\n5 397.000 218.000 30.000 30.000\n6 436.000 182.000 30.000 30.000\n7 397.000 319.000 30.000 30.000\n8 397.000 529.000 30.000 30.000\n9 905.000 319.000 30.000 30.000\n10 905.000 529.000 30.000 30.000\n11 957.000 238.000 30.000 30.000\n12 300.000 203.000 30.000 30.000\n13 330.000 155.000 30.000 30.000\n14 379.000 113.000 30.000 30.000\n15 553.000 228.000 30.000 30.000\n16 549.000 160.000 30.000 30.000\n17 506.000 99.000 30.000 30.000\n18 558.000 90.000 30.000 30.000\n19 617.000 90.000 30.000 30.000\n20 427.000 93.000 30.000 30.000\n21 486.000 149.000 30.000 30.000\n22 560.000 31.000 30.000 30.000\n#\n15 16\n3 2\n0 1\n4 5\n5 13\n6 14\n2 8\n7 0\n16 19\n18 22\n0 15\n16 18\n1 9\n1 3\n5 12\n15 21\n9 10\n0 4\n6 20\n9 11\n16 17\n4 6\n8 7\n10 3\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/special/treeplacement5.gml",
    "content": "Creator\t\"yFiles\"\nVersion\t\"2.12\"\ngraph\n[\n\thierarchic\t1\n\tlabel\t\"\"\n\tdirected\t1\n\tnode\n\t[\n\t\tid\t0\n\t\tlabel\t\"1\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t546.0\n\t\t\ty\t319.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"1\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t1\n\t\tlabel\t\"2\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t742.0\n\t\t\ty\t319.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"2\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t2\n\t\tlabel\t\"3\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t546.0\n\t\t\ty\t529.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"3\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t3\n\t\tlabel\t\"4\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t742.0\n\t\t\ty\t529.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"4\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t4\n\t\tlabel\t\"5\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t481.0\n\t\t\ty\t249.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"5\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t5\n\t\tlabel\t\"6\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t397.0\n\t\t\ty\t218.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"6\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t6\n\t\tlabel\t\"7\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t436.0\n\t\t\ty\t182.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"7\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t7\n\t\tlabel\t\"8\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t397.0\n\t\t\ty\t319.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"8\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t8\n\t\tlabel\t\"9\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t397.0\n\t\t\ty\t529.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"9\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t9\n\t\tlabel\t\"10\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t905.0\n\t\t\ty\t319.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"10\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t10\n\t\tlabel\t\"11\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t905.0\n\t\t\ty\t529.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"11\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t11\n\t\tlabel\t\"12\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t957.0\n\t\t\ty\t238.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"12\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t12\n\t\tlabel\t\"13\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t300.0\n\t\t\ty\t203.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"13\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t13\n\t\tlabel\t\"14\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t330.0\n\t\t\ty\t155.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"14\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t14\n\t\tlabel\t\"15\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t379.0\n\t\t\ty\t113.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"15\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t15\n\t\tlabel\t\"16\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t553.0\n\t\t\ty\t228.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"16\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t16\n\t\tlabel\t\"17\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t549.0\n\t\t\ty\t160.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"17\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t17\n\t\tlabel\t\"18\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t506.0\n\t\t\ty\t99.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"18\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t18\n\t\tlabel\t\"19\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t558.0\n\t\t\ty\t90.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"19\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t19\n\t\tlabel\t\"20\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t617.0\n\t\t\ty\t90.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"20\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t20\n\t\tlabel\t\"21\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t427.0\n\t\t\ty\t93.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"21\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t21\n\t\tlabel\t\"22\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t486.0\n\t\t\ty\t149.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"22\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t22\n\t\tlabel\t\"23\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t560.0\n\t\t\ty\t31.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"23\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t23\n\t\tlabel\t\"24\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t884.0\n\t\t\ty\t239.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"24\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t24\n\t\tlabel\t\"25\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t828.0\n\t\t\ty\t237.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"25\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t25\n\t\tlabel\t\"26\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t1024.0\n\t\t\ty\t233.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"26\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t26\n\t\tlabel\t\"27\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t1091.0\n\t\t\ty\t229.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"27\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t27\n\t\tlabel\t\"28\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t770.0\n\t\t\ty\t233.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"28\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t28\n\t\tlabel\t\"29\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t705.0\n\t\t\ty\t235.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"29\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t29\n\t\tlabel\t\"30\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t1155.0\n\t\t\ty\t226.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"30\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t0\n\t\ttarget\t1\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t1\n\t\ttarget\t3\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t3\n\t\ttarget\t2\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t0\n\t\ttarget\t4\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t4\n\t\ttarget\t5\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t4\n\t\ttarget\t6\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t2\n\t\ttarget\t8\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t8\n\t\ttarget\t7\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t7\n\t\ttarget\t0\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t1\n\t\ttarget\t9\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t9\n\t\ttarget\t10\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t10\n\t\ttarget\t3\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t9\n\t\ttarget\t11\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t5\n\t\ttarget\t12\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t5\n\t\ttarget\t13\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t6\n\t\ttarget\t14\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t0\n\t\ttarget\t15\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t15\n\t\ttarget\t16\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t16\n\t\ttarget\t17\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t16\n\t\ttarget\t18\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t16\n\t\ttarget\t19\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t6\n\t\ttarget\t20\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t15\n\t\ttarget\t21\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t18\n\t\ttarget\t22\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t9\n\t\ttarget\t23\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t9\n\t\ttarget\t24\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t9\n\t\ttarget\t27\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t9\n\t\ttarget\t28\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t9\n\t\ttarget\t25\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t9\n\t\ttarget\t26\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t9\n\t\ttarget\t29\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n]\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/special/treeplacement5.tglf",
    "content": "0 546.000 319.000 30.000 30.000\n1 742.000 319.000 30.000 30.000\n2 546.000 529.000 30.000 30.000\n3 742.000 529.000 30.000 30.000\n4 481.000 249.000 30.000 30.000\n5 397.000 218.000 30.000 30.000\n6 436.000 182.000 30.000 30.000\n7 397.000 319.000 30.000 30.000\n8 397.000 529.000 30.000 30.000\n9 905.000 319.000 30.000 30.000\n10 905.000 529.000 30.000 30.000\n11 957.000 238.000 30.000 30.000\n12 300.000 203.000 30.000 30.000\n13 330.000 155.000 30.000 30.000\n14 379.000 113.000 30.000 30.000\n15 553.000 228.000 30.000 30.000\n16 549.000 160.000 30.000 30.000\n17 506.000 99.000 30.000 30.000\n18 558.000 90.000 30.000 30.000\n19 617.000 90.000 30.000 30.000\n20 427.000 93.000 30.000 30.000\n21 486.000 149.000 30.000 30.000\n22 560.000 31.000 30.000 30.000\n23 884.000 239.000 30.000 30.000\n24 828.000 237.000 30.000 30.000\n25 1024.000 233.000 30.000 30.000\n26 1091.000 229.000 30.000 30.000\n27 770.000 233.000 30.000 30.000\n28 705.000 235.000 30.000 30.000\n29 1155.000 226.000 30.000 30.000\n#\n9 23\n9 29\n9 26\n1 3\n9 25\n16 17\n15 16\n0 1\n8 7\n0 4\n15 21\n9 27\n0 15\n4 5\n1 9\n9 10\n7 0\n4 6\n6 20\n2 8\n5 12\n9 28\n9 24\n9 11\n16 18\n5 13\n18 22\n6 14\n3 2\n16 19\n10 3\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/trees/tree01.gml",
    "content": "Creator\t\"yFiles\"\nVersion\t\"2.12\"\ngraph\n[\n\thierarchic\t1\n\tlabel\t\"\"\n\tdirected\t1\n\tnode\n\t[\n\t\tid\t0\n\t\tlabel\t\"1\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t501.0\n\t\t\ty\t232.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"1\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t1\n\t\tlabel\t\"2\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t455.0\n\t\t\ty\t306.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"2\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t2\n\t\tlabel\t\"3\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t588.0\n\t\t\ty\t303.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"3\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t3\n\t\tlabel\t\"4\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t518.0\n\t\t\ty\t386.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"4\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t4\n\t\tlabel\t\"5\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t658.0\n\t\t\ty\t385.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"5\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t5\n\t\tlabel\t\"6\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t593.0\n\t\t\ty\t386.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"6\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t6\n\t\tlabel\t\"7\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t593.0\n\t\t\ty\t471.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"7\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t7\n\t\tlabel\t\"8\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t597.0\n\t\t\ty\t543.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"8\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t8\n\t\tlabel\t\"9\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t517.0\n\t\t\ty\t463.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"9\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t9\n\t\tlabel\t\"10\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t501.0\n\t\t\ty\t603.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"10\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t10\n\t\tlabel\t\"11\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t558.0\n\t\t\ty\t602.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"11\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t11\n\t\tlabel\t\"12\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t623.0\n\t\t\ty\t602.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"12\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t12\n\t\tlabel\t\"13\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t687.0\n\t\t\ty\t606.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"13\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t0\n\t\ttarget\t1\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t0\n\t\ttarget\t2\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t2\n\t\ttarget\t3\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t2\n\t\ttarget\t4\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t2\n\t\ttarget\t5\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t5\n\t\ttarget\t6\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t6\n\t\ttarget\t7\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t3\n\t\ttarget\t8\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t7\n\t\ttarget\t9\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t7\n\t\ttarget\t10\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t7\n\t\ttarget\t11\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t7\n\t\ttarget\t12\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n]\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/trees/tree01.tglf",
    "content": "0 501.000 232.000 30.000 30.000\n1 455.000 306.000 30.000 30.000\n2 588.000 303.000 30.000 30.000\n3 518.000 386.000 30.000 30.000\n4 658.000 385.000 30.000 30.000\n5 593.000 386.000 30.000 30.000\n6 593.000 471.000 30.000 30.000\n7 597.000 543.000 30.000 30.000\n8 517.000 463.000 30.000 30.000\n9 501.000 603.000 30.000 30.000\n10 558.000 602.000 30.000 30.000\n11 623.000 602.000 30.000 30.000\n12 687.000 606.000 30.000 30.000\n#\n2 4\n7 9\n7 12\n0 1\n3 8\n2 5\n2 3\n7 10\n0 2\n7 11\n6 7\n5 6\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/trees/tree01m.gml",
    "content": "Creator\t\"yFiles\"\nVersion\t\"2.12\"\ngraph\n[\n\thierarchic\t1\n\tlabel\t\"\"\n\tdirected\t1\n\tnode\n\t[\n\t\tid\t0\n\t\tlabel\t\"1\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t501.0\n\t\t\ty\t232.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"1\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t1\n\t\tlabel\t\"2\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t176.0\n\t\t\ty\t181.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"2\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t2\n\t\tlabel\t\"3\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t735.0\n\t\t\ty\t119.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"3\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t3\n\t\tlabel\t\"4\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t359.0\n\t\t\ty\t370.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"4\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t4\n\t\tlabel\t\"5\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t696.0\n\t\t\ty\t46.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"5\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t5\n\t\tlabel\t\"6\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t593.0\n\t\t\ty\t386.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"6\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t6\n\t\tlabel\t\"7\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t747.0\n\t\t\ty\t471.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"7\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t7\n\t\tlabel\t\"8\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t597.0\n\t\t\ty\t543.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"8\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t8\n\t\tlabel\t\"9\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t285.0\n\t\t\ty\t313.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"9\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t9\n\t\tlabel\t\"10\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t533.0\n\t\t\ty\t437.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"10\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t10\n\t\tlabel\t\"11\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t366.0\n\t\t\ty\t543.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"11\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t11\n\t\tlabel\t\"12\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t801.0\n\t\t\ty\t594.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"12\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t12\n\t\tlabel\t\"13\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t715.0\n\t\t\ty\t362.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"13\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t0\n\t\ttarget\t1\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t0\n\t\ttarget\t2\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t2\n\t\ttarget\t3\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t2\n\t\ttarget\t4\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t2\n\t\ttarget\t5\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t5\n\t\ttarget\t6\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t6\n\t\ttarget\t7\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t3\n\t\ttarget\t8\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t7\n\t\ttarget\t9\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t7\n\t\ttarget\t10\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t7\n\t\ttarget\t11\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t7\n\t\ttarget\t12\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n]\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/trees/tree01m.tglf",
    "content": "0 501.000 232.000 30.000 30.000\n1 176.000 181.000 30.000 30.000\n2 735.000 119.000 30.000 30.000\n3 359.000 370.000 30.000 30.000\n4 696.000 46.000 30.000 30.000\n5 593.000 386.000 30.000 30.000\n6 747.000 471.000 30.000 30.000\n7 597.000 543.000 30.000 30.000\n8 285.000 313.000 30.000 30.000\n9 533.000 437.000 30.000 30.000\n10 366.000 543.000 30.000 30.000\n11 801.000 594.000 30.000 30.000\n12 715.000 362.000 30.000 30.000\n#\n0 2\n7 9\n3 8\n2 4\n7 12\n5 6\n7 10\n6 7\n0 1\n2 3\n2 5\n7 11\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/trees/tree02.gml",
    "content": "Creator\t\"yFiles\"\nVersion\t\"2.12\"\ngraph\n[\n\thierarchic\t1\n\tlabel\t\"\"\n\tdirected\t1\n\tnode\n\t[\n\t\tid\t0\n\t\tlabel\t\"1\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t489.0\n\t\t\ty\t147.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"1\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t1\n\t\tlabel\t\"2\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t441.0\n\t\t\ty\t210.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"2\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t2\n\t\tlabel\t\"3\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t527.0\n\t\t\ty\t209.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"3\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t3\n\t\tlabel\t\"4\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t354.0\n\t\t\ty\t213.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"4\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t4\n\t\tlabel\t\"5\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t352.0\n\t\t\ty\t287.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"5\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t5\n\t\tlabel\t\"6\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t258.0\n\t\t\ty\t207.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"6\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t6\n\t\tlabel\t\"7\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t260.0\n\t\t\ty\t297.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"7\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t7\n\t\tlabel\t\"8\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t260.0\n\t\t\ty\t388.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"8\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t8\n\t\tlabel\t\"9\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t613.0\n\t\t\ty\t199.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"9\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t9\n\t\tlabel\t\"10\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t614.0\n\t\t\ty\t267.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"10\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t10\n\t\tlabel\t\"11\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t715.0\n\t\t\ty\t199.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"11\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t11\n\t\tlabel\t\"12\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t717.0\n\t\t\ty\t267.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"12\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t12\n\t\tlabel\t\"13\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t721.0\n\t\t\ty\t403.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"13\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t0\n\t\ttarget\t5\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t0\n\t\ttarget\t3\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t0\n\t\ttarget\t1\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t0\n\t\ttarget\t2\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t0\n\t\ttarget\t8\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t0\n\t\ttarget\t10\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t5\n\t\ttarget\t6\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t6\n\t\ttarget\t7\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t3\n\t\ttarget\t4\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t8\n\t\ttarget\t9\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t10\n\t\ttarget\t11\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t11\n\t\ttarget\t12\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n]\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/trees/tree02.tglf",
    "content": "0 489.000 147.000 30.000 30.000\n1 441.000 210.000 30.000 30.000\n2 527.000 209.000 30.000 30.000\n3 354.000 213.000 30.000 30.000\n4 352.000 287.000 30.000 30.000\n5 258.000 207.000 30.000 30.000\n6 260.000 297.000 30.000 30.000\n7 260.000 388.000 30.000 30.000\n8 613.000 199.000 30.000 30.000\n9 614.000 267.000 30.000 30.000\n10 715.000 199.000 30.000 30.000\n11 717.000 267.000 30.000 30.000\n12 721.000 403.000 30.000 30.000\n#\n0 10\n0 5\n0 3\n0 2\n8 9\n0 1\n5 6\n11 12\n0 8\n3 4\n10 11\n6 7\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/trees/tree03.gml",
    "content": "Creator\t\"yFiles\"\nVersion\t\"2.12\"\ngraph\n[\n\thierarchic\t1\n\tlabel\t\"\"\n\tdirected\t1\n\tnode\n\t[\n\t\tid\t0\n\t\tlabel\t\"1\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t530.0\n\t\t\ty\t83.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"1\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t1\n\t\tlabel\t\"2\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t311.0\n\t\t\ty\t156.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"2\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t2\n\t\tlabel\t\"3\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t403.0\n\t\t\ty\t156.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"3\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t3\n\t\tlabel\t\"4\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t529.0\n\t\t\ty\t158.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"4\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t4\n\t\tlabel\t\"5\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t683.0\n\t\t\ty\t162.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"5\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t5\n\t\tlabel\t\"6\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t847.0\n\t\t\ty\t165.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"6\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t6\n\t\tlabel\t\"7\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t304.0\n\t\t\ty\t222.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"7\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t7\n\t\tlabel\t\"8\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t858.0\n\t\t\ty\t228.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"8\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t8\n\t\tlabel\t\"9\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t499.0\n\t\t\ty\t251.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"9\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t9\n\t\tlabel\t\"10\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t580.0\n\t\t\ty\t250.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"10\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t10\n\t\tlabel\t\"11\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t493.0\n\t\t\ty\t321.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"11\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t11\n\t\tlabel\t\"12\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t567.0\n\t\t\ty\t328.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"12\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t12\n\t\tlabel\t\"13\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t638.0\n\t\t\ty\t328.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"13\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tnode\n\t[\n\t\tid\t13\n\t\tlabel\t\"14\"\n\t\tgraphics\n\t\t[\n\t\t\tx\t714.0\n\t\t\ty\t332.0\n\t\t\tw\t30.0\n\t\t\th\t30.0\n\t\t\ttype\t\"rectangle\"\n\t\t\tfill\t\"#FFCC00\"\n\t\t\toutline\t\"#000000\"\n\t\t]\n\t\tLabelGraphics\n\t\t[\n\t\t\ttext\t\"14\"\n\t\t\tfontSize\t12\n\t\t\tfontName\t\"Dialog\"\n\t\t\tmodel\t\"null\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t0\n\t\ttarget\t3\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t0\n\t\ttarget\t1\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t0\n\t\ttarget\t2\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t0\n\t\ttarget\t4\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t0\n\t\ttarget\t5\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t5\n\t\ttarget\t7\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t1\n\t\ttarget\t6\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t3\n\t\ttarget\t8\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t3\n\t\ttarget\t9\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t8\n\t\ttarget\t10\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t9\n\t\ttarget\t11\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t9\n\t\ttarget\t12\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n\tedge\n\t[\n\t\tsource\t9\n\t\ttarget\t13\n\t\tgraphics\n\t\t[\n\t\t\tfill\t\"#000000\"\n\t\t\ttargetArrow\t\"standard\"\n\t\t]\n\t]\n]\n"
  },
  {
    "path": "cola/libdialect/tests/graphs/trees/tree03.tglf",
    "content": "0 530.000 83.000 30.000 30.000\n1 311.000 156.000 30.000 30.000\n2 403.000 156.000 30.000 30.000\n3 529.000 158.000 30.000 30.000\n4 683.000 162.000 30.000 30.000\n5 847.000 165.000 30.000 30.000\n6 304.000 222.000 30.000 30.000\n7 858.000 228.000 30.000 30.000\n8 499.000 251.000 30.000 30.000\n9 580.000 250.000 30.000 30.000\n10 493.000 321.000 30.000 30.000\n11 567.000 328.000 30.000 30.000\n12 638.000 328.000 30.000 30.000\n13 714.000 332.000 30.000 30.000\n#\n0 5\n0 2\n3 9\n0 4\n0 3\n9 12\n9 13\n5 7\n1 6\n0 1\n3 8\n8 10\n9 11\n"
  },
  {
    "path": "cola/libdialect/tests/hola10.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libdialect - A library for computing DiAlEcT layouts:\n *                 D = Decompose/Distribute\n *                 A = Arrange\n *                 E = Expand/Emend\n *                 T = Transform\n *\n * Copyright (C) 2018  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n * Author(s):   Steve Kieffer   <http://skieffer.info>\n*/\n\n#include <iostream>\n#include <chrono>\n\n#include \"libdialect/commontypes.h\"\n#include \"libdialect/io.h\"\n#include \"libdialect/util.h\"\n#include \"libdialect/graphs.h\"\n#include \"libdialect/opts.h\"\n#include \"libdialect/hola.h\"\n\nusing namespace dialect;\n\nint main(void) {\n\n    HolaOpts opts;\n    int d = 0;\n    for (int i = 1; i <= 5; ++i) {\n        std::string name = string_format(\"v%de%d\", 10*i, (10 + d)*i);\n        std::cout << name << \": \";\n        Graph_SP graph = buildGraphFromTglfFile(\"graphs/\" \"random/\"+name+\".tglf\");\n        auto t1 = std::chrono::high_resolution_clock::now();\n        doHOLA(*graph, opts);\n        auto t2 = std::chrono::high_resolution_clock::now();\n        auto ms = std::chrono::duration_cast<std::chrono::milliseconds>(t2-t1).count();\n        std::cout << string_format(\"%10d ms\", ms) << std::endl;\n        writeStringToFile(graph->writeTglf(), \"output/\" \"hola10_\" +name+\".tglf\");\n        writeStringToFile(graph->writeSvg(), \"output/\" \"svg/\" \"hola10_\" +name+\".svg\");\n    }\n\n}\n"
  },
  {
    "path": "cola/libdialect/tests/hola11.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libdialect - A library for computing DiAlEcT layouts:\n *                 D = Decompose/Distribute\n *                 A = Arrange\n *                 E = Expand/Emend\n *                 T = Transform\n *\n * Copyright (C) 2018  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n * Author(s):   Steve Kieffer   <http://skieffer.info>\n*/\n\n#include <iostream>\n#include <chrono>\n\n#include \"libdialect/commontypes.h\"\n#include \"libdialect/io.h\"\n#include \"libdialect/util.h\"\n#include \"libdialect/graphs.h\"\n#include \"libdialect/opts.h\"\n#include \"libdialect/hola.h\"\n\nusing namespace dialect;\n\nint main(void) {\n\n    HolaOpts opts;\n    int d = 1;\n    for (int i = 1; i <= 5; ++i) {\n        std::string name = string_format(\"v%de%d\", 10*i, (10 + d)*i);\n        std::cout << name << \": \";\n        Graph_SP graph = buildGraphFromTglfFile(\"graphs/\" \"random/\"+name+\".tglf\");\n        auto t1 = std::chrono::high_resolution_clock::now();\n        doHOLA(*graph, opts);\n        auto t2 = std::chrono::high_resolution_clock::now();\n        auto ms = std::chrono::duration_cast<std::chrono::milliseconds>(t2-t1).count();\n        std::cout << string_format(\"%10d ms\", ms) << std::endl;\n        writeStringToFile(graph->writeTglf(), \"output/\" \"hola11_\" +name+\".tglf\");\n        writeStringToFile(graph->writeSvg(), \"output/\" \"svg/\" \"hola11_\" +name+\".svg\");\n    }\n\n}\n"
  },
  {
    "path": "cola/libdialect/tests/hola12.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libdialect - A library for computing DiAlEcT layouts:\n *                 D = Decompose/Distribute\n *                 A = Arrange\n *                 E = Expand/Emend\n *                 T = Transform\n *\n * Copyright (C) 2018  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n * Author(s):   Steve Kieffer   <http://skieffer.info>\n*/\n\n#include <iostream>\n#include <chrono>\n\n#include \"libdialect/commontypes.h\"\n#include \"libdialect/io.h\"\n#include \"libdialect/util.h\"\n#include \"libdialect/graphs.h\"\n#include \"libdialect/opts.h\"\n#include \"libdialect/hola.h\"\n\nusing namespace dialect;\n\nint main(void) {\n\n    HolaOpts opts;\n    int d = 2;\n    for (int i = 1; i <= 5; ++i) {\n        std::string name = string_format(\"v%de%d\", 10*i, (10 + d)*i);\n        std::cout << name << \": \";\n        Graph_SP graph = buildGraphFromTglfFile(\"graphs/\" \"random/\"+name+\".tglf\");\n        auto t1 = std::chrono::high_resolution_clock::now();\n        doHOLA(*graph, opts);\n        auto t2 = std::chrono::high_resolution_clock::now();\n        auto ms = std::chrono::duration_cast<std::chrono::milliseconds>(t2-t1).count();\n        std::cout << string_format(\"%10d ms\", ms) << std::endl;\n        writeStringToFile(graph->writeTglf(), \"output/\" \"hola12_\" +name+\".tglf\");\n        writeStringToFile(graph->writeSvg(), \"output/\" \"svg/\" \"hola12_\" +name+\".svg\");\n    }\n\n}\n"
  },
  {
    "path": "cola/libdialect/tests/holaRand.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libdialect - A library for computing DiAlEcT layouts:\n *                 D = Decompose/Distribute\n *                 A = Arrange\n *                 E = Expand/Emend\n *                 T = Transform\n *\n * Copyright (C) 2018  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n * Author(s):   Steve Kieffer   <http://skieffer.info>\n*/\n\n#include <string>\n#include <vector>\n#include <iostream>\n#include <chrono>\n\n#include \"libdialect/commontypes.h\"\n#include \"libdialect/io.h\"\n#include \"libdialect/util.h\"\n#include \"libdialect/graphs.h\"\n#include \"libdialect/opts.h\"\n#include \"libdialect/logging.h\"\n#include \"libdialect/hola.h\"\n\nusing namespace dialect;\n\nusing std::vector;\nusing std::string;\n\nint main(void) {\n\n    // Thanks to https://stackoverflow.com/a/12231232 for timing code.\n\n    HolaOpts opts;\n    string *debugName = nullptr;\n    //debugName = new string(\"v100e120\");\n    for (int j = 0; j < 4; ++j) {\n        for (int i = 1; i <= 10; ++i) {\n            std::string name = string_format(\"v%de%d\", 10*i, (10 + j)*i);\n            if (debugName != nullptr && name != *debugName) continue;\n            std::cout << name << \": \";\n            Graph_SP graph = buildGraphFromTglfFile(\"graphs/\" \"random/\"+name+\".tglf\");\n            if (debugName != nullptr && name==*debugName) doHOLA(*graph, opts, new Logger(\"output/\", \"holaRand_\", true));\n            else {\n                auto t1 = std::chrono::high_resolution_clock::now();\n                doHOLA(*graph, opts);\n                auto t2 = std::chrono::high_resolution_clock::now();\n                auto ms = std::chrono::duration_cast<std::chrono::milliseconds>(t2-t1).count();\n                std::cout << string_format(\"%10d ms\", ms) << std::endl;\n            }\n            writeStringToFile(graph->writeTglf(), \"output/\" \"holaRand_\" +name+\".tglf\");\n        }\n    }\n\n}\n"
  },
  {
    "path": "cola/libdialect/tests/hola_arpa.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libdialect - A library for computing DiAlEcT layouts:\n *                 D = Decompose/Distribute\n *                 A = Arrange\n *                 E = Expand/Emend\n *                 T = Transform\n *\n * Copyright (C) 2018  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n * Author(s):   Steve Kieffer   <http://skieffer.info>\n*/\n\n#include \"libdialect/commontypes.h\"\n#include \"libdialect/io.h\"\n#include \"libdialect/util.h\"\n#include \"libdialect/graphs.h\"\n#include \"libdialect/opts.h\"\n#include \"libdialect/logging.h\"\n#include \"libdialect/hola.h\"\n\nusing namespace dialect;\n\nint main(void) {\n    Graph_SP graph = buildGraphFromTglfFile(\"graphs/\" \"special/Arpanet19728_input.tglf\");\n    HolaOpts opts;\n    bool debug = false;\n    if (debug) doHOLA(*graph, opts, new Logger(\"output/\", \"hola_arpa_\", true, true));\n    else doHOLA(*graph, opts);\n    writeStringToFile(graph->writeTglf(), \"output/\" \"hola_arpa_\" \"layout.tglf\");\n    writeStringToFile(graph->writeSvg(), \"output/\" \"svg/\" \"hola_arpa_\" \"layout.svg\");\n}\n"
  },
  {
    "path": "cola/libdialect/tests/hola_belnet.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libdialect - A library for computing DiAlEcT layouts:\n *                 D = Decompose/Distribute\n *                 A = Arrange\n *                 E = Expand/Emend\n *                 T = Transform\n *\n * Copyright (C) 2018  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n * Author(s):   Steve Kieffer   <http://skieffer.info>\n*/\n\n#include \"libdialect/commontypes.h\"\n#include \"libdialect/io.h\"\n#include \"libdialect/util.h\"\n#include \"libdialect/graphs.h\"\n#include \"libdialect/opts.h\"\n#include \"libdialect/logging.h\"\n#include \"libdialect/hola.h\"\n\nusing namespace dialect;\n\nint main(void) {\n    Graph_SP graph = buildGraphFromTglfFile(\"graphs/\" \"special/Belnet2004.tglf\");\n    HolaOpts opts;\n    std::string prefix = \"hola_belnet_\";\n    bool debug = false;\n    if (debug) doHOLA(*graph, opts, new Logger(\"output/\", prefix, true, true));\n    else doHOLA(*graph, opts);\n    writeStringToFile(graph->writeTglf(), \"output/\" + prefix + \"layout.tglf\");\n    writeStringToFile(graph->writeSvg(), \"output/\" \"svg/\" + prefix + \"layout.svg\");\n}\n"
  },
  {
    "path": "cola/libdialect/tests/hola_cernet.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libdialect - A library for computing DiAlEcT layouts:\n *                 D = Decompose/Distribute\n *                 A = Arrange\n *                 E = Expand/Emend\n *                 T = Transform\n *\n * Copyright (C) 2018  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n * Author(s):   Steve Kieffer   <http://skieffer.info>\n*/\n\n#include \"libdialect/commontypes.h\"\n#include \"libdialect/io.h\"\n#include \"libdialect/util.h\"\n#include \"libdialect/graphs.h\"\n#include \"libdialect/opts.h\"\n#include \"libdialect/logging.h\"\n#include \"libdialect/hola.h\"\n\nusing namespace dialect;\n\nint main(void) {\n    Graph_SP graph = buildGraphFromTglfFile(\"graphs/\" \"special/Cernet.tglf\");\n    HolaOpts opts;\n    std::string prefix = \"hola_cernet_\";\n    bool debug = false;\n    if (debug) doHOLA(*graph, opts, new Logger(\"output/\", prefix, true, true));\n    else doHOLA(*graph, opts);\n    writeStringToFile(graph->writeTglf(), \"output/\" + prefix + \"layout.tglf\");\n    writeStringToFile(graph->writeSvg(), \"output/\" \"svg/\" + prefix + \"layout.svg\");\n}\n"
  },
  {
    "path": "cola/libdialect/tests/hola_claranet.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libdialect - A library for computing DiAlEcT layouts:\n *                 D = Decompose/Distribute\n *                 A = Arrange\n *                 E = Expand/Emend\n *                 T = Transform\n *\n * Copyright (C) 2018  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n * Author(s):   Steve Kieffer   <http://skieffer.info>\n*/\n\n#include \"libdialect/commontypes.h\"\n#include \"libdialect/io.h\"\n#include \"libdialect/util.h\"\n#include \"libdialect/graphs.h\"\n#include \"libdialect/opts.h\"\n#include \"libdialect/logging.h\"\n#include \"libdialect/hola.h\"\n\nusing namespace dialect;\n\nint main(void) {\n    Graph_SP graph = buildGraphFromTglfFile(\"graphs/\" \"special/Claranet.tglf\");\n    HolaOpts opts;\n    std::string prefix = \"hola_claranet_\";\n    bool debug = false;\n    if (debug) doHOLA(*graph, opts, new Logger(\"output/\", prefix, true, true));\n    else doHOLA(*graph, opts);\n    writeStringToFile(graph->writeTglf(), \"output/\" + prefix + \"layout.tglf\");\n    writeStringToFile(graph->writeSvg(), \"output/\" \"svg/\" + prefix + \"layout.svg\");\n}\n"
  },
  {
    "path": "cola/libdialect/tests/hola_garr.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libdialect - A library for computing DiAlEcT layouts:\n *                 D = Decompose/Distribute\n *                 A = Arrange\n *                 E = Expand/Emend\n *                 T = Transform\n *\n * Copyright (C) 2018  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n * Author(s):   Steve Kieffer   <http://skieffer.info>\n*/\n\n#include \"libdialect/commontypes.h\"\n#include \"libdialect/io.h\"\n#include \"libdialect/util.h\"\n#include \"libdialect/graphs.h\"\n#include \"libdialect/opts.h\"\n#include \"libdialect/logging.h\"\n#include \"libdialect/hola.h\"\n\nusing namespace dialect;\n\nint main(void) {\n    Graph_SP graph = buildGraphFromTglfFile(\"graphs/\" \"special/Garr201001.tglf\");\n    HolaOpts opts;\n    std::string prefix = \"hola_garr_\";\n    bool debug = false;\n    if (debug) doHOLA(*graph, opts, new Logger(\"output/\", prefix, true, true));\n    else doHOLA(*graph, opts);\n    writeStringToFile(graph->writeTglf(), \"output/\" + prefix + \"layout.tglf\");\n    writeStringToFile(graph->writeSvg(), \"output/\" \"svg/\" + prefix + \"layout.svg\");\n}\n"
  },
  {
    "path": "cola/libdialect/tests/hola_janetlense.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libdialect - A library for computing DiAlEcT layouts:\n *                 D = Decompose/Distribute\n *                 A = Arrange\n *                 E = Expand/Emend\n *                 T = Transform\n *\n * Copyright (C) 2018  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n * Author(s):   Steve Kieffer   <http://skieffer.info>\n*/\n\n#include \"libdialect/commontypes.h\"\n#include \"libdialect/io.h\"\n#include \"libdialect/util.h\"\n#include \"libdialect/graphs.h\"\n#include \"libdialect/opts.h\"\n#include \"libdialect/logging.h\"\n#include \"libdialect/hola.h\"\n\nusing namespace dialect;\n\nint main(void) {\n    Graph_SP graph = buildGraphFromTglfFile(\"graphs/\" \"special/Janetlense.tglf\");\n    HolaOpts opts;\n    std::string prefix = \"hola_janetlense_\";\n    bool debug = false;\n    if (debug) doHOLA(*graph, opts, new Logger(\"output/\", prefix, true, true));\n    else doHOLA(*graph, opts);\n    writeStringToFile(graph->writeTglf(), \"output/\" + prefix + \"layout.tglf\");\n    writeStringToFile(graph->writeSvg(), \"output/\" \"svg/\" + prefix + \"layout.svg\");\n}\n"
  },
  {
    "path": "cola/libdialect/tests/hola_slovakia.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libdialect - A library for computing DiAlEcT layouts:\n *                 D = Decompose/Distribute\n *                 A = Arrange\n *                 E = Expand/Emend\n *                 T = Transform\n *\n * Copyright (C) 2018  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n * Author(s):   Steve Kieffer   <http://skieffer.info>\n*/\n\n#include \"libdialect/commontypes.h\"\n#include \"libdialect/io.h\"\n#include \"libdialect/util.h\"\n#include \"libdialect/graphs.h\"\n#include \"libdialect/opts.h\"\n#include \"libdialect/logging.h\"\n#include \"libdialect/hola.h\"\n\nusing namespace dialect;\n\nint main(void) {\n    Graph_SP graph = buildGraphFromTglfFile(\"graphs/\" \"special/GtsSlovakia_input.tglf\");\n    HolaOpts opts;\n    std::string prefix = \"hola_slovakia_\";\n    bool debug = false;\n    if (debug) doHOLA(*graph, opts, new Logger(\"output/\", prefix, true, true));\n    else doHOLA(*graph, opts);\n    writeStringToFile(graph->writeTglf(), \"output/\" + prefix + \"layout.tglf\");\n    writeStringToFile(graph->writeSvg(), \"output/\" \"svg/\" + prefix + \"layout.svg\");\n}\n"
  },
  {
    "path": "cola/libdialect/tests/hola_tree.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libdialect - A library for computing DiAlEcT layouts:\n *                 D = Decompose/Distribute\n *                 A = Arrange\n *                 E = Expand/Emend\n *                 T = Transform\n *\n * Copyright (C) 2018  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n * Author(s):   Steve Kieffer   <http://skieffer.info>\n*/\n\n#include \"libdialect/commontypes.h\"\n#include \"libdialect/io.h\"\n#include \"libdialect/util.h\"\n#include \"libdialect/graphs.h\"\n#include \"libdialect/opts.h\"\n#include \"libdialect/logging.h\"\n#include \"libdialect/hola.h\"\n\nusing namespace dialect;\n\nint main(void) {\n    Graph_SP graph = buildGraphFromTglfFile(\"graphs/\" \"trees/tree02.tglf\");\n    HolaOpts opts;\n    //opts.routingAbs_nudgingDistance = 10;\n    std::string prefix = \"hola_tree02_\";\n    bool debug = false;\n    if (debug) doHOLA(*graph, opts, new Logger(\"output/\", prefix, true, true));\n    else doHOLA(*graph, opts);\n    writeStringToFile(graph->writeTglf(), \"output/\" + prefix + \"layout.tglf\");\n    writeStringToFile(graph->writeSvg(), \"output/\" \"svg/\" + prefix + \"layout.svg\");\n}\n"
  },
  {
    "path": "cola/libdialect/tests/holalonenode.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libdialect - A library for computing DiAlEcT layouts:\n *                 D = Decompose/Distribute\n *                 A = Arrange\n *                 E = Expand/Emend\n *                 T = Transform\n *\n * Copyright (C) 2018  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n * Author(s):   Steve Kieffer   <http://skieffer.info>\n*/\n\n#include <string>\n#include <vector>\n\n#include \"libdialect/commontypes.h\"\n#include \"libdialect/io.h\"\n#include \"libdialect/util.h\"\n#include \"libdialect/graphs.h\"\n#include \"libdialect/opts.h\"\n#include \"libdialect/logging.h\"\n#include \"libdialect/hola.h\"\n\nusing namespace dialect;\n\nusing std::vector;\nusing std::string;\n\nint main(void) {\n\n    Graph_SP graph = buildGraphFromTglfFile(\"graphs/\" \"special/lone_node.tglf\");\n    HolaOpts opts;\n    bool debug = false;\n    if (debug) doHOLA(*graph, opts, new Logger(\"output/\", \"holalonenode_\", true, true));\n    else doHOLA(*graph, opts);\n    writeStringToFile(graph->writeTglf(), \"output/\" \"holalonenode_\" \"layout.tglf\");\n\n}\n"
  },
  {
    "path": "cola/libdialect/tests/holametro01.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libdialect - A library for computing DiAlEcT layouts:\n *                 D = Decompose/Distribute\n *                 A = Arrange\n *                 E = Expand/Emend\n *                 T = Transform\n *\n * Copyright (C) 2018  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n * Author(s):   Steve Kieffer   <http://skieffer.info>\n*/\n\n#include \"libdialect/commontypes.h\"\n#include \"libdialect/io.h\"\n#include \"libdialect/util.h\"\n#include \"libdialect/graphs.h\"\n#include \"libdialect/opts.h\"\n#include \"libdialect/logging.h\"\n#include \"libdialect/hola.h\"\n\nusing namespace dialect;\n\nint main(void) {\n    Graph_SP graph = buildGraphFromTglfFile(\"graphs/\" \"metro/sydney.tglf\");\n    HolaOpts opts;\n    bool debug = false;\n    if (debug) doHOLA(*graph, opts, new Logger(\"output/\", \"holametro01_\", true, true));\n    else doHOLA(*graph, opts);\n    writeStringToFile(graph->writeTglf(), \"output/\" \"holametro01_\" \"layout.tglf\");\n    writeStringToFile(graph->writeSvg(), \"output/\" \"svg/\" \"holametro01_\" \"layout.svg\");\n}\n"
  },
  {
    "path": "cola/libdialect/tests/holasbgn01.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libdialect - A library for computing DiAlEcT layouts:\n *                 D = Decompose/Distribute\n *                 A = Arrange\n *                 E = Expand/Emend\n *                 T = Transform\n *\n * Copyright (C) 2018  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n * Author(s):   Steve Kieffer   <http://skieffer.info>\n*/\n\n#include \"libdialect/commontypes.h\"\n#include \"libdialect/io.h\"\n#include \"libdialect/util.h\"\n#include \"libdialect/graphs.h\"\n#include \"libdialect/opts.h\"\n#include \"libdialect/logging.h\"\n#include \"libdialect/hola.h\"\n\nusing namespace dialect;\n\nint main(void) {\n    Graph_SP graph = buildGraphFromTglfFile(\"graphs/\" \"sbgn/glyco.tglf\");\n    HolaOpts opts;\n    bool debug = false;\n    if (debug) doHOLA(*graph, opts, new Logger(\"output/\", \"holasbgn01_\", true, true));\n    else doHOLA(*graph, opts);\n    writeStringToFile(graph->writeTglf(), \"output/\" \"holasbgn01_\" \"layout.tglf\");\n    writeStringToFile(graph->writeSvg(), \"output/\" \"svg/\" \"holasbgn01_\" \"layout.svg\");\n}\n"
  },
  {
    "path": "cola/libdialect/tests/holasbgn02.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libdialect - A library for computing DiAlEcT layouts:\n *                 D = Decompose/Distribute\n *                 A = Arrange\n *                 E = Expand/Emend\n *                 T = Transform\n *\n * Copyright (C) 2018  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n * Author(s):   Steve Kieffer   <http://skieffer.info>\n*/\n\n#include \"libdialect/commontypes.h\"\n#include \"libdialect/io.h\"\n#include \"libdialect/util.h\"\n#include \"libdialect/graphs.h\"\n#include \"libdialect/opts.h\"\n#include \"libdialect/logging.h\"\n#include \"libdialect/hola.h\"\n\nusing namespace dialect;\n\nint main(void) {\n    Graph_SP graph = buildGraphFromTglfFile(\"graphs/\" \"sbgn/calvin.tglf\");\n    HolaOpts opts;\n    bool debug = false;\n    if (debug) doHOLA(*graph, opts, new Logger(\"output/\", \"holasbgn02_\", true, true));\n    else doHOLA(*graph, opts);\n    writeStringToFile(graph->writeTglf(), \"output/\" \"holasbgn02_\" \"layout.tglf\");\n    writeStringToFile(graph->writeSvg(), \"output/\" \"svg/\" \"holasbgn02_\" \"layout.svg\");\n}\n"
  },
  {
    "path": "cola/libdialect/tests/holasbgn03.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libdialect - A library for computing DiAlEcT layouts:\n *                 D = Decompose/Distribute\n *                 A = Arrange\n *                 E = Expand/Emend\n *                 T = Transform\n *\n * Copyright (C) 2018  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n * Author(s):   Steve Kieffer   <http://skieffer.info>\n*/\n\n#include \"libdialect/commontypes.h\"\n#include \"libdialect/io.h\"\n#include \"libdialect/util.h\"\n#include \"libdialect/graphs.h\"\n#include \"libdialect/opts.h\"\n#include \"libdialect/logging.h\"\n#include \"libdialect/hola.h\"\n\nusing namespace dialect;\n\nint main(void) {\n    Graph_SP graph = buildGraphFromTglfFile(\"graphs/\" \"sbgn/urea1.tglf\");\n    HolaOpts opts;\n    bool debug = false;\n    if (debug) doHOLA(*graph, opts, new Logger(\"output/\", \"holasbgn03_\", true, true));\n    else doHOLA(*graph, opts);\n    writeStringToFile(graph->writeTglf(), \"output/\" \"holasbgn03_\" \"layout.tglf\");\n    writeStringToFile(graph->writeSvg(), \"output/\" \"svg/\" \"holasbgn03_\" \"layout.svg\");\n}\n"
  },
  {
    "path": "cola/libdialect/tests/holasbgn04.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libdialect - A library for computing DiAlEcT layouts:\n *                 D = Decompose/Distribute\n *                 A = Arrange\n *                 E = Expand/Emend\n *                 T = Transform\n *\n * Copyright (C) 2018  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n * Author(s):   Steve Kieffer   <http://skieffer.info>\n*/\n\n#include \"libdialect/commontypes.h\"\n#include \"libdialect/io.h\"\n#include \"libdialect/util.h\"\n#include \"libdialect/graphs.h\"\n#include \"libdialect/opts.h\"\n#include \"libdialect/logging.h\"\n#include \"libdialect/hola.h\"\n\nusing namespace dialect;\n\nint main(void) {\n    Graph_SP graph = buildGraphFromTglfFile(\"graphs/\" \"sbgn/keratan.tglf\");\n    HolaOpts opts;\n    bool debug = false;\n    if (debug) doHOLA(*graph, opts, new Logger(\"output/\", \"holasbgn04_\", true, true));\n    else doHOLA(*graph, opts);\n    writeStringToFile(graph->writeTglf(), \"output/\" \"holasbgn04_\" \"layout.tglf\");\n    writeStringToFile(graph->writeSvg(), \"output/\" \"svg/\" \"holasbgn04_\" \"layout.svg\");\n}\n"
  },
  {
    "path": "cola/libdialect/tests/inserttrees01.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libdialect - A library for computing DiAlEcT layouts:\n *                 D = Decompose/Distribute\n *                 A = Arrange\n *                 E = Expand/Emend\n *                 T = Transform\n *\n * Copyright (C) 2018  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n * Author(s):   Steve Kieffer   <http://skieffer.info>\n*/\n\n#include <vector>\n#include <iostream>\n\n#include \"libvpsc/assertions.h\"\n\n#include \"libdialect/commontypes.h\"\n#include \"libdialect/io.h\"\n#include \"libdialect/graphs.h\"\n#include \"libdialect/util.h\"\n#include \"libdialect/routing.h\"\n#include \"libdialect/opts.h\"\n#include \"libdialect/planarise.h\"\n#include \"libdialect/faces.h\"\n#include \"libdialect/peeling.h\"\n#include \"libdialect/trees.h\"\n#include \"libdialect/treeplacement.h\"\n#include \"libdialect/constraints.h\"\n#include \"libdialect/nodeconfig.h\"\n\nusing namespace dialect;\n\nusing std::vector;\nusing std::cout;\nusing std::endl;\n\nint main(void) {\n\n    HolaOpts opts;\n    // Build a graph.\n    Graph_SP graph = buildGraphFromTglfFile(\"graphs/\" \"special/expand03.tglf\");\n    // Peel.\n    Trees trees = peel(*graph);\n    // Do an OrthoHub layout on the core.\n    OrthoHubLayoutOptions ohl_opts;\n    OrthoHubLayout ohl(graph, ohl_opts);\n    ohl.layout();\n    // There should be four trees.\n    COLA_ASSERT(trees.size() == 4);\n    // Give the trees their symmetric layout.\n    double iel = graph->getIEL();\n    for (Tree_SP t : trees) t->symmetricLayout(CardinalDir::EAST, iel/4.0, iel, opts.preferConvexTrees);\n    // Do an ortho routing and planarise the core.\n    LeaflessOrthoRouter lor(graph, opts);\n    lor.setShapeBufferDistanceIELScalar(0.125);\n    lor.route();\n    OrthoPlanariser op(graph);\n    Graph_SP P = op.planarise();\n    // Reattach trees.\n    FaceSet_SP faceSet = reattachTrees(P, trees, opts);\n    // Insert actual trees instead of tree boxes.\n    TreePlacements tps = faceSet->getAllTreePlacements();\n    NodesById bufferNodes;\n    NodesById treeNodes;\n    EdgesById treeEdges;\n    for (auto tp : tps) {\n        tp->applyGeometryToTree();\n        tp->insertTreeIntoGraph(*P, treeNodes, bufferNodes, treeEdges);\n    }\n    writeStringToFile(P->writeTglf(), \"output/\" \"inserttrees01_\" \"01_with_trees_and_buffers.tglf\");\n    double IEL = graph->getIEL();\n    P->getSepMatrix().setExtraBdryGap(IEL/2.0);\n    ColaOptions colaOpts;\n    colaOpts.preventOverlaps = true;\n    colaOpts.solidifyAlignedEdges = true;\n    colaOpts.useNeighbourStress = true;\n    colaOpts.useMajorization = true;\n    P->destress(colaOpts);\n    writeStringToFile(P->writeTglf(), \"output/\" \"inserttrees01_\" \"02_destressed.tglf\");\n    return 0;\n}\n"
  },
  {
    "path": "cola/libdialect/tests/leaflessroute01.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libdialect - A library for computing DiAlEcT layouts:\n *                 D = Decompose/Distribute\n *                 A = Arrange\n *                 E = Expand/Emend\n *                 T = Transform\n *\n * Copyright (C) 2018  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n * Author(s):   Steve Kieffer   <http://skieffer.info>\n*/\n\n#include <vector>\n\n#include \"libvpsc/assertions.h\"\n\n#include \"libdialect/commontypes.h\"\n#include \"libdialect/io.h\"\n#include \"libdialect/graphs.h\"\n#include \"libdialect/peeling.h\"\n#include \"libdialect/util.h\"\n#include \"libdialect/routing.h\"\n#include \"libdialect/opts.h\"\n#include \"libdialect/nodeconfig.h\"\n\nusing namespace dialect;\n\nusing std::vector;\n\nint main(void) {\n\n    // Peel off trees to obtain a core graph.\n    Graph_SP graph = buildGraphFromTglfFile(\"graphs/\" \"random/v40e42.tglf\");\n    peel(*graph);\n    // Destress.\n    graph->destress();\n#define OHL\n#ifdef OHL\n    // Do an ortho hub layout.\n    OrthoHubLayoutOptions ohl_opts;\n    OrthoHubLayout ohl(graph, ohl_opts);\n    ohl.layout();\n#endif\n    // Now do leafless routing.\n    HolaOpts opts;\n    LeaflessOrthoRouter lor(graph, opts);\n    lor.route();\n    writeStringToFile(graph->writeTglf(), \"output/\" \"leaflessroute01_\" \"core.tglf\");\n    return 0;\n}\n"
  },
  {
    "path": "cola/libdialect/tests/leaflessroute02.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libdialect - A library for computing DiAlEcT layouts:\n *                 D = Decompose/Distribute\n *                 A = Arrange\n *                 E = Expand/Emend\n *                 T = Transform\n *\n * Copyright (C) 2018  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n * Author(s):   Steve Kieffer   <http://skieffer.info>\n*/\n\n#include <vector>\n\n#include \"libvpsc/assertions.h\"\n\n#include \"libdialect/commontypes.h\"\n#include \"libdialect/io.h\"\n#include \"libdialect/graphs.h\"\n#include \"libdialect/peeling.h\"\n#include \"libdialect/util.h\"\n#include \"libdialect/routing.h\"\n#include \"libdialect/opts.h\"\n#include \"libdialect/nodeconfig.h\"\n\nusing namespace dialect;\n\nusing std::vector;\n\nvoid addBendsToGraph(NodesById bends, Graph_SP G) {\n    for (auto pair : bends) {\n        Node_SP &u = pair.second;\n        G->addNode(u);\n    }\n}\n\nint main(void) {\n\n    // This tests both leafless routing, and the building of unique bend points in a graph.\n\n    // (1) Leafless routing.\n    // We use a graph deliberately set up so that the initial routing will turn\n    // one of the nodes into a \"pseudoleaf\", i.e. will route all its edges to\n    // just one of its sides (in fact to just a single point on its boundary).\n    Graph_SP graph = buildGraphFromTglfFile(\"graphs/\" \"special/samesiderouting.tglf\");\n    HolaOpts opts;\n    LeaflessOrthoRouter lor(graph, opts);\n    lor.setShapeBufferDistanceIELScalar(0.125);\n    // We ask the router to record all routing attempts, so we can see the two steps.\n    lor.recordEachAttempt = true;\n    lor.route();\n    for (size_t j = 0; j < lor.routingAttemptTglf.size(); ++j) {\n        writeStringToFile(lor.routingAttemptTglf[j], string_format(\"output/\" \"leaflessroute02_\" \"attempt_%d.tglf\", j));\n    }\n\n    // (2) Building unique bend points.\n    // The two routing attempts from part (1) provide a nice example for testing Graph::buildUniqueBendPoints.\n    // Start by building a Graph from the TGLF of each attempt.\n    Graph_SP A0 = buildGraphFromTglf(lor.routingAttemptTglf[0]),\n             A1 = buildGraphFromTglf(lor.routingAttemptTglf[1]);\n    NodesById bends0 = A0->buildUniqueBendPoints(),\n              bends1 = A1->buildUniqueBendPoints();\n    // As a test of the uniqueness of the bend points, there should be only five (not six) bends for the\n    // first routing attempt.\n    COLA_ASSERT(bends0.size() == 5);\n    // Beyond that, we add the bend points to the graphs and draw them, for a visual check.\n    addBendsToGraph(bends0, A0);\n    addBendsToGraph(bends1, A1);\n    writeStringToFile(A0->writeTglf(), \"output/\" \"leaflessroute02_\" \"bends_0.tglf\");\n    writeStringToFile(A1->writeTglf(), \"output/\" \"leaflessroute02_\" \"bends_1.tglf\");\n\n    return 0;\n}\n"
  },
  {
    "path": "cola/libdialect/tests/lookupqas.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libdialect - A library for computing DiAlEcT layouts:\n *                 D = Decompose/Distribute\n *                 A = Arrange\n *                 E = Expand/Emend\n *                 T = Transform\n *\n * Copyright (C) 2018  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n * Author(s):   Steve Kieffer   <http://skieffer.info>\n*/\n\n#include <vector>\n#include <string>\n#include <iostream>\n\n#include \"libdialect/quadaction.h\"\n\nusing std::vector;\nusing std::string;\nusing std::cout;\nusing std::endl;\nusing dialect::lookupQuadActions;\n\nint main(void) {\n\n    vector<string> qas = lookupQuadActions(2, 2, 2, 2, 15);\n    cout << \"Number of QAs: \" << qas.size() << endl;\n    for (auto s : qas) {\n        cout << s << endl;\n    }\n\n}\n"
  },
  {
    "path": "cola/libdialect/tests/nbroctal.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libdialect - A library for computing DiAlEcT layouts:\n *                 D = Decompose/Distribute\n *                 A = Arrange\n *                 E = Expand/Emend\n *                 T = Transform\n *\n * Copyright (C) 2018  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n * Author(s):   Steve Kieffer   <http://skieffer.info>\n*/\n\n#include \"libvpsc/assertions.h\"\n#include \"libdialect/quadaction.h\"\n\nusing namespace dialect;\n\nint main(void) {\n\n    Nbr n0(0, 1, 0);\n    COLA_ASSERT(n0.octalCode() == 0);\n    COLA_ASSERT(n0.deflection() == 0);\n    Nbr n1(0, 1, 1);\n    COLA_ASSERT(n1.octalCode() == 1);\n    COLA_ASSERT(n0.deflection() == 1/2);\n    Nbr n2(0, 0, 1);\n    COLA_ASSERT(n2.octalCode() == 2);\n    COLA_ASSERT(n0.deflection() == 0);\n    Nbr n3(0, -1, 1);\n    COLA_ASSERT(n3.octalCode() == 3);\n    COLA_ASSERT(n0.deflection() == 1/2);\n    Nbr n4(0, -1, 0);\n    COLA_ASSERT(n4.octalCode() == 4);\n    COLA_ASSERT(n0.deflection() == 0);\n    Nbr n5(0, -1, -1);\n    COLA_ASSERT(n5.octalCode() == 5);\n    COLA_ASSERT(n0.deflection() == 1/2);\n    Nbr n6(0, 0, -1);\n    COLA_ASSERT(n6.octalCode() == 6);\n    COLA_ASSERT(n0.deflection() == 0);\n    Nbr n7(0, 1, -1);\n    COLA_ASSERT(n7.octalCode() == 7);\n    COLA_ASSERT(n0.deflection() == 1/2);\n\n    return 0;\n}\n"
  },
  {
    "path": "cola/libdialect/tests/nearalign01.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libdialect - A library for computing DiAlEcT layouts:\n *                 D = Decompose/Distribute\n *                 A = Arrange\n *                 E = Expand/Emend\n *                 T = Transform\n *\n * Copyright (C) 2018  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n * Author(s):   Steve Kieffer   <http://skieffer.info>\n*/\n\n#include <vector>\n#include <iostream>\n\n#include \"libvpsc/assertions.h\"\n\n#include \"libdialect/commontypes.h\"\n#include \"libdialect/io.h\"\n#include \"libdialect/util.h\"\n#include \"libdialect/graphs.h\"\n#include \"libdialect/opts.h\"\n#include \"libdialect/nearalign.h\"\n\nusing namespace dialect;\n\nusing std::vector;\nusing std::cout;\nusing std::endl;\n\nint main(void) {\n    Graph_SP graph = buildGraphFromTglfFile(\"graphs/\" \"special/nearalign01.tglf\");\n    HolaOpts opts;\n    NodesById ignore;\n    AlignmentTable atab(*graph, ignore);\n    size_t sc = doNearAlignments(*graph, atab, ignore, opts);\n    COLA_ASSERT(sc == 2);\n    writeStringToFile(graph->writeTglf(), \"output/\" \"nearalign01_\" \"01_nearalign.tglf\");\n    graph->destress();\n    writeStringToFile(graph->writeTglf(), \"output/\" \"nearalign01_\" \"02_destress.tglf\");\n    return 0;\n}\n"
  },
  {
    "path": "cola/libdialect/tests/nearalign02.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libdialect - A library for computing DiAlEcT layouts:\n *                 D = Decompose/Distribute\n *                 A = Arrange\n *                 E = Expand/Emend\n *                 T = Transform\n *\n * Copyright (C) 2018  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n * Author(s):   Steve Kieffer   <http://skieffer.info>\n*/\n\n#include <vector>\n#include <iostream>\n\n#include \"libvpsc/assertions.h\"\n\n#include \"libdialect/commontypes.h\"\n#include \"libdialect/io.h\"\n#include \"libdialect/util.h\"\n#include \"libdialect/graphs.h\"\n#include \"libdialect/opts.h\"\n#include \"libdialect/nearalign.h\"\n\nusing namespace dialect;\n\nusing std::vector;\nusing std::cout;\nusing std::endl;\n\nint main(void) {\n    Graph_SP graph = buildGraphFromTglfFile(\"graphs/\" \"special/nearalign01.tglf\");\n    HolaOpts opts;\n    NodesById ignore;\n    ignore.insert({4, graph->getNode(4)});\n    AlignmentTable atab(*graph, ignore);\n    size_t sc = doNearAlignments(*graph, atab, ignore, opts);\n    cout << sc << endl;\n    writeStringToFile(graph->writeTglf(), \"output/\" \"nearalign02_\" \"01_nearalign.tglf\");\n    graph->destress();\n    writeStringToFile(graph->writeTglf(), \"output/\" \"nearalign02_\" \"02_destress.tglf\");\n    return 0;\n}\n"
  },
  {
    "path": "cola/libdialect/tests/nearby.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libdialect - A library for computing DiAlEcT layouts:\n *                 D = Decompose/Distribute\n *                 A = Arrange\n *                 E = Expand/Emend\n *                 T = Transform\n *\n * Copyright (C) 2018  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n * Author(s):   Steve Kieffer   <http://skieffer.info>\n*/\n\n#include <vector>\n#include <utility>\n\n#include \"libavoid/geomtypes.h\"\n#include \"libvpsc/assertions.h\"\n\n#include \"libdialect/commontypes.h\"\n#include \"libdialect/graphs.h\"\n#include \"libdialect/util.h\"\n\nusing namespace dialect;\n\nusing std::vector;\nusing std::pair;\n\nusing Avoid::Point;\n\nint main(void) {\n\n    // Create some Nodes.\n    vector<pair<double, double>> centres {\n        {0, 0}, {1.1, 1.1}, {2.5, 2.5}\n    };\n    Nodes nodes;\n    for (auto p : centres) {\n        Node_SP u = Node::allocate();\n        u->setCentre(p.first, p.second);\n        nodes.push_back(u);\n    }\n\n    // Try out a NearbyObjectFinder, with threshold 0.5.\n    NearbyObjectFinder<Node_SP> nof(0.5);\n\n    // Add the Node at (0, 0).\n    nof.addObject(0, 0, nodes[0]);\n    // We should not find a Node near (1, 1).\n    COLA_ASSERT(nof.findObject(1, 1) == nullptr);\n\n    // Now add the Node at (1.1, 1.1).\n    nof.addObject(1.1, 1.1, nodes[1]);\n    // This time we should find this Node near (1, 1).\n    COLA_ASSERT(nof.findObject(1, 1)->getCentre() == Point(1.1, 1.1));\n\n    // Add the Node at (2.5, 2.5).\n    nof.addObject(2.5, 2.5, nodes[2]);\n    // Should not find this Node near (2, 2) or (3, 3), since we use open neighbourhoods.\n    COLA_ASSERT(nof.findObject(2, 2) == nullptr);\n    COLA_ASSERT(nof.findObject(3, 3) == nullptr);\n    // But should find it at (2.000001, etc.\n    COLA_ASSERT(nof.findObject(2.000001, 2.000001)->getCentre() == Point(2.5, 2.5));\n    COLA_ASSERT(nof.findObject(2.999999, 2.999999)->getCentre() == Point(2.5, 2.5));\n}\n"
  },
  {
    "path": "cola/libdialect/tests/negativesepco.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libdialect - A library for computing DiAlEcT layouts:\n *                 D = Decompose/Distribute\n *                 A = Arrange\n *                 E = Expand/Emend\n *                 T = Transform\n *\n * Copyright (C) 2018  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n * Author(s):   Steve Kieffer   <http://skieffer.info>\n*/\n\n#include <memory>\n#include <iostream>\n\n#include \"libvpsc/assertions.h\"\n#include \"libvpsc/rectangle.h\"\n#include \"libavoid/geomtypes.h\"\n\n#include \"libdialect/commontypes.h\"\n#include \"libdialect/io.h\"\n#include \"libdialect/graphs.h\"\n#include \"libdialect/util.h\"\n#include \"libdialect/constraints.h\"\n#include \"libdialect/logging.h\"\n\nusing namespace dialect;\n\nusing Avoid::Point;\n\nint main(void) {\n\n    Logger *logger = new Logger(\"output/\", \"negativesepco_\");\n\n    Graph G;\n    Node_SP a = Node::allocate();\n    a->setDims(30, 30);\n    a->setCentre(0, 0);\n    G.addNode(a);\n    Node_SP b = Node::allocate();\n    b->setDims(30, 30);\n    b->setCentre(200, 100);\n    G.addNode(b);\n\n    logger->log(G, \"00_initial\");\n\n    SepCo_SP sc = std::make_shared<SepCo>(vpsc::XDIM, b, a, -100);\n    ColaOptions opts;\n    G.projectOntoSepCo(opts, sc);\n\n    logger->log(G, \"01_projection\");\n\n    Point p = a->getCentre(),\n          q = b->getCentre();\n\n    double dx = q.x - p.x;\n    std::cout << dx << std::endl;\n    COLA_ASSERT(approx_equal(dx, 100));\n\n}\n"
  },
  {
    "path": "cola/libdialect/tests/negativezero.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libdialect - A library for computing DiAlEcT layouts:\n *                 D = Decompose/Distribute\n *                 A = Arrange\n *                 E = Expand/Emend\n *                 T = Transform\n *\n * Copyright (C) 2018  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n * Author(s):   Steve Kieffer   <http://skieffer.info>\n*/\n\n#include <iostream>\n#include <cmath>\n\n#include \"libvpsc/assertions.h\"\n\nusing std::string;\nusing std::cout;\nusing std::endl;\n\nvoid test(string msg, bool test) {\n    cout << msg << \": \";\n    if (test) {\n        cout << \"true\" << endl;\n    } else {\n        cout << \"false\" << endl;\n    }\n}\n\nint main(void) {\n    double nz = -0.0;\n    double pz = 0.0;\n\n    test(\"-0.0 < 0.0\", nz < pz);\n    test(\"-0.0 signbit\", std::signbit(nz));\n    test(\"0.0 signbit\", std::signbit(pz));\n    test(\"-pz signbit\", std::signbit(-pz));\n    test(\"-nz signbit\", std::signbit(-nz));\n    test(\"-0.0 == 0\", -0.0 == 0);\n    test(\"0.0 == 0\", 0.0 == 0);\n    test(\"-0.0 == 0.0\", -0.0 == 0.0);\n    test(\"-30 signbit\", std::signbit(-30));\n    test(\"60 signbit\", std::signbit(60));\n\n    COLA_ASSERT(std::signbit(-0.0));\n    COLA_ASSERT(!std::signbit(0.0));\n\n}\n"
  },
  {
    "path": "cola/libdialect/tests/nodeconfig01.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libdialect - A library for computing DiAlEcT layouts:\n *                 D = Decompose/Distribute\n *                 A = Arrange\n *                 E = Expand/Emend\n *                 T = Transform\n *\n * Copyright (C) 2018  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n * Author(s):   Steve Kieffer   <http://skieffer.info>\n*/\n\n#include <vector>\n\n#include \"libvpsc/assertions.h\"\n\n#include \"libdialect/commontypes.h\"\n#include \"libdialect/io.h\"\n#include \"libdialect/graphs.h\"\n#include \"libdialect/peeling.h\"\n#include \"libdialect/util.h\"\n#include \"libdialect/nodeconfig.h\"\n\nusing namespace dialect;\n\nusing std::vector;\n\nint main(void) {\n\n    // Obtain the core of a graph.\n    Graph_SP graph = buildGraphFromTglfFile(\"graphs/\" \"special/core_with_trees.tglf\");\n    peel(*graph);\n    // Do an OrthoHub layout on the core.\n    OrthoHubLayoutOptions ohl_opts;\n    OrthoHubLayout ohl(graph, ohl_opts);\n    ohl.layout();\n    // Write out.\n    writeStringToFile(graph->writeTglf(), \"output/\" \"nodeconfig01_\" \"core.tglf\");\n    return 0;\n}\n"
  },
  {
    "path": "cola/libdialect/tests/nudgeopt.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libdialect - A library for computing DiAlEcT layouts:\n *                 D = Decompose/Distribute\n *                 A = Arrange\n *                 E = Expand/Emend\n *                 T = Transform\n *\n * Copyright (C) 2023  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n * Author(s):   Steve Kieffer   <http://skieffer.info>\n*/\n\n#include <iostream>\n#include <cmath>\n\n#include \"libavoid/geomtypes.h\"\n\n#include \"libdialect/commontypes.h\"\n#include \"libdialect/io.h\"\n#include \"libdialect/util.h\"\n#include \"libdialect/graphs.h\"\n#include \"libdialect/opts.h\"\n#include \"libdialect/hola.h\"\n\nusing std::vector;\nusing Avoid::Point;\n\nusing namespace dialect;\n\n/* In the HOLA layout we compute for the graph \"graphs/random/v10e10.tglf\", the\n * three directed edges (1, 0), (4, 1), (7, 1) will all leave node 1 on the same\n * side, and libavoid nudging will be employed to separate them.\n * \n * The route points where these three edges connect to node 1 will be equal in one\n * coordinate, and differ in the other.\n * \n * This function returns a vector of three doubles, being the coords of the connection\n * points on these three edges, in the dimension in which they differ.\n * The difference between adjacent pairs of these coordinates should equal the nuding\n * distance set in the HolaOpts.\n */\nvector<double> checkCoords(Graph_SP graph) {\n    EdgesById edges = graph->getEdgeLookup();\n\n    Edge_SP e10, e41, e71;\n    for (auto p : edges) {\n        Edge_SP e = p.second;\n        unsigned s = e->getSourceEnd()->getExternalId();\n        unsigned t = e->getTargetEnd()->getExternalId();\n        if (s == 1 && t == 0) {\n            e10 = e;\n        } else if (s == 4 && t == 1) {\n            e41 = e;\n        } else if (s == 7 && t == 1) {\n            e71 = e;\n        }\n    }\n    \n    vector<Point> e10Route = e10->getRoute();\n    vector<Point> e41Route = e41->getRoute();\n    vector<Point> e71Route = e71->getRoute();\n    \n    Point a = e41Route.at(e41Route.size() - 1);\n    Point b = e10Route.at(0);\n    Point c = e71Route.at(e71Route.size() - 1);\n\n    std::cout << a.x << \", \" << a.y << std::endl;\n    std::cout << b.x << \", \" << b.y << std::endl;\n    std::cout << c.x << \", \" << c.y << std::endl;\n\n    vector<double> xCoords = {a.x, b.x, c.x};\n    vector<double> yCoords = {a.y, b.y, c.y};\n    vector<double> coords = a.y == b.y ? xCoords : yCoords;\n    return coords;\n}\n\nint main(void) {\n\n    std::string name = \"graphs/random/v10e10.tglf\";\n\n    // Layout with default nudging distance of 4.0 pixels:\n    HolaOpts opts;\n    Graph_SP graph = buildGraphFromTglfFile(name);\n    doHOLA(*graph, opts);\n    vector<double> coords = checkCoords(graph);\n    COLA_ASSERT(std::abs(coords[0] - coords[1]) == 4.0);\n    COLA_ASSERT(std::abs(coords[1] - coords[2]) == 4.0);\n    writeStringToFile(graph->writeTglf(), \"output/\" \"nudgeopt_4.tglf\");\n    writeStringToFile(graph->writeSvg(), \"output/\" \"nudgeopt_4.svg\");\n\n    // Repeat same layout, but now with nudging distance set to 5.0 pixels:\n    opts.routingAbs_nudgingDistance = 5.0;\n    graph = buildGraphFromTglfFile(name);\n    doHOLA(*graph, opts);\n    coords = checkCoords(graph);\n    COLA_ASSERT(std::abs(coords[0] - coords[1]) == 5.0);\n    COLA_ASSERT(std::abs(coords[1] - coords[2]) == 5.0);\n    writeStringToFile(graph->writeTglf(), \"output/\" \"nudgeopt_5.tglf\");\n    writeStringToFile(graph->writeSvg(), \"output/\" \"nudgeopt_5.svg\");\n    \n}\n"
  },
  {
    "path": "cola/libdialect/tests/output/README.txt",
    "content": "This directory is used for output from the test cases.\n"
  },
  {
    "path": "cola/libdialect/tests/output/svg/README.txt",
    "content": "This directory is used for output from the test cases.\n"
  },
  {
    "path": "cola/libdialect/tests/partition01.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libdialect - A library for computing DiAlEcT layouts:\n *                 D = Decompose/Distribute\n *                 A = Arrange\n *                 E = Expand/Emend\n *                 T = Transform\n *\n * Copyright (C) 2018  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n * Author(s):   Steve Kieffer   <http://skieffer.info>\n*/\n\n#include <vector>\n#include <utility>\n\n#include \"libvpsc/assertions.h\"\n\n#include \"libdialect/commontypes.h\"\n#include \"libdialect/graphs.h\"\n#include \"libdialect/util.h\"\n\nusing namespace dialect;\n\nusing std::vector;\nusing std::pair;\n\nint main() {\n    // Create a vector of Nodes to be partitioned.\n    Nodes nodes;\n    vector<pair<double, double>> coords{\n        // Two nodes are perfectly vertically aligned at x = 0:\n        {0, 0},\n        {0, 1},\n        // Three nodes are imperfectly vertically aligned at x = 1:\n        {1, 0},\n        {1.00001, 1},\n        {0.99999, 2}\n    };\n    for (auto p : coords) {\n        Node_SP u = Node::allocate();\n        u->setCentre(p.first, p.second);\n        nodes.push_back(u);\n    }\n    // Strict partition:\n    auto parts1 = partition<Node_SP>(nodes,\n        [](const Node_SP &u) -> float {\n            return (u->getCentre()).x;\n        }\n    );\n    // Tolerant partition:\n    auto parts2 = partition<Node_SP>(nodes,\n        [](const Node_SP &u) -> float {\n            return (u->getCentre()).x;\n        },\n        0.01\n    );\n    COLA_ASSERT(parts1.size() == 4);\n    COLA_ASSERT(parts2.size() == 2);\n\treturn 0;\n}\n"
  },
  {
    "path": "cola/libdialect/tests/peel.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libdialect - A library for computing DiAlEcT layouts:\n *                 D = Decompose/Distribute\n *                 A = Arrange\n *                 E = Expand/Emend\n *                 T = Transform\n *\n * Copyright (C) 2018  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n * Author(s):   Steve Kieffer   <http://skieffer.info>\n*/\n\n#include <vector>\n#include <set>\n#include <iostream>\n\n#include \"libvpsc/assertions.h\"\n\n#include \"libdialect/commontypes.h\"\n#include \"libdialect/io.h\"\n#include \"libdialect/graphs.h\"\n#include \"libdialect/peeling.h\"\n#include \"libdialect/util.h\"\n#include \"libdialect/trees.h\"\n\nusing namespace dialect;\n\nusing std::vector;\nusing std::cout;\nusing std::endl;\n\nint main(void) {\n\n    // First try peeling several trees off of a core:\n    Graph_SP graph = buildGraphFromTglfFile(\"graphs/\" \"special/core_with_trees.tglf\");\n    Trees trees = peel(*graph);\n    // Check that there are four trees.\n    COLA_ASSERT(trees.size() == 4);\n    // And also write each component to a separate file for visual check.\n    writeStringToFile(graph->writeTglf(), \"output/\" \"peel_\" \"core.tglf\");\n    size_t i = 0;\n    for (Tree_SP t : trees) {\n        writeStringToFile(\n            t->underlyingGraph()->writeTglf(),\n            string_format(\"output/\" \"peel_\" \"tree_%d.tglf\", i++)\n        );\n    }\n    // And check that all the right nodes were marked as root.\n    Graphs allGraphs;\n    allGraphs.push_back(graph);\n    for (Tree_SP t : trees) allGraphs.push_back(t->underlyingGraph());\n    std::set<id_type> rootIds{0, 2, 4, 5};\n    auto end = rootIds.end();\n    for (Graph_SP g : allGraphs) {\n        for (auto p : g->getNodeLookup()) {\n            Node_SP &u = p.second;\n            if (rootIds.find(p.first) != end) {\n                cout << \"Node \" << p.first << \" is root.\" << endl;\n                COLA_ASSERT(u->isRoot());\n            } else {\n                COLA_ASSERT(!u->isRoot());\n            }\n        }\n    }\n\n    // Now try a case where the whole graph is already a tree.\n    Graph t = *buildGraphFromTglfFile(\"graphs/\" \"trees/tree01.tglf\");\n    trees = peel(t);\n    // Check that there is exactly one tree.\n    COLA_ASSERT(trees.size() == 1);\n    // Also the original graph should have exactly one node left, which should\n    // correspond to the root of the one tree.\n    COLA_ASSERT(t.getNumNodes() == 1);\n    Tree_SP tree = trees.front();\n    for (auto p : t.getNodeLookup()) COLA_ASSERT(p.first == tree->getRootNodeID());\n\n    return 0;\n}\n"
  },
  {
    "path": "cola/libdialect/tests/planarise01.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libdialect - A library for computing DiAlEcT layouts:\n *                 D = Decompose/Distribute\n *                 A = Arrange\n *                 E = Expand/Emend\n *                 T = Transform\n *\n * Copyright (C) 2018  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n * Author(s):   Steve Kieffer   <http://skieffer.info>\n*/\n\n#include <vector>\n\n#include \"libvpsc/assertions.h\"\n\n#include \"libdialect/commontypes.h\"\n#include \"libdialect/io.h\"\n#include \"libdialect/graphs.h\"\n#include \"libdialect/util.h\"\n#include \"libdialect/routing.h\"\n#include \"libdialect/opts.h\"\n#include \"libdialect/planarise.h\"\n\nusing namespace dialect;\n\nint main(void) {\n\n    // We use a graph deliberately set up so that the initial routing will\n    // bundle several edge routes together.\n\n    // Here we only aim to test the edge overlap removal phase of the planarisation\n    // process (not the subsequent edge intersection removal).\n\n    // (1) Connector routing\n    Graph_SP graph = buildGraphFromTglfFile(\"graphs/\" \"special/bundlerouting2.tglf\");\n    HolaOpts opts;\n    LeaflessOrthoRouter lor(graph, opts);\n    lor.setShapeBufferDistanceIELScalar(0.125);\n    // We ask the router to record all routing attempts.\n    lor.recordEachAttempt = true;\n    lor.route();\n    for (size_t j = 0; j < lor.routingAttemptTglf.size(); ++j) {\n        writeStringToFile(lor.routingAttemptTglf[j], string_format(\"output/\" \"planarise01_\" \"routing_attempt_%d.tglf\", j));\n    }\n\n    // (2) Edge overlap removal\n    OrthoPlanariser op(graph);\n    Graph_SP Q = op.planarise();\n    writeStringToFile(Q->writeTglf(), \"output/\" \"planarise01_\" \"planarise.tglf\");\n\n    return 0;\n}\n"
  },
  {
    "path": "cola/libdialect/tests/planarise02.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libdialect - A library for computing DiAlEcT layouts:\n *                 D = Decompose/Distribute\n *                 A = Arrange\n *                 E = Expand/Emend\n *                 T = Transform\n *\n * Copyright (C) 2018  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n * Author(s):   Steve Kieffer   <http://skieffer.info>\n*/\n\n#include <vector>\n\n#include \"libvpsc/assertions.h\"\n\n#include \"libdialect/commontypes.h\"\n#include \"libdialect/io.h\"\n#include \"libdialect/graphs.h\"\n#include \"libdialect/util.h\"\n#include \"libdialect/routing.h\"\n#include \"libdialect/opts.h\"\n#include \"libdialect/planarise.h\"\n\nusing namespace dialect;\n\nint main(void) {\n\n    // We use a graph deliberately set up so that the initial routing will\n    // not only bundle several edge routes together, but will also route\n    // a connector across (intersecting) that bundle.\n\n    // Here we aim to test both the edge overlap removal phase and the\n    // subsequent edge intersection removal phase of the planarisation process.\n\n    // (1) Connector routing\n    Graph_SP graph = buildGraphFromTglfFile(\"graphs/\" \"special/bundlecross.tglf\");\n    HolaOpts opts;\n    LeaflessOrthoRouter lor(graph, opts);\n    lor.setShapeBufferDistanceIELScalar(0.125);\n    // We ask the router to record all routing attempts.\n    lor.recordEachAttempt = true;\n    lor.route();\n    for (size_t j = 0; j < lor.routingAttemptTglf.size(); ++j) {\n        writeStringToFile(lor.routingAttemptTglf[j], string_format(\"output/\" \"planarise02_\" \"routing_attempt_%d.tglf\", j));\n    }\n\n    // (2) Planarisation\n    OrthoPlanariser op(graph);\n    Graph_SP Q = op.planarise();\n    writeStringToFile(Q->writeTglf(), \"output/\" \"planarise02_\" \"planarise.tglf\");\n\n    return 0;\n}\n"
  },
  {
    "path": "cola/libdialect/tests/projseq01.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libdialect - A library for computing DiAlEcT layouts:\n *                 D = Decompose/Distribute\n *                 A = Arrange\n *                 E = Expand/Emend\n *                 T = Transform\n *\n * Copyright (C) 2018  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n * Author(s):   Steve Kieffer   <http://skieffer.info>\n*/\n\n#include <vector>\n#include <string>\n#include <memory>\n\n#include \"libvpsc/assertions.h\"\n#include \"libvpsc/rectangle.h\"\n\n#include \"libdialect/commontypes.h\"\n#include \"libdialect/io.h\"\n#include \"libdialect/graphs.h\"\n#include \"libdialect/util.h\"\n#include \"libdialect/constraints.h\"\n\nusing namespace dialect;\n\nusing std::string;\n\nint main(void) {\n\n    // Testing goals:\n    // We want to try using a ProjSeq and Graph::applyProjSeq to progressively\n    // add constraints to a layout.\n    // We want to see that if any of the projections in a given sequence fails,\n    // then the result is accurately reported.\n\n    // (1) Build a graph.\n    Graph_SP graph = buildGraphFromTglfFile(\"graphs/\" \"special/column8.tglf\");\n    // Show initial layout.\n    writeStringToFile(graph->writeTglf(), \"output/\" \"projseq01_\" \"layout00.tglf\");\n\n    // (2) Try first ProjSeq. Just one projection, with two sepcos.\n    ProjSeq ps;\n    SepCoSet sepcos;\n    SepCo_SP s0 = std::make_shared<SepCo>(\n        vpsc::XDIM,\n        graph->getNode(0),\n        graph->getNode(1),\n        60);\n    SepCo_SP s1 = std::make_shared<SepCo>(\n        vpsc::XDIM,\n        graph->getNode(1),\n        graph->getNode(2),\n        60);\n    sepcos.insert(s0);\n    sepcos.insert(s1);\n    ps.addProjection(sepcos, vpsc::XDIM);\n    ColaOptions opts;\n    graph->applyProjSeq(opts, ps);\n    writeStringToFile(graph->writeTglf(), \"output/\" \"projseq01_\" \"layout01.tglf\");\n\n    // Next: Two projections, with two sepcos each.\n    // We also test the automatic monotonicity of the constraint sets by using a fresh set.\n    SepCoSet sepcos2;\n    SepCo_SP s2 = std::make_shared<SepCo>(\n        vpsc::XDIM,\n        graph->getNode(2),\n        graph->getNode(3),\n        60);\n    SepCo_SP s3 = std::make_shared<SepCo>(\n        vpsc::XDIM,\n        graph->getNode(3),\n        graph->getNode(4),\n        60);\n    sepcos2.insert(s2);\n    sepcos2.insert(s3);\n    ps.addProjection(sepcos, vpsc::XDIM);\n    SepCo_SP s4 = std::make_shared<SepCo>(\n        vpsc::XDIM,\n        graph->getNode(4),\n        graph->getNode(5),\n        60);\n    SepCo_SP s5 = std::make_shared<SepCo>(\n        vpsc::XDIM,\n        graph->getNode(5),\n        graph->getNode(6),\n        60);\n    sepcos2.insert(s4);\n    sepcos2.insert(s5);\n    ps.addProjection(sepcos2, vpsc::XDIM);\n    graph->applyProjSeq(opts, ps);\n    string tglf2 = graph->writeTglf();\n    writeStringToFile(tglf2, \"output/\" \"projseq01_\" \"layout02.tglf\");\n\n    // Now add a projection that should fail.\n    SepCo_SP s6 = std::make_shared<SepCo>(\n        vpsc::XDIM,\n        graph->getNode(6),\n        graph->getNode(7),\n        60);\n    SepCo_SP s7n = std::make_shared<SepCo>(\n        vpsc::XDIM,\n        graph->getNode(7),\n        graph->getNode(0),\n        60);\n    SepCoSet sepcos3;\n    sepcos3.insert(s6);\n    sepcos3.insert(s7n);\n    ps.addProjection(sepcos3, vpsc::XDIM);\n    bool success = graph->applyProjSeq(opts, ps);\n    COLA_ASSERT(!success);\n    // Node positions should be unaffected as well.\n    string tglf2b = graph->writeTglf();\n    COLA_ASSERT(tglf2b == tglf2);\n\n    return 0;\n}\n"
  },
  {
    "path": "cola/libdialect/tests/readconstraints.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libdialect - A library for computing DiAlEcT layouts:\n *                 D = Decompose/Distribute\n *                 A = Arrange\n *                 E = Expand/Emend\n *                 T = Transform\n *\n * Copyright (C) 2018  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n * Author(s):   Steve Kieffer   <http://skieffer.info>\n*/\n\n#include \"libvpsc/assertions.h\"\n#include \"libvpsc/rectangle.h\"\n\n#include \"libdialect/io.h\"\n#include \"libdialect/graphs.h\"\n\nusing namespace dialect;\n\nint main(void) {\n\n    Graph_SP graph = buildGraphFromTglfFile(\"graphs/\" \"special/readconstraints.tglf\");\n    writeStringToFile(graph->writeTglf(), \"output/\" \"readconstraints_\" \"00_initial.tglf\");\n    ColaOptions opts;\n    graph->project(opts, vpsc::XDIM);\n    graph->project(opts, vpsc::YDIM);\n    writeStringToFile(graph->writeTglf(), \"output/\" \"readconstraints_\" \"01_projection.tglf\");\n\n}\n"
  },
  {
    "path": "cola/libdialect/tests/rotate01.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libdialect - A library for computing DiAlEcT layouts:\n *                 D = Decompose/Distribute\n *                 A = Arrange\n *                 E = Expand/Emend\n *                 T = Transform\n *\n * Copyright (C) 2018  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n * Author(s):   Steve Kieffer   <http://skieffer.info>\n*/\n\n#include <vector>\n\n#include \"libvpsc/assertions.h\"\n\n#include \"libdialect/commontypes.h\"\n#include \"libdialect/io.h\"\n#include \"libdialect/graphs.h\"\n#include \"libdialect/peeling.h\"\n#include \"libdialect/util.h\"\n#include \"libdialect/routing.h\"\n#include \"libdialect/opts.h\"\n#include \"libdialect/nodeconfig.h\"\n\nusing namespace dialect;\n\nint main(void) {\n\n    // Test 90-degree clockwise rotation.\n\n    Graph_SP graph = buildGraphFromTglfFile(\"graphs/\" \"special/rotate01.tglf\");\n    HolaOpts opts;\n    LeaflessOrthoRouter lor(graph, opts);\n    lor.setShapeBufferDistanceIELScalar(0.125);\n    lor.route();\n    writeStringToFile(graph->writeTglf(), \"output/\" \"rotate01_\" \"routing.tglf\");\n\n    graph->rotate90cw();\n    writeStringToFile(graph->writeTglf(), \"output/\" \"rotate01_\" \"01_rotate90cw.tglf\");\n    graph->rotate90cw();\n    writeStringToFile(graph->writeTglf(), \"output/\" \"rotate01_\" \"02_rotate90cw.tglf\");\n    graph->rotate90cw();\n    writeStringToFile(graph->writeTglf(), \"output/\" \"rotate01_\" \"03_rotate90cw.tglf\");\n\n    return 0;\n}\n"
  },
  {
    "path": "cola/libdialect/tests/rotate02.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libdialect - A library for computing DiAlEcT layouts:\n *                 D = Decompose/Distribute\n *                 A = Arrange\n *                 E = Expand/Emend\n *                 T = Transform\n *\n * Copyright (C) 2018  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n * Author(s):   Steve Kieffer   <http://skieffer.info>\n*/\n\n#include <vector>\n\n#include \"libvpsc/assertions.h\"\n\n#include \"libdialect/commontypes.h\"\n#include \"libdialect/io.h\"\n#include \"libdialect/graphs.h\"\n#include \"libdialect/peeling.h\"\n#include \"libdialect/util.h\"\n#include \"libdialect/routing.h\"\n#include \"libdialect/opts.h\"\n#include \"libdialect/nodeconfig.h\"\n\nusing namespace dialect;\n\nint main(void) {\n\n    // Test 90-degree anticlockwise rotation.\n\n    Graph_SP graph = buildGraphFromTglfFile(\"graphs/\" \"special/rotate01.tglf\");\n    HolaOpts opts;\n    LeaflessOrthoRouter lor(graph, opts);\n    lor.setShapeBufferDistanceIELScalar(0.125);\n    lor.route();\n    writeStringToFile(graph->writeTglf(), \"output/\" \"rotate02_\" \"routing.tglf\");\n\n    graph->rotate90acw();\n    writeStringToFile(graph->writeTglf(), \"output/\" \"rotate02_\" \"01_rotate90acw.tglf\");\n    graph->rotate90acw();\n    writeStringToFile(graph->writeTglf(), \"output/\" \"rotate02_\" \"02_rotate90acw.tglf\");\n    graph->rotate90acw();\n    writeStringToFile(graph->writeTglf(), \"output/\" \"rotate02_\" \"03_rotate90acw.tglf\");\n\n    return 0;\n}\n"
  },
  {
    "path": "cola/libdialect/tests/rotate03.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libdialect - A library for computing DiAlEcT layouts:\n *                 D = Decompose/Distribute\n *                 A = Arrange\n *                 E = Expand/Emend\n *                 T = Transform\n *\n * Copyright (C) 2018  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n * Author(s):   Steve Kieffer   <http://skieffer.info>\n*/\n\n#include <vector>\n\n#include \"libvpsc/assertions.h\"\n\n#include \"libdialect/commontypes.h\"\n#include \"libdialect/io.h\"\n#include \"libdialect/graphs.h\"\n#include \"libdialect/peeling.h\"\n#include \"libdialect/util.h\"\n#include \"libdialect/routing.h\"\n#include \"libdialect/opts.h\"\n#include \"libdialect/nodeconfig.h\"\n\nusing namespace dialect;\n\nint main(void) {\n\n    // Test 180-degree rotation\n\n    Graph_SP graph = buildGraphFromTglfFile(\"graphs/\" \"special/rotate01.tglf\");\n    HolaOpts opts;\n    LeaflessOrthoRouter lor(graph, opts);\n    lor.setShapeBufferDistanceIELScalar(0.125);\n    lor.route();\n    writeStringToFile(graph->writeTglf(), \"output/\" \"rotate03_\" \"routing.tglf\");\n\n    graph->rotate180();\n    writeStringToFile(graph->writeTglf(), \"output/\" \"rotate03_\" \"01_rotate180.tglf\");\n\n    return 0;\n}\n"
  },
  {
    "path": "cola/libdialect/tests/rotate04.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libdialect - A library for computing DiAlEcT layouts:\n *                 D = Decompose/Distribute\n *                 A = Arrange\n *                 E = Expand/Emend\n *                 T = Transform\n *\n * Copyright (C) 2018  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n * Author(s):   Steve Kieffer   <http://skieffer.info>\n*/\n\n#include <vector>\n\n#include \"libvpsc/assertions.h\"\n\n#include \"libdialect/commontypes.h\"\n#include \"libdialect/io.h\"\n#include \"libdialect/graphs.h\"\n#include \"libdialect/peeling.h\"\n#include \"libdialect/util.h\"\n#include \"libdialect/routing.h\"\n#include \"libdialect/opts.h\"\n#include \"libdialect/nodeconfig.h\"\n#include \"libdialect/ortho.h\"\n#include \"libdialect/constraints.h\"\n\nusing namespace dialect;\n\nint main(void) {\n\n    // Test rotation with constraints.\n\n    Graph_SP graph = buildGraphFromTglfFile(\"graphs/\" \"special/rotate02.tglf\");\n    SepMatrix &m = graph->getSepMatrix();\n    m.addSep(0, 1, GapType::BDRY, SepDir::EAST, SepType::INEQ, 30);\n    m.addSep(0, 2, GapType::BDRY, SepDir::DOWN, SepType::INEQ, 150);\n    m.addSep(1, 2, GapType::BDRY, SepDir::DOWN, SepType::INEQ, 150);\n    ColaOptions colaOpts;\n    colaOpts.idealEdgeLength = 30;\n    graph->destress();\n\n    HolaOpts opts;\n    LeaflessOrthoRouter lor(graph, opts);\n    lor.setShapeBufferDistanceIELScalar(0.125);\n    lor.route();\n    writeStringToFile(graph->writeTglf(), \"output/\" \"rotate04_\" \"00_routing.tglf\");\n\n    graph->rotate90cw(&colaOpts);\n    LeaflessOrthoRouter lor1(graph, opts);\n    lor1.setShapeBufferDistanceIELScalar(0.125);\n    lor1.route();\n    writeStringToFile(graph->writeTglf(), \"output/\" \"rotate04_\" \"01_rotate90cw.tglf\");\n\n    graph->rotate90cw(&colaOpts);\n    LeaflessOrthoRouter lor2(graph, opts);\n    lor2.setShapeBufferDistanceIELScalar(0.125);\n    lor2.route();\n    writeStringToFile(graph->writeTglf(), \"output/\" \"rotate04_\" \"02_rotate90cw.tglf\");\n\n    graph->rotate90cw(&colaOpts);\n    LeaflessOrthoRouter lor3(graph, opts);\n    lor3.setShapeBufferDistanceIELScalar(0.125);\n    lor3.route();\n    writeStringToFile(graph->writeTglf(), \"output/\" \"rotate04_\" \"03_rotate90cw.tglf\");\n\n    return 0;\n}\n"
  },
  {
    "path": "cola/libdialect/tests/routing01.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libdialect - A library for computing DiAlEcT layouts:\n *                 D = Decompose/Distribute\n *                 A = Arrange\n *                 E = Expand/Emend\n *                 T = Transform\n *\n * Copyright (C) 2018  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n * Author(s):   Steve Kieffer   <http://skieffer.info>\n*/\n\n#include \"libavoid/libavoid.h\"\n\n#include \"libdialect/commontypes.h\"\n#include \"libdialect/io.h\"\n#include \"libdialect/graphs.h\"\n#include \"libdialect/util.h\"\n#include \"libdialect/routing.h\"\n\nusing namespace dialect;\n\nint main(void) {\n\n    // Test that libavoid will route in between nodes that are touching, but\n    // not if they are overlapping.\n\n    Graph_SP graph = buildGraphFromTglfFile(\"graphs/\" \"special/routing01.tglf\");\n\n    RoutingAdapter ra(Avoid::OrthogonalRouting);\n    ra.addNodes(graph->getNodeLookup());\n    ra.addEdges(graph->getEdgeLookup());\n    ra.route();\n\n    writeStringToFile(graph->writeTglf(), \"output/\" \"routing01_\" \"routed.tglf\");\n\n    return 0;\n}\n"
  },
  {
    "path": "cola/libdialect/tests/sep_matrix_iter.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libdialect - A library for computing DiAlEcT layouts:\n *                 D = Decompose/Distribute\n *                 A = Arrange\n *                 E = Expand/Emend\n *                 T = Transform\n *\n * Copyright (C) 2018  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n * Author(s):   Steve Kieffer   <http://skieffer.info>\n*/\n\n#include \"libdialect/commontypes.h\"\n#include \"libdialect/constraints.h\"\n#include \"libdialect/graphs.h\"\n#include \"libdialect/io.h\"\n\nusing namespace dialect;\n\nstd::string expected_closed = R\">>>(0 0 0 5 5\n1 10 10 5 5\n2 20 20 5 5\n3 30 30 5 5\n4 40 40 5 5\n5 50 50 5 5\n6 60 60 5 5\n7 70 70 5 5\n8 80 80 5 5\n#\n#\n2 3 C E >= 10.000\n2 5 C E >= 10.000\n2 7 C E >= 10.000\n3 5 C E >= 10.000\n3 6 C S >= 10.000\n7 8 C E >= 10.000\n)>>>\";\n\nstd::string expected_open = R\">>>(0 0 0 5 5\n1 10 10 5 5\n2 20 20 5 5\n3 30 30 5 5\n4 40 40 5 5\n5 50 50 5 5\n6 60 60 5 5\n7 70 70 5 5\n8 80 80 5 5\n#\n#\n2 3 C S >= 10.000\n2 5 C E >= 10.000\n2 7 C E >= 10.000\n3 5 C S >= 10.000\n3 6 C W >= 10.000\n7 8 C E >= 10.000\n)>>>\";\n\nstd::string expected_corresp = R\">>>(1 10 10 5 5\n3 30 30 5 5\n4 40 40 5 5\n6 60 60 5 5\n#\n#\n3 6 C W >= 10.000\n)>>>\";\n\nstd::string expected_remove = R\">>>(0 0 0 5 5\n2 20 20 5 5\n5 50 50 5 5\n7 70 70 5 5\n8 80 80 5 5\n#\n#\n2 5 C E >= 10.000\n2 7 C E >= 10.000\n7 8 C E >= 10.000\n)>>>\";\n\n/* The `SepMatrix` class defines four operations,\n *   SepMatrix::transformClosedSubset()\n *   SepMatrix::transformOpenSubset()\n *   SepMatrix::removeNodes()\n *   SepMatrix::setCorrespondingConstraints()\n * each of which involves complicated, dual iterations over ordered sets.\n * Here we examine cases that provide complete coverage for these methods, i.e.\n * hitting all clauses within them.\n */\nint main(void) {\n    Graph_SP graph = buildGraphFromTglfFile(\"graphs/\" \"special/SepMatrixIter.tglf\");\n    std::set<id_type> ids = {1, 3, 4, 6};\n\n    // SepMatrix::transformClosedSubset()\n    // Only the constraint on (3, 6) is transformed.\n    graph->transformClosedSubset(SepTransform::ROTATE90CW, ids);\n    std::string result_closed = graph->writeTglf();\n    writeStringToFile(result_closed, \"output/\" \"sep_matrix_iter_\" \"closed.tglf\");\n    COLA_ASSERT(result_closed == expected_closed);\n\n    // SepMatrix::transformOpenSubset()\n    // The constraints on (3, 5), (3, 6), and (2, 3) are transformed.\n    graph->transformOpenSubset(SepTransform::ROTATE90CW, ids);\n    std::string result_open = graph->writeTglf();\n    writeStringToFile(result_open, \"output/\" \"sep_matrix_iter_\" \"open.tglf\");\n    COLA_ASSERT(result_open == expected_open);\n\n    // SepMatrix::setCorrespondingConstraints\n    // The second graph only has nodes {0, 1, 3, 4, 6}. So it should only get the\n    // constraint on (3, 6).\n    Graph_SP graph2 = std::make_shared<Graph>(*graph);\n    graph2->clearAllConstraints();\n\n    NodesById toRemove;\n    toRemove.insert({0, graph2->getNode(0)});\n    toRemove.insert({2, graph2->getNode(2)});\n    toRemove.insert({5, graph2->getNode(5)});\n    toRemove.insert({7, graph2->getNode(7)});\n    toRemove.insert({8, graph2->getNode(8)});\n    graph2->removeNodes(toRemove);\n    \n    graph->setCorrespondingConstraints(*graph2);\n    std::string result_corresp = graph2->writeTglf();\n    writeStringToFile(result_corresp, \"output/\" \"sep_matrix_iter_\" \"corresp.tglf\");\n    COLA_ASSERT(result_corresp == expected_corresp);\n\n    // SepMatrix::removeNodes()\n    // First check special case that removing *no* nodes leaves the constraint set\n    // unchanged.\n    toRemove.clear();\n    graph->removeNodes(toRemove);\n    std::string result_remove_none = graph->writeTglf();\n    writeStringToFile(result_remove_none, \"output/\" \"sep_matrix_iter_\" \"remove_none.tglf\");\n    COLA_ASSERT(result_remove_none == expected_open);\n\n    // After removing nodes {1, 3, 4, 6}, all that remains should be the\n    // constraints on (2, 5), (2, 7), and (7, 8).\n    toRemove.clear();\n    toRemove.insert({1, graph->getNode(1)});\n    toRemove.insert({3, graph->getNode(3)});\n    toRemove.insert({4, graph->getNode(4)});\n    toRemove.insert({6, graph->getNode(6)});\n    graph->removeNodes(toRemove);\n    std::string result_remove = graph->writeTglf();\n    writeStringToFile(result_remove, \"output/\" \"sep_matrix_iter_\" \"remove.tglf\");\n    COLA_ASSERT(result_remove == expected_remove);\n\n}\n"
  },
  {
    "path": "cola/libdialect/tests/solidify.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libdialect - A library for computing DiAlEcT layouts:\n *                 D = Decompose/Distribute\n *                 A = Arrange\n *                 E = Expand/Emend\n *                 T = Transform\n *\n * Copyright (C) 2018  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n * Author(s):   Steve Kieffer   <http://skieffer.info>\n*/\n\n#include <vector>\n#include <string>\n\n#include \"libvpsc/assertions.h\"\n#include \"libvpsc/rectangle.h\"\n\n#include \"libdialect/commontypes.h\"\n#include \"libdialect/io.h\"\n#include \"libdialect/graphs.h\"\n#include \"libdialect/util.h\"\n#include \"libdialect/routing.h\"\n#include \"libdialect/opts.h\"\n#include \"libdialect/planarise.h\"\n\nusing namespace dialect;\n\nusing std::string;\n\nint main(void) {\n\n    // Testing goals:\n    // We want to try solidifying aligned edges in each dimension, in a copy H of\n    // a Graph G having planar orthogonal layout.\n    //\n    // We want to see both that the generated constraints on H look right, and that\n    // the existing constraints on G are unaffected. The reason for the test is that,\n    // while each Graph has its own SepMatrix, they share SepPairs.\n\n    // (1) Make a planar orthogonal layout, as in test case, plaraise02.\n    Graph_SP graph = buildGraphFromTglfFile(\"graphs/\" \"special/bundlecross.tglf\");\n    HolaOpts opts;\n    ColaOptions colaOpts;\n    LeaflessOrthoRouter lor(graph, opts);\n    lor.setShapeBufferDistanceIELScalar(0.125);\n    lor.route();\n    OrthoPlanariser op(graph);\n    Graph_SP P = op.planarise();\n    string P_tglf_orig = P->writeTglf();\n    writeStringToFile(P_tglf_orig, \"output/\" \"solidify_\" \"planarise.tglf\");\n\n    // (2) Make a copy of the planar Graph P, and try solidifying horizontal edges in it.\n    Graph H0(*P);\n    H0.solidifyAlignedEdges(vpsc::HORIZONTAL, colaOpts);\n    // Draw the result.\n    writeStringToFile(H0.writeTglf(), \"output/\" \"solidify_\" \"solid_horiz.tglf\");\n    // And write the TGLF for the planar graph P too, so we can examine its constraints.\n    string P_tglf_after_solid_horiz = P->writeTglf();\n    COLA_ASSERT(P_tglf_after_solid_horiz == P_tglf_orig);\n\n    // (3) Try same, only this time with the vertical edges.\n    Graph H1(*P);\n    H1.solidifyAlignedEdges(vpsc::VERTICAL, colaOpts);\n    // Draw the result.\n    writeStringToFile(H1.writeTglf(), \"output/\" \"solidify_\" \"solid_vert.tglf\");\n    // And write the TGLF for the planar graph P too, so we can examine its constraints.\n    string P_tglf_after_solid_vert = P->writeTglf();\n    COLA_ASSERT(P_tglf_after_solid_vert == P_tglf_orig);\n\n    // (4) Try destressing.\n    // We will try it only for the case with solid horizontal edges.\n    // In this case, we should only operate in the y-dimension, i.e. only destress in that dimension.\n    // We also test that we can set an extra boundary gap in the sep matrix, and this won't matter; that's\n    // because even though the solidifyAlignedEdges function uses BDRY gaps between nodes and edge-nodes,\n    // the \"extra gap\" is in the x-dimension, and we're not operating in that dimension.\n    H0.getSepMatrix().setExtraBdryGap(15);\n    colaOpts.xAxis = false;\n    H0.destress(colaOpts);\n    writeStringToFile(H0.writeTglf(), \"output/\" \"solidify_\" \"solid_horiz_destressed.tglf\");\n    writeStringToFile(P->writeTglf(), \"output/\" \"solidify_\" \"planar_after_horiz_destressed.tglf\");\n    /*\n    ColaOptions opts;\n    opts.preventOverlaps = true;\n    H0.destress(opts);\n    */\n\n\n    return 0;\n}\n"
  },
  {
    "path": "cola/libdialect/tests/swig_tests/aca.py",
    "content": "from pkg.adaptagrams import *\n\n# Build a graph.\ng = buildGraphFromTglfFile(\"../graphs/random/v30e33.tglf\")\n# Do ACA layout.\naca = ACALayout(g)\naca.layout()\naca.updateGraph()\n# Record the layout.\nwith open('./output/aca.tglf', 'w') as f: f.write(g.writeTglf())\nwith open('./output/svg/aca.svg', 'w') as f: f.write(g.writeSvg())\n\n"
  },
  {
    "path": "cola/libdialect/tests/swig_tests/chainconfig.py",
    "content": "from pkg.adaptagrams import *\n\ng = buildGraphFromTglfFile(\"../graphs/special/chainconfig01.tglf\")\ng.getSepMatrix().setCardinalOP(0, 1, CardinalDir_SOUTH)\ng.getSepMatrix().setCardinalOP(16, 15, CardinalDir_NORTH)\nchains = buildAllChainsInGraph(g)\nchain = chains[0]\nchain.takeShapeBasedConfiguration()\nopts = ColaOptions()\ng.project(opts, XDIM)\ng.project(opts, YDIM)\ng.destress()\nwith open('./output/chainconfig.tglf', 'w') as f: f.write(g.writeTglf())\n\n"
  },
  {
    "path": "cola/libdialect/tests/swig_tests/destress_aca.py",
    "content": "from pkg.adaptagrams import *\n\ng = buildGraphFromTglfFile(\"../graphs/special/X_4.tglf\")\n#print g.getMaxDegree()\n#print g.getNumNodes()\naca = ACALayout(g)\naca.layout()\ng.updateNodesFromRects()\naca.updateSepMatrix()\nt1 = g.writeTglf()\nwith open('./output/X_4_aca.tglf', 'w') as f:\n    f.write(t1)\n\nopts = ColaOptions()\ng.destress(opts)\nt2 = g.writeTglf()\nwith open('./output/X_4_aca_destress.tglf', 'w') as f:\n    f.write(t2)\n\n"
  },
  {
    "path": "cola/libdialect/tests/swig_tests/expand.py",
    "content": "from pkg.adaptagrams import *\n\nopts = HolaOpts()\n# Build a graph\ng = buildGraphFromTglfFile(\"../graphs/special/expand03.tglf\")\n# Peel.\ntrees = peel(g)\n# Do an ortho hub layout on the core.\ncore = g\nohl_opts = OrthoHubLayoutOptions()\nohl = OrthoHubLayout(core, ohl_opts)\nohl.layout()\n# Give the trees their symmetric layout.\niel = g.getIEL()\nfor tree in trees:\n    tree.symmetricLayout(CardinalDir_EAST, iel/4.0, iel, opts.preferConvexTrees)\n# Do an ortho routing and planarise the core.\nopts.routingScalar_shapeBufferDistance = 1/8.0\nlor = LeaflessOrthoRouter(core, opts)\nlor.route()\nop = OrthoPlanariser(core)\nP = op.planarise()\n# Reattach trees.\nreattachTrees(P, trees, opts)\n# Write output.\nt = P.writeTglf()\nwith open('./output/expand.tglf', 'w') as f:\n    f.write(t)\n\n"
  },
  {
    "path": "cola/libdialect/tests/swig_tests/faceset.py",
    "content": "from pkg.adaptagrams import *\n\ng = buildGraphFromTglfFile(\"../graphs/special/bundlecross.tglf\")\nhola_opts = HolaOpts()\nhola_opts.routingScalar_shapeBufferDistance = 1/8.0\nlor = LeaflessOrthoRouter(g, hola_opts)\nlor.route()\nop = OrthoPlanariser(g);\nP = op.planarise();\nfaceSet = FaceSet(P)\nassert faceSet.getNumFaces() == 7\n\n"
  },
  {
    "path": "cola/libdialect/tests/swig_tests/hola.py",
    "content": "from pkg.adaptagrams import *\n\n# Build a graph.\ng = buildGraphFromTglfFile(\"../graphs/random/v30e33.tglf\")\n# Do HOLA layout.\nopts = HolaOpts()\ndoHOLA(g, opts)\n# Record the layout.\nwith open('./output/hola.tglf', 'w') as f: f.write(g.writeTglf())\nwith open('./output/svg/hola.svg', 'w') as f: f.write(g.writeSvg())\n\n"
  },
  {
    "path": "cola/libdialect/tests/swig_tests/leafless.py",
    "content": "from pkg.adaptagrams import *\n\ng = buildGraphFromTglfFile(\"../graphs/random/v40e42.tglf\")\npeel(g)\ng.destress()\nopts = OrthoHubLayoutOptions()\nohl = OrthoHubLayout(g, opts)\nohl.layout()\nhola_opts = HolaOpts()\nlor = LeaflessOrthoRouter(g, hola_opts)\nlor.route()\nt = g.writeTglf()\nwith open('./output/leaflessroute.tglf', 'w') as f:\n    f.write(t)\n\n\n"
  },
  {
    "path": "cola/libdialect/tests/swig_tests/nearalign.py",
    "content": "from pkg.adaptagrams import *\n\ng = buildGraphFromTglfFile(\"../graphs/special/nearalign01.tglf\")\nopts = HolaOpts()\nignore = DialectNodeLookup()\natab = AlignmentTable(g, ignore)\nn = doNearAlignments(g, atab, ignore, opts)\nassert n == 2\nt = g.writeTglf()\nwith open('./output/nearalign.tglf', 'w') as f:\n    f.write(t)\n\n"
  },
  {
    "path": "cola/libdialect/tests/swig_tests/orthohub.py",
    "content": "from pkg.adaptagrams import *\n\ng = buildGraphFromTglfFile(\"../graphs/special/core_with_trees.tglf\")\nopts = OrthoHubLayoutOptions()\nohl = OrthoHubLayout(g, opts)\nohl.layout()\nt = g.writeTglf()\nwith open('./output/core_with_trees_ohl.tglf', 'w') as f:\n    f.write(t)\n\n"
  },
  {
    "path": "cola/libdialect/tests/swig_tests/output/README.txt",
    "content": "This directory is used for output from the test cases.\n"
  },
  {
    "path": "cola/libdialect/tests/swig_tests/output/svg/README.txt",
    "content": "This directory is used for output from the test cases.\n"
  },
  {
    "path": "cola/libdialect/tests/swig_tests/planarise.py",
    "content": "from pkg.adaptagrams import *\n\ng = buildGraphFromTglfFile(\"../graphs/special/bundlecross.tglf\")\nhola_opts = HolaOpts()\nhola_opts.routingScalar_shapeBufferDistance = 1/8.0\nlor = LeaflessOrthoRouter(g, hola_opts)\nlor.route()\nop = OrthoPlanariser(g);\nP = op.planarise();\nt = P.writeTglf()\nwith open('./output/planarise.tglf', 'w') as f:\n    f.write(t)\n\n\n"
  },
  {
    "path": "cola/libdialect/tests/swig_tests/run_tests",
    "content": "#!/usr/bin/python\n\nimport os\n\nos.system(\"ln -s ../../.. pkg\")\n\nnames = \"\"\"\ndestress_aca\northohub\nplanarise\nleafless\nfaceset\ntreeplacement\nexpand\nchainconfig\nhola\naca\n\"\"\".split()\n\nprint '...'\nfor name in names:\n    cmd = 'python %s.py' % name\n    print '%s complete' % name\n    os.system(cmd)\n\n"
  },
  {
    "path": "cola/libdialect/tests/swig_tests/treeplacement.py",
    "content": "from pkg.adaptagrams import *\n\nopts = HolaOpts()\n# Build a graph\ng = buildGraphFromTglfFile(\"../graphs/special/treeplacement3.tglf\")\n# Peel.\ntrees = peel(g)\n# Give the trees their symmetric layout.\niel = g.getIEL()\nfor tree in trees:\n    tree.symmetricLayout(CardinalDir_EAST, iel/4.0, iel, opts.preferConvexTrees)\n# Do an ortho routing and planarise the core.\nopts.routingScalar_shapeBufferDistance = 1/8.0\nlor = LeaflessOrthoRouter(g, opts)\nlor.route()\nop = OrthoPlanariser(g);\nP = op.planarise();\n# Compute the face set.\nfaceSet = FaceSet(P)\n# Get the tree rooted at node 0.\nfor tree in trees:\n    if tree.getRootNodeID() == 0:\n        t0 = tree\n        break\n# Get all possible tree placements.\ntps = faceSet.listAllPossibleTreePlacements(t0)\n# Choose best placement; should be NORTH.\nbest1 = chooseBestPlacement(tps, opts)\nassert best1.getPlacementDir() == CompassDir_NORTH\n# But if we do not favour external placement, then best should be\n# SOUTH, dur to isolation from the tree rooted at node 1.\nopts.treePlacement_favourExternal = False\nbest2 = chooseBestPlacement(tps, opts)\nassert best2.getPlacementDir() == CompassDir_SOUTH\n\n"
  },
  {
    "path": "cola/libdialect/tests/symmtree.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libdialect - A library for computing DiAlEcT layouts:\n *                 D = Decompose/Distribute\n *                 A = Arrange\n *                 E = Expand/Emend\n *                 T = Transform\n *\n * Copyright (C) 2018  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n * Author(s):   Steve Kieffer   <http://skieffer.info>\n*/\n\n#include <vector>\n\n#include \"libvpsc/assertions.h\"\n\n#include \"libdialect/commontypes.h\"\n#include \"libdialect/io.h\"\n#include \"libdialect/graphs.h\"\n#include \"libdialect/peeling.h\"\n#include \"libdialect/util.h\"\n#include \"libdialect/trees.h\"\n#include \"libdialect/ortho.h\"\n\nusing namespace dialect;\n\nusing std::vector;\n\nint main(void) {\n    Graph graph = *buildGraphFromTglfFile(\"graphs/\" \"special/core_with_trees.tglf\");\n    double iel = graph.getIEL();\n    Trees trees = peel(graph);\n    // Check that there are four trees.\n    COLA_ASSERT(trees.size() == 4);\n    // And also write each component to a separate file for visual check.\n    writeStringToFile(graph.writeTglf(), \"output/\" \"symmtree_\" \"core.tglf\");\n    size_t i = 0;\n    vector<CardinalDir> dirs{\n        CardinalDir::NORTH, CardinalDir::EAST, CardinalDir::SOUTH, CardinalDir::WEST\n    };\n    for (Tree_SP t : trees) {\n        t->symmetricLayout(dirs[i], iel/4, iel);\n        writeStringToFile(\n            t->underlyingGraph()->writeTglf(),\n            string_format(\"output/\" \"symmtree_\" \"tree_%d.tglf\", i++)\n        );\n    }\n    return 0;\n}\n"
  },
  {
    "path": "cola/libdialect/tests/tglf01.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libdialect - A library for computing DiAlEcT layouts:\n *                 D = Decompose/Distribute\n *                 A = Arrange\n *                 E = Expand/Emend\n *                 T = Transform\n *\n * Copyright (C) 2018  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n * Author(s):   Steve Kieffer   <http://skieffer.info>\n*/\n\n#include \"libdialect/io.h\"\n#include \"libdialect/graphs.h\"\n\nusing namespace dialect;\n\nint main(void) {\n    Graph graph = *buildGraphFromTglfFile(\"graphs/\" \"special/core_with_trees.tglf\");\n    writeStringToFile(\n        graph.writeTglf(),\n        \"output/\" \"tglf01_\" \"generated.tglf\"\n    );\n    return 0;\n}\n"
  },
  {
    "path": "cola/libdialect/tests/treeboxes01.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libdialect - A library for computing DiAlEcT layouts:\n *                 D = Decompose/Distribute\n *                 A = Arrange\n *                 E = Expand/Emend\n *                 T = Transform\n *\n * Copyright (C) 2018  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n * Author(s):   Steve Kieffer   <http://skieffer.info>\n*/\n\n#include <vector>\n#include <iostream>\n\n#include \"libvpsc/assertions.h\"\n\n#include \"libdialect/commontypes.h\"\n#include \"libdialect/io.h\"\n#include \"libdialect/graphs.h\"\n#include \"libdialect/util.h\"\n#include \"libdialect/routing.h\"\n#include \"libdialect/opts.h\"\n#include \"libdialect/planarise.h\"\n#include \"libdialect/faces.h\"\n#include \"libdialect/peeling.h\"\n#include \"libdialect/trees.h\"\n#include \"libdialect/treeplacement.h\"\n\nusing namespace dialect;\n\nusing std::vector;\nusing std::cout;\nusing std::endl;\n\nvector<id_type> nodes2ids(Nodes nodes) {\n    vector<id_type> ids;\n    for (Node_SP u : nodes) ids.push_back(u->id());\n    return ids;\n}\n\nint main(void) {\n\n    HolaOpts opts;\n    // Build a graph.\n    Graph_SP graph = buildGraphFromTglfFile(\"graphs/\" \"special/treeplacement4.tglf\");\n    // Peel.\n    Trees trees = peel(*graph);\n    // There should be two trees.\n    COLA_ASSERT(trees.size() == 2);\n    // Give the trees their symmetric layout.\n    double iel = graph->getIEL();\n    for (Tree_SP t : trees) t->symmetricLayout(CardinalDir::EAST, iel/4.0, iel, opts.preferConvexTrees);\n    // Do an ortho routing and planarise the core.\n    LeaflessOrthoRouter lor(graph, opts);\n    lor.setShapeBufferDistanceIELScalar(0.125);\n    lor.route();\n    OrthoPlanariser op(graph);\n    Graph_SP P = op.planarise();\n    writeStringToFile(P->writeTglf(), \"output/\" \"treeboxes01_\" \"planar_layout.tglf\");\n\n    // Compute the face set.\n    FaceSet faceSet(P);\n\n    // Get ahold of the tree rooted at node 0.\n    Tree_SP t0 = nullptr;\n    for (Tree_SP t : trees) {\n        if (t->getRootNodeID() == 0) {\n            t0 = t;\n            break;\n        }\n    }\n    // Show the tree's layout.\n    writeStringToFile(t0->underlyingGraph()->writeTglf(), \"output/\" \"treeboxes01_\" \"tree_layout.tglf\");\n\n    bool verbose = false;\n\n    // Get all possible placements, with the usual settings:\n    opts.treePlacement_favourCardinal = true;\n    opts.treePlacement_favourExternal = true;\n    opts.treePlacement_favourIsolation = true;\n    TreePlacements tps = faceSet.listAllPossibleTreePlacements(t0);\n    if (verbose) for (TreePlacement_SP tp : tps) cout << tp->toString();\n\n    // If in choosing a best placement we no longer favour external placement,\n    // then the tree should be placed SOUTH, due to isolation.\n    opts.treePlacement_favourExternal = false;\n    TreePlacement_SP best = chooseBestPlacement(tps, opts);\n    if (true || verbose) cout << best->toString();\n    COLA_ASSERT(best->getPlacementDir() == CompassDir::SOUTH);\n\n    // Insert the tree box for this placement.\n    double padding = iel/4.0;\n    best->insertTreeNode(padding);\n    // Show the result.\n    std::string tglfWithBox = P->writeTglf();\n    writeStringToFile(tglfWithBox, \"output/\" \"treeboxes01_\" \"with_tree_box.tglf\");\n\n    cout << tglfWithBox << endl;\n\n    // And check that the fixed relative constraints are present, between the tree box\n    // and the root node to which it attaches.\n    COLA_ASSERT(\n        tglfWithBox.find(\"0 89 C R == 30\") != std::string::npos ||\n        tglfWithBox.find(\"0 89 C L == 30\") != std::string::npos\n    );\n    COLA_ASSERT(tglfWithBox.find(\"0 89 C D == 142.5\") != std::string::npos);\n\n    return 0;\n}\n"
  },
  {
    "path": "cola/libdialect/tests/treeplacement01.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libdialect - A library for computing DiAlEcT layouts:\n *                 D = Decompose/Distribute\n *                 A = Arrange\n *                 E = Expand/Emend\n *                 T = Transform\n *\n * Copyright (C) 2018  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n * Author(s):   Steve Kieffer   <http://skieffer.info>\n*/\n\n#include <vector>\n#include <iostream>\n\n#include \"libvpsc/assertions.h\"\n\n#include \"libdialect/commontypes.h\"\n#include \"libdialect/io.h\"\n#include \"libdialect/graphs.h\"\n#include \"libdialect/util.h\"\n#include \"libdialect/routing.h\"\n#include \"libdialect/opts.h\"\n#include \"libdialect/planarise.h\"\n#include \"libdialect/faces.h\"\n#include \"libdialect/peeling.h\"\n#include \"libdialect/trees.h\"\n#include \"libdialect/treeplacement.h\"\n\nusing namespace dialect;\n\nusing std::vector;\nusing std::cout;\nusing std::endl;\n\nvector<id_type> nodes2ids(Nodes nodes) {\n    vector<id_type> ids;\n    for (Node_SP u : nodes) ids.push_back(u->id());\n    return ids;\n}\n\nint main(void) {\n\n    HolaOpts opts;\n    // Build a graph.\n    Graph_SP graph = buildGraphFromTglfFile(\"graphs/\" \"special/3cross4cross_wTrees.tglf\");\n    // Peel.\n    Trees trees = peel(*graph);\n    // There should be four trees.\n    COLA_ASSERT(trees.size() == 4);\n    // Give the trees their symmetric layout.\n    double iel = graph->getIEL();\n    for (Tree_SP t : trees) t->symmetricLayout(CardinalDir::EAST, iel/4.0, iel, opts.preferConvexTrees);\n    // Do an ortho routing and planarise the core.\n    LeaflessOrthoRouter lor(graph, opts);\n    lor.setShapeBufferDistanceIELScalar(0.125);\n    lor.route();\n    OrthoPlanariser op(graph);\n    Graph_SP P = op.planarise();\n    writeStringToFile(P->writeTglf(), \"output/\" \"treeplacement01_\" \"planar_layout.tglf\");\n\n    // Compute the face set.\n    FaceSet faceSet(P);\n\n    // Get ahold of the trees we're interested in.\n    Tree_SP t4 = nullptr,\n            t11 = nullptr;\n    for (Tree_SP t : trees) {\n        if (t->getRootNodeID() == 4) t4 = t;\n        else if (t->getRootNodeID() == 11) t11 = t;\n    }\n\n    bool verbose = false;\n\n    // Check the possible tree placements at node 4 (the \"3-crossing\").\n    // There should be 18 of them.\n    // Here the asymmetry of the tree rooted at node 4 contributes a factor of 2\n    // in the total number of placements, since asymmetric trees can be flipped.\n    opts.treePlacement_favourCardinal = false;\n    TreePlacements tps1 = faceSet.listAllPossibleTreePlacements(t4);\n    if (verbose) for (TreePlacement_SP tp : tps1) cout << tp->toString();\n    COLA_ASSERT(tps1.size() == 18);\n\n    // Favouring cardinal placements should *not* change the number of placements.\n    // (In an older version of HOLA, this used to eliminate all ordinal placements\n    // from even being considered.)\n    opts.treePlacement_favourCardinal = true;\n    TreePlacements tps2 = faceSet.listAllPossibleTreePlacements(t4);\n    if (verbose) for (TreePlacement_SP tp : tps2) cout << tp->toString();\n    COLA_ASSERT(tps2.size() == 18);\n\n    // Next we move to node 11 (the \"4-crossing\").\n    // Here we should get 8 ordinal placments.\n    // Also, it is because this tree has a symmetric layout that we get only 8,\n    // not 16 placements.\n    TreePlacements tps3 = faceSet.listAllPossibleTreePlacements(t11);\n    if (verbose) for (TreePlacement_SP tp : tps3) cout << tp->toString();\n    COLA_ASSERT(tps3.size() == 8);\n\n    // Now we want to see which placements are chosen as best.\n    // For the tree at node 4, while favouring cardinal placement, obviously one of\n    // the EAST placements should be chosen.\n    TreePlacement_SP best1 = chooseBestPlacement(tps1, opts);\n    if (verbose) cout << best1->toString();\n    COLA_ASSERT(best1->getPlacementDir() == CompassDir::EAST);\n\n    // As for the tree at node 11, favouring cardinal placement does not matter,\n    // since only ordinal placements are possible. Favouring the external face\n    // also does not matter, since all placements are external.\n    // However we should find that favouring isolation forces choice of the\n    // southeast placement direction, due to the trees rooted at nodes 12 and 21.\n    TreePlacement_SP best2 = chooseBestPlacement(tps3, opts);\n    if (verbose) cout << best2->toString();\n    COLA_ASSERT(best2->getPlacementDir() == CompassDir::SE);\n\n    return 0;\n}\n"
  },
  {
    "path": "cola/libdialect/tests/treeplacement02.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libdialect - A library for computing DiAlEcT layouts:\n *                 D = Decompose/Distribute\n *                 A = Arrange\n *                 E = Expand/Emend\n *                 T = Transform\n *\n * Copyright (C) 2018  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n * Author(s):   Steve Kieffer   <http://skieffer.info>\n*/\n\n#include <vector>\n#include <iostream>\n\n#include \"libvpsc/assertions.h\"\n\n#include \"libdialect/commontypes.h\"\n#include \"libdialect/io.h\"\n#include \"libdialect/graphs.h\"\n#include \"libdialect/util.h\"\n#include \"libdialect/routing.h\"\n#include \"libdialect/opts.h\"\n#include \"libdialect/planarise.h\"\n#include \"libdialect/faces.h\"\n#include \"libdialect/peeling.h\"\n#include \"libdialect/trees.h\"\n#include \"libdialect/treeplacement.h\"\n\nusing namespace dialect;\n\nusing std::vector;\nusing std::cout;\nusing std::endl;\n\nvector<id_type> nodes2ids(Nodes nodes) {\n    vector<id_type> ids;\n    for (Node_SP u : nodes) ids.push_back(u->id());\n    return ids;\n}\n\nint main(void) {\n\n    HolaOpts opts;\n    // Build a graph.\n    Graph_SP graph = buildGraphFromTglfFile(\"graphs/\" \"special/treeplacement2.tglf\");\n    // Peel.\n    Trees trees = peel(*graph);\n    // There should be two trees.\n    COLA_ASSERT(trees.size() == 2);\n    // Give the trees their symmetric layout.\n    double iel = graph->getIEL();\n    for (Tree_SP t : trees) t->symmetricLayout(CardinalDir::EAST, iel/4.0, iel, opts.preferConvexTrees);\n    // Do an ortho routing and planarise the core.\n    LeaflessOrthoRouter lor(graph, opts);\n    lor.setShapeBufferDistanceIELScalar(0.125);\n    lor.route();\n    OrthoPlanariser op(graph);\n    Graph_SP P = op.planarise();\n    writeStringToFile(P->writeTglf(), \"output/\" \"treeplacement02_\" \"planar_layout.tglf\");\n\n    // Compute the face set.\n    FaceSet faceSet(P);\n\n    // Get ahold of the trees we're interested in.\n    Tree_SP t0 = nullptr,\n            t1 = nullptr;\n    for (Tree_SP t : trees) {\n        if (t->getRootNodeID() == 0) t0 = t;\n        else if (t->getRootNodeID() == 1) t1 = t;\n    }\n\n    bool verbose = false;\n\n    // Consider the tree rooted at node 0.\n    // There should be ten placements.\n    opts.treePlacement_favourCardinal = false;\n    opts.treePlacement_favourExternal = false;\n    TreePlacements tps1 = faceSet.listAllPossibleTreePlacements(t0);\n    if (verbose) for (TreePlacement_SP tp : tps1) cout << tp->toString();\n    COLA_ASSERT(tps1.size() == 10);\n\n    return 0;\n}\n"
  },
  {
    "path": "cola/libdialect/tests/treeplacement03.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libdialect - A library for computing DiAlEcT layouts:\n *                 D = Decompose/Distribute\n *                 A = Arrange\n *                 E = Expand/Emend\n *                 T = Transform\n *\n * Copyright (C) 2018  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n * Author(s):   Steve Kieffer   <http://skieffer.info>\n*/\n\n#include <vector>\n#include <iostream>\n\n#include \"libvpsc/assertions.h\"\n\n#include \"libdialect/commontypes.h\"\n#include \"libdialect/io.h\"\n#include \"libdialect/graphs.h\"\n#include \"libdialect/util.h\"\n#include \"libdialect/routing.h\"\n#include \"libdialect/opts.h\"\n#include \"libdialect/planarise.h\"\n#include \"libdialect/faces.h\"\n#include \"libdialect/peeling.h\"\n#include \"libdialect/trees.h\"\n#include \"libdialect/treeplacement.h\"\n\nusing namespace dialect;\n\nusing std::vector;\nusing std::cout;\nusing std::endl;\n\nvector<id_type> nodes2ids(Nodes nodes) {\n    vector<id_type> ids;\n    for (Node_SP u : nodes) ids.push_back(u->id());\n    return ids;\n}\n\nint main(void) {\n\n    HolaOpts opts;\n    // Build a graph.\n    Graph_SP graph = buildGraphFromTglfFile(\"graphs/\" \"special/treeplacement3.tglf\");\n    // Peel.\n    Trees trees = peel(*graph);\n    // There should be two trees.\n    COLA_ASSERT(trees.size() == 2);\n    // Give the trees their symmetric layout.\n    double iel = graph->getIEL();\n    for (Tree_SP t : trees) t->symmetricLayout(CardinalDir::EAST, iel/4.0, iel, opts.preferConvexTrees);\n    // Do an ortho routing and planarise the core.\n    LeaflessOrthoRouter lor(graph, opts);\n    lor.setShapeBufferDistanceIELScalar(0.125);\n    lor.route();\n    OrthoPlanariser op(graph);\n    Graph_SP P = op.planarise();\n    writeStringToFile(P->writeTglf(), \"output/\" \"treeplacement03_\" \"planar_layout.tglf\");\n\n    // Compute the face set.\n    FaceSet faceSet(P);\n\n    // Get ahold of the tree rooted at node 0.\n    Tree_SP t0 = nullptr;\n    for (Tree_SP t : trees) {\n        if (t->getRootNodeID() == 0) {\n            t0 = t;\n            break;\n        }\n    }\n\n    bool verbose = false;\n\n    // Get all possible placements, with the usual settings:\n    opts.treePlacement_favourCardinal = true;\n    opts.treePlacement_favourExternal = true;\n    opts.treePlacement_favourIsolation = true;\n    TreePlacements tps = faceSet.listAllPossibleTreePlacements(t0);\n    if (verbose) for (TreePlacement_SP tp : tps) cout << tp->toString();\n\n    // If we choose a best placement with the same settings, the tree should be placed NORTH.\n    TreePlacement_SP best1 = chooseBestPlacement(tps, opts);\n    if (true || verbose) cout << best1->toString();\n    COLA_ASSERT(best1->getPlacementDir() == CompassDir::NORTH);\n\n    // However if we no longer favour external placement, then the tree should be placed\n    // SOUTH, due to isolation.\n    opts.treePlacement_favourExternal = false;\n    TreePlacement_SP best2 = chooseBestPlacement(tps, opts);\n    if (true || verbose) cout << best2->toString();\n    COLA_ASSERT(best2->getPlacementDir() == CompassDir::SOUTH);\n\n    return 0;\n}\n"
  },
  {
    "path": "cola/libdialect/tests/trees.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libdialect - A library for computing DiAlEcT layouts:\n *                 D = Decompose/Distribute\n *                 A = Arrange\n *                 E = Expand/Emend\n *                 T = Transform\n *\n * Copyright (C) 2018  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n * Author(s):   Steve Kieffer   <http://skieffer.info>\n*/\n\n#include <iostream>\n#include <memory>\n\n#include \"libvpsc/assertions.h\"\n#include \"libdialect/commontypes.h\"\n#include \"libdialect/trees.h\"\n#include \"libdialect/io.h\"\n#include \"libdialect/graphs.h\"\n#include \"libdialect/ortho.h\"\n\nusing std::string;\nusing std::cout;\nusing std::endl;\n\nusing namespace dialect;\n\nint main(void) {\n\n    // Build a tree.\n    string inputFilename = \"tree01m\";\n    Graph_SP graph = buildGraphFromTglfFile(\"graphs/\" \"trees/\"+inputFilename+\".tglf\");\n    Node_SP root = graph->getNode(0);\n    Tree tree(graph, root);\n    string rep = tree.repr();\n    cout << rep << endl;\n    const char *expected =\n        \"Tree: 0 1 2 3 4 5 6 7 8 9 10 11 12\\n\"\n        \"Rank 0: 0\\n\"\n        \"Rank 1: 1^ 2\\n\"\n        \"Rank 2: 3 4^ 5\\n\"\n        \"Rank 3: 6 8^\\n\"\n        \"Rank 4: 7\\n\"\n        \"Rank 5: 9^ 10^ 11^ 12^\\n\"\n        \"Isom: 0,0,0,0:1:0;1:0,1,1:0,1\\n\";\n    COLA_ASSERT(rep == expected);\n\n    // Now build a new Tree off the same Graph, but naming a different Node as root.\n    Node_SP new_root = graph->getNode(6);\n    Tree subtree(graph, new_root);\n    rep = subtree.repr();\n    cout << rep << endl;\n    const char *e2 =\n        \"Tree: 6 7 9 10 11 12\\n\"\n        \"Rank 0: 6\\n\"\n        \"Rank 1: 7\\n\"\n        \"Rank 2: 9^ 10^ 11^ 12^\\n\"\n        \"Isom: 0,0,0,0:1\\n\";\n    COLA_ASSERT(rep == e2);\n\n    // Try symmetric layout.\n    tree.symmetricLayout(CardinalDir::SOUTH, 15, 60);\n    writeStringToFile(\n        tree.underlyingGraph()->writeTglf(),\n        \"output/\" \"trees_\" +inputFilename+\".tglf\"\n    );\n\n    return 0;\n}\n"
  },
  {
    "path": "cola/libdialect/tests/trees2.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libdialect - A library for computing DiAlEcT layouts:\n *                 D = Decompose/Distribute\n *                 A = Arrange\n *                 E = Expand/Emend\n *                 T = Transform\n *\n * Copyright (C) 2018  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n * Author(s):   Steve Kieffer   <http://skieffer.info>\n*/\n\n#include <iostream>\n#include <memory>\n\n#include \"libvpsc/assertions.h\"\n#include \"libdialect/commontypes.h\"\n#include \"libdialect/trees.h\"\n#include \"libdialect/io.h\"\n#include \"libdialect/graphs.h\"\n#include \"libdialect/ortho.h\"\n\nusing std::string;\nusing std::cout;\nusing std::endl;\n\nusing namespace dialect;\n\nint main(void) {\n\n    // Build a tree.\n    string inputFilename = \"tree02\";\n    Graph_SP graph = buildGraphFromTglfFile(\"graphs/\" \"trees/\"+inputFilename+\".tglf\");\n    Node_SP root = graph->getNode(0);\n    Tree tree(graph, root);\n    string rep = tree.repr();\n    cout << rep << endl;\n    // Try symmetric layout with convex ordering...\n    tree.symmetricLayout(CardinalDir::SOUTH, 15, 60);\n    writeStringToFile(\n        tree.underlyingGraph()->writeTglf(),\n        \"output/\" \"trees2_\" +inputFilename+\"_convex.tglf\"\n    );\n    // ...and with concave ordering:\n    tree.symmetricLayout(CardinalDir::SOUTH, 15, 60, false);\n    writeStringToFile(\n        tree.underlyingGraph()->writeTglf(),\n        \"output/\" \"trees2_\" +inputFilename+\"_concave.tglf\"\n    );\n    return 0;\n}\n"
  },
  {
    "path": "cola/libdialect/tests/vpsc01.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libdialect - A library for computing DiAlEcT layouts:\n *                 D = Decompose/Distribute\n *                 A = Arrange\n *                 E = Expand/Emend\n *                 T = Transform\n *\n * Copyright (C) 2018  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n * Author(s):   Steve Kieffer   <http://skieffer.info>\n*/\n\n#include \"libvpsc/rectangle.h\"\n#include \"libcola/compound_constraints.h\"\n\n#include \"libdialect/commontypes.h\"\n#include \"libdialect/io.h\"\n#include \"libdialect/graphs.h\"\n#include \"libdialect/util.h\"\n\nusing namespace dialect;\n\nint main(void) {\n\n    // Suppose we have two nodes, u0 and u1, and we want to constrain u1 so that its\n    // right-hand boundary does not go to the right of u0's right-hand boundary.\n\n    // For example, suppose u0 is 100 x 60, and u1 is 40 x 40.\n    // Theoretically, what we are asking for is a separation constraint with a negative gap:\n    //\n    //          u1.x - 30 <= u0.x\n    //\n    // But it is another question how to implement this with VPSC.\n\n    // Set up the two nodes.\n    Graph G;\n    Node_SP u0 = Node::allocate();\n    u0->setDims(100, 60);\n    u0->setCentre(0, 0);\n    G.addNode(u0);\n    Node_SP u1 = Node::allocate();\n    u1->setDims(40, 40);\n    u1->setCentre(70, 70);\n    G.addNode(u1);\n    writeStringToFile(G.writeTglf(), \"output/\" \"vpsc01_\" \"00_initial_position.tglf\");\n\n    // Does VPSC support separations with negative gaps?\n    cola::SeparationConstraint *sep1 = new cola::SeparationConstraint(vpsc::XDIM, 0, 1, -30);\n    ColaOptions opts;\n    opts.ccs.push_back(sep1);\n    G.project(opts, vpsc::XDIM);\n    writeStringToFile(G.writeTglf(), \"output/\" \"vpsc01_\" \"01_negative_gap_sepco_proj.tglf\");\n\n    // Reset positions.\n    u0->setCentre(0, 0);\n    u1->setCentre(70, 70);\n    writeStringToFile(G.writeTglf(), \"output/\" \"vpsc01_\" \"02_reset_position.tglf\");\n\n    // Try again, using alignments and separation in combination.\n    cola::AlignmentConstraint *aln0 = new cola::AlignmentConstraint(vpsc::XDIM, 50);\n    aln0->addShape(0, -50);\n    cola::AlignmentConstraint *aln1 = new cola::AlignmentConstraint(vpsc::XDIM, 90);\n    aln1->addShape(1, -20);\n    cola::SeparationConstraint *sep2 = new cola::SeparationConstraint(vpsc::XDIM, aln1, aln0, 0);\n    ColaOptions opts2;\n    opts2.ccs.push_back(aln0);\n    opts2.ccs.push_back(aln1);\n    opts2.ccs.push_back(sep2);\n    G.project(opts2, vpsc::XDIM);\n    writeStringToFile(G.writeTglf(), \"output/\" \"vpsc01_\" \"03_separated_alignments_proj.tglf\");\n\n    // Clean up.\n    delete sep1;\n    delete aln0;\n    delete aln1;\n    delete sep2;\n\n}\n"
  },
  {
    "path": "cola/libdialect/treeplacement.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libdialect - A library for computing DiAlEcT layouts:\n *                 D = Decompose/Distribute\n *                 A = Arrange\n *                 E = Expand/Emend\n *                 T = Transform\n *\n * Copyright (C) 2018  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n * Author(s):   Steve Kieffer   <http://skieffer.info>\n*/\n\n#include <memory>\n#include <algorithm>\n#include <map>\n#include <limits>\n#include <sstream>\n#include <functional>\n\n#include \"libvpsc/assertions.h\"\n#include \"libvpsc/rectangle.h\"\n#include \"libavoid/geomtypes.h\"\n\n#include \"libdialect/commontypes.h\"\n#include \"libdialect/ortho.h\"\n#include \"libdialect/graphs.h\"\n#include \"libdialect/faces.h\"\n#include \"libdialect/expansion.h\"\n#include \"libdialect/constraints.h\"\n#include \"libdialect/logging.h\"\n#include \"libdialect/util.h\"\n#include \"libdialect/treeplacement.h\"\n\nusing namespace dialect;\n\nusing Avoid::Point;\n\nusing std::string;\n\nid_type TreePlacement::nextID = 0;\n\nFaceSet_SP dialect::reattachTrees(Graph_SP core, Trees trees, HolaOpts opts, Logger *logger) {\n\n    // Set up for logging.\n    unsigned ln = logger != nullptr ? logger->nextLoggingIndex : 0;\n    unsigned lns = 0;\n    std::function<void(string)> log = [core, logger](string name)->void{\n        if (logger!=nullptr) logger->log(*core, name);\n    };\n\n    // Compute the faces of the core.\n    FaceSet_SP faceset = std::make_shared<FaceSet>(core);\n\n    // Sort the Trees into the order in which we want to reattach them.\n    // Our plan is to place those with largest perimeter first.\n    std::sort(trees.begin(), trees.end(), [](const Tree_SP &a, const Tree_SP &b)->bool{\n        return a->underlyingGraph()->getBoundingBox().perimeter() > b->underlyingGraph()->getBoundingBox().perimeter();\n    });\n\n    // Reattach the trees one by one, with padding.\n    double padding = core->getIEL()/4.0;\n\n    ColaOptions colaOpts;\n    colaOpts.preventOverlaps = true;\n    colaOpts.solidifyAlignedEdges = true;\n\n    for (Tree_SP tree : trees) {\n        // List all possible placements for this Tree.\n        TreePlacements tps = faceset->listAllPossibleTreePlacements(tree);\n        // Choose a best one.\n        TreePlacement_SP best = nullptr;\n        ProjSeq_SP ps = nullptr;\n        while (!tps.empty()) {\n            best = chooseBestPlacement(tps, opts);\n            // Project, making room for the tree node.\n            ps = best->buildBestProjSeq(padding, opts.expansion_doCostlierDimensionFirst, opts.expansion_estimateMethod);\n            if (ps == nullptr) {\n                // Best placement had no feasible projection sequence.\n                // Delete it from `tps`, and try next best.\n                tps.erase(std::remove(tps.begin(), tps.end(), best), tps.end());\n            } else {\n                break;\n            }\n        }\n        if (ps == nullptr) {\n            // No placement had a feasible projection sequence.\n            std::ostringstream ss;\n            ss << \"No feasible expansions for tree rooted at node \" << tree->getRootNodeID();\n            throw std::runtime_error(ss.str());\n        }\n        core->applyProjSeq(colaOpts, *ps);\n        // Insert the tree node.\n        best->insertTreeNode(padding);\n        log(string_format(\"%02d_%02d_insert_tree_box\", ln, lns++));\n    }\n\n    return faceset;\n}\n\nTreePlacement_SP dialect::chooseBestPlacement(TreePlacements tps, HolaOpts opts) {\n    TreePlacement_SP bestPlacement = nullptr;\n\n    // If favouring cardinal placement, we make this the primary consideration.\n    if (opts.treePlacement_favourCardinal) {\n        // Sort so that all cardinal placements come first.\n        std::sort(tps.begin(), tps.end(), [](const TreePlacement_SP &a, const TreePlacement_SP &b)->bool{\n            return Compass::isCardinal(a->getPlacementDir()) && !Compass::isCardinal(b->getPlacementDir());\n        });\n        // Determine how many placements are cardinal.\n        size_t numCardinal = 0;\n        for (TreePlacement_SP tp : tps) if (Compass::isCardinal(tp->getPlacementDir())) ++numCardinal;\n        // If there is precisely one cardinal placement, then we choose it.\n        if (numCardinal == 1) bestPlacement = tps.front();\n        // If there are several cardinal placements, then we choose only from among them.\n        else if (numCardinal > 1) tps.erase(tps.begin() + numCardinal, tps.end());\n    }\n\n    // If we haven't chosen a best placement yet, and we are favouring external placement, then\n    // we consider that next.\n    if (bestPlacement == nullptr && opts.treePlacement_favourExternal) {\n        // Sort so that all external placements come first.\n        std::sort(tps.begin(), tps.end(), [](const TreePlacement_SP &a, const TreePlacement_SP &b)->bool{\n            return a->isExternal() && !b->isExternal();\n        });\n        // Determine how many placements are external.\n        size_t numExternal = 0;\n        for (TreePlacement_SP tp : tps) if (tp->isExternal()) ++numExternal;\n        // If there is precisely one external placement, then we choose it.\n        if (numExternal == 1) bestPlacement = tps.front();\n        // If there are several external placements, then we choose only from among them.\n        else if (numExternal > 1) tps.erase(tps.begin() + numExternal, tps.end());\n    }\n\n    // If we haven't chosen a best placement yet, and we are favouring isolation, then\n    // we consider that next.\n    if (bestPlacement == nullptr && opts.treePlacement_favourIsolation) {\n        // Build a lookup of number of potential neighbours, by TreePlacement ID.\n        // Also determine the minimal number.\n        std::map<id_type, size_t> numPotNbrs;\n        size_t minimalNum = std::numeric_limits<size_t>::max();\n        for (TreePlacement_SP tp : tps) {\n            size_t n = tp->getNumPotentialNbrs();\n            numPotNbrs.insert({tp->id(), n});\n            if (n < minimalNum) minimalNum = n;\n        }\n        // Sort by increasing number of potential neighbours.\n        std::sort(tps.begin(), tps.end(), [&numPotNbrs](const TreePlacement_SP &a, const TreePlacement_SP &b)->bool{\n            return numPotNbrs.at(a->id()) < numPotNbrs.at(b->id());\n        });\n        // Determine how many placements have the minimal number.\n        size_t numMinimal = 0;\n        for (TreePlacement_SP tp : tps) if (numPotNbrs.at(tp->id()) == minimalNum) ++numMinimal;\n        // If there is precisely one placement with the minimal number of potential neighbours, then we choose it.\n        if (numMinimal == 1) bestPlacement = tps.front();\n        // If there are several placements with the minimal number, then we choose only from among them.\n        else if (numMinimal > 1) tps.erase(tps.begin() + numMinimal, tps.end());\n    }\n\n    // If we still haven't chosen a best placement, then we finally come to the case in which we must\n    // estimate the cost of each remaining potential placement. Then we choose a cheapest one.\n    if (bestPlacement == nullptr) {\n        double minCost = std::numeric_limits<double>::max();\n        for (TreePlacement_SP tp : tps) {\n            double cost = tp->estimateCost();\n            if (cost < minCost) {\n                minCost = cost;\n                bestPlacement = tp;\n            }\n        }\n    }\n\n    // By this point, we should always have made a choice.\n    COLA_ASSERT(bestPlacement != nullptr);\n    // Return it.\n    return bestPlacement;\n}\n\nstd::string TreePlacement::toString(void) const {\n    std::ostringstream ss;\n    ss << \"TreePlacement \" << m_ID << \": \";\n    ss << \"Placed \" << Compass::dirToString(m_placementDir);\n    ss << \", Growing \" << Compass::cardToString(m_growthDir);\n    ss << (m_flip ? \", Flipped.\" : \".\") << std::endl;\n    ss << \"    Rooted at Node \" << m_faceRoot->id() << std::endl;\n    ss << \"    Into \" << m_face.toString() << std::endl;\n    return ss.str();\n}\n\nsize_t TreePlacement::getNumPotentialNbrs(void) {\n    // Get the relevant sides:\n    Sides relevantSides = m_face.getRelevantSidesForPlacement(shared_from_this());\n    // First compute the total number of root nodes present:\n    size_t N = 0;\n    for (Side_SP S : relevantSides) N += S->getNumRootNodes();\n    // Since this TreePlacement's own root node has been counted once per side, we subtract that.\n    N -= relevantSides.size();\n    return N;\n}\n\ndouble TreePlacement::estimateCost(void) {\n    ExpansionManager em(shared_from_this());\n    m_cost = em.estimateCost();\n    return m_cost;\n}\n\nNode_SP TreePlacement::buildTreeBox(double padding) const {\n    Node_SP initialBox = m_tree->buildRootlessBox(m_growthDir);\n    dimensions initialDims = initialBox->getDimensions();\n    Point initialCentre = initialBox->getCentre();\n    double w1 = initialDims.first,\n           h1 = initialDims.second,\n           u0 = initialCentre.x,\n           v0 = initialCentre.y,\n           u1 = 0,\n           v1 = 0;\n    if (m_placementDir == (CompassDir)m_growthDir) {\n        // Placement direction is cardinal and equals the growth direction.\n        // In this case we need to check whether the tree is to be flipped,\n        // and if so alter the (u0, v0) vector accordingly.\n        // Also add padding if requested.\n        if (Compass::isVerticalCard(m_growthDir)) {\n            // Vertical growth direction.\n            u1 = m_flip ? -u0 : u0;\n            v1 = v0;\n            if (padding > 0) {\n                w1 += 2*padding;\n                h1 += padding;\n                // Want half width padding on each side, but all height padding on outside.\n                v1 += Compass::isIncreasingCard(m_growthDir) ? padding/2.0 : -padding/2.0;\n            }\n        } else {\n            // Horizontal growth direction.\n            u1 = u0;\n            v1 = m_flip ? -v0 : v0;\n            if (padding > 0) {\n                w1 += padding;\n                h1 += 2*padding;\n                // Want half height padding on each side, but all width padding on outside.\n                u1 += Compass::isIncreasingCard(m_growthDir) ? padding/2.0 : -padding/2.0;\n            }\n        }\n    } else {\n        // Placement direction is ordinal, and growth direction is one of its components.\n        // In this case we throw away the given (u0, v0), and compute this vector based\n        // solely on the dimensions of the tree and root, and on the placement direction.\n        // It does not matter if the tree is to be flipped.\n        // First consider padding.\n        if (padding > 0) {\n            if (Compass::isVerticalCard(m_growthDir)) {\n                w1 += 2*padding;\n                h1 += padding;\n            } else {\n                w1 += padding;\n                h1 += 2*padding;\n            }\n        }\n        // Now adjust coordinates.\n        dimensions rootDims = m_faceRoot->getDimensions();\n        Point sgn = Compass::vectorSigns(m_placementDir);\n        double rootW = rootDims.first,\n               rootH = rootDims.second;\n        u1 = sgn.x * (rootW + w1)/2.0;\n        v1 = sgn.y * (rootH + h1)/2.0;\n    }\n    // Build representative Node and return.\n    Node_SP boxNode = Node::allocate();\n    boxNode->setCentre(u1, v1);\n    boxNode->setDims(w1, h1);\n    return boxNode;\n}\n\nbool TreePlacement::somePointOppositeSegment(LineSegment &seg, Avoid::Point &pt, double padding, bool openInterval) {\n    if (padding < 0) {\n        padding = m_face.getGraph()->getIEL()/4.0;\n    }\n    Node_SP treeBox = buildTreeBox(padding);\n    Point rc = m_faceRoot->getCentre(),\n          tc = treeBox->getCentre();\n    dimensions dims = treeBox->getDimensions();\n    bool segIsHoriz = Compass::isHorizontalCard(seg.direc);\n    // tc actually gives the vector from the centre of the root node to that of the tree box.\n    // So to get the actual coordinates of the centre of the tree box we need to add rc and tc.\n    double hw = dims.first/2.0,\n           hh = dims.second/2.0,\n           x = rc.x + tc.x - hw,\n           X = rc.x + tc.x + hw,\n           y = rc.y + tc.y - hh,\n           Y = rc.y + tc.y + hh,\n           a = segIsHoriz ? x : y,\n           b = segIsHoriz ? X : Y;\n    interval K = openInterval ? seg.openIntervalIntersection(a, b) : seg.closedIntervalIntersection(a, b);\n    // If K is empty, we cannot find a point.\n    if (K.second < K.first) return false;\n    // Otherwise there is an intersection so we can build a point.\n    double w = K.first;\n    if (segIsHoriz) {\n        pt.x = w;\n        pt.y = rc.y + tc.y;\n    } else {\n        pt.x = rc.x + tc.x;\n        pt.y = w;\n    }\n    return true;\n}\n\nvoid TreePlacement::applyGeometryToTree(void) {\n    // Rotate and flip.\n    m_tree->rotate(m_growthDir);\n    if (m_flip) m_tree->flip();\n    // How we translate depends on whether the placement direction is cardinal or not.\n    Point rc = m_faceRoot->getCentre();\n    if (Compass::isCardinal(m_placementDir)) {\n        // When the placement direction is cardinal, we simply translate the tree so its own root\n        // node lies directly atop the root node in the face.\n        m_tree->translate(rc);\n    } else {\n        // When the placement direction is ordinal, we need to displace the tree's root from the face's root.\n        // The displacement is based on the padding that we add to the treebox.\n        double padding = m_face.getGraph()->getIEL()/4.0;\n        Node_SP unpaddedTreeBox = m_tree->buildRootlessBox(m_growthDir),\n                paddedTreeBox = buildTreeBox(padding);\n        Point uc = unpaddedTreeBox->getCentre(),\n              pc = paddedTreeBox->getCentre();\n        double dw = Compass::isIncreasingCard(m_growthDir) ? -padding/2.0 : padding/2.0;\n        Point dp = Compass::isVerticalCard(m_growthDir) ? Point(0, dw) : Point(dw, 0);\n        m_tree->translate(rc + pc - uc + dp);\n    }\n}\n\nvoid TreePlacement::insertTreeIntoGraph(Graph &G, NodesById &treeNodes, NodesById &bufferNodes, EdgesById &treeEdges) {\n    // Add the nodes and edges for the tree into the graph.\n    m_tree->addNetwork(G, treeNodes, treeEdges);\n    bool alignRoot = Compass::isCardinal(m_placementDir);\n    // Remove the box node for the tree if it is in the graph.\n    if (m_boxNode != nullptr && G.hasNode(m_boxNode->id())) G.severAndRemoveNode(*m_boxNode);\n    // Add constraints to maintain the layout of the tree.\n    m_tree->addConstraints(G, alignRoot);\n    // Add buffer nodes to keep space around the tree, and constraints to hold them in place.\n    m_tree->addBufferNodesAndConstraints(G, bufferNodes);\n}\n\nbool TreePlacement::rootIsAlignedWith(vpsc::Dim dim, id_type id) {\n    return m_rootAligns[dim].count(id) > 0;\n}\n"
  },
  {
    "path": "cola/libdialect/treeplacement.h",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libdialect - A library for computing DiAlEcT layouts:\n *                 D = Decompose/Distribute\n *                 A = Arrange\n *                 E = Expand/Emend\n *                 T = Transform\n *\n * Copyright (C) 2018  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n * Author(s):   Steve Kieffer   <http://skieffer.info>\n*/\n\n#ifndef DIALECT_TREEPLACEMENT_H\n#define DIALECT_TREEPLACEMENT_H\n\n#include <string>\n#include <memory>\n#include <map>\n#include <set>\n\n#include \"libvpsc/rectangle.h\"\n\n#include \"libdialect/commontypes.h\"\n#include \"libdialect/faces.h\"\n#include \"libdialect/graphs.h\"\n#include \"libdialect/trees.h\"\n#include \"libdialect/ortho.h\"\n#include \"libdialect/opts.h\"\n#include \"libdialect/constraints.h\"\n#include \"libdialect/logging.h\"\n\nnamespace dialect {\n\n//! @brief  Given a planar orthogonal core, and the corresponding Trees (as resulting\n//!         from the peeling process), choose Faces of the core in which to place the\n//!         Trees, generate constraints to expand those Faces, and insert large Nodes\n//!         to represent the bounding boxes of the Trees.\nFaceSet_SP reattachTrees(Graph_SP core, Trees trees, HolaOpts opts, Logger *logger=nullptr);\n\n//! @brief  Choose the best TreePlacement from among a list of alternatives.\nTreePlacement_SP chooseBestPlacement(TreePlacements tps, HolaOpts opts);\n\n//! A TreePlacement represents a way of placing a tree into the faces of\n//! a 4-planar, orthogonal layout.\nclass TreePlacement\n#ifndef SWIG\n// We hide this from SWIG, lest it complain, \"Nothing known about base class 'std::enable_shared_from_this...\"\n// http://swig.10945.n7.nabble.com/Nothing-known-about-base-class-std-enable-shared-from-this-tp14603p14604.html\n        : public std::enable_shared_from_this<TreePlacement>\n#endif\n{\npublic:\n    TreePlacement(Tree_SP tree, Face &face, Node_SP faceRoot,\n                  CompassDir dp, CardinalDir dg, bool flip=false)\n        : m_ID(nextID++),\n          m_tree(tree),\n          m_face(face),\n          m_faceRoot(faceRoot),\n          m_placementDir(dp),\n          m_growthDir(dg),\n          m_flip(flip),\n          m_cost(0),\n          m_boxNode(nullptr) {}\n\n    //! @brief  Get the placement direction.\n    CompassDir getPlacementDir(void) const { return m_placementDir; }\n\n    //! @brief  Get the growth direction.\n    CardinalDir getGrowthDir(void) const { return m_growthDir; }\n\n    //! @brief  Check whether the placement is into the external face.\n    bool isExternal(void) const { return m_face.isExternal(); }\n\n    //! @brief  Get the unique ID of this instance.\n    id_type id(void) const { return m_ID; }\n\n    //! @brief  Check the number of \"potential neighbours\" of this tree, if placed\n    //!         according to this placement. This is equal to the number of other\n    //!         root nodes on the relevant Sides to which the root node of this\n    //!         placement belongs.\n    size_t getNumPotentialNbrs(void);\n\n    //! @brief  Estimate the cost of this placement.\n    double estimateCost(void);\n\n    //! @brief  Get the Node at which the Tree would be rooted:\n    Node_SP getRootNode(void) const { return m_faceRoot; }\n\n    //! @brief  Access the Face to which this placement belongs.\n    Face &getFace(void) { return m_face; }\n\n    //! @brief  Insert a node representing the Tree into the Face to which this\n    //!         placement belongs.\n    //! @param[in] padding  Optional padding to be added to the tree box.\n    //! @sa TreePlacement::getTreeBox for interpretation of the padding.\n    void insertTreeNode(double padding=0) { m_face.insertTreeNode(shared_from_this(), padding); }\n\n    //! @brief  Get a string representation.\n    std::string toString(void) const;\n\n    //! @brief  Determine the size of the tree minus the root node, and the position\n    //!         relative to the root node.\n    //!\n    //! @param[in] padding  Optionally, you may request padding be added to the /outside/\n    //!                     sides of the box, i.e. all those except the side facing the\n    //!                     root node. For example, for a north-growing tree, the padding\n    //!                     will be added only to the north, east, and west sides.\n    //!                     Recommended value for padding is one quarter of the Graph's\n    //!                     ideal edge length (iel/4.0).\n    //!\n    //! @return  A Node whose dimensions w x h gives the dimensions of the bounding box\n    //!          of the tree, minus the root node, and whose position (x, y) gives the\n    //!          vector from the centre of the root node to the centre of this box.\n    //!\n    //! @note  The dimensions are in respect of the growth direction of this TreePlacement,\n    //!        and the position vector is in respect of its placement direction and flip bit.\n    Node_SP buildTreeBox(double padding=0) const;\n\n    //! @brief  Record the Node representing the box for the Tree.\n    void recordBoxNode(Node_SP &boxNode) { m_boxNode = boxNode; }\n\n    //! @brief  Check whether this TreePlacement has a box node yet.\n    bool hasBoxNode(void) { return m_boxNode != nullptr; }\n\n    //! @brief  Get the box node.\n    Node_SP getBoxNode(void) { return m_boxNode; }\n\n    //! @brief  Build the best projection sequence for this tree placement.\n    //! @param[in] padding  Optional padding for the new tree box.\n    //! @param[in] doCostlierDimensionFirst  Set true to do the more expensive dimension first,\n    //!             in hopes that this will obviate expansion in the other dimension altogether.\n    //! @param[in] estimateMethod  See defn of ExpansionEstimateMethod enum class.\n    //! @return  A ProjSeq representing the computed projection sequence.\n    ProjSeq_SP buildBestProjSeq(double padding=0, bool doCostlierDimensionFirst=false,\n                                ExpansionEstimateMethod estimateMethod=ExpansionEstimateMethod::CONSTRAINTS) {\n        return m_face.buildBestProjSeq(shared_from_this(), padding, doCostlierDimensionFirst, estimateMethod);\n    }\n\n    //! @brief  Compute some point belonging to the tree box and lying opposite a given\n    //!         line segment.\n    //! @param[in] seg  The LineSegment in question.\n    //! @param[out] pt  The point whose coordinates are to be set.\n    //! @param[in] padding  Padding for the tree box.\n    //! @param[in] openInterval  Set true if you want to use the open interval of the line\n    //!                          segment instead of closed (the default).\n    //! @return boolean saying whether the tree box indeed lies opposite the given line segment.\n    //!\n    //! @note  We compute the interval I of the tree box in the dimension parallel to the segment.\n    //! Let J be the interval of the segment -- open if the openInterval argument is true; closed\n    //! otherwise. Let K be the intersection of I and J. If K is empty then we return false.\n    //! Otherwise we pick a value w in K and return a point having w as one of its coordinates and\n    //! a centre coordinate of the tree box as the other coordinate.\n    bool somePointOppositeSegment(LineSegment &seg, Avoid::Point &pt, double padding=-1, bool openInterval=false);\n\n    //! @brief  Rotate, flip, and translate the tree as necessary to match this placement.\n    void applyGeometryToTree(void);\n\n    //! @brief  Insert the tree into a given Graph.\n    //! @param[out] G  The Graph into which the tree is to be inserted.\n    //! @param[out] treeNodes  A place to record the tree nodes that are constructred.\n    //! @param[out] bufferNodes  A place to record the buffer nodes that are constructred.\n    //! @param[out] treeEdges  A place to record the tree edges that are added.\n    void insertTreeIntoGraph(Graph &G, NodesById &treeNodes, NodesById &bufferNodes, EdgesById &treeEdges);\n\n    //! @brief  Check the size (i.e. number of nodes in) the Tree.\n    size_t size(void) const { return m_tree->size(); }\n\n    //! @brief  Tell the TreePlacement which Nodes are aligned with its root node in a given dimension.\n    //! @param[in] dim  The alignment dimension.\n    //! @param[in] idSet  The set of IDs of nodes that are aligned in this dimension with the root node.\n    void setRootAligns(vpsc::Dim dim, std::set<id_type> &idSet) { m_rootAligns[dim] = idSet; }\n\n    //! @brief  Check whether the root node is aligned with a given node, in a given dimension.\n    //! @param[in] dim  The dimension of interest.\n    //! @param[in] id  The ID of the node in question.\n    bool rootIsAlignedWith(vpsc::Dim dim, id_type id);\n\nprivate:\n\n    //! For class-specific generation of unique IDs:\n    static id_type nextID;\n    //! An instance's own unique ID:\n    const id_type m_ID;\n\n    //! The Tree to be placed:\n    Tree_SP m_tree;\n    //! The Face into which we consider placing it:\n    Face &m_face;\n    //! The Node in the Face, where the Tree would be rooted:\n    Node_SP m_faceRoot;\n    //! The placement direction considered:\n    CompassDir m_placementDir;\n    //! The growth direction of the Tree:\n    CardinalDir m_growthDir;\n    //! Whether the Tree's layout should be flipped over an axis parallel to its growth direction:\n    bool m_flip;\n\n    //! An estimated cost of this placement:\n    double m_cost;\n    //! A node to represent the bounding box of the Tree:\n    Node_SP m_boxNode = nullptr;\n\n    //! Want to know which other nodes are aligned with the root node in each dimension.\n    std::map<vpsc::Dim, std::set<id_type>> m_rootAligns;\n\n};\n\n\n} // namespace dialect\n\n#endif // DIALECT_TREEPLACEMENT_H\n"
  },
  {
    "path": "cola/libdialect/trees.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libdialect - A library for computing DiAlEcT layouts:\n *                 D = Decompose/Distribute\n *                 A = Arrange\n *                 E = Expand/Emend\n *                 T = Transform\n *\n * Copyright (C) 2018  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n * Author(s):   Steve Kieffer   <http://skieffer.info>\n*/\n\n#include <deque>\n#include <iterator>\n#include <string>\n#include <map>\n#include <algorithm>\n#include <memory>\n#include <utility>\n#include <sstream>\n#include <limits>\n#include <functional>\n\n#include \"libvpsc/assertions.h\"\n#include \"libavoid/libavoid.h\"\n\n#include \"libdialect/ortho.h\"\n#include \"libdialect/graphs.h\"\n#include \"libdialect/constraints.h\"\n#include \"libdialect/commontypes.h\"\n#include \"libdialect/trees.h\"\n\nusing namespace dialect;\n\nusing std::map;\nusing std::vector;\nusing std::string;\n\nusing Avoid::Point;\n\nTree::Tree(Graph_SP G, Node_SP root)\n    : m_graph(G),\n      m_root(root),\n      m_depth(0),\n      m_breadth(0),\n      m_isSymmetric(false),\n      m_lb(0),\n      m_ub(0),\n      m_boundaryTight(true),\n      m_growthDir(CardinalDir::NORTH)\n{\n    // As we go, we'll build a multimap from ranks to Nodes of that rank.\n    // At the end, we'll use this to build our lookup, m_nodesByRank.\n    std::multimap<unsigned, Node_SP> nodesByRank_mm;\n    // Compute ranks, leaves, and breadth.\n    // Start by setting rank 0 for the root node.\n    nodesByRank_mm.emplace(0, m_root);\n    m_rankByNodeID.emplace(m_root->id(), 0);\n    m_depth = 1;\n    // Now do BFS to identify all nodes of the tree.\n    std::deque<Node_SP> bfs_queue{m_root};\n    Node_SP node;\n    while (!bfs_queue.empty()) {\n        // Take from the front of the queue.\n        node = bfs_queue.front();\n        bfs_queue.pop_front();\n        unsigned id = node->id();\n        // Ensure we're not trying to construct a tree on\n        // a graph that contains a cycle, by checking that we\n        // have not yet encountered this node.\n        COLA_ASSERT(m_nodes.count(id) == 0);\n        m_nodes.insert({id, node});\n        // The current node's rank should already be defined.\n        unsigned rank = m_rankByNodeID[id];\n        // Get children\n        Nodes children = node->getChildren();\n        // If there are no children, then the current Node is a leaf.\n        if (children.empty()) {\n            m_leafIDs.emplace(id);\n        } else {\n            // There are children, so update the depth.\n            if (rank + 2 > m_depth) m_depth = rank + 2;\n        }\n        // Assign parent to any children, and add them to the queue.\n        for (Node_SP c : children) {\n            m_parents.emplace(c->id(), node);\n            nodesByRank_mm.emplace(rank + 1, c);\n            m_rankByNodeID.emplace(c->id(), rank + 1);\n            bfs_queue.emplace_back(c);\n        }\n    }\n    // After the search, the depth of the tree is already computed.\n    // Now we can build our lookup for nodes by rank, and compute the\n    // breadth as we go.\n    m_nodesByRank.reserve(m_depth);\n    m_leavesByRank.reserve(m_depth);\n    m_nonleavesByRank.reserve(m_depth);\n    // We will scan over our multimap, using two pointers.\n    auto ptr1 = nodesByRank_mm.cbegin();\n    auto ptr2 = ptr1;\n    auto end = nodesByRank_mm.cend();\n    // We work by rank. This works since the multimap is ordered.\n    for (unsigned r = 0; r < m_depth; ++r) {\n        size_t n = 0;\n        // Find the range of nodes of rank r. Count them as we go.\n        while (ptr2 != end && (*ptr2).first == r) {\n            ptr2 = std::next(ptr2);\n            ++n;\n        }\n        // Now initialize vectors and reserve space.\n        // For the leaves and nonleaves it is more space than is needed, but\n        // we guess this is the more efficient approach.\n        Nodes rank_r, leaves_r, nonleaves_r;\n        rank_r.reserve(n);\n        leaves_r.reserve(n);\n        nonleaves_r.reserve(n);\n        // Copy Nodes into the vectors.\n        while (ptr1 != ptr2) {\n            Node_SP u = (*ptr1).second;\n            rank_r.push_back(u);\n            if (m_leafIDs.count(u->id()) > 0) {\n                leaves_r.push_back(u);\n            } else {\n                nonleaves_r.push_back(u);\n            }\n            ptr1 = std::next(ptr1);\n        }\n        // Save the vectors\n        m_nodesByRank.push_back(rank_r);\n        m_leavesByRank.push_back(leaves_r);\n        m_nonleavesByRank.push_back(nonleaves_r);\n        // Update the breadth.\n        if (n > m_breadth) m_breadth = n;\n    }\n    // Clear and initialize rank bounds.\n    clearRankBounds();\n}\n\nvoid Tree::symmetricLayout(CardinalDir growthDir, double nodeSep, double rankSep, bool convexOrdering) {\n    m_growthDir = growthDir;\n    // Initialise root position to zero.\n    m_root->setCentre(0, 0);\n    // Initialise rank bounds to zero.\n    clearRankBounds();\n    // Initialise rank-0 bounds for root node.\n    dimensions rootDims = m_root->getDimensions();\n    double half = Compass::isVertical((CompassDir) growthDir) ? rootDims.first/2.0 : rootDims.second/2.0;\n    m_lb = -half;\n    m_ub = half;\n    m_boundsByRank[0][0] = m_lb;\n    m_boundsByRank[0][1] = m_ub;\n    // Leaves are simple:\n    if (m_depth == 1) {\n        m_isSymmetric = true;\n        return;\n    }\n    // Proceed for nonleaves:\n    Trees cTrees = getCTrees();\n    // Layout the C-Trees recursively.\n    for (Tree_SP c : cTrees) {\n        c->symmetricLayout(growthDir, nodeSep, rankSep);\n    }\n    // Sort the C-Trees into isomorphism classes.\n    map<string, Trees> classes;\n    for (Tree_SP c : cTrees) {\n        string isomstr = c->computeIsomString();\n        classes[isomstr].push_back(c);\n    }\n    // Now form a deque of all isom. strings.\n    // (Why a deque? We need to be able to sort, push front, and erase an element from the middle.\n    //  If not for the sorting, we would prefer a list, but that does not have random access iterators,\n    //  so cannot be sorted.)\n    std::deque<string> isomStrings;\n    isomStrings.resize(classes.size());\n    std::transform(classes.cbegin(), classes.cend(), isomStrings.begin(),\n        [](const std::pair<string, Trees> &p) -> string { return p.first; }\n    );\n    // Now sort the isom strings.\n    // If using convex ordering, use the following rule.\n    // (If not, use the opposite rule.)\n    // Class A comes before (is \"less than\") class B if,\n    // for any trees tA, tB belonging to these classes, resp.,\n    // (i) tA is broader than tB, or\n    // (ii) they are the same breadth but tA is deeper than tB, or\n    // (iii) they are the same breadth and depth, but A's isom string\n    //       comes before B's, lexicographically.\n    // The first two options reflect our ideas about how C-trees should\n    // be positioned in the layout; the third option is only there to\n    // ensure the sorting is deterministic.\n    std::sort(\n        isomStrings.begin(), isomStrings.end(),\n        [&classes, &convexOrdering](const string &a, const string &b) -> bool {\n            Trees A = classes[a], B = classes[b];\n            Tree_SP tA = A[0], tB = B[0];\n            unsigned bA = tA->m_breadth, bB = tB->m_breadth,\n                     dA = tA->m_depth,   dB = tB->m_depth;\n            if (bA > bB) {\n                return convexOrdering;\n            } else if (bB > bA) {\n                return !convexOrdering;\n            } else if (dA > dB) {\n                return convexOrdering;\n            } else if (dB > dA) {\n                return !convexOrdering;\n            } else {\n                return a < b;\n            }\n        }\n    );\n    // How many classes have odd order?\n    // We also record the isom. string for the odd-order class most recently\n    // noted. This works because we only need the string in case there is\n    // exactly one odd-order class.\n    string oddOrderIsomStr;\n    size_t numOddOrder = 0;\n    for (auto p : classes) {\n        if (p.second.size() % 2 == 1) {\n            ++numOddOrder;\n            oddOrderIsomStr = p.first;\n        }\n    }\n    // Now we can determine whether the layout is going to be symmetric or not,\n    // and whether it's going to need to have a central c-tree.\n    bool haveCentralTree = false;\n    // If there are no odd-order classes, then we are symmetric.\n    if (numOddOrder == 0) {\n        m_isSymmetric = true;\n    }\n    // If there are two or more odd-order classes, then we are not symmetric.\n    else if (numOddOrder > 1) {\n        m_isSymmetric = false;\n    }\n    // Else there is exactly one odd-order class.\n    // In this case we are symmetric if and only if (any representative of) the one\n    // odd-order class is symmetric.\n    else {\n        m_isSymmetric = classes[oddOrderIsomStr][0]->m_isSymmetric;\n        // For symmetric layout, the trees of odd-order class need to go in the centre.\n        // So we put them first in the list, since we work our way outward from the centre\n        // when placing the trees.\n        haveCentralTree = true;\n        auto it = isomStrings.begin();\n        while (*it != oddOrderIsomStr) ++it;\n        isomStrings.erase(it);\n        isomStrings.push_front(oddOrderIsomStr);\n    }\n    // Now place the c-trees alternating around the centre.\n    // We use a boolean to control the alternation.\n    bool positiveNext = true;\n    // Another boolean manages central tree placement.\n    bool mustPlaceCentralTree = haveCentralTree;\n    // We will need to do translations. We start with a base translation vector.\n    Point baseTrans(0, 0);\n    switch(growthDir) {\n    case CardinalDir::EAST:\n        baseTrans.x = rankSep;\n        break;\n    case CardinalDir::SOUTH:\n        baseTrans.y = rankSep;\n        break;\n    case CardinalDir::WEST:\n        baseTrans.x = -rankSep;\n        break;\n    case CardinalDir::NORTH:\n        baseTrans.y = -rankSep;\n        break;\n    }\n    // Now iterate over the isomorphism classes of C-Trees.\n    for (string isom : isomStrings) {\n        Trees C = classes[isom];\n        for (Tree_SP t : C) {\n            if (mustPlaceCentralTree) {\n                // Tree t is to be placed centrally.\n                t->translate(baseTrans);\n                // Update own bounds based on Tree t's bounds.\n                double lb = 0, ub = 0;\n                for (unsigned r = 1; r <= t->m_depth; ++r) {\n                    // Tree t's rank r - 1 lies on our own rank r.\n                    auto tb = t->m_boundsByRank[r-1];\n                    double tlb = tb[0], tub = tb[1];\n                    m_boundsByRank[r][0] = tlb;\n                    m_boundsByRank[r][1] = tub;\n                    if (tlb < lb) lb = tlb;\n                    if (tub > ub) ub = tub;\n                }\n                m_lb = lb;\n                m_ub = ub;\n                // Now central tree is placed, so clear the flag.\n                mustPlaceCentralTree = false;\n            } else {\n                // Set up based on whether we're on the positive or the negative side.\n                size_t a = positiveNext ? 1 : 0,\n                       b = positiveNext ? 0 : 1;\n                double rootPos = positiveNext ? std::numeric_limits<double>::min() : std::numeric_limits<double>::max(),\n                       extreme = rootPos;\n                if (!positiveNext) t->flip();\n                // Consider the position where each rank would like the root to go.\n                // Take the extreme, according to whether we're on the positive or negative side.\n                for (unsigned r = 0; r < t->m_depth; ++r) {\n                    double candidate = getBounds(r + 1, nodeSep)[a] - t->getBounds(r, nodeSep)[b];\n                    rootPos = positiveNext ? std::max(rootPos, candidate) : std::min(rootPos, candidate);\n                }\n                // Translate the tree.\n                Point trans = Compass::isVertical((CompassDir) growthDir) ?\n                                Point(rootPos, baseTrans.y) : Point(baseTrans.x, rootPos);\n                t->translate(trans);\n                // Update upper bounds if on positive side, lower if on negative side.\n                for (unsigned r = 0; r < m_depth; ++r) {\n                    double tb;\n                    if (1 <= r && r <= t->m_depth) {\n                        // Again, Tree t's rank r - 1 lies on our own rank r.\n                        tb = t->m_boundsByRank[r-1][a];\n                        m_boundsByRank[r][a] = tb;\n                    } else {\n                        tb = m_boundsByRank[r][a];\n                    }\n                    extreme = positiveNext ? std::max(extreme, tb) : std::min(extreme, tb);\n                }\n                if (a == 1) {\n                    m_ub = extreme;\n                } else {\n                    m_lb = extreme;\n                }\n                // Flip to other side for next iteration, if any.\n                positiveNext = !positiveNext;\n            }\n        }\n    }\n}\n\nvoid Tree::flip(void) {\n    // We filp the tree around the y-axis for NORTH and SOUTH growth,\n    // around the x-axis for EAST and WEST growth.\n    if (Compass::isVertical((CompassDir) m_growthDir)) {\n        for (auto p : m_nodes) {\n            Point q = p.second->getCentre();\n            p.second->setCentre(-q.x, q.y);\n        }\n    } else {\n        for (auto p : m_nodes) {\n            Point q = p.second->getCentre();\n            p.second->setCentre(q.x, -q.y);\n        }\n    }\n    // Bounds are swapped and negated.\n    double l = -m_ub, u = -m_lb;\n    m_lb = l;\n    m_ub = u;\n    // Flip per-rank bounds\n    for (unsigned r = 0; r < m_depth; ++r) {\n        l = -m_boundsByRank[r][1];\n        u = -m_boundsByRank[r][0];\n        m_boundsByRank[r][0] = l;\n        m_boundsByRank[r][1] = u;\n    }\n}\n\nvoid Tree::translate(Avoid::Point vect) {\n    // Translate Nodes.\n    for (auto p : m_nodes) {\n        Point q = p.second->getCentre();\n        p.second->setCentre(q.x + vect.x, q.y + vect.y);\n    }\n    // Adjust rank bounds\n    double disp = Compass::isVertical((CompassDir) m_growthDir) ? vect.x : vect.y;\n    m_lb += disp;\n    m_ub += disp;\n    for (unsigned r = 0; r < m_depth; ++r) {\n        m_boundsByRank[r][0] += disp;\n        m_boundsByRank[r][1] += disp;\n    }\n}\n\nvoid Tree::rotate(CardinalDir dg) {\n    // If we already have the desired growth direction, there's nothing to do.\n    if (dg == m_growthDir) return;\n    // Otherwise, rotate.\n    PlaneMap rot = Compass::getRotationFunction(m_growthDir, dg);\n    for (auto p : m_nodes) {\n        Node_SP u = p.second;\n        u->applyPlaneMap(rot);\n    }\n    // And record the new growth direction.\n    m_growthDir = dg;\n}\n\nvoid Tree::rotateGrowthDirCW(unsigned quarterTurns) {\n    unsigned q = quarterTurns % 4;\n    for (unsigned i = 0; i < q; ++i) m_growthDir = Compass::cardRotateCw90(m_growthDir);\n}\n\nvoid Tree::clearRankBounds(void) {\n    m_boundsByRank.clear();\n    m_boundsByRank.reserve(m_depth);\n    for (unsigned r = 0; r < m_depth; ++r) {\n        m_boundsByRank.push_back(std::vector<double>{0, 0});\n    }\n}\n\nstd::vector<double> Tree::getBounds(unsigned rank, double nodeSep) const {\n    std::vector<double> bounds(2);\n    // Start with basic bounds, based on whether we're using the tight boundary setting.\n    if (m_boundaryTight) {\n        bounds = m_boundsByRank[rank];\n    } else {\n        bounds[0] = m_lb;\n        bounds[1] = m_ub;\n    }\n    // Now pad with the given nodeSep value.\n    bounds[0] -= nodeSep;\n    bounds[1] += nodeSep;\n    return bounds;\n}\n\nTrees Tree::getCTrees(void) const {\n    // There's one C-Tree for each child of the root node.\n    // (It is the subtree rooted there.)\n    Trees ctrees;\n    Nodes children = m_root->getChildren();\n    ctrees.reserve(children.size());\n    for (Node_SP c : children) {\n        Tree_SP ct = std::make_shared<Tree>(m_graph, c);\n        ctrees.push_back(ct);\n    }\n    return ctrees;\n}\n\nstd::string Tree::computeIsomString(void) const {\n    // We compute a string which uniquely represents the isomorphism class\n    // of this Tree. This is the core idea from Manning & Atallah 1985.\n    map<id_type, unsigned> isomNumber;\n    map<id_type, vector<unsigned>> isomTuple;\n    map<id_type, string> isomTupleString;\n    vector<string> levelIsomStrings;\n    // Assign isomNumber 0 to all leaves.\n    for (id_type id : m_leafIDs) isomNumber[id] = 0;\n    // Initialise L to be a list of the deepest leaves.\n    Nodes L = m_leavesByRank[m_depth-1];\n    // Compute the isomstring for each level.\n    for (unsigned j = 2; j <= m_depth; ++j) {\n        unsigned r = m_depth - j;\n        Nodes N = m_nonleavesByRank[r];\n        for (Node_SP u : N) {\n            isomTuple[u->id()] = vector<unsigned>();\n        }\n        // For each leaf v in L, insert its number into\n        // the tuple of its parent node.\n        for (Node_SP v : L) {\n            id_type v_id = v->id();\n            Node_SP p = m_parents.at(v_id);\n            unsigned n = isomNumber[v_id];\n            isomTuple[p->id()].push_back(n);\n        }\n        // Create strings for isomTuples.\n        for (Node_SP u : N) {\n            id_type u_id = u->id();\n            vector<unsigned> tuple = isomTuple[u_id];\n            std::sort(tuple.begin(), tuple.end());\n            // Thanks to https://stackoverflow.com/a/1430774\n            std::stringstream ss;\n            for (size_t i = 0; i < tuple.size(); ++i) {\n                if (i != 0) ss << \",\";\n                ss << tuple[i];\n            }\n            isomTupleString[u_id] = ss.str();\n        }\n        // Sort the nonleaves of rank r by tuple.\n        std::sort(N.begin(), N.end(),\n            [&isomTupleString](const Node_SP &a, const Node_SP &b) -> bool {\n                return isomTupleString[a->id()] < isomTupleString[b->id()];\n            }\n        );\n        // Now we can write the isom string for this level.\n        std::stringstream ss;\n        for (size_t i = 0; i < N.size(); ++i) {\n            if (i != 0) ss << \";\";\n            ss << isomTupleString[N[i]->id()];\n        }\n        levelIsomStrings.push_back(ss.str());\n        // Compute next L.\n        // Start with the leaves of rank r.\n        L = m_leavesByRank[r];\n        // Sort nodes in N by tuple.\n        map<string, Nodes> nodesByTuple;\n        for (Node_SP u : N) {\n            string t = isomTupleString[u->id()];\n            nodesByTuple[t].push_back(u);\n        }\n        // Iterate over the classes, in lexicographic order on the tuple strings.\n        unsigned k = 0;\n        for (auto p : nodesByTuple) {\n            Nodes M = p.second;\n            // The Nodes in each class get isomNumber according to the ordering.\n            // They are also added to the next list L.\n            for (Node_SP u : M) {\n                isomNumber[u->id()] = k + 1;\n                L.push_back(u);\n            }\n        }\n    }\n    // Join the level strings for the full tree string.\n    std::stringstream ss;\n    for (size_t i = 0; i < levelIsomStrings.size(); ++i) {\n        if (i != 0) ss << \":\";\n        ss << levelIsomStrings[i];\n    }\n    string treeIsomString = ss.str();\n    return treeIsomString;\n}\n\n\n\nstd::string Tree::repr(void) const {\n    std::string s = \"Tree:\";\n    // All nodes:\n    for (auto p : m_nodes) {\n        s += string_format(\" %d\", p.first);\n    }\n    s += \"\\n\";\n    // Ranks:\n    for (unsigned r = 0; r < m_depth; ++r) {\n        s += string_format(\"Rank %d:\", r);\n        Nodes rank = m_nodesByRank[r];\n        std::sort(rank.begin(), rank.end(),\n            [](const Node_SP &a, const Node_SP &b) -> bool {\n                return a->id() < b->id();\n            }\n        );\n        for (Node_SP u : rank) {\n            s += string_format(\" %d\", u->id());\n            if (m_leafIDs.count(u->id()) > 0) s += \"^\";\n        }\n        s += \"\\n\";\n    }\n    s += \"Isom: \" + computeIsomString() + \"\\n\";\n    /*\n    // Leaves:\n    for (unsigned r = 0; r < m_depth; ++r) {\n        s += string_format(\"Leaves %d:\", r);\n        Nodes rank = m_leavesByRank[r];\n        std::sort(rank.begin(), rank.end(),\n            [](const Node_SP &a, const Node_SP &b) -> bool {\n                return a->id() < b->id();\n            }\n        );\n        for (Node_SP u : rank) {\n            s += string_format(\" %d\", u->id());\n        }\n        s += \"\\n\";\n    }\n    // Nonleaves:\n    for (unsigned r = 0; r < m_depth; ++r) {\n        s += string_format(\"Nonleaves %d:\", r);\n        Nodes rank = m_nonleavesByRank[r];\n        std::sort(rank.begin(), rank.end(),\n            [](const Node_SP &a, const Node_SP &b) -> bool {\n                return a->id() < b->id();\n            }\n        );\n        for (Node_SP u : rank) {\n            s += string_format(\" %d\", u->id());\n        }\n        s += \"\\n\";\n    }\n    */\n    return s;\n}\n\nNode_SP Tree::buildRootlessBox(CardinalDir growthDir) const {\n    // Tree should already have a layout.\n    // So we begin by computing the box for the Tree as laid out.\n    BoundingBox bb = m_graph->getBoundingBox();\n    dimensions rootDims = m_root->getDimensions();\n    double rootW = rootDims.first,\n           rootH = rootDims.second,\n           rootHalfOblongness = (rootW - rootH)/2.0,\n           x = bb.x,\n           y = bb.y,\n           w = bb.w(),\n           h = bb.h();\n    switch(m_growthDir) {\n    // If growing East/West then the root node's width is\n    // subracted from that of the box. In East case only,\n    // ULC of box shifts right by root node's width.\n    case CardinalDir::EAST:\n        x += rootW;\n        // Do not break. Flow through to WEST case...\n    case CardinalDir::WEST:\n        w -= rootW;\n        break;\n    // If growing South/North then the root node's height is\n    // subracted from that of the box. In South case only,\n    // ULC of box shifts down by root node's height.\n    case CardinalDir::SOUTH:\n        y += rootH;\n        // Do not break. Flow through to NORTH case...\n    case CardinalDir::NORTH:\n        h -= rootH;\n        break;\n    }\n    // Now we can compute the centre of the box.\n    double u = x + w/2.0,\n           v = y + h/2.0;\n    // So far everything has been based on this Tree's own growth\n    // direction. Now adjust for the desired growth direction, in\n    // case it is different.\n    if (growthDir != m_growthDir) {\n        // Rotate centre.\n        Point c = Compass::getRotationFunction(m_growthDir, growthDir)(Point(u, v));\n        u = c.x;\n        v = c.y;\n        // If the two growth directions are not in the same dimension...\n        if (!Compass::sameDimension(m_growthDir, growthDir)) {\n            // ...the dimensions swap...\n            std::swap(w, h);\n            // ...and if the root node is oblong, then the box needs to\n            // be shifted in the growth direction.\n            switch(growthDir) {\n            case CardinalDir::EAST:\n                u += rootHalfOblongness;\n                break;\n            case CardinalDir::WEST:\n                u -= rootHalfOblongness;\n                break;\n            case CardinalDir::SOUTH:\n                v -= rootHalfOblongness;\n                break;\n            case CardinalDir::NORTH:\n                v += rootHalfOblongness;\n            }\n        }\n    }\n    // Build Node and return it.\n    Node_SP boxNode = Node::allocate();\n    boxNode->setCentre(u, v);\n    boxNode->setDims(w, h);\n    return boxNode;\n}\n\nvoid Tree::addNetworkToRoutingAdapter(RoutingAdapter &ra, TreeRoutingType trt, Graph_SP core) {\n    // Add nodes.\n    NodesById nodes(m_nodes);\n    // If a core graph is given, omit the root node, since in this case the client is interested in\n    // reattaching this tree to the core, where there is already a root node.\n    if (core != nullptr) nodes.erase(m_root->id());\n    ra.addNodes(nodes);\n    // Prepare to set connection directions.\n    // Although the Tree could be growing in any cardinal direction, we envision the case of a north-growing\n    // or upward-growing Tree. Our variable names are based on this image.\n    CardinalDir up = m_growthDir,\n                down = Compass::cardFlip(up);\n    Avoid::ConnDirFlags upperDirs = Compass::libavoidConnDirs.at(down),\n                        ordinalRootDirs = Avoid::ConnDirAll ^ upperDirs,\n                        lowerDirs = trt >= TreeRoutingType::MONOTONIC ? ordinalRootDirs : Compass::libavoidConnDirs.at(up);\n    EdgeConnDirs dirs{lowerDirs, upperDirs};\n    EdgeConnDirs rev{upperDirs, lowerDirs};\n    EdgeConnDirs rootDirs{ordinalRootDirs, upperDirs};\n    EdgeConnDirs rootRev{upperDirs, ordinalRootDirs};\n    // In the case of a peeled tree which is to be reattached to a core graph, if the tree has been\n    // given ordinal placement direction then its root node is in a different position than the root\n    // node belonging to the core. So in order for the connectors in the router to get the proper endpts,\n    // we temporarily move the root node to the position of the core root.\n    Node_SP altRoot = core == nullptr ? m_root : core->getNode(m_root->id());\n    Point altRootPt = altRoot->getCentre(),\n          rootPt = m_root->getCentre();\n    m_root->setCentre(altRootPt.x, altRootPt.y);\n    // Determine whether we use permissive directions for connection to root node.\n    // There are two cases in which that is so: (1) we are using the MONOTONIC routing type, or\n    // (2) it is the CORE_ATTACHMENT type, and the root node has a single child and is transversely displaced.\n    bool permissiveRootDirs = (\n        trt >= TreeRoutingType::MONOTONIC ||\n        (trt == TreeRoutingType::CORE_ATTACHMENT && rootPt != altRootPt && m_nodesByRank[1].size() == 1)\n    );\n    // Now we can iterate over the Edges and set up the ConnDirs.\n    EdgesById edges = m_graph->getEdgeLookup();\n    EdgeConnDirsById connDirs;\n    id_type rid = m_root->id();\n    for (auto p : edges) {\n        // Determine the ranks of the source and target Nodes of the Edge, so that we can set the\n        // conndirs in the right order.\n        Edge_SP e = p.second;\n        id_type sid = e->getSourceEnd()->id(),\n                tid = e->getTargetEnd()->id();\n        unsigned rs = m_rankByNodeID[sid],\n                 rt = m_rankByNodeID[tid];\n        EdgeConnDirs d;\n        if ( permissiveRootDirs && (rid == sid || rid == tid) ) {\n            d = rs < rt ? rootDirs : rootRev;\n        } else {\n            d = rs < rt ? dirs : rev;\n        }\n        connDirs.insert({p.first, d});\n    }\n    // Add edges to router with conn dirs.\n    ra.addEdges(edges, &connDirs);\n    // Retore root position.\n    m_root->setCentre(rootPt.x, rootPt.y);\n}\n\nvoid Tree::addNetwork(Graph &G, NodesById &treeNodes, EdgesById &treeEdges) {\n    // Add Nodes.\n    NodesById G_nodes = G.getNodeLookup();\n    auto it = m_nodes.begin();\n    auto jt = G_nodes.begin();\n    while (it != m_nodes.end() && jt != G_nodes.end()) {\n        auto p = *it;\n        auto q = *jt;\n        id_type i = p.first,\n                j = q.first;\n        if (i > j) ++jt;\n        else {\n            if (i < j) {\n                // In this case the Tree has a Node that does not have a matching ID in the graph G.\n                // So we can add this Node to G.\n                G.addNode(p.second);\n                treeNodes.insert(p);\n            }\n            ++it;\n        }\n    }\n    // In case we fell off the end of G_nodes first:\n    while (it != m_nodes.end()) {\n        auto p = *it;\n        G.addNode(p.second);\n        ++it;\n    }\n    // Add Edges.\n    for (auto p : m_graph->getEdgeLookup()) {\n        Edge_SP e = p.second;\n        G.addEdge(e, false);\n        treeEdges.insert(p);\n    }\n}\n\nvoid Tree::addConstraints(Graph &G, bool alignRoot) {\n\n    // Prepare functions and constants based on our growth direction.\n    bool isVertical = Compass::isVerticalCard(m_growthDir);\n    // Function to compare Nodes by their transverse coordinate:\n    std::function<bool(Node_SP, Node_SP)> transCoordCmp = isVertical ?\n                [](const Node_SP &a, const Node_SP &b)->bool{ return a->getCentre().x < b->getCentre().x; } :\n                [](const Node_SP &a, const Node_SP &b)->bool{ return a->getCentre().y < b->getCentre().y; } ;\n    // Funciton to compare Nodes by their axial dimension:\n    std::function<bool(Node_SP, Node_SP)> axialMeasureCmp = isVertical ?\n                [](const Node_SP &a, const Node_SP &b)->bool{ return a->getDimensions().second < b->getDimensions().second; } :\n                [](const Node_SP &a, const Node_SP &b)->bool{ return a->getDimensions().first < b->getDimensions().first; } ;\n    // The direction in which to separate Nodes belonging to a common rank:\n    CardinalDir intraRankSepDir = isVertical ? CardinalDir::EAST : CardinalDir::SOUTH;\n    // The direction in which to separate Nodes belonging to neighbouring ranks:\n    SepDir interRankSepDir = lateralWeakening(cardinalDirToSepDir(m_growthDir));\n    // The coordinate to be equated when aligning Nodes with centre child Nodes:\n    vpsc::Dim centreAlignCoord = isVertical ? vpsc::XDIM : vpsc::YDIM;\n\n    SepMatrix &matrix = G.getSepMatrix();\n\n    // Align and separate all nodes within a rank.\n    // As we work, for each rank we want to note a \"tallest node,\" i.e. one of maximal axial dimension.\n    Nodes tallestNodes;\n    tallestNodes.reserve(m_depth);\n    for (Nodes rank : m_nodesByRank) {\n        // Record a tallest node.\n        tallestNodes.push_back(*std::max_element(rank.begin(), rank.end(), axialMeasureCmp));\n        // Separate nodes within the rank.\n        // First sort by transverse coordinate.\n        std::sort(rank.begin(), rank.end(), transCoordCmp);\n        // Now we can set the separations.\n        for (auto it = rank.begin(); it != std::prev(rank.end()); ++it) {\n            auto jt = std::next(it);\n            Node_SP u = *it,\n                    v = *jt;\n            id_type id1 = u->id(),\n                    id2 = v->id();\n            matrix.setCardinalOP(id1, id2, intraRankSepDir);\n        }\n    }\n\n    // Rank separation.\n    // For each pair of neighbouring ranks, we separate the tallest nodes in those ranks.\n    for (auto it = tallestNodes.begin(); it != std::prev(tallestNodes.end()); ++it) {\n        auto jt = std::next(it);\n        Node_SP u = *it,\n                v = *jt;\n        id_type id1 = u->id(),\n                id2 = v->id();\n        matrix.addSep(id1, id2, GapType::BDRY, interRankSepDir, SepType::INEQ, 0.0);\n    }\n\n    // Alignments of parents with central children.\n    for (auto p : m_nodes) {\n        Node_SP u = p.second;\n        // Skip the root node if we're not aligning it with its central child (if any).\n        if (!alignRoot && u == m_root) continue;\n        // Otherwise find the central child, if any.\n        Nodes children = u->getChildren();\n        size_t n = children.size();\n        // If even number of children, then none is central.\n        if (n % 2 == 0) continue;\n        // Otherwise odd, so sort by transverse coord and take middle one.\n        std::sort(children.begin(), children.end(), transCoordCmp);\n        size_t m = (n - 1)/2;\n        Node_SP c = children[m];\n        id_type id1 = u->id(),\n                id2 = c->id();\n        matrix.alignByEquatedCoord(id1, id2, centreAlignCoord);\n    }\n}\n\nvoid Tree::addBufferNodesAndConstraints(Graph &G, NodesById &bufferNodes) {\n    SepMatrix &matrix = G.getSepMatrix();\n    // We need a function to take a new buffer node bn, and a neighbour of that node nbr, and (a) add bn to Graph G,\n    // (b) add bn to our running lookup of bufferNodes, and (c) set a fixed relative constraint between bn and nbr.\n    std::function<void(Node_SP&, Node_SP&)> addBufferNode = [&bufferNodes, &G, &matrix](Node_SP &bn, Node_SP &nbr)->void{\n        G.addNode(bn);\n        id_type bnID = bn->id(),\n                nbrID = nbr->id();\n        bufferNodes.insert({bnID, bn});\n        Point c0 = bn->getCentre(),\n              c1 = nbr->getCentre();\n        double dx = c1.x - c0.x,\n               dy = c1.y - c0.y;\n        matrix.addFixedRelativeSep(bnID, nbrID, dx, dy);\n    };\n    // Set pad amount.\n    double pad = G.getIEL()/4.0;\n    // Pads on \"top\" of leaves (picturing NORTH growth):\n    auto it = m_nodes.begin();\n    auto jt = m_leafIDs.begin();\n    while (it != m_nodes.end() && jt != m_leafIDs.end()) {\n        auto p = *it;\n        id_type i = p.first,\n                j = *jt;\n        if (i > j) ++jt;\n        else {\n            if (i==j) {\n                Node_SP leaf = p.second;\n                BoundingBox b = leaf->getBoundingBox();\n                Node_SP bn = Node::allocate();\n                switch(m_growthDir) {\n                    case CardinalDir::EAST: bn->setBoundingBox(b.X, b.X + pad, b.y, b.Y); break;\n                    case CardinalDir::SOUTH: bn->setBoundingBox(b.x, b.X, b.Y, b.Y + pad); break;\n                    case CardinalDir::WEST: bn->setBoundingBox(b.x - pad, b.x, b.y, b.Y); break;\n                    case CardinalDir::NORTH: bn->setBoundingBox(b.x, b.X, b.y - pad, b.y); break;\n                }\n                addBufferNode(bn, leaf);\n            }\n            ++it;\n        }\n    }\n    // Pads on outsides of ranks:\n    bool isVertical = Compass::isVerticalCard(m_growthDir);\n    // Function to compare Nodes by their transverse coordinate:\n    std::function<bool(Node_SP, Node_SP)> transCoordCmp = isVertical ?\n                [](const Node_SP &a, const Node_SP &b)->bool{ return a->getCentre().x < b->getCentre().x; } :\n                [](const Node_SP &a, const Node_SP &b)->bool{ return a->getCentre().y < b->getCentre().y; } ;\n    for (auto it = std::next(m_nodesByRank.begin()); it != m_nodesByRank.end(); ++it) {\n        Nodes rank = *it;\n        std::sort(rank.begin(), rank.end(), transCoordCmp);\n        Node_SP first = rank.front(),\n                last  = rank.back();\n        BoundingBox a = first->getBoundingBox(),\n                    b = last->getBoundingBox();\n        // We make two buffer nodes, one for each end of the rank.\n        Node_SP bn0 = Node::allocate(),\n                bn1 = Node::allocate();\n        if (isVertical) {\n            bn0->setBoundingBox(a.x - pad, a.x, a.y, a.Y);\n            bn1->setBoundingBox(b.X, b.X + pad, b.y, b.Y);\n        } else {\n            bn0->setBoundingBox(a.x, a.X, a.y - pad, a.y);\n            bn1->setBoundingBox(b.x, b.X, b.Y, b.Y + pad);\n        }\n        addBufferNode(bn0, first);\n        addBufferNode(bn1, last);\n    }\n}\n\nvoid Tree::padCorrespNonRootNodes(Graph &H, double dw, double dh) {\n    NodesById rootIgnore = {{m_root->id(), m_root}};\n    m_graph->padCorrespNodes(H, dw, dh, rootIgnore);\n}\n"
  },
  {
    "path": "cola/libdialect/trees.h",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libdialect - A library for computing DiAlEcT layouts:\n *                 D = Decompose/Distribute\n *                 A = Arrange\n *                 E = Expand/Emend\n *                 T = Transform\n *\n * Copyright (C) 2018  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n * Author(s):   Steve Kieffer   <http://skieffer.info>\n*/\n\n#ifndef DIALECT_TREES_H\n#define DIALECT_TREES_H\n\n#include <set>\n#include <map>\n#include <vector>\n#include <string>\n\n#include \"libavoid/geomtypes.h\"\n\n#include \"libdialect/graphs.h\"\n#include \"libdialect/commontypes.h\"\n#include \"libdialect/ortho.h\"\n#include \"libdialect/opts.h\"\n#include \"libdialect/util.h\"\n#include \"libdialect/routing.h\"\n\nnamespace dialect {\n\nclass Tree {\npublic:\n\n    //! @brief  Standard constructor.\n    //!\n    //! @param[in]  G  the underlying Graph\n    //! @param[in]  root  the root Node of the tree\n    Tree(Graph_SP G, Node_SP root);\n\n    //! @brief  Apply the Symmetric Layout algorithm of Manning & Atallah\n    //!             See Manning, Joseph, and Mikhail J. Atallah.\n    //!             \"Fast detection and display of symmetry in trees.\" (1985).\n    //!\n    //! @param[in]  growthDir  The direction in which the tree should grow.\n    //! @param[in]  nodeSep  Minimal gap between nodes on the same rank.\n    //! @param[in]  rankSep  Minimal separation between ranks.\n    //! @param[in]  convexOrdering  If true, the broadest and deepest subtrees are\n    //!                             placed near the centre; if false, the opposite.\n    void symmetricLayout(CardinalDir growthDir, double nodeSep, double rankSep,\n                         bool convexOrdering = true);\n\n    //! @brief  Flip the tree's layout over the axis running through the root node\n    //!         and aligned with the growth direction.\n    void flip(void);\n\n    //! @brief  Translate the tree's layout by a given vector.\n    //!\n    //! @param[in]  vect  The vector by which to translate.\n    void translate(Avoid::Point vect);\n\n    //! @brief  Rotate the tree's layout to attain a desired growth direction.\n    //!\n    //! @param[in] dg  The desired growth direction.\n    void rotate(CardinalDir dg);\n\n    //! @brief  Do not rotate the layout, but simply update the Tree's growth direction by rotating clockwise.\n    //! @param quarterTurns  How many quarter turns clockwise to rotate the growth direction.\n    void rotateGrowthDirCW(unsigned quarterTurns);\n\n    //! @brief  Access the Tree's underlying Graph.\n    Graph_SP underlyingGraph(void) const { return m_graph; }\n\n    //! @brief  Access the Tree's root Node.\n    Node_SP getRootNode(void) const { return m_root; }\n\n    //! @brief  Write a string representation of this Tree.\n    //!         Useful for debugging.\n    std::string repr(void) const;\n\n    //! @brief  Check the ID of the root ndoe.\n    id_type getRootNodeID(void) const { return m_root->id(); }\n\n    //! @brief  Check whether the layout is symmetrical.\n    //!\n    //! @note  Just because you have called a Tree's symmetricLayout method, does not\n    //!        mean it acutally got a symmetrical layout! That is only possible if the\n    //!        Tree's structure is in fact symmetrical. This method informs you whether\n    //!        the latter is the case.\n    bool isSymmetrical(void) const { return m_isSymmetric; }\n\n    //! @brief  Determine the size of the tree minus the root node, and the position\n    //!         relative to the root node.\n    //!\n    //! @note  Before calling this method, the Tree should have been laid out, so the root\n    //!        node should be centred at (0, 0), and the Tree's growth direction should be set.\n    //!\n    //! @param[in] growthDir  The growth direction with respect to which the box should be computed.\n    //!\n    //! @return  A Node whose dimensions w x h gives the dimensions of the bounding box\n    //!          of the tree, minus the root node (but not minus the inter-rank space between\n    //!          the root node and the first rank), and whose position (x, y) gives the\n    //!          vector from the centre of the root node to the centre of this box.\n    Node_SP buildRootlessBox(CardinalDir growthDir) const;\n\n    //! @brief  Check how many nodes are in the tree.\n    size_t size(void) const { return m_nodes.size(); }\n\n    //! @brief  Add the nodes and edges of this Tree to a RoutingAdapter.\n    //!         This is useful either for routing just the Tree itself, or for adding the internal part\n    //!         of the tree (i.e. everything except the root node) to another graph where the tree is\n    //!         rooted.\n    //! @param[out] ra  The RoutingAdapter we are to augment.\n    //! @param[in] trt  Which type of routing you want.\n    //! @param[in] core  The core Graph in the case that this Tree has been peeled off a core, and is\n    //!                  to be reattched.\n    //! @note If a core Graph is given, then the root node of the tree will be omitted from the RoutingAdapter.\n    void addNetworkToRoutingAdapter(RoutingAdapter &ra, TreeRoutingType trt, Graph_SP core = nullptr);\n\n    //! @brief  Add the Nodes and Edges of this tree to a Graph.\n    //! @param[out] G  The Graph to which the Nodes and Edges are to be added.\n    //! @param[out] treeNodes  A place to record the tree nodes that are constructred.\n    //! @param[out] treeEdges  A place to record the tree edges that are constructred.\n    //! @note  Before adding each Node to the given Graph G we check whether G already has a Node that reports\n    //!        the same ID; if it does, we do not add the Node. This is useful so that root nodes are not\n    //!        overwritten when reattaching peeled trees to a core graph.\n    void addNetwork(Graph &G, NodesById &treeNodes, EdgesById &treeEdges);\n\n    //! @brief  Set constraints in a given Graph's SepMatrix in order to maintain the layout of the tree.\n    //! @param[out] G  The Graph to which the constraints are to be added.\n    //! @param[in] alignRoot  Say whether an alignment constraint should be set between the root node and\n    //!                       a centre node (if present) in the first rank. For example, this should be set\n    //!                       false in the case of a peeled tree being reattached with ordinal placement direction.\n    //! @note  The given Graph G must have Nodes matching the IDs of those in this Tree.\n    void addConstraints(Graph &G, bool alignRoot);\n\n    //! @brief  Add buffer nodes to help keep separation between the nodes of the tree and the remainder of\n    //!         the given graph G. Set constraints to keep the buffer nodes in place.\n    //! @param[out] G  The Graph to which the Nodes and constraints are to be added.\n    //! @param[out] bufferNodes  A place to record the buffer nodes that are constructred.\n    //! @note  This Tree's addNetworkAndConstraints should have been called first, for the same Graph G.\n    void addBufferNodesAndConstraints(Graph &G, NodesById &bufferNodes);\n\n    //! @brief  Add padding to nodes of another graph, corresponding to (same ID) non-root nodes in this tree.\n    void padCorrespNonRootNodes(Graph &H, double dw, double dh);\n\nprivate:\n\n    void clearRankBounds(void);\n    std::vector<double> getBounds(unsigned rank, double nodeSep) const;\n    Trees getCTrees(void) const;\n    std::string computeIsomString(void) const;\n\n    // the underlying Graph\n    Graph_SP m_graph;\n    // the root Node\n    Node_SP m_root;\n    // Depth of the tree (number of ranks)\n    unsigned m_depth;\n    // Breadth of the tree (width of widest rank)\n    unsigned m_breadth;\n    // Is the layout symmetric?\n    bool m_isSymmetric;\n    // All nodes lying at or below the root.\n    // This can differ from the set of nodes in the underlying Graph m_graph when we are working\n    // with C-trees, a special type of subtree used in the symmetric layout process.\n    NodesById m_nodes;\n    // IDs of those nodes that are leaves\n    std::set<unsigned> m_leafIDs;\n    // map rank numbers (0-based) to the Nodes belonging to that rank\n    std::vector<Nodes> m_nodesByRank;\n    // We also want the Nodes of each rank partitioned according to whether they are leaves.\n    std::vector<Nodes> m_leavesByRank;\n    std::vector<Nodes> m_nonleavesByRank;\n    // map Node IDs to the ranks to which those Nodes belong\n    std::map<id_type, unsigned> m_rankByNodeID;\n    // map ID of child to parent Node\n    NodesById m_parents;\n    // For layout, we keep track of a pair <lb, ub>, i.e.\n    // the lower and upper bounds on the lateral coordinates\n    // of the tree, for each rank (e.g. for NORTH growth direction the\n    // bounds are on x-coordinates).\n    std::vector<std::vector<double>> m_boundsByRank;\n    // We also keep global lower and upper bounds on rank coords.\n    double m_lb;\n    double m_ub;\n    /* \n     * If the boundary is tight then the bounds for each rank cover just the\n     * nodes on that rank plus half nodeSep on each end; else the bounds for\n     * every rank are equal to the tight bounds for the widest rank.\n     */\n    bool m_boundaryTight;\n    // Growth direction\n    CardinalDir m_growthDir;\n};\n\n} // namespace dialect\n\n#endif // DIALECT_TREES_H\n"
  },
  {
    "path": "cola/libdialect/util.h",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libdialect - A library for computing DiAlEcT layouts:\n *                 D = Decompose/Distribute\n *                 A = Arrange\n *                 E = Expand/Emend\n *                 T = Transform\n *\n * Copyright (C) 2018  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n * Author(s):   Steve Kieffer   <http://skieffer.info>\n*/\n\n#ifndef DIALECT_UTIL_H\n#define DIALECT_UTIL_H\n\n#include <cassert>\n#include <cmath>\n#include <string>\n#include <limits>\n#include <memory>\n#include <cstdio>\n#include <map>\n#include <vector>\n#include <utility>\n#include <algorithm>\n#include <functional>\n#include <math.h>\n\n#include \"libavoid/geomtypes.h\"\n\nnamespace dialect {\n\n//! @brief  Tolerant equality test for doubles. Generates principled value\n//!         for tolerance.\n//!\n//! @note  Thanks to: https://stackoverflow.com/a/4010279\ninline bool logically_equal(double a, double b, double error_factor=1.0)\n{\n    return a==b || std::abs(a-b) < std::abs(std::min(a,b))*std::numeric_limits<double>::epsilon()*error_factor;\n}\n\n//! @brief  Tolerant equality test for doubles. Uses arbitrary tolerance.\ninline bool approx_equal(double a, double b, double tol=0.000001)\n{\n    return a==b || std::abs(a-b) < tol;\n}\n\n//! @brief  String formatting\n//!\n//! @note  Thanks to: https://stackoverflow.com/a/26221725\ntemplate<typename ... Args>\nstd::string string_format( const std::string& format, Args ... args )\n{\n    size_t size = std::snprintf( nullptr, 0, format.c_str(), args ... ) + 1; // Extra space for '\\0'\n    std::unique_ptr<char[]> buf( new char[ size ] );\n    std::snprintf( buf.get(), size, format.c_str(), args ... );\n    return std::string( buf.get(), buf.get() + size - 1 ); // We don't want the '\\0' inside\n}\n\n//! Dense 2d array, with integer indices.\ntemplate<typename T>\nstruct Matrix2d {\n    int rows, cols;\n    std::vector<T> data;\n    Matrix2d() : rows(0), cols(0) {}\n    Matrix2d(int rows, int cols) : rows(rows), cols(cols), data(rows*cols)\n    { }\n\n    T operator()(int i, int j) const\n    {\n        assert(i < rows);\n        assert(j < cols);\n        return data[i*cols+j];\n    }\n    T& operator()(int i, int j)\n    {\n        assert(i < rows);\n        assert(j < cols);\n        return data[i*cols+j];\n    }\n\n    std::string toString() const {\n        std::string s = \"\";\n        s += \"\\n  \";\n        char buffer [21];\n        for (int j=0; j<cols; j++) {\n            sprintf(buffer,\" %2d\",j);\n            s += std::string(buffer);\n        }\n        for (int i=0; i<rows; i++) {\n            s += \"\\n\";\n            sprintf(buffer,\"%2d\",i);\n            s += std::string(buffer);\n            for (int j=0; j<cols; j++) {\n                sprintf(buffer,\" %2d\",data[i*cols+j]);\n                s += std::string(buffer);\n            }\n        }\n        return s;\n    }\n\n};\n\n//! Suppose you are working with some objects A1, A2, ... each of which\n//! has a point (x, y) associated with it.\n//! For each new object Ai, you want to check whether there is already another\n//! object Aj whose coordinates are almost the same, within a given threshold.\n//!\n//! A NearbyObjectFinder can be used for this problem.\n//! Construct it with the desired threshold.\n//! Before adding any new object to it, use its 'findObject' method to\n//! see whether it already has an object with both x and y within the\n//! threshold of the x and y for the new object.\n//! If not, then add the object using the 'addObject' method.\n//!\n//! Note: a NearbyObjectFinder looks for objects in the /open/ neighbourhood\n//! of a given point, with radius equal to the threshold.\ntemplate <typename T>\nclass NearbyObjectFinder {\npublic:\n\n    //! @brief  Construct a NearbyObjectFinder that looks for objects within a given threshold.\n    //!\n    //! @param[in] threshold  The radius of the /open/ neighbourhoods in which to search.\n    NearbyObjectFinder(double threshold) : m_thresh(threshold) {}\n\n    //! @brief  Add a new object, and say what its x,y-coords are\n    //!\n    //! @param[in] x  the x-coordinate of the object\n    //! @param[in] y  the y-coordinate of the object\n    //! @param[in] obj  the object\n    void addObject(double x, double y, T obj) {\n        // Round coords to integers in order to choose a bucket.\n        int x0 = (int) std::round(x),\n            y0 = (int) std::round(y);\n        // Store the point and the object in the bucket.\n        m_objects[x0][y0].push_back({Avoid::Point(x, y), obj});\n    }\n\n    //! @brief  Check to see if any object has been stored yet in the open neighbourhood centred\n    //!         at the given coordinates, and with radius equal to the threshold.\n    //!         If so, return it. Otherwise return a value-initialized object of type T.\n    //! @param[in] x  target x-coord\n    //! @param[in] y  target y-coord\n    //! @return  copy of object stored under nearby coords, or value-initialised object\n    //!          of type T if none present.\n    T findObject(double x, double y) {\n        // Consider the range of all integer coords under which a nearby\n        // point could have been stored, according to the threshold.\n        int u0 = (int) std::round(x - m_thresh),\n            u1 = (int) std::round(x + m_thresh),\n            v0 = (int) std::round(y - m_thresh),\n            v1 = (int) std::round(y + m_thresh);\n        // Iterate over the range, looking for a match, and returning first one found, if any.\n        for (int u = u0; u <= u1; ++u) {\n            for (int v = v0; v <= v1; ++v) {\n                for (auto pair : m_objects[u][v]) {\n                    Avoid::Point p = pair.first;\n                    if (fabs(x - p.x) < m_thresh && fabs(y - p.y) < m_thresh) return pair.second;\n                }\n            }\n        }\n        // If we didn't find any match, then we return a value-initialised object.\n        return T();\n    }\n\nprivate:\n    double m_thresh;\n    // Object storage format:\n    // We will be given an object of type T to store, under a point (x, y).\n    // We will round the coordinates to integers x0, y0, and store the object\n    // under a \"bucket\" for these integer coords. Thus under [x0][y0] we have a vector\n    // of pairs, giving the original point (x, y), and the object of type T.\n    // So it looks like:\n    //              (int, int) --> [ {(x,y), T}, {(x,y), T}, ... ]\n    std::map<int, std::map<int, std::vector<std::pair<Avoid::Point, T>>>> m_objects;\n};\n\n//! @brief Partition a vector of items according to a key value.\n//!\n//! @param[in] items  The vector of objects of type T that are to be partitioned.\n//! @param[in] key  A function returning a floating point key value on objects of type T.\n//! @param[in] tolerance  If positive, put items into the same part provided their key\n//!                       is within tolerance of a running average key value for that part.\n//!\n//! @note  As a by-product, each part will be sorted in ascending order according to the given key function.\n//!\n//! @return vector of vectors of objects of type T.\ntemplate <typename T>\nstd::vector<std::vector<T>> partition(std::vector<T> items, std::function<double(T)> key, double tolerance=0) {\n    // Prepare the return value\n    std::vector<std::vector<T>> parts;\n    // If there are no items, there is nothing to do.\n    if (items.size() == 0) return parts;\n    // Else sort by the given key.\n    std::sort(items.begin(), items.end(),\n        [&key](const T &a, const T &b) -> bool {\n            return key(a) < key(b);\n        }\n    );\n    // Initialise first part with first item.\n    auto it = items.cbegin();\n    T firstItem = *it;\n    std::vector<T> part{firstItem};\n    // Initialise the average key value for the part.\n    double avg = key(firstItem);\n    // Let n record how many keys are in the average.\n    size_t n = 1;\n    // Consider the remaining items.\n    for (auto jt = ++it; jt != items.cend(); ++jt) {\n        T item = *jt;\n        double k = key(item);\n        double dk = k - avg;\n        // NB: Using <= (not strict <) in this test is necessary so that the case\n        // where tolerance == 0 works!\n        if (fabs(dk) <= tolerance) {\n            // Difference of new key with current avg is within\n            // tolerance. Add item to current part.\n            part.push_back(item);\n            // Update n and avg. Note that when tolerance is 0, then k == avg, so avg stays constant.\n            avg = (n*avg + k)/(n+1);\n            ++n;\n        } else {\n            // Difference is too much. Record the current part\n            // and begin a new one for this item.\n            parts.push_back(part);\n            part = {item};\n            avg = k;\n            n = 1;\n        }\n    }\n    // At this point there is always a nonempty part that has not\n    // yet been appended to the part list.\n    parts.push_back(part);\n    return parts;\n}\n\n}  // namespace dialect\n\n#endif  // DIALECT_UTIL_H\n"
  },
  {
    "path": "cola/libproject/Makefile.am",
    "content": "#mosek_home=/home/dwyer/devel/mosek/5/tools/platform/linux32x86\n#INCLUDES = -I$(top_srcdir) -I$(mosek_home)/h\n\nlib_LTLIBRARIES = libproject.la\nlibproject_la_CPPFLAGS = -I$(top_srcdir) -I$(includedir)libproject -fPIC\nlibproject_la_LDFLAGS = -no-undefined\n\nlibproject_la_SOURCES = project.cpp \\\n\t\t\tutil.h \\\n\t\t\tutil.cpp\n\nlibprojectincludedir = $(includedir)/libproject\n\nlibprojectinclude_HEADERS = project.h \\\n\tutil.h\n\nSUBDIRS = . tests\n"
  },
  {
    "path": "cola/libproject/project.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libproject - Solves an instance of the Variable Placement with Separation\n *              Constraints problem, that is a projection onto separation \n *              constraints, whilst always maintaining feasibility.\n *\n * Copyright (C) 2005-2008  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n * Author(s):  Tim Dwyer\n *\n*/\n\n#include <algorithm>\n#include <numeric>\n#include <cmath>\n#include <cfloat>\n#include <cassert>\n#include <iterator>\n#include \"libproject/util.h\"\n#include \"libproject/project.h\"\n#include \"libproject/project_log.h\"\n\n#ifndef NDEBUG\nstatic double lastCost;\n/// invariant: blocks.size() = |vs| - merges + splits\nstatic int merges;\nstatic int splits;\n#define DEBUG_CODE(code) { code; }\n#define INIT_DEBUG(p) {      \\\n    lastCost = (p)->cost(); \\\n    merges = 0; \\\n    splits = 0; \\\n}\n#define ASSERT_COST_DECREASE(p) {    \\\n    double c = (p)->cost();          \\\n    /*printf(\"lastcost=%f, currcost=%f\\n\",lastCost,c);*/ \\\n    LIBPROJECT_ASSERT(c<=lastCost+epsilon);  \\\n    lastCost = c;                    \\\n}\n#define ASSERT_NONE_VIOLATED(p) { \\\n    for(Constraints::const_iterator i=(p)->cs.begin();i!=(p)->cs.end();i++) { \\\n        Constraint *c=*i;                                                     \\\n        double XIl = c->l->block->XI,                                         \\\n               XIr = c->r->block->XI,                                         \\\n               bl = c->l->b,                                                  \\\n               br = c->r->b;                                                  \\\n        double slack = XIr + br - XIl - bl - c->g;                            \\\n        LIBPROJECT_ASSERT(slack>=-epsilon);                                   \\\n    }                                                                         \\\n}\n#else // not NDEBUG\n#define ASSERT_COST_DECREASE(p)\n#define ASSERT_NONE_VIOLATED(p)\n#define INIT_DEBUG(p)\n#define DEBUG_CODE(code)\n#endif\nnamespace project {\n/**\n * Solve an instance of a variable placement with separation constraint (VPSC)\n * problem, that is a projection of variables onto separation constraints,\n * by a method that maintains feasibility at all times.\n * @return false if an unsatisfiable constraint is found.\n */\nbool solve(Variables& vs, Constraints& cs) {\n    Project p(vs,cs);\n    return p.solve();\n}\n\nunsigned Variable::idCtr=0;\n\ndouble Variable::relativeInitialPos() const { return block->XI + b; }\ndouble Variable::relativeDesiredPos() const { return block->X + b; }\n\nConstraint::Constraint(Variable *l, Variable *r, const double g)\n    : l(l), r(r), g(g)\n    , active(false) \n    , lm(0)\n{\n    l->out.push_back(this);\n    r->in.push_back(this);\n}\n\ndouble Constraint::initialSlack() const {\n    return r->x - l->x - g;\n}\n\nBlock::Block(Variable* v) \n    : w(v->w)\n    , X(v->d)\n    , XI(v->x)\n{\n    V.push_back(v);\n    v->b=0;\n    v->block=this;\n}\n\n/**\n * Compute the optimal position for this block based on the ideal positions of\n * its constituent variables.  \n * That is, for each variable in the block \\f$v_i\\in V\\f$ with ideal\n * positions \\f$d_i\\f$ and offset relative to the block reference position\n * \\f$b_i\\f$ the ideal position for the block is\n * \\f$\\frac{1}{|V|}\\sum_{v_i\\in V} d_i - b_i\\f$.\n */\ndouble Block::optimalPosition() const {\n    return sum_over(V.begin(),V.end(),0.0,mem_fun(&Variable::displacement)) / w;\n}\n\n/**\n * Used by computeLagrangians to recursively compute lagrangrians over the tree of\n * active constraints, from the partial derivatives of each variable.\n * @param v either the left or right side of last, used as the starting point of recursion\n * @param last don't backtrack over this constraint.\n */\ndouble compute_dfdv(Variable const* v, Constraint const* last) {\n    LIBPROJECT_ASSERT( last==nullptr || v==last->l || v==last->r );\n    double dfdv = v->dfdv();\n    for(Constraints::const_iterator i=v->out.begin();i!=v->out.end();++i) {\n        Constraint *c=*i;\n        if(c!=last && c->active) {\n            c->lm = compute_dfdv(c->r,c);\n            dfdv += c->lm;\n        }\n    }\n    for(Constraints::const_iterator i=v->in.begin();i!=v->in.end();++i) {\n        Constraint *c=*i;\n        if(c!=last && c->active) {\n            c->lm = -compute_dfdv(c->l,c);\n            dfdv -= c->lm;\n        }\n    }\n    return dfdv;\n}\n/**\n * Compute the lagrange multipliers for each active constraint in the block\n */\nvoid Block::computeLagrangians() {\n    for_each(C.begin(),C.end(),mem_fun(&Constraint::resetLM));\n    compute_dfdv(V[0],nullptr);\n}\n\nProject::\nProject(\n        vector<Variable*> const &vs, \n        vector<Constraint *> const &cs) \n    : vs(vs)\n    , cs(cs)\n    , inactive(cs.begin(),cs.end())\n    , externalAlphaCheck(nullptr)\n{ \n    FILELog::ReportingLevel() = logERROR;\n    //FILELog::ReportingLevel() = logDEBUG1;\n}\nProject::\n~Project() {\n    LIBPROJECT_ASSERT(blocks.size()==vs.size()-merges+splits);\n    for_each(blocks.begin(),blocks.end(),delete_object());\n}\n/** \n * attempts to solve a least-squares\n * problem subject to a set of separation constraints.\n */\nbool Project::\nsolve() {\n    initBlocksAndConstraints();\n    INIT_DEBUG(this);\n    bool optimal=true;\n    do {\n        makeOptimal();\n        for_each(vs.begin(),vs.end(),mem_fun(&Variable::updatePosition));\n        ASSERT_COST_DECREASE(this);\n        optimal=splitBlocks();\n    } while(!optimal);\n    return true;\n}\n/**\n * Put each variable in its own block\n */\nvoid Project::\ninitBlocksAndConstraints() {\n    for(Variables::const_iterator i=vs.begin();i!=vs.end();++i) {\n        Variable* v=*i;\n        Block *b=new Block(v);\n        b->listIndex=blocks.insert(blocks.end(),b);\n    }\n    for_each(cs.begin(),cs.end(),bind2nd(mem_fun(&Constraint::setActive),false));\n}\n\n/** \n * @return the maximum move we can make along the line from initial to desired positions\n * without violating this constraint\n */\ndouble Constraint::maxSafeAlpha() const {\n    // maxSafeAlpha should only ever be applied to inactive constraints\n    LIBPROJECT_ASSERT(!active);\n    double a;\n    if(feasibleAtDesired()) {\n        // if constraint is satisfied at the desired positions\n        // then we can move all the way\n        // note: this should also include inactive constraints within\n        // the same block, hence the assertion below that the two \n        // sides of _c be in a different block.\n        a = 1;\n    } else {\n        LIBPROJECT_ASSERT(l->block!=r->block);\n        double Al = l->relativeInitialPos(),\n               Ar = r->relativeInitialPos(),\n               Bl = l->block->toDesired(),\n               Br = r->block->toDesired();\n        double n = g + Al - Ar,\n               d = Br - Bl;\n        if(approx_equals(n,0)||approx_equals(d,0)) {\n            a = 0;\n        } else {\n            a = n / d;\n        }\n        LIBPROJECT_ASSERT(0<=a && a<=1);\n    }\n    FILE_LOG(logDEBUG1)<<\"C@\"<<this<<\" g=\"<<g<<\", alpha=\"<<a;\n    return a;\n}\n/**\n * Functor used for finding the largest move (alpha) we can make along the line from \n * current positions to desired positions without violating a constraint.\n */\nstruct MaxSafeMove : unary_function<Constraint*,void> {\n    MaxSafeMove(Constraint *&c, double &alpha) : c(c), alpha(alpha) { }\n    /**\n     * Compute the distance along the line from current to desired positions we would\n     * need to move to make a given constraint tight.  If that distance is smaller than\n     * the existing alpha then store it in alpha and note the constraint in c.\n     * @param _c constraint to check against alpha\n     */\n    void operator()(Constraint *_c) {\n        double a = _c->maxSafeAlpha();\n        if(a < alpha) {\n            c = _c;\n            alpha = a;\n        }\n    }\n    Constraint *&c; ///< the constraint with the smallest alpha to date\n    double &alpha; ///< the distance required to move c in order to make it tight\n};\n/**\n * Find the largest move (alpha) we can make along the line from \n * current positions to desired positions without violating a constraint.\n * If the function pointer externalAlphaCheck is set, then the function it points to\n * is called giving the application the chance to interrupt the solver early (for\n * example, to satisfy some other type of constraint and recompute the desired positions).\n * @param c will be set to the constraint which becomes active at alpha\n * @return the largest move (alpha) that we can make without violating a constraint\n */\ndouble Project::\nfindSafeMove(Constraint* &c) {\n    c=nullptr;\n    double alpha=1.0;\n    for_each(inactive.begin(),inactive.end(),MaxSafeMove(c,alpha));\n    if(externalAlphaCheck) {\n        (*externalAlphaCheck)(alpha);\n    }\n    return alpha;\n} \n/**\n * Repeatedly search along the line from current to desired positions for the\n * first constraint that would be violated if we moved any further, and make\n * that constraint active.  We finish when all blocks can be moved to their\n * desired positions without violating any further constraints.\n */\nvoid Project:: \nmakeOptimal() {\n    ASSERT_NONE_VIOLATED(this);\n    Constraint *c=nullptr;\n    double alpha;\n    while((alpha = findSafeMove(c)) < 1) {\n        makeActive(c,alpha);\n        inactive.erase(c);\n    }\n    for(Blocks::iterator i=blocks.begin(); i!=blocks.end(); ++i) {\n        Block* b=*i;\n        b->XI = b->X;\n    }\n    ASSERT_NONE_VIOLATED(this);\n}\n\nostream& operator <<(ostream &os, const Variable* &v) {\n    os << \"(\" << v->getPosition()\n       << \",\" << v->getDesiredPosition()\n       << \",\" << v->getWeight()\n       << \")\";\n    return os;\n}\nostream& operator <<(ostream &os, const Block &b) {\n    copy(b.V.begin(),b.V.end(),ostream_iterator<Variable*>(os,\",\"));\n    return os;\n}\n/**\n * Make the specified constraint active by setting to equality and merging the\n * two blocks that it spans into one new block (actually we merge the right\n * hand side into the left).\n * The desired position of the merged block is recomputed and a \"virtual\" initial position\n * for the new block is computed by projection along the line from the new desired\n * position and the point XI+alpha*(X-XI), where XI and X are the initial and desired\n * positions of the old left block.\n * @param c the constraint with the maximum alpha over which it is\n * safe (meaning does not violate any other constraints) to merge.\n * @param alpha the fraction of the distance from the current to the\n * optimal position by which to move XI (the \"initial\" position) of \n * each block\n */\nvoid Project:: \nmakeActive(Constraint *c, double alpha) {\n    Block *L = c->l->block;\n    Block *R = c->r->block;\n    double br = c->l->b - c->r->b + c->g;\n    double prevOptPos = L->X;\n    FILE_LOG(logDEBUG1)<<\"mergeblock:\";\n    FILE_LOG(logDEBUG1)<<*L;\n    FILE_LOG(logDEBUG1)<<\" plus:\";\n    FILE_LOG(logDEBUG1)<<*R;\n    for(Variables::iterator i=R->V.begin();i!=R->V.end();++i) {\n        Variable *v=*i;\n        v->b+=br;\n        v->block=L;\n    }\n    c->setActive(true);\n    L->V.insert(L->V.end(),R->V.begin(),R->V.end());\n    L->w+=R->w;\n    L->C.insert(L->C.end(),R->C.begin(),R->C.end());\n    L->C.push_back(c);\n    L->X = L->optimalPosition();\n    L->XI = (L->XI - alpha * (L->XI - prevOptPos + L->X))\n            / (1.0 - alpha);\n    FILE_LOG(logDEBUG1)<<\"  L': X=\"<<L->X<<\", XI=\"<<L->XI;\n    blocks.erase(R->listIndex);\n    delete R;\n    DEBUG_CODE(merges++);\n}\nbool cmpLagrangians(Constraint* a,Constraint* b) { return a->lm < b->lm; }\nostream& operator <<(ostream &os, const Constraints &cs) {\n    Constraints::const_iterator c=cs.begin();\n    os << (*(c++))->toString();\n    for(;c!=cs.end();++c) {\n        os<<\",\"<<(*c)->toString();\n    }\n    copy(cs.begin(),cs.end(),ostream_iterator<Constraint*>(os,\",\"));\n    return os;\n}\n/**\n * Check each block to see if splitting it allows the two new blocks to be moved\n * closer to their desired positions.  Returns true if no further splits are required\n * and therefore an optimal solution has been found.\n */\nbool Project:: \nsplitBlocks() {\n    bool optimal = true;\n    for(Blocks::iterator i = blocks.begin(); i!=blocks.end(); ++i) {\n        Block* b = *i;\n        b->XI = b->X;\n        if(b->C.empty()) continue;\n        b->computeLagrangians();\n\n        FILE_LOG(logDEBUG1)<<b->C;\n\n        Constraint *sc\n            = *min_element(b->C.begin(),b->C.end(),cmpLagrangians);\n\n        FILE_LOG(logDEBUG1)<<\"min: \"<<sc;\n\n        if(sc->wantsToMoveApart()) {\n            optimal = false;\n            i=makeInactive(sc);\n        }\n    }\n    return optimal;\n}\n/**\n * Populate a new block that is created as the result of a splitting an existing block\n * by traversing its tree of active constraints.\n * @param v the start point of the traversal, assumes v->block still points to the old block\n * @param last don't backtrack over this constraint\n */\nvoid Block::populateSplitBlock(Variable* v, Constraint const* last) {\n    LIBPROJECT_ASSERT( v==last->l || v==last->r );\n    LIBPROJECT_ASSERT( v->block!=this );\n    V.push_back(v);\n    v->block = this;\n    w+=v->w;\n    for(Constraints::const_iterator i=v->out.begin();i!=v->out.end();++i) {\n        Constraint *c=*i;\n        if(c!=last && c->active) {\n            C.push_back(c);\n            populateSplitBlock(c->r,c);\n        }\n    }\n    for(Constraints::const_iterator i=v->in.begin();i!=v->in.end();++i) {\n        Constraint *c=*i;\n        if(c!=last && c->active) {\n            C.push_back(c);\n            populateSplitBlock(c->l,c);\n        }\n    }\n}\n/**\n * create a block by traversing a tree of active constraints.\n * @param v the variable from which to start the traversal\n * @param c don't traverse back over this constraint (v should be\n * either the left- or right-hand side of c)\n */\nBlock::Block(Variable* v, Constraint* c) : w(0), XI(v->block->XI) {\n    LIBPROJECT_ASSERT(!c->active);\n    LIBPROJECT_ASSERT( v==c->l || v==c->r );\n    populateSplitBlock(v,c);\n    X=optimalPosition();\n}\n/**\n * Make a given active constraint inactive, therefore cutting the tree of active\n * constraints in the block to which it belongs, and creating two new blocks.\n * @param c the constraint to make inactive and hence split the block across\n * @return position of the second of the two new blocks in the list of blocks\n */\nBlocks::iterator Project:: \nmakeInactive(Constraint *c) {\n    FILE_LOG(logDEBUG) << \"Project::makeInactive(Constraint *c)\";\n    LIBPROJECT_ASSERT(c->isActive());\n    inactive.insert(c);\n    c->setActive(false);\n    Block* b=c->l->block;\n    Block* lb=new Block(c->l,c);\n    Block* rb=new Block(c->r,c);\n    LIBPROJECT_ASSERT(b->V.size()==lb->V.size()+rb->V.size());\n    LIBPROJECT_ASSERT(approx_equals(b->w,lb->w+rb->w));\n    LIBPROJECT_ASSERT(lb->X<=b->X+epsilon);\n    LIBPROJECT_ASSERT(rb->X>=b->X-epsilon);\n    lb->listIndex=blocks.insert(b->listIndex,lb);\n    rb->listIndex=blocks.insert(b->listIndex,rb);\n    blocks.erase(b->listIndex);\n    delete b;\n    DEBUG_CODE(splits++);\n    return rb->listIndex;\n}\n\n/**\n * computes cost of the goal function over all variables\n */\ndouble Project::cost() const {\n    return sum_over(vs.begin(),vs.end(),0.0,mem_fun(&Variable::cost));\n}\n\n} // namespace project\n"
  },
  {
    "path": "cola/libproject/project.h",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libproject - Solves an instance of the Variable Placement with Separation\n *              Constraints problem, that is a projection onto separation \n *              constraints, whilst always maintaining feasibility.\n *\n * Copyright (C) 2005-2008  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n * Author(s):  Tim Dwyer\n*/\n\n#ifndef _LIBPROJECT_FEASIBLE_PROJECT_ALGORITHM_H\n#define _LIBPROJECT_FEASIBLE_PROJECT_ALGORITHM_H\n\n#include <vector>\n#include <set>\n#include <list>\n#include <sstream>\n#include <cstdio>\n\n#include \"libproject/util.h\"\n\n/**\n * project namespace delineates classes belonging to the libproject solver library.\n */\nnamespace project {\n\nusing namespace std;\n\nclass Constraint;\ntypedef vector<Constraint*> Constraints;\nclass Block;\n\n/// type for Initial position for Variable ctor\nstruct Initial {\n    explicit Initial(double pos) : pos(pos) {}\n    double pos;\n};\n/// type for Desired position for Variable ctor\nstruct Desired {\n    explicit Desired(double pos) : pos(pos) {}\n    double pos;\n};\n/// type for Weight of Variable ctor\nstruct Weight {\n    explicit Weight(double w) : w(w) {}\n    double w;\n};\n/**\n * Data for a Variable in a projection problem.\n */\nclass Variable {\npublic:\n    Variable(const unsigned id, const Initial& i) \n        : id(id), x(i.pos), d(i.pos), w(1.0)\n        , block(nullptr), b(0), in(), out() {}\n    /**\n     * Arguments are passed in with explicit types to ensure they're in\n     * the right order.\n     * @param x the initial value of the variable\n     * @param d the desired value\n     * @param w weight, default is 1.0\n     */\n    Variable(const unsigned id, const Initial& i, const Desired& d,\n            const Weight& w=Weight(1.0)) \n        : id(id), x(i.pos),d(d.pos),w(w.w),block(nullptr),b(0)\n        , in(),out() {}\n    Variable(const Initial& i, const Desired& d,\n            const Weight& w=Weight(1.0)) \n        : id(idCtr++), x(i.pos),d(d.pos),w(w.w),block(nullptr),b(0)\n        , in(),out() {}\n    /** \n     * It may be necessary for the user to change the desired position after\n     * the Variable is created.\n     */\n    void setPosition(const Desired& des) { d=des.pos; }\n    double getDesiredPosition() const { return d; }\n    /**\n     * Similarly weight may need to be adjusted after initialisation\n     */\n    void setWeight(const Weight& weight) { w=weight.w; }\n    double getWeight() const { return w; }\n    /// get the current position (x)\n    double getPosition() const { return x; }\n    void setPosition(const Initial& p) { x=p.pos; }\n    /// compute derivative of goal function\n    double dfdv() const { return 2.0 * w * (x-d); }\n    /// weighted displacement from ideal position for block position\n    double displacement() const { return w * (d-b); }\n    /// compute cost of goal function at current position\n    double cost() const { double dx=x-d; return w * dx*dx; }\n    /// @return block->XI + b\n    double relativeInitialPos() const;\n    /// @return block->X + b\n    double relativeDesiredPos() const;\n    /// recompute the current position based on offset and block position\n    void updatePosition() { x = relativeDesiredPos(); }\n    /** move x by alpha along the line from the relative initial position\n     *  to the relative desired position\n     */\n    void moveBy(double alpha) { \n        double i=relativeInitialPos(), d=relativeDesiredPos();\n        x = i + alpha*(d-i);\n    }\n    void clearConstraints() {\n        in.clear();\n        out.clear();\n    }\n    const unsigned id;\nprivate:\n    double x; ///< current position\n    double d; ///< desired position\n    double w; ///< weight of variable's contribution to goal function\n    Block* block; ///< container block\n    double b; ///< offset from block reference variable\n    Constraints in, out; ///< defines constraint DAG\n    static unsigned idCtr;\nfriend class Constraint;\nfriend class Block;\nfriend class Project;\nfriend double compute_dfdv(Variable const*, Constraint const*);\n};\ntypedef vector<Variable*> Variables;\n/**\n * A separation constraint of the form \\f$x_l + g \\le x_r\\f$\n */\nclass Constraint {\npublic:\n    Constraint(Variable *l, Variable *r, const double g);\n    Variable *l;\n    Variable *r;\n    const double g;\n    double initialSlack() const;\n    /** \n     * @return true if the constraint can be satisfied at the relative desired\n     * positions for l and r.\n     */\n    bool feasibleAtDesired() const {\n        return l->relativeDesiredPos() + g <= r->relativeDesiredPos();\n    }\n    /** \n     * @return the maximum move we can make along the line from initial to\n     * desired positions without violating this constraint\n     */\n    double maxSafeAlpha() const;\n    void setActive(bool val) {\n        active=val;\n    }\n    bool isActive() const { return active; }\n    void resetLM() { lm = 0; }\n    bool wantsToMoveApart() const {\n        return lm<-epsilon;\n    }\n    string toString() {\n        std::stringstream s;\n        s<<\"C->g=\"<<g<<\", lm=\"<<lm;\n        return s.str();\n    }\nprivate:\n    bool active; ///< if set at equality\n    double lm; ///< lagrange multiplier\nfriend class Block;\nfriend double compute_dfdv(Variable const* v, Constraint const* last);\nfriend bool cmpLagrangians(Constraint* a,Constraint* b);\n};\n\ntypedef list<Block*> Blocks;\n/**\n * A block is a set of variables spanned by a tree of active constraints.\n */\nclass Block {\npublic:\n    /**\n     * create a block starting with a single variable.\n     * @param v the starting variable\n     */\n    Block(Variable* v);\n    /**\n     * create a block by traversing a tree of active constraints.\n     * @param v the variable from which to start the traversal\n     * @param c don't traverse back over this constraint (v should be\n     * either the left- or right-hand side of c)\n     */\n    Block(Variable* v, Constraint* c);\n    /**\n     * Compute the optimal position for this block based on the ideal positions of\n     * its constituent variables.  \n     */\n    double optimalPosition() const;\n    /**\n     * compute the lagrangian multipliers of all the active constraints in this block.\n     */\n    void computeLagrangians();\n    /// vector to desired position\n    double toDesired() const { return X - XI; }\n    Variables V; ///< member vars\n    double w; ///< total weight of constituent vars\n    Constraints C; ///< active constraints\n    double X; ///< position of reference var\n    double XI; ///< initial position\n    Blocks::iterator listIndex; ///< for easy removal from the blocks list\nprivate:\n    /**\n     * Populate a new block that is created as the result of a splitting an existing block\n     * by traversing its tree of active constraints.\n     * @param v the start point of the traversal, assumes v->block still points to the old block\n     * @param last don't backtrack over this constraint\n     */\n    void populateSplitBlock(Variable* v, Constraint const* last);\n};\n\n/**\n * Override this functor and pass in a pointer to the implementation using \n * Project::setExternalAlphaCheck in order to apply extra checks in each \n * invocation of findSafeMove.\n */\nstruct ExternalAlphaCheck {\n    virtual void operator()(double)=0;\n    virtual ~ExternalAlphaCheck() {};\n};\n\nstruct MaxSafeMove;\n\n/**\n * A solver that projects onto separation constraints, starting from a\n * feasible solution, and maintaining feasibility at all times.\n */\nclass Project : private Uncopyable {\npublic:\n    Project(\n            std::vector<Variable*> const &vs, \n            std::vector<Constraint *> const &cs);\n\n    ~Project();\n    /** \n     * attempts to solve a least-squares\n     * problem subject to a set of separation constraints.\n     * @return false if an unsatisfiable constraint is found\n     */\n    bool solve();\n    /**\n     * computes cost of the goal function over all variables\n     */\n    double cost() const;\n    /**\n     * Set a pointer to a function that checks to make sure a given alpha does\n     * not violate some external condition.\n     */\n    void setExternalAlphaCheck(ExternalAlphaCheck* check) {\n        externalAlphaCheck=check;\n    }\nprivate:\n    Variables const &vs;\n    Constraints const &cs;\n    Blocks blocks;\n    set<Constraint*> inactive;\n    /**\n     * Put each variable in its own block\n     */\n    void initBlocksAndConstraints();\n    /**\n     * Find the largest move (alpha) we can make along the line from \n     * current positions to desired positions without violating a constraint.\n     * If the function pointer externalAlphaCheck is set, then the function it points to\n     * is called after an alpha is found for the internal constraints.  This gives\n     * the application the chance to interrupt the solver early (for example,\n     * to satisfy some other type of constraint and recompute the desired\n     * positions).\n     * @param c will be set to the constraint which becomes active at alpha\n     * @return the largest move (alpha) that we can make without violating a constraint\n     */\n    double findSafeMove(Constraint* &c);\n    /**\n     * Repeatedly search along the line from current to desired positions for the\n     * first constraint that would be violated if we moved any further, and make\n     * that constraint active.  We finish when all blocks can be moved to their\n     * desired positions without violating any further constraints.\n     */\n    void makeOptimal();\n    /**\n     * Make the specified constraint active by setting to equality and merging the\n     * two blocks that it spans into one new block (actually we merge the right\n     * hand side into the left).\n     * The desired position of the merged block is recomputed and a \"virtual\" initial position\n     * for the new block is computed by projection along the line from the new desired\n     * position and the point XI+alpha*(X-XI), where XI and X are the initial and desired\n     * positions of the old left block.\n     * @param c the constraint with the maximum alpha over which it is\n     * safe (meaning does not violate any other constraints) to merge.\n     * @param alpha the fraction of the distance from the current to the\n     * optimal position by which to move XI (the \"initial\" position) of \n     * each block\n     */\n    void makeActive(Constraint *c, double alpha);\n    /**\n     * Make a given active constraint inactive, therefore cutting the tree of active\n     * constraints in the block to which it belongs, and creating two new blocks.\n     */\n    Blocks::iterator makeInactive(Constraint *c);\n    /**\n     * Check each block to see if splitting it allows the two new blocks to be moved\n     * closer to their desired positions.  Returns true if no further splits are required\n     * and therefore an optimal solution has been found.\n     */\n    bool splitBlocks(); \n    /// a callback function checked in findSafeMove\n    ExternalAlphaCheck* externalAlphaCheck;\n}; // class Project\n\n/**\n * Critical failure: either something went wrong with the solver or (more likely) there\n * was infeasible input.\n */\nstruct CriticalFailure {\n    CriticalFailure(const char *expr, \n            const char *file, \n            int line, \n            const char *function)\n        : expr(expr), file(file), line(line), function(function)\n    {}\n    void print() {\n        fprintf(stderr,\"ERROR: Critical sanity check failed in libproject!\\n\"\n                \"  expression: %s\\n  at line %d of %s\\n\"\n                \"  in: %s\\n\", expr, line, file, function);\n    }\n    const char *expr;\n    const char *file;\n    int line;\n    const char *function;\n};\n/**\n * Solve an instance of a variable placement with separation constraint (VPSC)\n * problem, that is a projection of variables onto separation constraints,\n * by a method that maintains feasibility at all times.\n * @return false if an unsatisfiable constraint is found.\n */\nbool solve(Variables& vs, Constraints& cs);\n\n} // namespace project\n#endif // _LIBPROJECT_FEASIBLE_PROJECT_ALGORITHM_H\n"
  },
  {
    "path": "cola/libproject/project_log.h",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libproject - Solves an instance of the Variable Placement with Separation\n *              Constraints problem, that is a projection onto separation\n *              constraints, whilst always maintaining feasibility.\n *\n * Copyright (C) 2005-2008  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n*/\n\n/**\nLogging code from DJJ article: http://www.ddj.com/cpp/201804215.\n\nTitle: Logging In C++\nAuthor: Petru Marginean\nKeywords: OCT07   C++\nDescription: Unpublished source code accompanying the article by Petru Marginean, in which he presents a C++ logging framework that is typesafe, thread-safe, and portable.\n */\n#ifndef __PROJECT_LOG_H__\n#define __PROJECT_LOG_H__\n\n#include <sstream>\n#include <string>\n#include <stdio.h>\n#include <iomanip>\n\nnamespace project {\ninline std::string NowTime();\n\nenum TLogLevel {logERROR, logWARNING, logINFO, logDEBUG, logDEBUG1, logDEBUG2, logDEBUG3, logDEBUG4};\n\ntemplate <typename T>\nclass Log\n{\npublic:\n    Log();\n    virtual ~Log();\n    std::ostringstream& Get(TLogLevel level = logINFO);\npublic:\n    static TLogLevel& ReportingLevel();\n    static std::string ToString(TLogLevel level);\n    static TLogLevel FromString(const std::string& level);\nprotected:\n    std::ostringstream os;\nprivate:\n    Log(const Log&);\n    Log& operator =(const Log&);\n};\n\ntemplate <typename T>\nLog<T>::Log()\n{\n}\n\ntemplate <typename T>\nstd::ostringstream& Log<T>::Get(TLogLevel level)\n{\n    os << \"- \" << NowTime();\n    os << \" \" << ToString(level) << \": \";\n    os << std::string(level > logDEBUG ? level - logDEBUG : 0, '\\t');\n    return os;\n}\n\ntemplate <typename T>\nLog<T>::~Log()\n{\n    os << std::endl;\n    T::Output(os.str());\n}\n\ntemplate <typename T>\nTLogLevel& Log<T>::ReportingLevel()\n{\n    static TLogLevel reportingLevel = logDEBUG4;\n    return reportingLevel;\n}\n\ntemplate <typename T>\nstd::string Log<T>::ToString(TLogLevel level)\n{\n\tstatic const char* const buffer[] = {\"ERROR\", \"WARNING\", \"INFO\", \"DEBUG\", \"DEBUG1\", \"DEBUG2\", \"DEBUG3\", \"DEBUG4\"};\n    return buffer[level];\n}\n\ntemplate <typename T>\nTLogLevel Log<T>::FromString(const std::string& level)\n{\n    if (level == \"DEBUG4\")\n        return logDEBUG4;\n    if (level == \"DEBUG3\")\n        return logDEBUG3;\n    if (level == \"DEBUG2\")\n        return logDEBUG2;\n    if (level == \"DEBUG1\")\n        return logDEBUG1;\n    if (level == \"DEBUG\")\n        return logDEBUG;\n    if (level == \"INFO\")\n        return logINFO;\n    if (level == \"WARNING\")\n        return logWARNING;\n    if (level == \"ERROR\")\n        return logERROR;\n    Log<T>().Get(logWARNING) << \"Unknown logging level '\" << level << \"'. Using INFO level as default.\";\n    return logINFO;\n}\n\nclass Output2FILE\n{\npublic:\n    static FILE*& Stream();\n    static void Output(const std::string& msg);\n};\n\ninline FILE*& Output2FILE::Stream()\n{\n    static FILE* pStream = stderr;\n    return pStream;\n}\n\ninline void Output2FILE::Output(const std::string& msg)\n{\n    FILE* pStream = Stream();\n    if (!pStream)\n        return;\n    fprintf(pStream, \"%s\", msg.c_str());\n    fflush(pStream);\n}\n\n#if defined(WIN32) || defined(_WIN32) || defined(__WIN32__)\n#   if defined (BUILDING_FILELOG_DLL)\n#       define FILELOG_DECLSPEC   __declspec (dllexport)\n#   elif defined (USING_FILELOG_DLL)\n#       define FILELOG_DECLSPEC   __declspec (dllimport)\n#   else\n#       define FILELOG_DECLSPEC\n#   endif // BUILDING_DBSIMPLE_DLL\n#else\n#   define FILELOG_DECLSPEC\n#endif // _WIN32\n\nclass FILELOG_DECLSPEC FILELog : public Log<Output2FILE> {};\n//typedef Log<Output2FILE> FILELog;\n\n#ifndef FILELOG_MAX_LEVEL\n#define FILELOG_MAX_LEVEL logDEBUG4\n#endif\n\n#define FILE_LOG(level) \\\n    if (level > FILELOG_MAX_LEVEL) ;\\\n    else if (level > FILELog::ReportingLevel() || !Output2FILE::Stream()) ; \\\n    else FILELog().Get(level)\n\n#if defined(WIN32) || defined(_WIN32) || defined(__WIN32__)\n\n#include <windows.h>\n\ninline std::string NowTime()\n{\n    const int MAX_LEN = 200;\n    char buffer[MAX_LEN];\n    if (GetTimeFormatA(LOCALE_USER_DEFAULT, 0, 0,\n            \"HH':'mm':'ss\", buffer, MAX_LEN) == 0)\n        return \"Error in NowTime()\";\n\n    static DWORD first = GetTickCount();\n    std::stringstream result;\n    result << buffer << \".\" << std::setfill('0') << std::setw(3) << ((long)(GetTickCount() - first) % 1000);\n    return result.str();\n}\n\n#else\n\n#include <sys/time.h>\n\ninline std::string NowTime()\n{\n    char buffer[11];\n    time_t t;\n    time(&t);\n    tm r = {0};\n    strftime(buffer, sizeof(buffer), \"%X\", localtime_r(&t, &r));\n    struct timeval tv;\n    gettimeofday(&tv, 0);\n    std::stringstream result;\n    result << buffer << \".\" << std::setfill('0') << std::setw(3) << ((long)tv.tv_usec / 1000);\n    return result.str();\n}\n\n#endif //WIN32\n} // namespace project\n\n#endif //__PROJECT_LOG_H__\n"
  },
  {
    "path": "cola/libproject/tests/Makefile.am",
    "content": "AM_CPPFLAGS = -I$(top_srcdir) -Iquadprogpp\nLIBPROJECT = $(top_builddir)/libproject/libproject.la\ncheck_PROGRAMS = treeqptest quadprogpptest simple static random\ntestutil_SOURCES = testutil.cpp quadprogpp/QuadProg++.cc\nsimple_SOURCES = simple.cpp\nsimple_LDADD = $(LIBPROJECT)\nstatic_SOURCES = static.cpp $(testutil_SOURCES)\nstatic_LDADD = $(LIBPROJECT)\nrandom_SOURCES = random.cpp $(testutil_SOURCES)\nrandom_LDADD = $(LIBPROJECT)\ntreeqptest_SOURCES = treeqptest.cpp treeqp.cpp $(testutil_SOURCES)\ntreeqptest_LDADD = $(LIBPROJECT)\nquadprogpptest_SOURCES = quadprogpp/main.cc\\\n\t\t\t quadprogpp/QuadProg++.h\\\n\t\t     \t quadprogpp/QuadProg++.cc\n\nTESTS = $(check_PROGRAMS)\n\n"
  },
  {
    "path": "cola/libproject/tests/quadprogpp/LICENSE.txt",
    "content": "\t\t    GNU GENERAL PUBLIC LICENSE\n\t\t       Version 2, June 1991\n\n Copyright (C) 1989, 1991 Free Software Foundation, Inc.,\n 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n Everyone is permitted to copy and distribute verbatim copies\n of this license document, but changing it is not allowed.\n\n\t\t\t    Preamble\n\n  The licenses for most software are designed to take away your\nfreedom to share and change it.  By contrast, the GNU General Public\nLicense is intended to guarantee your freedom to share and change free\nsoftware--to make sure the software is free for all its users.  This\nGeneral Public License applies to most of the Free Software\nFoundation's software and to any other program whose authors commit to\nusing it.  (Some other Free Software Foundation software is covered by\nthe GNU Lesser General Public License instead.)  You can apply it to\nyour programs, too.\n\n  When we speak of free software, we are referring to freedom, not\nprice.  Our General Public Licenses are designed to make sure that you\nhave the freedom to distribute copies of free software (and charge for\nthis service if you wish), that you receive source code or can get it\nif you want it, that you can change the software or use pieces of it\nin new free programs; and that you know you can do these things.\n\n  To protect your rights, we need to make restrictions that forbid\nanyone to deny you these rights or to ask you to surrender the rights.\nThese restrictions translate to certain responsibilities for you if you\ndistribute copies of the software, or if you modify it.\n\n  For example, if you distribute copies of such a program, whether\ngratis or for a fee, you must give the recipients all the rights that\nyou have.  You must make sure that they, too, receive or can get the\nsource code.  And you must show them these terms so they know their\nrights.\n\n  We protect your rights with two steps: (1) copyright the software, and\n(2) offer you this license which gives you legal permission to copy,\ndistribute and/or modify the software.\n\n  Also, for each author's protection and ours, we want to make certain\nthat everyone understands that there is no warranty for this free\nsoftware.  If the software is modified by someone else and passed on, we\nwant its recipients to know that what they have is not the original, so\nthat any problems introduced by others will not reflect on the original\nauthors' reputations.\n\n  Finally, any free program is threatened constantly by software\npatents.  We wish to avoid the danger that redistributors of a free\nprogram will individually obtain patent licenses, in effect making the\nprogram proprietary.  To prevent this, we have made it clear that any\npatent must be licensed for everyone's free use or not licensed at all.\n\n  The precise terms and conditions for copying, distribution and\nmodification follow.\n\n\t\t    GNU GENERAL PUBLIC LICENSE\n   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION\n\n  0. This License applies to any program or other work which contains\na notice placed by the copyright holder saying it may be distributed\nunder the terms of this General Public License.  The \"Program\", below,\nrefers to any such program or work, and a \"work based on the Program\"\nmeans either the Program or any derivative work under copyright law:\nthat is to say, a work containing the Program or a portion of it,\neither verbatim or with modifications and/or translated into another\nlanguage.  (Hereinafter, translation is included without limitation in\nthe term \"modification\".)  Each licensee is addressed as \"you\".\n\nActivities other than copying, distribution and modification are not\ncovered by this License; they are outside its scope.  The act of\nrunning the Program is not restricted, and the output from the Program\nis covered only if its contents constitute a work based on the\nProgram (independent of having been made by running the Program).\nWhether that is true depends on what the Program does.\n\n  1. You may copy and distribute verbatim copies of the Program's\nsource code as you receive it, in any medium, provided that you\nconspicuously and appropriately publish on each copy an appropriate\ncopyright notice and disclaimer of warranty; keep intact all the\nnotices that refer to this License and to the absence of any warranty;\nand give any other recipients of the Program a copy of this License\nalong with the Program.\n\nYou may charge a fee for the physical act of transferring a copy, and\nyou may at your option offer warranty protection in exchange for a fee.\n\n  2. You may modify your copy or copies of the Program or any portion\nof it, thus forming a work based on the Program, and copy and\ndistribute such modifications or work under the terms of Section 1\nabove, provided that you also meet all of these conditions:\n\n    a) You must cause the modified files to carry prominent notices\n    stating that you changed the files and the date of any change.\n\n    b) You must cause any work that you distribute or publish, that in\n    whole or in part contains or is derived from the Program or any\n    part thereof, to be licensed as a whole at no charge to all third\n    parties under the terms of this License.\n\n    c) If the modified program normally reads commands interactively\n    when run, you must cause it, when started running for such\n    interactive use in the most ordinary way, to print or display an\n    announcement including an appropriate copyright notice and a\n    notice that there is no warranty (or else, saying that you provide\n    a warranty) and that users may redistribute the program under\n    these conditions, and telling the user how to view a copy of this\n    License.  (Exception: if the Program itself is interactive but\n    does not normally print such an announcement, your work based on\n    the Program is not required to print an announcement.)\n\nThese requirements apply to the modified work as a whole.  If\nidentifiable sections of that work are not derived from the Program,\nand can be reasonably considered independent and separate works in\nthemselves, then this License, and its terms, do not apply to those\nsections when you distribute them as separate works.  But when you\ndistribute the same sections as part of a whole which is a work based\non the Program, the distribution of the whole must be on the terms of\nthis License, whose permissions for other licensees extend to the\nentire whole, and thus to each and every part regardless of who wrote it.\n\nThus, it is not the intent of this section to claim rights or contest\nyour rights to work written entirely by you; rather, the intent is to\nexercise the right to control the distribution of derivative or\ncollective works based on the Program.\n\nIn addition, mere aggregation of another work not based on the Program\nwith the Program (or with a work based on the Program) on a volume of\na storage or distribution medium does not bring the other work under\nthe scope of this License.\n\n  3. You may copy and distribute the Program (or a work based on it,\nunder Section 2) in object code or executable form under the terms of\nSections 1 and 2 above provided that you also do one of the following:\n\n    a) Accompany it with the complete corresponding machine-readable\n    source code, which must be distributed under the terms of Sections\n    1 and 2 above on a medium customarily used for software interchange; or,\n\n    b) Accompany it with a written offer, valid for at least three\n    years, to give any third party, for a charge no more than your\n    cost of physically performing source distribution, a complete\n    machine-readable copy of the corresponding source code, to be\n    distributed under the terms of Sections 1 and 2 above on a medium\n    customarily used for software interchange; or,\n\n    c) Accompany it with the information you received as to the offer\n    to distribute corresponding source code.  (This alternative is\n    allowed only for noncommercial distribution and only if you\n    received the program in object code or executable form with such\n    an offer, in accord with Subsection b above.)\n\nThe source code for a work means the preferred form of the work for\nmaking modifications to it.  For an executable work, complete source\ncode means all the source code for all modules it contains, plus any\nassociated interface definition files, plus the scripts used to\ncontrol compilation and installation of the executable.  However, as a\nspecial exception, the source code distributed need not include\nanything that is normally distributed (in either source or binary\nform) with the major components (compiler, kernel, and so on) of the\noperating system on which the executable runs, unless that component\nitself accompanies the executable.\n\nIf distribution of executable or object code is made by offering\naccess to copy from a designated place, then offering equivalent\naccess to copy the source code from the same place counts as\ndistribution of the source code, even though third parties are not\ncompelled to copy the source along with the object code.\n\n  4. You may not copy, modify, sublicense, or distribute the Program\nexcept as expressly provided under this License.  Any attempt\notherwise to copy, modify, sublicense or distribute the Program is\nvoid, and will automatically terminate your rights under this License.\nHowever, parties who have received copies, or rights, from you under\nthis License will not have their licenses terminated so long as such\nparties remain in full compliance.\n\n  5. You are not required to accept this License, since you have not\nsigned it.  However, nothing else grants you permission to modify or\ndistribute the Program or its derivative works.  These actions are\nprohibited by law if you do not accept this License.  Therefore, by\nmodifying or distributing the Program (or any work based on the\nProgram), you indicate your acceptance of this License to do so, and\nall its terms and conditions for copying, distributing or modifying\nthe Program or works based on it.\n\n  6. Each time you redistribute the Program (or any work based on the\nProgram), the recipient automatically receives a license from the\noriginal licensor to copy, distribute or modify the Program subject to\nthese terms and conditions.  You may not impose any further\nrestrictions on the recipients' exercise of the rights granted herein.\nYou are not responsible for enforcing compliance by third parties to\nthis License.\n\n  7. If, as a consequence of a court judgment or allegation of patent\ninfringement or for any other reason (not limited to patent issues),\nconditions are imposed on you (whether by court order, agreement or\notherwise) that contradict the conditions of this License, they do not\nexcuse you from the conditions of this License.  If you cannot\ndistribute so as to satisfy simultaneously your obligations under this\nLicense and any other pertinent obligations, then as a consequence you\nmay not distribute the Program at all.  For example, if a patent\nlicense would not permit royalty-free redistribution of the Program by\nall those who receive copies directly or indirectly through you, then\nthe only way you could satisfy both it and this License would be to\nrefrain entirely from distribution of the Program.\n\nIf any portion of this section is held invalid or unenforceable under\nany particular circumstance, the balance of the section is intended to\napply and the section as a whole is intended to apply in other\ncircumstances.\n\nIt is not the purpose of this section to induce you to infringe any\npatents or other property right claims or to contest validity of any\nsuch claims; this section has the sole purpose of protecting the\nintegrity of the free software distribution system, which is\nimplemented by public license practices.  Many people have made\ngenerous contributions to the wide range of software distributed\nthrough that system in reliance on consistent application of that\nsystem; it is up to the author/donor to decide if he or she is willing\nto distribute software through any other system and a licensee cannot\nimpose that choice.\n\nThis section is intended to make thoroughly clear what is believed to\nbe a consequence of the rest of this License.\n\n  8. If the distribution and/or use of the Program is restricted in\ncertain countries either by patents or by copyrighted interfaces, the\noriginal copyright holder who places the Program under this License\nmay add an explicit geographical distribution limitation excluding\nthose countries, so that distribution is permitted only in or among\ncountries not thus excluded.  In such case, this License incorporates\nthe limitation as if written in the body of this License.\n\n  9. The Free Software Foundation may publish revised and/or new versions\nof the General Public License from time to time.  Such new versions will\nbe similar in spirit to the present version, but may differ in detail to\naddress new problems or concerns.\n\nEach version is given a distinguishing version number.  If the Program\nspecifies a version number of this License which applies to it and \"any\nlater version\", you have the option of following the terms and conditions\neither of that version or of any later version published by the Free\nSoftware Foundation.  If the Program does not specify a version number of\nthis License, you may choose any version ever published by the Free Software\nFoundation.\n\n  10. If you wish to incorporate parts of the Program into other free\nprograms whose distribution conditions are different, write to the author\nto ask for permission.  For software which is copyrighted by the Free\nSoftware Foundation, write to the Free Software Foundation; we sometimes\nmake exceptions for this.  Our decision will be guided by the two goals\nof preserving the free status of all derivatives of our free software and\nof promoting the sharing and reuse of software generally.\n\n\t\t\t    NO WARRANTY\n\n  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY\nFOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN\nOTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES\nPROVIDE THE PROGRAM \"AS IS\" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED\nOR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\nMERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS\nTO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE\nPROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,\nREPAIR OR CORRECTION.\n\n  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING\nWILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR\nREDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,\nINCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING\nOUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED\nTO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY\nYOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER\nPROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE\nPOSSIBILITY OF SUCH DAMAGES.\n\n\t\t     END OF TERMS AND CONDITIONS\n\n\t    How to Apply These Terms to Your New Programs\n\n  If you develop a new program, and you want it to be of the greatest\npossible use to the public, the best way to achieve this is to make it\nfree software which everyone can redistribute and change under these terms.\n\n  To do so, attach the following notices to the program.  It is safest\nto attach them to the start of each source file to most effectively\nconvey the exclusion of warranty; and each file should have at least\nthe \"copyright\" line and a pointer to where the full notice is found.\n\n    <one line to give the program's name and a brief idea of what it does.>\n    Copyright (C) <year>  <name of author>\n\n    This program is free software; you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation; either version 2 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License along\n    with this program; if not, write to the Free Software Foundation, Inc.,\n    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.\n\nAlso add information on how to contact you by electronic and paper mail.\n\nIf the program is interactive, make it output a short notice like this\nwhen it starts in an interactive mode:\n\n    Gnomovision version 69, Copyright (C) year name of author\n    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.\n    This is free software, and you are welcome to redistribute it\n    under certain conditions; type `show c' for details.\n\nThe hypothetical commands `show w' and `show c' should show the appropriate\nparts of the General Public License.  Of course, the commands you use may\nbe called something other than `show w' and `show c'; they could even be\nmouse-clicks or menu items--whatever suits your program.\n\nYou should also get your employer (if you work as a programmer) or your\nschool, if any, to sign a \"copyright disclaimer\" for the program, if\nnecessary.  Here is a sample; alter the names:\n\n  Yoyodyne, Inc., hereby disclaims all copyright interest in the program\n  `Gnomovision' (which makes passes at compilers) written by James Hacker.\n\n  <signature of Ty Coon>, 1 April 1989\n  Ty Coon, President of Vice\n\nThis General Public License does not permit incorporating your program into\nproprietary programs.  If your program is a subroutine library, you may\nconsider it more useful to permit linking proprietary applications with the\nlibrary.  If this is what you want to do, use the GNU Lesser General\nPublic License instead of this License.\n"
  },
  {
    "path": "cola/libproject/tests/quadprogpp/QuadProg++.cc",
    "content": "/* \n File QuadProg++.cc\n \n Author: Luca Di Gaspero\n DIEGM - University of Udine, Italy\n l.digaspero@uniud.it\n http://www.diegm.uniud.it/digaspero/\n \n LICENSE\n \n Copyright 2006 Luca Di Gaspero\n \n This file is part of QuadProg++.\n \n QuadProg++ is free software; you can redistribute it and/or modify\n it under the terms of the GNU General Public License as published by\n the Free Software Foundation; either version 2 of the License, or\n (at your option) any later version.\n \n QuadProg++ is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n GNU General Public License for more details.\n \n You should have received a copy of the GNU General Public License\n along with QuadProg++; if not, write to the Free Software\n Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA\n \nNOTE: \nModified to dynamically allocate storage for the 2D arrays --- removing\nthe previously hard-coded limit on problem size.\nTim Dwyer 24/11/07\n\n*/\n\n#include <iostream>\n#include <algorithm>\n#include <cmath>\n#include <cassert>\n#include <limits>\n#include <stdexcept>\n#include <sstream>\n#include \"QuadProg++.h\"\n\n\n// Utility functions for updating some data needed by the solution method \nvoid compute_d(double d[], double *J[], double np[], int n);\nvoid update_z(double z[], double *J[], double d[], int n, int iq);\nvoid update_r(double *R[], double r[], double d[], int n, int iq);\nbool add_constraint(double *R[], double *J[], double d[], int n, int& iq, double& rnorm);\nvoid delete_constraint(double *R[], double *J[], int A[], double u[], int n, int p, int& iq, int l);\n\n// Utility functions for computing the Cholesky decomposition and solving\n// linear systems\nvoid cholesky_decomposition(double *A[], int n);\nvoid cholesky_solve(double *L[], double x[], double b[], int n);\nvoid forward_elimination(double *L[], double y[], double b[], int n);\nvoid backward_elimination(double *U[], double x[], double y[], int n);\n\n// Utility functions for computing the scalar product and the euclidean \n// distance between two numbers\ndouble scalar_product(double x[], double y[], int n);\ndouble distance(double a, double b);\n\n// Utility functions for printing vectors and matrices\nvoid print_matrix(char* name, double *A[], int n);\nvoid print_rmatrix(char* name, double *A[], int n, int m);\nvoid print_vector(char* name, double v[], int n);\nvoid print_ivector(char* name, int v[], int n);\n\n\n\n// The Solving function, implementing the Goldfarb-Idnani method\ndouble solve_quadprog(double *G[], double g0[], int n, \n                      double *CE[], double ce0[], int p, \n                      double *CI[], double ci0[], int m,\n                      double x[])\n{\n  int i, j, k, l; /* indices */\n  int ip, me, mi; \n  double **R,*s,*z,*r,*d,**J,*np,*u,*x_old,*u_old;\n  double f_value, psi, c1, c2, sum, ss, R_norm;\n  const double inf = std::numeric_limits<double>::infinity();\n  double t, t1, t2; /* t is the step lenght, which is the minimum of the partial step length t1 \n    * and the full step length t2 */\n  int *A, *A_old, *iai, q;\n  int iq, iter = 0;\n  bool *iaexcl;\n  MatrixStorage _R(R,n,n), _J(J,n,n);\n  VectorStorage<double> _s(s,m+p), _z(z,n), _r(r,m+p), _d(d,n), _np(np,n), _u(u,m+p), _x_old(x_old,n), _u_old(u_old,m+p);\n  VectorStorage<int> _A(A,m+p), _A_old(A_old,m+p), _iai(iai,m+p);\n  VectorStorage<bool> _iaexcl(iaexcl,m+p);\n  \n  me = p; /* number of equality constraints */\n  mi = m; /* number of inequality constraints */\n  q = 0;  /* size of the active set A (containing the indices of the active constraints) */\n#ifdef TRACE_SOLVER\n  print_matrix(\"G\", G, n);\n  print_vector(\"g0\", g0, n);\n  print_rmatrix(\"CE\", CE, n, p);\n  print_vector(\"ce0\", ce0, p);\n  print_rmatrix(\"CI\", CI,  n, m);\n  print_vector(\"ci0\", ci0, m);\n#endif  \n  \n  /*\n   * Preprocessing phase\n   */\n  \n  /* compute the trace of the original matrix G */\n  c1 = 0.0;\n  for (i = 0; i < n; i++)\n  {\n    c1 += G[i][i];\n  }\n  /* decompose the matrix G in the form L^T L */\n  cholesky_decomposition(G, n);\n#ifdef TRACE_SOLVER\n  print_matrix(\"G\", G, n);\n#endif\n  \n  /* initialize the matrix R */\n  for (i = 0; i < n; i++)\n  {\n    d[i] = 0.0;\n    for (j = 0; j < n; j++)\n      R[i][j] = 0.0;\n  }\n  R_norm = 1.0; /* this variable will hold the norm of the matrix R */\n  \n  /* compute the inverse of the factorized matrix G^-1, this is the initial value for H */\n  c2 = 0.0;\n  for (i = 0; i < n; i++) \n  {\n    d[i] = 1.0;\n    forward_elimination(G, z, d, n);\n    for (j = 0; j < n; j++)\n      J[i][j] = z[j];\n    c2 += z[i];\n    d[i] = 0.0;\n  }\n#ifdef TRACE_SOLVER\n print_matrix(\"J\", J, n);\n#endif\n  \n  /* c1 * c2 is an estimate for cond(G) */\n  \n  /* \n   * Find the unconstrained minimizer of the quadratic form 0.5 * x G x + g0 x \n   * this is a feasible point in the dual space\n   * x = G^-1 * g0\n   */\n  cholesky_solve(G, x, g0, n);\n  for (i = 0; i < n; i++)\n    x[i] = -x[i];\n  /* and compute the current solution value */ \n  f_value = 0.5 * scalar_product(g0, x, n);\n#ifdef TRACE_SOLVER\n  std::cerr << \"Unconstrained solution: \" << f_value << std::endl;\n  print_vector(\"x\", x, n);\n#endif\n  \n  /* Add equality constraints to the working set A */\n  iq = 0;\n  for (i = 0; i < me; i++)\n  {\n    for (j = 0; j < n; j++)\n      np[j] = CE[j][i];\n    compute_d(d, J, np, n);\n    update_z(z, J, d, n, iq);\n    update_r(R, r, d, n, iq);\n#ifdef TRACE_SOLVER\n    print_matrix(\"R\", R, iq);\n    print_vector(\"z\", z, n);\n    print_vector(\"r\", r, iq);\n    print_vector(\"d\", d, n);\n#endif\n    \n    /* compute full step length t2: i.e., the minimum step in primal space s.t. the contraint \n      becomes feasible */\n    t2 = 0.0;\n    if (fabs(scalar_product(z, z, n)) > std::numeric_limits<double>::epsilon()) // i.e. z != 0\n      t2 = (-scalar_product(np, x, n) - ce0[i]) / scalar_product(z, np, n);\n    \n    /* set x = x + t2 * z */\n    for (k = 0; k < n; k++)\n      x[k] += t2 * z[k];\n      \n    /* set u = u+ */\n    u[iq] = t2;\n    for (k = 0; k < iq; k++)\n      u[k] -= t2 * r[k];\n    \n    /* compute the new solution value */\n    f_value += 0.5 * (t2 * t2) * scalar_product(z, np, n);\n    A[i] = -i - 1;\n    \n    if (!add_constraint(R, J, d, n, iq, R_norm))\n    {\n      // FIXME: it should raise an error\n      // Equality constraints are linearly dependent\n      return f_value;\n    }\n  }\n  \n  /* set iai = K \\ A */\n  for (i = 0; i < mi; i++)\n    iai[i] = i;\n  \nl1: iter++;\n#ifdef TRACE_SOLVER\n  print_vector(\"x\", x, n);\n#endif\n  /* step 1: choose a violated constraint */\n  for (i = me; i < iq; i++)\n  {\n    ip = A[i];\n    iai[ip] = -1;\n  }\n  \n  /* compute s[x] = ci^T * x + ci0 for all elements of K \\ A */\n  ss = 0.0;\n  psi = 0.0; /* this value will contain the sum of all infeasibilities */\n  ip = 0; /* ip will be the index of the chosen violated constraint */\n  for (i = 0; i < mi; i++)\n  {\n    iaexcl[i] = true;\n    sum = 0.0;\n    for (j = 0; j < n; j++)\n      sum += CI[j][i] * x[j];\n    sum += ci0[i];\n    s[i] = sum;\n    psi += std::min(0.0, sum);\n  }\n#ifdef TRACE_SOLVER\n  print_vector(\"s\", s, mi);\n#endif\n\n    \n  if (fabs(psi) <= mi * std::numeric_limits<double>::epsilon() * c1 * c2* 100.0)\n  {\n    /* numerically there are not infeasibilities anymore */\n    q = iq;\n    return f_value;\n  }\n    \n  /* save old values for u and A */\n  for (i = 0; i < iq; i++)\n  {\n    u_old[i] = u[i];\n    A_old[i] = A[i];\n  }\n   /* and for x */\n  for (i = 0; i < n; i++)\n    x_old[i] = x[i];\n    \nl2: /* Step 2: check for feasibility and determine a new S-pair */\n  for (i = 0; i < mi; i++)\n  {\n    if (s[i] < ss && iai[i] != -1 && iaexcl[i])\n    {\n      ss = s[i];\n      ip = i;\n    }\n  }\n  if (ss >= 0.0)\n  {\n    q = iq;\n    return f_value;\n  }\n    \n  /* set np = n[ip] */\n  for (i = 0; i < n; i++)\n    np[i] = CI[i][ip];\n  /* set u = [u 0]^T */\n  u[iq] = 0.0;\n  /* add ip to the active set A */\n  A[iq] = ip;\n\n#ifdef TRACE_SOLVER\n  std::cerr << \"Trying with constraint \" << ip << std::endl;\n  print_vector(\"np\", np, n);\n#endif\n    \nl2a:/* Step 2a: determine step direction */\n  /* compute z = H np: the step direction in the primal space (through J, see the paper) */\n  compute_d(d, J, np, n);\n  update_z(z, J, d, n, iq);\n  /* compute N* np (if q > 0): the negative of the step direction in the dual space */\n  update_r(R, r, d, n, iq);\n#ifdef TRACE_SOLVER\n  std::cerr << \"Step direction z\" << std::endl;\n    print_vector(\"z\", z, n);\n    print_vector(\"r\", r, iq + 1);\n    print_vector(\"u\", u, iq + 1);\n    print_vector(\"d\", d, n);\n    print_ivector(\"A\", A, iq + 1);\n#endif\n    \n  /* Step 2b: compute step length */\n  l = 0;\n  /* Compute t1: partial step length (maximum step in dual space without violating dual feasibility */\n  t1 = inf; /* +inf */\n  /* find the index l s.t. it reaches the minimum of u+[x] / r */\n  for (k = me; k < iq; k++)\n  {\n    if (r[k] > 0.0)\n    {\n      if (u[k] / r[k] < t1)\n      {\n        t1 = u[k] / r[k];\n        l = A[k];\n       }\n     }\n  }\n  /* Compute t2: full step length (minimum step in primal space such that the constraint ip becomes feasible */\n  if (fabs(scalar_product(z, z, n))  > std::numeric_limits<double>::epsilon()) // i.e. z != 0\n    t2 = -s[ip] / scalar_product(z, np, n);\n  else\n    t2 = inf; /* +inf */\n  \n  /* the step is chosen as the minimum of t1 and t2 */\n  t = std::min(t1, t2);\n#ifdef TRACE_SOLVER\n  std::cerr << \"Step sizes: \" << t << \" (t1 = \" << t1 << \", t2 = \" << t2 << \") \";\n#endif\n  \n  /* Step 2c: determine new S-pair and take step: */\n  \n  /* case (i): no step in primal or dual space */\n  if (t >= inf)\n  {\n    /* QPP is infeasible */\n    // FIXME: unbounded to raise\n    q = iq;\n    return inf;\n  }\n  /* case (ii): step in dual space */\n  if (t2 >= inf)\n  {\n    /* set u = u +  t * [-r 1] and drop constraint l from the active set A */\n    for (k = 0; k < iq; k++)\n      u[k] -= t * r[k];\n    u[iq] += t;\n    iai[l] = l;\n    delete_constraint(R, J, A, u, n, p, iq, l);\n#ifdef TRACE_SOLVER\n    std::cerr << \" in dual space: \" \n      << f_value << std::endl;\n    print_vector(\"x\", x, n);\n    print_vector(\"z\", z, n);\n    print_ivector(\"A\", A, iq + 1);\n#endif\n    goto l2a;\n  }\n  \n  /* case (iii): step in primal and dual space */\n  \n  /* set x = x + t * z */\n  for (k = 0; k < n; k++)\n    x[k] += t * z[k];\n  /* update the solution value */\n  f_value += t * scalar_product(z, np, n) * (0.5 * t + u[iq]);\n  /* u = u + t * [-r 1] */\n  for (k = 0; k < iq; k++)\n    u[k] -= t * r[k];\n  u[iq] += t;\n#ifdef TRACE_SOLVER\n  std::cerr << \" in both spaces: \" \n    << f_value << std::endl;\n  print_vector(\"x\", x, n);\n  print_vector(\"u\", u, iq + 1);\n  print_vector(\"r\", r, iq + 1);\n  print_ivector(\"A\", A, iq + 1);\n#endif\n  \n  if (t == t2)\n  {\n#ifdef TRACE_SOLVER\n    std::cerr << \"Full step has taken \" << t << std::endl;\n    print_vector(\"x\", x, n);\n#endif\n    /* full step has taken */\n    /* add constraint ip to the active set*/\n    if (!add_constraint(R, J, d, n, iq, R_norm))\n    {\n      iaexcl[ip] = false;\n      delete_constraint(R, J, A, u, n, p, iq, ip);\n#ifdef TRACE_SOLVER\n      print_matrix(\"R\", R, n);\n      print_ivector(\"A\", A, iq);\n#endif\n      for (i = 0; i < m; i++)\n        iai[i] = i;\n      for (i = 0; i < iq; i++)\n      {\n        A[i] = A_old[i];\n        iai[A[i]] = -1;\n        u[i] = u_old[i];\n      }\n      for (i = 0; i < n; i++)\n        x[i] = x_old[i];\n      goto l2; /* go to step 2 */\n    }    \n    else\n      iai[ip] = -1;\n#ifdef TRACE_SOLVER\n    print_matrix(\"R\", R, n);\n    print_ivector(\"A\", A, iq);\n#endif\n    goto l1;\n  }\n  \n  /* a patial step has taken */\n#ifdef TRACE_SOLVER\n  std::cerr << \"Partial step has taken \" << t << std::endl;\n  print_vector(\"x\", x, n);\n#endif\n  /* drop constraint l */\n  iai[l] = l;\n  delete_constraint(R, J, A, u, n, p, iq, l);\n#ifdef TRACE_SOLVER\n  print_matrix(\"R\", R, n);\n  print_ivector(\"A\", A, iq);\n#endif\n  \n  /* update s[ip] = CI * x + ci0 */\n  sum = 0.0;\n  for (k = 0; k < n; k++)\n    sum += CI[k][ip] * x[k];\n  s[ip] = sum + ci0[ip];\n\n#ifdef TRACE_SOLVER\n  print_vector(\"s\", s, mi);\n#endif\n  goto l2a;\n}\n\nvoid compute_d(double d[], double *J[], double np[], int n)\n{\n  register int i, j;\n  register double sum;\n  \n  /* compute d = H^T * np */\n  for (i = 0; i < n; i++)\n  {\n    sum = 0.0;\n    for (j = 0; j < n; j++)\n      sum += J[j][i] * np[j];\n    d[i] = sum;\n  }\n}\n\nvoid update_z(double z[], double *J[], double d[], int n, int iq)\n{\n  register int i, j;\n  \n  /* setting of z = H * d */\n  for (i = 0; i < n; i++)\n  {\n    z[i] = 0.0;\n    for (j = iq; j < n; j++)\n      z[i] += J[i][j] * d[j];\n  }\n}\n\nvoid update_r(double *R[], double r[], double d[], int n, int iq) \n{\n  register int i, j;\n  register double sum;\n  \n  /* setting of r = R^-1 d */\n  for (i = iq - 1; i >= 0; i--)\n  {\n    sum = 0.0;\n    for (j = i + 1; j < iq; j++)\n      sum += R[i][j] * r[j];\n    r[i] = (d[i] - sum) / R[i][i];\n  }\n}\n\nbool add_constraint(double *R[], double *J[], double d[], int n, int& iq, double& R_norm)\n{\n#ifdef TRACE_SOLVER\n  std::cerr << \"Add constraint \" << iq << '/';\n#endif\n  int i, j, k;\n  double cc, ss, h, t1, t2, xny;\n  \n  /* we have to find the Givens rotation which will reduce the element\n    d[j] to zero.\n    if it is already zero we don't have to do anything, except of\n    decreasing j */  \n  for (j = n - 1; j >= iq + 1; j--)\n  {\n    /* The Givens rotation is done with the matrix (cc cs, cs -cc).\n       If cc is one, then element (j) of d is zero compared with element\n       (j - 1). Hence we don't have to do anything. \n       If cc is zero, then we just have to switch column (j) and column (j - 1) \n       of J. Since we only switch columns in J, we have to be careful how we\n       update d depending on the sign of gs.\n       Otherwise we have to apply the Givens rotation to these columns.\n       The i - 1 element of d has to be updated to h. */\n    cc = d[j - 1];\n    ss = d[j];\n    h = distance(cc, ss);\n    if (h == 0.0)\n      continue;\n    d[j] = 0.0;\n    ss = ss / h;\n    cc = cc / h;\n    if (cc < 0.0)\n    {\n      cc = -cc;\n      ss = -ss;\n      d[j - 1] = -h;\n    }\n    else\n      d[j - 1] = h;\n    xny = ss / (1.0 + cc);\n    for (k = 0; k < n; k++)\n    {\n      t1 = J[k][j - 1];\n      t2 = J[k][j];\n      J[k][j - 1] = t1 * cc + t2 * ss;\n      J[k][j] = xny * (t1 + J[k][j - 1]) - t2;\n    }\n  }\n  /* update the number of constraints added*/\n  iq++;\n  /* To update R we have to put the iq components of the d vector\n    into column iq - 1 of R\n    */\n  for (i = 0; i < iq; i++)\n    R[i][iq - 1] = d[i];\n#ifdef TRACE_SOLVER\n  std::cerr << iq << std::endl;\n#endif\n  \n  if (fabs(d[iq - 1]) <= std::numeric_limits<double>::epsilon() * R_norm)\n    // problem degenerate\n    return false;\n  R_norm = std::max<double>(R_norm, fabs(d[iq - 1]));\n  return true;\n}\n\nvoid delete_constraint(double *R[], double *J[], int A[], double u[], int n, int p, int& iq, int l)\n{\n#ifdef TRACE_SOLVER\n  std::cerr << \"Delete constraint \" << l << ' ' << iq;\n#endif\n  int i, j, k, qq=-1;\n  double cc, ss, h, xny, t1, t2;\n  \n  /* Find the index qq for active constraint l to be removed */\n  for (i = p; i < iq; i++)\n    if (A[i] == l)\n    {\n      qq = i;\n      break;\n    }\n  assert(qq>=0);\n      \n  /* remove the constraint from the active set and the duals */\n  for (i = qq; i < iq - 1; i++)\n  {\n    A[i] = A[i + 1];\n    u[i] = u[i + 1];\n    for (j = 0; j < n; j++)\n      R[j][i] = R[j][i + 1];\n  }\n      \n  A[iq - 1] = A[iq];\n  u[iq - 1] = u[iq];\n  A[iq] = 0; \n  u[iq] = 0.0;\n  for (j = 0; j < iq; j++)\n    R[j][iq - 1] = 0.0;\n  /* constraint has been fully removed */\n  iq--;\n#ifdef TRACE_SOLVER\n  std::cerr << '/' << iq << std::endl;\n#endif \n  \n  if (iq == 0)\n    return;\n  \n  for (j = qq; j < iq; j++)\n  {\n    cc = R[j][j];\n    ss = R[j + 1][j];\n    h = distance(cc, ss);\n    if (h == 0.0)\n      continue;\n    cc = cc / h;\n    ss = ss / h;\n    R[j + 1][j] = 0.0;\n    if (cc < 0.0)\n    {\n      R[j][j] = -h;\n      cc = -cc;\n      ss = -ss;\n    }\n    else\n      R[j][j] = h;\n    \n    xny = ss / (1.0 + cc);\n    for (k = j + 1; k < iq; k++)\n    {\n      t1 = R[j][k];\n      t2 = R[j + 1][k];\n      R[j][k] = t1 * cc + t2 * ss;\n      R[j + 1][k] = xny * (t1 + R[j][k]) - t2;\n    }\n    for (k = 0; k < n; k++)\n    {\n      t1 = J[k][j];\n      t2 = J[k][j + 1];\n      J[k][j] = t1 * cc + t2 * ss;\n      J[k][j + 1] = xny * (J[k][j] + t1) - t2;\n    }\n  }\n}\n\ndouble distance(double a, double b)\n{\n  register double a1, b1, t;\n  a1 = fabs(a);\n  b1 = fabs(b);\n  if (a1 > b1) \n  {\n    t = (b1 / a1);\n    return a1 * sqrt(1.0 + t * t);\n  }\n  else\n    if (b1 > a1)\n    {\n      t = (a1 / b1);\n      return b1 * sqrt(1.0 + t * t);\n    }\n  return a1 * sqrt(2.0);\n}\n\n\ndouble scalar_product(double *x, double *y, int n)\n{\n  register int i;\n  register double sum;\n  \n  sum = 0.0;\n  for (i = 0; i < n; i++)\n    sum += x[i] * y[i];\n  return sum;     \n}\n\nvoid cholesky_decomposition(double *A[], int n) \n{\n  register int i, j, k;\n  register double sum;\n  \n  for (i = 0; i < n; i++)\n  {\n    for (j = i; j < n; j++)\n    {\n      sum = A[i][j];\n      for (k = i - 1; k >= 0; k--)\n        sum -= A[i][k]*A[j][k];\n      if (i == j) \n      {\n        if (sum <= 0.0)\n        {\n          // raise error\n          print_matrix(\"A\", A, n);\n          throw std::runtime_error(\"The matrix passed to the Cholesky A = L L^T decomposition is not positive definite\");\n        }\n        A[i][i] = sqrt(sum);\n      }\n      else\n        A[j][i] = sum / A[i][i];\n    }\n    for (k = i + 1; k < n; k++)\n      A[i][k] = A[k][i];\n  } \n}\n\nvoid cholesky_solve(double *L[], double x[], double b[], int n)\n{\n  double *y;\n  VectorStorage<double> _y(y,n);\n  \n  /* Solve L * y = b */\n  forward_elimination(L, y, b, n);\n  /* Solve L^T * x = y */\n  backward_elimination(L, x, y, n);\n}\n\nvoid forward_elimination(double *L[], double y[], double b[], int n)\n{\n  register int i, j;\n  \n  y[0] = b[0] / L[0][0];\n  for (i = 1; i < n; i++)\n  {\n    y[i] = b[i];\n    for (j = 0; j < i; j++)\n      y[i] -= L[i][j] * y[j];\n    y[i] = y[i] / L[i][i];\n  }\n}\n\nvoid backward_elimination(double *U[], double x[], double y[], int n)\n{\n  register int i, j;\n  \n  x[n - 1] = y[n - 1] / U[n - 1][n - 1];\n  for (i = n - 2; i >= 0; i--)\n  {\n    x[i] = y[i];\n    for (j = i + 1; j < n; j++)\n      x[i] -= U[i][j] * x[j];\n    x[i] = x[i] / U[i][i];\n  }\n}\n\nvoid print_matrix(char* name, double *A[], int n)\n{\n  std::ostringstream s;\n  std::string t;\n  \n  s << name << \": \" << std::endl;\n  for (int i = 0; i < n; i++)\n  {\n    s << \" \";\n    for (int j = 0; j < n; j++)\n      s << A[i][j] << \", \";\n    s << std::endl;\n  }\n  t = s.str();\n  t = t.substr(0, t.size() - 3); // To remove the trailing space, comma and newline\n  std::cerr << t << std::endl;\n}\n\nvoid print_rmatrix(char* name, double *A[], int n, int m)\n{\n  std::ostringstream s;\n  std::string t;\n  \n  s << name << \": \" << std::endl;\n  for (int i = 0; i < n; i++)\n  {\n    s << \" \";\n    for (int j = 0; j < m; j++)\n      s << A[i][j] << \", \";\n    s << std::endl;\n  }\n  t = s.str();\n  t = t.substr(0, t.size() - 3); // To remove the trailing space, comma and newline\n  \n  std::cerr << t << std::endl;\n}\n\nvoid print_vector(char* name, double v[], int n)\n{\n  std::ostringstream s;\n  std::string t;\n  \n  s << name << \": \" << std::endl << \" \";\n  for (int i = 0; i < n; i++)\n  {\n    s << v[i] << \", \";\n  }\n  t = s.str();\n  t = t.substr(0, t.size() - 2); // To remove the trailing space and comma\n  \n  std::cerr << t << std::endl;\n}\n\nvoid print_ivector(char* name, int v[], int n)\n{\n  std::ostringstream s;\n  std::string t;\n  \n  s << name << \": \" << std::endl << \" \";\n  for (int i = 0; i < n; i++)\n  {\n    s << v[i] << \", \";\n  }\n  t = s.str();\n  t = t.substr(0, t.size() - 2); // To remove the trailing space and comma\n  \n  std::cerr << t << std::endl;\n}\n\n"
  },
  {
    "path": "cola/libproject/tests/quadprogpp/QuadProg++.h",
    "content": "\n#ifndef _QUADPROGPP\n#define _QUADPROGPP\n\n/**\n File QuadProg++.h\n \n The quadprog_solve() function implements the algorithm of Goldfarb and Idnani \n for the solution of a (convex) Quadratic Programming problem\nby means of a dual method.\n\t \nThe problem is in the form:\n\nmin 0.5 * x G x + g0 x\ns.t.\n    CE^T x + ce0 = 0\n    CI^T x + ci0 >= 0\n\t \n The matrix and vectors dimensions are as follows:\n     G: n * n\n\t\tg0: n\n\t\t\t\t\n\t\tCE: n * p\n\t ce0: p\n\t\t\t\t\n\t  CI: n * m\n   ci0: m\n\n     x: n\n \n The function will return the cost of the solution written in the x vector or\n std::numeric_limits::infinity() if the problem is infeasible. In the latter case\n the value of the x vector is not correct.\n \n References: D. Goldfarb, A. Idnani. A numerically stable dual method for solving\n             strictly convex quadratic programs. Mathematical Programming 27 (1983) pp. 1-33.\n\n Notes:\n  1. pay attention in setting up the vectors ce0 and ci0. \n\t   If the constraints of your problem are specified in the form \n\t   A^T x = b and C^T x >= d, then you should set ce0 = -b and ci0 = -d.\n  2. The matrix G is modified within the function since it is used to compute\n     the G = L^T L cholesky factorization for further computations inside the function. \n     If you need the original matrix G you should make a copy of it and pass the copy\n     to the function.\n    \n Author: Luca Di Gaspero\n  \t\t\t DIEGM - University of Udine, Italy\n\t\t\t\t l.digaspero@uniud.it\n\t\t\t\t http://www.diegm.uniud.it/digaspero/\n \n The author will be grateful if the researchers using this software will\n acknowledge the contribution of this function in their research papers.\n\nLICENSE\n\nCopyright 2006 Luca Di Gaspero\n\nThis file is part of QuadProg++.\n\nQuadProg++ is free software; you can redistribute it and/or modify\nit under the terms of the GNU General Public License as published by\nthe Free Software Foundation; either version 2 of the License, or\n(at your option) any later version.\n\nQuadProg++ is distributed in the hope that it will be useful,\nbut WITHOUT ANY WARRANTY; without even the implied warranty of\nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\nGNU General Public License for more details.\n\nYou should have received a copy of the GNU General Public License\nalong with QuadProg++; if not, write to the Free Software\nFoundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA\n\nNOTE: \nModified to dynamically allocate storage for the 2D arrays --- removing\nthe previously hard-coded limit on problem size.\nTim Dwyer 24/11/07\n*/\n\n/**\n * The following assigns memory for a square matrix of size n.\n * Declared on the stack it will work as a smart pointer to cleanup\n * when the stack frame returns.\n */\nstruct MatrixStorage {\n  MatrixStorage(double** &M, int m, int n) : M(M), m(m) {\n    M=new double*[m];\n    for(int i=0;i<m;i++) {\n      M[i]=new double[n];\n    }\n  }\n  ~MatrixStorage() {\n    for(int i=0;i<m;i++) {\n      delete [] M[i];\n    }\n\tdelete [] M;\n  }\n  double** &M;\n  int m;\n};\ntemplate <typename T>\nstruct VectorStorage {\n\tVectorStorage(T* &v, int n) : v(v) {\n\t\tv=new T[n];\n\t}\n\t~VectorStorage() {\n\t\tdelete [] v;\n\t}\n\tT* &v;\n};\ndouble solve_quadprog(double *G[], double g0[], int n, \n                      double *CE[], double ce0[], int p, \n                      double *CI[], double ci0[], int m,\n                      double x[]);\n#endif // #define _QUADPROGPP\n\n"
  },
  {
    "path": "cola/libproject/tests/quadprogpp/main.cc",
    "content": "/*\n File main.cc\n \n This file contains just an example on how to set-up the matrices for using with\n the solve_quadprog() function.\n \n The test problem is the following:\n \n Given:\n G =  4 -2   g0^T = [6 0]\n     -2  4       \n \n Solve:\n min f(x) = 1/2 x G x + g0 x\n s.t.\n   x_1 + x_2 = 3\n   x_1 >= 0\n   x_2 >= 0\n   x_1 + x_2 >= 2\n \n The solution is x^T = [1 2] and f(x) = 12\n \n Author: Luca Di Gaspero\n DIEGM - University of Udine, Italy\n l.digaspero@uniud.it\n http://www.diegm.uniud.it/digaspero/\n \n LICENSE\n \n Copyright 2006 Luca Di Gaspero\n \n This file is part of QuadProg++.\n \n QuadProg++ is free software; you can redistribute it and/or modify\n it under the terms of the GNU General Public License as published by\n the Free Software Foundation; either version 2 of the License, or\n (at your option) any later version.\n \n QuadProg++ is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n GNU General Public License for more details.\n \n You should have received a copy of the GNU General Public License\n along with QuadProg++; if not, write to the Free Software\n Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA\n*/\n\n#include <iostream>\n#include <sstream>\n#include <string>\n#include \"QuadProg++.h\"\n\nint main (int argc, char *const argv[]) {\n  int n=2, m=1, p=3;\n  double sum = 0.0;\n  char ch;\n  double **G, *g0, **CE, *ce0, **CI, *ci0, *x;\n  \n  MatrixStorage _G(G,n,n);\n  VectorStorage<double> _g(g0,n);\n  MatrixStorage _CE(CE,n,m);\n  VectorStorage<double> _ce(ce0,m);\n  MatrixStorage _CI(CI,n,p);\n  VectorStorage<double> _ci(ci0,p);\n  VectorStorage<double> _x(x,n);\n  \n  std::istringstream Gis(\"4, -2,\"\n                         \"-2, 4 \");\n  std::istringstream g0is(\"6.0, 0.0 \");\n  std::istringstream CEis(\"1.0, \"\n                          \"1.0 \");\n  std::istringstream CIis(\"1.0, 0.0, 1.0, \"\n                          \"0.0, 1.0, 1.0 \");\n  std::istringstream ce0is(\"-3.0 \");\n  std::istringstream ci0is(\"0.0, 0.0, -2.0 \");\n\n  for (int i = 0; i < n; i++) {\n    G[i]=new double[n];\n    g0is >> g0[i] >> ch;\n    for (int j = 0; j < n; j++)\n      Gis >> G[i][j] >> ch;\n    CE[i]=new double[m];\n    for (int j = 0; j < m; j++)\n      CEis >> CE[i][j] >> ch;\n    CI[i]=new double[p];\n    for (int j = 0; j < p; j++)\n      CIis >> CI[i][j] >> ch;\n  }\n  for (int j = 0; j < m; j++)\n    ce0is >> ce0[j] >> ch;\n  for (int j = 0; j < p; j++)\n    ci0is >> ci0[j] >> ch;\n\n  std::cout << \"f: \" << solve_quadprog(G, g0, n, CE, ce0, m, CI, ci0, p, x) << std::endl;\n  std::cout << \"x: \";\n  for (int i = 0; i < n; i++)\n    std::cout << x[i] << ' ';\n  std::cout << std::endl; \n\n  /* FOR DOUBLE CHECKING COST since in the solve_quadprog routine the matrix G is modified */\n  \n  for (int i = 0; i < n; i++)\n    for (int j = 0; j < n; j++)\n      Gis >> G[i][j] >> ch;\n  \n  for (int i = 0; i < n; i++)\n    for (int j = 0; j < n; j++)\n      sum += x[i] * G[i][j] * x[j];\n  sum *= 0.5;\n  \n  std::cout << \"Double checking cost: \";\n  for (int i = 0; i < n; i++)\n    sum += g0[i] * x[i];\n  std::cout << sum << std::endl;\n}\n"
  },
  {
    "path": "cola/libproject/tests/random.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libproject - Solves an instance of the Variable Placement with Separation\n *              Constraints problem, that is a projection onto separation \n *              constraints, whilst always maintaining feasibility.\n *\n * Copyright (C) 2005-2008  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library in the file LICENSE; if not, \n * write to the Free Software Foundation, Inc., 59 Temple Place, \n * Suite 330, Boston, MA  02111-1307  USA\n *\n*/\n\n#include <iostream>\n#include <cassert>\n#include <libproject/project.h>\n#include <libproject/util.h>\n#include <cmath>\n#include \"testutil.h\"\n\nusing namespace project;\nusing namespace std;\n\nstatic unsigned numVars = 5;\nstatic unsigned minConstraints = (unsigned)((double)numVars * 1.5);\n\n/**\n * Random test:\n *   - set of variables V with strictly increasing random starting positions\n *     and random desired positions\n *   - generate random constraints over pairs v_i, v_j where i<j\n *     with gap = r*(x_i - x_j) where 0<=r<=1\n *\n * Notes:\n *   - no splitting required\n *   - all constraints active\n *   - constraint DAG is a simple chain\n */\nvoid randomProblem(string& name, Variables &vs, Constraints &cs) {\n    name = \"randomProblem\";\n    double range=(double)numVars;\n    double rpos=getRand(range/numVars);\n    VMap vmap;\n    vector<double> XI(numVars);\n    for(unsigned i=0;i<numVars;i++) {\n        Variable* v=new Variable(\n                Initial(rpos),\n                Desired(getRand(range)),\n                Weight(getRand(100))\n        );\n        XI[i]=rpos;\n        vmap[v]=i;\n        vs.push_back(v);\n        rpos+=getRand(range/(double)numVars);\n    }\n    while(cs.size()<minConstraints) {\n        for(unsigned i=0;i<numVars-1;i++) {\n            double probability = getRand(2);\n            if(probability>1.0) {\n                unsigned j=i+unsigned(ceil(getRand(numVars-i-1)));\n                double r=getRand(1);\n                Variable *lv=vs[i], *rv=vs[j];\n                double g=r*(rv->getPosition()-lv->getPosition());\n                cs.push_back(new Constraint(lv,rv,g));\n            }\n        }\n    }\n    //printf(\"minConstraints=%u,|V|=%u,|C|=%u\\n\",minConstraints,(unsigned)vs.size(),(unsigned)cs.size());\n}\nint main() {\n    //srand(time(NULL));\n    unsigned instances = 10000;\n    for(numVars = 3; numVars < 10; numVars++) {\n        printf(\"Running %d instances with %d variables...\\n\",instances,numVars);\n        for(unsigned i=0;i<instances;i++) {\n            test(randomProblem,true);\n            //if(!(i%100)) {\n                //printf(\"i=%d\\n\",i);\n            //}\n        }\n    }\n    instances = 1000;\n    for(numVars = 10; numVars < 20; numVars++) {\n        printf(\"Running %d instances with %d variables...\\n\",instances,numVars);\n        for(unsigned i=0;i<instances;i++) {\n            test(randomProblem,true);\n            //if(!(i%100)) {\n                //printf(\"i=%d\\n\",i);\n            //}\n        }\n    }\n    return 0;\n}\n/*\n * vim: set cindent \n * vim: ts=4 sw=4 et tw=0 wm=0\n */\n"
  },
  {
    "path": "cola/libproject/tests/simple.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libproject - Solves an instance of the Variable Placement with Separation\n *              Constraints problem, that is a projection onto separation \n *              constraints, whilst always maintaining feasibility.\n *\n * Copyright (C) 2005-2008  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library in the file LICENSE; if not, \n * write to the Free Software Foundation, Inc., 59 Temple Place, \n * Suite 330, Boston, MA  02111-1307  USA\n *\n*/\n\n/**\n * \\file simple.cpp\n *\n * Simple self contained test cases that also serve as basic examples of how\n * to use libproject.\n * By simple I mean they don't include any complicated test harness\n * or external functionality other than that provided by libproject.\n */\n#include <iostream>\n#include <cassert>\n#include <cmath>\n#include <algorithm>\n#include <libproject/project.h>\n#include <libproject/util.h>\n\nusing namespace project;\nusing namespace std;\n/**\n * three variables, two constraints, splitting required.\n */\nvoid simple1() {\n    Variables vs;\n    Constraints cs;\n    vs.push_back(new Variable(Initial(0.343187),Desired(1.289946)));\n    vs.push_back(new Variable(Initial(0.966096),Desired(1.295395)));\n    vs.push_back(new Variable(Initial(1.348192),Desired(1.385243)));\n    cs.push_back(new Constraint(vs[0],vs[2],0.793396));\n    cs.push_back(new Constraint(vs[1],vs[2],0.320881));\n    Project f(vs,cs);\n    f.solve();\n    double expected[]={0.940896,1.295395,1.734292};\n    for(unsigned i=0;i<vs.size();i++) {\n        printf(\"vs[%d]=%f\\n\",i,vs[i]->getPosition());\n        assert(fabs(vs[i]->getPosition() - expected[i]) < 1e-5);\n    }\n    for_each(vs.begin(),vs.end(),delete_object());\n    for_each(cs.begin(),cs.end(),delete_object());\n}\n/**\n * basic not very challenging test case:\n *   - set of variables V starting positions\n *      v_i+1=v_{i+1} \n *   - generate chain of regularly separated (by 1) constraints:\n *      {C(i,i+1,1) | v_i in V, 0<=i<|V|}\n *   - desired positions guarantee all constraints will be active\n *\n * Notes:\n *   - no splitting required\n *   - all constraints active\n *   - constraint DAG is a simple chain\n */\nvoid simple2() {\n    unsigned n=100;\n    Variables vs;\n    for(unsigned i=0;i<n;i++) {\n        vs.push_back(new Variable(Initial(i),Desired(0)));\n    }\n    Constraints cs;\n    for(unsigned i=0;i<n-1;i++) {\n        cs.push_back(new Constraint(vs[i],vs[i+1],1));\n    }\n    solve(vs,cs);\n    unsigned i=0;\n    double firstPos=-(n-1.0)/2.0;\n    for(Variables::iterator j=vs.begin();j!=vs.end();i++,j++) {\n        Variable *v=*j;\n        double expected=firstPos+i;\n        //cout << \"vs[\"<<i<<\"]=\"<<v->getPosition() << \", expected=\"<<expected<<endl;\n        assert(expected==v->getPosition());\n    }\n    for_each(vs.begin(),vs.end(),delete_object());\n    for_each(cs.begin(),cs.end(),delete_object());\n}\nint main() {\n    simple1();\n    printf(\"PASS: simple1\\n\");\n    simple2();\n    printf(\"PASS: simple2\\n\");\n    return 0;\n}\n/*\n * vim: set cindent \n * vim: ts=4 sw=4 et tw=0 wm=0\n */\n"
  },
  {
    "path": "cola/libproject/tests/static.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libproject - Solves an instance of the Variable Placement with Separation\n *              Constraints problem, that is a projection onto separation \n *              constraints, whilst always maintaining feasibility.\n *\n * Copyright (C) 2005-2008  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library in the file LICENSE; if not, \n * write to the Free Software Foundation, Inc., 59 Temple Place, \n * Suite 330, Boston, MA  02111-1307  USA\n *\n*/\n\n/**\n * \\file static.cpp\n * small test cases that have identified bugs at various times\n */\n#include <iostream>\n#include <libproject/project.h>\n#include <libproject/util.h>\n#include \"testutil.h\"\n\nusing namespace project;\nusing namespace std;\n\n/**\n * simple merges, no split\n */\nvoid t1(string& name, Variables &vs, Constraints &cs) {\nname = \"t1\";\nvs.push_back(new Variable(Initial(0.032341),Desired(2.065240)));\nvs.push_back(new Variable(Initial(0.644455),Desired(2.642579)));\nvs.push_back(new Variable(Initial(1.456425),Desired(2.615846)));\ncs.push_back(new Constraint(vs[0],vs[2],0.973464));\ncs.push_back(new Constraint(vs[1],vs[2],0.367541));\n}\n\n/**\n * two merges and one split required\n */\nvoid t2(string& name, Variables &vs, Constraints &cs) {\nname = \"t2\";\nvs.push_back(new Variable(Initial(0.343187),Desired(1.289946)));//soln=0.940896\nvs.push_back(new Variable(Initial(0.966096),Desired(1.295395)));//soln=1.295395\nvs.push_back(new Variable(Initial(1.348192),Desired(1.385243)));//soln=1.734292\ncs.push_back(new Constraint(vs[0],vs[2],0.793396));\ncs.push_back(new Constraint(vs[1],vs[2],0.320881));\n}\n\n/**\n * requires two splits\n */\nvoid t3(string& name, Variables& vs, Constraints &cs) {\nname = \"t3\";\nvs.push_back(new Variable(Initial(0.388295),Desired(3.504715)));//soln=2.161169\nvs.push_back(new Variable(Initial(1.061545),Desired(4.048542)));//soln=4.048542\nvs.push_back(new Variable(Initial(1.372616),Desired(2.417464)));//soln=2.417464\nvs.push_back(new Variable(Initial(1.452004),Desired(2.779394)));//soln=2.779394\nvs.push_back(new Variable(Initial(1.891515),Desired(1.840865)));//soln=3.184411\ncs.push_back(new Constraint(vs[0],vs[4],1.023242));\ncs.push_back(new Constraint(vs[2],vs[3],0.025524));\ncs.push_back(new Constraint(vs[3],vs[4],0.399988));\n}\n\n/**\n * redundant constraints\n */\nvoid t4(string& name, Variables& vs, Constraints &cs) {\nname = \"t4\";\nvs.push_back(new Variable(Initial(0.875029),Desired(2.370362)));//soln=1.928746 != rslt=0.875029\nvs.push_back(new Variable(Initial(1.146413),Desired(1.889098)));//soln=2.007311 != rslt=1.146413\nvs.push_back(new Variable(Initial(1.904400),Desired(2.402919)));//soln=2.726321 != rslt=1.904400\ncs.push_back(new Constraint(vs[0],vs[2],0.198559));\ncs.push_back(new Constraint(vs[1],vs[2],0.719010));\ncs.push_back(new Constraint(vs[0],vs[1],0.078566));\ncs.push_back(new Constraint(vs[0],vs[1],0.076233));\n}\nvoid t5(string& name, Variables& vs, Constraints &cs) {\nname = \"t5\";\nvs.push_back(new Variable(0,Initial(190),Desired(190),Weight(1e+10)));\nvs.push_back(new Variable(1,Initial(296),Desired(296),Weight(1)));\nvs.push_back(new Variable(2,Initial(241),Desired(241),Weight(1)));\nvs.push_back(new Variable(3,Initial(196),Desired(196),Weight(1)));\nvs.push_back(new Variable(4,Initial(88),Desired(88),Weight(1)));\nvs.push_back(new Variable(5,Initial(152),Desired(152),Weight(1)));\nvs.push_back(new Variable(6,Initial(122),Desired(122),Weight(1)));\nvs.push_back(new Variable(7,Initial(196),Desired(196),Weight(1)));\nvs.push_back(new Variable(8,Initial(243),Desired(243),Weight(1)));\nvs.push_back(new Variable(9,Initial(156),Desired(156),Weight(1)));\nConstraint(vs[6],vs[9],34);\nConstraint(vs[9],vs[0],34);\nConstraint(vs[4],vs[6],34);\nConstraint(vs[6],vs[0],34);\nConstraint(vs[4],vs[0],34);\nConstraint(vs[0],vs[8],34);\nConstraint(vs[4],vs[5],34);\nConstraint(vs[8],vs[1],34);\nConstraint(vs[7],vs[8],34);\nConstraint(vs[5],vs[7],34);\nConstraint(vs[7],vs[2],34);\nConstraint(vs[5],vs[3],34);\nConstraint(vs[3],vs[2],34);\n}\n\nint main() {\n    test(t1);\n    test(t2);\n    test(t3);\n    test(t4);\n    test(t5);\n    return 0;\n}\n/*\n * vim: set cindent \n * vim: ts=4 sw=4 et tw=0 wm=0\n */\n"
  },
  {
    "path": "cola/libproject/tests/testutil.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libproject - Solves an instance of the Variable Placement with Separation\n *              Constraints problem, that is a projection onto separation \n *              constraints, whilst always maintaining feasibility.\n *\n * Copyright (C) 2005-2008  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library in the file LICENSE; if not, \n * write to the Free Software Foundation, Inc., 59 Temple Place, \n * Suite 330, Boston, MA  02111-1307  USA\n *\n*/\n\n/**\n * \\file testutil.cpp\n * utilities for testing libproject\n */\n#include <cassert>\n#include <cmath>\n#include <algorithm>\n#include <libproject/project.h>\n#include <libproject/util.h>\n#include \"testutil.h\"\n#include \"quadprogpp/QuadProg++.h\"\n\nusing namespace project;\nusing namespace std;\n\n/**\n * float comparisons (i.e. \\f$a=b\\f$) in our tests are actually \\f$|a-b|<epsilon\\f$.\n */\nconst double testEpsilon = 1e-10;\n\n/**\n * Solve a project problem using a conventional quadratic programming solver.\n * We use Luca Di Gaspero's GPLed QuadProg++ program \n * http://www.diegm.uniud.it/digaspero/\n *\n * The problem is converted to the form:\n *\n * \\f$\\min_x \\frac{1}{2} x^T G x + g^T x \\f$ \n * subject to \\f$C^T x + c \\ge 0 \\f$\n *\n * @param vs variables\n * @param cs constraints\n * @param result the solution vector\n */\nvoid qps(Variables &vs, Constraints &cs, vector<double> &result) {\n    const unsigned n=vs.size();\n    double **G, *g;\n\tMatrixStorage _G(G,n,n);\n\tVectorStorage<double> _g(g,n);\n    VMap vmap;\n    for(unsigned i=0;i<n;i++) {\n        Variable *v=vs[i];\n        vmap[v]=i;\n        g[i]=-2.0*v->getWeight()*v->getDesiredPosition();\n        for(unsigned j=0;j<n;j++) {\n            G[i][j]=\n                i==j ? (2.0*v->getWeight()) : 0;\n        }\n    }\n    const unsigned m=cs.size();\n    double **C, *c;\n\tMatrixStorage _C(C,n,m);\n\tVectorStorage<double> _c(c,m);\n    for(unsigned i=0;i<n;i++) {\n        fill(C[i],C[i]+m,0);\n    }\n    for(unsigned i=0;i<m;i++) {\n        const unsigned l=vmap[cs[i]->l],\n                       r=vmap[cs[i]->r];\n        C[l][i]=-1;\n        C[r][i]=1;\n        c[i]=-cs[i]->g;\n    }\n    double *x;\n\tVectorStorage<double> _x(x,n);\n    solve_quadprog(G, g, n, NULL, NULL, 0, C, c, m, x);\n    result.resize(n);\n    copy(x,x+n,result.begin());\n}\n\n/**\n * Checks that each constraint is satisfied.\n * @return false if unsatisfied constraint found\n */\nbool feasible(Constraints &cs) {\n    for(Constraints::iterator i=cs.begin();i!=cs.end();++i) {\n        Constraint* c=*i;\n        double slack = c->r->getPosition() - c->l->getPosition() - c->g;\n        if (slack < -testEpsilon) {\n            printf(\"Unsatisfiable constraint: slack = %f\\n\",slack);    \n            return false;\n        }\n    }\n    return true;\n}\n/**\n * Print out the problem instance (as code that can easily be pasted into\n * a test case)\n */\nvoid printProblem(Variables &vs, \n        vector<double> &XI, \n        Constraints &cs, \n        VMap &vmap) \n{\n    printf(\"problem instance:\\n\");\n    printf(\"//------ snip -----------------\\n\");\n    printf(\"const char* testname(Variables& vs, Constraints &cs) {\\n\");\n    vector<double> x;\n    qps(vs,cs,x);\n    for(unsigned i=0;i<vs.size();i++) {\n        char *match=\"==\";\n        if(!approxEquals(vs[i]->getPosition(),x[i])) {\n            match=\"!=\";\n        }\n        printf(\"vs.push_back(new Variable(%f,%f,%f));//soln=%f%srslt=%f\\n\",\n                XI[i],vs[i]->getDesiredPosition(),vs[i]->getWeight(),x[i],match,vs[i]->getPosition());\n    }\n    for(Constraints::iterator i=cs.begin();i!=cs.end();++i) {\n        Constraint* c=*i;\n        unsigned l=vmap[c->l], r=vmap[c->r];\n        printf(\"cs.push_back(new Constraint(vs[%d],vs[%d],%f));\\n\", l,r,c->g);\n    }\n    printf(\"return __ASSERT_FUNCTION;\\n}\\n\");\n    printf(\"//------ end snip ------------\\n\");\n}\n/**\n * get random number in the range [0,max]\n */\ndouble getRand(const double max) {\n    return (double)max*rand()/(RAND_MAX);\n}\n/**\n * Check approximate equality of two doubles.\n * float comparisons (i.e. \\f$a=b\\$f) in our tests are actually \\$f|a-b|<epsilon\\$f.\n * @return true if the above condition is met\n */\nbool approxEquals(double a, double b) {\n    return fabs(a-b)<testEpsilon;\n}\n/**\n * Attempt to use libproject to solve a given projection problem instance.\n * @param t pointer to a function that will populate a list of variables and a list\n * of constraints.\n */\nvoid test(void (*t)(string&, Variables&, Constraints&), bool silentPass) {\n    Variables vs;\n    Constraints cs;\n    string tn;\n\n    // call given function to generate the problem instance\n    t(tn,vs,cs);\n    \n    // store initial positions\n    vector<double> XI(vs.size());\n    VMap vmap;\n    for(unsigned i=0;i<vs.size();i++) {\n        XI[i]=vs[i]->getPosition();\n        vmap[vs[i]]=i;\n    }\n\n    // assert initial solution is feasible:\n    assert(feasible(cs));\n\n    // run standard qpsolver\n    vector<double> qpresult;\n    qps(vs,cs,qpresult);\n\n    try {\n        // run our solver\n        solve(vs,cs);\n\n        // assert final solution is feasible:\n        if(!feasible(cs)) {\n            throw \"infeasible solution!\";\n        }\n        // assert solution matches solution from standard QP solver\n        for(unsigned i=0;i<vs.size();i++) {\n            if(!approxEquals(vs[i]->getPosition(),qpresult[i])) {\n                throw \"incorrect solution!\";\n            }\n        }\n        if(!silentPass) {\n            printf(\"PASS: %s\\n\",tn.c_str());\n        }\n    } catch(CriticalFailure &f) {\n        f.print();\n        printProblem(vs,XI,cs,vmap);\n        fprintf(stderr,\"FAIL: %s\\n\",tn.c_str());\n        exit(1);\n    }\n    for_each(vs.begin(),vs.end(),delete_object());\n    for_each(cs.begin(),cs.end(),delete_object());\n}\n\n/*\n * vim: set cindent \n * vim: ts=4 sw=4 et tw=0 wm=0\n */\n"
  },
  {
    "path": "cola/libproject/tests/testutil.h",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libproject - Solves an instance of the Variable Placement with Separation\n *              Constraints problem, that is a projection onto separation \n *              constraints, whilst always maintaining feasibility.\n *\n * Copyright (C) 2005-2008  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library in the file LICENSE; if not, \n * write to the Free Software Foundation, Inc., 59 Temple Place, \n * Suite 330, Boston, MA  02111-1307  USA\n *\n*/\n\n/**\n * \\file testutil.h\n * utilities for testing libproject\n */\n#include <map>\n#include <cassert>\n/**\n * Solve a project problem using a conventional quadratic programming solver.\n * We use Luca Di Gaspero's GPLed QuadProg++ program \n * http://www.diegm.uniud.it/digaspero/\n *\n * The problem is converted to the form:\n *\n * \\f$\\min_x \\frac{1}{2} x^T G x + g^T x \\f$ \n * subject to \\f$C^T x + c \\ge 0 \\f$\n *\n * @param vs variables\n * @param cs constraints\n * @param result the solution vector\n */\nvoid qps(project::Variables &vs, project::Constraints &cs, \n        std::vector<double> &result);\n\n/**\n * Checks that each constraint is satisfied, throwing an assert error otherwise.\n */\nbool feasible(project::Constraints &cs);\n\n/**\n * used to identify variable indices from pointers to Variable\n */\ntypedef std::map<const project::Variable*,unsigned> VMap;\n\n/**\n * Print out the problem instance (as code that can easily be pasted into\n * a test case)\n */\nvoid printProblem(project::Variables &vs, \n\t\tstd::vector<double> &XI, \n\t\tproject::Constraints &cs, \n\t\tVMap &vmap);\n\n/**\n * float comparisons (i.e. \\f$a=b\\$f) in our tests are actually \\$f|a-b|<epsilon\\$f.\n */\nextern const double testEpsilon;\n/**\n * float comparisons (i.e. \\f$a=b\\$f) in our tests are actually \\$f|a-b|<epsilon\\$f.\n * Check approximate equality of two doubles.\n * @return true if the above condition is met\n */\nbool approxEquals(double a, double b);\n/**\n * get random number in the range [0,max]\n */\ndouble getRand(const double max);\n/**\n * Attempt to use libproject to solve a given projection problem instance.\n * @param t pointer to a function that will populate a list of variables and a list\n * of constraints.\n */\nvoid test(void (*t)(std::string&, project::Variables&, project::Constraints&),\n\t\tbool silentPass = false);\n"
  },
  {
    "path": "cola/libproject/tests/treeqp.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libproject - Solves an instance of the Variable Placement with Separation\n *              Constraints problem, that is a projection onto separation \n *              constraints, whilst always maintaining feasibility.\n *\n * Copyright (C) 2005-2008  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library in the file LICENSE; if not, \n * write to the Free Software Foundation, Inc., 59 Temple Place, \n * Suite 330, Boston, MA  02111-1307  USA\n *\n*/\n\n#include <cassert>\n#include \"treeqp.h\"\n#include \"quadprogpp/QuadProg++.h\"\nusing namespace std;\n/**\n * Solve problem using a conventional quadratic programming solver.\n * We use Luca Di Gaspero's GPLed QuadProg++ program \n * http://www.diegm.uniud.it/digaspero/\n *\n * The problem is converted to the form:\n *\n * \\f$\\min_x \\frac{1}{2} x^T A x + b^T x \\f$ \n * subject to \\f$C^T x + c \\ge 0 \\f$\n *\n * @param ts goal terms\n * @param cs constraints\n * @param result the solution vector\n */\nvoid treeQPSolve(Terms &ts, EqualityConstraints &ecs, InequalityConstraints &ics, vector<double> &result) {\n    const unsigned n=result.size();\n    double **A=new double*[n],\n           *b=new double[n];\n    for(unsigned i=0;i<n;i++) {\n        A[i]=new double[n];\n        fill(A[i],A[i]+n,0);\n    }\n    fill(b,b+n,0);\n\n    // requires first variable to be at 0 and forces positive definiteness\n    A[0][0]=2.0;\n\n    for(Terms::iterator t=ts.begin(), e=ts.end(); t!=e; ++t) {\n        const unsigned p=t->p, c=t->c;\n        assert(p<n);\n        assert(c<n);\n        double at=2.0*t->w;\n        A[p][p]+=at;\n        A[c][c]+=at;\n        A[p][c]-=at;\n        A[c][p]-=at;\n        double bt=2.0*t->o*t->w;\n        b[p]+=bt;\n        b[c]+=-bt;\n    }\n    // equality constraints:\n    const unsigned me=ecs.size();\n    double **CE=new double*[n],\n           *ce=new double[me];\n    for(unsigned i=0;i<n;i++) {\n        CE[i]=new double[me];\n        fill(CE[i],CE[i]+me,0);\n    }\n    for(unsigned i=0;i<me;i++) {\n        EqualityConstraint& ec=ecs[i];\n        const unsigned l=ec.l, r=ec.r;\n        const double g=ec.g;\n        assert(l!=r);\n        assert(l<n);\n        assert(r<n);\n        if(ec.threeVars) {\n            const unsigned p=ec.p;\n            assert(p<n);\n            CE[p][i]=0.5; \n            CE[l][i]=-0.5; \n            CE[r][i]=-0.5; \n            ce[i]=-g/2.0;\n        } else {\n            CE[l][i]=-1;\n            CE[r][i]=1;\n            ce[i]=-g;\n        }\n    }\n\n    // inequality constraints:\n    const unsigned mi=ics.size();\n    double **CI=new double*[n],\n           *ci=new double[mi];\n    for(unsigned i=0;i<n;i++) {\n        CI[i]=new double[mi];\n        fill(CI[i],CI[i]+mi,0);\n    }\n    for(unsigned i=0;i<mi;i++) {\n        const unsigned l=ics[i].l, r=ics[i].r;\n        assert(l!=r);\n        assert(l<n);\n        assert(r<n);\n        CI[l][i]=-1;\n        CI[r][i]=1;\n        ci[i]=-ics[i].g;\n    }\n\n    double *x=new double[n];\n    solve_quadprog(A, b, n, CE, ce, me, CI, ci, mi, x);\n    result.resize(n);\n    copy(x,x+n,result.begin());\n    for(unsigned i=0;i<n;i++) {\n        delete [] A[i];\n        delete [] CE[i];\n        delete [] CI[i];\n    }\n\tdelete [] A;\n\tdelete [] b;\n\tdelete [] CE;\n\tdelete [] CI;\n\tdelete [] ce;\n\tdelete [] ci;\n\tdelete [] x;\n}\n/*\n * vim: set cindent \n * vim: ts=4 sw=4 et tw=0 wm=0\n */\n"
  },
  {
    "path": "cola/libproject/tests/treeqp.h",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libproject - Solves an instance of the Variable Placement with Separation\n *              Constraints problem, that is a projection onto separation \n *              constraints, whilst always maintaining feasibility.\n *\n * Copyright (C) 2005-2008  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library in the file LICENSE; if not, \n * write to the Free Software Foundation, Inc., 59 Temple Place, \n * Suite 330, Boston, MA  02111-1307  USA\n *\n*/\n\n#include <vector>\n/**\n * our goal function has terms:\n *   w_i(x_p+o_i-x_c)^2\n * where x_p is the position of the \"parent\", x_c is the \"child\" position,\n * w_i is a weight for the ith term and o_i is the offset required between\n * them.\n */\nstruct Term {\n    unsigned p, c;\n    double w, o; \n    Term(unsigned p, unsigned c, double w, double o) \n        : p(p), c(c), w(w), o(o) {\n    }\n};\ntypedef std::vector<Term> Terms;\n/** \n * we solve the goal subject to equality constraints of the form\n *   x_l+g=x_r or x_p=(x_l+x_r+g)/2\n */\nstruct EqualityConstraint {\n    unsigned l, r, p;\n    /// gap required between variables\n    double g;\n    /// true if this is an equality constraint, otherwise it's an inequality\n    bool threeVars;\n    EqualityConstraint(unsigned l, unsigned r, double g)\n        : l(l), r(r), p(0), g(g), threeVars(false) {\n    }\n    EqualityConstraint(unsigned p, unsigned l, unsigned r, double g) \n        : l(l), r(r), p(p), g(g), threeVars(true) {\n    }\n};\ntypedef std::vector<EqualityConstraint> EqualityConstraints;\n/**\n * we solve the goal subject to inequality constraint of the form \n *   x_l+g<=x_r \n */\nstruct InequalityConstraint {\n    unsigned l, r;\n    /// gap required between variables\n    double g;\n    InequalityConstraint(unsigned l, unsigned r, double g)\n        : l(l), r(r), g(g) {\n    }\n};\ntypedef std::vector<InequalityConstraint> InequalityConstraints;\n/**\n * Solve problem using a conventional quadratic programming solver.\n * We use Luca Di Gaspero's GPLed QuadProg++ program \n * http://www.diegm.uniud.it/digaspero/\n *\n * The problem is converted to the form:\n *\n * \\f$\\min_x \\frac{1}{2} x^T A x + b^T x \\f$ \n * subject to \\f$C^T x + c \\ge 0 \\f$\n *\n * @param ts goal terms\n * @param cs constraints\n * @param result the solution vector\n */\nvoid treeQPSolve(Terms &ts, EqualityConstraints &ecs, InequalityConstraints &ics, std::vector<double> &result);\n/*\n * vim: set cindent \n * vim: ts=4 sw=4 et tw=0 wm=0\n */\n"
  },
  {
    "path": "cola/libproject/tests/treeqptest.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libproject - Solves an instance of the Variable Placement with Separation\n *              Constraints problem, that is a projection onto separation \n *              constraints, whilst always maintaining feasibility.\n *\n * Copyright (C) 2005-2008  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library in the file LICENSE; if not, \n * write to the Free Software Foundation, Inc., 59 Temple Place, \n * Suite 330, Boston, MA  02111-1307  USA\n *\n*/\n\n#include <iostream>\n#include <iterator>\n#include \"treeqp.h\"\nusing namespace std;\n\nint main() {\n    unsigned n=5;\n    Terms ts;\n    ts.push_back(Term(0,1,1,0));\n    ts.push_back(Term(0,2,1,0));\n    ts.push_back(Term(2,3,1,-93));\n    ts.push_back(Term(2,4,1,73));\n    EqualityConstraints ecs;\n    ecs.push_back(EqualityConstraint(2,3,0));\n    ecs.push_back(EqualityConstraint(0,1,2,292));\n    InequalityConstraints ics;\n    ics.push_back(InequalityConstraint(1, 2, 292));\n    ics.push_back(InequalityConstraint(3, 4, 209));\n\n    vector<double> x(n);\n    treeQPSolve(ts,ecs,ics,x);\n    cout << \"solution:\" << endl;\n    copy(x.begin(),x.end(),ostream_iterator<double>(cout,\"\\n\"));\n\n    return 0;\n}\n/*\n * vim: set cindent \n * vim: ts=4 sw=4 et tw=0 wm=0\n */\n"
  },
  {
    "path": "cola/libproject/util.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libproject - Solves an instance of the Variable Placement with Separation\n *              Constraints problem, that is a projection onto separation \n *              constraints, whilst always maintaining feasibility.\n *\n * Copyright (C) 2005-2008  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n*/\n\n#include \"libproject/util.h\"\n\n#include <cmath>\nnamespace project {\nconst double epsilon=1e-8;\nbool approx_equals(double a, double b) {\n    return fabs(a-b)<epsilon;\n}\n} // namespace project\n\n"
  },
  {
    "path": "cola/libproject/util.h",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libproject - Solves an instance of the Variable Placement with Separation\n *              Constraints problem, that is a projection onto separation \n *              constraints, whilst always maintaining feasibility.\n *\n * Copyright (C) 2005-2008  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n*/\n\n#ifndef _LIBPROJECT_UTIL_H\n#define _LIBPROJECT_UTIL_H\n\n#include <cassert>\n#include <iostream>\n\n#ifdef NDEBUG \n#define LIBPROJECT_ASSERT(expr)  static_cast<void>(0)\n#else // Not NDEBUG\n#if defined(USE_CASSERT) || !defined(__ASSERT_FUNCTION)\n#define LIBPROJECT_ASSERT(expr)  assert(expr)\n#else // Not USE_CASSERT\n#define LIBPROJECT_ASSERT(expr) \\\n    if(!(expr)) { \\\n        throw CriticalFailure( \\\n                __STRING(expr), \\\n                __FILE__, \\\n                __LINE__, \\\n                __ASSERT_FUNCTION); \\\n    }\n#endif // USE_CASSERT\n#endif // NDEBUG\n\n#ifdef LOGGING\n#define LIBPROJECT_LOG(msg)  printf msg \n#else\n#define LIBPROJECT_LOG(msg)  // nop\n#endif\n\nnamespace project {\n/**\n * templated delete functor for use in for_each loop over vector\n */\nstruct delete_object\n{\n    template <typename T>\n    void operator()(T *ptr){ delete ptr;}\n};\n\n/** \n * Sum over the results of calling operation for each member in the\n * iterator.  Handier than std::accumulate because we can use with\n * mem_fun to pass in a getter method.\n */\ntemplate <class InputIterator, class T, class Operation >\nT sum_over(InputIterator beg, InputIterator end, T init, Operation op)\n{\n    for ( ; beg != end; ++beg)\n    init = init + op(*beg);\n    return init;\n}\n\n/**\n * Item 6 in Meyers' Effective C++: \n * Explicitly disallow the use of compiler-generated functions you do not want\n */\nclass Uncopyable {\nprotected:                                   // allow construction\n    Uncopyable() {}                            // and destruction of\n    ~Uncopyable() {}                           // derived objects...\nprivate:\n    Uncopyable(const Uncopyable&);             // ...but prevent copying\n    Uncopyable& operator=(const Uncopyable&);\n};\n\nextern const double epsilon;\nbool approx_equals(double a, double b);\n\n} // namespace project\n\n#endif // _LIBPROJECT_UTIL_H\n"
  },
  {
    "path": "cola/libproject/variable.h",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libproject - Solves an instance of the Variable Placement with Separation\n *              Constraints problem, that is a projection onto separation \n *              constraints, whilst always maintaining feasibility.\n *\n * Copyright (C) 2005-2008  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n*/\n\nnamespace project {\n\n\n} // namespace project\n\n"
  },
  {
    "path": "cola/libtopology/Makefile.am",
    "content": "EXTRA_DIST=libtopology.pc.in\n\nlib_LTLIBRARIES = libtopology.la\nlibtopology_la_CPPFLAGS = -I$(top_srcdir) -I$(includedir)/libtopology -fPIC\n\n# Depends on libavoid, libcola, and libvpsc\nlibtopology_la_LIBADD = $(top_builddir)/libavoid/libavoid.la $(top_builddir)/libcola/libcola.la $(top_builddir)/libvpsc/libvpsc.la\n\nlibtopology_la_SOURCES = topology_graph.cpp\\\n\t\t\ttopology_constraints.cpp\\\n\t\t\tcompute_forces.cpp\\\n\t\t\ttopology_constraints_constructor.cpp\\\n\t\t\tresize.cpp \\\n\t\t\tcola_topology_addon.cpp \\\n                        orthogonal_topology.cpp \\\n\t\t\ttopology_constraints.h \\\n\t\t\ttopology_graph.h \\\n\t\t\tcola_topology_addon.h \\\n\t\t\torthogonal_topology.h \\\n\t\t\ttopology_log.h \\\n\t\t\tutil.h\n\n\nlibtopologyincludedir = $(includedir)/libtopology\nlibtopologyinclude_HEADERS = topology_constraints.h \\\n\t\t\ttopology_graph.h \\\n\t\t\tcola_topology_addon.h \\\n\t\t\torthogonal_topology.h \\\n\t\t\ttopology_log.h \\\n\t\t\tutil.h\n\npkgconfigdir = $(libdir)/pkgconfig\npkgconfig_DATA = libtopology.pc\n\nSUBDIRS = . tests\n"
  },
  {
    "path": "cola/libtopology/cola_topology_addon.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libtopology - Classes used in generating and managing topology constraints.\n *\n * Copyright (C) 2012  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n * Author(s):  Michael Wybrow\n*/\n\n#ifndef _USE_MATH_DEFINES\n#define _USE_MATH_DEFINES\n#endif\n#include <cmath>\n\n#include <utility>\n#include <clocale>\n\n#include \"libvpsc/rectangle.h\"\n#include \"libvpsc/constraint.h\"\n#include \"libcola/compound_constraints.h\"\n#include \"libtopology/topology_constraints.h\"\n#include \"libtopology/cola_topology_addon.h\"\n\n// Needs to come last since it will include windows.h on WIN32 and\n// may mess up C++ std library include on GCC 4.4\n#include \"libcola/cola_log.h\"\n\nnamespace topology {\n\nColaTopologyAddon::ColaTopologyAddon()\n    : cola::TopologyAddonInterface(),\n      debugSVGViewBox(nullptr)\n{\n}\n\nColaTopologyAddon::ColaTopologyAddon(\n        std::vector<topology::Node*>& tnodes, \n        std::vector<topology::Edge*>& routes)\n    : cola::TopologyAddonInterface(),\n      topologyNodes(tnodes),\n      topologyRoutes(routes),\n      debugSVGViewBox(nullptr)\n{\n}\n\ncola::TopologyAddonInterface *ColaTopologyAddon::clone(void) const\n{\n    return new ColaTopologyAddon(*this);\n}\n\nvoid ColaTopologyAddon::freeAssociatedObjects(void)\n{\n    if (debugSVGViewBox)\n    {\n        delete debugSVGViewBox;\n        debugSVGViewBox = nullptr;\n    }\n\n    for_each(topologyNodes.begin(), topologyNodes.end(), delete_object());\n    topologyNodes.clear();\n\n    for_each(topologyRoutes.begin(), topologyRoutes.end(), delete_object());\n    topologyRoutes.clear();\n}\n\nvoid ColaTopologyAddon::handleResizes(const cola::Resizes& resizeList,\n        unsigned n, std::valarray<double>& X, std::valarray<double>& Y, \n        cola::CompoundConstraints& ccs, vpsc::Rectangles& boundingBoxes,\n        cola::RootCluster* clusterHierarchy)\n{\n    FILE_LOG(cola::logDEBUG) << \"ColaTopologyAddon::handleResizes()...\";\n    if(topologyNodes.empty()) {\n        COLA_ASSERT(topologyRoutes.empty());\n        return;\n    }\n    // all shapes to be resized are wrapped in a ResizeInfo and\n    // placed in a lookup table, resizes, indexed by id\n    ResizeMap resizes;\n    for(cola::Resizes::const_iterator r=resizeList.begin();r!=resizeList.end();++r) {\n        topology::ResizeInfo ri(topologyNodes[r->getID()],r->getTarget());\n        resizes.insert(std::make_pair(r->getID(),ri));\n    }\n    vpsc::Variables xvs, yvs;\n    vpsc::Constraints xcs, ycs;\n    cola::setupVarsAndConstraints(n, ccs, vpsc::HORIZONTAL, boundingBoxes,\n            clusterHierarchy, xvs, xcs, X);\n    cola::setupVarsAndConstraints(n, ccs, vpsc::VERTICAL, boundingBoxes,\n            clusterHierarchy, yvs, ycs, Y);\n    topology::applyResizes(topologyNodes, topologyRoutes, clusterHierarchy,\n            resizes, xvs, xcs, yvs, ycs);\n    for_each(xvs.begin(), xvs.end(), delete_object());\n    for_each(yvs.begin(), yvs.end(), delete_object());\n    for_each(xcs.begin(), xcs.end(), delete_object());\n    for_each(ycs.begin(), ycs.end(), delete_object());\n    FILE_LOG(cola::logDEBUG) << \"ColaTopologyAddon::handleResizes()... done.\";\n}\n\nvoid ColaTopologyAddon::computePathLengths(unsigned short** G)\n{\n    // we don't need to compute attractive forces between nodes connected\n    // by an edge if there is a topologyRoute between them (since the\n    // p-stress force will be used instead)\n    if (!topologyRoutes.empty()) {\n        for(std::vector<topology::Edge*>::iterator i=topologyRoutes.begin();\n                i!=topologyRoutes.end();++i) {\n            topology::Edge* e=*i;\n            if(!e->cycle()) {\n                unsigned u=e->firstSegment->start->node->id,\n                         v=e->lastSegment->end->node->id;\n                G[u][v]=G[v][u]=2;\n            }\n        }\n    }\n}\n\n\nstatic const double LIMIT = 100000000;\n\nstatic void reduceRange(double& val)\n{\n    val = std::min(val, LIMIT);\n    val = std::max(val, -LIMIT);\n}\n\n\nvoid ColaTopologyAddon::writeSVGFile(std::string basename)\n{\n    // Save current locale\n    char* originalLocale = setlocale(LC_NUMERIC, nullptr);\n    // Set locale to \"C\" to enforce decimal point\n    setlocale(LC_NUMERIC, \"C\");\n\n    std::string filename;\n    if (!basename.empty())\n    {\n        filename = basename;\n    }\n    else\n    {\n        filename = \"libtopology-cola\";\n    }\n    filename += \".svg\";\n    FILE *fp = fopen(filename.c_str(), \"w\");\n\n    if (fp == nullptr)\n    {\n        return;\n    }\n\n    double minX = LIMIT;\n    double minY = LIMIT;\n    double maxX = -LIMIT;\n    double maxY = -LIMIT;\n\n    if (debugSVGViewBox)\n    {\n        double rMinX = debugSVGViewBox->getMinX();\n        double rMaxX = debugSVGViewBox->getMaxX();\n        double rMinY = debugSVGViewBox->getMinY();\n        double rMaxY = debugSVGViewBox->getMaxY();\n   \n        reduceRange(rMinX);\n        reduceRange(rMaxX);\n        reduceRange(rMinY);\n        reduceRange(rMaxY);\n        \n        if (rMinX > -LIMIT)\n        {\n            minX = std::min(minX, rMinX);\n        }\n        if (rMaxX < LIMIT)\n        {\n            maxX = std::max(maxX,rMaxX);\n        }\n        if (rMinY > -LIMIT)\n        {\n            minY = std::min(minY, rMinY);\n        }\n        if (rMaxY < LIMIT)\n        {\n            maxY = std::max(maxY, rMaxY);\n        }\n    }\n    else\n    {\n        // Find the bounds of the diagram.\n        for (size_t i = 0; i < topologyNodes.size(); ++i)\n        {\n            vpsc::Rectangle *rect = topologyNodes[i]->rect;\n            double rMinX = rect->getMinX();\n            double rMaxX = rect->getMaxX();\n            double rMinY = rect->getMinY();\n            double rMaxY = rect->getMaxY();\n       \n            reduceRange(rMinX);\n            reduceRange(rMaxX);\n            reduceRange(rMinY);\n            reduceRange(rMaxY);\n            \n            if (rMinX > -LIMIT)\n            {\n                minX = std::min(minX, rMinX);\n            }\n            if (rMaxX < LIMIT)\n            {\n                maxX = std::max(maxX,rMaxX);\n            }\n            if (rMinY > -LIMIT)\n            {\n                minY = std::min(minY, rMinY);\n            }\n            if (rMaxY < LIMIT)\n            {\n                maxY = std::max(maxY, rMaxY);\n            }\n        }\n        minX -= 50;\n        minY -= 50;\n        maxX += 50;\n        maxY += 50;\n    }\n\n    fprintf(fp, \"<?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?>\\n\");\n    fprintf(fp, \"<svg xmlns:inkscape=\\\"http://www.inkscape.org/namespaces/inkscape\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"100%%\\\" height=\\\"100%%\\\" viewBox=\\\"%g %g %g %g\\\">\\n\", minX, minY, maxX - minX, maxY - minY);\n    fprintf(fp, \"<defs><style type=\\\"text/css\\\"><![CDATA[\"\n            \"text {\"\n            \"    font-family: Helvetica;\"\n            \"    font-size: 7pt;\"\n            \"} \"\n            \"rect {\"\n            \"    stroke-width: 1px;\"\n            \"    stroke: black;\"\n            \"    fill: rgb(249, 240, 210);\"\n            \"    stroke-opacity: 1;\"\n            \"    fill-opacity: 1;\"\n            \"} \"\n            \".edge {\"\n            \"    stroke-width: 1px;\"\n            \"    stroke: black;\"\n            \"    fill: none;\"\n            \"} \"\n            \"]]></style></defs>\\n\");\n\n    fprintf(fp, \"<g inkscape:groupmode=\\\"layer\\\" \"\n            \"inkscape:label=\\\"Edges\\\">\\n\");\n    for (size_t i = 0; i < topologyRoutes.size(); ++i)\n    {\n        straightener::Route *route = topologyRoutes[i]->getRoute();\n\n        fprintf(fp, \"<path id=\\\"edge-%u\\\" class=\\\"edge\\\" d=\\\"\", \n                (unsigned) i);\n        for (size_t p = 0; p < route->n; ++p)\n        {\n            fprintf(fp, \"%c %g %g \", ((p == 0) ? 'M' : 'L'),\n                    route->xs[p], route->ys[p]);\n        }\n        fprintf(fp, \"\\\" />\\n\");\n\n        delete route;\n    }\n    fprintf(fp, \"</g>\\n\");\n    \n    fprintf(fp, \"<g inkscape:groupmode=\\\"layer\\\" \"\n            \"inkscape:label=\\\"Nodes\\\">\\n\");\n    for (size_t i = 0; i < topologyNodes.size(); ++i)\n    {\n        vpsc::Rectangle *rect = topologyNodes[i]->rect;\n        double rMinX = rect->getMinX();\n        double rMaxX = rect->getMaxX();\n        double rMinY = rect->getMinY();\n        double rMaxY = rect->getMaxY();\n   \n        reduceRange(rMinX);\n        reduceRange(rMaxX);\n        reduceRange(rMinY);\n        reduceRange(rMaxY);\n        \n        fprintf(fp, \"<rect id=\\\"rect-%u\\\" x=\\\"%g\\\" y=\\\"%g\\\" width=\\\"%g\\\" \"\n                \"height=\\\"%g\\\" />\\n\", (unsigned) i, rMinX, rMinY, \n                rMaxX - rMinX, rMaxY - rMinY);\n        fprintf(fp, \"<text x=\\\"%g\\\" y=\\\"%g\\\">%u</text>\\n\", rMinX + 3, \n                rMinY + 11, (unsigned) i);\n    }\n    fprintf(fp, \"</g>\\n\");\n\n    fprintf(fp, \"</svg>\\n\");\n    fclose(fp);\n    // Restore locale\n    setlocale(LC_NUMERIC, originalLocale);\n}\n\ndouble ColaTopologyAddon::computeStress(void) const\n{\n    double stress = 0;\n    if (!topologyRoutes.empty())\n    {\n        stress = topology::computeStress(topologyRoutes);\n        FILE_LOG(cola::logDEBUG2)<<\"s(topology)=\"<<stress;\n    }\n    return stress;\n}\n\nbool ColaTopologyAddon::useTopologySolver(void) const\n{\n    return (!topologyNodes.empty() && !topologyRoutes.empty());\n}\n\nvoid ColaTopologyAddon::makeFeasible(bool generateNonOverlapConstraints, \n        vpsc::Rectangles& boundingBoxes, cola::RootCluster* clusterHierarchy)\n{\n    if (generateNonOverlapConstraints)\n    {\n        // Set up topologyNodes:\n        unsigned nodesTotal = boundingBoxes.size();\n        topologyNodes = topology::Nodes(nodesTotal);\n        for (unsigned id = 0; id < nodesTotal; ++id)\n        {\n            topologyNodes[id] = new topology::Node(id, boundingBoxes[id]);\n        }\n    }\n  \n    if (clusterHierarchy)\n    {\n        // create cluster boundaries\n        unsigned clusterCount=0;\n        for (std::vector<cola::Cluster*>::iterator i = \n                clusterHierarchy->clusters.begin();\n                i != clusterHierarchy->clusters.end(); ++i, ++clusterCount)\n        {\n            (*i)->computeBoundary(boundingBoxes);\n            cola::ConvexCluster* c=dynamic_cast<cola::ConvexCluster*>(*i);\n            if(c!=nullptr) {\n                double idealCircumference=2.0*sqrt(M_PI*c->area(boundingBoxes));\n                std::vector<topology::EdgePoint*> eps;\n                for(unsigned j=0;j<c->hullRIDs.size();++j) {\n                    const unsigned id = c->hullRIDs[j];\n                    const unsigned char corner = c->hullCorners[j];\n                    COLA_ASSERT(id < topologyNodes.size());\n                    //cout << \"addToPath(vs[\" << id << \"],\";\n                    topology::Node *node= topologyNodes[id];\n                    topology::EdgePoint::RectIntersect ri;\n                    switch(corner) {\n                        case 0: \n                            ri=topology::EdgePoint::BR; \n                            //cout << \"EdgePoint::BR);\" << endl;\n                            break;\n                        case 1: \n                            ri=topology::EdgePoint::TR; \n                            //cout << \"EdgePoint::TR);\" << endl;\n                            break;\n                        case 2: \n                            ri=topology::EdgePoint::TL;\n                            //cout << \"EdgePoint::TL);\" << endl;\n                            break;\n                        default:\n                            COLA_ASSERT(corner==3);\n                            ri=topology::EdgePoint::BL; \n                            //cout << \"EdgePoint::BL);\" << endl;\n                            break;\n                    }\n                    eps.push_back(new topology::EdgePoint(node,ri));\n                }\n                eps.push_back(eps[0]);\n                //cout << \"addToPath(vs[\" << eps[0]->node->id << \"],(EdgePoint::RectIntersect)\"<<eps[0]->rectIntersect<<\");\" << endl;\n                topology::Edge* e = new topology::Edge(clusterCount,idealCircumference, eps);\n                topologyRoutes.push_back(e);\n            }\n        }\n    }\n}\n\nvoid ColaTopologyAddon::moveTo(const vpsc::Dim dim, \n        vpsc::Variables& vs, vpsc::Constraints& cs,\n        std::valarray<double> &coords, cola::RootCluster* clusterHierarchy)\n{\n    topology::setNodeVariables(topologyNodes,vs);\n    topology::TopologyConstraints t(dim, topologyNodes, topologyRoutes,\n            clusterHierarchy, vs, cs);\n    bool interrupted;\n    int loopBreaker=100;\n    do {\n        interrupted=t.solve();\n        loopBreaker--;\n    } while(interrupted&&loopBreaker>0);\n    for(topology::Nodes::iterator i=topologyNodes.begin();\n            i!=topologyNodes.end();++i) {\n        topology::Node* v=*i;\n        coords[v->id]=v->rect->getCentreD(dim);\n    }\n}\n\ndouble ColaTopologyAddon::applyForcesAndConstraints(\n        cola::ConstrainedFDLayout *layout, const vpsc::Dim dim,\n        std::valarray<double>& g, vpsc::Variables& vs,\n        vpsc::Constraints& cs, std::valarray<double> &coords, \n        cola::DesiredPositionsInDim& des, double oldStress)\n{\n    FILE_LOG(cola::logDEBUG1) << \"applying topology preserving layout...\";\n    vpsc::Rectangle::setXBorder(0);\n    vpsc::Rectangle::setYBorder(0);\n    if(dim==vpsc::HORIZONTAL) {\n        vpsc::Rectangle::setXBorder(0);\n    }\n    topology::setNodeVariables(topologyNodes,vs);\n    topology::TopologyConstraints t(dim, topologyNodes, topologyRoutes,\n            layout->clusterHierarchy, vs, cs);\n    bool interrupted;\n    int loopBreaker=100;\n    cola::SparseMap HMap(layout->n);\n    layout->computeForces(dim,HMap,g);\n    std::valarray<double> oldCoords=coords;\n    t.computeForces(g,HMap);\n    cola::SparseMatrix H(HMap);\n    layout->applyDescentVector(g,oldCoords,coords,oldStress,\n            layout->computeStepSize(H,g,g));\n    cola::setVariableDesiredPositions(vs,cs,des,coords);\n    do {\n        interrupted=t.solve();\n        unsigned vptr=0;\n        for(topology::Nodes::iterator i=topologyNodes.begin();\n                i!=topologyNodes.end();++i,++vptr) {\n            topology::Node* v=*i;\n            coords[v->id]=v->rect->getCentreD(dim);\n        }\n        for(;vptr<coords.size();vptr++) {\n            double d = vs[vptr]->finalPosition;\n            coords[vptr]=d;\n            layout->boundingBoxes[vptr]->moveCentreD(dim,d);\n        }\n        loopBreaker--;\n    } while(interrupted&&loopBreaker>0);\n    vpsc::Rectangle::setXBorder(0);\n    vpsc::Rectangle::setYBorder(0);\n    return layout->computeStress();\n}\n\n} // topology namespace\n\n"
  },
  {
    "path": "cola/libtopology/cola_topology_addon.h",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libtopology - Classes used in generating and managing topology constraints.\n *\n * Copyright (C) 2012  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n * Author: Michael Wybrow\n*/\n\n#ifndef LAYOUT_TOPOLOGY_CONNECTOR_H\n#define LAYOUT_TOPOLOGY_CONNECTOR_H\n\n#include <vector>\n\n#include \"libcola/cola.h\"\n#include \"libtopology/topology_graph.h\"\n\n/**\n * @namespace topology\n * @brief libtopology: Extensions for topology preservation for libcola \n *        and libavoid libraries.\n*/\nnamespace topology {\n\n\n/** \n *  @brief  This class can be passed to libcola to replace some functionality\n *          to provide topology preserving layout.\n *\n *  You should instantiate this class with a given set of nodes and edges to\n *  preserve and pass it to cola::ConstrainedFDLayout::setTopology().\n */\nclass ColaTopologyAddon : public cola::TopologyAddonInterface\n{\n    public:\n        /**\n         * @brief Constructs an empty ColaTopologyAddon instance for \n         *        collecting topology information.\n         *\n         * Passing libcola an empty instance of this class will cause libcola\n         * to populate it with current topology information for nodes and \n         * edges when cola::ConstrainedFDLayout::makeFeasible() is run.  This\n         * information is then available in the #topologyNodes and \n         * #topologyRoutes member variables.\n         */\n        ColaTopologyAddon();\n \n        /**\n         * @brief Constructs a ColaTopologyAddon instance with a specified\n         *        set of topology information.\n         *\n         * Passing libcola an instance of this class with given topology \n         * information will cause libcola to generate topology preserving\n         * constraints to prevent nodes from crossing edges, and for the \n         * topology of the network to be preserved during layout.\n         *\n         * This topology information is usually not constructed from scratch\n         * but rather extracted from an empty ColaTopologyAddon instance\n         * after COLA has determined a feasible layout for it.\n         *\n         * @param[in] tnodes  Topology information for nodes.\n         * @param[in] routes  Topology information for edges.\n         */\n        ColaTopologyAddon(topology::Nodes& tnodes, topology::Edges& routes);\n    \n        //! @brief  Writes an SVG file displaying the current topology of \n        //!         the nodes and edges.\n        //!\n        //! @param[in] filename  A string indicating the filename (without \n        //!                      extension) for the output file.  Defaults to\n        //!                      \"libtopology-cola.svg\" if no filename is given.\n        //!\n        void writeSVGFile(std::string filename = std::string());\n\n        cola::TopologyAddonInterface *clone(void) const;\n\n        void freeAssociatedObjects(void);\n        void handleResizes(const cola::Resizes& resizeList, unsigned n,\n                std::valarray<double>& X, std::valarray<double>& Y, \n                cola::CompoundConstraints& ccs, \n                vpsc::Rectangles& boundingBoxes,\n                cola::RootCluster* clusterHierarchy);\n        void computePathLengths(unsigned short** G);\n        double computeStress(void) const;\n        bool useTopologySolver(void) const;\n        void makeFeasible(bool generateNonOverlapConstraints, \n                vpsc::Rectangles& boundingBoxes, \n                cola::RootCluster* clusterHierarchy);\n        void moveTo(const vpsc::Dim dim, vpsc::Variables& vs, \n                vpsc::Constraints& cs, std::valarray<double> &coords, \n                cola::RootCluster* clusterHierarchy);\n        double applyForcesAndConstraints(cola::ConstrainedFDLayout *layout, \n                const vpsc::Dim dim, std::valarray<double>& g, \n                vpsc::Variables& vs, vpsc::Constraints& cs, \n                std::valarray<double> &coords, \n                cola::DesiredPositionsInDim& des, double oldStress);\n    \n        //! Topology information: node positions and sizes.\n        topology::Nodes topologyNodes;\n        \n        //! Topology information: edges routes.\n        topology::Edges topologyRoutes;\n\n        vpsc::Rectangle *debugSVGViewBox;\n};\n\n}\n#endif\n"
  },
  {
    "path": "cola/libtopology/compute_forces.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libtopology - Classes used in generating and managing topology constraints.\n *\n * Copyright (C) 2007-2008  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n * Author(s):  Tim Dwyer\n *\n*/\n\n/*\n * Method body and support routines for topology::TopologyConstraints::computeForces.\n */\n\n// cmath needs ::strcpy_s under MinGW so include cstring.\n#include <cstring>\n\n#include <valarray>\n\n#include \"libvpsc/assertions.h\"\n#include \"libcola/sparse_matrix.h\"\n#include \"libtopology/topology_constraints.h\"\n#include \"libtopology/topology_log.h\"\nusing std::valarray;\n\nnamespace topology {\n/*\n * @param u an EdgePoint\n * @param v another EdgePoint\n * @param dx x distance between u and v\n * @param dy y distance between u and v\n * @param dx2 squared x distance between u and v\n * @param dy2 squared y distance between u and v\n * @return euclidean distance between a pair of EdgePoint (u,v)\n */\nstatic double len(const EdgePoint* u, const EdgePoint* v,\n        double& dx, double& dy,\n        double& dx2, double& dy2) {\n    dx=u->posX()-v->posX();\n    dy=u->posY()-v->posY();\n    dx2=dx*dx;\n    dy2=dy*dy;\n    return sqrt(dx2+dy2);\n}\nstatic double gRule1(vpsc::Dim dim, const EdgePoint* a, const EdgePoint* b) {\n    double dxab, dyab, dxab2, dyab2;\n    double lab=dim==vpsc::HORIZONTAL?\n        len(a,b,dxab,dyab,dxab2,dyab2):\n        len(a,b,dyab,dxab,dyab2,dxab2);\n    COLA_ASSERT(lab!=0);\n    return dxab/lab;\n}\nstatic double gRule2(vpsc::Dim dim, const EdgePoint* a, const EdgePoint* b,\n        const EdgePoint* c)\n{\n    double dxab, dyab, dxab2, dyab2;\n    double lab=dim==vpsc::HORIZONTAL?\n        len(a,b,dxab,dyab,dxab2,dyab2):\n        len(a,b,dyab,dxab,dyab2,dxab2);\n    COLA_ASSERT(lab!=0);\n    double dxbc, dybc, dxbc2, dybc2;\n    double lbc=dim==vpsc::HORIZONTAL?\n        len(b,c,dxbc,dybc,dxbc2,dybc2):\n        len(b,c,dybc,dxbc,dybc2,dxbc2);\n    COLA_ASSERT(lbc!=0);\n    return dxab/lab - dxbc/lbc;\n}\nstatic double hRuleD1(vpsc::Dim dim, const EdgePoint* u, const EdgePoint* v,\n          const double dl)\n{\n    double dx, dy, dx2, dy2;\n    double l=dim==vpsc::HORIZONTAL?\n        len(u,v,dx,dy,dx2,dy2):\n        len(u,v,dy,dx,dy2,dx2);\n    COLA_ASSERT(l!=0);\n    return dl*(dx2/(l*l*l) - 1/l) + dx2/(l*l);\n}\nstatic double hRuleD2(vpsc::Dim dim, const EdgePoint* u, const EdgePoint* v,\n          const EdgePoint* w, const double dl)\n{\n    double dxuv, dyuv, dxuv2, dyuv2;\n    double luv=dim==vpsc::HORIZONTAL?\n        len(u,v,dxuv,dyuv,dxuv2,dyuv2):\n        len(u,v,dyuv,dxuv,dyuv2,dxuv2);\n    COLA_ASSERT(luv!=0);\n    double dxvw, dyvw, dxvw2, dyvw2;\n    double lvw=dim==vpsc::HORIZONTAL?\n        len(v,w,dxvw,dyvw,dxvw2,dyvw2):\n        len(v,w,dyvw,dxvw,dyvw2,dxvw2);\n    COLA_ASSERT(lvw!=0);\n    double p1=dl*(dxuv2/(luv*luv*luv) - 1/luv + dxvw2/(lvw*lvw*lvw) - 1/lvw);\n    double p2=(dxuv/luv - dxvw/lvw);\n    return p1+p2*p2;\n}\nstatic double hRule2(vpsc::Dim dim, const EdgePoint* u, const EdgePoint* v,\n         const EdgePoint* w, const double dl)\n{\n    double dxuv, dyuv, dxuv2, dyuv2;\n    double luv=dim==vpsc::HORIZONTAL?\n        len(u,v,dxuv,dyuv,dxuv2,dyuv2):\n        len(u,v,dyuv,dxuv,dyuv2,dxuv2);\n    COLA_ASSERT(luv!=0);\n    double dxvw, dyvw, dxvw2, dyvw2;\n    double lvw=dim==vpsc::HORIZONTAL?\n        len(v,w,dxvw,dyvw,dxvw2,dyvw2):\n        len(v,w,dyvw,dxvw,dyvw2,dxvw2);\n    COLA_ASSERT(lvw!=0);\n    return -dl*dxuv2/(luv*luv*luv)\n        +dl/luv\n        -dxuv2/(luv*luv)\n        +dxuv*dxvw/(luv*lvw);\n}\nstatic double hRule3(vpsc::Dim dim, const EdgePoint* u, const EdgePoint* v,\n        const EdgePoint* w, const double dl)\n{\n    double dxuv, dyuv, dxuv2, dyuv2;\n    double luv=dim==vpsc::HORIZONTAL?\n        len(u,v,dxuv,dyuv,dxuv2,dyuv2):\n        len(u,v,dyuv,dxuv,dyuv2,dxuv2);\n    COLA_ASSERT(luv!=0);\n    double dxvw, dyvw, dxvw2, dyvw2;\n    double lvw=dim==vpsc::HORIZONTAL?\n        len(v,w,dxvw,dyvw,dxvw2,dyvw2):\n        len(v,w,dyvw,dxvw,dyvw2,dxvw2);\n    COLA_ASSERT(lvw!=0);\n    return -dl*dxvw2/(lvw*lvw*lvw)\n        -dxvw2/(lvw*lvw)\n        +dl/lvw\n        +dxuv*dxvw/(luv*lvw);\n}\nstatic double hRule4(vpsc::Dim dim, const EdgePoint* a, const EdgePoint* b,\n        const EdgePoint* c, const EdgePoint* d)\n{\n    double dxab, dyab, dxab2, dyab2;\n    double lab=dim==vpsc::HORIZONTAL?\n        len(a,b,dxab,dyab,dxab2,dyab2):\n        len(a,b,dyab,dxab,dyab2,dxab2);\n    COLA_ASSERT(lab!=0);\n    double dxcd, dycd, dxcd2, dycd2;\n    double lcd=dim==vpsc::HORIZONTAL?\n        len(c,d,dxcd,dycd,dxcd2,dycd2):\n        len(c,d,dycd,dxcd,dycd2,dxcd2);\n    COLA_ASSERT(lcd!=0);\n    return -dxab*dxcd/(lab*lcd);\n}\nstatic double hRule56(vpsc::Dim dim, const EdgePoint* u, const EdgePoint* v,\n        const EdgePoint* a, const EdgePoint* b, const EdgePoint* c)\n{\n    double dxuv, dyuv, dxuv2, dyuv2;\n    double luv=dim==vpsc::HORIZONTAL?\n        len(u,v,dxuv,dyuv,dxuv2,dyuv2):\n        len(u,v,dyuv,dxuv,dyuv2,dxuv2);\n    COLA_ASSERT(luv!=0);\n    double dxab, dyab, dxab2, dyab2;\n    double lab=dim==vpsc::HORIZONTAL?\n        len(a,b,dxab,dyab,dxab2,dyab2):\n        len(a,b,dyab,dxab,dyab2,dxab2);\n    COLA_ASSERT(lab!=0);\n    double dxbc, dybc, dxbc2, dybc2;\n    double lbc=dim==vpsc::HORIZONTAL?\n        len(b,c,dxbc,dybc,dxbc2,dybc2):\n        len(b,c,dybc,dxbc,dybc2,dxbc2);\n    COLA_ASSERT(lbc!=0);\n    return dxuv/luv * ( dxbc/lbc - dxab/lab );\n}\nstatic double hRule7(vpsc::Dim dim, const EdgePoint* a, const EdgePoint* b,\n        const EdgePoint* c, const EdgePoint* d, const double dl)\n{\n    double dxab, dyab, dxab2, dyab2;\n    double lab=dim==vpsc::HORIZONTAL?\n        len(a,b,dxab,dyab,dxab2,dyab2):\n        len(a,b,dyab,dxab,dyab2,dxab2);\n    COLA_ASSERT(lab!=0);\n    double dxbc, dybc, dxbc2, dybc2;\n    double lbc=dim==vpsc::HORIZONTAL?\n        len(b,c,dxbc,dybc,dxbc2,dybc2):\n        len(b,c,dybc,dxbc,dybc2,dxbc2);\n    COLA_ASSERT(lbc!=0);\n    double dxcd, dycd, dxcd2, dycd2;\n    double lcd=dim==vpsc::HORIZONTAL?\n        len(c,d,dxcd,dycd,dxcd2,dycd2):\n        len(c,d,dycd,dxcd,dycd2,dxcd2);\n    COLA_ASSERT(lcd!=0);\n    return dl*(1/lbc - dxbc2/(lbc*lbc*lbc))\n        +(dxab/lab - dxbc/lbc)*(dxbc/lbc - dxcd/lcd);\n}\nstatic double hRule8(vpsc::Dim dim, const EdgePoint* u, const EdgePoint* v,\n        const EdgePoint* w, const EdgePoint* a, const EdgePoint* b,\n        const EdgePoint* c)\n{\n    double dxuv, dyuv, dxuv2, dyuv2;\n    double luv=dim==vpsc::HORIZONTAL?\n        len(u,v,dxuv,dyuv,dxuv2,dyuv2):\n        len(u,v,dyuv,dxuv,dyuv2,dxuv2);\n    COLA_ASSERT(luv!=0);\n    double dxvw, dyvw, dxvw2, dyvw2;\n    double lvw=dim==vpsc::HORIZONTAL?\n        len(v,w,dxvw,dyvw,dxvw2,dyvw2):\n        len(v,w,dyvw,dxvw,dyvw2,dxvw2);\n    COLA_ASSERT(lvw!=0);\n    double dxab, dyab, dxab2, dyab2;\n    double lab=dim==vpsc::HORIZONTAL?\n        len(a,b,dxab,dyab,dxab2,dyab2):\n        len(a,b,dyab,dxab,dyab2,dxab2);\n    COLA_ASSERT(lab!=0);\n    double dxbc, dybc, dxbc2, dybc2;\n    double lbc=dim==vpsc::HORIZONTAL?\n        len(b,c,dxbc,dybc,dxbc2,dybc2):\n        len(b,c,dybc,dxbc,dybc2,dxbc2);\n    COLA_ASSERT(lbc!=0);\n    return (dxuv/luv - dxvw/lvw) * (dxab/lab - dxbc/lbc);\n}\n/*\n * a wrapper for a SparseMap so that we can index it by two EdgePoint\n */\nstruct SparseMapMap {\n    cola::SparseMap &H;\n    SparseMapMap(cola::SparseMap &H) : H(H) {}\n    double& operator()(const EdgePoint *i, const EdgePoint* j) {\n        return H(i->node->id,j->node->id);\n    }\n};\n/*\n * a wrapper for a valarray so that we can index it by an EdgePoint\n */\ntemplate <typename T>\nstruct ArrayMap {\n    valarray<T>& a;\n    ArrayMap(valarray<T>& a) : a(a) {}\n    double& operator[](const EdgePoint *i) {\n        return a[i->node->id];\n    }\n};\n/*\n * Compute the forces associated with each EdgePoint (bend or end point) along each each\n * on the nodes/rectangles in the graph.\n */\nvoid TopologyConstraints::computeForces(valarray<double>& gradient,\n        cola::SparseMap& hessian)\n{\n    FILE_LOG(logDEBUG1) << \"TopologyConstraints::computeForces\";\n    SparseMapMap H(hessian);\n    ArrayMap<double> g(gradient);\n    const EdgePoint *u,*v,*w;\n    for(Edges::const_iterator i=edges.begin();i!=edges.end();i++) {\n        //printf(\"Straightening path:\\n\");\n        //edges[i]->print();\n        Edge* e=*i;\n        ConstEdgePoints path;\n        e->getPath(path);\n        unsigned n=path.size();\n        FILE_LOG(logDEBUG2) << \"  path: n=\"<<n;\n        COLA_ASSERT(n>=2);\n        double d=e->idealLength;\n\n        double weight=2.0/(d*d);\n        double dl=d-e->pathLength();\n\n        if(dl>=0) continue;\n\n        // first and last entries\n        // gradient\n        u=path[0]; v=path[1];\n        COLA_ASSERT(v->inSegment->length()>0);\n        double h=weight*hRuleD1(dim,u,v,dl);\n        H(u,u)+=h;\n        double g1=weight*dl*gRule1(dim,u,v);\n        g[u]-=g1;\n        if(n==2||dl>0) {\n            // rule 1\n            H(v,v)+=h;\n            g[v]+=g1; \n            H(u,v)-=h;\n            H(v,u)-=h;\n            continue;\n        }\n        u=path[n-2]; v=path[n-1];\n        g[v]+=weight*dl*gRule1(dim,u,v);\n        H(v,v)+=weight*hRuleD1(dim,u,v,dl);\n        // remaining diagonal entries\n        for(unsigned j=1;j<n-1;j++) {\n            u=path[j-1], v=path[j], w=path[j+1];\n            COLA_ASSERT(v->inSegment->length()>0);\n            COLA_ASSERT(w->inSegment->length()>0);\n            H(v,v)+=weight*hRuleD2(dim,u,v,w,dl);\n            g[v]+=weight*dl*gRule2(dim,u,v,w);\n        }\n\n        // off diagonal entries\n        // hRule 2\n        u=path[0], v=path[1], w=path[2];\n        h=weight*hRule2(dim,u,v,w,dl);\n        H(u,v)+=h;\n        H(v,u)+=h;\n        // hRule 3\n        u=path[n-3], v=path[n-2], w=path[n-1];\n        h=weight*hRule3(dim,u,v,w,dl);\n        H(v,w)+=h;\n        H(w,v)+=h;\n        // hRule 4\n        u=path[0], v=path[n-1];\n        h=weight*hRule4(dim,u,path[1],path[n-2],v);\n        H(u,v)+=h;\n        H(v,u)+=h;\n        if(n==3) continue;\n        for(unsigned j=2;j<n-1;j++) {\n            // hRule 5\n            u=path[0],v=path[j];\n            h=weight*hRule56(dim,u,path[1],path[j-1],v,path[j+1]);\n            H(u,v)+=h;\n            H(v,u)+=h;\n            // hRule 6\n            u=path[n-1], v=path[n-1-j];\n            h=weight*hRule56(dim,u,path[n-2],path[n-1-j-1],v,path[n-1-j+1]);\n            H(u,v)+=h;\n            H(v,u)+=h;\n            // hRule 7\n            u=path[j-1], v=path[j];\n            h=weight*hRule7(dim,path[j-2],u,v,path[j+1],dl);\n            H(u,v)+=h;\n            H(v,u)+=h;\n        } \n        for(unsigned j=1;j<n-3;j++) {\n            for(unsigned k=j+2;k<n-1;k++) {\n                u=path[j]; v=path[k];\n                h=weight*hRule8(dim,path[j-1],u,path[j+1],path[k-1],v,path[k+1]);\n                H(u,v)+=h;\n                H(v,u)+=h;\n            }\n        }\n    }\n    for(unsigned i=0;i<gradient.size();i++) {\n        COLA_ASSERT(gradient[i]==gradient[i]);\n    }\n    /*\n    for(unsigned i=0;i<edges.size();i++) {\n        Edge* e=edges[i];\n        vector<unsigned>& path=e->path;\n        unsigned n=path.size();\n        printf(\"d=%f;\\n\",e->idealLength);\n        printf(\"X={\");\n        for(unsigned j=0;j<n;j++) {\n            printf(\"%f\",nodes[path[j]]->x);\n            if(j<n-1) {\n                printf(\",\");\n            }\n        }\n        printf(\"};\\n\");\n        printf(\"Y={\");\n        for(unsigned j=0;j<n;j++) {\n            printf(\"%f\",nodes[path[j]]->y);\n            if(j<n-1) {\n                printf(\",\");\n            }\n        }\n        printf(\"};\\n\");\n        printf(\"H=\\n\");\n        for(unsigned j=0;j<n;j++) {\n            for(unsigned k=0;k<n;k++) {\n                unsigned u=path[j], v=path[k];\n                printf(\"%f \",H(u,v));\n            }\n            printf(\"\\n\");\n        }\n        printf(\"g=\");\n        for(unsigned j=0;j<n;j++) {\n            printf(\"%f \",g[path[j]]);\n        }\n        printf(\"\\n\");\n    }\n    */\n}\n} // namespace topology\n"
  },
  {
    "path": "cola/libtopology/doc/description.doc",
    "content": "/*!\n\n\\if LIBTOPOLOGY_DOC\n@mainpage libtopology: Extensions to support Topology-preserving Layout\n\\endif\n\\if ADAPTAGRAMS_DOC\n@page libtopology libtopology &mdash; Overview\n\\endif\n\nlibtopology is a cross-platform C++ library providing extensions to the libcola and libavoid libraries to support topology-preserving layout.\n\nlibtopology is part of the \n<a href=\"http://www.adaptagrams.org/\">Adaptagrams project</a>. \nThere are no official releases yet, though the code is stable and \navailable from the Adaptagrams \n<a href=\"https://github.com/mjwybrow/adaptagrams\">GitHub \nrepository</a>.\n\nThe API is documented using Doxygen.  The documentation you are currently \nreading can be obtained by running doxygen in the cola directory. \n\nlibcola is written and maintained by \n<a href=\"http://users.monash.edu/~mwybrow/\">Michael Wybrow</a> and\n<a href=\"http://ialab.it.infotech.monash.edu/~dwyer/\">Tim Dwyer</a>,\nmembers of <a href=\"http://ialab.it.monash.edu/\">Immersive Analytics Lab</a> at Monash University, Australia.\n\nThe algorithms used for Topology Preservation are described in the following papers.  If you use libtopology, please cite the relevant paper.\n-  Tim Dwyer, Kim Marriott, and Michael Wybrow. Topology preserving\n   constrained graph layout. In Proc. 16th Intl. Symp. Graph Drawing\n   (GD'08), volume 5417 of Lecture Notes in Computer Science, pages\n   230-241. Springer, 2009.\n\n*/\n\n\n"
  },
  {
    "path": "cola/libtopology/libtopology.pc.in",
    "content": "prefix=@prefix@\nexec_prefix=@exec_prefix@\nlibdir=@libdir@\nincludedir=@includedir@\n\nName: libtopology\nDescription: A library containing extensions to libcola to support topology preserving constraint-based layout.\nURL: http://www.adaptagrams.org/\nVersion: @VERSION@\nRequires:\nLibs: -L${libdir} -ltopology\nCflags: -I${includedir}/libtopology"
  },
  {
    "path": "cola/libtopology/orthogonal_topology.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libtopology - Classes used in generating and managing topology constraints.\n *\n * Copyright (C) 2012  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n * Author(s):  Michael Wybrow\n*/\n\n\n#include <cstdlib>\n#include <cfloat>\n#include <cmath>\n#include <set>\n#include <list>\n#include <algorithm>\n\n#ifdef ORTHOG_TOPOLOGY_DEBUG\n#include <sstream>\n#include <iomanip>\n#endif\n\n#include \"libavoid/router.h\"\n#include \"libavoid/geomtypes.h\"\n#include \"libavoid/shape.h\"\n#include \"libavoid/orthogonal.h\"\n#include \"libavoid/connend.h\"\n#include \"libavoid/connector.h\"\n#include \"libavoid/junction.h\"\n#include \"libavoid/vpsc.h\"\n#include \"libavoid/assertions.h\"\n#include \"libavoid/hyperedgetree.h\"\n#include \"libavoid/mtst.h\"\n#include \"libavoid/scanline.h\"\n\n#include \"libtopology/orthogonal_topology.h\"\n#include \"libvpsc/solve_VPSC.h\"\n#include \"libvpsc/variable.h\"\n#include \"libvpsc/constraint.h\"\n\n//#define ORTHOG_TOPOLOGY_DEBUG\n\n#define CONSTRAIN_CHECKPOINTS  false\n\n\nnamespace topology {\n\nusing namespace Avoid;\n\nstatic const double CHANNEL_MAX = 100000000;\n\n// Used to sort points when merging LayoutEdgeSegments.\n// Sorts the indexes, by point position in one dimension.\nclass CmpIndexes\n{\n    public:\n        CmpIndexes(ConnRef *conn, size_t dim)\n            : connRef(conn),\n              dimension(dim)\n        {\n        }\n        bool operator()(size_t lhs, size_t rhs)\n        {\n            return connRef->displayRoute().ps[lhs][dimension] <\n                    connRef->displayRoute().ps[rhs][dimension];\n        }\n    private:\n        ConnRef *connRef;\n        size_t dimension;\n};\n\n\nclass LayoutEdgeSegmentSeparation\n{\n    public:\n    double distance;\n    vpsc::Variable *var1;\n    vpsc::Variable *var2;\n    ConnRef *connRef;\n\n    bool operator<(const LayoutEdgeSegmentSeparation& rhs) const\n    {\n        COLA_ASSERT((var1 != rhs.var1) || (var2 != rhs.var2));\n        if (distance == rhs.distance)\n        {\n            return (var1 < rhs.var1) || (var2 < rhs.var2);\n        }\n        return distance < rhs.distance;\n    }\n};\ntypedef std::set<LayoutEdgeSegmentSeparation> LayoutEdgeSegmentSeparations;\n\nclass LayoutEdgeSegment : public ShiftSegment\n{\n    public:\n        // For shiftable segments.\n        LayoutEdgeSegment(ConnRef *conn, const size_t low, const size_t high,\n                bool isSBend, bool isZBend, const size_t dim, double minLim,\n                double maxLim)\n            : ShiftSegment(dim),\n              connRef(conn),\n              variable(nullptr),\n              fixed(false),\n              finalSegment(false),\n              containsCheckpoint(false),\n              sBend(isSBend),\n              zBend(isZBend)\n        {\n            indexes.push_back(low);\n            indexes.push_back(high);\n            minSpaceLimit = minLim;\n            maxSpaceLimit = maxLim;\n        }\n        // For fixed segments.\n        LayoutEdgeSegment(ConnRef *conn, const size_t low, const size_t high,\n                const size_t dim)\n            : ShiftSegment(dim),\n              connRef(conn),\n              variable(nullptr),\n              fixed(true),\n              finalSegment(false),\n              containsCheckpoint(false),\n              sBend(false),\n              zBend(false)\n        {\n            indexes.push_back(low);\n            indexes.push_back(high);\n            // This has no space to shift.\n            minSpaceLimit = lowPoint()[dim];\n            maxSpaceLimit = lowPoint()[dim];\n        }\n        virtual ~LayoutEdgeSegment()\n        {\n        }\n        Point& lowPoint(void)\n        {\n            return connRef->displayRoute().ps[indexes.front()];\n        }\n        Point& highPoint(void)\n        {\n            return connRef->displayRoute().ps[indexes.back()];\n        }\n        const Point& lowPoint(void) const\n        {\n            return connRef->displayRoute().ps[indexes.front()];\n        }\n        const Point& highPoint(void) const\n        {\n            return connRef->displayRoute().ps[indexes.back()];\n        }\n        double nudgeDistance(void) const\n        {\n            return connRef->router()->routingParameter(idealNudgingDistance);\n        }\n        bool immovable(void) const\n        {\n            return ! zigzag();\n        }\n        void createSolverVariable(void)\n        {\n            int varID = connRef->id();\n            double varPos = lowPoint()[dimension];\n\n            // Use a low weight for segments.\n            // (Constraints will hold them in place on shapes.)\n            double weight = 0.001;\n\n            variable = new vpsc::Variable(varID, varPos, weight);\n        }\n        bool overlapsWith(const ShiftSegment *rhs, const size_t dim) const\n        {\n            COLA_UNUSED(rhs);\n            COLA_UNUSED(dim);\n\n            return false;\n        }\n        void updatePositionsFromSolver(void)\n        {\n            if (fixed)\n            {\n                return;\n            }\n            double newPos = variable->finalPosition;\n            for (size_t it = 0; it < indexes.size(); ++it)\n            {\n                size_t index = indexes[it];\n                connRef->displayRoute().ps[index][dimension] = newPos;\n            }\n        }\n        int fixedOrder(bool& isFixed) const\n        {\n            double nudgeDist = nudgeDistance();\n            double pos = lowPoint()[dimension];\n            bool minLimited = ((pos - minSpaceLimit) < nudgeDist);\n            bool maxLimited = ((maxSpaceLimit - pos) < nudgeDist);\n\n            if (fixed || (minLimited && maxLimited))\n            {\n                isFixed = true;\n                return 0;\n            }\n            else if (minLimited)\n            {\n                return 1;\n            }\n            else if (maxLimited)\n            {\n                return -1;\n            }\n            return 0;\n        }\n        int order(void) const\n        {\n            if (lowC())\n            {\n                return -1;\n            }\n            else if (highC())\n            {\n                return 1;\n            }\n            return 0;\n        }\n        bool zigzag(void) const\n        {\n            return sBend || zBend;\n        }\n\n        ConnRef *connRef;\n        vpsc::Variable *variable;\n        std::vector<size_t> indexes;\n        bool fixed;\n        bool finalSegment;\n        std::list<int> endsInShapeIndexes;\n        bool containsCheckpoint;\n    private:\n        bool sBend;\n        bool zBend;\n        bool lowC(void) const\n        {\n            // This is true if this is a cBend and its adjoining points\n            // are at lower positions.\n            if (!finalSegment && !zigzag() && !fixed &&\n                    (minSpaceLimit == lowPoint()[dimension]))\n            {\n                return true;\n            }\n            return false;\n        }\n        bool highC(void) const\n        {\n            // This is true if this is a cBend and its adjoining points\n            // are at higher positions.\n            if (!finalSegment && !zigzag() && !fixed &&\n                    (maxSpaceLimit == lowPoint()[dimension]))\n            {\n                return true;\n            }\n            return false;\n        }\n};\ntypedef std::list<LayoutEdgeSegment *> LayoutEdgeSegmentList;\n\nclass LayoutObstacle\n{\n    public:\n    LayoutObstacle()\n        : dimension(0),\n          obstacle(nullptr),\n          variable(nullptr)\n    {\n    }\n    LayoutObstacle(ShapeRef *shape, const size_t dim)\n        : dimension(dim),\n          obstacle(shape),\n          variable(nullptr)\n    {\n        // Take the bounds of the shape\n        Avoid::Box bBox = shape->routingBox();\n        min = bBox.min;\n        max = bBox.max;\n    }\n    LayoutObstacle(JunctionRef *junction, const size_t dim)\n        : dimension(dim),\n          obstacle(junction),\n          variable(nullptr)\n    {\n        // Don't nudge segments attached to junctions,\n        // so just use the junction position here.\n        Point pos = junction->position();\n\n        min = pos;\n        max = pos;\n    }\n    ShapeRef *shape(void) const\n    {\n        return (dynamic_cast<ShapeRef *> (obstacle));\n    }\n    JunctionRef *junction(void) const\n    {\n        return (dynamic_cast<JunctionRef *> (obstacle));\n    }\n    double halfSizeInDim(const size_t dim)\n    {\n        return (max[dim] - min[dim]) / 2;\n    }\n    double centreX(void) const\n    {\n        return min.x + ((max.x - min.x) / 2);\n    }\n    double centreY(void) const\n    {\n        return min.y + ((max.y - min.y) / 2);\n    }\n    Point centre(void) const\n    {\n        return Point(centreX(), centreY());\n    }\n    Point shapeCentre(void) const\n    {\n        COLA_ASSERT(shape());\n        return shape()->position();\n    }\n    void createSolverVariable(void)\n    {\n        int varID = obstacle->id();\n\n        // Use higher weight than alignment variables (0.001) so we don't\n        // get moved by them.\n        double weight = 1.0;\n\n        variable = new vpsc::Variable(varID, centre()[dimension], weight);\n    }\n    void updatePositionsFromSolver(void)\n    {\n        double varVal = variable->finalPosition;\n#ifdef ORTHOG_TOPOLOGY_DEBUG\n        fprintf(stderr, \"Obstacle Pos: %d, %g\\n\", obstacle->id(), varVal);\n#endif\n        ShapeRef *shapeRef = shape();\n        if (shapeRef)\n        {\n            Point newPos = shapeRef->position();\n            newPos[dimension] = varVal;\n            shapeRef->setCentrePos(newPos);\n        }\n    }\n\n    size_t dimension;\n\n    Point min;\n    Point max;\n\n    Obstacle *obstacle;\n\n    vpsc::Variable *variable;\n};\ntypedef std::vector<LayoutObstacle> LayoutObstacleVector;\n\nstatic const int SIDE_RIGHT = -1;\nstatic const int SIDE_LEFT  = 1;\n\nclass LayoutNode : public Node\n{\n    public:\n    LayoutNode(LayoutObstacle *layObstacle, const double position)\n        : Node(layObstacle->obstacle, position),\n          layoutObstacle(layObstacle),\n          side(0)\n    {\n    }\n\n    LayoutObstacle *layoutObstacle;\n    int side;\n};\n\n\n\nenum ScanVisDirFlag {\n    VisDirNone  = 0,\n    VisDirUp    = 1,\n    VisDirDown  = 2\n};\ntypedef unsigned int ScanVisDirFlags;\n\n\nstruct PosVertInf\n{\n    PosVertInf(double p, VertInf *vI, ScanVisDirFlags d = VisDirNone)\n        : pos(p),\n          vert(vI),\n          dirs(d)\n    {\n    }\n\n    bool operator<(const PosVertInf& rhs) const\n    {\n        if (pos != rhs.pos)\n        {\n            return pos < rhs.pos;\n        }\n        if ((vert->id == rhs.vert->id) && (vert->id == Avoid::dummyOrthogID))\n        {\n            // Multiple dummy nodes can get placed at the same point for\n            // multiple ShapeConnectionPins on junctions (outside of shapes).\n            // We only need one at each position, so multiples can be seen\n            // as equal here.\n            return false;\n        }\n        if (vert->id != rhs.vert->id)\n        {\n            return vert->id < rhs.vert->id;\n        }\n        return dirs < rhs.dirs;\n    }\n\n    double pos;\n    VertInf *vert;\n\n    // A bitfield marking the direction of visibility (in this dimension)\n    // made up of VisDirDown (for visibility towards lower position values)\n    // and VisDirUp (for visibility towards higher position values).\n    //\n    ScanVisDirFlags dirs;\n};\n\n\n// Temporary structure used to store the possible horizontal visibility\n// lines arising from the vertical sweep.\nclass LineSegment\n{\npublic:\n    LineSegment(const double& b, const double& f, const double& p,\n            bool ss = false, VertInf *bvi = nullptr, VertInf *fvi = nullptr)\n        : begin(b),\n          finish(f),\n          pos(p),\n          shapeSide(ss)\n    {\n        COLA_UNUSED(bvi);\n        COLA_UNUSED(fvi);\n        COLA_ASSERT(begin < finish);\n    }\n    LineSegment(const double& bf, const double& p, VertInf *bfvi = nullptr)\n        : begin(bf),\n          finish(bf),\n          pos(p),\n          shapeSide(false)\n    {\n        COLA_UNUSED(bfvi);\n    }\n\n    // Order by begin, pos, finish.\n    bool operator<(const LineSegment& rhs) const\n    {\n        if (begin != rhs.begin)\n        {\n            return begin < rhs.begin;\n        }\n        if (pos != rhs.pos)\n        {\n            return pos < rhs.pos;\n        }\n        if (finish != rhs.finish)\n        {\n            return finish < rhs.finish;\n        }\n        COLA_ASSERT(shapeSide == rhs.shapeSide);\n        return false;\n    }\n\n    bool overlaps(const LineSegment& rhs) const\n    {\n        if ((begin == rhs.begin) && (pos == rhs.pos) &&\n                (finish == rhs.finish))\n        {\n            // Lines are exactly equal.\n            return true;\n        }\n\n        if (pos == rhs.pos)\n        {\n            if (((begin >= rhs.begin) && (begin <= rhs.finish)) ||\n                ((rhs.begin >= begin) && (rhs.begin <= finish)) )\n            {\n                // They are colinear and overlap by some amount.\n                return true;\n            }\n        }\n        return false;\n    }\n\n    double begin;\n    double finish;\n    double pos;\n\n    // XXX shapeSide is unused and could possibly be removed?\n    bool shapeSide;\n\nprivate:\n\t// MSVC wants to generate the assignment operator and the default\n\t// constructor, but fails.  Therefore we declare them private and\n\t// don't implement them.\n    LineSegment & operator=(LineSegment const &);\n    LineSegment();\n};\n\ntypedef std::list<LineSegment> SegmentList;\n\n\nstatic bool insideLayoutObstacleBounds(const Point& point,\n        const LayoutObstacle& anchor)\n{\n    Point zero(0, 0);\n    if ((anchor.min == zero) && (anchor.max == zero))\n    {\n        // We can't be inside the invalid rectangle.\n        return false;\n    }\n\n    for (size_t i = 0; i < 2; ++i)\n    {\n        if (point[i] < anchor.min[i])\n        {\n            return false;\n        }\n        if (point[i] > anchor.max[i])\n        {\n            return false;\n        }\n    }\n    return true;\n}\n\n\n// When processing the scanline, it may be possible that shapes share edges,\n// or a connector segment shares a position with a shape edge.  Thus, we\n// order objects in the scanline list so that shape right sides come before\n// connector segments which come before shape left sides at the same position.\nstruct LayoutScanlineCmpNodePos\n{\n    bool operator()(const Node* u, const Node* v) const\n    {\n        if (fabs(u->pos - v->pos) > 0.000000001)\n        {\n            return u->pos < v->pos;\n        }\n\n        // Use the pointers to the base objects to differentiate them.\n        void *up = (u->v) ? (void *) u->v :\n                ((u->c) ? (void *) u->c : (void *) u->ss);\n        void *vp = (v->v) ? (void *) v->v :\n                ((v->c) ? (void *) v->c : (void *) v->ss);\n\n        const LayoutNode *layoutNodeU = dynamic_cast<const LayoutNode *> (u);\n        const LayoutNode *layoutNodeV = dynamic_cast<const LayoutNode *> (v);\n\n        // For things occurring at the same position on the scanline,\n        // order shape SIDE_RIGHT (-1) < segments (0) < shape SIDE_LEFT (1).\n        int valU = (layoutNodeU) ? layoutNodeU->side : 0;\n        int valV = (layoutNodeV) ? layoutNodeV->side : 0;\n        if (valU != valV)\n        {\n            return valU < valV;\n        }\n\n        return up < vp;\n    }\n};\n\ntypedef std::set<Node*,LayoutScanlineCmpNodePos> LayoutScanlineNodeSet;\n\n// Processes sweep events to determine orthogonal constraints affecting each\n// shape and line segment.  This is done in three passes to cater for events\n// that occur at the same position.  First pass adds all obejcts at position\n// to the scanline.  The second pass processes the scanline and generates\n// constraints.  The third pass removes any objects ending at that position\n// from the scanline.\nstatic void processLayoutConstraintEvent(LayoutScanlineNodeSet& scanline,\n        Event *e, size_t dim,  LayoutObstacleVector& obstacleVector,\n        LineReps *lineReps, vpsc::Constraints& cs,\n        LayoutEdgeSegmentSeparations& less, unsigned int pass,\n        const double moveLimit, const double idealNudgeDist)\n{\n    COLA_UNUSED(lineReps);\n\n    //size_t altDim = (dim + 1) % 2;\n    Node *v = e->v;\n\n    bool Equality = true;\n    bool NonEquality = false;\n\n    // Scanline housekeeping.\n    if ( (pass == 1) && ((e->type == Open) || (e->type == SegOpen)) )\n    {\n        // Opening events.  First pass.\n\n        std::pair<LayoutScanlineNodeSet::iterator, bool> result =\n                scanline.insert(v);\n        v->iter = result.first;\n        COLA_ASSERT(result.second);\n\n        LayoutScanlineNodeSet::iterator it = v->iter;\n        // Work out neighbours\n        if (it != scanline.begin())\n        {\n            Node *u = *(--it);\n            v->firstAbove = u;\n            u->firstBelow = v;\n        }\n        it = v->iter;\n        if (++it != scanline.end())\n        {\n            Node *u = *it;\n            v->firstBelow = u;\n            u->firstAbove = v;\n        }\n    }\n    else if ( (pass == 3) &&  ((e->type == SegClose) || (e->type == Close)) )\n    {\n        // Closing events.  Third pass.\n\n        // Clean up neighbour pointers.\n        Node *l = v->firstAbove, *r = v->firstBelow;\n        if (l != nullptr)\n        {\n            l->firstBelow = v->firstBelow;\n        }\n        if (r != nullptr)\n        {\n            r->firstAbove = v->firstAbove;\n        }\n\n        size_t result;\n        result = scanline.erase(v);\n        COLA_ASSERT(result == 1);\n        delete v;\n    }\n\n    if (pass != 2)\n    {\n        // Do remaining stuff only if we are in the second pass.\n        return;\n    }\n\n    if ((e->type == SegClose) || (e->type == SegOpen))\n    {\n        // This is an edge segment from a connector.\n\n        // Constraint edge segments that end in shapes to be fixed to those\n        // shapes in the shift dimension.\n        LayoutEdgeSegment *les = dynamic_cast<LayoutEdgeSegment *> (v->ss);\n        for (std::list<int>::iterator it = les->endsInShapeIndexes.begin();\n                it != les->endsInShapeIndexes.end(); ++it)\n        {\n            assert(les->lowPoint()[dim] == les->highPoint()[dim]);\n            Point endpoint = (e->type == SegOpen) ? les->lowPoint() :\n                    les->highPoint();\n            if (insideLayoutObstacleBounds(endpoint, obstacleVector[*it]))\n            {\n                double sepDist = obstacleVector[*it].centre()[dim] -\n                        les->lowPoint()[dim];\n                vpsc::Constraint *constraint = new vpsc::Constraint(\n                        les->variable, obstacleVector[*it].variable,\n                        sepDist, Equality);\n                cs.push_back(constraint);\n            }\n\n            /*\n            if (lineReps)\n            {\n                LineRep line;\n                line.begin[dim] = constraint->left->desiredPosition;\n                line.end[dim] = constraint->right->desiredPosition;\n                line.begin[altDim] = e->pos;\n                line.end[altDim] = e->pos;\n                lineReps->push_back(line);\n            }\n            */\n        }\n\n        // Constrain edge segment to separate from left neighbouring shape.\n        Node *beforeV = v->firstAbove;\n        LayoutNode *beforeLayoutV = dynamic_cast<LayoutNode *> (beforeV);\n        if (beforeLayoutV && (beforeLayoutV->side == SIDE_RIGHT))\n        {\n            double sepDist =\n                    beforeLayoutV->layoutObstacle->halfSizeInDim(dim);\n\n            COLA_ASSERT(sepDist >= 0);\n            vpsc::Constraint *constraint = new vpsc::Constraint(\n                    beforeLayoutV->layoutObstacle->variable,\n                    les->variable, sepDist, NonEquality);\n            cs.push_back(constraint);\n\n        }\n\n        // Constrain edge segment to separate from right neighbouring shape.\n        Node *afterV = v->firstBelow;\n        LayoutNode *afterLayoutV = dynamic_cast<LayoutNode *> (afterV);\n        if (afterLayoutV && (afterLayoutV->side == SIDE_LEFT))\n        {\n            double sepDist =\n                    afterLayoutV->layoutObstacle->halfSizeInDim(dim);\n\n            COLA_ASSERT(sepDist >= 0);\n            vpsc::Constraint *constraint = new vpsc::Constraint(\n                    les->variable, afterLayoutV->layoutObstacle->variable,\n                    sepDist, NonEquality);\n            cs.push_back(constraint);\n\n        }\n\n        // Constrain edge segment to separate from left neighbouring segment.\n        if (beforeV && beforeV->ss)\n        {\n            LayoutEdgeSegment *beforeLes =\n                dynamic_cast<LayoutEdgeSegment *> (beforeV->ss);\n            assert(beforeLes);\n\n            if (les->connRef != beforeLes->connRef)\n            {\n                // If not segments from same edge.\n                if (CONSTRAIN_CHECKPOINTS && les->containsCheckpoint &&\n                        beforeLes->containsCheckpoint)\n                {\n                    // Both segments are passing a checkpoint.\n                    // Constrain them together.\n                    double sepDist =\n                            (les->lowPoint()[les->dimension] -\n                                    beforeLes->lowPoint()[les->dimension]);\n\n                    vpsc::Constraint *constraint = new vpsc::Constraint(\n                            beforeLes->variable, les->variable,\n                            sepDist, Equality);\n                    cs.push_back(constraint);\n                }\n                else\n                {\n                    // Normal segments.  Constrain them with Nudging distance\n                    // or the current distance apart, if this is smalled.\n                    double sepDist = std::min(idealNudgeDist,\n                            (les->lowPoint()[les->dimension] -\n                             beforeLes->lowPoint()[les->dimension]));\n                    sepDist = std::max(sepDist, 0.0);\n                    COLA_ASSERT(sepDist >= 0);\n                    vpsc::Constraint *constraint = new vpsc::Constraint(\n                            beforeLes->variable, les->variable,\n                            sepDist, NonEquality);\n                    cs.push_back(constraint);\n                }\n            }\n        }\n\n        // Constrain edge segment to separate from right neighbouring segment.\n        if (afterV && afterV->ss)\n        {\n            LayoutEdgeSegment *afterLes =\n                dynamic_cast<LayoutEdgeSegment *> (afterV->ss);\n            assert(afterLes);\n\n            if (les->connRef != afterLes->connRef)\n            {\n                // If not segments from same edge.\n                if (CONSTRAIN_CHECKPOINTS && les->containsCheckpoint &&\n                        afterLes->containsCheckpoint)\n                {\n                    // Both segments are passing a checkpoint.a\n                    // Constrain them together.\n                    double sepDist =\n                            (afterLes->lowPoint()[les->dimension] -\n                             les->lowPoint()[les->dimension]);\n\n                    vpsc::Constraint *constraint = new vpsc::Constraint(\n                            les->variable, afterLes->variable,\n                            sepDist, Equality);\n                    cs.push_back(constraint);\n                }\n                else\n                {\n                    // Normal segments.  Constrain them with Nudging distance\n                    // or the current distance apart, if this is smalled.\n                    double sepDist = std::min(idealNudgeDist,\n                            (afterLes->lowPoint()[les->dimension] -\n                                    les->lowPoint()[les->dimension]));\n                    sepDist = std::max(sepDist, 0.0);\n                    COLA_ASSERT(sepDist >= 0);\n\n                    vpsc::Constraint *constraint = new vpsc::Constraint(\n                            les->variable, afterLes->variable,\n                            sepDist, NonEquality);\n                    cs.push_back(constraint);\n                }\n            }\n        }\n    }\n\n    if ((e->type == Close) || (e->type == Open))\n    {\n        // This is a left or right shape side, beginning or ending.\n\n        LayoutNode *ln = dynamic_cast<LayoutNode *> (v);\n\n        if (ln->side == SIDE_LEFT)\n        {\n            Node *beforeV = v->firstAbove;\n            LayoutNode *beforeLayoutV = dynamic_cast<LayoutNode *> (beforeV);\n            LayoutEdgeSegment *beforeLes = (beforeV == nullptr) ? nullptr :\n                    dynamic_cast<LayoutEdgeSegment *> (beforeV->ss);\n\n            if (beforeLayoutV && (beforeLayoutV->side == SIDE_RIGHT))\n            {\n                // Constrain this left shape side to be separated from\n                // a neighbouring shape right side to the left.\n                double sepDist =\n                        ln->layoutObstacle->halfSizeInDim(dim) +\n                        beforeLayoutV->layoutObstacle->halfSizeInDim(dim);\n                COLA_ASSERT(sepDist >= 0);\n\n                vpsc::Constraint *constraint = new vpsc::Constraint(\n                        beforeLayoutV->layoutObstacle->variable,\n                        ln->layoutObstacle->variable, sepDist, NonEquality);\n                cs.push_back(constraint);\n\n            }\n            else if (beforeLes)\n            {\n                // Constrain this left shape side to be separated from\n                // a neighbouring edge segment to the left.\n                double sepDist =\n                        ln->layoutObstacle->halfSizeInDim(dim);\n                COLA_ASSERT(sepDist >= 0);\n\n                vpsc::Constraint *constraint = new vpsc::Constraint(\n                        beforeLes->variable, ln->layoutObstacle->variable,\n                        sepDist, NonEquality);\n                cs.push_back(constraint);\n            }\n        }\n        else if (ln->side == SIDE_RIGHT)\n        {\n            Node *afterV = v->firstBelow;\n            LayoutNode *afterLayoutV = dynamic_cast<LayoutNode *> (afterV);\n            LayoutEdgeSegment *afterLes = (afterV == nullptr) ? nullptr :\n                    dynamic_cast<LayoutEdgeSegment *> (afterV->ss);\n\n            if (afterLayoutV && (afterLayoutV->side == SIDE_LEFT))\n            {\n                // Constrain this right shape side to be separated from\n                // a neighbouring shape left side to the right.\n                double sepDist =\n                        ln->layoutObstacle->halfSizeInDim(dim) +\n                        afterLayoutV->layoutObstacle->halfSizeInDim(dim);\n                COLA_ASSERT(sepDist >= 0);\n\n                vpsc::Constraint *constraint = new vpsc::Constraint(\n                        ln->layoutObstacle->variable,\n                        afterLayoutV->layoutObstacle->variable,\n                        sepDist, NonEquality);\n                cs.push_back(constraint);\n\n            }\n            else if (afterLes)\n            {\n                // Constrain this right shape side to be separated from\n                // a neighbouring edge segment to the right.\n                double sepDist =\n                        ln->layoutObstacle->halfSizeInDim(dim);\n                COLA_ASSERT(sepDist >= 0);\n\n                vpsc::Constraint *constraint = new vpsc::Constraint(\n                        ln->layoutObstacle->variable, afterLes->variable,\n                        sepDist, NonEquality);\n                cs.push_back(constraint);\n            }\n        }\n    }\n\n    // Compute all possible shifts that can be made from a segment ending,\n    // to straighten it to a sibling segment.\n    if (e->type == SegClose)\n    {\n        // Possible points of movement.\n        LayoutEdgeSegment *les = dynamic_cast<LayoutEdgeSegment *> (v->ss);\n        for(LayoutScanlineNodeSet::iterator it = scanline.begin();\n                it != scanline.end(); ++it)\n        {\n            size_t altDim = (les->dimension + 1) % 2;\n            Node *u = *it;\n            LayoutEdgeSegment *otherLes =\n                    dynamic_cast<LayoutEdgeSegment *> (u->ss);\n            if (otherLes && (les->connRef == otherLes->connRef) &&\n                    !(les->containsCheckpoint) &&\n                    !(otherLes->containsCheckpoint) &&\n                    (les->highPoint()[altDim] == otherLes->lowPoint()[altDim]))\n            {\n                // We consider moving segments from the same connector\n                // separated by a single segment, where neither contains a\n                // checkpoint.\n                LayoutEdgeSegmentSeparation newLess;\n                newLess.distance = fabs(les->highPoint()[les->dimension] -\n                        otherLes->lowPoint()[les->dimension]);\n                newLess.var1 = les->variable;\n                newLess.var2 = otherLes->variable;\n                newLess.connRef = les->connRef;\n                if (newLess.distance < moveLimit)\n                {\n                    less.insert(newLess);\n                }\n\n                /*\n                if (lineReps)\n                {\n                    LineRep line;\n                    line.begin[dim] = les->highPoint()[les->dimension];\n                    line.end[dim] = otherLes->highPoint()[les->dimension];\n                    line.begin[altDim] = e->pos;\n                    line.end[altDim] = e->pos;\n                    lineReps->push_back(line);\n                }\n                */\n            }\n        }\n    }\n}\n\n// This class is used to record and update endpoints of segments in the same\n// dimension that shapes are being moved in the optimisation step.  this is\n// done only for the first and last endpoints of connectors for the shape they\n// terminate inside of.\nclass EndpointAnchorInMoveDir\n{\n    public:\n        EndpointAnchorInMoveDir(size_t dimension, ConnRef *connRef,\n                size_t endptIndex, size_t obstacleIndex,\n                double obstacleOffset)\n            : dimension(dimension),\n              connRef(connRef),\n              endptIndex(endptIndex),\n              obstacleIndex(obstacleIndex),\n              obstacleOffset(obstacleOffset)\n        {\n        }\n\n        void updatePosition(const LayoutObstacleVector& obstacleVector)\n        {\n            Point obstacleCentre = obstacleVector[obstacleIndex].shapeCentre();\n            connRef->displayRoute().ps[endptIndex][dimension] =\n                    obstacleCentre[dimension] + obstacleOffset;\n        }\n\n        size_t dimension;\n        ConnRef *connRef;\n        size_t endptIndex;\n        size_t obstacleIndex;\n        double obstacleOffset;\n};\ntypedef std::list<EndpointAnchorInMoveDir> EndpointAnchorList;\n\n\nstatic void buildOrthogonalLayoutSegments(Router *router,\n        const size_t dim, LayoutEdgeSegmentList& segmentList,\n        LayoutObstacleVector& obstacleVector,\n        EndpointAnchorList& extraTerminalsList)\n{\n    // We can handle bends that occur as a result of checkpoints as intentional.\n    // In this case we don't try to remove those bends.  Also, we keep a fixed\n    // (equality) spacing between nudges paths at the checkpoint, so part of\n    // the shared path doesn't get ripped away.\n    const bool preserveCheckpointBends = true;\n\n    const size_t n = router->m_obstacles.size();\n\n    obstacleVector = LayoutObstacleVector(n);\n\n    // If we're going to nudge final segments, then cache the shape\n    // rectangles to save us rebuilding them multiple times.\n    ObstacleList::iterator obstacleIt = router->m_obstacles.begin();\n    for (unsigned i = 0; i < n; i++)\n    {\n        ShapeRef *shape = dynamic_cast<ShapeRef *> (*obstacleIt);\n        JunctionRef *junction = dynamic_cast<JunctionRef *> (*obstacleIt);\n        if (shape)\n        {\n            obstacleVector[i] = LayoutObstacle(shape, dim);\n        }\n        else if (junction)\n        {\n            obstacleVector[i] = LayoutObstacle(junction, dim);\n        }\n        ++obstacleIt;\n    }\n\n    size_t altDim = (dim + 1) % 2;\n    // For each connector.\n    for (ConnRefList::const_iterator curr = router->connRefs.begin();\n            curr != router->connRefs.end(); ++curr)\n    {\n        if ((*curr)->routingType() != ConnType_Orthogonal)\n        {\n            continue;\n        }\n        Polygon& displayRoute = (*curr)->displayRoute();\n        bool routeHasCheckpointInfo = !displayRoute.checkpointsOnRoute.empty();\n        // Determine all line segments that we are interested in shifting.\n        // We don't consider the first or last segment of a path.\n        for (size_t i = 1; i < displayRoute.size(); ++i)\n        {\n            bool containsCheckpoint = false;\n            if (preserveCheckpointBends && routeHasCheckpointInfo)\n            {\n                containsCheckpoint =\n                        (displayRoute.checkpointsOnSegment(i - 1).size() > 0);\n            }\n\n            if (displayRoute.ps[i - 1][dim] == displayRoute.ps[i][dim])\n            {\n                // It's a segment in the dimension we are processing,\n                size_t indexLow = i - 1;\n                size_t indexHigh = i;\n                COLA_ASSERT(displayRoute.ps[i - 1][altDim] !=\n                        displayRoute.ps[i][altDim]);\n                if (displayRoute.ps[i - 1][altDim] >\n                        displayRoute.ps[i][altDim])\n                {\n                    indexLow = i;\n                    indexHigh = i - 1;\n                }\n\n                double thisPos = displayRoute.ps[i][dim];\n\n                if ((i == 1) || ((i + 1) == displayRoute.size()))\n                {\n                    // Determine available space for nudging these\n                    // final segments.\n                    double minLim = -CHANNEL_MAX;\n                    double maxLim = CHANNEL_MAX;\n\n                    // Limit their movement by the length of\n                    // adjoining segments.\n                    bool first = (i == 1) ? true : false;\n                    bool last = ((i + 1) == displayRoute.size()) ?\n                            true : false;\n                    // If the position of the opposite end of the\n                    // attached segment is within the shape boundaries\n                    // then we want to use this as an ideal position\n                    // for the segment.\n                    if (!first)\n                    {\n                        double prevPos = displayRoute.ps[i - 2][dim];\n                        if (prevPos < thisPos)\n                        {\n                            minLim = std::max(minLim, prevPos);\n                        }\n                        else if (prevPos > thisPos)\n                        {\n                            maxLim = std::min(maxLim, prevPos);\n                        }\n                    }\n                    if (!last)\n                    {\n                        double nextPos = displayRoute.ps[i + 1][dim];\n                        if (nextPos < thisPos)\n                        {\n                            minLim = std::max(minLim, nextPos);\n                        }\n                        else if (nextPos > thisPos)\n                        {\n                            maxLim = std::min(maxLim, nextPos);\n                        }\n                    }\n\n                    std::list<int> endsInShapeIndexes;\n                    if (first || last)\n                    {\n                    // Also limit their movement to the edges of the\n                    // shapes they begin or end within.\n                    for (size_t k = 0; k < obstacleVector.size(); ++k)\n                    {\n                        double shapeMin = obstacleVector[k].min[dim];\n                        double shapeMax = obstacleVector[k].max[dim];\n                        if (first && insideLayoutObstacleBounds(displayRoute.ps[i - 1],\n                                    obstacleVector[k]))\n                        {\n                            minLim = std::max(minLim, shapeMin);\n                            maxLim = std::min(maxLim, shapeMax);\n                            endsInShapeIndexes.push_back(k);\n                            continue;\n                        }\n                        if (last && insideLayoutObstacleBounds(displayRoute.ps[i],\n                                    obstacleVector[k]))\n                        {\n                            minLim = std::max(minLim, shapeMin);\n                            maxLim = std::min(maxLim, shapeMax);\n                            endsInShapeIndexes.push_back(k);\n                        }\n                    }\n                    }\n\n                    // Shiftable.\n                    LayoutEdgeSegment *segment = new LayoutEdgeSegment(\n                            *curr, indexLow, indexHigh, false, false, dim,\n                            minLim, maxLim);\n                    segment->endsInShapeIndexes = endsInShapeIndexes;\n                    segment->containsCheckpoint = containsCheckpoint;\n                    segment->finalSegment = true;\n                    segmentList.push_back(segment);\n                    continue;\n                }\n\n                // The segment probably has space to be shifted.\n                double minLim = -CHANNEL_MAX;\n                double maxLim = CHANNEL_MAX;\n\n                bool isSBend = false;\n                bool isZBend = false;\n\n                double prevPos = displayRoute.ps[i - 2][dim];\n                double nextPos = displayRoute.ps[i + 1][dim];\n                if ( ((prevPos < thisPos) && (nextPos > thisPos)) ||\n                     ((prevPos > thisPos) && (nextPos < thisPos)) )\n                {\n\n                    // Determine limits if the s-bend is not due to an\n                    // obstacle.  In this case we need to limit the channel\n                    // to the span of the adjoining segments to this one.\n                    if ((prevPos < thisPos) && (nextPos > thisPos))\n                    {\n                        minLim = std::max(minLim, prevPos);\n                        maxLim = std::min(maxLim, nextPos);\n                        isZBend = true;\n                    }\n                    else\n                    {\n                        minLim = std::max(minLim, nextPos);\n                        maxLim = std::min(maxLim, prevPos);\n                        isSBend = true;\n                    }\n                }\n                else\n                {\n                    // isCBend: Both adjoining segments are in the same\n                    // direction.  We indicate this for later by setting\n                    // the maxLim or minLim to the segment position.\n                    if (prevPos < thisPos)\n                    {\n                        minLim = thisPos;\n                    }\n                    else\n                    {\n                        maxLim = thisPos;\n                    }\n                }\n\n                LayoutEdgeSegment *nss = new LayoutEdgeSegment(*curr,\n                        indexLow, indexHigh, isSBend, isZBend, dim,\n                        minLim, maxLim);\n                nss->containsCheckpoint = containsCheckpoint;\n                segmentList.push_back(nss);\n            }\n            else if (displayRoute.ps[i - 1][altDim] ==\n                    displayRoute.ps[i][altDim])\n            {\n                // It's a segment in the dimension opposite to the one we\n                // are processing.  For these we need to record their position\n                // relative to the shape they terminate in, so if that shape\n                // is moved along the direction of these segments, their\n                // endpoint is updated.\n                if (i == 1)\n                {\n                    // This is the first segment of the connector.\n\n                    // Also limit their movement to the edges of the\n                    // shapes they begin or end within.\n                    for (size_t k = 0; k < obstacleVector.size(); ++k)\n                    {\n                        if (insideLayoutObstacleBounds(displayRoute.ps[i - 1],\n                                    obstacleVector[k]))\n                        {\n                            double offset = displayRoute.ps[i - 1][dim] -\n                                    obstacleVector[k].centre()[dim];\n                            EndpointAnchorInMoveDir terminal(\n                                    dim, *curr, i - 1, k, offset);\n                            extraTerminalsList.push_back(terminal);\n                        }\n                    }\n                }\n                if ((i + 1) == displayRoute.size())\n                {\n                    // This is the final segment of the connector.\n\n                    // Also limit their movement to the edges of the\n                    // shapes they begin or end within.\n                    for (size_t k = 0; k < obstacleVector.size(); ++k)\n                    {\n                        if (insideLayoutObstacleBounds(displayRoute.ps[i],\n                                    obstacleVector[k]))\n                        {\n                            double offset = displayRoute.ps[i][dim] -\n                                    obstacleVector[k].centre()[dim];\n                            EndpointAnchorInMoveDir terminal(\n                                    dim, *curr, i, k, offset);\n                            extraTerminalsList.push_back(terminal);\n                        }\n                    }\n                }\n            }\n        }\n    }\n}\n\nstatic void setupOrthogonalLayoutConstraints(Router *router,\n        const size_t dim, LayoutEdgeSegmentList& segmentList,\n        LayoutObstacleVector& obstacleVector,\n        EndpointAnchorList& extraTerminalsList,\n        cola::CompoundConstraints& ccs, cola::VariableIDMap& idMap,\n        cola::RootCluster *clusterHierarchy, vpsc::Rectangles& rs,\n        LineReps *lineReps, const double moveLimit)\n{\n    COLA_UNUSED(router);\n\n    int count = 1;\n    if (segmentList.empty())\n    {\n        // There are no segments, so we can just return now.\n        return;\n    }\n\n\n    vpsc::Variables vs;\n    vpsc::Constraints cs;\n    vpsc::Rectangles boundingBoxes;\n    LayoutEdgeSegmentSeparations less;\n\n    cola::VariableIDMap colaToCurrMap;\n    // Do a sweep to determine space for shifting segments.\n    size_t altDim = (dim + 1) % 2;\n    const size_t ovn = obstacleVector.size();\n    const size_t cpn = segmentList.size();\n    std::vector<double> offsetsVector(ovn, 0.0);\n    // Set up the events for the sweep.\n    size_t totalEvents = (4 * ovn) + (2 * cpn);\n    Event **events = new Event*[totalEvents];\n    unsigned ctr = 0;\n    for (unsigned i = 0; i < ovn; i++)\n    {\n        LayoutObstacle& obstacle = obstacleVector[i];\n        JunctionRef *junction = obstacle.junction();\n        if (junction && ! junction->positionFixed())\n        {\n        }\n        Point min = obstacle.min;\n        Point max = obstacle.max;\n        boundingBoxes.push_back(new vpsc::Rectangle(min.x, max.x, min.y, max.y));\n\n        LayoutNode *v = new LayoutNode(&obstacle, min[dim]);\n        v->side = SIDE_LEFT;\n        events[ctr++] = new Event(Open, v, min[altDim]);\n        events[ctr++] = new Event(Close, v, max[altDim]);\n\n        v = new LayoutNode(&obstacle, max[dim]);\n        v->side = SIDE_RIGHT;\n        events[ctr++] = new Event(Open, v, min[altDim]);\n        events[ctr++] = new Event(Close, v, max[altDim]);\n\n        obstacle.createSolverVariable();\n        vs.push_back(obstacle.variable);\n        unsigned index = vs.size() - 1;\n        bool reverse = false;\n        unsigned colaIndex = idMap.mappingForVariable(obstacle.shape()->id(),\n                reverse);\n        if (colaIndex != obstacle.shape()->id())\n        {\n            colaToCurrMap.addMappingForVariable(colaIndex, index);\n        }\n\n        // Calculate offsets in case the cola and libavoid shapes have\n        // different sizes.\n        if (colaIndex < rs.size())\n        {\n            double offset = rs[colaIndex]->getCentreD(dim) -\n                    obstacleVector[i].centre()[dim];\n            if (fabs(offset) > 0.001)\n            {\n                offsetsVector[i] = offset;\n            }\n#ifdef ORTHOG_TOPOLOGY_DEBUG\n            fprintf(stderr, \"Shape %03d (cola: %03d) centre offset %g \"\n                    \"(from %g, %g)\\n\", index, colaIndex,\n                    offsetsVector[i], obstacleVector[i].centre()[dim],\n                    rs[colaIndex]->getCentreD(dim));\n#endif\n        }\n    }\n    for (LayoutEdgeSegmentList::iterator curr = segmentList.begin();\n            curr != segmentList.end(); ++curr)\n    {\n        const Point& lowPt = (*curr)->lowPoint();\n        const Point& highPt = (*curr)->highPoint();\n\n        (*curr)->createSolverVariable();\n        vs.push_back((*curr)->variable);\n\n        COLA_ASSERT(lowPt[dim] == highPt[dim]);\n        COLA_ASSERT(lowPt[altDim] < highPt[altDim]);\n        Node *v = new Node(*curr, lowPt[dim]);\n        events[ctr++] = new Event(SegOpen, v, lowPt[altDim]);\n        events[ctr++] = new Event(SegClose, v, highPt[altDim]);\n    }\n    qsort((Event*)events, (size_t) totalEvents, sizeof(Event*), compare_events);\n\n    // Update the variable Ids on the existing compound constraints\n    for (size_t i = 0; i < ccs.size(); ++i)\n    {\n        cola::CompoundConstraint *cc = ccs[i];\n        cc->updateVarIDsWithMapping(colaToCurrMap);\n        cc->updateShapeOffsetsForDifferentCentres(offsetsVector);\n    }\n\n    double idealNudgeDist = router->routingParameter(idealNudgingDistance);\n    // Process the sweep.\n    LayoutScanlineNodeSet scanline;\n    double thisPos = (totalEvents > 0) ? events[0]->pos : 0;\n    unsigned int posStartIndex = 0;\n    unsigned int posFinishIndex = 0;\n    for (unsigned i = 0; i <= totalEvents; ++i)\n    {\n        // If we have finished the current scanline or all events, then we\n        // process the events on the current scanline in a couple of passes.\n        if ((i == totalEvents) || (events[i]->pos != thisPos))\n        {\n            posFinishIndex = i;\n            for (int pass = 2; pass <= 3; ++pass)\n            {\n                for (unsigned j = posStartIndex; j < posFinishIndex; ++j)\n                {\n                    processLayoutConstraintEvent(scanline, events[j], dim,\n                            obstacleVector, lineReps, cs, less, pass,\n                            moveLimit, idealNudgeDist);\n                }\n            }\n\n            if (i == totalEvents)\n            {\n                // We have cleaned up, so we can now break out of loop.\n                break;\n            }\n\n            thisPos = events[i]->pos;\n            posStartIndex = i;\n        }\n\n        // Do the first sweep event handling -- building the correct\n        // structure of the scanline.\n        const int pass = 1;\n        processLayoutConstraintEvent(scanline, events[i], dim,\n                obstacleVector, lineReps, cs, less, pass, moveLimit,\n                idealNudgeDist);\n    }\n    COLA_ASSERT(scanline.size() == 0);\n    for (unsigned i = 0; i < totalEvents; ++i)\n    {\n        delete events[i];\n    }\n    delete [] events;\n\n    vpsc::Constraints valid = cs;\n    std::vector<double> priorPos(vs.size());\n\n    // Apply existing constraints:\n    if (clusterHierarchy && !clusterHierarchy->clusters.empty())\n    {\n        // Create variables for clusters\n        clusterHierarchy->computeBoundingRect(boundingBoxes);\n        clusterHierarchy->createVars((vpsc::Dim) dim, boundingBoxes, vs);\n    }\n    for (cola::CompoundConstraints::const_iterator c = ccs.begin();\n            c != ccs.end(); ++c)\n    {\n        (*c)->generateVariables((vpsc::Dim) dim, vs);\n    }\n    for (cola::CompoundConstraints::const_iterator c = ccs.begin();\n            c != ccs.end(); ++c)\n    {\n        (*c)->generateSeparationConstraints((vpsc::Dim) dim, vs,\n                valid, boundingBoxes);\n    }\n\n    vpsc::Constraints nonRedundantCs =\n            constraintsRemovingRedundantEqualities(vs, valid);\n\n    vpsc::IncSolver vpscInstance(vs, nonRedundantCs);\n    vpscInstance.satisfy();\n\n    bool subConstraintSatisfiable = true;\n    while (!less.empty())\n    {\n        LayoutEdgeSegmentSeparations::iterator frontIt = less.begin();\n        LayoutEdgeSegmentSeparation sepChoice = *frontIt;\n        less.erase(frontIt);\n\n        // Reset subConstraintSatisfiable for new solve.\n        subConstraintSatisfiable = true;\n\n        // Store current values for variables.\n        for (unsigned int i = 0; i < priorPos.size(); ++i)\n        {\n            priorPos[i] = vs[i]->finalPosition;\n        }\n\n        for (size_t i = 0; i < valid.size(); ++i)\n        {\n            valid[i]->unsatisfiable = false;\n        }\n\n        // Add the constraint from this alternative to the\n        // valid constraint set.\n        valid.push_back(new vpsc::Constraint(sepChoice.var1,\n                sepChoice.var2, 0, true));\n\n#ifdef ORTHOG_TOPOLOGY_DEBUG\n        fprintf(stderr, \"Try removing sep in %c on connector %03d...\",\n                (dim == XDIM) ? 'X' : 'Y', sepChoice.connRef->id());\n#endif\n\n        bool needsSolving = true;\n        while (needsSolving)\n        {\n            // Solve with this constraint set.\n            vpsc::Constraints nonRedundantCs =\n                    constraintsRemovingRedundantEqualities(vs, valid);\n            vpsc::IncSolver vpscInstance(vs, nonRedundantCs);\n#ifdef ORTHOG_TOPOLOGY_DEBUG\n            fprintf(stderr, \"Solving...!\\n\");\n#endif\n            vpscInstance.satisfy();\n            needsSolving = false;\n\n            for (vpsc::Constraints::iterator it = valid.begin();\n                    it != valid.end(); )\n            {\n                vpsc::Constraint *constraint = *it;\n                if (constraint->unsatisfiable &&\n                    (fabs((constraint->left->finalPosition + constraint->gap) -\n                          constraint->right->finalPosition) < 0.01))\n                {\n                    // This is an almost satisfiable constraint.\n#ifdef ORTHOG_TOPOLOGY_DEBUG\n                    fprintf(stderr, \"%s constraint: \"\n                            \"(%d)%.12g + %g %s (%d)%.12g\\n\",\n                            constraint->equality ? \"Dropped redundant\" :\n                            \"Relaxed\", constraint->left->id,\n                            constraint->left->finalPosition, constraint->gap,\n                            constraint->equality ? \"==\" : \"<=\",\n                            constraint->right->id,\n                            constraint->right->finalPosition);\n#endif\n\n                    if (constraint->equality)\n                    {\n                        // Drop redundant equality constraint.\n                        // We know these occur due to cycles of equalities.\n                        it = valid.erase(it);\n                    }\n                    else\n                    {\n                        // Relax seemingly unsatisfiable inequality.\n                        constraint->gap -= 0.01;\n                        constraint->unsatisfiable = false;\n                        ++it;\n                    }\n                    // And now we need to resatisfy the problem..\n                    needsSolving = true;\n                }\n                else\n                {\n                    ++it;\n                }\n            }\n        }\n        for (size_t i = 0; i < valid.size(); ++i)\n        {\n            if (valid[i]->unsatisfiable)\n            {\n#ifdef ORTHOG_TOPOLOGY_DEBUG\n                fprintf(stderr, \"Unsatisfiable: (%d)%.12g + %g %s (%d)%.12g\\n\",\n                        valid[i]->left->id,\n                        valid[i]->left->finalPosition, valid[i]->gap,\n                        valid[i]->equality ? \"==\" : \"<=\",\n                        valid[i]->right->id,\n                        valid[i]->right->finalPosition);\n#endif\n                // It might have made one of the earlier added\n                // constraints unsatisfiable, so we mark that one\n                // as okay since we will be reverting the most\n                // recent one.\n                valid[i]->unsatisfiable = false;\n\n                subConstraintSatisfiable = false;\n            }\n        }\n\n        if (!subConstraintSatisfiable)\n        {\n#ifdef ORTHOG_TOPOLOGY_DEBUG\n            fprintf(stderr, \"\\tInvalid\\n\");\n#endif\n            // Restore previous values for variables.\n            for (unsigned int i = 0; i < priorPos.size(); ++i)\n            {\n                vs[i]->finalPosition = priorPos[i];\n            }\n\n            // Delete the newly added (and unsatisfiable)\n            // constraint from the valid constraint set.\n            delete valid.back();\n            valid.pop_back();\n        }\n        else\n        {\n#ifdef ORTHOG_TOPOLOGY_DEBUG\n            fprintf(stderr, \"Valid %d\\n\", count);\n#endif\n            for (unsigned i = 0; i < ovn; i++)\n            {\n                LayoutObstacle& obstacle = obstacleVector[i];\n\n                obstacle.updatePositionsFromSolver();\n            }\n            for (LayoutEdgeSegmentList::iterator curr = segmentList.begin();\n                    curr != segmentList.end(); ++curr)\n            {\n                (*curr)->updatePositionsFromSolver();\n            }\n            for (EndpointAnchorList::iterator curr = extraTerminalsList.begin();\n                    curr != extraTerminalsList.end(); ++curr)\n            {\n                curr->updatePosition(obstacleVector);\n            }\n#ifdef ORTHOG_TOPOLOGY_DEBUG\n            std::stringstream filename;\n            filename << \"layout-\" << dim << \"-\" << std::setfill('0') << std::setw(3) << count;\n            router->outputDiagramSVG(filename.str().c_str(), lineReps);\n#endif\n            ++count;\n        }\n    }\n\n    // Reverse the variable Ids on the existing compound constraints\n    bool reversed = false;\n    for (size_t i = 0; i < ccs.size(); ++i)\n    {\n        cola::CompoundConstraint *cc = ccs[i];\n        cc->updateShapeOffsetsForDifferentCentres(offsetsVector,\n                reversed);\n        cc->updateVarIDsWithMapping(colaToCurrMap, reversed);\n    }\n    for_each(valid.begin(), valid.end(), cola::delete_object());\n    for_each(vs.begin(), vs.end(), cola::delete_object());\n    for_each(segmentList.begin(), segmentList.end(), cola::delete_object());\n    for_each(boundingBoxes.begin(), boundingBoxes.end(), cola::delete_object());\n}\n\n\nstatic void simplifyOrthogonalRoutes(Router *router)\n{\n    // Simplify routes.\n    for (ConnRefList::const_iterator curr = router->connRefs.begin();\n            curr != router->connRefs.end(); ++curr)\n    {\n        if ((*curr)->routingType() != ConnType_Orthogonal)\n        {\n            continue;\n        }\n        (*curr)->set_route((*curr)->displayRoute().simplify());\n    }\n}\n\ntypedef std::vector<ConnRef *> ConnRefVector;\ntypedef std::vector<Polygon> RouteVector;\n\nclass CmpLineOrder\n{\n    public:\n        CmpLineOrder(PtOrderMap& ord, const size_t dim)\n            : orders(ord),\n              dimension(dim)\n        {\n        }\n        bool operator()(const ShiftSegment *lhsSuper,\n                const ShiftSegment *rhsSuper,\n                bool *comparable = nullptr) const\n        {\n            const LayoutEdgeSegment *lhs =\n                    dynamic_cast<const LayoutEdgeSegment *> (lhsSuper);\n            const LayoutEdgeSegment *rhs =\n                    dynamic_cast<const LayoutEdgeSegment *> (rhsSuper);\n            if (comparable)\n            {\n                *comparable = true;\n            }\n            Point lhsLow  = lhs->lowPoint();\n            Point rhsLow  = rhs->lowPoint();\n            size_t altDim = (dimension + 1) % 2;\n#ifndef NDEBUG\n            const Point& lhsHigh = lhs->highPoint();\n            const Point& rhsHigh = rhs->highPoint();\n            COLA_ASSERT(lhsLow[dimension] == lhsHigh[dimension]);\n            COLA_ASSERT(rhsLow[dimension] == rhsHigh[dimension]);\n#endif\n\n            // We consider things at effectively the same position to\n            // be ordered based on their order and fixedOrder, so only\n            // compare segments further apart than the nudgeDistance.\n            if (lhsLow[dimension] != rhsLow[dimension])\n            {\n                return lhsLow[dimension] < rhsLow[dimension];\n            }\n\n            // If one of these is fixed, then determine order based on\n            // fixed segment, that is, order so the fixed segment doesn't\n            // block movement.\n            bool oneIsFixed = false;\n            const int lhsFixedOrder = lhs->fixedOrder(oneIsFixed);\n            const int rhsFixedOrder = rhs->fixedOrder(oneIsFixed);\n            if (oneIsFixed && (lhsFixedOrder != rhsFixedOrder))\n            {\n                return lhsFixedOrder < rhsFixedOrder;\n            }\n\n            // C-bends that did not have a clear order with s-bends might\n            // not have a good ordering here, so compare their order in\n            // terms of C-bend direction and S-bends and use that if it\n            // differs for the two segments.\n            const int lhsOrder = lhs->order();\n            const int rhsOrder = rhs->order();\n            if (lhsOrder != rhsOrder)\n            {\n                return lhsOrder < rhsOrder;\n            }\n\n            // Need to index using the original point into the map, so find it.\n            Point& unchanged = (lhsLow[altDim] > rhsLow[altDim]) ?\n                    lhsLow : rhsLow;\n\n            PtOrder& lowOrder = orders[unchanged];\n            int lhsPos = lowOrder.positionFor(dimension, lhs->connRef);\n            int rhsPos = lowOrder.positionFor(dimension, rhs->connRef);\n            if ((lhsPos == -1) || (rhsPos == -1))\n            {\n                // A value for rhsPos or lhsPos mean the points are not directly\n                // comparable, meaning they are at the same position but cannot\n                // overlap (they are just collinear.  The relative order for\n                // these segments is not important since we do not constrain\n                // them against each other.\n                //COLA_ASSERT(lhs->overlapsWith(rhs, dimension) == false);\n                // We do need to be consistent though.\n                if (comparable)\n                {\n                    *comparable = false;\n                }\n                return lhsLow[altDim] < rhsLow[altDim];\n            }\n            return lhsPos < rhsPos;\n        }\n\n        PtOrderMap& orders;\n        const size_t dimension;\n};\n\nAvoidTopologyAddon::AvoidTopologyAddon(vpsc::Rectangles& rs,\n        cola::CompoundConstraints& cs, cola::RootCluster *ch,\n        cola::VariableIDMap& map, const double moveLimit)\n    : Avoid::TopologyAddonInterface(),\n      m_rectangles(rs),\n      m_constraints(cs),\n      m_cluster_hierarchy(ch),\n      m_id_map(map),\n      m_move_limit(moveLimit)\n{\n}\n\nAvoidTopologyAddon::~AvoidTopologyAddon()\n{\n}\n\nAvoid::TopologyAddonInterface *AvoidTopologyAddon::clone(void) const\n{\n    return new AvoidTopologyAddon(*this);\n}\n\nvoid AvoidTopologyAddon::improveOrthogonalTopology(Router *router)\n{\n    //router->timers.Register(???, timerStart);\n\n    // We depend on the checkpoint cache built earlier.\n\n#ifdef ORTHOG_TOPOLOGY_DEBUG\n    router->outputDiagramSVG(\"layout-0-000\");\n#endif\n\n    for (size_t dimension = 0; dimension < 2; ++dimension)\n    {\n        LayoutEdgeSegmentList segmentList;\n        LayoutObstacleVector obstacleVector;\n        EndpointAnchorList extraTerminalsList;\n        LineReps lineReps;\n\n        buildOrthogonalLayoutSegments(router, dimension, segmentList,\n                obstacleVector, extraTerminalsList);\n        setupOrthogonalLayoutConstraints(router, dimension, segmentList,\n                obstacleVector, extraTerminalsList, m_constraints, m_id_map,\n                m_cluster_hierarchy, m_rectangles, &lineReps, m_move_limit);\n\n        simplifyOrthogonalRoutes(router);\n    }\n\n    //router->timers.Stop();\n}\n\n\nbool AvoidTopologyAddon::outputCode(FILE *fp) const\n{\n    if (fp)\n    {\n        fprintf(fp, \"    CompoundConstraints ccs;\\n\");\n        fprintf(fp, \"    std::vector<vpsc::Rectangle*> rs;\\n\");\n        fprintf(fp, \"    vpsc::Rectangle *rect = nullptr;\\n\\n\");\n        for (size_t i = 0; i < m_rectangles.size(); ++i)\n        {\n            fprintf(fp, \"    rect = new vpsc::Rectangle(%g, %g, %g, %g);\\n\",\n                   m_rectangles[i]->getMinX(), m_rectangles[i]->getMaxX(),\n                   m_rectangles[i]->getMinY(), m_rectangles[i]->getMaxY());\n            fprintf(fp, \"    rs.push_back(rect);\\n\\n\");\n        }\n\n        for (cola::CompoundConstraints::const_iterator c =\n                m_constraints.begin(); c != m_constraints.end(); ++c)\n        {\n            (*c)->printCreationCode(fp);\n        }\n\n        if (m_cluster_hierarchy)\n        {\n            m_cluster_hierarchy->printCreationCode(fp);\n        }\n        else\n        {\n            fprintf(fp, \"    RootCluster *cluster%llu = nullptr;\\n\\n\",\n                    (unsigned long long) m_cluster_hierarchy);\n        }\n\n        m_id_map.printCreationCode(fp);\n\n        fprintf(fp, \"    topology::AvoidTopologyAddon topologyAddon(rs, ccs, \"\n                \"cluster%llu, idMap);\\n\",\n                (unsigned long long) m_cluster_hierarchy);\n        fprintf(fp, \"    router->setTopologyAddon(&topologyAddon);\\n\");\n    }\n    return true;\n}\n\n\nbool AvoidTopologyAddon::outputDeletionCode(FILE *fp) const\n{\n    if (fp)\n    {\n        if (m_cluster_hierarchy)\n        {\n            fprintf(fp, \"\\n    delete cluster%llu;\\n\",\n                    (unsigned long long) m_cluster_hierarchy);\n        }\n        fprintf(fp, \"    for_each(rs.begin(), rs.end(), cola::delete_object());\\n\");\n        fprintf(fp, \"    for_each(ccs.begin(), ccs.end(), cola::delete_object());\\n\\n\");\n    }\n    return true;\n}\n\n\n}\n"
  },
  {
    "path": "cola/libtopology/orthogonal_topology.h",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libtopology - Classes used in generating and managing topology constraints.\n *\n * Copyright (C) 2012  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n * Author: Michael Wybrow\n*/\n\n\n#ifndef AVOID_ORTHOGLAYOUT_H\n#define AVOID_ORTHOGLAYOUT_H\n\n#include \"libcola/cola.h\"\n\nnamespace topology {\n\n/** \n *  @brief  This class can be passed to libavoid to extend it to provide\n *          orthogonal topology improvement functionality.\n *\n *  You should instantiate this class with libcola information about \n *  constraints on objects in the diagram and pass it to \n *  Avoid::Router::setTopologyAddon().\n */\nclass AvoidTopologyAddon : public Avoid::TopologyAddonInterface\n{\n    public:\n        /**\n         * @brief Constructs a AvoidTopologyAddon instance for a set of COLA\n         *        diagram constraints.\n         *\n         * Passing libavoid an instance of this class with given libcola \n         * rectangles, constraints and cluster hierarchy will cause libavoid\n         * to perform a post-processing step after routing where it will \n         * move nodes to unify unnecessary kinks where this doesn't violate \n         * constraints on the diagram.\n         *\n         * This information is usually available from an existing libcola\n         * instance.\n         *\n         * @param[in] rs   A vector of vpsc::Rectangle objects subject to the\n         *                 constraints.\n         * @param[in] cs   A set of cola::CompoundConstraint objects to apply\n         *                 to rs.\n         * @param[in] ch   A cola::RootCluster cluster hierarchy specification.\n         * @param[in] map  A cola::VariableIDMap specifying a mapping from\n         *                 the Rectangle indexes in rs to ShapeRef IDs in this\n         *                 libavoid instance.\n         * @param[in] moveLimit  The maximum length of a centre S-bend \n         *                       connector segments to attempt to improve\n         *                       (default 120.0).\n         */\n        AvoidTopologyAddon(vpsc::Rectangles& rs, cola::CompoundConstraints& cs, \n                cola::RootCluster *ch, cola::VariableIDMap& map,\n                const double moveLimit = 120);\n\n        ~AvoidTopologyAddon();\n        Avoid::TopologyAddonInterface *clone(void) const;\n\n        void improveOrthogonalTopology(Avoid::Router *router);\n        bool outputCode(FILE *fp) const;\n        bool outputDeletionCode(FILE *fp) const;\n\n    private:\n        vpsc::Rectangles m_rectangles;\n        cola::CompoundConstraints m_constraints;\n        cola::RootCluster *m_cluster_hierarchy;\n        cola::VariableIDMap m_id_map;\n        double m_move_limit;\n};\n\n\n}\n\n#endif\n"
  },
  {
    "path": "cola/libtopology/resize.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libtopology - Classes used in generating and managing topology constraints.\n *\n * Copyright (C) 2007-2010  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n * Author(s):  Tim Dwyer\n*/\n\n#include \"libvpsc/assertions.h\"\n#include \"libvpsc/rectangle.h\"\n#include \"libvpsc/constraint.h\"\n#include \"libcola/cola.h\"\n#include \"libtopology/topology_constraints.h\"\n\nnamespace topology {\nusing namespace std;\nusing namespace vpsc;\nusing namespace cola;\nstatic const double DW=1e-4;\nstatic const double DW2=DW/2.0;\nstatic const double DEFAULT_WEIGHT = 1.0;\nstatic const double FIXED_WEIGHT = 10000;\n\ntemplate <class Container, class Op>\nvoid feach(Container& c, Op op) {\n    for_each(c.begin(),c.end(),op);\n}\n\n\n/*\n * Functor that creates a copy of the specified Node and creates a\n * new Rectangle and a Variable associated with the node.\n * If the node appears in the resizes lookup the rectangle is reduced\n * to a sliver in the middle of the original rect.\n * In either case the desired position is the centre of the target.\n */\nstruct TransformNode {\n    TransformNode(vpsc::Dim dim, const Rectangles& targets,\n            const ResizeMap& resizes, Variables& vs)\n        : dim(dim),\n          targets(targets),\n          resizes(resizes),\n          vs(vs)\n    {\n    }\n    Node* operator() (Node* u) {\n        const Rectangle *targetRect = targets[u->id];\n        Rectangle *rect = new Rectangle(*u->rect);\n        ResizeMap::const_iterator ri = resizes.find(u->id);\n        Variable* var = vs[u->id];\n        var->desiredPosition = targetRect->getCentreD(dim);\n        if(ri==resizes.end()) { // no resize\n            var->weight = DEFAULT_WEIGHT;\n        } else { // resizing!\n            const double c=rect->getCentreD(dim);\n            rect->reset(dim, c - DW2, c + DW2);\n            var->weight = FIXED_WEIGHT;\n        }\n        return new topology::Node(u->id, rect, var);\n    }\n    vpsc::Dim dim;\n    const Rectangles& targets;\n    const ResizeMap& resizes;\n    Variables& vs;\n};\n/*\n * Functor which, for the specified Resizeinfo, creates a centre and\n * right dummy node and associated variables.\n */\nstruct CreateLeftRightDummyNodes\n{\n    CreateLeftRightDummyNodes(vpsc::Dim dim, const Rectangles& targets,\n            Nodes& nodes, Variables& vs)\n        : dim(dim),\n          targets(targets),\n          nodes(nodes),\n          vs(vs)\n    {\n    }\n    void operator() (pair<const unsigned, ResizeInfo>& p) {\n        // dummy nodes will have the same id as the original\n        ResizeInfo& ri=p.second;\n        const unsigned id=ri.orig->id;\n        COLA_ASSERT(p.first==id);\n        const Rectangle *ro=ri.orig->rect,\n                        *targetRect=targets[id];\n\n        // LEFT\n        const double l = ro->getMinD(dim);\n        Rectangle *lhsRect=new Rectangle(*ro);\n        lhsRect->reset(dim, l, l + DW);\n        Variable* lv = new Variable(vs.size(),\n                targetRect->getMinD(dim) + DW2, FIXED_WEIGHT);\n        vs.push_back(lv);\n        ri.lhsNode=new topology::Node(id,lhsRect,lv);\n        nodes.push_back(ri.lhsNode);\n        // Right\n        const double r = ro->getMaxD(dim);\n        Rectangle *rhsRect=new Rectangle(*ro);\n        rhsRect->reset(dim, r - DW, r);\n        Variable* rv = new Variable(vs.size(), \n                targetRect->getMaxD(dim) - DW2, FIXED_WEIGHT);\n        vs.push_back(rv);\n        ri.rhsNode=new topology::Node(id, rhsRect, rv);\n        nodes.push_back(ri.rhsNode);\n    }\n    vpsc::Dim dim;\n    const Rectangles& targets;\n    Nodes& nodes;\n    Variables& vs;\n};\n/*\n * Functor to reassign EdgePoint Node pointers.  \n * If the Node associated with an EdgePoint is resizing, the EdgePoint Node\n * pointer is reassigned to either the lhs, rhs or centre dummy Node.\n * Otherwise (and also actually for the lhs node which is already set\n * in the new Node list), the Node pointer is simply updated to the equivalent Node\n * in the new Node list.\n */\nstruct SubstituteNodes\n{\n    SubstituteNodes(vpsc::Dim dim, ResizeMap& resizes, const Nodes& tn)\n        : dim(dim),\n          resizes(resizes),\n          tn(tn)\n    {\n    }\n    void operator() (Edge* e) {\n        e->forEachEdgePoint(*this);\n    }\n    void operator() (EdgePoint* p) {\n        const unsigned id=p->node->id;\n        const ResizeMap::const_iterator& ri=resizes.find(id);\n        enum Pos {LHS, RHS, CEN} pos;\n        if(ri!=resizes.end()) {\n            switch(p->rectIntersect) {\n                case EdgePoint::TL:\n                    pos=dim==vpsc::HORIZONTAL?LHS:RHS;\n                    break;\n                case EdgePoint::BL:\n                    pos=LHS;\n                    break;\n                case EdgePoint::TR:\n                    pos=RHS;\n                    break;\n                case EdgePoint::BR:\n                    pos=dim==vpsc::HORIZONTAL?RHS:LHS;\n                    break;\n                default:\n                    pos=CEN;\n            }\n            switch(pos) {\n                case LHS:\n                    p->node=ri->second.lhsNode;\n                    break;\n                case RHS:\n                    p->node=ri->second.rhsNode;\n                    break;\n                default:\n                    COLA_ASSERT(p->rectIntersect==topology::EdgePoint::CENTRE);\n                    p->node=tn[id];\n            }\n        } else {\n            p->node=tn[id];\n        }\n    }\n    vpsc::Dim dim;\n    ResizeMap& resizes;\n    const topology::Nodes& tn;\n};\nstruct RevertNodes {\n    RevertNodes(Nodes& orig) \n        : orig(orig) {}\n    void operator() (Edge* e) {\n        e->forEachEdgePoint(*this);\n    }\n    void operator() (EdgePoint* p) {\n        p->node=orig[p->node->id];\n    }\n    Nodes& orig;\n};\nstruct CopyPositions {\n    CopyPositions(vpsc::Dim dim, const Nodes& tn, const ResizeMap& rm)\n        : dim(dim),\n          tn(tn),\n          rm(rm)\n    {\n    }\n    void operator() (Node* v) {\n        ResizeMap::const_iterator j=rm.find(v->id);\n        if(j==rm.end()) {\n            v->rect->moveCentreD(dim,tn[v->id]->rect->getCentreD(dim));\n        } else {\n            const Rectangle *l=j->second.lhsNode->rect,\n                            *r=j->second.rhsNode->rect;\n            v->rect->reset(dim,l->getMinD(dim),r->getMaxD(dim));\n        }\n    }\n    vpsc::Dim dim;\n    const Nodes& tn;\n    const ResizeMap& rm;\n};\nstruct DeleteTempNode {\n    void operator() (Node* v) {\n        delete v->rect;\n        delete v;\n    }\n};\n#ifndef NDEBUG\nbool approx_equals(double a, double b) {\n    return fabs(a-b)<1e-6;\n}\nstatic bool checkDesired(vpsc::Dim dim, const Nodes& nodes,\n        const Rectangles& targets, const ResizeMap& resizeMap)\n{\n    for (Nodes::const_iterator i=nodes.begin();i!=nodes.end();++i) {\n        const Node* v=*i;\n        const unsigned id=v->id;\n        const Rectangle* t=targets[id];\n        ResizeMap::const_iterator j=resizeMap.find(id);\n        if(j==resizeMap.end()) {\n            COLA_ASSERT(approx_equals(v->var->desiredPosition,\n                        t->getCentreD(dim)));\n        }\n    }\n    for(ResizeMap::const_iterator j=resizeMap.begin();j!=resizeMap.end();++j) {\n        const unsigned id=j->first;\n        const ResizeInfo& ri=j->second;\n        COLA_ASSERT(ri.orig->id==id);\n        const Node *ln=ri.lhsNode, *cn=nodes[id], *rn=ri.rhsNode;\n        COLA_ASSERT(ln->id==id);\n        COLA_ASSERT(cn->id==id);\n        COLA_ASSERT(rn->id==id);\n        const Rectangle* t=targets[id];\n        const double lp = t->getMinD(dim) + DW2,\n                     cp = t->getCentreD(dim),\n                     rp = t->getMaxD(dim) - DW2;\n        COLA_ASSERT(approx_equals(lp,ln->var->desiredPosition));\n        COLA_ASSERT(approx_equals(cp,cn->var->desiredPosition));\n        COLA_ASSERT(approx_equals(rp,rn->var->desiredPosition));\n    }\n    return true;\n}\n#if 0\nstatic bool checkFinal(vpsc::Dim dim, const Nodes& nodes,\n        const Rectangles& targets, const ResizeMap& resizeMap)\n{\n    static const double DISPLACEMENT_ERROR=1e-3;\n    for(Nodes::const_iterator i=nodes.begin();i!=nodes.end();++i) {\n        const Node* v=*i;\n        const Rectangle* t=targets[v->id];\n        ResizeMap::const_iterator j=resizeMap.find(v->id);\n        if(j==resizeMap.end()) {\n            COLA_ASSERT(fabs(v->rect->getCentreD(dim)-t->getCentreD(dim))\n                    <DISPLACEMENT_ERROR);\n        } else {\n            const Rectangle *l=j->second.lhsNode->rect,\n                            *c=nodes[v->id]->rect,\n                            *r=j->second.rhsNode->rect;\n            COLA_ASSERT(fabs(l->getMinD(dim)-t->getMinD(dim))<DISPLACEMENT_ERROR);\n            COLA_ASSERT(fabs(r->getMaxD(dim)-t->getMaxD(dim))<DISPLACEMENT_ERROR);\n            COLA_ASSERT(fabs(c->getCentreD(dim)-t->getCentreD(dim))\n                    <DISPLACEMENT_ERROR);\n        }\n    }\n    return true;\n}\n#endif\n#endif\n/*\n * Applies the required resizes to nodes in the specified axis, rerouting edges\n * around the resized nodes.\n * @param dim axis\n * @param targets the target rectangles (in both axes)\n * @param nodes to be moved and/or resized\n * @param edges to be rerouted around nodes\n * @param resizes ResizeInfo for specific nodes\n * @param vs canonical list of variables passed into solver.  Note that\n * the first nodes.size() variables are used for each corresponding node.  \n * Note also that new variables for the dummy nodes will be appended to this\n * list and will need to be cleaned up later.\n * @param cs canonical list of constraints over variables.  Note that new\n * non-overlap constraints may be appended to the end of this list.\n */\nstatic void resizeAxis(vpsc::Dim dim, const Rectangles& targets,\n        Nodes& nodes, Edges& edges,  RootCluster *clusters, ResizeMap& resizes,\n        Variables& vs, Constraints& cs)\n{\n    COLA_ASSERT(vs.size()>=nodes.size());\n\n    //  - create copy tn of topologyNodes with resize rects replaced with\n    //    three nodes: one for the lhs of rect, one for centre and one for rhs.\n    //    lhs node goes at position of replaced node, the others are appended\n    //    to end of tn.\n    //  - set desired positions of each lhs node to be the left side\n    //    of resized rect and symmetric for rhs node, centre node's desired\n    //    pos it at the centre\n    Nodes tn(nodes.size());\n\n    COLA_ASSERT(assertConvexBends(edges));\n    COLA_ASSERT(assertNoSegmentRectIntersection(nodes,edges));\n\n    transform(nodes.begin(),nodes.end(),tn.begin(),\n            TransformNode(dim, targets,resizes,vs));\n    feach(resizes, CreateLeftRightDummyNodes(dim,targets,tn,vs));\n    COLA_ASSERT(tn.size()==nodes.size()+2*resizes.size());\n    COLA_ASSERT(vs.size()>=tn.size());\n\n    // update topologyRoutes with references to resized nodes replaced with\n    // correct references to lhs/rhs nodes\n    feach(edges,SubstituteNodes(dim,resizes,tn));\n\n    COLA_ASSERT(assertConvexBends(edges));\n    COLA_ASSERT(assertNoSegmentRectIntersection(tn,edges));\n\n    // move nodes and reroute\n    topology::TopologyConstraints t(dim, tn, edges, clusters, vs, cs);\n    COLA_ASSERT(checkDesired(dim,tn,targets,resizes));\n#ifndef NDEBUG\n    unsigned loopCtr=0;\n#endif\n    while(t.solve()) { COLA_ASSERT(++loopCtr<1000); }\n    //COLA_ASSERT(checkFinal(tn,targets,resizes));\n    \n    // reposition and resize original nodes\n    feach(nodes,CopyPositions(dim,tn,resizes));\n\n    // revert topologyRoutes back to original nodes\n    feach(edges,RevertNodes(nodes));\n\n    COLA_ASSERT(assertConvexBends(edges));\n    COLA_ASSERT(assertNoSegmentRectIntersection(nodes,edges));\n\n    // clean up\n    feach(tn,DeleteTempNode());\n}\n/*\n * Functor that for a given node, if that node is in the resizes lookup,\n * will create a copy of the target rectangle and adds the node id to\n * the fixed list.\n * Otherwise, it simply creates a copy of the node's existing rectangle.\n */\nstruct CreateTargetRect {\n    CreateTargetRect(ResizeMap& resizes, set<unsigned>& fixed) : resizes(resizes), fixed(fixed) {}\n    Rectangle* operator() (Node* v) {\n        ResizeMap::iterator r=resizes.find(v->id);\n        Rectangle* target;\n        if(r==resizes.end()) {\n            target=new Rectangle(*v->rect);\n        } else {\n            fixed.insert(v->id); // resized rectangles are required to stay\n                                 // where they have been placed\n            target=new Rectangle(*r->second.targetRect);\n            COLA_ASSERT(target->width() > 3.0*DW);\n            COLA_ASSERT(target->height() > 3.0*DW);\n        }\n        return target;\n    }\n    ResizeMap& resizes;\n    set<unsigned>& fixed;\n};\n/*\n * Find an overlap free arrangement of resized rectangles and reroute\n * edges around them without changing topology.\n * @param nodes topology node definitions to be resized\n * @param edges edges to be reroutes\n * @param resizes list of resizes to be applied to nodes\n * @param xvs horizontal vars list\n * @param xcs horizontal constraints\n * @param yvs vertical vars\n * @param ycs vertical constraints\n */\nvoid applyResizes(Nodes& nodes, Edges& edges, RootCluster *clusters, \n        ResizeMap& resizes, Variables& xvs, Constraints& xcs, \n        Variables& yvs, Constraints& ycs) {\n    // targets will hold an overlap free placement of the resized rectangles\n    Rectangles targets(nodes.size());\n    // rectangles that are resized should be fixed when finding overlap free placement\n    // the following is populated with their ids\n    set<unsigned> fixed;\n    transform(nodes.begin(),nodes.end(),targets.begin(),CreateTargetRect(resizes,fixed));\n    removeoverlaps(targets,fixed);\n    resizeAxis(vpsc::XDIM, targets, nodes, edges, clusters, resizes, xvs, xcs);\n    resizeAxis(vpsc::YDIM, targets, nodes, edges, clusters, resizes, yvs, ycs);\n    feach(targets,delete_object());\n}\n} // namespace topology\n"
  },
  {
    "path": "cola/libtopology/tests/Makefile.am",
    "content": "AM_CPPFLAGS = -I$(top_srcdir) $(CAIROMM_CFLAGS)\nLDADD = $(top_builddir)/libtopology/libtopology.la $(top_builddir)/libcola/libcola.la $(top_builddir)/libvpsc/libvpsc.la $(top_builddir)/libavoid/libavoid.la $(CAIROMM_LIBS)\ncheck_PROGRAMS = simple_bend nooverlap nodedragging beautify orthogonalOpt \n# triangle split kamada nooverlap\n\nsimple_bend_SOURCES = simple_bend.cpp \nnooverlap_SOURCES = nooverlap.cpp \nnodedragging_SOURCES = nodedragging.cpp \n#problem_SOURCES = problem.cpp\nbeautify_SOURCES = beautify.cpp\northogonalOpt_SOURCES = orthogonalOpt.cpp\n\n#shortest_paths_LDADD = $(top_builddir)/libcola/libcola.la\n\n#triangle_LDADD = $(ldcommon)\n#triangle_SOURCES = triangle.cpp \n#split_LDADD = $(ldcommon)\n#split_SOURCES = split.cpp \n#kamada_LDADD = $(ldcommon)\n#kamada_SOURCES = kamada.cpp \nTESTS = $(check_PROGRAMS)\n"
  },
  {
    "path": "cola/libtopology/tests/beautify.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libtopology - Classes used in generating and managing topology constraints.\n *\n * Copyright (C) 2006-2008  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library in the file LICENSE; if not,\n * write to the Free Software Foundation, Inc., 59 Temple Place,\n * Suite 330, Boston, MA  02111-1307  USA\n *\n * Authors:\n *   Tim Dwyer <tgdwyer@gmail.com>\n*/\n\n#include <iostream>\n#include <vector>\n#include <cmath>\n#include <time.h>\n#include <valarray>\n#include <fstream>\n#include <sstream>\n\n#include \"libavoid/libavoid.h\"\n#include \"libavoid/router.h\"\n#include \"libtopology/cola_topology_addon.h\"\n#include \"libcola/tests/graphlayouttest.h\"\n\nusing namespace std;\nusing namespace cola;\nusing namespace vpsc;\n\n/*\n// |V|=12, |E|=23\nstatic const unsigned DAGDEPTH = 3;\nstatic const unsigned BRANCHFACTOR = 3;\nstatic const double EXTRAEDGEPROB = 0.5;\n*/\n/*\n// |V|=26, |E|=61\nstatic const unsigned DAGDEPTH = 3;\nstatic const unsigned BRANCHFACTOR = 4;\nstatic const double EXTRAEDGEPROB = 0.1;\n*/\n\n/*\n// |V|=62, |E|=85\nstatic const unsigned DAGDEPTH = 4;\nstatic const unsigned BRANCHFACTOR = 4;\nstatic const double EXTRAEDGEPROB = 0.01;\n*/\n/*\n// |V|=131, |E|=166\nstatic const unsigned DAGDEPTH = 5;\nstatic const unsigned BRANCHFACTOR = 4;\nstatic const double EXTRAEDGEPROB = 0.005;\n*/\n\nstatic const unsigned DAGDEPTH = 6;\nstatic const unsigned BRANCHFACTOR = 4;\nstatic const double EXTRAEDGEPROB = 0.002;\n/*\n// |V|=343, |E|=487\nseed=1208390913;\nstatic const unsigned DAGDEPTH = 6;\nstatic const unsigned BRANCHFACTOR = 4;\nstatic const double EXTRAEDGEPROB = 0.002;\n*/\n\nvoid makeEdge(unsigned u, unsigned v,\n        vector<Edge> &edges, CompoundConstraints &cy) {\n    edges.push_back(make_pair(u,v));\n    cy.push_back(new SeparationConstraint(vpsc::YDIM, u,v,5));\n}\nvector<Edge> random_dag(unsigned depth, unsigned maxbranch, unsigned &V,\n        CompoundConstraints &cx, CompoundConstraints &cy) {\n    COLA_UNUSED(cx);\n    printf(\"DAG depth=%d\\nmaxbranch=%d\\nextraedgeprob%f\\n\",depth,maxbranch,EXTRAEDGEPROB);\n\tvector<Edge> edges;\n    unsigned lstart=0, lend=1;\n    V=0;\n\tfor(unsigned i=0;i<depth;i++) {\n        for(unsigned j=lstart;j<lend;j++) {\n            //makeEdge(j,++V,edges,cy);\n            //makeEdge(j,++V,edges,cy);\n            for(unsigned k=0;k<maxbranch;k++) {\n                double r=(double)rand()/(double)RAND_MAX;\n                if(r < 0.5) {\n                    makeEdge(j,++V,edges,cy);\n                }\n            }\n        }\n        lstart=lend;\n        lend=V+1;\n    }\n    V++;\n    /*\n    DFS::Graph dfs(V,edges);\n    for(unsigned i=1;i<dfs.order.size();i++) {\n        cx.push_back(\n                new SeparationConstraint(dfs.order[i-1],dfs.order[i],0.5));\n    }\n    */\n    for(unsigned i=0;i<V;++i) {\n        for(unsigned j=i+1;j<V;++j) {\n            double r=(double)rand()/(double)RAND_MAX;\n            if(r < EXTRAEDGEPROB) {\n                makeEdge(i,j,edges,cy);\n            }\n        }\n    }\n    /*\n    for(unsigned i=0;i<dfs.leaves.size();i++) {\n        for(unsigned j=1;j<dfs.leaves[i].size();j++) {\n            cx.push_back( new SeparationConstraint(dfs.leaves[i][j-1],dfs.leaves[i][j],10));\n        }\n    }\n    */\n\treturn edges;\n}\nvoid removeoverlaps(vpsc::Rectangles &rs, bool bothaxes) {\n\tdouble xBorder=0, yBorder=0;\n    static const double EXTRA_GAP=1e-5;\n\tunsigned n=rs.size();\n\ttry {\n\t\t// The extra gap avoids numerical imprecision problems\n\t\tRectangle::setXBorder(xBorder+EXTRA_GAP);\n\t\tRectangle::setYBorder(yBorder+EXTRA_GAP);\n        vpsc::Variables vs(n);\n\t\tunsigned i=0;\n\t\tfor(Variables::iterator v=vs.begin();v!=vs.end();++v,++i) {\n\t\t\t*v=new Variable(i,0,1);\n\t\t}\n        vpsc::Constraints cs;\n        vpsc::generateXConstraints(rs,vs,cs,bothaxes);\n        vpsc::IncSolver vpsc_x(vs,cs);\n\t\tvpsc_x.solve();\n        vpsc::Rectangles::iterator r=rs.begin();\n\t\tfor(Variables::iterator v=vs.begin();v!=vs.end();++v,++r) {\n\t\t\tassert((*v)->finalPosition==(*v)->finalPosition);\n\t\t\t(*r)->moveCentreX((*v)->finalPosition);\n\t\t}\n\t\tassert(r==rs.end());\n\t\tfor_each(cs.begin(),cs.end(),vpsc::delete_object());\n\t\tcs.clear();\n        if(bothaxes) {\n            // Removing the extra gap here ensures things that were moved to be adjacent to one another above are not considered overlapping\n            Rectangle::setXBorder(Rectangle::xBorder-EXTRA_GAP);\n            vpsc::generateYConstraints(rs,vs,cs);\n            vpsc::IncSolver vpsc_y(vs,cs);\n            vpsc_y.solve();\n            r=rs.begin();\n            for(Variables::iterator v=vs.begin();v!=vs.end();++v,++r) {\n                (*r)->moveCentreY((*v)->finalPosition);\n            }\n            for_each(cs.begin(),cs.end(),vpsc::delete_object());\n            cs.clear();\n            Rectangle::setYBorder(Rectangle::yBorder-EXTRA_GAP);\n            vpsc::generateXConstraints(rs,vs,cs,false);\n            vpsc::IncSolver vpsc_x2(vs,cs);\n            vpsc_x2.solve();\n            r=rs.begin();\n            for(Variables::iterator v=vs.begin();v!=vs.end();++v,++r) {\n                (*r)->moveCentreX((*v)->finalPosition);\n            }\n            for_each(cs.begin(),cs.end(),vpsc::delete_object());\n        }\n\t\tfor_each(vs.begin(),vs.end(),vpsc::delete_object());\n\t} catch (char *str) {\n\t\tstd::cerr<<str<<std::endl;\n\t\tfor(vpsc::Rectangles::iterator r=rs.begin();r!=rs.end();++r) {\n\t\t\tstd::cerr << **r <<std::endl;\n\t\t}\n\t}\n    Rectangle::setXBorder(xBorder);\n    Rectangle::setYBorder(yBorder);\n}\n/*\nvoid writeTextFile(vector<cola::Edge>& edges) {\n    ofstream outfile(\"new.txt\",ofstream::binary);\n    for(vector<cola::Edge>::iterator e=edges.begin();e!=edges.end();++e) {\n        outfile<<\"node\"<<e->first<<\",node\"<<e->second<<endl;\n    }\n    outfile.close();\n}\n*/\n/*\n * Make feasible:\n *   - remove overlaps between rectangular boundaries of nodes/clusters\n *     (respecting structural constraints)\n *   - perform routing (preserve previous topology using rubber banding)\n */\nvoid makeFeasible(vpsc::Rectangles& rs, vector<cola::Edge>& edges,\n    std::vector<topology::Edge*>& routes,\n    std::vector<topology::Node*>& topologyNodes, double defaultEdgeLength) {\n    printf(\"Removing overlaps...\\n\");\n    removeoverlaps(rs,false);\n    printf(\"done.\\n\");\n    printf(\"Running libavoid to compute routes...\\n\");\n    clock_t libavoidstarttime=clock();\n    // find feasible routes for edges\n    Avoid::Router *router = new Avoid::Router(Avoid::PolyLineRouting);\n    // Use rotational sweep for point visibility\n    router->UseLeesAlgorithm = true;\n    // Don't use invisibility graph.\n    router->InvisibilityGrph = false;\n    double g=0; // make shape that libavoid sees slightly smaller\n    for(unsigned i=0;i<rs.size();++i) {\n        vpsc::Rectangle* r=rs[i];\n        double x=r->getMinX()+g;\n        double X=r->getMaxX()-g;\n        double y=r->getMinY()+g;\n        double Y=r->getMaxY()-g;\n        // Create the ShapeRef:\n        Avoid::Rectangle shapeRect(Avoid::Point(x,y), Avoid::Point(X,Y));\n        //if(i==4||i==13||i==9) {\n            //printf(\"rect[%d]:{%f,%f,%f,%f}\\n\",i,x,y,X,Y);\n        //}\n        unsigned int shapeID = i + 1;\n        new Avoid::ShapeRef(router, shapeRect, shapeID);\n    }\n    Avoid::ConnRef *connRefs[edges.size()];\n    for(unsigned i=0;i<edges.size();++i)\n    {\n        cola::Edge e=edges[i];\n        unsigned int connID = i + rs.size() + 1;\n        Rectangle* r0=rs[e.first], *r1=rs[e.second];\n        Avoid::Point srcPt(r0->getCentreX(),r0->getCentreY());\n        Avoid::Point dstPt(r1->getCentreX(),r1->getCentreY());\n        connRefs[i] = new Avoid::ConnRef(router, srcPt, dstPt, connID);\n    }\n    router->processTransaction();\n    //router->outputInstanceToSVG();\n    for(unsigned i=0;i<edges.size();++i)\n    {\n        cola::Edge e=edges[i];\n        const Avoid::Polygon& route = connRefs[i]->route();\n        vector<topology::EdgePoint*> eps;\n        eps.push_back( new topology::EdgePoint( topologyNodes[e.first],\n                    topology::EdgePoint::CENTRE));\n        for(size_t j=1;j+1<route.size();j++) {\n            const Avoid::Point& p = route.ps[j];\n            const unsigned nodeID=p.id-1;\n            topology::Node* node=topologyNodes[nodeID];\n            topology::EdgePoint::RectIntersect ri;\n            switch(p.vn) {\n                case 0: ri=topology::EdgePoint::BR;\n                        break;\n                case 1: ri=topology::EdgePoint::TR;\n                        break;\n                case 2: ri=topology::EdgePoint::TL;\n                        break;\n                case 3: ri=topology::EdgePoint::BL;\n                        break;\n                default: ri=topology::EdgePoint::CENTRE;\n            }\n            eps.push_back(new topology::EdgePoint(node,ri));\n        }\n        eps.push_back(new topology::EdgePoint(topologyNodes[e.second],\n                    topology::EdgePoint::CENTRE));\n        topology::Edge* edgeRoute=new topology::Edge(i,defaultEdgeLength, eps);\n        edgeRoute->assertConvexBends();\n        routes.push_back(edgeRoute);\n\n    }\n    writeFile(topologyNodes,routes,\"beautify0.svg\");\n    assert(topology::assertNoSegmentRectIntersection(topologyNodes,routes));\n    double libavoidtime=double(clock()-libavoidstarttime)/double(CLOCKS_PER_SEC);\n    cout << \"done. Libavoid ran in \" << libavoidtime << \" seconds\" << endl;\n    delete router;\n}\nint main() {\n    unsigned V;\n    CompoundConstraints cx,cy;\n\n    int seed = time(nullptr);\n    seed=1207906420;\n    //seed=1207920674;\n    //seed=1207982613;\n    //seed=1207984219;\n    //seed=1207984299;\n    //seed=1207984743;\n    //seed=1207985027; // very short edge which seems to cause problems\n    //seed=1207986026; // error if we don't check neighbour is actually on scanline when determining visibility when generating straight constraints\n    //seed=1207991731;\n    //seed=1208303930;\n    //seed=1208304508;\n    //seed=1208316284;\n    //seed=1208319019;\n    //seed=1208321702;\n    printf(\"random seed=%d\\n\",seed);\n    srand(seed);\n    vector<Edge> es = random_dag(DAGDEPTH,BRANCHFACTOR,V,cx,cy);\n    double defaultEdgeLength=40;\n\n    cout << \"V=\"<<V<<endl;\n    cout << \"E=\"<<es.size()<<endl;\n    double width=1000;\n    double height=1000;\n    vector<pair<double,double> > startpos(V);\n    for(unsigned i=0;i<V;i++) {\n        double x=getRand(width), y=getRand(height);\n        startpos[i]=make_pair(x,y);\n    }\n\tvector<vpsc::Rectangle*> rs;\n    vector<topology::Node*> topologyNodes;\n    vector<topology::Edge*> routes;\n\tfor(unsigned i=0;i<V;i++) {\n\t\tdouble x=getRand(width), y=getRand(height);\n        vpsc::Rectangle* r =new vpsc::Rectangle(x,x+30,y,y+10);\n\t\trs.push_back(r);\n        topologyNodes.push_back(new topology::Node(i,r));\n\t}\n\tCheckProgress test(0.01,100);\n    /*\n    ConstrainedMajorizationLayout alg(rs,es,nullptr,defaultEdgeLength,nullptr,test);\n    //alg.setYConstraints(&cy);\n\talg.run();\n    */\n    clock_t unconstrainedstarttime=clock();\n    //writeTextFile(es);\n\tConstrainedFDLayout alg2(rs,es,defaultEdgeLength,\n            StandardEdgeLengths, &test);\n    alg2.setConstraints(cy);\n\talg2.run();\n    double totaltime=0;\n    double unconstrainedtime=double(clock()-unconstrainedstarttime)/double(CLOCKS_PER_SEC);\n    totaltime+=unconstrainedstarttime;\n    cout<<\"unconstrained layout ran in \"<<unconstrainedtime<<\" seconds\"<<endl;\n    clock_t makefeasiblestarttime=clock();\n    makeFeasible(rs,es,routes,topologyNodes,defaultEdgeLength);\n    double makefeasibletime=double(clock()-makefeasiblestarttime)/double(CLOCKS_PER_SEC);\n    totaltime+=makefeasibletime;\n    cout<<\"makefeasible ran in \"<<makefeasibletime<<\" seconds\"<<endl;\n    clock_t beautifystarttime=clock();\n    test.reset();\n    topology::ColaTopologyAddon topology(topologyNodes, routes);\n    alg2.setTopology(&topology);\n    writeFile(topologyNodes,routes,\"beautify1.svg\");\n    std::stringstream dunnartfile;\n    dunnartfile << \"v\" << V << \"e\" << (int) es.size() << \".svg\";\n    writeDunnartFile(topologyNodes,es,dunnartfile.str().c_str());\n\n\talg2.run();\n    double beautifytime=double(clock()-beautifystarttime)/double(CLOCKS_PER_SEC);\n    totaltime+=beautifytime;\n    cout<<\"beautify ran in \"<<beautifytime<<\" seconds\"<<endl;\n    cout<<\"TOTAL=\"<<totaltime<<endl;\n    cout <<\"---------------------------------------------\"<< endl;\n    cout <<V<<\" & \"<<es.size()<<\" & \"<<unconstrainedtime<<\" & \"<<makefeasibletime<<\" & \"<<beautifytime<<\" & \"<<totaltime<<\" \\\\\\\\ % Seed: \"<< seed <<endl;\n    writeFile(topologyNodes,routes,\"beautify2.svg\");\n\tfor(unsigned i=0;i<V;i++) {\n\t\tdelete rs[i];\n\t}\n    return 0;\n}\n// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=4:softtabstop=4:textwidth=99 :\n"
  },
  {
    "path": "cola/libtopology/tests/bend2.m",
    "content": "(*\n\tcomputation of the stress function for straightening a bendy edge,\n        and it's derivative and hessian.\n        various test cases.\n\n\tto run: math < bend2.m\n*)\n\n(* euclidean distance between two points *)\nl[a_,b_]:=Sqrt[(a[[1]]-b[[1]])^2+(a[[2]]-b[[2]])^2];\n(* stress function *)\nd=.;\nf[X_,Y_]:=d^-2 (d-Sum[\n    l[{X[[i-1]],Y[[i-1]]},{X[[i]],Y[[i]]}],{i,2,Length[X]}\n])^2;\n\n(*\nX=Array[x,3];\nY=Array[y,3];\nf[X,Y]\nfrom=Table[l[{X[[i - 1]], Y[[i - 1]]}, {X[[i]], Y[[i]]}], {i, 2, Length[X]}]\nto=Table[Subscript[l,i-1,i],{i,2,Length[X]}]\ndfrom=Table[X[[i-1]]-X[[i]],{i,2,Length[X]}]\ndto=Table[Subscript[dx,i-1,i],{i,2,Length[X]}]\nrules=Join[\n   {PowerExpand[d Sqrt[f[X, Y]]]->dl},\n   Thread[from->to],\n   Thread[1/from->1/to],\n   Thread[from^(-2)->to^(-2)],\n   Thread[from^(-3)->to^(-3)],\n   Thread[dfrom->dto]]\ng=D[f[X,Y],{X,1}]//.rules\nh=D[f[X,Y],{X,2}]//.rules\ng/.{x[i_] -> Xv[[i]], y[i_] -> Yv[[i]]}\n*)\n\n(* \n\textract points from rectangles\n\ta rectangle is an array: {bottom left point, bottom right, width, height\n*)\ntl[r_]:={r[[1]],r[[2]]+r[[4]]};\ntr[r_]:={r[[1]]+r[[3]],r[[2]]+r[[4]]};\nbl[r_]:={r[[1]],r[[2]]};\nbr[r_]:={r[[1]]+r[[3]],r[[2]]};\ncentre[r_]:={r[[1]]+r[[3]]/2.0,r[[2]]+r[[4]]/2.0};\n\n(*\n\ttest case: 3 rectangles, 1 path, 1 bend\n*)\nd=100.000000; (* ideal length *)\nv0={571.5,363.5,63,43};\nv1={541.5,469.5,63,43};\nv2={541.5,300.5,63,43};\n\n(* Path defined in Xv, Yv *)\nXv={centre[v1][[1]],tr[v0][[1]],br[v0][[1]],centre[v2][[1]]};\nYv={centre[v1][[2]],tr[v0][[2]],br[v0][[2]],centre[v2][[2]]};\n(* order in which nodes are visited in path *)\nXi={1,0,0,2};\nn=Length[Xi];\nm=Max[Xi]+1;\n\nexpected=1.48116;\nAbs[f[Xv,Yv]-expected]<10^(-5)\n\nX=Array[x,n];\nY=Array[y,n];\ng=D[f[X,Y],{X,1}]/.{x[i_]:>Xv[[i]], y[i_]:>Yv[[i]]};\nh=D[f[X,Y],{X,2}]/.{x[i_]:>Xv[[i]], y[i_]:>Yv[[i]]};\n\ngg = Table[0, {i, m}];\nFor[i = 1, i <= n, i++, gg[[Xi[[i]] + 1]]+=g[[i]]];\nhh = Table[0, {i, m}, {j, n}];\nFor[i=1, i<=n, i++, \n  For[j=1, j<=n, j++,\n    hh[[Xi[[i]]+1,j]]+=h[[i,j]]\n  ]\n]\nhhh = Table[0, {i, m}, {j, m}];\nFor[i=1, i<=m, i++, \n  For[j=1, j<=n, j++,\n    hhh[[i,Xi[[j]]+1]]+=hh[[i,j]]\n  ]\n]\n\ngg\nhhh\n"
  },
  {
    "path": "cola/libtopology/tests/kamada.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libtopology - Classes used in generating and managing topology constraints.\n *\n * Copyright (C) 2007-2008  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library in the file LICENSE; if not, \n * write to the Free Software Foundation, Inc., 59 Temple Place, \n * Suite 330, Boston, MA  02111-1307  USA\n *\n*/\n\n/**\n * Test of topology conserving constraints.  Sets up a graph\n * with four nodes and two edges, initially with two bends around the\n * first disconnected node.  After an iteration an edge segment must be split\n * to bend around the second disconnected node.\n *\n * \\file split.cpp\n * \\author Tim Dwyer\n * \\date Dec 2007\n */\n#include <libvpsc/rectangle.h>\n#include <libtopology/topology_constraints.h>\n#include <libcola/cola.h>\n#include <libcola/output_svg.h>\n#include <libproject/project.h>\n#include <vector>\n#include <iostream>\n#include <sstream>\nusing namespace std;\nusing namespace topology;\n#include \"test.h\"\n\ndouble expectedStress=1.48116;\ndouble expectedG1[]=\n{0.00849768, -0.0192465, 0, 0.0107488};\n\ndouble expectedG2[]={0.003837,-0.001923,-0.001914};\ndouble expectedH1[]= \n{0.000312442, -0.000438933, 0,  0.000126491, \n-0.000438933,  0.000746922, 0, -0.000307989,\n           0,            0, 0,            0, \n 0.000126491, -0.000307989, 0,  0.000181498};\n\ndouble expectedH2[]={0.000505,-0.000169,-0.000336,\n                     -0.000169,0.000165,0.000004 ,\n                     -0.000336,0.000004,0.000333};\n\nvoid makeEdge(Edges& es,EdgePoints& eps) {\n\tes.push_back(new Edge(70,eps));\n\teps.clear();\n}\nvoid split() {\n    Nodes nodes;\n\n    printf(\"test: bend2()\\n\");\naddNode(nodes,233.500000,112.500000,35.000000,31.000000);\naddNode(nodes,222.500000,155.500000,35.000000,31.000000);\naddNode(nodes,276.500000,101.500000,35.000000,31.000000);\naddNode(nodes,279.500000,310.500000,35.000000,31.000000);\naddNode(nodes,236.500000,299.500000,35.000000,31.000000);\naddNode(nodes,224.500000,256.500000,35.000000,31.000000);\naddNode(nodes,380.500000,308.500000,35.000000,31.000000);\naddNode(nodes,433.500000,253.500000,35.000000,31.000000);\naddNode(nodes,423.500000,296.500000,35.000000,31.000000);\naddNode(nodes,432.500000,152.500000,35.000000,31.000000);\naddNode(nodes,420.500000,109.500000,35.000000,31.000000);\naddNode(nodes,377.500000,99.500000,35.000000,31.000000);\naddNode(nodes,360.500000,235.500000,35.000000,31.000000);\naddNode(nodes,297.500000,236.500000,35.000000,31.000000);\naddNode(nodes,359.500000,172.500000,35.000000,31.000000);\naddNode(nodes,296.500000,173.500000,35.000000,31.000000);\nEdges es;\nEdgePoints eps;\naddToPath(eps,nodes[5],EdgePoint::CENTRE);\naddToPath(eps,nodes[4],EdgePoint::CENTRE);\nmakeEdge(es,eps);\naddToPath(eps,nodes[13],EdgePoint::CENTRE);\naddToPath(eps,nodes[3],EdgePoint::CENTRE);\nmakeEdge(es,eps);\naddToPath(eps,nodes[4],EdgePoint::CENTRE);\naddToPath(eps,nodes[13],EdgePoint::CENTRE);\nmakeEdge(es,eps);\naddToPath(eps,nodes[3],EdgePoint::CENTRE);\naddToPath(eps,nodes[4],EdgePoint::CENTRE);\nmakeEdge(es,eps);\naddToPath(eps,nodes[5],EdgePoint::CENTRE);\naddToPath(eps,nodes[4],EdgePoint::BL);\naddToPath(eps,nodes[4],EdgePoint::TL);\naddToPath(eps,nodes[4],EdgePoint::TR);\naddToPath(eps,nodes[3],EdgePoint::CENTRE);\nmakeEdge(es,eps);\naddToPath(eps,nodes[7],EdgePoint::CENTRE);\naddToPath(eps,nodes[8],EdgePoint::CENTRE);\nmakeEdge(es,eps);\naddToPath(eps,nodes[12],EdgePoint::CENTRE);\naddToPath(eps,nodes[6],EdgePoint::CENTRE);\nmakeEdge(es,eps);\naddToPath(eps,nodes[8],EdgePoint::CENTRE);\naddToPath(eps,nodes[12],EdgePoint::CENTRE);\nmakeEdge(es,eps);\naddToPath(eps,nodes[6],EdgePoint::CENTRE);\naddToPath(eps,nodes[8],EdgePoint::CENTRE);\nmakeEdge(es,eps);\naddToPath(eps,nodes[7],EdgePoint::CENTRE);\naddToPath(eps,nodes[8],EdgePoint::BR);\naddToPath(eps,nodes[8],EdgePoint::TR);\naddToPath(eps,nodes[8],EdgePoint::TL);\naddToPath(eps,nodes[6],EdgePoint::CENTRE);\nmakeEdge(es,eps);\naddToPath(eps,nodes[12],EdgePoint::CENTRE);\naddToPath(eps,nodes[7],EdgePoint::CENTRE);\nmakeEdge(es,eps);\naddToPath(eps,nodes[15],EdgePoint::CENTRE);\naddToPath(eps,nodes[12],EdgePoint::CENTRE);\nmakeEdge(es,eps);\naddToPath(eps,nodes[13],EdgePoint::CENTRE);\naddToPath(eps,nodes[14],EdgePoint::CENTRE);\nmakeEdge(es,eps);\naddToPath(eps,nodes[12],EdgePoint::CENTRE);\naddToPath(eps,nodes[13],EdgePoint::CENTRE);\nmakeEdge(es,eps);\naddToPath(eps,nodes[14],EdgePoint::CENTRE);\naddToPath(eps,nodes[12],EdgePoint::CENTRE);\nmakeEdge(es,eps);\naddToPath(eps,nodes[13],EdgePoint::CENTRE);\naddToPath(eps,nodes[15],EdgePoint::CENTRE);\nmakeEdge(es,eps);\naddToPath(eps,nodes[5],EdgePoint::CENTRE);\naddToPath(eps,nodes[13],EdgePoint::CENTRE);\nmakeEdge(es,eps);\naddToPath(eps,nodes[0],EdgePoint::CENTRE);\naddToPath(eps,nodes[2],EdgePoint::CENTRE);\nmakeEdge(es,eps);\naddToPath(eps,nodes[1],EdgePoint::CENTRE);\naddToPath(eps,nodes[15],EdgePoint::CENTRE);\nmakeEdge(es,eps);\naddToPath(eps,nodes[10],EdgePoint::CENTRE);\naddToPath(eps,nodes[14],EdgePoint::CENTRE);\nmakeEdge(es,eps);\naddToPath(eps,nodes[11],EdgePoint::CENTRE);\naddToPath(eps,nodes[10],EdgePoint::BL);\naddToPath(eps,nodes[10],EdgePoint::BR);\naddToPath(eps,nodes[10],EdgePoint::TR);\naddToPath(eps,nodes[9],EdgePoint::CENTRE);\nmakeEdge(es,eps);\naddToPath(eps,nodes[15],EdgePoint::CENTRE);\naddToPath(eps,nodes[14],EdgePoint::CENTRE);\nmakeEdge(es,eps);\naddToPath(eps,nodes[14],EdgePoint::CENTRE);\naddToPath(eps,nodes[11],EdgePoint::CENTRE);\nmakeEdge(es,eps);\naddToPath(eps,nodes[9],EdgePoint::CENTRE);\naddToPath(eps,nodes[14],EdgePoint::CENTRE);\nmakeEdge(es,eps);\naddToPath(eps,nodes[10],EdgePoint::CENTRE);\naddToPath(eps,nodes[9],EdgePoint::CENTRE);\nmakeEdge(es,eps);\naddToPath(eps,nodes[11],EdgePoint::CENTRE);\naddToPath(eps,nodes[10],EdgePoint::CENTRE);\nmakeEdge(es,eps);\naddToPath(eps,nodes[0],EdgePoint::CENTRE);\naddToPath(eps,nodes[15],EdgePoint::CENTRE);\nmakeEdge(es,eps);\naddToPath(eps,nodes[1],EdgePoint::CENTRE);\naddToPath(eps,nodes[0],EdgePoint::CENTRE);\nmakeEdge(es,eps);\naddToPath(eps,nodes[2],EdgePoint::CENTRE);\naddToPath(eps,nodes[15],EdgePoint::CENTRE);\nmakeEdge(es,eps);\naddToPath(eps,nodes[1],EdgePoint::CENTRE);\naddToPath(eps,nodes[0],EdgePoint::TL);\naddToPath(eps,nodes[0],EdgePoint::BL);\naddToPath(eps,nodes[0],EdgePoint::BR);\naddToPath(eps,nodes[2],EdgePoint::CENTRE);\nmakeEdge(es,eps);\n\n    const size_t V = nodes.size();\n    writeFile(nodes,es,\"kamada-0.svg\");\n\n    vpsc::Variables vs;\n    vpsc::Constraints cs;\n    getVariables(nodes,vs);\n    TopologyConstraints t(vpsc::HORIZONTAL,nodes,es,vs,cs);\n\n    // test computeStress\n    double stress=t.computeStress();\n    printf(\"Stress=%f\\n\",stress);\n    //assert(fabs(expectedStress-stress)<1e-4);\n\n    valarray<double> g(V);\n    cola::SparseMap h(V);\n    for(unsigned i=1;i<5;i++) {\n        g=0;\n        h.clear();\n        t.gradientProjection(g,h);\n        stringstream ss;\n        ss << \"kamada-\" << i << \".svg\";\n        writeFile(nodes,es,ss.str().c_str());\n    }\n\n    for_each(cs.begin(),cs.end(),delete_object());\n    for_each(nodes.begin(),nodes.end(),delete_node());\n    for_each(es.begin(),es.end(),delete_object());\n}\n\nint main() {\n    split();\n    return 0;\n}\n// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=4:softtabstop=4:textwidth=80 :\n"
  },
  {
    "path": "cola/libtopology/tests/nodedragging.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libtopology - Classes used in generating and managing topology constraints.\n *\n * Copyright (C) 2006-2008  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library in the file LICENSE; if not, \n * write to the Free Software Foundation, Inc., 59 Temple Place, \n * Suite 330, Boston, MA  02111-1307  USA\n *\n * Authors:\n *   Tim Dwyer <tgdwyer@gmail.com>\n*/\n\n/** \\file nodedragging.cpp\n *\n * tests interaction with layout and solver.  We have a number of disconnected\n * shapes.  One shape is \"dragged\" through the others.  Overlaps should be\n * avoided.\n */\n\n#include <iostream>\n#include <iomanip>\n#include <fstream>\n\n#include <vector>\n#include <valarray>\n#include <algorithm>\n#include <float.h>\n#include \"libcola/cola.h\"\n#include \"libtopology/topology_graph.h\"\n#include \"libtopology/cola_topology_addon.h\"\n#include \"libcola/tests/graphlayouttest.h\"\nusing namespace std;\nusing namespace cola;\n\nstring outFName=\"nodedragging\";\n\ntopology::Node* addNode(\n        topology::Nodes& vs, vpsc::Rectangle* r) {\n    topology::Node *v = new topology::Node(vs.size(), r);\n    vs.push_back(v);\n    return v;\n}\nvoid addToPath(topology::EdgePoints& ps, topology::Node *v, topology::EdgePoint::RectIntersect i) {\n    ps.push_back(new topology::EdgePoint(v,i));\n}\nstruct Test : TestConvergence {\n    Test(const double d,const unsigned i,topology::Nodes& vs, topology::Edges& es) : TestConvergence(d,i), vs(vs), es(es), iter(1) {}\n    bool operator()(const double new_stress, valarray<double> & X, valarray<double> & Y) {\n        bool converged = TestConvergence::operator()(new_stress,X,Y);\n        if(converged) {\n            cout << \"stress=\"<<new_stress<<\" iteration=\"<<iter<<endl;\n            stringstream ss;\n            ss<<outFName<<\"-\"<< setfill('0') << setw(3) << iter++ << \".svg\";\n            writeFile(vs,es,ss.str());\n        }\n        return converged;\n    }\n    double lastStress;\n    topology::Nodes& vs;\n    topology::Edges& es;\n    int iter;\n};\n\nvoid nodeDragging() {\n//printf(\n//\"tests interaction with layout and solver.  We have a number of disconnected\"\n//\"shapes.  One shape is 'dragged' through the others.  Overlaps should be\"\n//\"avoided.\"\n//\"\\n\");\n    const unsigned V = 10;\n    Edge edge_array[] = { Edge(0, 1), Edge(1, 2), Edge(2, 0) };\n    const std::size_t E = sizeof(edge_array) / sizeof(Edge);\n    vector<Edge> es(edge_array,edge_array+E);\n    vector<vpsc::Rectangle*> rs;\n    double w=54, h=34;\n    double\n        x[]={279, 406, 444, 474, 406, 441, 375, 408, 373, 339},\n        y[]={273, 279, 224, 179, 92, 135, 135, 179, 226, 179};\n    for(unsigned i=0;i<V;++i) {\n        rs.push_back(new vpsc::Rectangle(x[i],x[i]+w,y[i],y[i]+h));\n    }\n    double idealLength=60;\n    // set up topology graph\n    topology::Nodes vs;\n    for(vector<vpsc::Rectangle*>::iterator i = rs.begin(); i!=rs.end();++i) {\n        addNode(vs,*i);\n    }\n    topology::Edges tes;\n    writeFile(vs,tes,outFName+\"-000.svg\");\n\n    Locks locks;\n    locks.push_back(Lock(0,rs[0]->getCentreX(), rs[0]->getCentreY()));\n    Lock& lock=locks[0];\n    PreIteration preIteration(locks);\n    Test test(0.00001,100,vs,tes);\n    ConstrainedFDLayout alg(rs,es,idealLength, StandardEdgeLengths,\n            &test,&preIteration);\n    alg.setAvoidNodeOverlaps(true);\n    topology::ColaTopologyAddon topology(vs, tes);\n    alg.setTopology(&topology);\n\n    double step=1;\n    for(unsigned i=0;i<100;i++) {\n        lock=Lock(0,rs[0]->getCentreX()+step,rs[0]->getCentreY()-step);\n        alg.run(true,true);\n    }\n    double finalStress=alg.computeStress();\n    printf(\"finalStress=%f\\n\",finalStress);\n\n    //assert(finalStress<1e-5);\n    for_each(rs.begin(),rs.end(),delete_object());\n    for_each(tes.begin(),tes.end(),delete_object());\n    for_each(vs.begin(),vs.end(),delete_object());\n}\nint main() {\n\tnodeDragging();\n    return 0;\n}\n// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=4:softtabstop=4:textwidth=80 :\n\n"
  },
  {
    "path": "cola/libtopology/tests/nooverlap.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libtopology - Classes used in generating and managing topology constraints.\n *\n * Copyright (C) 2007-2008  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library in the file LICENSE; if not, \n * write to the Free Software Foundation, Inc., 59 Temple Place, \n * Suite 330, Boston, MA  02111-1307  USA\n *\n*/\n\n/**\n * Test of topology conserving constraints - no overlap constraints.\n * A number of rectangles is generated and overlaps between them \n * removed using libvpsc.  For each drawing dimension dim,\n * an instance of TopologyConstraints \n * in axis dim is generated for this set of non-overlapping rectangles and\n * hence a set of libvpsc::Constraints that should prevent overlap\n * if the rectangles move in dim.  The rectangles are then randomly perturbed in\n * dim and overlaps resolved again using libvpsc with the set of constraints\n * generated by TopologyConstraints.\n * Overlaps must then be non-existent.\n *\n * \\file nooverlap.cpp\n * \\author Tim Dwyer\n * \\date Jan 2008\n */\n#include <libvpsc/rectangle.h>\n#include <libtopology/topology_constraints.h>\n#include <libcola/cola.h>\n#include <libcola/output_svg.h>\n#include <libvpsc/variable.h>\n#include <libvpsc/constraint.h>\n#include <vector>\n#include <iostream>\n#include <sstream>\nusing namespace std;\nusing namespace topology;\n#include \"test.h\"\nstruct Create {\n    Create() : ctr(0) {}\n    Node* operator() (vpsc::Rectangle* r) {\n        return new Node(ctr,r,new vpsc::Variable(ctr));\n        ++ctr;\n    }\n    unsigned ctr;\n};\nvoid testRectangles(vpsc::Rectangles& rs) {\n    rs.push_back(new vpsc::Rectangle(5,15,14,52));\n    rs.push_back(new vpsc::Rectangle(5,10,14,23));\n    rs.push_back(new vpsc::Rectangle(5,35,13,39));\n    rs.push_back(new vpsc::Rectangle(2,10,6,34));\n    rs.push_back(new vpsc::Rectangle(5,9,2,22));\n    rs.push_back(new vpsc::Rectangle(11,13,8,24));\n    rs.push_back(new vpsc::Rectangle(7,35,10,27));\n    rs.push_back(new vpsc::Rectangle(9,39,8,10));\n    rs.push_back(new vpsc::Rectangle(11,38,11,20));\n    rs.push_back(new vpsc::Rectangle(9,47,5,55));\n}\nvoid testCase() {\n    string name(\"nooverlap\");\n    Edges es;\n    vpsc::Rectangles rs;\n    testRectangles(rs);\n    const size_t V = rs.size();\n    \n    removeoverlaps(rs);\n    noRectangleOverlaps(rs);\n    Nodes nodes(V);\n    transform(rs.begin(),rs.end(),nodes.begin(),Create());\n    vpsc::Variables vs;\n    getVariables(nodes,vs);\n\n    writeFile(nodes,es,name+\"-0.svg\");\n\n    try {\n        vpsc::Constraints cs;\n        Edges es; // not used in this test\n        TopologyConstraints t(vpsc::XDIM,nodes,es,nullptr,vs,cs);\n        for(Nodes::iterator v=nodes.begin();v!=nodes.end();++v) {\n            (*v)->var->desiredPosition=getRand(5);\n        }\n        t.solve();\n        writeFile(nodes,es,name+\"-1.svg\");\n\n        noRectangleOverlaps(rs);\n\n        for_each(cs.begin(),cs.end(),delete_object());\n    } catch(const char *e) {\n        fprintf(stderr,\"ERROR: %s\\n\",e);\n    }\n\n    for_each(nodes.begin(),nodes.end(),delete_node());\n    for_each(vs.begin(),vs.end(),delete_object());\n}\nvoid randomTest(vpsc::Dim dim) {\n    string name(\"nooverlap\");\n    const size_t V = 10;\n    vpsc::Rectangles rs, rs_bak;\n    generateRandomRects(V,rs);\n    for(vpsc::Rectangles::iterator i=rs.begin();i!=rs.end();++i) {\n        rs_bak.push_back(new vpsc::Rectangle(**i));\n    }\n    static const double EXTRA_GAP=1e-10;\n    vpsc::Rectangle::setXBorder(EXTRA_GAP);\n    vpsc::Rectangle::setYBorder(EXTRA_GAP);\n    removeoverlaps(rs);\n    noRectangleOverlaps(rs);\n    Nodes nodes(V);\n    transform(rs.begin(),rs.end(),nodes.begin(),Create());\n    vpsc::Variables vs;\n    getVariables(nodes,vs);\n\n    try {\n        vpsc::Constraints cs;\n        Edges es; // not used in this test\n        TopologyConstraints t(dim,nodes,es,nullptr,vs,cs);\n        for(Nodes::iterator v=nodes.begin();v!=nodes.end();++v) {\n            (*v)->var->desiredPosition=getRand(5);\n        }\n        t.solve();\n        vpsc::Rectangle::setXBorder(0);\n        vpsc::Rectangle::setYBorder(0);\n\n        noRectOverlaps(rs);\n\n        for_each(cs.begin(),cs.end(),delete_object());\n    } catch(const char *e) {\n        fprintf(stderr,\"ERROR: %s\\n\",e);\n        printf(\"original:\");\n        for(vpsc::Rectangles::iterator i=rs_bak.begin();i!=rs_bak.end();++i) {\n            cout << **i << endl;\n        }\n        printf(\"overlapping:\");\n        for(vpsc::Rectangles::iterator i=rs.begin();i!=rs.end();++i) {\n            cout << **i << endl;\n        }\n    }\n\n    for_each(nodes.begin(),nodes.end(),delete_node());\n    for_each(vs.begin(),vs.end(),delete_object());\n}\n\nint main() {\n    //testCase();\n    //return 0;\n    for(unsigned i=0;i<10000;++i) {\n        if(!(i%1000)) {\n            printf(\" completed %d instances...\\n\",i);\n        }\n        randomTest(vpsc::HORIZONTAL);\n        randomTest(vpsc::VERTICAL);\n    }\n    return 0;\n}\n// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=4:softtabstop=4:textwidth=80 :\n"
  },
  {
    "path": "cola/libtopology/tests/orthogonalOpt.cpp",
    "content": "#include \"libavoid/libavoid.h\"\n#include \"libcola/cola.h\"\n#include \"libtopology/orthogonal_topology.h\"\nusing namespace cola;\nusing namespace Avoid;\nint main(void) {\n    Router *router = new Router(\n            PolyLineRouting | OrthogonalRouting);\n    router->setRoutingParameter((RoutingParameter)0, 50);\n    router->setRoutingParameter((RoutingParameter)1, 0);\n    router->setRoutingParameter((RoutingParameter)2, 0);\n    router->setRoutingParameter((RoutingParameter)3, 4000);\n    router->setRoutingParameter((RoutingParameter)4, 0);\n    router->setRoutingParameter((RoutingParameter)5, 100);\n    router->setRoutingParameter((RoutingParameter)6, 0);\n    router->setRoutingParameter((RoutingParameter)7, 4);\n    router->setRoutingOption((RoutingOption)0, true);\n    router->setRoutingOption((RoutingOption)1, true);\n    router->setRoutingOption((RoutingOption)2, false);\n    router->setRoutingOption((RoutingOption)3, false);\n    Polygon poly1(4);\n    poly1.ps[0] = Point(726.878, 218.197);\n    poly1.ps[1] = Point(726.878, 250.197);\n    poly1.ps[2] = Point(706.878, 250.197);\n    poly1.ps[3] = Point(706.878, 218.197);\n    new ShapeRef(router, poly1, 1);\n\n    Polygon poly2(4);\n    poly2.ps[0] = Point(117.711, 1515.53);\n    poly2.ps[1] = Point(117.711, 1535.53);\n    poly2.ps[2] = Point(85.7111, 1535.53);\n    poly2.ps[3] = Point(85.7111, 1515.53);\n    new ShapeRef(router, poly2, 2);\n\n    Polygon poly3(4);\n    poly3.ps[0] = Point(-251.289, 1435.53);\n    poly3.ps[1] = Point(-251.289, 1467.53);\n    poly3.ps[2] = Point(-271.289, 1467.53);\n    poly3.ps[3] = Point(-271.289, 1435.53);\n    new ShapeRef(router, poly3, 3);\n\n    Polygon poly4(4);\n    poly4.ps[0] = Point(117.711, 1557.53);\n    poly4.ps[1] = Point(117.711, 1577.53);\n    poly4.ps[2] = Point(85.7111, 1577.53);\n    poly4.ps[3] = Point(85.7111, 1557.53);\n    new ShapeRef(router, poly4, 4);\n\n    Polygon poly5(4);\n    poly5.ps[0] = Point(-251.289, 1515.53);\n    poly5.ps[1] = Point(-251.289, 1577.53);\n    poly5.ps[2] = Point(-313.289, 1577.53);\n    poly5.ps[3] = Point(-313.289, 1515.53);\n    new ShapeRef(router, poly5, 5);\n\n    Polygon poly6(4);\n    poly6.ps[0] = Point(1158.88, -159.553);\n    poly6.ps[1] = Point(1158.88, 217.447);\n    poly6.ps[2] = Point(936.878, 217.447);\n    poly6.ps[3] = Point(936.878, -159.553);\n    new ShapeRef(router, poly6, 6);\n\n    Polygon poly7(4);\n    poly7.ps[0] = Point(836.878, -647.803);\n    poly7.ps[1] = Point(836.878, -473.803);\n    poly7.ps[2] = Point(716.878, -473.803);\n    poly7.ps[3] = Point(716.878, -647.803);\n    new ShapeRef(router, poly7, 7);\n\n    Polygon poly8(4);\n    poly8.ps[0] = Point(417.378, 1468.53);\n    poly8.ps[1] = Point(417.378, 1500.53);\n    poly8.ps[2] = Point(397.378, 1500.53);\n    poly8.ps[3] = Point(397.378, 1468.53);\n    new ShapeRef(router, poly8, 8);\n\n    Polygon poly9(4);\n    poly9.ps[0] = Point(684.878, 1440.53);\n    poly9.ps[1] = Point(684.878, 1460.53);\n    poly9.ps[2] = Point(652.878, 1460.53);\n    poly9.ps[3] = Point(652.878, 1440.53);\n    new ShapeRef(router, poly9, 9);\n\n    Polygon poly10(4);\n    poly10.ps[0] = Point(684.878, 1515.53);\n    poly10.ps[1] = Point(684.878, 1535.53);\n    poly10.ps[2] = Point(652.878, 1535.53);\n    poly10.ps[3] = Point(652.878, 1515.53);\n    new ShapeRef(router, poly10, 10);\n\n    Polygon poly11(4);\n    poly11.ps[0] = Point(587.378, 1275.86);\n    poly11.ps[1] = Point(587.378, 1295.86);\n    poly11.ps[2] = Point(555.378, 1295.86);\n    poly11.ps[3] = Point(555.378, 1275.86);\n    new ShapeRef(router, poly11, 11);\n\n    Polygon poly12(4);\n    poly12.ps[0] = Point(581.378, 1173.86);\n    poly12.ps[1] = Point(581.378, 1205.86);\n    poly12.ps[2] = Point(561.378, 1205.86);\n    poly12.ps[3] = Point(561.378, 1173.86);\n    new ShapeRef(router, poly12, 12);\n\n    Polygon poly13(4);\n    poly13.ps[0] = Point(291.378, 1242.86);\n    poly13.ps[1] = Point(291.378, 1262.86);\n    poly13.ps[2] = Point(259.378, 1262.86);\n    poly13.ps[3] = Point(259.378, 1242.86);\n    new ShapeRef(router, poly13, 13);\n\n    Polygon poly14(4);\n    poly14.ps[0] = Point(-117.289, 1242.86);\n    poly14.ps[1] = Point(-117.289, 1262.86);\n    poly14.ps[2] = Point(-149.289, 1262.86);\n    poly14.ps[3] = Point(-149.289, 1242.86);\n    new ShapeRef(router, poly14, 14);\n\n    Polygon poly15(4);\n    poly15.ps[0] = Point(901.878, 1242.86);\n    poly15.ps[1] = Point(901.878, 1262.86);\n    poly15.ps[2] = Point(869.878, 1262.86);\n    poly15.ps[3] = Point(869.878, 1242.86);\n    new ShapeRef(router, poly15, 15);\n\n    Polygon poly16(4);\n    poly16.ps[0] = Point(515.378, 991.864);\n    poly16.ps[1] = Point(515.378, 1035.86);\n    poly16.ps[2] = Point(427.378, 1035.86);\n    poly16.ps[3] = Point(427.378, 991.864);\n    new ShapeRef(router, poly16, 16);\n\n    Polygon poly17(4);\n    poly17.ps[0] = Point(726.878, 1032.86);\n    poly17.ps[1] = Point(726.878, 1064.86);\n    poly17.ps[2] = Point(706.878, 1064.86);\n    poly17.ps[3] = Point(706.878, 1032.86);\n    new ShapeRef(router, poly17, 17);\n\n    Polygon poly18(4);\n    poly18.ps[0] = Point(-281.789, 1046.86);\n    poly18.ps[1] = Point(-281.789, 1210.86);\n    poly18.ps[2] = Point(-488.789, 1210.86);\n    poly18.ps[3] = Point(-488.789, 1046.86);\n    new ShapeRef(router, poly18, 18);\n\n    Polygon poly19(4);\n    poly19.ps[0] = Point(726.878, 908.864);\n    poly19.ps[1] = Point(726.878, 940.864);\n    poly19.ps[2] = Point(706.878, 940.864);\n    poly19.ps[3] = Point(706.878, 908.864);\n    new ShapeRef(router, poly19, 19);\n\n    Polygon poly20(4);\n    poly20.ps[0] = Point(726.878, 784.864);\n    poly20.ps[1] = Point(726.878, 816.864);\n    poly20.ps[2] = Point(706.878, 816.864);\n    poly20.ps[3] = Point(706.878, 784.864);\n    new ShapeRef(router, poly20, 20);\n\n    Polygon poly21(4);\n    poly21.ps[0] = Point(705.878, 373.864);\n    poly21.ps[1] = Point(705.878, 405.864);\n    poly21.ps[2] = Point(685.878, 405.864);\n    poly21.ps[3] = Point(685.878, 373.864);\n    new ShapeRef(router, poly21, 21);\n\n    Polygon poly22(4);\n    poly22.ps[0] = Point(306.878, 715.864);\n    poly22.ps[1] = Point(306.878, 775.864);\n    poly22.ps[2] = Point(-6.12224, 775.864);\n    poly22.ps[3] = Point(-6.12224, 715.864);\n    new ShapeRef(router, poly22, 22);\n\n    Polygon poly23(4);\n    poly23.ps[0] = Point(554.378, 318.864);\n    poly23.ps[1] = Point(554.378, 338.864);\n    poly23.ps[2] = Point(522.378, 338.864);\n    poly23.ps[3] = Point(522.378, 318.864);\n    new ShapeRef(router, poly23, 23);\n\n    Polygon poly24(4);\n    poly24.ps[0] = Point(705.878, 9.94694);\n    poly24.ps[1] = Point(705.878, 41.9469);\n    poly24.ps[2] = Point(685.878, 41.9469);\n    poly24.ps[3] = Point(685.878, 9.94694);\n    new ShapeRef(router, poly24, 24);\n\n    Polygon poly25(4);\n    poly25.ps[0] = Point(838.878, 9.94694);\n    poly25.ps[1] = Point(838.878, 41.9469);\n    poly25.ps[2] = Point(818.878, 41.9469);\n    poly25.ps[3] = Point(818.878, 9.94694);\n    new ShapeRef(router, poly25, 25);\n\n    Polygon poly26(4);\n    poly26.ps[0] = Point(868.878, -256.303);\n    poly26.ps[1] = Point(868.878, -236.303);\n    poly26.ps[2] = Point(836.878, -236.303);\n    poly26.ps[3] = Point(836.878, -256.303);\n    new ShapeRef(router, poly26, 26);\n\n    Polygon poly27(4);\n    poly27.ps[0] = Point(726.878, -143.553);\n    poly27.ps[1] = Point(726.878, -111.553);\n    poly27.ps[2] = Point(706.878, -111.553);\n    poly27.ps[3] = Point(706.878, -143.553);\n    new ShapeRef(router, poly27, 27);\n\n    Polygon poly28(4);\n    poly28.ps[0] = Point(726.878, -334.803);\n    poly28.ps[1] = Point(726.878, -302.803);\n    poly28.ps[2] = Point(706.878, -302.803);\n    poly28.ps[3] = Point(706.878, -334.803);\n    new ShapeRef(router, poly28, 28);\n\n    Polygon poly29(4);\n    poly29.ps[0] = Point(488.378, -50.0531);\n    poly29.ps[1] = Point(488.378, -30.0531);\n    poly29.ps[2] = Point(456.378, -30.0531);\n    poly29.ps[3] = Point(456.378, -50.0531);\n    new ShapeRef(router, poly29, 29);\n\n    Polygon poly30(4);\n    poly30.ps[0] = Point(-14.2889, -146.053);\n    poly30.ps[1] = Point(-14.2889, -126.053);\n    poly30.ps[2] = Point(-46.2889, -126.053);\n    poly30.ps[3] = Point(-46.2889, -146.053);\n    new ShapeRef(router, poly30, 30);\n\n    Polygon poly31(4);\n    poly31.ps[0] = Point(-14.2889, -71.0531);\n    poly31.ps[1] = Point(-14.2889, -51.0531);\n    poly31.ps[2] = Point(-46.2889, -51.0531);\n    poly31.ps[3] = Point(-46.2889, -71.0531);\n    new ShapeRef(router, poly31, 31);\n\n    Polygon poly32(4);\n    poly32.ps[0] = Point(390.378, -137.553);\n    poly32.ps[1] = Point(390.378, -117.553);\n    poly32.ps[2] = Point(358.378, -117.553);\n    poly32.ps[3] = Point(358.378, -137.553);\n    new ShapeRef(router, poly32, 32);\n\n    Polygon poly33(4);\n    poly33.ps[0] = Point(219.378, -143.553);\n    poly33.ps[1] = Point(219.378, -111.553);\n    poly33.ps[2] = Point(199.378, -111.553);\n    poly33.ps[3] = Point(199.378, -143.553);\n    new ShapeRef(router, poly33, 33);\n\n    Polygon poly34(4);\n    poly34.ps[0] = Point(-237.289, -143.553);\n    poly34.ps[1] = Point(-237.289, -111.553);\n    poly34.ps[2] = Point(-257.289, -111.553);\n    poly34.ps[3] = Point(-257.289, -143.553);\n    new ShapeRef(router, poly34, 34);\n\n    Polygon poly35(4);\n    poly35.ps[0] = Point(84.7111, -393.803);\n    poly35.ps[1] = Point(84.7111, -373.803);\n    poly35.ps[2] = Point(52.7111, -373.803);\n    poly35.ps[3] = Point(52.7111, -393.803);\n    new ShapeRef(router, poly35, 35);\n\n    Polygon poly36(4);\n    poly36.ps[0] = Point(84.7111, -318.803);\n    poly36.ps[1] = Point(84.7111, -298.803);\n    poly36.ps[2] = Point(52.7111, -298.803);\n    poly36.ps[3] = Point(52.7111, -318.803);\n    new ShapeRef(router, poly36, 36);\n\n    Polygon poly37(4);\n    poly37.ps[0] = Point(84.7111, -126.803);\n    poly37.ps[1] = Point(84.7111, -106.803);\n    poly37.ps[2] = Point(52.7111, -106.803);\n    poly37.ps[3] = Point(52.7111, -126.803);\n    new ShapeRef(router, poly37, 37);\n\n    Polygon poly38(4);\n    poly38.ps[0] = Point(357.378, -361.803);\n    poly38.ps[1] = Point(357.378, -341.803);\n    poly38.ps[2] = Point(325.378, -341.803);\n    poly38.ps[3] = Point(325.378, -361.803);\n    new ShapeRef(router, poly38, 38);\n\n    Polygon poly39(4);\n    poly39.ps[0] = Point(357.378, -463.803);\n    poly39.ps[1] = Point(357.378, -443.803);\n    poly39.ps[2] = Point(325.378, -443.803);\n    poly39.ps[3] = Point(325.378, -463.803);\n    new ShapeRef(router, poly39, 39);\n\n    Polygon poly40(4);\n    poly40.ps[0] = Point(-131.789, -596.303);\n    poly40.ps[1] = Point(-131.789, -561.303);\n    poly40.ps[2] = Point(-392.789, -561.303);\n    poly40.ps[3] = Point(-392.789, -596.303);\n    new ShapeRef(router, poly40, 40);\n\n    Polygon poly41(4);\n    poly41.ps[0] = Point(18.7111, 1408.53);\n    poly41.ps[1] = Point(18.7111, 1428.53);\n    poly41.ps[2] = Point(-13.2889, 1428.53);\n    poly41.ps[3] = Point(-13.2889, 1408.53);\n    new ShapeRef(router, poly41, 41);\n\n    Polygon poly42(4);\n    poly42.ps[0] = Point(726.878, 609.864);\n    poly42.ps[1] = Point(726.878, 641.864);\n    poly42.ps[2] = Point(706.878, 641.864);\n    poly42.ps[3] = Point(706.878, 609.864);\n    new ShapeRef(router, poly42, 42);\n\n    Polygon poly43(4);\n    poly43.ps[0] = Point(84.7111, -243.803);\n    poly43.ps[1] = Point(84.7111, -223.803);\n    poly43.ps[2] = Point(52.7111, -223.803);\n    poly43.ps[3] = Point(52.7111, -243.803);\n    new ShapeRef(router, poly43, 43);\n\n    Polygon poly44(4);\n    poly44.ps[0] = Point(-14.2889, -29.0531);\n    poly44.ps[1] = Point(-14.2889, -9.05306);\n    poly44.ps[2] = Point(-46.2889, -9.05306);\n    poly44.ps[3] = Point(-46.2889, -29.0531);\n    new ShapeRef(router, poly44, 44);\n\n    Polygon poly45(4);\n    poly45.ps[0] = Point(-231.289, 89.1969);\n    poly45.ps[1] = Point(-231.289, 109.197);\n    poly45.ps[2] = Point(-263.289, 109.197);\n    poly45.ps[3] = Point(-263.289, 89.1969);\n    new ShapeRef(router, poly45, 45);\n\n    Polygon poly46(4);\n    poly46.ps[0] = Point(-231.289, 191.197);\n    poly46.ps[1] = Point(-231.289, 211.197);\n    poly46.ps[2] = Point(-263.289, 211.197);\n    poly46.ps[3] = Point(-263.289, 191.197);\n    new ShapeRef(router, poly46, 46);\n\n    Polygon poly47(4);\n    poly47.ps[0] = Point(150.711, 89.1969);\n    poly47.ps[1] = Point(150.711, 109.197);\n    poly47.ps[2] = Point(118.711, 109.197);\n    poly47.ps[3] = Point(118.711, 89.1969);\n    new ShapeRef(router, poly47, 47);\n\n    Polygon poly48(4);\n    poly48.ps[0] = Point(150.711, 191.197);\n    poly48.ps[1] = Point(150.711, 211.197);\n    poly48.ps[2] = Point(118.711, 211.197);\n    poly48.ps[3] = Point(118.711, 191.197);\n    new ShapeRef(router, poly48, 48);\n\n    Polygon poly49(4);\n    poly49.ps[0] = Point(959.878, -277.303);\n    poly49.ps[1] = Point(959.878, -215.303);\n    poly49.ps[2] = Point(897.878, -215.303);\n    poly49.ps[3] = Point(897.878, -277.303);\n    new ShapeRef(router, poly49, 49);\n\n    Polygon poly50(4);\n    poly50.ps[0] = Point(747.878, -443.803);\n    poly50.ps[1] = Point(747.878, -381.803);\n    poly50.ps[2] = Point(685.878, -381.803);\n    poly50.ps[3] = Point(685.878, -443.803);\n    new ShapeRef(router, poly50, 50);\n\n    Polygon poly51(4);\n    poly51.ps[0] = Point(747.878, 831.864);\n    poly51.ps[1] = Point(747.878, 893.864);\n    poly51.ps[2] = Point(685.878, 893.864);\n    poly51.ps[3] = Point(685.878, 831.864);\n    new ShapeRef(router, poly51, 51);\n\n    Polygon poly52(4);\n    poly52.ps[0] = Point(-216.289, -243.803);\n    poly52.ps[1] = Point(-216.289, -181.803);\n    poly52.ps[2] = Point(-278.289, -181.803);\n    poly52.ps[3] = Point(-278.289, -243.803);\n    new ShapeRef(router, poly52, 52);\n\n    Polygon poly53(4);\n    poly53.ps[0] = Point(-216.289, -71.0531);\n    poly53.ps[1] = Point(-216.289, -9.05306);\n    poly53.ps[2] = Point(-278.289, -9.05306);\n    poly53.ps[3] = Point(-278.289, -71.0531);\n    new ShapeRef(router, poly53, 53);\n\n    Polygon poly54(4);\n    poly54.ps[0] = Point(339.378, 297.864);\n    poly54.ps[1] = Point(339.378, 359.864);\n    poly54.ps[2] = Point(277.378, 359.864);\n    poly54.ps[3] = Point(277.378, 297.864);\n    new ShapeRef(router, poly54, 54);\n\n    Polygon poly55(4);\n    poly55.ps[0] = Point(339.378, -71.0531);\n    poly55.ps[1] = Point(339.378, -9.05306);\n    poly55.ps[2] = Point(277.378, -9.05306);\n    poly55.ps[3] = Point(277.378, -71.0531);\n    new ShapeRef(router, poly55, 55);\n\n    Polygon poly56(4);\n    poly56.ps[0] = Point(747.878, -243.803);\n    poly56.ps[1] = Point(747.878, -181.803);\n    poly56.ps[2] = Point(685.878, -181.803);\n    poly56.ps[3] = Point(685.878, -243.803);\n    new ShapeRef(router, poly56, 56);\n\n    Polygon poly57(4);\n    poly57.ps[0] = Point(747.878, -71.0531);\n    poly57.ps[1] = Point(747.878, -9.05306);\n    poly57.ps[2] = Point(685.878, -9.05306);\n    poly57.ps[3] = Point(685.878, -71.0531);\n    new ShapeRef(router, poly57, 57);\n\n    Polygon poly58(4);\n    poly58.ps[0] = Point(747.878, 955.864);\n    poly58.ps[1] = Point(747.878, 1017.86);\n    poly58.ps[2] = Point(685.878, 1017.86);\n    poly58.ps[3] = Point(685.878, 955.864);\n    new ShapeRef(router, poly58, 58);\n\n    Polygon poly59(4);\n    poly59.ps[0] = Point(747.878, 707.864);\n    poly59.ps[1] = Point(747.878, 769.864);\n    poly59.ps[2] = Point(685.878, 769.864);\n    poly59.ps[3] = Point(685.878, 707.864);\n    new ShapeRef(router, poly59, 59);\n\n    Polygon poly60(4);\n    poly60.ps[0] = Point(747.878, 470.864);\n    poly60.ps[1] = Point(747.878, 532.864);\n    poly60.ps[2] = Point(685.878, 532.864);\n    poly60.ps[3] = Point(685.878, 470.864);\n    new ShapeRef(router, poly60, 60);\n\n    Polygon poly61(4);\n    poly61.ps[0] = Point(992.878, 1221.86);\n    poly61.ps[1] = Point(992.878, 1283.86);\n    poly61.ps[2] = Point(930.878, 1283.86);\n    poly61.ps[3] = Point(930.878, 1221.86);\n    new ShapeRef(router, poly61, 61);\n\n    Polygon poly62(4);\n    poly62.ps[0] = Point(273.378, 1387.53);\n    poly62.ps[1] = Point(273.378, 1449.53);\n    poly62.ps[2] = Point(211.378, 1449.53);\n    poly62.ps[3] = Point(211.378, 1387.53);\n    new ShapeRef(router, poly62, 62);\n\n    Polygon poly63(4);\n    poly63.ps[0] = Point(883.878, 1515.53);\n    poly63.ps[1] = Point(883.878, 1577.53);\n    poly63.ps[2] = Point(821.878, 1577.53);\n    poly63.ps[3] = Point(821.878, 1515.53);\n    new ShapeRef(router, poly63, 63);\n\n    Polygon poly64(4);\n    poly64.ps[0] = Point(747.878, 1221.86);\n    poly64.ps[1] = Point(747.878, 1283.86);\n    poly64.ps[2] = Point(685.878, 1283.86);\n    poly64.ps[3] = Point(685.878, 1221.86);\n    new ShapeRef(router, poly64, 64);\n\n    Polygon poly65(4);\n    poly65.ps[0] = Point(438.378, 1221.86);\n    poly65.ps[1] = Point(438.378, 1283.86);\n    poly65.ps[2] = Point(376.378, 1283.86);\n    poly65.ps[3] = Point(376.378, 1221.86);\n    new ShapeRef(router, poly65, 65);\n\n    Polygon poly66(4);\n    poly66.ps[0] = Point(-251.289, 1221.86);\n    poly66.ps[1] = Point(-251.289, 1283.86);\n    poly66.ps[2] = Point(-313.289, 1283.86);\n    poly66.ps[3] = Point(-313.289, 1221.86);\n    new ShapeRef(router, poly66, 66);\n\n    Polygon poly67(4);\n    poly67.ps[0] = Point(438.378, 1515.53);\n    poly67.ps[1] = Point(438.378, 1577.53);\n    poly67.ps[2] = Point(376.378, 1577.53);\n    poly67.ps[3] = Point(376.378, 1515.53);\n    new ShapeRef(router, poly67, 67);\n\n    Polygon poly68(4);\n    poly68.ps[0] = Point(66.7111, 1221.86);\n    poly68.ps[1] = Point(66.7111, 1283.86);\n    poly68.ps[2] = Point(4.71109, 1283.86);\n    poly68.ps[3] = Point(4.71109, 1221.86);\n    new ShapeRef(router, poly68, 68);\n\n    Polygon poly69(4);\n    poly69.ps[0] = Point(-102.289, 1387.53);\n    poly69.ps[1] = Point(-102.289, 1449.53);\n    poly69.ps[2] = Point(-164.289, 1449.53);\n    poly69.ps[3] = Point(-164.289, 1387.53);\n    new ShapeRef(router, poly69, 69);\n\n    Polygon poly70(4);\n    poly70.ps[0] = Point(747.878, 107.947);\n    poly70.ps[1] = Point(747.878, 169.947);\n    poly70.ps[2] = Point(685.878, 169.947);\n    poly70.ps[3] = Point(685.878, 107.947);\n    new ShapeRef(router, poly70, 70);\n\n    Polygon poly71(4);\n    poly71.ps[0] = Point(-286.289, 68.1969);\n    poly71.ps[1] = Point(-286.289, 130.197);\n    poly71.ps[2] = Point(-348.289, 130.197);\n    poly71.ps[3] = Point(-348.289, 68.1969);\n    new ShapeRef(router, poly71, 71);\n\n    Polygon poly72(4);\n    poly72.ps[0] = Point(-69.2889, 68.1969);\n    poly72.ps[1] = Point(-69.2889, 130.197);\n    poly72.ps[2] = Point(-131.289, 130.197);\n    poly72.ps[3] = Point(-131.289, 68.1969);\n    new ShapeRef(router, poly72, 72);\n\n    Polygon poly73(4);\n    poly73.ps[0] = Point(-69.2889, 170.197);\n    poly73.ps[1] = Point(-69.2889, 232.197);\n    poly73.ps[2] = Point(-131.289, 232.197);\n    poly73.ps[3] = Point(-131.289, 170.197);\n    new ShapeRef(router, poly73, 73);\n\n    Polygon poly74(4);\n    poly74.ps[0] = Point(-286.289, 170.197);\n    poly74.ps[1] = Point(-286.289, 232.197);\n    poly74.ps[2] = Point(-348.289, 232.197);\n    poly74.ps[3] = Point(-348.289, 170.197);\n    new ShapeRef(router, poly74, 74);\n\n    Polygon poly75(4);\n    poly75.ps[0] = Point(-150.289, 955.864);\n    poly75.ps[1] = Point(-150.289, 975.864);\n    poly75.ps[2] = Point(-182.289, 975.864);\n    poly75.ps[3] = Point(-182.289, 955.864);\n    new ShapeRef(router, poly75, 75);\n\n    Polygon poly76(4);\n    poly76.ps[0] = Point(-251.289, 955.864);\n    poly76.ps[1] = Point(-251.289, 1017.86);\n    poly76.ps[2] = Point(-313.289, 1017.86);\n    poly76.ps[3] = Point(-313.289, 955.864);\n    new ShapeRef(router, poly76, 76);\n\n    Polygon poly77(4);\n    poly77.ps[0] = Point(684.878, 1557.53);\n    poly77.ps[1] = Point(684.878, 1577.53);\n    poly77.ps[2] = Point(652.878, 1577.53);\n    poly77.ps[3] = Point(652.878, 1557.53);\n    new ShapeRef(router, poly77, 77);\n\n    Polygon poly78(4);\n    poly78.ps[0] = Point(-150.289, 997.864);\n    poly78.ps[1] = Point(-150.289, 1017.86);\n    poly78.ps[2] = Point(-182.289, 1017.86);\n    poly78.ps[3] = Point(-182.289, 997.864);\n    new ShapeRef(router, poly78, 78);\n\n    Polygon poly79(4);\n    poly79.ps[0] = Point(1032.38, 1410.03);\n    poly79.ps[1] = Point(1032.38, 1575.03);\n    poly79.ps[2] = Point(895.378, 1575.03);\n    poly79.ps[3] = Point(895.378, 1410.03);\n    new ShapeRef(router, poly79, 79);\n\n    Polygon poly80(4);\n    poly80.ps[0] = Point(747.878, 373.864);\n    poly80.ps[1] = Point(747.878, 405.864);\n    poly80.ps[2] = Point(727.878, 405.864);\n    poly80.ps[3] = Point(727.878, 373.864);\n    new ShapeRef(router, poly80, 80);\n\n    Polygon poly81(4);\n    poly81.ps[0] = Point(833.878, 547.864);\n    poly81.ps[1] = Point(833.878, 579.864);\n    poly81.ps[2] = Point(813.878, 579.864);\n    poly81.ps[3] = Point(813.878, 547.864);\n    new ShapeRef(router, poly81, 81);\n\n    Polygon poly82(4);\n    poly82.ps[0] = Point(875.878, 547.864);\n    poly82.ps[1] = Point(875.878, 579.864);\n    poly82.ps[2] = Point(855.878, 579.864);\n    poly82.ps[3] = Point(855.878, 547.864);\n    new ShapeRef(router, poly82, 82);\n\n    Polygon poly83(4);\n    poly83.ps[0] = Point(150.711, 1113.86);\n    poly83.ps[1] = Point(150.711, 1133.86);\n    poly83.ps[2] = Point(118.711, 1133.86);\n    poly83.ps[3] = Point(118.711, 1113.86);\n    new ShapeRef(router, poly83, 83);\n\n    Polygon poly84(4);\n    poly84.ps[0] = Point(966.878, 547.864);\n    poly84.ps[1] = Point(966.878, 579.864);\n    poly84.ps[2] = Point(946.878, 579.864);\n    poly84.ps[3] = Point(946.878, 547.864);\n    new ShapeRef(router, poly84, 84);\n\n    Polygon poly85(4);\n    poly85.ps[0] = Point(536.378, 594.864);\n    poly85.ps[1] = Point(536.378, 656.864);\n    poly85.ps[2] = Point(474.378, 656.864);\n    poly85.ps[3] = Point(474.378, 594.864);\n    new ShapeRef(router, poly85, 85);\n\n    Polygon poly86(4);\n    poly86.ps[0] = Point(651.878, 695.864);\n    poly86.ps[1] = Point(651.878, 715.864);\n    poly86.ps[2] = Point(619.878, 715.864);\n    poly86.ps[3] = Point(619.878, 695.864);\n    new ShapeRef(router, poly86, 86);\n\n    Polygon poly87(4);\n    poly87.ps[0] = Point(651.878, 491.864);\n    poly87.ps[1] = Point(651.878, 511.864);\n    poly87.ps[2] = Point(619.878, 511.864);\n    poly87.ps[3] = Point(619.878, 491.864);\n    new ShapeRef(router, poly87, 87);\n\n    Polygon poly88(4);\n    poly88.ps[0] = Point(747.878, 297.864);\n    poly88.ps[1] = Point(747.878, 359.864);\n    poly88.ps[2] = Point(685.878, 359.864);\n    poly88.ps[3] = Point(685.878, 297.864);\n    new ShapeRef(router, poly88, 88);\n\n    Polygon poly89(4);\n    poly89.ps[0] = Point(-293.289, 1435.53);\n    poly89.ps[1] = Point(-293.289, 1467.53);\n    poly89.ps[2] = Point(-313.289, 1467.53);\n    poly89.ps[3] = Point(-313.289, 1435.53);\n    new ShapeRef(router, poly89, 89);\n\n    Polygon poly90(4);\n    poly90.ps[0] = Point(747.878, 9.94694);\n    poly90.ps[1] = Point(747.878, 41.9469);\n    poly90.ps[2] = Point(727.878, 41.9469);\n    poly90.ps[3] = Point(727.878, 9.94694);\n    new ShapeRef(router, poly90, 90);\n\n    Polygon poly91(4);\n    poly91.ps[0] = Point(84.7111, -201.803);\n    poly91.ps[1] = Point(84.7111, -181.803);\n    poly91.ps[2] = Point(52.7111, -181.803);\n    poly91.ps[3] = Point(52.7111, -201.803);\n    new ShapeRef(router, poly91, 91);\n\n    Polygon poly92(4);\n    poly92.ps[0] = Point(-14.2889, 45.9469);\n    poly92.ps[1] = Point(-14.2889, 65.9469);\n    poly92.ps[2] = Point(-46.2889, 65.9469);\n    poly92.ps[3] = Point(-46.2889, 45.9469);\n    new ShapeRef(router, poly92, 92);\n\n    Polygon poly93(4);\n    poly93.ps[0] = Point(684.878, 1632.53);\n    poly93.ps[1] = Point(684.878, 1652.53);\n    poly93.ps[2] = Point(652.878, 1652.53);\n    poly93.ps[3] = Point(652.878, 1632.53);\n    new ShapeRef(router, poly93, 93);\n\n    Polygon poly94(4);\n    poly94.ps[0] = Point(438.378, 1125.86);\n    poly94.ps[1] = Point(438.378, 1187.86);\n    poly94.ps[2] = Point(376.378, 1187.86);\n    poly94.ps[3] = Point(376.378, 1125.86);\n    new ShapeRef(router, poly94, 94);\n\n    Polygon poly95(4);\n    poly95.ps[0] = Point(802.878, 214.197);\n    poly95.ps[1] = Point(802.878, 254.197);\n    poly95.ps[2] = Point(726.878, 254.197);\n    poly95.ps[3] = Point(726.878, 214.197);\n    new ShapeRef(router, poly95, 95);\n\n    Polygon poly96(4);\n    poly96.ps[0] = Point(129.711, 1455.53);\n    poly96.ps[1] = Point(129.711, 1515.53);\n    poly96.ps[2] = Point(73.7111, 1515.53);\n    poly96.ps[3] = Point(73.7111, 1455.53);\n    new ShapeRef(router, poly96, 96);\n\n    Polygon poly97(4);\n    poly97.ps[0] = Point(-175.289, 1431.53);\n    poly97.ps[1] = Point(-175.289, 1471.53);\n    poly97.ps[2] = Point(-251.289, 1471.53);\n    poly97.ps[3] = Point(-251.289, 1431.53);\n    new ShapeRef(router, poly97, 97);\n\n    Polygon poly98(4);\n    poly98.ps[0] = Point(129.711, 1577.53);\n    poly98.ps[1] = Point(129.711, 1637.53);\n    poly98.ps[2] = Point(73.7111, 1637.53);\n    poly98.ps[3] = Point(73.7111, 1577.53);\n    new ShapeRef(router, poly98, 98);\n\n    Polygon poly99(4);\n    poly99.ps[0] = Point(493.378, 1464.53);\n    poly99.ps[1] = Point(493.378, 1504.53);\n    poly99.ps[2] = Point(417.378, 1504.53);\n    poly99.ps[3] = Point(417.378, 1464.53);\n    new ShapeRef(router, poly99, 99);\n\n    Polygon poly100(4);\n    poly100.ps[0] = Point(696.878, 1380.53);\n    poly100.ps[1] = Point(696.878, 1440.53);\n    poly100.ps[2] = Point(640.878, 1440.53);\n    poly100.ps[3] = Point(640.878, 1380.53);\n    new ShapeRef(router, poly100, 100);\n\n    Polygon poly101(4);\n    poly101.ps[0] = Point(696.878, 1455.53);\n    poly101.ps[1] = Point(696.878, 1515.53);\n    poly101.ps[2] = Point(640.878, 1515.53);\n    poly101.ps[3] = Point(640.878, 1455.53);\n    new ShapeRef(router, poly101, 101);\n\n    Polygon poly102(4);\n    poly102.ps[0] = Point(599.378, 1295.86);\n    poly102.ps[1] = Point(599.378, 1355.86);\n    poly102.ps[2] = Point(543.378, 1355.86);\n    poly102.ps[3] = Point(543.378, 1295.86);\n    new ShapeRef(router, poly102, 102);\n\n    Polygon poly103(4);\n    poly103.ps[0] = Point(657.378, 1169.86);\n    poly103.ps[1] = Point(657.378, 1209.86);\n    poly103.ps[2] = Point(581.378, 1209.86);\n    poly103.ps[3] = Point(581.378, 1169.86);\n    new ShapeRef(router, poly103, 103);\n\n    Polygon poly104(4);\n    poly104.ps[0] = Point(303.378, 1182.86);\n    poly104.ps[1] = Point(303.378, 1242.86);\n    poly104.ps[2] = Point(247.378, 1242.86);\n    poly104.ps[3] = Point(247.378, 1182.86);\n    new ShapeRef(router, poly104, 104);\n\n    Polygon poly105(4);\n    poly105.ps[0] = Point(-105.289, 1182.86);\n    poly105.ps[1] = Point(-105.289, 1242.86);\n    poly105.ps[2] = Point(-161.289, 1242.86);\n    poly105.ps[3] = Point(-161.289, 1182.86);\n    new ShapeRef(router, poly105, 105);\n\n    Polygon poly106(4);\n    poly106.ps[0] = Point(913.878, 1182.86);\n    poly106.ps[1] = Point(913.878, 1242.86);\n    poly106.ps[2] = Point(857.878, 1242.86);\n    poly106.ps[3] = Point(857.878, 1182.86);\n    new ShapeRef(router, poly106, 106);\n\n    Polygon poly107(4);\n    poly107.ps[0] = Point(802.878, 1028.86);\n    poly107.ps[1] = Point(802.878, 1068.86);\n    poly107.ps[2] = Point(726.878, 1068.86);\n    poly107.ps[3] = Point(726.878, 1028.86);\n    new ShapeRef(router, poly107, 107);\n\n    Polygon poly108(4);\n    poly108.ps[0] = Point(802.878, 904.864);\n    poly108.ps[1] = Point(802.878, 944.864);\n    poly108.ps[2] = Point(726.878, 944.864);\n    poly108.ps[3] = Point(726.878, 904.864);\n    new ShapeRef(router, poly108, 108);\n\n    Polygon poly109(4);\n    poly109.ps[0] = Point(802.878, 780.864);\n    poly109.ps[1] = Point(802.878, 820.864);\n    poly109.ps[2] = Point(726.878, 820.864);\n    poly109.ps[3] = Point(726.878, 780.864);\n    new ShapeRef(router, poly109, 109);\n\n    Polygon poly110(4);\n    poly110.ps[0] = Point(685.878, 369.864);\n    poly110.ps[1] = Point(685.878, 409.864);\n    poly110.ps[2] = Point(609.878, 409.864);\n    poly110.ps[3] = Point(609.878, 369.864);\n    new ShapeRef(router, poly110, 110);\n\n    Polygon poly111(4);\n    poly111.ps[0] = Point(566.378, 258.864);\n    poly111.ps[1] = Point(566.378, 318.864);\n    poly111.ps[2] = Point(510.378, 318.864);\n    poly111.ps[3] = Point(510.378, 258.864);\n    new ShapeRef(router, poly111, 111);\n\n    Polygon poly112(4);\n    poly112.ps[0] = Point(685.878, 5.94694);\n    poly112.ps[1] = Point(685.878, 45.9469);\n    poly112.ps[2] = Point(609.878, 45.9469);\n    poly112.ps[3] = Point(609.878, 5.94694);\n    new ShapeRef(router, poly112, 112);\n\n    Polygon poly113(4);\n    poly113.ps[0] = Point(914.878, 5.94694);\n    poly113.ps[1] = Point(914.878, 45.9469);\n    poly113.ps[2] = Point(838.878, 45.9469);\n    poly113.ps[3] = Point(838.878, 5.94694);\n    new ShapeRef(router, poly113, 113);\n\n    Polygon poly114(4);\n    poly114.ps[0] = Point(880.878, -316.303);\n    poly114.ps[1] = Point(880.878, -256.303);\n    poly114.ps[2] = Point(824.878, -256.303);\n    poly114.ps[3] = Point(824.878, -316.303);\n    new ShapeRef(router, poly114, 114);\n\n    Polygon poly115(4);\n    poly115.ps[0] = Point(802.878, -147.553);\n    poly115.ps[1] = Point(802.878, -107.553);\n    poly115.ps[2] = Point(726.878, -107.553);\n    poly115.ps[3] = Point(726.878, -147.553);\n    new ShapeRef(router, poly115, 115);\n\n    Polygon poly116(4);\n    poly116.ps[0] = Point(802.878, -338.803);\n    poly116.ps[1] = Point(802.878, -298.803);\n    poly116.ps[2] = Point(726.878, -298.803);\n    poly116.ps[3] = Point(726.878, -338.803);\n    new ShapeRef(router, poly116, 116);\n\n    Polygon poly117(4);\n    poly117.ps[0] = Point(500.378, -110.053);\n    poly117.ps[1] = Point(500.378, -50.0531);\n    poly117.ps[2] = Point(444.378, -50.0531);\n    poly117.ps[3] = Point(444.378, -110.053);\n    new ShapeRef(router, poly117, 117);\n\n    Polygon poly118(4);\n    poly118.ps[0] = Point(-2.28891, -206.053);\n    poly118.ps[1] = Point(-2.28891, -146.053);\n    poly118.ps[2] = Point(-58.2889, -146.053);\n    poly118.ps[3] = Point(-58.2889, -206.053);\n    new ShapeRef(router, poly118, 118);\n\n    Polygon poly119(4);\n    poly119.ps[0] = Point(-2.28891, -131.053);\n    poly119.ps[1] = Point(-2.28891, -71.0531);\n    poly119.ps[2] = Point(-58.2889, -71.0531);\n    poly119.ps[3] = Point(-58.2889, -131.053);\n    new ShapeRef(router, poly119, 119);\n\n    Polygon poly120(4);\n    poly120.ps[0] = Point(402.378, -197.553);\n    poly120.ps[1] = Point(402.378, -137.553);\n    poly120.ps[2] = Point(346.378, -137.553);\n    poly120.ps[3] = Point(346.378, -197.553);\n    new ShapeRef(router, poly120, 120);\n\n    Polygon poly121(4);\n    poly121.ps[0] = Point(199.378, -147.553);\n    poly121.ps[1] = Point(199.378, -107.553);\n    poly121.ps[2] = Point(123.378, -107.553);\n    poly121.ps[3] = Point(123.378, -147.553);\n    new ShapeRef(router, poly121, 121);\n\n    Polygon poly122(4);\n    poly122.ps[0] = Point(-161.289, -147.553);\n    poly122.ps[1] = Point(-161.289, -107.553);\n    poly122.ps[2] = Point(-237.289, -107.553);\n    poly122.ps[3] = Point(-237.289, -147.553);\n    new ShapeRef(router, poly122, 122);\n\n    Polygon poly123(4);\n    poly123.ps[0] = Point(96.7111, -453.803);\n    poly123.ps[1] = Point(96.7111, -393.803);\n    poly123.ps[2] = Point(40.7111, -393.803);\n    poly123.ps[3] = Point(40.7111, -453.803);\n    new ShapeRef(router, poly123, 123);\n\n    Polygon poly124(4);\n    poly124.ps[0] = Point(96.7111, -378.803);\n    poly124.ps[1] = Point(96.7111, -318.803);\n    poly124.ps[2] = Point(40.7111, -318.803);\n    poly124.ps[3] = Point(40.7111, -378.803);\n    new ShapeRef(router, poly124, 124);\n\n    Polygon poly125(4);\n    poly125.ps[0] = Point(96.7111, -106.803);\n    poly125.ps[1] = Point(96.7111, -46.8031);\n    poly125.ps[2] = Point(40.7111, -46.8031);\n    poly125.ps[3] = Point(40.7111, -106.803);\n    new ShapeRef(router, poly125, 125);\n\n    Polygon poly126(4);\n    poly126.ps[0] = Point(369.378, -421.803);\n    poly126.ps[1] = Point(369.378, -361.803);\n    poly126.ps[2] = Point(313.378, -361.803);\n    poly126.ps[3] = Point(313.378, -421.803);\n    new ShapeRef(router, poly126, 126);\n\n    Polygon poly127(4);\n    poly127.ps[0] = Point(369.378, -523.803);\n    poly127.ps[1] = Point(369.378, -463.803);\n    poly127.ps[2] = Point(313.378, -463.803);\n    poly127.ps[3] = Point(313.378, -523.803);\n    new ShapeRef(router, poly127, 127);\n\n    Polygon poly128(4);\n    poly128.ps[0] = Point(30.7111, 1348.53);\n    poly128.ps[1] = Point(30.7111, 1408.53);\n    poly128.ps[2] = Point(-25.2889, 1408.53);\n    poly128.ps[3] = Point(-25.2889, 1348.53);\n    new ShapeRef(router, poly128, 128);\n\n    Polygon poly129(4);\n    poly129.ps[0] = Point(802.878, 605.864);\n    poly129.ps[1] = Point(802.878, 645.864);\n    poly129.ps[2] = Point(726.878, 645.864);\n    poly129.ps[3] = Point(726.878, 605.864);\n    new ShapeRef(router, poly129, 129);\n\n    Polygon poly130(4);\n    poly130.ps[0] = Point(96.7111, -303.803);\n    poly130.ps[1] = Point(96.7111, -243.803);\n    poly130.ps[2] = Point(40.7111, -243.803);\n    poly130.ps[3] = Point(40.7111, -303.803);\n    new ShapeRef(router, poly130, 130);\n\n    Polygon poly131(4);\n    poly131.ps[0] = Point(-2.28891, -9.05306);\n    poly131.ps[1] = Point(-2.28891, 50.9469);\n    poly131.ps[2] = Point(-58.2889, 50.9469);\n    poly131.ps[3] = Point(-58.2889, -9.05306);\n    new ShapeRef(router, poly131, 131);\n\n    Polygon poly132(4);\n    poly132.ps[0] = Point(-219.289, 29.1969);\n    poly132.ps[1] = Point(-219.289, 89.1969);\n    poly132.ps[2] = Point(-275.289, 89.1969);\n    poly132.ps[3] = Point(-275.289, 29.1969);\n    new ShapeRef(router, poly132, 132);\n\n    Polygon poly133(4);\n    poly133.ps[0] = Point(-219.289, 131.197);\n    poly133.ps[1] = Point(-219.289, 191.197);\n    poly133.ps[2] = Point(-275.289, 191.197);\n    poly133.ps[3] = Point(-275.289, 131.197);\n    new ShapeRef(router, poly133, 133);\n\n    Polygon poly134(4);\n    poly134.ps[0] = Point(162.711, 29.1969);\n    poly134.ps[1] = Point(162.711, 89.1969);\n    poly134.ps[2] = Point(106.711, 89.1969);\n    poly134.ps[3] = Point(106.711, 29.1969);\n    new ShapeRef(router, poly134, 134);\n\n    Polygon poly135(4);\n    poly135.ps[0] = Point(162.711, 131.197);\n    poly135.ps[1] = Point(162.711, 191.197);\n    poly135.ps[2] = Point(106.711, 191.197);\n    poly135.ps[3] = Point(106.711, 131.197);\n    new ShapeRef(router, poly135, 135);\n\n    Polygon poly136(4);\n    poly136.ps[0] = Point(-138.289, 895.864);\n    poly136.ps[1] = Point(-138.289, 955.864);\n    poly136.ps[2] = Point(-194.289, 955.864);\n    poly136.ps[3] = Point(-194.289, 895.864);\n    new ShapeRef(router, poly136, 136);\n\n    Polygon poly137(4);\n    poly137.ps[0] = Point(696.878, 1577.53);\n    poly137.ps[1] = Point(696.878, 1637.53);\n    poly137.ps[2] = Point(640.878, 1637.53);\n    poly137.ps[3] = Point(640.878, 1577.53);\n    new ShapeRef(router, poly137, 137);\n\n    Polygon poly138(4);\n    poly138.ps[0] = Point(-138.289, 1017.86);\n    poly138.ps[1] = Point(-138.289, 1077.86);\n    poly138.ps[2] = Point(-194.289, 1077.86);\n    poly138.ps[3] = Point(-194.289, 1017.86);\n    new ShapeRef(router, poly138, 138);\n\n    Polygon poly139(4);\n    poly139.ps[0] = Point(823.878, 369.864);\n    poly139.ps[1] = Point(823.878, 409.864);\n    poly139.ps[2] = Point(747.878, 409.864);\n    poly139.ps[3] = Point(747.878, 369.864);\n    new ShapeRef(router, poly139, 139);\n\n    Polygon poly140(4);\n    poly140.ps[0] = Point(813.878, 543.864);\n    poly140.ps[1] = Point(813.878, 583.864);\n    poly140.ps[2] = Point(737.878, 583.864);\n    poly140.ps[3] = Point(737.878, 543.864);\n    new ShapeRef(router, poly140, 140);\n\n    Polygon poly141(4);\n    poly141.ps[0] = Point(951.878, 543.864);\n    poly141.ps[1] = Point(951.878, 583.864);\n    poly141.ps[2] = Point(875.878, 583.864);\n    poly141.ps[3] = Point(875.878, 543.864);\n    new ShapeRef(router, poly141, 141);\n\n    Polygon poly142(4);\n    poly142.ps[0] = Point(162.711, 1053.86);\n    poly142.ps[1] = Point(162.711, 1113.86);\n    poly142.ps[2] = Point(106.711, 1113.86);\n    poly142.ps[3] = Point(106.711, 1053.86);\n    new ShapeRef(router, poly142, 142);\n\n    Polygon poly143(4);\n    poly143.ps[0] = Point(1042.88, 543.864);\n    poly143.ps[1] = Point(1042.88, 583.864);\n    poly143.ps[2] = Point(966.878, 583.864);\n    poly143.ps[3] = Point(966.878, 543.864);\n    new ShapeRef(router, poly143, 143);\n\n    Polygon poly144(4);\n    poly144.ps[0] = Point(663.878, 635.864);\n    poly144.ps[1] = Point(663.878, 695.864);\n    poly144.ps[2] = Point(607.878, 695.864);\n    poly144.ps[3] = Point(607.878, 635.864);\n    new ShapeRef(router, poly144, 144);\n\n    Polygon poly145(4);\n    poly145.ps[0] = Point(663.878, 431.864);\n    poly145.ps[1] = Point(663.878, 491.864);\n    poly145.ps[2] = Point(607.878, 491.864);\n    poly145.ps[3] = Point(607.878, 431.864);\n    new ShapeRef(router, poly145, 145);\n\n    Polygon poly146(4);\n    poly146.ps[0] = Point(-313.289, 1431.53);\n    poly146.ps[1] = Point(-313.289, 1471.53);\n    poly146.ps[2] = Point(-389.289, 1471.53);\n    poly146.ps[3] = Point(-389.289, 1431.53);\n    new ShapeRef(router, poly146, 146);\n\n    Polygon poly147(4);\n    poly147.ps[0] = Point(823.878, 5.94694);\n    poly147.ps[1] = Point(823.878, 45.9469);\n    poly147.ps[2] = Point(747.878, 45.9469);\n    poly147.ps[3] = Point(747.878, 5.94694);\n    new ShapeRef(router, poly147, 147);\n\n    Polygon poly148(4);\n    poly148.ps[0] = Point(96.7111, -181.803);\n    poly148.ps[1] = Point(96.7111, -121.803);\n    poly148.ps[2] = Point(40.7111, -121.803);\n    poly148.ps[3] = Point(40.7111, -181.803);\n    new ShapeRef(router, poly148, 148);\n\n    Polygon poly149(4);\n    poly149.ps[0] = Point(-2.28891, 65.9469);\n    poly149.ps[1] = Point(-2.28891, 125.947);\n    poly149.ps[2] = Point(-58.2889, 125.947);\n    poly149.ps[3] = Point(-58.2889, 65.9469);\n    new ShapeRef(router, poly149, 149);\n\n    Polygon poly150(4);\n    poly150.ps[0] = Point(696.878, 1652.53);\n    poly150.ps[1] = Point(696.878, 1712.53);\n    poly150.ps[2] = Point(640.878, 1712.53);\n    poly150.ps[3] = Point(640.878, 1652.53);\n    new ShapeRef(router, poly150, 150);\n\n    Polygon poly151(4);\n    poly151.ps[0] = Point(997.378, -10.5531);\n    poly151.ps[1] = Point(997.378, 29.4469);\n    poly151.ps[2] = Point(937.378, 29.4469);\n    poly151.ps[3] = Point(937.378, -10.5531);\n    new ShapeRef(router, poly151, 151);\n\n    Polygon poly152(4);\n    poly152.ps[0] = Point(997.378, 29.4469);\n    poly152.ps[1] = Point(997.378, 69.4469);\n    poly152.ps[2] = Point(937.378, 69.4469);\n    poly152.ps[3] = Point(937.378, 29.4469);\n    new ShapeRef(router, poly152, 152);\n\n    Polygon poly153(4);\n    poly153.ps[0] = Point(1048.38, 157.947);\n    poly153.ps[1] = Point(1048.38, 217.947);\n    poly153.ps[2] = Point(1008.38, 217.947);\n    poly153.ps[3] = Point(1008.38, 157.947);\n    new ShapeRef(router, poly153, 153);\n\n    Polygon poly154(4);\n    poly154.ps[0] = Point(1088.38, 157.947);\n    poly154.ps[1] = Point(1088.38, 217.947);\n    poly154.ps[2] = Point(1048.38, 217.947);\n    poly154.ps[3] = Point(1048.38, 157.947);\n    new ShapeRef(router, poly154, 154);\n\n    Polygon poly155(4);\n    poly155.ps[0] = Point(797.378, -533.303);\n    poly155.ps[1] = Point(797.378, -473.303);\n    poly155.ps[2] = Point(757.378, -473.303);\n    poly155.ps[3] = Point(757.378, -533.303);\n    new ShapeRef(router, poly155, 155);\n\n    Polygon poly156(4);\n    poly156.ps[0] = Point(-281.289, 1089.36);\n    poly156.ps[1] = Point(-281.289, 1129.36);\n    poly156.ps[2] = Point(-341.289, 1129.36);\n    poly156.ps[3] = Point(-341.289, 1089.36);\n    new ShapeRef(router, poly156, 156);\n\n    Polygon poly157(4);\n    poly157.ps[0] = Point(-281.289, 1129.36);\n    poly157.ps[1] = Point(-281.289, 1169.36);\n    poly157.ps[2] = Point(-341.289, 1169.36);\n    poly157.ps[3] = Point(-341.289, 1129.36);\n    new ShapeRef(router, poly157, 157);\n\n    Polygon poly158(4);\n    poly158.ps[0] = Point(307.378, 726.364);\n    poly158.ps[1] = Point(307.378, 766.364);\n    poly158.ps[2] = Point(247.378, 766.364);\n    poly158.ps[3] = Point(247.378, 726.364);\n    new ShapeRef(router, poly158, 158);\n\n    Polygon poly159(4);\n    poly159.ps[0] = Point(984.378, 1410.53);\n    poly159.ps[1] = Point(984.378, 1470.53);\n    poly159.ps[2] = Point(944.378, 1470.53);\n    poly159.ps[3] = Point(944.378, 1410.53);\n    new ShapeRef(router, poly159, 159);\n\n    Polygon poly160(4);\n    poly160.ps[0] = Point(139.611, 1525.53);\n    poly160.ps[1] = Point(139.611, 1567.53);\n    poly160.ps[2] = Point(63.8111, 1567.53);\n    poly160.ps[3] = Point(63.8111, 1525.53);\n    new ShapeRef(router, poly160, 160);\n\n    Polygon poly161(4);\n    poly161.ps[0] = Point(4.94066e-324, 1421.63);\n    poly161.ps[1] = Point(4.94066e-324, 1481.43);\n    poly161.ps[2] = Point(-303.289, 1481.43);\n    poly161.ps[3] = Point(-303.289, 1421.63);\n    new ShapeRef(router, poly161, 161);\n\n    Polygon poly162(4);\n    poly162.ps[0] = Point(106.611, -383.803);\n    poly162.ps[1] = Point(106.611, 4.94066e-324);\n    poly162.ps[2] = Point(30.8111, 4.94066e-324);\n    poly162.ps[3] = Point(30.8111, -383.803);\n    new ShapeRef(router, poly162, 162);\n\n    Polygon poly163(4);\n    poly163.ps[0] = Point(7.61109, -136.053);\n    poly163.ps[1] = Point(7.61109, 55.9469);\n    poly163.ps[2] = Point(-68.1889, 55.9469);\n    poly163.ps[3] = Point(-68.1889, -136.053);\n    new ShapeRef(router, poly163, 163);\n\n    Polygon poly164(4);\n    poly164.ps[0] = Point(828.878, -3.95306);\n    poly164.ps[1] = Point(828.878, 55.8469);\n    poly164.ps[2] = Point(695.878, 55.8469);\n    poly164.ps[3] = Point(695.878, -3.95306);\n    new ShapeRef(router, poly164, 164);\n\n    Polygon poly165(4);\n    poly165.ps[0] = Point(-128.389, 965.864);\n    poly165.ps[1] = Point(-128.389, 1007.86);\n    poly165.ps[2] = Point(-204.189, 1007.86);\n    poly165.ps[3] = Point(-204.189, 965.864);\n    new ShapeRef(router, poly165, 165);\n\n    Polygon poly166(4);\n    poly166.ps[0] = Point(956.878, 533.964);\n    poly166.ps[1] = Point(956.878, 593.764);\n    poly166.ps[2] = Point(823.878, 593.764);\n    poly166.ps[3] = Point(823.878, 533.964);\n    new ShapeRef(router, poly166, 166);\n\n    Polygon poly167(4);\n    poly167.ps[0] = Point(737.878, 359.964);\n    poly167.ps[1] = Point(737.878, 419.764);\n    poly167.ps[2] = Point(695.878, 419.764);\n    poly167.ps[3] = Point(695.878, 359.964);\n    new ShapeRef(router, poly167, 167);\n\n    Polygon poly168(4);\n    poly168.ps[0] = Point(706.778, 1450.53);\n    poly168.ps[1] = Point(706.778, 1642.53);\n    poly168.ps[2] = Point(630.978, 1642.53);\n    poly168.ps[3] = Point(630.978, 1450.53);\n    new ShapeRef(router, poly168, 168);\n\n    ConnRef *connRef169 = new ConnRef(router, 169);\n    ConnEnd srcPt169(Point(716.878, 234.197), 2);\n    connRef169->setSourceEndpoint(srcPt169);\n    ConnEnd dstPt169(Point(308.378, 328.864), 15);\n    connRef169->setDestEndpoint(dstPt169);\n    connRef169->setRoutingType((ConnType)2);\n\n    ConnRef *connRef170 = new ConnRef(router, 170);\n    ConnEnd srcPt170(Point(716.878, 138.947), 15);\n    connRef170->setSourceEndpoint(srcPt170);\n    ConnEnd dstPt170(Point(716.878, 234.197), 1);\n    connRef170->setDestEndpoint(dstPt170);\n    connRef170->setRoutingType((ConnType)2);\n\n    ConnRef *connRef171 = new ConnRef(router, 171);\n    ConnEnd srcPt171(Point(716.878, 234.197), 2);\n    connRef171->setSourceEndpoint(srcPt171);\n    ConnEnd dstPt171(Point(716.878, 328.864), 15);\n    connRef171->setDestEndpoint(dstPt171);\n    connRef171->setRoutingType((ConnType)2);\n\n    ConnRef *connRef172 = new ConnRef(router, 172);\n    ConnEnd srcPt172(Point(101.711, 1525.53), 4);\n    connRef172->setSourceEndpoint(srcPt172);\n    ConnEnd dstPt172(Point(-282.289, 1546.53), 15);\n    connRef172->setDestEndpoint(dstPt172);\n    connRef172->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints172(1);\n    checkpoints172[0] = Checkpoint(Point(63.7111, 1546.53), (ConnDirFlags) 15, (ConnDirFlags) 4);\n    connRef172->setRoutingCheckpoints(checkpoints172);\n\n    ConnRef *connRef173 = new ConnRef(router, 173);\n    ConnEnd srcPt173(Point(101.711, 1525.53), 8);\n    connRef173->setSourceEndpoint(srcPt173);\n    ConnEnd dstPt173(Point(407.378, 1546.53), 15);\n    connRef173->setDestEndpoint(dstPt173);\n    connRef173->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints173(1);\n    checkpoints173[0] = Checkpoint(Point(139.711, 1546.53), (ConnDirFlags) 15, (ConnDirFlags) 8);\n    connRef173->setRoutingCheckpoints(checkpoints173);\n\n    ConnRef *connRef174 = new ConnRef(router, 174);\n    ConnEnd srcPt174(Point(-261.289, 1451.53), 2);\n    connRef174->setSourceEndpoint(srcPt174);\n    ConnEnd dstPt174(Point(-282.289, 1546.53), 15);\n    connRef174->setDestEndpoint(dstPt174);\n    connRef174->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints174(1);\n    checkpoints174[0] = Checkpoint(Point(-282.289, 1481.53), (ConnDirFlags) 15, (ConnDirFlags) 1);\n    connRef174->setRoutingCheckpoints(checkpoints174);\n\n    ConnRef *connRef175 = new ConnRef(router, 175);\n    ConnEnd srcPt175(Point(-261.289, 1451.53), 1);\n    connRef175->setSourceEndpoint(srcPt175);\n    ConnEnd dstPt175(Point(-282.289, 1252.86), 15);\n    connRef175->setDestEndpoint(dstPt175);\n    connRef175->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints175(1);\n    checkpoints175[0] = Checkpoint(Point(-282.289, 1421.53), (ConnDirFlags) 15, (ConnDirFlags) 2);\n    connRef175->setRoutingCheckpoints(checkpoints175);\n\n    ConnRef *connRef176 = new ConnRef(router, 176);\n    ConnEnd srcPt176(Point(101.711, 1567.53), 4);\n    connRef176->setSourceEndpoint(srcPt176);\n    ConnEnd dstPt176(Point(-282.289, 1546.53), 15);\n    connRef176->setDestEndpoint(dstPt176);\n    connRef176->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints176(1);\n    checkpoints176[0] = Checkpoint(Point(63.7111, 1546.53), (ConnDirFlags) 15, (ConnDirFlags) 4);\n    connRef176->setRoutingCheckpoints(checkpoints176);\n\n    ConnRef *connRef177 = new ConnRef(router, 177);\n    ConnEnd srcPt177(Point(101.711, 1567.53), 8);\n    connRef177->setSourceEndpoint(srcPt177);\n    ConnEnd dstPt177(Point(407.378, 1546.53), 15);\n    connRef177->setDestEndpoint(dstPt177);\n    connRef177->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints177(1);\n    checkpoints177[0] = Checkpoint(Point(139.711, 1546.53), (ConnDirFlags) 15, (ConnDirFlags) 8);\n    connRef177->setRoutingCheckpoints(checkpoints177);\n\n    ConnRef *connRef178 = new ConnRef(router, 178);\n    ConnEnd srcPt178(Point(-303.289, 1451.53), 2);\n    connRef178->setSourceEndpoint(srcPt178);\n    ConnEnd dstPt178(Point(-282.289, 1546.53), 15);\n    connRef178->setDestEndpoint(dstPt178);\n    connRef178->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints178(1);\n    checkpoints178[0] = Checkpoint(Point(-282.289, 1481.53), (ConnDirFlags) 15, (ConnDirFlags) 1);\n    connRef178->setRoutingCheckpoints(checkpoints178);\n\n    ConnRef *connRef179 = new ConnRef(router, 179);\n    ConnEnd srcPt179(Point(407.378, 1484.53), 2);\n    connRef179->setSourceEndpoint(srcPt179);\n    ConnEnd dstPt179(Point(407.378, 1546.53), 15);\n    connRef179->setDestEndpoint(dstPt179);\n    connRef179->setRoutingType((ConnType)2);\n\n    ConnRef *connRef180 = new ConnRef(router, 180);\n    ConnEnd srcPt180(Point(668.878, 1450.53), 4);\n    connRef180->setSourceEndpoint(srcPt180);\n    ConnEnd dstPt180(Point(407.378, 1546.53), 15);\n    connRef180->setDestEndpoint(dstPt180);\n    connRef180->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints180(1);\n    checkpoints180[0] = Checkpoint(Point(630.878, 1546.53), (ConnDirFlags) 15, (ConnDirFlags) 4);\n    connRef180->setRoutingCheckpoints(checkpoints180);\n\n    ConnRef *connRef181 = new ConnRef(router, 181);\n    ConnEnd srcPt181(Point(668.878, 1525.53), 4);\n    connRef181->setSourceEndpoint(srcPt181);\n    ConnEnd dstPt181(Point(407.378, 1546.53), 15);\n    connRef181->setDestEndpoint(dstPt181);\n    connRef181->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints181(1);\n    checkpoints181[0] = Checkpoint(Point(630.878, 1546.53), (ConnDirFlags) 15, (ConnDirFlags) 4);\n    connRef181->setRoutingCheckpoints(checkpoints181);\n\n    ConnRef *connRef182 = new ConnRef(router, 182);\n    ConnEnd srcPt182(Point(716.878, 1252.86), 15);\n    connRef182->setSourceEndpoint(srcPt182);\n    ConnEnd dstPt182(Point(571.378, 1285.86), 8);\n    connRef182->setDestEndpoint(dstPt182);\n    connRef182->setRoutingType((ConnType)2);\n\n    ConnRef *connRef183 = new ConnRef(router, 183);\n    ConnEnd srcPt183(Point(571.378, 1285.86), 4);\n    connRef183->setSourceEndpoint(srcPt183);\n    ConnEnd dstPt183(Point(407.378, 1252.86), 15);\n    connRef183->setDestEndpoint(dstPt183);\n    connRef183->setRoutingType((ConnType)2);\n\n    ConnRef *connRef184 = new ConnRef(router, 184);\n    ConnEnd srcPt184(Point(716.878, 1252.86), 15);\n    connRef184->setSourceEndpoint(srcPt184);\n    ConnEnd dstPt184(Point(571.378, 1189.86), 1);\n    connRef184->setDestEndpoint(dstPt184);\n    connRef184->setRoutingType((ConnType)2);\n\n    ConnRef *connRef185 = new ConnRef(router, 185);\n    ConnEnd srcPt185(Point(571.378, 1189.86), 2);\n    connRef185->setSourceEndpoint(srcPt185);\n    ConnEnd dstPt185(Point(407.378, 1252.86), 15);\n    connRef185->setDestEndpoint(dstPt185);\n    connRef185->setRoutingType((ConnType)2);\n\n    ConnRef *connRef186 = new ConnRef(router, 186);\n    ConnEnd srcPt186(Point(242.378, 1418.53), 15);\n    connRef186->setSourceEndpoint(srcPt186);\n    ConnEnd dstPt186(Point(275.378, 1252.86), 8);\n    connRef186->setDestEndpoint(dstPt186);\n    connRef186->setRoutingType((ConnType)2);\n\n    ConnRef *connRef187 = new ConnRef(router, 187);\n    ConnEnd srcPt187(Point(407.378, 1252.86), 15);\n    connRef187->setSourceEndpoint(srcPt187);\n    ConnEnd dstPt187(Point(275.378, 1252.86), 8);\n    connRef187->setDestEndpoint(dstPt187);\n    connRef187->setRoutingType((ConnType)2);\n\n    ConnRef *connRef188 = new ConnRef(router, 188);\n    ConnEnd srcPt188(Point(275.378, 1252.86), 4);\n    connRef188->setSourceEndpoint(srcPt188);\n    ConnEnd dstPt188(Point(35.7111, 1252.86), 15);\n    connRef188->setDestEndpoint(dstPt188);\n    connRef188->setRoutingType((ConnType)2);\n\n    ConnRef *connRef189 = new ConnRef(router, 189);\n    ConnEnd srcPt189(Point(275.378, 1252.86), 4);\n    connRef189->setSourceEndpoint(srcPt189);\n    ConnEnd dstPt189(Point(407.378, 1156.86), 15);\n    connRef189->setDestEndpoint(dstPt189);\n    connRef189->setRoutingType((ConnType)2);\n\n    ConnRef *connRef190 = new ConnRef(router, 190);\n    ConnEnd srcPt190(Point(-282.289, 1252.86), 15);\n    connRef190->setSourceEndpoint(srcPt190);\n    ConnEnd dstPt190(Point(-133.289, 1252.86), 4);\n    connRef190->setDestEndpoint(dstPt190);\n    connRef190->setRoutingType((ConnType)2);\n\n    ConnRef *connRef191 = new ConnRef(router, 191);\n    ConnEnd srcPt191(Point(-133.289, 1252.86), 8);\n    connRef191->setSourceEndpoint(srcPt191);\n    ConnEnd dstPt191(Point(35.7111, 1252.86), 15);\n    connRef191->setDestEndpoint(dstPt191);\n    connRef191->setRoutingType((ConnType)2);\n\n    ConnRef *connRef192 = new ConnRef(router, 192);\n    ConnEnd srcPt192(Point(-133.289, 1418.53), 15);\n    connRef192->setSourceEndpoint(srcPt192);\n    ConnEnd dstPt192(Point(-133.289, 1252.86), 4);\n    connRef192->setDestEndpoint(dstPt192);\n    connRef192->setRoutingType((ConnType)2);\n\n    ConnRef *connRef193 = new ConnRef(router, 193);\n    ConnEnd srcPt193(Point(961.878, 1252.86), 15);\n    connRef193->setSourceEndpoint(srcPt193);\n    ConnEnd dstPt193(Point(885.878, 1252.86), 8);\n    connRef193->setDestEndpoint(dstPt193);\n    connRef193->setRoutingType((ConnType)2);\n\n    ConnRef *connRef194 = new ConnRef(router, 194);\n    ConnEnd srcPt194(Point(885.878, 1252.86), 4);\n    connRef194->setSourceEndpoint(srcPt194);\n    ConnEnd dstPt194(Point(716.878, 1252.86), 15);\n    connRef194->setDestEndpoint(dstPt194);\n    connRef194->setRoutingType((ConnType)2);\n\n    ConnRef *connRef195 = new ConnRef(router, 195);\n    ConnEnd srcPt195(Point(716.878, 986.864), 15);\n    connRef195->setSourceEndpoint(srcPt195);\n    ConnEnd dstPt195(Point(716.878, 1048.86), 1);\n    connRef195->setDestEndpoint(dstPt195);\n    connRef195->setRoutingType((ConnType)2);\n\n    ConnRef *connRef196 = new ConnRef(router, 196);\n    ConnEnd srcPt196(Point(716.878, 1048.86), 2);\n    connRef196->setSourceEndpoint(srcPt196);\n    ConnEnd dstPt196(Point(716.878, 1252.86), 15);\n    connRef196->setDestEndpoint(dstPt196);\n    connRef196->setRoutingType((ConnType)2);\n\n    ConnRef *connRef197 = new ConnRef(router, 197);\n    ConnEnd srcPt197(Point(716.878, 862.864), 15);\n    connRef197->setSourceEndpoint(srcPt197);\n    ConnEnd dstPt197(Point(716.878, 924.864), 1);\n    connRef197->setDestEndpoint(dstPt197);\n    connRef197->setRoutingType((ConnType)2);\n\n    ConnRef *connRef198 = new ConnRef(router, 198);\n    ConnEnd srcPt198(Point(716.878, 924.864), 2);\n    connRef198->setSourceEndpoint(srcPt198);\n    ConnEnd dstPt198(Point(716.878, 986.864), 15);\n    connRef198->setDestEndpoint(dstPt198);\n    connRef198->setRoutingType((ConnType)2);\n\n    ConnRef *connRef199 = new ConnRef(router, 199);\n    ConnEnd srcPt199(Point(716.878, 862.864), 15);\n    connRef199->setSourceEndpoint(srcPt199);\n    ConnEnd dstPt199(Point(716.878, 800.864), 2);\n    connRef199->setDestEndpoint(dstPt199);\n    connRef199->setRoutingType((ConnType)2);\n\n    ConnRef *connRef200 = new ConnRef(router, 200);\n    ConnEnd srcPt200(Point(716.878, 800.864), 1);\n    connRef200->setSourceEndpoint(srcPt200);\n    ConnEnd dstPt200(Point(716.878, 738.864), 15);\n    connRef200->setDestEndpoint(dstPt200);\n    connRef200->setRoutingType((ConnType)2);\n\n    ConnRef *connRef201 = new ConnRef(router, 201);\n    ConnEnd srcPt201(Point(695.878, 389.864), 2);\n    connRef201->setSourceEndpoint(srcPt201);\n    ConnEnd dstPt201(Point(716.878, 501.864), 15);\n    connRef201->setDestEndpoint(dstPt201);\n    connRef201->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints201(1);\n    checkpoints201[0] = Checkpoint(Point(716.878, 419.864), (ConnDirFlags) 15, (ConnDirFlags) 1);\n    connRef201->setRoutingCheckpoints(checkpoints201);\n\n    ConnRef *connRef202 = new ConnRef(router, 202);\n    ConnEnd srcPt202(Point(695.878, 389.864), 1);\n    connRef202->setSourceEndpoint(srcPt202);\n    ConnEnd dstPt202(Point(716.878, 328.864), 15);\n    connRef202->setDestEndpoint(dstPt202);\n    connRef202->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints202(1);\n    checkpoints202[0] = Checkpoint(Point(716.878, 359.864), (ConnDirFlags) 15, (ConnDirFlags) 2);\n    connRef202->setRoutingCheckpoints(checkpoints202);\n\n    ConnRef *connRef203 = new ConnRef(router, 203);\n    ConnEnd srcPt203(Point(538.378, 328.864), 4);\n    connRef203->setSourceEndpoint(srcPt203);\n    ConnEnd dstPt203(Point(308.378, 328.864), 15);\n    connRef203->setDestEndpoint(dstPt203);\n    connRef203->setRoutingType((ConnType)2);\n\n    ConnRef *connRef204 = new ConnRef(router, 204);\n    ConnEnd srcPt204(Point(716.878, 328.864), 15);\n    connRef204->setSourceEndpoint(srcPt204);\n    ConnEnd dstPt204(Point(538.378, 328.864), 8);\n    connRef204->setDestEndpoint(dstPt204);\n    connRef204->setRoutingType((ConnType)2);\n\n    ConnRef *connRef205 = new ConnRef(router, 205);\n    ConnEnd srcPt205(Point(695.878, 25.9469), 1);\n    connRef205->setSourceEndpoint(srcPt205);\n    ConnEnd dstPt205(Point(716.878, -40.0531), 15);\n    connRef205->setDestEndpoint(dstPt205);\n    connRef205->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints205(1);\n    checkpoints205[0] = Checkpoint(Point(716.878, -4.05306), (ConnDirFlags) 15, (ConnDirFlags) 2);\n    connRef205->setRoutingCheckpoints(checkpoints205);\n\n    ConnRef *connRef206 = new ConnRef(router, 206);\n    ConnEnd srcPt206(Point(695.878, 25.9469), 2);\n    connRef206->setSourceEndpoint(srcPt206);\n    ConnEnd dstPt206(Point(716.878, 138.947), 15);\n    connRef206->setDestEndpoint(dstPt206);\n    connRef206->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints206(1);\n    checkpoints206[0] = Checkpoint(Point(716.878, 55.9469), (ConnDirFlags) 15, (ConnDirFlags) 1);\n    connRef206->setRoutingCheckpoints(checkpoints206);\n\n    ConnRef *connRef207 = new ConnRef(router, 207);\n    ConnEnd srcPt207(Point(828.878, 25.9469), 1);\n    connRef207->setSourceEndpoint(srcPt207);\n    ConnEnd dstPt207(Point(716.878, -40.0531), 15);\n    connRef207->setDestEndpoint(dstPt207);\n    connRef207->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints207(1);\n    checkpoints207[0] = Checkpoint(Point(716.878, -4.05306), (ConnDirFlags) 15, (ConnDirFlags) 2);\n    connRef207->setRoutingCheckpoints(checkpoints207);\n\n    ConnRef *connRef208 = new ConnRef(router, 208);\n    ConnEnd srcPt208(Point(852.878, -246.303), 4);\n    connRef208->setSourceEndpoint(srcPt208);\n    ConnEnd dstPt208(Point(716.878, -212.803), 15);\n    connRef208->setDestEndpoint(dstPt208);\n    connRef208->setRoutingType((ConnType)2);\n\n    ConnRef *connRef209 = new ConnRef(router, 209);\n    ConnEnd srcPt209(Point(716.878, -212.803), 15);\n    connRef209->setSourceEndpoint(srcPt209);\n    ConnEnd dstPt209(Point(716.878, -127.553), 1);\n    connRef209->setDestEndpoint(dstPt209);\n    connRef209->setRoutingType((ConnType)2);\n\n    ConnRef *connRef210 = new ConnRef(router, 210);\n    ConnEnd srcPt210(Point(716.878, -127.553), 2);\n    connRef210->setSourceEndpoint(srcPt210);\n    ConnEnd dstPt210(Point(716.878, -40.0531), 15);\n    connRef210->setDestEndpoint(dstPt210);\n    connRef210->setRoutingType((ConnType)2);\n\n    ConnRef *connRef211 = new ConnRef(router, 211);\n    ConnEnd srcPt211(Point(716.878, -412.803), 15);\n    connRef211->setSourceEndpoint(srcPt211);\n    ConnEnd dstPt211(Point(716.878, -318.803), 1);\n    connRef211->setDestEndpoint(dstPt211);\n    connRef211->setRoutingType((ConnType)2);\n\n    ConnRef *connRef212 = new ConnRef(router, 212);\n    ConnEnd srcPt212(Point(716.878, -318.803), 2);\n    connRef212->setSourceEndpoint(srcPt212);\n    ConnEnd dstPt212(Point(716.878, -212.803), 15);\n    connRef212->setDestEndpoint(dstPt212);\n    connRef212->setRoutingType((ConnType)2);\n\n    ConnRef *connRef213 = new ConnRef(router, 213);\n    ConnEnd srcPt213(Point(308.378, -40.0531), 15);\n    connRef213->setSourceEndpoint(srcPt213);\n    ConnEnd dstPt213(Point(472.378, -40.0531), 4);\n    connRef213->setDestEndpoint(dstPt213);\n    connRef213->setRoutingType((ConnType)2);\n\n    ConnRef *connRef214 = new ConnRef(router, 214);\n    ConnEnd srcPt214(Point(472.378, -40.0531), 8);\n    connRef214->setSourceEndpoint(srcPt214);\n    ConnEnd dstPt214(Point(716.878, -40.0531), 15);\n    connRef214->setDestEndpoint(dstPt214);\n    connRef214->setRoutingType((ConnType)2);\n\n    ConnRef *connRef215 = new ConnRef(router, 215);\n    ConnEnd srcPt215(Point(-30.2889, -136.053), 4);\n    connRef215->setSourceEndpoint(srcPt215);\n    ConnEnd dstPt215(Point(-247.289, -40.0531), 15);\n    connRef215->setDestEndpoint(dstPt215);\n    connRef215->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints215(1);\n    checkpoints215[0] = Checkpoint(Point(-68.2889, -40.0531), (ConnDirFlags) 15, (ConnDirFlags) 4);\n    connRef215->setRoutingCheckpoints(checkpoints215);\n\n    ConnRef *connRef216 = new ConnRef(router, 216);\n    ConnEnd srcPt216(Point(-30.2889, -136.053), 8);\n    connRef216->setSourceEndpoint(srcPt216);\n    ConnEnd dstPt216(Point(308.378, -40.0531), 15);\n    connRef216->setDestEndpoint(dstPt216);\n    connRef216->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints216(1);\n    checkpoints216[0] = Checkpoint(Point(7.71109, -40.0531), (ConnDirFlags) 15, (ConnDirFlags) 8);\n    connRef216->setRoutingCheckpoints(checkpoints216);\n\n    ConnRef *connRef217 = new ConnRef(router, 217);\n    ConnEnd srcPt217(Point(-30.2889, -61.0531), 4);\n    connRef217->setSourceEndpoint(srcPt217);\n    ConnEnd dstPt217(Point(-247.289, -40.0531), 15);\n    connRef217->setDestEndpoint(dstPt217);\n    connRef217->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints217(1);\n    checkpoints217[0] = Checkpoint(Point(-68.2889, -40.0531), (ConnDirFlags) 15, (ConnDirFlags) 4);\n    connRef217->setRoutingCheckpoints(checkpoints217);\n\n    ConnRef *connRef218 = new ConnRef(router, 218);\n    ConnEnd srcPt218(Point(-30.2889, -61.0531), 8);\n    connRef218->setSourceEndpoint(srcPt218);\n    ConnEnd dstPt218(Point(308.378, -40.0531), 15);\n    connRef218->setDestEndpoint(dstPt218);\n    connRef218->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints218(1);\n    checkpoints218[0] = Checkpoint(Point(7.71109, -40.0531), (ConnDirFlags) 15, (ConnDirFlags) 8);\n    connRef218->setRoutingCheckpoints(checkpoints218);\n\n    ConnRef *connRef219 = new ConnRef(router, 219);\n    ConnEnd srcPt219(Point(374.378, -127.553), 4);\n    connRef219->setSourceEndpoint(srcPt219);\n    ConnEnd dstPt219(Point(308.378, -40.0531), 15);\n    connRef219->setDestEndpoint(dstPt219);\n    connRef219->setRoutingType((ConnType)2);\n\n    ConnRef *connRef220 = new ConnRef(router, 220);\n    ConnEnd srcPt220(Point(716.878, -212.803), 15);\n    connRef220->setSourceEndpoint(srcPt220);\n    ConnEnd dstPt220(Point(374.378, -127.553), 8);\n    connRef220->setDestEndpoint(dstPt220);\n    connRef220->setRoutingType((ConnType)2);\n\n    ConnRef *connRef221 = new ConnRef(router, 221);\n    ConnEnd srcPt221(Point(209.378, -127.553), 2);\n    connRef221->setSourceEndpoint(srcPt221);\n    ConnEnd dstPt221(Point(308.378, -40.0531), 15);\n    connRef221->setDestEndpoint(dstPt221);\n    connRef221->setRoutingType((ConnType)2);\n\n    ConnRef *connRef222 = new ConnRef(router, 222);\n    ConnEnd srcPt222(Point(716.878, -212.803), 15);\n    connRef222->setSourceEndpoint(srcPt222);\n    ConnEnd dstPt222(Point(209.378, -127.553), 1);\n    connRef222->setDestEndpoint(dstPt222);\n    connRef222->setRoutingType((ConnType)2);\n\n    ConnRef *connRef223 = new ConnRef(router, 223);\n    ConnEnd srcPt223(Point(-247.289, -212.803), 15);\n    connRef223->setSourceEndpoint(srcPt223);\n    ConnEnd dstPt223(Point(-247.289, -127.553), 1);\n    connRef223->setDestEndpoint(dstPt223);\n    connRef223->setRoutingType((ConnType)2);\n\n    ConnRef *connRef224 = new ConnRef(router, 224);\n    ConnEnd srcPt224(Point(-247.289, -127.553), 2);\n    connRef224->setSourceEndpoint(srcPt224);\n    ConnEnd dstPt224(Point(-247.289, -40.0531), 15);\n    connRef224->setDestEndpoint(dstPt224);\n    connRef224->setRoutingType((ConnType)2);\n\n    ConnRef *connRef225 = new ConnRef(router, 225);\n    ConnEnd srcPt225(Point(68.7111, -383.803), 4);\n    connRef225->setSourceEndpoint(srcPt225);\n    ConnEnd dstPt225(Point(-247.289, -212.803), 15);\n    connRef225->setDestEndpoint(dstPt225);\n    connRef225->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints225(1);\n    checkpoints225[0] = Checkpoint(Point(30.7111, -212.803), (ConnDirFlags) 15, (ConnDirFlags) 4);\n    connRef225->setRoutingCheckpoints(checkpoints225);\n\n    ConnRef *connRef226 = new ConnRef(router, 226);\n    ConnEnd srcPt226(Point(68.7111, -383.803), 8);\n    connRef226->setSourceEndpoint(srcPt226);\n    ConnEnd dstPt226(Point(716.878, -212.803), 15);\n    connRef226->setDestEndpoint(dstPt226);\n    connRef226->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints226(1);\n    checkpoints226[0] = Checkpoint(Point(106.711, -212.803), (ConnDirFlags) 15, (ConnDirFlags) 8);\n    connRef226->setRoutingCheckpoints(checkpoints226);\n\n    ConnRef *connRef227 = new ConnRef(router, 227);\n    ConnEnd srcPt227(Point(68.7111, -308.803), 4);\n    connRef227->setSourceEndpoint(srcPt227);\n    ConnEnd dstPt227(Point(-247.289, -212.803), 15);\n    connRef227->setDestEndpoint(dstPt227);\n    connRef227->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints227(1);\n    checkpoints227[0] = Checkpoint(Point(30.7111, -212.803), (ConnDirFlags) 15, (ConnDirFlags) 4);\n    connRef227->setRoutingCheckpoints(checkpoints227);\n\n    ConnRef *connRef228 = new ConnRef(router, 228);\n    ConnEnd srcPt228(Point(68.7111, -308.803), 8);\n    connRef228->setSourceEndpoint(srcPt228);\n    ConnEnd dstPt228(Point(716.878, -212.803), 15);\n    connRef228->setDestEndpoint(dstPt228);\n    connRef228->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints228(1);\n    checkpoints228[0] = Checkpoint(Point(106.711, -212.803), (ConnDirFlags) 15, (ConnDirFlags) 8);\n    connRef228->setRoutingCheckpoints(checkpoints228);\n\n    ConnRef *connRef229 = new ConnRef(router, 229);\n    ConnEnd srcPt229(Point(68.7111, -116.803), 4);\n    connRef229->setSourceEndpoint(srcPt229);\n    ConnEnd dstPt229(Point(-247.289, -212.803), 15);\n    connRef229->setDestEndpoint(dstPt229);\n    connRef229->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints229(1);\n    checkpoints229[0] = Checkpoint(Point(30.7111, -212.803), (ConnDirFlags) 15, (ConnDirFlags) 4);\n    connRef229->setRoutingCheckpoints(checkpoints229);\n\n    ConnRef *connRef230 = new ConnRef(router, 230);\n    ConnEnd srcPt230(Point(68.7111, -116.803), 8);\n    connRef230->setSourceEndpoint(srcPt230);\n    ConnEnd dstPt230(Point(716.878, -212.803), 15);\n    connRef230->setDestEndpoint(dstPt230);\n    connRef230->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints230(1);\n    checkpoints230[0] = Checkpoint(Point(106.711, -212.803), (ConnDirFlags) 15, (ConnDirFlags) 8);\n    connRef230->setRoutingCheckpoints(checkpoints230);\n\n    ConnRef *connRef231 = new ConnRef(router, 231);\n    ConnEnd srcPt231(Point(716.878, -412.803), 15);\n    connRef231->setSourceEndpoint(srcPt231);\n    ConnEnd dstPt231(Point(341.378, -351.803), 8);\n    connRef231->setDestEndpoint(dstPt231);\n    connRef231->setRoutingType((ConnType)2);\n\n    ConnRef *connRef232 = new ConnRef(router, 232);\n    ConnEnd srcPt232(Point(341.378, -351.803), 4);\n    connRef232->setSourceEndpoint(srcPt232);\n    ConnEnd dstPt232(Point(-247.289, -212.803), 15);\n    connRef232->setDestEndpoint(dstPt232);\n    connRef232->setRoutingType((ConnType)2);\n\n    ConnRef *connRef233 = new ConnRef(router, 233);\n    ConnEnd srcPt233(Point(716.878, -412.803), 15);\n    connRef233->setSourceEndpoint(srcPt233);\n    ConnEnd dstPt233(Point(341.378, -453.803), 8);\n    connRef233->setDestEndpoint(dstPt233);\n    connRef233->setRoutingType((ConnType)2);\n\n    ConnRef *connRef234 = new ConnRef(router, 234);\n    ConnEnd srcPt234(Point(341.378, -453.803), 4);\n    connRef234->setSourceEndpoint(srcPt234);\n    ConnEnd dstPt234(Point(-247.289, -212.803), 15);\n    connRef234->setDestEndpoint(dstPt234);\n    connRef234->setRoutingType((ConnType)2);\n\n    ConnRef *connRef235 = new ConnRef(router, 235);\n    ConnEnd srcPt235(Point(2.71109, 1418.53), 8);\n    connRef235->setSourceEndpoint(srcPt235);\n    ConnEnd dstPt235(Point(242.378, 1418.53), 15);\n    connRef235->setDestEndpoint(dstPt235);\n    connRef235->setRoutingType((ConnType)2);\n\n    ConnRef *connRef236 = new ConnRef(router, 236);\n    ConnEnd srcPt236(Point(716.878, 738.864), 15);\n    connRef236->setSourceEndpoint(srcPt236);\n    ConnEnd dstPt236(Point(716.878, 625.864), 2);\n    connRef236->setDestEndpoint(dstPt236);\n    connRef236->setRoutingType((ConnType)2);\n\n    ConnRef *connRef237 = new ConnRef(router, 237);\n    ConnEnd srcPt237(Point(716.878, 625.864), 1);\n    connRef237->setSourceEndpoint(srcPt237);\n    ConnEnd dstPt237(Point(716.878, 501.864), 15);\n    connRef237->setDestEndpoint(dstPt237);\n    connRef237->setRoutingType((ConnType)2);\n\n    ConnRef *connRef238 = new ConnRef(router, 238);\n    ConnEnd srcPt238(Point(68.7111, -233.803), 8);\n    connRef238->setSourceEndpoint(srcPt238);\n    ConnEnd dstPt238(Point(716.878, -212.803), 15);\n    connRef238->setDestEndpoint(dstPt238);\n    connRef238->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints238(1);\n    checkpoints238[0] = Checkpoint(Point(106.711, -212.803), (ConnDirFlags) 15, (ConnDirFlags) 8);\n    connRef238->setRoutingCheckpoints(checkpoints238);\n\n    ConnRef *connRef239 = new ConnRef(router, 239);\n    ConnEnd srcPt239(Point(-30.2889, -19.0531), 8);\n    connRef239->setSourceEndpoint(srcPt239);\n    ConnEnd dstPt239(Point(308.378, -40.0531), 15);\n    connRef239->setDestEndpoint(dstPt239);\n    connRef239->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints239(1);\n    checkpoints239[0] = Checkpoint(Point(7.71109, -40.0531), (ConnDirFlags) 15, (ConnDirFlags) 8);\n    connRef239->setRoutingCheckpoints(checkpoints239);\n\n    ConnRef *connRef240 = new ConnRef(router, 240);\n    ConnEnd srcPt240(Point(-247.289, 99.1969), 8);\n    connRef240->setSourceEndpoint(srcPt240);\n    ConnEnd dstPt240(Point(-100.289, 99.1969), 15);\n    connRef240->setDestEndpoint(dstPt240);\n    connRef240->setRoutingType((ConnType)2);\n\n    ConnRef *connRef241 = new ConnRef(router, 241);\n    ConnEnd srcPt241(Point(-247.289, 201.197), 8);\n    connRef241->setSourceEndpoint(srcPt241);\n    ConnEnd dstPt241(Point(-100.289, 201.197), 15);\n    connRef241->setDestEndpoint(dstPt241);\n    connRef241->setRoutingType((ConnType)2);\n\n    ConnRef *connRef242 = new ConnRef(router, 242);\n    ConnEnd srcPt242(Point(134.711, 99.1969), 8);\n    connRef242->setSourceEndpoint(srcPt242);\n    ConnEnd dstPt242(Point(308.378, -40.0531), 15);\n    connRef242->setDestEndpoint(dstPt242);\n    connRef242->setRoutingType((ConnType)2);\n\n    ConnRef *connRef243 = new ConnRef(router, 243);\n    ConnEnd srcPt243(Point(134.711, 201.197), 8);\n    connRef243->setSourceEndpoint(srcPt243);\n    ConnEnd dstPt243(Point(308.378, -40.0531), 15);\n    connRef243->setDestEndpoint(dstPt243);\n    connRef243->setRoutingType((ConnType)2);\n\n    ConnRef *connRef244 = new ConnRef(router, 244);\n    ConnEnd srcPt244(Point(928.878, -246.303), 15);\n    connRef244->setSourceEndpoint(srcPt244);\n    ConnEnd dstPt244(Point(852.878, -246.303), 8);\n    connRef244->setDestEndpoint(dstPt244);\n    connRef244->setRoutingType((ConnType)2);\n\n    ConnRef *connRef245 = new ConnRef(router, 245);\n    ConnEnd srcPt245(Point(68.7111, -233.803), 4);\n    connRef245->setSourceEndpoint(srcPt245);\n    ConnEnd dstPt245(Point(-247.289, -212.803), 15);\n    connRef245->setDestEndpoint(dstPt245);\n    connRef245->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints245(1);\n    checkpoints245[0] = Checkpoint(Point(30.7111, -212.803), (ConnDirFlags) 15, (ConnDirFlags) 4);\n    connRef245->setRoutingCheckpoints(checkpoints245);\n\n    ConnRef *connRef246 = new ConnRef(router, 246);\n    ConnEnd srcPt246(Point(68.7111, -191.803), 4);\n    connRef246->setSourceEndpoint(srcPt246);\n    ConnEnd dstPt246(Point(-247.289, -212.803), 15);\n    connRef246->setDestEndpoint(dstPt246);\n    connRef246->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints246(1);\n    checkpoints246[0] = Checkpoint(Point(30.7111, -212.803), (ConnDirFlags) 15, (ConnDirFlags) 4);\n    connRef246->setRoutingCheckpoints(checkpoints246);\n\n    ConnRef *connRef247 = new ConnRef(router, 247);\n    ConnEnd srcPt247(Point(-30.2889, -19.0531), 4);\n    connRef247->setSourceEndpoint(srcPt247);\n    ConnEnd dstPt247(Point(-247.289, -40.0531), 15);\n    connRef247->setDestEndpoint(dstPt247);\n    connRef247->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints247(1);\n    checkpoints247[0] = Checkpoint(Point(-68.2889, -40.0531), (ConnDirFlags) 15, (ConnDirFlags) 4);\n    connRef247->setRoutingCheckpoints(checkpoints247);\n\n    ConnRef *connRef248 = new ConnRef(router, 248);\n    ConnEnd srcPt248(Point(-30.2889, 55.9469), 4);\n    connRef248->setSourceEndpoint(srcPt248);\n    ConnEnd dstPt248(Point(-247.289, -40.0531), 15);\n    connRef248->setDestEndpoint(dstPt248);\n    connRef248->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints248(1);\n    checkpoints248[0] = Checkpoint(Point(-68.2889, -40.0531), (ConnDirFlags) 15, (ConnDirFlags) 4);\n    connRef248->setRoutingCheckpoints(checkpoints248);\n\n    ConnRef *connRef249 = new ConnRef(router, 249);\n    ConnEnd srcPt249(Point(-30.2889, 55.9469), 8);\n    connRef249->setSourceEndpoint(srcPt249);\n    ConnEnd dstPt249(Point(308.378, -40.0531), 15);\n    connRef249->setDestEndpoint(dstPt249);\n    connRef249->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints249(1);\n    checkpoints249[0] = Checkpoint(Point(7.71109, -40.0531), (ConnDirFlags) 15, (ConnDirFlags) 8);\n    connRef249->setRoutingCheckpoints(checkpoints249);\n\n    ConnRef *connRef250 = new ConnRef(router, 250);\n    ConnEnd srcPt250(Point(737.878, 25.9469), 1);\n    connRef250->setSourceEndpoint(srcPt250);\n    ConnEnd dstPt250(Point(716.878, -40.0531), 15);\n    connRef250->setDestEndpoint(dstPt250);\n    connRef250->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints250(1);\n    checkpoints250[0] = Checkpoint(Point(716.878, -4.05306), (ConnDirFlags) 15, (ConnDirFlags) 2);\n    connRef250->setRoutingCheckpoints(checkpoints250);\n\n    ConnRef *connRef251 = new ConnRef(router, 251);\n    ConnEnd srcPt251(Point(-166.289, 1007.86), 8);\n    connRef251->setSourceEndpoint(srcPt251);\n    ConnEnd dstPt251(Point(716.878, 986.864), 15);\n    connRef251->setDestEndpoint(dstPt251);\n    connRef251->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints251(1);\n    checkpoints251[0] = Checkpoint(Point(-128.289, 986.864), (ConnDirFlags) 15, (ConnDirFlags) 8);\n    connRef251->setRoutingCheckpoints(checkpoints251);\n\n    ConnRef *connRef252 = new ConnRef(router, 252);\n    ConnEnd srcPt252(Point(823.878, 563.864), 2);\n    connRef252->setSourceEndpoint(srcPt252);\n    ConnEnd dstPt252(Point(716.878, 738.864), 15);\n    connRef252->setDestEndpoint(dstPt252);\n    connRef252->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints252(1);\n    checkpoints252[0] = Checkpoint(Point(844.878, 593.864), (ConnDirFlags) 15, (ConnDirFlags) 1);\n    connRef252->setRoutingCheckpoints(checkpoints252);\n\n    ConnRef *connRef253 = new ConnRef(router, 253);\n    ConnEnd srcPt253(Point(865.878, 563.864), 2);\n    connRef253->setSourceEndpoint(srcPt253);\n    ConnEnd dstPt253(Point(716.878, 738.864), 15);\n    connRef253->setDestEndpoint(dstPt253);\n    connRef253->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints253(1);\n    checkpoints253[0] = Checkpoint(Point(844.878, 593.864), (ConnDirFlags) 15, (ConnDirFlags) 1);\n    connRef253->setRoutingCheckpoints(checkpoints253);\n\n    ConnRef *connRef254 = new ConnRef(router, 254);\n    ConnEnd srcPt254(Point(956.878, 563.864), 2);\n    connRef254->setSourceEndpoint(srcPt254);\n    ConnEnd dstPt254(Point(716.878, 738.864), 15);\n    connRef254->setDestEndpoint(dstPt254);\n    connRef254->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints254(1);\n    checkpoints254[0] = Checkpoint(Point(844.878, 593.864), (ConnDirFlags) 15, (ConnDirFlags) 1);\n    connRef254->setRoutingCheckpoints(checkpoints254);\n\n    ConnRef *connRef255 = new ConnRef(router, 255);\n    ConnEnd srcPt255(Point(737.878, 389.864), 2);\n    connRef255->setSourceEndpoint(srcPt255);\n    ConnEnd dstPt255(Point(716.878, 501.864), 15);\n    connRef255->setDestEndpoint(dstPt255);\n    connRef255->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints255(1);\n    checkpoints255[0] = Checkpoint(Point(716.878, 419.864), (ConnDirFlags) 15, (ConnDirFlags) 1);\n    connRef255->setRoutingCheckpoints(checkpoints255);\n\n    ConnRef *connRef256 = new ConnRef(router, 256);\n    ConnEnd srcPt256(Point(716.878, 501.864), 15);\n    connRef256->setSourceEndpoint(srcPt256);\n    ConnEnd dstPt256(Point(635.878, 501.864), 8);\n    connRef256->setDestEndpoint(dstPt256);\n    connRef256->setRoutingType((ConnType)2);\n\n    ConnRef *connRef257 = new ConnRef(router, 257);\n    ConnEnd srcPt257(Point(668.878, 1450.53), 8);\n    connRef257->setSourceEndpoint(srcPt257);\n    ConnEnd dstPt257(Point(852.878, 1546.53), 15);\n    connRef257->setDestEndpoint(dstPt257);\n    connRef257->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints257(1);\n    checkpoints257[0] = Checkpoint(Point(706.878, 1546.53), (ConnDirFlags) 15, (ConnDirFlags) 8);\n    connRef257->setRoutingCheckpoints(checkpoints257);\n\n    ConnRef *connRef258 = new ConnRef(router, 258);\n    ConnEnd srcPt258(Point(668.878, 1525.53), 8);\n    connRef258->setSourceEndpoint(srcPt258);\n    ConnEnd dstPt258(Point(852.878, 1546.53), 15);\n    connRef258->setDestEndpoint(dstPt258);\n    connRef258->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints258(1);\n    checkpoints258[0] = Checkpoint(Point(706.878, 1546.53), (ConnDirFlags) 15, (ConnDirFlags) 8);\n    connRef258->setRoutingCheckpoints(checkpoints258);\n\n    ConnRef *connRef259 = new ConnRef(router, 259);\n    ConnEnd srcPt259(Point(668.878, 1567.53), 8);\n    connRef259->setSourceEndpoint(srcPt259);\n    ConnEnd dstPt259(Point(852.878, 1546.53), 15);\n    connRef259->setDestEndpoint(dstPt259);\n    connRef259->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints259(1);\n    checkpoints259[0] = Checkpoint(Point(706.878, 1546.53), (ConnDirFlags) 15, (ConnDirFlags) 8);\n    connRef259->setRoutingCheckpoints(checkpoints259);\n\n    ConnRef *connRef260 = new ConnRef(router, 260);\n    ConnEnd srcPt260(Point(668.878, 1642.53), 8);\n    connRef260->setSourceEndpoint(srcPt260);\n    ConnEnd dstPt260(Point(852.878, 1546.53), 15);\n    connRef260->setDestEndpoint(dstPt260);\n    connRef260->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints260(1);\n    checkpoints260[0] = Checkpoint(Point(706.878, 1546.53), (ConnDirFlags) 15, (ConnDirFlags) 8);\n    connRef260->setRoutingCheckpoints(checkpoints260);\n\n    ConnRef *connRef261 = new ConnRef(router, 261);\n    ConnEnd srcPt261(Point(134.711, 1123.86), 8);\n    connRef261->setSourceEndpoint(srcPt261);\n    ConnEnd dstPt261(Point(716.878, 1252.86), 15);\n    connRef261->setDestEndpoint(dstPt261);\n    connRef261->setRoutingType((ConnType)2);\n\n    ConnRef *connRef262 = new ConnRef(router, 262);\n    ConnEnd srcPt262(Point(407.378, 1252.86), 15);\n    connRef262->setSourceEndpoint(srcPt262);\n    ConnEnd dstPt262(Point(407.378, 1484.53), 1);\n    connRef262->setDestEndpoint(dstPt262);\n    connRef262->setRoutingType((ConnType)2);\n\n    ConnRef *connRef263 = new ConnRef(router, 263);\n    ConnEnd srcPt263(Point(-282.289, 1252.86), 15);\n    connRef263->setSourceEndpoint(srcPt263);\n    ConnEnd dstPt263(Point(134.711, 1123.86), 4);\n    connRef263->setDestEndpoint(dstPt263);\n    connRef263->setRoutingType((ConnType)2);\n\n    ConnRef *connRef264 = new ConnRef(router, 264);\n    ConnEnd srcPt264(Point(668.878, 1567.53), 4);\n    connRef264->setSourceEndpoint(srcPt264);\n    ConnEnd dstPt264(Point(407.378, 1546.53), 15);\n    connRef264->setDestEndpoint(dstPt264);\n    connRef264->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints264(1);\n    checkpoints264[0] = Checkpoint(Point(630.878, 1546.53), (ConnDirFlags) 15, (ConnDirFlags) 4);\n    connRef264->setRoutingCheckpoints(checkpoints264);\n\n    ConnRef *connRef265 = new ConnRef(router, 265);\n    ConnEnd srcPt265(Point(668.878, 1642.53), 4);\n    connRef265->setSourceEndpoint(srcPt265);\n    ConnEnd dstPt265(Point(407.378, 1546.53), 15);\n    connRef265->setDestEndpoint(dstPt265);\n    connRef265->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints265(1);\n    checkpoints265[0] = Checkpoint(Point(630.878, 1546.53), (ConnDirFlags) 15, (ConnDirFlags) 4);\n    connRef265->setRoutingCheckpoints(checkpoints265);\n\n    ConnRef *connRef266 = new ConnRef(router, 266);\n    ConnEnd srcPt266(Point(-133.289, 1418.53), 15);\n    connRef266->setSourceEndpoint(srcPt266);\n    ConnEnd dstPt266(Point(2.71109, 1418.53), 4);\n    connRef266->setDestEndpoint(dstPt266);\n    connRef266->setRoutingType((ConnType)2);\n\n    ConnRef *connRef267 = new ConnRef(router, 267);\n    ConnEnd srcPt267(Point(828.878, 25.9469), 2);\n    connRef267->setSourceEndpoint(srcPt267);\n    ConnEnd dstPt267(Point(716.878, 138.947), 15);\n    connRef267->setDestEndpoint(dstPt267);\n    connRef267->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints267(1);\n    checkpoints267[0] = Checkpoint(Point(716.878, 55.9469), (ConnDirFlags) 15, (ConnDirFlags) 1);\n    connRef267->setRoutingCheckpoints(checkpoints267);\n\n    ConnRef *connRef268 = new ConnRef(router, 268);\n    ConnEnd srcPt268(Point(-317.289, 99.1969), 15);\n    connRef268->setSourceEndpoint(srcPt268);\n    ConnEnd dstPt268(Point(-247.289, 99.1969), 4);\n    connRef268->setDestEndpoint(dstPt268);\n    connRef268->setRoutingType((ConnType)2);\n\n    ConnRef *connRef269 = new ConnRef(router, 269);\n    ConnEnd srcPt269(Point(-100.289, 99.1969), 15);\n    connRef269->setSourceEndpoint(srcPt269);\n    ConnEnd dstPt269(Point(134.711, 99.1969), 4);\n    connRef269->setDestEndpoint(dstPt269);\n    connRef269->setRoutingType((ConnType)2);\n\n    ConnRef *connRef270 = new ConnRef(router, 270);\n    ConnEnd srcPt270(Point(-100.289, 201.197), 15);\n    connRef270->setSourceEndpoint(srcPt270);\n    ConnEnd dstPt270(Point(134.711, 201.197), 4);\n    connRef270->setDestEndpoint(dstPt270);\n    connRef270->setRoutingType((ConnType)2);\n\n    ConnRef *connRef271 = new ConnRef(router, 271);\n    ConnEnd srcPt271(Point(-317.289, 201.197), 15);\n    connRef271->setSourceEndpoint(srcPt271);\n    ConnEnd dstPt271(Point(-247.289, 201.197), 4);\n    connRef271->setDestEndpoint(dstPt271);\n    connRef271->setRoutingType((ConnType)2);\n\n    ConnRef *connRef272 = new ConnRef(router, 272);\n    ConnEnd srcPt272(Point(-166.289, 965.864), 8);\n    connRef272->setSourceEndpoint(srcPt272);\n    ConnEnd dstPt272(Point(716.878, 986.864), 15);\n    connRef272->setDestEndpoint(dstPt272);\n    connRef272->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints272(1);\n    checkpoints272[0] = Checkpoint(Point(-128.289, 986.864), (ConnDirFlags) 15, (ConnDirFlags) 8);\n    connRef272->setRoutingCheckpoints(checkpoints272);\n\n    ConnRef *connRef273 = new ConnRef(router, 273);\n    ConnEnd srcPt273(Point(-166.289, 965.864), 4);\n    connRef273->setSourceEndpoint(srcPt273);\n    ConnEnd dstPt273(Point(-282.289, 986.864), 15);\n    connRef273->setDestEndpoint(dstPt273);\n    connRef273->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints273(1);\n    checkpoints273[0] = Checkpoint(Point(-204.289, 986.864), (ConnDirFlags) 15, (ConnDirFlags) 4);\n    connRef273->setRoutingCheckpoints(checkpoints273);\n\n    ConnRef *connRef274 = new ConnRef(router, 274);\n    ConnEnd srcPt274(Point(-166.289, 1007.86), 4);\n    connRef274->setSourceEndpoint(srcPt274);\n    ConnEnd dstPt274(Point(-282.289, 986.864), 15);\n    connRef274->setDestEndpoint(dstPt274);\n    connRef274->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints274(1);\n    checkpoints274[0] = Checkpoint(Point(-204.289, 986.864), (ConnDirFlags) 15, (ConnDirFlags) 4);\n    connRef274->setRoutingCheckpoints(checkpoints274);\n\n    ConnRef *connRef275 = new ConnRef(router, 275);\n    ConnEnd srcPt275(Point(737.878, 389.864), 1);\n    connRef275->setSourceEndpoint(srcPt275);\n    ConnEnd dstPt275(Point(716.878, 328.864), 15);\n    connRef275->setDestEndpoint(dstPt275);\n    connRef275->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints275(1);\n    checkpoints275[0] = Checkpoint(Point(716.878, 359.864), (ConnDirFlags) 15, (ConnDirFlags) 2);\n    connRef275->setRoutingCheckpoints(checkpoints275);\n\n    ConnRef *connRef276 = new ConnRef(router, 276);\n    ConnEnd srcPt276(Point(505.378, 625.864), 15);\n    connRef276->setSourceEndpoint(srcPt276);\n    ConnEnd dstPt276(Point(635.878, 705.864), 4);\n    connRef276->setDestEndpoint(dstPt276);\n    connRef276->setRoutingType((ConnType)2);\n\n    ConnRef *connRef277 = new ConnRef(router, 277);\n    ConnEnd srcPt277(Point(635.878, 705.864), 8);\n    connRef277->setSourceEndpoint(srcPt277);\n    ConnEnd dstPt277(Point(716.878, 738.864), 15);\n    connRef277->setDestEndpoint(dstPt277);\n    connRef277->setRoutingType((ConnType)2);\n\n    ConnRef *connRef278 = new ConnRef(router, 278);\n    ConnEnd srcPt278(Point(635.878, 501.864), 4);\n    connRef278->setSourceEndpoint(srcPt278);\n    ConnEnd dstPt278(Point(505.378, 625.864), 15);\n    connRef278->setDestEndpoint(dstPt278);\n    connRef278->setRoutingType((ConnType)2);\n\n    ConnRef *connRef279 = new ConnRef(router, 279);\n    ConnEnd srcPt279(Point(823.878, 563.864), 1);\n    connRef279->setSourceEndpoint(srcPt279);\n    ConnEnd dstPt279(Point(716.878, 328.864), 15);\n    connRef279->setDestEndpoint(dstPt279);\n    connRef279->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints279(1);\n    checkpoints279[0] = Checkpoint(Point(844.878, 533.864), (ConnDirFlags) 15, (ConnDirFlags) 2);\n    connRef279->setRoutingCheckpoints(checkpoints279);\n\n    ConnRef *connRef280 = new ConnRef(router, 280);\n    ConnEnd srcPt280(Point(865.878, 563.864), 1);\n    connRef280->setSourceEndpoint(srcPt280);\n    ConnEnd dstPt280(Point(716.878, 328.864), 15);\n    connRef280->setDestEndpoint(dstPt280);\n    connRef280->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints280(1);\n    checkpoints280[0] = Checkpoint(Point(844.878, 533.864), (ConnDirFlags) 15, (ConnDirFlags) 2);\n    connRef280->setRoutingCheckpoints(checkpoints280);\n\n    ConnRef *connRef281 = new ConnRef(router, 281);\n    ConnEnd srcPt281(Point(956.878, 563.864), 1);\n    connRef281->setSourceEndpoint(srcPt281);\n    ConnEnd dstPt281(Point(716.878, 328.864), 15);\n    connRef281->setDestEndpoint(dstPt281);\n    connRef281->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints281(1);\n    checkpoints281[0] = Checkpoint(Point(844.878, 533.864), (ConnDirFlags) 15, (ConnDirFlags) 2);\n    connRef281->setRoutingCheckpoints(checkpoints281);\n\n    ConnRef *connRef282 = new ConnRef(router, 282);\n    ConnEnd srcPt282(Point(-303.289, 1451.53), 1);\n    connRef282->setSourceEndpoint(srcPt282);\n    ConnEnd dstPt282(Point(-282.289, 1252.86), 15);\n    connRef282->setDestEndpoint(dstPt282);\n    connRef282->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints282(1);\n    checkpoints282[0] = Checkpoint(Point(-282.289, 1421.53), (ConnDirFlags) 15, (ConnDirFlags) 2);\n    connRef282->setRoutingCheckpoints(checkpoints282);\n\n    ConnRef *connRef283 = new ConnRef(router, 283);\n    ConnEnd srcPt283(Point(737.878, 25.9469), 2);\n    connRef283->setSourceEndpoint(srcPt283);\n    ConnEnd dstPt283(Point(716.878, 138.947), 15);\n    connRef283->setDestEndpoint(dstPt283);\n    connRef283->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints283(1);\n    checkpoints283[0] = Checkpoint(Point(716.878, 55.9469), (ConnDirFlags) 15, (ConnDirFlags) 1);\n    connRef283->setRoutingCheckpoints(checkpoints283);\n\n    ConnRef *connRef284 = new ConnRef(router, 284);\n    ConnEnd srcPt284(Point(68.7111, -191.803), 8);\n    connRef284->setSourceEndpoint(srcPt284);\n    ConnEnd dstPt284(Point(716.878, -212.803), 15);\n    connRef284->setDestEndpoint(dstPt284);\n    connRef284->setRoutingType((ConnType)2);\n    std::vector<Checkpoint> checkpoints284(1);\n    checkpoints284[0] = Checkpoint(Point(106.711, -212.803), (ConnDirFlags) 15, (ConnDirFlags) 8);\n    connRef284->setRoutingCheckpoints(checkpoints284);\n\n    ConnRef *connRef285 = new ConnRef(router, 285);\n    ConnEnd srcPt285(Point(407.378, 1156.86), 15);\n    connRef285->setSourceEndpoint(srcPt285);\n    ConnEnd dstPt285(Point(571.378, 1285.86), 8);\n    connRef285->setDestEndpoint(dstPt285);\n    connRef285->setRoutingType((ConnType)2);\n\n    ConnRef *connRef286 = new ConnRef(router, 286);\n    ConnEnd srcPt286(Point(407.378, 1156.86), 15);\n    connRef286->setSourceEndpoint(srcPt286);\n    ConnEnd dstPt286(Point(571.378, 1189.86), 1);\n    connRef286->setDestEndpoint(dstPt286);\n    connRef286->setRoutingType((ConnType)2);\n\n    ConnRef *connRef287 = new ConnRef(router, 287);\n    ConnEnd srcPt287(Point(774.878, 234.197), 4);\n    connRef287->setSourceEndpoint(srcPt287);\n    ConnEnd dstPt287(Point(716.878, 234.197), 8);\n    connRef287->setDestEndpoint(dstPt287);\n    connRef287->setRoutingType((ConnType)2);\n\n    ConnRef *connRef288 = new ConnRef(router, 288);\n    ConnEnd srcPt288(Point(101.711, 1475.53), 2);\n    connRef288->setSourceEndpoint(srcPt288);\n    ConnEnd dstPt288(Point(101.711, 1525.53), 1);\n    connRef288->setDestEndpoint(dstPt288);\n    connRef288->setRoutingType((ConnType)2);\n\n    ConnRef *connRef289 = new ConnRef(router, 289);\n    ConnEnd srcPt289(Point(-203.289, 1451.53), 4);\n    connRef289->setSourceEndpoint(srcPt289);\n    ConnEnd dstPt289(Point(-261.289, 1451.53), 8);\n    connRef289->setDestEndpoint(dstPt289);\n    connRef289->setRoutingType((ConnType)2);\n\n    ConnRef *connRef290 = new ConnRef(router, 290);\n    ConnEnd srcPt290(Point(101.711, 1617.53), 1);\n    connRef290->setSourceEndpoint(srcPt290);\n    ConnEnd dstPt290(Point(101.711, 1567.53), 2);\n    connRef290->setDestEndpoint(dstPt290);\n    connRef290->setRoutingType((ConnType)2);\n\n    ConnRef *connRef291 = new ConnRef(router, 291);\n    ConnEnd srcPt291(Point(465.378, 1484.53), 4);\n    connRef291->setSourceEndpoint(srcPt291);\n    ConnEnd dstPt291(Point(407.378, 1484.53), 8);\n    connRef291->setDestEndpoint(dstPt291);\n    connRef291->setRoutingType((ConnType)2);\n\n    ConnRef *connRef292 = new ConnRef(router, 292);\n    ConnEnd srcPt292(Point(668.878, 1400.53), 2);\n    connRef292->setSourceEndpoint(srcPt292);\n    ConnEnd dstPt292(Point(668.878, 1450.53), 1);\n    connRef292->setDestEndpoint(dstPt292);\n    connRef292->setRoutingType((ConnType)2);\n\n    ConnRef *connRef293 = new ConnRef(router, 293);\n    ConnEnd srcPt293(Point(668.878, 1475.53), 2);\n    connRef293->setSourceEndpoint(srcPt293);\n    ConnEnd dstPt293(Point(668.878, 1525.53), 1);\n    connRef293->setDestEndpoint(dstPt293);\n    connRef293->setRoutingType((ConnType)2);\n\n    ConnRef *connRef294 = new ConnRef(router, 294);\n    ConnEnd srcPt294(Point(571.378, 1335.86), 1);\n    connRef294->setSourceEndpoint(srcPt294);\n    ConnEnd dstPt294(Point(571.378, 1285.86), 2);\n    connRef294->setDestEndpoint(dstPt294);\n    connRef294->setRoutingType((ConnType)2);\n\n    ConnRef *connRef295 = new ConnRef(router, 295);\n    ConnEnd srcPt295(Point(629.378, 1189.86), 4);\n    connRef295->setSourceEndpoint(srcPt295);\n    ConnEnd dstPt295(Point(571.378, 1189.86), 8);\n    connRef295->setDestEndpoint(dstPt295);\n    connRef295->setRoutingType((ConnType)2);\n\n    ConnRef *connRef296 = new ConnRef(router, 296);\n    ConnEnd srcPt296(Point(275.378, 1202.86), 2);\n    connRef296->setSourceEndpoint(srcPt296);\n    ConnEnd dstPt296(Point(275.378, 1252.86), 1);\n    connRef296->setDestEndpoint(dstPt296);\n    connRef296->setRoutingType((ConnType)2);\n\n    ConnRef *connRef297 = new ConnRef(router, 297);\n    ConnEnd srcPt297(Point(-133.289, 1202.86), 2);\n    connRef297->setSourceEndpoint(srcPt297);\n    ConnEnd dstPt297(Point(-133.289, 1252.86), 1);\n    connRef297->setDestEndpoint(dstPt297);\n    connRef297->setRoutingType((ConnType)2);\n\n    ConnRef *connRef298 = new ConnRef(router, 298);\n    ConnEnd srcPt298(Point(885.878, 1202.86), 2);\n    connRef298->setSourceEndpoint(srcPt298);\n    ConnEnd dstPt298(Point(885.878, 1252.86), 1);\n    connRef298->setDestEndpoint(dstPt298);\n    connRef298->setRoutingType((ConnType)2);\n\n    ConnRef *connRef299 = new ConnRef(router, 299);\n    ConnEnd srcPt299(Point(774.878, 1048.86), 4);\n    connRef299->setSourceEndpoint(srcPt299);\n    ConnEnd dstPt299(Point(716.878, 1048.86), 8);\n    connRef299->setDestEndpoint(dstPt299);\n    connRef299->setRoutingType((ConnType)2);\n\n    ConnRef *connRef300 = new ConnRef(router, 300);\n    ConnEnd srcPt300(Point(774.878, 924.864), 4);\n    connRef300->setSourceEndpoint(srcPt300);\n    ConnEnd dstPt300(Point(716.878, 924.864), 8);\n    connRef300->setDestEndpoint(dstPt300);\n    connRef300->setRoutingType((ConnType)2);\n\n    ConnRef *connRef301 = new ConnRef(router, 301);\n    ConnEnd srcPt301(Point(774.878, 800.864), 4);\n    connRef301->setSourceEndpoint(srcPt301);\n    ConnEnd dstPt301(Point(716.878, 800.864), 8);\n    connRef301->setDestEndpoint(dstPt301);\n    connRef301->setRoutingType((ConnType)2);\n\n    ConnRef *connRef302 = new ConnRef(router, 302);\n    ConnEnd srcPt302(Point(637.878, 389.864), 8);\n    connRef302->setSourceEndpoint(srcPt302);\n    ConnEnd dstPt302(Point(695.878, 389.864), 4);\n    connRef302->setDestEndpoint(dstPt302);\n    connRef302->setRoutingType((ConnType)2);\n\n    ConnRef *connRef303 = new ConnRef(router, 303);\n    ConnEnd srcPt303(Point(538.378, 278.864), 2);\n    connRef303->setSourceEndpoint(srcPt303);\n    ConnEnd dstPt303(Point(538.378, 328.864), 1);\n    connRef303->setDestEndpoint(dstPt303);\n    connRef303->setRoutingType((ConnType)2);\n\n    ConnRef *connRef304 = new ConnRef(router, 304);\n    ConnEnd srcPt304(Point(637.878, 25.9469), 8);\n    connRef304->setSourceEndpoint(srcPt304);\n    ConnEnd dstPt304(Point(695.878, 25.9469), 4);\n    connRef304->setDestEndpoint(dstPt304);\n    connRef304->setRoutingType((ConnType)2);\n\n    ConnRef *connRef305 = new ConnRef(router, 305);\n    ConnEnd srcPt305(Point(886.878, 25.9469), 4);\n    connRef305->setSourceEndpoint(srcPt305);\n    ConnEnd dstPt305(Point(828.878, 25.9469), 8);\n    connRef305->setDestEndpoint(dstPt305);\n    connRef305->setRoutingType((ConnType)2);\n\n    ConnRef *connRef306 = new ConnRef(router, 306);\n    ConnEnd srcPt306(Point(852.878, -296.303), 2);\n    connRef306->setSourceEndpoint(srcPt306);\n    ConnEnd dstPt306(Point(852.878, -246.303), 1);\n    connRef306->setDestEndpoint(dstPt306);\n    connRef306->setRoutingType((ConnType)2);\n\n    ConnRef *connRef307 = new ConnRef(router, 307);\n    ConnEnd srcPt307(Point(774.878, -127.553), 4);\n    connRef307->setSourceEndpoint(srcPt307);\n    ConnEnd dstPt307(Point(716.878, -127.553), 8);\n    connRef307->setDestEndpoint(dstPt307);\n    connRef307->setRoutingType((ConnType)2);\n\n    ConnRef *connRef308 = new ConnRef(router, 308);\n    ConnEnd srcPt308(Point(774.878, -318.803), 4);\n    connRef308->setSourceEndpoint(srcPt308);\n    ConnEnd dstPt308(Point(716.878, -318.803), 8);\n    connRef308->setDestEndpoint(dstPt308);\n    connRef308->setRoutingType((ConnType)2);\n\n    ConnRef *connRef309 = new ConnRef(router, 309);\n    ConnEnd srcPt309(Point(472.378, -90.0531), 2);\n    connRef309->setSourceEndpoint(srcPt309);\n    ConnEnd dstPt309(Point(472.378, -40.0531), 1);\n    connRef309->setDestEndpoint(dstPt309);\n    connRef309->setRoutingType((ConnType)2);\n\n    ConnRef *connRef310 = new ConnRef(router, 310);\n    ConnEnd srcPt310(Point(-30.2889, -186.053), 2);\n    connRef310->setSourceEndpoint(srcPt310);\n    ConnEnd dstPt310(Point(-30.2889, -136.053), 1);\n    connRef310->setDestEndpoint(dstPt310);\n    connRef310->setRoutingType((ConnType)2);\n\n    ConnRef *connRef311 = new ConnRef(router, 311);\n    ConnEnd srcPt311(Point(-30.2889, -111.053), 2);\n    connRef311->setSourceEndpoint(srcPt311);\n    ConnEnd dstPt311(Point(-30.2889, -61.0531), 1);\n    connRef311->setDestEndpoint(dstPt311);\n    connRef311->setRoutingType((ConnType)2);\n\n    ConnRef *connRef312 = new ConnRef(router, 312);\n    ConnEnd srcPt312(Point(374.378, -177.553), 2);\n    connRef312->setSourceEndpoint(srcPt312);\n    ConnEnd dstPt312(Point(374.378, -127.553), 1);\n    connRef312->setDestEndpoint(dstPt312);\n    connRef312->setRoutingType((ConnType)2);\n\n    ConnRef *connRef313 = new ConnRef(router, 313);\n    ConnEnd srcPt313(Point(151.378, -127.553), 8);\n    connRef313->setSourceEndpoint(srcPt313);\n    ConnEnd dstPt313(Point(209.378, -127.553), 4);\n    connRef313->setDestEndpoint(dstPt313);\n    connRef313->setRoutingType((ConnType)2);\n\n    ConnRef *connRef314 = new ConnRef(router, 314);\n    ConnEnd srcPt314(Point(-189.289, -127.553), 4);\n    connRef314->setSourceEndpoint(srcPt314);\n    ConnEnd dstPt314(Point(-247.289, -127.553), 8);\n    connRef314->setDestEndpoint(dstPt314);\n    connRef314->setRoutingType((ConnType)2);\n\n    ConnRef *connRef315 = new ConnRef(router, 315);\n    ConnEnd srcPt315(Point(68.7111, -433.803), 2);\n    connRef315->setSourceEndpoint(srcPt315);\n    ConnEnd dstPt315(Point(68.7111, -383.803), 1);\n    connRef315->setDestEndpoint(dstPt315);\n    connRef315->setRoutingType((ConnType)2);\n\n    ConnRef *connRef316 = new ConnRef(router, 316);\n    ConnEnd srcPt316(Point(68.7111, -358.803), 2);\n    connRef316->setSourceEndpoint(srcPt316);\n    ConnEnd dstPt316(Point(68.7111, -308.803), 1);\n    connRef316->setDestEndpoint(dstPt316);\n    connRef316->setRoutingType((ConnType)2);\n\n    ConnRef *connRef317 = new ConnRef(router, 317);\n    ConnEnd srcPt317(Point(68.7111, -66.8031), 1);\n    connRef317->setSourceEndpoint(srcPt317);\n    ConnEnd dstPt317(Point(68.7111, -116.803), 2);\n    connRef317->setDestEndpoint(dstPt317);\n    connRef317->setRoutingType((ConnType)2);\n\n    ConnRef *connRef318 = new ConnRef(router, 318);\n    ConnEnd srcPt318(Point(341.378, -401.803), 2);\n    connRef318->setSourceEndpoint(srcPt318);\n    ConnEnd dstPt318(Point(341.378, -351.803), 1);\n    connRef318->setDestEndpoint(dstPt318);\n    connRef318->setRoutingType((ConnType)2);\n\n    ConnRef *connRef319 = new ConnRef(router, 319);\n    ConnEnd srcPt319(Point(341.378, -503.803), 2);\n    connRef319->setSourceEndpoint(srcPt319);\n    ConnEnd dstPt319(Point(341.378, -453.803), 1);\n    connRef319->setDestEndpoint(dstPt319);\n    connRef319->setRoutingType((ConnType)2);\n\n    ConnRef *connRef320 = new ConnRef(router, 320);\n    ConnEnd srcPt320(Point(2.71109, 1368.53), 2);\n    connRef320->setSourceEndpoint(srcPt320);\n    ConnEnd dstPt320(Point(2.71109, 1418.53), 1);\n    connRef320->setDestEndpoint(dstPt320);\n    connRef320->setRoutingType((ConnType)2);\n\n    ConnRef *connRef321 = new ConnRef(router, 321);\n    ConnEnd srcPt321(Point(774.878, 625.864), 4);\n    connRef321->setSourceEndpoint(srcPt321);\n    ConnEnd dstPt321(Point(716.878, 625.864), 8);\n    connRef321->setDestEndpoint(dstPt321);\n    connRef321->setRoutingType((ConnType)2);\n\n    ConnRef *connRef322 = new ConnRef(router, 322);\n    ConnEnd srcPt322(Point(68.7111, -283.803), 2);\n    connRef322->setSourceEndpoint(srcPt322);\n    ConnEnd dstPt322(Point(68.7111, -233.803), 1);\n    connRef322->setDestEndpoint(dstPt322);\n    connRef322->setRoutingType((ConnType)2);\n\n    ConnRef *connRef323 = new ConnRef(router, 323);\n    ConnEnd srcPt323(Point(-30.2889, 30.9469), 1);\n    connRef323->setSourceEndpoint(srcPt323);\n    ConnEnd dstPt323(Point(-30.2889, -19.0531), 2);\n    connRef323->setDestEndpoint(dstPt323);\n    connRef323->setRoutingType((ConnType)2);\n\n    ConnRef *connRef324 = new ConnRef(router, 324);\n    ConnEnd srcPt324(Point(-247.289, 49.1969), 2);\n    connRef324->setSourceEndpoint(srcPt324);\n    ConnEnd dstPt324(Point(-247.289, 99.1969), 1);\n    connRef324->setDestEndpoint(dstPt324);\n    connRef324->setRoutingType((ConnType)2);\n\n    ConnRef *connRef325 = new ConnRef(router, 325);\n    ConnEnd srcPt325(Point(-247.289, 151.197), 2);\n    connRef325->setSourceEndpoint(srcPt325);\n    ConnEnd dstPt325(Point(-247.289, 201.197), 1);\n    connRef325->setDestEndpoint(dstPt325);\n    connRef325->setRoutingType((ConnType)2);\n\n    ConnRef *connRef326 = new ConnRef(router, 326);\n    ConnEnd srcPt326(Point(134.711, 49.1969), 2);\n    connRef326->setSourceEndpoint(srcPt326);\n    ConnEnd dstPt326(Point(134.711, 99.1969), 1);\n    connRef326->setDestEndpoint(dstPt326);\n    connRef326->setRoutingType((ConnType)2);\n\n    ConnRef *connRef327 = new ConnRef(router, 327);\n    ConnEnd srcPt327(Point(134.711, 151.197), 2);\n    connRef327->setSourceEndpoint(srcPt327);\n    ConnEnd dstPt327(Point(134.711, 201.197), 1);\n    connRef327->setDestEndpoint(dstPt327);\n    connRef327->setRoutingType((ConnType)2);\n\n    ConnRef *connRef328 = new ConnRef(router, 328);\n    ConnEnd srcPt328(Point(-166.289, 915.864), 2);\n    connRef328->setSourceEndpoint(srcPt328);\n    ConnEnd dstPt328(Point(-166.289, 965.864), 1);\n    connRef328->setDestEndpoint(dstPt328);\n    connRef328->setRoutingType((ConnType)2);\n\n    ConnRef *connRef329 = new ConnRef(router, 329);\n    ConnEnd srcPt329(Point(668.878, 1617.53), 1);\n    connRef329->setSourceEndpoint(srcPt329);\n    ConnEnd dstPt329(Point(668.878, 1567.53), 2);\n    connRef329->setDestEndpoint(dstPt329);\n    connRef329->setRoutingType((ConnType)2);\n\n    ConnRef *connRef330 = new ConnRef(router, 330);\n    ConnEnd srcPt330(Point(-166.289, 1057.86), 1);\n    connRef330->setSourceEndpoint(srcPt330);\n    ConnEnd dstPt330(Point(-166.289, 1007.86), 2);\n    connRef330->setDestEndpoint(dstPt330);\n    connRef330->setRoutingType((ConnType)2);\n\n    ConnRef *connRef331 = new ConnRef(router, 331);\n    ConnEnd srcPt331(Point(795.878, 389.864), 4);\n    connRef331->setSourceEndpoint(srcPt331);\n    ConnEnd dstPt331(Point(737.878, 389.864), 8);\n    connRef331->setDestEndpoint(dstPt331);\n    connRef331->setRoutingType((ConnType)2);\n\n    ConnRef *connRef332 = new ConnRef(router, 332);\n    ConnEnd srcPt332(Point(765.878, 563.864), 8);\n    connRef332->setSourceEndpoint(srcPt332);\n    ConnEnd dstPt332(Point(823.878, 563.864), 4);\n    connRef332->setDestEndpoint(dstPt332);\n    connRef332->setRoutingType((ConnType)2);\n\n    ConnRef *connRef333 = new ConnRef(router, 333);\n    ConnEnd srcPt333(Point(923.878, 563.864), 4);\n    connRef333->setSourceEndpoint(srcPt333);\n    ConnEnd dstPt333(Point(865.878, 563.864), 8);\n    connRef333->setDestEndpoint(dstPt333);\n    connRef333->setRoutingType((ConnType)2);\n\n    ConnRef *connRef334 = new ConnRef(router, 334);\n    ConnEnd srcPt334(Point(134.711, 1073.86), 2);\n    connRef334->setSourceEndpoint(srcPt334);\n    ConnEnd dstPt334(Point(134.711, 1123.86), 1);\n    connRef334->setDestEndpoint(dstPt334);\n    connRef334->setRoutingType((ConnType)2);\n\n    ConnRef *connRef335 = new ConnRef(router, 335);\n    ConnEnd srcPt335(Point(1014.88, 563.864), 4);\n    connRef335->setSourceEndpoint(srcPt335);\n    ConnEnd dstPt335(Point(956.878, 563.864), 8);\n    connRef335->setDestEndpoint(dstPt335);\n    connRef335->setRoutingType((ConnType)2);\n\n    ConnRef *connRef336 = new ConnRef(router, 336);\n    ConnEnd srcPt336(Point(635.878, 655.864), 2);\n    connRef336->setSourceEndpoint(srcPt336);\n    ConnEnd dstPt336(Point(635.878, 705.864), 1);\n    connRef336->setDestEndpoint(dstPt336);\n    connRef336->setRoutingType((ConnType)2);\n\n    ConnRef *connRef337 = new ConnRef(router, 337);\n    ConnEnd srcPt337(Point(635.878, 451.864), 2);\n    connRef337->setSourceEndpoint(srcPt337);\n    ConnEnd dstPt337(Point(635.878, 501.864), 1);\n    connRef337->setDestEndpoint(dstPt337);\n    connRef337->setRoutingType((ConnType)2);\n\n    ConnRef *connRef338 = new ConnRef(router, 338);\n    ConnEnd srcPt338(Point(-361.289, 1451.53), 8);\n    connRef338->setSourceEndpoint(srcPt338);\n    ConnEnd dstPt338(Point(-303.289, 1451.53), 4);\n    connRef338->setDestEndpoint(dstPt338);\n    connRef338->setRoutingType((ConnType)2);\n\n    ConnRef *connRef339 = new ConnRef(router, 339);\n    ConnEnd srcPt339(Point(795.878, 25.9469), 4);\n    connRef339->setSourceEndpoint(srcPt339);\n    ConnEnd dstPt339(Point(737.878, 25.9469), 8);\n    connRef339->setDestEndpoint(dstPt339);\n    connRef339->setRoutingType((ConnType)2);\n\n    ConnRef *connRef340 = new ConnRef(router, 340);\n    ConnEnd srcPt340(Point(68.7111, -141.803), 1);\n    connRef340->setSourceEndpoint(srcPt340);\n    ConnEnd dstPt340(Point(68.7111, -191.803), 2);\n    connRef340->setDestEndpoint(dstPt340);\n    connRef340->setRoutingType((ConnType)2);\n\n    ConnRef *connRef341 = new ConnRef(router, 341);\n    ConnEnd srcPt341(Point(-30.2889, 105.947), 1);\n    connRef341->setSourceEndpoint(srcPt341);\n    ConnEnd dstPt341(Point(-30.2889, 55.9469), 2);\n    connRef341->setDestEndpoint(dstPt341);\n    connRef341->setRoutingType((ConnType)2);\n\n    ConnRef *connRef342 = new ConnRef(router, 342);\n    ConnEnd srcPt342(Point(668.878, 1692.53), 1);\n    connRef342->setSourceEndpoint(srcPt342);\n    ConnEnd dstPt342(Point(668.878, 1642.53), 2);\n    connRef342->setDestEndpoint(dstPt342);\n    connRef342->setRoutingType((ConnType)2);\n\n    ConnRef *connRef343 = new ConnRef(router, 343);\n    ConnEnd srcPt343(Point(716.878, -212.803), 15);\n    connRef343->setSourceEndpoint(srcPt343);\n    ConnEnd dstPt343(Point(942.378, 9.44694), 4);\n    connRef343->setDestEndpoint(dstPt343);\n    connRef343->setRoutingType((ConnType)2);\n\n    ConnRef *connRef344 = new ConnRef(router, 344);\n    ConnEnd srcPt344(Point(716.878, 328.864), 15);\n    connRef344->setSourceEndpoint(srcPt344);\n    ConnEnd dstPt344(Point(942.378, 49.4469), 4);\n    connRef344->setDestEndpoint(dstPt344);\n    connRef344->setRoutingType((ConnType)2);\n\n    ConnRef *connRef345 = new ConnRef(router, 345);\n    ConnEnd srcPt345(Point(716.878, 862.864), 15);\n    connRef345->setSourceEndpoint(srcPt345);\n    ConnEnd dstPt345(Point(1028.38, 212.947), 2);\n    connRef345->setDestEndpoint(dstPt345);\n    connRef345->setRoutingType((ConnType)2);\n\n    ConnRef *connRef346 = new ConnRef(router, 346);\n    ConnEnd srcPt346(Point(716.878, 1252.86), 15);\n    connRef346->setSourceEndpoint(srcPt346);\n    ConnEnd dstPt346(Point(1068.38, 212.947), 2);\n    connRef346->setDestEndpoint(dstPt346);\n    connRef346->setRoutingType((ConnType)2);\n\n    ConnRef *connRef347 = new ConnRef(router, 347);\n    ConnEnd srcPt347(Point(716.878, -412.803), 15);\n    connRef347->setSourceEndpoint(srcPt347);\n    ConnEnd dstPt347(Point(777.378, -478.303), 2);\n    connRef347->setDestEndpoint(dstPt347);\n    connRef347->setRoutingType((ConnType)2);\n\n    ConnRef *connRef348 = new ConnRef(router, 348);\n    ConnEnd srcPt348(Point(-282.289, 986.864), 15);\n    connRef348->setSourceEndpoint(srcPt348);\n    ConnEnd dstPt348(Point(-286.289, 1109.36), 8);\n    connRef348->setDestEndpoint(dstPt348);\n    connRef348->setRoutingType((ConnType)2);\n\n    ConnRef *connRef349 = new ConnRef(router, 349);\n    ConnEnd srcPt349(Point(-282.289, 1252.86), 15);\n    connRef349->setSourceEndpoint(srcPt349);\n    ConnEnd dstPt349(Point(-286.289, 1149.36), 8);\n    connRef349->setDestEndpoint(dstPt349);\n    connRef349->setRoutingType((ConnType)2);\n\n    ConnRef *connRef350 = new ConnRef(router, 350);\n    ConnEnd srcPt350(Point(716.878, 738.864), 15);\n    connRef350->setSourceEndpoint(srcPt350);\n    ConnEnd dstPt350(Point(302.378, 746.364), 8);\n    connRef350->setDestEndpoint(dstPt350);\n    connRef350->setRoutingType((ConnType)2);\n\n    ConnRef *connRef351 = new ConnRef(router, 351);\n    ConnEnd srcPt351(Point(961.878, 1252.86), 15);\n    connRef351->setSourceEndpoint(srcPt351);\n    ConnEnd dstPt351(Point(964.378, 1415.53), 1);\n    connRef351->setDestEndpoint(dstPt351);\n    connRef351->setRoutingType((ConnType)2);\n\n    CompoundConstraints ccs;\n    std::vector<vpsc::Rectangle*> rs;\n    vpsc::Rectangle *rect = nullptr;\n\n    rect = new vpsc::Rectangle(696.878, 736.878, 214.197, 254.197);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(81.7111, 121.711, 1505.53, 1545.53);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(-281.289, -241.289, 1431.53, 1471.53);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(81.7111, 121.711, 1547.53, 1587.53);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(-312.289, -252.289, 1516.53, 1576.53);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(926.878, 1168.88, -169.553, 227.447);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(706.878, 846.878, -657.803, -463.803);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(387.378, 427.378, 1464.53, 1504.53);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(648.878, 688.878, 1430.53, 1470.53);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(648.878, 688.878, 1505.53, 1545.53);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(551.378, 591.378, 1265.86, 1305.86);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(551.378, 591.378, 1169.86, 1209.86);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(255.378, 295.378, 1232.86, 1272.86);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(-153.289, -113.289, 1232.86, 1272.86);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(865.878, 905.878, 1232.86, 1272.86);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(417.378, 525.378, 981.864, 1045.86);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(696.878, 736.878, 1028.86, 1068.86);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(-498.789, -271.789, 1036.86, 1220.86);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(696.878, 736.878, 904.864, 944.864);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(696.878, 736.878, 780.864, 820.864);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(675.878, 715.878, 369.864, 409.864);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(-16.1222, 316.878, 705.864, 785.864);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(518.378, 558.378, 308.864, 348.864);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(675.878, 715.878, 5.94694, 45.9469);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(808.878, 848.878, 5.94694, 45.9469);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(832.878, 872.878, -266.303, -226.303);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(696.878, 736.878, -147.553, -107.553);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(696.878, 736.878, -338.803, -298.803);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(452.378, 492.378, -60.0531, -20.0531);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(-50.2889, -10.2889, -156.053, -116.053);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(-50.2889, -10.2889, -81.0531, -41.0531);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(354.378, 394.378, -147.553, -107.553);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(189.378, 229.378, -147.553, -107.553);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(-267.289, -227.289, -147.553, -107.553);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(48.7111, 88.7111, -403.803, -363.803);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(48.7111, 88.7111, -328.803, -288.803);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(48.7111, 88.7111, -136.803, -96.8031);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(321.378, 361.378, -371.803, -331.803);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(321.378, 361.378, -473.803, -433.803);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(-402.789, -121.789, -606.303, -551.303);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(-17.2889, 22.7111, 1398.53, 1438.53);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(696.878, 736.878, 605.864, 645.864);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(48.7111, 88.7111, -253.803, -213.803);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(-50.2889, -10.2889, -39.0531, 0.946943);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(-267.289, -227.289, 79.1969, 119.197);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(-267.289, -227.289, 181.197, 221.197);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(114.711, 154.711, 79.1969, 119.197);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(114.711, 154.711, 181.197, 221.197);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(898.878, 958.878, -276.303, -216.303);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(686.878, 746.878, -442.803, -382.803);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(686.878, 746.878, 832.864, 892.864);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(-277.289, -217.289, -242.803, -182.803);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(-277.289, -217.289, -70.0531, -10.0531);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(278.378, 338.378, 298.864, 358.864);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(278.378, 338.378, -70.0531, -10.0531);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(686.878, 746.878, -242.803, -182.803);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(686.878, 746.878, -70.0531, -10.0531);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(686.878, 746.878, 956.864, 1016.86);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(686.878, 746.878, 708.864, 768.864);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(686.878, 746.878, 471.864, 531.864);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(931.878, 991.878, 1222.86, 1282.86);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(212.378, 272.378, 1388.53, 1448.53);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(822.878, 882.878, 1516.53, 1576.53);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(686.878, 746.878, 1222.86, 1282.86);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(377.378, 437.378, 1222.86, 1282.86);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(-312.289, -252.289, 1222.86, 1282.86);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(377.378, 437.378, 1516.53, 1576.53);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(5.71109, 65.7111, 1222.86, 1282.86);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(-163.289, -103.289, 1388.53, 1448.53);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(686.878, 746.878, 108.947, 168.947);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(-347.289, -287.289, 69.1969, 129.197);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(-130.289, -70.2889, 69.1969, 129.197);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(-130.289, -70.2889, 171.197, 231.197);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(-347.289, -287.289, 171.197, 231.197);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(-186.289, -146.289, 945.864, 985.864);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(-312.289, -252.289, 956.864, 1016.86);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(648.878, 688.878, 1547.53, 1587.53);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(-186.289, -146.289, 987.864, 1027.86);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(885.378, 1042.38, 1400.03, 1585.03);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(717.878, 757.878, 369.864, 409.864);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(803.878, 843.878, 543.864, 583.864);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(845.878, 885.878, 543.864, 583.864);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(114.711, 154.711, 1103.86, 1143.86);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(936.878, 976.878, 543.864, 583.864);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(475.378, 535.378, 595.864, 655.864);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(615.878, 655.878, 685.864, 725.864);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(615.878, 655.878, 481.864, 521.864);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(686.878, 746.878, 298.864, 358.864);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(-323.289, -283.289, 1431.53, 1471.53);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(717.878, 757.878, 5.94694, 45.9469);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(48.7111, 88.7111, -211.803, -171.803);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(-50.2889, -10.2889, 35.9469, 75.9469);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(648.878, 688.878, 1622.53, 1662.53);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(377.378, 437.378, 1126.86, 1186.86);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(736.878, 812.878, 204.197, 264.197);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(63.7111, 139.711, 1445.53, 1505.53);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(-241.289, -165.289, 1421.53, 1481.53);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(63.7111, 139.711, 1587.53, 1647.53);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(427.378, 503.378, 1454.53, 1514.53);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(630.878, 706.878, 1370.53, 1430.53);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(630.878, 706.878, 1445.53, 1505.53);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(533.378, 609.378, 1305.86, 1365.86);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(591.378, 667.378, 1159.86, 1219.86);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(237.378, 313.378, 1172.86, 1232.86);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(-171.289, -95.2889, 1172.86, 1232.86);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(847.878, 923.878, 1172.86, 1232.86);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(736.878, 812.878, 1018.86, 1078.86);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(736.878, 812.878, 894.864, 954.864);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(736.878, 812.878, 770.864, 830.864);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(599.878, 675.878, 359.864, 419.864);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(500.378, 576.378, 248.864, 308.864);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(599.878, 675.878, -4.05306, 55.9469);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(848.878, 924.878, -4.05306, 55.9469);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(814.878, 890.878, -326.303, -266.303);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(736.878, 812.878, -157.553, -97.5531);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(736.878, 812.878, -348.803, -288.803);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(434.378, 510.378, -120.053, -60.0531);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(-68.2889, 7.71109, -216.053, -156.053);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(-68.2889, 7.71109, -141.053, -81.0531);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(336.378, 412.378, -207.553, -147.553);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(113.378, 189.378, -157.553, -97.5531);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(-227.289, -151.289, -157.553, -97.5531);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(30.7111, 106.711, -463.803, -403.803);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(30.7111, 106.711, -388.803, -328.803);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(30.7111, 106.711, -96.8031, -36.8031);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(303.378, 379.378, -431.803, -371.803);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(303.378, 379.378, -533.803, -473.803);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(-35.2889, 40.7111, 1338.53, 1398.53);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(736.878, 812.878, 595.864, 655.864);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(30.7111, 106.711, -313.803, -253.803);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(-68.2889, 7.71109, 0.946943, 60.9469);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(-285.289, -209.289, 19.1969, 79.1969);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(-285.289, -209.289, 121.197, 181.197);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(96.7111, 172.711, 19.1969, 79.1969);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(96.7111, 172.711, 121.197, 181.197);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(-204.289, -128.289, 885.864, 945.864);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(630.878, 706.878, 1587.53, 1647.53);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(-204.289, -128.289, 1027.86, 1087.86);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(757.878, 833.878, 359.864, 419.864);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(727.878, 803.878, 533.864, 593.864);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(885.878, 961.878, 533.864, 593.864);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(96.7111, 172.711, 1043.86, 1103.86);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(976.878, 1052.88, 533.864, 593.864);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(597.878, 673.878, 625.864, 685.864);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(597.878, 673.878, 421.864, 481.864);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(-399.289, -323.289, 1421.53, 1481.53);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(757.878, 833.878, -4.05306, 55.9469);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(30.7111, 106.711, -171.803, -111.803);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(-68.2889, 7.71109, 75.9469, 135.947);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(630.878, 706.878, 1662.53, 1722.53);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(942.378, 992.378, -5.55306, 24.4469);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(942.378, 992.378, 34.4469, 64.4469);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(1013.38, 1043.38, 162.947, 212.947);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(1053.38, 1083.38, 162.947, 212.947);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(762.378, 792.378, -528.303, -478.303);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(-336.289, -286.289, 1094.36, 1124.36);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(-336.289, -286.289, 1134.36, 1164.36);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(252.378, 302.378, 731.364, 761.364);\n    rs.push_back(rect);\n\n    rect = new vpsc::Rectangle(949.378, 979.378, 1415.53, 1465.53);\n    rs.push_back(rect);\n\n    AlignmentConstraint *alignment140012645961856 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140012645961856->addShape(4, 0);\n    alignment140012645961856->addShape(66, 0);\n    alignment140012645961856->addShape(1, -21);\n    alignment140012645961856->addShape(95, -71);\n    alignment140012645961856->addShape(3, 21);\n    alignment140012645961856->addShape(97, 71);\n    ccs.push_back(alignment140012645961856);\n\n    AlignmentConstraint *alignment140012646515136 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140012646515136->addShape(1, 0);\n    alignment140012646515136->addShape(95, 0);\n    alignment140012646515136->addShape(3, 0);\n    alignment140012646515136->addShape(97, 0);\n    ccs.push_back(alignment140012646515136);\n\n    AlignmentConstraint *alignment140012646514848 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140012646514848->addShape(4, 0);\n    ccs.push_back(alignment140012646514848);\n\n    AlignmentConstraint *alignment140012646514944 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140012646514944->addShape(66, 0);\n    ccs.push_back(alignment140012646514944);\n\n    SeparationConstraint *separation140012646421216 = new SeparationConstraint(vpsc::XDIM, alignment140012646514848, alignment140012646515136, 143, false);\n    ccs.push_back(separation140012646421216);\n\n    SeparationConstraint *separation140012646421424 = new SeparationConstraint(vpsc::XDIM, alignment140012646515136, alignment140012646514944, 89, false);\n    ccs.push_back(separation140012646421424);\n\n    AlignmentConstraint *alignment140012646421712 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140012646421712->addShape(4, 0);\n    alignment140012646421712->addShape(65, 0);\n    alignment140012646421712->addShape(88, -21);\n    alignment140012646421712->addShape(145, -79);\n    alignment140012646421712->addShape(2, 21);\n    alignment140012646421712->addShape(96, 79);\n    ccs.push_back(alignment140012646421712);\n\n    AlignmentConstraint *alignment140012646422160 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140012646422160->addShape(88, 0);\n    alignment140012646422160->addShape(145, 0);\n    alignment140012646422160->addShape(2, 0);\n    alignment140012646422160->addShape(96, 0);\n    ccs.push_back(alignment140012646422160);\n\n    AlignmentConstraint *alignment140012646421872 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140012646421872->addShape(65, 0);\n    ccs.push_back(alignment140012646421872);\n\n    AlignmentConstraint *alignment140012646421968 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140012646421968->addShape(4, 0);\n    ccs.push_back(alignment140012646421968);\n\n    SeparationConstraint *separation140012646540384 = new SeparationConstraint(vpsc::YDIM, alignment140012646421872, alignment140012646422160, 61, false);\n    ccs.push_back(separation140012646540384);\n\n    SeparationConstraint *separation140012646540528 = new SeparationConstraint(vpsc::YDIM, alignment140012646422160, alignment140012646421968, 61, false);\n    ccs.push_back(separation140012646540528);\n\n    AlignmentConstraint *alignment140012646540848 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140012646540848->addShape(51, 0);\n    alignment140012646540848->addShape(55, 0);\n    alignment140012646540848->addShape(34, -171);\n    alignment140012646540848->addShape(122, -221);\n    alignment140012646540848->addShape(35, -96);\n    alignment140012646540848->addShape(123, -146);\n    alignment140012646540848->addShape(42, -21);\n    alignment140012646540848->addShape(129, -71);\n    alignment140012646540848->addShape(90, 21);\n    alignment140012646540848->addShape(147, 71);\n    alignment140012646540848->addShape(36, 96);\n    alignment140012646540848->addShape(124, 146);\n    ccs.push_back(alignment140012646540848);\n\n    AlignmentConstraint *alignment140012646541360 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140012646541360->addShape(34, 0);\n    alignment140012646541360->addShape(122, 0);\n    alignment140012646541360->addShape(35, 0);\n    alignment140012646541360->addShape(123, 0);\n    alignment140012646541360->addShape(42, 0);\n    alignment140012646541360->addShape(129, 0);\n    alignment140012646541360->addShape(90, 0);\n    alignment140012646541360->addShape(147, 0);\n    alignment140012646541360->addShape(36, 0);\n    alignment140012646541360->addShape(124, 0);\n    ccs.push_back(alignment140012646541360);\n\n    AlignmentConstraint *alignment140012646541072 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140012646541072->addShape(51, 0);\n    ccs.push_back(alignment140012646541072);\n\n    AlignmentConstraint *alignment140012646541168 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140012646541168->addShape(55, 0);\n    ccs.push_back(alignment140012646541168);\n\n    SeparationConstraint *separation140012646542480 = new SeparationConstraint(vpsc::XDIM, alignment140012646541072, alignment140012646541360, 87.8, false);\n    ccs.push_back(separation140012646542480);\n\n    SeparationConstraint *separation140012646542608 = new SeparationConstraint(vpsc::XDIM, alignment140012646541360, alignment140012646541168, 214.2, false);\n    ccs.push_back(separation140012646542608);\n\n    AlignmentConstraint *alignment140012645766928 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140012645766928->addShape(52, 0);\n    alignment140012645766928->addShape(54, 0);\n    alignment140012645766928->addShape(29, -96);\n    alignment140012645766928->addShape(117, -146);\n    alignment140012645766928->addShape(30, -21);\n    alignment140012645766928->addShape(118, -71);\n    alignment140012645766928->addShape(43, 21);\n    alignment140012645766928->addShape(130, 71);\n    alignment140012645766928->addShape(91, 96);\n    alignment140012645766928->addShape(148, 146);\n    ccs.push_back(alignment140012645766928);\n\n    AlignmentConstraint *alignment140012646545728 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140012646545728->addShape(29, 0);\n    alignment140012646545728->addShape(117, 0);\n    alignment140012646545728->addShape(30, 0);\n    alignment140012646545728->addShape(118, 0);\n    alignment140012646545728->addShape(43, 0);\n    alignment140012646545728->addShape(130, 0);\n    alignment140012646545728->addShape(91, 0);\n    alignment140012646545728->addShape(148, 0);\n    ccs.push_back(alignment140012646545728);\n\n    AlignmentConstraint *alignment140012646545440 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140012646545440->addShape(52, 0);\n    ccs.push_back(alignment140012646545440);\n\n    AlignmentConstraint *alignment140012646545536 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140012646545536->addShape(54, 0);\n    ccs.push_back(alignment140012646545536);\n\n    SeparationConstraint *separation140012646418672 = new SeparationConstraint(vpsc::XDIM, alignment140012646545440, alignment140012646545728, 76, false);\n    ccs.push_back(separation140012646418672);\n\n    SeparationConstraint *separation140012646418800 = new SeparationConstraint(vpsc::XDIM, alignment140012646545728, alignment140012646545536, 75, false);\n    ccs.push_back(separation140012646418800);\n\n    AlignmentConstraint *alignment140012646418976 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140012646418976->addShape(56, 0);\n    alignment140012646418976->addShape(69, 0);\n    alignment140012646418976->addShape(23, -21);\n    alignment140012646418976->addShape(111, -79);\n    alignment140012646418976->addShape(89, 21);\n    alignment140012646418976->addShape(146, 79);\n    alignment140012646418976->addShape(24, 112);\n    alignment140012646418976->addShape(112, 170);\n    ccs.push_back(alignment140012646418976);\n\n    AlignmentConstraint *alignment140012646419488 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140012646419488->addShape(23, 0);\n    alignment140012646419488->addShape(111, 0);\n    alignment140012646419488->addShape(89, 0);\n    alignment140012646419488->addShape(146, 0);\n    alignment140012646419488->addShape(24, 0);\n    alignment140012646419488->addShape(112, 0);\n    ccs.push_back(alignment140012646419488);\n\n    AlignmentConstraint *alignment140012646419200 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140012646419200->addShape(56, 0);\n    ccs.push_back(alignment140012646419200);\n\n    AlignmentConstraint *alignment140012646419296 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140012646419296->addShape(69, 0);\n    ccs.push_back(alignment140012646419296);\n\n    SeparationConstraint *separation140012646420256 = new SeparationConstraint(vpsc::YDIM, alignment140012646419200, alignment140012646419488, 66, false);\n    ccs.push_back(separation140012646420256);\n\n    SeparationConstraint *separation140012646420384 = new SeparationConstraint(vpsc::YDIM, alignment140012646419488, alignment140012646419296, 66, false);\n    ccs.push_back(separation140012646420384);\n\n    AlignmentConstraint *alignment140012646420560 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140012646420560->addShape(57, 0);\n    alignment140012646420560->addShape(75, 0);\n    alignment140012646420560->addShape(74, -21);\n    alignment140012646420560->addShape(135, -71);\n    alignment140012646420560->addShape(77, 21);\n    alignment140012646420560->addShape(137, 71);\n    ccs.push_back(alignment140012646420560);\n\n    AlignmentConstraint *alignment140012646632608 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140012646632608->addShape(74, 0);\n    alignment140012646632608->addShape(135, 0);\n    alignment140012646632608->addShape(77, 0);\n    alignment140012646632608->addShape(137, 0);\n    ccs.push_back(alignment140012646632608);\n\n    AlignmentConstraint *alignment140012646420784 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140012646420784->addShape(75, 0);\n    ccs.push_back(alignment140012646420784);\n\n    AlignmentConstraint *alignment140012646420880 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140012646420880->addShape(57, 0);\n    ccs.push_back(alignment140012646420880);\n\n    SeparationConstraint *separation140012646633008 = new SeparationConstraint(vpsc::XDIM, alignment140012646420784, alignment140012646632608, 69, false);\n    ccs.push_back(separation140012646633008);\n\n    SeparationConstraint *separation140012646633184 = new SeparationConstraint(vpsc::XDIM, alignment140012646632608, alignment140012646420880, 279, false);\n    ccs.push_back(separation140012646633184);\n\n    AlignmentConstraint *alignment140012646542784 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140012646542784->addShape(58, 0);\n    alignment140012646542784->addShape(87, 0);\n    alignment140012646542784->addShape(80, 107);\n    alignment140012646542784->addShape(139, 49);\n    alignment140012646542784->addShape(81, 149);\n    alignment140012646542784->addShape(140, 207);\n    alignment140012646542784->addShape(83, 240);\n    alignment140012646542784->addShape(142, 298);\n    ccs.push_back(alignment140012646542784);\n\n    AlignmentConstraint *alignment140012646634176 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140012646634176->addShape(80, 0);\n    alignment140012646634176->addShape(139, 0);\n    alignment140012646634176->addShape(81, 0);\n    alignment140012646634176->addShape(140, 0);\n    alignment140012646634176->addShape(83, 0);\n    alignment140012646634176->addShape(142, 0);\n    ccs.push_back(alignment140012646634176);\n\n    AlignmentConstraint *alignment140012646633888 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140012646633888->addShape(87, 0);\n    ccs.push_back(alignment140012646633888);\n\n    AlignmentConstraint *alignment140012646633984 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140012646633984->addShape(58, 0);\n    ccs.push_back(alignment140012646633984);\n\n    SeparationConstraint *separation140012646634784 = new SeparationConstraint(vpsc::YDIM, alignment140012646633888, alignment140012646634176, 83.3333, false);\n    ccs.push_back(separation140012646634784);\n\n    SeparationConstraint *separation140012646634912 = new SeparationConstraint(vpsc::YDIM, alignment140012646634176, alignment140012646633984, 66, false);\n    ccs.push_back(separation140012646634912);\n\n    AlignmentConstraint *alignment140012646635088 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140012646635088->addShape(59, 0);\n    alignment140012646635088->addShape(87, 0);\n    alignment140012646635088->addShape(20, -21);\n    alignment140012646635088->addShape(109, -79);\n    alignment140012646635088->addShape(79, 21);\n    alignment140012646635088->addShape(138, 79);\n    ccs.push_back(alignment140012646635088);\n\n    AlignmentConstraint *alignment140012646635600 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140012646635600->addShape(20, 0);\n    alignment140012646635600->addShape(109, 0);\n    alignment140012646635600->addShape(79, 0);\n    alignment140012646635600->addShape(138, 0);\n    ccs.push_back(alignment140012646635600);\n\n    AlignmentConstraint *alignment140012646635312 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140012646635312->addShape(87, 0);\n    ccs.push_back(alignment140012646635312);\n\n    AlignmentConstraint *alignment140012646635408 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140012646635408->addShape(59, 0);\n    ccs.push_back(alignment140012646635408);\n\n    SeparationConstraint *separation140012646636048 = new SeparationConstraint(vpsc::YDIM, alignment140012646635312, alignment140012646635600, 61, false);\n    ccs.push_back(separation140012646636048);\n\n    SeparationConstraint *separation140012646636224 = new SeparationConstraint(vpsc::YDIM, alignment140012646635600, alignment140012646635408, 61, false);\n    ccs.push_back(separation140012646636224);\n\n    AlignmentConstraint *alignment140012646636400 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140012646636400->addShape(62, 0);\n    alignment140012646636400->addShape(66, 0);\n    alignment140012646636400->addShape(8, -96);\n    alignment140012646636400->addShape(99, -146);\n    alignment140012646636400->addShape(9, -21);\n    alignment140012646636400->addShape(100, -71);\n    alignment140012646636400->addShape(76, 21);\n    alignment140012646636400->addShape(136, 71);\n    alignment140012646636400->addShape(92, 96);\n    alignment140012646636400->addShape(149, 146);\n    ccs.push_back(alignment140012646636400);\n\n    AlignmentConstraint *alignment140012646636912 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140012646636912->addShape(8, 0);\n    alignment140012646636912->addShape(99, 0);\n    alignment140012646636912->addShape(9, 0);\n    alignment140012646636912->addShape(100, 0);\n    alignment140012646636912->addShape(76, 0);\n    alignment140012646636912->addShape(136, 0);\n    alignment140012646636912->addShape(92, 0);\n    alignment140012646636912->addShape(149, 0);\n    ccs.push_back(alignment140012646636912);\n\n    AlignmentConstraint *alignment140012646636624 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140012646636624->addShape(66, 0);\n    ccs.push_back(alignment140012646636624);\n\n    AlignmentConstraint *alignment140012646636720 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140012646636720->addShape(62, 0);\n    ccs.push_back(alignment140012646636720);\n\n    SeparationConstraint *separation140012646637840 = new SeparationConstraint(vpsc::XDIM, alignment140012646636624, alignment140012646636912, 74, false);\n    ccs.push_back(separation140012646637840);\n\n    SeparationConstraint *separation140012646637968 = new SeparationConstraint(vpsc::XDIM, alignment140012646636912, alignment140012646636720, 99, false);\n    ccs.push_back(separation140012646637968);\n\n    AlignmentConstraint *alignment140012646638256 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140012646638256->addShape(11, 0);\n    alignment140012646638256->addShape(102, 0);\n    ccs.push_back(alignment140012646638256);\n\n    AlignmentConstraint *alignment140012646638352 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140012646638352->addShape(11, 0);\n    alignment140012646638352->addShape(10, 0);\n    ccs.push_back(alignment140012646638352);\n\n    AlignmentConstraint *alignment140012646638512 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140012646638512->addShape(102, 0);\n    ccs.push_back(alignment140012646638512);\n\n    AlignmentConstraint *alignment140012646638640 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140012646638640->addShape(12, 0);\n    ccs.push_back(alignment140012646638640);\n\n    AlignmentConstraint *alignment140012646638800 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140012646638800->addShape(14, 0);\n    ccs.push_back(alignment140012646638800);\n\n    AlignmentConstraint *alignment140012646638960 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140012646638960->addShape(22, 0);\n    ccs.push_back(alignment140012646638960);\n\n    AlignmentConstraint *alignment140012646639120 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140012646639120->addShape(28, 0);\n    ccs.push_back(alignment140012646639120);\n\n    AlignmentConstraint *alignment140012646639280 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140012646639280->addShape(31, 0);\n    ccs.push_back(alignment140012646639280);\n\n    AlignmentConstraint *alignment140012646639440 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140012646639440->addShape(32, 0);\n    alignment140012646639440->addShape(120, 0);\n    ccs.push_back(alignment140012646639440);\n\n    AlignmentConstraint *alignment140012646639664 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140012646639664->addShape(32, 0);\n    ccs.push_back(alignment140012646639664);\n\n    AlignmentConstraint *alignment140012646639792 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140012646639792->addShape(120, 0);\n    ccs.push_back(alignment140012646639792);\n\n    AlignmentConstraint *alignment140012646633360 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140012646633360->addShape(37, 0);\n    alignment140012646633360->addShape(38, 0);\n    ccs.push_back(alignment140012646633360);\n\n    AlignmentConstraint *alignment140012646633584 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140012646633584->addShape(40, 0);\n    ccs.push_back(alignment140012646633584);\n\n    AlignmentConstraint *alignment140012646633712 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140012646633712->addShape(48, 0);\n    ccs.push_back(alignment140012646633712);\n\n    AlignmentConstraint *alignment140012646640992 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140012646640992->addShape(33, 0);\n    alignment140012646640992->addShape(121, 0);\n    ccs.push_back(alignment140012646640992);\n\n    AlignmentConstraint *alignment140012646641216 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140012646641216->addShape(33, 0);\n    alignment140012646641216->addShape(51, 0);\n    alignment140012646641216->addShape(52, 0);\n    alignment140012646641216->addShape(44, 0);\n    alignment140012646641216->addShape(45, 0);\n    ccs.push_back(alignment140012646641216);\n\n    AlignmentConstraint *alignment140012646641520 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140012646641520->addShape(121, 0);\n    ccs.push_back(alignment140012646641520);\n\n    AlignmentConstraint *alignment140012646641680 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140012646641680->addShape(53, 0);\n    alignment140012646641680->addShape(54, 0);\n    ccs.push_back(alignment140012646641680);\n\n    AlignmentConstraint *alignment140012646641904 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140012646641904->addShape(60, 0);\n    ccs.push_back(alignment140012646641904);\n\n    AlignmentConstraint *alignment140012646642032 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140012646642032->addShape(61, 0);\n    ccs.push_back(alignment140012646642032);\n\n    AlignmentConstraint *alignment140012646642192 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140012646642192->addShape(62, 0);\n    alignment140012646642192->addShape(25, 0);\n    ccs.push_back(alignment140012646642192);\n\n    AlignmentConstraint *alignment140012646642416 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140012646642416->addShape(67, 0);\n    ccs.push_back(alignment140012646642416);\n\n    AlignmentConstraint *alignment140012646642544 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140012646642544->addShape(13, 0);\n    alignment140012646642544->addShape(68, 0);\n    ccs.push_back(alignment140012646642544);\n\n    AlignmentConstraint *alignment140012646642768 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140012646642768->addShape(72, 0);\n    alignment140012646642768->addShape(71, 0);\n    ccs.push_back(alignment140012646642768);\n\n    AlignmentConstraint *alignment140012646642960 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140012646642960->addShape(70, 0);\n    alignment140012646642960->addShape(73, 0);\n    ccs.push_back(alignment140012646642960);\n\n    AlignmentConstraint *alignment140012646643152 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140012646643152->addShape(4, 0);\n    alignment140012646643152->addShape(75, 0);\n    alignment140012646643152->addShape(65, 0);\n    ccs.push_back(alignment140012646643152);\n\n    AlignmentConstraint *alignment140012646643344 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140012646643344->addShape(47, 0);\n    alignment140012646643344->addShape(82, 0);\n    alignment140012646643344->addShape(46, 0);\n    ccs.push_back(alignment140012646643344);\n\n    AlignmentConstraint *alignment140012646643584 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140012646643584->addShape(84, 0);\n    ccs.push_back(alignment140012646643584);\n\n    AlignmentConstraint *alignment140012646643712 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140012646643712->addShape(86, 0);\n    alignment140012646643712->addShape(85, 0);\n    ccs.push_back(alignment140012646643712);\n\n    AlignmentConstraint *alignment140012646643936 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140012646643936->addShape(26, 0);\n    alignment140012646643936->addShape(114, 0);\n    ccs.push_back(alignment140012646643936);\n\n    AlignmentConstraint *alignment140012646644128 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140012646644128->addShape(0, 0);\n    alignment140012646644128->addShape(94, 0);\n    ccs.push_back(alignment140012646644128);\n\n    AlignmentConstraint *alignment140012646644320 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140012646644320->addShape(27, 0);\n    alignment140012646644320->addShape(115, 0);\n    ccs.push_back(alignment140012646644320);\n\n    AlignmentConstraint *alignment140012646644512 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140012646644512->addShape(16, 0);\n    alignment140012646644512->addShape(106, 0);\n    ccs.push_back(alignment140012646644512);\n\n    AlignmentConstraint *alignment140012646644704 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140012646644704->addShape(19, 0);\n    alignment140012646644704->addShape(108, 0);\n    ccs.push_back(alignment140012646644704);\n\n    AlignmentConstraint *alignment140012646645312 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140012646645312->addShape(41, 0);\n    alignment140012646645312->addShape(128, 0);\n    ccs.push_back(alignment140012646645312);\n\n    AlignmentConstraint *alignment140012646645504 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140012646645504->addShape(18, 0);\n    alignment140012646645504->addShape(107, 0);\n    ccs.push_back(alignment140012646645504);\n\n    AlignmentConstraint *alignment140012646645696 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140012646645696->addShape(26, 0);\n    alignment140012646645696->addShape(57, 0);\n    alignment140012646645696->addShape(0, 0);\n    alignment140012646645696->addShape(27, 0);\n    alignment140012646645696->addShape(16, 0);\n    alignment140012646645696->addShape(49, 0);\n    alignment140012646645696->addShape(55, 0);\n    alignment140012646645696->addShape(63, 0);\n    alignment140012646645696->addShape(87, 0);\n    alignment140012646645696->addShape(69, 0);\n    alignment140012646645696->addShape(50, 0);\n    alignment140012646645696->addShape(58, 0);\n    alignment140012646645696->addShape(59, 0);\n    alignment140012646645696->addShape(19, 0);\n    alignment140012646645696->addShape(56, 0);\n    alignment140012646645696->addShape(41, 0);\n    alignment140012646645696->addShape(18, 0);\n    ccs.push_back(alignment140012646645696);\n\n    AlignmentConstraint *alignment140012646646176 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140012646646176->addShape(114, 0);\n    alignment140012646646176->addShape(107, 0);\n    alignment140012646646176->addShape(108, 0);\n    alignment140012646646176->addShape(94, 0);\n    alignment140012646646176->addShape(106, 0);\n    alignment140012646646176->addShape(115, 0);\n    alignment140012646646176->addShape(128, 0);\n    ccs.push_back(alignment140012646646176);\n\n    AlignmentConstraint *alignment140012646646976 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140012646646976->addShape(7, 0);\n    alignment140012646646976->addShape(98, 0);\n    ccs.push_back(alignment140012646646976);\n\n    AlignmentConstraint *alignment140012646647200 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140012646647200->addShape(64, 0);\n    alignment140012646647200->addShape(93, 0);\n    alignment140012646647200->addShape(66, 0);\n    alignment140012646647200->addShape(7, 0);\n    ccs.push_back(alignment140012646647200);\n\n    AlignmentConstraint *alignment140012646647392 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140012646647392->addShape(98, 0);\n    ccs.push_back(alignment140012646647392);\n\n    SeparationConstraint *separation140012646647968 = new SeparationConstraint(vpsc::XDIM, alignment140012646641216, alignment140012646641520, 58, true);\n    ccs.push_back(separation140012646647968);\n\n    SeparationConstraint *separation140012646650064 = new SeparationConstraint(vpsc::XDIM, alignment140012646639664, alignment140012646639792, -58, true);\n    ccs.push_back(separation140012646650064);\n\n    SeparationConstraint *separation140012646651424 = new SeparationConstraint(vpsc::XDIM, alignment140012646647200, alignment140012646647392, 58, true);\n    ccs.push_back(separation140012646651424);\n\n    SeparationConstraint *separation140012646652304 = new SeparationConstraint(vpsc::XDIM, alignment140012646638352, alignment140012646638512, 58, true);\n    ccs.push_back(separation140012646652304);\n\n    SeparationConstraint *separation140012646653008 = new SeparationConstraint(vpsc::XDIM, alignment140012646645696, alignment140012646646176, 58, true);\n    ccs.push_back(separation140012646653008);\n\n    AlignmentConstraint *alignment140012646653888 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140012646653888->addShape(5, 0);\n    ccs.push_back(alignment140012646653888);\n\n    AlignmentConstraint *alignment140012646654224 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140012646654224->addShape(6, 0);\n    ccs.push_back(alignment140012646654224);\n\n    AlignmentConstraint *alignment140012646654736 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140012646654736->addShape(15, 0);\n    ccs.push_back(alignment140012646654736);\n\n    AlignmentConstraint *alignment140012646651296 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140012646651296->addShape(17, 0);\n    ccs.push_back(alignment140012646651296);\n\n    AlignmentConstraint *alignment140012646655840 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140012646655840->addShape(21, 0);\n    ccs.push_back(alignment140012646655840);\n\n    AlignmentConstraint *alignment140012646656352 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140012646656352->addShape(39, 0);\n    ccs.push_back(alignment140012646656352);\n\n    AlignmentConstraint *alignment140012646656864 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140012646656864->addShape(78, 0);\n    ccs.push_back(alignment140012646656864);\n\n    AlignmentConstraint *alignment140012646657200 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140012646657200->addShape(0, 0);\n    ccs.push_back(alignment140012646657200);\n\n    AlignmentConstraint *alignment140012646657360 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140012646657360->addShape(7, 0);\n    ccs.push_back(alignment140012646657360);\n\n    AlignmentConstraint *alignment140012646657520 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140012646657520->addShape(10, 0);\n    alignment140012646657520->addShape(101, 0);\n    ccs.push_back(alignment140012646657520);\n\n    AlignmentConstraint *alignment140012646657744 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140012646657744->addShape(10, 0);\n    ccs.push_back(alignment140012646657744);\n\n    AlignmentConstraint *alignment140012646657872 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140012646657872->addShape(101, 0);\n    ccs.push_back(alignment140012646657872);\n\n    AlignmentConstraint *alignment140012646658032 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140012646658032->addShape(11, 0);\n    ccs.push_back(alignment140012646658032);\n\n    AlignmentConstraint *alignment140012646658192 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140012646658192->addShape(16, 0);\n    ccs.push_back(alignment140012646658192);\n\n    AlignmentConstraint *alignment140012646658352 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140012646658352->addShape(18, 0);\n    ccs.push_back(alignment140012646658352);\n\n    AlignmentConstraint *alignment140012646658512 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140012646658512->addShape(19, 0);\n    ccs.push_back(alignment140012646658512);\n\n    AlignmentConstraint *alignment140012646658672 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140012646658672->addShape(27, 0);\n    ccs.push_back(alignment140012646658672);\n\n    AlignmentConstraint *alignment140012646658832 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140012646658832->addShape(31, 0);\n    alignment140012646658832->addShape(119, 0);\n    ccs.push_back(alignment140012646658832);\n\n    AlignmentConstraint *alignment140012646659056 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140012646659056->addShape(26, 0);\n    alignment140012646659056->addShape(33, 0);\n    alignment140012646659056->addShape(32, 0);\n    alignment140012646659056->addShape(31, 0);\n    ccs.push_back(alignment140012646659056);\n\n    AlignmentConstraint *alignment140012646659296 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140012646659296->addShape(119, 0);\n    ccs.push_back(alignment140012646659296);\n\n    AlignmentConstraint *alignment140012646659456 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140012646659456->addShape(37, 0);\n    alignment140012646659456->addShape(125, 0);\n    ccs.push_back(alignment140012646659456);\n\n    AlignmentConstraint *alignment140012646659680 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140012646659680->addShape(37, 0);\n    ccs.push_back(alignment140012646659680);\n\n    AlignmentConstraint *alignment140012646659808 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140012646659808->addShape(125, 0);\n    ccs.push_back(alignment140012646659808);\n\n    AlignmentConstraint *alignment140012646659968 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140012646659968->addShape(38, 0);\n    alignment140012646659968->addShape(126, 0);\n    ccs.push_back(alignment140012646659968);\n\n    AlignmentConstraint *alignment140012646660192 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140012646660192->addShape(38, 0);\n    ccs.push_back(alignment140012646660192);\n\n    AlignmentConstraint *alignment140012646660320 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140012646660320->addShape(126, 0);\n    ccs.push_back(alignment140012646660320);\n\n    AlignmentConstraint *alignment140012646660480 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140012646660480->addShape(25, 0);\n    alignment140012646660480->addShape(113, 0);\n    ccs.push_back(alignment140012646660480);\n\n    AlignmentConstraint *alignment140012646660704 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140012646660704->addShape(25, 0);\n    alignment140012646660704->addShape(48, 0);\n    ccs.push_back(alignment140012646660704);\n\n    AlignmentConstraint *alignment140012646660896 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140012646660896->addShape(113, 0);\n    ccs.push_back(alignment140012646660896);\n\n    AlignmentConstraint *alignment140012646663088 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140012646663088->addShape(49, 0);\n    ccs.push_back(alignment140012646663088);\n\n    AlignmentConstraint *alignment140012646663248 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140012646663248->addShape(50, 0);\n    ccs.push_back(alignment140012646663248);\n\n    AlignmentConstraint *alignment140012646663408 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140012646663408->addShape(51, 0);\n    alignment140012646663408->addShape(55, 0);\n    ccs.push_back(alignment140012646663408);\n\n    AlignmentConstraint *alignment140012646639984 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140012646639984->addShape(28, 0);\n    alignment140012646639984->addShape(116, 0);\n    ccs.push_back(alignment140012646639984);\n\n    AlignmentConstraint *alignment140012646640176 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140012646640176->addShape(28, 0);\n    alignment140012646640176->addShape(52, 0);\n    alignment140012646640176->addShape(54, 0);\n    alignment140012646640176->addShape(56, 0);\n    ccs.push_back(alignment140012646640176);\n\n    AlignmentConstraint *alignment140012646640416 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140012646640416->addShape(116, 0);\n    ccs.push_back(alignment140012646640416);\n\n    AlignmentConstraint *alignment140012646640576 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140012646640576->addShape(58, 0);\n    ccs.push_back(alignment140012646640576);\n\n    AlignmentConstraint *alignment140012646640736 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140012646640736->addShape(62, 0);\n    alignment140012646640736->addShape(4, 0);\n    alignment140012646640736->addShape(66, 0);\n    ccs.push_back(alignment140012646640736);\n\n    AlignmentConstraint *alignment140012646439808 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140012646439808->addShape(14, 0);\n    alignment140012646439808->addShape(105, 0);\n    ccs.push_back(alignment140012646439808);\n\n    AlignmentConstraint *alignment140012646439968 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140012646439968->addShape(13, 0);\n    alignment140012646439968->addShape(104, 0);\n    ccs.push_back(alignment140012646439968);\n\n    AlignmentConstraint *alignment140012646440160 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140012646440160->addShape(12, 0);\n    alignment140012646440160->addShape(103, 0);\n    ccs.push_back(alignment140012646440160);\n\n    AlignmentConstraint *alignment140012646440352 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140012646440352->addShape(64, 0);\n    alignment140012646440352->addShape(14, 0);\n    alignment140012646440352->addShape(13, 0);\n    alignment140012646440352->addShape(60, 0);\n    alignment140012646440352->addShape(63, 0);\n    alignment140012646440352->addShape(65, 0);\n    alignment140012646440352->addShape(12, 0);\n    alignment140012646440352->addShape(67, 0);\n    ccs.push_back(alignment140012646440352);\n\n    AlignmentConstraint *alignment140012646440800 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140012646440800->addShape(105, 0);\n    alignment140012646440800->addShape(103, 0);\n    alignment140012646440800->addShape(104, 0);\n    ccs.push_back(alignment140012646440800);\n\n    AlignmentConstraint *alignment140012646441024 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140012646441024->addShape(40, 0);\n    alignment140012646441024->addShape(127, 0);\n    ccs.push_back(alignment140012646441024);\n\n    AlignmentConstraint *alignment140012646441216 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140012646441216->addShape(61, 0);\n    alignment140012646441216->addShape(40, 0);\n    alignment140012646441216->addShape(68, 0);\n    ccs.push_back(alignment140012646441216);\n\n    AlignmentConstraint *alignment140012646441456 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140012646441456->addShape(127, 0);\n    ccs.push_back(alignment140012646441456);\n\n    AlignmentConstraint *alignment140012646441584 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140012646441584->addShape(69, 0);\n    ccs.push_back(alignment140012646441584);\n\n    AlignmentConstraint *alignment140012646441744 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140012646441744->addShape(46, 0);\n    alignment140012646441744->addShape(133, 0);\n    ccs.push_back(alignment140012646441744);\n\n    AlignmentConstraint *alignment140012646441968 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140012646441968->addShape(44, 0);\n    alignment140012646441968->addShape(131, 0);\n    ccs.push_back(alignment140012646441968);\n\n    AlignmentConstraint *alignment140012646442160 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140012646442160->addShape(71, 0);\n    alignment140012646442160->addShape(70, 0);\n    alignment140012646442160->addShape(46, 0);\n    alignment140012646442160->addShape(44, 0);\n    ccs.push_back(alignment140012646442160);\n\n    AlignmentConstraint *alignment140012646442400 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140012646442400->addShape(131, 0);\n    alignment140012646442400->addShape(133, 0);\n    ccs.push_back(alignment140012646442400);\n\n    AlignmentConstraint *alignment140012646442624 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140012646442624->addShape(47, 0);\n    alignment140012646442624->addShape(134, 0);\n    ccs.push_back(alignment140012646442624);\n\n    AlignmentConstraint *alignment140012646442816 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140012646442816->addShape(45, 0);\n    alignment140012646442816->addShape(132, 0);\n    ccs.push_back(alignment140012646442816);\n\n    AlignmentConstraint *alignment140012646443008 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140012646443008->addShape(72, 0);\n    alignment140012646443008->addShape(47, 0);\n    alignment140012646443008->addShape(45, 0);\n    alignment140012646443008->addShape(73, 0);\n    ccs.push_back(alignment140012646443008);\n\n    AlignmentConstraint *alignment140012646443248 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140012646443248->addShape(132, 0);\n    alignment140012646443248->addShape(134, 0);\n    ccs.push_back(alignment140012646443248);\n\n    AlignmentConstraint *alignment140012646443472 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140012646443472->addShape(75, 0);\n    alignment140012646443472->addShape(57, 0);\n    ccs.push_back(alignment140012646443472);\n\n    AlignmentConstraint *alignment140012646443664 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140012646443664->addShape(82, 0);\n    alignment140012646443664->addShape(141, 0);\n    ccs.push_back(alignment140012646443664);\n\n    AlignmentConstraint *alignment140012646443856 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140012646443856->addShape(82, 0);\n    ccs.push_back(alignment140012646443856);\n\n    AlignmentConstraint *alignment140012646443984 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140012646443984->addShape(141, 0);\n    ccs.push_back(alignment140012646443984);\n\n    AlignmentConstraint *alignment140012646444144 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140012646444144->addShape(41, 0);\n    alignment140012646444144->addShape(84, 0);\n    ccs.push_back(alignment140012646444144);\n\n    AlignmentConstraint *alignment140012646444368 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140012646444368->addShape(85, 0);\n    alignment140012646444368->addShape(143, 0);\n    ccs.push_back(alignment140012646444368);\n\n    AlignmentConstraint *alignment140012646444560 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140012646444560->addShape(85, 0);\n    ccs.push_back(alignment140012646444560);\n\n    AlignmentConstraint *alignment140012646444688 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140012646444688->addShape(143, 0);\n    ccs.push_back(alignment140012646444688);\n\n    AlignmentConstraint *alignment140012646444848 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140012646444848->addShape(86, 0);\n    alignment140012646444848->addShape(144, 0);\n    ccs.push_back(alignment140012646444848);\n\n    AlignmentConstraint *alignment140012646445072 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140012646445072->addShape(86, 0);\n    alignment140012646445072->addShape(59, 0);\n    ccs.push_back(alignment140012646445072);\n\n    AlignmentConstraint *alignment140012646445264 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140012646445264->addShape(144, 0);\n    ccs.push_back(alignment140012646445264);\n\n    AlignmentConstraint *alignment140012646445392 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140012646445392->addShape(22, 0);\n    alignment140012646445392->addShape(110, 0);\n    ccs.push_back(alignment140012646445392);\n\n    AlignmentConstraint *alignment140012646445616 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140012646445616->addShape(87, 0);\n    alignment140012646445616->addShape(53, 0);\n    alignment140012646445616->addShape(22, 0);\n    ccs.push_back(alignment140012646445616);\n\n    AlignmentConstraint *alignment140012646445856 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140012646445856->addShape(110, 0);\n    ccs.push_back(alignment140012646445856);\n\n    AlignmentConstraint *alignment140012646445984 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140012646445984->addShape(93, 0);\n    ccs.push_back(alignment140012646445984);\n\n    SeparationConstraint *separation140012646446144 = new SeparationConstraint(vpsc::YDIM, alignment140012646660192, alignment140012646660320, -50, true);\n    ccs.push_back(separation140012646446144);\n\n    SeparationConstraint *separation140012646446672 = new SeparationConstraint(vpsc::YDIM, alignment140012646659680, alignment140012646659808, -50, true);\n    ccs.push_back(separation140012646446672);\n\n    SeparationConstraint *separation140012646447200 = new SeparationConstraint(vpsc::YDIM, alignment140012646660704, alignment140012646660896, -50, true);\n    ccs.push_back(separation140012646447200);\n\n    SeparationConstraint *separation140012646447728 = new SeparationConstraint(vpsc::YDIM, alignment140012646659056, alignment140012646659296, -50, true);\n    ccs.push_back(separation140012646447728);\n\n    SeparationConstraint *separation140012646448080 = new SeparationConstraint(vpsc::YDIM, alignment140012646640176, alignment140012646640416, -50, true);\n    ccs.push_back(separation140012646448080);\n\n    SeparationConstraint *separation140012646448608 = new SeparationConstraint(vpsc::YDIM, alignment140012646442160, alignment140012646442400, -50, true);\n    ccs.push_back(separation140012646448608);\n\n    SeparationConstraint *separation140012646449136 = new SeparationConstraint(vpsc::YDIM, alignment140012646443008, alignment140012646443248, -50, true);\n    ccs.push_back(separation140012646449136);\n\n    SeparationConstraint *separation140012646449664 = new SeparationConstraint(vpsc::YDIM, alignment140012646445616, alignment140012646445856, -50, true);\n    ccs.push_back(separation140012646449664);\n\n    SeparationConstraint *separation140012646450192 = new SeparationConstraint(vpsc::YDIM, alignment140012646445072, alignment140012646445264, -50, true);\n    ccs.push_back(separation140012646450192);\n\n    SeparationConstraint *separation140012646450896 = new SeparationConstraint(vpsc::YDIM, alignment140012646444560, alignment140012646444688, -50, true);\n    ccs.push_back(separation140012646450896);\n\n    SeparationConstraint *separation140012646655072 = new SeparationConstraint(vpsc::YDIM, alignment140012646443856, alignment140012646443984, -50, true);\n    ccs.push_back(separation140012646655072);\n\n    SeparationConstraint *separation140012646453520 = new SeparationConstraint(vpsc::YDIM, alignment140012646440352, alignment140012646440800, -50, true);\n    ccs.push_back(separation140012646453520);\n\n    SeparationConstraint *separation140012646453872 = new SeparationConstraint(vpsc::YDIM, alignment140012646657744, alignment140012646657872, 50, true);\n    ccs.push_back(separation140012646453872);\n\n    SeparationConstraint *separation140012646454224 = new SeparationConstraint(vpsc::YDIM, alignment140012646441216, alignment140012646441456, -50, true);\n    ccs.push_back(separation140012646454224);\n\n    AlignmentConstraint *alignment140012646454928 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140012646454928->addShape(5, 0);\n    ccs.push_back(alignment140012646454928);\n\n    AlignmentConstraint *alignment140012646455440 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140012646455440->addShape(6, 0);\n    ccs.push_back(alignment140012646455440);\n\n    AlignmentConstraint *alignment140012646455776 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140012646455776->addShape(15, 0);\n    ccs.push_back(alignment140012646455776);\n\n    AlignmentConstraint *alignment140012646456288 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140012646456288->addShape(17, 0);\n    ccs.push_back(alignment140012646456288);\n\n    AlignmentConstraint *alignment140012646456800 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140012646456800->addShape(21, 0);\n    ccs.push_back(alignment140012646456800);\n\n    AlignmentConstraint *alignment140012646457312 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140012646457312->addShape(39, 0);\n    ccs.push_back(alignment140012646457312);\n\n    AlignmentConstraint *alignment140012646457648 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140012646457648->addShape(78, 0);\n    ccs.push_back(alignment140012646457648);\n\n    AlignmentConstraint *alignment140012646458160 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140012646458160->addShape(5, 0);\n    alignment140012646458160->addShape(150, -80.5);\n    alignment140012646458160->addShape(151, -80.5);\n    alignment140012646458160->addShape(152, -19.5);\n    alignment140012646458160->addShape(153, 20.5);\n    ccs.push_back(alignment140012646458160);\n\n    AlignmentConstraint *alignment140012646458256 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140012646458256->addShape(5, 0);\n    alignment140012646458256->addShape(150, -19.5);\n    alignment140012646458256->addShape(151, 20.5);\n    alignment140012646458256->addShape(152, 159);\n    alignment140012646458256->addShape(153, 159);\n    ccs.push_back(alignment140012646458256);\n\n    AlignmentConstraint *alignment140012646458928 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140012646458928->addShape(6, 0);\n    alignment140012646458928->addShape(154, 0.5);\n    ccs.push_back(alignment140012646458928);\n\n    AlignmentConstraint *alignment140012646459024 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140012646459024->addShape(6, 0);\n    alignment140012646459024->addShape(154, 57.5);\n    ccs.push_back(alignment140012646459024);\n\n    AlignmentConstraint *alignment140012646459344 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140012646459344->addShape(17, 0);\n    alignment140012646459344->addShape(155, 74);\n    alignment140012646459344->addShape(156, 74);\n    ccs.push_back(alignment140012646459344);\n\n    AlignmentConstraint *alignment140012646459440 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140012646459440->addShape(17, 0);\n    alignment140012646459440->addShape(155, -19.5);\n    alignment140012646459440->addShape(156, 20.5);\n    ccs.push_back(alignment140012646459440);\n\n    AlignmentConstraint *alignment140012646459728 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140012646459728->addShape(21, 0);\n    alignment140012646459728->addShape(157, 127);\n    ccs.push_back(alignment140012646459728);\n\n    AlignmentConstraint *alignment140012646459824 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140012646459824->addShape(21, 0);\n    alignment140012646459824->addShape(157, 0.5);\n    ccs.push_back(alignment140012646459824);\n\n    AlignmentConstraint *alignment140012646460112 = new AlignmentConstraint(vpsc::XDIM, 0);\n    alignment140012646460112->addShape(78, 0);\n    alignment140012646460112->addShape(158, 0.5);\n    ccs.push_back(alignment140012646460112);\n\n    AlignmentConstraint *alignment140012646460208 = new AlignmentConstraint(vpsc::YDIM, 0);\n    alignment140012646460208->addShape(78, 0);\n    alignment140012646460208->addShape(158, -52);\n    ccs.push_back(alignment140012646460208);\n\n    RootCluster *cluster140012646460960 = new RootCluster();\n    cluster140012646460960->addChildNode(0);\n    cluster140012646460960->addChildNode(1);\n    cluster140012646460960->addChildNode(2);\n    cluster140012646460960->addChildNode(3);\n    cluster140012646460960->addChildNode(4);\n    cluster140012646460960->addChildNode(7);\n    cluster140012646460960->addChildNode(8);\n    cluster140012646460960->addChildNode(9);\n    cluster140012646460960->addChildNode(10);\n    cluster140012646460960->addChildNode(11);\n    cluster140012646460960->addChildNode(12);\n    cluster140012646460960->addChildNode(13);\n    cluster140012646460960->addChildNode(14);\n    cluster140012646460960->addChildNode(16);\n    cluster140012646460960->addChildNode(18);\n    cluster140012646460960->addChildNode(19);\n    cluster140012646460960->addChildNode(20);\n    cluster140012646460960->addChildNode(22);\n    cluster140012646460960->addChildNode(23);\n    cluster140012646460960->addChildNode(24);\n    cluster140012646460960->addChildNode(25);\n    cluster140012646460960->addChildNode(26);\n    cluster140012646460960->addChildNode(27);\n    cluster140012646460960->addChildNode(28);\n    cluster140012646460960->addChildNode(29);\n    cluster140012646460960->addChildNode(30);\n    cluster140012646460960->addChildNode(31);\n    cluster140012646460960->addChildNode(32);\n    cluster140012646460960->addChildNode(33);\n    cluster140012646460960->addChildNode(34);\n    cluster140012646460960->addChildNode(35);\n    cluster140012646460960->addChildNode(36);\n    cluster140012646460960->addChildNode(37);\n    cluster140012646460960->addChildNode(38);\n    cluster140012646460960->addChildNode(40);\n    cluster140012646460960->addChildNode(41);\n    cluster140012646460960->addChildNode(42);\n    cluster140012646460960->addChildNode(43);\n    cluster140012646460960->addChildNode(44);\n    cluster140012646460960->addChildNode(45);\n    cluster140012646460960->addChildNode(46);\n    cluster140012646460960->addChildNode(47);\n    cluster140012646460960->addChildNode(48);\n    cluster140012646460960->addChildNode(49);\n    cluster140012646460960->addChildNode(50);\n    cluster140012646460960->addChildNode(51);\n    cluster140012646460960->addChildNode(52);\n    cluster140012646460960->addChildNode(53);\n    cluster140012646460960->addChildNode(54);\n    cluster140012646460960->addChildNode(55);\n    cluster140012646460960->addChildNode(56);\n    cluster140012646460960->addChildNode(57);\n    cluster140012646460960->addChildNode(58);\n    cluster140012646460960->addChildNode(59);\n    cluster140012646460960->addChildNode(60);\n    cluster140012646460960->addChildNode(61);\n    cluster140012646460960->addChildNode(62);\n    cluster140012646460960->addChildNode(63);\n    cluster140012646460960->addChildNode(64);\n    cluster140012646460960->addChildNode(65);\n    cluster140012646460960->addChildNode(66);\n    cluster140012646460960->addChildNode(67);\n    cluster140012646460960->addChildNode(68);\n    cluster140012646460960->addChildNode(69);\n    cluster140012646460960->addChildNode(70);\n    cluster140012646460960->addChildNode(71);\n    cluster140012646460960->addChildNode(72);\n    cluster140012646460960->addChildNode(73);\n    cluster140012646460960->addChildNode(74);\n    cluster140012646460960->addChildNode(75);\n    cluster140012646460960->addChildNode(76);\n    cluster140012646460960->addChildNode(77);\n    cluster140012646460960->addChildNode(79);\n    cluster140012646460960->addChildNode(80);\n    cluster140012646460960->addChildNode(81);\n    cluster140012646460960->addChildNode(82);\n    cluster140012646460960->addChildNode(83);\n    cluster140012646460960->addChildNode(84);\n    cluster140012646460960->addChildNode(85);\n    cluster140012646460960->addChildNode(86);\n    cluster140012646460960->addChildNode(87);\n    cluster140012646460960->addChildNode(88);\n    cluster140012646460960->addChildNode(89);\n    cluster140012646460960->addChildNode(90);\n    cluster140012646460960->addChildNode(91);\n    cluster140012646460960->addChildNode(92);\n    cluster140012646460960->addChildNode(93);\n    cluster140012646460960->addChildNode(94);\n    cluster140012646460960->addChildNode(95);\n    cluster140012646460960->addChildNode(96);\n    cluster140012646460960->addChildNode(97);\n    cluster140012646460960->addChildNode(98);\n    cluster140012646460960->addChildNode(99);\n    cluster140012646460960->addChildNode(100);\n    cluster140012646460960->addChildNode(101);\n    cluster140012646460960->addChildNode(102);\n    cluster140012646460960->addChildNode(103);\n    cluster140012646460960->addChildNode(104);\n    cluster140012646460960->addChildNode(105);\n    cluster140012646460960->addChildNode(106);\n    cluster140012646460960->addChildNode(107);\n    cluster140012646460960->addChildNode(108);\n    cluster140012646460960->addChildNode(109);\n    cluster140012646460960->addChildNode(110);\n    cluster140012646460960->addChildNode(111);\n    cluster140012646460960->addChildNode(112);\n    cluster140012646460960->addChildNode(113);\n    cluster140012646460960->addChildNode(114);\n    cluster140012646460960->addChildNode(115);\n    cluster140012646460960->addChildNode(116);\n    cluster140012646460960->addChildNode(117);\n    cluster140012646460960->addChildNode(118);\n    cluster140012646460960->addChildNode(119);\n    cluster140012646460960->addChildNode(120);\n    cluster140012646460960->addChildNode(121);\n    cluster140012646460960->addChildNode(122);\n    cluster140012646460960->addChildNode(123);\n    cluster140012646460960->addChildNode(124);\n    cluster140012646460960->addChildNode(125);\n    cluster140012646460960->addChildNode(126);\n    cluster140012646460960->addChildNode(127);\n    cluster140012646460960->addChildNode(128);\n    cluster140012646460960->addChildNode(129);\n    cluster140012646460960->addChildNode(130);\n    cluster140012646460960->addChildNode(131);\n    cluster140012646460960->addChildNode(132);\n    cluster140012646460960->addChildNode(133);\n    cluster140012646460960->addChildNode(134);\n    cluster140012646460960->addChildNode(135);\n    cluster140012646460960->addChildNode(136);\n    cluster140012646460960->addChildNode(137);\n    cluster140012646460960->addChildNode(138);\n    cluster140012646460960->addChildNode(139);\n    cluster140012646460960->addChildNode(140);\n    cluster140012646460960->addChildNode(141);\n    cluster140012646460960->addChildNode(142);\n    cluster140012646460960->addChildNode(143);\n    cluster140012646460960->addChildNode(144);\n    cluster140012646460960->addChildNode(145);\n    cluster140012646460960->addChildNode(146);\n    cluster140012646460960->addChildNode(147);\n    cluster140012646460960->addChildNode(148);\n    cluster140012646460960->addChildNode(149);\n    RectangularCluster *cluster140012646461408 = new RectangularCluster();\n    cluster140012646461408->addChildNode(150);\n    cluster140012646461408->addChildNode(151);\n    cluster140012646461408->addChildNode(152);\n    cluster140012646461408->addChildNode(153);\n    cluster140012646460960->addChildCluster(cluster140012646461408);\n    RectangularCluster *cluster140012646461792 = new RectangularCluster();\n    cluster140012646461792->addChildNode(154);\n    cluster140012646460960->addChildCluster(cluster140012646461792);\n    RectangularCluster *cluster140012646462176 = new RectangularCluster();\n    cluster140012646460960->addChildCluster(cluster140012646462176);\n    RectangularCluster *cluster140012646462496 = new RectangularCluster();\n    cluster140012646462496->addChildNode(155);\n    cluster140012646462496->addChildNode(156);\n    cluster140012646460960->addChildCluster(cluster140012646462496);\n    RectangularCluster *cluster140012646462816 = new RectangularCluster();\n    cluster140012646462816->addChildNode(157);\n    cluster140012646460960->addChildCluster(cluster140012646462816);\n    RectangularCluster *cluster140012646463136 = new RectangularCluster();\n    cluster140012646460960->addChildCluster(cluster140012646463136);\n    RectangularCluster *cluster140012646463456 = new RectangularCluster();\n    cluster140012646463456->addChildNode(158);\n    cluster140012646460960->addChildCluster(cluster140012646463456);\n    cola::VariableIDMap idMap;\n    idMap.addMappingForVariable(0, 1);\n    idMap.addMappingForVariable(1, 2);\n    idMap.addMappingForVariable(2, 3);\n    idMap.addMappingForVariable(3, 4);\n    idMap.addMappingForVariable(4, 5);\n    idMap.addMappingForVariable(5, 6);\n    idMap.addMappingForVariable(6, 7);\n    idMap.addMappingForVariable(7, 8);\n    idMap.addMappingForVariable(8, 9);\n    idMap.addMappingForVariable(9, 10);\n    idMap.addMappingForVariable(10, 11);\n    idMap.addMappingForVariable(11, 12);\n    idMap.addMappingForVariable(12, 13);\n    idMap.addMappingForVariable(13, 14);\n    idMap.addMappingForVariable(14, 15);\n    idMap.addMappingForVariable(15, 16);\n    idMap.addMappingForVariable(16, 17);\n    idMap.addMappingForVariable(17, 18);\n    idMap.addMappingForVariable(18, 19);\n    idMap.addMappingForVariable(19, 20);\n    idMap.addMappingForVariable(20, 21);\n    idMap.addMappingForVariable(21, 22);\n    idMap.addMappingForVariable(22, 23);\n    idMap.addMappingForVariable(23, 24);\n    idMap.addMappingForVariable(24, 25);\n    idMap.addMappingForVariable(25, 26);\n    idMap.addMappingForVariable(26, 27);\n    idMap.addMappingForVariable(27, 28);\n    idMap.addMappingForVariable(28, 29);\n    idMap.addMappingForVariable(29, 30);\n    idMap.addMappingForVariable(30, 31);\n    idMap.addMappingForVariable(31, 32);\n    idMap.addMappingForVariable(32, 33);\n    idMap.addMappingForVariable(33, 34);\n    idMap.addMappingForVariable(34, 35);\n    idMap.addMappingForVariable(35, 36);\n    idMap.addMappingForVariable(36, 37);\n    idMap.addMappingForVariable(37, 38);\n    idMap.addMappingForVariable(38, 39);\n    idMap.addMappingForVariable(39, 40);\n    idMap.addMappingForVariable(40, 41);\n    idMap.addMappingForVariable(41, 42);\n    idMap.addMappingForVariable(42, 43);\n    idMap.addMappingForVariable(43, 44);\n    idMap.addMappingForVariable(44, 45);\n    idMap.addMappingForVariable(45, 46);\n    idMap.addMappingForVariable(46, 47);\n    idMap.addMappingForVariable(47, 48);\n    idMap.addMappingForVariable(48, 49);\n    idMap.addMappingForVariable(49, 50);\n    idMap.addMappingForVariable(50, 51);\n    idMap.addMappingForVariable(51, 52);\n    idMap.addMappingForVariable(52, 53);\n    idMap.addMappingForVariable(53, 54);\n    idMap.addMappingForVariable(54, 55);\n    idMap.addMappingForVariable(55, 56);\n    idMap.addMappingForVariable(56, 57);\n    idMap.addMappingForVariable(57, 58);\n    idMap.addMappingForVariable(58, 59);\n    idMap.addMappingForVariable(59, 60);\n    idMap.addMappingForVariable(60, 61);\n    idMap.addMappingForVariable(61, 62);\n    idMap.addMappingForVariable(62, 63);\n    idMap.addMappingForVariable(63, 64);\n    idMap.addMappingForVariable(64, 65);\n    idMap.addMappingForVariable(65, 66);\n    idMap.addMappingForVariable(66, 67);\n    idMap.addMappingForVariable(67, 68);\n    idMap.addMappingForVariable(68, 69);\n    idMap.addMappingForVariable(69, 70);\n    idMap.addMappingForVariable(70, 71);\n    idMap.addMappingForVariable(71, 72);\n    idMap.addMappingForVariable(72, 73);\n    idMap.addMappingForVariable(73, 74);\n    idMap.addMappingForVariable(74, 75);\n    idMap.addMappingForVariable(75, 76);\n    idMap.addMappingForVariable(76, 77);\n    idMap.addMappingForVariable(77, 78);\n    idMap.addMappingForVariable(78, 79);\n    idMap.addMappingForVariable(79, 80);\n    idMap.addMappingForVariable(80, 81);\n    idMap.addMappingForVariable(81, 82);\n    idMap.addMappingForVariable(82, 83);\n    idMap.addMappingForVariable(83, 84);\n    idMap.addMappingForVariable(84, 85);\n    idMap.addMappingForVariable(85, 86);\n    idMap.addMappingForVariable(86, 87);\n    idMap.addMappingForVariable(87, 88);\n    idMap.addMappingForVariable(88, 89);\n    idMap.addMappingForVariable(89, 90);\n    idMap.addMappingForVariable(90, 91);\n    idMap.addMappingForVariable(91, 92);\n    idMap.addMappingForVariable(92, 93);\n    idMap.addMappingForVariable(93, 94);\n    idMap.addMappingForVariable(94, 95);\n    idMap.addMappingForVariable(95, 96);\n    idMap.addMappingForVariable(96, 97);\n    idMap.addMappingForVariable(97, 98);\n    idMap.addMappingForVariable(98, 99);\n    idMap.addMappingForVariable(99, 100);\n    idMap.addMappingForVariable(100, 101);\n    idMap.addMappingForVariable(101, 102);\n    idMap.addMappingForVariable(102, 103);\n    idMap.addMappingForVariable(103, 104);\n    idMap.addMappingForVariable(104, 105);\n    idMap.addMappingForVariable(105, 106);\n    idMap.addMappingForVariable(106, 107);\n    idMap.addMappingForVariable(107, 108);\n    idMap.addMappingForVariable(108, 109);\n    idMap.addMappingForVariable(109, 110);\n    idMap.addMappingForVariable(110, 111);\n    idMap.addMappingForVariable(111, 112);\n    idMap.addMappingForVariable(112, 113);\n    idMap.addMappingForVariable(113, 114);\n    idMap.addMappingForVariable(114, 115);\n    idMap.addMappingForVariable(115, 116);\n    idMap.addMappingForVariable(116, 117);\n    idMap.addMappingForVariable(117, 118);\n    idMap.addMappingForVariable(118, 119);\n    idMap.addMappingForVariable(119, 120);\n    idMap.addMappingForVariable(120, 121);\n    idMap.addMappingForVariable(121, 122);\n    idMap.addMappingForVariable(122, 123);\n    idMap.addMappingForVariable(123, 124);\n    idMap.addMappingForVariable(124, 125);\n    idMap.addMappingForVariable(125, 126);\n    idMap.addMappingForVariable(126, 127);\n    idMap.addMappingForVariable(127, 128);\n    idMap.addMappingForVariable(128, 129);\n    idMap.addMappingForVariable(129, 130);\n    idMap.addMappingForVariable(130, 131);\n    idMap.addMappingForVariable(131, 132);\n    idMap.addMappingForVariable(132, 133);\n    idMap.addMappingForVariable(133, 134);\n    idMap.addMappingForVariable(134, 135);\n    idMap.addMappingForVariable(135, 136);\n    idMap.addMappingForVariable(136, 137);\n    idMap.addMappingForVariable(137, 138);\n    idMap.addMappingForVariable(138, 139);\n    idMap.addMappingForVariable(139, 140);\n    idMap.addMappingForVariable(140, 141);\n    idMap.addMappingForVariable(141, 142);\n    idMap.addMappingForVariable(142, 143);\n    idMap.addMappingForVariable(143, 144);\n    idMap.addMappingForVariable(144, 145);\n    idMap.addMappingForVariable(145, 146);\n    idMap.addMappingForVariable(146, 147);\n    idMap.addMappingForVariable(147, 148);\n    idMap.addMappingForVariable(148, 149);\n    idMap.addMappingForVariable(149, 150);\n    idMap.addMappingForVariable(150, 151);\n    idMap.addMappingForVariable(151, 152);\n    idMap.addMappingForVariable(152, 153);\n    idMap.addMappingForVariable(153, 154);\n    idMap.addMappingForVariable(154, 155);\n    idMap.addMappingForVariable(155, 156);\n    idMap.addMappingForVariable(156, 157);\n    idMap.addMappingForVariable(157, 158);\n    idMap.addMappingForVariable(158, 159);\n    \n    router->processTransaction();\n    router->outputInstanceToSVG(\"output/orthogonalOpt-01\");\n    \n    topology::AvoidTopologyAddon topologyAddon(rs, ccs, cluster140012646460960, idMap);\n    router->setTopologyAddon(&topologyAddon);\n    router->processTransaction();\n    router->outputInstanceToSVG(\"output/orthogonalOpt-02\");\n\n    delete cluster140012646460960;\n    for_each(rs.begin(), rs.end(), cola::delete_object());\n    for_each(ccs.begin(), ccs.end(), cola::delete_object());\n\n    delete router;\n    return 0;\n};\n"
  },
  {
    "path": "cola/libtopology/tests/output/README.txt",
    "content": "This directory is used to for output debug svg files from the test cases.\n"
  },
  {
    "path": "cola/libtopology/tests/simple_bend.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libtopology - Classes used in generating and managing topology constraints.\n *\n * Copyright (C) 2007-2008  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library in the file LICENSE; if not, \n * write to the Free Software Foundation, Inc., 59 Temple Place, \n * Suite 330, Boston, MA  02111-1307  USA\n *\n * Authors:\n *   Tim Dwyer <tgdwyer@gmail.com>\n*/\n\n/**\n * Test of topology conserving constraints.  Various configurations of a graph\n * with three nodes and one edge.\n *\n * \\file simple_bend.cpp\n * \\author Tim Dwyer\n * \\date Dec 2007\n */\n#include <libvpsc/rectangle.h>\n#include <libtopology/topology_constraints.h>\n#include <libcola/cola.h>\n#include <libcola/output_svg.h>\n#include <libvpsc/variable.h>\n#include <libvpsc/constraint.h>\n#include <vector>\n#include <iostream>\n#include <sstream>\nusing namespace std;\nusing namespace topology;\n#include \"test.h\"\nvoid test1(Nodes& vs, EdgePoints& ps, cola::DesiredPositionsInDim& d, string& name) {\n    name=string(\"test1\");\n    addNode(vs,400,170,50,30);\n    addNode(vs,420,65,50,30);\n    addNode(vs,280,220,50,30);\n    addToPath(ps,vs[2],EdgePoint::RectIntersect(4));\n    addToPath(ps,vs[1],EdgePoint::RectIntersect(4));\n    d.push_back(make_pair(0,361.000000));\n}\nvoid test2(Nodes& vs, EdgePoints& ps, cola::DesiredPositionsInDim& d, string& name) {\n    name=string(\"test2\");\n    addNode(vs,0,0,54,34);\n    addNode(vs,100,100,54,34);\n    addNode(vs,0,50,54,34);\n    addToPath(ps,vs[0],EdgePoint::RectIntersect(4));\n    addToPath(ps,vs[1],EdgePoint::RectIntersect(4));\n    d.push_back(make_pair(2,150));\n}\nvoid test3(Nodes& vs, EdgePoints& ps, cola::DesiredPositionsInDim& d, string& name) {\n    name=string(\"test3\");\n    addNode(vs,0,0,54,34);\n    addNode(vs,100,100,54,34);\n    addNode(vs,100,50,54,34);\n    addToPath(ps,vs[0],EdgePoint::RectIntersect(4));\n    addToPath(ps,vs[1],EdgePoint::RectIntersect(4));\n    d.push_back(make_pair(2,0));\n}\nvoid test4(Nodes& vs, EdgePoints& ps, cola::DesiredPositionsInDim& d, string& name) {\n    name=string(\"test4\");\n    //double gradient[]={0,3.03652e-19,-3.03652e-19,}\n    addNode(vs,455.950000,324.166331,54.000000,34.000000);\n    addNode(vs,416.252794,290.166331,54.000000,34.000000);\n    addNode(vs,620.342448,342.224389,54.000000,34.000000);\n    addToPath(ps,vs[2],(topology::EdgePoint::RectIntersect)4);\n    addToPath(ps,vs[0],(topology::EdgePoint::RectIntersect)1);\n    addToPath(ps,vs[1],(topology::EdgePoint::RectIntersect)4);\n    d.push_back(make_pair(0,339.000000));\n}\n//\n// more challenging tests:\n//\n//  - zero length edges\n//  - edges parallel to scan line\n//\n// 4 rectangles arranged and touching two above two below.  Additional\n// rectangle on top and another below connected with an edge running between\n// the other four.  Move the rectangles so that they slide across each other.\n//  ---\n//  | |\n//  ---\n//    \\                                                                     .\n//  ---|---\n//  |  |  |\n//  ---|---\n//   ---|---\n//   |  |  |->\n//   ---|---\n//      \\                                                                   .\n//     -----\n//     |   |\n//     -----\nvoid test5(Nodes& vs, EdgePoints& ps, cola::DesiredPositionsInDim& d, string& name) {\n    name=string(\"test5\");\n    //double gradient[]={0,3.03652e-19,-3.03652e-19,}\n    addNode(vs,0,0,10,10);\n    addNode(vs,40,50,10,10);\n    addNode(vs,10,20,10,10);\n    addNode(vs,20,20,10,10);\n    addNode(vs,15,30,10,10);\n    addNode(vs,25,30,10,10);\n    addToPath(ps,vs[0],(topology::EdgePoint::RectIntersect)4);\n    addToPath(ps,vs[2],(topology::EdgePoint::RectIntersect)1);\n    addToPath(ps,vs[3],(topology::EdgePoint::RectIntersect)3);\n    addToPath(ps,vs[4],(topology::EdgePoint::RectIntersect)1);\n    addToPath(ps,vs[5],(topology::EdgePoint::RectIntersect)3);\n    addToPath(ps,vs[1],(topology::EdgePoint::RectIntersect)4);\n    d.push_back(make_pair(2,40));\n}\nvoid simple(void test(Nodes&, EdgePoints&, cola::DesiredPositionsInDim&,string&)){\n    Nodes nodes;\n    EdgePoints ps;\n    cola::DesiredPositionsInDim d;\n    string name;\n    test(nodes,ps,d,name);\n    const size_t V = nodes.size();\n    Edges es;\n    es.push_back(new Edge(0,210,ps));\n\n    writeFile(nodes,es,\"simple-\"+name+\"-0.svg\");\n\n    vpsc::Variables vs;\n    getVariables(nodes,vs);\n    vpsc::Constraints cs;\n\n    { // scope for t, so that t gets destroyed before es\n        TopologyConstraints t(vpsc::HORIZONTAL,nodes,es,nullptr,vs,cs);\n\n        // test computeStress\n        double stress=computeStress(es);\n        printf(\"Stress=%f\\n\",stress);\n        //assert(fabs(expectedStress-stress)<1e-4);\n\n        valarray<double> g(V);\n        valarray<double> x(V);\n        for(unsigned i=0;i<V;++i) {\n            x[i]=nodes[i]->rect->getCentreX();\n        }\n        cola::SparseMap h(V);\n        for(unsigned i=1;i<10;i++) {\n            g=0;\n            /*\n            h.clear();\n            t.computeForces(g,h);\n            cola::SparseMatrix H(h);\n            x-=computeStepSize(H,g,g)*g;\n            */\n            setVariableDesiredPositions(vs,d,x);\n            t.solve();\n            stringstream ss;\n            ss << \"simple-\" << name << \"-\" << i << \".svg\";\n            writeFile(nodes,es,ss.str());\n        }\n    }\n\n    for_each(nodes.begin(),nodes.end(),delete_node());\n    for_each(vs.begin(),vs.end(),delete_object());\n    for_each(cs.begin(),cs.end(),delete_object());\n    for_each(es.begin(),es.end(),delete_object());\n}\n\nint main() {\n    /*\n    simple(test1);\n    simple(test2);\n    simple(test3);\n    simple(test4);\n    */\n    simple(test5);\n    return 0;\n}\n// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=4:softtabstop=4:textwidth=80 :\n"
  },
  {
    "path": "cola/libtopology/tests/simple_bend.m",
    "content": "(*\n\tcomputation of the stress function for straightening a bendy edge,\n        and it's derivative and hessian.\n        various test cases.\n*)\n\n(* euclidean distance between two points *)\nl[a_,b_]:=Sqrt[(a[[1]]-b[[1]])^2+(a[[2]]-b[[2]])^2];\n(* stress function *)\nd=.;\nf[X_,Y_]:=d^-2 (d-Sum[\n    l[{X[[i-1]],Y[[i-1]]},{X[[i]],Y[[i]]}],{i,2,Length[X]}\n])^2;\n\n(*\nX=Array[x,3];\nY=Array[y,3];\nf[X,Y]\nfrom=Table[l[{X[[i - 1]], Y[[i - 1]]}, {X[[i]], Y[[i]]}], {i, 2, Length[X]}]\nto=Table[Subscript[l,i-1,i],{i,2,Length[X]}]\ndfrom=Table[X[[i-1]]-X[[i]],{i,2,Length[X]}]\ndto=Table[Subscript[dx,i-1,i],{i,2,Length[X]}]\nrules=Join[\n   {PowerExpand[d Sqrt[f[X, Y]]]->dl},\n   Thread[from->to],\n   Thread[1/from->1/to],\n   Thread[from^(-2)->to^(-2)],\n   Thread[from^(-3)->to^(-3)],\n   Thread[dfrom->dto]]\ng=D[f[X,Y],{X,1}]//.rules\nh=D[f[X,Y],{X,2}]//.rules\ng/.{x[i_] -> Xv[[i]], y[i_] -> Yv[[i]]}\n*)\n\n(* \n\textract points from rectangles\n\ta rectangle is an array: {bottom left point, bottom right, width, height\n*)\ntl[r_]:={r[[1]],r[[2]]+r[[4]]};\ntr[r_]:={r[[1]]+r[[3]],r[[2]]+r[[4]]};\nbl[r_]:={r[[1]],r[[2]]};\nbr[r_]:={r[[1]]+r[[3]],r[[2]]};\ncentre[r_]:={r[[1]]+r[[3]]/2.0,r[[2]]+r[[4]]/2.0};\n\n(*\n\ttest case: 3 rectangles, 1 path, 1 bend\n*)\nd=100.000000; (* ideal length *)\nv0={571.500000,363.500000,63.000000,43.000000};\nv1={620.000000,469.500000,63.000000,43.000000};\nv2={541.500000,300.500000,63.000000,43.000000};\n\n(* Path defined in Xv, Yv *)\nXv={centre[v1][[1]],br[v0][[1]],centre[v2][[1]]};\nYv={centre[v1][[2]],br[v0][[2]],centre[v2][[2]]};\n(* order in which nodes are visited in path *)\nXi={1,0,2};\nn=Length[Xi];\n\nexpected=1.05721;\nAbs[f[Xv,Yv]-expected]<10^(-5)\n\nX=Array[x,n];\nY=Array[y,n];\ng=D[f[X,Y],{X,1}]/.{x[i_]:>Xv[[i]], y[i_]:>Yv[[i]]};\nh=D[f[X,Y],{X,2}]/.{x[i_]:>Xv[[i]], y[i_]:>Yv[[i]]};\n\ngg=Table[g[[Xi[[i]]+1]],{i,1,n}];\nhh=Table[h[[Xi[[i]]+1]][[Xi[[j]]+1]],{i,1,n},{j,1,n}];\n\n"
  },
  {
    "path": "cola/libtopology/tests/split.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libtopology - Classes used in generating and managing topology constraints.\n *\n * Copyright (C) 2007-2008  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library in the file LICENSE; if not, \n * write to the Free Software Foundation, Inc., 59 Temple Place, \n * Suite 330, Boston, MA  02111-1307  USA\n *\n*/\n\n/**\n * Test of topology conserving constraints.  Sets up a graph\n * with four nodes and two edges, initially with two bends around the\n * first disconnected node.  After an iteration an edge segment must be split\n * to bend around the second disconnected node.\n *\n * \\file split.cpp\n * \\author Tim Dwyer\n * \\date Dec 2007\n */\n#include <libvpsc/rectangle.h>\n#include <libtopology/topology_constraints.h>\n#include <libcola/cola.h>\n#include <libcola/output_svg.h>\n#include <libvpsc/constraint.h>\n#include <vector>\n#include <iostream>\n#include <sstream>\nusing namespace std;\nusing namespace topology;\n#include \"test.h\"\n\ndouble expectedStress=1.48116;\ndouble expectedG1[]=\n{0.00849768, -0.0192465, 0, 0.0107488};\n\ndouble expectedG2[]={0.003837,-0.001923,-0.001914};\ndouble expectedH1[]= \n{0.000312442, -0.000438933, 0,  0.000126491, \n-0.000438933,  0.000746922, 0, -0.000307989,\n           0,            0, 0,            0, \n 0.000126491, -0.000307989, 0,  0.000181498};\n\ndouble expectedH2[]={0.000505,-0.000169,-0.000336,\n                     -0.000169,0.000165,0.000004 ,\n                     -0.000336,0.000004,0.000333};\n\nvoid split() {\n    Nodes nodes;\n    Edges es;\n\n    printf(\"test: bend2()\\n\");\n\n    addNode(nodes,100,100,40,20);\n    addNode(nodes,100,130,40,20);\n    addNode(nodes,70,160,40,20);\n    addNode(nodes,180,190,40,20);\n    EdgePoints p1;\n    addToPath(p1,nodes[0],EdgePoint::CENTRE);\n    addToPath(p1,nodes[1],EdgePoint::BL);\n    addToPath(p1,nodes[1],EdgePoint::TL);\n    addToPath(p1,nodes[3],EdgePoint::CENTRE);\n    es.push_back(new Edge(100,p1));\n\n    EdgePoints p2;\n    addToPath(p2,nodes[2],EdgePoint::CENTRE);\n    addToPath(p2,nodes[3],EdgePoint::CENTRE);\n    es.push_back(new Edge(50,p2));\n\n    const size_t V = nodes.size();\n\n    vpsc::Constraints cs;\n    vpsc::Variables vs;\n    getVariables(nodes,vs);\n    { // scope for t, so that t gets destroyed before es\n\n        TopologyConstraints t(vpsc::HORIZONTAL,nodes,es,vs,cs);\n        writeFile(nodes,es,\"split-0.svg\");\n\n        // test computeStress\n        double stress=t.computeStress();\n        printf(\"Stress=%f\\n\",stress);\n        //assert(fabs(expectedStress-stress)<1e-4);\n\n        valarray<double> g(V);\n        cola::SparseMap h(V);\n        for(unsigned i=1;i<5;i++) {\n            g=0;\n            h.clear();\n            t.gradientProjection(g,h);\n            stringstream ss;\n            ss << \"split-\" << i << \".svg\";\n            writeFile(nodes,es,ss.str().c_str());\n        }\n    }\n\n    for_each(nodes.begin(),nodes.end(),delete_node());\n    for_each(es.begin(),es.end(),delete_object());\n    for_each(cs.begin(),cs.end(),delete_object());\n    for_each(vs.begin(),vs.end(),delete_object());\n}\n\nint main() {\n    split();\n    return 0;\n}\n// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=4:softtabstop=4:encoding=utf-8:textwidth=80 :\n"
  },
  {
    "path": "cola/libtopology/tests/split.m",
    "content": "(*\n\tcomputation of the stress function for straightening a bendy edge,\n        and it's derivative and hessian.\n        various test cases.\n\n\tto run: math < bend2.m\n*)\n\n(* euclidean distance between two points *)\nl[a_,b_]:=Sqrt[(a[[1]]-b[[1]])^2+(a[[2]]-b[[2]])^2];\n(* stress function *)\nd=.;\nf[X_,Y_]:=d^-2 (d-Sum[\n    l[{X[[i-1]],Y[[i-1]]},{X[[i]],Y[[i]]}],{i,2,Length[X]}\n])^2;\n\n(*\nX=Array[x,3];\nY=Array[y,3];\nf[X,Y]\nfrom=Table[l[{X[[i - 1]], Y[[i - 1]]}, {X[[i]], Y[[i]]}], {i, 2, Length[X]}]\nto=Table[Subscript[l,i-1,i],{i,2,Length[X]}]\ndfrom=Table[X[[i-1]]-X[[i]],{i,2,Length[X]}]\ndto=Table[Subscript[dx,i-1,i],{i,2,Length[X]}]\nrules=Join[\n   {PowerExpand[d Sqrt[f[X, Y]]]->dl},\n   Thread[from->to],\n   Thread[1/from->1/to],\n   Thread[from^(-2)->to^(-2)],\n   Thread[from^(-3)->to^(-3)],\n   Thread[dfrom->dto]]\ng=D[f[X,Y],{X,1}]//.rules\nh=D[f[X,Y],{X,2}]//.rules\ng/.{x[i_] -> Xv[[i]], y[i_] -> Yv[[i]]}\n*)\n\n(* \n\textract points from rectangles\n\ta rectangle is an array: {bottom left point, bottom right, width, height\n*)\ntl[r_]:={r[[1]],r[[2]]+r[[4]]};\ntr[r_]:={r[[1]]+r[[3]],r[[2]]+r[[4]]};\nbl[r_]:={r[[1]],r[[2]]};\nbr[r_]:={r[[1]]+r[[3]],r[[2]]};\ncentre[r_]:={r[[1]]+r[[3]]/2.0,r[[2]]+r[[4]]/2.0};\n\n(*\n\ttest case: 3 rectangles, 1 path, 1 bend\n*)\nd=100.000000; (* ideal length *)\nv0={100.000000,100.000000,40.000000,20.000000}\nv1={100.000000,130.000000,40.000000,20.000000}\nv2={165.000000,160.000000,40.000000,20.000000}\nv3={180.000000,190.000000,40.000000,20.000000}\n\n(* Path defined in Xv, Yv *)\nXv={centre[v0][[1]],bl[v1][[1]],tl[v1][[1]],centre[v3][[1]]};\nYv={centre[v0][[2]],bl[v1][[2]],tl[v1][[2]],centre[v3][[2]]};\n(* order in which nodes are visited in path *)\nXi={0,1,1,3};\nn=Length[Xi];\nm=Max[Xi]+1;\n\nexpected=1.48116;\nAbs[f[Xv,Yv]-expected]<10^(-5)\n\nX=Array[x,n];\nY=Array[y,n];\ng=D[f[X,Y],{X,1}]/.{x[i_]:>Xv[[i]], y[i_]:>Yv[[i]]};\nh=D[f[X,Y],{X,2}]/.{x[i_]:>Xv[[i]], y[i_]:>Yv[[i]]};\n\ngg = Table[0, {i, m}];\nFor[i = 1, i <= n, i++, gg[[Xi[[i]] + 1]]+=g[[i]]];\nhh = Table[0, {i, m}, {j, n}];\nFor[i=1, i<=n, i++, \n  For[j=1, j<=n, j++,\n    hh[[Xi[[i]]+1,j]]+=h[[i,j]]\n  ]\n]\nhhh = Table[0, {i, m}, {j, m}];\nFor[i=1, i<=m, i++, \n  For[j=1, j<=n, j++,\n    hhh[[i,Xi[[j]]+1]]+=hh[[i,j]]\n  ]\n]\n\ngg\nhhh\n"
  },
  {
    "path": "cola/libtopology/tests/test.h",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libtopology - Classes used in generating and managing topology constraints.\n *\n * Copyright (C) 2007-2008  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library in the file LICENSE; if not, \n * write to the Free Software Foundation, Inc., 59 Temple Place, \n * Suite 330, Boston, MA  02111-1307  USA\n *\n*/\n\n#include \"libtopology/topology_graph.h\"\nusing namespace topology;\n\ntemplate <typename T>\nT getRand(T range) {\n    double d=static_cast<double>(rand())/static_cast<double>(RAND_MAX);\n    T r=static_cast<T>(static_cast<double>(range)*d);\n\treturn r;\n}\n\nvoid generateRandomRects(unsigned n, vpsc::Rectangles &rs) {\n\trs.resize(n);\n\tconst int rect_size = 50;\n\tconst int fld_size = static_cast<int>(\n            sqrt(static_cast<double>(rect_size * n) / 2.0));\n\tint coords[4];\n\tfor (unsigned i = 0; i < n; ++i) {\n\t\tfor (unsigned d = 0; d < 2; ++d) {\n\t\t\t//unsigned const end = 1 + (rand() % (fld_size - 1));\n\t\t\t//unsigned const start = rand() % end;\n\t\t\tint const start = getRand(fld_size);\n\t\t\tint const end = start + getRand(rect_size) + 1;\n\t\t\tcoords[2 * d] = start;\n\t\t\tcoords[2 * d + 1] = end;\n\t\t} \n\t\trs[i]=new vpsc::Rectangle(coords[0],coords[1],coords[2],coords[3]);\n\t}\n}\n\ntopology::Node* addNode(Nodes& vs, double x, double y, double w, double h) {\n    vpsc::Rectangle* r = new vpsc::Rectangle(x,x+w,y,y+h);\n    topology::Node *v = new topology::Node(vs.size(), r, new vpsc::Variable(vs.size()));\n    vs.push_back(v);\n    return v;\n}\nstruct delete_node {\n\tvoid operator() (topology::Node* v) {\n        delete v->rect;\n        delete v;\n    }\n};\nvoid addToPath(EdgePoints& ps, topology::Node *v, topology::EdgePoint::RectIntersect i) {\n    ps.push_back(new EdgePoint(v,i));\n}\n\nvoid noRectOverlaps(const vpsc::Rectangles& rs) {\n\tfor(vpsc::Rectangles::const_iterator i=rs.begin();i!=rs.end();++i) {\n\t\tfor(vpsc::Rectangles::const_iterator j=i+1;j!=rs.end();++j) {\n            vpsc::Rectangle *u=*i, *v=*j;\n            double xoverlap=u->overlapX(v);\n            double yoverlap=u->overlapY(v);\n\t\t\tif(xoverlap>0 && yoverlap>0) {\n                printf(\"Overlap=%f,%f\\n\",xoverlap,yoverlap);\n                throw \"OVERLAP FOUND!\";\n\t\t\t}\n\t\t}\n\t}\n}\nvoid writeFile(const topology::Nodes& vs, const Edges& es, const string& outputFileName) {\n    const unsigned n=vs.size();\n    vector<cola::Edge> cedges;\n\n    for(unsigned i=0;i<es.size();i++) {\n        cedges.push_back(make_pair(1,2));\n    }\n\n    vector<straightener::Route*> routes;\n    for(vector<Edge*>::const_iterator e=es.begin();e!=es.end();++e) {\n        routes.push_back((*e)->getRoute());\n    }\n\n    vector<string> labels(n);\n    for(unsigned i=0;i<n;++i) {\n        stringstream ss;\n        ss << i;\n        labels[i]=ss.str();\n    }\n\n    vector<vpsc::Rectangle*> rs;\n    for(Nodes::const_iterator i=vs.begin();i!=vs.end();++i) {\n\t    rs.push_back((*i)->rect);\n    }\n    OutputFile of(rs,cedges,nullptr,outputFileName.c_str(),true,false);\n    of.setLabels(labels);\n    of.routes=&routes;\n    of.generate();\n\n    for_each(routes.begin(),routes.end(),delete_object());\n}\nvoid check(const TopologyConstraints& t, valarray<double>& g, cola::SparseMap& h,\n        double* eg, double* eh) {\n    for(unsigned i=0;i<t.n;++i) {\n        //printf(\"g[%d]=%f,eg[%d]=%f\\n\",i,g[i],i,expectedG[i]);\n        assert(fabs(g[i]-eg[i])<1e-4);\n        for(unsigned j=0;j<t.n;++j) {\n            //printf(\"h[%d,%d]=%f,eh[%d,%d]=%f\\n\",i,j,h(i,j),i,j,expectedH[i*n+j]);\n            //printf(\"%f,\",h(i,j));\n            assert(fabs(h(i,j)-eh[i*t.n+j])<1e-4);\n        }\n        printf(\"\\n\");\n    }\n}\nvoid setVariableDesiredPositions(vpsc::Variables& vs, const cola::DesiredPositionsInDim& des, valarray<double>& coords) {\n    unsigned n=coords.size();\n    assert(vs.size()>=n);\n    for(unsigned i=0;i<n;++i) {\n        vpsc::Variable* v=vs[i];\n        v->desiredPosition = coords[i];\n        v->weight=1;\n    }\n    for(cola::DesiredPositionsInDim::const_iterator d=des.begin();\n            d!=des.end();++d) {\n        assert(d->first<vs.size());\n        vpsc::Variable* v=vs[d->first];\n        v->desiredPosition = d->second;\n        v->weight=10000;\n    }\n}\ninline double dotProd(valarray<double> x, valarray<double> y) {\n    assert(x.size()==y.size());\n    double dp=0;\n    for(unsigned i=0;i<x.size();i++) {\n        dp+=x[i]*y[i]; \n    }\n    return dp;\n}\ndouble computeStepSize(\n        cola::SparseMatrix const &H, \n        valarray<double> const &g, \n        valarray<double> const &d)\n{\n    assert(g.size()==d.size());\n    assert(g.size()==H.rowSize());\n    // stepsize = g'd / (d' H d)\n    double numerator = dotProd(g,d);\n    valarray<double> Hd(d.size());\n    H.rightMultiply(d,Hd);\n    double denominator = dotProd(d,Hd);\n    //assert(numerator>=0);\n    //assert(denominator>=0);\n    if(denominator==0) return 0;\n    return numerator/denominator;\n}\n// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=4:softtabstop=4:textwidth=80 :\n"
  },
  {
    "path": "cola/libtopology/tests/triangle.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libtopology - Classes used in generating and managing topology constraints.\n *\n * Copyright (C) 2007-2008  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library in the file LICENSE; if not, \n * write to the Free Software Foundation, Inc., 59 Temple Place, \n * Suite 330, Boston, MA  02111-1307  USA\n *\n*/\n\n/**\n * Test of topology conserving constraints.  Sets up a graph\n * with four nodes and two edges, initially with two bends around the\n * first disconnected node.  After an iteration an edge segment must be split\n * to bend around the second disconnected node.\n *\n * \\file split.cpp\n * \\author Tim Dwyer\n * \\date Dec 2007\n */\n#include <libvpsc/rectangle.h>\n#include <libtopology/topology_constraints.h>\n#include <libcola/cola.h>\n#include <libcola/output_svg.h>\n#include <vector>\n#include <iostream>\n#include <iomanip>\n#include <sstream>\nusing namespace std;\nusing namespace topology;\n#include \"test.h\"\n\ndouble expectedStress=1.48116;\ndouble expectedG1[]=\n{0.00849768, -0.0192465, 0, 0.0107488};\n\ndouble expectedG2[]={0.003837,-0.001923,-0.001914};\ndouble expectedH1[]= \n{0.000312442, -0.000438933, 0,  0.000126491, \n-0.000438933,  0.000746922, 0, -0.000307989,\n           0,            0, 0,            0, \n 0.000126491, -0.000307989, 0,  0.000181498};\n\ndouble expectedH2[]={0.000505,-0.000169,-0.000336,\n                     -0.000169,0.000165,0.000004 ,\n                     -0.000336,0.000004,0.000333};\n\nstruct TestCase {\n    Nodes nodes;\n    Edges es;\n    DesiredPositions des;\n    valarray<double> g;\n    EdgePoints ps;\n    vpsc::Constraints cs;\n    vpsc::Dim dim;\n    unsigned iterations;\n    TestCase() : dim(vpsc::HORIZONTAL), iterations(10) { }\n\n    void run() {\n        writeFile(nodes,es,\"triangle-000.svg\");\n\n        if(g.size()!=nodes.size()) {\n            g.resize(nodes.size());\n            g=0;\n        }\n        vpsc::Variables vs;\n        getVariables(nodes,vs);\n        TopologyConstraints t(dim,nodes,es,vs,cs);\n        // test computeStress\n        double stress=computeStress(es);\n        printf(\"Stress=%f\\n\",stress);\n        //assert(fabs(expectedStress-stress)<1e-4);\n\n        cola::SparseMap h(nodes.size());\n        for(unsigned i=1;i<iterations;i++) {\n            g=0;\n            h.clear();\n            t.gradientProjection(g,h,des);\n            stringstream ss;\n            ss << \"triangle-\" << setfill('0') << setw(3) << i << \".svg\";\n            writeFile(nodes,es,ss.str().c_str());\n        }\n    }\n    ~TestCase() {\n        for_each(es.begin(),es.end(),delete_object());\n        for_each(cs.begin(),cs.end(),delete_object());\n        for(Nodes::iterator i=nodes.begin();i!=nodes.end();++i) {\n            Node* v=*i;\n            delete v->rect;\n            delete v->var;\n            delete v;\n        }\n    }\n    void setGradient(double* gradient) {\n        assert(nodes.size()>0);\n        g.resize(nodes.size());\n        for(unsigned i=0;i<nodes.size();i++) {\n            g[i]=gradient[i];\n        }\n    }\n    Node* addNode(double x, double y, double w, double h) {\n        vpsc::Rectangle* r = new vpsc::Rectangle(x,x+w,y,y+h);\n        const unsigned id = nodes.size();\n        Node *v = new Node(id, r, new vpsc::Variable(id));\n        nodes.push_back(v);\n        return v;\n    }\n    void addEdge(double idealLength) {\n        assert(ps.size()>=2);\n        es.push_back(new Edge(idealLength,ps));\n        ps.clear();\n    }\n    void addDesired(unsigned vid, double pos) {\n        des.push_back(make_pair(vid,pos));\n    }\n    void addToPath(unsigned vid, topology::EdgePoint::RectIntersect i) {\n        ps.push_back(new EdgePoint(nodes[vid],i));\n    }\n};\nvoid case1(TestCase& t) {\n    t.addNode(2.655473,0.000000,10.100000,10.000000);\n    t.addNode(49.957304,50.000000,10.100000,10.000000);\n    t.addNode(97.259136,0.000000,10.100000,10.000000);\n    t.addNode(63.828037,25.000000,10.100000,10.000000);\n    t.addToPath(0,(topology::EdgePoint::RectIntersect)4);\n    t.addToPath(1,(topology::EdgePoint::RectIntersect)4);\n    t.addEdge(60);\n    t.addToPath(1,(topology::EdgePoint::RectIntersect)4);\n    t.addToPath(3,(topology::EdgePoint::RectIntersect)0);\n    t.addToPath(2,(topology::EdgePoint::RectIntersect)4);\n    t.addEdge(60);\n    t.addToPath(2,(topology::EdgePoint::RectIntersect)4);\n    t.addToPath(0,(topology::EdgePoint::RectIntersect)4);\n    t.addEdge(60);\n}\nvoid case2(TestCase& t) {\n    t.addNode(20.428107,0.000000,10.100000,10.000000);\n    t.addNode(45.716379,50.000000,10.100000,10.000000);\n    t.addNode(79.517409,0.000000,10.100000,10.000000);\n    t.addNode(17.425625,25.000000,10.100000,10.000000);\n    t.addToPath(0,(topology::EdgePoint::RectIntersect)4);\n    t.addToPath(3,(topology::EdgePoint::RectIntersect)2);\n    t.addToPath(3,(topology::EdgePoint::RectIntersect)3);\n    t.addToPath(1,(topology::EdgePoint::RectIntersect)4);\n    t.addEdge(60);\n    t.addToPath(1,(topology::EdgePoint::RectIntersect)4);\n    t.addToPath(2,(topology::EdgePoint::RectIntersect)4);\n    t.addEdge(60);\n    t.addToPath(2,(topology::EdgePoint::RectIntersect)4);\n    t.addToPath(0,(topology::EdgePoint::RectIntersect)4);\n    t.addEdge(60);\n}\nvoid case3(TestCase& t) {\n    t.addNode(101.846987,160.020991,10.100000,10.000000);\n    t.addNode(117.734372,216.805338,10.100000,10.000000);\n    t.addNode(160.316550,174.380230,10.100000,10.000000);\n    t.addNode(106.896987,179.923284,10.100000,10.000000);\n    t.addToPath(0,(topology::EdgePoint::RectIntersect)4);\n    t.addToPath(3,(topology::EdgePoint::RectIntersect)3);\n    t.addToPath(1,(topology::EdgePoint::RectIntersect)4);\n    t.addEdge(60);\n    t.addToPath(1,(topology::EdgePoint::RectIntersect)4);\n    t.addToPath(2,(topology::EdgePoint::RectIntersect)4);\n    t.addEdge(60);\n    t.addToPath(2,(topology::EdgePoint::RectIntersect)4);\n    t.addToPath(0,(topology::EdgePoint::RectIntersect)4);\n    t.addEdge(60);\n}\n\nvoid case4(TestCase& t) {\n    t.addNode(205.081973,200.000000,10.100000,10.000000);\n    t.addNode(250.000000,250.000000,10.100000,10.000000);\n    t.addNode(294.918027,200.000000,10.100000,10.000000);\n    t.addNode(289.868027,225.000000,10.100000,10.000000);\n    t.addToPath(0,(topology::EdgePoint::RectIntersect)4);\n    t.addToPath(1,(topology::EdgePoint::RectIntersect)4);\n    t.addEdge(60);\n    t.addToPath(1,(topology::EdgePoint::RectIntersect)4);\n    t.addToPath(3,(topology::EdgePoint::RectIntersect)0);\n    t.addToPath(3,(topology::EdgePoint::RectIntersect)1);\n    t.addToPath(2,(topology::EdgePoint::RectIntersect)4);\n    t.addEdge(60);\n    t.addToPath(2,(topology::EdgePoint::RectIntersect)4);\n    t.addToPath(0,(topology::EdgePoint::RectIntersect)4);\n    t.addEdge(60);\n\n    t.addDesired(3,400.000000);\n}\nvoid case5(TestCase& t) {\n    t.addNode(335.658737,287.843360,10.100000,10.000000);\n    t.addNode(338.8,347.780782,10.100000,10.000000);\n    t.addNode(388.857209,315.489405,10.100000,10.000000);\n    t.addNode(348.9,337.789705,10.100000,10.000000);\n    t.addToPath(0,(topology::EdgePoint::RectIntersect)4);\n    t.addToPath(1,(topology::EdgePoint::RectIntersect)4);\n    t.addEdge(60);\n    t.addToPath(1,(topology::EdgePoint::RectIntersect)4);\n    t.addToPath(3,(topology::EdgePoint::RectIntersect)0);\n    t.addToPath(2,(topology::EdgePoint::RectIntersect)4);\n    t.addEdge(60);\n    t.addToPath(2,(topology::EdgePoint::RectIntersect)4);\n    t.addToPath(0,(topology::EdgePoint::RectIntersect)4);\n    t.addEdge(60);\n    t.addDesired(3,353.886210);\n\n    double gradient[]={1.15455e-05,0.000114288,-0.000125833,0};\n    t.setGradient(gradient);\n}\n\nvoid triangle(void tcase(TestCase&)) {\n    printf(\"test: triangle()\\n\");\n    TestCase t;\n    tcase(t);\n    t.run();\n}\n\nint main() {\n    //triangle(case1);\n    //triangle(case2);\n    //triangle(case3);\n    //triangle(case4);\n    triangle(case5);\n    return 0;\n}\n// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=4:softtabstop=4:encoding=utf-8:textwidth=80 :\n"
  },
  {
    "path": "cola/libtopology/topology_constraints.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libtopology - Classes used in generating and managing topology constraints.\n *\n * Copyright (C) 2007-2008  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n*/\n\n#include <sstream>\n#include <string>\n#include \"libvpsc/variable.h\"\n#include \"libvpsc/assertions.h\"\n#include \"libcola/cola.h\"\n#include \"libcola/straightener.h\"\n#include \"libtopology/topology_graph.h\"\n#include \"libtopology/topology_constraints.h\"\n#include \"libtopology/topology_log.h\"\nusing namespace std;\nnamespace topology {\n/* \n * @return the maximum move we can make along the line from initial to\n * final positions without violating this constraint\n */\ndouble TriConstraint::maxSafeAlpha() const {\n    const double u1=u->initialPos(scanDim),\n                 u2=u->finalPos(),\n                 v1=v->initialPos(scanDim),\n                 v2=v->finalPos(),\n                 w1=w->initialPos(scanDim),\n                 w2=w->finalPos(),\n                 fSlack=slackAtFinal();\n    if(fSlack>=0) {\n        FILE_LOG(logDEBUG1)<<\"TriConstraint::maxSafeAlpha(): slackAtFinal=\"<<slackAtFinal();\n        return 1;\n    }\n    double numerator=w1 - g - u1 + p*(u1-v1);\n    // There are a number of situations where the following can\n    // be 0:\n    //   - no movement\n    //   - rotation\n    double denominator=u2-u1 + p*(u1-u2 + v2-v1) + w1-w2;\n    FILE_LOG(logDEBUG1)<<\"TriConstraint::maxSafeAlpha(): num=\"<<numerator<<\" den=\"<<denominator;\n    FILE_LOG(logDEBUG1)<<\"  u1=\"<<u1<<\" u2=\"<<u2<<\" v1=\"<<v1<<\" v2=\"<<v2<<\" w1=\"<<w1<<\" w2=\"<<w2;\n    if(denominator==0) {\n        return 1;\n    }\n    double msa = numerator/denominator;\n    if(msa<0) {\n#ifndef NDEBUG\n        const double iSlack = slackAtInitial();\n#endif\n        COLA_ASSERT(iSlack>=fSlack);\n        FILE_LOG(logDEBUG1)<<\"  tiny negative msa rounded to 0!\";\n        // we know that fSlack is negative, we do not actually move by\n        // negative amounts, but returning the following ensures that\n        // the most violated constraint will be processed first\n        msa = fSlack;\n    }\n    return msa;\n}\ndouble TriConstraint::slack(const double ux, const double vx, const double wx) const {\n    const double lhs = wx;\n    const double rhs = ux+p*(vx-ux)+g;\n    FILE_LOG(logDEBUG1)<<\"  TriConstraint::slack(\"<<ux<<\",\"<<vx<<\",\"<<wx<<\"):leftOf=\"<<leftOf<<\",lhs=\"<<lhs<<\",rhs=\"<<rhs;\n    return leftOf ? rhs - lhs\n                  : lhs - rhs;\n}\ndouble TriConstraint::slackAtFinal() const {\n    return \n        slack(u->finalPos(), \n              v->finalPos(), \n              w->finalPos());\n}\ndouble TriConstraint::slackAtInitial () const\n{\n    return slack(u->initialPos(scanDim), v->initialPos(scanDim),\n            w->initialPos(scanDim));\n}\n\nostream& operator<< (ostream& os, const TriConstraint& c) {\n    double ux = c.u->finalPos()\n         , vx = c.v->finalPos()\n         , wx = c.w->finalPos();\n    os << \"TriConstraint@\" << &c \n       << \": u=\" << ux \n       <<  \" v=\" << vx\n       <<  \" w=\" << wx\n       <<  \" p=\" << c.p\n       <<  \" g=\" << c.g\n       <<  \" left=\" << c.leftOf; \n    return os;\n}\n/*\n * The bend has become straight, remove bend\n */\nvoid BendConstraint::satisfy()\n{\n    COLA_ASSERT((scanDim==vpsc::XDIM)||(scanDim==vpsc::YDIM));\n    FILE_LOG(logDEBUG) << \"BendConstraint::satisfy()... edge id=\" <<\n            getEdgeID() << \" node id=\" << bendPoint->node->id;\n    // XXX: Note that the call to prune() deletes the bendPoint and the \n    //      BendConstraint (this instance itself), so it is not safe to\n    //      access any member variables after that.  Hence the local copy \n    //      of scanDim.  The code really needs to be reworked to be \n    //      written much more cleanly, only this kind of restructuring\n    //      has the potential to introduce many bugs, so I will leave it\n    //      for now.  -- mjwybrow\n    vpsc::Dim dim = scanDim;\n    Node* node=bendPoint->node;\n    double pos=bendPoint->pos(vpsc::conjugate(scanDim));\n    Segment* s=bendPoint->prune(scanDim);\n    // create a new StraightConstraint to replace the BendConstraint\n    s->createStraightConstraint(dim, node, pos);\n    FILE_LOG(logDEBUG)<<\"BendConstraint::satisfy()...done.\";\n}\nstring BendConstraint::toString() const {\n    stringstream s;\n    s << \"BendConstraint: bendPoint=(\" << bendPoint->posX() << \",\" << \n            bendPoint->posY() << \")\";\n    return s.str();\n}\nunsigned BendConstraint::getEdgeID() const {\n    COLA_ASSERT(bendPoint->inSegment!=nullptr);\n    COLA_ASSERT(bendPoint->outSegment!=nullptr);\n    return bendPoint->inSegment->edge->id;\n}\n/*\n * functor that transfers each StraightConstraint associated with a segment\n * to be replaced, to either of the two new segments.\n * Choice is made depending on which of the segments the scan pos of the\n * constraint intersects with.\n * Note that if the scan pos is at the join of the two new segments then\n * the choice is made based the side of the node associated with the constraint.\n */\nstruct transferStraightConstraintChoose {\n    /*\n     * @param target1 the first of two possible target segments for the transfer\n     * @param target2 the second of two possible target segments for the\n     * transfer\n     * @param ignore the constraint which, in being satisfied, caused this\n     * transfer and which should therefore not be transfered.\n     */\n    transferStraightConstraintChoose(Segment* target1, Segment* target2,\n            StraightConstraint* ignore)\n        : ignore(ignore) \n    {\n        vpsc::Dim dim = ignore->scanDim;\n        double min1=min(target1->start->pos(vpsc::conjugate(dim)),target1->end->pos(vpsc::conjugate(dim)));\n        double max1=max(target1->start->pos(vpsc::conjugate(dim)),target1->end->pos(vpsc::conjugate(dim)));\n        double min2=min(target2->start->pos(vpsc::conjugate(dim)),target2->end->pos(vpsc::conjugate(dim)));\n        double max2=max(target2->start->pos(vpsc::conjugate(dim)),target2->end->pos(vpsc::conjugate(dim)));\n        if(min1<max2) {\n            COLA_ASSERT(max1==min2);\n            lSeg = target1;\n            rSeg = target2;\n            lMin = min1;\n            mid = max1;\n            rMax = max2;\n        } else {\n            COLA_ASSERT(max2==min1);\n            lSeg = target2;\n            rSeg = target1;\n            lMin = min2;\n            mid = max2;\n            rMax = max1;\n        }\n    }\n    /*\n     * @param c constraint to transfer to target1 or target2\n     */\n    void operator() (StraightConstraint* c)\n    {\n        vpsc::Dim dim = ignore->scanDim;\n        if(c!=ignore) {\n            Segment* dest=rSeg;\n            if(c->pos<mid) {\n                dest = lSeg;\n            } else if(c->pos==mid) {\n                if ( (dim==vpsc::XDIM &&\n                        (c->ri==EdgePoint::TL ||c->ri==EdgePoint::TR)) \n                     || \n                     (dim==vpsc::YDIM &&\n                        (c->ri==EdgePoint::TR ||c->ri==EdgePoint::BR))) \n                {\n                    dest=lSeg;\n                }\n            }\n            dest->transferStraightConstraint(c);\n        }\n    }\n    Segment* lSeg, * rSeg;\n    double lMin, mid, rMax;\n    StraightConstraint* ignore;\n};\nbool sameCorner(const EdgePoint* a, const EdgePoint* b) {\n    COLA_UNUSED(a);\n    COLA_UNUSED(b);\n    COLA_ASSERT( !(a->node->id==b->node->id\n                &&a->rectIntersect==b->rectIntersect));\n    return false;\n}\nbool zigzag(const EdgePoint* a, const Segment* s) {\n    COLA_UNUSED(a);\n    if(s!=nullptr) {\n        COLA_ASSERT(!sameCorner(a,s->end));\n    }\n    return false;\n}\nbool zagzig(const EdgePoint* a, const Segment* s) {\n    COLA_UNUSED(a);\n    if(s!=nullptr) {\n        COLA_ASSERT(!sameCorner(a,s->start));\n    }\n    return false;\n}\n/*\n * Segment needs to bend\n */\nvoid StraightConstraint::satisfy() {\n    FILE_LOG(logDEBUG)<<\"StraightConstraint::satisfy():\";\n    Edge* e = segment->edge;\n    EdgePoint* start = segment->start,\n             * end = segment->end,\n             * bend = new EdgePoint(node,ri);\n    FILE_LOG(logDEBUG1)<<\"  u=(\"<<start->node->id<<\":\"<<start->rectIntersect<<\"), v=(\"<<node->id<<\":\"<<ri<<\"), w=(\"<<end->node->id<<\":\"<<end->rectIntersect<<\")\";\n    COLA_ASSERT(!zigzag(bend,end->outSegment));\n    COLA_ASSERT(!zagzig(bend,start->inSegment));\n    // shouldn't have straight constraints between end segments and the\n    // nodes to which they are connected.\n    COLA_ASSERT(!segment->connectedToNode(node));\n    \n    Segment* s1 = new Segment(e,start,bend);\n    Segment* s2 = new Segment(e,bend,end);\n    if(e->firstSegment==segment) {\n        e->firstSegment=s1;\n    }\n    if(e->lastSegment==segment) {\n        e->lastSegment=s2;\n    }\n    // create BendConstraint to replace this StraightConstraint\n    bend->createBendConstraint(scanDim);\n\n    // transfer other StraightConstraint constraints \n    // from s to s1 or s2 depending on which side of p they are on.\n    transferStraightConstraintChoose transfer(s1,s2,this);\n    segment->forEachStraightConstraint(transfer);\n    // BendConstraint constraints associated with segment->end and \n    // segment->start need to be updated\n    start->createBendConstraint(scanDim);\n    end->createBendConstraint(scanDim);\n             \n    e->nSegments++;\n    delete segment;\n}\n/*\n * asserts that this TriConstraint is feasible at the initial positions of\n * variables.  Note that we don't apply this check for massive p because this\n * most likely indicates a segment that is near parallel to the scanline and\n * hence will never be violated anyway.\n */\nbool TriConstraint::assertFeasible() const {\n    COLA_ASSERT(fabs(p)>1e7||slackAtInitial()>-1e-3);\n    return true;\n}\nbool TopologyConstraint::assertFeasible() const {\n    COLA_ASSERT(c->assertFeasible());\n    return true;\n}\nstring StraightConstraint::\ntoString() const {\n    stringstream s;\n    s << \"StraightConstraint: node id=\"<<node->id<<\", segment=(\"<<segment->start->node->id<<\":\"<<segment->start->rectIntersect<<\",\"<<segment->end->node->id<<\":\"<<segment->end->rectIntersect<<\") pos=\" << pos;\n    return s.str();\n}\nstruct buildRoute {\n    buildRoute(straightener::Route* r, unsigned& n) : r(r), n(n) {}\n    void operator() (const Segment* s) {\n        EdgePoint* u=s->end;\n        r->xs[n]=u->posX();\n        r->ys[n++]=u->posY();\n    }\n    straightener::Route* r;\n    unsigned& n;\n};\nvoid TopologyConstraints::\nconstraints(std::vector<TopologyConstraint*>& ts) const {\n    for_each(edges.begin(),edges.end(),bind(\n               &Edge::getTopologyConstraints,std::placeholders::_1,&ts));\n}\n\nstruct PrintEdgePoint {\n    void operator() (EdgePoint* p) {\n        printf(\"t.addToPath(%d,(topology::EdgePoint::RectIntersect)%d);\\n\",p->node->id,p->rectIntersect);\n    }\n};\nvoid TopologyConstraints::\nprintInstance(valarray<double>& g) const {\n    printf(\"double gradient[]={%f\",g[0]);\n    for(unsigned i=0;i<n;++i) { printf(\",%f\",g[i]); }\n    printf(\"}\\nt.setGradient(gradient)\\n\");\n    for(Nodes::const_iterator i=nodes.begin();i!=nodes.end();++i) {\n        const Node* v=*i;\n        const vpsc::Rectangle* r=v->rect;\n        printf(\"t.addNode(%f,%f,%f,%f);\\n\",\n                r->getMinX(),r->getMinY(),r->width(),r->height());\n    }\n    for(Edges::const_iterator e=edges.begin();e!=edges.end();++e) {\n        (*e)->forEachEdgePoint(PrintEdgePoint());\n        printf(\"t.addEdge(%f);\\n\",(*e)->idealLength);\n    }\n}\nbool TopologyConstraints::\nassertFeasible() const {\n    vector<TopologyConstraint*> ts;\n    constraints(ts);\n    for_each(ts.begin(),ts.end(),mem_fn(&TopologyConstraint::assertFeasible));\n    return true;\n}\nbool TopologyConstraints::solve() {\n    FILE_LOG(logDEBUG)<<\"TopologyConstraints::solve... dim=\"<<dim;\n    COLA_ASSERT(assertConvexBends(edges));\n    COLA_ASSERT(assertNoSegmentRectIntersection(nodes,edges));\n    COLA_ASSERT(assertFeasible());\n    vector<TopologyConstraint*> ts;\n    constraints(ts);\n    vpsc::IncSolver s(vs,cs);\n    s.solve();\n    double minTAlpha=1;\n    TopologyConstraint* minT=nullptr;\n    //printEdges(edges);\n    // find minimum feasible alpha over all topology constraints\n    for(vector<TopologyConstraint*>::iterator i=ts.begin();\n            i!=ts.end();++i) {\n        TopologyConstraint* t=*i;\n        FILE_LOG(logDEBUG1)<<\"Checking topology constraint:\"<<t->toString();\n        double tAlpha=t->c->maxSafeAlpha();\n        FILE_LOG(logDEBUG1)<<\"                              alpha=\"<<tAlpha;\n        if(tAlpha<minTAlpha) {\n            minTAlpha=tAlpha;\n            minT=t;\n        }\n    }\n#ifndef NDEBUG\n    if(minT) {\n        FILE_LOG(logDEBUG)<<\"                 minT=\"<<minT->toString();\n        FILE_LOG(logDEBUG)<<\"                 minTAlpha=\"<<minTAlpha;\n    } else {\n        FILE_LOG(logDEBUG)<<\" No violated constraints!\";\n    }\n#endif\n    if(minTAlpha>0) {\n        for(Nodes::iterator i=nodes.begin();i!=nodes.end();++i) {\n            Node* v=*i;\n            v->rect->moveCentreD(dim,v->posOnLine(dim, minTAlpha));\n        }\n    }\n    COLA_ASSERT(noOverlaps());\n    COLA_ASSERT(assertConvexBends(edges));\n    // rectangle and edge point positions updated to variables.\n    FILE_LOG(logDEBUG)<<\" moves done.\";\n    if(minTAlpha<1 && minT) {\n        // now we satisfy the violated topology constraint, i.e. a bend point\n        // that has become straight is removed or a segment that needs to bend\n        // is split\n        minT->satisfy();\n    }\n    //printEdges(edges);\n    COLA_ASSERT(assertFeasible());\n    COLA_ASSERT(assertConvexBends(edges));\n    COLA_ASSERT(assertNoSegmentRectIntersection(nodes,edges));\n    FILE_LOG(logDEBUG)<<\"TopologyConstraints::solve... done\";\n    return minT!=nullptr;\n}\n/*\n * a Functor for use in a sum_over a collection of edges\n * which computes the total stress based on the difference in total\n * pathLength for each edge and idealLength.\n * More precisely the stress for a given edge \\f$e\\f$ is:\n * \\f[\n *   \\sigma(e) \\left( d_e - \\sum_{s \\in S(e)} |s| \\right)^2\n * \\f]\n */\nstruct ComputeStress {\n    double operator()(const Edge* e) {\n        double d = e->idealLength;\n        double weight=1.0/(d*d);\n        double dl=d-e->pathLength();\n        if(dl>0) return 0;\n        double s=weight*dl*dl;\n        //FILE_LOG(logDEBUG1)<<\"e(\"<<e->firstSegment->start->node->id<<\",\"<<e->lastSegment->end->node->id<<\")=\"<<s<<std::endl;\n        return s;\n    }\n};\n/*\n * compute the stress:\n * \\f[\n *   \\sigma = \\sum_{e \\in E} \\left( d_e - \\sum_{s \\in S(e)} |s| \\right)^2\n * \\f]\n */\ndouble computeStress(const Edges& es) {\n    return sum_over(es.begin(),es.end(),0.0,ComputeStress());\n}\n} // namespace topology\n"
  },
  {
    "path": "cola/libtopology/topology_constraints.h",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libtopology - Classes used in generating and managing topology constraints.\n *\n * Copyright (C) 2007-2010  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n * Author(s):  Tim Dwyer\n*/\n\n/*\n * Classes used in generating and managing topology constraints, i.e.\n * constraints of the form (e.g.) \\f$w_x + \\frac{1}{2}\\mathrm{width}(w) \\le u_x\n * + (v_x - u_x) \\frac {(w_y-u_y)}{(v_y-u_y)}\\f$ where (u,v) is an edge segment\n * and w is a node constrained to lie to the left of that segment.  Right-,\n * above- and below-of constraints are similarly defined.\n */\n#ifndef TOPOLOGY_CONSTRAINTS_H\n#define TOPOLOGY_CONSTRAINTS_H\n#include \"libcola/commondefs.h\"\n#include \"libtopology/topology_graph.h\"\n#include <valarray>\n#include <vector>\n#include <map>\n#include <list>\nnamespace vpsc {\n    class Constraint;\n    class Variable;\n    typedef std::vector<Constraint*> Constraints;\n    typedef std::vector<Variable*> Variables;\n}\nnamespace cola {\n    struct SparseMap;\n    class RootCluster;\n}\n/*\n * namespace for classes used in generating and solving forces and constraints \n * associated with topology preserving layout.\n */\nnamespace topology {\n    class StraightConstraint;\n    class Edge;\n    /*\n     * A constraint between three variables \\f$u,v,w\\f$ where \\f$w\\f$ is\n     * required to be to one side of the line between \\f$u,v\\f$.  That is, e.g.\n     * if we require \\f$w\\f$ to be some minimum distance \\f$g\\f$ to the left of\n     * the parameterised distance \\f$p\\f$ along the line \\f$(u,v)\\f$ we have:\n     * \\f[ w + g\\le u + p*(v - u) \\f] Right-of constraints are similar.\n     */\n    class TriConstraint {\n    public:\n        // A TriConstraint is associated with the positions of 3 nodes\n        const Node *u, *v, *w;\n        // p is the parameter for the constraint line, g is the offset constant\n        double p, g;\n        /* \n         * determines direction of inequality, w to the left of uv or to the\n         * right\n         */\n        bool leftOf;\n        vpsc::Dim scanDim;\n        TriConstraint(vpsc::Dim dim, const Node *u,  const Node *v, const Node *w,\n                double p, double g, bool left);\n        /* \n         * @return the maximum move we can make along the line from initial to\n         * desired positions without violating this constraint\n         */\n        double maxSafeAlpha() const;\n        /*\n         * amount of slack at current positions of variables\n         */\n        double slackAtInitial() const;\n        /*\n         * amount of slack at desired positions of variables\n         */\n        double slackAtFinal() const;\n        /*\n         * checks initial positions\n         */\n        bool assertFeasible() const;\n    private:\n        double slack(const double, const double, const double) const;\n    };\n    class TopologyConstraint {\n    public:\n        TriConstraint* c;\n        vpsc::Dim scanDim;\n        /*\n         * depending on the type of constraint (i.e. whether it is a constraint\n         * between a segment and a node or between two segments) we either\n         * split the segment (creating a new bend EdgePoint) or merge \n         * the segment with its neighbour (removing an EdgePoint).\n         */\n        virtual void satisfy() = 0;\n        /// for log messages\n        virtual std::string toString() const = 0;\n        virtual unsigned getEdgeID() const = 0;\n        virtual ~TopologyConstraint() {\n            delete c;\n        }\n        /* \n         * checks the underlying TriConstraint to ensure that it is feasible\n         * at the initial positions of its constituent variables.  Note that\n         * these initial positions must be up-to-date before hand.\n         */\n        bool assertFeasible() const;\n    protected:\n        TopologyConstraint(vpsc::Dim dim) : c(nullptr), scanDim(dim) { }\n    };\n    /*\n     * A constraint around a bend point that becomes active when the bend\n     * goes straight\n     */\n    class BendConstraint : public TopologyConstraint {\n    public:\n        EdgePoint* bendPoint;\n        /*\n         * create a constraint between the two segments joined by this\n         * EdgePoint such that the constraint is activated when the segments\n         * are aligned.\n         * @param bendPoint the articulation point\n         */\n        BendConstraint(EdgePoint* bendPoint, vpsc::Dim dim);\n        void satisfy();\n        std::string toString() const;\n        unsigned getEdgeID() const;\n    };\n    /*\n     * A constraint between a Node and a Segment that is activated when\n     * the Node wants to move through the Segment to create a bend point\n     */\n    class StraightConstraint : public TopologyConstraint {\n    public:\n        Segment* segment;\n        Node* node;\n        EdgePoint::RectIntersect ri;\n        const double pos;\n        /* \n         * create a constraint between a segment and one corner of a node such\n         * that the constraint is activated when the segment needs to be bent\n         * (divided into two new segments)\n         * @param s the segment\n         * @param node the node\n         * @param ri the vertex of the node causing this constraint\n         * @param scanPos the position of the scan line along which the\n         * constraint lies\n         * @param segmentPos the ratio (s->start,scanPos)/(s->start,s->end)\n         */\n        StraightConstraint(Segment* s, vpsc::Dim dim,\n                Node* node, const EdgePoint::RectIntersect ri,\n                const double scanPos, const double segmentPos,\n                const bool nodeLeft);\n        void satisfy();\n        std::string toString() const;\n        unsigned getEdgeID() const {\n            return segment->edge->id;\n        }\n    };\n    /*\n     * Define a topology over a diagram by generating a set of\n     * TopologyConstraint\n     */\n    class TopologyConstraints {\n    public:\n        const size_t n;\n        /*\n         * @param dim HORIZONTAL or VERTICAL\n         * @param nodes topology nodes\n         * @param edges topology edges\n         * @param vs canonical list of variables to feed into constraint\n         * solver, this must include all the variables\n         * associated with nodes (ie. vs.size()>=nodes.size()) though they\n         * do not have to appear in the same order.\n         * @param cs constraints on variables, list will be appended with\n         * automatically generated non-overlap constraints\n         */\n        TopologyConstraints(\n            const vpsc::Dim dim, \n            Nodes& nodes,\n            Edges& edges,\n            cola::RootCluster* clusterHierarchy,\n            vpsc::Variables& vs,\n            vpsc::Constraints& cs);\n        ~TopologyConstraints();\n        bool solve();\n        void constraints(std::vector<TopologyConstraint*> & ts) const;\n        void computeForces(std::valarray<double>& g, cola::SparseMap& h);\n        bool assertFeasible() const;\n        void printInstance(std::valarray<double>& g) const;\n        bool noOverlaps() const;\n    private:\n        Nodes& nodes;\n        Edges& edges;\n        cola::RootCluster* clusters;\n        vpsc::Variables& vs;\n        vpsc::Constraints& cs;\n        vpsc::Dim dim;\n    };\n    /*\n     * The following just copies variables in ns into vs.  May be useful\n     * in calling the TopologyConstraints constructor if you're not interested\n     * in constructing your own list of variables in advance.\n     * @param ns source list of nodes\n     * @param vs target list (we expect this to be 0 and resize to ns.size())\n     */\n    void getVariables(Nodes& ns, vpsc::Variables& vs);\n    /*\n     * Details new dimensions for a given rectangle.\n     */\n    struct ResizeInfo {\n        const Node* orig;\n        const vpsc::Rectangle* targetRect;\n        ResizeInfo(Node* v, const vpsc::Rectangle* target)\n            : orig(v), \n              targetRect(target),\n              lhsNode(nullptr),\n              rhsNode(nullptr) { };\n        Node *lhsNode, *rhsNode;\n    };\n    typedef std::map<unsigned, ResizeInfo> ResizeMap;\n    void applyResizes(Nodes& nodes, Edges& edges, \n            cola::RootCluster *clusters, ResizeMap& resizes,\n            vpsc::Variables& xvs, vpsc::Constraints& xcs, \n            vpsc::Variables& yvs, vpsc::Constraints& ycs);\n    /*\n     * compute the p-stress over a set of edge paths:\n     * \\f[\n     *   \\sigma = \\sum_{e \\in E} \\left( d_e - \\sum_{s \\in S(e)} |s| \\right)^2\n     * \\f]\n     */\n    double computeStress(const Edges& es);\n} // namespace topology\n#endif // TOPOLOGY_CONSTRAINTS_H\n"
  },
  {
    "path": "cola/libtopology/topology_constraints_constructor.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libtopology - Classes used in generating and managing topology constraints.\n *\n * Copyright (C) 2007-2010  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n * Author(s):  Tim Dwyer\n *             Michael Wybrow\n*/\n\n/*\n * Everything in here is related to creating a topology_constraints instance.\n * The main complexity here is the definition of structures representing events\n * in a plane scan algorithm for generating topology constraints between\n * rectangles and line segments. \n * \\file topology_constraints_constructor.cpp\n * \\author Tim Dwyer\n * \\date Dec 2007\n */\n#include \"libvpsc/assertions.h\"\n#include \"libvpsc/constraint.h\"\n#include \"libcola/cola.h\"\n#include \"libcola/straightener.h\"\n#include \"libcola/cluster.h\"\n\n#include \"libtopology/topology_log.h\"\n#include \"libtopology/topology_graph.h\"\n#include \"libtopology/topology_constraints.h\"\nusing namespace std;\nusing vpsc::Rectangle;\nnamespace topology {\nstruct SegmentOpen;\nstruct NodeOpen;\ntypedef list<SegmentOpen*> OpenSegments;\ntypedef map<double,NodeOpen*> OpenNodes;\n\n/*\n * The scan algorithm works by processing events in the order they \n * are encountered by the scan line.\n */\nstruct Event {\n    // an event is either an opening or closing of some object\n    bool open;\n    // the position of the scan line at which the event is triggered\n    double pos;\n    vpsc::Dim scanDim;\n    Event(bool open, double pos) : open(open), pos(pos), scanDim(vpsc::UNSET) {}\n    virtual ~Event() {};\n    /*\n     * process is called for each event in pos order as part of the scan\n     * algorithm to generate topology constraints.\n     */\n    virtual void process(OpenNodes& openNodes, OpenSegments& openSegments) = 0;\n    virtual string toString() = 0;\n};\n/*\n * There is a NodeEvent for the top and bottom (or left and right sides depending on\n * scan direction) of the rectangle associated with each node\n */\nstruct NodeEvent : Event {\n    Node *node;\n    NodeEvent(bool open, double pos, Node *v)\n        : Event(open,pos), node(v)\n    {\n    }\n    ~NodeEvent(){}\n    /*\n     * Topology constraints are generated for the opening and closing \n     * edges of each node and every open segment at pos.\n     */\n    void createStraightConstraints(OpenSegments& openSegments,\n            const Node *leftNeighbour, const Node *rightNeighbour);\n};\n/*\n * at node openings the node is placed in the list of #openNodes and a\n * topology constraint is created for one side of the node rectangle and\n * every open segment.\n */\nstruct NodeOpen : NodeEvent {\n    /// position in openNodes\n    OpenNodes::iterator openListIndex;\n    NodeOpen(vpsc::Dim dim, Node *node)\n        : NodeEvent(true,node->rect->getMinD(vpsc::conjugate(dim)),node)\n    {\n        scanDim = dim;\n    }\n    void process(OpenNodes& openNodes, OpenSegments& openSegments)\n    {\n        FILE_LOG(logDEBUG) << \"NodeOpen::process()\";\n        pair<OpenNodes::iterator,bool> r =\n            openNodes.insert(make_pair(node->rect->getCentreD(scanDim),this));\n        // the following test fails if there is already an entry in\n        // openNodes at this position\n        //COLA_ASSERT(r.second);\n        if(!r.second) {\n            const Node *n1=node;\n            const Node *n2=((r.first)->second)->node;\n            printf(\"scanpos %f, duplicate in open list at position: %f\\n\",pos,\n                   n1->rect->getCentreD(scanDim));\n            printf(\"  id1=%d, id2=%d\\n\",n1->id, n2->id);\n        }\n        COLA_ASSERT(r.second);\n        openListIndex = r.first;\n        OpenNodes::iterator right=openListIndex, left=openListIndex;\n        Node *leftNeighbour=nullptr, *rightNeighbour=nullptr;\n        if(left!=openNodes.begin()) {\n            leftNeighbour=(--left)->second->node;\n        }\n        if((++right)!=openNodes.end()) {\n            rightNeighbour=right->second->node;\n        }\n        createStraightConstraints(openSegments, leftNeighbour,rightNeighbour);\n    }\n    string toString() {\n        stringstream s;\n        s<<\"NodeOpen@\"<<pos;\n        return s.str();\n    }\n};\n/*\n * at node closings the node is removed from the list of #openNodes and\n * topology constraints are created for the remaining side of the node\n * rectangle and every open segment.  Also, non-overlap constraints\n * are created between the node and its immediate neighbours in openNodes.\n */\nstruct NodeClose : NodeEvent {\n    /* we store the opening corresponding to this closing so that we can\n     * delete it and remove it from the list of OpenNodes.\n     */\n    NodeOpen* opening;\n    vpsc::Constraints& cs;\n    NodeClose(vpsc::Dim dim, Node* node, NodeOpen* o, vpsc::Constraints& cs)\n        : NodeEvent(false,node->rect->getMaxD(vpsc::conjugate(dim)),node)\n        , opening(o)\n        , cs(cs)\n    {\n        COLA_ASSERT(opening->node == node);\n        scanDim = dim;\n    }\n    void createNonOverlapConstraint(const Node* left, const Node* right)\n    {\n        FILE_LOG(logDEBUG)<<\"NodeClose::createNonOverlapConstraint left=\"<<left<<\" right=\"<<right;\n        //double overlap = left->rect->overlapD(vpsc::conjugate(scanDim),right->rect);\n        //if(overlap>1e-5) {\n            double g = left->rect->length(scanDim) + right->rect->length(scanDim);\n            g/=2.0;\n            //if(scanDim==vpsc::HORIZONTAL) {\n                g+=1e-7;\n            //}\n            //COLA_ASSERT(l->getPosition() + g <= r->getPosition());\n            cs.push_back(new vpsc::Constraint(left->var, right->var, g));\n        //}\n    }\n    /*\n     * remove opening from openNodes, cleanup, and generate\n     * TopologyConstraints.\n     */\n    void process(OpenNodes& openNodes, OpenSegments& openSegments)\n    {\n        FILE_LOG(logDEBUG) << \"NodeClose::process()\";\n        OpenNodes::iterator nodePos=opening->openListIndex;\n        OpenNodes::iterator right=nodePos, left=nodePos;\n        Node *leftNeighbour=nullptr, *rightNeighbour=nullptr;\n        if(left!=openNodes.begin()) {\n            leftNeighbour=(--left)->second->node;\n            createNonOverlapConstraint(leftNeighbour,node);\n        }\n        if((++right)!=openNodes.end()) {\n            rightNeighbour=right->second->node;\n            createNonOverlapConstraint(node,rightNeighbour);\n        }\n        openNodes.erase(nodePos);\n        delete opening;\n        // create StraightConstraint from scanpos in every open edge \n        // visible before left and right from node\n        createStraightConstraints(openSegments, leftNeighbour,rightNeighbour);\n        delete this;\n    }\n    string toString() {\n        stringstream s;\n        s<<\"NodeClose@\"<<pos;\n        return s.str();\n    }\n};\n/*\n * Segment events occur at each end of a segment\n */\nstruct SegmentEvent : Event {\n    Segment *s;\n    SegmentEvent(vpsc::Dim dim, bool open, EdgePoint* v, Segment *s)\n        : Event(open,v->pos(vpsc::conjugate(dim))), s(s) {}\n};\n/*\n * at a segment open we add the segment to the list of open segments\n */\nstruct SegmentOpen : SegmentEvent {\n    /// position in openSegments\n    OpenSegments::iterator openListIndex;\n    SegmentOpen(vpsc::Dim dim, Segment *s)\n        : SegmentEvent(dim, true,s->getMin(dim),s)\n    {\n        scanDim = dim;\n    }\n    /// add to list of open segments\n    void process(OpenNodes& openNodes, OpenSegments& openSegments)\n    {\n        COLA_UNUSED(openNodes);\n\n        openListIndex=openSegments.insert(openSegments.end(),this);\n    }\n    string toString() {\n        stringstream s;\n        s<<\"SegmentOpen@\"<<pos;\n        return s.str();\n    }\n};\n/*\n * at a segment closing we remove the segment from the list of openings and cleanup\n */\nstruct SegmentClose : SegmentEvent {\n    /// opening corresponding to this closing\n    SegmentOpen* opening;\n    SegmentClose(vpsc::Dim dim, Segment *s, SegmentOpen* so)\n        : SegmentEvent(dim, false,s->getMax(dim),s), opening(so)\n    {\n        COLA_ASSERT(opening->s==s);\n        scanDim = dim;\n    }\n    void process(OpenNodes& openNodes, OpenSegments& openSegments)\n    {\n        COLA_UNUSED(openNodes);\n\n        openSegments.erase(opening->openListIndex);\n        delete opening;\n        delete this;\n    }\n    string toString() {\n        stringstream s;\n        s<<\"SegmentClose@\"<<pos;\n        return s.str();\n    }\n};\n/* \n * Create topology constraint from scanpos in every open segment to node.\n * Segments must not be on-top-of rectangles.\n */\nvoid NodeEvent::createStraightConstraints(OpenSegments& openSegments,\n        const Node* leftNeighbour, const Node* rightNeighbour) {\n    FILE_LOG(logDEBUG)<<\"NodeEvent::createStraightConstraints():node->id=\"<<node->id<<\" pos=\"<<pos;\n    const double \n        leftLimit=leftNeighbour?leftNeighbour->rect->getCentreD(scanDim):-DBL_MAX,\n        rightLimit=rightNeighbour?rightNeighbour->rect->getCentreD(scanDim):DBL_MAX;\n    for(OpenSegments::iterator j=openSegments.begin(); j!=openSegments.end();++j) {\n        Segment* s=(*j)->s;\n        if ( (s->start->node->id==node->id \n                && s->start->rectIntersect==EdgePoint::CENTRE)\n          || (s->end->node->id==node->id\n                && s->end->rectIntersect==EdgePoint::CENTRE) )\n        {\n            FILE_LOG(logDEBUG1)<<\n                    \"  Not creating because segment is attached to this node!\";\n            continue;\n        } \n        const double p = s->forwardIntersection(scanDim, pos);\n        if ( (p<leftLimit&&pos>leftNeighbour->rect->getMinD(vpsc::conjugate(scanDim))&&\n                pos<leftNeighbour->rect->getMaxD(vpsc::conjugate(scanDim)))\n          || (p>rightLimit&&pos>rightNeighbour->rect->getMinD(vpsc::conjugate(scanDim))&&\n                pos<rightNeighbour->rect->getMaxD(vpsc::conjugate(scanDim))) )\n        { \n            FILE_LOG(logDEBUG1)<<\n                    \"  Skipping because segment is not visible from this node!\";\n            continue;\n        }\n        s->createStraightConstraint(scanDim, node,pos);\n    }\n}\nstruct CompareEvents {\n    bool operator() (Event *const &a, Event *const &b) const {\n        if(a==b) {\n            // Irreflexivity\n            return false;\n        }\n        if(a->pos < b->pos) {\n            return true;\n        } else if(a->pos==b->pos) {\n            NodeOpen *aNO=dynamic_cast<NodeOpen*>(a),\n                     *bNO=dynamic_cast<NodeOpen*>(b);\n            NodeClose *aNC=dynamic_cast<NodeClose*>(a),\n                      *bNC=dynamic_cast<NodeClose*>(b);\n            SegmentOpen *aSO=dynamic_cast<SegmentOpen*>(a),\n                     *bSO=dynamic_cast<SegmentOpen*>(b);\n            SegmentClose *aSC=dynamic_cast<SegmentClose*>(a),\n                      *bSC=dynamic_cast<SegmentClose*>(b);\n\n            // segment opens before closes so that we handle\n            // segments parallel to the scan line properly\n            if(aSO&&bSC) return true;\n            if(aSC&&bSO) return false;\n            // Segment closes at same pos as Node opens, Segment first\n            if(aSC&&bNO) return true;\n            if(bSC&&aNO) return false;\n            // Segment opens at the same position as Node closes, Node first\n            if(aSO&&bNC) return false;\n            if(bSO&&aNC) return true;\n            // Segment opens at the same position as node opens, segment\n            // comes first\n            if(aSO&&bNO) return true;\n            if(bSO&&aNO) return false;\n            // Segment closes at the same position as node closes, node\n            // comes first\n            if(aSC&&bNC) return false;\n            if(bSC&&aNC) return true;\n\n            // close nodes before we open new ones so we don't generate\n            // unnecessary non-overlap constraints\n            if(aNO&&bNC) {\n                COLA_ASSERT(aNO->node!=bNC->node); // no zero height nodes thanks!\n                return false;\n            }\n            if(aNC&&bNO) {\n                COLA_ASSERT(aNC->node!=bNO->node); \n                return true;\n            }\n        }\n        // Transitivity of equivalence\n        return false;\n    }\n};\nTriConstraint::TriConstraint(vpsc::Dim dim, const Node *u, const Node *v,\n        const Node *w, double p, double g, bool left)\n    : u(u), v(v), w(w), p(p), g(g), leftOf(left), scanDim(dim)\n{\n    COLA_ASSERT(assertFeasible());\n}\n\nbool Segment::createStraightConstraint(vpsc::Dim scanDim, Node* node, double pos)\n{\n    COLA_ASSERT((scanDim==vpsc::XDIM)||(scanDim==vpsc::YDIM));\n    // no straight constraints between a node directly connected by its CENTRE \n    // to this segment.\n    COLA_ASSERT(!connectedToNode(node));\n    const double top = max(end->pos(vpsc::conjugate(scanDim)), start->pos(vpsc::conjugate(scanDim))),\n                 bottom = min(end->pos(vpsc::conjugate(scanDim)),start->pos(vpsc::conjugate(scanDim)));\n    // segments orthogonal to scan direction need no StraightConstraints\n    FILE_LOG(logDEBUG)<<\"Segment::createStraightConstraint, node->id=\"<<node->id<<\", edge->id=\"<<edge->id<<\" pos=\"<<pos;\n    if(top==bottom) {\n        FILE_LOG(logDEBUG1)<<\"  Not creating because segment is orthogonal to scan direction!\";\n        return false;\n    }\n    // segment must overlap in the scan dimension with the potential bend point\n    //COLA_ASSERT(bottom<=pos);\n    //COLA_ASSERT(top>=pos);\n    vpsc::Rectangle* r=node->rect;\n    FILE_LOG(logDEBUG1)<<\"Segment: from {\"<<start->pos(scanDim)<<\",\"<<start->pos(vpsc::conjugate(scanDim))<<\"},{\"<<end->pos(scanDim)<<\",\"<<end->pos(vpsc::conjugate(scanDim))<<\"}\";\n    FILE_LOG(logDEBUG1)<<\"Node: rect \"<<*r;\n    // determine direction of constraint based on intersection of segment with\n    // scan line, i.e. set nodeLeft based on whether the intersection of the\n    // potential bend point is to the left or right of the node centre\n    double p;\n    bool nodeLeft=r->getCentreD(scanDim) < forwardIntersection(scanDim, pos,p) ;\n    // set ri (the vertex of the node rectangle that is to be \n    // kept to the left of the segment\n    EdgePoint::RectIntersect ri;\n    if(scanDim==vpsc::HORIZONTAL) {\n        ri=pos < r->getCentreY()\n             ? (nodeLeft ? EdgePoint::BR : EdgePoint::BL)\n             : (nodeLeft ? EdgePoint::TR : EdgePoint::TL);\n    } else {\n        ri=pos < r->getCentreX()\n             ? (nodeLeft ? EdgePoint::TL : EdgePoint::BL)\n             : (nodeLeft ? EdgePoint::TR : EdgePoint::BR);\n    }\n    if(node->id==start->node->id  && ri==start->rectIntersect) {\n        FILE_LOG(logDEBUG1)<<\"Not creating StraightConstraint because bend point is already a real bend associated with the start EdgePoint of this segment!\";\n        return false;\n    }\n    if(node->id==end->node->id  && ri==end->rectIntersect) {\n        FILE_LOG(logDEBUG1)<<\"Not creating StraightConstraint because bend point is already a real bend associated with the end EdgePoint of this segment!\";\n        return false;\n    }\n    straightConstraints.push_back(\n            new StraightConstraint(this, scanDim, node, ri, pos, p, nodeLeft));\n    return true;\n}\n\n/*\n * creates a copy of the StraightConstraint in our own straightConstraints\n * list, but only if this segment is not directly connected to the centre\n * of the StraightConstraint node.\n * @param s the StraightConstraint to be copied across\n */\nvoid Segment::transferStraightConstraint(StraightConstraint* s) {\n    if(!connectedToNode(s->node)) {\n        createStraightConstraint(s->scanDim, s->node,s->pos);\n    }\n}\n/*\n * create a constraint between a segment and a node that is\n * activated when the segment needs to be bent (divided into\n * two new segments\n * @param s the segment\n * @param node the node\n * @param pos the position in !dim (i.e. position of scan line) at\n * which to create the constraint\n */\nStraightConstraint::StraightConstraint(Segment* s, vpsc::Dim dim,\n        Node* node,\n        const EdgePoint::RectIntersect ri,\n        const double scanPos,\n        const double segmentPos,\n        const bool nodeLeft) \n    : TopologyConstraint(dim), segment(s), node(node), ri(ri), pos(scanPos)\n{\n    FILE_LOG(logDEBUG)<<\"StraightConstraint ctor: pos=\"<<pos<<\" edge id=\"<<s->edge->id<<\" node id=\"<<node->id;\n    EdgePoint *u=s->start, *v=s->end;\n    FILE_LOG(logDEBUG1)<<\"s->start: id=\"<<u->node->id\n        <<\", ri=\"<<u->rectIntersect<<\", x=\"<<u->posX()<<\", y=\"<<u->posY();\n    FILE_LOG(logDEBUG1)<<\"node:     id=\"<<node->id\n        <<\", ri=\"<<ri<<\", scanpos=\"<<scanPos;\n    FILE_LOG(logDEBUG1)<<\"s->end:   id=\"<<v->node->id\n        <<\", ri=\"<<v->rectIntersect<<\", x=\"<<v->posX()<<\", y=\"<<v->posY();\n    \n    double g=u->offset(scanDim)+segmentPos*(v->offset(scanDim)-u->offset(scanDim));\n    if(nodeLeft) {\n        g-=node->rect->length(scanDim)/2.0;\n    } else {\n        g+=node->rect->length(scanDim)/2.0;\n    }\n    c=new TriConstraint(scanDim, u->node,v->node,node,segmentPos,g,nodeLeft);\n    assertFeasible();\n}\n/*\n * create a constraint between the two segments joined by this\n * EdgePoint such that the constraint is activated when the segments\n * are aligned.\n * @param bendPoint the articulation point\n */\nBendConstraint::BendConstraint(EdgePoint* v, vpsc::Dim dim)\n    : TopologyConstraint(dim),\n      bendPoint(v)\n{\n    FILE_LOG(logDEBUG)<<\"BendConstraint ctor, pos=\"<<v->pos(vpsc::conjugate(dim));\n    COLA_ASSERT(v->inSegment!=nullptr);\n    COLA_ASSERT(v->outSegment!=nullptr);\n    // v must be a bend point around some node\n    COLA_ASSERT(!v->isEnd());\n    COLA_ASSERT(v->rectIntersect!=EdgePoint::CENTRE);\n    EdgePoint *u=v->inSegment->start, *w=v->outSegment->end;\n    COLA_ASSERT(v->assertConvexBend());\n    bool leftOf=false;\n    if(dim==vpsc::HORIZONTAL) {\n        if(v->rectIntersect==EdgePoint::TR || v->rectIntersect==EdgePoint::BR) {\n            leftOf=true;\n        }\n    } else {\n        if(v->rectIntersect==EdgePoint::TL || v->rectIntersect==EdgePoint::TR) {\n            leftOf=true;\n        }\n    }\n    FILE_LOG(logDEBUG1)<<\"u: id=\"<<u->node->id\n        <<\", ri=\"<<u->rectIntersect<<\", x=\"<<u->posX()<<\", y=\"<<u->posY();\n    FILE_LOG(logDEBUG1)<<\"v: id=\"<<v->node->id\n        <<\", ri=\"<<v->rectIntersect<<\", x=\"<<v->posX()<<\", y=\"<<v->posY();\n    FILE_LOG(logDEBUG1)<<\"w: id=\"<<w->node->id\n        <<\", ri=\"<<w->rectIntersect<<\", x=\"<<w->posX()<<\", y=\"<<w->posY();\n    // bend constraint will be more accurate if the reference segment is the\n    // one most orthogonal to scan line.\n    double p;\n    if(v->inSegment->length(vpsc::conjugate(dim))>v->outSegment->length(vpsc::conjugate(dim))) {\n        v->inSegment->forwardIntersection(scanDim, w->pos(vpsc::conjugate(dim)),p);\n        double g=u->offset(scanDim)+p*(v->offset(scanDim)-u->offset(scanDim))-w->offset(scanDim);\n        c=new TriConstraint(scanDim, u->node,v->node,w->node,p,g,leftOf);\n    } else {\n        v->outSegment->reverseIntersection(scanDim, u->pos(vpsc::conjugate(dim)),p);\n        double g=w->offset(scanDim)+p*(v->offset(scanDim)-w->offset(scanDim))-u->offset(scanDim);\n        c=new TriConstraint(scanDim, w->node,v->node,u->node,p,g,leftOf);\n        FILE_LOG(logDEBUG1)<<\"  Reverse bend constraint!\";\n    }\n    assertFeasible();\n}\nstruct CreateBendConstraints\n{\n    CreateBendConstraints(vpsc::Dim dim)\n        : scanDim(dim)\n    { }\n    void operator() (EdgePoint *ep)\n    {\n        ep->createBendConstraint(scanDim);\n    }\n    vpsc::Dim scanDim;\n};\nstruct CreateSegmentEvents\n{\n    CreateSegmentEvents(vector<Event*>& events, vpsc::Dim dim)\n        : events(events),\n          scanDim(dim)\n    { }\n    void operator() (Segment* s)\n    {\n        // don't generate events for segments parallel to scan line\n        if (s->start->pos(vpsc::conjugate(scanDim)) !=\n                s->end->pos(vpsc::conjugate(scanDim)))\n        {\n            SegmentOpen *open=new SegmentOpen(scanDim, s);\n            SegmentClose *close=new SegmentClose(scanDim, s, open);\n            events.push_back(open);\n            events.push_back(close);\n        }\n    }\n    vector<Event*>& events;\n    vpsc::Dim scanDim;\n};\n\nbool TopologyConstraints::noOverlaps() const {\n    const double e=1e-7;\n    for(Nodes::const_iterator i=nodes.begin();i!=nodes.end();++i) {\n        const Node* u=*i;\n        for(Nodes::const_iterator j=nodes.begin();j!=nodes.end();++j) {\n            const Node* v=*j;\n            if(u==v) continue;\n            /*\n            cout<<\"checking overlap ru=\"<<*u->rect<<\" rv=\"<<*v->rect<<endl;\n            cout<<\"   overlapX=\"<<u->rect->overlapX(v->rect)<<endl;\n            cout<<\"   overlapY=\"<<u->rect->overlapY(v->rect)<<endl;\n            */\n            if(u->rect->overlapX(v->rect)>e) {\n                COLA_ASSERT(u->rect->overlapY(v->rect)<e);\n            }\n        }\n    }\n    return true;\n}\n\nstruct GetVariable {\n    vpsc::Variable* operator() (Node* n) {\n        return n->var;\n    }\n};\nvoid getVariables(Nodes& ns, vpsc::Variables& vs) {\n    COLA_ASSERT(vs.size()==0);\n    vs.resize(ns.size());\n    transform(ns.begin(),ns.end(),vs.begin(),GetVariable());\n}\ninline bool validTurn(EdgePoint* u, EdgePoint* v, EdgePoint* w) {\n    double cpuvw = crossProduct(u->posX(),u->posY(),v->posX(),v->posY(),\n            w->posX(),w->posY());\n    if(cpuvw==0) { // colinear: can safely remove v\n        return true;\n    }\n    // r is the shape that v turns around\n    vpsc::Rectangle* r=v->node->rect;\n    double rx = r->getCentreX(), ry = r->getCentreY();\n    double cpuvr = crossProduct(u->posX(),u->posY(),v->posX(),v->posY(),rx,ry);\n    double cpvwr = crossProduct(v->posX(),v->posY(),w->posX(),w->posY(),rx,ry);\n    if(cpuvw*cpuvr>0 && cpuvw*cpvwr>0) {\n        return true;\n    }\n    return false;\n}\nstruct PruneDegenerate {\n    PruneDegenerate(vpsc::Dim dim, list<EdgePoint*>& pruneList)\n        : pruneList(pruneList),\n          scanDim(dim)\n    {\n    }\n    void operator() (EdgePoint* p) {\n        if(p->inSegment && p->outSegment) {\n            EdgePoint *o=p->inSegment->start, *q=p->outSegment->end;\n            double inSegLen = p->inSegment->length(), \n                   outSegLen = p->outSegment->length();\n            if(inSegLen>0 && outSegLen>0\n                    && o->pos(vpsc::conjugate(scanDim))==p->pos(vpsc::conjugate(scanDim))\n                    && p->pos(vpsc::conjugate(scanDim))==q->pos(vpsc::conjugate(scanDim))) {\n                FILE_LOG(logDEBUG)<<\"EdgePoint collinear in scan dimension!\";\n                FILE_LOG(logDEBUG)<<\"  need to prune\";\n                pruneList.push_back(p);\n            } \n            if(inSegLen==0 && o->inSegment\n                    && !validTurn(o->inSegment->start,p,q)) {\n                COLA_ASSERT(validTurn(o->inSegment->start,o,q));\n                FILE_LOG(logDEBUG)<<\"Pruning node after 0 length segment!\";\n                pruneList.push_back(p);\n            } else if(outSegLen==0 && q->outSegment\n                    && !validTurn(o,p,q->outSegment->end)) {\n                COLA_ASSERT(validTurn(o,q,q->outSegment->end));\n                pruneList.push_back(p);\n            }\n        }\n    }\n    list<EdgePoint*>& pruneList;\n    vpsc::Dim scanDim;\n};\n\nstatic void recCreateTopologyClusterNodes(cola::Cluster *cluster, \n        const vpsc::Dim dim, Nodes& clusterNodes)\n{\n    if (cluster == nullptr)\n    {\n        return;\n    }\n\n    for (cola::Clusters::iterator i = cluster->clusters.begin(); \n            i != cluster->clusters.end(); ++i)\n    {\n        recCreateTopologyClusterNodes(*i, dim, clusterNodes);\n    }\n    \n    // ConvexClusters are handled as connectors by the topology layout, but\n    // for RectangularClusters we make each side look like a separate node\n    // of zero width/height in one dimenstion -- effectively a shape \n    // representing the border on each side of the cluster.\n    cola::RectangularCluster *rectCluster = \n            dynamic_cast<cola::RectangularCluster *> (cluster);\n    if (rectCluster)\n    {\n        clusterNodes.push_back(new Node(rectCluster->clusterVarId, \n                rectCluster->getMinEdgeRect(dim),\n                (dim == 0) ? rectCluster->vXMin : rectCluster->vYMin));\n        clusterNodes.push_back(new Node(rectCluster->clusterVarId + 1, \n                rectCluster->getMaxEdgeRect(dim),\n                (dim == 0) ? rectCluster->vXMax : rectCluster->vYMax));\n    }\n}\n\nTopologyConstraints::TopologyConstraints(const vpsc::Dim axisDim, Nodes& nodes,\n        Edges& edges, cola::RootCluster* clusterHierarchy, vpsc::Variables& vs,\n        vpsc::Constraints& cs)\n    : n(nodes.size()),\n      nodes(nodes),\n      edges(edges),\n      clusters(clusterHierarchy),\n      vs(vs),\n      cs(cs),\n      dim(axisDim)\n{\n    /*\n     * open segments are scanned on node openings and closings to create\n     * topology constraints between the node and each open segment\n     */\n    OpenSegments openSegments;\n    /*\n     * open nodes are stored in a map keyed on position along scan line.\n     * We use this to find neighbouring rectangles at a NodeClose event\n     * so that we can generate non-overlap constraints between the closing\n     * node and its immediate neighbours.\n     * Note that this assumes no overlaps between rectangles.\n     */\n    OpenNodes openNodes;\n\n    FILELog::ReportingLevel() = logERROR;\n    //FILELog::ReportingLevel() = logDEBUG1;\n    FILE_LOG(logDEBUG)<<\"TopologyConstraints::TopologyConstraints():dim=\"<<axisDim;\n    COLA_ASSERT(vs.size()>=n);\n    COLA_ASSERT(noOverlaps());\n    COLA_ASSERT(assertNoSegmentRectIntersection(nodes,edges));\n\n    vector<Event*> events;\n    \n    // We handle rectangular cluster non-overlap by creating two fake shapes \n    // for each cluster with zero width for the left and right side cluster \n    // edges.\n    Nodes clusterNodes;\n    recCreateTopologyClusterNodes(clusterHierarchy, dim, clusterNodes);\n    \n    // allNodes is a set of nodes representing topologyNodes and the clusters.\n    Nodes allNodes = nodes;\n    allNodes.insert(allNodes.end(), clusterNodes.begin(), clusterNodes.end());\n\n    // Scan vertically to create horizontal topology constraints.\n    // Place Segment opening/closing and Rectangle opening/closing into \n    // the event queue\n    for (Nodes::const_iterator i = allNodes.begin(), e = allNodes.end();\n            i != e; ++i)\n    {\n        Node* v=*i;\n        NodeOpen *open=new NodeOpen(dim, v);\n        NodeClose *close=new NodeClose(dim, v,open,cs);\n        events.push_back(open);\n        events.push_back(close);\n    }\n    list<EdgePoint*> pruneList;\n    for(Edges::const_iterator i=edges.begin(),e=edges.end();i!=e;++i) {\n        (*i)->forEachEdgePoint(PruneDegenerate(dim,pruneList),true);\n    }\n    for(list<EdgePoint*>::iterator i=pruneList.begin(), e=pruneList.end();\n            i!=e; ++i) {\n        (*i)->prune(dim);\n    }\n    COLA_ASSERT(assertNoZeroLengthEdgeSegments(edges));\n    for(Edges::const_iterator i=edges.begin(),e=edges.end();i!=e;++i) {\n        (*i)->forEach(CreateBendConstraints(dim),\n                CreateSegmentEvents(events, dim),true);\n    }\n    // process events in top to bottom order\n    sort(events.begin(),events.end(),CompareEvents());\n    for (vector<Event *>::iterator curr = events.begin();\n            curr != events.end(); ++curr)\n    {\n        (*curr)->process(openNodes, openSegments);\n    }\n    COLA_ASSERT(openSegments.empty());\n    COLA_ASSERT(openNodes.empty());\n    COLA_ASSERT(assertFeasible());\n    FILE_LOG(logDEBUG)<<\"TopologyConstraints::TopologyConstraints()... done.\";\n    // Delete the temporary clusterNodes.\n    for_each(clusterNodes.begin(), clusterNodes.end(), delete_object());\n}\n\nTopologyConstraints::\n~TopologyConstraints() {\n    for(Edges::const_iterator i=edges.begin(),e=edges.end();i!=e;++i) {\n        (*i)->forEach(mem_fn(&EdgePoint::deleteBendConstraint),\n                mem_fn(&Segment::deleteStraightConstraints),true);\n    }\n}\n} // namespace topology\n"
  },
  {
    "path": "cola/libtopology/topology_graph.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libtopology - Classes used in generating and managing topology constraints.\n *\n * Copyright (C) 2007-2008  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n*/\n\n// sstream needs ::strcpy_s under MinGW so include cstring.\n#include <cstring>\n\n#include <sstream>\n#include <stdexcept>\n\n#include \"libvpsc/assertions.h\"\n#include \"libvpsc/rectangle.h\"\n#include \"libcola/cola.h\"\n#include \"libcola/straightener.h\"\n\n#include \"libtopology/topology_log.h\"\n#include \"libtopology/topology_graph.h\"\n#include \"libtopology/topology_constraints.h\"\n\nusing namespace std;\n\n\nnamespace topology {\n\nvoid setNodeVariables(Nodes& ns, std::vector<vpsc::Variable*>& vs) {\n    COLA_ASSERT(ns.size()<=vs.size());\n    std::vector<vpsc::Variable*>::iterator v=vs.begin();\n    for(Nodes::iterator i=ns.begin();i!=ns.end();++i,++v) {\n        (*i)->var=(*v);\n    }\n}\n\nstatic const double POSITION_LIMIT = 1000000;\n\nNode::Node(unsigned id, vpsc::Rectangle* r, vpsc::Variable* v)\n    : id(id), rect(r), var(v)\n{ \n    COLA_ASSERT(initialPos(vpsc::XDIM) >- POSITION_LIMIT);\n    COLA_ASSERT(initialPos(vpsc::XDIM) < POSITION_LIMIT);\n\n    COLA_ASSERT(initialPos(vpsc::YDIM) >- POSITION_LIMIT);\n    COLA_ASSERT(initialPos(vpsc::YDIM) < POSITION_LIMIT);\n}\nvoid Node::setDesiredPos(double d, double weight) {\n    var->desiredPosition=d;\n    var->weight=weight;\n}\ndouble Node::initialPos(vpsc::Dim scanDim) const {\n    return rect->getCentreD(scanDim);\n}\ndouble Node::finalPos() const {\n    return var->finalPosition;\n}\ndouble Node::posOnLine(vpsc::Dim scanDim, double alpha) const {\n    double i=initialPos(scanDim);\n    double d=finalPos()-i;\n    return i+alpha*d; \n}\nvoid EdgePoint::deleteBendConstraint() {\n    if(bendConstraint) {\n        delete bendConstraint;\n        bendConstraint=nullptr;\n    }\n}\nEdgePoint::~EdgePoint() {\n    deleteBendConstraint();\n}\nSegment* EdgePoint::prune(vpsc::Dim scanDim) {\n    Edge* e = inSegment->edge;\n    EdgePoint* start = inSegment->start,\n             * end = outSegment->end;\n    Segment* s = new Segment(e,start,end);\n    if(e->lastSegment==inSegment && e->firstSegment==outSegment) {\n        FILE_LOG(logDEBUG)<<\"  handling cyclical boundary.\";\n        e->firstSegment=s;\n        e->lastSegment=start->inSegment;\n    }\n    if(e->firstSegment==inSegment) {\n        e->firstSegment=s;\n    }\n    if(e->lastSegment==outSegment) {\n        e->lastSegment=s;\n    }\n    // transfer each StraightConstraint from inSegment and outSegment\n    // to new Segment s.\n    Segment::TransferStraightConstraint transfer = \n        std::bind(&Segment::transferStraightConstraint,s,std::placeholders::_1);\n    inSegment->forEachStraightConstraint(transfer);\n    outSegment->forEachStraightConstraint(transfer);\n\n    // update the BendConstraints associated with the end EdgePoints of\n    // the new segment\n    start->createBendConstraint(scanDim);\n    end->createBendConstraint(scanDim);\n\n    e->nSegments--;\n    delete inSegment;\n    delete outSegment;\n    delete this;\n    return s;\n}\nbool EdgePoint::createBendConstraint(vpsc::Dim scanDim) {\n    // edges shouldn't double back!\n    COLA_ASSERT(assertConvexBend());\n    // we replace any existing bend constraint\n    if(bendConstraint) {\n        delete bendConstraint;\n        bendConstraint=nullptr;\n    }\n    // don't generate BendConstraints for Edge end points\n    if(isEnd()) {\n        return false;\n    }\n    // don't try to generate a BendConstraint if both incident segments\n    // are parallel to the scan dimension\n    if(inSegment->length(vpsc::conjugate(scanDim)) == 0 &&\n       outSegment->length(vpsc::conjugate(scanDim)) == 0) {\n        return false;\n    }\n    bendConstraint = new BendConstraint(this, scanDim);\n    return true;\n}\nvoid EdgePoint::getBendConstraint(vector<TopologyConstraint*>* ts) {\n    if(bendConstraint) {\n        ts->push_back(bendConstraint);\n    }\n}\ndouble EdgePoint::pos(vpsc::Dim dim) const {\n    double p;\n    vpsc::Rectangle* r=node->rect;\n    switch(rectIntersect) {\n        case TL:\n            p=dim==vpsc::XDIM?\n                r->getMinX():r->getMaxY();\n            break;\n        case TR:\n            p=r->getMaxD(dim);\n            break;\n        case BL:\n            p=r->getMinD(dim);\n            break;\n        case BR:\n            p=dim==vpsc::XDIM?\n                r->getMaxX():r->getMinY();\n            break;\n        default:\n            p=r->getCentreD(dim);\n    }\n    return p;\n}\ndouble EdgePoint::offset(vpsc::Dim dim) const\n{\n    if(rectIntersect==CENTRE) {\n        return 0;\n    }\n    double o = node->rect->length(dim)/2.0;\n    if ((dim==vpsc::XDIM && (rectIntersect == TL || rectIntersect == BL)) ||\n        (dim==vpsc::YDIM && (rectIntersect == BL || rectIntersect == BR)))\n        {\n            return -o;\n        }\n        return o;\n    }\n    /*\n     * @return true if the EdgePoint is the end of an edge.\n     * Note that cluster boundary edges are cycles, and therefore have no\n     * ends.\n     */\n    bool EdgePoint::isEnd() const {\n        if(outSegment==nullptr || inSegment==nullptr) {\n            return true;\n        }\n        return false;\n    }\ninline void normalise(double& x, double& y) {\n    double l=sqrt(x*x+y*y);\n    x/=l;\n    y/=l;\n}\nbool EdgePoint::assertConvexBend() const {\n    const double eps=1e-7;\n    if(inSegment && outSegment \n       && inSegment->length()>eps && outSegment->length()>eps) \n    {\n        EdgePoint* u=inSegment->start;\n        EdgePoint* w=outSegment->end;\n        // cp>0: left turn, cp<0: right turn\n        double cp = crossProduct(u->posX(),u->posY(),posX(),posY(),w->posX(),w->posY());\n        double dx = w->posX() - u->posX(), dy = w->posY() - u->posY();\n        try {\n            if( rectIntersect==CENTRE ) {\n                throw runtime_error(\"Bend point is CENTRE connected!\");\n            }\n            if( u->node->id==node->id && u->rectIntersect==rectIntersect ) {\n                throw runtime_error(\"Consecutive end points the same!\");\n            }\n            if(w->node->id==node->id&&w->rectIntersect==rectIntersect) {\n                throw runtime_error(\"Consecutive end points the same!\");\n            }\n            if(u->node->id==w->node->id&&u->rectIntersect==w->rectIntersect) {\n                throw runtime_error(\"Two points on same edge the same!\");\n            }\n            // monotonicity:\n            if(!( (u->posX()<=posX()+eps && posX()<=w->posX()+eps) ||\n                  (u->posX()>=posX()-eps && posX()>=w->posX()-eps))) \n            {\n                throw runtime_error(\"3 consecutive points not monotonically increasing in X!\\n\");\n            }\n            if(!( (u->posY()<=posY()+eps && posY()<=w->posY()+eps) ||\n                  (u->posY()>=posY()-eps && posY()>=w->posY()-eps)) )\n            {\n                throw runtime_error(\"3 consecutive points not monotonically increasing in Y!\\n\");\n            }\n            // ensure tight turn\n            if(fabs(dx)>eps && fabs(dy)>eps) {\n                switch(rectIntersect) {\n                    case TR:\n                        if(dx>0) { // ux<wx\n                            if(dy>0) { // uy<wy\n                                throw runtime_error(\"turn not tight: C1\");\n                            } else if(cp>eps) {\n                                throw runtime_error(\"turn not tight: C2\");\n                            }\n                        } else { // ux>=wx\n                            if(dy<0) {\n                                throw runtime_error(\"turn not tight: C3\");\n                            } else if(cp<-eps) {\n                                throw runtime_error(\"turn not tight: C4\");\n                            }\n                        }\n                        break;\n                    case BR:\n                        if(dx>0) { // ux<wx\n                            if(dy<0) {\n                                throw runtime_error(\"turn not tight: C5\");\n                            } else if(cp<-eps) {\n                                throw runtime_error(\"turn not tight: C6\");\n                            }\n                        } else { // ux>=wx\n                            if(dy>0) {\n                                throw runtime_error(\"turn not tight: C7\");\n                            } else if(cp>eps) {\n                                throw runtime_error(\"turn not tight: C8\");\n                            }\n                        }\n                        break;\n                    case BL:\n                        if(dx>0) { //ux<wx\n                            if(dy>0) {\n                                throw runtime_error(\"turn not tight: C9\");\n                            } else if(cp<-eps) {\n                                throw runtime_error(\"turn not tight: C10\");\n                            }\n                        } else { //ux>=wx\n                            if(dy<0) {\n                                throw runtime_error(\"turn not tight: C11\");\n                            } else if(cp>eps) {\n                                throw runtime_error(\"turn not tight: C12\");\n                            }\n                        }\n                        break;\n                    case TL:\n                        if(dx>0) { // ux<wx\n                            if(dy<0) { // uy>wy\n                                throw runtime_error(\"turn not tight: C13\");\n                            } else if(cp>eps) {\n                                throw runtime_error(\"turn not tight: C14\");\n                            }\n                        } else { // ux>=wx\n                            if(dy>0) {\n                                throw runtime_error(\"turn not tight: C15\");\n                            } else if(cp<-eps) {\n                                throw runtime_error(\"turn not tight: C16\");\n                            }\n                        }\n                        break;\n                    default:\n                        // a bend point must be associated with one of the\n                        // corners of a rectangle!\n                        COLA_ASSERT(false);\n                }\n            }\n        } catch(runtime_error & e) {\n            printf(\"  convexity bend point test failed: %s, dx=%f, dy=%f, cp=%f:\\n\",e.what(),dx,dy,cp);\n            printf(\"    (nid=%d,ri=%d):u={%f,%f}\\n\",\n                    u->node->id,u->rectIntersect,u->posX(),u->posY());\n            printf(\"    (nid=%d,ri=%d):v={%f,%f}\\n\",\n                    node->id,rectIntersect,posX(),posY());\n            printf(\"    (nid=%d,ri=%d):w={%f,%f}\\n\",\n                    w->node->id,w->rectIntersect,w->posX(),w->posY());\n            printf(\"    turn cross product=%e\\n\",cp);\n            cout<<\"Show[Graphics[{\"<<endl;\n            cout<<*u->node->rect<<\",\"<<*node->rect<<\",\"<<*w->node->rect<<\",\"<<endl;\n            cout<<inSegment->toString()<<\",\"<<outSegment->toString()<<endl;\n            cout<<\"}]]\"<<endl;\n            COLA_ASSERT(false);\n        }\n    } \n    return true;\n}\nbool Segment::connectedToNode(const Node* v) const {\n    if (start->rectIntersect == EdgePoint::CENTRE && start->node->id == v->id) {\n        return true;\n    }\n    if (end->rectIntersect == EdgePoint::CENTRE && end->node->id == v->id) {\n        return true;\n    }\n    return false;\n}\nvoid Segment::\ngetStraightConstraints(vector<TopologyConstraint*>* ts) const {\n    size_t n = ts->size();\n    ts->resize(n+straightConstraints.size());\n    copy(straightConstraints.begin(),straightConstraints.end(),\n            ts->begin()+n);\n}\nvoid Segment::deleteStraightConstraints() {\n    forEachStraightConstraint(delete_object());\n    straightConstraints.clear();\n}\n/*\n * clean up topologyConstraints\n */\nSegment::~Segment() {\n    deleteStraightConstraints();\n}\ndouble Segment::length(vpsc::Dim dim) const {\n    return fabs(end->pos(dim)-start->pos(dim));\n}\nvoid Segment::assertNonZeroLength() const {\n    if(length()==0) {\n        printf(\"segment length=%f\\n\",length());\n    }\n    //COLA_ASSERT(length()>0);\n}\ndouble Segment::length() const {\n    double dx = end->posX() - start->posX();\n    double dy = end->posY() - start->posY();\n    return sqrt(dx*dx + dy*dy);\n}\n\nstruct copyEdgePointsToRoute {\n    copyEdgePointsToRoute(straightener::Route* r) : x(r->xs), y(r->ys) {}\n    void operator() (const EdgePoint* p) {\n        *x++=p->posX();\n        *y++=p->posY();\n    }\n    double *x, *y;\n};\nstraightener::Route* Edge::getRoute() const {\n    straightener::Route* r = new straightener::Route(nSegments+1);\n    forEachEdgePoint(copyEdgePointsToRoute(r));\n    return r;\n}\nstruct accumulateLength {\n    accumulateLength(double& a) : a(a) {}\n    void operator()(const Segment* s) {\n        a+=s->length();\n    }\n    double& a;\n};\ndouble Edge::pathLength() const {\n    double totalLength = 0;\n    forEachSegment(accumulateLength(totalLength));\n    return totalLength;\n}\nbool Edge::assertConvexBends() const {\n    forEachEdgePoint(mem_fn(&EdgePoint::assertConvexBend),true);\n    return true;\n}\nstruct PointToString {\n    PointToString(stringstream& ss) : ss(ss) {}\n    void operator()(const EdgePoint* p) {\n        ss << *p->node->rect << \",\" <<endl;\n    }\n    stringstream& ss;\n};\nstruct SegmentToString {\n    SegmentToString(stringstream& ss) : ss(ss) {}\n    void operator()(const Segment* s) {\n        ss << s->toString() <<\",\";\n    }\n    stringstream& ss;\n};\nstring Segment::toString() const {\n    stringstream ss;\n    ss << \"Hue[0.77],\" << \"Line[{{\"<<start->posX()<<\",\"<<start->posY()<<\"},{\"\n        << end->posX()<<\",\"<<end->posY()<<\"}}]\";\n    return ss.str();\n}\nstring Edge::toString() const {\n    stringstream ss;\n    ss << \"Show[Graphics[{\";\n    forEach(PointToString(ss),SegmentToString(ss));\n    ss << \"}]]\" << endl;\n    return ss.str();\n}\nstruct buildPath {\n    buildPath(ConstEdgePoints& vs) : vs(vs) {}\n    void operator()(const EdgePoint* p) {\n        vs.push_back(p);\n    }\n    ConstEdgePoints& vs;\n};\n/*\n * Get a list of all the EdgePoints along the Edge path.  Note that for\n * cycles the start/end point will be at the start and end of the list,\n * i.e. it will appear in the list twice.\n */\nvoid Edge::getPath(ConstEdgePoints& vs) const {\n    forEachEdgePoint(buildPath(vs));\n}\nbool assertConvexBends(const Edges& es) {\n    for_each(es.begin(),es.end(),mem_fn(&Edge::assertConvexBends));\n    return true;\n}\n#ifndef NDEBUG\nstruct NoIntersection {\n    NoIntersection(const Nodes& vs) : vs(vs) {}\n    void operator()(const Segment* s) {\n        for(Nodes::const_iterator v=vs.begin();v!=vs.end();++v) {\n            if(s->start->node->id==(*v)->id || s->end->node->id==(*v)->id) {\n                continue;\n            }\n            if(s->start->node==s->end->node) {\n                COLA_ASSERT((s->start->rectIntersect==EdgePoint::BL && \n                                s->end->rectIntersect==EdgePoint::BR) ||\n                            (s->start->rectIntersect==EdgePoint::BR &&\n                                s->end->rectIntersect==EdgePoint::BL) ||\n                            (s->start->rectIntersect==EdgePoint::BL &&\n                                s->end->rectIntersect==EdgePoint::TL) ||\n                            (s->start->rectIntersect==EdgePoint::TL &&\n                                s->end->rectIntersect==EdgePoint::BL) ||\n                            (s->start->rectIntersect==EdgePoint::BR &&\n                                s->end->rectIntersect==EdgePoint::TR) ||\n                            (s->start->rectIntersect==EdgePoint::TR &&\n                                s->end->rectIntersect==EdgePoint::BR) ||\n                            (s->start->rectIntersect==EdgePoint::TL &&\n                                s->end->rectIntersect==EdgePoint::TR) || \n                            (s->start->rectIntersect==EdgePoint::TR &&\n                                s->end->rectIntersect==EdgePoint::TL));\n                continue;\n            }\n            double sx=s->start->posX(), sy=s->start->posY(),\n                   ex=s->end->posX(), ey=s->end->posY();\n            double xBorder=vpsc::Rectangle::xBorder;\n            double yBorder=vpsc::Rectangle::yBorder;\n            vpsc::Rectangle::setXBorder(xBorder-1e-6);\n            vpsc::Rectangle::setYBorder(yBorder-1e-6);\n            if((*v)->rect->overlaps(sx,sy,ex,ey)) {\n                printf(\"ERROR: Segment on edge id=%d overlaps Node id=%d\\n\",\n                        s->edge->id,(*v)->id);\n                COLA_ASSERT(false);\n            }\n            vpsc::Rectangle::setXBorder(xBorder);\n            vpsc::Rectangle::setYBorder(yBorder);\n        }\n    }\n    const Nodes& vs;\n};\nbool assertNoSegmentRectIntersection(\n        const Nodes& vs, const Edges& es) {\n    for(Edges::const_iterator e=es.begin();e!=es.end();++e) {\n        (*e)->forEachSegment(NoIntersection(vs));\n    }\n    return true;\n}\nbool assertNoZeroLengthEdgeSegments(const Edges& es) {\n    for(Edges::const_iterator e=es.begin();e!=es.end();++e) {\n        (*e)->forEachSegment(mem_fn(&Segment::assertNonZeroLength));\n    }\n    return true;\n}\nvoid printEdges(const Edges& es) {\n    for(Edges::const_iterator e=es.begin();e!=es.end();++e) {\n        cout<<(*e)->toString()<<endl;\n    }\n}\n#endif\n} // namespace topology\n\n"
  },
  {
    "path": "cola/libtopology/topology_graph.h",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libtopology - Classes used in generating and managing topology constraints.\n *\n * Copyright (C) 2007-2008  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n * Author(s):  Tim Dwyer\n*/\n\n/*\n * Class definitions for graph elements used in determining topology\n * preserving constraints.\n */\n\n#ifndef TOPOLOGY_GRAPH_H\n#define TOPOLOGY_GRAPH_H\n\n#include <vector>\n#include <functional>\n#include \"libvpsc/assertions.h\"\n#include \"libvpsc/rectangle.h\"\n\n#include \"libtopology/util.h\"\n\nnamespace vpsc {\n    class Variable;\n}\nnamespace straightener {\n    struct Route;\n}\nnamespace topology {\n    class Segment;\n    class TopologyConstraint;\n    class BendConstraint;\n    class StraightConstraint;\n    class Edge;\n    /**\n     * @brief  Topology representation for a node.\n     *\n     * Each node is associated with a rectangle and solver variables\n     * for the x and y axes.\n     *\n     * @note You shouldn't need to create these yourself, but you may\n     *       extract them from an existing ColaTopologyAddon and construct\n     *       a new ColaTopologyAddon with that same topology information.\n     */\n    class Node {\n    public:\n        // the index of the associated node / variable / rectangle\n        const unsigned id;\n        // the bounding box of the associated node\n        vpsc::Rectangle* rect;\n        /*\n         * When an edge path is being defined externally with a vector of\n         * EdgePoint, a variable would not be specified.\n         * @param id\n         * @param r\n         */\n        Node(unsigned id, vpsc::Rectangle *r, vpsc::Variable *v = nullptr);\n        void setDesiredPos(double d, double weight=1.0);\n        double initialPos(vpsc::Dim scanDim) const;\n        double finalPos() const;\n        double posOnLine(vpsc::Dim scanDim, double alpha) const;\n        vpsc::Variable* getVar() const { return var; }\n        // variable positions used by solver\n        vpsc::Variable* var;\n    };\n    /** \n     * @brief  A vector of pointers to Node objects.\n     */\n    typedef std::vector<Node *> Nodes;\n    /*\n     * let n=ns.size(), where n<=vs.size(), \n     * for i<n we set the variable for ns[i] to be vs[i].\n     */\n    void setNodeVariables(Nodes& ns, std::vector<vpsc::Variable*>& vs);\n    /*\n     * An EdgePoint is a point along an edge path.  It must correspond to\n     * either the middle of a Node (the start/end of the edge) or to a corner\n     * of a Node (a bend point around an edge).\n     */\n    class EdgePoint {\n    public:\n        // the node / variable / rectangle associated with this EdgePoint\n        Node* node;\n        // where the EdgePoint lies on the rectangle\n        enum RectIntersect { \n            TR, //< top right corner\n            BR, //< bottom right corner\n            BL, //< bottom left corner\n            TL, //< bends around rectangle's top-left corner\n            CENTRE //< connected to the rectangle's centre, hence the end of the edge.\n        } rectIntersect;\n        // the incoming segment to this EdgePoint on the edge path\n        Segment* inSegment;\n        // the outgoing segment to this EdgePoint on the edge path\n        Segment* outSegment;\n        /* each articulation EdgePoint (where isReal()==false) \n         *  will be assigned (not immediately) a bendConstraint\n         */\n        BendConstraint* bendConstraint;\n        // append bendConstraint (if not nullptr) to ts\n        void getBendConstraint(std::vector<TopologyConstraint*>* ts);\n        // @return true if constraint created\n        bool createBendConstraint(vpsc::Dim scanDim);\n        // delete the bendConstraint and reset pointer to nullptr\n        void deleteBendConstraint();\n        /*\n         * Constructor associates the point with a node vertex but\n         * not an edge.\n         */\n        EdgePoint(Node* n, RectIntersect i) \n                : node(n), rectIntersect(i)\n                , inSegment(nullptr), outSegment(nullptr) \n                , bendConstraint(nullptr)\n        {\n        }\n        /* \n         * @param dim the axis (either horizontal or\n         * vertical) of the coordinate to return\n         * @return the position, computed based on rectIntersect and rectangle\n         * vertices of the node\n         */\n        double pos(vpsc::Dim dim) const;\n        // @return x position\n        double posX() const { return pos(vpsc::HORIZONTAL); }\n        // @return y position\n        double posY() const { return pos(vpsc::VERTICAL); }\n        /* \n         *  @return where the EdgePoint on the rectangle as a vertex index\n         *  for libavoid.\n         */\n        unsigned short rectIntersectAsVertexNumber(void) const\n        {\n            switch(rectIntersect) {\n                case topology::EdgePoint::BR:\n                    return 0;\n                case topology::EdgePoint::TR: \n                    return 1;\n                case topology::EdgePoint::TL:\n                    return 2;\n                case topology::EdgePoint::BL: \n                    return 3;\n                default: \n                    return 4;\n            }\n        }\n        /*\n         * for any two EdgePoint the following should always be false!\n         * @param e an EdgePoint (not this one)\n         */\n        bool uniqueCheck(const EdgePoint* e) const {\n            COLA_ASSERT(this!=e);\n            return node==e->node && rectIntersect==e->rectIntersect;\n        }\n// To prevent C++ objects from being destroyed in garbage collected languages\n// when the libraries are called from SWIG, we hide the declarations of the\n// destructors and prevent generation of default destructors.\n#ifndef SWIG\n        ~EdgePoint();\n#endif\n        /*\n         * @return true if the EdgePoint is the end of an edge otherwise\n         * asserts that it is a valid bend point.\n         */\n        bool isEnd() const;\n        /*\n         * asserts that, if this is a bend point, it does not double back in either\n         * the horizontal or vertical directions.\n         */\n        bool assertConvexBend() const;\n        /*\n         * @return offset from centre of node\n         */\n        double offset(vpsc::Dim scanDim) const;\n        /*\n         * remove this point from the edge replacing its in and out\n         * segments with a single new Segment.\n         * @return the replacement Segment\n         */\n        Segment* prune(vpsc::Dim scanDim);\n    };\n    /*\n     * A vector of pointers to EdgePoint objects.\n     */\n    typedef std::vector<EdgePoint *> EdgePoints;\n    typedef std::vector<const EdgePoint *> ConstEdgePoints;\n    /*\n     * a Segment is one straightline segment between two EdgePoint which are\n     * either bend points and/or ends of the edge.\n     */\n    class Segment {\n    public:\n        /*\n         * Create segment for a given edge between two EdgePoints.\n         * Note that segments can be zero length, for example between \n         * opposite corners of two rectangles.\n         * @param edge the edge to which this segment belongs\n         * @param start the EdgePoint at the start of the segment\n         * @param end the EdgePoint at the end of the segment\n         */\n        Segment(Edge* edge, EdgePoint* start, EdgePoint* end) \n            : edge(edge), start(start), end(end)\n        {\n            // no self loops!\n            COLA_ASSERT(start!=end);\n            // the ends of the segment should not involve the same rectangle vertex\n            COLA_ASSERT(!start->uniqueCheck(end));\n            start->outSegment=this;\n            end->inSegment=this;\n        }\n        /*\n         * add a new StraightConstraint to this segment (if necessary)\n         * @param node the node with which the constraint is associated\n         * @param pos the scanPos, i.e. the position in the scan dimension\n         * of the opening or closing of node.\n         * @return true if a constraint was created\n         */\n        bool createStraightConstraint(vpsc::Dim dim, Node* node, double pos);\n        /*\n         * creates a copy of the StraightConstraint in our own\n         * straightConstraints list, but only if this segment is not directly\n         * connected to the centre of the StraightConstraint node.  @param s\n         * the StraightConstraint to be copied across\n         */\n        void transferStraightConstraint(StraightConstraint* s);\n        /*\n         * this typedef can be used to declare a wrapper functor\n         * for transferStraightConstraint\n         */\n        typedef std::function<void(StraightConstraint*)> TransferStraightConstraint;\n        /*\n         * TransferStraightConstraint might for example be applied to\n         * forEachStraightConstraint\n         */\n        template <typename T>\n        void forEachStraightConstraint(T f) {\n            for_each(straightConstraints.begin(),straightConstraints.end(),f);\n        }\n        /*\n         * append straightConstraints to ts\n         */\n        void getStraightConstraints(std::vector<TopologyConstraint*>* ts) \n            const;\n        /*\n         * clean up topologyConstraints\n         */\n        void deleteStraightConstraints();\n        ~Segment();\n        // the edge which this segment is part of\n        Edge* edge;\n        // the start point of the segment - either the end of the edge\n        // if connected to a real node, or a bend point\n        EdgePoint* start;\n        // the end point of the segment\n        EdgePoint* end;\n        /*\n         * @return the EdgePoint at the minimum extent of this segment on the\n         * scan axis\n         */\n        EdgePoint* getMin(vpsc::Dim scanDim) const\n        {\n            if (start->pos(vpsc::conjugate(scanDim)) <=\n                    end->pos(vpsc::conjugate(scanDim)))\n            {\n                return start;\n            }\n            return end;\n        }\n        /*\n         * @return the EdgePoint on the maximum extent of this segment on the\n         * scan axis\n         */\n        EdgePoint* getMax(vpsc::Dim scanDim) const\n        {\n            if (start->pos(vpsc::conjugate(scanDim)) >\n                    end->pos(vpsc::conjugate(scanDim)))\n            {\n                return start;\n            }\n            return end;\n        }\n        /* \n         * compute the intersection with the line !dim=pos.\n         * if called when Segment is parallel to scan line it will throw an\n         * assertion error.\n         * @param pos position of scanline\n         * @param p distance along line from start to end at which intersection\n         * occurs (where 0 is at the start and 1 is at the end -- though\n         * note that p will be outside this range for BendConstraints).\n         * @return position along scanline of intersection with the line along\n         * this edge segment\n         */\n        double forwardIntersection(vpsc::Dim scanDim, double pos, double &p) const {\n            return intersection(scanDim, pos, start, end, p);\n        }\n        double reverseIntersection(vpsc::Dim scanDim, double pos, double &p) const {\n            return intersection(scanDim, pos, end, start, p);\n        }\n        double forwardIntersection(vpsc::Dim scanDim, double pos) const {\n            double p;\n            return forwardIntersection(scanDim, pos,p);\n        }\n        double intersection(vpsc::Dim scanDim, const double pos,\n                const EdgePoint* s, const EdgePoint* e, double& p) const\n        {\n            double ux=s->pos(scanDim);\n            double vx=e->pos(scanDim);\n            double uy=s->pos(vpsc::conjugate(scanDim));\n            double vy=e->pos(vpsc::conjugate(scanDim));\n            double denom = vy - uy;\n            COLA_ASSERT(denom!=0); // must not be parallel to scanline!\n            p = (pos - uy)/denom;\n            return ux + p * (vx-ux);\n        }\n        std::string toString() const;\n        /*\n         * Compute the length in the specified dimension.\n         */\n        double length(vpsc::Dim dim) const;\n        /*\n         * Compute the euclidean distance between #start and #end.\n         */\n        double length() const;\n        void assertNonZeroLength() const;\n        /*\n         * does this segment have Node v as a CENTRE start or end point?\n         */\n        bool connectedToNode(const Node* v) const;\n    private:\n        // a set of topology constraints (left-/right-/above-/below-of\n        // relationships / between this segment and nodes\n        std::vector<StraightConstraint*> straightConstraints;\n    };\n    // do nothing operator used in ForEach\n    template <typename T>\n    struct NoOp {\n        void operator() (T t)\n        {\n            COLA_UNUSED(t);\n        }\n    };\n    /*\n     * defines (hopefully just once) a loop over the bipartite linked-list\n     * of Segment and EdgePoint in an Edge.\n     * In the case of a cluster boundary, the edge will be a cycle, where\n     * the last EdgePoint is also the first.  Thus, we process from\n     * Edge::firstSegment to Edge::lastSegment.  We visit every EdgePoint\n     * (i.e. nSegments+1), in the case of a cycle, the first/last\n     * point will be visited (PointOp applied) twice unless noCycle is set \n     * true.\n     */\n    template <typename PEdge,\n              typename PointOp,\n              typename SegmentOp >\n    void ForEach(PEdge e, PointOp po, SegmentOp so, bool noCycle=false) {\n        Segment* s=e->firstSegment;\n        if(!(e->cycle()&&noCycle)) {\n            po(s->start);\n        }\n        bool last=false;\n        do {\n            EdgePoint* p=s->end;\n            so(s);\n            if(s==e->lastSegment) {\n                last=true;\n            } else {\n                s=p->outSegment;\n            }\n            po(p);\n        } while(!last);\n    }\n    /**\n     * @brief Topology representation of an edge.\n     *\n     * An edge provides a doubly linked list of segments, each involving a pair\n     * of EdgePoints.  \n     *\n     * @note You shouldn't need to create these yourself, but you may\n     *       extract them from an existing ColaTopologyAddon and construct\n     *       a new ColaTopologyAddon with that same topology information.\n     */\n    class Edge {\n    public:\n        /// id specified by user.  Can be used to match to external edge.\n        unsigned id;\n        /// the ideal length which the layout should try to obtain for this edge\n        double idealLength;\n        /**\n         * Head of a doubly-linked list of Segment each involving a pair of\n         * EdgePoints\n         */\n        Segment* firstSegment;\n        /**\n         * End of list of Segment\n         */\n        Segment* lastSegment;\n        // size of segments list headed by firstSegment\n        size_t nSegments;\n        /**\n         * Construct an edge from a list of EdgePoint in sequence\n         */\n        Edge(unsigned id, double idealLength, EdgePoints &vs) \n            : id(id)\n            , idealLength(idealLength)\n            , firstSegment(nullptr), lastSegment(nullptr)\n            , nSegments(0)\n        {\n            EdgePoints::iterator a=vs.begin();\n            for(EdgePoints::iterator b=a+1;b!=vs.end();++a,++b) {\n                Segment* s = new Segment(this,*a,*b); \n                nSegments++;\n                if(firstSegment==nullptr) {\n                    firstSegment = s;\n                }\n                lastSegment = s;\n            }\n        }\n        /*\n         * apply an operation to every Segment and EdgePoint associated with\n         * this Edge \n         * @param po operation to apply to each EdgePoint\n         * @param so operation to apply to each Segment\n         */\n        template <typename PointOp, typename SegmentOp>\n        void forEach(PointOp po, SegmentOp so, bool noCycle=false) {\n            ForEach<Edge*,PointOp,SegmentOp>(this,po,so,noCycle);\n        }\n        /*\n         * apply an operation to every Segment and EdgePoint associated with\n         * this Edge, without changing anything\n         * @param po operation to apply to each EdgePoint\n         * @param so operation to apply to each Segment\n         */\n        template <typename PointOp, typename SegmentOp>\n        void forEach(PointOp po, SegmentOp so, bool noCycle=false) const {\n            ForEach<const Edge*,PointOp,SegmentOp>(this,po,so,noCycle);\n        }\n        /*\n         * apply an operation to every Segment associated with this Edge\n         * @param o operation (a function or functor that takes a pointer to\n         * a segment as an argument)\n         */\n        template <typename T>\n        void forEachSegment(T o) {\n            forEach(NoOp<EdgePoint*>(),o);\n        }\n        /*\n         * a version of forEachSegment for const edges\n         * @param o an operation on a const Segment\n         */\n        template <typename T>\n        void forEachSegment(T o) const {\n            forEach(NoOp<const EdgePoint*>(),o);\n        }\n        /*\n         * apply an operation to every EdgePoint associated with this edge\n         * @param o operation (a function or functor that takes a pointer to\n         * an EdgePoint as an argument)\n         * @param noCycle if the edge is a cycle don't apply o to the \n         * start/end point twice.\n         */\n        template <typename T>\n        void forEachEdgePoint(T o, bool noCycle=false) {\n            forEach(o,NoOp<Segment*>(),noCycle);\n        }\n        /*\n         * a version of forEachEdgePoint for const edges\n         * @param o an operation on a const EdgePoint\n         * @param noCycle if the edge is a cycle apply o to the \n         * start/end point only once.\n         */\n        template <typename T>\n        void forEachEdgePoint(T o, bool noCycle=false) const {\n            forEach(o,NoOp<const Segment*>(),noCycle);\n        }\n\n// To prevent C++ objects from being destroyed in garbage collected languages\n// when the libraries are called from SWIG, we hide the declarations of the\n// destructors and prevent generation of default destructors.\n#ifndef SWIG\n        /*\n         * cleanup segments\n         */\n        ~Edge() {\n            forEach(delete_object(),delete_object(),true);\n        }\n#endif\n\n        /*\n         * the sum of the lengths of all the segments\n         */\n        double pathLength() const;\n        /*\n         * get a list of all the EdgePoints along the Edge path\n         */\n        void getPath(ConstEdgePoints& vs) const;\n        /*\n         * @return a list of the coordinates along the edge route\n         */\n        straightener::Route* getRoute() const;\n        void getTopologyConstraints(std::vector<TopologyConstraint*>* ts) \n        const {\n            forEach(\n                    std::bind(\n                        &EdgePoint::getBendConstraint,std::placeholders::_1,ts),\n                    std::bind(\n                        &Segment::getStraightConstraints,std::placeholders::_1,ts),\n                    true);\n        }\n        bool assertConvexBends() const;\n        bool cycle() const {\n            return firstSegment->start==lastSegment->end;\n        }\n        std::string toString() const;\n    };\n    /**\n     * @brief  A vector of pointers to Edge objects.\n     */\n    typedef std::vector<Edge *> Edges;\n    double compute_stress(const Edges&);\n    void printEdges(const Edges&);\n/*\n * CrossProduct of three points: If the result is 0, the points are collinear; \n * if it is positive, the three points (in order) constitute a \"left turn\", \n * otherwise a \"right turn\".\n */\ninline double crossProduct(\n        double x0, double y0,\n        double x1, double y1,\n        double x2, double y2) {\n    return (x1-x0)*(y2-y0)-(x2-x0)*(y1-y0);\n}\n\n#ifndef NDEBUG\n    bool assertConvexBends(const Edges&);\n    /*\n     * Asserts that there are no intersections between any of the segments\n     * in edges and rectangles in nodes\n     * @param nodes containing rectangles\n     * @param edges containing segments\n     * @return true if assertions succeed\n     */\n    bool assertNoSegmentRectIntersection(const Nodes&, const Edges&);\n    bool assertNoZeroLengthEdgeSegments(const Edges& es);\n#endif\n} // namespace topology\n#endif // TOPOLOGY_GRAPH_H\n\n"
  },
  {
    "path": "cola/libtopology/topology_log.h",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libtopology - Classes used in generating and managing topology constraints.\n *\n * Copyright (C) 2007-2008  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n*/\n\n/*\nLogging code from DJJ article: http://www.ddj.com/cpp/201804215.\n\nTitle: Logging In C++\nAuthor: Petru Marginean\nKeywords: OCT07   C++\nDescription: Unpublished source code accompanying the article by Petru Marginean, in which he presents a C++ logging framework that is typesafe, thread-safe, and portable.\n */\n#ifndef __TOPOLOGY_LOG_H__\n#define __TOPOLOGY_LOG_H__\n\n#include <sstream>\n#include <string>\n#include <cstdio>\n#include <iomanip>\n\nnamespace topology {\ninline std::string NowTime();\n\nenum TLogLevel {logERROR, logWARNING, logINFO, logDEBUG, logDEBUG1, logDEBUG2, logDEBUG3, logDEBUG4};\n\ntemplate <typename T>\nclass Log\n{\npublic:\n    Log();\n    virtual ~Log();\n    std::ostringstream& Get(TLogLevel level = logINFO);\n    void flush();\npublic:\n    static TLogLevel& ReportingLevel();\n    static std::string ToString(TLogLevel level);\n    static TLogLevel FromString(const std::string& level);\nprotected:\n    std::ostringstream os;\nprivate:\n    Log(const Log&);\n    Log& operator =(const Log&);\n};\n\ntemplate <typename T>\nLog<T>::Log()\n{\n}\n\ntemplate <typename T>\nstd::ostringstream& Log<T>::Get(TLogLevel level)\n{\n    os << \"- \" << NowTime();\n    os << \" \" << ToString(level) << \": \";\n    os << std::string(level > logDEBUG ? level - logDEBUG : 0, '\\t');\n    return os;\n}\n\ntemplate <typename T>\nvoid Log<T>::flush()\n{\n    os << std::endl;\n    T::Output(os.str());\n}\ntemplate <typename T>\nLog<T>::~Log()\n{\n    flush();\n}\n\ntemplate <typename T>\nTLogLevel& Log<T>::ReportingLevel()\n{\n    static TLogLevel reportingLevel = logDEBUG4;\n    return reportingLevel;\n}\n\ntemplate <typename T>\nstd::string Log<T>::ToString(TLogLevel level)\n{\n\tstatic const char* const buffer[] = {\"ERROR\", \"WARNING\", \"INFO\", \"DEBUG\", \"DEBUG1\", \"DEBUG2\", \"DEBUG3\", \"DEBUG4\"};\n    return buffer[level];\n}\n\ntemplate <typename T>\nTLogLevel Log<T>::FromString(const std::string& level)\n{\n    if (level == \"DEBUG4\")\n        return logDEBUG4;\n    if (level == \"DEBUG3\")\n        return logDEBUG3;\n    if (level == \"DEBUG2\")\n        return logDEBUG2;\n    if (level == \"DEBUG1\")\n        return logDEBUG1;\n    if (level == \"DEBUG\")\n        return logDEBUG;\n    if (level == \"INFO\")\n        return logINFO;\n    if (level == \"WARNING\")\n        return logWARNING;\n    if (level == \"ERROR\")\n        return logERROR;\n    Log<T>().Get(logWARNING) << \"Unknown logging level '\" << level << \"'. Using INFO level as default.\";\n    return logINFO;\n}\n\nclass Output2FILE\n{\npublic:\n    static FILE*& Stream();\n    static void Output(const std::string& msg);\n};\n\ninline FILE*& Output2FILE::Stream()\n{\n    static FILE* pStream = stderr;\n    return pStream;\n}\n\ninline void Output2FILE::Output(const std::string& msg)\n{\n    FILE* pStream = Stream();\n    if (!pStream)\n        return;\n    fprintf(pStream, \"%s\", msg.c_str());\n    fflush(pStream);\n}\n\n#if defined(WIN32) || defined(_WIN32) || defined(__WIN32__)\n#   if defined (BUILDING_FILELOG_DLL)\n#       define FILELOG_DECLSPEC   __declspec (dllexport)\n#   elif defined (USING_FILELOG_DLL)\n#       define FILELOG_DECLSPEC   __declspec (dllimport)\n#   else\n#       define FILELOG_DECLSPEC\n#   endif // BUILDING_DBSIMPLE_DLL\n#else\n#   define FILELOG_DECLSPEC\n#endif // _WIN32\n\nclass FILELOG_DECLSPEC FILELog : public Log<Output2FILE> {};\n//typedef Log<Output2FILE> FILELog;\n\n#ifndef FILELOG_MAX_LEVEL\n#define FILELOG_MAX_LEVEL logDEBUG4\n#endif\n\n#define FILE_LOG(level) \\\n    if (level > FILELOG_MAX_LEVEL) ;\\\n    else if (level > FILELog::ReportingLevel() || !Output2FILE::Stream()) ; \\\n    else FILELog().Get(level)\n\n#define FLUSH_LOG(level) \\\n    if (level > FILELOG_MAX_LEVEL) ;\\\n    else if (level > FILELog::ReportingLevel() || !Output2FILE::Stream()) ; \\\n    else FILELog().flush()\n\n#if defined(WIN32) || defined(_WIN32) || defined(__WIN32__)\n\n#include <windows.h>\n\ninline std::string NowTime()\n{\n    const int MAX_LEN = 200;\n    char buffer[MAX_LEN];\n    if (GetTimeFormatA(LOCALE_USER_DEFAULT, 0, 0,\n            \"HH':'mm':'ss\", buffer, MAX_LEN) == 0)\n        return \"Error in NowTime()\";\n\n    static DWORD first = GetTickCount();\n    std::stringstream result;\n    result << buffer << \".\" << std::setfill('0') << std::setw(3) << ((long)(GetTickCount() - first) % 1000);\n    return result.str();\n}\n\n#else\n\n#include <sys/time.h>\n\ninline std::string NowTime()\n{\n    char buffer[11];\n    time_t t;\n    time(&t);\n    tm r;\n    strftime(buffer, sizeof(buffer), \"%X\", localtime_r(&t, &r));\n    struct timeval tv;\n    gettimeofday(&tv, 0);\n    std::stringstream result;\n    result << buffer << \".\" << std::setfill('0') << std::setw(3) << ((long)tv.tv_usec / 1000);\n    return result.str();\n}\n\n#endif //WIN32\n} // namespace topology\n#endif //__TOPOLOGY_LOG_H__\n"
  },
  {
    "path": "cola/libtopology/topologyconstraint.nb",
    "content": "(************** Content-type: application/mathematica **************\n                     CreatedBy='Mathematica 5.2'\n\n                    Mathematica-Compatible Notebook\n\nThis notebook can be used with any Mathematica-compatible\napplication, such as Mathematica, MathReader or Publicon. The data\nfor the notebook starts with the line containing stars above.\n\nTo get the notebook into a Mathematica-compatible application, do\none of the following:\n\n* Save the data starting with the line of stars above into a file\n  with a name ending in .nb, then open the file inside the\n  application;\n\n* Copy the data starting with the line of stars above to the\n  clipboard, then use the Paste menu command inside the application.\n\nData for notebooks contains only printable 7-bit ASCII and can be\nsent directly in email or through ftp in text mode.  Newlines can be\nCR, LF or CRLF (Unix, Macintosh or MS-DOS style).\n\nNOTE: If you modify the data for this notebook not in a Mathematica-\ncompatible application, you must delete the line below containing\nthe word CacheID, otherwise Mathematica-compatible applications may\ntry to use invalid cache data.\n\nFor more information on notebooks and Mathematica-compatible \napplications, contact Wolfram Research:\n  web: http://www.wolfram.com\n  email: info@wolfram.com\n  phone: +1-217-398-0700 (U.S.)\n\nNotebook reader applications are available free of charge from \nWolfram Research.\n*******************************************************************)\n\n(*CacheID: 232*)\n\n\n(*NotebookFileLineBreakTest\nNotebookFileLineBreakTest*)\n(*NotebookOptionsPosition[      2261,         69]*)\n(*NotebookOutlinePosition[      2893,         91]*)\n(*  CellTagsIndexPosition[      2849,         87]*)\n(*WindowFrame->Normal*)\n\n\n\nNotebook[{\nCell[BoxData[\n    \\(F[x_] := x[\\([1]\\)] + \\[Alpha] \\((x[\\([2]\\)] - x[\\([1]\\)])\\)\\)], \"Input\"],\n\nCell[BoxData[\n    \\(U = Array[u, 2]; \\ V = Array[v, 2]; \\ W = Array[w, 2];\\)], \"Input\"],\n\nCell[CellGroupData[{\n\nCell[BoxData[\n    \\(Solve[\n      F[W] \\[Equal] F[U] + p \\((F[V] - F[U])\\) + g, \\[Alpha]]\\)], \"Input\"],\n\nCell[BoxData[\n    \\({{\\[Alpha] \\[Rule] \\(\\(-g\\) - u[1] + p\\ u[1] - p\\ v[1] + \\\nw[1]\\)\\/\\(\\(-u[1]\\) + p\\ u[1] + u[2] - p\\ u[2] - p\\ v[1] + p\\ v[2] + w[1] - \\\nw[2]\\)}}\\)], \"Output\"]\n}, Open  ]]\n},\nFrontEndVersion->\"5.2 for X\",\nScreenRectangle->{{0, 1680}, {0, 1050}},\nWindowSize->{520, 600},\nWindowMargins->{{262, Automatic}, {Automatic, 201}}\n]\n\n(*******************************************************************\nCached data follows.  If you edit this Notebook file directly, not\nusing Mathematica, you must remove the line containing CacheID at\nthe top of  the file.  The cache data will then be recreated when\nyou save this file from within Mathematica.\n*******************************************************************)\n\n(*CellTagsOutline\nCellTagsIndex->{}\n*)\n\n(*CellTagsIndex\nCellTagsIndex->{}\n*)\n\n(*NotebookFileOutline\nNotebook[{\nCell[1754, 51, 93, 1, 27, \"Input\"],\nCell[1850, 54, 87, 1, 27, \"Input\"],\n\nCell[CellGroupData[{\nCell[1962, 59, 101, 2, 27, \"Input\"],\nCell[2066, 63, 179, 3, 73, \"Output\"]\n}, Open  ]]\n}\n]\n*)\n\n\n\n(*******************************************************************\nEnd of Mathematica Notebook file.\n*******************************************************************)\n\n"
  },
  {
    "path": "cola/libtopology/util.h",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libtopology - Classes used in generating and managing topology constraints.\n *\n * Copyright (C) 2007-2008  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n*/\n\n#ifndef TOPOLOGY_UTIL_H\n#define TOPOLOGY_UTIL_H\nnamespace topology {\n/*\n * templated delete functor for use in for_each loop over vector\n */\nstruct delete_object\n{\n  template <typename T>\n  void operator()(T *ptr){ delete ptr;}\n};\n/* \n * Sum over the results of calling operation for each member in the\n * iterator.  Handier than std::accumulate because we can use with\n * mem_fun to pass in a getter method.\n */\ntemplate <class InputIterator, class T, class Operation >\nT sum_over(InputIterator beg, InputIterator end, T init, Operation op)\n{\n    for ( ; beg != end; ++beg)\n    init = init + op(*beg);\n    return init;\n}\n} // namespace topology\n#endif // TOPOLOGY_UTIL_H\n"
  },
  {
    "path": "cola/libvpsc/COPYING",
    "content": "\t\t  GNU LESSER GENERAL PUBLIC LICENSE\n\t\t       Version 2.1, February 1999\n\n Copyright (C) 1991, 1999 Free Software Foundation, Inc.\n     51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA\n Everyone is permitted to copy and distribute verbatim copies\n of this license document, but changing it is not allowed.\n\n[This is the first released version of the Lesser GPL.  It also counts\n as the successor of the GNU Library Public License, version 2, hence\n the version number 2.1.]\n\n\t\t\t    Preamble\n\n  The licenses for most software are designed to take away your\nfreedom to share and change it.  By contrast, the GNU General Public\nLicenses are intended to guarantee your freedom to share and change\nfree software--to make sure the software is free for all its users.\n\n  This license, the Lesser General Public License, applies to some\nspecially designated software packages--typically libraries--of the\nFree Software Foundation and other authors who decide to use it.  You\ncan use it too, but we suggest you first think carefully about whether\nthis license or the ordinary General Public License is the better\nstrategy to use in any particular case, based on the explanations below.\n\n  When we speak of free software, we are referring to freedom of use,\nnot price.  Our General Public Licenses are designed to make sure that\nyou have the freedom to distribute copies of free software (and charge\nfor this service if you wish); that you receive source code or can get\nit if you want it; that you can change the software and use pieces of\nit in new free programs; and that you are informed that you can do\nthese things.\n\n  To protect your rights, we need to make restrictions that forbid\ndistributors to deny you these rights or to ask you to surrender these\nrights.  These restrictions translate to certain responsibilities for\nyou if you distribute copies of the library or if you modify it.\n\n  For example, if you distribute copies of the library, whether gratis\nor for a fee, you must give the recipients all the rights that we gave\nyou.  You must make sure that they, too, receive or can get the source\ncode.  If you link other code with the library, you must provide\ncomplete object files to the recipients, so that they can relink them\nwith the library after making changes to the library and recompiling\nit.  And you must show them these terms so they know their rights.\n\n  We protect your rights with a two-step method: (1) we copyright the\nlibrary, and (2) we offer you this license, which gives you legal\npermission to copy, distribute and/or modify the library.\n\n  To protect each distributor, we want to make it very clear that\nthere is no warranty for the free library.  Also, if the library is\nmodified by someone else and passed on, the recipients should know\nthat what they have is not the original version, so that the original\nauthor's reputation will not be affected by problems that might be\nintroduced by others.\n\f\n  Finally, software patents pose a constant threat to the existence of\nany free program.  We wish to make sure that a company cannot\neffectively restrict the users of a free program by obtaining a\nrestrictive license from a patent holder.  Therefore, we insist that\nany patent license obtained for a version of the library must be\nconsistent with the full freedom of use specified in this license.\n\n  Most GNU software, including some libraries, is covered by the\nordinary GNU General Public License.  This license, the GNU Lesser\nGeneral Public License, applies to certain designated libraries, and\nis quite different from the ordinary General Public License.  We use\nthis license for certain libraries in order to permit linking those\nlibraries into non-free programs.\n\n  When a program is linked with a library, whether statically or using\na shared library, the combination of the two is legally speaking a\ncombined work, a derivative of the original library.  The ordinary\nGeneral Public License therefore permits such linking only if the\nentire combination fits its criteria of freedom.  The Lesser General\nPublic License permits more lax criteria for linking other code with\nthe library.\n\n  We call this license the \"Lesser\" General Public License because it\ndoes Less to protect the user's freedom than the ordinary General\nPublic License.  It also provides other free software developers Less\nof an advantage over competing non-free programs.  These disadvantages\nare the reason we use the ordinary General Public License for many\nlibraries.  However, the Lesser license provides advantages in certain\nspecial circumstances.\n\n  For example, on rare occasions, there may be a special need to\nencourage the widest possible use of a certain library, so that it becomes\na de-facto standard.  To achieve this, non-free programs must be\nallowed to use the library.  A more frequent case is that a free\nlibrary does the same job as widely used non-free libraries.  In this\ncase, there is little to gain by limiting the free library to free\nsoftware only, so we use the Lesser General Public License.\n\n  In other cases, permission to use a particular library in non-free\nprograms enables a greater number of people to use a large body of\nfree software.  For example, permission to use the GNU C Library in\nnon-free programs enables many more people to use the whole GNU\noperating system, as well as its variant, the GNU/Linux operating\nsystem.\n\n  Although the Lesser General Public License is Less protective of the\nusers' freedom, it does ensure that the user of a program that is\nlinked with the Library has the freedom and the wherewithal to run\nthat program using a modified version of the Library.\n\n  The precise terms and conditions for copying, distribution and\nmodification follow.  Pay close attention to the difference between a\n\"work based on the library\" and a \"work that uses the library\".  The\nformer contains code derived from the library, whereas the latter must\nbe combined with the library in order to run.\n\f\n\t\t  GNU LESSER GENERAL PUBLIC LICENSE\n   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION\n\n  0. This License Agreement applies to any software library or other\nprogram which contains a notice placed by the copyright holder or\nother authorized party saying it may be distributed under the terms of\nthis Lesser General Public License (also called \"this License\").\nEach licensee is addressed as \"you\".\n\n  A \"library\" means a collection of software functions and/or data\nprepared so as to be conveniently linked with application programs\n(which use some of those functions and data) to form executables.\n\n  The \"Library\", below, refers to any such software library or work\nwhich has been distributed under these terms.  A \"work based on the\nLibrary\" means either the Library or any derivative work under\ncopyright law: that is to say, a work containing the Library or a\nportion of it, either verbatim or with modifications and/or translated\nstraightforwardly into another language.  (Hereinafter, translation is\nincluded without limitation in the term \"modification\".)\n\n  \"Source code\" for a work means the preferred form of the work for\nmaking modifications to it.  For a library, complete source code means\nall the source code for all modules it contains, plus any associated\ninterface definition files, plus the scripts used to control compilation\nand installation of the library.\n\n  Activities other than copying, distribution and modification are not\ncovered by this License; they are outside its scope.  The act of\nrunning a program using the Library is not restricted, and output from\nsuch a program is covered only if its contents constitute a work based\non the Library (independent of the use of the Library in a tool for\nwriting it).  Whether that is true depends on what the Library does\nand what the program that uses the Library does.\n  \n  1. You may copy and distribute verbatim copies of the Library's\ncomplete source code as you receive it, in any medium, provided that\nyou conspicuously and appropriately publish on each copy an\nappropriate copyright notice and disclaimer of warranty; keep intact\nall the notices that refer to this License and to the absence of any\nwarranty; and distribute a copy of this License along with the\nLibrary.\n\n  You may charge a fee for the physical act of transferring a copy,\nand you may at your option offer warranty protection in exchange for a\nfee.\n\f\n  2. You may modify your copy or copies of the Library or any portion\nof it, thus forming a work based on the Library, and copy and\ndistribute such modifications or work under the terms of Section 1\nabove, provided that you also meet all of these conditions:\n\n    a) The modified work must itself be a software library.\n\n    b) You must cause the files modified to carry prominent notices\n    stating that you changed the files and the date of any change.\n\n    c) You must cause the whole of the work to be licensed at no\n    charge to all third parties under the terms of this License.\n\n    d) If a facility in the modified Library refers to a function or a\n    table of data to be supplied by an application program that uses\n    the facility, other than as an argument passed when the facility\n    is invoked, then you must make a good faith effort to ensure that,\n    in the event an application does not supply such function or\n    table, the facility still operates, and performs whatever part of\n    its purpose remains meaningful.\n\n    (For example, a function in a library to compute square roots has\n    a purpose that is entirely well-defined independent of the\n    application.  Therefore, Subsection 2d requires that any\n    application-supplied function or table used by this function must\n    be optional: if the application does not supply it, the square\n    root function must still compute square roots.)\n\nThese requirements apply to the modified work as a whole.  If\nidentifiable sections of that work are not derived from the Library,\nand can be reasonably considered independent and separate works in\nthemselves, then this License, and its terms, do not apply to those\nsections when you distribute them as separate works.  But when you\ndistribute the same sections as part of a whole which is a work based\non the Library, the distribution of the whole must be on the terms of\nthis License, whose permissions for other licensees extend to the\nentire whole, and thus to each and every part regardless of who wrote\nit.\n\nThus, it is not the intent of this section to claim rights or contest\nyour rights to work written entirely by you; rather, the intent is to\nexercise the right to control the distribution of derivative or\ncollective works based on the Library.\n\nIn addition, mere aggregation of another work not based on the Library\nwith the Library (or with a work based on the Library) on a volume of\na storage or distribution medium does not bring the other work under\nthe scope of this License.\n\n  3. You may opt to apply the terms of the ordinary GNU General Public\nLicense instead of this License to a given copy of the Library.  To do\nthis, you must alter all the notices that refer to this License, so\nthat they refer to the ordinary GNU General Public License, version 2,\ninstead of to this License.  (If a newer version than version 2 of the\nordinary GNU General Public License has appeared, then you can specify\nthat version instead if you wish.)  Do not make any other change in\nthese notices.\n\f\n  Once this change is made in a given copy, it is irreversible for\nthat copy, so the ordinary GNU General Public License applies to all\nsubsequent copies and derivative works made from that copy.\n\n  This option is useful when you wish to copy part of the code of\nthe Library into a program that is not a library.\n\n  4. You may copy and distribute the Library (or a portion or\nderivative of it, under Section 2) in object code or executable form\nunder the terms of Sections 1 and 2 above provided that you accompany\nit with the complete corresponding machine-readable source code, which\nmust be distributed under the terms of Sections 1 and 2 above on a\nmedium customarily used for software interchange.\n\n  If distribution of object code is made by offering access to copy\nfrom a designated place, then offering equivalent access to copy the\nsource code from the same place satisfies the requirement to\ndistribute the source code, even though third parties are not\ncompelled to copy the source along with the object code.\n\n  5. A program that contains no derivative of any portion of the\nLibrary, but is designed to work with the Library by being compiled or\nlinked with it, is called a \"work that uses the Library\".  Such a\nwork, in isolation, is not a derivative work of the Library, and\ntherefore falls outside the scope of this License.\n\n  However, linking a \"work that uses the Library\" with the Library\ncreates an executable that is a derivative of the Library (because it\ncontains portions of the Library), rather than a \"work that uses the\nlibrary\".  The executable is therefore covered by this License.\nSection 6 states terms for distribution of such executables.\n\n  When a \"work that uses the Library\" uses material from a header file\nthat is part of the Library, the object code for the work may be a\nderivative work of the Library even though the source code is not.\nWhether this is true is especially significant if the work can be\nlinked without the Library, or if the work is itself a library.  The\nthreshold for this to be true is not precisely defined by law.\n\n  If such an object file uses only numerical parameters, data\nstructure layouts and accessors, and small macros and small inline\nfunctions (ten lines or less in length), then the use of the object\nfile is unrestricted, regardless of whether it is legally a derivative\nwork.  (Executables containing this object code plus portions of the\nLibrary will still fall under Section 6.)\n\n  Otherwise, if the work is a derivative of the Library, you may\ndistribute the object code for the work under the terms of Section 6.\nAny executables containing that work also fall under Section 6,\nwhether or not they are linked directly with the Library itself.\n\f\n  6. As an exception to the Sections above, you may also combine or\nlink a \"work that uses the Library\" with the Library to produce a\nwork containing portions of the Library, and distribute that work\nunder terms of your choice, provided that the terms permit\nmodification of the work for the customer's own use and reverse\nengineering for debugging such modifications.\n\n  You must give prominent notice with each copy of the work that the\nLibrary is used in it and that the Library and its use are covered by\nthis License.  You must supply a copy of this License.  If the work\nduring execution displays copyright notices, you must include the\ncopyright notice for the Library among them, as well as a reference\ndirecting the user to the copy of this License.  Also, you must do one\nof these things:\n\n    a) Accompany the work with the complete corresponding\n    machine-readable source code for the Library including whatever\n    changes were used in the work (which must be distributed under\n    Sections 1 and 2 above); and, if the work is an executable linked\n    with the Library, with the complete machine-readable \"work that\n    uses the Library\", as object code and/or source code, so that the\n    user can modify the Library and then relink to produce a modified\n    executable containing the modified Library.  (It is understood\n    that the user who changes the contents of definitions files in the\n    Library will not necessarily be able to recompile the application\n    to use the modified definitions.)\n\n    b) Use a suitable shared library mechanism for linking with the\n    Library.  A suitable mechanism is one that (1) uses at run time a\n    copy of the library already present on the user's computer system,\n    rather than copying library functions into the executable, and (2)\n    will operate properly with a modified version of the library, if\n    the user installs one, as long as the modified version is\n    interface-compatible with the version that the work was made with.\n\n    c) Accompany the work with a written offer, valid for at\n    least three years, to give the same user the materials\n    specified in Subsection 6a, above, for a charge no more\n    than the cost of performing this distribution.\n\n    d) If distribution of the work is made by offering access to copy\n    from a designated place, offer equivalent access to copy the above\n    specified materials from the same place.\n\n    e) Verify that the user has already received a copy of these\n    materials or that you have already sent this user a copy.\n\n  For an executable, the required form of the \"work that uses the\nLibrary\" must include any data and utility programs needed for\nreproducing the executable from it.  However, as a special exception,\nthe materials to be distributed need not include anything that is\nnormally distributed (in either source or binary form) with the major\ncomponents (compiler, kernel, and so on) of the operating system on\nwhich the executable runs, unless that component itself accompanies\nthe executable.\n\n  It may happen that this requirement contradicts the license\nrestrictions of other proprietary libraries that do not normally\naccompany the operating system.  Such a contradiction means you cannot\nuse both them and the Library together in an executable that you\ndistribute.\n\f\n  7. You may place library facilities that are a work based on the\nLibrary side-by-side in a single library together with other library\nfacilities not covered by this License, and distribute such a combined\nlibrary, provided that the separate distribution of the work based on\nthe Library and of the other library facilities is otherwise\npermitted, and provided that you do these two things:\n\n    a) Accompany the combined library with a copy of the same work\n    based on the Library, uncombined with any other library\n    facilities.  This must be distributed under the terms of the\n    Sections above.\n\n    b) Give prominent notice with the combined library of the fact\n    that part of it is a work based on the Library, and explaining\n    where to find the accompanying uncombined form of the same work.\n\n  8. You may not copy, modify, sublicense, link with, or distribute\nthe Library except as expressly provided under this License.  Any\nattempt otherwise to copy, modify, sublicense, link with, or\ndistribute the Library is void, and will automatically terminate your\nrights under this License.  However, parties who have received copies,\nor rights, from you under this License will not have their licenses\nterminated so long as such parties remain in full compliance.\n\n  9. You are not required to accept this License, since you have not\nsigned it.  However, nothing else grants you permission to modify or\ndistribute the Library or its derivative works.  These actions are\nprohibited by law if you do not accept this License.  Therefore, by\nmodifying or distributing the Library (or any work based on the\nLibrary), you indicate your acceptance of this License to do so, and\nall its terms and conditions for copying, distributing or modifying\nthe Library or works based on it.\n\n  10. Each time you redistribute the Library (or any work based on the\nLibrary), the recipient automatically receives a license from the\noriginal licensor to copy, distribute, link with or modify the Library\nsubject to these terms and conditions.  You may not impose any further\nrestrictions on the recipients' exercise of the rights granted herein.\nYou are not responsible for enforcing compliance by third parties with\nthis License.\n\f\n  11. If, as a consequence of a court judgment or allegation of patent\ninfringement or for any other reason (not limited to patent issues),\nconditions are imposed on you (whether by court order, agreement or\notherwise) that contradict the conditions of this License, they do not\nexcuse you from the conditions of this License.  If you cannot\ndistribute so as to satisfy simultaneously your obligations under this\nLicense and any other pertinent obligations, then as a consequence you\nmay not distribute the Library at all.  For example, if a patent\nlicense would not permit royalty-free redistribution of the Library by\nall those who receive copies directly or indirectly through you, then\nthe only way you could satisfy both it and this License would be to\nrefrain entirely from distribution of the Library.\n\nIf any portion of this section is held invalid or unenforceable under any\nparticular circumstance, the balance of the section is intended to apply,\nand the section as a whole is intended to apply in other circumstances.\n\nIt is not the purpose of this section to induce you to infringe any\npatents or other property right claims or to contest validity of any\nsuch claims; this section has the sole purpose of protecting the\nintegrity of the free software distribution system which is\nimplemented by public license practices.  Many people have made\ngenerous contributions to the wide range of software distributed\nthrough that system in reliance on consistent application of that\nsystem; it is up to the author/donor to decide if he or she is willing\nto distribute software through any other system and a licensee cannot\nimpose that choice.\n\nThis section is intended to make thoroughly clear what is believed to\nbe a consequence of the rest of this License.\n\n  12. If the distribution and/or use of the Library is restricted in\ncertain countries either by patents or by copyrighted interfaces, the\noriginal copyright holder who places the Library under this License may add\nan explicit geographical distribution limitation excluding those countries,\nso that distribution is permitted only in or among countries not thus\nexcluded.  In such case, this License incorporates the limitation as if\nwritten in the body of this License.\n\n  13. The Free Software Foundation may publish revised and/or new\nversions of the Lesser General Public License from time to time.\nSuch new versions will be similar in spirit to the present version,\nbut may differ in detail to address new problems or concerns.\n\nEach version is given a distinguishing version number.  If the Library\nspecifies a version number of this License which applies to it and\n\"any later version\", you have the option of following the terms and\nconditions either of that version or of any later version published by\nthe Free Software Foundation.  If the Library does not specify a\nlicense version number, you may choose any version ever published by\nthe Free Software Foundation.\n\f\n  14. If you wish to incorporate parts of the Library into other free\nprograms whose distribution conditions are incompatible with these,\nwrite to the author to ask for permission.  For software which is\ncopyrighted by the Free Software Foundation, write to the Free\nSoftware Foundation; we sometimes make exceptions for this.  Our\ndecision will be guided by the two goals of preserving the free status\nof all derivatives of our free software and of promoting the sharing\nand reuse of software generally.\n\n\t\t\t    NO WARRANTY\n\n  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO\nWARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.\nEXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR\nOTHER PARTIES PROVIDE THE LIBRARY \"AS IS\" WITHOUT WARRANTY OF ANY\nKIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\nPURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE\nLIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME\nTHE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.\n\n  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN\nWRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY\nAND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU\nFOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR\nCONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE\nLIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING\nRENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A\nFAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF\nSUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH\nDAMAGES.\n\n\t\t     END OF TERMS AND CONDITIONS\n\f\n           How to Apply These Terms to Your New Libraries\n\n  If you develop a new library, and you want it to be of the greatest\npossible use to the public, we recommend making it free software that\neveryone can redistribute and change.  You can do so by permitting\nredistribution under these terms (or, alternatively, under the terms of the\nordinary General Public License).\n\n  To apply these terms, attach the following notices to the library.  It is\nsafest to attach them to the start of each source file to most effectively\nconvey the exclusion of warranty; and each file should have at least the\n\"copyright\" line and a pointer to where the full notice is found.\n\n    <one line to give the library's name and a brief idea of what it does.>\n    Copyright (C) <year>  <name of author>\n\n    This library is free software; you can redistribute it and/or\n    modify it under the terms of the GNU Lesser General Public\n    License as published by the Free Software Foundation; either\n    version 2.1 of the License, or (at your option) any later version.\n\n    This library is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n    Lesser General Public License for more details.\n\n    You should have received a copy of the GNU Lesser General Public\n    License along with this library; if not, write to the Free Software\n    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA\n\nAlso add information on how to contact you by electronic and paper mail.\n\nYou should also get your employer (if you work as a programmer) or your\nschool, if any, to sign a \"copyright disclaimer\" for the library, if\nnecessary.  Here is a sample; alter the names:\n\n  Yoyodyne, Inc., hereby disclaims all copyright interest in the\n  library `Frob' (a library for tweaking knobs) written by James Random Hacker.\n\n  <signature of Ty Coon>, 1 April 1990\n  Ty Coon, President of Vice\n\nThat's all there is to it!\n\n\n\n"
  },
  {
    "path": "cola/libvpsc/Makefile.am",
    "content": "EXTRA_DIST=libvpsc.pc.in\nlib_LTLIBRARIES = libvpsc.la\nlibvpsc_la_CPPFLAGS = -I$(top_srcdir) -I$(includedir)/libvpsc -fPIC\nlibvpsc_la_LDFLAGS = -no-undefined\n\n#DEFS=-DLIBVPSC_LOGGING\n\n\nlibvpsc_la_SOURCES = block.cpp\\\n\tblocks.cpp\\\n\tconstraint.cpp\\\n\trectangle.cpp\\\n\tsolve_VPSC.cpp\\\n\tvariable.cpp\\\n\tcbuffer.cpp\\\n\tisnan.h\\\n\tblock.h\\\n\tblocks.h\\\n\tconstraint.h\\\n\trectangle.h\\\n\tpairingheap.h\\\n\tsolve_VPSC.h\\\n\tvariable.h\\\n\tcbuffer.h\\\n\tlinesegment.h\\\n\tassertions.h\n\nlibvpscincludedir = $(includedir)/libvpsc\n\nlibvpscinclude_HEADERS = solve_VPSC.h \\\n\tblock.h\\\n\tconstraint.h\\\n\texceptions.h\\\n\trectangle.h\\\n\tvariable.h \\\n\tassertions.h\n\npkgconfigdir = $(libdir)/pkgconfig\npkgconfig_DATA = libvpsc.pc\n\nSUBDIRS = . tests\n\n"
  },
  {
    "path": "cola/libvpsc/assertions.h",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libvpsc - A solver for the problem of Variable Placement with \n *           Separation Constraints.\n *\n * Copyright (C) 2009  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n*/\n\n#ifndef VPSC_ASSERTIONS_H\n#define VPSC_ASSERTIONS_H\n\n#ifdef NDEBUG \n\n  #define COLA_ASSERT(expr)  static_cast<void>(0)\n\n#else // Not NDEBUG\n\n  // sstream needs ::strcpy_s under MinGW so include cstring.\n  #include <cstring>\n\n  #include <sstream>\n  #include <cassert>\n\n  #if defined(USE_ASSERT_EXCEPTIONS) \n\n    // String seems to be missing on MinGW's gcc,\n    // so define it here if it is missing.\n    #ifndef __STRING\n      #define __STRING(x) #x\n    #endif\n\n    #if !defined(__ASSERT_FUNCTION)\n      #define COLA_ASSERT(expr) \\\n          if (!(expr)) { \\\n              throw vpsc::CriticalFailure(__STRING(expr), __FILE__, __LINE__); \\\n          }\n    #else\n      #define COLA_ASSERT(expr) \\\n          if (!(expr)) { \\\n              throw vpsc::CriticalFailure(__STRING(expr), __FILE__, __LINE__, \\\n                      __ASSERT_FUNCTION); \\\n          }\n    #endif\n\n  #else\n    #define COLA_ASSERT(expr)  assert(expr)\n  #endif\n\nnamespace vpsc { \n\n// Critical failure: either something went wrong, or (more likely) there\n// was infeasible input.\nclass CriticalFailure\n{\n    public:\n        CriticalFailure(const char *expr, const char *file, int line, \n                const char *function = nullptr)\n            : expr(expr),\n              file(file),\n              line(line),\n              function(function)\n        {\n        }\n        std::string what() const\n        {\n            std::stringstream s;\n            s << \"ERROR: Critical assertion failed.\\n\";\n            s << \"  expression: \" << expr << \"\\n\";\n            s << \"  at line \" << line << \" of \" << file << \"\\n\";\n            if (function)\n            {\n                s << \"  in: \" << function << \"\\n\";\n            }\n\n            return s.str();\n        }\n    private:\n        const char *expr;\n        const char *file;\n        int line;\n        const char *function;\n};\n\n}\n\n#endif // NDEBUG\n\n\n#endif // VPSC_ASSERTIONS_H\n\n"
  },
  {
    "path": "cola/libvpsc/block.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libvpsc - A solver for the problem of Variable Placement with \n *           Separation Constraints.\n *\n * Copyright (C) 2005-2008  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n * Author(s):  Tim Dwyer\n*/\n\n/*\n * @brief A block is a group of variables that must be moved together to improve\n * the goal function without violating already active constraints.\n * The variables in a block are spanned by a tree of active constraints.\n *\n */\n\n#include \"libvpsc/block.h\"\n#include \"libvpsc/variable.h\"\n#include <cassert>\n#include \"libvpsc/pairing_heap.h\"\n#include \"libvpsc/constraint.h\"\n#include \"libvpsc/exceptions.h\"\n#include \"libvpsc/blocks.h\"\n\n#ifdef LIBVPSC_LOGGING\n#include <fstream>\nusing std::ios;\nusing std::ofstream;\nusing std::endl;\n#endif\n\n#define __NOTNAN(p) (p)==(p)\n\nnamespace vpsc {\nvoid PositionStats::addVariable(Variable* v) {\n    double ai=scale/v->scale;\n    double bi=v->offset/v->scale;\n    double wi=v->weight;\n    AB+=wi*ai*bi;\n    AD+=wi*ai*v->desiredPosition;\n    A2+=wi*ai*ai;\n    /*\n#ifdef LIBVPSC_LOGGING\n    ofstream f(LOGFILE,ios::app);\n    f << \"adding v[\" << v->id << \"], blockscale=\" << scale << \", despos=\" \n      << v->desiredPosition << \", ai=\" << ai << \", bi=\" << bi\n      << \", AB=\" << AB << \", AD=\" << AD << \", A2=\" << A2;\n#endif\n*/\n}\nvoid Block::addVariable(Variable* v) {\n    v->block=this;\n    vars->push_back(v);\n    if(ps.A2==0) ps.scale=v->scale;\n    //weight+= v->weight;\n    //wposn += v->weight * (v->desiredPosition - v->offset);\n    //posn=wposn/weight;\n    ps.addVariable(v);\n    posn=(ps.AD - ps.AB) / ps.A2;\n    COLA_ASSERT(__NOTNAN(posn));\n    /*\n#ifdef LIBVPSC_LOGGING\n    ofstream f(LOGFILE,ios::app);\n    f << \", posn=\" << posn << endl;\n#endif\n*/\n}\nBlock::Block(Blocks *blocks, Variable* const v)\n    : vars(new std::vector<Variable*>)\n    , posn(0)\n    //, weight(0)\n    //, wposn(0)\n    , deleted(false)\n    , timeStamp(0)\n    , in(nullptr)\n    , out(nullptr)\n    , blocks(blocks)\n{\n    if(v!=nullptr) {\n        v->offset=0;\n        addVariable(v);\n    }\n}\n\nvoid Block::updateWeightedPosition() {\n    //wposn=0;\n    ps.AB=ps.AD=ps.A2=0;\n    for (Vit v=vars->begin();v!=vars->end();++v) {\n        //wposn += ((*v)->desiredPosition - (*v)->offset) * (*v)->weight;\n        ps.addVariable(*v);\n    }\n    posn=(ps.AD - ps.AB) / ps.A2;\n    COLA_ASSERT(__NOTNAN(posn));\n#ifdef LIBVPSC_LOGGING\n    ofstream f(LOGFILE,ios::app);\n    f << \", posn=\" << posn << endl;\n#endif\n}\nBlock::~Block(void)\n{\n    delete vars;\n    delete in;\n    delete out;\n}\nvoid Block::setUpInConstraints() {\n    setUpConstraintHeap(in,true);\n}\nvoid Block::setUpOutConstraints() {\n    setUpConstraintHeap(out,false);\n}\nvoid Block::setUpConstraintHeap(PairingHeap<Constraint*,CompareConstraints>* &h,bool in) {\n    delete h;\n    h = new PairingHeap<Constraint*,CompareConstraints>();\n    for (Vit i=vars->begin();i!=vars->end();++i) {\n        Variable *v=*i;\n        std::vector<Constraint*> *cs=in?&(v->in):&(v->out);\n        for (Cit j=cs->begin();j!=cs->end();++j) {\n            Constraint *c=*j;\n            c->timeStamp=blocks->blockTimeCtr;\n            if ( ((c->left->block != this) && in) || \n                 ((c->right->block != this) && !in) )\n            {\n                h->insert(c);\n            }\n        }\n    }\n}    \nBlock* Block::merge(Block* b, Constraint* c) {\n#ifdef LIBVPSC_LOGGING\n    ofstream f(LOGFILE,ios::app);\n    f<<\"  merging on: \"<<*c<<\",c->left->offset=\"<<c->left->offset<<\",c->right->offset=\"<<c->right->offset<<endl;\n#endif\n    double dist = c->right->offset - c->left->offset - c->gap;\n    Block *l=c->left->block;\n    Block *r=c->right->block;\n    if (l->vars->size() < r->vars->size()) {\n        r->merge(l,c,dist);\n    } else {\n               l->merge(r,c,-dist);\n    }\n    Block* mergeBlock=b->deleted?this:b;\n#ifdef LIBVPSC_LOGGING\n    f<<\"  merged block=\"<<*mergeBlock<<endl;\n#endif\n    return mergeBlock;\n}\n/*\n * Merges b into this block across c.  Can be either a\n * right merge or a left merge\n * @param b block to merge into this\n * @param c constraint being merged\n * @param distance separation required to satisfy c\n */\nvoid Block::merge(Block *b, Constraint *c, double dist) {\n#ifdef LIBVPSC_LOGGING\n    ofstream f(LOGFILE,ios::app);\n    f<<\"    merging: \"<<*b<<\"dist=\"<<dist<<endl;\n#endif\n    c->active=true;\n    //wposn+=b->wposn-dist*b->weight;\n    //weight+=b->weight;\n    for(Vit i=b->vars->begin();i!=b->vars->end();++i) {\n        Variable *v=*i;\n        //v->block=this;\n        //vars->push_back(v);\n        v->offset+=dist;\n        addVariable(v);\n    }\n#ifdef LIBVPSC_LOGGING\n    for(Vit i=vars->begin();i!=vars->end();++i) {\n        Variable *v=*i;\n        f<<\"    v[\"<<v->id<<\"]: d=\"<<v->desiredPosition\n            <<\" a=\"<<v->scale<<\" o=\"<<v->offset\n            <<endl;\n    }\n    f<<\"  AD=\"<<ps.AD<<\" AB=\"<<ps.AB<<\" A2=\"<<ps.A2<<endl;\n#endif\n    //posn=wposn/weight;\n    //COLA_ASSERT(wposn==ps.AD - ps.AB);\n    posn=(ps.AD - ps.AB) / ps.A2;\n    COLA_ASSERT(__NOTNAN(posn));\n    b->deleted=true;\n}\n\nvoid Block::mergeIn(Block *b) {\n#ifdef LIBVPSC_LOGGING\n    ofstream f(LOGFILE,ios::app);\n    f<<\"  merging constraint heaps... \"<<endl;\n#endif\n    // We check the top of the heaps to remove possible internal constraints\n    findMinInConstraint();\n    b->findMinInConstraint();\n    in->merge(b->in);\n#ifdef LIBVPSC_LOGGING\n    f<<\"  merged heap: \"<<*in<<endl;\n#endif\n}\nvoid Block::mergeOut(Block *b) {    \n    findMinOutConstraint();\n    b->findMinOutConstraint();\n    out->merge(b->out);\n}\nConstraint *Block::findMinInConstraint() {\n    Constraint *v = nullptr;\n    std::vector<Constraint*> outOfDate;\n    while (!in->isEmpty()) {\n        v = in->findMin();\n        Block *lb=v->left->block;\n        Block *rb=v->right->block;\n        // rb may not be this if called between merge and mergeIn\n#ifdef LIBVPSC_LOGGING\n        ofstream f(LOGFILE,ios::app);\n        f<<\"  checking constraint ... \"<<*v;\n        f<<\"    timestamps: left=\"<<lb->timeStamp<<\" right=\"<<rb->timeStamp<<\" constraint=\"<<v->timeStamp<<endl;\n#endif\n        if(lb == rb) {\n            // constraint has been merged into the same block\n#ifdef LIBVPSC_LOGGING\n            if(v->slack()<0) {\n                f<<\"  violated internal constraint found! \"<<*v<<endl;\n                f<<\"     lb=\"<<*lb<<endl;\n                f<<\"     rb=\"<<*rb<<endl;\n            }\n#endif\n            in->deleteMin();\n#ifdef LIBVPSC_LOGGING\n            f<<\" ... skipping internal constraint\"<<endl;\n#endif\n        } else if(v->timeStamp < lb->timeStamp) {\n            // block at other end of constraint has been moved since this\n            in->deleteMin();\n            outOfDate.push_back(v);\n#ifdef LIBVPSC_LOGGING\n            f<<\"    reinserting out of date (reinsert later)\"<<endl;\n#endif\n        } else {\n            break;\n        }\n    }\n    for(Cit i=outOfDate.begin();i!=outOfDate.end();++i) {\n        v=*i;\n        v->timeStamp=blocks->blockTimeCtr;\n        in->insert(v);\n    }\n    if(in->isEmpty()) {\n        v=nullptr;\n    } else {\n        v=in->findMin();\n    }\n    return v;\n}\nConstraint *Block::findMinOutConstraint() {\n    if(out->isEmpty()) return nullptr;\n    Constraint *v = out->findMin();\n    while (v->left->block == v->right->block) {\n        out->deleteMin();\n        if(out->isEmpty()) return nullptr;\n        v = out->findMin();\n    }\n    return v;\n}\nvoid Block::deleteMinInConstraint() {\n    in->deleteMin();\n#ifdef LIBVPSC_LOGGING\n    ofstream f(LOGFILE,ios::app);\n    f<<\"deleteMinInConstraint... \"<<endl;\n    f<<\"  result: \"<<*in<<endl;\n#endif\n}\nvoid Block::deleteMinOutConstraint() {\n    out->deleteMin();\n}\ninline bool Block::canFollowLeft(Constraint const* c, Variable const* last) const {\n    return c->left->block==this && c->active && last!=c->left;\n}\ninline bool Block::canFollowRight(Constraint const* c, Variable const* last) const {\n    return c->right->block==this && c->active && last!=c->right;\n}\n\n// computes the derivative of v and the lagrange multipliers\n// of v's out constraints (as the recursive sum of those below.\n// Does not backtrack over u.\n// also records the constraint with minimum lagrange multiplier\n// in min_lm\ndouble Block::compute_dfdv(Variable* const v, Variable* const u,\n               Constraint *&min_lm) {\n    double dfdv=v->dfdv();\n    for(Cit it=v->out.begin();it!=v->out.end();++it) {\n        Constraint *c=*it;\n        if(canFollowRight(c,u)) {\n            c->lm=compute_dfdv(c->right,v,min_lm);\n            dfdv+=c->lm*c->left->scale;\n            if(!c->equality&&(min_lm==nullptr||c->lm<min_lm->lm)) min_lm=c;\n        }\n    }\n    for(Cit it=v->in.begin();it!=v->in.end();++it) {\n        Constraint *c=*it;\n        if(canFollowLeft(c,u)) {\n            c->lm=-compute_dfdv(c->left,v,min_lm);\n            dfdv-=c->lm*c->right->scale;\n            if(!c->equality&&(min_lm==nullptr||c->lm<min_lm->lm)) min_lm=c;\n        }\n    }\n    return dfdv/v->scale;\n}\ndouble Block::compute_dfdv(Variable* const v, Variable* const u) {\n    double dfdv = v->dfdv();\n    for(Cit it = v->out.begin(); it != v->out.end(); ++it) {\n        Constraint *c = *it;\n        if(canFollowRight(c,u)) {\n            c->lm =   compute_dfdv(c->right,v);\n            dfdv += c->lm * c->left->scale;\n        }\n    }\n    for(Cit it=v->in.begin();it!=v->in.end();++it) {\n        Constraint *c = *it;\n        if(canFollowLeft(c,u)) {\n            c->lm = - compute_dfdv(c->left,v);\n            dfdv -= c->lm * c->right->scale;\n        }\n    }\n    return dfdv/v->scale;\n}\n\n// The top level v and r are variables between which we want to find the\n// constraint with the smallest lm.  \n// Similarly, m is initially nullptr and is only assigned a value if the next\n// variable to be visited is r or if a possible min constraint is returned from\n// a nested call (rather than nullptr).\n// Then, the search for the m with minimum lm occurs as we return from\n// the recursion (checking only constraints traversed left-to-right \n// in order to avoid creating any new violations).\n// We also do not consider equality constraints as potential split points\nbool Block::split_path(\n    Variable* r, \n    Variable* const v, \n    Variable* const u, \n    Constraint* &m,\n    bool desperation=false\n    ) \n{\n    for(Cit it(v->in.begin());it!=v->in.end();++it) {\n        Constraint *c=*it;\n        if(canFollowLeft(c,u)) {\n#ifdef LIBVPSC_LOGGING\n    ofstream f(LOGFILE,ios::app);\n    f<<\"  left split path: \"<<*c<<endl;\n#endif\n            if(c->left==r) {\n                if(desperation&&!c->equality) m=c;\n                return true;\n            } else {\n                if(split_path(r,c->left,v,m)) {\n                    if(desperation && !c->equality && (!m||c->lm<m->lm)) {\n                               m=c;\n                    }\n                    return true;\n                }\n            }\n        }\n    }\n    for(Cit it(v->out.begin());it!=v->out.end();++it) {\n        Constraint *c=*it;\n        if(canFollowRight(c,u)) {\n#ifdef LIBVPSC_LOGGING\n    ofstream f(LOGFILE,ios::app);\n    f<<\"  right split path: \"<<*c<<endl;\n#endif\n            if(c->right==r) {\n                if(!c->equality) m=c;\n                return true;\n            } else {\n                if(split_path(r,c->right,v,m)) {\n                    if(!c->equality && (!m||c->lm<m->lm))\n                               m=c;\n                    return true;\n                }\n            }\n        }\n    }\n    return false;\n}\n/*\nBlock::Pair Block::compute_dfdv_between(\n        Variable* r, Variable* const v, Variable* const u, \n        const Direction dir = NONE, bool changedDirection = false) {\n    double dfdv=v->weight*(v->position() - v->desiredPosition);\n    Constraint *m=nullptr;\n    for(Cit it(v->in.begin());it!=v->in.end();++it) {\n        Constraint *c=*it;\n        if(canFollowLeft(c,u)) {\n            if(dir==RIGHT) { \n                changedDirection = true; \n            }\n            if(c->left==r) {\n                       r=nullptr;\n                    if(!c->equality) m=c; \n            }\n            Pair p=compute_dfdv_between(r,c->left,v,\n                    LEFT,changedDirection);\n            dfdv -= c->lm = -p.first;\n            if(r && p.second) \n                m = p.second;\n        }\n    }\n    for(Cit it(v->out.begin());it!=v->out.end();++it) {\n        Constraint *c=*it;\n        if(canFollowRight(c,u)) {\n            if(dir==LEFT) { \n                changedDirection = true; \n            }\n            if(c->right==r) {\n                       r=nullptr; \n                    if(!c->equality) m=c; \n            }\n            Pair p=compute_dfdv_between(r,c->right,v,\n                    RIGHT,changedDirection);\n            dfdv += c->lm = p.first;\n            if(r && p.second) \n                m = changedDirection && !c->equality && c->lm < p.second->lm \n                    ? c \n                    : p.second;\n        }\n    }\n    return Pair(dfdv,m);\n}\n*/\n\n// resets LMs for all active constraints to 0 by\n// traversing active constraint tree starting from v,\n// not back tracking over u\nvoid Block::reset_active_lm(Variable* const v, Variable* const u) {\n    for(Cit it=v->out.begin();it!=v->out.end();++it) {\n        Constraint *c=*it;\n        if(canFollowRight(c,u)) {\n            c->lm=0;\n            reset_active_lm(c->right,v);\n        }\n    }\n    for(Cit it=v->in.begin();it!=v->in.end();++it) {\n        Constraint *c=*it;\n        if(canFollowLeft(c,u)) {\n            c->lm=0;\n            reset_active_lm(c->left,v);\n        }\n    }\n}\nvoid Block::list_active(Variable* const v, Variable* const u) {\n    for(Cit it=v->out.begin();it!=v->out.end();++it) {\n        Constraint *c=*it;\n        if(canFollowRight(c,u)) {\n#ifdef LIBVPSC_LOGGING\n    ofstream f(LOGFILE,ios::app);\n    f<<\"  \"<<*c<<endl;\n#endif\n            list_active(c->right,v);\n        }\n    }\n    for(Cit it=v->in.begin();it!=v->in.end();++it) {\n        Constraint *c=*it;\n        if(canFollowLeft(c,u)) {\n#ifdef LIBVPSC_LOGGING\n    ofstream f(LOGFILE,ios::app);\n    f<<\"  \"<<*c<<endl;\n#endif\n            list_active(c->left,v);\n        }\n    }\n}\n/*\n * finds the constraint with the minimum lagrange multiplier, that is, the constraint\n * that most wants to split\n */\nConstraint *Block::findMinLM() {\n    Constraint *min_lm=nullptr;\n    reset_active_lm(vars->front(),nullptr);\n    compute_dfdv(vars->front(),nullptr,min_lm);\n#ifdef LIBVPSC_LOGGING\n    ofstream f(LOGFILE,ios::app);\n    f<<\"  langrangians: \"<<endl;\n    list_active(vars->front(),nullptr);\n#endif\n    return min_lm;\n}\nConstraint *Block::findMinLMBetween(Variable* const lv, Variable* const rv) {\n    reset_active_lm(vars->front(),nullptr);\n    compute_dfdv(vars->front(),nullptr);\n    Constraint *min_lm=nullptr;\n    split_path(rv,lv,nullptr,min_lm);\n#if 0\n    if(min_lm==nullptr) {\n        split_path(rv,lv,nullptr,min_lm,true);\n    }\n#else\n    if(min_lm==nullptr) {\n#ifdef LIBVPSC_DEBUG\n        fprintf(stderr,\"Couldn't find split point!\\n\");\n#endif\n        UnsatisfiableException e;\n        getActivePathBetween(e.path,lv,rv,nullptr);\n        throw e;\n    }\n    COLA_ASSERT(min_lm!=nullptr);\n#endif\n    return min_lm;\n}\n\n// populates block b by traversing the active constraint tree adding variables as they're \n// visited.  Starts from variable v and does not backtrack over variable u.\nvoid Block::populateSplitBlock(Block *b, Variable* v, Variable const* u) {\n    b->addVariable(v);\n    for (Cit c=v->in.begin();c!=v->in.end();++c) {\n        if (canFollowLeft(*c,u))\n            populateSplitBlock(b, (*c)->left, v);\n    }\n    for (Cit c=v->out.begin();c!=v->out.end();++c) {\n        if (canFollowRight(*c,u)) \n            populateSplitBlock(b, (*c)->right, v);\n    }\n}\n/*\n * Returns the active path between variables u and v... not back tracking over w\n */\nbool Block::getActivePathBetween(Constraints& path, Variable const* u,\n               Variable const* v, Variable const *w) const {\n    if(u==v) return true;\n    for (Cit_const c=u->in.begin();c!=u->in.end();++c) {\n        if (canFollowLeft(*c,w)) {\n            if(getActivePathBetween(path, (*c)->left, v, u)) {\n                path.push_back(*c);\n                return true;\n            }\n        }\n    }\n    for (Cit_const c=u->out.begin();c!=u->out.end();++c) {\n        if (canFollowRight(*c,w)) {\n            if(getActivePathBetween(path, (*c)->right, v, u)) {\n                path.push_back(*c);\n                return true;\n            }\n        }\n    }\n    return false;\n}\n// Search active constraint tree from u to see if there is a directed path to v.\n// Returns true if path is found with all constraints in path having their visited flag\n// set true.\nbool Block::isActiveDirectedPathBetween(Variable const* u, Variable const* v) const {\n    if(u==v) return true;\n    for (Cit_const c=u->out.begin();c!=u->out.end();++c) {\n        if(canFollowRight(*c,nullptr)) {\n            if(isActiveDirectedPathBetween((*c)->right,v)) {\n                return true;\n            }\n        }\n    }\n    return false;\n}\nbool Block::getActiveDirectedPathBetween(\n        Constraints& path, Variable const* u, Variable const* v) const {\n    if(u==v) return true;\n    for (Cit_const c=u->out.begin();c!=u->out.end();++c) {\n        if(canFollowRight(*c,nullptr)) {\n            if(getActiveDirectedPathBetween(path,(*c)->right,v)) {\n                path.push_back(*c);\n                return true;\n            }\n        }\n    }\n    return false;\n}\n/*\n * Block needs to be split because of a violated constraint between vl and vr.\n * We need to search the active constraint tree between l and r and find the constraint\n * with min lagrangrian multiplier and split at that point.\n * Returns the split constraint\n */\nConstraint* Block::splitBetween(Variable* const vl, Variable* const vr,\n               Block* &lb, Block* &rb) {\n#ifdef LIBVPSC_LOGGING\n    ofstream f(LOGFILE,ios::app);\n    f<<\"  need to split between: \"<<*vl<<\" and \"<<*vr<<endl;\n#endif\n    Constraint *c=findMinLMBetween(vl, vr);\n#ifdef LIBVPSC_LOGGING\n    f<<\"  going to split on: \"<<*c<<endl;\n#endif\n    if(c!=nullptr) {\n        split(lb,rb,c);\n        deleted = true;\n    }\n    return c;\n}\n\n/*\n * Creates two new blocks, l and r, and splits this block across constraint c,\n * placing the left subtree of constraints (and associated variables) into l\n * and the right into r.\n */\nvoid Block::split(Block* &l, Block* &r, Constraint* c) {\n    c->active=false;\n    l=new Block(blocks);\n    populateSplitBlock(l,c->left,c->right);\n    //COLA_ASSERT(l->weight>0);\n    r=new Block(blocks);\n    populateSplitBlock(r,c->right,c->left);\n    //COLA_ASSERT(r->weight>0);\n}\n\n/*\n * Computes the cost (squared euclidean distance from desired positions) of the\n * current positions for variables in this block\n */\ndouble Block::cost() {\n    double c = 0;\n    for (Vit v=vars->begin();v!=vars->end();++v) {\n        double diff = (*v)->position() - (*v)->desiredPosition;\n        c += (*v)->weight * diff * diff;\n    }\n    return c;\n}\nstd::ostream& operator <<(std::ostream &os, const Block& b)\n{\n    os<<\"Block(posn=\"<<b.posn<<\"):\";\n    for(Block::Vit v=b.vars->begin();v!=b.vars->end();++v) {\n        os<<\" \"<<**v;\n    }\n    if(b.deleted) {\n        os<<\" Deleted!\";\n    }\n    return os;\n}\n\n}\n\n"
  },
  {
    "path": "cola/libvpsc/block.h",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libvpsc - A solver for the problem of Variable Placement with \n *           Separation Constraints.\n *\n * Copyright (C) 2005-2008  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n * Author(s):  Tim Dwyer\n*/\n\n/*\n * \\brief A block is a group of variables that must be moved together to improve\n * the goal function without violating already active constraints.\n * The variables in a block are spanned by a tree of active constraints.\n */\n\n#ifndef VPSC_BLOCK_H\n#define VPSC_BLOCK_H\n\n#include <iostream>\n#include <vector>\n\ntemplate <class T, class TCompare> class PairingHeap;\n\nnamespace vpsc {\nclass Variable;\nclass Constraint;\nclass CompareConstraints;\nclass Blocks;\n\nstruct PositionStats {\n\tPositionStats() : scale(0), AB(0), AD(0), A2(0) {}\n\tvoid addVariable(Variable* const v);\n\tdouble scale;\n\tdouble AB;\n\tdouble AD;\n\tdouble A2;\n};\n\nclass Block\n{\n\ttypedef std::vector<Variable*> Variables;\n\ttypedef std::vector<Constraint*> Constraints;\n\ttypedef Variables::iterator Vit;\n\ttypedef Constraints::iterator Cit;\n\ttypedef Constraints::const_iterator Cit_const;\n\n\tfriend std::ostream& operator <<(std::ostream &os,const Block &b);\npublic:\n\tVariables *vars;\n\tdouble posn;\n\t//double weight;\n\t//double wposn;\n\tPositionStats ps;\n\tBlock(Blocks *blocks, Variable* const v=nullptr);\n\t~Block(void);\n\tConstraint* findMinLM();\n\tConstraint* findMinLMBetween(Variable* const lv, Variable* const rv);\n\tConstraint* findMinInConstraint();\n\tConstraint* findMinOutConstraint();\n\tvoid deleteMinInConstraint();\n\tvoid deleteMinOutConstraint();\n\tvoid updateWeightedPosition();\n\tvoid merge(Block *b, Constraint *c, double dist);\n\tBlock* merge(Block *b, Constraint *c);\n\tvoid mergeIn(Block *b);\n\tvoid mergeOut(Block *b);\n\tvoid split(Block *&l, Block *&r, Constraint *c);\n\tConstraint* splitBetween(Variable* vl, Variable* vr, Block* &lb, Block* &rb);\n\tvoid setUpInConstraints();\n\tvoid setUpOutConstraints();\n\tdouble cost();\n\tbool deleted;\n\tlong timeStamp;\n\tPairingHeap<Constraint*,CompareConstraints> *in;\n\tPairingHeap<Constraint*,CompareConstraints> *out;\n\tbool getActivePathBetween(Constraints& path, Variable const* u,\n\t       \tVariable const* v, Variable const *w) const;\n\tbool isActiveDirectedPathBetween(\n\t\t\tVariable const* u, Variable const* v) const;\n\tbool getActiveDirectedPathBetween(Constraints& path, Variable const * u, Variable const * v) const;\nprivate:\n\ttypedef enum {NONE, LEFT, RIGHT} Direction;\n\ttypedef std::pair<double, Constraint*> Pair;\n\tvoid reset_active_lm(Variable* const v, Variable* const u);\n\tvoid list_active(Variable* const v, Variable* const u);\n\tdouble compute_dfdv(Variable* const v, Variable* const u);\n\tdouble compute_dfdv(Variable* const v, Variable* const u, Constraint *&min_lm);\n\tbool split_path(Variable*, Variable* const, Variable* const, \n\t\t\tConstraint* &min_lm, bool desperation);\n\tbool canFollowLeft(Constraint const* c, Variable const* last) const;\n\tbool canFollowRight(Constraint const* c, Variable const* last) const;\n\tvoid populateSplitBlock(Block *b, Variable* v, Variable const* u);\n\tvoid addVariable(Variable* v);\n\tvoid setUpConstraintHeap(PairingHeap<Constraint*,CompareConstraints>* &h,bool in);\n\n    // Parent container, that holds the blockTimeCtr.\n    Blocks *blocks;\n};\n}\n\n#endif // VPSC_BLOCK_H\n"
  },
  {
    "path": "cola/libvpsc/blocks.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libvpsc - A solver for the problem of Variable Placement with \n *           Separation Constraints.\n *\n * Copyright (C) 2005-2012  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n * Author(s):  Tim Dwyer\n *             Michael Wybrow\n*/\n\n/*\n * @brief A block structure defined over the variables\n *\n * A block structure defined over the variables such that each block contains\n * 1 or more variables, with the invariant that all constraints inside a block\n * are satisfied by keeping the variables fixed relative to one another\n */\n\n#include \"libvpsc/blocks.h\"\n#include \"libvpsc/block.h\"\n#include \"libvpsc/constraint.h\"\n#include \"libvpsc/variable.h\"\n#include \"libvpsc/assertions.h\"\n\n#ifdef LIBVPSC_LOGGING\n#include <fstream>\nusing std::ios;\nusing std::ofstream;\nusing std::endl;\n#endif\nusing std::vector;\nusing std::iterator;\nusing std::list;\nusing std::copy;\n#define __NOTNAN(p) (p)==(p)\n\nnamespace vpsc {\n\n\nBlocks::Blocks(vector<Variable*> const &vs) : vs(vs),nvs(vs.size()) {\n    blockTimeCtr=0;\n    m_blocks.resize(nvs);\n    for(size_t i=0;i<nvs;i++) {\n        m_blocks[i] = new Block(this, vs[i]);\n    }\n}\nBlocks::~Blocks(void)\n{\n    blockTimeCtr=0;\n    size_t length = m_blocks.size();\n    for (size_t i = 0; i < length; ++i)\n    {\n        delete m_blocks[i];\n    }\n    m_blocks.clear();\n}\n\n/*\n * returns a list of variables with total ordering determined by the constraint \n * DAG\n */\nlist<Variable*> *Blocks::totalOrder() {\n    list<Variable*> *order = new list<Variable*>;\n    for(size_t i=0;i<nvs;i++) {\n        vs[i]->visited=false;\n    }\n    for(size_t i=0;i<nvs;i++) {\n        if(vs[i]->in.size()==0) {\n            dfsVisit(vs[i],order);\n        }\n    }\n    return order;\n}\n// Recursive depth first search giving total order by pushing nodes in the DAG\n// onto the front of the list when we finish searching them\nvoid Blocks::dfsVisit(Variable *v, list<Variable*> *order) {\n    v->visited=true;\n    vector<Constraint*>::iterator it=v->out.begin();\n    for(;it!=v->out.end();++it) {\n        Constraint *c=*it;\n        if(!c->right->visited) {\n            dfsVisit(c->right, order);\n        }\n    }    \n#ifdef LIBVPSC_LOGGING\n    ofstream f(LOGFILE,ios::app);\n    f<<\"  order=\"<<*v<<endl;\n#endif\n    order->push_front(v);\n}\n/*\n * Processes incoming constraints, most violated to least, merging with the\n * neighbouring (left) block until no more violated constraints are found\n */\nvoid Blocks::mergeLeft(Block *r) {    \n#ifdef LIBVPSC_LOGGING\n    ofstream f(LOGFILE,ios::app);\n    f<<\"mergeLeft called on \"<<*r<<endl;\n#endif\n    r->timeStamp=++blockTimeCtr;\n    r->setUpInConstraints();\n    Constraint *c=r->findMinInConstraint();\n    while (c != nullptr && c->slack()<0) {\n#ifdef LIBVPSC_LOGGING\n        f<<\"mergeLeft on constraint: \"<<*c<<endl;\n#endif\n        r->deleteMinInConstraint();\n        Block *l = c->left->block;        \n        if (l->in==nullptr) l->setUpInConstraints();\n        double dist = c->right->offset - c->left->offset - c->gap;\n        if (r->vars->size() < l->vars->size()) {\n            dist=-dist;\n            std::swap(l, r);\n        }\n        blockTimeCtr++;\n        r->merge(l, c, dist);\n        r->mergeIn(l);\n        r->timeStamp=blockTimeCtr;\n        removeBlock(l);\n        c=r->findMinInConstraint();\n    }        \n#ifdef LIBVPSC_LOGGING\n    f<<\"merged \"<<*r<<endl;\n#endif\n}    \n/*\n * Symmetrical to mergeLeft\n */\nvoid Blocks::mergeRight(Block *l) {    \n#ifdef LIBVPSC_LOGGING\n    ofstream f(LOGFILE,ios::app);\n    f<<\"mergeRight called on \"<<*l<<endl;\n#endif    \n    l->setUpOutConstraints();\n    Constraint *c = l->findMinOutConstraint();\n    while (c != nullptr && c->slack()<0) {        \n#ifdef LIBVPSC_LOGGING\n        f<<\"mergeRight on constraint: \"<<*c<<endl;\n#endif\n        l->deleteMinOutConstraint();\n        Block *r = c->right->block;\n        r->setUpOutConstraints();\n        double dist = c->left->offset + c->gap - c->right->offset;\n        if (l->vars->size() > r->vars->size()) {\n            dist=-dist;\n            std::swap(l, r);\n        }\n        l->merge(r, c, dist);\n        l->mergeOut(r);\n        removeBlock(r);\n        c=l->findMinOutConstraint();\n    }    \n#ifdef LIBVPSC_LOGGING\n    f<<\"merged \"<<*l<<endl;\n#endif\n}\nvoid Blocks::removeBlock(Block *doomed) {\n    doomed->deleted=true;\n    //erase(doomed);\n}\n\n// Clears up deleted blocks from the blocks list.\nvoid Blocks::cleanup(void)\n{\n    // We handle removal of items in-place by doing a single linear pass over \n    // the vector. We use two indexes, j to refer to elements we've checked\n    // from the original list and i to refer to the current position we are\n    // writing in the updated list.\n    size_t i = 0;\n    \n    // For all items in the current blocks list...\n    size_t length = m_blocks.size();\n    for (size_t j = 0; j < length; )\n    {\n        if (m_blocks[j]->deleted)\n        {\n            // The element is deleted, so free it and increment j.\n            delete m_blocks[j];\n            ++j;\n        }\n        else\n        {\n            // The current element is still valid.\n            if (j > i)\n            {\n                // If we've not looking at same element, then copy from j to i.\n                m_blocks[i] = m_blocks[j];\n            }\n            // Increment both indexes.\n            ++i;\n            ++j;\n        }\n    }\n    m_blocks.resize(i);\n}\n/*\n * Splits block b across constraint c into two new blocks, l and r (c's left\n * and right sides respectively)\n */\nvoid Blocks::split(Block *b, Block *&l, Block *&r, Constraint *c) {\n    b->split(l,r,c);\n    m_blocks.push_back(l);\n    m_blocks.push_back(r);\n#ifdef LIBVPSC_LOGGING\n    ofstream f(LOGFILE,ios::app);\n    f<<\"Split left: \"<<*l<<endl;\n    f<<\"Split right: \"<<*r<<endl;\n#endif\n    r->posn = b->posn;\n    //COLA_ASSERT(r->weight!=0);\n    //r->wposn = r->posn * r->weight;\n    mergeLeft(l);\n    // r may have been merged!\n    r = c->right->block;\n    r->updateWeightedPosition();\n    //r->posn = r->wposn / r->weight;\n    mergeRight(r);\n    removeBlock(b);\n\n    COLA_ASSERT(__NOTNAN(l->posn));\n    COLA_ASSERT(__NOTNAN(r->posn));\n}\n/*\n * returns the cost total squared distance of variables from their desired\n * positions\n */\ndouble Blocks::cost() {\n    double c = 0;\n    size_t length = m_blocks.size();\n    for (size_t i = 0; i < length; ++i)\n    {\n        c += m_blocks[i]->cost();\n    }\n    return c;\n}\n\n}\n"
  },
  {
    "path": "cola/libvpsc/blocks.h",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libvpsc - A solver for the problem of Variable Placement with \n *           Separation Constraints.\n *\n * Copyright (C) 2005-2012  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n * Author(s):  Tim Dwyer\n *             Michael Wybrow\n*/\n\n/*\n * @brief A block structure defined over the variables\n *\n * A block structure defined over the variables such that each block contains\n * 1 or more variables, with the invariant that all constraints inside a block\n * are satisfied by keeping the variables fixed relative to one another\n *\n */\n\n#ifndef VPSC_BLOCKS_H\n#define VPSC_BLOCKS_H\n\n#ifdef LIBVPSC_LOGGING\n#define LOGFILE \"libvpsc.log\"\n#endif\n\n#include <list>\n#include <vector>\n\n// size_t is strangely not defined on some older MinGW GCC versions. \n#include <cstddef>\n\nnamespace vpsc {\nclass Block;\nclass Variable;\nclass Constraint;\n/*\n * A block structure defined over the variables such that each block contains\n * 1 or more variables, with the invariant that all constraints inside a block\n * are satisfied by keeping the variables fixed relative to one another\n */\nclass Blocks\n{\npublic:\n\tBlocks(std::vector<Variable*> const &vs);\n\t~Blocks(void);\n\tvoid mergeLeft(Block *r);\n\tvoid mergeRight(Block *l);\n\tvoid split(Block *b, Block *&l, Block *&r, Constraint *c);\n\tstd::list<Variable*> *totalOrder();\n\tvoid cleanup();\n\tdouble cost();\n\n    size_t size() const;\n    Block *at(size_t index) const;\n    void insert(Block *block);\n    \n    long blockTimeCtr;\nprivate:\n\tvoid dfsVisit(Variable *v, std::list<Variable*> *order);\n\tvoid removeBlock(Block *doomed);\n    \n    std::vector<Block*> m_blocks;\n\tstd::vector<Variable*> const &vs;\n\tsize_t nvs;\n};\n\ninline size_t Blocks::size() const\n{\n    return m_blocks.size();\n}\n\ninline Block *Blocks::at(size_t index) const\n{\n    return m_blocks[index];\n}\n\ninline void Blocks::insert(Block *block)\n{\n    m_blocks.push_back(block);\n}\n\n}\n#endif // VPSC_BLOCKS_H\n"
  },
  {
    "path": "cola/libvpsc/cbuffer.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libvpsc - A solver for the problem of Variable Placement with \n *           Separation Constraints.\n *\n * Copyright (C) 2005-2008  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n * Author(s):  Tim Dwyer\n *\n*/\n\n#include <cfloat>\n\n#include \"libvpsc/cbuffer.h\"\n#include \"libvpsc/constraint.h\"\n#include \"libvpsc/assertions.h\"\n\nnamespace vpsc {\n    static const double ZERO_UPPERBOUND=-0.0000001;\n    void CBuffer::load() {\n        size=0; \n        double buffMaxSlack=-DBL_MAX;\n        unsigned buffMaxSlackPos=0;\n        for(Constraints::iterator i=master_list.begin();\n                i!=master_list.end();++i) {\n            Constraint *c=*i;\n            double slack = c->slack();\n            if(c->equality||slack<ZERO_UPPERBOUND) {\n                if(size<maxsize) {\n                    // make sure buffer is full\n                    buffer[size]=c;\n                    if(slack>buffMaxSlack) {\n                        buffMaxSlack=slack;\n                        buffMaxSlackPos=size;\n                    }\n                    size++;\n                } else {\n                    // if c is more violated than the least violated\n                    // constraint in the buffer then replace it\n                    buffer[buffMaxSlackPos]=c;\n                    // need to search the buffer for the new least\n                    // violated constraint\n                    buffMaxSlack=-DBL_MAX;\n                    for(unsigned i=0;i<size;i++) {\n                        c=buffer[i];\n                        if(!c->equality&&buffMaxSlack < c->slack()) {\n                            buffMaxSlack = slack;\n                            buffMaxSlackPos = i;\n                        }\n                    }\n                }\n            }\n        }\n    }\n    Constraint* CBuffer::mostViolated() {\n        Constraint* v=nullptr;\n        while(true) {\n            if(size==0) {\n                load();\n                if(size==0) break;\n            }\n            double minSlack=DBL_MAX;\n            int i,deletePos=-1;\n            for(i=0;i<(int)size;i++) {\n                Constraint *c=buffer[i];\n                double slack = c->slack();\n                if(!(c->equality||slack < ZERO_UPPERBOUND)) {\n                    COLA_ASSERT(size>0);\n                    buffer[i--]=buffer[--size];\n                } else if(c->equality||slack < minSlack) {\n                    v=c;\n                    deletePos=i;    \n                    minSlack=slack;\n                }\n            }\n            if(deletePos>=0) {\n                COLA_ASSERT(size>0);\n                buffer[deletePos]=buffer[--size];\n                break;\n            }\n        }\n        return v;\n    }\n}\n"
  },
  {
    "path": "cola/libvpsc/cbuffer.h",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libvpsc - A solver for the problem of Variable Placement with \n *           Separation Constraints.\n *\n * Copyright (C) 2005-2008  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n * Author(s):  Tim Dwyer\n *\n */\n#ifndef VPSC_CBUFFER_H\n#define VPSC_CBUFFER_H\n\n#include <vector>\n\nnamespace vpsc {\n    class Constraint;\n    class CBuffer {\n    public:\n        CBuffer(std::vector<Constraint*>& l,\n                const unsigned maxsize=5) \n                 : master_list(l), maxsize(maxsize), size(0) {\n            buffer.resize(maxsize);\n            load();\n        }\n        void reset() { size=0; }\n        void load();\n        Constraint* mostViolated();\n    private:\n        std::vector<Constraint*>& master_list;\n        std::vector<Constraint*> buffer;\n        const unsigned maxsize;\n        unsigned size;\n    };\n}\n\n#endif // VPSC_CBUFFER_H\n\n"
  },
  {
    "path": "cola/libvpsc/constraint.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libvpsc - A solver for the problem of Variable Placement with \n *           Separation Constraints.\n *\n * Copyright (C) 2005-2008  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n * Author(s):  Tim Dwyer\n*/\n\n\n#include <map>\n#include <list>\n#include <sstream>\n#include <cassert>\n#include <cfloat>\n#include <cmath>\n\n\n#include \"libvpsc/constraint.h\"\n#include \"libvpsc/variable.h\"\n\nnamespace vpsc {\nConstraint::Constraint(Variable *left, Variable *right, double gap, bool equality)\n: left(left),\n  right(right),\n  gap(gap),\n  timeStamp(0),\n  active(false),\n  equality(equality),\n  unsatisfiable(false),\n  needsScaling(true),\n  creator(nullptr)\n{\n    // In hindsight I think it's probably better to build the constraint DAG\n    // (by creating variable in/out lists) when needed, rather than in advance\n    //left->out.push_back(this);\n    //right->in.push_back(this);\n}\nConstraint::~Constraint() {\n    // see constructor: the following is just way too slow.  \n    // Better to create a\n    // new DAG on demand than maintain the lists dynamically.\n    //Constraints::iterator i;\n    //for(i=left->out.begin(); i!=left->out.end(); i++) {\n        //if(*i==this) break;\n    //}\n    //left->out.erase(i);\n    //for(i=right->in.begin(); i!=right->in.end(); i++) {\n        //if(*i==this) break;\n    //}\n    //right->in.erase(i);\n}\nstd::ostream& operator <<(std::ostream &os, const Constraint &c)\n{\n    const char *type = c.equality ? \"=\" : \"<=\";\n    std::ostringstream lscale, rscale;\n    if (c.left->scale != 1) \n    {\n        lscale << c.left->scale << \"*\";\n    }\n    if (c.right->scale != 1)\n    {\n        rscale << c.right->scale << \"*\";\n    }\n    os << lscale.str() << *c.left << \"+\" << c.gap << type << \n          rscale.str() << *c.right;\n    if (c.left->block && c.right->block)\n    {\n        os << \"(\" << c.slack() << \")\" << (c.active ? \"-active\" : \"\") <<\n              \"(lm=\" << c.lm << \")\";\n    }\n    else\n    {\n        os << \"(vars have no position)\";\n    }\n    return os;\n}\n#include \"libvpsc/block.h\"\nbool CompareConstraints::operator() (\n    Constraint *const &l, Constraint *const &r\n) const {\n    double const sl = \n        l->left->block->timeStamp > l->timeStamp\n        ||l->left->block==l->right->block\n        ?-DBL_MAX:l->slack();\n    double const sr = \n        r->left->block->timeStamp > r->timeStamp\n        ||r->left->block==r->right->block\n        ?-DBL_MAX:r->slack();\n    if(sl==sr) {\n        // arbitrary choice based on id\n        if(l->left->id==r->left->id) {\n            if(l->right->id<r->right->id) return true;\n            return false;\n        }\n        if(l->left->id<r->left->id) return true;\n        return false;\n    }\n    return sl < sr;\n}\n\n\ntypedef std::list<std::map<Variable *, double> > VarOffsetMapList;\n\nclass EqualityConstraintSet\n{\n    public:\n        EqualityConstraintSet(Variables vs)\n        {\n            for (size_t i = 0; i < vs.size(); ++i)\n            {\n                std::map<Variable *, double> varSet;\n                varSet[vs[i]] = 0;\n                variableGroups.push_back(varSet);\n            }\n        }\n        bool isRedundant(Variable *lhs, Variable *rhs, double sep)\n        {\n            VarOffsetMapList::iterator lhsSet = setForVar(lhs);\n            VarOffsetMapList::iterator rhsSet = setForVar(rhs);\n            COLA_ASSERT(lhsSet != variableGroups.end());\n            COLA_ASSERT(rhsSet != variableGroups.end());\n            if (lhsSet == rhsSet)\n            {\n                // Check if this is a redundant constraint.\n                if (fabs(((*lhsSet)[lhs] + sep) - (*rhsSet)[rhs]) < 0.0001)\n                {\n                    // If so, return true.\n                    return true;\n                }\n            }\n            return false;\n        }\n        void mergeSets(Variable *lhs, Variable *rhs, double sep)\n        {\n            VarOffsetMapList::iterator lhsSet = setForVar(lhs);\n            VarOffsetMapList::iterator rhsSet = setForVar(rhs);\n            if (lhsSet == rhsSet)\n            {\n                return;\n            }\n\n            double rhsOldOffset = (*rhsSet)[rhs];\n            double rhsNewOffset = (*lhsSet)[lhs] + sep;\n            double offset = rhsNewOffset - rhsOldOffset;\n\n            // Update offsets\n            for (std::map<Variable *, double>::iterator it = rhsSet->begin();\n                    it != rhsSet->end(); ++it)\n            {\n                it->second += offset;\n            }\n            \n            // Merge rhsSet into lhsSet\n            lhsSet->insert(rhsSet->begin(), rhsSet->end());\n            variableGroups.erase(rhsSet);\n        }\n\n    private:\n        VarOffsetMapList::iterator setForVar(Variable *var)\n        {\n            for (VarOffsetMapList::iterator it = variableGroups.begin();\n                    it != variableGroups.end(); ++it)\n            {\n                if (it->find(var) != it->end())\n                {\n                    return it;\n                }\n            }\n            return variableGroups.end();\n        }\n\n    VarOffsetMapList variableGroups;\n};\n\nConstraints constraintsRemovingRedundantEqualities(const Variables& vars, \n        const Constraints& constraints)\n{\n    EqualityConstraintSet equalitySets(vars);\n    Constraints cs = Constraints(constraints.size());\n    int csSize = 0;\n\n    for (unsigned i = 0; i < constraints.size(); ++i)\n    {\n        Constraint *c = constraints[i];\n        if (c->equality)\n        {\n            if (!equalitySets.isRedundant(c->left, c->right, c->gap))\n            {\n                // Only add non-redundant equalities\n                equalitySets.mergeSets(c->left, c->right, c->gap);\n                cs[csSize++] = c;\n            }\n        }\n        else\n        {\n            // Add all non-equalities\n            cs[csSize++] = c;\n        }\n    }\n    cs.resize(csSize);\n    return cs;\n}\n\n\n}\n"
  },
  {
    "path": "cola/libvpsc/constraint.h",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libvpsc - A solver for the problem of Variable Placement with \n *           Separation Constraints.\n *\n * Copyright (C) 2005-2008  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n * Author(s):  Tim Dwyer\n*/\n\n\n#ifndef VPSC_CONSTRAINT_H\n#define VPSC_CONSTRAINT_H\n\n// cmath needs ::strcpy_s under MinGW so include cstring.\n#include <cstring>\n\n#include <cfloat>\n#include <iostream>\n#include <vector>\n#include <sstream>\n\n#include \"libvpsc/variable.h\"\n\nnamespace vpsc {\n\nclass Variable;\ntypedef std::vector<Variable *> Variables;\n\n//! @brief A constraint determines a minimum or exact spacing required between\n//!        two Variable objects.\n//!\nclass Constraint\n{\n\tfriend std::ostream& operator <<(std::ostream &os,const Constraint &c);\npublic:\n    //! @brief Constructs a minimum or exact spacing constraint between two\n    //!        Variable objects.\n    //!\n    //! (left + gap < right)  or (left + gap == right)\n    //!\n    //! @param[in] left      The left Variable.\n    //! @param[in] right     The right Variable.\n    //! @param[in] gap       The minimum or exact distance to separate the \n    //!                      variables by.\n    //! @param[in] equality  Whether the separation is an exact distance or\n    //!                      not.  The default is false.\n\tConstraint(Variable *left, Variable *right, double gap, \n            bool equality = false);\n\t~Constraint();\n\n    /**\n     *  @brief Returns a textual description of the constraint.\n     *\n     *  @return     A string describing the constraint.\n     */\n    std::string toString(void) const\n    {\n        std::stringstream stream;\n        stream << \"Constraint: var(\" << left->id << \") \";\n        if (gap < 0)\n        {\n            stream << \"- \" << -gap << \" \";\n        }\n        else\n        {\n            stream << \"+ \" << gap << \" \";\n        }\n        stream << ((equality) ? \"==\" : \"<=\");\n        stream << \" var(\" << right->id << \") \";\n        return stream.str();\n    }\n\n    inline double slack(void) const \n    { \n        if (unsatisfiable)\n        {\n            return DBL_MAX;\n        }\n        if (needsScaling)\n        {\n            return right->scale * right->position() - gap - \n                    left->scale * left->position();\n        }\n        COLA_ASSERT(left->scale == 1);\n        COLA_ASSERT(right->scale == 1);\n        return right->unscaledPosition() - gap - left->unscaledPosition(); \n    }\n\n    //! @brief The left Variable.\n    Variable *left;\n    //! @brief The right Variable.\n\tVariable *right;\n    //! @brief The minimum or exact distance to separate the variables by.\n\tdouble gap;\n\tdouble lm;\n\tlong timeStamp;\n\tbool active;\n    //! @brief Whether the separation is an exact distance or not.\n\tconst bool equality;\n    //! @brief Denote whether this constraint was unsatisifable (once the VPSC \n    //!        instance has been solved or satisfied).\n\tbool unsatisfiable;\n    bool needsScaling;\n    void *creator;\n};\n\nclass CompareConstraints {\npublic:\n\tbool operator() (Constraint *const &l, Constraint *const &r) const;\n};\n\n//! @brief A vector of pointers to Constraint objects.\ntypedef std::vector<Constraint*> Constraints;\n\n/** @brief Given a set of variables and constraints, returns a modified set\n *         of constraints with all redundant equality constraints removed.\n *\n * VPSC doesn't work well with redundant equality constraints, usually showing\n * them as unsatisfiable.  This function looks for cycles of equality \n * constraints and removes the redundant ones.\n */\nextern Constraints constraintsRemovingRedundantEqualities(\n        const Variables& vars, const Constraints& constraints);\n\n}\n\n#endif // VPSC_CONSTRAINT_H\n"
  },
  {
    "path": "cola/libvpsc/doc/description.doc",
    "content": "/*!\n\n\\if LIBVPSC_DOC\n@mainpage libvpsc: Variable Placement with Separation Constraints solver\n\\endif\n\\if ADAPTAGRAMS_DOC\n@page libvpsc libvpsc &mdash; Overview\n\\endif\n\n\nlibvpsc is a cross-platform C++ library for solving for the Variable Placement with Separation Constraints problem. This is a quadratic programming problem in which the squared differences between a placement vector and some ideal placement are minimised subject to a set of separation constraints. This is very useful in a number of layout problems.\n\nlibvpsc is part of the \n<a href=\"http://www.adaptagrams.org/\">Adaptagrams project</a>. \nThere are no official releases yet, though the code is stable and \navailable from the Adaptagrams \n<a href=\"https://github.com/mjwybrow/adaptagrams\">GitHub \nrepository</a>.\n\nThe API is documented using Doxygen.  The documentation you are currently \nreading can be obtained by running doxygen in the cola directory. \n\nlibcola is written and maintained by \n<a href=\"http://users.monash.edu/~mwybrow/\">Michael Wybrow</a> and\n<a href=\"http://ialab.it.monash.edu/~dwyer/\">Tim Dwyer</a>,\nmembers of <a href=\"http://ialab.it.monash.edu/\">Immersive Analytics Lab</a> at Monash University, Australia.\n\nThe algorithms used for VPSC are described in the following papers.  If you use libcola, please cite the relevant paper.\n-  Tim Dwyer, Kim Marriott, and Peter J. Stuckey. Fast node overlap removal.\\n\n   In Proceedings 13th International Symposium on Graph Drawing (GD '05),\\n\n   volume 3843 of LNCS, pages 153-164. Springer, 2006.\n\n\n*/\n\n\n"
  },
  {
    "path": "cola/libvpsc/exceptions.h",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libvpsc - A solver for the problem of Variable Placement with \n *           Separation Constraints.\n *\n * Copyright (C) 2005-2008  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n*/\n\n#ifndef VPSC_EXCEPTIONS_H\n#define VPSC_EXCEPTIONS_H\n\n#include <vector>\nnamespace vpsc {\nclass Constraint;\nstruct UnsatisfiableException {\n\tstd::vector<Constraint*> path;\n};\nstruct UnsatisfiedConstraint {\n\tUnsatisfiedConstraint(Constraint& c):c(c) {}\n\tConstraint& c;\n};\n} // namespace vpsc\n\n#endif // VPSC_EXCEPTIONS_H\n"
  },
  {
    "path": "cola/libvpsc/libvpsc.pc.in",
    "content": "prefix=@prefix@\nexec_prefix=@exec_prefix@\nlibdir=@libdir@\nincludedir=@includedir@\n\nName: libvpsc\nDescription: A solver for the Variable Placement with Separation Constraints problem.\nURL: http://www.adaptagrams.org/\nVersion: @VERSION@\nRequires:\nLibs: -L${libdir} -lvpsc\nCflags: -I${includedir}/libvpsc"
  },
  {
    "path": "cola/libvpsc/linesegment.h",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libvpsc - A solver for the problem of Variable Placement with \n *           Separation Constraints.\n *\n * Copyright (C) 2005-2008  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n*/\n\n////////////////////////////////////////////////////////////////////////////////\n// \n// 2D Line Segment Intersection example\n// Implementation of the theory provided by Paul Bourke\n// \n// Written by Damian Coventry\n// Tuesday, 9 January 2007\n// \n////////////////////////////////////////////////////////////////////////////////\n\n#ifndef VPSC_LINESEGMENT_H\n#define VPSC_LINESEGMENT_H\n\nnamespace linesegment {\nclass Vector\n{\npublic:\n    double x_, y_;\n\n    Vector(double f = 0.0f)\n        : x_(f), y_(f) {}\n\n    Vector(double x, double y)\n        : x_(x), y_(y) {}\n};\n\nclass LineSegment\n{\npublic:\n    Vector begin_;\n    Vector end_;\n\n    LineSegment(const Vector& begin, const Vector& end)\n        : begin_(begin), end_(end) {}\n\n    enum IntersectResult { PARALLEL, COINCIDENT, NOT_INTERSECTING, INTERSECTING };\n\n    IntersectResult Intersect(const LineSegment& other_line, Vector& intersection)\n    {\n        double dx1=end_.x_ - begin_.x_;\n        double dy1=end_.y_ - begin_.y_;\n        double dx2=other_line.end_.x_ - other_line.begin_.x_;\n        double dy2=other_line.end_.y_ - other_line.begin_.y_;\n\n        double denom = dy2 * dx1 - dy1 * dx2;\n\n        double nume_a = dx2 * (begin_.y_ - other_line.begin_.y_) -\n                        dy2 * (begin_.x_ - other_line.begin_.x_);\n\n        double nume_b = dx1 * (begin_.y_ - other_line.begin_.y_) -\n                        dy1 * (begin_.x_ - other_line.begin_.x_);\n\n        if(denom == 0.0f)\n        {\n            if(nume_a == 0.0f && nume_b == 0.0f)\n            {\n                return COINCIDENT;\n            }\n            return PARALLEL;\n        }\n\n        double ua = nume_a / denom;\n        double ub = nume_b / denom;\n\n        if(ua >= 0.0f && ua <= 1.0f && ub >= 0.0f && ub <= 1.0f)\n        {\n            // Get the intersection point.\n            intersection.x_ = begin_.x_ + ua*dx1;\n            intersection.y_ = begin_.y_ + ua*dy1;\n\n            return INTERSECTING;\n        }\n\n        return NOT_INTERSECTING;\n    }\n};\n\nvoid DoLineSegmentIntersection(const Vector& p0, const Vector& p1, const Vector& p2, const Vector& p3)\n{\n    LineSegment linesegment0(p0, p1);\n    LineSegment linesegment1(p2, p3);\n\n    Vector intersection;\n\n    std::cout << \"Line Segment 0: (\" << p0.x_ << \", \" << p0.y_ << \") to (\" << p1.x_ << \", \" << p1.y_ << \")\\n\"\n              << \"Line Segment 1: (\" << p2.x_ << \", \" << p2.y_ << \") to (\" << p3.x_ << \", \" << p3.y_ << \")\\n\";\n\n    switch(linesegment0.Intersect(linesegment1, intersection))\n    {\n    case LineSegment::PARALLEL:\n        std::cout << \"The lines are parallel\\n\\n\";\n        break;\n    case LineSegment::COINCIDENT:\n        std::cout << \"The lines are coincident\\n\\n\";\n        break;\n    case LineSegment::NOT_INTERSECTING:\n        std::cout << \"The lines do not intersect\\n\\n\";\n        break;\n    case LineSegment::INTERSECTING:\n        std::cout << \"The lines intersect at (\" << intersection.x_ << \", \" << intersection.y_ << \")\\n\\n\";\n        break;\n    }\n}\n\nint test()\n{\n    DoLineSegmentIntersection(Vector(0.0f, 0.0f), Vector(5.0f, 5.0f), Vector(5.0f, 0.0f), Vector(0.0f, 5.0f));\n    DoLineSegmentIntersection(Vector(1.0f, 3.0f), Vector(9.0f, 3.0f), Vector(0.0f, 1.0f), Vector(2.0f, 1.0f));\n    DoLineSegmentIntersection(Vector(1.0f, 5.0f), Vector(6.0f, 8.0f), Vector(0.5f, 3.0f), Vector(6.0f, 4.0f));\n    DoLineSegmentIntersection(Vector(1.0f, 1.0f), Vector(3.0f, 8.0f), Vector(0.5f, 2.0f), Vector(4.0f, 7.0f));\n    DoLineSegmentIntersection(Vector(1.0f, 2.0f), Vector(3.0f, 6.0f), Vector(2.0f, 4.0f), Vector(4.0f, 8.0f));\n    DoLineSegmentIntersection(Vector(3.5f, 9.0f), Vector(3.5f, 0.5f), Vector(3.0f, 1.0f), Vector(9.0f, 1.0f));\n    DoLineSegmentIntersection(Vector(2.0f, 3.0f), Vector(7.0f, 9.0f), Vector(1.0f, 2.0f), Vector(5.0f, 7.0f));\n    return 0;\n}\n} // namespace linesegment\n\n#endif // VPSC_LINESEGMENT_H\n"
  },
  {
    "path": "cola/libvpsc/pairing_heap.h",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libvpsc - A solver for the problem of Variable Placement with \n *           Separation Constraints.\n *\n * Copyright (C) 2005  Mark Allen Weiss\n * Copyright (C) 2005-2008  Monash University\n *\n * ----------------------------------------------------------------------------\n * Pairing heap datastructure implementation:\n * Based on example code in \"Data structures and Algorithm Analysis in C++\"\n * by Mark Allen Weiss, used and released under the LGPL by permission\n * of the author.\n * No promises about correctness.  Use at your own risk!\n * ----------------------------------------------------------------------------\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n * Author(s):  Mark Allen Weiss\n *             Tim Dwyer\n*/\n\n#ifndef VPSC_PAIRING_HEAP_H\n#define VPSC_PAIRING_HEAP_H\n\n#include <cstdlib>\n#include <fstream>\n#include <vector>\n#include <list>\n\n#include \"libvpsc/assertions.h\"\n\nclass Underflow { };\n\n// Pairing heap class\n//\n// CONSTRUCTION: with no parameters\n//\n// ******************PUBLIC OPERATIONS*********************\n// PairNode & insert( x ) --> Insert x\n// deleteMin( minItem )   --> Remove (and optionally return) smallest item\n// T findMin( )  --> Return smallest item\n// bool isEmpty( )        --> Return true if empty; else false\n// void makeEmpty( )      --> Remove all items\n// void decreaseKey( PairNode p, newVal )\n//                        --> Decrease value in node p\n// ******************ERRORS********************************\n// Throws Underflow as warranted\n\n\ntemplate <class T>\nstruct PairNode\n{\n\tT   element;\n\tPairNode    *leftChild;\n\tPairNode    *nextSibling;\n\tPairNode    *prev;\n\n\tPairNode( const T & theElement ) :\n\t       \telement( theElement ),\n\t\tleftChild(nullptr), nextSibling(nullptr), prev(nullptr)\n       \t{ }\n};\n\ntemplate <class T, class TCompare>\nclass PairingHeap;\n\ntemplate <class T,class TCompare>\nstd::ostream& operator <<(std::ostream &os, const PairingHeap<T,TCompare> &b);\n\ntemplate <class T, class TCompare = std::less<T> >\nclass PairingHeap\n{\n#ifndef SWIG\n\tfriend std::ostream& operator<< <T,TCompare> (std::ostream &os, const PairingHeap<T,TCompare> &b);\n#endif\npublic:\n\tPairingHeap() : root(nullptr), counter(0), siblingsTreeArray(5) { }\n\tPairingHeap(const PairingHeap & rhs) { \n\t\t// uses operator= to make deep copy\n\t\t*this = rhs; \n\t}\n\t~PairingHeap() { makeEmpty(); }\n\tconst PairingHeap & operator=( const PairingHeap & rhs );\n\tbool isEmpty() const { return root == nullptr; }\n\tunsigned size() const { return counter; }\n\tPairNode<T> *insert( const T & x );\n\tconst T & findMin( ) const;\n\tvoid deleteMin( );\n\tconst T extractMin( ) {\n\t\tT v = findMin();\n\t\tdeleteMin();\n\t\treturn v;\n\t}\n\tvoid makeEmpty() {\n\t\treclaimMemory(root);\n\t\troot = nullptr;\n\t\tcounter = 0;\n\t}\n\tvoid decreaseKey( PairNode<T> *p, const T & newVal );\n\tvoid merge( PairingHeap<T,TCompare> *rhs );\nprotected:\n\t// Destructively gets the root for merging into another heap.\n\tPairNode<T> * removeRootForMerge(unsigned& size) {\n\t\tPairNode<T> *r=root;\n\t\troot=nullptr;\n\t\tsize=counter;\n\t\tcounter=0;\n\t\treturn r;\n\t}\n\tTCompare lessThan;\nprivate:\n\tPairNode<T> *root;\n\tunsigned counter;\n\n    // Used by PairingHeap::combineSiblings().  We keep this as member \n    // variable to save some vector resize operations during subsequent uses.\n\tstd::vector<PairNode<T> *> siblingsTreeArray;\n\n\tvoid reclaimMemory( PairNode<T> *t ) const;\n\tvoid compareAndLink( PairNode<T> * & first, PairNode<T> *second ) const;\n\tPairNode<T> * combineSiblings( PairNode<T> *firstSibling );\n\tPairNode<T> * clone( PairNode<T> * t ) const;\n};\n\n\n/**\n* Insert item x into the priority queue, maintaining heap order.\n* Return a pointer to the node containing the new item.\n*/\ntemplate <class T,class TCompare>\nPairNode<T> *\nPairingHeap<T,TCompare>::insert( const T & x )\n{\n\tPairNode<T> *newNode = new PairNode<T>( x );\n\n\tif( root == nullptr )\n\t\troot = newNode;\n\telse\n\t\tcompareAndLink( root, newNode );\n\tcounter++;\n\treturn newNode;\n}\n\n/**\n* Find the smallest item in the priority queue.\n* Return the smallest item, or throw Underflow if empty.\n*/\ntemplate <class T,class TCompare>\nconst T & PairingHeap<T,TCompare>::findMin( ) const\n{\n\tif( isEmpty( ) )\n\t\tthrow Underflow( );\n\treturn root->element;\n}\n/**\n * Remove the smallest item from the priority queue.\n * Throws Underflow if empty.\n */\ntemplate <class T,class TCompare>\nvoid PairingHeap<T,TCompare>::deleteMin( )\n{\n    if( isEmpty( ) )\n        throw Underflow( );\n\n    PairNode<T> *oldRoot = root;\n\n    if( root->leftChild == nullptr )\n        root = nullptr;\n    else\n        root = combineSiblings( root->leftChild );\n    COLA_ASSERT(counter);\n    counter--;\n    delete oldRoot;\n}\n\n/**\n* Deep copy.\n*/\ntemplate <class T,class TCompare>\nconst PairingHeap<T,TCompare> &\nPairingHeap<T,TCompare>::operator=( const PairingHeap<T,TCompare> & rhs )\n{\n\tif( this != &rhs )\n\t{\n\t\tmakeEmpty( );\n\t\troot = clone( rhs.root );\n\t\tcounter = rhs.size();\n\t}\n\n\treturn *this;\n}\n\n/**\n* Internal method to make the tree empty.\n* WARNING: This is prone to running out of stack space.\n*/\ntemplate <class T,class TCompare>\nvoid PairingHeap<T,TCompare>::reclaimMemory( PairNode<T> * t ) const\n{\n\tif( t != nullptr )\n\t{\n\t\treclaimMemory( t->leftChild );\n\t\treclaimMemory( t->nextSibling );\n\t\tdelete t;\n\t}\n}\n\n/**\n* Change the value of the item stored in the pairing heap.\n* Does nothing if newVal is larger than currently stored value.\n* p points to a node returned by insert.\n* newVal is the new value, which must be smaller\n*    than the currently stored value.\n*/\ntemplate <class T,class TCompare>\nvoid PairingHeap<T,TCompare>::decreaseKey( PairNode<T> *p,\n\t\t\t\t  const T & newVal )\n{\n\tCOLA_ASSERT(!lessThan(p->element,newVal)); // newVal cannot be bigger\n\tp->element = newVal;\n\tif( p != root )\n\t{\n\t\tif( p->nextSibling != nullptr )\n\t\t\tp->nextSibling->prev = p->prev;\n\t\tif( p->prev->leftChild == p )\n\t\t\tp->prev->leftChild = p->nextSibling;\n\t\telse\n\t\t\tp->prev->nextSibling = p->nextSibling;\n\n\t\tp->nextSibling = nullptr;\n\t\tcompareAndLink( root, p );\n\t}\n}\n\n/**\n * Merges rhs into this pairing heap by inserting its root\n */\ntemplate <class T,class TCompare>\nvoid PairingHeap<T,TCompare>::merge( PairingHeap<T,TCompare> *rhs )\n{\t\n\tunsigned rhsSize;\n\tPairNode<T> *broot=rhs->removeRootForMerge(rhsSize);\n\tif (root == nullptr) {\n\t\troot = broot; \n\t} else {\n\t\tcompareAndLink(root, broot);\n\t}\n\tcounter+=rhsSize;\n}\n\n/**\n* Internal method that is the basic operation to maintain order.\n* Links first and second together to satisfy heap order.\n* first is root of tree 1, which may not be nullptr.\n*    first->nextSibling MUST be nullptr on entry.\n* second is root of tree 2, which may be nullptr.\n* first becomes the result of the tree merge.\n*/\ntemplate <class T,class TCompare>\nvoid PairingHeap<T,TCompare>::\ncompareAndLink( PairNode<T> * & first,\n\t\tPairNode<T> *second ) const\n{\n\tif( second == nullptr )\n\t\treturn;\n\n\tif( lessThan(second->element,first->element) )\n\t{\n\t\t// Attach first as leftmost child of second\n\t\tsecond->prev = first->prev;\n\t\tfirst->prev = second;\n\t\tfirst->nextSibling = second->leftChild;\n\t\tif( first->nextSibling != nullptr )\n\t\t\tfirst->nextSibling->prev = first;\n\t\tsecond->leftChild = first;\n\t\tfirst = second;\n\t}\n\telse\n\t{\n\t\t// Attach second as leftmost child of first\n\t\tsecond->prev = first;\n\t\tfirst->nextSibling = second->nextSibling;\n\t\tif( first->nextSibling != nullptr )\n\t\t\tfirst->nextSibling->prev = first;\n\t\tsecond->nextSibling = first->leftChild;\n\t\tif( second->nextSibling != nullptr )\n\t\t\tsecond->nextSibling->prev = second;\n\t\tfirst->leftChild = second;\n\t}\n}\n\n/**\n* Internal method that implements two-pass merging.\n* firstSibling the root of the conglomerate;\n*     assumed not nullptr.\n*/\ntemplate <class T,class TCompare>\nPairNode<T> *\nPairingHeap<T,TCompare>::combineSiblings( PairNode<T> *firstSibling )\n{\n\tif( firstSibling->nextSibling == nullptr )\n\t\treturn firstSibling;\n\n\t// Store the subtrees in an array\n\tint numSiblings = 0;\n\tfor( ; firstSibling != nullptr; numSiblings++ )\n\t{\n\t\tif( numSiblings == (int)siblingsTreeArray.size( ) )\n\t\t\tsiblingsTreeArray.resize( numSiblings * 2 );\n\t\tsiblingsTreeArray[ numSiblings ] = firstSibling;\n\t\tfirstSibling->prev->nextSibling = nullptr;  // break links\n\t\tfirstSibling = firstSibling->nextSibling;\n\t}\n\tif( numSiblings == (int)siblingsTreeArray.size( ) )\n\t\tsiblingsTreeArray.resize( numSiblings + 1 );\n\tsiblingsTreeArray[ numSiblings ] = nullptr;\n\n\t// Combine subtrees two at a time, going left to right\n\tint i = 0;\n\tfor( ; i + 1 < numSiblings; i += 2 )\n\t\tcompareAndLink( siblingsTreeArray[ i ], siblingsTreeArray[ i + 1 ] );\n\n\tint j = i - 2;\n\n\t// j has the result of last compareAndLink.\n\t// If an odd number of trees, get the last one.\n\tif( j == numSiblings - 3 )\n\t\tcompareAndLink( siblingsTreeArray[ j ], siblingsTreeArray[ j + 2 ] );\n\n\t// Now go right to left, merging last tree with\n\t// next to last. The result becomes the new last.\n\tfor( ; j >= 2; j -= 2 )\n\t\tcompareAndLink( siblingsTreeArray[ j - 2 ], siblingsTreeArray[ j ] );\n\treturn siblingsTreeArray[ 0 ];\n}\n\n/**\n* Internal method to clone subtree.\n* WARNING: This is prone to running out of stack space.\n*/\ntemplate <class T,class TCompare>\nPairNode<T> *\nPairingHeap<T,TCompare>::clone( PairNode<T> * t ) const\n{\n\tif( t == nullptr ) \n\t\treturn nullptr;\n\telse\n\t{\n\t\tPairNode<T> *p = new PairNode<T>( t->element );\n\t\tif( ( p->leftChild = clone( t->leftChild ) ) != nullptr )\n\t\t\tp->leftChild->prev = p;\n\t\tif( ( p->nextSibling = clone( t->nextSibling ) ) != nullptr )\n\t\t\tp->nextSibling->prev = p;\n\t\treturn p;\n\t}\n}\n\ntemplate <class T,class TCompare>\nstd::ostream& operator <<(std::ostream &os, const PairingHeap<T,TCompare> &b)\n{\n\tos<<\"Heap:\";\n\tif (b.root != nullptr) {\n\t\tPairNode<T> *r = b.root;\n\t\tstd::list<PairNode<T>*> q;\n\t\tq.push_back(r);\n\t\twhile (!q.empty()) {\n\t\t\tr = q.front();\n\t\t\tq.pop_front();\n\t\t\tif (r->leftChild != nullptr) {\n\t\t\t\tos << *r->element << \">\";\n\t\t\t\tPairNode<T> *c = r->leftChild;\n\t\t\t\twhile (c != nullptr) {\n\t\t\t\t\tq.push_back(c);\n\t\t\t\t\tos << \",\" << *c->element;\n\t\t\t\t\tc = c->nextSibling;\n\t\t\t\t}\n\t\t\t\tos << \"|\";\n\t\t\t}\n\t\t}\n\t}\n\treturn os;\n}\n\n#endif /* VPSC_PAIRING_HEAP_H */\n"
  },
  {
    "path": "cola/libvpsc/rectangle.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libvpsc - A solver for the problem of Variable Placement with \n *           Separation Constraints.\n *\n * Copyright (C) 2005-2008  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n * Author(s):  Tim Dwyer\n*/\n\n/*\n * @brief Functions to automatically generate constraints for the\n * rectangular node overlap removal problem.\n *\n */\n\n#include <cmath>\n#include <set>\n#include <cstdlib>\n#include <algorithm>\n#include <cstdio>\n\n#include \"libvpsc/assertions.h\"\n#include \"libvpsc/solve_VPSC.h\"\n#include \"libvpsc/rectangle.h\"\n#include \"libvpsc/constraint.h\"\n#include \"libvpsc/variable.h\"\n\nusing std::set;\nusing std::vector;\n\nnamespace vpsc {\n\ndouble Rectangle::xBorder = 0;\ndouble Rectangle::yBorder = 0;\n\nstd::ostream& operator <<(std::ostream &os, const Rectangle &r) {\n    os << \"Hue[0.17],Rectangle[{\"<<r.getMinX()<<\",\"<<r.getMinY()<<\"},{\"<<r.getMaxX()<<\",\"<<r.getMaxY()<<\"}]\";\n    return os;\n}\n\nRectangle::Rectangle(double x, double X, double y, double Y,bool allowOverlap) \n    : minX(x),\n      maxX(X),\n      minY(y),\n      maxY(Y),\n      overlap(allowOverlap) \n{\n    COLA_ASSERT(x<X);\n    COLA_ASSERT(y<Y);\n    COLA_ASSERT(getMinX()<getMaxX());\n    COLA_ASSERT(getMinY()<getMaxY());\n}\n\nRectangle::Rectangle()\n    : minX(1),\n      maxX(-1),\n      minY(1),\n      maxY(-1),\n      overlap(false) \n{\n    // Creates an invalid Rectangle\n}\n\nbool Rectangle::isValid(void) const\n{\n    return ((minX <= maxX) && (minY <= maxY));\n}\n\nRectangle Rectangle::unionWith(const Rectangle& rhs) const\n{\n    if (!isValid())\n    {\n        return Rectangle(rhs);\n    }\n    else if (!rhs.isValid())\n    {\n        return Rectangle(*this);\n    }\n    \n    double newMaxY = std::max(rhs.getMaxY(),maxY);\n    double newMinY = std::min(rhs.getMinY(),minY);\n    double newMinX = std::min(rhs.getMinX(),minX);\n    double newMaxX = std::max(rhs.getMaxX(),maxX);\n\n    return Rectangle(newMinX, newMaxX, newMinY, newMaxY);\n}\n    \nvoid Rectangle::reset(unsigned d, double x, double X) {\n    if(d==0) {\n        minX=x;\n        maxX=X;\n    } else {\n        minY=x;\n        maxY=X;\n    }\n}\n\nstruct Node;\nstruct CmpNodePos { bool operator()(const Node* u, const Node* v) const; };\n\ntypedef set<Node*,CmpNodePos> NodeSet;\n\nstruct Node {\n    Variable *v;\n    Rectangle *r;\n    double pos;\n    Node *firstAbove, *firstBelow;\n    NodeSet *leftNeighbours, *rightNeighbours;\n    Node(Variable *v, Rectangle *r, double p) \n        : v(v),r(r),pos(p),\n          firstAbove(nullptr), firstBelow(nullptr),\n          leftNeighbours(nullptr), rightNeighbours(nullptr)\n     \n    {\n        COLA_ASSERT(r->width()<1e40);\n    }\n    ~Node() {\n        delete leftNeighbours;\n        delete rightNeighbours;\n    }\n    void addLeftNeighbour(Node *u) {\n        COLA_ASSERT(leftNeighbours!=nullptr);\n        leftNeighbours->insert(u);\n    }\n    void addRightNeighbour(Node *u) {\n        COLA_ASSERT(rightNeighbours!=nullptr);\n        rightNeighbours->insert(u);\n    }\n    void setNeighbours(NodeSet *left, NodeSet *right) {\n        leftNeighbours=left;\n        rightNeighbours=right;\n        for(NodeSet::iterator i=left->begin();i!=left->end();++i) {\n            Node *v=*(i);\n            v->addRightNeighbour(this);\n        }\n        for(NodeSet::iterator i=right->begin();i!=right->end();++i) {\n            Node *v=*(i);\n            v->addLeftNeighbour(this);\n        }\n    }\n};\nbool CmpNodePos::operator() (const Node* u, const Node* v) const {\n    COLA_ASSERT(!std::isnan(u->pos));\n    COLA_ASSERT(!std::isnan(v->pos));\n    if (u->pos < v->pos) {\n        return true;\n    }\n    if (v->pos < u->pos) {\n        return false;\n    }\n    return u < v;\n}\n\nNodeSet* getLeftNeighbours(NodeSet &scanline,Node *v) {\n    NodeSet *leftv = new NodeSet;\n    NodeSet::iterator i=scanline.find(v);\n    while(i!=scanline.begin()) {\n        Node *u=*(--i);\n        if(u->r->overlapX(v->r)<=0) {\n            leftv->insert(u);\n            return leftv;\n        }\n        if(u->r->overlapX(v->r)<=u->r->overlapY(v->r)) {\n            leftv->insert(u);\n        }\n    }\n    return leftv;\n}\nNodeSet* getRightNeighbours(NodeSet &scanline,Node *v) {\n    NodeSet *rightv = new NodeSet;\n    NodeSet::iterator i=scanline.find(v);\n    for(++i;i!=scanline.end(); ++i) {\n        Node *u=*(i);\n        if(u->r->overlapX(v->r)<=0) {\n            rightv->insert(u);\n            return rightv;\n        }\n        if(u->r->overlapX(v->r)<=u->r->overlapY(v->r)) {\n            rightv->insert(u);\n        }\n    }\n    return rightv;\n}\n\ntypedef enum {Open, Close} EventType;\nstruct Event {\n    EventType type;\n    Node *v;\n    double pos;\n    Event(EventType t, Node *v, double p) : type(t),v(v),pos(p) {};\n};\nint compare_events(const void *a, const void *b) {\n    Event *ea=*(Event**)a;\n    Event *eb=*(Event**)b;\n    if(ea->pos==eb->pos) {\n        // when comparing opening and closing\n        // open must come first\n        if(ea->type==Open) return -1;\n        return 1;\n    } else if(ea->pos > eb->pos) {\n        return 1;\n    } else if(ea->pos < eb->pos) {\n        return -1;\n    } else if(std::isnan(ea->pos) != std::isnan(ea->pos)) {\n        /* See comment in CmpNodePos. */\n        return ( std::isnan(ea->pos)\n             ? -1\n             : 1 );\n    }\n    return 0;\n}\n\n/*\n * Prepares constraints in order to apply VPSC horizontally.  Assumes \n * variables have already been created.\n * useNeighbourLists determines whether or not a heuristic is used to \n * deciding whether to resolve all overlap in the x pass, or leave some\n * overlaps for the y pass.\n */\nvoid generateXConstraints(const Rectangles& rs, const Variables& vars,\n        Constraints& cs, const bool useNeighbourLists)\n{\n    const unsigned n = rs.size();\n    COLA_ASSERT(vars.size()>=n);\n    Event **events=new Event*[2*n];\n    unsigned i,ctr=0;\n    for(i=0;i<n;i++) {\n        vars[i]->desiredPosition=rs[i]->getCentreX();\n        Node *v = new Node(vars[i],rs[i],rs[i]->getCentreX());\n        events[ctr++]=new Event(Open,v,rs[i]->getMinY());\n        events[ctr++]=new Event(Close,v,rs[i]->getMaxY());\n    }\n    qsort((Event*)events, (size_t)2*n, sizeof(Event*), compare_events );\n\n    NodeSet scanline;\n    for(i=0;i<2*n;i++) {\n        Event *e=events[i];\n        Node *v=e->v;\n        if(e->type==Open) {\n            scanline.insert(v);\n            if(useNeighbourLists) {\n                v->setNeighbours(\n                    getLeftNeighbours(scanline,v),\n                    getRightNeighbours(scanline,v)\n                );\n            } else {\n                NodeSet::iterator it=scanline.find(v);\n                if(it!=scanline.begin()) {\n                    Node *u=*(--it);\n                    v->firstAbove=u;\n                    u->firstBelow=v;\n                }\n                it=scanline.find(v);\n                if(++it!=scanline.end()) {\n                    Node *u=*it;\n                    v->firstBelow=u;\n                    u->firstAbove=v;\n                }\n            }\n        } else {\n            size_t result;\n            // Close event\n            if(useNeighbourLists) {\n                for(NodeSet::iterator i=v->leftNeighbours->begin();\n                    i!=v->leftNeighbours->end();i++\n                ) {\n                    Node *u=*i;\n                    double sep = (v->r->width()+u->r->width())/2.0;\n                    cs.push_back(new Constraint(u->v,v->v,sep));\n                    result=u->rightNeighbours->erase(v);\n                    COLA_ASSERT(result==1);\n                }\n                \n                for(NodeSet::iterator i=v->rightNeighbours->begin();\n                    i!=v->rightNeighbours->end();i++\n                ) {\n                    Node *u=*i;\n                    double sep = (v->r->width()+u->r->width())/2.0;\n                    cs.push_back(new Constraint(v->v,u->v,sep));\n                    result=u->leftNeighbours->erase(v);\n                    COLA_ASSERT(result==1);\n                }\n            } else {\n                Node *l=v->firstAbove, *r=v->firstBelow;\n                if(l!=nullptr) {\n                    double sep = (v->r->width()+l->r->width())/2.0;\n                    cs.push_back(new Constraint(l->v,v->v,sep));\n                    l->firstBelow=v->firstBelow;\n                }\n                if(r!=nullptr) {\n                    double sep = (v->r->width()+r->r->width())/2.0;\n                    cs.push_back(new Constraint(v->v,r->v,sep));\n                    r->firstAbove=v->firstAbove;\n                }\n            }\n            result=scanline.erase(v);\n            COLA_ASSERT(result==1);\n            delete v;\n        }\n        delete e;\n    }\n    COLA_ASSERT(scanline.size()==0);\n    delete [] events;\n}\n\n/*\n * Prepares constraints in order to apply VPSC vertically to remove ALL\n * overlap.\n */\nvoid generateYConstraints(const Rectangles& rs, const Variables& vars,\n        Constraints& cs)\n{\n    const unsigned n = rs.size();\n    COLA_ASSERT(vars.size()>=n);\n    Event **events=new Event*[2*n];\n    unsigned ctr=0;\n    Rectangles::const_iterator ri=rs.begin(), re=rs.end();\n    Variables::const_iterator vi=vars.begin(), ve=vars.end();\n    for(;ri!=re&&vi!=ve;++ri,++vi) {\n        Rectangle* r=*ri;\n        Variable* v=*vi;\n        v->desiredPosition=r->getCentreY();\n        Node *node = new Node(v,r,r->getCentreY());\n        COLA_ASSERT(r->getMinX()<r->getMaxX());\n        events[ctr++]=new Event(Open,node,r->getMinX());\n        events[ctr++]=new Event(Close,node,r->getMaxX());\n    }\n    COLA_ASSERT(ri==rs.end());\n    qsort((Event*)events, (size_t)2*n, sizeof(Event*), compare_events );\n    NodeSet scanline;\n#ifndef NDEBUG\n    size_t deletes=0;\n#endif\n    for(unsigned i=0;i<2*n;i++) {\n        Event *e=events[i];\n        Node *v=e->v;\n        if(e->type==Open) {\n            scanline.insert(v);\n            NodeSet::iterator it=scanline.find(v);\n            if(it!=scanline.begin()) {\n                Node *u=*(--it);\n                v->firstAbove=u;\n                u->firstBelow=v;\n            }\n            it=scanline.find(v);\n            if(++it!=scanline.end())     {\n                Node *u=*it;\n                v->firstBelow=u;\n                u->firstAbove=v;\n            }\n        } else {\n            // Close event\n            Node *l=v->firstAbove, *r=v->firstBelow;\n            if(l!=nullptr) {\n                double sep = (v->r->height()+l->r->height())/2.0;\n                cs.push_back(new Constraint(l->v,v->v,sep));\n                l->firstBelow=v->firstBelow;\n            }\n            if(r!=nullptr) {\n                double sep = (v->r->height()+r->r->height())/2.0;\n                cs.push_back(new Constraint(v->v,r->v,sep));\n                r->firstAbove=v->firstAbove;\n            }\n#ifndef NDEBUG\n            deletes++;\n            size_t erased=\n#endif\n            scanline.erase(v);\n            COLA_ASSERT(erased==1);\n            delete v;\n        }\n        delete e;\n    }\n    COLA_ASSERT(scanline.size()==0);\n    COLA_ASSERT(deletes==n);\n    delete [] events;\n}\n#include \"libvpsc/linesegment.h\"\nusing namespace linesegment;\ninline bool checkIntersection(\n        const LineSegment::IntersectResult result, \n        Vector const &intersection,\n        RectangleIntersections &ri, \n        bool &side, double &sideX, double &sideY) {\n    switch(result) {\n    case LineSegment::INTERSECTING:\n        ri.intersects=side=true;\n        sideX=intersection.x_;\n        sideY=intersection.y_;\n        return true;\n    case LineSegment::PARALLEL:\n    case LineSegment::NOT_INTERSECTING:\n        return true;\n    case LineSegment::COINCIDENT:\n        ri.intersects=ri.top=ri.bottom=ri.left=ri.right=false;\n        return false;\n    }\n    return false;\n}\nvoid Rectangle::\nlineIntersections(double x1, double y1, double x2, double y2, RectangleIntersections &ri) const {\n    Vector intersection;\n    LineSegment l(Vector(x1,y1),Vector(x2,y2));\n    LineSegment top(Vector(getMinX(),getMaxY()),Vector(getMaxX(),getMaxY()));\n    if(!checkIntersection(\n            l.Intersect(top,intersection),intersection,\n            ri,ri.top,ri.topX,ri.topY)) {\n        return;\n    }\n    LineSegment bottom(Vector(getMinX(),getMinY()),Vector(getMaxX(),getMinY()));\n    if(!checkIntersection(\n            l.Intersect(bottom,intersection),intersection,\n            ri,ri.bottom,ri.bottomX,ri.bottomY)) {\n        return;\n    }\n    LineSegment left(Vector(getMinX(),getMinY()),Vector(getMinX(),getMaxY()));\n    if(!checkIntersection(\n            l.Intersect(left,intersection),intersection,\n            ri,ri.left,ri.leftX,ri.leftY)) {\n        return;\n    }\n    LineSegment right(Vector(getMaxX(),getMinY()),Vector(getMaxX(),getMaxY()));\n    if(!checkIntersection(\n            l.Intersect(right,intersection),intersection,\n            ri,ri.right,ri.rightX,ri.rightY)) {\n        return;\n    }\n}\nstatic const double ERROR_MARGIN = 1e-4;\ninline bool eq(double a, double b) {\n    return fabs(a-b)<ERROR_MARGIN;\n    //return a==b;\n}\n/*\nbool Rectangle::inside(double x, double y) const {\n    return x>(minX+ERROR_MARGIN) && x<(maxX-ERROR_MARGIN) \n        && y>(minY+ERROR_MARGIN) && y<(maxY-ERROR_MARGIN);\n}\n*/\n// p1=(x1,y1),p2=(x2,y2) are points on the boundary.  Puts the shortest\n// path round the outside of the rectangle  from p1 to p2 into xs, ys.\nvoid Rectangle::routeAround(double x1, double y1, double x2, double y2,\n        std::vector<double> &xs, std::vector<double> &ys) {\n    COLA_ASSERT(eq(x1,minX) || eq(x1,maxX) || eq(y1,minY) || eq(y1,maxY));\n    COLA_ASSERT(eq(x2,minX) || eq(x2,maxX) || eq(y2,minY) || eq(y2,maxY));\n    xs.push_back(x1);\n    ys.push_back(y1);\n    bool top1=eq(y1,maxY), top2=eq(y2,maxY),\n         bottom1=eq(y1,minY), bottom2=eq(y2,minY);\n    bool left1=eq(x1,minX), left2=eq(x2,minX), \n         right1=eq(x1,maxX), right2=eq(x2,maxX);\n    bool leftright = (left1 && right2) || (right1 && left2);\n    bool topbottom = (top1 && bottom2) || (bottom1 && top2);\n    bool lefttop = (left1 && top2) || (top1 && left2);\n    bool righttop = (right1 && top2) || (top1 && right2);\n    bool leftbottom = (left1 && bottom2) || (bottom1 && left2);\n    bool rightbottom = (right1 && bottom2) || (bottom1 && right2);\n    if(lefttop) {\n        xs.push_back(minX);\n        ys.push_back(maxY);\n    } else if(righttop) {\n        xs.push_back(maxX);\n        ys.push_back(maxY);\n    } else if(leftbottom) {\n        xs.push_back(minX);\n        ys.push_back(minY);\n    } else if(rightbottom) {\n        xs.push_back(maxX);\n        ys.push_back(minY);\n    } else if(leftright) {\n        double midY = y1+(y2-y1)/2.0;\n        if(left1) { // left to right\n            if(midY<getCentreY()) { // route below\n                // bottom left\n                xs.push_back(getMinX());\n                ys.push_back(getMinY());\n                // bottom right\n                xs.push_back(getMaxX());\n                ys.push_back(getMinY());\n            } else { // route above\n                // top left\n                xs.push_back(getMinX());\n                ys.push_back(getMaxY());\n                // top right\n                xs.push_back(getMaxX());\n                ys.push_back(getMaxY());\n            }\n        } else { // right to left\n            if(midY<getCentreY()) { // route below\n                // bottom right\n                xs.push_back(getMaxX());\n                ys.push_back(getMinY());\n                // bottom left\n                xs.push_back(getMinX());\n                ys.push_back(getMinY());\n            } else { // route above\n                // top right\n                xs.push_back(getMaxX());\n                ys.push_back(getMaxY());\n                // top left\n                xs.push_back(getMinX());\n                ys.push_back(getMaxY());\n            }\n        }\n    } else if(topbottom) {\n        double midX = x1+(x2-x1)/2.0;\n        if(top1) {\n            if(midX<getCentreX()) { // route left\n                // top left\n                xs.push_back(getMinX());\n                ys.push_back(getMaxY());\n                // bottom left\n                xs.push_back(getMinX());\n                ys.push_back(getMinY());\n            } else { // route right\n                // top right\n                xs.push_back(getMaxX());\n                ys.push_back(getMaxY());\n                // bottom right\n                xs.push_back(getMaxX());\n                ys.push_back(getMinY());\n            }\n        } else { // bottom to top\n            if(midX<getCentreX()) { // route left\n                // bottom left\n                xs.push_back(getMinX());\n                ys.push_back(getMinY());\n                // top left\n                xs.push_back(getMinX());\n                ys.push_back(getMaxY());\n            } else { // route right\n                // bottom right\n                xs.push_back(getMaxX());\n                ys.push_back(getMinY());\n                // top right\n                xs.push_back(getMaxX());\n                ys.push_back(getMaxY());\n            }\n        }\n    }\n    xs.push_back(x2);\n    ys.push_back(y2);\n}\n\n/* \n * moves all the rectangles to remove all overlaps.  Heuristic\n * attempts to move by as little as possible.\n * no overlaps guaranteed.\n * @param rs the rectangles which will be moved to remove overlap\n */\nvoid removeoverlaps(Rectangles& rs) {\n    const set<unsigned> fixed = set<unsigned>();\n    removeoverlaps(rs,fixed);\n}\n#define ISNOTNAN(d) (d)==(d)\n/*\n * Moves rectangles to remove all overlaps.  A heuristic\n * attempts to move by as little as possible.  The heuristic is\n * that the overlaps are removed horizontally and then vertically,\n * each pass being a quadratic program in which the total squared movement\n * is minimised subject to non-overlap constraints.  An optional third\n * horizontal pass (in addition to the first horizontal pass and the second\n * vertical pass) can be applied wherein the x-positions of rectangles are reset to their\n * original positions and overlap removal repeated.  This may avoid some\n * unnecessary movement. \n * @param rs the rectangles which will be moved to remove overlap\n * @param fixed a set of indices to rectangles which should not be moved\n * @param thirdPass optionally run the third horizontal pass described above.\n */\nvoid removeoverlaps(Rectangles& rs, const set<unsigned>& fixed, bool thirdPass) {\n    const double xBorder=Rectangle::xBorder, yBorder=Rectangle::yBorder;\n    static const double EXTRA_GAP=1e-3;\n    static const size_t ARRAY_UNUSED=1;\n    unsigned n=rs.size();\n    try {\n        // The extra gap avoids numerical imprecision problems\n        Rectangle::setXBorder(xBorder+EXTRA_GAP);\n        Rectangle::setYBorder(yBorder+EXTRA_GAP);\n        Variables vs(n);\n        Variables::iterator v;\n        unsigned i=0;\n        vector<double> initX(thirdPass?n:ARRAY_UNUSED);\n        for(v=vs.begin();v!=vs.end();++v,++i) {\n            double weight=1;\n            if(fixed.find(i)!=fixed.end()) {\n                weight=10000;\n            }\n            *v=new Variable(i,0,weight);\n            if(thirdPass) {\n                initX[i]=rs[i]->getCentreX();\n            }\n        }\n        Constraints cs;\n        generateXConstraints(rs,vs,cs,true);\n        Solver vpsc_x(vs,cs);\n        vpsc_x.solve();\n        Rectangles::iterator r=rs.begin();\n        for(v=vs.begin();v!=vs.end();++v,++r) {\n            COLA_ASSERT(ISNOTNAN((*v)->finalPosition));\n            (*r)->moveCentreX((*v)->finalPosition);\n        }\n        COLA_ASSERT(r==rs.end());\n        for_each(cs.begin(),cs.end(),delete_object());\n        cs.clear();\n        // Removing the extra gap here ensures things that were moved to be\n        // adjacent to one another above are not considered overlapping\n        Rectangle::setXBorder(xBorder);\n        generateYConstraints(rs,vs,cs);\n        Solver vpsc_y(vs,cs);\n        vpsc_y.solve();\n        r=rs.begin();\n        for(v=vs.begin();v!=vs.end();++v,++r) {\n            COLA_ASSERT(ISNOTNAN((*v)->finalPosition));\n            (*r)->moveCentreY((*v)->finalPosition);\n        }\n        for_each(cs.begin(),cs.end(),delete_object());\n        cs.clear();\n        Rectangle::setYBorder(yBorder);\n        if(thirdPass) {\n            // we reset x positions to their original values\n            // and apply a third pass horizontally so that\n            // rectangles which were moved unnecessarily in the\n            // first horizontal pass (i.e. their overlap\n            // was later resolved vertically) have an\n            // opportunity now to stay put.\n            Rectangle::setXBorder(xBorder+EXTRA_GAP);\n            r=rs.begin();\n            for(v=vs.begin();v!=vs.end();++v,++r) {\n                (*r)->moveCentreX(initX[(*v)->id]);\n            }\n            generateXConstraints(rs,vs,cs,false);\n            Solver vpsc_x2(vs,cs);\n            vpsc_x2.solve();\n            r=rs.begin();\n            for(v=vs.begin();v!=vs.end();++v,++r) {\n                COLA_ASSERT(ISNOTNAN((*v)->finalPosition));\n                (*r)->moveCentreX((*v)->finalPosition);\n            }\n        }\n        Rectangle::setXBorder(xBorder);\n        for_each(cs.begin(),cs.end(),delete_object());\n        for_each(vs.begin(),vs.end(),delete_object());\n    } catch (char *str) {\n        std::cerr<<str<<std::endl;\n        for(Rectangles::iterator r=rs.begin();r!=rs.end();++r) {\n            std::cerr << **r <<std::endl;\n        }\n    }\n    COLA_ASSERT(noRectangleOverlaps(rs));\n}\n\n\nbool noRectangleOverlaps(const Rectangles& rs) \n{\n    Rectangle *u, *v;\n    Rectangles::const_iterator i=rs.begin(), j, e=rs.end();\n    for (;i!=e;++i) \n    {\n        u=*i;\n        for (j=i+1;j!=e;++j) \n        {\n            v=*j;\n            if (u->overlapX(v)>0) \n            {\n                COLA_ASSERT(u->overlapY(v)==0);\n            }\n        }\n    }\n    return true;\n}\n\n// checks if line segment is strictly overlapping.\n// That is, if any point on the line is inside the rectangle.\nbool Rectangle::overlaps(double x1, double y1, double x2, double y2) \n{\n    RectangleIntersections ri;\n    lineIntersections(x1,y1,x2,y2,ri);\n    if(ri.intersects) {\n        if(ri.countIntersections()==1) {\n            // special case when one point is touching\n            // the boundary of the rectangle but no part\n            // of the line is interior\n            if(!inside(x1,y1)&&!inside(x2,y2)) {\n                return false;\n            }\n        }\n        printf(\"Rectangle/Segment intersection (SVG):\\n\");\n        printf(\"<svg style=\\\"stroke: black; fill: none;\\\">\\n\");\n        printf(\"<polyline points=\\\"%f,%f %f,%f\\\" />\\n\",x1,y1,x2,y2);\n        printf(\"<rect x=\\\"%f\\\" y=\\\"%f\\\" width=\\\"%f\\\" height=\\\"%f\\\" />\\n\",\n                getMinX(),getMinY(),width(),height());\n        printf(\"</svg>\\n\");\n        ri.printIntersections();\n        return true;\n    }\n    return false;\n}\n\n\nvoid RectangleIntersections::printIntersections() \n{\n    printf(\"intersections:\\n\");\n    if(top) printf(\"  top=%d:(%f,%f)\\n\",top,topX,topY);\n    if(bottom) printf(\"  bottom=%d:(%f,%f)\\n\",bottom,bottomX,bottomY);\n    if(left) printf(\"  left=%d:(%f,%f)\\n\",left,leftX,leftY);\n    if(right) printf(\"  right=%d:(%f,%f)\\n\",right,rightX,rightY);\n}\n\n// Of the stored intersections, this returns the one closest to the\n// specified point\nvoid RectangleIntersections::nearest(double x, double y, double &xi, double &yi) {\n    bool is[]={top, right, bottom, left};\n    double xs[]={topX, rightX, bottomX, leftX};\n    double ys[]={topY, rightY, bottomY, leftY};\n    double dx, dy, l, minl = 999999999999999.0;\n    for(unsigned i=0;i<4;i++) \n    {\n        if(is[i]) \n        {\n            dx=xs[i]-x;\n            dy=ys[i]-y;\n            l=dx*dx + dy*dy;\n            if(l<minl) \n            {\n                minl=l;\n                xi=xs[i];\n                yi=ys[i];\n            }\n        }\n    }\n}\n\n}\n"
  },
  {
    "path": "cola/libvpsc/rectangle.h",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libvpsc - A solver for the problem of Variable Placement with \n *           Separation Constraints.\n *\n * Copyright (C) 2005-2010  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n * Author(s):  Tim Dwyer\n*/\n\n/*\n * Functions to automatically generate constraints for the\n * rectangular node overlap removal problem.\n *\n */\n#ifndef VPSC_RECTANGLE_H\n#define VPSC_RECTANGLE_H\n\n#include <iostream>\n#include <vector>\n#include <set>\n#include <cassert>\n#include <cmath>\n\n#include \"libvpsc/assertions.h\"\n\nnamespace vpsc {\n\n//! @brief Indicates the x- or y-dimension.\nenum Dim {\n    //! The x-dimension (0).\n    HORIZONTAL = 0,\n    //! The x-dimension (0).\n    XDIM = 0,\n    //! The y-dimension (1).\n    VERTICAL = 1,\n    //! The y-dimension (1).\n    YDIM = 1,\n    // The dimension is not set.\n    UNSET = 2\n};\n\ninline Dim conjugate(Dim d) {\n\treturn static_cast<Dim>(!d);\n}\n/* records the positions and sides through which a particular line intersects with a rectangle\n */\nstruct RectangleIntersections {\n    bool intersects, top, bottom, left, right;\n    double topX, topY, bottomX, bottomY, leftX, leftY, rightX, rightY;\n    RectangleIntersections()\n        : intersects(false),top(false),bottom(false),left(false),right(false),\n      topX(0),topY(0),bottomX(0),bottomY(0),leftX(0),leftY(0),rightX(0),rightY(0) {} \n    int countIntersections() {\n        return left+right+top+bottom;\n    }\n    void printIntersections(void);\n    // Of the stored intersections, this returns the one closest to the\n    // specified point\n    void nearest(double x, double y, double & xi, double & yi);\n};\n\n/**\n * @brief  A rectangle represents a fixed-size shape in the diagram that may\n *         be moved to prevent overlaps and satisfy constraints.\n */\nclass Rectangle {   \npublic:\n    /**\n     * @brief Constructs a rectangle by specifying the positions of all \n     *        four sides.\n     *\n     * @param[in] x  Minimum horizontal value.\n     * @param[in] X  Maximum horizontal value.\n     * @param[in] y  Minimum vertical value.\n     * @param[in] Y  Maximum vertical value.\n     * @param[in] allowOverlap not used currently.\n     */\n    Rectangle(double x, double X, double y, double Y,\n            bool allowOverlap = false);\n    Rectangle(const Rectangle &Other) = default;\n    Rectangle();\n// To prevent C++ objects from being destroyed in garbage collected languages\n// when the libraries are called from SWIG, we hide the declarations of the\n// destructors and prevent generation of default destructors.\n#ifndef SWIG\n    ~Rectangle() {}\n#endif\n\n    bool isValid(void) const;\n    Rectangle unionWith(const Rectangle& rhs) const;\n    /*\n     * reset the dimensions in one axis\n     * @param d axis (0==X, 1==Y)\n     * @param x min value\n     * @param X max value\n     */\n    void reset(const unsigned d, double x, double X);\n    double getMaxX() const { return maxX+xBorder; }\n    double getMaxY() const { return maxY+yBorder; }\n    double getMinX() const { return minX-xBorder; }\n    double getMinY() const { return minY-yBorder; }\n    /*\n     * @param d axis: 0=horizontal 1=vertical\n     */\n    double getMinD(unsigned const d) const {\n        COLA_ASSERT(d==0||d==1);\n        return ( d == 0 ? getMinX() : getMinY() );\n    }\n    /*\n     * @param d axis: 0=horizontal 1=vertical\n     */\n    double getMaxD(unsigned const d) const {\n        COLA_ASSERT(d==0||d==1);\n        return ( d == 0 ? getMaxX() : getMaxY() );\n    }\n    void setMinD(unsigned const d, const double val)\n    { if ( d == 0) { minX = val; } else { minY = val; } }\n    void setMaxD(unsigned const d, const double val)\n    { if ( d == 0) { maxX = val; } else { maxY = val; } }\n    double getCentreX() const { return getMinX()+width()/2.0; }\n    double getCentreY() const { return getMinY()+height()/2.0; }\n    /*\n     * @param d axis: 0=horizontal 1=vertical\n     */\n    double getCentreD(unsigned const d) const {\n        COLA_ASSERT(d==0||d==1);\n        return getMinD(d)+length(d)/2.0;\n    }\n    double width() const { return getMaxX()-getMinX(); }\n    double height() const { return getMaxY()-getMinY(); }\n    /*\n     * @param d axis: 0=width 1=height\n     * @return width or height\n     */\n    double length(unsigned const d) const {\n        COLA_ASSERT(d==0||d==1);\n        return ( d == 0 ? width() : height() );\n    }\n    void set_width(double w) { maxX = minX + w - 2.0*xBorder; }\n    void set_height(double h) { maxY = minY + h - 2.0*yBorder; }\n    void moveCentreD(const unsigned d, double p) {\n        COLA_ASSERT(d==0||d==1);\n        if(d == 0) { moveCentreX(p);\n        } else { moveCentreY(p); }\n    }\n    void moveCentreX(double x) {\n        moveMinX(x-width()/2.0);\n    }\n    void moveCentreY(double y) {\n        moveMinY(y-height()/2.0);\n    }\n    void moveCentre(double x, double y) {\n        moveCentreX(x);\n        moveCentreY(y);\n    }\n    void moveMinX(double x) {\n        double w=width();\n        minX=x+xBorder;\n        maxX=x+w-xBorder;\n        COLA_ASSERT(fabs(width()-w)<1e-9);\n    }\n    void moveMinY(double y) {\n        double h=height();\n        maxY=y+h-yBorder;\n        minY=y+yBorder;\n        COLA_ASSERT(fabs(height()-h)<1e-9);\n    }\n    double overlapD(const unsigned d, Rectangle* r) {\n        if(d==0) {\n            return overlapX(r);\n        } else {\n            return overlapY(r);\n        }\n    }\n    double overlapX(Rectangle *r) const {\n        double ux=getCentreX(), vx=r->getCentreX();\n        if (ux <= vx && r->getMinX() < getMaxX())\n            return getMaxX() - r->getMinX();\n        if (vx <= ux && getMinX() < r->getMaxX())\n            return r->getMaxX() - getMinX();\n        return 0;\n    }\n    double overlapY(Rectangle *r) const {\n        double uy=getCentreY(), vy=r->getCentreY();\n        if (uy <= vy && r->getMinY() < getMaxY()) {\n            return getMaxY() - r->getMinY();\n        }\n        if (vy <= uy && getMinY() < r->getMaxY()) {\n            return r->getMaxY() - getMinY();\n        }\n        return 0;\n    }\n    bool allowOverlap() {\n        return overlap;\n    }\n    void offset(double dx, double dy) {\n        minX += dx;\n        maxX += dx;\n        minY += dy;\n        maxY += dy;\n    }\n    // returns the intersections between the line segment from (x1,y1) \n    // to (x2,y2) and this rectangle.  Any intersections points with\n    // sides are reported, lines coincident with a side are considered not\n    // to intersect.\n    void lineIntersections(double x1, double y1, double x2, double y2, RectangleIntersections &ri) const;\n    bool inside(double x, double y) const {\n        return x>getMinX() && x<getMaxX() && y>getMinY() && y<getMaxY();\n    }\n    // checks if line segment is strictly overlapping.\n    // That is, if any point on the line is inside the rectangle.\n    bool overlaps(double x1, double y1, double x2, double y2);\n    // p1=(x1,y1),p2=(x2,y2) are points on the boundary.  Puts the shortest\n    // path round the outside of the rectangle from p1 to p2 into xs, ys.\n    void routeAround(double x1, double y1, double x2, double y2,\n            std::vector<double> &xs, std::vector<double> &ys);\n    /*\n     * xBorder and yBorder can be set to add a border to the boundary of the\n     * rectangle.  In other words, the size of the rectangle returned by the\n     * getters (getMinX, getMaxX, etc) will be slightly larger than the\n     * internal representation.  This is useful in situations where we need the\n     * size considered in one axis to be slightly different to that considered\n     * in the other axis for example, to avoid numerical precision problems in\n     * the axis-by-axis overlap removal process.\n     */\n    static double xBorder,yBorder;\n    static void setXBorder(double x) {xBorder=x;}\n    static void setYBorder(double y) {yBorder=y;}\n    \nprivate:\n    double minX,maxX,minY,maxY;\n    bool overlap;\n};\n\n//! @brief A vector of pointers to Rectangle objects.\ntypedef std::vector<Rectangle*> Rectangles;\n\nstd::ostream& operator<<(std::ostream& os, vpsc::Rectangle const &r);\n\nclass Variable;\ntypedef std::vector<Variable *> Variables;\nclass Constraint;\ntypedef std::vector<Constraint *> Constraints;\n\nvoid generateXConstraints(const Rectangles& rs, const Variables& vars,\n        Constraints& cs, const bool useNeighbourLists);\nvoid generateYConstraints(const Rectangles& rs, const Variables& vars,\n        Constraints& cs);\n\n/**\n * @brief Uses VPSC to remove overlaps between rectangles.\n *\n * Moves rectangles to remove all overlaps.  Heuristic attempts to move \n * shapes by as little as possible.\n *\n * @param[in,out] rs  The rectangles which will be moved to remove overlap\n */\nvoid removeoverlaps(Rectangles& rs);\n\n/** \n * @brief Uses VPSC to remove overlaps between rectangles, excluding some \n *        that should not be moved.\n *\n * Moves rectangles to remove all overlaps.  A heuristic attempts to move \n * shapes by as little as possible.  The heuristic is that the overlaps \n * are removed horizontally and then vertically, each pass being a \n * quadratic program in which the total squared movement is minimised \n * subject to non-overlap constraints.  \n *\n * An optional third horizontal pass (in addition to the first horizontal\n * pass and the second vertical pass) can be applied wherein the \n * x-positions of rectangles are reset to their original positions and \n * overlap removal repeated.  This may avoid some unnecessary movement. \n *\n * @param[in,out] rs    The rectangles which will be moved to remove overlap\n * @param[in] fixed     A set of indices to rectangles which should not be moved.\n * @param[in] thirdPass Optionally run the third horizontal pass described above.\n */\nvoid removeoverlaps(Rectangles& rs, const std::set<unsigned>& fixed, \n        bool thirdPass = true);\n\n// Useful for assertions:\nbool noRectangleOverlaps(const Rectangles& rs);\n\nstruct delete_object\n{\n    template <typename T>\n    void operator()(T *ptr){ delete ptr;}\n};\n\n} // namespace vpsc\n#endif // VPSC_RECTANGLE_H\n"
  },
  {
    "path": "cola/libvpsc/solve_VPSC.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libvpsc - A solver for the problem of Variable Placement with \n *           Separation Constraints.\n *\n * Copyright (C) 2005-2008  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n * Author(s):  Tim Dwyer\n *             Michael Wybrow\n*/\n\n#include <cmath>\n#include <sstream>\n#include <map>\n#include <cfloat>\n#include <set>\n\n#include \"libvpsc/constraint.h\"\n#include \"libvpsc/block.h\"\n#include \"libvpsc/blocks.h\"\n#include \"libvpsc/solve_VPSC.h\"\n#include \"libvpsc/cbuffer.h\"\n#include \"libvpsc/variable.h\"\n#include \"libvpsc/assertions.h\"\n#include \"libvpsc/exceptions.h\"\n\n#ifdef LIBVPSC_LOGGING\n#include <fstream>\n#endif\n\nusing namespace std;\n\nnamespace vpsc {\n\nstatic const double ZERO_UPPERBOUND=-1e-10;\nstatic const double LAGRANGIAN_TOLERANCE=-1e-4;\n\nIncSolver::IncSolver(Variables const &vs, Constraints const &cs) \n    : Solver(vs,cs)\n{\n    inactive=cs;\n    for(Constraints::iterator i=inactive.begin();i!=inactive.end();++i) {\n        (*i)->active=false;\n    }\n}\nSolver::Solver(Variables const &vs, Constraints const &cs) \n    : m(cs.size()), \n      cs(cs),\n      n(vs.size()),\n      vs(vs),\n      needsScaling(false)\n{\n    for(unsigned i=0;i<n;++i) {\n        vs[i]->in.clear();\n        vs[i]->out.clear();\n\n        // Set needsScaling if any variables have a scale other than 1.\n        needsScaling |= (vs[i]->scale != 1);\n    }\n    for(unsigned i=0;i<m;++i) {\n        Constraint *c=cs[i];\n        c->left->out.push_back(c);\n        c->right->in.push_back(c);\n        c->needsScaling = needsScaling;\n    }\n    bs=new Blocks(vs);\n#ifdef LIBVPSC_LOGGING\n    printBlocks();\n    //COLA_ASSERT(!constraintGraphIsCyclic(n,vs));\n#endif\n}\nSolver::~Solver() {\n    delete bs;\n}\n\nvoid IncSolver::addConstraint(Constraint *c)\n{\n    ++m;\n    c->active = false;\n    inactive.push_back(c);\n    c->left->out.push_back(c);\n    c->right->in.push_back(c);\n    c->needsScaling = needsScaling;\n}\n\n// useful in debugging\nvoid Solver::printBlocks() {\n#ifdef LIBVPSC_LOGGING\n    ofstream f(LOGFILE,ios::app);\n    for(set<Block*>::iterator i=bs->begin();i!=bs->end();++i) {\n        Block *b=*i;\n        f<<\"  \"<<*b<<endl;\n    }\n    for(unsigned i=0;i<m;i++) {\n        f<<\"  \"<<*cs[i]<<endl;\n    }\n#endif\n}\n\n/**\n * Stores the relative positions of the variables in their finalPosition\n * field.\n */\nvoid Solver::copyResult() {\n    for(Variables::const_iterator i=vs.begin();i!=vs.end();++i) {\n        Variable* v=*i;\n        v->finalPosition=v->position();\n        COLA_ASSERT(v->finalPosition==v->finalPosition);\n    }\n}\n/**\n* Produces a feasible - though not necessarily optimal - solution by\n* examining blocks in the partial order defined by the directed acyclic\n* graph of constraints. For each block (when processing left to right) we\n* maintain the invariant that all constraints to the left of the block\n* (incoming constraints) are satisfied. This is done by repeatedly merging\n* blocks into bigger blocks across violated constraints (most violated\n* first) fixing the position of variables inside blocks relative to one\n* another so that constraints internal to the block are satisfied.\n*/\nbool Solver::satisfy() {\n    list<Variable*> *vList=bs->totalOrder();\n    for(list<Variable*>::iterator i=vList->begin();i!=vList->end();++i) {\n        Variable *v=*i;\n        if(!v->block->deleted) {\n            bs->mergeLeft(v->block);\n        }\n    }\n    bs->cleanup();\n    bool activeConstraints=false;\n    for(unsigned i=0;i<m;i++) {\n        if(cs[i]->active) activeConstraints=true;\n        if(cs[i]->slack() < ZERO_UPPERBOUND) {\n#ifdef LIBVPSC_LOGGING\n            ofstream f(LOGFILE,ios::app);\n            f<<\"Error: Unsatisfied constraint: \"<<*cs[i]<<endl;\n#endif\n            //COLA_ASSERT(cs[i]->slack()>-0.0000001);\n            throw UnsatisfiedConstraint(*cs[i]);\n        }\n    }\n    delete vList;\n    copyResult();\n    return activeConstraints;\n}\n\nvoid Solver::refine() {\n    bool solved=false;\n    // Solve shouldn't loop indefinately\n    // ... but just to make sure we limit the number of iterations\n    unsigned maxtries=100;\n    while(!solved&&maxtries>0) {\n        solved=true;\n        maxtries--;\n        size_t length = bs->size();\n        for (size_t i = 0; i < length; ++i)\n        {\n            Block *b = bs->at(i);\n            b->setUpInConstraints();\n            b->setUpOutConstraints();\n        }\n        for (size_t i = 0; i < length; ++i)\n        {\n            Block *b = bs->at(i);\n            Constraint *c=b->findMinLM();\n            if(c!=nullptr && c->lm<LAGRANGIAN_TOLERANCE) {\n#ifdef LIBVPSC_LOGGING\n                ofstream f(LOGFILE,ios::app);\n                f<<\"Split on constraint: \"<<*c<<endl;\n#endif\n                // Split on c\n                Block *l=nullptr, *r=nullptr;\n                bs->split(b,l,r,c);\n                bs->cleanup();\n                // split alters the block set so we have to restart\n                solved=false;\n                break;\n            }\n        }\n    }\n    for(unsigned i=0;i<m;i++) {\n        if(cs[i]->slack() < ZERO_UPPERBOUND) {\n            COLA_ASSERT(cs[i]->slack()>ZERO_UPPERBOUND);\n            throw UnsatisfiedConstraint(*cs[i]);\n        }\n    }\n}\n/**\n * Calculate the optimal solution. After using satisfy() to produce a\n * feasible solution, refine() examines each block to see if further\n * refinement is possible by splitting the block. This is done repeatedly\n * until no further improvement is possible.\n */\nbool Solver::solve() {\n    satisfy();\n    refine();\n    copyResult();\n    return bs->size()!=n;\n}\n\nbool IncSolver::solve() {\n#ifdef LIBVPSC_LOGGING\n    ofstream f(LOGFILE,ios::app);\n    f<<\"solve_inc()...\"<<endl;\n#endif\n    satisfy();\n    double lastcost = DBL_MAX, cost = bs->cost();\n    while(fabs(lastcost-cost)>0.0001) {\n        satisfy();\n        lastcost=cost;\n        cost = bs->cost();\n#ifdef LIBVPSC_LOGGING\n        f<<\"  bs->size=\"<<bs->size()<<\", cost=\"<<cost<<endl;\n#endif\n    }\n    copyResult();\n    return bs->size()!=n; \n}\n/**\n * incremental version of satisfy that allows refinement after blocks are\n * moved.\n *\n *  - move blocks to new positions\n *  - repeatedly merge across most violated constraint until no more\n *    violated constraints exist\n *\n * Note: there is a special case to handle when the most violated constraint\n * is between two variables in the same block.  Then, we must split the block\n * over an active constraint between the two variables.  We choose the \n * constraint with the most negative lagrangian multiplier. \n */\nbool IncSolver::satisfy() {\n#ifdef LIBVPSC_LOGGING\n    ofstream f(LOGFILE,ios::app);\n    f<<\"satisfy_inc()...\"<<endl;\n#endif\n    splitBlocks();\n    //long splitCtr = 0;\n    Constraint* v = nullptr;\n    //CBuffer buffer(inactive);\n    while ( (v = mostViolated(inactive)) && \n            (v->equality || ((v->slack() < ZERO_UPPERBOUND) && !v->active)) ) \n    {\n        COLA_ASSERT(!v->active);\n        Block *lb = v->left->block, *rb = v->right->block;\n        if(lb != rb) {\n            lb->merge(rb,v);\n        } else {\n            if(lb->isActiveDirectedPathBetween(v->right,v->left)) {\n                // cycle found, relax the violated, cyclic constraint\n                v->unsatisfiable=true;\n                continue;\n                //UnsatisfiableException e;\n                //lb->getActiveDirectedPathBetween(e.path,v->right,v->left);\n                //e.path.push_back(v);\n                //throw e;\n            }\n            //if(splitCtr++>10000) {\n                //throw \"Cycle Error!\";\n            //}\n            // constraint is within block, need to split first\n            try {\n                Constraint* splitConstraint\n                    =lb->splitBetween(v->left,v->right,lb,rb);\n                if(splitConstraint!=nullptr) {\n                    COLA_ASSERT(!splitConstraint->active);\n                    inactive.push_back(splitConstraint);\n                } else {\n                    v->unsatisfiable=true;\n                    continue;\n                }\n            } catch(UnsatisfiableException e) {\n                e.path.push_back(v);\n#ifdef LIBVPSC_DEBUG\n                std::cerr << \"Unsatisfiable:\" << std::endl;\n                for(std::vector<Constraint*>::iterator r=e.path.begin();\n                        r!=e.path.end();++r)\n                {\n                    std::cerr << **r <<std::endl;\n                }\n#endif\n                v->unsatisfiable=true;\n                continue;\n            }\n            if(v->slack()>=0) {\n                COLA_ASSERT(!v->active);\n                // v was satisfied by the above split!\n                inactive.push_back(v);\n                bs->insert(lb);\n                bs->insert(rb);\n            } else {\n                bs->insert(lb->merge(rb,v));\n                delete ((lb->deleted) ? lb : rb);\n            }\n        }\n#ifdef LIBVPSC_LOGGING\n        f<<\"...remaining blocks=\"<<bs->size()<<\", cost=\"<<bs->cost()<<endl;\n#endif\n    }\n#ifdef LIBVPSC_LOGGING\n    f<<\"  finished merges.\"<<endl;\n#endif\n    bs->cleanup();\n    bool activeConstraints=false;\n    for(unsigned i=0;i<m;i++) {\n        v=cs[i];\n        if(v->active) activeConstraints=true;\n        if(v->slack() < ZERO_UPPERBOUND) {\n            ostringstream s;\n            s<<\"Unsatisfied constraint: \"<<*v;\n#ifdef LIBVPSC_LOGGING\n            ofstream f(LOGFILE,ios::app);\n            f<<s.str()<<endl;\n#endif\n            throw (char *) s.str().c_str();\n        }\n    }\n#ifdef LIBVPSC_LOGGING\n    f<<\"  finished cleanup.\"<<endl;\n    printBlocks();\n#endif\n    copyResult();\n    return activeConstraints;\n}\nvoid IncSolver::moveBlocks() {\n#ifdef LIBVPSC_LOGGING\n    ofstream f(LOGFILE,ios::app);\n    f<<\"moveBlocks()...\"<<endl;\n#endif\n    size_t length = bs->size();\n    for (size_t i = 0; i < length; ++i)\n    {\n        Block *b = bs->at(i);\n        b->updateWeightedPosition();\n        //b->posn = b->wposn / b->weight;\n    }\n#ifdef LIBVPSC_LOGGING\n    f<<\"  moved blocks.\"<<endl;\n#endif\n}\nvoid IncSolver::splitBlocks() {\n#ifdef LIBVPSC_LOGGING\n    ofstream f(LOGFILE,ios::app);\n#endif\n    moveBlocks();\n    splitCnt=0;\n    // Split each block if necessary on min LM\n    size_t length = bs->size();\n    for (size_t i = 0; i < length; ++i)\n    {\n        Block *b = bs->at(i);\n        Constraint* v=b->findMinLM();\n        if(v!=nullptr && v->lm < LAGRANGIAN_TOLERANCE) {\n            COLA_ASSERT(!v->equality);\n#ifdef LIBVPSC_LOGGING\n            f<<\"    found split point: \"<<*v<<\" lm=\"<<v->lm<<endl;\n#endif\n            splitCnt++;\n            Block *b = v->left->block, *l=nullptr, *r=nullptr;\n            COLA_ASSERT(v->left->block == v->right->block);\n            //double pos = b->posn;\n            b->split(l,r,v);\n            //l->posn=r->posn=pos;\n            //l->wposn = l->posn * l->weight;\n            //r->wposn = r->posn * r->weight;\n            l->updateWeightedPosition();\n            r->updateWeightedPosition();\n            bs->insert(l);\n            bs->insert(r);\n            b->deleted=true;\n            COLA_ASSERT(!v->active);\n            inactive.push_back(v);\n#ifdef LIBVPSC_LOGGING\n            f<<\"  new blocks: \"<<*l<<\" and \"<<*r<<endl;\n#endif\n        }\n    }\n    //if(splitCnt>0) { std::cout<<\"  splits: \"<<splitCnt<<endl; }\n#ifdef LIBVPSC_LOGGING\n    f<<\"  finished splits.\"<<endl;\n#endif\n    bs->cleanup();\n}\n\n/**\n * Scan constraint list for the most violated constraint, or the first equality\n * constraint\n */\nConstraint* IncSolver::mostViolated(Constraints &l)\n{\n    double slackForMostViolated = DBL_MAX;\n    Constraint* mostViolated = nullptr;\n#ifdef LIBVPSC_LOGGING\n    ofstream f(LOGFILE,ios::app);\n    f << \"Looking for most violated...\" << endl;\n#endif\n    size_t lSize = l.size();\n    size_t deleteIndex = lSize;\n    Constraint *constraint = nullptr;\n    double slack = 0;\n    for (size_t index = 0; index < lSize; ++index)\n    {\n        constraint = l[index];\n        slack = constraint->slack();\n        if (constraint->equality || slack < slackForMostViolated)\n        {\n            slackForMostViolated = slack;    \n            mostViolated = constraint;\n            deleteIndex = index;\n            if (constraint->equality)\n            {\n                break;\n            }\n        }\n    }\n    // Because the constraint list is not order dependent we just\n    // move the last element over the deletePoint and resize\n    // downwards.  There is always at least 1 element in the\n    // vector because of search.\n    if ( (deleteIndex < lSize) && \n         (((slackForMostViolated < ZERO_UPPERBOUND) && !mostViolated->active) || \n          mostViolated->equality) )\n    {\n        l[deleteIndex] = l[lSize-1];\n        l.resize(lSize-1);\n    }\n#ifdef LIBVPSC_LOGGING\n    if (mostViolated)\n    {\n        f << \"  most violated is: \" << *mostViolated << endl;\n    }\n    else\n    {\n        f << \"  non found.\" << endl;\n    }\n#endif\n    return mostViolated;\n}\n\nstruct node {\n    set<node*> in;\n    set<node*> out;\n};\n// useful in debugging - cycles would be BAD\nbool Solver::constraintGraphIsCyclic(const unsigned n, Variable* const vs[]) {\n    map<Variable*, node*> varmap;\n    vector<node*> graph;\n    for(unsigned i=0;i<n;i++) {\n        node *u=new node;\n        graph.push_back(u);\n        varmap[vs[i]]=u;\n    }\n    for(unsigned i=0;i<n;i++) {\n        for(vector<Constraint*>::iterator c=vs[i]->in.begin();c!=vs[i]->in.end();++c) {\n            Variable *l=(*c)->left;\n            varmap[vs[i]]->in.insert(varmap[l]);\n        }\n\n        for(vector<Constraint*>::iterator c=vs[i]->out.begin();c!=vs[i]->out.end();++c) {\n            Variable *r=(*c)->right;\n            varmap[vs[i]]->out.insert(varmap[r]);\n        }\n    }\n    while(graph.size()>0) {\n        node *u=nullptr;\n        vector<node*>::iterator i=graph.begin();\n        for(;i!=graph.end();++i) {\n            u=*i;\n            if(u->in.size()==0) {\n                break;\n            }\n        }\n        if(i==graph.end() && graph.size()>0) {\n            //cycle found!\n            return true;\n        } else {\n            graph.erase(i);\n            for(set<node*>::iterator j=u->out.begin();j!=u->out.end();++j) {\n                node *v=*j;\n                v->in.erase(u);\n            }\n            delete u;\n        }\n    }\n    for(unsigned i=0; i<graph.size(); ++i) {\n        delete graph[i];\n    }\n    return false;\n}\n\n// useful in debugging - cycles would be BAD\nbool Solver::blockGraphIsCyclic() {\n    map<Block*, node*> bmap;\n    vector<node*> graph;\n    size_t length = bs->size();\n    for (size_t i = 0; i < length; ++i)\n    {\n        Block *b = bs->at(i);\n        node *u=new node;\n        graph.push_back(u);\n        bmap[b]=u;\n    }\n    for (size_t i = 0; i < length; ++i)\n    {\n        Block *b = bs->at(i);\n        b->setUpInConstraints();\n        Constraint *c=b->findMinInConstraint();\n        while(c!=nullptr) {\n            Block *l=c->left->block;\n            bmap[b]->in.insert(bmap[l]);\n            b->deleteMinInConstraint();\n            c=b->findMinInConstraint();\n        }\n\n        b->setUpOutConstraints();\n        c=b->findMinOutConstraint();\n        while(c!=nullptr) {\n            Block *r=c->right->block;\n            bmap[b]->out.insert(bmap[r]);\n            b->deleteMinOutConstraint();\n            c=b->findMinOutConstraint();\n        }\n    }\n    while(graph.size()>0) {\n        node *u=nullptr;\n        vector<node*>::iterator i=graph.begin();\n        for(;i!=graph.end();++i) {\n            u=*i;\n            if(u->in.size()==0) {\n                break;\n            }\n        }\n        if(i==graph.end() && graph.size()>0) {\n            //cycle found!\n            return true;\n        } else {\n            graph.erase(i);\n            for(set<node*>::iterator j=u->out.begin();j!=u->out.end();++j) {\n                node *v=*j;\n                v->in.erase(u);\n            }\n            delete u;\n        }\n    }\n    for(unsigned i=0; i<graph.size(); i++) {\n        delete graph[i];\n    }\n    return false;\n}\n}\n"
  },
  {
    "path": "cola/libvpsc/solve_VPSC.h",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libvpsc - A solver for the problem of Variable Placement with \n *           Separation Constraints.\n *\n * Copyright (C) 2005-2013  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n * Author(s):  Tim Dwyer\n *             Michael Wybrow\n*/\n\n//\n// TODO: Really, we should have three classes: VPSC, IncrementalVPSC and\n// StaticVPSC, where the latter two inherit from VPSC.  StaticVPSC would be\n// the equivalent of what is currently VPSC.\n// Also, a lot of the code specific to one or other of these concrete\n// implementations should be moved from Block and Blocks: e.g. mergeLeft etc.\n//\n#ifndef VPSC_SOLVE_VPSC_H\n#define VPSC_SOLVE_VPSC_H\n\n#include <vector>\n\n/**\n * @namespace vpsc\n * @brief libvpsc: Variable Placement with Separation Constraints\n *        quadratic program solver library.\n *\n * You should use VPSC via an instance of the IncSolver or Solver classes.\n */\nnamespace vpsc {\nclass Variable;\ntypedef std::vector<Variable*> Variables;\nclass Constraint;\nclass Blocks;\ntypedef std::vector<Constraint*> Constraints;\n\n/**\n * @brief Static solver for Variable Placement with Separation Constraints \n *        problem instance\n *\n * This class attempts to solve a least-squares problem subject to a set \n * of separation constraints.  The solve() and satisfy() methods return true \n * if any constraints are active, in both cases false means an unconstrained \n * optimum has been found.\n *\n * @sa IncSolver\n */\nclass Solver {\npublic:\n\t//! @brief  Results in an approximate solution subject to the constraints.\n    //! @return true if any constraints are active, or false if an unconstrained \n    //!         optimum has been found.\n\tvirtual bool satisfy();\n\t//! @brief  Results in an optimum solution subject to the constraints\n    //! @return true if any constraints are active, or false if an unconstrained \n    //!         optimum has been found.\n\tvirtual bool solve();\n\n\tSolver(Variables const &vs, Constraints const &cs);\n\tvirtual ~Solver();\n    //! @brief   Returns the Variables in this problem instance.\n    //! @returns A vector of Variable objects.\n    Variables const & getVariables() { return vs; }\nprotected:\n\tBlocks *bs;\n\tsize_t m;\n\tstd::vector<Constraint*> const &cs;\n\tsize_t n;\n\tstd::vector<Variable*> const &vs;\n    bool needsScaling;\n\n\tvoid printBlocks();\n\tvoid copyResult();\nprivate:\n\tvoid refine();\n\tbool constraintGraphIsCyclic(const unsigned n, Variable* const vs[]);\n\tbool blockGraphIsCyclic();\n};\n\n/**\n * @brief Incremental solver for Variable Placement with Separation Constraints \n *        problem instance\n *\n * This class attempts to solve a least-squares problem subject to a set \n * of sepation constraints.  The solve() and satisfy() methods return true \n * if any constraints are active, in both cases false means an unconstrained \n * optimum has been found.  This is an incremental version of that allows \n * refinement after blocks are moved.  This version is preferred if you are \n * using VPSC in an interactive context.\n *\n * @sa Solver\n */\nclass IncSolver : public Solver {\npublic:\n\tIncSolver(Variables const &vs, Constraints const &cs);\n\t//! @brief  Results in an approximate solution subject to the constraints.\n    //! @return true if any constraints are active, or false if an unconstrained \n\tbool satisfy();\n\t//! @brief  Results in an optimum solution subject to the constraints\n    //! @return true if any constraints are active, or false if an unconstrained \n    //!         optimum has been found.\n\tbool solve();\n   \t//! @brief  Adds a constraint to the existing VPSC solver.\n    //!\n    //! @param constraint The new additional constraint to add. \n    void addConstraint(Constraint *constraint);\nprivate:\n\tvoid moveBlocks();\n\tvoid splitBlocks();\n\n\tunsigned splitCnt;\n\tConstraints inactive;\n\tConstraints violated;\n\tConstraint* mostViolated(Constraints &l);\n};\n\n}\n#endif // VPSC_SOLVE_VPSC_H\n"
  },
  {
    "path": "cola/libvpsc/tests/Makefile.am",
    "content": "AM_CPPFLAGS = -I$(top_srcdir)\n\ncheck_PROGRAMS = rectangleoverlap block satisfy_inc # cycle\nsatisfy_inc_SOURCES = satisfy_inc.cpp\nsatisfy_inc_LDADD = $(top_builddir)/libvpsc/libvpsc.la # -L$(mosek_home)/bin -lmosek -lguide -limf -lirc\nblock_SOURCES = block.cpp\nblock_LDADD = $(top_builddir)/libvpsc/libvpsc.la\nrectangleoverlap_SOURCES = rectangleoverlap.cpp\nrectangleoverlap_LDADD = $(top_builddir)/libvpsc/libvpsc.la\n\n#cycle_SOURCES = cycle.cpp\n#cycle_LDADD = $(top_builddir)/libvpsc/libvpsc.la\n\nTESTS = $(check_PROGRAMS)\n\n"
  },
  {
    "path": "cola/libvpsc/tests/block.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libvpsc - A solver for the problem of Variable Placement with \n *           Separation Constraints.\n *\n * Copyright (C) 2005-2008  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library in the file LICENSE; if not, \n * write to the Free Software Foundation, Inc., 59 Temple Place, \n * Suite 330, Boston, MA  02111-1307  USA\n *\n*/\n\n#include <cassert>\n#include <iostream>\n\n#include \"libvpsc/variable.h\"\n#include \"libvpsc/constraint.h\"\n#include \"libvpsc/blocks.h\"\n#include \"libvpsc/block.h\"\nusing namespace std;\nusing namespace vpsc;\n\n\nvoid test1() {\n    Blocks *blocks = new Blocks(Variables());\n    cout << \"Block test 1...\" << endl;\n    Variable *a1=new Variable(1,0,1);\n    Variable *a2=new Variable(2,0,1);\n    Constraint *c=new Constraint(a1,a2,1);\n    a1->out.push_back(c);\n    a2->in.push_back(c);\n    Block *b1=new Block(blocks, a1);\n    Block *b2=new Block(blocks, a2);\n    b1->merge(b2,c);\n    cout << \"Block: \" << *b1 << endl;\n    a1->desiredPosition = -1;\n    a2->desiredPosition = 2;\n    Constraint *m = b1->findMinLMBetween(a1,a2);\n    cout << \"Min lm constraint: \" << *m << endl;\n    assert(c==m);\n    cout << \"  lm=\" << c->lm << endl;\n    cout << \"Block test 1... Success!\" << endl;\n}\n\n/*\n * Constraint tree:\n *    \\_/\n *    / \\\n */\nvoid test2() {\n    Blocks *blocks = new Blocks(Variables());\n    cout << \"Block test 2...\" << endl;\n    Variable *a[]={\n        new Variable(0,0,1),\n        new Variable(1,0,1),\n        new Variable(2,1,1),\n        new Variable(3,2,1),\n        new Variable(4,3,1),\n        new Variable(5,3,1)};\n    Constraint *c[]={\n        new Constraint(a[0],a[2],2),\n        new Constraint(a[1],a[2],2),\n        new Constraint(a[2],a[3],2),\n        new Constraint(a[3],a[4],2),\n        new Constraint(a[3],a[5],2)};\n    for(int i=0;i<6;i++) {\n        new Block(blocks,a[i]);\n    }\n    for(int i=0;i<5;i++) {\n        c[i]->left->out.push_back(c[i]);\n        c[i]->right->in.push_back(c[i]);\n    }\n    for(int i=0;i<5;i++) {\n        Block *l=c[i]->left->block, *r=c[i]->right->block;\n        l->merge(r,c[i]);\n    }\n    Block *b=a[0]->block;\n    cout << \"Block: \" << *b << endl;\n    for(int i=0;i<6;i++) {\n            a[i]->desiredPosition = i!=4?-2:5;\n    }\n    cout << \"calc min lm:\" << endl;\n    Constraint *m = b->findMinLMBetween(a[0],a[4]);\n    cout << \"Min lm constraint: \" << *m << endl;\n    assert(m==c[3]);\n    cout << \"Block test 2... Success!\" << endl;\n}\nint main() {\n    test1();\n    test2();\n    return 0;\n}\n"
  },
  {
    "path": "cola/libvpsc/tests/cycle.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libvpsc - A solver for the problem of Variable Placement with \n *           Separation Constraints.\n *\n * Copyright (C) 2005-2008  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library in the file LICENSE; if not, \n * write to the Free Software Foundation, Inc., 59 Temple Place, \n * Suite 330, Boston, MA  02111-1307  USA\n *\n*/\n\n#include <iostream>\n#include <cassert>\n#include <cmath>\n#include <algorithm>\n#include <libvpsc/rectangle.h>\n#include <libvpsc/variable.h>\n#include <libvpsc/constraint.h>\n#include <libvpsc/solve_VPSC.h>\nusing namespace std;\nusing namespace vpsc;\ninline bool approxEquals(const double a, const double b) {\n\treturn fabs((double)a-b)<0.0001;\n}\nvoid test1() {\n\tcout << \"Test 1...\" << endl;\n\tvector<Variable*> a;\n\ta.push_back(new Variable(0,0,1));\n\ta.push_back(new Variable(1,1,1));\n\tvector<Constraint*> c;\n\tc.push_back(new Constraint(a[0],a[1],2));\n\tc.push_back(new Constraint(a[1],a[0],2));\n\tdouble expected[]={1.5,-0.5};\n\ttry {\n\t\tIncSolver vpsc(a,c);\n\t\tvpsc.solve();\n\t} catch (UnsatisfiableException& e) {\n\t\tcerr << \"Unsatisfiable\" << endl;\n\t\tfor(vector<Constraint*>::iterator i=e.path.begin();\n\t\t\t\ti!=e.path.end();i++) {\n\t\t\tcout << **i << endl;\n\t\t}\n\t\texit(1);\n\t} \n\t//catch(...) {\n\t\t//cerr << \"Unknown error!\" << endl;\n\t\t//exit(1);\n\t//}\n\n\tfor(size_t i=0;i<a.size();i++) {\n\t\tassert(approxEquals(a[i]->finalPosition,expected[i]));\n\t}\n\tfor_each(a.begin(),a.end(),delete_object());\n\tfor_each(c.begin(),c.end(),delete_object());\n\tcout << \"Test 1... done.\" << endl;\n}\nvoid test2() {\n\tcout << \"Test 2...\" << endl;\n\tvector<Variable *> a;\n\ta.push_back(new Variable(0,8,1));\n\ta.push_back(new Variable(1,5,1));\n\ta.push_back(new Variable(2,3,1));\n\ta.push_back(new Variable(3,1,1));\n\tvector<Constraint*> c;\n\tc.push_back(new Constraint(a[0],a[3],3));\n\tc.push_back(new Constraint(a[0],a[1],3));\n\tc.push_back(new Constraint(a[1],a[3],3));\n\tc.push_back(new Constraint(a[1],a[2],3));\n\tc.push_back(new Constraint(a[2],a[3],3));\n\tc.push_back(new Constraint(a[2],a[3],3));\n\t//double expected[]={-3.71429,4,1,-0.714286,2.28571,2.28571,7,5.28571,8.28571,11.2857};\n\ttry {\n\t\tIncSolver vpsc(a,c);\n\t\tvpsc.solve();\n\t} catch (char const *msg) {\n\t\tcerr << msg << endl;\n\t\texit(1);\n\t}\n\n\t/*\n\tfor(int i=0;i<n;i++) {\n\t\tassert(approxEquals(a[i]->position(),expected[i]));\n\t}\n\t*/\n\tcout << \"Test 2... done.\" << endl;\n\tfor_each(a.begin(),a.end(),delete_object());\n\tfor_each(c.begin(),c.end(),delete_object());\n}\nint main() {\n\ttest1();\n    return 0;\n}\n"
  },
  {
    "path": "cola/libvpsc/tests/rectangleoverlap.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libvpsc - A solver for the problem of Variable Placement with \n *           Separation Constraints.\n *\n * Copyright (C) 2005-2008  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library in the file LICENSE; if not, \n * write to the Free Software Foundation, Inc., 59 Temple Place, \n * Suite 330, Boston, MA  02111-1307  USA\n *\n*/\n\n#include <cstdio>\n#include <cassert>\n#include <cstdlib>\n#include <math.h>\n#include <time.h>\n#include <libvpsc/rectangle.h>\n#include <libvpsc/variable.h>\n#include <libvpsc/constraint.h>\n#include <libvpsc/solve_VPSC.h>\nusing namespace std;\nusing namespace vpsc;\n\ninline double getRand(double range) {\n\treturn range*rand()/RAND_MAX;\n}\nvoid printRects(vector<Rectangle*> &rs) {\n\tprintf(\"Set of %d rectangles:\\n\",(int)rs.size());\n\tfor(unsigned i=0;i<rs.size();++i) {\n\t\tcout << *rs[i] << endl;\n\t}\n}\nvoid generateRandomRects(unsigned n, vector<Rectangle*> &rs) {\n\trs.resize(n);\n\tstatic double const rect_size = 5;\n\tstatic double const min_rect_size = 1e-4;\n\tstatic double const fld_size = sqrt(rect_size * n / 2.0);\n\tdouble coords[4];\n\tfor (unsigned i = 0; i < n; ++i) {\n\t\tfor (unsigned d = 0; d < 2; ++d) {\n\t\t\t//unsigned const end = 1 + (rand() % (fld_size - 1));\n\t\t\t//unsigned const start = rand() % end;\n\t\t\tdouble const start = getRand(fld_size);\n\t\t\tdouble const end = start + min_rect_size\n\t\t\t       \t+ getRand(rect_size);\n\t\t\tcoords[2 * d] = start;\n\t\t\tcoords[2 * d + 1] = end;\n\t\t} \n\t\trs[i]=new Rectangle(coords[0],coords[1],coords[2],coords[3]);\n\t}\n}\nvector<Rectangle*>& generateRects(double coords[][4], unsigned n,vector<Rectangle *>& rs) {\n\trs.resize(n);\n\tfor (unsigned i = 0; i < n; ++i) {\n\t\trs[i]=new Rectangle(coords[i][0],coords[i][1],coords[i][2],coords[i][3]);\n\t}\n\treturn rs;\n}\nvoid test(vector<Rectangle *> &rs, double &cost, double &duration) {\n\tunsigned n=rs.size();\n\tvector<Rectangle *> ors(n);\n\tfor (unsigned i = 0; i < n; ++i) {\n\t\tors[i]=new Rectangle(rs[i]->getMinX(),rs[i]->getMaxX(),rs[i]->getMinY(),rs[i]->getMaxY());\n\t}\n\n\tclock_t starttime = clock();\n\tremoveoverlaps(rs);\n\tduration = (double)(clock() - starttime)/CLOCKS_PER_SEC;\n\tcost = 0;\n\tfor(unsigned i=0;i<n;i++) {\n\t\tdouble dx=rs[i]->getCentreX()-ors[i]->getCentreX();\n\t\tdouble dy=rs[i]->getCentreY()-ors[i]->getCentreY();\n\t\tcost+=sqrt(dx*dx+dy*dy);\n\t\tdelete rs[i];\n\t\tdelete ors[i];\n\t}\n}\ndouble test1[][4]={ { 0, 50, 0, 30 }, { 10, 20, 10, 29 },\n{ 30, 70, 39, 70 }, { 0, 90, 40, 50 }, { 30, 70, 1, 29 } };\nunsigned n1=5;\ndouble test2[][4]={ { 7, 22, 39, 54 }, { 7, 33, 0, 59 },\n{ 3, 26, 16, 56 }, { 7, 17, 18, 20 }, { 1, 59, 11, 26 },\n{ 19, 20, 13, 49 }, { 1, 10, 0, 4 }, { 47, 52, 1, 3 } };\nunsigned n2=8;\ndouble test3[][4]={ { 8, 32, 29, 36 }, { 19, 24, 2, 27 },\n{ 4, 5, 27, 55 }, { 6, 7, 13, 26 }, { 3, 39, 46, 62 },\n{ 6, 23, 2, 19 }, { 18, 39, 5, 23 }, { 35, 63, 42, 78 },\n{ 16, 18, 14, 72 }, { 12, 32, 10, 58 } };\nunsigned n3=10;\ndouble test4[][4]={ { 315.755, 355.288, 353.595, 449.627 },\n{ 395.048, 395.635, 253.943, 362.228 },\n{ 254.439, 393.289, 278.708, 286.346 },\n{ 209.852, 370.831, 326.496, 507.255 },\n{ 271.947, 415.74, 362.228, 450.318 },\n{ 293.408, 405.197, 220.61, 244.119 },\n{ 276.482, 386.472, 286.346, 435.767 },\n{ 268.211, 436.23, 192.807, 220.61 },\n{ 378.008, 502.118, 358.437, 475.587 },\n{ 340.68, 472.597, 249.492, 335.448 } };\nunsigned n4=10;\ndouble test5[][4]={ { 7, 22, 39, 54 }, { 7, 33, 0, 59 },\n{ 3, 26, 16, 56 }, { 7, 17, 18, 20 }, { 1, 59, 11, 26 },\n{ 19, 20, 13, 49 }, { 1, 10, 0, 4 }, { 47, 52, 1, 3 } };\nunsigned n5=8;\ndouble test6[][4]={ { 40, 69, 63, 69 }, { 1, 5, 27, 64 },\n{ 34, 66, 20, 22 }, { 1, 24, 10, 25 }, { 1, 19, 9, 61 },\n{ 0, 56, 8, 70 }, { 33, 35, 13, 28 }, { 11, 31, 33, 35 },\n{ 12, 22, 3, 23 } };\nunsigned n6=9;\ndouble test7[][4]={\t{ 341.594, 388.459, 373.491, 518.168 },\n{ 271.214, 324.782, 311.332, 409.166 },\n{ 293.848, 475.064, 305.194, 391.162 },\n{ 255.317, 447.738, 342.671, 489.923 },\n{ 228.375, 261.057, 206.422, 327.794 },\n{ 383.552, 462.834, 363.132, 412.843 },\n{ 288.859, 481.054, 351.895, 497.728 },\n{ 201.307, 368.511, 387.02, 394.95 },\n{ 257.961, 259.673, 386.503, 518.403 },\n{ 200.178, 275.606, 364.968, 466.787 } };\t\nunsigned n7=10;\ndouble test8[][4]={{12.807,15.7566,14.9478,16.7924},\n{7.76228,11.6532,4.75249,4.75349},\n{7.84596,10.1387,15.465,16.7709},\n{1.80748,3.0357,5.9983,6.16279},\n{6.46447,7.47249,12.8694,13.4378},\n{14.0026,17.3342,5.10141,9.81088},\n{6.84223,6.85932,6.40395,9.21135},\n{7.63462,10.3552,6.78124,8.59953},\n{0.26429,2.80847,14.5724,17.7455},\n{14.7686,15.7148,3.46036,5.66776},\n{10.635,11.4893,12.5044,16.941},\n{6.32027,10.7117,14.2953,15.6276},\n{11.9942,13.1118,10.6893,11.4477},\n{11.9384,15.1357,2.20982,6.92982},\n{2.89395,4.29002,11.7058,16.2896},\n{9.44116,12.7547,9.75556,11.1811},\n{5.2475,8.00607,15.3652,17.026},\n{2.09541,3.76981,2.5526,3.16739},\n{3.14595,6.66351,10.3007,14.4881},\n{4.88109,9.38044,9.02416,10.2954},\n{7.55378,9.14715,13.9686,16.0468},\n{1.70299,5.42198,14.1913,14.2191},\n{14.4877,14.4897,6.14013,8.50074},\n{12.9909,14.5163,10.322,12.4457},\n{11.616,12.0848,3.7601,5.45419},\n{10.3087,13.358,3.04666,3.53389},\n{2.28263,2.44881,13.806,15.8206},\n{3.31805,5.47662,3.91187,6.85355},\n{0.484138,2.06164,3.57335,7.87753},\n{4.73784,5.12359,9.383,11.9217},\n{12.2921,12.7769,12.329,12.8139},\n{12.7351,16.7141,12.7658,13.78},\n{3.71614,5.79872,1.53137,4.97126},\n{10.7423,14.8183,2.57104,2.94168},\n{9.93995,10.1557,1.3432,1.499},\n{0.198099,0.204966,9.29459,11.8795},\n{14.1043,18.8473,11.2028,14.1971},\n{4.23857,4.95743,14.7047,17.1439},\n{13.936,15.9612,10.7744,14.8598},\n{11.355,15.6824,2.49113,5.96963},\n{12.8528,16.3913,3.82582,6.67259},\n{13.9445,14.7354,10.8576,12.9503},\n{13.0041,15.6166,2.07035,3.70034},\n{2.31809,5.03195,1.13659,5.8604},\n{10.2454,14.5396,10.9442,15.4321},\n{7.12259,11.3929,7.20864,10.4059},\n{6.54862,9.88399,1.82828,5.89899},\n{4.27072,7.52613,7.99016,11.1703},\n{8.84828,9.15453,10.1489,11.7934},\n{7.71027,8.97206,3.26462,4.02636},\n{14.3383,15.1727,3.02586,3.26268},\n{9.21233,11.1919,13.9814,16.1433},\n{13.1946,16.1613,12.2268,13.1319},\n{13.0462,15.6689,7.03513,8.59752},\n{8.72724,11.3859,5.69193,7.8238},\n{10.6241,14.1033,7.88946,9.95327},\n{8.48376,10.8714,8.86955,11.2137},\n{3.55633,4.14351,13.7308,18.4988},\n{1.79802,4.68843,11.0964,11.6543},\n{13.1535,14.6895,1.52144,2.50643},\n{1.24533,4.27261,13.345,13.4925},\n{14.4031,18.7944,15.4447,18.0096},\n{8.56933,11.3392,0.446787,1.18762},\n{11.311,16.0574,8.41,8.76508},\n{13.5332,17.8479,8.2067,11.4446},\n{5.73826,6.63581,10.8364,11.6186},\n{10.1995,11.5202,6.54248,9.49804},\n{14.6456,16.7915,7.01621,7.57531},\n{15.1444,16.4184,1.45761,2.35577},\n{11.8169,12.0382,14.8149,19.3316},\n{10.148,11.1227,15.0087,18.1595},\n{10.9498,14.7849,12.3852,13.9467},\n{10.7631,10.9141,5.24419,8.64319},\n{11.2486,12.6029,6.25029,10.0076},\n{12.8731,16.0703,4.96619,8.54006},\n{6.92828,8.53172,8.36509,11.8971},\n{3.1677,7.20423,14.5582,17.1794},\n{14.1426,16.9327,15.1198,19.1306},\n{2.52943,6.64027,5.18935,8.58545},\n{6.89613,11.4515,3.7672,6.23813},\n{2.91428,6.40636,1.4231,4.10552},\n{9.81892,12.9687,8.25114,10.1775},\n{14.6192,14.7412,10.8349,15.1725},\n{6.96657,11.7009,11.0638,11.8966},\n{7.03182,9.20687,2.04293,2.60462},\n{7.47955,9.28533,7.45213,8.37318},\n{6.24651,9.79246,8.61803,9.91034},\n{4.73642,7.48461,9.59481,12.748},\n{8.70644,11.1702,2.54172,4.26587},\n{14.9028,19.4109,6.238,8.04256},\n{5.22907,8.45899,1.98714,4.94042},\n{8.96884,12.3636,1.72663,3.39844},\n{6.96563,8.04735,10.6198,11.3663},\n{1.65099,5.65883,10.5002,13.9039},\n{11.3337,11.5138,5.31369,7.75029},\n{2.79561,4.08151,7.04269,9.00167}};\n\nunsigned n8=96;\ndouble test9[][4]={{2.67865,4.81342,8.67025,11.5025},\n{5.77912,6.94355,9.80043,12.2904},\n{11.9459,13.8675,3.66967,7.38408},\n{6.72663,8.30474,3.37566,7.24571},\n{9.2081,10.9827,10.9557,11.8868},\n{0.161903,3.31202,3.35371,3.84933},\n{4.46508,9.18934,9.43037,10.9125},\n{3.84059,5.2565,8.66868,8.70713},\n{4.67598,5.15207,5.2252,8.92099},\n{1.19252,1.31215,7.97481,8.27191},\n{4.57641,5.71063,0.440628,4.17365},\n{6.80268,11.5523,3.78375,4.79819},\n{11.2172,13.7652,8.44876,11.1649},\n{11.4673,13.1644,6.09156,7.41026},\n{12.2995,13.585,0.155239,4.63887},\n{12.3513,15.3947,8.3437,11.1337},\n{3.92566,6.15611,12.432,16.3993},\n{12.6351,14.6039,9.96391,13.1152},\n{0.682894,2.48867,7.66904,8.86704},\n{3.50189,7.28939,8.37741,8.96276},\n{2.37719,4.19762,11.1129,12.0465},\n{5.53568,8.1444,11.9056,15.5818},\n{7.32876,11.2713,12.1655,15.0785},\n{2.534,6.15563,9.30845,11.2833},\n{8.00852,12.8051,2.16786,4.90262},\n{11.8095,12.814,11.5818,13.7731},\n{7.54398,9.23043,7.36953,10.7315},\n{8.36918,9.83071,11.8668,11.8776},\n{5.72267,9.66642,1.46379,3.71362},\n{11.2725,14.6538,4.76772,7.30304},\n{5.8638,10.7623,5.99865,10.0994},\n{11.0224,12.6455,0.852638,2.20201},\n{4.03151,8.51056,6.12449,10.3672},\n{7.75136,10.6782,10.648,11.8606},\n{11.9663,14.3993,2.83154,5.46437},\n{6.05275,8.00044,10.9675,15.3426},\n{10.9702,13.146,8.98465,12.4718},\n{4.99665,7.91376,9.19241,9.71153},\n{3.7422,4.00542,2.00556,2.53918},\n{9.01679,10.9439,12.8107,15.1367},\n{10.0117,11.5009,0.194049,3.08568},\n{8.29117,13.1323,6.99045,8.65707},\n{5.97395,10.5816,5.77559,7.35126},\n{5.68856,6.51699,4.40392,5.82242},\n{0.209729,3.89072,7.36013,8.98447},\n{0.360264,1.88558,0.319886,3.22738},\n{2.02163,2.07428,3.2753,8.12958},\n{5.05075,5.86987,12.7958,16.7689},\n{10.6484,15.5931,7.23546,10.4741},\n{7.20998,7.46939,2.44384,5.10459},\n{12.5022,15.1819,10.6593,13.5708},\n{2.3619,2.45407,5.75168,7.28966},\n{12.131,16.661,4.39608,8.19289},\n{9.81023,10.731,6.67919,9.31523},\n{6.97712,10.166,8.4813,13.3432},\n{6.45378,7.44457,8.96504,11.9806},\n{8.70396,11.5729,7.15588,12.1524},\n{9.93058,14.0306,0.849502,1.80855},\n{8.32174,8.34616,7.52595,12.0431},\n{2.79979,5.93358,4.90296,7.6893},\n{0.72484,5.42439,3.48229,5.77743},\n{6.05275,10.2779,7.4252,7.72184},\n{4.41176,6.91184,11.8809,15.3923},\n{6.50435,8.04432,11.4826,15.3172},\n{12.16,14.3518,1.13763,4.17255},\n{7.82506,10.5124,8.05713,9.03876}};\nunsigned n9=66;\ndouble test10[][4]={{15.9875,18.9768,15.3193,17.9811},\n{16.5669,19.7216,1.05824,1.58667},\n{8.80629,9.88527,9.71101,13.2142},\n{19.568,20.1767,3.28922,8.03561},\n{13.6363,15.6827,12.9329,16.6542},\n{2.32913,3.58085,8.28597,12.6503},\n{6.86597,11.2847,5.9172,10.236},\n{8.57413,11.0048,18.0203,18.4095},\n{7.68828,8.89193,9.52038,12.3945},\n{13.5784,15.499,0.824193,4.7533},\n{5.70392,8.26946,10.1955,12.8184},\n{17.9857,22.6483,14.2013,16.0377},\n{14.7965,16.4222,11.9332,16.5984},\n{20.5111,23.1383,0.355473,0.834461},\n{5.88763,9.2761,8.31995,11.6173},\n{13.8307,16.6334,17.2376,19.8715},\n{7.20005,8.99179,19.0137,23.483},\n{3.67112,6.97933,18.6142,21.1208},\n{0.936183,5.81945,5.11063,7.47703},\n{9.85383,12.4861,7.80027,11.677},\n{8.07584,11.1964,13.8571,17.9736},\n{8.07017,10.0661,8.42816,9.79417},\n{10.8259,11.6232,16.7028,19.3248},\n{18.55,19.3911,17.174,22.0082},\n{1.34073,1.93538,17.9341,20.4509},\n{11.7558,12.1994,0.295703,2.19289},\n{12.4063,13.662,0.965124,5.21391},\n{2.2033,2.85518,16.4455,20.0191},\n{6.3853,9.77239,0.892142,2.17773},\n{0.546736,5.29679,12.1949,15.2469},\n{14.1365,17.5213,14.7027,15.1512},\n{9.46879,11.9145,11.8539,14.4408},\n{8.49611,8.98075,17.1388,17.5066},\n{1.53577,2.52014,0.615943,4.13396},\n{7.12078,9.05901,20.3739,23.44},\n{2.7104,7.09713,16.4442,20.8587},\n{12.9707,14.2845,12.5642,16.2281},\n{13.5086,14.3207,17.7611,20.1056},\n{19.2264,24.1481,2.063,5.27645},\n{15.2016,18.2491,1.10228,3.37286},\n{16.7733,18.1385,2.35807,7.0123},\n{19.8272,21.9464,18.27,22.8376},\n{4.27133,8.48869,19.5925,21.488},\n{19.6951,23.7284,10.5207,11.1889},\n{0.799027,3.61863,1.42504,3.44902},\n{1.31871,5.95584,16.4147,18.2479},\n{19.8398,21.0495,15.2495,15.8842},\n{3.15773,5.76599,11.1562,12.2007},\n{4.61422,4.78559,16.6607,16.9497},\n{11.0064,11.5745,16.521,19.5463},\n{13.3865,15.7969,12.215,14.3112},\n{0.272424,4.59201,7.19502,9.58004},\n{15.6377,16.4926,18.5978,19.0178},\n{1.44957,1.65985,5.24023,10.1284},\n{0.0559948,0.138395,3.75354,4.46554},\n{3.24015,3.86196,12.205,14.0543},\n{2.64686,3.51587,16.1429,16.6103},\n{2.56003,5.14236,5.6624,8.31491},\n{13.7143,16.5806,7.32777,10.6354},\n{15.8994,20.4036,0.171759,0.567584},\n{11.1247,11.5263,7.61341,8.80042},\n{10.7869,11.8353,7.73861,8.39933},\n{16.7563,18.1604,15.6377,20.3633},\n{4.7627,5.87556,0.850618,4.25755},\n{11.2178,15.6734,14.2378,15.9026},\n{2.00323,5.94744,1.78428,4.77571},\n{16.0705,20.0359,9.50528,12.9563},\n{14.9808,18.3586,9.56819,10.8817},\n{13.7005,17.173,10.5755,15.5172},\n{6.24185,6.44174,11.9766,16.0609},\n{14.0767,16.1476,11.9904,14.2274},\n{18.3009,20.9378,0.109473,0.330122},\n{0.395109,4.35458,19.8694,23.5078},\n{17.4949,22.4626,6.16132,10.5268},\n{0.992178,2.11099,18.813,22.5419},\n{8.41369,12.6754,20.0682,22.6},\n{19.5239,23.6359,3.22945,3.81068},\n{6.60361,6.84761,11.8174,12.6899},\n{8.95351,9.96275,11.2373,12.3269},\n{13.8414,17.1229,18.182,20.7568},\n{13.0468,17.4872,16.8349,21.2615},\n{16.6053,17.1026,5.24778,8.1272},\n{1.20043,2.96974,10.1904,13.8153},\n{7.73924,7.74809,1.53703,3.76274},\n{15.0915,18.4866,18.6576,18.9426},\n{10.69,13.9811,6.92511,9.44625},\n{8.66032,12.8382,6.67974,9.08735},\n{3.24707,3.91176,7.21641,8.75134},\n{20.5281,23.518,5.04016,5.38868},\n{8.78238,13.6922,11.9149,12.334},\n{19.1358,19.5264,15.9157,16.8192},\n{4.52551,7.52884,12.1049,16.4566},\n{18.467,22.8957,2.97024,7.48362},\n{17.9618,18.9449,2.7601,4.06645},\n{10.8057,15.3718,7.7254,8.32173},\n{19.6416,21.5781,7.62473,11.5731},\n{5.14712,8.87694,0.495145,1.50088},\n{4.11719,6.22953,3.59814,8.25023},\n{6.34314,9.83141,1.90886,3.52039},\n{11.6041,11.7642,12.6177,16.2647},\n{17.4351,19.786,0.846214,2.85357},\n{7.90974,12.4031,10.5818,10.868},\n{3.33578,5.53021,19.271,22.6137},\n{14.3296,18.1074,3.76864,6.21134},\n{1.39798,4.21194,14.7015,18.9814},\n{13.3463,13.89,4.76333,8.78979},\n{7.78517,12.3834,12.0445,12.1204},\n{1.21553,4.14149,10.9523,11.5827},\n{10.7328,15.0635,11.2248,16.0148},\n{1.89816,6.42421,6.21479,9.51491},\n{5.76369,9.87896,0.471237,2.08597},\n{1.10543,3.50571,6.4243,6.85217},\n{13.4916,16.9187,13.4167,14.751},\n{6.61683,9.79075,4.44435,7.2165},\n{17.5276,21.8159,3.22316,7.12862},\n{8.09408,10.3727,0.167984,1.77021},\n{8.04815,12.6168,7.91666,11.0816},\n{1.32248,2.63905,12.5164,17.4845},\n{7.324,11.7358,9.05354,13.7152},\n{15.0274,18.5751,11.55,13.6444},\n{15.3627,16.1478,19.7391,21.3528},\n{16.5701,19.0741,18.0876,18.9877},\n{19.9719,20.1289,10.2999,14.2899},\n{5.77124,9.49847,20.3551,23.9988},\n{9.4065,13.7029,1.45775,2.17524},\n{8.22117,12.8533,16.9079,17.5996},\n{8.20293,12.4012,15.7691,15.783},\n{9.33037,11.8253,0.286895,2.70091},\n{12.5114,14.6471,11.0241,13.8678},\n{14.6423,15.2091,5.08987,9.29257},\n{10.4729,12.308,1.7717,6.27227},\n{9.65187,11.9638,14.3196,18.937},\n{5.1704,6.94718,18.4884,22.8028},\n{4.66015,8.43071,12.6095,14.2635},\n{19.5384,21.1589,7.47562,10.9592},\n{20.3595,24.407,0.804689,2.94465},\n{0.775119,2.53222,1.35017,2.38185},\n{14.1459,18.0717,13.111,17.3643},\n{15.9535,16.9371,3.47482,6.36462},\n{15.1727,17.7769,13.1324,16.2993},\n{17.2678,19.5719,19.2912,23.3942},\n{14.5832,17.1443,19.2559,24.0751},\n{1.57289,3.42857,7.75497,11.9183},\n{2.63994,5.18274,5.84108,8.64802},\n{7.56056,8.51991,0.284378,0.750091},\n{8.4225,12.0985,13.1443,16.5509},\n{12.4397,13.7349,16.1177,21.0089},\n{18.411,22.1179,12.4302,16.1478},\n{16.7343,19.9381,0.87138,4.38391},\n{0.729191,5.0941,0.4316,3.36382},\n{7.96699,10.079,15.0613,19.489},\n{14.4215,16.2705,13.932,15.6623},\n{9.37756,12.4608,12.8857,16.6014},\n{12.0729,12.5163,2.59841,7.39714},\n{7.52658,11.0203,15.2853,19.805},\n{16.0919,20.3462,13.6464,15.1218},\n{6.17075,10.0034,17.5729,21.8258},\n{8.94533,11.0185,7.98461,12.5047},\n{0.249775,1.8787,2.72361,7.6554},\n{11.5167,11.8826,8.7937,10.8008},\n{14.3038,17.8052,19.0873,20.7193},\n{19.7272,24.1131,5.29434,7.64106},\n{19.7624,20.0966,13.2827,17.354},\n{5.58186,7.99298,3.3987,5.8269},\n{19.7479,20.3262,16.1492,17.465},\n{3.25902,6.3684,17.0948,20.9851},\n{12.7549,14.4322,1.40931,6.02218},\n{12.232,13.2567,0.559319,3.07481},\n{0.138414,4.75571,14.9273,18.2745},\n{6.04241,6.23422,9.62104,10.3701}};\nunsigned n10=170;\ndouble test11[][4]={{2.20847,5.99613,25.7684,29.5065},\n{4.38169,7.14163,-7.79499,-7.42678},\n{17.1816,19.4476,-5.03151,-3.38153},\n{10.6383,11.0169,-0.356332,3.85003},\n{13.3309,15.7634,21.4146,24.0122},\n{17.1354,20.5384,27.9053,29.8839},\n{4.82128,7.88931,4.90792,5.71239},\n{13.1802,14.7891,24.0123,26.5035},\n{9.1468,9.95493,-3.73661,-1.29955},\n{14.4021,17.8989,19.2669,23.5805},\n{3.53936,4.95206,17.2632,19.2913},\n{11.2732,15.3951,10.4298,11.6976},\n{9.82902,13.9892,17.9523,19.9811},\n{10.0265,11.0793,16.4791,17.5196},\n{1.27427,5.64116,7.85316,8.33764},\n{3.70992,7.16293,5.06311,6.98578},\n{9.95501,13.9876,-3.13412,-1.29965},\n{17.6086,21.8963,15.3022,17.9743},\n{2.05607,2.66477,-0.552748,0.286511},\n{12.6971,13.3533,-4.23798,-3.73671},\n{7.7961,11.69,7.35371,11.9837},\n{7.68167,9.93012,1.7933,3.98514},\n{1.2176,2.27018,0.286611,3.17168},\n{4.98578,7.91342,12.8464,16.1781},\n{16.5918,21.3527,4.59687,5.72758},\n{9.12809,9.56481,1.38197,2.061},\n{14.6904,19.1649,-3.38143,-1.21492},\n{11.3046,15.5357,14.6315,17.2819},\n{3.69836,4.52282,5.06311,5.67974},\n{12.2713,13.7058,11.6977,14.6314},\n{0.130993,3.26738,-4.32728,-3.7221},\n{11.4317,12.3544,19.9812,22.2083},\n{10.0298,10.1041,11.1483,12.7055},\n{16.2023,16.7313,1.49517,4.59677},\n{12.4149,15.8265,4.33334,6.45789},\n{17.575,19.9519,12.3124,15.3021},\n{17.0991,22.0233,3.78959,6.02599},\n{3.99216,5.32933,0.583351,0.882127},\n{16.5929,18.003,14.3823,17.6574},\n{13.5273,15.1372,16.4791,20.1285},\n{12.3687,15.2044,6.45799,7.83514},\n{8.04258,9.47375,17.3137,21.5515},\n{7.329,10.9322,7.65703,11.5161},\n{1.98895,2.89459,1.84656,3.17168},\n{0.520521,2.46608,6.71895,10.4866},\n{13.184,16.1474,6.45799,7.30869},\n{2.13915,4.58689,17.2632,19.8192},\n{15.8375,18.2786,15.9558,18.1255},\n{14.7223,16.4109,16.4791,17.3636},\n{4.00206,7.29287,-4.32728,-1.41062},\n{16.6028,18.6157,14.6315,17.1786},\n{3.19495,7.10528,-1.41052,0.583251},\n{1.69626,5.11997,0.326338,1.84646},\n{12.1579,12.759,-0.356332,0.328198},\n{3.51735,7.12098,5.71249,7.85306},\n{0.953512,5.10372,3.17178,5.06301},\n{13.2737,14.3319,18.7924,21.1975},\n{1.46188,5.99876,10.3471,12.8463},\n{8.39195,9.77825,1.66426,2.061},\n{1.81344,5.57851,-3.53802,0.326238},\n{1.31773,2.99152,29.5066,33.3419},\n{5.33625,7.15652,19.4265,19.8527},\n{0.432492,3.44635,7.60608,10.3589},\n{1.60933,2.36115,-1.16144,0.286511},\n{9.27774,10.4284,-1.86525,-1.56998},\n{11.8878,13.7671,-5.11518,-4.23808},\n{10.0073,10.2574,11.282,12.9297},\n{10.5778,11.703,0.629406,0.965262},\n{3.17349,7.96657,16.1782,17.2631},\n{11.2281,13.6998,12.2002,12.4339},\n{13.7166,18.3124,19.2669,21.4145},\n{10.5388,15.0813,0.328298,4.33324},\n{9.05987,12.0136,-1.29945,-0.356432},\n{6.74526,7.05518,-8.26859,-7.79509},\n{17.7736,20.6859,5.72768,8.29825},\n{2.22113,7.1491,21.4284,25.7683},\n{16.1247,17.7842,2.70437,3.3773},\n{8.34023,10.0276,13.9827,18.7779},\n{15.1872,18.2348,17.1787,17.2902},\n{16.5308,17.6299,6.45799,8.71682},\n{5.98601,9.22204,23.2905,26.0581},\n{7.64095,10.7424,18.778,22.0208},\n{15.0585,19.52,17.7993,19.2668},\n{17.646,20.037,0.451228,3.78949},\n{0.0160052,1.94859,4.68464,6.71885},\n{7.29434,9.17489,13.9827,17.3136},\n{17.7896,21.639,6.02609,9.48842},\n{4.43065,8.71164,19.8528,23.2904},\n{16.5231,21.0708,3.3774,4.59677},\n{14.2096,16.0172,17.282,17.9522},\n{8.32648,9.09478,3.98524,7.65693},\n{3.6703,7.6841,0.583351,4.90782},\n{9.90605,10.9591,11.5162,13.1508},\n{14.7669,18.5129,-1.21482,3.3773},\n{3.48104,6.74301,29.5066,30.5551},\n{9.22657,10.4539,-5.59946,-1.29955},\n{8.12181,8.34154,-2.11601,1.66416},\n{4.11375,5.37752,30.5552,34.3283},\n{9.11434,12.5991,8.88212,10.4297},\n{11.3365,14.9133,-8.77796,-4.9549},\n{15.7809,16.0235,-2.30357,0.667869},\n{15.4629,16.7224,4.59687,6.45789},\n{13.3766,16.7042,21.4146,25.1652},\n{7.87643,10.2361,12.8464,13.9826},\n{7.38842,11.7536,11.5162,16.479},\n{5.15799,9.74446,-7.42668,-4.32738},\n{16.0009,16.044,-3.82308,0.667869},\n{15.6318,18.7733,8.71692,11.607},\n{10.7258,12.2305,7.30879,8.88202},\n{8.17133,9.84923,-1.56988,1.38187},\n{3.5179,5.38762,0.583351,5.06301},\n{9.4516,10.8319,22.0209,26.7891},\n{9.94456,11.8221,19.9812,21.2926},\n{5.14479,8.31779,3.92878,7.65693},\n{14.6057,18.2633,0.667969,4.59677},\n{5.62784,8.67939,17.3137,19.4264},\n{10.9244,13.5481,-1.29955,-1.29945},\n{5.76759,6.30746,-3.722,-3.5131},\n{7.13259,9.6258,8.33774,11.5161},\n{1.05144,1.32443,10.359,10.9074},\n{16.4807,19.9127,26.5036,27.9052},\n{5.9629,7.66553,-1.41052,-1.14028},\n{13.6489,16.9728,22.2084,25.5279},\n{2.50777,4.43837,19.8193,21.4283},\n{1.57577,3.7409,15.383,18.2258},\n{17.1816,18.8466,17.2903,17.7992},\n{8.43156,13.0154,-4.9548,-3.13422},\n{1.88827,6.19077,6.98588,10.347},\n{14.73,15.2147,17.9523,18.7923},\n{5.55742,8.69305,2.0611,3.92868}};\t\nunsigned n11=130;\ndouble test12[][4]={\n{4.92744,6.6604,4.27234,8.301},\n{1.54924,2.51053,4.48526,9.19033},\n{1.55587,5.56226,-0.660563,3.35611},\n{1.87055,2.251,3.56944,6.75421},\n{1.58179,2.94863,5.24022,8.78858},\n{1.88069,5.98638,3.94188,5.24012},\n{1.81447,5.62383,5.24022,9.22211},\n{4.06842,6.37182,-0.053975,3.94178},\n{4.03643,4.2387,3.35621,3.94178},\n{1.16362,3.67328,0.29063,3.01001},\n};\t\nunsigned n12=10;\nint main() {\n\tdouble c,t;\n\tvector<Rectangle*> rs;\n\tcout << \"test1\" << endl;\n\ttest(generateRects(test1,n1,rs),c,t);\n\tcout << \"test2\" << endl;\n\ttest(generateRects(test2,n2,rs),c,t);\n\tcout << \"test3\" << endl;\n\ttest(generateRects(test3,n3,rs),c,t);\n\tcout << \"test4\" << endl;\n\ttest(generateRects(test4,n4,rs),c,t);\n\tcout << \"test5\" << endl;\n\ttest(generateRects(test5,n5,rs),c,t);\n\tcout << \"test6\" << endl;\n\ttest(generateRects(test6,n6,rs),c,t);\n\tcout << \"test7\" << endl;\n\ttest(generateRects(test7,n7,rs),c,t);\n\tcout << \"test8\" << endl;\n\ttest(generateRects(test8,n8,rs),c,t);\n\tcout << \"test9\" << endl;\n\ttest(generateRects(test9,n9,rs),c,t);\n\tcout << \"test10\" << endl;\n\ttest(generateRects(test10,n10,rs),c,t);\n\tcout << \"test11\" << endl;\n\ttest(generateRects(test11,n11,rs),c,t);\n\tcout << \"test12\" << endl;\n\ttest(generateRects(test12,n12,rs),c,t);\n\tint max_size=100, repeats=100,step=10; \n\t//srand(time(nullptr));\n\tfor(int i=10;i<=max_size;i+=step) {\n\t\t//if(i%5==0) cout << i << endl;\n\t\tdouble disp=0, time=0;\n\t\tfor(int repeat=repeats;repeat--;) {\n\t\t\tvector<Rectangle*> rs;\n\t\t\tgenerateRandomRects(i,rs);\n\t\t\t//printRects(rs);\n\t\t\ttest(rs,c,t);\n\t\t\tdisp+=c;\n\t\t\ttime+=t;\n\t\t}   \n\t\tdisp/=repeats;\n\t\ttime/=repeats;\n\t\tcout << i << \",\" << time << \",\" << disp << endl;\n\t}\n    return 0;\n}\n"
  },
  {
    "path": "cola/libvpsc/tests/satisfy_inc.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libvpsc - A solver for the problem of Variable Placement with \n *           Separation Constraints.\n *\n * Copyright (C) 2005-2008  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library in the file LICENSE; if not, \n * write to the Free Software Foundation, Inc., 59 Temple Place, \n * Suite 330, Boston, MA  02111-1307  USA\n *\n*/\n\n#include <libvpsc/rectangle.h>\n#include <libvpsc/variable.h>\n#include <libvpsc/constraint.h>\n#include <libvpsc/solve_VPSC.h>\n#include <algorithm>\n#include <cstdio>\n#include <ctime>\n#include <cmath>\n#include <cassert>\n\nusing namespace std;\nusing namespace vpsc;\n\nstatic inline double getRand(const int range) {\n\treturn (double)range*rand()/(RAND_MAX+1.0);\n}\ninline bool approxEquals(const double a, const double b) {\n\treturn fabs((double)a-b)<0.01;\n}\ntypedef vector<Constraint*> CS;\n\nbool checkResult(unsigned n, Variable *a[], unsigned m, Constraint *c[], double expected[]=nullptr) {\n        std::vector<Variable*> aa(a,a+n);\n        std::vector<Constraint*> cc(c,c+m);\n\tIncSolver vpsc(aa,cc);\n\tvpsc.solve();\n#ifdef MOSEK_AVAILABLE\n\t//printf(\"Checking with mosek...\");\n\tMosekEnv* menv = mosek_init_sep_ls(n,c,m);\n\tfloat *b=new float[n];\n\tfloat *x=new float[n];\n\tfor(unsigned i=0;i<n;i++) {\n\t\tb[i]=a[i]->desiredPosition;\n\t}\n\tmosek_quad_solve_sep(menv,b,x);\n\tmosek_delete(menv);\n#endif\n\tfor(unsigned i=0;i<n;i++) {\n\t\tchar s=',';\n\t\tif(i==n-1) s='\\n';\n#ifdef MOSEK_AVAILABLE\n\t\t//printf(\"%f(%f)%c\",a[i]->finalPosition,x[i],s);\n\t\tif(!(approxEquals(a[i]->finalPosition,x[i]))) {\n\t\t\treturn false;\n\t\t}\n\t\tassert(approxEquals(a[i]->finalPosition,x[i]));\n#endif\n\t\tif(expected) assert(approxEquals(a[i]->finalPosition,expected[i]));\n\t}\n#ifdef MOSEK_AVAILABLE\n\tdelete [] b;\n\tdelete [] x;\n#endif\n\treturn true;\n}\nvoid dumpMatlabProblem(unsigned n, Variable *a[], unsigned m, Constraint *c[]){\n\tprintf(\"H=2*eye(%d);\\n\",n);\n\tprintf(\"f=-2*[ \");\n\tfor(unsigned i=0;i<n;i++) {\n\t\tprintf(\"%f \",a[i]->desiredPosition);\n\t}\n\tprintf(\"];\\n\");\n\tprintf(\"s=[ \");\n\tfor(unsigned i=0;i<n;i++) {\n\t\tprintf(\"%f \",a[i]->scale);\n\t}\n\tprintf(\"];\\n\");\n\tprintf(\"C=zeros(%d,%d);\\n\",m,n);\n\tfor(unsigned i=0;i<m;i++) {\n\t\tprintf(\"C(%d,[%d %d])=[1 -1];\\n\",i+1,c[i]->left->id+1,c[i]->right->id+1);\n\t}\n\tprintf(\"A=C*diag(s);\\n\");\n\tprintf(\"b=[ \");\n\tfor(unsigned i=0;i<m;i++) {\n\t\tprintf(\"%f \",-1.*c[i]->gap);\n\t}\n\tprintf(\"];\\n\");\n\tprintf(\"quadprog(H,f,A,b)\\n\");\n}\nvoid test1() {\n\tcout << \"Test 1...\" << endl;\n\tVariable *a[] = {\n\t\tnew Variable(0,2,1,1.),\n\t\tnew Variable(1,9,1,1),\n\t\tnew Variable(2,9,1,1),\n\t\tnew Variable(3,9,1,1),\n\t\tnew Variable(4,2,1,1)};\n\tConstraint *c[] = {\n\t\tnew Constraint(a[0],a[4],3),\n\t\tnew Constraint(a[0],a[1],3),\n\t\tnew Constraint(a[1],a[2],3),\n\t\tnew Constraint(a[2],a[4],3),\n\t\tnew Constraint(a[3],a[4],3)};\n\tunsigned int n = sizeof(a)/sizeof(Variable*);\n\tunsigned int m = sizeof(c)/sizeof(Constraint*);\n\tdouble expected[]={1.4,4.4,7.4,7.4,10.4};\n\tcheckResult(n,a,m,c,expected);\n\tcout << \"Test 1... done.\" << endl;\n}\nvoid test1a() {\n\tcout << \"Test 1a...\" << endl;\n\t/* matlab:\n\t H=2*eye(2)\n\t f=[0 0]\n\t A=[ 2 -1 ]\n\t b=[ -2 ]\n\t quadprog(H,f,A,b)\n\t */\n\tVariable *a[] = {\n\t\tnew Variable(0,0,1,2.),\n\t\tnew Variable(1,0,1,1)};\n\tConstraint *c[] = {\n\t\tnew Constraint(a[0],a[1],2)};\n\tunsigned int n = sizeof(a)/sizeof(Variable*);\n\tunsigned int m = sizeof(c)/sizeof(Constraint*);\n\tdouble expected[]={-0.8,0.4};\n\tcheckResult(n,a,m,c,expected);\n\tcout << \"Test 1a... done.\" << endl;\n}\nvoid test1b() {\n\tcout << \"Test 1b...\" << endl;\n\t/* matlab:\n\t H=2*eye(2)\n\t f=[0 0]\n\t A=[ 1 -2 ]\n\t b=[ -2 ]\n\t quadprog(H,f,A,b)\n\t */\n\tVariable *a[] = {\n\t\tnew Variable(0,0,1,1.),\n\t\tnew Variable(1,0,1,2)};\n\tConstraint *c[] = {\n\t\tnew Constraint(a[0],a[1],2)};\n\tunsigned int n = sizeof(a)/sizeof(Variable*);\n\tunsigned int m = sizeof(c)/sizeof(Constraint*);\n\tdouble expected[]={-0.4,0.8};\n\tcheckResult(n,a,m,c,expected);\n\tcout << \"Test 1b... done.\" << endl;\n}\nvoid test1c() {\n\tcout << \"Test 1c...\" << endl;\n\t/* matlab:\n\t H=2*eye(3)\n\t f=-2*[ 1 1 1 ]\n\t s=[ 3  2  4 ]\n\t C=zeros(2,3)\n\t C(1,1:2)=[1 -1]\n\t C(2,2:3)=[1 -1]\n\t A=C*diag(s)\n\t b=[-2 -2 ]\n\t quadprog(H,f,A,b)\n\t */\n\tVariable *a[] = {\n\t\tnew Variable(0,1,1,3),\n\t\tnew Variable(1,1,1,2),\n\t\tnew Variable(2,1,1,4)};\n\tConstraint *c[] = {\n\t\tnew Constraint(a[0],a[1],2),\n\t\tnew Constraint(a[1],a[2],2)};\n\tunsigned int n = sizeof(a)/sizeof(Variable*);\n\tunsigned int m = sizeof(c)/sizeof(Constraint*);\n\tdouble expected[]={0.2623, 1.3934, 1.1967};\n\tcheckResult(n,a,m,c,expected);\n\tcout << \"Test 1c... done.\" << endl;\n}\n\n// no splits required\nvoid test2() {\n\tcout << \"Test 2...\" << endl;\n\tVariable *a[] = {\n\t\tnew Variable(0,4,1),\n\t\tnew Variable(1,6,1),\n\t\tnew Variable(2,9,1),\n\t\tnew Variable(3,2,1),\n\t\tnew Variable(4,5,1)};\n\tConstraint *c[] = {\n\t\tnew Constraint(a[0],a[2],3),\n\t\tnew Constraint(a[0],a[3],3),\n\t\tnew Constraint(a[1],a[4],3),\n\t\tnew Constraint(a[2],a[4],3),\n\t\tnew Constraint(a[2],a[3],3),\n\t\tnew Constraint(a[3],a[4],3)};\n\tdouble expected[]={0.5,6,3.5,6.5,9.5};\n\tunsigned int n = sizeof(a)/sizeof(Variable*);\n\tunsigned int m = sizeof(c)/sizeof(Constraint*);\n\tcheckResult(n,a,m,c,expected);\n\tcout << \"Test 2... done.\" << endl;\n}\n\n// split required\nvoid test3() {\n\t/* matlab:\n\t H=2*eye(5)\n\t f=-2*[ 5 6 7 4 3 ]\n\t s=[ 1 1 1 1 1 ]\n\t C=zeros(5,5)\n\t C(1,[1 5])=[1 -1]\n\t C(2,[2 3])=[1 -1]\n\t C(3,[3 4])=[1 -1]\n\t C(4,[3 5])=[1 -1]\n\t C(5,[4 5])=[1 -1]\n\t A=C*diag(s)\n\t b=-3*ones(5,1)\n\t quadprog(H,f,A,b)\n\t */\n\tcout << \"Test 3...\" << endl;\n\tVariable *a[] = {\n\t\tnew Variable(0,5,1),\n\t\tnew Variable(1,6,1),\n\t\tnew Variable(2,7,1),\n\t\tnew Variable(3,4,1),\n\t\tnew Variable(4,3,1)};\n\tConstraint *c[] = {\n\t\tnew Constraint(a[0],a[4],3),\n\t\tnew Constraint(a[1],a[2],3),\n\t\tnew Constraint(a[2],a[3],3),\n\t\tnew Constraint(a[2],a[4],3),\n\t\tnew Constraint(a[3],a[4],3)};\n\tdouble expected[]={5,0.5,3.5,6.5,9.5};\n\tunsigned int n = sizeof(a)/sizeof(Variable*);\n\tunsigned int m = sizeof(c)/sizeof(Constraint*);\n\tcheckResult(n,a,m,c,expected);\n\tcout << \"Test 3... done.\" << endl;\n}\n// split required\nvoid test4() {\n\t/* matlab:\n\t H=2*eye(5)\n\t f=-2*[ 7 1 6 0 2 ]\n\t s=[ 5 8 3 1 7 ]\n\t C=zeros(6,5)\n\t C(1,[1 4])=[1 -1]\n\t C(2,[1 2])=[1 -1]\n\t C(3,[2 5])=[1 -1]\n\t C(4,[3 5])=[1 -1]\n\t C(5,[3 4])=[1 -1]\n\t C(6,[4 5])=[1 -1]\n\t A=C*diag(s)\n\t b=-3*ones(6,1)\n\t quadprog(H,f,A,b)\n\t */\n\tcout << \"Test 4...\" << endl;\n\tVariable *a[] = {\n\t\tnew Variable(0,7,1,1),\n\t\tnew Variable(1,1,1,1),\n\t\tnew Variable(2,6,1,1),\n\t\tnew Variable(3,0,1,1),\n\t\tnew Variable(4,2,1,1)};\n\tConstraint *c[] = {\n\t\tnew Constraint(a[0],a[3],3),\n\t\tnew Constraint(a[0],a[1],3),\n\t\tnew Constraint(a[1],a[4],3),\n\t\tnew Constraint(a[2],a[4],3),\n\t\tnew Constraint(a[2],a[3],3),\n\t\tnew Constraint(a[3],a[4],3)};\n\tdouble expected[]={0.8,3.8,0.8,3.8,6.8};\n\tunsigned int n = sizeof(a)/sizeof(Variable*);\n\tunsigned int m = sizeof(c)/sizeof(Constraint*);\n\tcheckResult(n,a,m,c,expected);\n\tcout << \"Test 4... done.\" << endl;\n}\nvoid test5() {\n\tcout << \"Test 5...\" << endl;\n\tVariable *a[] = {\n\t\tnew Variable(0,0,1), new Variable(1,9,1), new\n\t\t\tVariable(2,1,1), new Variable(3,9,1), new\n\t\t\tVariable(4,5,1), new Variable(5,1,1), new\n\t\t\tVariable(6,2,1), new Variable(7,1,1), new\n\t\t\tVariable(8,6,1), new Variable(9,3,1)};\n\tConstraint *c[] = {\n\t\tnew Constraint(a[0],a[3],3), new Constraint(a[1],a[8],3),\n\t\tnew Constraint(a[1],a[6],3), new Constraint(a[2],a[6],3),\n\t\tnew Constraint(a[3],a[5],3), new Constraint(a[3],a[6],3),\n\t\tnew Constraint(a[3],a[7],3), new Constraint(a[4],a[8],3),\n\t\tnew Constraint(a[4],a[7],3), new Constraint(a[5],a[8],3),\n\t\tnew Constraint(a[5],a[7],3), new Constraint(a[5],a[8],3),\n\t\tnew Constraint(a[6],a[9],3), new Constraint(a[7],a[8],3),\n\t\tnew Constraint(a[7],a[9],3), new Constraint(a[8],a[9],3)\n\t};\n\tdouble expected[]={-3.71429,4,1,-0.714286,2.28571,2.28571,7,5.28571,8.28571,11.2857};\n\tunsigned int n = sizeof(a)/sizeof(Variable*);\n\tunsigned int m = sizeof(c)/sizeof(Constraint*);\n\tcheckResult(n,a,m,c,expected);\n\tcout << \"Test 5... done.\" << endl;\n}\nvoid test6() {\n\tcout << \"Test 6...\" << endl;\n\tVariable *a[] = {\n\t\tnew Variable(0,7,1),\n\t\tnew Variable(1,0,1),\n\t\tnew Variable(2,3,1),\n\t\tnew Variable(3,1,1),\n\t\tnew Variable(4,4,1)\n\t};\n\tConstraint *c[] = {\n\t\tnew Constraint(a[0],a[3],3),\n\t\tnew Constraint(a[0],a[2],3),\n\t\tnew Constraint(a[1],a[4],3),\n\t\tnew Constraint(a[1],a[4],3),\n\t\tnew Constraint(a[2],a[3],3),\n\t\tnew Constraint(a[3],a[4],3)\n\t};\n\tdouble expected[]={-0.75,0,2.25,5.25,8.25};\n\tunsigned int n = sizeof(a)/sizeof(Variable*);\n\tunsigned int m = sizeof(c)/sizeof(Constraint*);\n\tcheckResult(n,a,m,c,expected);\n\tcout << \"Test 6... done.\" << endl;\n}\nvoid test7() {\n\tcout << \"Test 7...\" << endl;\n\tVariable *a[] = {\n\t\tnew Variable(0,4,1),\n\t\tnew Variable(1,2,1),\n\t\tnew Variable(2,3,1),\n\t\tnew Variable(3,1,1),\n\t\tnew Variable(4,8,1)\n\t};\n\tConstraint *c[] = {\n\t\tnew Constraint(a[0],a[4],3),\n\t\tnew Constraint(a[0],a[2],3),\n\t\tnew Constraint(a[1],a[3],3),\n\t\tnew Constraint(a[2],a[3],3),\n\t\tnew Constraint(a[2],a[4],3),\n\t\tnew Constraint(a[3],a[4],3)\n\t};\n\tdouble expected[]={-0.5,2,2.5,5.5,8.5};\n\tunsigned int n = sizeof(a)/sizeof(Variable*);\n\tunsigned int m = sizeof(c)/sizeof(Constraint*);\n\tcheckResult(n,a,m,c,expected);\n\tcout << \"Test 7... done.\" << endl;\n}\nvoid test8() {\n\t/* matlab:\n\t H=2*eye(5)\n\t f=-2*[ 3 4 0 5 6 ]\n\t s=[ 1 1 1 1 1 ]\n\t C=zeros(6,5)\n\t C(1,[1 2])=[1 -1]\n\t C(2,[1 3])=[1 -1]\n\t C(3,[2 3])=[1 -1]\n\t C(4,[2 5])=[1 -1]\n\t C(5,[3 4])=[1 -1]\n\t C(6,[4 5])=[1 -1]\n\t A=C*diag(s)\n\t b=-3*ones(6,1)\n\t quadprog(H,f,A,b)\n\t */\n\t// This cycles when using the heuristic of merging on the least\n\t// violated, violated constraint first.\n\tcout << \"Test 8...\" << endl;\n\tVariable *a[] = {\n\t\tnew Variable(0,3,1),\n\t\tnew Variable(1,4,1),\n\t\tnew Variable(2,0,1),\n\t\tnew Variable(3,5,1),\n\t\tnew Variable(4,6,1)\n\t};\n\tConstraint *c[] = {\n\t\tnew Constraint(a[0],a[1],3),\n\t\tnew Constraint(a[0],a[2],3),\n\t\tnew Constraint(a[1],a[2],3),\n\t\tnew Constraint(a[1],a[4],3),\n\t\tnew Constraint(a[2],a[3],3),\n\t\tnew Constraint(a[2],a[3],3),\n\t\tnew Constraint(a[3],a[4],3),\n\t\tnew Constraint(a[3],a[4],3)\n\t};\n\tdouble expected[]={-2.4,0.6,3.6,6.6,9.6};\n\tunsigned int n = sizeof(a)/sizeof(Variable*);\n\tunsigned int m = sizeof(c)/sizeof(Constraint*);\n\tcheckResult(n,a,m,c,expected);\n\tcout << \"Test 8... done.\" << endl;\n}\nvoid test9() {\n\t/* matlab:\n\t H=2*eye(5)\n\t f=-2*[ 8 2 6 5 3 ]\n\t s=[ 1 1 1 1 1 ]\n\t C=zeros(7,5)\n\t C(1,[1 5])=[1 -1]\n\t C(2,[1 4])=[1 -1]\n\t C(3,[2 3])=[1 -1]\n\t C(4,[2 5])=[1 -1]\n\t C(5,[3 4])=[1 -1]\n\t C(6,[3 5])=[1 -1]\n\t C(7,[4 5])=[1 -1]\n\t A=C*diag(s)\n\t b=-3*ones(7,1)\n\t quadprog(H,f,A,b)\n\t */\n\tcout << \"Test 9...\" << endl;\n\tVariable *a[] = {\n\t\tnew Variable(0,8,1),\n\t\tnew Variable(1,2,1),\n\t\tnew Variable(2,6,1),\n\t\tnew Variable(3,5,1),\n\t\tnew Variable(4,3,1)};\n\tConstraint *c[] = {\n\t\tnew Constraint(a[0],a[4],3),\n\t\tnew Constraint(a[0],a[3],3),\n\t\tnew Constraint(a[1],a[2],3),\n\t\tnew Constraint(a[1],a[4],3),\n\t\tnew Constraint(a[2],a[3],3),\n\t\tnew Constraint(a[2],a[4],3),\n\t\tnew Constraint(a[3],a[4],3)};\n\tdouble expected[]={3.6,0.6,3.6,6.6,9.6};\n\tunsigned int n = sizeof(a)/sizeof(Variable*);\n\tunsigned int m = sizeof(c)/sizeof(Constraint*);\n\tcheckResult(n,a,m,c,expected);\n\tcout << \"Test 9... done.\" << endl;\n}\n\nvoid test10() {\n\tcout << \"Test 10...\" << endl;\n\tVariable *a[] = {\n\t\tnew Variable(0,8.56215,1,4.99888),\nnew Variable(1,1.27641,1,8.06009),\nnew Variable(2,6.28523,1,1.06585),\nnew Variable(3,4.09743,1,0.924166),\nnew Variable(4,0.369025,1,6.12702)};\n\n\tConstraint *c[] = {\n\t\tnew Constraint(a[0],a[2],3),\nnew Constraint(a[0],a[1],3),\nnew Constraint(a[0],a[1],3),\nnew Constraint(a[1],a[3],3),\nnew Constraint(a[1],a[3],3),\nnew Constraint(a[1],a[2],3),\nnew Constraint(a[2],a[4],3),\nnew Constraint(a[2],a[4],3),\nnew Constraint(a[3],a[4],3),\nnew Constraint(a[3],a[4],3)};\n\n\t//double expected[]={-1,2,5,5,8};\n\tunsigned int n = sizeof(a)/sizeof(Variable*);\n\tunsigned int m = sizeof(c)/sizeof(Constraint*);\n        std::vector<Variable*> aa(a,a+n);\n        std::vector<Constraint*> cc(c,c+m);\n\tIncSolver vpsc(aa,cc);\n\tvpsc.solve();\n\tassert(checkResult(n,a,m,c,nullptr));\n\tcout << \"Test 10... done.\" << endl;\n}\nvoid test11() {\n\tcout << \"Test 11...\" << endl;\n\tVariable *a[] = {\n\t\tnew Variable(0,1.31591,1,9.02545),\nnew Variable(1,1.48155,1,3.68918),\nnew Variable(2,3.5091,1,2.07033),\nnew Variable(3,3.47131,1,8.75145),\nnew Variable(4,0.77374,1,0.967941)};\n\n\tConstraint *c[] = {\nnew Constraint(a[0],a[3],3),\nnew Constraint(a[0],a[1],3),\nnew Constraint(a[1],a[4],3),\nnew Constraint(a[1],a[2],3),\nnew Constraint(a[2],a[4],3),\nnew Constraint(a[2],a[4],3),\nnew Constraint(a[3],a[4],3),\nnew Constraint(a[3],a[4],3)};\n\n\t//double expected[]={-1,2,5,5,8};\n\tunsigned int n = sizeof(a)/sizeof(Variable*);\n\tunsigned int m = sizeof(c)/sizeof(Constraint*);\n\t//dumpMatlabProblem(n,a,m,c);\n        std::vector<Variable*> aa(a,a+n);\n        std::vector<Constraint*> cc(c,c+m);\n\tIncSolver vpsc(aa,cc);\n\tvpsc.solve();\n\tassert(checkResult(n,a,m,c,nullptr));\n\tcout << \"Test 11... done.\" << endl;\n}\nvoid test12() {\n\tcout << \"Test 12...\" << endl;\n\tVariable *a[] = {\nnew Variable(0,2.83063,1,6.67901),\nnew Variable(1,6.81696,1,7.28642),\nnew Variable(2,9.27616,1,0.918345),\nnew Variable(3,3.4094,1,3.39673),\nnew Variable(4,2.92492,1,2.36269)};\n\n\tConstraint *c[] = {\nnew Constraint(a[0],a[3],3),\nnew Constraint(a[0],a[2],3),\nnew Constraint(a[0],a[1],3),\nnew Constraint(a[1],a[4],3),\nnew Constraint(a[1],a[4],3),\nnew Constraint(a[1],a[4],3),\nnew Constraint(a[2],a[4],3),\nnew Constraint(a[2],a[4],3),\nnew Constraint(a[3],a[4],3),\nnew Constraint(a[3],a[4],3),\nnew Constraint(a[3],a[4],3),\nnew Constraint(a[3],a[4],3)};\n\n\t//double expected[]={-1,2,5,5,8};\n\tunsigned int n = sizeof(a)/sizeof(Variable*);\n\tunsigned int m = sizeof(c)/sizeof(Constraint*);\n\t//dumpMatlabProblem(n,a,m,c);\n\tassert(checkResult(n,a,m,c,nullptr));\n\tcout << \"Test 12... done.\" << endl;\n}\nvoid test13() {\n\tcout << \"Test 13...\" << endl;\n\tVariable *a[] = {\nnew Variable(0,0.485024,1,1),\nnew Variable(1,3.52714,1,1),\nnew Variable(2,4.01263,1,1),\nnew Variable(3,4.58524,1,1),\nnew Variable(4,5.40796,1,1)};\n\n\tConstraint *c[] = {\nnew Constraint(a[0],a[4],3),\nnew Constraint(a[0],a[4],3),\nnew Constraint(a[0],a[4],3),\nnew Constraint(a[0],a[2],3),\nnew Constraint(a[1],a[3],3),\nnew Constraint(a[1],a[3],3),\nnew Constraint(a[1],a[2],3),\nnew Constraint(a[2],a[4],3),\nnew Constraint(a[2],a[4],3),\nnew Constraint(a[2],a[4],3),\nnew Constraint(a[2],a[3],3),\nnew Constraint(a[3],a[4],3),\nnew Constraint(a[3],a[4],3),\nnew Constraint(a[3],a[4],3)};\n\n\t//double expected[]={-1,2,5,5,8};\n\tunsigned int n = sizeof(a)/sizeof(Variable*);\n\tunsigned int m = sizeof(c)/sizeof(Constraint*);\n\t//dumpMatlabProblem(n,a,m,c);\n\tassert(checkResult(n,a,m,c,nullptr));\n\tcout << \"Test 13... done.\" << endl;\n}\n\n// n=number vars\n// m=max constraints per var\nvoid rand_test(unsigned n, unsigned m) {\n\tVariable **a=new Variable*[n];\n\tCS cs;\n\tfor(unsigned i=0;i<n;i++) {\n\t\ta[i]=new Variable(i,getRand(10),1,1);//getRand(10));\n\t}\n\tfor(unsigned i=0;i<n-1;i++) {\n\t\tfor(int j=0;j<getRand(m)+1;j++) {\n\t\t\tint e = static_cast<int>(i + getRand(n-1-i)+1);\n\t\t\tcs.push_back(new Constraint(a[i],a[e],3));\n\t\t}\n\t}\n\tConstraint **acs=new Constraint*[cs.size()];\n\tfor(unsigned i=0;i<cs.size();i++) {\n\t\tacs[i]=cs[i];\n\t}\n\ttry {\n\t\tif(!checkResult(n,a,cs.size(),acs)) {\n\t\t\tthrow \"Check failed!\";\n\t\t}\n\t} catch (char const *msg) {\n\t\tcout << msg << endl;\n\t\tcout<<\"digraph g {\"<<endl;\n\t\tfor(CS::iterator i(cs.begin());i!=cs.end();i++) {\n\t\t\tConstraint *c=*i;\n\t\t\tcout << c->left->id << \"->\" << c->right->id << \";\" << endl;\n\t\t}\n\t\tcout<<\"}\"<<endl;\n\t\tfor(unsigned i=0;i<n;i++) {\n\t\t\tif(i!=0) cout << \",\" << endl;\n\t\t\tcout << \"new Variable(\"<<i<<\",\"<<a[i]->desiredPosition<< \",1,\"\n\t\t\t\t<< a[i]->scale <<\")\";\n\t\t\t//cout << \"a[i]->Pos=\"<<a[i]->position() << endl;\n\t\t}\n\t\tcout << \"};\" << endl;\n\t\tfor(CS::iterator i(cs.begin());i!=cs.end();i++) {\n\t\t\tif(i!=cs.begin()) cout << \",\" << endl;\n\t\t\tConstraint *c=*i;\n\t\t\t//cout << c->left->id << \"->\" << c->right->id << \";\" << endl;\n\t\t\tcout << \"new Constraint(a[\" <<  c->left->id << \"],a[\" <<  c->right->id << \"],3)\";\n\n\t\t}\n\t\tcout << \"};\" << endl;\n\t\tthrow \"test failed!\";\n\t}\n\t/*\n\tfor(unsigned i=0;i<n;i++) {\n\t\ta[i]->desiredPosition=getRand(10);\n\t}\n\tvpsc.solve();\n\ttry {\n\t\tif(!checkResult(n,a,m,acs)) {\n\t\t\tthrow \"2nd Check failed!\";\n\t\t}\n\t} catch (char const *msg) {\n\t\tcout << msg << endl;\n\t\tfor(unsigned i=0;i<n;i++) {\n\t\t\tif(i!=0) cout << \",\" << endl;\n\t\t\tcout << \"new Variable(\"<<i<<\",\"<<a[i]->desiredPosition<< \",1)\";\n\t\t\t//cout << \"a[i]->Pos=\"<<a[i]->position() << endl;\n\t\t}\n\t\tcout << \"};\" << endl;\n\t\tfor(CS::iterator i(cs.begin());i!=cs.end();i++) {\n\t\t\tif(i!=cs.begin()) cout << \",\" << endl;\n\t\t\tConstraint *c=*i;\n\t\t\t//cout << c->left->id << \"->\" << c->right->id << \";\" << endl;\n\t\t\tcout << \"new Constraint(a[\" <<  c->left->id << \"],a[\" <<  c->right->id << \"],3)\";\n\n\t\t}\n\t\tcout << \"};\" << endl;\n\t\tthrow \"test failed!\";\n\t}\n\t*/\n\tfor_each(a,a+n,delete_object());\n\tdelete [] a;\n\tfor_each(cs.begin(),cs.end(),delete_object());\n\tdelete [] acs;\n}\nint main() {\n\tsrand(time(nullptr));\n\ttest10();\n\ttest2();\n\ttest3();\n\ttest4();\n\ttest5();\n\ttest6();\n\ttest7();\n\ttest8();\n\ttest9();\n\ttest10();\n\ttest11();\n\ttest12();\n\ttest13();\n\tfor(int i=0;i<1000;i++) {\n\t\tif(i%100==0) cout << \"i=\" << i << endl;\n\t\trand_test(100,3);\n\t}\n\tfor(int i=0;i<10000;i++) {\n\t\tif(i%100==0) cout << \"i=\" << i << endl;\n\t\trand_test(5,3);\n\t}\n\treturn 0;\n}\n"
  },
  {
    "path": "cola/libvpsc/variable.cpp",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libvpsc - A solver for the problem of Variable Placement with \n *           Separation Constraints.\n *\n * Copyright (C) 2005-2008  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n * Author(s):  Tim Dwyer\n*/\n\n#include \"libvpsc/variable.h\"\nnamespace vpsc {\nstd::ostream& operator <<(std::ostream &os, const Variable &v) {\n    if(v.block)\n        os << \"(\" << v.id << \"=\" << v.position() << \")\";\n    else\n        os << \"(\" << v.id << \"=\" << v.desiredPosition << \")\";\n    return os;\n}\n}\n"
  },
  {
    "path": "cola/libvpsc/variable.h",
    "content": "/*\n * vim: ts=4 sw=4 et tw=0 wm=0\n *\n * libvpsc - A solver for the problem of Variable Placement with \n *           Separation Constraints.\n *\n * Copyright (C) 2005-2008  Monash University\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n * See the file LICENSE.LGPL distributed with the library.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n * Author(s):  Tim Dwyer\n*/\n\n#ifndef VPSC_VARIABLE_H\n#define VPSC_VARIABLE_H\n\n#include <vector>\n#include <iostream>\n\n#include \"libvpsc/block.h\"\n#include \"libvpsc/assertions.h\"\n\nnamespace vpsc {\n\nclass Constraint;\ntypedef std::vector<Constraint*> Constraints;\n\n/**\n * @brief A variable is comprised of an ideal position, final position and \n *        a weight.\n *\n * When creating a variable you specify an ideal value, and a weight---how \n * much the variable wants to be at its ideal position.  After solving the \n * problem you can read back the final position for the variable.\n*/\nclass Variable\n{\n\tfriend std::ostream& operator <<(std::ostream &os, const Variable &v);\n\tfriend class Block;\n\tfriend class Constraint;\n\tfriend class Solver;\npublic:\n\tint id; // useful in log files\n\tdouble desiredPosition;\n\tdouble finalPosition;\n\tdouble weight; // how much the variable wants to \n\t               // be at it's desired position\n\tdouble scale; // translates variable to another space\n\tdouble offset;\n\tBlock *block;\n\tbool visited;\n\tbool fixedDesiredPosition;\n\tConstraints in;\n\tConstraints out;\n\tchar *toString();\n\tinline Variable(const int id, const double desiredPos=-1.0, \n\t\t\tconst double weight=1.0, const double scale=1.0)\n\t\t: id(id)\n\t\t, desiredPosition(desiredPos)\n\t\t, finalPosition(desiredPos)\n\t\t, weight(weight)\n\t\t, scale(scale)\n\t\t, offset(0)\n\t\t, block(nullptr)\n\t\t, visited(false)\n\t\t, fixedDesiredPosition(false)\n\t{\n\t}\n\tdouble dfdv(void) const {\n\t\treturn 2. * weight * ( position() - desiredPosition );\n\t}\nprivate:\n    inline double position(void) const {\n                return (block->ps.scale*block->posn+offset)/scale;\n    }\n\tinline double unscaledPosition(void) const {\n\t    COLA_ASSERT(block->ps.scale == 1);\n        COLA_ASSERT(scale == 1);\n        return block->posn + offset;\n\t}\n};\n\n//! @brief A vector of pointers to Variable objects.\ntypedef std::vector<Variable*> Variables;\n\n}\n#endif // VPSC_VARIABLE_H\n"
  },
  {
    "path": "cola/swig-python-setup.py",
    "content": "#!/usr/bin/env python\n\n\"\"\"\nsetup.py file for SWIG example\n\"\"\"\n\nfrom distutils.core import setup, Extension\nfrom distutils import util\nfrom distutils import sysconfig\nimport os\n\nplatform = util.get_platform()\n\n# special settings for Linux\nif platform.startswith(\"linux\"):\n    # option '-Wstrict-prototypes' is enabled by default and gives a warning on Linux\n    if sysconfig.get_config_vars().has_key(\"OPT\"):\n        opt = sysconfig.get_config_vars().get(\"OPT\")\n        if type(opt) == str:\n            opt = opt.replace(\"-Wstrict-prototypes\", \"\")\n            (sysconfig.get_config_vars())[\"OPT\"] = opt\n\n    os.environ['CC'] = 'gcc'\n    os.environ['CXX'] = 'g++'\n\nadaptagrams_module = Extension('_adaptagrams',\n                               sources=['adaptagrams_wrap.cxx'],\n\t\t\t                   extra_compile_args=['-DUSE_ASSERT_EXCEPTIONS','-DSWIG_PYTHON_SILENT_MEMLEAK','-std=gnu++11','-stdlib=libc++'],\n                               # use this line for SWIG 2.0.12 to silence some harmless warnings \n                               #extra_compile_args=['-DUSE_ASSERT_EXCEPTIONS','-DSWIG_PYTHON_SILENT_MEMLEAK','-Wno-uninitialized'],\n\t\t\t                   include_dirs=['.'],\n\t\t\t                   extra_link_args=['libcola/.libs/libcola.a','libtopology/.libs/libtopology.a', 'libavoid/.libs/libavoid.a','libvpsc/.libs/libvpsc.a','libdialect/.libs/libdialect.a'],\n                              )\n\nsetup (name = 'adaptagrams',\n       version = '0.1',\n       author      = \"MArVL\",\n       description = \"\"\"Adaptagrams libraries\"\"\",\n       ext_modules = [adaptagrams_module],\n       py_modules = [\"adaptagrams\"],\n      )\n"
  },
  {
    "path": "cola/swig-python3-setup.py",
    "content": "#!/usr/bin/env python\n\n\"\"\"\nsetup.py file for SWIG example\n\"\"\"\n\nfrom distutils.core import setup, Extension\n# distutils are marked deprecated and will be removed from Python 3.13 and beyond\n# install setuptools\n# from setuptools import setup, Extension\n\nadaptagrams_module = Extension('_adaptagrams',\n                               sources=['adaptagrams_wrap.cxx'],\n                               # extra_compile_args=['-DUSE_ASSERT_EXCEPTIONS','-DSWIG_PYTHON_SILENT_MEMLEAK','-std=gnu++11','-stdlib=libc++'],\n                               extra_compile_args=['-DUSE_ASSERT_EXCEPTIONS','-DSWIG_PYTHON_SILENT_MEMLEAK','-std=c++11'],\n                               include_dirs=['.'],\n                               extra_link_args=['libcola/.libs/libcola.a','libtopology/.libs/libtopology.a', 'libavoid/.libs/libavoid.a','libvpsc/.libs/libvpsc.a','libdialect/.libs/libdialect.a'],\n                               # use this line on MacOS with older versions of the developer tools to avoid linker warning\n                               # '-undefined dynamic_lookup may not work with chained fixups'\n                               # see https://github.com/pybind/pybind11/pull/4301\n                               # extra_link_args=['-Wl,-no_fixup_chains','libcola/.libs/libcola.a','libtopology/.libs/libtopology.a', 'libavoid/.libs/libavoid.a','libvpsc/.libs/libvpsc.a','libdialect/.libs/libdialect.a'],\n                              )\n\nsetup (name = 'adaptagrams',\n       version = '0.1',\n       author      = \"MArVL\",\n       description = \"\"\"Adaptagrams libraries\"\"\",\n       ext_modules = [adaptagrams_module],\n       py_modules = [\"adaptagrams\"],\n      )\n"
  },
  {
    "path": "experimental/RectangleOverlapSolver/.classpath",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<classpath>\n\t<classpathentry kind=\"src\" path=\"\"/>\n\t<classpathentry kind=\"con\" path=\"org.eclipse.jdt.launching.JRE_CONTAINER\"/>\n\t<classpathentry kind=\"lib\" path=\"C:/mosek/3/tools/platform/win/bin/mosek.jar\"/>\n\t<classpathentry kind=\"lib\" path=\"C:/Program Files/eclipse/plugins/org.junit_3.8.1/junit.jar\"/>\n\t<classpathentry kind=\"output\" path=\"\"/>\n</classpath>\n"
  },
  {
    "path": "experimental/RectangleOverlapSolver/.project",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<projectDescription>\n\t<name>RectangleOverlapSolver</name>\n\t<comment></comment>\n\t<projects>\n\t</projects>\n\t<buildSpec>\n\t\t<buildCommand>\n\t\t\t<name>org.python.pydev.PyDevBuilder</name>\n\t\t\t<arguments>\n\t\t\t</arguments>\n\t\t</buildCommand>\n\t\t<buildCommand>\n\t\t\t<name>org.eclipse.jdt.core.javabuilder</name>\n\t\t\t<arguments>\n\t\t\t</arguments>\n\t\t</buildCommand>\n\t</buildSpec>\n\t<natures>\n\t\t<nature>org.eclipse.jdt.core.javanature</nature>\n\t\t<nature>org.python.pydev.pythonNature</nature>\n\t</natures>\n</projectDescription>\n"
  },
  {
    "path": "experimental/RectangleOverlapSolver/.settings/org.eclipse.jdt.core.prefs",
    "content": "#Sun Dec 04 15:14:26 EST 2005\neclipse.preferences.version=1\norg.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5\norg.eclipse.jdt.core.compiler.compliance=1.5\norg.eclipse.jdt.core.compiler.problem.assertIdentifier=error\norg.eclipse.jdt.core.compiler.problem.enumIdentifier=error\norg.eclipse.jdt.core.compiler.source=1.5\n"
  },
  {
    "path": "experimental/RectangleOverlapSolver/logging.properties",
    "content": "# invoke java with -Djava.util.logging.config.file=logging.properties\n    # Specify the handlers to create in the root logger\n    # (all loggers are children of the root logger)\n    # The following creates two handlers\n    handlers = java.util.logging.ConsoleHandler, java.util.logging.FileHandler\n    \n    # Set the default logging level for the root logger\n    #.level = ALL\n    \n    # Set the default logging level for new ConsoleHandler instances\n    java.util.logging.ConsoleHandler.level = ALL\n    \n    # Set the default logging level for new FileHandler instances\n    java.util.logging.FileHandler.level = ALL\n    \n    # Set the default formatter for new ConsoleHandler instances\n    java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter\n    \n    # Set the default logging level for the logger named com.mycompany\n    placement.level = ALL\n    \njava.util.logging.FileHandler.pattern = placement.log\njava.util.logging.FileHandler.limit = 50000\njava.util.logging.FileHandler.count = 1\njava.util.logging.FileHandler.formatter = java.util.logging.SimpleFormatter\n"
  },
  {
    "path": "experimental/RectangleOverlapSolver/manifest.mf",
    "content": "Main-Class: placement.RectangleDrawerFrame\n"
  },
  {
    "path": "experimental/RectangleOverlapSolver/placement/ActiveSetPlacement.java",
    "content": "package placement;\n\nimport java.util.HashMap;\nimport java.util.List;\nimport java.util.Observable;\nimport java.util.logging.Level;\nimport java.util.logging.Logger;\n\npublic class ActiveSetPlacement extends Observable implements Placement {\n\tstatic Logger logger = Logger.getLogger(\"placement\");\n\n\tBlocks blocks;\n\n\tboolean debugAnimation = false;\n\n\t/** list of constraints waiting to be processed (not yet assigned to blocks) */\n\tConstraints activeConstraints = new Constraints();\n\n\t/** canonical list of constraints */\n\tprivate Constraints constraints = new Constraints();\n\n\tHashMap<String, Variable> vlookup = new HashMap<String, Variable>();\n\n\tprivate DebugFrame debugFrame;\n\n\tprivate long sleepTime = 0;\n\n\tpublic boolean split = true;\n\n\tpublic Constraint addConstraint(String u, String v, double sep) {\n\t\tConstraint c = new Constraint(vlookup.get(u), vlookup.get(v), sep);\n\t\tconstraints.add(c);\n\t\treturn c;\n\t}\n\n\t/**\n\t * Gives a feasible - though not necessarily optimal - solution by\n\t * examining blocks in the partial order defined by the directed acyclic\n\t * graph of constraints. For each block (when processing left to right) we\n\t * maintain the invariant that all constraints to the left of the block\n\t * (incoming constraints) are satisfied. This is done by repeatedly merging\n\t * blocks into bigger blocks across violated constraints (most violated\n\t * first) fixing the position of variables inside blocks relative to one\n\t * another so that constraints internal to the block are satisfied.\n\t */\n\tvoid satisfyConstraints() {\n\t\tList<Variable> vs = blocks.totalOrder();\n\t\tlogger.fine(\"block order: \");\n\t\tfor (Variable v : vs) {\n\t\t\tlogger.fine(\"  \"+v);\n\t\t}\n\t\tfor (Variable v : vs) {\n\t\t\tblocks.mergeLeft(v.container, this);\n\t\t}\n\t}\n\n\tpublic ActiveSetPlacement(Variable[] vs) {\n\t\tthis.vs=vs;\n\t\tfor (Variable v : vs) {\n\t\t\tv.inConstraints = new Constraints();\n\t\t\tv.outConstraints = new Constraints();\n\t\t}\n\t\tblocks = new Blocks(vs);\n\t\tfor (Variable v : vs) {\n\t\t\tvlookup.put(v.name, v);\n\t\t}\n\t}\n\tVariable[] vs;\n\tprotected double refine() {\n\t\twhile (split) {\n\t\t\tanimate();\n\t\t\tConstraint splitConstraint = blocks.splitOnce(this);\n\t\t\tif (splitConstraint == null)\n\t\t\t\tbreak;\n\t\t\tanimate();\n\t\t\tassert constraints.violated().isEmpty() : \"Violated constraints not resolved\";\n\t\t\tactiveConstraints.add(splitConstraint);\n\t\t\tlogger.finer(\"split->\" + blocks);\n\t\t\tlogger.finer(\"Cost:\" + blocks.cost());\n\t\t}\n\n\t\tanimate();\n\t\tassert constraints.violated().isEmpty() : \"Violated constraints not resolved\";\n\t\tlogger.finer(\"Final->\" + blocks);\n\t\tlogger.fine(\"Cost:\" + blocks.cost());\n\t\treturn blocks.cost();\t\t\n\t}\n\t/**\n\t * Calculate the optimal solution. After using satisfy() to produce a\n\t * feasible solution, solve() examines each block to see if further\n\t * refinement is possible by splitting the block. This is done repeatedly\n\t * until no further improvement is possible.\n\t */\n\tpublic double solve() {\n\t\tif (debugAnimation)\n\t\t\tdebugFrame = new DebugFrame(blocks, constraints);\n\t\t// activeConstraints = blocks.getAllConstraints();\n\t\tlogger.fine(\"variables: \" + blocks.getAllVariables());\n\t\tlogger.fine(\"constraints: \" + constraints);\n\t\t\n\t\tanimate();\n\t\tsatisfyConstraints();\n\t\tif(!constraints.violated().isEmpty()) {\n\t\t\tlogger.severe(\"Violated constraints not resolved: \"+constraints.violated());\n\t\t}\n\t\tassert constraints.violated().isEmpty() : \"Violated constraints not resolved\";\n\t\tlogger.finer(\"merged->\" + blocks);\n\t\tlogger.finer(\"Cost:\" + blocks.cost());\n\t\treturn refine();\n\t}\n\n\tvoid animate() {\n\t\tif (debugAnimation) {\n\t\t\tdebugFrame.animate();\n\t\t\tsetChanged();\n\t\t\tnotifyObservers();\n\t\t\ttry {\n\t\t\t\tThread.sleep(sleepTime);\n\t\t\t} catch (InterruptedException e) {\n\t\t\t\te.printStackTrace();\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic Constraints getConstraints() {\n\t\treturn constraints;\n\t}\n\n\tpublic Variables getVariables() {\n\t\treturn blocks.getAllVariables();\n\t}\n}\n"
  },
  {
    "path": "experimental/RectangleOverlapSolver/placement/Block.java",
    "content": "/*\n * Created on 21/02/2005\n *\n * TODO To change the template for this generated file go to\n * Window - Preferences - Java - Code Style - Code Templates\n */\npackage placement;\n\nimport java.util.ArrayList;\nimport java.util.logging.Level;\nimport java.util.logging.Logger;\n\n/**\n * A block is a grouping of variables placed optimally with respect to a set of\n * active constraints\n * \n * @author dwyer\n */\n\npublic class Block {\n\tstatic Logger logger = ActiveSetPlacement.logger;\n\n\tstatic long timeCtr = 0;\n\n\tlong timeStamp = 0;\n\n\tdouble position = 0;\n\n\tdouble weight = 0;\n\n\tdouble weightedPosition;\n\n\tVariables variables = new Variables();\n\n\t/**\n\t * Priority queues for managing external constraints. Lazily instantiated as\n\t * needed by merge operations.\n\t */\n\tMaxPriorityQueue<Constraint> inConstraintsPriorityQueue = null;\n\n\tMaxPriorityQueue<Constraint> outConstraintsPriorityQueue = null;\n\n\t/**\n\t * empty block constructor used for split.\n\t */\n\tBlock() {\n\t}\n\n\t/**\n\t * Initially each variable is assigned its own block with position set to\n\t * the desired position of the variable\n\t * \n\t * @param v\n\t */\n\tBlock(Variable v) {\n\t\taddVariable(v);\n\t\tposition = v.desiredPosition;\n\t\tweightedPosition = v.weight * position;\n\t\tv.offset = 0;\n\t}\n\n\t/**\n\t * Merges b into this block across c. Can be either a right merge or a left\n\t * merge\n\t * \n\t * @param b\n\t *            block to merge into this\n\t * @param c\n\t *            constraint being merged\n\t * @param distance\n\t *            separation required to satisfy c\n\t */\n\tvoid merge(Block b, Constraint c, double distance) {\n\t\tweightedPosition += b.weightedPosition - distance * b.weight;\n\t\tweight += b.weight;\n\t\tposition = weightedPosition / weight;\n\t\tc.active = true;\n\t\tfor (Variable v : b.variables) {\n\t\t\tv.container = this;\n\t\t\tv.offset += distance;\n\t\t}\n\t\tvariables.addAll(b.variables);\n\t}\n\n\t/**\n\t * Computes lagrange multipliers across active constraints. Traverses the\n\t * active set of constraints in this block with a depth first traversal,\n\t * computing the lagrangian multipliers associated with each constraint from\n\t * the derivative of the cost function (dfdv) for each variable\n\t */\n\tConstraint findMinLM() {\n\t\tVariable f = variables.get(0);\n\t\tresetActiveLM(f, null);\n\t\tminLM = null;\n\t\tcompute_dfdv(f, null);\n\t\treturn minLM;\n\t}\n\n\tprivate Constraint minLM;\n\n\tprivate boolean canFollowLeft(Constraint c, Variable last) {\n\t\treturn c.left.container == this && c.active && last != c.left;\n\t}\n\n\tprivate boolean canFollowRight(Constraint c, Variable last) {\n\t\treturn c.right.container == this && c.active && last != c.right;\n\t}\n\n\t// resets LMs for all active constraints to 0 by\n\t// traversing active constraint tree starting from v,\n\t// not back tracking over u\n\tprivate void resetActiveLM(Variable v, Variable u) {\n\t\tfor (Constraint c : v.outConstraints) {\n\t\t\tif (canFollowRight(c, u)) {\n\t\t\t\tc.lm = 0;\n\t\t\t\tresetActiveLM(c.right, v);\n\t\t\t}\n\t\t}\n\t\tfor (Constraint c : v.inConstraints) {\n\t\t\tif (canFollowLeft(c, u)) {\n\t\t\t\tc.lm = 0;\n\t\t\t\tresetActiveLM(c.left, v);\n\t\t\t}\n\t\t}\n\t}\n\n\t// computes the derivative of v and the lagrange multipliers\n\t// of v's out constraints (as the recursive sum of those below.\n\t// Does not backtrack over u.\n\t// also records the constraint with minimum lagrange multiplier\n\t// in minLM\n\tprivate double compute_dfdv(Variable v, Variable u) {\n\t\t// how much v wants to go right (negative if v wants to go left)\n\t\tdouble dfdv = v.weight * (v.getPosition() - v.desiredPosition);\n\t\tfor (Constraint c : v.outConstraints) {\n\t\t\tif (canFollowRight(c, u)) {\n\t\t\t\t// if the following call returns a negative then it means the\n\t\t\t\t// stuff to the right of v wants to go left\n\t\t\t\tc.lm = compute_dfdv(c.right, v);\n\t\t\t\tdfdv += c.lm;\n\t\t\t\tif (minLM == null || c.lm < minLM.lm)\n\t\t\t\t\tminLM = c;\n\t\t\t}\n\t\t}\n\t\tfor (Constraint c : v.inConstraints) {\n\t\t\tif (canFollowLeft(c, u)) {\n\t\t\t\t// if the following call returns a negative then it means the\n\t\t\t\t// stuff to the left of v wants to go left\n\t\t\t\tc.lm = -compute_dfdv(c.left, v);\n\t\t\t\tdfdv -= c.lm;\n\t\t\t\tif (minLM == null || c.lm < minLM.lm)\n\t\t\t\t\tminLM = c;\n\t\t\t}\n\t\t}\n\t\treturn dfdv;\n\t}\n\n\t/**\n\t * @return ideal position of block in order to minimise distances of vars to\n\t *         their desired positions\n\t */\n\tdouble desiredPosition() {\n\t\tdouble wp = 0;\n\t\tfor (Variable v : variables) {\n\t\t\twp += (v.desiredPosition - v.offset) * v.weight;\n\t\t}\n\t\treturn wp / weight;\n\t}\n\n\t/**\n\t * if the block can be split across the constraint and two resultant blocks\n\t * moved (without violating the constraint) to better satisfy desired\n\t * positions then split will do so.\n\t * \n\t * @return list of 2 blocks (result of split) or null if such a split does\n\t *         not allow variables to move closer to desired positions\n\t */\n\tvoid split(Constraint splitConstraint, Block l, Block r) {\n\t\tsplitConstraint.active = false;\n\t\tpopulateSplitBlock(l, splitConstraint.left, splitConstraint.right);\n\t\tpopulateSplitBlock(r, splitConstraint.right, splitConstraint.left);\n\t\tif (logger.isLoggable(Level.FINER))\n\t\t\tlogger.finer(\"Splitting on: \" + this + splitConstraint);\n\t}\n\n\t// populates block b by traversing the active constraint tree adding\n\t// variables as they're visited.\n\t// Starts from variable v and does not backtrack over variable u.\n\tprivate void populateSplitBlock(Block b, Variable v, Variable u) {\n\t\tb.addVariable(v);\n\t\tfor (Constraint c : v.inConstraints) {\n\t\t\tif (canFollowLeft(c, u)) {\n\t\t\t\tpopulateSplitBlock(b, c.left, v);\n\t\t\t}\n\t\t}\n\t\tfor (Constraint c : v.outConstraints) {\n\t\t\tif (canFollowRight(c, u)) {\n\t\t\t\tpopulateSplitBlock(b, c.right, v);\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate void addVariable(Variable v) {\n\t\tvariables.add(v);\n\t\tweight += v.weight;\n\t\tweightedPosition += v.weight * (v.desiredPosition - v.offset);\n\t\tposition = weightedPosition / weight;\n\t\tv.container = this;\n\t}\n\n\tpublic void setUpInConstraints() {\n\t\tinConstraintsPriorityQueue = new MaxPairingHeap<Constraint>();\n\t\tfor (Variable v : variables) {\n\t\t\tfor (Constraint c : v.inConstraints) {\n\t\t\t\tc.timeStamp = timeCtr;\n\t\t\t\tif (c.left.container != this) {\n\t\t\t\t\tinConstraintsPriorityQueue.add(c);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic void setUpOutConstraints() {\n\t\toutConstraintsPriorityQueue = new MaxPairingHeap<Constraint>();\n\t\tfor (Variable v : variables) {\n\t\t\tfor (Constraint c : v.outConstraints) {\n\t\t\t\tif (c.right.container != this) {\n\t\t\t\t\toutConstraintsPriorityQueue.add(c);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic String toString() {\n\t\tString s = \"Block:\";\n\t\tfor (Variable v : variables) {\n\t\t\ts = s + v + \" \";\n\t\t}\n\t\treturn s;\n\t}\n\n\tpublic double cost() {\n\t\tdouble c = 0;\n\t\tfor (Variable v : variables) {\n\t\t\tdouble diff = v.getPosition() - v.desiredPosition;\n\t\t\tc += v.weight * diff * diff;\n\t\t}\n\t\treturn c;\n\t}\n\n\tConstraint findMaxInConstraint() {\n\t\tlogger.fine(\"Constraint heap: \" + inConstraintsPriorityQueue);\n\t\tConstraint v = inConstraintsPriorityQueue.findMax();\n\t\tArrayList<Constraint> outOfDate = new ArrayList<Constraint>();\n\t\twhile (v != null) {\n\t\t\tBlock lb = v.left.container;\n\t\t\tBlock rb = v.right.container;\n\t\t\tlogger.finer(\"Examining constraint v=\" + v + \"\\n  timestamps: lb=\"\n\t\t\t\t\t+ lb.timeStamp + \" rb=\" + rb.timeStamp + \" v=\"\n\t\t\t\t\t+ v.timeStamp);\n\t\t\tif (lb == rb) {\n\t\t\t\t// constraint has been merged into the same block\n\t\t\t\tinConstraintsPriorityQueue.deleteMax();\n\t\t\t\tv = inConstraintsPriorityQueue.findMax();\n\t\t\t\tlogger.finer(\"  Skipping internal!\");\n\t\t\t} else if (v.timeStamp < lb.timeStamp) {\n\t\t\t\t// block at other end of constraint has been moved since this\n\t\t\t\tinConstraintsPriorityQueue.deleteMax();\n\t\t\t\toutOfDate.add(v);\n\t\t\t\tlogger.finer(\"  Skipping out of date!\");\n\t\t\t\tv = inConstraintsPriorityQueue.findMax();\n\t\t\t} else {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tfor(Constraint c : outOfDate) {\n\t\t\tc.timeStamp = timeCtr;\n\t\t\tinConstraintsPriorityQueue.add(c);\n\t\t}\n\t\tv = inConstraintsPriorityQueue.findMax();\n\t\treturn v;\n\t}\n\n\tConstraint findMaxOutConstraint() {\n\t\tConstraint v = outConstraintsPriorityQueue.findMax();\n\t\twhile (v != null && v.left.container == v.right.container) {\n\t\t\tv = outConstraintsPriorityQueue.deleteMax();\n\t\t\tv = outConstraintsPriorityQueue.findMax();\n\t\t}\n\t\treturn v;\n\t}\n\n\tpublic void mergeInConstraints(Block b) {\n\t\t// We check the top of the heaps to remove possible internal constraints\n\t\tfindMaxInConstraint();\n\t\tb.findMaxInConstraint();\n\t\tinConstraintsPriorityQueue.merge(b.inConstraintsPriorityQueue);\n\t\tlogger.fine(\"Constraint heaps merged: \" + inConstraintsPriorityQueue);\n\t}\n\n\tpublic void mergeOutConstraints(Block b) {\n\t\t// We check the top of the heaps to remove possible internal constraints\n\t\tfindMaxOutConstraint();\n\t\tb.findMaxOutConstraint();\n\t\tinConstraintsPriorityQueue.merge(b.inConstraintsPriorityQueue);\n\t\tlogger.fine(\"Constraint heaps merged: \" + inConstraintsPriorityQueue);\n\t}\n\n}\n"
  },
  {
    "path": "experimental/RectangleOverlapSolver/placement/Blocks.java",
    "content": "/*\n * Created on 24/02/2005\n *\n * TODO To change the template for this generated file go to\n * Window - Preferences - Java - Code Style - Code Templates\n */\npackage placement;\n\nimport java.util.HashSet;\nimport java.util.LinkedList;\nimport java.util.Queue;\nimport java.util.logging.Level;\nimport java.util.logging.Logger;\n\n/**\n * A set of blocks defined over variables and operations for building and\n * manipulating those blocks\n * \n * @author dwyer\n */\nclass Blocks extends HashSet<Block> {\n\tstatic Logger logger = Logger.getLogger(\"placement\");\n\n\t/**\n\t * Examine the active constraints of each block. If a constraint is found,\n\t * across which its container block may be split such that the new blocks\n\t * can be moved without violating the constraint to better satisfy the\n\t * desired positions, then the split and moves are carried out. Returns\n\t * after the first such operation.\n\t * \n\t * @return Constraint across which split occured or null if there was no\n\t *         split.\n\t */\n\tConstraint splitOnce(ActiveSetPlacement debug) {\n\t\tfor (Block b : this) {\n\t\t\tb.inConstraintsPriorityQueue = null;\n\t\t\tb.outConstraintsPriorityQueue = null;\n\t\t}\n\t\tfor (Block b : this) {\n\t\t\tConstraint c = b.findMinLM();\n\t\t\tif (c != null && c.lm < 0) {\n\t\t\t\tint prevBlockCount = size();\n\t\t\t\tBlock l = new Block(), r = new Block();\n\t\t\t\tb.setUpInConstraints();\n\t\t\t\tb.setUpOutConstraints();\n\t\t\t\tb.split(c, l, r);\n\t\t\t\tremove(b);\n\t\t\t\tadd(l);\n\t\t\t\tadd(r);\n\t\t\t\tr.position = b.position;\n\t\t\t\tr.weightedPosition = r.position * r.weight;\n\t\t\t\tdebug.animate();\n\t\t\t\tassert (prevBlockCount == size() - 1);\n\t\t\t\tmergeLeft(l, debug);\n\t\t\t\t// r may have been merged!\n\t\t\t\tr = c.right.container;\n\t\t\t\tr.position = r.desiredPosition();\n\t\t\t\tr.weightedPosition = r.position * r.weight;\n\t\t\t\tdebug.animate();\n\t\t\t\tmergeRight(r, debug);\n\t\t\t\tr.setUpInConstraints();\n\t\t\t\tfor (Constraint s : r.inConstraintsPriorityQueue.getAll()) {\n\t\t\t\t\tassert (!s.isViolated());\n\t\t\t\t}\n\t\t\t\treturn c;\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t}\n\tsynchronized void mergeLeft(Block b, ActiveSetPlacement debug) {\n\t\tif (logger.isLoggable(Level.FINER))\n\t\t\tlogger.finer(\"arg block=\" + b);\n\t\tb.timeStamp=++Block.timeCtr;\n\t\tb.setUpInConstraints();\n\t\tConstraint c = b.findMaxInConstraint();\n\t\twhile (c != null && c.isViolated()) {\n\t\t\tif (logger.isLoggable(Level.FINER))\n\t\t\t\tlogger.finer(\"merging on constraint:\" + c);\n\n\t\t\tint prevBlockCount = size();\n\t\t\tc = b.inConstraintsPriorityQueue.deleteMax();\n\t\t\tBlock l = c.left.container;\n\t\t\tassert(l.inConstraintsPriorityQueue!=null);\n\t\t\tif(l.inConstraintsPriorityQueue==null) {\n\t\t\t\tl.setUpInConstraints();\n\t\t\t}\n\t\t\tassert (l != b);\n\t\t\tdouble distToL = c.right.offset - c.left.offset - c.separation;\n\t\t\tif (b.variables.size() < l.variables.size()) {\n\t\t\t\tdistToL = -distToL;\n\t\t\t\tBlock tmp = b;\n\t\t\t\tb = l;\n\t\t\t\tl = tmp;\n\t\t\t}\n\t\t\tb.timeCtr++;\n\t\t\tb.merge(l, c, distToL);\n\t\t\tb.mergeInConstraints(l);\n\t\t\tb.timeStamp=b.timeCtr;\n\t\t\tremove(l);\n\t\t\tdebug.animate();\n\t\t\tassert (prevBlockCount == size() + 1);\n\t\t\tc = b.findMaxInConstraint();\n\t\t}\n\t\tif (logger.isLoggable(Level.FINER))\n\t\t\tlogger.finer(\"Merged block=\" + b);\n\t}\n\n\tsynchronized void mergeRight(Block b, ActiveSetPlacement debug) {\n\t\tif (logger.isLoggable(Level.FINER))\n\t\t\tlogger.finer(\"arg block=\" + b);\n\t\tb.setUpOutConstraints();\n\t\tConstraint c = b.findMaxOutConstraint();\n\t\twhile (c != null && c.isViolated()) {\n\t\t\tif (logger.isLoggable(Level.FINER))\n\t\t\t\tlogger.finer(\"merging on constraint:\" + c);\n\t\t\tint prevBlockCount = size();\n\t\t\tc = b.outConstraintsPriorityQueue.deleteMax();\n\t\t\tBlock r = c.right.container;\n\t\t\t//r.setUpOutConstraints();\n\t\t\tdouble distToR = c.left.offset + c.separation - c.right.offset;\n\t\t\tif (b.variables.size() < r.variables.size()) {\n\t\t\t\tdistToR=-distToR;\n\t\t\t\tBlock tmp = b;\n\t\t\t\tb = r;\n\t\t\t\tr = tmp;\n\t\t\t}\n\t\t\tb.merge(r, c, distToR);\n\t\t\t//b.mergeOutConstraints(r);\n\t\t\tremove(r);\n\t\t\tdebug.animate();\n\t\t\tassert (prevBlockCount == size() + 1);\n\t\t\tb.setUpOutConstraints();\n\t\t\tc = b.findMaxOutConstraint();\n\t\t}\n\t\tif (logger.isLoggable(Level.FINER))\n\t\t\tlogger.finer(\"Merged block=\" + b);\n\t}\n\n\tBlocks(Variable[] vars) {\n\t\tBlock.timeCtr=0;\n\t\tfor (Variable v : vars) {\n\t\t\tadd(new Block(v));\n\t\t}\n\t}\n\n\tdouble cost() {\n\t\tdouble c = 0;\n\t\tfor (Block b : this) {\n\t\t\tc += b.cost();\n\t\t}\n\t\treturn c;\n\t}\n\n\tVariables getAllVariables() {\n\t\tVariables vs = new Variables();\n\t\tfor (Block b : this) {\n\t\t\tvs.addAll(b.variables);\n\t\t}\n\t\treturn vs;\n\t}\n\n\tpublic String toString() {\n\t\tString s = \"\";\n\t\tfor (Block b : this) {\n\t\t\ts += b + \",\";\n\t\t}\n\t\treturn s + \"Size=\" + size();\n\t}\n\n\t/**\n\t * DFS search of variables in the constraint DAG. From each variable\n\t * constraints are processed from largest separation to smallest, and the\n\t * constraint traversed if the current end depth is less than the depth\n\t * computed from this DFS.\n\t * \n\t * @param v\n\t *            current dfs node\n\t */\n\tprivate void dfsVisit(Variable v, LinkedList<Variable> order) {\n\t\tv.visited = true;\n\t\t// Assumes no merging has yet been done.\n\t\tassert v.container.variables.size() == 1;\n\t\tfor (Constraint c : v.outConstraints) {\n\t\t\tassert c.left == v;\n\t\t\tif (!c.right.visited) {\n\t\t\t\tdfsVisit(c.right, order);\n\t\t\t}\n\t\t}\n\t\torder.addFirst(v);\n\t}\n\n\tpublic LinkedList<Variable> totalOrder() {\n\t\treturn totalOrderDFS();\n\t}\n\t/**\n\t * Computes a total ordering of constraints by depth-first search of the\n\t * directed acyclic graph where nodes are variables and constraints b>=a+1\n\t * are edges directed from a to b. Assumes no merging has yet been done.\n\t */\n\tprivate LinkedList<Variable> totalOrderDFS() {\n\t\tVariables vars = getAllVariables();\n\t\tLinkedList<Variable> order = new LinkedList<Variable>();\n\t\tfor (Variable v : vars) {\n\t\t\tv.visited = false;\n\t\t}\n\t\tfor (Variable v : vars.getSources()) {\n\t\t\tdfsVisit(v, order);\n\t\t}\n\t\treturn order;\n\t}\t\n\t/**\n\t * Computes a total ordering of constraints by breadth-first search of the\n\t * directed acyclic graph where nodes are variables and constraints b>=a+g\n\t * are edges directed from a to b. Assumes no merging has yet been done.\n\t */\t\n\tprivate LinkedList<Variable> totalOrderBFS() {\n\t\tVariables vars = getAllVariables();\n\t\tLinkedList<Variable> order = new LinkedList<Variable>();\n\t\tQueue<Variable> q=new LinkedList<Variable>();\n\t\tfor (Variable v : vars) {\n\t\t\tv.visited = false;\n\t\t\tif(v.inConstraints.isEmpty()) {\n\t\t\t\tq.add(v);\n\t\t\t\tv.visited = true;\n\t\t\t}\n\t\t}\n\t\twhile(!q.isEmpty()) {\n\t\t\tVariable u = q.poll();\n\t\t\tfor(Constraint c:u.outConstraints) {\n\t\t\t\tVariable v = c.right;\n\t\t\t\tif(!v.visited) {\n\t\t\t\t\tv.visited=true;\n\t\t\t\t\tq.add(v);\n\t\t\t\t}\n\t\t\t}\n\t\t\torder.add(u);\n\t\t}\n\t\treturn order;\n\t}\n}\n"
  },
  {
    "path": "experimental/RectangleOverlapSolver/placement/Constraint.java",
    "content": "/*\n * Created on 21/02/2005\n *\n * TODO To change the template for this generated file go to\n * Window - Preferences - Java - Code Style - Code Templates\n */\npackage placement;\n\nimport java.awt.Color;\nimport java.text.DecimalFormat;\nimport java.util.ArrayList;\nimport java.util.Arrays;\nimport java.util.Collection;\nimport java.util.Comparator;\nimport java.util.LinkedList;\nimport java.util.Queue;\n\n/**\n * @author dwyer_2 TODO To change the template for this generated type comment\n *         go to Window - Preferences - Java - Code Style - Code Templates\n */\npublic class Constraint implements Comparable<Constraint> {\n\tlong timeStamp=0;\n\tVariable left;\n\n\tVariable right;\n\n\tdouble separation;\n\n\tboolean active = false;\n\n\tpublic Color colour = Color.WHITE;\n\n\tpublic double lm;\n\n\tConstraint(Variable left, Variable right, double separation) {\n\t\tthis.left = left;\n\t\tthis.right = right;\n\t\tthis.separation = separation;\n\t\tleft.addOutConstraint(this);\n\t\tright.addInConstraint(this);\n\t}\n\n\tboolean isViolated() {\n\t\tif (violatedAmount() > 0.00001) {\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\n\tdouble violatedAmount() {\n\t\treturn -slack();\n\t}\n\n\tdouble slack() {\n\t\treturn right.getPosition() - (left.getPosition() + separation);\n\t}\n\n\tpublic String toString() {\n\t\tDecimalFormat nf = new DecimalFormat(\"#.##\");\n\t\treturn left + \"+\" + nf.format(separation) + \"<=\" + right + \"(\" + nf.format(slack())\n\t\t\t\t+ \")\";\n\t}\n\n\t/**\n\t * @param v\n\t * @return neighbour of v in this constraint\n\t */\n\tpublic Variable neighbour(Variable v) {\n\t\tassert v == left || v == right;\n\t\tif (v == left)\n\t\t\treturn right;\n\t\treturn left;\n\t}\n\n\t/**\n\t * @param c\n\t *            another constraint\n\t * @return true if c is between the same blocks as this\n\t */\n\tpublic boolean sameContainers(Constraint c) {\n\t\tif (c.left.container == left.container\n\t\t\t\t&& c.right.container == right.container\n\t\t\t\t|| c.left.container == right.container\n\t\t\t\t&& c.right.container == left.container) {\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\n\t/**\n\t * remove all traces of c\n\t */\n\tpublic void delete() {\n\t\tleft.outConstraints.remove(this);\n\t\tright.inConstraints.remove(this);\n\t}\n\n\tpublic boolean isTight() {\n\t\tif (Math.abs(violatedAmount()) < 0.0001) {\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\n\t/**\n\t * If the constraint of the argument is more violated than this then it is\n\t * considered greater (and we return 1). NOTE: constraints within the same\n\t * block are treated as having infinite violated amount. This is a hack so\n\t * that the pairing heaps used to manage in and out constraints are not\n\t * messed up when they contain internal constraints (which do not move\n\t * relative to the block)\n\t * \n\t * @param c\n\t *            Constraint to compare against\n\t * @return 1 if c more violated than this, 0 if equal, -1 if less than\n\t */\n\tpublic int compareTo(Constraint c) {\n\t\tdouble va = violatedAmount();\n\t\tdouble cva = c.violatedAmount();\n\t\tif (left.container == right.container) {\n\t\t\tva = Double.MAX_VALUE;\n\t\t}\n\t\tif (c.left.container == c.right.container) {\n\t\t\tcva = Double.MAX_VALUE;\n\t\t}\n\t\tdouble d = cva - va;\n\t\tif (d < 0) {\n\t\t\treturn 1;\n\t\t} else if (d > 0) {\n\t\t\treturn -1;\n\t\t} else {\n\t\t\treturn c.toString().compareTo(toString());\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "experimental/RectangleOverlapSolver/placement/ConstraintGenerator.java",
    "content": "package placement;\n\nimport java.util.ArrayList;\nimport java.util.Arrays;\nimport java.util.Comparator;\nimport java.util.Iterator;\nimport java.util.TreeSet;\n\npublic class ConstraintGenerator {\n\n\tprivate Chunk[] chunks;\n\tprivate boolean completeConstraints;\n\tpublic boolean neighbourLists = true;\n\tprivate boolean orthogonalOrdering;\n\tprivate Constraints constraints;\n\tboolean allOverlaps;\n\n\tvoid initVarsAndConstraints(Chunk[] chunks, boolean allOverlaps) {\n\t\tthis.chunks=chunks;\n\t\tthis.allOverlaps=allOverlaps;\n\t\tconstraints=new Constraints();\n\t\tif (completeConstraints) {\n\t\t\tinitVarsAndConstraintsComplete();\n\t\t} else {\n\t\t\tif (neighbourLists) {\n\t\t\t\tinitVarsAndConstraintsMinimal();\n\t\t\t} else {\n\t\t\t\tinitVarsAndConstraintsMinimalOld();\n\t\n\t\t\t}\n\t\t\tif (orthogonalOrdering) {\n\t\t\t\taddOrthogonalOrderingConstraints();\n\t\t\t}\n\t\t}\n\t}\n\n\t// n^2 time and potentially n^2 constraints\n\tvoid initVarsAndConstraintsComplete() {\n\t\tArrays.sort(chunks, Chunk.comparator);\n\t\tfor (int i = 0; i < chunks.length; i++) {\n\t\t\tChunk r = chunks[i];\n\t\t\tString id = null;\n\t\t\tif(r.id!=null) {\n\t\t\t\tid=r.id;\n\t\t\t} else {\n\t\t\t\tid=\"r\" + i;\n\t\t\t}\n\t\t\tr.v = new Variable(id, r.getCentre(), 1.0);\n\t\t\tr.v.data.put(Chunk.class, r);\n\t\t\tr.v.data.put(RectangleView.class, r);\n\t\t}\n\t\tconstraints = new Constraints();\n\t\tfor (int i = 0; i < chunks.length - 1; i++) {\n\t\t\tChunk l = chunks[i];\n\t\t\tfor (int j = i + 1; j < chunks.length; j++) {\n\t\t\t\tChunk r = chunks[j];\n\t\t\t\tif (needConstraint(l, r, allOverlaps)) {\n\t\t\t\t\tVariable vl = l.v;\n\t\t\t\t\tVariable vr = r.v;\n\t\t\t\t\tdouble cLength = (l.getLength()+r.getLength())/2.0;\n\t\t\t\t\tconstraints.add(new Constraint(vl, vr, cLength));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tArrayList<Chunk> getLeftNeighbours(TreeSet<Chunk> scanLine, Chunk v) {\n\t\tArrayList<Chunk> lhs = new ArrayList<Chunk>((TreeSet<Chunk>) scanLine\n\t\t\t\t.headSet(v));\n\t\tArrayList<Chunk> leftv = new ArrayList<Chunk>();\n\t\tfor (int i = lhs.size() - 1; i >= 0; i--) {\n\t\t\tChunk u = lhs.get(i);\n\t\t\tif (u.overlap(v) <= 0) {\n\t\t\t\tleftv.add(u);\n\t\t\t\treturn leftv;\n\t\t\t}\n\t\t\tif (allOverlaps || u.overlap(v) <= u.conjugateOverlap(v)) {\n\t\t\t\tleftv.add(u);\n\t\t\t}\n\t\t}\n\t\treturn leftv;\n\t}\n\n\tArrayList<Chunk> getRightNeighbours(TreeSet<Chunk> scanLine, Chunk v) {\n\t\tArrayList<Chunk> rhs = new ArrayList<Chunk>((TreeSet<Chunk>) scanLine\n\t\t\t\t.tailSet(v));\n\t\tArrayList<Chunk> rightv = new ArrayList<Chunk>();\n\t\tfor (int i = 1; i < rhs.size(); i++) {\n\t\t\tChunk u = rhs.get(i);\n\t\t\tif (u.overlap(v) <= 0) {\n\t\t\t\trightv.add(u);\n\t\t\t\treturn rightv;\n\t\t\t}\n\t\t\tif (allOverlaps || u.overlap(v) <= u.conjugateOverlap(v)) {\n\t\t\t\trightv.add(u);\n\t\t\t}\n\t\t}\n\t\treturn rightv;\n\t}\n\n\tvoid initVarsAndConstraintsMinimal() {\n\t\t// sort lexically, just makes variable naming easier to follow\n\t\tArrays.sort(chunks, Chunk.conjComparator);\n\t\tChunkEdge[] edges = new ChunkEdge[chunks.length * 2];\n\t\tfor (int i = 0; i < chunks.length; i++) {\n\t\t\tChunk c = chunks[i];\n\n\t\t\tString id = null;\n\t\t\tif(c.id!=null) {\n\t\t\t\tid=c.id;\n\t\t\t} else {\n\t\t\t\tid=\"r\" + i;\n\t\t\t}\n\t\t\tc.v = new Variable(id, c.getCentre(), 1.0);\n\t\t\tc.v.data.put(Chunk.class, c);\n\t\t\tc.v.data.put(RectangleView.class, c.rect);\n\t\t\tChunk conj = c.conj;\n\t\t\tedges[i * 2] = new ChunkEdge(c, true, conj.getMin());\n\t\t\tedges[i * 2 + 1] = new ChunkEdge(c, false, conj.getMax());\n\t\t}\n\t\tArrays.sort(edges);\n\t\tconstraints = new Constraints();\n\t\tTreeSet<Chunk> open = new TreeSet<Chunk>(Chunk.comparator);\n\t\tfor (ChunkEdge e : edges) {\n\t\t\tChunk v = e.chunk;\n\t\t\tif (e.isStart) {\n\t\t\t\topen.add(v);\n\t\t\t\tv.setNeighbours(getLeftNeighbours(open, v), getRightNeighbours(\n\t\t\t\t\t\topen, v));\n\t\t\t} else {\n\t\t\t\tfor (Iterator<Chunk> i = v.leftNeighbours.iterator(); i\n\t\t\t\t\t\t.hasNext();) {\n\t\t\t\t\tChunk u = i.next();\n\t\t\t\t\tdouble cLength = (u.getLength()+v.getLength())/2.0;\n\t\t\t\t\tconstraints.add(new Constraint(u.v, v.v, cLength));\n\t\t\t\t\tu.rightNeighbours.remove(v);\n\t\t\t\t}\n\t\t\t\tfor (Iterator<Chunk> i = v.rightNeighbours.iterator(); i\n\t\t\t\t\t\t.hasNext();) {\n\t\t\t\t\tChunk u = i.next();\n\t\t\t\t\tdouble cLength = (u.getLength()+v.getLength())/2.0;\n\t\t\t\t\tconstraints.add(new Constraint(v.v, u.v, cLength));\n\t\t\t\t\tu.leftNeighbours.remove(v);\n\t\t\t\t}\n\t\t\t\topen.remove(v);\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Generate minimal set of separation constraints between blocks. Sweeps\n\t * through the conjugate dimension (eg, y if we're processing x separation\n\t * constraints) maintaining a set of open blocks sorted by x placement. For\n\t * each opening edge of a block x, we determine x's neighbours (l and r) and\n\t * if necessary, set x,l and r's neighbour pointers. When we process a\n\t * closing edge of a block x, we create 0,1 or 2 constraints between x and\n\t * it's neighbours, resetting the neighbours' neighbour pointers. Generates\n\t * up to 2n constraints, O(n log n) time.\n\t */\n\tvoid initVarsAndConstraintsMinimalOld() {\n\t\t// sort lexically, just makes variable naming easier to follow\n\t\tArrays.sort(chunks, Chunk.conjComparator);\n\t\tChunkEdge[] edges = new ChunkEdge[chunks.length * 2];\n\t\tfor (int i = 0; i < chunks.length; i++) {\n\t\t\tChunk c = chunks[i];\n\t\t\tString id = null;\n\t\t\tif(c.id!=null) {\n\t\t\t\tid=c.id;\n\t\t\t} else {\n\t\t\t\tid=\"r\" + i;\n\t\t\t}\n\t\t\tc.v = new Variable(id, c.getCentre(), 1.0);\n\t\t\tc.v.data.put(Chunk.class, c);\n\t\t\tc.v.data.put(RectangleView.class, c.rect);\n\t\t\tChunk conj = c.conj;\n\t\t\tedges[i * 2] = new ChunkEdge(c, true, conj.getMin());\n\t\t\tedges[i * 2 + 1] = new ChunkEdge(c, false, conj.getMax());\n\t\t}\n\t\tArrays.sort(edges);\n\t\tconstraints = new Constraints();\n\t\tTreeSet<Chunk> head, tail, open = new TreeSet<Chunk>(Chunk.comparator);\n\t\tfor (ChunkEdge e : edges) {\n\t\t\tChunk l, r, x = e.chunk;\n\t\t\tif (e.isStart) {\n\t\t\t\topen.add(x);\n\t\t\t\thead = (TreeSet<Chunk>) open.headSet(x);\n\t\t\t\tif (!head.isEmpty()) {\n\t\t\t\t\tl = head.last();\n\t\t\t\t\tif (needConstraint(l, x, allOverlaps)) {\n\t\t\t\t\t\tl.rightNeighbour = x;\n\t\t\t\t\t\tx.leftNeighbour = l;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttail = (TreeSet<Chunk>) open.tailSet(x);\n\t\t\t\tif (tail.size() > 1) { // tail starts with x, need second\n\t\t\t\t\t// element\n\t\t\t\t\tIterator<Chunk> i = tail.iterator();\n\t\t\t\t\ti.next();\n\t\t\t\t\tr = i.next();\n\t\t\t\t\tif (needConstraint(x, r, allOverlaps)) {\n\t\t\t\t\t\tr.leftNeighbour = x;\n\t\t\t\t\t\tx.rightNeighbour = r;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\topen.remove(x);\n\t\t\t\tif ((l = x.leftNeighbour) != null) {\n\t\t\t\t\tdouble cLength = (l.getLength()+x.getLength())/2.0;\n\t\t\t\t\tconstraints.add(new Constraint(l.v, x.v, cLength));\n\t\t\t\t\tl.rightNeighbour = null;\n\t\t\t\t}\n\t\t\t\tif ((r = x.rightNeighbour) != null) {\n\t\t\t\t\tdouble cLength = (r.getLength()+x.getLength())/2.0;\n\t\t\t\t\tconstraints.add(new Constraint(x.v, r.v, cLength));\n\t\t\t\t\tr.leftNeighbour = null;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Adds a zero-length constraint between each pair of adjacent chunks (after\n\t * sorting on position).\n\t * \n\t * @param chunks\n\t */\n\tvoid addOrthogonalOrderingConstraints() {\n\t\tArrays.sort(chunks, Chunk.comparator);\n\t\tfor (int i = 1; i < chunks.length; i++) {\n\t\t\tChunk l = chunks[i - 1];\n\t\t\tChunk r = chunks[i];\n\t\t\tconstraints.add(new Constraint(l.v, r.v, 0));\n\t\t}\n\t}\n\n\t/**\n\t * test if there needs to be a constraint between l and r if: - we are\n\t * removing all overlaps and there is overlap in the conjugate axis - there\n\t * is overlap in the conjugate axis but not in this axis - there is overlap\n\t * in this axis and that overlap is less than that in the conjugate\n\t * \n\t * @param l\n\t *            leftChunk\n\t * @param r\n\t *            rightChunk\n\t * @param all\n\t *            true if we need to remove all overlaps\n\t */\n\tboolean needConstraint(Chunk l, Chunk r, boolean all) {\n\t\tboolean overlap = l.overlap(r) > 0;\n\t\tboolean conjOverlap = l.conjugateOverlap(r) > 0;\n\t\tboolean conjOverlapGreaterThanThis = l.overlap(r) > 0\n\t\t\t\t&& l.overlap(r) < l.conjugateOverlap(r);\n\t\tif (all && conjOverlap)\n\t\t\treturn true;\n\t\tif (conjOverlap && !overlap)\n\t\t\treturn true;\n\t\tif (overlap && conjOverlapGreaterThanThis)\n\t\t\treturn true;\n\t\treturn false;\n\t}\n\n\tpublic ConstraintGenerator(boolean completeConstraints, boolean neighbourLists, boolean orthogonalOrdering) {\n\t\tthis.completeConstraints = completeConstraints;\n\t\tthis.neighbourLists = neighbourLists;\n\t\tthis.orthogonalOrdering = orthogonalOrdering;\n\t}\n\n\tpublic Constraints getConstraints() {\n\t\treturn constraints;\n\t}\n\n\tpublic Chunk[] getChunks() {\n\t\treturn chunks;\n\t}\n\n}\n\nabstract class Chunk<T extends Chunk> {\n\tT conj;\n\n\tRectangleView rect;\n\n\tVariable v;\n\tString id;\n\n\tChunk leftNeighbour;\n\n\tChunk rightNeighbour;\n\n\tArrayList<Chunk> leftNeighbours = new ArrayList<Chunk>();\n\n\tArrayList<Chunk> rightNeighbours = new ArrayList<Chunk>();\n\n\tabstract double getMax();\n\n\tabstract double getMin();\n\n\tabstract void setMin(double d);\n\tvoid setCentre(double d) {\n\t\tsetMin(d-getLength()/2.0);\n\t}\n\tdouble getCentre() {\n\t\treturn getMin() + getLength()/2.0;\n\t}\n\tabstract double getLength();\n\n\tChunk(RectangleView r) {\n\t\tthis.rect = r;\n\t}\n\n\tChunk(RectangleView r, T conjugate) {\n\t\tthis(r);\n\t\tthis.conj = conjugate;\n\t}\n\n\tvoid addLeftNeighbour(Chunk n) {\n\t\tif (!leftNeighbours.contains(n)) {\n\t\t\tleftNeighbours.add(n);\n\t\t}\n\t}\n\n\tvoid addRightNeighbour(Chunk n) {\n\t\tif (!rightNeighbours.contains(n)) {\n\t\t\trightNeighbours.add(n);\n\t\t}\n\t}\n\n\tvoid setNeighbours(ArrayList<Chunk> leftv, ArrayList<Chunk> rightv) {\n\t\tleftNeighbours = leftv;\n\t\tfor (Chunk u : leftv) {\n\t\t\tu.addRightNeighbour(this);\n\t\t}\n\t\trightNeighbours = rightv;\n\t\tfor (Chunk u : rightv) {\n\t\t\tu.addLeftNeighbour(this);\n\t\t}\n\t}\n\n\tdouble overlap(Chunk b) {\n\t\tassert (b.getClass() == this.getClass());\n\t\tif (getCentre() <= b.getCentre() && b.getMin() < getMax())\n\t\t\treturn getMax() - b.getMin();\n\t\tif (b.getCentre() <= getCentre() && getMin() < b.getMax())\n\t\t\treturn b.getMax() - getMin();\n\t\treturn 0;\n\t}\n\n\tdouble conjugateOverlap(Chunk c) {\n\t\tT a = conj;\n\t\tT b = (T) c.conj;\n\t\tassert (c.getClass() == this.getClass());\n\t\tif (a.getCentre() <= b.getCentre() && b.getMin() < a.getMax())\n\t\t\treturn a.getMax() - b.getMin();\n\t\tif (b.getCentre() <= a.getCentre() && a.getMin() < b.getMax())\n\t\t\treturn b.getMax() - a.getMin();\n\t\treturn 0;\n\t}\n\n\tstatic Comparator<Chunk> comparator = new Comparator<Chunk>() {\n\t\tpublic int compare(Chunk a, Chunk b) {\n\t\t\tif (a.getCentre() > b.getCentre())\n\t\t\t\treturn 1;\n\t\t\tif (a.getCentre() < b.getCentre())\n\t\t\t\treturn -1;\n\t\t\tChunk ac = a.conj;\n\t\t\tChunk bc = b.conj;\n\t\t\tif (ac.getCentre() > bc.getCentre())\n\t\t\t\treturn 1;\n\t\t\tif (ac.getCentre() < bc.getCentre())\n\t\t\t\treturn -1;\n\t\t\tif (a == b && ac == bc)\n\t\t\t\treturn 0;\n\t\t\t// Having identical coords, due to int rounding or something, is not\n\t\t\t// good!\n\t\t\ta.setMin(a.getMin() + 0.000001);\n\t\t\tac.setMin(ac.getMin() + 0.000001);\n\t\t\treturn 1;\n\t\t}\n\t};\n\n\tstatic Comparator<Chunk> conjComparator = new Comparator<Chunk>() {\n\t\tpublic int compare(Chunk a, Chunk b) {\n\t\t\tChunk ac = a.conj;\n\t\t\tChunk bc = b.conj;\n\t\t\tif (ac.getCentre() > bc.getCentre())\n\t\t\t\treturn 1;\n\t\t\tif (ac.getCentre() < bc.getCentre())\n\t\t\t\treturn -1;\n\t\t\tif (a.getCentre() > b.getCentre())\n\t\t\t\treturn 1;\n\t\t\tif (a.getCentre() < b.getCentre())\n\t\t\t\treturn -1;\n\t\t\tif (a == b && ac == bc)\n\t\t\t\treturn 0;\n\t\t\t// Having identical coords, due to int rounding or something, is not\n\t\t\t// good!\n\t\t\ta.setMin(a.getMin() + 0.000001);\n\t\t\tac.setMin(ac.getMin() + 0.000001);\n\t\t\treturn 1;\n\t\t}\n\t};\n\n\tpublic String toString() {\n\t\treturn v.toString();\n\t}\n}\n\nclass YChunk extends Chunk<XChunk> {\n\tstatic double g = 0;\n\n\tYChunk(RectangleView r, XChunk conjugate) {\n\t\tsuper(r, conjugate);\n\t}\n\n\tYChunk(RectangleView r) {\n\t\tsuper(r);\n\t}\n\n\tpublic double getMax() {\n\t\treturn rect.getMaxY() + g;\n\t}\n\n\tpublic double getMin() {\n\t\treturn rect.y;\n\t}\n\n\tpublic double getLength() {\n\t\treturn rect.height + g;\n\t}\n\n\tvoid setMin(double min) {\n\t\trect.moveTo(rect.x, min);\n\t}\n}\n\nclass XChunk extends Chunk<YChunk> {\n\tstatic double g = 0;\n\n\tXChunk(RectangleView r, YChunk conjugate) {\n\t\tsuper(r, conjugate);\n\t}\n\n\tXChunk(RectangleView r) {\n\t\tsuper(r);\n\t}\n\n\tpublic double getMax() {\n\t\treturn rect.getMaxX() + g;\n\t}\n\n\tpublic double getMin() {\n\t\treturn rect.x;\n\t}\n\n\tpublic double getLength() {\n\t\treturn rect.width + g;\n\t}\n\n\tvoid setMin(double min) {\n\t\trect.moveTo(min,rect.y);\n\t}\n\n}\n\nclass ChunkEdge implements Comparable<ChunkEdge> {\n\tChunk chunk;\n\n\tboolean isStart;\n\n\tdouble position;\n\n\tChunkEdge(Chunk c, boolean s, double p) {\n\t\tchunk = c;\n\t\tisStart = s;\n\t\tposition = p;\n\t}\n\n\tpublic int compareTo(ChunkEdge arg) {\n\t\tif (this.position > arg.position)\n\t\t\treturn 1;\n\t\tif (this.position < arg.position)\n\t\t\treturn -1;\n\t\treturn 0;\n\t}\n}\n"
  },
  {
    "path": "experimental/RectangleOverlapSolver/placement/Constraints.java",
    "content": "/*\n * Created on 24/02/2005\n *\n * TODO To change the template for this generated file go to\n * Window - Preferences - Java - Code Style - Code Templates\n */\npackage placement;\n\nimport java.util.ArrayList;\nimport java.util.Arrays;\nimport java.util.Collections;\nimport java.util.Comparator;\nimport java.util.LinkedList;\nimport java.util.Queue;\n\n/**\n * @author dwyer_2 TODO To change the template for this generated type comment\n *         go to Window - Preferences - Java - Code Style - Code Templates\n */\nclass Constraints extends ArrayList<Constraint> {\n\tpublic Constraints(Constraints inConstraints) {\n\t\tsuper(inConstraints);\n\t}\n\tpublic Constraints() {\n\t\tsuper();\n\t}\n\n\tConstraints getActive(Variable a, Variable b) {\n\t\tConstraints active = new Constraints();\n\t\tfor (Constraint c : this) {\n\t\t\tif (c.left == a && c.right == b || c.left == b && c.right == a) {\n\t\t\t\tactive.add(c);\n\t\t\t}\n\t\t}\n\t\treturn active;\n\t}\n\n\t/**\n\t * Currently O(|Constraints|).\n\t * @return list of constraints between the same container blocks, at least\n\t *         the first of which is violated\n\t */\n\tConstraints removeViolated() {\n\t\tConstraints vs = violated();\n\t\tConstraint v=null;\n\t\tif(!vs.isEmpty()) {\n\t\t\tv=vs.get(vs.size()-1);\n\t\t}\n\t\t// find all other constraints between same pair of blocks\n\t\tvs = new Constraints();\n\t\tif (v != null) {\n\t\t\tfor (Constraint c : this) {\n\t\t\t\tif (c.sameContainers(v)) {\n\t\t\t\t\tvs.add(c);\n\t\t\t\t}\n\t\t\t}\n\t\t\tremoveAll(vs);\n\t\t}\n\t\treturn vs;\n\t}\n\n\tConstraints getActive(Block a, Block b) {\n\t\tConstraints active = new Constraints();\n\t\tfor (Variable va : a.variables) {\n\t\t\tfor (Variable vb : b.variables) {\n\t\t\t\tactive.addAll(getActive(a, b));\n\t\t\t}\n\t\t}\n\t\treturn active;\n\t}\n\n\tConstraint max() {\n\t\tdouble m = 0;\n\t\tConstraint mc = null;\n\t\tfor (Constraint c : this) {\n\t\t\tdouble d = c.violatedAmount();\n\t\t\tif (d > m) {\n\t\t\t\tm = d;\n\t\t\t\tmc = c;\n\t\t\t}\n\t\t}\n\t\treturn mc;\n\t}\n\n\tConstraints violated() {\n\t\tConstraints vs = new Constraints();\n\t\tfor (Constraint c : this) {\n\t\t\tif (c.violatedAmount()>0.00001) {\n\t\t\t\tvs.add(c);\n\t\t\t}\n\t\t}\n\t\tCollections.sort(vs);\n\t\treturn vs;\n\t}\n\n\t/**\n\t * @return subset of constraints which are active\n\t */\n\tpublic Constraints getActive() {\n\t\tConstraints active = new Constraints();\n\t\tfor (Constraint c : this) {\n\t\t\tif (c.active)\n\t\t\t\tactive.add(c);\n\t\t}\n\t\treturn active;\n\t}\t\n\n};"
  },
  {
    "path": "experimental/RectangleOverlapSolver/placement/DebugFrame.java",
    "content": "package placement;\n\nimport javax.swing.JFrame;\n\npublic class DebugFrame extends JFrame {\n\tprivate Constraints constraints;\n\n\tprivate Blocks blocks;\n\n\tprivate DebugPanel panel;\n\n\tDebugFrame(Blocks blocks, Constraints constraints) {\n\t\tsuper();\n\t\tthis.blocks = blocks;\n\t\tthis.constraints = constraints;\n\t\tif (blocks.isEmpty()) {\n\t\t\tthis.dispose();\n\t\t\treturn;\n\t\t}\n\t\tpanel = new DebugPanel(blocks, constraints);\n\t\tpanel.setSize(324, 700);\n\t\tsetSize(324, 700);\n\t\tsetLocation(700, 0);\n\t\tadd(panel);\n\t\tsetVisible(true);\n\t}\n\n\tvoid animate() {\n\t\tif (panel != null) {\n\t\t\tpanel.updateDrawing();\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "experimental/RectangleOverlapSolver/placement/DebugPanel.java",
    "content": "package placement;\n\nimport java.awt.Color;\nimport java.awt.Dimension;\nimport java.awt.Graphics;\nimport java.awt.Graphics2D;\nimport java.awt.GraphicsConfiguration;\nimport java.awt.Point;\nimport java.awt.Rectangle;\nimport java.awt.RenderingHints;\nimport java.awt.geom.GeneralPath;\nimport java.awt.geom.Rectangle2D;\nimport java.awt.image.VolatileImage;\nimport java.util.Hashtable;\n\nimport javax.swing.JPanel;\n\npublic class DebugPanel extends JPanel {\n\tprivate Constraints constraints;\n\n\tpublic enum Direction {\n\t\tHorizontal, Vertical\n\t};\n\n\tpublic static Direction direction = Direction.Horizontal;\n\n\tprivate Blocks blocks;\n\n\tpublic DebugPanel(Blocks blocks, Constraints constraints) {\n\t\tsuper(true);\n\t\tthis.blocks = blocks;\n\t\tthis.constraints = constraints;\n\t}\n\n\tprivate VolatileImage volatileImg;\n\n\tpublic void paintComponent(Graphics g) {\n\t\t// create the hardware accelerated image.\n\t\tcreateBackBuffer();\n\n\t\t// Main rendering loop. Volatile images may lose their contents.\n\t\t// This loop will continually render to (and produce if neccessary)\n\t\t// volatile images\n\t\t// until the rendering was completed successfully.\n\t\tdo {\n\n\t\t\t// Validate the volatile image for the graphics configuration of\n\t\t\t// this\n\t\t\t// component. If the volatile image doesn't apply for this graphics\n\t\t\t// configuration\n\t\t\t// (in other words, the hardware acceleration doesn't apply for the\n\t\t\t// new device)\n\t\t\t// then we need to re-create it.\n\t\t\tGraphicsConfiguration gc = this.getGraphicsConfiguration();\n\t\t\tint valCode = volatileImg.validate(gc);\n\n\t\t\t// This means the device doesn't match up to this hardware\n\t\t\t// accelerated image.\n\t\t\tif (valCode == VolatileImage.IMAGE_INCOMPATIBLE) {\n\t\t\t\tcreateBackBuffer(); // recreate the hardware accelerated image.\n\t\t\t}\n\n\t\t\tGraphics offscreenGraphics = volatileImg.getGraphics();\n\t\t\trender(offscreenGraphics); // call core paint method.\n\n\t\t\t// paint back buffer to main graphics\n\t\t\tg.drawImage(volatileImg, 0, 0, this);\n\t\t\t// Test if content is lost\n\t\t} while (volatileImg.contentsLost());\n\t}\n\n\t// This method produces a new volatile image.\n\tprivate void createBackBuffer() {\n\t\tGraphicsConfiguration gc = getGraphicsConfiguration();\n\t\tvolatileImg = gc.createCompatibleVolatileImage(getWidth(), getHeight());\n\t}\n\n\tpublic void render(Graphics gOld) {\n\t\t// super.paintComponent(gOld);\n\t\tGraphics2D g = (Graphics2D) gOld;\n\t\tg.setRenderingHint(RenderingHints.KEY_ANTIALIASING,\n\t\t\t\tRenderingHints.VALUE_ANTIALIAS_ON);\n\t\tColor original = g.getColor();\n\t\tg.setColor(getBackground());\n\t\tDimension size = getSize();\n\t\tg.fillRect(0, 0, size.width, size.height);\n\t\tg.setColor(original);\n\t\tsuper.paintChildren(g);\n\t\tVariables allVars = blocks.getAllVariables();\n\t\tif (direction == Direction.Horizontal) {\n\t\t\thRender(g, allVars);\n\t\t} else {\n\t\t\tvRender(g, allVars);\n\t\t}\n\t}\n\n\tprivate void hRender(Graphics2D g, Variables allVars) {\n\t\tposLookup.clear();\n\t\tint y = 0, ystep = getSize().height / (allVars.size());\n\t\tfloat h = 0, hstep = 1f / 7f;\n\t\tRectangleView firstRect = (RectangleView) allVars.min().data\n\t\t\t\t.get(RectangleView.class);\n\t\tRectangleView lastRect = (RectangleView) allVars.max().data\n\t\t\t\t.get(RectangleView.class);\n\t\tdouble xMin = firstRect.x, xMax = lastRect.getMaxX();\n\t\tdouble xRange = xMax - xMin;\n\t\tdouble xScale = getSize().width / xRange;\n\t\tint vcounter = 0;\n\t\tfor (Block b : blocks) {\n\t\t\tColor c = RectangleView.defaultRectColour;\n\t\t\tif (b.variables.size() > 1) {\n\t\t\t\tColor hsb = Color.getHSBColor(h, 0.5f, 1f);\n\t\t\t\tc = new Color(hsb.getRed(), hsb.getGreen(), hsb.getBlue(), 200);\n\t\t\t\th += hstep;\n\t\t\t}\n\t\t\tfor (Variable v : b.variables) {\n\t\t\t\tRectangleView rv = (RectangleView) v.data\n\t\t\t\t\t\t.get(RectangleView.class);\n\t\t\t\tint w = (int) (rv.width * xScale);\n\t\t\t\tint x = (int) ((rv.x - xMin) * xScale);\n\t\t\t\t// assert(x+w<getSize().width);\n\t\t\t\tposLookup.put(v, y);\n\t\t\t\trv.colour = c;\n\t\t\t\trv.draw(g, x, y, w, ystep);\n\t\t\t\ty += ystep;\n\t\t\t\tvcounter++;\n\t\t\t}\n\t\t}\n\t\tfor (Constraint c : constraints) {\n\t\t\tVariable l = c.left, r = c.right;\n\t\t\tint xl = (int) ((l.getPosition() - xMin) * xScale);\n\t\t\tint xr = (int) ((r.getPosition() - xMin) * xScale);\n\t\t\tc.colour = Color.BLUE;\n\t\t\tif (c.isViolated()) {\n\t\t\t\tc.colour = Color.RED;\n\t\t\t} else if (c.isTight()) {\n\t\t\t\tc.colour = Color.GREEN;\n\t\t\t}\n\t\t\tg.setPaint(new Color(c.colour.getRed(), c.colour.getGreen(),\n\t\t\t\t\tc.colour.getBlue(), 100));\n\t\t\tdrawArrow(g, xl, posLookup.get(l), xr, posLookup.get(r), 5);\n\t\t}\n\t}\n\n\tprivate void vRender(Graphics2D g, Variables allVars) {\n\t\tposLookup.clear();\n\t\tint x = 0, xstep = getSize().width / (allVars.size());\n\t\tfloat hue = 0, hstep = 1f / 7f;\n\t\tRectangleView firstRect = (RectangleView) allVars.min().data\n\t\t\t\t.get(RectangleView.class);\n\t\tRectangleView lastRect = (RectangleView) allVars.max().data\n\t\t\t\t.get(RectangleView.class);\n\t\tdouble yMin = firstRect.y, yMax = lastRect.getMaxY();\n\t\tdouble yRange = yMax - yMin;\n\t\tdouble yScale = getSize().height / yRange;\n\t\tint vcounter = 0;\n\t\tfor (Block b : blocks) {\n\t\t\tColor c = RectangleView.defaultRectColour;\n\t\t\tif (b.variables.size() > 1) {\n\t\t\t\tColor hsb = Color.getHSBColor(hue, 0.5f, 1f);\n\t\t\t\tc = new Color(hsb.getRed(), hsb.getGreen(), hsb.getBlue(), 200);\n\t\t\t\thue += hstep;\n\t\t\t}\n\t\t\tfor (Variable v : b.variables) {\n\t\t\t\tRectangleView rv = (RectangleView) v.data\n\t\t\t\t\t\t.get(RectangleView.class);\n\t\t\t\tint h = (int) (rv.height * yScale);\n\t\t\t\tint y = (int) ((rv.y - yMin) * yScale);\n\t\t\t\t// assert(x+w<getSize().width);\n\t\t\t\tposLookup.put(v, x);\n\t\t\t\trv.colour = c;\n\t\t\t\trv.draw(g, x, y, xstep, h);\n\t\t\t\tx += xstep;\n\t\t\t\tvcounter++;\n\t\t\t}\n\t\t}\n\t\tfor (Constraint c : constraints) {\n\t\t\tVariable l = c.left, r = c.right;\n\t\t\tint yl = (int) ((l.getPosition() - yMin) * yScale);\n\t\t\tint yr = (int) ((r.getPosition() - yMin) * yScale);\n\t\t\tc.colour = Color.BLUE;\n\t\t\tif (c.isViolated()) {\n\t\t\t\tc.colour = Color.RED;\n\t\t\t} else if (c.isTight()) {\n\t\t\t\tc.colour = Color.GREEN;\n\t\t\t}\n\t\t\tg.setPaint(new Color(c.colour.getRed(), c.colour.getGreen(),\n\t\t\t\t\tc.colour.getBlue(), 100));\n\t\t\tdrawArrow(g, posLookup.get(l), yl, posLookup.get(r), yr, 5);\n\t\t}\n\t}\n\n\t/**\n\t * Draws an arrow head from (x,y) to (X,Y). The arrow has a triangular head\n\t * of size given by the parameter\n\t * \n\t * @param g\n\t * @param x\n\t *            start point is (x,y)\n\t * @param y\n\t *            start point is (x,y)\n\t * @param X\n\t *            end point is (X,Y)\n\t * @param Y\n\t *            end point is (X,Y)\n\t * @param size\n\t *            of arrow base in pixels\n\t */\n\tprivate void drawArrow(Graphics2D g, int x, int y, int X, int Y, int size) {\n\t\tg.drawLine(x, y, X, Y);\n\t\tdouble s = (double) size;\n\t\tdouble dx = X - x;\n\t\tdouble dy = Y - y;\n\t\tdouble len = Math.sqrt((double) (dx * dx + dy * dy));\n\t\t// u is unit vector from (x,y) to (X,Y)\n\t\tdouble ux = dx / len;\n\t\tdouble uy = dy / len;\n\t\t// a is beginning of arrow triangle\n\t\tdouble ax = X - s * ux;\n\t\tdouble ay = Y - s * uy;\n\t\t// v is vector from start to end of arrow triangle\n\t\tdouble vx = X - ax;\n\t\tdouble vy = Y - ay;\n\t\t// w is perpendicular to v and half the length\n\t\tdouble wx = -vy / 2;\n\t\tdouble wy = vx / 2;\n\t\t// a and b are corners of arrow head\n\t\tPoint p1 = new Point((int) (ax - wx), (int) (ay - wy));\n\t\tPoint p2 = new Point((int) (ax + wx), (int) (ay + wy));\n\t\tGeneralPath path = new GeneralPath(GeneralPath.WIND_EVEN_ODD, 5);\n\t\tpath.moveTo(p1.x, p1.y);\n\t\tpath.lineTo(p2.x, p2.y);\n\t\tpath.lineTo(X, Y);\n\t\tpath.lineTo(p1.x, p1.y);\n\t\tpath.closePath();\n\t\tg.fill(path);\n\t}\n\n\tpublic void updateDrawing() {\n\t\tpaintComponent(getGraphics());\n\t}\n\n\tHashtable<Variable, Integer> posLookup = new Hashtable<Variable, Integer>();\n\n}\n"
  },
  {
    "path": "experimental/RectangleOverlapSolver/placement/DrawingDimensions.java",
    "content": "/**\n * \n */\npackage placement;\n\nimport java.awt.Point;\nimport java.awt.geom.Point2D;\n\nclass DrawingDimensions {\n\n\tpublic double scale;\n\n\tpublic double ymin;\n\n\tpublic double xmin;\n\n\tpublic DrawingDimensions(double scale, double xmin, double ymin) {\n\t\tthis.scale = scale;\n\t\tthis.xmin = xmin;\n\t\tthis.ymin = ymin;\n\t}\n\n\tPoint toScreen(double x, double y) {\n\t\tx -= xmin < 0 ? xmin : 0;\n\t\ty -= ymin < 0 ? ymin : 0;\n\t\tx *= scale;\n\t\ty *= scale;\n\t\treturn new Point((int) x, (int) y);\n\t}\n\n\tpublic Point toScreen(Point2D p) {\n\t\treturn toScreen(p.getX(), p.getY());\n\t}\n}"
  },
  {
    "path": "experimental/RectangleOverlapSolver/placement/FSA.java",
    "content": "package placement;\n\nimport java.awt.geom.Rectangle2D;\nimport java.util.ArrayList;\nimport java.util.Collections;\nimport java.util.Comparator;\n\npublic class FSA implements RectanglePlacement {\n\tclass Vec {\n\t\tdouble x, y;\n\t}\n\n\tdouble xgap, ygap;\n\n\tFSA(double xgap, double ygap) {\n\t\tthis.xgap = xgap;\n\t\tthis.ygap = ygap;\n\t}\n\n\tArrayList<Rectangle2D> rectangles;\n\n\tVec force(Rectangle2D vi, Rectangle2D vj) {\n\t\tVec f = new Vec();\n\t\tdouble dx = vj.getCenterX() - vi.getCenterX();\n\t\tdouble dy = vj.getCenterY() - vi.getCenterY();\n\t\tdouble adx = Math.abs(dx);\n\t\tdouble ady = Math.abs(dy);\n\t\tdouble gij = dy / dx;\n\t\tdouble Gij = (vi.getHeight() + vj.getHeight())\n\t\t\t\t/ (vi.getWidth() + vj.getWidth());\n\t\tif (Gij >= gij && gij > 0 || -Gij <= gij && gij < 0 || gij == 0) {\n\t\t\t// vi and vj touch with y-direction boundaries\n\t\t\tf.x = dx / adx * ((vi.getWidth() + vj.getWidth()) / 2.0 - adx);\n\t\t\tf.y = f.x * gij;\n\t\t}\n\t\tif (Gij < gij && gij > 0 || -Gij > gij && gij < 0) {\n\t\t\t// vi and vj touch with x-direction boundaries\n\t\t\tf.y = dy / ady * ((vi.getHeight() + vj.getHeight()) / 2.0 - ady);\n\t\t\tf.x = f.y / gij;\n\t\t}\n\t\treturn f;\n\t}\n\n\tVec force2(Rectangle2D vi, Rectangle2D vj) {\n\t\tVec f = new Vec();\n\t\tdouble dx = vj.getCenterX() - vi.getCenterX();\n\t\tdouble dy = vj.getCenterY() - vi.getCenterY();\n\t\tdouble gij = dy / dx;\n\t\tif (vi.intersects(vj)) {\n\t\t\tf.x = (vi.getWidth() + vj.getWidth()) / 2.0\n\t\t\t\t\t- (vj.getCenterX() - vi.getCenterX());\n\t\t\tf.y = (vi.getHeight() + vj.getHeight()) / 2.0\n\t\t\t\t\t- (vj.getCenterY() - vi.getCenterY());\n\t\t\t// in the x dimension\n\t\t\tif (f.x > f.y && gij != 0) {\n\t\t\t\tf.x = f.y / gij;\n\t\t\t}\n\t\t\tf.x = Math.max(f.x, 0);\n\t\t\tf.y = Math.max(f.y, 0);\n\t\t}\n\t\treturn f;\n\t}\n\n\tComparator<Rectangle2D> xComparator = new Comparator<Rectangle2D>() {\n\t\tpublic int compare(Rectangle2D u, Rectangle2D v) {\n\t\t\tif (u.getCenterX() > v.getCenterX()) {\n\t\t\t\treturn 1;\n\t\t\t}\n\t\t\tif (u.getCenterX() < v.getCenterX()) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t\treturn 0;\n\t\t}\n\t};\n\n\tvoid horizontal() {\n\t\tCollections.sort(rectangles, xComparator);\n\t\tint i = 0, n = rectangles.size();\n\t\twhile (i < n) {\n\t\t\t// x_i = x_{i+1} = ... = x_k\n\t\t\tint k = i;\n\t\t\tRectangle2D u = rectangles.get(i);\n\t\t\tfor (int j = i; j < n; j++) {\n\t\t\t\tRectangle2D v = rectangles.get(j);\n\t\t\t\tif (u.getCenterX() == v.getCenterX()) {\n\t\t\t\t\tu = v;\n\t\t\t\t\tk = j;\n\t\t\t\t} else {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\t// delta = max(0, max{f.x(m,j)|i<=m<=k<j<n})\n\t\t\tdouble delta = 0;\n\t\t\tfor (int m = i; m <= k; m++) {\n\t\t\t\tfor (int j = k + 1; j < n; j++) {\n\t\t\t\t\tVec f = force(rectangles.get(m), rectangles.get(j));\n\t\t\t\t\tif (f.x > delta) {\n\t\t\t\t\t\tdelta = f.x;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (int j = k + 1; j < n; j++) {\n\t\t\t\tRectangle2D r = rectangles.get(j);\n\t\t\t\tr.setRect(r.getMinX() + delta, r.getMinY(), r.getWidth(), r\n\t\t\t\t\t\t.getHeight());\n\t\t\t}\n\t\t\ti = k + 1;\n\t\t}\n\n\t}\n\n\tdouble horizontalImproved() {\n\t\tCollections.sort(rectangles, xComparator);\n\t\tint i = 0, n = rectangles.size();\n\t\tRectangle2D lmin = rectangles.get(0);\n\t\tdouble sigma = 0, x0 = lmin.getCenterX();\n\t\tdouble[] gamma = new double[rectangles.size()];\n\t\tdouble[] x = new double[rectangles.size()];\n\t\twhile (i < n) {\n\t\t\tRectangle2D u = rectangles.get(i);\n\t\t\tint k = i;\n\t\t\tfor (int j = i + 1; j < n; j++) {\n\t\t\t\tRectangle2D v = rectangles.get(j);\n\t\t\t\tif (u.getCenterX() == v.getCenterX()) {\n\t\t\t\t\tu = v;\n\t\t\t\t\tk = j;\n\t\t\t\t} else {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tdouble g = 0;\n\t\t\tif (u.getCenterX() > x0) {\n\t\t\t\tfor (int m = i; m <= k; m++) {\n\t\t\t\t\tdouble ggg = 0;\n\t\t\t\t\tfor (int j = 0; j < i; j++) {\n\t\t\t\t\t\tVec f = force(rectangles.get(j), rectangles.get(m));\n\t\t\t\t\t\tggg = Math.max(f.x + gamma[j], ggg);\n\t\t\t\t\t}\n\t\t\t\t\tRectangle2D v = rectangles.get(m);\n\t\t\t\t\tdouble gg = 0;\n\t\t\t\t\tif (v.getMinX() + ggg < lmin.getMinX()) {\n\t\t\t\t\t\tgg = sigma;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tgg = ggg;\n\t\t\t\t\t}\n\t\t\t\t\tg = Math.max(g, gg);\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (int m = i; m <= k; m++) {\n\t\t\t\tgamma[m] = g;\n\t\t\t\tRectangle2D r = rectangles.get(m);\n\t\t\t\tx[m] = r.getMinX() + g;\n\t\t\t\tif (r.getMinX() < lmin.getMinX()) {\n\t\t\t\t\tlmin = r;\n\t\t\t\t}\n\t\t\t}\n\t\t\t// delta = max(0, max{f.x(m,j)|i<=m<=k<j<n})\n\t\t\tdouble delta = 0;\n\t\t\tfor (int m = i; m <= k; m++) {\n\t\t\t\tfor (int j = k + 1; j < n; j++) {\n\t\t\t\t\tVec f = force(rectangles.get(m), rectangles.get(j));\n\t\t\t\t\tif (f.x > delta) {\n\t\t\t\t\t\tdelta = f.x;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tsigma += delta;\n\t\t\ti = k + 1;\n\t\t}\n\t\tdouble cost = 0;\n\t\tfor (i = 0; i < n; i++) {\n\t\t\tRectangle2D r = rectangles.get(i);\n\t\t\tdouble oldPos = r.getMinX();\n\t\t\tr.setRect(x[i], r.getMinY(), r.getWidth(), r.getHeight());\n\t\t\tdouble newPos = r.getMinX();\n\n\t\t\tdouble diff = oldPos - newPos;\n\t\t\tcost += diff * diff;\n\t\t}\n\t\treturn cost;\n\t}\n\n\tComparator<Rectangle2D> yComparator = new Comparator<Rectangle2D>() {\n\n\t\tpublic int compare(Rectangle2D u, Rectangle2D v) {\n\t\t\tif (u.getCenterY() > v.getCenterY()) {\n\t\t\t\treturn 1;\n\t\t\t}\n\t\t\tif (u.getCenterY() < v.getCenterY()) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t\treturn 0;\n\t\t}\n\n\t};\n\n\tvoid vertical() {\n\t\tCollections.sort(rectangles, yComparator);\n\t\tint i = 0, n = rectangles.size();\n\t\twhile (i < n) {\n\t\t\t// y_i = y_{i+1} = ... = y_k\n\t\t\tint k = i;\n\t\t\tRectangle2D u = rectangles.get(i);\n\t\t\tfor (int j = i; j < n; j++) {\n\t\t\t\tRectangle2D v = rectangles.get(j);\n\t\t\t\tif (u.getCenterY() == v.getCenterY()) {\n\t\t\t\t\tu = v;\n\t\t\t\t\tk = j;\n\t\t\t\t} else {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\t// delta = max(0, max{f.y(m,j)|i<=m<=k<j<n})\n\t\t\tdouble delta = 0;\n\t\t\tfor (int m = i; m <= k; m++) {\n\t\t\t\tfor (int j = k + 1; j < n; j++) {\n\t\t\t\t\tVec f = force2(rectangles.get(m), rectangles.get(j));\n\t\t\t\t\tif (f.y > delta) {\n\t\t\t\t\t\tdelta = f.y;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (int j = k + 1; j < n; j++) {\n\t\t\t\tRectangle2D r = rectangles.get(j);\n\t\t\t\tr.setRect(r.getMinX(), r.getMinY() + delta, r.getWidth(), r\n\t\t\t\t\t\t.getHeight());\n\t\t\t}\n\t\t\ti = k + 1;\n\t\t}\n\n\t}\n\n\tdouble verticalImproved() {\n\t\tCollections.sort(rectangles, yComparator);\n\t\tint i = 0, n = rectangles.size();\n\t\tRectangle2D lmin = rectangles.get(0);\n\t\tdouble sigma = 0, y0 = lmin.getCenterY();\n\t\tdouble[] gamma = new double[rectangles.size()];\n\t\tdouble[] y = new double[rectangles.size()];\n\t\twhile (i < n) {\n\t\t\tRectangle2D u = rectangles.get(i);\n\t\t\tint k = i;\n\t\t\tfor (int j = i + 1; j < n; j++) {\n\t\t\t\tRectangle2D v = rectangles.get(j);\n\t\t\t\tif (u.getCenterY() == v.getCenterY()) {\n\t\t\t\t\tu = v;\n\t\t\t\t\tk = j;\n\t\t\t\t} else {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tdouble g = 0;\n\t\t\tif (u.getCenterY() > y0) {\n\t\t\t\tfor (int m = i; m <= k; m++) {\n\t\t\t\t\tdouble ggg = 0;\n\t\t\t\t\tfor (int j = 0; j < i; j++) {\n\t\t\t\t\t\tVec f = force2(rectangles.get(j), rectangles.get(m));\n\t\t\t\t\t\tggg = Math.max(f.y + gamma[j], ggg);\n\t\t\t\t\t}\n\t\t\t\t\tRectangle2D v = rectangles.get(m);\n\t\t\t\t\tdouble gg = 0;\n\t\t\t\t\tif (v.getMinY() + ggg < lmin.getMinY()) {\n\t\t\t\t\t\tgg = sigma;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tgg = ggg;\n\t\t\t\t\t}\n\t\t\t\t\tg = Math.max(g, gg);\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (int m = i; m <= k; m++) {\n\t\t\t\tgamma[m] = g;\n\t\t\t\tRectangle2D r = rectangles.get(m);\n\t\t\t\ty[m] = r.getMinY() + g;\n\t\t\t\tif (r.getMinY() < lmin.getMinY()) {\n\t\t\t\t\tlmin = r;\n\t\t\t\t}\n\t\t\t}\n\t\t\t// delta = max(0, max{f.x(m,j)|i<=m<=k<j<n})\n\t\t\tdouble delta = 0;\n\t\t\tfor (int m = i; m <= k; m++) {\n\t\t\t\tfor (int j = k + 1; j < n; j++) {\n\t\t\t\t\tVec f = force(rectangles.get(m), rectangles.get(j));\n\t\t\t\t\tif (f.y > delta) {\n\t\t\t\t\t\tdelta = f.y;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tsigma += delta;\n\t\t\ti = k + 1;\n\t\t}\n\n\t\tdouble cost = 0;\n\t\tfor (i = 0; i < n; i++) {\n\t\t\tRectangle2D r = rectangles.get(i);\n\t\t\tdouble oldPos = r.getMinY();\n\t\t\tr.setRect(r.getMinX(), y[i], r.getWidth(), r.getHeight());\n\t\t\tdouble newPos = r.getMinY();\n\t\t\tdouble diff = oldPos - newPos;\n\t\t\tcost += diff * diff;\n\t\t}\n\t\treturn cost;\n\t}\n\n\tboolean ntve = true;\n\n\tpublic void place(ArrayList<RectangleView> rs) {\n\t\tif (ntve) {\n\t\t\tNativeFSA nfsa = new NativeFSA(xgap, ygap);\n\t\t\tnfsa.place(rs);\n\t\t} else {\n\t\t\trectangles = new ArrayList<Rectangle2D>();\n\t\t\tfor(RectangleView r:rs) {\n\t\t\t\trectangles.add(new Rectangle2D.Double(r.x,r.y,r.width,r.height));\n\t\t\t}\n\t\t\t// TODO This isn't going to work... need to operate directly on RectangleView\n\t\t\t// the following is a hack but it's the easiest way to get the gaps\n\t\t\t// working\n\t\t\tfor (Rectangle2D r : rectangles) {\n\t\t\t\tr.setRect(r.getMinX(), r.getMinY(), r.getWidth() + xgap, r\n\t\t\t\t\t\t.getHeight()\n\t\t\t\t\t\t+ ygap);\n\t\t\t}\n\t\t\tlong t0 = System.currentTimeMillis();\n\t\t\tdouble cost = horizontalImproved();\n\t\t\tlong t1 = System.currentTimeMillis();\n\t\t\tSystem.out.println(\"PFS horizontal: cost=\" + cost + \" time=\"\n\t\t\t\t\t+ (t1 - t0));\n\t\t\tcost = verticalImproved();\n\t\t\tlong t2 = System.currentTimeMillis();\n\t\t\tSystem.out.println(\"PFS vertical: cost=\" + cost + \" time=\"\n\t\t\t\t\t+ (t2 - t1));\n\t\t\tSystem.out.println(\"PFS total: time=\" + (t2 - t0));\n\t\t\tfor (Rectangle2D r : rectangles) {\n\t\t\t\tr.setRect(r.getMinX(), r.getMinY(), r.getWidth() - xgap, r\n\t\t\t\t\t\t.getHeight()\n\t\t\t\t\t\t- ygap);\n\t\t\t}\n\t\t}\n\t}\n\n}\n"
  },
  {
    "path": "experimental/RectangleOverlapSolver/placement/GUITest.java",
    "content": "package placement;\n\nimport java.awt.geom.Rectangle2D;\n\nimport junit.extensions.RepeatedTest;\nimport junit.framework.AssertionFailedError;\nimport junit.framework.Test;\nimport junit.framework.TestCase;\nimport junit.framework.TestSuite;\nimport junit.textui.TestRunner;\n\npublic class GUITest extends TestCase {\n\t{\n\t\trdFrame.init();\n\t}\n\n\tprivate static final RectangleDrawerFrame rdFrame = new RectangleDrawerFrame(\n\t\t\t\"Rectangle Drawer\");\n\n\tprivate static final int VIEWTIME = 0;\n\n\tdouble iScale = 3;\n\n\tstatic int runID = 0;\n\n\tRectangleView makeRect(String label, int x, int X, int y, int Y) {\n\t\tdouble dx = x * iScale, dy = y * iScale, dX = X * iScale, dY = Y\n\t\t\t\t* iScale;\n\t\treturn new RectangleView(label, dx, dy, dX - dx, dY - dy);\n\t}\n\n\tRectangleView makeRect(String label, double x, double X, double y, double Y) {\n\t\tx = x * iScale;\n\t\ty = y * iScale;\n\t\tX = X * iScale;\n\t\tY = Y * iScale;\n\t\treturn new RectangleView(label, x, y, X - x, Y - y);\n\t}\n\n\tprotected void setUp() {\n\t}\n\n\tpublic static Test suite() {\n\t\treturn new TestSuite(GUITest.class);\n\t}\n\n\tpublic void testCase1() {\n\t\tint rs[][] = new int[][] { { 0, 50, 0, 30 }, { 10, 20, 10, 29 },\n\t\t\t\t{ 30, 70, 39, 70 }, { 0, 90, 40, 50 }, { 30, 70, 1, 29 } };\n\n\t\tiScale = 3;\n\t\tint ctr = 0;\n\t\tfor (int r[] : rs) {\n\t\t\trdFrame.d.rectangles.add(makeRect(\"r\" + ctr++, r[0], r[1], r[2],\n\t\t\t\t\tr[3]));\n\t\t}\n\t\trunOverlapRemover();\n\t}\n\n\tpublic void testCase2() {\n\t\tint rs[][] = new int[][] { { 7, 22, 39, 54 }, { 7, 33, 0, 59 },\n\t\t\t\t{ 3, 26, 16, 56 }, { 7, 17, 18, 20 }, { 1, 59, 11, 26 },\n\t\t\t\t{ 19, 20, 13, 49 }, { 1, 10, 0, 4 }, { 47, 52, 1, 3 } };\n\t\tint ctr = 0;\n\t\tiScale = 10;\n\t\tfor (int r[] : rs) {\n\t\t\trdFrame.d.rectangles.add(makeRect(\"r\" + ctr++, r[0], r[1], r[2],\n\t\t\t\t\tr[3]));\n\t\t}\n\t\trdFrame.split = true;\n\t\trunOverlapRemover();\n\t}\n\n\tpublic void testCase3() {\n\t\tint rs[][] = new int[][] { { 8, 32, 29, 36 }, { 19, 24, 2, 27 },\n\t\t\t\t{ 4, 5, 27, 55 }, { 6, 7, 13, 26 }, { 3, 39, 46, 62 },\n\t\t\t\t{ 6, 23, 2, 19 }, { 18, 39, 5, 23 }, { 35, 63, 42, 78 },\n\t\t\t\t{ 16, 18, 14, 72 }, { 12, 32, 10, 58 } };\n\t\tint ctr = 0;\n\t\tiScale = 10;\n\t\tfor (int r[] : rs) {\n\t\t\trdFrame.d.rectangles.add(makeRect(\"r\" + ctr++, r[0], r[1], r[2],\n\t\t\t\t\tr[3]));\n\t\t}\n\t\trunOverlapRemover();\n\t}\n\n\tpublic void testCase4() {\n\t\tdouble rs[][] = new double[][] {\n\t\t\t\t{ 315.755, 355.288, 353.595, 449.627 },\n\t\t\t\t{ 395.048, 395.635, 253.943, 362.228 },\n\t\t\t\t{ 254.439, 393.289, 278.708, 286.346 },\n\t\t\t\t{ 209.852, 370.831, 326.496, 507.255 },\n\t\t\t\t{ 271.947, 415.74, 362.228, 450.318 },\n\t\t\t\t{ 293.408, 405.197, 220.61, 244.119 },\n\t\t\t\t{ 276.482, 386.472, 286.346, 435.767 },\n\t\t\t\t{ 268.211, 436.23, 192.807, 220.61 },\n\t\t\t\t{ 378.008, 502.118, 358.437, 475.587 },\n\t\t\t\t{ 340.68, 472.597, 249.492, 335.448 } };\n\t\tint ctr = 0;\n\t\tiScale = 1;\n\t\tfor (double r[] : rs) {\n\t\t\trdFrame.d.rectangles.add(makeRect(\"r\" + ctr++, r[0], r[1], r[2],\n\t\t\t\t\tr[3]));\n\t\t}\n\t\trunOverlapRemover();\n\t}\n\n\tpublic void testCase5() {\n\t\tdouble rs[][] = new double[][] { { 7, 22, 39, 54 }, { 7, 33, 0, 59 },\n\t\t\t\t{ 3, 26, 16, 56 }, { 7, 17, 18, 20 }, { 1, 59, 11, 26 },\n\t\t\t\t{ 19, 20, 13, 49 }, { 1, 10, 0, 4 }, { 47, 52, 1, 3 } };\n\t\tint ctr = 0;\n\t\tiScale = 1;\n\t\tfor (double r[] : rs) {\n\t\t\trdFrame.d.rectangles.add(makeRect(\"r\" + ctr++, r[0], r[1], r[2],\n\t\t\t\t\tr[3]));\n\t\t}\n\t\trunOverlapRemover();\n\t}\n\n\tpublic void testCase6() {\n\t\tdouble rs[][] = new double[][] { { 40, 69, 63, 69 }, { 1, 5, 27, 64 },\n\t\t\t\t{ 34, 66, 20, 22 }, { 1, 24, 10, 25 }, { 1, 19, 9, 61 },\n\t\t\t\t{ 0, 56, 8, 70 }, { 33, 35, 13, 28 }, { 11, 31, 33, 35 },\n\t\t\t\t{ 12, 22, 3, 23 } };\n\t\tint ctr = 0;\n\t\tiScale = 5;\n\t\tfor (double r[] : rs) {\n\t\t\trdFrame.d.rectangles.add(makeRect(\"r\" + ctr++, r[0], r[1], r[2],\n\t\t\t\t\tr[3]));\n\t\t}\n\t\trunOverlapRemover();\n\t}\n\n\tpublic void testCase7() {\n\t\tdouble rs[][] = new double[][] {\n\t\t\t\t{ 341.594, 388.459, 373.491, 518.168 },\n\t\t\t\t{ 271.214, 324.782, 311.332, 409.166 },\n\t\t\t\t{ 293.848, 475.064, 305.194, 391.162 },\n\t\t\t\t{ 255.317, 447.738, 342.671, 489.923 },\n\t\t\t\t{ 228.375, 261.057, 206.422, 327.794 },\n\t\t\t\t{ 383.552, 462.834, 363.132, 412.843 },\n\t\t\t\t{ 288.859, 481.054, 351.895, 497.728 },\n\t\t\t\t{ 201.307, 368.511, 387.02, 394.95 },\n\t\t\t\t{ 257.961, 259.673, 386.503, 518.403 },\n\t\t\t\t{ 200.178, 275.606, 364.968, 466.787 } };\n\t\tint ctr = 0;\n\t\tiScale = 5;\n\t\tfor (double r[] : rs) {\n\t\t\trdFrame.d.rectangles.add(makeRect(\"r\" + ctr++, r[0], r[1], r[2],\n\t\t\t\t\tr[3]));\n\t\t}\n\t\trunOverlapRemover();\n\t}\n\n\tpublic void testCase8() {\n\t\tdouble rs[][] = new double[][] {\n\t\t\t\t{ 300.763, 399.668, -48.994, 9.37972 },\n\t\t\t\t{ 292.944, 472.907, 586.945, 771.251 },\n\t\t\t\t{ 213.576, 316.07, 390.138, 539.323 },\n\t\t\t\t{ 397.777, 557.537, 269.46, 407.065 },\n\t\t\t\t{ 211.573, 355.103, 329.964, 390.137 },\n\t\t\t\t{ 356.053, 439.284, 483.416, 657.366 },\n\t\t\t\t{ 380.165, 561.491, -117.362, -68.3409 },\n\t\t\t\t{ 331.094, 410.119, 399.923, 491.138 },\n\t\t\t\t{ 239.304, 434.553, 9.37982, 63.0763 },\n\t\t\t\t{ 234.779, 356.548, 379.936, 454.313 },\n\t\t\t\t{ 321.638, 450.396, 771.251, 932.621 },\n\t\t\t\t{ 200.203, 337.728, 164.883, 280.221 },\n\t\t\t\t{ 218.8, 269.785, 96.999, 122.443 },\n\t\t\t\t{ 361.936, 459.41, 329.803, 434.498 },\n\t\t\t\t{ 337.221, 376.991, 140.796, 281.642 },\n\t\t\t\t{ 310.252, 439.023, 371.812, 402.413 },\n\t\t\t\t{ 254.891, 394.928, 881.542, 1019.28 },\n\t\t\t\t{ 235.764, 357.198, 192.217, 362.08 },\n\t\t\t\t{ 220.461, 221.906, 245.827, 349.642 },\n\t\t\t\t{ 230.853, 391.069, -123.824, -117.363 },\n\t\t\t\t{ 386.097, 435.297, 309.264, 504.577 },\n\t\t\t\t{ 264.3, 424.637, 591.648, 654.27 },\n\t\t\t\t{ 215.501, 307.432, 539.323, 586.254 },\n\t\t\t\t{ 395.533, 531.528, -81.995, -4.39529 },\n\t\t\t\t{ 358.484, 479.044, 189.017, 329.803 },\n\t\t\t\t{ 244.895, 425.449, -68.3408, -48.9941 },\n\t\t\t\t{ 333.52, 435.568, 180.205, 324.778 },\n\t\t\t\t{ 386.33, 473.66, 299.321, 363.526 },\n\t\t\t\t{ 209.677, 231.608, 362.947, 442.021 },\n\t\t\t\t{ 378.9, 568.762, 544.595, 674.377 },\n\t\t\t\t{ 329.325, 408.885, 163.78, 188.981 },\n\t\t\t\t{ 203.549, 254.138, 369.055, 565.234 },\n\t\t\t\t{ 363.038, 552.984, 138.776, 269.46 },\n\t\t\t\t{ 321.494, 398.329, 63.0764, 163.78 },\n\t\t\t\t{ 238.098, 434.199, 654.27, 780.879 },\n\t\t\t\t{ 220.68, 413.679, 487.039, 628.287 },\n\t\t\t\t{ 331.987, 377.805, 115.361, 129.283 },\n\t\t\t\t{ 366.68, 514.56, 115.543, 189.017 },\n\t\t\t\t{ 372.306, 409.058, 324.778, 354.862 },\n\t\t\t\t{ 324.464, 410.476, 178.834, 315.801 },\n\t\t\t\t{ 334.489, 418.235, 315.801, 371.812 },\n\t\t\t\t{ 267.432, 329.374, 243.969, 439.479 },\n\t\t\t\t{ 278.759, 291.041, 211.517, 284.993 },\n\t\t\t\t{ 340.121, 366.46, 654.27, 780.914 },\n\t\t\t\t{ 317.692, 449.673, 354.862, 487.971 },\n\t\t\t\t{ 390.997, 453.852, 674.377, 720.033 },\n\t\t\t\t{ 355.829, 549.874, -4.39519, 138.776 },\n\t\t\t\t{ 241.73, 346.358, 362.08, 561.245 },\n\t\t\t\t{ 292.723, 379.273, 242.404, 281.642 },\n\t\t\t\t{ 309.36, 318.712, 125.738, 139.197 },\n\t\t\t\t{ 230.827, 302.345, 586.254, 731.225 },\n\t\t\t\t{ 247.768, 369.572, 454.313, 487.039 },\n\t\t\t\t{ 279.643, 297.273, 262.057, 446.171 },\n\t\t\t\t{ 324.852, 427.59, 487.972, 620.33 },\n\t\t\t\t{ 397.528, 530.053, 61.6616, 115.542 },\n\t\t\t\t{ 301.807, 354.872, 271.221, 313.688 },\n\t\t\t\t{ 362.555, 511.138, 363.526, 483.416 },\n\t\t\t\t{ 230.933, 243.138, 345.959, 412.732 },\n\t\t\t\t{ 213.862, 379.945, 329.011, 371.812 },\n\t\t\t\t{ 238.36, 397.895, 139.197, 271.22 },\n\t\t\t\t{ 354.865, 362.518, 395.361, 592.164 },\n\t\t\t\t{ 208.111, 305.932, 209.846, 362.947 },\n\t\t\t\t{ 359.758, 547.687, 674.377, 864.503 },\n\t\t\t\t{ 333.893, 381.46, 654.27, 803.239 },\n\t\t\t\t{ 374.708, 427.011, 132.488, 180.205 },\n\t\t\t\t{ 355.037, 386.194, 356.862, 551.483 },\n\t\t\t\t{ 255.138, 343.834, 313.688, 379.936 },\n\t\t\t\t{ 342.985, 518.7, 720.033, 864.211 },\n\t\t\t\t{ 230.522, 296.752, 124.143, 125.738 },\n\t\t\t\t{ 354.737, 468.323, 189.017, 299.321 },\n\t\t\t\t{ 338.078, 442.819, 487.972, 586.945 },\n\t\t\t\t{ 319.65, 428.994, 45.1203, 180.205 },\n\t\t\t\t{ 316.785, 345.795, 205.242, 331.095 },\n\t\t\t\t{ 376.016, 568.244, 407.065, 544.595 },\n\t\t\t\t{ 303.117, 314.749, 106.308, 124.142 },\n\t\t\t\t{ 323.809, 346.726, 372.922, 445.778 },\n\t\t\t\t{ 319.902, 478.33, 434.498, 632.13 },\n\t\t\t\t{ 310.011, 383.567, 432.665, 521.371 },\n\t\t\t\t{ 399.723, 540.021, -159.31, -81.9951 },\n\t\t\t\t{ 312.928, 462.85, -68.3408, 45.1202 },\n\t\t\t\t{ 234.251, 259.691, 330.621, 434.599 },\n\t\t\t\t{ 241.899, 376.556, 628.287, 790.087 },\n\t\t\t\t{ 290.924, 406.743, 432.665, 591.648 },\n\t\t\t\t{ 318.801, 399.261, 188.981, 281.642 },\n\t\t\t\t{ 388.388, 430.194, 208.614, 379.542 },\n\t\t\t\t{ 257.764, 289.913, 280.221, 284.993 },\n\t\t\t\t{ 372.082, 390.973, 374.781, 427.304 },\n\t\t\t\t{ 209.496, 215.993, 346.893, 451.783 },\n\t\t\t\t{ 381.404, 401.776, 305.724, 427.215 },\n\t\t\t\t{ 286.623, 295.377, 326.399, 460.316 },\n\t\t\t\t{ 249.832, 319.766, 390.138, 405.821 },\n\t\t\t\t{ 336.459, 351.215, 780.879, 866.931 },\n\t\t\t\t{ 229.438, 337.452, 122.443, 284.993 },\n\t\t\t\t{ 277.601, 375.128, -74.4538, -68.3409 },\n\t\t\t\t{ 281.175, 417.039, 129.283, 242.404 },\n\t\t\t\t{ 366.766, 494.05, 306.843, 407.065 },\n\t\t\t\t{ 222.354, 413.583, 780.879, 881.542 },\n\t\t\t\t{ 212.266, 336.013, 284.993, 329.964 },\n\t\t\t\t{ 272.728, 432.243, 281.642, 315.801 },\n\t\t\t\t{ 200.539, 390.202, 402.413, 432.665 } };\n\t\tint ctr = 0;\n\t\tiScale = 1;\n\t\tfor (double r[] : rs) {\n\t\t\trdFrame.d.rectangles.add(makeRect(\"r\" + ctr++, r[0], r[1], r[2],\n\t\t\t\t\tr[3]));\n\t\t}\n\n\t\trunOverlapRemover();\n\t}\n\n\tpublic void testRandom() {\n\t\trdFrame.d.generateRandom(5);\n\t\trunOverlapRemover();\n\t}\n\n\tprivate void runOverlapRemover() {\n\t\t//rdFrame.algorithm = RectangleDrawerFrame.Algorithm.NATIVE_ACTIVESET;\n\t\trdFrame.split=false;\n\t\ttry {\n\t\t\trdFrame.cleanup(0, 0);\n\t\t\tThread.sleep(VIEWTIME);\n\t\t\tfor (RectangleView r1 : rdFrame.d.rectangles) {\n\t\t\t\tRectangle2D u = new Rectangle2D.Double(r1.x, r1.y,\n\t\t\t\t\t\tr1.width - 0.001, r1.height - 0.001);\n\t\t\t\tfor (RectangleView r2 : rdFrame.d.rectangles) {\n\t\t\t\t\tif (r1 != r2) {\n\t\t\t\t\t\tRectangle2D v = new Rectangle2D.Double(r2.x, r2.y,\n\t\t\t\t\t\t\t\tr2.width - 0.001, r2.height - 0.001);\n\t\t\t\t\t\tassertFalse(r1.label + \" intersects \" + r2.label, u\n\t\t\t\t\t\t\t\t.intersects(v));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t} catch (AssertionFailedError e) {\n\t\t\trdFrame.d.save(\"after_\" + getName() + runID);\n\t\t\trdFrame.d.undo();\n\t\t\trdFrame.d.save(\"before_\" + getName() + runID++);\n\t\t\tthrow e;\n\t\t} catch (AssertionError e) {\n\t\t\trdFrame.d.save(\"after_\" + getName() + runID);\n\t\t\trdFrame.d.undo();\n\t\t\trdFrame.d.save(\"before_\" + getName() + runID++);\n\t\t\tthrow e;\n\t\t} catch (InterruptedException e) {\n\t\t\te.printStackTrace();\n\t\t}\n\t\trdFrame.d.clear();\n\t}\n\n\tpublic static void main(String[] args) {\n\t\tTestRunner.run(new RepeatedTest(GUITest.suite(), 200));\n\t}\n}\n"
  },
  {
    "path": "experimental/RectangleOverlapSolver/placement/Graph.java",
    "content": "package placement;\n\nimport java.awt.Rectangle;\nimport java.awt.geom.Line2D;\nimport java.awt.geom.Point2D;\nimport java.awt.geom.Rectangle2D;\nimport java.util.ArrayList;\nimport java.util.Hashtable;\n\nclass Edge {\n\tNode start;\n\n\tNode end;\n\n\tEdge(Node start, Node end) {\n\t\tthis.start = start;\n\t\tthis.end = end;\n\t}\n}\n\nclass Node {\n\tRectangleView rectangle;\n\n\tString id;\n\n\tArrayList<Edge> edges;\n\n\tNode(String id, int x, int y, int w, int h) {\n\t\trectangle = new RectangleView(id,x - w / 2, y - w / 2, w, h);\n\t\tthis.id = id;\n\t\tedges = new ArrayList<Edge>();\n\t}\n\n\tvoid addEdge(Edge e) {\n\t\tedges.add(e);\n\t}\n\n\tpublic Point2D.Double getPos() {\n\t\tdouble x = rectangle.width / 2.0;\n\t\tdouble y = rectangle.height / 2.0;\n\t\treturn new Point2D.Double(rectangle.x + x, rectangle.y + y);\n\t}\n}\n\npublic class Graph {\n\tHashtable<String, Node> nodes = new Hashtable<String, Node>();\n\n\tArrayList<Edge> edges = new ArrayList<Edge>();\n\n\tHashtable<RectangleView, Node> rectangleNodeLookup = new Hashtable<RectangleView, Node>();\n\n\tpublic ArrayList<RectangleView> getRectangles() {\n\t\tArrayList<RectangleView> rectangles = new ArrayList<RectangleView>();\n\t\tfor (Node n : nodes.values()) {\n\t\t\trectangles.add(n.rectangle);\n\t\t\trectangleNodeLookup.put(n.rectangle, n);\n\t\t}\n\t\treturn rectangles;\n\t}\n\t\n\tpublic void restoreRectangles(ArrayList<RectangleView> rs) {\n\t\trectangleNodeLookup.clear();\n\t\tint i=0;\n\t\tfor (Node n : nodes.values()) {\n\t\t\tRectangleView r=rs.get(i++);\n\t\t\tn.rectangle=r;\n\t\t\trectangleNodeLookup.put(r, n);\n\t\t}\n\t}\n\n\tpublic String getRectangleLabel(Rectangle2D r) {\n\t\tNode n = rectangleNodeLookup.get(r);\n\t\tif (n != null) {\n\t\t\treturn n.id;\n\t\t} else {\n\t\t\treturn \" \";\n\t\t}\n\t}\n\n\tpublic ArrayList<Line2D> getLines() {\n\t\tArrayList<Line2D> lines = new ArrayList<Line2D>();\n\t\tfor (Edge e : edges) {\n\t\t\tlines.add(new Line2D.Double(e.start.getPos(), e.end.getPos()));\n\t\t}\n\t\treturn lines;\n\t}\n\n\tpublic void addNode(String id, int x, int y, int w, int h) {\n\t\tnodes.put(id, new Node(id, x, y, w, h));\n\t}\n\n\tpublic void addEdge(String id1, String id2) {\n\t\tedges.add(new Edge(nodes.get(id1), nodes.get(id2)));\n\t}\n\n\tArrayList<Rectangle2D> ars = null;\n\n\n}\n"
  },
  {
    "path": "experimental/RectangleOverlapSolver/placement/GraphParser.java",
    "content": "package placement;\n\nimport java.awt.Rectangle;\nimport java.awt.geom.Line2D;\nimport java.awt.geom.Point2D;\nimport java.io.BufferedReader;\nimport java.io.FileNotFoundException;\nimport java.io.FileReader;\nimport java.io.IOException;\nimport java.util.ArrayList;\nimport java.util.Hashtable;\nimport java.util.regex.Matcher;\nimport java.util.regex.Pattern;\n\npublic class GraphParser {\n\tGraph g = new Graph();\n\n\tGraphParser(String fileName) {\n\t\tPattern nodePattern = Pattern.compile(\"^\\\\s*(\\\\w+)\\\\s*\\\\[(.*)]\");\n\t\tPattern labelPattern = Pattern.compile(\"label\\\\s*=\\\\s*\\\"?(\\\\w+)\");\n\t\tPattern widthPattern = Pattern\n\t\t\t\t.compile(\"width\\\\s*=\\\\s*\\\"?(\\\\d+(\\\\.\\\\d+)?)\");\n\t\tPattern heightPattern = Pattern\n\t\t\t\t.compile(\"height\\\\s*=\\\\s*\\\"?(\\\\d+(\\\\.\\\\d+)?)\");\n\t\tPattern posPattern = Pattern.compile(\"pos\\\\s*=\\\\s*\\\"(-?\\\\d+),(-?\\\\d+)!?\");\n\t\tPattern edgePattern = Pattern\n\t\t\t\t.compile(\"^\\\\s*(\\\\w+)\\\\s*(->|--)\\\\s*(\\\\w+)\");\n\t\ttry {\n\t\t\tBufferedReader br = new BufferedReader(new FileReader(fileName));\n\t\t\tString s;\n\t\t\twhile ((s = br.readLine()) != null) {\n\t\t\t\tMatcher m = nodePattern.matcher(s);\n\t\t\t\tif (m.find()) {\n\t\t\t\t\tString id = m.group(1);\n\t\t\t\t\tif (!id.equalsIgnoreCase(\"node\")\n\t\t\t\t\t\t\t&& !id.equalsIgnoreCase(\"graph\")) {\n\t\t\t\t\t\tString attrs = m.group(2);\n\t\t\t\t\t\tString label = match(labelPattern, attrs);\n\t\t\t\t\t\tString widthStr = match(widthPattern, attrs);\n\t\t\t\t\t\tString heightStr = match(heightPattern, attrs);\n\t\t\t\t\t\tint width = widthStr == null ? label.length() * 12\n\t\t\t\t\t\t\t\t: (int) (72f * Float.parseFloat(widthStr));\n\t\t\t\t\t\tint height = heightStr == null ? 16\n\t\t\t\t\t\t\t\t: (int) (72f * Float.parseFloat(match(\n\t\t\t\t\t\t\t\theightPattern, attrs)));\n\t\t\t\t\t\tint x = Integer.parseInt(match(posPattern, attrs));\n\t\t\t\t\t\tint y = Integer.parseInt(match(posPattern, attrs, 2));\n\t\t\t\t\t\tSystem.out.printf(\"Node: %s %s %d %d %d %d\\n\", id,\n\t\t\t\t\t\t\t\tlabel, width, height, x, y);\n\t\t\t\t\t\tg.addNode(id, x, -y, width, height);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tm = edgePattern.matcher(s);\n\t\t\t\tif (m.find()) {\n\t\t\t\t\tg.addEdge(m.group(1), m.group(3));\n\t\t\t\t}\n\t\t\t}\n\t\t} catch (FileNotFoundException fnfe) {\n\t\t\tSystem.out\n\t\t\t\t\t.println(\"Cannot locate input file! \" + fnfe.getMessage());\n\t\t\tSystem.exit(0);\n\t\t} catch (IOException ioe) {\n\t\t\tioe.printStackTrace();\n\t\t}\n\t}\n\n\tprivate String match(Pattern p, String s) {\n\t\treturn match(p, s, 1);\n\t}\n\n\tprivate String match(Pattern p, String s, int group) {\n\t\tMatcher m = p.matcher(s);\n\t\tString val = null;\n\t\tif (m.find()) {\n\t\t\tval = m.group(group);\n\t\t}\n\t\treturn val;\n\t}\n\n\tpublic Graph getGraph() {\n\t\treturn g;\n\t}\n}\n"
  },
  {
    "path": "experimental/RectangleOverlapSolver/placement/GraphParserTest.java",
    "content": "package placement;\n\nimport junit.framework.TestCase;\n\npublic class GraphParserTest extends TestCase {\n\tpublic void testGraph1(){\n\t\tnew GraphParser(\"testdata/biograph010.dot\");\n\t}\n}\n"
  },
  {
    "path": "experimental/RectangleOverlapSolver/placement/MaxPairingHeap.java",
    "content": "package placement;\n\nimport java.util.ArrayList;\nimport java.util.LinkedList;\nimport java.util.Queue;\n\n/**\n * Implements a pairing heap. Supports a increaseKey operation. Note that all\n * \"matching\" is based on the compareTo method. Based on implementation by Mark\n * Allen Weiss from the book \"Data Stuctures & Algorithm Analysis in Java\" -\n * Prentice Hall 1999\n */\n\npublic class MaxPairingHeap<T extends Comparable> implements\n\t\tMaxPriorityQueue<T> {\n\tint counter = 0;\n\n\t/**\n\t * Construct the pairing heap.\n\t */\n\tpublic MaxPairingHeap() {\n\t\troot = null;\n\t}\n\n\t/**\n\t * Construct the pairing heap by merging h1 and h2.\n\t */\n\tpublic MaxPairingHeap(MaxPairingHeap<T> h1, MaxPairingHeap<T> h2) {\n\t\tif (h1.root == null && h2.root == null) {\n\t\t\troot = null;\n\t\t} else {\n\t\t\troot = compareAndLink(h1.root, h2.root);\n\t\t\tcounter = h1.counter + h2.counter;\n\t\t}\n\t}\n\n\t/**\n\t * Insert into the priority queue, and return a PNode that can be used by\n\t * decreaseKey. Duplicates are allowed.\n\t * \n\t * @param x\n\t *            the item to insert.\n\t * @return the PNode containing the newly inserted item.\n\t */\n\tpublic void add(T x) {\n\t\tPNode<T> newPNode = new PNode<T>(x);\n\t\tadd(newPNode);\n\t}\n\n\tpublic void add(PNode<T> p) {\n\t\tif (root == null)\n\t\t\troot = p;\n\t\telse\n\t\t\troot = compareAndLink(root, p);\n\t\tcounter++;\n\t}\n\n\t/**\n\t * Find the biggest item in the priority queue.\n\t * \n\t * @return the biggest item, or null if empty.\n\t */\n\tpublic T findMax() {\n\t\tif (isEmpty())\n\t\t\treturn null;\n\t\treturn root.element;\n\t}\n\n\t/**\n\t * Remove the biggest item from the priority queue.\n\t * \n\t * @return the biggest item, or null if empty.\n\t */\n\tpublic T deleteMax() {\n\t\tif (isEmpty())\n\t\t\treturn null;\n\n\t\tT x = findMax();\n\t\tif (root.leftChild == null)\n\t\t\troot = null;\n\t\telse\n\t\t\troot = combineSiblings(root.leftChild);\n\t\tcounter--;\n\n\t\treturn x;\n\t}\n\n\t/**\n\t * Change the value of the item stored in the pairing heap. Does nothing if\n\t * newVal is larger than the currently stored value.\n\t * \n\t * @param p\n\t *            any PNode returned by addItem.\n\t * @param newVal\n\t *            the new value, which must be bigger than the currently stored\n\t *            value.\n\t */\n\tpublic void increaseKey(PNode<T> p, T newVal) {\n\t\tif (p.element.compareTo(newVal) > 0)\n\t\t\treturn; // newVal cannot be smaller\n\t\tp.element = newVal;\n\t\tif (p != root) {\n\t\t\tif (p.nextSibling != null)\n\t\t\t\tp.nextSibling.prev = p.prev;\n\t\t\tif (p.prev.leftChild == p)\n\t\t\t\tp.prev.leftChild = p.nextSibling;\n\t\t\telse\n\t\t\t\tp.prev.nextSibling = p.nextSibling;\n\n\t\t\tp.nextSibling = null;\n\t\t\troot = compareAndLink(root, p);\n\t\t}\n\t}\n\n\t/**\n\t * Test if the priority queue is logically empty.\n\t * \n\t * @return true if empty, false otherwise.\n\t */\n\tpublic boolean isEmpty() {\n\t\treturn root == null;\n\t}\n\n\t/**\n\t * Make the priority queue logically empty.\n\t */\n\tpublic void makeEmpty() {\n\t\troot = null;\n\t\tcounter = 0;\n\t}\n\n\tprivate PNode<T> root;\n\n\t/**\n\t * Internal method that is the basic operation to maintain order. Links\n\t * first and second together to satisfy heap order.\n\t * \n\t * @param first\n\t *            root of tree 1, which may not be null. first.nextSibling MUST\n\t *            be null on entry.\n\t * @param second\n\t *            root of tree 2, which may be null.\n\t * @return result of the tree merge.\n\t */\n\tprivate PNode compareAndLink(PNode<T> first, PNode<T> second) {\n\t\tif (second == null)\n\t\t\treturn first;\n\t\tif (first == null)\n\t\t\treturn second;\n\n\t\tif (second.element.compareTo(first.element) > 0) {\n\t\t\t// Attach first as leftmost child of second\n\t\t\tsecond.prev = first.prev;\n\t\t\tfirst.prev = second;\n\t\t\tfirst.nextSibling = second.leftChild;\n\t\t\tif (first.nextSibling != null)\n\t\t\t\tfirst.nextSibling.prev = first;\n\t\t\tsecond.leftChild = first;\n\t\t\treturn second;\n\t\t} else {\n\t\t\t// Attach second as leftmost child of first\n\t\t\tsecond.prev = first;\n\t\t\tfirst.nextSibling = second.nextSibling;\n\t\t\tif (first.nextSibling != null)\n\t\t\t\tfirst.nextSibling.prev = first;\n\t\t\tsecond.nextSibling = first.leftChild;\n\t\t\tif (second.nextSibling != null)\n\t\t\t\tsecond.nextSibling.prev = second;\n\t\t\tfirst.leftChild = second;\n\t\t\treturn first;\n\t\t}\n\t}\n\n\tprivate PNode<T>[] doubleIfFull(PNode<T>[] array, int index) {\n\t\tif (index == array.length) {\n\t\t\tPNode<T>[] oldArray = array;\n\n\t\t\tarray = new PNode[index * 2];\n\t\t\tfor (int i = 0; i < index; i++)\n\t\t\t\tarray[i] = oldArray[i];\n\t\t}\n\t\treturn array;\n\t}\n\n\t/**\n\t * Internal method that implements two-pass merging.\n\t * \n\t * @param firstSibling\n\t *            the root of the conglomerate; assumed not null.\n\t */\n\tprivate PNode<T> combineSiblings(PNode<T> firstSibling) {\n\t\tPNode<T>[] treeArray = new PNode[5];\n\t\tif (firstSibling.nextSibling == null)\n\t\t\treturn firstSibling;\n\n\t\t// Store the subtrees in an array\n\t\tint numSiblings = 0;\n\t\tfor (; firstSibling != null; numSiblings++) {\n\t\t\ttreeArray = doubleIfFull(treeArray, numSiblings);\n\t\t\ttreeArray[numSiblings] = firstSibling;\n\t\t\tfirstSibling.prev.nextSibling = null; // break links\n\t\t\tfirstSibling = firstSibling.nextSibling;\n\t\t}\n\t\ttreeArray = doubleIfFull(treeArray, numSiblings);\n\t\ttreeArray[numSiblings] = null;\n\n\t\t// Combine subtrees two at a time, going left to right\n\t\tint i = 0;\n\t\tfor (; i + 1 < numSiblings; i += 2)\n\t\t\ttreeArray[i] = compareAndLink(treeArray[i], treeArray[i + 1]);\n\n\t\tint j = i - 2;\n\n\t\t// j has the result of last compareAndLink.\n\t\t// If an odd number of trees, get the last one.\n\t\tif (j == numSiblings - 3)\n\t\t\ttreeArray[j] = compareAndLink(treeArray[j], treeArray[j + 2]);\n\n\t\t// Now go right to left, merging last tree with\n\t\t// next to last. The result becomes the new last.\n\t\tfor (; j >= 2; j -= 2)\n\t\t\ttreeArray[j - 2] = compareAndLink(treeArray[j - 2], treeArray[j]);\n\n\t\treturn treeArray[0];\n\t}\n\n\tpublic ArrayList<T> getAll() {\n\t\tArrayList<T> l = new ArrayList<T>();\n\t\tif (root == null) {\n\t\t\treturn l;\n\t\t}\n\t\tPNode<T> r = root;\n\t\tQueue<PNode<T>> q = new LinkedList<PNode<T>>();\n\t\tq.add(r);\n\t\twhile (!q.isEmpty()) {\n\t\t\tr = q.remove();\n\t\t\tPNode<T> c = r.leftChild;\n\t\t\twhile (c != null) {\n\t\t\t\tq.add(c);\n\t\t\t\tl.add(c.element);\n\t\t\t\tc = c.nextSibling;\n\t\t\t}\n\t\t}\n\t\treturn l;\n\t}\n\n\tpublic String toString() {\n\t\tif (root == null) {\n\t\t\treturn \"\";\n\t\t}\n\t\tPNode<T> r = root;\n\t\tQueue<PNode<T>> q = new LinkedList<PNode<T>>();\n\t\tString s = \"\";\n\t\tq.add(r);\n\t\twhile (!q.isEmpty()) {\n\t\t\tr = q.remove();\n\t\t\tif (r.leftChild != null) {\n\t\t\t\ts = s + r.element + \">\";\n\t\t\t\tPNode<T> c = r.leftChild;\n\t\t\t\twhile (c != null) {\n\t\t\t\t\tq.add(c);\n\t\t\t\t\ts = s + \",\" + c.element;\n\t\t\t\t\tc = c.nextSibling;\n\t\t\t\t}\n\t\t\t\ts = s + \"|\";\n\t\t\t}\n\t\t}\n\t\treturn s;\n\t}\n\n\tpublic static void main(String args[]) {\n\t\tMaxPairingHeap<Integer> h = new MaxPairingHeap();\n\t\th.add(4);\n\t\th.add(1);\n\t\th.add(9);\n\t\th.add(2);\n\t\tSystem.out.println(h);\n\t}\n\n\t/*\n\t * public static void main(String args[]) { MaxPairingHeap<Integer> h = new\n\t * MaxPairingHeap(); int numItems = 100; int i = 37; int j; boolean pass =\n\t * true; System.out.println(\"Checking Pairing Heap...\"); for (i = 37; i !=\n\t * 0; i = (i + 37) % numItems) { h.add(i); } for (i = numItems - 1; i > 0;\n\t * i--) { int v = h.deleteMax(); if (v != i) { pass = false;\n\t * System.out.println(\"Failed insert/deleteMax test! Found: \" + v + \",\n\t * expected: \" + i); } } PNode<Integer>[] p = new PNode[numItems]; for (i =\n\t * 0, j = numItems / 2; i < numItems; i++, j = (j + 71) % numItems) p[j] =\n\t * h.add(j + numItems); for (i = 0, j = numItems / 2; i < numItems; i++, j =\n\t * (j + 53) % numItems) h.increaseKey(p[j], p[j].element + numItems); i = 3 *\n\t * numItems; while (!h.isEmpty()) { int v = h.deleteMax(); if (v != --i) {\n\t * pass = false; System.out.println(\"Failed increaseKey/deleteMax test!\n\t * Found: \" + v + \", expected: \" + i); } } System.out.println(\"Check\n\t * completed: \" + (pass ? \"Pass\" : \"Fail\")); }\n\t */\n\n\tpublic void merge(MaxPriorityQueue<T> b) {\n\t\tPNode<T> broot = ((MaxPairingHeap<T>) b).root;\n\t\tif (root == null && broot == null) {\n\t\t\troot = null;\n\t\t} else {\n\t\t\troot = compareAndLink(root, broot);\n\t\t\tcounter += ((MaxPairingHeap<T>) b).counter;\n\t\t}\n\t}\n\n\tpublic int size() {\n\t\treturn counter;\n\t}\n\n}\n"
  },
  {
    "path": "experimental/RectangleOverlapSolver/placement/MaxPriorityQueue.java",
    "content": "package placement;\n\nimport java.util.ArrayList;\n\npublic interface MaxPriorityQueue<T extends Comparable> {\n\tpublic void add(T e);\n\tpublic T findMax();\n\tpublic T deleteMax();\n\tpublic void merge(MaxPriorityQueue<T> other);\n\tpublic ArrayList<T> getAll();\n\tpublic int size();\n}\n"
  },
  {
    "path": "experimental/RectangleOverlapSolver/placement/MinPairingHeap.java",
    "content": "package placement;\n\n/**\n * Implements a pairing heap. Supports a increaseKey operation. Note that all\n * \"matching\" is based on the compareTo method.\n * \n * Based on implementation by Mark Allen Weiss from the book \"Data Stuctures & Algorithm Analysis in Java\" - Prentice Hall 1999\n */\n\npublic class MinPairingHeap<T extends Comparable> {\n\n\t/**\n\t * Construct the pairing heap.\n\t */\n\tpublic MinPairingHeap() {\n\t\troot = null;\n\t}\n\n\t/**\n\t * Insert into the priority queue, and return a PNode that can be used by\n\t * decreaseKey. Duplicates are allowed.\n\t * \n\t * @param x\n\t *            the item to insert.\n\t * @return the PNode containing the newly inserted item.\n\t */\n\tpublic PNode<T> insert(T x) {\n\t\tPNode<T> newPNode = new PNode<T>(x);\n\n\t\tif (root == null)\n\t\t\troot = newPNode;\n\t\telse\n\t\t\troot = compareAndLink(root, newPNode);\n\t\treturn newPNode;\n\t}\n\n\t/**\n\t * Find the smallest item in the priority queue.\n\t * \n\t * @return the smallest item, or null if empty.\n\t */\n\tpublic T findMin() {\n\t\tif (isEmpty())\n\t\t\treturn null;\n\t\treturn root.element;\n\t}\n\n\t/**\n\t * Remove the smallest item from the priority queue.\n\t * \n\t * @return the smallest item, or null if empty.\n\t */\n\tpublic T deleteMin() {\n\t\tif (isEmpty())\n\t\t\treturn null;\n\n\t\tT x = findMin();\n\t\tif (root.leftChild == null)\n\t\t\troot = null;\n\t\telse\n\t\t\troot = combineSiblings(root.leftChild);\n\n\t\treturn x;\n\t}\n\n\t/**\n\t * Change the value of the item stored in the pairing heap. Does nothing if\n\t * newVal is larger than the currently stored value.\n\t * \n\t * @param p\n\t *            any PNode returned by addItem.\n\t * @param newVal\n\t *            the new value, which must be smaller than the currently stored\n\t *            value.\n\t */\n\tpublic void decreaseKey(PNode<T> p, T newVal) {\n\t\tif (p.element.compareTo(newVal) < 0)\n\t\t\treturn; // newVal cannot be bigger\n\t\tp.element = newVal;\n\t\tif (p != root) {\n\t\t\tif (p.nextSibling != null)\n\t\t\t\tp.nextSibling.prev = p.prev;\n\t\t\tif (p.prev.leftChild == p)\n\t\t\t\tp.prev.leftChild = p.nextSibling;\n\t\t\telse\n\t\t\t\tp.prev.nextSibling = p.nextSibling;\n\n\t\t\tp.nextSibling = null;\n\t\t\troot = compareAndLink(root, p);\n\t\t}\n\t}\n\n\t/**\n\t * Test if the priority queue is logically empty.\n\t * \n\t * @return true if empty, false otherwise.\n\t */\n\tpublic boolean isEmpty() {\n\t\treturn root == null;\n\t}\n\n\t/**\n\t * Make the priority queue logically empty.\n\t */\n\tpublic void makeEmpty() {\n\t\troot = null;\n\t}\n\n\tprivate PNode<T> root;\n\n\t/**\n\t * Internal method that is the basic operation to maintain order. Links\n\t * first and second together to satisfy heap order.\n\t * \n\t * @param first\n\t *            root of tree 1, which may not be null. first.nextSibling MUST\n\t *            be null on entry.\n\t * @param second\n\t *            root of tree 2, which may be null.\n\t * @return result of the tree merge.\n\t */\n\tprivate PNode compareAndLink(PNode<T> first, PNode<T> second) {\n\t\tif (second == null)\n\t\t\treturn first;\n\n\t\tif (second.element.compareTo(first.element) < 0) {\n\t\t\t// Attach first as leftmost child of second\n\t\t\tsecond.prev = first.prev;\n\t\t\tfirst.prev = second;\n\t\t\tfirst.nextSibling = second.leftChild;\n\t\t\tif (first.nextSibling != null)\n\t\t\t\tfirst.nextSibling.prev = first;\n\t\t\tsecond.leftChild = first;\n\t\t\treturn second;\n\t\t} else {\n\t\t\t// Attach second as leftmost child of first\n\t\t\tsecond.prev = first;\n\t\t\tfirst.nextSibling = second.nextSibling;\n\t\t\tif (first.nextSibling != null)\n\t\t\t\tfirst.nextSibling.prev = first;\n\t\t\tsecond.nextSibling = first.leftChild;\n\t\t\tif (second.nextSibling != null)\n\t\t\t\tsecond.nextSibling.prev = second;\n\t\t\tfirst.leftChild = second;\n\t\t\treturn first;\n\t\t}\n\t}\n\n\tprivate PNode<T>[] doubleIfFull(PNode<T>[] array, int index) {\n\t\tif (index == array.length) {\n\t\t\tPNode<T>[] oldArray = array;\n\n\t\t\tarray = new PNode[index * 2];\n\t\t\tfor (int i = 0; i < index; i++)\n\t\t\t\tarray[i] = oldArray[i];\n\t\t}\n\t\treturn array;\n\t}\n\n\t/**\n\t * Internal method that implements two-pass merging.\n\t * \n\t * @param firstSibling\n\t *            the root of the conglomerate; assumed not null.\n\t */\n\tprivate PNode<T> combineSiblings(PNode<T> firstSibling) {\n\t\tPNode<T>[] treeArray = new PNode[5];\n\t\tif (firstSibling.nextSibling == null)\n\t\t\treturn firstSibling;\n\n\t\t// Store the subtrees in an array\n\t\tint numSiblings = 0;\n\t\tfor (; firstSibling != null; numSiblings++) {\n\t\t\ttreeArray = doubleIfFull(treeArray, numSiblings);\n\t\t\ttreeArray[numSiblings] = firstSibling;\n\t\t\tfirstSibling.prev.nextSibling = null; // break links\n\t\t\tfirstSibling = firstSibling.nextSibling;\n\t\t}\n\t\ttreeArray = doubleIfFull(treeArray, numSiblings);\n\t\ttreeArray[numSiblings] = null;\n\n\t\t// Combine subtrees two at a time, going left to right\n\t\tint i = 0;\n\t\tfor (; i + 1 < numSiblings; i += 2)\n\t\t\ttreeArray[i] = compareAndLink(treeArray[i], treeArray[i + 1]);\n\n\t\tint j = i - 2;\n\n\t\t// j has the result of last compareAndLink.\n\t\t// If an odd number of trees, get the last one.\n\t\tif (j == numSiblings - 3)\n\t\t\ttreeArray[j] = compareAndLink(treeArray[j], treeArray[j + 2]);\n\n\t\t// Now go right to left, merging last tree with\n\t\t// next to last. The result becomes the new last.\n\t\tfor (; j >= 2; j -= 2)\n\t\t\ttreeArray[j - 2] = compareAndLink(treeArray[j - 2], treeArray[j]);\n\n\t\treturn treeArray[0];\n\t}\n\tpublic static void main(String args[]) {\n\t\tMinPairingHeap<Integer> h = new MinPairingHeap();\n\t\tint numItems = 100;\n\t\tint i = 37;\n\t\tint j;\n\t\tboolean pass=true;\n\n\t\tSystem.out.println(\"Checking Pairing Heap...\");\n\t\tfor (i = 37; i != 0; i = (i + 37) % numItems) {\n\t\t\th.insert(i);\n\t\t}\n\t\tfor (i = 1; i < numItems; i++) {\n\t\t\tint v = h.deleteMin();\n\t\t\tif (v != i) {\n\t\t\t\tpass=false;\n\t\t\t\tSystem.out.println(\"Failed insert/deleteMin test! Found: \" +v+\", expected: \" + i);\n\t\t\t}\n\t\t}\n\n\t\tPNode<Integer>[] p = new PNode[numItems];\n\t\tfor (i = 0, j = numItems / 2; i < numItems; i++, j = (j + 71)\n\t\t\t\t% numItems)\n\t\t\tp[j] = h.insert(j + numItems);\n\t\tfor (i = 0, j = numItems / 2; i < numItems; i++, j = (j + 53)\n\t\t\t\t% numItems)\n\t\t\th.decreaseKey(p[j], p[j].element + numItems);\n\t\ti = numItems-1;\n\t\twhile (!h.isEmpty()) {\n\t\t\tint v=h.deleteMin();\n\t\t\tif (v != ++i) {\n\t\t\t\tpass=false;\n\t\t\t\tSystem.out.println(\"Failed increaseKey/deleteMax test! Found: \" +v+\", expected: \" + i);\n\t\t\t}\n\t\t}\n\t\tSystem.out.println(\"Check completed: \"+(pass?\"Pass\":\"Fail\"));\n\t}\n}\n"
  },
  {
    "path": "experimental/RectangleOverlapSolver/placement/MosekPlacement.java",
    "content": "package placement;\n\nimport java.util.Hashtable;\n\nimport mosek.Env;\nimport mosek.Exit;\nimport mosek.Task;\n\nclass msgclass extends mosek.Stream {\n\tpublic msgclass() {\n\t\tsuper();\n\t}\n\n\tpublic void print(String msg) {\n\t\tSystem.out.print(msg);\n\t}\n}\n\npublic class MosekPlacement implements Placement {\n\tHashtable<String, Integer> varLookup = new Hashtable<String, Integer>();\n\n\tint varCounter = 0;\n\n\tVariables vars = new Variables();\n\n\tConstraints constraints = new Constraints();\n\n\t/* (non-Javadoc)\n\t * @see placement.Pl#addConstraint(java.lang.String, java.lang.String, double)\n\t */\n\tpublic Constraint addConstraint(String u, String v, double sep) {\n\t\tVariable v1 = vars.get(varLookup.get(u));\n\t\tVariable v2 = vars.get(varLookup.get(v));\n\t\tConstraint c = new Constraint(v1, v2, sep);\n\t\tconstraints.add(c);\n\t\treturn c;\n\t}\n\n\tpublic MosekPlacement(Variable[] vs) {\n\t\tnew Blocks(vs);\n\t\tfor (Variable v : vs) {\n\t\t\tvars.add(v);\n\t\t\tvarLookup.put(v.name, varCounter++);\n\t\t}\n\t}\n\n\tpublic MosekPlacement(Variables vs, Constraints cs) {\n\t\tfor (Variable v : vs) {\n\t\t\tvars.add(v);\n\t\t\tvarLookup.put(v.name, varCounter++);\n\t\t}\n\t\tconstraints = cs;\n\t}\n\t/* (non-Javadoc)\n\t * @see placement.Pl#solve()\n\t */\n\tpublic double solve() throws Exception {\n\t\ttry {\n\t\t\tEnv env = new Env();\n\t\t\tenv.init();\n\t\t\tint n = vars.size(), m = constraints.size();\n\t\t\tTask task = new Task(env, m, n);\n\t\t\t//task.connectStream(new msgclass(), mosek.Env.streamkeye.log);\n\t\t\ttask.resizetask(m, n, 0, 2 * m, n);\n\t\t\ttask.append(0, n);\n\t\t\ttask.append(1, m);\n\t\t\tint[] qsubi = new int[n], qsubj = new int[n], bkx = new int[n];\n\t\t\tdouble[] qval = new double[n];\n\t\t\tfor (int i = 0; i < n; i++) {\n\t\t\t\tqsubi[i] = i;\n\t\t\t\tqsubj[i] = i;\n\t\t\t\tqval[i] = 2.0*vars.get(i).weight;\n\t\t\t\ttask.putcj(i, -qval[i] * vars.get(i).desiredPosition);\n\t\t\t\ttask.putbound(0, i, Env.boundkeye.ra, -Env.Val.infinity,\n\t\t\t\t\t\tEnv.Val.infinity);\n\t\t\t}\n\t\t\tfor (int i = 0; i < m; i++) {\n\t\t\t\tConstraint con = constraints.get(i);\n\t\t\t\tint l = varLookup.get(con.left.name);\n\t\t\t\tint r = varLookup.get(con.right.name);\n\t\t\t\ttask.putavec(1, i, 2, new int[] { l, r },\n\t\t\t\t\t\tnew double[] { -1, 1 });\n\t\t\t\ttask.putbound(1, i, Env.boundkeye.lo, con.separation,\n\t\t\t\t\t\tEnv.Val.infinity);\n\t\t\t}\n\t\t\ttask.putqobj(n, qsubi, qsubj, qval);\n\t\t\ttask.optimize();\n\t\t\tdouble[] xx = new double[n];\n\t\t\ttask.getsolutionslice(mosek.Env.soltpekeye.sol_itr,\n\t\t\t\t\tmosek.Env.solitmkeye.xx, 0, n, xx);\n\n\t\t\tSystem.out.println(\"Primal solution\");\n\t\t\tfor (int j = 0; j < n; ++j) {\n\t\t\t\tVariable v = vars.get(j);\n\t\t\t\tv.offset = xx[j];\n\t\t\t\tv.container.position = 0;\n\t\t\t\t//System.out.println(\"x\" + (j+1) + \": \" + xx[j]);\n\t\t\t}\n\n\t\t\ttask.cleanup();\n\t\t\tenv.cleanup();\n\t\t} catch (mosek.ArrayLengthException e)\n\t\t/* Catch both Error and Warning */\n\t\t{\n\t\t\tSystem.out.println(e.toString());\n\t\t\tthrow e;\n\t\t} catch (mosek.Exception e) {\n\t\t\tSystem.out.println(e.msg);\n\t\t\tthrow e;\n\t\t}\n\t\treturn getCost();\n\t}\n\t/* (non-Javadoc)\n\t * @see placement.Pl#getCost()\n\t */\n\tpublic double getCost() {\n\t\tdouble cost = 0;\n\t\tfor (Variable v : vars) {\n\t\t\tdouble diff = v.getPosition() - v.desiredPosition;\n\t\t\tcost += v.weight * diff * diff;\n\t\t}\n\t\treturn cost;\n\t}\n\n\tpublic Constraints getConstraints() {\n\t\treturn constraints;\n\t}\n\n\tpublic Variables getVariables() {\n\t\treturn vars;\n\t}\n}\n"
  },
  {
    "path": "experimental/RectangleOverlapSolver/placement/NativeFSA.java",
    "content": "package placement;\n\nimport java.awt.geom.Rectangle2D;\nimport java.util.ArrayList;\n\npublic class NativeFSA implements RectanglePlacement {\n\tdouble xgap, ygap;\n\n\tNativeFSA(double xgap, double ygap) {\n\t\tthis.xgap = xgap;\n\t\tthis.ygap = ygap;\n\t}\n\tpublic native double place(double x[],\n\t\t\tdouble y[], double w[], double h[]);\n\n\tstatic {\n\t\tSystem.loadLibrary(\"placement_NativeFSA\");\n\t}\n\n\tpublic void place(ArrayList<RectangleView> rs) {\n\t\tArrayList<Rectangle2D> rectangles = new ArrayList<Rectangle2D>();\n\t\tint n=rectangles.size();\n\t\tdouble[] x=new double[n];\n\t\tdouble[] y=new double[n];\n\t\tdouble[] w=new double[n];\n\t\tdouble[] h=new double[n];\n\t\tfor(int i=0;i<n;i++) {\n\t\t\tRectangleView r=rs.get(i);\n\t\t\tx[i]=r.x;\n\t\t\ty[i]=r.y;\n\t\t\tw[i]=r.width+xgap;\n\t\t\th[i]=r.height+ygap;\n\t\t}\n\t\tplace(x,y,w,h);\n\t\tfor(int i=0;i<n;i++) {\n\t\t\trs.get(i).moveTo(x[i],y[i]);\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "experimental/RectangleOverlapSolver/placement/PNode.java",
    "content": "package placement;\n\npublic class PNode<S extends Comparable> {\n\t/**\n\t * Construct the PNode.\n\t * \n\t * @param theElement\n\t *            the value stored in the PNode.\n\t */\n\tPNode(S theElement) {\n\t\telement = theElement;\n\t\tleftChild = null;\n\t\tnextSibling = null;\n\t\tprev = null;\n\t}\n\n\t// Friendly data; accessible by other package routines\n\tS element;\n\n\tPNode<S> leftChild;\n\n\tPNode<S> nextSibling;\n\n\tPNode<S> prev;\n}"
  },
  {
    "path": "experimental/RectangleOverlapSolver/placement/PerformanceTest.java",
    "content": "package placement;\n\nimport java.awt.geom.Rectangle2D;\nimport java.io.BufferedOutputStream;\nimport java.io.BufferedWriter;\nimport java.io.File;\nimport java.io.FileOutputStream;\nimport java.io.FileWriter;\nimport java.io.IOException;\nimport java.io.ObjectOutput;\nimport java.io.ObjectOutputStream;\nimport java.io.OutputStream;\nimport java.io.Writer;\nimport java.util.ArrayList;\nimport java.util.IdentityHashMap;\nimport java.util.Random;\nimport java.util.Vector;\n\nclass Result {\n\tint size;\n\n\tdouble k;\n\n\tVector<Cost> costs = new Vector<Cost>();\n\n\tvoid writeToFile() {\n\t\tFile f = new File(\"PerformanceResults.log\");\n\t\tWriter output = null;\n\t\ttry {\n\t\t\t// use buffering\n\t\t\toutput = new BufferedWriter(new FileWriter(f, true));\n\t\t\toutput.write(toString() + \"\\n\");\n\t\t\toutput.close();\n\t\t} catch (IOException e) {\n\t\t\te.printStackTrace();\n\t\t}\n\t}\n\n\tpublic String toString() {\n\t\tString s = size + \",\" + k;\n\t\tfor(Cost c:costs) {\n\t\t\ts+=\",\"+c;\n\t\t}\n\t\treturn s;\n\t}\n\n\tpublic void writeHeader() {\n\t\tFile f = new File(\"PerformanceResults.log\");\n\t\tWriter output = null;\n\t\ttry {\n\t\t\t// use buffering\n\t\t\toutput = new BufferedWriter(new FileWriter(f, true));\n\t\t\toutput.write(\"size,k\");\n\t\t\tfor(Cost c:costs) {\n\t\t\t\toutput.write(\",\"+c.hdr());\n\t\t\t}\n\t\t\toutput.write(\"\\n\");\n\t\t\toutput.close();\n\t\t} catch (IOException e) {\n\t\t\te.printStackTrace();\n\t\t}\n\t}\n}\n\nclass Cost {\n\tString name;\n\tlong time;\n\tdouble xDisplacement;\n\tdouble yDisplacement;\n\tpublic double displacement;\n\n\tpublic String hdr() {\n\t\treturn name+\" time,\"+name+\" X,\"+name+\" Y,\"+name+\" tot\";\n\t}\n\tpublic String toString() {\n\t\tString s = time + \",\" + xDisplacement+ \",\" + yDisplacement+ \",\" + displacement;\n\t\treturn s;\n\t}\n}\n\npublic class PerformanceTest {\n\n\tPerformanceTest() {\n\t\tArrayList<Result> results = new ArrayList<Result>();\n\t\tboolean first=true;\n\t\tfor (int size = 500; size <= 500; size += 10) {\n\t\t\tfor (int i = 0; i < 10; i++) { // run 10 times at each size\n\t\t\t\tResult result = new Result();\n\t\t\t\tresult.size = size;\n\t\t\t\tArrayList<Rectangle2D> rs = generateRandom(result, 100.0, 100.0,\n\t\t\t\t\t\tMath.sqrt(size) / 5);\n\t\t\t\tQPRectanglePlacement p = new QPRectanglePlacement(true, false,\n\t\t\t\t\t\tfalse, QPRectanglePlacement.Algorithm.CACTIVESET, 0, 0,\n\t\t\t\t\t\tfalse);\n\t\t\t\tresult.costs.add(run(p, rs,\"SOL-neighbourlists\"));\n\t\t\t\tp.constraintGenerator.neighbourLists=false;\n\t\t\t\tresult.costs.add(run(p, rs,\"SOL\"));\n\t\t\t\t/*\n\t\t\t\tresult.costs.add(run(\n\t\t\t\t\t\tnew QPRectanglePlacement(false, false, false,\n\t\t\t\t\t\t\t\tQPRectanglePlacement.Algorithm.CACTIVESET, 0,\n\t\t\t\t\t\t\t\t0, false), rs,\"SAT\"));\n\t\t\t\tresult.costs.add(run(new QPRectanglePlacement(true, false,\n\t\t\t\t\t\tfalse, QPRectanglePlacement.Algorithm.CACTIVESET, 0, 0,\n\t\t\t\t\t\tfalse), rs,\"SOL\"));\n\t\t\t\tresult.costs.add(run(new QPRectanglePlacement(false, false,\n\t\t\t\t\t\tfalse, QPRectanglePlacement.Algorithm.MOSEK, 0, 0,\n\t\t\t\t\t\tfalse), rs,\"QP\"));\n\t\t\t\tresult.costs.add(run(\n\t\t\t\t\t\tnew QPRectanglePlacement(false, false, true,\n\t\t\t\t\t\t\t\tQPRectanglePlacement.Algorithm.CACTIVESET, 0,\n\t\t\t\t\t\t\t\t0, false), rs,\"SAT_OO\"));\n\t\t\t\tresult.costs.add(run(new QPRectanglePlacement(true, false,\n\t\t\t\t\t\ttrue, QPRectanglePlacement.Algorithm.CACTIVESET, 0, 0,\n\t\t\t\t\t\tfalse), rs,\"SOL_OO\"));\n\t\t\t\tresult.costs.add(run(\n\t\t\t\t\t\tnew QPRectanglePlacement(false, false, true,\n\t\t\t\t\t\t\t\tQPRectanglePlacement.Algorithm.MOSEK, 0, 0,\n\t\t\t\t\t\t\t\tfalse), rs,\"QP_OO\"));\n\t\t\t\tresult.costs.add(run(new FSA(0, 0), rs,\"FSA\"));\n\t\t\t\t*/\n\t\t\t\tresults.add(result);\n\t\t\t\tif(first) {\n\t\t\t\t\tresult.writeHeader();\n\t\t\t\t\tfirst=false;\n\t\t\t\t}\n\t\t\t\tresult.writeToFile();\n\t\t\t}\n\t\t}\n\t\tfor (Result r : results) {\n\t\t\tSystem.out.println(r);\n\t\t}\n\n\t}\n\n\t/**\n\t * @param args\n\t */\n\tpublic static void main(String[] args) {\n\t\tPerformanceTest p = new PerformanceTest();\n\t}\n\n\tprivate ArrayList<Rectangle2D> copyRects(ArrayList<Rectangle2D> orig) {\n\t\tArrayList<Rectangle2D> rs = new ArrayList<Rectangle2D>();\n\t\tfor (Rectangle2D r : orig) {\n\t\t\tRectangle2D r2 = new Rectangle2D.Double();\n\t\t\tr2.setRect(r);\n\t\t\trs.add(r2);\n\t\t}\n\t\treturn rs;\n\t}\n\tprivate Cost run(RectanglePlacement p, ArrayList<Rectangle2D> orig, String alg) {\n\t\tSystem.gc();\n\t\tCost c = new Cost();\n\t\tArrayList<Rectangle2D> rs = copyRects(orig);\n\t\tlong t0 = System.currentTimeMillis();\n\t\t// TODO p.place(rects);\n\t\tc.time = System.currentTimeMillis() - t0;\n\t\tc.xDisplacement = 0;\n\t\tc.yDisplacement = 0;\n\t\tc.name = alg;\n\t\tdouble dx, dy;\n\t\tfor (int i=0;i<rs.size();i++) {\n\t\t\tRectangle2D r=rs.get(i);\n\t\t\tRectangle2D o=orig.get(i);\n\t\t\t//assert(r.getWidth()==o.getWidth());\n\t\t\t//assert(r.getHeight()==o.getHeight());\n\t\t\t//assert(r.getMinX()==rMap.get(r).getMinX());\n\t\t\t//assert(r.getMinY()==rMap.get(r).getMinY());\n\t\t\tc.xDisplacement += dx=Math.abs(r.getMinX() - o.getMinX());\n\t\t\tc.yDisplacement += dy=Math.abs(r.getMinY() - o.getMinY());\n\t\t\tc.displacement += Math.sqrt(dx * dx + dy * dy);\n\t\t}\n\t\treturn c;\n\t}\n\t@Override\n\tprotected void finalize() throws Throwable {\n\t\t// TODO Auto-generated method stub\n\t\tsuper.finalize();\n\t}\n\n\tprivate Cost run(RectanglePlacement p, ArrayList<Rectangle2D> orig, ArrayList<Rectangle2D> xplaced, String alg) {\n\t\tSystem.gc();\n\t\tCost c = new Cost();\n\t\tArrayList<Rectangle2D> rs = copyRects(orig);\n\t\tArrayList<Rectangle2D> xrs = copyRects(xplaced);\n\t\tlong t0 = System.currentTimeMillis();\n\t\t// TODO\n\t\t//((QPRectanglePlacement)p).placeX(rs,null,null);\n\t\t//((QPRectanglePlacement)p).placeY(xrs,null,null);\n\t\tc.time = System.currentTimeMillis() - t0;\n\t\tc.xDisplacement = 0;\n\t\tc.yDisplacement = 0;\n\t\tc.name = alg;\n\t\tfor (int i=0;i<xrs.size();i++) {\n\t\t\tRectangle2D r=rs.get(i);\n\t\t\tRectangle2D xr=xrs.get(i);\n\t\t\tRectangle2D o=orig.get(i);\n\t\t\tassert(r.getWidth()==o.getWidth());\n\t\t\tassert(r.getHeight()==o.getHeight());\n\t\t\t//assert(r.getMinX()==rMap.get(r).getMinX());\n\t\t\t//assert(r.getMinY()==rMap.get(r).getMinY());\n\t\t\tc.xDisplacement += Math.abs(r.getMinX() - o.getMinX());\n\t\t\tc.yDisplacement += Math.abs(xr.getMinY() - o.getMinY());\n\t\t\t//c.displacement += Math.sqrt(dx * dx + dy * dy);\n\t\t}\n\t\treturn c;\n\t}\n\tstatic ArrayList<Rectangle2D> generateRandom(Result result, double w,\n\t\t\tdouble h, double rSize) {\n\t\tRandom rand = new Random();\n\t\tArrayList<Rectangle2D> rectangles = new ArrayList<Rectangle2D>();\n\t\tfor (int i = 0; i < result.size; i++) {\n\t\t\tRectangle2D r = new Rectangle2D.Double(w+ w * rand.nextDouble(), h+h\n\t\t\t\t\t* rand.nextDouble(), (w / rSize) * rand.nextDouble(),\n\t\t\t\t\t(h / rSize) * rand.nextDouble());\n\t\t\trectangles.add(r);\n\t\t}\n\t\tint overlapCount = 0;\n\t\tfor (int i = 0; i < rectangles.size(); i++) {\n\t\t\tRectangle2D u = rectangles.get(i);\n\t\t\tfor (int j = i + 1; j < rectangles.size(); j++) {\n\t\t\t\tRectangle2D v = rectangles.get(j);\n\t\t\t\tif (u.intersects(v))\n\t\t\t\t\toverlapCount++;\n\t\t\t}\n\t\t}\n\t\tdouble k = (double) overlapCount / (double) result.size;\n\t\tSystem.out.println(\"Random graph has k=\" + k);\n\t\tresult.k = k;\n\t\tObjectOutput output = null;\n\t\tFile file = new File(\"randomrects.blocks\");\n\t\tArrayList<Rectangle2D> rs = new ArrayList<Rectangle2D>();\n\t\trs.add(new Rectangle2D.Double(1,2,3,4));\n\n\t\treturn rectangles;\n\t}\n\n}\n"
  },
  {
    "path": "experimental/RectangleOverlapSolver/placement/Placement.java",
    "content": "package placement;\n\npublic interface Placement {\n\n\tpublic abstract Constraint addConstraint(String u, String v, double sep);\n\n\tpublic abstract double solve() throws Exception;\n\t\n\tpublic abstract Constraints getConstraints();\n\tpublic abstract Variables getVariables();\n\n}"
  },
  {
    "path": "experimental/RectangleOverlapSolver/placement/PlacementTest.java",
    "content": "/*\n * Created on 6/03/2005\n *\n */\npackage placement;\n\nimport java.util.ArrayList;\nimport java.util.HashMap;\nimport java.util.Random;\n\nimport junit.framework.TestCase;\n\n/**\n * @author dwyer_2\n */\npublic class PlacementTest extends TestCase {\n\tHashMap<String, Variable> vlookup = new HashMap<String, Variable>();\n\n\tVariable vs[];\n\n\t/*\n\t * public String toString() { String s = getClass().getName() + \"-Positions: \";\n\t * for (Variable v : vs) { s = s + v + \"=\" + v.getPosition() + \" \"; } s = s +\n\t * \"\\n\" + blocks; return s; }\n\t */\n\n\t/**\n\t * Constructor for PlacementTest.\n\t * \n\t * @param arg0\n\t */\n\tpublic PlacementTest(String arg0) {\n\t\tsuper(arg0);\n\t}\n\n\tprivate void run(Placement p, double expected) throws Exception {\n\t\tdouble acost = p.solve();\n\t\tSystem.out.println(\"COST=\" + acost);\n\t\t// assertTrue(acceptableCost(acost, expected));\n\t\t// p = new MosekPlacement(p.getVariables(), p.getConstraints());\n\t\t// assertTrue(acceptableCost(p.solve(), acost));\n\t\t// p = new SolveVPSC(p.getVariables(), p.getConstraints());\n\t\tassertTrue(acceptableCost(p.solve(), acost));\n\t}\n\n\tboolean acceptableCost(double cost, double expected) {\n\t\tif (Math.abs(cost - expected) < 0.001) {\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\n\tpublic void testPairingHeap() throws Exception {\n\t\t{\n\t\t\tlong startTime = System.currentTimeMillis();\n\t\t\tRandom r = new Random();\n\t\t\tMaxPairingHeap<Double> h1 = new MaxPairingHeap<Double>();\n\t\t\tMaxPairingHeap<Double> h2 = new MaxPairingHeap<Double>();\n\t\t\tfor (int i = 0; i < 10000; i++) {\n\t\t\t\th1.add(r.nextDouble());\n\t\t\t\th2.add(r.nextDouble());\n\t\t\t}\n\t\t\tlong time = System.currentTimeMillis() - startTime;\n\t\t\tSystem.out.println(\"Inserts completed in \" + time + \"ms.\");\n\t\t\th1.merge(h2);\n\t\t\tdouble last = Double.MAX_VALUE;\n\t\t\tfor (int i = 0; i < 20000; i++) {\n\t\t\t\tdouble d = h1.deleteMax();\n\t\t\t\tassertTrue(d < last);\n\t\t\t\tlast = d;\n\t\t\t}\n\t\t\ttime = System.currentTimeMillis() - startTime;\n\t\t\tSystem.out.println(\"1st Pairing heap test completed in \" + time\n\t\t\t\t\t+ \"ms.\");\n\t\t}\n\t\t{\n\t\t\tMinPairingHeap<Integer> h = new MinPairingHeap<Integer>();\n\t\t\tint numItems = 1000;\n\t\t\tint i = 37;\n\t\t\tint j;\n\n\t\t\tfor (i = 37; i != 0; i = (i + 37) % numItems) {\n\t\t\t\th.insert(i);\n\t\t\t}\n\t\t\tfor (i = 1; i < numItems; i++) {\n\t\t\t\tint v = h.deleteMin();\n\t\t\t\tassertTrue(v == i);\n\t\t\t}\n\n\t\t\tPNode<Integer>[] p = new PNode[numItems];\n\t\t\tfor (i = 0, j = numItems / 2; i < numItems; i++, j = (j + 71)\n\t\t\t\t\t% numItems)\n\t\t\t\tp[j] = h.insert(j + numItems);\n\t\t\tfor (i = 0, j = numItems / 2; i < numItems; i++, j = (j + 53)\n\t\t\t\t\t% numItems)\n\t\t\t\th.decreaseKey(p[j], p[j].element + numItems);\n\t\t\ti = numItems - 1;\n\t\t\twhile (!h.isEmpty()) {\n\t\t\t\tint v = h.deleteMin();\n\t\t\t\tassertTrue(v == ++i);\n\t\t\t}\n\t\t}\n\t\t{\n\t\t\tMaxPairingHeap<Integer> h = new MaxPairingHeap<Integer>();\n\t\t\tint numItems = 1000;\n\t\t\tint i = 37;\n\t\t\tint j;\n\n\t\t\tfor (i = 37; i != 0; i = (i + 37) % numItems) {\n\t\t\t\th.add(i);\n\t\t\t}\n\t\t\tfor (i = numItems - 1; i > 0; i--) {\n\t\t\t\tint v = h.deleteMax();\n\t\t\t\tassertTrue(v == i);\n\t\t\t}\n\n\t\t\tPNode<Integer>[] p = new PNode[numItems];\n\t\t\tfor (i = 0, j = numItems / 2; i < numItems; i++, j = (j + 71)\n\t\t\t\t\t% numItems) {\n\t\t\t\tp[j] = new PNode<Integer>(j + numItems);\n\t\t\t\th.add(p[j]);\n\t\t\t}\n\t\t\tfor (i = 0, j = numItems / 2; i < numItems; i++, j = (j + 53)\n\t\t\t\t\t% numItems)\n\t\t\t\th.increaseKey(p[j], p[j].element + numItems);\n\t\t\ti = 3 * numItems;\n\t\t\twhile (!h.isEmpty()) {\n\t\t\t\tint v = h.deleteMax();\n\t\t\t\tif (v != --i) {\n\t\t\t\t\tassertTrue(v == i);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tclass HeapNode implements Comparable<HeapNode> {\n\t\tint key;\n\n\t\tboolean dirty = false;\n\n\t\tHeapNode(int k) {\n\t\t\tkey = k;\n\t\t}\n\t\tpublic String toString() {\n\t\t\treturn \"\"+key;\n\t\t}\n\t\tpublic int compareTo(HeapNode o) {\n\t\t\t// Dirty entries have to bubble up and be dealt with\n\t\t\tif(dirty&&!o.dirty) {\n\t\t\t\treturn 1;\n\t\t\t} else if (!dirty&&o.dirty) {\n\t\t\t\treturn -1;\n\t\t\t} else\n\t\t\tif (key > o.key) {\n\t\t\t\treturn 1;\n\t\t\t} else if (key < o.key) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t\treturn 0;\n\t\t}\n\t}\n\n\tpublic void testPairingHeap2() throws Exception {\n\t\tint n = 50, d = 0, od = 0, nd=0;\n\t\tRandom r = new Random(System.currentTimeMillis());\n\t\tHeapNode[] ns = new HeapNode[n];\n\t\ttry {\n\t\t\tfor (int repeat = 100000; repeat > 0; repeat--) {\n\t\t\t\tMaxPairingHeap<HeapNode> h = new MaxPairingHeap<HeapNode>();\n\t\t\t\tfor (int i = 0; i < n; i++) {\n\t\t\t\t\tns[i] = new HeapNode(r.nextInt(50));\n\t\t\t\t\th.add(ns[i]);\n\t\t\t\t}\n\t\t\t\tfor (int j = 0; j < 5; j++) {\n\t\t\t\t\td = r.nextInt(n);\n\t\t\t\t\tod = ns[d].key;\n\t\t\t\t\tint sub=r.nextInt(50);\n\t\t\t\t\tns[d].key -= sub;\n\t\t\t\t\tnd = ns[d].key;\n\t\t\t\t\tns[d].dirty = true;\n\t\t\t\t}\n\t\t\t\tint last = Integer.MAX_VALUE;\n\t\t\t\twhile (!h.isEmpty()) {\n\t\t\t\t\tHeapNode i = h.findMax();\n\t\t\t\t\tArrayList<HeapNode> outOfDate = new ArrayList<HeapNode>();\n\t\t\t\t\twhile (i!=null&&i.dirty) {\n\t\t\t\t\t\th.deleteMax();\n\t\t\t\t\t\ti.dirty = false;\n\t\t\t\t\t\toutOfDate.add(i);\n\t\t\t\t\t\ti = h.findMax();\n\t\t\t\t\t}\n\t\t\t\t\tfor (HeapNode v : outOfDate) {\n\t\t\t\t\t\th.add(v);\n\t\t\t\t\t}\n\t\t\t\t\ti = h.findMax();\n\t\t\t\t\tassertTrue(i.key <= last);\n\t\t\t\t\tlast = i.key;\n\t\t\t\t\th.deleteMax();\n\t\t\t\t}\n\t\t\t}\n\t\t} catch (junit.framework.AssertionFailedError e) {\n\t\t\tns[d].key=od;\n\t\t\tSystem.err.print(\"int[] orig = {\" + ns[0].key);\n\t\t\tfor (int i = 1; i < n; i++) {\n\t\t\t\tSystem.err.print(\",\" + ns[i].key);\n\t\t\t}\n\t\t\tSystem.err.println(\"};\");\n\t\t\tSystem.err.println(\"int d=\" + d + \", nd=\" + nd+\";\");\n\t\t\tthrow e;\n\t\t}\n\t}\n\n\tpublic void testPairingHeap3() throws Exception {\n\t\tMaxPairingHeap<HeapNode> h = new MaxPairingHeap<HeapNode>();\n\t\tint[] orig = {19,8,2,24,12,7,19,37,32,48};\n\t\tint d=9, nd=42;\n\t\tint n = orig.length;\n\t\tHeapNode[] ns = new HeapNode[n];\n\t\tfor (int i = 0; i < n; i++) {\n\t\t\tns[i] = new HeapNode(orig[i]);\n\t\t\th.add(ns[i]);\n\t\t}\n\t\tSystem.out.println(\"Original heap: \"+h);\n\t\tns[d].key = nd;\n\t\tns[d].dirty = true;\n\t\tint last = 100;\n\t\twhile (!h.isEmpty()) {\n\t\t\tSystem.out.println(\"\"+h);\n\t\t\tHeapNode i = h.findMax();\n\t\t\tArrayList<HeapNode> outOfDate = new ArrayList<HeapNode>();\n\t\t\twhile (i!=null&&i.dirty) {\n\t\t\t\tSystem.out.println(\"Skipping: \"+i.key);\n\t\t\t\th.deleteMax();\n\t\t\t\ti.dirty = false;\n\t\t\t\toutOfDate.add(i);\n\t\t\t\ti = h.findMax();\n\t\t\t}\n\t\t\tfor (HeapNode v : outOfDate) {\n\t\t\t\th.add(v);\n\t\t\t}\n\t\t\ti = h.findMax();\n\t\t\tSystem.out.println(i.key+\"<=\"+last);\n\t\t\tassertTrue(i.key <= last);\n\t\t\tlast = i.key;\n\t\t\th.deleteMax();\n\t\t}\n\t}\n\n\tpublic void testPlacement1() throws Exception {\n\t\tPlacement p = new ActiveSetPlacement(new Variable[] {\n\t\t\t\tnew Variable(\"x1\", 1, 3), new Variable(\"x2\", 1, 2),\n\t\t\t\tnew Variable(\"x3\", 1, 3), new Variable(\"x4\", 3, 2),\n\t\t\t\tnew Variable(\"x5\", 3, 1) });\n\t\tp.addConstraint(\"x1\", \"x2\", 1);\n\t\tp.addConstraint(\"x1\", \"x3\", 1);\n\t\tp.addConstraint(\"x2\", \"x4\", 1);\n\t\tp.addConstraint(\"x3\", \"x4\", 1);\n\t\tp.addConstraint(\"x4\", \"x5\", 1);\n\t\trun(p, 2.541);\n\t}\n\n\tpublic void testPlacement1a() throws Exception {\n\t\tPlacement p = new ActiveSetPlacement(new Variable[] {\n\t\t\t\tnew Variable(\"x3\", 1, 3), new Variable(\"x1\", 1, 3),\n\t\t\t\tnew Variable(\"x4\", 3, 2), new Variable(\"x5\", 3, 1),\n\t\t\t\tnew Variable(\"x2\", 1, 2) });\n\t\tp.addConstraint(\"x1\", \"x2\", 1);\n\t\tp.addConstraint(\"x1\", \"x3\", 1);\n\t\tp.addConstraint(\"x2\", \"x4\", 1);\n\t\tp.addConstraint(\"x3\", \"x4\", 1);\n\t\tp.addConstraint(\"x4\", \"x5\", 1);\n\t\trun(p, 2.541);\n\t}\n\n\tpublic void testPlacement2() throws Exception {\n\t\tPlacement p = new ActiveSetPlacement(new Variable[] {\n\t\t\t\tnew Variable(\"x1\", 0, 1), new Variable(\"x2\", 1, 1),\n\t\t\t\tnew Variable(\"x3\", 4, 1), new Variable(\"x4\", 4, 1),\n\t\t\t\tnew Variable(\"x5\", 3, 1), new Variable(\"x6\", 6, 1),\n\t\t\t\tnew Variable(\"x7\", 5, 1), new Variable(\"x8\", 0, 1),\n\t\t\t\tnew Variable(\"x9\", 7, 1) });\n\t\tp.addConstraint(\"x1\", \"x2\", 1);\n\t\tp.addConstraint(\"x1\", \"x3\", 1);\n\t\tp.addConstraint(\"x1\", \"x4\", 1);\n\t\tp.addConstraint(\"x2\", \"x5\", 3);\n\t\tp.addConstraint(\"x3\", \"x5\", 1);\n\t\tp.addConstraint(\"x3\", \"x6\", 1);\n\t\tp.addConstraint(\"x4\", \"x5\", 1);\n\t\tp.addConstraint(\"x4\", \"x8\", 1);\n\t\tp.addConstraint(\"x5\", \"x7\", 1);\n\t\tp.addConstraint(\"x6\", \"x9\", 4);\n\t\tp.addConstraint(\"x7\", \"x9\", 2);\n\t\tp.addConstraint(\"x8\", \"x9\", 3);\n\t\trun(p, 19.0);\n\t}\n\n\tpublic void testPlacement3() throws Exception {\n\t\tPlacement p = new ActiveSetPlacement(new Variable[] {\n\t\t\t\tnew Variable(\"x1\", 0, 1), new Variable(\"x2\", 0, 1),\n\t\t\t\tnew Variable(\"x3\", 0, 1), new Variable(\"x4\", 0, 1),\n\t\t\t\tnew Variable(\"x5\", 8, 1), new Variable(\"x6\", 8, 1),\n\t\t\t\tnew Variable(\"x7\", 8, 1), new Variable(\"x8\", 8, 1),\n\t\t\t\tnew Variable(\"x9\", 4, 20) });\n\t\tp.addConstraint(\"x1\", \"x2\", 1);\n\t\tp.addConstraint(\"x2\", \"x3\", 1);\n\t\tp.addConstraint(\"x3\", \"x4\", 1);\n\t\tp.addConstraint(\"x5\", \"x6\", 1);\n\t\tp.addConstraint(\"x6\", \"x7\", 1);\n\t\tp.addConstraint(\"x7\", \"x8\", 1);\n\t\tp.addConstraint(\"x9\", \"x3\", 1);\n\t\trun(p, 61.0);\n\t}\n\n\tpublic void testPlacement4() throws Exception {\n\t\tPlacement p = new ActiveSetPlacement(new Variable[] {\n\t\t\t\tnew Variable(\"x1\", 1, 3), new Variable(\"x4\", 3, 2),\n\t\t\t\tnew Variable(\"x5\", 3, 1), new Variable(\"x2\", 1, 2),\n\t\t\t\tnew Variable(\"x3\", 1, 2) });\n\t\tp.addConstraint(\"x1\", \"x2\", 1);\n\t\tp.addConstraint(\"x1\", \"x3\", 1);\n\t\tp.addConstraint(\"x2\", \"x4\", 1);\n\t\tp.addConstraint(\"x3\", \"x4\", 1);\n\t\tp.addConstraint(\"x4\", \"x5\", 1);\n\t\trun(p, 2.3809524);\n\t}\n\n\tpublic void testPlacement5() throws Exception {\n\t\tPlacement p = new ActiveSetPlacement(new Variable[] {\n\t\t\t\tnew Variable(\"x1\", 1, 1), new Variable(\"x2\", 2, 1),\n\t\t\t\tnew Variable(\"x3\", 2, 1), new Variable(\"x4\", 3, 1),\n\t\t\t\tnew Variable(\"x5\", 5, 1), new Variable(\"x6\", 6, 1),\n\t\t\t\tnew Variable(\"x7\", 7, 1) });\n\t\tp.addConstraint(\"x1\", \"x2\", 2);\n\t\tp.addConstraint(\"x1\", \"x3\", 2);\n\t\tp.addConstraint(\"x4\", \"x5\", 2);\n\t\tp.addConstraint(\"x2\", \"x6\", 2);\n\t\tp.addConstraint(\"x5\", \"x7\", 2);\n\t\tp.addConstraint(\"x3\", \"x4\", 1);\n\t\tp.addConstraint(\"x6\", \"x7\", 2);\n\t\trun(p, 1.3);\n\t}\n\n\tpublic void testPlacement6() throws Exception {\n\t\tPlacement p = new ActiveSetPlacement(new Variable[] {\n\t\t\t\tnew Variable(\"x1\", 0, 1), new Variable(\"x2\", 2, 1),\n\t\t\t\tnew Variable(\"x3\", 1, 8), new Variable(\"x4\", 3, 1) });\n\t\tp.addConstraint(\"x1\", \"x2\", 3);\n\t\tp.addConstraint(\"x1\", \"x3\", 3);\n\t\tp.addConstraint(\"x2\", \"x4\", 1.5f);\n\t\trun(p, 3.6805556);\n\t}\n\n\tpublic void testPlacement7() throws Exception {\n\t\tPlacement p = new ActiveSetPlacement(new Variable[] {\n\t\t\t\tnew Variable(\"x1\", 1, 7), new Variable(\"x2\", -1, 2),\n\t\t\t\tnew Variable(\"x3\", 1, 2), new Variable(\"x4\", -1, 2),\n\t\t\t\tnew Variable(\"x5\", 1, 2), new Variable(\"x6\", -1, 2),\n\t\t\t\tnew Variable(\"x7\", 1, 2), new Variable(\"x8\", -1, 2),\n\t\t\t\tnew Variable(\"x9\", 1, 2), new Variable(\"x10\", -1, 7) });\n\t\tp.addConstraint(\"x1\", \"x2\", 0);\n\t\tp.addConstraint(\"x1\", \"x3\", 0);\n\t\tp.addConstraint(\"x1\", \"x4\", 0);\n\t\tp.addConstraint(\"x1\", \"x5\", 0);\n\t\tp.addConstraint(\"x1\", \"x6\", 0);\n\t\tp.addConstraint(\"x1\", \"x7\", 0);\n\t\tp.addConstraint(\"x1\", \"x8\", 0);\n\t\tp.addConstraint(\"x1\", \"x9\", 0);\n\t\tp.addConstraint(\"x2\", \"x10\", 0);\n\t\tp.addConstraint(\"x3\", \"x10\", 0);\n\t\tp.addConstraint(\"x4\", \"x10\", 0);\n\t\tp.addConstraint(\"x5\", \"x10\", 0);\n\t\tp.addConstraint(\"x6\", \"x10\", 0);\n\t\tp.addConstraint(\"x7\", \"x10\", 0);\n\t\tp.addConstraint(\"x8\", \"x10\", 0);\n\t\tp.addConstraint(\"x9\", \"x10\", 0);\n\t\trun(p, 29.866667);\n\t}\n\n\tpublic void testPlacement8() throws Exception {\n\t\tPlacement p = new ActiveSetPlacement(new Variable[] {\n\t\t\t\tnew Variable(\"x1\", 0, 2), new Variable(\"x2\", 0, 1),\n\t\t\t\tnew Variable(\"x3\", 3, 2), new Variable(\"x4\", 2, 5),\n\t\t\t\tnew Variable(\"x5\", 5, 5), new Variable(\"x6\", 4, 2),\n\t\t\t\tnew Variable(\"x7\", 7, 1), new Variable(\"x8\", 7, 2),\n\t\t\t\tnew Variable(\"x9\", 1, 4) });\n\t\tp.addConstraint(\"x1\", \"x2\", 1);\n\t\tp.addConstraint(\"x2\", \"x3\", 1);\n\t\tp.addConstraint(\"x3\", \"x4\", 1);\n\t\tp.addConstraint(\"x4\", \"x5\", 1);\n\t\tp.addConstraint(\"x5\", \"x6\", 1);\n\t\tp.addConstraint(\"x6\", \"x7\", 1);\n\t\tp.addConstraint(\"x7\", \"x8\", 1);\n\t\tp.addConstraint(\"x1\", \"x9\", 1);\n\t\tp.addConstraint(\"x9\", \"x8\", 6);\n\t\trun(p, 12.799999);\n\t}\n\n\tpublic void testPlacement9() throws Exception {\n\t\tPlacement p = new ActiveSetPlacement(new Variable[] {\n\t\t\t\tnew Variable(\"x0\", 0, 1), new Variable(\"x1\", 1, 1),\n\t\t\t\tnew Variable(\"x2\", 2, 1), new Variable(\"x3\", 3, 1),\n\t\t\t\tnew Variable(\"x4\", 4, 1) });\n\t\tp.addConstraint(\"x0\", \"x4\", 9);\n\t\tp.addConstraint(\"x0\", \"x2\", 9);\n\t\tp.addConstraint(\"x2\", \"x4\", 3);\n\t\tp.addConstraint(\"x0\", \"x1\", 3);\n\t\tp.addConstraint(\"x1\", \"x2\", 3);\n\t\tp.addConstraint(\"x2\", \"x3\", 3);\n\t\tp.addConstraint(\"x3\", \"x4\", 3);\n\t\trun(p, 666.46497);\n\t}\n\n\tpublic void testPlacement10() throws Exception {\n\t\tPlacement p = new ActiveSetPlacement(new Variable[] {\n\t\t\t\tnew Variable(\"x0\", 0, 9), new Variable(\"x2\", 0.2f, 3),\n\t\t\t\tnew Variable(\"x4\", 0.4f, 3) });\n\t\tp.addConstraint(\"x0\", \"x4\", 9);\n\t\tp.addConstraint(\"x0\", \"x2\", 9);\n\t\tp.addConstraint(\"x2\", \"x4\", 3);\n\t\trun(p, 386.304);\n\t}\n}\n"
  },
  {
    "path": "experimental/RectangleOverlapSolver/placement/QPRectanglePlacement.java",
    "content": "package placement;\n\nimport java.util.ArrayList;\nimport java.util.Observable;\nimport java.util.Observer;\nimport java.util.logging.Logger;\n\npublic class QPRectanglePlacement extends Observable implements\n\t\tRectanglePlacement, Observer {\n\tprivate static final double EXTRA_GAP = 0.0001;\n\n\tstatic Logger logger = Logger.getLogger(QPRectanglePlacement.class\n\t\t\t.getName());\n\n\tenum Algorithm {\n\t\tACTIVESET, CACTIVESET, MOSEK\n\t}\n\n\tprivate Algorithm algorithm = Algorithm.ACTIVESET;\n\n\tprivate boolean animate;\n\n\tprivate boolean splitRefinement;\n\n\tpublic ConstraintGenerator constraintGenerator;\n\n\t/**\n\t * @param completeConstraints\n\t * @param animate\n\t */\n\tpublic QPRectanglePlacement(boolean split, boolean completeConstraints,\n\t\t\tboolean orthogonalOrdering, Algorithm algorithm, double xgap,\n\t\t\tdouble ygap, boolean animate) {\n\t\tthis.splitRefinement = split;\n\t\tthis.constraintGenerator = new ConstraintGenerator(completeConstraints,\n\t\t\t\ttrue, orthogonalOrdering);\n\t\tthis.algorithm = algorithm;\n\t\tthis.animate = animate;\n\t\tXChunk.g = xgap;\n\t\tYChunk.g = ygap;\n\t}\n\n\tvoid placeX(ArrayList<RectangleView> rectangles) {\n\n\t\tdouble cost;\n\t\tlong t1 = System.currentTimeMillis();\n\t\tXChunk[] xs = new XChunk[rectangles.size()];\n\t\tlogger.fine(\"*****************Placing X\");\n\t\tfor (int i = 0; i < rectangles.size(); i++) {\n\t\t\tRectangleView r = rectangles.get(i);\n\t\t\tr.oldX = r.x;\n\t\t\txs[i] = new XChunk(r, new YChunk(r));\n\t\t\txs[i].id = r.label;\n\t\t}\n\t\tconstraintGenerator.initVarsAndConstraints(xs, false);\n\t\tsetChanged();\n\t\tnotifyObservers();\n\t\tlong t2 = System.currentTimeMillis();\n\t\tSystem.out.println(\"Gen hor. cs: time=\" + (t2 - t1));\n\t\tcost = placement();\n\t\tlong t3 = System.currentTimeMillis();\n\t\tSystem.out.println(\"Place hor.: cost=\" + cost + \" time=\" + (t3 - t2));\n\t}\n\n\tvoid replaceX(ArrayList<RectangleView> rectangles) {\n\n\t\tdouble cost;\n\t\tlong t1 = System.currentTimeMillis();\n\t\tXChunk[] xs = new XChunk[rectangles.size()];\n\t\tlogger.fine(\"*****************Placing X\");\n\t\tfor (int i = 0; i < rectangles.size(); i++) {\n\t\t\tRectangleView r = rectangles.get(i);\n\t\t\tr.moveTo(r.oldX, r.y);\n\t\t\txs[i] = new XChunk(r, new YChunk(r));\n\t\t\txs[i].id = r.label;\n\t\t}\n\t\tconstraintGenerator.initVarsAndConstraints(xs, true);\n\t\tsetChanged();\n\t\tnotifyObservers();\n\t\tlong t2 = System.currentTimeMillis();\n\t\tSystem.out.println(\"Gen hor. cs: time=\" + (t2 - t1));\n\t\tcost = placement();\n\t\tlong t3 = System.currentTimeMillis();\n\t\tSystem.out.println(\"Place hor.: cost=\" + cost + \" time=\" + (t3 - t2));\n\t}\n\tpublic void place(ArrayList<RectangleView> rectangles) {\n\t\tlong t1 = System.currentTimeMillis();\n\t\tif (algorithm == Algorithm.CACTIVESET) {\n\t\t\tplaceNative(rectangles);\n\t\t} else {\n\t\t\tXChunk.g += EXTRA_GAP;\n\t\t\tYChunk.g += EXTRA_GAP;\n\t\t\tDebugPanel.direction=DebugPanel.Direction.Horizontal;\n\t\t\tplaceX(rectangles);\n\t\t\tXChunk.g -= EXTRA_GAP;\n\t\t\tDebugPanel.direction=DebugPanel.Direction.Vertical;\n\t\t\tplaceY(rectangles);\n\t\t\tDebugPanel.direction=DebugPanel.Direction.Horizontal;\n\t\t\tYChunk.g -= EXTRA_GAP;\n\t\t\treplaceX(rectangles);\n\t\t}\n\t\tlong t2 = System.currentTimeMillis();\n\t\t//System.out.println(\"Total time=\" + (t2 - t1));\n\t}\n\n\tvoid placeNative(ArrayList<RectangleView> rectangles) {\n\t\t// placeXNative(rectangles);\n\t\t// placeYNative(rectangles);\n\t\tSolveVPSC s = new SolveVPSC(rectangles);\n\t\ts.removeOverlaps();\n\t}\n\n\tvoid placeY(ArrayList<RectangleView> rectangles) {\n\t\tlong t1 = System.currentTimeMillis();\n\t\tYChunk[] ys = new YChunk[rectangles.size()];\n\t\tlogger.fine(\"*****************Placing Y\");\n\t\tfor (int i = 0; i < rectangles.size(); i++) {\n\t\t\tRectangleView r = rectangles.get(i);\n\t\t\tys[i] = new YChunk(r, new XChunk(r));\n\t\t\tys[i].id = r.label;\n\t\t}\n\t\tconstraintGenerator.initVarsAndConstraints(ys, true);\n\t\tsetChanged();\n\t\tnotifyObservers();\n\t\tlong t2 = System.currentTimeMillis();\n\t\tSystem.out.println(\"Gen ver. cs: time=\" + (t2 - t1));\n\n\t\tdouble cost = placement();\n\t\tlong t3 = System.currentTimeMillis();\n\t\tSystem.out.println(\"Place ver.: cost=\" + cost + \" time=\" + (t3 - t1));\n\t}\n\n\tdouble placement() {\n\t\tdouble cost = 0;\n\t\tChunk[] chunks = constraintGenerator.getChunks();\n\t\tVariable[] vs = new Variable[chunks.length];\n\t\tfor (int i = 0; i < chunks.length; i++)\n\t\t\tvs[i] = chunks[i].v;\n\t\tPlacement p = null;\n\t\tswitch (algorithm) {\n\t\tcase MOSEK:\n\t\t\tSystem.out.println(\"Running mosek with:\\n   |V|=\" + vs.length);\n\t\t\tp = new MosekPlacement(vs);\n\t\t\tbreak;\n\t\tcase CACTIVESET:\n\t\t\tSystem.out.println(\"Running native AS with:\\n   |V|=\" + vs.length);\n\t\t\tp = new SolveVPSC(vs);\n\t\t\t((SolveVPSC) p).split = splitRefinement;\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tSystem.out.println(\"Running AS with:\\n   |V|=\" + vs.length);\n\t\t\tp = new ActiveSetPlacement(vs);\n\t\t\t((ActiveSetPlacement) p).split = splitRefinement;\n\t\t\t((ActiveSetPlacement) p).debugAnimation = animate;\n\t\t\t((ActiveSetPlacement) p).addObserver(this);\n\t\t}\n\t\tfor (Constraint c : constraintGenerator.getConstraints()) {\n\t\t\tp.addConstraint(c.left.name, c.right.name, c.separation);\n\t\t}\n\t\tSystem.out.println(\"   |C|=\" + p.getConstraints().size());\n\t\ttry {\n\t\t\tcost = p.solve();\n\t\t\t/*\n\t\t\t * if (splitRefinement) { p = new MosekPlacement(p.getVariables(),\n\t\t\t * p.getConstraints()); double mcost = p.solve();\n\t\t\t * System.out.println(\"cost=\" + cost + \", mcost=\" + mcost); assert\n\t\t\t * (2 * Math.abs(cost - mcost) / (1 + mcost + cost) < 0.001) :\n\t\t\t * \"Solver did not find optimal solution!\"; }\n\t\t\t */\n\n\t\t} catch (Exception e) {\n\t\t\te.printStackTrace();\n\t\t}\n\t\tfor (Chunk c : chunks) {\n\t\t\tc.setCentre(c.v.getPosition());\n\t\t}\n\t\treturn cost;\n\t}\n\n\tpublic void addObserver(Observer o) {\n\t\tsuper.addObserver(o);\n\t}\n\n\tpublic void update(Observable arg0, Object arg1) {\n\t\tfor (Chunk c : constraintGenerator.getChunks()) {\n\t\t\tc.setCentre(c.v.getPosition());\n\t\t}\n\t\tsetChanged();\n\t\tnotifyObservers();\n\t}\n\n}\n"
  },
  {
    "path": "experimental/RectangleOverlapSolver/placement/RectangleDrawerFrame.java",
    "content": "package placement;\n\nimport java.awt.Color;\nimport java.awt.Dimension;\nimport java.awt.Rectangle;\nimport java.awt.event.ActionEvent;\nimport java.awt.event.ActionListener;\nimport java.awt.geom.Rectangle2D;\nimport java.awt.print.PageFormat;\nimport java.awt.print.PrinterJob;\nimport java.io.BufferedOutputStream;\nimport java.io.File;\nimport java.io.FileOutputStream;\nimport java.io.IOException;\nimport java.io.ObjectOutput;\nimport java.io.ObjectOutputStream;\nimport java.io.OutputStream;\nimport java.util.ArrayList;\nimport java.util.Hashtable;\n\nimport javax.swing.Box;\nimport javax.swing.ButtonGroup;\nimport javax.swing.JButton;\nimport javax.swing.JCheckBox;\nimport javax.swing.JFileChooser;\nimport javax.swing.JFrame;\nimport javax.swing.JRadioButton;\nimport javax.swing.JTextField;\nimport javax.swing.JToggleButton;\nimport javax.swing.event.ChangeEvent;\nimport javax.swing.event.ChangeListener;\n\nimport placement.QPRectanglePlacement.Algorithm;\nimport placement.RectangleDrawerPanel.InteractionMode;\n\npublic class RectangleDrawerFrame extends JFrame {\n\n\tenum Algorithm {\n\t\tACTIVESET, NATIVE_ACTIVESET, MOSEK, FSA\n\t}\n\n\tpublic RectangleDrawerFrame(String title) {\n\t\tsuper(title);\n\t}\n\n\tAlgorithm algorithm = Algorithm.ACTIVESET;\n\n\tboolean completeConstraints = false;\n\n\tboolean orthogonalOrderingConstraints = false;\n\n\tboolean animate = false;\n\n\tboolean split = false;\n\n\tpublic static int DefaultXGap = 5;\n\n\tpublic static int DefaultYGap = 5;\n\n\tpublic RectangleDrawerPanel d;\n\n\tpublic static void main(String args[]) {\n\t\tfinal RectangleDrawerFrame f = new RectangleDrawerFrame(\n\t\t\t\t\"Rectangle Drawer\");\n\t\tf.init();\n\t\tif (args.length > 0) {\n\t\t\tSystem.out.println(\"Arg \" + args[0]);\n\t\t\tf.d.load(new File(args[0]));\n\t\t\t//f.cleanup(DefaultXGap,DefaultYGap);\n\t\t}\n\t}\n\n\tpublic void init() {\n\t\tBox hBox1 = Box.createHorizontalBox();\n\t\tBox hBox2 = Box.createHorizontalBox();\n\t\tBox vBox = Box.createVerticalBox();\n\t\td = new RectangleDrawerPanel();\n\t\td.setSize(new Dimension(800, 600));\n\t\td.setBackground(Color.WHITE);\n\t\tJButton cleanupButton = new JButton(\"Remove Overlaps\");\n\t\tJButton clearButton = new JButton(\"Clear\");\n\t\tJButton undoButton = new JButton(\"Undo\");\n\t\tJButton loadButton = new JButton(\"Load\");\n\t\tJButton saveButton = new JButton(\"Save\");\n\t\tJButton randomButton = new JButton(\"Random\");\n\t\tJButton printButton = new JButton(\"Print\");\n\t\tJButton dumpButton = new JButton(\"screenDump\");\n\t\tfinal JToggleButton moveButton = new JToggleButton(\"Move Rectangle\");\n\t\tfinal JTextField xGapField = new JTextField(\"\" + DefaultXGap);\n\t\txGapField.setMaximumSize(new Dimension(100, 30));\n\t\tfinal JTextField yGapField = new JTextField(\"\" + DefaultYGap);\n\t\tyGapField.setMaximumSize(new Dimension(100, 30));\n\t\tJCheckBox completeConstraintsCB = new JCheckBox(\"n^2\");\n\t\tfinal JCheckBox orthogonalConstraintsCB = new JCheckBox(\"OO\");\n\t\tfinal JCheckBox animateCB = new JCheckBox(\"Animate\");\n\t\tfinal JCheckBox splitCB = new JCheckBox(\"Split\");\n\t\tfinal JRadioButton activeSetRB = new JRadioButton(\"AS\");\n\t\tactiveSetRB.addActionListener(new ActionListener() {\n\n\t\t\tpublic void actionPerformed(ActionEvent arg0) {\n\t\t\t\talgorithm = Algorithm.ACTIVESET;\n\t\t\t\tsplitCB.setEnabled(true);\n\t\t\t\tanimateCB.setEnabled(true);\n\t\t\t\torthogonalConstraintsCB.setEnabled(true);\n\t\t\t}\n\n\t\t});\n\n\t\tfinal JRadioButton nativeActiveSetRB = new JRadioButton(\"Native AS\");\n\t\tnativeActiveSetRB.addActionListener(new ActionListener() {\n\n\t\t\tpublic void actionPerformed(ActionEvent arg0) {\n\t\t\t\talgorithm = Algorithm.NATIVE_ACTIVESET;\n\t\t\t\tsplitCB.setEnabled(true);\n\t\t\t\tanimateCB.setEnabled(false);\n\t\t\t\torthogonalConstraintsCB.setEnabled(true);\n\t\t\t}\n\n\t\t});\n\n\t\tfinal JRadioButton mosekRB = new JRadioButton(\"QP\");\n\t\tmosekRB.addActionListener(new ActionListener() {\n\n\t\t\tpublic void actionPerformed(ActionEvent arg0) {\n\t\t\t\talgorithm = Algorithm.MOSEK;\n\t\t\t\tsplitCB.setEnabled(false);\n\t\t\t\tanimateCB.setEnabled(false);\n\t\t\t\torthogonalConstraintsCB.setEnabled(true);\n\t\t\t}\n\n\t\t});\n\t\t// mosekRB.setEnabled(false);\n\t\tfinal JRadioButton fsaRB = new JRadioButton(\"FSA\");\n\t\tfsaRB.addActionListener(new ActionListener() {\n\n\t\t\tpublic void actionPerformed(ActionEvent arg0) {\n\t\t\t\talgorithm = Algorithm.FSA;\n\t\t\t\tsplitCB.setEnabled(false);\n\t\t\t\tanimateCB.setEnabled(false);\n\t\t\t\torthogonalConstraintsCB.setEnabled(false);\n\t\t\t}\n\n\t\t});\n\t\tButtonGroup bg = new ButtonGroup();\n\t\tbg.add(activeSetRB);\n\t\tbg.add(nativeActiveSetRB);\n\t\tbg.add(mosekRB);\n\t\tbg.add(fsaRB);\n\t\tswitch (algorithm) {\n\t\tcase ACTIVESET:\n\t\t\tactiveSetRB.setSelected(true);\n\t\t\tbreak;\n\t\tcase NATIVE_ACTIVESET:\n\t\t\tnativeActiveSetRB.setSelected(true);\n\t\t\tbreak;\n\t\tcase MOSEK:\n\t\t\tmosekRB.setSelected(true);\n\t\t\tbreak;\n\t\tcase FSA:\n\t\t\tfsaRB.setSelected(true);\n\t\t\tbreak;\n\t\t}\n\t\tcompleteConstraintsCB.setSelected(completeConstraints);\n\t\torthogonalConstraintsCB.setSelected(orthogonalOrderingConstraints);\n\t\tanimateCB.setSelected(animate);\n\t\tsplitCB.setSelected(split);\n\t\thBox2.add(cleanupButton);\n\t\thBox2.add(xGapField);\n\t\thBox2.add(yGapField);\n\t\thBox1.add(clearButton);\n\t\thBox1.add(randomButton);\n\t\thBox1.add(undoButton);\n\t\thBox1.add(loadButton);\n\t\thBox1.add(saveButton);\n\t\thBox1.add(printButton);\n\t\thBox1.add(dumpButton);\n\t\thBox1.add(moveButton);\n\t\t// hBox.add(completeConstraintsCB);\n\t\thBox2.add(orthogonalConstraintsCB);\n\t\thBox2.add(animateCB);\n\t\thBox2.add(splitCB);\n\t\thBox2.add(activeSetRB);\n\t\thBox2.add(nativeActiveSetRB);\n\t\thBox2.add(mosekRB);\n\t\thBox2.add(fsaRB);\n\t\tvBox.add(d);\n\t\tvBox.add(hBox1);\n\t\tvBox.add(hBox2);\n\t\tsetDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);\n\t\tadd(vBox);\n\t\tsetSize(700, 700);\n\t\tsetVisible(true);\n\t\tcleanupButton.addActionListener(new ActionListener() {\n\n\t\t\tpublic void actionPerformed(ActionEvent arg0) {\n\t\t\t\tcleanup(Integer.parseInt(xGapField.getText()),Integer.parseInt(yGapField.getText()));\n\t\t\t}\n\n\t\t});\n\t\tclearButton.addActionListener(new ActionListener() {\n\n\t\t\tpublic void actionPerformed(ActionEvent arg0) {\n\t\t\t\td.backup();\n\t\t\t\td.clear();\n\t\t\t}\n\n\t\t});\n\t\tundoButton.addActionListener(new ActionListener() {\n\n\t\t\tpublic void actionPerformed(ActionEvent arg0) {\n\t\t\t\td.undo();\n\t\t\t\td.repaint();\n\t\t\t}\n\n\t\t});\n\t\tfinal RectangleDrawerFrame f = this;\n\t\tloadButton.addActionListener(new ActionListener() {\n\n\t\t\tpublic void actionPerformed(ActionEvent arg0) {\n\t\t\t\tBlocksFileFilter ff = d.getFileFilter();\n\t\t\t\tJFileChooser chooser = new JFileChooser(\".\");\n\t\t\t\tchooser.addChoosableFileFilter(ff);\n\t\t\t\tchooser.setFileFilter(ff);\n\t\t\t\tif (ff.lastSelectedFile != null) {\n\t\t\t\t\tchooser.setSelectedFile(ff.lastSelectedFile);\n\t\t\t\t}\n\t\t\t\tint returnVal = chooser.showOpenDialog(f);\n\t\t\t\tif (returnVal == JFileChooser.APPROVE_OPTION) {\n\t\t\t\t\tFile f = chooser.getSelectedFile();\n\t\t\t\t\td.load(f);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\trandomButton.addActionListener(new ActionListener() {\n\n\t\t\tpublic void actionPerformed(ActionEvent arg0) {\n\t\t\t\td.generateRandom(5);\n\t\t\t}\n\t\t});\n\t\tprintButton.addActionListener(new ActionListener() {\n\n\t\t\tpublic void actionPerformed(ActionEvent arg0) {\n\t\t\t\tPrinterJob printJob = PrinterJob.getPrinterJob();\n\t\t\t\tprintJob.setPrintable(d);\n\t\t\t\tPageFormat pf = printJob.pageDialog(printJob.defaultPage());\n\t\t\t\tif (printJob.printDialog()) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tprintJob.print();\n\t\t\t\t\t} catch (Exception ex) {\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\tdumpButton.addActionListener(new ActionListener() {\n\n\t\t\tpublic void actionPerformed(ActionEvent arg0) {\n\t\t\t\td.saveAsJPEG(\"C:/Temp/Test.jpg\");\n\t\t\t}\n\t\t});\n\t\tmoveButton.addChangeListener(new ChangeListener() {\n\t\t\tpublic void stateChanged(ChangeEvent ce) {\n\t\t\t\tif(moveButton.isSelected()) {\n\t\t\t\t\td.setInteractionMode(RectangleDrawerPanel.InteractionMode.Select);\n\t\t\t\t} else {\n\t\t\t\t\td.setInteractionMode(RectangleDrawerPanel.InteractionMode.Create);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\tsaveButton.addActionListener(new ActionListener() {\n\n\t\t\tpublic void actionPerformed(ActionEvent arg0) {\n\t\t\t\tBlocksFileFilter ff = d.getFileFilter();\n\t\t\t\tJFileChooser chooser = new JFileChooser(\".\");\n\t\t\t\tchooser.setFileFilter(ff);\n\t\t\t\tif (ff.lastSelectedFile != null) {\n\t\t\t\t\tchooser.setSelectedFile(ff.lastSelectedFile);\n\t\t\t\t}\n\t\t\t\tint returnVal = chooser.showSaveDialog(f);\n\t\t\t\tif (returnVal == JFileChooser.APPROVE_OPTION) {\n\t\t\t\t\tff.lastSelectedFile = d.save(chooser.getSelectedFile().getPath());\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\tcompleteConstraintsCB.addChangeListener(new ChangeListener() {\n\n\t\t\tpublic void stateChanged(ChangeEvent arg0) {\n\t\t\t\tcompleteConstraints = completeConstraints ? false : true;\n\t\t\t}\n\n\t\t});\n\t\torthogonalConstraintsCB.addChangeListener(new ChangeListener() {\n\n\t\t\tpublic void stateChanged(ChangeEvent arg0) {\n\t\t\t\torthogonalOrderingConstraints = orthogonalOrderingConstraints ? false\n\t\t\t\t\t\t: true;\n\t\t\t}\n\n\t\t});\n\t\tanimateCB.addChangeListener(new ChangeListener() {\n\n\t\t\tpublic void stateChanged(ChangeEvent arg0) {\n\t\t\t\tanimate = animate ? false : true;\n\t\t\t}\n\n\t\t});\n\t\tsplitCB.addChangeListener(new ChangeListener() {\n\n\t\t\tpublic void stateChanged(ChangeEvent arg0) {\n\t\t\t\tsplit = split ? false : true;\n\t\t\t}\n\n\t\t});\n\n\t\td.updateUI();\n\t}\n\n\tpublic void cleanup(int xGap, int yGap) {\n\t\td.backup();\n\t\tif (algorithm == Algorithm.FSA) {\n\t\t\tFSA r = new FSA(xGap, yGap);\n\t\t\tr.place(d.rectangles);\n\t\t} else {\n\t\t\tQPRectanglePlacement.Algorithm qalg = null;\n\t\t\tswitch (algorithm) {\n\t\t\tcase NATIVE_ACTIVESET:\n\t\t\t\tqalg = QPRectanglePlacement.Algorithm.CACTIVESET;\n\t\t\t\tbreak;\n\t\t\tcase MOSEK:\n\t\t\t\tqalg = QPRectanglePlacement.Algorithm.MOSEK;\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tqalg = QPRectanglePlacement.Algorithm.ACTIVESET;\n\t\t\t}\n\t\t\tQPRectanglePlacement r = new QPRectanglePlacement(split,\n\t\t\t\t\tcompleteConstraints, orthogonalOrderingConstraints, qalg,\n\t\t\t\t\txGap, yGap, animate);\n\t\t\tif (animate) {\n\t\t\t\tr.addObserver(d);\n\t\t\t}\n\t\t\tr.place(d.rectangles);\n\t\t}\n\t\td.fitToScreen();\n\t\td.repaint();\n\t}\n}\n"
  },
  {
    "path": "experimental/RectangleOverlapSolver/placement/RectangleDrawerPanel.java",
    "content": "package placement;\n\nimport java.awt.Color;\nimport java.awt.Dimension;\nimport java.awt.Graphics;\nimport java.awt.Graphics2D;\nimport java.awt.GraphicsConfiguration;\nimport java.awt.RenderingHints;\nimport java.awt.event.MouseEvent;\nimport java.awt.geom.Line2D;\nimport java.awt.geom.Rectangle2D;\nimport java.awt.image.BufferedImage;\nimport java.awt.image.VolatileImage;\nimport java.awt.print.PageFormat;\nimport java.awt.print.Printable;\nimport java.awt.print.PrinterException;\nimport java.io.BufferedInputStream;\nimport java.io.BufferedOutputStream;\nimport java.io.File;\nimport java.io.FileInputStream;\nimport java.io.FileOutputStream;\nimport java.io.IOException;\nimport java.io.InputStream;\nimport java.io.ObjectInput;\nimport java.io.ObjectInputStream;\nimport java.io.ObjectOutput;\nimport java.io.ObjectOutputStream;\nimport java.io.OutputStream;\nimport java.util.ArrayList;\nimport java.util.Hashtable;\nimport java.util.Observable;\nimport java.util.Observer;\nimport java.util.Random;\n\nimport javax.imageio.ImageIO;\nimport javax.swing.JPanel;\nimport javax.swing.event.MouseInputListener;\nimport javax.swing.filechooser.FileFilter;\n\nclass BlocksFileFilter extends FileFilter {\n\tpublic File lastSelectedFile = null;\n\n\tpublic boolean accept(File file) {\n\t\treturn file.isDirectory() || file.getName().endsWith(\".blocks\")\n\t\t\t\t|| file.getName().endsWith(\".dot\");\n\t}\n\n\tpublic String getDescription() {\n\t\treturn \"Blocks and Dot graph files\";\n\t}\n}\n\npublic class RectangleDrawerPanel extends JPanel implements Printable,\n\t\tMouseInputListener, Observer {\n\tenum InteractionMode {\n\t\tCreate, Select\n\t};\n\n\tInteractionMode interactionMode = InteractionMode.Create;\n\n\tprivate int prevX, prevY;\n\n\tprivate boolean dragging;\n\n\tprivate Graphics2D g;\n\n\tprivate RectangleView rect;\n\n\tpublic ArrayList<RectangleView> rectangles = new ArrayList<RectangleView>();\n\n\tpublic Graph graph = null;\n\n\tprivate ArrayList<RectangleView> undoRectangles = new ArrayList<RectangleView>();\n\n\tprivate Constraints constraints;\n\n\tBlocksFileFilter fileFilter = new BlocksFileFilter();\n\n\tpublic void generateRandom(int n) {\n\t\tclear();\n\t\tDimension dim = getSize();\n\t\tRandom rand = new Random();\n\t\tdouble w = dim.width / 3.0;\n\t\tdouble h = dim.height / 3.0;\n\t\tgenerateRandom(n, rand, w, h);\n\t}\n\n\tprotected void generateRandom(int n, Random rand, double w, double h) {\n\t\tfor (int i = 0; i < n; i++) {\n\t\t\tRectangleView r = new RectangleView(\"\" + i, w + rand.nextDouble()\n\t\t\t\t\t* w, h + rand.nextDouble() * h, rand.nextDouble()\n\t\t\t\t\t* w, rand.nextDouble() * h);\n\t\t\trectangles.add(r);\n\t\t}\n\t\tint overlapCount = 0;\n\t\tfor (int i = 0; i < rectangles.size(); i++) {\n\t\t\tRectangleView u = rectangles.get(i);\n\t\t\tRectangle2D r1 = new Rectangle2D.Double(u.x, u.y, u.width, u.height);\n\t\t\t/*\n\t\t\tfor (int j = i + 1; j < rectangles.size(); j++) {\n\t\t\t\tRectangleView v = rectangles.get(j);\n\t\t\t\tRectangle2D r2 = new Rectangle2D.Double(v.x, v.y, v.width,\n\t\t\t\t\t\tv.height);\n\t\t\t\tif (r1.intersects(r2))\n\t\t\t\t\toverlapCount++;\n\t\t\t}\n\t\t\t*/\n\t\t}\n\t\t//System.out.println(\"Random graph has \" + overlapCount + \" overlaps.\");\n\t\trepaint();\n\t}\n\n\tDrawingDimensions fitToScreen() {\n\t\tdouble xmax = 0;\n\t\tdouble xmin = Double.MAX_VALUE;\n\t\tdouble ymax = 0;\n\t\tdouble ymin = Double.MAX_VALUE;\n\t\tfor (RectangleView r : rectangles) {\n\t\t\txmin = Math.min(xmin, r.x);\n\t\t\txmax = Math.max(xmax, (r.getMaxX()));\n\t\t\tymin = Math.min(ymin, r.y);\n\t\t\tymax = Math.max(ymax, (r.getMaxY()));\n\t\t}\n\t\tdouble currentWidth = Math.max(xmax, xmax - xmin);\n\t\tdouble currentHeight = Math.max(ymax, ymax - ymin);\n\t\tdouble targetWidth = getSize().width;\n\t\tdouble targetHeight = getSize().height;\n\t\tdouble xscale = targetWidth / currentWidth;\n\t\tdouble yscale = targetHeight / currentHeight;\n\t\treturn new DrawingDimensions(Math.min(Math.min(xscale, yscale), 1),\n\t\t\t\txmin, ymin);\n\t}\n\n\tprotected void load(File f) {\n\t\tclear();\n\t\tObjectInput input = null;\n\t\tif (f.getPath().endsWith(\".dot\")) {\n\t\t\tGraphParser g = new GraphParser(f.getPath());\n\t\t\tgraph = g.getGraph();\n\t\t\tif (graph != null) {\n\t\t\t\trectangles=graph.getRectangles();\n\t\t\t}\n\t\t\tfileFilter.lastSelectedFile = f;\n\t\t} else {\n\t\t\ttry {\n\t\t\t\t// use buffering\n\t\t\t\tInputStream file = new FileInputStream(f);\n\t\t\t\tInputStream buffer = new BufferedInputStream(file);\n\t\t\t\tinput = new ObjectInputStream(buffer);\n\t\t\t\t// deserialize the List\n\t\t\t\trectangles = (ArrayList<RectangleView>) input.readObject();\n\t\t\t} catch (Exception ex) {\n\t\t\t\tex.printStackTrace();\n\t\t\t} finally {\n\t\t\t\ttry {\n\t\t\t\t\tif (input != null) {\n\t\t\t\t\t\t// close \"input\" and its underlying streams\n\t\t\t\t\t\tinput.close();\n\t\t\t\t\t\tfileFilter.lastSelectedFile = f;\n\t\t\t\t\t}\n\t\t\t\t} catch (IOException ex) {\n\t\t\t\t\tex.printStackTrace();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\trepaint();\n\t}\n\n\tprotected File save(String path) {\n\t\tObjectOutput output = null;\n\t\tif (!path.endsWith(\".blocks\")) {\n\t\t\tpath = path + \".blocks\";\n\t\t}\n\t\tFile file = new File(path);\n\t\ttry {\n\t\t\t// use buffering\n\t\t\tOutputStream buffer = new BufferedOutputStream(\n\t\t\t\t\tnew FileOutputStream(file));\n\t\t\toutput = new ObjectOutputStream(buffer);\n\t\t\toutput.writeObject(rectangles);\n\t\t} catch (IOException ex) {\n\t\t\tex.printStackTrace();\n\t\t} finally {\n\t\t\ttry {\n\t\t\t\tif (output != null) {\n\t\t\t\t\t// flush and close \"output\" and its underlying\n\t\t\t\t\t// streams\n\t\t\t\t\toutput.close();\n\t\t\t\t}\n\t\t\t} catch (IOException ex) {\n\t\t\t\tex.printStackTrace();\n\t\t\t}\n\t\t}\n\t\treturn file;\n\t}\n\n\t/**\n\t * \n\t */\n\tprotected void backup() {\n\t\tundoRectangles = new ArrayList<RectangleView>();\n\t\tfor (RectangleView r : rectangles) {\n\t\t\tRectangleView nr = new RectangleView(r);\n\t\t\tundoRectangles.add(nr);\n\t\t}\n\t}\n\n\tprotected void undo() {\n\t\trectangles = undoRectangles;\n\t\tif(graph!=null){\n\t\t\tgraph.restoreRectangles(rectangles);\n\t\t}\n\t}\n\n\t/**\n\t * @return\n\t */\n\tprotected BlocksFileFilter getFileFilter() {\n\t\treturn fileFilter;\n\t}\n\n\t/**\n\t * \n\t */\n\tpublic RectangleDrawerPanel() {\n\t\tsuper(true);\n\t\taddMouseListener(this);\n\t\taddMouseMotionListener(this);\n\t}\n\n\tpublic void clear() {\n\t\trectangles = new ArrayList<RectangleView>();\n\t\tconstraints = null;\n\t\tgraph = null;\n\t\trepaint();\n\t}\n\n\tprivate VolatileImage volatileImg;\n\n\tpublic void paintComponent(Graphics g) {\n\t\t// create the hardware accelerated image.\n\t\tcreateBackBuffer();\n\n\t\t// Main rendering loop. Volatile images may lose their contents.\n\t\t// This loop will continually render to (and produce if neccessary)\n\t\t// volatile images\n\t\t// until the rendering was completed successfully.\n\t\tdo {\n\n\t\t\t// Validate the volatile image for the graphics configuration of\n\t\t\t// this\n\t\t\t// component. If the volatile image doesn't apply for this graphics\n\t\t\t// configuration\n\t\t\t// (in other words, the hardware acceleration doesn't apply for the\n\t\t\t// new device)\n\t\t\t// then we need to re-create it.\n\t\t\tGraphicsConfiguration gc = this.getGraphicsConfiguration();\n\t\t\tint valCode = volatileImg.validate(gc);\n\n\t\t\t// This means the device doesn't match up to this hardware\n\t\t\t// accelerated image.\n\t\t\tif (valCode == VolatileImage.IMAGE_INCOMPATIBLE) {\n\t\t\t\tcreateBackBuffer(); // recreate the hardware accelerated image.\n\t\t\t}\n\n\t\t\tGraphics2D offscreenGraphics = (Graphics2D) volatileImg\n\t\t\t\t\t.getGraphics();\n\t\t\trender(getWidth(), getHeight(), offscreenGraphics); // call core\n\t\t\t// paint method.\n\n\t\t\t// paint back buffer to main graphics\n\t\t\tg.drawImage(volatileImg, 0, 0, this);\n\t\t\t// Test if content is lost\n\t\t} while (volatileImg.contentsLost());\n\t}\n\n\t// This method produces a new volatile image.\n\tprivate void createBackBuffer() {\n\t\tGraphicsConfiguration gc = getGraphicsConfiguration();\n\t\tvolatileImg = gc.createCompatibleVolatileImage(getWidth(), getHeight());\n\t}\n\n\tpublic void render(int width, int height, Graphics2D g) {\n\t\tDrawingDimensions dim = fitToScreen();\n\t\tg.setRenderingHint(RenderingHints.KEY_ANTIALIASING,\n\t\t\t\tRenderingHints.VALUE_ANTIALIAS_ON);\n\t\tColor original = g.getColor();\n\t\tg.setColor(getBackground());\n\t\tg.fillRect(0, 0, width, height);\n\t\tg.setColor(original);\n\t\tsuper.paintChildren(g);\n\t\tif (graph != null) {\n\t\t\tfor (Line2D l : graph.getLines()) {\n\t\t\t\tl.setLine(dim.toScreen(l.getP1()), dim.toScreen(l.getP2()));\n\t\t\t\tg.draw(l);\n\t\t\t}\n\t\t}\n\t\tfor (RectangleView r : rectangles) {\n\t\t\tr.draw(g, dim);\n\t\t}\n\t\tdrawConstraints(g);\n\t}\n\n\tprivate void setUpDrawingGraphics() {\n\t\tg = (Graphics2D) getGraphics();\n\t\tg.setColor(Color.black);\n\t}\n\n\tdouble selectOffsetX = 0;\n\n\tdouble selectOffsetY = 0;\n\n\tpublic void mousePressed(MouseEvent evt) {\n\t\tint x = evt.getX();\n\t\tint y = evt.getY();\n\t\tconstraints = null;\n\t\tif (dragging == true)\n\t\t\treturn;\n\n\t\tif (x > 0 && x < getWidth() && y > 0 && y < getHeight()) {\n\t\t\tprevX = x;\n\t\t\tprevY = y;\n\t\t\tdragging = true;\n\t\t\tsetUpDrawingGraphics();\n\t\t}\n\t\tif (interactionMode == InteractionMode.Select) {\n\t\t\trect = null;\n\t\t\tfor (RectangleView r : rectangles) {\n\t\t\t\tRectangle2D r2d = new Rectangle2D.Double(r.x, r.y, r.width,\n\t\t\t\t\t\tr.height);\n\t\t\t\tif (r2d.contains(x, y)) {\n\t\t\t\t\trect = r;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (rect != null) {\n\t\t\t\tselectOffsetX = x - rect.x;\n\t\t\t\tselectOffsetY = y - rect.y;\n\t\t\t\trect.colour = Color.PINK;\n\t\t\t}\n\t\t\tpaintComponent(g);\n\t\t}\n\t}\n\n\tpublic void drawConstraints(Graphics2D g) {\n\t\tif (constraints == null)\n\t\t\treturn;\n\t\tg.setRenderingHint(RenderingHints.KEY_ANTIALIASING,\n\t\t\t\tRenderingHints.VALUE_ANTIALIAS_OFF);\n\t\tColor originalColour = g.getColor();\n\t\tfor (Constraint c : constraints) {\n\t\t\tc.colour = Color.BLUE;\n\t\t\ttry {\n\t\t\t\tif (c.isViolated()) {\n\t\t\t\t\tc.colour = Color.RED;\n\t\t\t\t\tg.setColor(c.colour);\n\t\t\t\t\tRectangleView r1 = (RectangleView) c.left.data\n\t\t\t\t\t\t\t.get(RectangleView.class);\n\t\t\t\t\tRectangleView r2 = (RectangleView) c.right.data\n\t\t\t\t\t\t\t.get(RectangleView.class);\n\t\t\t\t\t// Chunk chunk = (Chunk)c.left.data.get(Chunk.class);\n\t\t\t\t\tg.drawLine((int) r1.x, (int) r1.y, (int) r2.x, (int) r2.y);\n\t\t\t\t} else if (c.isTight()) {\n\t\t\t\t\tc.colour = Color.GREEN;\n\t\t\t\t}\n\t\t\t} catch (NullPointerException e) {\n\t\t\t}\n\t\t}\n\t\tg.setColor(originalColour);\n\t}\n\n\tpublic void mouseReleased(MouseEvent evt) {\n\t\tswitch (interactionMode) {\n\t\tcase Create:\n\t\t\tif (dragging == false)\n\t\t\t\treturn;\n\t\t\tg.dispose();\n\t\t\tg = null;\n\t\t\tif (rect != null)\n\t\t\t\trectangles.add(rect);\n\t\t\trect = null;\n\t\t\tbreak;\n\t\tcase Select:\n\t\t\tif (rect != null) {\n\t\t\t\trect.colour = RectangleView.defaultRectColour;\n\t\t\t\tpaintComponent(g);\n\t\t\t\trect = null;\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\t\tdragging = false;\n\t}\n\n\tpublic void mouseDragged(MouseEvent evt) {\n\t\tif (dragging == false)\n\t\t\treturn;\n\t\tint x = Math.min(evt.getX(), getSize().width - 1);\n\t\tx = Math.max(x, 0);\n\t\tint y = Math.min(evt.getY(), getSize().height - 1);\n\t\ty = Math.max(y, 0);\n\t\tpaintComponent(g);\n\t\tif (prevX != x && prevY != y) {\n\t\t\tswitch (interactionMode) {\n\t\t\tcase Create:\n\t\t\t\tRectangleView r = new RectangleView(\"r\" + rectangles.size(),\n\t\t\t\t\t\tMath.min(prevX, x), Math.min(prevY, y), Math.abs(x\n\t\t\t\t\t\t\t\t- prevX), Math.abs(y - prevY));\n\t\t\t\tr.draw(g, fitToScreen());\n\t\t\t\trect = r;\n\t\t\t\tbreak;\n\t\t\tcase Select:\n\t\t\t\tif (rect != null) {\n\t\t\t\t\trect.moveTo(x - selectOffsetX, y - selectOffsetY);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic void mouseEntered(MouseEvent evt) {\n\t}\n\n\tpublic void mouseExited(MouseEvent evt) {\n\t}\n\n\tpublic void mouseClicked(MouseEvent evt) {\n\t}\n\n\tpublic void mouseMoved(MouseEvent evt) {\n\t}\n\n\t/*\n\t * (non-Javadoc)\n\t * \n\t * @see java.util.Observer#update(java.util.Observable, java.lang.Object)\n\t */\n\tpublic void update(Observable p, Object arg1) {\n\t\tconstraints = ((QPRectanglePlacement) p).constraintGenerator\n\t\t\t\t.getConstraints();\n\t\tpaintComponent(getGraphics());\n\t}\n\n\tpublic int print(Graphics g, PageFormat pf, int pi) throws PrinterException {\n\t\tif (pi >= 1) {\n\t\t\treturn Printable.NO_SUCH_PAGE;\n\t\t}\n\t\tGraphics2D g2d = (Graphics2D) g;\n\t\tg2d.translate(pf.getImageableX(), pf.getImageableY());\n\t\tg2d.translate(pf.getImageableWidth() / 2, pf.getImageableHeight() / 2);\n\t\tDimension d = new Dimension();\n\t\tfor (RectangleView r : rectangles) {\n\t\t\td.height = Math.max((int) r.getMaxY(), d.height);\n\t\t\td.width = Math.max((int) r.getMaxX(), d.width);\n\t\t}\n\t\tdouble scale = Math.min(pf.getImageableWidth() / d.width, pf\n\t\t\t\t.getImageableHeight()\n\t\t\t\t/ d.height);\n\t\tif (scale < 1.0) {\n\t\t\tg2d.scale(scale, scale);\n\t\t}\n\t\tg2d.translate(-d.width / 2.0, -d.height / 2.0);\n\t\trender(d.width, d.height, g2d);\n\t\treturn Printable.PAGE_EXISTS;\n\t}\n\n\tpublic void saveAsJPEG(String filename) {\n\t\tDimension size = getSize();\n\t\tBufferedImage image = new BufferedImage(size.width, size.height,\n\t\t\t\tBufferedImage.TYPE_INT_RGB);\n\t\tGraphics2D g2 = image.createGraphics();\n\t\tpaint(g2);\n\t\ttry {\n\t\t\tOutputStream out = new BufferedOutputStream(new FileOutputStream(\n\t\t\t\t\t\"c:/Temp/Test.png\"));\n\t\t\tImageIO.write(image, \"png\", out);\n\t\t\tout.close();\n\t\t} catch (IOException e) {\n\t\t\te.printStackTrace();\n\t\t}\n\t}\n\n\tpublic void setInteractionMode(InteractionMode interactionMode) {\n\t\tthis.interactionMode = interactionMode;\n\t}\n\n\tpublic InteractionMode getInteractionMode() {\n\t\treturn interactionMode;\n\t}\n}\n"
  },
  {
    "path": "experimental/RectangleOverlapSolver/placement/RectanglePlacement.java",
    "content": "package placement;\n\nimport java.util.ArrayList;\n\npublic interface RectanglePlacement {\n\tvoid place(ArrayList<RectangleView> rectangles);\n}\n"
  },
  {
    "path": "experimental/RectangleOverlapSolver/placement/RectangleView.java",
    "content": "package placement;\n\nimport java.awt.Color;\nimport java.awt.Font;\nimport java.awt.FontMetrics;\nimport java.awt.Graphics2D;\nimport java.awt.Point;\nimport java.awt.Rectangle;\nimport java.io.Serializable;\n\npublic class RectangleView implements Serializable {\n\tprivate static final long serialVersionUID = 3617292346069431353L;\n\n\tdouble x, y, width, height, oldX;\n\n\tString label;\n\n\tColor colour = defaultRectColour;\n\n\tstatic final Color defaultRectColour = new Color(228, 228, 205, 200);\n\n\tRectangleView(String label, double x, double y, double w, double h) {\n\t\tthis.label = label;\n\t\tthis.x = x;\n\t\tthis.y = y;\n\t\twidth = w;\n\t\theight = h;\n\t}\n\n\tpublic RectangleView(RectangleView r) {\n\t\tthis(new String(r.label), r.x, r.y, r.width, r.height);\n\t\tcolour = r.colour;\n\t}\n\n\tpublic void draw(Graphics2D g, DrawingDimensions dim) {\n\t\tPoint p = dim.toScreen(x, y);\n\t\tdouble w = width * dim.scale;\n\t\tdouble h = height * dim.scale;\n\t\tdraw(g, p, w, h);\n\t}\n\n\tpublic void draw(Graphics2D g, int x, int y, int w, int h) {\n\t\tdraw(g, new Point(x, y), w, h);\n\t}\n\n\tprivate void draw(Graphics2D g, Point p, double w, double h) {\n\t\tRectangle vr = new Rectangle(p.x, p.y, (int) w, (int) h);\n\t\tg.setPaint(colour);\n\t\tg.fill(vr);\n\t\tg.setPaint(Color.BLACK);\n\t\tg.draw(vr);\n\t\tFont f = new Font(\"Times New Roman\", Font.PLAIN, 24);\n\t\tFontMetrics fm = g.getFontMetrics(f);\n\t\tdouble fh = fm.getHeight();\n\t\tdouble fw = fm.stringWidth(label);\n\t\tint d = fm.getMaxDescent();\n\t\tdouble fsize = 0.9 * 24.0 * Math.min(w / fw, h / fh);\n\t\tf = new Font(\"Times New Roman\", Font.PLAIN, (int) fsize);\n\t\tg.setFont(f);\n\t\tfm = g.getFontMetrics(f);\n\t\tfh = fm.getHeight();\n\t\tfw = fm.stringWidth(label);\n\t\tg.drawString(label, p.x, p.y + (int) (fh / 1.3));\n\t}\n\n\tpublic void moveTo(double x, double y) {\n\t\tthis.x = x;\n\t\tthis.y = y;\n\t}\n\n\tpublic double getMaxY() {\n\t\treturn y+height;\n\t}\n\n\tpublic double getMaxX() {\n\t\treturn x+width;\n\t}\n\n}\n"
  },
  {
    "path": "experimental/RectangleOverlapSolver/placement/ScanListPriorityQueue.java",
    "content": "package placement;\n\nimport java.util.ArrayList;\nimport java.util.Collections;\n\npublic class ScanListPriorityQueue<T extends Comparable> implements\n\t\tMaxPriorityQueue<T> {\n\tArrayList<T> q = new ArrayList<T>();\n\n\tMaxPairingHeap<T> ph = new MaxPairingHeap<T>();\n\n\tpublic void add(T e) {\n\t\tq.add(e);\n\t\tph.add(e);\n\t}\n\n\tpublic T findMax() {\n\t\tT mc = null;\n\t\tif (q.size() > 0) {\n\t\t\tCollections.sort((ArrayList<Constraint>) q);\n\t\t\tmc = q.get(q.size() - 1);\n\t\t\tif (ph.findMax() != mc) {\n\t\t\t\tConstraint c = (Constraint) ph.findMax();\n\t\t\t\tif (c.left.container != c.right.container) {\n\t\t\t\t\tSystem.out.println(\"Vrap\");\n\t\t\t\t}\n\t\t\t}\n\t\t\t// assert (ph.findMax() == mc);\n\t\t}\n\t\treturn mc;\n\t}\n\n\tpublic T deleteMax() {\n\t\tT m = findMax();\n\t\tq.remove(q.size() - 1);\n\t\tph.deleteMax();\n\t\treturn m;\n\t}\n\n\tpublic void merge(MaxPriorityQueue<T> other) {\n\t\tq.addAll(((ScanListPriorityQueue) other).q);\n\t\tph.merge(((ScanListPriorityQueue) other).ph);\n\t\tassert (q.size() == ph.size());\n\t}\n\n\tpublic String toString() {\n\t\tString s = \"\";\n\t\tfor (T e : q) {\n\t\t\ts = s + e.toString() + \";\";\n\t\t}\n\t\treturn s;\n\t}\n\n\tpublic ArrayList<T> getAll() {\n\t\treturn q;\n\t}\n\n\tpublic int size() {\n\t\treturn q.size();\n\t}\n}"
  },
  {
    "path": "experimental/RectangleOverlapSolver/placement/SimpleTest.java",
    "content": "package placement;\n\nimport java.io.File;\nimport java.util.Calendar;\nimport java.util.Random;\n\npublic class SimpleTest {\n\n\t/**\n\t * @param args\n\t */\n\tpublic static void main(String[] args) {  \n\t\tCalendar c=Calendar.getInstance();\n\t\tString dir = \"Test\"+String.format(\"_%1$tF_%1$tH-%1$tM-%1$tS\", c);\n\t\tif(!(new File(dir)).mkdirs()) throw new Error(\"Couldn't make directory!\");\n\t\tRectangleDrawerPanel d = new RectangleDrawerPanel();\n\t\tRandom rand = new Random();\n\t\tfor (int i = 0; i < 100000; i++) {\n\t\t\tif(i%1000==0) System.out.println(\"Test no: \"+i);\n\t\t\td.generateRandom(100,rand,200,200);\n\t\t\ttry {\n\t\t\t\tQPRectanglePlacement r = new QPRectanglePlacement(false, false,\n\t\t\t\t\t\tfalse, QPRectanglePlacement.Algorithm.CACTIVESET, 0, 0,\n\t\t\t\t\t\tfalse);\n\t\t\t\tr.place(d.rectangles);\n\t\t\t} catch (AssertionError e) {\n\t\t\t\td.save(dir+\"/t\"+i);\n\t\t\t\te.printStackTrace();\n\t\t\t}\n\t\t\td.clear();\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "experimental/RectangleOverlapSolver/placement/SlowPriorityQueue.java",
    "content": "package placement;\n\nimport java.util.ArrayList;\nimport java.util.Comparator;\nimport java.util.PriorityQueue;\n\npublic class SlowPriorityQueue<T extends Comparable> implements MaxPriorityQueue<T> {\n\tPriorityQueue<T> q = new PriorityQueue<T>(10, new Comparator<T>() {\n\n\t\tpublic int compare(T a, T b) {\n\t\t\treturn -a.compareTo(b);\n\t\t}\n\t\t\n\t});\n\t\n\tpublic void add(T e) {\n\t\tq.add(e);\n\t}\n\n\tpublic T findMax() {\n\t\treturn q.peek();\n\t}\n\n\tpublic T deleteMax() {\n\t\treturn q.poll();\n\t}\n\n\tpublic void merge(MaxPriorityQueue<T> other) {\n\t\tq.addAll(((SlowPriorityQueue<T>)other).q);\n\t}\n\t\n\tpublic String toString() {\n\t\tString s = \"\";\n\t\tfor(T e:q) {\n\t\t\ts=s+e.toString()+\";\";\n\t\t}\n\t\treturn s;\n\t}\n\t\n\tpublic ArrayList<T> getAll() {\n\t\tArrayList<T> l = new ArrayList<T>();\n\t\tfor(T e:q) {\n\t\t\tl.add(e);\n\t\t}\n\t\treturn l;\n\t}\n\n\tpublic int size() {\n\t\treturn q.size();\n\t}\n}\n"
  },
  {
    "path": "experimental/RectangleOverlapSolver/placement/SolveVPSC.java",
    "content": "package placement;\n\nimport java.util.ArrayList;\nimport java.util.Hashtable;\n\npublic class SolveVPSC implements Placement {\n\tpublic native double solve(String vName[], double vWeight[],\n\t\t\tdouble vDesPos[], int cLeft[], int cRight[], double cGap[],\n\t\t\tdouble vResult[], int mode);\n\tpublic native int generateXConstraints(\n\t\t\tdouble rectMinX[],double rectMaxX[],\n\t\t\tdouble rectMinY[],double rectMaxY[],\n\t\t\tdouble weights[]);\n\tpublic native int generateYConstraints(\n\t\t\tdouble rectMinX[],double rectMaxX[],\n\t\t\tdouble rectMinY[],double rectMaxY[],\n\t\t\tdouble weights[]);\n\tpublic native void getConstraints(int cLeft[], int cRight[], double cGap[]);\n\tpublic native void removeOverlaps(\n\t\t\tdouble rectMinX[],double rectMaxX[],\n\t\t\tdouble rectMinY[],double rectMaxY[]);\n\n\tstatic {\n\t\tSystem.loadLibrary(\"placement_SolveVPSC\");\n\t}\n\n\tHashtable<Variable, Integer> vMap = new Hashtable<Variable, Integer>();\n\n\tVariables vs;\n\n\tConstraints cs;\n\tArrayList<RectangleView> rectangles;\n\tHashtable<String, Integer> varLookup = new Hashtable<String, Integer>();\n\n\tint varCounter = 0;\n\t\n\tboolean split = false;\n\n\t/* (non-Javadoc)\n\t * @see placement.Pl#addConstraint(java.lang.String, java.lang.String, double)\n\t */\n\tpublic Constraint addConstraint(String u, String v, double sep) {\n\t\tVariable v1 = vs.get(varLookup.get(u));\n\t\tVariable v2 = vs.get(varLookup.get(v));\n\t\tConstraint c = new Constraint(v1, v2, sep);\n\t\tcs.add(c);\n\t\treturn c;\n\t}\n\n\tpublic SolveVPSC(ArrayList<RectangleView> rectangles) {\n\t\tthis.rectangles=rectangles;\n\t}\n\tpublic SolveVPSC(Variable[] vs) {\n\t\tnew Blocks(vs);\n\t\tthis.vs = new Variables();\n\t\tcs = new Constraints();\n\t\tint varCounter=0;\n\t\tfor (Variable v : vs) {\n\t\t\tthis.vs.add(v);\n\t\t\tvMap.put(v, varCounter);\n\t\t\tvarLookup.put(v.name, varCounter++);\n\t\t}\n\t}\n\tpublic SolveVPSC(Variables vars, Constraints constraints) {\n\t\tthis.vs = vars;\n\t\tthis.cs = constraints;\n\t\tint varCounter = 0;\n\t\tfor (Variable v : vs) {\n\t\t\tvMap.put(v, varCounter++);\n\t\t}\n\t}\n\n\tpublic double solve() throws Exception {\n\t\tString[] vName = new String[vs.size()];\n\t\tdouble[] vWeight = new double[vs.size()];\n\t\tdouble[] vDesPos = new double[vs.size()];\n\t\tdouble[] vResult = new double[vs.size()];\n\t\tint i = 0;\n\t\tfor (Variable v : vs) {\n\t\t\tvMap.put(v, i);\n\t\t\tvName[i] = v.name;\n\t\t\tvWeight[i] = v.weight;\n\t\t\tvDesPos[i++] = v.desiredPosition;\n\t\t}\n\t\tint[] cLeft = new int[cs.size()];\n\t\tint[] cRight = new int[cs.size()];\n\t\tdouble[] cGap = new double[cs.size()];\n\t\ti = 0;\n\t\tfor (Constraint c : cs) {\n\t\t\tcLeft[i] = vMap.get(c.left);\n\t\t\tcRight[i] = vMap.get(c.right);\n\t\t\tcGap[i++] = c.separation;\n\t\t}\n\t\tdouble cost = solve(vName, vWeight, vDesPos, cLeft, cRight,\n\t\t\t\tcGap, vResult, split?1:0);\n\t\tfor (i = 0; i < vs.size(); i++) {\n\t\t\tVariable v = vs.get(i);/*\n\t\t\tSystem.out.println(\"var=\" + v.name + \" v1=\" + v.getPosition()\n\t\t\t\t\t+ \" v2=\" + vResult[i]);*/\n\t\t\tv.offset = vResult[i];\n\t\t\tif(v.container!=null) v.container.position = 0;\n\t\t}\n\t\treturn cost;\n\t}\n\t\n\tpublic void generateXConstraints(double weights[]) {\n\t\tint n= rectangles.size();\n\t\tdouble[] rectMinX = new double[n], rectMaxX = new double[n], rectMinY = new double[n], rectMaxY = new double[n];\n\t\tvs=new Variables();\n\t\tfor(int i=0;i<n;i++) {\n\t\t\trectMinX[i]=rectangles.get(i).x;\n\t\t\trectMaxX[i]=rectangles.get(i).getMaxX();\n\t\t\trectMinY[i]=rectangles.get(i).y;\n\t\t\trectMaxY[i]=rectangles.get(i).getMaxY();\n\t\t\tvs.add(new Variable(\"r\"+i,rectMinX[i],1));\n\t\t}\n\t\tint m = generateXConstraints(\n\t\t\t\trectMinX, rectMaxX,\n\t\t\t\t rectMinY, rectMaxY,\n\t\t\t\t weights);\n\t\tint[] cLeft=new int[m], cRight=new int[m];\n\t\tdouble[] cGap=new double[m];\n\t\tgetConstraints(cLeft, cRight, cGap);\n\t\tcs = new Constraints();\n\t\tfor(int i=0;i<m;i++) {\n\t\t\tcs.add(new Constraint(vs.get(cLeft[i]),vs.get(cRight[i]),cGap[i]));\n\t\t}\n\t}\n\tpublic void generateYConstraints(double weights[]) {\n\t\tint n= rectangles.size();\n\t\tdouble[] rectMinX = new double[n], rectMaxX = new double[n], rectMinY = new double[n], rectMaxY = new double[n];\n\t\tvs=new Variables();\n\t\tfor(int i=0;i<n;i++) {\n\t\t\trectMinX[i]=rectangles.get(i).x;\n\t\t\trectMaxX[i]=rectangles.get(i).getMaxX();\n\t\t\trectMinY[i]=rectangles.get(i).y;\n\t\t\trectMaxY[i]=rectangles.get(i).getMaxY();\n\t\t\tvs.add(new Variable(\"r\"+i,rectMinY[i],1));\n\t\t}\n\t\tint m = generateYConstraints(\n\t\t\t\trectMinX, rectMaxX,\n\t\t\t\t rectMinY, rectMaxY,\n\t\t\t\t weights);\n\t\tint[] cLeft=new int[m], cRight=new int[m];\n\t\tdouble[] cGap=new double[m];\n\t\tgetConstraints(cLeft, cRight, cGap);\n\t\tcs = new Constraints();\n\t\tfor(int i=0;i<m;i++) {\n\t\t\tcs.add(new Constraint(vs.get(cLeft[i]),vs.get(cRight[i]),cGap[i]));\n\t\t}\n\t}\n\n\tpublic Constraints getConstraints() {\n\t\treturn cs;\n\t}\n\n\tpublic Variables getVariables() {\n\t\treturn vs;\n\t}\n\tpublic void removeOverlaps() {\n\t\tint n= rectangles.size();\n\t\tdouble[] rectMinX = new double[n], rectMaxX = new double[n], rectMinY = new double[n], rectMaxY = new double[n];\n\t\tfor(int i=0;i<n;i++) {\n\t\t\trectMinX[i]=rectangles.get(i).x;\n\t\t\trectMaxX[i]=rectangles.get(i).getMaxX();\n\t\t\trectMinY[i]=rectangles.get(i).y;\n\t\t\trectMaxY[i]=rectangles.get(i).getMaxY();\n\t\t}\n\t\tremoveOverlaps(rectMinX,rectMaxX,rectMinY,rectMaxY);\n\t\tfor(int i=0;i<n;i++) {\n\t\t\tRectangleView r=rectangles.get(i);\n\t\t\tr.moveTo(rectMinX[i],rectMinY[i]);\n\t\t}\n\t}\n\n}\n"
  },
  {
    "path": "experimental/RectangleOverlapSolver/placement/Variable.java",
    "content": "/*\n * Created on 21/02/2005\n *\n * TODO To change the template for this generated file go to\n * Window - Preferences - Java - Code Style - Code Templates\n */\npackage placement;\n\nimport java.awt.Color;\nimport java.text.DecimalFormat;\nimport java.util.HashMap;\n\n/**\n * @author dwyer_2\n * \n * TODO To change the template for this generated type comment go to Window -\n * Preferences - Java - Code Style - Code Templates\n */\npublic class Variable {\n\tString name;\n\t\n\tdouble desiredPosition;\n\n\tdouble weight;\n\n\tdouble constraintDepth;\n\n\tdouble offset;\n\n\tBlock container;\n\n\tConstraints inConstraints = new Constraints();\n\n\tConstraints outConstraints = new Constraints();\n\n\tVariable(String name, double desiredPosition, double weight) {\n\t\tthis.desiredPosition = desiredPosition;\n\t\tthis.weight = weight;\n\t\tthis.name = name;\n\t}\n\n\tHashMap<Class, Object> data = new HashMap<Class, Object>();\n\n\tdouble getPosition() {\n\t\tif (container != null) {\n\t\t\treturn container.position + offset;\n\t\t} else\n\t\t\treturn offset;\n\t}\n\n\tpublic String toString() {\n\t\tDecimalFormat nf = new DecimalFormat(\"#.##\");\n\t\treturn \"(\" + name + \"=\" + nf.format(getPosition()) + \")\";\n\t}\n\n\tpublic void addInConstraint(Constraint c) {\n\t\tinConstraints.add(c);\n\t}\n\n\tpublic void addOutConstraint(Constraint c) {\n\t\toutConstraints.add(c);\n\t\t// if(container!=null) container.addOutConstraint(c);\n\t}\n\n\tpublic Constraints getInConstraints() {\n\t\treturn inConstraints;\n\t}\n\n\tpublic Constraints getOutConstraints() {\n\t\treturn outConstraints;\n\t}\n\n\tboolean visited = false;\n\n\tpublic Color colour;\n\n\tpublic int inConstraintCounter;\n}\n"
  },
  {
    "path": "experimental/RectangleOverlapSolver/placement/Variables.java",
    "content": "/*\n * Created on 28/02/2005\n *\n * TODO To change the template for this generated file go to\n * Window - Preferences - Java - Code Style - Code Templates\n */\npackage placement;\n\nimport java.util.ArrayList;\nimport java.util.Collections;\nimport java.util.Comparator;\n\n/**\n * @author dwyer\n */\n\npublic class Variables extends ArrayList<Variable> {\n\tVariables() {\n\t\tsuper();\n\t}\n\n\tVariables(Variable[] vs) {\n\t\tfor (Variable v : vs) {\n\t\t\tadd(v);\n\t\t}\n\t}\n\n\tVariables getSources() {\n\t\tVariables sources = new Variables();\n\t\tfor (Variable v : this) {\n\t\t\tif (v.getInConstraints().size() == 0) {\n\t\t\t\tv.visited = true;\n\t\t\t\tsources.add(v);\n\t\t\t}\n\t\t}\n\t\treturn sources;\n\t}\n\n\tdouble getMaxPos() {\n\t\tdouble max = 0;\n\t\tfor (Variable v : this) {\n\t\t\tif (v.getPosition() > max)\n\t\t\t\tmax = v.getPosition();\n\t\t}\n\t\treturn max;\n\t}\n\n\tdouble getMinPos() {\n\t\tdouble min = Double.MAX_VALUE;\n\t\tfor (Variable v : this) {\n\t\t\tif (v.getPosition() < min)\n\t\t\t\tmin = v.getPosition();\n\t\t}\n\t\treturn min;\n\t}\n\n\tboolean contains(String label) {\n\t\tfor (Variable v : this) {\n\t\t\tif (v.name.equals(label)) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t}\n\n\t/**\n\t * Sorts the variables in this list from lowest constraintDepth to highest.\n\t */\n\tvoid sortOnConstraintDepth() {\n\t\tCollections.sort(this, new Comparator<Variable>() {\n\t\t\tpublic int compare(Variable v1, Variable v2) {\n\t\t\t\tif (v1.constraintDepth > v2.constraintDepth)\n\t\t\t\t\treturn 1;\n\t\t\t\tif (v1.constraintDepth < v2.constraintDepth)\n\t\t\t\t\treturn -1;\n\t\t\t\treturn 0;\n\t\t\t}\n\n\t\t});\n\t}\n\n\tpublic Variable max() {\n\t\tVariable max = get(0);\n\t\tdouble m = max.getPosition();\n\t\tfor (int i = 1;i < size();i++) {\n\t\t\tVariable v = get(i);\n\t\t\tdouble p = v.getPosition();\n\t\t\tif (p > m) {\n\t\t\t\tmax = v;\n\t\t\t\tm = p;\n\t\t\t}\n\t\t}\n\t\treturn max;\n\t}\n\n\tpublic Variable min() {\n\t\tVariable min = get(0);\n\t\tdouble m = min.getPosition();\n\t\tfor (int i = 1;i < size();i++) {\n\t\t\tVariable v = get(i);\n\t\t\tdouble p = v.getPosition();\n\t\t\tif (p < m) {\n\t\t\t\tmin = v;\n\t\t\t\tm = p;\n\t\t\t}\n\t\t}\n\t\treturn min;\n\t}\n}\n"
  },
  {
    "path": "experimental/RectangleOverlapSolver/placement/prolog/Part 1.2",
    "content": "<div class=\"moz-text-flowed\" style=\"font-family: -moz-fixed\">\n\nno documentation I am afraid\n\n\nOn 07/02/2005, at 1:22 PM, Tim Dwyer wrote:\n\n> Hi Peter,\n>\n> Can you please send me your prolog for the overlap removal algorithm?  \n> I'm keen to start hacking.\n>\n> Thanks\n>\n> Tim\n>\n>\n</div>"
  },
  {
    "path": "experimental/RectangleOverlapSolver/placement/prolog/Part 1.4",
    "content": "<div class=\"moz-text-flowed\" style=\"font-family: -moz-fixed\">\n</div>"
  },
  {
    "path": "experimental/RectangleOverlapSolver/placement/prolog/blocks.pl",
    "content": "\n\n\nprob1(\n\t[block(x1,1,3),\n\tblock(x2,1,2),\n\tblock(x3,1,3),\n\tblock(x4,3,2),\n\tblock(x5,3,1)],\n\t[x2 >= x1 + 1,\n\tx3 >= x1 + 1,\n\tx4 >= x2 + 1,\n\tx4 >= x3 + 1,\n\tx5 >= x4 + 1]\n    ).\n%[x5>=x4+1]: [ (x4, 2.66667), (x5, 3.66667)]\n%[x3>=x1+1, x2>=x1+1]: [ (x1, 0.375), (x2, 1.375), (x3, 1.375)]\n\nprob1a(\n\t[\n\tblock(x3,1,3),\n        block(x1,1,3),\n\tblock(x4,3,2),\n\tblock(x5,3,1),\n\tblock(x2,1,2)\n        ],\n\t[x2 >= x1 + 1,\n\tx3 >= x1 + 1,\n\tx4 >= x2 + 1,\n\tx4 >= x3 + 1,\n\tx5 >= x4 + 1]\n    ).\n\nprob2(\n\t[block(x1,0,1),\n\tblock(x2,1,1),\n\tblock(x3,4,1),\n\tblock(x4,4,1),\n\tblock(x5,3,1),\n\tblock(x6,6,1),\n\tblock(x7,5,1),\n\tblock(x8,0,1),\n\tblock(x9,7,1)],\n\t[x2 >= x1 + 1,\n\tx3 >= x1 + 1,\n\tx4 >= x1 + 1,\n\tx5 >= x2 + 3,\n\tx5 >= x3 + 1,\n\tx6 >= x3 + 1,\n\tx5 >= x4 + 1,\n\tx8 >= x4 + 1,\n\tx7 >= x5 + 1,\n\tx9 >= x6 + 4,\n\tx9 >= x7 + 2,\n\tx9 >= x8 + 3]\n    ).\n\n%[x9>=x6+4]: [ (x6, 4.5), (x9, 8.5)]\n%[ (x7, 5)]\n%[x5>=x3+1]: [ (x3, 3), (x5, 4)]\n%[x8>=x4+1]: [ (x4, 1.5), (x8, 2.5)]\n%[x2>=x1+1]: [ (x1, 0), (x2, 1)]\n\nprob3(\n\t[block(x1,0,1),\n\tblock(x2,0,1),\n\tblock(x3,0,1),\n\tblock(x4,0,1),\n\tblock(x5,8,1),\n\tblock(x6,8,1),\n\tblock(x7,8,1),\n\tblock(x8,8,1),\n\tblock(x9,4,20)\n        ],\n\t[x2 >= x1 + 1,\n\tx3 >= x2 + 1,\n\tx4 >= x3 + 1,\n\tx6 >= x5 + 1,\n\tx7 >= x6 + 1,\n\tx8 >= x7 + 1,\n\tx3 >= x9 + 1\n        ]\n     ).\n\n\t\nprob4(\n\t[block(x1,1,3),\n\t block(x4,3,2),\n\t block(x5,3,1),\n\t block(x2,1,2),\n\t block(x3,1,2)\n        ],\n\t[x2 >= x1 + 1,\n\t x3 >= x1 + 1,\n\t x4 >= x2 + 1,\n\t x4 >= x3 + 1,\n\t x5 >= x4 + 1\n        ]\n    ).\n\nprob5(\n\t[block(x1,1,1),\n\t block(x2,2,1),\n\t block(x3,2,1),\n\t block(x4,3,1),\n\t block(x5,5,1),\n\t block(x6,6,1),\n\t block(x7,7,1)]\n     ,\n\t[x2 >= x1 + 2,\n\tx3 >= x1 + 2,\n\tx5 >= x4 + 2,\n\tx6 >= x2 + 2,\n\tx7 >= x5 + 2,\n\tx4 >= x3 + 1,\n\tx7 >= x6 + 2\n    ]).\n\nprob6([\n        block(x1,0,1),\n\tblock(x2,2,1),\n\tblock(x3,1,8),\n\tblock(x4,3,1)\n      ],\n      [\n        x2 >= x1 + 3,\n\tx3 >= x1 + 3,\n\tx4 >= x2 + 1.5\n      ]).\n\n\nprob7([\n       block(x1,1,7),\n       block(x2,-1,2),\n       block(x3,1,2),\n       block(x4,-1,2),\n       block(x5,1,2),\n       block(x6,-1,2),\n       block(x7,1,2),\n       block(x8,-1,2),\n       block(x9,1,2),\n       block(x10,-1,7)\n      ],[\n       x2 >= x1 + 0,\n       x3 >= x1 + 0, \n       x4 >= x1 + 0, \n       x5 >= x1 + 0, \n       x6 >= x1 + 0, \n       x7 >= x1 + 0, \n       x8 >= x1 + 0, \n       x9 >= x1 + 0, \n       x10 >= x2 + 0, \n       x10 >= x3 + 0, \n       x10 >= x4 + 0, \n       x10 >= x5 + 0, \n       x10 >= x6 + 0, \n       x10 >= x7 + 0, \n       x10 >= x8 + 0, \n       x10 >= x9 + 0\n   ]).\n\n      \nprob8([\n       block(x1,0,2),\n\tblock(x2,0,1),\n\tblock(x3,3,2),\n\tblock(x4,2,5),\n\tblock(x5,5,5),\n        block(x6,4,2),\n\tblock(x7,7,1),\n\tblock(x8,7,2),\n\tblock(x9,1,4)\n    ],[\n        x2 >= x1 + 1,\n        x3 >= x2 + 1,\n        x4 >= x3 + 1,\n        x5 >= x4 + 1,\n        x6 >= x5 + 1,\n        x7 >= x6 + 1,\n        x8 >= x7 + 1,\n\tx9 >= x1 + 1,\n\tx8 >= x9 + 6\n    ]).\n\n\n\ninit_block(B,Offset) :- init_block_e(B,Offset).\nmerge_blocks(PlaceA,PlaceB,Min,Active,PlaceAB) :-\n\tmerge_blocks_e(PlaceA,PlaceB,Min,Active,PlaceAB).\ndesired_position(Offsets, WPosn, Weight, Pos) :-\n\tdesired_position_e(Offsets, WPosn, Weight, Pos).\n\n%% init_block(B,Offset) :- init_block_m(B,Offset).\n%% merge_blocks(PlaceA,PlaceB,Min,Active,PlaceAB) :-\n%% \tmerge_blocks_m(PlaceA,PlaceB,Min,Active,PlaceAB).\n%% desired_position(Offsets, WPosn, Weight, Pos) :-\n%% \tdesired_position_m(Offsets, WPosn, Weight, Pos).\n\n\n%%% euclidean distance %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \ninit_block_e(Block,Offset) :-\n\tBlock = block(_Name,Pos,Weight),\n\tWPosn is Pos * Weight,\n\tOffset = offsetb(0,WPosn,Block).\nmerge_blocks_e(PlaceA,PlaceB,Min,Active,PlaceAB) :-\n\tPlaceA = placed(PosA,WeightA,WPosnA,ConstraintsA,OffsetsA),\n\tPlaceB = placed(PosB,WeightB,WPosnB,ConstraintsB,OffsetsB),\n\tWeightAB is WeightA + WeightB,\n\tOffA is PosA - PosB + Min,\n\tWPosnAB is WPosnA + WPosnB - OffA * WeightA,\n\tPosAB is WPosnAB / WeightAB,\n\t\n\tmove_offsets(OffsetsA, OffA, OffsetsAM),\n\tappend(OffsetsAM, OffsetsB, OffsetsAB),\n\tappend(ConstraintsA,[Active|ConstraintsB],ConstraintsAB),\n\tPlaceAB = placed(PosAB,WeightAB,WPosnAB,ConstraintsAB,OffsetsAB).\ndesired_position_e(Offsets, WPosn, Weight, Pos) :-\n\tdesired_position_e(Offsets, 0, 0, WPosn, Weight),\n\tPos is WPosn/Weight.\n\ndesired_position_e([], WPosn, Weight, WPosn, Weight).\ndesired_position_e([Offset|Os], WPosn0, Weight0, WPosn, Weight) :-\n\tOffset = offsetb(PosB,_,Block),\n\tBlock = block(_,DesB,WeightB),\n\tWPosn1 is WPosn0 + (DesB - PosB) * WeightB,\n\tWeight1 is Weight0 + WeightB,\n\tdesired_position_e(Os, WPosn1, Weight1, WPosn, Weight).\n%%% manhattan distance %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \ninit_block_m(Block,Offset) :-\n\tBlock = block(_Name,Pos,Weight),\n\tWPosn = [(Pos,Weight)],\n\tOffset = offsetb(0,WPosn,Block).\nmerge_blocks_m(PlaceA,PlaceB,Min,Active,PlaceAB) :-\n\tPlaceA = placed(PosA,WeightA,WPosnA,ConstraintsA,OffsetsA),\n\tPlaceB = placed(PosB,WeightB,WPosnB,ConstraintsB,OffsetsB),\n\tWeightAB is WeightA + WeightB,\n\tOffA is PosA - PosB + Min,\n\ttranslate(WPosnA, OffA, NWPosnA),\n\tappend(NWPosnA,WPosnB,UnsortedWPosnAB),\n\tmsort(UnsortedWPosnAB, WPosnAB),\n\tcompute_opt(WPosnAB,WeightAB,PosAB),\n\tmove_offsets(OffsetsA, OffA, OffsetsAM),\n\tappend(OffsetsAM, OffsetsB, OffsetsAB),\n\tappend(ConstraintsA,[Active|ConstraintsB],ConstraintsAB),\n\tPlaceAB = placed(PosAB,WeightAB,WPosnAB,ConstraintsAB,OffsetsAB).\ndesired_position_m(Offsets, WPosn, Weight, Pos) :-\n\tdesired_position_m(Offsets, [], 0, UnsortedWPosn, Weight),\n\tmsort(UnsortedWPosn,WPosn),\n\tcompute_opt(WPosn,Weight,Pos).\n\ndesired_position_m([], WPosn, Weight, WPosn, Weight).\ndesired_position_m([Offset|Os], WPosn0, Weight0, WPosn, Weight) :-\n\tOffset = offsetb(PosB,_,Block),\n\tBlock = block(_,DesB,WeightB),\n\tAdjPosB is (DesB - PosB),\n\tWPosn1 = [(AdjPosB,WeightB)| WPosn0],\n\tWeight1 is Weight0 + WeightB,\n\tdesired_position_m(Os, WPosn1, Weight1, WPosn, Weight).\n\ntranslate([], _, []).\ntranslate([(P,W)|PWs], Off, [(PO,W)|Ts]) :-\n\tPO is P - Off,\n\ttranslate(PWs, Off, Ts).\n\ncompute_opt([(P,W)|PWs], Weight, Pos) :-\n\tWeight1 is Weight - 2 * W,\n\t(Weight1 < 0 ->\n\t    Pos = P\n\t;\n\t    compute_opt(PWs, Weight1, Pos)\n\t).\n\n\n% :- type block --> block(name,desired-position,weight)\n\n% :- type placed --> placed(position, weight, wposn, [constraints], [offsets]).\n\n% :- type offset --> offsetb(offset,wposn,block)\n%                  ; offsetp(offset,placed)\n\ninitial([],[]).\ninitial([First|Blocks], \n\t       [placed(Des,Weight,WPosn,[],[Offset])|Rest]) :-\n\tinit_block(First,Offset),\n\tFirst = block(_Name,Des,Weight),\n\tOffset = offsetb(_,WPosn,_),\n\tinitial(Blocks, Rest).\n\noverlaps(Placed0, Constraints, Placed) :-\n%% change line below for different overlap\n\t(overlap2(Placed0,Constraints,Place1,Place2,Rest,Violated) ->\n\t    merge(Place1,Place2,Violated,Place12),\n\t    %write_all_pos([Place12]),\n\t    split(Place12, Places12),\n\t    %write_all_pos(Places12),\n\t    append(Places12, Rest, Placed1),\n\t    overlaps(Placed1, Constraints, Placed)\n\t;\n\t    Placed = Placed0\n\t).\n\noverlap([Placea|Placed0], Constraints, Place1, Place2, Rest, Violated) :-\n\t(overlapc(Placed0, Constraints, Placea, Placeb, Restab, Violated) ->\n\t    Place1 = Placea,\n\t    Place2 = Placeb,\n\t    Rest = Restab\n\t;\n\t    Rest = [Placea|Rest1],\n\t    overlap(Placed0, Constraints, Place1, Place2, Rest1, Violated)\n\t).\n\noverlapc([Placeb|Placed0], Constraints, Place1, Place2, Rest, Violated) :-\n\t(overlapcc(Constraints, Placeb, Place1,Violated) ->\n\t    Place2 = Placeb,\n\t    Rest = Placed0\n\t;\n\t    Rest = [Placeb|Rest1],\n\t    overlapc(Placed0, Constraints, Place1, Place2, Rest1, Violated)\n\t).\n\n%% \noverlapcc(Constraints, Place1, Place2, Violated) :-\n\tget_positions(Place1, [], List1),\n\tget_positions(Place2, [], List2),\n\tappend(List1,List2,All),\n\tcheck_constraints(Constraints, All, Violated),\n\tViolated = [_|_].\n\ncheck_constraints([], _, []).\ncheck_constraints([X >= Y + D|Constraints], PosList, Violated) :-\n\t( member((X,XP), PosList),\n\t  member((Y,YP), PosList),\n\t  XP + 0.0001 < YP + D ->\n\t      Violated = [X >= Y + D|Violated1]\n\t  ;\n\t      Violated = Violated1\n\t),\n\tcheck_constraints(Constraints, PosList,Violated1).\n\n%%% second version of \"overlap\" returns the pair that overlap in the\n%%% first constraint that is violated\noverlap2(Placed, Constraints, Place1, Place2, Rest, Violated) :-\n\tget_all_positions(Placed, [], List),\n\tcheck_constraints(Constraints, List, [Violate|_]),\n\tViolate = (X >= Y + _),\n\tremove_place(Placed, X, Place1, Rest1),\n\tremove_place(Rest1, Y, Place2, Rest),\n\toverlapcc(Constraints, Place1, Place2, Violated).\n\nget_all_positions([], L, L).\nget_all_positions([Place|Placed], L0, L) :-\n\tget_positions(Place, L0, L1),\n\tget_all_positions(Placed, L1, L).\n\nremove_place([PlaceA|Placed], Var, Place, Rest) :-\n\tPlaceA = placed(_PosA,_WeightA,_WPosnA,_ConstraintsA,OffsetsA),\n\t(member(offsetb(_,_,block(Var,_,_)), OffsetsA) ->\n\t    Place= PlaceA,\n\t    Rest = Placed\n\t;\n\t    Rest = [PlaceA|Rest1],\n\t    remove_place(Placed,Var,Place,Rest1)\n\t).\n\t\n\nwrite_all_pos(Ps) :-\n\tcanonify(Ps,CPs),\n\tsort(CPs,SCPs),\n\twrite_all_pos_actual(SCPs).\n\ncanonify([],[]).\ncanonify([P|Ps],[ConstraintsS - LS|Rest]) :-\n\tP = placed(_,_,_,Constraints,_), \n\tsort(Constraints,ConstraintsS),\n\tget_positions(P,[],L),\n\tsort(L,LS),\n\tcanonify(Ps, Rest).\n\nwrite_all_pos_actual([]).\nwrite_all_pos_actual([ConstraintsS - LS |Ps]) :-\n\t(ConstraintsS = [] -> true ; write(ConstraintsS), write(': ')),\n\twrite(LS), nl,\n\twrite_all_pos_actual(Ps).\n\nget_positions(placed(Pos, _, _,_, Offsets), ListOfPos0, ListOfPos) :-\n\tget_positions_offsets(Offsets, Pos, ListOfPos0, ListOfPos).\n\nget_positions(placed(_, _, _, _, Offsets), BPos, ListOfPos0, ListOfPos) :-\n\tget_positions_offsets(Offsets, BPos, ListOfPos0, ListOfPos).\nget_positions_offsets([], _, ListOfPos, ListOfPos).\nget_positions_offsets([Offset|Offsets], BPos, ListOfPos0, ListOfPos) :-\n\t(Offset = offsetb(Off,_,block(Name,_,_)) ->\n\t    NPos is BPos + Off,\n\t    ListOfPos1 = [(Name,NPos)|ListOfPos0]\n\t;\n\t    Offset = offsetp(Off,Placed),\n\t    BPos1 is BPos + Off, \n\t    get_positions(Placed, BPos1, ListOfPos0, ListOfPos1)\n\t),\n\tget_positions_offsets(Offsets, BPos, ListOfPos1, ListOfPos).\n\n\nmerge(Place1, Place2, Violated, Place12) :-\n\tget_positions(Place1, [], List1),\n\tget_positions(Place2, [], List2),\n\t( get_diffs(Violated, List1, List2, Diffs) ->\n\t    PlaceA = Place1,\n\t    PlaceB = Place2\n\t;\n\t    get_diffs(Violated, List2, List1, Diffs),\n\t    PlaceA = Place2,\n\t    PlaceB = Place1\n        ),\n\tmaximum(Diffs, Violated, Min, Active),\n\tmerge_blocks(PlaceA,PlaceB,Min,Active,Place12),\n%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diagnostics %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n\tget_positions(Place12,[],List12),\n\twrite('merge: '),\n\twrite(List1), write(' '), write(List2), write(' -> '), write(Active),\n\twrite(' -> '), write(List12), nl,\n\t%write('check: '),write(Old_PosAB is PosAB), nl,\n\ttrue.\n\nmove_offsets([],_,[]).\nmove_offsets([offsetb(Off0,WPosn,Block)|Os], OffA, [offsetb(Off,WPosn,Block)|MOs]) :-\n\tOff is Off0 + OffA,\n\tmove_offsets(Os,OffA,MOs).\nmove_offsets([offsetp(Off0,Placed)|Os], OffA, [offsetp(Off,Placed)|MOs]) :-\n\tOff is Off0 + OffA,\n\tmove_offsets(Os,OffA,MOs).\n\n%% diffs are how much each constraint is violated\nget_diffs([], _, _, []).\nget_diffs([X >= Y + D|Constraints], List1, List2, [Diff|Diffs]) :-\n\tmember((X,XP), List1), !,\n\tmember((Y,YP), List2), !,\n\tDiff is YP + D - XP,\n\tget_diffs(Constraints, List1,List2,Diffs).\n\n%% Min will be bound to the maximum difference \n%% and active to the corresponding constraint\nmaximum([Diff|Diffs], [C|Cs], Min, Active) :-\n\tmaximum(Diffs,Cs,Diff,Min,C,Active).\nmaximum([],[],Min,Min,Active,Active).\nmaximum([D|Ds], [C|Cs], Min0, Min, Active0, Active) :-\n\t(D > Min0 ->\n\t    Min1 = D,\n\t    Active1 = C\n\t;\n\t    Min1 = Min0,\n\t    Active1 = Active0\n\t),\n\tmaximum(Ds,Cs,Min1,Min,Active1,Active).\n\nsplit(Place, Places) :-\n\tPlace = placed(_Pos,_Weight,_WPosn,Constraints,_Offsets), \n\tcheck_split(Constraints, Place, Places).\n\t\n\ncheck_split([], Place, [Place]).\ncheck_split([C|Cs], Place, ListPlaced) :-\n\tC = (VA >= VB + D),\n\tPlace = placed(_Pos,_Weight,_WPosn,Constraints,Offsets),\n\tdelete(Constraints,C,RConstraints),\n\treachable(RConstraints, [VA], VarsA),\n\treachable(RConstraints, [VB], VarsB),\n\t% check disjoint\n\t(intersect(VarsA,VarsB) -> error(disjoint) ; true),\n\tsplit_constraints(RConstraints, VarsA, ConstraintsA, ConstraintsB),\n\tsplit_offsets(Offsets, VarsA, OffsetsA, OffsetsB),\n        member(offsetb(OffA,_,block(VA,_,_)),OffsetsA),!,\n        member(offsetb(OffB,_,block(VB,_,_)),OffsetsB),!,\n\tdesired_position(OffsetsA, WPosnA, WeightA, PosA),\n\tdesired_position(OffsetsB, WPosnB, WeightB, PosB),\n\t((PosA + OffA) >= 0.0001 + (PosB + OffB) + D ->\n\t    PlacedA = placed(PosA, WeightA, WPosnA, ConstraintsA, OffsetsA),\n\t    PlacedB = placed(PosB, WeightB, WPosnB, ConstraintsB, OffsetsB),\n\t    get_positions(PlacedA,[],List1),\n\t    get_positions(PlacedB,[],List2),\n\t    get_positions(Place,[],List12),\n\t    Active = C,\n\t    write('split: '),\n\t     write(List12), write(' -> '), write(Active),\n\t    write(' -> '), write(List1), write(' '), write(List2), nl,\n\t    split(PlacedA, ListPlacedA),\n\t    split(PlacedB, ListPlacedB),\n\t    append(ListPlacedA,ListPlacedB,ListPlaced)\n\t;\n\t    check_split(Cs, Place, ListPlaced)\n\t).\n\nintersect(L1,L2) :- member(A,L1), member(A,L2).\n\n\n% reachable(Cs,Vs0,Vs) - Vs is the subset of variables Vs0 \n%    that are referenced by the constraints Cs\nreachable(Cs, Vs0, Vs) :-\n\tsort(Vs0,SVs0),\n\treachable2(Cs, SVs0, Vs1),\n\tsort(Vs1,SVs1),\n\t(SVs0 = SVs1 ->\n\t    Vs = SVs1\n\t;\n\t    reachable(Cs,SVs1,Vs)\n\t).\nreachable2([], Vs, Vs).\nreachable2([VA >= VB + _|Cs], Vs0, Vs) :-\n\t(member(VA,Vs0) ->\n\t    Vs1 = [VB|Vs0]\n\t; (member(VB,Vs0) ->\n\t    Vs1 = [VA|Vs0]\n\t;\n\t    Vs1 = Vs0\n\t)),\n\treachable2(Cs, Vs1, Vs).\n\n\npartition(Cs, XA >= _YA + _D, ConstraintsA, ConstraintsB) :-\n\tdeleteall(Cs, [], [XA], ConstraintsA, ConstraintsB).\n\ndeleteall([], Rest, _, [], Rest).\ndeleteall([X >= Y + D|Cs], Seen, Vars, Cin, Cout) :-\n\t(member(X,Vars) ->\n\t    Cin = [X >= Y + D|Cin1],\n\t    append(Seen,Cs,All),\n\t    deleteall(All,[],[Y|Vars],Cin1,Cout)\n\t; (member(Y,Vars) ->\n\t    Cin = [X >= Y + D|Cin1],\n\t    append(Seen,Cs,All),\n\t    deleteall(All,[],[X|Vars],Cin1,Cout)\n\t;\n\t    deleteall(Cs,[X + Y >= D|Seen], Vars, Cin, Cout)\n\t)).\n\t    \nsplit_constraints([], _, [], []).\nsplit_constraints([VA >= VB + D|Cs], Vars, CA, CB) :-\n\t(member(VA,Vars), member(VB,Vars) ->\n\t    CA = [VA >= VB + D|CA1],\n\t    CB = CB1\n\t;\n\t    CA = CA1,\n\t    CB = [VA >= VB + D|CB1]\n\t),\n\tsplit_constraints(Cs,Vars,CA1,CB1).\n\n\t    \nsplit_offsets([], _, [], []).\nsplit_offsets([Offset|Cs], Vars, CA, CB) :-\n\tOffset = offsetb(_,_,Block),\n\tBlock = block(Name,_,_),\n\t(member(Name,Vars) ->\n\t    CA = [Offset|CA1],\n\t    CB = CB1\n\t;\n\t    CA = CA1,\n\t    CB = [Offset|CB1]\n\t),\n\tsplit_offsets(Cs,Vars,CA1,CB1).\n\n\nappend([],Y,Y).\nappend([A|X],Y,[A|Z]) :- append(X,Y,Z).\n\nmember(X, [X|_]).\nmember(X, [_|R]) :- member(X,R).\n\noutput_solution(Placed,Constraints) :-\n\twrite_all_pos(Placed),\n\tcalculate_sum(Placed,0,Sum),\n\twrite('Objective: '), write(Sum),\n\tcalculate_active(Constraints,Placed), nl.\n\ncalculate_sum([],S,S).\ncalculate_sum([P|Ps],S0,S) :-\n\tget_positions(P,[],L),\n\tP = placed(_,_,_,_,Offsets),\n\tsum_offsets(Offsets,L,S0,S1),\n\tcalculate_sum(Ps,S1,S).\n\nsum_offsets([],_,S,S).\nsum_offsets([offsetb(_,_,block(V,D,W))|Os], L, S0, S) :-\n\tmember((V,VP),L), !,\n\tS1 is S0 + W * (D - VP) * (D - VP),\n\tsum_offsets(Os,L,S1,S).\n\ncalculate_active(Constraints,Placed) :-\n\tget_active(Placed,[],Active),\n\twrite('['),\n\toutput_active(Constraints,Active),\n\twrite(']').\n\noutput_active([],_).\noutput_active([C|Cs],A) :-\n\t(member(C,A) ->\n\t    write('X')\n\t;\n\t    write(' ')\n\t),\n\toutput_active(Cs,A).\n\nget_active([],A,A).\nget_active([P|Ps], A0, A) :-\n\tP = placed(_,_,_,C,_),\n\tappend(C,A0,A1),\n\tget_active(Ps,A1,A).\n\n\ng(E):- prob1(B,_C), initial(B,P), P = [F|_R], get_positions(F,[],E).\n\ng1:- prob1(B,C), initial(B,P), overlaps(P,C,Pn), write(Pn),\n\tnl, write_all_pos(Pn).\ng1a:- prob1a(B,C), initial(B,P), overlaps(P,C,Pn), write(Pn),\n\tnl, write_all_pos(Pn).\n\ng2:- prob2(B,C), initial(B,P), overlaps(P,C,Pn), write(Pn),\n\tnl, write_all_pos(Pn).\n\ng3:- prob3(B,C), initial(B,P), overlaps(P,C,Pn), write(Pn),\n\tnl, write_all_pos(Pn).\n\n\n\ng4:- prob4(B,C), initial(B,P), overlaps(P,C,Pn), write(Pn),\n\tnl, write_all_pos(Pn).\n\n\ntest :-\n\tOffsets = [offsetb(0,3,block(x1,1,3)),\n\t           offsetb(1,2,block(x2,1,2)),\n\t\t   offsetb(1,2,block(x3,1,2)),\n\t\t   offsetb(2,6,block(x4,3,2)),\n\t\t   offsetb(3,3,block(x5,3,1))\n\t          ],\n\tConstraints = \n           [x3 >= x1 + 1,\n\t    x4 >= x2 + 1,\n\t    x4 >= x3 + 1,\n\t    x5 >= x4 + 1\n           ],\n\tdesired_position(Offsets,WPosn,Weight,Pos),\n\tPlaced = placed(Pos, Weight, WPosn, Constraints, Offsets),\n        write(Placed), nl,\n\tsplit(Placed,Places0),\n%\tPlaces0 = [Placed],\n\toverlaps(Places0,[x2 >= x1 + 1|Constraints],Places),\n\twrite_all_pos(Places),\n\ttrue.\n\ntest2 :-\n\tOffsets = [offsetb(0,3,block(x1,1,3)),\n\t           offsetb(1,2,block(x2,1,2)),\n\t\t   offsetb(1,2,block(x3,1,2)),\n\t\t   offsetb(2,6,block(x4,3,2)),\n\t\t   offsetb(3,3,block(x5,3,1))\n\t          ],\n\tConstraints = \n           [x2 >= x1 + 1, \n\t    x3 >= x1 + 1,\n\t    %x4 >= x2 + 1,\n\t    x4 >= x3 + 1,\n\t    x5 >= x4 + 1\n           ],\n\tdesired_position(Offsets,WPosn,Weight,Pos),\n\tPlaced = placed(Pos, Weight, WPosn, Constraints, Offsets),\n        write(Placed), nl,\n\tsplit(Placed,Places0),\n%\tPlaces0 = [Placed],\n\toverlaps(Places0,[x4 >= x2 + 1|Constraints],Places),\n\twrite_all_pos(Places),\n\ttrue.\n\ntest7 :-\n\tP0 = placed(0,30,0,       \n\t [x2 >= x1 + 0,\n          x3 >= x1 + 0, \n          x4 >= x1 + 0, \n          x5 >= x1 + 0, \n          x6 >= x1 + 0, \n          x7 >= x1 + 0, \n          x8 >= x1 + 0, \n          x9 >= x1 + 0, \n          x10 >= x2 + 0],\n         [\n          offsetb(0,7,block(x1,1,7)),\n       offsetb(0,-2,block(x2,-1,2)),\n       offsetb(0,2,block(x3,1,2)),\n       offsetb(0,-2,block(x4,-1,2)),\n       offsetb(0,2,block(x5,1,2)),\n       offsetb(0,-2,block(x6,-1,2)),\n       offsetb(0,2,block(x7,1,2)),\n       offsetb(0,-2,block(x8,-1,2)),\n       offsetb(0,2,block(x9,1,2)),\n       offsetb(0,-7,block(x10,-1,7))\n        ]),\n\tC = [\n       x2 >= x1 + 0,\n       x3 >= x1 + 0, \n       x4 >= x1 + 0, \n       x5 >= x1 + 0, \n       x6 >= x1 + 0, \n       x7 >= x1 + 0, \n       x8 >= x1 + 0, \n       x9 >= x1 + 0, \n       x10 >= x2 + 0, \n       x10 >= x3 + 0, \n       x10 >= x4 + 0, \n       x10 >= x5 + 0, \n       x10 >= x6 + 0, \n       x10 >= x7 + 0, \n       x10 >= x8 + 0, \n       x10 >= x9 + 0\n   ],\n\tmerge_repeat([P0],C,P1),\t\n\toutput_solution(P1,C),\n\talg11(P1,C,_P).\n\ntest8 :-\n\tP0 = [placed(0,[],14,[\n         x2 >= x1 + 1,\n        x3 >= x2 + 1,\n        x4 >= x3 + 1,\n        x5 >= x4 + 1,\n        x6 >= x5 + 1,\n        x7 >= x6 + 1,\n\tx9 >= x1 + 1,\n\tx8 >= x9 + 6\n    ],[\n        offsetb(0,[],block(x1,0,2)),\n\toffsetb(1,[],block(x2,0,1)),\n\toffsetb(2,[],block(x3,3,2)),\n\toffsetb(3,[],block(x4,2,5)),\n\toffsetb(4,[],block(x5,5,5)),\n        offsetb(5,[],block(x6,4,2)),\n\toffsetb(6,[],block(x7,7,1)),\n\toffsetb(7,[],block(x8,7,2)),\n\toffsetb(1,[],block(x9,1,4))\n    ])],\n\tC = [\n        x2 >= x1 + 1,\n        x3 >= x2 + 1,\n        x4 >= x3 + 1,\n        x5 >= x4 + 1,\n        x6 >= x5 + 1,\n        x7 >= x6 + 1,\n        x8 >= x7 + 1,\n\tx9 >= x1 + 1,\n\tx8 >= x9 + 6\n    ],\n\tmerge_repeat(P0,C,P1),\t\n\toutput_solution(P1,C),\n\talg11(P1,C,_P).\n\t\n\n\n%%%%%%%%%%%%%%%%%%%% ALGORITHM 1 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n%%\n%% Merge until satisfiable\n%% repeat\n%%     split once\n%%     merge until satisfiable\n\nalg1(B,C,P) :-\n\tinitial(B,P0),\n\tmerge_repeat(P0,C,P1),\n\toutput_solution(P1,C),\n\talg11(P1, C, P).\n\nalg11(P0,C,P) :-\n\t(find_split(P0, P1) ->\n\t    merge_repeat(P1,C,P2),\n\t    output_solution(P2,C),\n\t    alg11(P2,C,P)\n\t;\n\t    P = P0\n\t).\n\nmerge_repeat(Placed0,Constraints,Placed) :-\n\t(overlap(Placed0,Constraints,Place1,Place2,Rest,Violated) ->\n\t    merge(Place1,Place2,Violated,Place12),\n\t    length(Violated,VS),\n\t    (VS>1->\t\n\t    \twrite('**** VIOLATED SIZE ='),write(VS),\n\t\t\twrite(':'),write(Violated)\n\t\t;\n\t\t\tVS=1\n\t\t),\n\t    Placed1 = [Place12|Rest],\n\t    merge_repeat(Placed1, Constraints, Placed)\n\t;\n\t    Placed = Placed0\n\t).\n\t\n\nfind_split([PlaceA|Places],Placed) :-\n\tPlaceA = placed(_Pos,_Weight,_WPosn,Constraints,_Offsets), \n\t(single_split(Constraints,PlaceA,PlacesA) ->\n\t    append(PlacesA,Places,Placed)\n\t;\n\t    Placed = [PlaceA|Placed1],\n\t    find_split(Places,Placed1)\n\t).\n\n\nsingle_split([C|Cs], Place, ListPlaced) :-\n\tC = (VA >= VB + D),\n\tPlace = placed(_Pos,_Weight,_WPosn,Constraints,Offsets),\n\tdelete(Constraints,C,RConstraints),\n\treachable(RConstraints, [VA], VarsA),\n\treachable(RConstraints, [VB], VarsB),\n\t% check disjoint\n\t(intersect(VarsA,VarsB) -> error(disjoint) ; true),\n\tsplit_constraints(RConstraints, VarsA, ConstraintsA, ConstraintsB),\n\tsplit_offsets(Offsets, VarsA, OffsetsA, OffsetsB),\n        member(offsetb(OffA,_,block(VA,_,_)),OffsetsA),!,\n        member(offsetb(OffB,_,block(VB,_,_)),OffsetsB),!,\n\tdesired_position(OffsetsA, WPosnA, WeightA, PosA),\n\tdesired_position(OffsetsB, WPosnB, WeightB, PosB),\n\t((PosA + OffA) >= 0.0001 + (PosB + OffB) + D ->\n\t    PlacedA = placed(PosA, WeightA, WPosnA, ConstraintsA, OffsetsA),\n\t    PlacedB = placed(PosB, WeightB, WPosnB, ConstraintsB, OffsetsB),\n\t    get_positions(PlacedA,[],List1),\n\t    get_positions(PlacedB,[],List2),\n\t    get_positions(Place,[],List12),\n\t    Active = C,\n\t    write('split: '),\n\t     write(List12), write(' -> '), write(Active),\n\t    write(' -> '), write(List1), write(' '), write(List2), nl,\n\t    ListPlaced = [PlacedA,PlacedB]\n\t;\n\t    single_split(Cs, Place, ListPlaced)\n\t).\n\n\n\t\na1 :- prob1(B,C), alg1(B,C,_P).\na2 :- prob2(B,C), alg1(B,C,_P).\na3 :- prob3(B,C), alg1(B,C,_P).\na4 :- prob4(B,C), alg1(B,C,_P).\na5 :- prob5(B,C), alg1(B,C,_P).\na6 :- prob6(B,C), alg1(B,C,_P).\na7 :- prob7(B,C), alg1(B,C,_P).\na8 :- prob8(B,C), alg1(B,C,_P).\n"
  },
  {
    "path": "experimental/RectangleOverlapSolver/placement_SolveVPSC.h",
    "content": "/* DO NOT EDIT THIS FILE - it is machine generated */\n#include <jni.h>\n/* Header for class placement_SolveVPSC */\n\n#ifndef _Included_placement_SolveVPSC\n#define _Included_placement_SolveVPSC\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n/*\n * Class:     placement_SolveVPSC\n * Method:    solve\n * Signature: ([Ljava/lang/String;[D[D[I[I[D[DI)D\n */\nJNIEXPORT jdouble JNICALL Java_placement_SolveVPSC_solve\n  (JNIEnv *, jobject, jobjectArray, jdoubleArray, jdoubleArray, jintArray, jintArray, jdoubleArray, jdoubleArray, jint);\n\n/*\n * Class:     placement_SolveVPSC\n * Method:    generateXConstraints\n * Signature: ([D[D[D[D[D)I\n */\nJNIEXPORT jint JNICALL Java_placement_SolveVPSC_generateXConstraints\n  (JNIEnv *, jobject, jdoubleArray, jdoubleArray, jdoubleArray, jdoubleArray, jdoubleArray);\n\n/*\n * Class:     placement_SolveVPSC\n * Method:    generateYConstraints\n * Signature: ([D[D[D[D[D)I\n */\nJNIEXPORT jint JNICALL Java_placement_SolveVPSC_generateYConstraints\n  (JNIEnv *, jobject, jdoubleArray, jdoubleArray, jdoubleArray, jdoubleArray, jdoubleArray);\n\n/*\n * Class:     placement_SolveVPSC\n * Method:    getConstraints\n * Signature: ([I[I[D)V\n */\nJNIEXPORT void JNICALL Java_placement_SolveVPSC_getConstraints\n  (JNIEnv *, jobject, jintArray, jintArray, jdoubleArray);\n\n/*\n * Class:     placement_SolveVPSC\n * Method:    removeOverlaps\n * Signature: ([D[D[D[D)V\n */\nJNIEXPORT void JNICALL Java_placement_SolveVPSC_removeOverlaps\n  (JNIEnv *, jobject, jdoubleArray, jdoubleArray, jdoubleArray, jdoubleArray);\n\n#ifdef __cplusplus\n}\n#endif\n#endif\n"
  },
  {
    "path": "experimental/RectangleOverlapSolver/prolog/Part 1.2",
    "content": "<div class=\"moz-text-flowed\" style=\"font-family: -moz-fixed\">\n\nno documentation I am afraid\n\n\nOn 07/02/2005, at 1:22 PM, Tim Dwyer wrote:\n\n> Hi Peter,\n>\n> Can you please send me your prolog for the overlap removal algorithm?  \n> I'm keen to start hacking.\n>\n> Thanks\n>\n> Tim\n>\n>\n</div>"
  },
  {
    "path": "experimental/RectangleOverlapSolver/prolog/Part 1.4",
    "content": "<div class=\"moz-text-flowed\" style=\"font-family: -moz-fixed\">\n</div>"
  },
  {
    "path": "experimental/RectangleOverlapSolver/prolog/blocks.pl",
    "content": "\n\n\nprob1(\n\t[block(x1,1,3),\n\tblock(x2,1,2),\n\tblock(x3,1,3),\n\tblock(x4,3,2),\n\tblock(x5,3,1)],\n\t[x2 >= x1 + 1,\n\tx3 >= x1 + 1,\n\tx4 >= x2 + 1,\n\tx4 >= x3 + 1,\n\tx5 >= x4 + 1]\n    ).\n%[x5>=x4+1]: [ (x4, 2.66667), (x5, 3.66667)]\n%[x3>=x1+1, x2>=x1+1]: [ (x1, 0.375), (x2, 1.375), (x3, 1.375)]\n\nprob1a(\n\t[\n\tblock(x3,1,3),\n        block(x1,1,3),\n\tblock(x4,3,2),\n\tblock(x5,3,1),\n\tblock(x2,1,2)\n        ],\n\t[x2 >= x1 + 1,\n\tx3 >= x1 + 1,\n\tx4 >= x2 + 1,\n\tx4 >= x3 + 1,\n\tx5 >= x4 + 1]\n    ).\n\nprob2(\n\t[block(x1,0,1),\n\tblock(x2,1,1),\n\tblock(x3,4,1),\n\tblock(x4,4,1),\n\tblock(x5,3,1),\n\tblock(x6,6,1),\n\tblock(x7,5,1),\n\tblock(x8,0,1),\n\tblock(x9,7,1)],\n\t[x2 >= x1 + 1,\n\tx3 >= x1 + 1,\n\tx4 >= x1 + 1,\n\tx5 >= x2 + 3,\n\tx5 >= x3 + 1,\n\tx6 >= x3 + 1,\n\tx5 >= x4 + 1,\n\tx8 >= x4 + 1,\n\tx7 >= x5 + 1,\n\tx9 >= x6 + 4,\n\tx9 >= x7 + 2,\n\tx9 >= x8 + 3]\n    ).\n\n%[x9>=x6+4]: [ (x6, 4.5), (x9, 8.5)]\n%[ (x7, 5)]\n%[x5>=x3+1]: [ (x3, 3), (x5, 4)]\n%[x8>=x4+1]: [ (x4, 1.5), (x8, 2.5)]\n%[x2>=x1+1]: [ (x1, 0), (x2, 1)]\n\nprob3(\n\t[block(x1,0,1),\n\tblock(x2,0,1),\n\tblock(x3,0,1),\n\tblock(x4,0,1),\n\tblock(x5,8,1),\n\tblock(x6,8,1),\n\tblock(x7,8,1),\n\tblock(x8,8,1),\n\tblock(x9,4,20)\n        ],\n\t[x2 >= x1 + 1,\n\tx3 >= x2 + 1,\n\tx4 >= x3 + 1,\n\tx6 >= x5 + 1,\n\tx7 >= x6 + 1,\n\tx8 >= x7 + 1,\n\tx3 >= x9 + 1\n        ]\n     ).\n\n\t\nprob4(\n\t[block(x1,1,3),\n\t block(x4,3,2),\n\t block(x5,3,1),\n\t block(x2,1,2),\n\t block(x3,1,2)\n        ],\n\t[x2 >= x1 + 1,\n\t x3 >= x1 + 1,\n\t x4 >= x2 + 1,\n\t x4 >= x3 + 1,\n\t x5 >= x4 + 1\n        ]\n    ).\n\nprob5(\n\t[block(x1,1,1),\n\t block(x2,2,1),\n\t block(x3,2,1),\n\t block(x4,3,1),\n\t block(x5,5,1),\n\t block(x6,6,1),\n\t block(x7,7,1)]\n     ,\n\t[x2 >= x1 + 2,\n\tx3 >= x1 + 2,\n\tx5 >= x4 + 2,\n\tx6 >= x2 + 2,\n\tx7 >= x5 + 2,\n\tx4 >= x3 + 1,\n\tx7 >= x6 + 2\n    ]).\n\nprob6([\n        block(x1,0,1),\n\tblock(x2,2,1),\n\tblock(x3,1,8),\n\tblock(x4,3,1)\n      ],\n      [\n        x2 >= x1 + 3,\n\tx3 >= x1 + 3,\n\tx4 >= x2 + 1.5\n      ]).\n\n\nprob7([\n       block(x1,1,7),\n       block(x2,-1,2),\n       block(x3,1,2),\n       block(x4,-1,2),\n       block(x5,1,2),\n       block(x6,-1,2),\n       block(x7,1,2),\n       block(x8,-1,2),\n       block(x9,1,2),\n       block(x10,-1,7)\n      ],[\n       x2 >= x1 + 0,\n       x3 >= x1 + 0, \n       x4 >= x1 + 0, \n       x5 >= x1 + 0, \n       x6 >= x1 + 0, \n       x7 >= x1 + 0, \n       x8 >= x1 + 0, \n       x9 >= x1 + 0, \n       x10 >= x2 + 0, \n       x10 >= x3 + 0, \n       x10 >= x4 + 0, \n       x10 >= x5 + 0, \n       x10 >= x6 + 0, \n       x10 >= x7 + 0, \n       x10 >= x8 + 0, \n       x10 >= x9 + 0\n   ]).\n\n      \nprob8([\n       block(x1,0,2),\n\tblock(x2,0,1),\n\tblock(x3,3,2),\n\tblock(x4,2,5),\n\tblock(x5,5,5),\n        block(x6,4,2),\n\tblock(x7,7,1),\n\tblock(x8,7,2),\n\tblock(x9,1,4)\n    ],[\n        x2 >= x1 + 1,\n        x3 >= x2 + 1,\n        x4 >= x3 + 1,\n        x5 >= x4 + 1,\n        x6 >= x5 + 1,\n        x7 >= x6 + 1,\n        x8 >= x7 + 1,\n\tx9 >= x1 + 1,\n\tx8 >= x9 + 6\n    ]).\n\nprob9([\n       block(x0,0,9),\n\tblock(x1,0.1,3),\n\tblock(x2,0.2,3),\n\tblock(x3,0.3,3),\n\tblock(x4,0.4,3)\n    ],[\n        x4 >= x0 + 9,\n        x2 >= x0 + 9,\n        x4 >= x2 + 3,\n        x1 >= x0 + 3,\n        x2 >= x1 + 3,\n        x3 >= x2 + 3,\n        x4 >= x3 + 3\n    ]).\nprob10([\n       block(x0,0,9),\n\tblock(x4,0.4,3),\n\tblock(x2,0.2,3)\n    ],[\n        x4 >= x0 + 9,\n        x2 >= x0 + 9,\n        x4 >= x2 + 3\n    ]).\n\ninit_block(B,Offset) :- init_block_e(B,Offset).\nmerge_blocks(PlaceA,PlaceB,Min,Active,PlaceAB) :-\n\tmerge_blocks_e(PlaceA,PlaceB,Min,Active,PlaceAB).\ndesired_position(Offsets, WPosn, Weight, Pos) :-\n\tdesired_position_e(Offsets, WPosn, Weight, Pos).\n\n%% init_block(B,Offset) :- init_block_m(B,Offset).\n%% merge_blocks(PlaceA,PlaceB,Min,Active,PlaceAB) :-\n%% \tmerge_blocks_m(PlaceA,PlaceB,Min,Active,PlaceAB).\n%% desired_position(Offsets, WPosn, Weight, Pos) :-\n%% \tdesired_position_m(Offsets, WPosn, Weight, Pos).\n\n\n%%% euclidean distance %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \ninit_block_e(Block,Offset) :-\n\tBlock = block(_Name,Pos,Weight),\n\tWPosn is Pos * Weight,\n\tOffset = offsetb(0,WPosn,Block).\nmerge_blocks_e(PlaceA,PlaceB,Min,Active,PlaceAB) :-\n\tPlaceA = placed(PosA,WeightA,WPosnA,ConstraintsA,OffsetsA),\n\tPlaceB = placed(PosB,WeightB,WPosnB,ConstraintsB,OffsetsB),\n\tWeightAB is WeightA + WeightB,\n\tOffA is PosA - PosB + Min,\n\tWPosnAB is WPosnA + WPosnB - OffA * WeightA,\n\tPosAB is WPosnAB / WeightAB,\n\t\n\tmove_offsets(OffsetsA, OffA, OffsetsAM),\n\tappend(OffsetsAM, OffsetsB, OffsetsAB),\n\tappend(ConstraintsA,[Active|ConstraintsB],ConstraintsAB),\n\tPlaceAB = placed(PosAB,WeightAB,WPosnAB,ConstraintsAB,OffsetsAB).\ndesired_position_e(Offsets, WPosn, Weight, Pos) :-\n\tdesired_position_e(Offsets, 0, 0, WPosn, Weight),\n\tPos is WPosn/Weight.\n\ndesired_position_e([], WPosn, Weight, WPosn, Weight).\ndesired_position_e([Offset|Os], WPosn0, Weight0, WPosn, Weight) :-\n\tOffset = offsetb(PosB,_,Block),\n\tBlock = block(_,DesB,WeightB),\n\tWPosn1 is WPosn0 + (DesB - PosB) * WeightB,\n\tWeight1 is Weight0 + WeightB,\n\tdesired_position_e(Os, WPosn1, Weight1, WPosn, Weight).\n%%% manhattan distance %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \ninit_block_m(Block,Offset) :-\n\tBlock = block(_Name,Pos,Weight),\n\tWPosn = [(Pos,Weight)],\n\tOffset = offsetb(0,WPosn,Block).\nmerge_blocks_m(PlaceA,PlaceB,Min,Active,PlaceAB) :-\n\tPlaceA = placed(PosA,WeightA,WPosnA,ConstraintsA,OffsetsA),\n\tPlaceB = placed(PosB,WeightB,WPosnB,ConstraintsB,OffsetsB),\n\tWeightAB is WeightA + WeightB,\n\tOffA is PosA - PosB + Min,\n\ttranslate(WPosnA, OffA, NWPosnA),\n\tappend(NWPosnA,WPosnB,UnsortedWPosnAB),\n\tmsort(UnsortedWPosnAB, WPosnAB),\n\tcompute_opt(WPosnAB,WeightAB,PosAB),\n\tmove_offsets(OffsetsA, OffA, OffsetsAM),\n\tappend(OffsetsAM, OffsetsB, OffsetsAB),\n\tappend(ConstraintsA,[Active|ConstraintsB],ConstraintsAB),\n\tPlaceAB = placed(PosAB,WeightAB,WPosnAB,ConstraintsAB,OffsetsAB).\ndesired_position_m(Offsets, WPosn, Weight, Pos) :-\n\tdesired_position_m(Offsets, [], 0, UnsortedWPosn, Weight),\n\tmsort(UnsortedWPosn,WPosn),\n\tcompute_opt(WPosn,Weight,Pos).\n\ndesired_position_m([], WPosn, Weight, WPosn, Weight).\ndesired_position_m([Offset|Os], WPosn0, Weight0, WPosn, Weight) :-\n\tOffset = offsetb(PosB,_,Block),\n\tBlock = block(_,DesB,WeightB),\n\tAdjPosB is (DesB - PosB),\n\tWPosn1 = [(AdjPosB,WeightB)| WPosn0],\n\tWeight1 is Weight0 + WeightB,\n\tdesired_position_m(Os, WPosn1, Weight1, WPosn, Weight).\n\ntranslate([], _, []).\ntranslate([(P,W)|PWs], Off, [(PO,W)|Ts]) :-\n\tPO is P - Off,\n\ttranslate(PWs, Off, Ts).\n\ncompute_opt([(P,W)|PWs], Weight, Pos) :-\n\tWeight1 is Weight - 2 * W,\n\t(Weight1 < 0 ->\n\t    Pos = P\n\t;\n\t    compute_opt(PWs, Weight1, Pos)\n\t).\n\n\n% :- type block --> block(name,desired-position,weight)\n\n% :- type placed --> placed(position, weight, wposn, [constraints], [offsets]).\n\n% :- type offset --> offsetb(offset,wposn,block)\n%                  ; offsetp(offset,placed)\n\ninitial([],[]).\ninitial([First|Blocks], \n\t       [placed(Des,Weight,WPosn,[],[Offset])|Rest]) :-\n\tinit_block(First,Offset),\n\tFirst = block(_Name,Des,Weight),\n\tOffset = offsetb(_,WPosn,_),\n\tinitial(Blocks, Rest).\n\noverlaps(Placed0, Constraints, Placed) :-\n%% change line below for different overlap\n\t(overlap2(Placed0,Constraints,Place1,Place2,Rest,Violated) ->\n\t    merge(Place1,Place2,Violated,Place12),\n\t    %write_all_pos([Place12]),\n\t    split(Place12, Places12),\n\t    %write_all_pos(Places12),\n\t    append(Places12, Rest, Placed1),\n\t    overlaps(Placed1, Constraints, Placed)\n\t;\n\t    Placed = Placed0\n\t).\n\noverlap([Placea|Placed0], Constraints, Place1, Place2, Rest, Violated) :-\n\t(overlapc(Placed0, Constraints, Placea, Placeb, Restab, Violated) ->\n\t    Place1 = Placea,\n\t    Place2 = Placeb,\n\t    Rest = Restab\n\t;\n\t    Rest = [Placea|Rest1],\n\t    overlap(Placed0, Constraints, Place1, Place2, Rest1, Violated)\n\t).\n\noverlapc([Placeb|Placed0], Constraints, Place1, Place2, Rest, Violated) :-\n\t(overlapcc(Constraints, Placeb, Place1,Violated) ->\n\t    Place2 = Placeb,\n\t    Rest = Placed0\n\t;\n\t    Rest = [Placeb|Rest1],\n\t    overlapc(Placed0, Constraints, Place1, Place2, Rest1, Violated)\n\t).\n\n%% \noverlapcc(Constraints, Place1, Place2, Violated) :-\n\tget_positions(Place1, [], List1),\n\tget_positions(Place2, [], List2),\n\tappend(List1,List2,All),\n\tcheck_constraints(Constraints, All, Violated),\n\tViolated = [_|_].\n\ncheck_constraints([], _, []).\ncheck_constraints([X >= Y + D|Constraints], PosList, Violated) :-\n\t( member((X,XP), PosList),\n\t  member((Y,YP), PosList),\n\t  XP + 0.0001 < YP + D ->\n\t      Violated = [X >= Y + D|Violated1]\n\t  ;\n\t      Violated = Violated1\n\t),\n\tcheck_constraints(Constraints, PosList,Violated1).\n\n%%% second version of \"overlap\" returns the pair that overlap in the\n%%% first constraint that is violated\noverlap2(Placed, Constraints, Place1, Place2, Rest, Violated) :-\n\tget_all_positions(Placed, [], List),\n\tcheck_constraints(Constraints, List, [Violate|_]),\n\tViolate = (X >= Y + _),\n\tremove_place(Placed, X, Place1, Rest1),\n\tremove_place(Rest1, Y, Place2, Rest),\n\toverlapcc(Constraints, Place1, Place2, Violated).\n\nget_all_positions([], L, L).\nget_all_positions([Place|Placed], L0, L) :-\n\tget_positions(Place, L0, L1),\n\tget_all_positions(Placed, L1, L).\n\nremove_place([PlaceA|Placed], Var, Place, Rest) :-\n\tPlaceA = placed(_PosA,_WeightA,_WPosnA,_ConstraintsA,OffsetsA),\n\t(member(offsetb(_,_,block(Var,_,_)), OffsetsA) ->\n\t    Place= PlaceA,\n\t    Rest = Placed\n\t;\n\t    Rest = [PlaceA|Rest1],\n\t    remove_place(Placed,Var,Place,Rest1)\n\t).\n\t\n\nwrite_all_pos(Ps) :-\n\tcanonify(Ps,CPs),\n\tsort(CPs,SCPs),\n\twrite_all_pos_actual(SCPs).\n\ncanonify([],[]).\ncanonify([P|Ps],[ConstraintsS - LS|Rest]) :-\n\tP = placed(_,_,_,Constraints,_), \n\tsort(Constraints,ConstraintsS),\n\tget_positions(P,[],L),\n\tsort(L,LS),\n\tcanonify(Ps, Rest).\n\nwrite_all_pos_actual([]).\nwrite_all_pos_actual([ConstraintsS - LS |Ps]) :-\n\t(ConstraintsS = [] -> true ; write(ConstraintsS), write(': ')),\n\twrite(LS), nl,\n\twrite_all_pos_actual(Ps).\n\nget_positions(placed(Pos, _, _,_, Offsets), ListOfPos0, ListOfPos) :-\n\tget_positions_offsets(Offsets, Pos, ListOfPos0, ListOfPos).\n\nget_positions(placed(_, _, _, _, Offsets), BPos, ListOfPos0, ListOfPos) :-\n\tget_positions_offsets(Offsets, BPos, ListOfPos0, ListOfPos).\nget_positions_offsets([], _, ListOfPos, ListOfPos).\nget_positions_offsets([Offset|Offsets], BPos, ListOfPos0, ListOfPos) :-\n\t(Offset = offsetb(Off,_,block(Name,_,_)) ->\n\t    NPos is BPos + Off,\n\t    ListOfPos1 = [(Name,NPos)|ListOfPos0]\n\t;\n\t    Offset = offsetp(Off,Placed),\n\t    BPos1 is BPos + Off, \n\t    get_positions(Placed, BPos1, ListOfPos0, ListOfPos1)\n\t),\n\tget_positions_offsets(Offsets, BPos, ListOfPos1, ListOfPos).\n\n\nmerge(Place1, Place2, Violated, Place12) :-\n\tget_positions(Place1, [], List1),\n\tget_positions(Place2, [], List2),\n\t( get_diffs(Violated, List1, List2, Diffs) ->\n\t    PlaceA = Place1,\n\t    PlaceB = Place2\n\t;\n\t    get_diffs(Violated, List2, List1, Diffs),\n\t    PlaceA = Place2,\n\t    PlaceB = Place1\n        ),\n\tmaximum(Diffs, Violated, Min, Active),\n\tmerge_blocks(PlaceA,PlaceB,Min,Active,Place12),\n%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diagnostics %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n\tget_positions(Place12,[],List12),\n\twrite('merge: '),\n\twrite(List1), write(' '), write(List2), write(' -> '), write(Active),\n\twrite(' -> '), write(List12), nl,\n\t%write('check: '),write(Old_PosAB is PosAB), nl,\n\ttrue.\n\nmove_offsets([],_,[]).\nmove_offsets([offsetb(Off0,WPosn,Block)|Os], OffA, [offsetb(Off,WPosn,Block)|MOs]) :-\n\tOff is Off0 + OffA,\n\tmove_offsets(Os,OffA,MOs).\nmove_offsets([offsetp(Off0,Placed)|Os], OffA, [offsetp(Off,Placed)|MOs]) :-\n\tOff is Off0 + OffA,\n\tmove_offsets(Os,OffA,MOs).\n\n%% diffs are how much each constraint is violated\nget_diffs([], _, _, []).\nget_diffs([X >= Y + D|Constraints], List1, List2, [Diff|Diffs]) :-\n\tmember((X,XP), List1), !,\n\tmember((Y,YP), List2), !,\n\tDiff is YP + D - XP,\n\tget_diffs(Constraints, List1,List2,Diffs).\n\n%% Min will be bound to the maximum difference \n%% and active to the corresponding constraint\nmaximum([Diff|Diffs], [C|Cs], Min, Active) :-\n\tmaximum(Diffs,Cs,Diff,Min,C,Active).\nmaximum([],[],Min,Min,Active,Active).\nmaximum([D|Ds], [C|Cs], Min0, Min, Active0, Active) :-\n\t(D > Min0 ->\n\t    Min1 = D,\n\t    Active1 = C\n\t;\n\t    Min1 = Min0,\n\t    Active1 = Active0\n\t),\n\tmaximum(Ds,Cs,Min1,Min,Active1,Active).\n\nsplit(Place, Places) :-\n\tPlace = placed(_Pos,_Weight,_WPosn,Constraints,_Offsets), \n\tcheck_split(Constraints, Place, Places).\n\t\n\ncheck_split([], Place, [Place]).\ncheck_split([C|Cs], Place, ListPlaced) :-\n\tC = (VA >= VB + D),\n\tPlace = placed(_Pos,_Weight,_WPosn,Constraints,Offsets),\n\tdelete(Constraints,C,RConstraints),\n\treachable(RConstraints, [VA], VarsA),\n\treachable(RConstraints, [VB], VarsB),\n\t% check disjoint\n\t(intersect(VarsA,VarsB) -> error(disjoint) ; true),\n\tsplit_constraints(RConstraints, VarsA, ConstraintsA, ConstraintsB),\n\tsplit_offsets(Offsets, VarsA, OffsetsA, OffsetsB),\n        member(offsetb(OffA,_,block(VA,_,_)),OffsetsA),!,\n        member(offsetb(OffB,_,block(VB,_,_)),OffsetsB),!,\n\tdesired_position(OffsetsA, WPosnA, WeightA, PosA),\n\tdesired_position(OffsetsB, WPosnB, WeightB, PosB),\n\t((PosA + OffA) >= 0.0001 + (PosB + OffB) + D ->\n\t    PlacedA = placed(PosA, WeightA, WPosnA, ConstraintsA, OffsetsA),\n\t    PlacedB = placed(PosB, WeightB, WPosnB, ConstraintsB, OffsetsB),\n\t    get_positions(PlacedA,[],List1),\n\t    get_positions(PlacedB,[],List2),\n\t    get_positions(Place,[],List12),\n\t    Active = C,\n\t    write('split: '),\n\t     write(List12), write(' -> '), write(Active),\n\t    write(' -> '), write(List1), write(' '), write(List2), nl,\n\t    split(PlacedA, ListPlacedA),\n\t    split(PlacedB, ListPlacedB),\n\t    append(ListPlacedA,ListPlacedB,ListPlaced)\n\t;\n\t    check_split(Cs, Place, ListPlaced)\n\t).\n\nintersect(L1,L2) :- member(A,L1), member(A,L2).\n\n\n% reachable(Cs,Vs0,Vs) - Vs is the subset of variables Vs0 \n%    that are referenced by the constraints Cs\nreachable(Cs, Vs0, Vs) :-\n\tsort(Vs0,SVs0),\n\treachable2(Cs, SVs0, Vs1),\n\tsort(Vs1,SVs1),\n\t(SVs0 = SVs1 ->\n\t    Vs = SVs1\n\t;\n\t    reachable(Cs,SVs1,Vs)\n\t).\nreachable2([], Vs, Vs).\nreachable2([VA >= VB + _|Cs], Vs0, Vs) :-\n\t(member(VA,Vs0) ->\n\t    Vs1 = [VB|Vs0]\n\t; (member(VB,Vs0) ->\n\t    Vs1 = [VA|Vs0]\n\t;\n\t    Vs1 = Vs0\n\t)),\n\treachable2(Cs, Vs1, Vs).\n\n\npartition(Cs, XA >= _YA + _D, ConstraintsA, ConstraintsB) :-\n\tdeleteall(Cs, [], [XA], ConstraintsA, ConstraintsB).\n\ndeleteall([], Rest, _, [], Rest).\ndeleteall([X >= Y + D|Cs], Seen, Vars, Cin, Cout) :-\n\t(member(X,Vars) ->\n\t    Cin = [X >= Y + D|Cin1],\n\t    append(Seen,Cs,All),\n\t    deleteall(All,[],[Y|Vars],Cin1,Cout)\n\t; (member(Y,Vars) ->\n\t    Cin = [X >= Y + D|Cin1],\n\t    append(Seen,Cs,All),\n\t    deleteall(All,[],[X|Vars],Cin1,Cout)\n\t;\n\t    deleteall(Cs,[X + Y >= D|Seen], Vars, Cin, Cout)\n\t)).\n\t    \nsplit_constraints([], _, [], []).\nsplit_constraints([VA >= VB + D|Cs], Vars, CA, CB) :-\n\t(member(VA,Vars), member(VB,Vars) ->\n\t    CA = [VA >= VB + D|CA1],\n\t    CB = CB1\n\t;\n\t    CA = CA1,\n\t    CB = [VA >= VB + D|CB1]\n\t),\n\tsplit_constraints(Cs,Vars,CA1,CB1).\n\n\t    \nsplit_offsets([], _, [], []).\nsplit_offsets([Offset|Cs], Vars, CA, CB) :-\n\tOffset = offsetb(_,_,Block),\n\tBlock = block(Name,_,_),\n\t(member(Name,Vars) ->\n\t    CA = [Offset|CA1],\n\t    CB = CB1\n\t;\n\t    CA = CA1,\n\t    CB = [Offset|CB1]\n\t),\n\tsplit_offsets(Cs,Vars,CA1,CB1).\n\n\nappend([],Y,Y).\nappend([A|X],Y,[A|Z]) :- append(X,Y,Z).\n\nmember(X, [X|_]).\nmember(X, [_|R]) :- member(X,R).\n\noutput_solution(Placed,Constraints) :-\n\twrite_all_pos(Placed),\n\tcalculate_sum(Placed,0,Sum),\n\twrite('Objective: '), write(Sum),\n\tcalculate_active(Constraints,Placed), nl.\n\ncalculate_sum([],S,S).\ncalculate_sum([P|Ps],S0,S) :-\n\tget_positions(P,[],L),\n\tP = placed(_,_,_,_,Offsets),\n\tsum_offsets(Offsets,L,S0,S1),\n\tcalculate_sum(Ps,S1,S).\n\nsum_offsets([],_,S,S).\nsum_offsets([offsetb(_,_,block(V,D,W))|Os], L, S0, S) :-\n\tmember((V,VP),L), !,\n\tS1 is S0 + W * (D - VP) * (D - VP),\n\tsum_offsets(Os,L,S1,S).\n\ncalculate_active(Constraints,Placed) :-\n\tget_active(Placed,[],Active),\n\twrite('['),\n\toutput_active(Constraints,Active),\n\twrite(']').\n\noutput_active([],_).\noutput_active([C|Cs],A) :-\n\t(member(C,A) ->\n\t    write('X')\n\t;\n\t    write(' ')\n\t),\n\toutput_active(Cs,A).\n\nget_active([],A,A).\nget_active([P|Ps], A0, A) :-\n\tP = placed(_,_,_,C,_),\n\tappend(C,A0,A1),\n\tget_active(Ps,A1,A).\n\n\ng(E):- prob1(B,_C), initial(B,P), P = [F|_R], get_positions(F,[],E).\n\ng1:- prob1(B,C), initial(B,P), overlaps(P,C,Pn), write(Pn),\n\tnl, write_all_pos(Pn).\ng1a:- prob1a(B,C), initial(B,P), overlaps(P,C,Pn), write(Pn),\n\tnl, write_all_pos(Pn).\n\ng2:- prob2(B,C), initial(B,P), overlaps(P,C,Pn), write(Pn),\n\tnl, write_all_pos(Pn).\n\ng3:- prob3(B,C), initial(B,P), overlaps(P,C,Pn), write(Pn),\n\tnl, write_all_pos(Pn).\n\n\n\ng4:- prob4(B,C), initial(B,P), overlaps(P,C,Pn), write(Pn),\n\tnl, write_all_pos(Pn).\n\n\ntest :-\n\tOffsets = [offsetb(0,3,block(x1,1,3)),\n\t           offsetb(1,2,block(x2,1,2)),\n\t\t   offsetb(1,2,block(x3,1,2)),\n\t\t   offsetb(2,6,block(x4,3,2)),\n\t\t   offsetb(3,3,block(x5,3,1))\n\t          ],\n\tConstraints = \n           [x3 >= x1 + 1,\n\t    x4 >= x2 + 1,\n\t    x4 >= x3 + 1,\n\t    x5 >= x4 + 1\n           ],\n\tdesired_position(Offsets,WPosn,Weight,Pos),\n\tPlaced = placed(Pos, Weight, WPosn, Constraints, Offsets),\n        write(Placed), nl,\n\tsplit(Placed,Places0),\n%\tPlaces0 = [Placed],\n\toverlaps(Places0,[x2 >= x1 + 1|Constraints],Places),\n\twrite_all_pos(Places),\n\ttrue.\n\ntest2 :-\n\tOffsets = [offsetb(0,3,block(x1,1,3)),\n\t           offsetb(1,2,block(x2,1,2)),\n\t\t   offsetb(1,2,block(x3,1,2)),\n\t\t   offsetb(2,6,block(x4,3,2)),\n\t\t   offsetb(3,3,block(x5,3,1))\n\t          ],\n\tConstraints = \n           [x2 >= x1 + 1, \n\t    x3 >= x1 + 1,\n\t    %x4 >= x2 + 1,\n\t    x4 >= x3 + 1,\n\t    x5 >= x4 + 1\n           ],\n\tdesired_position(Offsets,WPosn,Weight,Pos),\n\tPlaced = placed(Pos, Weight, WPosn, Constraints, Offsets),\n        write(Placed), nl,\n\tsplit(Placed,Places0),\n%\tPlaces0 = [Placed],\n\toverlaps(Places0,[x4 >= x2 + 1|Constraints],Places),\n\twrite_all_pos(Places),\n\ttrue.\n\ntest7 :-\n\tP0 = placed(0,30,0,       \n\t [x2 >= x1 + 0,\n          x3 >= x1 + 0, \n          x4 >= x1 + 0, \n          x5 >= x1 + 0, \n          x6 >= x1 + 0, \n          x7 >= x1 + 0, \n          x8 >= x1 + 0, \n          x9 >= x1 + 0, \n          x10 >= x2 + 0],\n         [\n          offsetb(0,7,block(x1,1,7)),\n       offsetb(0,-2,block(x2,-1,2)),\n       offsetb(0,2,block(x3,1,2)),\n       offsetb(0,-2,block(x4,-1,2)),\n       offsetb(0,2,block(x5,1,2)),\n       offsetb(0,-2,block(x6,-1,2)),\n       offsetb(0,2,block(x7,1,2)),\n       offsetb(0,-2,block(x8,-1,2)),\n       offsetb(0,2,block(x9,1,2)),\n       offsetb(0,-7,block(x10,-1,7))\n        ]),\n\tC = [\n       x2 >= x1 + 0,\n       x3 >= x1 + 0, \n       x4 >= x1 + 0, \n       x5 >= x1 + 0, \n       x6 >= x1 + 0, \n       x7 >= x1 + 0, \n       x8 >= x1 + 0, \n       x9 >= x1 + 0, \n       x10 >= x2 + 0, \n       x10 >= x3 + 0, \n       x10 >= x4 + 0, \n       x10 >= x5 + 0, \n       x10 >= x6 + 0, \n       x10 >= x7 + 0, \n       x10 >= x8 + 0, \n       x10 >= x9 + 0\n   ],\n\tmerge_repeat([P0],C,P1),\t\n\toutput_solution(P1,C),\n\talg11(P1,C,_P).\n\ntest8 :-\n\tP0 = [placed(0,[],14,[\n         x2 >= x1 + 1,\n        x3 >= x2 + 1,\n        x4 >= x3 + 1,\n        x5 >= x4 + 1,\n        x6 >= x5 + 1,\n        x7 >= x6 + 1,\n\tx9 >= x1 + 1,\n\tx8 >= x9 + 6\n    ],[\n        offsetb(0,[],block(x1,0,2)),\n\toffsetb(1,[],block(x2,0,1)),\n\toffsetb(2,[],block(x3,3,2)),\n\toffsetb(3,[],block(x4,2,5)),\n\toffsetb(4,[],block(x5,5,5)),\n        offsetb(5,[],block(x6,4,2)),\n\toffsetb(6,[],block(x7,7,1)),\n\toffsetb(7,[],block(x8,7,2)),\n\toffsetb(1,[],block(x9,1,4))\n    ])],\n\tC = [\n        x2 >= x1 + 1,\n        x3 >= x2 + 1,\n        x4 >= x3 + 1,\n        x5 >= x4 + 1,\n        x6 >= x5 + 1,\n        x7 >= x6 + 1,\n        x8 >= x7 + 1,\n\tx9 >= x1 + 1,\n\tx8 >= x9 + 6\n    ],\n\tmerge_repeat(P0,C,P1),\t\n\toutput_solution(P1,C),\n\talg11(P1,C,_P).\n\t\n\n\n%%%%%%%%%%%%%%%%%%%% ALGORITHM 1 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n%%\n%% Merge until satisfiable\n%% repeat\n%%     split once\n%%     merge until satisfiable\n\nalg1(B,C,P) :-\n\tinitial(B,P0),\n\tmerge_repeat(P0,C,P1),\n\toutput_solution(P1,C),\n\talg11(P1, C, P).\n\nalg11(P0,C,P) :-\n\t(find_split(P0, P1) ->\n\t    merge_repeat(P1,C,P2),\n\t    output_solution(P2,C),\n\t    alg11(P2,C,P)\n\t;\n\t    P = P0\n\t).\n\nmerge_repeat(Placed0,Constraints,Placed) :-\n\t(overlap(Placed0,Constraints,Place1,Place2,Rest,Violated) ->\n\t    merge(Place1,Place2,Violated,Place12),\n\t    length(Violated,VS),\n\t    (VS>1->\t\n\t    \twrite('**** VIOLATED SIZE ='),write(VS),\n\t\t\twrite(':'),write(Violated)\n\t\t;\n\t\t\tVS=1\n\t\t),\n\t    Placed1 = [Place12|Rest],\n\t    merge_repeat(Placed1, Constraints, Placed)\n\t;\n\t    Placed = Placed0\n\t).\n\t\n\nfind_split([PlaceA|Places],Placed) :-\n\tPlaceA = placed(_Pos,_Weight,_WPosn,Constraints,_Offsets), \n\t(single_split(Constraints,PlaceA,PlacesA) ->\n\t    append(PlacesA,Places,Placed)\n\t;\n\t    Placed = [PlaceA|Placed1],\n\t    find_split(Places,Placed1)\n\t).\n\n\nsingle_split([C|Cs], Place, ListPlaced) :-\n\tC = (VA >= VB + D),\n\tPlace = placed(_Pos,_Weight,_WPosn,Constraints,Offsets),\n\tdelete(Constraints,C,RConstraints),\n\treachable(RConstraints, [VA], VarsA),\n\treachable(RConstraints, [VB], VarsB),\n\t% check disjoint\n\t(intersect(VarsA,VarsB) -> error(disjoint) ; true),\n\tsplit_constraints(RConstraints, VarsA, ConstraintsA, ConstraintsB),\n\tsplit_offsets(Offsets, VarsA, OffsetsA, OffsetsB),\n        member(offsetb(OffA,_,block(VA,_,_)),OffsetsA),!,\n        member(offsetb(OffB,_,block(VB,_,_)),OffsetsB),!,\n\tdesired_position(OffsetsA, WPosnA, WeightA, PosA),\n\tdesired_position(OffsetsB, WPosnB, WeightB, PosB),\n\t((PosA + OffA) >= 0.0001 + (PosB + OffB) + D ->\n\t    PlacedA = placed(PosA, WeightA, WPosnA, ConstraintsA, OffsetsA),\n\t    PlacedB = placed(PosB, WeightB, WPosnB, ConstraintsB, OffsetsB),\n\t    get_positions(PlacedA,[],List1),\n\t    get_positions(PlacedB,[],List2),\n\t    get_positions(Place,[],List12),\n\t    Active = C,\n\t    write('split: '),\n\t     write(List12), write(' -> '), write(Active),\n\t    write(' -> '), write(List1), write(' '), write(List2), nl,\n\t    ListPlaced = [PlacedA,PlacedB]\n\t;\n\t    single_split(Cs, Place, ListPlaced)\n\t).\n\n\n\t\na1 :- prob1(B,C), alg1(B,C,_P).\na2 :- prob2(B,C), alg1(B,C,_P).\na3 :- prob3(B,C), alg1(B,C,_P).\na4 :- prob4(B,C), alg1(B,C,_P).\na5 :- prob5(B,C), alg1(B,C,_P).\na6 :- prob6(B,C), alg1(B,C,_P).\na7 :- prob7(B,C), alg1(B,C,_P).\na8 :- prob8(B,C), alg1(B,C,_P).\na9 :- prob9(B,C), alg1(B,C,_P).\na10 :- prob10(B,C), alg1(B,C,_P).\n"
  },
  {
    "path": "experimental/RectangleOverlapSolver/testdata/Test1.dot",
    "content": "graph G {\r\n\tnode [label=\"\\N\", shape=box, fontsize=10];\r\n\tgraph [overlap=true,splines=true,bb=\"0,0,478,731\"];\r\n\tA [label=\"A\", height=\"4\", width=\"1\", pos=\"100,100\"];\r\n\tB [label=\"B\", height=\"0.8\", width=\"2\", pos=\"220,-150\"];\r\n\tC [label=\"C\", height=\"0.8\", width=\"0.9\", pos=\"100,200\"];\r\n\tD [label=\"D\", height=\"2\", width=\"2\", pos=\"230,150\"];\r\n\tE [label=\"E\", height=\"2.5\", width=\"1\", pos=\"300,50\"];\r\n\tF [label=\"F\", height=\"1\", width=\"2\", pos=\"300,-180\"];\r\n\tG [label=\"G\", height=\"1\", width=\"2\", pos=\"350,100\"];\r\n}\r\n"
  },
  {
    "path": "experimental/RectangleOverlapSolver/testdata/graph1.dot",
    "content": "graph G {\n\tnode [label=\"\\N\", shape=box, fontsize=10];\n\tgraph [overlap=true,splines=true,bb=\"0,0,478,731\"];\n\t17594912 [label=17594912, height=\"0.28\", width=\"0.78\", pos=\"247,253\"];\n\t17315584 [label=17315584, height=\"0.28\", width=\"0.78\", pos=\"315,242\"];\n\t17350328 [label=17350328, height=\"0.28\", width=\"0.78\", pos=\"285,203\"];\n\t17315928 [label=17315928, height=\"0.28\", width=\"0.78\", pos=\"289,258\"];\n\t17372688 [label=17372688, height=\"0.28\", width=\"0.78\", pos=\"286,280\"];\n\t17315756 [label=17315756, height=\"0.28\", width=\"0.78\", pos=\"246,214\"];\n\t17595600 [label=17595600, height=\"0.28\", width=\"0.78\", pos=\"212,221\"];\n\t17347748 [label=17347748, height=\"0.28\", width=\"0.78\", pos=\"298,173\"];\n\t17316616 [label=17316616, height=\"0.28\", width=\"0.78\", pos=\"329,131\"];\n\t17206708 [label=17206708, height=\"0.28\", width=\"0.78\", pos=\"364,95\"];\n\t17316788 [label=17316788, height=\"0.28\", width=\"0.78\", pos=\"391,55\"];\n\t17595428 [label=17595428, height=\"0.28\", width=\"0.78\", pos=\"410,11\"];\n\t17316444 [label=17316444, height=\"0.28\", width=\"0.78\", pos=\"356,185\"];\n\t17348780 [label=17348780, height=\"0.28\", width=\"0.78\", pos=\"187,194\"];\n\t17318164 [label=17318164, height=\"0.28\", width=\"0.78\", pos=\"187,141\"];\n\t17207912 [label=17207912, height=\"0.28\", width=\"0.78\", pos=\"154,100\"];\n\t17268456 [label=17268456, height=\"0.28\", width=\"0.78\", pos=\"182,54\"];\n\t17281528 [label=17281528, height=\"0.28\", width=\"0.78\", pos=\"144,51\"];\n\t17318508 [label=17318508, height=\"0.28\", width=\"0.78\", pos=\"108,73\"];\n\t17317476 [label=17317476, height=\"0.28\", width=\"0.78\", pos=\"152,154\"];\n\t17207740 [label=17207740, height=\"0.28\", width=\"0.78\", pos=\"96,156\"];\n\t17318336 [label=17318336, height=\"0.28\", width=\"0.78\", pos=\"45,196\"];\n\t17317132 [label=17317132, height=\"0.28\", width=\"0.78\", pos=\"135,222\"];\n\t17348436 [label=17348436, height=\"0.28\", width=\"0.78\", pos=\"77,228\"];\n\t17210320 [label=17210320, height=\"0.28\", width=\"0.78\", pos=\"29,269\"];\n\t17207396 [label=17207396, height=\"0.28\", width=\"0.78\", pos=\"95,242\"];\n\t17317304 [label=17317304, height=\"0.28\", width=\"0.78\", pos=\"47,270\"];\n\t17594568 [label=17594568, height=\"0.28\", width=\"0.78\", pos=\"270,231\"];\n\t17315412 [label=17315412, height=\"0.28\", width=\"0.78\", pos=\"303,242\"];\n\t17315068 [label=17315068, height=\"0.28\", width=\"0.78\", pos=\"284,296\"];\n\t17205848 [label=17205848, height=\"0.28\", width=\"0.78\", pos=\"343,315\"];\n\t17315240 [label=17315240, height=\"0.28\", width=\"0.78\", pos=\"300,338\"];\n\t17578056 [label=17578056, height=\"0.28\", width=\"0.78\", pos=\"324,384\"];\n\t17319368 [label=17319368, height=\"0.28\", width=\"0.78\", pos=\"380,391\"];\n\t17255556 [label=17255556, height=\"0.28\", width=\"0.78\", pos=\"328,414\"];\n\t17577884 [label=17577884, height=\"0.28\", width=\"0.78\", pos=\"278,390\"];\n\t17218920 [label=17218920, height=\"0.28\", width=\"0.78\", pos=\"228,406\"];\n\t17318680 [label=17318680, height=\"0.28\", width=\"0.78\", pos=\"292,438\"];\n\t17209116 [label=17209116, height=\"0.28\", width=\"0.78\", pos=\"276,492\"];\n\t17318852 [label=17318852, height=\"0.28\", width=\"0.78\", pos=\"240,519\"];\n\t17320228 [label=17320228, height=\"0.28\", width=\"0.78\", pos=\"217,503\"];\n\t17320056 [label=17320056, height=\"0.28\", width=\"0.78\", pos=\"299,542\"];\n\t17208944 [label=17208944, height=\"0.28\", width=\"0.78\", pos=\"301,599\"];\n\t17319024 [label=17319024, height=\"0.28\", width=\"0.78\", pos=\"341,630\"];\n\t17598352 [label=17598352, height=\"0.28\", width=\"0.78\", pos=\"354,673\"];\n\t17319712 [label=17319712, height=\"0.28\", width=\"0.78\", pos=\"411,645\"];\n\t17255212 [label=17255212, height=\"0.28\", width=\"0.78\", pos=\"323,719\"];\n\t17319540 [label=17319540, height=\"0.28\", width=\"0.78\", pos=\"403,698\"];\n\t17598524 [label=17598524, height=\"0.28\", width=\"0.78\", pos=\"391,658\"];\n\t17319884 [label=17319884, height=\"0.28\", width=\"0.78\", pos=\"449,645\"];\n\t17255384 [label=17255384, height=\"0.28\", width=\"0.78\", pos=\"387,720\"];\n\t17319196 [label=17319196, height=\"0.28\", width=\"0.78\", pos=\"254,627\"];\n\t17316100 [label=17316100, height=\"0.28\", width=\"0.78\", pos=\"252,304\"];\n\t17316272 [label=17316272, height=\"0.28\", width=\"0.78\", pos=\"200,279\"];\n\t17594912 -- 17315584 [color=grey, dir=forward, pos=\"e,287,246 275,248 276,248 276,248 277,248\"];\n\t17594912 -- 17315756 [color=grey, dir=forward, pos=\"e,246,224 247,243 247,240 247,237 247,234\"];\n\t17594912 -- 17315412 [color=grey, dir=forward, pos=\"e,275,247 275,247 275,247 275,247 275,247\"];\n\t17315584 -- 17350328 [color=grey, dir=forward, pos=\"e,293,213 307,232 305,229 302,225 299,221\"];\n\t17315584 -- 17594568 [color=blue, pos=\"301,232 300,232 299,231 298,231\"];\n\t17350328 -- 17315928 [color=red, dir=forward, pos=\"e,288,248 286,213 287,220 287,229 288,238\"];\n\t17315928 -- 17594912 [color=grey, dir=forward, pos=\"e,261,255 261,255 261,255 261,255 261,255\"];\n\t17315928 -- 17372688 [color=red, dir=forward, pos=\"e,288,270 288,268 288,268 288,268 288,269\"];\n\t17372688 -- 17315584 [color=grey, dir=forward, pos=\"e,307,252 294,270 296,267 299,263 301,260\"];\n\t17372688 -- 17315756 [color=grey, dir=forward, pos=\"e,252,224 280,270 274,260 265,245 257,233\"];\n\t17372688 -- 17315412 [color=grey, dir=forward, pos=\"e,299,252 291,270 292,267 293,264 294,261\"];\n\t17315756 -- 17595600 [color=blue, pos=\"218,214 218,214 218,214 218,214\"];\n\t17315756 -- 17347748 [color=grey, dir=forward, pos=\"e,285,183 259,204 265,200 271,195 277,190\"];\n\t17315756 -- 17350328 [color=grey, dir=forward, pos=\"e,274,206 274,206 274,206 274,206 274,206\"];\n\t17315756 -- 17348780 [color=grey, dir=forward, pos=\"e,215,203 218,204 218,204 218,204 218,204\"];\n\t17315756 -- 17594568 [color=blue, pos=\"249,224 249,224 249,224 249,224\"];\n\t17595600 -- 17315756 [color=blue, pos=\"240,220 240,220 240,220 240,220\"];\n\t17347748 -- 17316616 [color=grey, dir=forward, pos=\"e,322,141 306,163 309,159 313,154 316,149\"];\n\t17316616 -- 17206708 [color=grey, dir=forward, pos=\"e,354,105 339,121 342,118 344,115 347,112\"];\n\t17206708 -- 17316788 [color=grey, dir=forward, pos=\"e,384,65 371,85 373,82 376,78 378,74\"];\n\t17316788 -- 17595428 [color=grey, dir=forward, pos=\"e,406,21 395,45 397,41 399,35 401,30\"];\n\t17316444 -- 17347748 [color=grey, dir=forward, pos=\"e,326,179 328,179 328,179 328,179 327,179\"];\n\t17348780 -- 17318164 [color=grey, dir=forward, pos=\"e,187,151 187,184 187,177 187,169 187,161\"];\n\t17318164 -- 17207912 [color=grey, dir=forward, pos=\"e,162,110 179,131 176,127 172,123 168,118\"];\n\t17207912 -- 17268456 [color=grey, dir=forward, pos=\"e,176,64 160,90 163,85 167,79 171,73\"];\n\t17207912 -- 17281528 [color=grey, dir=forward, pos=\"e,146,61 152,90 151,84 149,77 148,71\"];\n\t17207912 -- 17318508 [color=grey, dir=forward, pos=\"e,125,83 137,90 136,89 135,89 134,88\"];\n\t17317476 -- 17207912 [color=grey, dir=forward, pos=\"e,154,110 152,144 153,137 153,128 153,120\"];\n\t17317476 -- 17207740 [color=blue, pos=\"124,148 124,148 124,148 124,148\"];\n\t17317476 -- 17348780 [color=red, dir=forward, pos=\"e,178,184 161,164 164,168 168,172 171,176\"];\n\t17207740 -- 17317476 [color=blue, pos=\"124,161 124,161 124,161 124,161\"];\n\t17318336 -- 17207740 [color=grey, dir=forward, pos=\"e,83,166 58,186 63,182 69,177 75,172\"];\n\t17317132 -- 17348436 [color=blue, pos=\"107,218 106,218 106,218 105,218\"];\n\t17317132 -- 17207396 [color=blue, pos=\"107,228 105,229 102,231 101,232\"];\n\t17317132 -- 17348780 [color=grey, dir=forward, pos=\"e,169,204 154,212 156,211 158,210 160,209\"];\n\t17348436 -- 17317132 [color=blue, pos=\"105,231 106,231 106,231 107,231\"];\n\t17210320 -- 17348436 [color=grey, dir=forward, pos=\"e,65,238 41,259 46,255 52,250 57,245\"];\n\t17207396 -- 17317132 [color=blue, pos=\"123,234 124,233 125,233 127,232\"];\n\t17317304 -- 17207396 [color=grey, dir=forward, pos=\"e,78,252 64,260 66,259 67,258 69,257\"];\n\t17594568 -- 17315584 [color=blue, pos=\"286,241 286,241 287,241 287,241\"];\n\t17594568 -- 17315756 [color=blue, pos=\"265,221 265,221 265,221 265,221\"];\n\t17594568 -- 17315412 [color=blue, pos=\"280,241 280,241 280,241 280,241\"];\n\t17315412 -- 17350328 [color=grey, dir=forward, pos=\"e,290,213 298,232 297,229 296,226 294,223\"];\n\t17315412 -- 17594568 [color=blue, pos=\"293,232 293,232 293,232 293,232\"];\n\t17315068 -- 17205848 [color=blue, pos=\"297,306 302,309 309,311 315,313\"];\n\t17315068 -- 17594568 [color=grey, dir=forward, pos=\"e,272,241 282,286 280,277 277,263 274,251\"];\n\t17205848 -- 17315068 [color=blue, pos=\"331,305 326,302 319,300 312,298\"];\n\t17315240 -- 17578056 [color=blue, pos=\"299,348 302,356 307,366 312,374\"];\n\t17315240 -- 17372688 [color=grey, dir=forward, pos=\"e,289,290 298,328 296,320 293,309 291,300\"];\n\t17315240 -- 17577884 [color=blue, pos=\"289,348 283,357 278,371 276,380\"];\n\t17315240 -- 17205848 [color=grey, dir=forward, pos=\"e,325,325 319,328 319,328 319,328 319,328\"];\n\t17578056 -- 17315240 [color=blue, pos=\"324,374 321,366 316,356 311,348\"];\n\t17319368 -- 17578056 [color=grey, dir=forward, pos=\"e,352,388 352,388 352,388 352,388 352,388\"];\n\t17255556 -- 17578056 [color=grey, dir=forward, pos=\"e,325,394 327,404 327,404 327,404 327,404\"];\n\t17255556 -- 17577884 [color=grey, dir=forward, pos=\"e,299,400 307,404 307,404 307,404 307,404\"];\n\t17577884 -- 17315240 [color=blue, pos=\"288,380 293,371 298,357 301,348\"];\n\t17218920 -- 17577884 [color=grey, dir=forward, pos=\"e,256,397 256,397 256,397 256,397 256,397\"];\n\t17318680 -- 17578056 [color=grey, dir=forward, pos=\"e,318,394 298,428 302,421 308,411 313,403\"];\n\t17318680 -- 17577884 [color=grey, dir=forward, pos=\"e,281,400 289,428 288,423 286,416 284,410\"];\n\t17209116 -- 17318680 [color=grey, dir=forward, pos=\"e,289,448 279,482 281,475 284,466 286,458\"];\n\t17318852 -- 17209116 [color=grey, dir=forward, pos=\"e,262,502 253,509 253,509 254,508 254,508\"];\n\t17320228 -- 17209116 [color=grey, dir=forward, pos=\"e,248,497 245,498 245,498 245,498 245,498\"];\n\t17320056 -- 17209116 [color=grey, dir=forward, pos=\"e,281,502 294,532 291,526 288,519 285,512\"];\n\t17208944 -- 17320056 [color=grey, dir=forward, pos=\"e,299,552 301,589 300,581 300,571 300,562\"];\n\t17319024 -- 17598352 [color=red, dir=forward, pos=\"e,351,663 344,640 345,644 347,649 348,653\"];\n\t17319024 -- 17208944 [color=grey, dir=forward, pos=\"e,314,609 328,620 326,619 324,617 322,616\"];\n\t17319024 -- 17598524 [color=red, dir=forward, pos=\"e,373,648 359,640 361,641 362,642 364,643\"];\n\t17598352 -- 17319712 [color=grey, dir=forward, pos=\"e,391,655 375,663 377,662 380,661 382,659\"];\n\t17255212 -- 17598352 [color=grey, dir=forward, pos=\"e,347,683 330,709 333,704 337,698 341,692\"];\n\t17319540 -- 17598352 [color=grey, dir=forward, pos=\"e,374,683 383,688 383,688 383,688 383,688\"];\n\t17319540 -- 17598524 [color=grey, dir=forward, pos=\"e,394,668 400,688 399,685 398,681 397,678\"];\n\t17598524 -- 17319884 [color=grey, dir=forward, pos=\"e,421,652 419,652 419,652 419,652 420,652\"];\n\t17255384 -- 17598524 [color=grey, dir=forward, pos=\"e,390,668 388,710 389,701 389,689 390,678\"];\n\t17319196 -- 17208944 [color=grey, dir=forward, pos=\"e,284,609 271,617 272,616 274,615 275,614\"];\n\t17316100 -- 17594912 [color=grey, dir=forward, pos=\"e,248,263 251,294 250,288 250,280 249,273\"];\n\t17316100 -- 17372688 [color=grey, dir=forward, pos=\"e,272,290 266,294 266,294 266,294 266,294\"];\n\t17316272 -- 17594912 [color=grey, dir=forward, pos=\"e,229,263 218,269 219,269 220,268 220,268\"];\n}\n"
  },
  {
    "path": "experimental/RectangleOverlapSolver/testdata/graph2.dot",
    "content": "graph G {\n\tnode [label=\"\\N\", shape=box, height=\"0.01\", width=\"0.01\", fontsize=10];\n\tgraph [bb=\"0,0,745,690\"];\n\t17338632 [label=17338632, height=\"0.28\", width=\"0.78\", pos=\"91,577\"];\n\t17229412 [label=17229412, height=\"0.28\", width=\"0.78\", pos=\"142,595\"];\n\t17341040 [label=17341040, height=\"0.28\", width=\"0.78\", pos=\"174,544\"];\n\t17230272 [label=17230272, height=\"0.28\", width=\"0.78\", pos=\"209,494\"];\n\t17338116 [label=17338116, height=\"0.28\", width=\"0.78\", pos=\"245,459\"];\n\t17230444 [label=17230444, height=\"0.28\", width=\"0.78\", pos=\"182,454\"];\n\t17339836 [label=17339836, height=\"0.28\", width=\"0.78\", pos=\"120,477\"];\n\t17229240 [label=17229240, height=\"0.28\", width=\"0.78\", pos=\"71,521\"];\n\t17338804 [label=17338804, height=\"0.28\", width=\"0.78\", pos=\"37,560\"];\n\t17229068 [label=17229068, height=\"0.28\", width=\"0.78\", pos=\"92,543\"];\n\t17338288 [label=17338288, height=\"0.28\", width=\"0.78\", pos=\"136,498\"];\n\t17228724 [label=17228724, height=\"0.28\", width=\"0.78\", pos=\"194,468\"];\n\t17339320 [label=17339320, height=\"0.28\", width=\"0.78\", pos=\"67,607\"];\n\t17339492 [label=17339492, height=\"0.28\", width=\"0.78\", pos=\"29,571\"];\n\t17230960 [label=17230960, height=\"0.28\", width=\"0.78\", pos=\"292,484\"];\n\t17343104 [label=17343104, height=\"0.28\", width=\"0.78\", pos=\"345,525\"];\n\t17229928 [label=17229928, height=\"0.28\", width=\"0.78\", pos=\"387,575\"];\n\t17342588 [label=17342588, height=\"0.28\", width=\"0.78\", pos=\"435,612\"];\n\t17342760 [label=17342760, height=\"0.28\", width=\"0.78\", pos=\"375,628\"];\n\t17230100 [label=17230100, height=\"0.28\", width=\"0.78\", pos=\"326,608\"];\n\t17343448 [label=17343448, height=\"0.28\", width=\"0.78\", pos=\"301,554\"];\n\t17231132 [label=17231132, height=\"0.28\", width=\"0.78\", pos=\"269,500\"];\n\t17343276 [label=17343276, height=\"0.28\", width=\"0.78\", pos=\"335,676\"];\n\t17230788 [label=17230788, height=\"0.28\", width=\"0.78\", pos=\"307,464\"];\n\t17342416 [label=17342416, height=\"0.28\", width=\"0.78\", pos=\"373,485\"];\n\t17229756 [label=17229756, height=\"0.28\", width=\"0.78\", pos=\"432,517\"];\n\t17341900 [label=17341900, height=\"0.28\", width=\"0.78\", pos=\"485,560\"];\n\t17342072 [label=17342072, height=\"0.28\", width=\"0.78\", pos=\"460,560\"];\n\t17230616 [label=17230616, height=\"0.28\", width=\"0.78\", pos=\"244,508\"];\n\t17341728 [label=17341728, height=\"0.28\", width=\"0.78\", pos=\"258,565\"];\n\t17229584 [label=17229584, height=\"0.28\", width=\"0.78\", pos=\"285,608\"];\n\t17341212 [label=17341212, height=\"0.28\", width=\"0.78\", pos=\"327,664\"];\n\t17341384 [label=17341384, height=\"0.28\", width=\"0.78\", pos=\"270,679\"];\n\t17539528 [label=17539528, height=\"0.28\", width=\"0.78\", pos=\"232,399\"];\n\t17343792 [label=17343792, height=\"0.28\", width=\"0.78\", pos=\"228,337\"];\n\t17232680 [label=17232680, height=\"0.28\", width=\"0.78\", pos=\"240,288\"];\n\t17211352 [label=17211352, height=\"0.28\", width=\"0.78\", pos=\"273,240\"];\n\t17232852 [label=17232852, height=\"0.28\", width=\"0.78\", pos=\"267,170\"];\n\t17235432 [label=17235432, height=\"0.28\", width=\"0.78\", pos=\"255,124\"];\n\t17493432 [label=17493432, height=\"0.28\", width=\"0.78\", pos=\"200,96\"];\n\t17234744 [label=17234744, height=\"0.28\", width=\"0.78\", pos=\"291,77\"];\n\t17336740 [label=17336740, height=\"0.28\", width=\"0.78\", pos=\"336,49\"];\n\t17234400 [label=17234400, height=\"0.28\", width=\"0.78\", pos=\"366,23\"];\n\t17337944 [label=17337944, height=\"0.28\", width=\"0.78\", pos=\"298,28\"];\n\t17233540 [label=17233540, height=\"0.28\", width=\"0.78\", pos=\"238,67\"];\n\t17214448 [label=17214448, height=\"0.28\", width=\"0.78\", pos=\"193,123\"];\n\t17586484 [label=17586484, height=\"0.28\", width=\"0.78\", pos=\"161,170\"];\n\t17212900 [label=17212900, height=\"0.28\", width=\"0.78\", pos=\"149,244\"];\n\t17233024 [label=17233024, height=\"0.28\", width=\"0.78\", pos=\"184,288\"];\n\t17213072 [label=17213072, height=\"0.28\", width=\"0.78\", pos=\"170,236\"];\n\t17345512 [label=17345512, height=\"0.28\", width=\"0.78\", pos=\"429,30\"];\n\t17234228 [label=17234228, height=\"0.28\", width=\"0.78\", pos=\"490,11\"];\n\t17344824 [label=17344824, height=\"0.28\", width=\"0.78\", pos=\"554,29\"];\n\t17233712 [label=17233712, height=\"0.28\", width=\"0.78\", pos=\"616,49\"];\n\t17339148 [label=17339148, height=\"0.28\", width=\"0.78\", pos=\"659,122\"];\n\t17228896 [label=17228896, height=\"0.28\", width=\"0.78\", pos=\"716,122\"];\n\t17299072 [label=17299072, height=\"0.28\", width=\"0.78\", pos=\"452,77\"];\n\t17344480 [label=17344480, height=\"0.28\", width=\"0.78\", pos=\"471,135\"];\n\t17231992 [label=17231992, height=\"0.28\", width=\"0.78\", pos=\"480,195\"];\n\t17344136 [label=17344136, height=\"0.28\", width=\"0.78\", pos=\"440,232\"];\n\t17265532 [label=17265532, height=\"0.28\", width=\"0.78\", pos=\"430,280\"];\n\t17209116 [label=17209116, height=\"0.28\", width=\"0.78\", pos=\"376,302\"];\n\t17539356 [label=17539356, height=\"0.28\", width=\"0.78\", pos=\"362,350\"];\n\t17343620 [label=17343620, height=\"0.28\", width=\"0.78\", pos=\"327,395\"];\n\t17231304 [label=17231304, height=\"0.28\", width=\"0.78\", pos=\"276,425\"];\n\t17232164 [label=17232164, height=\"0.28\", width=\"0.78\", pos=\"329,251\"];\n\t17232508 [label=17232508, height=\"0.28\", width=\"0.78\", pos=\"388,247\"];\n\t17344652 [label=17344652, height=\"0.28\", width=\"0.78\", pos=\"337,287\"];\n\t17232336 [label=17232336, height=\"0.28\", width=\"0.78\", pos=\"282,318\"];\n\t17344308 [label=17344308, height=\"0.28\", width=\"0.78\", pos=\"530,240\"];\n\t56588 [label=56588, height=\"0.28\", width=\"0.58\", pos=\"120,650\"];\n\t17340008 [label=17340008, height=\"0.28\", width=\"0.78\", pos=\"156,650\"];\n\t17338632 -- 17229412 [color=red, dir=forward, pos=\"e,119,587 119,587 119,587 119,587 119,587\"];\n\t17338632 -- 17229240 [color=grey, dir=forward, pos=\"e,75,531 87,567 85,560 81,550 78,541\"];\n\t17338632 -- 17229068 [color=grey, dir=forward, pos=\"e,92,553 91,567 91,566 91,565 91,563\"];\n\t17229412 -- 17341040 [color=grey, dir=forward, pos=\"e,168,554 148,585 152,579 157,570 162,563\"];\n\t17341040 -- 17230272 [color=grey, dir=forward, pos=\"e,202,504 181,534 185,528 191,520 196,513\"];\n\t17230272 -- 17338116 [color=blue, pos=\"229,484 234,480 239,474 242,469\"];\n\t17338116 -- 17230444 [color=blue, pos=\"217,450 215,450 212,450 210,449\"];\n\t17338116 -- 17230960 [color=blue, pos=\"253,469 256,472 260,474 264,476\"];\n\t17338116 -- 17230788 [color=blue, pos=\"273,467 275,467 277,467 279,468\"];\n\t17338116 -- 17230616 [color=blue, pos=\"239,469 237,477 237,489 239,498\"];\n\t17338116 -- 17228724 [color=blue, pos=\"217,457 215,457 214,458 212,458\"];\n\t17338116 -- 17539528 [color=grey, dir=forward, pos=\"e,234,409 243,449 241,441 239,429 236,419\"];\n\t17338116 -- 17231304 [color=grey, dir=forward, pos=\"e,267,435 254,449 256,447 258,445 260,442\"];\n\t17338116 -- 17230272 [color=blue, pos=\"225,469 220,474 215,479 212,484\"];\n\t17338116 -- 17231132 [color=blue, pos=\"245,469 247,476 251,484 256,490\"];\n\t17230444 -- 17338116 [color=blue, pos=\"210,462 212,462 215,462 217,463\"];\n\t17339836 -- 17230444 [color=grey, dir=forward, pos=\"e,155,464 147,467 147,467 147,467 147,467\"];\n\t17229240 -- 17339836 [color=grey, dir=forward, pos=\"e,109,487 82,511 88,506 95,500 101,494\"];\n\t17338804 -- 17229240 [color=grey, dir=forward, pos=\"e,62,531 46,550 49,546 52,543 56,539\"];\n\t17338804 -- 17229068 [color=grey, dir=forward, pos=\"e,65,551 65,551 65,551 65,551 65,551\"];\n\t17229068 -- 17338288 [color=grey, dir=forward, pos=\"e,126,508 102,533 107,528 113,521 119,515\"];\n\t17338288 -- 17228724 [color=grey, dir=forward, pos=\"e,174,478 156,488 159,487 162,485 165,483\"];\n\t17228724 -- 17338116 [color=blue, pos=\"222,469 222,469 222,469 222,469\"];\n\t17339320 -- 17229068 [color=grey, dir=forward, pos=\"e,88,553 71,597 75,588 80,574 84,563\"];\n\t17339492 -- 17229240 [color=grey, dir=forward, pos=\"e,63,531 37,561 43,554 50,546 56,539\"];\n\t17230960 -- 17338116 [color=blue, pos=\"284,474 281,472 277,469 273,467\"];\n\t17343104 -- 17230960 [color=grey, dir=forward, pos=\"e,305,494 332,515 326,511 319,506 313,500\"];\n\t17229928 -- 17343104 [color=grey, dir=forward, pos=\"e,353,535 379,565 373,558 366,550 360,543\"];\n\t17342588 -- 17229928 [color=grey, dir=forward, pos=\"e,400,585 422,602 418,599 413,595 408,591\"];\n\t17342760 -- 17229928 [color=grey, dir=forward, pos=\"e,385,585 377,618 378,611 381,603 383,595\"];\n\t17342760 -- 17230100 [color=grey, dir=forward, pos=\"e,351,618 351,618 351,618 351,618 351,618\"];\n\t17230100 -- 17343448 [color=grey, dir=forward, pos=\"e,306,564 321,598 318,591 314,582 310,573\"];\n\t17343448 -- 17231132 [color=grey, dir=forward, pos=\"e,275,510 295,544 291,537 285,527 280,519\"];\n\t17231132 -- 17338116 [color=blue, pos=\"269,490 267,484 262,476 258,469\"];\n\t17343276 -- 17230100 [color=grey, dir=forward, pos=\"e,327,618 334,666 332,656 330,641 328,628\"];\n\t17230788 -- 17338116 [color=blue, pos=\"279,455 277,455 275,455 273,454\"];\n\t17342416 -- 17230788 [color=grey, dir=forward, pos=\"e,335,473 345,476 345,476 345,476 345,476\"];\n\t17229756 -- 17342416 [color=grey, dir=forward, pos=\"e,391,495 413,507 409,505 404,502 400,500\"];\n\t17341900 -- 17229756 [color=grey, dir=forward, pos=\"e,445,527 472,550 466,545 459,539 453,534\"];\n\t17342072 -- 17229756 [color=grey, dir=forward, pos=\"e,439,527 453,550 451,546 447,541 444,536\"];\n\t17230616 -- 17338116 [color=blue, pos=\"249,498 251,489 251,478 250,469\"];\n\t17341728 -- 17230616 [color=grey, dir=forward, pos=\"e,246,518 255,555 253,547 251,537 249,528\"];\n\t17229584 -- 17341728 [color=grey, dir=forward, pos=\"e,264,575 278,598 276,594 272,589 269,584\"];\n\t17341212 -- 17229584 [color=grey, dir=forward, pos=\"e,293,618 319,654 314,646 305,636 299,626\"];\n\t17341384 -- 17229584 [color=grey, dir=forward, pos=\"e,283,618 272,669 274,658 278,641 281,628\"];\n\t17539528 -- 17343792 [color=blue, pos=\"236,389 237,377 236,359 234,347\"];\n\t17343792 -- 17232680 [color=grey, dir=forward, pos=\"e,238,298 231,327 232,321 234,314 236,308\"];\n\t17343792 -- 17539528 [color=blue, pos=\"223,347 222,359 223,378 226,389\"];\n\t17343792 -- 17233024 [color=grey, dir=forward, pos=\"e,193,298 219,327 213,321 206,313 200,306\"];\n\t17343792 -- 17232336 [color=grey, dir=forward, pos=\"e,256,327 256,327 256,327 256,327 256,327\"];\n\t17232680 -- 17211352 [color=blue, pos=\"254,278 261,270 268,259 272,250\"];\n\t17211352 -- 17232680 [color=blue, pos=\"259,250 252,258 245,269 241,278\"];\n\t17211352 -- 17232852 [color=grey, dir=forward, pos=\"e,268,180 272,230 271,220 270,203 269,190\"];\n\t17211352 -- 17232164 [color=blue, pos=\"293,250 296,251 298,251 301,252\"];\n\t17232852 -- 17235432 [color=blue, pos=\"270,160 269,152 267,142 264,134\"];\n\t17235432 -- 17493432 [color=blue, pos=\"248,114 243,110 236,106 228,102\"];\n\t17235432 -- 17234744 [color=grey, dir=forward, pos=\"e,283,87 263,114 267,109 272,102 277,95\"];\n\t17235432 -- 17232852 [color=blue, pos=\"252,134 253,142 255,152 259,160\"];\n\t17493432 -- 17235432 [color=blue, pos=\"209,106 214,110 220,113 227,117\"];\n\t17234744 -- 17336740 [color=blue, pos=\"319,67 323,64 326,62 329,59\"];\n\t17336740 -- 17234744 [color=blue, pos=\"308,58 304,61 300,64 297,67\"];\n\t17336740 -- 17234400 [color=grey, dir=forward, pos=\"e,354,33 348,39 348,39 348,39 348,39\"];\n\t17337944 -- 17233540 [color=blue, pos=\"270,38 260,44 251,51 244,57\"];\n\t17337944 -- 17234400 [color=grey, dir=forward, pos=\"e,338,25 326,26 327,26 327,26 328,26\"];\n\t17233540 -- 17337944 [color=blue, pos=\"264,57 274,51 284,44 290,38\"];\n\t17214448 -- 17586484 [color=blue, pos=\"178,133 171,141 164,152 161,160\"];\n\t17214448 -- 17233540 [color=grey, dir=forward, pos=\"e,230,77 201,113 207,105 216,95 224,85\"];\n\t17586484 -- 17214448 [color=blue, pos=\"174,160 181,152 188,141 191,133\"];\n\t17212900 -- 17586484 [color=grey, dir=forward, pos=\"e,159,180 151,234 153,222 155,204 158,190\"];\n\t17212900 -- 17233024 [color=blue, pos=\"150,254 154,261 161,271 167,278\"];\n\t17233024 -- 17212900 [color=blue, pos=\"182,278 178,271 171,261 165,254\"];\n\t17233024 -- 17213072 [color=blue, pos=\"186,278 185,269 182,255 178,246\"];\n\t17213072 -- 17586484 [color=grey, dir=forward, pos=\"e,162,180 169,226 167,217 165,202 164,190\"];\n\t17213072 -- 17233024 [color=blue, pos=\"167,246 168,255 171,268 175,278\"];\n\t17345512 -- 17234400 [color=grey, dir=forward, pos=\"e,394,26 401,27 401,27 401,27 401,27\"];\n\t17345512 -- 17234228 [color=blue, pos=\"457,28 464,26 471,24 476,21\"];\n\t17234228 -- 17345512 [color=blue, pos=\"462,12 454,14 447,17 441,20\"];\n\t17344824 -- 17234228 [color=grey, dir=forward, pos=\"e,518,19 526,21 526,21 526,21 526,21\"];\n\t17344824 -- 17233712 [color=blue, pos=\"567,39 573,42 581,44 588,46\"];\n\t17233712 -- 17344824 [color=blue, pos=\"604,39 598,36 590,33 582,31\"];\n\t17339148 -- 17228896 [color=blue, pos=\"687,129 687,129 687,129 688,129\"];\n\t17339148 -- 17233712 [color=grey, dir=forward, pos=\"e,622,59 653,112 647,101 635,82 627,68\"];\n\t17228896 -- 17339148 [color=blue, pos=\"688,115 688,115 688,115 687,115\"];\n\t17299072 -- 17345512 [color=grey, dir=forward, pos=\"e,434,40 447,67 444,62 441,55 438,49\"];\n\t17344480 -- 17299072 [color=grey, dir=forward, pos=\"e,455,87 468,125 465,117 462,106 458,97\"];\n\t17231992 -- 17344480 [color=grey, dir=forward, pos=\"e,473,145 478,185 477,177 475,165 474,155\"];\n\t17344136 -- 17265532 [color=blue, pos=\"432,242 429,250 427,262 427,270\"];\n\t17344136 -- 17232508 [color=blue, pos=\"412,233 408,234 404,236 401,237\"];\n\t17344136 -- 17231992 [color=grey, dir=forward, pos=\"e,469,205 451,222 454,219 458,216 462,212\"];\n\t17265532 -- 17344136 [color=blue, pos=\"437,270 440,262 443,250 443,242\"];\n\t17209116 -- 17265532 [color=grey, dir=forward, pos=\"e,406,290 401,292 401,292 401,292 401,292\"];\n\t17209116 -- 17539356 [color=blue, pos=\"367,312 363,320 360,332 359,340\"];\n\t17209116 -- 17232164 [color=grey, dir=forward, pos=\"e,338,261 366,292 360,285 352,277 345,269\"];\n\t17539356 -- 17209116 [color=blue, pos=\"371,340 375,332 377,320 378,312\"];\n\t17343620 -- 17539356 [color=grey, dir=forward, pos=\"e,354,360 335,385 339,380 343,374 348,368\"];\n\t17343620 -- 17231304 [color=blue, pos=\"299,403 293,407 287,411 282,415\"];\n\t17231304 -- 17343620 [color=blue, pos=\"304,415 310,412 315,408 319,405\"];\n\t17232164 -- 17211352 [color=blue, pos=\"311,241 308,240 305,239 301,238\"];\n\t17232508 -- 17344136 [color=blue, pos=\"416,245 419,244 422,243 425,242\"];\n\t17344652 -- 17232508 [color=grey, dir=forward, pos=\"e,375,257 350,277 355,273 361,268 367,263\"];\n\t17344652 -- 17232336 [color=blue, pos=\"309,295 302,299 294,304 289,308\"];\n\t17232336 -- 17344652 [color=blue, pos=\"310,309 317,305 324,301 329,297\"];\n\t17344308 -- 17231992 [color=grey, dir=forward, pos=\"e,491,205 518,230 512,224 505,218 499,212\"];\n\t56588 -- 17229412 [color=grey, dir=forward, pos=\"e,138,605 124,640 127,633 131,623 134,614\"];\n\t17340008 -- 17229412 [color=grey, dir=forward, pos=\"e,144,605 153,640 152,633 149,623 147,615\"];\n}\n"
  },
  {
    "path": "experimental/RectangleOverlapSolver/testdata/graph3.dot",
    "content": "graph G {\n\tnode [label=\"\\N\", shape=box, height=\"0.01\", width=\"0.01\", fontsize=10];\n\tgraph [bb=\"0,0,574,731\"];\n\t17326420 [label=17326420, height=\"0.28\", width=\"0.78\", pos=\"96,341\"];\n\t17866156 [label=17866156, height=\"0.28\", width=\"0.78\", pos=\"94,304\"];\n\t17355832 [label=17355832, height=\"0.28\", width=\"0.78\", pos=\"100,268\"];\n\t17243688 [label=17243688, height=\"0.28\", width=\"0.78\", pos=\"100,232\"];\n\t17314896 [label=17314896, height=\"0.28\", width=\"0.78\", pos=\"108,196\"];\n\t17243860 [label=17243860, height=\"0.28\", width=\"0.78\", pos=\"111,159\"];\n\t17314724 [label=17314724, height=\"0.28\", width=\"0.78\", pos=\"115,119\"];\n\t17745584 [label=17745584, height=\"0.28\", width=\"0.78\", pos=\"159,102\"];\n\t17270176 [label=17270176, height=\"0.28\", width=\"0.78\", pos=\"188,74\"];\n\t17364432 [label=17364432, height=\"0.28\", width=\"0.78\", pos=\"212,46\"];\n\t17310424 [label=17310424, height=\"0.28\", width=\"0.78\", pos=\"194,116\"];\n\t17204644 [label=17204644, height=\"0.28\", width=\"0.78\", pos=\"76,102\"];\n\t17270692 [label=17270692, height=\"0.28\", width=\"0.78\", pos=\"52,71\"];\n\t17205160 [label=17205160, height=\"0.28\", width=\"0.78\", pos=\"29,43\"];\n\t17310940 [label=17310940, height=\"0.28\", width=\"0.78\", pos=\"41,108\"];\n\t17778436 [label=17778436, height=\"0.28\", width=\"0.78\", pos=\"123,86\"];\n\t17270864 [label=17270864, height=\"0.28\", width=\"0.78\", pos=\"123,48\"];\n\t17244548 [label=17244548, height=\"0.28\", width=\"0.78\", pos=\"125,11\"];\n\t17311112 [label=17311112, height=\"0.28\", width=\"0.78\", pos=\"154,105\"];\n\t17243344 [label=17243344, height=\"0.28\", width=\"0.78\", pos=\"91,379\"];\n\t17326248 [label=17326248, height=\"0.28\", width=\"0.78\", pos=\"82,420\"];\n\t17496356 [label=17496356, height=\"0.28\", width=\"0.78\", pos=\"52,405\"];\n\t17326076 [label=17326076, height=\"0.28\", width=\"0.78\", pos=\"41,424\"];\n\t17274648 [label=17274648, height=\"0.28\", width=\"0.78\", pos=\"91,460\"];\n\t17845860 [label=17845860, height=\"0.28\", width=\"0.78\", pos=\"101,499\"];\n\t17355660 [label=17355660, height=\"0.28\", width=\"0.78\", pos=\"106,545\"];\n\t17242656 [label=17242656, height=\"0.28\", width=\"0.78\", pos=\"112,584\"];\n\t17355316 [label=17355316, height=\"0.28\", width=\"0.78\", pos=\"83,621\"];\n\t17355488 [label=17355488, height=\"0.28\", width=\"0.78\", pos=\"69,621\"];\n\t17299416 [label=17299416, height=\"0.28\", width=\"0.78\", pos=\"153,621\"];\n\t17242312 [label=17242312, height=\"0.28\", width=\"0.78\", pos=\"124,647\"];\n\t17245064 [label=17245064, height=\"0.28\", width=\"0.78\", pos=\"187,632\"];\n\t17356176 [label=17356176, height=\"0.28\", width=\"0.78\", pos=\"225,621\"];\n\t17245408 [label=17245408, height=\"0.28\", width=\"0.78\", pos=\"255,608\"];\n\t17315756 [label=17315756, height=\"0.28\", width=\"0.78\", pos=\"268,652\"];\n\t17344480 [label=17344480, height=\"0.28\", width=\"0.78\", pos=\"230,654\"];\n\t17255900 [label=17255900, height=\"0.28\", width=\"0.78\", pos=\"188,654\"];\n\t17356520 [label=17356520, height=\"0.28\", width=\"0.78\", pos=\"145,650\"];\n\t17247472 [label=17247472, height=\"0.28\", width=\"0.78\", pos=\"106,654\"];\n\t17247816 [label=17247816, height=\"0.28\", width=\"0.78\", pos=\"137,621\"];\n\t17247644 [label=17247644, height=\"0.28\", width=\"0.78\", pos=\"108,616\"];\n\t17356692 [label=17356692, height=\"0.28\", width=\"0.78\", pos=\"79,578\"];\n\t17231820 [label=17231820, height=\"0.28\", width=\"0.78\", pos=\"313,643\"];\n\t17789444 [label=17789444, height=\"0.28\", width=\"0.78\", pos=\"357,629\"];\n\t17356348 [label=17356348, height=\"0.28\", width=\"0.78\", pos=\"399,624\"];\n\t17474856 [label=17474856, height=\"0.28\", width=\"0.78\", pos=\"440,626\"];\n\t17213588 [label=17213588, height=\"0.28\", width=\"0.78\", pos=\"477,643\"];\n\t17246612 [label=17246612, height=\"0.28\", width=\"0.78\", pos=\"513,632\"];\n\t17213416 [label=17213416, height=\"0.28\", width=\"0.78\", pos=\"471,643\"];\n\t17830208 [label=17830208, height=\"0.28\", width=\"0.78\", pos=\"494,654\"];\n\t17210664 [label=17210664, height=\"0.28\", width=\"0.78\", pos=\"491,708\"];\n\t17662680 [label=17662680, height=\"0.28\", width=\"0.78\", pos=\"454,720\"];\n\t17210836 [label=17210836, height=\"0.28\", width=\"0.78\", pos=\"478,701\"];\n\t17208256 [label=17208256, height=\"0.28\", width=\"0.78\", pos=\"416,720\"];\n\t17788068 [label=17788068, height=\"0.28\", width=\"0.78\", pos=\"392,676\"];\n\t17327108 [label=17327108, height=\"0.28\", width=\"0.78\", pos=\"355,688\"];\n\t17657004 [label=17657004, height=\"0.28\", width=\"0.78\", pos=\"329,654\"];\n\t6020 [label=6020, height=\"0.28\", width=\"0.50\", pos=\"343,616\"];\n\t7568 [label=7568, height=\"0.28\", width=\"0.50\", pos=\"319,707\"];\n\t17326592 [label=17326592, height=\"0.28\", width=\"0.78\", pos=\"290,658\"];\n\t17245236 [label=17245236, height=\"0.28\", width=\"0.78\", pos=\"259,631\"];\n\t17492572 [label=17492572, height=\"0.28\", width=\"0.78\", pos=\"502,670\"];\n\t17246440 [label=17246440, height=\"0.28\", width=\"0.78\", pos=\"506,615\"];\n\t17303372 [label=17303372, height=\"0.28\", width=\"0.78\", pos=\"545,643\"];\n\t17350844 [label=17350844, height=\"0.28\", width=\"0.78\", pos=\"263,697\"];\n\t17356004 [label=17356004, height=\"0.28\", width=\"0.78\", pos=\"175,687\"];\n\t17242484 [label=17242484, height=\"0.28\", width=\"0.78\", pos=\"163,583\"];\n\t17325904 [label=17325904, height=\"0.28\", width=\"0.78\", pos=\"113,412\"];\n\t17326420 -- 17866156 [color=grey, dir=forward, pos=\"e,95,314 95,331 95,329 95,327 95,324\"];\n\t17326420 -- 17243344 [color=blue, pos=\"88,351 87,357 86,363 86,369\"];\n\t17866156 -- 17355832 [color=blue, pos=\"101,294 103,289 104,283 104,278\"];\n\t17355832 -- 17866156 [color=blue, pos=\"92,278 91,283 90,289 90,294\"];\n\t17355832 -- 17243688 [color=grey, dir=forward, pos=\"e,100,242 100,258 100,256 100,254 100,252\"];\n\t17243688 -- 17314896 [color=blue, pos=\"108,222 110,217 111,211 111,206\"];\n\t17314896 -- 17243860 [color=grey, dir=forward, pos=\"e,110,169 109,186 109,184 109,182 109,179\"];\n\t17314896 -- 17243688 [color=blue, pos=\"99,206 97,211 96,217 96,222\"];\n\t17243860 -- 17314724 [color=blue, pos=\"117,149 119,143 119,135 119,129\"];\n\t17314724 -- 17745584 [color=grey, dir=forward, pos=\"e,141,109 141,109 141,109 141,109 141,109\"];\n\t17314724 -- 17204644 [color=grey, dir=forward, pos=\"e,92,109 92,109 92,109 92,109 92,109\"];\n\t17314724 -- 17243860 [color=blue, pos=\"108,129 106,135 106,143 106,149\"];\n\t17314724 -- 17778436 [color=grey, dir=forward, pos=\"e,120,96 117,109 117,108 118,107 118,106\"];\n\t17745584 -- 17270176 [color=grey, dir=forward, pos=\"e,177,84 169,92 169,92 170,92 170,91\"];\n\t17270176 -- 17364432 [color=grey, dir=forward, pos=\"e,204,56 197,64 197,64 197,64 197,64\"];\n\t17310424 -- 17745584 [color=grey, dir=forward, pos=\"e,169,106 169,106 169,106 169,106 169,106\"];\n\t17204644 -- 17270692 [color=grey, dir=forward, pos=\"e,60,81 68,92 67,91 67,90 66,90\"];\n\t17270692 -- 17205160 [color=grey, dir=forward, pos=\"e,37,53 44,61 44,61 44,61 44,61\"];\n\t17310940 -- 17204644 [color=grey, dir=forward, pos=\"e,69,103 69,103 69,103 69,103 69,103\"];\n\t17778436 -- 17270864 [color=grey, dir=forward, pos=\"e,123,58 123,76 123,73 123,71 123,68\"];\n\t17270864 -- 17244548 [color=grey, dir=forward, pos=\"e,124,21 124,38 124,36 124,34 124,31\"];\n\t17311112 -- 17778436 [color=grey, dir=forward, pos=\"e,137,95 137,95 137,95 137,95 137,95\"];\n\t17243344 -- 17326420 [color=blue, pos=\"98,369 99,363 100,356 100,351\"];\n\t17326248 -- 17496356 [color=blue, pos=\"77,410 77,410 77,410 77,410\"];\n\t17326248 -- 17243344 [color=grey, dir=forward, pos=\"e,89,389 84,410 85,407 86,403 87,399\"];\n\t17326248 -- 17326076 [color=red, dir=forward, pos=\"e,54,423 54,423 54,423 54,423 54,423\"];\n\t17496356 -- 17326248 [color=blue, pos=\"59,415 59,415 59,415 59,415\"];\n\t17326076 -- 17496356 [color=grey, dir=forward, pos=\"e,47,414 47,414 47,414 47,414 47,414\"];\n\t17274648 -- 17326248 [color=grey, dir=forward, pos=\"e,84,430 89,450 88,447 87,444 87,440\"];\n\t17274648 -- 17845860 [color=blue, pos=\"88,470 88,476 90,483 92,489\"];\n\t17845860 -- 17274648 [color=blue, pos=\"104,489 104,483 102,476 100,470\"];\n\t17355660 -- 17845860 [color=grey, dir=forward, pos=\"e,102,509 105,535 104,530 104,525 103,519\"];\n\t17242656 -- 17355660 [color=grey, dir=forward, pos=\"e,108,555 110,574 110,571 110,568 109,565\"];\n\t17355316 -- 17242656 [color=grey, dir=forward, pos=\"e,104,594 91,611 93,608 95,605 98,602\"];\n\t17355488 -- 17242656 [color=grey, dir=forward, pos=\"e,100,594 81,611 85,608 88,604 92,601\"];\n\t17299416 -- 17242656 [color=grey, dir=forward, pos=\"e,123,594 142,611 138,608 135,604 131,601\"];\n\t17299416 -- 17242312 [color=blue, pos=\"131,631 129,633 127,635 126,637\"];\n\t17299416 -- 17245064 [color=red, dir=forward, pos=\"e,181,630 181,630 181,630 181,630 181,630\"];\n\t17299416 -- 17242484 [color=grey, dir=forward, pos=\"e,160,593 156,611 156,608 157,606 158,603\"];\n\t17242312 -- 17299416 [color=blue, pos=\"144,637 146,635 148,633 149,631\"];\n\t17245064 -- 17356176 [color=grey, dir=forward, pos=\"e,215,624 215,624 215,624 215,624 215,624\"];\n\t17356176 -- 17245408 [color=grey, dir=forward, pos=\"e,248,611 248,611 248,611 248,611 248,611\"];\n\t17356176 -- 17245236 [color=red, dir=forward, pos=\"e,253,629 253,629 253,629 253,629 253,629\"];\n\t17245408 -- 17315756 [color=blue, pos=\"252,618 253,625 255,635 259,642\"];\n\t17315756 -- 17245408 [color=blue, pos=\"270,642 269,635 267,625 264,618\"];\n\t17315756 -- 17344480 [color=red, dir=forward, pos=\"e,240,653 240,653 240,653 240,653 240,653\"];\n\t17344480 -- 17255900 [color=red, dir=forward, pos=\"e,202,654 202,654 202,654 202,654 202,654\"];\n\t17255900 -- 17356520 [color=grey, dir=forward, pos=\"e,160,651 160,651 160,651 160,651 160,651\"];\n\t17356520 -- 17247472 [color=blue, pos=\"117,647 117,647 117,647 117,647\"];\n\t17356520 -- 17247816 [color=grey, dir=forward, pos=\"e,140,631 142,640 142,640 142,640 142,640\"];\n\t17356520 -- 17247644 [color=grey, dir=forward, pos=\"e,119,626 134,640 132,638 129,636 127,633\"];\n\t17247472 -- 17356520 [color=blue, pos=\"134,657 134,657 134,657 134,657\"];\n\t17247816 -- 17299416 [color=red, dir=forward, pos=\"e,153,621 153,621 153,621 153,621 153,621\"];\n\t17247644 -- 17356692 [color=grey, dir=forward, pos=\"e,87,588 100,606 98,603 95,599 93,596\"];\n\t17231820 -- 17789444 [color=blue, pos=\"341,640 342,640 343,639 343,639\"];\n\t17231820 -- 17315756 [color=red, dir=forward, pos=\"e,285,649 285,649 285,649 285,649 285,649\"];\n\t17789444 -- 17231820 [color=blue, pos=\"329,631 327,632 326,632 324,633\"];\n\t17356348 -- 17789444 [color=red, dir=forward, pos=\"e,371,627 371,627 371,627 371,627 371,627\"];\n\t17356348 -- 17474856 [color=blue, pos=\"427,631 427,631 427,631 427,631\"];\n\t17474856 -- 17356348 [color=blue, pos=\"412,618 412,618 412,618 412,618\"];\n\t17213588 -- 17246612 [color=blue, pos=\"505,640 505,640 505,640 505,640\"];\n\t17213588 -- 17830208 [color=blue, pos=\"481,653 481,653 481,653 481,653\"];\n\t17213588 -- 17492572 [color=blue, pos=\"478,653 479,655 481,658 483,660\"];\n\t17213588 -- 17474856 [color=grey, dir=forward, pos=\"e,455,633 455,633 455,633 455,633 455,633\"];\n\t17213588 -- 17246440 [color=grey, dir=forward, pos=\"e,495,625 487,633 487,633 488,633 488,632\"];\n\t17246612 -- 17213588 [color=blue, pos=\"485,634 485,634 485,634 485,634\"];\n\t17246612 -- 17213416 [color=blue, pos=\"485,632 484,632 483,633 483,633\"];\n\t17213416 -- 17246612 [color=blue, pos=\"499,642 499,642 499,642 499,642\"];\n\t17213416 -- 17830208 [color=blue, pos=\"477,653 477,653 477,653 477,653\"];\n\t17213416 -- 17492572 [color=blue, pos=\"474,653 476,655 478,658 481,660\"];\n\t17213416 -- 17474856 [color=grey, dir=forward, pos=\"e,453,633 453,633 453,633 453,633 453,633\"];\n\t17213416 -- 17246440 [color=grey, dir=forward, pos=\"e,494,625 484,633 485,633 485,632 486,632\"];\n\t17830208 -- 17213588 [color=blue, pos=\"490,644 490,644 490,644 490,644\"];\n\t17830208 -- 17213416 [color=blue, pos=\"487,644 487,644 487,644 487,644\"];\n\t17210664 -- 17830208 [color=grey, dir=forward, pos=\"e,493,664 492,698 492,691 492,682 493,674\"];\n\t17210664 -- 17662680 [color=blue, pos=\"463,710 463,710 463,710 463,710\"];\n\t17662680 -- 17210664 [color=blue, pos=\"482,717 482,717 482,717 482,717\"];\n\t17662680 -- 17210836 [color=blue, pos=\"476,710 476,710 476,710 476,710\"];\n\t17210836 -- 17830208 [color=grey, dir=forward, pos=\"e,491,664 482,691 483,686 485,680 488,674\"];\n\t17210836 -- 17662680 [color=blue, pos=\"456,711 456,711 456,711 456,711\"];\n\t17208256 -- 17662680 [color=grey, dir=forward, pos=\"e,444,720 444,720 444,720 444,720 444,720\"];\n\t17208256 -- 17788068 [color=blue, pos=\"416,710 414,703 409,694 404,686\"];\n\t17788068 -- 17208256 [color=blue, pos=\"392,686 394,693 399,703 404,710\"];\n\t17327108 -- 17657004 [color=blue, pos=\"354,678 352,674 349,668 345,664\"];\n\t17327108 -- 17788068 [color=grey, dir=forward, pos=\"e,383,679 383,679 383,679 383,679 383,679\"];\n\t17657004 -- 17327108 [color=blue, pos=\"330,664 332,668 336,673 340,678\"];\n\t17657004 -- 6020 [color=grey, dir=forward, pos=\"e,339,626 333,644 334,641 335,638 336,636\"];\n\t7568 -- 17657004 [color=grey, dir=forward, pos=\"e,327,664 321,697 322,690 324,682 325,674\"];\n\t17326592 -- 17657004 [color=grey, dir=forward, pos=\"e,318,655 318,655 318,655 318,655 318,655\"];\n\t17326592 -- 17245236 [color=blue, pos=\"287,648 285,646 283,644 281,641\"];\n\t17245236 -- 17326592 [color=blue, pos=\"262,641 264,643 266,646 269,648\"];\n\t17492572 -- 17213588 [color=blue, pos=\"500,660 499,658 497,655 495,653\"];\n\t17492572 -- 17213416 [color=blue, pos=\"499,660 497,658 495,656 493,653\"];\n\t17246440 -- 17303372 [color=blue, pos=\"511,625 513,628 516,630 519,633\"];\n\t17303372 -- 17246612 [color=grey, dir=forward, pos=\"e,517,633 517,633 517,633 517,633 517,633\"];\n\t17303372 -- 17246440 [color=blue, pos=\"539,633 537,630 534,628 530,625\"];\n\t17350844 -- 17315756 [color=grey, dir=forward, pos=\"e,267,662 264,687 265,682 265,677 266,672\"];\n\t17356004 -- 17245064 [color=grey, dir=forward, pos=\"e,185,642 177,677 179,670 181,660 183,652\"];\n\t17325904 -- 17326248 [color=red, dir=forward, pos=\"e,85,419 85,419 85,419 85,419 85,419\"];\n}\n"
  },
  {
    "path": "experimental/RectangleOverlapSolver/testdata/graph4.dot",
    "content": "graph G {\n\tnode [label=\"\\N\", shape=box, height=\"0.01\", width=\"0.01\", fontsize=10];\n\tgraph [bb=\"0,0,745,335\"];\n\t17376472 [label=17376472, height=\"0.28\", width=\"0.78\", pos=\"311,324\"];\n\t17688824 [label=17688824, height=\"0.28\", width=\"0.78\", pos=\"333,284\"];\n\t17578916 [label=17578916, height=\"0.28\", width=\"0.78\", pos=\"328,237\"];\n\t17689512 [label=17689512, height=\"0.28\", width=\"0.78\", pos=\"318,203\"];\n\t17242828 [label=17242828, height=\"0.28\", width=\"0.78\", pos=\"286,167\"];\n\t17225800 [label=17225800, height=\"0.28\", width=\"0.78\", pos=\"284,124\"];\n\t17337600 [label=17337600, height=\"0.28\", width=\"0.78\", pos=\"266,81\"];\n\t17691576 [label=17691576, height=\"0.28\", width=\"0.78\", pos=\"225,76\"];\n\t17226488 [label=17226488, height=\"0.28\", width=\"0.78\", pos=\"269,38\"];\n\t17243000 [label=17243000, height=\"0.28\", width=\"0.78\", pos=\"320,155\"];\n\t17691232 [label=17691232, height=\"0.28\", width=\"0.78\", pos=\"349,118\"];\n\t17375956 [label=17375956, height=\"0.28\", width=\"0.78\", pos=\"361,76\"];\n\t17524736 [label=17524736, height=\"0.28\", width=\"0.78\", pos=\"326,76\"];\n\t17692092 [label=17692092, height=\"0.28\", width=\"0.78\", pos=\"376,38\"];\n\t17689684 [label=17689684, height=\"0.28\", width=\"0.78\", pos=\"321,191\"];\n\t17689168 [label=17689168, height=\"0.28\", width=\"0.78\", pos=\"344,261\"];\n\t17274648 [label=17274648, height=\"0.28\", width=\"0.78\", pos=\"297,276\"];\n\t17689340 [label=17689340, height=\"0.28\", width=\"0.78\", pos=\"273,222\"];\n\t17327280 [label=17327280, height=\"0.28\", width=\"0.78\", pos=\"224,203\"];\n\t17330720 [label=17330720, height=\"0.28\", width=\"0.78\", pos=\"182,174\"];\n\t17327452 [label=17327452, height=\"0.28\", width=\"0.78\", pos=\"165,114\"];\n\t17255556 [label=17255556, height=\"0.28\", width=\"0.78\", pos=\"129,76\"];\n\t17238184 [label=17238184, height=\"0.28\", width=\"0.78\", pos=\"92,59\"];\n\t17692780 [label=17692780, height=\"0.28\", width=\"0.78\", pos=\"65,29\"];\n\t17337944 [label=17337944, height=\"0.28\", width=\"0.78\", pos=\"29,11\"];\n\t12728 [label=12728, height=\"0.28\", width=\"0.58\", pos=\"88,113\"];\n\t17786520 [label=17786520, height=\"0.28\", width=\"0.78\", pos=\"123,114\"];\n\t17327624 [label=17327624, height=\"0.28\", width=\"0.78\", pos=\"147,157\"];\n\t17325904 [label=17325904, height=\"0.28\", width=\"0.78\", pos=\"152,211\"];\n\t17689856 [label=17689856, height=\"0.28\", width=\"0.78\", pos=\"368,209\"];\n\t17223908 [label=17223908, height=\"0.28\", width=\"0.78\", pos=\"413,194\"];\n\t17690372 [label=17690372, height=\"0.28\", width=\"0.78\", pos=\"453,172\"];\n\t17327108 [label=17327108, height=\"0.28\", width=\"0.78\", pos=\"503,176\"];\n\t17657004 [label=17657004, height=\"0.28\", width=\"0.78\", pos=\"472,194\"];\n\t6020 [label=6020, height=\"0.28\", width=\"0.50\", pos=\"478,156\"];\n\t7568 [label=7568, height=\"0.28\", width=\"0.50\", pos=\"499,239\"];\n\t17326592 [label=17326592, height=\"0.28\", width=\"0.78\", pos=\"429,225\"];\n\t17690028 [label=17690028, height=\"0.28\", width=\"0.78\", pos=\"380,233\"];\n\t17690544 [label=17690544, height=\"0.28\", width=\"0.78\", pos=\"540,151\"];\n\t17209116 [label=17209116, height=\"0.28\", width=\"0.78\", pos=\"575,124\"];\n\t17690716 [label=17690716, height=\"0.28\", width=\"0.78\", pos=\"572,78\"];\n\t17210664 [label=17210664, height=\"0.28\", width=\"0.78\", pos=\"593,40\"];\n\t17690888 [label=17690888, height=\"0.28\", width=\"0.78\", pos=\"617,114\"];\n\t17211352 [label=17211352, height=\"0.28\", width=\"0.78\", pos=\"657,104\"];\n\t17258824 [label=17258824, height=\"0.28\", width=\"0.78\", pos=\"682,71\"];\n\t17235432 [label=17235432, height=\"0.28\", width=\"0.78\", pos=\"716,50\"];\n\t17688996 [label=17688996, height=\"0.28\", width=\"0.78\", pos=\"310,259\"];\n\t17232680 [label=17232680, height=\"0.28\", width=\"0.78\", pos=\"267,276\"];\n\t17287032 [label=17287032, height=\"0.28\", width=\"0.78\", pos=\"352,322\"];\n\t17376472 -- 17688824 [color=grey, dir=forward, pos=\"e,327,294 317,314 319,311 321,307 322,303\"];\n\t17688824 -- 17578916 [color=grey, dir=forward, pos=\"e,329,247 332,274 331,269 331,263 330,257\"];\n\t17578916 -- 17689512 [color=grey, dir=forward, pos=\"e,321,213 325,227 325,226 324,224 324,223\"];\n\t17578916 -- 17689168 [color=red, dir=forward, pos=\"e,337,251 335,247 335,247 335,247 335,247\"];\n\t17578916 -- 17689340 [color=grey, dir=forward, pos=\"e,300,229 300,229 300,229 300,229 300,229\"];\n\t17578916 -- 17689856 [color=grey, dir=forward, pos=\"e,354,219 342,227 343,226 344,225 345,225\"];\n\t17578916 -- 17690028 [color=grey, dir=forward, pos=\"e,356,235 356,235 356,235 356,235 356,235\"];\n\t17578916 -- 17689684 [color=grey, dir=forward, pos=\"e,322,201 326,227 325,222 324,217 324,211\"];\n\t17578916 -- 17688996 [color=red, dir=forward, pos=\"e,318,249 320,247 320,247 320,247 319,248\"];\n\t17689512 -- 17242828 [color=blue, pos=\"316,193 313,188 308,182 303,177\"];\n\t17242828 -- 17689512 [color=blue, pos=\"288,177 291,182 296,188 300,193\"];\n\t17242828 -- 17225800 [color=grey, dir=forward, pos=\"e,285,134 286,157 285,153 285,148 285,144\"];\n\t17225800 -- 17337600 [color=grey, dir=forward, pos=\"e,270,91 280,114 278,110 276,105 274,100\"];\n\t17337600 -- 17691576 [color=blue, pos=\"238,71 238,71 238,71 238,71\"];\n\t17337600 -- 17226488 [color=grey, dir=forward, pos=\"e,268,48 267,71 268,67 268,62 268,58\"];\n\t17691576 -- 17337600 [color=blue, pos=\"253,85 253,85 253,85 253,85\"];\n\t17243000 -- 17225800 [color=grey, dir=forward, pos=\"e,296,134 308,145 307,144 305,143 304,141\"];\n\t17243000 -- 17691232 [color=grey, dir=forward, pos=\"e,348,128 336,145 339,143 341,140 343,137\"];\n\t17243000 -- 17691232 [color=grey, dir=forward, pos=\"e,332,128 321,145 322,142 324,139 326,136\"];\n\t17243000 -- 17689684 [color=blue, pos=\"314,165 314,170 314,176 315,181\"];\n\t17691232 -- 17375956 [color=grey, dir=forward, pos=\"e,358,86 352,108 353,104 354,100 355,96\"];\n\t17375956 -- 17524736 [color=blue, pos=\"333,71 333,71 333,71 333,71\"];\n\t17375956 -- 17692092 [color=grey, dir=forward, pos=\"e,372,48 365,66 366,63 367,60 368,58\"];\n\t17524736 -- 17375956 [color=blue, pos=\"354,81 354,81 354,81 354,81\"];\n\t17689684 -- 17243000 [color=blue, pos=\"326,181 326,176 326,170 326,165\"];\n\t17689168 -- 17274648 [color=blue, pos=\"316,263 313,264 310,265 308,266\"];\n\t17274648 -- 17689168 [color=blue, pos=\"325,273 327,272 329,272 331,271\"];\n\t17689340 -- 17327280 [color=blue, pos=\"264,212 261,210 256,208 252,206\"];\n\t17327280 -- 17330720 [color=grey, dir=forward, pos=\"e,197,184 209,193 208,192 207,191 205,190\"];\n\t17327280 -- 17689340 [color=blue, pos=\"236,213 239,214 242,216 245,217\"];\n\t17330720 -- 17327452 [color=grey, dir=forward, pos=\"e,168,124 179,164 177,156 173,144 171,134\"];\n\t17330720 -- 17327624 [color=grey, dir=forward, pos=\"e,161,164 161,164 161,164 161,164 161,164\"];\n\t17327452 -- 17255556 [color=grey, dir=forward, pos=\"e,139,86 155,104 152,101 149,97 146,93\"];\n\t17255556 -- 17238184 [color=blue, pos=\"122,66 121,66 121,65 120,65\"];\n\t17238184 -- 17692780 [color=grey, dir=forward, pos=\"e,74,39 83,49 82,48 82,47 81,47\"];\n\t17238184 -- 17255556 [color=blue, pos=\"101,69 101,69 101,69 101,69\"];\n\t17692780 -- 17337944 [color=blue, pos=\"59,19 58,19 58,18 57,18\"];\n\t17337944 -- 17692780 [color=blue, pos=\"37,21 37,21 37,21 37,21\"];\n\t12728 -- 17255556 [color=grey, dir=forward, pos=\"e,118,86 99,103 103,100 106,96 110,93\"];\n\t12728 -- 17786520 [color=blue, pos=\"109,119 109,119 109,119 109,119\"];\n\t17786520 -- 12728 [color=blue, pos=\"95,108 95,108 95,108 95,108\"];\n\t17327624 -- 17786520 [color=grey, dir=forward, pos=\"e,129,124 141,147 139,143 136,138 133,133\"];\n\t17325904 -- 17330720 [color=grey, dir=forward, pos=\"e,174,184 160,201 162,198 165,195 167,192\"];\n\t17689856 -- 17223908 [color=blue, pos=\"396,206 398,205 399,205 401,204\"];\n\t17223908 -- 17689856 [color=blue, pos=\"385,196 383,197 380,198 378,199\"];\n\t17223908 -- 17690372 [color=grey, dir=forward, pos=\"e,435,182 432,184 432,184 432,184 432,184\"];\n\t17690372 -- 17327108 [color=blue, pos=\"481,180 481,180 481,180 481,180\"];\n\t17327108 -- 17657004 [color=blue, pos=\"475,186 475,186 475,186 475,186\"];\n\t17327108 -- 17690544 [color=grey, dir=forward, pos=\"e,525,161 518,166 518,166 518,166 518,166\"];\n\t17327108 -- 17690372 [color=blue, pos=\"475,167 475,167 475,167 475,167\"];\n\t17657004 -- 17327108 [color=blue, pos=\"499,184 499,184 499,184 499,184\"];\n\t17657004 -- 6020 [color=grey, dir=forward, pos=\"e,476,166 474,184 474,181 474,179 474,176\"];\n\t7568 -- 17657004 [color=grey, dir=forward, pos=\"e,478,204 493,229 490,224 487,218 484,212\"];\n\t17326592 -- 17657004 [color=grey, dir=forward, pos=\"e,458,204 443,215 445,214 448,212 450,210\"];\n\t17326592 -- 17690028 [color=blue, pos=\"401,223 401,223 401,223 401,223\"];\n\t17690028 -- 17326592 [color=blue, pos=\"408,234 408,234 408,234 408,234\"];\n\t17690544 -- 17209116 [color=blue, pos=\"564,141 566,139 568,136 570,134\"];\n\t17209116 -- 17690716 [color=grey, dir=forward, pos=\"e,572,88 574,114 573,109 573,104 573,98\"];\n\t17209116 -- 17690544 [color=blue, pos=\"551,134 549,136 547,139 545,141\"];\n\t17209116 -- 17690888 [color=grey, dir=forward, pos=\"e,603,117 603,117 603,117 603,117 603,117\"];\n\t17690716 -- 17210664 [color=blue, pos=\"584,68 588,63 591,56 593,50\"];\n\t17210664 -- 17690716 [color=blue, pos=\"580,50 576,55 573,62 571,68\"];\n\t17690888 -- 17211352 [color=blue, pos=\"645,113 645,113 645,113 645,113\"];\n\t17211352 -- 17258824 [color=grey, dir=forward, pos=\"e,674,81 665,94 666,93 667,91 668,90\"];\n\t17211352 -- 17690888 [color=blue, pos=\"629,104 629,104 629,104 629,104\"];\n\t17258824 -- 17235432 [color=blue, pos=\"709,61 709,61 710,60 710,60\"];\n\t17235432 -- 17258824 [color=blue, pos=\"688,60 688,60 687,61 687,61\"];\n\t17688996 -- 17232680 [color=blue, pos=\"282,262 279,263 277,265 275,266\"];\n\t17232680 -- 17688996 [color=blue, pos=\"295,270 296,270 297,269 297,269\"];\n\t17287032 -- 17688824 [color=grey, dir=forward, pos=\"e,338,294 347,312 346,309 344,306 343,303\"];\n}\n"
  },
  {
    "path": "experimental/draw-bn/Asia.dne",
    "content": "// ~->[DNET-1]->~\n\n// File created by an unlicensed user using Netica 2.15 on 10/14/05 at 15:20:38.\n\nbnet Asia {\nautoupdate = FALSE;\ncomment = \"From Lauritzen, Steffen L. and David J. Spiegelhalter (1988) \\\"Local computations with \\\n\tprobabilities on graphical structures and their application to expert systems\\\" in J. Royal \\\n\tStatistics Society B, 50(2), 157-194.\";\nwhenchanged = 1129267238;\n\nvisual V1 {\n\tdefdispform = LABELBOX;\n\tnodelabeling = TITLE;\n\tNodeMaxNumEntries = 50;\n\tnodefont = font {shape= \"Bookman\"; size= 14;};\n\tlinkfont = font {shape= \"Arial\"; size= 9;};\n\twindowposn = (7, 19, 795, 480);\n\tCommentWindowPosn = (0, 0, 0, 0);\n\tresolution = 72;\n\tdrawingbounds = (1104, 730);\n\tshowpagebreaks = FALSE;\n\tusegrid = TRUE;\n\tgridspace = (6, 6);\n\tPrinterSetting A {\n\t\tmargins = (1270, 1270, 1270, 1270);\n\t\tlandscape = FALSE;\n\t\tmagnify = 1;\n\t\t};\n\t};\n\nnode VisitAsia {\n\tkind = NATURE;\n\tdiscrete = TRUE;\n\tchance = CHANCE;\n\tstates = (Visit, No_Visit);\n\tparents = ();\n\tprobs = \n\t\t// Visit        No Visit     \n\t\t  (0.01,        0.99);\n\ttitle = \"Visit To Asia\";\n\tcomment = \"@dimension 156 78\\n\";\n\tbelief = (0.01, 0.99);\n\tvisual V1 {\n\t\tcenter = (126, 54);\n\t\theight = 1;\n\t\t};\n\t};\n\nnode Tuberculosis {\n\tkind = NATURE;\n\tdiscrete = TRUE;\n\tchance = CHANCE;\n\tstates = (Present, Absent);\n\tparents = (VisitAsia);\n\tprobs = \n\t\t// Present      Absent         // VisitAsia \n\t\t ((0.05,        0.95),         // Visit     \n\t\t  (0.01,        0.99));        // No Visit  ;\n\ttitle = \"Tuberculosis\";\n\tcomment = \"@dimension 151 78\\n\";\n\tbelief = (0.0104, 0.9896);\n\tvisual V1 {\n\t\tcenter = (126, 150);\n\t\theight = 3;\n\t\t};\n\t};\n\nnode Smoking {\n\tkind = NATURE;\n\tdiscrete = TRUE;\n\tchance = CHANCE;\n\tstates = (Smoker, NonSmoker);\n\tparents = ();\n\tprobs = \n\t\t// Smoker       NonSmoker    \n\t\t  (0.5,         0.5);\n\ttitle = \"Smoking\";\n\tcomment = \"@dimension 179 78\\n\";\n\tbelief = (0.5, 0.5);\n\tvisual V1 {\n\t\tcenter = (480, 54);\n\t\theight = 2;\n\t\t};\n\t};\n\nnode Cancer {\n\tkind = NATURE;\n\tdiscrete = TRUE;\n\tchance = CHANCE;\n\tstates = (Present, Absent);\n\tparents = (Smoking);\n\tprobs = \n\t\t// Present      Absent         // Smoking   \n\t\t ((0.1,         0.9),          // Smoker    \n\t\t  (0.01,        0.99));        // NonSmoker ;\n\ttitle = \"Lung Cancer\";\n\tcomment = \"@dimension 151 78\\n\";\n\tbelief = (0.055, 0.945);\n\tvisual V1 {\n\t\tcenter = (378, 150);\n\t\theight = 4;\n\t\t};\n\t};\n\nnode TbOrCa {\n\tkind = NATURE;\n\tdiscrete = TRUE;\n\tchance = DETERMIN;\n\tstates = (True, False);\n\tparents = (Tuberculosis, Cancer);\n\tprobs = \n\t\t// True         False           // Tuberculosis Cancer  \n\t\t(((1,           0),             // Present      Present \n\t\t  (1,           0)),            // Present      Absent  \n\t\t ((1,           0),             // Absent       Present \n\t\t  (0,           1)));           // Absent       Absent  ;\n\ttitle = \"Tuberculosis\\nor Cancer\";\n\tcomment = \"@dimension 135 78\\n\";\n\tbelief = (0.064828, 0.935172);\n\tvisual V1 {\n\t\tcenter = (270, 246);\n\t\theight = 6;\n\t\t};\n\t};\n\nnode XRay {\n\tkind = NATURE;\n\tdiscrete = TRUE;\n\tchance = CHANCE;\n\tstates = (Abnormal, Normal);\n\tparents = (TbOrCa);\n\tprobs = \n\t\t// Abnormal     Normal         // TbOrCa \n\t\t ((0.98,        0.02),         // True   \n\t\t  (0.05,        0.95));        // False  ;\n\ttitle = \"XRay Result\";\n\tcomment = \"@dimension 167 78\\n\";\n\tbelief = (0.11029, 0.88971);\n\tvisual V1 {\n\t\tcenter = (138, 336);\n\t\theight = 7;\n\t\t};\n\t};\n\nnode Bronchitis {\n\tkind = NATURE;\n\tdiscrete = TRUE;\n\tchance = CHANCE;\n\tstates = (Present, Absent);\n\tparents = (Smoking);\n\tprobs = \n\t\t// Present      Absent         // Smoking   \n\t\t ((0.6,         0.4),          // Smoker    \n\t\t  (0.3,         0.7));         // NonSmoker ;\n\ttitle = \"Bronchitis\";\n\tcomment = \"@dimension 151 78\\n\";\n\tbelief = (0.45, 0.55);\n\tvisual V1 {\n\t\tcenter = (618, 150);\n\t\theight = 5;\n\t\t};\n\t};\n\nnode Dyspnea {\n\tkind = NATURE;\n\tdiscrete = TRUE;\n\tchance = CHANCE;\n\tstates = (Present, Absent);\n\tparents = (TbOrCa, Bronchitis);\n\tprobs = \n\t\t// Present      Absent          // TbOrCa Bronchitis \n\t\t(((0.9,         0.1),           // True   Present    \n\t\t  (0.7,         0.3)),          // True   Absent     \n\t\t ((0.8,         0.2),           // False  Present    \n\t\t  (0.1,         0.9)));         // False  Absent     ;\n\ttitle = \"Dyspnea\";\n\tcomment = \"Shortness of breath.\\n@dimension 151 78\\n\";\n\tbelief = (0.435971, 0.564029);\n\tvisual V1 {\n\t\tcenter = (414, 336);\n\t\theight = 8;\n\t\t};\n\t};\nElimOrder = (VisitAsia, XRay, Tuberculosis, Smoking, Cancer, TbOrCa, Bronchitis, Dyspnea);\n};\n"
  },
  {
    "path": "experimental/draw-bn/Makefile",
    "content": "srcdir = .\nVPATH = .\n\ncola_includedir = $(srcdir)/libcola\ncola_libdir = $(srcdir)/libcola\nvpsc_libdir = libvpsc/.libs\n\n\nall: draw-bn\n\nCPP_FLAGS=`pkg-config --cflags pangoft2 gtkmm-2.4 glib-2.0 libxml-2.0 pangocairo` -g\nCPP_LN_FLAGS=`pkg-config --cflags --libs pangoft2 gtkmm-2.4 glib-2.0 libxml-2.0 pangocairo` -g \n\nEXTRA_CPPFLAGS:=$(shell pkg-config --cflags gtkmm-2.4) \\\n\t\t$(shell pkg-config --cflags cairo) \n\nEXTRA_LDFLAGS:=$(shell pkg-config --libs cairomm-1.0 gtkmm-2.4 libxml-2.0) -L$(cola_libdir) -L$(vpsc_libdir) -L. -lcola libvpsc/libvpsc.a\n\n\nCXX=g++\nCXXFLAGS=-g -Wall -Wextra -Wno-unused-parameter -Wpointer-arith -Wcast-align -Wsign-compare -Woverloaded-virtual -Wswitch\nCPPFLAGS=-I$(srcdir) -I$(lib2geomdir) -I$(cola_includedir) `pkg-config --cflags cairomm-1.0 pangoft2 gtkmm-2.4 glib-2.0 libxml-2.0 pangocairo`\n\n\nTARGETOBJS=draw-bn.o\nBADTARGETOBJS=\n\nLIBOBJS=\n\nEXTRAOBJS=graphlayouttest.o $(TARGETOBJS)\n\nTARGETS=$(TARGETOBJS:.o=)\n\nALLOBJS=$(LIBOBJS) $(EXTRAOBJS)\n\n# Dependency magic.\n%o: %.cpp\n\t$(CXX) -c $(CPPFLAGS) $(CXXFLAGS) $*.cpp -o $*.o\n\t@$(CXX) -MM $(CPPFLAGS) $*.cpp > $*.d\n\t@cp -f $*.d $*.d.tmp \n\t@sed -e 's/.*://' -e 's/\\\\$$//' < $*.d.tmp | fmt -1 | \\\n\t  sed -e 's/^ *//' -e 's/$$/:/' >> $*.d\n\t@rm -f $*.d.tmp\n\n# Grab dependencies where they exist.\n-include $(ALLOBJS:.o=.d)\n\n$(EXTRAOBJS): CPPFLAGS:=$(EXTRA_CPPFLAGS) $(CPPFLAGS)\n\n\nall: $(TARGETS)\n\ndraw-bn: draw-bn.o graphlayouttest.o\n\nlibscroll.a: $(LIBOBJS)\n\tar cr libscroll.a $(LIBOBJS)\n\tranlib libscroll.a\n\n\n$(TARGETS):\n\n$(TARGETS): %: %.o\n\n# Targets;\n\n$(TARGETS):\n\t$(CXX) $(CXXFLAGS) -o $@ $^ $(LDFLAGS) $(EXTRA_LDFLAGS)\n\n.PHONY: all clean clobber mkdirs\nclean:\n\trm -f $(ALLOBJS) *~\n\nclobber: clean\n\trm -f $(TARGETS)\n\nmkdirs:\n\t[ -d non-uniform ] || mkdir non-uniform\n\t[ -e texts ] || ( [ -e $(srcdir)/texts ] && ln -s $(srcdir)/texts texts )\n\t[ -e pages ] || ( [ -e $(srcdir)/pages ] && ln -s $(srcdir)/pages pages )\n\n\nbb: bb-constraint.cc\n\tg++ -g -o bb bb-constraint.cc -laffa\n"
  },
  {
    "path": "experimental/draw-bn/TODO",
    "content": "* parse .dne directly\n* draw complete nodes\n* changable nodes\n* fix up page boundaries\n"
  },
  {
    "path": "experimental/draw-bn/asia.cpp",
    "content": "#include <vector>\n#include <string>\n\n#include <boost/spirit/core.hpp>\n#include <boost/spirit/actor/push_back_actor.hpp>\n#include <iostream>\n#include <vector>\n#include <string>\n\nusing namespace std;\nusing namespace boost::spirit;\n\nbool\nparse_numbers(char const* str, vector<double>& v)\n{\n    return parse(str,\n\n        //  Begin grammar\n        (\n            real_p[push_back_a(v)] >> *(',' >> real_p[push_back_a(v)])\n        )\n        ,\n        //  End grammar\n\n        space_p).full;\n}\n\nvoid\nconstruct_graph(vector<Node*> &nn) {\n\tNode* VisitAsia = new Node(\"Visit To Asia\");\n\tVisitAsia->states.push_back(\"Visit\");\n\tVisitAsia->states.push_back(\"No Visit\");\n\tassert (parse_numbers(\"0.01, 0.99\", VisitAsia->probs));\n\tassert (parse_numbers(\"0.01, 0.99\", VisitAsia->belief));\n\tnn.push_back(VisitAsia);\n\t\n\tNode* Tuberculosis = new Node(\"Tuberculosis\");\n\tTuberculosis->states.push_back(\"Present\");\n\tTuberculosis->states.push_back(\"Absent\");\n\tTuberculosis->parents.push_back(VisitAsia);\n\tassert (parse_numbers(\"0.05,0.95,0.01,0.99\", Tuberculosis->probs));\n\tassert (parse_numbers(\"0.0104,0.9896\", Tuberculosis->belief));\n\tnn.push_back(Tuberculosis);\n\t\n\tNode* Smoking = new Node(\"Smoking\");\n\tSmoking->states.push_back(\"Smoker\");\n\tSmoking->states.push_back(\"NonSmoker\");\n\tassert (parse_numbers(\"0.5,0.5\", Smoking->probs));\n\tassert (parse_numbers(\"0.5,0.5\", Smoking->belief));\n\tnn.push_back(Smoking);\n\t\n\tNode* Cancer = new Node(\"Lung Cancer\");\n\tCancer->states.push_back(\"Present\");\n\tCancer->states.push_back(\"Absent\");\n\tCancer->parents.push_back(Smoking);\n\tassert (parse_numbers(\"0.1,0.9,0.01,0.99\", Cancer->probs));\n\tassert (parse_numbers(\"0.055,0.945\", Cancer->belief));\n\tnn.push_back(Cancer);\n\t\n\tNode* TbOrCa = new Node(\"Tuberculosis or Cancer\");\n\tTbOrCa->states.push_back(\"True\");\n\tTbOrCa->states.push_back(\"False\");\n\tTbOrCa->parents.push_back(Tuberculosis);\n\tTbOrCa->parents.push_back(Cancer);\n\tassert (parse_numbers(\"1,0,1,0,1,0,0,1\", TbOrCa->probs));\n\tassert (parse_numbers(\"0.064828,0.935172\", TbOrCa->belief));\n\tnn.push_back(TbOrCa);\n\n\tNode* XRay = new Node(\"XRay Result\");\n\tXRay->states.push_back(\"Abnormal\");\n\tXRay->states.push_back(\"Normal\");\n\tXRay->parents.push_back(TbOrCa);\n\tassert (parse_numbers(\"0.98,0.02,0.05,0.95\", XRay->probs));\n\tassert (parse_numbers(\"0.11029,0.88971\", XRay->belief));\n\tnn.push_back(XRay);\n\n\tNode* Bronchitis = new Node(\"Bronchitis\");\n\tBronchitis->states.push_back(\"Present\");\n\tBronchitis->states.push_back(\"Absent\");\n\tBronchitis->parents.push_back(Smoking);\n\tassert (parse_numbers(\"0.6,0.4,0.3,0.7\", Bronchitis->probs));\n\tassert (parse_numbers(\"0.45,0.55\", Bronchitis->belief));\n\tnn.push_back(Bronchitis);\n\n\tNode* Dyspnea = new Node(\"Dyspnea\");\n\tDyspnea->states.push_back(\"Present\");\n\tDyspnea->states.push_back(\"Absent\");\n\tDyspnea->parents.push_back(TbOrCa);\n\tDyspnea->parents.push_back(Bronchitis);\n\tassert (parse_numbers(\"0.9,0.1,0.7,0.3,0.8,0.2,0.1,0.9\", Dyspnea->probs));\n\tassert (parse_numbers(\"0.435971, 0.564029\", Dyspnea->belief));\n\tnn.push_back(Dyspnea);\n}\n"
  },
  {
    "path": "experimental/draw-bn/draw-bn.cpp",
    "content": "/*\n * Authors:\n *   Nathan Hurst\n *\n * Copyright (C) 2006 Authors\n *\n * Released under GNU GPL.  Read the file 'COPYING' for more information.\n */\n#include <iostream>\n\n#include <vector>\n#include <algorithm>\n#include <float.h>\n#include <libcola/cola.h>\n#include \"graphlayouttest.h\"\n\n#include <cairo/cairo-pdf.h>\n#include <cairo/cairo-svg.h>\n#include <cairo/cairo.h>\n#include <boost/spirit/core.hpp>\n#include <iostream>\n#include <complex>\n#include <string>\n#include <pango/pangocairo.h>\n\nusing namespace std;\nusing namespace cola;\n\n/** Convenience/readability wrapper for strcmp(a,b)==0. */\ninline bool\nstreq(char const *a, char const *b)\n{\n    return std::strcmp(a, b) == 0;\n}\n\nclass Node{\npublic:\n    vector<char const*> states;\n    vector<Node*> parents;\n    vector<double> probs;\n    string title;\n    vector<double> belief;\n    vpsc::Rectangle* position;\n    int idx;\n    \n    void draw(cairo_t* cr, vpsc::Rectangle* r) {\n        double x = position->getMinX()+10;\n        double y = position->getMinY()+10;\n        cout << *position << endl;\n        cout << position->width() << endl;\n        cairo_rectangle(cr, x, y, position->width(), position->height());\n        cairo_stroke(cr);\n        std::ostringstream notify;\n        notify << title;// << \" + \" << p->heu() << \" = \" << p->goal_heu();\n    \n        PangoLayout* layout = pango_cairo_create_layout (cr);\n        pango_layout_set_text(layout, \n                              notify.str().c_str(), -1);\n\n        PangoFontDescription *font_desc = pango_font_description_new();\n        pango_font_description_set_family(font_desc, \"Sans\");\n        const int size_px = 12;\n        pango_font_description_set_absolute_size(font_desc, size_px * PANGO_SCALE);\n        pango_layout_set_font_description(layout, font_desc);\n        PangoRectangle logical_extent;\n        pango_layout_get_pixel_extents(layout,\n                                       NULL,\n                                       &logical_extent);\n        cairo_move_to(cr, x+3, y+3);\n        pango_cairo_show_layout(cr, layout);\n    }\n    \n    void set_minimum_bounds(cairo_t* cr) {\n        std::ostringstream notify;\n        notify << title;// << \" + \" << p->heu() << \" = \" << p->goal_heu();\n    \n        PangoLayout* layout = pango_cairo_create_layout (cr);\n        pango_layout_set_text(layout, \n                              notify.str().c_str(), -1);\n\n        PangoFontDescription *font_desc = pango_font_description_new();\n        pango_font_description_set_family(font_desc, \"Sans\");\n        const int size_px = 12;\n        pango_font_description_set_absolute_size(font_desc, size_px * PANGO_SCALE);\n        pango_layout_set_font_description(layout, font_desc);\n        PangoRectangle logical_extent;\n        pango_layout_get_pixel_extents(layout,\n                                       NULL,\n                                       &logical_extent);\n        position->set_width(logical_extent.width+20);\n        position->set_height(logical_extent.height+20);\n    }\n\n    Node(char const* name) : title(name) {\n        double x = getRand(1000);\n        double y = getRand(1000);\n        position = new vpsc::Rectangle(x, x + 1, y, y + 1);\n    }\n    Node(vpsc::Rectangle* r) : position(r) {}\n};\n\n#include \"asia.cpp\"\n\nstatic cairo_surface_t *\ncairo_surface_for_filename(char const *const filename, double const width, double const height)\n{\n    cairo_surface_t *cr_s = NULL;\n    size_t const namelen = strlen(filename);\n    if (CAIRO_HAS_SVG_SURFACE\n        ? ((namelen >= 4) && streq(filename + namelen - 4, \".pdf\"))\n        : !((namelen >= 4) && streq(filename + namelen - 4, \".svg\")))\n    {\n#if CAIRO_HAS_PDF_SURFACE\n        cr_s = cairo_pdf_surface_create(filename, width, height);\n#else\n        fprintf(\"Sorry, cairo not built with PDF support, not saving.\\n\");\n#endif\n    } else {\n#if CAIRO_HAS_SVG_SURFACE\n        cr_s = cairo_svg_surface_create(filename, width, height);\n# else\n        fprintf(\"Sorry, cairo not built with SVG support, not saving.\\n\");\n#endif\n    }\n    return cr_s;\n}\n\n/** \n * \\brief Determines when to terminate layout of a particular graph based\n * on a given relative tolerance. \n */\nint main(int argc, char** argv) {\n    typedef pair < unsigned, unsigned >Edge;\n    vector<Edge> es;\n    double width=100;\n    vector<vpsc::Rectangle*> rs;\n    vector<Node*> network;\n    \n    cairo_surface_t * cr_s = \n        cairo_surface_for_filename(\"bn.pdf\", 1, 1);\n\n    if (!cr_s) {\n        return 1;\n    }\n    cairo_t *cr = cairo_create(cr_s);\n    \n    SimpleConstraints  scy;\n    construct_graph(network);\n    for(unsigned i = 0; i < network.size(); i++) {\n        Node* n = network[i];\n        n->idx = i;\n        n->set_minimum_bounds(cr);\n        rs.push_back(n->position);\n        \n        for(unsigned j = 0; j < n->parents.size(); j++) {\n            es.push_back(Edge(n->parents[j]->idx, i));\n\n            scy.push_back(new SimpleConstraint(n->parents[j]->idx, i, 100));\n        }\n    }\n    \n    ConstrainedMajorizationLayout alg(rs,es,NULL,width/2);\n    \n    alg.setYSimpleConstraints(&scy);\n    alg.run();\n    \n    double page_width, page_height;\n    \n    {\n    vpsc::Rectangle display_window = cola::bounds(rs);\n    double dx = -display_window.getMinX();\n    double dy = -display_window.getMinY();\n    page_width = display_window.width();\n    page_height = display_window.height();\n    \n    cout << \"shifting: (\" << dx << \", \" << dy << \")\\n\";\n    cout << \"size: (\" << page_width << \", \" << page_height << \")\\n\";\n    for(unsigned i = 0; i < network.size(); i++) {\n\trs[i]->offset(dx, dy);\n    }\n    }\n/*\n    PageBoundaryConstraints pbcx(0, page_width, 10000);\n    PageBoundaryConstraints pbcy(0, page_height, 10000);\n    for(unsigned i = 0; i < network.size(); i++) {\n        pbcx.offsets.push_back(make_pair(i, rs[i]->width()/2));\n        pbcy.offsets.push_back(make_pair(i, rs[i]->height()/2));\n    }\n    alg.setXPageBoundaryConstraints(&pbcx);\n    alg.setYPageBoundaryConstraints(&pbcx);\n    alg.run();\n*/\n    alg.setAvoidOverlaps();\n    alg.run();\n    {\n    vpsc::Rectangle display_window = cola::bounds(rs);\n    double dx = 10-display_window.getMinX();\n    double dy = 10-display_window.getMinY();\n    page_width = display_window.width();\n    page_height = display_window.height();\n    \n    cout << \"shifting: (\" << dx << \", \" << dy << \")\\n\";\n    cout << \"size: (\" << page_width << \", \" << page_height << \")\\n\";\n    for(unsigned i = 0; i < network.size(); i++) {\n\trs[i]->offset(dx, dy);\n    }\n    display_window = cola::bounds(rs);\n    cout << display_window << endl;\n    }\n    cr_s = \n        cairo_surface_for_filename(\"bn.pdf\", page_width+100, page_height+20);\n\n    if (!cr_s) {\n        return 1;\n    }\n    cr = cairo_create(cr_s);\n    \n    for(unsigned i = 0; i < es.size(); i++) {\n        unsigned st = es[i].first;\n        unsigned en = es[i].second;\n        cairo_move_to(cr, \n                      network[st]->position->getCentreX(),\n                      network[st]->position->getCentreY());\n        cairo_line_to(cr, \n                      network[en]->position->getCentreX(),\n                      network[en]->position->getCentreY());\n        cairo_stroke(cr);\n    }\n\n    for(unsigned i = 0; i < network.size(); i++)\n        network[i]->draw(cr, rs[i]);\n    \n    \n    cairo_show_page(cr);\n    cairo_destroy(cr);\n    cairo_surface_destroy(cr_s);\n    \n    return 0;\n}\n\n/*\n  Local Variables:\n  mode:c++\n  c-file-style:\"stroustrup\"\n  c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))\n  indent-tabs-mode:nil\n  fill-column:99\n  End:\n*/\n// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=99 :\n"
  },
  {
    "path": "experimental/draw-bn/graphlayouttest.cpp",
    "content": "#include \"graphlayouttest.h\"\n#include <libvpsc/rectangle.h>\n#include <fstream>\n\n#define ARROW_HEAD_BUFFER 3\n\nusing namespace cola;\nusing vpsc::Rectangle;\nusing std::endl;\nusing std::ios;\nusing std::max;\nusing std::min;\nusing std::ofstream;\nusing std::vector;\n\nvoid output_svg(vector<Rectangle*>& rs, vector<Edge>& es, char *fname, bool rects) {\n\tunsigned E=es.size();\n\tvector<straightener::Edge*> routes(E);\n\tfor(unsigned i=0;i<E;i++) {\n\t\tstraightener::Route* r=new straightener::Route(2);\n\t\tr->xs[0]=rs[es[i].first]->getCentreX();\n\t\tr->ys[0]=rs[es[i].first]->getCentreY();\n\t\tr->xs[1]=rs[es[i].second]->getCentreX();\n\t\tr->ys[1]=rs[es[i].second]->getCentreY();\n\t\troutes[i]=new straightener::Edge(i,es[i].first,es[i].second,r);\n\t}\n\toutput_svg(rs,routes,fname,rects);\n\tfor(unsigned i=0;i<E;i++) {\n\t\tdelete routes[i];\n\t}\n}\n\nvoid output_svg(vector<Rectangle*>& rs, vector<straightener::Edge*>& es, char *fname, bool rects) {\n\tdouble width, height;\n\tofstream f(fname);\n\tf.setf(ios::fixed);\n\tdouble r=5;\n\tif(rects) r=rs[0]->width()/2;\n\tdouble xmin=DBL_MAX, ymin=xmin;\n\tdouble xmax=-DBL_MAX, ymax=xmax;\n\tfor (unsigned i=0;i<rs.size();i++) {\n\t\tdouble x=rs[i]->getCentreX(), y=rs[i]->getCentreY();\n\t\txmin=min(xmin,x);\n\t\tymin=min(ymin,y);\n\t\txmax=max(xmax,x);\n\t\tymax=max(ymax,y);\n\t}\n\txmax+=2*r;\n\tymax+=2*r;\n\txmin-=2*r;\n\tymin-=2*r;\n\twidth=xmax-xmin;\n\theight=ymax-ymin;\n\tf<<\"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"\"<<width<<\"\\\" height=\\\"\"<<height<<\"\\\" viewBox = \\\"\"\n\t <<xmin<<\" \"<<ymin<<\" \"<<width<<\" \"<<height<<\"\\\">\"<<endl;\n    \tfor (unsigned i=0;i<es.size();i++) {\n\t\tfor (unsigned j=1;j<es[i]->route->n;j++) {\n\t\t\tf<<\"<line x1=\\\"\"<<es[i]->route->xs[j-1]\n\t\t\t <<\"\\\" y1=\\\"\"<<es[i]->route->ys[j-1]\n\t\t\t <<\"\\\" x2=\\\"\"<<es[i]->route->xs[j]\n\t\t\t <<\"\\\" y2=\\\"\"<<es[i]->route->ys[j]\n\t\t\t <<\"\\\" style=\\\"stroke:rgb(99,99,99);stroke-width:2\\\"/>\"<<endl;\n\t\t}\n\t}\n\tfor (unsigned i=0;i<rs.size();i++) {\n\t\tf<<\"<g id=\\\"node\"<<i\n\t\t <<\"\\\" class=\\\"node\\\"><title>\"<<i<<\"</title>\"<<endl;\n\t\tif(!rects) {\n\t\t\tf<<\"<ellipse cx=\\\"\"<<rs[i]->getCentreX()\n\t\t\t <<\"\\\" cy=\\\"\"<<rs[i]->getCentreY()\n\t\t\t <<\"\\\" rx=\\\"\"<<r<<\"\\\" ry=\\\"\"<<r\n\t\t\t <<\"\\\" style=\\\"fill:black;stroke:black;\\\"/>\";\n\t\t} else {\n\t\t\tf<<\"<rect x=\\\"\"<<rs[i]->getMinX()\n\t\t\t <<\"\\\" y=\\\"\"<<rs[i]->getMinY()\n\t\t\t <<\"\\\" width=\\\"\"<<rs[i]->width()\n\t\t\t <<\"\\\" height=\\\"\"<<rs[i]->height()\n\t\t\t <<\"\\\" style=\\\"fill:white;stroke:black;\\\"/>\";\n\t\t\tf<<\"<text x=\\\"\"<<(rs[i]->getCentreX()-3)\n\t\t\t <<\"\\\" y=\\\"\"<<(rs[i]->getCentreY()+5)\n\t\t\t <<\"\\\">\"<<i\n\t\t\t <<\"</text>\"<<endl;\n\n\t\t}\n\t\tf <<endl<<\"</g>\"<<endl;\n\t}\n\tf<<\"</svg>\"<<endl;\n}\n\nvoid output_svg(vector<Rectangle*>& rs, vector<Edge>& es, char *fname, bool rects, bool directedEdges, vector<bool> * cyclicEdges) {\n\tdouble width, height;\n\tofstream f(fname);\n\tf.setf(ios::fixed);\n\tdouble r=5;\n\tif(rects) r=rs[0]->width()/2;\n\tdouble xmin=DBL_MAX, ymin=xmin;\n\tdouble xmax=-DBL_MAX, ymax=xmax;\n\tfor (unsigned i=0;i<rs.size();i++) {\n\t\tdouble x=rs[i]->getCentreX(), y=rs[i]->getCentreY();\n\t\txmin=min(xmin,x);\n\t\tymin=min(ymin,y);\n\t\txmax=max(xmax,x);\n\t\tymax=max(ymax,y);\n\t}\n\txmax+=2*r;\n\tymax+=2*r;\n\txmin-=2*r;\n\tymin-=2*r;\n\twidth=xmax-xmin;\n\theight=ymax-ymin;\n\n        std::cout << \"Making a picture ...\" << endl;\n\n\tf << \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" xmlns:xlink=\\\"http://www.w3.org/1999/xlink\\\" \";\n\tf << \"xmlns:sodipodi=\\\"http://inkscape.sourceforge.net/DTD/sodipodi-0.dtd\\\" \";\n\tf << \"xmlns:inkscape=\\\"http://www.inkscape.org/namespaces/inkscape\\\" width=\\\"\"<<width<<\"\\\" height=\\\"\"<<height<<\"\\\" viewBox = \\\"\";\n\tf << xmin<<\" \"<<ymin<<\" \"<<width<<\" \"<<height<<\"\\\">\"<<endl;\n\n        // code to start to draw arrow heads\n\tif (directedEdges)  {\n\t  f << \"<defs id=\\\"defs4\\\">\" << endl;\n          f << \"  <marker inkscape:stockid=\\\"ConnArrowEnd\\\"\" << endl;\n          f << \"    orient=\\\"auto\\\" refY=\\\"0.0\\\" refX=\\\"\" << 4.5 + r + ARROW_HEAD_BUFFER << \"\\\"\" << endl;\n          f << \"    id=\\\"ConnArrowEnd\\\" style=\\\"overflow:visible;\\\">\" << endl;\n          f << \"  <path id=\\\"path3466\\\"\" << endl;\n          f << \"    d=\\\"M 0.0,0.0 L 1.0,-5.0 L -12.5,0.0 L 1.0,5.0 L 0.0,0.0 z \\\"\" << endl;\n          f << \"    style=\\\"fill-rule:evenodd;stroke:#000000;stroke-width:1.0px;marker-start:none;\\\"\" << endl;\n          f << \"    transform=\\\"scale(0.6) rotate(180)\\\" />\" << endl;\n          f << \"  </marker>\" << endl;\n          f << \"</defs>\" << endl;\n\t  f << \"<defs id=\\\"defs5\\\">\" << endl;\n          f << \"  <marker inkscape:stockid=\\\"CyclicConnArrowEnd\\\"\" << endl;\n          f << \"    orient=\\\"auto\\\" refY=\\\"0.0\\\" refX=\\\"\" << 4.5 + r + ARROW_HEAD_BUFFER << \"\\\"\" << endl;\n          f << \"    id=\\\"CyclicConnArrowEnd\\\" style=\\\"fill:#b400ff;fill-opacity:1;overflow:visible\\\">\" << endl;\n          f << \"  <path id=\\\"path3466\\\"\" << endl;\n          f << \"    d=\\\"M 0.0,0.0 L 1.0,-5.0 L -12.5,0.0 L 1.0,5.0 L 0.0,0.0 z \\\"\" << endl;\n          f << \"    style=\\\"fill-rule:evenodd;stroke:#B400FF;stroke-width:1.0px;marker-start:none;\\\"\" << endl;\n          f << \"    transform=\\\"scale(0.6) rotate(180)\\\" />\" << endl;\n          f << \"  </marker>\" << endl;\n          f << \"</defs>\" << endl;\n\t}\n\n\tfor (unsigned i=0;i<es.size();i++) {\n\t\tunsigned u = es[i].first;\n\t\tunsigned v = es[i].second;\n\n\t\tif (directedEdges)  {\n\t\t  f << \"<path d=\\\"M\" << rs[u]->getCentreX() << \",\" << rs[u]->getCentreY() << \" L\" << rs[v]->getCentreX() << \",\" << rs[v]->getCentreY();\n\t\t  f << \"\\\"\";\n                  f << \" style=\\\"stroke:\";\n\n                  if (cyclicEdges != NULL)  {\n\t\t    // if we have a cylic edge we want to draw it a different colour\n\t\t    if ((*cyclicEdges)[i])  { f << \"rgb(180,0,255);stroke-width:1px;marker-end:url(#CyclicConnArrowEnd);stroke-miterlimit:4;stroke-dasharray:1,1;stroke-dashoffset:0\\\"\"; }\n\t\t    else  { f << \"rgb(99,99,99);stroke-width:1px;marker-end:url(#ConnArrowEnd)\\\"\"; }\n\t\t  }\n\t\t  else  { f << \"rgb(99,99,99);stroke-width:1px;marker-end:url(#ConnArrowEnd)\\\"\"; }\n\n\t\t  f << \"/>\" << endl;\n\t\t}\n\t\telse  {\n\t\t  f<<\"<line x1=\\\"\"<<rs[u]->getCentreX()\n\t\t   <<\"\\\" y1=\\\"\"<<rs[u]->getCentreY()\n\t\t   <<\"\\\" x2=\\\"\"<<rs[v]->getCentreX()\n\t\t   <<\"\\\" y2=\\\"\"<<rs[v]->getCentreY()\n\t\t   <<\"\\\" style=\\\"stroke:rgb(99,99,99);stroke-width:2\\\"/>\"<<endl;\n\t\t}\t\n\t}\n\tfor (unsigned i=0;i<rs.size();i++) {\n\t\tf<<\"<g id=\\\"node\"<<i\n\t\t <<\"\\\" class=\\\"node\\\"><title>\"<<i<<\"</title>\"<<endl;\n\t\tif(!rects) {\n\t\t\tf<<\"<ellipse cx=\\\"\"<<rs[i]->getCentreX()\n\t\t\t <<\"\\\" cy=\\\"\"<<rs[i]->getCentreY()\n\t\t\t <<\"\\\" rx=\\\"\"<<r<<\"\\\" ry=\\\"\"<<r\n\t\t\t <<\"\\\" style=\\\"fill:black;stroke:black;\\\"/>\"\n\t\t\t <<\"<text x=\\\"\";\n\t\t\t\n\t\t\tif (i < 10)  { f << (rs[i]->getCentreX()-2); }\n\t\t\telse  { f << (rs[i]->getCentreX()-4); }\n\n\t\t\tf <<\"\\\" y=\\\"\"<<(rs[i]->getCentreY()+2)\n\t\t\t  <<\"\\\" style=\\\"fill:white\\\" font-size=\\\"7\\\">\"<< i\n\t\t\t  <<\"</text>\"<<endl;\t\t\n\t\t} else {\n\t\t\tf<<\"<rect x=\\\"\"<<rs[i]->getMinX()\n\t\t\t <<\"\\\" y=\\\"\"<<rs[i]->getMinY()\n\t\t\t <<\"\\\" width=\\\"\"<<rs[i]->width()\n\t\t\t <<\"\\\" height=\\\"\"<<rs[i]->height()\n\t\t\t <<\"\\\" style=\\\"fill:white;stroke:black;\\\"/>\";\n\t\t\tf<<\"<text x=\\\"\"<<(rs[i]->getCentreX()-3)\n\t\t\t <<\"\\\" y=\\\"\"<<(rs[i]->getCentreY()+5)\n\t\t\t <<\"\\\">\"<<i\n\t\t\t <<\"</text>\"<<endl;\n\n\t\t}\n\t\tf <<endl<<\"</g>\"<<endl;\n\t}\n\tf<<\"</svg>\"<<endl;\n}\n\nvoid output_svg(vector<Rectangle*>& rs, vector<Edge>& es, char *fname, bool rects, bool directedEdges, vector<Edge>* Ea) {\n\tdouble width, height;\n\tofstream f(fname);\n\tf.setf(ios::fixed);\n\tdouble r=5;\n\tif(rects) r=rs[0]->width()/2;\n\tdouble xmin=DBL_MAX, ymin=xmin;\n\tdouble xmax=-DBL_MAX, ymax=xmax;\n\tfor (unsigned i=0;i<rs.size();i++) {\n\t\tdouble x=rs[i]->getCentreX(), y=rs[i]->getCentreY();\n\t\txmin=min(xmin,x);\n\t\tymin=min(ymin,y);\n\t\txmax=max(xmax,x);\n\t\tymax=max(ymax,y);\n\t}\n\txmax+=2*r;\n\tymax+=2*r;\n\txmin-=2*r;\n\tymin-=2*r;\n\twidth=xmax-xmin;\n\theight=ymax-ymin;\n\tf << \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" xmlns:xlink=\\\"http://www.w3.org/1999/xlink\\\" \";\n\tf << \"xmlns:sodipodi=\\\"http://inkscape.sourceforge.net/DTD/sodipodi-0.dtd\\\" \";\n\tf << \"xmlns:inkscape=\\\"http://www.inkscape.org/namespaces/inkscape\\\" width=\\\"\"<<width<<\"\\\" height=\\\"\"<<height<<\"\\\" viewBox = \\\"\";\n\tf << xmin<<\" \"<<ymin<<\" \"<<width<<\" \"<<height<<\"\\\">\"<<endl;\n\n        // code to start to draw arrow heads\n\tif (directedEdges)  {\n\t  f << \"<defs id=\\\"defs4\\\">\" << endl;\n          f << \"  <marker inkscape:stockid=\\\"ConnArrowEnd\\\"\" << endl;\n          f << \"    orient=\\\"auto\\\" refY=\\\"0.0\\\" refX=\\\"\" << 4.5 + r + ARROW_HEAD_BUFFER << \"\\\"\" << endl;\n          f << \"    id=\\\"ConnArrowEnd\\\" style=\\\"overflow:visible;\\\">\" << endl;\n          f << \"  <path id=\\\"path3466\\\"\" << endl;\n          f << \"    d=\\\"M 0.0,0.0 L 1.0,-5.0 L -12.5,0.0 L 1.0,5.0 L 0.0,0.0 z \\\"\" << endl;\n          f << \"    style=\\\"fill-rule:evenodd;stroke:#000000;stroke-width:1.0px;marker-start:none;\\\"\" << endl;\n          f << \"    transform=\\\"scale(0.6) rotate(180)\\\" />\" << endl;\n          f << \"  </marker>\" << endl;\n          f << \"</defs>\" << endl;\n\t  f << \"<defs id=\\\"defs5\\\">\" << endl;\n          f << \"  <marker inkscape:stockid=\\\"CyclicConnArrowEnd\\\"\" << endl;\n          f << \"    orient=\\\"auto\\\" refY=\\\"0.0\\\" refX=\\\"\" << 4.5 + r + ARROW_HEAD_BUFFER << \"\\\"\" << endl;\n          f << \"    id=\\\"CyclicConnArrowEnd\\\" style=\\\"overflow:visible;\\\">\" << endl;\n          f << \"  <path id=\\\"path3466\\\"\" << endl;\n          f << \"    d=\\\"M 0.0,0.0 L 1.0,-5.0 L -12.5,0.0 L 1.0,5.0 L 0.0,0.0 z \\\"\" << endl;\n          f << \"    style=\\\"fill-rule:evenodd;stroke:#B400FF;stroke-width:1.0px;marker-start:none;\\\"\" << endl;\n          f << \"    transform=\\\"scale(0.6) rotate(180)\\\" />\" << endl;\n          f << \"  </marker>\" << endl;\n          f << \"</defs>\" << endl;\n\t}\n\n\tfor (unsigned i=0;i<Ea->size();i++) {\n\t\tunsigned u = (*Ea)[i].first;\n\t\tunsigned v = (*Ea)[i].second;\n\n\t\tif (directedEdges)  {\n\t\t  f << \"<path d=\\\"M\" << rs[u]->getCentreX() << \",\" << rs[u]->getCentreY() << \" L\" << rs[v]->getCentreX() << \",\" << rs[v]->getCentreY();\n\t\t  f << \"\\\"\";\n                  f << \" style=\\\"stroke:rgb(99,99,99);stroke-width:1px;marker-end:url(#ConnArrowEnd)\\\"/>\" << endl;\n\t\t}\n\t\telse  {\n\t\t  f<<\"<line x1=\\\"\"<<rs[u]->getCentreX()\n\t\t   <<\"\\\" y1=\\\"\"<<rs[u]->getCentreY()\n\t\t   <<\"\\\" x2=\\\"\"<<rs[v]->getCentreX()\n\t\t   <<\"\\\" y2=\\\"\"<<rs[v]->getCentreY()\n\t\t   <<\"\\\" style=\\\"stroke:rgb(99,99,99);stroke-width:2\\\"/>\"<<endl;\n\t\t}\t\n\t}\n\tfor (unsigned i=0;i<rs.size();i++) {\n\t\tf<<\"<g id=\\\"node\"<<i\n\t\t <<\"\\\" class=\\\"node\\\"><title>\"<<i<<\"</title>\"<<endl;\n\t\tif(!rects) {\n\t\t\tf<<\"<ellipse cx=\\\"\"<<rs[i]->getCentreX()\n\t\t\t <<\"\\\" cy=\\\"\"<<rs[i]->getCentreY()\n\t\t\t <<\"\\\" rx=\\\"\"<<r<<\"\\\" ry=\\\"\"<<r\n\t\t\t <<\"\\\" style=\\\"fill:black;stroke:black;\\\"/>\"\n\t\t\t <<\"<text x=\\\"\";\n\t\t\t\n\t\t\tif (i < 10)  { f << (rs[i]->getCentreX()-2); }\n\t\t\telse  { f << (rs[i]->getCentreX()-4); }\n\n\t\t\tf <<\"\\\" y=\\\"\"<<(rs[i]->getCentreY()+2)\n\t\t\t  <<\"\\\" style=\\\"fill:white\\\" font-size=\\\"7\\\">\"<< i\n\t\t\t  <<\"</text>\"<<endl;\t\t\n\t\t} else {\n\t\t\tf<<\"<rect x=\\\"\"<<rs[i]->getMinX()\n\t\t\t <<\"\\\" y=\\\"\"<<rs[i]->getMinY()\n\t\t\t <<\"\\\" width=\\\"\"<<rs[i]->width()\n\t\t\t <<\"\\\" height=\\\"\"<<rs[i]->height()\n\t\t\t <<\"\\\" style=\\\"fill:white;stroke:black;\\\"/>\";\n\t\t\tf<<\"<text x=\\\"\"<<(rs[i]->getCentreX()-3)\n\t\t\t <<\"\\\" y=\\\"\"<<(rs[i]->getCentreY()+5)\n\t\t\t <<\"\\\">\"<<i\n\t\t\t <<\"</text>\"<<endl;\n\n\t\t}\n\t\tf <<endl<<\"</g>\"<<endl;\n\t}\n\tf<<\"</svg>\"<<endl;\n}\n"
  },
  {
    "path": "experimental/draw-bn/graphlayouttest.h",
    "content": "#include <libcola/cola.h>\nvoid output_svg(std::vector<vpsc::Rectangle*> &rs, std::vector<cola::Edge>& es, char* fname,bool rects=false);\nvoid output_svg(std::vector<vpsc::Rectangle*> &rs, std::vector<straightener::Edge*>& es, char* fname,bool rects=false);\nvoid output_svg(std::vector<vpsc::Rectangle*> &rs, std::vector<cola::Edge>& es, char* fname,bool rects, bool directedEdges, std::vector<bool> * cyclicEdges);\nvoid output_svg(std::vector<vpsc::Rectangle*> &rs, std::vector<cola::Edge>& es, char* fname,bool rects, bool directedEdges, std::vector<cola::Edge>* Ea);\n\ninline double getRand(double range) {\n\treturn range*rand()/RAND_MAX;\n}\n\n"
  },
  {
    "path": "experimental/neatogen/Makefile",
    "content": "# Makefile.in generated by automake 1.9.5 from Makefile.am.\n# lib/neatogen/Makefile.  Generated from Makefile.in by configure.\n\n# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,\n# 2003, 2004, 2005  Free Software Foundation, Inc.\n# This Makefile.in is free software; the Free Software Foundation\n# gives unlimited permission to copy and/or distribute it,\n# with or without modifications, as long as this notice is preserved.\n\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY, to the extent permitted by law; without\n# even the implied warranty of MERCHANTABILITY or FITNESS FOR A\n# PARTICULAR PURPOSE.\n\n\n\n\nSOURCES = $(libneatogen_la_SOURCES)\n\nsrcdir = .\ntop_srcdir = ../..\n\npkgdatadir = $(datadir)/graphviz\npkglibdir = $(libdir)/graphviz\npkgincludedir = $(includedir)/graphviz\ntop_builddir = ../..\nam__cd = CDPATH=\"$${ZSH_VERSION+.}$(PATH_SEPARATOR)\" && cd\nINSTALL = /usr/bin/install -c\ninstall_sh_DATA = $(install_sh) -c -m 644\ninstall_sh_PROGRAM = $(install_sh) -c\ninstall_sh_SCRIPT = $(install_sh) -c\nINSTALL_HEADER = $(INSTALL_DATA)\ntransform = $(program_transform_name)\nNORMAL_INSTALL = :\nPRE_INSTALL = :\nPOST_INSTALL = :\nNORMAL_UNINSTALL = :\nPRE_UNINSTALL = :\nPOST_UNINSTALL = :\nbuild_triplet = i686-pc-linux-gnu\nhost_triplet = i686-pc-linux-gnu\nsubdir = lib/neatogen\nDIST_COMMON = $(noinst_HEADERS) $(srcdir)/Makefile.am \\\n\t$(srcdir)/Makefile.in\nACLOCAL_M4 = $(top_srcdir)/aclocal.m4\nam__aclocal_m4_deps = $(top_srcdir)/configure.ac\nam__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \\\n\t$(ACLOCAL_M4)\nmkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs\nCONFIG_HEADER = $(top_builddir)/config.h\nCONFIG_CLEAN_FILES =\nLTLIBRARIES = $(noinst_LTLIBRARIES)\nlibneatogen_la_LIBADD =\nam_libneatogen_la_OBJECTS = adjust.lo circuit.lo edges.lo find_ints.lo \\\n\tgeometry.lo heap.lo hedges.lo info.lo neatoinit.lo \\\n\tintersect.lo legal.lo lu.lo matinv.lo memory.lo poly.lo \\\n\tprintvis.lo site.lo solve.lo neatosplines.lo stuff.lo \\\n\tvoronoi.lo stress.lo kkutils.lo matrix_ops.lo embed_graph.lo \\\n\tdijkstra.lo conjgrad.lo pca.lo closest.lo bfs.lo constraint.lo \\\n\tquad_prog_solve.lo smart_ini_x.lo constrained_majorization.lo \\\n\topt_arrangement.lo compute_hierarchy.lo quad_prog_vpsc.lo \\\n\tconstrained_majorization_vsep.lo mosek_quad_solve.lo\nlibneatogen_la_OBJECTS = $(am_libneatogen_la_OBJECTS)\nDEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)\ndepcomp = $(SHELL) $(top_srcdir)/config/depcomp\nam__depfiles_maybe = depfiles\nCOMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \\\n\t$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)\nLTCOMPILE = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) \\\n\t$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \\\n\t$(AM_CFLAGS) $(CFLAGS)\nCCLD = $(CC)\nLINK = $(LIBTOOL) --tag=CC --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \\\n\t$(AM_LDFLAGS) $(LDFLAGS) -o $@\nSOURCES = $(libneatogen_la_SOURCES)\nDIST_SOURCES = $(libneatogen_la_SOURCES)\nHEADERS = $(noinst_HEADERS)\nETAGS = etags\nCTAGS = ctags\nDISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)\nACLOCAL = ${SHELL} /home/dwyer/devel/graphviz-2.9.20060213.0540/config/missing --run aclocal-1.9\nALLOCA = \nAMDEP_FALSE = #\nAMDEP_TRUE = \nAMTAR = ${SHELL} /home/dwyer/devel/graphviz-2.9.20060213.0540/config/missing --run tar\nAR = ar\nAUTOCONF = ${SHELL} /home/dwyer/devel/graphviz-2.9.20060213.0540/config/missing --run autoconf\nAUTOHEADER = ${SHELL} /home/dwyer/devel/graphviz-2.9.20060213.0540/config/missing --run autoheader\nAUTOMAKE = ${SHELL} /home/dwyer/devel/graphviz-2.9.20060213.0540/config/missing --run automake-1.9\nAWK = mawk\nBUILDDATE = Fri Mar 24 13:17:15 UTC 2006\nBUILD_DIR = /home/dwyer/devel/graphviz-2.9.20060213.0540\nCC = gcc\nCCDEPMODE = depmode=gcc3\nCFLAGS = -g -O2 -Wno-unknown-pragmas -Wstrict-prototypes -Wpointer-arith -Wall -ffast-math\nCPP = gcc -E\nCPPFLAGS =  -I/usr/local/include\nCXX = g++\nCXXCPP = g++ -E\nCXXDEPMODE = depmode=gcc3\nCXXFLAGS = -g -O2\nCYGPATH_W = echo\nCYGWIN = no\nDARWIN = no\nDEFS = -DHAVE_CONFIG_H\nDEPDIR = .deps\nDISABLE_CODEGENS_FALSE = \nDISABLE_CODEGENS_TRUE = #\nDISABLE_LTDL_FALSE = \nDISABLE_LTDL_TRUE = #\nECHO = echo\nECHO_C = \nECHO_N = -n\nECHO_T = \nEGREP = grep -E\nENABLE_STATIC_FALSE = #\nENABLE_STATIC_TRUE = \nEXEEXT = \nEXPAT_CONFIG = \nEXPAT_INCLUDES = \nEXPAT_LIBS = /usr/lib/libexpat.la -lexpat\nF77 = \nFC_INCLUDES = \nFC_LIBS =  -lfontconfig\nFFLAGS = \nFONTCONFIG_CFLAGS =  \nFONTCONFIG_CONFIG = \nFONTCONFIG_LIBS = -lfontconfig  \nFREETYPE_CONFIG = /usr/bin/freetype-config\nFT_INCLUDES = -I/usr/include/freetype2\nFT_LIBS = /usr/lib/libfreetype.la -lfreetype -lz\nGDLIB_CONFIG = \nGD_INCLUDES = -I$(top_srcdir)/lib/gd\nGD_LIBS = $(top_builddir)/lib/gd/libgvgd.la\nGUILE = \nGUILE_INCLUDES = \nGUILE_LIBS = \nGVPLUGIN_VERSION = 2\nHAVE_TCL = \nHAVE_TK = \nICONV_INCLUDES = \nICONV_LIBS = \nINCLTDL = \nINSTALL_DATA = ${INSTALL} -m 644\nINSTALL_PROGRAM = ${INSTALL}\nINSTALL_SCRIPT = ${INSTALL}\nINSTALL_STRIP_PROGRAM = ${SHELL} $(install_sh) -c -s\nIO = \nIO_INCLUDES = \nIO_LIBS = \nJAVA = \nJAVA_INCLUDES = \nJAVA_LIBS = \nJPEG_INCLUDES = \nJPEG_LIBS = /usr/lib/libjpeg.la -ljpeg\nKSH = sh\nLDFLAGS =  -L/usr/local/lib\nLEX = flex\nLEXLIB = -lfl\nLEX_OUTPUT_ROOT = lex.yy\nLIBGEN_LIBS = \nLIBLTDL = -lltdl\nLIBOBJS = \nLIBPNG_CONFIG = /usr/bin/libpng-config\nLIBS = \nLIBTOOL = $(SHELL) $(top_builddir)/libtool\nLN_S = ln -s\nLTLIBOBJS = \nLUA = \nLUA_INCLUDES = \nLUA_LIBS = \nMAKEINFO = ${SHELL} /home/dwyer/devel/graphviz-2.9.20060213.0540/config/missing --run makeinfo\nMATH_LIBS = -lm\nMINGW32 = no\nOBJEXT = o\nOCAML = \nOCAML_INCLUDES = \nOCAML_LIBS = \nPACKAGE = graphviz\nPACKAGE_BUGREPORT = \nPACKAGE_NAME = graphviz\nPACKAGE_STRING = graphviz 2.9.20060213.0540\nPACKAGE_TARNAME = graphviz\nPACKAGE_VERSION = 2.9.20060213.0540\nPATH_SEPARATOR = :\nPERL = \nPERL_INCLUDES = \nPERL_LIBS = \nPHP = \nPHP_INCLUDES = \nPHP_LIBS = \nPKG_CONFIG = /usr/bin/pkg-config\nPNG_INCLUDES = -I/usr/include/libpng12\nPNG_LIBS =  -lpng\nPYTHON = \nPYTHON_INCLUDES = \nPYTHON_LIBS = \nRANLIB = ranlib\nRUBY = \nRUBY_INCLUDES = \nRUBY_LIBS = \nSED = /bin/sed\nSET_MAKE = \nSHARP = \nSHARP_INCLUDES = \nSHARP_LIBS = \nSHELL = /bin/sh\nSOCKET_LIBS = \nSORT = sort\nSTRIP = strip\nSWIG = \nSWIG_VERSION = \nTCLINT_INCLUDES = -I/home/dwyer/devel/graphviz-2.9.20060213.0540/tclpkg/tclstubs\nTCLSH = /usr/bin/tclsh8.4\nTCL_CFLAGS = \nTCL_DEFS = \nTCL_INCLUDES = \nTCL_LIBS = \nTCL_MAJOR_VERSION = \nTCL_MINOR_VERSION = \nTCL_PATCH_LEVEL = \nTCL_PKGINDEX = \nTCL_SHLIB_SUFFIX = \nTCL_SRC_DIR = \nTCL_STUB_LIB_SPEC = \nTCL_VERSION = \nTKINT_INCLUDES = -I/home/dwyer/devel/graphviz-2.9.20060213.0540/tclpkg/tkstubs\nTK_CFLAGS = \nTK_DEFS = \nTK_INCLUDES = \nTK_LIB_SPEC = \nTK_MAJOR_VERSION = \nTK_MINOR_VERSION = \nTK_PATCH_LEVEL = \nTK_PKGINDEX = \nTK_SRC_DIR = \nTK_STUB_LIB_SPEC = \nTK_VERSION = \nTK_XINCLUDES = \nTOP_DIR = /home/dwyer/devel/graphviz-2.9.20060213.0540\nVERSION = 2.9.20060213.0540\nVERSION_INFO = 2:0:0\nWISH = \nWITH_GUILE_FALSE = \nWITH_GUILE_TRUE = #\nWITH_IO_FALSE = \nWITH_IO_TRUE = #\nWITH_JAVA_FALSE = \nWITH_JAVA_TRUE = #\nWITH_LUA_FALSE = \nWITH_LUA_TRUE = #\nWITH_MYLIBGD_FALSE = #\nWITH_MYLIBGD_TRUE = \nWITH_OCAML_FALSE = \nWITH_OCAML_TRUE = #\nWITH_PERL_FALSE = \nWITH_PERL_TRUE = #\nWITH_PHP_FALSE = \nWITH_PHP_TRUE = #\nWITH_PYTHON_FALSE = \nWITH_PYTHON_TRUE = #\nWITH_RUBY_FALSE = \nWITH_RUBY_TRUE = #\nWITH_SHARP_FALSE = \nWITH_SHARP_TRUE = #\nWITH_SWIG_FALSE = \nWITH_SWIG_TRUE = #\nWITH_TCL_FALSE = \nWITH_TCL_TRUE = #\nWITH_TK_FALSE = \nWITH_TK_TRUE = #\nWITH_X_FALSE = #\nWITH_X_TRUE = \nXAW_INCLUDES = \nXAW_LIBS =  -lXaw\nXPM_INCLUDES = \nXPM_LIBS =  -lXpm\nX_CFLAGS = \nX_EXTRA_LIBS = \nX_LIBS =  -L/usr/X11R6/lib\nX_PRE_LIBS =  -lSM -lICE\nYACC = bison -y\nZ_INCLUDES = \nZ_LIBS =  -lz\nac_ct_AR = ar\nac_ct_CC = gcc\nac_ct_CXX = g++\nac_ct_F77 = \nac_ct_RANLIB = ranlib\nac_ct_STRIP = strip\nac_pt_PKG_CONFIG = /usr/bin/pkg-config\nam__fastdepCC_FALSE = #\nam__fastdepCC_TRUE = \nam__fastdepCXX_FALSE = #\nam__fastdepCXX_TRUE = \nam__include = include\nam__leading_dot = .\nam__quote = \nam__tar = ${AMTAR} chof - \"$$tardir\"\nam__untar = ${AMTAR} xf -\nbindir = ${exec_prefix}/bin\nbuild = i686-pc-linux-gnu\nbuild_alias = \nbuild_cpu = i686\nbuild_os = linux-gnu\nbuild_vendor = pc\ndatadir = ${prefix}/share\nexec_prefix = ${prefix}\nhost = i686-pc-linux-gnu\nhost_alias = \nhost_cpu = i686\nhost_os = linux-gnu\nhost_vendor = pc\nincludedir = ${prefix}/include\ninfodir = ${prefix}/info\ninstall_sh = /home/dwyer/devel/graphviz-2.9.20060213.0540/config/install-sh\nlibdir = ${exec_prefix}/lib\nlibexecdir = ${exec_prefix}/libexec\nlocalstatedir = ${prefix}/var\nmandir = ${prefix}/man\nmkdir_p = mkdir -p --\noldincludedir = /usr/include\nprefix = /usr/local\nprogram_transform_name = s,x,x,\nsbindir = ${exec_prefix}/sbin\nsharedstatedir = ${prefix}/com\nsubdirs =  libltdl\nsysconfdir = ${prefix}/etc\ntarget_alias = \nAM_CPPFLAGS = \\\n        -I$(top_srcdir) \\\n        -I$(top_srcdir)/lib/common \\\n        -I$(top_srcdir)/lib/gvc \\\n        -I$(top_srcdir)/lib/pack \\\n        -I$(top_srcdir)/lib/pathplan \\\n        -I$(top_srcdir)/lib/graph \\\n        -I$(top_srcdir)/lib/cdt \\\n\t-I$(top_srcdir)/lib/libvpsc\n\nnoinst_HEADERS = adjust.h edges.h geometry.h heap.h hedges.h info.h mem.h \\\n\tneato.h poly.h neatoprocs.h simple.h site.h voronoi.h \\\n\tbfs.h closest.h conjgrad.h defs.h dijkstra.h embed_graph.h kkutils.h \\\n\tmatrix_ops.h pca.h stress.h quad_prog_solver.h digcola.h \\\n\tquad_prog_vpsc.h mosek_quad_solve.h\n\nnoinst_LTLIBRARIES = libneatogen.la\nlibneatogen_la_SOURCES = adjust.c circuit.c edges.c find_ints.c geometry.c \\\n\theap.c hedges.c info.c neatoinit.c intersect.c legal.c lu.c matinv.c \\\n\tmemory.c poly.c printvis.c site.c solve.c neatosplines.c stuff.c \\\n\tvoronoi.c stress.c kkutils.c matrix_ops.c embed_graph.c dijkstra.c \\\n\tconjgrad.c pca.c closest.c bfs.c constraint.c quad_prog_solve.c \\\n\tsmart_ini_x.c constrained_majorization.c opt_arrangement.c \\\n\tcompute_hierarchy.c \\\n\tquad_prog_vpsc.c constrained_majorization_vsep.c \\\n\tmosek_quad_solve.c\n\nEXTRA_DIST = Makefile.old\nall: all-am\n\n.SUFFIXES:\n.SUFFIXES: .c .lo .o .obj\n$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)\n\t@for dep in $?; do \\\n\t  case '$(am__configure_deps)' in \\\n\t    *$$dep*) \\\n\t      cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \\\n\t\t&& exit 0; \\\n\t      exit 1;; \\\n\t  esac; \\\n\tdone; \\\n\techo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  lib/neatogen/Makefile'; \\\n\tcd $(top_srcdir) && \\\n\t  $(AUTOMAKE) --gnu  lib/neatogen/Makefile\n.PRECIOUS: Makefile\nMakefile: $(srcdir)/Makefile.in $(top_builddir)/config.status\n\t@case '$?' in \\\n\t  *config.status*) \\\n\t    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \\\n\t  *) \\\n\t    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \\\n\t    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \\\n\tesac;\n\n$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)\n\tcd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh\n\n$(top_srcdir)/configure:  $(am__configure_deps)\n\tcd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh\n$(ACLOCAL_M4):  $(am__aclocal_m4_deps)\n\tcd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh\n\nclean-noinstLTLIBRARIES:\n\t-test -z \"$(noinst_LTLIBRARIES)\" || rm -f $(noinst_LTLIBRARIES)\n\t@list='$(noinst_LTLIBRARIES)'; for p in $$list; do \\\n\t  dir=\"`echo $$p | sed -e 's|/[^/]*$$||'`\"; \\\n\t  test \"$$dir\" != \"$$p\" || dir=.; \\\n\t  echo \"rm -f \\\"$${dir}/so_locations\\\"\"; \\\n\t  rm -f \"$${dir}/so_locations\"; \\\n\tdone\nlibneatogen.la: $(libneatogen_la_OBJECTS) $(libneatogen_la_DEPENDENCIES) \n\t$(LINK)  $(libneatogen_la_LDFLAGS) $(libneatogen_la_OBJECTS) $(libneatogen_la_LIBADD) $(LIBS)\n\nmostlyclean-compile:\n\t-rm -f *.$(OBJEXT)\n\ndistclean-compile:\n\t-rm -f *.tab.c\n\ninclude ./$(DEPDIR)/adjust.Plo\ninclude ./$(DEPDIR)/bfs.Plo\ninclude ./$(DEPDIR)/circuit.Plo\ninclude ./$(DEPDIR)/closest.Plo\ninclude ./$(DEPDIR)/compute_hierarchy.Plo\ninclude ./$(DEPDIR)/conjgrad.Plo\ninclude ./$(DEPDIR)/constrained_majorization.Plo\ninclude ./$(DEPDIR)/constrained_majorization_vsep.Plo\ninclude ./$(DEPDIR)/constraint.Plo\ninclude ./$(DEPDIR)/dijkstra.Plo\ninclude ./$(DEPDIR)/edges.Plo\ninclude ./$(DEPDIR)/embed_graph.Plo\ninclude ./$(DEPDIR)/find_ints.Plo\ninclude ./$(DEPDIR)/geometry.Plo\ninclude ./$(DEPDIR)/heap.Plo\ninclude ./$(DEPDIR)/hedges.Plo\ninclude ./$(DEPDIR)/info.Plo\ninclude ./$(DEPDIR)/intersect.Plo\ninclude ./$(DEPDIR)/kkutils.Plo\ninclude ./$(DEPDIR)/legal.Plo\ninclude ./$(DEPDIR)/lu.Plo\ninclude ./$(DEPDIR)/matinv.Plo\ninclude ./$(DEPDIR)/matrix_ops.Plo\ninclude ./$(DEPDIR)/memory.Plo\ninclude ./$(DEPDIR)/mosek_quad_solve.Plo\ninclude ./$(DEPDIR)/neatoinit.Plo\ninclude ./$(DEPDIR)/neatosplines.Plo\ninclude ./$(DEPDIR)/opt_arrangement.Plo\ninclude ./$(DEPDIR)/pca.Plo\ninclude ./$(DEPDIR)/poly.Plo\ninclude ./$(DEPDIR)/printvis.Plo\ninclude ./$(DEPDIR)/quad_prog_solve.Plo\ninclude ./$(DEPDIR)/quad_prog_vpsc.Plo\ninclude ./$(DEPDIR)/site.Plo\ninclude ./$(DEPDIR)/smart_ini_x.Plo\ninclude ./$(DEPDIR)/solve.Plo\ninclude ./$(DEPDIR)/stress.Plo\ninclude ./$(DEPDIR)/stuff.Plo\ninclude ./$(DEPDIR)/voronoi.Plo\n\n.c.o:\n\tif $(COMPILE) -MT $@ -MD -MP -MF \"$(DEPDIR)/$*.Tpo\" -c -o $@ $<; \\\n\tthen mv -f \"$(DEPDIR)/$*.Tpo\" \"$(DEPDIR)/$*.Po\"; else rm -f \"$(DEPDIR)/$*.Tpo\"; exit 1; fi\n#\tsource='$<' object='$@' libtool=no \\\n#\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \\\n#\t$(COMPILE) -c $<\n\n.c.obj:\n\tif $(COMPILE) -MT $@ -MD -MP -MF \"$(DEPDIR)/$*.Tpo\" -c -o $@ `$(CYGPATH_W) '$<'`; \\\n\tthen mv -f \"$(DEPDIR)/$*.Tpo\" \"$(DEPDIR)/$*.Po\"; else rm -f \"$(DEPDIR)/$*.Tpo\"; exit 1; fi\n#\tsource='$<' object='$@' libtool=no \\\n#\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \\\n#\t$(COMPILE) -c `$(CYGPATH_W) '$<'`\n\n.c.lo:\n\tif $(LTCOMPILE) -MT $@ -MD -MP -MF \"$(DEPDIR)/$*.Tpo\" -c -o $@ $<; \\\n\tthen mv -f \"$(DEPDIR)/$*.Tpo\" \"$(DEPDIR)/$*.Plo\"; else rm -f \"$(DEPDIR)/$*.Tpo\"; exit 1; fi\n#\tsource='$<' object='$@' libtool=yes \\\n#\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \\\n#\t$(LTCOMPILE) -c -o $@ $<\n\nmostlyclean-libtool:\n\t-rm -f *.lo\n\nclean-libtool:\n\t-rm -rf .libs _libs\n\ndistclean-libtool:\n\t-rm -f libtool\nuninstall-info-am:\n\nID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)\n\tlist='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \\\n\tunique=`for i in $$list; do \\\n\t    if test -f \"$$i\"; then echo $$i; else echo $(srcdir)/$$i; fi; \\\n\t  done | \\\n\t  $(AWK) '    { files[$$0] = 1; } \\\n\t       END { for (i in files) print i; }'`; \\\n\tmkid -fID $$unique\ntags: TAGS\n\nTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \\\n\t\t$(TAGS_FILES) $(LISP)\n\ttags=; \\\n\there=`pwd`; \\\n\tlist='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \\\n\tunique=`for i in $$list; do \\\n\t    if test -f \"$$i\"; then echo $$i; else echo $(srcdir)/$$i; fi; \\\n\t  done | \\\n\t  $(AWK) '    { files[$$0] = 1; } \\\n\t       END { for (i in files) print i; }'`; \\\n\tif test -z \"$(ETAGS_ARGS)$$tags$$unique\"; then :; else \\\n\t  test -n \"$$unique\" || unique=$$empty_fix; \\\n\t  $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \\\n\t    $$tags $$unique; \\\n\tfi\nctags: CTAGS\nCTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \\\n\t\t$(TAGS_FILES) $(LISP)\n\ttags=; \\\n\there=`pwd`; \\\n\tlist='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \\\n\tunique=`for i in $$list; do \\\n\t    if test -f \"$$i\"; then echo $$i; else echo $(srcdir)/$$i; fi; \\\n\t  done | \\\n\t  $(AWK) '    { files[$$0] = 1; } \\\n\t       END { for (i in files) print i; }'`; \\\n\ttest -z \"$(CTAGS_ARGS)$$tags$$unique\" \\\n\t  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \\\n\t     $$tags $$unique\n\nGTAGS:\n\there=`$(am__cd) $(top_builddir) && pwd` \\\n\t  && cd $(top_srcdir) \\\n\t  && gtags -i $(GTAGS_ARGS) $$here\n\ndistclean-tags:\n\t-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags\n\ndistdir: $(DISTFILES)\n\t@srcdirstrip=`echo \"$(srcdir)\" | sed 's|.|.|g'`; \\\n\ttopsrcdirstrip=`echo \"$(top_srcdir)\" | sed 's|.|.|g'`; \\\n\tlist='$(DISTFILES)'; for file in $$list; do \\\n\t  case $$file in \\\n\t    $(srcdir)/*) file=`echo \"$$file\" | sed \"s|^$$srcdirstrip/||\"`;; \\\n\t    $(top_srcdir)/*) file=`echo \"$$file\" | sed \"s|^$$topsrcdirstrip/|$(top_builddir)/|\"`;; \\\n\t  esac; \\\n\t  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \\\n\t  dir=`echo \"$$file\" | sed -e 's,/[^/]*$$,,'`; \\\n\t  if test \"$$dir\" != \"$$file\" && test \"$$dir\" != \".\"; then \\\n\t    dir=\"/$$dir\"; \\\n\t    $(mkdir_p) \"$(distdir)$$dir\"; \\\n\t  else \\\n\t    dir=''; \\\n\t  fi; \\\n\t  if test -d $$d/$$file; then \\\n\t    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \\\n\t      cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \\\n\t    fi; \\\n\t    cp -pR $$d/$$file $(distdir)$$dir || exit 1; \\\n\t  else \\\n\t    test -f $(distdir)/$$file \\\n\t    || cp -p $$d/$$file $(distdir)/$$file \\\n\t    || exit 1; \\\n\t  fi; \\\n\tdone\ncheck-am: all-am\ncheck: check-am\nall-am: Makefile $(LTLIBRARIES) $(HEADERS)\ninstalldirs:\ninstall: install-am\ninstall-exec: install-exec-am\ninstall-data: install-data-am\nuninstall: uninstall-am\n\ninstall-am: all-am\n\t@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am\n\ninstallcheck: installcheck-am\ninstall-strip:\n\t$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM=\"$(INSTALL_STRIP_PROGRAM)\" \\\n\t  install_sh_PROGRAM=\"$(INSTALL_STRIP_PROGRAM)\" INSTALL_STRIP_FLAG=-s \\\n\t  `test -z '$(STRIP)' || \\\n\t    echo \"INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'\"` install\nmostlyclean-generic:\n\nclean-generic:\n\ndistclean-generic:\n\t-test -z \"$(CONFIG_CLEAN_FILES)\" || rm -f $(CONFIG_CLEAN_FILES)\n\nmaintainer-clean-generic:\n\t@echo \"This command is intended for maintainers to use\"\n\t@echo \"it deletes files that may require special tools to rebuild.\"\nclean: clean-am\n\nclean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \\\n\tmostlyclean-am\n\ndistclean: distclean-am\n\t-rm -rf ./$(DEPDIR)\n\t-rm -f Makefile\ndistclean-am: clean-am distclean-compile distclean-generic \\\n\tdistclean-libtool distclean-tags\n\ndvi: dvi-am\n\ndvi-am:\n\nhtml: html-am\n\ninfo: info-am\n\ninfo-am:\n\ninstall-data-am:\n\ninstall-exec-am:\n\ninstall-info: install-info-am\n\ninstall-man:\n\ninstallcheck-am:\n\nmaintainer-clean: maintainer-clean-am\n\t-rm -rf ./$(DEPDIR)\n\t-rm -f Makefile\nmaintainer-clean-am: distclean-am maintainer-clean-generic\n\nmostlyclean: mostlyclean-am\n\nmostlyclean-am: mostlyclean-compile mostlyclean-generic \\\n\tmostlyclean-libtool\n\npdf: pdf-am\n\npdf-am:\n\nps: ps-am\n\nps-am:\n\nuninstall-am: uninstall-info-am\n\n.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \\\n\tclean-libtool clean-noinstLTLIBRARIES ctags distclean \\\n\tdistclean-compile distclean-generic distclean-libtool \\\n\tdistclean-tags distdir dvi dvi-am html html-am info info-am \\\n\tinstall install-am install-data install-data-am install-exec \\\n\tinstall-exec-am install-info install-info-am install-man \\\n\tinstall-strip installcheck installcheck-am installdirs \\\n\tmaintainer-clean maintainer-clean-generic mostlyclean \\\n\tmostlyclean-compile mostlyclean-generic mostlyclean-libtool \\\n\tpdf pdf-am ps ps-am tags uninstall uninstall-am \\\n\tuninstall-info-am\n\n# Tell versions [3.59,3.63) of GNU make to not export all variables.\n# Otherwise a system limit (for SysV at least) may be exceeded.\n.NOEXPORT:\n"
  },
  {
    "path": "experimental/neatogen/Makefile.am",
    "content": "## Process this file with automake to produce Makefile.in\n\nAM_CPPFLAGS = \\\n        -I$(top_srcdir) \\\n        -I$(top_srcdir)/lib/common \\\n        -I$(top_srcdir)/lib/gvc \\\n        -I$(top_srcdir)/lib/pack \\\n        -I$(top_srcdir)/lib/pathplan \\\n        -I$(top_srcdir)/lib/graph \\\n        -I$(top_srcdir)/lib/cdt \\\n\t-I$(top_srcdir)/lib/libvpsc\n\nnoinst_HEADERS = adjust.h edges.h geometry.h heap.h hedges.h info.h mem.h \\\n\tneato.h poly.h neatoprocs.h simple.h site.h voronoi.h \\\n\tbfs.h closest.h conjgrad.h defs.h dijkstra.h embed_graph.h kkutils.h \\\n\tmatrix_ops.h pca.h stress.h quad_prog_solver.h digcola.h \\\n\tquad_prog_vpsc.h mosek_quad_solve.h\nnoinst_LTLIBRARIES = libneatogen.la\n\nlibneatogen_la_SOURCES = adjust.c circuit.c edges.c find_ints.c geometry.c \\\n\theap.c hedges.c info.c neatoinit.c intersect.c legal.c lu.c matinv.c \\\n\tmemory.c poly.c printvis.c site.c solve.c neatosplines.c stuff.c \\\n\tvoronoi.c stress.c kkutils.c matrix_ops.c embed_graph.c dijkstra.c \\\n\tconjgrad.c pca.c closest.c bfs.c constraint.c quad_prog_solve.c \\\n\tsmart_ini_x.c constrained_majorization.c opt_arrangement.c \\\n\tcompute_hierarchy.c \\\n\tquad_prog_vpsc.c constrained_majorization_vsep.c \\\n\tmosek_quad_solve.c\n\nEXTRA_DIST = Makefile.old\n"
  },
  {
    "path": "experimental/neatogen/Makefile.in",
    "content": "# Makefile.in generated by automake 1.9.5 from Makefile.am.\n# @configure_input@\n\n# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,\n# 2003, 2004, 2005  Free Software Foundation, Inc.\n# This Makefile.in is free software; the Free Software Foundation\n# gives unlimited permission to copy and/or distribute it,\n# with or without modifications, as long as this notice is preserved.\n\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY, to the extent permitted by law; without\n# even the implied warranty of MERCHANTABILITY or FITNESS FOR A\n# PARTICULAR PURPOSE.\n\n@SET_MAKE@\n\n\nSOURCES = $(libneatogen_la_SOURCES)\n\nsrcdir = @srcdir@\ntop_srcdir = @top_srcdir@\nVPATH = @srcdir@\npkgdatadir = $(datadir)/@PACKAGE@\npkglibdir = $(libdir)/@PACKAGE@\npkgincludedir = $(includedir)/@PACKAGE@\ntop_builddir = ../..\nam__cd = CDPATH=\"$${ZSH_VERSION+.}$(PATH_SEPARATOR)\" && cd\nINSTALL = @INSTALL@\ninstall_sh_DATA = $(install_sh) -c -m 644\ninstall_sh_PROGRAM = $(install_sh) -c\ninstall_sh_SCRIPT = $(install_sh) -c\nINSTALL_HEADER = $(INSTALL_DATA)\ntransform = $(program_transform_name)\nNORMAL_INSTALL = :\nPRE_INSTALL = :\nPOST_INSTALL = :\nNORMAL_UNINSTALL = :\nPRE_UNINSTALL = :\nPOST_UNINSTALL = :\nbuild_triplet = @build@\nhost_triplet = @host@\nsubdir = lib/neatogen\nDIST_COMMON = $(noinst_HEADERS) $(srcdir)/Makefile.am \\\n\t$(srcdir)/Makefile.in\nACLOCAL_M4 = $(top_srcdir)/aclocal.m4\nam__aclocal_m4_deps = $(top_srcdir)/configure.ac\nam__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \\\n\t$(ACLOCAL_M4)\nmkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs\nCONFIG_HEADER = $(top_builddir)/config.h\nCONFIG_CLEAN_FILES =\nLTLIBRARIES = $(noinst_LTLIBRARIES)\nlibneatogen_la_LIBADD =\nam_libneatogen_la_OBJECTS = adjust.lo circuit.lo edges.lo find_ints.lo \\\n\tgeometry.lo heap.lo hedges.lo info.lo neatoinit.lo \\\n\tintersect.lo legal.lo lu.lo matinv.lo memory.lo poly.lo \\\n\tprintvis.lo site.lo solve.lo neatosplines.lo stuff.lo \\\n\tvoronoi.lo stress.lo kkutils.lo matrix_ops.lo embed_graph.lo \\\n\tdijkstra.lo conjgrad.lo pca.lo closest.lo bfs.lo constraint.lo \\\n\tquad_prog_solve.lo smart_ini_x.lo constrained_majorization.lo \\\n\topt_arrangement.lo compute_hierarchy.lo quad_prog_vpsc.lo \\\n\tconstrained_majorization_vsep.lo mosek_quad_solve.lo\nlibneatogen_la_OBJECTS = $(am_libneatogen_la_OBJECTS)\nDEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)\ndepcomp = $(SHELL) $(top_srcdir)/config/depcomp\nam__depfiles_maybe = depfiles\nCOMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \\\n\t$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)\nLTCOMPILE = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) \\\n\t$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \\\n\t$(AM_CFLAGS) $(CFLAGS)\nCCLD = $(CC)\nLINK = $(LIBTOOL) --tag=CC --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \\\n\t$(AM_LDFLAGS) $(LDFLAGS) -o $@\nSOURCES = $(libneatogen_la_SOURCES)\nDIST_SOURCES = $(libneatogen_la_SOURCES)\nHEADERS = $(noinst_HEADERS)\nETAGS = etags\nCTAGS = ctags\nDISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)\nACLOCAL = @ACLOCAL@\nALLOCA = @ALLOCA@\nAMDEP_FALSE = @AMDEP_FALSE@\nAMDEP_TRUE = @AMDEP_TRUE@\nAMTAR = @AMTAR@\nAR = @AR@\nAUTOCONF = @AUTOCONF@\nAUTOHEADER = @AUTOHEADER@\nAUTOMAKE = @AUTOMAKE@\nAWK = @AWK@\nBUILDDATE = @BUILDDATE@\nBUILD_DIR = @BUILD_DIR@\nCC = @CC@\nCCDEPMODE = @CCDEPMODE@\nCFLAGS = @CFLAGS@\nCPP = @CPP@\nCPPFLAGS = @CPPFLAGS@\nCXX = @CXX@\nCXXCPP = @CXXCPP@\nCXXDEPMODE = @CXXDEPMODE@\nCXXFLAGS = @CXXFLAGS@\nCYGPATH_W = @CYGPATH_W@\nCYGWIN = @CYGWIN@\nDARWIN = @DARWIN@\nDEFS = @DEFS@\nDEPDIR = @DEPDIR@\nDISABLE_CODEGENS_FALSE = @DISABLE_CODEGENS_FALSE@\nDISABLE_CODEGENS_TRUE = @DISABLE_CODEGENS_TRUE@\nDISABLE_LTDL_FALSE = @DISABLE_LTDL_FALSE@\nDISABLE_LTDL_TRUE = @DISABLE_LTDL_TRUE@\nECHO = @ECHO@\nECHO_C = @ECHO_C@\nECHO_N = @ECHO_N@\nECHO_T = @ECHO_T@\nEGREP = @EGREP@\nENABLE_STATIC_FALSE = @ENABLE_STATIC_FALSE@\nENABLE_STATIC_TRUE = @ENABLE_STATIC_TRUE@\nEXEEXT = @EXEEXT@\nEXPAT_CONFIG = @EXPAT_CONFIG@\nEXPAT_INCLUDES = @EXPAT_INCLUDES@\nEXPAT_LIBS = @EXPAT_LIBS@\nF77 = @F77@\nFC_INCLUDES = @FC_INCLUDES@\nFC_LIBS = @FC_LIBS@\nFFLAGS = @FFLAGS@\nFONTCONFIG_CFLAGS = @FONTCONFIG_CFLAGS@\nFONTCONFIG_CONFIG = @FONTCONFIG_CONFIG@\nFONTCONFIG_LIBS = @FONTCONFIG_LIBS@\nFREETYPE_CONFIG = @FREETYPE_CONFIG@\nFT_INCLUDES = @FT_INCLUDES@\nFT_LIBS = @FT_LIBS@\nGDLIB_CONFIG = @GDLIB_CONFIG@\nGD_INCLUDES = @GD_INCLUDES@\nGD_LIBS = @GD_LIBS@\nGUILE = @GUILE@\nGUILE_INCLUDES = @GUILE_INCLUDES@\nGUILE_LIBS = @GUILE_LIBS@\nGVPLUGIN_VERSION = @GVPLUGIN_VERSION@\nHAVE_TCL = @HAVE_TCL@\nHAVE_TK = @HAVE_TK@\nICONV_INCLUDES = @ICONV_INCLUDES@\nICONV_LIBS = @ICONV_LIBS@\nINCLTDL = @INCLTDL@\nINSTALL_DATA = @INSTALL_DATA@\nINSTALL_PROGRAM = @INSTALL_PROGRAM@\nINSTALL_SCRIPT = @INSTALL_SCRIPT@\nINSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@\nIO = @IO@\nIO_INCLUDES = @IO_INCLUDES@\nIO_LIBS = @IO_LIBS@\nJAVA = @JAVA@\nJAVA_INCLUDES = @JAVA_INCLUDES@\nJAVA_LIBS = @JAVA_LIBS@\nJPEG_INCLUDES = @JPEG_INCLUDES@\nJPEG_LIBS = @JPEG_LIBS@\nKSH = @KSH@\nLDFLAGS = @LDFLAGS@\nLEX = @LEX@\nLEXLIB = @LEXLIB@\nLEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@\nLIBGEN_LIBS = @LIBGEN_LIBS@\nLIBLTDL = @LIBLTDL@\nLIBOBJS = @LIBOBJS@\nLIBPNG_CONFIG = @LIBPNG_CONFIG@\nLIBS = @LIBS@\nLIBTOOL = @LIBTOOL@\nLN_S = @LN_S@\nLTLIBOBJS = @LTLIBOBJS@\nLUA = @LUA@\nLUA_INCLUDES = @LUA_INCLUDES@\nLUA_LIBS = @LUA_LIBS@\nMAKEINFO = @MAKEINFO@\nMATH_LIBS = @MATH_LIBS@\nMINGW32 = @MINGW32@\nOBJEXT = @OBJEXT@\nOCAML = @OCAML@\nOCAML_INCLUDES = @OCAML_INCLUDES@\nOCAML_LIBS = @OCAML_LIBS@\nPACKAGE = @PACKAGE@\nPACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@\nPACKAGE_NAME = @PACKAGE_NAME@\nPACKAGE_STRING = @PACKAGE_STRING@\nPACKAGE_TARNAME = @PACKAGE_TARNAME@\nPACKAGE_VERSION = @PACKAGE_VERSION@\nPATH_SEPARATOR = @PATH_SEPARATOR@\nPERL = @PERL@\nPERL_INCLUDES = @PERL_INCLUDES@\nPERL_LIBS = @PERL_LIBS@\nPHP = @PHP@\nPHP_INCLUDES = @PHP_INCLUDES@\nPHP_LIBS = @PHP_LIBS@\nPKG_CONFIG = @PKG_CONFIG@\nPNG_INCLUDES = @PNG_INCLUDES@\nPNG_LIBS = @PNG_LIBS@\nPYTHON = @PYTHON@\nPYTHON_INCLUDES = @PYTHON_INCLUDES@\nPYTHON_LIBS = @PYTHON_LIBS@\nRANLIB = @RANLIB@\nRUBY = @RUBY@\nRUBY_INCLUDES = @RUBY_INCLUDES@\nRUBY_LIBS = @RUBY_LIBS@\nSED = @SED@\nSET_MAKE = @SET_MAKE@\nSHARP = @SHARP@\nSHARP_INCLUDES = @SHARP_INCLUDES@\nSHARP_LIBS = @SHARP_LIBS@\nSHELL = @SHELL@\nSOCKET_LIBS = @SOCKET_LIBS@\nSORT = @SORT@\nSTRIP = @STRIP@\nSWIG = @SWIG@\nSWIG_VERSION = @SWIG_VERSION@\nTCLINT_INCLUDES = @TCLINT_INCLUDES@\nTCLSH = @TCLSH@\nTCL_CFLAGS = @TCL_CFLAGS@\nTCL_DEFS = @TCL_DEFS@\nTCL_INCLUDES = @TCL_INCLUDES@\nTCL_LIBS = @TCL_LIBS@\nTCL_MAJOR_VERSION = @TCL_MAJOR_VERSION@\nTCL_MINOR_VERSION = @TCL_MINOR_VERSION@\nTCL_PATCH_LEVEL = @TCL_PATCH_LEVEL@\nTCL_PKGINDEX = @TCL_PKGINDEX@\nTCL_SHLIB_SUFFIX = @TCL_SHLIB_SUFFIX@\nTCL_SRC_DIR = @TCL_SRC_DIR@\nTCL_STUB_LIB_SPEC = @TCL_STUB_LIB_SPEC@\nTCL_VERSION = @TCL_VERSION@\nTKINT_INCLUDES = @TKINT_INCLUDES@\nTK_CFLAGS = @TK_CFLAGS@\nTK_DEFS = @TK_DEFS@\nTK_INCLUDES = @TK_INCLUDES@\nTK_LIB_SPEC = @TK_LIB_SPEC@\nTK_MAJOR_VERSION = @TK_MAJOR_VERSION@\nTK_MINOR_VERSION = @TK_MINOR_VERSION@\nTK_PATCH_LEVEL = @TK_PATCH_LEVEL@\nTK_PKGINDEX = @TK_PKGINDEX@\nTK_SRC_DIR = @TK_SRC_DIR@\nTK_STUB_LIB_SPEC = @TK_STUB_LIB_SPEC@\nTK_VERSION = @TK_VERSION@\nTK_XINCLUDES = @TK_XINCLUDES@\nTOP_DIR = @TOP_DIR@\nVERSION = @VERSION@\nVERSION_INFO = @VERSION_INFO@\nWISH = @WISH@\nWITH_GUILE_FALSE = @WITH_GUILE_FALSE@\nWITH_GUILE_TRUE = @WITH_GUILE_TRUE@\nWITH_IO_FALSE = @WITH_IO_FALSE@\nWITH_IO_TRUE = @WITH_IO_TRUE@\nWITH_JAVA_FALSE = @WITH_JAVA_FALSE@\nWITH_JAVA_TRUE = @WITH_JAVA_TRUE@\nWITH_LUA_FALSE = @WITH_LUA_FALSE@\nWITH_LUA_TRUE = @WITH_LUA_TRUE@\nWITH_MYLIBGD_FALSE = @WITH_MYLIBGD_FALSE@\nWITH_MYLIBGD_TRUE = @WITH_MYLIBGD_TRUE@\nWITH_OCAML_FALSE = @WITH_OCAML_FALSE@\nWITH_OCAML_TRUE = @WITH_OCAML_TRUE@\nWITH_PERL_FALSE = @WITH_PERL_FALSE@\nWITH_PERL_TRUE = @WITH_PERL_TRUE@\nWITH_PHP_FALSE = @WITH_PHP_FALSE@\nWITH_PHP_TRUE = @WITH_PHP_TRUE@\nWITH_PYTHON_FALSE = @WITH_PYTHON_FALSE@\nWITH_PYTHON_TRUE = @WITH_PYTHON_TRUE@\nWITH_RUBY_FALSE = @WITH_RUBY_FALSE@\nWITH_RUBY_TRUE = @WITH_RUBY_TRUE@\nWITH_SHARP_FALSE = @WITH_SHARP_FALSE@\nWITH_SHARP_TRUE = @WITH_SHARP_TRUE@\nWITH_SWIG_FALSE = @WITH_SWIG_FALSE@\nWITH_SWIG_TRUE = @WITH_SWIG_TRUE@\nWITH_TCL_FALSE = @WITH_TCL_FALSE@\nWITH_TCL_TRUE = @WITH_TCL_TRUE@\nWITH_TK_FALSE = @WITH_TK_FALSE@\nWITH_TK_TRUE = @WITH_TK_TRUE@\nWITH_X_FALSE = @WITH_X_FALSE@\nWITH_X_TRUE = @WITH_X_TRUE@\nXAW_INCLUDES = @XAW_INCLUDES@\nXAW_LIBS = @XAW_LIBS@\nXPM_INCLUDES = @XPM_INCLUDES@\nXPM_LIBS = @XPM_LIBS@\nX_CFLAGS = @X_CFLAGS@\nX_EXTRA_LIBS = @X_EXTRA_LIBS@\nX_LIBS = @X_LIBS@\nX_PRE_LIBS = @X_PRE_LIBS@\nYACC = @YACC@\nZ_INCLUDES = @Z_INCLUDES@\nZ_LIBS = @Z_LIBS@\nac_ct_AR = @ac_ct_AR@\nac_ct_CC = @ac_ct_CC@\nac_ct_CXX = @ac_ct_CXX@\nac_ct_F77 = @ac_ct_F77@\nac_ct_RANLIB = @ac_ct_RANLIB@\nac_ct_STRIP = @ac_ct_STRIP@\nac_pt_PKG_CONFIG = @ac_pt_PKG_CONFIG@\nam__fastdepCC_FALSE = @am__fastdepCC_FALSE@\nam__fastdepCC_TRUE = @am__fastdepCC_TRUE@\nam__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@\nam__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@\nam__include = @am__include@\nam__leading_dot = @am__leading_dot@\nam__quote = @am__quote@\nam__tar = @am__tar@\nam__untar = @am__untar@\nbindir = @bindir@\nbuild = @build@\nbuild_alias = @build_alias@\nbuild_cpu = @build_cpu@\nbuild_os = @build_os@\nbuild_vendor = @build_vendor@\ndatadir = @datadir@\nexec_prefix = @exec_prefix@\nhost = @host@\nhost_alias = @host_alias@\nhost_cpu = @host_cpu@\nhost_os = @host_os@\nhost_vendor = @host_vendor@\nincludedir = @includedir@\ninfodir = @infodir@\ninstall_sh = @install_sh@\nlibdir = @libdir@\nlibexecdir = @libexecdir@\nlocalstatedir = @localstatedir@\nmandir = @mandir@\nmkdir_p = @mkdir_p@\noldincludedir = @oldincludedir@\nprefix = @prefix@\nprogram_transform_name = @program_transform_name@\nsbindir = @sbindir@\nsharedstatedir = @sharedstatedir@\nsubdirs = @subdirs@\nsysconfdir = @sysconfdir@\ntarget_alias = @target_alias@\nAM_CPPFLAGS = \\\n        -I$(top_srcdir) \\\n        -I$(top_srcdir)/lib/common \\\n        -I$(top_srcdir)/lib/gvc \\\n        -I$(top_srcdir)/lib/pack \\\n        -I$(top_srcdir)/lib/pathplan \\\n        -I$(top_srcdir)/lib/graph \\\n        -I$(top_srcdir)/lib/cdt \\\n\t-I$(top_srcdir)/lib/libvpsc\n\nnoinst_HEADERS = adjust.h edges.h geometry.h heap.h hedges.h info.h mem.h \\\n\tneato.h poly.h neatoprocs.h simple.h site.h voronoi.h \\\n\tbfs.h closest.h conjgrad.h defs.h dijkstra.h embed_graph.h kkutils.h \\\n\tmatrix_ops.h pca.h stress.h quad_prog_solver.h digcola.h \\\n\tquad_prog_vpsc.h mosek_quad_solve.h\n\nnoinst_LTLIBRARIES = libneatogen.la\nlibneatogen_la_SOURCES = adjust.c circuit.c edges.c find_ints.c geometry.c \\\n\theap.c hedges.c info.c neatoinit.c intersect.c legal.c lu.c matinv.c \\\n\tmemory.c poly.c printvis.c site.c solve.c neatosplines.c stuff.c \\\n\tvoronoi.c stress.c kkutils.c matrix_ops.c embed_graph.c dijkstra.c \\\n\tconjgrad.c pca.c closest.c bfs.c constraint.c quad_prog_solve.c \\\n\tsmart_ini_x.c constrained_majorization.c opt_arrangement.c \\\n\tcompute_hierarchy.c \\\n\tquad_prog_vpsc.c constrained_majorization_vsep.c \\\n\tmosek_quad_solve.c\n\nEXTRA_DIST = Makefile.old\nall: all-am\n\n.SUFFIXES:\n.SUFFIXES: .c .lo .o .obj\n$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)\n\t@for dep in $?; do \\\n\t  case '$(am__configure_deps)' in \\\n\t    *$$dep*) \\\n\t      cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \\\n\t\t&& exit 0; \\\n\t      exit 1;; \\\n\t  esac; \\\n\tdone; \\\n\techo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  lib/neatogen/Makefile'; \\\n\tcd $(top_srcdir) && \\\n\t  $(AUTOMAKE) --gnu  lib/neatogen/Makefile\n.PRECIOUS: Makefile\nMakefile: $(srcdir)/Makefile.in $(top_builddir)/config.status\n\t@case '$?' in \\\n\t  *config.status*) \\\n\t    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \\\n\t  *) \\\n\t    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \\\n\t    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \\\n\tesac;\n\n$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)\n\tcd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh\n\n$(top_srcdir)/configure:  $(am__configure_deps)\n\tcd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh\n$(ACLOCAL_M4):  $(am__aclocal_m4_deps)\n\tcd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh\n\nclean-noinstLTLIBRARIES:\n\t-test -z \"$(noinst_LTLIBRARIES)\" || rm -f $(noinst_LTLIBRARIES)\n\t@list='$(noinst_LTLIBRARIES)'; for p in $$list; do \\\n\t  dir=\"`echo $$p | sed -e 's|/[^/]*$$||'`\"; \\\n\t  test \"$$dir\" != \"$$p\" || dir=.; \\\n\t  echo \"rm -f \\\"$${dir}/so_locations\\\"\"; \\\n\t  rm -f \"$${dir}/so_locations\"; \\\n\tdone\nlibneatogen.la: $(libneatogen_la_OBJECTS) $(libneatogen_la_DEPENDENCIES) \n\t$(LINK)  $(libneatogen_la_LDFLAGS) $(libneatogen_la_OBJECTS) $(libneatogen_la_LIBADD) $(LIBS)\n\nmostlyclean-compile:\n\t-rm -f *.$(OBJEXT)\n\ndistclean-compile:\n\t-rm -f *.tab.c\n\n@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/adjust.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bfs.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/circuit.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/closest.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/compute_hierarchy.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/conjgrad.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/constrained_majorization.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/constrained_majorization_vsep.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/constraint.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dijkstra.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/edges.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/embed_graph.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/find_ints.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/geometry.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/heap.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hedges.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/info.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/intersect.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/kkutils.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/legal.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lu.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/matinv.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/matrix_ops.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/memory.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mosek_quad_solve.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/neatoinit.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/neatosplines.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/opt_arrangement.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pca.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/poly.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/printvis.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/quad_prog_solve.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/quad_prog_vpsc.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/site.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/smart_ini_x.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/solve.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stress.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stuff.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/voronoi.Plo@am__quote@\n\n.c.o:\n@am__fastdepCC_TRUE@\tif $(COMPILE) -MT $@ -MD -MP -MF \"$(DEPDIR)/$*.Tpo\" -c -o $@ $<; \\\n@am__fastdepCC_TRUE@\tthen mv -f \"$(DEPDIR)/$*.Tpo\" \"$(DEPDIR)/$*.Po\"; else rm -f \"$(DEPDIR)/$*.Tpo\"; exit 1; fi\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tsource='$<' object='$@' libtool=no @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(COMPILE) -c $<\n\n.c.obj:\n@am__fastdepCC_TRUE@\tif $(COMPILE) -MT $@ -MD -MP -MF \"$(DEPDIR)/$*.Tpo\" -c -o $@ `$(CYGPATH_W) '$<'`; \\\n@am__fastdepCC_TRUE@\tthen mv -f \"$(DEPDIR)/$*.Tpo\" \"$(DEPDIR)/$*.Po\"; else rm -f \"$(DEPDIR)/$*.Tpo\"; exit 1; fi\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tsource='$<' object='$@' libtool=no @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(COMPILE) -c `$(CYGPATH_W) '$<'`\n\n.c.lo:\n@am__fastdepCC_TRUE@\tif $(LTCOMPILE) -MT $@ -MD -MP -MF \"$(DEPDIR)/$*.Tpo\" -c -o $@ $<; \\\n@am__fastdepCC_TRUE@\tthen mv -f \"$(DEPDIR)/$*.Tpo\" \"$(DEPDIR)/$*.Plo\"; else rm -f \"$(DEPDIR)/$*.Tpo\"; exit 1; fi\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tsource='$<' object='$@' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(LTCOMPILE) -c -o $@ $<\n\nmostlyclean-libtool:\n\t-rm -f *.lo\n\nclean-libtool:\n\t-rm -rf .libs _libs\n\ndistclean-libtool:\n\t-rm -f libtool\nuninstall-info-am:\n\nID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)\n\tlist='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \\\n\tunique=`for i in $$list; do \\\n\t    if test -f \"$$i\"; then echo $$i; else echo $(srcdir)/$$i; fi; \\\n\t  done | \\\n\t  $(AWK) '    { files[$$0] = 1; } \\\n\t       END { for (i in files) print i; }'`; \\\n\tmkid -fID $$unique\ntags: TAGS\n\nTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \\\n\t\t$(TAGS_FILES) $(LISP)\n\ttags=; \\\n\there=`pwd`; \\\n\tlist='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \\\n\tunique=`for i in $$list; do \\\n\t    if test -f \"$$i\"; then echo $$i; else echo $(srcdir)/$$i; fi; \\\n\t  done | \\\n\t  $(AWK) '    { files[$$0] = 1; } \\\n\t       END { for (i in files) print i; }'`; \\\n\tif test -z \"$(ETAGS_ARGS)$$tags$$unique\"; then :; else \\\n\t  test -n \"$$unique\" || unique=$$empty_fix; \\\n\t  $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \\\n\t    $$tags $$unique; \\\n\tfi\nctags: CTAGS\nCTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \\\n\t\t$(TAGS_FILES) $(LISP)\n\ttags=; \\\n\there=`pwd`; \\\n\tlist='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \\\n\tunique=`for i in $$list; do \\\n\t    if test -f \"$$i\"; then echo $$i; else echo $(srcdir)/$$i; fi; \\\n\t  done | \\\n\t  $(AWK) '    { files[$$0] = 1; } \\\n\t       END { for (i in files) print i; }'`; \\\n\ttest -z \"$(CTAGS_ARGS)$$tags$$unique\" \\\n\t  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \\\n\t     $$tags $$unique\n\nGTAGS:\n\there=`$(am__cd) $(top_builddir) && pwd` \\\n\t  && cd $(top_srcdir) \\\n\t  && gtags -i $(GTAGS_ARGS) $$here\n\ndistclean-tags:\n\t-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags\n\ndistdir: $(DISTFILES)\n\t@srcdirstrip=`echo \"$(srcdir)\" | sed 's|.|.|g'`; \\\n\ttopsrcdirstrip=`echo \"$(top_srcdir)\" | sed 's|.|.|g'`; \\\n\tlist='$(DISTFILES)'; for file in $$list; do \\\n\t  case $$file in \\\n\t    $(srcdir)/*) file=`echo \"$$file\" | sed \"s|^$$srcdirstrip/||\"`;; \\\n\t    $(top_srcdir)/*) file=`echo \"$$file\" | sed \"s|^$$topsrcdirstrip/|$(top_builddir)/|\"`;; \\\n\t  esac; \\\n\t  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \\\n\t  dir=`echo \"$$file\" | sed -e 's,/[^/]*$$,,'`; \\\n\t  if test \"$$dir\" != \"$$file\" && test \"$$dir\" != \".\"; then \\\n\t    dir=\"/$$dir\"; \\\n\t    $(mkdir_p) \"$(distdir)$$dir\"; \\\n\t  else \\\n\t    dir=''; \\\n\t  fi; \\\n\t  if test -d $$d/$$file; then \\\n\t    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \\\n\t      cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \\\n\t    fi; \\\n\t    cp -pR $$d/$$file $(distdir)$$dir || exit 1; \\\n\t  else \\\n\t    test -f $(distdir)/$$file \\\n\t    || cp -p $$d/$$file $(distdir)/$$file \\\n\t    || exit 1; \\\n\t  fi; \\\n\tdone\ncheck-am: all-am\ncheck: check-am\nall-am: Makefile $(LTLIBRARIES) $(HEADERS)\ninstalldirs:\ninstall: install-am\ninstall-exec: install-exec-am\ninstall-data: install-data-am\nuninstall: uninstall-am\n\ninstall-am: all-am\n\t@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am\n\ninstallcheck: installcheck-am\ninstall-strip:\n\t$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM=\"$(INSTALL_STRIP_PROGRAM)\" \\\n\t  install_sh_PROGRAM=\"$(INSTALL_STRIP_PROGRAM)\" INSTALL_STRIP_FLAG=-s \\\n\t  `test -z '$(STRIP)' || \\\n\t    echo \"INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'\"` install\nmostlyclean-generic:\n\nclean-generic:\n\ndistclean-generic:\n\t-test -z \"$(CONFIG_CLEAN_FILES)\" || rm -f $(CONFIG_CLEAN_FILES)\n\nmaintainer-clean-generic:\n\t@echo \"This command is intended for maintainers to use\"\n\t@echo \"it deletes files that may require special tools to rebuild.\"\nclean: clean-am\n\nclean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \\\n\tmostlyclean-am\n\ndistclean: distclean-am\n\t-rm -rf ./$(DEPDIR)\n\t-rm -f Makefile\ndistclean-am: clean-am distclean-compile distclean-generic \\\n\tdistclean-libtool distclean-tags\n\ndvi: dvi-am\n\ndvi-am:\n\nhtml: html-am\n\ninfo: info-am\n\ninfo-am:\n\ninstall-data-am:\n\ninstall-exec-am:\n\ninstall-info: install-info-am\n\ninstall-man:\n\ninstallcheck-am:\n\nmaintainer-clean: maintainer-clean-am\n\t-rm -rf ./$(DEPDIR)\n\t-rm -f Makefile\nmaintainer-clean-am: distclean-am maintainer-clean-generic\n\nmostlyclean: mostlyclean-am\n\nmostlyclean-am: mostlyclean-compile mostlyclean-generic \\\n\tmostlyclean-libtool\n\npdf: pdf-am\n\npdf-am:\n\nps: ps-am\n\nps-am:\n\nuninstall-am: uninstall-info-am\n\n.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \\\n\tclean-libtool clean-noinstLTLIBRARIES ctags distclean \\\n\tdistclean-compile distclean-generic distclean-libtool \\\n\tdistclean-tags distdir dvi dvi-am html html-am info info-am \\\n\tinstall install-am install-data install-data-am install-exec \\\n\tinstall-exec-am install-info install-info-am install-man \\\n\tinstall-strip installcheck installcheck-am installdirs \\\n\tmaintainer-clean maintainer-clean-generic mostlyclean \\\n\tmostlyclean-compile mostlyclean-generic mostlyclean-libtool \\\n\tpdf pdf-am ps ps-am tags uninstall uninstall-am \\\n\tuninstall-info-am\n\n# Tell versions [3.59,3.63) of GNU make to not export all variables.\n# Otherwise a system limit (for SysV at least) may be exceeded.\n.NOEXPORT:\n"
  },
  {
    "path": "experimental/neatogen/Makefile.old",
    "content": "all:\tlibneatogen.a\nROOT=../..\ninclude $(ROOT)/Config.mk\ninclude $(ROOT)/makearch/$(ARCH)\n\nINCS =  -I. -I$(ROOT) \\\n        -I../common \\\n        -I../pack \\\n        -I../gvc \\\n        -I../cdt \\\n        -I../pathplan \\\n\t\t-I../gd \\\n\t\t-I../graph\n\nDEFINES = -DHAVE_CONFIG_H\n\nHDRS = adjust.h edges.h geometry.h heap.h hedges.h info.h mem.h \\\n       neato.h neatoprocs.h poly.h simple.h site.h voronoi.h\n\nNOBJS  = stress.o kkutils.o pca.o matrix_ops.o embed_graph.o dijkstra.o \\\n       conjgrad.o closest.o bfs.o compute_hierarchy.o opt_arrangement.o \\\n       smart_ini_x.o constrained_majorization.o quad_prog_solve.o\nOBJS = adjust.o circuit.o edges.o find_ints.o geometry.o heap.o hedges.o \\\n       info.o neatoinit.o intersect.o legal.o lu.o matinv.o memory.o poly.o \\\n       printvis.o site.o solve.o neatosplines.o stuff.o voronoi.o \\\n       $(NOBJS) constraint.o\n\nlibneatogen.a : $(OBJS)\n\t$(RM) libneatogen.a\n\t$(AR) cr libneatogen.a $(OBJS)\n\t$(RANLIB) libneatogen.a\n\n$(NOBJS) : defs.h\nbfs.o dijkstra.o embed_graph.o kkutils.o stress.o : bfs.h\npca.o closest.o : closest.h\nstress.o conjgrad.o : conjgrad.h\ndijkstra.o embed_graph.o kkutils.o stress.o : dijkstra.h\nembed_graph.o stress.o : embed_graph.h\nkkutils.o stress.o closest.o : kkutils.h\nstress.o pca.o conjgrad.o matrix_ops.o : matrix_ops.h\nstress.o pca.o : pca.h\nstress.o : stress.h\n$(OBJS) : ../common/types.h\n\ninstall: libneatogen.a \n\t$(MKPATH) $(INCDIR)\n\t$(INSTALL) neato.h adjust.h neatoprocs.h $(INCDIR)\n\t$(MKPATH) $(LIBDIR)\n\t$(INSTALL) libneatogen.a $(LIBDIR)\n\n$(OBJS) : $(HDRS)\n\nclean:\n\t$(RM) core *.o\n\ndistclean: clean\n\t$(RM) *.a\n"
  },
  {
    "path": "experimental/neatogen/adjust.c",
    "content": "/* $Id: adjust.c,v 1.9 2006/01/29 23:33:14 ellson Exp $ $Revision: 1.9 $ */\n/* vim:set shiftwidth=4 ts=8: */\n\n/**********************************************************\n*      This software is part of the graphviz package      *\n*                http://www.graphviz.org/                 *\n*                                                         *\n*            Copyright (c) 1994-2004 AT&T Corp.           *\n*                and is licensed under the                *\n*            Common Public License, Version 1.0           *\n*                      by AT&T Corp.                      *\n*                                                         *\n*        Information and Software Systems Research        *\n*              AT&T Research, Florham Park NJ             *\n**********************************************************/\n\n/* adjust.c\n * Routines for repositioning nodes after initial layout in\n * order to reduce/remove node overlaps.\n */\n\n#include \"neato.h\"\n#include \"utils.h\"\n#include \"voronoi.h\"\n#include \"info.h\"\n#include \"edges.h\"\n#include \"site.h\"\n#include \"heap.h\"\n#include \"hedges.h\"\n\nstatic double margin = 0.05;\t/* Create initial bounding box by adding\n\t\t\t\t * margin * dimension around box enclosing\n\t\t\t\t * nodes.\n\t\t\t\t */\nstatic double incr = 0.05;\t/* Increase bounding box by adding\n\t\t\t\t * incr * dimension around box.\n\t\t\t\t */\nstatic double pmargin = 5.0 / POINTS_PER_INCH;\t/* Margin around polygons, in inches */\nstatic int iterations = -1;\t/* Number of iterations */\nstatic int useIter = 0;\t\t/* Use specified number of iterations */\n\nstatic int doAll = 0;\t\t/* Move all nodes, regardless of overlap */\nstatic Site **sites;\t\t/* Array of pointers to sites; used in qsort */\nstatic Site **endSite;\t\t/* Sentinel on sites array */\nstatic Point nw, ne, sw, se;\t/* Corners of clipping window */\n\nstatic Site **nextSite;\n\nstatic void setBoundBox(Point * ll, Point * ur)\n{\n    pxmin = ll->x;\n    pxmax = ur->x;\n    pymin = ll->y;\n    pymax = ur->y;\n    nw.x = sw.x = pxmin;\n    ne.x = se.x = pxmax;\n    nw.y = ne.y = pymax;\n    sw.y = se.y = pymin;\n}\n\n /* freeNodes:\n  * Free node resources.\n  */\nstatic void freeNodes(void)\n{\n    int i;\n    Info_t *ip = nodeInfo;\n\n    for (i = 0; i < nsites; i++) {\n\tbreakPoly(&ip->poly);\n\tip++;\n    }\n    polyFree();\n    infoinit();\t\t\t/* Free vertices */\n    free(nodeInfo);\n}\n\n/* chkBoundBox:\n *   Compute extremes of graph, then set up bounding box.\n *   If user supplied a bounding box, use that;\n *   else if \"window\" is a graph attribute, use that; \n *   otherwise, define bounding box as a percentage expansion of\n *   graph extremes.\n *   In the first two cases, check that graph fits in bounding box.\n */\nstatic void chkBoundBox(Agraph_t * graph)\n{\n    char *marg;\n    Point ll, ur;\n    int i;\n    double x, y;\n    double xmin, xmax, ymin, ymax;\n    double xmn, xmx, ymn, ymx;\n    double ydelta, xdelta;\n    Info_t *ip;\n    Poly *pp;\n    /* int          cnt; */\n\n    ip = nodeInfo;\n    pp = &ip->poly;\n    x = ip->site.coord.x;\n    y = ip->site.coord.y;\n    xmin = pp->origin.x + x;\n    ymin = pp->origin.y + y;\n    xmax = pp->corner.x + x;\n    ymax = pp->corner.y + y;\n    for (i = 1; i < nsites; i++) {\n\tip++;\n\tpp = &ip->poly;\n\tx = ip->site.coord.x;\n\ty = ip->site.coord.y;\n\txmn = pp->origin.x + x;\n\tymn = pp->origin.y + y;\n\txmx = pp->corner.x + x;\n\tymx = pp->corner.y + y;\n\tif (xmn < xmin)\n\t    xmin = xmn;\n\tif (ymn < ymin)\n\t    ymin = ymn;\n\tif (xmx > xmax)\n\t    xmax = xmx;\n\tif (ymx > ymax)\n\t    ymax = ymx;\n    }\n\n    marg = agget(graph, \"voro_margin\");\n    if (marg && (*marg != '\\0')) {\n\tmargin = atof(marg);\n    }\n    ydelta = margin * (ymax - ymin);\n    xdelta = margin * (xmax - xmin);\n    ll.x = xmin - xdelta;\n    ll.y = ymin - ydelta;\n    ur.x = xmax + xdelta;\n    ur.y = ymax + ydelta;\n\n    setBoundBox(&ll, &ur);\n}\n\n /* makeInfo:\n  * For each node in the graph, create a Info data structure \n  */\nstatic void makeInfo(Agraph_t * graph)\n{\n    Agnode_t *node;\n    int i;\n    Info_t *ip;\n\n    nsites = agnnodes(graph);\n    geominit();\n\n    nodeInfo = N_GNEW(nsites, Info_t);\n\n    node = agfstnode(graph);\n    ip = nodeInfo;\n\n    pmargin = expFactor (graph);\n    for (i = 0; i < nsites; i++) {\n\tip->site.coord.x = ND_pos(node)[0];\n\tip->site.coord.y = ND_pos(node)[1];\n\n\tmakePoly(&ip->poly, node, pmargin);\n\n\tip->site.sitenbr = i;\n\tip->site.refcnt = 1;\n\tip->node = node;\n\tip->verts = NULL;\n\tnode = agnxtnode(graph, node);\n\tip++;\n    }\n}\n\n/* sort sites on y, then x, coord */\nstatic int scomp(const void *S1, const void *S2)\n{\n    Site *s1, *s2;\n\n    s1 = *(Site **) S1;\n    s2 = *(Site **) S2;\n    if (s1->coord.y < s2->coord.y)\n\treturn (-1);\n    if (s1->coord.y > s2->coord.y)\n\treturn (1);\n    if (s1->coord.x < s2->coord.x)\n\treturn (-1);\n    if (s1->coord.x > s2->coord.x)\n\treturn (1);\n    return (0);\n}\n\n /* sortSites:\n  * Fill array of pointer to sites and sort the sites using scomp\n  */\nstatic void sortSites(void)\n{\n    int i;\n    Site **sp;\n    Info_t *ip;\n\n    if (sites == 0) {\n\tsites = N_GNEW(nsites, Site *);\n\tendSite = sites + nsites;\n    }\n\n    sp = sites;\n    ip = nodeInfo;\n    infoinit();\n    for (i = 0; i < nsites; i++) {\n\t*sp++ = &(ip->site);\n\tip->verts = NULL;\n\tip->site.refcnt = 1;\n\tip++;\n    }\n\n    qsort(sites, nsites, sizeof(Site *), scomp);\n\n    /* Reset site index for nextOne */\n    nextSite = sites;\n\n}\n\nstatic void geomUpdate(int doSort)\n{\n    int i;\n\n    if (doSort)\n\tsortSites();\n\n    /* compute ranges */\n    xmin = sites[0]->coord.x;\n    xmax = sites[0]->coord.x;\n    for (i = 1; i < nsites; i++) {\n\tif (sites[i]->coord.x < xmin)\n\t    xmin = sites[i]->coord.x;\n\tif (sites[i]->coord.x > xmax)\n\t    xmax = sites[i]->coord.x;\n    }\n    ymin = sites[0]->coord.y;\n    ymax = sites[nsites - 1]->coord.y;\n\n    deltay = ymax - ymin;\n    deltax = xmax - xmin;\n}\n\nstatic Site *nextOne(void)\n{\n    Site *s;\n\n    if (nextSite < endSite) {\n\ts = *nextSite++;\n\treturn (s);\n    } else\n\treturn ((Site *) NULL);\n}\n\n/* rmEquality:\n * Check for nodes with identical positions and tweak\n * the positions.\n */\nstatic void rmEquality(void)\n{\n    int i, cnt;\n    Site **ip;\n    Site **jp;\n    Site **kp;\n    double xdel;\n\n    sortSites();\n    ip = sites;\n\n    while (ip < endSite) {\n\tjp = ip + 1;\n\tif ((jp >= endSite) ||\n\t    ((*jp)->coord.x != (*ip)->coord.x) ||\n\t    ((*jp)->coord.y != (*ip)->coord.y)) {\n\t    ip = jp;\n\t    continue;\n\t}\n\n\t/* Find first node kp with position different from ip */\n\tcnt = 2;\n\tkp = jp + 1;\n\twhile ((kp < endSite) &&\n\t       ((*kp)->coord.x == (*ip)->coord.x) &&\n\t       ((*kp)->coord.y == (*ip)->coord.y)) {\n\t    cnt++;\n\t    jp = kp;\n\t    kp = jp + 1;\n\t}\n\n\t/* If next node exists and is on the same line */\n\tif ((kp < endSite) && ((*kp)->coord.y == (*ip)->coord.y)) {\n\t    xdel = ((*kp)->coord.x - (*ip)->coord.x) / cnt;\n\t    i = 1;\n\t    for (jp = ip + 1; jp < kp; jp++) {\n\t\t(*jp)->coord.x += i * xdel;\n\t\ti++;\n\t    }\n\t} else {\t\t/* nothing is to the right */\n\t    Info_t *info;\n\t    for (jp = ip + 1; jp < kp; ip++, jp++) {\n\t\tinfo = nodeInfo + (*ip)->sitenbr;\n\t\txdel = info->poly.corner.x - info->poly.origin.x;\n\t\tinfo = nodeInfo + (*jp)->sitenbr;\n\t\txdel += info->poly.corner.x - info->poly.origin.x;\n\t\t(*jp)->coord.x = (*ip)->coord.x + xdel / 2;\n\t    }\n\t}\n\tip = kp;\n    }\n}\n\n/* countOverlap:\n * Count number of node-node overlaps at iteration iter.\n */\nstatic int countOverlap(int iter)\n{\n    int count = 0;\n    int i, j;\n    Info_t *ip = nodeInfo;\n    Info_t *jp;\n\n    for (i = 0; i < nsites; i++)\n\tnodeInfo[i].overlaps = 0;\n\n    for (i = 0; i < nsites - 1; i++) {\n\tjp = ip + 1;\n\tfor (j = i + 1; j < nsites; j++) {\n\t    if (polyOverlap\n\t\t(ip->site.coord, &ip->poly, jp->site.coord, &jp->poly)) {\n\t\tcount++;\n\t\tip->overlaps = 1;\n\t\tjp->overlaps = 1;\n\t    }\n\t    jp++;\n\t}\n\tip++;\n    }\n\n    if (Verbose > 1)\n\tfprintf(stderr, \"overlap [%d] : %d\\n\", iter, count);\n    return count;\n}\n\nstatic void increaseBoundBox(void)\n{\n    double ydelta, xdelta;\n    Point ll, ur;\n\n    ur.x = pxmax;\n    ur.y = pymax;\n    ll.x = pxmin;\n    ll.y = pymin;\n\n    ydelta = incr * (ur.y - ll.y);\n    xdelta = incr * (ur.x - ll.x);\n\n    ur.x += xdelta;\n    ur.y += ydelta;\n    ll.x -= xdelta;\n    ll.y -= ydelta;\n\n    setBoundBox(&ll, &ur);\n}\n\n /* areaOf:\n  * Area of triangle whose vertices are a,b,c\n  */\nstatic double areaOf(Point a, Point b, Point c)\n{\n    double area;\n\n    area =\n\t(double) (fabs\n\t\t  (a.x * (b.y - c.y) + b.x * (c.y - a.y) +\n\t\t   c.x * (a.y - b.y)) / 2);\n    return area;\n}\n\n /* centroidOf:\n  * Compute centroid of triangle with vertices a, b, c.\n  * Return coordinates in x and y.\n  */\nstatic void centroidOf(Point a, Point b, Point c, double *x, double *y)\n{\n    *x = (a.x + b.x + c.x) / 3;\n    *y = (a.y + b.y + c.y) / 3;\n}\n\n /* newpos;\n  * The new position is the centroid of the\n  * voronoi polygon. This is the weighted sum of the\n  * centroids of a triangulation, normalized to the\n  * total area.\n  */\nstatic void newpos(Info_t * ip)\n{\n    PtItem *anchor = ip->verts;\n    PtItem *p, *q;\n    double totalArea = 0.0;\n    double cx = 0.0;\n    double cy = 0.0;\n    double x;\n    double y;\n    double area;\n\n    p = anchor->next;\n    q = p->next;\n    while (q != NULL) {\n\tarea = areaOf(anchor->p, p->p, q->p);\n\tcentroidOf(anchor->p, p->p, q->p, &x, &y);\n\tcx = cx + area * x;\n\tcy = cy + area * y;\n\ttotalArea = totalArea + area;\n\tp = q;\n\tq = q->next;\n    }\n\n    ip->site.coord.x = cx / totalArea;\n    ip->site.coord.y = cy / totalArea;\n}\n\n /* addCorners:\n  * Add corners of clipping window to appropriate sites.\n  * A site gets a corner if it is the closest site to that corner.\n  */\nstatic void addCorners(void)\n{\n    Info_t *ip = nodeInfo;\n    Info_t *sws = ip;\n    Info_t *nws = ip;\n    Info_t *ses = ip;\n    Info_t *nes = ip;\n    double swd = dist_2(&ip->site.coord, &sw);\n    double nwd = dist_2(&ip->site.coord, &nw);\n    double sed = dist_2(&ip->site.coord, &se);\n    double ned = dist_2(&ip->site.coord, &ne);\n    double d;\n    int i;\n\n    ip++;\n    for (i = 1; i < nsites; i++) {\n\td = dist_2(&ip->site.coord, &sw);\n\tif (d < swd) {\n\t    swd = d;\n\t    sws = ip;\n\t}\n\td = dist_2(&ip->site.coord, &se);\n\tif (d < sed) {\n\t    sed = d;\n\t    ses = ip;\n\t}\n\td = dist_2(&ip->site.coord, &nw);\n\tif (d < nwd) {\n\t    nwd = d;\n\t    nws = ip;\n\t}\n\td = dist_2(&ip->site.coord, &ne);\n\tif (d < ned) {\n\t    ned = d;\n\t    nes = ip;\n\t}\n\tip++;\n    }\n\n    addVertex(&sws->site, sw.x, sw.y);\n    addVertex(&ses->site, se.x, se.y);\n    addVertex(&nws->site, nw.x, nw.y);\n    addVertex(&nes->site, ne.x, ne.y);\n}\n\n /* newPos:\n  * Calculate the new position of a site as the centroid\n  * of its voronoi polygon, if it overlaps other nodes.\n  * The polygons are finite by being clipped to the clipping\n  * window.\n  * We first add the corner of the clipping windows to the\n  * vertex lists of the appropriate sites.\n  */\nstatic void newPos(void)\n{\n    int i;\n    Info_t *ip = nodeInfo;\n\n    addCorners();\n    for (i = 0; i < nsites; i++) {\n\tif (doAll || ip->overlaps)\n\t    newpos(ip);\n\tip++;\n    }\n}\n\n/* cleanup:\n * Cleanup voronoi memory.\n * Note that PQcleanup and ELcleanup rely on the number\n * of sites, so should at least be reset everytime we use\n * vAdjust.\n * This could be optimized, over multiple components or\n * even multiple graphs, but probably not worth it.\n */\nstatic void cleanup(void)\n{\n    PQcleanup();\n    ELcleanup();\n    siteinit();\t\t\t/* free memory */\n    edgeinit();\t\t\t/* free memory */\n}\n\nstatic int vAdjust(void)\n{\n    int iterCnt = 0;\n    int overlapCnt = 0;\n    int badLevel = 0;\n    int increaseCnt = 0;\n    int cnt;\n\n    if (!useIter || (iterations > 0))\n\toverlapCnt = countOverlap(iterCnt);\n\n    if ((overlapCnt == 0) || (iterations == 0))\n\treturn 0;\n\n    rmEquality();\n    geomUpdate(0);\n    voronoi(0, nextOne);\n    while (1) {\n\tnewPos();\n\titerCnt++;\n\n\tif (useIter && (iterCnt == iterations))\n\t    break;\n\tcnt = countOverlap(iterCnt);\n\tif (cnt == 0)\n\t    break;\n\tif (cnt >= overlapCnt)\n\t    badLevel++;\n\telse\n\t    badLevel = 0;\n\toverlapCnt = cnt;\n\n\tswitch (badLevel) {\n\tcase 0:\n\t    doAll = 1;\n\t    break;\n/*\n      case 1:\n        doAll = 1;\n        break;\n*/\n\tdefault:\n\t    doAll = 1;\n\t    increaseCnt++;\n\t    increaseBoundBox();\n\t    break;\n\t}\n\n\tgeomUpdate(1);\n\tvoronoi(0, nextOne);\n    }\n\n    if (Verbose) {\n\tfprintf(stderr, \"Number of iterations = %d\\n\", iterCnt);\n\tfprintf(stderr, \"Number of increases = %d\\n\", increaseCnt);\n    }\n\n    cleanup();\n    return 1;\n}\n\nstatic double rePos(Point c)\n{\n    int i;\n    Info_t *ip = nodeInfo;\n    double f = 1.0 + incr;\n\n    for (i = 0; i < nsites; i++) {\n\t/* ip->site.coord.x = f*(ip->site.coord.x - c.x) + c.x; */\n\t/* ip->site.coord.y = f*(ip->site.coord.y - c.y) + c.y; */\n\tip->site.coord.x = f * ip->site.coord.x;\n\tip->site.coord.y = f * ip->site.coord.y;\n\tip++;\n    }\n    return f;\n}\n\nstatic int sAdjust(void)\n{\n    int iterCnt = 0;\n    int overlapCnt = 0;\n    int cnt;\n    Point center;\n    /* double sc; */\n\n    if (!useIter || (iterations > 0))\n\toverlapCnt = countOverlap(iterCnt);\n\n    if ((overlapCnt == 0) || (iterations == 0))\n\treturn 0;\n\n    rmEquality();\n    center.x = (pxmin + pxmax) / 2.0;\n    center.y = (pymin + pymax) / 2.0;\n    while (1) {\n\t/* sc = */ rePos(center);\n\titerCnt++;\n\n\tif (useIter && (iterCnt == iterations))\n\t    break;\n\tcnt = countOverlap(iterCnt);\n\tif (cnt == 0)\n\t    break;\n    }\n\n    if (Verbose) {\n\tfprintf(stderr, \"Number of iterations = %d\\n\", iterCnt);\n    }\n\n    return 1;\n}\n\n /* updateGraph:\n  * Enter new node positions into the graph\n  */\nstatic void updateGraph(Agraph_t * graph)\n{\n    /* Agnode_t*    node; */\n    int i;\n    Info_t *ip;\n    /* char         pos[100]; */\n\n    ip = nodeInfo;\n    for (i = 0; i < nsites; i++) {\n\tND_pos(ip->node)[0] = ip->site.coord.x;\n\tND_pos(ip->node)[1] = ip->site.coord.y;\n\tip++;\n    }\n}\n\n/* normalize:\n * If normalize is set, move first node to origin, then\n * rotate graph so that first edge is horizontal.\n * FIX: Generalize to allow rotation determined by graph shape.\n */\nvoid normalize(graph_t * g)\n{\n    node_t *v;\n    edge_t *e;\n\n    double theta;\n    pointf p;\n\n    if (!mapbool(agget(g, \"normalize\")))\n\treturn;\n\n    v = agfstnode(g);\n    p.x = ND_pos(v)[0];\n    p.y = ND_pos(v)[1];\n    for (v = agfstnode(g); v; v = agnxtnode(g, v)) {\n\tND_pos(v)[0] -= p.x;\n\tND_pos(v)[1] -= p.y;\n    }\n\n    e = NULL;\n    for (v = agfstnode(g); v; v = agnxtnode(g, v))\n\tif ((e = agfstout(g, v)))\n\t    break;\n    if (e == NULL)\n\treturn;\n\n    theta = -atan2(ND_pos(e->head)[1] - ND_pos(e->tail)[1],\n\t\t   ND_pos(e->head)[0] - ND_pos(e->tail)[0]);\n\n    for (v = agfstnode(g); v; v = agnxtnode(g, v)) {\n\tp.x = ND_pos(v)[0];\n\tp.y = ND_pos(v)[1];\n\tND_pos(v)[0] = p.x * cos(theta) - p.y * sin(theta);\n\tND_pos(v)[1] = p.x * sin(theta) + p.y * cos(theta);\n    }\n}\n\ntypedef struct {\n    adjust_mode mode;\n    char *attrib;\n    char *print;\n} adjust_data;\nstatic adjust_data adjustMode[] = {\n    {AM_NONE, \"\", \"\"},\n    {AM_VOR, \"\", \"Voronoi\"},\n    {AM_SCALE, \"oscale\", \"old scaling\"},\n    {AM_NSCALE, \"scale\", \"scaling\"},\n    {AM_SCALEXY, \"scalexy\", \"x and y scaling\"},\n    /* {AM_PUSH, \"push\", \"push scan adjust\"}, */\n    /* {AM_PUSHPULL, \"pushpull\", \"push-pull scan adjust\"}, */\n    {AM_ORTHO, \"ortho\", \"orthogonal constraints\"},\n    {AM_ORTHO_YX, \"ortho_yx\", \"orthogonal constraints\"},\n    {AM_ORTHOXY, \"orthoxy\", \"xy orthogonal constraints\"},\n    {AM_ORTHOYX, \"orthoyx\", \"yx orthogonal constraints\"},\n    {AM_PORTHO, \"portho\", \"pseudo-orthogonal constraints\"},\n    {AM_PORTHO_YX, \"portho_yx\", \"pseudo-orthogonal constraints\"},\n    {AM_PORTHOXY, \"porthoxy\", \"xy pseudo-orthogonal constraints\"},\n    {AM_PORTHOYX, \"porthoyx\", \"yx pseudo-orthogonal constraints\"},\n    {AM_COMPRESS, \"compress\", \"compress\"},\n    {AM_NONE, 0, 0}\n};\n\n/* getAdjustMode:\n * Convert string value to internal value of adjustment mode.\n * Assume s != NULL.\n */\nstatic adjust_data *getAdjustMode(char *s)\n{\n    adjust_data *ap = adjustMode + 2;\n    if (*s == '\\0') return adjustMode;\n    while (ap->attrib) {\n\tif (!strcasecmp(s, ap->attrib))\n\t    return ap;\n\tap++;\n    }\n    if (mapbool(s))\n\treturn adjustMode;\n    else\n\treturn adjustMode + 1;\n}\n\n/* removeOverlapAs:\n * Use flag value to determine if and how to remove\n * node overlaps.\n */\nint \nremoveOverlapAs(graph_t * G, char* flag)\n{\n    /* int          userWindow = 0; */\n    int ret = 0;\n    /* extern void  scanAdjust(graph_t*, int); */\n\n    adjust_data *am;\n\n    if (agnnodes(G) < 2)\n\treturn 0;\n    if (flag == NULL)\n\treturn 0;\n\n    am = getAdjustMode(flag);\n    if (am->mode == AM_NONE)\n\treturn 0;\n\n    if (Verbose)\n\tfprintf(stderr, \"Adjusting %s using %s\\n\", G->name, am->print);\n\n    if (am->mode > AM_SCALE) {\n/* start_timer(); */\n\tswitch (am->mode) {\n\tcase AM_NSCALE:\n\t    ret = scAdjust(G, 1);\n\t    break;\n\tcase AM_SCALEXY:\n\t    ret = scAdjust(G, 0);\n\t    break;\n\tcase AM_PUSH:\n\t    /* scanAdjust (G, 1); */\n\t    break;\n\tcase AM_PUSHPULL:\n\t    /* scanAdjust (G, 0); */\n\t    break;\n\tcase AM_PORTHO_YX:\n\tcase AM_PORTHO:\n\tcase AM_PORTHOXY:\n\tcase AM_PORTHOYX:\n\tcase AM_ORTHO_YX:\n\tcase AM_ORTHO:\n\tcase AM_ORTHOXY:\n\tcase AM_ORTHOYX:\n\t    cAdjust(G, am->mode);\n\t    break;\n\tcase AM_COMPRESS:\n\t    ret = scAdjust(G, -1);\n\t    break;\n\tdefault:\t\t/* to silence warnings */\n\t    break;\n\t}\n/* fprintf (stderr, \"%s %.4f sec\\n\", am->attrib, elapsed_sec()); */\n\treturn ret;\n    }\n\n    /* create main array */\n/* start_timer(); */\n    makeInfo(G);\n\n    /* establish and verify bounding box */\n    chkBoundBox(G);\n\n    if (am->mode == AM_SCALE)\n\tret = sAdjust();\n    else\n\tret = vAdjust();\n\n    if (ret)\n\tupdateGraph(G);\n\n    freeNodes();\n    free(sites);\n    sites = 0;\n/* fprintf (stderr, \"old scale %.4f sec\\n\", elapsed_sec()); */\n\n    return ret;\n}\n\n/* removeOverlap:\n */\nint \nremoveOverlap(graph_t * G)\n{\n    return (removeOverlapAs(G, agget(G, \"overlap\")));\n}\n\n/* adjustNodes:\n * Remove node overlap relying on graph's overlap attribute.\n * Return non-zero if graph has changed.\n */\nint adjustNodes(graph_t * G)\n{\n    if (agnnodes(G) < 2)\n\treturn 0;\n    normalize(G);\n    return removeOverlap (G);\n}\n\n/* expFactor:\n * Return factor by which to scale up nodes.\n */\ndouble \nexpFactor(graph_t* g)\n{\n    double pmargin;\n    char*  marg;\n\n    if ((marg = agget(g, \"sep\"))) {\n\tpmargin = 1.0 + atof(marg);\n    } else\n\tpmargin = 1.1;\n    return pmargin;\n}\n\n"
  },
  {
    "path": "experimental/neatogen/adjust.h",
    "content": "/* $Id: adjust.h,v 1.6 2006/01/17 22:56:22 erg Exp $ $Revision: 1.6 $ */\n/* vim:set shiftwidth=4 ts=8: */\n\n/**********************************************************\n*      This software is part of the graphviz package      *\n*                http://www.graphviz.org/                 *\n*                                                         *\n*            Copyright (c) 1994-2004 AT&T Corp.           *\n*                and is licensed under the                *\n*            Common Public License, Version 1.0           *\n*                      by AT&T Corp.                      *\n*                                                         *\n*        Information and Software Systems Research        *\n*              AT&T Research, Florham Park NJ             *\n**********************************************************/\n\n\n\n#ifndef ADJUST_H\n#define ADJUST_H\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\ntypedef enum {\n    AM_NONE, AM_VOR, AM_COMPRESS,\n    AM_SCALE, AM_NSCALE, AM_SCALEXY, AM_PUSH, AM_PUSHPULL,\n    AM_ORTHO, AM_ORTHO_YX, AM_ORTHOXY, AM_ORTHOYX,\n    AM_PORTHO, AM_PORTHO_YX, AM_PORTHOXY, AM_PORTHOYX\n} adjust_mode;\n\n    extern double expFactor(graph_t * G);\n    extern int adjustNodes(graph_t * G);\n    extern void normalize(graph_t * g);\n    extern int removeOverlap(graph_t * G);\n    extern int removeOverlapAs(graph_t*, char*);\n    extern int cAdjust(graph_t *, int);\n    extern int scAdjust(graph_t *, int);\n\n#ifdef __cplusplus\n}\n#endif\n#endif\n"
  },
  {
    "path": "experimental/neatogen/bfs.c",
    "content": "/* $Id: bfs.c,v 1.1.1.1 2004/12/23 04:05:10 ellson Exp $ $Revision: 1.1.1.1 $ */\n/* vim:set shiftwidth=4 ts=8: */\n\n/**********************************************************\n*      This software is part of the graphviz package      *\n*                http://www.graphviz.org/                 *\n*                                                         *\n*            Copyright (c) 1994-2004 AT&T Corp.           *\n*                and is licensed under the                *\n*            Common Public License, Version 1.0           *\n*                      by AT&T Corp.                      *\n*                                                         *\n*        Information and Software Systems Research        *\n*              AT&T Research, Florham Park NJ             *\n**********************************************************/\n\n\n/******************************************\n\n\tBreadth First Search\n\tComputes single-source distances for\n\tunweighted graphs\n\n******************************************/\n\n#include \"bfs.h\"\n#include <stdlib.h>\n/* #include <math.h> */\n\nvoid bfs(int vertex, vtx_data * graph, int n, DistType * dist, Queue * Q)\n /* compute vector 'dist' of distances of all nodes from 'vertex' */\n{\n    int i;\n    int closestVertex, neighbor;\n    DistType closestDist = MAXINT;\n\n    /* initial distances with edge weights: */\n    for (i = 0; i < n; i++)\n\tdist[i] = -1;\n    dist[vertex] = 0;\n\n    initQueue(Q, vertex);\n\n    if (graph[0].ewgts == NULL) {\n\twhile (deQueue(Q, &closestVertex)) {\n\t    closestDist = dist[closestVertex];\n\t    for (i = 1; i < graph[closestVertex].nedges; i++) {\n\t\tneighbor = graph[closestVertex].edges[i];\n\t\tif (dist[neighbor] < -0.5) {\t/* first time to reach neighbor */\n\t\t    dist[neighbor] = closestDist + 1;\n\t\t    enQueue(Q, neighbor);\n\t\t}\n\t    }\n\t}\n    } else {\n\twhile (deQueue(Q, &closestVertex)) {\n\t    closestDist = dist[closestVertex];\n\t    for (i = 1; i < graph[closestVertex].nedges; i++) {\n\t\tneighbor = graph[closestVertex].edges[i];\n\t\tif (dist[neighbor] < -0.5) {\t/* first time to reach neighbor */\n\t\t    dist[neighbor] =\n\t\t\tclosestDist +\n\t\t\t(DistType) graph[closestVertex].ewgts[i];\n\t\t    enQueue(Q, neighbor);\n\t\t}\n\t    }\n\t}\n    }\n\n    /* For dealing with disconnected graphs: */\n    for (i = 0; i < n; i++)\n\tif (dist[i] < -0.5)\t/* 'i' is not connected to 'vertex' */\n\t    dist[i] = closestDist + 10;\n}\n\nint\nbfs_bounded(int vertex, vtx_data * graph, int n, DistType * dist,\n\t    Queue * Q, int bound, int *visited_nodes)\n /* compute vector 'dist' of distances of all nodes  from 'vertex' */\n /* ignore nodes whose distance to 'vertex' is more than bound */\n{\n    /* we assume here, that all distances are initialized with -1 !!!! */\n\n    int i;\n    int num_visit;\n    int closestVertex, neighbor;\n    DistType closestDist;\n    /* initialize distances with edge weights: */\n    /* for (i=0; i<n; i++)  */\n    /* dist[i]=-1; */\n\n    dist[vertex] = 0;\n\n    initQueue(Q, vertex);\n\n    num_visit = 0;\n    while (deQueue(Q, &closestVertex)) {\n\tclosestDist = dist[closestVertex];\n\tif (closestDist > bound) {\n\t    dist[closestVertex] = -1;\n\t    break;\n\t} else {\n\t    visited_nodes[num_visit++] = closestVertex;\n\t}\n\tfor (i = 1; i < graph[closestVertex].nedges; i++) {\n\t    neighbor = graph[closestVertex].edges[i];\n\t    if (dist[neighbor] < -0.5) {\t/* first time to reach neighbor */\n\t\tdist[neighbor] = closestDist + 1;\n\t\tenQueue(Q, neighbor);\n\t    }\n\t}\n    }\n\n    /* set distances of all nodes in Queue to -1 */\n    /* for next run */\n    while (deQueue(Q, &closestVertex)) {\n\tdist[closestVertex] = -1;\n    }\n    dist[vertex] = -1;\n    return num_visit;\n}\n\n#ifndef __cplusplus\n\nvoid mkQueue(Queue * qp, int size)\n{\n    qp->data = N_GNEW(size, int);\n    qp->queueSize = size;\n    qp->start = qp->end = 0;\n}\n\nQueue *newQueue(int size)\n{\n    Queue *qp = GNEW(Queue);\n    mkQueue(qp, size);\n    return qp;\n}\n\nvoid freeQueue(Queue * qp)\n{\n    free(qp->data);\n}\n\nvoid delQueue(Queue * qp)\n{\n    free(qp->data);\n    free(qp);\n}\n\nvoid initQueue(Queue * qp, int startVertex)\n{\n    qp->data[0] = startVertex;\n    qp->start = 0;\n    qp->end = 1;\n}\n\nbool deQueue(Queue * qp, int *vertex)\n{\n    if (qp->start >= qp->end)\n\treturn false;\t\t/* underflow */\n    *vertex = qp->data[qp->start++];\n    return true;\n}\n\nbool enQueue(Queue * qp, int vertex)\n{\n    if (qp->end >= qp->queueSize)\n\treturn false;\t\t/* overflow */\n    qp->data[qp->end++] = vertex;\n    return true;\n}\n\n#endif\n"
  },
  {
    "path": "experimental/neatogen/bfs.h",
    "content": "/* $Id: bfs.h,v 1.2 2005/07/13 20:29:40 erg Exp $ $Revision: 1.2 $ */\n/* vim:set shiftwidth=4 ts=8: */\n\n/**********************************************************\n*      This software is part of the graphviz package      *\n*                http://www.graphviz.org/                 *\n*                                                         *\n*            Copyright (c) 1994-2004 AT&T Corp.           *\n*                and is licensed under the                *\n*            Common Public License, Version 1.0           *\n*                      by AT&T Corp.                      *\n*                                                         *\n*        Information and Software Systems Research        *\n*              AT&T Research, Florham Park NJ             *\n**********************************************************/\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#ifndef _BFS_H_\n#define _BFS_H_\n\n#include \"defs.h\"\n\n#ifdef __cplusplus\n    class Queue {\n      private:\n\tint *data;\n\tint queueSize;\n\tint end;\n\tint start;\n      public:\n\t Queue(int size) {\n\t    data = new int[size];\n\t     queueSize = size;\n\t     start = 0;\n\t     end = 0;\n\t} ~Queue() {\n\t    delete[]data;\n\t} void initQueue(int startVertex) {\n\t    data[0] = startVertex;\n\t    start = 0;\n\t    end = 1;\n\t}\n\n\tbool dequeue(int &vertex) {\n\n\t    if (start >= end)\n\t\treturn false;\t/* underflow */\n\n\t    vertex = data[start++];\n\t    return true;\n\n\t}\n\n\tbool enqueue(int vertex) {\n\t    if (end >= queueSize)\n\t\treturn false;\t/* overflow */\n\t    data[end++] = vertex;\n\t    return true;\n\t}\n    };\n\n\n    void bfs(int vertex, vtx_data * graph, int n, DistType * dist,\n\t     Queue & Q);\n    void bfs_bounded(int vertex, vtx_data * graph, int n, DistType * dist,\n\t\t     Queue & Q, int bound, int *visited_nodes,\n\t\t     int &num_visited_nodes);\n#else\n    typedef struct {\n\tint *data;\n\tint queueSize;\n\tint end;\n\tint start;\n    } Queue;\n\n    extern void mkQueue(Queue *, int);\n    extern void freeQueue(Queue *);\n    extern void initQueue(Queue *, int startVertex);\n    extern bool deQueue(Queue *, int *);\n    extern bool enQueue(Queue *, int);\n\n    extern void bfs(int, vtx_data *, int, DistType *, Queue *);\n    extern int bfs_bounded(int, vtx_data *, int, DistType *, Queue *, int,\n\t\t\t   int *);\n#endif\n\n#endif\n\n#ifdef __cplusplus\n}\n#endif\n"
  },
  {
    "path": "experimental/neatogen/circuit.c",
    "content": "/* $Id: circuit.c,v 1.1.1.1 2004/12/23 04:05:10 ellson Exp $ $Revision: 1.1.1.1 $ */\n/* vim:set shiftwidth=4 ts=8: */\n\n/**********************************************************\n*      This software is part of the graphviz package      *\n*                http://www.graphviz.org/                 *\n*                                                         *\n*            Copyright (c) 1994-2004 AT&T Corp.           *\n*                and is licensed under the                *\n*            Common Public License, Version 1.0           *\n*                      by AT&T Corp.                      *\n*                                                         *\n*        Information and Software Systems Research        *\n*              AT&T Research, Florham Park NJ             *\n**********************************************************/\n\n/*\n * this implements the resistor circuit current model for\n * computing node distance, as an alternative to shortest-path.\n * likely it could be improved by using edge weights, somehow.\n * Return 1 if successful; 0 otherwise (e.g., graph is disconnected).\n */\n#include\t\"neato.h\"\n\nint solveCircuit(int nG, double **Gm, double **Gm_inv)\n{\n    double sum;\n    int i, j;\n\n    if (Verbose)\n\tfprintf(stderr, \"Calculating circuit model\");\n\n    /* set diagonal entries to sum of conductances but ignore nth node */\n    for (i = 0; i < nG; i++) {\n\tsum = 0.0;\n\tfor (j = 0; j < nG; j++)\n\t    if (i != j)\n\t\tsum += Gm[i][j];\n\tGm[i][i] = -sum;\n    }\n    return matinv(Gm, Gm_inv, nG - 1);\n}\n\nint circuit_model(graph_t * g, int nG)\n{\n    double **Gm;\n    double **Gm_inv;\n    int rv, i, j;\n    node_t *v;\n    edge_t *e;\n\n    Gm = new_array(nG, nG, 0.0);\n    Gm_inv = new_array(nG, nG, 0.0);\n\n    /* set non-diagonal entries */\n    for (v = agfstnode(g); v; v = agnxtnode(g, v)) {\n\tfor (e = agfstedge(g, v); e; e = agnxtedge(g, e, v)) {\n\t    i = ND_id(e->tail);\n\t    j = ND_id(e->head);\n\t    if (i == j)\n\t\tcontinue;\n\t    /* conductance is 1/resistance */\n\t    Gm[i][j] = Gm[j][i] = -1.0 / ED_dist(e);\t/* negate */\n\t}\n    }\n\n    rv = solveCircuit(nG, Gm, Gm_inv);\n\n    if (rv)\n\tfor (i = 0; i < nG; i++) {\n\t    for (j = 0; j < nG; j++) {\n\t\tGD_dist(g)[i][j] =\n\t\t    Gm_inv[i][i] + Gm_inv[j][j] - 2.0 * Gm_inv[i][j];\n\t    }\n\t}\n    free_array(Gm);\n    free_array(Gm_inv);\n    return rv;\n}\n"
  },
  {
    "path": "experimental/neatogen/closest.c",
    "content": "/* $Id: closest.c,v 1.1.1.1 2004/12/23 04:05:10 ellson Exp $ $Revision: 1.1.1.1 $ */\n/* vim:set shiftwidth=4 ts=8: */\n\n/**********************************************************\n*      This software is part of the graphviz package      *\n*                http://www.graphviz.org/                 *\n*                                                         *\n*            Copyright (c) 1994-2004 AT&T Corp.           *\n*                and is licensed under the                *\n*            Common Public License, Version 1.0           *\n*                      by AT&T Corp.                      *\n*                                                         *\n*        Information and Software Systems Research        *\n*              AT&T Research, Florham Park NJ             *\n**********************************************************/\n\n\n#include \"kkutils.h\"\n#include \"closest.h\"\n#include <stdlib.h>\n\n/*****************************************\n** This module contains functions that  **\n** given a 1-D layout construct a graph **\n** where close nodes in this layout are **\n** adjacent                             **\n*****************************************/\n\ntypedef struct {\n    /* this structure represents two nodes in the 1-D layout */\n    int left;\t\t\t/* the left node in the pair */\n    int right;\t\t\t/* the right node in the pair */\n    double dist;\t\t/* distance between the nodes in the layout */\n} Pair;\n\n#define LT(p,q) ((p).dist < (q).dist)\n#define EQ(p,q) ((p).dist == (q).dist)\n\n/*\nPair(int v, int u) {left=v; right=u;}\nbool operator>(Pair other) {return dist>other.dist;}\nbool operator>=(Pair other) {return dist>=other.dist;}\nbool operator<(Pair other) {return dist<other.dist;}\nbool operator<=(Pair other) {return dist<=other.dist;}\nbool operator==(Pair other) {return dist==other.dist;}\n*/\n\ntypedef struct {\n    Pair *data;\n    int max_size;\n    int top;\n} PairStack;\n\nstatic void initStack(PairStack * s, int n)\n{\n    s->data = N_GNEW(n, Pair);\n    s->max_size = n;\n    s->top = 0;\n}\n\nstatic void freeStack(PairStack * s)\n{\n    free(s->data);\n}\n\n#define push(s,x) { \\\n\tif (s->top>=s->max_size) { \\\n\t\ts->max_size *= 2; \\\n\t\ts->data = (Pair*) realloc(s->data, s->max_size*sizeof(Pair)); \\\n\t} \\\n\ts->data[s->top++] = x; \\\n}\n\n#define pop(s,x) ((s->top==0) ? false : (s->top--, x = s->data[s->top], true))\n\n#define read_top(h,x) ((s->top==0) ? false : (x = s->data[s->top-1], true))\n\n#define sub(h,i) (h->data[i])\n\n/* An auxulliary data structure (a heap) for \n * finding the closest pair in the layout\n */\ntypedef struct {\n    Pair *data;\n    int heapSize;\n    int maxSize;\n} PairHeap;\n\n#define left(i) (2*(i))\n#define right(i) (2*(i)+1)\n#define parent(i) ((i)/2)\n#define insideHeap(h,i) ((i)<h->heapSize)\n#define greaterPriority(h,i,j) \\\n  (LT(h->data[i],h->data[j]) || ((EQ(h->data[i],h->data[j])) && (rand()%2)))\n\n#define exchange(h,i,j) {Pair temp; \\\n        temp=h->data[i]; \\\n        h->data[i]=h->data[j]; \\\n        h->data[j]=temp; \\\n}\n#define assign(h,i,j) {h->data[i]=h->data[j]}\n\nstatic void heapify(PairHeap * h, int i)\n{\n    int l, r, largest;\n    while (1) {\n\tl = left(i);\n\tr = right(i);\n\tif (insideHeap(h, l) && greaterPriority(h, l, i))\n\t    largest = l;\n\telse\n\t    largest = i;\n\tif (insideHeap(h, r) && greaterPriority(h, r, largest))\n\t    largest = r;\n\tif (largest == i)\n\t    break;\n\n\texchange(h, largest, i);\n\ti = largest;\n    }\n}\n\n#ifdef UNUSED\nstatic void mkHeap(PairHeap * h, int size)\n{\n    h->data = N_GNEW(size, Pair);\n    h->maxSize = size;\n    h->heapSize = 0;\n}\n#endif\n\nstatic void freeHeap(PairHeap * h)\n{\n    free(h->data);\n}\n\nstatic void initHeap(PairHeap * h, double *place, int *ordering, int n)\n{\n    int i;\n    Pair edge;\n    int j;\n\n    h->heapSize = n - 1;\n#ifdef REDO\n    if (h->heapSize > h->maxSize) {\n\th->maxSize = h->heapSize;\n\th->data = (Pair *) realloc(h->data, h->maxSize * sizeof(Pair));\n    }\n#else\n    h->maxSize = h->heapSize;\n    h->data = N_GNEW(h->maxSize, Pair);\n#endif\n\n    for (i = 0; i < n - 1; i++) {\n\tedge.left = ordering[i];\n\tedge.right = ordering[i + 1];\n\tedge.dist = place[ordering[i + 1]] - place[ordering[i]];\n\th->data[i] = edge;\n    }\n    for (j = (n - 1) / 2; j >= 0; j--) {\n\theapify(h, j);\n    }\n}\n\nstatic bool extractMax(PairHeap * h, Pair * max)\n{\n    if (h->heapSize == 0)\n\treturn false;\n\n    *max = h->data[0];\n    h->data[0] = h->data[h->heapSize - 1];\n    h->heapSize--;\n    heapify(h, 0);\n    return true;\n}\n\nstatic void insert(PairHeap * h, Pair edge)\n{\n    int i = h->heapSize;\n    if (h->heapSize == h->maxSize) {\n\th->maxSize *= 2;\n\th->data = (Pair *) realloc(h->data, h->maxSize * sizeof(Pair));\n    }\n    h->heapSize++;\n    h->data[i] = edge;\n    while (i > 0 && greaterPriority(h, i, parent(i))) {\n\texchange(h, i, parent(i));\n\ti = parent(i);\n    }\n}\n\n/*\nstatic bool\nisheap(PairHeap* h)\n{\n\tint i,l,r;\n\tfor (i=0; i<h->heapSize; i++) {\n\t\tl=left(i); r=right(i);\n\t\tif (insideHeap(h,l) && greaterPriority(h,l,i))\n\t\t\treturn false;\n\t\tif (insideHeap(h,r) && greaterPriority(h,r,i))\n\t\t\treturn false;\n\t}\n\treturn true;\n}\n*/\n\nstatic void\nfind_closest_pairs(double *place, int n, int num_pairs,\n\t\t   PairStack * pairs_stack)\n{\n    /* Fill the stack 'pairs_stack' with 'num_pairs' closest pairs int the 1-D layout 'place' */\n    int i;\n    PairHeap heap;\n    int *left = N_GNEW(n, int);\n    int *right = N_GNEW(n, int);\n    Pair pair = { 0, 0 }, new_pair;\n\n    /* Order the nodes according to their place */\n    int *ordering = N_GNEW(n, int);\n    int *inv_ordering = N_GNEW(n, int);\n\n    for (i = 0; i < n; i++) {\n\tordering[i] = i;\n    }\n    quicksort_place(place, ordering, 0, n - 1);\n    for (i = 0; i < n; i++) {\n\tinv_ordering[ordering[i]] = i;\n    }\n\n    /* Intialize heap with all consecutive pairs */\n    initHeap(&heap, place, ordering, n);\n\n    /* store the leftmost and rightmost neighbors of each node that were entered into heap */\n    for (i = 1; i < n; i++) {\n\tleft[ordering[i]] = ordering[i - 1];\n    }\n    for (i = 0; i < n - 1; i++) {\n\tright[ordering[i]] = ordering[i + 1];\n    }\n\n    /* extract the 'num_pairs' closest pairs */\n    for (i = 0; i < num_pairs; i++) {\n\tint left_index;\n\tint right_index;\n\tint neighbor;\n\n\tif (!extractMax(&heap, &pair)) {\n\t    break;\t\t/* not enough pairs */\n\t}\n\tpush(pairs_stack, pair);\n\t/* insert to heap \"descendant\" pairs */\n\tleft_index = inv_ordering[pair.left];\n\tright_index = inv_ordering[pair.right];\n\tif (left_index > 0) {\n\t    neighbor = ordering[left_index - 1];\n\t    if (inv_ordering[right[neighbor]] < right_index) {\n\t\t/* we have a new pair */\n\t\tnew_pair.left = neighbor;\n\t\tnew_pair.right = pair.right;\n\t\tnew_pair.dist = place[pair.right] - place[neighbor];\n\t\tinsert(&heap, new_pair);\n\t\tright[neighbor] = pair.right;\n\t\tleft[pair.right] = neighbor;\n\t    }\n\t}\n\tif (right_index < n - 1) {\n\t    neighbor = ordering[right_index + 1];\n\t    if (inv_ordering[left[neighbor]] > left_index) {\n\t\t/* we have a new pair */\n\t\tnew_pair.left = pair.left;\n\t\tnew_pair.right = neighbor;\n\t\tnew_pair.dist = place[neighbor] - place[pair.left];\n\t\tinsert(&heap, new_pair);\n\t\tleft[neighbor] = pair.left;\n\t\tright[pair.left] = neighbor;\n\t    }\n\t}\n    }\n    free(left);\n    free(right);\n    free(ordering);\n    free(inv_ordering);\n    freeHeap(&heap);\n}\n\nstatic void add_edge(vtx_data * graph, int u, int v)\n{\n    int i;\n    for (i = 0; i < graph[u].nedges; i++) {\n\tif (graph[u].edges[i] == v) {\n\t    /* edge already exist */\n\t    return;\n\t}\n    }\n    /* add the edge */\n    graph[u].edges[graph[u].nedges++] = v;\n    graph[v].edges[graph[v].nedges++] = u;\n    if (graph[0].ewgts != NULL) {\n\tgraph[u].ewgts[0]--;\n\tgraph[v].ewgts[0]--;\n    }\n}\n\nstatic void\nconstruct_graph(int n, PairStack * edges_stack, vtx_data ** New_graph)\n{\n    /* construct an unweighted graph using the edges 'edges_stack' */\n    int i;\n    vtx_data *new_graph;\n\n    /* first compute new degrees and nedges; */\n    int *degrees = N_GNEW(n, int);\n    int top = edges_stack->top;\n    int new_nedges = 2 * top + n;\n    Pair pair;\n    int *edges = N_GNEW(new_nedges, int);\n    float *weights = N_GNEW(new_nedges, float);\n\n    for (i = 0; i < n; i++) {\n\tdegrees[i] = 1;\t\t/* save place for the self loop */\n    }\n    for (i = 0; i < top; i++) {\n\tpair = sub(edges_stack, i);\n\tdegrees[pair.left]++;\n\tdegrees[pair.right]++;\n    }\n\n    /* copy graph into new_graph: */\n    for (i = 0; i < new_nedges; i++) {\n\tweights[i] = 1.0;\n    }\n\n    *New_graph = new_graph = N_GNEW(n, vtx_data);\n    for (i = 0; i < n; i++) {\n\tnew_graph[i].nedges = 1;\n\tnew_graph[i].ewgts = weights;\n#ifdef USE_STYLES\n\tnew_graph[i].styles = NULL;\n#endif\n\tnew_graph[i].edges = edges;\n\t*edges = i;\t\t/* self loop for Lap */\n\t*weights = 0;\t\t/* self loop weight for Lap */\n\tweights += degrees[i];\n\tedges += degrees[i];\t/* reserve space for possible more edges */\n    }\n\n    free(degrees);\n\n    /* add all edges from stack */\n    while (pop(edges_stack, pair)) {\n\tadd_edge(new_graph, pair.left, pair.right);\n    }\n}\n\nvoid\nclosest_pairs2graph(double *place, int n, int num_pairs, vtx_data ** graph)\n{\n    /* build a graph with with edges between the 'num_pairs' closest pairs in the 1-D space: 'place' */\n    PairStack pairs_stack;\n    initStack(&pairs_stack, num_pairs);\n    find_closest_pairs(place, n, num_pairs, &pairs_stack);\n    construct_graph(n, &pairs_stack, graph);\n    freeStack(&pairs_stack);\n}\n"
  },
  {
    "path": "experimental/neatogen/closest.h",
    "content": "/* $Id: closest.h,v 1.1.1.1 2004/12/23 04:05:10 ellson Exp $ $Revision: 1.1.1.1 $ */\n/* vim:set shiftwidth=4 ts=8: */\n\n/**********************************************************\n*      This software is part of the graphviz package      *\n*                http://www.graphviz.org/                 *\n*                                                         *\n*            Copyright (c) 1994-2004 AT&T Corp.           *\n*                and is licensed under the                *\n*            Common Public License, Version 1.0           *\n*                      by AT&T Corp.                      *\n*                                                         *\n*        Information and Software Systems Research        *\n*              AT&T Research, Florham Park NJ             *\n**********************************************************/\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n\n\n#ifndef CLOSEST_H\n#define CLOSEST_H\n\n#include \"defs.h\"\n\n    extern void closest_pairs2graph(double *, int, int, vtx_data **);\n\n#endif\n\n#ifdef __cplusplus\n}\n#endif\n"
  },
  {
    "path": "experimental/neatogen/compute_hierarchy.c",
    "content": "/**********************************************************\n*      This software is part of the graphviz package      *\n*                http://www.graphviz.org/                 *\n*                                                         *\n*            Copyright (c) 1994-2004 AT&T Corp.           *\n*                and is licensed under the                *\n*            Common Public License, Version 1.0           *\n*                      by AT&T Corp.                      *\n*                                                         *\n*        Information and Software Systems Research        *\n*              AT&T Research, Florham Park NJ             *\n**********************************************************/\n\n#include <digcola.h>\n#ifdef DIGCOLA\n#include \"kkutils.h\"\n\nstatic int* given_levels = NULL;\n/*\n * This function partitions the graph nodes into levels\n * according to the minimizer of the hierarchy energy.\n * \n * To allow more flexibility we define a new level only \n * when the hierarchy energy shows a significant jump\n * (to compensate for noise).\n * This is controlled by two parameters: 'abs_tol' and \n * 'relative_tol'. The smaller these two are, the more \n * levels we'll get. \n * More speciffically:\n * We never consider gaps smaller than 'abs_tol'\n * Additionally, we never consider gaps smaller than 'abs_tol'*<avg_gap>\n * \n * The output is an ordering of the nodes according to \n * their levels, as follows:\n *   First level: \n *     ordering[0],ordering[1],...ordering[levels[0]-1]\n *   Second level: \n *     ordering[levels[0]],ordering[levels[0]+1],...ordering[levels[1]-1]\n *   ...\n *   Last level: \n *     ordering[levels[num_levels-1]],ordering[levels[num_levels-1]+1],...ordering[n-1]\n * \n * Hence, the nodes were partitioned into 'num_levels'+1\n * levels.\n * \n * Please note that 'ordering[levels[i]]' contains the first node at level i+1,\n *  and not the last node of level i.\n */\ndouble \ncompute_hierarchy(vtx_data* graph, int n, double abs_tol, double relative_tol, \n      double* given_coords, int** orderingp, int** levelsp, int* num_levelsp) \n{\n\tdouble* y;\n\tint i;\n\tdouble spread;\n\tint use_given_levels=FALSE;\n    int* ordering;\n    int* levels;\n\tdouble tol; /* node 'i' precedes 'j' in hierachy iff y[i]-y[j]>tol */\n\tdouble hierarchy_span;\n    int num_levels;\n\n\t/* compute optimizer of hierarchy energy: 'y' */\n\tif (given_coords) {\n\t\ty = given_coords;\n\t}\n\telse {\n\t\ty = N_GNEW(n,double);\n\t\tcompute_y_coords(graph, n, y, n);\n\t}\n\n\t/* sort nodes accoridng to their y-ordering */\n\t*orderingp = ordering = N_NEW(n, int);\n\tfor (i=0; i<n; i++) {\n\t\tordering[i] = i;\n\t}\n\tquicksort_place(y, ordering, 0,n-1);\t\n\t\n\tspread = y[ordering[n-1]]-y[ordering[0]];\n\n\t/* after spread is computed, we may take the y-coords as the given levels */\n\tif (given_levels) {\n\t\tuse_given_levels=TRUE;\n\t\tfor (i=0; i<n; i++) {\n\t\t\tuse_given_levels = use_given_levels && given_levels[i]>=0;\n\t\t}\n\t}\n\tif (use_given_levels) {\n\t\tfor (i=0; i<n; i++) {\n\t\t\ty[i] = given_levels[i];\n\t\t\tordering[i] = i;\n\t\t}\n\t\tquicksort_place(y,  ordering, 0,n-1);\n\t}\n\t\n\t/* compute tolerance\n\t * take the maximum between 'abs_tol' and a fraction of the average gap\n\t * controlled by 'relative_tol'\n     */\n\thierarchy_span = y[ordering[n-1]]-y[ordering[0]];\n\ttol = MAX(abs_tol, relative_tol*hierarchy_span/(n-1)); \n\t/* 'hierarchy_span/(n-1)' - average gap between consecutive nodes */\n\n\t\n\t/* count how many levels the hierarchy contains (a SINGLE_LINK clustering */\n    /* alternatively we could use COMPLETE_LINK clustering) */\n\tnum_levels = 0;\n\tfor (i=1; i<n; i++) {\n\t\tif (y[ordering[i]] - y[ordering[i-1]] > tol) {\n\t\t\tnum_levels++;\n\t\t}\n\t}\n\t*num_levelsp = num_levels;\n\tif (num_levels==0) {\n\t\t*levelsp = levels = N_GNEW(1, int);\n\t\tlevels[0] = n;\n\t}\n\telse {\n\t\tint count=0;\n\t\t*levelsp = levels = N_GNEW(num_levels, int);\n\t\tfor (i=1; i<n; i++) {\n\t\t\tif (y[ordering[i]] - y[ordering[i-1]] > tol) {\n\t\t\t\tlevels[count++] = i;\n\t\t\t}\n\t\t}\n\t}\n\tif (!given_coords) {\n\t\tfree(y);\n\t}\n\n\treturn spread;\n}\n\n#endif /* DIGCOLA */\n\n"
  },
  {
    "path": "experimental/neatogen/conjgrad.c",
    "content": "/* $Id: conjgrad.c,v 1.1.1.1 2004/12/23 04:05:10 ellson Exp $ $Revision: 1.1.1.1 $ */\n/* vim:set shiftwidth=4 ts=8: */\n\n/**********************************************************\n*      This software is part of the graphviz package      *\n*                http://www.graphviz.org/                 *\n*                                                         *\n*            Copyright (c) 1994-2004 AT&T Corp.           *\n*                and is licensed under the                *\n*            Common Public License, Version 1.0           *\n*                      by AT&T Corp.                      *\n*                                                         *\n*        Information and Software Systems Research        *\n*              AT&T Research, Florham Park NJ             *\n**********************************************************/\n\n\n#include \"matrix_ops.h\"\n#include \"conjgrad.h\"\n/* #include <math.h> */\n#include <stdlib.h>\n\n\n/*************************\n** C.G. method - SPARSE  *\n*************************/\n\nvoid conjugate_gradient\n    (vtx_data * A, double *x, double *b, int n, double tol,\n     int max_iterations) {\n    /* Solves Ax=b using Conjugate-Gradients method */\n    /* 'x' and 'b' are orthogonalized against 1 */\n\n    int i;\n\n    double alpha, beta, r_r, r_r_new, p_Ap;\n    double *r = N_GNEW(n, double);\n    double *p = N_GNEW(n, double);\n    double *Ap = N_GNEW(n, double);\n    double *Ax = N_GNEW(n, double);\n    double *alphap = N_GNEW(n, double);\n\n    double *orth_b = N_GNEW(n, double);\n    copy_vector(n, b, orth_b);\n    orthog1(n, orth_b);\n    orthog1(n, x);\n    right_mult_with_vector(A, n, x, Ax);\n    vectors_subtraction(n, orth_b, Ax, r);\n    copy_vector(n, r, p);\n    r_r = vectors_inner_product(n, r, r);\n\n    for (i = 0; i < max_iterations && max_abs(n, r) > tol; i++) {\n\tright_mult_with_vector(A, n, p, Ap);\n\tp_Ap = vectors_inner_product(n, p, Ap);\n\tif (p_Ap == 0)\n\t    break;\t\t/*exit(1); */\n\talpha = r_r / p_Ap;\n\n\t/* derive new x: */\n\tvectors_scalar_mult(n, p, alpha, alphap);\n\tvectors_addition(n, x, alphap, x);\n\n\t/* compute values for next iteration: */\n\tif (i < max_iterations - 1) {\t/* not last iteration */\n\t    vectors_scalar_mult(n, Ap, alpha, Ap);\n\t    vectors_subtraction(n, r, Ap, r);\t/* fast computation of r, the residual */\n\n\t    /* Alternaive accurate, but slow, computation of the residual - r */\n\t    /* right_mult_with_vector(A, n, x, Ax); */\n\t    /* vectors_subtraction(n,b,Ax,r); */\n\n\t    r_r_new = vectors_inner_product(n, r, r);\n\t    if (r_r == 0)\n\t\texit(1);\n\t    beta = r_r_new / r_r;\n\t    r_r = r_r_new;\n\t    vectors_scalar_mult(n, p, beta, p);\n\t    vectors_addition(n, r, p, p);\n\t}\n    }\n\n    free(r);\n    free(p);\n    free(Ap);\n    free(Ax);\n    free(alphap);\n    free(orth_b);\n\n}\n\n\n/****************************\n** C.G. method - DENSE      *\n****************************/\n\nvoid conjugate_gradient_f\n    (float **A, double *x, double *b, int n, double tol,\n     int max_iterations, bool ortho1) {\n    /* Solves Ax=b using Conjugate-Gradients method */\n    /* 'x' and 'b' are orthogonalized against 1 if 'ortho1=true' */\n\n    int i;\n\n    double alpha, beta, r_r, r_r_new, p_Ap;\n    double *r = N_GNEW(n, double);\n    double *p = N_GNEW(n, double);\n    double *Ap = N_GNEW(n, double);\n    double *Ax = N_GNEW(n, double);\n    double *alphap = N_GNEW(n, double);\n\n    double *orth_b = N_GNEW(n, double);\n    copy_vector(n, b, orth_b);\n    if (ortho1) {\n\torthog1(n, orth_b);\n\torthog1(n, x);\n    }\n    right_mult_with_vector_f(A, n, x, Ax);\n    vectors_subtraction(n, orth_b, Ax, r);\n    copy_vector(n, r, p);\n    r_r = vectors_inner_product(n, r, r);\n\n    for (i = 0; i < max_iterations && max_abs(n, r) > tol; i++) {\n\tright_mult_with_vector_f(A, n, p, Ap);\n\tp_Ap = vectors_inner_product(n, p, Ap);\n\tif (p_Ap == 0)\n\t    break;\t\t/*exit(1); */\n\talpha = r_r / p_Ap;\n\n\t/* derive new x: */\n\tvectors_scalar_mult(n, p, alpha, alphap);\n\tvectors_addition(n, x, alphap, x);\n\n\t/* compute values for next iteration: */\n\tif (i < max_iterations - 1) {\t/* not last iteration */\n\t    vectors_scalar_mult(n, Ap, alpha, Ap);\n\t    vectors_subtraction(n, r, Ap, r);\t/* fast computation of r, the residual */\n\n\t    /* Alternaive accurate, but slow, computation of the residual - r */\n\t    /* right_mult_with_vector(A, n, x, Ax); */\n\t    /* vectors_subtraction(n,b,Ax,r); */\n\n\t    r_r_new = vectors_inner_product(n, r, r);\n\t    if (r_r == 0)\n\t\texit(1);\n\t    beta = r_r_new / r_r;\n\t    r_r = r_r_new;\n\t    vectors_scalar_mult(n, p, beta, p);\n\t    vectors_addition(n, r, p, p);\n\t}\n    }\n\n    free(r);\n    free(p);\n    free(Ap);\n    free(Ax);\n    free(alphap);\n    free(orth_b);\n\n}\n\nvoid\nconjugate_gradient_mkernel(float *A, float *x, float *b, int n,\n\t\t\t   double tol, int max_iterations)\n{\n    /* Solves Ax=b using Conjugate-Gradients method */\n    /* A is a packed symmetric matrix */\n    /* matrux A is \"packed\" (only upper triangular portion exists, row-major); */\n\n    int i;\n\n    double alpha, beta, r_r, r_r_new, p_Ap;\n    float *r = N_NEW(n, float);\n    float *p = N_NEW(n, float);\n    float *Ap = N_NEW(n, float);\n    float *Ax = N_NEW(n, float);\n\n    /* centering x and b  */\n    orthog1f(n, x);\n    orthog1f(n, b);\n\n    right_mult_with_vector_ff(A, n, x, Ax);\n    /* centering Ax */\n    orthog1f(n, Ax);\n\n\n    vectors_substractionf(n, b, Ax, r);\n    copy_vectorf(n, r, p);\n\n    r_r = vectors_inner_productf(n, r, r);\n\n    for (i = 0; i < max_iterations && max_absf(n, r) > tol; i++) {\n\torthog1f(n, p);\n\torthog1f(n, x);\n\torthog1f(n, r);\n\n\tright_mult_with_vector_ff(A, n, p, Ap);\n\t/* centering Ap */\n\torthog1f(n, Ap);\n\n\tp_Ap = vectors_inner_productf(n, p, Ap);\n\tif (p_Ap == 0)\n\t    break;\n\talpha = r_r / p_Ap;\n\n\t/* derive new x: */\n\tvectors_mult_additionf(n, x, (float) alpha, p);\n\n\t/* compute values for next iteration: */\n\tif (i < max_iterations - 1) {\t/* not last iteration */\n\t    vectors_mult_additionf(n, r, (float) -alpha, Ap);\n\n\n\t    r_r_new = vectors_inner_productf(n, r, r);\n\n\t    if (r_r == 0)\n\t\texit(1);\n\t    beta = r_r_new / r_r;\n\t    r_r = r_r_new;\n\n\t    vectors_scalar_multf(n, p, (float) beta, p);\n\n\t    vectors_additionf(n, r, p, p);\n\t}\n    }\n\n    free(r);\n    free(p);\n    free(Ap);\n    free(Ax);\n}\n"
  },
  {
    "path": "experimental/neatogen/conjgrad.h",
    "content": "/* $Id: conjgrad.h,v 1.1.1.1 2004/12/23 04:05:10 ellson Exp $ $Revision: 1.1.1.1 $ */\n/* vim:set shiftwidth=4 ts=8: */\n\n/**********************************************************\n*      This software is part of the graphviz package      *\n*                http://www.graphviz.org/                 *\n*                                                         *\n*            Copyright (c) 1994-2004 AT&T Corp.           *\n*                and is licensed under the                *\n*            Common Public License, Version 1.0           *\n*                      by AT&T Corp.                      *\n*                                                         *\n*        Information and Software Systems Research        *\n*              AT&T Research, Florham Park NJ             *\n**********************************************************/\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n\n\n#ifndef _CG_H_\n#define _CG_H_\n\n#include \"defs.h\"\n\n/*************************\n * C.G. method - SPARSE  *\n ************************/\n\n    extern void conjugate_gradient(vtx_data *, double *, double *, int,\n\t\t\t\t   double, int);\n\n/*************************\n * C.G. method - DENSE   *\n ************************/\n\n    extern void conjugate_gradient_f(float **, double *, double *, int,\n\t\t\t\t     double, int, bool);\n\n    extern void conjugate_gradient_mkernel(float *, float *, float *, int,\n\t\t\t\t\t   double, int);\n\n#endif\n\n#ifdef __cplusplus\n}\n#endif\n"
  },
  {
    "path": "experimental/neatogen/constrained_majorization.c",
    "content": "/**********************************************************\n*      This software is part of the graphviz package      *\n*                http://www.graphviz.org/                 *\n*                                                         *\n*            Copyright (c) 1994-2004 AT&T Corp.           *\n*                and is licensed under the                *\n*            Common Public License, Version 1.0           *\n*                      by AT&T Corp.                      *\n*                                                         *\n*        Information and Software Systems Research        *\n*              AT&T Research, Florham Park NJ             *\n**********************************************************/\n\n#include \"digcola.h\"\n#ifdef DIGCOLA\n#include <math.h>\n#include <stdlib.h>\n#include <time.h>\n#include <stdio.h>\n#include <float.h>\n#include \"stress.h\"\n#include \"dijkstra.h\"\n#include \"bfs.h\"\n#include \"matrix_ops.h\"\n#include \"kkutils.h\"\n#include \"conjgrad.h\"\n#include \"quad_prog_solver.h\"\n#include \"matrix_ops.h\"\n\n#undef MOSEK\n#ifdef MOSEK\n#include \"mosek_quad_solve.h\"\n#endif\n\n#define localConstrMajorIterations 1000\n#define levels_sep_tol 1e-1\n\nint \nstress_majorization_with_hierarchy(\n    vtx_data* graph,    /* Input graph in sparse representation\t */\n    int n,              /* Number of nodes */\n    int nedges_graph,   /* Number of edges */\n    double** d_coords,  /* Coordinates of nodes (output layout)  */\n    int dim,            /* Dimemsionality of layout */\n    int smart_ini,      /* smart initialization */\n    int model,          /* difference model */\n    int maxi,           /* max iterations */\n    double levels_gap\n)\n{\n    int iterations = 0;    /* Output: number of iteration of the process */\n\n\t/*************************************************\n\t** Computation of full, dense, unrestricted k-D ** \n\t** stress minimization by majorization          ** \n\t** This function imposes HIERARCHY CONSTRAINTS  **\n\t*************************************************/\n\n\tint i,j,k;\n\tbool directionalityExist = FALSE;\n\tfloat * lap1 = NULL;\n\tfloat * dist_accumulator = NULL;\n\tfloat * tmp_coords = NULL;\n\tfloat ** b = NULL;\n#ifdef NONCORE\n\tFILE * fp=NULL;\n#endif\n\tdouble * degrees = NULL;\n\tfloat * lap2=NULL;\n\tint lap_length;\n\tfloat * f_storage=NULL;\n\tfloat ** coords=NULL;\n\n\tdouble conj_tol=tolerance_cg;        /* tolerance of Conjugate Gradient */\n\tfloat ** unpackedLap = NULL;\n#ifdef MOSEK\n\tMosekEnv *mskEnv = NULL;\n#else\n\tCMajEnv *cMajEnv = NULL;\n#endif\n\tclock_t start_time;\n\tdouble y_0;\n\tint length;\n\tDistType diameter;\n\tfloat * Dij=NULL;\n    /* to compensate noises, we never consider gaps smaller than 'abs_tol' */\n\tdouble abs_tol=1e-2; \n    /* Additionally, we never consider gaps smaller than 'abs_tol'*<avg_gap> */\n    double relative_tol=levels_sep_tol; \n\tint *ordering=NULL, *levels=NULL;\n\tdouble hierarchy_spread;\n\tfloat constant_term;\n\tint count;\n\tdouble degree;\n\tint step;\n\tfloat val;\n\tdouble old_stress, new_stress;\n\tbool converged;\n\tint len;\n    int num_levels;\n    float *hierarchy_boundaries;\n\n\tif (graph[0].edists!=NULL) {\n\t\tfor (i=0; i<n; i++) {\n\t\t\tfor (j=1; j<graph[i].nedges; j++) {\n\t\t\t\t directionalityExist = directionalityExist || (graph[i].edists[j]!=0);\n\t\t\t}\n\t\t}\n\t}\n\tif (!directionalityExist) {\n\t\treturn stress_majorization_kD_mkernel(graph, n, nedges_graph, d_coords, dim, smart_ini, model, maxi);\n\t}\n\n\t/******************************************************************\n\t** First, partition nodes into layers: These are our constraints **\n\t******************************************************************/\n\n\tif (smart_ini) {\n\t\tdouble* x;\n\t\tdouble* y;\n\t\tif (dim>2) {\n\t\t\t/* the dim==2 case is handled below\t\t\t */\n\t\t\tstress_majorization_kD_mkernel(graph, n, nedges_graph, d_coords+1, dim-1, smart_ini, model, 15);\n\t\t\t/* now copy the y-axis into the (dim-1)-axis */\n\t\t\tfor (i=0; i<n; i++) {\n\t\t\t\td_coords[dim-1][i] = d_coords[1][i];\n\t\t\t}\n\t\t}\n\n\t\tx = d_coords[0]; y = d_coords[1];\n\t\tcompute_y_coords(graph, n, y, n);\n\t\thierarchy_spread = compute_hierarchy(graph, n, abs_tol, relative_tol, y, &ordering, &levels, &num_levels);\n\t\tif (num_levels<=1) {\n\t\t\t/* no hierarchy found, use faster algorithm */\n\t\t\treturn stress_majorization_kD_mkernel(graph, n, nedges_graph, d_coords, dim, smart_ini, model, maxi);\n\t\t}\n\n\t\tif (levels_gap>0) {\n\t\t\t/* ensure that levels are separated in the initial layout */\n\t\t\tdouble displacement = 0;\n\t\t\tint stop;\n\t\t\tfor (i=0; i<num_levels; i++) {\n\t\t\t\tdisplacement+=MAX((double)0,levels_gap-(y[ordering[levels[i]]]+displacement-y[ordering[levels[i]-1]]));\n\t\t\t\tstop = i<num_levels-1 ? levels[i+1] : n;\n\t\t\t\tfor (j=levels[i]; j<stop; j++) {\n\t\t\t\t\ty[ordering[j]] += displacement;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (dim==2) {\n\t\t\tIMDS_given_dim(graph, n, y, x, Epsilon);\n\t\t}\n\t}\n\telse {\n\t\tif(initLayout(graph, n, dim, d_coords) && Verbose) {\n\t\t\tfprintf(stderr,\"Using coords from file as starting arrangement\\n\");\n\t\t}\n\t\thierarchy_spread = compute_hierarchy(graph, n, abs_tol, relative_tol, NULL, &ordering, &levels, &num_levels);\t\t\n\t}\n    if (n == 1) return 0;\n\n\thierarchy_boundaries = N_GNEW(num_levels, float);\n\n\t/****************************************************\n\t** Compute the all-pairs-shortest-distances matrix **\n\t****************************************************/\n\n\tif (maxi==0)\n\t\treturn iterations;\n\n    if (model == MODEL_SUBSET) {\n        /* weight graph to separate high-degree nodes */\n        /* and perform slower Dijkstra-based computation */\n        if (Verbose)\n            fprintf(stderr, \"Calculating subset model\");\n        Dij = compute_apsp_artifical_weights_packed(graph, n);\n    } else if (model == MODEL_CIRCUIT) {\n        Dij = circuitModel(graph, n);\n        if (!Dij) {\n            agerr(AGWARN,\n                  \"graph is disconnected. Hence, the circuit model\\n\");\n            agerr(AGPREV,\n                  \"is undefined. Reverting to the shortest path model.\\n\");\n        }\n    }\n    if (!Dij) {\n        if (Verbose)\n            fprintf(stderr, \"Calculating shortest paths\");\n        Dij = compute_apsp_packed(graph, n);\n    }\n\n\tdiameter=-1;\n\tlength = n+n*(n-1)/2;\n\tfor (i=0; i<length; i++) {\n\t\tif (Dij[i]>diameter) {\n\t\t\tdiameter = (int)Dij[i];\n\t\t}\n\t}\n\n\tif (!smart_ini) {\n\t\t/* for numerical stability, scale down layout\t\t */\n\t\t/* No Jiggling, might conflict with constraints\t\t\t */\n\t\tdouble max=1;\t\t\n\t\tfor (i=0; i<dim; i++) {\t\n\t\t\tfor (j=0; j<n; j++) {\n\t\t\t\tif (fabs(d_coords[i][j])>max) {\n\t\t\t\t\tmax=fabs(d_coords[i][j]);\n\t\t\t\t}\n\t\t\t}\t\n\t\t}\n\t\tfor (i=0; i<dim; i++) {\t\n\t\t\tfor (j=0; j<n; j++) {\n\t\t\t\td_coords[i][j]*=10/max;\n\t\t\t}\t\n\t\t}\n\t}\t\t\n\n\t/*\n\tif (levels_gap>0) {\n\t\tint length = n+n*(n-1)/2;\n\t\tdouble sum1, sum2, scale_ratio;\n\t\tint count;\n\t\tsum1=(float)(n*(n-1)/2);\n\t\tsum2=0;\n\t\tfor (count=0, i=0; i<n-1; i++) {\n\t\t\tcount++; // skip self distance\n\t\t\tfor (j=i+1; j<n; j++,count++) {\n\t\t\t\tsum2+=distance_kD(d_coords, dim, i, j)/Dij[count];\n\t\t\t}\n\t\t}\n\t\tscale_ratio=sum2/sum1;\n\t\t// double scale_ratio=10; \n\t\tfor (i=0; i<length; i++) {\n\t\t\tDij[i]*=(float)scale_ratio;\n\t\t}\n\t}\n\t*/\n\n\t/**************************\n\t** Layout initialization **\n\t**************************/\n\n\tfor (i=0; i<dim; i++) {\t\t\n\t\torthog1(n, d_coords[i]);\n\t}\n\n\t/* for the y-coords, don't center them, but translate them so y[0]=0 */\n\ty_0 = d_coords[1][0];\n\tfor (i=0; i<n; i++) {\n\t\td_coords[1][i] -= y_0;\n\t}\n\n\tcoords = N_GNEW(dim, float*);\n\tf_storage = N_GNEW(dim*n, float);\n\tfor (i=0; i<dim; i++) {\n\t\tcoords[i] = f_storage+i*n;\n\t\tfor (j=0; j<n; j++) {\n\t\t\tcoords[i][j] = (float)(d_coords[i][j]);\n\t\t}\n\t}\n\n\t/* compute constant term in stress sum\n\t * which is \\sum_{i<j} w_{ij}d_{ij}^2\n     */\n\tconstant_term=(float)(n*(n-1)/2);\n\t\n\t/**************************\n\t** Laplacian computation **\n\t**************************/\n\t\t\t\n\tlap2 = Dij;\n\tlap_length = n+n*(n-1)/2;\n\tsquare_vec(lap_length, lap2);\n\t/* compute off-diagonal entries */\n\tinvert_vec(lap_length, lap2);\n\t\n\t/* compute diagonal entries */\n\tcount=0;\n\tdegrees = N_GNEW(n, double);\n\tset_vector_val(n, 0, degrees);\n\tfor (i=0; i<n-1; i++) {\n\t\tdegree=0;\n\t\tcount++; // skip main diag entry\n\t\tfor (j=1; j<n-i; j++,count++) {\n\t\t\tval = lap2[count];\n\t\t\tdegree+=val; degrees[i+j]-=val;\n\t\t}\n\t\tdegrees[i]-=degree;\n\t}\n\tfor (step=n,count=0,i=0; i<n; i++,count+=step,step--) {\n\t\tlap2[count]=(float)degrees[i];\n\t}\n\n#ifdef NONCORE\n\tfpos_t pos;\n\tif (n>max_nodes_in_mem) {\n\t\t#define FILENAME \"tmp_Dij$$$.bin\"\n\t\tfp = fopen(FILENAME, \"wb\");\n\t\tfwrite(lap2, sizeof(float), lap_length, fp);\n\t\tfclose(fp);\n\t}\n#endif\n\t\t\n\t/*************************\n\t** Layout optimization  **\n\t*************************/\n\t\n\tb = N_GNEW (dim, float*);\n\tb[0] = N_GNEW (dim*n, float);\n\tfor (k=1; k<dim; k++) {\n\t\tb[k] = b[0]+k*n;\n\t}\n\n\ttmp_coords = N_GNEW(n, float);\n\tdist_accumulator = N_GNEW(n, float);\n#ifdef NONCORE\n\tif (n<=max_nodes_in_mem) {\n#endif\n\t\tlap1 = N_GNEW(lap_length, float);\n#ifdef NONCORE\n\t}\n\telse {\n\t\tlap1=lap2;\n\t\tfp = fopen(FILENAME, \"rb\");\n\t\tfgetpos(fp, &pos);\n\t}\n#endif\n\t\n\told_stress=DBL_MAX; /* at least one iteration */\n\n\tstart_time = clock();\n\n\tunpackedLap = unpackMatrix(lap2, n);\n#ifdef MOSEK\n\tmskEnv = mosek_init_hier(lap2,n,ordering,levels,num_levels,levels_gap);\n#else\n\tcMajEnv=initConstrainedMajorization(lap2, n, ordering, levels, num_levels);\n#endif\n\n\tfor (converged=false,iterations=0; iterations<maxi && !converged; iterations++) {\n\n\t\t/* First, construct Laplacian of 1/(d_ij*|p_i-p_j|)  */\n\t\tset_vector_val(n, 0, degrees);\n#ifdef NONCORE\n\t\tif (n<=max_nodes_in_mem) {\n#endif\n\t\t\tsqrt_vecf(lap_length, lap2, lap1);\n#ifdef NONCORE\n\t\t}\n\t\telse {\n\t\t\tsqrt_vec(lap_length, lap1);\n\t\t}\n#endif\n\t\tfor (count=0,i=0; i<n-1; i++) {\n\t\t\tlen = n-i-1;\n\t\t\t/* init 'dist_accumulator' with zeros */\n\t\t\tset_vector_valf(n, 0, dist_accumulator);\n\t\t\t\n\t\t\t/* put into 'dist_accumulator' all squared distances \n             * between 'i' and 'i'+1,...,'n'-1\n             */\n\t\t\tfor (k=0; k<dim; k++) {\t\n\t\t\t\tset_vector_valf(len, coords[k][i], tmp_coords);\n\t\t\t\tvectors_mult_additionf(len, tmp_coords, -1, coords[k]+i+1);\n\t\t\t\tsquare_vec(len, tmp_coords);\n\t\t\t\tvectors_additionf(len, tmp_coords, dist_accumulator, dist_accumulator);\n\t\t\t}\t\t\t\n\t\t\n\t\t\t/* convert to 1/d_{ij} */\n\t\t\tinvert_sqrt_vec(len, dist_accumulator);\n\t\t\t/* detect overflows */\n\t\t\tfor (j=0; j<len; j++) {\n\t\t\t\tif (dist_accumulator[j]>=FLT_MAX || dist_accumulator[j]<0) {\n\t\t\t\t\tdist_accumulator[j]=0;\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tcount++; /* save place for the main diagonal entry */\n\t\t\tdegree=0;\n\t\t\tfor (j=0; j<len; j++,count++) {\n\t\t\t\tval=lap1[count]*=dist_accumulator[j];\n\t\t\t\tdegree+=val; degrees[i+j+1]-=val;\n\t\t\t}\n\t\t\tdegrees[i]-=degree;\t\t\t\n\t\t}\n\t\tfor (step=n,count=0,i=0; i<n; i++,count+=step,step--) {\n\t\t\tlap1[count]=(float)degrees[i];\n\t\t}\n\n\t\t/* Now compute b[] (L^(X(t))*X(t)) */\n\t\tfor (k=0; k<dim; k++) {\t\n\t\t\t/* b[k] := lap1*coords[k] */\n\t\t\tright_mult_with_vector_ff(lap1, n, coords[k], b[k]);\n\t\t}\n\t\t\n\t\t/* compute new stress\n\t\t * remember that the Laplacians are negated, so we subtract \n         * instead of add and vice versa\n         */\n\t\tnew_stress=0;\n\t\tfor (k=0; k<dim; k++) {\t\n\t\t\tnew_stress+=vectors_inner_productf(n, coords[k], b[k]);\n\t\t}\n\t\tnew_stress*=2;\n\t\tnew_stress+=constant_term; // only after mult by 2\t\t\n#ifdef NONCORE\n\t\tif (n>max_nodes_in_mem) {\n\t\t\t/* restore lap2 from disk */\n\t\t\tfsetpos(fp, &pos);\n\t\t\tfread(lap2, sizeof(float), lap_length, fp);\n\t\t}\n#endif\n\t\tfor (k=0; k<dim; k++) {\t\n\t\t\tright_mult_with_vector_ff(lap2, n, coords[k], tmp_coords);\n\t\t\tnew_stress-=vectors_inner_productf(n, coords[k], tmp_coords);\n\t\t}\n\n#ifdef ALTERNATIVE_STRESS_CALC\n\t\t{\n\t\tdouble mat_stress=new_stress;\n\t\tdouble compute_stress(float ** coords, float * lap, int dim, int n);\n\t\tnew_stress = compute_stress(coords, lap2, dim, n);\n\t\tif (fabs(mat_stress-new_stress)/min(mat_stress,new_stress)>0.001) {\n\t\t\tfprintf(stderr,\"Diff stress vals: %lf %lf (iteration #%d)\\n\", mat_stress, new_stress,iterations);\n\t\t}\n\t\t}\n#endif\n\t\t/* check for convergence */\n\t    if (Verbose && (iterations % 1 == 0)) {\n            fprintf(stderr, \"%.3f \", new_stress);\n            if (iterations % 10 == 0)\n                fprintf(stderr, \"\\n\");\n        }\n\t\tconverged = fabs(new_stress-old_stress)/fabs(old_stress+1e-10) < Epsilon;\n\t\tconverged = converged || (iterations>1 && new_stress>old_stress); \n\t\t\t/* in first iteration we allowed stress increase, which \n             * might result ny imposing constraints\n             */\n\t\told_stress = new_stress;\n\t\t\n\t\tfor (k=0; k<dim; k++) {\n\t\t\t/* now we find the optimizer of trace(X'LX)+X'B by solving 'dim' \n             * system of equations, thereby obtaining the new coordinates.\n\t\t\t * If we use the constraints (given by the var's: 'ordering', \n             * 'levels' and 'num_levels'), we cannot optimize \n             * trace(X'LX)+X'B by simply solving equations, but we have\n\t\t\t * to use a quadratic programming solver\n\t\t\t * note: 'lap2' is a packed symmetric matrix, that is its \n             * upper-triangular part is arranged in a vector row-wise\n\t\t\t * also note: 'lap2' is really the negated laplacian (the \n             * laplacian is -'lap2')\n             */\n\t\t\t\n\t\t\tif (k==1) {\n\t\t\t\t/* use quad solver in the y-dimension */\n#ifdef MOSEK\n\t\t\t\tmosek_quad_solve_hier(mskEnv,b[k],n,coords[k],hierarchy_boundaries);\n#else\n\t\t\t\tconstrained_majorization_gradient_projection(cMajEnv, b[k], coords, dim, k, localConstrMajorIterations, hierarchy_boundaries, levels_gap);\n\t\t\t\t//constrained_majorization_new_with_gaps(cMajEnv, b[k], coords, dim, k, localConstrMajorIterations, hierarchy_boundaries, levels_gap);\n#endif\n\t\n\t\t\t}\n\t\t\telse {\n\t\t\t\t/* use conjugate gradient for all dimensions except y */\n\t\t\t\tconjugate_gradient_mkernel(lap2, coords[k], b[k], n, conj_tol, n);\t\n\t\t\t}\n\t\t}\n\t}\n    if (Verbose) {\n        fprintf(stderr, \"\\nfinal e = %f %d iterations %.2f sec\\n\",\n            new_stress, iterations, elapsed_sec());\n    }\n\tfree (hierarchy_boundaries);\n#ifdef MOSEK\n\tmosek_delete(mskEnv);\n#else\n\tdeleteCMajEnv(cMajEnv);\n#endif\n\t\n\tif (coords!=NULL) {\n\t\tfor (i=0; i<dim; i++) {\n\t\t\tfor (j=0; j<n; j++) {\n\t\t\t\td_coords[i][j] = coords[i][j];\n\t\t\t}\n\t\t}\n\t\tfree (coords[0]); free (coords);\n\t}\n\t\n\tif (b) {\t\n\t\tfree (b[0]); free (b);\n\t}\n\tfree (tmp_coords);\n\tfree (dist_accumulator);\n\tfree (degrees);\n\tfree (lap2);\n\t\n\n#ifdef NONCORE\n\tif (n<=max_nodes_in_mem) {\n#endif\n\t\tfree (lap1); \n#ifdef NONCORE\n\t}\n#endif\n\n\tfree (ordering); \n\t\n\tfree (levels);\n\n \tif (unpackedLap) {\n\t\tfree (unpackedLap[0]); free (unpackedLap);\n\t}\n    return iterations;\n}\n#endif /* DIGCOLA */\n\n"
  },
  {
    "path": "experimental/neatogen/constrained_majorization_vsep.c",
    "content": "/**********************************************************\n * Based on constrained_majorization.c\n *\n * Perform stress majorization subject\n * to separation constraints.\n *\n * Available separation constraints so far are:\n *  o Directed edge constraints\n *  o Node non-overlap constraints\n *  o Cluster containment constraints\n *  o Cluster/node non-overlap constraints\n *\n * Tim Dwyer, 2006\n **********************************************************/\n\n#include \"digcola.h\"\n#ifdef DIGCOLA\n#include <math.h>\n#include <stdlib.h>\n#include <time.h>\n#include <stdio.h>\n#include <float.h>\n#include \"stress.h\"\n#include \"dijkstra.h\"\n#include \"bfs.h\"\n#include \"matrix_ops.h\"\n#include \"kkutils.h\"\n#include \"conjgrad.h\"\n#include <csolve_VPSC.h>\n#include \"quad_prog_vpsc.h\"\n#include \"quad_prog_solver.h\"\n#include \"matrix_ops.h\"\n\n#define localConstrMajorIterations 1000\n\nint \nstress_majorization_vsep(\n    vtx_data* graph,    /* Input graph in sparse representation\t */\n    int n,              /* Number of nodes */\n    int nedges_graph,   /* Number of edges */\n    double** d_coords,  /* Coordinates of nodes (output layout)  */\n    int dim,            /* Dimemsionality of layout */\n    int model,          /* difference model */\n    int maxi,           /* max iterations */\n    vsep_options* opt\n)\n{\n    int iterations = 0;    /* Output: number of iteration of the process */\n\n\t/*************************************************\n\t** Computation of full, dense, unrestricted k-D ** \n\t** stress minimization by majorization          ** \n\t** This function imposes HIERARCHY CONSTRAINTS  **\n\t*************************************************/\n\n\tint i,j,k;\n\tfloat * lap1 = NULL;\n\tfloat * dist_accumulator = NULL;\n\tfloat * tmp_coords = NULL;\n\tfloat ** b = NULL;\n\tdouble * degrees = NULL;\n\tfloat * lap2=NULL;\n\tint lap_length;\n\tfloat * f_storage=NULL;\n\tfloat ** coords=NULL;\n    int orig_n=n;\n\n\t//double conj_tol=tolerance_cg;        /* tolerance of Conjugate Gradient */\n\tCMajEnvVPSC *cMajEnvHor = NULL;\n\tCMajEnvVPSC *cMajEnvVrt = NULL;\n\tclock_t start_time;\n\tdouble y_0;\n\tint length;\n\tDistType diameter;\n\tfloat * Dij=NULL;\n\tfloat constant_term;\n\tint count;\n\tdouble degree;\n\tint step;\n\tfloat val;\n\tdouble old_stress, new_stress;\n\tbool converged;\n\tint len;\n    double nsizeScale=0;\n    float maxEdgeLen=0;\n\n    initLayout(graph, n, dim, d_coords);\n    if (n == 1) return 0;\n\n    for(i=0;i<n;i++) {\n        for(j=1;j<graph[i].nedges;j++) {\n            maxEdgeLen=MAX(graph[i].ewgts[j],maxEdgeLen);\n        }\n    }\n\n\t/****************************************************\n\t** Compute the all-pairs-shortest-distances matrix **\n\t****************************************************/\n\n\tif (maxi==0)\n\t\treturn iterations;\n\n    if (model == MODEL_SUBSET) {\n        /* weight graph to separate high-degree nodes */\n        /* and perform slower Dijkstra-based computation */\n        if (Verbose)\n            fprintf(stderr, \"Calculating subset model\");\n        Dij = compute_apsp_artifical_weights_packed(graph, n);\n    } else if (model == MODEL_CIRCUIT) {\n        Dij = circuitModel(graph, n);\n        if (!Dij) {\n            agerr(AGWARN,\n                  \"graph is disconnected. Hence, the circuit model\\n\");\n            agerr(AGPREV,\n                  \"is undefined. Reverting to the shortest path model.\\n\");\n        }\n    }\n    if (!Dij) {\n        if (Verbose)\n            fprintf(stderr, \"Calculating shortest paths\\n \");\n        Dij = compute_apsp_packed(graph, n);\n    }\n\n\tdiameter=-1;\n\tlength = n+n*(n-1)/2;\n\tfor (i=0; i<length; i++) {\n\t\tif (Dij[i]>diameter) {\n\t\t\tdiameter = (int)Dij[i];\n\t\t}\n\t}\n\n    /* for numerical stability, scale down layout\t\t */\n    /* No Jiggling, might conflict with constraints\t\t\t */\n    double max=1;\t\t\n    for (i=0; i<dim; i++) {\t\n        for (j=0; j<n; j++) {\n            if (fabs(d_coords[i][j])>max) {\n                max=fabs(d_coords[i][j]);\n            }\n        }\t\n    }\n    for (i=0; i<dim; i++) {\t\n        for (j=0; j<n; j++) {\n            d_coords[i][j]*=10/max;\n        }\t\n    }\n\n\t/**************************\n\t** Layout initialization **\n\t**************************/\n\n\tfor (i=0; i<dim; i++) {\t\t\n\t\torthog1(n, d_coords[i]);\n\t}\n\n\t/* for the y-coords, don't center them, but translate them so y[0]=0 */\n\ty_0 = d_coords[1][0];\n\tfor (i=0; i<n; i++) {\n\t\td_coords[1][i] -= y_0;\n\t}\n\n\t/**************************\n\t** Laplacian computation **\n\t**************************/\n\t\t\t\n    lap2 = Dij;\n    lap_length = n+n*(n-1)/2;\n    square_vec(lap_length, lap2);\n    /* compute off-diagonal entries */\n    invert_vec(lap_length, lap2);\n    \n    if(opt->clusters->nclusters>0) {\n        int nn = n+opt->clusters->nclusters*2;\n        int clap_length = nn+nn*(nn-1)/2;\n        float *clap = N_GNEW(clap_length, float);\n        float *cdegrees = N_GNEW(nn, float);\n        int c0,c1;\n        float v;\n        c0=c1=0;\n        for(i=0;i<nn;i++) {\n            for(j=0;j<nn-i;j++) {\n                if(i<n && j<n-i) {\n                    v=lap2[c0++];\n                } else {\n                    //v=j==1?i%2:0;\n                    if(j==1&&i%2==1) {\n                        v=maxEdgeLen;\n                        v*=v;\n                        if(v>0.01) {\n                            v=1.0/v;\n                        }\n                    }\n                    else v=0;\n                }\n                clap[c1++]=v;\n            }\n        }\n        free(lap2);\n        lap2=clap;\n        n=nn;\n        lap_length=clap_length;\n    }\n    /* compute diagonal entries */\n    count=0;\n    degrees = N_GNEW(n, double);\n    set_vector_val(n, 0, degrees);\n    for (i=0; i<n-1; i++) {\n        degree=0;\n        count++; // skip main diag entry\n        for (j=1; j<n-i; j++,count++) {\n            val = lap2[count];\n            degree+=val; degrees[i+j]-=val;\n        }\n        degrees[i]-=degree;\n    }\n    for (step=n,count=0,i=0; i<n; i++,count+=step,step--) {\n        lap2[count]=(float)degrees[i];\n    }\n\n\tcoords = N_GNEW(dim, float*);\n\tf_storage = N_GNEW(dim*n, float);\n\tfor (i=0; i<dim; i++) {\n\t\tcoords[i] = f_storage+i*n;\n\t\tfor (j=0; j<n; j++) {\n\t\t\tcoords[i][j] = j<orig_n?(float)(d_coords[i][j]):0;\n\t\t}\n\t}\n\n\t/* compute constant term in stress sum\n\t * which is \\sum_{i<j} w_{ij}d_{ij}^2\n     */\n\tconstant_term=(float)(n*(n-1)/2);\n\t\n\t/*************************\n\t** Layout optimization  **\n\t*************************/\n\t\n\tb = N_GNEW (dim, float*);\n\tb[0] = N_GNEW (dim*n, float);\n\tfor (k=1; k<dim; k++) {\n\t\tb[k] = b[0]+k*n;\n\t}\n\n\ttmp_coords = N_GNEW(n, float);\n\tdist_accumulator = N_GNEW(n, float);\n\t\n\told_stress=DBL_MAX; /* at least one iteration */\n\n\tstart_time = clock();\n\n\tcMajEnvHor=initCMajVPSC(n,lap2,graph,opt,0);\n\tcMajEnvVrt=initCMajVPSC(n,lap2,graph,opt,opt->diredges);\n\n\tlap1 = N_GNEW(lap_length, float);\n\n\tfor (converged=false,iterations=0; iterations<maxi && !converged; iterations++) {\n\n\t\t/* First, construct Laplacian of 1/(d_ij*|p_i-p_j|)  */\n\t\tset_vector_val(n, 0, degrees);\n\t\tsqrt_vecf(lap_length, lap2, lap1);\n\t\tfor (count=0,i=0; i<n-1; i++) {\n\t\t\tlen = n-i-1;\n\t\t\t/* init 'dist_accumulator' with zeros */\n\t\t\tset_vector_valf(n, 0, dist_accumulator);\n\t\t\t\n\t\t\t/* put into 'dist_accumulator' all squared distances \n             * between 'i' and 'i'+1,...,'n'-1\n             */\n\t\t\tfor (k=0; k<dim; k++) {\t\n\t\t\t\tset_vector_valf(len, coords[k][i], tmp_coords);\n\t\t\t\tvectors_mult_additionf(len, tmp_coords, -1, coords[k]+i+1);\n\t\t\t\tsquare_vec(len, tmp_coords);\n\t\t\t\tvectors_additionf(len, tmp_coords, dist_accumulator, dist_accumulator);\n\t\t\t}\t\t\t\n\t\t\n\t\t\t/* convert to 1/d_{ij} */\n\t\t\tinvert_sqrt_vec(len, dist_accumulator);\n\t\t\t/* detect overflows */\n\t\t\tfor (j=0; j<len; j++) {\n\t\t\t\tif (dist_accumulator[j]>=FLT_MAX || dist_accumulator[j]<0) {\n\t\t\t\t\tdist_accumulator[j]=0;\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tcount++; /* save place for the main diagonal entry */\n\t\t\tdegree=0;\n\t\t\tfor (j=0; j<len; j++,count++) {\n\t\t\t\tval=lap1[count]*=dist_accumulator[j];\n\t\t\t\tdegree+=val; degrees[i+j+1]-=val;\n\t\t\t}\n\t\t\tdegrees[i]-=degree;\t\t\t\n\t\t}\n\t\tfor (step=n,count=0,i=0; i<n; i++,count+=step,step--) {\n\t\t\tlap1[count]=(float)degrees[i];\n\t\t}\n\n\t\t/* Now compute b[] (L^(X(t))*X(t)) */\n\t\tfor (k=0; k<dim; k++) {\t\n\t\t\t/* b[k] := lap1*coords[k] */\n\t\t\tright_mult_with_vector_ff(lap1, n, coords[k], b[k]);\n\t\t}\n\t\t\n\t\t/* compute new stress\n\t\t * remember that the Laplacians are negated, so we subtract \n         * instead of add and vice versa\n         */\n\t\tnew_stress=0;\n\t\tfor (k=0; k<dim; k++) {\t\n\t\t\tnew_stress+=vectors_inner_productf(n, coords[k], b[k]);\n\t\t}\n\t\tnew_stress*=2;\n\t\tnew_stress+=constant_term; // only after mult by 2\t\t\n\t\tfor (k=0; k<dim; k++) {\t\n\t\t\tright_mult_with_vector_ff(lap2, n, coords[k], tmp_coords);\n\t\t\tnew_stress-=vectors_inner_productf(n, coords[k], tmp_coords);\n\t\t}\n\n#ifdef ALTERNATIVE_STRESS_CALC\n\t\t{\n\t\tdouble mat_stress=new_stress;\n\t\tdouble compute_stress(float ** coords, float * lap, int dim, int n);\n\t\tnew_stress = compute_stress(coords, lap2, dim, n);\n\t\tif (fabs(mat_stress-new_stress)/min(mat_stress,new_stress)>0.001) {\n\t\t\tfprintf(stderr,\"Diff stress vals: %lf %lf (iteration #%d)\\n\", mat_stress, new_stress,iterations);\n\t\t}\n\t\t}\n#endif\n\t\t/* check for convergence */\n\t    if (Verbose && (iterations % 1 == 0)) {\n            fprintf(stderr, \"%.3f \", new_stress);\n            if (iterations % 10 == 0)\n                fprintf(stderr, \"\\n\");\n\t    }\n\t\tconverged = new_stress < old_stress && fabs(new_stress-old_stress)/fabs(old_stress+1e-10) < Epsilon;\n\t\t//converged = converged || (iterations>1 && new_stress>old_stress); \n\t\t\t/* in first iteration we allowed stress increase, which \n             * might result ny imposing constraints\n             */\n\t\told_stress = new_stress;\n\n        // in determining non-overlap constraints we gradually scale up the\n        // size of nodes to avoid local minima\n        if((iterations>=maxi-1||converged)&&opt->noverlap==1&&nsizeScale<0.999) {\n            nsizeScale+=0.05;\n            fprintf(stderr,\"nsizescale=%f,iterations=%d\\n\",nsizeScale,iterations);\n            iterations=0;\n            converged = false;\n        }\n\t\t\n\n        /* now we find the optimizer of trace(X'LX)+X'B by solving 'dim' \n         * system of equations, thereby obtaining the new coordinates.\n         * If we use the constraints (given by the var's: 'ordering', \n         * 'levels' and 'num_levels'), we cannot optimize \n         * trace(X'LX)+X'B by simply solving equations, but we have\n         * to use a quadratic programming solver\n         * note: 'lap2' is a packed symmetric matrix, that is its \n         * upper-triangular part is arranged in a vector row-wise\n         * also note: 'lap2' is really the negated laplacian (the \n         * laplacian is -'lap2')\n         */\n        \n        if(opt->noverlap==1 && nsizeScale > 0.001) {\n            generateNonoverlapConstraints(cMajEnvHor,nsizeScale,coords,0,nsizeScale<0.5?false:true,opt);\n        }\n        if(cMajEnvHor->m > 0) {\n#ifdef MOSEK\n            if(opt->mosek) {\n                mosek_quad_solve_sep(cMajEnvHor->mosekEnv,n,b[0],coords[0]);\n            } else\n#endif // MOSEK\n            constrained_majorization_vpsc(cMajEnvHor,b[0],coords[0],localConstrMajorIterations);\n        } else {\n            // if there are no constraints then use conjugate gradient\n            // optimisation which should be considerably faster\n\t\t\tconjugate_gradient_mkernel(lap2, coords[0], b[0], n, tolerance_cg, n);\t\n        }\n        if(opt->noverlap==1 && nsizeScale > 0.001) {\n            generateNonoverlapConstraints(cMajEnvVrt,nsizeScale,coords,1,false,opt);\n        }\n        if(cMajEnvVrt->m > 0) {\n#ifdef MOSEK\n            if(opt->mosek) {\n                mosek_quad_solve_sep(cMajEnvVrt->mosekEnv,n,b[1],coords[1]);\n            } else\n#endif // MOSEK\n            constrained_majorization_vpsc(cMajEnvVrt,b[1],coords[1],localConstrMajorIterations);\n        } else {\n\t\t\tconjugate_gradient_mkernel(lap2,coords[1],b[1],n,tolerance_cg,n);\t\n        }\n\t}\n    if (Verbose) {\n        fprintf(stderr, \"\\nfinal e = %f %d iterations %.2f sec\\n\",\n            new_stress, iterations, elapsed_sec());\n    }\n\tdeleteCMajEnvVPSC(cMajEnvHor);\n\tdeleteCMajEnvVPSC(cMajEnvVrt);\n\n    if (opt->noverlap==2) {\n        fprintf(stderr,\"Removing overlaps as post-process...\\n\");\n        removeoverlaps(orig_n,coords,opt);\n    }\n\t\n\tif (coords!=NULL) {\n\t\tfor (i=0; i<dim; i++) {\n\t\t\tfor (j=0; j<orig_n; j++) {\n\t\t\t\td_coords[i][j] = coords[i][j];\n\t\t\t}\n\t\t}\n\t\tfree (coords[0]); free (coords);\n\t}\n\t\n\tif (b) {\t\n\t\tfree (b[0]); free (b);\n\t}\n\tfree (tmp_coords);\n\tfree (dist_accumulator);\n\tfree (degrees);\n\tfree (lap2);\n\tfree (lap1); \n\n    return iterations;\n}\n#endif /* DIGCOLA */\n\n// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=4:softtabstop=4 :\n"
  },
  {
    "path": "experimental/neatogen/constraint.c",
    "content": "/* $Id: constraint.c,v 1.7 2006/01/17 22:56:22 erg Exp $ $Revision: 1.7 $ */\n/* vim:set shiftwidth=4 ts=8: */\n\n/**********************************************************\n*      This software is part of the graphviz package      *\n*                http://www.graphviz.org/                 *\n*                                                         *\n*            Copyright (c) 1994-2004 AT&T Corp.           *\n*                and is licensed under the                *\n*            Common Public License, Version 1.0           *\n*                      by AT&T Corp.                      *\n*                                                         *\n*        Information and Software Systems Research        *\n*              AT&T Research, Florham Park NJ             *\n**********************************************************/\n\n\n#ifdef HAVE_CONFIG_H\n#include \"config.h\"\n#endif\n\n#include \"neato.h\"\n#include \"adjust.h\"\n\n/* For precision, scale up before algorithms, then scale down */\n#define SCALE 10   \n#define SCALE2 (SCALE/2)\n\ntypedef struct nitem {\n    Dtlink_t link;\n    int val;\n    point pos;\t\t\t/* position for sorting */\n    node_t *np;\t\t\t/* base node */\n    node_t *cnode;\t\t/* corresponding node in constraint graph */\n    node_t *vnode;\t\t/* corresponding node in neighbor graph */\n    box bb;\n} nitem;\n\ntypedef int (*distfn) (box *, box *);\ntypedef int (*intersectfn) (nitem *, nitem *);\n\nstatic int cmpitem(Dt_t * d, int *p1, int *p2, Dtdisc_t * disc)\n{\n    NOTUSED(d);\n    NOTUSED(disc);\n\n    return (*p1 - *p2);\n}\n\nstatic Dtdisc_t constr = {\n    offsetof(nitem, val),\n    sizeof(int),\n    offsetof(nitem, link),\n    NIL(Dtmake_f),\n    NIL(Dtfree_f),\n    (Dtcompar_f) cmpitem,\n    NIL(Dthash_f),\n    NIL(Dtmemory_f),\n    NIL(Dtevent_f)\n};\n\nstatic int distY(box * b1, box * b2)\n{\n    return ((b1->UR.y - b1->LL.y) + (b2->UR.y - b2->LL.y)) / 2;\n}\n\nstatic int distX(box * b1, box * b2)\n{\n    return ((b1->UR.x - b1->LL.x) + (b2->UR.x - b2->LL.x)) / 2;\n}\n\n/* intersectX0:\n * Return true if boxes could overlap if shifted in y but don't,\n * or if actually overlap and an y move is smallest to remove overlap.\n * Otherwise (no x overlap or a x move is smaller), return false.\n * Assume q pos to above of p pos.\n */\nstatic int intersectX0(nitem * p, nitem * q)\n{\n    int xdelta, ydelta;\n    int v = ((p->bb.LL.x <= q->bb.UR.x) && (q->bb.LL.x <= p->bb.UR.x));\n    if (v == 0)  /* no x overlap */\n\treturn 0;\n    if (p->bb.UR.y < q->bb.LL.y) /* but boxes don't really overlap */\n\treturn 1;\n    ydelta = distY(&p->bb,&q->bb) - (q->pos.y - p->pos.y);\n    if (q->pos.x >= p->pos.x) \n\txdelta = distX(&p->bb,&q->bb) - (q->pos.x - p->pos.x); \n    else\n\txdelta = distX(&p->bb,&q->bb) - (p->pos.x - q->pos.x); \n    return (ydelta <= xdelta);\n}\n\n/* intersectY0:\n * Return true if boxes could overlap if shifted in x but don't,\n * or if actually overlap and an x move is smallest to remove overlap.\n * Otherwise (no y overlap or a y move is smaller), return false.\n * Assume q pos to right of p pos.\n */\nstatic int intersectY0(nitem * p, nitem * q)\n{\n    int xdelta, ydelta;\n    int v = ((p->bb.LL.y <= q->bb.UR.y) && (q->bb.LL.y <= p->bb.UR.y));\n    if (v == 0)  /* no y overlap */\n\treturn 0;\n    if (p->bb.UR.x < q->bb.LL.x) /* but boxes don't really overlap */\n\treturn 1;\n    xdelta = distX(&p->bb,&q->bb) - (q->pos.x - p->pos.x);\n    if (q->pos.y >= p->pos.y) \n\tydelta = distY(&p->bb,&q->bb) - (q->pos.y - p->pos.y); \n    else\n\tydelta = distY(&p->bb,&q->bb) - (p->pos.y - q->pos.y); \n    return (xdelta <= ydelta);\n}\n\nstatic int intersectY(nitem * p, nitem * q)\n{\n    return ((p->bb.LL.y <= q->bb.UR.y) && (q->bb.LL.y <= p->bb.UR.y));\n}\n\nstatic int intersectX(nitem * p, nitem * q)\n{\n    return ((p->bb.LL.x <= q->bb.UR.x) && (q->bb.LL.x <= p->bb.UR.x));\n}\n\n/* mapGraphs:\n */\nstatic void mapGraphs(graph_t * g, graph_t * cg, distfn dist)\n{\n    node_t *n;\n    edge_t *e;\n    edge_t *ce;\n    node_t *t;\n    node_t *h;\n    nitem *tp;\n    nitem *hp;\n    int delta;\n\n    for (n = agfstnode(g); n; n = agnxtnode(g, n)) {\n\ttp = (nitem *) ND_alg(n);\n\tt = tp->cnode;\n\tfor (e = agfstout(g, n); e; e = agnxtout(g, e)) {\n\t    hp = (nitem *) ND_alg(e->head);\n\t    delta = dist(&tp->bb, &hp->bb);\n\t    h = hp->cnode;\n\t    ce = agedge(cg, t, h);\n\t    ED_weight(ce) = 1;\n\t    if (ED_minlen(ce) < delta) {\n\t\tif (ED_minlen(ce) == 0.0) {\n\t\t    elist_append(ce, ND_out(t));\n\t\t    elist_append(ce, ND_in(h));\n\t\t}\n\t\tED_minlen(ce) = delta;\n\t    }\n\t}\n    }\n}\n\n#ifdef DEBUG\nstatic int\nindegree (graph_t * g, node_t *n)\n{\n  edge_t *e;\n  int cnt = 0;\n  for (e = agfstin(g,n); e; e = agnxtin(g,e)) cnt++;\n  return cnt; \n}\n\nstatic int\noutdegree (graph_t * g, node_t *n)\n{\n  edge_t *e;\n  int cnt = 0;\n  for (e = agfstout(g,n); e; e = agnxtout(g,e)) cnt++;\n  return cnt; \n}\n\nstatic void\nvalidate(graph_t * g)\n{\n    node_t *n;\n    edge_t *e;\n    int    i, cnt;\n  \n    cnt = 0;\n    for (n = GD_nlist(g);n; n = ND_next(n)) {\n      assert(outdegree(g,n) == ND_out(n).size);\n      for (i = 0; (e = ND_out(n).list[i]); i++) {\n        assert(e->tail == n);\n        assert( e == agfindedge(g, n, e->head)); \n      }\n      assert(indegree(g,n) == ND_in(n).size);\n      for (i = 0; (e = ND_in(n).list[i]); i++) {\n        assert(e->head == n);\n        assert( e == agfindedge(g, e->tail, n)); \n      }\n      cnt++;\n    }\n\n    assert (agnnodes(g) == cnt); \n}\n#endif\n\n#ifdef OLD\nstatic node_t *newNode(graph_t * g)\n{\n    static int id = 0;\n    char buf[100];\n\n    sprintf(buf, \"n%d\", id++);\n    return agnode(g, buf);\n}\n#endif\n\n/* mkNConstraintG:\n * Similar to mkConstraintG, except it doesn't enforce orthogonal\n * ordering. If there is overlap, as defined by intersect, the\n * nodes will kept/pushed apart in the current order. If not, no\n * constraint is enforced. If a constraint edge is added, and it\n * corresponds to a real edge, we increase the weight in an attempt\n * to keep the resulting shift short. \n */\nstatic graph_t *mkNConstraintG(graph_t * g, Dt_t * list,\n\t\t\t      intersectfn intersect, distfn dist)\n{\n    nitem *p;\n    nitem *nxp;\n    graph_t *cg = agopen(\"cg\", AGDIGRAPHSTRICT);\n    node_t *n;\n    edge_t *e;\n    node_t *lastn = NULL;\n\n    for (p = (nitem *) dtflatten(list); p;\n\t p = (nitem *) dtlink(list, (Dtlink_t *) p)) {\n\tn = agnode(cg, p->np->name);\t/* FIX */\n\tND_alg(n) = p;\n\tp->cnode = n;\n\talloc_elist(0, ND_in(n));\n\talloc_elist(0, ND_out(n));\n\tif (lastn) {\n\t    ND_next(lastn) = n;\n\t    lastn = n;\n\t} else {\n\t    lastn = GD_nlist(cg) = n;\n\t}\n    }\n    for (p = (nitem *) dtflatten(list); p;\n\t p = (nitem *) dtlink(list, (Dtlink_t *) p)) {\n\tfor (nxp = (nitem *) dtlink(link, (Dtlink_t *) p); nxp;\n\t     nxp = (nitem *) dtlink(list, (Dtlink_t *) nxp)) {\n\t    e = NULL;\n\t    if (intersect(p, nxp)) {\n\t        double delta = dist(&p->bb, &nxp->bb);\n\t        e = agedge(cg, p->cnode, nxp->cnode);\n\t\tassert (delta <= 0xFFFF);\n\t\tED_minlen(e) = delta;\n\t\tED_weight(e) = 1;\n\t    }\n\t    if (e && agfindedge(g,p->np, nxp->np)) {\n\t\tED_weight(e) = 100;\n            }\n#if 0\n\t    if (agfindedge(g,p->np, nxp->np)) {\n\t\tif (e == NULL)\n\t            e = agedge(cg, p->cnode, nxp->cnode);\n\t\tED_weight(e) = 100;\n                /* If minlen < SCALE, the nodes can't conflict or there's\n                 * an overlap but it will be removed in the orthogonal pass.\n                 * So we just keep the node's basically where they are.\n                 */\n\t\tif (SCALE > ED_minlen(e))\n\t\t    ED_minlen(e) = SCALE;\n\t    }\n#endif\n\t}\n    }\n   \n    for (p = (nitem *) dtflatten(list); p;\n\t p = (nitem *) dtlink(list, (Dtlink_t *) p)) {\n\tn = p->cnode;\n\tfor (e = agfstout(cg,n); e; e = agnxtout(cg,e)) {\n\t    elist_append(e, ND_out(n));\n\t    elist_append(e, ND_in(e->head));\n\t}\n    }\n\n    /* We could remove redundant constraints here. However, the cost of doing \n     * this may be a good deal more than the time saved in network simplex. \n     * Also, if the graph is changed, the ND_in and ND_out data has to be \n     * updated.\n     */\n    return cg;\n}\n/* mkConstraintG:\n */\nstatic graph_t *mkConstraintG(graph_t * g, Dt_t * list,\n\t\t\t      intersectfn intersect, distfn dist)\n{\n    nitem *p;\n    nitem *nxt = NULL;\n    nitem *nxp;\n    graph_t *cg = agopen(\"cg\", AGDIGRAPHSTRICT);\n    graph_t *vg;\n    node_t *prev = NULL;\n    node_t *root = NULL;\n    node_t *n = NULL;\n    edge_t *e;\n    int lcnt, cnt;\n    int oldval = -MAXINT;\n#ifdef OLD\n    double root_val;\n#endif\n    node_t *lastn = NULL;\n\n    /* count distinct nodes */\n    cnt = 0;\n    for (p = (nitem *) dtflatten(list); p;\n\t p = (nitem *) dtlink(list, (Dtlink_t *) p)) {\n\tif (oldval != p->val) {\n\t    oldval = p->val;\n\t    cnt++;\n\t}\n    }\n\n    /* construct basic chain to enforce left to right order */\n    oldval = -MAXINT;\n    lcnt = 0;\n    for (p = (nitem *) dtflatten(list); p;\n\t p = (nitem *) dtlink(list, (Dtlink_t *) p)) {\n\tif (oldval != p->val) {\n\t    oldval = p->val;\n\t    /* n = newNode (cg); */\n\t    n = agnode(cg, p->np->name);\t/* FIX */\n\t    ND_alg(n) = p;\n\t    if (root) {\n\t\tND_next(lastn) = n;\n\t\tlastn = n;\n\t    } else {\n\t\troot = n;\n#ifdef OLD\n\t\troot_val = p->val;\n#endif\n\t\tlastn = GD_nlist(cg) = n;\n\t    }\n\t    alloc_elist(lcnt, ND_in(n));\n\t    if (prev) {\n\t\tif (prev == root)\n\t\t    alloc_elist(2 * (cnt - 1), ND_out(prev));\n\t\telse\n\t\t    alloc_elist(cnt - lcnt - 1, ND_out(prev));\n\t\te = agedge(cg, prev, n);\n\t\tED_minlen(e) = SCALE;\n\t\tED_weight(e) = 1;\n\t\telist_append(e, ND_out(prev));\n\t\telist_append(e, ND_in(n));\n\t    }\n\t    lcnt++;\n\t    prev = n;\n\t}\n\tp->cnode = n;\n    }\n    alloc_elist(0, ND_out(prev));\n\n    /* add immediate right neighbor constraints\n     * Construct visibility graph, then perform transitive reduction.\n     * Remaining outedges are immediate right neighbors.\n     * FIX: Incremental algorithm to construct trans. reduction?\n     */\n    vg = agopen(\"vg\", AGDIGRAPHSTRICT);\n    for (p = (nitem *) dtflatten(list); p;\n\t p = (nitem *) dtlink(list, (Dtlink_t *) p)) {\n\tn = agnode(vg, p->np->name);\n\tp->vnode = n;\n\tND_alg(n) = p;\n    }\n    oldval = -MAXINT;\n    for (p = (nitem *) dtflatten(list); p;\n\t p = (nitem *) dtlink(list, (Dtlink_t *) p)) {\n\tif (oldval != p->val) {\t/* new pos: reset nxt */\n\t    oldval = p->val;\n\t    for (nxt = (nitem *) dtlink(link, (Dtlink_t *) p); nxt;\n\t\t nxt = (nitem *) dtlink(list, (Dtlink_t *) nxt)) {\n\t\tif (nxt->val != oldval)\n\t\t    break;\n\t    }\n\t    if (!nxt)\n\t\tbreak;\n\t}\n\tfor (nxp = nxt; nxp;\n\t     nxp = (nitem *) dtlink(list, (Dtlink_t *) nxp)) {\n\t    if (intersect(p, nxp))\n\t\tagedge(vg, p->vnode, nxp->vnode);\n\t}\n    }\n\n    /* Remove redundant constraints here. However, the cost of doing this\n     * may be a good deal more than the time saved in network simplex. Also,\n     * if the graph is changed, the ND_in and ND_out data has to be updated.\n     */\n    mapGraphs(vg, cg, dist);\n    agclose(vg);\n\n    /* add dummy constraints for absolute values and initial positions */\n#ifdef OLD\n    for (n = agfstnode(cg); n; n = agnxtnode(cg, n)) {\n\tnode_t *vn;\t\t/* slack node for absolute value */\n\tnode_t *an;\t\t/* node representing original position */\n\n\tp = (nitem *) ND_alg(n);\n\tif ((n == root) || (!p))\n\t    continue;\n\tvn = newNode(cg);\n\tND_next(lastn) = vn;\n\tlastn = vn;\n\talloc_elist(0, ND_out(vn));\n\talloc_elist(2, ND_in(vn));\n\tan = newNode(cg);\n\tND_next(lastn) = an;\n\tlastn = an;\n\talloc_elist(1, ND_in(an));\n\talloc_elist(1, ND_out(an));\n\n\te = agedge(cg, root, an);\n\tED_minlen(e) = p->val - root_val;\n\telist_append(e, ND_out(root));\n\telist_append(e, ND_in(an));\n\n\te = agedge(cg, an, vn);\n\telist_append(e, ND_out(an));\n\telist_append(e, ND_in(vn));\n\n\te = agedge(cg, n, vn);\n\telist_append(e, ND_out(n));\n\telist_append(e, ND_in(vn));\n    }\n#endif\n\n    return cg;\n}\n\nstatic void closeGraph(graph_t * cg)\n{\n    node_t *n;\n    for (n = agfstnode(cg); n; n = agnxtnode(cg, n)) {\n\tfree_list(ND_in(n));\n\tfree_list(ND_out(n));\n    }\n    agclose(cg);\n}\n\n/* constrainX:\n * Create the X constrains and solve. We use a linear objective function\n * (absolute values rather than squares), so we can reuse network simplex.\n * The constraints are encoded as a dag with edges having a minimum length.\n */\nstatic void constrainX(graph_t* g, nitem* nlist, int nnodes, intersectfn ifn,\n                       int ortho)\n{\n    Dt_t *list = dtopen(&constr, Dtobag);\n    nitem *p = nlist;\n    graph_t *cg;\n    int i;\n\n    for (i = 0; i < nnodes; i++) {\n\tp->val = p->pos.x;\n\tdtinsert(list, p);\n\tp++;\n    }\n    if (ortho)\n\tcg = mkConstraintG(g, list, ifn, distX);\n    else\n\tcg = mkNConstraintG(g, list, ifn, distX);\n    rank(cg, 2, MAXINT);\n\n    p = nlist;\n    for (i = 0; i < nnodes; i++) {\n\tint newpos, oldpos, delta;\n\toldpos = p->pos.x;\n\tnewpos = ND_rank(p->cnode);\n\tdelta = newpos - oldpos;\n\tp->pos.x = newpos;\n\tp->bb.LL.x += delta;\n\tp->bb.UR.x += delta;\n\tp++;\n    }\n\n    closeGraph(cg);\n    dtclose(list);\n}\n\n/* constrainY:\n * See constrainX.\n */\nstatic void constrainY(graph_t* g, nitem* nlist, int nnodes, intersectfn ifn,\n                       int ortho)\n{\n    Dt_t *list = dtopen(&constr, Dtobag);\n    nitem *p = nlist;\n    graph_t *cg;\n    int i;\n\n    for (i = 0; i < nnodes; i++) {\n\tp->val = p->pos.y;\n\tdtinsert(list, p);\n\tp++;\n    }\n    if (ortho)\n\tcg = mkConstraintG(g, list, ifn, distY);\n    else\n\tcg = mkNConstraintG(g, list, ifn, distY);\n    rank(cg, 2, MAXINT);\n#ifdef DEBUG\n    {\n\tAgsym_t *mlsym = agedgeattr(cg, \"minlen\", \"\");\n\tAgsym_t *rksym = agnodeattr(cg, \"rank\", \"\");\n\tchar buf[100];\n\tnode_t *n;\n\tedge_t *e;\n\tfor (n = agfstnode(cg); n; n = agnxtnode(cg, n)) {\n\t    sprintf(buf, \"%d\", ND_rank(n));\n\t    agxset(n, rksym->index, buf);\n\t    for (e = agfstedge(cg, n); e; e = agnxtedge(cg, e, n)) {\n\t\tsprintf(buf, \"%d\", ED_minlen(e));\n\t\tagxset(e, mlsym->index, buf);\n\t    }\n\t}\n    }\n#endif\n\n    p = nlist;\n    for (i = 0; i < nnodes; i++) {\n\tint newpos, oldpos, delta;\n\toldpos = p->pos.y;\n\tnewpos = ND_rank(p->cnode);\n\tdelta = newpos - oldpos;\n\tp->pos.y = newpos;\n\tp->bb.LL.y += delta;\n\tp->bb.UR.y += delta;\n\tp++;\n    }\n\n    closeGraph(cg);\n    dtclose(list);\n}\n\n#define overlap(pb,qb) \\\n  ((pb.LL.x <= qb.UR.x) && (qb.LL.x <= pb.UR.x) && \\\n          (pb.LL.y <= qb.UR.y) && (qb.LL.y <= pb.UR.y))\n\n/* overlaps:\n */\nstatic int overlaps(nitem * p, int cnt)\n{\n    int i, j;\n    nitem *pi = p;\n    nitem *pj;\n\n    for (i = 0; i < cnt - 1; i++) {\n\tpj = pi + 1;\n\tfor (j = i + 1; j < cnt; j++) {\n\t    if (overlap(pi->bb, pj->bb))\n\t\treturn 1;\n\t    pj++;\n\t}\n\tpi++;\n    }\n    return 0;\n}\n\n/* initItem:\n */\nstatic void initItem(node_t * n, nitem * p, double margin)\n{\n    int x = POINTS(SCALE * ND_pos(n)[0]);\n    int y = POINTS(SCALE * ND_pos(n)[1]);\n    int w2 = POINTS(margin * SCALE2 * ND_width(n));\n    int h2 = POINTS(margin * SCALE2 * ND_height(n));\n    box b;\n\n    b.LL.x = x - w2;\n    b.LL.y = y - h2;\n    b.UR.x = x + w2;\n    b.UR.y = y + h2;\n\n    p->pos.x = x;\n    p->pos.y = y;\n    p->np = n;\n    p->bb = b;\n}\n\n/* cAdjust:\n * Use optimization to remove overlaps.\n * Modifications;\n *  - do y;x then x;y and use the better one\n *  - for all overlaps (or if overlap with leftmost nodes), add a constraint;\n *     constraint could move both x and y away, or the smallest, or some\n *     mixture.\n *  - follow by a scale down using actual shapes\n * We use an optimization based on Marriott, Stuckey, Tam and He,\n * \"Removing Node Overlapping in Graph Layout Using Constrained Optimization\",\n * Constraints,8(2):143--172, 2003.\n * We solve 2 constraint problem, one in X, one in Y. In each dimension,\n * we require relative positions to remain the same. That is, if two nodes\n * have the same x originally, they have the same x at the end, and if one\n * node is to the left of another, it remains to the left. In addition, if\n * two nodes could overlap by moving their X coordinates, we insert a constraint * to keep the two nodes sufficiently apart. Similarly, for Y.\n * \n * mode = AM_ORTHOXY => first X, then Y\n * mode = AM_ORTHOYX => first Y, then X\n * mode = AM_ORTHO   => first X, then Y\n * mode = AM_ORTHO_YX   => first Y, then X\n * In the last 2 cases, relax the constraints as follows: during the X pass,\n * if two nodes actually intersect and a smaller move in the Y direction\n * will remove the overlap, we don't force the nodes apart in the X direction,\n * but leave it for the Y pass to remove any remaining overlaps. Without this,\n * the X pass will remove all overlaps, and the Y pass only compresses in the\n * Y direction, causing a skewing of the aspect ratio.\n * \n * mode = AM_ORTHOXY => first X, then Y\n * mode = AM_ORTHOYX => first Y, then X\n * mode = AM_ORTHO   => first X, then Y\n * mode = AM_ORTHO_YX   => first Y, then X\n */\nint cAdjust(graph_t * g, int mode)\n{\n    double margin;\n    int ret, i, nnodes = agnnodes(g);\n    nitem *nlist = N_GNEW(nnodes, nitem);\n    nitem *p = nlist;\n    node_t *n;\n\n    margin = expFactor (g);\n\n    for (n = agfstnode(g); n; n = agnxtnode(g, n)) {\n\tinitItem(n, p, margin);\n\tp++;\n    }\n\n    if (overlaps(nlist, nnodes)) {\n\tpoint pt;\n\n\tswitch ((adjust_mode)mode) {\n\tcase AM_ORTHOXY:\n\t    constrainX(g, nlist, nnodes, intersectY, 1);\n\t    constrainY(g, nlist, nnodes, intersectX, 1);\n\t    break;\n\tcase AM_ORTHOYX:\n\t    constrainY(g, nlist, nnodes, intersectX, 1);\n\t    constrainX(g, nlist, nnodes, intersectY, 1);\n\t    break;\n\tcase AM_ORTHO :\n\t    constrainX(g, nlist, nnodes, intersectY0, 1);\n\t    constrainY(g, nlist, nnodes, intersectX, 1);\n\tcase AM_ORTHO_YX :\n\t    constrainY(g, nlist, nnodes, intersectX0, 1);\n\t    constrainX(g, nlist, nnodes, intersectY, 1);\n\tcase AM_PORTHOXY:\n\t    constrainX(g, nlist, nnodes, intersectY, 0);\n\t    constrainY(g, nlist, nnodes, intersectX, 0);\n\t    break;\n\tcase AM_PORTHOYX:\n\t    constrainY(g, nlist, nnodes, intersectX, 0);\n\t    constrainX(g, nlist, nnodes, intersectY, 0);\n\t    break;\n\tcase AM_PORTHO_YX :\n\t    constrainY(g, nlist, nnodes, intersectX0, 0);\n\t    constrainX(g, nlist, nnodes, intersectY, 0);\n\t    break;\n\tcase AM_PORTHO :\n\tdefault :\n\t    constrainX(g, nlist, nnodes, intersectY0, 0);\n\t    constrainY(g, nlist, nnodes, intersectX, 0);\n\t    break;\n\t}\n\tp = nlist;\n\tfor (i = 0; i < nnodes; i++) {\n\t    n = p->np;\n\t    pt = p->pos;\n\t    ND_pos(n)[0] = PS2INCH(pt.x) / SCALE;\n\t    ND_pos(n)[1] = PS2INCH(pt.y) / SCALE;\n\t    p++;\n\t}\n\tret = 1;\n    }\n    else ret = 0;\n    free(nlist);\n    return ret;\n}\n\ntypedef struct {\n    pointf pos;\t\t\t/* position for sorting */\n    boxf bb;\n    double wd2;\n    double ht2;\n    node_t *np;\n} info;\n\ntypedef int (*sortfn_t) (const void *, const void *);\n\nstatic int sortf(pointf * p, pointf * q)\n{\n    if (p->x < q->x)\n\treturn -1;\n    else if (p->x > q->x)\n\treturn 1;\n    else if (p->y < q->y)\n\treturn -1;\n    else if (p->y > q->y)\n\treturn 1;\n    else\n\treturn 0;\n}\n\nstatic double compress(info * nl, int nn)\n{\n    info *p = nl;\n    info *q;\n    int i, j;\n    double s, sc = 0;\n    pointf pt;\n\n    for (i = 0; i < nn; i++) {\n\tq = p + 1;\n\tfor (j = i + 1; j < nn; j++) {\n\t    if (overlap(p->bb, q->bb))\n\t\treturn 0;\n\t    if (p->pos.x == q->pos.x)\n\t\tpt.x = HUGE_VAL;\n\t    else {\n\t\tpt.x = (p->wd2 + q->wd2) / fabs(p->pos.x - q->pos.x);\n\t    }\n\t    if (p->pos.y == q->pos.y)\n\t\tpt.y = HUGE_VAL;\n\t    else {\n\t\tpt.y = (p->ht2 + q->ht2) / fabs(p->pos.y - q->pos.y);\n\t    }\n\t    if (pt.y < pt.x)\n\t\ts = pt.y;\n\t    else\n\t\ts = pt.x;\n\t    if (s > sc)\n\t\tsc = s;\n\t    q++;\n\t}\n\tp++;\n    }\n    return sc;\n}\n\nstatic pointf *mkOverlapSet(info * nl, int nn, int *cntp)\n{\n    info *p = nl;\n    info *q;\n    int sz = nn;\n    pointf *S = N_GNEW(sz + 1, pointf);\n    int i, j;\n    int cnt = 0;\n\n    for (i = 0; i < nn; i++) {\n\tq = p + 1;\n\tfor (j = i + 1; j < nn; j++) {\n\t    if (overlap(p->bb, q->bb)) {\n\t\tpointf pt;\n\t\tif (cnt == sz) {\n\t\t    sz += nn;\n\t\t    S = realloc(S, sizeof(pointf) * (sz + 1));\n\t\t}\n\t\tif (p->pos.x == q->pos.x)\n\t\t    pt.x = HUGE_VAL;\n\t\telse {\n\t\t    pt.x = (p->wd2 + q->wd2) / fabs(p->pos.x - q->pos.x);\n\t\t    if (pt.x < 1)\n\t\t\tpt.x = 1;\n\t\t}\n\t\tif (p->pos.y == q->pos.y)\n\t\t    pt.y = HUGE_VAL;\n\t\telse {\n\t\t    pt.y = (p->ht2 + q->ht2) / fabs(p->pos.y - q->pos.y);\n\t\t    if (pt.y < 1)\n\t\t\tpt.y = 1;\n\t\t}\n\t\tS[++cnt] = pt;\n\t    }\n\t    q++;\n\t}\n\tp++;\n    }\n\n    S = realloc(S, sizeof(pointf) * (cnt + 1));\n    *cntp = cnt;\n    return S;\n}\n\nstatic pointf computeScaleXY(pointf * aarr, int m)\n{\n    pointf *barr;\n    double cost, bestcost;\n    int k, best = 0;\n    pointf scale;\n\n    aarr[0].x = 1;\n    aarr[0].y = HUGE_VAL;\n    qsort(aarr + 1, m, sizeof(pointf), (sortfn_t) sortf);\n\n    barr = N_GNEW(m + 1, pointf);\n    barr[m].x = aarr[m].x;\n    barr[m].y = 1;\n    for (k = m - 1; k >= 0; k--) {\n\tbarr[k].x = aarr[k].x;\n\tbarr[k].y = MAX(aarr[k + 1].y, barr[k + 1].y);\n    }\n\n    bestcost = HUGE_VAL;\n    for (k = 0; k <= m; k++) {\n\tcost = barr[k].x * barr[k].y;\n\tif (cost < bestcost) {\n\t    bestcost = cost;\n\t    best = k;\n\t}\n    }\n    assert(bestcost < HUGE_VAL);\n    scale.x = barr[best].x;\n    scale.y = barr[best].y;\n\n    return scale;\n}\n\n/* computeScale:\n * For each (x,y) in aarr, scale has to be bigger than the smallest one.\n * So, the scale is the max min.\n */\nstatic double computeScale(pointf * aarr, int m)\n{\n    int i;\n    double sc = 0;\n    double v;\n    pointf p;\n\n    aarr++;\n    for (i = 1; i <= m; i++) {\n\tp = *aarr++;\n\tv = MIN(p.x, p.y);\n\tif (v > sc)\n\t    sc = v;\n    }\n    return sc;\n}\n\n/* scAdjust:\n * Scale the layout.\n * equal > 0  => scale uniformly in x and y to remove overlaps\n * equal = 0  => scale separately in x and y to remove overlaps\n * equal < 0  => scale down uniformly in x and y to remove excess space\n * The last assumes there are no overlaps at present.\n * Based on Marriott, Stuckey, Tam and He,\n * \"Removing Node Overlapping in Graph Layout Using Constrained Optimization\",\n * Constraints,8(2):143--172, 2003.\n */\nint scAdjust(graph_t * g, int equal)\n{\n    int nnodes = agnnodes(g);\n    info *nlist = N_GNEW(nnodes, info);\n    info *p = nlist;\n    node_t *n;\n    pointf s;\n    int i;\n    double margin;\n    pointf *aarr;\n    int m;\n\n    margin = expFactor (g);\n\n    for (n = agfstnode(g); n; n = agnxtnode(g, n)) {\n\tdouble w2 = margin * ND_width(n) / 2.0;\n\tdouble h2 = margin * ND_height(n) / 2.0;\n\tp->pos.x = ND_pos(n)[0];\n\tp->pos.y = ND_pos(n)[1];\n\tp->bb.LL.x = p->pos.x - w2;\n\tp->bb.LL.y = p->pos.y - h2;\n\tp->bb.UR.x = p->pos.x + w2;\n\tp->bb.UR.y = p->pos.y + h2;\n\tp->wd2 = w2;\n\tp->ht2 = h2;\n\tp->np = n;\n\tp++;\n    }\n\n    if (equal < 0) {\n\ts.x = s.y = compress(nlist, nnodes);\n\tif (s.x == 0) {\t\t/* overlaps exist */\n\t    free(nlist);\n\t    return 0;\n\t}\n\tfprintf(stderr, \"compress %g \\n\", s.x);\n    } else {\n\taarr = mkOverlapSet(nlist, nnodes, &m);\n\n\tif (m == 0) {\t\t/* no overlaps */\n\t    free(aarr);\n\t    free(nlist);\n\t    return 0;\n\t}\n\n\tif (equal) {\n\t    s.x = s.y = computeScale(aarr, m);\n\t} else {\n\t    s = computeScaleXY(aarr, m);\n\t}\n\tfree(aarr);\n    }\n\n    p = nlist;\n    for (i = 0; i < nnodes; i++) {\n\tND_pos(p->np)[0] = s.x * p->pos.x;\n\tND_pos(p->np)[1] = s.y * p->pos.y;\n\tp++;\n    }\n\n    free(nlist);\n    return 1;\n}\n"
  },
  {
    "path": "experimental/neatogen/defs.h",
    "content": "/* $Id: defs.h,v 1.5 2005/10/18 18:42:59 ellson Exp $ $Revision: 1.5 $ */\n/* vim:set shiftwidth=4 ts=8: */\n\n/**********************************************************\n*      This software is part of the graphviz package      *\n*                http://www.graphviz.org/                 *\n*                                                         *\n*            Copyright (c) 1994-2004 AT&T Corp.           *\n*                and is licensed under the                *\n*            Common Public License, Version 1.0           *\n*                      by AT&T Corp.                      *\n*                                                         *\n*        Information and Software Systems Research        *\n*              AT&T Research, Florham Park NJ             *\n**********************************************************/\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#ifndef _DEFS_H_\n#define _DEFS_H_\n\n#include \"neato.h\"\n\n#ifdef __cplusplus\n    enum Style { regular, invisible };\n    struct vtx_data {\n\tint nedges;\n\tint *edges;\n\tfloat *ewgts;\n\tStyle *styles;\n\tfloat *edists; /* directed dist reflecting the direction of the edge */\n    };\n\n    struct cluster_data {\n\tint nvars;         /* total count of vars in clusters */\n        int nclusters;     /* number of clusters */\n        int *clustersizes; /* number of vars in each cluster */\n        int **clusters;    /* list of var indices for constituents of each c */\n\tint ntoplevel;     /* number of nodes not in any cluster */\n\tint *toplevel;     /* array of nodes not in any cluster */\n\tboxf *bb;\t   /* bounding box of each cluster */\n    };\n\n    typedef int DistType;\t/* must be signed!! */\n\n    inline double max(double x, double y) {\n\tif (x >= y)\n\t    return x;\n\telse\n\t    return y;\n    } inline double min(double x, double y) {\n\tif (x <= y)\n\t    return x;\n\telse\n\t    return y;\n    }\n\n    inline int max(int x, int y) {\n\tif (x >= y)\n\t    return x;\n\telse\n\t    return y;\n    }\n\n    inline int min(int x, int y) {\n\tif (x <= y)\n\t    return x;\n\telse\n\t    return y;\n    }\n\n    struct Point {\n\tdouble x;\n\tdouble y;\n\tint operator==(Point other) {\n\t    return x == other.x && y == other.y;\n    }};\n#else\n#undef inline\n#define inline\n#define NOTUSED(var)      (void) var\n\n#include <macros.h>\n    extern void *gmalloc(size_t);\n#define DIGCOLA 1\n\n#ifdef USE_STYLES\n    typedef enum { regular, invisible } Style;\n#endif\n    typedef struct {\n\tint nedges;\t\t/* no. of neighbors, including self */\n\tint *edges;\t\t/* edges[0..(nedges-1)] are neighbors; edges[0] is self */\n\tfloat *ewgts;\t\t/* preferred edge lengths */\n\tfloat *eweights;\t/* edge weights */\n\tnode_t *np;\t\t/* original node */\n#ifdef USE_STYLES\n\tStyle *styles;\n#endif\n#ifdef DIGCOLA\n\tfloat *edists; /* directed dist reflecting the direction of the edge */\n#endif\n    } vtx_data;\n\n    typedef struct cluster_data {\n\tint nvars;         /* total count of vars in clusters */\n        int nclusters;     /* number of clusters */\n        int *clustersizes; /* number of vars in each cluster */\n        int **clusters;    /* list of var indices for constituents of each c */\n\tint ntoplevel;     /* number of nodes not in any cluster */\n\tint *toplevel;     /* array of nodes not in any cluster */\n\tboxf *bb;\t   /* bounding box of each cluster */\n    } cluster_data;\n\n\n    typedef int DistType;\t/* must be signed!! */\n\n#ifdef UNUSED\n    typedef struct {\n\tdouble x;\n\tdouble y;\n    } Point;\n#endif\n\n#endif\n\n#endif\n\n#ifdef __cplusplus\n}\n#endif\n"
  },
  {
    "path": "experimental/neatogen/digcola.h",
    "content": "/**********************************************************\n*      This software is part of the graphviz package      *\n*                http://www.graphviz.org/                 *\n*                                                         *\n*            Copyright (c) 1994-2004 AT&T Corp.           *\n*                and is licensed under the                *\n*            Common Public License, Version 1.0           *\n*                      by AT&T Corp.                      *\n*                                                         *\n*        Information and Software Systems Research        *\n*              AT&T Research, Florham Park NJ             *\n**********************************************************/\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#ifndef DIGCOLA_H\n#define DIGCOLA_H\n\n#include <defs.h>\n#ifdef DIGCOLA\nextern void compute_y_coords(vtx_data*, int, double*, int);\nextern double compute_hierarchy(vtx_data*, int, double, double, \n                                double*, int**, int**, int*); \nextern void IMDS_given_dim(vtx_data*, int, double*, double*, double);\nextern int stress_majorization_with_hierarchy(vtx_data*, int, int, double**, \n                                              int, int, int, int, double);\ntypedef struct vsep_options {\n    int diredges;       /* 1=generate directed edge constraints */\n                        /* 2=generate directed hierarchy level constraints (DiG-CoLa) */\n    double edge_gap;    /* amount to force vertical separation of */\n                        /* start/end nodes */\n    int noverlap;       /* 1=generate non-overlap constraints */\n                        /* 2=remove overlaps after layout */\n    pointf gap;         /* hor and vert gap to enforce when removing overlap*/\n    pointf* nsize;      /* node widths and heights */\n    cluster_data* clusters;\n                        /* list of node indices for each cluster */\n#ifdef MOSEK\n    int mosek;          /* use Mosek as constraint optimization engine */\n#endif //MOSEK\n} vsep_options;\n\nextern int stress_majorization_vsep(vtx_data*, int, int, double**, int, int, int, vsep_options*);\n#endif\n#endif\n\n#ifdef __cplusplus\n}\n#endif\n"
  },
  {
    "path": "experimental/neatogen/dijkstra.c",
    "content": "/* $Id: dijkstra.c,v 1.2 2005/07/28 22:33:31 erg Exp $ $Revision: 1.2 $ */\n/* vim:set shiftwidth=4 ts=8: */\n\n/**********************************************************\n*      This software is part of the graphviz package      *\n*                http://www.graphviz.org/                 *\n*                                                         *\n*            Copyright (c) 1994-2004 AT&T Corp.           *\n*                and is licensed under the                *\n*            Common Public License, Version 1.0           *\n*                      by AT&T Corp.                      *\n*                                                         *\n*        Information and Software Systems Research        *\n*              AT&T Research, Florham Park NJ             *\n**********************************************************/\n\n\n/******************************************\n\n\tDijkstra algorithm\n\tComputes single-source distances for\n\tweighted graphs\n\n******************************************/\n\n\n#include \"bfs.h\"\n#include \"dijkstra.h\"\n#include <limits.h>\n#include <stdlib.h>\n/* #include <math.h> */\n\n#define MAX_DIST (double)INT_MAX\n\ntypedef DistType Word;\n\n#define LOOP while(true)\n\n/* This heap class is suited to the Dijkstra alg.\n   data[i]=vertexNum <==> index[vertexNum]=i\n*/\n\n#define left(i) (2*(i))\n#define right(i) (2*(i)+1)\n#define parent(i) ((i)/2)\n#define insideHeap(h,i) ((i)<h->heapSize)\n#define greaterPriority(h,i,j,dist) (dist[h->data[i]]<dist[h->data[j]])\n#define assign(h,i,j,index) {h->data[i]=h->data[j]; index[h->data[i]]=i;}\n#define exchange(h,i,j,index) {int temp; \\\n\t\ttemp=h->data[i]; \\\n\t\th->data[i]=h->data[j]; \\\n\t\th->data[j]=temp; \\\n\t\tindex[h->data[i]]=i; \\\n\t\tindex[h->data[j]]=j; \\\n}\n\ntypedef struct {\n    int *data;\n    int heapSize;\n} heap;\n\nstatic void heapify(heap * h, int i, int index[], Word dist[])\n{\n    int l, r, largest;\n    while (1) {\n\tl = left(i);\n\tr = right(i);\n\tif (insideHeap(h, l) && greaterPriority(h, l, i, dist))\n\t    largest = l;\n\telse\n\t    largest = i;\n\tif (insideHeap(h, r) && greaterPriority(h, r, largest, dist))\n\t    largest = r;\n\n\tif (largest == i)\n\t    break;\n\n\texchange(h, largest, i, index);\n\ti = largest;\n    }\n}\n\n#ifdef OBSOLETE\n/* originally, the code called mkHeap to allocate space, then\n * initHeap to realloc the space. This is silly.\n * Now we just call initHeap.\n */\nstatic void mkHeap(heap * h, int size)\n{\n    h->data = N_GNEW(size, int);\n    h->heapSize = 0;\n}\n#endif\n\nstatic void freeHeap(heap * h)\n{\n    if (h->data) free(h->data);\n}\n\nstatic void\ninitHeap(heap * h, int startVertex, int index[], Word dist[], int n)\n{\n    int i, count;\n    int j;    /* We cannot use an unsigned value in this loop */\n    /* h->data=(int*) realloc(h->data, (n-1)*sizeof(int)); */\n    if (n == 1) h->data = NULL;\n    else h->data = N_GNEW(n - 1, int);\n    h->heapSize = n - 1;\n\n    for (count = 0, i = 0; i < n; i++)\n\tif (i != startVertex) {\n\t    h->data[count] = i;\n\t    index[i] = count;\n\t    count++;\n\t}\n\n    for (j = (n - 1) / 2; j >= 0; j--)\n\theapify(h, j, index, dist);\n}\n\nstatic bool extractMax(heap * h, int *max, int index[], Word dist[])\n{\n    if (h->heapSize == 0)\n\treturn false;\n\n    *max = h->data[0];\n    h->data[0] = h->data[h->heapSize - 1];\n    index[h->data[0]] = 0;\n    h->heapSize--;\n    heapify(h, 0, index, dist);\n\n    return true;\n}\n\nstatic void\nincreaseKey(heap * h, int increasedVertex, Word newDist, int index[],\n\t    Word dist[])\n{\n    int placeInHeap;\n    int i;\n\n    if (dist[increasedVertex] <= newDist)\n\treturn;\n\n    placeInHeap = index[increasedVertex];\n\n    dist[increasedVertex] = newDist;\n\n    i = placeInHeap;\n    while (i > 0 && dist[h->data[parent(i)]] > newDist) {\t/* can write here: greaterPriority(i,parent(i),dist) */\n\tassign(h, i, parent(i), index);\n\ti = parent(i);\n    }\n    h->data[i] = increasedVertex;\n    index[increasedVertex] = i;\n}\n\nvoid dijkstra(int vertex, vtx_data * graph, int n, DistType * dist)\n{\n    int i;\n    heap H;\n    int closestVertex, neighbor;\n    DistType closestDist, prevClosestDist = MAXINT;\n    static int *index;\n\n#ifdef OBSOLETE\n    mkHeap(&H, n);\n#endif\n    index = (int *) realloc(index, n * sizeof(int));\n\n    /* initial distances with edge weights: */\n    for (i = 0; i < n; i++)\n\tdist[i] = (DistType) MAX_DIST;\n    dist[vertex] = 0;\n    for (i = 1; i < graph[vertex].nedges; i++)\n\tdist[graph[vertex].edges[i]] = (DistType) graph[vertex].ewgts[i];\n\n    initHeap(&H, vertex, index, dist, n);\n\n    while (extractMax(&H, &closestVertex, index, dist)) {\n\tclosestDist = dist[closestVertex];\n\tif (closestDist == MAX_DIST)\n\t    break;\n\tfor (i = 1; i < graph[closestVertex].nedges; i++) {\n\t    neighbor = graph[closestVertex].edges[i];\n\t    increaseKey(&H, neighbor,\n\t\t\tclosestDist +\n\t\t\t(DistType) graph[closestVertex].ewgts[i], index,\n\t\t\tdist);\n\t}\n\tprevClosestDist = closestDist;\n    }\n\n    /* For dealing with disconnected graphs: */\n    for (i = 0; i < n; i++)\n\tif (dist[i] == MAX_DIST)\t/* 'i' is not connected to 'vertex' */\n\t    dist[i] = prevClosestDist + 10;\n    freeHeap(&H);\n}\n\n /* Dijkstra bounded to nodes in *unweighted* radius */\nint\ndijkstra_bounded(int vertex, vtx_data * graph, int n, DistType * dist,\n\t\t int bound, int *visited_nodes)\n /* make dijkstra, but consider only nodes whose *unweighted* distance from 'vertex'  */\n /* is at most 'bound' */\n /* MON-EFFICIENT implementation, see below. */\n{\n    int num_visited_nodes;\n    int i;\n    static bool *node_in_neighborhood = NULL;\n    static int size = 0;\n    static int *index;\n    Queue Q;\n    heap H;\n    int closestVertex, neighbor;\n    DistType closestDist;\n    int num_found = 0;\n\n    /* first, perform BFS to find the nodes in the region */\n    mkQueue(&Q, n);\n    /* remember that dist should be init. with -1's */\n    for (i = 0; i < n; i++) {\n\tdist[i] = -1;\t\t/* far, TOO COSTLY (O(n))! */\n    }\n    num_visited_nodes =\n\tbfs_bounded(vertex, graph, n, dist, &Q, bound, visited_nodes);\n    if (size < n) {\n\tnode_in_neighborhood =\n\t    (bool *) realloc(node_in_neighborhood, n * sizeof(bool));\n\tfor (i = size; i < n; i++) {\n\t    node_in_neighborhood[i] = false;\n\t}\n\tsize = n;\n    }\n    for (i = 0; i < num_visited_nodes; i++) {\n\tnode_in_neighborhood[visited_nodes[i]] = true;\n    }\n\n\n#ifdef OBSOLETE\n    mkHeap(&H, n);\n#endif\n    index = (int *) realloc(index, n * sizeof(int));\n\n    /* initial distances with edge weights: */\n    for (i = 0; i < n; i++)\t/* far, TOO COSTLY (O(n))! */\n\tdist[i] = (DistType) MAX_DIST;\n    dist[vertex] = 0;\n    for (i = 1; i < graph[vertex].nedges; i++)\n\tdist[graph[vertex].edges[i]] = (DistType) graph[vertex].ewgts[i];\n\n    /* again, TOO COSTLY (O(n)) to put all nodes in heap! */\n    initHeap(&H, vertex, index, dist, n); \n\n    while (num_found < num_visited_nodes\n\t   && extractMax(&H, &closestVertex, index, dist)) {\n\tif (node_in_neighborhood[closestVertex]) {\n\t    num_found++;\n\t}\n\tclosestDist = dist[closestVertex];\n\tif (closestDist == MAX_DIST)\n\t    break;\n\tfor (i = 1; i < graph[closestVertex].nedges; i++) {\n\t    neighbor = graph[closestVertex].edges[i];\n\t    increaseKey(&H, neighbor,\n\t\t\tclosestDist +\n\t\t\t(DistType) graph[closestVertex].ewgts[i], index,\n\t\t\tdist);\n\t}\n    }\n\n    /* restore initial false-status of 'node_in_neighborhood' */\n    for (i = 0; i < num_visited_nodes; i++) {\n\tnode_in_neighborhood[visited_nodes[i]] = false;\n    }\n    freeHeap(&H);\n    freeQueue(&Q);\n    return num_visited_nodes;\n}\n\nstatic void heapify_f(heap * h, int i, int index[], float dist[])\n{\n    int l, r, largest;\n    while (1) {\n\tl = left(i);\n\tr = right(i);\n\tif (insideHeap(h, l) && greaterPriority(h, l, i, dist))\n\t    largest = l;\n\telse\n\t    largest = i;\n\tif (insideHeap(h, r) && greaterPriority(h, r, largest, dist))\n\t    largest = r;\n\n\tif (largest == i)\n\t    break;\n\n\texchange(h, largest, i, index);\n\ti = largest;\n    }\n}\n\nstatic void\ninitHeap_f(heap * h, int startVertex, int index[], float dist[], int n)\n{\n    int i, count;\n    int j;\t\t\t/* We cannot use an unsigned value in this loop */\n    h->data = N_GNEW(n - 1, int);\n    h->heapSize = n - 1;\n\n    for (count = 0, i = 0; i < n; i++)\n\tif (i != startVertex) {\n\t    h->data[count] = i;\n\t    index[i] = count;\n\t    count++;\n\t}\n\n    for (j = (n - 1) / 2; j >= 0; j--)\n\theapify_f(h, j, index, dist);\n}\n\nstatic bool extractMax_f(heap * h, int *max, int index[], float dist[])\n{\n    if (h->heapSize == 0)\n\treturn false;\n\n    *max = h->data[0];\n    h->data[0] = h->data[h->heapSize - 1];\n    index[h->data[0]] = 0;\n    h->heapSize--;\n    heapify_f(h, 0, index, dist);\n\n    return true;\n}\n\nstatic void\nincreaseKey_f(heap * h, int increasedVertex, float newDist, int index[],\n\t      float dist[])\n{\n    int placeInHeap;\n    int i;\n\n    if (dist[increasedVertex] <= newDist)\n\treturn;\n\n    placeInHeap = index[increasedVertex];\n\n    dist[increasedVertex] = newDist;\n\n    i = placeInHeap;\n    while (i > 0 && dist[h->data[parent(i)]] > newDist) {\t/* can write here: greaterPriority(i,parent(i),dist) */\n\tassign(h, i, parent(i), index);\n\ti = parent(i);\n    }\n    h->data[i] = increasedVertex;\n    index[increasedVertex] = i;\n}\n\n/* dijkstra_f:\n * Weighted shortest paths from vertex.\n * Assume graph is connected.\n */\nvoid dijkstra_f(int vertex, vtx_data * graph, int n, float *dist)\n{\n    int i;\n    heap H;\n    int closestVertex = 0, neighbor;\n    float closestDist;\n    int *index;\n\n#ifdef OBSOLETE\n    mkHeap(&H, n);\n#endif\n    index = N_GNEW(n, int);\n\n    /* initial distances with edge weights: */\n    for (i = 0; i < n; i++)\n\tdist[i] = MAXFLOAT;\n    dist[vertex] = 0;\n    for (i = 1; i < graph[vertex].nedges; i++)\n\tdist[graph[vertex].edges[i]] = graph[vertex].ewgts[i];\n\n    initHeap_f(&H, vertex, index, dist, n);\n\n    while (extractMax_f(&H, &closestVertex, index, dist)) {\n\tclosestDist = dist[closestVertex];\n\tif (closestDist == MAXFLOAT)\n\t    break;\n\tfor (i = 1; i < graph[closestVertex].nedges; i++) {\n\t    neighbor = graph[closestVertex].edges[i];\n\t    increaseKey_f(&H, neighbor,\n\t\t\t  closestDist + graph[closestVertex].ewgts[i],\n\t\t\t  index, dist);\n\t}\n    }\n\n    freeHeap(&H);\n    free(index);\n}\n"
  },
  {
    "path": "experimental/neatogen/dijkstra.h",
    "content": "/* $Id: dijkstra.h,v 1.1.1.1 2004/12/23 04:05:11 ellson Exp $ $Revision: 1.1.1.1 $ */\n/* vim:set shiftwidth=4 ts=8: */\n\n/**********************************************************\n*      This software is part of the graphviz package      *\n*                http://www.graphviz.org/                 *\n*                                                         *\n*            Copyright (c) 1994-2004 AT&T Corp.           *\n*                and is licensed under the                *\n*            Common Public License, Version 1.0           *\n*                      by AT&T Corp.                      *\n*                                                         *\n*        Information and Software Systems Research        *\n*              AT&T Research, Florham Park NJ             *\n**********************************************************/\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n\n\n#ifndef _DIJKSTRA_H_\n#define _DIJKSTRA_H_\n\n#include \"defs.h\"\n\n#ifdef __cplusplus\n    void dijkstra(int vertex, vtx_data * graph, int n, DistType * dist);\n\n/* Dijkstra bounded to nodes in *unweighted* radius */\n    void dijkstra_bounded(int vertex, vtx_data * graph, int n,\n\t\t\t  DistType * dist, int bound, int *visited_nodes,\n\t\t\t  int &num_visited_nodes);\n\n#else\n    extern void dijkstra(int, vtx_data *, int, DistType *);\n    extern void dijkstra_f(int, vtx_data *, int, float *);\n\n    /* Dijkstra bounded to nodes in *unweighted* radius */\n    extern int dijkstra_bounded(int, vtx_data *, int, DistType *, int,\n\t\t\t\tint *);\n#endif\n\n#endif\n\n#ifdef __cplusplus\n}\n#endif\n"
  },
  {
    "path": "experimental/neatogen/edges.c",
    "content": "/* $Id: edges.c,v 1.1.1.1 2004/12/23 04:05:11 ellson Exp $ $Revision: 1.1.1.1 $ */\n/* vim:set shiftwidth=4 ts=8: */\n\n/**********************************************************\n*      This software is part of the graphviz package      *\n*                http://www.graphviz.org/                 *\n*                                                         *\n*            Copyright (c) 1994-2004 AT&T Corp.           *\n*                and is licensed under the                *\n*            Common Public License, Version 1.0           *\n*                      by AT&T Corp.                      *\n*                                                         *\n*        Information and Software Systems Research        *\n*              AT&T Research, Florham Park NJ             *\n**********************************************************/\n\n#include \"neato.h\"\n#include \"mem.h\"\n#include \"info.h\"\n#include \"edges.h\"\n#include <math.h>\n\n\ndouble pxmin, pxmax, pymin, pymax;\t/* clipping window */\n\nstatic int nedges;\nstatic Freelist efl;\n\nvoid edgeinit()\n{\n    freeinit(&efl, sizeof(Edge));\n    nedges = 0;\n}\n\nEdge *bisect(Site * s1, Site * s2)\n{\n    double dx, dy, adx, ady;\n    Edge *newedge;\n\n    newedge = (Edge *) getfree(&efl);\n\n    newedge->reg[0] = s1;\n    newedge->reg[1] = s2;\n    ref(s1);\n    ref(s2);\n    newedge->ep[0] = (Site *) NULL;\n    newedge->ep[1] = (Site *) NULL;\n\n    dx = s2->coord.x - s1->coord.x;\n    dy = s2->coord.y - s1->coord.y;\n    adx = dx > 0 ? dx : -dx;\n    ady = dy > 0 ? dy : -dy;\n    newedge->c =\n\ts1->coord.x * dx + s1->coord.y * dy + (dx * dx + dy * dy) * 0.5;\n    if (adx > ady) {\n\tnewedge->a = 1.0;\n\tnewedge->b = dy / dx;\n\tnewedge->c /= dx;\n    } else {\n\tnewedge->b = 1.0;\n\tnewedge->a = dx / dy;\n\tnewedge->c /= dy;\n    };\n\n    newedge->edgenbr = nedges;\n#ifdef STANDALONE\n    out_bisector(newedge);\n#endif\n    nedges += 1;\n    return (newedge);\n}\n\n\nstatic void doSeg(Edge * e, double x1, double y1, double x2, double y2)\n{\n    addVertex(e->reg[0], x1, y1);\n    addVertex(e->reg[0], x2, y2);\n    addVertex(e->reg[1], x1, y1);\n    addVertex(e->reg[1], x2, y2);\n}\n\nvoid clip_line(Edge * e)\n{\n    Site *s1, *s2;\n    double x1, x2, y1, y2;\n\n    if (e->a == 1.0 && e->b >= 0.0) {\n\ts1 = e->ep[1];\n\ts2 = e->ep[0];\n    } else {\n\ts1 = e->ep[0];\n\ts2 = e->ep[1];\n    }\n\n    if (e->a == 1.0) {\n\tif (s1 != (Site *) NULL) {\n\t    y1 = s1->coord.y;\n\t    if (y1 > pymax)\n\t\treturn;\n\t    else if (y1 >= pymin)\n\t\tx1 = s1->coord.x;\n\t    else {\n\t\ty1 = pymin;\n\t\tx1 = e->c - e->b * y1;\n\t    }\n\t} else {\n\t    y1 = pymin;\n\t    x1 = e->c - e->b * y1;\n\t}\n\n\tif (s2 != (Site *) NULL) {\n\t    y2 = s2->coord.y;\n\t    if (y2 < pymin)\n\t\treturn;\n\t    else if (y2 <= pymax)\n\t\tx2 = s2->coord.x;\n\t    else {\n\t\ty2 = pymax;\n\t\tx2 = e->c - e->b * y2;\n\t    }\n\t} else {\n\t    y2 = pymax;\n\t    x2 = e->c - e->b * y2;\n\t}\n\n\tif (((x1 > pxmax) & (x2 > pxmax)) | ((x1 < pxmin) & (x2 < pxmin)))\n\t    return;\n\tif (x1 > pxmax) {\n\t    x1 = pxmax;\n\t    y1 = (e->c - x1) / e->b;\n\t};\n\tif (x1 < pxmin) {\n\t    x1 = pxmin;\n\t    y1 = (e->c - x1) / e->b;\n\t};\n\tif (x2 > pxmax) {\n\t    x2 = pxmax;\n\t    y2 = (e->c - x2) / e->b;\n\t};\n\tif (x2 < pxmin) {\n\t    x2 = pxmin;\n\t    y2 = (e->c - x2) / e->b;\n\t};\n    } else {\n\tif (s1 != (Site *) NULL) {\n\t    x1 = s1->coord.x;\n\t    if (x1 > pxmax)\n\t\treturn;\n\t    else if (x1 >= pxmin)\n\t\ty1 = s1->coord.y;\n\t    else {\n\t\tx1 = pxmin;\n\t\ty1 = e->c - e->a * x1;\n\t    }\n\t} else {\n\t    x1 = pxmin;\n\t    y1 = e->c - e->a * x1;\n\t}\n\n\tif (s2 != (Site *) NULL) {\n\t    x2 = s2->coord.x;\n\t    if (x2 < pxmin)\n\t\treturn;\n\t    else if (x2 <= pxmax)\n\t\ty2 = s2->coord.y;\n\t    else {\n\t\tx2 = pxmax;\n\t\ty2 = e->c - e->a * x2;\n\t    }\n\t} else {\n\t    x2 = pxmax;\n\t    y2 = e->c - e->a * x2;\n\t}\n\n\tif (((y1 > pymax) & (y2 > pymax)) | ((y1 < pymin) & (y2 < pymin)))\n\t    return;\n\tif (y1 > pymax) {\n\t    y1 = pymax;\n\t    x1 = (e->c - y1) / e->a;\n\t};\n\tif (y1 < pymin) {\n\t    y1 = pymin;\n\t    x1 = (e->c - y1) / e->a;\n\t};\n\tif (y2 > pymax) {\n\t    y2 = pymax;\n\t    x2 = (e->c - y2) / e->a;\n\t};\n\tif (y2 < pymin) {\n\t    y2 = pymin;\n\t    x2 = (e->c - y2) / e->a;\n\t};\n    }\n\n    doSeg(e, x1, y1, x2, y2);\n#ifdef STANDALONE\n    if (doPS)\n\tline(x1, y1, x2, y2);\n#endif\n}\n\nvoid endpoint(Edge * e, int lr, Site * s)\n{\n    e->ep[lr] = s;\n    ref(s);\n    if (e->ep[re - lr] == (Site *) NULL)\n\treturn;\n    clip_line(e);\n#ifdef STANDALONE\n    out_ep(e);\n#endif\n    deref(e->reg[le]);\n    deref(e->reg[re]);\n    makefree(e, &efl);\n}\n"
  },
  {
    "path": "experimental/neatogen/edges.h",
    "content": "/* $Id: edges.h,v 1.1.1.1 2004/12/23 04:05:11 ellson Exp $ $Revision: 1.1.1.1 $ */\n/* vim:set shiftwidth=4 ts=8: */\n\n/**********************************************************\n*      This software is part of the graphviz package      *\n*                http://www.graphviz.org/                 *\n*                                                         *\n*            Copyright (c) 1994-2004 AT&T Corp.           *\n*                and is licensed under the                *\n*            Common Public License, Version 1.0           *\n*                      by AT&T Corp.                      *\n*                                                         *\n*        Information and Software Systems Research        *\n*              AT&T Research, Florham Park NJ             *\n**********************************************************/\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n\n\n#ifndef EDGES_H\n#define EDGES_H\n\n#include \"site.h\"\n\n    typedef struct Edge {\n\tdouble a, b, c;\t\t/* edge on line ax + by = c */\n\tSite *ep[2];\t\t/* endpoints (vertices) of edge; initially NULL */\n\tSite *reg[2];\t\t/* sites forming edge */\n\tint edgenbr;\n    } Edge;\n\n#define le 0\n#define re 1\n\n    extern double pxmin, pxmax, pymin, pymax;\t/* clipping window */\n    extern void edgeinit(void);\n    extern void endpoint(Edge *, int, Site *);\n    extern void clip_line(Edge * e);\n    extern Edge *bisect(Site *, Site *);\n\n#endif\n\n#ifdef __cplusplus\n}\n#endif\n"
  },
  {
    "path": "experimental/neatogen/embed_graph.c",
    "content": "/* $Id: embed_graph.c,v 1.1.1.1 2004/12/23 04:05:11 ellson Exp $ $Revision: 1.1.1.1 $ */\n/* vim:set shiftwidth=4 ts=8: */\n\n/**********************************************************\n*      This software is part of the graphviz package      *\n*                http://www.graphviz.org/                 *\n*                                                         *\n*            Copyright (c) 1994-2004 AT&T Corp.           *\n*                and is licensed under the                *\n*            Common Public License, Version 1.0           *\n*                      by AT&T Corp.                      *\n*                                                         *\n*        Information and Software Systems Research        *\n*              AT&T Research, Florham Park NJ             *\n**********************************************************/\n\n\n/************************************************\n\n\tFunctions for computing the high-dimensional\n\tembedding and the PCA projection.\n\n************************************************/\n\n\n#include \"dijkstra.h\"\n#include \"bfs.h\"\n#include \"kkutils.h\"\n#include \"embed_graph.h\"\n#include <stdlib.h>\n#include <stdio.h>\n#include <time.h>\n/* #include <math.h> */\n\nvoid embed_graph(vtx_data * graph, int n, int dim, DistType *** Coords,\n\t\t int reweight_graph)\n{\n/* Compute 'dim'-dimensional high-dimensional embedding (HDE) for the 'n' nodes\n  The embedding is based on chossing 'dim' pivots, and associating each\n  coordinate with a unique pivot, assigning it to the graph-theoretic distances \n  of all nodes from the pivots\n*/\n\n    int i, j;\n    int node;\n    DistType *storage = N_GNEW(n * dim, DistType);\n    DistType **coords = *Coords;\n    DistType *dist = N_GNEW(n, DistType);\t/* this vector stores  the distances of\n\t\t\t\t\t\t   each nodes to the selected \"pivots\" */\n    float *old_weights = graph[0].ewgts;\n    Queue Q;\n    DistType max_dist = 0;\n\n    if (coords != NULL) {\n\tfree(coords[0]);\n\tfree(coords);\n    }\n\n    /* this matrix stores the distance between each node and each \"pivot\" */\n    *Coords = coords = N_GNEW(dim, DistType *);\n    for (i = 0; i < dim; i++)\n\tcoords[i] = storage + i * n;\n\n    if (reweight_graph) {\n\tcompute_new_weights(graph, n);\n    }\n\n    /* select the first pivot */\n    node = rand() % n;\n\n    mkQueue(&Q, n);\n    if (reweight_graph) {\n\tdijkstra(node, graph, n, coords[0]);\n    } else {\n\tbfs(node, graph, n, coords[0], &Q);\n    }\n\n    for (i = 0; i < n; i++) {\n\tdist[i] = coords[0][i];\n\tif (dist[i] > max_dist) {\n\t    node = i;\n\t    max_dist = dist[i];\n\t}\n    }\n\n    /* select other dim-1 nodes as pivots */\n    for (i = 1; i < dim; i++) {\n\tif (reweight_graph) {\n\t    dijkstra(node, graph, n, coords[i]);\n\t} else {\n\t    bfs(node, graph, n, coords[i], &Q);\n\t}\n\tmax_dist = 0;\n\tfor (j = 0; j < n; j++) {\n\t    dist[j] = MIN(dist[j], coords[i][j]);\n\t    if (dist[j] > max_dist) {\n\t\tnode = j;\n\t\tmax_dist = dist[j];\n\t    }\n\t}\n\n    }\n\n    free(dist);\n\n    if (reweight_graph) {\n\trestore_old_weights(graph, n, old_weights);\n    }\n\n}\n\n /* Make each axis centered around 0 */\nvoid center_coordinate(DistType ** coords, int n, int dim)\n{\n    int i, j;\n    double sum, avg;\n    for (i = 0; i < dim; i++) {\n\tsum = 0;\n\tfor (j = 0; j < n; j++) {\n\t    sum += coords[i][j];\n\t}\n\tavg = sum / n;\n\tfor (j = 0; j < n; j++) {\n\t    coords[i][j] -= (DistType) avg;\n\t}\n    }\n}\n"
  },
  {
    "path": "experimental/neatogen/embed_graph.h",
    "content": "/* $Id: embed_graph.h,v 1.1.1.1 2004/12/23 04:05:11 ellson Exp $ $Revision: 1.1.1.1 $ */\n/* vim:set shiftwidth=4 ts=8: */\n\n/**********************************************************\n*      This software is part of the graphviz package      *\n*                http://www.graphviz.org/                 *\n*                                                         *\n*            Copyright (c) 1994-2004 AT&T Corp.           *\n*                and is licensed under the                *\n*            Common Public License, Version 1.0           *\n*                      by AT&T Corp.                      *\n*                                                         *\n*        Information and Software Systems Research        *\n*              AT&T Research, Florham Park NJ             *\n**********************************************************/\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n\n\n#ifndef EMBED_GRAPH_H_\n#define EMBED_GRAPH_H_\n\n#ifdef __cplusplus\n\n    void embed_graph(vtx_data * graph, int n, int dim,\n\t\t     DistType ** (&coords), int);\n    void center_coordinate(DistType ** coords, int n, int dim);\n    void PCA(DistType ** coords, int dim, int n, double **(&new_coords),\n\t     int new_dim);\n    void PCA(DistType ** coords, int dim, int n, double **(&new_coords),\n\t     int dim1, int dim2, bool recompute);\n    void PCA_orthog(DistType ** coords, int dim, int n,\n\t\t    double **(&new_coords), int new_dim, double *orthog);\n    void iterativePCA(DistType ** coords, int dim, int n,\n\t\t      double **(&new_coords));\n\n#else\n#include <defs.h>\n\n    extern void embed_graph(vtx_data * graph, int n, int dim, DistType ***,\n\t\t\t    int);\n    extern void center_coordinate(DistType **, int, int);\n\n#endif\n\n#endif\n\n#ifdef __cplusplus\n}\n#endif\n"
  },
  {
    "path": "experimental/neatogen/find_ints.c",
    "content": "/* $Id: find_ints.c,v 1.2 2005/02/23 18:58:12 ellson Exp $ $Revision: 1.2 $ */\n/* vim:set shiftwidth=4 ts=8: */\n\n/**********************************************************\n*      This software is part of the graphviz package      *\n*                http://www.graphviz.org/                 *\n*                                                         *\n*            Copyright (c) 1994-2004 AT&T Corp.           *\n*                and is licensed under the                *\n*            Common Public License, Version 1.0           *\n*                      by AT&T Corp.                      *\n*                                                         *\n*        Information and Software Systems Research        *\n*              AT&T Research, Florham Park NJ             *\n**********************************************************/\n\n\n#include <render.h>\n#include \"simple.h\"\n#include <stdlib.h>\n\nextern void\nfind_intersection(struct vertex *l,\n\t\t  struct vertex *m,\n\t\t  struct intersection ilist[], struct data *input);\nstatic int gt(struct vertex **i, struct vertex **j);\n\nvoid\nfind_ints(struct vertex vertex_list[],\n\t  struct polygon polygon_list[],\n\t  struct data *input, struct intersection ilist[])\n{\n    int i, j, k;\n    struct active_edge_list all;\n    struct active_edge *new, *tempa;\n    struct vertex *pt1, *pt2, *templ, **pvertex;\n\n    input->ninters = 0;\n    all.first = all.final = 0;\n    all.number = 0;\n\n    pvertex = N_GNEW(input->nvertices, struct vertex *);\n\n    for (i = 0; i < input->nvertices; i++)\n\tpvertex[i] = vertex_list + i;\n\n/* sort vertices by x coordinate\t*/\n    qsort(pvertex, input->nvertices, sizeof(struct vertex *),\n    \t  (int (*)(const void *, const void *))gt);\n\n/* walk through the vertices in order of increasing x coordinate\t*/\n    for (i = 0; i < input->nvertices; i++) {\n\tpt1 = pvertex[i];\n\ttempl = pt2 = prior(pvertex[i]);\n\tfor (k = 0; k < 2; k++) {\t/* each vertex has 2 edges */\n\t    switch (gt(&pt1, &pt2)) {\n\n\t    case -1:\t\t/* forward edge, test and insert      */\n\n\t\tfor (tempa = all.first, j = 0; j < all.number;\n\t\t     j++, tempa = tempa->next)\n\t\t    find_intersection(tempa->name, templ, ilist, input);\t/* test */\n\n\t\tnew = GNEW(struct active_edge);\n\t\tif (all.number == 0) {\n\t\t    all.first = new;\n\t\t    new->last = 0;\n\t\t} /* insert */\n\t\telse {\n\t\t    all.final->next = new;\n\t\t    new->last = all.final;\n\t\t}\n\n\t\tnew->name = templ;\n\t\tnew->next = 0;\n\t\ttempl->active = new;\n\t\tall.final = new;\n\t\tall.number++;\n\n\t\tbreak;\t\t/* end of case -1       */\n\n\t    case 1:\t\t/* backward edge, delete        */\n\n\t\tif ((tempa = templ->active) == 0) {\n\t\t    agerr(AGERR, \"trying to delete a non line\\n\");\n\t\t    exit(1);\n\t\t}\n\t\tif (all.number == 1)\n\t\t    all.final = all.first = 0;\t/* delete the line */\n\t\telse if (tempa == all.first) {\n\t\t    all.first = all.first->next;\n\t\t    all.first->last = 0;\n\t\t} else if (tempa == all.final) {\n\t\t    all.final = all.final->last;\n\t\t    all.final->next = 0;\n\t\t} else {\n\t\t    tempa->last->next = tempa->next;\n\t\t    tempa->next->last = tempa->last;\n\t\t}\n\t\tfree((char *) tempa);\n\t\tall.number--;\n\t\ttempl->active = 0;\n\t\tbreak;\t\t/* end of case 1        */\n\n\t    }\t\t\t/* end switch   */\n\n\t    pt2 = after(pvertex[i]);\n\t    templ = pvertex[i];\t/*second neighbor */\n\t}\t\t\t/* end k for loop       */\n    }\t\t\t\t/* end i for loop       */\n}\n\nstatic int gt(struct vertex **i, struct vertex **j)\n{\t\t\t\t/* i > j if i.x > j.x or i.x = j.x and i.y > j.y  */\n    double t;\n    if ((t = (*i)->pos.x - (*j)->pos.x) != 0.)\n\treturn ((t > 0.) ? 1 : -1);\n    if ((t = (*i)->pos.y - (*j)->pos.y) == 0.)\n\treturn (0);\n    else\n\treturn ((t > 0.) ? 1 : -1);\n}\n"
  },
  {
    "path": "experimental/neatogen/geometry.c",
    "content": "/* $Id: geometry.c,v 1.1.1.1 2004/12/23 04:05:11 ellson Exp $ $Revision: 1.1.1.1 $ */\n/* vim:set shiftwidth=4 ts=8: */\n\n/**********************************************************\n*      This software is part of the graphviz package      *\n*                http://www.graphviz.org/                 *\n*                                                         *\n*            Copyright (c) 1994-2004 AT&T Corp.           *\n*                and is licensed under the                *\n*            Common Public License, Version 1.0           *\n*                      by AT&T Corp.                      *\n*                                                         *\n*        Information and Software Systems Research        *\n*              AT&T Research, Florham Park NJ             *\n**********************************************************/\n\n#include \"geometry.h\"\n#include <math.h>\n\n\nPoint origin = { 0, 0 };\n\ndouble xmin, xmax, ymin, ymax;\t/* min and max x and y values of sites */\ndouble deltax,\t\t\t/* xmax - xmin */\n deltay;\t\t\t/* ymax - ymin */\n\nint nsites;\nint sqrt_nsites;\n\nvoid geominit()\n{\n    double sn;\n\n    sn = nsites + 4;\n    sqrt_nsites = (int) sqrt(sn);\n    /* deltay = ymax - ymin; */\n    /* deltax = xmax - xmin; */\n}\n\ndouble dist_2(Point * pp, Point * qp)\n{\n    double dx = pp->x - qp->x;\n    double dy = pp->y - qp->y;\n\n    return (dx * dx + dy * dy);\n}\n\nvoid subPt(Point * a, Point b, Point c)\n{\n    a->x = b.x - c.x;\n    a->y = b.y - c.y;\n}\n\nvoid addPt(Point * c, Point a, Point b)\n{\n    c->x = a.x + b.x;\n    c->y = a.y + b.y;\n}\n\ndouble area_2(Point a, Point b, Point c)\n{\n    return ((a.y - b.y) * (c.x - b.x) - (c.y - b.y) * (a.x - b.x));\n}\n\nint leftOf(Point a, Point b, Point c)\n{\n    return (area_2(a, b, c) > 0);\n}\n\nint intersection(Point a, Point b, Point c, Point d, Point * p)\n{\n    double s, t;\t\t/* The two parameters of the parametric eqns. */\n    double denom;\t\t/* Denominator of solutions. */\n\n    denom =\n\ta.x * (d.y - c.y) +\n\tb.x * (c.y - d.y) + d.x * (b.y - a.y) + c.x * (a.y - b.y);\n\n    /* If denom is zero, then the line segments are parallel. */\n    /* In this case, return false even though the segments might overlap. */\n    if (denom == 0.0)\n\treturn 0;\n\n    s = (a.x * (d.y - c.y) + c.x * (a.y - d.y) + d.x * (c.y - a.y)\n\t) / denom;\n    t = -(a.x * (c.y - b.y) + b.x * (a.y - c.y) + c.x * (b.y - a.y)\n\t) / denom;\n\n    p->x = a.x + s * (b.x - a.x);\n    p->y = a.y + s * (b.y - a.y);\n\n    if ((0.0 <= s) && (s <= 1.0) && (0.0 <= t) && (t <= 1.0))\n\treturn 1;\n    else\n\treturn 0;\n}\n"
  },
  {
    "path": "experimental/neatogen/geometry.h",
    "content": "/* $Id: geometry.h,v 1.2 2005/02/24 00:57:33 ellson Exp $ $Revision: 1.2 $ */\n/* vim:set shiftwidth=4 ts=8: */\n\n/**********************************************************\n*      This software is part of the graphviz package      *\n*                http://www.graphviz.org/                 *\n*                                                         *\n*            Copyright (c) 1994-2004 AT&T Corp.           *\n*                and is licensed under the                *\n*            Common Public License, Version 1.0           *\n*                      by AT&T Corp.                      *\n*                                                         *\n*        Information and Software Systems Research        *\n*              AT&T Research, Florham Park NJ             *\n**********************************************************/\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n\n\n#ifndef GEOMETRY_H\n#define GEOMETRY_H\n\n    typedef struct Point {\n\tdouble x, y;\n    } Point;\n\n    extern Point origin;\n\n    extern double xmin, xmax, ymin, ymax;\t/* extreme x,y values of sites */\n    extern double deltax, deltay;\t/* xmax - xmin, ymax - ymin */\n\n    extern int nsites;\t\t/* Number of sites */\n    extern int sqrt_nsites;\n\n    extern void geominit(void);\n    extern double dist_2(Point *, Point *);\t/* Distance squared between two points */\n    extern void subPt(Point * a, Point b, Point c);\n    extern void addPt(Point * a, Point b, Point c);\n    extern double area_2(Point a, Point b, Point c);\n    extern int leftOf(Point a, Point b, Point c);\n    extern int intersection(Point a, Point b, Point c, Point d, Point * p);\n\n#endif\n\n\n#ifdef __cplusplus\n}\n#endif\n"
  },
  {
    "path": "experimental/neatogen/heap.c",
    "content": "/* $Id: heap.c,v 1.3 2005/03/30 23:17:05 erg Exp $ $Revision: 1.3 $ */\n/* vim:set shiftwidth=4 ts=8: */\n\n/**********************************************************\n*      This software is part of the graphviz package      *\n*                http://www.graphviz.org/                 *\n*                                                         *\n*            Copyright (c) 1994-2004 AT&T Corp.           *\n*                and is licensed under the                *\n*            Common Public License, Version 1.0           *\n*                      by AT&T Corp.                      *\n*                                                         *\n*        Information and Software Systems Research        *\n*              AT&T Research, Florham Park NJ             *\n**********************************************************/\n\n\n#include \"render.h\"\n#include <stdio.h>\n\n#include \"mem.h\"\n#include \"hedges.h\"\n#include \"heap.h\"\n\n\nstatic Halfedge *PQhash;\nstatic int PQhashsize;\nstatic int PQcount;\nstatic int PQmin;\n\nstatic int PQbucket(Halfedge * he)\n{\n    int bucket;\n    double b;\n\n    b = (he->ystar - ymin) / deltay * PQhashsize;\n    if (b < 0)\n\tbucket = 0;\n    else if (b >= PQhashsize)\n\tbucket = PQhashsize - 1;\n    else\n\tbucket = b;\n    if (bucket < PQmin)\n\tPQmin = bucket;\n    return (bucket);\n}\n\nvoid PQinsert(Halfedge * he, Site * v, double offset)\n{\n    Halfedge *last, *next;\n\n    he->vertex = v;\n    ref(v);\n    he->ystar = v->coord.y + offset;\n    last = &PQhash[PQbucket(he)];\n    while ((next = last->PQnext) != (struct Halfedge *) NULL &&\n\t   (he->ystar > next->ystar ||\n\t    (he->ystar == next->ystar\n\t     && v->coord.x > next->vertex->coord.x))) {\n\tlast = next;\n    }\n    he->PQnext = last->PQnext;\n    last->PQnext = he;\n    PQcount += 1;\n}\n\nvoid PQdelete(Halfedge * he)\n{\n    Halfedge *last;\n\n    if (he->vertex != (Site *) NULL) {\n\tlast = &PQhash[PQbucket(he)];\n\twhile (last->PQnext != he)\n\t    last = last->PQnext;\n\tlast->PQnext = he->PQnext;\n\tPQcount -= 1;\n\tderef(he->vertex);\n\the->vertex = (Site *) NULL;\n    }\n}\n\n\nint PQempty(void)\n{\n    return (PQcount == 0);\n}\n\n\nPoint PQ_min(void)\n{\n    Point answer;\n\n    while (PQhash[PQmin].PQnext == (struct Halfedge *) NULL) {\n\tPQmin += 1;\n    }\n    answer.x = PQhash[PQmin].PQnext->vertex->coord.x;\n    answer.y = PQhash[PQmin].PQnext->ystar;\n    return (answer);\n}\n\nHalfedge *PQextractmin(void)\n{\n    Halfedge *curr;\n\n    curr = PQhash[PQmin].PQnext;\n    PQhash[PQmin].PQnext = curr->PQnext;\n    PQcount -= 1;\n    return (curr);\n}\n\nvoid PQcleanup(void)\n{\n    free(PQhash);\n    PQhash = NULL;\n}\n\nvoid PQinitialize(void)\n{\n    int i;\n\n    PQcount = 0;\n    PQmin = 0;\n    PQhashsize = 4 * sqrt_nsites;\n    if (PQhash == NULL)\n\tPQhash = N_GNEW(PQhashsize, Halfedge);\n    for (i = 0; i < PQhashsize; i += 1)\n\tPQhash[i].PQnext = (Halfedge *) NULL;\n}\n\nstatic void PQdumphe(Halfedge * p)\n{\n    printf(\"  [%p] %p %p %d %d %d %d %f\\n\",\n\t   p, p->ELleft, p->ELright, p->ELedge->edgenbr,\n\t   p->ELrefcnt, p->ELpm, (p->vertex ? p->vertex->sitenbr : -1),\n\t   p->ystar);\n}\n\nvoid PQdump(void)\n{\n    int i;\n    Halfedge *p;\n\n    for (i = 0; i < PQhashsize; i += 1) {\n\tprintf(\"[%d]\\n\", i);\n\tp = PQhash[i].PQnext;\n\twhile (p != NULL) {\n\t    PQdumphe(p);\n\t    p = p->PQnext;\n\t}\n    }\n\n}\n"
  },
  {
    "path": "experimental/neatogen/heap.h",
    "content": "/* $Id: heap.h,v 1.2 2005/02/24 00:57:33 ellson Exp $ $Revision: 1.2 $ */\n/* vim:set shiftwidth=4 ts=8: */\n\n/**********************************************************\n*      This software is part of the graphviz package      *\n*                http://www.graphviz.org/                 *\n*                                                         *\n*            Copyright (c) 1994-2004 AT&T Corp.           *\n*                and is licensed under the                *\n*            Common Public License, Version 1.0           *\n*                      by AT&T Corp.                      *\n*                                                         *\n*        Information and Software Systems Research        *\n*              AT&T Research, Florham Park NJ             *\n**********************************************************/\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n\n\n#ifndef HEAP_H\n#define HEAP_H\n\n#include \"hedges.h\"\n\n    extern void PQinitialize(void);\n    extern void PQcleanup(void);\n    extern Halfedge *PQextractmin(void);\n    extern Point PQ_min(void);\n    extern int PQempty(void);\n    extern void PQdelete(Halfedge *);\n    extern void PQinsert(Halfedge *, Site *, double);\n\n#endif\n\n#ifdef __cplusplus\n}\n#endif\n"
  },
  {
    "path": "experimental/neatogen/hedges.c",
    "content": "/* $Id: hedges.c,v 1.1.1.1 2004/12/23 04:05:12 ellson Exp $ $Revision: 1.1.1.1 $ */\n/* vim:set shiftwidth=4 ts=8: */\n\n/**********************************************************\n*      This software is part of the graphviz package      *\n*                http://www.graphviz.org/                 *\n*                                                         *\n*            Copyright (c) 1994-2004 AT&T Corp.           *\n*                and is licensed under the                *\n*            Common Public License, Version 1.0           *\n*                      by AT&T Corp.                      *\n*                                                         *\n*        Information and Software Systems Research        *\n*              AT&T Research, Florham Park NJ             *\n**********************************************************/\n\n#include \"mem.h\"\n#include \"hedges.h\"\n#include \"render.h\"\n\n\n#define DELETED -2\n\nHalfedge *ELleftend, *ELrightend;\n\nstatic Freelist hfl;\nstatic int ELhashsize;\nstatic Halfedge **ELhash;\nstatic int ntry, totalsearch;\n\nvoid ELcleanup()\n{\n    freeinit(&hfl, sizeof **ELhash);\n    free(ELhash);\n    ELhash = NULL;\n}\n\nvoid ELinitialize()\n{\n    int i;\n\n    freeinit(&hfl, sizeof **ELhash);\n    ELhashsize = 2 * sqrt_nsites;\n    if (ELhash == NULL)\n\tELhash = N_GNEW(ELhashsize, Halfedge *);\n    for (i = 0; i < ELhashsize; i += 1)\n\tELhash[i] = (Halfedge *) NULL;\n    ELleftend = HEcreate((Edge *) NULL, 0);\n    ELrightend = HEcreate((Edge *) NULL, 0);\n    ELleftend->ELleft = (Halfedge *) NULL;\n    ELleftend->ELright = ELrightend;\n    ELrightend->ELleft = ELleftend;\n    ELrightend->ELright = (Halfedge *) NULL;\n    ELhash[0] = ELleftend;\n    ELhash[ELhashsize - 1] = ELrightend;\n}\n\n\nSite *hintersect(Halfedge * el1, Halfedge * el2)\n{\n    Edge *e1, *e2, *e;\n    Halfedge *el;\n    double d, xint, yint;\n    int right_of_site;\n    Site *v;\n\n    e1 = el1->ELedge;\n    e2 = el2->ELedge;\n    if (e1 == (Edge *) NULL || e2 == (Edge *) NULL)\n\treturn ((Site *) NULL);\n    if (e1->reg[1] == e2->reg[1])\n\treturn ((Site *) NULL);\n\n    d = e1->a * e2->b - e1->b * e2->a;\n    if (-1.0e-10 < d && d < 1.0e-10)\n\treturn ((Site *) NULL);\n\n    xint = (e1->c * e2->b - e2->c * e1->b) / d;\n    yint = (e2->c * e1->a - e1->c * e2->a) / d;\n\n    if ((e1->reg[1]->coord.y < e2->reg[1]->coord.y) ||\n\t(e1->reg[1]->coord.y == e2->reg[1]->coord.y &&\n\t e1->reg[1]->coord.x < e2->reg[1]->coord.x)) {\n\tel = el1;\n\te = e1;\n    } else {\n\tel = el2;\n\te = e2;\n    };\n    right_of_site = xint >= e->reg[1]->coord.x;\n    if ((right_of_site && el->ELpm == le) ||\n\t(!right_of_site && el->ELpm == re))\n\treturn ((Site *) NULL);\n\n    v = getsite();\n    v->refcnt = 0;\n    v->coord.x = xint;\n    v->coord.y = yint;\n    return (v);\n}\n\n/* returns 1 if p is to right of halfedge e */\nint right_of(Halfedge * el, Point * p)\n{\n    Edge *e;\n    Site *topsite;\n    int right_of_site, above, fast;\n    double dxp, dyp, dxs, t1, t2, t3, yl;\n\n    e = el->ELedge;\n    topsite = e->reg[1];\n    right_of_site = p->x > topsite->coord.x;\n    if (right_of_site && el->ELpm == le)\n\treturn (1);\n    if (!right_of_site && el->ELpm == re)\n\treturn (0);\n\n    if (e->a == 1.0) {\n\tdyp = p->y - topsite->coord.y;\n\tdxp = p->x - topsite->coord.x;\n\tfast = 0;\n\tif ((!right_of_site & (e->b < 0.0)) |\n\t    (right_of_site & (e->b >= 0.0))) {\n\t    above = dyp >= e->b * dxp;\n\t    fast = above;\n\t} else {\n\t    above = p->x + p->y * e->b > e->c;\n\t    if (e->b < 0.0)\n\t\tabove = !above;\n\t    if (!above)\n\t\tfast = 1;\n\t};\n\tif (!fast) {\n\t    dxs = topsite->coord.x - (e->reg[0])->coord.x;\n\t    above = e->b * (dxp * dxp - dyp * dyp) <\n\t\tdxs * dyp * (1.0 + 2.0 * dxp / dxs + e->b * e->b);\n\t    if (e->b < 0.0)\n\t\tabove = !above;\n\t};\n    } else {\t\t\t/*e->b==1.0 */\n\tyl = e->c - e->a * p->x;\n\tt1 = p->y - yl;\n\tt2 = p->x - topsite->coord.x;\n\tt3 = yl - topsite->coord.y;\n\tabove = t1 * t1 > t2 * t2 + t3 * t3;\n    };\n    return (el->ELpm == le ? above : !above);\n}\n\nHalfedge *HEcreate(Edge * e, char pm)\n{\n    Halfedge *answer;\n    answer = (Halfedge *) getfree(&hfl);\n    answer->ELedge = e;\n    answer->ELpm = pm;\n    answer->PQnext = (Halfedge *) NULL;\n    answer->vertex = (Site *) NULL;\n    answer->ELrefcnt = 0;\n    return (answer);\n}\n\n\nvoid ELinsert(Halfedge * lb, Halfedge * new)\n{\n    new->ELleft = lb;\n    new->ELright = lb->ELright;\n    (lb->ELright)->ELleft = new;\n    lb->ELright = new;\n}\n\n/* Get entry from hash table, pruning any deleted nodes */\nstatic Halfedge *ELgethash(int b)\n{\n    Halfedge *he;\n\n    if (b < 0 || b >= ELhashsize)\n\treturn ((Halfedge *) NULL);\n    he = ELhash[b];\n    if (he == (Halfedge *) NULL || he->ELedge != (Edge *) DELETED)\n\treturn (he);\n\n/* Hash table points to deleted half edge.  Patch as necessary. */\n    ELhash[b] = (Halfedge *) NULL;\n    if ((he->ELrefcnt -= 1) == 0)\n\tmakefree(he, &hfl);\n    return ((Halfedge *) NULL);\n}\n\nHalfedge *ELleftbnd(Point * p)\n{\n    int i, bucket;\n    Halfedge *he;\n\n/* Use hash table to get close to desired halfedge */\n    bucket = (p->x - xmin) / deltax * ELhashsize;\n    if (bucket < 0)\n\tbucket = 0;\n    if (bucket >= ELhashsize)\n\tbucket = ELhashsize - 1;\n    he = ELgethash(bucket);\n    if (he == (Halfedge *) NULL) {\n\tfor (i = 1; 1; i += 1) {\n\t    if ((he = ELgethash(bucket - i)) != (Halfedge *) NULL)\n\t\tbreak;\n\t    if ((he = ELgethash(bucket + i)) != (Halfedge *) NULL)\n\t\tbreak;\n\t};\n\ttotalsearch += i;\n    };\n    ntry += 1;\n/* Now search linear list of halfedges for the corect one */\n    if (he == ELleftend || (he != ELrightend && right_of(he, p))) {\n\tdo {\n\t    he = he->ELright;\n\t} while (he != ELrightend && right_of(he, p));\n\the = he->ELleft;\n    } else\n\tdo {\n\t    he = he->ELleft;\n\t} while (he != ELleftend && !right_of(he, p));\n\n/* Update hash table and reference counts */\n    if (bucket > 0 && bucket < ELhashsize - 1) {\n\tif (ELhash[bucket] != (Halfedge *) NULL)\n\t    ELhash[bucket]->ELrefcnt -= 1;\n\tELhash[bucket] = he;\n\tELhash[bucket]->ELrefcnt += 1;\n    };\n    return (he);\n}\n\n\n/* This delete routine can't reclaim node, since pointers from hash\n   table may be present.   */\nvoid ELdelete(Halfedge * he)\n{\n    (he->ELleft)->ELright = he->ELright;\n    (he->ELright)->ELleft = he->ELleft;\n    he->ELedge = (Edge *) DELETED;\n}\n\n\nHalfedge *ELright(Halfedge * he)\n{\n    return (he->ELright);\n}\n\nHalfedge *ELleft(Halfedge * he)\n{\n    return (he->ELleft);\n}\n\n\nSite *leftreg(Halfedge * he)\n{\n    if (he->ELedge == (Edge *) NULL)\n\treturn (bottomsite);\n    return (he->ELpm == le ? he->ELedge->reg[le] : he->ELedge->reg[re]);\n}\n\nSite *rightreg(Halfedge * he)\n{\n    if (he->ELedge == (Edge *) NULL)\n\treturn (bottomsite);\n    return (he->ELpm == le ? he->ELedge->reg[re] : he->ELedge->reg[le]);\n}\n"
  },
  {
    "path": "experimental/neatogen/hedges.h",
    "content": "/* $Id: hedges.h,v 1.2 2005/02/24 00:57:33 ellson Exp $ $Revision: 1.2 $ */\n/* vim:set shiftwidth=4 ts=8: */\n\n/**********************************************************\n*      This software is part of the graphviz package      *\n*                http://www.graphviz.org/                 *\n*                                                         *\n*            Copyright (c) 1994-2004 AT&T Corp.           *\n*                and is licensed under the                *\n*            Common Public License, Version 1.0           *\n*                      by AT&T Corp.                      *\n*                                                         *\n*        Information and Software Systems Research        *\n*              AT&T Research, Florham Park NJ             *\n**********************************************************/\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n\n\n#ifndef HEDGES_H\n#define HEDGES_H\n\n#include \"site.h\"\n#include \"edges.h\"\n\n    typedef struct Halfedge {\n\tstruct Halfedge *ELleft, *ELright;\n\tEdge *ELedge;\n\tint ELrefcnt;\n\tchar ELpm;\n\tSite *vertex;\n\tdouble ystar;\n\tstruct Halfedge *PQnext;\n    } Halfedge;\n\n    extern Halfedge *ELleftend, *ELrightend;\n\n    extern void ELinitialize(void);\n    extern void ELcleanup(void);\n    extern int right_of(Halfedge *, Point *);\n    extern Site *hintersect(Halfedge *, Halfedge *);\n    extern Halfedge *HEcreate(Edge *, char);\n    extern void ELinsert(Halfedge *, Halfedge *);\n    extern Halfedge *ELleftbnd(Point *);\n    extern void ELdelete(Halfedge *);\n    extern Halfedge *ELleft(Halfedge *), *ELright(Halfedge *);\n    extern Halfedge *ELleftbnd(Point *);\n    extern Site *leftreg(Halfedge *), *rightreg(Halfedge *);\n\n#endif\n\n#ifdef __cplusplus\n}\n#endif\n"
  },
  {
    "path": "experimental/neatogen/info.c",
    "content": "/* $Id: info.c,v 1.1.1.1 2004/12/23 04:05:12 ellson Exp $ $Revision: 1.1.1.1 $ */\n/* vim:set shiftwidth=4 ts=8: */\n\n/**********************************************************\n*      This software is part of the graphviz package      *\n*                http://www.graphviz.org/                 *\n*                                                         *\n*            Copyright (c) 1994-2004 AT&T Corp.           *\n*                and is licensed under the                *\n*            Common Public License, Version 1.0           *\n*                      by AT&T Corp.                      *\n*                                                         *\n*        Information and Software Systems Research        *\n*              AT&T Research, Florham Park NJ             *\n**********************************************************/\n\n#include \"neato.h\"\n#include <stdio.h>\n#include \"mem.h\"\n#include \"info.h\"\n\n\nInfo_t *nodeInfo;\t\t/* Array of node info */\nstatic Freelist pfl;\n\nvoid infoinit()\n{\n    freeinit(&pfl, sizeof(PtItem));\n}\n\n/* compare:\n * returns -1 if p < q\n *          0 if p = q\n *          1 if p > q\n * if q if NULL, returns -1\n * Ordering is by angle from -pi/2 to 3pi/4.\n * For equal angles (which should not happen in our context)\n * ordering is by closeness to origin.\n */\nstatic int compare(Point * o, PtItem * p, PtItem * q)\n{\n    double x0;\n    double y0;\n    double x1;\n    double y1;\n    double a, b;\n\n    if (q == NULL)\n\treturn -1;\n    if ((p->p.x == q->p.x) && (p->p.y == q->p.y))\n\treturn 0;\n\n    x0 = ((double) (p->p.x)) - ((double) (o->x));\n    y0 = ((double) (p->p.y)) - ((double) (o->y));\n    x1 = ((double) (q->p.x)) - ((double) (o->x));\n    y1 = ((double) (q->p.y)) - ((double) (o->y));\n    if (x0 >= 0.0) {\n\tif (x1 < 0.0)\n\t    return -1;\n\telse if (x0 > 0.0) {\n\t    if (x1 > 0.0) {\n\t\ta = y1 / x1;\n\t\tb = y0 / x0;\n\t\tif (b < a)\n\t\t    return -1;\n\t\telse if (b > a)\n\t\t    return 1;\n\t\telse if (x0 < x1)\n\t\t    return -1;\n\t\telse\n\t\t    return 1;\n\t    } else {\t\t/* x1 == 0.0 */\n\t\tif (y1 > 0.0)\n\t\t    return -1;\n\t\telse\n\t\t    return 1;\n\t    }\n\t} else {\t\t/* x0 == 0.0 */\n\t    if (x1 > 0.0) {\n\t\tif (y0 <= 0.0)\n\t\t    return -1;\n\t\telse\n\t\t    return 1;\n\t    } else {\t\t/* x1 == 0.0 */\n\t\tif (y0 < y1) {\n\t\t    if (y1 <= 0.0)\n\t\t\treturn 1;\n\t\t    else\n\t\t\treturn -1;\n\t\t} else {\n\t\t    if (y0 <= 0.0)\n\t\t\treturn -1;\n\t\t    else\n\t\t\treturn 1;\n\t\t}\n\t    }\n\t}\n    } else {\n\tif (x1 >= 0.0)\n\t    return 1;\n\telse {\n\t    a = y1 / x1;\n\t    b = y0 / x0;\n\t    if (b < a)\n\t\treturn -1;\n\t    else if (b > a)\n\t\treturn 1;\n\t    else if (x0 > x1)\n\t\treturn -1;\n\t    else\n\t\treturn 1;\n\t}\n    }\n}\n\n#if 0\t\t\t\t/* not used */\nstatic void printV(PtItem * vp)\n{\n    if (vp == NULL) {\n\tfprintf(stderr, \"<empty>\\n\");\n\treturn;\n    }\n\n    while (vp != NULL) {\n\tfprintf(stderr, \"(%.16f,%.16f)\\n\", vp->p.x, vp->p.y);\n\tvp = vp->next;\n    }\n}\n\nstatic void error(Info_t * ip, Site * s, double x, double y)\n{\n    fprintf(stderr,\n\t    \"Unsorted vertex list for site %d (%.16f,%.16f), pt (%f,%f)\\n\",\n\t    s->sitenbr, s->coord.x, s->coord.y, x, y);\n    printV(ip->verts);\n}\n#endif\n\n#if 0\t\t\t\t/* not used */\nstatic int sorted(Point * origin, PtItem * vp)\n{\n    PtItem *next;\n\n    if (vp == NULL)\n\treturn 1;\n    next = vp->next;\n\n    while (next != NULL) {\n\tif (compare(origin, vp, next) <= 0) {\n\t    vp = next;\n\t    next = next->next;\n\t} else {\n\t    fprintf(stderr, \"(%.16f,%.16f) > (%.16f,%.16f)\\n\",\n\t\t    vp->p.x, vp->p.y, next->p.x, next->p.y);\n\t    return 0;\n\t}\n    }\n\n    return 1;\n\n}\n#endif\n\nvoid addVertex(Site * s, double x, double y)\n{\n    Info_t *ip;\n    PtItem *p;\n    PtItem *curr;\n    PtItem *prev;\n    Point *origin = &(s->coord);\n    PtItem tmp;\n    int cmp;\n\n    ip = nodeInfo + (s->sitenbr);\n    curr = ip->verts;\n\n    tmp.p.x = x;\n    tmp.p.y = y;\n\n    cmp = compare(origin, &tmp, curr);\n    if (cmp == 0)\n\treturn;\n    else if (cmp < 0) {\n\tp = (PtItem *) getfree(&pfl);\n\tp->p.x = x;\n\tp->p.y = y;\n\tp->next = curr;\n\tip->verts = p;\n\treturn;\n    }\n\n    prev = curr;\n    curr = curr->next;\n    while ((cmp = compare(origin, &tmp, curr)) > 0) {\n\tprev = curr;\n\tcurr = curr->next;\n    }\n    if (cmp == 0)\n\treturn;\n    p = (PtItem *) getfree(&pfl);\n    p->p.x = x;\n    p->p.y = y;\n    prev->next = p;\n    p->next = curr;\n\n    /* This test should be unnecessary */\n    /* if (!sorted(origin,ip->verts))  */\n    /* error (ip,s,x,y); */\n\n}\n"
  },
  {
    "path": "experimental/neatogen/info.h",
    "content": "/* $Id: info.h,v 1.2 2005/02/24 00:57:33 ellson Exp $ $Revision: 1.2 $ */\n/* vim:set shiftwidth=4 ts=8: */\n\n/**********************************************************\n*      This software is part of the graphviz package      *\n*                http://www.graphviz.org/                 *\n*                                                         *\n*            Copyright (c) 1994-2004 AT&T Corp.           *\n*                and is licensed under the                *\n*            Common Public License, Version 1.0           *\n*                      by AT&T Corp.                      *\n*                                                         *\n*        Information and Software Systems Research        *\n*              AT&T Research, Florham Park NJ             *\n**********************************************************/\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n\n\n#ifndef INFO_H\n#define INFO_H\n\n#include \"voronoi.h\"\n#include \"poly.h\"\n#include \"graph.h\"\n\n    typedef struct ptitem {\t/* Point list */\n\tstruct ptitem *next;\n\tPoint p;\n    } PtItem;\n\n    typedef struct {\t\t/* Info concerning site */\n\tAgnode_t *node;\t\t/* libgraph node */\n\tSite site;\t\t/* site used by voronoi code */\n\tint overlaps;\t\t/* true if node overlaps other nodes */\n\tPoly poly;\t\t/* polygon at node */\n\tPtItem *verts;\t\t/* sorted list of vertices of */\n\t/* voronoi polygon */\n    } Info_t;\n\n    extern Info_t *nodeInfo;\t/* Array of node info */\n\n    extern void infoinit(void);\n    /* Insert vertex into sorted list */\n    extern void addVertex(Site *, double, double);\n#endif\n\n#ifdef __cplusplus\n}\n#endif\n"
  },
  {
    "path": "experimental/neatogen/intersect.c",
    "content": "/* $Id: intersect.c,v 1.2 2005/02/24 00:57:33 ellson Exp $ $Revision: 1.2 $ */\n/* vim:set shiftwidth=4 ts=8: */\n\n/**********************************************************\n*      This software is part of the graphviz package      *\n*                http://www.graphviz.org/                 *\n*                                                         *\n*            Copyright (c) 1994-2004 AT&T Corp.           *\n*                and is licensed under the                *\n*            Common Public License, Version 1.0           *\n*                      by AT&T Corp.                      *\n*                                                         *\n*        Information and Software Systems Research        *\n*              AT&T Research, Florham Park NJ             *\n**********************************************************/\n\n#include \"neato.h\"\n#include \"simple.h\"\n\n/* find the sign of the area of each of the triangles\n    formed by adding a vertex of m to l  \n    also find the sign of their product  */\nstatic void sgnarea(struct vertex *l, struct vertex *m, int i[])\n{\n    double a, b, c, d, e, f, g, h, t;\n    a = l->pos.x;\n    b = l->pos.y;\n    c = after(l)->pos.x - a;\n    d = after(l)->pos.y - b;\n    e = m->pos.x - a;\n    f = m->pos.y - b;\n    g = after(m)->pos.x - a;\n    h = after(m)->pos.y - b;\n    t = (c * f) - (d * e);\n    i[0] = ((t == 0) ? 0 : (t > 0 ? 1 : -1));\n    t = (c * h) - (d * g);\n    i[1] = ((t == 0) ? 0 : (t > 0 ? 1 : -1));\n    i[2] = i[0] * i[1];\n}\n\n/* determine if g lies between f and h      */\nstatic int between(double f, double g, double h)\n{\n    if ((f == g) || (g == h))\n\treturn (0);\n    return ((f < g) ? (g < h ? 1 : -1) : (h < g ? 1 : -1));\n}\n\n/* determine if vertex i of line m is on line l     */\nstatic int online(struct vertex *l, struct vertex *m, int i)\n{\n    struct position a, b, c;\n    a = l->pos;\n    b = after(l)->pos;\n    c = (i == 0) ? m->pos : after(m)->pos;\n    return ((a.x == b.x) ? ((a.x == c.x)\n\t\t\t    && (-1 !=\n\t\t\t\tbetween(a.y, c.y, b.y))) : between(a.x,\n\t\t\t\t\t\t\t\t   c.x,\n\t\t\t\t\t\t\t\t   b.x));\n}\n\n/* determine point of detected intersections  */\nstatic int intpoint(struct vertex *l, struct vertex *m, double *x, double *y, int cond)\n{\n    struct position ls, le, ms, me, pt1, pt2;\n    double m1, m2, c1, c2;\n\n    if (cond <= 0)\n\treturn (0);\n    ls = l->pos;\n    le = after(l)->pos;\n    ms = m->pos;\n    me = after(m)->pos;\n\n    switch (cond) {\n\n    case 3:\t\t\t/* a simple intersection        */\n\tif (ls.x == le.x) {\n\t    *x = ls.x;\n\t    *y = me.y + SLOPE(ms, me) * (*x - me.x);\n\t} else if (ms.x == me.x) {\n\t    *x = ms.x;\n\t    *y = le.y + SLOPE(ls, le) * (*x - le.x);\n\t} else {\n\t    m1 = SLOPE(ms, me);\n\t    m2 = SLOPE(ls, le);\n\t    c1 = ms.y - (m1 * ms.x);\n\t    c2 = ls.y - (m2 * ls.x);\n\t    *x = (c2 - c1) / (m1 - m2);\n\t    *y = ((m1 * c2) - (c1 * m2)) / (m1 - m2);\n\t}\n\tbreak;\n\n    case 2:\t\t\t/*     the two lines  have a common segment  */\n\tif (online(l, m, 0) == -1) {\t/* ms between ls and le */\n\t    pt1 = ms;\n\t    pt2 =\n\t\t(online(m, l, 1) ==\n\t\t -1) ? ((online(m, l, 0) == -1) ? le : ls) : me;\n\t} else if (online(l, m, 1) == -1) {\t/* me between ls and le */\n\t    pt1 = me;\n\t    pt2 =\n\t\t(online(l, m, 0) ==\n\t\t -1) ? ((online(m, l, 0) == -1) ? le : ls) : ms;\n\t} else {\n\t    /* may be degenerate? */\n\t    if (online(m, l, 0) != -1)\n\t\treturn 0;\n\t    pt1 = ls;\n\t    pt2 = le;\n\t}\n\n\t*x = (pt1.x + pt2.x) / 2;\n\t*y = (pt1.y + pt2.y) / 2;\n\tbreak;\n\n    case 1:\t\t\t/* a vertex of line m is on line l */\n\tif ((ls.x - le.x) * (ms.y - ls.y) == (ls.y - le.y) * (ms.x - ls.x)) {\n\t    *x = ms.x;\n\t    *y = ms.y;\n\t} else {\n\t    *x = me.x;\n\t    *y = me.y;\n\t}\n    }\t\t\t\t/* end switch  */\n    return (1);\n}\n\n/*detect whether lines l and m intersect      */\nvoid find_intersection(struct vertex *l,\n\t\t  struct vertex *m,\n\t\t  struct intersection ilist[], struct data *input)\n{\n    double x, y;\n    int i[3];\n    sgnarea(l, m, i);\n\n    if (i[2] > 0)\n\treturn;\n\n    if (i[2] < 0) {\n\tsgnarea(m, l, i);\n\tif (i[2] > 0)\n\t    return;\n\tif (!intpoint\n\t    (l, m, &x, &y, (i[2] < 0) ? 3 : online(m, l, ABS(i[0]))))\n\t    return;\n    }\n\n    else if (!intpoint(l, m, &x, &y, (i[0] == i[1]) ?\n\t\t       2 * MAX(online(l, m, 0),\n\t\t\t       online(l, m, 1)) : online(l, m, ABS(i[0]))))\n\treturn;\n\n    if (input->ninters >= MAXINTS) {\n\tagerr(AGERR, \"using too many intersections\\n\");\n\texit(1);\n    }\n\n    ilist[input->ninters].firstv = l;\n    ilist[input->ninters].secondv = m;\n    ilist[input->ninters].firstp = l->poly;\n    ilist[input->ninters].secondp = m->poly;\n    ilist[input->ninters].x = x;\n    ilist[input->ninters].y = y;\n    input->ninters++;\n}\n"
  },
  {
    "path": "experimental/neatogen/kkutils.c",
    "content": "/* $Id: kkutils.c,v 1.2 2005/07/13 20:29:40 erg Exp $ $Revision: 1.2 $ */\n/* vim:set shiftwidth=4 ts=8: */\n\n/**********************************************************\n*      This software is part of the graphviz package      *\n*                http://www.graphviz.org/                 *\n*                                                         *\n*            Copyright (c) 1994-2004 AT&T Corp.           *\n*                and is licensed under the                *\n*            Common Public License, Version 1.0           *\n*                      by AT&T Corp.                      *\n*                                                         *\n*        Information and Software Systems Research        *\n*              AT&T Research, Florham Park NJ             *\n**********************************************************/\n\n\n#include \"bfs.h\"\n#include \"dijkstra.h\"\n#include \"kkutils.h\"\n#include <stdlib.h>\n#include <math.h>\n\nint common_neighbors(vtx_data * graph, int v, int u, int *v_vector)\n{\n    /* count number of common neighbors of 'v' and 'u' */\n    int neighbor;\n    int num_shared_neighbors = 0;\n    int j;\n    for (j = 1; j < graph[u].nedges; j++) {\n\tneighbor = graph[u].edges[j];\n\tif (v_vector[neighbor] > 0) {\n\t    /* a shared neighobr */\n\t    num_shared_neighbors++;\n\t}\n    }\n    return num_shared_neighbors;\n}\nvoid fill_neighbors_vec_unweighted(vtx_data * graph, int vtx, int *vtx_vec)\n{\n    /* a node is NOT a neighbor of itself! */\n    /* unlike the other version of this function */\n    int j;\n    for (j = 1; j < graph[vtx].nedges; j++) {\n\tvtx_vec[graph[vtx].edges[j]] = 1;\n    }\n}\n\nvoid empty_neighbors_vec(vtx_data * graph, int vtx, int *vtx_vec)\n{\n    int j;\n    /* a node is NOT a neighbor of itself! */\n    /* unlike the other version ofthis function */\n    for (j = 1; j < graph[vtx].nedges; j++) {\n\tvtx_vec[graph[vtx].edges[j]] = 0;\n    }\n}\n\n/* compute_apsp_dijkstra:\n * Assumes the graph has weights\n */\nstatic DistType **compute_apsp_dijkstra(vtx_data * graph, int n)\n{\n    int i;\n    DistType *storage;\n    DistType **dij;\n\n    storage = N_GNEW(n * n, DistType);\n    dij = N_GNEW(n, DistType *);\n    for (i = 0; i < n; i++)\n\tdij[i] = storage + i * n;\n\n    for (i = 0; i < n; i++) {\n\tdijkstra(i, graph, n, dij[i]);\n    }\n    return dij;\n}\n\nstatic DistType **compute_apsp_simple(vtx_data * graph, int n)\n{\n    /* compute all pairs shortest path */\n    /* for unweighted graph */\n    int i;\n    DistType *storage = N_GNEW(n * n, int);\n    DistType **dij;\n    Queue Q;\n\n    dij = N_GNEW(n, DistType *);\n    for (i = 0; i < n; i++) {\n\tdij[i] = storage + i * n;\n    }\n    mkQueue(&Q, n);\n    for (i = 0; i < n; i++) {\n\tbfs(i, graph, n, dij[i], &Q);\n    }\n    freeQueue(&Q);\n    return dij;\n}\n\nDistType **compute_apsp(vtx_data * graph, int n)\n{\n    if (graph->ewgts)\n\treturn compute_apsp_dijkstra(graph, n);\n    else\n\treturn compute_apsp_simple(graph, n);\n}\n\nDistType **compute_apsp_artifical_weights(vtx_data * graph, int n)\n{\n    DistType **Dij;\n    /* compute all-pairs-shortest-path-length while weighting the graph */\n    /* so high-degree nodes are distantly located */\n\n    float *old_weights = graph[0].ewgts;\n\n    compute_new_weights(graph, n);\n    Dij = compute_apsp_dijkstra(graph, n);\n    restore_old_weights(graph, n, old_weights);\n    return Dij;\n}\n\n\n/**********************/\n/*\t\t\t\t      */\n/*  Quick Sort        */\n/*\t\t\t\t      */\n/**********************/\n\nstatic void\nsplit_by_place(double *place, int *nodes, int first, int last, int *middle)\n{\n    unsigned int splitter =\n\trand() * ((unsigned) (last - first)) / RAND_MAX + (unsigned) first;\n    int val;\n    double place_val;\n    int left = first + 1;\n    int right = last;\n    int temp;\n\n    val = nodes[splitter];\n    nodes[splitter] = nodes[first];\n    nodes[first] = val;\n    place_val = place[val];\n\n    while (left < right) {\n\twhile (left < right && place[nodes[left]] <= place_val)\n\t    left++;\n\twhile (left < right && place[nodes[right]] >= place_val)\n\t    right--;\n\tif (left < right) {\n\t    temp = nodes[left];\n\t    nodes[left] = nodes[right];\n\t    nodes[right] = temp;\n\t    left++;\n\t    right--;\t\t/* (1) */\n\n\t}\n    }\n    /* in this point either, left==right (meeting), or left=right+1 (because of (1)) */\n    /* we have to decide to which part the meeting point (or left) belongs. */\n    if (place[nodes[left]] > place_val)\n\tleft = left - 1;\t/* notice that always left>first, because of its initialization */\n    *middle = left;\n    nodes[first] = nodes[*middle];\n    nodes[*middle] = val;\n}\n\ndouble distance_kD(double **coords, int dim, int i, int j)\n{\n    /* compute a k-D Euclidean distance between 'coords[*][i]' and 'coords[*][j]' */\n    double sum = 0;\n    int k;\n    for (k = 0; k < dim; k++) {\n\tsum +=\n\t    (coords[k][i] - coords[k][j]) * (coords[k][i] - coords[k][j]);\n    }\n    return sqrt(sum);\n}\n\nstatic float* fvals;\nstatic int\nfcmpf (int* ip1, int* ip2)\n{\n    float d1 = fvals[*ip1];\n    float d2 = fvals[*ip2];\n    if (d1 < d2) return -1;\n    else if (d1 > d2) return 1;\n    else return 0;\n}\n\nvoid quicksort_placef(float *place, int *ordering, int first, int last)\n{\n    if (first < last) {\n\tfvals = place;\n\tqsort(ordering+first, last-first+1, sizeof(ordering[0]), (qsort_cmpf)fcmpf);\n    }\n}\n\n/* quicksort_place:\n * For now, we keep the current implementation for stability, but\n * we should consider replacing this with an implementation similar to\n * quicksort_placef above.\n */\nvoid quicksort_place(double *place, int *ordering, int first, int last)\n{\n    if (first < last) {\n\tint middle;\n#ifdef __cplusplus\n\tsplit_by_place(place, ordering, first, last, middle);\n#else\n\tsplit_by_place(place, ordering, first, last, &middle);\n#endif\n\tquicksort_place(place, ordering, first, middle - 1);\n\tquicksort_place(place, ordering, middle + 1, last);\n    }\n}\n\nvoid compute_new_weights(vtx_data * graph, int n)\n{\n    /* Reweight graph so that high degree nodes will be separated */\n\n    int i, j;\n    int nedges = 0;\n    float *weights;\n    int *vtx_vec = N_GNEW(n, int);\n    int deg_i, deg_j, neighbor;\n\n    for (i = 0; i < n; i++) {\n\tnedges += graph[i].nedges;\n    }\n    weights = N_GNEW(nedges, float);\n\n    for (i = 0; i < n; i++) {\n\tvtx_vec[i] = 0;\n    }\n\n    for (i = 0; i < n; i++) {\n\tgraph[i].ewgts = weights;\n\tfill_neighbors_vec_unweighted(graph, i, vtx_vec);\n\tdeg_i = graph[i].nedges - 1;\n\tfor (j = 1; j <= deg_i; j++) {\n\t    neighbor = graph[i].edges[j];\n\t    deg_j = graph[neighbor].nedges - 1;\n\t    weights[j] =\n\t\t(float) (deg_i + deg_j -\n\t\t\t 2 * common_neighbors(graph, i, neighbor,\n\t\t\t\t\t      vtx_vec));\n\t}\n\tempty_neighbors_vec(graph, i, vtx_vec);\n\tweights += graph[i].nedges;\n    }\n    free(vtx_vec);\n}\n\nvoid restore_old_weights(vtx_data * graph, int n, float *old_weights)\n{\n    int i;\n    free(graph[0].ewgts);\n    graph[0].ewgts = NULL;\n    if (old_weights != NULL) {\n\tfor (i = 0; i < n; i++) {\n\t    graph[i].ewgts = old_weights;\n\t    old_weights += graph[i].nedges;\n\t}\n    }\n}\n"
  },
  {
    "path": "experimental/neatogen/kkutils.h",
    "content": "/* $Id: kkutils.h,v 1.2 2005/07/13 20:29:40 erg Exp $ $Revision: 1.2 $ */\n/* vim:set shiftwidth=4 ts=8: */\n\n/**********************************************************\n*      This software is part of the graphviz package      *\n*                http://www.graphviz.org/                 *\n*                                                         *\n*            Copyright (c) 1994-2004 AT&T Corp.           *\n*                and is licensed under the                *\n*            Common Public License, Version 1.0           *\n*                      by AT&T Corp.                      *\n*                                                         *\n*        Information and Software Systems Research        *\n*              AT&T Research, Florham Park NJ             *\n**********************************************************/\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n\n\n#ifndef KKUTILS_H_\n#define KKUTILS_H_\n\n#include \"defs.h\"\n\n#ifdef __cplusplus\n\n    inline double distance_kD(double **coords, int dim, int i, int j) {\n\t/* compute a k-D Euclidean distance between 'coords[*][i]' and 'coords[*][j]' */\n\tdouble sum = 0;\n\tfor (int k = 0; k < dim; k++) {\n\t    sum +=\n\t\t(coords[k][i] - coords[k][j]) * (coords[k][i] -\n\t\t\t\t\t\t coords[k][j]);\n\t} return sqrt(sum);\n    }\n    void compute_apsp(vtx_data * graph, int n, DistType ** (&Dij));\n    void compute_apsp_artifical_weights(vtx_data * graph, int n,\n\t\t\t\t\tDistType ** (&Dij));\n\n    void quicksort_place(double *place, int *ordering, int first, int last);\n    void free_graph(vtx_data * (&graph));\n#else\n    extern void fill_neighbors_vec_unweighted(vtx_data *, int vtx,\n\t\t\t\t\t      int *vtx_vec);\n    extern int common_neighbors(vtx_data *, int v, int u, int *);\n    extern void empty_neighbors_vec(vtx_data * graph, int vtx,\n\t\t\t\t    int *vtx_vec);\n    extern DistType **compute_apsp(vtx_data *, int);\n    extern DistType **compute_apsp_artifical_weights(vtx_data *, int);\n    extern double distance_kD(double **, int, int, int);\n    extern void quicksort_place(double *, int *, int, int);\n    extern void quicksort_placef(float *, int *, int, int);\n    extern void compute_new_weights(vtx_data * graph, int n);\n    extern void restore_old_weights(vtx_data * graph, int n,\n\t\t\t\t    float *old_weights);\n#endif\n\n#endif\n\n#ifdef __cplusplus\n}\n#endif\n"
  },
  {
    "path": "experimental/neatogen/legal.c",
    "content": "/* $Id: legal.c,v 1.2 2005/02/17 15:34:31 erg Exp $ $Revision: 1.2 $ */\n/* vim:set shiftwidth=4 ts=8: */\n\n/**********************************************************\n*      This software is part of the graphviz package      *\n*                http://www.graphviz.org/                 *\n*                                                         *\n*            Copyright (c) 1994-2004 AT&T Corp.           *\n*                and is licensed under the                *\n*            Common Public License, Version 1.0           *\n*                      by AT&T Corp.                      *\n*                                                         *\n*        Information and Software Systems Research        *\n*              AT&T Research, Florham Park NJ             *\n**********************************************************/\n\n#include \"neato.h\"\n#include \"simple.h\"\n\n\nextern void\nfind_ints(struct vertex vertex_list[],\n\t  struct polygon polygon_list[],\n\t  struct data *input, struct intersection ilist[]);\nint Plegal_arrangement(Ppoly_t ** polys, int n_polys)\n{\n\n    int i, j, vno, nverts, rv;\n\n    struct vertex *vertex_list;\n    struct polygon *polygon_list;\n    struct data input;\n    struct intersection ilist[MAXINTS];\n\n    polygon_list = N_GNEW(n_polys, struct polygon);\n\n    for (i = nverts = 0; i < n_polys; i++)\n\tnverts += polys[i]->pn;\n\n    vertex_list = N_GNEW(nverts, struct vertex);\n\n    for (i = vno = 0; i < n_polys; i++) {\n\tpolygon_list[i].start = &vertex_list[vno];\n\tfor (j = 0; j < polys[i]->pn; j++) {\n\t    vertex_list[vno].pos.x = polys[i]->ps[j].x;\n\t    vertex_list[vno].pos.y = polys[i]->ps[j].y;\n\t    vertex_list[vno].poly = &polygon_list[i];\n\t    vertex_list[vno].active = 0;\n\t    vno++;\n\t}\n\tpolygon_list[i].finish = &vertex_list[vno - 1];\n    }\n\n    input.nvertices = nverts;\n    input.npolygons = n_polys;\n\n    find_ints(vertex_list, polygon_list, &input, ilist);\n\n\n#define EQ_PT(v,w) (((v).x == (w).x) && ((v).y == (w).y))\n    rv = 1;\n    {\n\tint i;\n\tstruct position vft, vsd, avft, avsd;\n\tfor (i = 0; i < input.ninters; i++) {\n\t    vft = ilist[i].firstv->pos;\n\t    avft = after(ilist[i].firstv)->pos;\n\t    vsd = ilist[i].secondv->pos;\n\t    avsd = after(ilist[i].secondv)->pos;\n\t    if (((vft.x != avft.x) && (vsd.x != avsd.x)) ||\n\t\t((vft.x == avft.x) &&\n\t\t !EQ_PT(vft, ilist[i]) &&\n\t\t !EQ_PT(avft, ilist[i])) ||\n\t\t((vsd.x == avsd.x) &&\n\t\t !EQ_PT(vsd, ilist[i]) && !EQ_PT(avsd, ilist[i]))) {\n\t\trv = 0;\n\t\tif (Verbose > 1) {\n\t\t    fprintf(stderr, \"\\nintersection %d at %.3f %.3f\\n\",\n\t\t\t    i, ilist[i].x, ilist[i].y);\n\t\t    fprintf(stderr, \"seg#1 : (%.3f, %.3f) (%.3f, %.3f)\\n\",\n\t\t\t    (double) (ilist[i].firstv->pos.x)\n\t\t\t    , (double) (ilist[i].firstv->pos.y)\n\t\t\t    , (double) (after(ilist[i].firstv)->pos.x)\n\t\t\t    , (double) (after(ilist[i].firstv)->pos.y));\n\t\t    fprintf(stderr, \"seg#2 : (%.3f, %.3f) (%.3f, %.3f)\\n\",\n\t\t\t    (double) (ilist[i].secondv->pos.x)\n\t\t\t    , (double) (ilist[i].secondv->pos.y)\n\t\t\t    , (double) (after(ilist[i].secondv)->pos.x)\n\t\t\t    , (double) (after(ilist[i].secondv)->pos.y));\n\t\t}\n\t    }\n\t}\n    }\n    free(polygon_list);\n    free(vertex_list);\n    return rv;\n}\n"
  },
  {
    "path": "experimental/neatogen/lu.c",
    "content": "/* $Id: lu.c,v 1.2 2005/02/23 18:58:12 ellson Exp $ $Revision: 1.2 $ */\n/* vim:set shiftwidth=4 ts=8: */\n\n/**********************************************************\n*      This software is part of the graphviz package      *\n*                http://www.graphviz.org/                 *\n*                                                         *\n*            Copyright (c) 1994-2004 AT&T Corp.           *\n*                and is licensed under the                *\n*            Common Public License, Version 1.0           *\n*                      by AT&T Corp.                      *\n*                                                         *\n*        Information and Software Systems Research        *\n*              AT&T Research, Florham Park NJ             *\n**********************************************************/\n\n/*\n * This code was (mostly) written by Ken Turkowski, who said:\n *\n * Oh, that. I wrote it in college the first time. It's open source - I think I\n * posted it after seeing so many people solve equations by inverting matrices\n * by computing minors naïvely.\n * -Ken\n *\n * The views represented here are mine and are not necessarily shared by\n * my employer.\n   \tKen Turkowski\t\t\tturk@apple.com\n\tImmersive Media Technologist \thttp://www.worldserver.com/turk/\n\tApple Computer, Inc.\n\t1 Infinite Loop, MS 302-3VR\n\tCupertino, CA 95014\n */\n\n\n\n/* This module solves linear equations in several variables (Ax = b) using\n * LU decomposition with partial pivoting and row equilibration.  Although\n * slightly more work than Gaussian elimination, it is faster for solving\n * several equations using the same coefficient matrix.  It is\n * particularly useful for matrix inversion, by sequentially solving the\n * equations with the columns of the unit matrix.\n *\n * lu_decompose() decomposes the coefficient matrix into the LU matrix,\n * and lu_solve() solves the series of matrix equations using the\n * previous LU decomposition.\n *\n *\tKen Turkowski (apple!turk)\n *\twritten 3/2/79, revised and enhanced 8/9/83.\n */\n\n#include <math.h>\n#include <neato.h>\n\nstatic double *scales;\nstatic double **lu;\nstatic int *ps;\n\n/* lu_decompose() decomposes the coefficient matrix A into upper and lower\n * triangular matrices, the composite being the LU matrix.\n *\n * The arguments are:\n *\n *\ta - the (n x n) coefficient matrix\n *\tn - the order of the matrix\n *\n *  1 is returned if the decomposition was successful,\n *  and 0 is returned if the coefficient matrix is singular.\n */\n\nint lu_decompose(double **a, int n)\n{\n    register int i, j, k;\n    int pivotindex = 0;\n    double pivot, biggest, mult, tempf;\n\n    if (lu)\n\tfree_array(lu);\n    lu = new_array(n, n, 0.0);\n    if (ps)\n\tfree(ps);\n    ps = N_NEW(n, int);\n    if (scales)\n\tfree(scales);\n    scales = N_NEW(n, double);\n\n    for (i = 0; i < n; i++) {\t/* For each row */\n\t/* Find the largest element in each row for row equilibration */\n\tbiggest = 0.0;\n\tfor (j = 0; j < n; j++)\n\t    if (biggest < (tempf = fabs(lu[i][j] = a[i][j])))\n\t\tbiggest = tempf;\n\tif (biggest != 0.0)\n\t    scales[i] = 1.0 / biggest;\n\telse {\n\t    scales[i] = 0.0;\n\t    return (0);\t\t/* Zero row: singular matrix */\n\t}\n\tps[i] = i;\t\t/* Initialize pivot sequence */\n    }\n\n    for (k = 0; k < n - 1; k++) {\t/* For each column */\n\t/* Find the largest element in each column to pivot around */\n\tbiggest = 0.0;\n\tfor (i = k; i < n; i++) {\n\t    if (biggest < (tempf = fabs(lu[ps[i]][k]) * scales[ps[i]])) {\n\t\tbiggest = tempf;\n\t\tpivotindex = i;\n\t    }\n\t}\n\tif (biggest == 0.0)\n\t    return (0);\t\t/* Zero column: singular matrix */\n\tif (pivotindex != k) {\t/* Update pivot sequence */\n\t    j = ps[k];\n\t    ps[k] = ps[pivotindex];\n\t    ps[pivotindex] = j;\n\t}\n\n\t/* Pivot, eliminating an extra variable  each time */\n\tpivot = lu[ps[k]][k];\n\tfor (i = k + 1; i < n; i++) {\n\t    lu[ps[i]][k] = mult = lu[ps[i]][k] / pivot;\n\t    if (mult != 0.0) {\n\t\tfor (j = k + 1; j < n; j++)\n\t\t    lu[ps[i]][j] -= mult * lu[ps[k]][j];\n\t    }\n\t}\n    }\n\n    if (lu[ps[n - 1]][n - 1] == 0.0)\n\treturn (0);\t\t/* Singular matrix */\n    return (1);\n}\n\n/* lu_solve() solves the linear equation (Ax = b) after the matrix A has\n * been decomposed with lu_decompose() into the lower and upper triangular\n * matrices L and U.\n *\n * The arguments are:\n *\n *\tx - the solution vector\n *\tb - the constant vector\n *\tn - the order of the equation\n*/\n\nvoid lu_solve(double *x, double *b, int n)\n{\n    register int i, j;\n    double dot;\n\n    /* Vector reduction using U triangular matrix */\n    for (i = 0; i < n; i++) {\n\tdot = 0.0;\n\tfor (j = 0; j < i; j++)\n\t    dot += lu[ps[i]][j] * x[j];\n\tx[i] = b[ps[i]] - dot;\n    }\n\n    /* Back substitution, in L triangular matrix */\n    for (i = n - 1; i >= 0; i--) {\n\tdot = 0.0;\n\tfor (j = i + 1; j < n; j++)\n\t    dot += lu[ps[i]][j] * x[j];\n\tx[i] = (x[i] - dot) / lu[ps[i]][i];\n    }\n}\n"
  },
  {
    "path": "experimental/neatogen/matinv.c",
    "content": "/* $Id: matinv.c,v 1.1.1.1 2004/12/23 04:05:13 ellson Exp $ $Revision: 1.1.1.1 $ */\n/* vim:set shiftwidth=4 ts=8: */\n\n/**********************************************************\n*      This software is part of the graphviz package      *\n*                http://www.graphviz.org/                 *\n*                                                         *\n*            Copyright (c) 1994-2004 AT&T Corp.           *\n*                and is licensed under the                *\n*            Common Public License, Version 1.0           *\n*                      by AT&T Corp.                      *\n*                                                         *\n*        Information and Software Systems Research        *\n*              AT&T Research, Florham Park NJ             *\n**********************************************************/\n\n/*\n * This code was (mostly) written by Ken Turkowski, who said:\n *\n * Oh, that. I wrote it in college the first time. It's open source - I think I\n * posted it after seeing so many people solve equations by inverting matrices\n * by computing minors naïvely.\n * -Ken\n *\n * The views represented here are mine and are not necessarily shared by\n * my employer.\n   \tKen Turkowski\t\t\tturk@apple.com\n\tImmersive Media Technologist \thttp://www.worldserver.com/turk/\n\tApple Computer, Inc.\n\t1 Infinite Loop, MS 302-3VR\n\tCupertino, CA 95014\n */\n\n/* Matinv() inverts the matrix A using LU decomposition.  Arguments:\n *\tA    - the (n x n) matrix to be inverted\n *\tAinv - the (n x n) inverted matrix\n *\tn    - the order of the matrices A and Ainv\n */\n\n#if _PACKAGE_ast\n#include <ast.h>\n#else\n#endif\n#include <stdlib.h>\n#include <render.h>\nextern int lu_decompose(double **a, int n);\nextern void lu_solve(double *x, double *b, int n);\n\nint matinv(double **A, double **Ainv, int n)\n{\n    register int i, j;\n    double *b, temp;\n\n    /* Decompose matrix into L and U triangular matrices */\n    if (lu_decompose(A, n) == 0)\n\treturn (0);\t\t/* Singular */\n\n    /* Invert matrix by solving n simultaneous equations n times */\n    b = N_NEW(n, double);\n    for (i = 0; i < n; i++) {\n\tfor (j = 0; j < n; j++)\n\t    b[j] = 0.0;\n\tb[i] = 1.0;\n\tlu_solve(Ainv[i], b, n);\t/* Into a row of Ainv: fix later */\n    }\n    free(b);\n\n    /* Transpose matrix */\n    for (i = 0; i < n; i++) {\n\tfor (j = 0; j < i; j++) {\n\t    temp = Ainv[i][j];\n\t    Ainv[i][j] = Ainv[j][i];\n\t    Ainv[j][i] = temp;\n\t}\n    }\n\n    return (1);\n}\n"
  },
  {
    "path": "experimental/neatogen/matrix_ops.c",
    "content": "/* $Id: matrix_ops.c,v 1.2 2005/07/13 20:29:40 erg Exp $ $Revision: 1.2 $ */\n/* vim:set shiftwidth=4 ts=8: */\n\n/**********************************************************\n*      This software is part of the graphviz package      *\n*                http://www.graphviz.org/                 *\n*                                                         *\n*            Copyright (c) 1994-2004 AT&T Corp.           *\n*                and is licensed under the                *\n*            Common Public License, Version 1.0           *\n*                      by AT&T Corp.                      *\n*                                                         *\n*        Information and Software Systems Research        *\n*              AT&T Research, Florham Park NJ             *\n**********************************************************/\n\n\n#include \"matrix_ops.h\"\n#include <stdlib.h>\n#include <stdio.h>\n#include <math.h>\n\nstatic double p_iteration_threshold = 1e-3;\n\nbool\npower_iteration(double **square_mat, int n, int neigs, double **eigs,\n\t\tdouble *evals, bool initialize)\n{\n    /* compute the 'neigs' top eigenvectors of 'square_mat' using power iteration */\n\n    int i, j;\n    double *tmp_vec = N_GNEW(n, double);\n    double *last_vec = N_GNEW(n, double);\n    double *curr_vector;\n    double len;\n    double angle;\n    double alpha;\n    int iteration = 0;\n    int largest_index;\n    double largest_eval;\n    int Max_iterations = 30 * n;\n\n    double tol = 1 - p_iteration_threshold;\n\n    if (neigs >= n) {\n\tneigs = n;\n    }\n\n    for (i = 0; i < neigs; i++) {\n\tcurr_vector = eigs[i];\n\t/* guess the i-th eigen vector */\n      choose:\n\tif (initialize)\n\t    for (j = 0; j < n; j++)\n\t\tcurr_vector[j] = rand() % 100;\n\t/* orthogonalize against higher eigenvectors */\n\tfor (j = 0; j < i; j++) {\n\t    alpha = -dot(eigs[j], 0, n - 1, curr_vector);\n\t    scadd(curr_vector, 0, n - 1, alpha, eigs[j]);\n\t}\n\tlen = norm(curr_vector, 0, n - 1);\n\tif (len < 1e-10) {\n\t    /* We have chosen a vector colinear with prvious ones */\n\t    goto choose;\n\t}\n\tvecscale(curr_vector, 0, n - 1, 1.0 / len, curr_vector);\n\titeration = 0;\n\tdo {\n\t    iteration++;\n\t    cpvec(last_vec, 0, n - 1, curr_vector);\n\n\t    right_mult_with_vector_d(square_mat, n, n, curr_vector,\n\t\t\t\t     tmp_vec);\n\t    cpvec(curr_vector, 0, n - 1, tmp_vec);\n\n\t    /* orthogonalize against higher eigenvectors */\n\t    for (j = 0; j < i; j++) {\n\t\talpha = -dot(eigs[j], 0, n - 1, curr_vector);\n\t\tscadd(curr_vector, 0, n - 1, alpha, eigs[j]);\n\t    }\n\t    len = norm(curr_vector, 0, n - 1);\n\t    if (len < 1e-10 || iteration > Max_iterations) {\n\t\t/* We have reached the null space (e.vec. associated with e.val. 0) */\n\t\tgoto exit;\n\t    }\n\n\t    vecscale(curr_vector, 0, n - 1, 1.0 / len, curr_vector);\n\t    angle = dot(curr_vector, 0, n - 1, last_vec);\n\t} while (fabs(angle) < tol);\n\tevals[i] = angle * len;\t/* this is the Rayleigh quotient (up to errors due to orthogonalization):\n\t\t\t\t   u*(A*u)/||A*u||)*||A*u||, where u=last_vec, and ||u||=1\n\t\t\t\t */\n    }\n  exit:\n    for (; i < neigs; i++) {\n\t/* compute the smallest eigenvector, which are  */\n\t/* probably associated with eigenvalue 0 and for */\n\t/* which power-iteration is dangerous */\n\tcurr_vector = eigs[i];\n\t/* guess the i-th eigen vector */\n\tfor (j = 0; j < n; j++)\n\t    curr_vector[j] = rand() % 100;\n\t/* orthogonalize against higher eigenvectors */\n\tfor (j = 0; j < i; j++) {\n\t    alpha = -dot(eigs[j], 0, n - 1, curr_vector);\n\t    scadd(curr_vector, 0, n - 1, alpha, eigs[j]);\n\t}\n\tlen = norm(curr_vector, 0, n - 1);\n\tvecscale(curr_vector, 0, n - 1, 1.0 / len, curr_vector);\n\tevals[i] = 0;\n\n    }\n\n\n    /* sort vectors by their evals, for overcoming possible mis-convergence: */\n    for (i = 0; i < neigs - 1; i++) {\n\tlargest_index = i;\n\tlargest_eval = evals[largest_index];\n\tfor (j = i + 1; j < neigs; j++) {\n\t    if (largest_eval < evals[j]) {\n\t\tlargest_index = j;\n\t\tlargest_eval = evals[largest_index];\n\t    }\n\t}\n\tif (largest_index != i) {\t/* exchange eigenvectors: */\n\t    cpvec(tmp_vec, 0, n - 1, eigs[i]);\n\t    cpvec(eigs[i], 0, n - 1, eigs[largest_index]);\n\t    cpvec(eigs[largest_index], 0, n - 1, tmp_vec);\n\n\t    evals[largest_index] = evals[i];\n\t    evals[i] = largest_eval;\n\t}\n    }\n\n    free(tmp_vec);\n    free(last_vec);\n\n    return (iteration <= Max_iterations);\n}\n\n\n\nvoid\nmult_dense_mat(double **A, float **B, int dim1, int dim2, int dim3,\n\t       float ***CC)\n{\n/*\n  A is dim1 x dim2, B is dim2 x dim3, C = A x B \n*/\n\n    double sum;\n    int i, j, k;\n    float *storage;\n    float **C = *CC;\n    if (C != NULL) {\n\tstorage = (float *) realloc(C[0], dim1 * dim3 * sizeof(A[0]));\n\t*CC = C = (float **) realloc(C, dim1 * sizeof(A));\n    } else {\n\tstorage = (float *) malloc(dim1 * dim3 * sizeof(A[0]));\n\t*CC = C = (float **) malloc(dim1 * sizeof(A));\n    }\n\n    for (i = 0; i < dim1; i++) {\n\tC[i] = storage;\n\tstorage += dim3;\n    }\n\n    for (i = 0; i < dim1; i++) {\n\tfor (j = 0; j < dim3; j++) {\n\t    sum = 0;\n\t    for (k = 0; k < dim2; k++) {\n\t\tsum += A[i][k] * B[k][j];\n\t    }\n\t    C[i][j] = (float) (sum);\n\t}\n    }\n}\n\nvoid\nmult_dense_mat_d(double **A, float **B, int dim1, int dim2, int dim3,\n\t\t double ***CC)\n{\n/*\n  A is dim1 x dim2, B is dim2 x dim3, C = A x B \n*/\n    double **C = *CC;\n    double *storage;\n    int i, j, k;\n    double sum;\n\n    if (C != NULL) {\n\tstorage = (double *) realloc(C[0], dim1 * dim3 * sizeof(double));\n\t*CC = C = (double **) realloc(C, dim1 * sizeof(double *));\n    } else {\n\tstorage = (double *) malloc(dim1 * dim3 * sizeof(double));\n\t*CC = C = (double **) malloc(dim1 * sizeof(double *));\n    }\n\n    for (i = 0; i < dim1; i++) {\n\tC[i] = storage;\n\tstorage += dim3;\n    }\n\n    for (i = 0; i < dim1; i++) {\n\tfor (j = 0; j < dim3; j++) {\n\t    sum = 0;\n\t    for (k = 0; k < dim2; k++) {\n\t\tsum += A[i][k] * B[k][j];\n\t    }\n\t    C[i][j] = sum;\n\t}\n    }\n}\n\nvoid\nmult_sparse_dense_mat_transpose(vtx_data * A, double **B, int dim1,\n\t\t\t\tint dim2, float ***CC)\n{\n/*\n  A is dim1 x dim1 and sparse, B is dim2 x dim1, C = A x B \n*/\n\n    float *storage;\n    int i, j, k;\n    double sum;\n    float *ewgts;\n    int *edges;\n    int nedges;\n    float **C = *CC;\n    if (C != NULL) {\n\tstorage = (float *) realloc(C[0], dim1 * dim2 * sizeof(A[0]));\n\t*CC = C = (float **) realloc(C, dim1 * sizeof(A));\n    } else {\n\tstorage = (float *) malloc(dim1 * dim2 * sizeof(A[0]));\n\t*CC = C = (float **) malloc(dim1 * sizeof(A));\n    }\n\n    for (i = 0; i < dim1; i++) {\n\tC[i] = storage;\n\tstorage += dim2;\n    }\n\n    for (i = 0; i < dim1; i++) {\n\tedges = A[i].edges;\n\tewgts = A[i].ewgts;\n\tnedges = A[i].nedges;\n\tfor (j = 0; j < dim2; j++) {\n\t    sum = 0;\n\t    for (k = 0; k < nedges; k++) {\n\t\tsum += ewgts[k] * B[j][edges[k]];\n\t    }\n\t    C[i][j] = (float) (sum);\n\t}\n    }\n}\n\n\n\n/* Copy a range of a double vector to a double vector */\nvoid cpvec(double *copy, int beg, int end, double *vec)\n{\n    int i;\n\n    copy = copy + beg;\n    vec = vec + beg;\n    for (i = end - beg + 1; i; i--) {\n\t*copy++ = *vec++;\n    }\n}\n\n/* Returns scalar product of two double n-vectors. */\ndouble dot(double *vec1, int beg, int end, double *vec2)\n{\n    int i;\n    double sum;\n\n    sum = 0.0;\n    vec1 = vec1 + beg;\n    vec2 = vec2 + beg;\n    for (i = end - beg + 1; i; i--) {\n\tsum += (*vec1++) * (*vec2++);\n    }\n    return (sum);\n}\n\n\n/* Scaled add - fills double vec1 with vec1 + alpha*vec2 over range*/\nvoid scadd(double *vec1, int beg, int end, double fac, double *vec2)\n{\n    int i;\n\n    vec1 = vec1 + beg;\n    vec2 = vec2 + beg;\n    for (i = end - beg + 1; i; i--) {\n\t(*vec1++) += fac * (*vec2++);\n    }\n}\n\n/* Scale - fills vec1 with alpha*vec2 over range, double version */\nvoid vecscale(double *vec1, int beg, int end, double alpha, double *vec2)\n{\n    int i;\n\n    vec1 += beg;\n    vec2 += beg;\n    for (i = end - beg + 1; i; i--) {\n\t(*vec1++) = alpha * (*vec2++);\n    }\n}\n\n/* Returns 2-norm of a double n-vector over range. */\ndouble norm(double *vec, int beg, int end)\n{\n    return (sqrt(dot(vec, beg, end, vec)));\n}\n\n\n#ifndef __cplusplus\n\n/* inline */\nvoid orthog1(int n, double *vec\t/* vector to be orthogonalized against 1 */\n    )\n{\n    int i;\n    double *pntr;\n    double sum;\n\n    sum = 0.0;\n    pntr = vec;\n    for (i = n; i; i--) {\n\tsum += *pntr++;\n    }\n    sum /= n;\n    pntr = vec;\n    for (i = n; i; i--) {\n\t*pntr++ -= sum;\n    }\n}\n\n#define RANGE 500\n\n/* inline */\nvoid init_vec_orth1(int n, double *vec)\n{\n    /* randomly generate a vector orthogonal to 1 (i.e., with mean 0) */\n    int i;\n\n    for (i = 0; i < n; i++)\n\tvec[i] = rand() % RANGE;\n\n    orthog1(n, vec);\n}\n\n/* inline */\nvoid\nright_mult_with_vector(vtx_data * matrix, int n, double *vector,\n\t\t       double *result)\n{\n    int i, j;\n\n    double res;\n    for (i = 0; i < n; i++) {\n\tres = 0;\n\tfor (j = 0; j < matrix[i].nedges; j++)\n\t    res += matrix[i].ewgts[j] * vector[matrix[i].edges[j]];\n\tresult[i] = res;\n    }\n    /* orthog1(n,vector); */\n}\n\n/* inline */\nvoid\nright_mult_with_vector_f(float **matrix, int n, double *vector,\n\t\t\t double *result)\n{\n    int i, j;\n\n    double res;\n    for (i = 0; i < n; i++) {\n\tres = 0;\n\tfor (j = 0; j < n; j++)\n\t    res += matrix[i][j] * vector[j];\n\tresult[i] = res;\n    }\n    /* orthog1(n,vector); */\n}\n\n/* inline */\nvoid\nvectors_subtraction(int n, double *vector1, double *vector2,\n\t\t    double *result)\n{\n    int i;\n    for (i = 0; i < n; i++) {\n\tresult[i] = vector1[i] - vector2[i];\n    }\n}\n\n/* inline */\nvoid\nvectors_addition(int n, double *vector1, double *vector2, double *result)\n{\n    int i;\n    for (i = 0; i < n; i++) {\n\tresult[i] = vector1[i] + vector2[i];\n    }\n}\n\n#ifdef UNUSED\n/* inline */\nvoid\nvectors_mult_addition(int n, double *vector1, double alpha,\n\t\t      double *vector2)\n{\n    int i;\n    for (i = 0; i < n; i++) {\n\tvector1[i] = vector1[i] + alpha * vector2[i];\n    }\n}\n#endif\n\n/* inline */\nvoid\nvectors_scalar_mult(int n, double *vector, double alpha, double *result)\n{\n    int i;\n    for (i = 0; i < n; i++) {\n\tresult[i] = vector[i] * alpha;\n    }\n}\n\n/* inline */\nvoid copy_vector(int n, double *source, double *dest)\n{\n    int i;\n    for (i = 0; i < n; i++)\n\tdest[i] = source[i];\n}\n\n/* inline */\ndouble vectors_inner_product(int n, double *vector1, double *vector2)\n{\n    int i;\n    double result = 0;\n    for (i = 0; i < n; i++) {\n\tresult += vector1[i] * vector2[i];\n    }\n\n    return result;\n}\n\n/* inline */\ndouble max_abs(int n, double *vector)\n{\n    double max_val = -1e50;\n    int i;\n    for (i = 0; i < n; i++)\n\tif (fabs(vector[i]) > max_val)\n\t    max_val = fabs(vector[i]);\n\n    return max_val;\n}\n\n#ifdef UNUSED\n/* inline */\nvoid orthogvec(int n, double *vec1,\t/* vector to be orthogonalized */\n\t       double *vec2\t/* normalized vector to be orthogonalized against */\n    )\n{\n    double alpha;\n    if (vec2 == NULL) {\n\treturn;\n    }\n\n    alpha = -vectors_inner_product(n, vec1, vec2);\n\n    vectors_mult_addition(n, vec1, alpha, vec2);\n}\n\n /* sparse matrix extensions: */\n\n/* inline */\nvoid mat_mult_vec(vtx_data * L, int n, double *vec, double *result)\n{\n    /* compute result= -L*vec */\n    int i, j;\n    double sum;\n    int *edges;\n    float *ewgts;\n\n    for (i = 0; i < n; i++) {\n\tsum = 0;\n\tedges = L[i].edges;\n\tewgts = L[i].ewgts;\n\tfor (j = 0; j < L[i].nedges; j++) {\n\t    sum -= ewgts[j] * vec[edges[j]];\n\t}\n\tresult[i] = sum;\n    }\n}\n#endif\n\n/* inline */\nvoid\nright_mult_with_vector_transpose(double **matrix,\n\t\t\t\t int dim1, int dim2,\n\t\t\t\t double *vector, double *result)\n{\n    /* matrix is dim2 x dim1, vector has dim2 components, result=matrix^T x vector */\n    int i, j;\n\n    double res;\n    for (i = 0; i < dim1; i++) {\n\tres = 0;\n\tfor (j = 0; j < dim2; j++)\n\t    res += matrix[j][i] * vector[j];\n\tresult[i] = res;\n    }\n}\n\n/* inline */\nvoid\nright_mult_with_vector_d(double **matrix,\n\t\t\t int dim1, int dim2,\n\t\t\t double *vector, double *result)\n{\n    /* matrix is dim1 x dim2, vector has dim2 components, result=matrix x vector */\n    int i, j;\n\n    double res;\n    for (i = 0; i < dim1; i++) {\n\tres = 0;\n\tfor (j = 0; j < dim2; j++)\n\t    res += matrix[i][j] * vector[j];\n\tresult[i] = res;\n    }\n}\n\n\n/*****************************\n** Single precision (float) **\n** version                  **\n*****************************/\n\n/* inline */\nvoid orthog1f(int n, float *vec)\n{\n    int i;\n    float *pntr;\n    float sum;\n\n    sum = 0.0;\n    pntr = vec;\n    for (i = n; i; i--) {\n\tsum += *pntr++;\n    }\n    sum /= n;\n    pntr = vec;\n    for (i = n; i; i--) {\n\t*pntr++ -= sum;\n    }\n}\n\n#ifdef UNUSED\n/* inline */\nvoid right_mult_with_vectorf\n    (vtx_data * matrix, int n, float *vector, float *result) {\n    int i, j;\n\n    float res;\n    for (i = 0; i < n; i++) {\n\tres = 0;\n\tfor (j = 0; j < matrix[i].nedges; j++)\n\t    res += matrix[i].ewgts[j] * vector[matrix[i].edges[j]];\n\tresult[i] = res;\n    }\n}\n\n/* inline */\nvoid right_mult_with_vector_fd\n    (float **matrix, int n, float *vector, double *result) {\n    int i, j;\n\n    float res;\n    for (i = 0; i < n; i++) {\n\tres = 0;\n\tfor (j = 0; j < n; j++)\n\t    res += matrix[i][j] * vector[j];\n\tresult[i] = res;\n    }\n}\n#endif\n\n/* inline */\nvoid right_mult_with_vector_ff\n    (float *packed_matrix, int n, float *vector, float *result) {\n    /* packed matrix is the upper-triangular part of a symmetric matrix arranged in a vector row-wise */\n    int i, j, index;\n    float vector_i;\n\n    float res;\n    for (i = 0; i < n; i++) {\n\tresult[i] = 0;\n    }\n    for (index = 0, i = 0; i < n; i++) {\n\tres = 0;\n\tvector_i = vector[i];\n\t/* deal with main diag */\n\tres += packed_matrix[index++] * vector_i;\n\t/* deal with off diag */\n\tfor (j = i + 1; j < n; j++, index++) {\n\t    res += packed_matrix[index] * vector[j];\n\t    result[j] += packed_matrix[index] * vector_i;\n\t}\n\tresult[i] += res;\n    }\n}\n\n/* inline */\nvoid\nvectors_substractionf(int n, float *vector1, float *vector2, float *result)\n{\n    int i;\n    for (i = 0; i < n; i++) {\n\tresult[i] = vector1[i] - vector2[i];\n    }\n}\n\n/* inline */\nvoid\nvectors_additionf(int n, float *vector1, float *vector2, float *result)\n{\n    int i;\n    for (i = 0; i < n; i++) {\n\tresult[i] = vector1[i] + vector2[i];\n    }\n}\n\n/* inline */\nvoid\nvectors_mult_additionf(int n, float *vector1, float alpha, float *vector2)\n{\n    int i;\n    for (i = 0; i < n; i++) {\n\tvector1[i] = vector1[i] + alpha * vector2[i];\n    }\n}\n\n/* inline */\nvoid vectors_scalar_multf(int n, float *vector, float alpha, float *result)\n{\n    int i;\n    for (i = 0; i < n; i++) {\n\tresult[i] = (float) vector[i] * alpha;\n    }\n}\n\n/* inline */\nvoid copy_vectorf(int n, float *source, float *dest)\n{\n    int i;\n    for (i = 0; i < n; i++)\n\tdest[i] = source[i];\n}\n\n/* inline */\ndouble vectors_inner_productf(int n, float *vector1, float *vector2)\n{\n    int i;\n    double result = 0;\n    for (i = 0; i < n; i++) {\n\tresult += vector1[i] * vector2[i];\n    }\n\n    return result;\n}\n\n/* inline */\nvoid set_vector_val(int n, double val, double *result)\n{\n    int i;\n    for (i = 0; i < n; i++)\n\tresult[i] = val;\n}\n\n/* inline */\nvoid set_vector_valf(int n, float val, float * result) {\n    int i;\n    for (i=0; i<n; i++)\n        result[i]=val;\n}\n\n/* inline */\ndouble max_absf(int n, float *vector)\n{\n    int i;\n    float max_val = -1e30f;\n    for (i = 0; i < n; i++)\n\tif (fabs(vector[i]) > max_val)\n\t    max_val = (float) (fabs(vector[i]));\n\n    return max_val;\n}\n\n/* inline */\nvoid square_vec(int n, float *vec)\n{\n    int i;\n    for (i = 0; i < n; i++) {\n\tvec[i] *= vec[i];\n    }\n}\n\n/* inline */\nvoid invert_vec(int n, float *vec)\n{\n    int i;\n    float v;\n    for (i = 0; i < n; i++) {\n\tif ((v = vec[i]) != 0.0)\n\t    vec[i] = 1.0f / v;\n    }\n}\n\n/* inline */\nvoid sqrt_vec(int n, float *vec)\n{\n    int i;\n    for (i = 0; i < n; i++) {\n\tvec[i] = (float) sqrt(vec[i]);\n    }\n}\n\n/* inline */\nvoid sqrt_vecf(int n, float *source, float *target)\n{\n    int i;\n    float v;\n    for (i = 0; i < n; i++) {\n\tif ((v = source[i]) >= 0.0)\n\t    target[i] = (float) sqrt(v);\n    }\n}\n\n/* inline */\nvoid invert_sqrt_vec(int n, float *vec)\n{\n    int i;\n    float v;\n    for (i = 0; i < n; i++) {\n\tif ((v = vec[i]) > 0.0)\n\t    vec[i] = 1.0f / (float) sqrt(v);\n    }\n}\n\n#ifdef UNUSED\n/* inline */\nvoid init_vec_orth1f(int n, float *vec)\n{\n    /* randomly generate a vector orthogonal to 1 (i.e., with mean 0) */\n    int i;\n\n    for (i = 0; i < n; i++)\n\tvec[i] = (float) (rand() % RANGE);\n\n    orthog1f(n, vec);\n}\n\n\n /* sparse matrix extensions: */\n\n/* inline */\nvoid mat_mult_vecf(vtx_data * L, int n, float *vec, float *result)\n{\n    /* compute result= -L*vec */\n    int i, j;\n    float sum;\n    int *edges;\n    float *ewgts;\n\n    for (i = 0; i < n; i++) {\n\tsum = 0;\n\tedges = L[i].edges;\n\tewgts = L[i].ewgts;\n\tfor (j = 0; j < L[i].nedges; j++) {\n\t    sum -= ewgts[j] * vec[edges[j]];\n\t}\n\tresult[i] = sum;\n    }\n}\n#endif\n\n#endif\n"
  },
  {
    "path": "experimental/neatogen/matrix_ops.h",
    "content": "/* $Id: matrix_ops.h,v 1.2 2005/07/13 20:29:40 erg Exp $ $Revision: 1.2 $ */\n/* vim:set shiftwidth=4 ts=8: */\n\n/**********************************************************\n*      This software is part of the graphviz package      *\n*                http://www.graphviz.org/                 *\n*                                                         *\n*            Copyright (c) 1994-2004 AT&T Corp.           *\n*                and is licensed under the                *\n*            Common Public License, Version 1.0           *\n*                      by AT&T Corp.                      *\n*                                                         *\n*        Information and Software Systems Research        *\n*              AT&T Research, Florham Park NJ             *\n**********************************************************/\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n\n\n#ifndef _MATRIX_OPS_H_\n#define _MATRIX_OPS_H_\n\n#include \"defs.h\"\n\n    extern void cpvec(double *, int, int, double *);\n    extern double dot(double *, int, int, double *);\n    extern void scadd(double *, int, int, double, double *);\n    extern void vecscale(double *, int, int, double, double *);\n    extern double norm(double *, int, int);\n\n    extern void orthog1(int n, double *vec);\n    extern void init_vec_orth1(int n, double *vec);\n    extern void right_mult_with_vector(vtx_data *, int, double *,\n\t\t\t\t       double *);\n    extern void right_mult_with_vector_f(float **, int, double *,\n\t\t\t\t\t double *);\n    extern void vectors_subtraction(int, double *, double *, double *);\n    extern void vectors_addition(int, double *, double *, double *);\n    extern void vectors_scalar_mult(int, double *, double, double *);\n    extern void copy_vector(int n, double *source, double *dest);\n    extern double vectors_inner_product(int n, double *vector1,\n\t\t\t\t\tdouble *vector2);\n    extern double max_abs(int n, double *vector);\n#ifdef UNUSED\n    extern void vectors_mult_addition(int, double *, double, double *);\n    extern void orthogvec(int, double *, double *);\n#endif\n\n    /* sparse matrix extensions: */\n\n#ifdef UNUSED\n    extern void mat_mult_vec(vtx_data * L, int n, double *vec,\n\t\t\t     double *result);\n#endif\n    extern void right_mult_with_vector_transpose\n\t(double **, int, int, double *, double *);\n    extern void right_mult_with_vector_d(double **, int, int, double *,\n\t\t\t\t\t double *);\n    extern void mult_dense_mat(double **, float **, int, int, int,\n\t\t\t       float ***C);\n    extern void mult_dense_mat_d(double **, float **, int, int, int,\n\t\t\t\t double ***CC);\n    extern void mult_sparse_dense_mat_transpose(vtx_data *, double **, int,\n\t\t\t\t\t\tint, float ***);\n    extern bool power_iteration(double **, int, int, double **, double *,\n\t\t\t\tbool);\n\n\n/*****************************\n** Single precision (float) **\n** version                  **\n*****************************/\n\n    extern void orthog1f(int n, float *vec);\n#ifdef UNUSED\n    extern void right_mult_with_vectorf(vtx_data *, int, float *, float *);\n    extern void right_mult_with_vector_fd(float **, int, float *,\n\t\t\t\t\t  double *);\n#endif\n    extern void right_mult_with_vector_ff(float *, int, float *, float *);\n    extern void vectors_substractionf(int, float *, float *, float *);\n    extern void vectors_additionf(int n, float *vector1, float *vector2,\n\t\t\t\t  float *result);\n    extern void vectors_mult_additionf(int n, float *vector1, float alpha,\n\t\t\t\t       float *vector2);\n    extern void vectors_scalar_multf(int n, float *vector, float alpha,\n\t\t\t\t     float *result);\n    extern void copy_vectorf(int n, float *source, float *dest);\n    extern double vectors_inner_productf(int n, float *vector1,\n\t\t\t\t\t float *vector2);\n    extern void set_vector_val(int n, double val, double *result);\n    extern void set_vector_valf(int n, float val, float * result);\n    extern double max_absf(int n, float *vector);\n    extern void square_vec(int n, float *vec);\n    extern void invert_vec(int n, float *vec);\n    extern void sqrt_vec(int n, float *vec);\n    extern void sqrt_vecf(int n, float *source, float *target);\n    extern void invert_sqrt_vec(int n, float *vec);\n#ifdef UNUSED\n    extern void init_vec_orth1f(int n, float *vec);\n    extern void mat_mult_vecf(vtx_data * L, int n, float *vec,\n\t\t\t      float *result);\n#endif\n\n#endif\n\n#ifdef __cplusplus\n}\n#endif\n"
  },
  {
    "path": "experimental/neatogen/mem.h",
    "content": "/* $Id: mem.h,v 1.1.1.1 2004/12/23 04:05:14 ellson Exp $ $Revision: 1.1.1.1 $ */\n/* vim:set shiftwidth=4 ts=8: */\n\n/**********************************************************\n*      This software is part of the graphviz package      *\n*                http://www.graphviz.org/                 *\n*                                                         *\n*            Copyright (c) 1994-2004 AT&T Corp.           *\n*                and is licensed under the                *\n*            Common Public License, Version 1.0           *\n*                      by AT&T Corp.                      *\n*                                                         *\n*        Information and Software Systems Research        *\n*              AT&T Research, Florham Park NJ             *\n**********************************************************/\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n\n\n#ifndef MEMORY_H\n#define MEMORY_H\n\n#ifndef NULL\n#define NULL 0\n#endif\n\n    /* Support for freelists */\n\n    typedef struct freelist {\n\tstruct freenode *head;\t/* List of free nodes */\n\tstruct freeblock *blocklist;\t/* List of malloced blocks */\n\tint nodesize;\t\t/* Size of node */\n    } Freelist;\n\n    extern void *getfree(Freelist *);\n    extern void freeinit(Freelist *, int);\n    extern void makefree(void *, Freelist *);\n\n#endif\n\n\n#ifdef __cplusplus\n}\n#endif\n"
  },
  {
    "path": "experimental/neatogen/memory.c",
    "content": "/* $Id: memory.c,v 1.1.1.1 2004/12/23 04:05:14 ellson Exp $ $Revision: 1.1.1.1 $ */\n/* vim:set shiftwidth=4 ts=8: */\n\n/**********************************************************\n*      This software is part of the graphviz package      *\n*                http://www.graphviz.org/                 *\n*                                                         *\n*            Copyright (c) 1994-2004 AT&T Corp.           *\n*                and is licensed under the                *\n*            Common Public License, Version 1.0           *\n*                      by AT&T Corp.                      *\n*                                                         *\n*        Information and Software Systems Research        *\n*              AT&T Research, Florham Park NJ             *\n**********************************************************/\n\n#include \"geometry.h\"\n#include \"render.h\"\n\ntypedef struct freenode {\n    struct freenode *nextfree;\n} Freenode;\n\ntypedef struct freeblock {\n    struct freeblock *next;\n    struct freenode *nodes;\n} Freeblock;\n\n#include \"mem.h\"\n#include <stdlib.h>\n#include <stdio.h>\n\nstatic int gcd(int y, int x)\n{\n    while (x != y) {\n\tif (y < x)\n\t    x = x - y;\n\telse\n\t    y = y - x;\n    }\n    return x;\n}\n\n#define LCM(x,y) ((x)%(y) == 0 ? (x) : (y)%(x) == 0 ? (y) : x*(y/gcd(x,y)))\n\nvoid freeinit(Freelist * fl, int size)\n{\n\n    fl->head = NULL;\n    fl->nodesize = LCM(size, sizeof(Freenode));\n    if (fl->blocklist != NULL) {\n\tFreeblock *bp, *np;\n\n\tbp = fl->blocklist;\n\twhile (bp != NULL) {\n\t    np = bp->next;\n\t    free(bp->nodes);\n\t    free(bp);\n\t    bp = np;\n\t}\n    }\n    fl->blocklist = NULL;\n}\n\nvoid *getfree(Freelist * fl)\n{\n    int i;\n    Freenode *t;\n    Freeblock *mem;\n\n    if (fl->head == NULL) {\n\tint size = fl->nodesize;\n\tchar *cp;\n\n\tmem = GNEW(Freeblock);\n\tmem->nodes = gmalloc(sqrt_nsites * size);\n\tcp = (char *) (mem->nodes);\n\tfor (i = 0; i < sqrt_nsites; i++) {\n\t    makefree(cp + i * size, fl);\n\t}\n\tmem->next = fl->blocklist;\n\tfl->blocklist = mem;\n    }\n    t = fl->head;\n    fl->head = t->nextfree;\n    return ((void *) t);\n}\n\nvoid makefree(void *curr, Freelist * fl)\n{\n    ((Freenode *) curr)->nextfree = fl->head;\n    fl->head = (Freenode *) curr;\n}\n"
  },
  {
    "path": "experimental/neatogen/mosek_quad_solve.c",
    "content": "/* \n*/\n#ifdef MOSEK\n#include <stdio.h>\n#include <assert.h>\n#include \"defs.h\"\n#include \"mosek_quad_solve.h\"\n#include \"quad_prog_vpsc.h\"\n\n//#define DUMP_CONSTRAINTS\n//#define EQUAL_WIDTH_LEVELS\n\nstatic FILE *logfile;\nstatic void MSKAPI printstr(void *handle, char str[])\n{\n\tfprintf(logfile,\"%s\",str);\n} /* printstr */\n\n/**********************\nlap: the upper RHS of the symmetric graph laplacian matrix which will be transformed\n\tto the hessian of the non-linear part of the optimisation function\nn: number of nodes (length of coords array)\nordering: array containing sequences of nodes for each level,\n\tie, ordering[levels[i]] is first node of (i+1)th level\nlevel_indexes: array of starting node for each level in ordering\n\tie, levels[i] is index to first node of (i+1)th level\n\talso, levels[0] is number of nodes in first level\n\tand, levels[i]-levels[i-1] is number of nodes in ith level\n\tand, n - levels[num_divisions-1] is number of nodes in last level\nnum_divisions: number of divisions between levels, ie number of levels - 1\nseparation: the minimum separation between nodes on different levels\n***********************/\nMosekEnv* mosek_init_hier(\n\tfloat* lap, int n,int *ordering,int *level_indexes,int num_divisions, float separation)\n{\n\tint i,j,num_levels=num_divisions+1;\n\tMosekEnv *mskEnv = GNEW(MosekEnv);\n\t// vars for nodes (except x0) + dummy nodes between levels\n\t// x0 is fixed at 0, and therefore is not included in the opt problem\n\t// add 2 more vars for top and bottom constraints\n\tmskEnv->num_variables=n+num_divisions+1;\n\n\tlogfile = fopen(\"quad_solve_log\",\"w\");\n\tDigColaLevel *levels=assign_digcola_levels(ordering,n,level_indexes,num_divisions);\n#ifdef DUMP_CONSTRAINTS\n\tprint_digcola_levels(logfile,levels,num_levels);\n#endif\n\n\t/* nonlinear coefficients matrix of objective function */\n\t//int lapsize=mskEnv->num_variables+(mskEnv->num_variables*(mskEnv->num_variables-1))/2;\n\tint nonzero_lapsize=(n*(n-1))/2;\n\tmskEnv->qval = N_GNEW(nonzero_lapsize,double);\n\tmskEnv->qsubi = N_GNEW(nonzero_lapsize,int);\n\tmskEnv->qsubj = N_GNEW(nonzero_lapsize,int);\n\n\t/* solution vector */\n\tmskEnv->xx = N_GNEW(mskEnv->num_variables,double);\n\n\t/* constraint matrix */\n\tseparation/=2.0; // separation between each node and it's adjacent constraint\n\tint num_constraints = get_num_digcola_constraints(levels, num_levels)+num_divisions+1;\n\t// constraints of the form x_i - x_j >= sep so 2 non-zero entries per constraint in LHS matrix\n\t// except x_0 (fixed at 0) constraints which have 1 nz val each.\n#ifdef EQUAL_WIDTH_LEVELS\n\tnum_constraints+=num_divisions;\n#endif\n\t// pointer to beginning of nonzero sequence in a column\n\n\tint count=0;\n\tfor(i=0;i<n-1;i++) {\n\t\tfor(j=i;j<n-1;j++) {\n\t\t\tmskEnv->qval[count]=-2*lap[count+n];\n\t\t\tassert(mskEnv->qval[count]!=0);\n\t\t\tmskEnv->qsubi[count]=j;\n\t\t\tmskEnv->qsubj[count]=i;\n\t\t\tcount++;\n\t\t}\n\t}\n#ifdef DUMP_CONSTRAINTS\n\tfprintf(logfile,\"Q=[\");\n\tint lapcntr=n;\n\tfor(i=0;i<mskEnv->num_variables;i++) {\n\t\tif(i!=0) fprintf(logfile,\";\");\n\t\tfor(j=0;j<mskEnv->num_variables;j++) {\n\t\t\tif(j<i||i>=n-1||j>=n-1) {\n\t\t\t\tfprintf(logfile,\"0 \");\n\t\t\t} else {\n\t\t\t\tfprintf(logfile,\"%f \",-2*lap[lapcntr++]);\n\t\t\t}\n\t\t}\n\t}\n\tfprintf(logfile,\"]\\nQ=Q-diag(diag(Q))+Q'\\n\");\n#endif\n\tfprintf(logfile,\"\\n\");\n\t/* Make the mosek environment. */\n\tmskEnv->r = MSK_makeenv(&mskEnv->env,NULL,NULL,NULL,NULL);\n\n\t/* Check whether the return code is ok. */\n\tif ( mskEnv->r==MSK_RES_OK )\n\t{\n\t\t/* Directs the log stream to the user\n\t\tspecified procedure 'printstr'. */\n\t\tMSK_linkfunctoenvstream(mskEnv->env,MSK_STREAM_LOG,NULL,printstr);\n\t}\n\n\t/* Initialize the environment. */   \n\tmskEnv->r = MSK_initenv(mskEnv->env);\n\tif (mskEnv->r==MSK_RES_OK)\n\t{ \n\t\t/* Make the optimization task. */\n\t\tmskEnv->r = MSK_maketask(mskEnv->env,num_constraints,mskEnv->num_variables,&mskEnv->task);\n\n\t\tif ( mskEnv->r==MSK_RES_OK )\n\t\t{\n\t\t\tmskEnv->r = MSK_linkfunctotaskstream(mskEnv->task,MSK_STREAM_LOG,NULL,printstr);\n\t\t\t/* Resize the task. */\n\t\t\tif ( mskEnv->r==MSK_RES_OK )\n\t\t\t\tmskEnv->r = MSK_resizetask(mskEnv->task,num_constraints,mskEnv->num_variables,\n\t\t\t\t0, // no cones!!\n\t\t\t\t// each constraint applies to 2 vars\n\t\t\t\t2*num_constraints+num_divisions, \n\t\t\t\tnonzero_lapsize);\n\n\t\t\t/* Append the constraints. */\n\t\t\tif ( mskEnv->r==MSK_RES_OK )\n\t\t\t\tmskEnv->r = MSK_append(mskEnv->task,1,num_constraints);\n\n\t\t\t/* Append the variables. */\n\t\t\tif ( mskEnv->r==MSK_RES_OK )\n\t\t\t\tmskEnv->r = MSK_append(mskEnv->task,0,mskEnv->num_variables);\n\t\t\t/* Put variable bounds. */\n\t\t\tfor(j=0; j<mskEnv->num_variables && mskEnv->r==MSK_RES_OK; ++j)\n\t\t\t\tmskEnv->r = MSK_putbound(mskEnv->task,0,j,MSK_BK_RA,-MSK_INFINITY,MSK_INFINITY);\n\t\t\tint c_ind=0;\n\t\t\tint c_var=n-1;\n\t\t\tfor(j=0;j<levels[0].num_nodes && mskEnv->r==MSK_RES_OK;j++) {\n\t\t\t\tint node = levels[0].nodes[j]-1;\n\t\t\t\tif(node>=0){\n\t\t\t\t\tMSKidxt subi[]={c_var,node};\n\t\t\t\t\tdouble vali[]={1.0,-1.0};\n\t\t\t\t\tmskEnv->r=MSK_putavec(mskEnv->task,1,c_ind,2,subi,vali);\n\t\t\t\t} else { \n\t\t\t\t\t// constraint for y0 (fixed at 0)\n\t\t\t\t\tmskEnv->r=MSK_putaij(mskEnv->task,c_ind,c_var,1.0);\n\t\t\t\t}\n\t\t\t\tmskEnv->r=MSK_putbound(mskEnv->task,1,c_ind,MSK_BK_LO,separation,MSK_INFINITY);\n\t\t\t\tc_ind++;\n\t\t\t}\t\n\t\t\tfor(i=0;i<num_divisions && mskEnv->r==MSK_RES_OK;i++) {\n\t\t\t\tc_var=n+i;\n\t\t\t\tfor(j=0;j<levels[i].num_nodes && mskEnv->r==MSK_RES_OK;j++) {\n\t\t\t\t\t// create separation constraint a>=b+separation\n\t\t\t\t\tint node = levels[i].nodes[j]-1;\n\t\t\t\t\tif(node>=0){ // no constraint for fixed node\n\t\t\t\t\t\tMSKidxt subi[]={node,c_var};\n\t\t\t\t\t\tdouble vali[]={1.0,-1.0};\n\t\t\t\t\t\tmskEnv->r=MSK_putavec(mskEnv->task,1,c_ind,2,subi,vali);\n\t\t\t\t\t} else { \n\t\t\t\t\t\t// constraint for y0 (fixed at 0)\n\t\t\t\t\t\tmskEnv->r=MSK_putaij(mskEnv->task,c_ind,c_var,-1.0);\n\t\t\t\t\t}\n\t\t\t\t\tmskEnv->r=MSK_putbound(mskEnv->task,1,c_ind,MSK_BK_LO,separation,MSK_INFINITY);\n\t\t\t\t\tc_ind++;\n\t\t\t\t}\n\t\t\t\tfor(j=0;j<levels[i+1].num_nodes && mskEnv->r==MSK_RES_OK;j++) {\n\t\t\t\t\tint node = levels[i+1].nodes[j]-1;\n\t\t\t\t\tif(node>=0){\n\t\t\t\t\t\tMSKidxt subi[]={c_var,node};\n\t\t\t\t\t\tdouble vali[]={1.0,-1.0};\n\t\t\t\t\t\tmskEnv->r=MSK_putavec(mskEnv->task,1,c_ind,2,subi,vali);\n\t\t\t\t\t} else { \n\t\t\t\t\t\t// constraint for y0 (fixed at 0)\n\t\t\t\t\t\tmskEnv->r=MSK_putaij(mskEnv->task,c_ind,c_var,1.0);\n\t\t\t\t\t}\n\t\t\t\t\tmskEnv->r=MSK_putbound(mskEnv->task,1,c_ind,MSK_BK_LO,separation,MSK_INFINITY);\n\t\t\t\t\tc_ind++;\n\t\t\t\t}\t\t\n\t\t\t}\n\t\t\tc_var=n+i;\n\t\t\tfor(j=0;j<levels[i].num_nodes && mskEnv->r==MSK_RES_OK;j++) {\n\t\t\t\t// create separation constraint a>=b+separation\n\t\t\t\tint node = levels[i].nodes[j]-1;\n\t\t\t\tif(node>=0){ // no constraint for fixed node\n\t\t\t\t\tMSKidxt subi[]={node,c_var};\n\t\t\t\t\tdouble vali[]={1.0,-1.0};\n\t\t\t\t\tmskEnv->r=MSK_putavec(mskEnv->task,1,c_ind,2,subi,vali);\n\t\t\t\t} else { \n\t\t\t\t\t// constraint for y0 (fixed at 0)\n\t\t\t\t\tmskEnv->r=MSK_putaij(mskEnv->task,c_ind,c_var,-1.0);\n\t\t\t\t}\n\t\t\t\tmskEnv->r=MSK_putbound(mskEnv->task,1,c_ind,MSK_BK_LO,separation,MSK_INFINITY);\n\t\t\t\tc_ind++;\n\t\t\t}\n\t\t\t// create constraints preserving the order of dummy vars\n\t\t\tfor(i=0;i<num_divisions+1 && mskEnv->r==MSK_RES_OK;i++) {\n\t\t\t\tint c_var=n-1+i, c_var2=c_var+1;\n\t\t\t\tMSKidxt subi[]={c_var,c_var2};\n\t\t\t\tdouble vali[]={1.0,-1.0};\n\t\t\t\tmskEnv->r=MSK_putavec(mskEnv->task,1,c_ind,2,subi,vali);\n\t\t\t\tmskEnv->r=MSK_putbound(mskEnv->task,1,c_ind,MSK_BK_LO,0,MSK_INFINITY);\n\t\t\t\tc_ind++;\n\t\t\t}\n#ifdef EQUAL_WIDTH_LEVELS\n\t\t\tfor(i=1;i<num_divisions+1 && mskEnv->r==MSK_RES_OK;i++) {\n\t\t\t\tint c_var=n-1+i, c_var_lo=c_var-1, c_var_hi=c_var+1;\n\t\t\t\tMSKidxt subi[]={c_var_lo,c_var,c_var_hi};\n\t\t\t\tdouble vali[]={1.0,-2.0,1.0};\n\t\t\t\tmskEnv->r=MSK_putavec(mskEnv->task,1,c_ind,3,subi,vali);\n\t\t\t\tmskEnv->r=MSK_putbound(mskEnv->task,1,c_ind,MSK_BK_FX,0,0);\n\t\t\t\tc_ind++;\n\t\t\t}\n#endif\n\t\t\tassert(c_ind==num_constraints);\n#ifdef DUMP_CONSTRAINTS\n\t\t\tfprintf(logfile,\"A=[\");\n\t\t\tfor(i=0;i<num_constraints;i++) {\n\t\t\t\tif(i!=0) fprintf(logfile,\";\");\n\t\t\t\tfor(j=0;j<mskEnv->num_variables;j++) {\n\t\t\t\t\tdouble aij;\n\t\t\t\t\tMSK_getaij(mskEnv->task,i,j,&aij);\n\t\t\t\t\tfprintf(logfile,\"%f \",aij);\n\t\t\t\t}\n\t\t\t}\n\t\t\tfprintf(logfile,\"]\\n\");\n\t\t\tfprintf(logfile,\"b=[\");\n\t\t\tfor(i=0;i<num_constraints;i++) {\n\t\t\t\tfprintf(logfile,\"%f \",separation);\n\t\t\t}\n\t\t\tfprintf(logfile,\"]\\n\");\n#endif\n\t\t\tif ( mskEnv->r==MSK_RES_OK )\n\t\t\t{\n\t\t\t\t/*\n\t\t\t\t* The lower triangular part of the Q\n\t\t\t\t* matrix in the objective is specified.\n\t\t\t\t*/\n\t\t\t\tmskEnv->r = MSK_putqobj(mskEnv->task,nonzero_lapsize,mskEnv->qsubi,mskEnv->qsubj,mskEnv->qval);\n\t\t\t}\n\t\t}\n\t}\n\tdelete_digcola_levels(levels,num_levels);\n\treturn mskEnv;\n}\n/*\nb: coefficients of linear part of optimisation function\nn: number of nodes\ncoords: optimal y* vector, coord[i] is coordinate of node[i]\nhierarchy_boundaries: y coord of boundaries between levels \n\t(ie, solution values for the dummy variables used in constraints)\n*/\nvoid mosek_quad_solve_hier(MosekEnv *mskEnv, float *b,int n,float* coords, float *hierarchy_boundaries) {\n\tint i,j;\n\tfor(i=1;i<n && mskEnv->r==MSK_RES_OK;i++) {\n\t\tmskEnv->r = MSK_putcj(mskEnv->task,i-1,-2*b[i]);\n\t}\n#ifdef DUMP_CONSTRAINTS\n\tfprintf(logfile,\"x0=[\");\n\tfor(j=0;j<mskEnv->num_variables;j++) {\n\t\tfprintf(logfile,\"%f \",j<n?b[j]:0);\n\t}\n\tfprintf(logfile,\"]\\n\");\n\tfprintf(logfile,\"f=[\");\n\tdouble *c=N_GNEW(mskEnv->num_variables,double);\n\tMSK_getc(mskEnv->task,c);\n\tfor(j=0;j<mskEnv->num_variables;j++) {\n\t\tfprintf(logfile,\"%f \",c[j]);\n\t}\n\tfree(c);\n\tfprintf(logfile,\"]\\n\");\n#endif\n\tif ( mskEnv->r==MSK_RES_OK )\n\t\tmskEnv->r = MSK_optimize(mskEnv->task);\n\n\tif ( mskEnv->r==MSK_RES_OK )\n\t{\n\t\tMSK_getsolutionslice(mskEnv->task,\n\t\t\tMSK_SOL_ITR,\n\t\t\tMSK_SOL_ITEM_XX,\n\t\t\t0,\n\t\t\tmskEnv->num_variables,\n\t\t\tmskEnv->xx);\n\n#ifdef DUMP_CONSTRAINTS\n\t\tfprintf(logfile,\"Primal solution\\n\");\n#endif\n\t\tcoords[0]=0;\n\t\tfor(j=0; j<mskEnv->num_variables; ++j) {\n#ifdef DUMP_CONSTRAINTS\n\t\t\tfprintf(logfile,\"x[%d]: %.2f\\n\",j,mskEnv->xx[j]);\n#endif\n\t\t\tif(j<n-1) {\n\t\t\t\tcoords[j+1]=-mskEnv->xx[j];\n\t\t\t} else if(j>=n&&j<mskEnv->num_variables-1) {\n\t\t\t\thierarchy_boundaries[j-n]=-mskEnv->xx[j];\n\t\t\t}\n\t\t}\n\t}\n\tfprintf(logfile,\"Return code: %d\\n\",mskEnv->r);\n}\n/**********************\nlap: the upper RHS of the symmetric graph laplacian matrix which will be transformed\n\tto the hessian of the non-linear part of the optimisation function\n\thas dimensions num_variables, dummy vars do not have entries in lap\ncs: array of pointers to separation constraints\n***********************/\nMosekEnv* mosek_init_sep(\n\tfloat* lap, int num_variables, int num_dummy_vars, Constraint **cs, int num_constraints)\n{\n\tint i,j;\n\tMosekEnv *mskEnv = GNEW(MosekEnv);\n    // fix var 0\n\tmskEnv->num_variables=num_variables+num_dummy_vars-1;\n\n\tfprintf(stderr,\"MOSEK!\\n\");\n\tlogfile = fopen(\"quad_solve_log\",\"w\");\n\n\t/* nonlinear coefficients matrix of objective function */\n\tint nonzero_lapsize=num_variables*(num_variables-1)/2;\n\tmskEnv->qval = N_GNEW(nonzero_lapsize,double);\n\tmskEnv->qsubi = N_GNEW(nonzero_lapsize,int);\n\tmskEnv->qsubj = N_GNEW(nonzero_lapsize,int);\n\n\t/* solution vector */\n\tmskEnv->xx = N_GNEW(mskEnv->num_variables,double);\n\n\t// pointer to beginning of nonzero sequence in a column\n\n\tint count=0;\n\tfor(i=0;i<num_variables-1;i++) {\n\t\tfor(j=i;j<num_variables-1;j++) {\n\t\t\tmskEnv->qval[count]=-2*lap[count+num_variables];\n\t\t\t//assert(mskEnv->qval[count]!=0);\n\t\t\tmskEnv->qsubi[count]=j;\n\t\t\tmskEnv->qsubj[count]=i;\n\t\t\tcount++;\n\t\t}\n\t}\n#ifdef DUMP_CONSTRAINTS\n\tfprintf(logfile,\"Q=[\");\n\tcount=0;\n\tfor(i=0;i<num_variables-1;i++) {\n\t\tif(i!=0) fprintf(logfile,\";\");\n\t\tfor(j=0;j<num_variables-1;j++) {\n\t\t\tif(j<i) {\n\t\t\t\tfprintf(logfile,\"0 \");\n\t\t\t} else {\n\t\t\t\tfprintf(logfile,\"%f \",-2*lap[num_variables+count++]);\n\t\t\t}\n\t\t}\n\t}\n\tfprintf(logfile,\"]\\nQ=Q-diag(diag(Q))+Q'\\n\");\n#endif\n\t/* Make the mosek environment. */\n\tmskEnv->r = MSK_makeenv(&mskEnv->env,NULL,NULL,NULL,NULL);\n\n\t/* Check whether the return code is ok. */\n\tif ( mskEnv->r==MSK_RES_OK )\n\t{\n\t\t/* Directs the log stream to the user\n\t\tspecified procedure 'printstr'. */\n\t\tMSK_linkfunctoenvstream(mskEnv->env,MSK_STREAM_LOG,NULL,printstr);\n\t}\n\n\t/* Initialize the environment. */   \n\tmskEnv->r = MSK_initenv(mskEnv->env);\n\tif (mskEnv->r==MSK_RES_OK)\n\t{ \n\t\t/* Make the optimization task. */\n\t\tmskEnv->r = MSK_maketask(mskEnv->env,num_constraints,mskEnv->num_variables,&mskEnv->task);\n\n\t\tif ( mskEnv->r==MSK_RES_OK )\n\t\t{\n\t\t\tmskEnv->r = MSK_linkfunctotaskstream(mskEnv->task,MSK_STREAM_LOG,NULL,printstr);\n\t\t\t/* Resize the task. */\n\t\t\tif ( mskEnv->r==MSK_RES_OK )\n\t\t\t\tmskEnv->r = MSK_resizetask(mskEnv->task,num_constraints,mskEnv->num_variables,\n\t\t\t\t0, // no cones!!\n\t\t\t\t// number of non-zero constraint matrix entries:\n                //   each constraint applies to 2 vars\n\t\t\t\t2*num_constraints, \n\t\t\t\tnonzero_lapsize);\n\n\t\t\t/* Append the constraints. */\n\t\t\tif ( mskEnv->r==MSK_RES_OK )\n\t\t\t\tmskEnv->r = MSK_append(mskEnv->task,1,num_constraints);\n\n\t\t\t/* Append the variables. */\n\t\t\tif ( mskEnv->r==MSK_RES_OK )\n\t\t\t\tmskEnv->r = MSK_append(mskEnv->task,0,mskEnv->num_variables);\n\t\t\t/* Put variable bounds. */\n\t\t\tfor(j=0; j<mskEnv->num_variables && mskEnv->r==MSK_RES_OK; j++)\n\t\t\t\tmskEnv->r = MSK_putbound(mskEnv->task,0,j,MSK_BK_RA,-MSK_INFINITY,MSK_INFINITY);\n            for(i=0;i<num_constraints;i++) {\n                int u = getLeftVarID(cs[i])-1;\n                int v = getRightVarID(cs[i])-1;\n                double separation = getSeparation(cs[i]);\n                if(u<0) {\n\t\t\t\t    mskEnv->r = MSK_putbound(mskEnv->task,0,v,MSK_BK_RA,-MSK_INFINITY,-separation);\n\t\t\t        assert ( mskEnv->r==MSK_RES_OK );\n                } else if(v<0) {\n\t\t\t\t    mskEnv->r = MSK_putbound(mskEnv->task,0,u,MSK_BK_RA,separation,MSK_INFINITY);\n\t\t\t        assert ( mskEnv->r==MSK_RES_OK );\n                } else {\n                    //fprintf(stderr,\"u=%d,v=%d,sep=%f\\n\",u,v,separation);\n                    MSKidxt subi[]={u,v};\n                    double vali[]={1.0,-1.0};\n                    mskEnv->r=MSK_putavec(mskEnv->task,1,i,2,subi,vali);\n\t\t\t        assert ( mskEnv->r==MSK_RES_OK );\n                    mskEnv->r=MSK_putbound(mskEnv->task,1,i,MSK_BK_LO,separation,MSK_INFINITY);\n\t\t\t        assert ( mskEnv->r==MSK_RES_OK );\n                }\n            }\n\t\t\tif ( mskEnv->r==MSK_RES_OK )\n\t\t\t{\n\t\t\t\t/*\n\t\t\t\t* The lower triangular part of the Q\n\t\t\t\t* matrix in the objective is specified.\n\t\t\t\t*/\n\t\t\t\tmskEnv->r = MSK_putqobj(mskEnv->task,nonzero_lapsize,mskEnv->qsubi,mskEnv->qsubj,mskEnv->qval);\n                assert ( mskEnv->r==MSK_RES_OK );\n\t\t\t}\n\t\t}\n\t}\n\treturn mskEnv;\n}\n/*\nn: size of b and coords, may be smaller than mskEnv->num_variables if we\nhave dummy vars\nb: coefficients of linear part of optimisation function\ncoords: optimal y* vector, coord[i] is coordinate of node[i]\n*/\nvoid mosek_quad_solve_sep(MosekEnv *mskEnv,int n, float *b,float* coords) {\n\tint i,j;\n\tassert(n<=mskEnv->num_variables+1);\n\tfor(i=0;i<n-1 && mskEnv->r==MSK_RES_OK;i++) {\n\t\tmskEnv->r = MSK_putcj(mskEnv->task,i,-2*b[i+1]);\n\t}\n\tif ( mskEnv->r==MSK_RES_OK )\n\t\tmskEnv->r = MSK_optimize(mskEnv->task);\n\n\tif ( mskEnv->r==MSK_RES_OK )\n\t{\n\t\tMSK_getsolutionslice(mskEnv->task,\n\t\t\tMSK_SOL_ITR,\n\t\t\tMSK_SOL_ITEM_XX,\n\t\t\t0,\n\t\t\tmskEnv->num_variables,\n\t\t\tmskEnv->xx);\n\n#ifdef DUMP_CONSTRAINTS\n\t\tfprintf(logfile,\"Primal solution\\n\");\n#endif\n\t\tcoords[0]=0;\n\t\tfor(j=1; j<=n; j++) {\n#ifdef DUMP_CONSTRAINTS\n\t\t\tfprintf(logfile,\"x[%d]: %.2f\\n\",j,mskEnv->xx[j-1]);\n#endif\n\t\t\tcoords[j]=-mskEnv->xx[j-1];\n\t\t}\n\t}\n\tfprintf(logfile,\"Return code: %d\\n\",mskEnv->r);\n}\n/*\nplease call to clean up\n*/\nvoid mosek_delete(MosekEnv *mskEnv) {\n\tMSK_deletetask(&mskEnv->task);\n\tMSK_deleteenv(&mskEnv->env);\n\n\tif(logfile) {\n\t\tfclose(logfile);\n\t\tlogfile=NULL;\n\t}\n\tfree(mskEnv->qval);\n\tfree(mskEnv->qsubi);\n\tfree(mskEnv->qsubj);\n\tfree(mskEnv->xx);\n\tfree(mskEnv);\n}\n#endif /* MOSEK */\n"
  },
  {
    "path": "experimental/neatogen/mosek_quad_solve.h",
    "content": "#ifdef MOSEK\n#ifndef _QSOLVE_H_\n#define _QSOLVE_H_\n\n#include <mosek.h> /* Include the MOSEK definition file. */\n#include \"types.h\"\n#include <csolve_VPSC.h>\n\ntypedef struct {\n\tint r;\n\tMSKenv_t  env;\n\tMSKtask_t task;\n\tdouble *qval;\n\tint *qsubi,*qsubj;\n\tdouble *xx;\n\tint num_variables;\n} MosekEnv;\n\nMosekEnv* mosek_init_hier(float* lap, int n,int *ordering,int *level_indexes,int num_divisions, float separation);\nvoid mosek_quad_solve_hier(MosekEnv*,float *b,int n,float* coords, float *hierarchy_boundaries);\nMosekEnv* mosek_init_sep(float* lap, int nv, int ndv, Constraint** cs, int m);\nvoid mosek_quad_solve_sep(MosekEnv*,int n,float *b,float* coords);\nvoid mosek_delete(MosekEnv*);\n\n\n#endif // _QSOLVE_H_\n#endif // MOSEK\n"
  },
  {
    "path": "experimental/neatogen/neato.h",
    "content": "/* $Id: neato.h,v 1.2 2005/07/13 20:29:40 erg Exp $ $Revision: 1.2 $ */\n/* vim:set shiftwidth=4 ts=8: */\n\n/**********************************************************\n*      This software is part of the graphviz package      *\n*                http://www.graphviz.org/                 *\n*                                                         *\n*            Copyright (c) 1994-2004 AT&T Corp.           *\n*                and is licensed under the                *\n*            Common Public License, Version 1.0           *\n*                      by AT&T Corp.                      *\n*                                                         *\n*        Information and Software Systems Research        *\n*              AT&T Research, Florham Park NJ             *\n**********************************************************/\n\n\n#ifndef         NEATO_H\n#define         NEATO_H\n\n#ifdef HAVE_CONFIG_H\n#include \"config.h\"\n#endif\n\n#define MODEL_SHORTPATH      0\n#define MODEL_CIRCUIT        1\n#define MODEL_SUBSET         2\n\n#define MODE_KK          0\n#define MODE_MAJOR       1\n#define MODE_HIER        2\n#define MODE_VSEP        3\n\n#define INIT_SELF        0\n#define INIT_REGULAR     1\n#define INIT_RANDOM      2\n\n#include\t\"render.h\"\n#include\t\"pathplan.h\"\n#include\t\"neatoprocs.h\"\n#include\t\"adjust.h\"\n\n#endif\t\t\t\t/* NEATO_H */\n"
  },
  {
    "path": "experimental/neatogen/neatoinit.c",
    "content": "/* $Id: neatoinit.c,v 1.17 2006/02/01 17:30:17 erg Exp $ $Revision: 1.17 $ */\n/* vim:set shiftwidth=4 ts=8: */\n\n/**********************************************************\n*      This software is part of the graphviz package      *\n*                http://www.graphviz.org/                 *\n*                                                         *\n*            Copyright (c) 1994-2004 AT&T Corp.           *\n*                and is licensed under the                *\n*            Common Public License, Version 1.0           *\n*                      by AT&T Corp.                      *\n*                                                         *\n*        Information and Software Systems Research        *\n*              AT&T Research, Florham Park NJ             *\n**********************************************************/\n\n\n#ifdef HAVE_CONFIG_H\n#include \"config.h\"\n#endif\n\n#include <time.h>\n#ifndef MSWIN32\n#include <unistd.h>\n#endif\n#include \"neato.h\"\n#include \"pack.h\"\n#include \"stress.h\"\n#ifdef DIGCOLA\n#include \"digcola.h\"\n#endif\n#include \"kkutils.h\"\n#include \"pointset.h\"\n#include <ctype.h>\n\n#ifndef HAVE_SRAND48\n#define srand48 srand\n#endif\n\nstatic attrsym_t *N_pos;\nstatic int Pack;                /* If >= 0, layout components separately and pack together\n                                 * The value of Pack gives margins around graphs.\n                                 */\nstatic char *cc_pfx = \"_neato_cc\";\n\nvoid neato_nodesize(node_t * n, bool flip)\n{\n    int w;\n\n    w = ND_xsize(n) = POINTS(ND_width(n));\n    ND_lw_i(n) = ND_rw_i(n) = w / 2;\n    ND_ht_i(n) = ND_ysize(n) = POINTS(ND_height(n));\n}\n\nvoid neato_init_node(node_t * n)\n{\n    common_init_node(n);\n    ND_pos(n) = ALLOC(GD_ndim(n->graph), 0, double);\n    neato_nodesize(n, GD_flip(n->graph));\n}\n\nvoid neato_init_edge(edge_t * e)\n{\n    common_init_edge(e);\n\n    ED_factor(e) = late_double(e, E_weight, 1.0, 1.0);\n}\n\nint user_pos(attrsym_t * posptr, attrsym_t * pinptr, node_t * np, int nG)\n{\n    double *pvec;\n    char *p, c;\n    double z;\n\n    if (posptr == NULL)\n        return FALSE;\n    pvec = ND_pos(np);\n    p = agxget(np, posptr->index);\n    if (p[0]) {\n        c = '\\0';\n        if ((Ndim >= 3) && \n            (sscanf(p, \"%lf,%lf,%lf%c\", pvec, pvec+1, pvec+2, &c) >= 3)){\n            ND_pinned(np) = P_SET;\n            if (PSinputscale > 0.0) {\n                int i;\n                for (i = 0; i < Ndim; i++)\n                    pvec[i] = pvec[i] / PSinputscale;\n            }\n            if (Ndim > 3)\n                jitter_d(np, nG, 3);\n            if ((c == '!')\n                || (pinptr && mapbool(agxget(np, pinptr->index))))\n                ND_pinned(np) = P_PIN;\n            return TRUE;\n        }\n        else if (sscanf(p, \"%lf,%lf%c\", pvec, pvec + 1, &c) >= 2) {\n            ND_pinned(np) = P_SET;\n            if (PSinputscale > 0.0) {\n                int i;\n                for (i = 0; i < Ndim; i++)\n                    pvec[i] = pvec[i] / PSinputscale;\n            }\n            if (Ndim > 2) {\n                if (N_z && (p = agxget(np, N_z->index)) && \n                           (sscanf(p,\"%lf\",&z) == 1)) { \n                    if (PSinputscale > 0.0) {\n                        pvec[2] = z / PSinputscale;\n                    }\n                    else\n                        pvec[2] = z;\n                    jitter_d(np, nG, 3);\n                }\n                else\n                    jitter3d(np, nG);\n            }\n            if ((c == '!')\n                || (pinptr && mapbool(agxget(np, pinptr->index))))\n                ND_pinned(np) = P_PIN;\n            return TRUE;\n        } else\n            agerr(AGERR, \"node %s, position %s, expected two doubles\\n\",\n                  np->name, p);\n    }\n    return FALSE;\n}\n\nvoid neato_init_node_edge(graph_t * g)\n{\n    node_t *n;\n    edge_t *e;\n    int nG = agnnodes(g);\n    attrsym_t *N_pin;\n\n    N_pos = agfindattr(g->proto->n, \"pos\");\n    N_pin = agfindattr(g->proto->n, \"pin\");\n\n    for (n = agfstnode(g); n; n = agnxtnode(g, n)) {\n        neato_init_node(n);\n        user_pos(N_pos, N_pin, n, nG);        /* set user position if given */\n    }\n    for (n = agfstnode(g); n; n = agnxtnode(g, n)) {\n        for (e = agfstout(g, n); e; e = agnxtout(g, e))\n            neato_init_edge(e);\n    }\n}\n\nvoid neato_cleanup_node(node_t * n)\n{\n    if (ND_shape(n)) {\n        ND_shape(n)->fns->freefn(n);\n    }\n    free(ND_pos(n));\n    free_label(ND_label(n));\n    memset(&(n->u), 0, sizeof(Agnodeinfo_t));\n}\n\nvoid neato_free_splines(edge_t * e)\n{\n    int i;\n    if (ED_spl(e)) {\n        for (i = 0; i < ED_spl(e)->size; i++)\n            free(ED_spl(e)->list[i].list);\n        free(ED_spl(e)->list);\n        free(ED_spl(e));\n    }\n    ED_spl(e) = NULL;\n}\n\nvoid neato_cleanup_edge(edge_t * e)\n{\n    neato_free_splines(e);\n    free_label(ED_label(e));\n    memset(&(e->u), 0, sizeof(Agedgeinfo_t));\n}\n\nvoid neato_cleanup_graph(graph_t * g)\n{\n    if (Nop || (Pack < 0))\n        free_scan_graph(g);\n    memset(&(g->u), 0, sizeof(Agraphinfo_t));\n}\n\nvoid neato_cleanup(graph_t * g)\n{\n    node_t *n;\n    edge_t *e;\n\n    for (n = agfstnode(g); n; n = agnxtnode(g, n)) {\n        for (e = agfstout(g, n); e; e = agnxtout(g, e)) {\n            neato_cleanup_edge(e);\n        }\n        neato_cleanup_node(n);\n    }\n    neato_cleanup_graph(g);\n}\n\nstatic int numFields(unsigned char *pos)\n{\n    int cnt = 0;\n    unsigned char c;\n\n    do {\n        while (isspace(*pos))\n            pos++;                /* skip white space */\n        if ((c = *pos)) { /* skip token */\n            cnt++;\n            while ((c = *pos) && !isspace(c) && (c != ';'))\n                pos++;\n        }\n    } while (isspace(c));\n    return cnt;\n}\n\nstatic void set_elabel(edge_t * e, textlabel_t * l, char *name)\n{\n    double x, y;\n    point pt;\n    char *lp;\n    lp = agget(e, name);\n    if (lp && (sscanf(lp, \"%lf,%lf\", &x, &y) == 2)) {\n        pt.x = (int) (x);\n        pt.y = (int) (y);\n        l->p = pt;\n        l->set = TRUE;\n    }\n}\n\nstatic cluster_data* cluster_map(graph_t *mastergraph, graph_t *g) {\n    /* search meta-graph to find clusters */\n    graph_t *mg, *subg;\n    node_t *mm, *mn;\n    edge_t *me;\n    // array of arrays of node indices in each cluster\n    int **cs,*cn;\n    int i,j,nclusters=0;\n    bool assigned[agnnodes(g)];\n    for(i=0;i<agnnodes(g);i++) {\n        assigned[i]=false;\n    }\n    cluster_data *cdata = GNEW(cluster_data);\n    cdata->ntoplevel=agnnodes(g);\n    mm = mastergraph->meta_node;\n    mg = mm->graph;\n    for (me = agfstout(mg, mm); me; me = agnxtout(mg, me)) {\n        mn = me->head;\n        subg = agusergraph(mn);\n        if (!strncmp(subg->name, \"cluster\", 7)) {\n            nclusters++;\n        }\n    }\n    cdata->nvars=0;\n    cdata->nclusters=nclusters;\n    cs=cdata->clusters=N_GNEW(nclusters,int*);\n    cn=cdata->clustersizes=N_GNEW(nclusters,int);\n    fprintf(stderr,\"search %d clusters...\\n\",nclusters);\n    for (me = agfstout(mg, mm); me; me = agnxtout(mg, me)) {\n        mn = me->head;\n        subg = agusergraph(mn);\n        /* clusters are processed by separate calls to ordered_edges */\n        if (!strncmp(subg->name, \"cluster\", 7)) {\n            *cn=agnnodes(subg);\n            cdata->nvars+=*cn;\n            int *c=*cs++=N_GNEW(*cn++,int);\n            node_t *n;\n            fprintf(stderr,\"Cluster with %d nodes...\\n\",agnnodes(subg));\n            for (n = agfstnode(subg); n; n = agnxtnode(subg, n)) {\n                node_t *gn;\n                int ind=0;\n                for (gn = agfstnode(g); gn; gn = agnxtnode(g, gn)) {\n                    if(gn->id==n->id) break;\n                    ind++;\n                }\n                fprintf(stderr,\"  node=%s, id=%d, ind=%d\\n\",n->name,n->id,ind);\n                *c++=ind;\n                assigned[ind]=true;\n                cdata->ntoplevel--;\n            }\n        }\n    }\n    cdata->bb=N_GNEW(cdata->nclusters,boxf);\n    cdata->toplevel=N_GNEW(cdata->ntoplevel,int);\n    for(i=j=0;i<agnnodes(g);i++) {\n        if(!assigned[i]) {\n            cdata->toplevel[j++]=i;\n        }\n    }\n    assert(cdata->ntoplevel==agnnodes(g)-cdata->nvars);\n    return cdata;\n}\nstatic void freeClusterData(cluster_data *c) {\n    if(c->nclusters>0) {\n        free(c->clusters[0]);\n        free(c->clusters);\n        free(c->clustersizes);\n        free(c->toplevel);\n        free(c->bb);\n    }\n    free(c);\n}\n/* user_spline:\n * Attempt to use already existing pos info for spline\n * Return 1 if successful, 0 otherwise.\n * Assume E_pos != NULL and ED_spl(e) == NULL.\n */\nstatic int user_spline(attrsym_t * E_pos, edge_t * e)\n{\n    char *pos;\n    int i, n, npts, nc;\n    point *ps = 0;\n    point *pp;\n    double x, y;\n    int sflag = 0, eflag = 0;\n    point sp = { 0, 0 }, ep = {\n    0, 0};\n    bezier *newspl;\n    int more = 1;\n    int stype, etype;\n\n    pos = agxget(e, E_pos->index);\n    if (*pos == '\\0')\n        return 0;\n\n    arrow_flags(e, &stype, &etype);\n    do {\n        /* check for s head */\n        i = sscanf(pos, \"s,%lf,%lf%n\", &x, &y, &nc);\n        if (i == 2) {\n            sflag = 1;\n            pos = pos + nc;\n            sp.x = (int) (x);\n            sp.y = (int) (y);\n        }\n\n        /* check for e head */\n        i = sscanf(pos, \" e,%lf,%lf%n\", &x, &y, &nc);\n        if (i == 2) {\n            eflag = 1;\n            pos = pos + nc;\n            ep.x = (int) (x);\n            ep.y = (int) (y);\n        }\n\n        npts = numFields((unsigned char *) pos);        /* count potential points */\n        n = npts;\n        if ((n < 4) || (n % 3 != 1)) {\n            neato_free_splines(e);\n            return 0;\n        }\n        ps = ALLOC(n, 0, point);\n        pp = ps;\n        while (n) {\n            i = sscanf(pos, \"%lf,%lf%n\", &x, &y, &nc);\n            if (i < 2) {\n                free(ps);\n                neato_free_splines(e);\n                return 0;\n            }\n            pos = pos + nc;\n            pp->x = (int) (x);\n            pp->y = (int) (y);\n            pp++;\n            n--;\n        }\n         while (isspace(*pos)) pos++;\n        if (*pos == '\\0')\n            more = 0;\n        else\n            pos++;\n\n        /* parsed successfully; create spline */\n        newspl = new_spline(e, npts);\n        if (sflag) {\n            newspl->sflag = stype;\n            newspl->sp = sp;\n        }\n        if (eflag) {\n            newspl->eflag = etype;\n            newspl->ep = ep;\n        }\n        for (i = 0; i < npts; i++) {\n            newspl->list[i] = ps[i];\n        }\n        free(ps);\n    } while (more);\n\n    if (ED_label(e))\n        set_elabel(e, ED_label(e), \"lp\");\n    if (ED_head_label(e))\n        set_elabel(e, ED_head_label(e), \"head_lp\");\n    if (ED_tail_label(e))\n        set_elabel(e, ED_tail_label(e), \"tail_lp\");\n\n    return 1;\n}\n\n/* Nop can be:\n *  0 - do full layout\n *  1 - assume initial node positions, do (optional) adjust and all splines\n *  2 - assume final node and edges positions, do nothing except compute\n *      missing splines\n */\n\n /* Indicates the amount of edges with position information */\ntypedef enum { NoEdges, SomeEdges, AllEdges } pos_edge;\n\n/* nop_init_edges:\n * Check edges for position info.\n * If position info exists, check for edge label positions.\n * Return number of edges with position info.\n */\nstatic pos_edge nop_init_edges(Agraph_t * g)\n{\n    node_t *n;\n    edge_t *e;\n    int nedges = 0;\n    attrsym_t *E_pos = agfindattr(g->proto->e, \"pos\");\n\n    if (!E_pos || (Nop < 2))\n        return NoEdges;\n\n    for (n = agfstnode(g); n; n = agnxtnode(g, n)) {\n        for (e = agfstout(g, n); e; e = agnxtout(g, e)) {\n            if (user_spline(E_pos, e)) {\n                nedges++;\n            }\n        }\n    }\n    if (nedges) {\n        if (nedges == agnedges(g))\n            return AllEdges;\n        else\n            return SomeEdges;\n    } else\n        return NoEdges;\n}\n\n/* chkBB:\n * Scans for a correct bb attribute. If available, sets it\n * in the graph and returns 1.\n */\n#define BS \"%d,%d,%d,%d\"\n\nstatic int chkBB(Agraph_t * g, attrsym_t * G_bb)\n{\n    char *s;\n    box bb;\n\n    s = agxget(g, G_bb->index);\n    if (sscanf(s, BS, &bb.LL.x, &bb.LL.y, &bb.UR.x, &bb.UR.y) == 4) {\n        GD_bb(g) = bb;\n        return 1;\n    } else\n        return 0;\n}\n\nstatic void add_cluster(Agraph_t * g, Agraph_t * subg)\n{\n    int cno;\n    cno = ++(GD_n_cluster(g));\n    GD_clust(g) = ZALLOC(cno + 1, GD_clust(g), graph_t *, GD_n_cluster(g));\n    GD_clust(g)[cno] = subg;\n    do_graph_label(subg);\n}\n\n\nstatic void nop_init_graphs(Agraph_t *, attrsym_t *, attrsym_t *);\n\n/* dfs:\n */\nstatic void\ndfs(node_t * mn, Agraph_t * g, attrsym_t * G_lp, attrsym_t * G_bb)\n{\n    graph_t *subg;\n\n    subg = agusergraph(mn);\n    if (!strncmp(subg->name, \"cluster\", 7) && chkBB(subg, G_bb)) {\n        add_cluster(g, subg);\n        nop_init_graphs(subg, G_lp, G_bb);\n    } else {\n        graph_t *mg = g->meta_node->graph;\n        edge_t *me;\n        for (me = agfstout(mg, mn); me; me = agnxtout(mg, me)) {\n            dfs(me->head, g, G_lp, G_bb);\n        }\n    }\n}\n\n/* nop_init_graphs:\n * Read in clusters and graph label info.\n * A subgraph is a cluster if its name starts with \"cluster\" and\n * it has a valid bb.\n */\nstatic void\nnop_init_graphs(Agraph_t * g, attrsym_t * G_lp, attrsym_t * G_bb)\n{\n    graph_t *mg;\n    edge_t *me;\n    char *s;\n    point p;\n\n    if (GD_label(g) && G_lp) {\n        s = agxget(g, G_lp->index);\n        if (sscanf(s, \"%d,%d\", &p.x, &p.y) == 2) {\n            GD_label(g)->set = TRUE;\n            GD_label(g)->p = p;\n        }\n    }\n\n    if (!G_bb)\n        return;\n    mg = g->meta_node->graph;\n    for (me = agfstout(mg, g->meta_node); me; me = agnxtout(mg, me)) {\n        dfs(me->head, g, G_lp, G_bb);\n    }\n}\n\n/* translateE:\n * Translate edge by offset.\n * Assume ED_spl(e) != NULL\n */\nstatic void translateE(edge_t * e, point offset)\n{\n    int i, j;\n    point *pt;\n    bezier *bez;\n\n    bez = ED_spl(e)->list;\n    for (i = 0; i < ED_spl(e)->size; i++) {\n        pt = bez->list;\n        for (j = 0; j < bez->size; j++) {\n            pt->x -= offset.x;\n            pt->y -= offset.y;\n            pt++;\n        }\n        if (bez->sflag) {\n            bez->sp.x -= offset.x;\n            bez->sp.y -= offset.y;\n        }\n        if (bez->eflag) {\n            bez->ep.x -= offset.x;\n            bez->ep.y -= offset.y;\n        }\n        bez++;\n    }\n\n    if (ED_label(e) && ED_label(e)->set) {\n        ED_label(e)->p.x -= offset.x;\n        ED_label(e)->p.y -= offset.y;\n    }\n    if (ED_head_label(e) && ED_head_label(e)->set) {\n        ED_head_label(e)->p.x -= offset.x;\n        ED_head_label(e)->p.y -= offset.y;\n    }\n    if (ED_tail_label(e) && ED_tail_label(e)->set) {\n        ED_tail_label(e)->p.x -= offset.x;\n        ED_tail_label(e)->p.y -= offset.y;\n    }\n}\n\n/* translateG:\n */\nstatic void translateG(Agraph_t * g, point offset)\n{\n    int i;\n\n    GD_bb(g).UR.x -= offset.x;\n    GD_bb(g).UR.y -= offset.y;\n    GD_bb(g).LL.x -= offset.x;\n    GD_bb(g).LL.y -= offset.y;\n\n    if (GD_label(g) && GD_label(g)->set) {\n        GD_label(g)->p.x -= offset.x;\n        GD_label(g)->p.y -= offset.y;\n    }\n\n    for (i = 1; i <= GD_n_cluster(g); i++)\n        translateG(GD_clust(g)[i], offset);\n}\n\n/* translate:\n */\nstatic void translate(Agraph_t * g, pos_edge posEdges)\n{\n    node_t *n;\n    edge_t *e;\n    pointf offset;\n\n    offset = cvt2ptf(GD_bb(g).LL);\n    for (n = agfstnode(g); n; n = agnxtnode(g, n)) {\n        ND_pos(n)[0] -= offset.x;\n        ND_pos(n)[1] -= offset.y;\n    }\n    if (posEdges != NoEdges) {\n        for (n = agfstnode(g); n; n = agnxtnode(g, n)) {\n            for (e = agfstout(g, n); e; e = agnxtout(g, e))\n                if (ED_spl(e))\n                    translateE(e, GD_bb(g).LL);\n        }\n    }\n    translateG(g, GD_bb(g).LL);\n}\n\n/* init_nop:\n * This assumes all nodes have been positioned.\n * It also assumes none of the * relevant fields in A*info_t have been set.\n * The input may provide additional position information for\n * clusters, edges and labels. If certain position information\n * is missing, init_nop will use a standard neato technique to\n * supply it.\n */\nint init_nop(Agraph_t * g, int adjust)\n{\n    int i;\n    node_t *np;\n    pos_edge posEdges;                /* How many edges have spline info */\n    attrsym_t *G_lp = agfindattr(g, \"lp\");\n    attrsym_t *G_bb = agfindattr(g, \"bb\");\n\n    /* If G_bb not defined, define it */\n    if (!G_bb)\n        G_bb = agraphattr(g, \"bb\", \"\");\n\n    scan_graph(g);                /* mainly to set up GD_neato_nlist */\n    for (i = 0; (np = GD_neato_nlist(g)[i]); i++) {\n        if (!hasPos(np) && strncmp(np->name, \"cluster\", 7)) {\n            agerr(AGERR, \"node %s in graph %s has no position\\n\",\n                  np->name, g->name);\n            return 1;\n        }\n    }\n    nop_init_graphs(g, G_lp, G_bb);\n    posEdges = nop_init_edges(g);\n\n    if (adjust && Nop == 1)\n        adjustNodes(g);\n\n    /* If g does not have a good \"bb\" attribute, compute it. */\n    if (!chkBB(g, G_bb))\n        compute_bb(g);\n\n    /* At this point, all bounding boxes should be correctly defined.\n     * If necessary, we translate the graph to the origin.\n     */\n    if (adjust && (GD_bb(g).LL.x || GD_bb(g).LL.y))\n        translate(g, posEdges);\n\n    if (!adjust) {\n        node_t *n;\n        State = GVSPLINES;\n        for (n = agfstnode(g); n; n = agnxtnode(g, n)) {\n            ND_coord_i(n).x = POINTS(ND_pos(n)[0]);\n            ND_coord_i(n).y = POINTS(ND_pos(n)[1]);\n        }\n    }\n    else if (posEdges != AllEdges)\n        spline_edges0(g);\n    else {\n        State = GVSPLINES;\n        neato_set_aspect(g);\n    }\n    return 0;\n}\n\nvoid neato_init_graphn(Agraph_t * g, int dfltdim)\n{\n    GD_ndim(g->root) = late_int(g, agfindattr(g, \"dim\"), dfltdim, 2);\n    Ndim = GD_ndim(g->root) = MIN(GD_ndim(g->root), MAXDIM);\n    neato_init_node_edge(g);\n}\n\nvoid neato_init_graph(Agraph_t * g)\n{\n    neato_init_graphn(g, 2);\n}\n\nstatic int neatoModel(graph_t * g)\n{\n    char *p = agget(g, \"model\");\n    char c;\n\n    if (!p || (!(c = *p)))\n        return MODEL_SHORTPATH;\n    if ((c == 'c') && streq(p, \"circuit\"))\n        return MODEL_CIRCUIT;\n    if (c == 's') {\n        if (streq(p, \"subset\"))\n            return MODEL_SUBSET;\n        else if (streq(p, \"shortpath\"))\n            return MODEL_SHORTPATH;\n    }\n    agerr(AGWARN,\n          \"Unknown value %s for attribute \\\"model\\\" in graph %s - ignored\\n\",\n          p, g->name);\n    return MODEL_SHORTPATH;\n}\n\n/* neatoMode:\n */\nstatic int neatoMode(graph_t * g)\n{\n    char *str;\n    int mode = MODE_MAJOR;        /* default mode */\n\n    str = agget(g, \"mode\");\n    if (str && *str) {\n        if (streq(str, \"KK\"))\n            mode = MODE_KK;\n        else if (streq(str, \"major\"))\n            mode = MODE_MAJOR;\n#ifdef DIGCOLA\n        else if (streq(str, \"hier\"))\n            mode = MODE_HIER;\n        else if (streq(str, \"vsep\"))\n            mode = MODE_VSEP;\n#endif\n        else\n            agerr(AGWARN,\n                  \"Illegal value %s for attribute \\\"mode\\\" in graph %s - ignored\\n\",\n                  str, g->name);\n    }\n\n    return mode;\n}\n\n/* checkEdge:\n *\n */\nstatic int checkEdge(PointMap * pm, edge_t * ep, int idx)\n{\n    int i = ND_id(ep->tail);\n    int j = ND_id(ep->head);\n    int tmp;\n\n    if (i > j) {\n        tmp = i;\n        i = j;\n        j = tmp;\n    }\n    return insertPM(pm, i, j, idx);\n}\n\n#ifdef DIGCOLA\n/* dfsCycle:\n * dfs for breaking cycles in vtxdata\n */\nstatic void\ndfsCycle (vtx_data* graph, int i,int mode)\n{\n    node_t *np, *hp;\n    int j, e, f;\n\n    np = graph[i].np;\n    ND_mark(np) = TRUE;\n    ND_onstack(np) = TRUE;\n    for (e = 1; e < graph[i].nedges; e++) {\n        if (graph[i].edists[e] == 1.0) continue;  /* in edge */\n        j = graph[i].edges[e];\n        hp = graph[j].np;\n        if (ND_onstack(hp)) {  /* back edge: reverse it */\n            // if mode is VSEP make it an in-edge \n            // at both ends, so that an edge constraint won't be generated!\n            graph[i].edists[e] = mode==MODE_VSEP?-1.0:1.0;\n            for (f = 1; (f < graph[j].nedges) &&(graph[j].edges[f] != i); f++) ;\n            assert (f < graph[j].nedges);\n            graph[j].edists[f] = -1.0;\n        }\n        else if (ND_mark(hp) == FALSE) dfsCycle(graph, j,mode);\n\n    }\n    ND_onstack(np) = FALSE;\n}\n\n/* acyclic:\n * Do a dfs of the vtx_data, looking for cycles, reversing edges.\n */\nstatic void\nacyclic (vtx_data* graph, int nv, int mode)\n{\n    int i;\n    node_t* np;\n\n    for (i = 0; i < nv; i++) {\n        np = graph[i].np;\n        ND_mark(np) = FALSE;\n        ND_onstack(np) = FALSE;\n    }\n    for (i = 0; i < nv; i++) {\n        if (ND_mark(graph[i].np)) continue;\n        dfsCycle (graph, i, mode);        \n    }\n\n}\n#endif\n\n/* makeGraphData:\n * Create sparse graph representation via arrays.\n * Each node is represented by a vtx_data.\n * The index of each neighbor is stored in the edges array;\n * the corresponding edge lengths and weights go on ewgts and eweights.\n * We do not allocate the latter 2 if the graph does not use them.\n * By convention, graph[i].edges[0] == i.\n * The values graph[i].ewgts[0] and graph[i].eweights[0] are left undefined.\n *\n * In constructing graph from g, we neglect loops. We track multiedges (ignoring\n * direction). Edge weights are additive; the final edge length is the max.\n *\n * If direction is used, we set the edists field, -1 for tail, +1 for head. \n * graph[i].edists[0] is left undefined. If multiedges exist, the direction\n * of the first one encountered is used. Finally, a pass is made to guarantee\n * the graph is acyclic.\n *\n * add argument: int **clusters\n * clusters[c] is a list of indices to nodes contained by the cth cluster\n */\nstatic vtx_data *makeGraphData(graph_t * g, int nv, int *nedges, int mode, int model)\n{\n    vtx_data *graph;\n    int ne = agnedges(g);        /* upper bound */\n    int *edges;\n    float *ewgts = NULL;\n    node_t *np;\n    edge_t *ep;\n    float *eweights = NULL;\n#ifdef DIGCOLA\n    float *edists = NULL;\n#endif\n    int haveLen;\n    int haveWt;\n    int haveDir;\n    PointMap *ps = newPM();\n    int i, i_nedges, idx;\n\n    /* lengths and weights unused in reweight model */\n    if (model == MODEL_SUBSET) {\n        haveLen = FALSE;\n        haveWt = FALSE;\n    } else {\n        haveLen = (agindex(g->root->proto->e, \"len\") >= 0);\n        haveWt = (E_weight != 0);\n    }\n    if (mode == MODE_HIER || mode == MODE_VSEP)\n        haveDir = TRUE;\n    else\n        haveDir = FALSE;\n\n    graph = N_GNEW(nv, vtx_data);\n    edges = N_GNEW(2 * ne + nv, int);        /* reserve space for self loops */\n    if (haveLen || haveDir)\n        ewgts = N_GNEW(2 * ne + nv, float);\n    if (haveWt)\n        eweights = N_GNEW(2 * ne + nv, float);\n#ifdef DIGCOLA\n    if (haveDir)\n        edists = N_GNEW(2*ne+nv,float);\n#endif\n\n    i = 0;\n    ne = 0;\n    for (np = agfstnode(g); np; np = agnxtnode(g, np)) {\n        // to do: if node in cluster c, clusters[c]++=i\n        int j = 1;                /* index of neighbors */\n        clearPM(ps);\n        assert(ND_id(np) == i);\n        graph[i].np = np;\n        graph[i].edges = edges++;        /* reserve space for the self loop */\n        if (haveLen || haveDir)\n            graph[i].ewgts = ewgts++;\n        else\n            graph[i].ewgts = NULL;\n        if (haveWt)\n            graph[i].eweights = eweights++;\n        else\n            graph[i].eweights = NULL;\n#ifdef DIGCOLA\n        if (haveDir) {\n            graph[i].edists = edists++;\n        }\n        else\n            graph[i].edists = NULL;\n#endif\n        i_nedges = 1;                /* one for the self */\n\n        for (ep = agfstedge(g, np); ep; ep = agnxtedge(g, ep, np)) {\n            if (ep->head == ep->tail)\n                continue;        /* ignore loops */\n            idx = checkEdge(ps, ep, j);\n            if (idx != j) {        /* seen before */\n                if (haveWt)\n                    graph[i].eweights[idx] += ED_factor(ep);\n                if (haveLen) {\n                    int curlen = graph[i].ewgts[idx];\n                    graph[i].ewgts[idx] = MAX(ED_dist(ep), curlen);\n                }\n            } else {\n                node_t *vp = (((ep->tail) == np) ? ep->head : ep->tail);\n                ne++;\n                j++;\n\n                *edges++ = ND_id(vp);\n                if (haveWt)\n                    *eweights++ = ED_factor(ep);\n                if (haveLen)\n                    *ewgts++ = ED_dist(ep);\n                else if (haveDir)\n                    *ewgts++ = 1.0;\n#ifdef DIGCOLA\n                if (haveDir) {\n                    char *s=agget(ep,\"dir\");\n                    if(s&&!strncmp(s,\"none\",4)) {\n                        *edists++ = 0;\n                    } else {\n                        *edists++ = (np == ep->head ? 1.0 : -1.0);\n                    }\n                }\n#endif\n                i_nedges++;\n            }\n        }\n\n        graph[i].nedges = i_nedges;\n        graph[i].edges[0] = i;\n#ifdef USE_STYLES\n        graph[i].styles = NULL;\n#endif\n        i++;\n    }\n#ifdef DIGCOLA\n    if (haveDir) {\n    /* Make graph acyclic */\n        acyclic (graph, nv, mode);\n    }\n#endif\n\n    ne /= 2;                        /* every edge is counted twice */\n\n    /* If necessary, release extra memory. */\n    if (ne != agnedges(g)) {\n        edges = RALLOC(2 * ne + nv, graph[0].edges, int);\n        if (haveLen)\n            ewgts = RALLOC(2 * ne + nv, graph[0].ewgts, float);\n        if (haveWt)\n            eweights = RALLOC(2 * ne + nv, graph[0].eweights, float);\n\n        for (i = 0; i < nv; i++) {\n            int sz = graph[i].nedges;\n            graph[i].edges = edges;\n            edges += sz;\n            if (haveLen) {\n                graph[i].ewgts = ewgts;\n                ewgts += sz;\n            }\n            if (haveWt) {\n                graph[i].eweights = eweights;\n                eweights += sz;\n            }\n        }\n    }\n\n    *nedges = ne;\n    freePM(ps);\n    return graph;\n}\n\nstatic void freeGraphData(vtx_data * graph)\n{\n    if (graph != NULL) {\n        if (graph[0].edges != NULL)\n            free(graph[0].edges);\n        if (graph[0].ewgts != NULL)\n            free(graph[0].ewgts);\n#ifdef UNIMPLEMENTED\n        if (graph[0].elens != NULL)\n            free(graph[0].elens);\n#endif\n#ifdef USE_STYLES\n        if (graph[0].styles != NULL)\n            free(graph[0].styles);\n#endif\n        free(graph);\n    }\n}\n\nstatic void initRegular(graph_t * G, int nG)\n{\n    int i;\n    double a, da;\n    node_t *np;\n\n    a = 0.0;\n    da = (2 * PI) / nG;\n    for (i = 0; (np = GD_neato_nlist(G)[i]); i++) {\n        ND_pos(np)[0] = nG * Spring_coeff * cos(a);\n        ND_pos(np)[1] = nG * Spring_coeff * sin(a);\n        ND_pinned(np) = P_SET;\n        a = a + da;\n        if (Ndim > 2)\n            jitter3d(np, nG);\n    }\n}\n\n#define SLEN(s) (sizeof(s)-1)\n#define SMART   \"self\"\n#define REGULAR \"regular\"\n#define RANDOM  \"random\"\n\n/* checkStart:\n * Analyzes start attribute, setting seed.\n * If set,\n *   If start is regular, places nodes and returns INIT_REGULAR.\n *   If start is self, returns INIT_SELF.\n *   If start is random, returns INIT_RANDOM\n *   If number follows, use as seed.\n *   else set seed random\n * else return default\n * \n */\nint checkStart(graph_t * G, int nG, int dflt)\n{\n    char *p;\n    unsigned int seed;\n    char smallbuf[32];\n    int init = dflt;\n\n    seed = 1;\n    p = agget(G, \"start\");\n    if (p) {\n        unsigned char uc = *(unsigned char *) p;\n        if (isalpha(uc)) {\n            if (!strncmp(p, SMART, SLEN(SMART))) {\n                if (N_pos)\n                    agerr(AGWARN,\n                          \"node positions are ignored with start=%s\\n\",\n                          SMART);\n                init = INIT_SELF;\n                p += SLEN(SMART);\n            } else if (!strncmp(p, REGULAR, SLEN(REGULAR))) {\n                if (N_pos)\n                    agerr(AGWARN,\n                          \"node positions are ignored with start=%s\\n\",\n                          REGULAR);\n                initRegular(G, nG);\n                return INIT_REGULAR;\n            } else if (!strncmp(p, RANDOM, SLEN(RANDOM))) {\n                init = INIT_RANDOM;\n                p += SLEN(RANDOM);\n            }\n        }\n\n        /* Check for seed value */\n        if (sscanf(p, \"%d\", &seed) < 1) {\n#ifdef MSWIN32\n            seed = (unsigned) time(NULL);\n#else\n            seed = (unsigned) getpid() ^ (unsigned) time(NULL);\n#endif\n            sprintf(smallbuf, \"%u\", seed);\n            agset(G, \"start\", smallbuf);\n        }\n    }\n    srand48(seed);\n    return init;\n}\n\n#ifdef UNUSED\nvoid dumpData(graph_t * g, vtx_data * gp, int nv, int ne)\n{\n    node_t *v;\n    int i, j, n;\n\n    fprintf(stderr, \"n %d e %d\\n\", nv, ne);\n    for (v = agfstnode(g); v; v = agnxtnode(g, v)) {\n        fprintf(stderr, \"\\\"%s\\\" %d\\n\", v->name, ND_id(v));\n    }\n    for (i = 0; i < nv; i++) {\n        n = gp[i].nedges;\n        fprintf(stderr, \"[%d] %d\\n\", i, n);\n        for (j = 0; j < n; j++) {\n            fprintf(stderr, \"  %3d\", gp[i].edges[j]);\n        }\n        fputs(\"\\n\", stderr);\n        if (gp[i].ewgts)\n            for (j = 0; j < n; j++) {\n                fprintf(stderr, \"  %3f\", gp[i].ewgts[j]);\n            }\n        fputs(\"\\n\", stderr);\n\n    }\n}\n#endif\n\n/* majorization:\n * Solve stress using majorization.\n * Old neato attributes to incorporate:\n *  weight?\n */\nstatic void\nmajorization(graph_t *mg, graph_t * g, int nv, int mode, int model, int dim, int steps)\n{\n    double **coords;\n    int ne;\n    int i;\n    node_t *v;\n    vtx_data *gp;\n    cluster_data *cs;\n\n    int init;\n\n    init = checkStart(g, nv, (mode == MODE_HIER ? INIT_SELF : INIT_RANDOM));\n    coords = N_GNEW(dim, double *);\n    coords[0] = N_GNEW(nv * dim, double);\n    for (i = 1; i < Ndim; i++) {\n        coords[i] = coords[0] + i * nv;\n    }\n    if (Verbose) {\n        fprintf(stderr, \"model %d smart_init %d iterations %d tol %f\\n\",\n                model, (init == INIT_SELF), MaxIter, Epsilon);\n        fprintf(stderr, \"convert graph: \");\n        start_timer();\n    }\n    gp = makeGraphData(g, nv, &ne, mode, model);\n    //////////////////\n    {\n    int ci,cj;\n    cs=(cluster_data*)cluster_map(mg,g);\n    for(ci=0;ci<cs->nclusters;ci++) {\n        fprintf(stderr,\"cluster=%d\\n\",ci);\n        for(cj=0;cj<cs->clustersizes[ci];cj++) {\n            fprintf(stderr,\"  nodeid=%d\\n\",cs->clusters[ci][cj]);\n        }\n    }\n    }\n    /////////////////\n\n    if (Verbose) {\n        fprintf(stderr, \"%d nodes %.2f sec\\n\", nv, elapsed_sec());\n    }\n\n#ifdef DIGCOLA\n    if (mode == MODE_HIER || mode == MODE_VSEP) {\n        double lgap = late_double(g, agfindattr(g, \"levelsgap\"), 0.0, -MAXDOUBLE);\n        if (mode == MODE_HIER) {        \n            stress_majorization_with_hierarchy(gp, nv, ne, coords, Ndim,\n                       (init == INIT_SELF), model, MaxIter, lgap);\n        } else {\n            char* str;\n            vsep_options opt;\n            pointf nsize[nv], gap;\n            opt.edge_gap=lgap;\n#ifdef MOSEK\n            opt.mosek=0;\n#endif;\n            opt.noverlap=opt.diredges=0;\n            opt.gap.x=opt.gap.y=0;\n            opt.nsize=nsize;\n            opt.clusters=cs;\n            str = agget(g, \"diredgeconstraints\");\n            if(str && !strncmp(str,\"true\",4)) {\n                opt.diredges = 1;\n                fprintf(stderr,\"Generating Edge Constraints...\\n\");\n            } else if(str && !strncmp(str,\"hier\",4)) {\n                opt.diredges = 2;\n                fprintf(stderr,\"Generating DiG-CoLa Edge Constraints...\\n\");\n            }\n            str = agget(g, \"overlapconstraints\");\n            if(str && !strncmp(str,\"true\",4)) {\n                opt.noverlap = 1;\n                fprintf(stderr,\"Generating Non-overlap Constraints...\\n\");\n            } else if(str && !strncmp(str,\"post\",4)) {\n                opt.noverlap = 2;\n                fprintf(stderr,\"Removing overlaps as postprocess...\\n\");\n            }  \n#ifdef MOSEK\n            str = agget(g, \"mosek\");\n            if(str && !strncmp(str,\"true\",4)) {\n                opt.mosek = 1;\n                fprintf(stderr,\"Using Mosek for constraint optimization...\\n\");\n            }\n#endif // MOSEK\n            if ((str = agget(g, \"sep\"))) {\n                char* c;\n                if (c=strchr(str,',')) {\n                    i=c-str;\n                    fprintf(stderr,\"gap=%s,%d\\n\",str,i);\n                    char s[strlen(str)];\n                    strncpy(s,str,i);\n                    s[i]=0;\n                    opt.gap.x=atof(s);\n                    strcpy(s,c+1);\n                    opt.gap.y=atof(s);\n                    fprintf(stderr,\"gap=%f,%f\\n\",opt.gap.x,opt.gap.y);\n                } else {\n                    opt.gap.x =opt.gap.y = atof(str);\n                }\n            }\n            for (i=0, v = agfstnode(g); v; v = agnxtnode(g, v),i++) {\n                nsize[i].x=ND_width(v);\n                nsize[i].y=ND_height(v);\n            }\n\n            stress_majorization_vsep(gp, nv, ne, coords, Ndim, model, MaxIter, &opt);\n        }\n    }\n    else\n#endif\n        stress_majorization_kD_mkernel(gp, nv, ne, coords, Ndim,\n                                   (init == INIT_SELF), model, MaxIter);\n\n    /* store positions back in nodes */\n    for (v = agfstnode(g); v; v = agnxtnode(g, v)) {\n        int idx = ND_id(v);\n        int i;\n        for (i = 0; i < Ndim; i++) {\n            ND_pos(v)[i] = coords[i][idx];\n        }\n    }\n    freeGraphData(gp);\n    freeClusterData(cs);\n    free(coords[0]);\n    free(coords);\n}\n\nstatic void subset_model(Agraph_t * G, int nG)\n{\n    int i, j, ne;\n    DistType **Dij;\n    vtx_data *gp;\n\n    gp = makeGraphData(G, nG, &ne, MODE_KK, MODEL_SUBSET);\n    Dij = compute_apsp_artifical_weights(gp, nG);\n    for (i = 0; i < nG; i++) {\n        for (j = 0; j < nG; j++) {\n            GD_dist(G)[i][j] = Dij[i][j];\n        }\n    }\n    free(Dij[0]);\n    free(Dij);\n    freeGraphData(gp);\n}\n\n/* kkNeato:\n * Solve using gradient descent a la Kamada-Kawai.\n */\nstatic void kkNeato(Agraph_t * g, int nG, int model)\n{\n    if (model == MODEL_SUBSET) {\n        subset_model(g, nG);\n    } else if (model == MODEL_CIRCUIT) {\n        if (!circuit_model(g, nG)) {\n            agerr(AGWARN,\n                  \"graph %s is disconnected. Hence, the circuit model\\n\",\n                  g->name);\n            agerr(AGPREV,\n                  \"is undefined. Reverting to the shortest path model.\\n\");\n            agerr(AGPREV,\n                  \"Alternatively, consider running neato using -Gpack=true or decomposing\\n\");\n            agerr(AGPREV, \"the graph into connected components.\\n\");\n            shortest_path(g, nG);\n        }\n    } else\n        shortest_path(g, nG);\n    initial_positions(g, nG);\n    diffeq_model(g, nG);\n    if (Verbose) {\n        fprintf(stderr, \"Solving model %d iterations %d tol %f\\n\",\n                model, MaxIter, Epsilon);\n        start_timer();\n    }\n    solve_model(g, nG);\n}\n\n/* neatoLayout:\n * Use stress optimization to layout a single component\n */\nvoid neatoLayout(Agraph_t * mg, Agraph_t * g, int layoutMode, int layoutModel)\n{\n    int nG;\n    char *str;\n\n    if ((str = agget(g, \"maxiter\")))\n        MaxIter = atoi(str);\n    else if (layoutMode == MODE_MAJOR)\n        MaxIter = DFLT_ITERATIONS;\n    else\n        MaxIter = 100 * agnnodes(g);\n\n    nG = scan_graph_mode(g, layoutMode);\n    if (!nG)\n        return;\n    if (layoutMode)\n        majorization(mg,g, nG, layoutMode, layoutModel, Ndim, MaxIter);\n    else\n        kkNeato(g, nG, layoutModel);\n\n}\n\n/* addZ;\n * If dimension == 3 and z attribute is declared, \n * attach z value to nodes if not defined.\n */\nstatic void\naddZ (Agraph_t* g)\n{\n    node_t* n;\n    char    buf[BUFSIZ];\n\n    if ((Ndim >= 3) && N_z) { \n        for (n = agfstnode(g); n; n = agnxtnode(g, n)) {\n            sprintf(buf, \"%d\", POINTS(ND_pos(n)[2]));\n            agxset(n, N_z->index, buf);\n        }\n    }\n}\n\n/* neato_layout:\n */\nvoid neato_layout(Agraph_t * g)\n{\n    int layoutMode;\n    int model;\n    pack_mode mode;\n\n    if (Nop) {\n        int save = PSinputscale;\n        int ret;\n        PSinputscale = POINTS_PER_INCH;\n        neato_init_graph(g);\n        addZ (g);\n        ret = init_nop(g, 1);\n        PSinputscale = save;\n        if (ret) {\n            agerr(AGPREV, \"as required by the -n flag\\n\");\n            exit(1);\n        }\n    } else {\n        neato_init_graph(g);\n        layoutMode = neatoMode(g);\n        model = neatoModel(g);\n        mode = getPackMode(g, l_undef);\n        Pack = getPack(g, -1, CL_OFFSET);\n        /* pack if just packmode defined. */\n        if (mode == l_undef) {\n            /* If the user has not indicated packing but we are\n             * using the new neato, turn packing on.\n             */\n            if ((Pack < 0) && layoutMode)\n                Pack = CL_OFFSET;\n            mode = l_node;\n        } else if (Pack < 0)\n            Pack = CL_OFFSET;\n        if (Pack >= 0) {\n            fprintf(stderr,\"pack\\n\");\n            graph_t *gc;\n            graph_t **cc;\n            int n_cc;\n            int i;\n            pack_info pinfo;\n            bool pin;\n\n            cc = pccomps(g, &n_cc, cc_pfx, &pin);\n\n            for (i = 0; i < n_cc; i++) {\n                gc = cc[i];\n                nodeInduce(gc);\n                neatoLayout(g, gc, layoutMode, model);\n                adjustNodes(gc);\n            }\n            if (n_cc > 1) {\n                bool *bp;\n                if (pin) {\n                    bp = N_NEW(n_cc, bool);\n                    bp[0] = TRUE;\n                } else\n                    bp = 0;\n                pinfo.margin = Pack;\n                pinfo.doSplines = 0;\n                pinfo.mode = mode;\n                pinfo.fixed = bp;\n                packGraphs(n_cc, cc, 0, &pinfo);\n                if (bp)\n                    free(bp);\n            }\n            compute_bb(g);\n            addZ (g);\n            spline_edges(g);\n\n            /* cleanup and remove component subgraphs */\n            for (i = 0; i < n_cc; i++) {\n                gc = cc[i];\n                free_scan_graph(gc);\n                agdelete(g, gc);\n            }\n            {\n                graph_t *mg, *subg;\n                node_t *mm, *mn;\n                edge_t *me;\n                mm = g->meta_node;\n                mg = mm->graph;\n                for (me = agfstout(mg, mm); me; me = agnxtout(mg, me)) {\n                    mn = me->head;\n                    subg = agusergraph(mn);\n                    if (!strncmp(subg->name, \"cluster\", 7)) {\n                        add_cluster(g,subg);\n                        compute_bb(subg);\n                    }\n                }\n            }\n        } else {\n            neatoLayout(g, g, layoutMode, model);\n            adjustNodes(g);\n            addZ (g);\n            spline_edges(g);\n        }\n    }\n    dotneato_postprocess(g);\n}\n// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=4:softtabstop=4 :\n"
  },
  {
    "path": "experimental/neatogen/neatoprocs.h",
    "content": "/* $Id: neatoprocs.h,v 1.4 2005/11/15 22:55:48 erg Exp $ $Revision: 1.4 $ */\n/* vim:set shiftwidth=4 ts=8: */\n\n/**********************************************************\n*      This software is part of the graphviz package      *\n*                http://www.graphviz.org/                 *\n*                                                         *\n*            Copyright (c) 1994-2004 AT&T Corp.           *\n*                and is licensed under the                *\n*            Common Public License, Version 1.0           *\n*                      by AT&T Corp.                      *\n*                                                         *\n*        Information and Software Systems Research        *\n*              AT&T Research, Florham Park NJ             *\n**********************************************************/\n\n#ifndef NEATOPROCS_H\n#define NEATOPROCS_H\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n    extern int allow_edits(int);\n    extern void avoid_cycling(graph_t *, Agnode_t *, double *);\n    extern int checkStart(graph_t * G, int nG, int);\n    extern Agnode_t *choose_node(graph_t *, int);\n    extern int circuit_model(graph_t *, int);\n    extern void D2E(Agraph_t *, int, int, double *);\n    extern void diffeq_model(graph_t *, int);\n    extern double distvec(double *, double *, double *);\n    extern void do_graph_label(Agraph_t *);\n    extern void final_energy(graph_t *, int);\n    extern double doubleattr(void *, int, double);\n    extern double fpow32(double);\n    extern Ppolyline_t getPath(edge_t *, vconfig_t *, int, Ppoly_t **,\n\t\t\t       int);\n    extern void heapdown(Agnode_t *);\n    extern void heapup(Agnode_t *);\n    extern void initial_positions(graph_t *, int);\n    extern int init_port(Agnode_t *, Agedge_t *, char *, bool);\n    extern void jitter3d(Agnode_t *, int);\n    extern void jitter_d(Agnode_t *, int, int);\n    extern Ppoly_t *makeObstacle(node_t * n, double SEP);\n    extern void makeSelfArcs(path * P, edge_t * e, int stepx);\n    extern void makeSpline(edge_t *, Ppoly_t **, int, bool);\n    extern void make_spring(graph_t *, Agnode_t *, Agnode_t *, double);\n    extern void move_node(graph_t *, int, Agnode_t *);\n    extern int init_nop(graph_t * g, int);\n    extern void neato_nodesize(node_t * n, bool flip);\n    extern void neato_cleanup(graph_t * g);\n    extern void neato_cleanup_edge(edge_t * e);\n    extern void neato_cleanup_graph(graph_t * g);\n    extern void neato_cleanup_node(node_t * n);\n    extern node_t *neato_dequeue(void);\n    extern void neato_enqueue(node_t *);\n    extern void neato_free_splines(edge_t * e);\n    extern void neato_init_node_edge(Agraph_t *);\n    extern void neato_init_edge(Agedge_t *);\n    extern void neato_init_node(Agnode_t *);\n    extern void neato_layout(Agraph_t * g);\n    extern void neatoLayout(Agraph_t *mg, Agraph_t * g, int layoutMode, int layoutModel);\n    extern void neato_init_graph(graph_t * g);\n    extern void neato_init_graphn(graph_t * g, int);\n    extern int Plegal_arrangement(Ppoly_t ** polys, int n_polys);\n    extern void randompos(Agnode_t *, int);\n    extern void s1(graph_t *, node_t *);\n    extern int scan_graph(graph_t *);\n    extern int scan_graph_mode(graph_t * G, int mode);\n    extern void free_scan_graph(graph_t *);\n    extern void shortest_path(graph_t *, int);\n    extern void solve(double *, double *, double *, int);\n    extern void solve_model(graph_t *, int);\n    extern int solveCircuit(int nG, double **Gm, double **Gm_inv);\n    extern void spline_edges(Agraph_t *);\n    extern void spline_edges0(Agraph_t *);\n    extern int spline_edges1(graph_t * g, int);\n    extern int splineEdges(graph_t *,\n\t\t\t   int (*edgefn) (graph_t *, double, int), int);\n    extern void neato_set_aspect(graph_t * g);\n    extern void toggle(int);\n    extern int user_pos(Agsym_t *, Agsym_t *, Agnode_t *, int);\n    extern double **new_array(int i, int j, double val);\n    extern void free_array(double **rv);\n    extern int matinv(double **A, double **Ainv, int n);\n\n#ifdef __cplusplus\n}\n#endif\n#endif\n"
  },
  {
    "path": "experimental/neatogen/neatosplines.c",
    "content": "/* $Id: neatosplines.c,v 1.17 2005/11/15 22:55:48 erg Exp $ $Revision: 1.17 $ */\n/* vim:set shiftwidth=4 ts=8: */\n\n/**********************************************************\n*      This software is part of the graphviz package      *\n*                http://www.graphviz.org/                 *\n*                                                         *\n*            Copyright (c) 1994-2004 AT&T Corp.           *\n*                and is licensed under the                *\n*            Common Public License, Version 1.0           *\n*                      by AT&T Corp.                      *\n*                                                         *\n*        Information and Software Systems Research        *\n*              AT&T Research, Florham Park NJ             *\n**********************************************************/\n\n\n#ifdef HAVE_CONFIG_H\n#include \"config.h\"\n#endif\n\n#include \"neato.h\"\n#include \"adjust.h\"\n#include \"pathplan.h\"\n#include \"vispath.h\"\n#ifndef HAVE_DRAND48\nextern double drand48(void);\n#endif\n\n#define P2PF(p, pf) (pf.x = p.x, pf.y = p.y)\n#define PF2P(pf, p) (p.x = ROUND (pf.x), p.y = ROUND (pf.y))\n\nextern void printvis(vconfig_t * cp);\nextern int in_poly(Ppoly_t argpoly, Ppoint_t q);\n\nstatic bool spline_merge(node_t * n)\n{\n    return FALSE;\n}\n\nstatic bool swap_ends_p(edge_t * e)\n{\n    return FALSE;\n}\n\nstatic splineInfo sinfo = { swap_ends_p, spline_merge };\n\nstatic void\nmake_barriers(Ppoly_t ** poly, int npoly, int pp, int qp,\n\t      Pedge_t ** barriers, int *n_barriers)\n{\n    int i, j, k, n, b;\n    Pedge_t *bar;\n\n    n = 0;\n    for (i = 0; i < npoly; i++) {\n\tif (i == pp)\n\t    continue;\n\tif (i == qp)\n\t    continue;\n\tn = n + poly[i]->pn;\n    }\n    bar = N_GNEW(n, Pedge_t);\n    b = 0;\n    for (i = 0; i < npoly; i++) {\n\tif (i == pp)\n\t    continue;\n\tif (i == qp)\n\t    continue;\n\tfor (j = 0; j < poly[i]->pn; j++) {\n\t    k = j + 1;\n\t    if (k >= poly[i]->pn)\n\t\tk = 0;\n\t    bar[b].a = poly[i]->ps[j];\n\t    bar[b].b = poly[i]->ps[k];\n\t    b++;\n\t}\n    }\n    assert(b == n);\n    *barriers = bar;\n    *n_barriers = n;\n}\n\n/* recPt:\n */\nstatic Ppoint_t recPt(double x, double y, point c, double sep)\n{\n    Ppoint_t p;\n\n    p.x = (x * sep) + c.x;\n    p.y = (y * sep) + c.y;\n    return p;\n}\n\nstatic void makePortLabels(edge_t * e)\n{\n    if (ED_head_label(e) && !ED_head_label(e)->set) {\n\tplace_portlabel(e, TRUE);\n\tupdateBB(e->tail->graph, ED_head_label(e));\n    }\n    if (ED_tail_label(e) && !ED_tail_label(e)->set) {\n\tplace_portlabel(e, FALSE);\n\tupdateBB(e->tail->graph, ED_tail_label(e));\n    }\n}\n\n/* endPoints:\n * Extract the actual end points of the spline, where\n * they touch the node.\n */\nstatic void endPoints(splines * spl, point * p, point * q)\n{\n    bezier bz;\n\n    bz = spl->list[0];\n    if (bz.sflag)\n\t*p = bz.sp;\n    else\n\t*p = bz.list[0];\n    bz = spl->list[spl->size - 1];\n    if (bz.eflag)\n\t*q = bz.ep;\n    else\n\t*q = bz.list[bz.size - 1];\n}\n\n#define LEFTOF(a,b,c) (((a.y - b.y)*(c.x - b.x) - (c.y - b.y)*(a.x - b.x)) > 0)\n#define MAXLABELWD  (POINTS_PER_INCH/2.0)\n\n/* addEdgeLabels:\n * rp and rq are the port points of the tail and head node.\n * Adds label, headlabel and taillabel.\n * The use of 2 and 4 in computing ld.x and ld.y are fudge factors, to\n * introduce a bit of spacing.\n * Updates bounding box.\n * We try to use the actual endpoints of the spline, as they may differ\n * significantly from rp and rq, but if the spline is degenerate (e.g.,\n * the nodes overlap), we use rp and rq.\n */\nstatic void addEdgeLabels(edge_t * e, point rp, point rq)\n{\n    point p, q;\n    point d;\t\t\t/* midpoint of segment p-q */\n    point ld;\n    point sp;\n    point del;\n    pointf spf;\n    double f, ht, wd, dist2;\n    int leftOf;\n\n    if (ED_label(e) && !ED_label(e)->set) {\n\tendPoints(ED_spl(e), &p, &q);\n\tif ((p.x == q.x) && (p.y == q.y)) { /* degenerate spline */\n\t    p = rp;\n\t    q = rq;\n\t}\n\td.x = (q.x + p.x) / 2;\n\td.y = (p.y + q.y) / 2;\n\tdel.x = q.x - p.x;\n\tdel.y = q.y - p.y;\n\tdist2 = del.x*del.x + del.y*del.y;\n\tht = (ED_label(e)->dimen.y + 2)/2.0;\n\tsp = dotneato_closest(ED_spl(e), d);\n\tspf.x = sp.x;\n\tspf.y = sp.y;\n\tif (dist2) {\n\t    wd = (MIN(ED_label(e)->dimen.x + 2, MAXLABELWD))/2.0;\n\t    leftOf = LEFTOF(p, q, sp);\n\t    if ((leftOf && (del.y >= 0)) || (!leftOf && (del.y < 0))) {\n\t\tif (del.x*del.y >= 0)\n\t\t    ht *= -1;\n\t    }\n\t    else {\n\t\twd *= -1;\n\t\tif (del.x*del.y < 0)\n\t\t    ht *= -1;\n\t    }\n\t    f = (del.y*wd - del.x*ht)/dist2;\n\t    ld.x = -f*del.y;\n\t    ld.y = f*del.x;\n\t}\n\telse {    /* end points the same */\n\t    ld.x = 0;\n\t    ld.y = -ht;\n\t}\n\n\tED_label(e)->p.x = spf.x + ld.x;\n\tED_label(e)->p.y = spf.y + ld.y;\n\tED_label(e)->set = TRUE;\n\tupdateBB(e->tail->graph, ED_label(e));\n    }\n    makePortLabels(e);\n}\n\ntypedef struct {\n    node_t *n1;\n    point p1;\n    node_t *n2;\n    point p2;\n} edgeinfo;\ntypedef struct {\n    Dtlink_t link;\n    edgeinfo id;\n    edge_t *e;\n} edgeitem;\n\nstatic void *newitem(Dt_t * d, edgeitem * obj, Dtdisc_t * disc)\n{\n    edgeitem *newp;\n\n    NOTUSED(disc);\n    newp = NEW(edgeitem);\n    newp->id = obj->id;\n    newp->e = obj->e;\n    ED_count(newp->e) = 1;\n\n    return newp;\n}\n\nstatic void freeitem(Dt_t * d, edgeitem * obj, Dtdisc_t * disc)\n{\n    free(obj);\n}\n\nstatic int\ncmpitems(Dt_t * d, edgeinfo * key1, edgeinfo * key2, Dtdisc_t * disc)\n{\n    int x;\n\n    if (key1->n1 > key2->n1)\n\treturn 1;\n    if (key1->n1 < key2->n1)\n\treturn -1;\n    if (key1->n2 > key2->n2)\n\treturn 1;\n    if (key1->n2 < key2->n2)\n\treturn -1;\n\n    if ((x = key1->p1.x - key2->p1.x))\n\treturn x;\n    if ((x = key1->p1.y - key2->p1.y))\n\treturn x;\n    if ((x = key1->p2.x - key2->p2.x))\n\treturn x;\n    return (key1->p2.y - key2->p2.y);\n}\n\nDtdisc_t edgeItemDisc = {\n    offsetof(edgeitem, id),\n    sizeof(edgeinfo),\n    offsetof(edgeitem, link),\n    (Dtmake_f) newitem,\n    (Dtfree_f) freeitem,\n    (Dtcompar_f) cmpitems,\n    0,\n    0,\n    0\n};\n\n/* equivEdge:\n * See if we have already encountered an edge between the same\n * node:port pairs. If so, return the earlier edge. If not, \n * this edge is added to map and returned.\n * We first have to canonicalize the key fields using a lexicographic\n * ordering.\n */\nstatic edge_t *equivEdge(Dt_t * map, edge_t * e)\n{\n    edgeinfo test;\n    edgeitem dummy;\n    edgeitem *ip;\n\n    if (e->tail < e->head) {\n\ttest.n1 = e->tail;\n\ttest.p1 = ED_tail_port(e).p;\n\ttest.n2 = e->head;\n\ttest.p2 = ED_head_port(e).p;\n    } else if (e->tail > e->head) {\n\ttest.n2 = e->tail;\n\ttest.p2 = ED_tail_port(e).p;\n\ttest.n1 = e->head;\n\ttest.p1 = ED_head_port(e).p;\n    } else {\n\tpoint hp = ED_head_port(e).p;\n\tpoint tp = ED_tail_port(e).p;\n\tif (tp.x < hp.x) {\n\t    test.p1 = tp;\n\t    test.p2 = hp;\n\t} else if (tp.x > hp.x) {\n\t    test.p1 = hp;\n\t    test.p2 = tp;\n\t} else if (tp.y < hp.y) {\n\t    test.p1 = tp;\n\t    test.p2 = hp;\n\t} else if (tp.y > hp.y) {\n\t    test.p1 = hp;\n\t    test.p2 = tp;\n\t} else {\n\t    test.p1 = test.p2 = tp;\n\t}\n\ttest.n2 = test.n1 = e->tail;\n    }\n    dummy.id = test;\n    dummy.e = e;\n    ip = dtinsert(map, &dummy);\n    return ip->e;\n}\n\n\n/* makeSelfArcs:\n * Generate loops. We use the library routine makeSelfEdge\n * which also places the labels.\n * We have to handle port labels here.\n * as well as update the bbox from edge labels.\n */\nvoid makeSelfArcs(path * P, edge_t * e, int stepx)\n{\n    int cnt = ED_count(e);\n\n    if (cnt == 1) {\n\tedge_t *edges1[1];\n\tedges1[0] = e;\n\tmakeSelfEdge(P, edges1, 0, 1, stepx, stepx, &sinfo);\n\tif (ED_label(e))\n\t    updateBB(e->tail->graph, ED_label(e));\n\tmakePortLabels(e);\n    } else {\n\tint i;\n\tedge_t **edges = N_GNEW(cnt, edge_t *);\n\tfor (i = 0; i < cnt; i++) {\n\t    edges[i] = e;\n\t    e = ED_to_virt(e);\n\t}\n\tmakeSelfEdge(P, edges, 0, cnt, stepx, stepx, &sinfo);\n\tfor (i = 0; i < cnt; i++) {\n\t    e = edges[i];\n\t    if (ED_label(e))\n\t\tupdateBB(e->tail->graph, ED_label(e));\n\t    makePortLabels(e);\n\t}\n\tfree(edges);\n    }\n}\n\nstatic void makeStraightEdge(graph_t * g, edge_t * e)\n{\n    point dumb[4];\n    node_t *n = e->tail;\n    node_t *head = e->head;\n    int e_cnt = ED_count(e);\n    pointf perp;\n    point del;\n    edge_t *e0;\n    int i, j, xstep, dx;\n    double l_perp;\n    point dumber[4];\n    point p, q;\n\n    p = dumb[1] = dumb[0] = add_points(ND_coord_i(n), ED_tail_port(e).p);\n    q = dumb[2] = dumb[3] =\n\tadd_points(ND_coord_i(head), ED_head_port(e).p);\n\n    if (e_cnt == 1) {\n\tclip_and_install(e, e, dumb, 4, &sinfo);\n\taddEdgeLabels(e, p, q);\n\treturn;\n    }\n\n    e0 = e;\n    perp.x = dumb[0].y - dumb[3].y;\n    perp.y = dumb[3].x - dumb[0].x;\n    if ((perp.x == 0) && (perp.y == 0)) { \n\t/* degenerate case */\n\tdumb[1] = dumb[0];\n\tdumb[2] = dumb[3];\n\tdel.x = 0;\n\tdel.y = 0;\n    }\n    else {\n\tl_perp = sqrt(perp.x * perp.x + perp.y * perp.y);\n\txstep = GD_nodesep(g);\n\tdx = xstep * (e_cnt - 1) / 2;\n\tdumb[1].x = dumb[0].x + (dx * perp.x) / l_perp;\n\tdumb[1].y = dumb[0].y + (dx * perp.y) / l_perp;\n\tdumb[2].x = dumb[3].x + (dx * perp.x) / l_perp;\n\tdumb[2].y = dumb[3].y + (dx * perp.y) / l_perp;\n\tdel.x = -xstep * perp.x / l_perp;\n\tdel.y = -xstep * perp.y / l_perp;\n    }\n\n    for (i = 0; i < e_cnt; i++) {\n\tif (e0->head == head) {\n\t    p = dumb[0];\n\t    q = dumb[3];\n\t    for (j = 0; j < 4; j++) {\n\t\tdumber[j] = dumb[j];\n\t    }\n\t} else {\n\t    p = dumb[3];\n\t    q = dumb[0];\n\t    for (j = 0; j < 4; j++) {\n\t\tdumber[3 - j] = dumb[j];\n\t    }\n\t}\n\tclip_and_install(e0, e0, dumber, 4, &sinfo);\n\taddEdgeLabels(e0, p, q);\n\te0 = ED_to_virt(e0);\n\tdumb[1].x += del.x;\n\tdumb[1].y += del.y;\n\tdumb[2].x += del.x;\n\tdumb[2].y += del.y;\n    }\n}\n\n/* makeObstacle:\n * Given a node, return an obstacle reflecting the\n * node's geometry. SEP specifies how much space to allow\n * around the polygon. \n * Returns the constructed polygon on success, NULL on failure.\n * Failure means the node shape is not supported. \n *\n * The polygon has its vertices in CW order.\n * \n * N.B. Point, epsf and user shapes are not handled. Point should\n * be easy, and user shapes are boxes. FIX\n */\nPpoly_t *makeObstacle(node_t * n, double SEP)\n{\n    Ppoly_t *obs;\n    polygon_t *poly;\n    double adj = 0.0;\n    int j, sides;\n    pointf polyp;\n    box b;\n    point pt;\n    field_t *fld;\n\n    switch (shapeOf(n)) {\n    case SH_POLY:\n\tobs = NEW(Ppoly_t);\n\tpoly = (polygon_t *) ND_shape_info(n);\n\tif (poly->sides >= 3) {\n\t    sides = poly->sides;\n\t} else {\t\t/* ellipse */\n\t    sides = 8;\n\t    adj = drand48() * .01;\n\t}\n\tobs->pn = sides;\n\tobs->ps = N_NEW(sides, Ppoint_t);\n\t/* assuming polys are in CCW order, and pathplan needs CW */\n\tfor (j = 0; j < sides; j++) {\n\t    if (poly->sides >= 3) {\n\t\tpolyp.x = poly->vertices[j].x * SEP;\n\t\tpolyp.y = poly->vertices[j].y * SEP;\n\t    } else {\n\t\tdouble c, s;\n\t\tc = cos(2.0 * PI * j / sides + adj);\n\t\ts = sin(2.0 * PI * j / sides + adj);\n\t\tpolyp.x = SEP * c * (ND_lw_i(n) + ND_rw_i(n)) / 2.0;\n\t\tpolyp.y = SEP * s * ND_ht_i(n) / 2.0;\n\t    }\n\t    obs->ps[sides - j - 1].x = polyp.x + ND_coord_i(n).x;\n\t    obs->ps[sides - j - 1].y = polyp.y + ND_coord_i(n).y;\n\t}\n\tbreak;\n    case SH_RECORD:\n\tfld = (field_t *) ND_shape_info(n);\n\tb = fld->b;\n\tobs = NEW(Ppoly_t);\n\tobs->pn = 4;\n\tobs->ps = N_NEW(4, Ppoint_t);\n\t/* CW order */\n\tpt = ND_coord_i(n);\n\tobs->ps[0] = recPt(b.LL.x, b.LL.y, pt, SEP);\n\tobs->ps[1] = recPt(b.LL.x, b.UR.y, pt, SEP);\n\tobs->ps[2] = recPt(b.UR.x, b.UR.y, pt, SEP);\n\tobs->ps[3] = recPt(b.UR.x, b.LL.y, pt, SEP);\n\tbreak;\n    default:\n\tobs = NULL;\n\tbreak;\n    }\n    return obs;\n}\n\n/* getPath\n * Construct the shortest path from one endpoint of e to the other.\n * The obstacles and their number are given by obs and npoly.\n * vconfig is a precomputed data structure to help in the computation.\n * If chkPts is true, the function finds the polygons, if any, containing\n * the endpoints and tells the shortest path computation to ignore them. \n * Assumes this info is set in ND_lim, usually from _spline_edges.\n * Returns the shortest path.\n */\nPpolyline_t\ngetPath(edge_t * e, vconfig_t * vconfig, int chkPts, Ppoly_t ** obs,\n\tint npoly)\n{\n    Ppolyline_t line;\n    int pp, qp;\n    Ppoint_t p, q;\n    point p1, q1;\n\n    p1 = add_points(ND_coord_i(e->tail), ED_tail_port(e).p);\n    q1 = add_points(ND_coord_i(e->head), ED_head_port(e).p);\n    P2PF(p1, p);\n    P2PF(q1, q);\n\n    /* determine the polygons (if any) that contain the endpoints */\n    pp = qp = POLYID_NONE;\n    if (chkPts) {\n\tpp = ND_lim(e->tail);\n\tqp = ND_lim(e->head);\n/*\n\tfor (i = 0; i < npoly; i++) {\n\t    if ((pp == POLYID_NONE) && in_poly(*obs[i], p))\n\t\tpp = i;\n\t    if ((qp == POLYID_NONE) && in_poly(*obs[i], q))\n\t\tqp = i;\n\t}\n*/\n    }\n    Pobspath(vconfig, p, pp, q, qp, &line);\n    return line;\n}\n\n/* makeSpline:\n * Construct a spline connecting the endpoints of e, avoiding the npoly\n * obstacles obs.\n * The resultant spline is attached to the edge, the positions of any \n * edge labels are computed, and the graph's bounding box is recomputed.\n * \n * If chkPts is true, the function checks if one or both of the endpoints \n * is on or inside one of the obstacles and, if so, tells the shortest path\n * computation to ignore them. \n */\nvoid makeSpline(edge_t * e, Ppoly_t ** obs, int npoly, bool chkPts)\n{\n    Ppolyline_t line, spline;\n    Pvector_t slopes[2];\n    int i, n_barriers;\n    int pp, qp;\n    Ppoint_t p, q;\n    point *ispline;\n    Pedge_t *barriers;\n    point p1, q1;\n\n    line = ED_path(e);\n    p = line.ps[0];\n    q = line.ps[line.pn - 1];\n    /* determine the polygons (if any) that contain the endpoints */\n    pp = qp = POLYID_NONE;\n    if (chkPts)\n\tfor (i = 0; i < npoly; i++) {\n\t    if ((pp == POLYID_NONE) && in_poly(*obs[i], p))\n\t\tpp = i;\n\t    if ((qp == POLYID_NONE) && in_poly(*obs[i], q))\n\t\tqp = i;\n\t}\n\n    make_barriers(obs, npoly, pp, qp, &barriers, &n_barriers);\n    slopes[0].x = slopes[0].y = 0.0;\n    slopes[1].x = slopes[1].y = 0.0;\n    Proutespline(barriers, n_barriers, line, slopes, &spline);\n\n    /* north why did you ever use int coords */\n    ispline = N_GNEW(spline.pn, point);\n    for (i = 0; i < spline.pn; i++) {\n\tispline[i].x = ROUND(spline.ps[i].x);\n\tispline[i].y = ROUND(spline.ps[i].y);\n    }\n    if (Verbose > 1)\n\tfprintf(stderr, \"spline %s %s\\n\", e->tail->name, e->head->name);\n    clip_and_install(e, e, ispline, spline.pn, &sinfo);\n    free(ispline);\n    free(barriers);\n    PF2P(p, p1);\n    PF2P(q, q1);\n    addEdgeLabels(e, p1, q1);\n}\n\n/* _spline_edges:\n * Basic default routine for creating edges.\n * If splines are requested, we construct the obstacles.\n * If not, or nodes overlap, the function reverts to line segments.\n * NOTE: intra-cluster edges are not constrained to\n * remain in the cluster's bounding box and, conversely, a cluster's box\n * is not altered to reflect intra-cluster edges.\n * If Nop > 1 and the spline exists, it is just copied.\n */\nstatic int _spline_edges(graph_t * g, double SEP, int splines)\n{\n    node_t *n;\n    edge_t *e;\n    Ppoly_t **obs;\n    Ppoly_t *obp;\n    int i = 0, npoly;\n    vconfig_t *vconfig;\n    path *P = NULL;\n\n    /* build configuration */\n    if (splines) {\n\tobs = N_NEW(agnnodes(g), Ppoly_t *);\n\tfor (n = agfstnode(g); n; n = agnxtnode(g, n)) {\n\t    obp = makeObstacle(n, SEP);\n\t    if (obp) {\n\t\tND_lim(n) = i; \n\t\tobs[i++] = obp;\n\t    }\n\t    else\n\t\tND_lim(n) = POLYID_NONE; \n\t}\n    } else {\n\tobs = 0;\n    }\n    npoly = i;\n    if (obs) {\n\tif (Plegal_arrangement(obs, npoly))\n\t    vconfig = Pobsopen(obs, npoly);\n\telse {\n\t    if (Verbose)\n\t\tfprintf(stderr,\n\t\t\t\"nodes touch - falling back to straight line edges\\n\");\n\t    vconfig = 0;\n\t}\n    } else\n\tvconfig = 0;\n\n    /* route edges  */\n    if (Verbose)\n\tfprintf(stderr, \"Creating edges using %s\\n\",\n\t\t(vconfig ? \"splines\" : \"line segments\"));\n    if (vconfig) {\n\t/* path-finding pass */\n\tfor (n = agfstnode(g); n; n = agnxtnode(g, n)) {\n\t    for (e = agfstout(g, n); e; e = agnxtout(g, e)) {\n\t\tED_path(e) = getPath(e, vconfig, TRUE, obs, npoly);\n\t    }\n\t}\n    }\n\n    /* spline-drawing pass */\n    for (n = agfstnode(g); n; n = agnxtnode(g, n)) {\n\tfor (e = agfstout(g, n); e; e = agnxtout(g, e)) {\n\t    node_t *head = e->head;\n\t    if ((Nop > 1) && ED_spl(e)) {\n\t\taddEdgeLabels(e,\n\t\t\t      add_points(ND_coord_i(n), ED_tail_port(e).p),\n\t\t\t      add_points(ND_coord_i(head),\n\t\t\t\t\t ED_head_port(e).p));\n\t    } else if (n == head) {    /* self arc */\n\t\tif (ED_count(e) == 0) continue;   /* only do representative */\n\t\tif (!P) {\n\t\t    P = NEW(path);\n\t\t    P->boxes = N_NEW(agnnodes(g) + 20 * 2 * 9, box);\n\t\t}\n\t\tmakeSelfArcs(P, e, GD_nodesep(g));\n\t    } else if (vconfig) {\n\t\tmakeSpline(e, obs, npoly, TRUE);\n\t    } else if (ED_count(e)) {\n\t\tmakeStraightEdge(g, e);\n\t    }\n\t}\n    }\n\n    if (P) {\n\tfree(P->boxes);\n\tfree(P);\n    }\n    return 0;\n}\n\n/* splineEdges:\n * Main wrapper code for generating edges.\n * Sets desired separation. \n * Coalesces equivalent edges (edges * with the same endpoints). \n * It then calls the edge generating function, and marks the\n * spline phase complete.\n * Returns 0 on success.\n *\n * The edge function is given the graph, the separation to be added\n * around obstacles, and the type of edge. (At present, this is a bool,\n * with 1 meaning splines and 0 meaning line segments.) It must guarantee \n * that all bounding boxes are current; in particular, the bounding box of \n * g must reflect the addition of the edges.\n */\nint\nsplineEdges(graph_t * g, int (*edgefn) (graph_t *, double, int),\n\t    int splines)\n{\n    node_t *n;\n    edge_t *e;\n    double SEP;\n    Dt_t *map;\n\n    /* This value should be independent of the sep value used to expand\n     * nodes during adjustment. If not, when the adjustment pass produces\n     * a fairly tight layout, the spline code will find that some nodes\n     * still overlap.\n     */\n    SEP = 1.01;\n\n    /* find equivalent edges */\n    map = dtopen(&edgeItemDisc, Dtoset);\n    for (n = agfstnode(g); n; n = agnxtnode(g, n)) {\n\tfor (e = agfstout(g, n); e; e = agnxtout(g, e)) {\n\t    edge_t *leader = equivEdge(map, e);\n\t    if (leader != e) {\n\t\tED_count(leader)++;\n\t\tED_to_virt(e) = ED_to_virt(leader);\n\t\tED_to_virt(leader) = e;\n\t    }\n\t}\n    }\n    dtclose(map);\n\n    if (edgefn(g, SEP, splines))\n\treturn 1;\n\n    State = GVSPLINES;\n    return 0;\n}\n\n/* spline_edges1:\n * Construct edges using default algorithm and given splines value.\n * Return 0 on success.\n */\nint spline_edges1(graph_t * g, int splines)\n{\n    return splineEdges(g, _spline_edges, splines);\n}\n\n/* spline_edges0:\n * Sets the graph's aspect ratio.\n * Check splines attribute and construct edges using default algorithm.\n * If the splines attribute is defined but equal to \"\", skip edge routing.\n * \n * Assumes u.bb for has been computed for g and all clusters\n * (not just top-level clusters), and  that GD_bb(g).LL is at the origin.\n *\n * This last criterion is, I believe, mainly to simplify the code\n * in neato_set_aspect. It would be good to remove this constraint,\n * as this would allow nodes pinned on input to have the same coordinates\n * when output in dot or plain format.\n *\n */\nvoid spline_edges0(graph_t * g)\n{\n    char* s = agget(g, \"splines\");\n\n    neato_set_aspect(g);\n    if (s && (*s == '\\0')) return; \n    spline_edges1(g, mapbool(s));\n}\n\n/* spline_edges:\n * Compute bounding box, translate graph to origin,\n * then construct all edges. We assume the graph\n * has no clusters, and only nodes have been\n * positioned.\n */\nvoid spline_edges(graph_t * g)\n{\n    node_t *n;\n    pointf offset;\n\n    compute_bb(g);\n    offset = cvt2ptf(GD_bb(g).LL);\n    for (n = agfstnode(g); n; n = agnxtnode(g, n)) {\n\tND_pos(n)[0] -= offset.x;\n\tND_pos(n)[1] -= offset.y;\n    }\n    GD_bb(g).UR.x -= GD_bb(g).LL.x;\n    GD_bb(g).UR.y -= GD_bb(g).LL.y;\n    GD_bb(g).LL.x = 0;\n    GD_bb(g).LL.y = 0;\n    spline_edges0(g);\n}\n\n/* scaleEdge:\n * Scale edge by given factor.\n * Assume ED_spl != NULL.\n */\nstatic void scaleEdge(edge_t * e, double xf, double yf)\n{\n    int i, j;\n    point *pt;\n    bezier *bez;\n\n    bez = ED_spl(e)->list;\n    for (i = 0; i < ED_spl(e)->size; i++) {\n\tpt = bez->list;\n\tfor (j = 0; j < bez->size; j++) {\n\t    pt->x *= xf;\n\t    pt->y *= yf;\n\t    pt++;\n\t}\n\tif (bez->sflag) {\n\t    bez->sp.x *= xf;\n\t    bez->sp.y *= yf;\n\t}\n\tif (bez->eflag) {\n\t    bez->ep.x *= xf;\n\t    bez->ep.y *= yf;\n\t}\n\tbez++;\n    }\n\n    if (ED_label(e) && ED_label(e)->set) {\n\tED_label(e)->p.x *= xf;\n\tED_label(e)->p.y *= yf;\n    }\n    if (ED_head_label(e) && ED_head_label(e)->set) {\n\tED_head_label(e)->p.x *= xf;\n\tED_head_label(e)->p.y *= yf;\n    }\n    if (ED_tail_label(e) && ED_tail_label(e)->set) {\n\tED_tail_label(e)->p.x *= xf;\n\tED_tail_label(e)->p.y *= yf;\n    }\n}\n\n/* scaleBB:\n * Scale bounding box of clusters of g by given factors.\n */\nstatic void scaleBB(graph_t * g, double xf, double yf)\n{\n    int i;\n\n    GD_bb(g).UR.x *= xf;\n    GD_bb(g).UR.y *= yf;\n    GD_bb(g).LL.x *= xf;\n    GD_bb(g).LL.y *= yf;\n\n    if (GD_label(g) && GD_label(g)->set) {\n\tGD_label(g)->p.x *= xf;\n\tGD_label(g)->p.y *= yf;\n    }\n\n    for (i = 1; i <= GD_n_cluster(g); i++)\n\tscaleBB(GD_clust(g)[i], xf, yf);\n}\n\n/* _neato_set_aspect;\n * Assume all bounding boxes are correct and\n * that GD_bb(g).LL is at origin.\n */\nstatic void _neato_set_aspect(graph_t * g)\n{\n    /* int          i; */\n    double xf, yf, actual, desired;\n    node_t *n;\n\n    /* compute_bb(g); */\n    if (GD_drawing(g)->ratio_kind) {\n\t/* normalize */\n\tassert(GD_bb(g).LL.x == 0);\n\tassert(GD_bb(g).LL.y == 0);\n\tif (GD_flip(g)) {\n\t    int t = GD_bb(g).UR.x;\n\t    GD_bb(g).UR.x = GD_bb(g).UR.y;\n\t    GD_bb(g).UR.y = t;\n\t}\n\tif (GD_drawing(g)->ratio_kind == R_FILL) {\n\t    /* fill is weird because both X and Y can stretch */\n\t    if (GD_drawing(g)->size.x <= 0)\n\t\treturn;\n\t    xf = (double) GD_drawing(g)->size.x / (double) GD_bb(g).UR.x;\n\t    yf = (double) GD_drawing(g)->size.y / (double) GD_bb(g).UR.y;\n\t    /* handle case where one or more dimensions is too big */\n\t    if ((xf < 1.0) || (yf < 1.0)) {\n\t\tif (xf < yf) {\n\t\t    yf = yf / xf;\n\t\t    xf = 1.0;\n\t\t} else {\n\t\t    xf = xf / yf;\n\t\t    yf = 1.0;\n\t\t}\n\t    }\n\t} else if (GD_drawing(g)->ratio_kind == R_EXPAND) {\n\t    if (GD_drawing(g)->size.x <= 0)\n\t\treturn;\n\t    xf = (double) GD_drawing(g)->size.x / (double) GD_bb(g).UR.x;\n\t    yf = (double) GD_drawing(g)->size.y / (double) GD_bb(g).UR.y;\n\t    if ((xf > 1.0) && (yf > 1.0)) {\n\t\tdouble scale = MIN(xf, yf);\n\t\txf = yf = scale;\n\t    } else\n\t\treturn;\n\t} else if (GD_drawing(g)->ratio_kind == R_VALUE) {\n\t    desired = GD_drawing(g)->ratio;\n\t    actual = ((double) GD_bb(g).UR.y) / ((double) GD_bb(g).UR.x);\n\t    if (actual < desired) {\n\t\tyf = desired / actual;\n\t\txf = 1.0;\n\t    } else {\n\t\txf = actual / desired;\n\t\tyf = 1.0;\n\t    }\n\t} else\n\t    return;\n\tif (GD_flip(g)) {\n\t    double t = xf;\n\t    xf = yf;\n\t    yf = t;\n\t}\n\n\t/* Not relying on neato_nlist here allows us not to have to \n\t * allocate it in the root graph and the connected components. \n\t */\n\tfor (n = agfstnode(g); n; n = agnxtnode(g, n)) {\n\t    ND_pos(n)[0] = ND_pos(n)[0] * xf;\n\t    ND_pos(n)[1] = ND_pos(n)[1] * yf;\n\t}\n\tscaleBB(g, xf, yf);\n\tif (Nop > 1) {\n\t    edge_t *e;\n\t    for (n = agfstnode(g); n; n = agnxtnode(g, n)) {\n\t\tfor (e = agfstout(g, n); e; e = agnxtout(g, e))\n\t\t    if (ED_spl(e))\n\t\t\tscaleEdge(e, xf, yf);\n\t    }\n\t}\n    }\n}\n\n/* neato_set_aspect:\n * Sets aspect ratio if necessary; real work done in _neato_set_aspect;\n * This also copies the internal layout coordinates (ND_pos) to the \n * external ones (ND_coord_i).\n */\nvoid neato_set_aspect(graph_t * g)\n{\n    node_t *n;\n\n    _neato_set_aspect(g);\n    for (n = agfstnode(g); n; n = agnxtnode(g, n)) {\n\tND_coord_i(n).x = POINTS(ND_pos(n)[0]);\n\tND_coord_i(n).y = POINTS(ND_pos(n)[1]);\n    }\n}\n\n"
  },
  {
    "path": "experimental/neatogen/opt_arrangement.c",
    "content": "/**********************************************************\n*      This software is part of the graphviz package      *\n*                http://www.graphviz.org/                 *\n*                                                         *\n*            Copyright (c) 1994-2004 AT&T Corp.           *\n*                and is licensed under the                *\n*            Common Public License, Version 1.0           *\n*                      by AT&T Corp.                      *\n*                                                         *\n*        Information and Software Systems Research        *\n*              AT&T Research, Florham Park NJ             *\n**********************************************************/\n\n#include \"digcola.h\"\n#ifdef DIGCOLA\n#include \"matrix_ops.h\"\n#include \"conjgrad.h\"\n\nstatic void\nconstruct_b(vtx_data* graph, int n, double *b) \n{\n\t/* construct a vector - b s.t. -b[i]=\\sum_j -w_{ij}*\\delta_{ij}\n\t * (the \"balance vector\")\n\t * Note that we build -b and not b, since our matrix is not the \n\t * real laplacian L, but its negation: -L. \n\t * So instead of solving Lx=b, we will solve -Lx=-b\n     */\n\tint i,j;\n\n\tdouble b_i = 0;\n\t\n\tfor (i=0; i<n; i++) {\n\t\tb_i = 0;\n\t\tif (graph[0].edists==NULL) {\n\t\t\tcontinue;\n\t\t}\n\t\tfor (j=1; j<graph[i].nedges; j++) { /* skip the self loop */\n\t\t\tb_i += graph[i].ewgts[j]*graph[i].edists[j];\n\t\t}\n\t\tb[i] = b_i;\n\t}\n}\n\n#define hierarchy_cg_tol 1e-3\n\nvoid \ncompute_y_coords(vtx_data* graph, int n, double* y_coords, int max_iterations)\n{\n\t/* Find y coords of a directed graph by solving L*x = b */\n\tint i,j;\t\n\tdouble* b = N_NEW(n, double);\n    double tol = hierarchy_cg_tol;\n\tint nedges = 0;\n\tfloat* uniform_weights;\n\tfloat* old_ewgts = graph[0].ewgts;\n\t\n\tconstruct_b(graph, n, b);\n\n\tinit_vec_orth1(n, y_coords);\n\n\tfor (i=0; i<n; i++) {\n\t\tnedges += graph[i].nedges;\n\t}\n\t\n\t/* replace original edge weights (which are lengths) with uniform weights */\n\t/* for computing the optimal arrangement */\n\tuniform_weights = N_GNEW(nedges,float);\n\tfor (i=0; i<n; i++) {\n\t\tgraph[i].ewgts = uniform_weights;\n\t\tuniform_weights[0] = (float)-(graph[i].nedges-1);\n\t\tfor (j=1; j<graph[i].nedges; j++) {\n\t\t\tuniform_weights[j] = 1;\n\t\t}\n\t\tuniform_weights += graph[i].nedges;\n\t}\n\t\n\tconjugate_gradient(graph, y_coords, b, n, tol, max_iterations);\n\n\t/* restore original edge weights */\n\tfree (graph[0].ewgts);\t\n\tfor (i=0; i<n; i++) {\n\t\tgraph[i].ewgts = old_ewgts;\n\t\told_ewgts += graph[i].nedges;\n\t}\n\n\tfree(b);\n}\n\n#endif /* DIGCOLA */\n\n"
  },
  {
    "path": "experimental/neatogen/pca.c",
    "content": "/* $Id: pca.c,v 1.1.1.1 2004/12/23 04:05:15 ellson Exp $ $Revision: 1.1.1.1 $ */\n/* vim:set shiftwidth=4 ts=8: */\n\n/**********************************************************\n*      This software is part of the graphviz package      *\n*                http://www.graphviz.org/                 *\n*                                                         *\n*            Copyright (c) 1994-2004 AT&T Corp.           *\n*                and is licensed under the                *\n*            Common Public License, Version 1.0           *\n*                      by AT&T Corp.                      *\n*                                                         *\n*        Information and Software Systems Research        *\n*              AT&T Research, Florham Park NJ             *\n**********************************************************/\n\n\n#include \"matrix_ops.h\"\n#include \"pca.h\"\n#include \"closest.h\"\n#include <stdio.h>\n#include <stdlib.h>\n#include <math.h>\n\nstatic int num_pairs = 4;\n\nvoid\nPCA_alloc(DistType ** coords, int dim, int n, double **new_coords,\n\t  int new_dim)\n{\n    double **DD = NULL;\t\t/* dim*dim matrix: coords*coords^T */\n    double sum;\n    int i, j, k;\n    double **eigs = NULL;\n    double *evals = NULL;\n    double *storage_ptr;\n\n    eigs = N_GNEW(new_dim, double *);\n    for (i = 0; i < new_dim; i++)\n\teigs[i] = N_GNEW(dim, double);\n    evals = N_GNEW(new_dim, double);\n\n    DD = N_GNEW(dim, double *);\n    storage_ptr = N_GNEW(dim * dim, double);\n    for (i = 0; i < dim; i++) {\n\tDD[i] = storage_ptr;\n\tstorage_ptr += dim;\n    }\n\n    for (i = 0; i < dim; i++) {\n\tfor (j = 0; j <= i; j++) {\n\t    /* compute coords[i]*coords[j] */\n\t    sum = 0;\n\t    for (k = 0; k < n; k++) {\n\t\tsum += coords[i][k] * coords[j][k];\n\t    }\n\t    DD[i][j] = DD[j][i] = sum;\n\t}\n    }\n\n    power_iteration(DD, dim, new_dim, eigs, evals, true);\n\n    for (j = 0; j < new_dim; j++) {\n\tfor (i = 0; i < n; i++) {\n\t    sum = 0;\n\t    for (k = 0; k < dim; k++) {\n\t\tsum += coords[k][i] * eigs[j][k];\n\t    }\n\t    new_coords[j][i] = sum;\n\t}\n    }\n\n    for (i = 0; i < new_dim; i++)\n\tfree(eigs[i]);\n    free(eigs);\n    free(evals);\n    free(DD[0]);\n    free(DD);\n}\n\nbool\niterativePCA_1D(double **coords, int dim, int n, double *new_direction)\n{\n    vtx_data *laplacian;\n    float **mat1 = NULL;\n    double **mat = NULL;\n    double eval;\n\n    /* Given that first projection of 'coords' is 'coords[0]'\n       compute another projection direction 'new_direction'\n       that scatters points that are close in 'coords[0]'\n     */\n\n    /* find the nodes that were close in 'coords[0]' */\n    /* and construct appropriate Laplacian */\n    closest_pairs2graph(coords[0], n, num_pairs * n, &laplacian);\n\n    /* Compute coords*Lap*coords^T */\n    mult_sparse_dense_mat_transpose(laplacian, coords, n, dim, &mat1);\n    mult_dense_mat_d(coords, mat1, dim, n, dim, &mat);\n    free(mat1[0]);\n    free(mat1);\n\n    /* Compute direction */\n    return power_iteration(mat, dim, 1, &new_direction, &eval, true);\n/* ?? When is mat freed? */\n}\n\n#ifdef UNUSED\n\ndouble dist(double **coords, int dim, int p1, int p2)\n{\n    int i;\n    double sum = 0;\n\n    for (i = 0; i < dim; i++) {\n\tsum +=\n\t    (coords[i][p1] - coords[i][p2]) * (coords[i][p1] -\n\t\t\t\t\t       coords[i][p2]);\n    }\n    return sqrt(sum);\n}\n\n\nvoid weight_laplacian(double **X, int n, int dim, vtx_data * laplacian)\n{\n    int i, j, neighbor;\n\n    int *edges;\n    float *ewgts;\n    for (i = 0; i < n; i++) {\n\tedges = laplacian[i].edges;\n\tewgts = laplacian[i].ewgts;\n\t*ewgts = 0;\n\tfor (j = 1; j < laplacian[i].nedges; j++) {\n\t    neighbor = edges[j];\n\t    *ewgts -= ewgts[j] =\n\t\tfloat (-1.0 / (dist(X, dim, i, neighbor) + 1e-10));\n\t}\n    }\n}\n\n#endif\n"
  },
  {
    "path": "experimental/neatogen/pca.h",
    "content": "/* $Id: pca.h,v 1.1.1.1 2004/12/23 04:05:15 ellson Exp $ $Revision: 1.1.1.1 $ */\n/* vim:set shiftwidth=4 ts=8: */\n\n/**********************************************************\n*      This software is part of the graphviz package      *\n*                http://www.graphviz.org/                 *\n*                                                         *\n*            Copyright (c) 1994-2004 AT&T Corp.           *\n*                and is licensed under the                *\n*            Common Public License, Version 1.0           *\n*                      by AT&T Corp.                      *\n*                                                         *\n*        Information and Software Systems Research        *\n*              AT&T Research, Florham Park NJ             *\n**********************************************************/\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n\n\n#ifndef PCA_H\n#define PCA_H\n\n#include \"defs.h\"\n\n    extern void PCA_alloc(DistType **, int, int, double **, int);\n    extern bool iterativePCA_1D(double **, int, int, double *);\n\n#endif\n\n#ifdef __cplusplus\n}\n#endif\n"
  },
  {
    "path": "experimental/neatogen/poly.c",
    "content": "/* $Id: poly.c,v 1.1.1.1 2004/12/23 04:05:16 ellson Exp $ $Revision: 1.1.1.1 $ */\n/* vim:set shiftwidth=4 ts=8: */\n\n/**********************************************************\n*      This software is part of the graphviz package      *\n*                http://www.graphviz.org/                 *\n*                                                         *\n*            Copyright (c) 1994-2004 AT&T Corp.           *\n*                and is licensed under the                *\n*            Common Public License, Version 1.0           *\n*                      by AT&T Corp.                      *\n*                                                         *\n*        Information and Software Systems Research        *\n*              AT&T Research, Florham Park NJ             *\n**********************************************************/\n\n/* poly.c\n */\n\n#include \"neato.h\"\n#include <assert.h>\n#include <string.h>\n#include <math.h>\n#include \"poly.h\"\n#include \"mem.h\"\n\n\n#define BOX 1\n#define ISBOX(p) ((p)->kind & BOX)\n#define CIRCLE 2\n#define ISCIRCLE(p) ((p)->kind & CIRCLE)\n\nstatic int maxcnt = 0;\nstatic Point *tp1 = NULL;\nstatic Point *tp2 = NULL;\nstatic Point *tp3 = NULL;\n\nvoid polyFree()\n{\n    maxcnt = 0;\n    free(tp1);\n    free(tp2);\n    free(tp3);\n    tp1 = NULL;\n    tp2 = NULL;\n    tp3 = NULL;\n}\n\nvoid breakPoly(Poly * pp)\n{\n    free(pp->verts);\n}\n\nstatic void bbox(Point * verts, int cnt, Point * o, Point * c)\n{\n    double xmin, ymin, xmax, ymax;\n    int i;\n\n    xmin = xmax = verts->x;\n    ymin = ymax = verts->y;\n    for (i = 1; i < cnt; i++) {\n\tverts++;\n\tif (verts->x < xmin)\n\t    xmin = verts->x;\n\tif (verts->y < ymin)\n\t    ymin = verts->y;\n\tif (verts->x > xmax)\n\t    xmax = verts->x;\n\tif (verts->y > ymax)\n\t    ymax = verts->y;\n    }\n    o->x = xmin;\n    o->y = ymin;\n    c->x = xmax;\n    c->y = ymax;\n}\n\n#ifdef OLD\nstatic void inflate(Point * prev, Point * cur, Point * next, double margin)\n{\n    double theta = atan2(prev->y - cur->y, prev->x - cur->x);\n    double phi = atan2(next->y - cur->y, next->x - cur->x);\n    double beta = (theta + phi) / 2.0;\n    double gamma = (PI + phi - theta) / 2.0;\n    double denom;\n\n    denom = cos(gamma);\n    cur->x -= margin * (cos(beta)) / denom;\n    cur->y -= margin * (sin(beta)) / denom;\n}\n\nstatic void inflatePts(Point * verts, int cnt, double margin)\n{\n    int i;\n    Point first;\n    Point savepoint;\n    Point prevpoint;\n    Point *prev = &prevpoint;\n    Point *cur;\n    Point *next;\n\n    first = verts[0];\n    prevpoint = verts[cnt - 1];\n    cur = &verts[0];\n    next = &verts[1];\n    for (i = 0; i < cnt - 1; i++) {\n\tsavepoint = *cur;\n\tinflate(prev, cur, next, margin);\n\tcur++;\n\tnext++;\n\tprevpoint = savepoint;\n    }\n\n    next = &first;\n    inflate(prev, cur, next, margin);\n}\n#else\nstatic void inflatePts(Point * verts, int cnt, double margin)\n{\n    int i;\n    Point *cur;\n\n    cur = &verts[0];\n    for (i = 0; i < cnt; i++) {\n\tcur->x *= margin;\n\tcur->y *= margin;\n\tcur++;\n    }\n}\n#endif\n\nstatic int isBox(Point * verts, int cnt)\n{\n    if (cnt != 4)\n\treturn 0;\n\n    if (verts[0].y == verts[1].y)\n\treturn ((verts[2].y == verts[3].y) &&\n\t\t(verts[0].x == verts[3].x) && (verts[1].x == verts[2].x));\n    else\n\treturn ((verts[0].x == verts[1].x) &&\n\t\t(verts[2].x == verts[3].x) &&\n\t\t(verts[0].y == verts[3].y) && (verts[1].y == verts[2].y));\n}\n\n#define DFLT_SAMPLE 20\n\nstatic Point makeScaledPoint(int x, int y)\n{\n    Point rv;\n    rv.x = PS2INCH(x);\n    rv.y = PS2INCH(y);\n    return rv;\n}\n\nstatic Point *genRound(Agnode_t * n, int *sidep)\n{\n    int sides = 0;\n    Point *verts;\n    char *p = agget(n, \"samplepoints\");\n    int i;\n\n    if (p)\n\tsides = atoi(p);\n    if (sides < 3)\n\tsides = DFLT_SAMPLE;\n    verts = N_GNEW(sides, Point);\n    for (i = 0; i < sides; i++) {\n\tverts[i].x =\n\t    ND_width(n) / 2.0 * cos(i / (double) sides * PI * 2.0);\n\tverts[i].y =\n\t    ND_height(n) / 2.0 * sin(i / (double) sides * PI * 2.0);\n    }\n    *sidep = sides;\n    return verts;\n}\n\n#define PUTPT(P,X,Y) ((P).x=(X),(P).y=(Y))\n\nvoid makePoly(Poly * pp, Agnode_t * n, double margin)\n{\n    int i;\n    int sides;\n    Point *verts;\n    polygon_t *poly;\n    box b;\n\n    if (ND_clust(n)) {\n\tPoint b;\n\tsides = 4;\n\tb.x = ND_width(n) / 2.0;\n\tb.y = ND_height(n) / 2.0;\n\tpp->kind = BOX;\n\tverts = N_GNEW(sides, Point);\n\tPUTPT(verts[0], b.x, b.y);\n\tPUTPT(verts[1], -b.x, b.y);\n\tPUTPT(verts[2], -b.x, -b.y);\n\tPUTPT(verts[3], b.x, -b.y);\n    } else\n\tswitch (shapeOf(n)) {\n\tcase SH_POLY:\n\t    poly = (polygon_t *) ND_shape_info(n);\n\t    sides = poly->sides;\n\t    if (sides >= 3) {\t/* real polygon */\n\t\tverts = N_GNEW(sides, Point);\n\t\tfor (i = 0; i < sides; i++) {\n\t\t    verts[i].x = PS2INCH(poly->vertices[i].x);\n\t\t    verts[i].y = PS2INCH(poly->vertices[i].y);\n\t\t}\n\t    } else\n\t\tverts = genRound(n, &sides);\n\n\t    if (streq(ND_shape(n)->name, \"box\"))\n\t\tpp->kind = BOX;\n\t    else if (streq(ND_shape(n)->name, \"polygon\")\n\t\t     && isBox(verts, sides))\n\t\tpp->kind = BOX;\n\t    else if ((poly->sides < 3) && poly->regular)\n\t\tpp->kind = CIRCLE;\n\t    else\n\t\tpp->kind = 0;\n\n\t    break;\n\tcase SH_RECORD:\n\t    sides = 4;\n\t    verts = N_GNEW(sides, Point);\n\t    b = ((field_t *) ND_shape_info(n))->b;\n\t    verts[0] = makeScaledPoint(b.LL.x, b.LL.y);\n\t    verts[1] = makeScaledPoint(b.UR.x, b.LL.y);\n\t    verts[2] = makeScaledPoint(b.UR.x, b.UR.y);\n\t    verts[3] = makeScaledPoint(b.LL.x, b.UR.y);\n\t    pp->kind = BOX;\n\t    break;\n\tcase SH_POINT:\n\t    pp->kind = CIRCLE;\n\t    verts = genRound(n, &sides);\n\t    break;\n\tdefault:\n\t    agerr(AGERR, \"makePoly: unknown shape type %s\\n\",\n\t\t  ND_shape(n)->name);\n\t    exit(1);\n\t}\n\n#ifdef OLD\n    if (margin != 0.0)\n\tinflatePts(verts, sides, margin);\n#else\n    if (margin != 1.0)\n\tinflatePts(verts, sides, margin);\n#endif\n\n    pp->verts = verts;\n    pp->nverts = sides;\n    bbox(verts, sides, &pp->origin, &pp->corner);\n\n    if (sides > maxcnt)\n\tmaxcnt = sides;\n}\n\nstatic int\npintersect(Point originp, Point cornerp, Point originq, Point cornerq)\n{\n    return ((originp.x <= cornerq.x) && (originq.x <= cornerp.x) &&\n\t    (originp.y <= cornerq.y) && (originq.y <= cornerp.y));\n}\n\n#define Pin 1\n#define Qin 2\n#define Unknown 0\n\n#define advance(A,B,N) (B++, A = (A+1)%N)\n\nstatic int edgesIntersect(Point * P, Point * Q, int n, int m)\n{\n    int a = 0;\n    int b = 0;\n    int aa = 0;\n    int ba = 0;\n    int a1, b1;\n    Point A, B;\n    double cross;\n    int bHA, aHB;\n    Point p;\n    int inflag = Unknown;\n    /* int      i = 0; */\n    /* int      Reset = 0; */\n\n    do {\n\ta1 = (a + n - 1) % n;\n\tb1 = (b + m - 1) % m;\n\n\tsubPt(&A, P[a], P[a1]);\n\tsubPt(&B, Q[b], Q[b1]);\n\n\tcross = area_2(origin, A, B);\n\tbHA = leftOf(P[a1], P[a], Q[b]);\n\taHB = leftOf(Q[b1], Q[b], P[a]);\n\n\t/* If A & B intersect, update inflag. */\n\tif (intersection(P[a1], P[a], Q[b1], Q[b], &p))\n\t    return 1;\n\n\t/* Advance rules. */\n\tif ((cross == 0) && !bHA && !aHB) {\n\t    if (inflag == Pin)\n\t\tadvance(b, ba, m);\n\t    else\n\t\tadvance(a, aa, n);\n\t} else if (cross >= 0)\n\t    if (bHA)\n\t\tadvance(a, aa, n);\n\t    else {\n\t\tadvance(b, ba, m);\n\t} else {\t\t/* if ( cross < 0 ) */\n\n\t    if (aHB)\n\t\tadvance(b, ba, m);\n\t    else\n\t\tadvance(a, aa, n);\n\t}\n\n    } while (((aa < n) || (ba < m)) && (aa < 2 * n) && (ba < 2 * m));\n\n    return 0;\n\n}\n\nstatic int inPoly(Point vertex[], int n, Point q)\n{\n    int i, i1;\t\t\t/* point index; i1 = i-1 mod n */\n    double x;\t\t\t/* x intersection of e with ray */\n    double crossings = 0;\t/* number of edge/ray crossings */\n\n    if (tp3 == NULL)\n\ttp3 = N_GNEW(maxcnt, Point);\n\n    /* Shift so that q is the origin. */\n    for (i = 0; i < n; i++) {\n\ttp3[i].x = vertex[i].x - q.x;\n\ttp3[i].y = vertex[i].y - q.y;\n    }\n\n    /* For each edge e=(i-1,i), see if crosses ray. */\n    for (i = 0; i < n; i++) {\n\ti1 = (i + n - 1) % n;\n\n\t/* if edge is horizontal, test to see if the point is on it */\n\tif ((tp3[i].y == 0) && (tp3[i1].y == 0)) {\n\t    if ((tp3[i].x * tp3[i1].x) < 0) {\n\t\treturn 1;\n\t    } else {\n\t\tcontinue;\n\t    }\n\t}\n\n\t/* if e straddles the x-axis... */\n\tif (((tp3[i].y >= 0) && (tp3[i1].y <= 0)) ||\n\t    ((tp3[i1].y >= 0) && (tp3[i].y <= 0))) {\n\t    /* e straddles ray, so compute intersection with ray. */\n\t    x = (tp3[i].x * tp3[i1].y - tp3[i1].x * tp3[i].y)\n\t\t/ (double) (tp3[i1].y - tp3[i].y);\n\n\t    /* if intersect at origin, we've found intersection */\n\t    if (x == 0)\n\t\treturn 1;;\n\n\t    /* crosses ray if strictly positive intersection. */\n\t    if (x > 0) {\n\t\tif ((tp3[i].y == 0) || (tp3[i1].y == 0)) {\n\t\t    crossings += .5;\t/* goes thru vertex */\n\t\t} else {\n\t\t    crossings += 1.0;\n\t\t}\n\t    }\n\t}\n    }\n\n    /* q inside if an odd number of crossings. */\n    if ((((int) crossings) % 2) == 1)\n\treturn 1;\n    else\n\treturn 0;\n}\n\nstatic int inBox(Point p, Point origin, Point corner)\n{\n    return ((p.x <= corner.x) &&\n\t    (p.x >= origin.x) && (p.y <= corner.y) && (p.y >= origin.y));\n\n}\n\nstatic void transCopy(Point * inp, int cnt, Point off, Point * outp)\n{\n    int i;\n\n    for (i = 0; i < cnt; i++) {\n\toutp->x = inp->x + off.x;\n\toutp->y = inp->y + off.y;\n\tinp++;\n\toutp++;\n    }\n}\n\nint polyOverlap(Point p, Poly * pp, Point q, Poly * qp)\n{\n    Point op, cp;\n    Point oq, cq;\n\n    /* translate bounding boxes */\n    addPt(&op, p, pp->origin);\n    addPt(&cp, p, pp->corner);\n    addPt(&oq, q, qp->origin);\n    addPt(&cq, q, qp->corner);\n\n    /* If bounding boxes don't overlap, done */\n    if (!pintersect(op, cp, oq, cq))\n\treturn 0;\n\n    if (ISBOX(pp) && ISBOX(qp))\n\treturn 1;\n    if (ISCIRCLE(pp) && ISCIRCLE(qp)) {\n\tdouble d =\n\t    (pp->corner.x - pp->origin.x + qp->corner.x - qp->origin.x);\n\tdouble dx = p.x - q.x;\n\tdouble dy = p.y - q.y;\n\tif ((dx * dx + dy * dy) > (d * d) / 4.0)\n\t    return 0;\n\telse\n\t    return 1;\n    }\n\n    if (tp1 == NULL) {\n\ttp1 = N_GNEW(maxcnt, Point);\n\ttp2 = N_GNEW(maxcnt, Point);\n    }\n\n    transCopy(pp->verts, pp->nverts, p, tp1);\n    transCopy(qp->verts, qp->nverts, q, tp2);\n    return (edgesIntersect(tp1, tp2, pp->nverts, qp->nverts) ||\n\t    (inBox(*tp1, oq, cq) && inPoly(tp2, qp->nverts, *tp1)) ||\n\t    (inBox(*tp2, op, cp) && inPoly(tp1, pp->nverts, *tp2)));\n}\n"
  },
  {
    "path": "experimental/neatogen/poly.h",
    "content": "/* $Id: poly.h,v 1.2 2005/02/24 00:57:33 ellson Exp $ $Revision: 1.2 $ */\n/* vim:set shiftwidth=4 ts=8: */\n\n/**********************************************************\n*      This software is part of the graphviz package      *\n*                http://www.graphviz.org/                 *\n*                                                         *\n*            Copyright (c) 1994-2004 AT&T Corp.           *\n*                and is licensed under the                *\n*            Common Public License, Version 1.0           *\n*                      by AT&T Corp.                      *\n*                                                         *\n*        Information and Software Systems Research        *\n*              AT&T Research, Florham Park NJ             *\n**********************************************************/\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n\n\n#ifndef POLY_H\n#define POLY_H\n\n#include \"geometry.h\"\n\n    typedef struct {\n\tPoint origin;\n\tPoint corner;\n\tint nverts;\n\tPoint *verts;\n\tint kind;\n    } Poly;\n\n    extern void polyFree(void);\n    extern int polyOverlap(Point, Poly *, Point, Poly *);\n    extern void makePoly(Poly *, Agnode_t *, double);\n    extern void breakPoly(Poly *);\n\n#endif\n\n#ifdef __cplusplus\n}\n#endif\n"
  },
  {
    "path": "experimental/neatogen/printvis.c",
    "content": "/* $Id: printvis.c,v 1.1.1.1 2004/12/23 04:05:16 ellson Exp $ $Revision: 1.1.1.1 $ */\n/* vim:set shiftwidth=4 ts=8: */\n\n/**********************************************************\n*      This software is part of the graphviz package      *\n*                http://www.graphviz.org/                 *\n*                                                         *\n*            Copyright (c) 1994-2004 AT&T Corp.           *\n*                and is licensed under the                *\n*            Common Public License, Version 1.0           *\n*                      by AT&T Corp.                      *\n*                                                         *\n*        Information and Software Systems Research        *\n*              AT&T Research, Florham Park NJ             *\n**********************************************************/\n\n#include <stdio.h>\n#include <vis.h>\ntypedef Ppoint_t point;\n\n\nvoid printvis(vconfig_t * cp)\n{\n    int i, j;\n    int *next, *prev;\n    point *pts;\n    array2 arr;\n\n    next = cp->next;\n    prev = cp->prev;\n    pts = cp->P;\n    arr = cp->vis;\n\n    printf(\"this next prev point\\n\");\n    for (i = 0; i < cp->N; i++)\n\tprintf(\"%3d  %3d  %3d    (%f,%f)\\n\", i, next[i], prev[i],\n\t       (double) pts[i].x, (double) pts[i].y);\n\n    printf(\"\\n\\n\");\n\n    for (i = 0; i < cp->N; i++) {\n\tfor (j = 0; j < cp->N; j++)\n\t    printf(\"%4.1f \", arr[i][j]);\n\tprintf(\"\\n\");\n    }\n}\n"
  },
  {
    "path": "experimental/neatogen/quad_prog_solve.c",
    "content": "/**********************************************************\n*      This software is part of the graphviz package      *\n*                http://www.graphviz.org/                 *\n*                                                         *\n*            Copyright (c) 1994-2004 AT&T Corp.           *\n*                and is licensed under the                *\n*            Common Public License, Version 1.0           *\n*                      by AT&T Corp.                      *\n*                                                         *\n*        Information and Software Systems Research        *\n*              AT&T Research, Florham Park NJ             *\n**********************************************************/\n\n#include \"digcola.h\"\n#ifdef DIGCOLA\n#include <math.h>\n#include <stdlib.h>\n#include <time.h>\n#include <stdio.h>\n#include <float.h>\n#include <assert.h>\n#include \"matrix_ops.h\"\n#include \"kkutils.h\"\n#include \"quad_prog_solver.h\"\n\n#define quad_prog_tol 1e-2\n\nfloat**\nunpackMatrix(float * packedMat, int n)\n{\n    float **mat;\n\tint i,j,k;\n\n\tmat = N_GNEW(n, float*);\n\tmat[0] = N_GNEW(n*n, float);\n\tset_vector_valf(n*n, 0, mat[0]);\n\tfor (i=1; i<n; i++) {\n\t\tmat[i] = mat[0]+i*n;\n\t}\n\n\tfor (i=0,k=0; i<n; i++) {\n\t\tfor (j=i; j<n; j++,k++) {\n\t\t\tmat[j][i]=mat[i][j]=packedMat[k];\n\t\t}\n\t}\n    return mat;\n}\n\nstatic void\nensureMonotonicOrdering(float * place, int n, int * ordering) \n{\n\t/* ensure that 'ordering' is monotonically increasing by 'place',  */\n\t/* this also implies that levels are separated in the initial layout */\n\tint i, node;\n\tfloat lower_bound = place[ordering[0]];\n\tfor (i=1; i<n; i++) {\t\t\n\t\tnode = ordering[i];\n\t\tif (place[node]<lower_bound) {\n\t\t\tplace[node]=lower_bound;\n\t\t}\n\t\tlower_bound = place[node];\n\t}\n}\n\t\t\t\nstatic void\nensureMonotonicOrderingWithGaps(float* place, int n, int* ordering, \n                                int* levels, int num_levels, float levels_gap)\n{\n\t/* ensure that levels are separated in the initial layout and that \n     * places are monotonic increasing within layer\n     */\n\t\n\tint i;\n\tint node, level, max_in_level;\n\tfloat lower_bound = (float)-1e9;\n\n\tlevel = -1; max_in_level=0;\t\t\n\tfor (i=0; i<n; i++) {\n\t\tif (i>=max_in_level) {\n\t\t\t/* we are entering a new level */\n\t\t\tlevel++;\n\t\t\tif (level==num_levels) {\n\t\t\t\t/* last_level */\n\t\t\t\tmax_in_level=n;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tmax_in_level = levels[level];\n\t\t\t}\n\t\t\tlower_bound = i>0 ? place[ordering[i-1]]+levels_gap : (float)-1e9;\n\t\t\tquicksort_placef(place, ordering, i, max_in_level-1); \n\t\t}\n\n\t\tnode = ordering[i];\n\t\tif (place[node]<lower_bound) {\n\t\t\tplace[node]=lower_bound;\n\t\t}\n\t}\n}\n\nstatic void\ncomputeHierarchyBoundaries(float* place, int n, int* ordering, int* levels, \n                           int num_levels, float* hierarchy_boundaries)\n{\n\tint i;\n\tfor (i=0; i<num_levels; i++) {\n\t\thierarchy_boundaries[i] = place[ordering[levels[i]-1]];\n\t}\n}\n\n\nint \nconstrained_majorization_new(CMajEnv *e, float * b, float **coords, \n                             int cur_axis, int dims, int max_iterations, \n                             float* hierarchy_boundaries, float levels_gap) \n{\n\tint n=e->n;\n\tfloat *place=coords[cur_axis];\n\tfloat **lap=e->A;\n\tint * ordering=e->ordering;\n\tint * levels=e->levels;\n\tint num_levels=e->num_levels; \n\tint i,j;\n\tfloat new_place_i;\n\tbool converged=false;\n\tfloat upper_bound, lower_bound;\n\tint node;\n\tint left, right;\n\tfloat cur_place;\n\tfloat des_place_block;\n\tfloat block_deg;\n\tfloat toBlockConnectivity;\n\tfloat * lap_node;\n\tint block_len;\n\tint first_next_level;\n\tint level=-1, max_in_level=0;\t\n\tfloat* desired_place;\n\tfloat* prefix_desired_place;\n\tfloat* suffix_desired_place;\n\tint* block;\n\tint* lev;\n    int counter;\n\n\tif (max_iterations<=0) {\n\t\treturn 0;\n\t}\n\tif (levels_gap!=0) {\n\t\treturn constrained_majorization_new_with_gaps(e, b, coords,cur_axis,dims, max_iterations, hierarchy_boundaries, levels_gap);\n\t}\n\n\t/* ensureMonotonicOrderingWithGaps(place, n, ordering, levels, num_levels);  */\n\tensureMonotonicOrdering(place, n, ordering); \n\t/* it is important that in 'ordering' nodes are always sorted by layers, \n     * and within a layer by 'place'\n     */\n\t\n    /* the desired place of each individual node in the current block */\n\tdesired_place = e->fArray1;\n    /* the desired place of each prefix of current block */\n\tprefix_desired_place = e->fArray2;\n    /* the desired place of each suffix of current block */\n\tsuffix_desired_place = e->fArray3;\n    /* current block (nodes connected by active constraints) */\n\tblock = e->iArray1;\n\n\tlev = e->iArray2; /* level of each node */\n\tfor (i=0; i<n; i++) {\n\t\tif (i>=max_in_level) {\n\t\t\t/* we are entering a new level */\n\t\t\tlevel++;\n\t\t\tif (level==num_levels) {\n\t\t\t\t/* last_level */\n\t\t\t\tmax_in_level=n;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tmax_in_level = levels[level];\n\t\t\t}\t\t\n\t\t}\n\t\tnode = ordering[i];\n\t\tlev[node]=level;\t\n\t}\n\n\tfor (counter=0; counter<max_iterations&&!converged; counter++) {\n\t\tconverged=true;\n\t\tlower_bound = -1e9; /* no lower bound for first level */\n\t\tfor (left=0; left<n; left=right) {\n\t\t\tint best_i;\n\t\t\tdouble max_movement;\n\t\t\tdouble movement;\n\t\t\tfloat prefix_des_place, suffix_des_place;\n\t\t\t/* compute a block 'ordering[left]...ordering[right-1]' of \n             * nodes with the same coordinate:\n             */\n\t\t\tcur_place = place[ordering[left]];\t\t\t\n\t\t\tfor (right=left+1; right<n; right++) {\n\t\t\t\tif (place[ordering[right]]!=cur_place) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t/* compute desired place of nodes in block: */\n\t\t\tfor (i=left; i<right; i++) {\n\t\t\t\tnode = ordering[i];\n\t\t\t\tnew_place_i = -b[node];\n\t\t\t\tlap_node = lap[node];\n\t\t\t\tfor (j=0; j<n; j++) {\n\t\t\t\t\tif (j==node) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tnew_place_i\t+= lap_node[j]*place[j];\n\t\t\t\t}\n\t\t\t\tdesired_place[node] = new_place_i/(-lap_node[node]);\n\t\t\t}\n\n\t\t\t/* reorder block by levels, and within levels by \"relaxed\" desired position */\n\t\t\tblock_len = 0;\n\t\t\tfirst_next_level=0;\n\t\t\tfor (i=left; i<right; i=first_next_level) {\n\t\t\t\tlevel = lev[ordering[i]];\n\t\t\t\tif (level==num_levels) {\n\t\t\t\t\t/* last_level */\n\t\t\t\t\tfirst_next_level=right;\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tfirst_next_level = MIN(right,levels[level]);\n\t\t\t\t}\n\n\t\t\t\t/* First, collect all nodes with desired places smaller than current place */\n\t\t\t\tfor (j=i; j<first_next_level; j++) {\n\t\t\t\t\tnode = ordering[j];\n\t\t\t\t\tif (desired_place[node] < cur_place) {\n\t\t\t\t\t\tblock[block_len++] = node;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t/* Second, collect all nodes with desired places equal to current place */\n\t\t\t\tfor (j=i; j<first_next_level; j++) {\n\t\t\t\t\tnode = ordering[j];\n\t\t\t\t\tif (desired_place[node] == cur_place) {\n\t\t\t\t\t\tblock[block_len++] = node;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t/* Third, collect all nodes with desired places greater than current place */\n\t\t\t\tfor (j=i; j<first_next_level; j++) {\n\t\t\t\t\tnode = ordering[j];\n\t\t\t\t\tif (desired_place[node] > cur_place) {\n\t\t\t\t\t\tblock[block_len++] = node;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\t/* loop through block and compute desired places of its prefixes */\n\t\t\tdes_place_block = 0;\n\t\t\tblock_deg = 0;\n\t\t\tfor (i=0; i<block_len; i++) {\n\t\t\t\tnode = block[i];\n\t\t\t\ttoBlockConnectivity = 0;\n\t\t\t\tlap_node = lap[node];\n\t\t\t\tfor (j=0; j<i; j++) {\n\t\t\t\t\ttoBlockConnectivity -= lap_node[block[j]];\n\t\t\t\t}\t\t\t\t\n\t\t\t\ttoBlockConnectivity*=2;\n\t\t\t\t/* update block stats */\n\t\t\t\tdes_place_block = (block_deg*des_place_block+(-lap_node[node])*desired_place[node]+toBlockConnectivity*cur_place)/(block_deg-lap_node[node]+toBlockConnectivity);\n\t\t\t\tprefix_desired_place[i] = des_place_block;\n\t\t\t\tblock_deg += toBlockConnectivity-lap_node[node];\t\t\t\t\n\t\t\t}\n\n\t\t\t/* loop through block and compute desired places of its suffixes */\n\t\t\tdes_place_block = 0;\n\t\t\tblock_deg = 0;\n\t\t\tfor (i=block_len-1; i>=0; i--) {\n\t\t\t\tnode = block[i];\n\t\t\t\ttoBlockConnectivity = 0;\n\t\t\t\tlap_node = lap[node];\n\t\t\t\tfor (j=i+1; j<block_len; j++) {\n\t\t\t\t\ttoBlockConnectivity -= lap_node[block[j]];\n\t\t\t\t}\n\t\t\t\ttoBlockConnectivity*=2;\n\t\t\t\t/* update block stats */\n\t\t\t\tdes_place_block = (block_deg*des_place_block+(-lap_node[node])*desired_place[node]+toBlockConnectivity*cur_place)/(block_deg-lap_node[node]+toBlockConnectivity);\n\t\t\t\tsuffix_desired_place[i] = des_place_block;\n\t\t\t\tblock_deg += toBlockConnectivity-lap_node[node];\t\t\t\t\n\t\t\t}\n\n\t\t\n\t\t\t/* now, find best place to split block */\n\t\t\tbest_i = -1;\n\t\t\tmax_movement = 0;\n\t\t\tfor (i=0; i<block_len; i++) {\n\t\t\t\tsuffix_des_place = suffix_desired_place[i];\n\t\t\t\tprefix_des_place = i>0 ? prefix_desired_place[i-1] : suffix_des_place;\n\t\t\t\t/* limit moves to ensure that the prefix is placed before the suffix */\n\t\t\t\tif (suffix_des_place<prefix_des_place) {\n\t\t\t\t\tif (suffix_des_place<cur_place) {\n\t\t\t\t\t\tif (prefix_des_place > cur_place) {\n\t\t\t\t\t\t\tprefix_des_place = cur_place;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tsuffix_des_place = prefix_des_place;\n\t\t\t\t\t}\n\t\t\t\t\telse if (prefix_des_place>cur_place) {\n\t\t\t\t\t\tprefix_des_place = suffix_des_place;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tmovement = (block_len-i)*fabs(suffix_des_place-cur_place) + i*fabs(prefix_des_place-cur_place);\n\t\t\t\tif (movement>max_movement) {\n\t\t\t\t\tmax_movement = movement;\n\t\t\t\t\tbest_i = i;\n\t\t\t\t}\n\t\t\t}\n\t\t\t/* Actually move prefix and suffix */\n\t\t\tif (best_i>=0) {\n\t\t\t\tsuffix_des_place = suffix_desired_place[best_i];\n\t\t\t\tprefix_des_place = best_i>0 ? prefix_desired_place[best_i-1] : suffix_des_place;\n\t\t\t\t\n\t\t\t\t/* compute right border of feasible move */\n\t\t\t\tif (right>=n) {\n\t\t\t\t\t/* no nodes after current block */\n\t\t\t\t\tupper_bound = 1e9;\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tupper_bound = place[ordering[right]];\n\t\t\t\t}\n\t\t\t\tsuffix_des_place = MIN(suffix_des_place, upper_bound);\n\t\t\t\tprefix_des_place = MAX(prefix_des_place, lower_bound);\n\t\t\t\n\t\t\t\t/* limit moves to ensure that the prefix is placed before the suffix */\n\t\t\t\tif (suffix_des_place<prefix_des_place) {\n\t\t\t\t\tif (suffix_des_place<cur_place) {\n\t\t\t\t\t\tif (prefix_des_place > cur_place) {\n\t\t\t\t\t\t\tprefix_des_place = cur_place;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tsuffix_des_place = prefix_des_place;\n\t\t\t\t\t}\n\t\t\t\t\telse if (prefix_des_place>cur_place) {\n\t\t\t\t\t\tprefix_des_place = suffix_des_place;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t/* move prefix: */\n\t\t\t\tfor (i=0; i<best_i; i++) {\n\t\t\t\t\tplace[block[i]] = prefix_des_place;\n\t\t\t\t}\n\t\t\t\t/* move suffix: */\n\t\t\t\tfor (i=best_i; i<block_len; i++) {\n\t\t\t\t\tplace[block[i]] = suffix_des_place;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tlower_bound = suffix_des_place; // lower bound for next block\n\n\t\t\t\t/* reorder 'ordering' to reflect change of places\n\t\t\t\t * Note that it is enough to reorder the level where \n                 * the split was done\n                 */\n#if 0\n\t\t\t\tint max_in_level, min_in_level;\n\t\t\t\t\n\t\t\t\tlevel = lev[best_i];\n\t\t\t\tif (level==num_levels) {\n\t\t\t\t\t// last_level\n\t\t\t\t\tmax_in_level = MIN(right,n);\t\t\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tmax_in_level = MIN(right,levels[level]);\n\t\t\t\t}\n\t\t\t\tif (level==0) {\n\t\t\t\t\t// first level\n\t\t\t\t\tmin_in_level = MAX(left,0);\t\t\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tmin_in_level = MAX(left,levels[level-1]);\n\t\t\t\t}\n#endif\n\t\t\t\tfor (i=left; i<right; i++) {\n\t\t\t\t\tordering[i] = block[i-left];\n\t\t\t\t}\n\t\t\t\tconverged = converged && fabs(prefix_des_place-cur_place)<quad_prog_tol  \n\t\t\t\t\t\t\t\t      && fabs(suffix_des_place-cur_place)<quad_prog_tol;\n\t\t\t\n\t\t\t}\n\t\t\telse {\n\t\t\t\t/* no movement */\n\t\t\t\tlower_bound = cur_place; // lower bound for next block\n\t\t\t}\n\t\t\t\n\t\t}\n\t}\n\n\tcomputeHierarchyBoundaries(place, n, ordering, levels, num_levels, hierarchy_boundaries);\n\n\treturn counter;\n}\n\nstatic float *place;\nstatic int compare_incr(const void *a, const void *b) {\n\tif(place[*(int*)a]>place[*(int*)b]) {\n\t\treturn 1;\n\t} else if(place[*(int*)a]<place[*(int*)b]) {\n\t\treturn -1;\n\t}\n\treturn 0;\n}\n/*\nWhile not converged: move everything towards the optimum, then satisfy constraints with as little displacement as possible.\nReturns number of iterations before convergence.\n*/\nint constrained_majorization_gradient_projection(CMajEnv *e,\n\t\tfloat * b, float ** coords, int ndims, int cur_axis, int max_iterations,\n\t\tfloat * hierarchy_boundaries,float levels_gap) {\n\t\n\tint i,j,counter;\n\tif(max_iterations==0) return 0;\n\n\tint * ordering=e->ordering;\n\tint * levels=e->levels;\n\tint num_levels=e->num_levels; \n\tbool converged=false;\n\tstatic int call_no=0;\n\tplace = coords[cur_axis];\n\tfloat *g = e->fArray1;\n\tfloat *old_place = e->fArray2;\n\tfloat *A_r = e->fArray3;\n\tfloat *d = e->fArray4;\n\tint *upperInvalid = e->iArray1;\n\tint *lowerInvalid = e->iArray2;\n\tfloat displacement = 0; // no lower bound for first level\t\n\n#ifdef CONMAJ_LOGGING\n\tdouble prev_stress=0;\n\tfor (i=0; i<e->n; i++) {\n\t\tprev_stress += 2*b[i]*place[i];\n\t\tfor (j=0; j<e->n; j++) {\n\t\t\tprev_stress -= e->A[i][j]*place[j]*place[i];\n\t\t}\n\t}\n\tFILE *logfile = fopen(\"constrained_majorization_log\",\"a\");\n\n\tfprintf(logfile,\"grad proj %d: stress=%f\\n\",call_no,prev_stress);\n#endif\n\tfor (counter=0; counter<max_iterations&&!converged; counter++) {\n\t\tconverged=true;\t\t\n\t\t// find steepest descent direction\n\t\tfor (i=0; i<e->n; i++) {\n\t\t\told_place[i]=place[i];\n\t\t\tg[i] = 2*b[i];\n\t\t\tfor (j=0; j<e->n; j++) {\n\t\t\t\tg[i] -= 2*e->A[i][j]*place[j];\n\t\t\t}\n\t\t}\t\t\n\t\tfloat numerator = 0, denominator = 0, r;\n\t\tfor (i=0; i<e->n; i++) {\n\t\t\tnumerator += g[i]*g[i];\n\t\t\tr=0;\n\t\t\tfor (j=0; j<e->n; j++) {\n\t\t\t\tr += 2*e->A[i][j]*g[j];\n\t\t\t}\n\t\t\tdenominator -= r*g[i];\n\t\t}\n\t\tfloat alpha = numerator/denominator;\n\t\tfor (i=0; i<e->n; i++) {\n\t\t\tif(alpha > 0 && alpha < 1000) {\n\t\t\t\tplace[i]-=alpha*g[i];\n\t\t\t}\n\t\t}\n\t\tif(num_levels) \n\t\t\tqsort((int *)ordering, (size_t)levels[0], sizeof(int), compare_incr );\n\t\t//project to constraint boundary\n\t\tfor (i=0; i<num_levels; i++) {\n\t\t\tint endOfLevel=i==num_levels-1?e->n:levels[i+1];\n\t\t\t// ensure monotic increase in position within levels\n\t\t\tqsort((int *)ordering+levels[i], (size_t)endOfLevel-levels[i], sizeof(int), compare_incr );\n\t\t\t// If there are overlapping levels find offending nodes and place at average position\n\t\t\tint ui=levels[i],li=ui-1;\n\t\t\tint l = ordering[li--],u = ordering[ui++];\n\t\t\tif(place[l]+levels_gap>place[u]) {\n\t\t\t\tfloat sum=place[l]+place[u]-levels_gap*(e->lev[l]+e->lev[u]),w=2;\n\t\t\t\tfloat avgPos=sum/w;\n\t\t\t\tfloat pos;\n\t\t\t\tbool finished;\n\t\t\t\tdo {\n\t\t\t\t\tfinished=true;\n\t\t\t\t\tif(ui<endOfLevel) {\n\t\t\t\t\t\tu=ordering[ui];\n\t\t\t\t\t\tpos=place[u]-levels_gap*e->lev[u];\n\t\t\t\t\t\tif(pos<avgPos) {\n\t\t\t\t\t\t\tui++; w++;\n\t\t\t\t\t\t\tsum+=pos;\n\t\t\t\t\t\t\tavgPos=sum/w;\n\t\t\t\t\t\t\tfinished=false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tif(li>=0) {\n\t\t\t\t\t\tl=ordering[li];\n\t\t\t\t\t\tpos=place[l]-levels_gap*e->lev[l];\n\t\t\t\t\t\tif(pos>avgPos) {\n\t\t\t\t\t\t\tli--; w++;\n\t\t\t\t\t\t\tsum+=pos;\n\t\t\t\t\t\t\tavgPos=sum/w;\n\t\t\t\t\t\t\tfinished=false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} while (!finished);\n\t\t\t\tfor(j=li+1;j<ui;j++) {\n\t\t\t\t\tplace[ordering[j]]=avgPos+levels_gap*e->lev[ordering[j]];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// set place to the intersection of old_place-g and boundary and compute d, the vector from intersection pnt to projection pnt\n\t\tfor (i=0; i<e->n; i++) {\n\t\t\td[i]=place[i]-old_place[i];\n\t\t}\t\n\t\t// now compute beta\n\t\tnumerator = 0, denominator = 0;\n\t\tfor (i=0; i<e->n; i++) {\n\t\t\tnumerator += g[i]*d[i];\n\t\t\tr=0;\n\t\t\tfor (j=0; j<e->n; j++) {\n\t\t\t\tr += 2*e->A[i][j]*d[j];\n\t\t\t}\n\t\t\tdenominator += r*d[i];\n\t\t}\n\t\tfloat beta = numerator/denominator;\n\n\t\tfloat test=0,tmptest=0;\n\t\tfor (i=0; i<e->n; i++) {\n\t\t\tif(beta>0&&beta<1.0) {\n\t\t\t\tplace[i]=old_place[i]+beta*d[i];\n\t\t\t}\n\t\t\ttmptest = fabs(place[i]-old_place[i]);\n\t\t\tif(test<tmptest) test=tmptest;\n\t\t}\n\t\tcomputeHierarchyBoundaries(place, e->n, ordering, levels, num_levels, hierarchy_boundaries);\n\t\t/*\n\t\tif(num_levels) \n\t\t\tqsort((int *)ordering, (size_t)levels[0], sizeof(int), compare_incr );\n\t\tfor (i=0; i<num_levels; i++) {\n\t\t\tint endOfLevel=i==num_levels-1?e->n:levels[i+1];\n\t\t\t// ensure monotic increase in position within levels\n\t\t\tqsort((int *)ordering+levels[i], (size_t)endOfLevel-levels[i], sizeof(int), compare_incr );\n\t\t\t// If there are overlapping levels find offending nodes and place at average position\n\t\t\tint l = ordering[levels[i]-1],u = ordering[levels[i]];\n\t\t\t//assert(place[l]+levels_gap<=place[u]+0.00001);\n\t\t}\n\t\t*/\n#ifdef CONMAJ_LOGGING\n\t\tdouble stress=0;\n\t\tfor (i=0; i<e->n; i++) {\n\t\t\tstress += 2*b[i]*place[i];\n\t\t\tfor (j=0; j<e->n; j++) {\n\t\t\t\tstress -= e->A[i][j]*place[j]*place[i];\n\t\t\t}\n\t\t}\n\t\tfprintf(logfile,\"%d: stress=%f, test=%f, %s\\n\",call_no,stress,test,(stress>=prev_stress)?\"No Improvement\":\"\");\n\t\tprev_stress=stress;\n#endif\n\t\tif(test>quad_prog_tol) {\n\t\t\tconverged=false;\n\t\t}\n\t}\n#ifdef CONMAJ_LOGGING\n\tcall_no++;\n\tfclose(logfile);\n#endif\n\treturn counter;\n}\n\nint \nconstrained_majorization_new_with_gaps(CMajEnv *e, float* b, float** coords, \n    int ndims, int cur_axis, int max_iterations, float* hierarchy_boundaries,\n    float levels_gap)\n{\n\tfloat *place=coords[cur_axis];\n\tint i,j;\n\tint n=e->n;\n\tfloat** lap = e->A;\n\tint* ordering = e->ordering;\n\tint* levels = e->levels;\n\tint num_levels = e->num_levels; \n\tfloat new_place_i;\n\tbool converged=false;\n\tfloat upper_bound, lower_bound;\n\tint node;\n\tint left, right;\n\tfloat cur_place;\n\tfloat des_place_block;\n\tfloat block_deg;\n\tfloat toBlockConnectivity;\n\tfloat * lap_node;\n\tfloat * desired_place;\n\tfloat * prefix_desired_place;\n\tfloat * suffix_desired_place;\n    int* block;\n\tint block_len;\n\tint first_next_level;\n\tint * lev;\n\tint level=-1, max_in_level=0;\t\n    int counter;\n\tfloat* gap;\n\tfloat total_gap, target_place;\n\n\tif (max_iterations<=0) {\n\t\treturn 0;\n\t}\n\n\tensureMonotonicOrderingWithGaps(place, n, ordering, levels, num_levels, levels_gap);\n\t/* it is important that in 'ordering' nodes are always sorted by layers, \n     * and within a layer by 'place'\n     */\n\t\n    /* the desired place of each individual node in the current block */\n\tdesired_place = e->fArray1; \n    /* the desired place of each prefix of current block */\n\tprefix_desired_place = e->fArray2; \n    /* the desired place of each suffix of current block */\n\tsuffix_desired_place = e->fArray3; \n    /* current block (nodes connected by active constraints) */\n\tblock = e->iArray1;\n\n\tlev = e->iArray2; /* level of each node */\n\tfor (i=0; i<n; i++) {\n\t\tif (i>=max_in_level) {\n\t\t\t/* we are entering a new level */\n\t\t\tlevel++;\n\t\t\tif (level==num_levels) {\n\t\t\t\t/* last_level */\n\t\t\t\tmax_in_level=n;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tmax_in_level = levels[level];\n\t\t\t}\t\t\n\t\t}\n\t\tnode = ordering[i];\n\t\tlev[node]=level;\t\n\t}\n\n    /* displacement of block's nodes from block's reference point */\n\tgap = e->fArray4;\n\t\n\tfor (counter=0; counter<max_iterations&&!converged; counter++) {\n\t\tconverged=true;\n\t\tlower_bound = -1e9; // no lower bound for first level\n\t\tfor (left=0; left<n; left=right) {\n\t\t\tint best_i;\n\t\t\tdouble max_movement;\n\t\t\tdouble movement;\n\t\t\tfloat prefix_des_place, suffix_des_place;\n\t\t\t/* compute a block 'ordering[left]...ordering[right-1]' of \n             * nodes connected with active constraints\n             */\n\t\t\tcur_place = place[ordering[left]];\t\t\t\n\t\t\ttotal_gap = 0;\t\n\t\t\ttarget_place = cur_place;\n\t\t\tgap[ordering[left]] = 0;\n\t\t\tfor (right=left+1; right<n; right++) {\n\t\t\t\tif (lev[right]>lev[right-1]) {\n\t\t\t\t\t/* we are entering a new level */\n\t\t\t\t\ttarget_place += levels_gap; /* note that 'levels_gap' may be negative */\n\t\t\t\t\ttotal_gap += levels_gap; \n\t\t\t\t}\n\t\t\t\tnode = ordering[right];\n#if 0\n\t\t\t\tif (place[node]!=target_place)\n#endif\n            /* not sure if this is better than 'place[node]!=target_place' */\n\t\t\t\tif (fabs(place[node]-target_place)>1e-9) \n                {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tgap[node] = place[node]-cur_place;\t\t\t\n\t\t\t}\t\t\t\n\n\t\t\t/* compute desired place of block's reference point according \n             * to each node in the block:\n             */\n\t\t\tfor (i=left; i<right; i++) {\n\t\t\t\tnode = ordering[i];\n\t\t\t\tnew_place_i = -b[node];\n\t\t\t\tlap_node = lap[node];\n\t\t\t\tfor (j=0; j<n; j++) {\n\t\t\t\t\tif (j==node) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tnew_place_i\t+= lap_node[j]*place[j];\n\t\t\t\t}\n\t\t\t\tdesired_place[node] = new_place_i/(-lap_node[node]) - gap[node];\n\t\t\t}\n\n\t\t\t/* reorder block by levels, and within levels \n             * by \"relaxed\" desired position\n             */\n\t\t\tblock_len = 0;\n\t\t\tfirst_next_level=0;\n\t\t\tfor (i=left; i<right; i=first_next_level) {\n\t\t\t\tlevel = lev[ordering[i]];\n\t\t\t\tif (level==num_levels) {\n\t\t\t\t\t/* last_level */\n\t\t\t\t\tfirst_next_level=right;\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tfirst_next_level = MIN(right,levels[level]);\n\t\t\t\t}\n\n\t\t\t\t/* First, collect all nodes with desired places smaller \n                 * than current place\n                 */\n\t\t\t\tfor (j=i; j<first_next_level; j++) {\n\t\t\t\t\tnode = ordering[j];\n\t\t\t\t\tif (desired_place[node] < cur_place) {\n\t\t\t\t\t\tblock[block_len++] = node;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t/* Second, collect all nodes with desired places equal \n                 * to current place\n                 */\n\t\t\t\tfor (j=i; j<first_next_level; j++) {\n\t\t\t\t\tnode = ordering[j];\n\t\t\t\t\tif (desired_place[node] == cur_place) {\n\t\t\t\t\t\tblock[block_len++] = node;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t/* Third, collect all nodes with desired places greater \n                 * than current place\n                 */\n\t\t\t\tfor (j=i; j<first_next_level; j++) {\n\t\t\t\t\tnode = ordering[j];\n\t\t\t\t\tif (desired_place[node] > cur_place) {\n\t\t\t\t\t\tblock[block_len++] = node;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\t/* loop through block and compute desired places of its prefixes */\n\t\t\tdes_place_block = 0;\n\t\t\tblock_deg = 0;\n\t\t\tfor (i=0; i<block_len; i++) {\n\t\t\t\tnode = block[i];\n\t\t\t\ttoBlockConnectivity = 0;\n\t\t\t\tlap_node = lap[node];\n\t\t\t\tfor (j=0; j<i; j++) {\n\t\t\t\t\ttoBlockConnectivity -= lap_node[block[j]];\n\t\t\t\t}\n\t\t\t\ttoBlockConnectivity*=2;\n\t\t\t\t/* update block stats */\n\t\t\t\tdes_place_block = (block_deg*des_place_block+(-lap_node[node])*desired_place[node]+toBlockConnectivity*cur_place)/(block_deg-lap_node[node]+toBlockConnectivity);\n\t\t\t\tprefix_desired_place[i] = des_place_block;\n\t\t\t\tblock_deg += toBlockConnectivity-lap_node[node];\t\t\t\t\n\t\t\t}\n\n\t\t\tif (block_len==n) {  \n\t\t\t\t/* fix is needed since denominator was 0 in this case */\n\t\t\t\tprefix_desired_place[n-1] = cur_place; /* a \"neutral\" value */\n\t\t\t}\n\n\t\t\t/* loop through block and compute desired places of its suffixes */\n\t\t\tdes_place_block = 0;\n\t\t\tblock_deg = 0;\n\t\t\tfor (i=block_len-1; i>=0; i--) {\n\t\t\t\tnode = block[i];\n\t\t\t\ttoBlockConnectivity = 0;\n\t\t\t\tlap_node = lap[node];\n\t\t\t\tfor (j=i+1; j<block_len; j++) {\n\t\t\t\t\ttoBlockConnectivity -= lap_node[block[j]];\n\t\t\t\t}\n\t\t\t\ttoBlockConnectivity*=2;\n\t\t\t\t/* update block stats */\n\t\t\t\tdes_place_block = (block_deg*des_place_block+(-lap_node[node])*desired_place[node]+toBlockConnectivity*cur_place)/(block_deg-lap_node[node]+toBlockConnectivity);\n\t\t\t\tsuffix_desired_place[i] = des_place_block;\n\t\t\t\tblock_deg += toBlockConnectivity-lap_node[node];\t\t\t\t\n\t\t\t}\n\t\t\t\n\t\t\tif (block_len==n) { \n\t\t\t\t/* fix is needed since denominator was 0 in this case */\n\t\t\t\tsuffix_desired_place[0] = cur_place; /* a \"neutral\" value? */\n\t\t\t}\n\n\t\t\n\t\t\t/* now, find best place to split block */\n\t\t\tbest_i = -1;\n\t\t\tmax_movement = 0;\n\t\t\tfor (i=0; i<block_len; i++) {\n\t\t\t\tsuffix_des_place = suffix_desired_place[i];\n\t\t\t\tprefix_des_place = i>0 ? prefix_desired_place[i-1] : suffix_des_place;\n\t\t\t\t/* limit moves to ensure that the prefix is placed before the suffix */\n\t\t\t\tif (suffix_des_place<prefix_des_place) {\n\t\t\t\t\tif (suffix_des_place<cur_place) {\n\t\t\t\t\t\tif (prefix_des_place > cur_place) {\n\t\t\t\t\t\t\tprefix_des_place = cur_place;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tsuffix_des_place = prefix_des_place;\n\t\t\t\t\t}\n\t\t\t\t\telse if (prefix_des_place>cur_place) {\n\t\t\t\t\t\tprefix_des_place = suffix_des_place;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tmovement = (block_len-i)*fabs(suffix_des_place-cur_place) + i*fabs(prefix_des_place-cur_place);\n\t\t\t\tif (movement>max_movement) {\n\t\t\t\t\tmax_movement = movement;\n\t\t\t\t\tbest_i = i;\n\t\t\t\t}\n\t\t\t}\n\t\t\t/* Actually move prefix and suffix */\n\t\t\tif (best_i>=0) {\n\t\t\t\tsuffix_des_place = suffix_desired_place[best_i];\n\t\t\t\tprefix_des_place = best_i>0 ? prefix_desired_place[best_i-1] : suffix_des_place;\n\t\t\t\t\n\t\t\t\t/* compute right border of feasible move */\n\t\t\t\tif (right>=n) {\n\t\t\t\t\t/* no nodes after current block */\n\t\t\t\t\tupper_bound = 1e9;\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\t/* notice that we have to deduct 'gap[block[block_len-1]]'\n                     * since all computations should be relative to \n                     * the block's reference point\n                     */\n\t\t\t\t\tif (lev[ordering[right]]>lev[ordering[right-1]]) {\n\t\t\t\t\t\tupper_bound = place[ordering[right]]-levels_gap-gap[block[block_len-1]];\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tupper_bound = place[ordering[right]]-gap[block[block_len-1]];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tsuffix_des_place = MIN(suffix_des_place, upper_bound);\n\t\t\t\tprefix_des_place = MAX(prefix_des_place, lower_bound);\n\t\t\t\n\t\t\t\t/* limit moves to ensure that the prefix is placed before the suffix */\n\t\t\t\tif (suffix_des_place<prefix_des_place) {\n\t\t\t\t\tif (suffix_des_place<cur_place) {\n\t\t\t\t\t\tif (prefix_des_place > cur_place) {\n\t\t\t\t\t\t\tprefix_des_place = cur_place;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tsuffix_des_place = prefix_des_place;\n\t\t\t\t\t}\n\t\t\t\t\telse if (prefix_des_place>cur_place) {\n\t\t\t\t\t\tprefix_des_place = suffix_des_place;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t/* move prefix: */\n\t\t\t\tfor (i=0; i<best_i; i++) {\n\t\t\t\t\tplace[block[i]] = prefix_des_place+gap[block[i]];\n\t\t\t\t}\n\t\t\t\t/* move suffix: */\n\t\t\t\tfor (i=best_i; i<block_len; i++) {\n\t\t\t\t\tplace[block[i]] = suffix_des_place+gap[block[i]];\n\t\t\t\t}\n\n\t\t\n\t\t\t\t/* compute lower bound for next block */\n\t\t\t\tif (right<n && lev[ordering[right]]>lev[ordering[right-1]]) {\n\t\t\t\t\tlower_bound = place[block[block_len-1]]+levels_gap;\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tlower_bound = place[block[block_len-1]];\n\t\t\t\t}\n\t\t\t\t\n\n\t\t\t\t/* reorder 'ordering' to reflect change of places\n\t\t\t\t * Note that it is enough to reorder the level where \n                 * the split was done\n                 */\n#if 0\n\t\t\t\tint max_in_level, min_in_level;\n\t\t\t\t\n\t\t\t\tlevel = lev[best_i];\n\t\t\t\tif (level==num_levels) {\n\t\t\t\t\t/* last_level */\n\t\t\t\t\tmax_in_level = MIN(right,n);\t\t\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tmax_in_level = MIN(right,levels[level]);\n\t\t\t\t}\n\t\t\t\tif (level==0) {\n\t\t\t\t\t/* first level */\n\t\t\t\t\tmin_in_level = MAX(left,0);\t\t\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tmin_in_level = MAX(left,levels[level-1]);\n\t\t\t\t}\n#endif\n\t\t\t\tfor (i=left; i<right; i++) {\n\t\t\t\t\tordering[i] = block[i-left];\n\t\t\t\t}\n\t\t\t\tconverged = converged && fabs(prefix_des_place-cur_place)<quad_prog_tol  \n\t\t\t\t\t\t\t\t      && fabs(suffix_des_place-cur_place)<quad_prog_tol;\n\n\t\t\n\t\t\t}\n\t\t\telse {\n\t\t\t\t/* no movement */\n\t\t\t\t/* compute lower bound for next block */\n\t\t\t\tif (right<n && lev[ordering[right]]>lev[ordering[right-1]]) {\n\t\t\t\t\tlower_bound = place[block[block_len-1]]+levels_gap;\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tlower_bound = place[block[block_len-1]];\n\t\t\t\t}\n\t\t\t}\t\n\t\t}\n\t\torthog1f(n, place); /* for numerical stability, keep ||place|| small */\n\t\tcomputeHierarchyBoundaries(place, n, ordering, levels, num_levels, hierarchy_boundaries);\n\t}\n\t\n\treturn counter;\n}\n\nvoid\ndeleteCMajEnv(CMajEnv *e) \n{\n\tfree (e->A[0]); \n    free (e->A);\n\tfree (e->lev);\n\tfree (e->fArray1);\n\tfree (e->fArray2);\n\tfree (e->fArray3);\n\tfree (e->fArray4);\n\tfree (e->iArray1);\n\tfree (e->iArray2);\n\tfree (e->iArray3);\n\tfree (e->iArray4);\n\tfree (e);\n}\n\nCMajEnv*\ninitConstrainedMajorization(float* packedMat, int n, int* ordering, \n                            int* levels, int num_levels)\n{\n\tint i, level=-1, start_of_level_above=0;\n\tCMajEnv *e = GNEW(CMajEnv);\n\te->A=NULL;\n\te->n=n;\n\te->ordering=ordering;\n\te->levels=levels;\n\te->num_levels=num_levels;\n\te->A = unpackMatrix(packedMat,n);\n\te->lev = N_GNEW(n, int);\n\tfor (i=0; i<e->n; i++) {\n\t\tif (i>=start_of_level_above) {\n\t\t\tlevel++;\n\t\t\tstart_of_level_above=(level==num_levels)?e->n:levels[level];\n\t\t}\n\t\te->lev[ordering[i]]=level;\n\t}\t\n\te->fArray1 = N_GNEW(n,float);\n\te->fArray2 = N_GNEW(n,float);\n\te->fArray3 = N_GNEW(n,float);\n\te->fArray4 = N_GNEW(n,float);\n\te->iArray1 = N_GNEW(n,int);\n\te->iArray2 = N_GNEW(n,int);\n\te->iArray3 = N_GNEW(n,int);\n\te->iArray4 = N_GNEW(n,int);\n\treturn e;\n}\n#endif /* DIGCOLA */\n\n"
  },
  {
    "path": "experimental/neatogen/quad_prog_solver.h",
    "content": "/**********************************************************\n*      This software is part of the graphviz package      *\n*                http://www.graphviz.org/                 *\n*                                                         *\n*            Copyright (c) 1994-2004 AT&T Corp.           *\n*                and is licensed under the                *\n*            Common Public License, Version 1.0           *\n*                      by AT&T Corp.                      *\n*                                                         *\n*        Information and Software Systems Research        *\n*              AT&T Research, Florham Park NJ             *\n**********************************************************/\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#ifndef _CMAJ_H_\n#define _CMAJ_H_\n\n#ifdef DIGCOLA\n\ntypedef struct {\n\tfloat **A;\n\tint n;\n\tint *lev;\n\tint *iArray1;\n\tint *iArray2;\n\tint *iArray3;\n\tint *iArray4;\n\tfloat *fArray1;\n\tfloat *fArray2;\n\tfloat *fArray3;\n\tfloat *fArray4;\n\tfloat *A_r;\n\tint *ordering;\n\tint *levels;\n\tint num_levels;\n}CMajEnv;\n\nextern CMajEnv* initConstrainedMajorization(float *, int, int*, int*, int);\n\nextern int constrained_majorization_new(CMajEnv*, float*, float**, \n                                        int, int, int, float*, float);\n\nextern int constrained_majorization_new_with_gaps(CMajEnv*, float*, float**, \n                                                  int, int, int,  float*, float);\nextern int constrained_majorization_gradient_projection(CMajEnv *e,\n\tfloat * b, float ** coords, int ndims, int cur_axis, int max_iterations,\n\tfloat * hierarchy_boundaries,float levels_gap);\n\nextern int constrained_majorization_new_with_gaps(CMajEnv*, float*, float**, \n                                                  int, int, int,  float*, float);\nextern void deleteCMajEnv(CMajEnv *e);\n\nextern float** unpackMatrix(float * packedMat, int n);\n\n#endif \n\n#endif /* _CMAJ_H_ */\n\n#ifdef __cplusplus\n}\n#endif\n"
  },
  {
    "path": "experimental/neatogen/quad_prog_vpsc.c",
    "content": "/**********************************************************\n*      This software is part of the graphviz package      *\n*                http://www.graphviz.org/                 *\n*                                                         *\n*            Copyright (c) 1994-2004 AT&T Corp.           *\n*                and is licensed under the                *\n*            Common Public License, Version 1.0           *\n*                      by AT&T Corp.                      *\n*                                                         *\n*        Information and Software Systems Research        *\n*              AT&T Research, Florham Park NJ             *\n**********************************************************/\n\n#include \"digcola.h\"\n#ifdef DIGCOLA\n#include <math.h>\n#include <stdlib.h>\n#include <time.h>\n#include <stdio.h>\n#include <float.h>\n#include <assert.h>\n#include \"matrix_ops.h\"\n#include \"kkutils.h\"\n#include <csolve_VPSC.h>\n#include \"quad_prog_vpsc.h\"\n#include \"quad_prog_solver.h\"\n\n//#define CONMAJ_LOGGING 1\n#define quad_prog_tol 1e-4\n\nint \nconstrained_majorization_vpsc(CMajEnvVPSC *e, float * b, float *place, \n                             int max_iterations)\n{\n\tint i,j,counter;\n    int n=e->nv+e->nldv; // for laplacian computation need number of real vars and those\n                         // dummy vars included in lap\n\tif(max_iterations==0) return 0;\n\n\tbool converged=false;\n#ifdef CONMAJ_LOGGING\n\tstatic int call_no=0;\n#endif // CONMAJ_LOGGING\n\tfloat *g = e->fArray1;\n\tfloat *old_place = e->fArray2;\n\tfloat *d = e->fArray3;\n    //fprintf(stderr,\"Entered: constrained_majorization_vpsc, #constraints=%d\\n\",e->m);\n    if(e->m>0) {\n\t    for (i=0;i<n;i++) {\n\t\t    setVariableDesiredPos(e->vs[i],place[i]);\n\t    }\n        //fprintf(stderr,\"  calling satisfyVPSC...\\n\");\n        satisfyVPSC(e->vpsc);\t\n        for (i=0;i<n;i++) {\n            place[i]=getVariablePos(e->vs[i]);\n            //fprintf(stderr,\"vs[%d]=%f\\n\",i,place[i]);\n        }\n        //fprintf(stderr,\"    done.\\n\");\n    }\n#ifdef CONMAJ_LOGGING\n\tfloat prev_stress=0;\n\tfor (i=0; i<n; i++) {\n\t\tprev_stress += 2*b[i]*place[i];\n\t\tfor (j=0; j<n; j++) {\n\t\t\tprev_stress -= e->A[i][j]*place[j]*place[i];\n\t\t}\n\t}\n\tFILE *logfile = fopen(\"constrained_majorization_log\",\"a\");\n\n\t//fprintf(logfile,\"grad proj %d: stress=%f\\n\",call_no,prev_stress);\n#endif\n\t\n\tfor (counter=0; counter<max_iterations&&!converged; counter++) {\n        //fprintf(stderr,\".\");\n\t\tconverged=true;\t\t\n\t\t// find steepest descent direction\n\t\tfor (i=0; i<n; i++) {\n\t\t\told_place[i]=place[i];\n\t\t\tg[i] = 2*b[i];\n\t\t\tfor (j=0; j<n; j++) {\n\t\t\t\tg[i] -= 2*e->A[i][j]*place[j];\n\t\t\t}\n\t\t}\t\t\n\t\tfloat numerator = 0, denominator = 0, r;\n\t\tfor (i=0; i<n; i++) {\n\t\t\tnumerator += g[i]*g[i];\n\t\t\tr=0;\n\t\t\tfor (j=0; j<n; j++) {\n\t\t\t\tr += 2*e->A[i][j]*g[j];\n\t\t\t}\n\t\t\tdenominator -= r*g[i];\n\t\t}\n\t\tfloat alpha = numerator/denominator;\n\t\tfor (i=0; i<n; i++) {\n\t\t\tplace[i]-=alpha*g[i];\n\t\t}\n        if(e->m>0) {\n            //project to constraint boundary\n            for (i=0;i<n;i++) {\n                setVariableDesiredPos(e->vs[i],place[i]);\n            }\n            satisfyVPSC(e->vpsc);\n            for (i=0;i<n;i++) {\n                place[i]=getVariablePos(e->vs[i]);\n            }\n        }\n\t\t// set place to the intersection of old_place-g and boundary and compute d, the vector from intersection pnt to projection pnt\n\t\tfor (i=0; i<n; i++) {\n\t\t\td[i]=place[i]-old_place[i];\n\t\t}\t\n\t\t// now compute beta\n\t\tnumerator = 0, denominator = 0;\n\t\tfor (i=0; i<n; i++) {\n\t\t\tnumerator += g[i]*d[i];\n\t\t\tr=0;\n\t\t\tfor (j=0; j<n; j++) {\n\t\t\t\tr += 2*e->A[i][j]*d[j];\n\t\t\t}\n\t\t\tdenominator += r*d[i];\n\t\t}\n\t\tfloat beta = numerator/denominator;\n\n\t\tfloat test=0;\n\t\tfor (i=0; i<n; i++) {\n\t\t\t// beta > 1.0 takes us back outside the feasible region\n\t\t\t// beta < 0 clearly not useful and may happen due to numerical imp.\n\t\t\tif(beta>0&&beta<1.0) {\n\t\t\t\tplace[i]=old_place[i]+beta*d[i];\n\t\t\t}\n\t\t\ttest+= fabs(place[i]-old_place[i]);\n\t\t}\n#ifdef CONMAJ_LOGGING\n\t\tfloat stress=0;\n\t\tfor (i=0; i<n; i++) {\n\t\t\tstress += 2*b[i]*place[i];\n\t\t\tfor (j=0; j<n; j++) {\n\t\t\t\tstress -= e->A[i][j]*place[j]*place[i];\n\t\t\t}\n\t\t}\n\t\tfprintf(logfile,\"%d: stress=%f, test=%f, %s\\n\",call_no,stress,test,(stress>=prev_stress)?\"No Improvement\":\"\");\n\t\tprev_stress=stress;\n#endif\n\t\tif(test>quad_prog_tol) {\n\t\t\tconverged=false;\n\t\t}\n\t}\n#ifdef CONMAJ_LOGGING\n\tcall_no++;\n\tfclose(logfile);\n#endif\n\treturn counter;\n}\n\nCMajEnvVPSC*\ninitCMajVPSC(int n, float* packedMat, vtx_data* graph,\n        vsep_options *opt, int diredges)\n{\n    int i,j;\n    // nv is the number of real nodes\n    int nEdgeCs, nConCs;\n    Constraint** edgeCs=NULL;\n    //fprintf(stderr,\"Entered initCMajVPSC\\n\");\n\tCMajEnvVPSC *e = GNEW(CMajEnvVPSC);\n\te->A=NULL;\n    e->packedMat=packedMat;\n    /* if we have clusters then we'll need two constraints for each var in\n     * a cluster */\n    e->nldv = 2*opt->clusters->nclusters;\n    e->nv = n - e->nldv;\n    e->ndv = 0;\n\n    e->gcs=NULL;\n    e->vs=N_GNEW(n, Variable*);\n    for(i=0;i<n;i++) {\n        e->vs[i]=newVariable(i,1.0,1.0);\n    }\n    e->gm=0;\n    if(diredges==1) {\n        fprintf(stderr,\"  generate edge constraints...\\n\");\n        for(i=0;i<e->nv;i++) {\n            for(j=1;j<graph[i].nedges;j++) {\n                //fprintf(stderr,\"edist=%f\\n\",graph[i].edists[j]);\n                if(graph[i].edists[j]>0.01) {\n                    e->gm++;\n                }\n            }\n        }\n        e->gcs=newConstraints(e->gm);\n        e->gm=0;\n        for(i=0;i<e->nv;i++) {\n            for(j=1;j<graph[i].nedges;j++) {\n                int u=i,v=graph[i].edges[j];\n                if(graph[i].edists[j]>0) {\n                    e->gcs[e->gm++]=newConstraint(e->vs[u],e->vs[v],opt->edge_gap);\n                }\n            }\n        }\n    } else if(diredges==2) {\n\t    int *ordering=NULL, *ls=NULL, num_boundaries, cvar;\n        DigColaLevel* levels;\n        Variable** vs = e->vs;\n        // e->ndv is the number of dummy variables required, one for each boundary\n\t\tcompute_hierarchy(graph, n, 1e-2, 1e-1, NULL, &ordering, &ls, &e->ndv);\t\t\n        levels=assign_digcola_levels(ordering,n,ls,e->ndv);\n        fprintf(stderr,\"Found %d DiG-CoLa boundaries\\n\",e->ndv);\n        e->gm=get_num_digcola_constraints(levels,e->ndv+1)+e->ndv-1;\n        e->gcs=newConstraints(e->gm);\n        e->gm=0;\n        e->vs = N_GNEW(n+e->ndv,Variable*);\n        for(i=0;i<n;i++) {\n            e->vs[i]=vs[i];\n        }\n        free(vs);\n        // create dummy vars\n        for(i=0;i<e->ndv;i++) {\n            //  dummy vars should have 0 weight\n            cvar=n+i;\n            e->vs[cvar]=newVariable(cvar,1.0,0.000001);\n        }\n        double halfgap=opt->edge_gap;\n        for(i=0;i<e->ndv;i++) {\n            cvar=n+i;\n            // outgoing constraints for each var in level below boundary\n            for(j=0;j<levels[i].num_nodes;j++) {\n                e->gcs[e->gm++]=newConstraint(e->vs[levels[i].nodes[j]],e->vs[cvar],halfgap);\n            }\n            // incoming constraints for each var in level above boundary\n            for(j=0;j<levels[i+1].num_nodes;j++) {\n                e->gcs[e->gm++]=newConstraint(e->vs[cvar],e->vs[levels[i+1].nodes[j]],halfgap);\n            }\n        }\n        // constraints between adjacent boundary dummy vars\n        for(i=0;i<e->ndv-1;i++) {\n            e->gcs[e->gm++]=newConstraint(e->vs[n+i],e->vs[n+i+1],0);\n        }\n    }\n    //fprintf(stderr,\"  generate edge constraints... done: n=%d,m=%d\\n\",e->n,e->gm);\n    if(opt->clusters->nclusters>0) {\n        //fprintf(stderr,\"  generate cluster containment constraints...\\n\");\n        Constraint** ecs=e->gcs;\n        nConCs=2*opt->clusters->nvars;\n        e->gcs=newConstraints(nEdgeCs+nConCs);\n        for(i=0;i<e->gm;i++) {\n            e->gcs[i]=ecs[i];\n        }\n        if(ecs!=NULL) deleteConstraints(0,ecs);\n        for(i=0;i<opt->clusters->nclusters;i++) {\n            for(j=0;j<opt->clusters->clustersizes[i];j++) {\n                Variable* v=e->vs[opt->clusters->clusters[i][j]];\n                Variable* cl=e->vs[e->nv+2*i];\n                Variable* cr=e->vs[e->nv+2*i+1];\n                e->gcs[e->gm++]=newConstraint(cl,v,0);\n                e->gcs[e->gm++]=newConstraint(v,cr,0);\n            }\n        }\n        //fprintf(stderr,\"  containment constraints... done: \\n\");\n    }\n\n    e->m=0;\n    e->cs=NULL;\n    if(e->gm>0) {\n        e->vpsc = newIncVPSC(n+e->ndv,e->vs,e->gm,e->gcs);\n        e->m=e->gm;\n        e->cs=e->gcs;\n    }\n    if(packedMat!=NULL) {\n\t    e->A = unpackMatrix(packedMat,n);\n    }\n#ifdef MOSEK\n    e->mosekEnv=NULL;\n    if(opt->mosek) {\n        e->mosekEnv = mosek_init_sep(e->packedMat,n,e->ndv,e->gcs,e->gm);\n    }\n#endif\n\n\te->fArray1 = N_GNEW(n,float);\n\te->fArray2 = N_GNEW(n,float);\n\te->fArray3 = N_GNEW(n,float);\n    fprintf(stderr,\"  initCMajVPSC done: %d global constraints generated.\\n\",e->m);\n\treturn e;\n}\nvoid\ndeleteCMajEnvVPSC(CMajEnvVPSC *e) \n{\n    int i;\n    if(e->A!=NULL) {\n        free (e->A[0]); \n        free (e->A);\n    }\n    if(e->m>0) {\n        deleteVPSC(e->vpsc);\n        if(e->cs!=e->gcs && e->gcs!=NULL) deleteConstraints(0,e->gcs);\n        deleteConstraints(e->m,e->cs);\n        for(i=0;i<e->nv+e->nldv+e->ndv;i++) {\n            deleteVariable(e->vs[i]);\n        }\n        free (e->vs);\n    }\n\tfree (e->fArray1);\n\tfree (e->fArray2);\n\tfree (e->fArray3);\n#ifdef MOSEK\n    if(e->mosekEnv) {\n        mosek_delete(e->mosekEnv);\n    }\n#endif //MOSEK\n\tfree (e);\n}\n\n// generate non-overlap constraints inside each cluster, including dummy\n// nodes at bounds of cluster\n// generate constraints again for top level nodes and clusters treating\n// clusters as rectangles of dim (l,r,b,t)\n// for each cluster map in-constraints to l out-constraints to r \n//\n// For now, we'll keep the global containment constraints already\n// generated for each cluster, and simply generate non-overlap constraints\n// for all nodes and then an additional set of non-overlap constraints for\n// clusters that we'll map back to the dummy vars as above.\nvoid generateNonoverlapConstraints(\n        CMajEnvVPSC* e,\n        float nsizeScale,\n        float** coords,\n        int k,\n        bool transitiveClosure,\n\t    vsep_options* opt\n) {\n    Constraint **csol, **csolptr;\n    int i,j,mol=0;\n    int n=e->nv+e->nldv;\n    boxf bb[n];\n    bool genclusters=opt->clusters->nclusters>0;\n    if(genclusters) {\n        // n is the number of real variables, not dummy cluster vars\n        n-=2*opt->clusters->nclusters;\n    }\n    if(k==0) {\n        // grow a bit in the x dimension, so that if overlap is resolved\n        // horizontally then it won't be considered overlapping vertically\n        nsizeScale*=1.0001;\n    }\n    for(i=0;i<n;i++) {\n        bb[i].LL.x=coords[0][i]-nsizeScale*opt->nsize[i].x/2.0-opt->gap.x/2.0; \n        bb[i].UR.x=coords[0][i]+nsizeScale*opt->nsize[i].x/2.0+opt->gap.x/2.0; \n        bb[i].LL.y=coords[1][i]-nsizeScale*opt->nsize[i].y/2.0-opt->gap.y/2.0; \n        bb[i].UR.y=coords[1][i]+nsizeScale*opt->nsize[i].y/2.0+opt->gap.y/2.0; \n    }\n    if(genclusters) {\n        Constraint **cscl[opt->clusters->nclusters+1];\n        int cm[opt->clusters->nclusters+1];\n        for(i=0;i<opt->clusters->nclusters;i++) {\n            int cn=opt->clusters->clustersizes[i];\n            Variable* cvs[cn+2];\n            boxf cbb[cn+2];\n            // compute cluster bounding bb\n            boxf container;\n            container.LL.x=container.LL.y=DBL_MAX;\n            container.UR.x=container.UR.y=-DBL_MAX;\n            for(j=0;j<cn;j++) {\n                int iv=opt->clusters->clusters[i][j];\n                cvs[j]=e->vs[iv];\n                B2BF(bb[iv],cbb[j]);\n                EXPANDBB(container,bb[iv]);\n            }\n            B2BF(container,opt->clusters->bb[i]);\n            cvs[cn]=e->vs[n+2*i];\n            cvs[cn+1]=e->vs[n+2*i+1];\n            B2BF(container,cbb[cn]);\n            B2BF(container,cbb[cn+1]);\n            if(k==0) {\n                cbb[cn].UR.x=container.LL.x+0.0001;\n                cbb[cn+1].LL.x=container.UR.x-0.0001;\n                cm[i] = genXConstraints(cn+2,cbb,cvs,&cscl[i],transitiveClosure);\n            } else {\n                cbb[cn].UR.y=container.LL.y+0.0001;\n                cbb[cn+1].LL.y=container.UR.y-0.0001;\n                cm[i] = genYConstraints(cn+2,cbb,cvs,&cscl[i]);\n            }\n            mol+=cm[i];\n        }\n        // generate top level constraints\n        {\n            int cn=opt->clusters->ntoplevel+opt->clusters->nclusters;\n            Variable* cvs[cn];\n            boxf cbb[cn];\n            for(i=0;i<opt->clusters->ntoplevel;i++) {\n                int iv=opt->clusters->toplevel[i];\n                cvs[i]=e->vs[iv];\n                B2BF(bb[iv],cbb[i]);\n            }\n            // make dummy variables for clusters\n            for(i=opt->clusters->ntoplevel;i<cn;i++) {\n                cvs[i]=newVariable(123+i,1,1);\n                j=i-opt->clusters->ntoplevel;\n                B2BF(opt->clusters->bb[j],cbb[i]);\n            }\n            i=opt->clusters->nclusters;\n            if(k==0) {\n                cm[i] = genXConstraints(cn,cbb,cvs,&cscl[i],transitiveClosure);\n            } else {\n                cm[i] = genYConstraints(cn,cbb,cvs,&cscl[i]);\n            }\n            // remap constraints from tmp dummy vars to cluster l and r vars\n            for(i=opt->clusters->ntoplevel;i<cn;i++) {\n                j=i-opt->clusters->ntoplevel;\n                // dgap is the change in required constraint gap.\n                // since we are going from a source rectangle the size\n                // of the cluster bounding box to a zero width (in x dim,\n                // zero height in y dim) rectangle, the change will be\n                // half the bb width.\n                double dgap;\n                if(k==0) {\n                    dgap=-(cbb[i].UR.x-cbb[i].LL.x)/2.0;\n                } else {\n                    dgap=-(cbb[i].UR.y-cbb[i].LL.y)/2.0;\n                }\n                remapInConstraints(cvs[i],e->vs[n+2*j],dgap);\n                remapOutConstraints(cvs[i],e->vs[n+2*j+1],dgap);\n                // there may be problems with cycles between\n                // cluster non-overlap and diredge constraints,\n                // to resolve:\n                // \n                // for each constraint c:v->cvs[i]:\n                //   if exists diredge constraint u->v where u in c:\n                //     remap v->cl to cr->v (gap = height(v)/2)\n                //\n                // in=getInConstraints(cvs[i])\n                // for(c : in) {\n                //   assert(c.right==cvs[i]);\n                //   vin=getOutConstraints(v=c.left)\n                //   for(d : vin) {\n                //     if(d.left.cluster==i):\n                //       tmp=d.left\n                //       d.left=d.right\n                //       d.right=tmp\n                //       d.gap==height(d.right)/2\n                //   }\n                // }\n                //       \n                deleteVariable(cvs[i]);\n            }\n            mol+=cm[opt->clusters->nclusters];\n        }\n        csolptr=csol=newConstraints(mol);\n        for(i=0;i<opt->clusters->nclusters+1;i++) {\n            // copy constraints into csol\n            for(j=0;j<cm[i];j++) {\n                *csolptr++=cscl[i][j];\n            }\n            deleteConstraints(0,cscl[i]);\n        }\n    } else {\n        if(k==0) {\n            mol = genXConstraints(n,bb,e->vs,&csol,transitiveClosure);\n        } else {\n            mol = genYConstraints(n,bb,e->vs,&csol);\n        }\n    }\n    // remove constraints from previous iteration\n    if(e->m>0) {\n        // can't reuse instance of VPSC when constraints change!\n        deleteVPSC(e->vpsc);\n        for(i=e->gm==0?0:e->gm;i<e->m;i++) {\n            // delete previous overlap constraints\n            deleteConstraint(e->cs[i]);\n        }\n        // just delete the array, not the elements\n        if(e->cs!=e->gcs) deleteConstraints(0,e->cs);\n    }\n    // if we have no global constraints then the overlap constraints \n    // are all we have to worry about.\n    // Otherwise, we have to copy the global and overlap constraints \n    // into the one array\n    if(e->gm==0) {\n        e->m = mol;\n        e->cs = csol;\n    } else {\n        e->m = mol + e->gm;\n        e->cs = newConstraints(e->m);\n        for(i=0;i<e->m;i++) {\n            if(i<e->gm) {\n                e->cs[i]=e->gcs[i];\n            } else {\n                e->cs[i]=csol[i-e->gm];\n            }\n        }\n        // just delete the array, not the elements\n        deleteConstraints(0,csol);\n    }\n    fprintf(stderr,\"  generated %d constraints\\n\",e->m);\n    e->vpsc = newIncVPSC(e->nv+e->nldv+e->ndv,e->vs,e->m,e->cs);\n#ifdef MOSEK\n    if(opt->mosek) {\n        if(e->mosekEnv!=NULL) {\n            mosek_delete(e->mosekEnv);\n        }\n        e->mosekEnv = mosek_init_sep(e->packedMat,e->nv+e->nldv,e->ndv,e->cs,e->m);\n    }\n#endif\n}\n\nvoid removeoverlaps(int n,float** coords, vsep_options* opt) {\n    int i;\n\tCMajEnvVPSC *e = initCMajVPSC(n,NULL,NULL,opt,0);\n    generateNonoverlapConstraints(e,1.0,coords,0,true,opt);\n    solveVPSC(e->vpsc);\n    for(i=0;i<n;i++) {\n        coords[0][i]=getVariablePos(e->vs[i]);\n    }\n    generateNonoverlapConstraints(e,1.0,coords,1,false,opt);\n    solveVPSC(e->vpsc);\n    for(i=0;i<n;i++) {\n        coords[1][i]=getVariablePos(e->vs[i]);\n    }\n    deleteCMajEnvVPSC(e);\n}\n\n/*\n unpack the \"ordering\" array into an array of DigColaLevel\n*/\nDigColaLevel* assign_digcola_levels(int *ordering, int n, int *level_inds, int num_divisions) {\n\tint i,j;\n\tDigColaLevel *l=N_GNEW(num_divisions+1,DigColaLevel);\n\t// first level\n\tl[0].num_nodes=level_inds[0];\n\tl[0].nodes=N_GNEW(l[0].num_nodes,int);\n\tfor(i=0;i<l[0].num_nodes;i++) {\n\t\tl[0].nodes[i]=ordering[i];\n\t}\n\t// second through second last level\n\tfor(i=1;i<num_divisions;i++) {\n\t\tl[i].num_nodes=level_inds[i]-level_inds[i-1];\n\t\tl[i].nodes=N_GNEW(l[i].num_nodes,int);\n\t\tfor(j=0;j<l[i].num_nodes;j++) {\n\t\t\tl[i].nodes[j]=ordering[level_inds[i-1]+j];\n\t\t}\n\t}\n\t// last level\n\tif (num_divisions>0) {\n\t\tl[num_divisions].num_nodes=n-level_inds[num_divisions-1];\n\t\tl[num_divisions].nodes=N_GNEW(l[num_divisions].num_nodes,int);\n\t\tfor(i=0;i<l[num_divisions].num_nodes;i++) {\n\t\t\tl[num_divisions].nodes[i]=ordering[level_inds[num_divisions-1]+i];\n\t\t}\n\t}\n\treturn l;\n}\nvoid delete_digcola_levels(DigColaLevel *l, int num_levels) {\n\tint i;\n\tfor(i=0;i<num_levels;i++) {\n\t\tfree(l[i].nodes);\n\t}\n\tfree(l);\n}\nvoid print_digcola_levels(FILE *logfile, DigColaLevel *levels, int num_levels) {\n\tfprintf(logfile,\"levels:\\n\");\n\tint i,j;\n\tfor(i=0;i<num_levels;i++) {\n\t\tfprintf(logfile,\"  l[%d]:\",i);\n\t\tfor(j=0;j<levels[i].num_nodes;j++) {\n\t\t\tfprintf(logfile,\"%d \",levels[i].nodes[j]);\n\t\t}\n\t\tfprintf(logfile,\"\\n\");\n\t}\n}\n/*********************\nget number of separation constraints based on the number of nodes in each level\nie, num_sep_constraints = sum_i^{num_levels-1} (|L[i]|+|L[i+1]|)\n**********************/\nint get_num_digcola_constraints(DigColaLevel *levels, int num_levels) {\n\tint i,nc=0;\n\tfor(i=1;i<num_levels;i++) {\n\t\tnc+=levels[i].num_nodes+levels[i-1].num_nodes;\n\t}\n\tnc+=levels[0].num_nodes+levels[num_levels-1].num_nodes;\n\treturn nc;\n}\n\n#endif /* DIGCOLA */\n\n// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=4:softtabstop=4 :\n"
  },
  {
    "path": "experimental/neatogen/quad_prog_vpsc.h",
    "content": "/**********************************************************\n*      Written by Tim Dwyer for the graphviz package      *\n*                http://www.graphviz.org/                 *\n*                                                         *\n**********************************************************/\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#ifndef _QUAD_PROG_VPSC_H_\n#define _QUAD_PROG_VPSC_H_\n\n#ifdef DIGCOLA\n\n#include \"defs.h\"\n#include \"digcola.h\"\n#ifdef MOSEK\n#include \"mosek_quad_solve.h\"\n#endif //MOSEK\n\ntypedef struct CMajEnvVPSC {\n\tfloat **A;\n\tfloat *packedMat;\n\tint nv;   // number of actual vars\n\tint nldv; // number of dummy nodes included in lap matrix\n\tint ndv;  // number of dummy nodes not included in lap matrix\n\tVariable **vs;\n\tint m; /* total number of constraints for next iteration */\n\tint gm; /* number of global constraints */\n\tConstraint **cs;\n\t/* global constraints are persistant throughout optimisation process */\n\tConstraint **gcs;\n\tVPSC *vpsc;\n\tfloat *fArray1; /* utility arrays - reusable memory */\n\tfloat *fArray2;\n\tfloat *fArray3;\n#ifdef MOSEK\n\tMosekEnv *mosekEnv;\n#endif // MOSEK\n} CMajEnvVPSC;\n\nextern CMajEnvVPSC* initCMajVPSC(int n, float *packedMat, vtx_data* graph, vsep_options *opt, int diredges);\n\nextern int constrained_majorization_vpsc(CMajEnvVPSC*, float*, float*, int);\n\nextern void deleteCMajEnvVPSC(CMajEnvVPSC *e);\nextern void generateNonoverlapConstraints(\n        CMajEnvVPSC* e,\n        float nsizeScale,\n        float** coords,\n        int k,\n\tbool transitiveClosure,\n\tvsep_options* opt\n);\n\nextern void removeoverlaps(int,float**,vsep_options*);\n\ntypedef struct {\n\tint *nodes;\n\tint num_nodes;\n} DigColaLevel;\n\n/*\n unpack the \"ordering\" array into an array of DigColaLevel (as defined above)\n*/\nextern DigColaLevel* assign_digcola_levels(int *ordering, int n, int *level_inds, int num_divisions);\nextern void delete_digcola_levels(DigColaLevel *l, int num_levels);\nextern void print_digcola_levels(FILE* logfile, DigColaLevel *levels, int num_levels);\nint get_num_digcola_constraints(DigColaLevel *levels, int num_levels);\n#endif \n\n#endif /* _QUAD_PROG_VPSC_H_ */\n\n#ifdef __cplusplus\n}\n#endif\n"
  },
  {
    "path": "experimental/neatogen/simple.h",
    "content": "/* $Id: simple.h,v 1.1.1.1 2004/12/23 04:05:16 ellson Exp $ $Revision: 1.1.1.1 $ */\n/* vim:set shiftwidth=4 ts=8: */\n\n/**********************************************************\n*      This software is part of the graphviz package      *\n*                http://www.graphviz.org/                 *\n*                                                         *\n*            Copyright (c) 1994-2004 AT&T Corp.           *\n*                and is licensed under the                *\n*            Common Public License, Version 1.0           *\n*                      by AT&T Corp.                      *\n*                                                         *\n*        Information and Software Systems Research        *\n*              AT&T Research, Florham Park NJ             *\n**********************************************************/\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n\n\n#include <stdio.h>\n#include \"pathplan.h\"\n\n#define MAXINTS  10000\t\t/* modify this line to reflect the max no. of \n\t\t\t\t   intersections you want reported -- 50000 seems to break the program */\n\n#define SLOPE(p,q) ( ( ( p.y ) - ( q.y ) ) / ( ( p.x ) - ( q.x ) ) )\n\n#define after(v) (((v)==((v)->poly->finish))?((v)->poly->start):((v)+1))\n#define prior(v) (((v)==((v)->poly->start))?((v)->poly->finish):((v)-1))\n\n    struct position {\n\tdouble x, y;\n    };\n\n\n    struct vertex {\n\tstruct position pos;\n\tstruct polygon *poly;\n\tstruct active_edge *active;\n    };\n\n    struct polygon {\n\tstruct vertex *start, *finish;\n    };\n\n    struct intersection {\n\tstruct vertex *firstv, *secondv;\n\tstruct polygon *firstp, *secondp;\n\tdouble x, y;\n    };\n\n    struct active_edge {\n\tstruct vertex *name;\n\tstruct active_edge *next, *last;\n    };\n    struct active_edge_list {\n\tstruct active_edge *first, *final;\n\tint number;\n    };\n    struct data {\n\tint nvertices, npolygons, ninters;\n    };\n\n#ifdef __cplusplus\n}\n#endif\n"
  },
  {
    "path": "experimental/neatogen/site.c",
    "content": "/* $Id: site.c,v 1.1.1.1 2004/12/23 04:05:16 ellson Exp $ $Revision: 1.1.1.1 $ */\n/* vim:set shiftwidth=4 ts=8: */\n\n/**********************************************************\n*      This software is part of the graphviz package      *\n*                http://www.graphviz.org/                 *\n*                                                         *\n*            Copyright (c) 1994-2004 AT&T Corp.           *\n*                and is licensed under the                *\n*            Common Public License, Version 1.0           *\n*                      by AT&T Corp.                      *\n*                                                         *\n*        Information and Software Systems Research        *\n*              AT&T Research, Florham Park NJ             *\n**********************************************************/\n\n#include \"mem.h\"\n#include \"site.h\"\n#include <math.h>\n\n\nint siteidx;\nSite *bottomsite;\n\nstatic Freelist sfl;\nstatic int nvertices;\n\nvoid siteinit()\n{\n    /* double sn; */\n\n    freeinit(&sfl, sizeof(Site));\n    nvertices = 0;\n    /* sn = nsites+4; */\n    /* sqrt_nsites = sqrt(sn); */\n}\n\n\nSite *getsite()\n{\n    return ((Site *) getfree(&sfl));\n}\n\ndouble dist(Site * s, Site * t)\n{\n    double ans;\n    double dx, dy;\n\n    dx = s->coord.x - t->coord.x;\n    dy = s->coord.y - t->coord.y;\n    ans = sqrt(dx * dx + dy * dy);\n    return ans;\n}\n\n\nvoid makevertex(Site * v)\n{\n    v->sitenbr = nvertices;\n    nvertices += 1;\n#ifdef STANDALONE\n    out_vertex(v);\n#endif\n}\n\n\nvoid deref(Site * v)\n{\n    v->refcnt -= 1;\n    if (v->refcnt == 0)\n\tmakefree(v, &sfl);\n}\n\nvoid ref(Site * v)\n{\n    v->refcnt += 1;\n}\n"
  },
  {
    "path": "experimental/neatogen/site.h",
    "content": "/* $Id: site.h,v 1.2 2005/02/24 00:57:33 ellson Exp $ $Revision: 1.2 $ */\n/* vim:set shiftwidth=4 ts=8: */\n\n/**********************************************************\n*      This software is part of the graphviz package      *\n*                http://www.graphviz.org/                 *\n*                                                         *\n*            Copyright (c) 1994-2004 AT&T Corp.           *\n*                and is licensed under the                *\n*            Common Public License, Version 1.0           *\n*                      by AT&T Corp.                      *\n*                                                         *\n*        Information and Software Systems Research        *\n*              AT&T Research, Florham Park NJ             *\n**********************************************************/\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n\n\n#ifndef SITE_H\n#define SITE_H\n\n#include \"geometry.h\"\n\n    /* Sites are also used as vertices on line segments */\n    typedef struct Site {\n\tPoint coord;\n\tint sitenbr;\n\tint refcnt;\n    } Site;\n\n    extern int siteidx;\n    extern Site *bottomsite;\n\n    extern void siteinit(void);\n    extern Site *getsite(void);\n    extern double dist(Site *, Site *);\t/* Distance between two sites */\n    extern void deref(Site *);\t/* Increment refcnt of site  */\n    extern void ref(Site *);\t/* Decrement refcnt of site  */\n    extern void makevertex(Site *);\t/* Transform a site into a vertex */\n#endif\n\n#ifdef __cplusplus\n}\n#endif\n"
  },
  {
    "path": "experimental/neatogen/smart_ini_x.c",
    "content": "/**********************************************************\n*      This software is part of the graphviz package      *\n*                http://www.graphviz.org/                 *\n*                                                         *\n*            Copyright (c) 1994-2004 AT&T Corp.           *\n*                and is licensed under the                *\n*            Common Public License, Version 1.0           *\n*                      by AT&T Corp.                      *\n*                                                         *\n*        Information and Software Systems Research        *\n*              AT&T Research, Florham Park NJ             *\n**********************************************************/\n\n#include \"digcola.h\"\n#ifdef DIGCOLA\n#include \"kkutils.h\"\n#include \"matrix_ops.h\"\n#include \"conjgrad.h\"\n\nstatic void\nstandardize(double* orthog, int nvtxs) \n{\n\tdouble len, avg = 0;\n    int i;\n\tfor (i=0; i<nvtxs; i++)\n\t\tavg+=orthog[i];\n\tavg/=nvtxs;\n\t\n\t/* centralize: */\n\tfor (i=0; i<nvtxs; i++)\n\t\torthog[i]-=avg;\n\t\n\t/* normalize: */\n\tlen = norm(orthog, 0, nvtxs-1);\n\tvecscale(orthog, 0, nvtxs-1, 1.0 / len, orthog);\n}\n\nstatic void\nmat_mult_vec_orthog(float** mat, int dim1, int dim2, double* vec, \n    double* result, double* orthog)\n{\n\t/* computes mat*vec, where mat is a dim1*dim2 matrix */\n\tint i,j;\n\tdouble sum;\n\t\n\tfor (i=0; i<dim1; i++) {\n\t\tsum=0;\n\t\tfor (j=0; j<dim2; j++) {\n\t\t\tsum += mat[i][j]*vec[j];\n\t\t}\n\t\tresult[i]=sum;\n\t}\n\tif (orthog!=NULL) {\n\t\tdouble alpha=-dot(result,0,dim1-1,orthog);\n\t\tscadd(result, 0, dim1-1, alpha, orthog);\t\n\t}\t\t\n}\n\nstatic void\npower_iteration_orthog(float** square_mat, int n, int neigs, \n     double** eigs, double* evals, double* orthog, double p_iteration_threshold)\n{\n\t/*\n\t * Power-Iteration with (I-orthog*orthog^T)*square_mat*(I-orthog*orthog^T)\n     */\n\n\tint i,j;\n\tdouble *tmp_vec = N_GNEW(n, double);\n\tdouble *last_vec = N_GNEW(n, double);\n\tdouble *curr_vector;\n\tdouble len;\n\tdouble angle;\n\tdouble alpha;\n\tint iteration;\n\tint largest_index;\n\tdouble largest_eval;\n\n\tdouble tol=1-p_iteration_threshold;\n\n\tif (neigs>=n) {\n\t\tneigs=n;\n\t}\n\n\tfor (i=0; i<neigs; i++) {\n\t\tcurr_vector = eigs[i];\n\t\t/* guess the i-th eigen vector */\nchoose:\n\t\tfor (j=0; j<n; j++) {\n\t\t\tcurr_vector[j] = rand()%100;\n\t\t}\n\n\t\tif (orthog!=NULL) {\n\t\t\talpha=-dot(orthog,0,n-1,curr_vector);\n\t\t\tscadd(curr_vector, 0, n-1, alpha, orthog);\t\n\t\t}\n\t\t\t// orthogonalize against higher eigenvectors\n\t\tfor (j=0; j<i; j++) {\n\t\t\talpha = -dot(eigs[j], 0, n-1, curr_vector);\n\t\t\tscadd(curr_vector, 0, n-1, alpha, eigs[j]);\n\t    }\n\t\tlen = norm(curr_vector, 0, n-1);\n\t\tif (len<1e-10) {\n\t\t\t/* We have chosen a vector colinear with prvious ones */\n\t\t\tgoto choose;\n\t\t}\n\t\tvecscale(curr_vector, 0, n-1, 1.0 / len, curr_vector);\t\n\t\titeration=0;\n\t\tdo {\n\t\t\titeration++;\n\t\t\tcpvec(last_vec,0,n-1,curr_vector);\n\t\t\t\n\t\t\tmat_mult_vec_orthog(square_mat,n,n,curr_vector,tmp_vec,orthog);\n\t\t\tcpvec(curr_vector,0,n-1,tmp_vec);\n\t\t\t\t\t\t\n\t\t\t/* orthogonalize against higher eigenvectors */\n\t\t\tfor (j=0; j<i; j++) {\n\t\t\t\talpha = -dot(eigs[j], 0, n-1, curr_vector);\n\t\t\t\tscadd(curr_vector, 0, n-1, alpha, eigs[j]);\n\t\t\t}\n\t\t\tlen = norm(curr_vector, 0, n-1);\n\t\t\tif (len<1e-10) {\n\t\t\t    /* We have reached the null space (e.vec. associated \n                 * with e.val. 0)\n                 */\n\t\t\t\tgoto exit;\n\t\t\t}\n\n\t\t\tvecscale(curr_vector, 0, n-1, 1.0 / len, curr_vector);\n\t\t\tangle = dot(curr_vector, 0, n-1, last_vec);\n\t\t} while (fabs(angle)<tol);\n        /* the Rayleigh quotient (up to errors due to orthogonalization):\n         * u*(A*u)/||A*u||)*||A*u||, where u=last_vec, and ||u||=1\n         */\n\t\tevals[i]=angle*len;\n\t}\nexit:\n\tfor (; i<neigs; i++) {\n\t\t/* compute the smallest eigenvector, which are \n\t\t * probably associated with eigenvalue 0 and for\n\t\t * which power-iteration is dangerous\n         */\n\t\tcurr_vector = eigs[i];\n\t\t/* guess the i-th eigen vector */\n\t\tfor (j=0; j<n; j++)\n\t\t\tcurr_vector[j] = rand()%100;\n\t\t/* orthogonalize against higher eigenvectors */\n\t\tfor (j=0; j<i; j++) {\n\t\t\talpha = -dot(eigs[j], 0, n-1, curr_vector);\n\t\t\tscadd(curr_vector, 0, n-1, alpha, eigs[j]);\n\t    }\n\t\tlen = norm(curr_vector, 0, n-1);\n\t\tvecscale(curr_vector, 0, n-1, 1.0 / len, curr_vector);\n\t\tevals[i]=0;\n\t\t\n\t}\n\n\t/* sort vectors by their evals, for overcoming possible mis-convergence: */\n\tfor (i=0; i<neigs-1; i++) {\n\t\tlargest_index=i;\n\t\tlargest_eval=evals[largest_index];\n\t\tfor (j=i+1; j<neigs; j++) {\n\t\t\tif (largest_eval<evals[j]) {\n\t\t\t\tlargest_index=j;\n\t\t\t\tlargest_eval=evals[largest_index];\n\t\t\t}\n\t\t}\n\t\tif (largest_index!=i) { // exchange eigenvectors:\n\t\t\tcpvec(tmp_vec,0,n-1,eigs[i]);\n\t\t\tcpvec(eigs[i],0,n-1,eigs[largest_index]);\n\t\t\tcpvec(eigs[largest_index],0,n-1,tmp_vec);\n\n\t\t\tevals[largest_index]=evals[i];\n\t\t\tevals[i]=largest_eval;\n\t\t}\n\t}\n\t\n\tfree (tmp_vec); free (last_vec);\n\n}\n\nstatic float* \ncompute_avgs(DistType** Dij, int n, float* all_avg) \n{\n\tfloat* row_avg = N_GNEW(n, float);\n\tint i,j;\n\tdouble sum=0, sum_row;\n\n\tfor (i=0; i<n; i++) {\n\t\tsum_row=0;\n\t\tfor (j=0; j<n; j++) {\n\t\t\tsum+=(double)Dij[i][j]*(double)Dij[i][j];\n\t\t\tsum_row+=(double)Dij[i][j]*(double)Dij[i][j];\n\t\t}\n\t\trow_avg[i]=(float)sum_row/n;\n\t}\n\t*all_avg=(float)sum/(n*n);\n    return row_avg;\n}\n\nstatic float**\ncompute_Bij(DistType** Dij, int n)\n{\n\tint i,j;\n\tfloat* storage = N_GNEW(n*n,float);\n\tfloat** Bij = N_GNEW(n, float*);\n\tfloat* row_avg; \n    float all_avg;\n\n\tfor (i=0; i<n; i++) \n\t\tBij[i] = storage+i*n;\n\n\trow_avg = compute_avgs(Dij, n, &all_avg);\t\n\tfor (i=0; i<n; i++) {\n\t\tfor (j=0; j<=i; j++) {\n\t\t\tBij[i][j]=-(float)Dij[i][j]*Dij[i][j]+row_avg[i]+row_avg[j]-all_avg;\n\t\t\tBij[j][i]=Bij[i][j];\n\t\t}\n\t}\n    free (row_avg);\n    return Bij;\n}\n\nstatic void\nCMDS_orthog(vtx_data* graph, int n, int dim, double** eigs, double tol, \n            double* orthog, DistType** Dij)\n{\n\tint i,j;\n\tfloat** Bij = compute_Bij(Dij, n);\n\tdouble* evals= N_GNEW(dim, double);\n\t\n\tdouble * orthog_aux = NULL;\n\tif (orthog!=NULL) {\n\t\torthog_aux = N_GNEW(n, double);\n\t\tfor (i=0; i<n; i++) {\n\t\t\torthog_aux[i]=orthog[i];\n\t\t}\n\t\tstandardize(orthog_aux,n);\n\t}\n    power_iteration_orthog(Bij, n, dim, eigs, evals, orthog_aux, tol);\n\t\n\tfor (i=0; i<dim; i++) {\n\t\tfor (j=0; j<n; j++) {\n\t\t\teigs[i][j]*=sqrt(fabs(evals[i])); \n\t\t}\n\t}\n\tfree (Bij[0]); free (Bij);\n\tfree (evals); free (orthog_aux);\n}\n\n#define SCALE_FACTOR 256\n\nvoid IMDS_given_dim(vtx_data* graph, int n, double* given_coords, \n       double* new_coords, double conj_tol)\n{\n\tint iterations1,iterations2, mat_mult_count1;\n\tint i,j;\n\tDistType** Dij;\n\tfloat* f_storage = NULL;\t\n\tdouble* x = given_coords;\t\n\tdouble uniLength;\n\tdouble* orthog_aux = NULL;\n\tdouble* y = new_coords;\n\tfloat** lap = N_GNEW(n, float*);\n\tfloat degree;\n\tdouble pos_i;\n\tdouble* balance = N_GNEW(n, double);\n\tdouble b;\n\tbool converged;\n\n\titerations1=mat_mult_count1=0; /* We don't compute the x-axis at all. */\n\n\tDij = compute_apsp(graph, n);\n\t\n\t/* scaling up the distances to enable an 'sqrt' operation later \n     * (in case distances are integers)\n     */\n\tfor (i=0; i<n; i++)\n\t\tfor (j=0; j<n; j++)\n\t\t\tDij[i][j]*=SCALE_FACTOR;\n\t\n\tassert(x!=NULL);\n\t{\n\t\tdouble sum1, sum2;\n\t\t/* scale x (given axis) to minimize the stress */\n\t\torthog_aux = N_GNEW(n, double);\n\t\tfor (i=0; i<n; i++) {\n\t\t\torthog_aux[i]=x[i];\n\t\t}\n\t\tstandardize(orthog_aux,n);\n\t\n\t\tfor (sum1=sum2=0,i=1; i<n; i++) {\n\t\t\tfor (j=0; j<i; j++) {\t\t\n\t\t\t\tsum1+=1.0/(Dij[i][j])*fabs(x[i]-x[j]);\n\t\t\t\tsum2+=1.0/(Dij[i][j]*Dij[i][j])*fabs(x[i]-x[j])*fabs(x[i]-x[j]);\n\t\t\t}\n\t\t}\n\t\tuniLength=sum1/sum2;\n\t\tfor (i=0; i<n; i++)\n\t\t\tx[i]*=uniLength;\n\t}\n\n\t/* smart ini: */\n\tCMDS_orthog(graph, n, 1, &y, conj_tol, x, Dij);\n\t\n\t/* Compute Laplacian: */\n\tf_storage = N_GNEW(n*n, float);\n\t\n\tfor (i=0; i<n; i++) {\n\t\tlap[i]=f_storage+i*n;\n\t\tdegree=0;\n\t\tfor (j=0; j<n; j++) {\n\t\t\tif (j==i)\n\t\t\t\tcontinue;\n\t\t\tdegree-=lap[i][j]=-1.0f/((float)Dij[i][j]*(float)Dij[i][j]); // w_{ij}\n\t\t\t\n\t\t}\n\t\tlap[i][i]=degree;\n\t}\n\t\n\n\t/* compute residual distances */\n\t/* if (x!=NULL)  */\n    {\n\t\tdouble diff;\n\t\tfor (i=1; i<n; i++) {\n\t\t\tpos_i=x[i];\t\t\n\t\t\tfor (j=0; j<i; j++) {\n\t\t\t\tdiff=(double)Dij[i][j]*(double)Dij[i][j]-(pos_i-x[j])*(pos_i-x[j]);\n\t\t\t\tDij[i][j]=Dij[j][i]=diff>0 ? (DistType)sqrt(diff) : 0;\n\t\t\t}\n\t\t}\n\t}\n\t\n\t/* Compute the balance vector: */\n\tfor (i=0; i<n; i++) {\n\t\tpos_i=y[i];\n\t\tbalance[i]=0;\n\t\tfor (j=0; j<n; j++) {\n\t\t\tif (j==i)\n\t\t\t\tcontinue;\n\t\t\tif (pos_i>=y[j]) {\n\t\t\t\tbalance[i]+=Dij[i][j]*(-lap[i][j]); // w_{ij}*delta_{ij}\n\t\t\t}\n\t\t\telse {\n\t\t\t\tbalance[i]-=Dij[i][j]*(-lap[i][j]); // w_{ij}*delta_{ij}\n\t\t\t}\n\t\t}\n\t}\n\n\tfor (converged=false,iterations2=0; iterations2<200 && !converged; iterations2++) {\n\t\tconjugate_gradient_f(lap, y, balance, n, conj_tol, n, true);\n\t\tconverged=true;\n\t\tfor (i=0; i<n; i++) {\n\t\t\tpos_i=y[i];\n\t\t\tb=0;\n\t\t\tfor (j=0; j<n; j++) {\n\t\t\t\tif (j==i)\n\t\t\t\t\tcontinue;\n\t\t\t\tif (pos_i>=y[j]) {\n\t\t\t\t\tb+=Dij[i][j]*(-lap[i][j]);\n\t\t\t\t\t\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tb-=Dij[i][j]*(-lap[i][j]);\n\t\t\t\t\t\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ((b != balance[i]) && (fabs(1-b/balance[i])>1e-5)) {\n\t\t\t\tconverged=false;\n\t\t\t\tbalance[i]=b;\n\t\t\t}\n\t\t}\n\t}\n\t\n\tfor (i=0; i<n; i++) {\n\t\tx[i] /= uniLength;\n\t\ty[i] /= uniLength;\n\t}\n\t\n\n\tfree (Dij[0]); free (Dij);\t\n\tfree (lap[0]); free (lap);\t\n\tfree (orthog_aux); free (balance);\t\n}\n\n#endif /* DIGCOLA */\n\n"
  },
  {
    "path": "experimental/neatogen/solve.c",
    "content": "/* $Id: solve.c,v 1.1.1.1 2004/12/23 04:05:16 ellson Exp $ $Revision: 1.1.1.1 $ */\n/* vim:set shiftwidth=4 ts=8: */\n\n/**********************************************************\n*      This software is part of the graphviz package      *\n*                http://www.graphviz.org/                 *\n*                                                         *\n*            Copyright (c) 1994-2004 AT&T Corp.           *\n*                and is licensed under the                *\n*            Common Public License, Version 1.0           *\n*                      by AT&T Corp.                      *\n*                                                         *\n*        Information and Software Systems Research        *\n*              AT&T Research, Florham Park NJ             *\n**********************************************************/\n\n\n/* solves the system ab=c using gauss reduction */\n#include <render.h>\n#include <math.h>\n#include <stdlib.h>\n#include <stdio.h>\n#define asub(i,j) a[(i)*n + (j)]\n\n\nvoid solve(double *a, double *b, double *c, int n)\n{\t\t\t\t/*a[n][n],b[n],c[n] */\n    double *asave, *csave;\n    double amax, dum, pivot;\n    register int i, ii, j;\n    register int k, m, mp;\n    register int istar, ip;\n    register int nm, nsq, t;\n\n    istar = 0;\t\t\t/* quiet warnings */\n    nsq = n * n;\n    asave = N_GNEW(nsq, double);\n    csave = N_GNEW(n, double);\n\n    for (i = 0; i < n; i++)\n\tcsave[i] = c[i];\n    for (i = 0; i < nsq; i++)\n\tasave[i] = a[i];\n    /* eliminate ith unknown */\n    nm = n - 1;\n    for (i = 0; i < nm; i++) {\n\t/* find largest pivot */\n\tamax = 0.;\n\tfor (ii = i; ii < n; ii++) {\n\t    dum = fabs(asub(ii, i));\n\t    if (dum < amax)\n\t\tcontinue;\n\t    istar = ii;\n\t    amax = dum;\n\t}\n\t/* return if pivot is too small */\n\tif (amax < 1.e-10)\n\t    goto bad;\n\t/* switch rows */\n\tfor (j = i; j < n; j++) {\n\t    t = istar * n + j;\n\t    dum = a[t];\n\t    a[t] = a[i * n + j];\n\t    a[i * n + j] = dum;\n\t}\n\tdum = c[istar];\n\tc[istar] = c[i];\n\tc[i] = dum;\n\t/*pivot */\n\tip = i + 1;\n\tfor (ii = ip; ii < n; ii++) {\n\t    pivot = a[ii * n + i] / a[i * n + i];\n\t    c[ii] = c[ii] - pivot * c[i];\n\t    for (j = 0; j < n; j++)\n\t\ta[ii * n + j] = a[ii * n + j] - pivot * a[i * n + j];\n\t}\n    }\n    /* return if last pivot is too small */\n    if (fabs(a[n * n - 1]) < 1.e-10)\n\tgoto bad;\n    b[n - 1] = c[n - 1] / a[n * n - 1];\n    /* back substitute */\n    for (k = 0; k < nm; k++) {\n\tm = n - k - 2;\n\tb[m] = c[m];\n\tmp = m + 1;\n\tfor (j = mp; j < n; j++)\n\t    b[m] = b[m] - a[m * n + j] * b[j];\n\tb[m] = b[m] / a[m * n + m];\n    }\n    /* restore original a,c */\n    for (i = 0; i < n; i++)\n\tc[i] = csave[i];\n    for (i = 0; i < nsq; i++)\n\ta[i] = asave[i];\n    free(asave);\n    free(csave);\n    return;\n  bad:\n    printf(\"ill-conditioned\\n\");\n    free(asave);\n    free(csave);\n    return;\n}\n"
  },
  {
    "path": "experimental/neatogen/stress.c",
    "content": "/* $Id: stress.c,v 1.3 2005/07/28 22:33:31 erg Exp $ $Revision: 1.3 $ */\n/* vim:set shiftwidth=4 ts=8: */\n\n/**********************************************************\n*      This software is part of the graphviz package      *\n*                http://www.graphviz.org/                 *\n*                                                         *\n*            Copyright (c) 1994-2004 AT&T Corp.           *\n*                and is licensed under the                *\n*            Common Public License, Version 1.0           *\n*                      by AT&T Corp.                      *\n*                                                         *\n*        Information and Software Systems Research        *\n*              AT&T Research, Florham Park NJ             *\n**********************************************************/\n\n\n#include \"neato.h\"\n#include \"dijkstra.h\"\n#include \"bfs.h\"\n#include \"pca.h\"\n#include \"matrix_ops.h\"\n#include \"conjgrad.h\"\n#include \"embed_graph.h\"\n#include \"kkutils.h\"\n#include \"stress.h\"\n#include <math.h>\n#include <stdlib.h>\n#include <time.h>\n\n#ifdef UNUSED\n /* Full dense stress optimization (equivalent to Kamada-Kawai's energy) */\n /* Slowest and most accurate optimization */\nstatic int stress_majorization_kD(vtx_data * graph,\t/* Input graph in sparse representation */\n\t\t\t\t  int n,\t/* Number of nodes */\n\t\t\t\t  int nedges_graph,\t/* Number of edges */\n\t\t\t\t  double **coords,\t/* coordinates of nodes (output layout) */\n\t\t\t\t  int dim,\t/* dimemsionality of layout */\n\t\t\t\t  int smart_ini,\t/* smart initialization */\n\t\t\t\t  int reweight_graph,\t/* difference model */\n\t\t\t\t  int maxi\t/* max iterations */\n    );\n\n /* Optimization of the stress function using sparse distance matrix */\n /* Faster than dense method, but less accurate */\nstatic int sparse_stress_majorization_kD(vtx_data * graph,\t/* Input graph in sparse representation */\n\t\t\t\t\t int n,\t/* Number of nodes */\n\t\t\t\t\t int nedges_graph,\t/* Number of edges */\n\t\t\t\t\t double **coords,\t/* coordinates of nodes (output layout)  */\n\t\t\t\t\t int dim,\t/* dimemsionality of layout */\n\t\t\t\t\t int smart_ini,\t/* smart initialization */\n\t\t\t\t\t int reweight_graph,\t/* difference model */\n\t\t\t\t\t int maxi,\t/* max iterations */\n\t\t\t\t\t int dist_bound,\t/* neighborhood in sparse distance matrix */\n\t\t\t\t\t int num_centers\t/* #pivots in sparse distance matrix */\n    );\n#endif\n\n /* Optimization of the stress function using sparse distance matrix, within a vector-space */\n /* Fastest and least accurate method */\nstatic int sparse_stress_subspace_majorization_kD(vtx_data * graph,\t/* Input graph in sparse representation */\n\t\t\t\t\t\t  int n,\t/* Number of nodes */\n\t\t\t\t\t\t  int nedges_graph,\t/* Number of edges */\n\t\t\t\t\t\t  double **coords,\t/* coordinates of nodes (output layout)  */\n\t\t\t\t\t\t  int dim,\t/* dimemsionality of layout */\n\t\t\t\t\t\t  int smart_ini,\t/* smart initialization */\n\t\t\t\t\t\t  int reweight_graph,\t/* difference model */\n\t\t\t\t\t\t  int maxi,\t/* max iterations */\n\t\t\t\t\t\t  int dist_bound,\t/* neighborhood in sparse distance matrix */\n\t\t\t\t\t\t  int num_centers\t/* #pivots in sparse distance matrix */\n    );\n\n#ifndef HAVE_DRAND48\nextern double drand48(void);\n#endif\n\n#define Dij2\t\t\t/* If defined, the terms in the stress energy are normalized \n\t\t\t\t   by d_{ij}^{-2} otherwise, they are normalized by d_{ij}^{-1}\n\t\t\t\t */\n\n#ifdef NONCORE\n/* Set 'max_nodes_in_mem' so that \n * 4*(max_nodes_in_mem^2) is smaller than the available memory (in bytes)\n * 4 = sizeof(float)\n */\n#define max_nodes_in_mem 18000\n#endif\n\n /* relevant when using sparse distance matrix not within subspace */\n#define smooth_pivots true\n\n/* dimensionality of subspace; relevant \n * when optimizing within subspace) \n */\n#define stress_pca_dim 50\n\n /* a structure used for storing sparse distance matrix */\ntypedef struct {\n    int nedges;\n    int *edges;\n    DistType *edist;\n    bool free_mem;\n} dist_data;\n\nstatic double compute_stressf(float **coords, float *lap, int dim, int n)\n{\n    /* compute the overall stress */\n\n    int i, j, l, neighbor, count;\n    double sum, dist, Dij;\n    sum = 0;\n    for (count = 0, i = 0; i < n - 1; i++) {\n\tcount++;\t\t/* skip diagonal entry */\n\tfor (j = 1; j < n - i; j++, count++) {\n\t    dist = 0;\n\t    neighbor = i + j;\n\t    for (l = 0; l < dim; l++) {\n\t\tdist +=\n\t\t    (coords[l][i] - coords[l][neighbor]) * (coords[l][i] -\n\t\t\t\t\t\t\t    coords[l]\n\t\t\t\t\t\t\t    [neighbor]);\n\t    }\n\t    dist = sqrt(dist);\n#ifdef Dij2\n\t    Dij = 1.0 / sqrt(lap[count]);\n\t    sum += (Dij - dist) * (Dij - dist) * (lap[count]);\n#else\n\t    Dij = 1.0 / lap[count];\n\t    sum += (Dij - dist) * (Dij - dist) * (lap[count]);\n#endif\n\t}\n    }\n\n    return sum;\n}\n\n#ifdef UNUSED\nstatic double compute_stress(double **coords, int **Dij, int dim, int n)\n{\n    /* compute the overall stress */\n\n    int i, j, l;\n    double sum, dist;\n    sum = 0;\n    for (i = 1; i < n; i++) {\n\tfor (j = 0; j < i; j++) {\n\t    dist = 0;\n\t    for (l = 0; l < dim; l++) {\n\t\tdist +=\n\t\t    (coords[l][i] - coords[l][j]) * (coords[l][i] -\n\t\t\t\t\t\t     coords[l][j]);\n\t    }\n\t    dist = sqrt(dist);\n#ifdef Dij2\n\t    sum +=\n\t\t(Dij[i][j] - dist) * (Dij[i][j] -\n\t\t\t\t      dist) / (Dij[i][j] * Dij[i][j]);\n#else\n\t    sum += (Dij[i][j] - dist) * (Dij[i][j] - dist) / Dij[i][j];\n#endif\n\t}\n    }\n\n    return sum;\n}\n#endif\n\nstatic double\ncompute_stress1(double **coords, dist_data * distances, int dim, int n)\n{\n    /* compute the overall stress */\n\n    int i, j, l, node;\n    double sum, dist, Dij;\n    sum = 0;\n    for (i = 0; i < n; i++) {\n\tfor (j = 0; j < distances[i].nedges; j++) {\n\t    node = distances[i].edges[j];\n\t    if (node <= i) {\n\t\tcontinue;\n\t    }\n\t    dist = 0;\n\t    for (l = 0; l < dim; l++) {\n\t\tdist +=\n\t\t    (coords[l][i] - coords[l][node]) * (coords[l][i] -\n\t\t\t\t\t\t\tcoords[l][node]);\n\t    }\n\t    dist = sqrt(dist);\n\t    Dij = distances[i].edist[j];\n#ifdef Dij2\n\t    sum += (Dij - dist) * (Dij - dist) / (Dij * Dij);\n#else\n\t    sum += (Dij - dist) * (Dij - dist) / Dij;\n#endif\n\t}\n    }\n\n    return sum;\n}\n\n/* initLayout:\n * Initialize node coordinates. If the node already has\n * a position, use it.\n * Return true if some node is fixed.\n */\nint\ninitLayout(vtx_data * graph, int n, int dim, double **coords)\n{\n    node_t *np;\n    double *xp;\n    double *yp;\n    double *pt;\n    int i, d;\n    int pinned = 0;\n\n    xp = coords[0];\n    yp = coords[1];\n    for (i = 0; i < n; i++) {\n\tnp = graph[i].np;\n\tif (hasPos(np)) {\n\t    pt = ND_pos(np);\n\t    *xp++ = *pt++;\n\t    *yp++ = *pt++;\n\t    if (dim > 2) {\n\t\tfor (d = 2; d < dim; d++)\n\t\t    coords[d][i] = *pt++;\n\t    }\n\t    if (isFixed(np))\n\t\tpinned = 1;\n\t} else {\n\t    *xp++ = drand48();\n\t    *yp++ = drand48();\n\t    if (dim > 2) {\n\t\tfor (d = 2; d < dim; d++)\n\t\t    coords[d][i] = drand48();\n\t    }\n\t}\n    }\n\n    for (d = 0; d < dim; d++)\n\torthog1(n, coords[d]);\n\n    return pinned;\n}\n\nfloat*\ncircuitModel(vtx_data * graph, int nG)\n{\n    int i, j, e, rv, count;\n    float *Dij = N_NEW(nG * (nG + 1) / 2, float);\n    double **Gm;\n    double **Gm_inv;\n\n    Gm = new_array(nG, nG, 0.0);\n    Gm_inv = new_array(nG, nG, 0.0);\n\n    /* set non-diagonal entries */\n    if (graph->ewgts) {\n\tfor (i = 0; i < nG; i++) {\n\t    for (e = 1; e < graph[i].nedges; e++) {\n\t\tj = graph[i].edges[e];\n\t\t/* conductance is 1/resistance */\n\t\tGm[i][j] = Gm[j][i] = -1.0 / graph[i].ewgts[e];\t/* negate */\n\t    }\n\t}\n    } else {\n\tfor (i = 0; i < nG; i++) {\n\t    for (e = 1; e < graph[i].nedges; e++) {\n\t\tj = graph[i].edges[e];\n\t\t/* conductance is 1/resistance */\n\t\tGm[i][j] = Gm[j][i] = -1.0;\t/* ewgts are all 1 */\n\t    }\n\t}\n    }\n\n    rv = solveCircuit(nG, Gm, Gm_inv);\n\n    if (rv) {\n\tfloat v;\n\tcount = 0;\n\tfor (i = 0; i < nG; i++) {\n\t    for (j = i; j < nG; j++) {\n\t\tif (i == j)\n\t\t    v = 0.0;\n\t\telse\n\t\t    v = (float) (Gm_inv[i][i] + Gm_inv[j][j] -\n\t\t\t\t 2.0 * Gm_inv[i][j]);\n\t\tDij[count++] = v;\n\t    }\n\t}\n    } else {\n\tfree(Dij);\n\tDij = NULL;\n    }\n    free_array(Gm);\n    free_array(Gm_inv);\n    return Dij;\n}\n\n#ifdef UNUSED\nint stress_majorization_kD(vtx_data * graph,\t/* Input graph in sparse representation */\n\t\t\t   int n,\t/* Number of nodes */\n\t\t\t   int nedges_graph,\t/* Number of edges */\n\t\t\t   double **coords,\t/* coordinates of nodes(output layout)  */\n\t\t\t   int dim,\t/* dimemsionality of layout */\n\t\t\t   int smart_ini,\t/* smart initialization */\n\t\t\t   int reweight_graph,\t/* difference model */\n\t\t\t   int n_iterations\t/* max #iterations */\n    )\n{\n    int iterations;\t\t/* output: number of iteration of the process */\n    double conj_tol = tolerance_cg;\t/* tolerance of Conjugate Gradient */\n    DistType **Dij;\n    float *f_storage;\n    float **lap;\n    double degree;\n    double dist_ij;\n    double *b;\n    double L_ij;\n    double old_stress, new_stress;\n    bool converged;\n\n\t/*************************************************\n\t** Computation of full, dense, unrestricted k-D ** \n\t** stress minimization by majorization          **    \n\t*************************************************/\n\n    int i, j, k;\n\n\t/*************************************************\n\t* Compute the all-pairs-shortest-distances matrix *\n\t*************************************************/\n\n    if (!reweight_graph) {\n\t/* unweighted computation using BFS */\n\tDij = compute_apsp(graph, n);\n    } else {\n\t/* weight graph to separate high-degree nodes */\n\t/* and perform slower Dijkstra-based computation */\n\tDij = compute_apsp_artifical_weights(graph, n);\n    }\n\n\t/*************************************************\n\t** Layout initialization **\n\t*************************************************/\n\n    if (smart_ini) {\n\t/* optimize layout quickly within subspace */\n\tsparse_stress_subspace_majorization_kD(graph, n, nedges_graph,\n\t\t\t\t\t       coords, dim, smart_ini,\n\t\t\t\t\t       reweight_graph, 50,\n\t\t\t\t\t       neighborhood_radius_subspace,\n\t\t\t\t\t       num_pivots_stress);\n    } else {\n\tinitLayout(graph, n, dim, coords);\n    }\n\n\t/*************************************************\n\t** Laplacian computation **\n\t*************************************************/\n\n    lap = N_GNEW(n, float *);\n    f_storage = N_GNEW(n * n, float);\n    for (i = 0; i < n; i++) {\n\tlap[i] = f_storage + i * n;\n\tdegree = 0;\n\tfor (j = 0; j < n; j++) {\n\t    if (j == i)\n\t\tcontinue;\n#ifdef Dij2\n\t    degree -= lap[i][j] = -1.0f / ((float) Dij[i][j] * (float) Dij[i][j]);\t/* cast Dij to float to prevent overflow */\n#else\n\t    degree -= lap[i][j] = -1.0f / Dij[i][j];\n#endif\n\t}\n\tlap[i][i] = (float) (degree);\n    }\n\n\t/*************************************************\n\t Layout optimization\n\t*************************************************/\n\n    b = N_GNEW(n, double);\n    old_stress = compute_stress(coords, Dij, dim, n);\n    for (converged = false, iterations = 0;\n\t iterations < n_iterations && !converged; iterations++) {\n\n\t/* Axis-by-axis optimization: */\n\tfor (k = 0; k < dim; k++) {\n\t    /* compute the vector b */\n\t    /* multiply on-the-fly with distance-based laplacian */\n\t    /* (for saving storage we don't construct this Laplacian explicitly) */\n\t    for (i = 0; i < n; i++) {\n\t\tdegree = 0;\n\t\tb[i] = 0;\n\t\tfor (j = 0; j < n; j++) {\n\t\t    if (j == i)\n\t\t\tcontinue;\n\t\t    dist_ij = distance_kD(coords, dim, i, j);\n\t\t    if (dist_ij > 1e-30) {\t/* skip zero distances */\n\t\t\t/* calculate L_ij := w_{ij}*d_{ij}/dist_{ij} */\n#ifdef Dij2\n\t\t\tL_ij = (float) (-1 / (dist_ij * Dij[i][j]));\n#else\n\t\t\tL_ij = (float) (-1 / dist_ij);\n#endif\n\t\t\tdegree -= L_ij;\n\t\t\tb[i] += L_ij * coords[k][j];\n\t\t    }\n\t\t}\n\t\tb[i] += degree * coords[k][i];\n\t    }\n\t    conjugate_gradient_f(lap, coords[k], b, n, conj_tol, n, true);\n\t}\n\n\tif ((converged = (iterations % 2 == 0))) {\t/* check for convergence every two iterations */\n\t    new_stress = compute_stress(coords, Dij, dim, n);\n\t    converged =\n\t\tfabs(new_stress - old_stress) / (new_stress + 1e-10) <\n\t\tEpsilon;\n\t    old_stress = new_stress;\n\t    if (Verbose && (iterations % 10 == 0)) {\n\t\tfprintf(stderr, \"%.3f \", new_stress);\n\t\tif (iterations % 100 == 0)\n\t\t    fprintf(stderr, \"\\n\");\n\t    }\n\t}\n    }\n    if (Verbose)\n\tfprintf(stderr, \"\\nfinal e = %f\\n\",\n\t\tcompute_stress(coords, Dij, dim, n));\n\n\n    free(Dij[0]);\n    free(Dij);\n    free(lap[0]);\n    free(lap);\n    free(b);\n\n    return (iterations);\n}\n\nstatic void\nlocal_beautify_kD(int *nodes, int num_nodes, vtx_data * graph, int n,\n\t\t  int dist_bound, int reweight_graph, double **coords,\n\t\t  int dim)\n{\n    /* Optimize locally the k-D position of each of the nodes in 'nodes' */\n    /* sing majorization.  */\n    /* Here, in each iteration only a single node is mobile */\n\n    int i, j, k;\n    int *visited_nodes;\n    DistType *dist;\n    double *weights;\n    Queue Q;\n    int num_visited_nodes;\n    double dist_ij;\n    int v, neighbor;\n    double dist_1d;\n    double total_wgts;\n    double *newpos;\n    double max_diff;\n\n    if (dist_bound <= 0) {\n\treturn;\n    }\n\n    visited_nodes = N_GNEW(n, int);\n    dist = N_GNEW(n, DistType);\n    weights = N_GNEW(n, double);\n    newpos = N_GNEW(dim, double);\n    mkQueue(&Q, n);\n\n    /* initialize dist to -1, important for bfs_bounded */\n    for (i = 0; i < n; i++) {\n\tdist[i] = -1;\n    }\n\n    for (i = 0; i < num_nodes; i++) {\n\tv = nodes[i];\n\tif (reweight_graph) {\n\t    num_visited_nodes =\n\t\tdijkstra_bounded(v, graph, n, dist, dist_bound,\n\t\t\t\t visited_nodes);\n\t} else {\n\t    num_visited_nodes =\n\t\tbfs_bounded(v, graph, n, dist, &Q, dist_bound,\n\t\t\t    visited_nodes);\n\t}\n\n\ttotal_wgts = 0;\n\tfor (j = 0; j < num_visited_nodes; j++) {\n\t    neighbor = visited_nodes[j];\n\t    if (neighbor != v) {\n#ifdef Dij2\n\t\ttotal_wgts += weights[j] =\n\t\t    1.0 / ((double) dist[neighbor] *\n\t\t\t   (double) dist[neighbor]);\n#else\n\t\ttotal_wgts += weights[j] = 1.0 / (double) dist[neighbor];\n#endif\n\t    }\n\t}\n\n\tif (total_wgts == 0) {\t/* no neighbors to current node */\n\t    continue;\n\t}\n\n\tdo {\n\t    for (k = 0; k < dim; newpos[k++] = 0);\n\n\t    for (j = 0; j < num_visited_nodes; j++) {\n\t\tneighbor = visited_nodes[j];\n\t\tif (neighbor == v) {\n\t\t    continue;\n\t\t}\n\t\tfor (k = 0; k < dim; k++) {\n\t\t    dist_1d = coords[k][v] - coords[k][neighbor];\n\t\t    dist_ij = distance_kD(coords, dim, v, neighbor);\n\t\t    newpos[k] +=\n\t\t\tweights[j] * (coords[k][neighbor] +\n\t\t\t\t      dist[neighbor] * dist_1d / dist_ij);\n\t\t}\n\t    }\n\t    max_diff = 0;\n\t    for (k = 0; k < dim; k++) {\n\t\tnewpos[k] /= total_wgts;\n\t\tmax_diff =\n\t\t    MAX(max_diff,\n\t\t\tfabs(newpos[k] - coords[k][v]) / fabs(newpos[k] +\n\t\t\t\t\t\t\t      1e-20));\n\t\tcoords[k][v] = newpos[k];\n\t    }\n\t} while (max_diff > Epsilon);\n\n\t/* initialize 'dist' for next run of 'bfs_bounded' */\n\tfor (j = 0; j < num_visited_nodes; j++) {\n\t    dist[visited_nodes[j]] = -1;\n\t}\n    }\n\n    free(visited_nodes);\n    free(dist);\n    free(weights);\n    free(newpos);\n    freeQueue(&Q);\n}\n\nint sparse_stress_majorization_kD(vtx_data * graph,\t/* Input graph in sparse representation */\n\t\t\t\t  int n,\t/* Number of nodes */\n\t\t\t\t  int nedges_graph,\t/* Number of edges */\n\t\t\t\t  double **coords,\t/* coordinates of nodes (output layout)  */\n\t\t\t\t  int dim,\t/* dimemsionality of layout */\n\t\t\t\t  int smart_ini,\t/* smart initialization */\n\t\t\t\t  int reweight_graph,\t/* difference model */\n\t\t\t\t  int n_iterations,\t/* max #iterations */\n\t\t\t\t  int dist_bound,\t/* neighborhood size in sparse distance matrix    */\n\t\t\t\t  int num_centers\t/* #pivots in sparse distance matrix  */\n    )\n{\n    int iterations;\n    double conj_tol = tolerance_cg;\t/* tolerance of Conjugate Gradient */\n\n\t/*************************************************\n\t   Computation of pivot-based, sparse, unrestricted   \n\t   k-D  stress minimization by majorization               \n\t*************************************************/\n\n    int i, j, k;\n    int node;\n    /* if i is a pivot than CenterIndex[i] is  its index, otherwise CenterIndex[i]= -1 */\n    int *CenterIndex;\n    int *invCenterIndex;\t/* list the pivot nodes  */\n    Queue Q;\n    float *old_weights;\n    /* this matrix stores the distance  between each node and each \"center\" */\n    DistType **Dij;\n    /* this vector stores the distances of each node to the selected \"centers\" */\n    DistType *dist;\n    DistType *storage;\n    DistType max_dist;\n    int *visited_nodes;\n    dist_data *distances;\n    int available_space;\n    int *storage1 = NULL;\n    DistType *storage2 = NULL;\n    int num_visited_nodes;\n    int num_neighbors;\n    int index;\n    int nedges;\n    DistType *dist_list;\n    vtx_data *lap;\n    int *edges;\n    float *ewgts;\n    double degree;\n    double dist_ij;\n    double *b;\n    double L_ij;\n    double old_stress, new_stress;\n    bool converged;\n\n\t/*************************************************\n\t   Layout initialization  \n\t*************************************************/\n\n    if (smart_ini) {\n\t/* optimize layout quickly within subspace */\n\tsparse_stress_subspace_majorization_kD(graph, n, nedges_graph,\n\t\t\t\t\t       coords, dim, smart_ini,\n\t\t\t\t\t       reweight_graph, 50,\n\t\t\t\t\t       dist_bound, num_centers);\n    } else {\n\tinitLayout(graph, n, dim, coords);\n    }\n\n\t/*************************************************\n     Compute the sparse-shortest-distances matrix 'distances' \n\t*************************************************/\n\n    CenterIndex = N_GNEW(n, int);\n    for (i = 0; i < n; i++) {\n\tCenterIndex[i] = -1;\n    }\n    invCenterIndex = NULL;\n\n    mkQueue(&Q, n);\n    old_weights = graph[0].ewgts;\n\n    if (reweight_graph) {\n\t/* weight graph to separate high-degree nodes */\n\t/* in the future, perform slower Dijkstra-based computation */\n\tcompute_new_weights(graph, n);\n    }\n\n    /* compute sparse distance matrix */\n    /* first select 'num_centers' pivots from which we compute distance */\n    /* to all other nodes */\n\n    Dij = NULL;\n    dist = N_GNEW(n, DistType);\n\n    if (num_centers == 0) {\t/* no pivots, skip pivots-to-nodes distance calculation */\n\tgoto after_pivots_selection;\n    }\n\n    invCenterIndex = N_GNEW(num_centers, int);\t/* list the pivot nodes  */\n\n    storage = N_GNEW(n * num_centers, DistType);\n    Dij = N_GNEW(num_centers, DistType *);\n    for (i = 0; i < num_centers; i++)\n\tDij[i] = storage + i * n;\n\n    /* select 'num_centers' pivots that are uniformaly spreaded over the graph */\n\n    /* the first pivots is selected randomly */\n    node = rand() % n;\n    CenterIndex[node] = 0;\n    invCenterIndex[0] = node;\n\n    if (reweight_graph) {\n\tdijkstra(node, graph, n, Dij[0]);\n    } else {\n\tbfs(node, graph, n, Dij[0], &Q);\n    }\n\n    /* find the most distant node from first pivot */\n    max_dist = 0;\n    for (i = 0; i < n; i++) {\n\tdist[i] = Dij[0][i];\n\tif (dist[i] > max_dist) {\n\t    node = i;\n\t    max_dist = dist[i];\n\t}\n    }\n    /* select other num_centers-1 nodes as pivots */\n    for (i = 1; i < num_centers; i++) {\n\tCenterIndex[node] = i;\n\tinvCenterIndex[i] = node;\n\tif (reweight_graph) {\n\t    dijkstra(node, graph, n, Dij[i]);\n\t} else {\n\t    bfs(node, graph, n, Dij[i], &Q);\n\t}\n\tmax_dist = 0;\n\tfor (j = 0; j < n; j++) {\n\t    dist[j] = MIN(dist[j], Dij[i][j]);\n\t    if (dist[j] > max_dist\n\t\t|| (dist[j] == max_dist && rand() % (j + 1) == 0)) {\n\t\tnode = j;\n\t\tmax_dist = dist[j];\n\t    }\n\t}\n    }\n\n  after_pivots_selection:\n\n    /* Construct a sparse distance matrix 'distances' */\n\n    /* initialize 'dist' to -1, important for 'bfs_bounded(..)' */\n    for (i = 0; i < n; i++) {\n\tdist[i] = -1;\n    }\n\n    visited_nodes = N_GNEW(n, int);\n    distances = N_GNEW(n, dist_data);\n    available_space = 0;\n    nedges = 0;\n    for (i = 0; i < n; i++) {\n\tif (CenterIndex[i] >= 0) {\t/* a pivot node */\n\t    distances[i].edges = N_GNEW(n - 1, int);\n\t    distances[i].edist = N_GNEW(n - 1, DistType);\n\t    distances[i].nedges = n - 1;\n\t    nedges += n - 1;\n\t    distances[i].free_mem = true;\n\t    index = CenterIndex[i];\n\t    for (j = 0; j < i; j++) {\n\t\tdistances[i].edges[j] = j;\n\t\tdistances[i].edist[j] = Dij[index][j];\n\t    }\n\t    for (j = i + 1; j < n; j++) {\n\t\tdistances[i].edges[j - 1] = j;\n\t\tdistances[i].edist[j - 1] = Dij[index][j];\n\t    }\n\t    continue;\n\t}\n\n\t/* a non pivot node */\n\n\tif (dist_bound > 0) {\n\t    if (reweight_graph) {\n\t\tnum_visited_nodes =\n\t\t    dijkstra_bounded(i, graph, n, dist, dist_bound,\n\t\t\t\t     visited_nodes);\n\t    } else {\n\t\tnum_visited_nodes =\n\t\t    bfs_bounded(i, graph, n, dist, &Q, dist_bound,\n\t\t\t\tvisited_nodes);\n\t    }\n\t    /* filter the pivots out of the visited nodes list, and the self loop: */\n\t    for (j = 0; j < num_visited_nodes;) {\n\t\tif (CenterIndex[visited_nodes[j]] < 0\n\t\t    && visited_nodes[j] != i) {\n\t\t    /* not a pivot or self loop */\n\t\t    j++;\n\t\t} else {\n\t\t    dist[visited_nodes[j]] = -1;\n\t\t    visited_nodes[j] = visited_nodes[--num_visited_nodes];\n\t\t}\n\t    }\n\t} else {\n\t    num_visited_nodes = 0;\n\t}\n\tnum_neighbors = num_visited_nodes + num_centers;\n\tif (num_neighbors > available_space) {\n\t    available_space = (dist_bound + 1) * n;\n\t    storage1 = N_GNEW(available_space, int);\n\t    storage2 = N_GNEW(available_space, DistType);\n\t    distances[i].free_mem = true;\n\t} else {\n\t    distances[i].free_mem = false;\n\t}\n\tdistances[i].edges = storage1;\n\tdistances[i].edist = storage2;\n\tdistances[i].nedges = num_neighbors;\n\tnedges += num_neighbors;\n\tfor (j = 0; j < num_visited_nodes; j++) {\n\t    storage1[j] = visited_nodes[j];\n\t    storage2[j] = dist[visited_nodes[j]];\n\t    dist[visited_nodes[j]] = -1;\n\t}\n\t/* add all pivots: */\n\tfor (j = num_visited_nodes; j < num_neighbors; j++) {\n\t    index = j - num_visited_nodes;\n\t    storage1[j] = invCenterIndex[index];\n\t    storage2[j] = Dij[index][i];\n\t}\n\n\tstorage1 += num_neighbors;\n\tstorage2 += num_neighbors;\n\tavailable_space -= num_neighbors;\n    }\n\n    free(dist);\n    free(visited_nodes);\n\n\n    if (Dij != NULL) {\n\tfree(Dij[0]);\n\tfree(Dij);\n    }\n\n\t/*************************************************\n\t   Laplacian computation   \n\t*************************************************/\n\n    lap = N_GNEW(n, vtx_data);\n    edges = N_GNEW(nedges + n, int);\n    ewgts = N_GNEW(nedges + n, float);\n    for (i = 0; i < n; i++) {\n\tlap[i].edges = edges;\n\tlap[i].ewgts = ewgts;\n\tlap[i].nedges = distances[i].nedges + 1;\t/*add the self loop */\n\tdist_list = distances[i].edist - 1;\t/* '-1' since edist[0] goes for number '1' entry in the lap */\n\tdegree = 0;\n\tfor (j = 1; j < lap[i].nedges; j++) {\n\t    edges[j] = distances[i].edges[j - 1];\n#ifdef Dij2\n\t    ewgts[j] = (float) -1.0 / ((float) dist_list[j] * (float) dist_list[j]);\t/* cast to float to prevent overflow */\n#else\n\t    ewgts[j] = -1.0 / (float) dist_list[j];\n#endif\n\t    degree -= ewgts[j];\n\t}\n\tedges[0] = i;\n\tewgts[0] = (float) degree;\n\tedges += lap[i].nedges;\n\tewgts += lap[i].nedges;\n    }\n\n\t/*************************************************\n\t   Layout optimization    \n\t*************************************************/\n\n    b = N_GNEW(n, double);\n    old_stress = compute_stress1(coords, distances, dim, n), new_stress;\n    for (converged = false, iterations = 0;\n\t iterations < n_iterations && !converged; iterations++) {\n\n\t/* Axis-by-axis optimization: */\n\tfor (k = 0; k < dim; k++) {\n\t    /* compute the vector b */\n\t    /* multiply on-the-fly with distance-based laplacian */\n\t    /* (for saving storage we don't construct this Lap explicitly) */\n\t    for (i = 0; i < n; i++) {\n\t\tdegree = 0;\n\t\tb[i] = 0;\n\t\tdist_list = distances[i].edist - 1;\n\t\tedges = lap[i].edges;\n\t\tewgts = lap[i].ewgts;\n\t\tfor (j = 1; j < lap[i].nedges; j++) {\n\t\t    node = edges[j];\n\t\t    dist_ij = distance_kD(coords, dim, i, node);\n\t\t    if (dist_ij > 1e-30) {\t/* skip zero distances */\n\t\t\tL_ij = -ewgts[j] * dist_list[j] / dist_ij;\t/* L_ij=w_{ij}*d_{ij}/dist_{ij} */\n\t\t\tdegree -= L_ij;\n\t\t\tb[i] += L_ij * coords[k][node];\n\t\t    }\n\t\t}\n\t\tb[i] += degree * coords[k][i];\n\t    }\n\t    conjugate_gradient(lap, coords[k], b, n, conj_tol, n);\n\t}\n\n\tif ((converged = (iterations % 2 == 0))) {\t/* check for convergence each two iterations */\n\t    new_stress = compute_stress1(coords, distances, dim, n);\n\t    converged =\n\t\tfabs(new_stress - old_stress) / (new_stress + 1e-10) <\n\t\tEpsilon;\n\t    old_stress = new_stress;\n\t}\n    }\n    free(b);\n\n    if (smooth_pivots) {\n\t/* relocate the pivots, so they do not break out of the layout */\n\tlocal_beautify_kD(invCenterIndex, num_centers, graph, n,\n\t\t\t  dist_bound, reweight_graph, coords, dim);\n    }\n\n    if (reweight_graph) {\t/* do it only after the local beautification */\n\trestore_old_weights(graph, n, old_weights);\n    }\n\n    for (i = 0; i < n; i++) {\n\tif (distances[i].free_mem) {\n\t    free(distances[i].edges);\n\t    free(distances[i].edist);\n\t}\n    }\n\n    free(distances);\n    free(lap[0].edges);\n    free(lap[0].ewgts);\n    free(lap);\n    free(CenterIndex);\n    free(invCenterIndex);\n    freeQueue(&Q);\n    return iterations;\n}\n#endif\t\t\t\t/* UNUSED */\n\n/* sparse_stress_subspace_majorization_kD:\n *\n * NOTE: We use integral shortest path values here, assuming\n * this is only to get an initial layout. In general, if edge lengths\n * are involved, we may end up with 0 length edges. \n */\nstatic int sparse_stress_subspace_majorization_kD(vtx_data * graph,\t/* Input graph in sparse representation */\n\t\t\t\t\t\t  int n,\t/* Number of nodes */\n\t\t\t\t\t\t  int nedges_graph,\t/* Number of edges */\n\t\t\t\t\t\t  double **coords,\t/* coordinates of nodes (output layout)  */\n\t\t\t\t\t\t  int dim,\t/* dimemsionality of layout */\n\t\t\t\t\t\t  int smart_ini,\t/* smart initialization */\n\t\t\t\t\t\t  int reweight_graph,\t/* difference model */\n\t\t\t\t\t\t  int n_iterations,\t/* max #iterations */\n\t\t\t\t\t\t  int dist_bound,\t/* neighborhood size in sparse distance matrix    */\n\t\t\t\t\t\t  int num_centers\t/* #pivots in sparse distance matrix  */\n    )\n{\n    int iterations;\t\t/* output: number of iteration of the process */\n\n    double conj_tol = tolerance_cg;\t/* tolerance of Conjugate Gradient */\n\n\t/*************************************************\n\t** Computation of pivot-based, sparse, subspace-restricted **\n\t** k-D  stress minimization by majorization                **    \n\t*************************************************/\n\n    int i, j, k, node;\n\n\t/*************************************************\n\t** First compute the subspace in which we optimize     **\n\t** The subspace is  the high-dimensional embedding     **\n\t*************************************************/\n\n    int subspace_dim = MIN(stress_pca_dim, n);\t/* overall dimensionality of subspace */\n    double **subspace = N_GNEW(subspace_dim, double *);\n    double *d_storage = N_GNEW(subspace_dim * n, double);\n    int num_centers_local;\n    DistType **full_coords;\n    /* if i is a pivot than CenterIndex[i] is its index, otherwise CenterIndex[i]= -1 */\n    int *CenterIndex;\n    int *invCenterIndex;\t/* list the pivot nodes  */\n    Queue Q;\n    float *old_weights;\n    /* this matrix stores the distance between  each node and each \"center\" */\n    DistType **Dij;\n    /* this vector stores the distances of each node to the selected \"centers\" */\n    DistType *dist;\n    DistType max_dist;\n    DistType *storage;\n    int *visited_nodes;\n    dist_data *distances;\n    int available_space;\n    int *storage1 = NULL;\n    DistType *storage2 = NULL;\n    int num_visited_nodes;\n    int num_neighbors;\n    int index;\n    int nedges;\n    DistType *dist_list;\n    vtx_data *lap;\n    int *edges;\n    float *ewgts;\n    double degree;\n    double **directions;\n    float **tmp_mat;\n    float **matrix;\n    double dist_ij;\n    double *b;\n    double *b_restricted;\n    double L_ij;\n    double old_stress, new_stress;\n    bool converged;\n\n    for (i = 0; i < subspace_dim; i++) {\n\tsubspace[i] = d_storage + i * n;\n    }\n\n    /* compute PHDE: */\n    num_centers_local = MIN(n, MAX(2 * subspace_dim, 50));\n    full_coords = NULL;\n    /* High dimensional embedding */\n    embed_graph(graph, n, num_centers_local, &full_coords, reweight_graph);\n    /* Centering coordinates */\n    center_coordinate(full_coords, n, num_centers_local);\n    /* PCA */\n    PCA_alloc(full_coords, num_centers_local, n, subspace, subspace_dim);\n\n    free(full_coords[0]);\n    free(full_coords);\n\n\t/*************************************************\n\t** Compute the sparse-shortest-distances matrix 'distances' **\n\t*************************************************/\n\n    CenterIndex = N_GNEW(n, int);\n    for (i = 0; i < n; i++) {\n\tCenterIndex[i] = -1;\n    }\n    invCenterIndex = NULL;\n\n    mkQueue(&Q, n);\n    old_weights = graph[0].ewgts;\n\n    if (reweight_graph) {\n\t/* weight graph to separate high-degree nodes */\n\t/* in the future, perform slower Dijkstra-based computation */\n\tcompute_new_weights(graph, n);\n    }\n\n    /* compute sparse distance matrix */\n    /* first select 'num_centers' pivots from which we compute distance */\n    /* to all other nodes */\n\n    Dij = NULL;\n    dist = N_GNEW(n, DistType);\n    if (num_centers == 0) {\t/* no pivots, skip pivots-to-nodes distance calculation */\n\tgoto after_pivots_selection;\n    }\n\n    invCenterIndex = N_GNEW(num_centers, int);\n\n    storage = N_GNEW(n * num_centers, DistType);\n    Dij = N_GNEW(num_centers, DistType *);\n    for (i = 0; i < num_centers; i++)\n\tDij[i] = storage + i * n;\n\n    /* select 'num_centers' pivots that are uniformaly spreaded over the graph */\n\n    /* the first pivots is selected randomly */\n    node = rand() % n;\n    CenterIndex[node] = 0;\n    invCenterIndex[0] = node;\n\n    if (reweight_graph) {\n\tdijkstra(node, graph, n, Dij[0]);\n    } else {\n\tbfs(node, graph, n, Dij[0], &Q);\n    }\n\n    /* find the most distant node from first pivot */\n    max_dist = 0;\n    for (i = 0; i < n; i++) {\n\tdist[i] = Dij[0][i];\n\tif (dist[i] > max_dist) {\n\t    node = i;\n\t    max_dist = dist[i];\n\t}\n    }\n    /* select other dim-1 nodes as pivots */\n    for (i = 1; i < num_centers; i++) {\n\tCenterIndex[node] = i;\n\tinvCenterIndex[i] = node;\n\tif (reweight_graph) {\n\t    dijkstra(node, graph, n, Dij[i]);\n\t} else {\n\t    bfs(node, graph, n, Dij[i], &Q);\n\t}\n\tmax_dist = 0;\n\tfor (j = 0; j < n; j++) {\n\t    dist[j] = MIN(dist[j], Dij[i][j]);\n\t    if (dist[j] > max_dist\n\t\t|| (dist[j] == max_dist && rand() % (j + 1) == 0)) {\n\t\tnode = j;\n\t\tmax_dist = dist[j];\n\t    }\n\t}\n    }\n\n  after_pivots_selection:\n\n    /* Construct a sparse distance matrix 'distances' */\n\n    /* initialize dist to -1, important for 'bfs_bounded(..)' */\n    for (i = 0; i < n; i++) {\n\tdist[i] = -1;\n    }\n\n    visited_nodes = N_GNEW(n, int);\n    distances = N_GNEW(n, dist_data);\n    available_space = 0;\n    nedges = 0;\n    for (i = 0; i < n; i++) {\n\tif (CenterIndex[i] >= 0) {\t/* a pivot node */\n\t    distances[i].edges = N_GNEW(n - 1, int);\n\t    distances[i].edist = N_GNEW(n - 1, DistType);\n\t    distances[i].nedges = n - 1;\n\t    nedges += n - 1;\n\t    distances[i].free_mem = true;\n\t    index = CenterIndex[i];\n\t    for (j = 0; j < i; j++) {\n\t\tdistances[i].edges[j] = j;\n\t\tdistances[i].edist[j] = Dij[index][j];\n\t    }\n\t    for (j = i + 1; j < n; j++) {\n\t\tdistances[i].edges[j - 1] = j;\n\t\tdistances[i].edist[j - 1] = Dij[index][j];\n\t    }\n\t    continue;\n\t}\n\n\t/* a non pivot node */\n\n\tif (dist_bound > 0) {\n\t    if (reweight_graph) {\n\t\tnum_visited_nodes =\n\t\t    dijkstra_bounded(i, graph, n, dist, dist_bound,\n\t\t\t\t     visited_nodes);\n\t    } else {\n\t\tnum_visited_nodes =\n\t\t    bfs_bounded(i, graph, n, dist, &Q, dist_bound,\n\t\t\t\tvisited_nodes);\n\t    }\n\t    /* filter the pivots out of the visited nodes list, and the self loop: */\n\t    for (j = 0; j < num_visited_nodes;) {\n\t\tif (CenterIndex[visited_nodes[j]] < 0\n\t\t    && visited_nodes[j] != i) {\n\t\t    /* not a pivot or self loop */\n\t\t    j++;\n\t\t} else {\n\t\t    dist[visited_nodes[j]] = -1;\n\t\t    visited_nodes[j] = visited_nodes[--num_visited_nodes];\n\t\t}\n\t    }\n\t} else {\n\t    num_visited_nodes = 0;\n\t}\n\tnum_neighbors = num_visited_nodes + num_centers;\n\tif (num_neighbors > available_space) {\n\t    available_space = (dist_bound + 1) * n;\n\t    storage1 = N_GNEW(available_space, int);\n\t    storage2 = N_GNEW(available_space, DistType);\n\t    distances[i].free_mem = true;\n\t} else {\n\t    distances[i].free_mem = false;\n\t}\n\tdistances[i].edges = storage1;\n\tdistances[i].edist = storage2;\n\tdistances[i].nedges = num_neighbors;\n\tnedges += num_neighbors;\n\tfor (j = 0; j < num_visited_nodes; j++) {\n\t    storage1[j] = visited_nodes[j];\n\t    storage2[j] = dist[visited_nodes[j]];\n\t    dist[visited_nodes[j]] = -1;\n\t}\n\t/* add all pivots: */\n\tfor (j = num_visited_nodes; j < num_neighbors; j++) {\n\t    index = j - num_visited_nodes;\n\t    storage1[j] = invCenterIndex[index];\n\t    storage2[j] = Dij[index][i];\n\t}\n\n\tstorage1 += num_neighbors;\n\tstorage2 += num_neighbors;\n\tavailable_space -= num_neighbors;\n    }\n\n    free(dist);\n    free(visited_nodes);\n\n    if (Dij != NULL) {\n\tfree(Dij[0]);\n\tfree(Dij);\n    }\n\n\t/*************************************************\n\t** Laplacian computation **\n\t*************************************************/\n\n    lap = N_GNEW(n, vtx_data);\n    edges = N_GNEW(nedges + n, int);\n    ewgts = N_GNEW(nedges + n, float);\n    for (i = 0; i < n; i++) {\n\tlap[i].edges = edges;\n\tlap[i].ewgts = ewgts;\n\tlap[i].nedges = distances[i].nedges + 1;\t/*add the self loop */\n\tdist_list = distances[i].edist - 1;\t/* '-1' since edist[0] goes for number '1' entry in the lap */\n\tdegree = 0;\n\tfor (j = 1; j < lap[i].nedges; j++) {\n\t    edges[j] = distances[i].edges[j - 1];\n#ifdef Dij2\n\t    ewgts[j] = (float) -1.0 / ((float) dist_list[j] * (float) dist_list[j]);\t/* cast to float to prevent overflow */\n#else\n\t    ewgts[j] = -1.0 / (float) dist_list[j];\n#endif\n\t    degree -= ewgts[j];\n\t}\n\tedges[0] = i;\n\tewgts[0] = (float) degree;\n\tedges += lap[i].nedges;\n\tewgts += lap[i].nedges;\n    }\n\n\t/*************************************************\n\t** initialize direction vectors  **\n\t** to get an intial layout       **\n\t*************************************************/\n\n    /* the layout is subspace*directions */\n    directions = N_GNEW(dim, double *);\n    directions[0] = N_GNEW(dim * subspace_dim, double);\n    for (i = 1; i < dim; i++) {\n\tdirections[i] = directions[0] + i * subspace_dim;\n    }\n\n    if (smart_ini) {\n\t/* smart initialization */\n\tfor (k = 0; k < dim; k++) {\n\t    for (i = 0; i < subspace_dim; i++) {\n\t\tdirections[k][i] = 0;\n\t    }\n\t}\n\tif (dim != 2) {\n\t    /* use the first vectors in the eigenspace */\n\t    /* each direction points to its \"principal axes\" */\n\t    for (k = 0; k < dim; k++) {\n\t\tdirections[k][k] = 1;\n\t    }\n\t} else {\n\t    /* for the frequent 2-D case we prefer iterative-PCA over PCA */\n\t    /* Note that we don't want to mix the Lap's eigenspace with the HDE */\n\t    /* in the computation since they have different scales */\n\n\t    directions[0][0] = 1;\t/* first pca projection vector */\n\t    if (!iterativePCA_1D(subspace, subspace_dim, n, directions[1])) {\n\t\tfor (k = 0; k < subspace_dim; k++) {\n\t\t    directions[1][k] = 0;\n\t\t}\n\t\tdirections[1][1] = 1;\n\t    }\n\t}\n\n    } else {\n\t/* random initialization */\n\tfor (k = 0; k < dim; k++) {\n\t    for (i = 0; i < subspace_dim; i++) {\n\t\tdirections[k][i] = (double) (rand()) / RAND_MAX;\n\t    }\n\t}\n    }\n\n    /* compute initial k-D layout */\n\n    for (k = 0; k < dim; k++) {\n\tright_mult_with_vector_transpose(subspace, n, subspace_dim,\n\t\t\t\t\t directions[k], coords[k]);\n    }\n\n\t/*************************************************\n\t** compute restriction of the laplacian to subspace: **\t\n\t*************************************************/\n\n    tmp_mat = NULL;\n    matrix = NULL;\n    mult_sparse_dense_mat_transpose(lap, subspace, n, subspace_dim,\n\t\t\t\t    &tmp_mat);\n    mult_dense_mat(subspace, tmp_mat, subspace_dim, n, subspace_dim,\n\t\t   &matrix);\n    free(tmp_mat[0]);\n    free(tmp_mat);\n\n\t/*************************************************\n\t** Layout optimization  **\n\t*************************************************/\n\n    b = N_GNEW(n, double);\n    b_restricted = N_GNEW(subspace_dim, double);\n    old_stress = compute_stress1(coords, distances, dim, n);\n    for (converged = false, iterations = 0;\n\t iterations < n_iterations && !converged; iterations++) {\n\n\t/* Axis-by-axis optimization: */\n\tfor (k = 0; k < dim; k++) {\n\t    /* compute the vector b */\n\t    /* multiply on-the-fly with distance-based laplacian */\n\t    /* (for saving storage we don't construct this Lap explicitly) */\n\t    for (i = 0; i < n; i++) {\n\t\tdegree = 0;\n\t\tb[i] = 0;\n\t\tdist_list = distances[i].edist - 1;\n\t\tedges = lap[i].edges;\n\t\tewgts = lap[i].ewgts;\n\t\tfor (j = 1; j < lap[i].nedges; j++) {\n\t\t    node = edges[j];\n\t\t    dist_ij = distance_kD(coords, dim, i, node);\n\t\t    if (dist_ij > 1e-30) {\t/* skip zero distances */\n\t\t\tL_ij = -ewgts[j] * dist_list[j] / dist_ij;\t/* L_ij=w_{ij}*d_{ij}/dist_{ij} */\n\t\t\tdegree -= L_ij;\n\t\t\tb[i] += L_ij * coords[k][node];\n\t\t    }\n\t\t}\n\t\tb[i] += degree * coords[k][i];\n\t    }\n\t    right_mult_with_vector_d(subspace, subspace_dim, n, b,\n\t\t\t\t     b_restricted);\n\t    conjugate_gradient_f(matrix, directions[k], b_restricted,\n\t\t\t\t subspace_dim, conj_tol, subspace_dim,\n\t\t\t\t false);\n\t    right_mult_with_vector_transpose(subspace, n, subspace_dim,\n\t\t\t\t\t     directions[k], coords[k]);\n\t}\n\n\tif ((converged = (iterations % 2 == 0))) {\t/* check for convergence each two iterations */\n\t    new_stress = compute_stress1(coords, distances, dim, n);\n\t    converged =\n\t\tfabs(new_stress - old_stress) / (new_stress + 1e-10) <\n\t\tEpsilon;\n\t    old_stress = new_stress;\n\t}\n    }\n    free(b_restricted);\n    free(b);\n\n    if (reweight_graph) {\n\trestore_old_weights(graph, n, old_weights);\n    }\n\n    for (i = 0; i < n; i++) {\n\tif (distances[i].free_mem) {\n\t    free(distances[i].edges);\n\t    free(distances[i].edist);\n\t}\n    }\n\n    free(distances);\n    free(lap[0].edges);\n    free(lap[0].ewgts);\n    free(lap);\n    free(CenterIndex);\n    free(invCenterIndex);\n    free(directions[0]);\n    free(directions);\n    if (matrix != NULL) {\n\tfree(matrix[0]);\n\tfree(matrix);\n    }\n    free(subspace[0]);\n    free(subspace);\n    freeQueue(&Q);\n\n    return iterations;\n}\n\n/* compute_weighted_apsp_packed:\n * Edge lengths can be any float > 0\n */\nstatic float *compute_weighted_apsp_packed(vtx_data * graph, int n)\n{\n    int i, j, count;\n    float *Dij = N_NEW(n * (n + 1) / 2, float);\n\n    float *Di = N_NEW(n, float);\n    Queue Q;\n\n    mkQueue(&Q, n);\n\n    count = 0;\n    for (i = 0; i < n; i++) {\n\tdijkstra_f(i, graph, n, Di);\n\tfor (j = i; j < n; j++) {\n\t    Dij[count++] = Di[j];\n\t}\n    }\n    free(Di);\n    freeQueue(&Q);\n    return Dij;\n}\n\n/* compute_apsp_packed:\n * Assumes integral weights > 0.\n */\nfloat *compute_apsp_packed(vtx_data * graph, int n)\n{\n    int i, j, count;\n    float *Dij = N_NEW(n * (n + 1) / 2, float);\n\n    DistType *Di = N_NEW(n, DistType);\n    Queue Q;\n\n    mkQueue(&Q, n);\n\n    count = 0;\n    for (i = 0; i < n; i++) {\n\tbfs(i, graph, n, Di, &Q);\n\tfor (j = i; j < n; j++) {\n\t    Dij[count++] = ((float) Di[j]);\n\t}\n    }\n    free(Di);\n    freeQueue(&Q);\n    return Dij;\n}\n\n#define max(x,y) ((x)>(y)?(x):(y))\n\nfloat *compute_apsp_artifical_weights_packed(vtx_data * graph, int n)\n{\n    /* compute all-pairs-shortest-path-length while weighting the graph */\n    /* so high-degree nodes are distantly located */\n\n    float *Dij;\n    int i, j;\n    float *old_weights = graph[0].ewgts;\n    int nedges = 0;\n    float *weights;\n    int *vtx_vec;\n    int deg_i, deg_j, neighbor;\n\n    for (i = 0; i < n; i++) {\n\tnedges += graph[i].nedges;\n    }\n\n    weights = N_NEW(nedges, float);\n    vtx_vec = N_NEW(n, int);\n    for (i = 0; i < n; i++) {\n\tvtx_vec[i] = 0;\n    }\n\n    if (graph->ewgts) {\n\tfor (i = 0; i < n; i++) {\n\t    fill_neighbors_vec_unweighted(graph, i, vtx_vec);\n\t    deg_i = graph[i].nedges - 1;\n\t    for (j = 1; j <= deg_i; j++) {\n\t\tneighbor = graph[i].edges[j];\n\t\tdeg_j = graph[neighbor].nedges - 1;\n\t\tweights[j] =\n\t\t    (float)\n\t\t    max((float)\n\t\t\t(deg_i + deg_j -\n\t\t\t 2 * common_neighbors(graph, i, neighbor,\n\t\t\t\t\t      vtx_vec)),\n\t\t\tgraph[i].ewgts[j]);\n\t    }\n\t    empty_neighbors_vec(graph, i, vtx_vec);\n\t    graph[i].ewgts = weights;\n\t    weights += graph[i].nedges;\n\t}\n\tDij = compute_weighted_apsp_packed(graph, n);\n    } else {\n\tfor (i = 0; i < n; i++) {\n\t    graph[i].ewgts = weights;\n\t    fill_neighbors_vec_unweighted(graph, i, vtx_vec);\n\t    deg_i = graph[i].nedges - 1;\n\t    for (j = 1; j <= deg_i; j++) {\n\t\tneighbor = graph[i].edges[j];\n\t\tdeg_j = graph[neighbor].nedges - 1;\n\t\tweights[j] =\n\t\t    ((float) deg_i + deg_j -\n\t\t     2 * common_neighbors(graph, i, neighbor, vtx_vec));\n\t    }\n\t    empty_neighbors_vec(graph, i, vtx_vec);\n\t    weights += graph[i].nedges;\n\t}\n\tDij = compute_apsp_packed(graph, n);\n    }\n\n    free(vtx_vec);\n    free(graph[0].ewgts);\n    graph[0].ewgts = NULL;\n    if (old_weights != NULL) {\n\tfor (i = 0; i < n; i++) {\n\t    graph[i].ewgts = old_weights;\n\t    old_weights += graph[i].nedges;\n\t}\n    }\n    return Dij;\n}\n\n/* Accumulator type for diagonal of Laplacian. Needs to be as large\n * as possible. Use long double; configure to double if necessary.\n */\n#define DegType long double\n\n/* stress_majorization_kD_mkernel:\n * At present, if any nodes have pos set, smart_ini is false.\n */\nint stress_majorization_kD_mkernel(vtx_data * graph,\t/* Input graph in sparse representation */\n\t\t\t\t   int n,\t/* Number of nodes */\n\t\t\t\t   int nedges_graph,\t/* Number of edges */\n\t\t\t\t   double **d_coords,\t/* coordinates of nodes (output layout) */\n\t\t\t\t   int dim,\t/* dimemsionality of layout */\n\t\t\t\t   int smart_ini,\t/* smart initialization */\n\t\t\t\t   int model,\t/* model */\n\t\t\t\t   int maxi\t/* max iterations */\n    )\n{\n    int iterations;\t\t/* output: number of iteration of the process */\n\n    double conj_tol = tolerance_cg;\t/* tolerance of Conjugate Gradient */\n    float *Dij = NULL;\n    int i, j, k;\n    float **coords;\n    float *f_storage;\n    float constant_term;\n    int count;\n    DegType degree;\n    int lap_length;\n    float *lap2;\n    DegType *degrees;\n    int step;\n    float val;\n    double old_stress, new_stress;\n    bool converged;\n    float **b;\n    float *tmp_coords;\n    float *dist_accumulator;\n    float *lap1;\n    int len;\n    int havePinned;\t\t/* some node is pinned */\n#ifdef ALTERNATIVE_STRESS_CALC\n    double mat_stress;\n#endif\n\n\t/*************************************************\n\t** Computation of full, dense, unrestricted k-D ** \n\t** stress minimization by majorization          **    \n\t*************************************************/\n\n\t/****************************************************\n\t** Compute the all-pairs-shortest-distances matrix **\n\t****************************************************/\n\n    if (maxi == 0)\n\treturn 0;\n\n    if (Verbose)\n\tstart_timer();\n\n    if (model == MODEL_SUBSET) {\n\t/* weight graph to separate high-degree nodes */\n\t/* and perform slower Dijkstra-based computation */\n\tif (Verbose)\n\t    fprintf(stderr, \"Calculating subset model\");\n\tDij = compute_apsp_artifical_weights_packed(graph, n);\n    } else if (model == MODEL_CIRCUIT) {\n\tDij = circuitModel(graph, n);\n\tif (!Dij) {\n\t    agerr(AGWARN,\n\t\t  \"graph is disconnected. Hence, the circuit model\\n\");\n\t    agerr(AGPREV,\n\t\t  \"is undefined. Reverting to the shortest path model.\\n\");\n\t}\n    }\n    if (!Dij) {\n\tif (Verbose)\n\t    fprintf(stderr, \"Calculating shortest paths\");\n\tif (graph->ewgts)\n\t    Dij = compute_weighted_apsp_packed(graph, n);\n\telse\n\t    Dij = compute_apsp_packed(graph, n);\n    }\n\n    if (Verbose) {\n\tfprintf(stderr, \": %.2f sec\\n\", elapsed_sec());\n\tfprintf(stderr, \"Setting initial positions\");\n\tstart_timer();\n    }\n\n\t/**************************\n\t** Layout initialization **\n\t**************************/\n\n    if (smart_ini) {\n\thavePinned = 0;\n\t/* optimize layout quickly within subspace */\n\t/* perform at most 50 iterations within 30-D subspace to \n\t   get an estimate */\n\tsparse_stress_subspace_majorization_kD(graph, n, nedges_graph,\n\t\t\t\t\t       d_coords, dim, smart_ini,\n\t\t\t\t\t       (model == MODEL_SUBSET), 50,\n\t\t\t\t\t       neighborhood_radius_subspace,\n\t\t\t\t\t       num_pivots_stress);\n\n\tfor (i = 0; i < dim; i++) {\n\t    /* for numerical stability, scale down layout */\n\t    double max = 1;\n\t    for (j = 0; j < n; j++) {\n\t\tif (fabs(d_coords[i][j]) > max) {\n\t\t    max = fabs(d_coords[i][j]);\n\t\t}\n\t    }\n\t    for (j = 0; j < n; j++) {\n\t\td_coords[i][j] /= max;\n\t    }\n\t    /* add small random noise */\n\t    for (j = 0; j < n; j++) {\n\t\td_coords[i][j] += 1e-6 * (drand48() - 0.5);\n\t    }\n\t    orthog1(n, d_coords[i]);\n\t}\n    } else {\n\thavePinned = initLayout(graph, n, dim, d_coords);\n    }\n    if (n == 1) return 0;\n\n    if (Verbose) {\n\tfprintf(stderr, \": %.2f sec\\n\", elapsed_sec());\n\tfprintf(stderr, \"Setting up stress function\");\n\tstart_timer();\n    }\n    coords = N_NEW(dim, float *);\n    f_storage = N_NEW(dim * n, float);\n    for (i = 0; i < dim; i++) {\n\tcoords[i] = f_storage + i * n;\n\tfor (j = 0; j < n; j++) {\n\t    coords[i][j] = ((float) d_coords[i][j]);\n\t}\n    }\n\n    /* compute constant term in stress sum */\n    /* which is \\sum_{i<j} w_{ij}d_{ij}^2 */\n#ifdef Dij2\n    constant_term = ((float) n * (n - 1) / 2);\n#else\n    constant_term = 0;\n    for (count = 0, i = 0; i < n - 1; i++) {\n\tcount++;\t\t/* skip self distance */\n\tfor (j = 1; j < n - i; j++, count++) {\n\t    constant_term += Dij[count];\n\t}\n    }\n#endif\n\n\t/**************************\n\t** Laplacian computation **\n\t**************************/\n\n    lap_length = n * (n + 1) / 2;\n    lap2 = Dij;\n#ifdef Dij2\n    square_vec(lap_length, lap2);\n#endif\n    /* compute off-diagonal entries */\n    invert_vec(lap_length, lap2);\n\n    /* compute diagonal entries */\n    count = 0;\n    degrees = N_NEW(n, DegType);\n    /* set_vector_val(n, 0, degrees); */\n    memset(degrees, 0, n * sizeof(DegType));\n    for (i = 0; i < n - 1; i++) {\n\tdegree = 0;\n\tcount++;\t\t/* skip main diag entry */\n\tfor (j = 1; j < n - i; j++, count++) {\n\t    val = lap2[count];\n\t    degree += val;\n\t    degrees[i + j] -= val;\n\t}\n\tdegrees[i] -= degree;\n    }\n    for (step = n, count = 0, i = 0; i < n; i++, count += step, step--) {\n\tlap2[count] = degrees[i];\n    }\n\n#ifdef NONCORE\n    if (n > max_nodes_in_mem) {\n#define FILENAME \"tmp_Dij$$$.bin\"\n\tfp = fopen(FILENAME, \"wb\");\n\tfwrite(lap2, sizeof(float), lap_length, fp);\n\tfclose(fp);\n    }\n#endif\n\n\t/*************************\n\t** Layout optimization  **\n\t*************************/\n\n    b = N_NEW(dim, float *);\n    b[0] = N_NEW(dim * n, float);\n    for (k = 1; k < dim; k++) {\n\tb[k] = b[0] + k * n;\n    }\n\n    tmp_coords = N_NEW(n, float);\n    dist_accumulator = N_NEW(n, float);\n    lap1 = NULL;\n#ifdef NONCORE\n    if (n <= max_nodes_in_mem) {\n\tlap1 = N_NEW(lap_length, float);\n    } else {\n\tlap1 = lap2;\n\tfp = fopen(FILENAME, \"rb\");\n\tfgetpos(fp, &pos);\n    }\n#else\n    lap1 = N_NEW(lap_length, float);\n#endif\n\n\n    old_stress = MAXDOUBLE;\t/* at least one iteration */\n    if (Verbose) {\n\tfprintf(stderr, \": %.2f sec\\n\", elapsed_sec());\n\tfprintf(stderr, \"Solving model: \");\n\tstart_timer();\n    }\n\n    for (converged = false, iterations = 0;\n\t iterations < maxi && !converged; iterations++) {\n\n\t/* First, construct Laplacian of 1/(d_ij*|p_i-p_j|)  */\n\t/* set_vector_val(n, 0, degrees); */\n\tmemset(degrees, 0, n * sizeof(DegType));\n#ifdef Dij2\n#ifdef NONCORE\n\tif (n <= max_nodes_in_mem) {\n\t    sqrt_vecf(lap_length, lap2, lap1);\n\t} else {\n\t    sqrt_vec(lap_length, lap1);\n\t}\n#else\n\tsqrt_vecf(lap_length, lap2, lap1);\n#endif\n#endif\n\tfor (count = 0, i = 0; i < n - 1; i++) {\n\t    len = n - i - 1;\n\t    /* init 'dist_accumulator' with zeros */\n\t    set_vector_valf(len, 0, dist_accumulator);\n\n\t    /* put into 'dist_accumulator' all squared distances between 'i' and 'i'+1,...,'n'-1 */\n\t    for (k = 0; k < dim; k++) {\n\t\tset_vector_valf(len, coords[k][i], tmp_coords);\n\t\tvectors_mult_additionf(len, tmp_coords, -1,\n\t\t\t\t       coords[k] + i + 1);\n\t\tsquare_vec(len, tmp_coords);\n\t\tvectors_additionf(len, tmp_coords, dist_accumulator,\n\t\t\t\t  dist_accumulator);\n\t    }\n\n\t    /* convert to 1/d_{ij} */\n\t    invert_sqrt_vec(len, dist_accumulator);\n\t    /* detect overflows */\n\t    for (j = 0; j < len; j++) {\n\t\tif (dist_accumulator[j] >= MAXFLOAT\n\t\t    || dist_accumulator[j] < 0) {\n\t\t    dist_accumulator[j] = 0;\n\t\t}\n\t    }\n\n\t    count++;\t\t/* save place for the main diagonal entry */\n\t    degree = 0;\n\t    for (j = 0; j < len; j++, count++) {\n#ifdef Dij2\n\t\tval = lap1[count] *= dist_accumulator[j];\n#else\n\t\tval = lap1[count] = dist_accumulator[j];\n#endif\n\t\tdegree += val;\n\t\tdegrees[i + j + 1] -= val;\n\t    }\n\t    degrees[i] -= degree;\n\t}\n\tfor (step = n, count = 0, i = 0; i < n; i++, count += step, step--) {\n\t    lap1[count] = degrees[i];\n\t}\n\n\t/* Now compute b[] */\n\tfor (k = 0; k < dim; k++) {\n\t    /* b[k] := lap1*coords[k] */\n\t    right_mult_with_vector_ff(lap1, n, coords[k], b[k]);\n\t}\n\n\n\t/* compute new stress  */\n\t/* remember that the Laplacians are negated, so we subtract instead of add and vice versa */\n\tnew_stress = 0;\n\tfor (k = 0; k < dim; k++) {\n\t    new_stress += vectors_inner_productf(n, coords[k], b[k]);\n\t}\n\tnew_stress *= 2;\n\tnew_stress += constant_term;\t/* only after mult by 2 */\n#ifdef NONCORE\n\tif (n > max_nodes_in_mem) {\n\t    /* restore lap2 from memory */\n\t    fsetpos(fp, &pos);\n\t    fread(lap2, sizeof(float), lap_length, fp);\n\t}\n#endif\n\tfor (k = 0; k < dim; k++) {\n\t    right_mult_with_vector_ff(lap2, n, coords[k], tmp_coords);\n\t    new_stress -= vectors_inner_productf(n, coords[k], tmp_coords);\n\t}\n#ifdef ALTERNATIVE_STRESS_CALC\n\tmat_stress = new_stress;\n\tnew_stress = compute_stressf(coords, lap2, dim, n);\n\tif (fabs(mat_stress - new_stress) / min(mat_stress, new_stress) >\n\t    0.001) {\n\t    fprintf(stderr, \"Diff stress vals: %lf %lf (iteration #%d)\\n\",\n\t\t    mat_stress, new_stress, iterations);\n\t}\n#endif\n\t/* Invariant: old_stress > 0. In theory, old_stress >= new_stress\n\t * but we use fabs in case of numerical error.\n\t */\n\tconverged =\n\t    (((fabs(old_stress - new_stress) / old_stress) < Epsilon)\n\t     || (new_stress < Epsilon));\n\told_stress = new_stress;\n\n\tfor (k = 0; k < dim; k++) {\n\t    node_t *np;\n\t    if (havePinned) {\n\t\tcopy_vectorf(n, coords[k], tmp_coords);\n\t\tconjugate_gradient_mkernel(lap2, tmp_coords, b[k], n,\n\t\t\t\t\t   conj_tol, n);\n\t\tfor (i = 0; i < n; i++) {\n\t\t    np = graph[i].np;\n\t\t    if (!isFixed(np))\n\t\t\tcoords[k][i] = tmp_coords[i];\n\t\t}\n\t    } else {\n\t\tconjugate_gradient_mkernel(lap2, coords[k], b[k], n,\n\t\t\t\t\t   conj_tol, n);\n\t    }\n\t}\n\tif (Verbose && (iterations % 5 == 0)) {\n\t    fprintf(stderr, \"%.3f \", new_stress);\n\t    if ((iterations + 5) % 50 == 0)\n\t\tfprintf(stderr, \"\\n\");\n\t}\n    }\n    if (Verbose) {\n\tfprintf(stderr, \"\\nfinal e = %f %d iterations %.2f sec\\n\",\n\t\tcompute_stressf(coords, lap2, dim, n),\n\t\titerations, elapsed_sec());\n    }\n\n    for (i = 0; i < dim; i++) {\n\tfor (j = 0; j < n; j++) {\n\t    d_coords[i][j] = coords[i][j];\n\t}\n    }\n    free(coords[0]);\n    free(coords);\n\n    free(lap2);\n    free(b[0]);\n    free(b);\n    free(tmp_coords);\n    free(dist_accumulator);\n    free(degrees);\n    free(lap1);\n    return iterations;\n}\n"
  },
  {
    "path": "experimental/neatogen/stress.h",
    "content": "/* $Id: stress.h,v 1.2 2005/07/13 20:29:40 erg Exp $ $Revision: 1.2 $ */\n/* vim:set shiftwidth=4 ts=8: */\n\n/**********************************************************\n*      This software is part of the graphviz package      *\n*                http://www.graphviz.org/                 *\n*                                                         *\n*            Copyright (c) 1994-2004 AT&T Corp.           *\n*                and is licensed under the                *\n*            Common Public License, Version 1.0           *\n*                      by AT&T Corp.                      *\n*                                                         *\n*        Information and Software Systems Research        *\n*              AT&T Research, Florham Park NJ             *\n**********************************************************/\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n\n#ifndef STRESS_H\n#define STRESS_H\n\n#include \"defs.h\"\n\n#define tolerance_cg 1e-3\n\n#define DFLT_ITERATIONS 200\n\n#define DFLT_TOLERANCE 1e-4\n\n    /* some possible values for 'num_pivots_stress' */\n#define num_pivots_stress 40\n#define num_pivots_smart_ini   0\n#define num_pivots_no_ini   50\n\n    /* relevant when using sparse distance matrix\n     * when optimizing within subspace it can be set to 0\n     * otherwise, recommended value is above zero (usually around 3-6)\n     * some possible values for 'neighborhood_radius'\n     */\n#define neighborhood_radius_unrestricted  4\n#define neighborhood_radius_subspace 0\n\n\n    /* Full dense stress optimization (equivalent to Kamada-Kawai's energy) */\n    /* Slowest and most accurate optimization */\n    extern int stress_majorization_kD_mkernel(vtx_data * graph,\t/* Input graph in sparse representation */\n\t\t\t\t\t      int n,\t/* Number of nodes */\n\t\t\t\t\t      int nedges_graph,\t/* Number of edges */\n\t\t\t\t\t      double **coords,\t/* coordinates of nodes (output layout)  */\n\t\t\t\t\t      int dim,\t/* dimemsionality of layout */\n\t\t\t\t\t      int smart_ini,\t/* smart initialization */\n\t\t\t\t\t      int model,\t/* model */\n\t\t\t\t\t      int maxi\t/* max iterations */\n\t);\n\nextern float *compute_apsp_packed(vtx_data * graph, int n);\nextern float *compute_apsp_artifical_weights_packed(vtx_data * graph, int n);\nextern float* circuitModel(vtx_data * graph, int nG);\nextern int initLayout(vtx_data * graph, int n, int dim, double **coords);\n\n#endif\n\n#ifdef __cplusplus\n}\n#endif\n"
  },
  {
    "path": "experimental/neatogen/stuff.c",
    "content": "/* $Id: stuff.c,v 1.2 2005/02/10 23:10:33 erg Exp $ $Revision: 1.2 $ */\n/* vim:set shiftwidth=4 ts=8: */\n\n/**********************************************************\n*      This software is part of the graphviz package      *\n*                http://www.graphviz.org/                 *\n*                                                         *\n*            Copyright (c) 1994-2004 AT&T Corp.           *\n*                and is licensed under the                *\n*            Common Public License, Version 1.0           *\n*                      by AT&T Corp.                      *\n*                                                         *\n*        Information and Software Systems Research        *\n*              AT&T Research, Florham Park NJ             *\n**********************************************************/\n\n\n#ifdef HAVE_CONFIG_H\n#include \"config.h\"\n#endif\n\n#include\t\"neato.h\"\n#include\t\"stress.h\"\n#include\t<time.h>\n#ifndef MSWIN32\n#include\t<unistd.h>\n#endif\n\nstatic double Epsilon2;\n#ifndef HAVE_DRAND48\ndouble drand48(void)\n{\n    double d;\n    d = rand();\n    d = d / RAND_MAX;\n    return d;\n}\n#endif\n\ndouble fpow32(double x)\n{\n    x = sqrt(x);\n    return x * x * x;\n}\n\ndouble distvec(double *p0, double *p1, double *vec)\n{\n    int k;\n    double dist = 0.0;\n\n    for (k = 0; k < Ndim; k++) {\n\tvec[k] = p0[k] - p1[k];\n\tdist += (vec[k] * vec[k]);\n    }\n    dist = sqrt(dist);\n    return dist;\n}\n\ndouble **new_array(int m, int n, double ival)\n{\n    double **rv;\n    double *mem;\n    int i, j;\n\n    rv = N_NEW(m, double *);\n    mem = N_NEW(m * n, double);\n    for (i = 0; i < m; i++) {\n\trv[i] = mem;\n\tmem = mem + n;\n\tfor (j = 0; j < n; j++)\n\t    rv[i][j] = ival;\n    }\n    return rv;\n}\n\nvoid free_array(double **rv)\n{\n    if (rv) {\n\tfree(rv[0]);\n\tfree(rv);\n    }\n}\n\n\nstatic double ***new_3array(int m, int n, int p, double ival)\n{\n    double ***rv;\n    int i, j, k;\n\n    rv = N_NEW(m + 1, double **);\n    for (i = 0; i < m; i++) {\n\trv[i] = N_NEW(n + 1, double *);\n\tfor (j = 0; j < n; j++) {\n\t    rv[i][j] = N_NEW(p, double);\n\t    for (k = 0; k < p; k++)\n\t\trv[i][j][k] = ival;\n\t}\n\trv[i][j] = NULL;\t/* NULL terminate so we can clean up */\n    }\n    rv[i] = NULL;\n    return rv;\n}\n\nstatic void free_3array(double ***rv)\n{\n    int i, j;\n\n    if (rv) {\n\tfor (i = 0; rv[i]; i++) {\n\t    for (j = 0; rv[i][j]; j++)\n\t\tfree(rv[i][j]);\n\t    free(rv[i]);\n\t}\n\tfree(rv);\n    }\n}\n\ndouble doubleattr(void *obj, int index, double defval)\n{\n    double val;\n    if (index < 0)\n\treturn defval;\n    if (sscanf(agxget(obj, index), \"%lf\", &val) < 1)\n\treturn defval;\n    return val;\n}\n\n/* degreeKind;\n * Returns degree of n ignoring loops and multiedges.\n * Returns 0, 1 or many (2)\n * For case of 1, returns other endpoint of edge.\n */\nstatic int degreeKind(graph_t * g, node_t * n, node_t ** op)\n{\n    edge_t *ep;\n    int deg = 0;\n    node_t *other = NULL;\n\n    for (ep = agfstedge(g, n); ep; ep = agnxtedge(g, ep, n)) {\n\tif (ep->head == ep->tail)\n\t    continue;\t\t/* ignore loops */\n\tif (deg == 1) {\n\t    if (((ep->tail == n) && (ep->head == other)) ||\t/* ignore multiedge */\n\t\t((ep->tail == other) && (ep->head == n)))\n\t\tcontinue;\n\t    return 2;\n\t} else {\t\t/* deg == 0 */\n\t    if (ep->tail == n)\n\t\tother = ep->head;\n\t    else\n\t\tother = ep->tail;\n\t    *op = other;\n\t    deg++;\n\t}\n    }\n    return deg;\n}\n\n\n/* prune:\n * np is at end of a chain. If its degree is 0, remove it.\n * If its degree is 1, remove it and recurse.\n * If its degree > 1, stop.\n * The node next is the next node to be visited during iteration.\n * If it is equal to a node being deleted, set it to next one.\n * Delete from root graph, since G may be a connected component subgraph.\n * Return next.\n */\nstatic node_t *prune(graph_t * G, node_t * np, node_t * next)\n{\n    node_t *other;\n    int deg;\n\n    while (np) {\n\tdeg = degreeKind(G, np, &other);\n\tif (deg == 0) {\n\t    if (next == np)\n\t\tnext = agnxtnode(G, np);\n\t    agdelete(G->root, np);\n\t    np = 0;\n\t} else if (deg == 1) {\n\t    if (next == np)\n\t\tnext = agnxtnode(G, np);\n\t    agdelete(G->root, np);\n\t    np = other;\n\t} else\n\t    np = 0;\n\n    }\n    return next;\n}\n\nstatic double setEdgeLen(graph_t * G, node_t * np, int lenx)\n{\n    edge_t *ep;\n    double total_len = 0.0;\n    double len;\n    for (ep = agfstout(G, np); ep; ep = agnxtout(G, ep)) {\n\tlen = doubleattr(ep, lenx, 1.0);\n\tif (len <= 0) {\n\t    agerr(AGERR, \"bad edge len %f in %s ignored\\n\", len, G->name);\n\t    len = 1.0;\n\t}\n\tED_dist(ep) = len;\n\ttotal_len += len;\n    }\n    return total_len;\n}\n\n/* scan_graph_mode:\n * Prepare the graph and data structures depending on the layout mode.\n * If Reduce is true, eliminate singletons and trees. Since G may be a\n * subgraph, we remove the nodes from the root graph.\n * Return the number of nodes in the reduced graph.\n */\nint scan_graph_mode(graph_t * G, int mode)\n{\n    int i, lenx, nV, nE, deg;\n    char *str;\n    node_t *np, *xp, *other;\n    double total_len = 0.0;\n\n    if (Verbose)\n\tfprintf(stderr, \"Scanning graph %s, %d nodes\\n\", G->name,\n\t\tagnnodes(G));\n\n    /* Eliminate singletons and trees */\n    if (Reduce) {\n\tfor (np = agfstnode(G); np; np = xp) {\n\t    xp = agnxtnode(G, np);\n\t    deg = degreeKind(G, np, &other);\n\t    if (deg == 0) {\t/* singleton node */\n\t\tagdelete(G->root, np);\n\t    } else if (deg == 1) {\n\t\tagdelete(G->root, np);\n\t\txp = prune(G, other, xp);\n\t    }\n\t}\n    }\n    nV = agnnodes(G);\n    nE = agnedges(G);\n\n    lenx = agindex(G->root->proto->e, \"len\");\n    if (mode == MODE_KK) {\n\tEpsilon = .0001 * nV;\n\tgetdouble(G, \"epsilon\", &Epsilon);\n\tif ((str = agget(G->root, \"Damping\")))\n\t    Damping = atof(str);\n\telse\n\t    Damping = .99;\n\tGD_neato_nlist(G) = N_NEW(nV + 1, node_t *);\n\tfor (i = 0, np = agfstnode(G); np; np = agnxtnode(G, np)) {\n\t    GD_neato_nlist(G)[i] = np;\n\t    ND_id(np) = i++;\n\t    ND_heapindex(np) = -1;\n\t    total_len += setEdgeLen(G, np, lenx);\n\t}\n    } else {\n\tEpsilon = DFLT_TOLERANCE;\n\tgetdouble(G, \"epsilon\", &Epsilon);\n\tfor (i = 0, np = agfstnode(G); np; np = agnxtnode(G, np)) {\n\t    ND_id(np) = i++;\n\t    total_len += setEdgeLen(G, np, lenx);\n\t}\n    }\n\n    str = agget(G, \"defaultdist\");\n    if (str && str[0])\n\tInitial_dist = MAX(Epsilon, atof(str));\n    else\n\tInitial_dist = total_len / (nE > 0 ? nE : 1) * sqrt(nV) + 1;\n\n    if (!Nop && (mode == MODE_KK)) {\n\tGD_dist(G) = new_array(nV, nV, Initial_dist);\n\tGD_spring(G) = new_array(nV, nV, 1.0);\n\tGD_sum_t(G) = new_array(nV, Ndim, 1.0);\n\tGD_t(G) = new_3array(nV, nV, Ndim, 0.0);\n    }\n\n    return nV;\n}\n\nint scan_graph(graph_t * g)\n{\n    return scan_graph_mode(g, MODE_KK);\n}\n\nvoid free_scan_graph(graph_t * g)\n{\n    /* int  nG; */\n    free(GD_neato_nlist(g));\n    if (!Nop) {\n\tfree_array(GD_dist(g));\n\tfree_array(GD_spring(g));\n\tfree_array(GD_sum_t(g));\n\t/* nG = agnnodes(g); */\n\tfree_3array(GD_t(g));\n\tGD_t(g) = NULL;\n    }\n}\n\nvoid jitter_d(node_t * np, int nG, int n)\n{\n    int k;\n    for (k = n; k < Ndim; k++)\n\tND_pos(np)[k] = nG * drand48();\n}\n\nvoid jitter3d(node_t * np, int nG)\n{\n    jitter_d(np, nG, 2);\n}\n\nvoid randompos(node_t * np, int nG)\n{\n    ND_pos(np)[0] = nG * drand48();\n    ND_pos(np)[1] = nG * drand48();\n    if (Ndim > 2)\n\tjitter3d(np, nG);\n}\n\nvoid initial_positions(graph_t * G, int nG)\n{\n    int init, i;\n    node_t *np;\n    static int once = 0;\n\n    if (Verbose)\n\tfprintf(stderr, \"Setting initial positions\\n\");\n\n    init = checkStart(G, nG, INIT_RANDOM);\n    if (init == INIT_REGULAR)\n\treturn;\n    if ((init == INIT_SELF) && (once == 0)) {\n\tagerr(AGWARN, \"start=%s not supported with mode=self - ignored\\n\");\n\tonce = 1;\n    }\n\n    for (i = 0; (np = GD_neato_nlist(G)[i]); i++) {\n\tif (hasPos(np))\n\t    continue;\n\trandompos(np, 1);\n    }\n}\n\nvoid diffeq_model(graph_t * G, int nG)\n{\n    int i, j, k;\n    double dist, **D, **K, del[MAXDIM], f;\n    node_t *vi, *vj;\n    edge_t *e;\n\n    if (Verbose) {\n\tfprintf(stderr, \"Setting up spring model: \");\n\tstart_timer();\n    }\n    /* init springs */\n    K = GD_spring(G);\n    D = GD_dist(G);\n    for (i = 0; i < nG; i++) {\n\tfor (j = 0; j < i; j++) {\n\t    f = Spring_coeff / (D[i][j] * D[i][j]);\n\t    if ((e =\n\t\t agfindedge(G, GD_neato_nlist(G)[i],\n\t\t\t    GD_neato_nlist(G)[j])))\n\t\tf = f * ED_factor(e);\n\t    K[i][j] = K[j][i] = f;\n\t}\n    }\n\n    /* init differential equation solver */\n    for (i = 0; i < nG; i++)\n\tfor (k = 0; k < Ndim; k++)\n\t    GD_sum_t(G)[i][k] = 0.0;\n\n    for (i = 0; (vi = GD_neato_nlist(G)[i]); i++) {\n\tfor (j = 0; j < nG; j++) {\n\t    if (i == j)\n\t\tcontinue;\n\t    vj = GD_neato_nlist(G)[j];\n\t    dist = distvec(ND_pos(vi), ND_pos(vj), del);\n\t    for (k = 0; k < Ndim; k++) {\n\t\tGD_t(G)[i][j][k] =\n\t\t    GD_spring(G)[i][j] * (del[k] -\n\t\t\t\t\t  GD_dist(G)[i][j] * del[k] /\n\t\t\t\t\t  dist);\n\t\tGD_sum_t(G)[i][k] += GD_t(G)[i][j][k];\n\t    }\n\t}\n    }\n    if (Verbose) {\n\tfprintf(stderr, \"%.2f sec\\n\", elapsed_sec());\n    }\n}\n\n/* total_e:\n * Return 2*energy of system.\n */\nstatic double total_e(graph_t * G, int nG)\n{\n    int i, j, d;\n    double e = 0.0;\t\t/* 2*energy */\n    double t0;\t\t\t/* distance squared */\n    double t1;\n    node_t *ip, *jp;\n\n    for (i = 0; i < nG - 1; i++) {\n\tip = GD_neato_nlist(G)[i];\n\tfor (j = i + 1; j < nG; j++) {\n\t    jp = GD_neato_nlist(G)[j];\n\t    for (t0 = 0.0, d = 0; d < Ndim; d++) {\n\t\tt1 = (ND_pos(ip)[d] - ND_pos(jp)[d]);\n\t\tt0 += t1 * t1;\n\t    }\n\t    e = e + GD_spring(G)[i][j] *\n\t\t(t0 + GD_dist(G)[i][j] * GD_dist(G)[i][j]\n\t\t - 2.0 * GD_dist(G)[i][j] * sqrt(t0));\n\t}\n    }\n    return e;\n}\n\nvoid solve_model(graph_t * G, int nG)\n{\n    node_t *np;\n\n    Epsilon2 = Epsilon * Epsilon;\n\n    while ((np = choose_node(G, nG))) {\n\tmove_node(G, nG, np);\n    }\n    if (Verbose) {\n\tfprintf(stderr, \"\\nfinal e = %f\", total_e(G, nG));\n\tfprintf(stderr, \" %d%s iterations %.2f sec\\n\",\n\t\tGD_move(G), (GD_move(G) == MaxIter ? \"!\" : \"\"),\n\t\telapsed_sec());\n    }\n    if (GD_move(G) == MaxIter)\n\tagerr(AGWARN, \"Max. iterations (%d) reached on graph %s\\n\",\n\t      MaxIter, G->name);\n}\n\nvoid update_arrays(graph_t * G, int nG, int i)\n{\n    int j, k;\n    double del[MAXDIM], dist, old;\n    node_t *vi, *vj;\n\n    vi = GD_neato_nlist(G)[i];\n    for (k = 0; k < Ndim; k++)\n\tGD_sum_t(G)[i][k] = 0.0;\n    for (j = 0; j < nG; j++) {\n\tif (i == j)\n\t    continue;\n\tvj = GD_neato_nlist(G)[j];\n\tdist = distvec(ND_pos(vi), ND_pos(vj), del);\n\tfor (k = 0; k < Ndim; k++) {\n\t    old = GD_t(G)[i][j][k];\n\t    GD_t(G)[i][j][k] =\n\t\tGD_spring(G)[i][j] * (del[k] -\n\t\t\t\t      GD_dist(G)[i][j] * del[k] / dist);\n\t    GD_sum_t(G)[i][k] += GD_t(G)[i][j][k];\n\t    old = GD_t(G)[j][i][k];\n\t    GD_t(G)[j][i][k] = -GD_t(G)[i][j][k];\n\t    GD_sum_t(G)[j][k] += (GD_t(G)[j][i][k] - old);\n\t}\n    }\n}\n\n#define Msub(i,j)  M[(i)*Ndim+(j)]\nvoid D2E(graph_t * G, int nG, int n, double *M)\n{\n    int i, l, k;\n    node_t *vi, *vn;\n    double scale, sq, t[MAXDIM];\n    double **K = GD_spring(G);\n    double **D = GD_dist(G);\n\n    vn = GD_neato_nlist(G)[n];\n    for (l = 0; l < Ndim; l++)\n\tfor (k = 0; k < Ndim; k++)\n\t    Msub(l, k) = 0.0;\n    for (i = 0; i < nG; i++) {\n\tif (n == i)\n\t    continue;\n\tvi = GD_neato_nlist(G)[i];\n\tsq = 0.0;\n\tfor (k = 0; k < Ndim; k++) {\n\t    t[k] = ND_pos(vn)[k] - ND_pos(vi)[k];\n\t    sq += (t[k] * t[k]);\n\t}\n\tscale = 1 / fpow32(sq);\n\tfor (k = 0; k < Ndim; k++) {\n\t    for (l = 0; l < k; l++)\n\t\tMsub(l, k) += K[n][i] * D[n][i] * t[k] * t[l] * scale;\n\t    Msub(k, k) +=\n\t\tK[n][i] * (1.0 - D[n][i] * (sq - (t[k] * t[k])) * scale);\n\t}\n    }\n    for (k = 1; k < Ndim; k++)\n\tfor (l = 0; l < k; l++)\n\t    Msub(k, l) = Msub(l, k);\n}\n\nvoid final_energy(graph_t * G, int nG)\n{\n    fprintf(stderr, \"iterations = %d final e = %f\\n\", GD_move(G),\n\t    total_e(G, nG));\n}\n\nnode_t *choose_node(graph_t * G, int nG)\n{\n    int i, k;\n    double m, max;\n    node_t *choice, *np;\n    static int cnt = 0;\n    double e;\n    static double save_e = MAXDOUBLE;\n\n    cnt++;\n    if (GD_move(G) >= MaxIter)\n\treturn NULL;\n#if 0\n    if ((cnt % 100) == 0) {\n\te = total_e(G, nG);\n\tif (e - save_e > 0)\n\t    return NULL;\n\tsave_e = e;\n    }\n#endif\n    max = 0.0;\n    choice = NULL;\n    for (i = 0; i < nG; i++) {\n\tnp = GD_neato_nlist(G)[i];\n\tif (ND_pinned(np) > P_SET)\n\t    continue;\n\tfor (m = 0.0, k = 0; k < Ndim; k++)\n\t    m += (GD_sum_t(G)[i][k] * GD_sum_t(G)[i][k]);\n\t/* could set the color=energy of the node here */\n\tif (m > max) {\n\t    choice = np;\n\t    max = m;\n\t}\n    }\n    if (max < Epsilon2)\n\tchoice = NULL;\n    else {\n\tif (Verbose && (cnt % 100 == 0)) {\n\t    fprintf(stderr, \"%.3f \", sqrt(max));\n\t    if (cnt % 1000 == 0)\n\t\tfprintf(stderr, \"\\n\");\n\t}\n\te = total_e(G, nG);\n\tif (fabs((e - save_e) / save_e) < 1e-5) {\n\t    choice = NULL;\n\t    fprintf(stderr, \" energy tolerance\\n\");\n\t}\n    }\n    return choice;\n}\n\nvoid move_node(graph_t * G, int nG, node_t * n)\n{\n    int i, m;\n    static double *a, b[MAXDIM], c[MAXDIM];\n\n    m = ND_id(n);\n    a = ALLOC(Ndim * Ndim, a, double);\n    D2E(G, nG, m, a);\n    for (i = 0; i < Ndim; i++)\n\tc[i] = -GD_sum_t(G)[m][i];\n    solve(a, b, c, Ndim);\n    for (i = 0; i < Ndim; i++) {\n\tb[i] = (Damping + 2 * (1 - Damping) * drand48()) * b[i];\n\tND_pos(n)[i] += b[i];\n    }\n    GD_move(G)++;\n    update_arrays(G, nG, m);\n    if (test_toggle()) {\n\tdouble sum = 0;\n\tfor (i = 0; i < Ndim; i++) {\n\t    sum += fabs(b[i]);\n\t}\t\t\t/* Why not squared? */\n\tsum = sqrt(sum);\n\tfprintf(stderr, \"%s %.3f\\n\", n->name, sum);\n    }\n}\n\nstatic node_t **Heap;\nstatic int Heapsize;\nstatic node_t *Src;\n\nvoid heapup(node_t * v)\n{\n    int i, par;\n    node_t *u;\n\n    for (i = ND_heapindex(v); i > 0; i = par) {\n\tpar = (i - 1) / 2;\n\tu = Heap[par];\n\tif (ND_dist(u) <= ND_dist(v))\n\t    break;\n\tHeap[par] = v;\n\tND_heapindex(v) = par;\n\tHeap[i] = u;\n\tND_heapindex(u) = i;\n    }\n}\n\nvoid heapdown(node_t * v)\n{\n    int i, left, right, c;\n    node_t *u;\n\n    i = ND_heapindex(v);\n    while ((left = 2 * i + 1) < Heapsize) {\n\tright = left + 1;\n\tif ((right < Heapsize)\n\t    && (Heap[right]->u.dist < Heap[left]->u.dist))\n\t    c = right;\n\telse\n\t    c = left;\n\tu = Heap[c];\n\tif (ND_dist(v) <= ND_dist(u))\n\t    break;\n\tHeap[c] = v;\n\tND_heapindex(v) = c;\n\tHeap[i] = u;\n\tND_heapindex(u) = i;\n\ti = c;\n    }\n}\n\nvoid neato_enqueue(node_t * v)\n{\n    int i;\n\n    assert(ND_heapindex(v) < 0);\n    i = Heapsize++;\n    ND_heapindex(v) = i;\n    Heap[i] = v;\n    if (i > 0)\n\theapup(v);\n}\n\nnode_t *neato_dequeue(void)\n{\n    int i;\n    node_t *rv, *v;\n\n    if (Heapsize == 0)\n\treturn NULL;\n    rv = Heap[0];\n    i = --Heapsize;\n    v = Heap[i];\n    Heap[0] = v;\n    ND_heapindex(v) = 0;\n    if (i > 1)\n\theapdown(v);\n    ND_heapindex(rv) = -1;\n    return rv;\n}\n\nvoid shortest_path(graph_t * G, int nG)\n{\n    node_t *v;\n\n    Heap = N_NEW(nG + 1, node_t *);\n    if (Verbose) {\n\tfprintf(stderr, \"Calculating shortest paths: \");\n\tstart_timer();\n    }\n    for (v = agfstnode(G); v; v = agnxtnode(G, v))\n\ts1(G, v);\n    if (Verbose) {\n\tfprintf(stderr, \"%.2f sec\\n\", elapsed_sec());\n    }\n    free(Heap);\n}\n\nvoid s1(graph_t * G, node_t * node)\n{\n    node_t *v, *u;\n    edge_t *e;\n    int t;\n    double f;\n\n    for (t = 0; (v = GD_neato_nlist(G)[t]); t++)\n\tND_dist(v) = Initial_dist;\n    Src = node;\n    ND_dist(Src) = 0;\n    ND_hops(Src) = 0;\n    neato_enqueue(Src);\n\n    while ((v = neato_dequeue())) {\n\tif (v != Src)\n\t    make_spring(G, Src, v, ND_dist(v));\n\tfor (e = agfstedge(G, v); e; e = agnxtedge(G, e, v)) {\n\t    if ((u = e->head) == v)\n\t\tu = e->tail;\n\t    f = ND_dist(v) + ED_dist(e);\n\t    if (ND_dist(u) > f) {\n\t\tND_dist(u) = f;\n\t\tif (ND_heapindex(u) >= 0)\n\t\t    heapup(u);\n\t\telse {\n\t\t    ND_hops(u) = ND_hops(v) + 1;\n\t\t    neato_enqueue(u);\n\t\t}\n\t    }\n\t}\n    }\n}\n\nvoid make_spring(graph_t * G, node_t * u, node_t * v, double f)\n{\n    int i, j;\n\n    i = ND_id(u);\n    j = ND_id(v);\n    GD_dist(G)[i][j] = GD_dist(G)[j][i] = f;\n}\n\nint allow_edits(int nsec)\n{\n#ifdef INTERACTIVE\n    static int onetime = TRUE;\n    static FILE *fp;\n    static fd_set fd;\n    static struct timeval tv;\n\n    char buf[256], name[256];\n    double x, y;\n    node_t *np;\n\n    if (onetime) {\n\tfp = fopen(\"/dev/tty\", \"r\");\n\tif (fp == NULL)\n\t    exit(1);\n\tsetbuf(fp, NULL);\n\ttv.tv_usec = 0;\n\tonetime = FALSE;\n    }\n    tv.tv_sec = nsec;\n    FD_ZERO(&fd);\n    FD_SET(fileno(fp), &fd);\n    if (select(32, &fd, (fd_set *) 0, (fd_set *) 0, &tv) > 0) {\n\tfgets(buf, sizeof(buf), fp);\n\tswitch (buf[0]) {\n\tcase 'm':\t\t/* move node */\n\t    if (sscanf(buf + 1, \"%s %lf%lf\", name, &x, &y) == 3) {\n\t\tnp = getnode(G, name);\n\t\tif (np) {\n\t\t    NP_pos(np)[0] = x;\n\t\t    NP_pos(np)[1] = y;\n\t\t    diffeq_model();\n\t\t}\n\t    }\n\t    break;\n\tcase 'q':\n\t    return FALSE;\n\tdefault:\n\t    agerr(AGERR, \"unknown command '%s', ignored\\n\", buf);\n\t}\n\treturn TRUE;\n    }\n#endif\n    return FALSE;\n}\n"
  },
  {
    "path": "experimental/neatogen/voronoi.c",
    "content": "/* $Id: voronoi.c,v 1.2 2005/02/24 00:57:33 ellson Exp $ $Revision: 1.2 $ */\n/* vim:set shiftwidth=4 ts=8: */\n\n/**********************************************************\n*      This software is part of the graphviz package      *\n*                http://www.graphviz.org/                 *\n*                                                         *\n*            Copyright (c) 1994-2004 AT&T Corp.           *\n*                and is licensed under the                *\n*            Common Public License, Version 1.0           *\n*                      by AT&T Corp.                      *\n*                                                         *\n*        Information and Software Systems Research        *\n*              AT&T Research, Florham Park NJ             *\n**********************************************************/\n\n#include \"mem.h\"\n#include \"geometry.h\"\n#include \"edges.h\"\n#include \"hedges.h\"\n#include \"heap.h\"\n#include \"voronoi.h\"\n\n\nvoid voronoi(int triangulate, Site * (*nextsite) (void))\n{\n    Site *newsite, *bot, *top, *temp, *p;\n    Site *v;\n    Point newintstar;\n    char pm;\n    Halfedge *lbnd, *rbnd, *llbnd, *rrbnd, *bisector;\n    Edge *e;\n\n    edgeinit();\n    siteinit();\n    PQinitialize();\n    bottomsite = (*nextsite) ();\n#ifdef STANDALONE\n    out_site(bottomsite);\n#endif\n    ELinitialize();\n\n    newsite = (*nextsite) ();\n    while (1) {\n\tif (!PQempty())\n\t    newintstar = PQ_min();\n\n\tif (newsite != (struct Site *) NULL && (PQempty()\n\t\t\t\t\t\t|| newsite->coord.y <\n\t\t\t\t\t\tnewintstar.y\n\t\t\t\t\t\t|| (newsite->coord.y ==\n\t\t\t\t\t\t    newintstar.y\n\t\t\t\t\t\t    && newsite->coord.x <\n\t\t\t\t\t\t    newintstar.x))) {\n\t    /* new site is smallest */\n#ifdef STANDALONE\n\t    out_site(newsite);\n#endif\n\t    lbnd = ELleftbnd(&(newsite->coord));\n\t    rbnd = ELright(lbnd);\n\t    bot = rightreg(lbnd);\n\t    e = bisect(bot, newsite);\n\t    bisector = HEcreate(e, le);\n\t    ELinsert(lbnd, bisector);\n\t    if ((p = hintersect(lbnd, bisector)) != (struct Site *) NULL) {\n\t\tPQdelete(lbnd);\n\t\tPQinsert(lbnd, p, dist(p, newsite));\n\t    }\n\t    lbnd = bisector;\n\t    bisector = HEcreate(e, re);\n\t    ELinsert(lbnd, bisector);\n\t    if ((p = hintersect(bisector, rbnd)) != (struct Site *) NULL)\n\t\tPQinsert(bisector, p, dist(p, newsite));\n\t    newsite = (*nextsite) ();\n\t} else if (!PQempty()) {\n\t    /* intersection is smallest */\n\t    lbnd = PQextractmin();\n\t    llbnd = ELleft(lbnd);\n\t    rbnd = ELright(lbnd);\n\t    rrbnd = ELright(rbnd);\n\t    bot = leftreg(lbnd);\n\t    top = rightreg(rbnd);\n#ifdef STANDALONE\n\t    out_triple(bot, top, rightreg(lbnd));\n#endif\n\t    v = lbnd->vertex;\n\t    makevertex(v);\n\t    endpoint(lbnd->ELedge, lbnd->ELpm, v);\n\t    endpoint(rbnd->ELedge, rbnd->ELpm, v);\n\t    ELdelete(lbnd);\n\t    PQdelete(rbnd);\n\t    ELdelete(rbnd);\n\t    pm = le;\n\t    if (bot->coord.y > top->coord.y) {\n\t\ttemp = bot;\n\t\tbot = top;\n\t\ttop = temp;\n\t\tpm = re;\n\t    }\n\t    e = bisect(bot, top);\n\t    bisector = HEcreate(e, pm);\n\t    ELinsert(llbnd, bisector);\n\t    endpoint(e, re - pm, v);\n\t    deref(v);\n\t    if ((p = hintersect(llbnd, bisector)) != (struct Site *) NULL) {\n\t\tPQdelete(llbnd);\n\t\tPQinsert(llbnd, p, dist(p, bot));\n\t    }\n\t    if ((p = hintersect(bisector, rrbnd)) != (struct Site *) NULL) {\n\t\tPQinsert(bisector, p, dist(p, bot));\n\t    }\n\t} else\n\t    break;\n    }\n\n    for (lbnd = ELright(ELleftend); lbnd != ELrightend;\n\t lbnd = ELright(lbnd)) {\n\te = lbnd->ELedge;\n\tclip_line(e);\n#ifdef STANDALONE\n\tout_ep(e);\n#endif\n    }\n}\n"
  },
  {
    "path": "experimental/neatogen/voronoi.h",
    "content": "/* $Id: voronoi.h,v 1.2 2005/02/24 00:57:33 ellson Exp $ $Revision: 1.2 $ */\n/* vim:set shiftwidth=4 ts=8: */\n\n/**********************************************************\n*      This software is part of the graphviz package      *\n*                http://www.graphviz.org/                 *\n*                                                         *\n*            Copyright (c) 1994-2004 AT&T Corp.           *\n*                and is licensed under the                *\n*            Common Public License, Version 1.0           *\n*                      by AT&T Corp.                      *\n*                                                         *\n*        Information and Software Systems Research        *\n*              AT&T Research, Florham Park NJ             *\n**********************************************************/\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n\n\n#ifndef VORONOI_H\n#define VORONOI_H\n\n#include \"site.h\"\n\n    extern void voronoi(int, Site * (*)(void));\n\n#endif\n\n\n#ifdef __cplusplus\n}\n#endif\n"
  },
  {
    "path": "experimental/solve_VPSC/AUTHORS",
    "content": ""
  },
  {
    "path": "experimental/solve_VPSC/ChangeLog",
    "content": ""
  },
  {
    "path": "experimental/solve_VPSC/Makefile.am",
    "content": "AUTOMAKE_OPTIONS = gnu\nSUBDIRS = libvpsc tests\n\n"
  },
  {
    "path": "experimental/solve_VPSC/Makefile.in",
    "content": "# Makefile.in generated automatically by automake 1.4-p6 from Makefile.am\n\n# Copyright (C) 1994, 1995-8, 1999, 2001 Free Software Foundation, Inc.\n# This Makefile.in is free software; the Free Software Foundation\n# gives unlimited permission to copy and/or distribute it,\n# with or without modifications, as long as this notice is preserved.\n\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY, to the extent permitted by law; without\n# even the implied warranty of MERCHANTABILITY or FITNESS FOR A\n# PARTICULAR PURPOSE.\n\n\nSHELL = @SHELL@\n\nsrcdir = @srcdir@\ntop_srcdir = @top_srcdir@\nVPATH = @srcdir@\nprefix = @prefix@\nexec_prefix = @exec_prefix@\n\nbindir = @bindir@\nsbindir = @sbindir@\nlibexecdir = @libexecdir@\ndatadir = @datadir@\nsysconfdir = @sysconfdir@\nsharedstatedir = @sharedstatedir@\nlocalstatedir = @localstatedir@\nlibdir = @libdir@\ninfodir = @infodir@\nmandir = @mandir@\nincludedir = @includedir@\noldincludedir = /usr/include\n\nDESTDIR =\n\npkgdatadir = $(datadir)/@PACKAGE@\npkglibdir = $(libdir)/@PACKAGE@\npkgincludedir = $(includedir)/@PACKAGE@\n\ntop_builddir = .\n\nACLOCAL = @ACLOCAL@\nAUTOCONF = @AUTOCONF@\nAUTOMAKE = @AUTOMAKE@\nAUTOHEADER = @AUTOHEADER@\n\nINSTALL = @INSTALL@\nINSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS)\nINSTALL_DATA = @INSTALL_DATA@\nINSTALL_SCRIPT = @INSTALL_SCRIPT@\ntransform = @program_transform_name@\n\nNORMAL_INSTALL = :\nPRE_INSTALL = :\nPOST_INSTALL = :\nNORMAL_UNINSTALL = :\nPRE_UNINSTALL = :\nPOST_UNINSTALL = :\nhost_alias = @host_alias@\nhost_triplet = @host@\nAR = @AR@\nAS = @AS@\nCC = @CC@\nCXX = @CXX@\nCXXCPP = @CXXCPP@\nDLLTOOL = @DLLTOOL@\nECHO = @ECHO@\nEGREP = @EGREP@\nEXEEXT = @EXEEXT@\nF77 = @F77@\nGCJ = @GCJ@\nGCJFLAGS = @GCJFLAGS@\nHAVE_LIB = @HAVE_LIB@\nLIB = @LIB@\nLIBTOOL = @LIBTOOL@\nLN_S = @LN_S@\nLTLIB = @LTLIB@\nMAKEINFO = @MAKEINFO@\nOBJDUMP = @OBJDUMP@\nOBJEXT = @OBJEXT@\nPACKAGE = @PACKAGE@\nRANLIB = @RANLIB@\nRC = @RC@\nSTRIP = @STRIP@\nVERSION = @VERSION@\n\nAUTOMAKE_OPTIONS = gnu\nSUBDIRS = libvpsc tests\nACLOCAL_M4 = $(top_srcdir)/aclocal.m4\nmkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs\nCONFIG_CLEAN_FILES = \nDIST_COMMON =  README AUTHORS COPYING ChangeLog INSTALL Makefile.am \\\nMakefile.in NEWS aclocal.m4 config.guess config.sub configure \\\nconfigure.in install-sh ltmain.sh missing mkinstalldirs\n\n\nDISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)\n\nTAR = tar\nGZIP_ENV = --best\nall: all-redirect\n.SUFFIXES:\n$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) \n\tcd $(top_srcdir) && $(AUTOMAKE) --gnu Makefile\n\nMakefile: $(srcdir)/Makefile.in  $(top_builddir)/config.status $(BUILT_SOURCES)\n\tcd $(top_builddir) \\\n\t  && CONFIG_FILES=$@ CONFIG_HEADERS= $(SHELL) ./config.status\n\n$(ACLOCAL_M4):  configure.in \n\tcd $(srcdir) && $(ACLOCAL)\n\nconfig.status: $(srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)\n\t$(SHELL) ./config.status --recheck\n$(srcdir)/configure: $(srcdir)/configure.in $(ACLOCAL_M4) $(CONFIGURE_DEPENDENCIES)\n\tcd $(srcdir) && $(AUTOCONF)\n\n# This directory's subdirectories are mostly independent; you can cd\n# into them and run `make' without going through this Makefile.\n# To change the values of `make' variables: instead of editing Makefiles,\n# (1) if the variable is set in `config.status', edit `config.status'\n#     (which will cause the Makefiles to be regenerated when you run `make');\n# (2) otherwise, pass the desired values on the `make' command line.\n\n@SET_MAKE@\n\nall-recursive install-data-recursive install-exec-recursive \\\ninstalldirs-recursive install-recursive uninstall-recursive  \\\ncheck-recursive installcheck-recursive info-recursive dvi-recursive:\n\t@set fnord $(MAKEFLAGS); amf=$$2; \\\n\tdot_seen=no; \\\n\ttarget=`echo $@ | sed s/-recursive//`; \\\n\tlist='$(SUBDIRS)'; for subdir in $$list; do \\\n\t  echo \"Making $$target in $$subdir\"; \\\n\t  if test \"$$subdir\" = \".\"; then \\\n\t    dot_seen=yes; \\\n\t    local_target=\"$$target-am\"; \\\n\t  else \\\n\t    local_target=\"$$target\"; \\\n\t  fi; \\\n\t  (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \\\n\t   || case \"$$amf\" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \\\n\tdone; \\\n\tif test \"$$dot_seen\" = \"no\"; then \\\n\t  $(MAKE) $(AM_MAKEFLAGS) \"$$target-am\" || exit 1; \\\n\tfi; test -z \"$$fail\"\n\nmostlyclean-recursive clean-recursive distclean-recursive \\\nmaintainer-clean-recursive:\n\t@set fnord $(MAKEFLAGS); amf=$$2; \\\n\tdot_seen=no; \\\n\trev=''; list='$(SUBDIRS)'; for subdir in $$list; do \\\n\t  rev=\"$$subdir $$rev\"; \\\n\t  test \"$$subdir\" != \".\" || dot_seen=yes; \\\n\tdone; \\\n\ttest \"$$dot_seen\" = \"no\" && rev=\". $$rev\"; \\\n\ttarget=`echo $@ | sed s/-recursive//`; \\\n\tfor subdir in $$rev; do \\\n\t  echo \"Making $$target in $$subdir\"; \\\n\t  if test \"$$subdir\" = \".\"; then \\\n\t    local_target=\"$$target-am\"; \\\n\t  else \\\n\t    local_target=\"$$target\"; \\\n\t  fi; \\\n\t  (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \\\n\t   || case \"$$amf\" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \\\n\tdone && test -z \"$$fail\"\ntags-recursive:\n\tlist='$(SUBDIRS)'; for subdir in $$list; do \\\n\t  test \"$$subdir\" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \\\n\tdone\n\ntags: TAGS\n\nID: $(HEADERS) $(SOURCES) $(LISP)\n\tlist='$(SOURCES) $(HEADERS)'; \\\n\tunique=`for i in $$list; do echo $$i; done | \\\n\t  awk '    { files[$$0] = 1; } \\\n\t       END { for (i in files) print i; }'`; \\\n\there=`pwd` && cd $(srcdir) \\\n\t  && mkid -f$$here/ID $$unique $(LISP)\n\nTAGS: tags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) $(LISP)\n\ttags=; \\\n\there=`pwd`; \\\n\tlist='$(SUBDIRS)'; for subdir in $$list; do \\\n   if test \"$$subdir\" = .; then :; else \\\n\t    test -f $$subdir/TAGS && tags=\"$$tags -i $$here/$$subdir/TAGS\"; \\\n   fi; \\\n\tdone; \\\n\tlist='$(SOURCES) $(HEADERS)'; \\\n\tunique=`for i in $$list; do echo $$i; done | \\\n\t  awk '    { files[$$0] = 1; } \\\n\t       END { for (i in files) print i; }'`; \\\n\ttest -z \"$(ETAGS_ARGS)$$unique$(LISP)$$tags\" \\\n\t  || (cd $(srcdir) && etags -o $$here/TAGS $(ETAGS_ARGS) $$tags  $$unique $(LISP))\n\nmostlyclean-tags:\n\nclean-tags:\n\ndistclean-tags:\n\t-rm -f TAGS ID\n\nmaintainer-clean-tags:\n\ndistdir = $(PACKAGE)-$(VERSION)\ntop_distdir = $(distdir)\n\n# This target untars the dist file and tries a VPATH configuration.  Then\n# it guarantees that the distribution is self-contained by making another\n# tarfile.\ndistcheck: dist\n\t-rm -rf $(distdir)\n\tGZIP=$(GZIP_ENV) $(TAR) zxf $(distdir).tar.gz\n\tmkdir $(distdir)/=build\n\tmkdir $(distdir)/=inst\n\tdc_install_base=`cd $(distdir)/=inst && pwd`; \\\n\tcd $(distdir)/=build \\\n\t  && ../configure --srcdir=.. --prefix=$$dc_install_base \\\n\t  && $(MAKE) $(AM_MAKEFLAGS) \\\n\t  && $(MAKE) $(AM_MAKEFLAGS) dvi \\\n\t  && $(MAKE) $(AM_MAKEFLAGS) check \\\n\t  && $(MAKE) $(AM_MAKEFLAGS) install \\\n\t  && $(MAKE) $(AM_MAKEFLAGS) installcheck \\\n\t  && $(MAKE) $(AM_MAKEFLAGS) dist\n\t-rm -rf $(distdir)\n\t@banner=\"$(distdir).tar.gz is ready for distribution\"; \\\n\tdashes=`echo \"$$banner\" | sed s/./=/g`; \\\n\techo \"$$dashes\"; \\\n\techo \"$$banner\"; \\\n\techo \"$$dashes\"\ndist: distdir\n\t-chmod -R a+r $(distdir)\n\tGZIP=$(GZIP_ENV) $(TAR) chozf $(distdir).tar.gz $(distdir)\n\t-rm -rf $(distdir)\ndist-all: distdir\n\t-chmod -R a+r $(distdir)\n\tGZIP=$(GZIP_ENV) $(TAR) chozf $(distdir).tar.gz $(distdir)\n\t-rm -rf $(distdir)\ndistdir: $(DISTFILES)\n\t-rm -rf $(distdir)\n\tmkdir $(distdir)\n\t-chmod 777 $(distdir)\n\there=`cd $(top_builddir) && pwd`; \\\n\ttop_distdir=`cd $(distdir) && pwd`; \\\n\tdistdir=`cd $(distdir) && pwd`; \\\n\tcd $(top_srcdir) \\\n\t  && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --gnu Makefile\n\t@for file in $(DISTFILES); do \\\n\t  d=$(srcdir); \\\n\t  if test -d $$d/$$file; then \\\n\t    cp -pr $$d/$$file $(distdir)/$$file; \\\n\t  else \\\n\t    test -f $(distdir)/$$file \\\n\t    || ln $$d/$$file $(distdir)/$$file 2> /dev/null \\\n\t    || cp -p $$d/$$file $(distdir)/$$file || :; \\\n\t  fi; \\\n\tdone\n\tfor subdir in $(SUBDIRS); do \\\n\t  if test \"$$subdir\" = .; then :; else \\\n\t    test -d $(distdir)/$$subdir \\\n\t    || mkdir $(distdir)/$$subdir \\\n\t    || exit 1; \\\n\t    chmod 777 $(distdir)/$$subdir; \\\n\t    (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir=../$(distdir) distdir=../$(distdir)/$$subdir distdir) \\\n\t      || exit 1; \\\n\t  fi; \\\n\tdone\ninfo-am:\ninfo: info-recursive\ndvi-am:\ndvi: dvi-recursive\ncheck-am: all-am\ncheck: check-recursive\ninstallcheck-am:\ninstallcheck: installcheck-recursive\ninstall-exec-am:\ninstall-exec: install-exec-recursive\n\ninstall-data-am:\ninstall-data: install-data-recursive\n\ninstall-am: all-am\n\t@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am\ninstall: install-recursive\nuninstall-am:\nuninstall: uninstall-recursive\nall-am: Makefile\nall-redirect: all-recursive\ninstall-strip:\n\t$(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install\ninstalldirs: installdirs-recursive\ninstalldirs-am:\n\n\nmostlyclean-generic:\n\nclean-generic:\n\ndistclean-generic:\n\t-rm -f Makefile $(CONFIG_CLEAN_FILES)\n\t-rm -f config.cache config.log stamp-h stamp-h[0-9]*\n\nmaintainer-clean-generic:\nmostlyclean-am:  mostlyclean-tags mostlyclean-generic\n\nmostlyclean: mostlyclean-recursive\n\nclean-am:  clean-tags clean-generic mostlyclean-am\n\nclean: clean-recursive\n\ndistclean-am:  distclean-tags distclean-generic clean-am\n\t-rm -f libtool\n\ndistclean: distclean-recursive\n\t-rm -f config.status\n\nmaintainer-clean-am:  maintainer-clean-tags maintainer-clean-generic \\\n\t\tdistclean-am\n\t@echo \"This command is intended for maintainers to use;\"\n\t@echo \"it deletes files that may require special tools to rebuild.\"\n\nmaintainer-clean: maintainer-clean-recursive\n\t-rm -f config.status\n\n.PHONY: install-data-recursive uninstall-data-recursive \\\ninstall-exec-recursive uninstall-exec-recursive installdirs-recursive \\\nuninstalldirs-recursive all-recursive check-recursive \\\ninstallcheck-recursive info-recursive dvi-recursive \\\nmostlyclean-recursive distclean-recursive clean-recursive \\\nmaintainer-clean-recursive tags tags-recursive mostlyclean-tags \\\ndistclean-tags clean-tags maintainer-clean-tags distdir info-am info \\\ndvi-am dvi check check-am installcheck-am installcheck install-exec-am \\\ninstall-exec install-data-am install-data install-am install \\\nuninstall-am uninstall all-redirect all-am all installdirs-am \\\ninstalldirs mostlyclean-generic distclean-generic clean-generic \\\nmaintainer-clean-generic clean mostlyclean distclean maintainer-clean\n\n\n# Tell versions [3.59,3.63) of GNU make to not export all variables.\n# Otherwise a system limit (for SysV at least) may be exceeded.\n.NOEXPORT:\n"
  },
  {
    "path": "experimental/solve_VPSC/NEWS",
    "content": ""
  },
  {
    "path": "experimental/solve_VPSC/README",
    "content": "Building:\n\tlibtoolize\n\tautomake -a\n\t./configure\n\tmake check\n\n"
  },
  {
    "path": "experimental/solve_VPSC/aclocal.m4",
    "content": "dnl aclocal.m4t generated automatically by aclocal 1.4-p6\n\ndnl Copyright (C) 1994, 1995-8, 1999, 2001 Free Software Foundation, Inc.\ndnl This file is free software; the Free Software Foundation\ndnl gives unlimited permission to copy and/or distribute it,\ndnl with or without modifications, as long as this notice is preserved.\n\ndnl This program is distributed in the hope that it will be useful,\ndnl but WITHOUT ANY WARRANTY, to the extent permitted by law; without\ndnl even the implied warranty of MERCHANTABILITY or FITNESS FOR A\ndnl PARTICULAR PURPOSE.\n\n# lib-prefix.m4 serial 4 (gettext-0.14.2)\ndnl Copyright (C) 2001-2005 Free Software Foundation, Inc.\ndnl This file is free software; the Free Software Foundation\ndnl gives unlimited permission to copy and/or distribute it,\ndnl with or without modifications, as long as this notice is preserved.\n\ndnl From Bruno Haible.\n\ndnl AC_LIB_ARG_WITH is synonymous to AC_ARG_WITH in autoconf-2.13, and\ndnl similar to AC_ARG_WITH in autoconf 2.52...2.57 except that is doesn't\ndnl require excessive bracketing.\nifdef([AC_HELP_STRING],\n[AC_DEFUN([AC_LIB_ARG_WITH], [AC_ARG_WITH([$1],[[$2]],[$3],[$4])])],\n[AC_DEFUN([AC_][LIB_ARG_WITH], [AC_ARG_WITH([$1],[$2],[$3],[$4])])])\n\ndnl AC_LIB_PREFIX adds to the CPPFLAGS and LDFLAGS the flags that are needed\ndnl to access previously installed libraries. The basic assumption is that\ndnl a user will want packages to use other packages he previously installed\ndnl with the same --prefix option.\ndnl This macro is not needed if only AC_LIB_LINKFLAGS is used to locate\ndnl libraries, but is otherwise very convenient.\nAC_DEFUN([AC_LIB_PREFIX],\n[\n  AC_BEFORE([$0], [AC_LIB_LINKFLAGS])\n  AC_REQUIRE([AC_PROG_CC])\n  AC_REQUIRE([AC_CANONICAL_HOST])\n  AC_REQUIRE([AC_LIB_PREPARE_PREFIX])\n  dnl By default, look in $includedir and $libdir.\n  use_additional=yes\n  AC_LIB_WITH_FINAL_PREFIX([\n    eval additional_includedir=\\\"$includedir\\\"\n    eval additional_libdir=\\\"$libdir\\\"\n  ])\n  AC_LIB_ARG_WITH([lib-prefix],\n[  --with-lib-prefix[=DIR] search for libraries in DIR/include and DIR/lib\n  --without-lib-prefix    don't search for libraries in includedir and libdir],\n[\n    if test \"X$withval\" = \"Xno\"; then\n      use_additional=no\n    else\n      if test \"X$withval\" = \"X\"; then\n        AC_LIB_WITH_FINAL_PREFIX([\n          eval additional_includedir=\\\"$includedir\\\"\n          eval additional_libdir=\\\"$libdir\\\"\n        ])\n      else\n        additional_includedir=\"$withval/include\"\n        additional_libdir=\"$withval/lib\"\n      fi\n    fi\n])\n  if test $use_additional = yes; then\n    dnl Potentially add $additional_includedir to $CPPFLAGS.\n    dnl But don't add it\n    dnl   1. if it's the standard /usr/include,\n    dnl   2. if it's already present in $CPPFLAGS,\n    dnl   3. if it's /usr/local/include and we are using GCC on Linux,\n    dnl   4. if it doesn't exist as a directory.\n    if test \"X$additional_includedir\" != \"X/usr/include\"; then\n      haveit=\n      for x in $CPPFLAGS; do\n        AC_LIB_WITH_FINAL_PREFIX([eval x=\\\"$x\\\"])\n        if test \"X$x\" = \"X-I$additional_includedir\"; then\n          haveit=yes\n          break\n        fi\n      done\n      if test -z \"$haveit\"; then\n        if test \"X$additional_includedir\" = \"X/usr/local/include\"; then\n          if test -n \"$GCC\"; then\n            case $host_os in\n              linux* | gnu* | k*bsd*-gnu) haveit=yes;;\n            esac\n          fi\n        fi\n        if test -z \"$haveit\"; then\n          if test -d \"$additional_includedir\"; then\n            dnl Really add $additional_includedir to $CPPFLAGS.\n            CPPFLAGS=\"${CPPFLAGS}${CPPFLAGS:+ }-I$additional_includedir\"\n          fi\n        fi\n      fi\n    fi\n    dnl Potentially add $additional_libdir to $LDFLAGS.\n    dnl But don't add it\n    dnl   1. if it's the standard /usr/lib,\n    dnl   2. if it's already present in $LDFLAGS,\n    dnl   3. if it's /usr/local/lib and we are using GCC on Linux,\n    dnl   4. if it doesn't exist as a directory.\n    if test \"X$additional_libdir\" != \"X/usr/lib\"; then\n      haveit=\n      for x in $LDFLAGS; do\n        AC_LIB_WITH_FINAL_PREFIX([eval x=\\\"$x\\\"])\n        if test \"X$x\" = \"X-L$additional_libdir\"; then\n          haveit=yes\n          break\n        fi\n      done\n      if test -z \"$haveit\"; then\n        if test \"X$additional_libdir\" = \"X/usr/local/lib\"; then\n          if test -n \"$GCC\"; then\n            case $host_os in\n              linux*) haveit=yes;;\n            esac\n          fi\n        fi\n        if test -z \"$haveit\"; then\n          if test -d \"$additional_libdir\"; then\n            dnl Really add $additional_libdir to $LDFLAGS.\n            LDFLAGS=\"${LDFLAGS}${LDFLAGS:+ }-L$additional_libdir\"\n          fi\n        fi\n      fi\n    fi\n  fi\n])\n\ndnl AC_LIB_PREPARE_PREFIX creates variables acl_final_prefix,\ndnl acl_final_exec_prefix, containing the values to which $prefix and\ndnl $exec_prefix will expand at the end of the configure script.\nAC_DEFUN([AC_LIB_PREPARE_PREFIX],\n[\n  dnl Unfortunately, prefix and exec_prefix get only finally determined\n  dnl at the end of configure.\n  if test \"X$prefix\" = \"XNONE\"; then\n    acl_final_prefix=\"$ac_default_prefix\"\n  else\n    acl_final_prefix=\"$prefix\"\n  fi\n  if test \"X$exec_prefix\" = \"XNONE\"; then\n    acl_final_exec_prefix='${prefix}'\n  else\n    acl_final_exec_prefix=\"$exec_prefix\"\n  fi\n  acl_save_prefix=\"$prefix\"\n  prefix=\"$acl_final_prefix\"\n  eval acl_final_exec_prefix=\\\"$acl_final_exec_prefix\\\"\n  prefix=\"$acl_save_prefix\"\n])\n\ndnl AC_LIB_WITH_FINAL_PREFIX([statement]) evaluates statement, with the\ndnl variables prefix and exec_prefix bound to the values they will have\ndnl at the end of the configure script.\nAC_DEFUN([AC_LIB_WITH_FINAL_PREFIX],\n[\n  acl_save_prefix=\"$prefix\"\n  prefix=\"$acl_final_prefix\"\n  acl_save_exec_prefix=\"$exec_prefix\"\n  exec_prefix=\"$acl_final_exec_prefix\"\n  $1\n  exec_prefix=\"$acl_save_exec_prefix\"\n  prefix=\"$acl_save_prefix\"\n])\n\n# lib-link.m4 serial 6 (gettext-0.14.3)\ndnl Copyright (C) 2001-2005 Free Software Foundation, Inc.\ndnl This file is free software; the Free Software Foundation\ndnl gives unlimited permission to copy and/or distribute it,\ndnl with or without modifications, as long as this notice is preserved.\n\ndnl From Bruno Haible.\n\nAC_PREREQ(2.50)\n\ndnl AC_LIB_LINKFLAGS(name [, dependencies]) searches for libname and\ndnl the libraries corresponding to explicit and implicit dependencies.\ndnl Sets and AC_SUBSTs the LIB${NAME} and LTLIB${NAME} variables and\ndnl augments the CPPFLAGS variable.\nAC_DEFUN([AC_LIB_LINKFLAGS],\n[\n  AC_REQUIRE([AC_LIB_PREPARE_PREFIX])\n  AC_REQUIRE([AC_LIB_RPATH])\n  define([Name],[translit([$1],[./-], [___])])\n  define([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-],\n                               [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])])\n  AC_CACHE_CHECK([how to link with lib[]$1], [ac_cv_lib[]Name[]_libs], [\n    AC_LIB_LINKFLAGS_BODY([$1], [$2])\n    ac_cv_lib[]Name[]_libs=\"$LIB[]NAME\"\n    ac_cv_lib[]Name[]_ltlibs=\"$LTLIB[]NAME\"\n    ac_cv_lib[]Name[]_cppflags=\"$INC[]NAME\"\n  ])\n  LIB[]NAME=\"$ac_cv_lib[]Name[]_libs\"\n  LTLIB[]NAME=\"$ac_cv_lib[]Name[]_ltlibs\"\n  INC[]NAME=\"$ac_cv_lib[]Name[]_cppflags\"\n  AC_LIB_APPENDTOVAR([CPPFLAGS], [$INC]NAME)\n  AC_SUBST([LIB]NAME)\n  AC_SUBST([LTLIB]NAME)\n  dnl Also set HAVE_LIB[]NAME so that AC_LIB_HAVE_LINKFLAGS can reuse the\n  dnl results of this search when this library appears as a dependency.\n  HAVE_LIB[]NAME=yes\n  undefine([Name])\n  undefine([NAME])\n])\n\ndnl AC_LIB_HAVE_LINKFLAGS(name, dependencies, includes, testcode)\ndnl searches for libname and the libraries corresponding to explicit and\ndnl implicit dependencies, together with the specified include files and\ndnl the ability to compile and link the specified testcode. If found, it\ndnl sets and AC_SUBSTs HAVE_LIB${NAME}=yes and the LIB${NAME} and\ndnl LTLIB${NAME} variables and augments the CPPFLAGS variable, and\ndnl #defines HAVE_LIB${NAME} to 1. Otherwise, it sets and AC_SUBSTs\ndnl HAVE_LIB${NAME}=no and LIB${NAME} and LTLIB${NAME} to empty.\nAC_DEFUN([AC_LIB_HAVE_LINKFLAGS],\n[\n  AC_REQUIRE([AC_LIB_PREPARE_PREFIX])\n  AC_REQUIRE([AC_LIB_RPATH])\n  define([Name],[translit([$1],[./-], [___])])\n  define([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-],\n                               [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])])\n\n  dnl Search for lib[]Name and define LIB[]NAME, LTLIB[]NAME and INC[]NAME\n  dnl accordingly.\n  AC_LIB_LINKFLAGS_BODY([$1], [$2])\n\n  dnl Add $INC[]NAME to CPPFLAGS before performing the following checks,\n  dnl because if the user has installed lib[]Name and not disabled its use\n  dnl via --without-lib[]Name-prefix, he wants to use it.\n  ac_save_CPPFLAGS=\"$CPPFLAGS\"\n  AC_LIB_APPENDTOVAR([CPPFLAGS], [$INC]NAME)\n\n  AC_CACHE_CHECK([for lib[]$1], [ac_cv_lib[]Name], [\n    ac_save_LIBS=\"$LIBS\"\n    LIBS=\"$LIBS $LIB[]NAME\"\n    AC_TRY_LINK([$3], [$4], [ac_cv_lib[]Name=yes], [ac_cv_lib[]Name=no])\n    LIBS=\"$ac_save_LIBS\"\n  ])\n  if test \"$ac_cv_lib[]Name\" = yes; then\n    HAVE_LIB[]NAME=yes\n    AC_DEFINE([HAVE_LIB]NAME, 1, [Define if you have the $1 library.])\n    AC_MSG_CHECKING([how to link with lib[]$1])\n    AC_MSG_RESULT([$LIB[]NAME])\n  else\n    HAVE_LIB[]NAME=no\n    dnl If $LIB[]NAME didn't lead to a usable library, we don't need\n    dnl $INC[]NAME either.\n    CPPFLAGS=\"$ac_save_CPPFLAGS\"\n    LIB[]NAME=\n    LTLIB[]NAME=\n  fi\n  AC_SUBST([HAVE_LIB]NAME)\n  AC_SUBST([LIB]NAME)\n  AC_SUBST([LTLIB]NAME)\n  undefine([Name])\n  undefine([NAME])\n])\n\ndnl Determine the platform dependent parameters needed to use rpath:\ndnl libext, shlibext, hardcode_libdir_flag_spec, hardcode_libdir_separator,\ndnl hardcode_direct, hardcode_minus_L.\nAC_DEFUN([AC_LIB_RPATH],\n[\n  dnl Tell automake >= 1.10 to complain if config.rpath is missing.\n  m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([config.rpath])])\n  AC_REQUIRE([AC_PROG_CC])                dnl we use $CC, $GCC, $LDFLAGS\n  AC_REQUIRE([AC_LIB_PROG_LD])            dnl we use $LD, $with_gnu_ld\n  AC_REQUIRE([AC_CANONICAL_HOST])         dnl we use $host\n  AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT]) dnl we use $ac_aux_dir\n  AC_CACHE_CHECK([for shared library run path origin], acl_cv_rpath, [\n    CC=\"$CC\" GCC=\"$GCC\" LDFLAGS=\"$LDFLAGS\" LD=\"$LD\" with_gnu_ld=\"$with_gnu_ld\" \\\n    ${CONFIG_SHELL-/bin/sh} \"$ac_aux_dir/config.rpath\" \"$host\" > conftest.sh\n    . ./conftest.sh\n    rm -f ./conftest.sh\n    acl_cv_rpath=done\n  ])\n  wl=\"$acl_cv_wl\"\n  libext=\"$acl_cv_libext\"\n  shlibext=\"$acl_cv_shlibext\"\n  hardcode_libdir_flag_spec=\"$acl_cv_hardcode_libdir_flag_spec\"\n  hardcode_libdir_separator=\"$acl_cv_hardcode_libdir_separator\"\n  hardcode_direct=\"$acl_cv_hardcode_direct\"\n  hardcode_minus_L=\"$acl_cv_hardcode_minus_L\"\n  dnl Determine whether the user wants rpath handling at all.\n  AC_ARG_ENABLE(rpath,\n    [  --disable-rpath         do not hardcode runtime library paths],\n    :, enable_rpath=yes)\n])\n\ndnl AC_LIB_LINKFLAGS_BODY(name [, dependencies]) searches for libname and\ndnl the libraries corresponding to explicit and implicit dependencies.\ndnl Sets the LIB${NAME}, LTLIB${NAME} and INC${NAME} variables.\nAC_DEFUN([AC_LIB_LINKFLAGS_BODY],\n[\n  define([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-],\n                               [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])])\n  dnl By default, look in $includedir and $libdir.\n  use_additional=yes\n  AC_LIB_WITH_FINAL_PREFIX([\n    eval additional_includedir=\\\"$includedir\\\"\n    eval additional_libdir=\\\"$libdir\\\"\n  ])\n  AC_LIB_ARG_WITH([lib$1-prefix],\n[  --with-lib$1-prefix[=DIR]  search for lib$1 in DIR/include and DIR/lib\n  --without-lib$1-prefix     don't search for lib$1 in includedir and libdir],\n[\n    if test \"X$withval\" = \"Xno\"; then\n      use_additional=no\n    else\n      if test \"X$withval\" = \"X\"; then\n        AC_LIB_WITH_FINAL_PREFIX([\n          eval additional_includedir=\\\"$includedir\\\"\n          eval additional_libdir=\\\"$libdir\\\"\n        ])\n      else\n        additional_includedir=\"$withval/include\"\n        additional_libdir=\"$withval/lib\"\n      fi\n    fi\n])\n  dnl Search the library and its dependencies in $additional_libdir and\n  dnl $LDFLAGS. Using breadth-first-seach.\n  LIB[]NAME=\n  LTLIB[]NAME=\n  INC[]NAME=\n  rpathdirs=\n  ltrpathdirs=\n  names_already_handled=\n  names_next_round='$1 $2'\n  while test -n \"$names_next_round\"; do\n    names_this_round=\"$names_next_round\"\n    names_next_round=\n    for name in $names_this_round; do\n      already_handled=\n      for n in $names_already_handled; do\n        if test \"$n\" = \"$name\"; then\n          already_handled=yes\n          break\n        fi\n      done\n      if test -z \"$already_handled\"; then\n        names_already_handled=\"$names_already_handled $name\"\n        dnl See if it was already located by an earlier AC_LIB_LINKFLAGS\n        dnl or AC_LIB_HAVE_LINKFLAGS call.\n        uppername=`echo \"$name\" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./-|ABCDEFGHIJKLMNOPQRSTUVWXYZ___|'`\n        eval value=\\\"\\$HAVE_LIB$uppername\\\"\n        if test -n \"$value\"; then\n          if test \"$value\" = yes; then\n            eval value=\\\"\\$LIB$uppername\\\"\n            test -z \"$value\" || LIB[]NAME=\"${LIB[]NAME}${LIB[]NAME:+ }$value\"\n            eval value=\\\"\\$LTLIB$uppername\\\"\n            test -z \"$value\" || LTLIB[]NAME=\"${LTLIB[]NAME}${LTLIB[]NAME:+ }$value\"\n          else\n            dnl An earlier call to AC_LIB_HAVE_LINKFLAGS has determined\n            dnl that this library doesn't exist. So just drop it.\n            :\n          fi\n        else\n          dnl Search the library lib$name in $additional_libdir and $LDFLAGS\n          dnl and the already constructed $LIBNAME/$LTLIBNAME.\n          found_dir=\n          found_la=\n          found_so=\n          found_a=\n          if test $use_additional = yes; then\n            if test -n \"$shlibext\" && test -f \"$additional_libdir/lib$name.$shlibext\"; then\n              found_dir=\"$additional_libdir\"\n              found_so=\"$additional_libdir/lib$name.$shlibext\"\n              if test -f \"$additional_libdir/lib$name.la\"; then\n                found_la=\"$additional_libdir/lib$name.la\"\n              fi\n            else\n              if test -f \"$additional_libdir/lib$name.$libext\"; then\n                found_dir=\"$additional_libdir\"\n                found_a=\"$additional_libdir/lib$name.$libext\"\n                if test -f \"$additional_libdir/lib$name.la\"; then\n                  found_la=\"$additional_libdir/lib$name.la\"\n                fi\n              fi\n            fi\n          fi\n          if test \"X$found_dir\" = \"X\"; then\n            for x in $LDFLAGS $LTLIB[]NAME; do\n              AC_LIB_WITH_FINAL_PREFIX([eval x=\\\"$x\\\"])\n              case \"$x\" in\n                -L*)\n                  dir=`echo \"X$x\" | sed -e 's/^X-L//'`\n                  if test -n \"$shlibext\" && test -f \"$dir/lib$name.$shlibext\"; then\n                    found_dir=\"$dir\"\n                    found_so=\"$dir/lib$name.$shlibext\"\n                    if test -f \"$dir/lib$name.la\"; then\n                      found_la=\"$dir/lib$name.la\"\n                    fi\n                  else\n                    if test -f \"$dir/lib$name.$libext\"; then\n                      found_dir=\"$dir\"\n                      found_a=\"$dir/lib$name.$libext\"\n                      if test -f \"$dir/lib$name.la\"; then\n                        found_la=\"$dir/lib$name.la\"\n                      fi\n                    fi\n                  fi\n                  ;;\n              esac\n              if test \"X$found_dir\" != \"X\"; then\n                break\n              fi\n            done\n          fi\n          if test \"X$found_dir\" != \"X\"; then\n            dnl Found the library.\n            LTLIB[]NAME=\"${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$found_dir -l$name\"\n            if test \"X$found_so\" != \"X\"; then\n              dnl Linking with a shared library. We attempt to hardcode its\n              dnl directory into the executable's runpath, unless it's the\n              dnl standard /usr/lib.\n              if test \"$enable_rpath\" = no || test \"X$found_dir\" = \"X/usr/lib\"; then\n                dnl No hardcoding is needed.\n                LIB[]NAME=\"${LIB[]NAME}${LIB[]NAME:+ }$found_so\"\n              else\n                dnl Use an explicit option to hardcode DIR into the resulting\n                dnl binary.\n                dnl Potentially add DIR to ltrpathdirs.\n                dnl The ltrpathdirs will be appended to $LTLIBNAME at the end.\n                haveit=\n                for x in $ltrpathdirs; do\n                  if test \"X$x\" = \"X$found_dir\"; then\n                    haveit=yes\n                    break\n                  fi\n                done\n                if test -z \"$haveit\"; then\n                  ltrpathdirs=\"$ltrpathdirs $found_dir\"\n                fi\n                dnl The hardcoding into $LIBNAME is system dependent.\n                if test \"$hardcode_direct\" = yes; then\n                  dnl Using DIR/libNAME.so during linking hardcodes DIR into the\n                  dnl resulting binary.\n                  LIB[]NAME=\"${LIB[]NAME}${LIB[]NAME:+ }$found_so\"\n                else\n                  if test -n \"$hardcode_libdir_flag_spec\" && test \"$hardcode_minus_L\" = no; then\n                    dnl Use an explicit option to hardcode DIR into the resulting\n                    dnl binary.\n                    LIB[]NAME=\"${LIB[]NAME}${LIB[]NAME:+ }$found_so\"\n                    dnl Potentially add DIR to rpathdirs.\n                    dnl The rpathdirs will be appended to $LIBNAME at the end.\n                    haveit=\n                    for x in $rpathdirs; do\n                      if test \"X$x\" = \"X$found_dir\"; then\n                        haveit=yes\n                        break\n                      fi\n                    done\n                    if test -z \"$haveit\"; then\n                      rpathdirs=\"$rpathdirs $found_dir\"\n                    fi\n                  else\n                    dnl Rely on \"-L$found_dir\".\n                    dnl But don't add it if it's already contained in the LDFLAGS\n                    dnl or the already constructed $LIBNAME\n                    haveit=\n                    for x in $LDFLAGS $LIB[]NAME; do\n                      AC_LIB_WITH_FINAL_PREFIX([eval x=\\\"$x\\\"])\n                      if test \"X$x\" = \"X-L$found_dir\"; then\n                        haveit=yes\n                        break\n                      fi\n                    done\n                    if test -z \"$haveit\"; then\n                      LIB[]NAME=\"${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir\"\n                    fi\n                    if test \"$hardcode_minus_L\" != no; then\n                      dnl FIXME: Not sure whether we should use\n                      dnl \"-L$found_dir -l$name\" or \"-L$found_dir $found_so\"\n                      dnl here.\n                      LIB[]NAME=\"${LIB[]NAME}${LIB[]NAME:+ }$found_so\"\n                    else\n                      dnl We cannot use $hardcode_runpath_var and LD_RUN_PATH\n                      dnl here, because this doesn't fit in flags passed to the\n                      dnl compiler. So give up. No hardcoding. This affects only\n                      dnl very old systems.\n                      dnl FIXME: Not sure whether we should use\n                      dnl \"-L$found_dir -l$name\" or \"-L$found_dir $found_so\"\n                      dnl here.\n                      LIB[]NAME=\"${LIB[]NAME}${LIB[]NAME:+ }-l$name\"\n                    fi\n                  fi\n                fi\n              fi\n            else\n              if test \"X$found_a\" != \"X\"; then\n                dnl Linking with a static library.\n                LIB[]NAME=\"${LIB[]NAME}${LIB[]NAME:+ }$found_a\"\n              else\n                dnl We shouldn't come here, but anyway it's good to have a\n                dnl fallback.\n                LIB[]NAME=\"${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir -l$name\"\n              fi\n            fi\n            dnl Assume the include files are nearby.\n            additional_includedir=\n            case \"$found_dir\" in\n              */lib | */lib/)\n                basedir=`echo \"X$found_dir\" | sed -e 's,^X,,' -e 's,/lib/*$,,'`\n                additional_includedir=\"$basedir/include\"\n                ;;\n            esac\n            if test \"X$additional_includedir\" != \"X\"; then\n              dnl Potentially add $additional_includedir to $INCNAME.\n              dnl But don't add it\n              dnl   1. if it's the standard /usr/include,\n              dnl   2. if it's /usr/local/include and we are using GCC on Linux,\n              dnl   3. if it's already present in $CPPFLAGS or the already\n              dnl      constructed $INCNAME,\n              dnl   4. if it doesn't exist as a directory.\n              if test \"X$additional_includedir\" != \"X/usr/include\"; then\n                haveit=\n                if test \"X$additional_includedir\" = \"X/usr/local/include\"; then\n                  if test -n \"$GCC\"; then\n                    case $host_os in\n                      linux* | gnu* | k*bsd*-gnu) haveit=yes;;\n                    esac\n                  fi\n                fi\n                if test -z \"$haveit\"; then\n                  for x in $CPPFLAGS $INC[]NAME; do\n                    AC_LIB_WITH_FINAL_PREFIX([eval x=\\\"$x\\\"])\n                    if test \"X$x\" = \"X-I$additional_includedir\"; then\n                      haveit=yes\n                      break\n                    fi\n                  done\n                  if test -z \"$haveit\"; then\n                    if test -d \"$additional_includedir\"; then\n                      dnl Really add $additional_includedir to $INCNAME.\n                      INC[]NAME=\"${INC[]NAME}${INC[]NAME:+ }-I$additional_includedir\"\n                    fi\n                  fi\n                fi\n              fi\n            fi\n            dnl Look for dependencies.\n            if test -n \"$found_la\"; then\n              dnl Read the .la file. It defines the variables\n              dnl dlname, library_names, old_library, dependency_libs, current,\n              dnl age, revision, installed, dlopen, dlpreopen, libdir.\n              save_libdir=\"$libdir\"\n              case \"$found_la\" in\n                */* | *\\\\*) . \"$found_la\" ;;\n                *) . \"./$found_la\" ;;\n              esac\n              libdir=\"$save_libdir\"\n              dnl We use only dependency_libs.\n              for dep in $dependency_libs; do\n                case \"$dep\" in\n                  -L*)\n                    additional_libdir=`echo \"X$dep\" | sed -e 's/^X-L//'`\n                    dnl Potentially add $additional_libdir to $LIBNAME and $LTLIBNAME.\n                    dnl But don't add it\n                    dnl   1. if it's the standard /usr/lib,\n                    dnl   2. if it's /usr/local/lib and we are using GCC on Linux,\n                    dnl   3. if it's already present in $LDFLAGS or the already\n                    dnl      constructed $LIBNAME,\n                    dnl   4. if it doesn't exist as a directory.\n                    if test \"X$additional_libdir\" != \"X/usr/lib\"; then\n                      haveit=\n                      if test \"X$additional_libdir\" = \"X/usr/local/lib\"; then\n                        if test -n \"$GCC\"; then\n                          case $host_os in\n                            linux* | gnu* | k*bsd*-gnu) haveit=yes;;\n                          esac\n                        fi\n                      fi\n                      if test -z \"$haveit\"; then\n                        haveit=\n                        for x in $LDFLAGS $LIB[]NAME; do\n                          AC_LIB_WITH_FINAL_PREFIX([eval x=\\\"$x\\\"])\n                          if test \"X$x\" = \"X-L$additional_libdir\"; then\n                            haveit=yes\n                            break\n                          fi\n                        done\n                        if test -z \"$haveit\"; then\n                          if test -d \"$additional_libdir\"; then\n                            dnl Really add $additional_libdir to $LIBNAME.\n                            LIB[]NAME=\"${LIB[]NAME}${LIB[]NAME:+ }-L$additional_libdir\"\n                          fi\n                        fi\n                        haveit=\n                        for x in $LDFLAGS $LTLIB[]NAME; do\n                          AC_LIB_WITH_FINAL_PREFIX([eval x=\\\"$x\\\"])\n                          if test \"X$x\" = \"X-L$additional_libdir\"; then\n                            haveit=yes\n                            break\n                          fi\n                        done\n                        if test -z \"$haveit\"; then\n                          if test -d \"$additional_libdir\"; then\n                            dnl Really add $additional_libdir to $LTLIBNAME.\n                            LTLIB[]NAME=\"${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$additional_libdir\"\n                          fi\n                        fi\n                      fi\n                    fi\n                    ;;\n                  -R*)\n                    dir=`echo \"X$dep\" | sed -e 's/^X-R//'`\n                    if test \"$enable_rpath\" != no; then\n                      dnl Potentially add DIR to rpathdirs.\n                      dnl The rpathdirs will be appended to $LIBNAME at the end.\n                      haveit=\n                      for x in $rpathdirs; do\n                        if test \"X$x\" = \"X$dir\"; then\n                          haveit=yes\n                          break\n                        fi\n                      done\n                      if test -z \"$haveit\"; then\n                        rpathdirs=\"$rpathdirs $dir\"\n                      fi\n                      dnl Potentially add DIR to ltrpathdirs.\n                      dnl The ltrpathdirs will be appended to $LTLIBNAME at the end.\n                      haveit=\n                      for x in $ltrpathdirs; do\n                        if test \"X$x\" = \"X$dir\"; then\n                          haveit=yes\n                          break\n                        fi\n                      done\n                      if test -z \"$haveit\"; then\n                        ltrpathdirs=\"$ltrpathdirs $dir\"\n                      fi\n                    fi\n                    ;;\n                  -l*)\n                    dnl Handle this in the next round.\n                    names_next_round=\"$names_next_round \"`echo \"X$dep\" | sed -e 's/^X-l//'`\n                    ;;\n                  *.la)\n                    dnl Handle this in the next round. Throw away the .la's\n                    dnl directory; it is already contained in a preceding -L\n                    dnl option.\n                    names_next_round=\"$names_next_round \"`echo \"X$dep\" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\\.la$,,'`\n                    ;;\n                  *)\n                    dnl Most likely an immediate library name.\n                    LIB[]NAME=\"${LIB[]NAME}${LIB[]NAME:+ }$dep\"\n                    LTLIB[]NAME=\"${LTLIB[]NAME}${LTLIB[]NAME:+ }$dep\"\n                    ;;\n                esac\n              done\n            fi\n          else\n            dnl Didn't find the library; assume it is in the system directories\n            dnl known to the linker and runtime loader. (All the system\n            dnl directories known to the linker should also be known to the\n            dnl runtime loader, otherwise the system is severely misconfigured.)\n            LIB[]NAME=\"${LIB[]NAME}${LIB[]NAME:+ }-l$name\"\n            LTLIB[]NAME=\"${LTLIB[]NAME}${LTLIB[]NAME:+ }-l$name\"\n          fi\n        fi\n      fi\n    done\n  done\n  if test \"X$rpathdirs\" != \"X\"; then\n    if test -n \"$hardcode_libdir_separator\"; then\n      dnl Weird platform: only the last -rpath option counts, the user must\n      dnl pass all path elements in one option. We can arrange that for a\n      dnl single library, but not when more than one $LIBNAMEs are used.\n      alldirs=\n      for found_dir in $rpathdirs; do\n        alldirs=\"${alldirs}${alldirs:+$hardcode_libdir_separator}$found_dir\"\n      done\n      dnl Note: hardcode_libdir_flag_spec uses $libdir and $wl.\n      acl_save_libdir=\"$libdir\"\n      libdir=\"$alldirs\"\n      eval flag=\\\"$hardcode_libdir_flag_spec\\\"\n      libdir=\"$acl_save_libdir\"\n      LIB[]NAME=\"${LIB[]NAME}${LIB[]NAME:+ }$flag\"\n    else\n      dnl The -rpath options are cumulative.\n      for found_dir in $rpathdirs; do\n        acl_save_libdir=\"$libdir\"\n        libdir=\"$found_dir\"\n        eval flag=\\\"$hardcode_libdir_flag_spec\\\"\n        libdir=\"$acl_save_libdir\"\n        LIB[]NAME=\"${LIB[]NAME}${LIB[]NAME:+ }$flag\"\n      done\n    fi\n  fi\n  if test \"X$ltrpathdirs\" != \"X\"; then\n    dnl When using libtool, the option that works for both libraries and\n    dnl executables is -R. The -R options are cumulative.\n    for found_dir in $ltrpathdirs; do\n      LTLIB[]NAME=\"${LTLIB[]NAME}${LTLIB[]NAME:+ }-R$found_dir\"\n    done\n  fi\n])\n\ndnl AC_LIB_APPENDTOVAR(VAR, CONTENTS) appends the elements of CONTENTS to VAR,\ndnl unless already present in VAR.\ndnl Works only for CPPFLAGS, not for LIB* variables because that sometimes\ndnl contains two or three consecutive elements that belong together.\nAC_DEFUN([AC_LIB_APPENDTOVAR],\n[\n  for element in [$2]; do\n    haveit=\n    for x in $[$1]; do\n      AC_LIB_WITH_FINAL_PREFIX([eval x=\\\"$x\\\"])\n      if test \"X$x\" = \"X$element\"; then\n        haveit=yes\n        break\n      fi\n    done\n    if test -z \"$haveit\"; then\n      [$1]=\"${[$1]}${[$1]:+ }$element\"\n    fi\n  done\n])\n\n# lib-ld.m4 serial 3 (gettext-0.13)\ndnl Copyright (C) 1996-2003 Free Software Foundation, Inc.\ndnl This file is free software; the Free Software Foundation\ndnl gives unlimited permission to copy and/or distribute it,\ndnl with or without modifications, as long as this notice is preserved.\n\ndnl Subroutines of libtool.m4,\ndnl with replacements s/AC_/AC_LIB/ and s/lt_cv/acl_cv/ to avoid collision\ndnl with libtool.m4.\n\ndnl From libtool-1.4. Sets the variable with_gnu_ld to yes or no.\nAC_DEFUN([AC_LIB_PROG_LD_GNU],\n[AC_CACHE_CHECK([if the linker ($LD) is GNU ld], acl_cv_prog_gnu_ld,\n[# I'd rather use --version here, but apparently some GNU ld's only accept -v.\ncase `$LD -v 2>&1 </dev/null` in\n*GNU* | *'with BFD'*)\n  acl_cv_prog_gnu_ld=yes ;;\n*)\n  acl_cv_prog_gnu_ld=no ;;\nesac])\nwith_gnu_ld=$acl_cv_prog_gnu_ld\n])\n\ndnl From libtool-1.4. Sets the variable LD.\nAC_DEFUN([AC_LIB_PROG_LD],\n[AC_ARG_WITH(gnu-ld,\n[  --with-gnu-ld           assume the C compiler uses GNU ld [default=no]],\ntest \"$withval\" = no || with_gnu_ld=yes, with_gnu_ld=no)\nAC_REQUIRE([AC_PROG_CC])dnl\nAC_REQUIRE([AC_CANONICAL_HOST])dnl\n# Prepare PATH_SEPARATOR.\n# The user is always right.\nif test \"${PATH_SEPARATOR+set}\" != set; then\n  echo \"#! /bin/sh\" >conf$$.sh\n  echo  \"exit 0\"   >>conf$$.sh\n  chmod +x conf$$.sh\n  if (PATH=\"/nonexistent;.\"; conf$$.sh) >/dev/null 2>&1; then\n    PATH_SEPARATOR=';'\n  else\n    PATH_SEPARATOR=:\n  fi\n  rm -f conf$$.sh\nfi\nac_prog=ld\nif test \"$GCC\" = yes; then\n  # Check if gcc -print-prog-name=ld gives a path.\n  AC_MSG_CHECKING([for ld used by GCC])\n  case $host in\n  *-*-mingw*)\n    # gcc leaves a trailing carriage return which upsets mingw\n    ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\\015'` ;;\n  *)\n    ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;\n  esac\n  case $ac_prog in\n    # Accept absolute paths.\n    [[\\\\/]* | [A-Za-z]:[\\\\/]*)]\n      [re_direlt='/[^/][^/]*/\\.\\./']\n      # Canonicalize the path of ld\n      ac_prog=`echo $ac_prog| sed 's%\\\\\\\\%/%g'`\n      while echo $ac_prog | grep \"$re_direlt\" > /dev/null 2>&1; do\n\tac_prog=`echo $ac_prog| sed \"s%$re_direlt%/%\"`\n      done\n      test -z \"$LD\" && LD=\"$ac_prog\"\n      ;;\n  \"\")\n    # If it fails, then pretend we aren't using GCC.\n    ac_prog=ld\n    ;;\n  *)\n    # If it is relative, then search for the first ld in PATH.\n    with_gnu_ld=unknown\n    ;;\n  esac\nelif test \"$with_gnu_ld\" = yes; then\n  AC_MSG_CHECKING([for GNU ld])\nelse\n  AC_MSG_CHECKING([for non-GNU ld])\nfi\nAC_CACHE_VAL(acl_cv_path_LD,\n[if test -z \"$LD\"; then\n  IFS=\"${IFS= \t}\"; ac_save_ifs=\"$IFS\"; IFS=\"${IFS}${PATH_SEPARATOR-:}\"\n  for ac_dir in $PATH; do\n    test -z \"$ac_dir\" && ac_dir=.\n    if test -f \"$ac_dir/$ac_prog\" || test -f \"$ac_dir/$ac_prog$ac_exeext\"; then\n      acl_cv_path_LD=\"$ac_dir/$ac_prog\"\n      # Check to see if the program is GNU ld.  I'd rather use --version,\n      # but apparently some GNU ld's only accept -v.\n      # Break only if it was the GNU/non-GNU ld that we prefer.\n      case `\"$acl_cv_path_LD\" -v 2>&1 < /dev/null` in\n      *GNU* | *'with BFD'*)\n\ttest \"$with_gnu_ld\" != no && break ;;\n      *)\n\ttest \"$with_gnu_ld\" != yes && break ;;\n      esac\n    fi\n  done\n  IFS=\"$ac_save_ifs\"\nelse\n  acl_cv_path_LD=\"$LD\" # Let the user override the test with a path.\nfi])\nLD=\"$acl_cv_path_LD\"\nif test -n \"$LD\"; then\n  AC_MSG_RESULT($LD)\nelse\n  AC_MSG_RESULT(no)\nfi\ntest -z \"$LD\" && AC_MSG_ERROR([no acceptable ld found in \\$PATH])\nAC_LIB_PROG_LD_GNU\n])\n\n# Do all the work for Automake.  This macro actually does too much --\n# some checks are only needed if your package does certain things.\n# But this isn't really a big deal.\n\n# serial 1\n\ndnl Usage:\ndnl AM_INIT_AUTOMAKE(package,version, [no-define])\n\nAC_DEFUN([AM_INIT_AUTOMAKE],\n[AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl\nAC_REQUIRE([AC_PROG_INSTALL])\nPACKAGE=[$1]\nAC_SUBST(PACKAGE)\nVERSION=[$2]\nAC_SUBST(VERSION)\ndnl test to see if srcdir already configured\nif test \"`cd $srcdir && pwd`\" != \"`pwd`\" && test -f $srcdir/config.status; then\n  AC_MSG_ERROR([source directory already configured; run \"make distclean\" there first])\nfi\nifelse([$3],,\nAC_DEFINE_UNQUOTED(PACKAGE, \"$PACKAGE\", [Name of package])\nAC_DEFINE_UNQUOTED(VERSION, \"$VERSION\", [Version number of package]))\nAC_REQUIRE([AM_SANITY_CHECK])\nAC_REQUIRE([AC_ARG_PROGRAM])\ndnl FIXME This is truly gross.\nmissing_dir=`cd $ac_aux_dir && pwd`\nAM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version}, $missing_dir)\nAM_MISSING_PROG(AUTOCONF, autoconf, $missing_dir)\nAM_MISSING_PROG(AUTOMAKE, automake-${am__api_version}, $missing_dir)\nAM_MISSING_PROG(AUTOHEADER, autoheader, $missing_dir)\nAM_MISSING_PROG(MAKEINFO, makeinfo, $missing_dir)\nAC_REQUIRE([AC_PROG_MAKE_SET])])\n\n# Copyright 2002  Free Software Foundation, Inc.\n\n# This program is free software; you can redistribute it and/or modify\n# it under the terms of the GNU General Public License as published by\n# the Free Software Foundation; either version 2, or (at your option)\n# any later version.\n\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n# GNU General Public License for more details.\n\n# You should have received a copy of the GNU General Public License\n# along with this program; if not, write to the Free Software\n# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA\n\n# AM_AUTOMAKE_VERSION(VERSION)\n# ----------------------------\n# Automake X.Y traces this macro to ensure aclocal.m4 has been\n# generated from the m4 files accompanying Automake X.Y.\nAC_DEFUN([AM_AUTOMAKE_VERSION],[am__api_version=\"1.4\"])\n\n# AM_SET_CURRENT_AUTOMAKE_VERSION\n# -------------------------------\n# Call AM_AUTOMAKE_VERSION so it can be traced.\n# This function is AC_REQUIREd by AC_INIT_AUTOMAKE.\nAC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],\n\t [AM_AUTOMAKE_VERSION([1.4-p6])])\n\n#\n# Check to make sure that the build environment is sane.\n#\n\nAC_DEFUN([AM_SANITY_CHECK],\n[AC_MSG_CHECKING([whether build environment is sane])\n# Just in case\nsleep 1\necho timestamp > conftestfile\n# Do `set' in a subshell so we don't clobber the current shell's\n# arguments.  Must try -L first in case configure is actually a\n# symlink; some systems play weird games with the mod time of symlinks\n# (eg FreeBSD returns the mod time of the symlink's containing\n# directory).\nif (\n   set X `ls -Lt $srcdir/configure conftestfile 2> /dev/null`\n   if test \"[$]*\" = \"X\"; then\n      # -L didn't work.\n      set X `ls -t $srcdir/configure conftestfile`\n   fi\n   if test \"[$]*\" != \"X $srcdir/configure conftestfile\" \\\n      && test \"[$]*\" != \"X conftestfile $srcdir/configure\"; then\n\n      # If neither matched, then we have a broken ls.  This can happen\n      # if, for instance, CONFIG_SHELL is bash and it inherits a\n      # broken ls alias from the environment.  This has actually\n      # happened.  Such a system could not be considered \"sane\".\n      AC_MSG_ERROR([ls -t appears to fail.  Make sure there is not a broken\nalias in your environment])\n   fi\n\n   test \"[$]2\" = conftestfile\n   )\nthen\n   # Ok.\n   :\nelse\n   AC_MSG_ERROR([newly created file is older than distributed files!\nCheck your system clock])\nfi\nrm -f conftest*\nAC_MSG_RESULT(yes)])\n\ndnl AM_MISSING_PROG(NAME, PROGRAM, DIRECTORY)\ndnl The program must properly implement --version.\nAC_DEFUN([AM_MISSING_PROG],\n[AC_MSG_CHECKING(for working $2)\n# Run test in a subshell; some versions of sh will print an error if\n# an executable is not found, even if stderr is redirected.\n# Redirect stdin to placate older versions of autoconf.  Sigh.\nif ($2 --version) < /dev/null > /dev/null 2>&1; then\n   $1=$2\n   AC_MSG_RESULT(found)\nelse\n   $1=\"$3/missing $2\"\n   AC_MSG_RESULT(missing)\nfi\nAC_SUBST($1)])\n\n# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*-\n\n# serial 48 Debian 1.5.22-4 AC_PROG_LIBTOOL\n\n\n# AC_PROVIDE_IFELSE(MACRO-NAME, IF-PROVIDED, IF-NOT-PROVIDED)\n# -----------------------------------------------------------\n# If this macro is not defined by Autoconf, define it here.\nm4_ifdef([AC_PROVIDE_IFELSE],\n         [],\n         [m4_define([AC_PROVIDE_IFELSE],\n\t         [m4_ifdef([AC_PROVIDE_$1],\n\t\t           [$2], [$3])])])\n\n\n# AC_PROG_LIBTOOL\n# ---------------\nAC_DEFUN([AC_PROG_LIBTOOL],\n[AC_REQUIRE([_AC_PROG_LIBTOOL])dnl\ndnl If AC_PROG_CXX has already been expanded, run AC_LIBTOOL_CXX\ndnl immediately, otherwise, hook it in at the end of AC_PROG_CXX.\n  AC_PROVIDE_IFELSE([AC_PROG_CXX],\n    [AC_LIBTOOL_CXX],\n    [define([AC_PROG_CXX], defn([AC_PROG_CXX])[AC_LIBTOOL_CXX\n  ])])\ndnl And a similar setup for Fortran 77 support\n  AC_PROVIDE_IFELSE([AC_PROG_F77],\n    [AC_LIBTOOL_F77],\n    [define([AC_PROG_F77], defn([AC_PROG_F77])[AC_LIBTOOL_F77\n])])\n\ndnl Quote A][M_PROG_GCJ so that aclocal doesn't bring it in needlessly.\ndnl If either AC_PROG_GCJ or A][M_PROG_GCJ have already been expanded, run\ndnl AC_LIBTOOL_GCJ immediately, otherwise, hook it in at the end of both.\n  AC_PROVIDE_IFELSE([AC_PROG_GCJ],\n    [AC_LIBTOOL_GCJ],\n    [AC_PROVIDE_IFELSE([A][M_PROG_GCJ],\n      [AC_LIBTOOL_GCJ],\n      [AC_PROVIDE_IFELSE([LT_AC_PROG_GCJ],\n\t[AC_LIBTOOL_GCJ],\n      [ifdef([AC_PROG_GCJ],\n\t     [define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[AC_LIBTOOL_GCJ])])\n       ifdef([A][M_PROG_GCJ],\n\t     [define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[AC_LIBTOOL_GCJ])])\n       ifdef([LT_AC_PROG_GCJ],\n\t     [define([LT_AC_PROG_GCJ],\n\t\tdefn([LT_AC_PROG_GCJ])[AC_LIBTOOL_GCJ])])])])\n])])# AC_PROG_LIBTOOL\n\n\n# _AC_PROG_LIBTOOL\n# ----------------\nAC_DEFUN([_AC_PROG_LIBTOOL],\n[AC_REQUIRE([AC_LIBTOOL_SETUP])dnl\nAC_BEFORE([$0],[AC_LIBTOOL_CXX])dnl\nAC_BEFORE([$0],[AC_LIBTOOL_F77])dnl\nAC_BEFORE([$0],[AC_LIBTOOL_GCJ])dnl\n\n# This can be used to rebuild libtool when needed\nLIBTOOL_DEPS=\"$ac_aux_dir/ltmain.sh\"\n\n# Always use our own libtool.\nLIBTOOL='$(SHELL) $(top_builddir)/libtool'\nAC_SUBST(LIBTOOL)dnl\n\n# Prevent multiple expansion\ndefine([AC_PROG_LIBTOOL], [])\n])# _AC_PROG_LIBTOOL\n\n\n# AC_LIBTOOL_SETUP\n# ----------------\nAC_DEFUN([AC_LIBTOOL_SETUP],\n[AC_PREREQ(2.50)dnl\nAC_REQUIRE([AC_ENABLE_SHARED])dnl\nAC_REQUIRE([AC_ENABLE_STATIC])dnl\nAC_REQUIRE([AC_ENABLE_FAST_INSTALL])dnl\nAC_REQUIRE([AC_CANONICAL_HOST])dnl\nAC_REQUIRE([AC_CANONICAL_BUILD])dnl\nAC_REQUIRE([AC_PROG_CC])dnl\nAC_REQUIRE([AC_PROG_LD])dnl\nAC_REQUIRE([AC_PROG_LD_RELOAD_FLAG])dnl\nAC_REQUIRE([AC_PROG_NM])dnl\n\nAC_REQUIRE([AC_PROG_LN_S])dnl\nAC_REQUIRE([AC_DEPLIBS_CHECK_METHOD])dnl\n# Autoconf 2.13's AC_OBJEXT and AC_EXEEXT macros only works for C compilers!\nAC_REQUIRE([AC_OBJEXT])dnl\nAC_REQUIRE([AC_EXEEXT])dnl\ndnl\n\nAC_LIBTOOL_SYS_MAX_CMD_LEN\nAC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE\nAC_LIBTOOL_OBJDIR\n\nAC_REQUIRE([_LT_AC_SYS_COMPILER])dnl\n_LT_AC_PROG_ECHO_BACKSLASH\n\ncase $host_os in\naix3*)\n  # AIX sometimes has problems with the GCC collect2 program.  For some\n  # reason, if we set the COLLECT_NAMES environment variable, the problems\n  # vanish in a puff of smoke.\n  if test \"X${COLLECT_NAMES+set}\" != Xset; then\n    COLLECT_NAMES=\n    export COLLECT_NAMES\n  fi\n  ;;\nesac\n\n# Sed substitution that helps us do robust quoting.  It backslashifies\n# metacharacters that are still active within double-quoted strings.\nXsed='sed -e 1s/^X//'\n[sed_quote_subst='s/\\([\\\\\"\\\\`$\\\\\\\\]\\)/\\\\\\1/g']\n\n# Same as above, but do not quote variable references.\n[double_quote_subst='s/\\([\\\\\"\\\\`\\\\\\\\]\\)/\\\\\\1/g']\n\n# Sed substitution to delay expansion of an escaped shell variable in a\n# double_quote_subst'ed string.\ndelay_variable_subst='s/\\\\\\\\\\\\\\\\\\\\\\$/\\\\\\\\\\\\$/g'\n\n# Sed substitution to avoid accidental globbing in evaled expressions\nno_glob_subst='s/\\*/\\\\\\*/g'\n\n# Constants:\nrm=\"rm -f\"\n\n# Global variables:\ndefault_ofile=libtool\ncan_build_shared=yes\n\n# All known linkers require a `.a' archive for static linking (except MSVC,\n# which needs '.lib').\nlibext=a\nltmain=\"$ac_aux_dir/ltmain.sh\"\nofile=\"$default_ofile\"\nwith_gnu_ld=\"$lt_cv_prog_gnu_ld\"\n\nAC_CHECK_TOOL(AR, ar, false)\nAC_CHECK_TOOL(RANLIB, ranlib, :)\nAC_CHECK_TOOL(STRIP, strip, :)\n\nold_CC=\"$CC\"\nold_CFLAGS=\"$CFLAGS\"\n\n# Set sane defaults for various variables\ntest -z \"$AR\" && AR=ar\ntest -z \"$AR_FLAGS\" && AR_FLAGS=cru\ntest -z \"$AS\" && AS=as\ntest -z \"$CC\" && CC=cc\ntest -z \"$LTCC\" && LTCC=$CC\ntest -z \"$LTCFLAGS\" && LTCFLAGS=$CFLAGS\ntest -z \"$DLLTOOL\" && DLLTOOL=dlltool\ntest -z \"$LD\" && LD=ld\ntest -z \"$LN_S\" && LN_S=\"ln -s\"\ntest -z \"$MAGIC_CMD\" && MAGIC_CMD=file\ntest -z \"$NM\" && NM=nm\ntest -z \"$SED\" && SED=sed\ntest -z \"$OBJDUMP\" && OBJDUMP=objdump\ntest -z \"$RANLIB\" && RANLIB=:\ntest -z \"$STRIP\" && STRIP=:\ntest -z \"$ac_objext\" && ac_objext=o\n\n# Determine commands to create old-style static archives.\nold_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs$old_deplibs'\nold_postinstall_cmds='chmod 644 $oldlib'\nold_postuninstall_cmds=\n\nif test -n \"$RANLIB\"; then\n  case $host_os in\n  openbsd*)\n    old_postinstall_cmds=\"$old_postinstall_cmds~\\$RANLIB -t \\$oldlib\"\n    ;;\n  *)\n    old_postinstall_cmds=\"$old_postinstall_cmds~\\$RANLIB \\$oldlib\"\n    ;;\n  esac\n  old_archive_cmds=\"$old_archive_cmds~\\$RANLIB \\$oldlib\"\nfi\n\n_LT_CC_BASENAME([$compiler])\n\n# Only perform the check for file, if the check method requires it\ncase $deplibs_check_method in\nfile_magic*)\n  if test \"$file_magic_cmd\" = '$MAGIC_CMD'; then\n    AC_PATH_MAGIC\n  fi\n  ;;\nesac\n\nAC_PROVIDE_IFELSE([AC_LIBTOOL_DLOPEN], enable_dlopen=yes, enable_dlopen=no)\nAC_PROVIDE_IFELSE([AC_LIBTOOL_WIN32_DLL],\nenable_win32_dll=yes, enable_win32_dll=no)\n\nAC_ARG_ENABLE([libtool-lock],\n    [AC_HELP_STRING([--disable-libtool-lock],\n\t[avoid locking (might break parallel builds)])])\ntest \"x$enable_libtool_lock\" != xno && enable_libtool_lock=yes\n\nAC_ARG_WITH([pic],\n    [AC_HELP_STRING([--with-pic],\n\t[try to use only PIC/non-PIC objects @<:@default=use both@:>@])],\n    [pic_mode=\"$withval\"],\n    [pic_mode=default])\ntest -z \"$pic_mode\" && pic_mode=default\n\n# Use C for the default configuration in the libtool script\ntagname=\nAC_LIBTOOL_LANG_C_CONFIG\n_LT_AC_TAGCONFIG\n])# AC_LIBTOOL_SETUP\n\n\n# _LT_AC_SYS_COMPILER\n# -------------------\nAC_DEFUN([_LT_AC_SYS_COMPILER],\n[AC_REQUIRE([AC_PROG_CC])dnl\n\n# If no C compiler was specified, use CC.\nLTCC=${LTCC-\"$CC\"}\n\n# If no C compiler flags were specified, use CFLAGS.\nLTCFLAGS=${LTCFLAGS-\"$CFLAGS\"}\n\n# Allow CC to be a program name with arguments.\ncompiler=$CC\n])# _LT_AC_SYS_COMPILER\n\n\n# _LT_CC_BASENAME(CC)\n# -------------------\n# Calculate cc_basename.  Skip known compiler wrappers and cross-prefix.\nAC_DEFUN([_LT_CC_BASENAME],\n[for cc_temp in $1\"\"; do\n  case $cc_temp in\n    compile | *[[\\\\/]]compile | ccache | *[[\\\\/]]ccache ) ;;\n    distcc | *[[\\\\/]]distcc | purify | *[[\\\\/]]purify ) ;;\n    \\-*) ;;\n    *) break;;\n  esac\ndone\ncc_basename=`$echo \"X$cc_temp\" | $Xsed -e 's%.*/%%' -e \"s%^$host_alias-%%\"`\n])\n\n\n# _LT_COMPILER_BOILERPLATE\n# ------------------------\n# Check for compiler boilerplate output or warnings with\n# the simple compiler test code.\nAC_DEFUN([_LT_COMPILER_BOILERPLATE],\n[ac_outfile=conftest.$ac_objext\nprintf \"$lt_simple_compile_test_code\" >conftest.$ac_ext\neval \"$ac_compile\" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err\n_lt_compiler_boilerplate=`cat conftest.err`\n$rm conftest*\n])# _LT_COMPILER_BOILERPLATE\n\n\n# _LT_LINKER_BOILERPLATE\n# ----------------------\n# Check for linker boilerplate output or warnings with\n# the simple link test code.\nAC_DEFUN([_LT_LINKER_BOILERPLATE],\n[ac_outfile=conftest.$ac_objext\nprintf \"$lt_simple_link_test_code\" >conftest.$ac_ext\neval \"$ac_link\" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err\n_lt_linker_boilerplate=`cat conftest.err`\n$rm conftest*\n])# _LT_LINKER_BOILERPLATE\n\n\n# _LT_AC_SYS_LIBPATH_AIX\n# ----------------------\n# Links a minimal program and checks the executable\n# for the system default hardcoded library path. In most cases,\n# this is /usr/lib:/lib, but when the MPI compilers are used\n# the location of the communication and MPI libs are included too.\n# If we don't find anything, use the default library path according\n# to the aix ld manual.\nAC_DEFUN([_LT_AC_SYS_LIBPATH_AIX],\n[AC_LINK_IFELSE(AC_LANG_PROGRAM,[\naix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0  *\\(.*\\)$/\\1/; p; }\n}'`\n# Check for a 64-bit object if we didn't find anything.\nif test -z \"$aix_libpath\"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0  *\\(.*\\)$/\\1/; p; }\n}'`; fi],[])\nif test -z \"$aix_libpath\"; then aix_libpath=\"/usr/lib:/lib\"; fi\n])# _LT_AC_SYS_LIBPATH_AIX\n\n\n# _LT_AC_SHELL_INIT(ARG)\n# ----------------------\nAC_DEFUN([_LT_AC_SHELL_INIT],\n[ifdef([AC_DIVERSION_NOTICE],\n\t     [AC_DIVERT_PUSH(AC_DIVERSION_NOTICE)],\n\t [AC_DIVERT_PUSH(NOTICE)])\n$1\nAC_DIVERT_POP\n])# _LT_AC_SHELL_INIT\n\n\n# _LT_AC_PROG_ECHO_BACKSLASH\n# --------------------------\n# Add some code to the start of the generated configure script which\n# will find an echo command which doesn't interpret backslashes.\nAC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH],\n[_LT_AC_SHELL_INIT([\n# Check that we are running under the correct shell.\nSHELL=${CONFIG_SHELL-/bin/sh}\n\ncase X$ECHO in\nX*--fallback-echo)\n  # Remove one level of quotation (which was required for Make).\n  ECHO=`echo \"$ECHO\" | sed 's,\\\\\\\\\\[$]\\\\[$]0,'[$]0','`\n  ;;\nesac\n\necho=${ECHO-echo}\nif test \"X[$]1\" = X--no-reexec; then\n  # Discard the --no-reexec flag, and continue.\n  shift\nelif test \"X[$]1\" = X--fallback-echo; then\n  # Avoid inline document here, it may be left over\n  :\nelif test \"X`($echo '\\t') 2>/dev/null`\" = 'X\\t' ; then\n  # Yippee, $echo works!\n  :\nelse\n  # Restart under the correct shell.\n  exec $SHELL \"[$]0\" --no-reexec ${1+\"[$]@\"}\nfi\n\nif test \"X[$]1\" = X--fallback-echo; then\n  # used as fallback echo\n  shift\n  cat <<EOF\n[$]*\nEOF\n  exit 0\nfi\n\n# The HP-UX ksh and POSIX shell print the target directory to stdout\n# if CDPATH is set.\n(unset CDPATH) >/dev/null 2>&1 && unset CDPATH\n\nif test -z \"$ECHO\"; then\nif test \"X${echo_test_string+set}\" != Xset; then\n# find a string as large as possible, as long as the shell can cope with it\n  for cmd in 'sed 50q \"[$]0\"' 'sed 20q \"[$]0\"' 'sed 10q \"[$]0\"' 'sed 2q \"[$]0\"' 'echo test'; do\n    # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ...\n    if (echo_test_string=`eval $cmd`) 2>/dev/null &&\n       echo_test_string=`eval $cmd` &&\n       (test \"X$echo_test_string\" = \"X$echo_test_string\") 2>/dev/null\n    then\n      break\n    fi\n  done\nfi\n\nif test \"X`($echo '\\t') 2>/dev/null`\" = 'X\\t' &&\n   echo_testing_string=`($echo \"$echo_test_string\") 2>/dev/null` &&\n   test \"X$echo_testing_string\" = \"X$echo_test_string\"; then\n  :\nelse\n  # The Solaris, AIX, and Digital Unix default echo programs unquote\n  # backslashes.  This makes it impossible to quote backslashes using\n  #   echo \"$something\" | sed 's/\\\\/\\\\\\\\/g'\n  #\n  # So, first we look for a working echo in the user's PATH.\n\n  lt_save_ifs=\"$IFS\"; IFS=$PATH_SEPARATOR\n  for dir in $PATH /usr/ucb; do\n    IFS=\"$lt_save_ifs\"\n    if (test -f $dir/echo || test -f $dir/echo$ac_exeext) &&\n       test \"X`($dir/echo '\\t') 2>/dev/null`\" = 'X\\t' &&\n       echo_testing_string=`($dir/echo \"$echo_test_string\") 2>/dev/null` &&\n       test \"X$echo_testing_string\" = \"X$echo_test_string\"; then\n      echo=\"$dir/echo\"\n      break\n    fi\n  done\n  IFS=\"$lt_save_ifs\"\n\n  if test \"X$echo\" = Xecho; then\n    # We didn't find a better echo, so look for alternatives.\n    if test \"X`(print -r '\\t') 2>/dev/null`\" = 'X\\t' &&\n       echo_testing_string=`(print -r \"$echo_test_string\") 2>/dev/null` &&\n       test \"X$echo_testing_string\" = \"X$echo_test_string\"; then\n      # This shell has a builtin print -r that does the trick.\n      echo='print -r'\n    elif (test -f /bin/ksh || test -f /bin/ksh$ac_exeext) &&\n\t test \"X$CONFIG_SHELL\" != X/bin/ksh; then\n      # If we have ksh, try running configure again with it.\n      ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh}\n      export ORIGINAL_CONFIG_SHELL\n      CONFIG_SHELL=/bin/ksh\n      export CONFIG_SHELL\n      exec $CONFIG_SHELL \"[$]0\" --no-reexec ${1+\"[$]@\"}\n    else\n      # Try using printf.\n      echo='printf %s\\n'\n      if test \"X`($echo '\\t') 2>/dev/null`\" = 'X\\t' &&\n\t echo_testing_string=`($echo \"$echo_test_string\") 2>/dev/null` &&\n\t test \"X$echo_testing_string\" = \"X$echo_test_string\"; then\n\t# Cool, printf works\n\t:\n      elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL \"[$]0\" --fallback-echo '\\t') 2>/dev/null` &&\n\t   test \"X$echo_testing_string\" = 'X\\t' &&\n\t   echo_testing_string=`($ORIGINAL_CONFIG_SHELL \"[$]0\" --fallback-echo \"$echo_test_string\") 2>/dev/null` &&\n\t   test \"X$echo_testing_string\" = \"X$echo_test_string\"; then\n\tCONFIG_SHELL=$ORIGINAL_CONFIG_SHELL\n\texport CONFIG_SHELL\n\tSHELL=\"$CONFIG_SHELL\"\n\texport SHELL\n\techo=\"$CONFIG_SHELL [$]0 --fallback-echo\"\n      elif echo_testing_string=`($CONFIG_SHELL \"[$]0\" --fallback-echo '\\t') 2>/dev/null` &&\n\t   test \"X$echo_testing_string\" = 'X\\t' &&\n\t   echo_testing_string=`($CONFIG_SHELL \"[$]0\" --fallback-echo \"$echo_test_string\") 2>/dev/null` &&\n\t   test \"X$echo_testing_string\" = \"X$echo_test_string\"; then\n\techo=\"$CONFIG_SHELL [$]0 --fallback-echo\"\n      else\n\t# maybe with a smaller string...\n\tprev=:\n\n\tfor cmd in 'echo test' 'sed 2q \"[$]0\"' 'sed 10q \"[$]0\"' 'sed 20q \"[$]0\"' 'sed 50q \"[$]0\"'; do\n\t  if (test \"X$echo_test_string\" = \"X`eval $cmd`\") 2>/dev/null\n\t  then\n\t    break\n\t  fi\n\t  prev=\"$cmd\"\n\tdone\n\n\tif test \"$prev\" != 'sed 50q \"[$]0\"'; then\n\t  echo_test_string=`eval $prev`\n\t  export echo_test_string\n\t  exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} \"[$]0\" ${1+\"[$]@\"}\n\telse\n\t  # Oops.  We lost completely, so just stick with echo.\n\t  echo=echo\n\tfi\n      fi\n    fi\n  fi\nfi\nfi\n\n# Copy echo and quote the copy suitably for passing to libtool from\n# the Makefile, instead of quoting the original, which is used later.\nECHO=$echo\nif test \"X$ECHO\" = \"X$CONFIG_SHELL [$]0 --fallback-echo\"; then\n   ECHO=\"$CONFIG_SHELL \\\\\\$\\[$]0 --fallback-echo\"\nfi\n\nAC_SUBST(ECHO)\n])])# _LT_AC_PROG_ECHO_BACKSLASH\n\n\n# _LT_AC_LOCK\n# -----------\nAC_DEFUN([_LT_AC_LOCK],\n[AC_ARG_ENABLE([libtool-lock],\n    [AC_HELP_STRING([--disable-libtool-lock],\n\t[avoid locking (might break parallel builds)])])\ntest \"x$enable_libtool_lock\" != xno && enable_libtool_lock=yes\n\n# Some flags need to be propagated to the compiler or linker for good\n# libtool support.\ncase $host in\nia64-*-hpux*)\n  # Find out which ABI we are using.\n  echo 'int i;' > conftest.$ac_ext\n  if AC_TRY_EVAL(ac_compile); then\n    case `/usr/bin/file conftest.$ac_objext` in\n    *ELF-32*)\n      HPUX_IA64_MODE=\"32\"\n      ;;\n    *ELF-64*)\n      HPUX_IA64_MODE=\"64\"\n      ;;\n    esac\n  fi\n  rm -rf conftest*\n  ;;\n*-*-irix6*)\n  # Find out which ABI we are using.\n  echo '[#]line __oline__ \"configure\"' > conftest.$ac_ext\n  if AC_TRY_EVAL(ac_compile); then\n   if test \"$lt_cv_prog_gnu_ld\" = yes; then\n    case `/usr/bin/file conftest.$ac_objext` in\n    *32-bit*)\n      LD=\"${LD-ld} -melf32bsmip\"\n      ;;\n    *N32*)\n      LD=\"${LD-ld} -melf32bmipn32\"\n      ;;\n    *64-bit*)\n      LD=\"${LD-ld} -melf64bmip\"\n      ;;\n    esac\n   else\n    case `/usr/bin/file conftest.$ac_objext` in\n    *32-bit*)\n      LD=\"${LD-ld} -32\"\n      ;;\n    *N32*)\n      LD=\"${LD-ld} -n32\"\n      ;;\n    *64-bit*)\n      LD=\"${LD-ld} -64\"\n      ;;\n    esac\n   fi\n  fi\n  rm -rf conftest*\n  ;;\n\nx86_64-*linux*|ppc*-*linux*|powerpc*-*linux*|s390*-*linux*|sparc*-*linux*)\n  # Find out which ABI we are using.\n  echo 'int i;' > conftest.$ac_ext\n  if AC_TRY_EVAL(ac_compile); then\n    case `/usr/bin/file conftest.o` in\n    *32-bit*)\n      case $host in\n        x86_64-*linux*)\n          LD=\"${LD-ld} -m elf_i386\"\n          ;;\n        ppc64-*linux*|powerpc64-*linux*)\n          LD=\"${LD-ld} -m elf32ppclinux\"\n          ;;\n        s390x-*linux*)\n          LD=\"${LD-ld} -m elf_s390\"\n          ;;\n        sparc64-*linux*)\n          LD=\"${LD-ld} -m elf32_sparc\"\n          ;;\n      esac\n      ;;\n    *64-bit*)\n      case $host in\n        x86_64-*linux*)\n          LD=\"${LD-ld} -m elf_x86_64\"\n          ;;\n        ppc*-*linux*|powerpc*-*linux*)\n          LD=\"${LD-ld} -m elf64ppc\"\n          ;;\n        s390*-*linux*)\n          LD=\"${LD-ld} -m elf64_s390\"\n          ;;\n        sparc*-*linux*)\n          LD=\"${LD-ld} -m elf64_sparc\"\n          ;;\n      esac\n      ;;\n    esac\n  fi\n  rm -rf conftest*\n  ;;\n\n*-*-sco3.2v5*)\n  # On SCO OpenServer 5, we need -belf to get full-featured binaries.\n  SAVE_CFLAGS=\"$CFLAGS\"\n  CFLAGS=\"$CFLAGS -belf\"\n  AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf,\n    [AC_LANG_PUSH(C)\n     AC_TRY_LINK([],[],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no])\n     AC_LANG_POP])\n  if test x\"$lt_cv_cc_needs_belf\" != x\"yes\"; then\n    # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf\n    CFLAGS=\"$SAVE_CFLAGS\"\n  fi\n  ;;\nsparc*-*solaris*)\n  # Find out which ABI we are using.\n  echo 'int i;' > conftest.$ac_ext\n  if AC_TRY_EVAL(ac_compile); then\n    case `/usr/bin/file conftest.o` in\n    *64-bit*)\n      case $lt_cv_prog_gnu_ld in\n      yes*) LD=\"${LD-ld} -m elf64_sparc\" ;;\n      *)    LD=\"${LD-ld} -64\" ;;\n      esac\n      ;;\n    esac\n  fi\n  rm -rf conftest*\n  ;;\n\nAC_PROVIDE_IFELSE([AC_LIBTOOL_WIN32_DLL],\n[*-*-cygwin* | *-*-mingw* | *-*-pw32*)\n  AC_CHECK_TOOL(DLLTOOL, dlltool, false)\n  AC_CHECK_TOOL(AS, as, false)\n  AC_CHECK_TOOL(OBJDUMP, objdump, false)\n  ;;\n  ])\nesac\n\nneed_locks=\"$enable_libtool_lock\"\n\n])# _LT_AC_LOCK\n\n\n# AC_LIBTOOL_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS,\n#\t\t[OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE])\n# ----------------------------------------------------------------\n# Check whether the given compiler option works\nAC_DEFUN([AC_LIBTOOL_COMPILER_OPTION],\n[AC_REQUIRE([LT_AC_PROG_SED])\nAC_CACHE_CHECK([$1], [$2],\n  [$2=no\n  ifelse([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4])\n   printf \"$lt_simple_compile_test_code\" > conftest.$ac_ext\n   lt_compiler_flag=\"$3\"\n   # Insert the option either (1) after the last *FLAGS variable, or\n   # (2) before a word containing \"conftest.\", or (3) at the end.\n   # Note that $ac_compile itself does not contain backslashes and begins\n   # with a dollar sign (not a hyphen), so the echo should work correctly.\n   # The option is referenced via a variable to avoid confusing sed.\n   lt_compile=`echo \"$ac_compile\" | $SED \\\n   -e 's:.*FLAGS}\\{0,1\\} :&$lt_compiler_flag :; t' \\\n   -e 's: [[^ ]]*conftest\\.: $lt_compiler_flag&:; t' \\\n   -e 's:$: $lt_compiler_flag:'`\n   (eval echo \"\\\"\\$as_me:__oline__: $lt_compile\\\"\" >&AS_MESSAGE_LOG_FD)\n   (eval \"$lt_compile\" 2>conftest.err)\n   ac_status=$?\n   cat conftest.err >&AS_MESSAGE_LOG_FD\n   echo \"$as_me:__oline__: \\$? = $ac_status\" >&AS_MESSAGE_LOG_FD\n   if (exit $ac_status) && test -s \"$ac_outfile\"; then\n     # The compiler can only warn and ignore the option if not recognized\n     # So say no if there are warnings other than the usual output.\n     $echo \"X$_lt_compiler_boilerplate\" | $Xsed -e '/^$/d' >conftest.exp\n     $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2\n     if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then\n       $2=yes\n     fi\n   fi\n   $rm conftest*\n])\n\nif test x\"[$]$2\" = xyes; then\n    ifelse([$5], , :, [$5])\nelse\n    ifelse([$6], , :, [$6])\nfi\n])# AC_LIBTOOL_COMPILER_OPTION\n\n\n# AC_LIBTOOL_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS,\n#                          [ACTION-SUCCESS], [ACTION-FAILURE])\n# ------------------------------------------------------------\n# Check whether the given compiler option works\nAC_DEFUN([AC_LIBTOOL_LINKER_OPTION],\n[AC_CACHE_CHECK([$1], [$2],\n  [$2=no\n   save_LDFLAGS=\"$LDFLAGS\"\n   LDFLAGS=\"$LDFLAGS $3\"\n   printf \"$lt_simple_link_test_code\" > conftest.$ac_ext\n   if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then\n     # The linker can only warn and ignore the option if not recognized\n     # So say no if there are warnings\n     if test -s conftest.err; then\n       # Append any errors to the config.log.\n       cat conftest.err 1>&AS_MESSAGE_LOG_FD\n       $echo \"X$_lt_linker_boilerplate\" | $Xsed -e '/^$/d' > conftest.exp\n       $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2\n       if diff conftest.exp conftest.er2 >/dev/null; then\n         $2=yes\n       fi\n     else\n       $2=yes\n     fi\n   fi\n   $rm conftest*\n   LDFLAGS=\"$save_LDFLAGS\"\n])\n\nif test x\"[$]$2\" = xyes; then\n    ifelse([$4], , :, [$4])\nelse\n    ifelse([$5], , :, [$5])\nfi\n])# AC_LIBTOOL_LINKER_OPTION\n\n\n# AC_LIBTOOL_SYS_MAX_CMD_LEN\n# --------------------------\nAC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN],\n[# find the maximum length of command line arguments\nAC_MSG_CHECKING([the maximum length of command line arguments])\nAC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl\n  i=0\n  teststring=\"ABCD\"\n\n  case $build_os in\n  msdosdjgpp*)\n    # On DJGPP, this test can blow up pretty badly due to problems in libc\n    # (any single argument exceeding 2000 bytes causes a buffer overrun\n    # during glob expansion).  Even if it were fixed, the result of this\n    # check would be larger than it should be.\n    lt_cv_sys_max_cmd_len=12288;    # 12K is about right\n    ;;\n\n  gnu*)\n    # Under GNU Hurd, this test is not required because there is\n    # no limit to the length of command line arguments.\n    # Libtool will interpret -1 as no limit whatsoever\n    lt_cv_sys_max_cmd_len=-1;\n    ;;\n\n  cygwin* | mingw*)\n    # On Win9x/ME, this test blows up -- it succeeds, but takes\n    # about 5 minutes as the teststring grows exponentially.\n    # Worse, since 9x/ME are not pre-emptively multitasking,\n    # you end up with a \"frozen\" computer, even though with patience\n    # the test eventually succeeds (with a max line length of 256k).\n    # Instead, let's just punt: use the minimum linelength reported by\n    # all of the supported platforms: 8192 (on NT/2K/XP).\n    lt_cv_sys_max_cmd_len=8192;\n    ;;\n\n  amigaos*)\n    # On AmigaOS with pdksh, this test takes hours, literally.\n    # So we just punt and use a minimum line length of 8192.\n    lt_cv_sys_max_cmd_len=8192;\n    ;;\n\n  netbsd* | freebsd* | openbsd* | darwin* | dragonfly*)\n    # This has been around since 386BSD, at least.  Likely further.\n    if test -x /sbin/sysctl; then\n      lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax`\n    elif test -x /usr/sbin/sysctl; then\n      lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax`\n    else\n      lt_cv_sys_max_cmd_len=65536\t# usable default for all BSDs\n    fi\n    # And add a safety zone\n    lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \\/ 4`\n    lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \\* 3`\n    ;;\n\n  interix*)\n    # We know the value 262144 and hardcode it with a safety zone (like BSD)\n    lt_cv_sys_max_cmd_len=196608\n    ;;\n\n  osf*)\n    # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure\n    # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not\n    # nice to cause kernel panics so lets avoid the loop below.\n    # First set a reasonable default.\n    lt_cv_sys_max_cmd_len=16384\n    #\n    if test -x /sbin/sysconfig; then\n      case `/sbin/sysconfig -q proc exec_disable_arg_limit` in\n        *1*) lt_cv_sys_max_cmd_len=-1 ;;\n      esac\n    fi\n    ;;\n  sco3.2v5*)\n    lt_cv_sys_max_cmd_len=102400\n    ;;\n  sysv5* | sco5v6* | sysv4.2uw2*)\n    kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null`\n    if test -n \"$kargmax\"; then\n      lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[[ \t]]//'`\n    else\n      lt_cv_sys_max_cmd_len=32768\n    fi\n    ;;\n  *)\n    # If test is not a shell built-in, we'll probably end up computing a\n    # maximum length that is only half of the actual maximum length, but\n    # we can't tell.\n    SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}}\n    while (test \"X\"`$SHELL [$]0 --fallback-echo \"X$teststring\" 2>/dev/null` \\\n\t       = \"XX$teststring\") >/dev/null 2>&1 &&\n\t    new_result=`expr \"X$teststring\" : \".*\" 2>&1` &&\n\t    lt_cv_sys_max_cmd_len=$new_result &&\n\t    test $i != 17 # 1/2 MB should be enough\n    do\n      i=`expr $i + 1`\n      teststring=$teststring$teststring\n    done\n    teststring=\n    # Add a significant safety factor because C++ compilers can tack on massive\n    # amounts of additional arguments before passing them to the linker.\n    # It appears as though 1/2 is a usable value.\n    lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \\/ 2`\n    ;;\n  esac\n])\nif test -n $lt_cv_sys_max_cmd_len ; then\n  AC_MSG_RESULT($lt_cv_sys_max_cmd_len)\nelse\n  AC_MSG_RESULT(none)\nfi\n])# AC_LIBTOOL_SYS_MAX_CMD_LEN\n\n\n# _LT_AC_CHECK_DLFCN\n# ------------------\nAC_DEFUN([_LT_AC_CHECK_DLFCN],\n[AC_CHECK_HEADERS(dlfcn.h)dnl\n])# _LT_AC_CHECK_DLFCN\n\n\n# _LT_AC_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE,\n#                           ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING)\n# ---------------------------------------------------------------------\nAC_DEFUN([_LT_AC_TRY_DLOPEN_SELF],\n[AC_REQUIRE([_LT_AC_CHECK_DLFCN])dnl\nif test \"$cross_compiling\" = yes; then :\n  [$4]\nelse\n  lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2\n  lt_status=$lt_dlunknown\n  cat > conftest.$ac_ext <<EOF\n[#line __oline__ \"configure\"\n#include \"confdefs.h\"\n\n#if HAVE_DLFCN_H\n#include <dlfcn.h>\n#endif\n\n#include <stdio.h>\n\n#ifdef RTLD_GLOBAL\n#  define LT_DLGLOBAL\t\tRTLD_GLOBAL\n#else\n#  ifdef DL_GLOBAL\n#    define LT_DLGLOBAL\t\tDL_GLOBAL\n#  else\n#    define LT_DLGLOBAL\t\t0\n#  endif\n#endif\n\n/* We may have to define LT_DLLAZY_OR_NOW in the command line if we\n   find out it does not work in some platform. */\n#ifndef LT_DLLAZY_OR_NOW\n#  ifdef RTLD_LAZY\n#    define LT_DLLAZY_OR_NOW\t\tRTLD_LAZY\n#  else\n#    ifdef DL_LAZY\n#      define LT_DLLAZY_OR_NOW\t\tDL_LAZY\n#    else\n#      ifdef RTLD_NOW\n#        define LT_DLLAZY_OR_NOW\tRTLD_NOW\n#      else\n#        ifdef DL_NOW\n#          define LT_DLLAZY_OR_NOW\tDL_NOW\n#        else\n#          define LT_DLLAZY_OR_NOW\t0\n#        endif\n#      endif\n#    endif\n#  endif\n#endif\n\n#ifdef __cplusplus\nextern \"C\" void exit (int);\n#endif\n\nvoid fnord() { int i=42;}\nint main ()\n{\n  void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);\n  int status = $lt_dlunknown;\n\n  if (self)\n    {\n      if (dlsym (self,\"fnord\"))       status = $lt_dlno_uscore;\n      else if (dlsym( self,\"_fnord\")) status = $lt_dlneed_uscore;\n      /* dlclose (self); */\n    }\n  else\n    puts (dlerror ());\n\n    exit (status);\n}]\nEOF\n  if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext} 2>/dev/null; then\n    (./conftest; exit; ) >&AS_MESSAGE_LOG_FD 2>/dev/null\n    lt_status=$?\n    case x$lt_status in\n      x$lt_dlno_uscore) $1 ;;\n      x$lt_dlneed_uscore) $2 ;;\n      x$lt_dlunknown|x*) $3 ;;\n    esac\n  else :\n    # compilation failed\n    $3\n  fi\nfi\nrm -fr conftest*\n])# _LT_AC_TRY_DLOPEN_SELF\n\n\n# AC_LIBTOOL_DLOPEN_SELF\n# ----------------------\nAC_DEFUN([AC_LIBTOOL_DLOPEN_SELF],\n[AC_REQUIRE([_LT_AC_CHECK_DLFCN])dnl\nif test \"x$enable_dlopen\" != xyes; then\n  enable_dlopen=unknown\n  enable_dlopen_self=unknown\n  enable_dlopen_self_static=unknown\nelse\n  lt_cv_dlopen=no\n  lt_cv_dlopen_libs=\n\n  case $host_os in\n  beos*)\n    lt_cv_dlopen=\"load_add_on\"\n    lt_cv_dlopen_libs=\n    lt_cv_dlopen_self=yes\n    ;;\n\n  mingw* | pw32*)\n    lt_cv_dlopen=\"LoadLibrary\"\n    lt_cv_dlopen_libs=\n   ;;\n\n  cygwin*)\n    lt_cv_dlopen=\"dlopen\"\n    lt_cv_dlopen_libs=\n   ;;\n\n  darwin*)\n  # if libdl is installed we need to link against it\n    AC_CHECK_LIB([dl], [dlopen],\n\t\t[lt_cv_dlopen=\"dlopen\" lt_cv_dlopen_libs=\"-ldl\"],[\n    lt_cv_dlopen=\"dyld\"\n    lt_cv_dlopen_libs=\n    lt_cv_dlopen_self=yes\n    ])\n   ;;\n\n  *)\n    AC_CHECK_FUNC([shl_load],\n\t  [lt_cv_dlopen=\"shl_load\"],\n      [AC_CHECK_LIB([dld], [shl_load],\n\t    [lt_cv_dlopen=\"shl_load\" lt_cv_dlopen_libs=\"-dld\"],\n\t[AC_CHECK_FUNC([dlopen],\n\t      [lt_cv_dlopen=\"dlopen\"],\n\t  [AC_CHECK_LIB([dl], [dlopen],\n\t\t[lt_cv_dlopen=\"dlopen\" lt_cv_dlopen_libs=\"-ldl\"],\n\t    [AC_CHECK_LIB([svld], [dlopen],\n\t\t  [lt_cv_dlopen=\"dlopen\" lt_cv_dlopen_libs=\"-lsvld\"],\n\t      [AC_CHECK_LIB([dld], [dld_link],\n\t\t    [lt_cv_dlopen=\"dld_link\" lt_cv_dlopen_libs=\"-dld\"])\n\t      ])\n\t    ])\n\t  ])\n\t])\n      ])\n    ;;\n  esac\n\n  if test \"x$lt_cv_dlopen\" != xno; then\n    enable_dlopen=yes\n  else\n    enable_dlopen=no\n  fi\n\n  case $lt_cv_dlopen in\n  dlopen)\n    save_CPPFLAGS=\"$CPPFLAGS\"\n    test \"x$ac_cv_header_dlfcn_h\" = xyes && CPPFLAGS=\"$CPPFLAGS -DHAVE_DLFCN_H\"\n\n    save_LDFLAGS=\"$LDFLAGS\"\n    wl=$lt_prog_compiler_wl eval LDFLAGS=\\\"\\$LDFLAGS $export_dynamic_flag_spec\\\"\n\n    save_LIBS=\"$LIBS\"\n    LIBS=\"$lt_cv_dlopen_libs $LIBS\"\n\n    AC_CACHE_CHECK([whether a program can dlopen itself],\n\t  lt_cv_dlopen_self, [dnl\n\t  _LT_AC_TRY_DLOPEN_SELF(\n\t    lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes,\n\t    lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross)\n    ])\n\n    if test \"x$lt_cv_dlopen_self\" = xyes; then\n      wl=$lt_prog_compiler_wl eval LDFLAGS=\\\"\\$LDFLAGS $lt_prog_compiler_static\\\"\n      AC_CACHE_CHECK([whether a statically linked program can dlopen itself],\n    \t  lt_cv_dlopen_self_static, [dnl\n\t  _LT_AC_TRY_DLOPEN_SELF(\n\t    lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes,\n\t    lt_cv_dlopen_self_static=no,  lt_cv_dlopen_self_static=cross)\n      ])\n    fi\n\n    CPPFLAGS=\"$save_CPPFLAGS\"\n    LDFLAGS=\"$save_LDFLAGS\"\n    LIBS=\"$save_LIBS\"\n    ;;\n  esac\n\n  case $lt_cv_dlopen_self in\n  yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;;\n  *) enable_dlopen_self=unknown ;;\n  esac\n\n  case $lt_cv_dlopen_self_static in\n  yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;;\n  *) enable_dlopen_self_static=unknown ;;\n  esac\nfi\n])# AC_LIBTOOL_DLOPEN_SELF\n\n\n# AC_LIBTOOL_PROG_CC_C_O([TAGNAME])\n# ---------------------------------\n# Check to see if options -c and -o are simultaneously supported by compiler\nAC_DEFUN([AC_LIBTOOL_PROG_CC_C_O],\n[AC_REQUIRE([_LT_AC_SYS_COMPILER])dnl\nAC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext],\n  [_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)],\n  [_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no\n   $rm -r conftest 2>/dev/null\n   mkdir conftest\n   cd conftest\n   mkdir out\n   printf \"$lt_simple_compile_test_code\" > conftest.$ac_ext\n\n   lt_compiler_flag=\"-o out/conftest2.$ac_objext\"\n   # Insert the option either (1) after the last *FLAGS variable, or\n   # (2) before a word containing \"conftest.\", or (3) at the end.\n   # Note that $ac_compile itself does not contain backslashes and begins\n   # with a dollar sign (not a hyphen), so the echo should work correctly.\n   lt_compile=`echo \"$ac_compile\" | $SED \\\n   -e 's:.*FLAGS}\\{0,1\\} :&$lt_compiler_flag :; t' \\\n   -e 's: [[^ ]]*conftest\\.: $lt_compiler_flag&:; t' \\\n   -e 's:$: $lt_compiler_flag:'`\n   (eval echo \"\\\"\\$as_me:__oline__: $lt_compile\\\"\" >&AS_MESSAGE_LOG_FD)\n   (eval \"$lt_compile\" 2>out/conftest.err)\n   ac_status=$?\n   cat out/conftest.err >&AS_MESSAGE_LOG_FD\n   echo \"$as_me:__oline__: \\$? = $ac_status\" >&AS_MESSAGE_LOG_FD\n   if (exit $ac_status) && test -s out/conftest2.$ac_objext\n   then\n     # The compiler can only warn and ignore the option if not recognized\n     # So say no if there are warnings\n     $echo \"X$_lt_compiler_boilerplate\" | $Xsed -e '/^$/d' > out/conftest.exp\n     $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2\n     if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then\n       _LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes\n     fi\n   fi\n   chmod u+w . 2>&AS_MESSAGE_LOG_FD\n   $rm conftest*\n   # SGI C++ compiler will create directory out/ii_files/ for\n   # template instantiation\n   test -d out/ii_files && $rm out/ii_files/* && rmdir out/ii_files\n   $rm out/* && rmdir out\n   cd ..\n   rmdir conftest\n   $rm conftest*\n])\n])# AC_LIBTOOL_PROG_CC_C_O\n\n\n# AC_LIBTOOL_SYS_HARD_LINK_LOCKS([TAGNAME])\n# -----------------------------------------\n# Check to see if we can do hard links to lock some files if needed\nAC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS],\n[AC_REQUIRE([_LT_AC_LOCK])dnl\n\nhard_links=\"nottested\"\nif test \"$_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)\" = no && test \"$need_locks\" != no; then\n  # do not overwrite the value of need_locks provided by the user\n  AC_MSG_CHECKING([if we can lock with hard links])\n  hard_links=yes\n  $rm conftest*\n  ln conftest.a conftest.b 2>/dev/null && hard_links=no\n  touch conftest.a\n  ln conftest.a conftest.b 2>&5 || hard_links=no\n  ln conftest.a conftest.b 2>/dev/null && hard_links=no\n  AC_MSG_RESULT([$hard_links])\n  if test \"$hard_links\" = no; then\n    AC_MSG_WARN([`$CC' does not support `-c -o', so `make -j' may be unsafe])\n    need_locks=warn\n  fi\nelse\n  need_locks=no\nfi\n])# AC_LIBTOOL_SYS_HARD_LINK_LOCKS\n\n\n# AC_LIBTOOL_OBJDIR\n# -----------------\nAC_DEFUN([AC_LIBTOOL_OBJDIR],\n[AC_CACHE_CHECK([for objdir], [lt_cv_objdir],\n[rm -f .libs 2>/dev/null\nmkdir .libs 2>/dev/null\nif test -d .libs; then\n  lt_cv_objdir=.libs\nelse\n  # MS-DOS does not allow filenames that begin with a dot.\n  lt_cv_objdir=_libs\nfi\nrmdir .libs 2>/dev/null])\nobjdir=$lt_cv_objdir\n])# AC_LIBTOOL_OBJDIR\n\n\n# AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH([TAGNAME])\n# ----------------------------------------------\n# Check hardcoding attributes.\nAC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH],\n[AC_MSG_CHECKING([how to hardcode library paths into programs])\n_LT_AC_TAGVAR(hardcode_action, $1)=\nif test -n \"$_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)\" || \\\n   test -n \"$_LT_AC_TAGVAR(runpath_var, $1)\" || \\\n   test \"X$_LT_AC_TAGVAR(hardcode_automatic, $1)\" = \"Xyes\" ; then\n\n  # We can hardcode non-existant directories.\n  if test \"$_LT_AC_TAGVAR(hardcode_direct, $1)\" != no &&\n     # If the only mechanism to avoid hardcoding is shlibpath_var, we\n     # have to relink, otherwise we might link with an installed library\n     # when we should be linking with a yet-to-be-installed one\n     ## test \"$_LT_AC_TAGVAR(hardcode_shlibpath_var, $1)\" != no &&\n     test \"$_LT_AC_TAGVAR(hardcode_minus_L, $1)\" != no; then\n    # Linking always hardcodes the temporary library directory.\n    _LT_AC_TAGVAR(hardcode_action, $1)=relink\n  else\n    # We can link without hardcoding, and we can hardcode nonexisting dirs.\n    _LT_AC_TAGVAR(hardcode_action, $1)=immediate\n  fi\nelse\n  # We cannot hardcode anything, or else we can only hardcode existing\n  # directories.\n  _LT_AC_TAGVAR(hardcode_action, $1)=unsupported\nfi\nAC_MSG_RESULT([$_LT_AC_TAGVAR(hardcode_action, $1)])\n\nif test \"$_LT_AC_TAGVAR(hardcode_action, $1)\" = relink; then\n  # Fast installation is not supported\n  enable_fast_install=no\nelif test \"$shlibpath_overrides_runpath\" = yes ||\n     test \"$enable_shared\" = no; then\n  # Fast installation is not necessary\n  enable_fast_install=needless\nfi\n])# AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH\n\n\n# AC_LIBTOOL_SYS_LIB_STRIP\n# ------------------------\nAC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP],\n[striplib=\nold_striplib=\nAC_MSG_CHECKING([whether stripping libraries is possible])\nif test -n \"$STRIP\" && $STRIP -V 2>&1 | grep \"GNU strip\" >/dev/null; then\n  test -z \"$old_striplib\" && old_striplib=\"$STRIP --strip-debug\"\n  test -z \"$striplib\" && striplib=\"$STRIP --strip-unneeded\"\n  AC_MSG_RESULT([yes])\nelse\n# FIXME - insert some real tests, host_os isn't really good enough\n  case $host_os in\n   darwin*)\n       if test -n \"$STRIP\" ; then\n         striplib=\"$STRIP -x\"\n         AC_MSG_RESULT([yes])\n       else\n  AC_MSG_RESULT([no])\nfi\n       ;;\n   *)\n  AC_MSG_RESULT([no])\n    ;;\n  esac\nfi\n])# AC_LIBTOOL_SYS_LIB_STRIP\n\n\n# AC_LIBTOOL_SYS_DYNAMIC_LINKER\n# -----------------------------\n# PORTME Fill in your ld.so characteristics\nAC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER],\n[AC_MSG_CHECKING([dynamic linker characteristics])\nlibrary_names_spec=\nlibname_spec='lib$name'\nsoname_spec=\nshrext_cmds=\".so\"\npostinstall_cmds=\npostuninstall_cmds=\nfinish_cmds=\nfinish_eval=\nshlibpath_var=\nshlibpath_overrides_runpath=unknown\nversion_type=none\ndynamic_linker=\"$host_os ld.so\"\nsys_lib_dlsearch_path_spec=\"/lib /usr/lib\"\nif test \"$GCC\" = yes; then\n  sys_lib_search_path_spec=`$CC -print-search-dirs | grep \"^libraries:\" | $SED -e \"s/^libraries://\" -e \"s,=/,/,g\"`\n  if echo \"$sys_lib_search_path_spec\" | grep ';' >/dev/null ; then\n    # if the path contains \";\" then we assume it to be the separator\n    # otherwise default to the standard path separator (i.e. \":\") - it is\n    # assumed that no part of a normal pathname contains \";\" but that should\n    # okay in the real world where \";\" in dirpaths is itself problematic.\n    sys_lib_search_path_spec=`echo \"$sys_lib_search_path_spec\" | $SED -e 's/;/ /g'`\n  else\n    sys_lib_search_path_spec=`echo \"$sys_lib_search_path_spec\" | $SED  -e \"s/$PATH_SEPARATOR/ /g\"`\n  fi\nelse\n  sys_lib_search_path_spec=\"/lib /usr/lib /usr/local/lib\"\nfi\nneed_lib_prefix=unknown\nhardcode_into_libs=no\n\n# when you set need_version to no, make sure it does not cause -set_version\n# flags to be left without arguments\nneed_version=unknown\n\ncase $host_os in\naix3*)\n  version_type=linux\n  library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a'\n  shlibpath_var=LIBPATH\n\n  # AIX 3 has no versioning support, so we append a major version to the name.\n  soname_spec='${libname}${release}${shared_ext}$major'\n  ;;\n\naix4* | aix5*)\n  version_type=linux\n  need_lib_prefix=no\n  need_version=no\n  hardcode_into_libs=yes\n  if test \"$host_cpu\" = ia64; then\n    # AIX 5 supports IA64\n    library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}'\n    shlibpath_var=LD_LIBRARY_PATH\n  else\n    # With GCC up to 2.95.x, collect2 would create an import file\n    # for dependence libraries.  The import file would start with\n    # the line `#! .'.  This would cause the generated library to\n    # depend on `.', always an invalid library.  This was fixed in\n    # development snapshots of GCC prior to 3.0.\n    case $host_os in\n      aix4 | aix4.[[01]] | aix4.[[01]].*)\n      if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'\n\t   echo ' yes '\n\t   echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then\n\t:\n      else\n\tcan_build_shared=no\n      fi\n      ;;\n    esac\n    # AIX (on Power*) has no versioning support, so currently we can not hardcode correct\n    # soname into executable. Probably we can add versioning support to\n    # collect2, so additional links can be useful in future.\n    if test \"$aix_use_runtimelinking\" = yes; then\n      # If using run time linking (on AIX 4.2 or later) use lib<name>.so\n      # instead of lib<name>.a to let people know that these are not\n      # typical AIX shared libraries.\n      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'\n    else\n      # We preserve .a as extension for shared libraries through AIX4.2\n      # and later when we are not doing run time linking.\n      library_names_spec='${libname}${release}.a $libname.a'\n      soname_spec='${libname}${release}${shared_ext}$major'\n    fi\n    shlibpath_var=LIBPATH\n  fi\n  ;;\n\namigaos*)\n  library_names_spec='$libname.ixlibrary $libname.a'\n  # Create ${libname}_ixlibrary.a entries in /sys/libs.\n  finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo \"X$lib\" | $Xsed -e '\\''s%^.*/\\([[^/]]*\\)\\.ixlibrary$%\\1%'\\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show \"cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a\"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'\n  ;;\n\nbeos*)\n  library_names_spec='${libname}${shared_ext}'\n  dynamic_linker=\"$host_os ld.so\"\n  shlibpath_var=LIBRARY_PATH\n  ;;\n\nbsdi[[45]]*)\n  version_type=linux\n  need_version=no\n  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'\n  soname_spec='${libname}${release}${shared_ext}$major'\n  finish_cmds='PATH=\"\\$PATH:/sbin\" ldconfig $libdir'\n  shlibpath_var=LD_LIBRARY_PATH\n  sys_lib_search_path_spec=\"/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib\"\n  sys_lib_dlsearch_path_spec=\"/shlib /usr/lib /usr/local/lib\"\n  # the default ld.so.conf also contains /usr/contrib/lib and\n  # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow\n  # libtool to hard-code these into programs\n  ;;\n\ncygwin* | mingw* | pw32*)\n  version_type=windows\n  shrext_cmds=\".dll\"\n  need_version=no\n  need_lib_prefix=no\n\n  case $GCC,$host_os in\n  yes,cygwin* | yes,mingw* | yes,pw32*)\n    library_names_spec='$libname.dll.a'\n    # DLL is installed to $(libdir)/../bin by postinstall_cmds\n    postinstall_cmds='base_file=`basename \\${file}`~\n      dlpath=`$SHELL 2>&1 -c '\\''. $dir/'\\''\\${base_file}'\\''i;echo \\$dlname'\\''`~\n      dldir=$destdir/`dirname \\$dlpath`~\n      test -d \\$dldir || mkdir -p \\$dldir~\n      $install_prog $dir/$dlname \\$dldir/$dlname~\n      chmod a+x \\$dldir/$dlname'\n    postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\\''. $file; echo \\$dlname'\\''`~\n      dlpath=$dir/\\$dldll~\n       $rm \\$dlpath'\n    shlibpath_overrides_runpath=yes\n\n    case $host_os in\n    cygwin*)\n      # Cygwin DLLs use 'cyg' prefix rather than 'lib'\n      soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'\n      sys_lib_search_path_spec=\"/usr/lib /lib/w32api /lib /usr/local/lib\"\n      ;;\n    mingw*)\n      # MinGW DLLs use traditional 'lib' prefix\n      soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'\n      sys_lib_search_path_spec=`$CC -print-search-dirs | grep \"^libraries:\" | $SED -e \"s/^libraries://\" -e \"s,=/,/,g\"`\n      if echo \"$sys_lib_search_path_spec\" | [grep ';[c-zC-Z]:/' >/dev/null]; then\n        # It is most probably a Windows format PATH printed by\n        # mingw gcc, but we are running on Cygwin. Gcc prints its search\n        # path with ; separators, and with drive letters. We can handle the\n        # drive letters (cygwin fileutils understands them), so leave them,\n        # especially as we might pass files found there to a mingw objdump,\n        # which wouldn't understand a cygwinified path. Ahh.\n        sys_lib_search_path_spec=`echo \"$sys_lib_search_path_spec\" | $SED -e 's/;/ /g'`\n      else\n        sys_lib_search_path_spec=`echo \"$sys_lib_search_path_spec\" | $SED  -e \"s/$PATH_SEPARATOR/ /g\"`\n      fi\n      ;;\n    pw32*)\n      # pw32 DLLs use 'pw' prefix rather than 'lib'\n      library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'\n      ;;\n    esac\n    ;;\n\n  *)\n    library_names_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext} $libname.lib'\n    ;;\n  esac\n  dynamic_linker='Win32 ld.exe'\n  # FIXME: first we should search . and the directory the executable is in\n  shlibpath_var=PATH\n  ;;\n\ndarwin* | rhapsody*)\n  dynamic_linker=\"$host_os dyld\"\n  version_type=darwin\n  need_lib_prefix=no\n  need_version=no\n  library_names_spec='${libname}${release}${versuffix}$shared_ext ${libname}${release}${major}$shared_ext ${libname}$shared_ext'\n  soname_spec='${libname}${release}${major}$shared_ext'\n  shlibpath_overrides_runpath=yes\n  shlibpath_var=DYLD_LIBRARY_PATH\n  shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`'\n  # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same.\n  if test \"$GCC\" = yes; then\n    sys_lib_search_path_spec=`$CC -print-search-dirs | tr \"\\n\" \"$PATH_SEPARATOR\" | sed -e 's/libraries:/@libraries:/' | tr \"@\" \"\\n\" | grep \"^libraries:\" | sed -e \"s/^libraries://\" -e \"s,=/,/,g\" -e \"s,$PATH_SEPARATOR, ,g\" -e \"s,.*,& /lib /usr/lib /usr/local/lib,g\"`\n  else\n    sys_lib_search_path_spec='/lib /usr/lib /usr/local/lib'\n  fi\n  sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'\n  ;;\n\ndgux*)\n  version_type=linux\n  need_lib_prefix=no\n  need_version=no\n  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext'\n  soname_spec='${libname}${release}${shared_ext}$major'\n  shlibpath_var=LD_LIBRARY_PATH\n  ;;\n\nfreebsd1*)\n  dynamic_linker=no\n  ;;\n\nfreebsd* | dragonfly*)\n  # DragonFly does not have aout.  When/if they implement a new\n  # versioning mechanism, adjust this.\n  if test -x /usr/bin/objformat; then\n    objformat=`/usr/bin/objformat`\n  else\n    case $host_os in\n    freebsd[[123]]*) objformat=aout ;;\n    *) objformat=elf ;;\n    esac\n  fi\n  version_type=freebsd-$objformat\n  case $version_type in\n    freebsd-elf*)\n      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'\n      need_version=no\n      need_lib_prefix=no\n      ;;\n    freebsd-*)\n      library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix'\n      need_version=yes\n      ;;\n  esac\n  shlibpath_var=LD_LIBRARY_PATH\n  case $host_os in\n  freebsd2*)\n    shlibpath_overrides_runpath=yes\n    ;;\n  freebsd3.[[01]]* | freebsdelf3.[[01]]*)\n    shlibpath_overrides_runpath=yes\n    hardcode_into_libs=yes\n    ;;\n  freebsd3.[[2-9]]* | freebsdelf3.[[2-9]]* | \\\n  freebsd4.[[0-5]] | freebsdelf4.[[0-5]] | freebsd4.1.1 | freebsdelf4.1.1)\n    shlibpath_overrides_runpath=no\n    hardcode_into_libs=yes\n    ;;\n  freebsd*) # from 4.6 on\n    shlibpath_overrides_runpath=yes\n    hardcode_into_libs=yes\n    ;;\n  esac\n  ;;\n\ngnu*)\n  version_type=linux\n  need_lib_prefix=no\n  need_version=no\n  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'\n  soname_spec='${libname}${release}${shared_ext}$major'\n  shlibpath_var=LD_LIBRARY_PATH\n  hardcode_into_libs=yes\n  ;;\n\nhpux9* | hpux10* | hpux11*)\n  # Give a soname corresponding to the major version so that dld.sl refuses to\n  # link against other versions.\n  version_type=sunos\n  need_lib_prefix=no\n  need_version=no\n  case $host_cpu in\n  ia64*)\n    shrext_cmds='.so'\n    hardcode_into_libs=yes\n    dynamic_linker=\"$host_os dld.so\"\n    shlibpath_var=LD_LIBRARY_PATH\n    shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.\n    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'\n    soname_spec='${libname}${release}${shared_ext}$major'\n    if test \"X$HPUX_IA64_MODE\" = X32; then\n      sys_lib_search_path_spec=\"/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib\"\n    else\n      sys_lib_search_path_spec=\"/usr/lib/hpux64 /usr/local/lib/hpux64\"\n    fi\n    sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec\n    ;;\n   hppa*64*)\n     shrext_cmds='.sl'\n     hardcode_into_libs=yes\n     dynamic_linker=\"$host_os dld.sl\"\n     shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH\n     shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.\n     library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'\n     soname_spec='${libname}${release}${shared_ext}$major'\n     sys_lib_search_path_spec=\"/usr/lib/pa20_64 /usr/ccs/lib/pa20_64\"\n     sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec\n     ;;\n   *)\n    shrext_cmds='.sl'\n    dynamic_linker=\"$host_os dld.sl\"\n    shlibpath_var=SHLIB_PATH\n    shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH\n    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'\n    soname_spec='${libname}${release}${shared_ext}$major'\n    ;;\n  esac\n  # HP-UX runs *really* slowly unless shared libraries are mode 555.\n  postinstall_cmds='chmod 555 $lib'\n  ;;\n\ninterix3*)\n  version_type=linux\n  need_lib_prefix=no\n  need_version=no\n  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'\n  soname_spec='${libname}${release}${shared_ext}$major'\n  dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)'\n  shlibpath_var=LD_LIBRARY_PATH\n  shlibpath_overrides_runpath=no\n  hardcode_into_libs=yes\n  ;;\n\nirix5* | irix6* | nonstopux*)\n  case $host_os in\n    nonstopux*) version_type=nonstopux ;;\n    *)\n\tif test \"$lt_cv_prog_gnu_ld\" = yes; then\n\t\tversion_type=linux\n\telse\n\t\tversion_type=irix\n\tfi ;;\n  esac\n  need_lib_prefix=no\n  need_version=no\n  soname_spec='${libname}${release}${shared_ext}$major'\n  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}'\n  case $host_os in\n  irix5* | nonstopux*)\n    libsuff= shlibsuff=\n    ;;\n  *)\n    case $LD in # libtool.m4 will add one of these switches to LD\n    *-32|*\"-32 \"|*-melf32bsmip|*\"-melf32bsmip \")\n      libsuff= shlibsuff= libmagic=32-bit;;\n    *-n32|*\"-n32 \"|*-melf32bmipn32|*\"-melf32bmipn32 \")\n      libsuff=32 shlibsuff=N32 libmagic=N32;;\n    *-64|*\"-64 \"|*-melf64bmip|*\"-melf64bmip \")\n      libsuff=64 shlibsuff=64 libmagic=64-bit;;\n    *) libsuff= shlibsuff= libmagic=never-match;;\n    esac\n    ;;\n  esac\n  shlibpath_var=LD_LIBRARY${shlibsuff}_PATH\n  shlibpath_overrides_runpath=no\n  sys_lib_search_path_spec=\"/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}\"\n  sys_lib_dlsearch_path_spec=\"/usr/lib${libsuff} /lib${libsuff}\"\n  hardcode_into_libs=yes\n  ;;\n\n# No shared lib support for Linux oldld, aout, or coff.\nlinux*oldld* | linux*aout* | linux*coff*)\n  dynamic_linker=no\n  ;;\n\n# This must be Linux ELF.\nlinux* | k*bsd*-gnu)\n  version_type=linux\n  need_lib_prefix=no\n  need_version=no\n  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'\n  soname_spec='${libname}${release}${shared_ext}$major'\n  finish_cmds='PATH=\"\\$PATH:/sbin\" ldconfig -n $libdir'\n  shlibpath_var=LD_LIBRARY_PATH\n  shlibpath_overrides_runpath=no\n  # This implies no fast_install, which is unacceptable.\n  # Some rework will be needed to allow for fast_install\n  # before this can be enabled.\n  hardcode_into_libs=yes\n\n  # Append ld.so.conf contents to the search path\n  if test -f /etc/ld.so.conf; then\n    lt_ld_extra=`awk '/^include / { system(sprintf(\"cd /etc; cat %s\", \\[$]2)); skip = 1; } { if (!skip) print \\[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;s/[:,\t]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\\n' ' '`\n    sys_lib_dlsearch_path_spec=\"/lib /usr/lib $lt_ld_extra\"\n  fi\n\n  # We used to test for /lib/ld.so.1 and disable shared libraries on\n  # powerpc, because MkLinux only supported shared libraries with the\n  # GNU dynamic linker.  Since this was broken with cross compilers,\n  # most powerpc-linux boxes support dynamic linking these days and\n  # people can always --disable-shared, the test was removed, and we\n  # assume the GNU/Linux dynamic linker is in use.\n  dynamic_linker='GNU/Linux ld.so'\n  ;;\n\nnetbsdelf*-gnu)\n  version_type=linux\n  need_lib_prefix=no\n  need_version=no\n  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'\n  soname_spec='${libname}${release}${shared_ext}$major'\n  shlibpath_var=LD_LIBRARY_PATH\n  shlibpath_overrides_runpath=no\n  hardcode_into_libs=yes\n  dynamic_linker='NetBSD ld.elf_so'\n  ;;\n\nnetbsd*)\n  version_type=sunos\n  need_lib_prefix=no\n  need_version=no\n  if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then\n    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'\n    finish_cmds='PATH=\"\\$PATH:/sbin\" ldconfig -m $libdir'\n    dynamic_linker='NetBSD (a.out) ld.so'\n  else\n    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'\n    soname_spec='${libname}${release}${shared_ext}$major'\n    dynamic_linker='NetBSD ld.elf_so'\n  fi\n  shlibpath_var=LD_LIBRARY_PATH\n  shlibpath_overrides_runpath=yes\n  hardcode_into_libs=yes\n  ;;\n\nnewsos6)\n  version_type=linux\n  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'\n  shlibpath_var=LD_LIBRARY_PATH\n  shlibpath_overrides_runpath=yes\n  ;;\n\nnto-qnx*)\n  version_type=linux\n  need_lib_prefix=no\n  need_version=no\n  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'\n  soname_spec='${libname}${release}${shared_ext}$major'\n  shlibpath_var=LD_LIBRARY_PATH\n  shlibpath_overrides_runpath=yes\n  ;;\n\nopenbsd*)\n  version_type=sunos\n  sys_lib_dlsearch_path_spec=\"/usr/lib\"\n  need_lib_prefix=no\n  # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs.\n  case $host_os in\n    openbsd3.3 | openbsd3.3.*) need_version=yes ;;\n    *)                         need_version=no  ;;\n  esac\n  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'\n  finish_cmds='PATH=\"\\$PATH:/sbin\" ldconfig -m $libdir'\n  shlibpath_var=LD_LIBRARY_PATH\n  if test -z \"`echo __ELF__ | $CC -E - | grep __ELF__`\" || test \"$host_os-$host_cpu\" = \"openbsd2.8-powerpc\"; then\n    case $host_os in\n      openbsd2.[[89]] | openbsd2.[[89]].*)\n\tshlibpath_overrides_runpath=no\n\t;;\n      *)\n\tshlibpath_overrides_runpath=yes\n\t;;\n      esac\n  else\n    shlibpath_overrides_runpath=yes\n  fi\n  ;;\n\nos2*)\n  libname_spec='$name'\n  shrext_cmds=\".dll\"\n  need_lib_prefix=no\n  library_names_spec='$libname${shared_ext} $libname.a'\n  dynamic_linker='OS/2 ld.exe'\n  shlibpath_var=LIBPATH\n  ;;\n\nosf3* | osf4* | osf5*)\n  version_type=osf\n  need_lib_prefix=no\n  need_version=no\n  soname_spec='${libname}${release}${shared_ext}$major'\n  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'\n  shlibpath_var=LD_LIBRARY_PATH\n  sys_lib_search_path_spec=\"/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib\"\n  sys_lib_dlsearch_path_spec=\"$sys_lib_search_path_spec\"\n  ;;\n\nsolaris*)\n  version_type=linux\n  need_lib_prefix=no\n  need_version=no\n  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'\n  soname_spec='${libname}${release}${shared_ext}$major'\n  shlibpath_var=LD_LIBRARY_PATH\n  shlibpath_overrides_runpath=yes\n  hardcode_into_libs=yes\n  # ldd complains unless libraries are executable\n  postinstall_cmds='chmod +x $lib'\n  ;;\n\nsunos4*)\n  version_type=sunos\n  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'\n  finish_cmds='PATH=\"\\$PATH:/usr/etc\" ldconfig $libdir'\n  shlibpath_var=LD_LIBRARY_PATH\n  shlibpath_overrides_runpath=yes\n  if test \"$with_gnu_ld\" = yes; then\n    need_lib_prefix=no\n  fi\n  need_version=yes\n  ;;\n\nsysv4 | sysv4.3*)\n  version_type=linux\n  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'\n  soname_spec='${libname}${release}${shared_ext}$major'\n  shlibpath_var=LD_LIBRARY_PATH\n  case $host_vendor in\n    sni)\n      shlibpath_overrides_runpath=no\n      need_lib_prefix=no\n      export_dynamic_flag_spec='${wl}-Blargedynsym'\n      runpath_var=LD_RUN_PATH\n      ;;\n    siemens)\n      need_lib_prefix=no\n      ;;\n    motorola)\n      need_lib_prefix=no\n      need_version=no\n      shlibpath_overrides_runpath=no\n      sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'\n      ;;\n  esac\n  ;;\n\nsysv4*MP*)\n  if test -d /usr/nec ;then\n    version_type=linux\n    library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}'\n    soname_spec='$libname${shared_ext}.$major'\n    shlibpath_var=LD_LIBRARY_PATH\n  fi\n  ;;\n\nsysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)\n  version_type=freebsd-elf\n  need_lib_prefix=no\n  need_version=no\n  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'\n  soname_spec='${libname}${release}${shared_ext}$major'\n  shlibpath_var=LD_LIBRARY_PATH\n  hardcode_into_libs=yes\n  if test \"$with_gnu_ld\" = yes; then\n    sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib'\n    shlibpath_overrides_runpath=no\n  else\n    sys_lib_search_path_spec='/usr/ccs/lib /usr/lib'\n    shlibpath_overrides_runpath=yes\n    case $host_os in\n      sco3.2v5*)\n        sys_lib_search_path_spec=\"$sys_lib_search_path_spec /lib\"\n\t;;\n    esac\n  fi\n  sys_lib_dlsearch_path_spec='/usr/lib'\n  ;;\n\nuts4*)\n  version_type=linux\n  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'\n  soname_spec='${libname}${release}${shared_ext}$major'\n  shlibpath_var=LD_LIBRARY_PATH\n  ;;\n\n*)\n  dynamic_linker=no\n  ;;\nesac\nAC_MSG_RESULT([$dynamic_linker])\ntest \"$dynamic_linker\" = no && can_build_shared=no\n\nvariables_saved_for_relink=\"PATH $shlibpath_var $runpath_var\"\nif test \"$GCC\" = yes; then\n  variables_saved_for_relink=\"$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH\"\nfi\n])# AC_LIBTOOL_SYS_DYNAMIC_LINKER\n\n\n# _LT_AC_TAGCONFIG\n# ----------------\nAC_DEFUN([_LT_AC_TAGCONFIG],\n[AC_ARG_WITH([tags],\n    [AC_HELP_STRING([--with-tags@<:@=TAGS@:>@],\n        [include additional configurations @<:@automatic@:>@])],\n    [tagnames=\"$withval\"])\n\nif test -f \"$ltmain\" && test -n \"$tagnames\"; then\n  if test ! -f \"${ofile}\"; then\n    AC_MSG_WARN([output file `$ofile' does not exist])\n  fi\n\n  if test -z \"$LTCC\"; then\n    eval \"`$SHELL ${ofile} --config | grep '^LTCC='`\"\n    if test -z \"$LTCC\"; then\n      AC_MSG_WARN([output file `$ofile' does not look like a libtool script])\n    else\n      AC_MSG_WARN([using `LTCC=$LTCC', extracted from `$ofile'])\n    fi\n  fi\n  if test -z \"$LTCFLAGS\"; then\n    eval \"`$SHELL ${ofile} --config | grep '^LTCFLAGS='`\"\n  fi\n\n  # Extract list of available tagged configurations in $ofile.\n  # Note that this assumes the entire list is on one line.\n  available_tags=`grep \"^available_tags=\" \"${ofile}\" | $SED -e 's/available_tags=\\(.*$\\)/\\1/' -e 's/\\\"//g'`\n\n  lt_save_ifs=\"$IFS\"; IFS=\"${IFS}$PATH_SEPARATOR,\"\n  for tagname in $tagnames; do\n    IFS=\"$lt_save_ifs\"\n    # Check whether tagname contains only valid characters\n    case `$echo \"X$tagname\" | $Xsed -e 's:[[-_ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890,/]]::g'` in\n    \"\") ;;\n    *)  AC_MSG_ERROR([invalid tag name: $tagname])\n\t;;\n    esac\n\n    if grep \"^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$\" < \"${ofile}\" > /dev/null\n    then\n      AC_MSG_ERROR([tag name \\\"$tagname\\\" already exists])\n    fi\n\n    # Update the list of available tags.\n    if test -n \"$tagname\"; then\n      echo appending configuration tag \\\"$tagname\\\" to $ofile\n\n      case $tagname in\n      CXX)\n\tif test -n \"$CXX\" && ( test \"X$CXX\" != \"Xno\" &&\n\t    ( (test \"X$CXX\" = \"Xg++\" && `g++ -v >/dev/null 2>&1` ) ||\n\t    (test \"X$CXX\" != \"Xg++\"))) ; then\n\t  AC_LIBTOOL_LANG_CXX_CONFIG\n\telse\n\t  tagname=\"\"\n\tfi\n\t;;\n\n      F77)\n\tif test -n \"$F77\" && test \"X$F77\" != \"Xno\"; then\n\t  AC_LIBTOOL_LANG_F77_CONFIG\n\telse\n\t  tagname=\"\"\n\tfi\n\t;;\n\n      GCJ)\n\tif test -n \"$GCJ\" && test \"X$GCJ\" != \"Xno\"; then\n\t  AC_LIBTOOL_LANG_GCJ_CONFIG\n\telse\n\t  tagname=\"\"\n\tfi\n\t;;\n\n      RC)\n\tAC_LIBTOOL_LANG_RC_CONFIG\n\t;;\n\n      *)\n\tAC_MSG_ERROR([Unsupported tag name: $tagname])\n\t;;\n      esac\n\n      # Append the new tag name to the list of available tags.\n      if test -n \"$tagname\" ; then\n      available_tags=\"$available_tags $tagname\"\n    fi\n    fi\n  done\n  IFS=\"$lt_save_ifs\"\n\n  # Now substitute the updated list of available tags.\n  if eval \"sed -e 's/^available_tags=.*\\$/available_tags=\\\"$available_tags\\\"/' \\\"$ofile\\\" > \\\"${ofile}T\\\"\"; then\n    mv \"${ofile}T\" \"$ofile\"\n    chmod +x \"$ofile\"\n  else\n    rm -f \"${ofile}T\"\n    AC_MSG_ERROR([unable to update list of available tagged configurations.])\n  fi\nfi\n])# _LT_AC_TAGCONFIG\n\n\n# AC_LIBTOOL_DLOPEN\n# -----------------\n# enable checks for dlopen support\nAC_DEFUN([AC_LIBTOOL_DLOPEN],\n [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])\n])# AC_LIBTOOL_DLOPEN\n\n\n# AC_LIBTOOL_WIN32_DLL\n# --------------------\n# declare package support for building win32 DLLs\nAC_DEFUN([AC_LIBTOOL_WIN32_DLL],\n[AC_BEFORE([$0], [AC_LIBTOOL_SETUP])\n])# AC_LIBTOOL_WIN32_DLL\n\n\n# AC_ENABLE_SHARED([DEFAULT])\n# ---------------------------\n# implement the --enable-shared flag\n# DEFAULT is either `yes' or `no'.  If omitted, it defaults to `yes'.\nAC_DEFUN([AC_ENABLE_SHARED],\n[define([AC_ENABLE_SHARED_DEFAULT], ifelse($1, no, no, yes))dnl\nAC_ARG_ENABLE([shared],\n    [AC_HELP_STRING([--enable-shared@<:@=PKGS@:>@],\n\t[build shared libraries @<:@default=]AC_ENABLE_SHARED_DEFAULT[@:>@])],\n    [p=${PACKAGE-default}\n    case $enableval in\n    yes) enable_shared=yes ;;\n    no) enable_shared=no ;;\n    *)\n      enable_shared=no\n      # Look at the argument we got.  We use all the common list separators.\n      lt_save_ifs=\"$IFS\"; IFS=\"${IFS}$PATH_SEPARATOR,\"\n      for pkg in $enableval; do\n\tIFS=\"$lt_save_ifs\"\n\tif test \"X$pkg\" = \"X$p\"; then\n\t  enable_shared=yes\n\tfi\n      done\n      IFS=\"$lt_save_ifs\"\n      ;;\n    esac],\n    [enable_shared=]AC_ENABLE_SHARED_DEFAULT)\n])# AC_ENABLE_SHARED\n\n\n# AC_DISABLE_SHARED\n# -----------------\n# set the default shared flag to --disable-shared\nAC_DEFUN([AC_DISABLE_SHARED],\n[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl\nAC_ENABLE_SHARED(no)\n])# AC_DISABLE_SHARED\n\n\n# AC_ENABLE_STATIC([DEFAULT])\n# ---------------------------\n# implement the --enable-static flag\n# DEFAULT is either `yes' or `no'.  If omitted, it defaults to `yes'.\nAC_DEFUN([AC_ENABLE_STATIC],\n[define([AC_ENABLE_STATIC_DEFAULT], ifelse($1, no, no, yes))dnl\nAC_ARG_ENABLE([static],\n    [AC_HELP_STRING([--enable-static@<:@=PKGS@:>@],\n\t[build static libraries @<:@default=]AC_ENABLE_STATIC_DEFAULT[@:>@])],\n    [p=${PACKAGE-default}\n    case $enableval in\n    yes) enable_static=yes ;;\n    no) enable_static=no ;;\n    *)\n     enable_static=no\n      # Look at the argument we got.  We use all the common list separators.\n      lt_save_ifs=\"$IFS\"; IFS=\"${IFS}$PATH_SEPARATOR,\"\n      for pkg in $enableval; do\n\tIFS=\"$lt_save_ifs\"\n\tif test \"X$pkg\" = \"X$p\"; then\n\t  enable_static=yes\n\tfi\n      done\n      IFS=\"$lt_save_ifs\"\n      ;;\n    esac],\n    [enable_static=]AC_ENABLE_STATIC_DEFAULT)\n])# AC_ENABLE_STATIC\n\n\n# AC_DISABLE_STATIC\n# -----------------\n# set the default static flag to --disable-static\nAC_DEFUN([AC_DISABLE_STATIC],\n[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl\nAC_ENABLE_STATIC(no)\n])# AC_DISABLE_STATIC\n\n\n# AC_ENABLE_FAST_INSTALL([DEFAULT])\n# ---------------------------------\n# implement the --enable-fast-install flag\n# DEFAULT is either `yes' or `no'.  If omitted, it defaults to `yes'.\nAC_DEFUN([AC_ENABLE_FAST_INSTALL],\n[define([AC_ENABLE_FAST_INSTALL_DEFAULT], ifelse($1, no, no, yes))dnl\nAC_ARG_ENABLE([fast-install],\n    [AC_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@],\n    [optimize for fast installation @<:@default=]AC_ENABLE_FAST_INSTALL_DEFAULT[@:>@])],\n    [p=${PACKAGE-default}\n    case $enableval in\n    yes) enable_fast_install=yes ;;\n    no) enable_fast_install=no ;;\n    *)\n      enable_fast_install=no\n      # Look at the argument we got.  We use all the common list separators.\n      lt_save_ifs=\"$IFS\"; IFS=\"${IFS}$PATH_SEPARATOR,\"\n      for pkg in $enableval; do\n\tIFS=\"$lt_save_ifs\"\n\tif test \"X$pkg\" = \"X$p\"; then\n\t  enable_fast_install=yes\n\tfi\n      done\n      IFS=\"$lt_save_ifs\"\n      ;;\n    esac],\n    [enable_fast_install=]AC_ENABLE_FAST_INSTALL_DEFAULT)\n])# AC_ENABLE_FAST_INSTALL\n\n\n# AC_DISABLE_FAST_INSTALL\n# -----------------------\n# set the default to --disable-fast-install\nAC_DEFUN([AC_DISABLE_FAST_INSTALL],\n[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl\nAC_ENABLE_FAST_INSTALL(no)\n])# AC_DISABLE_FAST_INSTALL\n\n\n# AC_LIBTOOL_PICMODE([MODE])\n# --------------------------\n# implement the --with-pic flag\n# MODE is either `yes' or `no'.  If omitted, it defaults to `both'.\nAC_DEFUN([AC_LIBTOOL_PICMODE],\n[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl\npic_mode=ifelse($#,1,$1,default)\n])# AC_LIBTOOL_PICMODE\n\n\n# AC_PROG_EGREP\n# -------------\n# This is predefined starting with Autoconf 2.54, so this conditional\n# definition can be removed once we require Autoconf 2.54 or later.\nm4_ifndef([AC_PROG_EGREP], [AC_DEFUN([AC_PROG_EGREP],\n[AC_CACHE_CHECK([for egrep], [ac_cv_prog_egrep],\n   [if echo a | (grep -E '(a|b)') >/dev/null 2>&1\n    then ac_cv_prog_egrep='grep -E'\n    else ac_cv_prog_egrep='egrep'\n    fi])\n EGREP=$ac_cv_prog_egrep\n AC_SUBST([EGREP])\n])])\n\n\n# AC_PATH_TOOL_PREFIX\n# -------------------\n# find a file program which can recognise shared library\nAC_DEFUN([AC_PATH_TOOL_PREFIX],\n[AC_REQUIRE([AC_PROG_EGREP])dnl\nAC_MSG_CHECKING([for $1])\nAC_CACHE_VAL(lt_cv_path_MAGIC_CMD,\n[case $MAGIC_CMD in\n[[\\\\/*] |  ?:[\\\\/]*])\n  lt_cv_path_MAGIC_CMD=\"$MAGIC_CMD\" # Let the user override the test with a path.\n  ;;\n*)\n  lt_save_MAGIC_CMD=\"$MAGIC_CMD\"\n  lt_save_ifs=\"$IFS\"; IFS=$PATH_SEPARATOR\ndnl $ac_dummy forces splitting on constant user-supplied paths.\ndnl POSIX.2 word splitting is done only on the output of word expansions,\ndnl not every word.  This closes a longstanding sh security hole.\n  ac_dummy=\"ifelse([$2], , $PATH, [$2])\"\n  for ac_dir in $ac_dummy; do\n    IFS=\"$lt_save_ifs\"\n    test -z \"$ac_dir\" && ac_dir=.\n    if test -f $ac_dir/$1; then\n      lt_cv_path_MAGIC_CMD=\"$ac_dir/$1\"\n      if test -n \"$file_magic_test_file\"; then\n\tcase $deplibs_check_method in\n\t\"file_magic \"*)\n\t  file_magic_regex=`expr \"$deplibs_check_method\" : \"file_magic \\(.*\\)\"`\n\t  MAGIC_CMD=\"$lt_cv_path_MAGIC_CMD\"\n\t  if eval $file_magic_cmd \\$file_magic_test_file 2> /dev/null |\n\t    $EGREP \"$file_magic_regex\" > /dev/null; then\n\t    :\n\t  else\n\t    cat <<EOF 1>&2\n\n*** Warning: the command libtool uses to detect shared libraries,\n*** $file_magic_cmd, produces output that libtool cannot recognize.\n*** The result is that libtool may fail to recognize shared libraries\n*** as such.  This will affect the creation of libtool libraries that\n*** depend on shared libraries, but programs linked with such libtool\n*** libraries will work regardless of this problem.  Nevertheless, you\n*** may want to report the problem to your system manager and/or to\n*** bug-libtool@gnu.org\n\nEOF\n\t  fi ;;\n\tesac\n      fi\n      break\n    fi\n  done\n  IFS=\"$lt_save_ifs\"\n  MAGIC_CMD=\"$lt_save_MAGIC_CMD\"\n  ;;\nesac])\nMAGIC_CMD=\"$lt_cv_path_MAGIC_CMD\"\nif test -n \"$MAGIC_CMD\"; then\n  AC_MSG_RESULT($MAGIC_CMD)\nelse\n  AC_MSG_RESULT(no)\nfi\n])# AC_PATH_TOOL_PREFIX\n\n\n# AC_PATH_MAGIC\n# -------------\n# find a file program which can recognise a shared library\nAC_DEFUN([AC_PATH_MAGIC],\n[AC_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH)\nif test -z \"$lt_cv_path_MAGIC_CMD\"; then\n  if test -n \"$ac_tool_prefix\"; then\n    AC_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH)\n  else\n    MAGIC_CMD=:\n  fi\nfi\n])# AC_PATH_MAGIC\n\n\n# AC_PROG_LD\n# ----------\n# find the pathname to the GNU or non-GNU linker\nAC_DEFUN([AC_PROG_LD],\n[AC_ARG_WITH([gnu-ld],\n    [AC_HELP_STRING([--with-gnu-ld],\n\t[assume the C compiler uses GNU ld @<:@default=no@:>@])],\n    [test \"$withval\" = no || with_gnu_ld=yes],\n    [with_gnu_ld=no])\nAC_REQUIRE([LT_AC_PROG_SED])dnl\nAC_REQUIRE([AC_PROG_CC])dnl\nAC_REQUIRE([AC_CANONICAL_HOST])dnl\nAC_REQUIRE([AC_CANONICAL_BUILD])dnl\nac_prog=ld\nif test \"$GCC\" = yes; then\n  # Check if gcc -print-prog-name=ld gives a path.\n  AC_MSG_CHECKING([for ld used by $CC])\n  case $host in\n  *-*-mingw*)\n    # gcc leaves a trailing carriage return which upsets mingw\n    ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\\015'` ;;\n  *)\n    ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;\n  esac\n  case $ac_prog in\n    # Accept absolute paths.\n    [[\\\\/]]* | ?:[[\\\\/]]*)\n      re_direlt='/[[^/]][[^/]]*/\\.\\./'\n      # Canonicalize the pathname of ld\n      ac_prog=`echo $ac_prog| $SED 's%\\\\\\\\%/%g'`\n      while echo $ac_prog | grep \"$re_direlt\" > /dev/null 2>&1; do\n\tac_prog=`echo $ac_prog| $SED \"s%$re_direlt%/%\"`\n      done\n      test -z \"$LD\" && LD=\"$ac_prog\"\n      ;;\n  \"\")\n    # If it fails, then pretend we aren't using GCC.\n    ac_prog=ld\n    ;;\n  *)\n    # If it is relative, then search for the first ld in PATH.\n    with_gnu_ld=unknown\n    ;;\n  esac\nelif test \"$with_gnu_ld\" = yes; then\n  AC_MSG_CHECKING([for GNU ld])\nelse\n  AC_MSG_CHECKING([for non-GNU ld])\nfi\nAC_CACHE_VAL(lt_cv_path_LD,\n[if test -z \"$LD\"; then\n  lt_save_ifs=\"$IFS\"; IFS=$PATH_SEPARATOR\n  for ac_dir in $PATH; do\n    IFS=\"$lt_save_ifs\"\n    test -z \"$ac_dir\" && ac_dir=.\n    if test -f \"$ac_dir/$ac_prog\" || test -f \"$ac_dir/$ac_prog$ac_exeext\"; then\n      lt_cv_path_LD=\"$ac_dir/$ac_prog\"\n      # Check to see if the program is GNU ld.  I'd rather use --version,\n      # but apparently some variants of GNU ld only accept -v.\n      # Break only if it was the GNU/non-GNU ld that we prefer.\n      case `\"$lt_cv_path_LD\" -v 2>&1 </dev/null` in\n      *GNU* | *'with BFD'*)\n\ttest \"$with_gnu_ld\" != no && break\n\t;;\n      *)\n\ttest \"$with_gnu_ld\" != yes && break\n\t;;\n      esac\n    fi\n  done\n  IFS=\"$lt_save_ifs\"\nelse\n  lt_cv_path_LD=\"$LD\" # Let the user override the test with a path.\nfi])\nLD=\"$lt_cv_path_LD\"\nif test -n \"$LD\"; then\n  AC_MSG_RESULT($LD)\nelse\n  AC_MSG_RESULT(no)\nfi\ntest -z \"$LD\" && AC_MSG_ERROR([no acceptable ld found in \\$PATH])\nAC_PROG_LD_GNU\n])# AC_PROG_LD\n\n\n# AC_PROG_LD_GNU\n# --------------\nAC_DEFUN([AC_PROG_LD_GNU],\n[AC_REQUIRE([AC_PROG_EGREP])dnl\nAC_CACHE_CHECK([if the linker ($LD) is GNU ld], lt_cv_prog_gnu_ld,\n[# I'd rather use --version here, but apparently some GNU lds only accept -v.\ncase `$LD -v 2>&1 </dev/null` in\n*GNU* | *'with BFD'*)\n  lt_cv_prog_gnu_ld=yes\n  ;;\n*)\n  lt_cv_prog_gnu_ld=no\n  ;;\nesac])\nwith_gnu_ld=$lt_cv_prog_gnu_ld\n])# AC_PROG_LD_GNU\n\n\n# AC_PROG_LD_RELOAD_FLAG\n# ----------------------\n# find reload flag for linker\n#   -- PORTME Some linkers may need a different reload flag.\nAC_DEFUN([AC_PROG_LD_RELOAD_FLAG],\n[AC_CACHE_CHECK([for $LD option to reload object files],\n  lt_cv_ld_reload_flag,\n  [lt_cv_ld_reload_flag='-r'])\nreload_flag=$lt_cv_ld_reload_flag\ncase $reload_flag in\n\"\" | \" \"*) ;;\n*) reload_flag=\" $reload_flag\" ;;\nesac\nreload_cmds='$LD$reload_flag -o $output$reload_objs'\ncase $host_os in\n  darwin*)\n    if test \"$GCC\" = yes; then\n      reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs'\n    else\n      reload_cmds='$LD$reload_flag -o $output$reload_objs'\n    fi\n    ;;\nesac\n])# AC_PROG_LD_RELOAD_FLAG\n\n\n# AC_DEPLIBS_CHECK_METHOD\n# -----------------------\n# how to check for library dependencies\n#  -- PORTME fill in with the dynamic library characteristics\nAC_DEFUN([AC_DEPLIBS_CHECK_METHOD],\n[AC_CACHE_CHECK([how to recognise dependent libraries],\nlt_cv_deplibs_check_method,\n[lt_cv_file_magic_cmd='$MAGIC_CMD'\nlt_cv_file_magic_test_file=\nlt_cv_deplibs_check_method='unknown'\n# Need to set the preceding variable on all platforms that support\n# interlibrary dependencies.\n# 'none' -- dependencies not supported.\n# `unknown' -- same as none, but documents that we really don't know.\n# 'pass_all' -- all dependencies passed with no checks.\n# 'test_compile' -- check by making test program.\n# 'file_magic [[regex]]' -- check by looking for files in library path\n# which responds to the $file_magic_cmd with a given extended regex.\n# If you have `file' or equivalent on your system and you're not sure\n# whether `pass_all' will *always* work, you probably want this one.\n\ncase $host_os in\naix4* | aix5*)\n  lt_cv_deplibs_check_method=pass_all\n  ;;\n\nbeos*)\n  lt_cv_deplibs_check_method=pass_all\n  ;;\n\nbsdi[[45]]*)\n  lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib)'\n  lt_cv_file_magic_cmd='/usr/bin/file -L'\n  lt_cv_file_magic_test_file=/shlib/libc.so\n  ;;\n\ncygwin*)\n  # func_win32_libid is a shell function defined in ltmain.sh\n  lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'\n  lt_cv_file_magic_cmd='func_win32_libid'\n  ;;\n\nmingw* | pw32*)\n  # Base MSYS/MinGW do not provide the 'file' command needed by\n  # func_win32_libid shell function, so use a weaker test based on 'objdump'.\n  lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?'\n  lt_cv_file_magic_cmd='$OBJDUMP -f'\n  ;;\n\ndarwin* | rhapsody*)\n  lt_cv_deplibs_check_method=pass_all\n  ;;\n\nfreebsd* | dragonfly*)\n  if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then\n    case $host_cpu in\n    i*86 )\n      # Not sure whether the presence of OpenBSD here was a mistake.\n      # Let's accept both of them until this is cleared up.\n      lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[[3-9]]86 (compact )?demand paged shared library'\n      lt_cv_file_magic_cmd=/usr/bin/file\n      lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*`\n      ;;\n    esac\n  else\n    lt_cv_deplibs_check_method=pass_all\n  fi\n  ;;\n\ngnu*)\n  lt_cv_deplibs_check_method=pass_all\n  ;;\n\nhpux10.20* | hpux11*)\n  lt_cv_file_magic_cmd=/usr/bin/file\n  case $host_cpu in\n  ia64*)\n    lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64'\n    lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so\n    ;;\n  hppa*64*)\n    [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - PA-RISC [0-9].[0-9]']\n    lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl\n    ;;\n  *)\n    lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]].[[0-9]]) shared library'\n    lt_cv_file_magic_test_file=/usr/lib/libc.sl\n    ;;\n  esac\n  ;;\n\ninterix3*)\n  # PIC code is broken on Interix 3.x, that's why |\\.a not |_pic\\.a here\n  lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\\.so|\\.a)$'\n  ;;\n\nirix5* | irix6* | nonstopux*)\n  case $LD in\n  *-32|*\"-32 \") libmagic=32-bit;;\n  *-n32|*\"-n32 \") libmagic=N32;;\n  *-64|*\"-64 \") libmagic=64-bit;;\n  *) libmagic=never-match;;\n  esac\n  lt_cv_deplibs_check_method=pass_all\n  ;;\n\n# This must be Linux ELF.\nlinux* | k*bsd*-gnu)\n  lt_cv_deplibs_check_method=pass_all\n  ;;\n\nnetbsd* | netbsdelf*-gnu)\n  if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then\n    lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\\.so\\.[[0-9]]+\\.[[0-9]]+|_pic\\.a)$'\n  else\n    lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\\.so|_pic\\.a)$'\n  fi\n  ;;\n\nnewos6*)\n  lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)'\n  lt_cv_file_magic_cmd=/usr/bin/file\n  lt_cv_file_magic_test_file=/usr/lib/libnls.so\n  ;;\n\nnto-qnx*)\n  lt_cv_deplibs_check_method=unknown\n  ;;\n\nopenbsd*)\n  if test -z \"`echo __ELF__ | $CC -E - | grep __ELF__`\" || test \"$host_os-$host_cpu\" = \"openbsd2.8-powerpc\"; then\n    lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\\.so\\.[[0-9]]+\\.[[0-9]]+|\\.so|_pic\\.a)$'\n  else\n    lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\\.so\\.[[0-9]]+\\.[[0-9]]+|_pic\\.a)$'\n  fi\n  ;;\n\nosf3* | osf4* | osf5*)\n  lt_cv_deplibs_check_method=pass_all\n  ;;\n\nsolaris*)\n  lt_cv_deplibs_check_method=pass_all\n  ;;\n\nsysv4 | sysv4.3*)\n  case $host_vendor in\n  motorola)\n    lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]'\n    lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*`\n    ;;\n  ncr)\n    lt_cv_deplibs_check_method=pass_all\n    ;;\n  sequent)\n    lt_cv_file_magic_cmd='/bin/file'\n    lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )'\n    ;;\n  sni)\n    lt_cv_file_magic_cmd='/bin/file'\n    lt_cv_deplibs_check_method=\"file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib\"\n    lt_cv_file_magic_test_file=/lib/libc.so\n    ;;\n  siemens)\n    lt_cv_deplibs_check_method=pass_all\n    ;;\n  pc)\n    lt_cv_deplibs_check_method=pass_all\n    ;;\n  esac\n  ;;\n\nsysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)\n  lt_cv_deplibs_check_method=pass_all\n  ;;\nesac\n])\nfile_magic_cmd=$lt_cv_file_magic_cmd\ndeplibs_check_method=$lt_cv_deplibs_check_method\ntest -z \"$deplibs_check_method\" && deplibs_check_method=unknown\n])# AC_DEPLIBS_CHECK_METHOD\n\n\n# AC_PROG_NM\n# ----------\n# find the pathname to a BSD-compatible name lister\nAC_DEFUN([AC_PROG_NM],\n[AC_CACHE_CHECK([for BSD-compatible nm], lt_cv_path_NM,\n[if test -n \"$NM\"; then\n  # Let the user override the test.\n  lt_cv_path_NM=\"$NM\"\nelse\n  lt_nm_to_check=\"${ac_tool_prefix}nm\"\n  if test -n \"$ac_tool_prefix\" && test \"$build\" = \"$host\"; then \n    lt_nm_to_check=\"$lt_nm_to_check nm\"\n  fi\n  for lt_tmp_nm in $lt_nm_to_check; do\n    lt_save_ifs=\"$IFS\"; IFS=$PATH_SEPARATOR\n    for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do\n      IFS=\"$lt_save_ifs\"\n      test -z \"$ac_dir\" && ac_dir=.\n      tmp_nm=\"$ac_dir/$lt_tmp_nm\"\n      if test -f \"$tmp_nm\" || test -f \"$tmp_nm$ac_exeext\" ; then\n\t# Check to see if the nm accepts a BSD-compat flag.\n\t# Adding the `sed 1q' prevents false positives on HP-UX, which says:\n\t#   nm: unknown option \"B\" ignored\n\t# Tru64's nm complains that /dev/null is an invalid object file\n\tcase `\"$tmp_nm\" -B /dev/null 2>&1 | sed '1q'` in\n\t*/dev/null* | *'Invalid file or object type'*)\n\t  lt_cv_path_NM=\"$tmp_nm -B\"\n\t  break\n\t  ;;\n\t*)\n\t  case `\"$tmp_nm\" -p /dev/null 2>&1 | sed '1q'` in\n\t  */dev/null*)\n\t    lt_cv_path_NM=\"$tmp_nm -p\"\n\t    break\n\t    ;;\n\t  *)\n\t    lt_cv_path_NM=${lt_cv_path_NM=\"$tmp_nm\"} # keep the first match, but\n\t    continue # so that we can try to find one that supports BSD flags\n\t    ;;\n\t  esac\n\t  ;;\n\tesac\n      fi\n    done\n    IFS=\"$lt_save_ifs\"\n  done\n  test -z \"$lt_cv_path_NM\" && lt_cv_path_NM=nm\nfi])\nNM=\"$lt_cv_path_NM\"\n])# AC_PROG_NM\n\n\n# AC_CHECK_LIBM\n# -------------\n# check for math library\nAC_DEFUN([AC_CHECK_LIBM],\n[AC_REQUIRE([AC_CANONICAL_HOST])dnl\nLIBM=\ncase $host in\n*-*-beos* | *-*-cygwin* | *-*-pw32* | *-*-darwin*)\n  # These system don't have libm, or don't need it\n  ;;\n*-ncr-sysv4.3*)\n  AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM=\"-lmw\")\n  AC_CHECK_LIB(m, cos, LIBM=\"$LIBM -lm\")\n  ;;\n*)\n  AC_CHECK_LIB(m, cos, LIBM=\"-lm\")\n  ;;\nesac\n])# AC_CHECK_LIBM\n\n\n# AC_LIBLTDL_CONVENIENCE([DIRECTORY])\n# -----------------------------------\n# sets LIBLTDL to the link flags for the libltdl convenience library and\n# LTDLINCL to the include flags for the libltdl header and adds\n# --enable-ltdl-convenience to the configure arguments.  Note that\n# AC_CONFIG_SUBDIRS is not called here.  If DIRECTORY is not provided,\n# it is assumed to be `libltdl'.  LIBLTDL will be prefixed with\n# '${top_builddir}/' and LTDLINCL will be prefixed with '${top_srcdir}/'\n# (note the single quotes!).  If your package is not flat and you're not\n# using automake, define top_builddir and top_srcdir appropriately in\n# the Makefiles.\nAC_DEFUN([AC_LIBLTDL_CONVENIENCE],\n[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl\n  case $enable_ltdl_convenience in\n  no) AC_MSG_ERROR([this package needs a convenience libltdl]) ;;\n  \"\") enable_ltdl_convenience=yes\n      ac_configure_args=\"$ac_configure_args --enable-ltdl-convenience\" ;;\n  esac\n  LIBLTDL='${top_builddir}/'ifelse($#,1,[$1],['libltdl'])/libltdlc.la\n  LTDLINCL='-I${top_srcdir}/'ifelse($#,1,[$1],['libltdl'])\n  # For backwards non-gettext consistent compatibility...\n  INCLTDL=\"$LTDLINCL\"\n])# AC_LIBLTDL_CONVENIENCE\n\n\n# AC_LIBLTDL_INSTALLABLE([DIRECTORY])\n# -----------------------------------\n# sets LIBLTDL to the link flags for the libltdl installable library and\n# LTDLINCL to the include flags for the libltdl header and adds\n# --enable-ltdl-install to the configure arguments.  Note that\n# AC_CONFIG_SUBDIRS is not called here.  If DIRECTORY is not provided,\n# and an installed libltdl is not found, it is assumed to be `libltdl'.\n# LIBLTDL will be prefixed with '${top_builddir}/'# and LTDLINCL with\n# '${top_srcdir}/' (note the single quotes!).  If your package is not\n# flat and you're not using automake, define top_builddir and top_srcdir\n# appropriately in the Makefiles.\n# In the future, this macro may have to be called after AC_PROG_LIBTOOL.\nAC_DEFUN([AC_LIBLTDL_INSTALLABLE],\n[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl\n  AC_CHECK_LIB(ltdl, lt_dlinit,\n  [test x\"$enable_ltdl_install\" != xyes && enable_ltdl_install=no],\n  [if test x\"$enable_ltdl_install\" = xno; then\n     AC_MSG_WARN([libltdl not installed, but installation disabled])\n   else\n     enable_ltdl_install=yes\n   fi\n  ])\n  if test x\"$enable_ltdl_install\" = x\"yes\"; then\n    ac_configure_args=\"$ac_configure_args --enable-ltdl-install\"\n    LIBLTDL='${top_builddir}/'ifelse($#,1,[$1],['libltdl'])/libltdl.la\n    LTDLINCL='-I${top_srcdir}/'ifelse($#,1,[$1],['libltdl'])\n  else\n    ac_configure_args=\"$ac_configure_args --enable-ltdl-install=no\"\n    LIBLTDL=\"-lltdl\"\n    LTDLINCL=\n  fi\n  # For backwards non-gettext consistent compatibility...\n  INCLTDL=\"$LTDLINCL\"\n])# AC_LIBLTDL_INSTALLABLE\n\n\n# AC_LIBTOOL_CXX\n# --------------\n# enable support for C++ libraries\nAC_DEFUN([AC_LIBTOOL_CXX],\n[AC_REQUIRE([_LT_AC_LANG_CXX])\n])# AC_LIBTOOL_CXX\n\n\n# _LT_AC_LANG_CXX\n# ---------------\nAC_DEFUN([_LT_AC_LANG_CXX],\n[AC_REQUIRE([AC_PROG_CXX])\nAC_REQUIRE([_LT_AC_PROG_CXXCPP])\n_LT_AC_SHELL_INIT([tagnames=${tagnames+${tagnames},}CXX])\n])# _LT_AC_LANG_CXX\n\n# _LT_AC_PROG_CXXCPP\n# ------------------\nAC_DEFUN([_LT_AC_PROG_CXXCPP],\n[\nAC_REQUIRE([AC_PROG_CXX])\nif test -n \"$CXX\" && ( test \"X$CXX\" != \"Xno\" &&\n    ( (test \"X$CXX\" = \"Xg++\" && `g++ -v >/dev/null 2>&1` ) ||\n    (test \"X$CXX\" != \"Xg++\"))) ; then\n  AC_PROG_CXXCPP\nfi\n])# _LT_AC_PROG_CXXCPP\n\n# AC_LIBTOOL_F77\n# --------------\n# enable support for Fortran 77 libraries\nAC_DEFUN([AC_LIBTOOL_F77],\n[AC_REQUIRE([_LT_AC_LANG_F77])\n])# AC_LIBTOOL_F77\n\n\n# _LT_AC_LANG_F77\n# ---------------\nAC_DEFUN([_LT_AC_LANG_F77],\n[AC_REQUIRE([AC_PROG_F77])\n_LT_AC_SHELL_INIT([tagnames=${tagnames+${tagnames},}F77])\n])# _LT_AC_LANG_F77\n\n\n# AC_LIBTOOL_GCJ\n# --------------\n# enable support for GCJ libraries\nAC_DEFUN([AC_LIBTOOL_GCJ],\n[AC_REQUIRE([_LT_AC_LANG_GCJ])\n])# AC_LIBTOOL_GCJ\n\n\n# _LT_AC_LANG_GCJ\n# ---------------\nAC_DEFUN([_LT_AC_LANG_GCJ],\n[AC_PROVIDE_IFELSE([AC_PROG_GCJ],[],\n  [AC_PROVIDE_IFELSE([A][M_PROG_GCJ],[],\n    [AC_PROVIDE_IFELSE([LT_AC_PROG_GCJ],[],\n      [ifdef([AC_PROG_GCJ],[AC_REQUIRE([AC_PROG_GCJ])],\n\t [ifdef([A][M_PROG_GCJ],[AC_REQUIRE([A][M_PROG_GCJ])],\n\t   [AC_REQUIRE([A][C_PROG_GCJ_OR_A][M_PROG_GCJ])])])])])])\n_LT_AC_SHELL_INIT([tagnames=${tagnames+${tagnames},}GCJ])\n])# _LT_AC_LANG_GCJ\n\n\n# AC_LIBTOOL_RC\n# -------------\n# enable support for Windows resource files\nAC_DEFUN([AC_LIBTOOL_RC],\n[AC_REQUIRE([LT_AC_PROG_RC])\n_LT_AC_SHELL_INIT([tagnames=${tagnames+${tagnames},}RC])\n])# AC_LIBTOOL_RC\n\n\n# AC_LIBTOOL_LANG_C_CONFIG\n# ------------------------\n# Ensure that the configuration vars for the C compiler are\n# suitably defined.  Those variables are subsequently used by\n# AC_LIBTOOL_CONFIG to write the compiler configuration to `libtool'.\nAC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG], [_LT_AC_LANG_C_CONFIG])\nAC_DEFUN([_LT_AC_LANG_C_CONFIG],\n[lt_save_CC=\"$CC\"\nAC_LANG_PUSH(C)\n\n# Source file extension for C test sources.\nac_ext=c\n\n# Object file extension for compiled C test sources.\nobjext=o\n_LT_AC_TAGVAR(objext, $1)=$objext\n\n# Code to be used in simple compile tests\nlt_simple_compile_test_code=\"int some_variable = 0;\\n\"\n\n# Code to be used in simple link tests\nlt_simple_link_test_code='int main(){return(0);}\\n'\n\n_LT_AC_SYS_COMPILER\n\n# save warnings/boilerplate of simple test code\n_LT_COMPILER_BOILERPLATE\n_LT_LINKER_BOILERPLATE\n\nAC_LIBTOOL_PROG_COMPILER_NO_RTTI($1)\nAC_LIBTOOL_PROG_COMPILER_PIC($1)\nAC_LIBTOOL_PROG_CC_C_O($1)\nAC_LIBTOOL_SYS_HARD_LINK_LOCKS($1)\nAC_LIBTOOL_PROG_LD_SHLIBS($1)\nAC_LIBTOOL_SYS_DYNAMIC_LINKER($1)\nAC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH($1)\nAC_LIBTOOL_SYS_LIB_STRIP\nAC_LIBTOOL_DLOPEN_SELF\n\n# Report which library types will actually be built\nAC_MSG_CHECKING([if libtool supports shared libraries])\nAC_MSG_RESULT([$can_build_shared])\n\nAC_MSG_CHECKING([whether to build shared libraries])\ntest \"$can_build_shared\" = \"no\" && enable_shared=no\n\n# On AIX, shared libraries and static libraries use the same namespace, and\n# are all built from PIC.\ncase $host_os in\naix3*)\n  test \"$enable_shared\" = yes && enable_static=no\n  if test -n \"$RANLIB\"; then\n    archive_cmds=\"$archive_cmds~\\$RANLIB \\$lib\"\n    postinstall_cmds='$RANLIB $lib'\n  fi\n  ;;\n\naix4* | aix5*)\n  if test \"$host_cpu\" != ia64 && test \"$aix_use_runtimelinking\" = no ; then\n    test \"$enable_shared\" = yes && enable_static=no\n  fi\n    ;;\nesac\nAC_MSG_RESULT([$enable_shared])\n\nAC_MSG_CHECKING([whether to build static libraries])\n# Make sure either enable_shared or enable_static is yes.\ntest \"$enable_shared\" = yes || enable_static=yes\nAC_MSG_RESULT([$enable_static])\n\nAC_LIBTOOL_CONFIG($1)\n\nAC_LANG_POP\nCC=\"$lt_save_CC\"\n])# AC_LIBTOOL_LANG_C_CONFIG\n\n\n# AC_LIBTOOL_LANG_CXX_CONFIG\n# --------------------------\n# Ensure that the configuration vars for the C compiler are\n# suitably defined.  Those variables are subsequently used by\n# AC_LIBTOOL_CONFIG to write the compiler configuration to `libtool'.\nAC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG], [_LT_AC_LANG_CXX_CONFIG(CXX)])\nAC_DEFUN([_LT_AC_LANG_CXX_CONFIG],\n[AC_LANG_PUSH(C++)\nAC_REQUIRE([AC_PROG_CXX])\nAC_REQUIRE([_LT_AC_PROG_CXXCPP])\n\n_LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no\n_LT_AC_TAGVAR(allow_undefined_flag, $1)=\n_LT_AC_TAGVAR(always_export_symbols, $1)=no\n_LT_AC_TAGVAR(archive_expsym_cmds, $1)=\n_LT_AC_TAGVAR(export_dynamic_flag_spec, $1)=\n_LT_AC_TAGVAR(hardcode_direct, $1)=no\n_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)=\n_LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=\n_LT_AC_TAGVAR(hardcode_libdir_separator, $1)=\n_LT_AC_TAGVAR(hardcode_minus_L, $1)=no\n_LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=unsupported\n_LT_AC_TAGVAR(hardcode_automatic, $1)=no\n_LT_AC_TAGVAR(module_cmds, $1)=\n_LT_AC_TAGVAR(module_expsym_cmds, $1)=\n_LT_AC_TAGVAR(link_all_deplibs, $1)=unknown\n_LT_AC_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds\n_LT_AC_TAGVAR(no_undefined_flag, $1)=\n_LT_AC_TAGVAR(whole_archive_flag_spec, $1)=\n_LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=no\n\n# Dependencies to place before and after the object being linked:\n_LT_AC_TAGVAR(predep_objects, $1)=\n_LT_AC_TAGVAR(postdep_objects, $1)=\n_LT_AC_TAGVAR(predeps, $1)=\n_LT_AC_TAGVAR(postdeps, $1)=\n_LT_AC_TAGVAR(compiler_lib_search_path, $1)=\n\n# Source file extension for C++ test sources.\nac_ext=cpp\n\n# Object file extension for compiled C++ test sources.\nobjext=o\n_LT_AC_TAGVAR(objext, $1)=$objext\n\n# Code to be used in simple compile tests\nlt_simple_compile_test_code=\"int some_variable = 0;\\n\"\n\n# Code to be used in simple link tests\nlt_simple_link_test_code='int main(int, char *[[]]) { return(0); }\\n'\n\n# ltmain only uses $CC for tagged configurations so make sure $CC is set.\n_LT_AC_SYS_COMPILER\n\n# save warnings/boilerplate of simple test code\n_LT_COMPILER_BOILERPLATE\n_LT_LINKER_BOILERPLATE\n\n# Allow CC to be a program name with arguments.\nlt_save_CC=$CC\nlt_save_LD=$LD\nlt_save_GCC=$GCC\nGCC=$GXX\nlt_save_with_gnu_ld=$with_gnu_ld\nlt_save_path_LD=$lt_cv_path_LD\nif test -n \"${lt_cv_prog_gnu_ldcxx+set}\"; then\n  lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx\nelse\n  $as_unset lt_cv_prog_gnu_ld\nfi\nif test -n \"${lt_cv_path_LDCXX+set}\"; then\n  lt_cv_path_LD=$lt_cv_path_LDCXX\nelse\n  $as_unset lt_cv_path_LD\nfi\ntest -z \"${LDCXX+set}\" || LD=$LDCXX\nCC=${CXX-\"c++\"}\ncompiler=$CC\n_LT_AC_TAGVAR(compiler, $1)=$CC\n_LT_CC_BASENAME([$compiler])\n\n# We don't want -fno-exception wen compiling C++ code, so set the\n# no_builtin_flag separately\nif test \"$GXX\" = yes; then\n  _LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin'\nelse\n  _LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=\nfi\n\nif test \"$GXX\" = yes; then\n  # Set up default GNU C++ configuration\n\n  AC_PROG_LD\n\n  # Check if GNU C++ uses GNU ld as the underlying linker, since the\n  # archiving commands below assume that GNU ld is being used.\n  if test \"$with_gnu_ld\" = yes; then\n    _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'\n    _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'\n\n    _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir'\n    _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'\n\n    # If archive_cmds runs LD, not CC, wlarc should be empty\n    # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to\n    #     investigate it a little bit more. (MM)\n    wlarc='${wl}'\n\n    # ancient GNU ld didn't support --whole-archive et. al.\n    if eval \"`$CC -print-prog-name=ld` --help 2>&1\" | \\\n\tgrep 'no-whole-archive' > /dev/null; then\n      _LT_AC_TAGVAR(whole_archive_flag_spec, $1)=\"$wlarc\"'--whole-archive$convenience '\"$wlarc\"'--no-whole-archive'\n    else\n      _LT_AC_TAGVAR(whole_archive_flag_spec, $1)=\n    fi\n  else\n    with_gnu_ld=no\n    wlarc=\n\n    # A generic and very simple default shared library creation\n    # command for GNU C++ for the case where it uses the native\n    # linker, instead of GNU ld.  If possible, this setting should\n    # overridden to take advantage of the native linker features on\n    # the platform it is being used on.\n    _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'\n  fi\n\n  # Commands to make compiler produce verbose output that lists\n  # what \"hidden\" libraries, object files and flags are used when\n  # linking a shared library.\n  output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep \"\\-L\"'\n\nelse\n  GXX=no\n  with_gnu_ld=no\n  wlarc=\nfi\n\n# PORTME: fill in a description of your system's C++ link characteristics\nAC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries])\n_LT_AC_TAGVAR(ld_shlibs, $1)=yes\ncase $host_os in\n  aix3*)\n    # FIXME: insert proper C++ library support\n    _LT_AC_TAGVAR(ld_shlibs, $1)=no\n    ;;\n  aix4* | aix5*)\n    if test \"$host_cpu\" = ia64; then\n      # On IA64, the linker does run time linking by default, so we don't\n      # have to do anything special.\n      aix_use_runtimelinking=no\n      exp_sym_flag='-Bexport'\n      no_entry_flag=\"\"\n    else\n      aix_use_runtimelinking=no\n\n      # Test if we are trying to use run time linking or normal\n      # AIX style linking. If -brtl is somewhere in LDFLAGS, we\n      # need to do runtime linking.\n      case $host_os in aix4.[[23]]|aix4.[[23]].*|aix5*)\n\tfor ld_flag in $LDFLAGS; do\n\t  case $ld_flag in\n\t  *-brtl*)\n\t    aix_use_runtimelinking=yes\n\t    break\n\t    ;;\n\t  esac\n\tdone\n\t;;\n      esac\n\n      exp_sym_flag='-bexport'\n      no_entry_flag='-bnoentry'\n    fi\n\n    # When large executables or shared objects are built, AIX ld can\n    # have problems creating the table of contents.  If linking a library\n    # or program results in \"error TOC overflow\" add -mminimal-toc to\n    # CXXFLAGS/CFLAGS for g++/gcc.  In the cases where that is not\n    # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.\n\n    _LT_AC_TAGVAR(archive_cmds, $1)=''\n    _LT_AC_TAGVAR(hardcode_direct, $1)=yes\n    _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=':'\n    _LT_AC_TAGVAR(link_all_deplibs, $1)=yes\n\n    if test \"$GXX\" = yes; then\n      case $host_os in aix4.[[012]]|aix4.[[012]].*)\n      # We only want to do this on AIX 4.2 and lower, the check\n      # below for broken collect2 doesn't work under 4.3+\n\tcollect2name=`${CC} -print-prog-name=collect2`\n\tif test -f \"$collect2name\" && \\\n\t   strings \"$collect2name\" | grep resolve_lib_name >/dev/null\n\tthen\n\t  # We have reworked collect2\n\t  _LT_AC_TAGVAR(hardcode_direct, $1)=yes\n\telse\n\t  # We have old collect2\n\t  _LT_AC_TAGVAR(hardcode_direct, $1)=unsupported\n\t  # It fails to find uninstalled libraries when the uninstalled\n\t  # path is not listed in the libpath.  Setting hardcode_minus_L\n\t  # to unsupported forces relinking\n\t  _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes\n\t  _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'\n\t  _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=\n\tfi\n\t;;\n      esac\n      shared_flag='-shared'\n      if test \"$aix_use_runtimelinking\" = yes; then\n\tshared_flag=\"$shared_flag \"'${wl}-G'\n      fi\n    else\n      # not using gcc\n      if test \"$host_cpu\" = ia64; then\n\t# VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release\n\t# chokes on -Wl,-G. The following line is correct:\n\tshared_flag='-G'\n      else\n\tif test \"$aix_use_runtimelinking\" = yes; then\n\t  shared_flag='${wl}-G'\n\telse\n\t  shared_flag='${wl}-bM:SRE'\n\tfi\n      fi\n    fi\n\n    # It seems that -bexpall does not export symbols beginning with\n    # underscore (_), so it is better to generate a list of symbols to export.\n    _LT_AC_TAGVAR(always_export_symbols, $1)=yes\n    if test \"$aix_use_runtimelinking\" = yes; then\n      # Warning - without using the other runtime loading flags (-brtl),\n      # -berok will link without error, but may produce a broken library.\n      _LT_AC_TAGVAR(allow_undefined_flag, $1)='-berok'\n      # Determine the default libpath from the value encoded in an empty executable.\n      _LT_AC_SYS_LIBPATH_AIX\n      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'\"$aix_libpath\"\n\n      _LT_AC_TAGVAR(archive_expsym_cmds, $1)=\"\\$CC\"' -o $output_objdir/$soname $libobjs $deplibs '\"\\${wl}$no_entry_flag\"' $compiler_flags `if test \"x${allow_undefined_flag}\" != \"x\"; then echo \"${wl}${allow_undefined_flag}\"; else :; fi` '\"\\${wl}$exp_sym_flag:\\$export_symbols $shared_flag\"\n     else\n      if test \"$host_cpu\" = ia64; then\n\t_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib'\n\t_LT_AC_TAGVAR(allow_undefined_flag, $1)=\"-z nodefs\"\n\t_LT_AC_TAGVAR(archive_expsym_cmds, $1)=\"\\$CC $shared_flag\"' -o $output_objdir/$soname $libobjs $deplibs '\"\\${wl}$no_entry_flag\"' $compiler_flags ${wl}${allow_undefined_flag} '\"\\${wl}$exp_sym_flag:\\$export_symbols\"\n      else\n\t# Determine the default libpath from the value encoded in an empty executable.\n\t_LT_AC_SYS_LIBPATH_AIX\n\t_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'\"$aix_libpath\"\n\t# Warning - without using the other run time loading flags,\n\t# -berok will link without error, but may produce a broken library.\n\t_LT_AC_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok'\n\t_LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok'\n\t# Exported symbols can be pulled into shared objects from archives\n\t_LT_AC_TAGVAR(whole_archive_flag_spec, $1)='$convenience'\n\t_LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes\n\t# This is similar to how AIX traditionally builds its shared libraries.\n\t_LT_AC_TAGVAR(archive_expsym_cmds, $1)=\"\\$CC $shared_flag\"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'\n      fi\n    fi\n    ;;\n\n  beos*)\n    if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then\n      _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported\n      # Joseph Beckenbach <jrb3@best.com> says some releases of gcc\n      # support --undefined.  This deserves some investigation.  FIXME\n      _LT_AC_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'\n    else\n      _LT_AC_TAGVAR(ld_shlibs, $1)=no\n    fi\n    ;;\n\n  chorus*)\n    case $cc_basename in\n      *)\n\t# FIXME: insert proper C++ library support\n\t_LT_AC_TAGVAR(ld_shlibs, $1)=no\n\t;;\n    esac\n    ;;\n\n  cygwin* | mingw* | pw32*)\n    # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless,\n    # as there is no search path for DLLs.\n    _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'\n    _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported\n    _LT_AC_TAGVAR(always_export_symbols, $1)=no\n    _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=yes\n\n    if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then\n      _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'\n      # If the export-symbols file already is a .def file (1st line\n      # is EXPORTS), use it as is; otherwise, prepend...\n      _LT_AC_TAGVAR(archive_expsym_cmds, $1)='if test \"x`$SED 1q $export_symbols`\" = xEXPORTS; then\n\tcp $export_symbols $output_objdir/$soname.def;\n      else\n\techo EXPORTS > $output_objdir/$soname.def;\n\tcat $export_symbols >> $output_objdir/$soname.def;\n      fi~\n      $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'\n    else\n      _LT_AC_TAGVAR(ld_shlibs, $1)=no\n    fi\n  ;;\n      darwin* | rhapsody*)\n        case $host_os in\n        rhapsody* | darwin1.[[012]])\n         _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-undefined ${wl}suppress'\n         ;;\n       *) # Darwin 1.3 on\n         if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then\n           _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-flat_namespace ${wl}-undefined ${wl}suppress'\n         else\n           case ${MACOSX_DEPLOYMENT_TARGET} in\n             10.[[012]])\n               _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-flat_namespace ${wl}-undefined ${wl}suppress'\n               ;;\n             10.*)\n               _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-undefined ${wl}dynamic_lookup'\n               ;;\n           esac\n         fi\n         ;;\n        esac\n      _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no\n      _LT_AC_TAGVAR(hardcode_direct, $1)=no\n      _LT_AC_TAGVAR(hardcode_automatic, $1)=yes\n      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=unsupported\n      _LT_AC_TAGVAR(whole_archive_flag_spec, $1)=''\n      _LT_AC_TAGVAR(link_all_deplibs, $1)=yes\n\n    if test \"$GXX\" = yes ; then\n      lt_int_apple_cc_single_mod=no\n      output_verbose_link_cmd='echo'\n      if $CC -dumpspecs 2>&1 | $EGREP 'single_module' >/dev/null ; then\n       lt_int_apple_cc_single_mod=yes\n      fi\n      if test \"X$lt_int_apple_cc_single_mod\" = Xyes ; then\n       _LT_AC_TAGVAR(archive_cmds, $1)='$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring'\n      else\n          _LT_AC_TAGVAR(archive_cmds, $1)='$CC -r -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring'\n        fi\n        _LT_AC_TAGVAR(module_cmds, $1)='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags'\n        # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds\n          if test \"X$lt_int_apple_cc_single_mod\" = Xyes ; then\n            _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e \"s,#.*,,\" -e \"s,^[    ]*,,\" -e \"s,^\\(..*\\),_&,\" < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'\n          else\n            _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e \"s,#.*,,\" -e \"s,^[    ]*,,\" -e \"s,^\\(..*\\),_&,\" < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -r -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'\n          fi\n            _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e \"s,#.*,,\" -e \"s,^[    ]*,,\" -e \"s,^\\(..*\\),_&,\" < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag  -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'\n      else\n      case $cc_basename in\n        xlc*)\n         output_verbose_link_cmd='echo'\n          _LT_AC_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj ${wl}-single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $verstring'\n          _LT_AC_TAGVAR(module_cmds, $1)='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags'\n          # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds\n          _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e \"s,#.*,,\" -e \"s,^[    ]*,,\" -e \"s,^\\(..*\\),_&,\" < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj ${wl}-single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'\n          _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e \"s,#.*,,\" -e \"s,^[    ]*,,\" -e \"s,^\\(..*\\),_&,\" < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag  -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'\n          ;;\n       *)\n         _LT_AC_TAGVAR(ld_shlibs, $1)=no\n          ;;\n      esac\n      fi\n        ;;\n\n  dgux*)\n    case $cc_basename in\n      ec++*)\n\t# FIXME: insert proper C++ library support\n\t_LT_AC_TAGVAR(ld_shlibs, $1)=no\n\t;;\n      ghcx*)\n\t# Green Hills C++ Compiler\n\t# FIXME: insert proper C++ library support\n\t_LT_AC_TAGVAR(ld_shlibs, $1)=no\n\t;;\n      *)\n\t# FIXME: insert proper C++ library support\n\t_LT_AC_TAGVAR(ld_shlibs, $1)=no\n\t;;\n    esac\n    ;;\n  freebsd[[12]]*)\n    # C++ shared libraries reported to be fairly broken before switch to ELF\n    _LT_AC_TAGVAR(ld_shlibs, $1)=no\n    ;;\n  freebsd-elf*)\n    _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no\n    ;;\n  freebsd* | dragonfly*)\n    # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF\n    # conventions\n    _LT_AC_TAGVAR(ld_shlibs, $1)=yes\n    ;;\n  gnu*)\n    ;;\n  hpux9*)\n    _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'\n    _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:\n    _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'\n    _LT_AC_TAGVAR(hardcode_direct, $1)=yes\n    _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH,\n\t\t\t\t# but as the default\n\t\t\t\t# location of the library.\n\n    case $cc_basename in\n    CC*)\n      # FIXME: insert proper C++ library support\n      _LT_AC_TAGVAR(ld_shlibs, $1)=no\n      ;;\n    aCC*)\n      _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'\n      # Commands to make compiler produce verbose output that lists\n      # what \"hidden\" libraries, object files and flags are used when\n      # linking a shared library.\n      #\n      # There doesn't appear to be a way to prevent this compiler from\n      # explicitly linking system object files so we need to strip them\n      # from the output so that they don't get included in the library\n      # dependencies.\n      output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | grep \"[[-]]L\"`; list=\"\"; for z in $templist; do case $z in conftest.$objext) list=\"$list $z\";; *.$objext);; *) list=\"$list $z\";;esac; done; echo $list'\n      ;;\n    *)\n      if test \"$GXX\" = yes; then\n        _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/$soname~$CC -shared -nostdlib -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'\n      else\n        # FIXME: insert proper C++ library support\n        _LT_AC_TAGVAR(ld_shlibs, $1)=no\n      fi\n      ;;\n    esac\n    ;;\n  hpux10*|hpux11*)\n    if test $with_gnu_ld = no; then\n      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'\n      _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:\n\n      case $host_cpu in\n      hppa*64*|ia64*)\n\t_LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='+b $libdir'\n        ;;\n      *)\n\t_LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'\n        ;;\n      esac\n    fi\n    case $host_cpu in\n    hppa*64*|ia64*)\n      _LT_AC_TAGVAR(hardcode_direct, $1)=no\n      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no\n      ;;\n    *)\n      _LT_AC_TAGVAR(hardcode_direct, $1)=yes\n      _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH,\n\t\t\t\t\t      # but as the default\n\t\t\t\t\t      # location of the library.\n      ;;\n    esac\n\n    case $cc_basename in\n      CC*)\n\t# FIXME: insert proper C++ library support\n\t_LT_AC_TAGVAR(ld_shlibs, $1)=no\n\t;;\n      aCC*)\n\tcase $host_cpu in\n\thppa*64*)\n\t  _LT_AC_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'\n\t  ;;\n\tia64*)\n\t  _LT_AC_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'\n\t  ;;\n\t*)\n\t  _LT_AC_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'\n\t  ;;\n\tesac\n\t# Commands to make compiler produce verbose output that lists\n\t# what \"hidden\" libraries, object files and flags are used when\n\t# linking a shared library.\n\t#\n\t# There doesn't appear to be a way to prevent this compiler from\n\t# explicitly linking system object files so we need to strip them\n\t# from the output so that they don't get included in the library\n\t# dependencies.\n\toutput_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | grep \"\\-L\"`; list=\"\"; for z in $templist; do case $z in conftest.$objext) list=\"$list $z\";; *.$objext);; *) list=\"$list $z\";;esac; done; echo $list'\n\t;;\n      *)\n\tif test \"$GXX\" = yes; then\n\t  if test $with_gnu_ld = no; then\n\t    case $host_cpu in\n\t    hppa*64*)\n\t      _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'\n\t      ;;\n\t    ia64*)\n\t      _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'\n\t      ;;\n\t    *)\n\t      _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'\n\t      ;;\n\t    esac\n\t  fi\n\telse\n\t  # FIXME: insert proper C++ library support\n\t  _LT_AC_TAGVAR(ld_shlibs, $1)=no\n\tfi\n\t;;\n    esac\n    ;;\n  interix3*)\n    _LT_AC_TAGVAR(hardcode_direct, $1)=no\n    _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no\n    _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'\n    _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'\n    # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.\n    # Instead, shared libraries are loaded at an image base (0x10000000 by\n    # default) and relocated if they conflict, which is a slow very memory\n    # consuming and fragmenting process.  To avoid this, we pick a random,\n    # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link\n    # time.  Moving up from 0x10000000 also allows more sbrk(2) space.\n    _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \\* 262144 + 1342177280` -o $lib'\n    _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed \"s,^,_,\" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \\* 262144 + 1342177280` -o $lib'\n    ;;\n  irix5* | irix6*)\n    case $cc_basename in\n      CC*)\n\t# SGI C++\n\t_LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n \"$verstring\" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'\n\n\t# Archives containing C++ object files must be created using\n\t# \"CC -ar\", where \"CC\" is the IRIX C++ compiler.  This is\n\t# necessary to make sure instantiated templates are included\n\t# in the archive.\n\t_LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs'\n\t;;\n      *)\n\tif test \"$GXX\" = yes; then\n\t  if test \"$with_gnu_ld\" = no; then\n\t    _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n \"$verstring\" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'\n\t  else\n\t    _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n \"$verstring\" && echo ${wl}-set_version ${wl}$verstring` -o $lib'\n\t  fi\n\tfi\n\t_LT_AC_TAGVAR(link_all_deplibs, $1)=yes\n\t;;\n    esac\n    _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'\n    _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:\n    ;;\n  linux* | k*bsd*-gnu)\n    case $cc_basename in\n      KCC*)\n\t# Kuck and Associates, Inc. (KAI) C++ Compiler\n\n\t# KCC will only create a shared library if the output file\n\t# ends with \".so\" (or \".sl\" for HP-UX), so rename the library\n\t# to its proper name (with version) after linking.\n\t_LT_AC_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\\''s/\\([[^()0-9A-Za-z{}]]\\)/\\\\\\\\\\1/g'\\''`; templib=`echo $lib | $SED -e \"s/\\${tempext}\\..*/.so/\"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \\$templib; mv \\$templib $lib'\n\t_LT_AC_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\\''s/\\([[^()0-9A-Za-z{}]]\\)/\\\\\\\\\\1/g'\\''`; templib=`echo $lib | $SED -e \"s/\\${tempext}\\..*/.so/\"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \\$templib ${wl}-retain-symbols-file,$export_symbols; mv \\$templib $lib'\n\t# Commands to make compiler produce verbose output that lists\n\t# what \"hidden\" libraries, object files and flags are used when\n\t# linking a shared library.\n\t#\n\t# There doesn't appear to be a way to prevent this compiler from\n\t# explicitly linking system object files so we need to strip them\n\t# from the output so that they don't get included in the library\n\t# dependencies.\n\toutput_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | grep \"ld\"`; rm -f libconftest$shared_ext; list=\"\"; for z in $templist; do case $z in conftest.$objext) list=\"$list $z\";; *.$objext);; *) list=\"$list $z\";;esac; done; echo $list'\n\n\t_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath,$libdir'\n\t_LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'\n\n\t# Archives containing C++ object files must be created using\n\t# \"CC -Bstatic\", where \"CC\" is the KAI C++ compiler.\n\t_LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs'\n\t;;\n      icpc*)\n\t# Intel C++\n\twith_gnu_ld=yes\n\t# version 8.0 and above of icpc choke on multiply defined symbols\n\t# if we add $predep_objects and $postdep_objects, however 7.1 and\n\t# earlier do not add the objects themselves.\n\tcase `$CC -V 2>&1` in\n\t*\"Version 7.\"*)\n  \t  _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'\n  \t  _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'\n\t  ;;\n\t*)  # Version 8.0 or newer\n\t  tmp_idyn=\n\t  case $host_cpu in\n\t    ia64*) tmp_idyn=' -i_dynamic';;\n\t  esac\n  \t  _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared'\"$tmp_idyn\"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'\n\t  _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared'\"$tmp_idyn\"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'\n\t  ;;\n\tesac\n\t_LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no\n\t_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'\n\t_LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'\n\t_LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive'\n\t;;\n      pgCC*)\n        # Portland Group C++ compiler\n\t_LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib'\n  \t_LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib'\n\n\t_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir'\n\t_LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'\n\t_LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\\\"\\\"; do test  -n \\\"$conv\\\" && new_convenience=\\\"$new_convenience,$conv\\\"; done; $echo \\\"$new_convenience\\\"` ${wl}--no-whole-archive'\n        ;;\n      cxx*)\n\t# Compaq C++\n\t_LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'\n\t_LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname  -o $lib ${wl}-retain-symbols-file $wl$export_symbols'\n\n\trunpath_var=LD_RUN_PATH\n\t_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'\n\t_LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:\n\n\t# Commands to make compiler produce verbose output that lists\n\t# what \"hidden\" libraries, object files and flags are used when\n\t# linking a shared library.\n\t#\n\t# There doesn't appear to be a way to prevent this compiler from\n\t# explicitly linking system object files so we need to strip them\n\t# from the output so that they don't get included in the library\n\t# dependencies.\n\toutput_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep \"ld\"`; templist=`echo $templist | $SED \"s/\\(^.*ld.*\\)\\( .*ld .*$\\)/\\1/\"`; list=\"\"; for z in $templist; do case $z in conftest.$objext) list=\"$list $z\";; *.$objext);; *) list=\"$list $z\";;esac; done; echo $list'\n\t;;\n    esac\n    ;;\n  lynxos*)\n    # FIXME: insert proper C++ library support\n    _LT_AC_TAGVAR(ld_shlibs, $1)=no\n    ;;\n  m88k*)\n    # FIXME: insert proper C++ library support\n    _LT_AC_TAGVAR(ld_shlibs, $1)=no\n    ;;\n  mvs*)\n    case $cc_basename in\n      cxx*)\n\t# FIXME: insert proper C++ library support\n\t_LT_AC_TAGVAR(ld_shlibs, $1)=no\n\t;;\n      *)\n\t# FIXME: insert proper C++ library support\n\t_LT_AC_TAGVAR(ld_shlibs, $1)=no\n\t;;\n    esac\n    ;;\n  netbsd* | netbsdelf*-gnu)\n    if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then\n      _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable  -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags'\n      wlarc=\n      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'\n      _LT_AC_TAGVAR(hardcode_direct, $1)=yes\n      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no\n    fi\n    # Workaround some broken pre-1.5 toolchains\n    output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep conftest.$objext | $SED -e \"s:-lgcc -lc -lgcc::\"'\n    ;;\n  openbsd2*)\n    # C++ shared libraries are fairly broken\n    _LT_AC_TAGVAR(ld_shlibs, $1)=no\n    ;;\n  openbsd*)\n    _LT_AC_TAGVAR(hardcode_direct, $1)=yes\n    _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no\n    _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'\n    _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'\n    if test -z \"`echo __ELF__ | $CC -E - | grep __ELF__`\" || test \"$host_os-$host_cpu\" = \"openbsd2.8-powerpc\"; then\n      _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib'\n      _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'\n      _LT_AC_TAGVAR(whole_archive_flag_spec, $1)=\"$wlarc\"'--whole-archive$convenience '\"$wlarc\"'--no-whole-archive'\n    fi\n    output_verbose_link_cmd='echo'\n    ;;\n  osf3*)\n    case $cc_basename in\n      KCC*)\n\t# Kuck and Associates, Inc. (KAI) C++ Compiler\n\n\t# KCC will only create a shared library if the output file\n\t# ends with \".so\" (or \".sl\" for HP-UX), so rename the library\n\t# to its proper name (with version) after linking.\n\t_LT_AC_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\\''s/\\([[^()0-9A-Za-z{}]]\\)/\\\\\\\\\\1/g'\\''`; templib=`echo $lib | $SED -e \"s/\\${tempext}\\..*/.so/\"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \\$templib; mv \\$templib $lib'\n\n\t_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'\n\t_LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:\n\n\t# Archives containing C++ object files must be created using\n\t# \"CC -Bstatic\", where \"CC\" is the KAI C++ compiler.\n\t_LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs'\n\n\t;;\n      RCC*)\n\t# Rational C++ 2.4.1\n\t# FIXME: insert proper C++ library support\n\t_LT_AC_TAGVAR(ld_shlibs, $1)=no\n\t;;\n      cxx*)\n\t_LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\\*'\n\t_LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n \"$verstring\" && echo ${wl}-set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'\n\n\t_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'\n\t_LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:\n\n\t# Commands to make compiler produce verbose output that lists\n\t# what \"hidden\" libraries, object files and flags are used when\n\t# linking a shared library.\n\t#\n\t# There doesn't appear to be a way to prevent this compiler from\n\t# explicitly linking system object files so we need to strip them\n\t# from the output so that they don't get included in the library\n\t# dependencies.\n\toutput_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep \"ld\" | grep -v \"ld:\"`; templist=`echo $templist | $SED \"s/\\(^.*ld.*\\)\\( .*ld.*$\\)/\\1/\"`; list=\"\"; for z in $templist; do case $z in conftest.$objext) list=\"$list $z\";; *.$objext);; *) list=\"$list $z\";;esac; done; echo $list'\n\t;;\n      *)\n\tif test \"$GXX\" = yes && test \"$with_gnu_ld\" = no; then\n\t  _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\\*'\n\t  _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n \"$verstring\" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'\n\n\t  _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'\n\t  _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:\n\n\t  # Commands to make compiler produce verbose output that lists\n\t  # what \"hidden\" libraries, object files and flags are used when\n\t  # linking a shared library.\n\t  output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep \"\\-L\"'\n\n\telse\n\t  # FIXME: insert proper C++ library support\n\t  _LT_AC_TAGVAR(ld_shlibs, $1)=no\n\tfi\n\t;;\n    esac\n    ;;\n  osf4* | osf5*)\n    case $cc_basename in\n      KCC*)\n\t# Kuck and Associates, Inc. (KAI) C++ Compiler\n\n\t# KCC will only create a shared library if the output file\n\t# ends with \".so\" (or \".sl\" for HP-UX), so rename the library\n\t# to its proper name (with version) after linking.\n\t_LT_AC_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\\''s/\\([[^()0-9A-Za-z{}]]\\)/\\\\\\\\\\1/g'\\''`; templib=`echo $lib | $SED -e \"s/\\${tempext}\\..*/.so/\"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \\$templib; mv \\$templib $lib'\n\n\t_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'\n\t_LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:\n\n\t# Archives containing C++ object files must be created using\n\t# the KAI C++ compiler.\n\t_LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs'\n\t;;\n      RCC*)\n\t# Rational C++ 2.4.1\n\t# FIXME: insert proper C++ library support\n\t_LT_AC_TAGVAR(ld_shlibs, $1)=no\n\t;;\n      cxx*)\n\t_LT_AC_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \\*'\n\t_LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n \"$verstring\" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'\n\t_LT_AC_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf \"%s %s\\\\n\" -exported_symbol \"\\$i\" >> $lib.exp; done~\n\t  echo \"-hidden\">> $lib.exp~\n\t  $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname -Wl,-input -Wl,$lib.exp  `test -n \"$verstring\" && echo -set_version\t$verstring` -update_registry ${output_objdir}/so_locations -o $lib~\n\t  $rm $lib.exp'\n\n\t_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'\n\t_LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:\n\n\t# Commands to make compiler produce verbose output that lists\n\t# what \"hidden\" libraries, object files and flags are used when\n\t# linking a shared library.\n\t#\n\t# There doesn't appear to be a way to prevent this compiler from\n\t# explicitly linking system object files so we need to strip them\n\t# from the output so that they don't get included in the library\n\t# dependencies.\n\toutput_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep \"ld\" | grep -v \"ld:\"`; templist=`echo $templist | $SED \"s/\\(^.*ld.*\\)\\( .*ld.*$\\)/\\1/\"`; list=\"\"; for z in $templist; do case $z in conftest.$objext) list=\"$list $z\";; *.$objext);; *) list=\"$list $z\";;esac; done; echo $list'\n\t;;\n      *)\n\tif test \"$GXX\" = yes && test \"$with_gnu_ld\" = no; then\n\t  _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\\*'\n\t _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n \"$verstring\" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'\n\n\t  _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'\n\t  _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:\n\n\t  # Commands to make compiler produce verbose output that lists\n\t  # what \"hidden\" libraries, object files and flags are used when\n\t  # linking a shared library.\n\t  output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep \"\\-L\"'\n\n\telse\n\t  # FIXME: insert proper C++ library support\n\t  _LT_AC_TAGVAR(ld_shlibs, $1)=no\n\tfi\n\t;;\n    esac\n    ;;\n  psos*)\n    # FIXME: insert proper C++ library support\n    _LT_AC_TAGVAR(ld_shlibs, $1)=no\n    ;;\n  sunos4*)\n    case $cc_basename in\n      CC*)\n\t# Sun C++ 4.x\n\t# FIXME: insert proper C++ library support\n\t_LT_AC_TAGVAR(ld_shlibs, $1)=no\n\t;;\n      lcc*)\n\t# Lucid\n\t# FIXME: insert proper C++ library support\n\t_LT_AC_TAGVAR(ld_shlibs, $1)=no\n\t;;\n      *)\n\t# FIXME: insert proper C++ library support\n\t_LT_AC_TAGVAR(ld_shlibs, $1)=no\n\t;;\n    esac\n    ;;\n  solaris*)\n    case $cc_basename in\n      CC*)\n\t# Sun C++ 4.2, 5.x and Centerline C++\n        _LT_AC_TAGVAR(archive_cmds_need_lc,$1)=yes\n\t_LT_AC_TAGVAR(no_undefined_flag, $1)=' -zdefs'\n\t_LT_AC_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag}  -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'\n\t_LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo \"{ global:\" > $lib.exp~cat $export_symbols | $SED -e \"s/\\(.*\\)/\\1;/\" >> $lib.exp~$echo \"local: *; };\" >> $lib.exp~\n\t$CC -G${allow_undefined_flag}  ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp'\n\n\t_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'\n\t_LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no\n\tcase $host_os in\n\t  solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;\n\t  *)\n\t    # The C++ compiler is used as linker so we must use $wl\n\t    # flag to pass the commands to the underlying system\n\t    # linker. We must also pass each convience library through\n\t    # to the system linker between allextract/defaultextract.\n\t    # The C++ compiler will combine linker options so we\n\t    # cannot just pass the convience library names through\n\t    # without $wl.\n\t    # Supported since Solaris 2.6 (maybe 2.5.1?)\n\t    _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract`for conv in $convenience\\\"\\\"; do test -n \\\"$conv\\\" && new_convenience=\\\"$new_convenience,$conv\\\"; done; $echo \\\"$new_convenience\\\"` ${wl}-z ${wl}defaultextract'\n\t    ;;\n\tesac\n\t_LT_AC_TAGVAR(link_all_deplibs, $1)=yes\n\n\toutput_verbose_link_cmd='echo'\n\n\t# Archives containing C++ object files must be created using\n\t# \"CC -xar\", where \"CC\" is the Sun C++ compiler.  This is\n\t# necessary to make sure instantiated templates are included\n\t# in the archive.\n\t_LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs'\n\t;;\n      gcx*)\n\t# Green Hills C++ Compiler\n\t_LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'\n\n\t# The C++ compiler must be used to create the archive.\n\t_LT_AC_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs'\n\t;;\n      *)\n\t# GNU C++ compiler with Solaris linker\n\tif test \"$GXX\" = yes && test \"$with_gnu_ld\" = no; then\n\t  _LT_AC_TAGVAR(no_undefined_flag, $1)=' ${wl}-z ${wl}defs'\n\t  if $CC --version | grep -v '^2\\.7' > /dev/null; then\n\t    _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'\n\t    _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo \"{ global:\" > $lib.exp~cat $export_symbols | $SED -e \"s/\\(.*\\)/\\1;/\" >> $lib.exp~$echo \"local: *; };\" >> $lib.exp~\n\t\t$CC -shared -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp'\n\n\t    # Commands to make compiler produce verbose output that lists\n\t    # what \"hidden\" libraries, object files and flags are used when\n\t    # linking a shared library.\n\t    output_verbose_link_cmd=\"$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep \\\"\\-L\\\"\"\n\t  else\n\t    # g++ 2.7 appears to require `-G' NOT `-shared' on this\n\t    # platform.\n\t    _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'\n\t    _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo \"{ global:\" > $lib.exp~cat $export_symbols | $SED -e \"s/\\(.*\\)/\\1;/\" >> $lib.exp~$echo \"local: *; };\" >> $lib.exp~\n\t\t$CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp'\n\n\t    # Commands to make compiler produce verbose output that lists\n\t    # what \"hidden\" libraries, object files and flags are used when\n\t    # linking a shared library.\n\t    output_verbose_link_cmd=\"$CC -G $CFLAGS -v conftest.$objext 2>&1 | grep \\\"\\-L\\\"\"\n\t  fi\n\n\t  _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $wl$libdir'\n\tfi\n\t;;\n    esac\n    ;;\n  sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*)\n    _LT_AC_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'\n    _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no\n    _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no\n    runpath_var='LD_RUN_PATH'\n\n    case $cc_basename in\n      CC*)\n\t_LT_AC_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'\n\t_LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'\n\t;;\n      *)\n\t_LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'\n\t_LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'\n\t;;\n    esac\n    ;;\n  sysv5* | sco3.2v5* | sco5v6*)\n    # Note: We can NOT use -z defs as we might desire, because we do not\n    # link with -lc, and that would cause any symbols used from libc to\n    # always be unresolved, which means just about no library would\n    # ever link correctly.  If we're not using GNU ld we use -z text\n    # though, which does catch some bad symbols but isn't as heavy-handed\n    # as -z defs.\n    # For security reasons, it is highly recommended that you always\n    # use absolute paths for naming shared libraries, and exclude the\n    # DT_RUNPATH tag from executables and libraries.  But doing so\n    # requires that you compile everything twice, which is a pain.\n    # So that behaviour is only enabled if SCOABSPATH is set to a\n    # non-empty value in the environment.  Most likely only useful for\n    # creating official distributions of packages.\n    # This is a hack until libtool officially supports absolute path\n    # names for shared libraries.\n    _LT_AC_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'\n    _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs'\n    _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no\n    _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no\n    _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='`test -z \"$SCOABSPATH\" && echo ${wl}-R,$libdir`'\n    _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=':'\n    _LT_AC_TAGVAR(link_all_deplibs, $1)=yes\n    _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport'\n    runpath_var='LD_RUN_PATH'\n\n    case $cc_basename in\n      CC*)\n\t_LT_AC_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,\\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'\n\t_LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,\\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'\n\t;;\n      *)\n\t_LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,\\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'\n\t_LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,\\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'\n\t;;\n    esac\n    ;;\n  tandem*)\n    case $cc_basename in\n      NCC*)\n\t# NonStop-UX NCC 3.20\n\t# FIXME: insert proper C++ library support\n\t_LT_AC_TAGVAR(ld_shlibs, $1)=no\n\t;;\n      *)\n\t# FIXME: insert proper C++ library support\n\t_LT_AC_TAGVAR(ld_shlibs, $1)=no\n\t;;\n    esac\n    ;;\n  vxworks*)\n    # FIXME: insert proper C++ library support\n    _LT_AC_TAGVAR(ld_shlibs, $1)=no\n    ;;\n  *)\n    # FIXME: insert proper C++ library support\n    _LT_AC_TAGVAR(ld_shlibs, $1)=no\n    ;;\nesac\nAC_MSG_RESULT([$_LT_AC_TAGVAR(ld_shlibs, $1)])\ntest \"$_LT_AC_TAGVAR(ld_shlibs, $1)\" = no && can_build_shared=no\n\n_LT_AC_TAGVAR(GCC, $1)=\"$GXX\"\n_LT_AC_TAGVAR(LD, $1)=\"$LD\"\n\nAC_LIBTOOL_POSTDEP_PREDEP($1)\nAC_LIBTOOL_PROG_COMPILER_PIC($1)\nAC_LIBTOOL_PROG_CC_C_O($1)\nAC_LIBTOOL_SYS_HARD_LINK_LOCKS($1)\nAC_LIBTOOL_PROG_LD_SHLIBS($1)\nAC_LIBTOOL_SYS_DYNAMIC_LINKER($1)\nAC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH($1)\n\nAC_LIBTOOL_CONFIG($1)\n\nAC_LANG_POP\nCC=$lt_save_CC\nLDCXX=$LD\nLD=$lt_save_LD\nGCC=$lt_save_GCC\nwith_gnu_ldcxx=$with_gnu_ld\nwith_gnu_ld=$lt_save_with_gnu_ld\nlt_cv_path_LDCXX=$lt_cv_path_LD\nlt_cv_path_LD=$lt_save_path_LD\nlt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld\nlt_cv_prog_gnu_ld=$lt_save_with_gnu_ld\n])# AC_LIBTOOL_LANG_CXX_CONFIG\n\n# AC_LIBTOOL_POSTDEP_PREDEP([TAGNAME])\n# ------------------------------------\n# Figure out \"hidden\" library dependencies from verbose\n# compiler output when linking a shared library.\n# Parse the compiler output and extract the necessary\n# objects, libraries and library flags.\nAC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP],[\ndnl we can't use the lt_simple_compile_test_code here,\ndnl because it contains code intended for an executable,\ndnl not a library.  It's possible we should let each\ndnl tag define a new lt_????_link_test_code variable,\ndnl but it's only used here...\nifelse([$1],[],[cat > conftest.$ac_ext <<EOF\nint a;\nvoid foo (void) { a = 0; }\nEOF\n],[$1],[CXX],[cat > conftest.$ac_ext <<EOF\nclass Foo\n{\npublic:\n  Foo (void) { a = 0; }\nprivate:\n  int a;\n};\nEOF\n],[$1],[F77],[cat > conftest.$ac_ext <<EOF\n      subroutine foo\n      implicit none\n      integer*4 a\n      a=0\n      return\n      end\nEOF\n],[$1],[GCJ],[cat > conftest.$ac_ext <<EOF\npublic class foo {\n  private int a;\n  public void bar (void) {\n    a = 0;\n  }\n};\nEOF\n])\ndnl Parse the compiler output and extract the necessary\ndnl objects, libraries and library flags.\nif AC_TRY_EVAL(ac_compile); then\n  # Parse the compiler output and extract the necessary\n  # objects, libraries and library flags.\n\n  # Sentinel used to keep track of whether or not we are before\n  # the conftest object file.\n  pre_test_object_deps_done=no\n\n  # The `*' in the case matches for architectures that use `case' in\n  # $output_verbose_cmd can trigger glob expansion during the loop\n  # eval without this substitution.\n  output_verbose_link_cmd=`$echo \"X$output_verbose_link_cmd\" | $Xsed -e \"$no_glob_subst\"`\n\n  for p in `eval $output_verbose_link_cmd`; do\n    case $p in\n\n    -L* | -R* | -l*)\n       # Some compilers place space between \"-{L,R}\" and the path.\n       # Remove the space.\n       if test $p = \"-L\" \\\n\t  || test $p = \"-R\"; then\n\t prev=$p\n\t continue\n       else\n\t prev=\n       fi\n\n       if test \"$pre_test_object_deps_done\" = no; then\n\t case $p in\n\t -L* | -R*)\n\t   # Internal compiler library paths should come after those\n\t   # provided the user.  The postdeps already come after the\n\t   # user supplied libs so there is no need to process them.\n\t   if test -z \"$_LT_AC_TAGVAR(compiler_lib_search_path, $1)\"; then\n\t     _LT_AC_TAGVAR(compiler_lib_search_path, $1)=\"${prev}${p}\"\n\t   else\n\t     _LT_AC_TAGVAR(compiler_lib_search_path, $1)=\"${_LT_AC_TAGVAR(compiler_lib_search_path, $1)} ${prev}${p}\"\n\t   fi\n\t   ;;\n\t # The \"-l\" case would never come before the object being\n\t # linked, so don't bother handling this case.\n\t esac\n       else\n\t if test -z \"$_LT_AC_TAGVAR(postdeps, $1)\"; then\n\t   _LT_AC_TAGVAR(postdeps, $1)=\"${prev}${p}\"\n\t else\n\t   _LT_AC_TAGVAR(postdeps, $1)=\"${_LT_AC_TAGVAR(postdeps, $1)} ${prev}${p}\"\n\t fi\n       fi\n       ;;\n\n    *.$objext)\n       # This assumes that the test object file only shows up\n       # once in the compiler output.\n       if test \"$p\" = \"conftest.$objext\"; then\n\t pre_test_object_deps_done=yes\n\t continue\n       fi\n\n       if test \"$pre_test_object_deps_done\" = no; then\n\t if test -z \"$_LT_AC_TAGVAR(predep_objects, $1)\"; then\n\t   _LT_AC_TAGVAR(predep_objects, $1)=\"$p\"\n\t else\n\t   _LT_AC_TAGVAR(predep_objects, $1)=\"$_LT_AC_TAGVAR(predep_objects, $1) $p\"\n\t fi\n       else\n\t if test -z \"$_LT_AC_TAGVAR(postdep_objects, $1)\"; then\n\t   _LT_AC_TAGVAR(postdep_objects, $1)=\"$p\"\n\t else\n\t   _LT_AC_TAGVAR(postdep_objects, $1)=\"$_LT_AC_TAGVAR(postdep_objects, $1) $p\"\n\t fi\n       fi\n       ;;\n\n    *) ;; # Ignore the rest.\n\n    esac\n  done\n\n  # Clean up.\n  rm -f a.out a.exe\nelse\n  echo \"libtool.m4: error: problem compiling $1 test program\"\nfi\n\n$rm -f confest.$objext\n\n# PORTME: override above test on systems where it is broken\nifelse([$1],[CXX],\n[case $host_os in\ninterix3*)\n  # Interix 3.5 installs completely hosed .la files for C++, so rather than\n  # hack all around it, let's just trust \"g++\" to DTRT.\n  _LT_AC_TAGVAR(predep_objects,$1)=\n  _LT_AC_TAGVAR(postdep_objects,$1)=\n  _LT_AC_TAGVAR(postdeps,$1)=\n  ;;\n\nsolaris*)\n  case $cc_basename in\n  CC*)\n    # Adding this requires a known-good setup of shared libraries for\n    # Sun compiler versions before 5.6, else PIC objects from an old\n    # archive will be linked into the output, leading to subtle bugs.\n    _LT_AC_TAGVAR(postdeps,$1)='-lCstd -lCrun'\n    ;;\n  esac\n  ;;\nesac\n])\n\ncase \" $_LT_AC_TAGVAR(postdeps, $1) \" in\n*\" -lc \"*) _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no ;;\nesac\n])# AC_LIBTOOL_POSTDEP_PREDEP\n\n# AC_LIBTOOL_LANG_F77_CONFIG\n# --------------------------\n# Ensure that the configuration vars for the C compiler are\n# suitably defined.  Those variables are subsequently used by\n# AC_LIBTOOL_CONFIG to write the compiler configuration to `libtool'.\nAC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG], [_LT_AC_LANG_F77_CONFIG(F77)])\nAC_DEFUN([_LT_AC_LANG_F77_CONFIG],\n[AC_REQUIRE([AC_PROG_F77])\nAC_LANG_PUSH(Fortran 77)\n\n_LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no\n_LT_AC_TAGVAR(allow_undefined_flag, $1)=\n_LT_AC_TAGVAR(always_export_symbols, $1)=no\n_LT_AC_TAGVAR(archive_expsym_cmds, $1)=\n_LT_AC_TAGVAR(export_dynamic_flag_spec, $1)=\n_LT_AC_TAGVAR(hardcode_direct, $1)=no\n_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)=\n_LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=\n_LT_AC_TAGVAR(hardcode_libdir_separator, $1)=\n_LT_AC_TAGVAR(hardcode_minus_L, $1)=no\n_LT_AC_TAGVAR(hardcode_automatic, $1)=no\n_LT_AC_TAGVAR(module_cmds, $1)=\n_LT_AC_TAGVAR(module_expsym_cmds, $1)=\n_LT_AC_TAGVAR(link_all_deplibs, $1)=unknown\n_LT_AC_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds\n_LT_AC_TAGVAR(no_undefined_flag, $1)=\n_LT_AC_TAGVAR(whole_archive_flag_spec, $1)=\n_LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=no\n\n# Source file extension for f77 test sources.\nac_ext=f\n\n# Object file extension for compiled f77 test sources.\nobjext=o\n_LT_AC_TAGVAR(objext, $1)=$objext\n\n# Code to be used in simple compile tests\nlt_simple_compile_test_code=\"      subroutine t\\n      return\\n      end\\n\"\n\n# Code to be used in simple link tests\nlt_simple_link_test_code=\"      program t\\n      end\\n\"\n\n# ltmain only uses $CC for tagged configurations so make sure $CC is set.\n_LT_AC_SYS_COMPILER\n\n# save warnings/boilerplate of simple test code\n_LT_COMPILER_BOILERPLATE\n_LT_LINKER_BOILERPLATE\n\n# Allow CC to be a program name with arguments.\nlt_save_CC=\"$CC\"\nCC=${F77-\"f77\"}\ncompiler=$CC\n_LT_AC_TAGVAR(compiler, $1)=$CC\n_LT_CC_BASENAME([$compiler])\n\nAC_MSG_CHECKING([if libtool supports shared libraries])\nAC_MSG_RESULT([$can_build_shared])\n\nAC_MSG_CHECKING([whether to build shared libraries])\ntest \"$can_build_shared\" = \"no\" && enable_shared=no\n\n# On AIX, shared libraries and static libraries use the same namespace, and\n# are all built from PIC.\ncase $host_os in\naix3*)\n  test \"$enable_shared\" = yes && enable_static=no\n  if test -n \"$RANLIB\"; then\n    archive_cmds=\"$archive_cmds~\\$RANLIB \\$lib\"\n    postinstall_cmds='$RANLIB $lib'\n  fi\n  ;;\naix4* | aix5*)\n  if test \"$host_cpu\" != ia64 && test \"$aix_use_runtimelinking\" = no ; then\n    test \"$enable_shared\" = yes && enable_static=no\n  fi\n  ;;\nesac\nAC_MSG_RESULT([$enable_shared])\n\nAC_MSG_CHECKING([whether to build static libraries])\n# Make sure either enable_shared or enable_static is yes.\ntest \"$enable_shared\" = yes || enable_static=yes\nAC_MSG_RESULT([$enable_static])\n\n_LT_AC_TAGVAR(GCC, $1)=\"$G77\"\n_LT_AC_TAGVAR(LD, $1)=\"$LD\"\n\nAC_LIBTOOL_PROG_COMPILER_PIC($1)\nAC_LIBTOOL_PROG_CC_C_O($1)\nAC_LIBTOOL_SYS_HARD_LINK_LOCKS($1)\nAC_LIBTOOL_PROG_LD_SHLIBS($1)\nAC_LIBTOOL_SYS_DYNAMIC_LINKER($1)\nAC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH($1)\n\nAC_LIBTOOL_CONFIG($1)\n\nAC_LANG_POP\nCC=\"$lt_save_CC\"\n])# AC_LIBTOOL_LANG_F77_CONFIG\n\n\n# AC_LIBTOOL_LANG_GCJ_CONFIG\n# --------------------------\n# Ensure that the configuration vars for the C compiler are\n# suitably defined.  Those variables are subsequently used by\n# AC_LIBTOOL_CONFIG to write the compiler configuration to `libtool'.\nAC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG], [_LT_AC_LANG_GCJ_CONFIG(GCJ)])\nAC_DEFUN([_LT_AC_LANG_GCJ_CONFIG],\n[AC_LANG_SAVE\n\n# Source file extension for Java test sources.\nac_ext=java\n\n# Object file extension for compiled Java test sources.\nobjext=o\n_LT_AC_TAGVAR(objext, $1)=$objext\n\n# Code to be used in simple compile tests\nlt_simple_compile_test_code=\"class foo {}\\n\"\n\n# Code to be used in simple link tests\nlt_simple_link_test_code='public class conftest { public static void main(String[[]] argv) {}; }\\n'\n\n# ltmain only uses $CC for tagged configurations so make sure $CC is set.\n_LT_AC_SYS_COMPILER\n\n# save warnings/boilerplate of simple test code\n_LT_COMPILER_BOILERPLATE\n_LT_LINKER_BOILERPLATE\n\n# Allow CC to be a program name with arguments.\nlt_save_CC=\"$CC\"\nCC=${GCJ-\"gcj\"}\ncompiler=$CC\n_LT_AC_TAGVAR(compiler, $1)=$CC\n_LT_CC_BASENAME([$compiler])\n\n# GCJ did not exist at the time GCC didn't implicitly link libc in.\n_LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no\n\n_LT_AC_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds\n\nAC_LIBTOOL_PROG_COMPILER_NO_RTTI($1)\nAC_LIBTOOL_PROG_COMPILER_PIC($1)\nAC_LIBTOOL_PROG_CC_C_O($1)\nAC_LIBTOOL_SYS_HARD_LINK_LOCKS($1)\nAC_LIBTOOL_PROG_LD_SHLIBS($1)\nAC_LIBTOOL_SYS_DYNAMIC_LINKER($1)\nAC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH($1)\n\nAC_LIBTOOL_CONFIG($1)\n\nAC_LANG_RESTORE\nCC=\"$lt_save_CC\"\n])# AC_LIBTOOL_LANG_GCJ_CONFIG\n\n\n# AC_LIBTOOL_LANG_RC_CONFIG\n# -------------------------\n# Ensure that the configuration vars for the Windows resource compiler are\n# suitably defined.  Those variables are subsequently used by\n# AC_LIBTOOL_CONFIG to write the compiler configuration to `libtool'.\nAC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG], [_LT_AC_LANG_RC_CONFIG(RC)])\nAC_DEFUN([_LT_AC_LANG_RC_CONFIG],\n[AC_LANG_SAVE\n\n# Source file extension for RC test sources.\nac_ext=rc\n\n# Object file extension for compiled RC test sources.\nobjext=o\n_LT_AC_TAGVAR(objext, $1)=$objext\n\n# Code to be used in simple compile tests\nlt_simple_compile_test_code='sample MENU { MENUITEM \"&Soup\", 100, CHECKED }\\n'\n\n# Code to be used in simple link tests\nlt_simple_link_test_code=\"$lt_simple_compile_test_code\"\n\n# ltmain only uses $CC for tagged configurations so make sure $CC is set.\n_LT_AC_SYS_COMPILER\n\n# save warnings/boilerplate of simple test code\n_LT_COMPILER_BOILERPLATE\n_LT_LINKER_BOILERPLATE\n\n# Allow CC to be a program name with arguments.\nlt_save_CC=\"$CC\"\nCC=${RC-\"windres\"}\ncompiler=$CC\n_LT_AC_TAGVAR(compiler, $1)=$CC\n_LT_CC_BASENAME([$compiler])\n_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes\n\nAC_LIBTOOL_CONFIG($1)\n\nAC_LANG_RESTORE\nCC=\"$lt_save_CC\"\n])# AC_LIBTOOL_LANG_RC_CONFIG\n\n\n# AC_LIBTOOL_CONFIG([TAGNAME])\n# ----------------------------\n# If TAGNAME is not passed, then create an initial libtool script\n# with a default configuration from the untagged config vars.  Otherwise\n# add code to config.status for appending the configuration named by\n# TAGNAME from the matching tagged config vars.\nAC_DEFUN([AC_LIBTOOL_CONFIG],\n[# The else clause should only fire when bootstrapping the\n# libtool distribution, otherwise you forgot to ship ltmain.sh\n# with your package, and you will get complaints that there are\n# no rules to generate ltmain.sh.\nif test -f \"$ltmain\"; then\n  # See if we are running on zsh, and set the options which allow our commands through\n  # without removal of \\ escapes.\n  if test -n \"${ZSH_VERSION+set}\" ; then\n    setopt NO_GLOB_SUBST\n  fi\n  # Now quote all the things that may contain metacharacters while being\n  # careful not to overquote the AC_SUBSTed values.  We take copies of the\n  # variables and quote the copies for generation of the libtool script.\n  for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC LTCFLAGS NM \\\n    SED SHELL STRIP \\\n    libname_spec library_names_spec soname_spec extract_expsyms_cmds \\\n    old_striplib striplib file_magic_cmd finish_cmds finish_eval \\\n    deplibs_check_method reload_flag reload_cmds need_locks \\\n    lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \\\n    lt_cv_sys_global_symbol_to_c_name_address \\\n    sys_lib_search_path_spec sys_lib_dlsearch_path_spec \\\n    old_postinstall_cmds old_postuninstall_cmds \\\n    _LT_AC_TAGVAR(compiler, $1) \\\n    _LT_AC_TAGVAR(CC, $1) \\\n    _LT_AC_TAGVAR(LD, $1) \\\n    _LT_AC_TAGVAR(lt_prog_compiler_wl, $1) \\\n    _LT_AC_TAGVAR(lt_prog_compiler_pic, $1) \\\n    _LT_AC_TAGVAR(lt_prog_compiler_static, $1) \\\n    _LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) \\\n    _LT_AC_TAGVAR(export_dynamic_flag_spec, $1) \\\n    _LT_AC_TAGVAR(thread_safe_flag_spec, $1) \\\n    _LT_AC_TAGVAR(whole_archive_flag_spec, $1) \\\n    _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1) \\\n    _LT_AC_TAGVAR(old_archive_cmds, $1) \\\n    _LT_AC_TAGVAR(old_archive_from_new_cmds, $1) \\\n    _LT_AC_TAGVAR(predep_objects, $1) \\\n    _LT_AC_TAGVAR(postdep_objects, $1) \\\n    _LT_AC_TAGVAR(predeps, $1) \\\n    _LT_AC_TAGVAR(postdeps, $1) \\\n    _LT_AC_TAGVAR(compiler_lib_search_path, $1) \\\n    _LT_AC_TAGVAR(archive_cmds, $1) \\\n    _LT_AC_TAGVAR(archive_expsym_cmds, $1) \\\n    _LT_AC_TAGVAR(postinstall_cmds, $1) \\\n    _LT_AC_TAGVAR(postuninstall_cmds, $1) \\\n    _LT_AC_TAGVAR(old_archive_from_expsyms_cmds, $1) \\\n    _LT_AC_TAGVAR(allow_undefined_flag, $1) \\\n    _LT_AC_TAGVAR(no_undefined_flag, $1) \\\n    _LT_AC_TAGVAR(export_symbols_cmds, $1) \\\n    _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1) \\\n    _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1) \\\n    _LT_AC_TAGVAR(hardcode_libdir_separator, $1) \\\n    _LT_AC_TAGVAR(hardcode_automatic, $1) \\\n    _LT_AC_TAGVAR(module_cmds, $1) \\\n    _LT_AC_TAGVAR(module_expsym_cmds, $1) \\\n    _LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1) \\\n    _LT_AC_TAGVAR(exclude_expsyms, $1) \\\n    _LT_AC_TAGVAR(include_expsyms, $1); do\n\n    case $var in\n    _LT_AC_TAGVAR(old_archive_cmds, $1) | \\\n    _LT_AC_TAGVAR(old_archive_from_new_cmds, $1) | \\\n    _LT_AC_TAGVAR(archive_cmds, $1) | \\\n    _LT_AC_TAGVAR(archive_expsym_cmds, $1) | \\\n    _LT_AC_TAGVAR(module_cmds, $1) | \\\n    _LT_AC_TAGVAR(module_expsym_cmds, $1) | \\\n    _LT_AC_TAGVAR(old_archive_from_expsyms_cmds, $1) | \\\n    _LT_AC_TAGVAR(export_symbols_cmds, $1) | \\\n    extract_expsyms_cmds | reload_cmds | finish_cmds | \\\n    postinstall_cmds | postuninstall_cmds | \\\n    old_postinstall_cmds | old_postuninstall_cmds | \\\n    sys_lib_search_path_spec | sys_lib_dlsearch_path_spec)\n      # Double-quote double-evaled strings.\n      eval \"lt_$var=\\\\\\\"\\`\\$echo \\\"X\\$$var\\\" | \\$Xsed -e \\\"\\$double_quote_subst\\\" -e \\\"\\$sed_quote_subst\\\" -e \\\"\\$delay_variable_subst\\\"\\`\\\\\\\"\"\n      ;;\n    *)\n      eval \"lt_$var=\\\\\\\"\\`\\$echo \\\"X\\$$var\\\" | \\$Xsed -e \\\"\\$sed_quote_subst\\\"\\`\\\\\\\"\"\n      ;;\n    esac\n  done\n\n  case $lt_echo in\n  *'\\[$]0 --fallback-echo\"')\n    lt_echo=`$echo \"X$lt_echo\" | $Xsed -e 's/\\\\\\\\\\\\\\[$]0 --fallback-echo\"[$]/[$]0 --fallback-echo\"/'`\n    ;;\n  esac\n\nifelse([$1], [],\n  [cfgfile=\"${ofile}T\"\n  trap \"$rm \\\"$cfgfile\\\"; exit 1\" 1 2 15\n  $rm -f \"$cfgfile\"\n  AC_MSG_NOTICE([creating $ofile])],\n  [cfgfile=\"$ofile\"])\n\n  cat <<__EOF__ >> \"$cfgfile\"\nifelse([$1], [],\n[#! $SHELL\n\n# `$echo \"$cfgfile\" | sed 's%^.*/%%'` - Provide generalized library-building support services.\n# Generated automatically by $PROGRAM (GNU $PACKAGE $VERSION$TIMESTAMP)\n# NOTE: Changes made to this file will be lost: look at ltmain.sh.\n#\n# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001\n# Free Software Foundation, Inc.\n#\n# This file is part of GNU Libtool:\n# Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996\n#\n# This program is free software; you can redistribute it and/or modify\n# it under the terms of the GNU General Public License as published by\n# the Free Software Foundation; either version 2 of the License, or\n# (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful, but\n# WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n# General Public License for more details.\n#\n# You should have received a copy of the GNU General Public License\n# along with this program; if not, write to the Free Software\n# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n#\n# As a special exception to the GNU General Public License, if you\n# distribute this file as part of a program that contains a\n# configuration script generated by Autoconf, you may include it under\n# the same distribution terms that you use for the rest of that program.\n\n# A sed program that does not truncate output.\nSED=$lt_SED\n\n# Sed that helps us avoid accidentally triggering echo(1) options like -n.\nXsed=\"$SED -e 1s/^X//\"\n\n# The HP-UX ksh and POSIX shell print the target directory to stdout\n# if CDPATH is set.\n(unset CDPATH) >/dev/null 2>&1 && unset CDPATH\n\n# The names of the tagged configurations supported by this script.\navailable_tags=\n\n# ### BEGIN LIBTOOL CONFIG],\n[# ### BEGIN LIBTOOL TAG CONFIG: $tagname])\n\n# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:\n\n# Shell to use when invoking shell scripts.\nSHELL=$lt_SHELL\n\n# Whether or not to build shared libraries.\nbuild_libtool_libs=$enable_shared\n\n# Whether or not to build static libraries.\nbuild_old_libs=$enable_static\n\n# Whether or not to add -lc for building shared libraries.\nbuild_libtool_need_lc=$_LT_AC_TAGVAR(archive_cmds_need_lc, $1)\n\n# Whether or not to disallow shared libs when runtime libs are static\nallow_libtool_libs_with_static_runtimes=$_LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)\n\n# Whether or not to optimize for fast installation.\nfast_install=$enable_fast_install\n\n# The host system.\nhost_alias=$host_alias\nhost=$host\nhost_os=$host_os\n\n# The build system.\nbuild_alias=$build_alias\nbuild=$build\nbuild_os=$build_os\n\n# An echo program that does not interpret backslashes.\necho=$lt_echo\n\n# The archiver.\nAR=$lt_AR\nAR_FLAGS=$lt_AR_FLAGS\n\n# A C compiler.\nLTCC=$lt_LTCC\n\n# LTCC compiler flags.\nLTCFLAGS=$lt_LTCFLAGS\n\n# A language-specific compiler.\nCC=$lt_[]_LT_AC_TAGVAR(compiler, $1)\n\n# Is the compiler the GNU C compiler?\nwith_gcc=$_LT_AC_TAGVAR(GCC, $1)\n\n# An ERE matcher.\nEGREP=$lt_EGREP\n\n# The linker used to build libraries.\nLD=$lt_[]_LT_AC_TAGVAR(LD, $1)\n\n# Whether we need hard or soft links.\nLN_S=$lt_LN_S\n\n# A BSD-compatible nm program.\nNM=$lt_NM\n\n# A symbol stripping program\nSTRIP=$lt_STRIP\n\n# Used to examine libraries when file_magic_cmd begins \"file\"\nMAGIC_CMD=$MAGIC_CMD\n\n# Used on cygwin: DLL creation program.\nDLLTOOL=\"$DLLTOOL\"\n\n# Used on cygwin: object dumper.\nOBJDUMP=\"$OBJDUMP\"\n\n# Used on cygwin: assembler.\nAS=\"$AS\"\n\n# The name of the directory that contains temporary libtool files.\nobjdir=$objdir\n\n# How to create reloadable object files.\nreload_flag=$lt_reload_flag\nreload_cmds=$lt_reload_cmds\n\n# How to pass a linker flag through the compiler.\nwl=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_wl, $1)\n\n# Object file suffix (normally \"o\").\nobjext=\"$ac_objext\"\n\n# Old archive suffix (normally \"a\").\nlibext=\"$libext\"\n\n# Shared library suffix (normally \".so\").\nshrext_cmds='$shrext_cmds'\n\n# Executable file suffix (normally \"\").\nexeext=\"$exeext\"\n\n# Additional compiler flags for building library objects.\npic_flag=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)\npic_mode=$pic_mode\n\n# What is the maximum length of a command?\nmax_cmd_len=$lt_cv_sys_max_cmd_len\n\n# Does compiler simultaneously support -c and -o options?\ncompiler_c_o=$lt_[]_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)\n\n# Must we lock files when doing compilation?\nneed_locks=$lt_need_locks\n\n# Do we need the lib prefix for modules?\nneed_lib_prefix=$need_lib_prefix\n\n# Do we need a version for libraries?\nneed_version=$need_version\n\n# Whether dlopen is supported.\ndlopen_support=$enable_dlopen\n\n# Whether dlopen of programs is supported.\ndlopen_self=$enable_dlopen_self\n\n# Whether dlopen of statically linked programs is supported.\ndlopen_self_static=$enable_dlopen_self_static\n\n# Compiler flag to prevent dynamic linking.\nlink_static_flag=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_static, $1)\n\n# Compiler flag to turn off builtin functions.\nno_builtin_flag=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)\n\n# Compiler flag to allow reflexive dlopens.\nexport_dynamic_flag_spec=$lt_[]_LT_AC_TAGVAR(export_dynamic_flag_spec, $1)\n\n# Compiler flag to generate shared objects directly from archives.\nwhole_archive_flag_spec=$lt_[]_LT_AC_TAGVAR(whole_archive_flag_spec, $1)\n\n# Compiler flag to generate thread-safe objects.\nthread_safe_flag_spec=$lt_[]_LT_AC_TAGVAR(thread_safe_flag_spec, $1)\n\n# Library versioning type.\nversion_type=$version_type\n\n# Format of library name prefix.\nlibname_spec=$lt_libname_spec\n\n# List of archive names.  First name is the real one, the rest are links.\n# The last name is the one that the linker finds with -lNAME.\nlibrary_names_spec=$lt_library_names_spec\n\n# The coded name of the library, if different from the real name.\nsoname_spec=$lt_soname_spec\n\n# Commands used to build and install an old-style archive.\nRANLIB=$lt_RANLIB\nold_archive_cmds=$lt_[]_LT_AC_TAGVAR(old_archive_cmds, $1)\nold_postinstall_cmds=$lt_old_postinstall_cmds\nold_postuninstall_cmds=$lt_old_postuninstall_cmds\n\n# Create an old-style archive from a shared archive.\nold_archive_from_new_cmds=$lt_[]_LT_AC_TAGVAR(old_archive_from_new_cmds, $1)\n\n# Create a temporary old-style archive to link instead of a shared archive.\nold_archive_from_expsyms_cmds=$lt_[]_LT_AC_TAGVAR(old_archive_from_expsyms_cmds, $1)\n\n# Commands used to build and install a shared archive.\narchive_cmds=$lt_[]_LT_AC_TAGVAR(archive_cmds, $1)\narchive_expsym_cmds=$lt_[]_LT_AC_TAGVAR(archive_expsym_cmds, $1)\npostinstall_cmds=$lt_postinstall_cmds\npostuninstall_cmds=$lt_postuninstall_cmds\n\n# Commands used to build a loadable module (assumed same as above if empty)\nmodule_cmds=$lt_[]_LT_AC_TAGVAR(module_cmds, $1)\nmodule_expsym_cmds=$lt_[]_LT_AC_TAGVAR(module_expsym_cmds, $1)\n\n# Commands to strip libraries.\nold_striplib=$lt_old_striplib\nstriplib=$lt_striplib\n\n# Dependencies to place before the objects being linked to create a\n# shared library.\npredep_objects=$lt_[]_LT_AC_TAGVAR(predep_objects, $1)\n\n# Dependencies to place after the objects being linked to create a\n# shared library.\npostdep_objects=$lt_[]_LT_AC_TAGVAR(postdep_objects, $1)\n\n# Dependencies to place before the objects being linked to create a\n# shared library.\npredeps=$lt_[]_LT_AC_TAGVAR(predeps, $1)\n\n# Dependencies to place after the objects being linked to create a\n# shared library.\npostdeps=$lt_[]_LT_AC_TAGVAR(postdeps, $1)\n\n# The library search path used internally by the compiler when linking\n# a shared library.\ncompiler_lib_search_path=$lt_[]_LT_AC_TAGVAR(compiler_lib_search_path, $1)\n\n# Method to check whether dependent libraries are shared objects.\ndeplibs_check_method=$lt_deplibs_check_method\n\n# Command to use when deplibs_check_method == file_magic.\nfile_magic_cmd=$lt_file_magic_cmd\n\n# Flag that allows shared libraries with undefined symbols to be built.\nallow_undefined_flag=$lt_[]_LT_AC_TAGVAR(allow_undefined_flag, $1)\n\n# Flag that forces no undefined symbols.\nno_undefined_flag=$lt_[]_LT_AC_TAGVAR(no_undefined_flag, $1)\n\n# Commands used to finish a libtool library installation in a directory.\nfinish_cmds=$lt_finish_cmds\n\n# Same as above, but a single script fragment to be evaled but not shown.\nfinish_eval=$lt_finish_eval\n\n# Take the output of nm and produce a listing of raw symbols and C names.\nglobal_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe\n\n# Transform the output of nm in a proper C declaration\nglobal_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl\n\n# Transform the output of nm in a C name address pair\nglobal_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address\n\n# This is the shared library runtime path variable.\nrunpath_var=$runpath_var\n\n# This is the shared library path variable.\nshlibpath_var=$shlibpath_var\n\n# Is shlibpath searched before the hard-coded library search path?\nshlibpath_overrides_runpath=$shlibpath_overrides_runpath\n\n# How to hardcode a shared library path into an executable.\nhardcode_action=$_LT_AC_TAGVAR(hardcode_action, $1)\n\n# Whether we should hardcode library paths into libraries.\nhardcode_into_libs=$hardcode_into_libs\n\n# Flag to hardcode \\$libdir into a binary during linking.\n# This must work even if \\$libdir does not exist.\nhardcode_libdir_flag_spec=$lt_[]_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)\n\n# If ld is used when linking, flag to hardcode \\$libdir into\n# a binary during linking. This must work even if \\$libdir does\n# not exist.\nhardcode_libdir_flag_spec_ld=$lt_[]_LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)\n\n# Whether we need a single -rpath flag with a separated argument.\nhardcode_libdir_separator=$lt_[]_LT_AC_TAGVAR(hardcode_libdir_separator, $1)\n\n# Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the\n# resulting binary.\nhardcode_direct=$_LT_AC_TAGVAR(hardcode_direct, $1)\n\n# Set to yes if using the -LDIR flag during linking hardcodes DIR into the\n# resulting binary.\nhardcode_minus_L=$_LT_AC_TAGVAR(hardcode_minus_L, $1)\n\n# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into\n# the resulting binary.\nhardcode_shlibpath_var=$_LT_AC_TAGVAR(hardcode_shlibpath_var, $1)\n\n# Set to yes if building a shared library automatically hardcodes DIR into the library\n# and all subsequent libraries and executables linked against it.\nhardcode_automatic=$_LT_AC_TAGVAR(hardcode_automatic, $1)\n\n# Variables whose values should be saved in libtool wrapper scripts and\n# restored at relink time.\nvariables_saved_for_relink=\"$variables_saved_for_relink\"\n\n# Whether libtool must link a program against all its dependency libraries.\nlink_all_deplibs=$_LT_AC_TAGVAR(link_all_deplibs, $1)\n\n# Compile-time system search path for libraries\nsys_lib_search_path_spec=$lt_sys_lib_search_path_spec\n\n# Run-time system search path for libraries\nsys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec\n\n# Fix the shell variable \\$srcfile for the compiler.\nfix_srcfile_path=\"$_LT_AC_TAGVAR(fix_srcfile_path, $1)\"\n\n# Set to yes if exported symbols are required.\nalways_export_symbols=$_LT_AC_TAGVAR(always_export_symbols, $1)\n\n# The commands to list exported symbols.\nexport_symbols_cmds=$lt_[]_LT_AC_TAGVAR(export_symbols_cmds, $1)\n\n# The commands to extract the exported symbol list from a shared archive.\nextract_expsyms_cmds=$lt_extract_expsyms_cmds\n\n# Symbols that should not be listed in the preloaded symbols.\nexclude_expsyms=$lt_[]_LT_AC_TAGVAR(exclude_expsyms, $1)\n\n# Symbols that must always be exported.\ninclude_expsyms=$lt_[]_LT_AC_TAGVAR(include_expsyms, $1)\n\nifelse([$1],[],\n[# ### END LIBTOOL CONFIG],\n[# ### END LIBTOOL TAG CONFIG: $tagname])\n\n__EOF__\n\nifelse([$1],[], [\n  case $host_os in\n  aix3*)\n    cat <<\\EOF >> \"$cfgfile\"\n\n# AIX sometimes has problems with the GCC collect2 program.  For some\n# reason, if we set the COLLECT_NAMES environment variable, the problems\n# vanish in a puff of smoke.\nif test \"X${COLLECT_NAMES+set}\" != Xset; then\n  COLLECT_NAMES=\n  export COLLECT_NAMES\nfi\nEOF\n    ;;\n  esac\n\n  # We use sed instead of cat because bash on DJGPP gets confused if\n  # if finds mixed CR/LF and LF-only lines.  Since sed operates in\n  # text mode, it properly converts lines to CR/LF.  This bash problem\n  # is reportedly fixed, but why not run on old versions too?\n  sed '$q' \"$ltmain\" >> \"$cfgfile\" || (rm -f \"$cfgfile\"; exit 1)\n\n  mv -f \"$cfgfile\" \"$ofile\" || \\\n    (rm -f \"$ofile\" && cp \"$cfgfile\" \"$ofile\" && rm -f \"$cfgfile\")\n  chmod +x \"$ofile\"\n])\nelse\n  # If there is no Makefile yet, we rely on a make rule to execute\n  # `config.status --recheck' to rerun these tests and create the\n  # libtool script then.\n  ltmain_in=`echo $ltmain | sed -e 's/\\.sh$/.in/'`\n  if test -f \"$ltmain_in\"; then\n    test -f Makefile && make \"$ltmain\"\n  fi\nfi\n])# AC_LIBTOOL_CONFIG\n\n\n# AC_LIBTOOL_PROG_COMPILER_NO_RTTI([TAGNAME])\n# -------------------------------------------\nAC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI],\n[AC_REQUIRE([_LT_AC_SYS_COMPILER])dnl\n\n_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=\n\nif test \"$GCC\" = yes; then\n  _LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin'\n\n  AC_LIBTOOL_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions],\n    lt_cv_prog_compiler_rtti_exceptions,\n    [-fno-rtti -fno-exceptions], [],\n    [_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=\"$_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions\"])\nfi\n])# AC_LIBTOOL_PROG_COMPILER_NO_RTTI\n\n\n# AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE\n# ---------------------------------\nAC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE],\n[AC_REQUIRE([AC_CANONICAL_HOST])\nAC_REQUIRE([AC_PROG_NM])\nAC_REQUIRE([AC_OBJEXT])\n# Check for command to grab the raw symbol name followed by C symbol from nm.\nAC_MSG_CHECKING([command to parse $NM output from $compiler object])\nAC_CACHE_VAL([lt_cv_sys_global_symbol_pipe],\n[\n# These are sane defaults that work on at least a few old systems.\n# [They come from Ultrix.  What could be older than Ultrix?!! ;)]\n\n# Character class describing NM global symbol codes.\nsymcode='[[BCDEGRST]]'\n\n# Regexp to match symbols that can be accessed directly from C.\nsympat='\\([[_A-Za-z]][[_A-Za-z0-9]]*\\)'\n\n# Transform an extracted symbol line into a proper C declaration\nlt_cv_sys_global_symbol_to_cdecl=\"sed -n -e 's/^. .* \\(.*\\)$/extern int \\1;/p'\"\n\n# Transform an extracted symbol line into symbol name and symbol address\nlt_cv_sys_global_symbol_to_c_name_address=\"sed -n -e 's/^: \\([[^ ]]*\\) $/  {\\\\\\\"\\1\\\\\\\", (lt_ptr) 0},/p' -e 's/^$symcode \\([[^ ]]*\\) \\([[^ ]]*\\)$/  {\\\"\\2\\\", (lt_ptr) \\&\\2},/p'\"\n\n# Define system-specific variables.\ncase $host_os in\naix*)\n  symcode='[[BCDT]]'\n  ;;\ncygwin* | mingw* | pw32*)\n  symcode='[[ABCDGISTW]]'\n  ;;\nhpux*) # Its linker distinguishes data from code symbols\n  if test \"$host_cpu\" = ia64; then\n    symcode='[[ABCDEGRST]]'\n  fi\n  lt_cv_sys_global_symbol_to_cdecl=\"sed -n -e 's/^T .* \\(.*\\)$/extern int \\1();/p' -e 's/^$symcode* .* \\(.*\\)$/extern char \\1;/p'\"\n  lt_cv_sys_global_symbol_to_c_name_address=\"sed -n -e 's/^: \\([[^ ]]*\\) $/  {\\\\\\\"\\1\\\\\\\", (lt_ptr) 0},/p' -e 's/^$symcode* \\([[^ ]]*\\) \\([[^ ]]*\\)$/  {\\\"\\2\\\", (lt_ptr) \\&\\2},/p'\"\n  ;;\nlinux* | k*bsd*-gnu)\n  if test \"$host_cpu\" = ia64; then\n    symcode='[[ABCDGIRSTW]]'\n    lt_cv_sys_global_symbol_to_cdecl=\"sed -n -e 's/^T .* \\(.*\\)$/extern int \\1();/p' -e 's/^$symcode* .* \\(.*\\)$/extern char \\1;/p'\"\n    lt_cv_sys_global_symbol_to_c_name_address=\"sed -n -e 's/^: \\([[^ ]]*\\) $/  {\\\\\\\"\\1\\\\\\\", (lt_ptr) 0},/p' -e 's/^$symcode* \\([[^ ]]*\\) \\([[^ ]]*\\)$/  {\\\"\\2\\\", (lt_ptr) \\&\\2},/p'\"\n  fi\n  ;;\nirix* | nonstopux*)\n  symcode='[[BCDEGRST]]'\n  ;;\nosf*)\n  symcode='[[BCDEGQRST]]'\n  ;;\nsolaris*)\n  symcode='[[BDRT]]'\n  ;;\nsco3.2v5*)\n  symcode='[[DT]]'\n  ;;\nsysv4.2uw2*)\n  symcode='[[DT]]'\n  ;;\nsysv5* | sco5v6* | unixware* | OpenUNIX*)\n  symcode='[[ABDT]]'\n  ;;\nsysv4)\n  symcode='[[DFNSTU]]'\n  ;;\nesac\n\n# Handle CRLF in mingw tool chain\nopt_cr=\ncase $build_os in\nmingw*)\n  opt_cr=`echo 'x\\{0,1\\}' | tr x '\\015'` # option cr in regexp\n  ;;\nesac\n\n# If we're using GNU nm, then use its standard symbol codes.\ncase `$NM -V 2>&1` in\n*GNU* | *'with BFD'*)\n  symcode='[[ABCDGIRSTW]]' ;;\nesac\n\n# Try without a prefix undercore, then with it.\nfor ac_symprfx in \"\" \"_\"; do\n\n  # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol.\n  symxfrm=\"\\\\1 $ac_symprfx\\\\2 \\\\2\"\n\n  # Write the raw and C identifiers.\n  lt_cv_sys_global_symbol_pipe=\"sed -n -e 's/^.*[[ \t]]\\($symcode$symcode*\\)[[ \t]][[ \t]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'\"\n\n  # Check to see that the pipe works correctly.\n  pipe_works=no\n\n  rm -f conftest*\n  cat > conftest.$ac_ext <<EOF\n#ifdef __cplusplus\nextern \"C\" {\n#endif\nchar nm_test_var;\nvoid nm_test_func(){}\n#ifdef __cplusplus\n}\n#endif\nint main(){nm_test_var='a';nm_test_func();return(0);}\nEOF\n\n  if AC_TRY_EVAL(ac_compile); then\n    # Now try to grab the symbols.\n    nlist=conftest.nm\n    if AC_TRY_EVAL(NM conftest.$ac_objext \\| $lt_cv_sys_global_symbol_pipe \\> $nlist) && test -s \"$nlist\"; then\n      # Try sorting and uniquifying the output.\n      if sort \"$nlist\" | uniq > \"$nlist\"T; then\n\tmv -f \"$nlist\"T \"$nlist\"\n      else\n\trm -f \"$nlist\"T\n      fi\n\n      # Make sure that we snagged all the symbols we need.\n      if grep ' nm_test_var$' \"$nlist\" >/dev/null; then\n\tif grep ' nm_test_func$' \"$nlist\" >/dev/null; then\n\t  cat <<EOF > conftest.$ac_ext\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\nEOF\n\t  # Now generate the symbol file.\n\t  eval \"$lt_cv_sys_global_symbol_to_cdecl\"' < \"$nlist\" | grep -v main >> conftest.$ac_ext'\n\n\t  cat <<EOF >> conftest.$ac_ext\n#if defined (__STDC__) && __STDC__\n# define lt_ptr_t void *\n#else\n# define lt_ptr_t char *\n# define const\n#endif\n\n/* The mapping between symbol names and symbols. */\nconst struct {\n  const char *name;\n  lt_ptr_t address;\n}\nlt_preloaded_symbols[[]] =\n{\nEOF\n\t  $SED \"s/^$symcode$symcode* \\(.*\\) \\(.*\\)$/  {\\\"\\2\\\", (lt_ptr_t) \\&\\2},/\" < \"$nlist\" | grep -v main >> conftest.$ac_ext\n\t  cat <<\\EOF >> conftest.$ac_ext\n  {0, (lt_ptr_t) 0}\n};\n\n#ifdef __cplusplus\n}\n#endif\nEOF\n\t  # Now try linking the two files.\n\t  mv conftest.$ac_objext conftstm.$ac_objext\n\t  lt_save_LIBS=\"$LIBS\"\n\t  lt_save_CFLAGS=\"$CFLAGS\"\n\t  LIBS=\"conftstm.$ac_objext\"\n\t  CFLAGS=\"$CFLAGS$_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)\"\n\t  if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext}; then\n\t    pipe_works=yes\n\t  fi\n\t  LIBS=\"$lt_save_LIBS\"\n\t  CFLAGS=\"$lt_save_CFLAGS\"\n\telse\n\t  echo \"cannot find nm_test_func in $nlist\" >&AS_MESSAGE_LOG_FD\n\tfi\n      else\n\techo \"cannot find nm_test_var in $nlist\" >&AS_MESSAGE_LOG_FD\n      fi\n    else\n      echo \"cannot run $lt_cv_sys_global_symbol_pipe\" >&AS_MESSAGE_LOG_FD\n    fi\n  else\n    echo \"$progname: failed program was:\" >&AS_MESSAGE_LOG_FD\n    cat conftest.$ac_ext >&5\n  fi\n  rm -f conftest* conftst*\n\n  # Do not use the global_symbol_pipe unless it works.\n  if test \"$pipe_works\" = yes; then\n    break\n  else\n    lt_cv_sys_global_symbol_pipe=\n  fi\ndone\n])\nif test -z \"$lt_cv_sys_global_symbol_pipe\"; then\n  lt_cv_sys_global_symbol_to_cdecl=\nfi\nif test -z \"$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl\"; then\n  AC_MSG_RESULT(failed)\nelse\n  AC_MSG_RESULT(ok)\nfi\n]) # AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE\n\n\n# AC_LIBTOOL_PROG_COMPILER_PIC([TAGNAME])\n# ---------------------------------------\nAC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC],\n[_LT_AC_TAGVAR(lt_prog_compiler_wl, $1)=\n_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=\n_LT_AC_TAGVAR(lt_prog_compiler_static, $1)=\n\nAC_MSG_CHECKING([for $compiler option to produce PIC])\n ifelse([$1],[CXX],[\n  # C++ specific cases for pic, static, wl, etc.\n  if test \"$GXX\" = yes; then\n    _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'\n    _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static'\n\n    case $host_os in\n    aix*)\n      # All AIX code is PIC.\n      if test \"$host_cpu\" = ia64; then\n\t# AIX 5 now supports IA64 processor\n\t_LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'\n      fi\n      ;;\n    amigaos*)\n      # FIXME: we need at least 68020 code to build shared libraries, but\n      # adding the `-m68020' flag to GCC prevents building anything better,\n      # like `-m68040'.\n      _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4'\n      ;;\n    beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)\n      # PIC is the default for these OSes.\n      ;;\n    mingw* | os2* | pw32*)\n      # This hack is so that the source file can tell whether it is being\n      # built for inclusion in a dll (and should export symbols for example).\n      _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'\n      ;;\n    darwin* | rhapsody*)\n      # PIC is the default on this platform\n      # Common symbols not allowed in MH_DYLIB files\n      _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common'\n      ;;\n    *djgpp*)\n      # DJGPP does not support shared libraries at all\n      _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=\n      ;;\n    interix3*)\n      # Interix 3.x gcc -fpic/-fPIC options generate broken code.\n      # Instead, we relocate shared libraries at runtime.\n      ;;\n    sysv4*MP*)\n      if test -d /usr/nec; then\n\t_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic\n      fi\n      ;;\n    hpux*)\n      # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but\n      # not for PA HP-UX.\n      case $host_cpu in\n      hppa*64*|ia64*)\n\t;;\n      *)\n\t_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'\n\t;;\n      esac\n      ;;\n    *)\n      _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'\n      ;;\n    esac\n  else\n    case $host_os in\n      aix4* | aix5*)\n\t# All AIX code is PIC.\n\tif test \"$host_cpu\" = ia64; then\n\t  # AIX 5 now supports IA64 processor\n\t  _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'\n\telse\n\t  _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp'\n\tfi\n\t;;\n      chorus*)\n\tcase $cc_basename in\n\tcxch68*)\n\t  # Green Hills C++ Compiler\n\t  # _LT_AC_TAGVAR(lt_prog_compiler_static, $1)=\"--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a\"\n\t  ;;\n\tesac\n\t;;\n       darwin*)\n         # PIC is the default on this platform\n         # Common symbols not allowed in MH_DYLIB files\n         case $cc_basename in\n           xlc*)\n           _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-qnocommon'\n           _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'\n           ;;\n         esac\n       ;;\n      dgux*)\n\tcase $cc_basename in\n\t  ec++*)\n\t    _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'\n\t    ;;\n\t  ghcx*)\n\t    # Green Hills C++ Compiler\n\t    _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic'\n\t    ;;\n\t  *)\n\t    ;;\n\tesac\n\t;;\n      freebsd* | dragonfly*)\n\t# FreeBSD uses GNU C++\n\t;;\n      hpux9* | hpux10* | hpux11*)\n\tcase $cc_basename in\n\t  CC*)\n\t    _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'\n\t    _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive'\n\t    if test \"$host_cpu\" != ia64; then\n\t      _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='+Z'\n\t    fi\n\t    ;;\n\t  aCC*)\n\t    _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'\n\t    _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive'\n\t    case $host_cpu in\n\t    hppa*64*|ia64*)\n\t      # +Z the default\n\t      ;;\n\t    *)\n\t      _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='+Z'\n\t      ;;\n\t    esac\n\t    ;;\n\t  *)\n\t    ;;\n\tesac\n\t;;\n      interix*)\n\t# This is c89, which is MS Visual C++ (no shared libs)\n\t# Anyone wants to do a port?\n\t;;\n      irix5* | irix6* | nonstopux*)\n\tcase $cc_basename in\n\t  CC*)\n\t    _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'\n\t    _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'\n\t    # CC pic flag -KPIC is the default.\n\t    ;;\n\t  *)\n\t    ;;\n\tesac\n\t;;\n      linux* | k*bsd*-gnu)\n\tcase $cc_basename in\n\t  KCC*)\n\t    # KAI C++ Compiler\n\t    _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,'\n\t    _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'\n\t    ;;\n\t  icpc* | ecpc*)\n\t    # Intel C++\n\t    _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'\n\t    _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'\n\t    _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static'\n\t    ;;\n\t  pgCC*)\n\t    # Portland Group C++ compiler.\n\t    _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'\n\t    _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fpic'\n\t    _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'\n\t    ;;\n\t  cxx*)\n\t    # Compaq C++\n\t    # Make sure the PIC flag is empty.  It appears that all Alpha\n\t    # Linux and Compaq Tru64 Unix objects are PIC.\n\t    _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=\n\t    _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'\n\t    ;;\n\t  *)\n\t    ;;\n\tesac\n\t;;\n      lynxos*)\n\t;;\n      m88k*)\n\t;;\n      mvs*)\n\tcase $cc_basename in\n\t  cxx*)\n\t    _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall'\n\t    ;;\n\t  *)\n\t    ;;\n\tesac\n\t;;\n      netbsd* | netbsdelf*-gnu)\n\t;;\n      osf3* | osf4* | osf5*)\n\tcase $cc_basename in\n\t  KCC*)\n\t    _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,'\n\t    ;;\n\t  RCC*)\n\t    # Rational C++ 2.4.1\n\t    _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic'\n\t    ;;\n\t  cxx*)\n\t    # Digital/Compaq C++\n\t    _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'\n\t    # Make sure the PIC flag is empty.  It appears that all Alpha\n\t    # Linux and Compaq Tru64 Unix objects are PIC.\n\t    _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=\n\t    _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'\n\t    ;;\n\t  *)\n\t    ;;\n\tesac\n\t;;\n      psos*)\n\t;;\n      solaris*)\n\tcase $cc_basename in\n\t  CC*)\n\t    # Sun C++ 4.2, 5.x and Centerline C++\n\t    _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'\n\t    _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'\n\t    _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '\n\t    ;;\n\t  gcx*)\n\t    # Green Hills C++ Compiler\n\t    _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-PIC'\n\t    ;;\n\t  *)\n\t    ;;\n\tesac\n\t;;\n      sunos4*)\n\tcase $cc_basename in\n\t  CC*)\n\t    # Sun C++ 4.x\n\t    _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic'\n\t    _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'\n\t    ;;\n\t  lcc*)\n\t    # Lucid\n\t    _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic'\n\t    ;;\n\t  *)\n\t    ;;\n\tesac\n\t;;\n      tandem*)\n\tcase $cc_basename in\n\t  NCC*)\n\t    # NonStop-UX NCC 3.20\n\t    _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'\n\t    ;;\n\t  *)\n\t    ;;\n\tesac\n\t;;\n      sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)\n\tcase $cc_basename in\n\t  CC*)\n\t    _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'\n\t    _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'\n\t    _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'\n\t    ;;\n\tesac\n\t;;\n      vxworks*)\n\t;;\n      *)\n\t_LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no\n\t;;\n    esac\n  fi\n],\n[\n  if test \"$GCC\" = yes; then\n    _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'\n    _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static'\n\n    case $host_os in\n      aix*)\n      # All AIX code is PIC.\n      if test \"$host_cpu\" = ia64; then\n\t# AIX 5 now supports IA64 processor\n\t_LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'\n      fi\n      ;;\n\n    amigaos*)\n      # FIXME: we need at least 68020 code to build shared libraries, but\n      # adding the `-m68020' flag to GCC prevents building anything better,\n      # like `-m68040'.\n      _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4'\n      ;;\n\n    beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)\n      # PIC is the default for these OSes.\n      ;;\n\n    mingw* | pw32* | os2*)\n      # This hack is so that the source file can tell whether it is being\n      # built for inclusion in a dll (and should export symbols for example).\n      _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'\n      ;;\n\n    darwin* | rhapsody*)\n      # PIC is the default on this platform\n      # Common symbols not allowed in MH_DYLIB files\n      _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common'\n      ;;\n\n    interix3*)\n      # Interix 3.x gcc -fpic/-fPIC options generate broken code.\n      # Instead, we relocate shared libraries at runtime.\n      ;;\n\n    msdosdjgpp*)\n      # Just because we use GCC doesn't mean we suddenly get shared libraries\n      # on systems that don't support them.\n      _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no\n      enable_shared=no\n      ;;\n\n    sysv4*MP*)\n      if test -d /usr/nec; then\n\t_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic\n      fi\n      ;;\n\n    hpux*)\n      # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but\n      # not for PA HP-UX.\n      case $host_cpu in\n      hppa*64*|ia64*)\n\t# +Z the default\n\t;;\n      *)\n\t_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'\n\t;;\n      esac\n      ;;\n\n    *)\n      _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'\n      ;;\n    esac\n  else\n    # PORTME Check for flag to pass linker flags through the system compiler.\n    case $host_os in\n    aix*)\n      _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'\n      if test \"$host_cpu\" = ia64; then\n\t# AIX 5 now supports IA64 processor\n\t_LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'\n      else\n\t_LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp'\n      fi\n      ;;\n      darwin*)\n        # PIC is the default on this platform\n        # Common symbols not allowed in MH_DYLIB files\n       case $cc_basename in\n         xlc*)\n         _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-qnocommon'\n         _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'\n         ;;\n       esac\n       ;;\n\n    mingw* | pw32* | os2*)\n      # This hack is so that the source file can tell whether it is being\n      # built for inclusion in a dll (and should export symbols for example).\n      _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'\n      ;;\n\n    hpux9* | hpux10* | hpux11*)\n      _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'\n      # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but\n      # not for PA HP-UX.\n      case $host_cpu in\n      hppa*64*|ia64*)\n\t# +Z the default\n\t;;\n      *)\n\t_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='+Z'\n\t;;\n      esac\n      # Is there a better lt_prog_compiler_static that works with the bundled CC?\n      _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive'\n      ;;\n\n    irix5* | irix6* | nonstopux*)\n      _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'\n      # PIC (with -KPIC) is the default.\n      _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'\n      ;;\n\n    newsos6)\n      _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'\n      _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'\n      ;;\n\n    linux* | k*bsd*-gnu)\n      case $cc_basename in\n      icc* | ecc*)\n\t_LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'\n\t_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'\n\t_LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static'\n        ;;\n      pgcc* | pgf77* | pgf90* | pgf95*)\n        # Portland Group compilers (*not* the Pentium gcc compiler,\n\t# which looks to be a dead project)\n\t_LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'\n\t_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fpic'\n\t_LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'\n        ;;\n      ccc*)\n        _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'\n        # All Alpha code is PIC.\n        _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'\n        ;;\n      esac\n      ;;\n\n    osf3* | osf4* | osf5*)\n      _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'\n      # All OSF/1 code is PIC.\n      _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'\n      ;;\n\n    solaris*)\n      _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'\n      _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'\n      case $cc_basename in\n      f77* | f90* | f95*)\n\t_LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ';;\n      *)\n\t_LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,';;\n      esac\n      ;;\n\n    sunos4*)\n      _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '\n      _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-PIC'\n      _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'\n      ;;\n\n    sysv4 | sysv4.2uw2* | sysv4.3*)\n      _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'\n      _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'\n      _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'\n      ;;\n\n    sysv4*MP*)\n      if test -d /usr/nec ;then\n\t_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic'\n\t_LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'\n      fi\n      ;;\n\n    sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)\n      _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'\n      _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'\n      _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'\n      ;;\n\n    unicos*)\n      _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'\n      _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no\n      ;;\n\n    uts4*)\n      _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic'\n      _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'\n      ;;\n\n    *)\n      _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no\n      ;;\n    esac\n  fi\n])\nAC_MSG_RESULT([$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)])\n\n#\n# Check to make sure the PIC flag actually works.\n#\nif test -n \"$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)\"; then\n  AC_LIBTOOL_COMPILER_OPTION([if $compiler PIC flag $_LT_AC_TAGVAR(lt_prog_compiler_pic, $1) works],\n    _LT_AC_TAGVAR(lt_prog_compiler_pic_works, $1),\n    [$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)ifelse([$1],[],[ -DPIC],[ifelse([$1],[CXX],[ -DPIC],[])])], [],\n    [case $_LT_AC_TAGVAR(lt_prog_compiler_pic, $1) in\n     \"\" | \" \"*) ;;\n     *) _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=\" $_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)\" ;;\n     esac],\n    [_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=\n     _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no])\nfi\ncase $host_os in\n  # For platforms which do not support PIC, -DPIC is meaningless:\n  *djgpp*)\n    _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=\n    ;;\n  *)\n    _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=\"$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)ifelse([$1],[],[ -DPIC],[ifelse([$1],[CXX],[ -DPIC],[])])\"\n    ;;\nesac\n\n#\n# Check to make sure the static flag actually works.\n#\nwl=$_LT_AC_TAGVAR(lt_prog_compiler_wl, $1) eval lt_tmp_static_flag=\\\"$_LT_AC_TAGVAR(lt_prog_compiler_static, $1)\\\"\nAC_LIBTOOL_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works],\n  _LT_AC_TAGVAR(lt_prog_compiler_static_works, $1),\n  $lt_tmp_static_flag,\n  [],\n  [_LT_AC_TAGVAR(lt_prog_compiler_static, $1)=])\n])\n\n\n# AC_LIBTOOL_PROG_LD_SHLIBS([TAGNAME])\n# ------------------------------------\n# See if the linker supports building shared libraries.\nAC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS],\n[AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries])\nifelse([$1],[CXX],[\n  _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\\''s/.* //'\\'' | sort | uniq > $export_symbols'\n  case $host_os in\n  aix4* | aix5*)\n    # If we're using GNU nm, then we don't want the \"-C\" option.\n    # -C means demangle to AIX nm, but means don't demangle with GNU nm\n    if $NM -V 2>&1 | grep 'GNU' > /dev/null; then\n      _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\\''{ if (((\\[$]2 == \"T\") || (\\[$]2 == \"D\") || (\\[$]2 == \"B\")) && ([substr](\\[$]3,1,1) != \".\")) { print \\[$]3 } }'\\'' | sort -u > $export_symbols'\n    else\n      _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\\''{ if (((\\[$]2 == \"T\") || (\\[$]2 == \"D\") || (\\[$]2 == \"B\")) && ([substr](\\[$]3,1,1) != \".\")) { print \\[$]3 } }'\\'' | sort -u > $export_symbols'\n    fi\n    ;;\n  pw32*)\n    _LT_AC_TAGVAR(export_symbols_cmds, $1)=\"$ltdll_cmds\"\n  ;;\n  cygwin* | mingw*)\n    _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\\''/^[[BCDGRS]] /s/.* \\([[^ ]]*\\)/\\1 DATA/;/^.* __nm__/s/^.* __nm__\\([[^ ]]*\\) [[^ ]]*/\\1 DATA/;/^I /d;/^[[AITW]] /s/.* //'\\'' | sort | uniq > $export_symbols'\n  ;;\n  linux* | k*bsd*-gnu)\n    _LT_AC_TAGVAR(link_all_deplibs, $1)=no\n  ;;\n  *)\n    _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\\''s/.* //'\\'' | sort | uniq > $export_symbols'\n  ;;\n  esac\n],[\n  runpath_var=\n  _LT_AC_TAGVAR(allow_undefined_flag, $1)=\n  _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=no\n  _LT_AC_TAGVAR(archive_cmds, $1)=\n  _LT_AC_TAGVAR(archive_expsym_cmds, $1)=\n  _LT_AC_TAGVAR(old_archive_From_new_cmds, $1)=\n  _LT_AC_TAGVAR(old_archive_from_expsyms_cmds, $1)=\n  _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)=\n  _LT_AC_TAGVAR(whole_archive_flag_spec, $1)=\n  _LT_AC_TAGVAR(thread_safe_flag_spec, $1)=\n  _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)=\n  _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=\n  _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=\n  _LT_AC_TAGVAR(hardcode_direct, $1)=no\n  _LT_AC_TAGVAR(hardcode_minus_L, $1)=no\n  _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=unsupported\n  _LT_AC_TAGVAR(link_all_deplibs, $1)=unknown\n  _LT_AC_TAGVAR(hardcode_automatic, $1)=no\n  _LT_AC_TAGVAR(module_cmds, $1)=\n  _LT_AC_TAGVAR(module_expsym_cmds, $1)=\n  _LT_AC_TAGVAR(always_export_symbols, $1)=no\n  _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\\''s/.* //'\\'' | sort | uniq > $export_symbols'\n  # include_expsyms should be a list of space-separated symbols to be *always*\n  # included in the symbol list\n  _LT_AC_TAGVAR(include_expsyms, $1)=\n  # exclude_expsyms can be an extended regexp of symbols to exclude\n  # it will be wrapped by ` (' and `)$', so one must not match beginning or\n  # end of line.  Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc',\n  # as well as any symbol that contains `d'.\n  _LT_AC_TAGVAR(exclude_expsyms, $1)=\"_GLOBAL_OFFSET_TABLE_\"\n  # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out\n  # platforms (ab)use it in PIC code, but their linkers get confused if\n  # the symbol is explicitly referenced.  Since portable code cannot\n  # rely on this symbol name, it's probably fine to never include it in\n  # preloaded symbol tables.\n  extract_expsyms_cmds=\n  # Just being paranoid about ensuring that cc_basename is set.\n  _LT_CC_BASENAME([$compiler])\n  case $host_os in\n  cygwin* | mingw* | pw32*)\n    # FIXME: the MSVC++ port hasn't been tested in a loooong time\n    # When not using gcc, we currently assume that we are using\n    # Microsoft Visual C++.\n    if test \"$GCC\" != yes; then\n      with_gnu_ld=no\n    fi\n    ;;\n  interix*)\n    # we just hope/assume this is gcc and not c89 (= MSVC++)\n    with_gnu_ld=yes\n    ;;\n  openbsd*)\n    with_gnu_ld=no\n    ;;\n  esac\n\n  _LT_AC_TAGVAR(ld_shlibs, $1)=yes\n  if test \"$with_gnu_ld\" = yes; then\n    # If archive_cmds runs LD, not CC, wlarc should be empty\n    wlarc='${wl}'\n\n    # Set some defaults for GNU ld with shared library support. These\n    # are reset later if shared libraries are not supported. Putting them\n    # here allows them to be overridden if necessary.\n    runpath_var=LD_RUN_PATH\n    _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir'\n    _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'\n    # ancient GNU ld didn't support --whole-archive et. al.\n    if $LD --help 2>&1 | grep 'no-whole-archive' > /dev/null; then\n\t_LT_AC_TAGVAR(whole_archive_flag_spec, $1)=\"$wlarc\"'--whole-archive$convenience '\"$wlarc\"'--no-whole-archive'\n      else\n  \t_LT_AC_TAGVAR(whole_archive_flag_spec, $1)=\n    fi\n    supports_anon_versioning=no\n    case `$LD -v 2>/dev/null` in\n      *\\ [[01]].* | *\\ 2.[[0-9]].* | *\\ 2.10.*) ;; # catch versions < 2.11\n      *\\ 2.11.93.0.2\\ *) supports_anon_versioning=yes ;; # RH7.3 ...\n      *\\ 2.11.92.0.12\\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ...\n      *\\ 2.11.*) ;; # other 2.11 versions\n      *) supports_anon_versioning=yes ;;\n    esac\n\n    # See if GNU ld supports shared libraries.\n    case $host_os in\n    aix3* | aix4* | aix5*)\n      # On AIX/PPC, the GNU linker is very broken\n      if test \"$host_cpu\" != ia64; then\n\t_LT_AC_TAGVAR(ld_shlibs, $1)=no\n\tcat <<EOF 1>&2\n\n*** Warning: the GNU linker, at least up to release 2.9.1, is reported\n*** to be unable to reliably create shared libraries on AIX.\n*** Therefore, libtool is disabling shared libraries support.  If you\n*** really care for shared libraries, you may want to modify your PATH\n*** so that a non-GNU linker is found, and then restart.\n\nEOF\n      fi\n      ;;\n\n    amigaos*)\n      _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/a2ixlibrary.data~$echo \"#define NAME $libname\" > $output_objdir/a2ixlibrary.data~$echo \"#define LIBRARY_ID 1\" >> $output_objdir/a2ixlibrary.data~$echo \"#define VERSION $major\" >> $output_objdir/a2ixlibrary.data~$echo \"#define REVISION $revision\" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'\n      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'\n      _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes\n\n      # Samuel A. Falvo II <kc5tja@dolphin.openprojects.net> reports\n      # that the semantics of dynamic libraries on AmigaOS, at least up\n      # to version 4, is to share data among multiple programs linked\n      # with the same dynamic library.  Since this doesn't match the\n      # behavior of shared libraries on other platforms, we can't use\n      # them.\n      _LT_AC_TAGVAR(ld_shlibs, $1)=no\n      ;;\n\n    beos*)\n      if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then\n\t_LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported\n\t# Joseph Beckenbach <jrb3@best.com> says some releases of gcc\n\t# support --undefined.  This deserves some investigation.  FIXME\n\t_LT_AC_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'\n      else\n\t_LT_AC_TAGVAR(ld_shlibs, $1)=no\n      fi\n      ;;\n\n    cygwin* | mingw* | pw32*)\n      # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless,\n      # as there is no search path for DLLs.\n      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'\n      _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported\n      _LT_AC_TAGVAR(always_export_symbols, $1)=no\n      _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=yes\n      _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\\''/^[[BCDGRS]] /s/.* \\([[^ ]]*\\)/\\1 DATA/'\\'' | $SED -e '\\''/^[[AITW]] /s/.* //'\\'' | sort | uniq > $export_symbols'\n\n      if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then\n        _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'\n\t# If the export-symbols file already is a .def file (1st line\n\t# is EXPORTS), use it as is; otherwise, prepend...\n\t_LT_AC_TAGVAR(archive_expsym_cmds, $1)='if test \"x`$SED 1q $export_symbols`\" = xEXPORTS; then\n\t  cp $export_symbols $output_objdir/$soname.def;\n\telse\n\t  echo EXPORTS > $output_objdir/$soname.def;\n\t  cat $export_symbols >> $output_objdir/$soname.def;\n\tfi~\n\t$CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'\n      else\n\t_LT_AC_TAGVAR(ld_shlibs, $1)=no\n      fi\n      ;;\n\n    interix3*)\n      _LT_AC_TAGVAR(hardcode_direct, $1)=no\n      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no\n      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'\n      _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'\n      # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.\n      # Instead, shared libraries are loaded at an image base (0x10000000 by\n      # default) and relocated if they conflict, which is a slow very memory\n      # consuming and fragmenting process.  To avoid this, we pick a random,\n      # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link\n      # time.  Moving up from 0x10000000 also allows more sbrk(2) space.\n      _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \\* 262144 + 1342177280` -o $lib'\n      _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed \"s,^,_,\" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \\* 262144 + 1342177280` -o $lib'\n      ;;\n\n    linux* | k*bsd*-gnu)\n      if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then\n\ttmp_addflag=\n\tcase $cc_basename,$host_cpu in\n\tpgcc*)\t\t\t\t# Portland Group C compiler\n\t  _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\\\"\\\"; do test  -n \\\"$conv\\\" && new_convenience=\\\"$new_convenience,$conv\\\"; done; $echo \\\"$new_convenience\\\"` ${wl}--no-whole-archive'\n\t  tmp_addflag=' $pic_flag'\n\t  ;;\n\tpgf77* | pgf90* | pgf95*)\t# Portland Group f77 and f90 compilers\n\t  _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\\\"\\\"; do test  -n \\\"$conv\\\" && new_convenience=\\\"$new_convenience,$conv\\\"; done; $echo \\\"$new_convenience\\\"` ${wl}--no-whole-archive'\n\t  tmp_addflag=' $pic_flag -Mnomain' ;;\n\tecc*,ia64* | icc*,ia64*)\t\t# Intel C compiler on ia64\n\t  tmp_addflag=' -i_dynamic' ;;\n\tefc*,ia64* | ifort*,ia64*)\t# Intel Fortran compiler on ia64\n\t  tmp_addflag=' -i_dynamic -nofor_main' ;;\n\tifc* | ifort*)\t\t\t# Intel Fortran compiler\n\t  tmp_addflag=' -nofor_main' ;;\n\tesac\n\t_LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared'\"$tmp_addflag\"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'\n\n\tif test $supports_anon_versioning = yes; then\n\t  _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo \"{ global:\" > $output_objdir/$libname.ver~\n  cat $export_symbols | sed -e \"s/\\(.*\\)/\\1;/\" >> $output_objdir/$libname.ver~\n  $echo \"local: *; };\" >> $output_objdir/$libname.ver~\n\t  $CC -shared'\"$tmp_addflag\"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'\n\tfi\n\t_LT_AC_TAGVAR(link_all_deplibs, $1)=no\n      else\n\t_LT_AC_TAGVAR(ld_shlibs, $1)=no\n      fi\n      ;;\n\n    netbsd* | netbsdelf*-gnu)\n      if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then\n\t_LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'\n\twlarc=\n      else\n\t_LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'\n\t_LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'\n      fi\n      ;;\n\n    solaris*)\n      if $LD -v 2>&1 | grep 'BFD 2\\.8' > /dev/null; then\n\t_LT_AC_TAGVAR(ld_shlibs, $1)=no\n\tcat <<EOF 1>&2\n\n*** Warning: The releases 2.8.* of the GNU linker cannot reliably\n*** create shared libraries on Solaris systems.  Therefore, libtool\n*** is disabling shared libraries support.  We urge you to upgrade GNU\n*** binutils to release 2.9.1 or newer.  Another option is to modify\n*** your PATH or compiler configuration so that the native linker is\n*** used, and then restart.\n\nEOF\n      elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then\n\t_LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'\n\t_LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'\n      else\n\t_LT_AC_TAGVAR(ld_shlibs, $1)=no\n      fi\n      ;;\n\n    sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*)\n      case `$LD -v 2>&1` in\n        *\\ [[01]].* | *\\ 2.[[0-9]].* | *\\ 2.1[[0-5]].*) \n\t_LT_AC_TAGVAR(ld_shlibs, $1)=no\n\tcat <<_LT_EOF 1>&2\n\n*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not\n*** reliably create shared libraries on SCO systems.  Therefore, libtool\n*** is disabling shared libraries support.  We urge you to upgrade GNU\n*** binutils to release 2.16.91.0.3 or newer.  Another option is to modify\n*** your PATH or compiler configuration so that the native linker is\n*** used, and then restart.\n\n_LT_EOF\n\t;;\n\t*)\n\t  if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then\n\t    _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='`test -z \"$SCOABSPATH\" && echo ${wl}-rpath,$libdir`'\n\t    _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\\${SCOABSPATH:+${install_libdir}/}$soname -o $lib'\n\t    _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\\${SCOABSPATH:+${install_libdir}/}$soname,-retain-symbols-file,$export_symbols -o $lib'\n\t  else\n\t    _LT_AC_TAGVAR(ld_shlibs, $1)=no\n\t  fi\n\t;;\n      esac\n      ;;\n\n    sunos4*)\n      _LT_AC_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'\n      wlarc=\n      _LT_AC_TAGVAR(hardcode_direct, $1)=yes\n      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no\n      ;;\n\n    *)\n      if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then\n\t_LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'\n\t_LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'\n      else\n\t_LT_AC_TAGVAR(ld_shlibs, $1)=no\n      fi\n      ;;\n    esac\n\n    if test \"$_LT_AC_TAGVAR(ld_shlibs, $1)\" = no; then\n      runpath_var=\n      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)=\n      _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)=\n      _LT_AC_TAGVAR(whole_archive_flag_spec, $1)=\n    fi\n  else\n    # PORTME fill in a description of your system's linker (not GNU ld)\n    case $host_os in\n    aix3*)\n      _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported\n      _LT_AC_TAGVAR(always_export_symbols, $1)=yes\n      _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname'\n      # Note: this linker hardcodes the directories in LIBPATH if there\n      # are no directories specified by -L.\n      _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes\n      if test \"$GCC\" = yes && test -z \"$lt_prog_compiler_static\"; then\n\t# Neither direct hardcoding nor static linking is supported with a\n\t# broken collect2.\n\t_LT_AC_TAGVAR(hardcode_direct, $1)=unsupported\n      fi\n      ;;\n\n    aix4* | aix5*)\n      if test \"$host_cpu\" = ia64; then\n\t# On IA64, the linker does run time linking by default, so we don't\n\t# have to do anything special.\n\taix_use_runtimelinking=no\n\texp_sym_flag='-Bexport'\n\tno_entry_flag=\"\"\n      else\n\t# If we're using GNU nm, then we don't want the \"-C\" option.\n\t# -C means demangle to AIX nm, but means don't demangle with GNU nm\n\tif $NM -V 2>&1 | grep 'GNU' > /dev/null; then\n\t  _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\\''{ if (((\\[$]2 == \"T\") || (\\[$]2 == \"D\") || (\\[$]2 == \"B\")) && ([substr](\\[$]3,1,1) != \".\")) { print \\[$]3 } }'\\'' | sort -u > $export_symbols'\n\telse\n\t  _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\\''{ if (((\\[$]2 == \"T\") || (\\[$]2 == \"D\") || (\\[$]2 == \"B\")) && ([substr](\\[$]3,1,1) != \".\")) { print \\[$]3 } }'\\'' | sort -u > $export_symbols'\n\tfi\n\taix_use_runtimelinking=no\n\n\t# Test if we are trying to use run time linking or normal\n\t# AIX style linking. If -brtl is somewhere in LDFLAGS, we\n\t# need to do runtime linking.\n\tcase $host_os in aix4.[[23]]|aix4.[[23]].*|aix5*)\n\t  for ld_flag in $LDFLAGS; do\n  \t  if (test $ld_flag = \"-brtl\" || test $ld_flag = \"-Wl,-brtl\"); then\n  \t    aix_use_runtimelinking=yes\n  \t    break\n  \t  fi\n\t  done\n\t  ;;\n\tesac\n\n\texp_sym_flag='-bexport'\n\tno_entry_flag='-bnoentry'\n      fi\n\n      # When large executables or shared objects are built, AIX ld can\n      # have problems creating the table of contents.  If linking a library\n      # or program results in \"error TOC overflow\" add -mminimal-toc to\n      # CXXFLAGS/CFLAGS for g++/gcc.  In the cases where that is not\n      # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.\n\n      _LT_AC_TAGVAR(archive_cmds, $1)=''\n      _LT_AC_TAGVAR(hardcode_direct, $1)=yes\n      _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=':'\n      _LT_AC_TAGVAR(link_all_deplibs, $1)=yes\n\n      if test \"$GCC\" = yes; then\n\tcase $host_os in aix4.[[012]]|aix4.[[012]].*)\n\t# We only want to do this on AIX 4.2 and lower, the check\n\t# below for broken collect2 doesn't work under 4.3+\n\t  collect2name=`${CC} -print-prog-name=collect2`\n\t  if test -f \"$collect2name\" && \\\n  \t   strings \"$collect2name\" | grep resolve_lib_name >/dev/null\n\t  then\n  \t  # We have reworked collect2\n  \t  _LT_AC_TAGVAR(hardcode_direct, $1)=yes\n\t  else\n  \t  # We have old collect2\n  \t  _LT_AC_TAGVAR(hardcode_direct, $1)=unsupported\n  \t  # It fails to find uninstalled libraries when the uninstalled\n  \t  # path is not listed in the libpath.  Setting hardcode_minus_L\n  \t  # to unsupported forces relinking\n  \t  _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes\n  \t  _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'\n  \t  _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=\n\t  fi\n\t  ;;\n\tesac\n\tshared_flag='-shared'\n\tif test \"$aix_use_runtimelinking\" = yes; then\n\t  shared_flag=\"$shared_flag \"'${wl}-G'\n\tfi\n      else\n\t# not using gcc\n\tif test \"$host_cpu\" = ia64; then\n  \t# VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release\n  \t# chokes on -Wl,-G. The following line is correct:\n\t  shared_flag='-G'\n\telse\n\t  if test \"$aix_use_runtimelinking\" = yes; then\n\t    shared_flag='${wl}-G'\n\t  else\n\t    shared_flag='${wl}-bM:SRE'\n\t  fi\n\tfi\n      fi\n\n      # It seems that -bexpall does not export symbols beginning with\n      # underscore (_), so it is better to generate a list of symbols to export.\n      _LT_AC_TAGVAR(always_export_symbols, $1)=yes\n      if test \"$aix_use_runtimelinking\" = yes; then\n\t# Warning - without using the other runtime loading flags (-brtl),\n\t# -berok will link without error, but may produce a broken library.\n\t_LT_AC_TAGVAR(allow_undefined_flag, $1)='-berok'\n       # Determine the default libpath from the value encoded in an empty executable.\n       _LT_AC_SYS_LIBPATH_AIX\n       _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'\"$aix_libpath\"\n\t_LT_AC_TAGVAR(archive_expsym_cmds, $1)=\"\\$CC\"' -o $output_objdir/$soname $libobjs $deplibs '\"\\${wl}$no_entry_flag\"' $compiler_flags `if test \"x${allow_undefined_flag}\" != \"x\"; then echo \"${wl}${allow_undefined_flag}\"; else :; fi` '\"\\${wl}$exp_sym_flag:\\$export_symbols $shared_flag\"\n       else\n\tif test \"$host_cpu\" = ia64; then\n\t  _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib'\n\t  _LT_AC_TAGVAR(allow_undefined_flag, $1)=\"-z nodefs\"\n\t  _LT_AC_TAGVAR(archive_expsym_cmds, $1)=\"\\$CC $shared_flag\"' -o $output_objdir/$soname $libobjs $deplibs '\"\\${wl}$no_entry_flag\"' $compiler_flags ${wl}${allow_undefined_flag} '\"\\${wl}$exp_sym_flag:\\$export_symbols\"\n\telse\n\t # Determine the default libpath from the value encoded in an empty executable.\n\t _LT_AC_SYS_LIBPATH_AIX\n\t _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'\"$aix_libpath\"\n\t  # Warning - without using the other run time loading flags,\n\t  # -berok will link without error, but may produce a broken library.\n\t  _LT_AC_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok'\n\t  _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok'\n\t  # Exported symbols can be pulled into shared objects from archives\n\t  _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='$convenience'\n\t  _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes\n\t  # This is similar to how AIX traditionally builds its shared libraries.\n\t  _LT_AC_TAGVAR(archive_expsym_cmds, $1)=\"\\$CC $shared_flag\"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'\n\tfi\n      fi\n      ;;\n\n    amigaos*)\n      _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/a2ixlibrary.data~$echo \"#define NAME $libname\" > $output_objdir/a2ixlibrary.data~$echo \"#define LIBRARY_ID 1\" >> $output_objdir/a2ixlibrary.data~$echo \"#define VERSION $major\" >> $output_objdir/a2ixlibrary.data~$echo \"#define REVISION $revision\" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'\n      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'\n      _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes\n      # see comment about different semantics on the GNU ld section\n      _LT_AC_TAGVAR(ld_shlibs, $1)=no\n      ;;\n\n    bsdi[[45]]*)\n      _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic\n      ;;\n\n    cygwin* | mingw* | pw32*)\n      # When not using gcc, we currently assume that we are using\n      # Microsoft Visual C++.\n      # hardcode_libdir_flag_spec is actually meaningless, as there is\n      # no search path for DLLs.\n      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)=' '\n      _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported\n      # Tell ltmain to make .lib files, not .a files.\n      libext=lib\n      # Tell ltmain to make .dll files, not .so files.\n      shrext_cmds=\".dll\"\n      # FIXME: Setting linknames here is a bad hack.\n      _LT_AC_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `echo \"$deplibs\" | $SED -e '\\''s/ -lc$//'\\''` -link -dll~linknames='\n      # The linker will automatically build a .lib file if we build a DLL.\n      _LT_AC_TAGVAR(old_archive_From_new_cmds, $1)='true'\n      # FIXME: Should let the user specify the lib program.\n      _LT_AC_TAGVAR(old_archive_cmds, $1)='lib /OUT:$oldlib$oldobjs$old_deplibs'\n      _LT_AC_TAGVAR(fix_srcfile_path, $1)='`cygpath -w \"$srcfile\"`'\n      _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=yes\n      ;;\n\n    darwin* | rhapsody*)\n      case $host_os in\n        rhapsody* | darwin1.[[012]])\n         _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-undefined ${wl}suppress'\n         ;;\n       *) # Darwin 1.3 on\n         if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then\n           _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-flat_namespace ${wl}-undefined ${wl}suppress'\n         else\n           case ${MACOSX_DEPLOYMENT_TARGET} in\n             10.[[012]])\n               _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-flat_namespace ${wl}-undefined ${wl}suppress'\n               ;;\n             10.*)\n               _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-undefined ${wl}dynamic_lookup'\n               ;;\n           esac\n         fi\n         ;;\n      esac\n      _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no\n      _LT_AC_TAGVAR(hardcode_direct, $1)=no\n      _LT_AC_TAGVAR(hardcode_automatic, $1)=yes\n      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=unsupported\n      _LT_AC_TAGVAR(whole_archive_flag_spec, $1)=''\n      _LT_AC_TAGVAR(link_all_deplibs, $1)=yes\n    if test \"$GCC\" = yes ; then\n    \toutput_verbose_link_cmd='echo'\n        _LT_AC_TAGVAR(archive_cmds, $1)='$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring'\n      _LT_AC_TAGVAR(module_cmds, $1)='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags'\n      # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds\n      _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e \"s,#.*,,\" -e \"s,^[    ]*,,\" -e \"s,^\\(..*\\),_&,\" < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'\n      _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e \"s,#.*,,\" -e \"s,^[    ]*,,\" -e \"s,^\\(..*\\),_&,\" < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag  -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'\n    else\n      case $cc_basename in\n        xlc*)\n         output_verbose_link_cmd='echo'\n         _LT_AC_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $verstring'\n         _LT_AC_TAGVAR(module_cmds, $1)='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags'\n          # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds\n         _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e \"s,#.*,,\" -e \"s,^[    ]*,,\" -e \"s,^\\(..*\\),_&,\" < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'\n          _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e \"s,#.*,,\" -e \"s,^[    ]*,,\" -e \"s,^\\(..*\\),_&,\" < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag  -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'\n          ;;\n       *)\n         _LT_AC_TAGVAR(ld_shlibs, $1)=no\n          ;;\n      esac\n    fi\n      ;;\n\n    dgux*)\n      _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'\n      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'\n      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no\n      ;;\n\n    freebsd1*)\n      _LT_AC_TAGVAR(ld_shlibs, $1)=no\n      ;;\n\n    # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor\n    # support.  Future versions do this automatically, but an explicit c++rt0.o\n    # does not break anything, and helps significantly (at the cost of a little\n    # extra space).\n    freebsd2.2*)\n      _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o'\n      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'\n      _LT_AC_TAGVAR(hardcode_direct, $1)=yes\n      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no\n      ;;\n\n    # Unfortunately, older versions of FreeBSD 2 do not have this feature.\n    freebsd2*)\n      _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'\n      _LT_AC_TAGVAR(hardcode_direct, $1)=yes\n      _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes\n      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no\n      ;;\n\n    # FreeBSD 3 and greater uses gcc -shared to do shared libraries.\n    freebsd* | dragonfly*)\n      _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'\n      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'\n      _LT_AC_TAGVAR(hardcode_direct, $1)=yes\n      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no\n      ;;\n\n    hpux9*)\n      if test \"$GCC\" = yes; then\n\t_LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'\n      else\n\t_LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'\n      fi\n      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'\n      _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:\n      _LT_AC_TAGVAR(hardcode_direct, $1)=yes\n\n      # hardcode_minus_L: Not really in the search PATH,\n      # but as the default location of the library.\n      _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes\n      _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'\n      ;;\n\n    hpux10*)\n      if test \"$GCC\" = yes -a \"$with_gnu_ld\" = no; then\n\t_LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'\n      else\n\t_LT_AC_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'\n      fi\n      if test \"$with_gnu_ld\" = no; then\n\t_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'\n\t_LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:\n\n\t_LT_AC_TAGVAR(hardcode_direct, $1)=yes\n\t_LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'\n\n\t# hardcode_minus_L: Not really in the search PATH,\n\t# but as the default location of the library.\n\t_LT_AC_TAGVAR(hardcode_minus_L, $1)=yes\n      fi\n      ;;\n\n    hpux11*)\n      if test \"$GCC\" = yes -a \"$with_gnu_ld\" = no; then\n\tcase $host_cpu in\n\thppa*64*)\n\t  _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'\n\t  ;;\n\tia64*)\n\t  _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'\n\t  ;;\n\t*)\n\t  _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'\n\t  ;;\n\tesac\n      else\n\tcase $host_cpu in\n\thppa*64*)\n\t  _LT_AC_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'\n\t  ;;\n\tia64*)\n\t  _LT_AC_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'\n\t  ;;\n\t*)\n\t  _LT_AC_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'\n\t  ;;\n\tesac\n      fi\n      if test \"$with_gnu_ld\" = no; then\n\t_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'\n\t_LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:\n\n\tcase $host_cpu in\n\thppa*64*|ia64*)\n\t  _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='+b $libdir'\n\t  _LT_AC_TAGVAR(hardcode_direct, $1)=no\n\t  _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no\n\t  ;;\n\t*)\n\t  _LT_AC_TAGVAR(hardcode_direct, $1)=yes\n\t  _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'\n\n\t  # hardcode_minus_L: Not really in the search PATH,\n\t  # but as the default location of the library.\n\t  _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes\n\t  ;;\n\tesac\n      fi\n      ;;\n\n    irix5* | irix6* | nonstopux*)\n      if test \"$GCC\" = yes; then\n\t_LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n \"$verstring\" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'\n      else\n\t_LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n \"$verstring\" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'\n\t_LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='-rpath $libdir'\n      fi\n      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'\n      _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:\n      _LT_AC_TAGVAR(link_all_deplibs, $1)=yes\n      ;;\n\n    netbsd* | netbsdelf*-gnu)\n      if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then\n\t_LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'  # a.out\n      else\n\t_LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags'      # ELF\n      fi\n      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'\n      _LT_AC_TAGVAR(hardcode_direct, $1)=yes\n      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no\n      ;;\n\n    newsos6)\n      _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'\n      _LT_AC_TAGVAR(hardcode_direct, $1)=yes\n      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'\n      _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:\n      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no\n      ;;\n\n    openbsd*)\n      _LT_AC_TAGVAR(hardcode_direct, $1)=yes\n      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no\n      if test -z \"`echo __ELF__ | $CC -E - | grep __ELF__`\" || test \"$host_os-$host_cpu\" = \"openbsd2.8-powerpc\"; then\n\t_LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'\n\t_LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols'\n\t_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'\n\t_LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'\n      else\n       case $host_os in\n\t openbsd[[01]].* | openbsd2.[[0-7]] | openbsd2.[[0-7]].*)\n\t   _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'\n\t   _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'\n\t   ;;\n\t *)\n\t   _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'\n\t   _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'\n\t   ;;\n       esac\n      fi\n      ;;\n\n    os2*)\n      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'\n      _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes\n      _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported\n      _LT_AC_TAGVAR(archive_cmds, $1)='$echo \"LIBRARY $libname INITINSTANCE\" > $output_objdir/$libname.def~$echo \"DESCRIPTION \\\"$libname\\\"\" >> $output_objdir/$libname.def~$echo DATA >> $output_objdir/$libname.def~$echo \" SINGLE NONSHARED\" >> $output_objdir/$libname.def~$echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def'\n      _LT_AC_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def'\n      ;;\n\n    osf3*)\n      if test \"$GCC\" = yes; then\n\t_LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\\*'\n\t_LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n \"$verstring\" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'\n      else\n\t_LT_AC_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \\*'\n\t_LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n \"$verstring\" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'\n      fi\n      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'\n      _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:\n      ;;\n\n    osf4* | osf5*)\t# as osf3* with the addition of -msym flag\n      if test \"$GCC\" = yes; then\n\t_LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\\*'\n\t_LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n \"$verstring\" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'\n\t_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'\n      else\n\t_LT_AC_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \\*'\n\t_LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n \"$verstring\" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'\n\t_LT_AC_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf \"%s %s\\\\n\" -exported_symbol \"\\$i\" >> $lib.exp; done; echo \"-hidden\">> $lib.exp~\n\t$LD -shared${allow_undefined_flag} -input $lib.exp $linker_flags $libobjs $deplibs -soname $soname `test -n \"$verstring\" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib~$rm $lib.exp'\n\n\t# Both c and cxx compiler support -rpath directly\n\t_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'\n      fi\n      _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:\n      ;;\n\n    solaris*)\n      _LT_AC_TAGVAR(no_undefined_flag, $1)=' -z text'\n      if test \"$GCC\" = yes; then\n\twlarc='${wl}'\n\t_LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'\n\t_LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo \"{ global:\" > $lib.exp~cat $export_symbols | $SED -e \"s/\\(.*\\)/\\1;/\" >> $lib.exp~$echo \"local: *; };\" >> $lib.exp~\n\t  $CC -shared ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$rm $lib.exp'\n      else\n\twlarc=''\n\t_LT_AC_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'\n\t_LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo \"{ global:\" > $lib.exp~cat $export_symbols | $SED -e \"s/\\(.*\\)/\\1;/\" >> $lib.exp~$echo \"local: *; };\" >> $lib.exp~\n  \t$LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp'\n      fi\n      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'\n      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no\n      case $host_os in\n      solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;\n      *)\n \t# The compiler driver will combine linker options so we\n \t# cannot just pass the convience library names through\n \t# without $wl, iff we do not link with $LD.\n \t# Luckily, gcc supports the same syntax we need for Sun Studio.\n \t# Supported since Solaris 2.6 (maybe 2.5.1?)\n \tcase $wlarc in\n \t'')\n \t  _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' ;;\n \t*)\n \t  _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract`for conv in $convenience\\\"\\\"; do test -n \\\"$conv\\\" && new_convenience=\\\"$new_convenience,$conv\\\"; done; $echo \\\"$new_convenience\\\"` ${wl}-z ${wl}defaultextract' ;;\n \tesac ;;\n      esac\n      _LT_AC_TAGVAR(link_all_deplibs, $1)=yes\n      ;;\n\n    sunos4*)\n      if test \"x$host_vendor\" = xsequent; then\n\t# Use $CC to link under sequent, because it throws in some extra .o\n\t# files that make .init and .fini sections work.\n\t_LT_AC_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags'\n      else\n\t_LT_AC_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags'\n      fi\n      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'\n      _LT_AC_TAGVAR(hardcode_direct, $1)=yes\n      _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes\n      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no\n      ;;\n\n    sysv4)\n      case $host_vendor in\n\tsni)\n\t  _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'\n\t  _LT_AC_TAGVAR(hardcode_direct, $1)=yes # is this really true???\n\t;;\n\tsiemens)\n\t  ## LD is ld it makes a PLAMLIB\n\t  ## CC just makes a GrossModule.\n\t  _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags'\n\t  _LT_AC_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs'\n\t  _LT_AC_TAGVAR(hardcode_direct, $1)=no\n        ;;\n\tmotorola)\n\t  _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'\n\t  _LT_AC_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie\n\t;;\n      esac\n      runpath_var='LD_RUN_PATH'\n      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no\n      ;;\n\n    sysv4.3*)\n      _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'\n      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no\n      _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport'\n      ;;\n\n    sysv4*MP*)\n      if test -d /usr/nec; then\n\t_LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'\n\t_LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no\n\trunpath_var=LD_RUN_PATH\n\thardcode_runpath_var=yes\n\t_LT_AC_TAGVAR(ld_shlibs, $1)=yes\n      fi\n      ;;\n\n    sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7*)\n      _LT_AC_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'\n      _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no\n      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no\n      runpath_var='LD_RUN_PATH'\n\n      if test \"$GCC\" = yes; then\n\t_LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'\n\t_LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'\n      else\n\t_LT_AC_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'\n\t_LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'\n      fi\n      ;;\n\n    sysv5* | sco3.2v5* | sco5v6*)\n      # Note: We can NOT use -z defs as we might desire, because we do not\n      # link with -lc, and that would cause any symbols used from libc to\n      # always be unresolved, which means just about no library would\n      # ever link correctly.  If we're not using GNU ld we use -z text\n      # though, which does catch some bad symbols but isn't as heavy-handed\n      # as -z defs.\n      _LT_AC_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'\n      _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs'\n      _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no\n      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no\n      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='`test -z \"$SCOABSPATH\" && echo ${wl}-R,$libdir`'\n      _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=':'\n      _LT_AC_TAGVAR(link_all_deplibs, $1)=yes\n      _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport'\n      runpath_var='LD_RUN_PATH'\n\n      if test \"$GCC\" = yes; then\n\t_LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,\\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'\n\t_LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,\\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'\n      else\n\t_LT_AC_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,\\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'\n\t_LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,\\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'\n      fi\n      ;;\n\n    uts4*)\n      _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'\n      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'\n      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no\n      ;;\n\n    *)\n      _LT_AC_TAGVAR(ld_shlibs, $1)=no\n      ;;\n    esac\n  fi\n])\nAC_MSG_RESULT([$_LT_AC_TAGVAR(ld_shlibs, $1)])\ntest \"$_LT_AC_TAGVAR(ld_shlibs, $1)\" = no && can_build_shared=no\n\n#\n# Do we need to explicitly link libc?\n#\ncase \"x$_LT_AC_TAGVAR(archive_cmds_need_lc, $1)\" in\nx|xyes)\n  # Assume -lc should be added\n  _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes\n\n  if test \"$enable_shared\" = yes && test \"$GCC\" = yes; then\n    case $_LT_AC_TAGVAR(archive_cmds, $1) in\n    *'~'*)\n      # FIXME: we may have to deal with multi-command sequences.\n      ;;\n    '$CC '*)\n      # Test whether the compiler implicitly links with -lc since on some\n      # systems, -lgcc has to come before -lc. If gcc already passes -lc\n      # to ld, don't add -lc before -lgcc.\n      AC_MSG_CHECKING([whether -lc should be explicitly linked in])\n      $rm conftest*\n      printf \"$lt_simple_compile_test_code\" > conftest.$ac_ext\n\n      if AC_TRY_EVAL(ac_compile) 2>conftest.err; then\n        soname=conftest\n        lib=conftest\n        libobjs=conftest.$ac_objext\n        deplibs=\n        wl=$_LT_AC_TAGVAR(lt_prog_compiler_wl, $1)\n\tpic_flag=$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)\n        compiler_flags=-v\n        linker_flags=-v\n        verstring=\n        output_objdir=.\n        libname=conftest\n        lt_save_allow_undefined_flag=$_LT_AC_TAGVAR(allow_undefined_flag, $1)\n        _LT_AC_TAGVAR(allow_undefined_flag, $1)=\n        if AC_TRY_EVAL(_LT_AC_TAGVAR(archive_cmds, $1) 2\\>\\&1 \\| grep \\\" -lc \\\" \\>/dev/null 2\\>\\&1)\n        then\n\t  _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no\n        else\n\t  _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes\n        fi\n        _LT_AC_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag\n      else\n        cat conftest.err 1>&5\n      fi\n      $rm conftest*\n      AC_MSG_RESULT([$_LT_AC_TAGVAR(archive_cmds_need_lc, $1)])\n      ;;\n    esac\n  fi\n  ;;\nesac\n])# AC_LIBTOOL_PROG_LD_SHLIBS\n\n\n# _LT_AC_FILE_LTDLL_C\n# -------------------\n# Be careful that the start marker always follows a newline.\nAC_DEFUN([_LT_AC_FILE_LTDLL_C], [\n# /* ltdll.c starts here */\n# #define WIN32_LEAN_AND_MEAN\n# #include <windows.h>\n# #undef WIN32_LEAN_AND_MEAN\n# #include <stdio.h>\n#\n# #ifndef __CYGWIN__\n# #  ifdef __CYGWIN32__\n# #    define __CYGWIN__ __CYGWIN32__\n# #  endif\n# #endif\n#\n# #ifdef __cplusplus\n# extern \"C\" {\n# #endif\n# BOOL APIENTRY DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved);\n# #ifdef __cplusplus\n# }\n# #endif\n#\n# #ifdef __CYGWIN__\n# #include <cygwin/cygwin_dll.h>\n# DECLARE_CYGWIN_DLL( DllMain );\n# #endif\n# HINSTANCE __hDllInstance_base;\n#\n# BOOL APIENTRY\n# DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved)\n# {\n#   __hDllInstance_base = hInst;\n#   return TRUE;\n# }\n# /* ltdll.c ends here */\n])# _LT_AC_FILE_LTDLL_C\n\n\n# _LT_AC_TAGVAR(VARNAME, [TAGNAME])\n# ---------------------------------\nAC_DEFUN([_LT_AC_TAGVAR], [ifelse([$2], [], [$1], [$1_$2])])\n\n\n# old names\nAC_DEFUN([AM_PROG_LIBTOOL],   [AC_PROG_LIBTOOL])\nAC_DEFUN([AM_ENABLE_SHARED],  [AC_ENABLE_SHARED($@)])\nAC_DEFUN([AM_ENABLE_STATIC],  [AC_ENABLE_STATIC($@)])\nAC_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)])\nAC_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)])\nAC_DEFUN([AM_PROG_LD],        [AC_PROG_LD])\nAC_DEFUN([AM_PROG_NM],        [AC_PROG_NM])\n\n# This is just to silence aclocal about the macro not being used\nifelse([AC_DISABLE_FAST_INSTALL])\n\nAC_DEFUN([LT_AC_PROG_GCJ],\n[AC_CHECK_TOOL(GCJ, gcj, no)\n  test \"x${GCJFLAGS+set}\" = xset || GCJFLAGS=\"-g -O2\"\n  AC_SUBST(GCJFLAGS)\n])\n\nAC_DEFUN([LT_AC_PROG_RC],\n[AC_CHECK_TOOL(RC, windres, no)\n])\n\n# NOTE: This macro has been submitted for inclusion into   #\n#  GNU Autoconf as AC_PROG_SED.  When it is available in   #\n#  a released version of Autoconf we should remove this    #\n#  macro and use it instead.                               #\n# LT_AC_PROG_SED\n# --------------\n# Check for a fully-functional sed program, that truncates\n# as few characters as possible.  Prefer GNU sed if found.\nAC_DEFUN([LT_AC_PROG_SED],\n[AC_MSG_CHECKING([for a sed that does not truncate output])\nAC_CACHE_VAL(lt_cv_path_SED,\n[# Loop through the user's path and test for sed and gsed.\n# Then use that list of sed's as ones to test for truncation.\nas_save_IFS=$IFS; IFS=$PATH_SEPARATOR\nfor as_dir in $PATH\ndo\n  IFS=$as_save_IFS\n  test -z \"$as_dir\" && as_dir=.\n  for lt_ac_prog in sed gsed; do\n    for ac_exec_ext in '' $ac_executable_extensions; do\n      if $as_executable_p \"$as_dir/$lt_ac_prog$ac_exec_ext\"; then\n        lt_ac_sed_list=\"$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext\"\n      fi\n    done\n  done\ndone\nlt_ac_max=0\nlt_ac_count=0\n# Add /usr/xpg4/bin/sed as it is typically found on Solaris\n# along with /bin/sed that truncates output.\nfor lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do\n  test ! -f $lt_ac_sed && continue\n  cat /dev/null > conftest.in\n  lt_ac_count=0\n  echo $ECHO_N \"0123456789$ECHO_C\" >conftest.in\n  # Check for GNU sed and select it if it is found.\n  if \"$lt_ac_sed\" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then\n    lt_cv_path_SED=$lt_ac_sed\n    break\n  fi\n  while true; do\n    cat conftest.in conftest.in >conftest.tmp\n    mv conftest.tmp conftest.in\n    cp conftest.in conftest.nl\n    echo >>conftest.nl\n    $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break\n    cmp -s conftest.out conftest.nl || break\n    # 10000 chars as input seems more than enough\n    test $lt_ac_count -gt 10 && break\n    lt_ac_count=`expr $lt_ac_count + 1`\n    if test $lt_ac_count -gt $lt_ac_max; then\n      lt_ac_max=$lt_ac_count\n      lt_cv_path_SED=$lt_ac_sed\n    fi\n  done\ndone\n])\nSED=$lt_cv_path_SED\nAC_MSG_RESULT([$SED])\n])\n\n"
  },
  {
    "path": "experimental/solve_VPSC/configure",
    "content": "#! /bin/sh\n# Guess values for system-dependent variables and create Makefiles.\n# Generated by GNU Autoconf 2.59d.\n#\n# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,\n# 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.\n# This configure script is free software; the Free Software Foundation\n# gives unlimited permission to copy, distribute and modify it.\n## --------------------- ##\n## M4sh Initialization.  ##\n## --------------------- ##\n\n# Be Bourne compatible\nif test -n \"${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then\n  emulate sh\n  NULLCMD=:\n  # Zsh 3.x and 4.x performs word splitting on ${1+\"$@\"}, which\n  # is contrary to our usage.  Disable this feature.\n  alias -g '${1+\"$@\"}'='\"$@\"'\n  setopt NO_GLOB_SUBST\nelse\n  case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac\nfi\nBIN_SH=xpg4; export BIN_SH # for Tru64\nDUALCASE=1; export DUALCASE # for MKS sh\n\n\n# PATH needs CR\n# Avoid depending upon Character Ranges.\nas_cr_letters='abcdefghijklmnopqrstuvwxyz'\nas_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'\nas_cr_Letters=$as_cr_letters$as_cr_LETTERS\nas_cr_digits='0123456789'\nas_cr_alnum=$as_cr_Letters$as_cr_digits\n\n# The user is always right.\nif test \"${PATH_SEPARATOR+set}\" != set; then\n  echo \"#! /bin/sh\" >conf$$.sh\n  echo  \"exit 0\"   >>conf$$.sh\n  chmod +x conf$$.sh\n  if (PATH=\"/nonexistent;.\"; conf$$.sh) >/dev/null 2>&1; then\n    PATH_SEPARATOR=';'\n  else\n    PATH_SEPARATOR=:\n  fi\n  rm -f conf$$.sh\nfi\n\n# Support unset when possible.\nif ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then\n  as_unset=unset\nelse\n  as_unset=false\nfi\n\n\n# IFS\n# We need space, tab and new line, in precisely that order.  Quoting is\n# there to prevent editors from complaining about space-tab.\n# (If _AS_PATH_WALK were called with IFS unset, it would disable word\n# splitting by setting IFS to empty value.)\nas_nl='\n'\nIFS=\" \"\"\t$as_nl\"\n\n# Find who we are.  Look in the path if we contain no directory separator.\ncase $0 in\n  *[\\\\/]* ) as_myself=$0 ;;\n  *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR\nfor as_dir in $PATH\ndo\n  IFS=$as_save_IFS\n  test -z \"$as_dir\" && as_dir=.\n  test -r \"$as_dir/$0\" && as_myself=$as_dir/$0 && break\ndone\nIFS=$as_save_IFS\n\n     ;;\nesac\n# We did not find ourselves, most probably we were run as `sh COMMAND'\n# in which case we are not to be found in the path.\nif test \"x$as_myself\" = x; then\n  as_myself=$0\nfi\nif test ! -f \"$as_myself\"; then\n  echo \"$as_myself: error: cannot find myself; rerun with an absolute file name\" >&2\n  { (exit 1); exit 1; }\nfi\n\n# Work around bugs in pre-3.0 UWIN ksh.\nfor as_var in ENV MAIL MAILPATH\ndo ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var\ndone\nPS1='$ '\nPS2='> '\nPS4='+ '\n\n# NLS nuisances.\nfor as_var in \\\n  LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \\\n  LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \\\n  LC_TELEPHONE LC_TIME\ndo\n  if (set +x; test -z \"`(eval $as_var=C; export $as_var) 2>&1`\"); then\n    eval $as_var=C; export $as_var\n  else\n    ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var\n  fi\ndone\n\n# Required to use basename.\nif expr a : '\\(a\\)' >/dev/null 2>&1 &&\n   test \"X`expr 00001 : '.*\\(...\\)'`\" = X001; then\n  as_expr=expr\nelse\n  as_expr=false\nfi\n\nif (basename -- /) >/dev/null 2>&1 && test \"X`basename -- / 2>&1`\" = \"X/\"; then\n  as_basename=basename\nelse\n  as_basename=false\nfi\n\n\n# Name of the executable.\nas_me=`$as_basename -- \"$0\" ||\n$as_expr X/\"$0\" : '.*/\\([^/][^/]*\\)/*$' \\| \\\n\t X\"$0\" : 'X\\(//\\)$' \\| \\\n\t X\"$0\" : 'X\\(/\\)' \\| . 2>/dev/null ||\necho X/\"$0\" |\n    sed '/^.*\\/\\([^/][^/]*\\)\\/*$/{\n\t    s//\\1/\n\t    q\n\t  }\n\t  /^X\\/\\(\\/\\/\\)$/{\n\t    s//\\1/\n\t    q\n\t  }\n\t  /^X\\/\\(\\/\\).*/{\n\t    s//\\1/\n\t    q\n\t  }\n\t  s/.*/./; q'`\n\n# CDPATH.\n$as_unset CDPATH\n\n\nif test \"x$CONFIG_SHELL\" = x; then\n  if (eval \":\") 2>/dev/null; then\n  as_have_required=yes\nelse\n  as_have_required=no\nfi\n\n  if test $as_have_required = yes && \t (eval \":\n(as_func_return () {\n  (exit \\$1)\n}\nas_func_success () {\n  as_func_return 0\n}\nas_func_failure () {\n  as_func_return 1\n}\nas_func_ret_success () {\n  return 0\n}\nas_func_ret_failure () {\n  return 1\n}\n\nexitcode=0\nif as_func_success; then\n  :\nelse\n  exitcode=1\n  echo as_func_success failed.\nfi\n\nif as_func_failure; then\n  exitcode=1\n  echo as_func_failure succeeded.\nfi\n\nif as_func_ret_success; then\n  :\nelse\n  exitcode=1\n  echo as_func_ret_success failed.\nfi\n\nif as_func_ret_failure; then\n  exitcode=1\n  echo as_func_ret_failure succeeded.\nfi\n\nif ( set x; as_func_ret_success y && test x = \\\"\\$1\\\" ); then\n  :\nelse\n  exitcode=1\n  echo positional parameters were not saved.\nfi\n\ntest \\$exitcode = 0) || { (exit 1); exit 1; }\n\n(\n  as_lineno_1=\\$LINENO\n  as_lineno_2=\\$LINENO\n  test \\\"x\\$as_lineno_1\\\" != \\\"x\\$as_lineno_2\\\" &&\n  test \\\"x\\`expr \\$as_lineno_1 + 1\\`\\\" = \\\"x\\$as_lineno_2\\\") || { (exit 1); exit 1; }\n\") 2> /dev/null; then\n  :\nelse\n  as_candidate_shells=\n    as_save_IFS=$IFS; IFS=$PATH_SEPARATOR\nfor as_dir in /usr/bin/posix$PATH_SEPARATOR/bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH\ndo\n  IFS=$as_save_IFS\n  test -z \"$as_dir\" && as_dir=.\n  case $as_dir in\n\t /*)\n\t   for as_base in sh bash ksh sh5; do\n\t     as_candidate_shells=\"$as_candidate_shells $as_dir/$as_base\"\n\t   done;;\n       esac\ndone\nIFS=$as_save_IFS\n\n\n      for as_shell in $as_candidate_shells $SHELL; do\n\t # Try only shells which exist, to save several forks.\n\t if test -f \"$as_shell\" &&\n\t\t{ (\"$as_shell\") 2> /dev/null <<\\_ASEOF\n# Be Bourne compatible\nif test -n \"${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then\n  emulate sh\n  NULLCMD=:\n  # Zsh 3.x and 4.x performs word splitting on ${1+\"$@\"}, which\n  # is contrary to our usage.  Disable this feature.\n  alias -g '${1+\"$@\"}'='\"$@\"'\n  setopt NO_GLOB_SUBST\nelse\n  case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac\nfi\nBIN_SH=xpg4; export BIN_SH # for Tru64\nDUALCASE=1; export DUALCASE # for MKS sh\n\n:\n_ASEOF\n}; then\n  CONFIG_SHELL=$as_shell\n\t       as_have_required=yes\n\t       if { \"$as_shell\" 2> /dev/null <<\\_ASEOF\n# Be Bourne compatible\nif test -n \"${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then\n  emulate sh\n  NULLCMD=:\n  # Zsh 3.x and 4.x performs word splitting on ${1+\"$@\"}, which\n  # is contrary to our usage.  Disable this feature.\n  alias -g '${1+\"$@\"}'='\"$@\"'\n  setopt NO_GLOB_SUBST\nelse\n  case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac\nfi\nBIN_SH=xpg4; export BIN_SH # for Tru64\nDUALCASE=1; export DUALCASE # for MKS sh\n\n:\n(as_func_return () {\n  (exit $1)\n}\nas_func_success () {\n  as_func_return 0\n}\nas_func_failure () {\n  as_func_return 1\n}\nas_func_ret_success () {\n  return 0\n}\nas_func_ret_failure () {\n  return 1\n}\n\nexitcode=0\nif as_func_success; then\n  :\nelse\n  exitcode=1\n  echo as_func_success failed.\nfi\n\nif as_func_failure; then\n  exitcode=1\n  echo as_func_failure succeeded.\nfi\n\nif as_func_ret_success; then\n  :\nelse\n  exitcode=1\n  echo as_func_ret_success failed.\nfi\n\nif as_func_ret_failure; then\n  exitcode=1\n  echo as_func_ret_failure succeeded.\nfi\n\nif ( set x; as_func_ret_success y && test x = \"$1\" ); then\n  :\nelse\n  exitcode=1\n  echo positional parameters were not saved.\nfi\n\ntest $exitcode = 0) || { (exit 1); exit 1; }\n\n(\n  as_lineno_1=$LINENO\n  as_lineno_2=$LINENO\n  test \"x$as_lineno_1\" != \"x$as_lineno_2\" &&\n  test \"x`expr $as_lineno_1 + 1`\" = \"x$as_lineno_2\") || { (exit 1); exit 1; }\n\n_ASEOF\n}; then\n  break\nfi\n\nfi\n\n      done\n\n      if test \"x$CONFIG_SHELL\" != x; then\n  for as_var in BASH_ENV ENV\n        do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var\n        done\n        export CONFIG_SHELL\n        exec \"$CONFIG_SHELL\" \"$as_myself\" ${1+\"$@\"}\nfi\n\n\n    if test $as_have_required = no; then\n  echo This script requires a shell more modern than all the\n      echo shells that I found on your system.  Please install a\n      echo modern shell, or manually run the script under such a\n      echo shell if you do have one.\n      { (exit 1); exit 1; }\nfi\n\n\nfi\n\nfi\n\n\n\n(eval \"as_func_return () {\n  (exit \\$1)\n}\nas_func_success () {\n  as_func_return 0\n}\nas_func_failure () {\n  as_func_return 1\n}\nas_func_ret_success () {\n  return 0\n}\nas_func_ret_failure () {\n  return 1\n}\n\nexitcode=0\nif as_func_success; then\n  :\nelse\n  exitcode=1\n  echo as_func_success failed.\nfi\n\nif as_func_failure; then\n  exitcode=1\n  echo as_func_failure succeeded.\nfi\n\nif as_func_ret_success; then\n  :\nelse\n  exitcode=1\n  echo as_func_ret_success failed.\nfi\n\nif as_func_ret_failure; then\n  exitcode=1\n  echo as_func_ret_failure succeeded.\nfi\n\nif ( set x; as_func_ret_success y && test x = \\\"\\$1\\\" ); then\n  :\nelse\n  exitcode=1\n  echo positional parameters were not saved.\nfi\n\ntest \\$exitcode = 0\") || {\n  echo No shell found that supports shell functions.\n  echo Please tell autoconf@gnu.org about your system,\n  echo including any error possibly output before this\n  echo message\n}\n\n\n\n  as_lineno_1=$LINENO\n  as_lineno_2=$LINENO\n  test \"x$as_lineno_1\" != \"x$as_lineno_2\" &&\n  test \"x`expr $as_lineno_1 + 1`\" = \"x$as_lineno_2\" || {\n\n  # Create $as_me.lineno as a copy of $as_myself, but with $LINENO\n  # uniformly replaced by the line number.  The first 'sed' inserts a\n  # line-number line after each line using $LINENO; the second 'sed'\n  # does the real work.  The second script uses 'N' to pair each\n  # line-number line with the line containing $LINENO, and appends\n  # trailing '-' during substitution so that $LINENO is not a special\n  # case at line end.\n  # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the\n  # scripts with optimization help from Paolo Bonzini.  Blame Lee\n  # E. McMahon (1931-1989) for sed's syntax.  :-)\n  sed -n '\n    p\n    /[$]LINENO/=\n  ' <$as_myself |\n    sed '\n      s/[$]LINENO.*/&-/\n      t lineno\n      b\n      :lineno\n      N\n      :loop\n      s/[$]LINENO\\([^'$as_cr_alnum'_].*\\n\\)\\(.*\\)/\\2\\1\\2/\n      t loop\n      s/-\\n.*//\n    ' >$as_me.lineno &&\n  chmod +x \"$as_me.lineno\" ||\n    { echo \"$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell\" >&2\n   { (exit 1); exit 1; }; }\n\n  # Don't try to exec as it changes $[0], causing all sort of problems\n  # (the dirname of $[0] is not the place where we might find the\n  # original and so on.  Autoconf is especially sensitive to this).\n  . \"./$as_me.lineno\"\n  # Exit status is that of the last command.\n  exit\n}\n\n\nif (dirname -- /) >/dev/null 2>&1; then\n  as_dirname=dirname\nelse\n  as_dirname=false\nfi\n\nECHO_C= ECHO_N= ECHO_T=\ncase `echo -n x` in\n-n*)\n  case `echo 'x\\c'` in\n  *c*) ECHO_T='\t';;\t# ECHO_T is single tab character.\n  *)   ECHO_C='\\c';;\n  esac;;\n*)\n  ECHO_N='-n';;\nesac\n\nif expr a : '\\(a\\)' >/dev/null 2>&1 &&\n   test \"X`expr 00001 : '.*\\(...\\)'`\" = X001; then\n  as_expr=expr\nelse\n  as_expr=false\nfi\n\nrm -f conf$$ conf$$.exe conf$$.file\nif test -d conf$$.dir; then\n  rm -f conf$$.dir/conf$$.file\nelse\n  rm -f conf$$.dir\n  mkdir conf$$.dir\nfi\necho >conf$$.file\nif ln -s conf$$.file conf$$ 2>/dev/null; then\n  as_ln_s='ln -s'\n  # ... but there are two gotchas:\n  # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.\n  # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.\n  # In both cases, we have to default to `cp -p'.\n  ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||\n    as_ln_s='cp -p'\nelif ln conf$$.file conf$$ 2>/dev/null; then\n  as_ln_s=ln\nelse\n  as_ln_s='cp -p'\nfi\nrm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file\nrmdir conf$$.dir 2>/dev/null\n\nif mkdir -p . 2>/dev/null; then\n  as_mkdir_p=:\nelse\n  test -d ./-p && rmdir ./-p\n  as_mkdir_p=false\nfi\n\n# Find out whether ``test -x'' works.  Don't use a zero-byte file, as\n# systems may use methods other than mode bits to determine executability.\ncat >conf$$.file <<_ASEOF\n#! /bin/sh\nexit 0\n_ASEOF\nchmod +x conf$$.file\nif test -x conf$$.file >/dev/null 2>&1; then\n  as_executable_p=\"test -x\"\nelse\n  as_executable_p=:\nfi\nrm -f conf$$.file\n\n# Sed expression to map a string onto a valid CPP name.\nas_tr_cpp=\"eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'\"\n\n# Sed expression to map a string onto a valid variable name.\nas_tr_sh=\"eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'\"\n\n\n\n\n# Check that we are running under the correct shell.\nSHELL=${CONFIG_SHELL-/bin/sh}\n\ncase X$ECHO in\nX*--fallback-echo)\n  # Remove one level of quotation (which was required for Make).\n  ECHO=`echo \"$ECHO\" | sed 's,\\\\\\\\\\$\\\\$0,'$0','`\n  ;;\nesac\n\necho=${ECHO-echo}\nif test \"X$1\" = X--no-reexec; then\n  # Discard the --no-reexec flag, and continue.\n  shift\nelif test \"X$1\" = X--fallback-echo; then\n  # Avoid inline document here, it may be left over\n  :\nelif test \"X`($echo '\\t') 2>/dev/null`\" = 'X\\t' ; then\n  # Yippee, $echo works!\n  :\nelse\n  # Restart under the correct shell.\n  exec $SHELL \"$0\" --no-reexec ${1+\"$@\"}\nfi\n\nif test \"X$1\" = X--fallback-echo; then\n  # used as fallback echo\n  shift\n  cat <<EOF\n$*\nEOF\n  exit 0\nfi\n\n# The HP-UX ksh and POSIX shell print the target directory to stdout\n# if CDPATH is set.\n(unset CDPATH) >/dev/null 2>&1 && unset CDPATH\n\nif test -z \"$ECHO\"; then\nif test \"X${echo_test_string+set}\" != Xset; then\n# find a string as large as possible, as long as the shell can cope with it\n  for cmd in 'sed 50q \"$0\"' 'sed 20q \"$0\"' 'sed 10q \"$0\"' 'sed 2q \"$0\"' 'echo test'; do\n    # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ...\n    if (echo_test_string=`eval $cmd`) 2>/dev/null &&\n       echo_test_string=`eval $cmd` &&\n       (test \"X$echo_test_string\" = \"X$echo_test_string\") 2>/dev/null\n    then\n      break\n    fi\n  done\nfi\n\nif test \"X`($echo '\\t') 2>/dev/null`\" = 'X\\t' &&\n   echo_testing_string=`($echo \"$echo_test_string\") 2>/dev/null` &&\n   test \"X$echo_testing_string\" = \"X$echo_test_string\"; then\n  :\nelse\n  # The Solaris, AIX, and Digital Unix default echo programs unquote\n  # backslashes.  This makes it impossible to quote backslashes using\n  #   echo \"$something\" | sed 's/\\\\/\\\\\\\\/g'\n  #\n  # So, first we look for a working echo in the user's PATH.\n\n  lt_save_ifs=\"$IFS\"; IFS=$PATH_SEPARATOR\n  for dir in $PATH /usr/ucb; do\n    IFS=\"$lt_save_ifs\"\n    if (test -f $dir/echo || test -f $dir/echo$ac_exeext) &&\n       test \"X`($dir/echo '\\t') 2>/dev/null`\" = 'X\\t' &&\n       echo_testing_string=`($dir/echo \"$echo_test_string\") 2>/dev/null` &&\n       test \"X$echo_testing_string\" = \"X$echo_test_string\"; then\n      echo=\"$dir/echo\"\n      break\n    fi\n  done\n  IFS=\"$lt_save_ifs\"\n\n  if test \"X$echo\" = Xecho; then\n    # We didn't find a better echo, so look for alternatives.\n    if test \"X`(print -r '\\t') 2>/dev/null`\" = 'X\\t' &&\n       echo_testing_string=`(print -r \"$echo_test_string\") 2>/dev/null` &&\n       test \"X$echo_testing_string\" = \"X$echo_test_string\"; then\n      # This shell has a builtin print -r that does the trick.\n      echo='print -r'\n    elif (test -f /bin/ksh || test -f /bin/ksh$ac_exeext) &&\n\t test \"X$CONFIG_SHELL\" != X/bin/ksh; then\n      # If we have ksh, try running configure again with it.\n      ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh}\n      export ORIGINAL_CONFIG_SHELL\n      CONFIG_SHELL=/bin/ksh\n      export CONFIG_SHELL\n      exec $CONFIG_SHELL \"$0\" --no-reexec ${1+\"$@\"}\n    else\n      # Try using printf.\n      echo='printf %s\\n'\n      if test \"X`($echo '\\t') 2>/dev/null`\" = 'X\\t' &&\n\t echo_testing_string=`($echo \"$echo_test_string\") 2>/dev/null` &&\n\t test \"X$echo_testing_string\" = \"X$echo_test_string\"; then\n\t# Cool, printf works\n\t:\n      elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL \"$0\" --fallback-echo '\\t') 2>/dev/null` &&\n\t   test \"X$echo_testing_string\" = 'X\\t' &&\n\t   echo_testing_string=`($ORIGINAL_CONFIG_SHELL \"$0\" --fallback-echo \"$echo_test_string\") 2>/dev/null` &&\n\t   test \"X$echo_testing_string\" = \"X$echo_test_string\"; then\n\tCONFIG_SHELL=$ORIGINAL_CONFIG_SHELL\n\texport CONFIG_SHELL\n\tSHELL=\"$CONFIG_SHELL\"\n\texport SHELL\n\techo=\"$CONFIG_SHELL $0 --fallback-echo\"\n      elif echo_testing_string=`($CONFIG_SHELL \"$0\" --fallback-echo '\\t') 2>/dev/null` &&\n\t   test \"X$echo_testing_string\" = 'X\\t' &&\n\t   echo_testing_string=`($CONFIG_SHELL \"$0\" --fallback-echo \"$echo_test_string\") 2>/dev/null` &&\n\t   test \"X$echo_testing_string\" = \"X$echo_test_string\"; then\n\techo=\"$CONFIG_SHELL $0 --fallback-echo\"\n      else\n\t# maybe with a smaller string...\n\tprev=:\n\n\tfor cmd in 'echo test' 'sed 2q \"$0\"' 'sed 10q \"$0\"' 'sed 20q \"$0\"' 'sed 50q \"$0\"'; do\n\t  if (test \"X$echo_test_string\" = \"X`eval $cmd`\") 2>/dev/null\n\t  then\n\t    break\n\t  fi\n\t  prev=\"$cmd\"\n\tdone\n\n\tif test \"$prev\" != 'sed 50q \"$0\"'; then\n\t  echo_test_string=`eval $prev`\n\t  export echo_test_string\n\t  exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} \"$0\" ${1+\"$@\"}\n\telse\n\t  # Oops.  We lost completely, so just stick with echo.\n\t  echo=echo\n\tfi\n      fi\n    fi\n  fi\nfi\nfi\n\n# Copy echo and quote the copy suitably for passing to libtool from\n# the Makefile, instead of quoting the original, which is used later.\nECHO=$echo\nif test \"X$ECHO\" = \"X$CONFIG_SHELL $0 --fallback-echo\"; then\n   ECHO=\"$CONFIG_SHELL \\\\\\$\\$0 --fallback-echo\"\nfi\n\n\n\n\ntagnames=${tagnames+${tagnames},}CXX\n\ntagnames=${tagnames+${tagnames},}F77\n\nexec 7<&0 </dev/null 6>&1\n\n# Name of the host.\n# hostname on some systems (SVR3.2, Linux) returns a bogus exit status,\n# so uname gets run too.\nac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q`\n\n#\n# Initializations.\n#\nac_default_prefix=/usr/local\nac_clean_files=\nac_config_libobj_dir=.\nLIBOBJS=\ncross_compiling=no\nsubdirs=\nMFLAGS=\nMAKEFLAGS=\nSHELL=${CONFIG_SHELL-/bin/sh}\n\n# Identity of this package.\nPACKAGE_NAME=\nPACKAGE_TARNAME=\nPACKAGE_VERSION=\nPACKAGE_STRING=\nPACKAGE_BUGREPORT=\n\nac_unique_file=\"libvpsc/solve_VPSC.cpp\"\n# Factoring default headers for most tests.\nac_includes_default=\"\\\n#include <stdio.h>\n#if HAVE_SYS_TYPES_H\n# include <sys/types.h>\n#endif\n#if HAVE_SYS_STAT_H\n# include <sys/stat.h>\n#endif\n#if STDC_HEADERS\n# include <stdlib.h>\n# include <stddef.h>\n#else\n# if HAVE_STDLIB_H\n#  include <stdlib.h>\n# endif\n#endif\n#if HAVE_STRING_H\n# if !STDC_HEADERS && HAVE_MEMORY_H\n#  include <memory.h>\n# endif\n# include <string.h>\n#endif\n#if HAVE_STRINGS_H\n# include <strings.h>\n#endif\n#if HAVE_INTTYPES_H\n# include <inttypes.h>\n#endif\n#if HAVE_STDINT_H\n# include <stdint.h>\n#endif\n#if HAVE_UNISTD_H\n# include <unistd.h>\n#endif\"\n\nac_subst_vars='SHELL\nPATH_SEPARATOR\nPACKAGE_NAME\nPACKAGE_TARNAME\nPACKAGE_VERSION\nPACKAGE_STRING\nPACKAGE_BUGREPORT\nexec_prefix\nprefix\nprogram_transform_name\nbindir\nsbindir\nlibexecdir\ndatarootdir\ndatadir\nsysconfdir\nsharedstatedir\nlocalstatedir\nincludedir\noldincludedir\ndocdir\ninfodir\nhtmldir\ndvidir\npdfdir\npsdir\nlibdir\nlocaledir\nmandir\nDEFS\nECHO_C\nECHO_N\nECHO_T\nLIBS\nbuild_alias\nhost_alias\ntarget_alias\nINSTALL_PROGRAM\nINSTALL_SCRIPT\nINSTALL_DATA\nPACKAGE\nVERSION\nACLOCAL\nAUTOCONF\nAUTOMAKE\nAUTOHEADER\nMAKEINFO\nSET_MAKE\nbuild\nbuild_cpu\nbuild_vendor\nbuild_os\nhost\nhost_cpu\nhost_vendor\nhost_os\nCC\nCFLAGS\nLDFLAGS\nCPPFLAGS\nac_ct_CC\nEXEEXT\nOBJEXT\nGREP\nEGREP\nLN_S\nECHO\nAR\nRANLIB\nSTRIP\nCPP\nCXX\nCXXFLAGS\nac_ct_CXX\nCXXCPP\nF77\nFFLAGS\nac_ct_F77\nLIBTOOL\nLIBOBJS\nLTLIBOBJS'\nac_subst_files=''\n      ac_precious_vars='build_alias\nhost_alias\ntarget_alias\nCC\nCFLAGS\nLDFLAGS\nCPPFLAGS\nCPP\nCXX\nCXXFLAGS\nCCC\nCXXCPP\nF77\nFFLAGS'\n\n\n# Initialize some variables set by options.\nac_init_help=\nac_init_version=false\n# The variables have the same names as the options, with\n# dashes changed to underlines.\ncache_file=/dev/null\nexec_prefix=NONE\nno_create=\nno_recursion=\nprefix=NONE\nprogram_prefix=NONE\nprogram_suffix=NONE\nprogram_transform_name=s,x,x,\nsilent=\nsite=\nsrcdir=\nverbose=\nx_includes=NONE\nx_libraries=NONE\n\n# Installation directory options.\n# These are left unexpanded so users can \"make install exec_prefix=/foo\"\n# and all the variables that are supposed to be based on exec_prefix\n# by default will actually change.\n# Use braces instead of parens because sh, perl, etc. also accept them.\n# (The list follows the same order as the GNU Coding Standards.)\nbindir='${exec_prefix}/bin'\nsbindir='${exec_prefix}/sbin'\nlibexecdir='${exec_prefix}/libexec'\ndatarootdir='${prefix}/share'\ndatadir='${datarootdir}'\nsysconfdir='${prefix}/etc'\nsharedstatedir='${prefix}/com'\nlocalstatedir='${prefix}/var'\nincludedir='${prefix}/include'\noldincludedir='/usr/include'\ndocdir='${datarootdir}/doc/${PACKAGE}'\ninfodir='${datarootdir}/info'\nhtmldir='${docdir}'\ndvidir='${docdir}'\npdfdir='${docdir}'\npsdir='${docdir}'\nlibdir='${exec_prefix}/lib'\nlocaledir='${datarootdir}/locale'\nmandir='${datarootdir}/man'\n\nac_prev=\nac_dashdash=\nfor ac_option\ndo\n  # If the previous option needs an argument, assign it.\n  if test -n \"$ac_prev\"; then\n    eval $ac_prev=\\$ac_option\n    ac_prev=\n    continue\n  fi\n\n  case $ac_option in\n  *=*)\tac_optarg=`expr \"X$ac_option\" : '[^=]*=\\(.*\\)'` ;;\n  *)\tac_optarg=yes ;;\n  esac\n\n  # Accept the important Cygnus configure options, so we can diagnose typos.\n\n  case $ac_dashdash$ac_option in\n  --)\n    ac_dashdash=yes ;;\n\n  -bindir | --bindir | --bindi | --bind | --bin | --bi)\n    ac_prev=bindir ;;\n  -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*)\n    bindir=$ac_optarg ;;\n\n  -build | --build | --buil | --bui | --bu)\n    ac_prev=build_alias ;;\n  -build=* | --build=* | --buil=* | --bui=* | --bu=*)\n    build_alias=$ac_optarg ;;\n\n  -cache-file | --cache-file | --cache-fil | --cache-fi \\\n  | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)\n    ac_prev=cache_file ;;\n  -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \\\n  | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)\n    cache_file=$ac_optarg ;;\n\n  --config-cache | -C)\n    cache_file=config.cache ;;\n\n  -datadir | --datadir | --datadi | --datad)\n    ac_prev=datadir ;;\n  -datadir=* | --datadir=* | --datadi=* | --datad=*)\n    datadir=$ac_optarg ;;\n\n  -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \\\n  | --dataroo | --dataro | --datar)\n    ac_prev=datarootdir ;;\n  -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \\\n  | --dataroot=* | --dataroo=* | --dataro=* | --datar=*)\n    datarootdir=$ac_optarg ;;\n\n  -disable-* | --disable-*)\n    ac_feature=`expr \"x$ac_option\" : 'x-*disable-\\(.*\\)'`\n    # Reject names that are not valid shell variable names.\n    expr \"x$ac_feature\" : \".*[^-_$as_cr_alnum]\" >/dev/null &&\n      { echo \"$as_me: error: invalid feature name: $ac_feature\" >&2\n   { (exit 1); exit 1; }; }\n    ac_feature=`echo $ac_feature | sed 's/-/_/g'`\n    eval enable_$ac_feature=no ;;\n\n  -docdir | --docdir | --docdi | --doc | --do)\n    ac_prev=docdir ;;\n  -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*)\n    docdir=$ac_optarg ;;\n\n  -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv)\n    ac_prev=dvidir ;;\n  -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*)\n    dvidir=$ac_optarg ;;\n\n  -enable-* | --enable-*)\n    ac_feature=`expr \"x$ac_option\" : 'x-*enable-\\([^=]*\\)'`\n    # Reject names that are not valid shell variable names.\n    expr \"x$ac_feature\" : \".*[^-_$as_cr_alnum]\" >/dev/null &&\n      { echo \"$as_me: error: invalid feature name: $ac_feature\" >&2\n   { (exit 1); exit 1; }; }\n    ac_feature=`echo $ac_feature | sed 's/-/_/g'`\n    eval enable_$ac_feature=\\$ac_optarg ;;\n\n  -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \\\n  | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \\\n  | --exec | --exe | --ex)\n    ac_prev=exec_prefix ;;\n  -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \\\n  | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \\\n  | --exec=* | --exe=* | --ex=*)\n    exec_prefix=$ac_optarg ;;\n\n  -gas | --gas | --ga | --g)\n    # Obsolete; use --with-gas.\n    with_gas=yes ;;\n\n  -help | --help | --hel | --he | -h)\n    ac_init_help=long ;;\n  -help=r* | --help=r* | --hel=r* | --he=r* | -hr*)\n    ac_init_help=recursive ;;\n  -help=s* | --help=s* | --hel=s* | --he=s* | -hs*)\n    ac_init_help=short ;;\n\n  -host | --host | --hos | --ho)\n    ac_prev=host_alias ;;\n  -host=* | --host=* | --hos=* | --ho=*)\n    host_alias=$ac_optarg ;;\n\n  -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht)\n    ac_prev=htmldir ;;\n  -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \\\n  | --ht=*)\n    htmldir=$ac_optarg ;;\n\n  -includedir | --includedir | --includedi | --included | --include \\\n  | --includ | --inclu | --incl | --inc)\n    ac_prev=includedir ;;\n  -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \\\n  | --includ=* | --inclu=* | --incl=* | --inc=*)\n    includedir=$ac_optarg ;;\n\n  -infodir | --infodir | --infodi | --infod | --info | --inf)\n    ac_prev=infodir ;;\n  -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*)\n    infodir=$ac_optarg ;;\n\n  -libdir | --libdir | --libdi | --libd)\n    ac_prev=libdir ;;\n  -libdir=* | --libdir=* | --libdi=* | --libd=*)\n    libdir=$ac_optarg ;;\n\n  -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \\\n  | --libexe | --libex | --libe)\n    ac_prev=libexecdir ;;\n  -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \\\n  | --libexe=* | --libex=* | --libe=*)\n    libexecdir=$ac_optarg ;;\n\n  -localedir | --localedir | --localedi | --localed | --locale)\n    ac_prev=localedir ;;\n  -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*)\n    localedir=$ac_optarg ;;\n\n  -localstatedir | --localstatedir | --localstatedi | --localstated \\\n  | --localstate | --localstat | --localsta | --localst | --locals)\n    ac_prev=localstatedir ;;\n  -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \\\n  | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*)\n    localstatedir=$ac_optarg ;;\n\n  -mandir | --mandir | --mandi | --mand | --man | --ma | --m)\n    ac_prev=mandir ;;\n  -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)\n    mandir=$ac_optarg ;;\n\n  -nfp | --nfp | --nf)\n    # Obsolete; use --without-fp.\n    with_fp=no ;;\n\n  -no-create | --no-create | --no-creat | --no-crea | --no-cre \\\n  | --no-cr | --no-c | -n)\n    no_create=yes ;;\n\n  -no-recursion | --no-recursion | --no-recursio | --no-recursi \\\n  | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r)\n    no_recursion=yes ;;\n\n  -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \\\n  | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \\\n  | --oldin | --oldi | --old | --ol | --o)\n    ac_prev=oldincludedir ;;\n  -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \\\n  | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \\\n  | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*)\n    oldincludedir=$ac_optarg ;;\n\n  -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)\n    ac_prev=prefix ;;\n  -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)\n    prefix=$ac_optarg ;;\n\n  -program-prefix | --program-prefix | --program-prefi | --program-pref \\\n  | --program-pre | --program-pr | --program-p)\n    ac_prev=program_prefix ;;\n  -program-prefix=* | --program-prefix=* | --program-prefi=* \\\n  | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*)\n    program_prefix=$ac_optarg ;;\n\n  -program-suffix | --program-suffix | --program-suffi | --program-suff \\\n  | --program-suf | --program-su | --program-s)\n    ac_prev=program_suffix ;;\n  -program-suffix=* | --program-suffix=* | --program-suffi=* \\\n  | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*)\n    program_suffix=$ac_optarg ;;\n\n  -program-transform-name | --program-transform-name \\\n  | --program-transform-nam | --program-transform-na \\\n  | --program-transform-n | --program-transform- \\\n  | --program-transform | --program-transfor \\\n  | --program-transfo | --program-transf \\\n  | --program-trans | --program-tran \\\n  | --progr-tra | --program-tr | --program-t)\n    ac_prev=program_transform_name ;;\n  -program-transform-name=* | --program-transform-name=* \\\n  | --program-transform-nam=* | --program-transform-na=* \\\n  | --program-transform-n=* | --program-transform-=* \\\n  | --program-transform=* | --program-transfor=* \\\n  | --program-transfo=* | --program-transf=* \\\n  | --program-trans=* | --program-tran=* \\\n  | --progr-tra=* | --program-tr=* | --program-t=*)\n    program_transform_name=$ac_optarg ;;\n\n  -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd)\n    ac_prev=pdfdir ;;\n  -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*)\n    pdfdir=$ac_optarg ;;\n\n  -psdir | --psdir | --psdi | --psd | --ps)\n    ac_prev=psdir ;;\n  -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*)\n    psdir=$ac_optarg ;;\n\n  -q | -quiet | --quiet | --quie | --qui | --qu | --q \\\n  | -silent | --silent | --silen | --sile | --sil)\n    silent=yes ;;\n\n  -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)\n    ac_prev=sbindir ;;\n  -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \\\n  | --sbi=* | --sb=*)\n    sbindir=$ac_optarg ;;\n\n  -sharedstatedir | --sharedstatedir | --sharedstatedi \\\n  | --sharedstated | --sharedstate | --sharedstat | --sharedsta \\\n  | --sharedst | --shareds | --shared | --share | --shar \\\n  | --sha | --sh)\n    ac_prev=sharedstatedir ;;\n  -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \\\n  | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \\\n  | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \\\n  | --sha=* | --sh=*)\n    sharedstatedir=$ac_optarg ;;\n\n  -site | --site | --sit)\n    ac_prev=site ;;\n  -site=* | --site=* | --sit=*)\n    site=$ac_optarg ;;\n\n  -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)\n    ac_prev=srcdir ;;\n  -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)\n    srcdir=$ac_optarg ;;\n\n  -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \\\n  | --syscon | --sysco | --sysc | --sys | --sy)\n    ac_prev=sysconfdir ;;\n  -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \\\n  | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*)\n    sysconfdir=$ac_optarg ;;\n\n  -target | --target | --targe | --targ | --tar | --ta | --t)\n    ac_prev=target_alias ;;\n  -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)\n    target_alias=$ac_optarg ;;\n\n  -v | -verbose | --verbose | --verbos | --verbo | --verb)\n    verbose=yes ;;\n\n  -version | --version | --versio | --versi | --vers | -V)\n    ac_init_version=: ;;\n\n  -with-* | --with-*)\n    ac_package=`expr \"x$ac_option\" : 'x-*with-\\([^=]*\\)'`\n    # Reject names that are not valid shell variable names.\n    expr \"x$ac_package\" : \".*[^-_$as_cr_alnum]\" >/dev/null &&\n      { echo \"$as_me: error: invalid package name: $ac_package\" >&2\n   { (exit 1); exit 1; }; }\n    ac_package=`echo $ac_package| sed 's/-/_/g'`\n    eval with_$ac_package=\\$ac_optarg ;;\n\n  -without-* | --without-*)\n    ac_package=`expr \"x$ac_option\" : 'x-*without-\\(.*\\)'`\n    # Reject names that are not valid shell variable names.\n    expr \"x$ac_package\" : \".*[^-_$as_cr_alnum]\" >/dev/null &&\n      { echo \"$as_me: error: invalid package name: $ac_package\" >&2\n   { (exit 1); exit 1; }; }\n    ac_package=`echo $ac_package | sed 's/-/_/g'`\n    eval with_$ac_package=no ;;\n\n  --x)\n    # Obsolete; use --with-x.\n    with_x=yes ;;\n\n  -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \\\n  | --x-incl | --x-inc | --x-in | --x-i)\n    ac_prev=x_includes ;;\n  -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \\\n  | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*)\n    x_includes=$ac_optarg ;;\n\n  -x-libraries | --x-libraries | --x-librarie | --x-librari \\\n  | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l)\n    ac_prev=x_libraries ;;\n  -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \\\n  | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)\n    x_libraries=$ac_optarg ;;\n\n  -*) { echo \"$as_me: error: unrecognized option: $ac_option\nTry \\`$0 --help' for more information.\" >&2\n   { (exit 1); exit 1; }; }\n    ;;\n\n  *=*)\n    ac_envvar=`expr \"x$ac_option\" : 'x\\([^=]*\\)='`\n    # Reject names that are not valid shell variable names.\n    expr \"x$ac_envvar\" : \".*[^_$as_cr_alnum]\" >/dev/null &&\n      { echo \"$as_me: error: invalid variable name: $ac_envvar\" >&2\n   { (exit 1); exit 1; }; }\n    eval $ac_envvar=\\$ac_optarg\n    export $ac_envvar ;;\n\n  *)\n    # FIXME: should be removed in autoconf 3.0.\n    echo \"$as_me: WARNING: you should use --build, --host, --target\" >&2\n    expr \"x$ac_option\" : \".*[^-._$as_cr_alnum]\" >/dev/null &&\n      echo \"$as_me: WARNING: invalid host type: $ac_option\" >&2\n    : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}\n    ;;\n\n  esac\ndone\n\nif test -n \"$ac_prev\"; then\n  ac_option=--`echo $ac_prev | sed 's/_/-/g'`\n  { echo \"$as_me: error: missing argument to $ac_option\" >&2\n   { (exit 1); exit 1; }; }\nfi\n\n# Be sure to have absolute directory names.\nfor ac_var in\texec_prefix prefix bindir sbindir libexecdir datarootdir \\\n\t\tdatadir sysconfdir sharedstatedir localstatedir includedir \\\n\t\toldincludedir docdir infodir htmldir dvidir pdfdir psdir \\\n\t\tlibdir localedir mandir\ndo\n  eval ac_val=\\$$ac_var\n  case $ac_val in\n    [\\\\/$]* | ?:[\\\\/]* )  continue;;\n    NONE | '' ) case $ac_var in *prefix ) continue;; esac;;\n  esac\n  { echo \"$as_me: error: expected an absolute directory name for --$ac_var: $ac_val\" >&2\n   { (exit 1); exit 1; }; }\ndone\n\n# There might be people who depend on the old broken behavior: `$host'\n# used to hold the argument of --host etc.\n# FIXME: To remove some day.\nbuild=$build_alias\nhost=$host_alias\ntarget=$target_alias\n\n# FIXME: To remove some day.\nif test \"x$host_alias\" != x; then\n  if test \"x$build_alias\" = x; then\n    cross_compiling=maybe\n    echo \"$as_me: WARNING: If you wanted to set the --build type, don't use --host.\n    If a cross compiler is detected then cross compile mode will be used.\" >&2\n  elif test \"x$build_alias\" != \"x$host_alias\"; then\n    cross_compiling=yes\n  fi\nfi\n\nac_tool_prefix=\ntest -n \"$host_alias\" && ac_tool_prefix=$host_alias-\n\ntest \"$silent\" = yes && exec 6>/dev/null\n\n\nac_pwd=`pwd` && test -n \"$ac_pwd\" &&\nac_ls_di=`ls -di .` &&\nac_pwd_ls_di=`cd \"$ac_pwd\" && ls -di .` ||\n  { echo \"$as_me: error: Working directory cannot be determined\" >&2\n   { (exit 1); exit 1; }; }\ntest \"X$ac_ls_di\" = \"X$ac_pwd_ls_di\" ||\n  { echo \"$as_me: error: pwd does not report name of working directory\" >&2\n   { (exit 1); exit 1; }; }\n\n\n# Find the source files, if location was not specified.\nif test -z \"$srcdir\"; then\n  ac_srcdir_defaulted=yes\n  # Try the directory containing this script, then the parent directory.\n  ac_confdir=`$as_dirname -- \"$0\" ||\n$as_expr X\"$0\" : 'X\\(.*[^/]\\)//*[^/][^/]*/*$' \\| \\\n\t X\"$0\" : 'X\\(//\\)[^/]' \\| \\\n\t X\"$0\" : 'X\\(//\\)$' \\| \\\n\t X\"$0\" : 'X\\(/\\)' \\| . 2>/dev/null ||\necho X\"$0\" |\n    sed '/^X\\(.*[^/]\\)\\/\\/*[^/][^/]*\\/*$/{\n\t    s//\\1/\n\t    q\n\t  }\n\t  /^X\\(\\/\\/\\)[^/].*/{\n\t    s//\\1/\n\t    q\n\t  }\n\t  /^X\\(\\/\\/\\)$/{\n\t    s//\\1/\n\t    q\n\t  }\n\t  /^X\\(\\/\\).*/{\n\t    s//\\1/\n\t    q\n\t  }\n\t  s/.*/./; q'`\n  srcdir=$ac_confdir\n  if test ! -r \"$srcdir/$ac_unique_file\"; then\n    srcdir=..\n  fi\nelse\n  ac_srcdir_defaulted=no\nfi\nif test ! -r \"$srcdir/$ac_unique_file\"; then\n  test \"$ac_srcdir_defaulted\" = yes && srcdir=\"$ac_confdir or ..\"\n  { echo \"$as_me: error: cannot find sources ($ac_unique_file) in $srcdir\" >&2\n   { (exit 1); exit 1; }; }\nfi\nac_msg=\"sources are in $srcdir, but \\`cd $srcdir' does not work\"\nac_abs_confdir=`(\n\tcd \"$srcdir\" && test -r \"./$ac_unique_file\" || { echo \"$as_me: error: $ac_msg\" >&2\n   { (exit 1); exit 1; }; }\n\tpwd)`\n# When building in place, set srcdir=.\nif test \"$ac_abs_confdir\" = \"$ac_pwd\"; then\n  srcdir=.\nfi\n# Remove unnecessary trailing slashes from srcdir.\n# Double slashes in file names in object file debugging info\n# mess up M-x gdb in Emacs.\ncase $srcdir in\n*/) srcdir=`expr \"X$srcdir\" : 'X\\(.*[^/]\\)' \\| \"X$srcdir\" : 'X\\(.*\\)'`;;\nesac\nfor ac_var in $ac_precious_vars; do\n  eval ac_env_${ac_var}_set=\\${${ac_var}+set}\n  eval ac_env_${ac_var}_value=\\$${ac_var}\n  eval ac_cv_env_${ac_var}_set=\\${${ac_var}+set}\n  eval ac_cv_env_${ac_var}_value=\\$${ac_var}\ndone\n\n#\n# Report the --help message.\n#\nif test \"$ac_init_help\" = \"long\"; then\n  # Omit some internal or obsolete options to make the list less imposing.\n  # This message is too long to be a string in the A/UX 3.1 sh.\n  cat <<_ACEOF\n\\`configure' configures this package to adapt to many kinds of systems.\n\nUsage: $0 [OPTION]... [VAR=VALUE]...\n\nTo assign environment variables (e.g., CC, CFLAGS...), specify them as\nVAR=VALUE.  See below for descriptions of some of the useful variables.\n\nDefaults for the options are specified in brackets.\n\nConfiguration:\n  -h, --help              display this help and exit\n      --help=short        display options specific to this package\n      --help=recursive    display the short help of all the included packages\n  -V, --version           display version information and exit\n  -q, --quiet, --silent   do not print \\`checking...' messages\n      --cache-file=FILE   cache test results in FILE [disabled]\n  -C, --config-cache      alias for \\`--cache-file=config.cache'\n  -n, --no-create         do not create output files\n      --srcdir=DIR        find the sources in DIR [configure dir or \\`..']\n\nInstallation directories:\n  --prefix=PREFIX         install architecture-independent files in PREFIX\n\t\t\t  [$ac_default_prefix]\n  --exec-prefix=EPREFIX   install architecture-dependent files in EPREFIX\n\t\t\t  [PREFIX]\n\nBy default, \\`make install' will install all the files in\n\\`$ac_default_prefix/bin', \\`$ac_default_prefix/lib' etc.  You can specify\nan installation prefix other than \\`$ac_default_prefix' using \\`--prefix',\nfor instance \\`--prefix=\\$HOME'.\n\nFor better control, use the options below.\n\nFine tuning of the installation directories:\n  --bindir=DIR           user executables [EPREFIX/bin]\n  --sbindir=DIR          system admin executables [EPREFIX/sbin]\n  --libexecdir=DIR       program executables [EPREFIX/libexec]\n  --sysconfdir=DIR       read-only single-machine data [PREFIX/etc]\n  --sharedstatedir=DIR   modifiable architecture-independent data [PREFIX/com]\n  --localstatedir=DIR    modifiable single-machine data [PREFIX/var]\n  --libdir=DIR           object code libraries [EPREFIX/lib]\n  --includedir=DIR       C header files [PREFIX/include]\n  --oldincludedir=DIR    C header files for non-gcc [/usr/include]\n  --datarootdir=DIR      read-only arch.-independent data root [PREFIX/share]\n  --datadir=DIR          read-only architecture-independent data [DATAROOTDIR]\n  --infodir=DIR          info documentation [DATAROOTDIR/info]\n  --localedir=DIR        locale-dependent data [DATAROOTDIR/locale]\n  --mandir=DIR           man documentation [DATAROOTDIR/man]\n  --docdir=DIR           documentation root [DATAROOTDIR/doc/PACKAGE]\n  --htmldir=DIR          html documentation [DOCDIR]\n  --dvidir=DIR           dvi documentation [DOCDIR]\n  --pdfdir=DIR           pdf documentation [DOCDIR]\n  --psdir=DIR            ps documentation [DOCDIR]\n_ACEOF\n\n  cat <<\\_ACEOF\n\nProgram names:\n  --program-prefix=PREFIX            prepend PREFIX to installed program names\n  --program-suffix=SUFFIX            append SUFFIX to installed program names\n  --program-transform-name=PROGRAM   run sed PROGRAM on installed program names\n\nSystem types:\n  --build=BUILD     configure for building on BUILD [guessed]\n  --host=HOST       cross-compile to build programs to run on HOST [BUILD]\n_ACEOF\nfi\n\nif test -n \"$ac_init_help\"; then\n\n  cat <<\\_ACEOF\n\nOptional Features:\n  --disable-FEATURE       do not include FEATURE (same as --enable-FEATURE=no)\n  --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]\n  --enable-shared[=PKGS]  build shared libraries [default=yes]\n  --enable-static[=PKGS]  build static libraries [default=yes]\n  --enable-fast-install[=PKGS]\n                          optimize for fast installation [default=yes]\n  --disable-libtool-lock  avoid locking (might break parallel builds)\n\nOptional Packages:\n  --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]\n  --without-PACKAGE       do not use PACKAGE (same as --with-PACKAGE=no)\n  --with-gnu-ld           assume the C compiler uses GNU ld [default=no]\n  --with-pic              try to use only PIC/non-PIC objects [default=use\n                          both]\n  --with-tags[=TAGS]      include additional configurations [automatic]\n\nSome influential environment variables:\n  CC          C compiler command\n  CFLAGS      C compiler flags\n  LDFLAGS     linker flags, e.g. -L<lib dir> if you have libraries in a\n              nonstandard directory <lib dir>\n  CPPFLAGS    C/C++/Objective C preprocessor flags, e.g. -I<include dir> if\n              you have headers in a nonstandard directory <include dir>\n  CPP         C preprocessor\n  CXX         C++ compiler command\n  CXXFLAGS    C++ compiler flags\n  CXXCPP      C++ preprocessor\n  F77         Fortran 77 compiler command\n  FFLAGS      Fortran 77 compiler flags\n\nUse these variables to override the choices made by `configure' or to help\nit to find libraries and programs with nonstandard names/locations.\n\n_ACEOF\nac_status=$?\nfi\n\nif test \"$ac_init_help\" = \"recursive\"; then\n  # If there are subdirs, report their specific --help.\n  for ac_dir in : $ac_subdirs_all; do test \"x$ac_dir\" = x: && continue\n    test -d \"$ac_dir\" || continue\n    ac_builddir=.\n\ncase \"$ac_dir\" in\n.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;\n*)\n  ac_dir_suffix=/`echo \"$ac_dir\" | sed 's,^\\.[\\\\/],,'`\n  # A \"..\" for each directory in $ac_dir_suffix.\n  ac_top_builddir_sub=`echo \"$ac_dir_suffix\" | sed 's,/[^\\\\/]*,/..,g;s,/,,'`\n  case $ac_top_builddir_sub in\n  \"\") ac_top_builddir_sub=. ac_top_build_prefix= ;;\n  *)  ac_top_build_prefix=$ac_top_builddir_sub/ ;;\n  esac ;;\nesac\nac_abs_top_builddir=$ac_pwd\nac_abs_builddir=$ac_pwd$ac_dir_suffix\n# for backward compatibility:\nac_top_builddir=$ac_top_build_prefix\n\ncase $srcdir in\n  .)  # We are building in place.\n    ac_srcdir=.\n    ac_top_srcdir=$ac_top_builddir_sub\n    ac_abs_top_srcdir=$ac_pwd ;;\n  [\\\\/]* | ?:[\\\\/]* )  # Absolute name.\n    ac_srcdir=$srcdir$ac_dir_suffix;\n    ac_top_srcdir=$srcdir\n    ac_abs_top_srcdir=$srcdir ;;\n  *) # Relative name.\n    ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix\n    ac_top_srcdir=$ac_top_build_prefix$srcdir\n    ac_abs_top_srcdir=$ac_pwd/$srcdir ;;\nesac\nac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix\n\n    cd \"$ac_dir\" || { ac_status=$?; continue; }\n    # Check for guested configure.\n    if test -f \"$ac_srcdir/configure.gnu\"; then\n      echo &&\n      $SHELL \"$ac_srcdir/configure.gnu\" --help=recursive\n    elif test -f \"$ac_srcdir/configure\"; then\n      echo &&\n      $SHELL \"$ac_srcdir/configure\" --help=recursive\n    else\n      echo \"$as_me: WARNING: no configuration information is in $ac_dir\" >&2\n    fi || ac_status=$?\n    cd \"$ac_pwd\" || { ac_status=$?; break; }\n  done\nfi\n\ntest -n \"$ac_init_help\" && exit $ac_status\nif $ac_init_version; then\n  cat <<\\_ACEOF\nconfigure\ngenerated by GNU Autoconf 2.59d\n\nCopyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,\n2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.\nThis configure script is free software; the Free Software Foundation\ngives unlimited permission to copy, distribute and modify it.\n_ACEOF\n  exit\nfi\ncat >config.log <<_ACEOF\nThis file contains any messages produced by compilers while\nrunning configure, to aid debugging if configure makes a mistake.\n\nIt was created by $as_me, which was\ngenerated by GNU Autoconf 2.59d.  Invocation command line was\n\n  $ $0 $@\n\n_ACEOF\nexec 5>>config.log\n{\ncat <<_ASUNAME\n## --------- ##\n## Platform. ##\n## --------- ##\n\nhostname = `(hostname || uname -n) 2>/dev/null | sed 1q`\nuname -m = `(uname -m) 2>/dev/null || echo unknown`\nuname -r = `(uname -r) 2>/dev/null || echo unknown`\nuname -s = `(uname -s) 2>/dev/null || echo unknown`\nuname -v = `(uname -v) 2>/dev/null || echo unknown`\n\n/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown`\n/bin/uname -X     = `(/bin/uname -X) 2>/dev/null     || echo unknown`\n\n/bin/arch              = `(/bin/arch) 2>/dev/null              || echo unknown`\n/usr/bin/arch -k       = `(/usr/bin/arch -k) 2>/dev/null       || echo unknown`\n/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown`\n/usr/bin/hostinfo      = `(/usr/bin/hostinfo) 2>/dev/null      || echo unknown`\n/bin/machine           = `(/bin/machine) 2>/dev/null           || echo unknown`\n/usr/bin/oslevel       = `(/usr/bin/oslevel) 2>/dev/null       || echo unknown`\n/bin/universe          = `(/bin/universe) 2>/dev/null          || echo unknown`\n\n_ASUNAME\n\nas_save_IFS=$IFS; IFS=$PATH_SEPARATOR\nfor as_dir in $PATH\ndo\n  IFS=$as_save_IFS\n  test -z \"$as_dir\" && as_dir=.\n  echo \"PATH: $as_dir\"\ndone\nIFS=$as_save_IFS\n\n} >&5\n\ncat >&5 <<_ACEOF\n\n\n## ----------- ##\n## Core tests. ##\n## ----------- ##\n\n_ACEOF\n\n\n# Keep a trace of the command line.\n# Strip out --no-create and --no-recursion so they do not pile up.\n# Strip out --silent because we don't want to record it for future runs.\n# Also quote any args containing shell meta-characters.\n# Make two passes to allow for proper duplicate-argument suppression.\nac_configure_args=\nac_configure_args0=\nac_configure_args1=\nac_sep=\nac_must_keep_next=false\nfor ac_pass in 1 2\ndo\n  for ac_arg\n  do\n    case $ac_arg in\n    -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;;\n    -q | -quiet | --quiet | --quie | --qui | --qu | --q \\\n    | -silent | --silent | --silen | --sile | --sil)\n      continue ;;\n    *\\'*)\n      ac_arg=`echo \"$ac_arg\" | sed \"s/'/'\\\\\\\\\\\\\\\\''/g\"` ;;\n    esac\n    case $ac_pass in\n    1) ac_configure_args0=\"$ac_configure_args0 '$ac_arg'\" ;;\n    2)\n      ac_configure_args1=\"$ac_configure_args1 '$ac_arg'\"\n      if test $ac_must_keep_next = true; then\n\tac_must_keep_next=false # Got value, back to normal.\n      else\n\tcase $ac_arg in\n\t  *=* | --config-cache | -C | -disable-* | --disable-* \\\n\t  | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \\\n\t  | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \\\n\t  | -with-* | --with-* | -without-* | --without-* | --x)\n\t    case \"$ac_configure_args0 \" in\n\t      \"$ac_configure_args1\"*\" '$ac_arg' \"* ) continue ;;\n\t    esac\n\t    ;;\n\t  -* ) ac_must_keep_next=true ;;\n\tesac\n      fi\n      ac_configure_args=\"$ac_configure_args$ac_sep'$ac_arg'\"\n      # Get rid of the leading space.\n      ac_sep=\" \"\n      ;;\n    esac\n  done\ndone\n$as_unset ac_configure_args0 || test \"${ac_configure_args0+set}\" != set || { ac_configure_args0=; export ac_configure_args0; }\n$as_unset ac_configure_args1 || test \"${ac_configure_args1+set}\" != set || { ac_configure_args1=; export ac_configure_args1; }\n\n# When interrupted or exit'd, cleanup temporary files, and complete\n# config.log.  We remove comments because anyway the quotes in there\n# would cause problems or look ugly.\n# WARNING: Use '\\'' to represent an apostrophe within the trap.\n# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug.\ntrap 'exit_status=$?\n  # Save into config.log some information that might help in debugging.\n  {\n    echo\n\n    cat <<\\_ASBOX\n## ---------------- ##\n## Cache variables. ##\n## ---------------- ##\n_ASBOX\n    echo\n    # The following way of writing the cache mishandles newlines in values,\n(\n  for ac_var in `(set) 2>&1 | sed -n '\\''s/^\\([a-zA-Z_][a-zA-Z0-9_]*\\)=.*/\\1/p'\\''`; do\n    eval ac_val=\\$$ac_var\n    case $ac_val in #(\n    *${as_nl}*)\n      case $ac_var in #(\n      *_cv_*) { echo \"$as_me:$LINENO: WARNING: Cache variable $ac_var contains a newline.\" >&5\necho \"$as_me: WARNING: Cache variable $ac_var contains a newline.\" >&2;} ;;\n      esac\n      case $ac_var in #(\n      _ | IFS | as_nl) ;; #(\n      *) $as_unset $ac_var ;;\n      esac ;;\n    esac\n  done\n  (set) 2>&1 |\n    case $as_nl`(ac_space='\\'' '\\''; set) 2>&1` in #(\n    *${as_nl}ac_space=\\ *)\n      sed -n \\\n\t\"s/'\\''/'\\''\\\\\\\\'\\'''\\''/g;\n\t  s/^\\\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\\\)=\\\\(.*\\\\)/\\\\1='\\''\\\\2'\\''/p\"\n      ;; #(\n    *)\n      sed -n \"/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p\"\n      ;;\n    esac |\n    sort\n)\n    echo\n\n    cat <<\\_ASBOX\n## ----------------- ##\n## Output variables. ##\n## ----------------- ##\n_ASBOX\n    echo\n    for ac_var in $ac_subst_vars\n    do\n      eval ac_val=\\$$ac_var\n      echo \"$ac_var='\\''$ac_val'\\''\"\n    done | sort\n    echo\n\n    if test -n \"$ac_subst_files\"; then\n      cat <<\\_ASBOX\n## ------------------- ##\n## File substitutions. ##\n## ------------------- ##\n_ASBOX\n      echo\n      for ac_var in $ac_subst_files\n      do\n\teval ac_val=\\$$ac_var\n\techo \"$ac_var='\\''$ac_val'\\''\"\n      done | sort\n      echo\n    fi\n\n    if test -s confdefs.h; then\n      cat <<\\_ASBOX\n## ----------- ##\n## confdefs.h. ##\n## ----------- ##\n_ASBOX\n      echo\n      cat confdefs.h\n      echo\n    fi\n    test \"$ac_signal\" != 0 &&\n      echo \"$as_me: caught signal $ac_signal\"\n    echo \"$as_me: exit $exit_status\"\n  } >&5\n  rm -f core *.core core.conftest.* &&\n    rm -f -r conftest* confdefs* conf$$* $ac_clean_files &&\n    exit $exit_status\n' 0\nfor ac_signal in 1 2 13 15; do\n  trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal\ndone\nac_signal=0\n\n# confdefs.h avoids OS command line length limits that DEFS can exceed.\nrm -f -r conftest* confdefs.h\n\n# Predefined preprocessor variables.\n\ncat >>confdefs.h <<_ACEOF\n#define PACKAGE_NAME \"$PACKAGE_NAME\"\n_ACEOF\n\n\ncat >>confdefs.h <<_ACEOF\n#define PACKAGE_TARNAME \"$PACKAGE_TARNAME\"\n_ACEOF\n\n\ncat >>confdefs.h <<_ACEOF\n#define PACKAGE_VERSION \"$PACKAGE_VERSION\"\n_ACEOF\n\n\ncat >>confdefs.h <<_ACEOF\n#define PACKAGE_STRING \"$PACKAGE_STRING\"\n_ACEOF\n\n\ncat >>confdefs.h <<_ACEOF\n#define PACKAGE_BUGREPORT \"$PACKAGE_BUGREPORT\"\n_ACEOF\n\n\n# Let the site file select an alternate cache file if it wants to.\n# Prefer explicitly selected file to automatically selected ones.\nif test -n \"$CONFIG_SITE\"; then\n  set x \"$CONFIG_SITE\"\nelif test \"x$prefix\" != xNONE; then\n  set x \"$prefix/share/config.site\" \"$prefix/etc/config.site\"\nelse\n  set x \"$ac_default_prefix/share/config.site\" \\\n\t\"$ac_default_prefix/etc/config.site\"\nfi\nshift\nfor ac_site_file\ndo\n  if test -r \"$ac_site_file\"; then\n    { echo \"$as_me:$LINENO: loading site script $ac_site_file\" >&5\necho \"$as_me: loading site script $ac_site_file\" >&6;}\n    sed 's/^/| /' \"$ac_site_file\" >&5\n    . \"$ac_site_file\"\n  fi\ndone\n\nif test -r \"$cache_file\"; then\n  # Some versions of bash will fail to source /dev/null (special\n  # files actually), so we avoid doing that.\n  if test -f \"$cache_file\"; then\n    { echo \"$as_me:$LINENO: loading cache $cache_file\" >&5\necho \"$as_me: loading cache $cache_file\" >&6;}\n    case $cache_file in\n      [\\\\/]* | ?:[\\\\/]* ) . \"$cache_file\";;\n      *)                      . \"./$cache_file\";;\n    esac\n  fi\nelse\n  { echo \"$as_me:$LINENO: creating cache $cache_file\" >&5\necho \"$as_me: creating cache $cache_file\" >&6;}\n  >$cache_file\nfi\n\n# Check that the precious variables saved in the cache have kept the same\n# value.\nac_cache_corrupted=false\nfor ac_var in $ac_precious_vars; do\n  eval ac_old_set=\\$ac_cv_env_${ac_var}_set\n  eval ac_new_set=\\$ac_env_${ac_var}_set\n  eval ac_old_val=\\$ac_cv_env_${ac_var}_value\n  eval ac_new_val=\\$ac_env_${ac_var}_value\n  case $ac_old_set,$ac_new_set in\n    set,)\n      { echo \"$as_me:$LINENO: error: \\`$ac_var' was set to \\`$ac_old_val' in the previous run\" >&5\necho \"$as_me: error: \\`$ac_var' was set to \\`$ac_old_val' in the previous run\" >&2;}\n      ac_cache_corrupted=: ;;\n    ,set)\n      { echo \"$as_me:$LINENO: error: \\`$ac_var' was not set in the previous run\" >&5\necho \"$as_me: error: \\`$ac_var' was not set in the previous run\" >&2;}\n      ac_cache_corrupted=: ;;\n    ,);;\n    *)\n      if test \"x$ac_old_val\" != \"x$ac_new_val\"; then\n\t{ echo \"$as_me:$LINENO: error: \\`$ac_var' has changed since the previous run:\" >&5\necho \"$as_me: error: \\`$ac_var' has changed since the previous run:\" >&2;}\n\t{ echo \"$as_me:$LINENO:   former value:  $ac_old_val\" >&5\necho \"$as_me:   former value:  $ac_old_val\" >&2;}\n\t{ echo \"$as_me:$LINENO:   current value: $ac_new_val\" >&5\necho \"$as_me:   current value: $ac_new_val\" >&2;}\n\tac_cache_corrupted=:\n      fi;;\n  esac\n  # Pass precious variables to config.status.\n  if test \"$ac_new_set\" = set; then\n    case $ac_new_val in\n    *\\'*) ac_arg=$ac_var=`echo \"$ac_new_val\" | sed \"s/'/'\\\\\\\\\\\\\\\\''/g\"` ;;\n    *) ac_arg=$ac_var=$ac_new_val ;;\n    esac\n    case \" $ac_configure_args \" in\n      *\" '$ac_arg' \"*) ;; # Avoid dups.  Use of quotes ensures accuracy.\n      *) ac_configure_args=\"$ac_configure_args '$ac_arg'\" ;;\n    esac\n  fi\ndone\nif $ac_cache_corrupted; then\n  { echo \"$as_me:$LINENO: error: changes in the environment can compromise the build\" >&5\necho \"$as_me: error: changes in the environment can compromise the build\" >&2;}\n  { { echo \"$as_me:$LINENO: error: run \\`make distclean' and/or \\`rm $cache_file' and start over\" >&5\necho \"$as_me: error: run \\`make distclean' and/or \\`rm $cache_file' and start over\" >&2;}\n   { (exit 1); exit 1; }; }\nfi\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nac_ext=c\nac_cpp='$CPP $CPPFLAGS'\nac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'\nac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'\nac_compiler_gnu=$ac_cv_c_compiler_gnu\n\n\nam__api_version=\"1.4\"\nac_aux_dir=\nfor ac_dir in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"; do\n  if test -f \"$ac_dir/install-sh\"; then\n    ac_aux_dir=$ac_dir\n    ac_install_sh=\"$ac_aux_dir/install-sh -c\"\n    break\n  elif test -f \"$ac_dir/install.sh\"; then\n    ac_aux_dir=$ac_dir\n    ac_install_sh=\"$ac_aux_dir/install.sh -c\"\n    break\n  elif test -f \"$ac_dir/shtool\"; then\n    ac_aux_dir=$ac_dir\n    ac_install_sh=\"$ac_aux_dir/shtool install -c\"\n    break\n  fi\ndone\nif test -z \"$ac_aux_dir\"; then\n  { { echo \"$as_me:$LINENO: error: cannot find install-sh or install.sh in \\\"$srcdir\\\" \\\"$srcdir/..\\\" \\\"$srcdir/../..\\\"\" >&5\necho \"$as_me: error: cannot find install-sh or install.sh in \\\"$srcdir\\\" \\\"$srcdir/..\\\" \\\"$srcdir/../..\\\"\" >&2;}\n   { (exit 1); exit 1; }; }\nfi\n\n# These three variables are undocumented and unsupported,\n# and are intended to be withdrawn in a future Autoconf release.\n# They can cause serious problems if a builder's source tree is in a directory\n# whose full name contains unusual characters.\nac_config_guess=\"$SHELL $ac_aux_dir/config.guess\"  # Please don't use this var.\nac_config_sub=\"$SHELL $ac_aux_dir/config.sub\"  # Please don't use this var.\nac_configure=\"$SHELL $ac_aux_dir/configure\"  # Please don't use this var.\n\n\n# Find a good install program.  We prefer a C program (faster),\n# so one script is as good as another.  But avoid the broken or\n# incompatible versions:\n# SysV /etc/install, /usr/sbin/install\n# SunOS /usr/etc/install\n# IRIX /sbin/install\n# AIX /bin/install\n# AmigaOS /C/install, which installs bootblocks on floppy discs\n# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag\n# AFS /usr/afsws/bin/install, which mishandles nonexistent args\n# SVR4 /usr/ucb/install, which tries to use the nonexistent group \"staff\"\n# OS/2's system install, which has a completely different semantic\n# ./install, which can be erroneously created by make from ./install.sh.\n{ echo \"$as_me:$LINENO: checking for a BSD-compatible install\" >&5\necho $ECHO_N \"checking for a BSD-compatible install... $ECHO_C\" >&6; }\nif test -z \"$INSTALL\"; then\nif test \"${ac_cv_path_install+set}\" = set; then\n  echo $ECHO_N \"(cached) $ECHO_C\" >&6\nelse\n  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR\nfor as_dir in $PATH\ndo\n  IFS=$as_save_IFS\n  test -z \"$as_dir\" && as_dir=.\n  # Account for people who put trailing slashes in PATH elements.\ncase $as_dir/ in\n  ./ | .// | /cC/* | \\\n  /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \\\n  ?:\\\\/os2\\\\/install\\\\/* | ?:\\\\/OS2\\\\/INSTALL\\\\/* | \\\n  /usr/ucb/* ) ;;\n  *)\n    # OSF1 and SCO ODT 3.0 have their own names for install.\n    # Don't use installbsd from OSF since it installs stuff as root\n    # by default.\n    for ac_prog in ginstall scoinst install; do\n      for ac_exec_ext in '' $ac_executable_extensions; do\n\tif { test -f \"$as_dir/$ac_prog$ac_exec_ext\" && $as_executable_p \"$as_dir/$ac_prog$ac_exec_ext\"; }; then\n\t  if test $ac_prog = install &&\n\t    grep dspmsg \"$as_dir/$ac_prog$ac_exec_ext\" >/dev/null 2>&1; then\n\t    # AIX install.  It has an incompatible calling convention.\n\t    :\n\t  elif test $ac_prog = install &&\n\t    grep pwplus \"$as_dir/$ac_prog$ac_exec_ext\" >/dev/null 2>&1; then\n\t    # program-specific install script used by HP pwplus--don't use.\n\t    :\n\t  else\n\t    ac_cv_path_install=\"$as_dir/$ac_prog$ac_exec_ext -c\"\n\t    break 3\n\t  fi\n\tfi\n      done\n    done\n    ;;\nesac\ndone\nIFS=$as_save_IFS\n\n\nfi\n  if test \"${ac_cv_path_install+set}\" = set; then\n    INSTALL=$ac_cv_path_install\n  else\n    # As a last resort, use the slow shell script.  Don't cache a\n    # value for INSTALL within a source directory, because that will\n    # break other packages using the cache if that directory is\n    # removed, or if the value is a relative name.\n    INSTALL=$ac_install_sh\n  fi\nfi\n{ echo \"$as_me:$LINENO: result: $INSTALL\" >&5\necho \"${ECHO_T}$INSTALL\" >&6; }\n\n# Use test -z because SunOS4 sh mishandles braces in ${var-val}.\n# It thinks the first close brace ends the variable substitution.\ntest -z \"$INSTALL_PROGRAM\" && INSTALL_PROGRAM='${INSTALL}'\n\ntest -z \"$INSTALL_SCRIPT\" && INSTALL_SCRIPT='${INSTALL}'\n\ntest -z \"$INSTALL_DATA\" && INSTALL_DATA='${INSTALL} -m 644'\n\n{ echo \"$as_me:$LINENO: checking whether build environment is sane\" >&5\necho $ECHO_N \"checking whether build environment is sane... $ECHO_C\" >&6; }\n# Just in case\nsleep 1\necho timestamp > conftestfile\n# Do `set' in a subshell so we don't clobber the current shell's\n# arguments.  Must try -L first in case configure is actually a\n# symlink; some systems play weird games with the mod time of symlinks\n# (eg FreeBSD returns the mod time of the symlink's containing\n# directory).\nif (\n   set X `ls -Lt $srcdir/configure conftestfile 2> /dev/null`\n   if test \"$*\" = \"X\"; then\n      # -L didn't work.\n      set X `ls -t $srcdir/configure conftestfile`\n   fi\n   if test \"$*\" != \"X $srcdir/configure conftestfile\" \\\n      && test \"$*\" != \"X conftestfile $srcdir/configure\"; then\n\n      # If neither matched, then we have a broken ls.  This can happen\n      # if, for instance, CONFIG_SHELL is bash and it inherits a\n      # broken ls alias from the environment.  This has actually\n      # happened.  Such a system could not be considered \"sane\".\n      { { echo \"$as_me:$LINENO: error: ls -t appears to fail.  Make sure there is not a broken\nalias in your environment\" >&5\necho \"$as_me: error: ls -t appears to fail.  Make sure there is not a broken\nalias in your environment\" >&2;}\n   { (exit 1); exit 1; }; }\n   fi\n\n   test \"$2\" = conftestfile\n   )\nthen\n   # Ok.\n   :\nelse\n   { { echo \"$as_me:$LINENO: error: newly created file is older than distributed files!\nCheck your system clock\" >&5\necho \"$as_me: error: newly created file is older than distributed files!\nCheck your system clock\" >&2;}\n   { (exit 1); exit 1; }; }\nfi\nrm -f conftest*\n{ echo \"$as_me:$LINENO: result: yes\" >&5\necho \"${ECHO_T}yes\" >&6; }\ntest \"$program_prefix\" != NONE &&\n  program_transform_name=\"s&^&$program_prefix&;$program_transform_name\"\n# Use a double $ so make ignores it.\ntest \"$program_suffix\" != NONE &&\n  program_transform_name=\"s&\\$&$program_suffix&;$program_transform_name\"\n# Double any \\ or $.  echo might interpret backslashes.\n# By default was `s,x,x', remove it if useless.\ncat <<\\_ACEOF >conftest.sed\ns/[\\\\$]/&&/g;s/;s,x,x,$//\n_ACEOF\nprogram_transform_name=`echo $program_transform_name | sed -f conftest.sed`\nrm -f conftest.sed\n\n{ echo \"$as_me:$LINENO: checking whether ${MAKE-make} sets \\$(MAKE)\" >&5\necho $ECHO_N \"checking whether ${MAKE-make} sets \\$(MAKE)... $ECHO_C\" >&6; }\nset dummy ${MAKE-make}; ac_make=`echo \"$2\" | sed 'y,:./+-,___p_,'`\nif { as_var=ac_cv_prog_make_${ac_make}_set; eval \"test \\\"\\${$as_var+set}\\\" = set\"; }; then\n  echo $ECHO_N \"(cached) $ECHO_C\" >&6\nelse\n  cat >conftest.make <<\\_ACEOF\nSHELL = /bin/sh\nall:\n\t@echo 'ac_maketemp=X\"$(MAKE)\"'\n_ACEOF\n# GNU make sometimes prints \"make[1]: Entering...\", which would confuse us.\neval `${MAKE-make} -f conftest.make 2>/dev/null | grep temp=`\nif test \"$ac_maketemp\" != X ; then\n  eval ac_cv_prog_make_${ac_make}_set=yes\nelse\n  eval ac_cv_prog_make_${ac_make}_set=no\nfi\nrm -f conftest.make\nfi\nif eval \"test \\\"`echo '$ac_cv_prog_make_'${ac_make}_set`\\\" = yes\"; then\n  { echo \"$as_me:$LINENO: result: yes\" >&5\necho \"${ECHO_T}yes\" >&6; }\n  SET_MAKE=\nelse\n  { echo \"$as_me:$LINENO: result: no\" >&5\necho \"${ECHO_T}no\" >&6; }\n  SET_MAKE=\"MAKE=${MAKE-make}\"\nfi\n\n\nPACKAGE=libvpsc\n\nVERSION=1.0\n\nif test \"`cd $srcdir && pwd`\" != \"`pwd`\" && test -f $srcdir/config.status; then\n  { { echo \"$as_me:$LINENO: error: source directory already configured; run \\\"make distclean\\\" there first\" >&5\necho \"$as_me: error: source directory already configured; run \\\"make distclean\\\" there first\" >&2;}\n   { (exit 1); exit 1; }; }\nfi\n\ncat >>confdefs.h <<_ACEOF\n#define PACKAGE \"$PACKAGE\"\n_ACEOF\n\n\ncat >>confdefs.h <<_ACEOF\n#define VERSION \"$VERSION\"\n_ACEOF\n\n\n\nmissing_dir=`cd $ac_aux_dir && pwd`\n{ echo \"$as_me:$LINENO: checking for working aclocal-${am__api_version}\" >&5\necho $ECHO_N \"checking for working aclocal-${am__api_version}... $ECHO_C\" >&6; }\n# Run test in a subshell; some versions of sh will print an error if\n# an executable is not found, even if stderr is redirected.\n# Redirect stdin to placate older versions of autoconf.  Sigh.\nif (aclocal-${am__api_version} --version) < /dev/null > /dev/null 2>&1; then\n   ACLOCAL=aclocal-${am__api_version}\n   { echo \"$as_me:$LINENO: result: found\" >&5\necho \"${ECHO_T}found\" >&6; }\nelse\n   ACLOCAL=\"$missing_dir/missing aclocal-${am__api_version}\"\n   { echo \"$as_me:$LINENO: result: missing\" >&5\necho \"${ECHO_T}missing\" >&6; }\nfi\n\n{ echo \"$as_me:$LINENO: checking for working autoconf\" >&5\necho $ECHO_N \"checking for working autoconf... $ECHO_C\" >&6; }\n# Run test in a subshell; some versions of sh will print an error if\n# an executable is not found, even if stderr is redirected.\n# Redirect stdin to placate older versions of autoconf.  Sigh.\nif (autoconf --version) < /dev/null > /dev/null 2>&1; then\n   AUTOCONF=autoconf\n   { echo \"$as_me:$LINENO: result: found\" >&5\necho \"${ECHO_T}found\" >&6; }\nelse\n   AUTOCONF=\"$missing_dir/missing autoconf\"\n   { echo \"$as_me:$LINENO: result: missing\" >&5\necho \"${ECHO_T}missing\" >&6; }\nfi\n\n{ echo \"$as_me:$LINENO: checking for working automake-${am__api_version}\" >&5\necho $ECHO_N \"checking for working automake-${am__api_version}... $ECHO_C\" >&6; }\n# Run test in a subshell; some versions of sh will print an error if\n# an executable is not found, even if stderr is redirected.\n# Redirect stdin to placate older versions of autoconf.  Sigh.\nif (automake-${am__api_version} --version) < /dev/null > /dev/null 2>&1; then\n   AUTOMAKE=automake-${am__api_version}\n   { echo \"$as_me:$LINENO: result: found\" >&5\necho \"${ECHO_T}found\" >&6; }\nelse\n   AUTOMAKE=\"$missing_dir/missing automake-${am__api_version}\"\n   { echo \"$as_me:$LINENO: result: missing\" >&5\necho \"${ECHO_T}missing\" >&6; }\nfi\n\n{ echo \"$as_me:$LINENO: checking for working autoheader\" >&5\necho $ECHO_N \"checking for working autoheader... $ECHO_C\" >&6; }\n# Run test in a subshell; some versions of sh will print an error if\n# an executable is not found, even if stderr is redirected.\n# Redirect stdin to placate older versions of autoconf.  Sigh.\nif (autoheader --version) < /dev/null > /dev/null 2>&1; then\n   AUTOHEADER=autoheader\n   { echo \"$as_me:$LINENO: result: found\" >&5\necho \"${ECHO_T}found\" >&6; }\nelse\n   AUTOHEADER=\"$missing_dir/missing autoheader\"\n   { echo \"$as_me:$LINENO: result: missing\" >&5\necho \"${ECHO_T}missing\" >&6; }\nfi\n\n{ echo \"$as_me:$LINENO: checking for working makeinfo\" >&5\necho $ECHO_N \"checking for working makeinfo... $ECHO_C\" >&6; }\n# Run test in a subshell; some versions of sh will print an error if\n# an executable is not found, even if stderr is redirected.\n# Redirect stdin to placate older versions of autoconf.  Sigh.\nif (makeinfo --version) < /dev/null > /dev/null 2>&1; then\n   MAKEINFO=makeinfo\n   { echo \"$as_me:$LINENO: result: found\" >&5\necho \"${ECHO_T}found\" >&6; }\nelse\n   MAKEINFO=\"$missing_dir/missing makeinfo\"\n   { echo \"$as_me:$LINENO: result: missing\" >&5\necho \"${ECHO_T}missing\" >&6; }\nfi\n\n\n# Check whether --enable-shared was given.\nif test \"${enable_shared+set}\" = set; then\n  enableval=$enable_shared; p=${PACKAGE-default}\n    case $enableval in\n    yes) enable_shared=yes ;;\n    no) enable_shared=no ;;\n    *)\n      enable_shared=no\n      # Look at the argument we got.  We use all the common list separators.\n      lt_save_ifs=\"$IFS\"; IFS=\"${IFS}$PATH_SEPARATOR,\"\n      for pkg in $enableval; do\n\tIFS=\"$lt_save_ifs\"\n\tif test \"X$pkg\" = \"X$p\"; then\n\t  enable_shared=yes\n\tfi\n      done\n      IFS=\"$lt_save_ifs\"\n      ;;\n    esac\nelse\n  enable_shared=yes\nfi\n\n\n# Check whether --enable-static was given.\nif test \"${enable_static+set}\" = set; then\n  enableval=$enable_static; p=${PACKAGE-default}\n    case $enableval in\n    yes) enable_static=yes ;;\n    no) enable_static=no ;;\n    *)\n     enable_static=no\n      # Look at the argument we got.  We use all the common list separators.\n      lt_save_ifs=\"$IFS\"; IFS=\"${IFS}$PATH_SEPARATOR,\"\n      for pkg in $enableval; do\n\tIFS=\"$lt_save_ifs\"\n\tif test \"X$pkg\" = \"X$p\"; then\n\t  enable_static=yes\n\tfi\n      done\n      IFS=\"$lt_save_ifs\"\n      ;;\n    esac\nelse\n  enable_static=yes\nfi\n\n\n# Check whether --enable-fast-install was given.\nif test \"${enable_fast_install+set}\" = set; then\n  enableval=$enable_fast_install; p=${PACKAGE-default}\n    case $enableval in\n    yes) enable_fast_install=yes ;;\n    no) enable_fast_install=no ;;\n    *)\n      enable_fast_install=no\n      # Look at the argument we got.  We use all the common list separators.\n      lt_save_ifs=\"$IFS\"; IFS=\"${IFS}$PATH_SEPARATOR,\"\n      for pkg in $enableval; do\n\tIFS=\"$lt_save_ifs\"\n\tif test \"X$pkg\" = \"X$p\"; then\n\t  enable_fast_install=yes\n\tfi\n      done\n      IFS=\"$lt_save_ifs\"\n      ;;\n    esac\nelse\n  enable_fast_install=yes\nfi\n\n\n# Make sure we can run config.sub.\n$SHELL \"$ac_aux_dir/config.sub\" sun4 >/dev/null 2>&1 ||\n  { { echo \"$as_me:$LINENO: error: cannot run $SHELL $ac_aux_dir/config.sub\" >&5\necho \"$as_me: error: cannot run $SHELL $ac_aux_dir/config.sub\" >&2;}\n   { (exit 1); exit 1; }; }\n\n{ echo \"$as_me:$LINENO: checking build system type\" >&5\necho $ECHO_N \"checking build system type... $ECHO_C\" >&6; }\nif test \"${ac_cv_build+set}\" = set; then\n  echo $ECHO_N \"(cached) $ECHO_C\" >&6\nelse\n  ac_build_alias=$build_alias\ntest \"x$ac_build_alias\" = x &&\n  ac_build_alias=`$SHELL \"$ac_aux_dir/config.guess\"`\ntest \"x$ac_build_alias\" = x &&\n  { { echo \"$as_me:$LINENO: error: cannot guess build type; you must specify one\" >&5\necho \"$as_me: error: cannot guess build type; you must specify one\" >&2;}\n   { (exit 1); exit 1; }; }\nac_cv_build=`$SHELL \"$ac_aux_dir/config.sub\" $ac_build_alias` ||\n  { { echo \"$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $ac_build_alias failed\" >&5\necho \"$as_me: error: $SHELL $ac_aux_dir/config.sub $ac_build_alias failed\" >&2;}\n   { (exit 1); exit 1; }; }\n\nfi\n{ echo \"$as_me:$LINENO: result: $ac_cv_build\" >&5\necho \"${ECHO_T}$ac_cv_build\" >&6; }\ncase $ac_cv_build in\n*-*-*) ;;\n*) { { echo \"$as_me:$LINENO: error: invalid value of canonical build\" >&5\necho \"$as_me: error: invalid value of canonical build\" >&2;}\n   { (exit 1); exit 1; }; };;\nesac\nbuild=$ac_cv_build\nac_save_IFS=$IFS; IFS='-'\nset x $ac_cv_build\nshift\nbuild_cpu=$1\nbuild_vendor=$2\nshift; shift\n# Remember, the first character of IFS is used to create $*,\n# except with old shells:\nbuild_os=$*\nIFS=$ac_save_IFS\ncase $build_os in *\\ *) build_os=`echo \"$build_os\" | sed 's/ /-/g'`;; esac\n\n\n{ echo \"$as_me:$LINENO: checking host system type\" >&5\necho $ECHO_N \"checking host system type... $ECHO_C\" >&6; }\nif test \"${ac_cv_host+set}\" = set; then\n  echo $ECHO_N \"(cached) $ECHO_C\" >&6\nelse\n  if test \"x$host_alias\" = x; then\n  ac_cv_host=$ac_cv_build\nelse\n  ac_cv_host=`$SHELL \"$ac_aux_dir/config.sub\" $host_alias` ||\n    { { echo \"$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $host_alias failed\" >&5\necho \"$as_me: error: $SHELL $ac_aux_dir/config.sub $host_alias failed\" >&2;}\n   { (exit 1); exit 1; }; }\nfi\n\nfi\n{ echo \"$as_me:$LINENO: result: $ac_cv_host\" >&5\necho \"${ECHO_T}$ac_cv_host\" >&6; }\ncase $ac_cv_host in\n*-*-*) ;;\n*) { { echo \"$as_me:$LINENO: error: invalid value of canonical host\" >&5\necho \"$as_me: error: invalid value of canonical host\" >&2;}\n   { (exit 1); exit 1; }; };;\nesac\nhost=$ac_cv_host\nac_save_IFS=$IFS; IFS='-'\nset x $ac_cv_host\nshift\nhost_cpu=$1\nhost_vendor=$2\nshift; shift\n# Remember, the first character of IFS is used to create $*,\n# except with old shells:\nhost_os=$*\nIFS=$ac_save_IFS\ncase $host_os in *\\ *) host_os=`echo \"$host_os\" | sed 's/ /-/g'`;; esac\n\n\nac_ext=c\nac_cpp='$CPP $CPPFLAGS'\nac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'\nac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'\nac_compiler_gnu=$ac_cv_c_compiler_gnu\nif test -n \"$ac_tool_prefix\"; then\n  # Extract the first word of \"${ac_tool_prefix}gcc\", so it can be a program name with args.\nset dummy ${ac_tool_prefix}gcc; ac_word=$2\n{ echo \"$as_me:$LINENO: checking for $ac_word\" >&5\necho $ECHO_N \"checking for $ac_word... $ECHO_C\" >&6; }\nif test \"${ac_cv_prog_CC+set}\" = set; then\n  echo $ECHO_N \"(cached) $ECHO_C\" >&6\nelse\n  if test -n \"$CC\"; then\n  ac_cv_prog_CC=\"$CC\" # Let the user override the test.\nelse\nas_save_IFS=$IFS; IFS=$PATH_SEPARATOR\nfor as_dir in $PATH\ndo\n  IFS=$as_save_IFS\n  test -z \"$as_dir\" && as_dir=.\n  for ac_exec_ext in '' $ac_executable_extensions; do\n  if { test -f \"$as_dir/$ac_word$ac_exec_ext\" && $as_executable_p \"$as_dir/$ac_word$ac_exec_ext\"; }; then\n    ac_cv_prog_CC=\"${ac_tool_prefix}gcc\"\n    echo \"$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext\" >&5\n    break 2\n  fi\ndone\ndone\nIFS=$as_save_IFS\n\nfi\nfi\nCC=$ac_cv_prog_CC\nif test -n \"$CC\"; then\n  { echo \"$as_me:$LINENO: result: $CC\" >&5\necho \"${ECHO_T}$CC\" >&6; }\nelse\n  { echo \"$as_me:$LINENO: result: no\" >&5\necho \"${ECHO_T}no\" >&6; }\nfi\n\n\nfi\nif test -z \"$ac_cv_prog_CC\"; then\n  ac_ct_CC=$CC\n  # Extract the first word of \"gcc\", so it can be a program name with args.\nset dummy gcc; ac_word=$2\n{ echo \"$as_me:$LINENO: checking for $ac_word\" >&5\necho $ECHO_N \"checking for $ac_word... $ECHO_C\" >&6; }\nif test \"${ac_cv_prog_ac_ct_CC+set}\" = set; then\n  echo $ECHO_N \"(cached) $ECHO_C\" >&6\nelse\n  if test -n \"$ac_ct_CC\"; then\n  ac_cv_prog_ac_ct_CC=\"$ac_ct_CC\" # Let the user override the test.\nelse\nas_save_IFS=$IFS; IFS=$PATH_SEPARATOR\nfor as_dir in $PATH\ndo\n  IFS=$as_save_IFS\n  test -z \"$as_dir\" && as_dir=.\n  for ac_exec_ext in '' $ac_executable_extensions; do\n  if { test -f \"$as_dir/$ac_word$ac_exec_ext\" && $as_executable_p \"$as_dir/$ac_word$ac_exec_ext\"; }; then\n    ac_cv_prog_ac_ct_CC=\"gcc\"\n    echo \"$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext\" >&5\n    break 2\n  fi\ndone\ndone\nIFS=$as_save_IFS\n\nfi\nfi\nac_ct_CC=$ac_cv_prog_ac_ct_CC\nif test -n \"$ac_ct_CC\"; then\n  { echo \"$as_me:$LINENO: result: $ac_ct_CC\" >&5\necho \"${ECHO_T}$ac_ct_CC\" >&6; }\nelse\n  { echo \"$as_me:$LINENO: result: no\" >&5\necho \"${ECHO_T}no\" >&6; }\nfi\n\n  if test \"x$ac_ct_CC\" = x; then\n    CC=\"\"\n  else\n    case $cross_compiling:$ac_tool_warned in\nyes:)\n{ echo \"$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools\nwhose name does not start with the host triplet.  If you think this\nconfiguration is useful to you, please write to autoconf@gnu.org.\" >&5\necho \"$as_me: WARNING: In the future, Autoconf will not detect cross-tools\nwhose name does not start with the host triplet.  If you think this\nconfiguration is useful to you, please write to autoconf@gnu.org.\" >&2;}\nac_tool_warned=yes ;;\nesac\n    CC=$ac_ct_CC\n  fi\nelse\n  CC=\"$ac_cv_prog_CC\"\nfi\n\nif test -z \"$CC\"; then\n          if test -n \"$ac_tool_prefix\"; then\n    # Extract the first word of \"${ac_tool_prefix}cc\", so it can be a program name with args.\nset dummy ${ac_tool_prefix}cc; ac_word=$2\n{ echo \"$as_me:$LINENO: checking for $ac_word\" >&5\necho $ECHO_N \"checking for $ac_word... $ECHO_C\" >&6; }\nif test \"${ac_cv_prog_CC+set}\" = set; then\n  echo $ECHO_N \"(cached) $ECHO_C\" >&6\nelse\n  if test -n \"$CC\"; then\n  ac_cv_prog_CC=\"$CC\" # Let the user override the test.\nelse\nas_save_IFS=$IFS; IFS=$PATH_SEPARATOR\nfor as_dir in $PATH\ndo\n  IFS=$as_save_IFS\n  test -z \"$as_dir\" && as_dir=.\n  for ac_exec_ext in '' $ac_executable_extensions; do\n  if { test -f \"$as_dir/$ac_word$ac_exec_ext\" && $as_executable_p \"$as_dir/$ac_word$ac_exec_ext\"; }; then\n    ac_cv_prog_CC=\"${ac_tool_prefix}cc\"\n    echo \"$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext\" >&5\n    break 2\n  fi\ndone\ndone\nIFS=$as_save_IFS\n\nfi\nfi\nCC=$ac_cv_prog_CC\nif test -n \"$CC\"; then\n  { echo \"$as_me:$LINENO: result: $CC\" >&5\necho \"${ECHO_T}$CC\" >&6; }\nelse\n  { echo \"$as_me:$LINENO: result: no\" >&5\necho \"${ECHO_T}no\" >&6; }\nfi\n\n\n  fi\nfi\nif test -z \"$CC\"; then\n  # Extract the first word of \"cc\", so it can be a program name with args.\nset dummy cc; ac_word=$2\n{ echo \"$as_me:$LINENO: checking for $ac_word\" >&5\necho $ECHO_N \"checking for $ac_word... $ECHO_C\" >&6; }\nif test \"${ac_cv_prog_CC+set}\" = set; then\n  echo $ECHO_N \"(cached) $ECHO_C\" >&6\nelse\n  if test -n \"$CC\"; then\n  ac_cv_prog_CC=\"$CC\" # Let the user override the test.\nelse\n  ac_prog_rejected=no\nas_save_IFS=$IFS; IFS=$PATH_SEPARATOR\nfor as_dir in $PATH\ndo\n  IFS=$as_save_IFS\n  test -z \"$as_dir\" && as_dir=.\n  for ac_exec_ext in '' $ac_executable_extensions; do\n  if { test -f \"$as_dir/$ac_word$ac_exec_ext\" && $as_executable_p \"$as_dir/$ac_word$ac_exec_ext\"; }; then\n    if test \"$as_dir/$ac_word$ac_exec_ext\" = \"/usr/ucb/cc\"; then\n       ac_prog_rejected=yes\n       continue\n     fi\n    ac_cv_prog_CC=\"cc\"\n    echo \"$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext\" >&5\n    break 2\n  fi\ndone\ndone\nIFS=$as_save_IFS\n\nif test $ac_prog_rejected = yes; then\n  # We found a bogon in the path, so make sure we never use it.\n  set dummy $ac_cv_prog_CC\n  shift\n  if test $# != 0; then\n    # We chose a different compiler from the bogus one.\n    # However, it has the same basename, so the bogon will be chosen\n    # first if we set CC to just the basename; use the full file name.\n    shift\n    ac_cv_prog_CC=\"$as_dir/$ac_word${1+' '}$@\"\n  fi\nfi\nfi\nfi\nCC=$ac_cv_prog_CC\nif test -n \"$CC\"; then\n  { echo \"$as_me:$LINENO: result: $CC\" >&5\necho \"${ECHO_T}$CC\" >&6; }\nelse\n  { echo \"$as_me:$LINENO: result: no\" >&5\necho \"${ECHO_T}no\" >&6; }\nfi\n\n\nfi\nif test -z \"$CC\"; then\n  if test -n \"$ac_tool_prefix\"; then\n  for ac_prog in cl.exe\n  do\n    # Extract the first word of \"$ac_tool_prefix$ac_prog\", so it can be a program name with args.\nset dummy $ac_tool_prefix$ac_prog; ac_word=$2\n{ echo \"$as_me:$LINENO: checking for $ac_word\" >&5\necho $ECHO_N \"checking for $ac_word... $ECHO_C\" >&6; }\nif test \"${ac_cv_prog_CC+set}\" = set; then\n  echo $ECHO_N \"(cached) $ECHO_C\" >&6\nelse\n  if test -n \"$CC\"; then\n  ac_cv_prog_CC=\"$CC\" # Let the user override the test.\nelse\nas_save_IFS=$IFS; IFS=$PATH_SEPARATOR\nfor as_dir in $PATH\ndo\n  IFS=$as_save_IFS\n  test -z \"$as_dir\" && as_dir=.\n  for ac_exec_ext in '' $ac_executable_extensions; do\n  if { test -f \"$as_dir/$ac_word$ac_exec_ext\" && $as_executable_p \"$as_dir/$ac_word$ac_exec_ext\"; }; then\n    ac_cv_prog_CC=\"$ac_tool_prefix$ac_prog\"\n    echo \"$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext\" >&5\n    break 2\n  fi\ndone\ndone\nIFS=$as_save_IFS\n\nfi\nfi\nCC=$ac_cv_prog_CC\nif test -n \"$CC\"; then\n  { echo \"$as_me:$LINENO: result: $CC\" >&5\necho \"${ECHO_T}$CC\" >&6; }\nelse\n  { echo \"$as_me:$LINENO: result: no\" >&5\necho \"${ECHO_T}no\" >&6; }\nfi\n\n\n    test -n \"$CC\" && break\n  done\nfi\nif test -z \"$CC\"; then\n  ac_ct_CC=$CC\n  for ac_prog in cl.exe\ndo\n  # Extract the first word of \"$ac_prog\", so it can be a program name with args.\nset dummy $ac_prog; ac_word=$2\n{ echo \"$as_me:$LINENO: checking for $ac_word\" >&5\necho $ECHO_N \"checking for $ac_word... $ECHO_C\" >&6; }\nif test \"${ac_cv_prog_ac_ct_CC+set}\" = set; then\n  echo $ECHO_N \"(cached) $ECHO_C\" >&6\nelse\n  if test -n \"$ac_ct_CC\"; then\n  ac_cv_prog_ac_ct_CC=\"$ac_ct_CC\" # Let the user override the test.\nelse\nas_save_IFS=$IFS; IFS=$PATH_SEPARATOR\nfor as_dir in $PATH\ndo\n  IFS=$as_save_IFS\n  test -z \"$as_dir\" && as_dir=.\n  for ac_exec_ext in '' $ac_executable_extensions; do\n  if { test -f \"$as_dir/$ac_word$ac_exec_ext\" && $as_executable_p \"$as_dir/$ac_word$ac_exec_ext\"; }; then\n    ac_cv_prog_ac_ct_CC=\"$ac_prog\"\n    echo \"$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext\" >&5\n    break 2\n  fi\ndone\ndone\nIFS=$as_save_IFS\n\nfi\nfi\nac_ct_CC=$ac_cv_prog_ac_ct_CC\nif test -n \"$ac_ct_CC\"; then\n  { echo \"$as_me:$LINENO: result: $ac_ct_CC\" >&5\necho \"${ECHO_T}$ac_ct_CC\" >&6; }\nelse\n  { echo \"$as_me:$LINENO: result: no\" >&5\necho \"${ECHO_T}no\" >&6; }\nfi\n\n\n  test -n \"$ac_ct_CC\" && break\ndone\n\n  if test \"x$ac_ct_CC\" = x; then\n    CC=\"\"\n  else\n    case $cross_compiling:$ac_tool_warned in\nyes:)\n{ echo \"$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools\nwhose name does not start with the host triplet.  If you think this\nconfiguration is useful to you, please write to autoconf@gnu.org.\" >&5\necho \"$as_me: WARNING: In the future, Autoconf will not detect cross-tools\nwhose name does not start with the host triplet.  If you think this\nconfiguration is useful to you, please write to autoconf@gnu.org.\" >&2;}\nac_tool_warned=yes ;;\nesac\n    CC=$ac_ct_CC\n  fi\nfi\n\nfi\n\n\ntest -z \"$CC\" && { { echo \"$as_me:$LINENO: error: no acceptable C compiler found in \\$PATH\nSee \\`config.log' for more details.\" >&5\necho \"$as_me: error: no acceptable C compiler found in \\$PATH\nSee \\`config.log' for more details.\" >&2;}\n   { (exit 1); exit 1; }; }\n\n# Provide some information about the compiler.\necho \"$as_me:$LINENO: checking for C compiler version\" >&5\nac_compiler=`set X $ac_compile; echo $2`\n{ (eval echo \"$as_me:$LINENO: \\\"$ac_compiler --version >&5\\\"\") >&5\n  (eval $ac_compiler --version >&5) 2>&5\n  ac_status=$?\n  echo \"$as_me:$LINENO: \\$? = $ac_status\" >&5\n  (exit $ac_status); }\n{ (eval echo \"$as_me:$LINENO: \\\"$ac_compiler -v >&5\\\"\") >&5\n  (eval $ac_compiler -v >&5) 2>&5\n  ac_status=$?\n  echo \"$as_me:$LINENO: \\$? = $ac_status\" >&5\n  (exit $ac_status); }\n{ (eval echo \"$as_me:$LINENO: \\\"$ac_compiler -V >&5\\\"\") >&5\n  (eval $ac_compiler -V >&5) 2>&5\n  ac_status=$?\n  echo \"$as_me:$LINENO: \\$? = $ac_status\" >&5\n  (exit $ac_status); }\n\n\n# List of possible output files.  We want to start from the most likely,\n# but we have to check foo.exe before foo, because Cygwin `test -f' looks\n# also for foo.exe.  b.out is created by i960 compilers.\n# As a last resort, we also try wildcards: `conftest.*' and `a.*'.\n# But we are not allowed to rm a.*, and we do not want always remove\n# conftest.*, so we will list them literally, when appropriate.\nac_outfiles=\"a_out.exe a.out conftest.exe conftest a.exe b.out\"\n\n# The IRIX 6 linker writes into existing files which may not be\n# executable, retaining their permissions.  Remove them first so a\n# subsequent execution test works.\nrm -f $ac_outfiles conftest.*\n\ncat >conftest.$ac_ext <<_ACEOF\n/* confdefs.h.  */\n_ACEOF\ncat confdefs.h >>conftest.$ac_ext\ncat >>conftest.$ac_ext <<_ACEOF\n/* end confdefs.h.  */\n\nint\nmain ()\n{\n\n  ;\n  return 0;\n}\n_ACEOF\n\nac_clean_files_save=$ac_clean_files\nac_clean_files=\"$ac_clean_files $ac_outfiles\"\n\n# The following tests should remove their output except files matching conftest.*.\n# Try to create an executable without -o first, disregard a.out.\n# It will help us diagnose broken compilers, and finding out an intuition\n# of exeext.\n{ echo \"$as_me:$LINENO: checking for C compiler default output file name\" >&5\necho $ECHO_N \"checking for C compiler default output file name... $ECHO_C\" >&6; }\nac_link_default=`echo \"$ac_link\" | sed 's/ -o *conftest[^ ]*//'`\n\nif { (eval echo \"$as_me:$LINENO: \\\"$ac_link_default\\\"\") >&5\n  (eval $ac_link_default) 2>&5\n  ac_status=$?\n  echo \"$as_me:$LINENO: \\$? = $ac_status\" >&5\n  (exit $ac_status); }; then\n  for ac_file in $ac_outfiles a.* conftest.* NO\ndo\n  test -f \"$ac_file\" || continue\n  case $ac_file in\n    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj ) ;;\n    * ) break;;\n  esac\ndone\nif test \"$ac_file\" = NO; then\n  { { echo \"$as_me:$LINENO: error: no output file found\nSee \\`config.log' for more details.\" >&5\necho \"$as_me: error: no output file found\nSee \\`config.log' for more details.\" >&2;}\n   { (exit 1); exit 1; }; }\nfi\n\n\nelse\n  echo \"$as_me: failed program was:\" >&5\nsed 's/^/| /' conftest.$ac_ext >&5\n\n{ { echo \"$as_me:$LINENO: error: C compiler cannot create executables\nSee \\`config.log' for more details.\" >&5\necho \"$as_me: error: C compiler cannot create executables\nSee \\`config.log' for more details.\" >&2;}\n   { (exit 77); exit 77; }; }\nfi\n\n{ echo \"$as_me:$LINENO: result: $ac_file\" >&5\necho \"${ECHO_T}$ac_file\" >&6; }\n# Check that the compiler produces executables we can run.  If not, either\n# the compiler is broken, or we cross compile.\n{ echo \"$as_me:$LINENO: checking whether the C compiler works\" >&5\necho $ECHO_N \"checking whether the C compiler works... $ECHO_C\" >&6; }\n# FIXME: These cross compiler hacks should be removed for Autoconf 3.0\n# If not cross compiling, check that we can run a simple program.\nif test \"$cross_compiling\" != yes; then\n  if { ac_try='./$ac_file'\n  { (eval echo \"$as_me:$LINENO: \\\"$ac_try\\\"\") >&5\n  (eval $ac_try) 2>&5\n  ac_status=$?\n  echo \"$as_me:$LINENO: \\$? = $ac_status\" >&5\n  (exit $ac_status); }; }; then\n    cross_compiling=no\n  else\n    if test \"$cross_compiling\" = maybe; then\n\tcross_compiling=yes\n    else\n\t{ { echo \"$as_me:$LINENO: error: cannot run C compiled programs.\nIf you meant to cross compile, use \\`--host'.\nSee \\`config.log' for more details.\" >&5\necho \"$as_me: error: cannot run C compiled programs.\nIf you meant to cross compile, use \\`--host'.\nSee \\`config.log' for more details.\" >&2;}\n   { (exit 1); exit 1; }; }\n    fi\n  fi\nfi\n{ echo \"$as_me:$LINENO: result: yes\" >&5\necho \"${ECHO_T}yes\" >&6; }\n\n# Clean up; list also $ac_file, in case it matched a wildcard entry.\nrm -f $ac_outfiles $ac_file\n\n{ echo \"$as_me:$LINENO: checking whether we are cross compiling\" >&5\necho $ECHO_N \"checking whether we are cross compiling... $ECHO_C\" >&6; }\n{ echo \"$as_me:$LINENO: result: $cross_compiling\" >&5\necho \"${ECHO_T}$cross_compiling\" >&6; }\n\n{ echo \"$as_me:$LINENO: checking for suffix of executables\" >&5\necho $ECHO_N \"checking for suffix of executables... $ECHO_C\" >&6; }\nif test \"${ac_cv_exeext+set}\" = set; then\n  echo $ECHO_N \"(cached) $ECHO_C\" >&6\nelse\n  if { (eval echo \"$as_me:$LINENO: \\\"$ac_link\\\"\") >&5\n  (eval $ac_link) 2>&5\n  ac_status=$?\n  echo \"$as_me:$LINENO: \\$? = $ac_status\" >&5\n  (exit $ac_status); }; then\n  # If both `conftest.exe' and `conftest' are `present' (well, observable),\n    # catch `conftest.exe'.  For instance with Cygwin, `ls conftest' will\n    # work properly (i.e., refer to `conftest.exe'), while it won't with `rm'.\n    for ac_file in conftest.exe conftest conftest.* NO; do\n      test -f \"$ac_file\" || continue\n      case $ac_file in\n\t*.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj ) ;;\n\t*.* ) ac_cv_exeext=`expr \"$ac_file\" : '[^.]*\\(\\..*\\)'`\n\t      break;;\n\t* ) break;;\n      esac\n    done\n    if test \"$ac_file\" = NO; then\n  { { echo \"$as_me:$LINENO: error: cannot compute suffix of executables: no output file found\nSee \\`config.log' for more details.\" >&5\necho \"$as_me: error: cannot compute suffix of executables: no output file found\nSee \\`config.log' for more details.\" >&2;}\n   { (exit 1); exit 1; }; }\nfi\n\n    # Clean up; list also $ac_file, in case it matched conftest.*.\n    rm -f $ac_outfiles $ac_file\n\nelse\n  { { echo \"$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link\nSee \\`config.log' for more details.\" >&5\necho \"$as_me: error: cannot compute suffix of executables: cannot compile and link\nSee \\`config.log' for more details.\" >&2;}\n   { (exit 1); exit 1; }; }\n\nfi\n\n\nfi\n{ echo \"$as_me:$LINENO: result: $ac_cv_exeext\" >&5\necho \"${ECHO_T}$ac_cv_exeext\" >&6; }\nEXEEXT=$ac_cv_exeext\nac_exeext=$EXEEXT\n\n\nac_clean_files=$ac_clean_files_save\n\n{ echo \"$as_me:$LINENO: checking for suffix of object files\" >&5\necho $ECHO_N \"checking for suffix of object files... $ECHO_C\" >&6; }\nif test \"${ac_cv_objext+set}\" = set; then\n  echo $ECHO_N \"(cached) $ECHO_C\" >&6\nelse\n  rm -f conftest.o conftest.obj\nif { (eval echo \"$as_me:$LINENO: \\\"$ac_compile\\\"\") >&5\n  (eval $ac_compile) 2>&5\n  ac_status=$?\n  echo \"$as_me:$LINENO: \\$? = $ac_status\" >&5\n  (exit $ac_status); }; then\n  for ac_file in conftest.o conftest.obj conftest.*; do\n  test -f \"$ac_file\" || continue;\n  case $ac_file in\n    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf ) ;;\n    *) ac_cv_objext=`expr \"$ac_file\" : '.*\\.\\(.*\\)'`\n       break;;\n  esac\ndone\nelse\n  echo \"$as_me: failed program was:\" >&5\nsed 's/^/| /' conftest.$ac_ext >&5\n\n{ { echo \"$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile\nSee \\`config.log' for more details.\" >&5\necho \"$as_me: error: cannot compute suffix of object files: cannot compile\nSee \\`config.log' for more details.\" >&2;}\n   { (exit 1); exit 1; }; }\nfi\n\nfi\n{ echo \"$as_me:$LINENO: result: $ac_cv_objext\" >&5\necho \"${ECHO_T}$ac_cv_objext\" >&6; }\nOBJEXT=$ac_cv_objext\nac_objext=$OBJEXT\n\n\nrm -f conftest.*\n{ echo \"$as_me:$LINENO: checking whether we are using the GNU C compiler\" >&5\necho $ECHO_N \"checking whether we are using the GNU C compiler... $ECHO_C\" >&6; }\nif test \"${ac_cv_c_compiler_gnu+set}\" = set; then\n  echo $ECHO_N \"(cached) $ECHO_C\" >&6\nelse\n  cat >conftest.$ac_ext <<_ACEOF\n/* confdefs.h.  */\n_ACEOF\ncat confdefs.h >>conftest.$ac_ext\ncat >>conftest.$ac_ext <<_ACEOF\n/* end confdefs.h.  */\n\nint\nmain ()\n{\n#ifndef __GNUC__\n       choke me\n#endif\n\n  ;\n  return 0;\n}\n_ACEOF\nrm -f conftest.$ac_objext\nif { (eval echo \"$as_me:$LINENO: \\\"$ac_compile\\\"\") >&5\n  (eval $ac_compile) 2>conftest.er1\n  ac_status=$?\n  grep -v '^ *+' conftest.er1 >conftest.err\n  rm -f conftest.er1\n  cat conftest.err >&5\n  echo \"$as_me:$LINENO: \\$? = $ac_status\" >&5\n  (exit $ac_status); } &&\n\t { ac_try='test -z \"$ac_c_werror_flag\"\n\t\t\t || test ! -s conftest.err'\n  { (eval echo \"$as_me:$LINENO: \\\"$ac_try\\\"\") >&5\n  (eval $ac_try) 2>&5\n  ac_status=$?\n  echo \"$as_me:$LINENO: \\$? = $ac_status\" >&5\n  (exit $ac_status); }; } &&\n\t { ac_try='test -s conftest.$ac_objext'\n  { (eval echo \"$as_me:$LINENO: \\\"$ac_try\\\"\") >&5\n  (eval $ac_try) 2>&5\n  ac_status=$?\n  echo \"$as_me:$LINENO: \\$? = $ac_status\" >&5\n  (exit $ac_status); }; }; then\n  ac_compiler_gnu=yes\nelse\n  echo \"$as_me: failed program was:\" >&5\nsed 's/^/| /' conftest.$ac_ext >&5\n\n\tac_compiler_gnu=no\nfi\n\nrm -f conftest.err conftest.$ac_objext conftest.$ac_ext\nac_cv_c_compiler_gnu=$ac_compiler_gnu\n\nfi\n{ echo \"$as_me:$LINENO: result: $ac_cv_c_compiler_gnu\" >&5\necho \"${ECHO_T}$ac_cv_c_compiler_gnu\" >&6; }\nGCC=`test $ac_compiler_gnu = yes && echo yes`\nac_test_CFLAGS=${CFLAGS+set}\nac_save_CFLAGS=$CFLAGS\n{ echo \"$as_me:$LINENO: checking whether $CC accepts -g\" >&5\necho $ECHO_N \"checking whether $CC accepts -g... $ECHO_C\" >&6; }\nif test \"${ac_cv_prog_cc_g+set}\" = set; then\n  echo $ECHO_N \"(cached) $ECHO_C\" >&6\nelse\n  ac_save_c_werror_flag=$ac_c_werror_flag\n   ac_c_werror_flag=yes\n   ac_cv_prog_cc_g=no\n   CFLAGS=\"-g\"\n   cat >conftest.$ac_ext <<_ACEOF\n/* confdefs.h.  */\n_ACEOF\ncat confdefs.h >>conftest.$ac_ext\ncat >>conftest.$ac_ext <<_ACEOF\n/* end confdefs.h.  */\n\nint\nmain ()\n{\n\n  ;\n  return 0;\n}\n_ACEOF\nrm -f conftest.$ac_objext\nif { (eval echo \"$as_me:$LINENO: \\\"$ac_compile\\\"\") >&5\n  (eval $ac_compile) 2>conftest.er1\n  ac_status=$?\n  grep -v '^ *+' conftest.er1 >conftest.err\n  rm -f conftest.er1\n  cat conftest.err >&5\n  echo \"$as_me:$LINENO: \\$? = $ac_status\" >&5\n  (exit $ac_status); } &&\n\t { ac_try='test -z \"$ac_c_werror_flag\"\n\t\t\t || test ! -s conftest.err'\n  { (eval echo \"$as_me:$LINENO: \\\"$ac_try\\\"\") >&5\n  (eval $ac_try) 2>&5\n  ac_status=$?\n  echo \"$as_me:$LINENO: \\$? = $ac_status\" >&5\n  (exit $ac_status); }; } &&\n\t { ac_try='test -s conftest.$ac_objext'\n  { (eval echo \"$as_me:$LINENO: \\\"$ac_try\\\"\") >&5\n  (eval $ac_try) 2>&5\n  ac_status=$?\n  echo \"$as_me:$LINENO: \\$? = $ac_status\" >&5\n  (exit $ac_status); }; }; then\n  ac_cv_prog_cc_g=yes\nelse\n  echo \"$as_me: failed program was:\" >&5\nsed 's/^/| /' conftest.$ac_ext >&5\n\n\tCFLAGS=\"\"\n      cat >conftest.$ac_ext <<_ACEOF\n/* confdefs.h.  */\n_ACEOF\ncat confdefs.h >>conftest.$ac_ext\ncat >>conftest.$ac_ext <<_ACEOF\n/* end confdefs.h.  */\n\nint\nmain ()\n{\n\n  ;\n  return 0;\n}\n_ACEOF\nrm -f conftest.$ac_objext\nif { (eval echo \"$as_me:$LINENO: \\\"$ac_compile\\\"\") >&5\n  (eval $ac_compile) 2>conftest.er1\n  ac_status=$?\n  grep -v '^ *+' conftest.er1 >conftest.err\n  rm -f conftest.er1\n  cat conftest.err >&5\n  echo \"$as_me:$LINENO: \\$? = $ac_status\" >&5\n  (exit $ac_status); } &&\n\t { ac_try='test -z \"$ac_c_werror_flag\"\n\t\t\t || test ! -s conftest.err'\n  { (eval echo \"$as_me:$LINENO: \\\"$ac_try\\\"\") >&5\n  (eval $ac_try) 2>&5\n  ac_status=$?\n  echo \"$as_me:$LINENO: \\$? = $ac_status\" >&5\n  (exit $ac_status); }; } &&\n\t { ac_try='test -s conftest.$ac_objext'\n  { (eval echo \"$as_me:$LINENO: \\\"$ac_try\\\"\") >&5\n  (eval $ac_try) 2>&5\n  ac_status=$?\n  echo \"$as_me:$LINENO: \\$? = $ac_status\" >&5\n  (exit $ac_status); }; }; then\n  :\nelse\n  echo \"$as_me: failed program was:\" >&5\nsed 's/^/| /' conftest.$ac_ext >&5\n\n\tac_c_werror_flag=$ac_save_c_werror_flag\n\t CFLAGS=\"-g\"\n\t cat >conftest.$ac_ext <<_ACEOF\n/* confdefs.h.  */\n_ACEOF\ncat confdefs.h >>conftest.$ac_ext\ncat >>conftest.$ac_ext <<_ACEOF\n/* end confdefs.h.  */\n\nint\nmain ()\n{\n\n  ;\n  return 0;\n}\n_ACEOF\nrm -f conftest.$ac_objext\nif { (eval echo \"$as_me:$LINENO: \\\"$ac_compile\\\"\") >&5\n  (eval $ac_compile) 2>conftest.er1\n  ac_status=$?\n  grep -v '^ *+' conftest.er1 >conftest.err\n  rm -f conftest.er1\n  cat conftest.err >&5\n  echo \"$as_me:$LINENO: \\$? = $ac_status\" >&5\n  (exit $ac_status); } &&\n\t { ac_try='test -z \"$ac_c_werror_flag\"\n\t\t\t || test ! -s conftest.err'\n  { (eval echo \"$as_me:$LINENO: \\\"$ac_try\\\"\") >&5\n  (eval $ac_try) 2>&5\n  ac_status=$?\n  echo \"$as_me:$LINENO: \\$? = $ac_status\" >&5\n  (exit $ac_status); }; } &&\n\t { ac_try='test -s conftest.$ac_objext'\n  { (eval echo \"$as_me:$LINENO: \\\"$ac_try\\\"\") >&5\n  (eval $ac_try) 2>&5\n  ac_status=$?\n  echo \"$as_me:$LINENO: \\$? = $ac_status\" >&5\n  (exit $ac_status); }; }; then\n  ac_cv_prog_cc_g=yes\nelse\n  echo \"$as_me: failed program was:\" >&5\nsed 's/^/| /' conftest.$ac_ext >&5\n\n\nfi\n\nrm -f conftest.err conftest.$ac_objext conftest.$ac_ext\nfi\n\nrm -f conftest.err conftest.$ac_objext conftest.$ac_ext\nfi\n\nrm -f conftest.err conftest.$ac_objext conftest.$ac_ext\n   ac_c_werror_flag=$ac_save_c_werror_flag\nfi\n{ echo \"$as_me:$LINENO: result: $ac_cv_prog_cc_g\" >&5\necho \"${ECHO_T}$ac_cv_prog_cc_g\" >&6; }\nif test \"$ac_test_CFLAGS\" = set; then\n  CFLAGS=$ac_save_CFLAGS\nelif test $ac_cv_prog_cc_g = yes; then\n  if test \"$GCC\" = yes; then\n    CFLAGS=\"-g -O2\"\n  else\n    CFLAGS=\"-g\"\n  fi\nelse\n  if test \"$GCC\" = yes; then\n    CFLAGS=\"-O2\"\n  else\n    CFLAGS=\n  fi\nfi\n{ echo \"$as_me:$LINENO: checking for $CC option to accept ISO C89\" >&5\necho $ECHO_N \"checking for $CC option to accept ISO C89... $ECHO_C\" >&6; }\nif test \"${ac_cv_prog_cc_c89+set}\" = set; then\n  echo $ECHO_N \"(cached) $ECHO_C\" >&6\nelse\n  ac_cv_prog_cc_c89=no\nac_save_CC=$CC\ncat >conftest.$ac_ext <<_ACEOF\n/* confdefs.h.  */\n_ACEOF\ncat confdefs.h >>conftest.$ac_ext\ncat >>conftest.$ac_ext <<_ACEOF\n/* end confdefs.h.  */\n#include <stdarg.h>\n#include <stdio.h>\n#include <sys/types.h>\n#include <sys/stat.h>\n/* Most of the following tests are stolen from RCS 5.7's src/conf.sh.  */\nstruct buf { int x; };\nFILE * (*rcsopen) (struct buf *, struct stat *, int);\nstatic char *e (p, i)\n     char **p;\n     int i;\n{\n  return p[i];\n}\nstatic char *f (char * (*g) (char **, int), char **p, ...)\n{\n  char *s;\n  va_list v;\n  va_start (v,p);\n  s = g (p, va_arg (v,int));\n  va_end (v);\n  return s;\n}\n\n/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default.  It has\n   function prototypes and stuff, but not '\\xHH' hex character constants.\n   These don't provoke an error unfortunately, instead are silently treated\n   as 'x'.  The following induces an error, until -std is added to get\n   proper ANSI mode.  Curiously '\\x00'!='x' always comes out true, for an\n   array size at least.  It's necessary to write '\\x00'==0 to get something\n   that's true only with -std.  */\nint osf4_cc_array ['\\x00' == 0 ? 1 : -1];\n\nint test (int i, double x);\nstruct s1 {int (*f) (int a);};\nstruct s2 {int (*f) (double a);};\nint pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);\nint argc;\nchar **argv;\nint\nmain ()\n{\nreturn f (e, argv, 0) != argv[0]  ||  f (e, argv, 1) != argv[1];\n  ;\n  return 0;\n}\n_ACEOF\nfor ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \\\n\t-Ae \"-Aa -D_HPUX_SOURCE\" \"-Xc -D__EXTENSIONS__\"\ndo\n  CC=\"$ac_save_CC $ac_arg\"\n  rm -f conftest.$ac_objext\nif { (eval echo \"$as_me:$LINENO: \\\"$ac_compile\\\"\") >&5\n  (eval $ac_compile) 2>conftest.er1\n  ac_status=$?\n  grep -v '^ *+' conftest.er1 >conftest.err\n  rm -f conftest.er1\n  cat conftest.err >&5\n  echo \"$as_me:$LINENO: \\$? = $ac_status\" >&5\n  (exit $ac_status); } &&\n\t { ac_try='test -z \"$ac_c_werror_flag\"\n\t\t\t || test ! -s conftest.err'\n  { (eval echo \"$as_me:$LINENO: \\\"$ac_try\\\"\") >&5\n  (eval $ac_try) 2>&5\n  ac_status=$?\n  echo \"$as_me:$LINENO: \\$? = $ac_status\" >&5\n  (exit $ac_status); }; } &&\n\t { ac_try='test -s conftest.$ac_objext'\n  { (eval echo \"$as_me:$LINENO: \\\"$ac_try\\\"\") >&5\n  (eval $ac_try) 2>&5\n  ac_status=$?\n  echo \"$as_me:$LINENO: \\$? = $ac_status\" >&5\n  (exit $ac_status); }; }; then\n  ac_cv_prog_cc_c89=$ac_arg\nelse\n  echo \"$as_me: failed program was:\" >&5\nsed 's/^/| /' conftest.$ac_ext >&5\n\n\nfi\n\nrm -f conftest.err conftest.$ac_objext\n  test \"x$ac_cv_prog_cc_c89\" != \"xno\" && break\ndone\nrm -f conftest.$ac_ext\nCC=$ac_save_CC\n\nfi\n# AC_CACHE_VAL\ncase \"x$ac_cv_prog_cc_c89\" in\n  x)\n    { echo \"$as_me:$LINENO: result: none needed\" >&5\necho \"${ECHO_T}none needed\" >&6; } ;;\n  xno)\n    { echo \"$as_me:$LINENO: result: unsupported\" >&5\necho \"${ECHO_T}unsupported\" >&6; } ;;\n  *)\n    CC=\"$CC $ac_cv_prog_cc_c89\"\n    { echo \"$as_me:$LINENO: result: $ac_cv_prog_cc_c89\" >&5\necho \"${ECHO_T}$ac_cv_prog_cc_c89\" >&6; } ;;\nesac\n\n\nac_ext=c\nac_cpp='$CPP $CPPFLAGS'\nac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'\nac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'\nac_compiler_gnu=$ac_cv_c_compiler_gnu\n\n{ echo \"$as_me:$LINENO: checking for a sed that does not truncate output\" >&5\necho $ECHO_N \"checking for a sed that does not truncate output... $ECHO_C\" >&6; }\nif test \"${lt_cv_path_SED+set}\" = set; then\n  echo $ECHO_N \"(cached) $ECHO_C\" >&6\nelse\n  # Loop through the user's path and test for sed and gsed.\n# Then use that list of sed's as ones to test for truncation.\nas_save_IFS=$IFS; IFS=$PATH_SEPARATOR\nfor as_dir in $PATH\ndo\n  IFS=$as_save_IFS\n  test -z \"$as_dir\" && as_dir=.\n  for lt_ac_prog in sed gsed; do\n    for ac_exec_ext in '' $ac_executable_extensions; do\n      if $as_executable_p \"$as_dir/$lt_ac_prog$ac_exec_ext\"; then\n        lt_ac_sed_list=\"$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext\"\n      fi\n    done\n  done\ndone\nlt_ac_max=0\nlt_ac_count=0\n# Add /usr/xpg4/bin/sed as it is typically found on Solaris\n# along with /bin/sed that truncates output.\nfor lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do\n  test ! -f $lt_ac_sed && continue\n  cat /dev/null > conftest.in\n  lt_ac_count=0\n  echo $ECHO_N \"0123456789$ECHO_C\" >conftest.in\n  # Check for GNU sed and select it if it is found.\n  if \"$lt_ac_sed\" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then\n    lt_cv_path_SED=$lt_ac_sed\n    break\n  fi\n  while true; do\n    cat conftest.in conftest.in >conftest.tmp\n    mv conftest.tmp conftest.in\n    cp conftest.in conftest.nl\n    echo >>conftest.nl\n    $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break\n    cmp -s conftest.out conftest.nl || break\n    # 10000 chars as input seems more than enough\n    test $lt_ac_count -gt 10 && break\n    lt_ac_count=`expr $lt_ac_count + 1`\n    if test $lt_ac_count -gt $lt_ac_max; then\n      lt_ac_max=$lt_ac_count\n      lt_cv_path_SED=$lt_ac_sed\n    fi\n  done\ndone\n\nfi\n\nSED=$lt_cv_path_SED\n{ echo \"$as_me:$LINENO: result: $SED\" >&5\necho \"${ECHO_T}$SED\" >&6; }\n\n{ echo \"$as_me:$LINENO: checking for grep that handles long lines and -e\" >&5\necho $ECHO_N \"checking for grep that handles long lines and -e... $ECHO_C\" >&6; }\nif test \"${ac_cv_path_GREP+set}\" = set; then\n  echo $ECHO_N \"(cached) $ECHO_C\" >&6\nelse\n  # Extract the first word of \"grep ggrep\" to use in msg output\nif test -z \"$GREP\"; then\nset dummy grep ggrep; ac_prog_name=$2\nif test \"${ac_cv_path_GREP+set}\" = set; then\n  echo $ECHO_N \"(cached) $ECHO_C\" >&6\nelse\n  ac_path_GREP_found=false\n# Loop through the user's path and test for each of PROGNAME-LIST\nas_save_IFS=$IFS; IFS=$PATH_SEPARATOR\nfor as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin\ndo\n  IFS=$as_save_IFS\n  test -z \"$as_dir\" && as_dir=.\n  for ac_prog in grep ggrep; do\n  for ac_exec_ext in '' $ac_executable_extensions; do\n    ac_path_GREP=\"$as_dir/$ac_prog$ac_exec_ext\"\n    { test -f \"$ac_path_GREP\" && $as_executable_p \"$ac_path_GREP\"; } || continue\n    # Check for GNU ac_path_GREP and select it if it is found.\n  # Check for GNU $ac_path_GREP\ncase `\"$ac_path_GREP\" --version 2>&1` in\n*GNU*)\n  ac_cv_path_GREP=\"$ac_path_GREP\" ac_path_GREP_found=:;;\n*)\n  ac_count=0\n  echo $ECHO_N \"0123456789$ECHO_C\" >\"conftest.in\"\n  while :\n  do\n    cat \"conftest.in\" \"conftest.in\" >\"conftest.tmp\"\n    mv \"conftest.tmp\" \"conftest.in\"\n    cp \"conftest.in\" \"conftest.nl\"\n    echo 'GREP' >> \"conftest.nl\"\n    \"$ac_path_GREP\" -e 'GREP$' -e '-(cannot match)-' < \"conftest.nl\" >\"conftest.out\" 2>/dev/null || break\n    diff \"conftest.out\" \"conftest.nl\" >/dev/null 2>&1 || break\n    ac_count=`expr $ac_count + 1`\n    if test $ac_count -gt ${ac_path_GREP_max-0}; then\n      # Best one so far, save it but keep looking for a better one\n      ac_cv_path_GREP=\"$ac_path_GREP\"\n      ac_path_GREP_max=$ac_count\n    fi\n    # 10*(2^10) chars as input seems more than enough\n    test $ac_count -gt 10 && break\n  done\n  rm -f conftest.in conftest.tmp conftest.nl conftest.out;;\nesac\n\n\n    $ac_path_GREP_found && break 3\n  done\ndone\n\ndone\nIFS=$as_save_IFS\n\n\nfi\n\nGREP=\"$ac_cv_path_GREP\"\nif test -z \"$GREP\"; then\n  { { echo \"$as_me:$LINENO: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin\" >&5\necho \"$as_me: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin\" >&2;}\n   { (exit 1); exit 1; }; }\nfi\n\nelse\n  ac_cv_path_GREP=$GREP\nfi\n\n\nfi\n{ echo \"$as_me:$LINENO: result: $ac_cv_path_GREP\" >&5\necho \"${ECHO_T}$ac_cv_path_GREP\" >&6; }\n GREP=\"$ac_cv_path_GREP\"\n\n\n{ echo \"$as_me:$LINENO: checking for egrep\" >&5\necho $ECHO_N \"checking for egrep... $ECHO_C\" >&6; }\nif test \"${ac_cv_path_EGREP+set}\" = set; then\n  echo $ECHO_N \"(cached) $ECHO_C\" >&6\nelse\n  if echo a | $GREP -E '(a|b)' >/dev/null 2>&1\n   then ac_cv_path_EGREP=\"$GREP -E\"\n   else\n     # Extract the first word of \"egrep\" to use in msg output\nif test -z \"$EGREP\"; then\nset dummy egrep; ac_prog_name=$2\nif test \"${ac_cv_path_EGREP+set}\" = set; then\n  echo $ECHO_N \"(cached) $ECHO_C\" >&6\nelse\n  ac_path_EGREP_found=false\n# Loop through the user's path and test for each of PROGNAME-LIST\nas_save_IFS=$IFS; IFS=$PATH_SEPARATOR\nfor as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin\ndo\n  IFS=$as_save_IFS\n  test -z \"$as_dir\" && as_dir=.\n  for ac_prog in egrep; do\n  for ac_exec_ext in '' $ac_executable_extensions; do\n    ac_path_EGREP=\"$as_dir/$ac_prog$ac_exec_ext\"\n    { test -f \"$ac_path_EGREP\" && $as_executable_p \"$ac_path_EGREP\"; } || continue\n    # Check for GNU ac_path_EGREP and select it if it is found.\n  # Check for GNU $ac_path_EGREP\ncase `\"$ac_path_EGREP\" --version 2>&1` in\n*GNU*)\n  ac_cv_path_EGREP=\"$ac_path_EGREP\" ac_path_EGREP_found=:;;\n*)\n  ac_count=0\n  echo $ECHO_N \"0123456789$ECHO_C\" >\"conftest.in\"\n  while :\n  do\n    cat \"conftest.in\" \"conftest.in\" >\"conftest.tmp\"\n    mv \"conftest.tmp\" \"conftest.in\"\n    cp \"conftest.in\" \"conftest.nl\"\n    echo 'EGREP' >> \"conftest.nl\"\n    \"$ac_path_EGREP\" 'EGREP$' < \"conftest.nl\" >\"conftest.out\" 2>/dev/null || break\n    diff \"conftest.out\" \"conftest.nl\" >/dev/null 2>&1 || break\n    ac_count=`expr $ac_count + 1`\n    if test $ac_count -gt ${ac_path_EGREP_max-0}; then\n      # Best one so far, save it but keep looking for a better one\n      ac_cv_path_EGREP=\"$ac_path_EGREP\"\n      ac_path_EGREP_max=$ac_count\n    fi\n    # 10*(2^10) chars as input seems more than enough\n    test $ac_count -gt 10 && break\n  done\n  rm -f conftest.in conftest.tmp conftest.nl conftest.out;;\nesac\n\n\n    $ac_path_EGREP_found && break 3\n  done\ndone\n\ndone\nIFS=$as_save_IFS\n\n\nfi\n\nEGREP=\"$ac_cv_path_EGREP\"\nif test -z \"$EGREP\"; then\n  { { echo \"$as_me:$LINENO: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin\" >&5\necho \"$as_me: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin\" >&2;}\n   { (exit 1); exit 1; }; }\nfi\n\nelse\n  ac_cv_path_EGREP=$EGREP\nfi\n\n\n   fi\nfi\n{ echo \"$as_me:$LINENO: result: $ac_cv_path_EGREP\" >&5\necho \"${ECHO_T}$ac_cv_path_EGREP\" >&6; }\n EGREP=\"$ac_cv_path_EGREP\"\n\n\n\n# Check whether --with-gnu-ld was given.\nif test \"${with_gnu_ld+set}\" = set; then\n  withval=$with_gnu_ld; test \"$withval\" = no || with_gnu_ld=yes\nelse\n  with_gnu_ld=no\nfi\n\nac_prog=ld\nif test \"$GCC\" = yes; then\n  # Check if gcc -print-prog-name=ld gives a path.\n  { echo \"$as_me:$LINENO: checking for ld used by $CC\" >&5\necho $ECHO_N \"checking for ld used by $CC... $ECHO_C\" >&6; }\n  case $host in\n  *-*-mingw*)\n    # gcc leaves a trailing carriage return which upsets mingw\n    ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\\015'` ;;\n  *)\n    ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;\n  esac\n  case $ac_prog in\n    # Accept absolute paths.\n    [\\\\/]* | ?:[\\\\/]*)\n      re_direlt='/[^/][^/]*/\\.\\./'\n      # Canonicalize the pathname of ld\n      ac_prog=`echo $ac_prog| $SED 's%\\\\\\\\%/%g'`\n      while echo $ac_prog | grep \"$re_direlt\" > /dev/null 2>&1; do\n\tac_prog=`echo $ac_prog| $SED \"s%$re_direlt%/%\"`\n      done\n      test -z \"$LD\" && LD=\"$ac_prog\"\n      ;;\n  \"\")\n    # If it fails, then pretend we aren't using GCC.\n    ac_prog=ld\n    ;;\n  *)\n    # If it is relative, then search for the first ld in PATH.\n    with_gnu_ld=unknown\n    ;;\n  esac\nelif test \"$with_gnu_ld\" = yes; then\n  { echo \"$as_me:$LINENO: checking for GNU ld\" >&5\necho $ECHO_N \"checking for GNU ld... $ECHO_C\" >&6; }\nelse\n  { echo \"$as_me:$LINENO: checking for non-GNU ld\" >&5\necho $ECHO_N \"checking for non-GNU ld... $ECHO_C\" >&6; }\nfi\nif test \"${lt_cv_path_LD+set}\" = set; then\n  echo $ECHO_N \"(cached) $ECHO_C\" >&6\nelse\n  if test -z \"$LD\"; then\n  lt_save_ifs=\"$IFS\"; IFS=$PATH_SEPARATOR\n  for ac_dir in $PATH; do\n    IFS=\"$lt_save_ifs\"\n    test -z \"$ac_dir\" && ac_dir=.\n    if test -f \"$ac_dir/$ac_prog\" || test -f \"$ac_dir/$ac_prog$ac_exeext\"; then\n      lt_cv_path_LD=\"$ac_dir/$ac_prog\"\n      # Check to see if the program is GNU ld.  I'd rather use --version,\n      # but apparently some variants of GNU ld only accept -v.\n      # Break only if it was the GNU/non-GNU ld that we prefer.\n      case `\"$lt_cv_path_LD\" -v 2>&1 </dev/null` in\n      *GNU* | *'with BFD'*)\n\ttest \"$with_gnu_ld\" != no && break\n\t;;\n      *)\n\ttest \"$with_gnu_ld\" != yes && break\n\t;;\n      esac\n    fi\n  done\n  IFS=\"$lt_save_ifs\"\nelse\n  lt_cv_path_LD=\"$LD\" # Let the user override the test with a path.\nfi\nfi\n\nLD=\"$lt_cv_path_LD\"\nif test -n \"$LD\"; then\n  { echo \"$as_me:$LINENO: result: $LD\" >&5\necho \"${ECHO_T}$LD\" >&6; }\nelse\n  { echo \"$as_me:$LINENO: result: no\" >&5\necho \"${ECHO_T}no\" >&6; }\nfi\ntest -z \"$LD\" && { { echo \"$as_me:$LINENO: error: no acceptable ld found in \\$PATH\" >&5\necho \"$as_me: error: no acceptable ld found in \\$PATH\" >&2;}\n   { (exit 1); exit 1; }; }\n{ echo \"$as_me:$LINENO: checking if the linker ($LD) is GNU ld\" >&5\necho $ECHO_N \"checking if the linker ($LD) is GNU ld... $ECHO_C\" >&6; }\nif test \"${lt_cv_prog_gnu_ld+set}\" = set; then\n  echo $ECHO_N \"(cached) $ECHO_C\" >&6\nelse\n  # I'd rather use --version here, but apparently some GNU lds only accept -v.\ncase `$LD -v 2>&1 </dev/null` in\n*GNU* | *'with BFD'*)\n  lt_cv_prog_gnu_ld=yes\n  ;;\n*)\n  lt_cv_prog_gnu_ld=no\n  ;;\nesac\nfi\n{ echo \"$as_me:$LINENO: result: $lt_cv_prog_gnu_ld\" >&5\necho \"${ECHO_T}$lt_cv_prog_gnu_ld\" >&6; }\nwith_gnu_ld=$lt_cv_prog_gnu_ld\n\n\n{ echo \"$as_me:$LINENO: checking for $LD option to reload object files\" >&5\necho $ECHO_N \"checking for $LD option to reload object files... $ECHO_C\" >&6; }\nif test \"${lt_cv_ld_reload_flag+set}\" = set; then\n  echo $ECHO_N \"(cached) $ECHO_C\" >&6\nelse\n  lt_cv_ld_reload_flag='-r'\nfi\n{ echo \"$as_me:$LINENO: result: $lt_cv_ld_reload_flag\" >&5\necho \"${ECHO_T}$lt_cv_ld_reload_flag\" >&6; }\nreload_flag=$lt_cv_ld_reload_flag\ncase $reload_flag in\n\"\" | \" \"*) ;;\n*) reload_flag=\" $reload_flag\" ;;\nesac\nreload_cmds='$LD$reload_flag -o $output$reload_objs'\ncase $host_os in\n  darwin*)\n    if test \"$GCC\" = yes; then\n      reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs'\n    else\n      reload_cmds='$LD$reload_flag -o $output$reload_objs'\n    fi\n    ;;\nesac\n\n{ echo \"$as_me:$LINENO: checking for BSD-compatible nm\" >&5\necho $ECHO_N \"checking for BSD-compatible nm... $ECHO_C\" >&6; }\nif test \"${lt_cv_path_NM+set}\" = set; then\n  echo $ECHO_N \"(cached) $ECHO_C\" >&6\nelse\n  if test -n \"$NM\"; then\n  # Let the user override the test.\n  lt_cv_path_NM=\"$NM\"\nelse\n  lt_nm_to_check=\"${ac_tool_prefix}nm\"\n  if test -n \"$ac_tool_prefix\" && test \"$build\" = \"$host\"; then\n    lt_nm_to_check=\"$lt_nm_to_check nm\"\n  fi\n  for lt_tmp_nm in $lt_nm_to_check; do\n    lt_save_ifs=\"$IFS\"; IFS=$PATH_SEPARATOR\n    for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do\n      IFS=\"$lt_save_ifs\"\n      test -z \"$ac_dir\" && ac_dir=.\n      tmp_nm=\"$ac_dir/$lt_tmp_nm\"\n      if test -f \"$tmp_nm\" || test -f \"$tmp_nm$ac_exeext\" ; then\n\t# Check to see if the nm accepts a BSD-compat flag.\n\t# Adding the `sed 1q' prevents false positives on HP-UX, which says:\n\t#   nm: unknown option \"B\" ignored\n\t# Tru64's nm complains that /dev/null is an invalid object file\n\tcase `\"$tmp_nm\" -B /dev/null 2>&1 | sed '1q'` in\n\t*/dev/null* | *'Invalid file or object type'*)\n\t  lt_cv_path_NM=\"$tmp_nm -B\"\n\t  break\n\t  ;;\n\t*)\n\t  case `\"$tmp_nm\" -p /dev/null 2>&1 | sed '1q'` in\n\t  */dev/null*)\n\t    lt_cv_path_NM=\"$tmp_nm -p\"\n\t    break\n\t    ;;\n\t  *)\n\t    lt_cv_path_NM=${lt_cv_path_NM=\"$tmp_nm\"} # keep the first match, but\n\t    continue # so that we can try to find one that supports BSD flags\n\t    ;;\n\t  esac\n\t  ;;\n\tesac\n      fi\n    done\n    IFS=\"$lt_save_ifs\"\n  done\n  test -z \"$lt_cv_path_NM\" && lt_cv_path_NM=nm\nfi\nfi\n{ echo \"$as_me:$LINENO: result: $lt_cv_path_NM\" >&5\necho \"${ECHO_T}$lt_cv_path_NM\" >&6; }\nNM=\"$lt_cv_path_NM\"\n\n{ echo \"$as_me:$LINENO: checking whether ln -s works\" >&5\necho $ECHO_N \"checking whether ln -s works... $ECHO_C\" >&6; }\nLN_S=$as_ln_s\nif test \"$LN_S\" = \"ln -s\"; then\n  { echo \"$as_me:$LINENO: result: yes\" >&5\necho \"${ECHO_T}yes\" >&6; }\nelse\n  { echo \"$as_me:$LINENO: result: no, using $LN_S\" >&5\necho \"${ECHO_T}no, using $LN_S\" >&6; }\nfi\n\n{ echo \"$as_me:$LINENO: checking how to recognise dependent libraries\" >&5\necho $ECHO_N \"checking how to recognise dependent libraries... $ECHO_C\" >&6; }\nif test \"${lt_cv_deplibs_check_method+set}\" = set; then\n  echo $ECHO_N \"(cached) $ECHO_C\" >&6\nelse\n  lt_cv_file_magic_cmd='$MAGIC_CMD'\nlt_cv_file_magic_test_file=\nlt_cv_deplibs_check_method='unknown'\n# Need to set the preceding variable on all platforms that support\n# interlibrary dependencies.\n# 'none' -- dependencies not supported.\n# `unknown' -- same as none, but documents that we really don't know.\n# 'pass_all' -- all dependencies passed with no checks.\n# 'test_compile' -- check by making test program.\n# 'file_magic [[regex]]' -- check by looking for files in library path\n# which responds to the $file_magic_cmd with a given extended regex.\n# If you have `file' or equivalent on your system and you're not sure\n# whether `pass_all' will *always* work, you probably want this one.\n\ncase $host_os in\naix4* | aix5*)\n  lt_cv_deplibs_check_method=pass_all\n  ;;\n\nbeos*)\n  lt_cv_deplibs_check_method=pass_all\n  ;;\n\nbsdi[45]*)\n  lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)'\n  lt_cv_file_magic_cmd='/usr/bin/file -L'\n  lt_cv_file_magic_test_file=/shlib/libc.so\n  ;;\n\ncygwin*)\n  # func_win32_libid is a shell function defined in ltmain.sh\n  lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'\n  lt_cv_file_magic_cmd='func_win32_libid'\n  ;;\n\nmingw* | pw32*)\n  # Base MSYS/MinGW do not provide the 'file' command needed by\n  # func_win32_libid shell function, so use a weaker test based on 'objdump'.\n  lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?'\n  lt_cv_file_magic_cmd='$OBJDUMP -f'\n  ;;\n\ndarwin* | rhapsody*)\n  lt_cv_deplibs_check_method=pass_all\n  ;;\n\nfreebsd* | dragonfly*)\n  if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then\n    case $host_cpu in\n    i*86 )\n      # Not sure whether the presence of OpenBSD here was a mistake.\n      # Let's accept both of them until this is cleared up.\n      lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library'\n      lt_cv_file_magic_cmd=/usr/bin/file\n      lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*`\n      ;;\n    esac\n  else\n    lt_cv_deplibs_check_method=pass_all\n  fi\n  ;;\n\ngnu*)\n  lt_cv_deplibs_check_method=pass_all\n  ;;\n\nhpux10.20* | hpux11*)\n  lt_cv_file_magic_cmd=/usr/bin/file\n  case $host_cpu in\n  ia64*)\n    lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64'\n    lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so\n    ;;\n  hppa*64*)\n    lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - PA-RISC [0-9].[0-9]'\n    lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl\n    ;;\n  *)\n    lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9].[0-9]) shared library'\n    lt_cv_file_magic_test_file=/usr/lib/libc.sl\n    ;;\n  esac\n  ;;\n\ninterix3*)\n  # PIC code is broken on Interix 3.x, that's why |\\.a not |_pic\\.a here\n  lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\\.so|\\.a)$'\n  ;;\n\nirix5* | irix6* | nonstopux*)\n  case $LD in\n  *-32|*\"-32 \") libmagic=32-bit;;\n  *-n32|*\"-n32 \") libmagic=N32;;\n  *-64|*\"-64 \") libmagic=64-bit;;\n  *) libmagic=never-match;;\n  esac\n  lt_cv_deplibs_check_method=pass_all\n  ;;\n\n# This must be Linux ELF.\nlinux* | k*bsd*-gnu)\n  lt_cv_deplibs_check_method=pass_all\n  ;;\n\nnetbsd* | netbsdelf*-gnu)\n  if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then\n    lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\\.so\\.[0-9]+\\.[0-9]+|_pic\\.a)$'\n  else\n    lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\\.so|_pic\\.a)$'\n  fi\n  ;;\n\nnewos6*)\n  lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)'\n  lt_cv_file_magic_cmd=/usr/bin/file\n  lt_cv_file_magic_test_file=/usr/lib/libnls.so\n  ;;\n\nnto-qnx*)\n  lt_cv_deplibs_check_method=unknown\n  ;;\n\nopenbsd*)\n  if test -z \"`echo __ELF__ | $CC -E - | grep __ELF__`\" || test \"$host_os-$host_cpu\" = \"openbsd2.8-powerpc\"; then\n    lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\\.so\\.[0-9]+\\.[0-9]+|\\.so|_pic\\.a)$'\n  else\n    lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\\.so\\.[0-9]+\\.[0-9]+|_pic\\.a)$'\n  fi\n  ;;\n\nosf3* | osf4* | osf5*)\n  lt_cv_deplibs_check_method=pass_all\n  ;;\n\nsolaris*)\n  lt_cv_deplibs_check_method=pass_all\n  ;;\n\nsysv4 | sysv4.3*)\n  case $host_vendor in\n  motorola)\n    lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]'\n    lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*`\n    ;;\n  ncr)\n    lt_cv_deplibs_check_method=pass_all\n    ;;\n  sequent)\n    lt_cv_file_magic_cmd='/bin/file'\n    lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )'\n    ;;\n  sni)\n    lt_cv_file_magic_cmd='/bin/file'\n    lt_cv_deplibs_check_method=\"file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib\"\n    lt_cv_file_magic_test_file=/lib/libc.so\n    ;;\n  siemens)\n    lt_cv_deplibs_check_method=pass_all\n    ;;\n  pc)\n    lt_cv_deplibs_check_method=pass_all\n    ;;\n  esac\n  ;;\n\nsysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)\n  lt_cv_deplibs_check_method=pass_all\n  ;;\nesac\n\nfi\n{ echo \"$as_me:$LINENO: result: $lt_cv_deplibs_check_method\" >&5\necho \"${ECHO_T}$lt_cv_deplibs_check_method\" >&6; }\nfile_magic_cmd=$lt_cv_file_magic_cmd\ndeplibs_check_method=$lt_cv_deplibs_check_method\ntest -z \"$deplibs_check_method\" && deplibs_check_method=unknown\n\n\n\n\n# If no C compiler was specified, use CC.\nLTCC=${LTCC-\"$CC\"}\n\n# If no C compiler flags were specified, use CFLAGS.\nLTCFLAGS=${LTCFLAGS-\"$CFLAGS\"}\n\n# Allow CC to be a program name with arguments.\ncompiler=$CC\n\n\n# Check whether --enable-libtool-lock was given.\nif test \"${enable_libtool_lock+set}\" = set; then\n  enableval=$enable_libtool_lock;\nfi\n\ntest \"x$enable_libtool_lock\" != xno && enable_libtool_lock=yes\n\n# Some flags need to be propagated to the compiler or linker for good\n# libtool support.\ncase $host in\nia64-*-hpux*)\n  # Find out which ABI we are using.\n  echo 'int i;' > conftest.$ac_ext\n  if { (eval echo \"$as_me:$LINENO: \\\"$ac_compile\\\"\") >&5\n  (eval $ac_compile) 2>&5\n  ac_status=$?\n  echo \"$as_me:$LINENO: \\$? = $ac_status\" >&5\n  (exit $ac_status); }; then\n    case `/usr/bin/file conftest.$ac_objext` in\n    *ELF-32*)\n      HPUX_IA64_MODE=\"32\"\n      ;;\n    *ELF-64*)\n      HPUX_IA64_MODE=\"64\"\n      ;;\n    esac\n  fi\n  rm -rf conftest*\n  ;;\n*-*-irix6*)\n  # Find out which ABI we are using.\n  echo '#line 3856 \"configure\"' > conftest.$ac_ext\n  if { (eval echo \"$as_me:$LINENO: \\\"$ac_compile\\\"\") >&5\n  (eval $ac_compile) 2>&5\n  ac_status=$?\n  echo \"$as_me:$LINENO: \\$? = $ac_status\" >&5\n  (exit $ac_status); }; then\n   if test \"$lt_cv_prog_gnu_ld\" = yes; then\n    case `/usr/bin/file conftest.$ac_objext` in\n    *32-bit*)\n      LD=\"${LD-ld} -melf32bsmip\"\n      ;;\n    *N32*)\n      LD=\"${LD-ld} -melf32bmipn32\"\n      ;;\n    *64-bit*)\n      LD=\"${LD-ld} -melf64bmip\"\n      ;;\n    esac\n   else\n    case `/usr/bin/file conftest.$ac_objext` in\n    *32-bit*)\n      LD=\"${LD-ld} -32\"\n      ;;\n    *N32*)\n      LD=\"${LD-ld} -n32\"\n      ;;\n    *64-bit*)\n      LD=\"${LD-ld} -64\"\n      ;;\n    esac\n   fi\n  fi\n  rm -rf conftest*\n  ;;\n\nx86_64-*linux*|ppc*-*linux*|powerpc*-*linux*|s390*-*linux*|sparc*-*linux*)\n  # Find out which ABI we are using.\n  echo 'int i;' > conftest.$ac_ext\n  if { (eval echo \"$as_me:$LINENO: \\\"$ac_compile\\\"\") >&5\n  (eval $ac_compile) 2>&5\n  ac_status=$?\n  echo \"$as_me:$LINENO: \\$? = $ac_status\" >&5\n  (exit $ac_status); }; then\n    case `/usr/bin/file conftest.o` in\n    *32-bit*)\n      case $host in\n        x86_64-*linux*)\n          LD=\"${LD-ld} -m elf_i386\"\n          ;;\n        ppc64-*linux*|powerpc64-*linux*)\n          LD=\"${LD-ld} -m elf32ppclinux\"\n          ;;\n        s390x-*linux*)\n          LD=\"${LD-ld} -m elf_s390\"\n          ;;\n        sparc64-*linux*)\n          LD=\"${LD-ld} -m elf32_sparc\"\n          ;;\n      esac\n      ;;\n    *64-bit*)\n      case $host in\n        x86_64-*linux*)\n          LD=\"${LD-ld} -m elf_x86_64\"\n          ;;\n        ppc*-*linux*|powerpc*-*linux*)\n          LD=\"${LD-ld} -m elf64ppc\"\n          ;;\n        s390*-*linux*)\n          LD=\"${LD-ld} -m elf64_s390\"\n          ;;\n        sparc*-*linux*)\n          LD=\"${LD-ld} -m elf64_sparc\"\n          ;;\n      esac\n      ;;\n    esac\n  fi\n  rm -rf conftest*\n  ;;\n\n*-*-sco3.2v5*)\n  # On SCO OpenServer 5, we need -belf to get full-featured binaries.\n  SAVE_CFLAGS=\"$CFLAGS\"\n  CFLAGS=\"$CFLAGS -belf\"\n  { echo \"$as_me:$LINENO: checking whether the C compiler needs -belf\" >&5\necho $ECHO_N \"checking whether the C compiler needs -belf... $ECHO_C\" >&6; }\nif test \"${lt_cv_cc_needs_belf+set}\" = set; then\n  echo $ECHO_N \"(cached) $ECHO_C\" >&6\nelse\n  ac_ext=c\nac_cpp='$CPP $CPPFLAGS'\nac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'\nac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'\nac_compiler_gnu=$ac_cv_c_compiler_gnu\n\n     cat >conftest.$ac_ext <<_ACEOF\n/* confdefs.h.  */\n_ACEOF\ncat confdefs.h >>conftest.$ac_ext\ncat >>conftest.$ac_ext <<_ACEOF\n/* end confdefs.h.  */\n\nint\nmain ()\n{\n\n  ;\n  return 0;\n}\n_ACEOF\nrm -f conftest.$ac_objext conftest$ac_exeext\nif { (eval echo \"$as_me:$LINENO: \\\"$ac_link\\\"\") >&5\n  (eval $ac_link) 2>conftest.er1\n  ac_status=$?\n  grep -v '^ *+' conftest.er1 >conftest.err\n  rm -f conftest.er1\n  cat conftest.err >&5\n  echo \"$as_me:$LINENO: \\$? = $ac_status\" >&5\n  (exit $ac_status); } &&\n\t { ac_try='test -z \"$ac_c_werror_flag\"\n\t\t\t || test ! -s conftest.err'\n  { (eval echo \"$as_me:$LINENO: \\\"$ac_try\\\"\") >&5\n  (eval $ac_try) 2>&5\n  ac_status=$?\n  echo \"$as_me:$LINENO: \\$? = $ac_status\" >&5\n  (exit $ac_status); }; } &&\n\t { ac_try='test -s conftest$ac_exeext'\n  { (eval echo \"$as_me:$LINENO: \\\"$ac_try\\\"\") >&5\n  (eval $ac_try) 2>&5\n  ac_status=$?\n  echo \"$as_me:$LINENO: \\$? = $ac_status\" >&5\n  (exit $ac_status); }; }; then\n  lt_cv_cc_needs_belf=yes\nelse\n  echo \"$as_me: failed program was:\" >&5\nsed 's/^/| /' conftest.$ac_ext >&5\n\n\tlt_cv_cc_needs_belf=no\nfi\n\nrm -f conftest.err conftest.$ac_objext \\\n      conftest$ac_exeext conftest.$ac_ext\n     ac_ext=c\nac_cpp='$CPP $CPPFLAGS'\nac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'\nac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'\nac_compiler_gnu=$ac_cv_c_compiler_gnu\n\nfi\n{ echo \"$as_me:$LINENO: result: $lt_cv_cc_needs_belf\" >&5\necho \"${ECHO_T}$lt_cv_cc_needs_belf\" >&6; }\n  if test x\"$lt_cv_cc_needs_belf\" != x\"yes\"; then\n    # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf\n    CFLAGS=\"$SAVE_CFLAGS\"\n  fi\n  ;;\nsparc*-*solaris*)\n  # Find out which ABI we are using.\n  echo 'int i;' > conftest.$ac_ext\n  if { (eval echo \"$as_me:$LINENO: \\\"$ac_compile\\\"\") >&5\n  (eval $ac_compile) 2>&5\n  ac_status=$?\n  echo \"$as_me:$LINENO: \\$? = $ac_status\" >&5\n  (exit $ac_status); }; then\n    case `/usr/bin/file conftest.o` in\n    *64-bit*)\n      case $lt_cv_prog_gnu_ld in\n      yes*) LD=\"${LD-ld} -m elf64_sparc\" ;;\n      *)    LD=\"${LD-ld} -64\" ;;\n      esac\n      ;;\n    esac\n  fi\n  rm -rf conftest*\n  ;;\n\n\nesac\n\nneed_locks=\"$enable_libtool_lock\"\n\n\nac_ext=c\nac_cpp='$CPP $CPPFLAGS'\nac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'\nac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'\nac_compiler_gnu=$ac_cv_c_compiler_gnu\n{ echo \"$as_me:$LINENO: checking how to run the C preprocessor\" >&5\necho $ECHO_N \"checking how to run the C preprocessor... $ECHO_C\" >&6; }\n# On Suns, sometimes $CPP names a directory.\nif test -n \"$CPP\" && test -d \"$CPP\"; then\n  CPP=\nfi\nif test -z \"$CPP\"; then\n  if test \"${ac_cv_prog_CPP+set}\" = set; then\n  echo $ECHO_N \"(cached) $ECHO_C\" >&6\nelse\n      # Double quotes because CPP needs to be expanded\n    for CPP in \"$CC -E\" \"$CC -E -traditional-cpp\" \"/lib/cpp\"\n    do\n      ac_preproc_ok=false\nfor ac_c_preproc_warn_flag in '' yes\ndo\n  # Use a header file that comes with gcc, so configuring glibc\n  # with a fresh cross-compiler works.\n  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since\n  # <limits.h> exists even on freestanding compilers.\n  # On the NeXT, cc -E runs the code through the compiler's parser,\n  # not just through cpp. \"Syntax error\" is here to catch this case.\n  cat >conftest.$ac_ext <<_ACEOF\n/* confdefs.h.  */\n_ACEOF\ncat confdefs.h >>conftest.$ac_ext\ncat >>conftest.$ac_ext <<_ACEOF\n/* end confdefs.h.  */\n#ifdef __STDC__\n# include <limits.h>\n#else\n# include <assert.h>\n#endif\n\t\t     Syntax error\n_ACEOF\nif { (eval echo \"$as_me:$LINENO: \\\"$ac_cpp conftest.$ac_ext\\\"\") >&5\n  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1\n  ac_status=$?\n  grep -v '^ *+' conftest.er1 >conftest.err\n  rm -f conftest.er1\n  cat conftest.err >&5\n  echo \"$as_me:$LINENO: \\$? = $ac_status\" >&5\n  (exit $ac_status); } >/dev/null; then\n  if test -s conftest.err; then\n    ac_cpp_err=$ac_c_preproc_warn_flag\n    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag\n  else\n    ac_cpp_err=\n  fi\nelse\n  ac_cpp_err=yes\nfi\nif test -z \"$ac_cpp_err\"; then\n  :\nelse\n  echo \"$as_me: failed program was:\" >&5\nsed 's/^/| /' conftest.$ac_ext >&5\n\n  # Broken: fails on valid input.\ncontinue\nfi\n\nrm -f conftest.err conftest.$ac_ext\n\n  # OK, works on sane cases.  Now check whether nonexistent headers\n  # can be detected and how.\n  cat >conftest.$ac_ext <<_ACEOF\n/* confdefs.h.  */\n_ACEOF\ncat confdefs.h >>conftest.$ac_ext\ncat >>conftest.$ac_ext <<_ACEOF\n/* end confdefs.h.  */\n#include <ac_nonexistent.h>\n_ACEOF\nif { (eval echo \"$as_me:$LINENO: \\\"$ac_cpp conftest.$ac_ext\\\"\") >&5\n  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1\n  ac_status=$?\n  grep -v '^ *+' conftest.er1 >conftest.err\n  rm -f conftest.er1\n  cat conftest.err >&5\n  echo \"$as_me:$LINENO: \\$? = $ac_status\" >&5\n  (exit $ac_status); } >/dev/null; then\n  if test -s conftest.err; then\n    ac_cpp_err=$ac_c_preproc_warn_flag\n    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag\n  else\n    ac_cpp_err=\n  fi\nelse\n  ac_cpp_err=yes\nfi\nif test -z \"$ac_cpp_err\"; then\n  # Broken: success on invalid input.\ncontinue\nelse\n  echo \"$as_me: failed program was:\" >&5\nsed 's/^/| /' conftest.$ac_ext >&5\n\n  # Passes both tests.\nac_preproc_ok=:\nbreak\nfi\n\nrm -f conftest.err conftest.$ac_ext\n\ndone\n# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.\nrm -f conftest.err conftest.$ac_ext\nif $ac_preproc_ok; then\n  break\nfi\n\n    done\n    ac_cv_prog_CPP=$CPP\n\nfi\n  CPP=$ac_cv_prog_CPP\nelse\n  ac_cv_prog_CPP=$CPP\nfi\n{ echo \"$as_me:$LINENO: result: $CPP\" >&5\necho \"${ECHO_T}$CPP\" >&6; }\nac_preproc_ok=false\nfor ac_c_preproc_warn_flag in '' yes\ndo\n  # Use a header file that comes with gcc, so configuring glibc\n  # with a fresh cross-compiler works.\n  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since\n  # <limits.h> exists even on freestanding compilers.\n  # On the NeXT, cc -E runs the code through the compiler's parser,\n  # not just through cpp. \"Syntax error\" is here to catch this case.\n  cat >conftest.$ac_ext <<_ACEOF\n/* confdefs.h.  */\n_ACEOF\ncat confdefs.h >>conftest.$ac_ext\ncat >>conftest.$ac_ext <<_ACEOF\n/* end confdefs.h.  */\n#ifdef __STDC__\n# include <limits.h>\n#else\n# include <assert.h>\n#endif\n\t\t     Syntax error\n_ACEOF\nif { (eval echo \"$as_me:$LINENO: \\\"$ac_cpp conftest.$ac_ext\\\"\") >&5\n  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1\n  ac_status=$?\n  grep -v '^ *+' conftest.er1 >conftest.err\n  rm -f conftest.er1\n  cat conftest.err >&5\n  echo \"$as_me:$LINENO: \\$? = $ac_status\" >&5\n  (exit $ac_status); } >/dev/null; then\n  if test -s conftest.err; then\n    ac_cpp_err=$ac_c_preproc_warn_flag\n    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag\n  else\n    ac_cpp_err=\n  fi\nelse\n  ac_cpp_err=yes\nfi\nif test -z \"$ac_cpp_err\"; then\n  :\nelse\n  echo \"$as_me: failed program was:\" >&5\nsed 's/^/| /' conftest.$ac_ext >&5\n\n  # Broken: fails on valid input.\ncontinue\nfi\n\nrm -f conftest.err conftest.$ac_ext\n\n  # OK, works on sane cases.  Now check whether nonexistent headers\n  # can be detected and how.\n  cat >conftest.$ac_ext <<_ACEOF\n/* confdefs.h.  */\n_ACEOF\ncat confdefs.h >>conftest.$ac_ext\ncat >>conftest.$ac_ext <<_ACEOF\n/* end confdefs.h.  */\n#include <ac_nonexistent.h>\n_ACEOF\nif { (eval echo \"$as_me:$LINENO: \\\"$ac_cpp conftest.$ac_ext\\\"\") >&5\n  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1\n  ac_status=$?\n  grep -v '^ *+' conftest.er1 >conftest.err\n  rm -f conftest.er1\n  cat conftest.err >&5\n  echo \"$as_me:$LINENO: \\$? = $ac_status\" >&5\n  (exit $ac_status); } >/dev/null; then\n  if test -s conftest.err; then\n    ac_cpp_err=$ac_c_preproc_warn_flag\n    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag\n  else\n    ac_cpp_err=\n  fi\nelse\n  ac_cpp_err=yes\nfi\nif test -z \"$ac_cpp_err\"; then\n  # Broken: success on invalid input.\ncontinue\nelse\n  echo \"$as_me: failed program was:\" >&5\nsed 's/^/| /' conftest.$ac_ext >&5\n\n  # Passes both tests.\nac_preproc_ok=:\nbreak\nfi\n\nrm -f conftest.err conftest.$ac_ext\n\ndone\n# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.\nrm -f conftest.err conftest.$ac_ext\nif $ac_preproc_ok; then\n  :\nelse\n  { { echo \"$as_me:$LINENO: error: C preprocessor \\\"$CPP\\\" fails sanity check\nSee \\`config.log' for more details.\" >&5\necho \"$as_me: error: C preprocessor \\\"$CPP\\\" fails sanity check\nSee \\`config.log' for more details.\" >&2;}\n   { (exit 1); exit 1; }; }\nfi\n\nac_ext=c\nac_cpp='$CPP $CPPFLAGS'\nac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'\nac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'\nac_compiler_gnu=$ac_cv_c_compiler_gnu\n\n\n{ echo \"$as_me:$LINENO: checking for ANSI C header files\" >&5\necho $ECHO_N \"checking for ANSI C header files... $ECHO_C\" >&6; }\nif test \"${ac_cv_header_stdc+set}\" = set; then\n  echo $ECHO_N \"(cached) $ECHO_C\" >&6\nelse\n  cat >conftest.$ac_ext <<_ACEOF\n/* confdefs.h.  */\n_ACEOF\ncat confdefs.h >>conftest.$ac_ext\ncat >>conftest.$ac_ext <<_ACEOF\n/* end confdefs.h.  */\n#include <stdlib.h>\n#include <stdarg.h>\n#include <string.h>\n#include <float.h>\n\nint\nmain ()\n{\n\n  ;\n  return 0;\n}\n_ACEOF\nrm -f conftest.$ac_objext\nif { (eval echo \"$as_me:$LINENO: \\\"$ac_compile\\\"\") >&5\n  (eval $ac_compile) 2>conftest.er1\n  ac_status=$?\n  grep -v '^ *+' conftest.er1 >conftest.err\n  rm -f conftest.er1\n  cat conftest.err >&5\n  echo \"$as_me:$LINENO: \\$? = $ac_status\" >&5\n  (exit $ac_status); } &&\n\t { ac_try='test -z \"$ac_c_werror_flag\"\n\t\t\t || test ! -s conftest.err'\n  { (eval echo \"$as_me:$LINENO: \\\"$ac_try\\\"\") >&5\n  (eval $ac_try) 2>&5\n  ac_status=$?\n  echo \"$as_me:$LINENO: \\$? = $ac_status\" >&5\n  (exit $ac_status); }; } &&\n\t { ac_try='test -s conftest.$ac_objext'\n  { (eval echo \"$as_me:$LINENO: \\\"$ac_try\\\"\") >&5\n  (eval $ac_try) 2>&5\n  ac_status=$?\n  echo \"$as_me:$LINENO: \\$? = $ac_status\" >&5\n  (exit $ac_status); }; }; then\n  ac_cv_header_stdc=yes\nelse\n  echo \"$as_me: failed program was:\" >&5\nsed 's/^/| /' conftest.$ac_ext >&5\n\n\tac_cv_header_stdc=no\nfi\n\nrm -f conftest.err conftest.$ac_objext conftest.$ac_ext\n\nif test $ac_cv_header_stdc = yes; then\n  # SunOS 4.x string.h does not declare mem*, contrary to ANSI.\n  cat >conftest.$ac_ext <<_ACEOF\n/* confdefs.h.  */\n_ACEOF\ncat confdefs.h >>conftest.$ac_ext\ncat >>conftest.$ac_ext <<_ACEOF\n/* end confdefs.h.  */\n#include <string.h>\n\n_ACEOF\nif (eval \"$ac_cpp conftest.$ac_ext\") 2>&5 |\n  $EGREP \"memchr\" >/dev/null 2>&1; then\n  :\nelse\n  ac_cv_header_stdc=no\nfi\nrm -f conftest*\n\nfi\n\nif test $ac_cv_header_stdc = yes; then\n  # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.\n  cat >conftest.$ac_ext <<_ACEOF\n/* confdefs.h.  */\n_ACEOF\ncat confdefs.h >>conftest.$ac_ext\ncat >>conftest.$ac_ext <<_ACEOF\n/* end confdefs.h.  */\n#include <stdlib.h>\n\n_ACEOF\nif (eval \"$ac_cpp conftest.$ac_ext\") 2>&5 |\n  $EGREP \"free\" >/dev/null 2>&1; then\n  :\nelse\n  ac_cv_header_stdc=no\nfi\nrm -f conftest*\n\nfi\n\nif test $ac_cv_header_stdc = yes; then\n  # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.\n  if test \"$cross_compiling\" = yes; then\n  :\nelse\n  cat >conftest.$ac_ext <<_ACEOF\n/* confdefs.h.  */\n_ACEOF\ncat confdefs.h >>conftest.$ac_ext\ncat >>conftest.$ac_ext <<_ACEOF\n/* end confdefs.h.  */\n#include <ctype.h>\n#include <stdlib.h>\n#if ((' ' & 0x0FF) == 0x020)\n# define ISLOWER(c) ('a' <= (c) && (c) <= 'z')\n# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))\n#else\n# define ISLOWER(c) \\\n\t\t   (('a' <= (c) && (c) <= 'i') \\\n\t\t     || ('j' <= (c) && (c) <= 'r') \\\n\t\t     || ('s' <= (c) && (c) <= 'z'))\n# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c))\n#endif\n\n#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))\nint\nmain ()\n{\n  int i;\n  for (i = 0; i < 256; i++)\n    if (XOR (islower (i), ISLOWER (i))\n\t|| toupper (i) != TOUPPER (i))\n      return 2;\n  return 0;\n}\n_ACEOF\nrm -f conftest$ac_exeext\nif { (eval echo \"$as_me:$LINENO: \\\"$ac_link\\\"\") >&5\n  (eval $ac_link) 2>&5\n  ac_status=$?\n  echo \"$as_me:$LINENO: \\$? = $ac_status\" >&5\n  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'\n  { (eval echo \"$as_me:$LINENO: \\\"$ac_try\\\"\") >&5\n  (eval $ac_try) 2>&5\n  ac_status=$?\n  echo \"$as_me:$LINENO: \\$? = $ac_status\" >&5\n  (exit $ac_status); }; }; then\n  :\nelse\n  echo \"$as_me: program exited with status $ac_status\" >&5\necho \"$as_me: failed program was:\" >&5\nsed 's/^/| /' conftest.$ac_ext >&5\n\n( exit $ac_status )\nac_cv_header_stdc=no\nfi\nrm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext\nfi\n\n\nfi\nfi\n{ echo \"$as_me:$LINENO: result: $ac_cv_header_stdc\" >&5\necho \"${ECHO_T}$ac_cv_header_stdc\" >&6; }\nif test $ac_cv_header_stdc = yes; then\n\ncat >>confdefs.h <<\\_ACEOF\n#define STDC_HEADERS 1\n_ACEOF\n\nfi\n\n# On IRIX 5.3, sys/types and inttypes.h are conflicting.\n\n\n\n\n\n\n\n\n\nfor ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \\\n\t\t  inttypes.h stdint.h unistd.h\ndo\nas_ac_Header=`echo \"ac_cv_header_$ac_header\" | $as_tr_sh`\n{ echo \"$as_me:$LINENO: checking for $ac_header\" >&5\necho $ECHO_N \"checking for $ac_header... $ECHO_C\" >&6; }\nif { as_var=$as_ac_Header; eval \"test \\\"\\${$as_var+set}\\\" = set\"; }; then\n  echo $ECHO_N \"(cached) $ECHO_C\" >&6\nelse\n  cat >conftest.$ac_ext <<_ACEOF\n/* confdefs.h.  */\n_ACEOF\ncat confdefs.h >>conftest.$ac_ext\ncat >>conftest.$ac_ext <<_ACEOF\n/* end confdefs.h.  */\n$ac_includes_default\n\n#include <$ac_header>\n_ACEOF\nrm -f conftest.$ac_objext\nif { (eval echo \"$as_me:$LINENO: \\\"$ac_compile\\\"\") >&5\n  (eval $ac_compile) 2>conftest.er1\n  ac_status=$?\n  grep -v '^ *+' conftest.er1 >conftest.err\n  rm -f conftest.er1\n  cat conftest.err >&5\n  echo \"$as_me:$LINENO: \\$? = $ac_status\" >&5\n  (exit $ac_status); } &&\n\t { ac_try='test -z \"$ac_c_werror_flag\"\n\t\t\t || test ! -s conftest.err'\n  { (eval echo \"$as_me:$LINENO: \\\"$ac_try\\\"\") >&5\n  (eval $ac_try) 2>&5\n  ac_status=$?\n  echo \"$as_me:$LINENO: \\$? = $ac_status\" >&5\n  (exit $ac_status); }; } &&\n\t { ac_try='test -s conftest.$ac_objext'\n  { (eval echo \"$as_me:$LINENO: \\\"$ac_try\\\"\") >&5\n  (eval $ac_try) 2>&5\n  ac_status=$?\n  echo \"$as_me:$LINENO: \\$? = $ac_status\" >&5\n  (exit $ac_status); }; }; then\n  eval \"$as_ac_Header=yes\"\nelse\n  echo \"$as_me: failed program was:\" >&5\nsed 's/^/| /' conftest.$ac_ext >&5\n\n\teval \"$as_ac_Header=no\"\nfi\n\nrm -f conftest.err conftest.$ac_objext conftest.$ac_ext\nfi\nac_res=`eval echo '${'$as_ac_Header'}'`\n\t       { echo \"$as_me:$LINENO: result: $ac_res\" >&5\necho \"${ECHO_T}$ac_res\" >&6; }\nif test `eval echo '${'$as_ac_Header'}'` = yes; then\n  cat >>confdefs.h <<_ACEOF\n#define `echo \"HAVE_$ac_header\" | $as_tr_cpp` 1\n_ACEOF\n\nfi\n\ndone\n\n\n\nfor ac_header in dlfcn.h\ndo\nas_ac_Header=`echo \"ac_cv_header_$ac_header\" | $as_tr_sh`\nif { as_var=$as_ac_Header; eval \"test \\\"\\${$as_var+set}\\\" = set\"; }; then\n  { echo \"$as_me:$LINENO: checking for $ac_header\" >&5\necho $ECHO_N \"checking for $ac_header... $ECHO_C\" >&6; }\nif { as_var=$as_ac_Header; eval \"test \\\"\\${$as_var+set}\\\" = set\"; }; then\n  echo $ECHO_N \"(cached) $ECHO_C\" >&6\nfi\nac_res=`eval echo '${'$as_ac_Header'}'`\n\t       { echo \"$as_me:$LINENO: result: $ac_res\" >&5\necho \"${ECHO_T}$ac_res\" >&6; }\nelse\n  # Is the header compilable?\n{ echo \"$as_me:$LINENO: checking $ac_header usability\" >&5\necho $ECHO_N \"checking $ac_header usability... $ECHO_C\" >&6; }\ncat >conftest.$ac_ext <<_ACEOF\n/* confdefs.h.  */\n_ACEOF\ncat confdefs.h >>conftest.$ac_ext\ncat >>conftest.$ac_ext <<_ACEOF\n/* end confdefs.h.  */\n$ac_includes_default\n#include <$ac_header>\n_ACEOF\nrm -f conftest.$ac_objext\nif { (eval echo \"$as_me:$LINENO: \\\"$ac_compile\\\"\") >&5\n  (eval $ac_compile) 2>conftest.er1\n  ac_status=$?\n  grep -v '^ *+' conftest.er1 >conftest.err\n  rm -f conftest.er1\n  cat conftest.err >&5\n  echo \"$as_me:$LINENO: \\$? = $ac_status\" >&5\n  (exit $ac_status); } &&\n\t { ac_try='test -z \"$ac_c_werror_flag\"\n\t\t\t || test ! -s conftest.err'\n  { (eval echo \"$as_me:$LINENO: \\\"$ac_try\\\"\") >&5\n  (eval $ac_try) 2>&5\n  ac_status=$?\n  echo \"$as_me:$LINENO: \\$? = $ac_status\" >&5\n  (exit $ac_status); }; } &&\n\t { ac_try='test -s conftest.$ac_objext'\n  { (eval echo \"$as_me:$LINENO: \\\"$ac_try\\\"\") >&5\n  (eval $ac_try) 2>&5\n  ac_status=$?\n  echo \"$as_me:$LINENO: \\$? = $ac_status\" >&5\n  (exit $ac_status); }; }; then\n  ac_header_compiler=yes\nelse\n  echo \"$as_me: failed program was:\" >&5\nsed 's/^/| /' conftest.$ac_ext >&5\n\n\tac_header_compiler=no\nfi\n\nrm -f conftest.err conftest.$ac_objext conftest.$ac_ext\n{ echo \"$as_me:$LINENO: result: $ac_header_compiler\" >&5\necho \"${ECHO_T}$ac_header_compiler\" >&6; }\n\n# Is the header present?\n{ echo \"$as_me:$LINENO: checking $ac_header presence\" >&5\necho $ECHO_N \"checking $ac_header presence... $ECHO_C\" >&6; }\ncat >conftest.$ac_ext <<_ACEOF\n/* confdefs.h.  */\n_ACEOF\ncat confdefs.h >>conftest.$ac_ext\ncat >>conftest.$ac_ext <<_ACEOF\n/* end confdefs.h.  */\n#include <$ac_header>\n_ACEOF\nif { (eval echo \"$as_me:$LINENO: \\\"$ac_cpp conftest.$ac_ext\\\"\") >&5\n  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1\n  ac_status=$?\n  grep -v '^ *+' conftest.er1 >conftest.err\n  rm -f conftest.er1\n  cat conftest.err >&5\n  echo \"$as_me:$LINENO: \\$? = $ac_status\" >&5\n  (exit $ac_status); } >/dev/null; then\n  if test -s conftest.err; then\n    ac_cpp_err=$ac_c_preproc_warn_flag\n    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag\n  else\n    ac_cpp_err=\n  fi\nelse\n  ac_cpp_err=yes\nfi\nif test -z \"$ac_cpp_err\"; then\n  ac_header_preproc=yes\nelse\n  echo \"$as_me: failed program was:\" >&5\nsed 's/^/| /' conftest.$ac_ext >&5\n\n  ac_header_preproc=no\nfi\n\nrm -f conftest.err conftest.$ac_ext\n{ echo \"$as_me:$LINENO: result: $ac_header_preproc\" >&5\necho \"${ECHO_T}$ac_header_preproc\" >&6; }\n\n# So?  What about this header?\ncase $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in\n  yes:no: )\n    { echo \"$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!\" >&5\necho \"$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!\" >&2;}\n    { echo \"$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result\" >&5\necho \"$as_me: WARNING: $ac_header: proceeding with the compiler's result\" >&2;}\n    ac_header_preproc=yes\n    ;;\n  no:yes:* )\n    { echo \"$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled\" >&5\necho \"$as_me: WARNING: $ac_header: present but cannot be compiled\" >&2;}\n    { echo \"$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?\" >&5\necho \"$as_me: WARNING: $ac_header:     check for missing prerequisite headers?\" >&2;}\n    { echo \"$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation\" >&5\necho \"$as_me: WARNING: $ac_header: see the Autoconf documentation\" >&2;}\n    { echo \"$as_me:$LINENO: WARNING: $ac_header:     section \\\"Present But Cannot Be Compiled\\\"\" >&5\necho \"$as_me: WARNING: $ac_header:     section \\\"Present But Cannot Be Compiled\\\"\" >&2;}\n    { echo \"$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result\" >&5\necho \"$as_me: WARNING: $ac_header: proceeding with the preprocessor's result\" >&2;}\n    { echo \"$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence\" >&5\necho \"$as_me: WARNING: $ac_header: in the future, the compiler will take precedence\" >&2;}\n\n    ;;\nesac\n{ echo \"$as_me:$LINENO: checking for $ac_header\" >&5\necho $ECHO_N \"checking for $ac_header... $ECHO_C\" >&6; }\nif { as_var=$as_ac_Header; eval \"test \\\"\\${$as_var+set}\\\" = set\"; }; then\n  echo $ECHO_N \"(cached) $ECHO_C\" >&6\nelse\n  eval \"$as_ac_Header=\\$ac_header_preproc\"\nfi\nac_res=`eval echo '${'$as_ac_Header'}'`\n\t       { echo \"$as_me:$LINENO: result: $ac_res\" >&5\necho \"${ECHO_T}$ac_res\" >&6; }\n\nfi\nif test `eval echo '${'$as_ac_Header'}'` = yes; then\n  cat >>confdefs.h <<_ACEOF\n#define `echo \"HAVE_$ac_header\" | $as_tr_cpp` 1\n_ACEOF\n\nfi\n\ndone\n\nac_ext=cpp\nac_cpp='$CXXCPP $CPPFLAGS'\nac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'\nac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'\nac_compiler_gnu=$ac_cv_cxx_compiler_gnu\nif test -z \"$CXX\"; then\n  if test -n \"$CCC\"; then\n    CXX=$CCC\n  else\n    if test -n \"$ac_tool_prefix\"; then\n  for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC\n  do\n    # Extract the first word of \"$ac_tool_prefix$ac_prog\", so it can be a program name with args.\nset dummy $ac_tool_prefix$ac_prog; ac_word=$2\n{ echo \"$as_me:$LINENO: checking for $ac_word\" >&5\necho $ECHO_N \"checking for $ac_word... $ECHO_C\" >&6; }\nif test \"${ac_cv_prog_CXX+set}\" = set; then\n  echo $ECHO_N \"(cached) $ECHO_C\" >&6\nelse\n  if test -n \"$CXX\"; then\n  ac_cv_prog_CXX=\"$CXX\" # Let the user override the test.\nelse\nas_save_IFS=$IFS; IFS=$PATH_SEPARATOR\nfor as_dir in $PATH\ndo\n  IFS=$as_save_IFS\n  test -z \"$as_dir\" && as_dir=.\n  for ac_exec_ext in '' $ac_executable_extensions; do\n  if { test -f \"$as_dir/$ac_word$ac_exec_ext\" && $as_executable_p \"$as_dir/$ac_word$ac_exec_ext\"; }; then\n    ac_cv_prog_CXX=\"$ac_tool_prefix$ac_prog\"\n    echo \"$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext\" >&5\n    break 2\n  fi\ndone\ndone\nIFS=$as_save_IFS\n\nfi\nfi\nCXX=$ac_cv_prog_CXX\nif test -n \"$CXX\"; then\n  { echo \"$as_me:$LINENO: result: $CXX\" >&5\necho \"${ECHO_T}$CXX\" >&6; }\nelse\n  { echo \"$as_me:$LINENO: result: no\" >&5\necho \"${ECHO_T}no\" >&6; }\nfi\n\n\n    test -n \"$CXX\" && break\n  done\nfi\nif test -z \"$CXX\"; then\n  ac_ct_CXX=$CXX\n  for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC\ndo\n  # Extract the first word of \"$ac_prog\", so it can be a program name with args.\nset dummy $ac_prog; ac_word=$2\n{ echo \"$as_me:$LINENO: checking for $ac_word\" >&5\necho $ECHO_N \"checking for $ac_word... $ECHO_C\" >&6; }\nif test \"${ac_cv_prog_ac_ct_CXX+set}\" = set; then\n  echo $ECHO_N \"(cached) $ECHO_C\" >&6\nelse\n  if test -n \"$ac_ct_CXX\"; then\n  ac_cv_prog_ac_ct_CXX=\"$ac_ct_CXX\" # Let the user override the test.\nelse\nas_save_IFS=$IFS; IFS=$PATH_SEPARATOR\nfor as_dir in $PATH\ndo\n  IFS=$as_save_IFS\n  test -z \"$as_dir\" && as_dir=.\n  for ac_exec_ext in '' $ac_executable_extensions; do\n  if { test -f \"$as_dir/$ac_word$ac_exec_ext\" && $as_executable_p \"$as_dir/$ac_word$ac_exec_ext\"; }; then\n    ac_cv_prog_ac_ct_CXX=\"$ac_prog\"\n    echo \"$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext\" >&5\n    break 2\n  fi\ndone\ndone\nIFS=$as_save_IFS\n\nfi\nfi\nac_ct_CXX=$ac_cv_prog_ac_ct_CXX\nif test -n \"$ac_ct_CXX\"; then\n  { echo \"$as_me:$LINENO: result: $ac_ct_CXX\" >&5\necho \"${ECHO_T}$ac_ct_CXX\" >&6; }\nelse\n  { echo \"$as_me:$LINENO: result: no\" >&5\necho \"${ECHO_T}no\" >&6; }\nfi\n\n\n  test -n \"$ac_ct_CXX\" && break\ndone\n\n  if test \"x$ac_ct_CXX\" = x; then\n    CXX=\"g++\"\n  else\n    case $cross_compiling:$ac_tool_warned in\nyes:)\n{ echo \"$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools\nwhose name does not start with the host triplet.  If you think this\nconfiguration is useful to you, please write to autoconf@gnu.org.\" >&5\necho \"$as_me: WARNING: In the future, Autoconf will not detect cross-tools\nwhose name does not start with the host triplet.  If you think this\nconfiguration is useful to you, please write to autoconf@gnu.org.\" >&2;}\nac_tool_warned=yes ;;\nesac\n    CXX=$ac_ct_CXX\n  fi\nfi\n\n  fi\nfi\n# Provide some information about the compiler.\necho \"$as_me:$LINENO: checking for C++ compiler version\" >&5\nac_compiler=`set X $ac_compile; echo $2`\n{ (eval echo \"$as_me:$LINENO: \\\"$ac_compiler --version >&5\\\"\") >&5\n  (eval $ac_compiler --version >&5) 2>&5\n  ac_status=$?\n  echo \"$as_me:$LINENO: \\$? = $ac_status\" >&5\n  (exit $ac_status); }\n{ (eval echo \"$as_me:$LINENO: \\\"$ac_compiler -v >&5\\\"\") >&5\n  (eval $ac_compiler -v >&5) 2>&5\n  ac_status=$?\n  echo \"$as_me:$LINENO: \\$? = $ac_status\" >&5\n  (exit $ac_status); }\n{ (eval echo \"$as_me:$LINENO: \\\"$ac_compiler -V >&5\\\"\") >&5\n  (eval $ac_compiler -V >&5) 2>&5\n  ac_status=$?\n  echo \"$as_me:$LINENO: \\$? = $ac_status\" >&5\n  (exit $ac_status); }\n\n{ echo \"$as_me:$LINENO: checking whether we are using the GNU C++ compiler\" >&5\necho $ECHO_N \"checking whether we are using the GNU C++ compiler... $ECHO_C\" >&6; }\nif test \"${ac_cv_cxx_compiler_gnu+set}\" = set; then\n  echo $ECHO_N \"(cached) $ECHO_C\" >&6\nelse\n  cat >conftest.$ac_ext <<_ACEOF\n/* confdefs.h.  */\n_ACEOF\ncat confdefs.h >>conftest.$ac_ext\ncat >>conftest.$ac_ext <<_ACEOF\n/* end confdefs.h.  */\n\nint\nmain ()\n{\n#ifndef __GNUC__\n       choke me\n#endif\n\n  ;\n  return 0;\n}\n_ACEOF\nrm -f conftest.$ac_objext\nif { (eval echo \"$as_me:$LINENO: \\\"$ac_compile\\\"\") >&5\n  (eval $ac_compile) 2>conftest.er1\n  ac_status=$?\n  grep -v '^ *+' conftest.er1 >conftest.err\n  rm -f conftest.er1\n  cat conftest.err >&5\n  echo \"$as_me:$LINENO: \\$? = $ac_status\" >&5\n  (exit $ac_status); } &&\n\t { ac_try='test -z \"$ac_cxx_werror_flag\"\n\t\t\t || test ! -s conftest.err'\n  { (eval echo \"$as_me:$LINENO: \\\"$ac_try\\\"\") >&5\n  (eval $ac_try) 2>&5\n  ac_status=$?\n  echo \"$as_me:$LINENO: \\$? = $ac_status\" >&5\n  (exit $ac_status); }; } &&\n\t { ac_try='test -s conftest.$ac_objext'\n  { (eval echo \"$as_me:$LINENO: \\\"$ac_try\\\"\") >&5\n  (eval $ac_try) 2>&5\n  ac_status=$?\n  echo \"$as_me:$LINENO: \\$? = $ac_status\" >&5\n  (exit $ac_status); }; }; then\n  ac_compiler_gnu=yes\nelse\n  echo \"$as_me: failed program was:\" >&5\nsed 's/^/| /' conftest.$ac_ext >&5\n\n\tac_compiler_gnu=no\nfi\n\nrm -f conftest.err conftest.$ac_objext conftest.$ac_ext\nac_cv_cxx_compiler_gnu=$ac_compiler_gnu\n\nfi\n{ echo \"$as_me:$LINENO: result: $ac_cv_cxx_compiler_gnu\" >&5\necho \"${ECHO_T}$ac_cv_cxx_compiler_gnu\" >&6; }\nGXX=`test $ac_compiler_gnu = yes && echo yes`\nac_test_CXXFLAGS=${CXXFLAGS+set}\nac_save_CXXFLAGS=$CXXFLAGS\n{ echo \"$as_me:$LINENO: checking whether $CXX accepts -g\" >&5\necho $ECHO_N \"checking whether $CXX accepts -g... $ECHO_C\" >&6; }\nif test \"${ac_cv_prog_cxx_g+set}\" = set; then\n  echo $ECHO_N \"(cached) $ECHO_C\" >&6\nelse\n  ac_save_cxx_werror_flag=$ac_cxx_werror_flag\n   ac_cxx_werror_flag=yes\n   ac_cv_prog_cxx_g=no\n   CXXFLAGS=\"-g\"\n   cat >conftest.$ac_ext <<_ACEOF\n/* confdefs.h.  */\n_ACEOF\ncat confdefs.h >>conftest.$ac_ext\ncat >>conftest.$ac_ext <<_ACEOF\n/* end confdefs.h.  */\n\nint\nmain ()\n{\n\n  ;\n  return 0;\n}\n_ACEOF\nrm -f conftest.$ac_objext\nif { (eval echo \"$as_me:$LINENO: \\\"$ac_compile\\\"\") >&5\n  (eval $ac_compile) 2>conftest.er1\n  ac_status=$?\n  grep -v '^ *+' conftest.er1 >conftest.err\n  rm -f conftest.er1\n  cat conftest.err >&5\n  echo \"$as_me:$LINENO: \\$? = $ac_status\" >&5\n  (exit $ac_status); } &&\n\t { ac_try='test -z \"$ac_cxx_werror_flag\"\n\t\t\t || test ! -s conftest.err'\n  { (eval echo \"$as_me:$LINENO: \\\"$ac_try\\\"\") >&5\n  (eval $ac_try) 2>&5\n  ac_status=$?\n  echo \"$as_me:$LINENO: \\$? = $ac_status\" >&5\n  (exit $ac_status); }; } &&\n\t { ac_try='test -s conftest.$ac_objext'\n  { (eval echo \"$as_me:$LINENO: \\\"$ac_try\\\"\") >&5\n  (eval $ac_try) 2>&5\n  ac_status=$?\n  echo \"$as_me:$LINENO: \\$? = $ac_status\" >&5\n  (exit $ac_status); }; }; then\n  ac_cv_prog_cxx_g=yes\nelse\n  echo \"$as_me: failed program was:\" >&5\nsed 's/^/| /' conftest.$ac_ext >&5\n\n\tCXXFLAGS=\"\"\n      cat >conftest.$ac_ext <<_ACEOF\n/* confdefs.h.  */\n_ACEOF\ncat confdefs.h >>conftest.$ac_ext\ncat >>conftest.$ac_ext <<_ACEOF\n/* end confdefs.h.  */\n\nint\nmain ()\n{\n\n  ;\n  return 0;\n}\n_ACEOF\nrm -f conftest.$ac_objext\nif { (eval echo \"$as_me:$LINENO: \\\"$ac_compile\\\"\") >&5\n  (eval $ac_compile) 2>conftest.er1\n  ac_status=$?\n  grep -v '^ *+' conftest.er1 >conftest.err\n  rm -f conftest.er1\n  cat conftest.err >&5\n  echo \"$as_me:$LINENO: \\$? = $ac_status\" >&5\n  (exit $ac_status); } &&\n\t { ac_try='test -z \"$ac_cxx_werror_flag\"\n\t\t\t || test ! -s conftest.err'\n  { (eval echo \"$as_me:$LINENO: \\\"$ac_try\\\"\") >&5\n  (eval $ac_try) 2>&5\n  ac_status=$?\n  echo \"$as_me:$LINENO: \\$? = $ac_status\" >&5\n  (exit $ac_status); }; } &&\n\t { ac_try='test -s conftest.$ac_objext'\n  { (eval echo \"$as_me:$LINENO: \\\"$ac_try\\\"\") >&5\n  (eval $ac_try) 2>&5\n  ac_status=$?\n  echo \"$as_me:$LINENO: \\$? = $ac_status\" >&5\n  (exit $ac_status); }; }; then\n  :\nelse\n  echo \"$as_me: failed program was:\" >&5\nsed 's/^/| /' conftest.$ac_ext >&5\n\n\tac_cxx_werror_flag=$ac_save_cxx_werror_flag\n\t CXXFLAGS=\"-g\"\n\t cat >conftest.$ac_ext <<_ACEOF\n/* confdefs.h.  */\n_ACEOF\ncat confdefs.h >>conftest.$ac_ext\ncat >>conftest.$ac_ext <<_ACEOF\n/* end confdefs.h.  */\n\nint\nmain ()\n{\n\n  ;\n  return 0;\n}\n_ACEOF\nrm -f conftest.$ac_objext\nif { (eval echo \"$as_me:$LINENO: \\\"$ac_compile\\\"\") >&5\n  (eval $ac_compile) 2>conftest.er1\n  ac_status=$?\n  grep -v '^ *+' conftest.er1 >conftest.err\n  rm -f conftest.er1\n  cat conftest.err >&5\n  echo \"$as_me:$LINENO: \\$? = $ac_status\" >&5\n  (exit $ac_status); } &&\n\t { ac_try='test -z \"$ac_cxx_werror_flag\"\n\t\t\t || test ! -s conftest.err'\n  { (eval echo \"$as_me:$LINENO: \\\"$ac_try\\\"\") >&5\n  (eval $ac_try) 2>&5\n  ac_status=$?\n  echo \"$as_me:$LINENO: \\$? = $ac_status\" >&5\n  (exit $ac_status); }; } &&\n\t { ac_try='test -s conftest.$ac_objext'\n  { (eval echo \"$as_me:$LINENO: \\\"$ac_try\\\"\") >&5\n  (eval $ac_try) 2>&5\n  ac_status=$?\n  echo \"$as_me:$LINENO: \\$? = $ac_status\" >&5\n  (exit $ac_status); }; }; then\n  ac_cv_prog_cxx_g=yes\nelse\n  echo \"$as_me: failed program was:\" >&5\nsed 's/^/| /' conftest.$ac_ext >&5\n\n\nfi\n\nrm -f conftest.err conftest.$ac_objext conftest.$ac_ext\nfi\n\nrm -f conftest.err conftest.$ac_objext conftest.$ac_ext\nfi\n\nrm -f conftest.err conftest.$ac_objext conftest.$ac_ext\n   ac_cxx_werror_flag=$ac_save_cxx_werror_flag\nfi\n{ echo \"$as_me:$LINENO: result: $ac_cv_prog_cxx_g\" >&5\necho \"${ECHO_T}$ac_cv_prog_cxx_g\" >&6; }\nif test \"$ac_test_CXXFLAGS\" = set; then\n  CXXFLAGS=$ac_save_CXXFLAGS\nelif test $ac_cv_prog_cxx_g = yes; then\n  if test \"$GXX\" = yes; then\n    CXXFLAGS=\"-g -O2\"\n  else\n    CXXFLAGS=\"-g\"\n  fi\nelse\n  if test \"$GXX\" = yes; then\n    CXXFLAGS=\"-O2\"\n  else\n    CXXFLAGS=\n  fi\nfi\nac_ext=cpp\nac_cpp='$CXXCPP $CPPFLAGS'\nac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'\nac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'\nac_compiler_gnu=$ac_cv_cxx_compiler_gnu\n\n\n\nif test -n \"$CXX\" && ( test \"X$CXX\" != \"Xno\" &&\n    ( (test \"X$CXX\" = \"Xg++\" && `g++ -v >/dev/null 2>&1` ) ||\n    (test \"X$CXX\" != \"Xg++\"))) ; then\n  ac_ext=cpp\nac_cpp='$CXXCPP $CPPFLAGS'\nac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'\nac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'\nac_compiler_gnu=$ac_cv_cxx_compiler_gnu\n{ echo \"$as_me:$LINENO: checking how to run the C++ preprocessor\" >&5\necho $ECHO_N \"checking how to run the C++ preprocessor... $ECHO_C\" >&6; }\nif test -z \"$CXXCPP\"; then\n  if test \"${ac_cv_prog_CXXCPP+set}\" = set; then\n  echo $ECHO_N \"(cached) $ECHO_C\" >&6\nelse\n      # Double quotes because CXXCPP needs to be expanded\n    for CXXCPP in \"$CXX -E\" \"/lib/cpp\"\n    do\n      ac_preproc_ok=false\nfor ac_cxx_preproc_warn_flag in '' yes\ndo\n  # Use a header file that comes with gcc, so configuring glibc\n  # with a fresh cross-compiler works.\n  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since\n  # <limits.h> exists even on freestanding compilers.\n  # On the NeXT, cc -E runs the code through the compiler's parser,\n  # not just through cpp. \"Syntax error\" is here to catch this case.\n  cat >conftest.$ac_ext <<_ACEOF\n/* confdefs.h.  */\n_ACEOF\ncat confdefs.h >>conftest.$ac_ext\ncat >>conftest.$ac_ext <<_ACEOF\n/* end confdefs.h.  */\n#ifdef __STDC__\n# include <limits.h>\n#else\n# include <assert.h>\n#endif\n\t\t     Syntax error\n_ACEOF\nif { (eval echo \"$as_me:$LINENO: \\\"$ac_cpp conftest.$ac_ext\\\"\") >&5\n  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1\n  ac_status=$?\n  grep -v '^ *+' conftest.er1 >conftest.err\n  rm -f conftest.er1\n  cat conftest.err >&5\n  echo \"$as_me:$LINENO: \\$? = $ac_status\" >&5\n  (exit $ac_status); } >/dev/null; then\n  if test -s conftest.err; then\n    ac_cpp_err=$ac_cxx_preproc_warn_flag\n    ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag\n  else\n    ac_cpp_err=\n  fi\nelse\n  ac_cpp_err=yes\nfi\nif test -z \"$ac_cpp_err\"; then\n  :\nelse\n  echo \"$as_me: failed program was:\" >&5\nsed 's/^/| /' conftest.$ac_ext >&5\n\n  # Broken: fails on valid input.\ncontinue\nfi\n\nrm -f conftest.err conftest.$ac_ext\n\n  # OK, works on sane cases.  Now check whether nonexistent headers\n  # can be detected and how.\n  cat >conftest.$ac_ext <<_ACEOF\n/* confdefs.h.  */\n_ACEOF\ncat confdefs.h >>conftest.$ac_ext\ncat >>conftest.$ac_ext <<_ACEOF\n/* end confdefs.h.  */\n#include <ac_nonexistent.h>\n_ACEOF\nif { (eval echo \"$as_me:$LINENO: \\\"$ac_cpp conftest.$ac_ext\\\"\") >&5\n  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1\n  ac_status=$?\n  grep -v '^ *+' conftest.er1 >conftest.err\n  rm -f conftest.er1\n  cat conftest.err >&5\n  echo \"$as_me:$LINENO: \\$? = $ac_status\" >&5\n  (exit $ac_status); } >/dev/null; then\n  if test -s conftest.err; then\n    ac_cpp_err=$ac_cxx_preproc_warn_flag\n    ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag\n  else\n    ac_cpp_err=\n  fi\nelse\n  ac_cpp_err=yes\nfi\nif test -z \"$ac_cpp_err\"; then\n  # Broken: success on invalid input.\ncontinue\nelse\n  echo \"$as_me: failed program was:\" >&5\nsed 's/^/| /' conftest.$ac_ext >&5\n\n  # Passes both tests.\nac_preproc_ok=:\nbreak\nfi\n\nrm -f conftest.err conftest.$ac_ext\n\ndone\n# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.\nrm -f conftest.err conftest.$ac_ext\nif $ac_preproc_ok; then\n  break\nfi\n\n    done\n    ac_cv_prog_CXXCPP=$CXXCPP\n\nfi\n  CXXCPP=$ac_cv_prog_CXXCPP\nelse\n  ac_cv_prog_CXXCPP=$CXXCPP\nfi\n{ echo \"$as_me:$LINENO: result: $CXXCPP\" >&5\necho \"${ECHO_T}$CXXCPP\" >&6; }\nac_preproc_ok=false\nfor ac_cxx_preproc_warn_flag in '' yes\ndo\n  # Use a header file that comes with gcc, so configuring glibc\n  # with a fresh cross-compiler works.\n  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since\n  # <limits.h> exists even on freestanding compilers.\n  # On the NeXT, cc -E runs the code through the compiler's parser,\n  # not just through cpp. \"Syntax error\" is here to catch this case.\n  cat >conftest.$ac_ext <<_ACEOF\n/* confdefs.h.  */\n_ACEOF\ncat confdefs.h >>conftest.$ac_ext\ncat >>conftest.$ac_ext <<_ACEOF\n/* end confdefs.h.  */\n#ifdef __STDC__\n# include <limits.h>\n#else\n# include <assert.h>\n#endif\n\t\t     Syntax error\n_ACEOF\nif { (eval echo \"$as_me:$LINENO: \\\"$ac_cpp conftest.$ac_ext\\\"\") >&5\n  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1\n  ac_status=$?\n  grep -v '^ *+' conftest.er1 >conftest.err\n  rm -f conftest.er1\n  cat conftest.err >&5\n  echo \"$as_me:$LINENO: \\$? = $ac_status\" >&5\n  (exit $ac_status); } >/dev/null; then\n  if test -s conftest.err; then\n    ac_cpp_err=$ac_cxx_preproc_warn_flag\n    ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag\n  else\n    ac_cpp_err=\n  fi\nelse\n  ac_cpp_err=yes\nfi\nif test -z \"$ac_cpp_err\"; then\n  :\nelse\n  echo \"$as_me: failed program was:\" >&5\nsed 's/^/| /' conftest.$ac_ext >&5\n\n  # Broken: fails on valid input.\ncontinue\nfi\n\nrm -f conftest.err conftest.$ac_ext\n\n  # OK, works on sane cases.  Now check whether nonexistent headers\n  # can be detected and how.\n  cat >conftest.$ac_ext <<_ACEOF\n/* confdefs.h.  */\n_ACEOF\ncat confdefs.h >>conftest.$ac_ext\ncat >>conftest.$ac_ext <<_ACEOF\n/* end confdefs.h.  */\n#include <ac_nonexistent.h>\n_ACEOF\nif { (eval echo \"$as_me:$LINENO: \\\"$ac_cpp conftest.$ac_ext\\\"\") >&5\n  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1\n  ac_status=$?\n  grep -v '^ *+' conftest.er1 >conftest.err\n  rm -f conftest.er1\n  cat conftest.err >&5\n  echo \"$as_me:$LINENO: \\$? = $ac_status\" >&5\n  (exit $ac_status); } >/dev/null; then\n  if test -s conftest.err; then\n    ac_cpp_err=$ac_cxx_preproc_warn_flag\n    ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag\n  else\n    ac_cpp_err=\n  fi\nelse\n  ac_cpp_err=yes\nfi\nif test -z \"$ac_cpp_err\"; then\n  # Broken: success on invalid input.\ncontinue\nelse\n  echo \"$as_me: failed program was:\" >&5\nsed 's/^/| /' conftest.$ac_ext >&5\n\n  # Passes both tests.\nac_preproc_ok=:\nbreak\nfi\n\nrm -f conftest.err conftest.$ac_ext\n\ndone\n# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.\nrm -f conftest.err conftest.$ac_ext\nif $ac_preproc_ok; then\n  :\nelse\n  { { echo \"$as_me:$LINENO: error: C++ preprocessor \\\"$CXXCPP\\\" fails sanity check\nSee \\`config.log' for more details.\" >&5\necho \"$as_me: error: C++ preprocessor \\\"$CXXCPP\\\" fails sanity check\nSee \\`config.log' for more details.\" >&2;}\n   { (exit 1); exit 1; }; }\nfi\n\nac_ext=cpp\nac_cpp='$CXXCPP $CPPFLAGS'\nac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'\nac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'\nac_compiler_gnu=$ac_cv_cxx_compiler_gnu\n\nfi\n\n\nac_ext=f\nac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5'\nac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'\nac_compiler_gnu=$ac_cv_f77_compiler_gnu\nif test -n \"$ac_tool_prefix\"; then\n  for ac_prog in g77 f77 xlf frt pgf77 cf77 fort77 fl32 af77 f90 xlf90 pgf90 pghpf epcf90 gfortran g95 f95 fort xlf95 ifort ifc efc pgf95 lf95 ftn\n  do\n    # Extract the first word of \"$ac_tool_prefix$ac_prog\", so it can be a program name with args.\nset dummy $ac_tool_prefix$ac_prog; ac_word=$2\n{ echo \"$as_me:$LINENO: checking for $ac_word\" >&5\necho $ECHO_N \"checking for $ac_word... $ECHO_C\" >&6; }\nif test \"${ac_cv_prog_F77+set}\" = set; then\n  echo $ECHO_N \"(cached) $ECHO_C\" >&6\nelse\n  if test -n \"$F77\"; then\n  ac_cv_prog_F77=\"$F77\" # Let the user override the test.\nelse\nas_save_IFS=$IFS; IFS=$PATH_SEPARATOR\nfor as_dir in $PATH\ndo\n  IFS=$as_save_IFS\n  test -z \"$as_dir\" && as_dir=.\n  for ac_exec_ext in '' $ac_executable_extensions; do\n  if { test -f \"$as_dir/$ac_word$ac_exec_ext\" && $as_executable_p \"$as_dir/$ac_word$ac_exec_ext\"; }; then\n    ac_cv_prog_F77=\"$ac_tool_prefix$ac_prog\"\n    echo \"$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext\" >&5\n    break 2\n  fi\ndone\ndone\nIFS=$as_save_IFS\n\nfi\nfi\nF77=$ac_cv_prog_F77\nif test -n \"$F77\"; then\n  { echo \"$as_me:$LINENO: result: $F77\" >&5\necho \"${ECHO_T}$F77\" >&6; }\nelse\n  { echo \"$as_me:$LINENO: result: no\" >&5\necho \"${ECHO_T}no\" >&6; }\nfi\n\n\n    test -n \"$F77\" && break\n  done\nfi\nif test -z \"$F77\"; then\n  ac_ct_F77=$F77\n  for ac_prog in g77 f77 xlf frt pgf77 cf77 fort77 fl32 af77 f90 xlf90 pgf90 pghpf epcf90 gfortran g95 f95 fort xlf95 ifort ifc efc pgf95 lf95 ftn\ndo\n  # Extract the first word of \"$ac_prog\", so it can be a program name with args.\nset dummy $ac_prog; ac_word=$2\n{ echo \"$as_me:$LINENO: checking for $ac_word\" >&5\necho $ECHO_N \"checking for $ac_word... $ECHO_C\" >&6; }\nif test \"${ac_cv_prog_ac_ct_F77+set}\" = set; then\n  echo $ECHO_N \"(cached) $ECHO_C\" >&6\nelse\n  if test -n \"$ac_ct_F77\"; then\n  ac_cv_prog_ac_ct_F77=\"$ac_ct_F77\" # Let the user override the test.\nelse\nas_save_IFS=$IFS; IFS=$PATH_SEPARATOR\nfor as_dir in $PATH\ndo\n  IFS=$as_save_IFS\n  test -z \"$as_dir\" && as_dir=.\n  for ac_exec_ext in '' $ac_executable_extensions; do\n  if { test -f \"$as_dir/$ac_word$ac_exec_ext\" && $as_executable_p \"$as_dir/$ac_word$ac_exec_ext\"; }; then\n    ac_cv_prog_ac_ct_F77=\"$ac_prog\"\n    echo \"$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext\" >&5\n    break 2\n  fi\ndone\ndone\nIFS=$as_save_IFS\n\nfi\nfi\nac_ct_F77=$ac_cv_prog_ac_ct_F77\nif test -n \"$ac_ct_F77\"; then\n  { echo \"$as_me:$LINENO: result: $ac_ct_F77\" >&5\necho \"${ECHO_T}$ac_ct_F77\" >&6; }\nelse\n  { echo \"$as_me:$LINENO: result: no\" >&5\necho \"${ECHO_T}no\" >&6; }\nfi\n\n\n  test -n \"$ac_ct_F77\" && break\ndone\n\n  if test \"x$ac_ct_F77\" = x; then\n    F77=\"\"\n  else\n    case $cross_compiling:$ac_tool_warned in\nyes:)\n{ echo \"$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools\nwhose name does not start with the host triplet.  If you think this\nconfiguration is useful to you, please write to autoconf@gnu.org.\" >&5\necho \"$as_me: WARNING: In the future, Autoconf will not detect cross-tools\nwhose name does not start with the host triplet.  If you think this\nconfiguration is useful to you, please write to autoconf@gnu.org.\" >&2;}\nac_tool_warned=yes ;;\nesac\n    F77=$ac_ct_F77\n  fi\nfi\n\n\n# Provide some information about the compiler.\necho \"$as_me:$LINENO: checking for Fortran 77 compiler version\" >&5\nac_compiler=`set X $ac_compile; echo $2`\n{ (eval echo \"$as_me:$LINENO: \\\"$ac_compiler --version >&5\\\"\") >&5\n  (eval $ac_compiler --version >&5) 2>&5\n  ac_status=$?\n  echo \"$as_me:$LINENO: \\$? = $ac_status\" >&5\n  (exit $ac_status); }\n{ (eval echo \"$as_me:$LINENO: \\\"$ac_compiler -v >&5\\\"\") >&5\n  (eval $ac_compiler -v >&5) 2>&5\n  ac_status=$?\n  echo \"$as_me:$LINENO: \\$? = $ac_status\" >&5\n  (exit $ac_status); }\n{ (eval echo \"$as_me:$LINENO: \\\"$ac_compiler -V >&5\\\"\") >&5\n  (eval $ac_compiler -V >&5) 2>&5\n  ac_status=$?\n  echo \"$as_me:$LINENO: \\$? = $ac_status\" >&5\n  (exit $ac_status); }\nrm -f a.out\n\n# If we don't use `.F' as extension, the preprocessor is not run on the\n# input file.  (Note that this only needs to work for GNU compilers.)\nac_save_ext=$ac_ext\nac_ext=F\n{ echo \"$as_me:$LINENO: checking whether we are using the GNU Fortran 77 compiler\" >&5\necho $ECHO_N \"checking whether we are using the GNU Fortran 77 compiler... $ECHO_C\" >&6; }\nif test \"${ac_cv_f77_compiler_gnu+set}\" = set; then\n  echo $ECHO_N \"(cached) $ECHO_C\" >&6\nelse\n  cat >conftest.$ac_ext <<_ACEOF\n      program main\n#ifndef __GNUC__\n       choke me\n#endif\n\n      end\n_ACEOF\nrm -f conftest.$ac_objext\nif { (eval echo \"$as_me:$LINENO: \\\"$ac_compile\\\"\") >&5\n  (eval $ac_compile) 2>conftest.er1\n  ac_status=$?\n  grep -v '^ *+' conftest.er1 >conftest.err\n  rm -f conftest.er1\n  cat conftest.err >&5\n  echo \"$as_me:$LINENO: \\$? = $ac_status\" >&5\n  (exit $ac_status); } &&\n\t { ac_try='test -z \"$ac_f77_werror_flag\"\n\t\t\t || test ! -s conftest.err'\n  { (eval echo \"$as_me:$LINENO: \\\"$ac_try\\\"\") >&5\n  (eval $ac_try) 2>&5\n  ac_status=$?\n  echo \"$as_me:$LINENO: \\$? = $ac_status\" >&5\n  (exit $ac_status); }; } &&\n\t { ac_try='test -s conftest.$ac_objext'\n  { (eval echo \"$as_me:$LINENO: \\\"$ac_try\\\"\") >&5\n  (eval $ac_try) 2>&5\n  ac_status=$?\n  echo \"$as_me:$LINENO: \\$? = $ac_status\" >&5\n  (exit $ac_status); }; }; then\n  ac_compiler_gnu=yes\nelse\n  echo \"$as_me: failed program was:\" >&5\nsed 's/^/| /' conftest.$ac_ext >&5\n\n\tac_compiler_gnu=no\nfi\n\nrm -f conftest.err conftest.$ac_objext conftest.$ac_ext\nac_cv_f77_compiler_gnu=$ac_compiler_gnu\n\nfi\n{ echo \"$as_me:$LINENO: result: $ac_cv_f77_compiler_gnu\" >&5\necho \"${ECHO_T}$ac_cv_f77_compiler_gnu\" >&6; }\nac_ext=$ac_save_ext\nac_test_FFLAGS=${FFLAGS+set}\nac_save_FFLAGS=$FFLAGS\nFFLAGS=\n{ echo \"$as_me:$LINENO: checking whether $F77 accepts -g\" >&5\necho $ECHO_N \"checking whether $F77 accepts -g... $ECHO_C\" >&6; }\nif test \"${ac_cv_prog_f77_g+set}\" = set; then\n  echo $ECHO_N \"(cached) $ECHO_C\" >&6\nelse\n  FFLAGS=-g\ncat >conftest.$ac_ext <<_ACEOF\n      program main\n\n      end\n_ACEOF\nrm -f conftest.$ac_objext\nif { (eval echo \"$as_me:$LINENO: \\\"$ac_compile\\\"\") >&5\n  (eval $ac_compile) 2>conftest.er1\n  ac_status=$?\n  grep -v '^ *+' conftest.er1 >conftest.err\n  rm -f conftest.er1\n  cat conftest.err >&5\n  echo \"$as_me:$LINENO: \\$? = $ac_status\" >&5\n  (exit $ac_status); } &&\n\t { ac_try='test -z \"$ac_f77_werror_flag\"\n\t\t\t || test ! -s conftest.err'\n  { (eval echo \"$as_me:$LINENO: \\\"$ac_try\\\"\") >&5\n  (eval $ac_try) 2>&5\n  ac_status=$?\n  echo \"$as_me:$LINENO: \\$? = $ac_status\" >&5\n  (exit $ac_status); }; } &&\n\t { ac_try='test -s conftest.$ac_objext'\n  { (eval echo \"$as_me:$LINENO: \\\"$ac_try\\\"\") >&5\n  (eval $ac_try) 2>&5\n  ac_status=$?\n  echo \"$as_me:$LINENO: \\$? = $ac_status\" >&5\n  (exit $ac_status); }; }; then\n  ac_cv_prog_f77_g=yes\nelse\n  echo \"$as_me: failed program was:\" >&5\nsed 's/^/| /' conftest.$ac_ext >&5\n\n\tac_cv_prog_f77_g=no\nfi\n\nrm -f conftest.err conftest.$ac_objext conftest.$ac_ext\n\nfi\n{ echo \"$as_me:$LINENO: result: $ac_cv_prog_f77_g\" >&5\necho \"${ECHO_T}$ac_cv_prog_f77_g\" >&6; }\nif test \"$ac_test_FFLAGS\" = set; then\n  FFLAGS=$ac_save_FFLAGS\nelif test $ac_cv_prog_f77_g = yes; then\n  if test \"x$ac_cv_f77_compiler_gnu\" = xyes; then\n    FFLAGS=\"-g -O2\"\n  else\n    FFLAGS=\"-g\"\n  fi\nelse\n  if test \"x$ac_cv_f77_compiler_gnu\" = xyes; then\n    FFLAGS=\"-O2\"\n  else\n    FFLAGS=\n  fi\nfi\n\nG77=`test $ac_compiler_gnu = yes && echo yes`\nac_ext=c\nac_cpp='$CPP $CPPFLAGS'\nac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'\nac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'\nac_compiler_gnu=$ac_cv_c_compiler_gnu\n\n\n\n# Autoconf 2.13's AC_OBJEXT and AC_EXEEXT macros only works for C compilers!\n\n# find the maximum length of command line arguments\n{ echo \"$as_me:$LINENO: checking the maximum length of command line arguments\" >&5\necho $ECHO_N \"checking the maximum length of command line arguments... $ECHO_C\" >&6; }\nif test \"${lt_cv_sys_max_cmd_len+set}\" = set; then\n  echo $ECHO_N \"(cached) $ECHO_C\" >&6\nelse\n    i=0\n  teststring=\"ABCD\"\n\n  case $build_os in\n  msdosdjgpp*)\n    # On DJGPP, this test can blow up pretty badly due to problems in libc\n    # (any single argument exceeding 2000 bytes causes a buffer overrun\n    # during glob expansion).  Even if it were fixed, the result of this\n    # check would be larger than it should be.\n    lt_cv_sys_max_cmd_len=12288;    # 12K is about right\n    ;;\n\n  gnu*)\n    # Under GNU Hurd, this test is not required because there is\n    # no limit to the length of command line arguments.\n    # Libtool will interpret -1 as no limit whatsoever\n    lt_cv_sys_max_cmd_len=-1;\n    ;;\n\n  cygwin* | mingw*)\n    # On Win9x/ME, this test blows up -- it succeeds, but takes\n    # about 5 minutes as the teststring grows exponentially.\n    # Worse, since 9x/ME are not pre-emptively multitasking,\n    # you end up with a \"frozen\" computer, even though with patience\n    # the test eventually succeeds (with a max line length of 256k).\n    # Instead, let's just punt: use the minimum linelength reported by\n    # all of the supported platforms: 8192 (on NT/2K/XP).\n    lt_cv_sys_max_cmd_len=8192;\n    ;;\n\n  amigaos*)\n    # On AmigaOS with pdksh, this test takes hours, literally.\n    # So we just punt and use a minimum line length of 8192.\n    lt_cv_sys_max_cmd_len=8192;\n    ;;\n\n  netbsd* | freebsd* | openbsd* | darwin* | dragonfly*)\n    # This has been around since 386BSD, at least.  Likely further.\n    if test -x /sbin/sysctl; then\n      lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax`\n    elif test -x /usr/sbin/sysctl; then\n      lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax`\n    else\n      lt_cv_sys_max_cmd_len=65536\t# usable default for all BSDs\n    fi\n    # And add a safety zone\n    lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \\/ 4`\n    lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \\* 3`\n    ;;\n\n  interix*)\n    # We know the value 262144 and hardcode it with a safety zone (like BSD)\n    lt_cv_sys_max_cmd_len=196608\n    ;;\n\n  osf*)\n    # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure\n    # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not\n    # nice to cause kernel panics so lets avoid the loop below.\n    # First set a reasonable default.\n    lt_cv_sys_max_cmd_len=16384\n    #\n    if test -x /sbin/sysconfig; then\n      case `/sbin/sysconfig -q proc exec_disable_arg_limit` in\n        *1*) lt_cv_sys_max_cmd_len=-1 ;;\n      esac\n    fi\n    ;;\n  sco3.2v5*)\n    lt_cv_sys_max_cmd_len=102400\n    ;;\n  sysv5* | sco5v6* | sysv4.2uw2*)\n    kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null`\n    if test -n \"$kargmax\"; then\n      lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[ \t]//'`\n    else\n      lt_cv_sys_max_cmd_len=32768\n    fi\n    ;;\n  *)\n    # If test is not a shell built-in, we'll probably end up computing a\n    # maximum length that is only half of the actual maximum length, but\n    # we can't tell.\n    SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}}\n    while (test \"X\"`$SHELL $0 --fallback-echo \"X$teststring\" 2>/dev/null` \\\n\t       = \"XX$teststring\") >/dev/null 2>&1 &&\n\t    new_result=`expr \"X$teststring\" : \".*\" 2>&1` &&\n\t    lt_cv_sys_max_cmd_len=$new_result &&\n\t    test $i != 17 # 1/2 MB should be enough\n    do\n      i=`expr $i + 1`\n      teststring=$teststring$teststring\n    done\n    teststring=\n    # Add a significant safety factor because C++ compilers can tack on massive\n    # amounts of additional arguments before passing them to the linker.\n    # It appears as though 1/2 is a usable value.\n    lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \\/ 2`\n    ;;\n  esac\n\nfi\n\nif test -n $lt_cv_sys_max_cmd_len ; then\n  { echo \"$as_me:$LINENO: result: $lt_cv_sys_max_cmd_len\" >&5\necho \"${ECHO_T}$lt_cv_sys_max_cmd_len\" >&6; }\nelse\n  { echo \"$as_me:$LINENO: result: none\" >&5\necho \"${ECHO_T}none\" >&6; }\nfi\n\n\n\n\n# Check for command to grab the raw symbol name followed by C symbol from nm.\n{ echo \"$as_me:$LINENO: checking command to parse $NM output from $compiler object\" >&5\necho $ECHO_N \"checking command to parse $NM output from $compiler object... $ECHO_C\" >&6; }\nif test \"${lt_cv_sys_global_symbol_pipe+set}\" = set; then\n  echo $ECHO_N \"(cached) $ECHO_C\" >&6\nelse\n\n# These are sane defaults that work on at least a few old systems.\n# [They come from Ultrix.  What could be older than Ultrix?!! ;)]\n\n# Character class describing NM global symbol codes.\nsymcode='[BCDEGRST]'\n\n# Regexp to match symbols that can be accessed directly from C.\nsympat='\\([_A-Za-z][_A-Za-z0-9]*\\)'\n\n# Transform an extracted symbol line into a proper C declaration\nlt_cv_sys_global_symbol_to_cdecl=\"sed -n -e 's/^. .* \\(.*\\)$/extern int \\1;/p'\"\n\n# Transform an extracted symbol line into symbol name and symbol address\nlt_cv_sys_global_symbol_to_c_name_address=\"sed -n -e 's/^: \\([^ ]*\\) $/  {\\\\\\\"\\1\\\\\\\", (lt_ptr) 0},/p' -e 's/^$symcode \\([^ ]*\\) \\([^ ]*\\)$/  {\\\"\\2\\\", (lt_ptr) \\&\\2},/p'\"\n\n# Define system-specific variables.\ncase $host_os in\naix*)\n  symcode='[BCDT]'\n  ;;\ncygwin* | mingw* | pw32*)\n  symcode='[ABCDGISTW]'\n  ;;\nhpux*) # Its linker distinguishes data from code symbols\n  if test \"$host_cpu\" = ia64; then\n    symcode='[ABCDEGRST]'\n  fi\n  lt_cv_sys_global_symbol_to_cdecl=\"sed -n -e 's/^T .* \\(.*\\)$/extern int \\1();/p' -e 's/^$symcode* .* \\(.*\\)$/extern char \\1;/p'\"\n  lt_cv_sys_global_symbol_to_c_name_address=\"sed -n -e 's/^: \\([^ ]*\\) $/  {\\\\\\\"\\1\\\\\\\", (lt_ptr) 0},/p' -e 's/^$symcode* \\([^ ]*\\) \\([^ ]*\\)$/  {\\\"\\2\\\", (lt_ptr) \\&\\2},/p'\"\n  ;;\nlinux* | k*bsd*-gnu)\n  if test \"$host_cpu\" = ia64; then\n    symcode='[ABCDGIRSTW]'\n    lt_cv_sys_global_symbol_to_cdecl=\"sed -n -e 's/^T .* \\(.*\\)$/extern int \\1();/p' -e 's/^$symcode* .* \\(.*\\)$/extern char \\1;/p'\"\n    lt_cv_sys_global_symbol_to_c_name_address=\"sed -n -e 's/^: \\([^ ]*\\) $/  {\\\\\\\"\\1\\\\\\\", (lt_ptr) 0},/p' -e 's/^$symcode* \\([^ ]*\\) \\([^ ]*\\)$/  {\\\"\\2\\\", (lt_ptr) \\&\\2},/p'\"\n  fi\n  ;;\nirix* | nonstopux*)\n  symcode='[BCDEGRST]'\n  ;;\nosf*)\n  symcode='[BCDEGQRST]'\n  ;;\nsolaris*)\n  symcode='[BDRT]'\n  ;;\nsco3.2v5*)\n  symcode='[DT]'\n  ;;\nsysv4.2uw2*)\n  symcode='[DT]'\n  ;;\nsysv5* | sco5v6* | unixware* | OpenUNIX*)\n  symcode='[ABDT]'\n  ;;\nsysv4)\n  symcode='[DFNSTU]'\n  ;;\nesac\n\n# Handle CRLF in mingw tool chain\nopt_cr=\ncase $build_os in\nmingw*)\n  opt_cr=`echo 'x\\{0,1\\}' | tr x '\\015'` # option cr in regexp\n  ;;\nesac\n\n# If we're using GNU nm, then use its standard symbol codes.\ncase `$NM -V 2>&1` in\n*GNU* | *'with BFD'*)\n  symcode='[ABCDGIRSTW]' ;;\nesac\n\n# Try without a prefix undercore, then with it.\nfor ac_symprfx in \"\" \"_\"; do\n\n  # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol.\n  symxfrm=\"\\\\1 $ac_symprfx\\\\2 \\\\2\"\n\n  # Write the raw and C identifiers.\n  lt_cv_sys_global_symbol_pipe=\"sed -n -e 's/^.*[ \t]\\($symcode$symcode*\\)[ \t][ \t]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'\"\n\n  # Check to see that the pipe works correctly.\n  pipe_works=no\n\n  rm -f conftest*\n  cat > conftest.$ac_ext <<EOF\n#ifdef __cplusplus\nextern \"C\" {\n#endif\nchar nm_test_var;\nvoid nm_test_func(){}\n#ifdef __cplusplus\n}\n#endif\nint main(){nm_test_var='a';nm_test_func();return(0);}\nEOF\n\n  if { (eval echo \"$as_me:$LINENO: \\\"$ac_compile\\\"\") >&5\n  (eval $ac_compile) 2>&5\n  ac_status=$?\n  echo \"$as_me:$LINENO: \\$? = $ac_status\" >&5\n  (exit $ac_status); }; then\n    # Now try to grab the symbols.\n    nlist=conftest.nm\n    if { (eval echo \"$as_me:$LINENO: \\\"$NM conftest.$ac_objext \\| $lt_cv_sys_global_symbol_pipe \\> $nlist\\\"\") >&5\n  (eval $NM conftest.$ac_objext \\| $lt_cv_sys_global_symbol_pipe \\> $nlist) 2>&5\n  ac_status=$?\n  echo \"$as_me:$LINENO: \\$? = $ac_status\" >&5\n  (exit $ac_status); } && test -s \"$nlist\"; then\n      # Try sorting and uniquifying the output.\n      if sort \"$nlist\" | uniq > \"$nlist\"T; then\n\tmv -f \"$nlist\"T \"$nlist\"\n      else\n\trm -f \"$nlist\"T\n      fi\n\n      # Make sure that we snagged all the symbols we need.\n      if grep ' nm_test_var$' \"$nlist\" >/dev/null; then\n\tif grep ' nm_test_func$' \"$nlist\" >/dev/null; then\n\t  cat <<EOF > conftest.$ac_ext\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\nEOF\n\t  # Now generate the symbol file.\n\t  eval \"$lt_cv_sys_global_symbol_to_cdecl\"' < \"$nlist\" | grep -v main >> conftest.$ac_ext'\n\n\t  cat <<EOF >> conftest.$ac_ext\n#if defined (__STDC__) && __STDC__\n# define lt_ptr_t void *\n#else\n# define lt_ptr_t char *\n# define const\n#endif\n\n/* The mapping between symbol names and symbols. */\nconst struct {\n  const char *name;\n  lt_ptr_t address;\n}\nlt_preloaded_symbols[] =\n{\nEOF\n\t  $SED \"s/^$symcode$symcode* \\(.*\\) \\(.*\\)$/  {\\\"\\2\\\", (lt_ptr_t) \\&\\2},/\" < \"$nlist\" | grep -v main >> conftest.$ac_ext\n\t  cat <<\\EOF >> conftest.$ac_ext\n  {0, (lt_ptr_t) 0}\n};\n\n#ifdef __cplusplus\n}\n#endif\nEOF\n\t  # Now try linking the two files.\n\t  mv conftest.$ac_objext conftstm.$ac_objext\n\t  lt_save_LIBS=\"$LIBS\"\n\t  lt_save_CFLAGS=\"$CFLAGS\"\n\t  LIBS=\"conftstm.$ac_objext\"\n\t  CFLAGS=\"$CFLAGS$lt_prog_compiler_no_builtin_flag\"\n\t  if { (eval echo \"$as_me:$LINENO: \\\"$ac_link\\\"\") >&5\n  (eval $ac_link) 2>&5\n  ac_status=$?\n  echo \"$as_me:$LINENO: \\$? = $ac_status\" >&5\n  (exit $ac_status); } && test -s conftest${ac_exeext}; then\n\t    pipe_works=yes\n\t  fi\n\t  LIBS=\"$lt_save_LIBS\"\n\t  CFLAGS=\"$lt_save_CFLAGS\"\n\telse\n\t  echo \"cannot find nm_test_func in $nlist\" >&5\n\tfi\n      else\n\techo \"cannot find nm_test_var in $nlist\" >&5\n      fi\n    else\n      echo \"cannot run $lt_cv_sys_global_symbol_pipe\" >&5\n    fi\n  else\n    echo \"$progname: failed program was:\" >&5\n    cat conftest.$ac_ext >&5\n  fi\n  rm -f conftest* conftst*\n\n  # Do not use the global_symbol_pipe unless it works.\n  if test \"$pipe_works\" = yes; then\n    break\n  else\n    lt_cv_sys_global_symbol_pipe=\n  fi\ndone\n\nfi\n\nif test -z \"$lt_cv_sys_global_symbol_pipe\"; then\n  lt_cv_sys_global_symbol_to_cdecl=\nfi\nif test -z \"$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl\"; then\n  { echo \"$as_me:$LINENO: result: failed\" >&5\necho \"${ECHO_T}failed\" >&6; }\nelse\n  { echo \"$as_me:$LINENO: result: ok\" >&5\necho \"${ECHO_T}ok\" >&6; }\nfi\n\n{ echo \"$as_me:$LINENO: checking for objdir\" >&5\necho $ECHO_N \"checking for objdir... $ECHO_C\" >&6; }\nif test \"${lt_cv_objdir+set}\" = set; then\n  echo $ECHO_N \"(cached) $ECHO_C\" >&6\nelse\n  rm -f .libs 2>/dev/null\nmkdir .libs 2>/dev/null\nif test -d .libs; then\n  lt_cv_objdir=.libs\nelse\n  # MS-DOS does not allow filenames that begin with a dot.\n  lt_cv_objdir=_libs\nfi\nrmdir .libs 2>/dev/null\nfi\n{ echo \"$as_me:$LINENO: result: $lt_cv_objdir\" >&5\necho \"${ECHO_T}$lt_cv_objdir\" >&6; }\nobjdir=$lt_cv_objdir\n\n\n\n\n\ncase $host_os in\naix3*)\n  # AIX sometimes has problems with the GCC collect2 program.  For some\n  # reason, if we set the COLLECT_NAMES environment variable, the problems\n  # vanish in a puff of smoke.\n  if test \"X${COLLECT_NAMES+set}\" != Xset; then\n    COLLECT_NAMES=\n    export COLLECT_NAMES\n  fi\n  ;;\nesac\n\n# Sed substitution that helps us do robust quoting.  It backslashifies\n# metacharacters that are still active within double-quoted strings.\nXsed='sed -e 1s/^X//'\nsed_quote_subst='s/\\([\\\\\"\\\\`$\\\\\\\\]\\)/\\\\\\1/g'\n\n# Same as above, but do not quote variable references.\ndouble_quote_subst='s/\\([\\\\\"\\\\`\\\\\\\\]\\)/\\\\\\1/g'\n\n# Sed substitution to delay expansion of an escaped shell variable in a\n# double_quote_subst'ed string.\ndelay_variable_subst='s/\\\\\\\\\\\\\\\\\\\\\\$/\\\\\\\\\\\\$/g'\n\n# Sed substitution to avoid accidental globbing in evaled expressions\nno_glob_subst='s/\\*/\\\\\\*/g'\n\n# Constants:\nrm=\"rm -f\"\n\n# Global variables:\ndefault_ofile=libtool\ncan_build_shared=yes\n\n# All known linkers require a `.a' archive for static linking (except MSVC,\n# which needs '.lib').\nlibext=a\nltmain=\"$ac_aux_dir/ltmain.sh\"\nofile=\"$default_ofile\"\nwith_gnu_ld=\"$lt_cv_prog_gnu_ld\"\n\nif test -n \"$ac_tool_prefix\"; then\n  # Extract the first word of \"${ac_tool_prefix}ar\", so it can be a program name with args.\nset dummy ${ac_tool_prefix}ar; ac_word=$2\n{ echo \"$as_me:$LINENO: checking for $ac_word\" >&5\necho $ECHO_N \"checking for $ac_word... $ECHO_C\" >&6; }\nif test \"${ac_cv_prog_AR+set}\" = set; then\n  echo $ECHO_N \"(cached) $ECHO_C\" >&6\nelse\n  if test -n \"$AR\"; then\n  ac_cv_prog_AR=\"$AR\" # Let the user override the test.\nelse\nas_save_IFS=$IFS; IFS=$PATH_SEPARATOR\nfor as_dir in $PATH\ndo\n  IFS=$as_save_IFS\n  test -z \"$as_dir\" && as_dir=.\n  for ac_exec_ext in '' $ac_executable_extensions; do\n  if { test -f \"$as_dir/$ac_word$ac_exec_ext\" && $as_executable_p \"$as_dir/$ac_word$ac_exec_ext\"; }; then\n    ac_cv_prog_AR=\"${ac_tool_prefix}ar\"\n    echo \"$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext\" >&5\n    break 2\n  fi\ndone\ndone\nIFS=$as_save_IFS\n\nfi\nfi\nAR=$ac_cv_prog_AR\nif test -n \"$AR\"; then\n  { echo \"$as_me:$LINENO: result: $AR\" >&5\necho \"${ECHO_T}$AR\" >&6; }\nelse\n  { echo \"$as_me:$LINENO: result: no\" >&5\necho \"${ECHO_T}no\" >&6; }\nfi\n\n\nfi\nif test -z \"$ac_cv_prog_AR\"; then\n  ac_ct_AR=$AR\n  # Extract the first word of \"ar\", so it can be a program name with args.\nset dummy ar; ac_word=$2\n{ echo \"$as_me:$LINENO: checking for $ac_word\" >&5\necho $ECHO_N \"checking for $ac_word... $ECHO_C\" >&6; }\nif test \"${ac_cv_prog_ac_ct_AR+set}\" = set; then\n  echo $ECHO_N \"(cached) $ECHO_C\" >&6\nelse\n  if test -n \"$ac_ct_AR\"; then\n  ac_cv_prog_ac_ct_AR=\"$ac_ct_AR\" # Let the user override the test.\nelse\nas_save_IFS=$IFS; IFS=$PATH_SEPARATOR\nfor as_dir in $PATH\ndo\n  IFS=$as_save_IFS\n  test -z \"$as_dir\" && as_dir=.\n  for ac_exec_ext in '' $ac_executable_extensions; do\n  if { test -f \"$as_dir/$ac_word$ac_exec_ext\" && $as_executable_p \"$as_dir/$ac_word$ac_exec_ext\"; }; then\n    ac_cv_prog_ac_ct_AR=\"ar\"\n    echo \"$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext\" >&5\n    break 2\n  fi\ndone\ndone\nIFS=$as_save_IFS\n\nfi\nfi\nac_ct_AR=$ac_cv_prog_ac_ct_AR\nif test -n \"$ac_ct_AR\"; then\n  { echo \"$as_me:$LINENO: result: $ac_ct_AR\" >&5\necho \"${ECHO_T}$ac_ct_AR\" >&6; }\nelse\n  { echo \"$as_me:$LINENO: result: no\" >&5\necho \"${ECHO_T}no\" >&6; }\nfi\n\n  if test \"x$ac_ct_AR\" = x; then\n    AR=\"false\"\n  else\n    case $cross_compiling:$ac_tool_warned in\nyes:)\n{ echo \"$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools\nwhose name does not start with the host triplet.  If you think this\nconfiguration is useful to you, please write to autoconf@gnu.org.\" >&5\necho \"$as_me: WARNING: In the future, Autoconf will not detect cross-tools\nwhose name does not start with the host triplet.  If you think this\nconfiguration is useful to you, please write to autoconf@gnu.org.\" >&2;}\nac_tool_warned=yes ;;\nesac\n    AR=$ac_ct_AR\n  fi\nelse\n  AR=\"$ac_cv_prog_AR\"\nfi\n\nif test -n \"$ac_tool_prefix\"; then\n  # Extract the first word of \"${ac_tool_prefix}ranlib\", so it can be a program name with args.\nset dummy ${ac_tool_prefix}ranlib; ac_word=$2\n{ echo \"$as_me:$LINENO: checking for $ac_word\" >&5\necho $ECHO_N \"checking for $ac_word... $ECHO_C\" >&6; }\nif test \"${ac_cv_prog_RANLIB+set}\" = set; then\n  echo $ECHO_N \"(cached) $ECHO_C\" >&6\nelse\n  if test -n \"$RANLIB\"; then\n  ac_cv_prog_RANLIB=\"$RANLIB\" # Let the user override the test.\nelse\nas_save_IFS=$IFS; IFS=$PATH_SEPARATOR\nfor as_dir in $PATH\ndo\n  IFS=$as_save_IFS\n  test -z \"$as_dir\" && as_dir=.\n  for ac_exec_ext in '' $ac_executable_extensions; do\n  if { test -f \"$as_dir/$ac_word$ac_exec_ext\" && $as_executable_p \"$as_dir/$ac_word$ac_exec_ext\"; }; then\n    ac_cv_prog_RANLIB=\"${ac_tool_prefix}ranlib\"\n    echo \"$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext\" >&5\n    break 2\n  fi\ndone\ndone\nIFS=$as_save_IFS\n\nfi\nfi\nRANLIB=$ac_cv_prog_RANLIB\nif test -n \"$RANLIB\"; then\n  { echo \"$as_me:$LINENO: result: $RANLIB\" >&5\necho \"${ECHO_T}$RANLIB\" >&6; }\nelse\n  { echo \"$as_me:$LINENO: result: no\" >&5\necho \"${ECHO_T}no\" >&6; }\nfi\n\n\nfi\nif test -z \"$ac_cv_prog_RANLIB\"; then\n  ac_ct_RANLIB=$RANLIB\n  # Extract the first word of \"ranlib\", so it can be a program name with args.\nset dummy ranlib; ac_word=$2\n{ echo \"$as_me:$LINENO: checking for $ac_word\" >&5\necho $ECHO_N \"checking for $ac_word... $ECHO_C\" >&6; }\nif test \"${ac_cv_prog_ac_ct_RANLIB+set}\" = set; then\n  echo $ECHO_N \"(cached) $ECHO_C\" >&6\nelse\n  if test -n \"$ac_ct_RANLIB\"; then\n  ac_cv_prog_ac_ct_RANLIB=\"$ac_ct_RANLIB\" # Let the user override the test.\nelse\nas_save_IFS=$IFS; IFS=$PATH_SEPARATOR\nfor as_dir in $PATH\ndo\n  IFS=$as_save_IFS\n  test -z \"$as_dir\" && as_dir=.\n  for ac_exec_ext in '' $ac_executable_extensions; do\n  if { test -f \"$as_dir/$ac_word$ac_exec_ext\" && $as_executable_p \"$as_dir/$ac_word$ac_exec_ext\"; }; then\n    ac_cv_prog_ac_ct_RANLIB=\"ranlib\"\n    echo \"$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext\" >&5\n    break 2\n  fi\ndone\ndone\nIFS=$as_save_IFS\n\nfi\nfi\nac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB\nif test -n \"$ac_ct_RANLIB\"; then\n  { echo \"$as_me:$LINENO: result: $ac_ct_RANLIB\" >&5\necho \"${ECHO_T}$ac_ct_RANLIB\" >&6; }\nelse\n  { echo \"$as_me:$LINENO: result: no\" >&5\necho \"${ECHO_T}no\" >&6; }\nfi\n\n  if test \"x$ac_ct_RANLIB\" = x; then\n    RANLIB=\":\"\n  else\n    case $cross_compiling:$ac_tool_warned in\nyes:)\n{ echo \"$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools\nwhose name does not start with the host triplet.  If you think this\nconfiguration is useful to you, please write to autoconf@gnu.org.\" >&5\necho \"$as_me: WARNING: In the future, Autoconf will not detect cross-tools\nwhose name does not start with the host triplet.  If you think this\nconfiguration is useful to you, please write to autoconf@gnu.org.\" >&2;}\nac_tool_warned=yes ;;\nesac\n    RANLIB=$ac_ct_RANLIB\n  fi\nelse\n  RANLIB=\"$ac_cv_prog_RANLIB\"\nfi\n\nif test -n \"$ac_tool_prefix\"; then\n  # Extract the first word of \"${ac_tool_prefix}strip\", so it can be a program name with args.\nset dummy ${ac_tool_prefix}strip; ac_word=$2\n{ echo \"$as_me:$LINENO: checking for $ac_word\" >&5\necho $ECHO_N \"checking for $ac_word... $ECHO_C\" >&6; }\nif test \"${ac_cv_prog_STRIP+set}\" = set; then\n  echo $ECHO_N \"(cached) $ECHO_C\" >&6\nelse\n  if test -n \"$STRIP\"; then\n  ac_cv_prog_STRIP=\"$STRIP\" # Let the user override the test.\nelse\nas_save_IFS=$IFS; IFS=$PATH_SEPARATOR\nfor as_dir in $PATH\ndo\n  IFS=$as_save_IFS\n  test -z \"$as_dir\" && as_dir=.\n  for ac_exec_ext in '' $ac_executable_extensions; do\n  if { test -f \"$as_dir/$ac_word$ac_exec_ext\" && $as_executable_p \"$as_dir/$ac_word$ac_exec_ext\"; }; then\n    ac_cv_prog_STRIP=\"${ac_tool_prefix}strip\"\n    echo \"$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext\" >&5\n    break 2\n  fi\ndone\ndone\nIFS=$as_save_IFS\n\nfi\nfi\nSTRIP=$ac_cv_prog_STRIP\nif test -n \"$STRIP\"; then\n  { echo \"$as_me:$LINENO: result: $STRIP\" >&5\necho \"${ECHO_T}$STRIP\" >&6; }\nelse\n  { echo \"$as_me:$LINENO: result: no\" >&5\necho \"${ECHO_T}no\" >&6; }\nfi\n\n\nfi\nif test -z \"$ac_cv_prog_STRIP\"; then\n  ac_ct_STRIP=$STRIP\n  # Extract the first word of \"strip\", so it can be a program name with args.\nset dummy strip; ac_word=$2\n{ echo \"$as_me:$LINENO: checking for $ac_word\" >&5\necho $ECHO_N \"checking for $ac_word... $ECHO_C\" >&6; }\nif test \"${ac_cv_prog_ac_ct_STRIP+set}\" = set; then\n  echo $ECHO_N \"(cached) $ECHO_C\" >&6\nelse\n  if test -n \"$ac_ct_STRIP\"; then\n  ac_cv_prog_ac_ct_STRIP=\"$ac_ct_STRIP\" # Let the user override the test.\nelse\nas_save_IFS=$IFS; IFS=$PATH_SEPARATOR\nfor as_dir in $PATH\ndo\n  IFS=$as_save_IFS\n  test -z \"$as_dir\" && as_dir=.\n  for ac_exec_ext in '' $ac_executable_extensions; do\n  if { test -f \"$as_dir/$ac_word$ac_exec_ext\" && $as_executable_p \"$as_dir/$ac_word$ac_exec_ext\"; }; then\n    ac_cv_prog_ac_ct_STRIP=\"strip\"\n    echo \"$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext\" >&5\n    break 2\n  fi\ndone\ndone\nIFS=$as_save_IFS\n\nfi\nfi\nac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP\nif test -n \"$ac_ct_STRIP\"; then\n  { echo \"$as_me:$LINENO: result: $ac_ct_STRIP\" >&5\necho \"${ECHO_T}$ac_ct_STRIP\" >&6; }\nelse\n  { echo \"$as_me:$LINENO: result: no\" >&5\necho \"${ECHO_T}no\" >&6; }\nfi\n\n  if test \"x$ac_ct_STRIP\" = x; then\n    STRIP=\":\"\n  else\n    case $cross_compiling:$ac_tool_warned in\nyes:)\n{ echo \"$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools\nwhose name does not start with the host triplet.  If you think this\nconfiguration is useful to you, please write to autoconf@gnu.org.\" >&5\necho \"$as_me: WARNING: In the future, Autoconf will not detect cross-tools\nwhose name does not start with the host triplet.  If you think this\nconfiguration is useful to you, please write to autoconf@gnu.org.\" >&2;}\nac_tool_warned=yes ;;\nesac\n    STRIP=$ac_ct_STRIP\n  fi\nelse\n  STRIP=\"$ac_cv_prog_STRIP\"\nfi\n\n\nold_CC=\"$CC\"\nold_CFLAGS=\"$CFLAGS\"\n\n# Set sane defaults for various variables\ntest -z \"$AR\" && AR=ar\ntest -z \"$AR_FLAGS\" && AR_FLAGS=cru\ntest -z \"$AS\" && AS=as\ntest -z \"$CC\" && CC=cc\ntest -z \"$LTCC\" && LTCC=$CC\ntest -z \"$LTCFLAGS\" && LTCFLAGS=$CFLAGS\ntest -z \"$DLLTOOL\" && DLLTOOL=dlltool\ntest -z \"$LD\" && LD=ld\ntest -z \"$LN_S\" && LN_S=\"ln -s\"\ntest -z \"$MAGIC_CMD\" && MAGIC_CMD=file\ntest -z \"$NM\" && NM=nm\ntest -z \"$SED\" && SED=sed\ntest -z \"$OBJDUMP\" && OBJDUMP=objdump\ntest -z \"$RANLIB\" && RANLIB=:\ntest -z \"$STRIP\" && STRIP=:\ntest -z \"$ac_objext\" && ac_objext=o\n\n# Determine commands to create old-style static archives.\nold_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs$old_deplibs'\nold_postinstall_cmds='chmod 644 $oldlib'\nold_postuninstall_cmds=\n\nif test -n \"$RANLIB\"; then\n  case $host_os in\n  openbsd*)\n    old_postinstall_cmds=\"$old_postinstall_cmds~\\$RANLIB -t \\$oldlib\"\n    ;;\n  *)\n    old_postinstall_cmds=\"$old_postinstall_cmds~\\$RANLIB \\$oldlib\"\n    ;;\n  esac\n  old_archive_cmds=\"$old_archive_cmds~\\$RANLIB \\$oldlib\"\nfi\n\nfor cc_temp in $compiler\"\"; do\n  case $cc_temp in\n    compile | *[\\\\/]compile | ccache | *[\\\\/]ccache ) ;;\n    distcc | *[\\\\/]distcc | purify | *[\\\\/]purify ) ;;\n    \\-*) ;;\n    *) break;;\n  esac\ndone\ncc_basename=`$echo \"X$cc_temp\" | $Xsed -e 's%.*/%%' -e \"s%^$host_alias-%%\"`\n\n\n# Only perform the check for file, if the check method requires it\ncase $deplibs_check_method in\nfile_magic*)\n  if test \"$file_magic_cmd\" = '$MAGIC_CMD'; then\n    { echo \"$as_me:$LINENO: checking for ${ac_tool_prefix}file\" >&5\necho $ECHO_N \"checking for ${ac_tool_prefix}file... $ECHO_C\" >&6; }\nif test \"${lt_cv_path_MAGIC_CMD+set}\" = set; then\n  echo $ECHO_N \"(cached) $ECHO_C\" >&6\nelse\n  case $MAGIC_CMD in\n[\\\\/*] |  ?:[\\\\/]*)\n  lt_cv_path_MAGIC_CMD=\"$MAGIC_CMD\" # Let the user override the test with a path.\n  ;;\n*)\n  lt_save_MAGIC_CMD=\"$MAGIC_CMD\"\n  lt_save_ifs=\"$IFS\"; IFS=$PATH_SEPARATOR\n  ac_dummy=\"/usr/bin$PATH_SEPARATOR$PATH\"\n  for ac_dir in $ac_dummy; do\n    IFS=\"$lt_save_ifs\"\n    test -z \"$ac_dir\" && ac_dir=.\n    if test -f $ac_dir/${ac_tool_prefix}file; then\n      lt_cv_path_MAGIC_CMD=\"$ac_dir/${ac_tool_prefix}file\"\n      if test -n \"$file_magic_test_file\"; then\n\tcase $deplibs_check_method in\n\t\"file_magic \"*)\n\t  file_magic_regex=`expr \"$deplibs_check_method\" : \"file_magic \\(.*\\)\"`\n\t  MAGIC_CMD=\"$lt_cv_path_MAGIC_CMD\"\n\t  if eval $file_magic_cmd \\$file_magic_test_file 2> /dev/null |\n\t    $EGREP \"$file_magic_regex\" > /dev/null; then\n\t    :\n\t  else\n\t    cat <<EOF 1>&2\n\n*** Warning: the command libtool uses to detect shared libraries,\n*** $file_magic_cmd, produces output that libtool cannot recognize.\n*** The result is that libtool may fail to recognize shared libraries\n*** as such.  This will affect the creation of libtool libraries that\n*** depend on shared libraries, but programs linked with such libtool\n*** libraries will work regardless of this problem.  Nevertheless, you\n*** may want to report the problem to your system manager and/or to\n*** bug-libtool@gnu.org\n\nEOF\n\t  fi ;;\n\tesac\n      fi\n      break\n    fi\n  done\n  IFS=\"$lt_save_ifs\"\n  MAGIC_CMD=\"$lt_save_MAGIC_CMD\"\n  ;;\nesac\nfi\n\nMAGIC_CMD=\"$lt_cv_path_MAGIC_CMD\"\nif test -n \"$MAGIC_CMD\"; then\n  { echo \"$as_me:$LINENO: result: $MAGIC_CMD\" >&5\necho \"${ECHO_T}$MAGIC_CMD\" >&6; }\nelse\n  { echo \"$as_me:$LINENO: result: no\" >&5\necho \"${ECHO_T}no\" >&6; }\nfi\n\nif test -z \"$lt_cv_path_MAGIC_CMD\"; then\n  if test -n \"$ac_tool_prefix\"; then\n    { echo \"$as_me:$LINENO: checking for file\" >&5\necho $ECHO_N \"checking for file... $ECHO_C\" >&6; }\nif test \"${lt_cv_path_MAGIC_CMD+set}\" = set; then\n  echo $ECHO_N \"(cached) $ECHO_C\" >&6\nelse\n  case $MAGIC_CMD in\n[\\\\/*] |  ?:[\\\\/]*)\n  lt_cv_path_MAGIC_CMD=\"$MAGIC_CMD\" # Let the user override the test with a path.\n  ;;\n*)\n  lt_save_MAGIC_CMD=\"$MAGIC_CMD\"\n  lt_save_ifs=\"$IFS\"; IFS=$PATH_SEPARATOR\n  ac_dummy=\"/usr/bin$PATH_SEPARATOR$PATH\"\n  for ac_dir in $ac_dummy; do\n    IFS=\"$lt_save_ifs\"\n    test -z \"$ac_dir\" && ac_dir=.\n    if test -f $ac_dir/file; then\n      lt_cv_path_MAGIC_CMD=\"$ac_dir/file\"\n      if test -n \"$file_magic_test_file\"; then\n\tcase $deplibs_check_method in\n\t\"file_magic \"*)\n\t  file_magic_regex=`expr \"$deplibs_check_method\" : \"file_magic \\(.*\\)\"`\n\t  MAGIC_CMD=\"$lt_cv_path_MAGIC_CMD\"\n\t  if eval $file_magic_cmd \\$file_magic_test_file 2> /dev/null |\n\t    $EGREP \"$file_magic_regex\" > /dev/null; then\n\t    :\n\t  else\n\t    cat <<EOF 1>&2\n\n*** Warning: the command libtool uses to detect shared libraries,\n*** $file_magic_cmd, produces output that libtool cannot recognize.\n*** The result is that libtool may fail to recognize shared libraries\n*** as such.  This will affect the creation of libtool libraries that\n*** depend on shared libraries, but programs linked with such libtool\n*** libraries will work regardless of this problem.  Nevertheless, you\n*** may want to report the problem to your system manager and/or to\n*** bug-libtool@gnu.org\n\nEOF\n\t  fi ;;\n\tesac\n      fi\n      break\n    fi\n  done\n  IFS=\"$lt_save_ifs\"\n  MAGIC_CMD=\"$lt_save_MAGIC_CMD\"\n  ;;\nesac\nfi\n\nMAGIC_CMD=\"$lt_cv_path_MAGIC_CMD\"\nif test -n \"$MAGIC_CMD\"; then\n  { echo \"$as_me:$LINENO: result: $MAGIC_CMD\" >&5\necho \"${ECHO_T}$MAGIC_CMD\" >&6; }\nelse\n  { echo \"$as_me:$LINENO: result: no\" >&5\necho \"${ECHO_T}no\" >&6; }\nfi\n\n  else\n    MAGIC_CMD=:\n  fi\nfi\n\n  fi\n  ;;\nesac\n\nenable_dlopen=no\nenable_win32_dll=no\n\n# Check whether --enable-libtool-lock was given.\nif test \"${enable_libtool_lock+set}\" = set; then\n  enableval=$enable_libtool_lock;\nfi\n\ntest \"x$enable_libtool_lock\" != xno && enable_libtool_lock=yes\n\n\n# Check whether --with-pic was given.\nif test \"${with_pic+set}\" = set; then\n  withval=$with_pic; pic_mode=\"$withval\"\nelse\n  pic_mode=default\nfi\n\ntest -z \"$pic_mode\" && pic_mode=default\n\n# Use C for the default configuration in the libtool script\ntagname=\nlt_save_CC=\"$CC\"\nac_ext=c\nac_cpp='$CPP $CPPFLAGS'\nac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'\nac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'\nac_compiler_gnu=$ac_cv_c_compiler_gnu\n\n\n# Source file extension for C test sources.\nac_ext=c\n\n# Object file extension for compiled C test sources.\nobjext=o\nobjext=$objext\n\n# Code to be used in simple compile tests\nlt_simple_compile_test_code=\"int some_variable = 0;\\n\"\n\n# Code to be used in simple link tests\nlt_simple_link_test_code='int main(){return(0);}\\n'\n\n\n# If no C compiler was specified, use CC.\nLTCC=${LTCC-\"$CC\"}\n\n# If no C compiler flags were specified, use CFLAGS.\nLTCFLAGS=${LTCFLAGS-\"$CFLAGS\"}\n\n# Allow CC to be a program name with arguments.\ncompiler=$CC\n\n\n# save warnings/boilerplate of simple test code\nac_outfile=conftest.$ac_objext\nprintf \"$lt_simple_compile_test_code\" >conftest.$ac_ext\neval \"$ac_compile\" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err\n_lt_compiler_boilerplate=`cat conftest.err`\n$rm conftest*\n\nac_outfile=conftest.$ac_objext\nprintf \"$lt_simple_link_test_code\" >conftest.$ac_ext\neval \"$ac_link\" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err\n_lt_linker_boilerplate=`cat conftest.err`\n$rm conftest*\n\n\n\nlt_prog_compiler_no_builtin_flag=\n\nif test \"$GCC\" = yes; then\n  lt_prog_compiler_no_builtin_flag=' -fno-builtin'\n\n\n{ echo \"$as_me:$LINENO: checking if $compiler supports -fno-rtti -fno-exceptions\" >&5\necho $ECHO_N \"checking if $compiler supports -fno-rtti -fno-exceptions... $ECHO_C\" >&6; }\nif test \"${lt_cv_prog_compiler_rtti_exceptions+set}\" = set; then\n  echo $ECHO_N \"(cached) $ECHO_C\" >&6\nelse\n  lt_cv_prog_compiler_rtti_exceptions=no\n  ac_outfile=conftest.$ac_objext\n   printf \"$lt_simple_compile_test_code\" > conftest.$ac_ext\n   lt_compiler_flag=\"-fno-rtti -fno-exceptions\"\n   # Insert the option either (1) after the last *FLAGS variable, or\n   # (2) before a word containing \"conftest.\", or (3) at the end.\n   # Note that $ac_compile itself does not contain backslashes and begins\n   # with a dollar sign (not a hyphen), so the echo should work correctly.\n   # The option is referenced via a variable to avoid confusing sed.\n   lt_compile=`echo \"$ac_compile\" | $SED \\\n   -e 's:.*FLAGS}\\{0,1\\} :&$lt_compiler_flag :; t' \\\n   -e 's: [^ ]*conftest\\.: $lt_compiler_flag&:; t' \\\n   -e 's:$: $lt_compiler_flag:'`\n   (eval echo \"\\\"\\$as_me:6502: $lt_compile\\\"\" >&5)\n   (eval \"$lt_compile\" 2>conftest.err)\n   ac_status=$?\n   cat conftest.err >&5\n   echo \"$as_me:6506: \\$? = $ac_status\" >&5\n   if (exit $ac_status) && test -s \"$ac_outfile\"; then\n     # The compiler can only warn and ignore the option if not recognized\n     # So say no if there are warnings other than the usual output.\n     $echo \"X$_lt_compiler_boilerplate\" | $Xsed -e '/^$/d' >conftest.exp\n     $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2\n     if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then\n       lt_cv_prog_compiler_rtti_exceptions=yes\n     fi\n   fi\n   $rm conftest*\n\nfi\n{ echo \"$as_me:$LINENO: result: $lt_cv_prog_compiler_rtti_exceptions\" >&5\necho \"${ECHO_T}$lt_cv_prog_compiler_rtti_exceptions\" >&6; }\n\nif test x\"$lt_cv_prog_compiler_rtti_exceptions\" = xyes; then\n    lt_prog_compiler_no_builtin_flag=\"$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions\"\nelse\n    :\nfi\n\nfi\n\nlt_prog_compiler_wl=\nlt_prog_compiler_pic=\nlt_prog_compiler_static=\n\n{ echo \"$as_me:$LINENO: checking for $compiler option to produce PIC\" >&5\necho $ECHO_N \"checking for $compiler option to produce PIC... $ECHO_C\" >&6; }\n\n  if test \"$GCC\" = yes; then\n    lt_prog_compiler_wl='-Wl,'\n    lt_prog_compiler_static='-static'\n\n    case $host_os in\n      aix*)\n      # All AIX code is PIC.\n      if test \"$host_cpu\" = ia64; then\n\t# AIX 5 now supports IA64 processor\n\tlt_prog_compiler_static='-Bstatic'\n      fi\n      ;;\n\n    amigaos*)\n      # FIXME: we need at least 68020 code to build shared libraries, but\n      # adding the `-m68020' flag to GCC prevents building anything better,\n      # like `-m68040'.\n      lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4'\n      ;;\n\n    beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)\n      # PIC is the default for these OSes.\n      ;;\n\n    mingw* | pw32* | os2*)\n      # This hack is so that the source file can tell whether it is being\n      # built for inclusion in a dll (and should export symbols for example).\n      lt_prog_compiler_pic='-DDLL_EXPORT'\n      ;;\n\n    darwin* | rhapsody*)\n      # PIC is the default on this platform\n      # Common symbols not allowed in MH_DYLIB files\n      lt_prog_compiler_pic='-fno-common'\n      ;;\n\n    interix3*)\n      # Interix 3.x gcc -fpic/-fPIC options generate broken code.\n      # Instead, we relocate shared libraries at runtime.\n      ;;\n\n    msdosdjgpp*)\n      # Just because we use GCC doesn't mean we suddenly get shared libraries\n      # on systems that don't support them.\n      lt_prog_compiler_can_build_shared=no\n      enable_shared=no\n      ;;\n\n    sysv4*MP*)\n      if test -d /usr/nec; then\n\tlt_prog_compiler_pic=-Kconform_pic\n      fi\n      ;;\n\n    hpux*)\n      # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but\n      # not for PA HP-UX.\n      case $host_cpu in\n      hppa*64*|ia64*)\n\t# +Z the default\n\t;;\n      *)\n\tlt_prog_compiler_pic='-fPIC'\n\t;;\n      esac\n      ;;\n\n    *)\n      lt_prog_compiler_pic='-fPIC'\n      ;;\n    esac\n  else\n    # PORTME Check for flag to pass linker flags through the system compiler.\n    case $host_os in\n    aix*)\n      lt_prog_compiler_wl='-Wl,'\n      if test \"$host_cpu\" = ia64; then\n\t# AIX 5 now supports IA64 processor\n\tlt_prog_compiler_static='-Bstatic'\n      else\n\tlt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp'\n      fi\n      ;;\n      darwin*)\n        # PIC is the default on this platform\n        # Common symbols not allowed in MH_DYLIB files\n       case $cc_basename in\n         xlc*)\n         lt_prog_compiler_pic='-qnocommon'\n         lt_prog_compiler_wl='-Wl,'\n         ;;\n       esac\n       ;;\n\n    mingw* | pw32* | os2*)\n      # This hack is so that the source file can tell whether it is being\n      # built for inclusion in a dll (and should export symbols for example).\n      lt_prog_compiler_pic='-DDLL_EXPORT'\n      ;;\n\n    hpux9* | hpux10* | hpux11*)\n      lt_prog_compiler_wl='-Wl,'\n      # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but\n      # not for PA HP-UX.\n      case $host_cpu in\n      hppa*64*|ia64*)\n\t# +Z the default\n\t;;\n      *)\n\tlt_prog_compiler_pic='+Z'\n\t;;\n      esac\n      # Is there a better lt_prog_compiler_static that works with the bundled CC?\n      lt_prog_compiler_static='${wl}-a ${wl}archive'\n      ;;\n\n    irix5* | irix6* | nonstopux*)\n      lt_prog_compiler_wl='-Wl,'\n      # PIC (with -KPIC) is the default.\n      lt_prog_compiler_static='-non_shared'\n      ;;\n\n    newsos6)\n      lt_prog_compiler_pic='-KPIC'\n      lt_prog_compiler_static='-Bstatic'\n      ;;\n\n    linux* | k*bsd*-gnu)\n      case $cc_basename in\n      icc* | ecc*)\n\tlt_prog_compiler_wl='-Wl,'\n\tlt_prog_compiler_pic='-KPIC'\n\tlt_prog_compiler_static='-static'\n        ;;\n      pgcc* | pgf77* | pgf90* | pgf95*)\n        # Portland Group compilers (*not* the Pentium gcc compiler,\n\t# which looks to be a dead project)\n\tlt_prog_compiler_wl='-Wl,'\n\tlt_prog_compiler_pic='-fpic'\n\tlt_prog_compiler_static='-Bstatic'\n        ;;\n      ccc*)\n        lt_prog_compiler_wl='-Wl,'\n        # All Alpha code is PIC.\n        lt_prog_compiler_static='-non_shared'\n        ;;\n      esac\n      ;;\n\n    osf3* | osf4* | osf5*)\n      lt_prog_compiler_wl='-Wl,'\n      # All OSF/1 code is PIC.\n      lt_prog_compiler_static='-non_shared'\n      ;;\n\n    solaris*)\n      lt_prog_compiler_pic='-KPIC'\n      lt_prog_compiler_static='-Bstatic'\n      case $cc_basename in\n      f77* | f90* | f95*)\n\tlt_prog_compiler_wl='-Qoption ld ';;\n      *)\n\tlt_prog_compiler_wl='-Wl,';;\n      esac\n      ;;\n\n    sunos4*)\n      lt_prog_compiler_wl='-Qoption ld '\n      lt_prog_compiler_pic='-PIC'\n      lt_prog_compiler_static='-Bstatic'\n      ;;\n\n    sysv4 | sysv4.2uw2* | sysv4.3*)\n      lt_prog_compiler_wl='-Wl,'\n      lt_prog_compiler_pic='-KPIC'\n      lt_prog_compiler_static='-Bstatic'\n      ;;\n\n    sysv4*MP*)\n      if test -d /usr/nec ;then\n\tlt_prog_compiler_pic='-Kconform_pic'\n\tlt_prog_compiler_static='-Bstatic'\n      fi\n      ;;\n\n    sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)\n      lt_prog_compiler_wl='-Wl,'\n      lt_prog_compiler_pic='-KPIC'\n      lt_prog_compiler_static='-Bstatic'\n      ;;\n\n    unicos*)\n      lt_prog_compiler_wl='-Wl,'\n      lt_prog_compiler_can_build_shared=no\n      ;;\n\n    uts4*)\n      lt_prog_compiler_pic='-pic'\n      lt_prog_compiler_static='-Bstatic'\n      ;;\n\n    *)\n      lt_prog_compiler_can_build_shared=no\n      ;;\n    esac\n  fi\n\n{ echo \"$as_me:$LINENO: result: $lt_prog_compiler_pic\" >&5\necho \"${ECHO_T}$lt_prog_compiler_pic\" >&6; }\n\n#\n# Check to make sure the PIC flag actually works.\n#\nif test -n \"$lt_prog_compiler_pic\"; then\n\n{ echo \"$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic works\" >&5\necho $ECHO_N \"checking if $compiler PIC flag $lt_prog_compiler_pic works... $ECHO_C\" >&6; }\nif test \"${lt_prog_compiler_pic_works+set}\" = set; then\n  echo $ECHO_N \"(cached) $ECHO_C\" >&6\nelse\n  lt_prog_compiler_pic_works=no\n  ac_outfile=conftest.$ac_objext\n   printf \"$lt_simple_compile_test_code\" > conftest.$ac_ext\n   lt_compiler_flag=\"$lt_prog_compiler_pic -DPIC\"\n   # Insert the option either (1) after the last *FLAGS variable, or\n   # (2) before a word containing \"conftest.\", or (3) at the end.\n   # Note that $ac_compile itself does not contain backslashes and begins\n   # with a dollar sign (not a hyphen), so the echo should work correctly.\n   # The option is referenced via a variable to avoid confusing sed.\n   lt_compile=`echo \"$ac_compile\" | $SED \\\n   -e 's:.*FLAGS}\\{0,1\\} :&$lt_compiler_flag :; t' \\\n   -e 's: [^ ]*conftest\\.: $lt_compiler_flag&:; t' \\\n   -e 's:$: $lt_compiler_flag:'`\n   (eval echo \"\\\"\\$as_me:6770: $lt_compile\\\"\" >&5)\n   (eval \"$lt_compile\" 2>conftest.err)\n   ac_status=$?\n   cat conftest.err >&5\n   echo \"$as_me:6774: \\$? = $ac_status\" >&5\n   if (exit $ac_status) && test -s \"$ac_outfile\"; then\n     # The compiler can only warn and ignore the option if not recognized\n     # So say no if there are warnings other than the usual output.\n     $echo \"X$_lt_compiler_boilerplate\" | $Xsed -e '/^$/d' >conftest.exp\n     $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2\n     if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then\n       lt_prog_compiler_pic_works=yes\n     fi\n   fi\n   $rm conftest*\n\nfi\n{ echo \"$as_me:$LINENO: result: $lt_prog_compiler_pic_works\" >&5\necho \"${ECHO_T}$lt_prog_compiler_pic_works\" >&6; }\n\nif test x\"$lt_prog_compiler_pic_works\" = xyes; then\n    case $lt_prog_compiler_pic in\n     \"\" | \" \"*) ;;\n     *) lt_prog_compiler_pic=\" $lt_prog_compiler_pic\" ;;\n     esac\nelse\n    lt_prog_compiler_pic=\n     lt_prog_compiler_can_build_shared=no\nfi\n\nfi\ncase $host_os in\n  # For platforms which do not support PIC, -DPIC is meaningless:\n  *djgpp*)\n    lt_prog_compiler_pic=\n    ;;\n  *)\n    lt_prog_compiler_pic=\"$lt_prog_compiler_pic -DPIC\"\n    ;;\nesac\n\n#\n# Check to make sure the static flag actually works.\n#\nwl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\\\"$lt_prog_compiler_static\\\"\n{ echo \"$as_me:$LINENO: checking if $compiler static flag $lt_tmp_static_flag works\" >&5\necho $ECHO_N \"checking if $compiler static flag $lt_tmp_static_flag works... $ECHO_C\" >&6; }\nif test \"${lt_prog_compiler_static_works+set}\" = set; then\n  echo $ECHO_N \"(cached) $ECHO_C\" >&6\nelse\n  lt_prog_compiler_static_works=no\n   save_LDFLAGS=\"$LDFLAGS\"\n   LDFLAGS=\"$LDFLAGS $lt_tmp_static_flag\"\n   printf \"$lt_simple_link_test_code\" > conftest.$ac_ext\n   if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then\n     # The linker can only warn and ignore the option if not recognized\n     # So say no if there are warnings\n     if test -s conftest.err; then\n       # Append any errors to the config.log.\n       cat conftest.err 1>&5\n       $echo \"X$_lt_linker_boilerplate\" | $Xsed -e '/^$/d' > conftest.exp\n       $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2\n       if diff conftest.exp conftest.er2 >/dev/null; then\n         lt_prog_compiler_static_works=yes\n       fi\n     else\n       lt_prog_compiler_static_works=yes\n     fi\n   fi\n   $rm conftest*\n   LDFLAGS=\"$save_LDFLAGS\"\n\nfi\n{ echo \"$as_me:$LINENO: result: $lt_prog_compiler_static_works\" >&5\necho \"${ECHO_T}$lt_prog_compiler_static_works\" >&6; }\n\nif test x\"$lt_prog_compiler_static_works\" = xyes; then\n    :\nelse\n    lt_prog_compiler_static=\nfi\n\n\n{ echo \"$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext\" >&5\necho $ECHO_N \"checking if $compiler supports -c -o file.$ac_objext... $ECHO_C\" >&6; }\nif test \"${lt_cv_prog_compiler_c_o+set}\" = set; then\n  echo $ECHO_N \"(cached) $ECHO_C\" >&6\nelse\n  lt_cv_prog_compiler_c_o=no\n   $rm -r conftest 2>/dev/null\n   mkdir conftest\n   cd conftest\n   mkdir out\n   printf \"$lt_simple_compile_test_code\" > conftest.$ac_ext\n\n   lt_compiler_flag=\"-o out/conftest2.$ac_objext\"\n   # Insert the option either (1) after the last *FLAGS variable, or\n   # (2) before a word containing \"conftest.\", or (3) at the end.\n   # Note that $ac_compile itself does not contain backslashes and begins\n   # with a dollar sign (not a hyphen), so the echo should work correctly.\n   lt_compile=`echo \"$ac_compile\" | $SED \\\n   -e 's:.*FLAGS}\\{0,1\\} :&$lt_compiler_flag :; t' \\\n   -e 's: [^ ]*conftest\\.: $lt_compiler_flag&:; t' \\\n   -e 's:$: $lt_compiler_flag:'`\n   (eval echo \"\\\"\\$as_me:6874: $lt_compile\\\"\" >&5)\n   (eval \"$lt_compile\" 2>out/conftest.err)\n   ac_status=$?\n   cat out/conftest.err >&5\n   echo \"$as_me:6878: \\$? = $ac_status\" >&5\n   if (exit $ac_status) && test -s out/conftest2.$ac_objext\n   then\n     # The compiler can only warn and ignore the option if not recognized\n     # So say no if there are warnings\n     $echo \"X$_lt_compiler_boilerplate\" | $Xsed -e '/^$/d' > out/conftest.exp\n     $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2\n     if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then\n       lt_cv_prog_compiler_c_o=yes\n     fi\n   fi\n   chmod u+w . 2>&5\n   $rm conftest*\n   # SGI C++ compiler will create directory out/ii_files/ for\n   # template instantiation\n   test -d out/ii_files && $rm out/ii_files/* && rmdir out/ii_files\n   $rm out/* && rmdir out\n   cd ..\n   rmdir conftest\n   $rm conftest*\n\nfi\n{ echo \"$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o\" >&5\necho \"${ECHO_T}$lt_cv_prog_compiler_c_o\" >&6; }\n\n\nhard_links=\"nottested\"\nif test \"$lt_cv_prog_compiler_c_o\" = no && test \"$need_locks\" != no; then\n  # do not overwrite the value of need_locks provided by the user\n  { echo \"$as_me:$LINENO: checking if we can lock with hard links\" >&5\necho $ECHO_N \"checking if we can lock with hard links... $ECHO_C\" >&6; }\n  hard_links=yes\n  $rm conftest*\n  ln conftest.a conftest.b 2>/dev/null && hard_links=no\n  touch conftest.a\n  ln conftest.a conftest.b 2>&5 || hard_links=no\n  ln conftest.a conftest.b 2>/dev/null && hard_links=no\n  { echo \"$as_me:$LINENO: result: $hard_links\" >&5\necho \"${ECHO_T}$hard_links\" >&6; }\n  if test \"$hard_links\" = no; then\n    { echo \"$as_me:$LINENO: WARNING: \\`$CC' does not support \\`-c -o', so \\`make -j' may be unsafe\" >&5\necho \"$as_me: WARNING: \\`$CC' does not support \\`-c -o', so \\`make -j' may be unsafe\" >&2;}\n    need_locks=warn\n  fi\nelse\n  need_locks=no\nfi\n\n{ echo \"$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries\" >&5\necho $ECHO_N \"checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C\" >&6; }\n\n  runpath_var=\n  allow_undefined_flag=\n  enable_shared_with_static_runtimes=no\n  archive_cmds=\n  archive_expsym_cmds=\n  old_archive_From_new_cmds=\n  old_archive_from_expsyms_cmds=\n  export_dynamic_flag_spec=\n  whole_archive_flag_spec=\n  thread_safe_flag_spec=\n  hardcode_libdir_flag_spec=\n  hardcode_libdir_flag_spec_ld=\n  hardcode_libdir_separator=\n  hardcode_direct=no\n  hardcode_minus_L=no\n  hardcode_shlibpath_var=unsupported\n  link_all_deplibs=unknown\n  hardcode_automatic=no\n  module_cmds=\n  module_expsym_cmds=\n  always_export_symbols=no\n  export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\\''s/.* //'\\'' | sort | uniq > $export_symbols'\n  # include_expsyms should be a list of space-separated symbols to be *always*\n  # included in the symbol list\n  include_expsyms=\n  # exclude_expsyms can be an extended regexp of symbols to exclude\n  # it will be wrapped by ` (' and `)$', so one must not match beginning or\n  # end of line.  Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc',\n  # as well as any symbol that contains `d'.\n  exclude_expsyms=\"_GLOBAL_OFFSET_TABLE_\"\n  # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out\n  # platforms (ab)use it in PIC code, but their linkers get confused if\n  # the symbol is explicitly referenced.  Since portable code cannot\n  # rely on this symbol name, it's probably fine to never include it in\n  # preloaded symbol tables.\n  extract_expsyms_cmds=\n  # Just being paranoid about ensuring that cc_basename is set.\n  for cc_temp in $compiler\"\"; do\n  case $cc_temp in\n    compile | *[\\\\/]compile | ccache | *[\\\\/]ccache ) ;;\n    distcc | *[\\\\/]distcc | purify | *[\\\\/]purify ) ;;\n    \\-*) ;;\n    *) break;;\n  esac\ndone\ncc_basename=`$echo \"X$cc_temp\" | $Xsed -e 's%.*/%%' -e \"s%^$host_alias-%%\"`\n\n  case $host_os in\n  cygwin* | mingw* | pw32*)\n    # FIXME: the MSVC++ port hasn't been tested in a loooong time\n    # When not using gcc, we currently assume that we are using\n    # Microsoft Visual C++.\n    if test \"$GCC\" != yes; then\n      with_gnu_ld=no\n    fi\n    ;;\n  interix*)\n    # we just hope/assume this is gcc and not c89 (= MSVC++)\n    with_gnu_ld=yes\n    ;;\n  openbsd*)\n    with_gnu_ld=no\n    ;;\n  esac\n\n  ld_shlibs=yes\n  if test \"$with_gnu_ld\" = yes; then\n    # If archive_cmds runs LD, not CC, wlarc should be empty\n    wlarc='${wl}'\n\n    # Set some defaults for GNU ld with shared library support. These\n    # are reset later if shared libraries are not supported. Putting them\n    # here allows them to be overridden if necessary.\n    runpath_var=LD_RUN_PATH\n    hardcode_libdir_flag_spec='${wl}--rpath ${wl}$libdir'\n    export_dynamic_flag_spec='${wl}--export-dynamic'\n    # ancient GNU ld didn't support --whole-archive et. al.\n    if $LD --help 2>&1 | grep 'no-whole-archive' > /dev/null; then\n\twhole_archive_flag_spec=\"$wlarc\"'--whole-archive$convenience '\"$wlarc\"'--no-whole-archive'\n      else\n  \twhole_archive_flag_spec=\n    fi\n    supports_anon_versioning=no\n    case `$LD -v 2>/dev/null` in\n      *\\ [01].* | *\\ 2.[0-9].* | *\\ 2.10.*) ;; # catch versions < 2.11\n      *\\ 2.11.93.0.2\\ *) supports_anon_versioning=yes ;; # RH7.3 ...\n      *\\ 2.11.92.0.12\\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ...\n      *\\ 2.11.*) ;; # other 2.11 versions\n      *) supports_anon_versioning=yes ;;\n    esac\n\n    # See if GNU ld supports shared libraries.\n    case $host_os in\n    aix3* | aix4* | aix5*)\n      # On AIX/PPC, the GNU linker is very broken\n      if test \"$host_cpu\" != ia64; then\n\tld_shlibs=no\n\tcat <<EOF 1>&2\n\n*** Warning: the GNU linker, at least up to release 2.9.1, is reported\n*** to be unable to reliably create shared libraries on AIX.\n*** Therefore, libtool is disabling shared libraries support.  If you\n*** really care for shared libraries, you may want to modify your PATH\n*** so that a non-GNU linker is found, and then restart.\n\nEOF\n      fi\n      ;;\n\n    amigaos*)\n      archive_cmds='$rm $output_objdir/a2ixlibrary.data~$echo \"#define NAME $libname\" > $output_objdir/a2ixlibrary.data~$echo \"#define LIBRARY_ID 1\" >> $output_objdir/a2ixlibrary.data~$echo \"#define VERSION $major\" >> $output_objdir/a2ixlibrary.data~$echo \"#define REVISION $revision\" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'\n      hardcode_libdir_flag_spec='-L$libdir'\n      hardcode_minus_L=yes\n\n      # Samuel A. Falvo II <kc5tja@dolphin.openprojects.net> reports\n      # that the semantics of dynamic libraries on AmigaOS, at least up\n      # to version 4, is to share data among multiple programs linked\n      # with the same dynamic library.  Since this doesn't match the\n      # behavior of shared libraries on other platforms, we can't use\n      # them.\n      ld_shlibs=no\n      ;;\n\n    beos*)\n      if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then\n\tallow_undefined_flag=unsupported\n\t# Joseph Beckenbach <jrb3@best.com> says some releases of gcc\n\t# support --undefined.  This deserves some investigation.  FIXME\n\tarchive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'\n      else\n\tld_shlibs=no\n      fi\n      ;;\n\n    cygwin* | mingw* | pw32*)\n      # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless,\n      # as there is no search path for DLLs.\n      hardcode_libdir_flag_spec='-L$libdir'\n      allow_undefined_flag=unsupported\n      always_export_symbols=no\n      enable_shared_with_static_runtimes=yes\n      export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\\''/^[BCDGRS] /s/.* \\([^ ]*\\)/\\1 DATA/'\\'' | $SED -e '\\''/^[AITW] /s/.* //'\\'' | sort | uniq > $export_symbols'\n\n      if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then\n        archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'\n\t# If the export-symbols file already is a .def file (1st line\n\t# is EXPORTS), use it as is; otherwise, prepend...\n\tarchive_expsym_cmds='if test \"x`$SED 1q $export_symbols`\" = xEXPORTS; then\n\t  cp $export_symbols $output_objdir/$soname.def;\n\telse\n\t  echo EXPORTS > $output_objdir/$soname.def;\n\t  cat $export_symbols >> $output_objdir/$soname.def;\n\tfi~\n\t$CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'\n      else\n\tld_shlibs=no\n      fi\n      ;;\n\n    interix3*)\n      hardcode_direct=no\n      hardcode_shlibpath_var=no\n      hardcode_libdir_flag_spec='${wl}-rpath,$libdir'\n      export_dynamic_flag_spec='${wl}-E'\n      # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.\n      # Instead, shared libraries are loaded at an image base (0x10000000 by\n      # default) and relocated if they conflict, which is a slow very memory\n      # consuming and fragmenting process.  To avoid this, we pick a random,\n      # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link\n      # time.  Moving up from 0x10000000 also allows more sbrk(2) space.\n      archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \\* 262144 + 1342177280` -o $lib'\n      archive_expsym_cmds='sed \"s,^,_,\" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \\* 262144 + 1342177280` -o $lib'\n      ;;\n\n    linux* | k*bsd*-gnu)\n      if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then\n\ttmp_addflag=\n\tcase $cc_basename,$host_cpu in\n\tpgcc*)\t\t\t\t# Portland Group C compiler\n\t  whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\\\"\\\"; do test  -n \\\"$conv\\\" && new_convenience=\\\"$new_convenience,$conv\\\"; done; $echo \\\"$new_convenience\\\"` ${wl}--no-whole-archive'\n\t  tmp_addflag=' $pic_flag'\n\t  ;;\n\tpgf77* | pgf90* | pgf95*)\t# Portland Group f77 and f90 compilers\n\t  whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\\\"\\\"; do test  -n \\\"$conv\\\" && new_convenience=\\\"$new_convenience,$conv\\\"; done; $echo \\\"$new_convenience\\\"` ${wl}--no-whole-archive'\n\t  tmp_addflag=' $pic_flag -Mnomain' ;;\n\tecc*,ia64* | icc*,ia64*)\t\t# Intel C compiler on ia64\n\t  tmp_addflag=' -i_dynamic' ;;\n\tefc*,ia64* | ifort*,ia64*)\t# Intel Fortran compiler on ia64\n\t  tmp_addflag=' -i_dynamic -nofor_main' ;;\n\tifc* | ifort*)\t\t\t# Intel Fortran compiler\n\t  tmp_addflag=' -nofor_main' ;;\n\tesac\n\tarchive_cmds='$CC -shared'\"$tmp_addflag\"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'\n\n\tif test $supports_anon_versioning = yes; then\n\t  archive_expsym_cmds='$echo \"{ global:\" > $output_objdir/$libname.ver~\n  cat $export_symbols | sed -e \"s/\\(.*\\)/\\1;/\" >> $output_objdir/$libname.ver~\n  $echo \"local: *; };\" >> $output_objdir/$libname.ver~\n\t  $CC -shared'\"$tmp_addflag\"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'\n\tfi\n\tlink_all_deplibs=no\n      else\n\tld_shlibs=no\n      fi\n      ;;\n\n    netbsd* | netbsdelf*-gnu)\n      if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then\n\tarchive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'\n\twlarc=\n      else\n\tarchive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'\n\tarchive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'\n      fi\n      ;;\n\n    solaris*)\n      if $LD -v 2>&1 | grep 'BFD 2\\.8' > /dev/null; then\n\tld_shlibs=no\n\tcat <<EOF 1>&2\n\n*** Warning: The releases 2.8.* of the GNU linker cannot reliably\n*** create shared libraries on Solaris systems.  Therefore, libtool\n*** is disabling shared libraries support.  We urge you to upgrade GNU\n*** binutils to release 2.9.1 or newer.  Another option is to modify\n*** your PATH or compiler configuration so that the native linker is\n*** used, and then restart.\n\nEOF\n      elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then\n\tarchive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'\n\tarchive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'\n      else\n\tld_shlibs=no\n      fi\n      ;;\n\n    sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*)\n      case `$LD -v 2>&1` in\n        *\\ [01].* | *\\ 2.[0-9].* | *\\ 2.1[0-5].*)\n\tld_shlibs=no\n\tcat <<_LT_EOF 1>&2\n\n*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not\n*** reliably create shared libraries on SCO systems.  Therefore, libtool\n*** is disabling shared libraries support.  We urge you to upgrade GNU\n*** binutils to release 2.16.91.0.3 or newer.  Another option is to modify\n*** your PATH or compiler configuration so that the native linker is\n*** used, and then restart.\n\n_LT_EOF\n\t;;\n\t*)\n\t  if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then\n\t    hardcode_libdir_flag_spec='`test -z \"$SCOABSPATH\" && echo ${wl}-rpath,$libdir`'\n\t    archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\\${SCOABSPATH:+${install_libdir}/}$soname -o $lib'\n\t    archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\\${SCOABSPATH:+${install_libdir}/}$soname,-retain-symbols-file,$export_symbols -o $lib'\n\t  else\n\t    ld_shlibs=no\n\t  fi\n\t;;\n      esac\n      ;;\n\n    sunos4*)\n      archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'\n      wlarc=\n      hardcode_direct=yes\n      hardcode_shlibpath_var=no\n      ;;\n\n    *)\n      if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then\n\tarchive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'\n\tarchive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'\n      else\n\tld_shlibs=no\n      fi\n      ;;\n    esac\n\n    if test \"$ld_shlibs\" = no; then\n      runpath_var=\n      hardcode_libdir_flag_spec=\n      export_dynamic_flag_spec=\n      whole_archive_flag_spec=\n    fi\n  else\n    # PORTME fill in a description of your system's linker (not GNU ld)\n    case $host_os in\n    aix3*)\n      allow_undefined_flag=unsupported\n      always_export_symbols=yes\n      archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname'\n      # Note: this linker hardcodes the directories in LIBPATH if there\n      # are no directories specified by -L.\n      hardcode_minus_L=yes\n      if test \"$GCC\" = yes && test -z \"$lt_prog_compiler_static\"; then\n\t# Neither direct hardcoding nor static linking is supported with a\n\t# broken collect2.\n\thardcode_direct=unsupported\n      fi\n      ;;\n\n    aix4* | aix5*)\n      if test \"$host_cpu\" = ia64; then\n\t# On IA64, the linker does run time linking by default, so we don't\n\t# have to do anything special.\n\taix_use_runtimelinking=no\n\texp_sym_flag='-Bexport'\n\tno_entry_flag=\"\"\n      else\n\t# If we're using GNU nm, then we don't want the \"-C\" option.\n\t# -C means demangle to AIX nm, but means don't demangle with GNU nm\n\tif $NM -V 2>&1 | grep 'GNU' > /dev/null; then\n\t  export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\\''{ if (((\\$2 == \"T\") || (\\$2 == \"D\") || (\\$2 == \"B\")) && (substr(\\$3,1,1) != \".\")) { print \\$3 } }'\\'' | sort -u > $export_symbols'\n\telse\n\t  export_symbols_cmds='$NM -BCpg $libobjs $convenience | awk '\\''{ if (((\\$2 == \"T\") || (\\$2 == \"D\") || (\\$2 == \"B\")) && (substr(\\$3,1,1) != \".\")) { print \\$3 } }'\\'' | sort -u > $export_symbols'\n\tfi\n\taix_use_runtimelinking=no\n\n\t# Test if we are trying to use run time linking or normal\n\t# AIX style linking. If -brtl is somewhere in LDFLAGS, we\n\t# need to do runtime linking.\n\tcase $host_os in aix4.[23]|aix4.[23].*|aix5*)\n\t  for ld_flag in $LDFLAGS; do\n  \t  if (test $ld_flag = \"-brtl\" || test $ld_flag = \"-Wl,-brtl\"); then\n  \t    aix_use_runtimelinking=yes\n  \t    break\n  \t  fi\n\t  done\n\t  ;;\n\tesac\n\n\texp_sym_flag='-bexport'\n\tno_entry_flag='-bnoentry'\n      fi\n\n      # When large executables or shared objects are built, AIX ld can\n      # have problems creating the table of contents.  If linking a library\n      # or program results in \"error TOC overflow\" add -mminimal-toc to\n      # CXXFLAGS/CFLAGS for g++/gcc.  In the cases where that is not\n      # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.\n\n      archive_cmds=''\n      hardcode_direct=yes\n      hardcode_libdir_separator=':'\n      link_all_deplibs=yes\n\n      if test \"$GCC\" = yes; then\n\tcase $host_os in aix4.[012]|aix4.[012].*)\n\t# We only want to do this on AIX 4.2 and lower, the check\n\t# below for broken collect2 doesn't work under 4.3+\n\t  collect2name=`${CC} -print-prog-name=collect2`\n\t  if test -f \"$collect2name\" && \\\n  \t   strings \"$collect2name\" | grep resolve_lib_name >/dev/null\n\t  then\n  \t  # We have reworked collect2\n  \t  hardcode_direct=yes\n\t  else\n  \t  # We have old collect2\n  \t  hardcode_direct=unsupported\n  \t  # It fails to find uninstalled libraries when the uninstalled\n  \t  # path is not listed in the libpath.  Setting hardcode_minus_L\n  \t  # to unsupported forces relinking\n  \t  hardcode_minus_L=yes\n  \t  hardcode_libdir_flag_spec='-L$libdir'\n  \t  hardcode_libdir_separator=\n\t  fi\n\t  ;;\n\tesac\n\tshared_flag='-shared'\n\tif test \"$aix_use_runtimelinking\" = yes; then\n\t  shared_flag=\"$shared_flag \"'${wl}-G'\n\tfi\n      else\n\t# not using gcc\n\tif test \"$host_cpu\" = ia64; then\n  \t# VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release\n  \t# chokes on -Wl,-G. The following line is correct:\n\t  shared_flag='-G'\n\telse\n\t  if test \"$aix_use_runtimelinking\" = yes; then\n\t    shared_flag='${wl}-G'\n\t  else\n\t    shared_flag='${wl}-bM:SRE'\n\t  fi\n\tfi\n      fi\n\n      # It seems that -bexpall does not export symbols beginning with\n      # underscore (_), so it is better to generate a list of symbols to export.\n      always_export_symbols=yes\n      if test \"$aix_use_runtimelinking\" = yes; then\n\t# Warning - without using the other runtime loading flags (-brtl),\n\t# -berok will link without error, but may produce a broken library.\n\tallow_undefined_flag='-berok'\n       # Determine the default libpath from the value encoded in an empty executable.\n       cat >conftest.$ac_ext <<_ACEOF\n/* confdefs.h.  */\n_ACEOF\ncat confdefs.h >>conftest.$ac_ext\ncat >>conftest.$ac_ext <<_ACEOF\n/* end confdefs.h.  */\n\nint\nmain ()\n{\n\n  ;\n  return 0;\n}\n_ACEOF\nrm -f conftest.$ac_objext conftest$ac_exeext\nif { (eval echo \"$as_me:$LINENO: \\\"$ac_link\\\"\") >&5\n  (eval $ac_link) 2>conftest.er1\n  ac_status=$?\n  grep -v '^ *+' conftest.er1 >conftest.err\n  rm -f conftest.er1\n  cat conftest.err >&5\n  echo \"$as_me:$LINENO: \\$? = $ac_status\" >&5\n  (exit $ac_status); } &&\n\t { ac_try='test -z \"$ac_c_werror_flag\"\n\t\t\t || test ! -s conftest.err'\n  { (eval echo \"$as_me:$LINENO: \\\"$ac_try\\\"\") >&5\n  (eval $ac_try) 2>&5\n  ac_status=$?\n  echo \"$as_me:$LINENO: \\$? = $ac_status\" >&5\n  (exit $ac_status); }; } &&\n\t { ac_try='test -s conftest$ac_exeext'\n  { (eval echo \"$as_me:$LINENO: \\\"$ac_try\\\"\") >&5\n  (eval $ac_try) 2>&5\n  ac_status=$?\n  echo \"$as_me:$LINENO: \\$? = $ac_status\" >&5\n  (exit $ac_status); }; }; then\n\naix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0  *\\(.*\\)$/\\1/; p; }\n}'`\n# Check for a 64-bit object if we didn't find anything.\nif test -z \"$aix_libpath\"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0  *\\(.*\\)$/\\1/; p; }\n}'`; fi\nelse\n  echo \"$as_me: failed program was:\" >&5\nsed 's/^/| /' conftest.$ac_ext >&5\n\n\nfi\n\nrm -f conftest.err conftest.$ac_objext \\\n      conftest$ac_exeext conftest.$ac_ext\nif test -z \"$aix_libpath\"; then aix_libpath=\"/usr/lib:/lib\"; fi\n\n       hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'\"$aix_libpath\"\n\tarchive_expsym_cmds=\"\\$CC\"' -o $output_objdir/$soname $libobjs $deplibs '\"\\${wl}$no_entry_flag\"' $compiler_flags `if test \"x${allow_undefined_flag}\" != \"x\"; then echo \"${wl}${allow_undefined_flag}\"; else :; fi` '\"\\${wl}$exp_sym_flag:\\$export_symbols $shared_flag\"\n       else\n\tif test \"$host_cpu\" = ia64; then\n\t  hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib'\n\t  allow_undefined_flag=\"-z nodefs\"\n\t  archive_expsym_cmds=\"\\$CC $shared_flag\"' -o $output_objdir/$soname $libobjs $deplibs '\"\\${wl}$no_entry_flag\"' $compiler_flags ${wl}${allow_undefined_flag} '\"\\${wl}$exp_sym_flag:\\$export_symbols\"\n\telse\n\t # Determine the default libpath from the value encoded in an empty executable.\n\t cat >conftest.$ac_ext <<_ACEOF\n/* confdefs.h.  */\n_ACEOF\ncat confdefs.h >>conftest.$ac_ext\ncat >>conftest.$ac_ext <<_ACEOF\n/* end confdefs.h.  */\n\nint\nmain ()\n{\n\n  ;\n  return 0;\n}\n_ACEOF\nrm -f conftest.$ac_objext conftest$ac_exeext\nif { (eval echo \"$as_me:$LINENO: \\\"$ac_link\\\"\") >&5\n  (eval $ac_link) 2>conftest.er1\n  ac_status=$?\n  grep -v '^ *+' conftest.er1 >conftest.err\n  rm -f conftest.er1\n  cat conftest.err >&5\n  echo \"$as_me:$LINENO: \\$? = $ac_status\" >&5\n  (exit $ac_status); } &&\n\t { ac_try='test -z \"$ac_c_werror_flag\"\n\t\t\t || test ! -s conftest.err'\n  { (eval echo \"$as_me:$LINENO: \\\"$ac_try\\\"\") >&5\n  (eval $ac_try) 2>&5\n  ac_status=$?\n  echo \"$as_me:$LINENO: \\$? = $ac_status\" >&5\n  (exit $ac_status); }; } &&\n\t { ac_try='test -s conftest$ac_exeext'\n  { (eval echo \"$as_me:$LINENO: \\\"$ac_try\\\"\") >&5\n  (eval $ac_try) 2>&5\n  ac_status=$?\n  echo \"$as_me:$LINENO: \\$? = $ac_status\" >&5\n  (exit $ac_status); }; }; then\n\naix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0  *\\(.*\\)$/\\1/; p; }\n}'`\n# Check for a 64-bit object if we didn't find anything.\nif test -z \"$aix_libpath\"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0  *\\(.*\\)$/\\1/; p; }\n}'`; fi\nelse\n  echo \"$as_me: failed program was:\" >&5\nsed 's/^/| /' conftest.$ac_ext >&5\n\n\nfi\n\nrm -f conftest.err conftest.$ac_objext \\\n      conftest$ac_exeext conftest.$ac_ext\nif test -z \"$aix_libpath\"; then aix_libpath=\"/usr/lib:/lib\"; fi\n\n\t hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'\"$aix_libpath\"\n\t  # Warning - without using the other run time loading flags,\n\t  # -berok will link without error, but may produce a broken library.\n\t  no_undefined_flag=' ${wl}-bernotok'\n\t  allow_undefined_flag=' ${wl}-berok'\n\t  # Exported symbols can be pulled into shared objects from archives\n\t  whole_archive_flag_spec='$convenience'\n\t  archive_cmds_need_lc=yes\n\t  # This is similar to how AIX traditionally builds its shared libraries.\n\t  archive_expsym_cmds=\"\\$CC $shared_flag\"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'\n\tfi\n      fi\n      ;;\n\n    amigaos*)\n      archive_cmds='$rm $output_objdir/a2ixlibrary.data~$echo \"#define NAME $libname\" > $output_objdir/a2ixlibrary.data~$echo \"#define LIBRARY_ID 1\" >> $output_objdir/a2ixlibrary.data~$echo \"#define VERSION $major\" >> $output_objdir/a2ixlibrary.data~$echo \"#define REVISION $revision\" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'\n      hardcode_libdir_flag_spec='-L$libdir'\n      hardcode_minus_L=yes\n      # see comment about different semantics on the GNU ld section\n      ld_shlibs=no\n      ;;\n\n    bsdi[45]*)\n      export_dynamic_flag_spec=-rdynamic\n      ;;\n\n    cygwin* | mingw* | pw32*)\n      # When not using gcc, we currently assume that we are using\n      # Microsoft Visual C++.\n      # hardcode_libdir_flag_spec is actually meaningless, as there is\n      # no search path for DLLs.\n      hardcode_libdir_flag_spec=' '\n      allow_undefined_flag=unsupported\n      # Tell ltmain to make .lib files, not .a files.\n      libext=lib\n      # Tell ltmain to make .dll files, not .so files.\n      shrext_cmds=\".dll\"\n      # FIXME: Setting linknames here is a bad hack.\n      archive_cmds='$CC -o $lib $libobjs $compiler_flags `echo \"$deplibs\" | $SED -e '\\''s/ -lc$//'\\''` -link -dll~linknames='\n      # The linker will automatically build a .lib file if we build a DLL.\n      old_archive_From_new_cmds='true'\n      # FIXME: Should let the user specify the lib program.\n      old_archive_cmds='lib /OUT:$oldlib$oldobjs$old_deplibs'\n      fix_srcfile_path='`cygpath -w \"$srcfile\"`'\n      enable_shared_with_static_runtimes=yes\n      ;;\n\n    darwin* | rhapsody*)\n      case $host_os in\n        rhapsody* | darwin1.[012])\n         allow_undefined_flag='${wl}-undefined ${wl}suppress'\n         ;;\n       *) # Darwin 1.3 on\n         if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then\n           allow_undefined_flag='${wl}-flat_namespace ${wl}-undefined ${wl}suppress'\n         else\n           case ${MACOSX_DEPLOYMENT_TARGET} in\n             10.[012])\n               allow_undefined_flag='${wl}-flat_namespace ${wl}-undefined ${wl}suppress'\n               ;;\n             10.*)\n               allow_undefined_flag='${wl}-undefined ${wl}dynamic_lookup'\n               ;;\n           esac\n         fi\n         ;;\n      esac\n      archive_cmds_need_lc=no\n      hardcode_direct=no\n      hardcode_automatic=yes\n      hardcode_shlibpath_var=unsupported\n      whole_archive_flag_spec=''\n      link_all_deplibs=yes\n    if test \"$GCC\" = yes ; then\n    \toutput_verbose_link_cmd='echo'\n        archive_cmds='$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring'\n      module_cmds='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags'\n      # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds\n      archive_expsym_cmds='sed -e \"s,#.*,,\" -e \"s,^[    ]*,,\" -e \"s,^\\(..*\\),_&,\" < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'\n      module_expsym_cmds='sed -e \"s,#.*,,\" -e \"s,^[    ]*,,\" -e \"s,^\\(..*\\),_&,\" < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag  -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'\n    else\n      case $cc_basename in\n        xlc*)\n         output_verbose_link_cmd='echo'\n         archive_cmds='$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $verstring'\n         module_cmds='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags'\n          # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds\n         archive_expsym_cmds='sed -e \"s,#.*,,\" -e \"s,^[    ]*,,\" -e \"s,^\\(..*\\),_&,\" < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'\n          module_expsym_cmds='sed -e \"s,#.*,,\" -e \"s,^[    ]*,,\" -e \"s,^\\(..*\\),_&,\" < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag  -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'\n          ;;\n       *)\n         ld_shlibs=no\n          ;;\n      esac\n    fi\n      ;;\n\n    dgux*)\n      archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'\n      hardcode_libdir_flag_spec='-L$libdir'\n      hardcode_shlibpath_var=no\n      ;;\n\n    freebsd1*)\n      ld_shlibs=no\n      ;;\n\n    # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor\n    # support.  Future versions do this automatically, but an explicit c++rt0.o\n    # does not break anything, and helps significantly (at the cost of a little\n    # extra space).\n    freebsd2.2*)\n      archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o'\n      hardcode_libdir_flag_spec='-R$libdir'\n      hardcode_direct=yes\n      hardcode_shlibpath_var=no\n      ;;\n\n    # Unfortunately, older versions of FreeBSD 2 do not have this feature.\n    freebsd2*)\n      archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'\n      hardcode_direct=yes\n      hardcode_minus_L=yes\n      hardcode_shlibpath_var=no\n      ;;\n\n    # FreeBSD 3 and greater uses gcc -shared to do shared libraries.\n    freebsd* | dragonfly*)\n      archive_cmds='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'\n      hardcode_libdir_flag_spec='-R$libdir'\n      hardcode_direct=yes\n      hardcode_shlibpath_var=no\n      ;;\n\n    hpux9*)\n      if test \"$GCC\" = yes; then\n\tarchive_cmds='$rm $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'\n      else\n\tarchive_cmds='$rm $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'\n      fi\n      hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'\n      hardcode_libdir_separator=:\n      hardcode_direct=yes\n\n      # hardcode_minus_L: Not really in the search PATH,\n      # but as the default location of the library.\n      hardcode_minus_L=yes\n      export_dynamic_flag_spec='${wl}-E'\n      ;;\n\n    hpux10*)\n      if test \"$GCC\" = yes -a \"$with_gnu_ld\" = no; then\n\tarchive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'\n      else\n\tarchive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'\n      fi\n      if test \"$with_gnu_ld\" = no; then\n\thardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'\n\thardcode_libdir_separator=:\n\n\thardcode_direct=yes\n\texport_dynamic_flag_spec='${wl}-E'\n\n\t# hardcode_minus_L: Not really in the search PATH,\n\t# but as the default location of the library.\n\thardcode_minus_L=yes\n      fi\n      ;;\n\n    hpux11*)\n      if test \"$GCC\" = yes -a \"$with_gnu_ld\" = no; then\n\tcase $host_cpu in\n\thppa*64*)\n\t  archive_cmds='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'\n\t  ;;\n\tia64*)\n\t  archive_cmds='$CC -shared ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'\n\t  ;;\n\t*)\n\t  archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'\n\t  ;;\n\tesac\n      else\n\tcase $host_cpu in\n\thppa*64*)\n\t  archive_cmds='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'\n\t  ;;\n\tia64*)\n\t  archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'\n\t  ;;\n\t*)\n\t  archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'\n\t  ;;\n\tesac\n      fi\n      if test \"$with_gnu_ld\" = no; then\n\thardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'\n\thardcode_libdir_separator=:\n\n\tcase $host_cpu in\n\thppa*64*|ia64*)\n\t  hardcode_libdir_flag_spec_ld='+b $libdir'\n\t  hardcode_direct=no\n\t  hardcode_shlibpath_var=no\n\t  ;;\n\t*)\n\t  hardcode_direct=yes\n\t  export_dynamic_flag_spec='${wl}-E'\n\n\t  # hardcode_minus_L: Not really in the search PATH,\n\t  # but as the default location of the library.\n\t  hardcode_minus_L=yes\n\t  ;;\n\tesac\n      fi\n      ;;\n\n    irix5* | irix6* | nonstopux*)\n      if test \"$GCC\" = yes; then\n\tarchive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n \"$verstring\" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'\n      else\n\tarchive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n \"$verstring\" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'\n\thardcode_libdir_flag_spec_ld='-rpath $libdir'\n      fi\n      hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'\n      hardcode_libdir_separator=:\n      link_all_deplibs=yes\n      ;;\n\n    netbsd* | netbsdelf*-gnu)\n      if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then\n\tarchive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'  # a.out\n      else\n\tarchive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags'      # ELF\n      fi\n      hardcode_libdir_flag_spec='-R$libdir'\n      hardcode_direct=yes\n      hardcode_shlibpath_var=no\n      ;;\n\n    newsos6)\n      archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'\n      hardcode_direct=yes\n      hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'\n      hardcode_libdir_separator=:\n      hardcode_shlibpath_var=no\n      ;;\n\n    openbsd*)\n      hardcode_direct=yes\n      hardcode_shlibpath_var=no\n      if test -z \"`echo __ELF__ | $CC -E - | grep __ELF__`\" || test \"$host_os-$host_cpu\" = \"openbsd2.8-powerpc\"; then\n\tarchive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'\n\tarchive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols'\n\thardcode_libdir_flag_spec='${wl}-rpath,$libdir'\n\texport_dynamic_flag_spec='${wl}-E'\n      else\n       case $host_os in\n\t openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*)\n\t   archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'\n\t   hardcode_libdir_flag_spec='-R$libdir'\n\t   ;;\n\t *)\n\t   archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'\n\t   hardcode_libdir_flag_spec='${wl}-rpath,$libdir'\n\t   ;;\n       esac\n      fi\n      ;;\n\n    os2*)\n      hardcode_libdir_flag_spec='-L$libdir'\n      hardcode_minus_L=yes\n      allow_undefined_flag=unsupported\n      archive_cmds='$echo \"LIBRARY $libname INITINSTANCE\" > $output_objdir/$libname.def~$echo \"DESCRIPTION \\\"$libname\\\"\" >> $output_objdir/$libname.def~$echo DATA >> $output_objdir/$libname.def~$echo \" SINGLE NONSHARED\" >> $output_objdir/$libname.def~$echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def'\n      old_archive_From_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def'\n      ;;\n\n    osf3*)\n      if test \"$GCC\" = yes; then\n\tallow_undefined_flag=' ${wl}-expect_unresolved ${wl}\\*'\n\tarchive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n \"$verstring\" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'\n      else\n\tallow_undefined_flag=' -expect_unresolved \\*'\n\tarchive_cmds='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n \"$verstring\" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'\n      fi\n      hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'\n      hardcode_libdir_separator=:\n      ;;\n\n    osf4* | osf5*)\t# as osf3* with the addition of -msym flag\n      if test \"$GCC\" = yes; then\n\tallow_undefined_flag=' ${wl}-expect_unresolved ${wl}\\*'\n\tarchive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n \"$verstring\" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'\n\thardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'\n      else\n\tallow_undefined_flag=' -expect_unresolved \\*'\n\tarchive_cmds='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n \"$verstring\" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'\n\tarchive_expsym_cmds='for i in `cat $export_symbols`; do printf \"%s %s\\\\n\" -exported_symbol \"\\$i\" >> $lib.exp; done; echo \"-hidden\">> $lib.exp~\n\t$LD -shared${allow_undefined_flag} -input $lib.exp $linker_flags $libobjs $deplibs -soname $soname `test -n \"$verstring\" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib~$rm $lib.exp'\n\n\t# Both c and cxx compiler support -rpath directly\n\thardcode_libdir_flag_spec='-rpath $libdir'\n      fi\n      hardcode_libdir_separator=:\n      ;;\n\n    solaris*)\n      no_undefined_flag=' -z text'\n      if test \"$GCC\" = yes; then\n\twlarc='${wl}'\n\tarchive_cmds='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'\n\tarchive_expsym_cmds='$echo \"{ global:\" > $lib.exp~cat $export_symbols | $SED -e \"s/\\(.*\\)/\\1;/\" >> $lib.exp~$echo \"local: *; };\" >> $lib.exp~\n\t  $CC -shared ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$rm $lib.exp'\n      else\n\twlarc=''\n\tarchive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'\n\tarchive_expsym_cmds='$echo \"{ global:\" > $lib.exp~cat $export_symbols | $SED -e \"s/\\(.*\\)/\\1;/\" >> $lib.exp~$echo \"local: *; };\" >> $lib.exp~\n  \t$LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp'\n      fi\n      hardcode_libdir_flag_spec='-R$libdir'\n      hardcode_shlibpath_var=no\n      case $host_os in\n      solaris2.[0-5] | solaris2.[0-5].*) ;;\n      *)\n \t# The compiler driver will combine linker options so we\n \t# cannot just pass the convience library names through\n \t# without $wl, iff we do not link with $LD.\n \t# Luckily, gcc supports the same syntax we need for Sun Studio.\n \t# Supported since Solaris 2.6 (maybe 2.5.1?)\n \tcase $wlarc in\n \t'')\n \t  whole_archive_flag_spec='-z allextract$convenience -z defaultextract' ;;\n \t*)\n \t  whole_archive_flag_spec='${wl}-z ${wl}allextract`for conv in $convenience\\\"\\\"; do test -n \\\"$conv\\\" && new_convenience=\\\"$new_convenience,$conv\\\"; done; $echo \\\"$new_convenience\\\"` ${wl}-z ${wl}defaultextract' ;;\n \tesac ;;\n      esac\n      link_all_deplibs=yes\n      ;;\n\n    sunos4*)\n      if test \"x$host_vendor\" = xsequent; then\n\t# Use $CC to link under sequent, because it throws in some extra .o\n\t# files that make .init and .fini sections work.\n\tarchive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags'\n      else\n\tarchive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags'\n      fi\n      hardcode_libdir_flag_spec='-L$libdir'\n      hardcode_direct=yes\n      hardcode_minus_L=yes\n      hardcode_shlibpath_var=no\n      ;;\n\n    sysv4)\n      case $host_vendor in\n\tsni)\n\t  archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'\n\t  hardcode_direct=yes # is this really true???\n\t;;\n\tsiemens)\n\t  ## LD is ld it makes a PLAMLIB\n\t  ## CC just makes a GrossModule.\n\t  archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags'\n\t  reload_cmds='$CC -r -o $output$reload_objs'\n\t  hardcode_direct=no\n        ;;\n\tmotorola)\n\t  archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'\n\t  hardcode_direct=no #Motorola manual says yes, but my tests say they lie\n\t;;\n      esac\n      runpath_var='LD_RUN_PATH'\n      hardcode_shlibpath_var=no\n      ;;\n\n    sysv4.3*)\n      archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'\n      hardcode_shlibpath_var=no\n      export_dynamic_flag_spec='-Bexport'\n      ;;\n\n    sysv4*MP*)\n      if test -d /usr/nec; then\n\tarchive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'\n\thardcode_shlibpath_var=no\n\trunpath_var=LD_RUN_PATH\n\thardcode_runpath_var=yes\n\tld_shlibs=yes\n      fi\n      ;;\n\n    sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7*)\n      no_undefined_flag='${wl}-z,text'\n      archive_cmds_need_lc=no\n      hardcode_shlibpath_var=no\n      runpath_var='LD_RUN_PATH'\n\n      if test \"$GCC\" = yes; then\n\tarchive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'\n\tarchive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'\n      else\n\tarchive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'\n\tarchive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'\n      fi\n      ;;\n\n    sysv5* | sco3.2v5* | sco5v6*)\n      # Note: We can NOT use -z defs as we might desire, because we do not\n      # link with -lc, and that would cause any symbols used from libc to\n      # always be unresolved, which means just about no library would\n      # ever link correctly.  If we're not using GNU ld we use -z text\n      # though, which does catch some bad symbols but isn't as heavy-handed\n      # as -z defs.\n      no_undefined_flag='${wl}-z,text'\n      allow_undefined_flag='${wl}-z,nodefs'\n      archive_cmds_need_lc=no\n      hardcode_shlibpath_var=no\n      hardcode_libdir_flag_spec='`test -z \"$SCOABSPATH\" && echo ${wl}-R,$libdir`'\n      hardcode_libdir_separator=':'\n      link_all_deplibs=yes\n      export_dynamic_flag_spec='${wl}-Bexport'\n      runpath_var='LD_RUN_PATH'\n\n      if test \"$GCC\" = yes; then\n\tarchive_cmds='$CC -shared ${wl}-h,\\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'\n\tarchive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,\\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'\n      else\n\tarchive_cmds='$CC -G ${wl}-h,\\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'\n\tarchive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,\\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'\n      fi\n      ;;\n\n    uts4*)\n      archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'\n      hardcode_libdir_flag_spec='-L$libdir'\n      hardcode_shlibpath_var=no\n      ;;\n\n    *)\n      ld_shlibs=no\n      ;;\n    esac\n  fi\n\n{ echo \"$as_me:$LINENO: result: $ld_shlibs\" >&5\necho \"${ECHO_T}$ld_shlibs\" >&6; }\ntest \"$ld_shlibs\" = no && can_build_shared=no\n\n#\n# Do we need to explicitly link libc?\n#\ncase \"x$archive_cmds_need_lc\" in\nx|xyes)\n  # Assume -lc should be added\n  archive_cmds_need_lc=yes\n\n  if test \"$enable_shared\" = yes && test \"$GCC\" = yes; then\n    case $archive_cmds in\n    *'~'*)\n      # FIXME: we may have to deal with multi-command sequences.\n      ;;\n    '$CC '*)\n      # Test whether the compiler implicitly links with -lc since on some\n      # systems, -lgcc has to come before -lc. If gcc already passes -lc\n      # to ld, don't add -lc before -lgcc.\n      { echo \"$as_me:$LINENO: checking whether -lc should be explicitly linked in\" >&5\necho $ECHO_N \"checking whether -lc should be explicitly linked in... $ECHO_C\" >&6; }\n      $rm conftest*\n      printf \"$lt_simple_compile_test_code\" > conftest.$ac_ext\n\n      if { (eval echo \"$as_me:$LINENO: \\\"$ac_compile\\\"\") >&5\n  (eval $ac_compile) 2>&5\n  ac_status=$?\n  echo \"$as_me:$LINENO: \\$? = $ac_status\" >&5\n  (exit $ac_status); } 2>conftest.err; then\n        soname=conftest\n        lib=conftest\n        libobjs=conftest.$ac_objext\n        deplibs=\n        wl=$lt_prog_compiler_wl\n\tpic_flag=$lt_prog_compiler_pic\n        compiler_flags=-v\n        linker_flags=-v\n        verstring=\n        output_objdir=.\n        libname=conftest\n        lt_save_allow_undefined_flag=$allow_undefined_flag\n        allow_undefined_flag=\n        if { (eval echo \"$as_me:$LINENO: \\\"$archive_cmds 2\\>\\&1 \\| grep \\\" -lc \\\" \\>/dev/null 2\\>\\&1\\\"\") >&5\n  (eval $archive_cmds 2\\>\\&1 \\| grep \\\" -lc \\\" \\>/dev/null 2\\>\\&1) 2>&5\n  ac_status=$?\n  echo \"$as_me:$LINENO: \\$? = $ac_status\" >&5\n  (exit $ac_status); }\n        then\n\t  archive_cmds_need_lc=no\n        else\n\t  archive_cmds_need_lc=yes\n        fi\n        allow_undefined_flag=$lt_save_allow_undefined_flag\n      else\n        cat conftest.err 1>&5\n      fi\n      $rm conftest*\n      { echo \"$as_me:$LINENO: result: $archive_cmds_need_lc\" >&5\necho \"${ECHO_T}$archive_cmds_need_lc\" >&6; }\n      ;;\n    esac\n  fi\n  ;;\nesac\n\n{ echo \"$as_me:$LINENO: checking dynamic linker characteristics\" >&5\necho $ECHO_N \"checking dynamic linker characteristics... $ECHO_C\" >&6; }\nlibrary_names_spec=\nlibname_spec='lib$name'\nsoname_spec=\nshrext_cmds=\".so\"\npostinstall_cmds=\npostuninstall_cmds=\nfinish_cmds=\nfinish_eval=\nshlibpath_var=\nshlibpath_overrides_runpath=unknown\nversion_type=none\ndynamic_linker=\"$host_os ld.so\"\nsys_lib_dlsearch_path_spec=\"/lib /usr/lib\"\nif test \"$GCC\" = yes; then\n  sys_lib_search_path_spec=`$CC -print-search-dirs | grep \"^libraries:\" | $SED -e \"s/^libraries://\" -e \"s,=/,/,g\"`\n  if echo \"$sys_lib_search_path_spec\" | grep ';' >/dev/null ; then\n    # if the path contains \";\" then we assume it to be the separator\n    # otherwise default to the standard path separator (i.e. \":\") - it is\n    # assumed that no part of a normal pathname contains \";\" but that should\n    # okay in the real world where \";\" in dirpaths is itself problematic.\n    sys_lib_search_path_spec=`echo \"$sys_lib_search_path_spec\" | $SED -e 's/;/ /g'`\n  else\n    sys_lib_search_path_spec=`echo \"$sys_lib_search_path_spec\" | $SED  -e \"s/$PATH_SEPARATOR/ /g\"`\n  fi\nelse\n  sys_lib_search_path_spec=\"/lib /usr/lib /usr/local/lib\"\nfi\nneed_lib_prefix=unknown\nhardcode_into_libs=no\n\n# when you set need_version to no, make sure it does not cause -set_version\n# flags to be left without arguments\nneed_version=unknown\n\ncase $host_os in\naix3*)\n  version_type=linux\n  library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a'\n  shlibpath_var=LIBPATH\n\n  # AIX 3 has no versioning support, so we append a major version to the name.\n  soname_spec='${libname}${release}${shared_ext}$major'\n  ;;\n\naix4* | aix5*)\n  version_type=linux\n  need_lib_prefix=no\n  need_version=no\n  hardcode_into_libs=yes\n  if test \"$host_cpu\" = ia64; then\n    # AIX 5 supports IA64\n    library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}'\n    shlibpath_var=LD_LIBRARY_PATH\n  else\n    # With GCC up to 2.95.x, collect2 would create an import file\n    # for dependence libraries.  The import file would start with\n    # the line `#! .'.  This would cause the generated library to\n    # depend on `.', always an invalid library.  This was fixed in\n    # development snapshots of GCC prior to 3.0.\n    case $host_os in\n      aix4 | aix4.[01] | aix4.[01].*)\n      if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'\n\t   echo ' yes '\n\t   echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then\n\t:\n      else\n\tcan_build_shared=no\n      fi\n      ;;\n    esac\n    # AIX (on Power*) has no versioning support, so currently we can not hardcode correct\n    # soname into executable. Probably we can add versioning support to\n    # collect2, so additional links can be useful in future.\n    if test \"$aix_use_runtimelinking\" = yes; then\n      # If using run time linking (on AIX 4.2 or later) use lib<name>.so\n      # instead of lib<name>.a to let people know that these are not\n      # typical AIX shared libraries.\n      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'\n    else\n      # We preserve .a as extension for shared libraries through AIX4.2\n      # and later when we are not doing run time linking.\n      library_names_spec='${libname}${release}.a $libname.a'\n      soname_spec='${libname}${release}${shared_ext}$major'\n    fi\n    shlibpath_var=LIBPATH\n  fi\n  ;;\n\namigaos*)\n  library_names_spec='$libname.ixlibrary $libname.a'\n  # Create ${libname}_ixlibrary.a entries in /sys/libs.\n  finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo \"X$lib\" | $Xsed -e '\\''s%^.*/\\([^/]*\\)\\.ixlibrary$%\\1%'\\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show \"cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a\"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'\n  ;;\n\nbeos*)\n  library_names_spec='${libname}${shared_ext}'\n  dynamic_linker=\"$host_os ld.so\"\n  shlibpath_var=LIBRARY_PATH\n  ;;\n\nbsdi[45]*)\n  version_type=linux\n  need_version=no\n  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'\n  soname_spec='${libname}${release}${shared_ext}$major'\n  finish_cmds='PATH=\"\\$PATH:/sbin\" ldconfig $libdir'\n  shlibpath_var=LD_LIBRARY_PATH\n  sys_lib_search_path_spec=\"/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib\"\n  sys_lib_dlsearch_path_spec=\"/shlib /usr/lib /usr/local/lib\"\n  # the default ld.so.conf also contains /usr/contrib/lib and\n  # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow\n  # libtool to hard-code these into programs\n  ;;\n\ncygwin* | mingw* | pw32*)\n  version_type=windows\n  shrext_cmds=\".dll\"\n  need_version=no\n  need_lib_prefix=no\n\n  case $GCC,$host_os in\n  yes,cygwin* | yes,mingw* | yes,pw32*)\n    library_names_spec='$libname.dll.a'\n    # DLL is installed to $(libdir)/../bin by postinstall_cmds\n    postinstall_cmds='base_file=`basename \\${file}`~\n      dlpath=`$SHELL 2>&1 -c '\\''. $dir/'\\''\\${base_file}'\\''i;echo \\$dlname'\\''`~\n      dldir=$destdir/`dirname \\$dlpath`~\n      test -d \\$dldir || mkdir -p \\$dldir~\n      $install_prog $dir/$dlname \\$dldir/$dlname~\n      chmod a+x \\$dldir/$dlname'\n    postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\\''. $file; echo \\$dlname'\\''`~\n      dlpath=$dir/\\$dldll~\n       $rm \\$dlpath'\n    shlibpath_overrides_runpath=yes\n\n    case $host_os in\n    cygwin*)\n      # Cygwin DLLs use 'cyg' prefix rather than 'lib'\n      soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'\n      sys_lib_search_path_spec=\"/usr/lib /lib/w32api /lib /usr/local/lib\"\n      ;;\n    mingw*)\n      # MinGW DLLs use traditional 'lib' prefix\n      soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'\n      sys_lib_search_path_spec=`$CC -print-search-dirs | grep \"^libraries:\" | $SED -e \"s/^libraries://\" -e \"s,=/,/,g\"`\n      if echo \"$sys_lib_search_path_spec\" | grep ';[c-zC-Z]:/' >/dev/null; then\n        # It is most probably a Windows format PATH printed by\n        # mingw gcc, but we are running on Cygwin. Gcc prints its search\n        # path with ; separators, and with drive letters. We can handle the\n        # drive letters (cygwin fileutils understands them), so leave them,\n        # especially as we might pass files found there to a mingw objdump,\n        # which wouldn't understand a cygwinified path. Ahh.\n        sys_lib_search_path_spec=`echo \"$sys_lib_search_path_spec\" | $SED -e 's/;/ /g'`\n      else\n        sys_lib_search_path_spec=`echo \"$sys_lib_search_path_spec\" | $SED  -e \"s/$PATH_SEPARATOR/ /g\"`\n      fi\n      ;;\n    pw32*)\n      # pw32 DLLs use 'pw' prefix rather than 'lib'\n      library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'\n      ;;\n    esac\n    ;;\n\n  *)\n    library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib'\n    ;;\n  esac\n  dynamic_linker='Win32 ld.exe'\n  # FIXME: first we should search . and the directory the executable is in\n  shlibpath_var=PATH\n  ;;\n\ndarwin* | rhapsody*)\n  dynamic_linker=\"$host_os dyld\"\n  version_type=darwin\n  need_lib_prefix=no\n  need_version=no\n  library_names_spec='${libname}${release}${versuffix}$shared_ext ${libname}${release}${major}$shared_ext ${libname}$shared_ext'\n  soname_spec='${libname}${release}${major}$shared_ext'\n  shlibpath_overrides_runpath=yes\n  shlibpath_var=DYLD_LIBRARY_PATH\n  shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`'\n  # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same.\n  if test \"$GCC\" = yes; then\n    sys_lib_search_path_spec=`$CC -print-search-dirs | tr \"\\n\" \"$PATH_SEPARATOR\" | sed -e 's/libraries:/@libraries:/' | tr \"@\" \"\\n\" | grep \"^libraries:\" | sed -e \"s/^libraries://\" -e \"s,=/,/,g\" -e \"s,$PATH_SEPARATOR, ,g\" -e \"s,.*,& /lib /usr/lib /usr/local/lib,g\"`\n  else\n    sys_lib_search_path_spec='/lib /usr/lib /usr/local/lib'\n  fi\n  sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'\n  ;;\n\ndgux*)\n  version_type=linux\n  need_lib_prefix=no\n  need_version=no\n  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext'\n  soname_spec='${libname}${release}${shared_ext}$major'\n  shlibpath_var=LD_LIBRARY_PATH\n  ;;\n\nfreebsd1*)\n  dynamic_linker=no\n  ;;\n\nfreebsd* | dragonfly*)\n  # DragonFly does not have aout.  When/if they implement a new\n  # versioning mechanism, adjust this.\n  if test -x /usr/bin/objformat; then\n    objformat=`/usr/bin/objformat`\n  else\n    case $host_os in\n    freebsd[123]*) objformat=aout ;;\n    *) objformat=elf ;;\n    esac\n  fi\n  version_type=freebsd-$objformat\n  case $version_type in\n    freebsd-elf*)\n      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'\n      need_version=no\n      need_lib_prefix=no\n      ;;\n    freebsd-*)\n      library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix'\n      need_version=yes\n      ;;\n  esac\n  shlibpath_var=LD_LIBRARY_PATH\n  case $host_os in\n  freebsd2*)\n    shlibpath_overrides_runpath=yes\n    ;;\n  freebsd3.[01]* | freebsdelf3.[01]*)\n    shlibpath_overrides_runpath=yes\n    hardcode_into_libs=yes\n    ;;\n  freebsd3.[2-9]* | freebsdelf3.[2-9]* | \\\n  freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1)\n    shlibpath_overrides_runpath=no\n    hardcode_into_libs=yes\n    ;;\n  freebsd*) # from 4.6 on\n    shlibpath_overrides_runpath=yes\n    hardcode_into_libs=yes\n    ;;\n  esac\n  ;;\n\ngnu*)\n  version_type=linux\n  need_lib_prefix=no\n  need_version=no\n  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'\n  soname_spec='${libname}${release}${shared_ext}$major'\n  shlibpath_var=LD_LIBRARY_PATH\n  hardcode_into_libs=yes\n  ;;\n\nhpux9* | hpux10* | hpux11*)\n  # Give a soname corresponding to the major version so that dld.sl refuses to\n  # link against other versions.\n  version_type=sunos\n  need_lib_prefix=no\n  need_version=no\n  case $host_cpu in\n  ia64*)\n    shrext_cmds='.so'\n    hardcode_into_libs=yes\n    dynamic_linker=\"$host_os dld.so\"\n    shlibpath_var=LD_LIBRARY_PATH\n    shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.\n    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'\n    soname_spec='${libname}${release}${shared_ext}$major'\n    if test \"X$HPUX_IA64_MODE\" = X32; then\n      sys_lib_search_path_spec=\"/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib\"\n    else\n      sys_lib_search_path_spec=\"/usr/lib/hpux64 /usr/local/lib/hpux64\"\n    fi\n    sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec\n    ;;\n   hppa*64*)\n     shrext_cmds='.sl'\n     hardcode_into_libs=yes\n     dynamic_linker=\"$host_os dld.sl\"\n     shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH\n     shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.\n     library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'\n     soname_spec='${libname}${release}${shared_ext}$major'\n     sys_lib_search_path_spec=\"/usr/lib/pa20_64 /usr/ccs/lib/pa20_64\"\n     sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec\n     ;;\n   *)\n    shrext_cmds='.sl'\n    dynamic_linker=\"$host_os dld.sl\"\n    shlibpath_var=SHLIB_PATH\n    shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH\n    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'\n    soname_spec='${libname}${release}${shared_ext}$major'\n    ;;\n  esac\n  # HP-UX runs *really* slowly unless shared libraries are mode 555.\n  postinstall_cmds='chmod 555 $lib'\n  ;;\n\ninterix3*)\n  version_type=linux\n  need_lib_prefix=no\n  need_version=no\n  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'\n  soname_spec='${libname}${release}${shared_ext}$major'\n  dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)'\n  shlibpath_var=LD_LIBRARY_PATH\n  shlibpath_overrides_runpath=no\n  hardcode_into_libs=yes\n  ;;\n\nirix5* | irix6* | nonstopux*)\n  case $host_os in\n    nonstopux*) version_type=nonstopux ;;\n    *)\n\tif test \"$lt_cv_prog_gnu_ld\" = yes; then\n\t\tversion_type=linux\n\telse\n\t\tversion_type=irix\n\tfi ;;\n  esac\n  need_lib_prefix=no\n  need_version=no\n  soname_spec='${libname}${release}${shared_ext}$major'\n  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}'\n  case $host_os in\n  irix5* | nonstopux*)\n    libsuff= shlibsuff=\n    ;;\n  *)\n    case $LD in # libtool.m4 will add one of these switches to LD\n    *-32|*\"-32 \"|*-melf32bsmip|*\"-melf32bsmip \")\n      libsuff= shlibsuff= libmagic=32-bit;;\n    *-n32|*\"-n32 \"|*-melf32bmipn32|*\"-melf32bmipn32 \")\n      libsuff=32 shlibsuff=N32 libmagic=N32;;\n    *-64|*\"-64 \"|*-melf64bmip|*\"-melf64bmip \")\n      libsuff=64 shlibsuff=64 libmagic=64-bit;;\n    *) libsuff= shlibsuff= libmagic=never-match;;\n    esac\n    ;;\n  esac\n  shlibpath_var=LD_LIBRARY${shlibsuff}_PATH\n  shlibpath_overrides_runpath=no\n  sys_lib_search_path_spec=\"/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}\"\n  sys_lib_dlsearch_path_spec=\"/usr/lib${libsuff} /lib${libsuff}\"\n  hardcode_into_libs=yes\n  ;;\n\n# No shared lib support for Linux oldld, aout, or coff.\nlinux*oldld* | linux*aout* | linux*coff*)\n  dynamic_linker=no\n  ;;\n\n# This must be Linux ELF.\nlinux* | k*bsd*-gnu)\n  version_type=linux\n  need_lib_prefix=no\n  need_version=no\n  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'\n  soname_spec='${libname}${release}${shared_ext}$major'\n  finish_cmds='PATH=\"\\$PATH:/sbin\" ldconfig -n $libdir'\n  shlibpath_var=LD_LIBRARY_PATH\n  shlibpath_overrides_runpath=no\n  # This implies no fast_install, which is unacceptable.\n  # Some rework will be needed to allow for fast_install\n  # before this can be enabled.\n  hardcode_into_libs=yes\n\n  # Append ld.so.conf contents to the search path\n  if test -f /etc/ld.so.conf; then\n    lt_ld_extra=`awk '/^include / { system(sprintf(\"cd /etc; cat %s\", \\$2)); skip = 1; } { if (!skip) print \\$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;s/[:,\t]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\\n' ' '`\n    sys_lib_dlsearch_path_spec=\"/lib /usr/lib $lt_ld_extra\"\n  fi\n\n  # We used to test for /lib/ld.so.1 and disable shared libraries on\n  # powerpc, because MkLinux only supported shared libraries with the\n  # GNU dynamic linker.  Since this was broken with cross compilers,\n  # most powerpc-linux boxes support dynamic linking these days and\n  # people can always --disable-shared, the test was removed, and we\n  # assume the GNU/Linux dynamic linker is in use.\n  dynamic_linker='GNU/Linux ld.so'\n  ;;\n\nnetbsdelf*-gnu)\n  version_type=linux\n  need_lib_prefix=no\n  need_version=no\n  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'\n  soname_spec='${libname}${release}${shared_ext}$major'\n  shlibpath_var=LD_LIBRARY_PATH\n  shlibpath_overrides_runpath=no\n  hardcode_into_libs=yes\n  dynamic_linker='NetBSD ld.elf_so'\n  ;;\n\nnetbsd*)\n  version_type=sunos\n  need_lib_prefix=no\n  need_version=no\n  if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then\n    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'\n    finish_cmds='PATH=\"\\$PATH:/sbin\" ldconfig -m $libdir'\n    dynamic_linker='NetBSD (a.out) ld.so'\n  else\n    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'\n    soname_spec='${libname}${release}${shared_ext}$major'\n    dynamic_linker='NetBSD ld.elf_so'\n  fi\n  shlibpath_var=LD_LIBRARY_PATH\n  shlibpath_overrides_runpath=yes\n  hardcode_into_libs=yes\n  ;;\n\nnewsos6)\n  version_type=linux\n  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'\n  shlibpath_var=LD_LIBRARY_PATH\n  shlibpath_overrides_runpath=yes\n  ;;\n\nnto-qnx*)\n  version_type=linux\n  need_lib_prefix=no\n  need_version=no\n  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'\n  soname_spec='${libname}${release}${shared_ext}$major'\n  shlibpath_var=LD_LIBRARY_PATH\n  shlibpath_overrides_runpath=yes\n  ;;\n\nopenbsd*)\n  version_type=sunos\n  sys_lib_dlsearch_path_spec=\"/usr/lib\"\n  need_lib_prefix=no\n  # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs.\n  case $host_os in\n    openbsd3.3 | openbsd3.3.*) need_version=yes ;;\n    *)                         need_version=no  ;;\n  esac\n  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'\n  finish_cmds='PATH=\"\\$PATH:/sbin\" ldconfig -m $libdir'\n  shlibpath_var=LD_LIBRARY_PATH\n  if test -z \"`echo __ELF__ | $CC -E - | grep __ELF__`\" || test \"$host_os-$host_cpu\" = \"openbsd2.8-powerpc\"; then\n    case $host_os in\n      openbsd2.[89] | openbsd2.[89].*)\n\tshlibpath_overrides_runpath=no\n\t;;\n      *)\n\tshlibpath_overrides_runpath=yes\n\t;;\n      esac\n  else\n    shlibpath_overrides_runpath=yes\n  fi\n  ;;\n\nos2*)\n  libname_spec='$name'\n  shrext_cmds=\".dll\"\n  need_lib_prefix=no\n  library_names_spec='$libname${shared_ext} $libname.a'\n  dynamic_linker='OS/2 ld.exe'\n  shlibpath_var=LIBPATH\n  ;;\n\nosf3* | osf4* | osf5*)\n  version_type=osf\n  need_lib_prefix=no\n  need_version=no\n  soname_spec='${libname}${release}${shared_ext}$major'\n  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'\n  shlibpath_var=LD_LIBRARY_PATH\n  sys_lib_search_path_spec=\"/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib\"\n  sys_lib_dlsearch_path_spec=\"$sys_lib_search_path_spec\"\n  ;;\n\nsolaris*)\n  version_type=linux\n  need_lib_prefix=no\n  need_version=no\n  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'\n  soname_spec='${libname}${release}${shared_ext}$major'\n  shlibpath_var=LD_LIBRARY_PATH\n  shlibpath_overrides_runpath=yes\n  hardcode_into_libs=yes\n  # ldd complains unless libraries are executable\n  postinstall_cmds='chmod +x $lib'\n  ;;\n\nsunos4*)\n  version_type=sunos\n  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'\n  finish_cmds='PATH=\"\\$PATH:/usr/etc\" ldconfig $libdir'\n  shlibpath_var=LD_LIBRARY_PATH\n  shlibpath_overrides_runpath=yes\n  if test \"$with_gnu_ld\" = yes; then\n    need_lib_prefix=no\n  fi\n  need_version=yes\n  ;;\n\nsysv4 | sysv4.3*)\n  version_type=linux\n  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'\n  soname_spec='${libname}${release}${shared_ext}$major'\n  shlibpath_var=LD_LIBRARY_PATH\n  case $host_vendor in\n    sni)\n      shlibpath_overrides_runpath=no\n      need_lib_prefix=no\n      export_dynamic_flag_spec='${wl}-Blargedynsym'\n      runpath_var=LD_RUN_PATH\n      ;;\n    siemens)\n      need_lib_prefix=no\n      ;;\n    motorola)\n      need_lib_prefix=no\n      need_version=no\n      shlibpath_overrides_runpath=no\n      sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'\n      ;;\n  esac\n  ;;\n\nsysv4*MP*)\n  if test -d /usr/nec ;then\n    version_type=linux\n    library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}'\n    soname_spec='$libname${shared_ext}.$major'\n    shlibpath_var=LD_LIBRARY_PATH\n  fi\n  ;;\n\nsysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)\n  version_type=freebsd-elf\n  need_lib_prefix=no\n  need_version=no\n  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'\n  soname_spec='${libname}${release}${shared_ext}$major'\n  shlibpath_var=LD_LIBRARY_PATH\n  hardcode_into_libs=yes\n  if test \"$with_gnu_ld\" = yes; then\n    sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib'\n    shlibpath_overrides_runpath=no\n  else\n    sys_lib_search_path_spec='/usr/ccs/lib /usr/lib'\n    shlibpath_overrides_runpath=yes\n    case $host_os in\n      sco3.2v5*)\n        sys_lib_search_path_spec=\"$sys_lib_search_path_spec /lib\"\n\t;;\n    esac\n  fi\n  sys_lib_dlsearch_path_spec='/usr/lib'\n  ;;\n\nuts4*)\n  version_type=linux\n  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'\n  soname_spec='${libname}${release}${shared_ext}$major'\n  shlibpath_var=LD_LIBRARY_PATH\n  ;;\n\n*)\n  dynamic_linker=no\n  ;;\nesac\n{ echo \"$as_me:$LINENO: result: $dynamic_linker\" >&5\necho \"${ECHO_T}$dynamic_linker\" >&6; }\ntest \"$dynamic_linker\" = no && can_build_shared=no\n\nvariables_saved_for_relink=\"PATH $shlibpath_var $runpath_var\"\nif test \"$GCC\" = yes; then\n  variables_saved_for_relink=\"$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH\"\nfi\n\n{ echo \"$as_me:$LINENO: checking how to hardcode library paths into programs\" >&5\necho $ECHO_N \"checking how to hardcode library paths into programs... $ECHO_C\" >&6; }\nhardcode_action=\nif test -n \"$hardcode_libdir_flag_spec\" || \\\n   test -n \"$runpath_var\" || \\\n   test \"X$hardcode_automatic\" = \"Xyes\" ; then\n\n  # We can hardcode non-existant directories.\n  if test \"$hardcode_direct\" != no &&\n     # If the only mechanism to avoid hardcoding is shlibpath_var, we\n     # have to relink, otherwise we might link with an installed library\n     # when we should be linking with a yet-to-be-installed one\n     ## test \"$_LT_AC_TAGVAR(hardcode_shlibpath_var, )\" != no &&\n     test \"$hardcode_minus_L\" != no; then\n    # Linking always hardcodes the temporary library directory.\n    hardcode_action=relink\n  else\n    # We can link without hardcoding, and we can hardcode nonexisting dirs.\n    hardcode_action=immediate\n  fi\nelse\n  # We cannot hardcode anything, or else we can only hardcode existing\n  # directories.\n  hardcode_action=unsupported\nfi\n{ echo \"$as_me:$LINENO: result: $hardcode_action\" >&5\necho \"${ECHO_T}$hardcode_action\" >&6; }\n\nif test \"$hardcode_action\" = relink; then\n  # Fast installation is not supported\n  enable_fast_install=no\nelif test \"$shlibpath_overrides_runpath\" = yes ||\n     test \"$enable_shared\" = no; then\n  # Fast installation is not necessary\n  enable_fast_install=needless\nfi\n\nstriplib=\nold_striplib=\n{ echo \"$as_me:$LINENO: checking whether stripping libraries is possible\" >&5\necho $ECHO_N \"checking whether stripping libraries is possible... $ECHO_C\" >&6; }\nif test -n \"$STRIP\" && $STRIP -V 2>&1 | grep \"GNU strip\" >/dev/null; then\n  test -z \"$old_striplib\" && old_striplib=\"$STRIP --strip-debug\"\n  test -z \"$striplib\" && striplib=\"$STRIP --strip-unneeded\"\n  { echo \"$as_me:$LINENO: result: yes\" >&5\necho \"${ECHO_T}yes\" >&6; }\nelse\n# FIXME - insert some real tests, host_os isn't really good enough\n  case $host_os in\n   darwin*)\n       if test -n \"$STRIP\" ; then\n         striplib=\"$STRIP -x\"\n         { echo \"$as_me:$LINENO: result: yes\" >&5\necho \"${ECHO_T}yes\" >&6; }\n       else\n  { echo \"$as_me:$LINENO: result: no\" >&5\necho \"${ECHO_T}no\" >&6; }\nfi\n       ;;\n   *)\n  { echo \"$as_me:$LINENO: result: no\" >&5\necho \"${ECHO_T}no\" >&6; }\n    ;;\n  esac\nfi\n\nif test \"x$enable_dlopen\" != xyes; then\n  enable_dlopen=unknown\n  enable_dlopen_self=unknown\n  enable_dlopen_self_static=unknown\nelse\n  lt_cv_dlopen=no\n  lt_cv_dlopen_libs=\n\n  case $host_os in\n  beos*)\n    lt_cv_dlopen=\"load_add_on\"\n    lt_cv_dlopen_libs=\n    lt_cv_dlopen_self=yes\n    ;;\n\n  mingw* | pw32*)\n    lt_cv_dlopen=\"LoadLibrary\"\n    lt_cv_dlopen_libs=\n   ;;\n\n  cygwin*)\n    lt_cv_dlopen=\"dlopen\"\n    lt_cv_dlopen_libs=\n   ;;\n\n  darwin*)\n  # if libdl is installed we need to link against it\n    { echo \"$as_me:$LINENO: checking for dlopen in -ldl\" >&5\necho $ECHO_N \"checking for dlopen in -ldl... $ECHO_C\" >&6; }\nif test \"${ac_cv_lib_dl_dlopen+set}\" = set; then\n  echo $ECHO_N \"(cached) $ECHO_C\" >&6\nelse\n  ac_check_lib_save_LIBS=$LIBS\nLIBS=\"-ldl  $LIBS\"\ncat >conftest.$ac_ext <<_ACEOF\n/* confdefs.h.  */\n_ACEOF\ncat confdefs.h >>conftest.$ac_ext\ncat >>conftest.$ac_ext <<_ACEOF\n/* end confdefs.h.  */\n\n/* Override any GCC internal prototype to avoid an error.\n   Use char because int might match the return type of a GCC\n   builtin and then its argument prototype would still apply.  */\n#ifdef __cplusplus\nextern \"C\"\n#endif\nchar dlopen ();\nint\nmain ()\n{\nreturn dlopen ();\n  ;\n  return 0;\n}\n_ACEOF\nrm -f conftest.$ac_objext conftest$ac_exeext\nif { (eval echo \"$as_me:$LINENO: \\\"$ac_link\\\"\") >&5\n  (eval $ac_link) 2>conftest.er1\n  ac_status=$?\n  grep -v '^ *+' conftest.er1 >conftest.err\n  rm -f conftest.er1\n  cat conftest.err >&5\n  echo \"$as_me:$LINENO: \\$? = $ac_status\" >&5\n  (exit $ac_status); } &&\n\t { ac_try='test -z \"$ac_c_werror_flag\"\n\t\t\t || test ! -s conftest.err'\n  { (eval echo \"$as_me:$LINENO: \\\"$ac_try\\\"\") >&5\n  (eval $ac_try) 2>&5\n  ac_status=$?\n  echo \"$as_me:$LINENO: \\$? = $ac_status\" >&5\n  (exit $ac_status); }; } &&\n\t { ac_try='test -s conftest$ac_exeext'\n  { (eval echo \"$as_me:$LINENO: \\\"$ac_try\\\"\") >&5\n  (eval $ac_try) 2>&5\n  ac_status=$?\n  echo \"$as_me:$LINENO: \\$? = $ac_status\" >&5\n  (exit $ac_status); }; }; then\n  ac_cv_lib_dl_dlopen=yes\nelse\n  echo \"$as_me: failed program was:\" >&5\nsed 's/^/| /' conftest.$ac_ext >&5\n\n\tac_cv_lib_dl_dlopen=no\nfi\n\nrm -f conftest.err conftest.$ac_objext \\\n      conftest$ac_exeext conftest.$ac_ext\nLIBS=$ac_check_lib_save_LIBS\nfi\n{ echo \"$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen\" >&5\necho \"${ECHO_T}$ac_cv_lib_dl_dlopen\" >&6; }\nif test $ac_cv_lib_dl_dlopen = yes; then\n  lt_cv_dlopen=\"dlopen\" lt_cv_dlopen_libs=\"-ldl\"\nelse\n\n    lt_cv_dlopen=\"dyld\"\n    lt_cv_dlopen_libs=\n    lt_cv_dlopen_self=yes\n\nfi\n\n   ;;\n\n  *)\n    { echo \"$as_me:$LINENO: checking for shl_load\" >&5\necho $ECHO_N \"checking for shl_load... $ECHO_C\" >&6; }\nif test \"${ac_cv_func_shl_load+set}\" = set; then\n  echo $ECHO_N \"(cached) $ECHO_C\" >&6\nelse\n  cat >conftest.$ac_ext <<_ACEOF\n/* confdefs.h.  */\n_ACEOF\ncat confdefs.h >>conftest.$ac_ext\ncat >>conftest.$ac_ext <<_ACEOF\n/* end confdefs.h.  */\n/* Define shl_load to an innocuous variant, in case <limits.h> declares shl_load.\n   For example, HP-UX 11i <limits.h> declares gettimeofday.  */\n#define shl_load innocuous_shl_load\n\n/* System header to define __stub macros and hopefully few prototypes,\n    which can conflict with char shl_load (); below.\n    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since\n    <limits.h> exists even on freestanding compilers.  */\n\n#ifdef __STDC__\n# include <limits.h>\n#else\n# include <assert.h>\n#endif\n\n#undef shl_load\n\n/* Override any GCC internal prototype to avoid an error.\n   Use char because int might match the return type of a GCC\n   builtin and then its argument prototype would still apply.  */\n#ifdef __cplusplus\nextern \"C\"\n#endif\nchar shl_load ();\n/* The GNU C library defines this for functions which it implements\n    to always fail with ENOSYS.  Some functions are actually named\n    something starting with __ and the normal name is an alias.  */\n#if defined __stub_shl_load || defined __stub___shl_load\nchoke me\n#endif\n\nint\nmain ()\n{\nreturn shl_load ();\n  ;\n  return 0;\n}\n_ACEOF\nrm -f conftest.$ac_objext conftest$ac_exeext\nif { (eval echo \"$as_me:$LINENO: \\\"$ac_link\\\"\") >&5\n  (eval $ac_link) 2>conftest.er1\n  ac_status=$?\n  grep -v '^ *+' conftest.er1 >conftest.err\n  rm -f conftest.er1\n  cat conftest.err >&5\n  echo \"$as_me:$LINENO: \\$? = $ac_status\" >&5\n  (exit $ac_status); } &&\n\t { ac_try='test -z \"$ac_c_werror_flag\"\n\t\t\t || test ! -s conftest.err'\n  { (eval echo \"$as_me:$LINENO: \\\"$ac_try\\\"\") >&5\n  (eval $ac_try) 2>&5\n  ac_status=$?\n  echo \"$as_me:$LINENO: \\$? = $ac_status\" >&5\n  (exit $ac_status); }; } &&\n\t { ac_try='test -s conftest$ac_exeext'\n  { (eval echo \"$as_me:$LINENO: \\\"$ac_try\\\"\") >&5\n  (eval $ac_try) 2>&5\n  ac_status=$?\n  echo \"$as_me:$LINENO: \\$? = $ac_status\" >&5\n  (exit $ac_status); }; }; then\n  ac_cv_func_shl_load=yes\nelse\n  echo \"$as_me: failed program was:\" >&5\nsed 's/^/| /' conftest.$ac_ext >&5\n\n\tac_cv_func_shl_load=no\nfi\n\nrm -f conftest.err conftest.$ac_objext \\\n      conftest$ac_exeext conftest.$ac_ext\nfi\n{ echo \"$as_me:$LINENO: result: $ac_cv_func_shl_load\" >&5\necho \"${ECHO_T}$ac_cv_func_shl_load\" >&6; }\nif test $ac_cv_func_shl_load = yes; then\n  lt_cv_dlopen=\"shl_load\"\nelse\n  { echo \"$as_me:$LINENO: checking for shl_load in -ldld\" >&5\necho $ECHO_N \"checking for shl_load in -ldld... $ECHO_C\" >&6; }\nif test \"${ac_cv_lib_dld_shl_load+set}\" = set; then\n  echo $ECHO_N \"(cached) $ECHO_C\" >&6\nelse\n  ac_check_lib_save_LIBS=$LIBS\nLIBS=\"-ldld  $LIBS\"\ncat >conftest.$ac_ext <<_ACEOF\n/* confdefs.h.  */\n_ACEOF\ncat confdefs.h >>conftest.$ac_ext\ncat >>conftest.$ac_ext <<_ACEOF\n/* end confdefs.h.  */\n\n/* Override any GCC internal prototype to avoid an error.\n   Use char because int might match the return type of a GCC\n   builtin and then its argument prototype would still apply.  */\n#ifdef __cplusplus\nextern \"C\"\n#endif\nchar shl_load ();\nint\nmain ()\n{\nreturn shl_load ();\n  ;\n  return 0;\n}\n_ACEOF\nrm -f conftest.$ac_objext conftest$ac_exeext\nif { (eval echo \"$as_me:$LINENO: \\\"$ac_link\\\"\") >&5\n  (eval $ac_link) 2>conftest.er1\n  ac_status=$?\n  grep -v '^ *+' conftest.er1 >conftest.err\n  rm -f conftest.er1\n  cat conftest.err >&5\n  echo \"$as_me:$LINENO: \\$? = $ac_status\" >&5\n  (exit $ac_status); } &&\n\t { ac_try='test -z \"$ac_c_werror_flag\"\n\t\t\t || test ! -s conftest.err'\n  { (eval echo \"$as_me:$LINENO: \\\"$ac_try\\\"\") >&5\n  (eval $ac_try) 2>&5\n  ac_status=$?\n  echo \"$as_me:$LINENO: \\$? = $ac_status\" >&5\n  (exit $ac_status); }; } &&\n\t { ac_try='test -s conftest$ac_exeext'\n  { (eval echo \"$as_me:$LINENO: \\\"$ac_try\\\"\") >&5\n  (eval $ac_try) 2>&5\n  ac_status=$?\n  echo \"$as_me:$LINENO: \\$? = $ac_status\" >&5\n  (exit $ac_status); }; }; then\n  ac_cv_lib_dld_shl_load=yes\nelse\n  echo \"$as_me: failed program was:\" >&5\nsed 's/^/| /' conftest.$ac_ext >&5\n\n\tac_cv_lib_dld_shl_load=no\nfi\n\nrm -f conftest.err conftest.$ac_objext \\\n      conftest$ac_exeext conftest.$ac_ext\nLIBS=$ac_check_lib_save_LIBS\nfi\n{ echo \"$as_me:$LINENO: result: $ac_cv_lib_dld_shl_load\" >&5\necho \"${ECHO_T}$ac_cv_lib_dld_shl_load\" >&6; }\nif test $ac_cv_lib_dld_shl_load = yes; then\n  lt_cv_dlopen=\"shl_load\" lt_cv_dlopen_libs=\"-dld\"\nelse\n  { echo \"$as_me:$LINENO: checking for dlopen\" >&5\necho $ECHO_N \"checking for dlopen... $ECHO_C\" >&6; }\nif test \"${ac_cv_func_dlopen+set}\" = set; then\n  echo $ECHO_N \"(cached) $ECHO_C\" >&6\nelse\n  cat >conftest.$ac_ext <<_ACEOF\n/* confdefs.h.  */\n_ACEOF\ncat confdefs.h >>conftest.$ac_ext\ncat >>conftest.$ac_ext <<_ACEOF\n/* end confdefs.h.  */\n/* Define dlopen to an innocuous variant, in case <limits.h> declares dlopen.\n   For example, HP-UX 11i <limits.h> declares gettimeofday.  */\n#define dlopen innocuous_dlopen\n\n/* System header to define __stub macros and hopefully few prototypes,\n    which can conflict with char dlopen (); below.\n    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since\n    <limits.h> exists even on freestanding compilers.  */\n\n#ifdef __STDC__\n# include <limits.h>\n#else\n# include <assert.h>\n#endif\n\n#undef dlopen\n\n/* Override any GCC internal prototype to avoid an error.\n   Use char because int might match the return type of a GCC\n   builtin and then its argument prototype would still apply.  */\n#ifdef __cplusplus\nextern \"C\"\n#endif\nchar dlopen ();\n/* The GNU C library defines this for functions which it implements\n    to always fail with ENOSYS.  Some functions are actually named\n    something starting with __ and the normal name is an alias.  */\n#if defined __stub_dlopen || defined __stub___dlopen\nchoke me\n#endif\n\nint\nmain ()\n{\nreturn dlopen ();\n  ;\n  return 0;\n}\n_ACEOF\nrm -f conftest.$ac_objext conftest$ac_exeext\nif { (eval echo \"$as_me:$LINENO: \\\"$ac_link\\\"\") >&5\n  (eval $ac_link) 2>conftest.er1\n  ac_status=$?\n  grep -v '^ *+' conftest.er1 >conftest.err\n  rm -f conftest.er1\n  cat conftest.err >&5\n  echo \"$as_me:$LINENO: \\$? = $ac_status\" >&5\n  (exit $ac_status); } &&\n\t { ac_try='test -z \"$ac_c_werror_flag\"\n\t\t\t || test ! -s conftest.err'\n  { (eval echo \"$as_me:$LINENO: \\\"$ac_try\\\"\") >&5\n  (eval $ac_try) 2>&5\n  ac_status=$?\n  echo \"$as_me:$LINENO: \\$? = $ac_status\" >&5\n  (exit $ac_status); }; } &&\n\t { ac_try='test -s conftest$ac_exeext'\n  { (eval echo \"$as_me:$LINENO: \\\"$ac_try\\\"\") >&5\n  (eval $ac_try) 2>&5\n  ac_status=$?\n  echo \"$as_me:$LINENO: \\$? = $ac_status\" >&5\n  (exit $ac_status); }; }; then\n  ac_cv_func_dlopen=yes\nelse\n  echo \"$as_me: failed program was:\" >&5\nsed 's/^/| /' conftest.$ac_ext >&5\n\n\tac_cv_func_dlopen=no\nfi\n\nrm -f conftest.err conftest.$ac_objext \\\n      conftest$ac_exeext conftest.$ac_ext\nfi\n{ echo \"$as_me:$LINENO: result: $ac_cv_func_dlopen\" >&5\necho \"${ECHO_T}$ac_cv_func_dlopen\" >&6; }\nif test $ac_cv_func_dlopen = yes; then\n  lt_cv_dlopen=\"dlopen\"\nelse\n  { echo \"$as_me:$LINENO: checking for dlopen in -ldl\" >&5\necho $ECHO_N \"checking for dlopen in -ldl... $ECHO_C\" >&6; }\nif test \"${ac_cv_lib_dl_dlopen+set}\" = set; then\n  echo $ECHO_N \"(cached) $ECHO_C\" >&6\nelse\n  ac_check_lib_save_LIBS=$LIBS\nLIBS=\"-ldl  $LIBS\"\ncat >conftest.$ac_ext <<_ACEOF\n/* confdefs.h.  */\n_ACEOF\ncat confdefs.h >>conftest.$ac_ext\ncat >>conftest.$ac_ext <<_ACEOF\n/* end confdefs.h.  */\n\n/* Override any GCC internal prototype to avoid an error.\n   Use char because int might match the return type of a GCC\n   builtin and then its argument prototype would still apply.  */\n#ifdef __cplusplus\nextern \"C\"\n#endif\nchar dlopen ();\nint\nmain ()\n{\nreturn dlopen ();\n  ;\n  return 0;\n}\n_ACEOF\nrm -f conftest.$ac_objext conftest$ac_exeext\nif { (eval echo \"$as_me:$LINENO: \\\"$ac_link\\\"\") >&5\n  (eval $ac_link) 2>conftest.er1\n  ac_status=$?\n  grep -v '^ *+' conftest.er1 >conftest.err\n  rm -f conftest.er1\n  cat conftest.err >&5\n  echo \"$as_me:$LINENO: \\$? = $ac_status\" >&5\n  (exit $ac_status); } &&\n\t { ac_try='test -z \"$ac_c_werror_flag\"\n\t\t\t || test ! -s conftest.err'\n  { (eval echo \"$as_me:$LINENO: \\\"$ac_try\\\"\") >&5\n  (eval $ac_try) 2>&5\n  ac_status=$?\n  echo \"$as_me:$LINENO: \\$? = $ac_status\" >&5\n  (exit $ac_status); }; } &&\n\t { ac_try='test -s conftest$ac_exeext'\n  { (eval echo \"$as_me:$LINENO: \\\"$ac_try\\\"\") >&5\n  (eval $ac_try) 2>&5\n  ac_status=$?\n  echo \"$as_me:$LINENO: \\$? = $ac_status\" >&5\n  (exit $ac_status); }; }; then\n  ac_cv_lib_dl_dlopen=yes\nelse\n  echo \"$as_me: failed program was:\" >&5\nsed 's/^/| /' conftest.$ac_ext >&5\n\n\tac_cv_lib_dl_dlopen=no\nfi\n\nrm -f conftest.err conftest.$ac_objext \\\n      conftest$ac_exeext conftest.$ac_ext\nLIBS=$ac_check_lib_save_LIBS\nfi\n{ echo \"$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen\" >&5\necho \"${ECHO_T}$ac_cv_lib_dl_dlopen\" >&6; }\nif test $ac_cv_lib_dl_dlopen = yes; then\n  lt_cv_dlopen=\"dlopen\" lt_cv_dlopen_libs=\"-ldl\"\nelse\n  { echo \"$as_me:$LINENO: checking for dlopen in -lsvld\" >&5\necho $ECHO_N \"checking for dlopen in -lsvld... $ECHO_C\" >&6; }\nif test \"${ac_cv_lib_svld_dlopen+set}\" = set; then\n  echo $ECHO_N \"(cached) $ECHO_C\" >&6\nelse\n  ac_check_lib_save_LIBS=$LIBS\nLIBS=\"-lsvld  $LIBS\"\ncat >conftest.$ac_ext <<_ACEOF\n/* confdefs.h.  */\n_ACEOF\ncat confdefs.h >>conftest.$ac_ext\ncat >>conftest.$ac_ext <<_ACEOF\n/* end confdefs.h.  */\n\n/* Override any GCC internal prototype to avoid an error.\n   Use char because int might match the return type of a GCC\n   builtin and then its argument prototype would still apply.  */\n#ifdef __cplusplus\nextern \"C\"\n#endif\nchar dlopen ();\nint\nmain ()\n{\nreturn dlopen ();\n  ;\n  return 0;\n}\n_ACEOF\nrm -f conftest.$ac_objext conftest$ac_exeext\nif { (eval echo \"$as_me:$LINENO: \\\"$ac_link\\\"\") >&5\n  (eval $ac_link) 2>conftest.er1\n  ac_status=$?\n  grep -v '^ *+' conftest.er1 >conftest.err\n  rm -f conftest.er1\n  cat conftest.err >&5\n  echo \"$as_me:$LINENO: \\$? = $ac_status\" >&5\n  (exit $ac_status); } &&\n\t { ac_try='test -z \"$ac_c_werror_flag\"\n\t\t\t || test ! -s conftest.err'\n  { (eval echo \"$as_me:$LINENO: \\\"$ac_try\\\"\") >&5\n  (eval $ac_try) 2>&5\n  ac_status=$?\n  echo \"$as_me:$LINENO: \\$? = $ac_status\" >&5\n  (exit $ac_status); }; } &&\n\t { ac_try='test -s conftest$ac_exeext'\n  { (eval echo \"$as_me:$LINENO: \\\"$ac_try\\\"\") >&5\n  (eval $ac_try) 2>&5\n  ac_status=$?\n  echo \"$as_me:$LINENO: \\$? = $ac_status\" >&5\n  (exit $ac_status); }; }; then\n  ac_cv_lib_svld_dlopen=yes\nelse\n  echo \"$as_me: failed program was:\" >&5\nsed 's/^/| /' conftest.$ac_ext >&5\n\n\tac_cv_lib_svld_dlopen=no\nfi\n\nrm -f conftest.err conftest.$ac_objext \\\n      conftest$ac_exeext conftest.$ac_ext\nLIBS=$ac_check_lib_save_LIBS\nfi\n{ echo \"$as_me:$LINENO: result: $ac_cv_lib_svld_dlopen\" >&5\necho \"${ECHO_T}$ac_cv_lib_svld_dlopen\" >&6; }\nif test $ac_cv_lib_svld_dlopen = yes; then\n  lt_cv_dlopen=\"dlopen\" lt_cv_dlopen_libs=\"-lsvld\"\nelse\n  { echo \"$as_me:$LINENO: checking for dld_link in -ldld\" >&5\necho $ECHO_N \"checking for dld_link in -ldld... $ECHO_C\" >&6; }\nif test \"${ac_cv_lib_dld_dld_link+set}\" = set; then\n  echo $ECHO_N \"(cached) $ECHO_C\" >&6\nelse\n  ac_check_lib_save_LIBS=$LIBS\nLIBS=\"-ldld  $LIBS\"\ncat >conftest.$ac_ext <<_ACEOF\n/* confdefs.h.  */\n_ACEOF\ncat confdefs.h >>conftest.$ac_ext\ncat >>conftest.$ac_ext <<_ACEOF\n/* end confdefs.h.  */\n\n/* Override any GCC internal prototype to avoid an error.\n   Use char because int might match the return type of a GCC\n   builtin and then its argument prototype would still apply.  */\n#ifdef __cplusplus\nextern \"C\"\n#endif\nchar dld_link ();\nint\nmain ()\n{\nreturn dld_link ();\n  ;\n  return 0;\n}\n_ACEOF\nrm -f conftest.$ac_objext conftest$ac_exeext\nif { (eval echo \"$as_me:$LINENO: \\\"$ac_link\\\"\") >&5\n  (eval $ac_link) 2>conftest.er1\n  ac_status=$?\n  grep -v '^ *+' conftest.er1 >conftest.err\n  rm -f conftest.er1\n  cat conftest.err >&5\n  echo \"$as_me:$LINENO: \\$? = $ac_status\" >&5\n  (exit $ac_status); } &&\n\t { ac_try='test -z \"$ac_c_werror_flag\"\n\t\t\t || test ! -s conftest.err'\n  { (eval echo \"$as_me:$LINENO: \\\"$ac_try\\\"\") >&5\n  (eval $ac_try) 2>&5\n  ac_status=$?\n  echo \"$as_me:$LINENO: \\$? = $ac_status\" >&5\n  (exit $ac_status); }; } &&\n\t { ac_try='test -s conftest$ac_exeext'\n  { (eval echo \"$as_me:$LINENO: \\\"$ac_try\\\"\") >&5\n  (eval $ac_try) 2>&5\n  ac_status=$?\n  echo \"$as_me:$LINENO: \\$? = $ac_status\" >&5\n  (exit $ac_status); }; }; then\n  ac_cv_lib_dld_dld_link=yes\nelse\n  echo \"$as_me: failed program was:\" >&5\nsed 's/^/| /' conftest.$ac_ext >&5\n\n\tac_cv_lib_dld_dld_link=no\nfi\n\nrm -f conftest.err conftest.$ac_objext \\\n      conftest$ac_exeext conftest.$ac_ext\nLIBS=$ac_check_lib_save_LIBS\nfi\n{ echo \"$as_me:$LINENO: result: $ac_cv_lib_dld_dld_link\" >&5\necho \"${ECHO_T}$ac_cv_lib_dld_dld_link\" >&6; }\nif test $ac_cv_lib_dld_dld_link = yes; then\n  lt_cv_dlopen=\"dld_link\" lt_cv_dlopen_libs=\"-dld\"\nfi\n\n\nfi\n\n\nfi\n\n\nfi\n\n\nfi\n\n\nfi\n\n    ;;\n  esac\n\n  if test \"x$lt_cv_dlopen\" != xno; then\n    enable_dlopen=yes\n  else\n    enable_dlopen=no\n  fi\n\n  case $lt_cv_dlopen in\n  dlopen)\n    save_CPPFLAGS=\"$CPPFLAGS\"\n    test \"x$ac_cv_header_dlfcn_h\" = xyes && CPPFLAGS=\"$CPPFLAGS -DHAVE_DLFCN_H\"\n\n    save_LDFLAGS=\"$LDFLAGS\"\n    wl=$lt_prog_compiler_wl eval LDFLAGS=\\\"\\$LDFLAGS $export_dynamic_flag_spec\\\"\n\n    save_LIBS=\"$LIBS\"\n    LIBS=\"$lt_cv_dlopen_libs $LIBS\"\n\n    { echo \"$as_me:$LINENO: checking whether a program can dlopen itself\" >&5\necho $ECHO_N \"checking whether a program can dlopen itself... $ECHO_C\" >&6; }\nif test \"${lt_cv_dlopen_self+set}\" = set; then\n  echo $ECHO_N \"(cached) $ECHO_C\" >&6\nelse\n  \t  if test \"$cross_compiling\" = yes; then :\n  lt_cv_dlopen_self=cross\nelse\n  lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2\n  lt_status=$lt_dlunknown\n  cat > conftest.$ac_ext <<EOF\n#line 9207 \"configure\"\n#include \"confdefs.h\"\n\n#if HAVE_DLFCN_H\n#include <dlfcn.h>\n#endif\n\n#include <stdio.h>\n\n#ifdef RTLD_GLOBAL\n#  define LT_DLGLOBAL\t\tRTLD_GLOBAL\n#else\n#  ifdef DL_GLOBAL\n#    define LT_DLGLOBAL\t\tDL_GLOBAL\n#  else\n#    define LT_DLGLOBAL\t\t0\n#  endif\n#endif\n\n/* We may have to define LT_DLLAZY_OR_NOW in the command line if we\n   find out it does not work in some platform. */\n#ifndef LT_DLLAZY_OR_NOW\n#  ifdef RTLD_LAZY\n#    define LT_DLLAZY_OR_NOW\t\tRTLD_LAZY\n#  else\n#    ifdef DL_LAZY\n#      define LT_DLLAZY_OR_NOW\t\tDL_LAZY\n#    else\n#      ifdef RTLD_NOW\n#        define LT_DLLAZY_OR_NOW\tRTLD_NOW\n#      else\n#        ifdef DL_NOW\n#          define LT_DLLAZY_OR_NOW\tDL_NOW\n#        else\n#          define LT_DLLAZY_OR_NOW\t0\n#        endif\n#      endif\n#    endif\n#  endif\n#endif\n\n#ifdef __cplusplus\nextern \"C\" void exit (int);\n#endif\n\nvoid fnord() { int i=42;}\nint main ()\n{\n  void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);\n  int status = $lt_dlunknown;\n\n  if (self)\n    {\n      if (dlsym (self,\"fnord\"))       status = $lt_dlno_uscore;\n      else if (dlsym( self,\"_fnord\")) status = $lt_dlneed_uscore;\n      /* dlclose (self); */\n    }\n  else\n    puts (dlerror ());\n\n    exit (status);\n}\nEOF\n  if { (eval echo \"$as_me:$LINENO: \\\"$ac_link\\\"\") >&5\n  (eval $ac_link) 2>&5\n  ac_status=$?\n  echo \"$as_me:$LINENO: \\$? = $ac_status\" >&5\n  (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then\n    (./conftest; exit; ) >&5 2>/dev/null\n    lt_status=$?\n    case x$lt_status in\n      x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;;\n      x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;;\n      x$lt_dlunknown|x*) lt_cv_dlopen_self=no ;;\n    esac\n  else :\n    # compilation failed\n    lt_cv_dlopen_self=no\n  fi\nfi\nrm -fr conftest*\n\n\nfi\n{ echo \"$as_me:$LINENO: result: $lt_cv_dlopen_self\" >&5\necho \"${ECHO_T}$lt_cv_dlopen_self\" >&6; }\n\n    if test \"x$lt_cv_dlopen_self\" = xyes; then\n      wl=$lt_prog_compiler_wl eval LDFLAGS=\\\"\\$LDFLAGS $lt_prog_compiler_static\\\"\n      { echo \"$as_me:$LINENO: checking whether a statically linked program can dlopen itself\" >&5\necho $ECHO_N \"checking whether a statically linked program can dlopen itself... $ECHO_C\" >&6; }\nif test \"${lt_cv_dlopen_self_static+set}\" = set; then\n  echo $ECHO_N \"(cached) $ECHO_C\" >&6\nelse\n  \t  if test \"$cross_compiling\" = yes; then :\n  lt_cv_dlopen_self_static=cross\nelse\n  lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2\n  lt_status=$lt_dlunknown\n  cat > conftest.$ac_ext <<EOF\n#line 9307 \"configure\"\n#include \"confdefs.h\"\n\n#if HAVE_DLFCN_H\n#include <dlfcn.h>\n#endif\n\n#include <stdio.h>\n\n#ifdef RTLD_GLOBAL\n#  define LT_DLGLOBAL\t\tRTLD_GLOBAL\n#else\n#  ifdef DL_GLOBAL\n#    define LT_DLGLOBAL\t\tDL_GLOBAL\n#  else\n#    define LT_DLGLOBAL\t\t0\n#  endif\n#endif\n\n/* We may have to define LT_DLLAZY_OR_NOW in the command line if we\n   find out it does not work in some platform. */\n#ifndef LT_DLLAZY_OR_NOW\n#  ifdef RTLD_LAZY\n#    define LT_DLLAZY_OR_NOW\t\tRTLD_LAZY\n#  else\n#    ifdef DL_LAZY\n#      define LT_DLLAZY_OR_NOW\t\tDL_LAZY\n#    else\n#      ifdef RTLD_NOW\n#        define LT_DLLAZY_OR_NOW\tRTLD_NOW\n#      else\n#        ifdef DL_NOW\n#          define LT_DLLAZY_OR_NOW\tDL_NOW\n#        else\n#          define LT_DLLAZY_OR_NOW\t0\n#        endif\n#      endif\n#    endif\n#  endif\n#endif\n\n#ifdef __cplusplus\nextern \"C\" void exit (int);\n#endif\n\nvoid fnord() { int i=42;}\nint main ()\n{\n  void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);\n  int status = $lt_dlunknown;\n\n  if (self)\n    {\n      if (dlsym (self,\"fnord\"))       status = $lt_dlno_uscore;\n      else if (dlsym( self,\"_fnord\")) status = $lt_dlneed_uscore;\n      /* dlclose (self); */\n    }\n  else\n    puts (dlerror ());\n\n    exit (status);\n}\nEOF\n  if { (eval echo \"$as_me:$LINENO: \\\"$ac_link\\\"\") >&5\n  (eval $ac_link) 2>&5\n  ac_status=$?\n  echo \"$as_me:$LINENO: \\$? = $ac_status\" >&5\n  (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then\n    (./conftest; exit; ) >&5 2>/dev/null\n    lt_status=$?\n    case x$lt_status in\n      x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;;\n      x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;;\n      x$lt_dlunknown|x*) lt_cv_dlopen_self_static=no ;;\n    esac\n  else :\n    # compilation failed\n    lt_cv_dlopen_self_static=no\n  fi\nfi\nrm -fr conftest*\n\n\nfi\n{ echo \"$as_me:$LINENO: result: $lt_cv_dlopen_self_static\" >&5\necho \"${ECHO_T}$lt_cv_dlopen_self_static\" >&6; }\n    fi\n\n    CPPFLAGS=\"$save_CPPFLAGS\"\n    LDFLAGS=\"$save_LDFLAGS\"\n    LIBS=\"$save_LIBS\"\n    ;;\n  esac\n\n  case $lt_cv_dlopen_self in\n  yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;;\n  *) enable_dlopen_self=unknown ;;\n  esac\n\n  case $lt_cv_dlopen_self_static in\n  yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;;\n  *) enable_dlopen_self_static=unknown ;;\n  esac\nfi\n\n\n# Report which library types will actually be built\n{ echo \"$as_me:$LINENO: checking if libtool supports shared libraries\" >&5\necho $ECHO_N \"checking if libtool supports shared libraries... $ECHO_C\" >&6; }\n{ echo \"$as_me:$LINENO: result: $can_build_shared\" >&5\necho \"${ECHO_T}$can_build_shared\" >&6; }\n\n{ echo \"$as_me:$LINENO: checking whether to build shared libraries\" >&5\necho $ECHO_N \"checking whether to build shared libraries... $ECHO_C\" >&6; }\ntest \"$can_build_shared\" = \"no\" && enable_shared=no\n\n# On AIX, shared libraries and static libraries use the same namespace, and\n# are all built from PIC.\ncase $host_os in\naix3*)\n  test \"$enable_shared\" = yes && enable_static=no\n  if test -n \"$RANLIB\"; then\n    archive_cmds=\"$archive_cmds~\\$RANLIB \\$lib\"\n    postinstall_cmds='$RANLIB $lib'\n  fi\n  ;;\n\naix4* | aix5*)\n  if test \"$host_cpu\" != ia64 && test \"$aix_use_runtimelinking\" = no ; then\n    test \"$enable_shared\" = yes && enable_static=no\n  fi\n    ;;\nesac\n{ echo \"$as_me:$LINENO: result: $enable_shared\" >&5\necho \"${ECHO_T}$enable_shared\" >&6; }\n\n{ echo \"$as_me:$LINENO: checking whether to build static libraries\" >&5\necho $ECHO_N \"checking whether to build static libraries... $ECHO_C\" >&6; }\n# Make sure either enable_shared or enable_static is yes.\ntest \"$enable_shared\" = yes || enable_static=yes\n{ echo \"$as_me:$LINENO: result: $enable_static\" >&5\necho \"${ECHO_T}$enable_static\" >&6; }\n\n# The else clause should only fire when bootstrapping the\n# libtool distribution, otherwise you forgot to ship ltmain.sh\n# with your package, and you will get complaints that there are\n# no rules to generate ltmain.sh.\nif test -f \"$ltmain\"; then\n  # See if we are running on zsh, and set the options which allow our commands through\n  # without removal of \\ escapes.\n  if test -n \"${ZSH_VERSION+set}\" ; then\n    setopt NO_GLOB_SUBST\n  fi\n  # Now quote all the things that may contain metacharacters while being\n  # careful not to overquote the AC_SUBSTed values.  We take copies of the\n  # variables and quote the copies for generation of the libtool script.\n  for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC LTCFLAGS NM \\\n    SED SHELL STRIP \\\n    libname_spec library_names_spec soname_spec extract_expsyms_cmds \\\n    old_striplib striplib file_magic_cmd finish_cmds finish_eval \\\n    deplibs_check_method reload_flag reload_cmds need_locks \\\n    lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \\\n    lt_cv_sys_global_symbol_to_c_name_address \\\n    sys_lib_search_path_spec sys_lib_dlsearch_path_spec \\\n    old_postinstall_cmds old_postuninstall_cmds \\\n    compiler \\\n    CC \\\n    LD \\\n    lt_prog_compiler_wl \\\n    lt_prog_compiler_pic \\\n    lt_prog_compiler_static \\\n    lt_prog_compiler_no_builtin_flag \\\n    export_dynamic_flag_spec \\\n    thread_safe_flag_spec \\\n    whole_archive_flag_spec \\\n    enable_shared_with_static_runtimes \\\n    old_archive_cmds \\\n    old_archive_from_new_cmds \\\n    predep_objects \\\n    postdep_objects \\\n    predeps \\\n    postdeps \\\n    compiler_lib_search_path \\\n    archive_cmds \\\n    archive_expsym_cmds \\\n    postinstall_cmds \\\n    postuninstall_cmds \\\n    old_archive_from_expsyms_cmds \\\n    allow_undefined_flag \\\n    no_undefined_flag \\\n    export_symbols_cmds \\\n    hardcode_libdir_flag_spec \\\n    hardcode_libdir_flag_spec_ld \\\n    hardcode_libdir_separator \\\n    hardcode_automatic \\\n    module_cmds \\\n    module_expsym_cmds \\\n    lt_cv_prog_compiler_c_o \\\n    exclude_expsyms \\\n    include_expsyms; do\n\n    case $var in\n    old_archive_cmds | \\\n    old_archive_from_new_cmds | \\\n    archive_cmds | \\\n    archive_expsym_cmds | \\\n    module_cmds | \\\n    module_expsym_cmds | \\\n    old_archive_from_expsyms_cmds | \\\n    export_symbols_cmds | \\\n    extract_expsyms_cmds | reload_cmds | finish_cmds | \\\n    postinstall_cmds | postuninstall_cmds | \\\n    old_postinstall_cmds | old_postuninstall_cmds | \\\n    sys_lib_search_path_spec | sys_lib_dlsearch_path_spec)\n      # Double-quote double-evaled strings.\n      eval \"lt_$var=\\\\\\\"\\`\\$echo \\\"X\\$$var\\\" | \\$Xsed -e \\\"\\$double_quote_subst\\\" -e \\\"\\$sed_quote_subst\\\" -e \\\"\\$delay_variable_subst\\\"\\`\\\\\\\"\"\n      ;;\n    *)\n      eval \"lt_$var=\\\\\\\"\\`\\$echo \\\"X\\$$var\\\" | \\$Xsed -e \\\"\\$sed_quote_subst\\\"\\`\\\\\\\"\"\n      ;;\n    esac\n  done\n\n  case $lt_echo in\n  *'\\$0 --fallback-echo\"')\n    lt_echo=`$echo \"X$lt_echo\" | $Xsed -e 's/\\\\\\\\\\\\\\$0 --fallback-echo\"$/$0 --fallback-echo\"/'`\n    ;;\n  esac\n\ncfgfile=\"${ofile}T\"\n  trap \"$rm \\\"$cfgfile\\\"; exit 1\" 1 2 15\n  $rm -f \"$cfgfile\"\n  { echo \"$as_me:$LINENO: creating $ofile\" >&5\necho \"$as_me: creating $ofile\" >&6;}\n\n  cat <<__EOF__ >> \"$cfgfile\"\n#! $SHELL\n\n# `$echo \"$cfgfile\" | sed 's%^.*/%%'` - Provide generalized library-building support services.\n# Generated automatically by $PROGRAM (GNU $PACKAGE $VERSION$TIMESTAMP)\n# NOTE: Changes made to this file will be lost: look at ltmain.sh.\n#\n# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001\n# Free Software Foundation, Inc.\n#\n# This file is part of GNU Libtool:\n# Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996\n#\n# This program is free software; you can redistribute it and/or modify\n# it under the terms of the GNU General Public License as published by\n# the Free Software Foundation; either version 2 of the License, or\n# (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful, but\n# WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n# General Public License for more details.\n#\n# You should have received a copy of the GNU General Public License\n# along with this program; if not, write to the Free Software\n# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n#\n# As a special exception to the GNU General Public License, if you\n# distribute this file as part of a program that contains a\n# configuration script generated by Autoconf, you may include it under\n# the same distribution terms that you use for the rest of that program.\n\n# A sed program that does not truncate output.\nSED=$lt_SED\n\n# Sed that helps us avoid accidentally triggering echo(1) options like -n.\nXsed=\"$SED -e 1s/^X//\"\n\n# The HP-UX ksh and POSIX shell print the target directory to stdout\n# if CDPATH is set.\n(unset CDPATH) >/dev/null 2>&1 && unset CDPATH\n\n# The names of the tagged configurations supported by this script.\navailable_tags=\n\n# ### BEGIN LIBTOOL CONFIG\n\n# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:\n\n# Shell to use when invoking shell scripts.\nSHELL=$lt_SHELL\n\n# Whether or not to build shared libraries.\nbuild_libtool_libs=$enable_shared\n\n# Whether or not to build static libraries.\nbuild_old_libs=$enable_static\n\n# Whether or not to add -lc for building shared libraries.\nbuild_libtool_need_lc=$archive_cmds_need_lc\n\n# Whether or not to disallow shared libs when runtime libs are static\nallow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes\n\n# Whether or not to optimize for fast installation.\nfast_install=$enable_fast_install\n\n# The host system.\nhost_alias=$host_alias\nhost=$host\nhost_os=$host_os\n\n# The build system.\nbuild_alias=$build_alias\nbuild=$build\nbuild_os=$build_os\n\n# An echo program that does not interpret backslashes.\necho=$lt_echo\n\n# The archiver.\nAR=$lt_AR\nAR_FLAGS=$lt_AR_FLAGS\n\n# A C compiler.\nLTCC=$lt_LTCC\n\n# LTCC compiler flags.\nLTCFLAGS=$lt_LTCFLAGS\n\n# A language-specific compiler.\nCC=$lt_compiler\n\n# Is the compiler the GNU C compiler?\nwith_gcc=$GCC\n\n# An ERE matcher.\nEGREP=$lt_EGREP\n\n# The linker used to build libraries.\nLD=$lt_LD\n\n# Whether we need hard or soft links.\nLN_S=$lt_LN_S\n\n# A BSD-compatible nm program.\nNM=$lt_NM\n\n# A symbol stripping program\nSTRIP=$lt_STRIP\n\n# Used to examine libraries when file_magic_cmd begins \"file\"\nMAGIC_CMD=$MAGIC_CMD\n\n# Used on cygwin: DLL creation program.\nDLLTOOL=\"$DLLTOOL\"\n\n# Used on cygwin: object dumper.\nOBJDUMP=\"$OBJDUMP\"\n\n# Used on cygwin: assembler.\nAS=\"$AS\"\n\n# The name of the directory that contains temporary libtool files.\nobjdir=$objdir\n\n# How to create reloadable object files.\nreload_flag=$lt_reload_flag\nreload_cmds=$lt_reload_cmds\n\n# How to pass a linker flag through the compiler.\nwl=$lt_lt_prog_compiler_wl\n\n# Object file suffix (normally \"o\").\nobjext=\"$ac_objext\"\n\n# Old archive suffix (normally \"a\").\nlibext=\"$libext\"\n\n# Shared library suffix (normally \".so\").\nshrext_cmds='$shrext_cmds'\n\n# Executable file suffix (normally \"\").\nexeext=\"$exeext\"\n\n# Additional compiler flags for building library objects.\npic_flag=$lt_lt_prog_compiler_pic\npic_mode=$pic_mode\n\n# What is the maximum length of a command?\nmax_cmd_len=$lt_cv_sys_max_cmd_len\n\n# Does compiler simultaneously support -c and -o options?\ncompiler_c_o=$lt_lt_cv_prog_compiler_c_o\n\n# Must we lock files when doing compilation?\nneed_locks=$lt_need_locks\n\n# Do we need the lib prefix for modules?\nneed_lib_prefix=$need_lib_prefix\n\n# Do we need a version for libraries?\nneed_version=$need_version\n\n# Whether dlopen is supported.\ndlopen_support=$enable_dlopen\n\n# Whether dlopen of programs is supported.\ndlopen_self=$enable_dlopen_self\n\n# Whether dlopen of statically linked programs is supported.\ndlopen_self_static=$enable_dlopen_self_static\n\n# Compiler flag to prevent dynamic linking.\nlink_static_flag=$lt_lt_prog_compiler_static\n\n# Compiler flag to turn off builtin functions.\nno_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag\n\n# Compiler flag to allow reflexive dlopens.\nexport_dynamic_flag_spec=$lt_export_dynamic_flag_spec\n\n# Compiler flag to generate shared objects directly from archives.\nwhole_archive_flag_spec=$lt_whole_archive_flag_spec\n\n# Compiler flag to generate thread-safe objects.\nthread_safe_flag_spec=$lt_thread_safe_flag_spec\n\n# Library versioning type.\nversion_type=$version_type\n\n# Format of library name prefix.\nlibname_spec=$lt_libname_spec\n\n# List of archive names.  First name is the real one, the rest are links.\n# The last name is the one that the linker finds with -lNAME.\nlibrary_names_spec=$lt_library_names_spec\n\n# The coded name of the library, if different from the real name.\nsoname_spec=$lt_soname_spec\n\n# Commands used to build and install an old-style archive.\nRANLIB=$lt_RANLIB\nold_archive_cmds=$lt_old_archive_cmds\nold_postinstall_cmds=$lt_old_postinstall_cmds\nold_postuninstall_cmds=$lt_old_postuninstall_cmds\n\n# Create an old-style archive from a shared archive.\nold_archive_from_new_cmds=$lt_old_archive_from_new_cmds\n\n# Create a temporary old-style archive to link instead of a shared archive.\nold_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds\n\n# Commands used to build and install a shared archive.\narchive_cmds=$lt_archive_cmds\narchive_expsym_cmds=$lt_archive_expsym_cmds\npostinstall_cmds=$lt_postinstall_cmds\npostuninstall_cmds=$lt_postuninstall_cmds\n\n# Commands used to build a loadable module (assumed same as above if empty)\nmodule_cmds=$lt_module_cmds\nmodule_expsym_cmds=$lt_module_expsym_cmds\n\n# Commands to strip libraries.\nold_striplib=$lt_old_striplib\nstriplib=$lt_striplib\n\n# Dependencies to place before the objects being linked to create a\n# shared library.\npredep_objects=$lt_predep_objects\n\n# Dependencies to place after the objects being linked to create a\n# shared library.\npostdep_objects=$lt_postdep_objects\n\n# Dependencies to place before the objects being linked to create a\n# shared library.\npredeps=$lt_predeps\n\n# Dependencies to place after the objects being linked to create a\n# shared library.\npostdeps=$lt_postdeps\n\n# The library search path used internally by the compiler when linking\n# a shared library.\ncompiler_lib_search_path=$lt_compiler_lib_search_path\n\n# Method to check whether dependent libraries are shared objects.\ndeplibs_check_method=$lt_deplibs_check_method\n\n# Command to use when deplibs_check_method == file_magic.\nfile_magic_cmd=$lt_file_magic_cmd\n\n# Flag that allows shared libraries with undefined symbols to be built.\nallow_undefined_flag=$lt_allow_undefined_flag\n\n# Flag that forces no undefined symbols.\nno_undefined_flag=$lt_no_undefined_flag\n\n# Commands used to finish a libtool library installation in a directory.\nfinish_cmds=$lt_finish_cmds\n\n# Same as above, but a single script fragment to be evaled but not shown.\nfinish_eval=$lt_finish_eval\n\n# Take the output of nm and produce a listing of raw symbols and C names.\nglobal_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe\n\n# Transform the output of nm in a proper C declaration\nglobal_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl\n\n# Transform the output of nm in a C name address pair\nglobal_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address\n\n# This is the shared library runtime path variable.\nrunpath_var=$runpath_var\n\n# This is the shared library path variable.\nshlibpath_var=$shlibpath_var\n\n# Is shlibpath searched before the hard-coded library search path?\nshlibpath_overrides_runpath=$shlibpath_overrides_runpath\n\n# How to hardcode a shared library path into an executable.\nhardcode_action=$hardcode_action\n\n# Whether we should hardcode library paths into libraries.\nhardcode_into_libs=$hardcode_into_libs\n\n# Flag to hardcode \\$libdir into a binary during linking.\n# This must work even if \\$libdir does not exist.\nhardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec\n\n# If ld is used when linking, flag to hardcode \\$libdir into\n# a binary during linking. This must work even if \\$libdir does\n# not exist.\nhardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld\n\n# Whether we need a single -rpath flag with a separated argument.\nhardcode_libdir_separator=$lt_hardcode_libdir_separator\n\n# Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the\n# resulting binary.\nhardcode_direct=$hardcode_direct\n\n# Set to yes if using the -LDIR flag during linking hardcodes DIR into the\n# resulting binary.\nhardcode_minus_L=$hardcode_minus_L\n\n# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into\n# the resulting binary.\nhardcode_shlibpath_var=$hardcode_shlibpath_var\n\n# Set to yes if building a shared library automatically hardcodes DIR into the library\n# and all subsequent libraries and executables linked against it.\nhardcode_automatic=$hardcode_automatic\n\n# Variables whose values should be saved in libtool wrapper scripts and\n# restored at relink time.\nvariables_saved_for_relink=\"$variables_saved_for_relink\"\n\n# Whether libtool must link a program against all its dependency libraries.\nlink_all_deplibs=$link_all_deplibs\n\n# Compile-time system search path for libraries\nsys_lib_search_path_spec=$lt_sys_lib_search_path_spec\n\n# Run-time system search path for libraries\nsys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec\n\n# Fix the shell variable \\$srcfile for the compiler.\nfix_srcfile_path=\"$fix_srcfile_path\"\n\n# Set to yes if exported symbols are required.\nalways_export_symbols=$always_export_symbols\n\n# The commands to list exported symbols.\nexport_symbols_cmds=$lt_export_symbols_cmds\n\n# The commands to extract the exported symbol list from a shared archive.\nextract_expsyms_cmds=$lt_extract_expsyms_cmds\n\n# Symbols that should not be listed in the preloaded symbols.\nexclude_expsyms=$lt_exclude_expsyms\n\n# Symbols that must always be exported.\ninclude_expsyms=$lt_include_expsyms\n\n# ### END LIBTOOL CONFIG\n\n__EOF__\n\n\n  case $host_os in\n  aix3*)\n    cat <<\\EOF >> \"$cfgfile\"\n\n# AIX sometimes has problems with the GCC collect2 program.  For some\n# reason, if we set the COLLECT_NAMES environment variable, the problems\n# vanish in a puff of smoke.\nif test \"X${COLLECT_NAMES+set}\" != Xset; then\n  COLLECT_NAMES=\n  export COLLECT_NAMES\nfi\nEOF\n    ;;\n  esac\n\n  # We use sed instead of cat because bash on DJGPP gets confused if\n  # if finds mixed CR/LF and LF-only lines.  Since sed operates in\n  # text mode, it properly converts lines to CR/LF.  This bash problem\n  # is reportedly fixed, but why not run on old versions too?\n  sed '$q' \"$ltmain\" >> \"$cfgfile\" || (rm -f \"$cfgfile\"; exit 1)\n\n  mv -f \"$cfgfile\" \"$ofile\" || \\\n    (rm -f \"$ofile\" && cp \"$cfgfile\" \"$ofile\" && rm -f \"$cfgfile\")\n  chmod +x \"$ofile\"\n\nelse\n  # If there is no Makefile yet, we rely on a make rule to execute\n  # `config.status --recheck' to rerun these tests and create the\n  # libtool script then.\n  ltmain_in=`echo $ltmain | sed -e 's/\\.sh$/.in/'`\n  if test -f \"$ltmain_in\"; then\n    test -f Makefile && make \"$ltmain\"\n  fi\nfi\n\n\nac_ext=c\nac_cpp='$CPP $CPPFLAGS'\nac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'\nac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'\nac_compiler_gnu=$ac_cv_c_compiler_gnu\n\nCC=\"$lt_save_CC\"\n\n\n# Check whether --with-tags was given.\nif test \"${with_tags+set}\" = set; then\n  withval=$with_tags; tagnames=\"$withval\"\nfi\n\n\nif test -f \"$ltmain\" && test -n \"$tagnames\"; then\n  if test ! -f \"${ofile}\"; then\n    { echo \"$as_me:$LINENO: WARNING: output file \\`$ofile' does not exist\" >&5\necho \"$as_me: WARNING: output file \\`$ofile' does not exist\" >&2;}\n  fi\n\n  if test -z \"$LTCC\"; then\n    eval \"`$SHELL ${ofile} --config | grep '^LTCC='`\"\n    if test -z \"$LTCC\"; then\n      { echo \"$as_me:$LINENO: WARNING: output file \\`$ofile' does not look like a libtool script\" >&5\necho \"$as_me: WARNING: output file \\`$ofile' does not look like a libtool script\" >&2;}\n    else\n      { echo \"$as_me:$LINENO: WARNING: using \\`LTCC=$LTCC', extracted from \\`$ofile'\" >&5\necho \"$as_me: WARNING: using \\`LTCC=$LTCC', extracted from \\`$ofile'\" >&2;}\n    fi\n  fi\n  if test -z \"$LTCFLAGS\"; then\n    eval \"`$SHELL ${ofile} --config | grep '^LTCFLAGS='`\"\n  fi\n\n  # Extract list of available tagged configurations in $ofile.\n  # Note that this assumes the entire list is on one line.\n  available_tags=`grep \"^available_tags=\" \"${ofile}\" | $SED -e 's/available_tags=\\(.*$\\)/\\1/' -e 's/\\\"//g'`\n\n  lt_save_ifs=\"$IFS\"; IFS=\"${IFS}$PATH_SEPARATOR,\"\n  for tagname in $tagnames; do\n    IFS=\"$lt_save_ifs\"\n    # Check whether tagname contains only valid characters\n    case `$echo \"X$tagname\" | $Xsed -e 's:[-_ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890,/]::g'` in\n    \"\") ;;\n    *)  { { echo \"$as_me:$LINENO: error: invalid tag name: $tagname\" >&5\necho \"$as_me: error: invalid tag name: $tagname\" >&2;}\n   { (exit 1); exit 1; }; }\n\t;;\n    esac\n\n    if grep \"^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$\" < \"${ofile}\" > /dev/null\n    then\n      { { echo \"$as_me:$LINENO: error: tag name \\\"$tagname\\\" already exists\" >&5\necho \"$as_me: error: tag name \\\"$tagname\\\" already exists\" >&2;}\n   { (exit 1); exit 1; }; }\n    fi\n\n    # Update the list of available tags.\n    if test -n \"$tagname\"; then\n      echo appending configuration tag \\\"$tagname\\\" to $ofile\n\n      case $tagname in\n      CXX)\n\tif test -n \"$CXX\" && ( test \"X$CXX\" != \"Xno\" &&\n\t    ( (test \"X$CXX\" = \"Xg++\" && `g++ -v >/dev/null 2>&1` ) ||\n\t    (test \"X$CXX\" != \"Xg++\"))) ; then\n\t  ac_ext=cpp\nac_cpp='$CXXCPP $CPPFLAGS'\nac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'\nac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'\nac_compiler_gnu=$ac_cv_cxx_compiler_gnu\n\n\n\n\narchive_cmds_need_lc_CXX=no\nallow_undefined_flag_CXX=\nalways_export_symbols_CXX=no\narchive_expsym_cmds_CXX=\nexport_dynamic_flag_spec_CXX=\nhardcode_direct_CXX=no\nhardcode_libdir_flag_spec_CXX=\nhardcode_libdir_flag_spec_ld_CXX=\nhardcode_libdir_separator_CXX=\nhardcode_minus_L_CXX=no\nhardcode_shlibpath_var_CXX=unsupported\nhardcode_automatic_CXX=no\nmodule_cmds_CXX=\nmodule_expsym_cmds_CXX=\nlink_all_deplibs_CXX=unknown\nold_archive_cmds_CXX=$old_archive_cmds\nno_undefined_flag_CXX=\nwhole_archive_flag_spec_CXX=\nenable_shared_with_static_runtimes_CXX=no\n\n# Dependencies to place before and after the object being linked:\npredep_objects_CXX=\npostdep_objects_CXX=\npredeps_CXX=\npostdeps_CXX=\ncompiler_lib_search_path_CXX=\n\n# Source file extension for C++ test sources.\nac_ext=cpp\n\n# Object file extension for compiled C++ test sources.\nobjext=o\nobjext_CXX=$objext\n\n# Code to be used in simple compile tests\nlt_simple_compile_test_code=\"int some_variable = 0;\\n\"\n\n# Code to be used in simple link tests\nlt_simple_link_test_code='int main(int, char *[]) { return(0); }\\n'\n\n# ltmain only uses $CC for tagged configurations so make sure $CC is set.\n\n# If no C compiler was specified, use CC.\nLTCC=${LTCC-\"$CC\"}\n\n# If no C compiler flags were specified, use CFLAGS.\nLTCFLAGS=${LTCFLAGS-\"$CFLAGS\"}\n\n# Allow CC to be a program name with arguments.\ncompiler=$CC\n\n\n# save warnings/boilerplate of simple test code\nac_outfile=conftest.$ac_objext\nprintf \"$lt_simple_compile_test_code\" >conftest.$ac_ext\neval \"$ac_compile\" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err\n_lt_compiler_boilerplate=`cat conftest.err`\n$rm conftest*\n\nac_outfile=conftest.$ac_objext\nprintf \"$lt_simple_link_test_code\" >conftest.$ac_ext\neval \"$ac_link\" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err\n_lt_linker_boilerplate=`cat conftest.err`\n$rm conftest*\n\n\n# Allow CC to be a program name with arguments.\nlt_save_CC=$CC\nlt_save_LD=$LD\nlt_save_GCC=$GCC\nGCC=$GXX\nlt_save_with_gnu_ld=$with_gnu_ld\nlt_save_path_LD=$lt_cv_path_LD\nif test -n \"${lt_cv_prog_gnu_ldcxx+set}\"; then\n  lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx\nelse\n  $as_unset lt_cv_prog_gnu_ld\nfi\nif test -n \"${lt_cv_path_LDCXX+set}\"; then\n  lt_cv_path_LD=$lt_cv_path_LDCXX\nelse\n  $as_unset lt_cv_path_LD\nfi\ntest -z \"${LDCXX+set}\" || LD=$LDCXX\nCC=${CXX-\"c++\"}\ncompiler=$CC\ncompiler_CXX=$CC\nfor cc_temp in $compiler\"\"; do\n  case $cc_temp in\n    compile | *[\\\\/]compile | ccache | *[\\\\/]ccache ) ;;\n    distcc | *[\\\\/]distcc | purify | *[\\\\/]purify ) ;;\n    \\-*) ;;\n    *) break;;\n  esac\ndone\ncc_basename=`$echo \"X$cc_temp\" | $Xsed -e 's%.*/%%' -e \"s%^$host_alias-%%\"`\n\n\n# We don't want -fno-exception wen compiling C++ code, so set the\n# no_builtin_flag separately\nif test \"$GXX\" = yes; then\n  lt_prog_compiler_no_builtin_flag_CXX=' -fno-builtin'\nelse\n  lt_prog_compiler_no_builtin_flag_CXX=\nfi\n\nif test \"$GXX\" = yes; then\n  # Set up default GNU C++ configuration\n\n\n# Check whether --with-gnu-ld was given.\nif test \"${with_gnu_ld+set}\" = set; then\n  withval=$with_gnu_ld; test \"$withval\" = no || with_gnu_ld=yes\nelse\n  with_gnu_ld=no\nfi\n\nac_prog=ld\nif test \"$GCC\" = yes; then\n  # Check if gcc -print-prog-name=ld gives a path.\n  { echo \"$as_me:$LINENO: checking for ld used by $CC\" >&5\necho $ECHO_N \"checking for ld used by $CC... $ECHO_C\" >&6; }\n  case $host in\n  *-*-mingw*)\n    # gcc leaves a trailing carriage return which upsets mingw\n    ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\\015'` ;;\n  *)\n    ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;\n  esac\n  case $ac_prog in\n    # Accept absolute paths.\n    [\\\\/]* | ?:[\\\\/]*)\n      re_direlt='/[^/][^/]*/\\.\\./'\n      # Canonicalize the pathname of ld\n      ac_prog=`echo $ac_prog| $SED 's%\\\\\\\\%/%g'`\n      while echo $ac_prog | grep \"$re_direlt\" > /dev/null 2>&1; do\n\tac_prog=`echo $ac_prog| $SED \"s%$re_direlt%/%\"`\n      done\n      test -z \"$LD\" && LD=\"$ac_prog\"\n      ;;\n  \"\")\n    # If it fails, then pretend we aren't using GCC.\n    ac_prog=ld\n    ;;\n  *)\n    # If it is relative, then search for the first ld in PATH.\n    with_gnu_ld=unknown\n    ;;\n  esac\nelif test \"$with_gnu_ld\" = yes; then\n  { echo \"$as_me:$LINENO: checking for GNU ld\" >&5\necho $ECHO_N \"checking for GNU ld... $ECHO_C\" >&6; }\nelse\n  { echo \"$as_me:$LINENO: checking for non-GNU ld\" >&5\necho $ECHO_N \"checking for non-GNU ld... $ECHO_C\" >&6; }\nfi\nif test \"${lt_cv_path_LD+set}\" = set; then\n  echo $ECHO_N \"(cached) $ECHO_C\" >&6\nelse\n  if test -z \"$LD\"; then\n  lt_save_ifs=\"$IFS\"; IFS=$PATH_SEPARATOR\n  for ac_dir in $PATH; do\n    IFS=\"$lt_save_ifs\"\n    test -z \"$ac_dir\" && ac_dir=.\n    if test -f \"$ac_dir/$ac_prog\" || test -f \"$ac_dir/$ac_prog$ac_exeext\"; then\n      lt_cv_path_LD=\"$ac_dir/$ac_prog\"\n      # Check to see if the program is GNU ld.  I'd rather use --version,\n      # but apparently some variants of GNU ld only accept -v.\n      # Break only if it was the GNU/non-GNU ld that we prefer.\n      case `\"$lt_cv_path_LD\" -v 2>&1 </dev/null` in\n      *GNU* | *'with BFD'*)\n\ttest \"$with_gnu_ld\" != no && break\n\t;;\n      *)\n\ttest \"$with_gnu_ld\" != yes && break\n\t;;\n      esac\n    fi\n  done\n  IFS=\"$lt_save_ifs\"\nelse\n  lt_cv_path_LD=\"$LD\" # Let the user override the test with a path.\nfi\nfi\n\nLD=\"$lt_cv_path_LD\"\nif test -n \"$LD\"; then\n  { echo \"$as_me:$LINENO: result: $LD\" >&5\necho \"${ECHO_T}$LD\" >&6; }\nelse\n  { echo \"$as_me:$LINENO: result: no\" >&5\necho \"${ECHO_T}no\" >&6; }\nfi\ntest -z \"$LD\" && { { echo \"$as_me:$LINENO: error: no acceptable ld found in \\$PATH\" >&5\necho \"$as_me: error: no acceptable ld found in \\$PATH\" >&2;}\n   { (exit 1); exit 1; }; }\n{ echo \"$as_me:$LINENO: checking if the linker ($LD) is GNU ld\" >&5\necho $ECHO_N \"checking if the linker ($LD) is GNU ld... $ECHO_C\" >&6; }\nif test \"${lt_cv_prog_gnu_ld+set}\" = set; then\n  echo $ECHO_N \"(cached) $ECHO_C\" >&6\nelse\n  # I'd rather use --version here, but apparently some GNU lds only accept -v.\ncase `$LD -v 2>&1 </dev/null` in\n*GNU* | *'with BFD'*)\n  lt_cv_prog_gnu_ld=yes\n  ;;\n*)\n  lt_cv_prog_gnu_ld=no\n  ;;\nesac\nfi\n{ echo \"$as_me:$LINENO: result: $lt_cv_prog_gnu_ld\" >&5\necho \"${ECHO_T}$lt_cv_prog_gnu_ld\" >&6; }\nwith_gnu_ld=$lt_cv_prog_gnu_ld\n\n\n\n  # Check if GNU C++ uses GNU ld as the underlying linker, since the\n  # archiving commands below assume that GNU ld is being used.\n  if test \"$with_gnu_ld\" = yes; then\n    archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'\n    archive_expsym_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'\n\n    hardcode_libdir_flag_spec_CXX='${wl}--rpath ${wl}$libdir'\n    export_dynamic_flag_spec_CXX='${wl}--export-dynamic'\n\n    # If archive_cmds runs LD, not CC, wlarc should be empty\n    # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to\n    #     investigate it a little bit more. (MM)\n    wlarc='${wl}'\n\n    # ancient GNU ld didn't support --whole-archive et. al.\n    if eval \"`$CC -print-prog-name=ld` --help 2>&1\" | \\\n\tgrep 'no-whole-archive' > /dev/null; then\n      whole_archive_flag_spec_CXX=\"$wlarc\"'--whole-archive$convenience '\"$wlarc\"'--no-whole-archive'\n    else\n      whole_archive_flag_spec_CXX=\n    fi\n  else\n    with_gnu_ld=no\n    wlarc=\n\n    # A generic and very simple default shared library creation\n    # command for GNU C++ for the case where it uses the native\n    # linker, instead of GNU ld.  If possible, this setting should\n    # overridden to take advantage of the native linker features on\n    # the platform it is being used on.\n    archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'\n  fi\n\n  # Commands to make compiler produce verbose output that lists\n  # what \"hidden\" libraries, object files and flags are used when\n  # linking a shared library.\n  output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep \"\\-L\"'\n\nelse\n  GXX=no\n  with_gnu_ld=no\n  wlarc=\nfi\n\n# PORTME: fill in a description of your system's C++ link characteristics\n{ echo \"$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries\" >&5\necho $ECHO_N \"checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C\" >&6; }\nld_shlibs_CXX=yes\ncase $host_os in\n  aix3*)\n    # FIXME: insert proper C++ library support\n    ld_shlibs_CXX=no\n    ;;\n  aix4* | aix5*)\n    if test \"$host_cpu\" = ia64; then\n      # On IA64, the linker does run time linking by default, so we don't\n      # have to do anything special.\n      aix_use_runtimelinking=no\n      exp_sym_flag='-Bexport'\n      no_entry_flag=\"\"\n    else\n      aix_use_runtimelinking=no\n\n      # Test if we are trying to use run time linking or normal\n      # AIX style linking. If -brtl is somewhere in LDFLAGS, we\n      # need to do runtime linking.\n      case $host_os in aix4.[23]|aix4.[23].*|aix5*)\n\tfor ld_flag in $LDFLAGS; do\n\t  case $ld_flag in\n\t  *-brtl*)\n\t    aix_use_runtimelinking=yes\n\t    break\n\t    ;;\n\t  esac\n\tdone\n\t;;\n      esac\n\n      exp_sym_flag='-bexport'\n      no_entry_flag='-bnoentry'\n    fi\n\n    # When large executables or shared objects are built, AIX ld can\n    # have problems creating the table of contents.  If linking a library\n    # or program results in \"error TOC overflow\" add -mminimal-toc to\n    # CXXFLAGS/CFLAGS for g++/gcc.  In the cases where that is not\n    # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.\n\n    archive_cmds_CXX=''\n    hardcode_direct_CXX=yes\n    hardcode_libdir_separator_CXX=':'\n    link_all_deplibs_CXX=yes\n\n    if test \"$GXX\" = yes; then\n      case $host_os in aix4.[012]|aix4.[012].*)\n      # We only want to do this on AIX 4.2 and lower, the check\n      # below for broken collect2 doesn't work under 4.3+\n\tcollect2name=`${CC} -print-prog-name=collect2`\n\tif test -f \"$collect2name\" && \\\n\t   strings \"$collect2name\" | grep resolve_lib_name >/dev/null\n\tthen\n\t  # We have reworked collect2\n\t  hardcode_direct_CXX=yes\n\telse\n\t  # We have old collect2\n\t  hardcode_direct_CXX=unsupported\n\t  # It fails to find uninstalled libraries when the uninstalled\n\t  # path is not listed in the libpath.  Setting hardcode_minus_L\n\t  # to unsupported forces relinking\n\t  hardcode_minus_L_CXX=yes\n\t  hardcode_libdir_flag_spec_CXX='-L$libdir'\n\t  hardcode_libdir_separator_CXX=\n\tfi\n\t;;\n      esac\n      shared_flag='-shared'\n      if test \"$aix_use_runtimelinking\" = yes; then\n\tshared_flag=\"$shared_flag \"'${wl}-G'\n      fi\n    else\n      # not using gcc\n      if test \"$host_cpu\" = ia64; then\n\t# VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release\n\t# chokes on -Wl,-G. The following line is correct:\n\tshared_flag='-G'\n      else\n\tif test \"$aix_use_runtimelinking\" = yes; then\n\t  shared_flag='${wl}-G'\n\telse\n\t  shared_flag='${wl}-bM:SRE'\n\tfi\n      fi\n    fi\n\n    # It seems that -bexpall does not export symbols beginning with\n    # underscore (_), so it is better to generate a list of symbols to export.\n    always_export_symbols_CXX=yes\n    if test \"$aix_use_runtimelinking\" = yes; then\n      # Warning - without using the other runtime loading flags (-brtl),\n      # -berok will link without error, but may produce a broken library.\n      allow_undefined_flag_CXX='-berok'\n      # Determine the default libpath from the value encoded in an empty executable.\n      cat >conftest.$ac_ext <<_ACEOF\n/* confdefs.h.  */\n_ACEOF\ncat confdefs.h >>conftest.$ac_ext\ncat >>conftest.$ac_ext <<_ACEOF\n/* end confdefs.h.  */\n\nint\nmain ()\n{\n\n  ;\n  return 0;\n}\n_ACEOF\nrm -f conftest.$ac_objext conftest$ac_exeext\nif { (eval echo \"$as_me:$LINENO: \\\"$ac_link\\\"\") >&5\n  (eval $ac_link) 2>conftest.er1\n  ac_status=$?\n  grep -v '^ *+' conftest.er1 >conftest.err\n  rm -f conftest.er1\n  cat conftest.err >&5\n  echo \"$as_me:$LINENO: \\$? = $ac_status\" >&5\n  (exit $ac_status); } &&\n\t { ac_try='test -z \"$ac_cxx_werror_flag\"\n\t\t\t || test ! -s conftest.err'\n  { (eval echo \"$as_me:$LINENO: \\\"$ac_try\\\"\") >&5\n  (eval $ac_try) 2>&5\n  ac_status=$?\n  echo \"$as_me:$LINENO: \\$? = $ac_status\" >&5\n  (exit $ac_status); }; } &&\n\t { ac_try='test -s conftest$ac_exeext'\n  { (eval echo \"$as_me:$LINENO: \\\"$ac_try\\\"\") >&5\n  (eval $ac_try) 2>&5\n  ac_status=$?\n  echo \"$as_me:$LINENO: \\$? = $ac_status\" >&5\n  (exit $ac_status); }; }; then\n\naix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0  *\\(.*\\)$/\\1/; p; }\n}'`\n# Check for a 64-bit object if we didn't find anything.\nif test -z \"$aix_libpath\"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0  *\\(.*\\)$/\\1/; p; }\n}'`; fi\nelse\n  echo \"$as_me: failed program was:\" >&5\nsed 's/^/| /' conftest.$ac_ext >&5\n\n\nfi\n\nrm -f conftest.err conftest.$ac_objext \\\n      conftest$ac_exeext conftest.$ac_ext\nif test -z \"$aix_libpath\"; then aix_libpath=\"/usr/lib:/lib\"; fi\n\n      hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'\"$aix_libpath\"\n\n      archive_expsym_cmds_CXX=\"\\$CC\"' -o $output_objdir/$soname $libobjs $deplibs '\"\\${wl}$no_entry_flag\"' $compiler_flags `if test \"x${allow_undefined_flag}\" != \"x\"; then echo \"${wl}${allow_undefined_flag}\"; else :; fi` '\"\\${wl}$exp_sym_flag:\\$export_symbols $shared_flag\"\n     else\n      if test \"$host_cpu\" = ia64; then\n\thardcode_libdir_flag_spec_CXX='${wl}-R $libdir:/usr/lib:/lib'\n\tallow_undefined_flag_CXX=\"-z nodefs\"\n\tarchive_expsym_cmds_CXX=\"\\$CC $shared_flag\"' -o $output_objdir/$soname $libobjs $deplibs '\"\\${wl}$no_entry_flag\"' $compiler_flags ${wl}${allow_undefined_flag} '\"\\${wl}$exp_sym_flag:\\$export_symbols\"\n      else\n\t# Determine the default libpath from the value encoded in an empty executable.\n\tcat >conftest.$ac_ext <<_ACEOF\n/* confdefs.h.  */\n_ACEOF\ncat confdefs.h >>conftest.$ac_ext\ncat >>conftest.$ac_ext <<_ACEOF\n/* end confdefs.h.  */\n\nint\nmain ()\n{\n\n  ;\n  return 0;\n}\n_ACEOF\nrm -f conftest.$ac_objext conftest$ac_exeext\nif { (eval echo \"$as_me:$LINENO: \\\"$ac_link\\\"\") >&5\n  (eval $ac_link) 2>conftest.er1\n  ac_status=$?\n  grep -v '^ *+' conftest.er1 >conftest.err\n  rm -f conftest.er1\n  cat conftest.err >&5\n  echo \"$as_me:$LINENO: \\$? = $ac_status\" >&5\n  (exit $ac_status); } &&\n\t { ac_try='test -z \"$ac_cxx_werror_flag\"\n\t\t\t || test ! -s conftest.err'\n  { (eval echo \"$as_me:$LINENO: \\\"$ac_try\\\"\") >&5\n  (eval $ac_try) 2>&5\n  ac_status=$?\n  echo \"$as_me:$LINENO: \\$? = $ac_status\" >&5\n  (exit $ac_status); }; } &&\n\t { ac_try='test -s conftest$ac_exeext'\n  { (eval echo \"$as_me:$LINENO: \\\"$ac_try\\\"\") >&5\n  (eval $ac_try) 2>&5\n  ac_status=$?\n  echo \"$as_me:$LINENO: \\$? = $ac_status\" >&5\n  (exit $ac_status); }; }; then\n\naix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0  *\\(.*\\)$/\\1/; p; }\n}'`\n# Check for a 64-bit object if we didn't find anything.\nif test -z \"$aix_libpath\"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0  *\\(.*\\)$/\\1/; p; }\n}'`; fi\nelse\n  echo \"$as_me: failed program was:\" >&5\nsed 's/^/| /' conftest.$ac_ext >&5\n\n\nfi\n\nrm -f conftest.err conftest.$ac_objext \\\n      conftest$ac_exeext conftest.$ac_ext\nif test -z \"$aix_libpath\"; then aix_libpath=\"/usr/lib:/lib\"; fi\n\n\thardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'\"$aix_libpath\"\n\t# Warning - without using the other run time loading flags,\n\t# -berok will link without error, but may produce a broken library.\n\tno_undefined_flag_CXX=' ${wl}-bernotok'\n\tallow_undefined_flag_CXX=' ${wl}-berok'\n\t# Exported symbols can be pulled into shared objects from archives\n\twhole_archive_flag_spec_CXX='$convenience'\n\tarchive_cmds_need_lc_CXX=yes\n\t# This is similar to how AIX traditionally builds its shared libraries.\n\tarchive_expsym_cmds_CXX=\"\\$CC $shared_flag\"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'\n      fi\n    fi\n    ;;\n\n  beos*)\n    if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then\n      allow_undefined_flag_CXX=unsupported\n      # Joseph Beckenbach <jrb3@best.com> says some releases of gcc\n      # support --undefined.  This deserves some investigation.  FIXME\n      archive_cmds_CXX='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'\n    else\n      ld_shlibs_CXX=no\n    fi\n    ;;\n\n  chorus*)\n    case $cc_basename in\n      *)\n\t# FIXME: insert proper C++ library support\n\tld_shlibs_CXX=no\n\t;;\n    esac\n    ;;\n\n  cygwin* | mingw* | pw32*)\n    # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, CXX) is actually meaningless,\n    # as there is no search path for DLLs.\n    hardcode_libdir_flag_spec_CXX='-L$libdir'\n    allow_undefined_flag_CXX=unsupported\n    always_export_symbols_CXX=no\n    enable_shared_with_static_runtimes_CXX=yes\n\n    if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then\n      archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'\n      # If the export-symbols file already is a .def file (1st line\n      # is EXPORTS), use it as is; otherwise, prepend...\n      archive_expsym_cmds_CXX='if test \"x`$SED 1q $export_symbols`\" = xEXPORTS; then\n\tcp $export_symbols $output_objdir/$soname.def;\n      else\n\techo EXPORTS > $output_objdir/$soname.def;\n\tcat $export_symbols >> $output_objdir/$soname.def;\n      fi~\n      $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'\n    else\n      ld_shlibs_CXX=no\n    fi\n  ;;\n      darwin* | rhapsody*)\n        case $host_os in\n        rhapsody* | darwin1.[012])\n         allow_undefined_flag_CXX='${wl}-undefined ${wl}suppress'\n         ;;\n       *) # Darwin 1.3 on\n         if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then\n           allow_undefined_flag_CXX='${wl}-flat_namespace ${wl}-undefined ${wl}suppress'\n         else\n           case ${MACOSX_DEPLOYMENT_TARGET} in\n             10.[012])\n               allow_undefined_flag_CXX='${wl}-flat_namespace ${wl}-undefined ${wl}suppress'\n               ;;\n             10.*)\n               allow_undefined_flag_CXX='${wl}-undefined ${wl}dynamic_lookup'\n               ;;\n           esac\n         fi\n         ;;\n        esac\n      archive_cmds_need_lc_CXX=no\n      hardcode_direct_CXX=no\n      hardcode_automatic_CXX=yes\n      hardcode_shlibpath_var_CXX=unsupported\n      whole_archive_flag_spec_CXX=''\n      link_all_deplibs_CXX=yes\n\n    if test \"$GXX\" = yes ; then\n      lt_int_apple_cc_single_mod=no\n      output_verbose_link_cmd='echo'\n      if $CC -dumpspecs 2>&1 | $EGREP 'single_module' >/dev/null ; then\n       lt_int_apple_cc_single_mod=yes\n      fi\n      if test \"X$lt_int_apple_cc_single_mod\" = Xyes ; then\n       archive_cmds_CXX='$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring'\n      else\n          archive_cmds_CXX='$CC -r -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring'\n        fi\n        module_cmds_CXX='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags'\n        # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds\n          if test \"X$lt_int_apple_cc_single_mod\" = Xyes ; then\n            archive_expsym_cmds_CXX='sed -e \"s,#.*,,\" -e \"s,^[    ]*,,\" -e \"s,^\\(..*\\),_&,\" < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'\n          else\n            archive_expsym_cmds_CXX='sed -e \"s,#.*,,\" -e \"s,^[    ]*,,\" -e \"s,^\\(..*\\),_&,\" < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -r -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'\n          fi\n            module_expsym_cmds_CXX='sed -e \"s,#.*,,\" -e \"s,^[    ]*,,\" -e \"s,^\\(..*\\),_&,\" < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag  -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'\n      else\n      case $cc_basename in\n        xlc*)\n         output_verbose_link_cmd='echo'\n          archive_cmds_CXX='$CC -qmkshrobj ${wl}-single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $verstring'\n          module_cmds_CXX='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags'\n          # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds\n          archive_expsym_cmds_CXX='sed -e \"s,#.*,,\" -e \"s,^[    ]*,,\" -e \"s,^\\(..*\\),_&,\" < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj ${wl}-single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'\n          module_expsym_cmds_CXX='sed -e \"s,#.*,,\" -e \"s,^[    ]*,,\" -e \"s,^\\(..*\\),_&,\" < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag  -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'\n          ;;\n       *)\n         ld_shlibs_CXX=no\n          ;;\n      esac\n      fi\n        ;;\n\n  dgux*)\n    case $cc_basename in\n      ec++*)\n\t# FIXME: insert proper C++ library support\n\tld_shlibs_CXX=no\n\t;;\n      ghcx*)\n\t# Green Hills C++ Compiler\n\t# FIXME: insert proper C++ library support\n\tld_shlibs_CXX=no\n\t;;\n      *)\n\t# FIXME: insert proper C++ library support\n\tld_shlibs_CXX=no\n\t;;\n    esac\n    ;;\n  freebsd[12]*)\n    # C++ shared libraries reported to be fairly broken before switch to ELF\n    ld_shlibs_CXX=no\n    ;;\n  freebsd-elf*)\n    archive_cmds_need_lc_CXX=no\n    ;;\n  freebsd* | dragonfly*)\n    # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF\n    # conventions\n    ld_shlibs_CXX=yes\n    ;;\n  gnu*)\n    ;;\n  hpux9*)\n    hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir'\n    hardcode_libdir_separator_CXX=:\n    export_dynamic_flag_spec_CXX='${wl}-E'\n    hardcode_direct_CXX=yes\n    hardcode_minus_L_CXX=yes # Not in the search PATH,\n\t\t\t\t# but as the default\n\t\t\t\t# location of the library.\n\n    case $cc_basename in\n    CC*)\n      # FIXME: insert proper C++ library support\n      ld_shlibs_CXX=no\n      ;;\n    aCC*)\n      archive_cmds_CXX='$rm $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'\n      # Commands to make compiler produce verbose output that lists\n      # what \"hidden\" libraries, object files and flags are used when\n      # linking a shared library.\n      #\n      # There doesn't appear to be a way to prevent this compiler from\n      # explicitly linking system object files so we need to strip them\n      # from the output so that they don't get included in the library\n      # dependencies.\n      output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | grep \"[-]L\"`; list=\"\"; for z in $templist; do case $z in conftest.$objext) list=\"$list $z\";; *.$objext);; *) list=\"$list $z\";;esac; done; echo $list'\n      ;;\n    *)\n      if test \"$GXX\" = yes; then\n        archive_cmds_CXX='$rm $output_objdir/$soname~$CC -shared -nostdlib -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'\n      else\n        # FIXME: insert proper C++ library support\n        ld_shlibs_CXX=no\n      fi\n      ;;\n    esac\n    ;;\n  hpux10*|hpux11*)\n    if test $with_gnu_ld = no; then\n      hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir'\n      hardcode_libdir_separator_CXX=:\n\n      case $host_cpu in\n      hppa*64*|ia64*)\n\thardcode_libdir_flag_spec_ld_CXX='+b $libdir'\n        ;;\n      *)\n\texport_dynamic_flag_spec_CXX='${wl}-E'\n        ;;\n      esac\n    fi\n    case $host_cpu in\n    hppa*64*|ia64*)\n      hardcode_direct_CXX=no\n      hardcode_shlibpath_var_CXX=no\n      ;;\n    *)\n      hardcode_direct_CXX=yes\n      hardcode_minus_L_CXX=yes # Not in the search PATH,\n\t\t\t\t\t      # but as the default\n\t\t\t\t\t      # location of the library.\n      ;;\n    esac\n\n    case $cc_basename in\n      CC*)\n\t# FIXME: insert proper C++ library support\n\tld_shlibs_CXX=no\n\t;;\n      aCC*)\n\tcase $host_cpu in\n\thppa*64*)\n\t  archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'\n\t  ;;\n\tia64*)\n\t  archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'\n\t  ;;\n\t*)\n\t  archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'\n\t  ;;\n\tesac\n\t# Commands to make compiler produce verbose output that lists\n\t# what \"hidden\" libraries, object files and flags are used when\n\t# linking a shared library.\n\t#\n\t# There doesn't appear to be a way to prevent this compiler from\n\t# explicitly linking system object files so we need to strip them\n\t# from the output so that they don't get included in the library\n\t# dependencies.\n\toutput_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | grep \"\\-L\"`; list=\"\"; for z in $templist; do case $z in conftest.$objext) list=\"$list $z\";; *.$objext);; *) list=\"$list $z\";;esac; done; echo $list'\n\t;;\n      *)\n\tif test \"$GXX\" = yes; then\n\t  if test $with_gnu_ld = no; then\n\t    case $host_cpu in\n\t    hppa*64*)\n\t      archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'\n\t      ;;\n\t    ia64*)\n\t      archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'\n\t      ;;\n\t    *)\n\t      archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'\n\t      ;;\n\t    esac\n\t  fi\n\telse\n\t  # FIXME: insert proper C++ library support\n\t  ld_shlibs_CXX=no\n\tfi\n\t;;\n    esac\n    ;;\n  interix3*)\n    hardcode_direct_CXX=no\n    hardcode_shlibpath_var_CXX=no\n    hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir'\n    export_dynamic_flag_spec_CXX='${wl}-E'\n    # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.\n    # Instead, shared libraries are loaded at an image base (0x10000000 by\n    # default) and relocated if they conflict, which is a slow very memory\n    # consuming and fragmenting process.  To avoid this, we pick a random,\n    # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link\n    # time.  Moving up from 0x10000000 also allows more sbrk(2) space.\n    archive_cmds_CXX='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \\* 262144 + 1342177280` -o $lib'\n    archive_expsym_cmds_CXX='sed \"s,^,_,\" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \\* 262144 + 1342177280` -o $lib'\n    ;;\n  irix5* | irix6*)\n    case $cc_basename in\n      CC*)\n\t# SGI C++\n\tarchive_cmds_CXX='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n \"$verstring\" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'\n\n\t# Archives containing C++ object files must be created using\n\t# \"CC -ar\", where \"CC\" is the IRIX C++ compiler.  This is\n\t# necessary to make sure instantiated templates are included\n\t# in the archive.\n\told_archive_cmds_CXX='$CC -ar -WR,-u -o $oldlib $oldobjs'\n\t;;\n      *)\n\tif test \"$GXX\" = yes; then\n\t  if test \"$with_gnu_ld\" = no; then\n\t    archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n \"$verstring\" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'\n\t  else\n\t    archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n \"$verstring\" && echo ${wl}-set_version ${wl}$verstring` -o $lib'\n\t  fi\n\tfi\n\tlink_all_deplibs_CXX=yes\n\t;;\n    esac\n    hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir'\n    hardcode_libdir_separator_CXX=:\n    ;;\n  linux* | k*bsd*-gnu)\n    case $cc_basename in\n      KCC*)\n\t# Kuck and Associates, Inc. (KAI) C++ Compiler\n\n\t# KCC will only create a shared library if the output file\n\t# ends with \".so\" (or \".sl\" for HP-UX), so rename the library\n\t# to its proper name (with version) after linking.\n\tarchive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\\''s/\\([^()0-9A-Za-z{}]\\)/\\\\\\\\\\1/g'\\''`; templib=`echo $lib | $SED -e \"s/\\${tempext}\\..*/.so/\"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \\$templib; mv \\$templib $lib'\n\tarchive_expsym_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\\''s/\\([^()0-9A-Za-z{}]\\)/\\\\\\\\\\1/g'\\''`; templib=`echo $lib | $SED -e \"s/\\${tempext}\\..*/.so/\"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \\$templib ${wl}-retain-symbols-file,$export_symbols; mv \\$templib $lib'\n\t# Commands to make compiler produce verbose output that lists\n\t# what \"hidden\" libraries, object files and flags are used when\n\t# linking a shared library.\n\t#\n\t# There doesn't appear to be a way to prevent this compiler from\n\t# explicitly linking system object files so we need to strip them\n\t# from the output so that they don't get included in the library\n\t# dependencies.\n\toutput_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | grep \"ld\"`; rm -f libconftest$shared_ext; list=\"\"; for z in $templist; do case $z in conftest.$objext) list=\"$list $z\";; *.$objext);; *) list=\"$list $z\";;esac; done; echo $list'\n\n\thardcode_libdir_flag_spec_CXX='${wl}--rpath,$libdir'\n\texport_dynamic_flag_spec_CXX='${wl}--export-dynamic'\n\n\t# Archives containing C++ object files must be created using\n\t# \"CC -Bstatic\", where \"CC\" is the KAI C++ compiler.\n\told_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs'\n\t;;\n      icpc*)\n\t# Intel C++\n\twith_gnu_ld=yes\n\t# version 8.0 and above of icpc choke on multiply defined symbols\n\t# if we add $predep_objects and $postdep_objects, however 7.1 and\n\t# earlier do not add the objects themselves.\n\tcase `$CC -V 2>&1` in\n\t*\"Version 7.\"*)\n  \t  archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'\n  \t  archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'\n\t  ;;\n\t*)  # Version 8.0 or newer\n\t  tmp_idyn=\n\t  case $host_cpu in\n\t    ia64*) tmp_idyn=' -i_dynamic';;\n\t  esac\n  \t  archive_cmds_CXX='$CC -shared'\"$tmp_idyn\"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'\n\t  archive_expsym_cmds_CXX='$CC -shared'\"$tmp_idyn\"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'\n\t  ;;\n\tesac\n\tarchive_cmds_need_lc_CXX=no\n\thardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir'\n\texport_dynamic_flag_spec_CXX='${wl}--export-dynamic'\n\twhole_archive_flag_spec_CXX='${wl}--whole-archive$convenience ${wl}--no-whole-archive'\n\t;;\n      pgCC*)\n        # Portland Group C++ compiler\n\tarchive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib'\n  \tarchive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib'\n\n\thardcode_libdir_flag_spec_CXX='${wl}--rpath ${wl}$libdir'\n\texport_dynamic_flag_spec_CXX='${wl}--export-dynamic'\n\twhole_archive_flag_spec_CXX='${wl}--whole-archive`for conv in $convenience\\\"\\\"; do test  -n \\\"$conv\\\" && new_convenience=\\\"$new_convenience,$conv\\\"; done; $echo \\\"$new_convenience\\\"` ${wl}--no-whole-archive'\n        ;;\n      cxx*)\n\t# Compaq C++\n\tarchive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'\n\tarchive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname  -o $lib ${wl}-retain-symbols-file $wl$export_symbols'\n\n\trunpath_var=LD_RUN_PATH\n\thardcode_libdir_flag_spec_CXX='-rpath $libdir'\n\thardcode_libdir_separator_CXX=:\n\n\t# Commands to make compiler produce verbose output that lists\n\t# what \"hidden\" libraries, object files and flags are used when\n\t# linking a shared library.\n\t#\n\t# There doesn't appear to be a way to prevent this compiler from\n\t# explicitly linking system object files so we need to strip them\n\t# from the output so that they don't get included in the library\n\t# dependencies.\n\toutput_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep \"ld\"`; templist=`echo $templist | $SED \"s/\\(^.*ld.*\\)\\( .*ld .*$\\)/\\1/\"`; list=\"\"; for z in $templist; do case $z in conftest.$objext) list=\"$list $z\";; *.$objext);; *) list=\"$list $z\";;esac; done; echo $list'\n\t;;\n    esac\n    ;;\n  lynxos*)\n    # FIXME: insert proper C++ library support\n    ld_shlibs_CXX=no\n    ;;\n  m88k*)\n    # FIXME: insert proper C++ library support\n    ld_shlibs_CXX=no\n    ;;\n  mvs*)\n    case $cc_basename in\n      cxx*)\n\t# FIXME: insert proper C++ library support\n\tld_shlibs_CXX=no\n\t;;\n      *)\n\t# FIXME: insert proper C++ library support\n\tld_shlibs_CXX=no\n\t;;\n    esac\n    ;;\n  netbsd* | netbsdelf*-gnu)\n    if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then\n      archive_cmds_CXX='$LD -Bshareable  -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags'\n      wlarc=\n      hardcode_libdir_flag_spec_CXX='-R$libdir'\n      hardcode_direct_CXX=yes\n      hardcode_shlibpath_var_CXX=no\n    fi\n    # Workaround some broken pre-1.5 toolchains\n    output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep conftest.$objext | $SED -e \"s:-lgcc -lc -lgcc::\"'\n    ;;\n  openbsd2*)\n    # C++ shared libraries are fairly broken\n    ld_shlibs_CXX=no\n    ;;\n  openbsd*)\n    hardcode_direct_CXX=yes\n    hardcode_shlibpath_var_CXX=no\n    archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'\n    hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir'\n    if test -z \"`echo __ELF__ | $CC -E - | grep __ELF__`\" || test \"$host_os-$host_cpu\" = \"openbsd2.8-powerpc\"; then\n      archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib'\n      export_dynamic_flag_spec_CXX='${wl}-E'\n      whole_archive_flag_spec_CXX=\"$wlarc\"'--whole-archive$convenience '\"$wlarc\"'--no-whole-archive'\n    fi\n    output_verbose_link_cmd='echo'\n    ;;\n  osf3*)\n    case $cc_basename in\n      KCC*)\n\t# Kuck and Associates, Inc. (KAI) C++ Compiler\n\n\t# KCC will only create a shared library if the output file\n\t# ends with \".so\" (or \".sl\" for HP-UX), so rename the library\n\t# to its proper name (with version) after linking.\n\tarchive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\\''s/\\([^()0-9A-Za-z{}]\\)/\\\\\\\\\\1/g'\\''`; templib=`echo $lib | $SED -e \"s/\\${tempext}\\..*/.so/\"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \\$templib; mv \\$templib $lib'\n\n\thardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir'\n\thardcode_libdir_separator_CXX=:\n\n\t# Archives containing C++ object files must be created using\n\t# \"CC -Bstatic\", where \"CC\" is the KAI C++ compiler.\n\told_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs'\n\n\t;;\n      RCC*)\n\t# Rational C++ 2.4.1\n\t# FIXME: insert proper C++ library support\n\tld_shlibs_CXX=no\n\t;;\n      cxx*)\n\tallow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\\*'\n\tarchive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n \"$verstring\" && echo ${wl}-set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'\n\n\thardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir'\n\thardcode_libdir_separator_CXX=:\n\n\t# Commands to make compiler produce verbose output that lists\n\t# what \"hidden\" libraries, object files and flags are used when\n\t# linking a shared library.\n\t#\n\t# There doesn't appear to be a way to prevent this compiler from\n\t# explicitly linking system object files so we need to strip them\n\t# from the output so that they don't get included in the library\n\t# dependencies.\n\toutput_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep \"ld\" | grep -v \"ld:\"`; templist=`echo $templist | $SED \"s/\\(^.*ld.*\\)\\( .*ld.*$\\)/\\1/\"`; list=\"\"; for z in $templist; do case $z in conftest.$objext) list=\"$list $z\";; *.$objext);; *) list=\"$list $z\";;esac; done; echo $list'\n\t;;\n      *)\n\tif test \"$GXX\" = yes && test \"$with_gnu_ld\" = no; then\n\t  allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\\*'\n\t  archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n \"$verstring\" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'\n\n\t  hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir'\n\t  hardcode_libdir_separator_CXX=:\n\n\t  # Commands to make compiler produce verbose output that lists\n\t  # what \"hidden\" libraries, object files and flags are used when\n\t  # linking a shared library.\n\t  output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep \"\\-L\"'\n\n\telse\n\t  # FIXME: insert proper C++ library support\n\t  ld_shlibs_CXX=no\n\tfi\n\t;;\n    esac\n    ;;\n  osf4* | osf5*)\n    case $cc_basename in\n      KCC*)\n\t# Kuck and Associates, Inc. (KAI) C++ Compiler\n\n\t# KCC will only create a shared library if the output file\n\t# ends with \".so\" (or \".sl\" for HP-UX), so rename the library\n\t# to its proper name (with version) after linking.\n\tarchive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\\''s/\\([^()0-9A-Za-z{}]\\)/\\\\\\\\\\1/g'\\''`; templib=`echo $lib | $SED -e \"s/\\${tempext}\\..*/.so/\"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \\$templib; mv \\$templib $lib'\n\n\thardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir'\n\thardcode_libdir_separator_CXX=:\n\n\t# Archives containing C++ object files must be created using\n\t# the KAI C++ compiler.\n\told_archive_cmds_CXX='$CC -o $oldlib $oldobjs'\n\t;;\n      RCC*)\n\t# Rational C++ 2.4.1\n\t# FIXME: insert proper C++ library support\n\tld_shlibs_CXX=no\n\t;;\n      cxx*)\n\tallow_undefined_flag_CXX=' -expect_unresolved \\*'\n\tarchive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n \"$verstring\" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'\n\tarchive_expsym_cmds_CXX='for i in `cat $export_symbols`; do printf \"%s %s\\\\n\" -exported_symbol \"\\$i\" >> $lib.exp; done~\n\t  echo \"-hidden\">> $lib.exp~\n\t  $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname -Wl,-input -Wl,$lib.exp  `test -n \"$verstring\" && echo -set_version\t$verstring` -update_registry ${output_objdir}/so_locations -o $lib~\n\t  $rm $lib.exp'\n\n\thardcode_libdir_flag_spec_CXX='-rpath $libdir'\n\thardcode_libdir_separator_CXX=:\n\n\t# Commands to make compiler produce verbose output that lists\n\t# what \"hidden\" libraries, object files and flags are used when\n\t# linking a shared library.\n\t#\n\t# There doesn't appear to be a way to prevent this compiler from\n\t# explicitly linking system object files so we need to strip them\n\t# from the output so that they don't get included in the library\n\t# dependencies.\n\toutput_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep \"ld\" | grep -v \"ld:\"`; templist=`echo $templist | $SED \"s/\\(^.*ld.*\\)\\( .*ld.*$\\)/\\1/\"`; list=\"\"; for z in $templist; do case $z in conftest.$objext) list=\"$list $z\";; *.$objext);; *) list=\"$list $z\";;esac; done; echo $list'\n\t;;\n      *)\n\tif test \"$GXX\" = yes && test \"$with_gnu_ld\" = no; then\n\t  allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\\*'\n\t archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n \"$verstring\" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'\n\n\t  hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir'\n\t  hardcode_libdir_separator_CXX=:\n\n\t  # Commands to make compiler produce verbose output that lists\n\t  # what \"hidden\" libraries, object files and flags are used when\n\t  # linking a shared library.\n\t  output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep \"\\-L\"'\n\n\telse\n\t  # FIXME: insert proper C++ library support\n\t  ld_shlibs_CXX=no\n\tfi\n\t;;\n    esac\n    ;;\n  psos*)\n    # FIXME: insert proper C++ library support\n    ld_shlibs_CXX=no\n    ;;\n  sunos4*)\n    case $cc_basename in\n      CC*)\n\t# Sun C++ 4.x\n\t# FIXME: insert proper C++ library support\n\tld_shlibs_CXX=no\n\t;;\n      lcc*)\n\t# Lucid\n\t# FIXME: insert proper C++ library support\n\tld_shlibs_CXX=no\n\t;;\n      *)\n\t# FIXME: insert proper C++ library support\n\tld_shlibs_CXX=no\n\t;;\n    esac\n    ;;\n  solaris*)\n    case $cc_basename in\n      CC*)\n\t# Sun C++ 4.2, 5.x and Centerline C++\n        archive_cmds_need_lc_CXX=yes\n\tno_undefined_flag_CXX=' -zdefs'\n\tarchive_cmds_CXX='$CC -G${allow_undefined_flag}  -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'\n\tarchive_expsym_cmds_CXX='$echo \"{ global:\" > $lib.exp~cat $export_symbols | $SED -e \"s/\\(.*\\)/\\1;/\" >> $lib.exp~$echo \"local: *; };\" >> $lib.exp~\n\t$CC -G${allow_undefined_flag}  ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp'\n\n\thardcode_libdir_flag_spec_CXX='-R$libdir'\n\thardcode_shlibpath_var_CXX=no\n\tcase $host_os in\n\t  solaris2.[0-5] | solaris2.[0-5].*) ;;\n\t  *)\n\t    # The C++ compiler is used as linker so we must use $wl\n\t    # flag to pass the commands to the underlying system\n\t    # linker. We must also pass each convience library through\n\t    # to the system linker between allextract/defaultextract.\n\t    # The C++ compiler will combine linker options so we\n\t    # cannot just pass the convience library names through\n\t    # without $wl.\n\t    # Supported since Solaris 2.6 (maybe 2.5.1?)\n\t    whole_archive_flag_spec_CXX='${wl}-z ${wl}allextract`for conv in $convenience\\\"\\\"; do test -n \\\"$conv\\\" && new_convenience=\\\"$new_convenience,$conv\\\"; done; $echo \\\"$new_convenience\\\"` ${wl}-z ${wl}defaultextract'\n\t    ;;\n\tesac\n\tlink_all_deplibs_CXX=yes\n\n\toutput_verbose_link_cmd='echo'\n\n\t# Archives containing C++ object files must be created using\n\t# \"CC -xar\", where \"CC\" is the Sun C++ compiler.  This is\n\t# necessary to make sure instantiated templates are included\n\t# in the archive.\n\told_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs'\n\t;;\n      gcx*)\n\t# Green Hills C++ Compiler\n\tarchive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'\n\n\t# The C++ compiler must be used to create the archive.\n\told_archive_cmds_CXX='$CC $LDFLAGS -archive -o $oldlib $oldobjs'\n\t;;\n      *)\n\t# GNU C++ compiler with Solaris linker\n\tif test \"$GXX\" = yes && test \"$with_gnu_ld\" = no; then\n\t  no_undefined_flag_CXX=' ${wl}-z ${wl}defs'\n\t  if $CC --version | grep -v '^2\\.7' > /dev/null; then\n\t    archive_cmds_CXX='$CC -shared -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'\n\t    archive_expsym_cmds_CXX='$echo \"{ global:\" > $lib.exp~cat $export_symbols | $SED -e \"s/\\(.*\\)/\\1;/\" >> $lib.exp~$echo \"local: *; };\" >> $lib.exp~\n\t\t$CC -shared -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp'\n\n\t    # Commands to make compiler produce verbose output that lists\n\t    # what \"hidden\" libraries, object files and flags are used when\n\t    # linking a shared library.\n\t    output_verbose_link_cmd=\"$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep \\\"\\-L\\\"\"\n\t  else\n\t    # g++ 2.7 appears to require `-G' NOT `-shared' on this\n\t    # platform.\n\t    archive_cmds_CXX='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'\n\t    archive_expsym_cmds_CXX='$echo \"{ global:\" > $lib.exp~cat $export_symbols | $SED -e \"s/\\(.*\\)/\\1;/\" >> $lib.exp~$echo \"local: *; };\" >> $lib.exp~\n\t\t$CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp'\n\n\t    # Commands to make compiler produce verbose output that lists\n\t    # what \"hidden\" libraries, object files and flags are used when\n\t    # linking a shared library.\n\t    output_verbose_link_cmd=\"$CC -G $CFLAGS -v conftest.$objext 2>&1 | grep \\\"\\-L\\\"\"\n\t  fi\n\n\t  hardcode_libdir_flag_spec_CXX='${wl}-R $wl$libdir'\n\tfi\n\t;;\n    esac\n    ;;\n  sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*)\n    no_undefined_flag_CXX='${wl}-z,text'\n    archive_cmds_need_lc_CXX=no\n    hardcode_shlibpath_var_CXX=no\n    runpath_var='LD_RUN_PATH'\n\n    case $cc_basename in\n      CC*)\n\tarchive_cmds_CXX='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'\n\tarchive_expsym_cmds_CXX='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'\n\t;;\n      *)\n\tarchive_cmds_CXX='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'\n\tarchive_expsym_cmds_CXX='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'\n\t;;\n    esac\n    ;;\n  sysv5* | sco3.2v5* | sco5v6*)\n    # Note: We can NOT use -z defs as we might desire, because we do not\n    # link with -lc, and that would cause any symbols used from libc to\n    # always be unresolved, which means just about no library would\n    # ever link correctly.  If we're not using GNU ld we use -z text\n    # though, which does catch some bad symbols but isn't as heavy-handed\n    # as -z defs.\n    # For security reasons, it is highly recommended that you always\n    # use absolute paths for naming shared libraries, and exclude the\n    # DT_RUNPATH tag from executables and libraries.  But doing so\n    # requires that you compile everything twice, which is a pain.\n    # So that behaviour is only enabled if SCOABSPATH is set to a\n    # non-empty value in the environment.  Most likely only useful for\n    # creating official distributions of packages.\n    # This is a hack until libtool officially supports absolute path\n    # names for shared libraries.\n    no_undefined_flag_CXX='${wl}-z,text'\n    allow_undefined_flag_CXX='${wl}-z,nodefs'\n    archive_cmds_need_lc_CXX=no\n    hardcode_shlibpath_var_CXX=no\n    hardcode_libdir_flag_spec_CXX='`test -z \"$SCOABSPATH\" && echo ${wl}-R,$libdir`'\n    hardcode_libdir_separator_CXX=':'\n    link_all_deplibs_CXX=yes\n    export_dynamic_flag_spec_CXX='${wl}-Bexport'\n    runpath_var='LD_RUN_PATH'\n\n    case $cc_basename in\n      CC*)\n\tarchive_cmds_CXX='$CC -G ${wl}-h,\\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'\n\tarchive_expsym_cmds_CXX='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,\\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'\n\t;;\n      *)\n\tarchive_cmds_CXX='$CC -shared ${wl}-h,\\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'\n\tarchive_expsym_cmds_CXX='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,\\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'\n\t;;\n    esac\n    ;;\n  tandem*)\n    case $cc_basename in\n      NCC*)\n\t# NonStop-UX NCC 3.20\n\t# FIXME: insert proper C++ library support\n\tld_shlibs_CXX=no\n\t;;\n      *)\n\t# FIXME: insert proper C++ library support\n\tld_shlibs_CXX=no\n\t;;\n    esac\n    ;;\n  vxworks*)\n    # FIXME: insert proper C++ library support\n    ld_shlibs_CXX=no\n    ;;\n  *)\n    # FIXME: insert proper C++ library support\n    ld_shlibs_CXX=no\n    ;;\nesac\n{ echo \"$as_me:$LINENO: result: $ld_shlibs_CXX\" >&5\necho \"${ECHO_T}$ld_shlibs_CXX\" >&6; }\ntest \"$ld_shlibs_CXX\" = no && can_build_shared=no\n\nGCC_CXX=\"$GXX\"\nLD_CXX=\"$LD\"\n\n\ncat > conftest.$ac_ext <<EOF\nclass Foo\n{\npublic:\n  Foo (void) { a = 0; }\nprivate:\n  int a;\n};\nEOF\n\nif { (eval echo \"$as_me:$LINENO: \\\"$ac_compile\\\"\") >&5\n  (eval $ac_compile) 2>&5\n  ac_status=$?\n  echo \"$as_me:$LINENO: \\$? = $ac_status\" >&5\n  (exit $ac_status); }; then\n  # Parse the compiler output and extract the necessary\n  # objects, libraries and library flags.\n\n  # Sentinel used to keep track of whether or not we are before\n  # the conftest object file.\n  pre_test_object_deps_done=no\n\n  # The `*' in the case matches for architectures that use `case' in\n  # $output_verbose_cmd can trigger glob expansion during the loop\n  # eval without this substitution.\n  output_verbose_link_cmd=`$echo \"X$output_verbose_link_cmd\" | $Xsed -e \"$no_glob_subst\"`\n\n  for p in `eval $output_verbose_link_cmd`; do\n    case $p in\n\n    -L* | -R* | -l*)\n       # Some compilers place space between \"-{L,R}\" and the path.\n       # Remove the space.\n       if test $p = \"-L\" \\\n\t  || test $p = \"-R\"; then\n\t prev=$p\n\t continue\n       else\n\t prev=\n       fi\n\n       if test \"$pre_test_object_deps_done\" = no; then\n\t case $p in\n\t -L* | -R*)\n\t   # Internal compiler library paths should come after those\n\t   # provided the user.  The postdeps already come after the\n\t   # user supplied libs so there is no need to process them.\n\t   if test -z \"$compiler_lib_search_path_CXX\"; then\n\t     compiler_lib_search_path_CXX=\"${prev}${p}\"\n\t   else\n\t     compiler_lib_search_path_CXX=\"${compiler_lib_search_path_CXX} ${prev}${p}\"\n\t   fi\n\t   ;;\n\t # The \"-l\" case would never come before the object being\n\t # linked, so don't bother handling this case.\n\t esac\n       else\n\t if test -z \"$postdeps_CXX\"; then\n\t   postdeps_CXX=\"${prev}${p}\"\n\t else\n\t   postdeps_CXX=\"${postdeps_CXX} ${prev}${p}\"\n\t fi\n       fi\n       ;;\n\n    *.$objext)\n       # This assumes that the test object file only shows up\n       # once in the compiler output.\n       if test \"$p\" = \"conftest.$objext\"; then\n\t pre_test_object_deps_done=yes\n\t continue\n       fi\n\n       if test \"$pre_test_object_deps_done\" = no; then\n\t if test -z \"$predep_objects_CXX\"; then\n\t   predep_objects_CXX=\"$p\"\n\t else\n\t   predep_objects_CXX=\"$predep_objects_CXX $p\"\n\t fi\n       else\n\t if test -z \"$postdep_objects_CXX\"; then\n\t   postdep_objects_CXX=\"$p\"\n\t else\n\t   postdep_objects_CXX=\"$postdep_objects_CXX $p\"\n\t fi\n       fi\n       ;;\n\n    *) ;; # Ignore the rest.\n\n    esac\n  done\n\n  # Clean up.\n  rm -f a.out a.exe\nelse\n  echo \"libtool.m4: error: problem compiling CXX test program\"\nfi\n\n$rm -f confest.$objext\n\n# PORTME: override above test on systems where it is broken\ncase $host_os in\ninterix3*)\n  # Interix 3.5 installs completely hosed .la files for C++, so rather than\n  # hack all around it, let's just trust \"g++\" to DTRT.\n  predep_objects_CXX=\n  postdep_objects_CXX=\n  postdeps_CXX=\n  ;;\n\nsolaris*)\n  case $cc_basename in\n  CC*)\n    # Adding this requires a known-good setup of shared libraries for\n    # Sun compiler versions before 5.6, else PIC objects from an old\n    # archive will be linked into the output, leading to subtle bugs.\n    postdeps_CXX='-lCstd -lCrun'\n    ;;\n  esac\n  ;;\nesac\n\n\ncase \" $postdeps_CXX \" in\n*\" -lc \"*) archive_cmds_need_lc_CXX=no ;;\nesac\n\nlt_prog_compiler_wl_CXX=\nlt_prog_compiler_pic_CXX=\nlt_prog_compiler_static_CXX=\n\n{ echo \"$as_me:$LINENO: checking for $compiler option to produce PIC\" >&5\necho $ECHO_N \"checking for $compiler option to produce PIC... $ECHO_C\" >&6; }\n\n  # C++ specific cases for pic, static, wl, etc.\n  if test \"$GXX\" = yes; then\n    lt_prog_compiler_wl_CXX='-Wl,'\n    lt_prog_compiler_static_CXX='-static'\n\n    case $host_os in\n    aix*)\n      # All AIX code is PIC.\n      if test \"$host_cpu\" = ia64; then\n\t# AIX 5 now supports IA64 processor\n\tlt_prog_compiler_static_CXX='-Bstatic'\n      fi\n      ;;\n    amigaos*)\n      # FIXME: we need at least 68020 code to build shared libraries, but\n      # adding the `-m68020' flag to GCC prevents building anything better,\n      # like `-m68040'.\n      lt_prog_compiler_pic_CXX='-m68020 -resident32 -malways-restore-a4'\n      ;;\n    beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)\n      # PIC is the default for these OSes.\n      ;;\n    mingw* | os2* | pw32*)\n      # This hack is so that the source file can tell whether it is being\n      # built for inclusion in a dll (and should export symbols for example).\n      lt_prog_compiler_pic_CXX='-DDLL_EXPORT'\n      ;;\n    darwin* | rhapsody*)\n      # PIC is the default on this platform\n      # Common symbols not allowed in MH_DYLIB files\n      lt_prog_compiler_pic_CXX='-fno-common'\n      ;;\n    *djgpp*)\n      # DJGPP does not support shared libraries at all\n      lt_prog_compiler_pic_CXX=\n      ;;\n    interix3*)\n      # Interix 3.x gcc -fpic/-fPIC options generate broken code.\n      # Instead, we relocate shared libraries at runtime.\n      ;;\n    sysv4*MP*)\n      if test -d /usr/nec; then\n\tlt_prog_compiler_pic_CXX=-Kconform_pic\n      fi\n      ;;\n    hpux*)\n      # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but\n      # not for PA HP-UX.\n      case $host_cpu in\n      hppa*64*|ia64*)\n\t;;\n      *)\n\tlt_prog_compiler_pic_CXX='-fPIC'\n\t;;\n      esac\n      ;;\n    *)\n      lt_prog_compiler_pic_CXX='-fPIC'\n      ;;\n    esac\n  else\n    case $host_os in\n      aix4* | aix5*)\n\t# All AIX code is PIC.\n\tif test \"$host_cpu\" = ia64; then\n\t  # AIX 5 now supports IA64 processor\n\t  lt_prog_compiler_static_CXX='-Bstatic'\n\telse\n\t  lt_prog_compiler_static_CXX='-bnso -bI:/lib/syscalls.exp'\n\tfi\n\t;;\n      chorus*)\n\tcase $cc_basename in\n\tcxch68*)\n\t  # Green Hills C++ Compiler\n\t  # _LT_AC_TAGVAR(lt_prog_compiler_static, CXX)=\"--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a\"\n\t  ;;\n\tesac\n\t;;\n       darwin*)\n         # PIC is the default on this platform\n         # Common symbols not allowed in MH_DYLIB files\n         case $cc_basename in\n           xlc*)\n           lt_prog_compiler_pic_CXX='-qnocommon'\n           lt_prog_compiler_wl_CXX='-Wl,'\n           ;;\n         esac\n       ;;\n      dgux*)\n\tcase $cc_basename in\n\t  ec++*)\n\t    lt_prog_compiler_pic_CXX='-KPIC'\n\t    ;;\n\t  ghcx*)\n\t    # Green Hills C++ Compiler\n\t    lt_prog_compiler_pic_CXX='-pic'\n\t    ;;\n\t  *)\n\t    ;;\n\tesac\n\t;;\n      freebsd* | dragonfly*)\n\t# FreeBSD uses GNU C++\n\t;;\n      hpux9* | hpux10* | hpux11*)\n\tcase $cc_basename in\n\t  CC*)\n\t    lt_prog_compiler_wl_CXX='-Wl,'\n\t    lt_prog_compiler_static_CXX='${wl}-a ${wl}archive'\n\t    if test \"$host_cpu\" != ia64; then\n\t      lt_prog_compiler_pic_CXX='+Z'\n\t    fi\n\t    ;;\n\t  aCC*)\n\t    lt_prog_compiler_wl_CXX='-Wl,'\n\t    lt_prog_compiler_static_CXX='${wl}-a ${wl}archive'\n\t    case $host_cpu in\n\t    hppa*64*|ia64*)\n\t      # +Z the default\n\t      ;;\n\t    *)\n\t      lt_prog_compiler_pic_CXX='+Z'\n\t      ;;\n\t    esac\n\t    ;;\n\t  *)\n\t    ;;\n\tesac\n\t;;\n      interix*)\n\t# This is c89, which is MS Visual C++ (no shared libs)\n\t# Anyone wants to do a port?\n\t;;\n      irix5* | irix6* | nonstopux*)\n\tcase $cc_basename in\n\t  CC*)\n\t    lt_prog_compiler_wl_CXX='-Wl,'\n\t    lt_prog_compiler_static_CXX='-non_shared'\n\t    # CC pic flag -KPIC is the default.\n\t    ;;\n\t  *)\n\t    ;;\n\tesac\n\t;;\n      linux* | k*bsd*-gnu)\n\tcase $cc_basename in\n\t  KCC*)\n\t    # KAI C++ Compiler\n\t    lt_prog_compiler_wl_CXX='--backend -Wl,'\n\t    lt_prog_compiler_pic_CXX='-fPIC'\n\t    ;;\n\t  icpc* | ecpc*)\n\t    # Intel C++\n\t    lt_prog_compiler_wl_CXX='-Wl,'\n\t    lt_prog_compiler_pic_CXX='-KPIC'\n\t    lt_prog_compiler_static_CXX='-static'\n\t    ;;\n\t  pgCC*)\n\t    # Portland Group C++ compiler.\n\t    lt_prog_compiler_wl_CXX='-Wl,'\n\t    lt_prog_compiler_pic_CXX='-fpic'\n\t    lt_prog_compiler_static_CXX='-Bstatic'\n\t    ;;\n\t  cxx*)\n\t    # Compaq C++\n\t    # Make sure the PIC flag is empty.  It appears that all Alpha\n\t    # Linux and Compaq Tru64 Unix objects are PIC.\n\t    lt_prog_compiler_pic_CXX=\n\t    lt_prog_compiler_static_CXX='-non_shared'\n\t    ;;\n\t  *)\n\t    ;;\n\tesac\n\t;;\n      lynxos*)\n\t;;\n      m88k*)\n\t;;\n      mvs*)\n\tcase $cc_basename in\n\t  cxx*)\n\t    lt_prog_compiler_pic_CXX='-W c,exportall'\n\t    ;;\n\t  *)\n\t    ;;\n\tesac\n\t;;\n      netbsd* | netbsdelf*-gnu)\n\t;;\n      osf3* | osf4* | osf5*)\n\tcase $cc_basename in\n\t  KCC*)\n\t    lt_prog_compiler_wl_CXX='--backend -Wl,'\n\t    ;;\n\t  RCC*)\n\t    # Rational C++ 2.4.1\n\t    lt_prog_compiler_pic_CXX='-pic'\n\t    ;;\n\t  cxx*)\n\t    # Digital/Compaq C++\n\t    lt_prog_compiler_wl_CXX='-Wl,'\n\t    # Make sure the PIC flag is empty.  It appears that all Alpha\n\t    # Linux and Compaq Tru64 Unix objects are PIC.\n\t    lt_prog_compiler_pic_CXX=\n\t    lt_prog_compiler_static_CXX='-non_shared'\n\t    ;;\n\t  *)\n\t    ;;\n\tesac\n\t;;\n      psos*)\n\t;;\n      solaris*)\n\tcase $cc_basename in\n\t  CC*)\n\t    # Sun C++ 4.2, 5.x and Centerline C++\n\t    lt_prog_compiler_pic_CXX='-KPIC'\n\t    lt_prog_compiler_static_CXX='-Bstatic'\n\t    lt_prog_compiler_wl_CXX='-Qoption ld '\n\t    ;;\n\t  gcx*)\n\t    # Green Hills C++ Compiler\n\t    lt_prog_compiler_pic_CXX='-PIC'\n\t    ;;\n\t  *)\n\t    ;;\n\tesac\n\t;;\n      sunos4*)\n\tcase $cc_basename in\n\t  CC*)\n\t    # Sun C++ 4.x\n\t    lt_prog_compiler_pic_CXX='-pic'\n\t    lt_prog_compiler_static_CXX='-Bstatic'\n\t    ;;\n\t  lcc*)\n\t    # Lucid\n\t    lt_prog_compiler_pic_CXX='-pic'\n\t    ;;\n\t  *)\n\t    ;;\n\tesac\n\t;;\n      tandem*)\n\tcase $cc_basename in\n\t  NCC*)\n\t    # NonStop-UX NCC 3.20\n\t    lt_prog_compiler_pic_CXX='-KPIC'\n\t    ;;\n\t  *)\n\t    ;;\n\tesac\n\t;;\n      sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)\n\tcase $cc_basename in\n\t  CC*)\n\t    lt_prog_compiler_wl_CXX='-Wl,'\n\t    lt_prog_compiler_pic_CXX='-KPIC'\n\t    lt_prog_compiler_static_CXX='-Bstatic'\n\t    ;;\n\tesac\n\t;;\n      vxworks*)\n\t;;\n      *)\n\tlt_prog_compiler_can_build_shared_CXX=no\n\t;;\n    esac\n  fi\n\n{ echo \"$as_me:$LINENO: result: $lt_prog_compiler_pic_CXX\" >&5\necho \"${ECHO_T}$lt_prog_compiler_pic_CXX\" >&6; }\n\n#\n# Check to make sure the PIC flag actually works.\n#\nif test -n \"$lt_prog_compiler_pic_CXX\"; then\n\n{ echo \"$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works\" >&5\necho $ECHO_N \"checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works... $ECHO_C\" >&6; }\nif test \"${lt_prog_compiler_pic_works_CXX+set}\" = set; then\n  echo $ECHO_N \"(cached) $ECHO_C\" >&6\nelse\n  lt_prog_compiler_pic_works_CXX=no\n  ac_outfile=conftest.$ac_objext\n   printf \"$lt_simple_compile_test_code\" > conftest.$ac_ext\n   lt_compiler_flag=\"$lt_prog_compiler_pic_CXX -DPIC\"\n   # Insert the option either (1) after the last *FLAGS variable, or\n   # (2) before a word containing \"conftest.\", or (3) at the end.\n   # Note that $ac_compile itself does not contain backslashes and begins\n   # with a dollar sign (not a hyphen), so the echo should work correctly.\n   # The option is referenced via a variable to avoid confusing sed.\n   lt_compile=`echo \"$ac_compile\" | $SED \\\n   -e 's:.*FLAGS}\\{0,1\\} :&$lt_compiler_flag :; t' \\\n   -e 's: [^ ]*conftest\\.: $lt_compiler_flag&:; t' \\\n   -e 's:$: $lt_compiler_flag:'`\n   (eval echo \"\\\"\\$as_me:11651: $lt_compile\\\"\" >&5)\n   (eval \"$lt_compile\" 2>conftest.err)\n   ac_status=$?\n   cat conftest.err >&5\n   echo \"$as_me:11655: \\$? = $ac_status\" >&5\n   if (exit $ac_status) && test -s \"$ac_outfile\"; then\n     # The compiler can only warn and ignore the option if not recognized\n     # So say no if there are warnings other than the usual output.\n     $echo \"X$_lt_compiler_boilerplate\" | $Xsed -e '/^$/d' >conftest.exp\n     $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2\n     if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then\n       lt_prog_compiler_pic_works_CXX=yes\n     fi\n   fi\n   $rm conftest*\n\nfi\n{ echo \"$as_me:$LINENO: result: $lt_prog_compiler_pic_works_CXX\" >&5\necho \"${ECHO_T}$lt_prog_compiler_pic_works_CXX\" >&6; }\n\nif test x\"$lt_prog_compiler_pic_works_CXX\" = xyes; then\n    case $lt_prog_compiler_pic_CXX in\n     \"\" | \" \"*) ;;\n     *) lt_prog_compiler_pic_CXX=\" $lt_prog_compiler_pic_CXX\" ;;\n     esac\nelse\n    lt_prog_compiler_pic_CXX=\n     lt_prog_compiler_can_build_shared_CXX=no\nfi\n\nfi\ncase $host_os in\n  # For platforms which do not support PIC, -DPIC is meaningless:\n  *djgpp*)\n    lt_prog_compiler_pic_CXX=\n    ;;\n  *)\n    lt_prog_compiler_pic_CXX=\"$lt_prog_compiler_pic_CXX -DPIC\"\n    ;;\nesac\n\n#\n# Check to make sure the static flag actually works.\n#\nwl=$lt_prog_compiler_wl_CXX eval lt_tmp_static_flag=\\\"$lt_prog_compiler_static_CXX\\\"\n{ echo \"$as_me:$LINENO: checking if $compiler static flag $lt_tmp_static_flag works\" >&5\necho $ECHO_N \"checking if $compiler static flag $lt_tmp_static_flag works... $ECHO_C\" >&6; }\nif test \"${lt_prog_compiler_static_works_CXX+set}\" = set; then\n  echo $ECHO_N \"(cached) $ECHO_C\" >&6\nelse\n  lt_prog_compiler_static_works_CXX=no\n   save_LDFLAGS=\"$LDFLAGS\"\n   LDFLAGS=\"$LDFLAGS $lt_tmp_static_flag\"\n   printf \"$lt_simple_link_test_code\" > conftest.$ac_ext\n   if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then\n     # The linker can only warn and ignore the option if not recognized\n     # So say no if there are warnings\n     if test -s conftest.err; then\n       # Append any errors to the config.log.\n       cat conftest.err 1>&5\n       $echo \"X$_lt_linker_boilerplate\" | $Xsed -e '/^$/d' > conftest.exp\n       $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2\n       if diff conftest.exp conftest.er2 >/dev/null; then\n         lt_prog_compiler_static_works_CXX=yes\n       fi\n     else\n       lt_prog_compiler_static_works_CXX=yes\n     fi\n   fi\n   $rm conftest*\n   LDFLAGS=\"$save_LDFLAGS\"\n\nfi\n{ echo \"$as_me:$LINENO: result: $lt_prog_compiler_static_works_CXX\" >&5\necho \"${ECHO_T}$lt_prog_compiler_static_works_CXX\" >&6; }\n\nif test x\"$lt_prog_compiler_static_works_CXX\" = xyes; then\n    :\nelse\n    lt_prog_compiler_static_CXX=\nfi\n\n\n{ echo \"$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext\" >&5\necho $ECHO_N \"checking if $compiler supports -c -o file.$ac_objext... $ECHO_C\" >&6; }\nif test \"${lt_cv_prog_compiler_c_o_CXX+set}\" = set; then\n  echo $ECHO_N \"(cached) $ECHO_C\" >&6\nelse\n  lt_cv_prog_compiler_c_o_CXX=no\n   $rm -r conftest 2>/dev/null\n   mkdir conftest\n   cd conftest\n   mkdir out\n   printf \"$lt_simple_compile_test_code\" > conftest.$ac_ext\n\n   lt_compiler_flag=\"-o out/conftest2.$ac_objext\"\n   # Insert the option either (1) after the last *FLAGS variable, or\n   # (2) before a word containing \"conftest.\", or (3) at the end.\n   # Note that $ac_compile itself does not contain backslashes and begins\n   # with a dollar sign (not a hyphen), so the echo should work correctly.\n   lt_compile=`echo \"$ac_compile\" | $SED \\\n   -e 's:.*FLAGS}\\{0,1\\} :&$lt_compiler_flag :; t' \\\n   -e 's: [^ ]*conftest\\.: $lt_compiler_flag&:; t' \\\n   -e 's:$: $lt_compiler_flag:'`\n   (eval echo \"\\\"\\$as_me:11755: $lt_compile\\\"\" >&5)\n   (eval \"$lt_compile\" 2>out/conftest.err)\n   ac_status=$?\n   cat out/conftest.err >&5\n   echo \"$as_me:11759: \\$? = $ac_status\" >&5\n   if (exit $ac_status) && test -s out/conftest2.$ac_objext\n   then\n     # The compiler can only warn and ignore the option if not recognized\n     # So say no if there are warnings\n     $echo \"X$_lt_compiler_boilerplate\" | $Xsed -e '/^$/d' > out/conftest.exp\n     $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2\n     if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then\n       lt_cv_prog_compiler_c_o_CXX=yes\n     fi\n   fi\n   chmod u+w . 2>&5\n   $rm conftest*\n   # SGI C++ compiler will create directory out/ii_files/ for\n   # template instantiation\n   test -d out/ii_files && $rm out/ii_files/* && rmdir out/ii_files\n   $rm out/* && rmdir out\n   cd ..\n   rmdir conftest\n   $rm conftest*\n\nfi\n{ echo \"$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o_CXX\" >&5\necho \"${ECHO_T}$lt_cv_prog_compiler_c_o_CXX\" >&6; }\n\n\nhard_links=\"nottested\"\nif test \"$lt_cv_prog_compiler_c_o_CXX\" = no && test \"$need_locks\" != no; then\n  # do not overwrite the value of need_locks provided by the user\n  { echo \"$as_me:$LINENO: checking if we can lock with hard links\" >&5\necho $ECHO_N \"checking if we can lock with hard links... $ECHO_C\" >&6; }\n  hard_links=yes\n  $rm conftest*\n  ln conftest.a conftest.b 2>/dev/null && hard_links=no\n  touch conftest.a\n  ln conftest.a conftest.b 2>&5 || hard_links=no\n  ln conftest.a conftest.b 2>/dev/null && hard_links=no\n  { echo \"$as_me:$LINENO: result: $hard_links\" >&5\necho \"${ECHO_T}$hard_links\" >&6; }\n  if test \"$hard_links\" = no; then\n    { echo \"$as_me:$LINENO: WARNING: \\`$CC' does not support \\`-c -o', so \\`make -j' may be unsafe\" >&5\necho \"$as_me: WARNING: \\`$CC' does not support \\`-c -o', so \\`make -j' may be unsafe\" >&2;}\n    need_locks=warn\n  fi\nelse\n  need_locks=no\nfi\n\n{ echo \"$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries\" >&5\necho $ECHO_N \"checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C\" >&6; }\n\n  export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\\''s/.* //'\\'' | sort | uniq > $export_symbols'\n  case $host_os in\n  aix4* | aix5*)\n    # If we're using GNU nm, then we don't want the \"-C\" option.\n    # -C means demangle to AIX nm, but means don't demangle with GNU nm\n    if $NM -V 2>&1 | grep 'GNU' > /dev/null; then\n      export_symbols_cmds_CXX='$NM -Bpg $libobjs $convenience | awk '\\''{ if (((\\$2 == \"T\") || (\\$2 == \"D\") || (\\$2 == \"B\")) && (substr(\\$3,1,1) != \".\")) { print \\$3 } }'\\'' | sort -u > $export_symbols'\n    else\n      export_symbols_cmds_CXX='$NM -BCpg $libobjs $convenience | awk '\\''{ if (((\\$2 == \"T\") || (\\$2 == \"D\") || (\\$2 == \"B\")) && (substr(\\$3,1,1) != \".\")) { print \\$3 } }'\\'' | sort -u > $export_symbols'\n    fi\n    ;;\n  pw32*)\n    export_symbols_cmds_CXX=\"$ltdll_cmds\"\n  ;;\n  cygwin* | mingw*)\n    export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\\''/^[BCDGRS] /s/.* \\([^ ]*\\)/\\1 DATA/;/^.* __nm__/s/^.* __nm__\\([^ ]*\\) [^ ]*/\\1 DATA/;/^I /d;/^[AITW] /s/.* //'\\'' | sort | uniq > $export_symbols'\n  ;;\n  linux* | k*bsd*-gnu)\n    link_all_deplibs_CXX=no\n  ;;\n  *)\n    export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\\''s/.* //'\\'' | sort | uniq > $export_symbols'\n  ;;\n  esac\n\n{ echo \"$as_me:$LINENO: result: $ld_shlibs_CXX\" >&5\necho \"${ECHO_T}$ld_shlibs_CXX\" >&6; }\ntest \"$ld_shlibs_CXX\" = no && can_build_shared=no\n\n#\n# Do we need to explicitly link libc?\n#\ncase \"x$archive_cmds_need_lc_CXX\" in\nx|xyes)\n  # Assume -lc should be added\n  archive_cmds_need_lc_CXX=yes\n\n  if test \"$enable_shared\" = yes && test \"$GCC\" = yes; then\n    case $archive_cmds_CXX in\n    *'~'*)\n      # FIXME: we may have to deal with multi-command sequences.\n      ;;\n    '$CC '*)\n      # Test whether the compiler implicitly links with -lc since on some\n      # systems, -lgcc has to come before -lc. If gcc already passes -lc\n      # to ld, don't add -lc before -lgcc.\n      { echo \"$as_me:$LINENO: checking whether -lc should be explicitly linked in\" >&5\necho $ECHO_N \"checking whether -lc should be explicitly linked in... $ECHO_C\" >&6; }\n      $rm conftest*\n      printf \"$lt_simple_compile_test_code\" > conftest.$ac_ext\n\n      if { (eval echo \"$as_me:$LINENO: \\\"$ac_compile\\\"\") >&5\n  (eval $ac_compile) 2>&5\n  ac_status=$?\n  echo \"$as_me:$LINENO: \\$? = $ac_status\" >&5\n  (exit $ac_status); } 2>conftest.err; then\n        soname=conftest\n        lib=conftest\n        libobjs=conftest.$ac_objext\n        deplibs=\n        wl=$lt_prog_compiler_wl_CXX\n\tpic_flag=$lt_prog_compiler_pic_CXX\n        compiler_flags=-v\n        linker_flags=-v\n        verstring=\n        output_objdir=.\n        libname=conftest\n        lt_save_allow_undefined_flag=$allow_undefined_flag_CXX\n        allow_undefined_flag_CXX=\n        if { (eval echo \"$as_me:$LINENO: \\\"$archive_cmds_CXX 2\\>\\&1 \\| grep \\\" -lc \\\" \\>/dev/null 2\\>\\&1\\\"\") >&5\n  (eval $archive_cmds_CXX 2\\>\\&1 \\| grep \\\" -lc \\\" \\>/dev/null 2\\>\\&1) 2>&5\n  ac_status=$?\n  echo \"$as_me:$LINENO: \\$? = $ac_status\" >&5\n  (exit $ac_status); }\n        then\n\t  archive_cmds_need_lc_CXX=no\n        else\n\t  archive_cmds_need_lc_CXX=yes\n        fi\n        allow_undefined_flag_CXX=$lt_save_allow_undefined_flag\n      else\n        cat conftest.err 1>&5\n      fi\n      $rm conftest*\n      { echo \"$as_me:$LINENO: result: $archive_cmds_need_lc_CXX\" >&5\necho \"${ECHO_T}$archive_cmds_need_lc_CXX\" >&6; }\n      ;;\n    esac\n  fi\n  ;;\nesac\n\n{ echo \"$as_me:$LINENO: checking dynamic linker characteristics\" >&5\necho $ECHO_N \"checking dynamic linker characteristics... $ECHO_C\" >&6; }\nlibrary_names_spec=\nlibname_spec='lib$name'\nsoname_spec=\nshrext_cmds=\".so\"\npostinstall_cmds=\npostuninstall_cmds=\nfinish_cmds=\nfinish_eval=\nshlibpath_var=\nshlibpath_overrides_runpath=unknown\nversion_type=none\ndynamic_linker=\"$host_os ld.so\"\nsys_lib_dlsearch_path_spec=\"/lib /usr/lib\"\nif test \"$GCC\" = yes; then\n  sys_lib_search_path_spec=`$CC -print-search-dirs | grep \"^libraries:\" | $SED -e \"s/^libraries://\" -e \"s,=/,/,g\"`\n  if echo \"$sys_lib_search_path_spec\" | grep ';' >/dev/null ; then\n    # if the path contains \";\" then we assume it to be the separator\n    # otherwise default to the standard path separator (i.e. \":\") - it is\n    # assumed that no part of a normal pathname contains \";\" but that should\n    # okay in the real world where \";\" in dirpaths is itself problematic.\n    sys_lib_search_path_spec=`echo \"$sys_lib_search_path_spec\" | $SED -e 's/;/ /g'`\n  else\n    sys_lib_search_path_spec=`echo \"$sys_lib_search_path_spec\" | $SED  -e \"s/$PATH_SEPARATOR/ /g\"`\n  fi\nelse\n  sys_lib_search_path_spec=\"/lib /usr/lib /usr/local/lib\"\nfi\nneed_lib_prefix=unknown\nhardcode_into_libs=no\n\n# when you set need_version to no, make sure it does not cause -set_version\n# flags to be left without arguments\nneed_version=unknown\n\ncase $host_os in\naix3*)\n  version_type=linux\n  library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a'\n  shlibpath_var=LIBPATH\n\n  # AIX 3 has no versioning support, so we append a major version to the name.\n  soname_spec='${libname}${release}${shared_ext}$major'\n  ;;\n\naix4* | aix5*)\n  version_type=linux\n  need_lib_prefix=no\n  need_version=no\n  hardcode_into_libs=yes\n  if test \"$host_cpu\" = ia64; then\n    # AIX 5 supports IA64\n    library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}'\n    shlibpath_var=LD_LIBRARY_PATH\n  else\n    # With GCC up to 2.95.x, collect2 would create an import file\n    # for dependence libraries.  The import file would start with\n    # the line `#! .'.  This would cause the generated library to\n    # depend on `.', always an invalid library.  This was fixed in\n    # development snapshots of GCC prior to 3.0.\n    case $host_os in\n      aix4 | aix4.[01] | aix4.[01].*)\n      if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'\n\t   echo ' yes '\n\t   echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then\n\t:\n      else\n\tcan_build_shared=no\n      fi\n      ;;\n    esac\n    # AIX (on Power*) has no versioning support, so currently we can not hardcode correct\n    # soname into executable. Probably we can add versioning support to\n    # collect2, so additional links can be useful in future.\n    if test \"$aix_use_runtimelinking\" = yes; then\n      # If using run time linking (on AIX 4.2 or later) use lib<name>.so\n      # instead of lib<name>.a to let people know that these are not\n      # typical AIX shared libraries.\n      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'\n    else\n      # We preserve .a as extension for shared libraries through AIX4.2\n      # and later when we are not doing run time linking.\n      library_names_spec='${libname}${release}.a $libname.a'\n      soname_spec='${libname}${release}${shared_ext}$major'\n    fi\n    shlibpath_var=LIBPATH\n  fi\n  ;;\n\namigaos*)\n  library_names_spec='$libname.ixlibrary $libname.a'\n  # Create ${libname}_ixlibrary.a entries in /sys/libs.\n  finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo \"X$lib\" | $Xsed -e '\\''s%^.*/\\([^/]*\\)\\.ixlibrary$%\\1%'\\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show \"cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a\"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'\n  ;;\n\nbeos*)\n  library_names_spec='${libname}${shared_ext}'\n  dynamic_linker=\"$host_os ld.so\"\n  shlibpath_var=LIBRARY_PATH\n  ;;\n\nbsdi[45]*)\n  version_type=linux\n  need_version=no\n  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'\n  soname_spec='${libname}${release}${shared_ext}$major'\n  finish_cmds='PATH=\"\\$PATH:/sbin\" ldconfig $libdir'\n  shlibpath_var=LD_LIBRARY_PATH\n  sys_lib_search_path_spec=\"/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib\"\n  sys_lib_dlsearch_path_spec=\"/shlib /usr/lib /usr/local/lib\"\n  # the default ld.so.conf also contains /usr/contrib/lib and\n  # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow\n  # libtool to hard-code these into programs\n  ;;\n\ncygwin* | mingw* | pw32*)\n  version_type=windows\n  shrext_cmds=\".dll\"\n  need_version=no\n  need_lib_prefix=no\n\n  case $GCC,$host_os in\n  yes,cygwin* | yes,mingw* | yes,pw32*)\n    library_names_spec='$libname.dll.a'\n    # DLL is installed to $(libdir)/../bin by postinstall_cmds\n    postinstall_cmds='base_file=`basename \\${file}`~\n      dlpath=`$SHELL 2>&1 -c '\\''. $dir/'\\''\\${base_file}'\\''i;echo \\$dlname'\\''`~\n      dldir=$destdir/`dirname \\$dlpath`~\n      test -d \\$dldir || mkdir -p \\$dldir~\n      $install_prog $dir/$dlname \\$dldir/$dlname~\n      chmod a+x \\$dldir/$dlname'\n    postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\\''. $file; echo \\$dlname'\\''`~\n      dlpath=$dir/\\$dldll~\n       $rm \\$dlpath'\n    shlibpath_overrides_runpath=yes\n\n    case $host_os in\n    cygwin*)\n      # Cygwin DLLs use 'cyg' prefix rather than 'lib'\n      soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'\n      sys_lib_search_path_spec=\"/usr/lib /lib/w32api /lib /usr/local/lib\"\n      ;;\n    mingw*)\n      # MinGW DLLs use traditional 'lib' prefix\n      soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'\n      sys_lib_search_path_spec=`$CC -print-search-dirs | grep \"^libraries:\" | $SED -e \"s/^libraries://\" -e \"s,=/,/,g\"`\n      if echo \"$sys_lib_search_path_spec\" | grep ';[c-zC-Z]:/' >/dev/null; then\n        # It is most probably a Windows format PATH printed by\n        # mingw gcc, but we are running on Cygwin. Gcc prints its search\n        # path with ; separators, and with drive letters. We can handle the\n        # drive letters (cygwin fileutils understands them), so leave them,\n        # especially as we might pass files found there to a mingw objdump,\n        # which wouldn't understand a cygwinified path. Ahh.\n        sys_lib_search_path_spec=`echo \"$sys_lib_search_path_spec\" | $SED -e 's/;/ /g'`\n      else\n        sys_lib_search_path_spec=`echo \"$sys_lib_search_path_spec\" | $SED  -e \"s/$PATH_SEPARATOR/ /g\"`\n      fi\n      ;;\n    pw32*)\n      # pw32 DLLs use 'pw' prefix rather than 'lib'\n      library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'\n      ;;\n    esac\n    ;;\n\n  *)\n    library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib'\n    ;;\n  esac\n  dynamic_linker='Win32 ld.exe'\n  # FIXME: first we should search . and the directory the executable is in\n  shlibpath_var=PATH\n  ;;\n\ndarwin* | rhapsody*)\n  dynamic_linker=\"$host_os dyld\"\n  version_type=darwin\n  need_lib_prefix=no\n  need_version=no\n  library_names_spec='${libname}${release}${versuffix}$shared_ext ${libname}${release}${major}$shared_ext ${libname}$shared_ext'\n  soname_spec='${libname}${release}${major}$shared_ext'\n  shlibpath_overrides_runpath=yes\n  shlibpath_var=DYLD_LIBRARY_PATH\n  shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`'\n  # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same.\n  if test \"$GCC\" = yes; then\n    sys_lib_search_path_spec=`$CC -print-search-dirs | tr \"\\n\" \"$PATH_SEPARATOR\" | sed -e 's/libraries:/@libraries:/' | tr \"@\" \"\\n\" | grep \"^libraries:\" | sed -e \"s/^libraries://\" -e \"s,=/,/,g\" -e \"s,$PATH_SEPARATOR, ,g\" -e \"s,.*,& /lib /usr/lib /usr/local/lib,g\"`\n  else\n    sys_lib_search_path_spec='/lib /usr/lib /usr/local/lib'\n  fi\n  sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'\n  ;;\n\ndgux*)\n  version_type=linux\n  need_lib_prefix=no\n  need_version=no\n  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext'\n  soname_spec='${libname}${release}${shared_ext}$major'\n  shlibpath_var=LD_LIBRARY_PATH\n  ;;\n\nfreebsd1*)\n  dynamic_linker=no\n  ;;\n\nfreebsd* | dragonfly*)\n  # DragonFly does not have aout.  When/if they implement a new\n  # versioning mechanism, adjust this.\n  if test -x /usr/bin/objformat; then\n    objformat=`/usr/bin/objformat`\n  else\n    case $host_os in\n    freebsd[123]*) objformat=aout ;;\n    *) objformat=elf ;;\n    esac\n  fi\n  version_type=freebsd-$objformat\n  case $version_type in\n    freebsd-elf*)\n      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'\n      need_version=no\n      need_lib_prefix=no\n      ;;\n    freebsd-*)\n      library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix'\n      need_version=yes\n      ;;\n  esac\n  shlibpath_var=LD_LIBRARY_PATH\n  case $host_os in\n  freebsd2*)\n    shlibpath_overrides_runpath=yes\n    ;;\n  freebsd3.[01]* | freebsdelf3.[01]*)\n    shlibpath_overrides_runpath=yes\n    hardcode_into_libs=yes\n    ;;\n  freebsd3.[2-9]* | freebsdelf3.[2-9]* | \\\n  freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1)\n    shlibpath_overrides_runpath=no\n    hardcode_into_libs=yes\n    ;;\n  freebsd*) # from 4.6 on\n    shlibpath_overrides_runpath=yes\n    hardcode_into_libs=yes\n    ;;\n  esac\n  ;;\n\ngnu*)\n  version_type=linux\n  need_lib_prefix=no\n  need_version=no\n  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'\n  soname_spec='${libname}${release}${shared_ext}$major'\n  shlibpath_var=LD_LIBRARY_PATH\n  hardcode_into_libs=yes\n  ;;\n\nhpux9* | hpux10* | hpux11*)\n  # Give a soname corresponding to the major version so that dld.sl refuses to\n  # link against other versions.\n  version_type=sunos\n  need_lib_prefix=no\n  need_version=no\n  case $host_cpu in\n  ia64*)\n    shrext_cmds='.so'\n    hardcode_into_libs=yes\n    dynamic_linker=\"$host_os dld.so\"\n    shlibpath_var=LD_LIBRARY_PATH\n    shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.\n    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'\n    soname_spec='${libname}${release}${shared_ext}$major'\n    if test \"X$HPUX_IA64_MODE\" = X32; then\n      sys_lib_search_path_spec=\"/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib\"\n    else\n      sys_lib_search_path_spec=\"/usr/lib/hpux64 /usr/local/lib/hpux64\"\n    fi\n    sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec\n    ;;\n   hppa*64*)\n     shrext_cmds='.sl'\n     hardcode_into_libs=yes\n     dynamic_linker=\"$host_os dld.sl\"\n     shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH\n     shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.\n     library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'\n     soname_spec='${libname}${release}${shared_ext}$major'\n     sys_lib_search_path_spec=\"/usr/lib/pa20_64 /usr/ccs/lib/pa20_64\"\n     sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec\n     ;;\n   *)\n    shrext_cmds='.sl'\n    dynamic_linker=\"$host_os dld.sl\"\n    shlibpath_var=SHLIB_PATH\n    shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH\n    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'\n    soname_spec='${libname}${release}${shared_ext}$major'\n    ;;\n  esac\n  # HP-UX runs *really* slowly unless shared libraries are mode 555.\n  postinstall_cmds='chmod 555 $lib'\n  ;;\n\ninterix3*)\n  version_type=linux\n  need_lib_prefix=no\n  need_version=no\n  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'\n  soname_spec='${libname}${release}${shared_ext}$major'\n  dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)'\n  shlibpath_var=LD_LIBRARY_PATH\n  shlibpath_overrides_runpath=no\n  hardcode_into_libs=yes\n  ;;\n\nirix5* | irix6* | nonstopux*)\n  case $host_os in\n    nonstopux*) version_type=nonstopux ;;\n    *)\n\tif test \"$lt_cv_prog_gnu_ld\" = yes; then\n\t\tversion_type=linux\n\telse\n\t\tversion_type=irix\n\tfi ;;\n  esac\n  need_lib_prefix=no\n  need_version=no\n  soname_spec='${libname}${release}${shared_ext}$major'\n  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}'\n  case $host_os in\n  irix5* | nonstopux*)\n    libsuff= shlibsuff=\n    ;;\n  *)\n    case $LD in # libtool.m4 will add one of these switches to LD\n    *-32|*\"-32 \"|*-melf32bsmip|*\"-melf32bsmip \")\n      libsuff= shlibsuff= libmagic=32-bit;;\n    *-n32|*\"-n32 \"|*-melf32bmipn32|*\"-melf32bmipn32 \")\n      libsuff=32 shlibsuff=N32 libmagic=N32;;\n    *-64|*\"-64 \"|*-melf64bmip|*\"-melf64bmip \")\n      libsuff=64 shlibsuff=64 libmagic=64-bit;;\n    *) libsuff= shlibsuff= libmagic=never-match;;\n    esac\n    ;;\n  esac\n  shlibpath_var=LD_LIBRARY${shlibsuff}_PATH\n  shlibpath_overrides_runpath=no\n  sys_lib_search_path_spec=\"/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}\"\n  sys_lib_dlsearch_path_spec=\"/usr/lib${libsuff} /lib${libsuff}\"\n  hardcode_into_libs=yes\n  ;;\n\n# No shared lib support for Linux oldld, aout, or coff.\nlinux*oldld* | linux*aout* | linux*coff*)\n  dynamic_linker=no\n  ;;\n\n# This must be Linux ELF.\nlinux* | k*bsd*-gnu)\n  version_type=linux\n  need_lib_prefix=no\n  need_version=no\n  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'\n  soname_spec='${libname}${release}${shared_ext}$major'\n  finish_cmds='PATH=\"\\$PATH:/sbin\" ldconfig -n $libdir'\n  shlibpath_var=LD_LIBRARY_PATH\n  shlibpath_overrides_runpath=no\n  # This implies no fast_install, which is unacceptable.\n  # Some rework will be needed to allow for fast_install\n  # before this can be enabled.\n  hardcode_into_libs=yes\n\n  # Append ld.so.conf contents to the search path\n  if test -f /etc/ld.so.conf; then\n    lt_ld_extra=`awk '/^include / { system(sprintf(\"cd /etc; cat %s\", \\$2)); skip = 1; } { if (!skip) print \\$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;s/[:,\t]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\\n' ' '`\n    sys_lib_dlsearch_path_spec=\"/lib /usr/lib $lt_ld_extra\"\n  fi\n\n  # We used to test for /lib/ld.so.1 and disable shared libraries on\n  # powerpc, because MkLinux only supported shared libraries with the\n  # GNU dynamic linker.  Since this was broken with cross compilers,\n  # most powerpc-linux boxes support dynamic linking these days and\n  # people can always --disable-shared, the test was removed, and we\n  # assume the GNU/Linux dynamic linker is in use.\n  dynamic_linker='GNU/Linux ld.so'\n  ;;\n\nnetbsdelf*-gnu)\n  version_type=linux\n  need_lib_prefix=no\n  need_version=no\n  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'\n  soname_spec='${libname}${release}${shared_ext}$major'\n  shlibpath_var=LD_LIBRARY_PATH\n  shlibpath_overrides_runpath=no\n  hardcode_into_libs=yes\n  dynamic_linker='NetBSD ld.elf_so'\n  ;;\n\nnetbsd*)\n  version_type=sunos\n  need_lib_prefix=no\n  need_version=no\n  if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then\n    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'\n    finish_cmds='PATH=\"\\$PATH:/sbin\" ldconfig -m $libdir'\n    dynamic_linker='NetBSD (a.out) ld.so'\n  else\n    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'\n    soname_spec='${libname}${release}${shared_ext}$major'\n    dynamic_linker='NetBSD ld.elf_so'\n  fi\n  shlibpath_var=LD_LIBRARY_PATH\n  shlibpath_overrides_runpath=yes\n  hardcode_into_libs=yes\n  ;;\n\nnewsos6)\n  version_type=linux\n  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'\n  shlibpath_var=LD_LIBRARY_PATH\n  shlibpath_overrides_runpath=yes\n  ;;\n\nnto-qnx*)\n  version_type=linux\n  need_lib_prefix=no\n  need_version=no\n  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'\n  soname_spec='${libname}${release}${shared_ext}$major'\n  shlibpath_var=LD_LIBRARY_PATH\n  shlibpath_overrides_runpath=yes\n  ;;\n\nopenbsd*)\n  version_type=sunos\n  sys_lib_dlsearch_path_spec=\"/usr/lib\"\n  need_lib_prefix=no\n  # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs.\n  case $host_os in\n    openbsd3.3 | openbsd3.3.*) need_version=yes ;;\n    *)                         need_version=no  ;;\n  esac\n  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'\n  finish_cmds='PATH=\"\\$PATH:/sbin\" ldconfig -m $libdir'\n  shlibpath_var=LD_LIBRARY_PATH\n  if test -z \"`echo __ELF__ | $CC -E - | grep __ELF__`\" || test \"$host_os-$host_cpu\" = \"openbsd2.8-powerpc\"; then\n    case $host_os in\n      openbsd2.[89] | openbsd2.[89].*)\n\tshlibpath_overrides_runpath=no\n\t;;\n      *)\n\tshlibpath_overrides_runpath=yes\n\t;;\n      esac\n  else\n    shlibpath_overrides_runpath=yes\n  fi\n  ;;\n\nos2*)\n  libname_spec='$name'\n  shrext_cmds=\".dll\"\n  need_lib_prefix=no\n  library_names_spec='$libname${shared_ext} $libname.a'\n  dynamic_linker='OS/2 ld.exe'\n  shlibpath_var=LIBPATH\n  ;;\n\nosf3* | osf4* | osf5*)\n  version_type=osf\n  need_lib_prefix=no\n  need_version=no\n  soname_spec='${libname}${release}${shared_ext}$major'\n  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'\n  shlibpath_var=LD_LIBRARY_PATH\n  sys_lib_search_path_spec=\"/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib\"\n  sys_lib_dlsearch_path_spec=\"$sys_lib_search_path_spec\"\n  ;;\n\nsolaris*)\n  version_type=linux\n  need_lib_prefix=no\n  need_version=no\n  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'\n  soname_spec='${libname}${release}${shared_ext}$major'\n  shlibpath_var=LD_LIBRARY_PATH\n  shlibpath_overrides_runpath=yes\n  hardcode_into_libs=yes\n  # ldd complains unless libraries are executable\n  postinstall_cmds='chmod +x $lib'\n  ;;\n\nsunos4*)\n  version_type=sunos\n  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'\n  finish_cmds='PATH=\"\\$PATH:/usr/etc\" ldconfig $libdir'\n  shlibpath_var=LD_LIBRARY_PATH\n  shlibpath_overrides_runpath=yes\n  if test \"$with_gnu_ld\" = yes; then\n    need_lib_prefix=no\n  fi\n  need_version=yes\n  ;;\n\nsysv4 | sysv4.3*)\n  version_type=linux\n  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'\n  soname_spec='${libname}${release}${shared_ext}$major'\n  shlibpath_var=LD_LIBRARY_PATH\n  case $host_vendor in\n    sni)\n      shlibpath_overrides_runpath=no\n      need_lib_prefix=no\n      export_dynamic_flag_spec='${wl}-Blargedynsym'\n      runpath_var=LD_RUN_PATH\n      ;;\n    siemens)\n      need_lib_prefix=no\n      ;;\n    motorola)\n      need_lib_prefix=no\n      need_version=no\n      shlibpath_overrides_runpath=no\n      sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'\n      ;;\n  esac\n  ;;\n\nsysv4*MP*)\n  if test -d /usr/nec ;then\n    version_type=linux\n    library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}'\n    soname_spec='$libname${shared_ext}.$major'\n    shlibpath_var=LD_LIBRARY_PATH\n  fi\n  ;;\n\nsysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)\n  version_type=freebsd-elf\n  need_lib_prefix=no\n  need_version=no\n  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'\n  soname_spec='${libname}${release}${shared_ext}$major'\n  shlibpath_var=LD_LIBRARY_PATH\n  hardcode_into_libs=yes\n  if test \"$with_gnu_ld\" = yes; then\n    sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib'\n    shlibpath_overrides_runpath=no\n  else\n    sys_lib_search_path_spec='/usr/ccs/lib /usr/lib'\n    shlibpath_overrides_runpath=yes\n    case $host_os in\n      sco3.2v5*)\n        sys_lib_search_path_spec=\"$sys_lib_search_path_spec /lib\"\n\t;;\n    esac\n  fi\n  sys_lib_dlsearch_path_spec='/usr/lib'\n  ;;\n\nuts4*)\n  version_type=linux\n  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'\n  soname_spec='${libname}${release}${shared_ext}$major'\n  shlibpath_var=LD_LIBRARY_PATH\n  ;;\n\n*)\n  dynamic_linker=no\n  ;;\nesac\n{ echo \"$as_me:$LINENO: result: $dynamic_linker\" >&5\necho \"${ECHO_T}$dynamic_linker\" >&6; }\ntest \"$dynamic_linker\" = no && can_build_shared=no\n\nvariables_saved_for_relink=\"PATH $shlibpath_var $runpath_var\"\nif test \"$GCC\" = yes; then\n  variables_saved_for_relink=\"$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH\"\nfi\n\n{ echo \"$as_me:$LINENO: checking how to hardcode library paths into programs\" >&5\necho $ECHO_N \"checking how to hardcode library paths into programs... $ECHO_C\" >&6; }\nhardcode_action_CXX=\nif test -n \"$hardcode_libdir_flag_spec_CXX\" || \\\n   test -n \"$runpath_var_CXX\" || \\\n   test \"X$hardcode_automatic_CXX\" = \"Xyes\" ; then\n\n  # We can hardcode non-existant directories.\n  if test \"$hardcode_direct_CXX\" != no &&\n     # If the only mechanism to avoid hardcoding is shlibpath_var, we\n     # have to relink, otherwise we might link with an installed library\n     # when we should be linking with a yet-to-be-installed one\n     ## test \"$_LT_AC_TAGVAR(hardcode_shlibpath_var, CXX)\" != no &&\n     test \"$hardcode_minus_L_CXX\" != no; then\n    # Linking always hardcodes the temporary library directory.\n    hardcode_action_CXX=relink\n  else\n    # We can link without hardcoding, and we can hardcode nonexisting dirs.\n    hardcode_action_CXX=immediate\n  fi\nelse\n  # We cannot hardcode anything, or else we can only hardcode existing\n  # directories.\n  hardcode_action_CXX=unsupported\nfi\n{ echo \"$as_me:$LINENO: result: $hardcode_action_CXX\" >&5\necho \"${ECHO_T}$hardcode_action_CXX\" >&6; }\n\nif test \"$hardcode_action_CXX\" = relink; then\n  # Fast installation is not supported\n  enable_fast_install=no\nelif test \"$shlibpath_overrides_runpath\" = yes ||\n     test \"$enable_shared\" = no; then\n  # Fast installation is not necessary\n  enable_fast_install=needless\nfi\n\n\n# The else clause should only fire when bootstrapping the\n# libtool distribution, otherwise you forgot to ship ltmain.sh\n# with your package, and you will get complaints that there are\n# no rules to generate ltmain.sh.\nif test -f \"$ltmain\"; then\n  # See if we are running on zsh, and set the options which allow our commands through\n  # without removal of \\ escapes.\n  if test -n \"${ZSH_VERSION+set}\" ; then\n    setopt NO_GLOB_SUBST\n  fi\n  # Now quote all the things that may contain metacharacters while being\n  # careful not to overquote the AC_SUBSTed values.  We take copies of the\n  # variables and quote the copies for generation of the libtool script.\n  for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC LTCFLAGS NM \\\n    SED SHELL STRIP \\\n    libname_spec library_names_spec soname_spec extract_expsyms_cmds \\\n    old_striplib striplib file_magic_cmd finish_cmds finish_eval \\\n    deplibs_check_method reload_flag reload_cmds need_locks \\\n    lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \\\n    lt_cv_sys_global_symbol_to_c_name_address \\\n    sys_lib_search_path_spec sys_lib_dlsearch_path_spec \\\n    old_postinstall_cmds old_postuninstall_cmds \\\n    compiler_CXX \\\n    CC_CXX \\\n    LD_CXX \\\n    lt_prog_compiler_wl_CXX \\\n    lt_prog_compiler_pic_CXX \\\n    lt_prog_compiler_static_CXX \\\n    lt_prog_compiler_no_builtin_flag_CXX \\\n    export_dynamic_flag_spec_CXX \\\n    thread_safe_flag_spec_CXX \\\n    whole_archive_flag_spec_CXX \\\n    enable_shared_with_static_runtimes_CXX \\\n    old_archive_cmds_CXX \\\n    old_archive_from_new_cmds_CXX \\\n    predep_objects_CXX \\\n    postdep_objects_CXX \\\n    predeps_CXX \\\n    postdeps_CXX \\\n    compiler_lib_search_path_CXX \\\n    archive_cmds_CXX \\\n    archive_expsym_cmds_CXX \\\n    postinstall_cmds_CXX \\\n    postuninstall_cmds_CXX \\\n    old_archive_from_expsyms_cmds_CXX \\\n    allow_undefined_flag_CXX \\\n    no_undefined_flag_CXX \\\n    export_symbols_cmds_CXX \\\n    hardcode_libdir_flag_spec_CXX \\\n    hardcode_libdir_flag_spec_ld_CXX \\\n    hardcode_libdir_separator_CXX \\\n    hardcode_automatic_CXX \\\n    module_cmds_CXX \\\n    module_expsym_cmds_CXX \\\n    lt_cv_prog_compiler_c_o_CXX \\\n    exclude_expsyms_CXX \\\n    include_expsyms_CXX; do\n\n    case $var in\n    old_archive_cmds_CXX | \\\n    old_archive_from_new_cmds_CXX | \\\n    archive_cmds_CXX | \\\n    archive_expsym_cmds_CXX | \\\n    module_cmds_CXX | \\\n    module_expsym_cmds_CXX | \\\n    old_archive_from_expsyms_cmds_CXX | \\\n    export_symbols_cmds_CXX | \\\n    extract_expsyms_cmds | reload_cmds | finish_cmds | \\\n    postinstall_cmds | postuninstall_cmds | \\\n    old_postinstall_cmds | old_postuninstall_cmds | \\\n    sys_lib_search_path_spec | sys_lib_dlsearch_path_spec)\n      # Double-quote double-evaled strings.\n      eval \"lt_$var=\\\\\\\"\\`\\$echo \\\"X\\$$var\\\" | \\$Xsed -e \\\"\\$double_quote_subst\\\" -e \\\"\\$sed_quote_subst\\\" -e \\\"\\$delay_variable_subst\\\"\\`\\\\\\\"\"\n      ;;\n    *)\n      eval \"lt_$var=\\\\\\\"\\`\\$echo \\\"X\\$$var\\\" | \\$Xsed -e \\\"\\$sed_quote_subst\\\"\\`\\\\\\\"\"\n      ;;\n    esac\n  done\n\n  case $lt_echo in\n  *'\\$0 --fallback-echo\"')\n    lt_echo=`$echo \"X$lt_echo\" | $Xsed -e 's/\\\\\\\\\\\\\\$0 --fallback-echo\"$/$0 --fallback-echo\"/'`\n    ;;\n  esac\n\ncfgfile=\"$ofile\"\n\n  cat <<__EOF__ >> \"$cfgfile\"\n# ### BEGIN LIBTOOL TAG CONFIG: $tagname\n\n# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:\n\n# Shell to use when invoking shell scripts.\nSHELL=$lt_SHELL\n\n# Whether or not to build shared libraries.\nbuild_libtool_libs=$enable_shared\n\n# Whether or not to build static libraries.\nbuild_old_libs=$enable_static\n\n# Whether or not to add -lc for building shared libraries.\nbuild_libtool_need_lc=$archive_cmds_need_lc_CXX\n\n# Whether or not to disallow shared libs when runtime libs are static\nallow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_CXX\n\n# Whether or not to optimize for fast installation.\nfast_install=$enable_fast_install\n\n# The host system.\nhost_alias=$host_alias\nhost=$host\nhost_os=$host_os\n\n# The build system.\nbuild_alias=$build_alias\nbuild=$build\nbuild_os=$build_os\n\n# An echo program that does not interpret backslashes.\necho=$lt_echo\n\n# The archiver.\nAR=$lt_AR\nAR_FLAGS=$lt_AR_FLAGS\n\n# A C compiler.\nLTCC=$lt_LTCC\n\n# LTCC compiler flags.\nLTCFLAGS=$lt_LTCFLAGS\n\n# A language-specific compiler.\nCC=$lt_compiler_CXX\n\n# Is the compiler the GNU C compiler?\nwith_gcc=$GCC_CXX\n\n# An ERE matcher.\nEGREP=$lt_EGREP\n\n# The linker used to build libraries.\nLD=$lt_LD_CXX\n\n# Whether we need hard or soft links.\nLN_S=$lt_LN_S\n\n# A BSD-compatible nm program.\nNM=$lt_NM\n\n# A symbol stripping program\nSTRIP=$lt_STRIP\n\n# Used to examine libraries when file_magic_cmd begins \"file\"\nMAGIC_CMD=$MAGIC_CMD\n\n# Used on cygwin: DLL creation program.\nDLLTOOL=\"$DLLTOOL\"\n\n# Used on cygwin: object dumper.\nOBJDUMP=\"$OBJDUMP\"\n\n# Used on cygwin: assembler.\nAS=\"$AS\"\n\n# The name of the directory that contains temporary libtool files.\nobjdir=$objdir\n\n# How to create reloadable object files.\nreload_flag=$lt_reload_flag\nreload_cmds=$lt_reload_cmds\n\n# How to pass a linker flag through the compiler.\nwl=$lt_lt_prog_compiler_wl_CXX\n\n# Object file suffix (normally \"o\").\nobjext=\"$ac_objext\"\n\n# Old archive suffix (normally \"a\").\nlibext=\"$libext\"\n\n# Shared library suffix (normally \".so\").\nshrext_cmds='$shrext_cmds'\n\n# Executable file suffix (normally \"\").\nexeext=\"$exeext\"\n\n# Additional compiler flags for building library objects.\npic_flag=$lt_lt_prog_compiler_pic_CXX\npic_mode=$pic_mode\n\n# What is the maximum length of a command?\nmax_cmd_len=$lt_cv_sys_max_cmd_len\n\n# Does compiler simultaneously support -c and -o options?\ncompiler_c_o=$lt_lt_cv_prog_compiler_c_o_CXX\n\n# Must we lock files when doing compilation?\nneed_locks=$lt_need_locks\n\n# Do we need the lib prefix for modules?\nneed_lib_prefix=$need_lib_prefix\n\n# Do we need a version for libraries?\nneed_version=$need_version\n\n# Whether dlopen is supported.\ndlopen_support=$enable_dlopen\n\n# Whether dlopen of programs is supported.\ndlopen_self=$enable_dlopen_self\n\n# Whether dlopen of statically linked programs is supported.\ndlopen_self_static=$enable_dlopen_self_static\n\n# Compiler flag to prevent dynamic linking.\nlink_static_flag=$lt_lt_prog_compiler_static_CXX\n\n# Compiler flag to turn off builtin functions.\nno_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_CXX\n\n# Compiler flag to allow reflexive dlopens.\nexport_dynamic_flag_spec=$lt_export_dynamic_flag_spec_CXX\n\n# Compiler flag to generate shared objects directly from archives.\nwhole_archive_flag_spec=$lt_whole_archive_flag_spec_CXX\n\n# Compiler flag to generate thread-safe objects.\nthread_safe_flag_spec=$lt_thread_safe_flag_spec_CXX\n\n# Library versioning type.\nversion_type=$version_type\n\n# Format of library name prefix.\nlibname_spec=$lt_libname_spec\n\n# List of archive names.  First name is the real one, the rest are links.\n# The last name is the one that the linker finds with -lNAME.\nlibrary_names_spec=$lt_library_names_spec\n\n# The coded name of the library, if different from the real name.\nsoname_spec=$lt_soname_spec\n\n# Commands used to build and install an old-style archive.\nRANLIB=$lt_RANLIB\nold_archive_cmds=$lt_old_archive_cmds_CXX\nold_postinstall_cmds=$lt_old_postinstall_cmds\nold_postuninstall_cmds=$lt_old_postuninstall_cmds\n\n# Create an old-style archive from a shared archive.\nold_archive_from_new_cmds=$lt_old_archive_from_new_cmds_CXX\n\n# Create a temporary old-style archive to link instead of a shared archive.\nold_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_CXX\n\n# Commands used to build and install a shared archive.\narchive_cmds=$lt_archive_cmds_CXX\narchive_expsym_cmds=$lt_archive_expsym_cmds_CXX\npostinstall_cmds=$lt_postinstall_cmds\npostuninstall_cmds=$lt_postuninstall_cmds\n\n# Commands used to build a loadable module (assumed same as above if empty)\nmodule_cmds=$lt_module_cmds_CXX\nmodule_expsym_cmds=$lt_module_expsym_cmds_CXX\n\n# Commands to strip libraries.\nold_striplib=$lt_old_striplib\nstriplib=$lt_striplib\n\n# Dependencies to place before the objects being linked to create a\n# shared library.\npredep_objects=$lt_predep_objects_CXX\n\n# Dependencies to place after the objects being linked to create a\n# shared library.\npostdep_objects=$lt_postdep_objects_CXX\n\n# Dependencies to place before the objects being linked to create a\n# shared library.\npredeps=$lt_predeps_CXX\n\n# Dependencies to place after the objects being linked to create a\n# shared library.\npostdeps=$lt_postdeps_CXX\n\n# The library search path used internally by the compiler when linking\n# a shared library.\ncompiler_lib_search_path=$lt_compiler_lib_search_path_CXX\n\n# Method to check whether dependent libraries are shared objects.\ndeplibs_check_method=$lt_deplibs_check_method\n\n# Command to use when deplibs_check_method == file_magic.\nfile_magic_cmd=$lt_file_magic_cmd\n\n# Flag that allows shared libraries with undefined symbols to be built.\nallow_undefined_flag=$lt_allow_undefined_flag_CXX\n\n# Flag that forces no undefined symbols.\nno_undefined_flag=$lt_no_undefined_flag_CXX\n\n# Commands used to finish a libtool library installation in a directory.\nfinish_cmds=$lt_finish_cmds\n\n# Same as above, but a single script fragment to be evaled but not shown.\nfinish_eval=$lt_finish_eval\n\n# Take the output of nm and produce a listing of raw symbols and C names.\nglobal_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe\n\n# Transform the output of nm in a proper C declaration\nglobal_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl\n\n# Transform the output of nm in a C name address pair\nglobal_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address\n\n# This is the shared library runtime path variable.\nrunpath_var=$runpath_var\n\n# This is the shared library path variable.\nshlibpath_var=$shlibpath_var\n\n# Is shlibpath searched before the hard-coded library search path?\nshlibpath_overrides_runpath=$shlibpath_overrides_runpath\n\n# How to hardcode a shared library path into an executable.\nhardcode_action=$hardcode_action_CXX\n\n# Whether we should hardcode library paths into libraries.\nhardcode_into_libs=$hardcode_into_libs\n\n# Flag to hardcode \\$libdir into a binary during linking.\n# This must work even if \\$libdir does not exist.\nhardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_CXX\n\n# If ld is used when linking, flag to hardcode \\$libdir into\n# a binary during linking. This must work even if \\$libdir does\n# not exist.\nhardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_CXX\n\n# Whether we need a single -rpath flag with a separated argument.\nhardcode_libdir_separator=$lt_hardcode_libdir_separator_CXX\n\n# Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the\n# resulting binary.\nhardcode_direct=$hardcode_direct_CXX\n\n# Set to yes if using the -LDIR flag during linking hardcodes DIR into the\n# resulting binary.\nhardcode_minus_L=$hardcode_minus_L_CXX\n\n# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into\n# the resulting binary.\nhardcode_shlibpath_var=$hardcode_shlibpath_var_CXX\n\n# Set to yes if building a shared library automatically hardcodes DIR into the library\n# and all subsequent libraries and executables linked against it.\nhardcode_automatic=$hardcode_automatic_CXX\n\n# Variables whose values should be saved in libtool wrapper scripts and\n# restored at relink time.\nvariables_saved_for_relink=\"$variables_saved_for_relink\"\n\n# Whether libtool must link a program against all its dependency libraries.\nlink_all_deplibs=$link_all_deplibs_CXX\n\n# Compile-time system search path for libraries\nsys_lib_search_path_spec=$lt_sys_lib_search_path_spec\n\n# Run-time system search path for libraries\nsys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec\n\n# Fix the shell variable \\$srcfile for the compiler.\nfix_srcfile_path=\"$fix_srcfile_path_CXX\"\n\n# Set to yes if exported symbols are required.\nalways_export_symbols=$always_export_symbols_CXX\n\n# The commands to list exported symbols.\nexport_symbols_cmds=$lt_export_symbols_cmds_CXX\n\n# The commands to extract the exported symbol list from a shared archive.\nextract_expsyms_cmds=$lt_extract_expsyms_cmds\n\n# Symbols that should not be listed in the preloaded symbols.\nexclude_expsyms=$lt_exclude_expsyms_CXX\n\n# Symbols that must always be exported.\ninclude_expsyms=$lt_include_expsyms_CXX\n\n# ### END LIBTOOL TAG CONFIG: $tagname\n\n__EOF__\n\n\nelse\n  # If there is no Makefile yet, we rely on a make rule to execute\n  # `config.status --recheck' to rerun these tests and create the\n  # libtool script then.\n  ltmain_in=`echo $ltmain | sed -e 's/\\.sh$/.in/'`\n  if test -f \"$ltmain_in\"; then\n    test -f Makefile && make \"$ltmain\"\n  fi\nfi\n\n\nac_ext=c\nac_cpp='$CPP $CPPFLAGS'\nac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'\nac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'\nac_compiler_gnu=$ac_cv_c_compiler_gnu\n\nCC=$lt_save_CC\nLDCXX=$LD\nLD=$lt_save_LD\nGCC=$lt_save_GCC\nwith_gnu_ldcxx=$with_gnu_ld\nwith_gnu_ld=$lt_save_with_gnu_ld\nlt_cv_path_LDCXX=$lt_cv_path_LD\nlt_cv_path_LD=$lt_save_path_LD\nlt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld\nlt_cv_prog_gnu_ld=$lt_save_with_gnu_ld\n\n\telse\n\t  tagname=\"\"\n\tfi\n\t;;\n\n      F77)\n\tif test -n \"$F77\" && test \"X$F77\" != \"Xno\"; then\n\nac_ext=f\nac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5'\nac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'\nac_compiler_gnu=$ac_cv_f77_compiler_gnu\n\n\narchive_cmds_need_lc_F77=no\nallow_undefined_flag_F77=\nalways_export_symbols_F77=no\narchive_expsym_cmds_F77=\nexport_dynamic_flag_spec_F77=\nhardcode_direct_F77=no\nhardcode_libdir_flag_spec_F77=\nhardcode_libdir_flag_spec_ld_F77=\nhardcode_libdir_separator_F77=\nhardcode_minus_L_F77=no\nhardcode_automatic_F77=no\nmodule_cmds_F77=\nmodule_expsym_cmds_F77=\nlink_all_deplibs_F77=unknown\nold_archive_cmds_F77=$old_archive_cmds\nno_undefined_flag_F77=\nwhole_archive_flag_spec_F77=\nenable_shared_with_static_runtimes_F77=no\n\n# Source file extension for f77 test sources.\nac_ext=f\n\n# Object file extension for compiled f77 test sources.\nobjext=o\nobjext_F77=$objext\n\n# Code to be used in simple compile tests\nlt_simple_compile_test_code=\"      subroutine t\\n      return\\n      end\\n\"\n\n# Code to be used in simple link tests\nlt_simple_link_test_code=\"      program t\\n      end\\n\"\n\n# ltmain only uses $CC for tagged configurations so make sure $CC is set.\n\n# If no C compiler was specified, use CC.\nLTCC=${LTCC-\"$CC\"}\n\n# If no C compiler flags were specified, use CFLAGS.\nLTCFLAGS=${LTCFLAGS-\"$CFLAGS\"}\n\n# Allow CC to be a program name with arguments.\ncompiler=$CC\n\n\n# save warnings/boilerplate of simple test code\nac_outfile=conftest.$ac_objext\nprintf \"$lt_simple_compile_test_code\" >conftest.$ac_ext\neval \"$ac_compile\" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err\n_lt_compiler_boilerplate=`cat conftest.err`\n$rm conftest*\n\nac_outfile=conftest.$ac_objext\nprintf \"$lt_simple_link_test_code\" >conftest.$ac_ext\neval \"$ac_link\" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err\n_lt_linker_boilerplate=`cat conftest.err`\n$rm conftest*\n\n\n# Allow CC to be a program name with arguments.\nlt_save_CC=\"$CC\"\nCC=${F77-\"f77\"}\ncompiler=$CC\ncompiler_F77=$CC\nfor cc_temp in $compiler\"\"; do\n  case $cc_temp in\n    compile | *[\\\\/]compile | ccache | *[\\\\/]ccache ) ;;\n    distcc | *[\\\\/]distcc | purify | *[\\\\/]purify ) ;;\n    \\-*) ;;\n    *) break;;\n  esac\ndone\ncc_basename=`$echo \"X$cc_temp\" | $Xsed -e 's%.*/%%' -e \"s%^$host_alias-%%\"`\n\n\n{ echo \"$as_me:$LINENO: checking if libtool supports shared libraries\" >&5\necho $ECHO_N \"checking if libtool supports shared libraries... $ECHO_C\" >&6; }\n{ echo \"$as_me:$LINENO: result: $can_build_shared\" >&5\necho \"${ECHO_T}$can_build_shared\" >&6; }\n\n{ echo \"$as_me:$LINENO: checking whether to build shared libraries\" >&5\necho $ECHO_N \"checking whether to build shared libraries... $ECHO_C\" >&6; }\ntest \"$can_build_shared\" = \"no\" && enable_shared=no\n\n# On AIX, shared libraries and static libraries use the same namespace, and\n# are all built from PIC.\ncase $host_os in\naix3*)\n  test \"$enable_shared\" = yes && enable_static=no\n  if test -n \"$RANLIB\"; then\n    archive_cmds=\"$archive_cmds~\\$RANLIB \\$lib\"\n    postinstall_cmds='$RANLIB $lib'\n  fi\n  ;;\naix4* | aix5*)\n  if test \"$host_cpu\" != ia64 && test \"$aix_use_runtimelinking\" = no ; then\n    test \"$enable_shared\" = yes && enable_static=no\n  fi\n  ;;\nesac\n{ echo \"$as_me:$LINENO: result: $enable_shared\" >&5\necho \"${ECHO_T}$enable_shared\" >&6; }\n\n{ echo \"$as_me:$LINENO: checking whether to build static libraries\" >&5\necho $ECHO_N \"checking whether to build static libraries... $ECHO_C\" >&6; }\n# Make sure either enable_shared or enable_static is yes.\ntest \"$enable_shared\" = yes || enable_static=yes\n{ echo \"$as_me:$LINENO: result: $enable_static\" >&5\necho \"${ECHO_T}$enable_static\" >&6; }\n\nGCC_F77=\"$G77\"\nLD_F77=\"$LD\"\n\nlt_prog_compiler_wl_F77=\nlt_prog_compiler_pic_F77=\nlt_prog_compiler_static_F77=\n\n{ echo \"$as_me:$LINENO: checking for $compiler option to produce PIC\" >&5\necho $ECHO_N \"checking for $compiler option to produce PIC... $ECHO_C\" >&6; }\n\n  if test \"$GCC\" = yes; then\n    lt_prog_compiler_wl_F77='-Wl,'\n    lt_prog_compiler_static_F77='-static'\n\n    case $host_os in\n      aix*)\n      # All AIX code is PIC.\n      if test \"$host_cpu\" = ia64; then\n\t# AIX 5 now supports IA64 processor\n\tlt_prog_compiler_static_F77='-Bstatic'\n      fi\n      ;;\n\n    amigaos*)\n      # FIXME: we need at least 68020 code to build shared libraries, but\n      # adding the `-m68020' flag to GCC prevents building anything better,\n      # like `-m68040'.\n      lt_prog_compiler_pic_F77='-m68020 -resident32 -malways-restore-a4'\n      ;;\n\n    beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)\n      # PIC is the default for these OSes.\n      ;;\n\n    mingw* | pw32* | os2*)\n      # This hack is so that the source file can tell whether it is being\n      # built for inclusion in a dll (and should export symbols for example).\n      lt_prog_compiler_pic_F77='-DDLL_EXPORT'\n      ;;\n\n    darwin* | rhapsody*)\n      # PIC is the default on this platform\n      # Common symbols not allowed in MH_DYLIB files\n      lt_prog_compiler_pic_F77='-fno-common'\n      ;;\n\n    interix3*)\n      # Interix 3.x gcc -fpic/-fPIC options generate broken code.\n      # Instead, we relocate shared libraries at runtime.\n      ;;\n\n    msdosdjgpp*)\n      # Just because we use GCC doesn't mean we suddenly get shared libraries\n      # on systems that don't support them.\n      lt_prog_compiler_can_build_shared_F77=no\n      enable_shared=no\n      ;;\n\n    sysv4*MP*)\n      if test -d /usr/nec; then\n\tlt_prog_compiler_pic_F77=-Kconform_pic\n      fi\n      ;;\n\n    hpux*)\n      # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but\n      # not for PA HP-UX.\n      case $host_cpu in\n      hppa*64*|ia64*)\n\t# +Z the default\n\t;;\n      *)\n\tlt_prog_compiler_pic_F77='-fPIC'\n\t;;\n      esac\n      ;;\n\n    *)\n      lt_prog_compiler_pic_F77='-fPIC'\n      ;;\n    esac\n  else\n    # PORTME Check for flag to pass linker flags through the system compiler.\n    case $host_os in\n    aix*)\n      lt_prog_compiler_wl_F77='-Wl,'\n      if test \"$host_cpu\" = ia64; then\n\t# AIX 5 now supports IA64 processor\n\tlt_prog_compiler_static_F77='-Bstatic'\n      else\n\tlt_prog_compiler_static_F77='-bnso -bI:/lib/syscalls.exp'\n      fi\n      ;;\n      darwin*)\n        # PIC is the default on this platform\n        # Common symbols not allowed in MH_DYLIB files\n       case $cc_basename in\n         xlc*)\n         lt_prog_compiler_pic_F77='-qnocommon'\n         lt_prog_compiler_wl_F77='-Wl,'\n         ;;\n       esac\n       ;;\n\n    mingw* | pw32* | os2*)\n      # This hack is so that the source file can tell whether it is being\n      # built for inclusion in a dll (and should export symbols for example).\n      lt_prog_compiler_pic_F77='-DDLL_EXPORT'\n      ;;\n\n    hpux9* | hpux10* | hpux11*)\n      lt_prog_compiler_wl_F77='-Wl,'\n      # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but\n      # not for PA HP-UX.\n      case $host_cpu in\n      hppa*64*|ia64*)\n\t# +Z the default\n\t;;\n      *)\n\tlt_prog_compiler_pic_F77='+Z'\n\t;;\n      esac\n      # Is there a better lt_prog_compiler_static that works with the bundled CC?\n      lt_prog_compiler_static_F77='${wl}-a ${wl}archive'\n      ;;\n\n    irix5* | irix6* | nonstopux*)\n      lt_prog_compiler_wl_F77='-Wl,'\n      # PIC (with -KPIC) is the default.\n      lt_prog_compiler_static_F77='-non_shared'\n      ;;\n\n    newsos6)\n      lt_prog_compiler_pic_F77='-KPIC'\n      lt_prog_compiler_static_F77='-Bstatic'\n      ;;\n\n    linux* | k*bsd*-gnu)\n      case $cc_basename in\n      icc* | ecc*)\n\tlt_prog_compiler_wl_F77='-Wl,'\n\tlt_prog_compiler_pic_F77='-KPIC'\n\tlt_prog_compiler_static_F77='-static'\n        ;;\n      pgcc* | pgf77* | pgf90* | pgf95*)\n        # Portland Group compilers (*not* the Pentium gcc compiler,\n\t# which looks to be a dead project)\n\tlt_prog_compiler_wl_F77='-Wl,'\n\tlt_prog_compiler_pic_F77='-fpic'\n\tlt_prog_compiler_static_F77='-Bstatic'\n        ;;\n      ccc*)\n        lt_prog_compiler_wl_F77='-Wl,'\n        # All Alpha code is PIC.\n        lt_prog_compiler_static_F77='-non_shared'\n        ;;\n      esac\n      ;;\n\n    osf3* | osf4* | osf5*)\n      lt_prog_compiler_wl_F77='-Wl,'\n      # All OSF/1 code is PIC.\n      lt_prog_compiler_static_F77='-non_shared'\n      ;;\n\n    solaris*)\n      lt_prog_compiler_pic_F77='-KPIC'\n      lt_prog_compiler_static_F77='-Bstatic'\n      case $cc_basename in\n      f77* | f90* | f95*)\n\tlt_prog_compiler_wl_F77='-Qoption ld ';;\n      *)\n\tlt_prog_compiler_wl_F77='-Wl,';;\n      esac\n      ;;\n\n    sunos4*)\n      lt_prog_compiler_wl_F77='-Qoption ld '\n      lt_prog_compiler_pic_F77='-PIC'\n      lt_prog_compiler_static_F77='-Bstatic'\n      ;;\n\n    sysv4 | sysv4.2uw2* | sysv4.3*)\n      lt_prog_compiler_wl_F77='-Wl,'\n      lt_prog_compiler_pic_F77='-KPIC'\n      lt_prog_compiler_static_F77='-Bstatic'\n      ;;\n\n    sysv4*MP*)\n      if test -d /usr/nec ;then\n\tlt_prog_compiler_pic_F77='-Kconform_pic'\n\tlt_prog_compiler_static_F77='-Bstatic'\n      fi\n      ;;\n\n    sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)\n      lt_prog_compiler_wl_F77='-Wl,'\n      lt_prog_compiler_pic_F77='-KPIC'\n      lt_prog_compiler_static_F77='-Bstatic'\n      ;;\n\n    unicos*)\n      lt_prog_compiler_wl_F77='-Wl,'\n      lt_prog_compiler_can_build_shared_F77=no\n      ;;\n\n    uts4*)\n      lt_prog_compiler_pic_F77='-pic'\n      lt_prog_compiler_static_F77='-Bstatic'\n      ;;\n\n    *)\n      lt_prog_compiler_can_build_shared_F77=no\n      ;;\n    esac\n  fi\n\n{ echo \"$as_me:$LINENO: result: $lt_prog_compiler_pic_F77\" >&5\necho \"${ECHO_T}$lt_prog_compiler_pic_F77\" >&6; }\n\n#\n# Check to make sure the PIC flag actually works.\n#\nif test -n \"$lt_prog_compiler_pic_F77\"; then\n\n{ echo \"$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic_F77 works\" >&5\necho $ECHO_N \"checking if $compiler PIC flag $lt_prog_compiler_pic_F77 works... $ECHO_C\" >&6; }\nif test \"${lt_prog_compiler_pic_works_F77+set}\" = set; then\n  echo $ECHO_N \"(cached) $ECHO_C\" >&6\nelse\n  lt_prog_compiler_pic_works_F77=no\n  ac_outfile=conftest.$ac_objext\n   printf \"$lt_simple_compile_test_code\" > conftest.$ac_ext\n   lt_compiler_flag=\"$lt_prog_compiler_pic_F77\"\n   # Insert the option either (1) after the last *FLAGS variable, or\n   # (2) before a word containing \"conftest.\", or (3) at the end.\n   # Note that $ac_compile itself does not contain backslashes and begins\n   # with a dollar sign (not a hyphen), so the echo should work correctly.\n   # The option is referenced via a variable to avoid confusing sed.\n   lt_compile=`echo \"$ac_compile\" | $SED \\\n   -e 's:.*FLAGS}\\{0,1\\} :&$lt_compiler_flag :; t' \\\n   -e 's: [^ ]*conftest\\.: $lt_compiler_flag&:; t' \\\n   -e 's:$: $lt_compiler_flag:'`\n   (eval echo \"\\\"\\$as_me:13316: $lt_compile\\\"\" >&5)\n   (eval \"$lt_compile\" 2>conftest.err)\n   ac_status=$?\n   cat conftest.err >&5\n   echo \"$as_me:13320: \\$? = $ac_status\" >&5\n   if (exit $ac_status) && test -s \"$ac_outfile\"; then\n     # The compiler can only warn and ignore the option if not recognized\n     # So say no if there are warnings other than the usual output.\n     $echo \"X$_lt_compiler_boilerplate\" | $Xsed -e '/^$/d' >conftest.exp\n     $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2\n     if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then\n       lt_prog_compiler_pic_works_F77=yes\n     fi\n   fi\n   $rm conftest*\n\nfi\n{ echo \"$as_me:$LINENO: result: $lt_prog_compiler_pic_works_F77\" >&5\necho \"${ECHO_T}$lt_prog_compiler_pic_works_F77\" >&6; }\n\nif test x\"$lt_prog_compiler_pic_works_F77\" = xyes; then\n    case $lt_prog_compiler_pic_F77 in\n     \"\" | \" \"*) ;;\n     *) lt_prog_compiler_pic_F77=\" $lt_prog_compiler_pic_F77\" ;;\n     esac\nelse\n    lt_prog_compiler_pic_F77=\n     lt_prog_compiler_can_build_shared_F77=no\nfi\n\nfi\ncase $host_os in\n  # For platforms which do not support PIC, -DPIC is meaningless:\n  *djgpp*)\n    lt_prog_compiler_pic_F77=\n    ;;\n  *)\n    lt_prog_compiler_pic_F77=\"$lt_prog_compiler_pic_F77\"\n    ;;\nesac\n\n#\n# Check to make sure the static flag actually works.\n#\nwl=$lt_prog_compiler_wl_F77 eval lt_tmp_static_flag=\\\"$lt_prog_compiler_static_F77\\\"\n{ echo \"$as_me:$LINENO: checking if $compiler static flag $lt_tmp_static_flag works\" >&5\necho $ECHO_N \"checking if $compiler static flag $lt_tmp_static_flag works... $ECHO_C\" >&6; }\nif test \"${lt_prog_compiler_static_works_F77+set}\" = set; then\n  echo $ECHO_N \"(cached) $ECHO_C\" >&6\nelse\n  lt_prog_compiler_static_works_F77=no\n   save_LDFLAGS=\"$LDFLAGS\"\n   LDFLAGS=\"$LDFLAGS $lt_tmp_static_flag\"\n   printf \"$lt_simple_link_test_code\" > conftest.$ac_ext\n   if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then\n     # The linker can only warn and ignore the option if not recognized\n     # So say no if there are warnings\n     if test -s conftest.err; then\n       # Append any errors to the config.log.\n       cat conftest.err 1>&5\n       $echo \"X$_lt_linker_boilerplate\" | $Xsed -e '/^$/d' > conftest.exp\n       $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2\n       if diff conftest.exp conftest.er2 >/dev/null; then\n         lt_prog_compiler_static_works_F77=yes\n       fi\n     else\n       lt_prog_compiler_static_works_F77=yes\n     fi\n   fi\n   $rm conftest*\n   LDFLAGS=\"$save_LDFLAGS\"\n\nfi\n{ echo \"$as_me:$LINENO: result: $lt_prog_compiler_static_works_F77\" >&5\necho \"${ECHO_T}$lt_prog_compiler_static_works_F77\" >&6; }\n\nif test x\"$lt_prog_compiler_static_works_F77\" = xyes; then\n    :\nelse\n    lt_prog_compiler_static_F77=\nfi\n\n\n{ echo \"$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext\" >&5\necho $ECHO_N \"checking if $compiler supports -c -o file.$ac_objext... $ECHO_C\" >&6; }\nif test \"${lt_cv_prog_compiler_c_o_F77+set}\" = set; then\n  echo $ECHO_N \"(cached) $ECHO_C\" >&6\nelse\n  lt_cv_prog_compiler_c_o_F77=no\n   $rm -r conftest 2>/dev/null\n   mkdir conftest\n   cd conftest\n   mkdir out\n   printf \"$lt_simple_compile_test_code\" > conftest.$ac_ext\n\n   lt_compiler_flag=\"-o out/conftest2.$ac_objext\"\n   # Insert the option either (1) after the last *FLAGS variable, or\n   # (2) before a word containing \"conftest.\", or (3) at the end.\n   # Note that $ac_compile itself does not contain backslashes and begins\n   # with a dollar sign (not a hyphen), so the echo should work correctly.\n   lt_compile=`echo \"$ac_compile\" | $SED \\\n   -e 's:.*FLAGS}\\{0,1\\} :&$lt_compiler_flag :; t' \\\n   -e 's: [^ ]*conftest\\.: $lt_compiler_flag&:; t' \\\n   -e 's:$: $lt_compiler_flag:'`\n   (eval echo \"\\\"\\$as_me:13420: $lt_compile\\\"\" >&5)\n   (eval \"$lt_compile\" 2>out/conftest.err)\n   ac_status=$?\n   cat out/conftest.err >&5\n   echo \"$as_me:13424: \\$? = $ac_status\" >&5\n   if (exit $ac_status) && test -s out/conftest2.$ac_objext\n   then\n     # The compiler can only warn and ignore the option if not recognized\n     # So say no if there are warnings\n     $echo \"X$_lt_compiler_boilerplate\" | $Xsed -e '/^$/d' > out/conftest.exp\n     $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2\n     if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then\n       lt_cv_prog_compiler_c_o_F77=yes\n     fi\n   fi\n   chmod u+w . 2>&5\n   $rm conftest*\n   # SGI C++ compiler will create directory out/ii_files/ for\n   # template instantiation\n   test -d out/ii_files && $rm out/ii_files/* && rmdir out/ii_files\n   $rm out/* && rmdir out\n   cd ..\n   rmdir conftest\n   $rm conftest*\n\nfi\n{ echo \"$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o_F77\" >&5\necho \"${ECHO_T}$lt_cv_prog_compiler_c_o_F77\" >&6; }\n\n\nhard_links=\"nottested\"\nif test \"$lt_cv_prog_compiler_c_o_F77\" = no && test \"$need_locks\" != no; then\n  # do not overwrite the value of need_locks provided by the user\n  { echo \"$as_me:$LINENO: checking if we can lock with hard links\" >&5\necho $ECHO_N \"checking if we can lock with hard links... $ECHO_C\" >&6; }\n  hard_links=yes\n  $rm conftest*\n  ln conftest.a conftest.b 2>/dev/null && hard_links=no\n  touch conftest.a\n  ln conftest.a conftest.b 2>&5 || hard_links=no\n  ln conftest.a conftest.b 2>/dev/null && hard_links=no\n  { echo \"$as_me:$LINENO: result: $hard_links\" >&5\necho \"${ECHO_T}$hard_links\" >&6; }\n  if test \"$hard_links\" = no; then\n    { echo \"$as_me:$LINENO: WARNING: \\`$CC' does not support \\`-c -o', so \\`make -j' may be unsafe\" >&5\necho \"$as_me: WARNING: \\`$CC' does not support \\`-c -o', so \\`make -j' may be unsafe\" >&2;}\n    need_locks=warn\n  fi\nelse\n  need_locks=no\nfi\n\n{ echo \"$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries\" >&5\necho $ECHO_N \"checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C\" >&6; }\n\n  runpath_var=\n  allow_undefined_flag_F77=\n  enable_shared_with_static_runtimes_F77=no\n  archive_cmds_F77=\n  archive_expsym_cmds_F77=\n  old_archive_From_new_cmds_F77=\n  old_archive_from_expsyms_cmds_F77=\n  export_dynamic_flag_spec_F77=\n  whole_archive_flag_spec_F77=\n  thread_safe_flag_spec_F77=\n  hardcode_libdir_flag_spec_F77=\n  hardcode_libdir_flag_spec_ld_F77=\n  hardcode_libdir_separator_F77=\n  hardcode_direct_F77=no\n  hardcode_minus_L_F77=no\n  hardcode_shlibpath_var_F77=unsupported\n  link_all_deplibs_F77=unknown\n  hardcode_automatic_F77=no\n  module_cmds_F77=\n  module_expsym_cmds_F77=\n  always_export_symbols_F77=no\n  export_symbols_cmds_F77='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\\''s/.* //'\\'' | sort | uniq > $export_symbols'\n  # include_expsyms should be a list of space-separated symbols to be *always*\n  # included in the symbol list\n  include_expsyms_F77=\n  # exclude_expsyms can be an extended regexp of symbols to exclude\n  # it will be wrapped by ` (' and `)$', so one must not match beginning or\n  # end of line.  Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc',\n  # as well as any symbol that contains `d'.\n  exclude_expsyms_F77=\"_GLOBAL_OFFSET_TABLE_\"\n  # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out\n  # platforms (ab)use it in PIC code, but their linkers get confused if\n  # the symbol is explicitly referenced.  Since portable code cannot\n  # rely on this symbol name, it's probably fine to never include it in\n  # preloaded symbol tables.\n  extract_expsyms_cmds=\n  # Just being paranoid about ensuring that cc_basename is set.\n  for cc_temp in $compiler\"\"; do\n  case $cc_temp in\n    compile | *[\\\\/]compile | ccache | *[\\\\/]ccache ) ;;\n    distcc | *[\\\\/]distcc | purify | *[\\\\/]purify ) ;;\n    \\-*) ;;\n    *) break;;\n  esac\ndone\ncc_basename=`$echo \"X$cc_temp\" | $Xsed -e 's%.*/%%' -e \"s%^$host_alias-%%\"`\n\n  case $host_os in\n  cygwin* | mingw* | pw32*)\n    # FIXME: the MSVC++ port hasn't been tested in a loooong time\n    # When not using gcc, we currently assume that we are using\n    # Microsoft Visual C++.\n    if test \"$GCC\" != yes; then\n      with_gnu_ld=no\n    fi\n    ;;\n  interix*)\n    # we just hope/assume this is gcc and not c89 (= MSVC++)\n    with_gnu_ld=yes\n    ;;\n  openbsd*)\n    with_gnu_ld=no\n    ;;\n  esac\n\n  ld_shlibs_F77=yes\n  if test \"$with_gnu_ld\" = yes; then\n    # If archive_cmds runs LD, not CC, wlarc should be empty\n    wlarc='${wl}'\n\n    # Set some defaults for GNU ld with shared library support. These\n    # are reset later if shared libraries are not supported. Putting them\n    # here allows them to be overridden if necessary.\n    runpath_var=LD_RUN_PATH\n    hardcode_libdir_flag_spec_F77='${wl}--rpath ${wl}$libdir'\n    export_dynamic_flag_spec_F77='${wl}--export-dynamic'\n    # ancient GNU ld didn't support --whole-archive et. al.\n    if $LD --help 2>&1 | grep 'no-whole-archive' > /dev/null; then\n\twhole_archive_flag_spec_F77=\"$wlarc\"'--whole-archive$convenience '\"$wlarc\"'--no-whole-archive'\n      else\n  \twhole_archive_flag_spec_F77=\n    fi\n    supports_anon_versioning=no\n    case `$LD -v 2>/dev/null` in\n      *\\ [01].* | *\\ 2.[0-9].* | *\\ 2.10.*) ;; # catch versions < 2.11\n      *\\ 2.11.93.0.2\\ *) supports_anon_versioning=yes ;; # RH7.3 ...\n      *\\ 2.11.92.0.12\\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ...\n      *\\ 2.11.*) ;; # other 2.11 versions\n      *) supports_anon_versioning=yes ;;\n    esac\n\n    # See if GNU ld supports shared libraries.\n    case $host_os in\n    aix3* | aix4* | aix5*)\n      # On AIX/PPC, the GNU linker is very broken\n      if test \"$host_cpu\" != ia64; then\n\tld_shlibs_F77=no\n\tcat <<EOF 1>&2\n\n*** Warning: the GNU linker, at least up to release 2.9.1, is reported\n*** to be unable to reliably create shared libraries on AIX.\n*** Therefore, libtool is disabling shared libraries support.  If you\n*** really care for shared libraries, you may want to modify your PATH\n*** so that a non-GNU linker is found, and then restart.\n\nEOF\n      fi\n      ;;\n\n    amigaos*)\n      archive_cmds_F77='$rm $output_objdir/a2ixlibrary.data~$echo \"#define NAME $libname\" > $output_objdir/a2ixlibrary.data~$echo \"#define LIBRARY_ID 1\" >> $output_objdir/a2ixlibrary.data~$echo \"#define VERSION $major\" >> $output_objdir/a2ixlibrary.data~$echo \"#define REVISION $revision\" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'\n      hardcode_libdir_flag_spec_F77='-L$libdir'\n      hardcode_minus_L_F77=yes\n\n      # Samuel A. Falvo II <kc5tja@dolphin.openprojects.net> reports\n      # that the semantics of dynamic libraries on AmigaOS, at least up\n      # to version 4, is to share data among multiple programs linked\n      # with the same dynamic library.  Since this doesn't match the\n      # behavior of shared libraries on other platforms, we can't use\n      # them.\n      ld_shlibs_F77=no\n      ;;\n\n    beos*)\n      if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then\n\tallow_undefined_flag_F77=unsupported\n\t# Joseph Beckenbach <jrb3@best.com> says some releases of gcc\n\t# support --undefined.  This deserves some investigation.  FIXME\n\tarchive_cmds_F77='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'\n      else\n\tld_shlibs_F77=no\n      fi\n      ;;\n\n    cygwin* | mingw* | pw32*)\n      # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, F77) is actually meaningless,\n      # as there is no search path for DLLs.\n      hardcode_libdir_flag_spec_F77='-L$libdir'\n      allow_undefined_flag_F77=unsupported\n      always_export_symbols_F77=no\n      enable_shared_with_static_runtimes_F77=yes\n      export_symbols_cmds_F77='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\\''/^[BCDGRS] /s/.* \\([^ ]*\\)/\\1 DATA/'\\'' | $SED -e '\\''/^[AITW] /s/.* //'\\'' | sort | uniq > $export_symbols'\n\n      if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then\n        archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'\n\t# If the export-symbols file already is a .def file (1st line\n\t# is EXPORTS), use it as is; otherwise, prepend...\n\tarchive_expsym_cmds_F77='if test \"x`$SED 1q $export_symbols`\" = xEXPORTS; then\n\t  cp $export_symbols $output_objdir/$soname.def;\n\telse\n\t  echo EXPORTS > $output_objdir/$soname.def;\n\t  cat $export_symbols >> $output_objdir/$soname.def;\n\tfi~\n\t$CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'\n      else\n\tld_shlibs_F77=no\n      fi\n      ;;\n\n    interix3*)\n      hardcode_direct_F77=no\n      hardcode_shlibpath_var_F77=no\n      hardcode_libdir_flag_spec_F77='${wl}-rpath,$libdir'\n      export_dynamic_flag_spec_F77='${wl}-E'\n      # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.\n      # Instead, shared libraries are loaded at an image base (0x10000000 by\n      # default) and relocated if they conflict, which is a slow very memory\n      # consuming and fragmenting process.  To avoid this, we pick a random,\n      # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link\n      # time.  Moving up from 0x10000000 also allows more sbrk(2) space.\n      archive_cmds_F77='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \\* 262144 + 1342177280` -o $lib'\n      archive_expsym_cmds_F77='sed \"s,^,_,\" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \\* 262144 + 1342177280` -o $lib'\n      ;;\n\n    linux* | k*bsd*-gnu)\n      if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then\n\ttmp_addflag=\n\tcase $cc_basename,$host_cpu in\n\tpgcc*)\t\t\t\t# Portland Group C compiler\n\t  whole_archive_flag_spec_F77='${wl}--whole-archive`for conv in $convenience\\\"\\\"; do test  -n \\\"$conv\\\" && new_convenience=\\\"$new_convenience,$conv\\\"; done; $echo \\\"$new_convenience\\\"` ${wl}--no-whole-archive'\n\t  tmp_addflag=' $pic_flag'\n\t  ;;\n\tpgf77* | pgf90* | pgf95*)\t# Portland Group f77 and f90 compilers\n\t  whole_archive_flag_spec_F77='${wl}--whole-archive`for conv in $convenience\\\"\\\"; do test  -n \\\"$conv\\\" && new_convenience=\\\"$new_convenience,$conv\\\"; done; $echo \\\"$new_convenience\\\"` ${wl}--no-whole-archive'\n\t  tmp_addflag=' $pic_flag -Mnomain' ;;\n\tecc*,ia64* | icc*,ia64*)\t\t# Intel C compiler on ia64\n\t  tmp_addflag=' -i_dynamic' ;;\n\tefc*,ia64* | ifort*,ia64*)\t# Intel Fortran compiler on ia64\n\t  tmp_addflag=' -i_dynamic -nofor_main' ;;\n\tifc* | ifort*)\t\t\t# Intel Fortran compiler\n\t  tmp_addflag=' -nofor_main' ;;\n\tesac\n\tarchive_cmds_F77='$CC -shared'\"$tmp_addflag\"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'\n\n\tif test $supports_anon_versioning = yes; then\n\t  archive_expsym_cmds_F77='$echo \"{ global:\" > $output_objdir/$libname.ver~\n  cat $export_symbols | sed -e \"s/\\(.*\\)/\\1;/\" >> $output_objdir/$libname.ver~\n  $echo \"local: *; };\" >> $output_objdir/$libname.ver~\n\t  $CC -shared'\"$tmp_addflag\"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'\n\tfi\n\tlink_all_deplibs_F77=no\n      else\n\tld_shlibs_F77=no\n      fi\n      ;;\n\n    netbsd* | netbsdelf*-gnu)\n      if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then\n\tarchive_cmds_F77='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'\n\twlarc=\n      else\n\tarchive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'\n\tarchive_expsym_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'\n      fi\n      ;;\n\n    solaris*)\n      if $LD -v 2>&1 | grep 'BFD 2\\.8' > /dev/null; then\n\tld_shlibs_F77=no\n\tcat <<EOF 1>&2\n\n*** Warning: The releases 2.8.* of the GNU linker cannot reliably\n*** create shared libraries on Solaris systems.  Therefore, libtool\n*** is disabling shared libraries support.  We urge you to upgrade GNU\n*** binutils to release 2.9.1 or newer.  Another option is to modify\n*** your PATH or compiler configuration so that the native linker is\n*** used, and then restart.\n\nEOF\n      elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then\n\tarchive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'\n\tarchive_expsym_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'\n      else\n\tld_shlibs_F77=no\n      fi\n      ;;\n\n    sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*)\n      case `$LD -v 2>&1` in\n        *\\ [01].* | *\\ 2.[0-9].* | *\\ 2.1[0-5].*)\n\tld_shlibs_F77=no\n\tcat <<_LT_EOF 1>&2\n\n*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not\n*** reliably create shared libraries on SCO systems.  Therefore, libtool\n*** is disabling shared libraries support.  We urge you to upgrade GNU\n*** binutils to release 2.16.91.0.3 or newer.  Another option is to modify\n*** your PATH or compiler configuration so that the native linker is\n*** used, and then restart.\n\n_LT_EOF\n\t;;\n\t*)\n\t  if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then\n\t    hardcode_libdir_flag_spec_F77='`test -z \"$SCOABSPATH\" && echo ${wl}-rpath,$libdir`'\n\t    archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\\${SCOABSPATH:+${install_libdir}/}$soname -o $lib'\n\t    archive_expsym_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\\${SCOABSPATH:+${install_libdir}/}$soname,-retain-symbols-file,$export_symbols -o $lib'\n\t  else\n\t    ld_shlibs_F77=no\n\t  fi\n\t;;\n      esac\n      ;;\n\n    sunos4*)\n      archive_cmds_F77='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'\n      wlarc=\n      hardcode_direct_F77=yes\n      hardcode_shlibpath_var_F77=no\n      ;;\n\n    *)\n      if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then\n\tarchive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'\n\tarchive_expsym_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'\n      else\n\tld_shlibs_F77=no\n      fi\n      ;;\n    esac\n\n    if test \"$ld_shlibs_F77\" = no; then\n      runpath_var=\n      hardcode_libdir_flag_spec_F77=\n      export_dynamic_flag_spec_F77=\n      whole_archive_flag_spec_F77=\n    fi\n  else\n    # PORTME fill in a description of your system's linker (not GNU ld)\n    case $host_os in\n    aix3*)\n      allow_undefined_flag_F77=unsupported\n      always_export_symbols_F77=yes\n      archive_expsym_cmds_F77='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname'\n      # Note: this linker hardcodes the directories in LIBPATH if there\n      # are no directories specified by -L.\n      hardcode_minus_L_F77=yes\n      if test \"$GCC\" = yes && test -z \"$lt_prog_compiler_static\"; then\n\t# Neither direct hardcoding nor static linking is supported with a\n\t# broken collect2.\n\thardcode_direct_F77=unsupported\n      fi\n      ;;\n\n    aix4* | aix5*)\n      if test \"$host_cpu\" = ia64; then\n\t# On IA64, the linker does run time linking by default, so we don't\n\t# have to do anything special.\n\taix_use_runtimelinking=no\n\texp_sym_flag='-Bexport'\n\tno_entry_flag=\"\"\n      else\n\t# If we're using GNU nm, then we don't want the \"-C\" option.\n\t# -C means demangle to AIX nm, but means don't demangle with GNU nm\n\tif $NM -V 2>&1 | grep 'GNU' > /dev/null; then\n\t  export_symbols_cmds_F77='$NM -Bpg $libobjs $convenience | awk '\\''{ if (((\\$2 == \"T\") || (\\$2 == \"D\") || (\\$2 == \"B\")) && (substr(\\$3,1,1) != \".\")) { print \\$3 } }'\\'' | sort -u > $export_symbols'\n\telse\n\t  export_symbols_cmds_F77='$NM -BCpg $libobjs $convenience | awk '\\''{ if (((\\$2 == \"T\") || (\\$2 == \"D\") || (\\$2 == \"B\")) && (substr(\\$3,1,1) != \".\")) { print \\$3 } }'\\'' | sort -u > $export_symbols'\n\tfi\n\taix_use_runtimelinking=no\n\n\t# Test if we are trying to use run time linking or normal\n\t# AIX style linking. If -brtl is somewhere in LDFLAGS, we\n\t# need to do runtime linking.\n\tcase $host_os in aix4.[23]|aix4.[23].*|aix5*)\n\t  for ld_flag in $LDFLAGS; do\n  \t  if (test $ld_flag = \"-brtl\" || test $ld_flag = \"-Wl,-brtl\"); then\n  \t    aix_use_runtimelinking=yes\n  \t    break\n  \t  fi\n\t  done\n\t  ;;\n\tesac\n\n\texp_sym_flag='-bexport'\n\tno_entry_flag='-bnoentry'\n      fi\n\n      # When large executables or shared objects are built, AIX ld can\n      # have problems creating the table of contents.  If linking a library\n      # or program results in \"error TOC overflow\" add -mminimal-toc to\n      # CXXFLAGS/CFLAGS for g++/gcc.  In the cases where that is not\n      # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.\n\n      archive_cmds_F77=''\n      hardcode_direct_F77=yes\n      hardcode_libdir_separator_F77=':'\n      link_all_deplibs_F77=yes\n\n      if test \"$GCC\" = yes; then\n\tcase $host_os in aix4.[012]|aix4.[012].*)\n\t# We only want to do this on AIX 4.2 and lower, the check\n\t# below for broken collect2 doesn't work under 4.3+\n\t  collect2name=`${CC} -print-prog-name=collect2`\n\t  if test -f \"$collect2name\" && \\\n  \t   strings \"$collect2name\" | grep resolve_lib_name >/dev/null\n\t  then\n  \t  # We have reworked collect2\n  \t  hardcode_direct_F77=yes\n\t  else\n  \t  # We have old collect2\n  \t  hardcode_direct_F77=unsupported\n  \t  # It fails to find uninstalled libraries when the uninstalled\n  \t  # path is not listed in the libpath.  Setting hardcode_minus_L\n  \t  # to unsupported forces relinking\n  \t  hardcode_minus_L_F77=yes\n  \t  hardcode_libdir_flag_spec_F77='-L$libdir'\n  \t  hardcode_libdir_separator_F77=\n\t  fi\n\t  ;;\n\tesac\n\tshared_flag='-shared'\n\tif test \"$aix_use_runtimelinking\" = yes; then\n\t  shared_flag=\"$shared_flag \"'${wl}-G'\n\tfi\n      else\n\t# not using gcc\n\tif test \"$host_cpu\" = ia64; then\n  \t# VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release\n  \t# chokes on -Wl,-G. The following line is correct:\n\t  shared_flag='-G'\n\telse\n\t  if test \"$aix_use_runtimelinking\" = yes; then\n\t    shared_flag='${wl}-G'\n\t  else\n\t    shared_flag='${wl}-bM:SRE'\n\t  fi\n\tfi\n      fi\n\n      # It seems that -bexpall does not export symbols beginning with\n      # underscore (_), so it is better to generate a list of symbols to export.\n      always_export_symbols_F77=yes\n      if test \"$aix_use_runtimelinking\" = yes; then\n\t# Warning - without using the other runtime loading flags (-brtl),\n\t# -berok will link without error, but may produce a broken library.\n\tallow_undefined_flag_F77='-berok'\n       # Determine the default libpath from the value encoded in an empty executable.\n       cat >conftest.$ac_ext <<_ACEOF\n      program main\n\n      end\n_ACEOF\nrm -f conftest.$ac_objext conftest$ac_exeext\nif { (eval echo \"$as_me:$LINENO: \\\"$ac_link\\\"\") >&5\n  (eval $ac_link) 2>conftest.er1\n  ac_status=$?\n  grep -v '^ *+' conftest.er1 >conftest.err\n  rm -f conftest.er1\n  cat conftest.err >&5\n  echo \"$as_me:$LINENO: \\$? = $ac_status\" >&5\n  (exit $ac_status); } &&\n\t { ac_try='test -z \"$ac_f77_werror_flag\"\n\t\t\t || test ! -s conftest.err'\n  { (eval echo \"$as_me:$LINENO: \\\"$ac_try\\\"\") >&5\n  (eval $ac_try) 2>&5\n  ac_status=$?\n  echo \"$as_me:$LINENO: \\$? = $ac_status\" >&5\n  (exit $ac_status); }; } &&\n\t { ac_try='test -s conftest$ac_exeext'\n  { (eval echo \"$as_me:$LINENO: \\\"$ac_try\\\"\") >&5\n  (eval $ac_try) 2>&5\n  ac_status=$?\n  echo \"$as_me:$LINENO: \\$? = $ac_status\" >&5\n  (exit $ac_status); }; }; then\n\naix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0  *\\(.*\\)$/\\1/; p; }\n}'`\n# Check for a 64-bit object if we didn't find anything.\nif test -z \"$aix_libpath\"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0  *\\(.*\\)$/\\1/; p; }\n}'`; fi\nelse\n  echo \"$as_me: failed program was:\" >&5\nsed 's/^/| /' conftest.$ac_ext >&5\n\n\nfi\n\nrm -f conftest.err conftest.$ac_objext \\\n      conftest$ac_exeext conftest.$ac_ext\nif test -z \"$aix_libpath\"; then aix_libpath=\"/usr/lib:/lib\"; fi\n\n       hardcode_libdir_flag_spec_F77='${wl}-blibpath:$libdir:'\"$aix_libpath\"\n\tarchive_expsym_cmds_F77=\"\\$CC\"' -o $output_objdir/$soname $libobjs $deplibs '\"\\${wl}$no_entry_flag\"' $compiler_flags `if test \"x${allow_undefined_flag}\" != \"x\"; then echo \"${wl}${allow_undefined_flag}\"; else :; fi` '\"\\${wl}$exp_sym_flag:\\$export_symbols $shared_flag\"\n       else\n\tif test \"$host_cpu\" = ia64; then\n\t  hardcode_libdir_flag_spec_F77='${wl}-R $libdir:/usr/lib:/lib'\n\t  allow_undefined_flag_F77=\"-z nodefs\"\n\t  archive_expsym_cmds_F77=\"\\$CC $shared_flag\"' -o $output_objdir/$soname $libobjs $deplibs '\"\\${wl}$no_entry_flag\"' $compiler_flags ${wl}${allow_undefined_flag} '\"\\${wl}$exp_sym_flag:\\$export_symbols\"\n\telse\n\t # Determine the default libpath from the value encoded in an empty executable.\n\t cat >conftest.$ac_ext <<_ACEOF\n      program main\n\n      end\n_ACEOF\nrm -f conftest.$ac_objext conftest$ac_exeext\nif { (eval echo \"$as_me:$LINENO: \\\"$ac_link\\\"\") >&5\n  (eval $ac_link) 2>conftest.er1\n  ac_status=$?\n  grep -v '^ *+' conftest.er1 >conftest.err\n  rm -f conftest.er1\n  cat conftest.err >&5\n  echo \"$as_me:$LINENO: \\$? = $ac_status\" >&5\n  (exit $ac_status); } &&\n\t { ac_try='test -z \"$ac_f77_werror_flag\"\n\t\t\t || test ! -s conftest.err'\n  { (eval echo \"$as_me:$LINENO: \\\"$ac_try\\\"\") >&5\n  (eval $ac_try) 2>&5\n  ac_status=$?\n  echo \"$as_me:$LINENO: \\$? = $ac_status\" >&5\n  (exit $ac_status); }; } &&\n\t { ac_try='test -s conftest$ac_exeext'\n  { (eval echo \"$as_me:$LINENO: \\\"$ac_try\\\"\") >&5\n  (eval $ac_try) 2>&5\n  ac_status=$?\n  echo \"$as_me:$LINENO: \\$? = $ac_status\" >&5\n  (exit $ac_status); }; }; then\n\naix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0  *\\(.*\\)$/\\1/; p; }\n}'`\n# Check for a 64-bit object if we didn't find anything.\nif test -z \"$aix_libpath\"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0  *\\(.*\\)$/\\1/; p; }\n}'`; fi\nelse\n  echo \"$as_me: failed program was:\" >&5\nsed 's/^/| /' conftest.$ac_ext >&5\n\n\nfi\n\nrm -f conftest.err conftest.$ac_objext \\\n      conftest$ac_exeext conftest.$ac_ext\nif test -z \"$aix_libpath\"; then aix_libpath=\"/usr/lib:/lib\"; fi\n\n\t hardcode_libdir_flag_spec_F77='${wl}-blibpath:$libdir:'\"$aix_libpath\"\n\t  # Warning - without using the other run time loading flags,\n\t  # -berok will link without error, but may produce a broken library.\n\t  no_undefined_flag_F77=' ${wl}-bernotok'\n\t  allow_undefined_flag_F77=' ${wl}-berok'\n\t  # Exported symbols can be pulled into shared objects from archives\n\t  whole_archive_flag_spec_F77='$convenience'\n\t  archive_cmds_need_lc_F77=yes\n\t  # This is similar to how AIX traditionally builds its shared libraries.\n\t  archive_expsym_cmds_F77=\"\\$CC $shared_flag\"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'\n\tfi\n      fi\n      ;;\n\n    amigaos*)\n      archive_cmds_F77='$rm $output_objdir/a2ixlibrary.data~$echo \"#define NAME $libname\" > $output_objdir/a2ixlibrary.data~$echo \"#define LIBRARY_ID 1\" >> $output_objdir/a2ixlibrary.data~$echo \"#define VERSION $major\" >> $output_objdir/a2ixlibrary.data~$echo \"#define REVISION $revision\" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'\n      hardcode_libdir_flag_spec_F77='-L$libdir'\n      hardcode_minus_L_F77=yes\n      # see comment about different semantics on the GNU ld section\n      ld_shlibs_F77=no\n      ;;\n\n    bsdi[45]*)\n      export_dynamic_flag_spec_F77=-rdynamic\n      ;;\n\n    cygwin* | mingw* | pw32*)\n      # When not using gcc, we currently assume that we are using\n      # Microsoft Visual C++.\n      # hardcode_libdir_flag_spec is actually meaningless, as there is\n      # no search path for DLLs.\n      hardcode_libdir_flag_spec_F77=' '\n      allow_undefined_flag_F77=unsupported\n      # Tell ltmain to make .lib files, not .a files.\n      libext=lib\n      # Tell ltmain to make .dll files, not .so files.\n      shrext_cmds=\".dll\"\n      # FIXME: Setting linknames here is a bad hack.\n      archive_cmds_F77='$CC -o $lib $libobjs $compiler_flags `echo \"$deplibs\" | $SED -e '\\''s/ -lc$//'\\''` -link -dll~linknames='\n      # The linker will automatically build a .lib file if we build a DLL.\n      old_archive_From_new_cmds_F77='true'\n      # FIXME: Should let the user specify the lib program.\n      old_archive_cmds_F77='lib /OUT:$oldlib$oldobjs$old_deplibs'\n      fix_srcfile_path_F77='`cygpath -w \"$srcfile\"`'\n      enable_shared_with_static_runtimes_F77=yes\n      ;;\n\n    darwin* | rhapsody*)\n      case $host_os in\n        rhapsody* | darwin1.[012])\n         allow_undefined_flag_F77='${wl}-undefined ${wl}suppress'\n         ;;\n       *) # Darwin 1.3 on\n         if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then\n           allow_undefined_flag_F77='${wl}-flat_namespace ${wl}-undefined ${wl}suppress'\n         else\n           case ${MACOSX_DEPLOYMENT_TARGET} in\n             10.[012])\n               allow_undefined_flag_F77='${wl}-flat_namespace ${wl}-undefined ${wl}suppress'\n               ;;\n             10.*)\n               allow_undefined_flag_F77='${wl}-undefined ${wl}dynamic_lookup'\n               ;;\n           esac\n         fi\n         ;;\n      esac\n      archive_cmds_need_lc_F77=no\n      hardcode_direct_F77=no\n      hardcode_automatic_F77=yes\n      hardcode_shlibpath_var_F77=unsupported\n      whole_archive_flag_spec_F77=''\n      link_all_deplibs_F77=yes\n    if test \"$GCC\" = yes ; then\n    \toutput_verbose_link_cmd='echo'\n        archive_cmds_F77='$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring'\n      module_cmds_F77='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags'\n      # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds\n      archive_expsym_cmds_F77='sed -e \"s,#.*,,\" -e \"s,^[    ]*,,\" -e \"s,^\\(..*\\),_&,\" < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'\n      module_expsym_cmds_F77='sed -e \"s,#.*,,\" -e \"s,^[    ]*,,\" -e \"s,^\\(..*\\),_&,\" < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag  -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'\n    else\n      case $cc_basename in\n        xlc*)\n         output_verbose_link_cmd='echo'\n         archive_cmds_F77='$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $verstring'\n         module_cmds_F77='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags'\n          # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds\n         archive_expsym_cmds_F77='sed -e \"s,#.*,,\" -e \"s,^[    ]*,,\" -e \"s,^\\(..*\\),_&,\" < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'\n          module_expsym_cmds_F77='sed -e \"s,#.*,,\" -e \"s,^[    ]*,,\" -e \"s,^\\(..*\\),_&,\" < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag  -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'\n          ;;\n       *)\n         ld_shlibs_F77=no\n          ;;\n      esac\n    fi\n      ;;\n\n    dgux*)\n      archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'\n      hardcode_libdir_flag_spec_F77='-L$libdir'\n      hardcode_shlibpath_var_F77=no\n      ;;\n\n    freebsd1*)\n      ld_shlibs_F77=no\n      ;;\n\n    # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor\n    # support.  Future versions do this automatically, but an explicit c++rt0.o\n    # does not break anything, and helps significantly (at the cost of a little\n    # extra space).\n    freebsd2.2*)\n      archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o'\n      hardcode_libdir_flag_spec_F77='-R$libdir'\n      hardcode_direct_F77=yes\n      hardcode_shlibpath_var_F77=no\n      ;;\n\n    # Unfortunately, older versions of FreeBSD 2 do not have this feature.\n    freebsd2*)\n      archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'\n      hardcode_direct_F77=yes\n      hardcode_minus_L_F77=yes\n      hardcode_shlibpath_var_F77=no\n      ;;\n\n    # FreeBSD 3 and greater uses gcc -shared to do shared libraries.\n    freebsd* | dragonfly*)\n      archive_cmds_F77='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'\n      hardcode_libdir_flag_spec_F77='-R$libdir'\n      hardcode_direct_F77=yes\n      hardcode_shlibpath_var_F77=no\n      ;;\n\n    hpux9*)\n      if test \"$GCC\" = yes; then\n\tarchive_cmds_F77='$rm $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'\n      else\n\tarchive_cmds_F77='$rm $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'\n      fi\n      hardcode_libdir_flag_spec_F77='${wl}+b ${wl}$libdir'\n      hardcode_libdir_separator_F77=:\n      hardcode_direct_F77=yes\n\n      # hardcode_minus_L: Not really in the search PATH,\n      # but as the default location of the library.\n      hardcode_minus_L_F77=yes\n      export_dynamic_flag_spec_F77='${wl}-E'\n      ;;\n\n    hpux10*)\n      if test \"$GCC\" = yes -a \"$with_gnu_ld\" = no; then\n\tarchive_cmds_F77='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'\n      else\n\tarchive_cmds_F77='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'\n      fi\n      if test \"$with_gnu_ld\" = no; then\n\thardcode_libdir_flag_spec_F77='${wl}+b ${wl}$libdir'\n\thardcode_libdir_separator_F77=:\n\n\thardcode_direct_F77=yes\n\texport_dynamic_flag_spec_F77='${wl}-E'\n\n\t# hardcode_minus_L: Not really in the search PATH,\n\t# but as the default location of the library.\n\thardcode_minus_L_F77=yes\n      fi\n      ;;\n\n    hpux11*)\n      if test \"$GCC\" = yes -a \"$with_gnu_ld\" = no; then\n\tcase $host_cpu in\n\thppa*64*)\n\t  archive_cmds_F77='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'\n\t  ;;\n\tia64*)\n\t  archive_cmds_F77='$CC -shared ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'\n\t  ;;\n\t*)\n\t  archive_cmds_F77='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'\n\t  ;;\n\tesac\n      else\n\tcase $host_cpu in\n\thppa*64*)\n\t  archive_cmds_F77='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'\n\t  ;;\n\tia64*)\n\t  archive_cmds_F77='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'\n\t  ;;\n\t*)\n\t  archive_cmds_F77='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'\n\t  ;;\n\tesac\n      fi\n      if test \"$with_gnu_ld\" = no; then\n\thardcode_libdir_flag_spec_F77='${wl}+b ${wl}$libdir'\n\thardcode_libdir_separator_F77=:\n\n\tcase $host_cpu in\n\thppa*64*|ia64*)\n\t  hardcode_libdir_flag_spec_ld_F77='+b $libdir'\n\t  hardcode_direct_F77=no\n\t  hardcode_shlibpath_var_F77=no\n\t  ;;\n\t*)\n\t  hardcode_direct_F77=yes\n\t  export_dynamic_flag_spec_F77='${wl}-E'\n\n\t  # hardcode_minus_L: Not really in the search PATH,\n\t  # but as the default location of the library.\n\t  hardcode_minus_L_F77=yes\n\t  ;;\n\tesac\n      fi\n      ;;\n\n    irix5* | irix6* | nonstopux*)\n      if test \"$GCC\" = yes; then\n\tarchive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n \"$verstring\" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'\n      else\n\tarchive_cmds_F77='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n \"$verstring\" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'\n\thardcode_libdir_flag_spec_ld_F77='-rpath $libdir'\n      fi\n      hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir'\n      hardcode_libdir_separator_F77=:\n      link_all_deplibs_F77=yes\n      ;;\n\n    netbsd* | netbsdelf*-gnu)\n      if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then\n\tarchive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'  # a.out\n      else\n\tarchive_cmds_F77='$LD -shared -o $lib $libobjs $deplibs $linker_flags'      # ELF\n      fi\n      hardcode_libdir_flag_spec_F77='-R$libdir'\n      hardcode_direct_F77=yes\n      hardcode_shlibpath_var_F77=no\n      ;;\n\n    newsos6)\n      archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'\n      hardcode_direct_F77=yes\n      hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir'\n      hardcode_libdir_separator_F77=:\n      hardcode_shlibpath_var_F77=no\n      ;;\n\n    openbsd*)\n      hardcode_direct_F77=yes\n      hardcode_shlibpath_var_F77=no\n      if test -z \"`echo __ELF__ | $CC -E - | grep __ELF__`\" || test \"$host_os-$host_cpu\" = \"openbsd2.8-powerpc\"; then\n\tarchive_cmds_F77='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'\n\tarchive_expsym_cmds_F77='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols'\n\thardcode_libdir_flag_spec_F77='${wl}-rpath,$libdir'\n\texport_dynamic_flag_spec_F77='${wl}-E'\n      else\n       case $host_os in\n\t openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*)\n\t   archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'\n\t   hardcode_libdir_flag_spec_F77='-R$libdir'\n\t   ;;\n\t *)\n\t   archive_cmds_F77='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'\n\t   hardcode_libdir_flag_spec_F77='${wl}-rpath,$libdir'\n\t   ;;\n       esac\n      fi\n      ;;\n\n    os2*)\n      hardcode_libdir_flag_spec_F77='-L$libdir'\n      hardcode_minus_L_F77=yes\n      allow_undefined_flag_F77=unsupported\n      archive_cmds_F77='$echo \"LIBRARY $libname INITINSTANCE\" > $output_objdir/$libname.def~$echo \"DESCRIPTION \\\"$libname\\\"\" >> $output_objdir/$libname.def~$echo DATA >> $output_objdir/$libname.def~$echo \" SINGLE NONSHARED\" >> $output_objdir/$libname.def~$echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def'\n      old_archive_From_new_cmds_F77='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def'\n      ;;\n\n    osf3*)\n      if test \"$GCC\" = yes; then\n\tallow_undefined_flag_F77=' ${wl}-expect_unresolved ${wl}\\*'\n\tarchive_cmds_F77='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n \"$verstring\" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'\n      else\n\tallow_undefined_flag_F77=' -expect_unresolved \\*'\n\tarchive_cmds_F77='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n \"$verstring\" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'\n      fi\n      hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir'\n      hardcode_libdir_separator_F77=:\n      ;;\n\n    osf4* | osf5*)\t# as osf3* with the addition of -msym flag\n      if test \"$GCC\" = yes; then\n\tallow_undefined_flag_F77=' ${wl}-expect_unresolved ${wl}\\*'\n\tarchive_cmds_F77='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n \"$verstring\" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'\n\thardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir'\n      else\n\tallow_undefined_flag_F77=' -expect_unresolved \\*'\n\tarchive_cmds_F77='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n \"$verstring\" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'\n\tarchive_expsym_cmds_F77='for i in `cat $export_symbols`; do printf \"%s %s\\\\n\" -exported_symbol \"\\$i\" >> $lib.exp; done; echo \"-hidden\">> $lib.exp~\n\t$LD -shared${allow_undefined_flag} -input $lib.exp $linker_flags $libobjs $deplibs -soname $soname `test -n \"$verstring\" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib~$rm $lib.exp'\n\n\t# Both c and cxx compiler support -rpath directly\n\thardcode_libdir_flag_spec_F77='-rpath $libdir'\n      fi\n      hardcode_libdir_separator_F77=:\n      ;;\n\n    solaris*)\n      no_undefined_flag_F77=' -z text'\n      if test \"$GCC\" = yes; then\n\twlarc='${wl}'\n\tarchive_cmds_F77='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'\n\tarchive_expsym_cmds_F77='$echo \"{ global:\" > $lib.exp~cat $export_symbols | $SED -e \"s/\\(.*\\)/\\1;/\" >> $lib.exp~$echo \"local: *; };\" >> $lib.exp~\n\t  $CC -shared ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$rm $lib.exp'\n      else\n\twlarc=''\n\tarchive_cmds_F77='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'\n\tarchive_expsym_cmds_F77='$echo \"{ global:\" > $lib.exp~cat $export_symbols | $SED -e \"s/\\(.*\\)/\\1;/\" >> $lib.exp~$echo \"local: *; };\" >> $lib.exp~\n  \t$LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp'\n      fi\n      hardcode_libdir_flag_spec_F77='-R$libdir'\n      hardcode_shlibpath_var_F77=no\n      case $host_os in\n      solaris2.[0-5] | solaris2.[0-5].*) ;;\n      *)\n \t# The compiler driver will combine linker options so we\n \t# cannot just pass the convience library names through\n \t# without $wl, iff we do not link with $LD.\n \t# Luckily, gcc supports the same syntax we need for Sun Studio.\n \t# Supported since Solaris 2.6 (maybe 2.5.1?)\n \tcase $wlarc in\n \t'')\n \t  whole_archive_flag_spec_F77='-z allextract$convenience -z defaultextract' ;;\n \t*)\n \t  whole_archive_flag_spec_F77='${wl}-z ${wl}allextract`for conv in $convenience\\\"\\\"; do test -n \\\"$conv\\\" && new_convenience=\\\"$new_convenience,$conv\\\"; done; $echo \\\"$new_convenience\\\"` ${wl}-z ${wl}defaultextract' ;;\n \tesac ;;\n      esac\n      link_all_deplibs_F77=yes\n      ;;\n\n    sunos4*)\n      if test \"x$host_vendor\" = xsequent; then\n\t# Use $CC to link under sequent, because it throws in some extra .o\n\t# files that make .init and .fini sections work.\n\tarchive_cmds_F77='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags'\n      else\n\tarchive_cmds_F77='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags'\n      fi\n      hardcode_libdir_flag_spec_F77='-L$libdir'\n      hardcode_direct_F77=yes\n      hardcode_minus_L_F77=yes\n      hardcode_shlibpath_var_F77=no\n      ;;\n\n    sysv4)\n      case $host_vendor in\n\tsni)\n\t  archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'\n\t  hardcode_direct_F77=yes # is this really true???\n\t;;\n\tsiemens)\n\t  ## LD is ld it makes a PLAMLIB\n\t  ## CC just makes a GrossModule.\n\t  archive_cmds_F77='$LD -G -o $lib $libobjs $deplibs $linker_flags'\n\t  reload_cmds_F77='$CC -r -o $output$reload_objs'\n\t  hardcode_direct_F77=no\n        ;;\n\tmotorola)\n\t  archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'\n\t  hardcode_direct_F77=no #Motorola manual says yes, but my tests say they lie\n\t;;\n      esac\n      runpath_var='LD_RUN_PATH'\n      hardcode_shlibpath_var_F77=no\n      ;;\n\n    sysv4.3*)\n      archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'\n      hardcode_shlibpath_var_F77=no\n      export_dynamic_flag_spec_F77='-Bexport'\n      ;;\n\n    sysv4*MP*)\n      if test -d /usr/nec; then\n\tarchive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'\n\thardcode_shlibpath_var_F77=no\n\trunpath_var=LD_RUN_PATH\n\thardcode_runpath_var=yes\n\tld_shlibs_F77=yes\n      fi\n      ;;\n\n    sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7*)\n      no_undefined_flag_F77='${wl}-z,text'\n      archive_cmds_need_lc_F77=no\n      hardcode_shlibpath_var_F77=no\n      runpath_var='LD_RUN_PATH'\n\n      if test \"$GCC\" = yes; then\n\tarchive_cmds_F77='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'\n\tarchive_expsym_cmds_F77='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'\n      else\n\tarchive_cmds_F77='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'\n\tarchive_expsym_cmds_F77='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'\n      fi\n      ;;\n\n    sysv5* | sco3.2v5* | sco5v6*)\n      # Note: We can NOT use -z defs as we might desire, because we do not\n      # link with -lc, and that would cause any symbols used from libc to\n      # always be unresolved, which means just about no library would\n      # ever link correctly.  If we're not using GNU ld we use -z text\n      # though, which does catch some bad symbols but isn't as heavy-handed\n      # as -z defs.\n      no_undefined_flag_F77='${wl}-z,text'\n      allow_undefined_flag_F77='${wl}-z,nodefs'\n      archive_cmds_need_lc_F77=no\n      hardcode_shlibpath_var_F77=no\n      hardcode_libdir_flag_spec_F77='`test -z \"$SCOABSPATH\" && echo ${wl}-R,$libdir`'\n      hardcode_libdir_separator_F77=':'\n      link_all_deplibs_F77=yes\n      export_dynamic_flag_spec_F77='${wl}-Bexport'\n      runpath_var='LD_RUN_PATH'\n\n      if test \"$GCC\" = yes; then\n\tarchive_cmds_F77='$CC -shared ${wl}-h,\\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'\n\tarchive_expsym_cmds_F77='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,\\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'\n      else\n\tarchive_cmds_F77='$CC -G ${wl}-h,\\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'\n\tarchive_expsym_cmds_F77='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,\\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'\n      fi\n      ;;\n\n    uts4*)\n      archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'\n      hardcode_libdir_flag_spec_F77='-L$libdir'\n      hardcode_shlibpath_var_F77=no\n      ;;\n\n    *)\n      ld_shlibs_F77=no\n      ;;\n    esac\n  fi\n\n{ echo \"$as_me:$LINENO: result: $ld_shlibs_F77\" >&5\necho \"${ECHO_T}$ld_shlibs_F77\" >&6; }\ntest \"$ld_shlibs_F77\" = no && can_build_shared=no\n\n#\n# Do we need to explicitly link libc?\n#\ncase \"x$archive_cmds_need_lc_F77\" in\nx|xyes)\n  # Assume -lc should be added\n  archive_cmds_need_lc_F77=yes\n\n  if test \"$enable_shared\" = yes && test \"$GCC\" = yes; then\n    case $archive_cmds_F77 in\n    *'~'*)\n      # FIXME: we may have to deal with multi-command sequences.\n      ;;\n    '$CC '*)\n      # Test whether the compiler implicitly links with -lc since on some\n      # systems, -lgcc has to come before -lc. If gcc already passes -lc\n      # to ld, don't add -lc before -lgcc.\n      { echo \"$as_me:$LINENO: checking whether -lc should be explicitly linked in\" >&5\necho $ECHO_N \"checking whether -lc should be explicitly linked in... $ECHO_C\" >&6; }\n      $rm conftest*\n      printf \"$lt_simple_compile_test_code\" > conftest.$ac_ext\n\n      if { (eval echo \"$as_me:$LINENO: \\\"$ac_compile\\\"\") >&5\n  (eval $ac_compile) 2>&5\n  ac_status=$?\n  echo \"$as_me:$LINENO: \\$? = $ac_status\" >&5\n  (exit $ac_status); } 2>conftest.err; then\n        soname=conftest\n        lib=conftest\n        libobjs=conftest.$ac_objext\n        deplibs=\n        wl=$lt_prog_compiler_wl_F77\n\tpic_flag=$lt_prog_compiler_pic_F77\n        compiler_flags=-v\n        linker_flags=-v\n        verstring=\n        output_objdir=.\n        libname=conftest\n        lt_save_allow_undefined_flag=$allow_undefined_flag_F77\n        allow_undefined_flag_F77=\n        if { (eval echo \"$as_me:$LINENO: \\\"$archive_cmds_F77 2\\>\\&1 \\| grep \\\" -lc \\\" \\>/dev/null 2\\>\\&1\\\"\") >&5\n  (eval $archive_cmds_F77 2\\>\\&1 \\| grep \\\" -lc \\\" \\>/dev/null 2\\>\\&1) 2>&5\n  ac_status=$?\n  echo \"$as_me:$LINENO: \\$? = $ac_status\" >&5\n  (exit $ac_status); }\n        then\n\t  archive_cmds_need_lc_F77=no\n        else\n\t  archive_cmds_need_lc_F77=yes\n        fi\n        allow_undefined_flag_F77=$lt_save_allow_undefined_flag\n      else\n        cat conftest.err 1>&5\n      fi\n      $rm conftest*\n      { echo \"$as_me:$LINENO: result: $archive_cmds_need_lc_F77\" >&5\necho \"${ECHO_T}$archive_cmds_need_lc_F77\" >&6; }\n      ;;\n    esac\n  fi\n  ;;\nesac\n\n{ echo \"$as_me:$LINENO: checking dynamic linker characteristics\" >&5\necho $ECHO_N \"checking dynamic linker characteristics... $ECHO_C\" >&6; }\nlibrary_names_spec=\nlibname_spec='lib$name'\nsoname_spec=\nshrext_cmds=\".so\"\npostinstall_cmds=\npostuninstall_cmds=\nfinish_cmds=\nfinish_eval=\nshlibpath_var=\nshlibpath_overrides_runpath=unknown\nversion_type=none\ndynamic_linker=\"$host_os ld.so\"\nsys_lib_dlsearch_path_spec=\"/lib /usr/lib\"\nif test \"$GCC\" = yes; then\n  sys_lib_search_path_spec=`$CC -print-search-dirs | grep \"^libraries:\" | $SED -e \"s/^libraries://\" -e \"s,=/,/,g\"`\n  if echo \"$sys_lib_search_path_spec\" | grep ';' >/dev/null ; then\n    # if the path contains \";\" then we assume it to be the separator\n    # otherwise default to the standard path separator (i.e. \":\") - it is\n    # assumed that no part of a normal pathname contains \";\" but that should\n    # okay in the real world where \";\" in dirpaths is itself problematic.\n    sys_lib_search_path_spec=`echo \"$sys_lib_search_path_spec\" | $SED -e 's/;/ /g'`\n  else\n    sys_lib_search_path_spec=`echo \"$sys_lib_search_path_spec\" | $SED  -e \"s/$PATH_SEPARATOR/ /g\"`\n  fi\nelse\n  sys_lib_search_path_spec=\"/lib /usr/lib /usr/local/lib\"\nfi\nneed_lib_prefix=unknown\nhardcode_into_libs=no\n\n# when you set need_version to no, make sure it does not cause -set_version\n# flags to be left without arguments\nneed_version=unknown\n\ncase $host_os in\naix3*)\n  version_type=linux\n  library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a'\n  shlibpath_var=LIBPATH\n\n  # AIX 3 has no versioning support, so we append a major version to the name.\n  soname_spec='${libname}${release}${shared_ext}$major'\n  ;;\n\naix4* | aix5*)\n  version_type=linux\n  need_lib_prefix=no\n  need_version=no\n  hardcode_into_libs=yes\n  if test \"$host_cpu\" = ia64; then\n    # AIX 5 supports IA64\n    library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}'\n    shlibpath_var=LD_LIBRARY_PATH\n  else\n    # With GCC up to 2.95.x, collect2 would create an import file\n    # for dependence libraries.  The import file would start with\n    # the line `#! .'.  This would cause the generated library to\n    # depend on `.', always an invalid library.  This was fixed in\n    # development snapshots of GCC prior to 3.0.\n    case $host_os in\n      aix4 | aix4.[01] | aix4.[01].*)\n      if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'\n\t   echo ' yes '\n\t   echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then\n\t:\n      else\n\tcan_build_shared=no\n      fi\n      ;;\n    esac\n    # AIX (on Power*) has no versioning support, so currently we can not hardcode correct\n    # soname into executable. Probably we can add versioning support to\n    # collect2, so additional links can be useful in future.\n    if test \"$aix_use_runtimelinking\" = yes; then\n      # If using run time linking (on AIX 4.2 or later) use lib<name>.so\n      # instead of lib<name>.a to let people know that these are not\n      # typical AIX shared libraries.\n      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'\n    else\n      # We preserve .a as extension for shared libraries through AIX4.2\n      # and later when we are not doing run time linking.\n      library_names_spec='${libname}${release}.a $libname.a'\n      soname_spec='${libname}${release}${shared_ext}$major'\n    fi\n    shlibpath_var=LIBPATH\n  fi\n  ;;\n\namigaos*)\n  library_names_spec='$libname.ixlibrary $libname.a'\n  # Create ${libname}_ixlibrary.a entries in /sys/libs.\n  finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo \"X$lib\" | $Xsed -e '\\''s%^.*/\\([^/]*\\)\\.ixlibrary$%\\1%'\\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show \"cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a\"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'\n  ;;\n\nbeos*)\n  library_names_spec='${libname}${shared_ext}'\n  dynamic_linker=\"$host_os ld.so\"\n  shlibpath_var=LIBRARY_PATH\n  ;;\n\nbsdi[45]*)\n  version_type=linux\n  need_version=no\n  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'\n  soname_spec='${libname}${release}${shared_ext}$major'\n  finish_cmds='PATH=\"\\$PATH:/sbin\" ldconfig $libdir'\n  shlibpath_var=LD_LIBRARY_PATH\n  sys_lib_search_path_spec=\"/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib\"\n  sys_lib_dlsearch_path_spec=\"/shlib /usr/lib /usr/local/lib\"\n  # the default ld.so.conf also contains /usr/contrib/lib and\n  # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow\n  # libtool to hard-code these into programs\n  ;;\n\ncygwin* | mingw* | pw32*)\n  version_type=windows\n  shrext_cmds=\".dll\"\n  need_version=no\n  need_lib_prefix=no\n\n  case $GCC,$host_os in\n  yes,cygwin* | yes,mingw* | yes,pw32*)\n    library_names_spec='$libname.dll.a'\n    # DLL is installed to $(libdir)/../bin by postinstall_cmds\n    postinstall_cmds='base_file=`basename \\${file}`~\n      dlpath=`$SHELL 2>&1 -c '\\''. $dir/'\\''\\${base_file}'\\''i;echo \\$dlname'\\''`~\n      dldir=$destdir/`dirname \\$dlpath`~\n      test -d \\$dldir || mkdir -p \\$dldir~\n      $install_prog $dir/$dlname \\$dldir/$dlname~\n      chmod a+x \\$dldir/$dlname'\n    postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\\''. $file; echo \\$dlname'\\''`~\n      dlpath=$dir/\\$dldll~\n       $rm \\$dlpath'\n    shlibpath_overrides_runpath=yes\n\n    case $host_os in\n    cygwin*)\n      # Cygwin DLLs use 'cyg' prefix rather than 'lib'\n      soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'\n      sys_lib_search_path_spec=\"/usr/lib /lib/w32api /lib /usr/local/lib\"\n      ;;\n    mingw*)\n      # MinGW DLLs use traditional 'lib' prefix\n      soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'\n      sys_lib_search_path_spec=`$CC -print-search-dirs | grep \"^libraries:\" | $SED -e \"s/^libraries://\" -e \"s,=/,/,g\"`\n      if echo \"$sys_lib_search_path_spec\" | grep ';[c-zC-Z]:/' >/dev/null; then\n        # It is most probably a Windows format PATH printed by\n        # mingw gcc, but we are running on Cygwin. Gcc prints its search\n        # path with ; separators, and with drive letters. We can handle the\n        # drive letters (cygwin fileutils understands them), so leave them,\n        # especially as we might pass files found there to a mingw objdump,\n        # which wouldn't understand a cygwinified path. Ahh.\n        sys_lib_search_path_spec=`echo \"$sys_lib_search_path_spec\" | $SED -e 's/;/ /g'`\n      else\n        sys_lib_search_path_spec=`echo \"$sys_lib_search_path_spec\" | $SED  -e \"s/$PATH_SEPARATOR/ /g\"`\n      fi\n      ;;\n    pw32*)\n      # pw32 DLLs use 'pw' prefix rather than 'lib'\n      library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'\n      ;;\n    esac\n    ;;\n\n  *)\n    library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib'\n    ;;\n  esac\n  dynamic_linker='Win32 ld.exe'\n  # FIXME: first we should search . and the directory the executable is in\n  shlibpath_var=PATH\n  ;;\n\ndarwin* | rhapsody*)\n  dynamic_linker=\"$host_os dyld\"\n  version_type=darwin\n  need_lib_prefix=no\n  need_version=no\n  library_names_spec='${libname}${release}${versuffix}$shared_ext ${libname}${release}${major}$shared_ext ${libname}$shared_ext'\n  soname_spec='${libname}${release}${major}$shared_ext'\n  shlibpath_overrides_runpath=yes\n  shlibpath_var=DYLD_LIBRARY_PATH\n  shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`'\n  # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same.\n  if test \"$GCC\" = yes; then\n    sys_lib_search_path_spec=`$CC -print-search-dirs | tr \"\\n\" \"$PATH_SEPARATOR\" | sed -e 's/libraries:/@libraries:/' | tr \"@\" \"\\n\" | grep \"^libraries:\" | sed -e \"s/^libraries://\" -e \"s,=/,/,g\" -e \"s,$PATH_SEPARATOR, ,g\" -e \"s,.*,& /lib /usr/lib /usr/local/lib,g\"`\n  else\n    sys_lib_search_path_spec='/lib /usr/lib /usr/local/lib'\n  fi\n  sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'\n  ;;\n\ndgux*)\n  version_type=linux\n  need_lib_prefix=no\n  need_version=no\n  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext'\n  soname_spec='${libname}${release}${shared_ext}$major'\n  shlibpath_var=LD_LIBRARY_PATH\n  ;;\n\nfreebsd1*)\n  dynamic_linker=no\n  ;;\n\nfreebsd* | dragonfly*)\n  # DragonFly does not have aout.  When/if they implement a new\n  # versioning mechanism, adjust this.\n  if test -x /usr/bin/objformat; then\n    objformat=`/usr/bin/objformat`\n  else\n    case $host_os in\n    freebsd[123]*) objformat=aout ;;\n    *) objformat=elf ;;\n    esac\n  fi\n  version_type=freebsd-$objformat\n  case $version_type in\n    freebsd-elf*)\n      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'\n      need_version=no\n      need_lib_prefix=no\n      ;;\n    freebsd-*)\n      library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix'\n      need_version=yes\n      ;;\n  esac\n  shlibpath_var=LD_LIBRARY_PATH\n  case $host_os in\n  freebsd2*)\n    shlibpath_overrides_runpath=yes\n    ;;\n  freebsd3.[01]* | freebsdelf3.[01]*)\n    shlibpath_overrides_runpath=yes\n    hardcode_into_libs=yes\n    ;;\n  freebsd3.[2-9]* | freebsdelf3.[2-9]* | \\\n  freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1)\n    shlibpath_overrides_runpath=no\n    hardcode_into_libs=yes\n    ;;\n  freebsd*) # from 4.6 on\n    shlibpath_overrides_runpath=yes\n    hardcode_into_libs=yes\n    ;;\n  esac\n  ;;\n\ngnu*)\n  version_type=linux\n  need_lib_prefix=no\n  need_version=no\n  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'\n  soname_spec='${libname}${release}${shared_ext}$major'\n  shlibpath_var=LD_LIBRARY_PATH\n  hardcode_into_libs=yes\n  ;;\n\nhpux9* | hpux10* | hpux11*)\n  # Give a soname corresponding to the major version so that dld.sl refuses to\n  # link against other versions.\n  version_type=sunos\n  need_lib_prefix=no\n  need_version=no\n  case $host_cpu in\n  ia64*)\n    shrext_cmds='.so'\n    hardcode_into_libs=yes\n    dynamic_linker=\"$host_os dld.so\"\n    shlibpath_var=LD_LIBRARY_PATH\n    shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.\n    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'\n    soname_spec='${libname}${release}${shared_ext}$major'\n    if test \"X$HPUX_IA64_MODE\" = X32; then\n      sys_lib_search_path_spec=\"/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib\"\n    else\n      sys_lib_search_path_spec=\"/usr/lib/hpux64 /usr/local/lib/hpux64\"\n    fi\n    sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec\n    ;;\n   hppa*64*)\n     shrext_cmds='.sl'\n     hardcode_into_libs=yes\n     dynamic_linker=\"$host_os dld.sl\"\n     shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH\n     shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.\n     library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'\n     soname_spec='${libname}${release}${shared_ext}$major'\n     sys_lib_search_path_spec=\"/usr/lib/pa20_64 /usr/ccs/lib/pa20_64\"\n     sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec\n     ;;\n   *)\n    shrext_cmds='.sl'\n    dynamic_linker=\"$host_os dld.sl\"\n    shlibpath_var=SHLIB_PATH\n    shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH\n    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'\n    soname_spec='${libname}${release}${shared_ext}$major'\n    ;;\n  esac\n  # HP-UX runs *really* slowly unless shared libraries are mode 555.\n  postinstall_cmds='chmod 555 $lib'\n  ;;\n\ninterix3*)\n  version_type=linux\n  need_lib_prefix=no\n  need_version=no\n  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'\n  soname_spec='${libname}${release}${shared_ext}$major'\n  dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)'\n  shlibpath_var=LD_LIBRARY_PATH\n  shlibpath_overrides_runpath=no\n  hardcode_into_libs=yes\n  ;;\n\nirix5* | irix6* | nonstopux*)\n  case $host_os in\n    nonstopux*) version_type=nonstopux ;;\n    *)\n\tif test \"$lt_cv_prog_gnu_ld\" = yes; then\n\t\tversion_type=linux\n\telse\n\t\tversion_type=irix\n\tfi ;;\n  esac\n  need_lib_prefix=no\n  need_version=no\n  soname_spec='${libname}${release}${shared_ext}$major'\n  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}'\n  case $host_os in\n  irix5* | nonstopux*)\n    libsuff= shlibsuff=\n    ;;\n  *)\n    case $LD in # libtool.m4 will add one of these switches to LD\n    *-32|*\"-32 \"|*-melf32bsmip|*\"-melf32bsmip \")\n      libsuff= shlibsuff= libmagic=32-bit;;\n    *-n32|*\"-n32 \"|*-melf32bmipn32|*\"-melf32bmipn32 \")\n      libsuff=32 shlibsuff=N32 libmagic=N32;;\n    *-64|*\"-64 \"|*-melf64bmip|*\"-melf64bmip \")\n      libsuff=64 shlibsuff=64 libmagic=64-bit;;\n    *) libsuff= shlibsuff= libmagic=never-match;;\n    esac\n    ;;\n  esac\n  shlibpath_var=LD_LIBRARY${shlibsuff}_PATH\n  shlibpath_overrides_runpath=no\n  sys_lib_search_path_spec=\"/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}\"\n  sys_lib_dlsearch_path_spec=\"/usr/lib${libsuff} /lib${libsuff}\"\n  hardcode_into_libs=yes\n  ;;\n\n# No shared lib support for Linux oldld, aout, or coff.\nlinux*oldld* | linux*aout* | linux*coff*)\n  dynamic_linker=no\n  ;;\n\n# This must be Linux ELF.\nlinux* | k*bsd*-gnu)\n  version_type=linux\n  need_lib_prefix=no\n  need_version=no\n  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'\n  soname_spec='${libname}${release}${shared_ext}$major'\n  finish_cmds='PATH=\"\\$PATH:/sbin\" ldconfig -n $libdir'\n  shlibpath_var=LD_LIBRARY_PATH\n  shlibpath_overrides_runpath=no\n  # This implies no fast_install, which is unacceptable.\n  # Some rework will be needed to allow for fast_install\n  # before this can be enabled.\n  hardcode_into_libs=yes\n\n  # Append ld.so.conf contents to the search path\n  if test -f /etc/ld.so.conf; then\n    lt_ld_extra=`awk '/^include / { system(sprintf(\"cd /etc; cat %s\", \\$2)); skip = 1; } { if (!skip) print \\$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;s/[:,\t]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\\n' ' '`\n    sys_lib_dlsearch_path_spec=\"/lib /usr/lib $lt_ld_extra\"\n  fi\n\n  # We used to test for /lib/ld.so.1 and disable shared libraries on\n  # powerpc, because MkLinux only supported shared libraries with the\n  # GNU dynamic linker.  Since this was broken with cross compilers,\n  # most powerpc-linux boxes support dynamic linking these days and\n  # people can always --disable-shared, the test was removed, and we\n  # assume the GNU/Linux dynamic linker is in use.\n  dynamic_linker='GNU/Linux ld.so'\n  ;;\n\nnetbsdelf*-gnu)\n  version_type=linux\n  need_lib_prefix=no\n  need_version=no\n  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'\n  soname_spec='${libname}${release}${shared_ext}$major'\n  shlibpath_var=LD_LIBRARY_PATH\n  shlibpath_overrides_runpath=no\n  hardcode_into_libs=yes\n  dynamic_linker='NetBSD ld.elf_so'\n  ;;\n\nnetbsd*)\n  version_type=sunos\n  need_lib_prefix=no\n  need_version=no\n  if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then\n    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'\n    finish_cmds='PATH=\"\\$PATH:/sbin\" ldconfig -m $libdir'\n    dynamic_linker='NetBSD (a.out) ld.so'\n  else\n    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'\n    soname_spec='${libname}${release}${shared_ext}$major'\n    dynamic_linker='NetBSD ld.elf_so'\n  fi\n  shlibpath_var=LD_LIBRARY_PATH\n  shlibpath_overrides_runpath=yes\n  hardcode_into_libs=yes\n  ;;\n\nnewsos6)\n  version_type=linux\n  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'\n  shlibpath_var=LD_LIBRARY_PATH\n  shlibpath_overrides_runpath=yes\n  ;;\n\nnto-qnx*)\n  version_type=linux\n  need_lib_prefix=no\n  need_version=no\n  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'\n  soname_spec='${libname}${release}${shared_ext}$major'\n  shlibpath_var=LD_LIBRARY_PATH\n  shlibpath_overrides_runpath=yes\n  ;;\n\nopenbsd*)\n  version_type=sunos\n  sys_lib_dlsearch_path_spec=\"/usr/lib\"\n  need_lib_prefix=no\n  # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs.\n  case $host_os in\n    openbsd3.3 | openbsd3.3.*) need_version=yes ;;\n    *)                         need_version=no  ;;\n  esac\n  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'\n  finish_cmds='PATH=\"\\$PATH:/sbin\" ldconfig -m $libdir'\n  shlibpath_var=LD_LIBRARY_PATH\n  if test -z \"`echo __ELF__ | $CC -E - | grep __ELF__`\" || test \"$host_os-$host_cpu\" = \"openbsd2.8-powerpc\"; then\n    case $host_os in\n      openbsd2.[89] | openbsd2.[89].*)\n\tshlibpath_overrides_runpath=no\n\t;;\n      *)\n\tshlibpath_overrides_runpath=yes\n\t;;\n      esac\n  else\n    shlibpath_overrides_runpath=yes\n  fi\n  ;;\n\nos2*)\n  libname_spec='$name'\n  shrext_cmds=\".dll\"\n  need_lib_prefix=no\n  library_names_spec='$libname${shared_ext} $libname.a'\n  dynamic_linker='OS/2 ld.exe'\n  shlibpath_var=LIBPATH\n  ;;\n\nosf3* | osf4* | osf5*)\n  version_type=osf\n  need_lib_prefix=no\n  need_version=no\n  soname_spec='${libname}${release}${shared_ext}$major'\n  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'\n  shlibpath_var=LD_LIBRARY_PATH\n  sys_lib_search_path_spec=\"/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib\"\n  sys_lib_dlsearch_path_spec=\"$sys_lib_search_path_spec\"\n  ;;\n\nsolaris*)\n  version_type=linux\n  need_lib_prefix=no\n  need_version=no\n  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'\n  soname_spec='${libname}${release}${shared_ext}$major'\n  shlibpath_var=LD_LIBRARY_PATH\n  shlibpath_overrides_runpath=yes\n  hardcode_into_libs=yes\n  # ldd complains unless libraries are executable\n  postinstall_cmds='chmod +x $lib'\n  ;;\n\nsunos4*)\n  version_type=sunos\n  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'\n  finish_cmds='PATH=\"\\$PATH:/usr/etc\" ldconfig $libdir'\n  shlibpath_var=LD_LIBRARY_PATH\n  shlibpath_overrides_runpath=yes\n  if test \"$with_gnu_ld\" = yes; then\n    need_lib_prefix=no\n  fi\n  need_version=yes\n  ;;\n\nsysv4 | sysv4.3*)\n  version_type=linux\n  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'\n  soname_spec='${libname}${release}${shared_ext}$major'\n  shlibpath_var=LD_LIBRARY_PATH\n  case $host_vendor in\n    sni)\n      shlibpath_overrides_runpath=no\n      need_lib_prefix=no\n      export_dynamic_flag_spec='${wl}-Blargedynsym'\n      runpath_var=LD_RUN_PATH\n      ;;\n    siemens)\n      need_lib_prefix=no\n      ;;\n    motorola)\n      need_lib_prefix=no\n      need_version=no\n      shlibpath_overrides_runpath=no\n      sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'\n      ;;\n  esac\n  ;;\n\nsysv4*MP*)\n  if test -d /usr/nec ;then\n    version_type=linux\n    library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}'\n    soname_spec='$libname${shared_ext}.$major'\n    shlibpath_var=LD_LIBRARY_PATH\n  fi\n  ;;\n\nsysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)\n  version_type=freebsd-elf\n  need_lib_prefix=no\n  need_version=no\n  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'\n  soname_spec='${libname}${release}${shared_ext}$major'\n  shlibpath_var=LD_LIBRARY_PATH\n  hardcode_into_libs=yes\n  if test \"$with_gnu_ld\" = yes; then\n    sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib'\n    shlibpath_overrides_runpath=no\n  else\n    sys_lib_search_path_spec='/usr/ccs/lib /usr/lib'\n    shlibpath_overrides_runpath=yes\n    case $host_os in\n      sco3.2v5*)\n        sys_lib_search_path_spec=\"$sys_lib_search_path_spec /lib\"\n\t;;\n    esac\n  fi\n  sys_lib_dlsearch_path_spec='/usr/lib'\n  ;;\n\nuts4*)\n  version_type=linux\n  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'\n  soname_spec='${libname}${release}${shared_ext}$major'\n  shlibpath_var=LD_LIBRARY_PATH\n  ;;\n\n*)\n  dynamic_linker=no\n  ;;\nesac\n{ echo \"$as_me:$LINENO: result: $dynamic_linker\" >&5\necho \"${ECHO_T}$dynamic_linker\" >&6; }\ntest \"$dynamic_linker\" = no && can_build_shared=no\n\nvariables_saved_for_relink=\"PATH $shlibpath_var $runpath_var\"\nif test \"$GCC\" = yes; then\n  variables_saved_for_relink=\"$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH\"\nfi\n\n{ echo \"$as_me:$LINENO: checking how to hardcode library paths into programs\" >&5\necho $ECHO_N \"checking how to hardcode library paths into programs... $ECHO_C\" >&6; }\nhardcode_action_F77=\nif test -n \"$hardcode_libdir_flag_spec_F77\" || \\\n   test -n \"$runpath_var_F77\" || \\\n   test \"X$hardcode_automatic_F77\" = \"Xyes\" ; then\n\n  # We can hardcode non-existant directories.\n  if test \"$hardcode_direct_F77\" != no &&\n     # If the only mechanism to avoid hardcoding is shlibpath_var, we\n     # have to relink, otherwise we might link with an installed library\n     # when we should be linking with a yet-to-be-installed one\n     ## test \"$_LT_AC_TAGVAR(hardcode_shlibpath_var, F77)\" != no &&\n     test \"$hardcode_minus_L_F77\" != no; then\n    # Linking always hardcodes the temporary library directory.\n    hardcode_action_F77=relink\n  else\n    # We can link without hardcoding, and we can hardcode nonexisting dirs.\n    hardcode_action_F77=immediate\n  fi\nelse\n  # We cannot hardcode anything, or else we can only hardcode existing\n  # directories.\n  hardcode_action_F77=unsupported\nfi\n{ echo \"$as_me:$LINENO: result: $hardcode_action_F77\" >&5\necho \"${ECHO_T}$hardcode_action_F77\" >&6; }\n\nif test \"$hardcode_action_F77\" = relink; then\n  # Fast installation is not supported\n  enable_fast_install=no\nelif test \"$shlibpath_overrides_runpath\" = yes ||\n     test \"$enable_shared\" = no; then\n  # Fast installation is not necessary\n  enable_fast_install=needless\nfi\n\n\n# The else clause should only fire when bootstrapping the\n# libtool distribution, otherwise you forgot to ship ltmain.sh\n# with your package, and you will get complaints that there are\n# no rules to generate ltmain.sh.\nif test -f \"$ltmain\"; then\n  # See if we are running on zsh, and set the options which allow our commands through\n  # without removal of \\ escapes.\n  if test -n \"${ZSH_VERSION+set}\" ; then\n    setopt NO_GLOB_SUBST\n  fi\n  # Now quote all the things that may contain metacharacters while being\n  # careful not to overquote the AC_SUBSTed values.  We take copies of the\n  # variables and quote the copies for generation of the libtool script.\n  for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC LTCFLAGS NM \\\n    SED SHELL STRIP \\\n    libname_spec library_names_spec soname_spec extract_expsyms_cmds \\\n    old_striplib striplib file_magic_cmd finish_cmds finish_eval \\\n    deplibs_check_method reload_flag reload_cmds need_locks \\\n    lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \\\n    lt_cv_sys_global_symbol_to_c_name_address \\\n    sys_lib_search_path_spec sys_lib_dlsearch_path_spec \\\n    old_postinstall_cmds old_postuninstall_cmds \\\n    compiler_F77 \\\n    CC_F77 \\\n    LD_F77 \\\n    lt_prog_compiler_wl_F77 \\\n    lt_prog_compiler_pic_F77 \\\n    lt_prog_compiler_static_F77 \\\n    lt_prog_compiler_no_builtin_flag_F77 \\\n    export_dynamic_flag_spec_F77 \\\n    thread_safe_flag_spec_F77 \\\n    whole_archive_flag_spec_F77 \\\n    enable_shared_with_static_runtimes_F77 \\\n    old_archive_cmds_F77 \\\n    old_archive_from_new_cmds_F77 \\\n    predep_objects_F77 \\\n    postdep_objects_F77 \\\n    predeps_F77 \\\n    postdeps_F77 \\\n    compiler_lib_search_path_F77 \\\n    archive_cmds_F77 \\\n    archive_expsym_cmds_F77 \\\n    postinstall_cmds_F77 \\\n    postuninstall_cmds_F77 \\\n    old_archive_from_expsyms_cmds_F77 \\\n    allow_undefined_flag_F77 \\\n    no_undefined_flag_F77 \\\n    export_symbols_cmds_F77 \\\n    hardcode_libdir_flag_spec_F77 \\\n    hardcode_libdir_flag_spec_ld_F77 \\\n    hardcode_libdir_separator_F77 \\\n    hardcode_automatic_F77 \\\n    module_cmds_F77 \\\n    module_expsym_cmds_F77 \\\n    lt_cv_prog_compiler_c_o_F77 \\\n    exclude_expsyms_F77 \\\n    include_expsyms_F77; do\n\n    case $var in\n    old_archive_cmds_F77 | \\\n    old_archive_from_new_cmds_F77 | \\\n    archive_cmds_F77 | \\\n    archive_expsym_cmds_F77 | \\\n    module_cmds_F77 | \\\n    module_expsym_cmds_F77 | \\\n    old_archive_from_expsyms_cmds_F77 | \\\n    export_symbols_cmds_F77 | \\\n    extract_expsyms_cmds | reload_cmds | finish_cmds | \\\n    postinstall_cmds | postuninstall_cmds | \\\n    old_postinstall_cmds | old_postuninstall_cmds | \\\n    sys_lib_search_path_spec | sys_lib_dlsearch_path_spec)\n      # Double-quote double-evaled strings.\n      eval \"lt_$var=\\\\\\\"\\`\\$echo \\\"X\\$$var\\\" | \\$Xsed -e \\\"\\$double_quote_subst\\\" -e \\\"\\$sed_quote_subst\\\" -e \\\"\\$delay_variable_subst\\\"\\`\\\\\\\"\"\n      ;;\n    *)\n      eval \"lt_$var=\\\\\\\"\\`\\$echo \\\"X\\$$var\\\" | \\$Xsed -e \\\"\\$sed_quote_subst\\\"\\`\\\\\\\"\"\n      ;;\n    esac\n  done\n\n  case $lt_echo in\n  *'\\$0 --fallback-echo\"')\n    lt_echo=`$echo \"X$lt_echo\" | $Xsed -e 's/\\\\\\\\\\\\\\$0 --fallback-echo\"$/$0 --fallback-echo\"/'`\n    ;;\n  esac\n\ncfgfile=\"$ofile\"\n\n  cat <<__EOF__ >> \"$cfgfile\"\n# ### BEGIN LIBTOOL TAG CONFIG: $tagname\n\n# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:\n\n# Shell to use when invoking shell scripts.\nSHELL=$lt_SHELL\n\n# Whether or not to build shared libraries.\nbuild_libtool_libs=$enable_shared\n\n# Whether or not to build static libraries.\nbuild_old_libs=$enable_static\n\n# Whether or not to add -lc for building shared libraries.\nbuild_libtool_need_lc=$archive_cmds_need_lc_F77\n\n# Whether or not to disallow shared libs when runtime libs are static\nallow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_F77\n\n# Whether or not to optimize for fast installation.\nfast_install=$enable_fast_install\n\n# The host system.\nhost_alias=$host_alias\nhost=$host\nhost_os=$host_os\n\n# The build system.\nbuild_alias=$build_alias\nbuild=$build\nbuild_os=$build_os\n\n# An echo program that does not interpret backslashes.\necho=$lt_echo\n\n# The archiver.\nAR=$lt_AR\nAR_FLAGS=$lt_AR_FLAGS\n\n# A C compiler.\nLTCC=$lt_LTCC\n\n# LTCC compiler flags.\nLTCFLAGS=$lt_LTCFLAGS\n\n# A language-specific compiler.\nCC=$lt_compiler_F77\n\n# Is the compiler the GNU C compiler?\nwith_gcc=$GCC_F77\n\n# An ERE matcher.\nEGREP=$lt_EGREP\n\n# The linker used to build libraries.\nLD=$lt_LD_F77\n\n# Whether we need hard or soft links.\nLN_S=$lt_LN_S\n\n# A BSD-compatible nm program.\nNM=$lt_NM\n\n# A symbol stripping program\nSTRIP=$lt_STRIP\n\n# Used to examine libraries when file_magic_cmd begins \"file\"\nMAGIC_CMD=$MAGIC_CMD\n\n# Used on cygwin: DLL creation program.\nDLLTOOL=\"$DLLTOOL\"\n\n# Used on cygwin: object dumper.\nOBJDUMP=\"$OBJDUMP\"\n\n# Used on cygwin: assembler.\nAS=\"$AS\"\n\n# The name of the directory that contains temporary libtool files.\nobjdir=$objdir\n\n# How to create reloadable object files.\nreload_flag=$lt_reload_flag\nreload_cmds=$lt_reload_cmds\n\n# How to pass a linker flag through the compiler.\nwl=$lt_lt_prog_compiler_wl_F77\n\n# Object file suffix (normally \"o\").\nobjext=\"$ac_objext\"\n\n# Old archive suffix (normally \"a\").\nlibext=\"$libext\"\n\n# Shared library suffix (normally \".so\").\nshrext_cmds='$shrext_cmds'\n\n# Executable file suffix (normally \"\").\nexeext=\"$exeext\"\n\n# Additional compiler flags for building library objects.\npic_flag=$lt_lt_prog_compiler_pic_F77\npic_mode=$pic_mode\n\n# What is the maximum length of a command?\nmax_cmd_len=$lt_cv_sys_max_cmd_len\n\n# Does compiler simultaneously support -c and -o options?\ncompiler_c_o=$lt_lt_cv_prog_compiler_c_o_F77\n\n# Must we lock files when doing compilation?\nneed_locks=$lt_need_locks\n\n# Do we need the lib prefix for modules?\nneed_lib_prefix=$need_lib_prefix\n\n# Do we need a version for libraries?\nneed_version=$need_version\n\n# Whether dlopen is supported.\ndlopen_support=$enable_dlopen\n\n# Whether dlopen of programs is supported.\ndlopen_self=$enable_dlopen_self\n\n# Whether dlopen of statically linked programs is supported.\ndlopen_self_static=$enable_dlopen_self_static\n\n# Compiler flag to prevent dynamic linking.\nlink_static_flag=$lt_lt_prog_compiler_static_F77\n\n# Compiler flag to turn off builtin functions.\nno_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_F77\n\n# Compiler flag to allow reflexive dlopens.\nexport_dynamic_flag_spec=$lt_export_dynamic_flag_spec_F77\n\n# Compiler flag to generate shared objects directly from archives.\nwhole_archive_flag_spec=$lt_whole_archive_flag_spec_F77\n\n# Compiler flag to generate thread-safe objects.\nthread_safe_flag_spec=$lt_thread_safe_flag_spec_F77\n\n# Library versioning type.\nversion_type=$version_type\n\n# Format of library name prefix.\nlibname_spec=$lt_libname_spec\n\n# List of archive names.  First name is the real one, the rest are links.\n# The last name is the one that the linker finds with -lNAME.\nlibrary_names_spec=$lt_library_names_spec\n\n# The coded name of the library, if different from the real name.\nsoname_spec=$lt_soname_spec\n\n# Commands used to build and install an old-style archive.\nRANLIB=$lt_RANLIB\nold_archive_cmds=$lt_old_archive_cmds_F77\nold_postinstall_cmds=$lt_old_postinstall_cmds\nold_postuninstall_cmds=$lt_old_postuninstall_cmds\n\n# Create an old-style archive from a shared archive.\nold_archive_from_new_cmds=$lt_old_archive_from_new_cmds_F77\n\n# Create a temporary old-style archive to link instead of a shared archive.\nold_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_F77\n\n# Commands used to build and install a shared archive.\narchive_cmds=$lt_archive_cmds_F77\narchive_expsym_cmds=$lt_archive_expsym_cmds_F77\npostinstall_cmds=$lt_postinstall_cmds\npostuninstall_cmds=$lt_postuninstall_cmds\n\n# Commands used to build a loadable module (assumed same as above if empty)\nmodule_cmds=$lt_module_cmds_F77\nmodule_expsym_cmds=$lt_module_expsym_cmds_F77\n\n# Commands to strip libraries.\nold_striplib=$lt_old_striplib\nstriplib=$lt_striplib\n\n# Dependencies to place before the objects being linked to create a\n# shared library.\npredep_objects=$lt_predep_objects_F77\n\n# Dependencies to place after the objects being linked to create a\n# shared library.\npostdep_objects=$lt_postdep_objects_F77\n\n# Dependencies to place before the objects being linked to create a\n# shared library.\npredeps=$lt_predeps_F77\n\n# Dependencies to place after the objects being linked to create a\n# shared library.\npostdeps=$lt_postdeps_F77\n\n# The library search path used internally by the compiler when linking\n# a shared library.\ncompiler_lib_search_path=$lt_compiler_lib_search_path_F77\n\n# Method to check whether dependent libraries are shared objects.\ndeplibs_check_method=$lt_deplibs_check_method\n\n# Command to use when deplibs_check_method == file_magic.\nfile_magic_cmd=$lt_file_magic_cmd\n\n# Flag that allows shared libraries with undefined symbols to be built.\nallow_undefined_flag=$lt_allow_undefined_flag_F77\n\n# Flag that forces no undefined symbols.\nno_undefined_flag=$lt_no_undefined_flag_F77\n\n# Commands used to finish a libtool library installation in a directory.\nfinish_cmds=$lt_finish_cmds\n\n# Same as above, but a single script fragment to be evaled but not shown.\nfinish_eval=$lt_finish_eval\n\n# Take the output of nm and produce a listing of raw symbols and C names.\nglobal_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe\n\n# Transform the output of nm in a proper C declaration\nglobal_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl\n\n# Transform the output of nm in a C name address pair\nglobal_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address\n\n# This is the shared library runtime path variable.\nrunpath_var=$runpath_var\n\n# This is the shared library path variable.\nshlibpath_var=$shlibpath_var\n\n# Is shlibpath searched before the hard-coded library search path?\nshlibpath_overrides_runpath=$shlibpath_overrides_runpath\n\n# How to hardcode a shared library path into an executable.\nhardcode_action=$hardcode_action_F77\n\n# Whether we should hardcode library paths into libraries.\nhardcode_into_libs=$hardcode_into_libs\n\n# Flag to hardcode \\$libdir into a binary during linking.\n# This must work even if \\$libdir does not exist.\nhardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_F77\n\n# If ld is used when linking, flag to hardcode \\$libdir into\n# a binary during linking. This must work even if \\$libdir does\n# not exist.\nhardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_F77\n\n# Whether we need a single -rpath flag with a separated argument.\nhardcode_libdir_separator=$lt_hardcode_libdir_separator_F77\n\n# Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the\n# resulting binary.\nhardcode_direct=$hardcode_direct_F77\n\n# Set to yes if using the -LDIR flag during linking hardcodes DIR into the\n# resulting binary.\nhardcode_minus_L=$hardcode_minus_L_F77\n\n# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into\n# the resulting binary.\nhardcode_shlibpath_var=$hardcode_shlibpath_var_F77\n\n# Set to yes if building a shared library automatically hardcodes DIR into the library\n# and all subsequent libraries and executables linked against it.\nhardcode_automatic=$hardcode_automatic_F77\n\n# Variables whose values should be saved in libtool wrapper scripts and\n# restored at relink time.\nvariables_saved_for_relink=\"$variables_saved_for_relink\"\n\n# Whether libtool must link a program against all its dependency libraries.\nlink_all_deplibs=$link_all_deplibs_F77\n\n# Compile-time system search path for libraries\nsys_lib_search_path_spec=$lt_sys_lib_search_path_spec\n\n# Run-time system search path for libraries\nsys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec\n\n# Fix the shell variable \\$srcfile for the compiler.\nfix_srcfile_path=\"$fix_srcfile_path_F77\"\n\n# Set to yes if exported symbols are required.\nalways_export_symbols=$always_export_symbols_F77\n\n# The commands to list exported symbols.\nexport_symbols_cmds=$lt_export_symbols_cmds_F77\n\n# The commands to extract the exported symbol list from a shared archive.\nextract_expsyms_cmds=$lt_extract_expsyms_cmds\n\n# Symbols that should not be listed in the preloaded symbols.\nexclude_expsyms=$lt_exclude_expsyms_F77\n\n# Symbols that must always be exported.\ninclude_expsyms=$lt_include_expsyms_F77\n\n# ### END LIBTOOL TAG CONFIG: $tagname\n\n__EOF__\n\n\nelse\n  # If there is no Makefile yet, we rely on a make rule to execute\n  # `config.status --recheck' to rerun these tests and create the\n  # libtool script then.\n  ltmain_in=`echo $ltmain | sed -e 's/\\.sh$/.in/'`\n  if test -f \"$ltmain_in\"; then\n    test -f Makefile && make \"$ltmain\"\n  fi\nfi\n\n\nac_ext=c\nac_cpp='$CPP $CPPFLAGS'\nac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'\nac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'\nac_compiler_gnu=$ac_cv_c_compiler_gnu\n\nCC=\"$lt_save_CC\"\n\n\telse\n\t  tagname=\"\"\n\tfi\n\t;;\n\n      GCJ)\n\tif test -n \"$GCJ\" && test \"X$GCJ\" != \"Xno\"; then\n\n\n# Source file extension for Java test sources.\nac_ext=java\n\n# Object file extension for compiled Java test sources.\nobjext=o\nobjext_GCJ=$objext\n\n# Code to be used in simple compile tests\nlt_simple_compile_test_code=\"class foo {}\\n\"\n\n# Code to be used in simple link tests\nlt_simple_link_test_code='public class conftest { public static void main(String[] argv) {}; }\\n'\n\n# ltmain only uses $CC for tagged configurations so make sure $CC is set.\n\n# If no C compiler was specified, use CC.\nLTCC=${LTCC-\"$CC\"}\n\n# If no C compiler flags were specified, use CFLAGS.\nLTCFLAGS=${LTCFLAGS-\"$CFLAGS\"}\n\n# Allow CC to be a program name with arguments.\ncompiler=$CC\n\n\n# save warnings/boilerplate of simple test code\nac_outfile=conftest.$ac_objext\nprintf \"$lt_simple_compile_test_code\" >conftest.$ac_ext\neval \"$ac_compile\" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err\n_lt_compiler_boilerplate=`cat conftest.err`\n$rm conftest*\n\nac_outfile=conftest.$ac_objext\nprintf \"$lt_simple_link_test_code\" >conftest.$ac_ext\neval \"$ac_link\" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err\n_lt_linker_boilerplate=`cat conftest.err`\n$rm conftest*\n\n\n# Allow CC to be a program name with arguments.\nlt_save_CC=\"$CC\"\nCC=${GCJ-\"gcj\"}\ncompiler=$CC\ncompiler_GCJ=$CC\nfor cc_temp in $compiler\"\"; do\n  case $cc_temp in\n    compile | *[\\\\/]compile | ccache | *[\\\\/]ccache ) ;;\n    distcc | *[\\\\/]distcc | purify | *[\\\\/]purify ) ;;\n    \\-*) ;;\n    *) break;;\n  esac\ndone\ncc_basename=`$echo \"X$cc_temp\" | $Xsed -e 's%.*/%%' -e \"s%^$host_alias-%%\"`\n\n\n# GCJ did not exist at the time GCC didn't implicitly link libc in.\narchive_cmds_need_lc_GCJ=no\n\nold_archive_cmds_GCJ=$old_archive_cmds\n\n\nlt_prog_compiler_no_builtin_flag_GCJ=\n\nif test \"$GCC\" = yes; then\n  lt_prog_compiler_no_builtin_flag_GCJ=' -fno-builtin'\n\n\n{ echo \"$as_me:$LINENO: checking if $compiler supports -fno-rtti -fno-exceptions\" >&5\necho $ECHO_N \"checking if $compiler supports -fno-rtti -fno-exceptions... $ECHO_C\" >&6; }\nif test \"${lt_cv_prog_compiler_rtti_exceptions+set}\" = set; then\n  echo $ECHO_N \"(cached) $ECHO_C\" >&6\nelse\n  lt_cv_prog_compiler_rtti_exceptions=no\n  ac_outfile=conftest.$ac_objext\n   printf \"$lt_simple_compile_test_code\" > conftest.$ac_ext\n   lt_compiler_flag=\"-fno-rtti -fno-exceptions\"\n   # Insert the option either (1) after the last *FLAGS variable, or\n   # (2) before a word containing \"conftest.\", or (3) at the end.\n   # Note that $ac_compile itself does not contain backslashes and begins\n   # with a dollar sign (not a hyphen), so the echo should work correctly.\n   # The option is referenced via a variable to avoid confusing sed.\n   lt_compile=`echo \"$ac_compile\" | $SED \\\n   -e 's:.*FLAGS}\\{0,1\\} :&$lt_compiler_flag :; t' \\\n   -e 's: [^ ]*conftest\\.: $lt_compiler_flag&:; t' \\\n   -e 's:$: $lt_compiler_flag:'`\n   (eval echo \"\\\"\\$as_me:15615: $lt_compile\\\"\" >&5)\n   (eval \"$lt_compile\" 2>conftest.err)\n   ac_status=$?\n   cat conftest.err >&5\n   echo \"$as_me:15619: \\$? = $ac_status\" >&5\n   if (exit $ac_status) && test -s \"$ac_outfile\"; then\n     # The compiler can only warn and ignore the option if not recognized\n     # So say no if there are warnings other than the usual output.\n     $echo \"X$_lt_compiler_boilerplate\" | $Xsed -e '/^$/d' >conftest.exp\n     $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2\n     if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then\n       lt_cv_prog_compiler_rtti_exceptions=yes\n     fi\n   fi\n   $rm conftest*\n\nfi\n{ echo \"$as_me:$LINENO: result: $lt_cv_prog_compiler_rtti_exceptions\" >&5\necho \"${ECHO_T}$lt_cv_prog_compiler_rtti_exceptions\" >&6; }\n\nif test x\"$lt_cv_prog_compiler_rtti_exceptions\" = xyes; then\n    lt_prog_compiler_no_builtin_flag_GCJ=\"$lt_prog_compiler_no_builtin_flag_GCJ -fno-rtti -fno-exceptions\"\nelse\n    :\nfi\n\nfi\n\nlt_prog_compiler_wl_GCJ=\nlt_prog_compiler_pic_GCJ=\nlt_prog_compiler_static_GCJ=\n\n{ echo \"$as_me:$LINENO: checking for $compiler option to produce PIC\" >&5\necho $ECHO_N \"checking for $compiler option to produce PIC... $ECHO_C\" >&6; }\n\n  if test \"$GCC\" = yes; then\n    lt_prog_compiler_wl_GCJ='-Wl,'\n    lt_prog_compiler_static_GCJ='-static'\n\n    case $host_os in\n      aix*)\n      # All AIX code is PIC.\n      if test \"$host_cpu\" = ia64; then\n\t# AIX 5 now supports IA64 processor\n\tlt_prog_compiler_static_GCJ='-Bstatic'\n      fi\n      ;;\n\n    amigaos*)\n      # FIXME: we need at least 68020 code to build shared libraries, but\n      # adding the `-m68020' flag to GCC prevents building anything better,\n      # like `-m68040'.\n      lt_prog_compiler_pic_GCJ='-m68020 -resident32 -malways-restore-a4'\n      ;;\n\n    beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)\n      # PIC is the default for these OSes.\n      ;;\n\n    mingw* | pw32* | os2*)\n      # This hack is so that the source file can tell whether it is being\n      # built for inclusion in a dll (and should export symbols for example).\n      lt_prog_compiler_pic_GCJ='-DDLL_EXPORT'\n      ;;\n\n    darwin* | rhapsody*)\n      # PIC is the default on this platform\n      # Common symbols not allowed in MH_DYLIB files\n      lt_prog_compiler_pic_GCJ='-fno-common'\n      ;;\n\n    interix3*)\n      # Interix 3.x gcc -fpic/-fPIC options generate broken code.\n      # Instead, we relocate shared libraries at runtime.\n      ;;\n\n    msdosdjgpp*)\n      # Just because we use GCC doesn't mean we suddenly get shared libraries\n      # on systems that don't support them.\n      lt_prog_compiler_can_build_shared_GCJ=no\n      enable_shared=no\n      ;;\n\n    sysv4*MP*)\n      if test -d /usr/nec; then\n\tlt_prog_compiler_pic_GCJ=-Kconform_pic\n      fi\n      ;;\n\n    hpux*)\n      # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but\n      # not for PA HP-UX.\n      case $host_cpu in\n      hppa*64*|ia64*)\n\t# +Z the default\n\t;;\n      *)\n\tlt_prog_compiler_pic_GCJ='-fPIC'\n\t;;\n      esac\n      ;;\n\n    *)\n      lt_prog_compiler_pic_GCJ='-fPIC'\n      ;;\n    esac\n  else\n    # PORTME Check for flag to pass linker flags through the system compiler.\n    case $host_os in\n    aix*)\n      lt_prog_compiler_wl_GCJ='-Wl,'\n      if test \"$host_cpu\" = ia64; then\n\t# AIX 5 now supports IA64 processor\n\tlt_prog_compiler_static_GCJ='-Bstatic'\n      else\n\tlt_prog_compiler_static_GCJ='-bnso -bI:/lib/syscalls.exp'\n      fi\n      ;;\n      darwin*)\n        # PIC is the default on this platform\n        # Common symbols not allowed in MH_DYLIB files\n       case $cc_basename in\n         xlc*)\n         lt_prog_compiler_pic_GCJ='-qnocommon'\n         lt_prog_compiler_wl_GCJ='-Wl,'\n         ;;\n       esac\n       ;;\n\n    mingw* | pw32* | os2*)\n      # This hack is so that the source file can tell whether it is being\n      # built for inclusion in a dll (and should export symbols for example).\n      lt_prog_compiler_pic_GCJ='-DDLL_EXPORT'\n      ;;\n\n    hpux9* | hpux10* | hpux11*)\n      lt_prog_compiler_wl_GCJ='-Wl,'\n      # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but\n      # not for PA HP-UX.\n      case $host_cpu in\n      hppa*64*|ia64*)\n\t# +Z the default\n\t;;\n      *)\n\tlt_prog_compiler_pic_GCJ='+Z'\n\t;;\n      esac\n      # Is there a better lt_prog_compiler_static that works with the bundled CC?\n      lt_prog_compiler_static_GCJ='${wl}-a ${wl}archive'\n      ;;\n\n    irix5* | irix6* | nonstopux*)\n      lt_prog_compiler_wl_GCJ='-Wl,'\n      # PIC (with -KPIC) is the default.\n      lt_prog_compiler_static_GCJ='-non_shared'\n      ;;\n\n    newsos6)\n      lt_prog_compiler_pic_GCJ='-KPIC'\n      lt_prog_compiler_static_GCJ='-Bstatic'\n      ;;\n\n    linux* | k*bsd*-gnu)\n      case $cc_basename in\n      icc* | ecc*)\n\tlt_prog_compiler_wl_GCJ='-Wl,'\n\tlt_prog_compiler_pic_GCJ='-KPIC'\n\tlt_prog_compiler_static_GCJ='-static'\n        ;;\n      pgcc* | pgf77* | pgf90* | pgf95*)\n        # Portland Group compilers (*not* the Pentium gcc compiler,\n\t# which looks to be a dead project)\n\tlt_prog_compiler_wl_GCJ='-Wl,'\n\tlt_prog_compiler_pic_GCJ='-fpic'\n\tlt_prog_compiler_static_GCJ='-Bstatic'\n        ;;\n      ccc*)\n        lt_prog_compiler_wl_GCJ='-Wl,'\n        # All Alpha code is PIC.\n        lt_prog_compiler_static_GCJ='-non_shared'\n        ;;\n      esac\n      ;;\n\n    osf3* | osf4* | osf5*)\n      lt_prog_compiler_wl_GCJ='-Wl,'\n      # All OSF/1 code is PIC.\n      lt_prog_compiler_static_GCJ='-non_shared'\n      ;;\n\n    solaris*)\n      lt_prog_compiler_pic_GCJ='-KPIC'\n      lt_prog_compiler_static_GCJ='-Bstatic'\n      case $cc_basename in\n      f77* | f90* | f95*)\n\tlt_prog_compiler_wl_GCJ='-Qoption ld ';;\n      *)\n\tlt_prog_compiler_wl_GCJ='-Wl,';;\n      esac\n      ;;\n\n    sunos4*)\n      lt_prog_compiler_wl_GCJ='-Qoption ld '\n      lt_prog_compiler_pic_GCJ='-PIC'\n      lt_prog_compiler_static_GCJ='-Bstatic'\n      ;;\n\n    sysv4 | sysv4.2uw2* | sysv4.3*)\n      lt_prog_compiler_wl_GCJ='-Wl,'\n      lt_prog_compiler_pic_GCJ='-KPIC'\n      lt_prog_compiler_static_GCJ='-Bstatic'\n      ;;\n\n    sysv4*MP*)\n      if test -d /usr/nec ;then\n\tlt_prog_compiler_pic_GCJ='-Kconform_pic'\n\tlt_prog_compiler_static_GCJ='-Bstatic'\n      fi\n      ;;\n\n    sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)\n      lt_prog_compiler_wl_GCJ='-Wl,'\n      lt_prog_compiler_pic_GCJ='-KPIC'\n      lt_prog_compiler_static_GCJ='-Bstatic'\n      ;;\n\n    unicos*)\n      lt_prog_compiler_wl_GCJ='-Wl,'\n      lt_prog_compiler_can_build_shared_GCJ=no\n      ;;\n\n    uts4*)\n      lt_prog_compiler_pic_GCJ='-pic'\n      lt_prog_compiler_static_GCJ='-Bstatic'\n      ;;\n\n    *)\n      lt_prog_compiler_can_build_shared_GCJ=no\n      ;;\n    esac\n  fi\n\n{ echo \"$as_me:$LINENO: result: $lt_prog_compiler_pic_GCJ\" >&5\necho \"${ECHO_T}$lt_prog_compiler_pic_GCJ\" >&6; }\n\n#\n# Check to make sure the PIC flag actually works.\n#\nif test -n \"$lt_prog_compiler_pic_GCJ\"; then\n\n{ echo \"$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic_GCJ works\" >&5\necho $ECHO_N \"checking if $compiler PIC flag $lt_prog_compiler_pic_GCJ works... $ECHO_C\" >&6; }\nif test \"${lt_prog_compiler_pic_works_GCJ+set}\" = set; then\n  echo $ECHO_N \"(cached) $ECHO_C\" >&6\nelse\n  lt_prog_compiler_pic_works_GCJ=no\n  ac_outfile=conftest.$ac_objext\n   printf \"$lt_simple_compile_test_code\" > conftest.$ac_ext\n   lt_compiler_flag=\"$lt_prog_compiler_pic_GCJ\"\n   # Insert the option either (1) after the last *FLAGS variable, or\n   # (2) before a word containing \"conftest.\", or (3) at the end.\n   # Note that $ac_compile itself does not contain backslashes and begins\n   # with a dollar sign (not a hyphen), so the echo should work correctly.\n   # The option is referenced via a variable to avoid confusing sed.\n   lt_compile=`echo \"$ac_compile\" | $SED \\\n   -e 's:.*FLAGS}\\{0,1\\} :&$lt_compiler_flag :; t' \\\n   -e 's: [^ ]*conftest\\.: $lt_compiler_flag&:; t' \\\n   -e 's:$: $lt_compiler_flag:'`\n   (eval echo \"\\\"\\$as_me:15883: $lt_compile\\\"\" >&5)\n   (eval \"$lt_compile\" 2>conftest.err)\n   ac_status=$?\n   cat conftest.err >&5\n   echo \"$as_me:15887: \\$? = $ac_status\" >&5\n   if (exit $ac_status) && test -s \"$ac_outfile\"; then\n     # The compiler can only warn and ignore the option if not recognized\n     # So say no if there are warnings other than the usual output.\n     $echo \"X$_lt_compiler_boilerplate\" | $Xsed -e '/^$/d' >conftest.exp\n     $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2\n     if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then\n       lt_prog_compiler_pic_works_GCJ=yes\n     fi\n   fi\n   $rm conftest*\n\nfi\n{ echo \"$as_me:$LINENO: result: $lt_prog_compiler_pic_works_GCJ\" >&5\necho \"${ECHO_T}$lt_prog_compiler_pic_works_GCJ\" >&6; }\n\nif test x\"$lt_prog_compiler_pic_works_GCJ\" = xyes; then\n    case $lt_prog_compiler_pic_GCJ in\n     \"\" | \" \"*) ;;\n     *) lt_prog_compiler_pic_GCJ=\" $lt_prog_compiler_pic_GCJ\" ;;\n     esac\nelse\n    lt_prog_compiler_pic_GCJ=\n     lt_prog_compiler_can_build_shared_GCJ=no\nfi\n\nfi\ncase $host_os in\n  # For platforms which do not support PIC, -DPIC is meaningless:\n  *djgpp*)\n    lt_prog_compiler_pic_GCJ=\n    ;;\n  *)\n    lt_prog_compiler_pic_GCJ=\"$lt_prog_compiler_pic_GCJ\"\n    ;;\nesac\n\n#\n# Check to make sure the static flag actually works.\n#\nwl=$lt_prog_compiler_wl_GCJ eval lt_tmp_static_flag=\\\"$lt_prog_compiler_static_GCJ\\\"\n{ echo \"$as_me:$LINENO: checking if $compiler static flag $lt_tmp_static_flag works\" >&5\necho $ECHO_N \"checking if $compiler static flag $lt_tmp_static_flag works... $ECHO_C\" >&6; }\nif test \"${lt_prog_compiler_static_works_GCJ+set}\" = set; then\n  echo $ECHO_N \"(cached) $ECHO_C\" >&6\nelse\n  lt_prog_compiler_static_works_GCJ=no\n   save_LDFLAGS=\"$LDFLAGS\"\n   LDFLAGS=\"$LDFLAGS $lt_tmp_static_flag\"\n   printf \"$lt_simple_link_test_code\" > conftest.$ac_ext\n   if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then\n     # The linker can only warn and ignore the option if not recognized\n     # So say no if there are warnings\n     if test -s conftest.err; then\n       # Append any errors to the config.log.\n       cat conftest.err 1>&5\n       $echo \"X$_lt_linker_boilerplate\" | $Xsed -e '/^$/d' > conftest.exp\n       $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2\n       if diff conftest.exp conftest.er2 >/dev/null; then\n         lt_prog_compiler_static_works_GCJ=yes\n       fi\n     else\n       lt_prog_compiler_static_works_GCJ=yes\n     fi\n   fi\n   $rm conftest*\n   LDFLAGS=\"$save_LDFLAGS\"\n\nfi\n{ echo \"$as_me:$LINENO: result: $lt_prog_compiler_static_works_GCJ\" >&5\necho \"${ECHO_T}$lt_prog_compiler_static_works_GCJ\" >&6; }\n\nif test x\"$lt_prog_compiler_static_works_GCJ\" = xyes; then\n    :\nelse\n    lt_prog_compiler_static_GCJ=\nfi\n\n\n{ echo \"$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext\" >&5\necho $ECHO_N \"checking if $compiler supports -c -o file.$ac_objext... $ECHO_C\" >&6; }\nif test \"${lt_cv_prog_compiler_c_o_GCJ+set}\" = set; then\n  echo $ECHO_N \"(cached) $ECHO_C\" >&6\nelse\n  lt_cv_prog_compiler_c_o_GCJ=no\n   $rm -r conftest 2>/dev/null\n   mkdir conftest\n   cd conftest\n   mkdir out\n   printf \"$lt_simple_compile_test_code\" > conftest.$ac_ext\n\n   lt_compiler_flag=\"-o out/conftest2.$ac_objext\"\n   # Insert the option either (1) after the last *FLAGS variable, or\n   # (2) before a word containing \"conftest.\", or (3) at the end.\n   # Note that $ac_compile itself does not contain backslashes and begins\n   # with a dollar sign (not a hyphen), so the echo should work correctly.\n   lt_compile=`echo \"$ac_compile\" | $SED \\\n   -e 's:.*FLAGS}\\{0,1\\} :&$lt_compiler_flag :; t' \\\n   -e 's: [^ ]*conftest\\.: $lt_compiler_flag&:; t' \\\n   -e 's:$: $lt_compiler_flag:'`\n   (eval echo \"\\\"\\$as_me:15987: $lt_compile\\\"\" >&5)\n   (eval \"$lt_compile\" 2>out/conftest.err)\n   ac_status=$?\n   cat out/conftest.err >&5\n   echo \"$as_me:15991: \\$? = $ac_status\" >&5\n   if (exit $ac_status) && test -s out/conftest2.$ac_objext\n   then\n     # The compiler can only warn and ignore the option if not recognized\n     # So say no if there are warnings\n     $echo \"X$_lt_compiler_boilerplate\" | $Xsed -e '/^$/d' > out/conftest.exp\n     $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2\n     if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then\n       lt_cv_prog_compiler_c_o_GCJ=yes\n     fi\n   fi\n   chmod u+w . 2>&5\n   $rm conftest*\n   # SGI C++ compiler will create directory out/ii_files/ for\n   # template instantiation\n   test -d out/ii_files && $rm out/ii_files/* && rmdir out/ii_files\n   $rm out/* && rmdir out\n   cd ..\n   rmdir conftest\n   $rm conftest*\n\nfi\n{ echo \"$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o_GCJ\" >&5\necho \"${ECHO_T}$lt_cv_prog_compiler_c_o_GCJ\" >&6; }\n\n\nhard_links=\"nottested\"\nif test \"$lt_cv_prog_compiler_c_o_GCJ\" = no && test \"$need_locks\" != no; then\n  # do not overwrite the value of need_locks provided by the user\n  { echo \"$as_me:$LINENO: checking if we can lock with hard links\" >&5\necho $ECHO_N \"checking if we can lock with hard links... $ECHO_C\" >&6; }\n  hard_links=yes\n  $rm conftest*\n  ln conftest.a conftest.b 2>/dev/null && hard_links=no\n  touch conftest.a\n  ln conftest.a conftest.b 2>&5 || hard_links=no\n  ln conftest.a conftest.b 2>/dev/null && hard_links=no\n  { echo \"$as_me:$LINENO: result: $hard_links\" >&5\necho \"${ECHO_T}$hard_links\" >&6; }\n  if test \"$hard_links\" = no; then\n    { echo \"$as_me:$LINENO: WARNING: \\`$CC' does not support \\`-c -o', so \\`make -j' may be unsafe\" >&5\necho \"$as_me: WARNING: \\`$CC' does not support \\`-c -o', so \\`make -j' may be unsafe\" >&2;}\n    need_locks=warn\n  fi\nelse\n  need_locks=no\nfi\n\n{ echo \"$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries\" >&5\necho $ECHO_N \"checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C\" >&6; }\n\n  runpath_var=\n  allow_undefined_flag_GCJ=\n  enable_shared_with_static_runtimes_GCJ=no\n  archive_cmds_GCJ=\n  archive_expsym_cmds_GCJ=\n  old_archive_From_new_cmds_GCJ=\n  old_archive_from_expsyms_cmds_GCJ=\n  export_dynamic_flag_spec_GCJ=\n  whole_archive_flag_spec_GCJ=\n  thread_safe_flag_spec_GCJ=\n  hardcode_libdir_flag_spec_GCJ=\n  hardcode_libdir_flag_spec_ld_GCJ=\n  hardcode_libdir_separator_GCJ=\n  hardcode_direct_GCJ=no\n  hardcode_minus_L_GCJ=no\n  hardcode_shlibpath_var_GCJ=unsupported\n  link_all_deplibs_GCJ=unknown\n  hardcode_automatic_GCJ=no\n  module_cmds_GCJ=\n  module_expsym_cmds_GCJ=\n  always_export_symbols_GCJ=no\n  export_symbols_cmds_GCJ='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\\''s/.* //'\\'' | sort | uniq > $export_symbols'\n  # include_expsyms should be a list of space-separated symbols to be *always*\n  # included in the symbol list\n  include_expsyms_GCJ=\n  # exclude_expsyms can be an extended regexp of symbols to exclude\n  # it will be wrapped by ` (' and `)$', so one must not match beginning or\n  # end of line.  Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc',\n  # as well as any symbol that contains `d'.\n  exclude_expsyms_GCJ=\"_GLOBAL_OFFSET_TABLE_\"\n  # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out\n  # platforms (ab)use it in PIC code, but their linkers get confused if\n  # the symbol is explicitly referenced.  Since portable code cannot\n  # rely on this symbol name, it's probably fine to never include it in\n  # preloaded symbol tables.\n  extract_expsyms_cmds=\n  # Just being paranoid about ensuring that cc_basename is set.\n  for cc_temp in $compiler\"\"; do\n  case $cc_temp in\n    compile | *[\\\\/]compile | ccache | *[\\\\/]ccache ) ;;\n    distcc | *[\\\\/]distcc | purify | *[\\\\/]purify ) ;;\n    \\-*) ;;\n    *) break;;\n  esac\ndone\ncc_basename=`$echo \"X$cc_temp\" | $Xsed -e 's%.*/%%' -e \"s%^$host_alias-%%\"`\n\n  case $host_os in\n  cygwin* | mingw* | pw32*)\n    # FIXME: the MSVC++ port hasn't been tested in a loooong time\n    # When not using gcc, we currently assume that we are using\n    # Microsoft Visual C++.\n    if test \"$GCC\" != yes; then\n      with_gnu_ld=no\n    fi\n    ;;\n  interix*)\n    # we just hope/assume this is gcc and not c89 (= MSVC++)\n    with_gnu_ld=yes\n    ;;\n  openbsd*)\n    with_gnu_ld=no\n    ;;\n  esac\n\n  ld_shlibs_GCJ=yes\n  if test \"$with_gnu_ld\" = yes; then\n    # If archive_cmds runs LD, not CC, wlarc should be empty\n    wlarc='${wl}'\n\n    # Set some defaults for GNU ld with shared library support. These\n    # are reset later if shared libraries are not supported. Putting them\n    # here allows them to be overridden if necessary.\n    runpath_var=LD_RUN_PATH\n    hardcode_libdir_flag_spec_GCJ='${wl}--rpath ${wl}$libdir'\n    export_dynamic_flag_spec_GCJ='${wl}--export-dynamic'\n    # ancient GNU ld didn't support --whole-archive et. al.\n    if $LD --help 2>&1 | grep 'no-whole-archive' > /dev/null; then\n\twhole_archive_flag_spec_GCJ=\"$wlarc\"'--whole-archive$convenience '\"$wlarc\"'--no-whole-archive'\n      else\n  \twhole_archive_flag_spec_GCJ=\n    fi\n    supports_anon_versioning=no\n    case `$LD -v 2>/dev/null` in\n      *\\ [01].* | *\\ 2.[0-9].* | *\\ 2.10.*) ;; # catch versions < 2.11\n      *\\ 2.11.93.0.2\\ *) supports_anon_versioning=yes ;; # RH7.3 ...\n      *\\ 2.11.92.0.12\\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ...\n      *\\ 2.11.*) ;; # other 2.11 versions\n      *) supports_anon_versioning=yes ;;\n    esac\n\n    # See if GNU ld supports shared libraries.\n    case $host_os in\n    aix3* | aix4* | aix5*)\n      # On AIX/PPC, the GNU linker is very broken\n      if test \"$host_cpu\" != ia64; then\n\tld_shlibs_GCJ=no\n\tcat <<EOF 1>&2\n\n*** Warning: the GNU linker, at least up to release 2.9.1, is reported\n*** to be unable to reliably create shared libraries on AIX.\n*** Therefore, libtool is disabling shared libraries support.  If you\n*** really care for shared libraries, you may want to modify your PATH\n*** so that a non-GNU linker is found, and then restart.\n\nEOF\n      fi\n      ;;\n\n    amigaos*)\n      archive_cmds_GCJ='$rm $output_objdir/a2ixlibrary.data~$echo \"#define NAME $libname\" > $output_objdir/a2ixlibrary.data~$echo \"#define LIBRARY_ID 1\" >> $output_objdir/a2ixlibrary.data~$echo \"#define VERSION $major\" >> $output_objdir/a2ixlibrary.data~$echo \"#define REVISION $revision\" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'\n      hardcode_libdir_flag_spec_GCJ='-L$libdir'\n      hardcode_minus_L_GCJ=yes\n\n      # Samuel A. Falvo II <kc5tja@dolphin.openprojects.net> reports\n      # that the semantics of dynamic libraries on AmigaOS, at least up\n      # to version 4, is to share data among multiple programs linked\n      # with the same dynamic library.  Since this doesn't match the\n      # behavior of shared libraries on other platforms, we can't use\n      # them.\n      ld_shlibs_GCJ=no\n      ;;\n\n    beos*)\n      if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then\n\tallow_undefined_flag_GCJ=unsupported\n\t# Joseph Beckenbach <jrb3@best.com> says some releases of gcc\n\t# support --undefined.  This deserves some investigation.  FIXME\n\tarchive_cmds_GCJ='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'\n      else\n\tld_shlibs_GCJ=no\n      fi\n      ;;\n\n    cygwin* | mingw* | pw32*)\n      # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, GCJ) is actually meaningless,\n      # as there is no search path for DLLs.\n      hardcode_libdir_flag_spec_GCJ='-L$libdir'\n      allow_undefined_flag_GCJ=unsupported\n      always_export_symbols_GCJ=no\n      enable_shared_with_static_runtimes_GCJ=yes\n      export_symbols_cmds_GCJ='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\\''/^[BCDGRS] /s/.* \\([^ ]*\\)/\\1 DATA/'\\'' | $SED -e '\\''/^[AITW] /s/.* //'\\'' | sort | uniq > $export_symbols'\n\n      if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then\n        archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'\n\t# If the export-symbols file already is a .def file (1st line\n\t# is EXPORTS), use it as is; otherwise, prepend...\n\tarchive_expsym_cmds_GCJ='if test \"x`$SED 1q $export_symbols`\" = xEXPORTS; then\n\t  cp $export_symbols $output_objdir/$soname.def;\n\telse\n\t  echo EXPORTS > $output_objdir/$soname.def;\n\t  cat $export_symbols >> $output_objdir/$soname.def;\n\tfi~\n\t$CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'\n      else\n\tld_shlibs_GCJ=no\n      fi\n      ;;\n\n    interix3*)\n      hardcode_direct_GCJ=no\n      hardcode_shlibpath_var_GCJ=no\n      hardcode_libdir_flag_spec_GCJ='${wl}-rpath,$libdir'\n      export_dynamic_flag_spec_GCJ='${wl}-E'\n      # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.\n      # Instead, shared libraries are loaded at an image base (0x10000000 by\n      # default) and relocated if they conflict, which is a slow very memory\n      # consuming and fragmenting process.  To avoid this, we pick a random,\n      # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link\n      # time.  Moving up from 0x10000000 also allows more sbrk(2) space.\n      archive_cmds_GCJ='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \\* 262144 + 1342177280` -o $lib'\n      archive_expsym_cmds_GCJ='sed \"s,^,_,\" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \\* 262144 + 1342177280` -o $lib'\n      ;;\n\n    linux* | k*bsd*-gnu)\n      if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then\n\ttmp_addflag=\n\tcase $cc_basename,$host_cpu in\n\tpgcc*)\t\t\t\t# Portland Group C compiler\n\t  whole_archive_flag_spec_GCJ='${wl}--whole-archive`for conv in $convenience\\\"\\\"; do test  -n \\\"$conv\\\" && new_convenience=\\\"$new_convenience,$conv\\\"; done; $echo \\\"$new_convenience\\\"` ${wl}--no-whole-archive'\n\t  tmp_addflag=' $pic_flag'\n\t  ;;\n\tpgf77* | pgf90* | pgf95*)\t# Portland Group f77 and f90 compilers\n\t  whole_archive_flag_spec_GCJ='${wl}--whole-archive`for conv in $convenience\\\"\\\"; do test  -n \\\"$conv\\\" && new_convenience=\\\"$new_convenience,$conv\\\"; done; $echo \\\"$new_convenience\\\"` ${wl}--no-whole-archive'\n\t  tmp_addflag=' $pic_flag -Mnomain' ;;\n\tecc*,ia64* | icc*,ia64*)\t\t# Intel C compiler on ia64\n\t  tmp_addflag=' -i_dynamic' ;;\n\tefc*,ia64* | ifort*,ia64*)\t# Intel Fortran compiler on ia64\n\t  tmp_addflag=' -i_dynamic -nofor_main' ;;\n\tifc* | ifort*)\t\t\t# Intel Fortran compiler\n\t  tmp_addflag=' -nofor_main' ;;\n\tesac\n\tarchive_cmds_GCJ='$CC -shared'\"$tmp_addflag\"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'\n\n\tif test $supports_anon_versioning = yes; then\n\t  archive_expsym_cmds_GCJ='$echo \"{ global:\" > $output_objdir/$libname.ver~\n  cat $export_symbols | sed -e \"s/\\(.*\\)/\\1;/\" >> $output_objdir/$libname.ver~\n  $echo \"local: *; };\" >> $output_objdir/$libname.ver~\n\t  $CC -shared'\"$tmp_addflag\"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'\n\tfi\n\tlink_all_deplibs_GCJ=no\n      else\n\tld_shlibs_GCJ=no\n      fi\n      ;;\n\n    netbsd* | netbsdelf*-gnu)\n      if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then\n\tarchive_cmds_GCJ='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'\n\twlarc=\n      else\n\tarchive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'\n\tarchive_expsym_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'\n      fi\n      ;;\n\n    solaris*)\n      if $LD -v 2>&1 | grep 'BFD 2\\.8' > /dev/null; then\n\tld_shlibs_GCJ=no\n\tcat <<EOF 1>&2\n\n*** Warning: The releases 2.8.* of the GNU linker cannot reliably\n*** create shared libraries on Solaris systems.  Therefore, libtool\n*** is disabling shared libraries support.  We urge you to upgrade GNU\n*** binutils to release 2.9.1 or newer.  Another option is to modify\n*** your PATH or compiler configuration so that the native linker is\n*** used, and then restart.\n\nEOF\n      elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then\n\tarchive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'\n\tarchive_expsym_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'\n      else\n\tld_shlibs_GCJ=no\n      fi\n      ;;\n\n    sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*)\n      case `$LD -v 2>&1` in\n        *\\ [01].* | *\\ 2.[0-9].* | *\\ 2.1[0-5].*)\n\tld_shlibs_GCJ=no\n\tcat <<_LT_EOF 1>&2\n\n*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not\n*** reliably create shared libraries on SCO systems.  Therefore, libtool\n*** is disabling shared libraries support.  We urge you to upgrade GNU\n*** binutils to release 2.16.91.0.3 or newer.  Another option is to modify\n*** your PATH or compiler configuration so that the native linker is\n*** used, and then restart.\n\n_LT_EOF\n\t;;\n\t*)\n\t  if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then\n\t    hardcode_libdir_flag_spec_GCJ='`test -z \"$SCOABSPATH\" && echo ${wl}-rpath,$libdir`'\n\t    archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\\${SCOABSPATH:+${install_libdir}/}$soname -o $lib'\n\t    archive_expsym_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\\${SCOABSPATH:+${install_libdir}/}$soname,-retain-symbols-file,$export_symbols -o $lib'\n\t  else\n\t    ld_shlibs_GCJ=no\n\t  fi\n\t;;\n      esac\n      ;;\n\n    sunos4*)\n      archive_cmds_GCJ='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'\n      wlarc=\n      hardcode_direct_GCJ=yes\n      hardcode_shlibpath_var_GCJ=no\n      ;;\n\n    *)\n      if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then\n\tarchive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'\n\tarchive_expsym_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'\n      else\n\tld_shlibs_GCJ=no\n      fi\n      ;;\n    esac\n\n    if test \"$ld_shlibs_GCJ\" = no; then\n      runpath_var=\n      hardcode_libdir_flag_spec_GCJ=\n      export_dynamic_flag_spec_GCJ=\n      whole_archive_flag_spec_GCJ=\n    fi\n  else\n    # PORTME fill in a description of your system's linker (not GNU ld)\n    case $host_os in\n    aix3*)\n      allow_undefined_flag_GCJ=unsupported\n      always_export_symbols_GCJ=yes\n      archive_expsym_cmds_GCJ='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname'\n      # Note: this linker hardcodes the directories in LIBPATH if there\n      # are no directories specified by -L.\n      hardcode_minus_L_GCJ=yes\n      if test \"$GCC\" = yes && test -z \"$lt_prog_compiler_static\"; then\n\t# Neither direct hardcoding nor static linking is supported with a\n\t# broken collect2.\n\thardcode_direct_GCJ=unsupported\n      fi\n      ;;\n\n    aix4* | aix5*)\n      if test \"$host_cpu\" = ia64; then\n\t# On IA64, the linker does run time linking by default, so we don't\n\t# have to do anything special.\n\taix_use_runtimelinking=no\n\texp_sym_flag='-Bexport'\n\tno_entry_flag=\"\"\n      else\n\t# If we're using GNU nm, then we don't want the \"-C\" option.\n\t# -C means demangle to AIX nm, but means don't demangle with GNU nm\n\tif $NM -V 2>&1 | grep 'GNU' > /dev/null; then\n\t  export_symbols_cmds_GCJ='$NM -Bpg $libobjs $convenience | awk '\\''{ if (((\\$2 == \"T\") || (\\$2 == \"D\") || (\\$2 == \"B\")) && (substr(\\$3,1,1) != \".\")) { print \\$3 } }'\\'' | sort -u > $export_symbols'\n\telse\n\t  export_symbols_cmds_GCJ='$NM -BCpg $libobjs $convenience | awk '\\''{ if (((\\$2 == \"T\") || (\\$2 == \"D\") || (\\$2 == \"B\")) && (substr(\\$3,1,1) != \".\")) { print \\$3 } }'\\'' | sort -u > $export_symbols'\n\tfi\n\taix_use_runtimelinking=no\n\n\t# Test if we are trying to use run time linking or normal\n\t# AIX style linking. If -brtl is somewhere in LDFLAGS, we\n\t# need to do runtime linking.\n\tcase $host_os in aix4.[23]|aix4.[23].*|aix5*)\n\t  for ld_flag in $LDFLAGS; do\n  \t  if (test $ld_flag = \"-brtl\" || test $ld_flag = \"-Wl,-brtl\"); then\n  \t    aix_use_runtimelinking=yes\n  \t    break\n  \t  fi\n\t  done\n\t  ;;\n\tesac\n\n\texp_sym_flag='-bexport'\n\tno_entry_flag='-bnoentry'\n      fi\n\n      # When large executables or shared objects are built, AIX ld can\n      # have problems creating the table of contents.  If linking a library\n      # or program results in \"error TOC overflow\" add -mminimal-toc to\n      # CXXFLAGS/CFLAGS for g++/gcc.  In the cases where that is not\n      # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.\n\n      archive_cmds_GCJ=''\n      hardcode_direct_GCJ=yes\n      hardcode_libdir_separator_GCJ=':'\n      link_all_deplibs_GCJ=yes\n\n      if test \"$GCC\" = yes; then\n\tcase $host_os in aix4.[012]|aix4.[012].*)\n\t# We only want to do this on AIX 4.2 and lower, the check\n\t# below for broken collect2 doesn't work under 4.3+\n\t  collect2name=`${CC} -print-prog-name=collect2`\n\t  if test -f \"$collect2name\" && \\\n  \t   strings \"$collect2name\" | grep resolve_lib_name >/dev/null\n\t  then\n  \t  # We have reworked collect2\n  \t  hardcode_direct_GCJ=yes\n\t  else\n  \t  # We have old collect2\n  \t  hardcode_direct_GCJ=unsupported\n  \t  # It fails to find uninstalled libraries when the uninstalled\n  \t  # path is not listed in the libpath.  Setting hardcode_minus_L\n  \t  # to unsupported forces relinking\n  \t  hardcode_minus_L_GCJ=yes\n  \t  hardcode_libdir_flag_spec_GCJ='-L$libdir'\n  \t  hardcode_libdir_separator_GCJ=\n\t  fi\n\t  ;;\n\tesac\n\tshared_flag='-shared'\n\tif test \"$aix_use_runtimelinking\" = yes; then\n\t  shared_flag=\"$shared_flag \"'${wl}-G'\n\tfi\n      else\n\t# not using gcc\n\tif test \"$host_cpu\" = ia64; then\n  \t# VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release\n  \t# chokes on -Wl,-G. The following line is correct:\n\t  shared_flag='-G'\n\telse\n\t  if test \"$aix_use_runtimelinking\" = yes; then\n\t    shared_flag='${wl}-G'\n\t  else\n\t    shared_flag='${wl}-bM:SRE'\n\t  fi\n\tfi\n      fi\n\n      # It seems that -bexpall does not export symbols beginning with\n      # underscore (_), so it is better to generate a list of symbols to export.\n      always_export_symbols_GCJ=yes\n      if test \"$aix_use_runtimelinking\" = yes; then\n\t# Warning - without using the other runtime loading flags (-brtl),\n\t# -berok will link without error, but may produce a broken library.\n\tallow_undefined_flag_GCJ='-berok'\n       # Determine the default libpath from the value encoded in an empty executable.\n       cat >conftest.$ac_ext <<_ACEOF\n/* confdefs.h.  */\n_ACEOF\ncat confdefs.h >>conftest.$ac_ext\ncat >>conftest.$ac_ext <<_ACEOF\n/* end confdefs.h.  */\n\nint\nmain ()\n{\n\n  ;\n  return 0;\n}\n_ACEOF\nrm -f conftest.$ac_objext conftest$ac_exeext\nif { (eval echo \"$as_me:$LINENO: \\\"$ac_link\\\"\") >&5\n  (eval $ac_link) 2>conftest.er1\n  ac_status=$?\n  grep -v '^ *+' conftest.er1 >conftest.err\n  rm -f conftest.er1\n  cat conftest.err >&5\n  echo \"$as_me:$LINENO: \\$? = $ac_status\" >&5\n  (exit $ac_status); } &&\n\t { ac_try='test -z \"$ac_c_werror_flag\"\n\t\t\t || test ! -s conftest.err'\n  { (eval echo \"$as_me:$LINENO: \\\"$ac_try\\\"\") >&5\n  (eval $ac_try) 2>&5\n  ac_status=$?\n  echo \"$as_me:$LINENO: \\$? = $ac_status\" >&5\n  (exit $ac_status); }; } &&\n\t { ac_try='test -s conftest$ac_exeext'\n  { (eval echo \"$as_me:$LINENO: \\\"$ac_try\\\"\") >&5\n  (eval $ac_try) 2>&5\n  ac_status=$?\n  echo \"$as_me:$LINENO: \\$? = $ac_status\" >&5\n  (exit $ac_status); }; }; then\n\naix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0  *\\(.*\\)$/\\1/; p; }\n}'`\n# Check for a 64-bit object if we didn't find anything.\nif test -z \"$aix_libpath\"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0  *\\(.*\\)$/\\1/; p; }\n}'`; fi\nelse\n  echo \"$as_me: failed program was:\" >&5\nsed 's/^/| /' conftest.$ac_ext >&5\n\n\nfi\n\nrm -f conftest.err conftest.$ac_objext \\\n      conftest$ac_exeext conftest.$ac_ext\nif test -z \"$aix_libpath\"; then aix_libpath=\"/usr/lib:/lib\"; fi\n\n       hardcode_libdir_flag_spec_GCJ='${wl}-blibpath:$libdir:'\"$aix_libpath\"\n\tarchive_expsym_cmds_GCJ=\"\\$CC\"' -o $output_objdir/$soname $libobjs $deplibs '\"\\${wl}$no_entry_flag\"' $compiler_flags `if test \"x${allow_undefined_flag}\" != \"x\"; then echo \"${wl}${allow_undefined_flag}\"; else :; fi` '\"\\${wl}$exp_sym_flag:\\$export_symbols $shared_flag\"\n       else\n\tif test \"$host_cpu\" = ia64; then\n\t  hardcode_libdir_flag_spec_GCJ='${wl}-R $libdir:/usr/lib:/lib'\n\t  allow_undefined_flag_GCJ=\"-z nodefs\"\n\t  archive_expsym_cmds_GCJ=\"\\$CC $shared_flag\"' -o $output_objdir/$soname $libobjs $deplibs '\"\\${wl}$no_entry_flag\"' $compiler_flags ${wl}${allow_undefined_flag} '\"\\${wl}$exp_sym_flag:\\$export_symbols\"\n\telse\n\t # Determine the default libpath from the value encoded in an empty executable.\n\t cat >conftest.$ac_ext <<_ACEOF\n/* confdefs.h.  */\n_ACEOF\ncat confdefs.h >>conftest.$ac_ext\ncat >>conftest.$ac_ext <<_ACEOF\n/* end confdefs.h.  */\n\nint\nmain ()\n{\n\n  ;\n  return 0;\n}\n_ACEOF\nrm -f conftest.$ac_objext conftest$ac_exeext\nif { (eval echo \"$as_me:$LINENO: \\\"$ac_link\\\"\") >&5\n  (eval $ac_link) 2>conftest.er1\n  ac_status=$?\n  grep -v '^ *+' conftest.er1 >conftest.err\n  rm -f conftest.er1\n  cat conftest.err >&5\n  echo \"$as_me:$LINENO: \\$? = $ac_status\" >&5\n  (exit $ac_status); } &&\n\t { ac_try='test -z \"$ac_c_werror_flag\"\n\t\t\t || test ! -s conftest.err'\n  { (eval echo \"$as_me:$LINENO: \\\"$ac_try\\\"\") >&5\n  (eval $ac_try) 2>&5\n  ac_status=$?\n  echo \"$as_me:$LINENO: \\$? = $ac_status\" >&5\n  (exit $ac_status); }; } &&\n\t { ac_try='test -s conftest$ac_exeext'\n  { (eval echo \"$as_me:$LINENO: \\\"$ac_try\\\"\") >&5\n  (eval $ac_try) 2>&5\n  ac_status=$?\n  echo \"$as_me:$LINENO: \\$? = $ac_status\" >&5\n  (exit $ac_status); }; }; then\n\naix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0  *\\(.*\\)$/\\1/; p; }\n}'`\n# Check for a 64-bit object if we didn't find anything.\nif test -z \"$aix_libpath\"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0  *\\(.*\\)$/\\1/; p; }\n}'`; fi\nelse\n  echo \"$as_me: failed program was:\" >&5\nsed 's/^/| /' conftest.$ac_ext >&5\n\n\nfi\n\nrm -f conftest.err conftest.$ac_objext \\\n      conftest$ac_exeext conftest.$ac_ext\nif test -z \"$aix_libpath\"; then aix_libpath=\"/usr/lib:/lib\"; fi\n\n\t hardcode_libdir_flag_spec_GCJ='${wl}-blibpath:$libdir:'\"$aix_libpath\"\n\t  # Warning - without using the other run time loading flags,\n\t  # -berok will link without error, but may produce a broken library.\n\t  no_undefined_flag_GCJ=' ${wl}-bernotok'\n\t  allow_undefined_flag_GCJ=' ${wl}-berok'\n\t  # Exported symbols can be pulled into shared objects from archives\n\t  whole_archive_flag_spec_GCJ='$convenience'\n\t  archive_cmds_need_lc_GCJ=yes\n\t  # This is similar to how AIX traditionally builds its shared libraries.\n\t  archive_expsym_cmds_GCJ=\"\\$CC $shared_flag\"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'\n\tfi\n      fi\n      ;;\n\n    amigaos*)\n      archive_cmds_GCJ='$rm $output_objdir/a2ixlibrary.data~$echo \"#define NAME $libname\" > $output_objdir/a2ixlibrary.data~$echo \"#define LIBRARY_ID 1\" >> $output_objdir/a2ixlibrary.data~$echo \"#define VERSION $major\" >> $output_objdir/a2ixlibrary.data~$echo \"#define REVISION $revision\" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'\n      hardcode_libdir_flag_spec_GCJ='-L$libdir'\n      hardcode_minus_L_GCJ=yes\n      # see comment about different semantics on the GNU ld section\n      ld_shlibs_GCJ=no\n      ;;\n\n    bsdi[45]*)\n      export_dynamic_flag_spec_GCJ=-rdynamic\n      ;;\n\n    cygwin* | mingw* | pw32*)\n      # When not using gcc, we currently assume that we are using\n      # Microsoft Visual C++.\n      # hardcode_libdir_flag_spec is actually meaningless, as there is\n      # no search path for DLLs.\n      hardcode_libdir_flag_spec_GCJ=' '\n      allow_undefined_flag_GCJ=unsupported\n      # Tell ltmain to make .lib files, not .a files.\n      libext=lib\n      # Tell ltmain to make .dll files, not .so files.\n      shrext_cmds=\".dll\"\n      # FIXME: Setting linknames here is a bad hack.\n      archive_cmds_GCJ='$CC -o $lib $libobjs $compiler_flags `echo \"$deplibs\" | $SED -e '\\''s/ -lc$//'\\''` -link -dll~linknames='\n      # The linker will automatically build a .lib file if we build a DLL.\n      old_archive_From_new_cmds_GCJ='true'\n      # FIXME: Should let the user specify the lib program.\n      old_archive_cmds_GCJ='lib /OUT:$oldlib$oldobjs$old_deplibs'\n      fix_srcfile_path_GCJ='`cygpath -w \"$srcfile\"`'\n      enable_shared_with_static_runtimes_GCJ=yes\n      ;;\n\n    darwin* | rhapsody*)\n      case $host_os in\n        rhapsody* | darwin1.[012])\n         allow_undefined_flag_GCJ='${wl}-undefined ${wl}suppress'\n         ;;\n       *) # Darwin 1.3 on\n         if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then\n           allow_undefined_flag_GCJ='${wl}-flat_namespace ${wl}-undefined ${wl}suppress'\n         else\n           case ${MACOSX_DEPLOYMENT_TARGET} in\n             10.[012])\n               allow_undefined_flag_GCJ='${wl}-flat_namespace ${wl}-undefined ${wl}suppress'\n               ;;\n             10.*)\n               allow_undefined_flag_GCJ='${wl}-undefined ${wl}dynamic_lookup'\n               ;;\n           esac\n         fi\n         ;;\n      esac\n      archive_cmds_need_lc_GCJ=no\n      hardcode_direct_GCJ=no\n      hardcode_automatic_GCJ=yes\n      hardcode_shlibpath_var_GCJ=unsupported\n      whole_archive_flag_spec_GCJ=''\n      link_all_deplibs_GCJ=yes\n    if test \"$GCC\" = yes ; then\n    \toutput_verbose_link_cmd='echo'\n        archive_cmds_GCJ='$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring'\n      module_cmds_GCJ='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags'\n      # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds\n      archive_expsym_cmds_GCJ='sed -e \"s,#.*,,\" -e \"s,^[    ]*,,\" -e \"s,^\\(..*\\),_&,\" < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'\n      module_expsym_cmds_GCJ='sed -e \"s,#.*,,\" -e \"s,^[    ]*,,\" -e \"s,^\\(..*\\),_&,\" < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag  -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'\n    else\n      case $cc_basename in\n        xlc*)\n         output_verbose_link_cmd='echo'\n         archive_cmds_GCJ='$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $verstring'\n         module_cmds_GCJ='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags'\n          # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds\n         archive_expsym_cmds_GCJ='sed -e \"s,#.*,,\" -e \"s,^[    ]*,,\" -e \"s,^\\(..*\\),_&,\" < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'\n          module_expsym_cmds_GCJ='sed -e \"s,#.*,,\" -e \"s,^[    ]*,,\" -e \"s,^\\(..*\\),_&,\" < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag  -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'\n          ;;\n       *)\n         ld_shlibs_GCJ=no\n          ;;\n      esac\n    fi\n      ;;\n\n    dgux*)\n      archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'\n      hardcode_libdir_flag_spec_GCJ='-L$libdir'\n      hardcode_shlibpath_var_GCJ=no\n      ;;\n\n    freebsd1*)\n      ld_shlibs_GCJ=no\n      ;;\n\n    # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor\n    # support.  Future versions do this automatically, but an explicit c++rt0.o\n    # does not break anything, and helps significantly (at the cost of a little\n    # extra space).\n    freebsd2.2*)\n      archive_cmds_GCJ='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o'\n      hardcode_libdir_flag_spec_GCJ='-R$libdir'\n      hardcode_direct_GCJ=yes\n      hardcode_shlibpath_var_GCJ=no\n      ;;\n\n    # Unfortunately, older versions of FreeBSD 2 do not have this feature.\n    freebsd2*)\n      archive_cmds_GCJ='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'\n      hardcode_direct_GCJ=yes\n      hardcode_minus_L_GCJ=yes\n      hardcode_shlibpath_var_GCJ=no\n      ;;\n\n    # FreeBSD 3 and greater uses gcc -shared to do shared libraries.\n    freebsd* | dragonfly*)\n      archive_cmds_GCJ='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'\n      hardcode_libdir_flag_spec_GCJ='-R$libdir'\n      hardcode_direct_GCJ=yes\n      hardcode_shlibpath_var_GCJ=no\n      ;;\n\n    hpux9*)\n      if test \"$GCC\" = yes; then\n\tarchive_cmds_GCJ='$rm $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'\n      else\n\tarchive_cmds_GCJ='$rm $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'\n      fi\n      hardcode_libdir_flag_spec_GCJ='${wl}+b ${wl}$libdir'\n      hardcode_libdir_separator_GCJ=:\n      hardcode_direct_GCJ=yes\n\n      # hardcode_minus_L: Not really in the search PATH,\n      # but as the default location of the library.\n      hardcode_minus_L_GCJ=yes\n      export_dynamic_flag_spec_GCJ='${wl}-E'\n      ;;\n\n    hpux10*)\n      if test \"$GCC\" = yes -a \"$with_gnu_ld\" = no; then\n\tarchive_cmds_GCJ='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'\n      else\n\tarchive_cmds_GCJ='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'\n      fi\n      if test \"$with_gnu_ld\" = no; then\n\thardcode_libdir_flag_spec_GCJ='${wl}+b ${wl}$libdir'\n\thardcode_libdir_separator_GCJ=:\n\n\thardcode_direct_GCJ=yes\n\texport_dynamic_flag_spec_GCJ='${wl}-E'\n\n\t# hardcode_minus_L: Not really in the search PATH,\n\t# but as the default location of the library.\n\thardcode_minus_L_GCJ=yes\n      fi\n      ;;\n\n    hpux11*)\n      if test \"$GCC\" = yes -a \"$with_gnu_ld\" = no; then\n\tcase $host_cpu in\n\thppa*64*)\n\t  archive_cmds_GCJ='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'\n\t  ;;\n\tia64*)\n\t  archive_cmds_GCJ='$CC -shared ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'\n\t  ;;\n\t*)\n\t  archive_cmds_GCJ='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'\n\t  ;;\n\tesac\n      else\n\tcase $host_cpu in\n\thppa*64*)\n\t  archive_cmds_GCJ='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'\n\t  ;;\n\tia64*)\n\t  archive_cmds_GCJ='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'\n\t  ;;\n\t*)\n\t  archive_cmds_GCJ='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'\n\t  ;;\n\tesac\n      fi\n      if test \"$with_gnu_ld\" = no; then\n\thardcode_libdir_flag_spec_GCJ='${wl}+b ${wl}$libdir'\n\thardcode_libdir_separator_GCJ=:\n\n\tcase $host_cpu in\n\thppa*64*|ia64*)\n\t  hardcode_libdir_flag_spec_ld_GCJ='+b $libdir'\n\t  hardcode_direct_GCJ=no\n\t  hardcode_shlibpath_var_GCJ=no\n\t  ;;\n\t*)\n\t  hardcode_direct_GCJ=yes\n\t  export_dynamic_flag_spec_GCJ='${wl}-E'\n\n\t  # hardcode_minus_L: Not really in the search PATH,\n\t  # but as the default location of the library.\n\t  hardcode_minus_L_GCJ=yes\n\t  ;;\n\tesac\n      fi\n      ;;\n\n    irix5* | irix6* | nonstopux*)\n      if test \"$GCC\" = yes; then\n\tarchive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n \"$verstring\" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'\n      else\n\tarchive_cmds_GCJ='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n \"$verstring\" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'\n\thardcode_libdir_flag_spec_ld_GCJ='-rpath $libdir'\n      fi\n      hardcode_libdir_flag_spec_GCJ='${wl}-rpath ${wl}$libdir'\n      hardcode_libdir_separator_GCJ=:\n      link_all_deplibs_GCJ=yes\n      ;;\n\n    netbsd* | netbsdelf*-gnu)\n      if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then\n\tarchive_cmds_GCJ='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'  # a.out\n      else\n\tarchive_cmds_GCJ='$LD -shared -o $lib $libobjs $deplibs $linker_flags'      # ELF\n      fi\n      hardcode_libdir_flag_spec_GCJ='-R$libdir'\n      hardcode_direct_GCJ=yes\n      hardcode_shlibpath_var_GCJ=no\n      ;;\n\n    newsos6)\n      archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'\n      hardcode_direct_GCJ=yes\n      hardcode_libdir_flag_spec_GCJ='${wl}-rpath ${wl}$libdir'\n      hardcode_libdir_separator_GCJ=:\n      hardcode_shlibpath_var_GCJ=no\n      ;;\n\n    openbsd*)\n      hardcode_direct_GCJ=yes\n      hardcode_shlibpath_var_GCJ=no\n      if test -z \"`echo __ELF__ | $CC -E - | grep __ELF__`\" || test \"$host_os-$host_cpu\" = \"openbsd2.8-powerpc\"; then\n\tarchive_cmds_GCJ='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'\n\tarchive_expsym_cmds_GCJ='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols'\n\thardcode_libdir_flag_spec_GCJ='${wl}-rpath,$libdir'\n\texport_dynamic_flag_spec_GCJ='${wl}-E'\n      else\n       case $host_os in\n\t openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*)\n\t   archive_cmds_GCJ='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'\n\t   hardcode_libdir_flag_spec_GCJ='-R$libdir'\n\t   ;;\n\t *)\n\t   archive_cmds_GCJ='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'\n\t   hardcode_libdir_flag_spec_GCJ='${wl}-rpath,$libdir'\n\t   ;;\n       esac\n      fi\n      ;;\n\n    os2*)\n      hardcode_libdir_flag_spec_GCJ='-L$libdir'\n      hardcode_minus_L_GCJ=yes\n      allow_undefined_flag_GCJ=unsupported\n      archive_cmds_GCJ='$echo \"LIBRARY $libname INITINSTANCE\" > $output_objdir/$libname.def~$echo \"DESCRIPTION \\\"$libname\\\"\" >> $output_objdir/$libname.def~$echo DATA >> $output_objdir/$libname.def~$echo \" SINGLE NONSHARED\" >> $output_objdir/$libname.def~$echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def'\n      old_archive_From_new_cmds_GCJ='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def'\n      ;;\n\n    osf3*)\n      if test \"$GCC\" = yes; then\n\tallow_undefined_flag_GCJ=' ${wl}-expect_unresolved ${wl}\\*'\n\tarchive_cmds_GCJ='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n \"$verstring\" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'\n      else\n\tallow_undefined_flag_GCJ=' -expect_unresolved \\*'\n\tarchive_cmds_GCJ='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n \"$verstring\" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'\n      fi\n      hardcode_libdir_flag_spec_GCJ='${wl}-rpath ${wl}$libdir'\n      hardcode_libdir_separator_GCJ=:\n      ;;\n\n    osf4* | osf5*)\t# as osf3* with the addition of -msym flag\n      if test \"$GCC\" = yes; then\n\tallow_undefined_flag_GCJ=' ${wl}-expect_unresolved ${wl}\\*'\n\tarchive_cmds_GCJ='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n \"$verstring\" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'\n\thardcode_libdir_flag_spec_GCJ='${wl}-rpath ${wl}$libdir'\n      else\n\tallow_undefined_flag_GCJ=' -expect_unresolved \\*'\n\tarchive_cmds_GCJ='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n \"$verstring\" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'\n\tarchive_expsym_cmds_GCJ='for i in `cat $export_symbols`; do printf \"%s %s\\\\n\" -exported_symbol \"\\$i\" >> $lib.exp; done; echo \"-hidden\">> $lib.exp~\n\t$LD -shared${allow_undefined_flag} -input $lib.exp $linker_flags $libobjs $deplibs -soname $soname `test -n \"$verstring\" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib~$rm $lib.exp'\n\n\t# Both c and cxx compiler support -rpath directly\n\thardcode_libdir_flag_spec_GCJ='-rpath $libdir'\n      fi\n      hardcode_libdir_separator_GCJ=:\n      ;;\n\n    solaris*)\n      no_undefined_flag_GCJ=' -z text'\n      if test \"$GCC\" = yes; then\n\twlarc='${wl}'\n\tarchive_cmds_GCJ='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'\n\tarchive_expsym_cmds_GCJ='$echo \"{ global:\" > $lib.exp~cat $export_symbols | $SED -e \"s/\\(.*\\)/\\1;/\" >> $lib.exp~$echo \"local: *; };\" >> $lib.exp~\n\t  $CC -shared ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$rm $lib.exp'\n      else\n\twlarc=''\n\tarchive_cmds_GCJ='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'\n\tarchive_expsym_cmds_GCJ='$echo \"{ global:\" > $lib.exp~cat $export_symbols | $SED -e \"s/\\(.*\\)/\\1;/\" >> $lib.exp~$echo \"local: *; };\" >> $lib.exp~\n  \t$LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp'\n      fi\n      hardcode_libdir_flag_spec_GCJ='-R$libdir'\n      hardcode_shlibpath_var_GCJ=no\n      case $host_os in\n      solaris2.[0-5] | solaris2.[0-5].*) ;;\n      *)\n \t# The compiler driver will combine linker options so we\n \t# cannot just pass the convience library names through\n \t# without $wl, iff we do not link with $LD.\n \t# Luckily, gcc supports the same syntax we need for Sun Studio.\n \t# Supported since Solaris 2.6 (maybe 2.5.1?)\n \tcase $wlarc in\n \t'')\n \t  whole_archive_flag_spec_GCJ='-z allextract$convenience -z defaultextract' ;;\n \t*)\n \t  whole_archive_flag_spec_GCJ='${wl}-z ${wl}allextract`for conv in $convenience\\\"\\\"; do test -n \\\"$conv\\\" && new_convenience=\\\"$new_convenience,$conv\\\"; done; $echo \\\"$new_convenience\\\"` ${wl}-z ${wl}defaultextract' ;;\n \tesac ;;\n      esac\n      link_all_deplibs_GCJ=yes\n      ;;\n\n    sunos4*)\n      if test \"x$host_vendor\" = xsequent; then\n\t# Use $CC to link under sequent, because it throws in some extra .o\n\t# files that make .init and .fini sections work.\n\tarchive_cmds_GCJ='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags'\n      else\n\tarchive_cmds_GCJ='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags'\n      fi\n      hardcode_libdir_flag_spec_GCJ='-L$libdir'\n      hardcode_direct_GCJ=yes\n      hardcode_minus_L_GCJ=yes\n      hardcode_shlibpath_var_GCJ=no\n      ;;\n\n    sysv4)\n      case $host_vendor in\n\tsni)\n\t  archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'\n\t  hardcode_direct_GCJ=yes # is this really true???\n\t;;\n\tsiemens)\n\t  ## LD is ld it makes a PLAMLIB\n\t  ## CC just makes a GrossModule.\n\t  archive_cmds_GCJ='$LD -G -o $lib $libobjs $deplibs $linker_flags'\n\t  reload_cmds_GCJ='$CC -r -o $output$reload_objs'\n\t  hardcode_direct_GCJ=no\n        ;;\n\tmotorola)\n\t  archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'\n\t  hardcode_direct_GCJ=no #Motorola manual says yes, but my tests say they lie\n\t;;\n      esac\n      runpath_var='LD_RUN_PATH'\n      hardcode_shlibpath_var_GCJ=no\n      ;;\n\n    sysv4.3*)\n      archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'\n      hardcode_shlibpath_var_GCJ=no\n      export_dynamic_flag_spec_GCJ='-Bexport'\n      ;;\n\n    sysv4*MP*)\n      if test -d /usr/nec; then\n\tarchive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'\n\thardcode_shlibpath_var_GCJ=no\n\trunpath_var=LD_RUN_PATH\n\thardcode_runpath_var=yes\n\tld_shlibs_GCJ=yes\n      fi\n      ;;\n\n    sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7*)\n      no_undefined_flag_GCJ='${wl}-z,text'\n      archive_cmds_need_lc_GCJ=no\n      hardcode_shlibpath_var_GCJ=no\n      runpath_var='LD_RUN_PATH'\n\n      if test \"$GCC\" = yes; then\n\tarchive_cmds_GCJ='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'\n\tarchive_expsym_cmds_GCJ='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'\n      else\n\tarchive_cmds_GCJ='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'\n\tarchive_expsym_cmds_GCJ='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'\n      fi\n      ;;\n\n    sysv5* | sco3.2v5* | sco5v6*)\n      # Note: We can NOT use -z defs as we might desire, because we do not\n      # link with -lc, and that would cause any symbols used from libc to\n      # always be unresolved, which means just about no library would\n      # ever link correctly.  If we're not using GNU ld we use -z text\n      # though, which does catch some bad symbols but isn't as heavy-handed\n      # as -z defs.\n      no_undefined_flag_GCJ='${wl}-z,text'\n      allow_undefined_flag_GCJ='${wl}-z,nodefs'\n      archive_cmds_need_lc_GCJ=no\n      hardcode_shlibpath_var_GCJ=no\n      hardcode_libdir_flag_spec_GCJ='`test -z \"$SCOABSPATH\" && echo ${wl}-R,$libdir`'\n      hardcode_libdir_separator_GCJ=':'\n      link_all_deplibs_GCJ=yes\n      export_dynamic_flag_spec_GCJ='${wl}-Bexport'\n      runpath_var='LD_RUN_PATH'\n\n      if test \"$GCC\" = yes; then\n\tarchive_cmds_GCJ='$CC -shared ${wl}-h,\\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'\n\tarchive_expsym_cmds_GCJ='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,\\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'\n      else\n\tarchive_cmds_GCJ='$CC -G ${wl}-h,\\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'\n\tarchive_expsym_cmds_GCJ='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,\\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'\n      fi\n      ;;\n\n    uts4*)\n      archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'\n      hardcode_libdir_flag_spec_GCJ='-L$libdir'\n      hardcode_shlibpath_var_GCJ=no\n      ;;\n\n    *)\n      ld_shlibs_GCJ=no\n      ;;\n    esac\n  fi\n\n{ echo \"$as_me:$LINENO: result: $ld_shlibs_GCJ\" >&5\necho \"${ECHO_T}$ld_shlibs_GCJ\" >&6; }\ntest \"$ld_shlibs_GCJ\" = no && can_build_shared=no\n\n#\n# Do we need to explicitly link libc?\n#\ncase \"x$archive_cmds_need_lc_GCJ\" in\nx|xyes)\n  # Assume -lc should be added\n  archive_cmds_need_lc_GCJ=yes\n\n  if test \"$enable_shared\" = yes && test \"$GCC\" = yes; then\n    case $archive_cmds_GCJ in\n    *'~'*)\n      # FIXME: we may have to deal with multi-command sequences.\n      ;;\n    '$CC '*)\n      # Test whether the compiler implicitly links with -lc since on some\n      # systems, -lgcc has to come before -lc. If gcc already passes -lc\n      # to ld, don't add -lc before -lgcc.\n      { echo \"$as_me:$LINENO: checking whether -lc should be explicitly linked in\" >&5\necho $ECHO_N \"checking whether -lc should be explicitly linked in... $ECHO_C\" >&6; }\n      $rm conftest*\n      printf \"$lt_simple_compile_test_code\" > conftest.$ac_ext\n\n      if { (eval echo \"$as_me:$LINENO: \\\"$ac_compile\\\"\") >&5\n  (eval $ac_compile) 2>&5\n  ac_status=$?\n  echo \"$as_me:$LINENO: \\$? = $ac_status\" >&5\n  (exit $ac_status); } 2>conftest.err; then\n        soname=conftest\n        lib=conftest\n        libobjs=conftest.$ac_objext\n        deplibs=\n        wl=$lt_prog_compiler_wl_GCJ\n\tpic_flag=$lt_prog_compiler_pic_GCJ\n        compiler_flags=-v\n        linker_flags=-v\n        verstring=\n        output_objdir=.\n        libname=conftest\n        lt_save_allow_undefined_flag=$allow_undefined_flag_GCJ\n        allow_undefined_flag_GCJ=\n        if { (eval echo \"$as_me:$LINENO: \\\"$archive_cmds_GCJ 2\\>\\&1 \\| grep \\\" -lc \\\" \\>/dev/null 2\\>\\&1\\\"\") >&5\n  (eval $archive_cmds_GCJ 2\\>\\&1 \\| grep \\\" -lc \\\" \\>/dev/null 2\\>\\&1) 2>&5\n  ac_status=$?\n  echo \"$as_me:$LINENO: \\$? = $ac_status\" >&5\n  (exit $ac_status); }\n        then\n\t  archive_cmds_need_lc_GCJ=no\n        else\n\t  archive_cmds_need_lc_GCJ=yes\n        fi\n        allow_undefined_flag_GCJ=$lt_save_allow_undefined_flag\n      else\n        cat conftest.err 1>&5\n      fi\n      $rm conftest*\n      { echo \"$as_me:$LINENO: result: $archive_cmds_need_lc_GCJ\" >&5\necho \"${ECHO_T}$archive_cmds_need_lc_GCJ\" >&6; }\n      ;;\n    esac\n  fi\n  ;;\nesac\n\n{ echo \"$as_me:$LINENO: checking dynamic linker characteristics\" >&5\necho $ECHO_N \"checking dynamic linker characteristics... $ECHO_C\" >&6; }\nlibrary_names_spec=\nlibname_spec='lib$name'\nsoname_spec=\nshrext_cmds=\".so\"\npostinstall_cmds=\npostuninstall_cmds=\nfinish_cmds=\nfinish_eval=\nshlibpath_var=\nshlibpath_overrides_runpath=unknown\nversion_type=none\ndynamic_linker=\"$host_os ld.so\"\nsys_lib_dlsearch_path_spec=\"/lib /usr/lib\"\nif test \"$GCC\" = yes; then\n  sys_lib_search_path_spec=`$CC -print-search-dirs | grep \"^libraries:\" | $SED -e \"s/^libraries://\" -e \"s,=/,/,g\"`\n  if echo \"$sys_lib_search_path_spec\" | grep ';' >/dev/null ; then\n    # if the path contains \";\" then we assume it to be the separator\n    # otherwise default to the standard path separator (i.e. \":\") - it is\n    # assumed that no part of a normal pathname contains \";\" but that should\n    # okay in the real world where \";\" in dirpaths is itself problematic.\n    sys_lib_search_path_spec=`echo \"$sys_lib_search_path_spec\" | $SED -e 's/;/ /g'`\n  else\n    sys_lib_search_path_spec=`echo \"$sys_lib_search_path_spec\" | $SED  -e \"s/$PATH_SEPARATOR/ /g\"`\n  fi\nelse\n  sys_lib_search_path_spec=\"/lib /usr/lib /usr/local/lib\"\nfi\nneed_lib_prefix=unknown\nhardcode_into_libs=no\n\n# when you set need_version to no, make sure it does not cause -set_version\n# flags to be left without arguments\nneed_version=unknown\n\ncase $host_os in\naix3*)\n  version_type=linux\n  library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a'\n  shlibpath_var=LIBPATH\n\n  # AIX 3 has no versioning support, so we append a major version to the name.\n  soname_spec='${libname}${release}${shared_ext}$major'\n  ;;\n\naix4* | aix5*)\n  version_type=linux\n  need_lib_prefix=no\n  need_version=no\n  hardcode_into_libs=yes\n  if test \"$host_cpu\" = ia64; then\n    # AIX 5 supports IA64\n    library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}'\n    shlibpath_var=LD_LIBRARY_PATH\n  else\n    # With GCC up to 2.95.x, collect2 would create an import file\n    # for dependence libraries.  The import file would start with\n    # the line `#! .'.  This would cause the generated library to\n    # depend on `.', always an invalid library.  This was fixed in\n    # development snapshots of GCC prior to 3.0.\n    case $host_os in\n      aix4 | aix4.[01] | aix4.[01].*)\n      if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'\n\t   echo ' yes '\n\t   echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then\n\t:\n      else\n\tcan_build_shared=no\n      fi\n      ;;\n    esac\n    # AIX (on Power*) has no versioning support, so currently we can not hardcode correct\n    # soname into executable. Probably we can add versioning support to\n    # collect2, so additional links can be useful in future.\n    if test \"$aix_use_runtimelinking\" = yes; then\n      # If using run time linking (on AIX 4.2 or later) use lib<name>.so\n      # instead of lib<name>.a to let people know that these are not\n      # typical AIX shared libraries.\n      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'\n    else\n      # We preserve .a as extension for shared libraries through AIX4.2\n      # and later when we are not doing run time linking.\n      library_names_spec='${libname}${release}.a $libname.a'\n      soname_spec='${libname}${release}${shared_ext}$major'\n    fi\n    shlibpath_var=LIBPATH\n  fi\n  ;;\n\namigaos*)\n  library_names_spec='$libname.ixlibrary $libname.a'\n  # Create ${libname}_ixlibrary.a entries in /sys/libs.\n  finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo \"X$lib\" | $Xsed -e '\\''s%^.*/\\([^/]*\\)\\.ixlibrary$%\\1%'\\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show \"cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a\"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'\n  ;;\n\nbeos*)\n  library_names_spec='${libname}${shared_ext}'\n  dynamic_linker=\"$host_os ld.so\"\n  shlibpath_var=LIBRARY_PATH\n  ;;\n\nbsdi[45]*)\n  version_type=linux\n  need_version=no\n  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'\n  soname_spec='${libname}${release}${shared_ext}$major'\n  finish_cmds='PATH=\"\\$PATH:/sbin\" ldconfig $libdir'\n  shlibpath_var=LD_LIBRARY_PATH\n  sys_lib_search_path_spec=\"/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib\"\n  sys_lib_dlsearch_path_spec=\"/shlib /usr/lib /usr/local/lib\"\n  # the default ld.so.conf also contains /usr/contrib/lib and\n  # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow\n  # libtool to hard-code these into programs\n  ;;\n\ncygwin* | mingw* | pw32*)\n  version_type=windows\n  shrext_cmds=\".dll\"\n  need_version=no\n  need_lib_prefix=no\n\n  case $GCC,$host_os in\n  yes,cygwin* | yes,mingw* | yes,pw32*)\n    library_names_spec='$libname.dll.a'\n    # DLL is installed to $(libdir)/../bin by postinstall_cmds\n    postinstall_cmds='base_file=`basename \\${file}`~\n      dlpath=`$SHELL 2>&1 -c '\\''. $dir/'\\''\\${base_file}'\\''i;echo \\$dlname'\\''`~\n      dldir=$destdir/`dirname \\$dlpath`~\n      test -d \\$dldir || mkdir -p \\$dldir~\n      $install_prog $dir/$dlname \\$dldir/$dlname~\n      chmod a+x \\$dldir/$dlname'\n    postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\\''. $file; echo \\$dlname'\\''`~\n      dlpath=$dir/\\$dldll~\n       $rm \\$dlpath'\n    shlibpath_overrides_runpath=yes\n\n    case $host_os in\n    cygwin*)\n      # Cygwin DLLs use 'cyg' prefix rather than 'lib'\n      soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'\n      sys_lib_search_path_spec=\"/usr/lib /lib/w32api /lib /usr/local/lib\"\n      ;;\n    mingw*)\n      # MinGW DLLs use traditional 'lib' prefix\n      soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'\n      sys_lib_search_path_spec=`$CC -print-search-dirs | grep \"^libraries:\" | $SED -e \"s/^libraries://\" -e \"s,=/,/,g\"`\n      if echo \"$sys_lib_search_path_spec\" | grep ';[c-zC-Z]:/' >/dev/null; then\n        # It is most probably a Windows format PATH printed by\n        # mingw gcc, but we are running on Cygwin. Gcc prints its search\n        # path with ; separators, and with drive letters. We can handle the\n        # drive letters (cygwin fileutils understands them), so leave them,\n        # especially as we might pass files found there to a mingw objdump,\n        # which wouldn't understand a cygwinified path. Ahh.\n        sys_lib_search_path_spec=`echo \"$sys_lib_search_path_spec\" | $SED -e 's/;/ /g'`\n      else\n        sys_lib_search_path_spec=`echo \"$sys_lib_search_path_spec\" | $SED  -e \"s/$PATH_SEPARATOR/ /g\"`\n      fi\n      ;;\n    pw32*)\n      # pw32 DLLs use 'pw' prefix rather than 'lib'\n      library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'\n      ;;\n    esac\n    ;;\n\n  *)\n    library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib'\n    ;;\n  esac\n  dynamic_linker='Win32 ld.exe'\n  # FIXME: first we should search . and the directory the executable is in\n  shlibpath_var=PATH\n  ;;\n\ndarwin* | rhapsody*)\n  dynamic_linker=\"$host_os dyld\"\n  version_type=darwin\n  need_lib_prefix=no\n  need_version=no\n  library_names_spec='${libname}${release}${versuffix}$shared_ext ${libname}${release}${major}$shared_ext ${libname}$shared_ext'\n  soname_spec='${libname}${release}${major}$shared_ext'\n  shlibpath_overrides_runpath=yes\n  shlibpath_var=DYLD_LIBRARY_PATH\n  shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`'\n  # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same.\n  if test \"$GCC\" = yes; then\n    sys_lib_search_path_spec=`$CC -print-search-dirs | tr \"\\n\" \"$PATH_SEPARATOR\" | sed -e 's/libraries:/@libraries:/' | tr \"@\" \"\\n\" | grep \"^libraries:\" | sed -e \"s/^libraries://\" -e \"s,=/,/,g\" -e \"s,$PATH_SEPARATOR, ,g\" -e \"s,.*,& /lib /usr/lib /usr/local/lib,g\"`\n  else\n    sys_lib_search_path_spec='/lib /usr/lib /usr/local/lib'\n  fi\n  sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'\n  ;;\n\ndgux*)\n  version_type=linux\n  need_lib_prefix=no\n  need_version=no\n  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext'\n  soname_spec='${libname}${release}${shared_ext}$major'\n  shlibpath_var=LD_LIBRARY_PATH\n  ;;\n\nfreebsd1*)\n  dynamic_linker=no\n  ;;\n\nfreebsd* | dragonfly*)\n  # DragonFly does not have aout.  When/if they implement a new\n  # versioning mechanism, adjust this.\n  if test -x /usr/bin/objformat; then\n    objformat=`/usr/bin/objformat`\n  else\n    case $host_os in\n    freebsd[123]*) objformat=aout ;;\n    *) objformat=elf ;;\n    esac\n  fi\n  version_type=freebsd-$objformat\n  case $version_type in\n    freebsd-elf*)\n      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'\n      need_version=no\n      need_lib_prefix=no\n      ;;\n    freebsd-*)\n      library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix'\n      need_version=yes\n      ;;\n  esac\n  shlibpath_var=LD_LIBRARY_PATH\n  case $host_os in\n  freebsd2*)\n    shlibpath_overrides_runpath=yes\n    ;;\n  freebsd3.[01]* | freebsdelf3.[01]*)\n    shlibpath_overrides_runpath=yes\n    hardcode_into_libs=yes\n    ;;\n  freebsd3.[2-9]* | freebsdelf3.[2-9]* | \\\n  freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1)\n    shlibpath_overrides_runpath=no\n    hardcode_into_libs=yes\n    ;;\n  freebsd*) # from 4.6 on\n    shlibpath_overrides_runpath=yes\n    hardcode_into_libs=yes\n    ;;\n  esac\n  ;;\n\ngnu*)\n  version_type=linux\n  need_lib_prefix=no\n  need_version=no\n  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'\n  soname_spec='${libname}${release}${shared_ext}$major'\n  shlibpath_var=LD_LIBRARY_PATH\n  hardcode_into_libs=yes\n  ;;\n\nhpux9* | hpux10* | hpux11*)\n  # Give a soname corresponding to the major version so that dld.sl refuses to\n  # link against other versions.\n  version_type=sunos\n  need_lib_prefix=no\n  need_version=no\n  case $host_cpu in\n  ia64*)\n    shrext_cmds='.so'\n    hardcode_into_libs=yes\n    dynamic_linker=\"$host_os dld.so\"\n    shlibpath_var=LD_LIBRARY_PATH\n    shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.\n    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'\n    soname_spec='${libname}${release}${shared_ext}$major'\n    if test \"X$HPUX_IA64_MODE\" = X32; then\n      sys_lib_search_path_spec=\"/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib\"\n    else\n      sys_lib_search_path_spec=\"/usr/lib/hpux64 /usr/local/lib/hpux64\"\n    fi\n    sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec\n    ;;\n   hppa*64*)\n     shrext_cmds='.sl'\n     hardcode_into_libs=yes\n     dynamic_linker=\"$host_os dld.sl\"\n     shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH\n     shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.\n     library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'\n     soname_spec='${libname}${release}${shared_ext}$major'\n     sys_lib_search_path_spec=\"/usr/lib/pa20_64 /usr/ccs/lib/pa20_64\"\n     sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec\n     ;;\n   *)\n    shrext_cmds='.sl'\n    dynamic_linker=\"$host_os dld.sl\"\n    shlibpath_var=SHLIB_PATH\n    shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH\n    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'\n    soname_spec='${libname}${release}${shared_ext}$major'\n    ;;\n  esac\n  # HP-UX runs *really* slowly unless shared libraries are mode 555.\n  postinstall_cmds='chmod 555 $lib'\n  ;;\n\ninterix3*)\n  version_type=linux\n  need_lib_prefix=no\n  need_version=no\n  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'\n  soname_spec='${libname}${release}${shared_ext}$major'\n  dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)'\n  shlibpath_var=LD_LIBRARY_PATH\n  shlibpath_overrides_runpath=no\n  hardcode_into_libs=yes\n  ;;\n\nirix5* | irix6* | nonstopux*)\n  case $host_os in\n    nonstopux*) version_type=nonstopux ;;\n    *)\n\tif test \"$lt_cv_prog_gnu_ld\" = yes; then\n\t\tversion_type=linux\n\telse\n\t\tversion_type=irix\n\tfi ;;\n  esac\n  need_lib_prefix=no\n  need_version=no\n  soname_spec='${libname}${release}${shared_ext}$major'\n  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}'\n  case $host_os in\n  irix5* | nonstopux*)\n    libsuff= shlibsuff=\n    ;;\n  *)\n    case $LD in # libtool.m4 will add one of these switches to LD\n    *-32|*\"-32 \"|*-melf32bsmip|*\"-melf32bsmip \")\n      libsuff= shlibsuff= libmagic=32-bit;;\n    *-n32|*\"-n32 \"|*-melf32bmipn32|*\"-melf32bmipn32 \")\n      libsuff=32 shlibsuff=N32 libmagic=N32;;\n    *-64|*\"-64 \"|*-melf64bmip|*\"-melf64bmip \")\n      libsuff=64 shlibsuff=64 libmagic=64-bit;;\n    *) libsuff= shlibsuff= libmagic=never-match;;\n    esac\n    ;;\n  esac\n  shlibpath_var=LD_LIBRARY${shlibsuff}_PATH\n  shlibpath_overrides_runpath=no\n  sys_lib_search_path_spec=\"/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}\"\n  sys_lib_dlsearch_path_spec=\"/usr/lib${libsuff} /lib${libsuff}\"\n  hardcode_into_libs=yes\n  ;;\n\n# No shared lib support for Linux oldld, aout, or coff.\nlinux*oldld* | linux*aout* | linux*coff*)\n  dynamic_linker=no\n  ;;\n\n# This must be Linux ELF.\nlinux* | k*bsd*-gnu)\n  version_type=linux\n  need_lib_prefix=no\n  need_version=no\n  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'\n  soname_spec='${libname}${release}${shared_ext}$major'\n  finish_cmds='PATH=\"\\$PATH:/sbin\" ldconfig -n $libdir'\n  shlibpath_var=LD_LIBRARY_PATH\n  shlibpath_overrides_runpath=no\n  # This implies no fast_install, which is unacceptable.\n  # Some rework will be needed to allow for fast_install\n  # before this can be enabled.\n  hardcode_into_libs=yes\n\n  # Append ld.so.conf contents to the search path\n  if test -f /etc/ld.so.conf; then\n    lt_ld_extra=`awk '/^include / { system(sprintf(\"cd /etc; cat %s\", \\$2)); skip = 1; } { if (!skip) print \\$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;s/[:,\t]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\\n' ' '`\n    sys_lib_dlsearch_path_spec=\"/lib /usr/lib $lt_ld_extra\"\n  fi\n\n  # We used to test for /lib/ld.so.1 and disable shared libraries on\n  # powerpc, because MkLinux only supported shared libraries with the\n  # GNU dynamic linker.  Since this was broken with cross compilers,\n  # most powerpc-linux boxes support dynamic linking these days and\n  # people can always --disable-shared, the test was removed, and we\n  # assume the GNU/Linux dynamic linker is in use.\n  dynamic_linker='GNU/Linux ld.so'\n  ;;\n\nnetbsdelf*-gnu)\n  version_type=linux\n  need_lib_prefix=no\n  need_version=no\n  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'\n  soname_spec='${libname}${release}${shared_ext}$major'\n  shlibpath_var=LD_LIBRARY_PATH\n  shlibpath_overrides_runpath=no\n  hardcode_into_libs=yes\n  dynamic_linker='NetBSD ld.elf_so'\n  ;;\n\nnetbsd*)\n  version_type=sunos\n  need_lib_prefix=no\n  need_version=no\n  if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then\n    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'\n    finish_cmds='PATH=\"\\$PATH:/sbin\" ldconfig -m $libdir'\n    dynamic_linker='NetBSD (a.out) ld.so'\n  else\n    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'\n    soname_spec='${libname}${release}${shared_ext}$major'\n    dynamic_linker='NetBSD ld.elf_so'\n  fi\n  shlibpath_var=LD_LIBRARY_PATH\n  shlibpath_overrides_runpath=yes\n  hardcode_into_libs=yes\n  ;;\n\nnewsos6)\n  version_type=linux\n  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'\n  shlibpath_var=LD_LIBRARY_PATH\n  shlibpath_overrides_runpath=yes\n  ;;\n\nnto-qnx*)\n  version_type=linux\n  need_lib_prefix=no\n  need_version=no\n  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'\n  soname_spec='${libname}${release}${shared_ext}$major'\n  shlibpath_var=LD_LIBRARY_PATH\n  shlibpath_overrides_runpath=yes\n  ;;\n\nopenbsd*)\n  version_type=sunos\n  sys_lib_dlsearch_path_spec=\"/usr/lib\"\n  need_lib_prefix=no\n  # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs.\n  case $host_os in\n    openbsd3.3 | openbsd3.3.*) need_version=yes ;;\n    *)                         need_version=no  ;;\n  esac\n  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'\n  finish_cmds='PATH=\"\\$PATH:/sbin\" ldconfig -m $libdir'\n  shlibpath_var=LD_LIBRARY_PATH\n  if test -z \"`echo __ELF__ | $CC -E - | grep __ELF__`\" || test \"$host_os-$host_cpu\" = \"openbsd2.8-powerpc\"; then\n    case $host_os in\n      openbsd2.[89] | openbsd2.[89].*)\n\tshlibpath_overrides_runpath=no\n\t;;\n      *)\n\tshlibpath_overrides_runpath=yes\n\t;;\n      esac\n  else\n    shlibpath_overrides_runpath=yes\n  fi\n  ;;\n\nos2*)\n  libname_spec='$name'\n  shrext_cmds=\".dll\"\n  need_lib_prefix=no\n  library_names_spec='$libname${shared_ext} $libname.a'\n  dynamic_linker='OS/2 ld.exe'\n  shlibpath_var=LIBPATH\n  ;;\n\nosf3* | osf4* | osf5*)\n  version_type=osf\n  need_lib_prefix=no\n  need_version=no\n  soname_spec='${libname}${release}${shared_ext}$major'\n  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'\n  shlibpath_var=LD_LIBRARY_PATH\n  sys_lib_search_path_spec=\"/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib\"\n  sys_lib_dlsearch_path_spec=\"$sys_lib_search_path_spec\"\n  ;;\n\nsolaris*)\n  version_type=linux\n  need_lib_prefix=no\n  need_version=no\n  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'\n  soname_spec='${libname}${release}${shared_ext}$major'\n  shlibpath_var=LD_LIBRARY_PATH\n  shlibpath_overrides_runpath=yes\n  hardcode_into_libs=yes\n  # ldd complains unless libraries are executable\n  postinstall_cmds='chmod +x $lib'\n  ;;\n\nsunos4*)\n  version_type=sunos\n  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'\n  finish_cmds='PATH=\"\\$PATH:/usr/etc\" ldconfig $libdir'\n  shlibpath_var=LD_LIBRARY_PATH\n  shlibpath_overrides_runpath=yes\n  if test \"$with_gnu_ld\" = yes; then\n    need_lib_prefix=no\n  fi\n  need_version=yes\n  ;;\n\nsysv4 | sysv4.3*)\n  version_type=linux\n  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'\n  soname_spec='${libname}${release}${shared_ext}$major'\n  shlibpath_var=LD_LIBRARY_PATH\n  case $host_vendor in\n    sni)\n      shlibpath_overrides_runpath=no\n      need_lib_prefix=no\n      export_dynamic_flag_spec='${wl}-Blargedynsym'\n      runpath_var=LD_RUN_PATH\n      ;;\n    siemens)\n      need_lib_prefix=no\n      ;;\n    motorola)\n      need_lib_prefix=no\n      need_version=no\n      shlibpath_overrides_runpath=no\n      sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'\n      ;;\n  esac\n  ;;\n\nsysv4*MP*)\n  if test -d /usr/nec ;then\n    version_type=linux\n    library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}'\n    soname_spec='$libname${shared_ext}.$major'\n    shlibpath_var=LD_LIBRARY_PATH\n  fi\n  ;;\n\nsysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)\n  version_type=freebsd-elf\n  need_lib_prefix=no\n  need_version=no\n  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'\n  soname_spec='${libname}${release}${shared_ext}$major'\n  shlibpath_var=LD_LIBRARY_PATH\n  hardcode_into_libs=yes\n  if test \"$with_gnu_ld\" = yes; then\n    sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib'\n    shlibpath_overrides_runpath=no\n  else\n    sys_lib_search_path_spec='/usr/ccs/lib /usr/lib'\n    shlibpath_overrides_runpath=yes\n    case $host_os in\n      sco3.2v5*)\n        sys_lib_search_path_spec=\"$sys_lib_search_path_spec /lib\"\n\t;;\n    esac\n  fi\n  sys_lib_dlsearch_path_spec='/usr/lib'\n  ;;\n\nuts4*)\n  version_type=linux\n  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'\n  soname_spec='${libname}${release}${shared_ext}$major'\n  shlibpath_var=LD_LIBRARY_PATH\n  ;;\n\n*)\n  dynamic_linker=no\n  ;;\nesac\n{ echo \"$as_me:$LINENO: result: $dynamic_linker\" >&5\necho \"${ECHO_T}$dynamic_linker\" >&6; }\ntest \"$dynamic_linker\" = no && can_build_shared=no\n\nvariables_saved_for_relink=\"PATH $shlibpath_var $runpath_var\"\nif test \"$GCC\" = yes; then\n  variables_saved_for_relink=\"$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH\"\nfi\n\n{ echo \"$as_me:$LINENO: checking how to hardcode library paths into programs\" >&5\necho $ECHO_N \"checking how to hardcode library paths into programs... $ECHO_C\" >&6; }\nhardcode_action_GCJ=\nif test -n \"$hardcode_libdir_flag_spec_GCJ\" || \\\n   test -n \"$runpath_var_GCJ\" || \\\n   test \"X$hardcode_automatic_GCJ\" = \"Xyes\" ; then\n\n  # We can hardcode non-existant directories.\n  if test \"$hardcode_direct_GCJ\" != no &&\n     # If the only mechanism to avoid hardcoding is shlibpath_var, we\n     # have to relink, otherwise we might link with an installed library\n     # when we should be linking with a yet-to-be-installed one\n     ## test \"$_LT_AC_TAGVAR(hardcode_shlibpath_var, GCJ)\" != no &&\n     test \"$hardcode_minus_L_GCJ\" != no; then\n    # Linking always hardcodes the temporary library directory.\n    hardcode_action_GCJ=relink\n  else\n    # We can link without hardcoding, and we can hardcode nonexisting dirs.\n    hardcode_action_GCJ=immediate\n  fi\nelse\n  # We cannot hardcode anything, or else we can only hardcode existing\n  # directories.\n  hardcode_action_GCJ=unsupported\nfi\n{ echo \"$as_me:$LINENO: result: $hardcode_action_GCJ\" >&5\necho \"${ECHO_T}$hardcode_action_GCJ\" >&6; }\n\nif test \"$hardcode_action_GCJ\" = relink; then\n  # Fast installation is not supported\n  enable_fast_install=no\nelif test \"$shlibpath_overrides_runpath\" = yes ||\n     test \"$enable_shared\" = no; then\n  # Fast installation is not necessary\n  enable_fast_install=needless\nfi\n\n\n# The else clause should only fire when bootstrapping the\n# libtool distribution, otherwise you forgot to ship ltmain.sh\n# with your package, and you will get complaints that there are\n# no rules to generate ltmain.sh.\nif test -f \"$ltmain\"; then\n  # See if we are running on zsh, and set the options which allow our commands through\n  # without removal of \\ escapes.\n  if test -n \"${ZSH_VERSION+set}\" ; then\n    setopt NO_GLOB_SUBST\n  fi\n  # Now quote all the things that may contain metacharacters while being\n  # careful not to overquote the AC_SUBSTed values.  We take copies of the\n  # variables and quote the copies for generation of the libtool script.\n  for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC LTCFLAGS NM \\\n    SED SHELL STRIP \\\n    libname_spec library_names_spec soname_spec extract_expsyms_cmds \\\n    old_striplib striplib file_magic_cmd finish_cmds finish_eval \\\n    deplibs_check_method reload_flag reload_cmds need_locks \\\n    lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \\\n    lt_cv_sys_global_symbol_to_c_name_address \\\n    sys_lib_search_path_spec sys_lib_dlsearch_path_spec \\\n    old_postinstall_cmds old_postuninstall_cmds \\\n    compiler_GCJ \\\n    CC_GCJ \\\n    LD_GCJ \\\n    lt_prog_compiler_wl_GCJ \\\n    lt_prog_compiler_pic_GCJ \\\n    lt_prog_compiler_static_GCJ \\\n    lt_prog_compiler_no_builtin_flag_GCJ \\\n    export_dynamic_flag_spec_GCJ \\\n    thread_safe_flag_spec_GCJ \\\n    whole_archive_flag_spec_GCJ \\\n    enable_shared_with_static_runtimes_GCJ \\\n    old_archive_cmds_GCJ \\\n    old_archive_from_new_cmds_GCJ \\\n    predep_objects_GCJ \\\n    postdep_objects_GCJ \\\n    predeps_GCJ \\\n    postdeps_GCJ \\\n    compiler_lib_search_path_GCJ \\\n    archive_cmds_GCJ \\\n    archive_expsym_cmds_GCJ \\\n    postinstall_cmds_GCJ \\\n    postuninstall_cmds_GCJ \\\n    old_archive_from_expsyms_cmds_GCJ \\\n    allow_undefined_flag_GCJ \\\n    no_undefined_flag_GCJ \\\n    export_symbols_cmds_GCJ \\\n    hardcode_libdir_flag_spec_GCJ \\\n    hardcode_libdir_flag_spec_ld_GCJ \\\n    hardcode_libdir_separator_GCJ \\\n    hardcode_automatic_GCJ \\\n    module_cmds_GCJ \\\n    module_expsym_cmds_GCJ \\\n    lt_cv_prog_compiler_c_o_GCJ \\\n    exclude_expsyms_GCJ \\\n    include_expsyms_GCJ; do\n\n    case $var in\n    old_archive_cmds_GCJ | \\\n    old_archive_from_new_cmds_GCJ | \\\n    archive_cmds_GCJ | \\\n    archive_expsym_cmds_GCJ | \\\n    module_cmds_GCJ | \\\n    module_expsym_cmds_GCJ | \\\n    old_archive_from_expsyms_cmds_GCJ | \\\n    export_symbols_cmds_GCJ | \\\n    extract_expsyms_cmds | reload_cmds | finish_cmds | \\\n    postinstall_cmds | postuninstall_cmds | \\\n    old_postinstall_cmds | old_postuninstall_cmds | \\\n    sys_lib_search_path_spec | sys_lib_dlsearch_path_spec)\n      # Double-quote double-evaled strings.\n      eval \"lt_$var=\\\\\\\"\\`\\$echo \\\"X\\$$var\\\" | \\$Xsed -e \\\"\\$double_quote_subst\\\" -e \\\"\\$sed_quote_subst\\\" -e \\\"\\$delay_variable_subst\\\"\\`\\\\\\\"\"\n      ;;\n    *)\n      eval \"lt_$var=\\\\\\\"\\`\\$echo \\\"X\\$$var\\\" | \\$Xsed -e \\\"\\$sed_quote_subst\\\"\\`\\\\\\\"\"\n      ;;\n    esac\n  done\n\n  case $lt_echo in\n  *'\\$0 --fallback-echo\"')\n    lt_echo=`$echo \"X$lt_echo\" | $Xsed -e 's/\\\\\\\\\\\\\\$0 --fallback-echo\"$/$0 --fallback-echo\"/'`\n    ;;\n  esac\n\ncfgfile=\"$ofile\"\n\n  cat <<__EOF__ >> \"$cfgfile\"\n# ### BEGIN LIBTOOL TAG CONFIG: $tagname\n\n# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:\n\n# Shell to use when invoking shell scripts.\nSHELL=$lt_SHELL\n\n# Whether or not to build shared libraries.\nbuild_libtool_libs=$enable_shared\n\n# Whether or not to build static libraries.\nbuild_old_libs=$enable_static\n\n# Whether or not to add -lc for building shared libraries.\nbuild_libtool_need_lc=$archive_cmds_need_lc_GCJ\n\n# Whether or not to disallow shared libs when runtime libs are static\nallow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_GCJ\n\n# Whether or not to optimize for fast installation.\nfast_install=$enable_fast_install\n\n# The host system.\nhost_alias=$host_alias\nhost=$host\nhost_os=$host_os\n\n# The build system.\nbuild_alias=$build_alias\nbuild=$build\nbuild_os=$build_os\n\n# An echo program that does not interpret backslashes.\necho=$lt_echo\n\n# The archiver.\nAR=$lt_AR\nAR_FLAGS=$lt_AR_FLAGS\n\n# A C compiler.\nLTCC=$lt_LTCC\n\n# LTCC compiler flags.\nLTCFLAGS=$lt_LTCFLAGS\n\n# A language-specific compiler.\nCC=$lt_compiler_GCJ\n\n# Is the compiler the GNU C compiler?\nwith_gcc=$GCC_GCJ\n\n# An ERE matcher.\nEGREP=$lt_EGREP\n\n# The linker used to build libraries.\nLD=$lt_LD_GCJ\n\n# Whether we need hard or soft links.\nLN_S=$lt_LN_S\n\n# A BSD-compatible nm program.\nNM=$lt_NM\n\n# A symbol stripping program\nSTRIP=$lt_STRIP\n\n# Used to examine libraries when file_magic_cmd begins \"file\"\nMAGIC_CMD=$MAGIC_CMD\n\n# Used on cygwin: DLL creation program.\nDLLTOOL=\"$DLLTOOL\"\n\n# Used on cygwin: object dumper.\nOBJDUMP=\"$OBJDUMP\"\n\n# Used on cygwin: assembler.\nAS=\"$AS\"\n\n# The name of the directory that contains temporary libtool files.\nobjdir=$objdir\n\n# How to create reloadable object files.\nreload_flag=$lt_reload_flag\nreload_cmds=$lt_reload_cmds\n\n# How to pass a linker flag through the compiler.\nwl=$lt_lt_prog_compiler_wl_GCJ\n\n# Object file suffix (normally \"o\").\nobjext=\"$ac_objext\"\n\n# Old archive suffix (normally \"a\").\nlibext=\"$libext\"\n\n# Shared library suffix (normally \".so\").\nshrext_cmds='$shrext_cmds'\n\n# Executable file suffix (normally \"\").\nexeext=\"$exeext\"\n\n# Additional compiler flags for building library objects.\npic_flag=$lt_lt_prog_compiler_pic_GCJ\npic_mode=$pic_mode\n\n# What is the maximum length of a command?\nmax_cmd_len=$lt_cv_sys_max_cmd_len\n\n# Does compiler simultaneously support -c and -o options?\ncompiler_c_o=$lt_lt_cv_prog_compiler_c_o_GCJ\n\n# Must we lock files when doing compilation?\nneed_locks=$lt_need_locks\n\n# Do we need the lib prefix for modules?\nneed_lib_prefix=$need_lib_prefix\n\n# Do we need a version for libraries?\nneed_version=$need_version\n\n# Whether dlopen is supported.\ndlopen_support=$enable_dlopen\n\n# Whether dlopen of programs is supported.\ndlopen_self=$enable_dlopen_self\n\n# Whether dlopen of statically linked programs is supported.\ndlopen_self_static=$enable_dlopen_self_static\n\n# Compiler flag to prevent dynamic linking.\nlink_static_flag=$lt_lt_prog_compiler_static_GCJ\n\n# Compiler flag to turn off builtin functions.\nno_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_GCJ\n\n# Compiler flag to allow reflexive dlopens.\nexport_dynamic_flag_spec=$lt_export_dynamic_flag_spec_GCJ\n\n# Compiler flag to generate shared objects directly from archives.\nwhole_archive_flag_spec=$lt_whole_archive_flag_spec_GCJ\n\n# Compiler flag to generate thread-safe objects.\nthread_safe_flag_spec=$lt_thread_safe_flag_spec_GCJ\n\n# Library versioning type.\nversion_type=$version_type\n\n# Format of library name prefix.\nlibname_spec=$lt_libname_spec\n\n# List of archive names.  First name is the real one, the rest are links.\n# The last name is the one that the linker finds with -lNAME.\nlibrary_names_spec=$lt_library_names_spec\n\n# The coded name of the library, if different from the real name.\nsoname_spec=$lt_soname_spec\n\n# Commands used to build and install an old-style archive.\nRANLIB=$lt_RANLIB\nold_archive_cmds=$lt_old_archive_cmds_GCJ\nold_postinstall_cmds=$lt_old_postinstall_cmds\nold_postuninstall_cmds=$lt_old_postuninstall_cmds\n\n# Create an old-style archive from a shared archive.\nold_archive_from_new_cmds=$lt_old_archive_from_new_cmds_GCJ\n\n# Create a temporary old-style archive to link instead of a shared archive.\nold_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_GCJ\n\n# Commands used to build and install a shared archive.\narchive_cmds=$lt_archive_cmds_GCJ\narchive_expsym_cmds=$lt_archive_expsym_cmds_GCJ\npostinstall_cmds=$lt_postinstall_cmds\npostuninstall_cmds=$lt_postuninstall_cmds\n\n# Commands used to build a loadable module (assumed same as above if empty)\nmodule_cmds=$lt_module_cmds_GCJ\nmodule_expsym_cmds=$lt_module_expsym_cmds_GCJ\n\n# Commands to strip libraries.\nold_striplib=$lt_old_striplib\nstriplib=$lt_striplib\n\n# Dependencies to place before the objects being linked to create a\n# shared library.\npredep_objects=$lt_predep_objects_GCJ\n\n# Dependencies to place after the objects being linked to create a\n# shared library.\npostdep_objects=$lt_postdep_objects_GCJ\n\n# Dependencies to place before the objects being linked to create a\n# shared library.\npredeps=$lt_predeps_GCJ\n\n# Dependencies to place after the objects being linked to create a\n# shared library.\npostdeps=$lt_postdeps_GCJ\n\n# The library search path used internally by the compiler when linking\n# a shared library.\ncompiler_lib_search_path=$lt_compiler_lib_search_path_GCJ\n\n# Method to check whether dependent libraries are shared objects.\ndeplibs_check_method=$lt_deplibs_check_method\n\n# Command to use when deplibs_check_method == file_magic.\nfile_magic_cmd=$lt_file_magic_cmd\n\n# Flag that allows shared libraries with undefined symbols to be built.\nallow_undefined_flag=$lt_allow_undefined_flag_GCJ\n\n# Flag that forces no undefined symbols.\nno_undefined_flag=$lt_no_undefined_flag_GCJ\n\n# Commands used to finish a libtool library installation in a directory.\nfinish_cmds=$lt_finish_cmds\n\n# Same as above, but a single script fragment to be evaled but not shown.\nfinish_eval=$lt_finish_eval\n\n# Take the output of nm and produce a listing of raw symbols and C names.\nglobal_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe\n\n# Transform the output of nm in a proper C declaration\nglobal_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl\n\n# Transform the output of nm in a C name address pair\nglobal_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address\n\n# This is the shared library runtime path variable.\nrunpath_var=$runpath_var\n\n# This is the shared library path variable.\nshlibpath_var=$shlibpath_var\n\n# Is shlibpath searched before the hard-coded library search path?\nshlibpath_overrides_runpath=$shlibpath_overrides_runpath\n\n# How to hardcode a shared library path into an executable.\nhardcode_action=$hardcode_action_GCJ\n\n# Whether we should hardcode library paths into libraries.\nhardcode_into_libs=$hardcode_into_libs\n\n# Flag to hardcode \\$libdir into a binary during linking.\n# This must work even if \\$libdir does not exist.\nhardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_GCJ\n\n# If ld is used when linking, flag to hardcode \\$libdir into\n# a binary during linking. This must work even if \\$libdir does\n# not exist.\nhardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_GCJ\n\n# Whether we need a single -rpath flag with a separated argument.\nhardcode_libdir_separator=$lt_hardcode_libdir_separator_GCJ\n\n# Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the\n# resulting binary.\nhardcode_direct=$hardcode_direct_GCJ\n\n# Set to yes if using the -LDIR flag during linking hardcodes DIR into the\n# resulting binary.\nhardcode_minus_L=$hardcode_minus_L_GCJ\n\n# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into\n# the resulting binary.\nhardcode_shlibpath_var=$hardcode_shlibpath_var_GCJ\n\n# Set to yes if building a shared library automatically hardcodes DIR into the library\n# and all subsequent libraries and executables linked against it.\nhardcode_automatic=$hardcode_automatic_GCJ\n\n# Variables whose values should be saved in libtool wrapper scripts and\n# restored at relink time.\nvariables_saved_for_relink=\"$variables_saved_for_relink\"\n\n# Whether libtool must link a program against all its dependency libraries.\nlink_all_deplibs=$link_all_deplibs_GCJ\n\n# Compile-time system search path for libraries\nsys_lib_search_path_spec=$lt_sys_lib_search_path_spec\n\n# Run-time system search path for libraries\nsys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec\n\n# Fix the shell variable \\$srcfile for the compiler.\nfix_srcfile_path=\"$fix_srcfile_path_GCJ\"\n\n# Set to yes if exported symbols are required.\nalways_export_symbols=$always_export_symbols_GCJ\n\n# The commands to list exported symbols.\nexport_symbols_cmds=$lt_export_symbols_cmds_GCJ\n\n# The commands to extract the exported symbol list from a shared archive.\nextract_expsyms_cmds=$lt_extract_expsyms_cmds\n\n# Symbols that should not be listed in the preloaded symbols.\nexclude_expsyms=$lt_exclude_expsyms_GCJ\n\n# Symbols that must always be exported.\ninclude_expsyms=$lt_include_expsyms_GCJ\n\n# ### END LIBTOOL TAG CONFIG: $tagname\n\n__EOF__\n\n\nelse\n  # If there is no Makefile yet, we rely on a make rule to execute\n  # `config.status --recheck' to rerun these tests and create the\n  # libtool script then.\n  ltmain_in=`echo $ltmain | sed -e 's/\\.sh$/.in/'`\n  if test -f \"$ltmain_in\"; then\n    test -f Makefile && make \"$ltmain\"\n  fi\nfi\n\n\nac_ext=c\nac_cpp='$CPP $CPPFLAGS'\nac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'\nac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'\nac_compiler_gnu=$ac_cv_c_compiler_gnu\n\nCC=\"$lt_save_CC\"\n\n\telse\n\t  tagname=\"\"\n\tfi\n\t;;\n\n      RC)\n\n\n# Source file extension for RC test sources.\nac_ext=rc\n\n# Object file extension for compiled RC test sources.\nobjext=o\nobjext_RC=$objext\n\n# Code to be used in simple compile tests\nlt_simple_compile_test_code='sample MENU { MENUITEM \"&Soup\", 100, CHECKED }\\n'\n\n# Code to be used in simple link tests\nlt_simple_link_test_code=\"$lt_simple_compile_test_code\"\n\n# ltmain only uses $CC for tagged configurations so make sure $CC is set.\n\n# If no C compiler was specified, use CC.\nLTCC=${LTCC-\"$CC\"}\n\n# If no C compiler flags were specified, use CFLAGS.\nLTCFLAGS=${LTCFLAGS-\"$CFLAGS\"}\n\n# Allow CC to be a program name with arguments.\ncompiler=$CC\n\n\n# save warnings/boilerplate of simple test code\nac_outfile=conftest.$ac_objext\nprintf \"$lt_simple_compile_test_code\" >conftest.$ac_ext\neval \"$ac_compile\" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err\n_lt_compiler_boilerplate=`cat conftest.err`\n$rm conftest*\n\nac_outfile=conftest.$ac_objext\nprintf \"$lt_simple_link_test_code\" >conftest.$ac_ext\neval \"$ac_link\" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err\n_lt_linker_boilerplate=`cat conftest.err`\n$rm conftest*\n\n\n# Allow CC to be a program name with arguments.\nlt_save_CC=\"$CC\"\nCC=${RC-\"windres\"}\ncompiler=$CC\ncompiler_RC=$CC\nfor cc_temp in $compiler\"\"; do\n  case $cc_temp in\n    compile | *[\\\\/]compile | ccache | *[\\\\/]ccache ) ;;\n    distcc | *[\\\\/]distcc | purify | *[\\\\/]purify ) ;;\n    \\-*) ;;\n    *) break;;\n  esac\ndone\ncc_basename=`$echo \"X$cc_temp\" | $Xsed -e 's%.*/%%' -e \"s%^$host_alias-%%\"`\n\nlt_cv_prog_compiler_c_o_RC=yes\n\n# The else clause should only fire when bootstrapping the\n# libtool distribution, otherwise you forgot to ship ltmain.sh\n# with your package, and you will get complaints that there are\n# no rules to generate ltmain.sh.\nif test -f \"$ltmain\"; then\n  # See if we are running on zsh, and set the options which allow our commands through\n  # without removal of \\ escapes.\n  if test -n \"${ZSH_VERSION+set}\" ; then\n    setopt NO_GLOB_SUBST\n  fi\n  # Now quote all the things that may contain metacharacters while being\n  # careful not to overquote the AC_SUBSTed values.  We take copies of the\n  # variables and quote the copies for generation of the libtool script.\n  for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC LTCFLAGS NM \\\n    SED SHELL STRIP \\\n    libname_spec library_names_spec soname_spec extract_expsyms_cmds \\\n    old_striplib striplib file_magic_cmd finish_cmds finish_eval \\\n    deplibs_check_method reload_flag reload_cmds need_locks \\\n    lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \\\n    lt_cv_sys_global_symbol_to_c_name_address \\\n    sys_lib_search_path_spec sys_lib_dlsearch_path_spec \\\n    old_postinstall_cmds old_postuninstall_cmds \\\n    compiler_RC \\\n    CC_RC \\\n    LD_RC \\\n    lt_prog_compiler_wl_RC \\\n    lt_prog_compiler_pic_RC \\\n    lt_prog_compiler_static_RC \\\n    lt_prog_compiler_no_builtin_flag_RC \\\n    export_dynamic_flag_spec_RC \\\n    thread_safe_flag_spec_RC \\\n    whole_archive_flag_spec_RC \\\n    enable_shared_with_static_runtimes_RC \\\n    old_archive_cmds_RC \\\n    old_archive_from_new_cmds_RC \\\n    predep_objects_RC \\\n    postdep_objects_RC \\\n    predeps_RC \\\n    postdeps_RC \\\n    compiler_lib_search_path_RC \\\n    archive_cmds_RC \\\n    archive_expsym_cmds_RC \\\n    postinstall_cmds_RC \\\n    postuninstall_cmds_RC \\\n    old_archive_from_expsyms_cmds_RC \\\n    allow_undefined_flag_RC \\\n    no_undefined_flag_RC \\\n    export_symbols_cmds_RC \\\n    hardcode_libdir_flag_spec_RC \\\n    hardcode_libdir_flag_spec_ld_RC \\\n    hardcode_libdir_separator_RC \\\n    hardcode_automatic_RC \\\n    module_cmds_RC \\\n    module_expsym_cmds_RC \\\n    lt_cv_prog_compiler_c_o_RC \\\n    exclude_expsyms_RC \\\n    include_expsyms_RC; do\n\n    case $var in\n    old_archive_cmds_RC | \\\n    old_archive_from_new_cmds_RC | \\\n    archive_cmds_RC | \\\n    archive_expsym_cmds_RC | \\\n    module_cmds_RC | \\\n    module_expsym_cmds_RC | \\\n    old_archive_from_expsyms_cmds_RC | \\\n    export_symbols_cmds_RC | \\\n    extract_expsyms_cmds | reload_cmds | finish_cmds | \\\n    postinstall_cmds | postuninstall_cmds | \\\n    old_postinstall_cmds | old_postuninstall_cmds | \\\n    sys_lib_search_path_spec | sys_lib_dlsearch_path_spec)\n      # Double-quote double-evaled strings.\n      eval \"lt_$var=\\\\\\\"\\`\\$echo \\\"X\\$$var\\\" | \\$Xsed -e \\\"\\$double_quote_subst\\\" -e \\\"\\$sed_quote_subst\\\" -e \\\"\\$delay_variable_subst\\\"\\`\\\\\\\"\"\n      ;;\n    *)\n      eval \"lt_$var=\\\\\\\"\\`\\$echo \\\"X\\$$var\\\" | \\$Xsed -e \\\"\\$sed_quote_subst\\\"\\`\\\\\\\"\"\n      ;;\n    esac\n  done\n\n  case $lt_echo in\n  *'\\$0 --fallback-echo\"')\n    lt_echo=`$echo \"X$lt_echo\" | $Xsed -e 's/\\\\\\\\\\\\\\$0 --fallback-echo\"$/$0 --fallback-echo\"/'`\n    ;;\n  esac\n\ncfgfile=\"$ofile\"\n\n  cat <<__EOF__ >> \"$cfgfile\"\n# ### BEGIN LIBTOOL TAG CONFIG: $tagname\n\n# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:\n\n# Shell to use when invoking shell scripts.\nSHELL=$lt_SHELL\n\n# Whether or not to build shared libraries.\nbuild_libtool_libs=$enable_shared\n\n# Whether or not to build static libraries.\nbuild_old_libs=$enable_static\n\n# Whether or not to add -lc for building shared libraries.\nbuild_libtool_need_lc=$archive_cmds_need_lc_RC\n\n# Whether or not to disallow shared libs when runtime libs are static\nallow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_RC\n\n# Whether or not to optimize for fast installation.\nfast_install=$enable_fast_install\n\n# The host system.\nhost_alias=$host_alias\nhost=$host\nhost_os=$host_os\n\n# The build system.\nbuild_alias=$build_alias\nbuild=$build\nbuild_os=$build_os\n\n# An echo program that does not interpret backslashes.\necho=$lt_echo\n\n# The archiver.\nAR=$lt_AR\nAR_FLAGS=$lt_AR_FLAGS\n\n# A C compiler.\nLTCC=$lt_LTCC\n\n# LTCC compiler flags.\nLTCFLAGS=$lt_LTCFLAGS\n\n# A language-specific compiler.\nCC=$lt_compiler_RC\n\n# Is the compiler the GNU C compiler?\nwith_gcc=$GCC_RC\n\n# An ERE matcher.\nEGREP=$lt_EGREP\n\n# The linker used to build libraries.\nLD=$lt_LD_RC\n\n# Whether we need hard or soft links.\nLN_S=$lt_LN_S\n\n# A BSD-compatible nm program.\nNM=$lt_NM\n\n# A symbol stripping program\nSTRIP=$lt_STRIP\n\n# Used to examine libraries when file_magic_cmd begins \"file\"\nMAGIC_CMD=$MAGIC_CMD\n\n# Used on cygwin: DLL creation program.\nDLLTOOL=\"$DLLTOOL\"\n\n# Used on cygwin: object dumper.\nOBJDUMP=\"$OBJDUMP\"\n\n# Used on cygwin: assembler.\nAS=\"$AS\"\n\n# The name of the directory that contains temporary libtool files.\nobjdir=$objdir\n\n# How to create reloadable object files.\nreload_flag=$lt_reload_flag\nreload_cmds=$lt_reload_cmds\n\n# How to pass a linker flag through the compiler.\nwl=$lt_lt_prog_compiler_wl_RC\n\n# Object file suffix (normally \"o\").\nobjext=\"$ac_objext\"\n\n# Old archive suffix (normally \"a\").\nlibext=\"$libext\"\n\n# Shared library suffix (normally \".so\").\nshrext_cmds='$shrext_cmds'\n\n# Executable file suffix (normally \"\").\nexeext=\"$exeext\"\n\n# Additional compiler flags for building library objects.\npic_flag=$lt_lt_prog_compiler_pic_RC\npic_mode=$pic_mode\n\n# What is the maximum length of a command?\nmax_cmd_len=$lt_cv_sys_max_cmd_len\n\n# Does compiler simultaneously support -c and -o options?\ncompiler_c_o=$lt_lt_cv_prog_compiler_c_o_RC\n\n# Must we lock files when doing compilation?\nneed_locks=$lt_need_locks\n\n# Do we need the lib prefix for modules?\nneed_lib_prefix=$need_lib_prefix\n\n# Do we need a version for libraries?\nneed_version=$need_version\n\n# Whether dlopen is supported.\ndlopen_support=$enable_dlopen\n\n# Whether dlopen of programs is supported.\ndlopen_self=$enable_dlopen_self\n\n# Whether dlopen of statically linked programs is supported.\ndlopen_self_static=$enable_dlopen_self_static\n\n# Compiler flag to prevent dynamic linking.\nlink_static_flag=$lt_lt_prog_compiler_static_RC\n\n# Compiler flag to turn off builtin functions.\nno_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_RC\n\n# Compiler flag to allow reflexive dlopens.\nexport_dynamic_flag_spec=$lt_export_dynamic_flag_spec_RC\n\n# Compiler flag to generate shared objects directly from archives.\nwhole_archive_flag_spec=$lt_whole_archive_flag_spec_RC\n\n# Compiler flag to generate thread-safe objects.\nthread_safe_flag_spec=$lt_thread_safe_flag_spec_RC\n\n# Library versioning type.\nversion_type=$version_type\n\n# Format of library name prefix.\nlibname_spec=$lt_libname_spec\n\n# List of archive names.  First name is the real one, the rest are links.\n# The last name is the one that the linker finds with -lNAME.\nlibrary_names_spec=$lt_library_names_spec\n\n# The coded name of the library, if different from the real name.\nsoname_spec=$lt_soname_spec\n\n# Commands used to build and install an old-style archive.\nRANLIB=$lt_RANLIB\nold_archive_cmds=$lt_old_archive_cmds_RC\nold_postinstall_cmds=$lt_old_postinstall_cmds\nold_postuninstall_cmds=$lt_old_postuninstall_cmds\n\n# Create an old-style archive from a shared archive.\nold_archive_from_new_cmds=$lt_old_archive_from_new_cmds_RC\n\n# Create a temporary old-style archive to link instead of a shared archive.\nold_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_RC\n\n# Commands used to build and install a shared archive.\narchive_cmds=$lt_archive_cmds_RC\narchive_expsym_cmds=$lt_archive_expsym_cmds_RC\npostinstall_cmds=$lt_postinstall_cmds\npostuninstall_cmds=$lt_postuninstall_cmds\n\n# Commands used to build a loadable module (assumed same as above if empty)\nmodule_cmds=$lt_module_cmds_RC\nmodule_expsym_cmds=$lt_module_expsym_cmds_RC\n\n# Commands to strip libraries.\nold_striplib=$lt_old_striplib\nstriplib=$lt_striplib\n\n# Dependencies to place before the objects being linked to create a\n# shared library.\npredep_objects=$lt_predep_objects_RC\n\n# Dependencies to place after the objects being linked to create a\n# shared library.\npostdep_objects=$lt_postdep_objects_RC\n\n# Dependencies to place before the objects being linked to create a\n# shared library.\npredeps=$lt_predeps_RC\n\n# Dependencies to place after the objects being linked to create a\n# shared library.\npostdeps=$lt_postdeps_RC\n\n# The library search path used internally by the compiler when linking\n# a shared library.\ncompiler_lib_search_path=$lt_compiler_lib_search_path_RC\n\n# Method to check whether dependent libraries are shared objects.\ndeplibs_check_method=$lt_deplibs_check_method\n\n# Command to use when deplibs_check_method == file_magic.\nfile_magic_cmd=$lt_file_magic_cmd\n\n# Flag that allows shared libraries with undefined symbols to be built.\nallow_undefined_flag=$lt_allow_undefined_flag_RC\n\n# Flag that forces no undefined symbols.\nno_undefined_flag=$lt_no_undefined_flag_RC\n\n# Commands used to finish a libtool library installation in a directory.\nfinish_cmds=$lt_finish_cmds\n\n# Same as above, but a single script fragment to be evaled but not shown.\nfinish_eval=$lt_finish_eval\n\n# Take the output of nm and produce a listing of raw symbols and C names.\nglobal_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe\n\n# Transform the output of nm in a proper C declaration\nglobal_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl\n\n# Transform the output of nm in a C name address pair\nglobal_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address\n\n# This is the shared library runtime path variable.\nrunpath_var=$runpath_var\n\n# This is the shared library path variable.\nshlibpath_var=$shlibpath_var\n\n# Is shlibpath searched before the hard-coded library search path?\nshlibpath_overrides_runpath=$shlibpath_overrides_runpath\n\n# How to hardcode a shared library path into an executable.\nhardcode_action=$hardcode_action_RC\n\n# Whether we should hardcode library paths into libraries.\nhardcode_into_libs=$hardcode_into_libs\n\n# Flag to hardcode \\$libdir into a binary during linking.\n# This must work even if \\$libdir does not exist.\nhardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_RC\n\n# If ld is used when linking, flag to hardcode \\$libdir into\n# a binary during linking. This must work even if \\$libdir does\n# not exist.\nhardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_RC\n\n# Whether we need a single -rpath flag with a separated argument.\nhardcode_libdir_separator=$lt_hardcode_libdir_separator_RC\n\n# Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the\n# resulting binary.\nhardcode_direct=$hardcode_direct_RC\n\n# Set to yes if using the -LDIR flag during linking hardcodes DIR into the\n# resulting binary.\nhardcode_minus_L=$hardcode_minus_L_RC\n\n# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into\n# the resulting binary.\nhardcode_shlibpath_var=$hardcode_shlibpath_var_RC\n\n# Set to yes if building a shared library automatically hardcodes DIR into the library\n# and all subsequent libraries and executables linked against it.\nhardcode_automatic=$hardcode_automatic_RC\n\n# Variables whose values should be saved in libtool wrapper scripts and\n# restored at relink time.\nvariables_saved_for_relink=\"$variables_saved_for_relink\"\n\n# Whether libtool must link a program against all its dependency libraries.\nlink_all_deplibs=$link_all_deplibs_RC\n\n# Compile-time system search path for libraries\nsys_lib_search_path_spec=$lt_sys_lib_search_path_spec\n\n# Run-time system search path for libraries\nsys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec\n\n# Fix the shell variable \\$srcfile for the compiler.\nfix_srcfile_path=\"$fix_srcfile_path_RC\"\n\n# Set to yes if exported symbols are required.\nalways_export_symbols=$always_export_symbols_RC\n\n# The commands to list exported symbols.\nexport_symbols_cmds=$lt_export_symbols_cmds_RC\n\n# The commands to extract the exported symbol list from a shared archive.\nextract_expsyms_cmds=$lt_extract_expsyms_cmds\n\n# Symbols that should not be listed in the preloaded symbols.\nexclude_expsyms=$lt_exclude_expsyms_RC\n\n# Symbols that must always be exported.\ninclude_expsyms=$lt_include_expsyms_RC\n\n# ### END LIBTOOL TAG CONFIG: $tagname\n\n__EOF__\n\n\nelse\n  # If there is no Makefile yet, we rely on a make rule to execute\n  # `config.status --recheck' to rerun these tests and create the\n  # libtool script then.\n  ltmain_in=`echo $ltmain | sed -e 's/\\.sh$/.in/'`\n  if test -f \"$ltmain_in\"; then\n    test -f Makefile && make \"$ltmain\"\n  fi\nfi\n\n\nac_ext=c\nac_cpp='$CPP $CPPFLAGS'\nac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'\nac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'\nac_compiler_gnu=$ac_cv_c_compiler_gnu\n\nCC=\"$lt_save_CC\"\n\n\t;;\n\n      *)\n\t{ { echo \"$as_me:$LINENO: error: Unsupported tag name: $tagname\" >&5\necho \"$as_me: error: Unsupported tag name: $tagname\" >&2;}\n   { (exit 1); exit 1; }; }\n\t;;\n      esac\n\n      # Append the new tag name to the list of available tags.\n      if test -n \"$tagname\" ; then\n      available_tags=\"$available_tags $tagname\"\n    fi\n    fi\n  done\n  IFS=\"$lt_save_ifs\"\n\n  # Now substitute the updated list of available tags.\n  if eval \"sed -e 's/^available_tags=.*\\$/available_tags=\\\"$available_tags\\\"/' \\\"$ofile\\\" > \\\"${ofile}T\\\"\"; then\n    mv \"${ofile}T\" \"$ofile\"\n    chmod +x \"$ofile\"\n  else\n    rm -f \"${ofile}T\"\n    { { echo \"$as_me:$LINENO: error: unable to update list of available tagged configurations.\" >&5\necho \"$as_me: error: unable to update list of available tagged configurations.\" >&2;}\n   { (exit 1); exit 1; }; }\n  fi\nfi\n\n\n\n# This can be used to rebuild libtool when needed\nLIBTOOL_DEPS=\"$ac_aux_dir/ltmain.sh\"\n\n# Always use our own libtool.\nLIBTOOL='$(SHELL) $(top_builddir)/libtool'\n\n# Prevent multiple expansion\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nac_ext=cpp\nac_cpp='$CXXCPP $CPPFLAGS'\nac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'\nac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'\nac_compiler_gnu=$ac_cv_cxx_compiler_gnu\nif test -z \"$CXX\"; then\n  if test -n \"$CCC\"; then\n    CXX=$CCC\n  else\n    if test -n \"$ac_tool_prefix\"; then\n  for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC\n  do\n    # Extract the first word of \"$ac_tool_prefix$ac_prog\", so it can be a program name with args.\nset dummy $ac_tool_prefix$ac_prog; ac_word=$2\n{ echo \"$as_me:$LINENO: checking for $ac_word\" >&5\necho $ECHO_N \"checking for $ac_word... $ECHO_C\" >&6; }\nif test \"${ac_cv_prog_CXX+set}\" = set; then\n  echo $ECHO_N \"(cached) $ECHO_C\" >&6\nelse\n  if test -n \"$CXX\"; then\n  ac_cv_prog_CXX=\"$CXX\" # Let the user override the test.\nelse\nas_save_IFS=$IFS; IFS=$PATH_SEPARATOR\nfor as_dir in $PATH\ndo\n  IFS=$as_save_IFS\n  test -z \"$as_dir\" && as_dir=.\n  for ac_exec_ext in '' $ac_executable_extensions; do\n  if { test -f \"$as_dir/$ac_word$ac_exec_ext\" && $as_executable_p \"$as_dir/$ac_word$ac_exec_ext\"; }; then\n    ac_cv_prog_CXX=\"$ac_tool_prefix$ac_prog\"\n    echo \"$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext\" >&5\n    break 2\n  fi\ndone\ndone\nIFS=$as_save_IFS\n\nfi\nfi\nCXX=$ac_cv_prog_CXX\nif test -n \"$CXX\"; then\n  { echo \"$as_me:$LINENO: result: $CXX\" >&5\necho \"${ECHO_T}$CXX\" >&6; }\nelse\n  { echo \"$as_me:$LINENO: result: no\" >&5\necho \"${ECHO_T}no\" >&6; }\nfi\n\n\n    test -n \"$CXX\" && break\n  done\nfi\nif test -z \"$CXX\"; then\n  ac_ct_CXX=$CXX\n  for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC\ndo\n  # Extract the first word of \"$ac_prog\", so it can be a program name with args.\nset dummy $ac_prog; ac_word=$2\n{ echo \"$as_me:$LINENO: checking for $ac_word\" >&5\necho $ECHO_N \"checking for $ac_word... $ECHO_C\" >&6; }\nif test \"${ac_cv_prog_ac_ct_CXX+set}\" = set; then\n  echo $ECHO_N \"(cached) $ECHO_C\" >&6\nelse\n  if test -n \"$ac_ct_CXX\"; then\n  ac_cv_prog_ac_ct_CXX=\"$ac_ct_CXX\" # Let the user override the test.\nelse\nas_save_IFS=$IFS; IFS=$PATH_SEPARATOR\nfor as_dir in $PATH\ndo\n  IFS=$as_save_IFS\n  test -z \"$as_dir\" && as_dir=.\n  for ac_exec_ext in '' $ac_executable_extensions; do\n  if { test -f \"$as_dir/$ac_word$ac_exec_ext\" && $as_executable_p \"$as_dir/$ac_word$ac_exec_ext\"; }; then\n    ac_cv_prog_ac_ct_CXX=\"$ac_prog\"\n    echo \"$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext\" >&5\n    break 2\n  fi\ndone\ndone\nIFS=$as_save_IFS\n\nfi\nfi\nac_ct_CXX=$ac_cv_prog_ac_ct_CXX\nif test -n \"$ac_ct_CXX\"; then\n  { echo \"$as_me:$LINENO: result: $ac_ct_CXX\" >&5\necho \"${ECHO_T}$ac_ct_CXX\" >&6; }\nelse\n  { echo \"$as_me:$LINENO: result: no\" >&5\necho \"${ECHO_T}no\" >&6; }\nfi\n\n\n  test -n \"$ac_ct_CXX\" && break\ndone\n\n  if test \"x$ac_ct_CXX\" = x; then\n    CXX=\"g++\"\n  else\n    case $cross_compiling:$ac_tool_warned in\nyes:)\n{ echo \"$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools\nwhose name does not start with the host triplet.  If you think this\nconfiguration is useful to you, please write to autoconf@gnu.org.\" >&5\necho \"$as_me: WARNING: In the future, Autoconf will not detect cross-tools\nwhose name does not start with the host triplet.  If you think this\nconfiguration is useful to you, please write to autoconf@gnu.org.\" >&2;}\nac_tool_warned=yes ;;\nesac\n    CXX=$ac_ct_CXX\n  fi\nfi\n\n  fi\nfi\n# Provide some information about the compiler.\necho \"$as_me:$LINENO: checking for C++ compiler version\" >&5\nac_compiler=`set X $ac_compile; echo $2`\n{ (eval echo \"$as_me:$LINENO: \\\"$ac_compiler --version >&5\\\"\") >&5\n  (eval $ac_compiler --version >&5) 2>&5\n  ac_status=$?\n  echo \"$as_me:$LINENO: \\$? = $ac_status\" >&5\n  (exit $ac_status); }\n{ (eval echo \"$as_me:$LINENO: \\\"$ac_compiler -v >&5\\\"\") >&5\n  (eval $ac_compiler -v >&5) 2>&5\n  ac_status=$?\n  echo \"$as_me:$LINENO: \\$? = $ac_status\" >&5\n  (exit $ac_status); }\n{ (eval echo \"$as_me:$LINENO: \\\"$ac_compiler -V >&5\\\"\") >&5\n  (eval $ac_compiler -V >&5) 2>&5\n  ac_status=$?\n  echo \"$as_me:$LINENO: \\$? = $ac_status\" >&5\n  (exit $ac_status); }\n\n{ echo \"$as_me:$LINENO: checking whether we are using the GNU C++ compiler\" >&5\necho $ECHO_N \"checking whether we are using the GNU C++ compiler... $ECHO_C\" >&6; }\nif test \"${ac_cv_cxx_compiler_gnu+set}\" = set; then\n  echo $ECHO_N \"(cached) $ECHO_C\" >&6\nelse\n  cat >conftest.$ac_ext <<_ACEOF\n/* confdefs.h.  */\n_ACEOF\ncat confdefs.h >>conftest.$ac_ext\ncat >>conftest.$ac_ext <<_ACEOF\n/* end confdefs.h.  */\n\nint\nmain ()\n{\n#ifndef __GNUC__\n       choke me\n#endif\n\n  ;\n  return 0;\n}\n_ACEOF\nrm -f conftest.$ac_objext\nif { (eval echo \"$as_me:$LINENO: \\\"$ac_compile\\\"\") >&5\n  (eval $ac_compile) 2>conftest.er1\n  ac_status=$?\n  grep -v '^ *+' conftest.er1 >conftest.err\n  rm -f conftest.er1\n  cat conftest.err >&5\n  echo \"$as_me:$LINENO: \\$? = $ac_status\" >&5\n  (exit $ac_status); } &&\n\t { ac_try='test -z \"$ac_cxx_werror_flag\"\n\t\t\t || test ! -s conftest.err'\n  { (eval echo \"$as_me:$LINENO: \\\"$ac_try\\\"\") >&5\n  (eval $ac_try) 2>&5\n  ac_status=$?\n  echo \"$as_me:$LINENO: \\$? = $ac_status\" >&5\n  (exit $ac_status); }; } &&\n\t { ac_try='test -s conftest.$ac_objext'\n  { (eval echo \"$as_me:$LINENO: \\\"$ac_try\\\"\") >&5\n  (eval $ac_try) 2>&5\n  ac_status=$?\n  echo \"$as_me:$LINENO: \\$? = $ac_status\" >&5\n  (exit $ac_status); }; }; then\n  ac_compiler_gnu=yes\nelse\n  echo \"$as_me: failed program was:\" >&5\nsed 's/^/| /' conftest.$ac_ext >&5\n\n\tac_compiler_gnu=no\nfi\n\nrm -f conftest.err conftest.$ac_objext conftest.$ac_ext\nac_cv_cxx_compiler_gnu=$ac_compiler_gnu\n\nfi\n{ echo \"$as_me:$LINENO: result: $ac_cv_cxx_compiler_gnu\" >&5\necho \"${ECHO_T}$ac_cv_cxx_compiler_gnu\" >&6; }\nGXX=`test $ac_compiler_gnu = yes && echo yes`\nac_test_CXXFLAGS=${CXXFLAGS+set}\nac_save_CXXFLAGS=$CXXFLAGS\n{ echo \"$as_me:$LINENO: checking whether $CXX accepts -g\" >&5\necho $ECHO_N \"checking whether $CXX accepts -g... $ECHO_C\" >&6; }\nif test \"${ac_cv_prog_cxx_g+set}\" = set; then\n  echo $ECHO_N \"(cached) $ECHO_C\" >&6\nelse\n  ac_save_cxx_werror_flag=$ac_cxx_werror_flag\n   ac_cxx_werror_flag=yes\n   ac_cv_prog_cxx_g=no\n   CXXFLAGS=\"-g\"\n   cat >conftest.$ac_ext <<_ACEOF\n/* confdefs.h.  */\n_ACEOF\ncat confdefs.h >>conftest.$ac_ext\ncat >>conftest.$ac_ext <<_ACEOF\n/* end confdefs.h.  */\n\nint\nmain ()\n{\n\n  ;\n  return 0;\n}\n_ACEOF\nrm -f conftest.$ac_objext\nif { (eval echo \"$as_me:$LINENO: \\\"$ac_compile\\\"\") >&5\n  (eval $ac_compile) 2>conftest.er1\n  ac_status=$?\n  grep -v '^ *+' conftest.er1 >conftest.err\n  rm -f conftest.er1\n  cat conftest.err >&5\n  echo \"$as_me:$LINENO: \\$? = $ac_status\" >&5\n  (exit $ac_status); } &&\n\t { ac_try='test -z \"$ac_cxx_werror_flag\"\n\t\t\t || test ! -s conftest.err'\n  { (eval echo \"$as_me:$LINENO: \\\"$ac_try\\\"\") >&5\n  (eval $ac_try) 2>&5\n  ac_status=$?\n  echo \"$as_me:$LINENO: \\$? = $ac_status\" >&5\n  (exit $ac_status); }; } &&\n\t { ac_try='test -s conftest.$ac_objext'\n  { (eval echo \"$as_me:$LINENO: \\\"$ac_try\\\"\") >&5\n  (eval $ac_try) 2>&5\n  ac_status=$?\n  echo \"$as_me:$LINENO: \\$? = $ac_status\" >&5\n  (exit $ac_status); }; }; then\n  ac_cv_prog_cxx_g=yes\nelse\n  echo \"$as_me: failed program was:\" >&5\nsed 's/^/| /' conftest.$ac_ext >&5\n\n\tCXXFLAGS=\"\"\n      cat >conftest.$ac_ext <<_ACEOF\n/* confdefs.h.  */\n_ACEOF\ncat confdefs.h >>conftest.$ac_ext\ncat >>conftest.$ac_ext <<_ACEOF\n/* end confdefs.h.  */\n\nint\nmain ()\n{\n\n  ;\n  return 0;\n}\n_ACEOF\nrm -f conftest.$ac_objext\nif { (eval echo \"$as_me:$LINENO: \\\"$ac_compile\\\"\") >&5\n  (eval $ac_compile) 2>conftest.er1\n  ac_status=$?\n  grep -v '^ *+' conftest.er1 >conftest.err\n  rm -f conftest.er1\n  cat conftest.err >&5\n  echo \"$as_me:$LINENO: \\$? = $ac_status\" >&5\n  (exit $ac_status); } &&\n\t { ac_try='test -z \"$ac_cxx_werror_flag\"\n\t\t\t || test ! -s conftest.err'\n  { (eval echo \"$as_me:$LINENO: \\\"$ac_try\\\"\") >&5\n  (eval $ac_try) 2>&5\n  ac_status=$?\n  echo \"$as_me:$LINENO: \\$? = $ac_status\" >&5\n  (exit $ac_status); }; } &&\n\t { ac_try='test -s conftest.$ac_objext'\n  { (eval echo \"$as_me:$LINENO: \\\"$ac_try\\\"\") >&5\n  (eval $ac_try) 2>&5\n  ac_status=$?\n  echo \"$as_me:$LINENO: \\$? = $ac_status\" >&5\n  (exit $ac_status); }; }; then\n  :\nelse\n  echo \"$as_me: failed program was:\" >&5\nsed 's/^/| /' conftest.$ac_ext >&5\n\n\tac_cxx_werror_flag=$ac_save_cxx_werror_flag\n\t CXXFLAGS=\"-g\"\n\t cat >conftest.$ac_ext <<_ACEOF\n/* confdefs.h.  */\n_ACEOF\ncat confdefs.h >>conftest.$ac_ext\ncat >>conftest.$ac_ext <<_ACEOF\n/* end confdefs.h.  */\n\nint\nmain ()\n{\n\n  ;\n  return 0;\n}\n_ACEOF\nrm -f conftest.$ac_objext\nif { (eval echo \"$as_me:$LINENO: \\\"$ac_compile\\\"\") >&5\n  (eval $ac_compile) 2>conftest.er1\n  ac_status=$?\n  grep -v '^ *+' conftest.er1 >conftest.err\n  rm -f conftest.er1\n  cat conftest.err >&5\n  echo \"$as_me:$LINENO: \\$? = $ac_status\" >&5\n  (exit $ac_status); } &&\n\t { ac_try='test -z \"$ac_cxx_werror_flag\"\n\t\t\t || test ! -s conftest.err'\n  { (eval echo \"$as_me:$LINENO: \\\"$ac_try\\\"\") >&5\n  (eval $ac_try) 2>&5\n  ac_status=$?\n  echo \"$as_me:$LINENO: \\$? = $ac_status\" >&5\n  (exit $ac_status); }; } &&\n\t { ac_try='test -s conftest.$ac_objext'\n  { (eval echo \"$as_me:$LINENO: \\\"$ac_try\\\"\") >&5\n  (eval $ac_try) 2>&5\n  ac_status=$?\n  echo \"$as_me:$LINENO: \\$? = $ac_status\" >&5\n  (exit $ac_status); }; }; then\n  ac_cv_prog_cxx_g=yes\nelse\n  echo \"$as_me: failed program was:\" >&5\nsed 's/^/| /' conftest.$ac_ext >&5\n\n\nfi\n\nrm -f conftest.err conftest.$ac_objext conftest.$ac_ext\nfi\n\nrm -f conftest.err conftest.$ac_objext conftest.$ac_ext\nfi\n\nrm -f conftest.err conftest.$ac_objext conftest.$ac_ext\n   ac_cxx_werror_flag=$ac_save_cxx_werror_flag\nfi\n{ echo \"$as_me:$LINENO: result: $ac_cv_prog_cxx_g\" >&5\necho \"${ECHO_T}$ac_cv_prog_cxx_g\" >&6; }\nif test \"$ac_test_CXXFLAGS\" = set; then\n  CXXFLAGS=$ac_save_CXXFLAGS\nelif test $ac_cv_prog_cxx_g = yes; then\n  if test \"$GXX\" = yes; then\n    CXXFLAGS=\"-g -O2\"\n  else\n    CXXFLAGS=\"-g\"\n  fi\nelse\n  if test \"$GXX\" = yes; then\n    CXXFLAGS=\"-O2\"\n  else\n    CXXFLAGS=\n  fi\nfi\nac_ext=c\nac_cpp='$CPP $CPPFLAGS'\nac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'\nac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'\nac_compiler_gnu=$ac_cv_c_compiler_gnu\n\nac_ext=c\nac_cpp='$CPP $CPPFLAGS'\nac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'\nac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'\nac_compiler_gnu=$ac_cv_c_compiler_gnu\nif test -n \"$ac_tool_prefix\"; then\n  # Extract the first word of \"${ac_tool_prefix}gcc\", so it can be a program name with args.\nset dummy ${ac_tool_prefix}gcc; ac_word=$2\n{ echo \"$as_me:$LINENO: checking for $ac_word\" >&5\necho $ECHO_N \"checking for $ac_word... $ECHO_C\" >&6; }\nif test \"${ac_cv_prog_CC+set}\" = set; then\n  echo $ECHO_N \"(cached) $ECHO_C\" >&6\nelse\n  if test -n \"$CC\"; then\n  ac_cv_prog_CC=\"$CC\" # Let the user override the test.\nelse\nas_save_IFS=$IFS; IFS=$PATH_SEPARATOR\nfor as_dir in $PATH\ndo\n  IFS=$as_save_IFS\n  test -z \"$as_dir\" && as_dir=.\n  for ac_exec_ext in '' $ac_executable_extensions; do\n  if { test -f \"$as_dir/$ac_word$ac_exec_ext\" && $as_executable_p \"$as_dir/$ac_word$ac_exec_ext\"; }; then\n    ac_cv_prog_CC=\"${ac_tool_prefix}gcc\"\n    echo \"$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext\" >&5\n    break 2\n  fi\ndone\ndone\nIFS=$as_save_IFS\n\nfi\nfi\nCC=$ac_cv_prog_CC\nif test -n \"$CC\"; then\n  { echo \"$as_me:$LINENO: result: $CC\" >&5\necho \"${ECHO_T}$CC\" >&6; }\nelse\n  { echo \"$as_me:$LINENO: result: no\" >&5\necho \"${ECHO_T}no\" >&6; }\nfi\n\n\nfi\nif test -z \"$ac_cv_prog_CC\"; then\n  ac_ct_CC=$CC\n  # Extract the first word of \"gcc\", so it can be a program name with args.\nset dummy gcc; ac_word=$2\n{ echo \"$as_me:$LINENO: checking for $ac_word\" >&5\necho $ECHO_N \"checking for $ac_word... $ECHO_C\" >&6; }\nif test \"${ac_cv_prog_ac_ct_CC+set}\" = set; then\n  echo $ECHO_N \"(cached) $ECHO_C\" >&6\nelse\n  if test -n \"$ac_ct_CC\"; then\n  ac_cv_prog_ac_ct_CC=\"$ac_ct_CC\" # Let the user override the test.\nelse\nas_save_IFS=$IFS; IFS=$PATH_SEPARATOR\nfor as_dir in $PATH\ndo\n  IFS=$as_save_IFS\n  test -z \"$as_dir\" && as_dir=.\n  for ac_exec_ext in '' $ac_executable_extensions; do\n  if { test -f \"$as_dir/$ac_word$ac_exec_ext\" && $as_executable_p \"$as_dir/$ac_word$ac_exec_ext\"; }; then\n    ac_cv_prog_ac_ct_CC=\"gcc\"\n    echo \"$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext\" >&5\n    break 2\n  fi\ndone\ndone\nIFS=$as_save_IFS\n\nfi\nfi\nac_ct_CC=$ac_cv_prog_ac_ct_CC\nif test -n \"$ac_ct_CC\"; then\n  { echo \"$as_me:$LINENO: result: $ac_ct_CC\" >&5\necho \"${ECHO_T}$ac_ct_CC\" >&6; }\nelse\n  { echo \"$as_me:$LINENO: result: no\" >&5\necho \"${ECHO_T}no\" >&6; }\nfi\n\n  if test \"x$ac_ct_CC\" = x; then\n    CC=\"\"\n  else\n    case $cross_compiling:$ac_tool_warned in\nyes:)\n{ echo \"$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools\nwhose name does not start with the host triplet.  If you think this\nconfiguration is useful to you, please write to autoconf@gnu.org.\" >&5\necho \"$as_me: WARNING: In the future, Autoconf will not detect cross-tools\nwhose name does not start with the host triplet.  If you think this\nconfiguration is useful to you, please write to autoconf@gnu.org.\" >&2;}\nac_tool_warned=yes ;;\nesac\n    CC=$ac_ct_CC\n  fi\nelse\n  CC=\"$ac_cv_prog_CC\"\nfi\n\nif test -z \"$CC\"; then\n          if test -n \"$ac_tool_prefix\"; then\n    # Extract the first word of \"${ac_tool_prefix}cc\", so it can be a program name with args.\nset dummy ${ac_tool_prefix}cc; ac_word=$2\n{ echo \"$as_me:$LINENO: checking for $ac_word\" >&5\necho $ECHO_N \"checking for $ac_word... $ECHO_C\" >&6; }\nif test \"${ac_cv_prog_CC+set}\" = set; then\n  echo $ECHO_N \"(cached) $ECHO_C\" >&6\nelse\n  if test -n \"$CC\"; then\n  ac_cv_prog_CC=\"$CC\" # Let the user override the test.\nelse\nas_save_IFS=$IFS; IFS=$PATH_SEPARATOR\nfor as_dir in $PATH\ndo\n  IFS=$as_save_IFS\n  test -z \"$as_dir\" && as_dir=.\n  for ac_exec_ext in '' $ac_executable_extensions; do\n  if { test -f \"$as_dir/$ac_word$ac_exec_ext\" && $as_executable_p \"$as_dir/$ac_word$ac_exec_ext\"; }; then\n    ac_cv_prog_CC=\"${ac_tool_prefix}cc\"\n    echo \"$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext\" >&5\n    break 2\n  fi\ndone\ndone\nIFS=$as_save_IFS\n\nfi\nfi\nCC=$ac_cv_prog_CC\nif test -n \"$CC\"; then\n  { echo \"$as_me:$LINENO: result: $CC\" >&5\necho \"${ECHO_T}$CC\" >&6; }\nelse\n  { echo \"$as_me:$LINENO: result: no\" >&5\necho \"${ECHO_T}no\" >&6; }\nfi\n\n\n  fi\nfi\nif test -z \"$CC\"; then\n  # Extract the first word of \"cc\", so it can be a program name with args.\nset dummy cc; ac_word=$2\n{ echo \"$as_me:$LINENO: checking for $ac_word\" >&5\necho $ECHO_N \"checking for $ac_word... $ECHO_C\" >&6; }\nif test \"${ac_cv_prog_CC+set}\" = set; then\n  echo $ECHO_N \"(cached) $ECHO_C\" >&6\nelse\n  if test -n \"$CC\"; then\n  ac_cv_prog_CC=\"$CC\" # Let the user override the test.\nelse\n  ac_prog_rejected=no\nas_save_IFS=$IFS; IFS=$PATH_SEPARATOR\nfor as_dir in $PATH\ndo\n  IFS=$as_save_IFS\n  test -z \"$as_dir\" && as_dir=.\n  for ac_exec_ext in '' $ac_executable_extensions; do\n  if { test -f \"$as_dir/$ac_word$ac_exec_ext\" && $as_executable_p \"$as_dir/$ac_word$ac_exec_ext\"; }; then\n    if test \"$as_dir/$ac_word$ac_exec_ext\" = \"/usr/ucb/cc\"; then\n       ac_prog_rejected=yes\n       continue\n     fi\n    ac_cv_prog_CC=\"cc\"\n    echo \"$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext\" >&5\n    break 2\n  fi\ndone\ndone\nIFS=$as_save_IFS\n\nif test $ac_prog_rejected = yes; then\n  # We found a bogon in the path, so make sure we never use it.\n  set dummy $ac_cv_prog_CC\n  shift\n  if test $# != 0; then\n    # We chose a different compiler from the bogus one.\n    # However, it has the same basename, so the bogon will be chosen\n    # first if we set CC to just the basename; use the full file name.\n    shift\n    ac_cv_prog_CC=\"$as_dir/$ac_word${1+' '}$@\"\n  fi\nfi\nfi\nfi\nCC=$ac_cv_prog_CC\nif test -n \"$CC\"; then\n  { echo \"$as_me:$LINENO: result: $CC\" >&5\necho \"${ECHO_T}$CC\" >&6; }\nelse\n  { echo \"$as_me:$LINENO: result: no\" >&5\necho \"${ECHO_T}no\" >&6; }\nfi\n\n\nfi\nif test -z \"$CC\"; then\n  if test -n \"$ac_tool_prefix\"; then\n  for ac_prog in cl.exe\n  do\n    # Extract the first word of \"$ac_tool_prefix$ac_prog\", so it can be a program name with args.\nset dummy $ac_tool_prefix$ac_prog; ac_word=$2\n{ echo \"$as_me:$LINENO: checking for $ac_word\" >&5\necho $ECHO_N \"checking for $ac_word... $ECHO_C\" >&6; }\nif test \"${ac_cv_prog_CC+set}\" = set; then\n  echo $ECHO_N \"(cached) $ECHO_C\" >&6\nelse\n  if test -n \"$CC\"; then\n  ac_cv_prog_CC=\"$CC\" # Let the user override the test.\nelse\nas_save_IFS=$IFS; IFS=$PATH_SEPARATOR\nfor as_dir in $PATH\ndo\n  IFS=$as_save_IFS\n  test -z \"$as_dir\" && as_dir=.\n  for ac_exec_ext in '' $ac_executable_extensions; do\n  if { test -f \"$as_dir/$ac_word$ac_exec_ext\" && $as_executable_p \"$as_dir/$ac_word$ac_exec_ext\"; }; then\n    ac_cv_prog_CC=\"$ac_tool_prefix$ac_prog\"\n    echo \"$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext\" >&5\n    break 2\n  fi\ndone\ndone\nIFS=$as_save_IFS\n\nfi\nfi\nCC=$ac_cv_prog_CC\nif test -n \"$CC\"; then\n  { echo \"$as_me:$LINENO: result: $CC\" >&5\necho \"${ECHO_T}$CC\" >&6; }\nelse\n  { echo \"$as_me:$LINENO: result: no\" >&5\necho \"${ECHO_T}no\" >&6; }\nfi\n\n\n    test -n \"$CC\" && break\n  done\nfi\nif test -z \"$CC\"; then\n  ac_ct_CC=$CC\n  for ac_prog in cl.exe\ndo\n  # Extract the first word of \"$ac_prog\", so it can be a program name with args.\nset dummy $ac_prog; ac_word=$2\n{ echo \"$as_me:$LINENO: checking for $ac_word\" >&5\necho $ECHO_N \"checking for $ac_word... $ECHO_C\" >&6; }\nif test \"${ac_cv_prog_ac_ct_CC+set}\" = set; then\n  echo $ECHO_N \"(cached) $ECHO_C\" >&6\nelse\n  if test -n \"$ac_ct_CC\"; then\n  ac_cv_prog_ac_ct_CC=\"$ac_ct_CC\" # Let the user override the test.\nelse\nas_save_IFS=$IFS; IFS=$PATH_SEPARATOR\nfor as_dir in $PATH\ndo\n  IFS=$as_save_IFS\n  test -z \"$as_dir\" && as_dir=.\n  for ac_exec_ext in '' $ac_executable_extensions; do\n  if { test -f \"$as_dir/$ac_word$ac_exec_ext\" && $as_executable_p \"$as_dir/$ac_word$ac_exec_ext\"; }; then\n    ac_cv_prog_ac_ct_CC=\"$ac_prog\"\n    echo \"$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext\" >&5\n    break 2\n  fi\ndone\ndone\nIFS=$as_save_IFS\n\nfi\nfi\nac_ct_CC=$ac_cv_prog_ac_ct_CC\nif test -n \"$ac_ct_CC\"; then\n  { echo \"$as_me:$LINENO: result: $ac_ct_CC\" >&5\necho \"${ECHO_T}$ac_ct_CC\" >&6; }\nelse\n  { echo \"$as_me:$LINENO: result: no\" >&5\necho \"${ECHO_T}no\" >&6; }\nfi\n\n\n  test -n \"$ac_ct_CC\" && break\ndone\n\n  if test \"x$ac_ct_CC\" = x; then\n    CC=\"\"\n  else\n    case $cross_compiling:$ac_tool_warned in\nyes:)\n{ echo \"$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools\nwhose name does not start with the host triplet.  If you think this\nconfiguration is useful to you, please write to autoconf@gnu.org.\" >&5\necho \"$as_me: WARNING: In the future, Autoconf will not detect cross-tools\nwhose name does not start with the host triplet.  If you think this\nconfiguration is useful to you, please write to autoconf@gnu.org.\" >&2;}\nac_tool_warned=yes ;;\nesac\n    CC=$ac_ct_CC\n  fi\nfi\n\nfi\n\n\ntest -z \"$CC\" && { { echo \"$as_me:$LINENO: error: no acceptable C compiler found in \\$PATH\nSee \\`config.log' for more details.\" >&5\necho \"$as_me: error: no acceptable C compiler found in \\$PATH\nSee \\`config.log' for more details.\" >&2;}\n   { (exit 1); exit 1; }; }\n\n# Provide some information about the compiler.\necho \"$as_me:$LINENO: checking for C compiler version\" >&5\nac_compiler=`set X $ac_compile; echo $2`\n{ (eval echo \"$as_me:$LINENO: \\\"$ac_compiler --version >&5\\\"\") >&5\n  (eval $ac_compiler --version >&5) 2>&5\n  ac_status=$?\n  echo \"$as_me:$LINENO: \\$? = $ac_status\" >&5\n  (exit $ac_status); }\n{ (eval echo \"$as_me:$LINENO: \\\"$ac_compiler -v >&5\\\"\") >&5\n  (eval $ac_compiler -v >&5) 2>&5\n  ac_status=$?\n  echo \"$as_me:$LINENO: \\$? = $ac_status\" >&5\n  (exit $ac_status); }\n{ (eval echo \"$as_me:$LINENO: \\\"$ac_compiler -V >&5\\\"\") >&5\n  (eval $ac_compiler -V >&5) 2>&5\n  ac_status=$?\n  echo \"$as_me:$LINENO: \\$? = $ac_status\" >&5\n  (exit $ac_status); }\n\n{ echo \"$as_me:$LINENO: checking whether we are using the GNU C compiler\" >&5\necho $ECHO_N \"checking whether we are using the GNU C compiler... $ECHO_C\" >&6; }\nif test \"${ac_cv_c_compiler_gnu+set}\" = set; then\n  echo $ECHO_N \"(cached) $ECHO_C\" >&6\nelse\n  cat >conftest.$ac_ext <<_ACEOF\n/* confdefs.h.  */\n_ACEOF\ncat confdefs.h >>conftest.$ac_ext\ncat >>conftest.$ac_ext <<_ACEOF\n/* end confdefs.h.  */\n\nint\nmain ()\n{\n#ifndef __GNUC__\n       choke me\n#endif\n\n  ;\n  return 0;\n}\n_ACEOF\nrm -f conftest.$ac_objext\nif { (eval echo \"$as_me:$LINENO: \\\"$ac_compile\\\"\") >&5\n  (eval $ac_compile) 2>conftest.er1\n  ac_status=$?\n  grep -v '^ *+' conftest.er1 >conftest.err\n  rm -f conftest.er1\n  cat conftest.err >&5\n  echo \"$as_me:$LINENO: \\$? = $ac_status\" >&5\n  (exit $ac_status); } &&\n\t { ac_try='test -z \"$ac_c_werror_flag\"\n\t\t\t || test ! -s conftest.err'\n  { (eval echo \"$as_me:$LINENO: \\\"$ac_try\\\"\") >&5\n  (eval $ac_try) 2>&5\n  ac_status=$?\n  echo \"$as_me:$LINENO: \\$? = $ac_status\" >&5\n  (exit $ac_status); }; } &&\n\t { ac_try='test -s conftest.$ac_objext'\n  { (eval echo \"$as_me:$LINENO: \\\"$ac_try\\\"\") >&5\n  (eval $ac_try) 2>&5\n  ac_status=$?\n  echo \"$as_me:$LINENO: \\$? = $ac_status\" >&5\n  (exit $ac_status); }; }; then\n  ac_compiler_gnu=yes\nelse\n  echo \"$as_me: failed program was:\" >&5\nsed 's/^/| /' conftest.$ac_ext >&5\n\n\tac_compiler_gnu=no\nfi\n\nrm -f conftest.err conftest.$ac_objext conftest.$ac_ext\nac_cv_c_compiler_gnu=$ac_compiler_gnu\n\nfi\n{ echo \"$as_me:$LINENO: result: $ac_cv_c_compiler_gnu\" >&5\necho \"${ECHO_T}$ac_cv_c_compiler_gnu\" >&6; }\nGCC=`test $ac_compiler_gnu = yes && echo yes`\nac_test_CFLAGS=${CFLAGS+set}\nac_save_CFLAGS=$CFLAGS\n{ echo \"$as_me:$LINENO: checking whether $CC accepts -g\" >&5\necho $ECHO_N \"checking whether $CC accepts -g... $ECHO_C\" >&6; }\nif test \"${ac_cv_prog_cc_g+set}\" = set; then\n  echo $ECHO_N \"(cached) $ECHO_C\" >&6\nelse\n  ac_save_c_werror_flag=$ac_c_werror_flag\n   ac_c_werror_flag=yes\n   ac_cv_prog_cc_g=no\n   CFLAGS=\"-g\"\n   cat >conftest.$ac_ext <<_ACEOF\n/* confdefs.h.  */\n_ACEOF\ncat confdefs.h >>conftest.$ac_ext\ncat >>conftest.$ac_ext <<_ACEOF\n/* end confdefs.h.  */\n\nint\nmain ()\n{\n\n  ;\n  return 0;\n}\n_ACEOF\nrm -f conftest.$ac_objext\nif { (eval echo \"$as_me:$LINENO: \\\"$ac_compile\\\"\") >&5\n  (eval $ac_compile) 2>conftest.er1\n  ac_status=$?\n  grep -v '^ *+' conftest.er1 >conftest.err\n  rm -f conftest.er1\n  cat conftest.err >&5\n  echo \"$as_me:$LINENO: \\$? = $ac_status\" >&5\n  (exit $ac_status); } &&\n\t { ac_try='test -z \"$ac_c_werror_flag\"\n\t\t\t || test ! -s conftest.err'\n  { (eval echo \"$as_me:$LINENO: \\\"$ac_try\\\"\") >&5\n  (eval $ac_try) 2>&5\n  ac_status=$?\n  echo \"$as_me:$LINENO: \\$? = $ac_status\" >&5\n  (exit $ac_status); }; } &&\n\t { ac_try='test -s conftest.$ac_objext'\n  { (eval echo \"$as_me:$LINENO: \\\"$ac_try\\\"\") >&5\n  (eval $ac_try) 2>&5\n  ac_status=$?\n  echo \"$as_me:$LINENO: \\$? = $ac_status\" >&5\n  (exit $ac_status); }; }; then\n  ac_cv_prog_cc_g=yes\nelse\n  echo \"$as_me: failed program was:\" >&5\nsed 's/^/| /' conftest.$ac_ext >&5\n\n\tCFLAGS=\"\"\n      cat >conftest.$ac_ext <<_ACEOF\n/* confdefs.h.  */\n_ACEOF\ncat confdefs.h >>conftest.$ac_ext\ncat >>conftest.$ac_ext <<_ACEOF\n/* end confdefs.h.  */\n\nint\nmain ()\n{\n\n  ;\n  return 0;\n}\n_ACEOF\nrm -f conftest.$ac_objext\nif { (eval echo \"$as_me:$LINENO: \\\"$ac_compile\\\"\") >&5\n  (eval $ac_compile) 2>conftest.er1\n  ac_status=$?\n  grep -v '^ *+' conftest.er1 >conftest.err\n  rm -f conftest.er1\n  cat conftest.err >&5\n  echo \"$as_me:$LINENO: \\$? = $ac_status\" >&5\n  (exit $ac_status); } &&\n\t { ac_try='test -z \"$ac_c_werror_flag\"\n\t\t\t || test ! -s conftest.err'\n  { (eval echo \"$as_me:$LINENO: \\\"$ac_try\\\"\") >&5\n  (eval $ac_try) 2>&5\n  ac_status=$?\n  echo \"$as_me:$LINENO: \\$? = $ac_status\" >&5\n  (exit $ac_status); }; } &&\n\t { ac_try='test -s conftest.$ac_objext'\n  { (eval echo \"$as_me:$LINENO: \\\"$ac_try\\\"\") >&5\n  (eval $ac_try) 2>&5\n  ac_status=$?\n  echo \"$as_me:$LINENO: \\$? = $ac_status\" >&5\n  (exit $ac_status); }; }; then\n  :\nelse\n  echo \"$as_me: failed program was:\" >&5\nsed 's/^/| /' conftest.$ac_ext >&5\n\n\tac_c_werror_flag=$ac_save_c_werror_flag\n\t CFLAGS=\"-g\"\n\t cat >conftest.$ac_ext <<_ACEOF\n/* confdefs.h.  */\n_ACEOF\ncat confdefs.h >>conftest.$ac_ext\ncat >>conftest.$ac_ext <<_ACEOF\n/* end confdefs.h.  */\n\nint\nmain ()\n{\n\n  ;\n  return 0;\n}\n_ACEOF\nrm -f conftest.$ac_objext\nif { (eval echo \"$as_me:$LINENO: \\\"$ac_compile\\\"\") >&5\n  (eval $ac_compile) 2>conftest.er1\n  ac_status=$?\n  grep -v '^ *+' conftest.er1 >conftest.err\n  rm -f conftest.er1\n  cat conftest.err >&5\n  echo \"$as_me:$LINENO: \\$? = $ac_status\" >&5\n  (exit $ac_status); } &&\n\t { ac_try='test -z \"$ac_c_werror_flag\"\n\t\t\t || test ! -s conftest.err'\n  { (eval echo \"$as_me:$LINENO: \\\"$ac_try\\\"\") >&5\n  (eval $ac_try) 2>&5\n  ac_status=$?\n  echo \"$as_me:$LINENO: \\$? = $ac_status\" >&5\n  (exit $ac_status); }; } &&\n\t { ac_try='test -s conftest.$ac_objext'\n  { (eval echo \"$as_me:$LINENO: \\\"$ac_try\\\"\") >&5\n  (eval $ac_try) 2>&5\n  ac_status=$?\n  echo \"$as_me:$LINENO: \\$? = $ac_status\" >&5\n  (exit $ac_status); }; }; then\n  ac_cv_prog_cc_g=yes\nelse\n  echo \"$as_me: failed program was:\" >&5\nsed 's/^/| /' conftest.$ac_ext >&5\n\n\nfi\n\nrm -f conftest.err conftest.$ac_objext conftest.$ac_ext\nfi\n\nrm -f conftest.err conftest.$ac_objext conftest.$ac_ext\nfi\n\nrm -f conftest.err conftest.$ac_objext conftest.$ac_ext\n   ac_c_werror_flag=$ac_save_c_werror_flag\nfi\n{ echo \"$as_me:$LINENO: result: $ac_cv_prog_cc_g\" >&5\necho \"${ECHO_T}$ac_cv_prog_cc_g\" >&6; }\nif test \"$ac_test_CFLAGS\" = set; then\n  CFLAGS=$ac_save_CFLAGS\nelif test $ac_cv_prog_cc_g = yes; then\n  if test \"$GCC\" = yes; then\n    CFLAGS=\"-g -O2\"\n  else\n    CFLAGS=\"-g\"\n  fi\nelse\n  if test \"$GCC\" = yes; then\n    CFLAGS=\"-O2\"\n  else\n    CFLAGS=\n  fi\nfi\n{ echo \"$as_me:$LINENO: checking for $CC option to accept ISO C89\" >&5\necho $ECHO_N \"checking for $CC option to accept ISO C89... $ECHO_C\" >&6; }\nif test \"${ac_cv_prog_cc_c89+set}\" = set; then\n  echo $ECHO_N \"(cached) $ECHO_C\" >&6\nelse\n  ac_cv_prog_cc_c89=no\nac_save_CC=$CC\ncat >conftest.$ac_ext <<_ACEOF\n/* confdefs.h.  */\n_ACEOF\ncat confdefs.h >>conftest.$ac_ext\ncat >>conftest.$ac_ext <<_ACEOF\n/* end confdefs.h.  */\n#include <stdarg.h>\n#include <stdio.h>\n#include <sys/types.h>\n#include <sys/stat.h>\n/* Most of the following tests are stolen from RCS 5.7's src/conf.sh.  */\nstruct buf { int x; };\nFILE * (*rcsopen) (struct buf *, struct stat *, int);\nstatic char *e (p, i)\n     char **p;\n     int i;\n{\n  return p[i];\n}\nstatic char *f (char * (*g) (char **, int), char **p, ...)\n{\n  char *s;\n  va_list v;\n  va_start (v,p);\n  s = g (p, va_arg (v,int));\n  va_end (v);\n  return s;\n}\n\n/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default.  It has\n   function prototypes and stuff, but not '\\xHH' hex character constants.\n   These don't provoke an error unfortunately, instead are silently treated\n   as 'x'.  The following induces an error, until -std is added to get\n   proper ANSI mode.  Curiously '\\x00'!='x' always comes out true, for an\n   array size at least.  It's necessary to write '\\x00'==0 to get something\n   that's true only with -std.  */\nint osf4_cc_array ['\\x00' == 0 ? 1 : -1];\n\nint test (int i, double x);\nstruct s1 {int (*f) (int a);};\nstruct s2 {int (*f) (double a);};\nint pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);\nint argc;\nchar **argv;\nint\nmain ()\n{\nreturn f (e, argv, 0) != argv[0]  ||  f (e, argv, 1) != argv[1];\n  ;\n  return 0;\n}\n_ACEOF\nfor ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \\\n\t-Ae \"-Aa -D_HPUX_SOURCE\" \"-Xc -D__EXTENSIONS__\"\ndo\n  CC=\"$ac_save_CC $ac_arg\"\n  rm -f conftest.$ac_objext\nif { (eval echo \"$as_me:$LINENO: \\\"$ac_compile\\\"\") >&5\n  (eval $ac_compile) 2>conftest.er1\n  ac_status=$?\n  grep -v '^ *+' conftest.er1 >conftest.err\n  rm -f conftest.er1\n  cat conftest.err >&5\n  echo \"$as_me:$LINENO: \\$? = $ac_status\" >&5\n  (exit $ac_status); } &&\n\t { ac_try='test -z \"$ac_c_werror_flag\"\n\t\t\t || test ! -s conftest.err'\n  { (eval echo \"$as_me:$LINENO: \\\"$ac_try\\\"\") >&5\n  (eval $ac_try) 2>&5\n  ac_status=$?\n  echo \"$as_me:$LINENO: \\$? = $ac_status\" >&5\n  (exit $ac_status); }; } &&\n\t { ac_try='test -s conftest.$ac_objext'\n  { (eval echo \"$as_me:$LINENO: \\\"$ac_try\\\"\") >&5\n  (eval $ac_try) 2>&5\n  ac_status=$?\n  echo \"$as_me:$LINENO: \\$? = $ac_status\" >&5\n  (exit $ac_status); }; }; then\n  ac_cv_prog_cc_c89=$ac_arg\nelse\n  echo \"$as_me: failed program was:\" >&5\nsed 's/^/| /' conftest.$ac_ext >&5\n\n\nfi\n\nrm -f conftest.err conftest.$ac_objext\n  test \"x$ac_cv_prog_cc_c89\" != \"xno\" && break\ndone\nrm -f conftest.$ac_ext\nCC=$ac_save_CC\n\nfi\n# AC_CACHE_VAL\ncase \"x$ac_cv_prog_cc_c89\" in\n  x)\n    { echo \"$as_me:$LINENO: result: none needed\" >&5\necho \"${ECHO_T}none needed\" >&6; } ;;\n  xno)\n    { echo \"$as_me:$LINENO: result: unsupported\" >&5\necho \"${ECHO_T}unsupported\" >&6; } ;;\n  *)\n    CC=\"$CC $ac_cv_prog_cc_c89\"\n    { echo \"$as_me:$LINENO: result: $ac_cv_prog_cc_c89\" >&5\necho \"${ECHO_T}$ac_cv_prog_cc_c89\" >&6; } ;;\nesac\n\n\nac_ext=c\nac_cpp='$CPP $CPPFLAGS'\nac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'\nac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'\nac_compiler_gnu=$ac_cv_c_compiler_gnu\n\n# Find a good install program.  We prefer a C program (faster),\n# so one script is as good as another.  But avoid the broken or\n# incompatible versions:\n# SysV /etc/install, /usr/sbin/install\n# SunOS /usr/etc/install\n# IRIX /sbin/install\n# AIX /bin/install\n# AmigaOS /C/install, which installs bootblocks on floppy discs\n# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag\n# AFS /usr/afsws/bin/install, which mishandles nonexistent args\n# SVR4 /usr/ucb/install, which tries to use the nonexistent group \"staff\"\n# OS/2's system install, which has a completely different semantic\n# ./install, which can be erroneously created by make from ./install.sh.\n{ echo \"$as_me:$LINENO: checking for a BSD-compatible install\" >&5\necho $ECHO_N \"checking for a BSD-compatible install... $ECHO_C\" >&6; }\nif test -z \"$INSTALL\"; then\nif test \"${ac_cv_path_install+set}\" = set; then\n  echo $ECHO_N \"(cached) $ECHO_C\" >&6\nelse\n  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR\nfor as_dir in $PATH\ndo\n  IFS=$as_save_IFS\n  test -z \"$as_dir\" && as_dir=.\n  # Account for people who put trailing slashes in PATH elements.\ncase $as_dir/ in\n  ./ | .// | /cC/* | \\\n  /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \\\n  ?:\\\\/os2\\\\/install\\\\/* | ?:\\\\/OS2\\\\/INSTALL\\\\/* | \\\n  /usr/ucb/* ) ;;\n  *)\n    # OSF1 and SCO ODT 3.0 have their own names for install.\n    # Don't use installbsd from OSF since it installs stuff as root\n    # by default.\n    for ac_prog in ginstall scoinst install; do\n      for ac_exec_ext in '' $ac_executable_extensions; do\n\tif { test -f \"$as_dir/$ac_prog$ac_exec_ext\" && $as_executable_p \"$as_dir/$ac_prog$ac_exec_ext\"; }; then\n\t  if test $ac_prog = install &&\n\t    grep dspmsg \"$as_dir/$ac_prog$ac_exec_ext\" >/dev/null 2>&1; then\n\t    # AIX install.  It has an incompatible calling convention.\n\t    :\n\t  elif test $ac_prog = install &&\n\t    grep pwplus \"$as_dir/$ac_prog$ac_exec_ext\" >/dev/null 2>&1; then\n\t    # program-specific install script used by HP pwplus--don't use.\n\t    :\n\t  else\n\t    ac_cv_path_install=\"$as_dir/$ac_prog$ac_exec_ext -c\"\n\t    break 3\n\t  fi\n\tfi\n      done\n    done\n    ;;\nesac\ndone\nIFS=$as_save_IFS\n\n\nfi\n  if test \"${ac_cv_path_install+set}\" = set; then\n    INSTALL=$ac_cv_path_install\n  else\n    # As a last resort, use the slow shell script.  Don't cache a\n    # value for INSTALL within a source directory, because that will\n    # break other packages using the cache if that directory is\n    # removed, or if the value is a relative name.\n    INSTALL=$ac_install_sh\n  fi\nfi\n{ echo \"$as_me:$LINENO: result: $INSTALL\" >&5\necho \"${ECHO_T}$INSTALL\" >&6; }\n\n# Use test -z because SunOS4 sh mishandles braces in ${var-val}.\n# It thinks the first close brace ends the variable substitution.\ntest -z \"$INSTALL_PROGRAM\" && INSTALL_PROGRAM='${INSTALL}'\n\ntest -z \"$INSTALL_SCRIPT\" && INSTALL_SCRIPT='${INSTALL}'\n\ntest -z \"$INSTALL_DATA\" && INSTALL_DATA='${INSTALL} -m 644'\n\n#AC_DEFINE(RECTANGLE_OVERLAP_LOGGING)\nac_config_files=\"$ac_config_files Makefile libvpsc/Makefile tests/Makefile\"\n\ncat >confcache <<\\_ACEOF\n# This file is a shell script that caches the results of configure\n# tests run on this system so they can be shared between configure\n# scripts and configure runs, see configure's option --config-cache.\n# It is not useful on other systems.  If it contains results you don't\n# want to keep, you may remove or edit it.\n#\n# config.status only pays attention to the cache file if you give it\n# the --recheck option to rerun configure.\n#\n# `ac_cv_env_foo' variables (set or unset) will be overridden when\n# loading this file, other *unset* `ac_cv_foo' will be assigned the\n# following values.\n\n_ACEOF\n\n# The following way of writing the cache mishandles newlines in values,\n# but we know of no workaround that is simple, portable, and efficient.\n# So, we kill variables containing newlines.\n# Ultrix sh set writes to stderr and can't be redirected directly,\n# and sets the high bit in the cache file unless we assign to the vars.\n(\n  for ac_var in `(set) 2>&1 | sed -n 's/^\\([a-zA-Z_][a-zA-Z0-9_]*\\)=.*/\\1/p'`; do\n    eval ac_val=\\$$ac_var\n    case $ac_val in #(\n    *${as_nl}*)\n      case $ac_var in #(\n      *_cv_*) { echo \"$as_me:$LINENO: WARNING: Cache variable $ac_var contains a newline.\" >&5\necho \"$as_me: WARNING: Cache variable $ac_var contains a newline.\" >&2;} ;;\n      esac\n      case $ac_var in #(\n      _ | IFS | as_nl) ;; #(\n      *) $as_unset $ac_var ;;\n      esac ;;\n    esac\n  done\n\n  (set) 2>&1 |\n    case $as_nl`(ac_space=' '; set) 2>&1` in #(\n    *${as_nl}ac_space=\\ *)\n      # `set' does not quote correctly, so add quotes (double-quote\n      # substitution turns \\\\\\\\ into \\\\, and sed turns \\\\ into \\).\n      sed -n \\\n\t\"s/'/'\\\\\\\\''/g;\n\t  s/^\\\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\\\)=\\\\(.*\\\\)/\\\\1='\\\\2'/p\"\n      ;; #(\n    *)\n      # `set' quotes correctly as required by POSIX, so do not add quotes.\n      sed -n \"/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p\"\n      ;;\n    esac |\n    sort\n) |\n  sed '\n     /^ac_cv_env_/b end\n     t clear\n     :clear\n     s/^\\([^=]*\\)=\\(.*[{}].*\\)$/test \"${\\1+set}\" = set || &/\n     t end\n     s/^\\([^=]*\\)=\\(.*\\)$/\\1=${\\1=\\2}/\n     :end' >>confcache\nif diff \"$cache_file\" confcache >/dev/null 2>&1; then :; else\n  if test -w \"$cache_file\"; then\n    test \"x$cache_file\" != \"x/dev/null\" &&\n      { echo \"$as_me:$LINENO: updating cache $cache_file\" >&5\necho \"$as_me: updating cache $cache_file\" >&6;}\n    cat confcache >$cache_file\n  else\n    { echo \"$as_me:$LINENO: not updating unwritable cache $cache_file\" >&5\necho \"$as_me: not updating unwritable cache $cache_file\" >&6;}\n  fi\nfi\nrm -f confcache\n\ntest \"x$prefix\" = xNONE && prefix=$ac_default_prefix\n# Let make expand exec_prefix.\ntest \"x$exec_prefix\" = xNONE && exec_prefix='${prefix}'\n\n# Transform confdefs.h into DEFS.\n# Protect against shell expansion while executing Makefile rules.\n# Protect against Makefile macro expansion.\n#\n# If the first sed substitution is executed (which looks for macros that\n# take arguments), then we branch to the quote section.  Otherwise,\n# look for a macro that doesn't take arguments.\ncat >confdef2opt.sed <<\\_ACEOF\nt clear\n:clear\ns/^[\t ]*#[\t ]*define[\t ][\t ]*\\([^\t (][^\t (]*([^)]*)\\)[\t ]*\\(.*\\)/-D\\1=\\2/g\nt quote\ns/^[\t ]*#[\t ]*define[\t ][\t ]*\\([^\t ][^\t ]*\\)[\t ]*\\(.*\\)/-D\\1=\\2/g\nt quote\nd\n:quote\ns/[\t `~#$^&*(){}\\\\|;'\"<>?]/\\\\&/g\ns/\\[/\\\\&/g\ns/\\]/\\\\&/g\ns/\\$/$$/g\np\n_ACEOF\n# We use echo to avoid assuming a particular line-breaking character.\n# The extra dot is to prevent the shell from consuming trailing\n# line-breaks from the sub-command output.  A line-break within\n# single-quotes doesn't work because, if this script is created in a\n# platform that uses two characters for line-breaks (e.g., DOS), tr\n# would break.\nac_LF_and_DOT=`echo; echo .`\nDEFS=`sed -n -f confdef2opt.sed confdefs.h | tr \"$ac_LF_and_DOT\" ' .'`\nrm -f confdef2opt.sed\n\n\nac_libobjs=\nac_ltlibobjs=\nfor ac_i in : $LIBOBJS; do test \"x$ac_i\" = x: && continue\n  # 1. Remove the extension, and $U if already installed.\n  ac_script='s/\\$U\\././;s/\\.o$//;s/\\.obj$//'\n  ac_i=`echo \"$ac_i\" | sed \"$ac_script\"`\n  # 2. Prepend LIBOBJDIR.  When used with automake>=1.10 LIBOBJDIR\n  #    will be set to the directory where LIBOBJS objects are built.\n  ac_libobjs=\"$ac_libobjs \\${LIBOBJDIR}$ac_i\\$U.$ac_objext\"\n  ac_ltlibobjs=\"$ac_ltlibobjs \\${LIBOBJDIR}$ac_i\"'$U.lo'\ndone\nLIBOBJS=$ac_libobjs\n\nLTLIBOBJS=$ac_ltlibobjs\n\n\n\n: ${CONFIG_STATUS=./config.status}\nac_clean_files_save=$ac_clean_files\nac_clean_files=\"$ac_clean_files $CONFIG_STATUS\"\n{ echo \"$as_me:$LINENO: creating $CONFIG_STATUS\" >&5\necho \"$as_me: creating $CONFIG_STATUS\" >&6;}\ncat >$CONFIG_STATUS <<_ACEOF\n#! $SHELL\n# Generated by $as_me.\n# Run this file to recreate the current configuration.\n# Compiler output produced by configure, useful for debugging\n# configure, is in config.log if it exists.\n\ndebug=false\nac_cs_recheck=false\nac_cs_silent=false\nSHELL=\\${CONFIG_SHELL-$SHELL}\n_ACEOF\n\ncat >>$CONFIG_STATUS <<\\_ACEOF\n## --------------------- ##\n## M4sh Initialization.  ##\n## --------------------- ##\n\n# Be Bourne compatible\nif test -n \"${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then\n  emulate sh\n  NULLCMD=:\n  # Zsh 3.x and 4.x performs word splitting on ${1+\"$@\"}, which\n  # is contrary to our usage.  Disable this feature.\n  alias -g '${1+\"$@\"}'='\"$@\"'\n  setopt NO_GLOB_SUBST\nelse\n  case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac\nfi\nBIN_SH=xpg4; export BIN_SH # for Tru64\nDUALCASE=1; export DUALCASE # for MKS sh\n\n\n# PATH needs CR\n# Avoid depending upon Character Ranges.\nas_cr_letters='abcdefghijklmnopqrstuvwxyz'\nas_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'\nas_cr_Letters=$as_cr_letters$as_cr_LETTERS\nas_cr_digits='0123456789'\nas_cr_alnum=$as_cr_Letters$as_cr_digits\n\n# The user is always right.\nif test \"${PATH_SEPARATOR+set}\" != set; then\n  echo \"#! /bin/sh\" >conf$$.sh\n  echo  \"exit 0\"   >>conf$$.sh\n  chmod +x conf$$.sh\n  if (PATH=\"/nonexistent;.\"; conf$$.sh) >/dev/null 2>&1; then\n    PATH_SEPARATOR=';'\n  else\n    PATH_SEPARATOR=:\n  fi\n  rm -f conf$$.sh\nfi\n\n# Support unset when possible.\nif ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then\n  as_unset=unset\nelse\n  as_unset=false\nfi\n\n\n# IFS\n# We need space, tab and new line, in precisely that order.  Quoting is\n# there to prevent editors from complaining about space-tab.\n# (If _AS_PATH_WALK were called with IFS unset, it would disable word\n# splitting by setting IFS to empty value.)\nas_nl='\n'\nIFS=\" \"\"\t$as_nl\"\n\n# Find who we are.  Look in the path if we contain no directory separator.\ncase $0 in\n  *[\\\\/]* ) as_myself=$0 ;;\n  *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR\nfor as_dir in $PATH\ndo\n  IFS=$as_save_IFS\n  test -z \"$as_dir\" && as_dir=.\n  test -r \"$as_dir/$0\" && as_myself=$as_dir/$0 && break\ndone\nIFS=$as_save_IFS\n\n     ;;\nesac\n# We did not find ourselves, most probably we were run as `sh COMMAND'\n# in which case we are not to be found in the path.\nif test \"x$as_myself\" = x; then\n  as_myself=$0\nfi\nif test ! -f \"$as_myself\"; then\n  echo \"$as_myself: error: cannot find myself; rerun with an absolute file name\" >&2\n  { (exit 1); exit 1; }\nfi\n\n# Work around bugs in pre-3.0 UWIN ksh.\nfor as_var in ENV MAIL MAILPATH\ndo ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var\ndone\nPS1='$ '\nPS2='> '\nPS4='+ '\n\n# NLS nuisances.\nfor as_var in \\\n  LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \\\n  LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \\\n  LC_TELEPHONE LC_TIME\ndo\n  if (set +x; test -z \"`(eval $as_var=C; export $as_var) 2>&1`\"); then\n    eval $as_var=C; export $as_var\n  else\n    ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var\n  fi\ndone\n\n# Required to use basename.\nif expr a : '\\(a\\)' >/dev/null 2>&1 &&\n   test \"X`expr 00001 : '.*\\(...\\)'`\" = X001; then\n  as_expr=expr\nelse\n  as_expr=false\nfi\n\nif (basename -- /) >/dev/null 2>&1 && test \"X`basename -- / 2>&1`\" = \"X/\"; then\n  as_basename=basename\nelse\n  as_basename=false\nfi\n\n\n# Name of the executable.\nas_me=`$as_basename -- \"$0\" ||\n$as_expr X/\"$0\" : '.*/\\([^/][^/]*\\)/*$' \\| \\\n\t X\"$0\" : 'X\\(//\\)$' \\| \\\n\t X\"$0\" : 'X\\(/\\)' \\| . 2>/dev/null ||\necho X/\"$0\" |\n    sed '/^.*\\/\\([^/][^/]*\\)\\/*$/{\n\t    s//\\1/\n\t    q\n\t  }\n\t  /^X\\/\\(\\/\\/\\)$/{\n\t    s//\\1/\n\t    q\n\t  }\n\t  /^X\\/\\(\\/\\).*/{\n\t    s//\\1/\n\t    q\n\t  }\n\t  s/.*/./; q'`\n\n# CDPATH.\n$as_unset CDPATH\n\n\n\n  as_lineno_1=$LINENO\n  as_lineno_2=$LINENO\n  test \"x$as_lineno_1\" != \"x$as_lineno_2\" &&\n  test \"x`expr $as_lineno_1 + 1`\" = \"x$as_lineno_2\" || {\n\n  # Create $as_me.lineno as a copy of $as_myself, but with $LINENO\n  # uniformly replaced by the line number.  The first 'sed' inserts a\n  # line-number line after each line using $LINENO; the second 'sed'\n  # does the real work.  The second script uses 'N' to pair each\n  # line-number line with the line containing $LINENO, and appends\n  # trailing '-' during substitution so that $LINENO is not a special\n  # case at line end.\n  # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the\n  # scripts with optimization help from Paolo Bonzini.  Blame Lee\n  # E. McMahon (1931-1989) for sed's syntax.  :-)\n  sed -n '\n    p\n    /[$]LINENO/=\n  ' <$as_myself |\n    sed '\n      s/[$]LINENO.*/&-/\n      t lineno\n      b\n      :lineno\n      N\n      :loop\n      s/[$]LINENO\\([^'$as_cr_alnum'_].*\\n\\)\\(.*\\)/\\2\\1\\2/\n      t loop\n      s/-\\n.*//\n    ' >$as_me.lineno &&\n  chmod +x \"$as_me.lineno\" ||\n    { echo \"$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell\" >&2\n   { (exit 1); exit 1; }; }\n\n  # Don't try to exec as it changes $[0], causing all sort of problems\n  # (the dirname of $[0] is not the place where we might find the\n  # original and so on.  Autoconf is especially sensitive to this).\n  . \"./$as_me.lineno\"\n  # Exit status is that of the last command.\n  exit\n}\n\n\nif (dirname -- /) >/dev/null 2>&1; then\n  as_dirname=dirname\nelse\n  as_dirname=false\nfi\n\nECHO_C= ECHO_N= ECHO_T=\ncase `echo -n x` in\n-n*)\n  case `echo 'x\\c'` in\n  *c*) ECHO_T='\t';;\t# ECHO_T is single tab character.\n  *)   ECHO_C='\\c';;\n  esac;;\n*)\n  ECHO_N='-n';;\nesac\n\nif expr a : '\\(a\\)' >/dev/null 2>&1 &&\n   test \"X`expr 00001 : '.*\\(...\\)'`\" = X001; then\n  as_expr=expr\nelse\n  as_expr=false\nfi\n\nrm -f conf$$ conf$$.exe conf$$.file\nif test -d conf$$.dir; then\n  rm -f conf$$.dir/conf$$.file\nelse\n  rm -f conf$$.dir\n  mkdir conf$$.dir\nfi\necho >conf$$.file\nif ln -s conf$$.file conf$$ 2>/dev/null; then\n  as_ln_s='ln -s'\n  # ... but there are two gotchas:\n  # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.\n  # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.\n  # In both cases, we have to default to `cp -p'.\n  ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||\n    as_ln_s='cp -p'\nelif ln conf$$.file conf$$ 2>/dev/null; then\n  as_ln_s=ln\nelse\n  as_ln_s='cp -p'\nfi\nrm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file\nrmdir conf$$.dir 2>/dev/null\n\nif mkdir -p . 2>/dev/null; then\n  as_mkdir_p=:\nelse\n  test -d ./-p && rmdir ./-p\n  as_mkdir_p=false\nfi\n\n# Find out whether ``test -x'' works.  Don't use a zero-byte file, as\n# systems may use methods other than mode bits to determine executability.\ncat >conf$$.file <<_ASEOF\n#! /bin/sh\nexit 0\n_ASEOF\nchmod +x conf$$.file\nif test -x conf$$.file >/dev/null 2>&1; then\n  as_executable_p=\"test -x\"\nelse\n  as_executable_p=:\nfi\nrm -f conf$$.file\n\n# Sed expression to map a string onto a valid CPP name.\nas_tr_cpp=\"eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'\"\n\n# Sed expression to map a string onto a valid variable name.\nas_tr_sh=\"eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'\"\n\n\nexec 6>&1\n\n# Save the log message, to keep $[0] and so on meaningful, and to\n# report actual input values of CONFIG_FILES etc. instead of their\n# values after options handling.\nac_log=\"\nThis file was extended by $as_me, which was\ngenerated by GNU Autoconf 2.59d.  Invocation command line was\n\n  CONFIG_FILES    = $CONFIG_FILES\n  CONFIG_HEADERS  = $CONFIG_HEADERS\n  CONFIG_LINKS    = $CONFIG_LINKS\n  CONFIG_COMMANDS = $CONFIG_COMMANDS\n  $ $0 $@\n\non `(hostname || uname -n) 2>/dev/null | sed 1q`\n\"\n\n_ACEOF\n\ncat >>$CONFIG_STATUS <<_ACEOF\n# Files that config.status was made for.\nconfig_files=\"$ac_config_files\"\n\n_ACEOF\n\ncat >>$CONFIG_STATUS <<\\_ACEOF\nac_cs_usage=\"\\\n\\`$as_me' instantiates files from templates according to the\ncurrent configuration.\n\nUsage: $0 [OPTIONS] [FILE]...\n\n  -h, --help       print this help, then exit\n  -V, --version    print version number, then exit\n  -q, --quiet      do not print progress messages\n  -d, --debug      don't remove temporary files\n      --recheck    update $as_me by reconfiguring in the same conditions\n  --file=FILE[:TEMPLATE]\n\t\t   instantiate the configuration file FILE\n\nConfiguration files:\n$config_files\n\nReport bugs to <bug-autoconf@gnu.org>.\"\n\n_ACEOF\ncat >>$CONFIG_STATUS <<_ACEOF\nac_cs_version=\"\\\\\nconfig.status\nconfigured by $0, generated by GNU Autoconf 2.59d,\n  with options \\\\\"`echo \"$ac_configure_args\" | sed 's/[\\\\\"\"\\`\\$]/\\\\\\\\&/g'`\\\\\"\n\nCopyright (C) 2006 Free Software Foundation, Inc.\nThis config.status script is free software; the Free Software Foundation\ngives unlimited permission to copy, distribute and modify it.\"\n\nac_pwd='$ac_pwd'\nsrcdir='$srcdir'\nINSTALL='$INSTALL'\n_ACEOF\n\ncat >>$CONFIG_STATUS <<\\_ACEOF\n# If no file are specified by the user, then we need to provide default\n# value.  By we need to know if files were specified by the user.\nac_need_defaults=:\nwhile test $# != 0\ndo\n  case $1 in\n  --*=*)\n    ac_option=`expr \"X$1\" : 'X\\([^=]*\\)='`\n    ac_optarg=`expr \"X$1\" : 'X[^=]*=\\(.*\\)'`\n    ac_shift=:\n    ;;\n  *)\n    ac_option=$1\n    ac_optarg=$2\n    ac_shift=shift\n    ;;\n  esac\n\n  case $ac_option in\n  # Handling of the options.\n  -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)\n    ac_cs_recheck=: ;;\n  --version | --versio | --versi | --vers | --ver | --ve | --v | -V )\n    echo \"$ac_cs_version\"; exit ;;\n  --debug | --debu | --deb | --de | --d | -d )\n    debug=: ;;\n  --file | --fil | --fi | --f )\n    $ac_shift\n    CONFIG_FILES=\"$CONFIG_FILES $ac_optarg\"\n    ac_need_defaults=false;;\n  --he | --h |  --help | --hel | -h )\n    echo \"$ac_cs_usage\"; exit ;;\n  -q | -quiet | --quiet | --quie | --qui | --qu | --q \\\n  | -silent | --silent | --silen | --sile | --sil | --si | --s)\n    ac_cs_silent=: ;;\n\n  # This is an error.\n  -*) { echo \"$as_me: error: unrecognized option: $1\nTry \\`$0 --help' for more information.\" >&2\n   { (exit 1); exit 1; }; } ;;\n\n  *) ac_config_targets=\"$ac_config_targets $1\"\n     ac_need_defaults=false ;;\n\n  esac\n  shift\ndone\n\nac_configure_extra_args=\n\nif $ac_cs_silent; then\n  exec 6>/dev/null\n  ac_configure_extra_args=\"$ac_configure_extra_args --silent\"\nfi\n\n_ACEOF\ncat >>$CONFIG_STATUS <<_ACEOF\nif \\$ac_cs_recheck; then\n  echo \"running CONFIG_SHELL=$SHELL $SHELL $0 \" $ac_configure_args \\$ac_configure_extra_args \" --no-create --no-recursion\" >&6\n  CONFIG_SHELL=$SHELL\n  export CONFIG_SHELL\n  exec $SHELL \"$0\" $ac_configure_args \\$ac_configure_extra_args --no-create --no-recursion\nfi\n\n_ACEOF\ncat >>$CONFIG_STATUS <<\\_ACEOF\nexec 5>>config.log\n{\n  echo\n  sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX\n## Running $as_me. ##\n_ASBOX\n  echo \"$ac_log\"\n} >&5\n\n_ACEOF\ncat >>$CONFIG_STATUS <<_ACEOF\n_ACEOF\n\ncat >>$CONFIG_STATUS <<\\_ACEOF\n\n# Handling of arguments.\nfor ac_config_target in $ac_config_targets\ndo\n  case $ac_config_target in\n    \"Makefile\") CONFIG_FILES=\"$CONFIG_FILES Makefile\" ;;\n    \"libvpsc/Makefile\") CONFIG_FILES=\"$CONFIG_FILES libvpsc/Makefile\" ;;\n    \"tests/Makefile\") CONFIG_FILES=\"$CONFIG_FILES tests/Makefile\" ;;\n\n  *) { { echo \"$as_me:$LINENO: error: invalid argument: $ac_config_target\" >&5\necho \"$as_me: error: invalid argument: $ac_config_target\" >&2;}\n   { (exit 1); exit 1; }; };;\n  esac\ndone\n\n\n# If the user did not use the arguments to specify the items to instantiate,\n# then the envvar interface is used.  Set only those that are not.\n# We use the long form for the default assignment because of an extremely\n# bizarre bug on SunOS 4.1.3.\nif $ac_need_defaults; then\n  test \"${CONFIG_FILES+set}\" = set || CONFIG_FILES=$config_files\nfi\n\n# Have a temporary directory for convenience.  Make it in the build tree\n# simply because there is no reason against having it here, and in addition,\n# creating and moving files from /tmp can sometimes cause problems.\n# Hook for its removal unless debugging.\n# Note that there is a small window in which the directory will not be cleaned:\n# after its creation but before its name has been assigned to `$tmp'.\n$debug ||\n{\n  tmp=\n  trap 'exit_status=$?\n  { test -z \"$tmp\" || test ! -d \"$tmp\" || rm -fr \"$tmp\"; } && exit $exit_status\n' 0\n  trap '{ (exit 1); exit 1; }' 1 2 13 15\n}\n# Create a (secure) tmp directory for tmp files.\n\n{\n  tmp=`(umask 077 && mktemp -d \"./confXXXXXX\") 2>/dev/null` &&\n  test -n \"$tmp\" && test -d \"$tmp\"\n}  ||\n{\n  tmp=./conf$$-$RANDOM\n  (umask 077 && mkdir \"$tmp\")\n} ||\n{\n   echo \"$me: cannot create a temporary directory in .\" >&2\n   { (exit 1); exit 1; }\n}\n\n#\n# Set up the sed scripts for CONFIG_FILES section.\n#\n\n# No need to generate the scripts if there are no CONFIG_FILES.\n# This happens for instance when ./config.status config.h\nif test -n \"$CONFIG_FILES\"; then\n\n_ACEOF\n\n\n\nac_delim='%!_!# '\nfor ac_last_try in false false false false false :; do\n  cat >conf$$subs.sed <<_ACEOF\nSHELL!$SHELL$ac_delim\nPATH_SEPARATOR!$PATH_SEPARATOR$ac_delim\nPACKAGE_NAME!$PACKAGE_NAME$ac_delim\nPACKAGE_TARNAME!$PACKAGE_TARNAME$ac_delim\nPACKAGE_VERSION!$PACKAGE_VERSION$ac_delim\nPACKAGE_STRING!$PACKAGE_STRING$ac_delim\nPACKAGE_BUGREPORT!$PACKAGE_BUGREPORT$ac_delim\nexec_prefix!$exec_prefix$ac_delim\nprefix!$prefix$ac_delim\nprogram_transform_name!$program_transform_name$ac_delim\nbindir!$bindir$ac_delim\nsbindir!$sbindir$ac_delim\nlibexecdir!$libexecdir$ac_delim\ndatarootdir!$datarootdir$ac_delim\ndatadir!$datadir$ac_delim\nsysconfdir!$sysconfdir$ac_delim\nsharedstatedir!$sharedstatedir$ac_delim\nlocalstatedir!$localstatedir$ac_delim\nincludedir!$includedir$ac_delim\noldincludedir!$oldincludedir$ac_delim\ndocdir!$docdir$ac_delim\ninfodir!$infodir$ac_delim\nhtmldir!$htmldir$ac_delim\ndvidir!$dvidir$ac_delim\npdfdir!$pdfdir$ac_delim\npsdir!$psdir$ac_delim\nlibdir!$libdir$ac_delim\nlocaledir!$localedir$ac_delim\nmandir!$mandir$ac_delim\nDEFS!$DEFS$ac_delim\nECHO_C!$ECHO_C$ac_delim\nECHO_N!$ECHO_N$ac_delim\nECHO_T!$ECHO_T$ac_delim\nLIBS!$LIBS$ac_delim\nbuild_alias!$build_alias$ac_delim\nhost_alias!$host_alias$ac_delim\ntarget_alias!$target_alias$ac_delim\nINSTALL_PROGRAM!$INSTALL_PROGRAM$ac_delim\nINSTALL_SCRIPT!$INSTALL_SCRIPT$ac_delim\nINSTALL_DATA!$INSTALL_DATA$ac_delim\nPACKAGE!$PACKAGE$ac_delim\nVERSION!$VERSION$ac_delim\nACLOCAL!$ACLOCAL$ac_delim\nAUTOCONF!$AUTOCONF$ac_delim\nAUTOMAKE!$AUTOMAKE$ac_delim\nAUTOHEADER!$AUTOHEADER$ac_delim\nMAKEINFO!$MAKEINFO$ac_delim\nSET_MAKE!$SET_MAKE$ac_delim\nbuild!$build$ac_delim\nbuild_cpu!$build_cpu$ac_delim\nbuild_vendor!$build_vendor$ac_delim\nbuild_os!$build_os$ac_delim\nhost!$host$ac_delim\nhost_cpu!$host_cpu$ac_delim\nhost_vendor!$host_vendor$ac_delim\nhost_os!$host_os$ac_delim\nCC!$CC$ac_delim\nCFLAGS!$CFLAGS$ac_delim\nLDFLAGS!$LDFLAGS$ac_delim\nCPPFLAGS!$CPPFLAGS$ac_delim\nac_ct_CC!$ac_ct_CC$ac_delim\nEXEEXT!$EXEEXT$ac_delim\nOBJEXT!$OBJEXT$ac_delim\nGREP!$GREP$ac_delim\nEGREP!$EGREP$ac_delim\nLN_S!$LN_S$ac_delim\nECHO!$ECHO$ac_delim\nAR!$AR$ac_delim\nRANLIB!$RANLIB$ac_delim\nSTRIP!$STRIP$ac_delim\nCPP!$CPP$ac_delim\nCXX!$CXX$ac_delim\nCXXFLAGS!$CXXFLAGS$ac_delim\nac_ct_CXX!$ac_ct_CXX$ac_delim\nCXXCPP!$CXXCPP$ac_delim\nF77!$F77$ac_delim\nFFLAGS!$FFLAGS$ac_delim\nac_ct_F77!$ac_ct_F77$ac_delim\nLIBTOOL!$LIBTOOL$ac_delim\nLIBOBJS!$LIBOBJS$ac_delim\nLTLIBOBJS!$LTLIBOBJS$ac_delim\n_ACEOF\n\n  if test `grep -c \"$ac_delim\\$\" conf$$subs.sed` = 81; then\n    break\n  elif $ac_last_try; then\n    { { echo \"$as_me:$LINENO: error: could not make $CONFIG_STATUS\" >&5\necho \"$as_me: error: could not make $CONFIG_STATUS\" >&2;}\n   { (exit 1); exit 1; }; }\n  else\n    ac_delim=\"$ac_delim!$ac_delim _$ac_delim!! \"\n  fi\ndone\n\nac_eof=\nif grep '^CEOF$' conf$$subs.sed >/dev/null; then\n  ac_eof=`sed -n '/^CEOF[0-9]*$/s/CEOF//p' conf$$subs.sed | sort -nru | sed 1q`\n  ac_eof=`expr 0$ac_eof + 1`\nfi\n\ncat >>$CONFIG_STATUS <<_ACEOF\ncat >\"\\$tmp/subs-1.sed\" <<\\CEOF$ac_eof\n/@[a-zA-Z_][a-zA-Z_0-9]*@/!b end\n_ACEOF\nsed '\ns/[,\\\\&]/\\\\&/g; s/@/@|#_!!_#|/g\ns/^/s,@/; s/!/@,|#_!!_#|/\n:n\nt n\ns/'\"$ac_delim\"'$/,g/; t\ns/$/\\\\/; p\nN; s/^.*\\n//; s/[,\\\\&]/\\\\&/g; s/@/@|#_!!_#|/g; b n\n' >>$CONFIG_STATUS <conf$$subs.sed\nrm -f conf$$subs.sed\ncat >>$CONFIG_STATUS <<_ACEOF\n:end\ns/|#_!!_#|//g\nCEOF$ac_eof\n_ACEOF\n\n\n# VPATH may cause trouble with some makes, so we remove $(srcdir),\n# ${srcdir} and @srcdir@ from VPATH if srcdir is \".\", strip leading and\n# trailing colons and then remove the whole line if VPATH becomes empty\n# (actually we leave an empty line to preserve line numbers).\nif test \"x$srcdir\" = x.; then\n  ac_vpsub='/^[\t ]*VPATH[\t ]*=/{\ns/:*\\$(srcdir):*/:/\ns/:*\\${srcdir}:*/:/\ns/:*@srcdir@:*/:/\ns/^\\([^=]*=[\t ]*\\):*/\\1/\ns/:*$//\ns/^[^=]*=[\t ]*$//\n}'\nfi\n\ncat >>$CONFIG_STATUS <<\\_ACEOF\nfi # test -n \"$CONFIG_FILES\"\n\n\nfor ac_tag in  :F $CONFIG_FILES\ndo\n  case $ac_tag in\n  :[FHLC]) ac_mode=$ac_tag; continue;;\n  esac\n  case $ac_mode$ac_tag in\n  :[FHL]*:*);;\n  :L* | :C*:*) { { echo \"$as_me:$LINENO: error: Invalid tag $ac_tag.\" >&5\necho \"$as_me: error: Invalid tag $ac_tag.\" >&2;}\n   { (exit 1); exit 1; }; };;\n  :[FH]-) ac_tag=-:-;;\n  :[FH]*) ac_tag=$ac_tag:$ac_tag.in;;\n  esac\n  ac_save_IFS=$IFS\n  IFS=:\n  set x $ac_tag\n  IFS=$ac_save_IFS\n  shift\n  ac_file=$1\n  shift\n\n  case $ac_mode in\n  :L) ac_source=$1;;\n  :[FH])\n    ac_file_inputs=\n    for ac_f\n    do\n      case $ac_f in\n      -) ac_f=\"$tmp/stdin\";;\n      *) # Look for the file first in the build tree, then in the source tree\n\t # (if the path is not absolute).  The absolute path cannot be DOS-style,\n\t # because $ac_f cannot contain `:'.\n\t test -f \"$ac_f\" ||\n\t   case $ac_f in\n\t   [\\\\/$]*) false;;\n\t   *) test -f \"$srcdir/$ac_f\" && ac_f=\"$srcdir/$ac_f\";;\n\t   esac ||\n\t   { { echo \"$as_me:$LINENO: error: cannot find input file: $ac_f\" >&5\necho \"$as_me: error: cannot find input file: $ac_f\" >&2;}\n   { (exit 1); exit 1; }; };;\n      esac\n      ac_file_inputs=\"$ac_file_inputs $ac_f\"\n    done\n\n    # Let's still pretend it is `configure' which instantiates (i.e., don't\n    # use $as_me), people would be surprised to read:\n    #    /* config.h.  Generated by config.status.  */\n    configure_input=\"Generated from \"`IFS=:\n\t  echo $* | sed 's|^[^:]*/||;s|:[^:]*/|, |g'`\" by configure.\"\n    if test x\"$ac_file\" != x-; then\n      configure_input=\"$ac_file.  $configure_input\"\n      { echo \"$as_me:$LINENO: creating $ac_file\" >&5\necho \"$as_me: creating $ac_file\" >&6;}\n    fi\n\n    case $ac_tag in\n    *:-:* | *:-) cat >\"$tmp/stdin\";;\n    esac\n    ;;\n  esac\n\n  ac_dir=`$as_dirname -- \"$ac_file\" ||\n$as_expr X\"$ac_file\" : 'X\\(.*[^/]\\)//*[^/][^/]*/*$' \\| \\\n\t X\"$ac_file\" : 'X\\(//\\)[^/]' \\| \\\n\t X\"$ac_file\" : 'X\\(//\\)$' \\| \\\n\t X\"$ac_file\" : 'X\\(/\\)' \\| . 2>/dev/null ||\necho X\"$ac_file\" |\n    sed '/^X\\(.*[^/]\\)\\/\\/*[^/][^/]*\\/*$/{\n\t    s//\\1/\n\t    q\n\t  }\n\t  /^X\\(\\/\\/\\)[^/].*/{\n\t    s//\\1/\n\t    q\n\t  }\n\t  /^X\\(\\/\\/\\)$/{\n\t    s//\\1/\n\t    q\n\t  }\n\t  /^X\\(\\/\\).*/{\n\t    s//\\1/\n\t    q\n\t  }\n\t  s/.*/./; q'`\n  { as_dir=\"$ac_dir\"\n  case $as_dir in #(\n  -*) as_dir=./$as_dir;;\n  esac\n  test -d \"$as_dir\" || { $as_mkdir_p && mkdir -p \"$as_dir\"; } || {\n    as_dirs=\n    while :; do\n      case $as_dir in #(\n      *\\'*) as_qdir=`echo \"$as_dir\" | sed \"s/'/'\\\\\\\\\\\\\\\\''/g\"`;; #(\n      *) as_qdir=$as_dir;;\n      esac\n      as_dirs=\"'$as_qdir' $as_dirs\"\n      as_dir=`$as_dirname -- \"$as_dir\" ||\n$as_expr X\"$as_dir\" : 'X\\(.*[^/]\\)//*[^/][^/]*/*$' \\| \\\n\t X\"$as_dir\" : 'X\\(//\\)[^/]' \\| \\\n\t X\"$as_dir\" : 'X\\(//\\)$' \\| \\\n\t X\"$as_dir\" : 'X\\(/\\)' \\| . 2>/dev/null ||\necho X\"$as_dir\" |\n    sed '/^X\\(.*[^/]\\)\\/\\/*[^/][^/]*\\/*$/{\n\t    s//\\1/\n\t    q\n\t  }\n\t  /^X\\(\\/\\/\\)[^/].*/{\n\t    s//\\1/\n\t    q\n\t  }\n\t  /^X\\(\\/\\/\\)$/{\n\t    s//\\1/\n\t    q\n\t  }\n\t  /^X\\(\\/\\).*/{\n\t    s//\\1/\n\t    q\n\t  }\n\t  s/.*/./; q'`\n      test -d \"$as_dir\" && break\n    done\n    test -z \"$as_dirs\" || eval \"mkdir $as_dirs\"\n  } || test -d \"$as_dir\" || { { echo \"$as_me:$LINENO: error: cannot create directory $as_dir\" >&5\necho \"$as_me: error: cannot create directory $as_dir\" >&2;}\n   { (exit 1); exit 1; }; }; }\n  ac_builddir=.\n\ncase \"$ac_dir\" in\n.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;\n*)\n  ac_dir_suffix=/`echo \"$ac_dir\" | sed 's,^\\.[\\\\/],,'`\n  # A \"..\" for each directory in $ac_dir_suffix.\n  ac_top_builddir_sub=`echo \"$ac_dir_suffix\" | sed 's,/[^\\\\/]*,/..,g;s,/,,'`\n  case $ac_top_builddir_sub in\n  \"\") ac_top_builddir_sub=. ac_top_build_prefix= ;;\n  *)  ac_top_build_prefix=$ac_top_builddir_sub/ ;;\n  esac ;;\nesac\nac_abs_top_builddir=$ac_pwd\nac_abs_builddir=$ac_pwd$ac_dir_suffix\n# for backward compatibility:\nac_top_builddir=$ac_top_build_prefix\n\ncase $srcdir in\n  .)  # We are building in place.\n    ac_srcdir=.\n    ac_top_srcdir=$ac_top_builddir_sub\n    ac_abs_top_srcdir=$ac_pwd ;;\n  [\\\\/]* | ?:[\\\\/]* )  # Absolute name.\n    ac_srcdir=$srcdir$ac_dir_suffix;\n    ac_top_srcdir=$srcdir\n    ac_abs_top_srcdir=$srcdir ;;\n  *) # Relative name.\n    ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix\n    ac_top_srcdir=$ac_top_build_prefix$srcdir\n    ac_abs_top_srcdir=$ac_pwd/$srcdir ;;\nesac\nac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix\n\n\n  case $ac_mode in\n  :F)\n  #\n  # CONFIG_FILE\n  #\n\n  case $INSTALL in\n  [\\\\/$]* | ?:[\\\\/]* ) ac_INSTALL=$INSTALL ;;\n  *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;;\n  esac\n_ACEOF\n\ncat >>$CONFIG_STATUS <<\\_ACEOF\n# If the template does not know about datarootdir, expand it.\n# FIXME: This hack should be removed a few years after 2.60.\nac_datarootdir_hack=\n\ncase `sed -n '/datarootdir/ {\n  p\n  q\n}\n/@datadir@/p\n/@docdir@/p\n/@infodir@/p\n/@localedir@/p\n/@mandir@/p\n' $ac_file_inputs` in\n*datarootdir*) ;;\n*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*)\n  { echo \"$as_me:$LINENO: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting\" >&5\necho \"$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting\" >&2;}\n_ACEOF\ncat >>$CONFIG_STATUS <<_ACEOF\n  ac_datarootdir_hack='\n  s&@datadir@&$datadir&g\n  s&@docdir@&$docdir&g\n  s&@infodir@&$infodir&g\n  s&@localedir@&$localedir&g\n  s&@mandir@&$mandir&g\n    s&\\\\\\${datarootdir}&$datarootdir&g' ;;\nesac\n_ACEOF\n\n# Neutralize VPATH when `$srcdir' = `.'.\n# Shell code in configure.ac might set extrasub.\n# FIXME: do we really want to maintain this feature?\ncat >>$CONFIG_STATUS <<_ACEOF\n  sed \"$ac_vpsub\n$extrasub\n_ACEOF\ncat >>$CONFIG_STATUS <<\\_ACEOF\n:t\n/@[a-zA-Z_][a-zA-Z_0-9]*@/!b\ns&@configure_input@&$configure_input&;t t\ns&@top_builddir@&$ac_top_builddir_sub&;t t\ns&@srcdir@&$ac_srcdir&;t t\ns&@abs_srcdir@&$ac_abs_srcdir&;t t\ns&@top_srcdir@&$ac_top_srcdir&;t t\ns&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t\ns&@builddir@&$ac_builddir&;t t\ns&@abs_builddir@&$ac_abs_builddir&;t t\ns&@abs_top_builddir@&$ac_abs_top_builddir&;t t\ns&@INSTALL@&$ac_INSTALL&;t t\n$ac_datarootdir_hack\n\" $ac_file_inputs | sed -f \"$tmp/subs-1.sed\" >$tmp/out\n\n  rm -f \"$tmp/stdin\"\n  case $ac_file in\n  -) cat \"$tmp/out\"; rm -f \"$tmp/out\";;\n  *) rm -f \"$ac_file\"; mv \"$tmp/out\" $ac_file;;\n  esac\n ;;\n\n\n\n  esac\n\ndone # for ac_tag\n\n\n{ (exit 0); exit 0; }\n_ACEOF\nchmod +x $CONFIG_STATUS\nac_clean_files=$ac_clean_files_save\n\n\n# configure is writing to config.log, and then calls config.status.\n# config.status does its own redirection, appending to config.log.\n# Unfortunately, on DOS this fails, as config.log is still kept open\n# by configure, so config.status won't be able to write to it; its\n# output is simply discarded.  So we exec the FD to /dev/null,\n# effectively closing config.log, so it can be properly (re)opened and\n# appended to by config.status.  When coming back to configure, we\n# need to make the FD available again.\nif test \"$no_create\" != yes; then\n  ac_cs_success=:\n  ac_config_status_args=\n  test \"$silent\" = yes &&\n    ac_config_status_args=\"$ac_config_status_args --quiet\"\n  exec 5>/dev/null\n  $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false\n  exec 5>>config.log\n  # Use ||, not &&, to avoid exiting from the if with $? = 1, which\n  # would make configure fail if this is the last instruction.\n  $ac_cs_success || { (exit 1); exit 1; }\nfi\n\n"
  },
  {
    "path": "experimental/solve_VPSC/configure.in",
    "content": "AC_INIT(libvpsc/solve_VPSC.cpp)\nAM_INIT_AUTOMAKE(libvpsc,1.0)\nAC_PROG_LIBTOOL\nAC_PROG_CXX\nAC_PROG_CC\nAC_PROG_INSTALL\n#AC_DEFINE(RECTANGLE_OVERLAP_LOGGING)\nAC_OUTPUT(Makefile libvpsc/Makefile tests/Makefile)\n"
  },
  {
    "path": "experimental/solve_VPSC/libvpsc/COPYING",
    "content": "\t\t  GNU LESSER GENERAL PUBLIC LICENSE\n\t\t       Version 2.1, February 1999\n\n Copyright (C) 1991, 1999 Free Software Foundation, Inc.\n     51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA\n Everyone is permitted to copy and distribute verbatim copies\n of this license document, but changing it is not allowed.\n\n[This is the first released version of the Lesser GPL.  It also counts\n as the successor of the GNU Library Public License, version 2, hence\n the version number 2.1.]\n\n\t\t\t    Preamble\n\n  The licenses for most software are designed to take away your\nfreedom to share and change it.  By contrast, the GNU General Public\nLicenses are intended to guarantee your freedom to share and change\nfree software--to make sure the software is free for all its users.\n\n  This license, the Lesser General Public License, applies to some\nspecially designated software packages--typically libraries--of the\nFree Software Foundation and other authors who decide to use it.  You\ncan use it too, but we suggest you first think carefully about whether\nthis license or the ordinary General Public License is the better\nstrategy to use in any particular case, based on the explanations below.\n\n  When we speak of free software, we are referring to freedom of use,\nnot price.  Our General Public Licenses are designed to make sure that\nyou have the freedom to distribute copies of free software (and charge\nfor this service if you wish); that you receive source code or can get\nit if you want it; that you can change the software and use pieces of\nit in new free programs; and that you are informed that you can do\nthese things.\n\n  To protect your rights, we need to make restrictions that forbid\ndistributors to deny you these rights or to ask you to surrender these\nrights.  These restrictions translate to certain responsibilities for\nyou if you distribute copies of the library or if you modify it.\n\n  For example, if you distribute copies of the library, whether gratis\nor for a fee, you must give the recipients all the rights that we gave\nyou.  You must make sure that they, too, receive or can get the source\ncode.  If you link other code with the library, you must provide\ncomplete object files to the recipients, so that they can relink them\nwith the library after making changes to the library and recompiling\nit.  And you must show them these terms so they know their rights.\n\n  We protect your rights with a two-step method: (1) we copyright the\nlibrary, and (2) we offer you this license, which gives you legal\npermission to copy, distribute and/or modify the library.\n\n  To protect each distributor, we want to make it very clear that\nthere is no warranty for the free library.  Also, if the library is\nmodified by someone else and passed on, the recipients should know\nthat what they have is not the original version, so that the original\nauthor's reputation will not be affected by problems that might be\nintroduced by others.\n\f\n  Finally, software patents pose a constant threat to the existence of\nany free program.  We wish to make sure that a company cannot\neffectively restrict the users of a free program by obtaining a\nrestrictive license from a patent holder.  Therefore, we insist that\nany patent license obtained for a version of the library must be\nconsistent with the full freedom of use specified in this license.\n\n  Most GNU software, including some libraries, is covered by the\nordinary GNU General Public License.  This license, the GNU Lesser\nGeneral Public License, applies to certain designated libraries, and\nis quite different from the ordinary General Public License.  We use\nthis license for certain libraries in order to permit linking those\nlibraries into non-free programs.\n\n  When a program is linked with a library, whether statically or using\na shared library, the combination of the two is legally speaking a\ncombined work, a derivative of the original library.  The ordinary\nGeneral Public License therefore permits such linking only if the\nentire combination fits its criteria of freedom.  The Lesser General\nPublic License permits more lax criteria for linking other code with\nthe library.\n\n  We call this license the \"Lesser\" General Public License because it\ndoes Less to protect the user's freedom than the ordinary General\nPublic License.  It also provides other free software developers Less\nof an advantage over competing non-free programs.  These disadvantages\nare the reason we use the ordinary General Public License for many\nlibraries.  However, the Lesser license provides advantages in certain\nspecial circumstances.\n\n  For example, on rare occasions, there may be a special need to\nencourage the widest possible use of a certain library, so that it becomes\na de-facto standard.  To achieve this, non-free programs must be\nallowed to use the library.  A more frequent case is that a free\nlibrary does the same job as widely used non-free libraries.  In this\ncase, there is little to gain by limiting the free library to free\nsoftware only, so we use the Lesser General Public License.\n\n  In other cases, permission to use a particular library in non-free\nprograms enables a greater number of people to use a large body of\nfree software.  For example, permission to use the GNU C Library in\nnon-free programs enables many more people to use the whole GNU\noperating system, as well as its variant, the GNU/Linux operating\nsystem.\n\n  Although the Lesser General Public License is Less protective of the\nusers' freedom, it does ensure that the user of a program that is\nlinked with the Library has the freedom and the wherewithal to run\nthat program using a modified version of the Library.\n\n  The precise terms and conditions for copying, distribution and\nmodification follow.  Pay close attention to the difference between a\n\"work based on the library\" and a \"work that uses the library\".  The\nformer contains code derived from the library, whereas the latter must\nbe combined with the library in order to run.\n\f\n\t\t  GNU LESSER GENERAL PUBLIC LICENSE\n   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION\n\n  0. This License Agreement applies to any software library or other\nprogram which contains a notice placed by the copyright holder or\nother authorized party saying it may be distributed under the terms of\nthis Lesser General Public License (also called \"this License\").\nEach licensee is addressed as \"you\".\n\n  A \"library\" means a collection of software functions and/or data\nprepared so as to be conveniently linked with application programs\n(which use some of those functions and data) to form executables.\n\n  The \"Library\", below, refers to any such software library or work\nwhich has been distributed under these terms.  A \"work based on the\nLibrary\" means either the Library or any derivative work under\ncopyright law: that is to say, a work containing the Library or a\nportion of it, either verbatim or with modifications and/or translated\nstraightforwardly into another language.  (Hereinafter, translation is\nincluded without limitation in the term \"modification\".)\n\n  \"Source code\" for a work means the preferred form of the work for\nmaking modifications to it.  For a library, complete source code means\nall the source code for all modules it contains, plus any associated\ninterface definition files, plus the scripts used to control compilation\nand installation of the library.\n\n  Activities other than copying, distribution and modification are not\ncovered by this License; they are outside its scope.  The act of\nrunning a program using the Library is not restricted, and output from\nsuch a program is covered only if its contents constitute a work based\non the Library (independent of the use of the Library in a tool for\nwriting it).  Whether that is true depends on what the Library does\nand what the program that uses the Library does.\n  \n  1. You may copy and distribute verbatim copies of the Library's\ncomplete source code as you receive it, in any medium, provided that\nyou conspicuously and appropriately publish on each copy an\nappropriate copyright notice and disclaimer of warranty; keep intact\nall the notices that refer to this License and to the absence of any\nwarranty; and distribute a copy of this License along with the\nLibrary.\n\n  You may charge a fee for the physical act of transferring a copy,\nand you may at your option offer warranty protection in exchange for a\nfee.\n\f\n  2. You may modify your copy or copies of the Library or any portion\nof it, thus forming a work based on the Library, and copy and\ndistribute such modifications or work under the terms of Section 1\nabove, provided that you also meet all of these conditions:\n\n    a) The modified work must itself be a software library.\n\n    b) You must cause the files modified to carry prominent notices\n    stating that you changed the files and the date of any change.\n\n    c) You must cause the whole of the work to be licensed at no\n    charge to all third parties under the terms of this License.\n\n    d) If a facility in the modified Library refers to a function or a\n    table of data to be supplied by an application program that uses\n    the facility, other than as an argument passed when the facility\n    is invoked, then you must make a good faith effort to ensure that,\n    in the event an application does not supply such function or\n    table, the facility still operates, and performs whatever part of\n    its purpose remains meaningful.\n\n    (For example, a function in a library to compute square roots has\n    a purpose that is entirely well-defined independent of the\n    application.  Therefore, Subsection 2d requires that any\n    application-supplied function or table used by this function must\n    be optional: if the application does not supply it, the square\n    root function must still compute square roots.)\n\nThese requirements apply to the modified work as a whole.  If\nidentifiable sections of that work are not derived from the Library,\nand can be reasonably considered independent and separate works in\nthemselves, then this License, and its terms, do not apply to those\nsections when you distribute them as separate works.  But when you\ndistribute the same sections as part of a whole which is a work based\non the Library, the distribution of the whole must be on the terms of\nthis License, whose permissions for other licensees extend to the\nentire whole, and thus to each and every part regardless of who wrote\nit.\n\nThus, it is not the intent of this section to claim rights or contest\nyour rights to work written entirely by you; rather, the intent is to\nexercise the right to control the distribution of derivative or\ncollective works based on the Library.\n\nIn addition, mere aggregation of another work not based on the Library\nwith the Library (or with a work based on the Library) on a volume of\na storage or distribution medium does not bring the other work under\nthe scope of this License.\n\n  3. You may opt to apply the terms of the ordinary GNU General Public\nLicense instead of this License to a given copy of the Library.  To do\nthis, you must alter all the notices that refer to this License, so\nthat they refer to the ordinary GNU General Public License, version 2,\ninstead of to this License.  (If a newer version than version 2 of the\nordinary GNU General Public License has appeared, then you can specify\nthat version instead if you wish.)  Do not make any other change in\nthese notices.\n\f\n  Once this change is made in a given copy, it is irreversible for\nthat copy, so the ordinary GNU General Public License applies to all\nsubsequent copies and derivative works made from that copy.\n\n  This option is useful when you wish to copy part of the code of\nthe Library into a program that is not a library.\n\n  4. You may copy and distribute the Library (or a portion or\nderivative of it, under Section 2) in object code or executable form\nunder the terms of Sections 1 and 2 above provided that you accompany\nit with the complete corresponding machine-readable source code, which\nmust be distributed under the terms of Sections 1 and 2 above on a\nmedium customarily used for software interchange.\n\n  If distribution of object code is made by offering access to copy\nfrom a designated place, then offering equivalent access to copy the\nsource code from the same place satisfies the requirement to\ndistribute the source code, even though third parties are not\ncompelled to copy the source along with the object code.\n\n  5. A program that contains no derivative of any portion of the\nLibrary, but is designed to work with the Library by being compiled or\nlinked with it, is called a \"work that uses the Library\".  Such a\nwork, in isolation, is not a derivative work of the Library, and\ntherefore falls outside the scope of this License.\n\n  However, linking a \"work that uses the Library\" with the Library\ncreates an executable that is a derivative of the Library (because it\ncontains portions of the Library), rather than a \"work that uses the\nlibrary\".  The executable is therefore covered by this License.\nSection 6 states terms for distribution of such executables.\n\n  When a \"work that uses the Library\" uses material from a header file\nthat is part of the Library, the object code for the work may be a\nderivative work of the Library even though the source code is not.\nWhether this is true is especially significant if the work can be\nlinked without the Library, or if the work is itself a library.  The\nthreshold for this to be true is not precisely defined by law.\n\n  If such an object file uses only numerical parameters, data\nstructure layouts and accessors, and small macros and small inline\nfunctions (ten lines or less in length), then the use of the object\nfile is unrestricted, regardless of whether it is legally a derivative\nwork.  (Executables containing this object code plus portions of the\nLibrary will still fall under Section 6.)\n\n  Otherwise, if the work is a derivative of the Library, you may\ndistribute the object code for the work under the terms of Section 6.\nAny executables containing that work also fall under Section 6,\nwhether or not they are linked directly with the Library itself.\n\f\n  6. As an exception to the Sections above, you may also combine or\nlink a \"work that uses the Library\" with the Library to produce a\nwork containing portions of the Library, and distribute that work\nunder terms of your choice, provided that the terms permit\nmodification of the work for the customer's own use and reverse\nengineering for debugging such modifications.\n\n  You must give prominent notice with each copy of the work that the\nLibrary is used in it and that the Library and its use are covered by\nthis License.  You must supply a copy of this License.  If the work\nduring execution displays copyright notices, you must include the\ncopyright notice for the Library among them, as well as a reference\ndirecting the user to the copy of this License.  Also, you must do one\nof these things:\n\n    a) Accompany the work with the complete corresponding\n    machine-readable source code for the Library including whatever\n    changes were used in the work (which must be distributed under\n    Sections 1 and 2 above); and, if the work is an executable linked\n    with the Library, with the complete machine-readable \"work that\n    uses the Library\", as object code and/or source code, so that the\n    user can modify the Library and then relink to produce a modified\n    executable containing the modified Library.  (It is understood\n    that the user who changes the contents of definitions files in the\n    Library will not necessarily be able to recompile the application\n    to use the modified definitions.)\n\n    b) Use a suitable shared library mechanism for linking with the\n    Library.  A suitable mechanism is one that (1) uses at run time a\n    copy of the library already present on the user's computer system,\n    rather than copying library functions into the executable, and (2)\n    will operate properly with a modified version of the library, if\n    the user installs one, as long as the modified version is\n    interface-compatible with the version that the work was made with.\n\n    c) Accompany the work with a written offer, valid for at\n    least three years, to give the same user the materials\n    specified in Subsection 6a, above, for a charge no more\n    than the cost of performing this distribution.\n\n    d) If distribution of the work is made by offering access to copy\n    from a designated place, offer equivalent access to copy the above\n    specified materials from the same place.\n\n    e) Verify that the user has already received a copy of these\n    materials or that you have already sent this user a copy.\n\n  For an executable, the required form of the \"work that uses the\nLibrary\" must include any data and utility programs needed for\nreproducing the executable from it.  However, as a special exception,\nthe materials to be distributed need not include anything that is\nnormally distributed (in either source or binary form) with the major\ncomponents (compiler, kernel, and so on) of the operating system on\nwhich the executable runs, unless that component itself accompanies\nthe executable.\n\n  It may happen that this requirement contradicts the license\nrestrictions of other proprietary libraries that do not normally\naccompany the operating system.  Such a contradiction means you cannot\nuse both them and the Library together in an executable that you\ndistribute.\n\f\n  7. You may place library facilities that are a work based on the\nLibrary side-by-side in a single library together with other library\nfacilities not covered by this License, and distribute such a combined\nlibrary, provided that the separate distribution of the work based on\nthe Library and of the other library facilities is otherwise\npermitted, and provided that you do these two things:\n\n    a) Accompany the combined library with a copy of the same work\n    based on the Library, uncombined with any other library\n    facilities.  This must be distributed under the terms of the\n    Sections above.\n\n    b) Give prominent notice with the combined library of the fact\n    that part of it is a work based on the Library, and explaining\n    where to find the accompanying uncombined form of the same work.\n\n  8. You may not copy, modify, sublicense, link with, or distribute\nthe Library except as expressly provided under this License.  Any\nattempt otherwise to copy, modify, sublicense, link with, or\ndistribute the Library is void, and will automatically terminate your\nrights under this License.  However, parties who have received copies,\nor rights, from you under this License will not have their licenses\nterminated so long as such parties remain in full compliance.\n\n  9. You are not required to accept this License, since you have not\nsigned it.  However, nothing else grants you permission to modify or\ndistribute the Library or its derivative works.  These actions are\nprohibited by law if you do not accept this License.  Therefore, by\nmodifying or distributing the Library (or any work based on the\nLibrary), you indicate your acceptance of this License to do so, and\nall its terms and conditions for copying, distributing or modifying\nthe Library or works based on it.\n\n  10. Each time you redistribute the Library (or any work based on the\nLibrary), the recipient automatically receives a license from the\noriginal licensor to copy, distribute, link with or modify the Library\nsubject to these terms and conditions.  You may not impose any further\nrestrictions on the recipients' exercise of the rights granted herein.\nYou are not responsible for enforcing compliance by third parties with\nthis License.\n\f\n  11. If, as a consequence of a court judgment or allegation of patent\ninfringement or for any other reason (not limited to patent issues),\nconditions are imposed on you (whether by court order, agreement or\notherwise) that contradict the conditions of this License, they do not\nexcuse you from the conditions of this License.  If you cannot\ndistribute so as to satisfy simultaneously your obligations under this\nLicense and any other pertinent obligations, then as a consequence you\nmay not distribute the Library at all.  For example, if a patent\nlicense would not permit royalty-free redistribution of the Library by\nall those who receive copies directly or indirectly through you, then\nthe only way you could satisfy both it and this License would be to\nrefrain entirely from distribution of the Library.\n\nIf any portion of this section is held invalid or unenforceable under any\nparticular circumstance, the balance of the section is intended to apply,\nand the section as a whole is intended to apply in other circumstances.\n\nIt is not the purpose of this section to induce you to infringe any\npatents or other property right claims or to contest validity of any\nsuch claims; this section has the sole purpose of protecting the\nintegrity of the free software distribution system which is\nimplemented by public license practices.  Many people have made\ngenerous contributions to the wide range of software distributed\nthrough that system in reliance on consistent application of that\nsystem; it is up to the author/donor to decide if he or she is willing\nto distribute software through any other system and a licensee cannot\nimpose that choice.\n\nThis section is intended to make thoroughly clear what is believed to\nbe a consequence of the rest of this License.\n\n  12. If the distribution and/or use of the Library is restricted in\ncertain countries either by patents or by copyrighted interfaces, the\noriginal copyright holder who places the Library under this License may add\nan explicit geographical distribution limitation excluding those countries,\nso that distribution is permitted only in or among countries not thus\nexcluded.  In such case, this License incorporates the limitation as if\nwritten in the body of this License.\n\n  13. The Free Software Foundation may publish revised and/or new\nversions of the Lesser General Public License from time to time.\nSuch new versions will be similar in spirit to the present version,\nbut may differ in detail to address new problems or concerns.\n\nEach version is given a distinguishing version number.  If the Library\nspecifies a version number of this License which applies to it and\n\"any later version\", you have the option of following the terms and\nconditions either of that version or of any later version published by\nthe Free Software Foundation.  If the Library does not specify a\nlicense version number, you may choose any version ever published by\nthe Free Software Foundation.\n\f\n  14. If you wish to incorporate parts of the Library into other free\nprograms whose distribution conditions are incompatible with these,\nwrite to the author to ask for permission.  For software which is\ncopyrighted by the Free Software Foundation, write to the Free\nSoftware Foundation; we sometimes make exceptions for this.  Our\ndecision will be guided by the two goals of preserving the free status\nof all derivatives of our free software and of promoting the sharing\nand reuse of software generally.\n\n\t\t\t    NO WARRANTY\n\n  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO\nWARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.\nEXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR\nOTHER PARTIES PROVIDE THE LIBRARY \"AS IS\" WITHOUT WARRANTY OF ANY\nKIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\nPURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE\nLIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME\nTHE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.\n\n  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN\nWRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY\nAND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU\nFOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR\nCONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE\nLIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING\nRENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A\nFAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF\nSUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH\nDAMAGES.\n\n\t\t     END OF TERMS AND CONDITIONS\n\f\n           How to Apply These Terms to Your New Libraries\n\n  If you develop a new library, and you want it to be of the greatest\npossible use to the public, we recommend making it free software that\neveryone can redistribute and change.  You can do so by permitting\nredistribution under these terms (or, alternatively, under the terms of the\nordinary General Public License).\n\n  To apply these terms, attach the following notices to the library.  It is\nsafest to attach them to the start of each source file to most effectively\nconvey the exclusion of warranty; and each file should have at least the\n\"copyright\" line and a pointer to where the full notice is found.\n\n    <one line to give the library's name and a brief idea of what it does.>\n    Copyright (C) <year>  <name of author>\n\n    This library is free software; you can redistribute it and/or\n    modify it under the terms of the GNU Lesser General Public\n    License as published by the Free Software Foundation; either\n    version 2.1 of the License, or (at your option) any later version.\n\n    This library is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n    Lesser General Public License for more details.\n\n    You should have received a copy of the GNU Lesser General Public\n    License along with this library; if not, write to the Free Software\n    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA\n\nAlso add information on how to contact you by electronic and paper mail.\n\nYou should also get your employer (if you work as a programmer) or your\nschool, if any, to sign a \"copyright disclaimer\" for the library, if\nnecessary.  Here is a sample; alter the names:\n\n  Yoyodyne, Inc., hereby disclaims all copyright interest in the\n  library `Frob' (a library for tweaking knobs) written by James Random Hacker.\n\n  <signature of Ty Coon>, 1 April 1990\n  Ty Coon, President of Vice\n\nThat's all there is to it!\n\n\n\n"
  },
  {
    "path": "experimental/solve_VPSC/libvpsc/Makefile.am",
    "content": "INCLUDES = -I$(top_srcdir)/libvpsc\n\nlib_LTLIBRARIES = libvpsc.la\n\nlibvpsc_la_SOURCES = block.cpp\\\n\tblocks.cpp\\\n\tconstraint.cpp\\\n\tgenerate-constraints.cpp\\\n\tpairingheap/PairingHeap.cpp\\\n\tremove_rectangle_overlap.cpp\\\n\tsolve_VPSC.cpp\\\n\tcsolve_VPSC.cpp\\\n\tvariable.cpp\\\n\tisnan.h\\\n\tblock.h\\\n\tblocks.h\\\n\tconstraint.h\\\n\tgenerate-constraints.h\\\n\tpairingheap/PairingHeap.h\\\n\tpairingheap/dsexceptions.h\\\n\tremove_rectangle_overlap.h\\\n\tsolve_VPSC.h\\\n\tcsolve_VPSC.h\\\n\tvariable.h\n\ninclude_HEADERS = solve_VPSC.h \\\n\tvariable.h\n\tconstraint.h\\\n\tgenerate-constraints.h\\\n\tremove_rectangle_overlap.h\\\n\tcsolve_VPSC.h\n\t\n\n"
  },
  {
    "path": "experimental/solve_VPSC/libvpsc/block.cpp",
    "content": "/**\n * \\brief A block is a group of variables that must be moved together to improve\n * the goal function without violating already active constraints.\n * The variables in a block are spanned by a tree of active constraints.\n *\n * Authors:\n *   Tim Dwyer <tgdwyer@gmail.com>\n *\n * Copyright (C) 2005 Authors\n *\n * Released under GNU LGPL.  Read the file 'COPYING' for more information.\n */\n#include <cassert>\n#include \"pairingheap/PairingHeap.h\"\n#include \"constraint.h\"\n#include \"block.h\"\n#include \"blocks.h\"\n#ifdef RECTANGLE_OVERLAP_LOGGING\n#include <fstream>\nusing std::ios;\nusing std::ofstream;\nusing std::endl;\n#endif\nusing std::vector;\n\nvoid Block::addVariable(Variable* const v) {\n\tv->block=this;\n\tvars->push_back(v);\n\tweight+=v->weight;\n\twposn += v->weight * (v->desiredPosition - v->offset);\n\tposn=wposn/weight;\n}\nBlock::Block(Variable* const v) {\n\ttimeStamp=0;\n\tposn=weight=wposn=0;\n\tin=NULL;\n\tout=NULL;\n\tdeleted=false;\n\tvars=new vector<Variable*>;\n\tif(v!=NULL) {\n\t\tv->offset=0;\n\t\taddVariable(v);\n\t}\n}\n\ndouble Block::desiredWeightedPosition() {\n\tdouble wp = 0;\n\tfor (Vit v=vars->begin();v!=vars->end();++v) {\n\t\twp += ((*v)->desiredPosition - (*v)->offset) * (*v)->weight;\n\t}\n\treturn wp;\n}\nBlock::~Block(void)\n{\n\tdelete vars;\n\tdelete in;\n\tdelete out;\n}\nvoid Block::setUpInConstraints() {\n\tsetUpConstraintHeap(in,true);\n}\nvoid Block::setUpOutConstraints() {\n\tsetUpConstraintHeap(out,false);\n}\nvoid Block::setUpConstraintHeap(PairingHeap<Constraint*>* &h,bool in) {\n\tdelete h;\n\th = new PairingHeap<Constraint*>(&compareConstraints);\n\tfor (Vit i=vars->begin();i!=vars->end();++i) {\n\t\tVariable *v=*i;\n\t\tvector<Constraint*> *cs=in?&(v->in):&(v->out);\n\t\tfor (Cit j=cs->begin();j!=cs->end();++j) {\n\t\t\tConstraint *c=*j;\n\t\t\tc->timeStamp=blockTimeCtr;\n\t\t\tif (c->left->block != this && in || c->right->block != this && !in) {\n\t\t\t\th->insert(c);\n\t\t\t}\n\t\t}\n\t}\n}\t\nvoid Block::merge(Block* b, Constraint* c) {\n#ifdef RECTANGLE_OVERLAP_LOGGING\n\tofstream f(LOGFILE,ios::app);\n\tf<<\"  merging on: \"<<*c<<\",c->left->offset=\"<<c->left->offset<<\",c->right->offset=\"<<c->right->offset<<endl;\n#endif\n\tdouble dist = c->right->offset - c->left->offset - c->gap;\n\tBlock *l=c->left->block;\n\tBlock *r=c->right->block;\n\tif (vars->size() < b->vars->size()) {\n\t\tr->merge(l,c,dist);\n\t} else {\n\t       \tl->merge(r,c,-dist);\n\t}\n#ifdef RECTANGLE_OVERLAP_LOGGING\n\tf<<\"  merged block=\"<<(b->deleted?*this:*b)<<endl;\n#endif\n}\n/**\n * Merges b into this block across c.  Can be either a\n * right merge or a left merge\n * @param b block to merge into this\n * @param c constraint being merged\n * @param distance separation required to satisfy c\n */\nvoid Block::merge(Block *b, Constraint *c, double dist) {\n#ifdef RECTANGLE_OVERLAP_LOGGING\n\tofstream f(LOGFILE,ios::app);\n\tf<<\"    merging: \"<<*b<<\"dist=\"<<dist<<endl;\n#endif\n\tc->active=true;\n\twposn+=b->wposn-dist*b->weight;\n\tweight+=b->weight;\n\tposn=wposn/weight;\n\tfor(Vit i=b->vars->begin();i!=b->vars->end();++i) {\n\t\tVariable *v=*i;\n\t\tv->block=this;\n\t\tv->offset+=dist;\n\t\tvars->push_back(v);\n\t}\n\tb->deleted=true;\n}\n\nvoid Block::mergeIn(Block *b) {\n#ifdef RECTANGLE_OVERLAP_LOGGING\n\tofstream f(LOGFILE,ios::app);\n\tf<<\"  merging constraint heaps... \"<<endl;\n#endif\n\t// We check the top of the heaps to remove possible internal constraints\n\tfindMinInConstraint();\n\tb->findMinInConstraint();\n\tin->merge(b->in);\n#ifdef RECTANGLE_OVERLAP_LOGGING\n\tf<<\"  merged heap: \"<<*in<<endl;\n#endif\n}\nvoid Block::mergeOut(Block *b) {\t\n\tfindMinOutConstraint();\n\tb->findMinOutConstraint();\n\tout->merge(b->out);\n}\nConstraint *Block::findMinInConstraint() {\n\tConstraint *v = NULL;\n\tvector<Constraint*> outOfDate;\n\twhile (!in->isEmpty()) {\n\t\tv = in->findMin();\n\t\tBlock *lb=v->left->block;\n\t\tBlock *rb=v->right->block;\n\t\t// rb may not be this if called between merge and mergeIn\n#ifdef RECTANGLE_OVERLAP_LOGGING\n\t\tofstream f(LOGFILE,ios::app);\n\t\tf<<\"  checking constraint ... \"<<*v;\n\t\tf<<\"    timestamps: left=\"<<lb->timeStamp<<\" right=\"<<rb->timeStamp<<\" constraint=\"<<v->timeStamp<<endl;\n#endif\n\t\tif(lb == rb) {\n\t\t\t// constraint has been merged into the same block\n#ifdef RECTANGLE_OVERLAP_LOGGING\n\t\t\tif(v->slack()<0) {\n\t\t\t\tf<<\"  violated internal constraint found! \"<<*v<<endl;\n\t\t\t\tf<<\"     lb=\"<<*lb<<endl;\n\t\t\t\tf<<\"     rb=\"<<*rb<<endl;\n\t\t\t}\n#endif\n\t\t\tin->deleteMin();\n#ifdef RECTANGLE_OVERLAP_LOGGING\n\t\t\tf<<\" ... skipping internal constraint\"<<endl;\n#endif\n\t\t} else if(v->timeStamp < lb->timeStamp) {\n\t\t\t// block at other end of constraint has been moved since this\n\t\t\tin->deleteMin();\n\t\t\toutOfDate.push_back(v);\n#ifdef RECTANGLE_OVERLAP_LOGGING\n\t\t\tf<<\"    reinserting out of date (reinsert later)\"<<endl;\n#endif\n\t\t} else {\n\t\t\tbreak;\n\t\t}\n\t}\n\tfor(Cit i=outOfDate.begin();i!=outOfDate.end();++i) {\n\t\tv=*i;\n\t\tv->timeStamp=blockTimeCtr;\n\t\tin->insert(v);\n\t}\n\tif(in->isEmpty()) {\n\t\tv=NULL;\n\t} else {\n\t\tv=in->findMin();\n\t}\n\treturn v;\n}\nConstraint *Block::findMinOutConstraint() {\n\tif(out->isEmpty()) return NULL;\n\tConstraint *v = out->findMin();\n\twhile (v->left->block == v->right->block) {\n\t\tout->deleteMin();\n\t\tif(out->isEmpty()) return NULL;\n\t\tv = out->findMin();\n\t}\n\treturn v;\n}\nvoid Block::deleteMinInConstraint() {\n\tin->deleteMin();\n#ifdef RECTANGLE_OVERLAP_LOGGING\n\tofstream f(LOGFILE,ios::app);\n\tf<<\"deleteMinInConstraint... \"<<endl;\n\tf<<\"  result: \"<<*in<<endl;\n#endif\n}\nvoid Block::deleteMinOutConstraint() {\n\tout->deleteMin();\n}\ninline bool Block::canFollowLeft(Constraint *c, const Variable* const last) {\n\treturn c->left->block==this && c->active && last!=c->left;\n}\ninline bool Block::canFollowRight(Constraint *c, const Variable* const last) {\n\treturn c->right->block==this && c->active && last!=c->right;\n}\n\n// computes the derivative of v and the lagrange multipliers\n// of v's out constraints (as the recursive sum of those below.\n// Does not backtrack over u.\n// also records the constraint with minimum lagrange multiplier\n// in min_lm\ndouble Block::compute_dfdv(Variable* const v, Variable* const u,\n\t       \tConstraint *&min_lm) {\n\tdouble dfdv=v->weight*(v->position() - v->desiredPosition);\n\tfor(Cit it=v->out.begin();it!=v->out.end();++it) {\n\t\tConstraint *c=*it;\n\t\tif(canFollowRight(c,u)) {\n\t\t\tdfdv+=c->lm=compute_dfdv(c->right,v,min_lm);\n\t\t\tif(!c->equality&&(min_lm==NULL||c->lm<min_lm->lm)) min_lm=c;\n\t\t}\n\t}\n\tfor(Cit it=v->in.begin();it!=v->in.end();++it) {\n\t\tConstraint *c=*it;\n\t\tif(canFollowLeft(c,u)) {\n\t\t\tdfdv-=c->lm=-compute_dfdv(c->left,v,min_lm);\n\t\t\tif(!c->equality&&(min_lm==NULL||c->lm<min_lm->lm)) min_lm=c;\n\t\t}\n\t}\n\treturn dfdv;\n}\n\n\n// computes dfdv for each variable and uses the sum of dfdv on either side of\n// the constraint c to compute the lagrangian multiplier lm_c.\n// The top level v and r are variables between which we want to find the\n// constraint with the smallest lm.  \n// When we find r we pass NULL to subsequent recursive calls, \n// thus r=NULL indicates constraints are not on the shortest path.\n// Similarly, m is initially NULL and is only assigned a value if the next\n// variable to be visited is r or if a possible min constraint is returned from\n// a nested call (rather than NULL).\n// Then, the search for the m with minimum lm occurs as we return from\n// the recursion (checking only constraints traversed left-to-right \n// in order to avoid creating any new violations).\n// We also do not consider equality constraints as potential split points\nBlock::Pair Block::compute_dfdv_between(\n\t\tVariable* r, Variable* const v, Variable* const u, \n\t\tconst Direction dir = NONE, bool changedDirection = false) {\n\tdouble dfdv=v->weight*(v->position() - v->desiredPosition);\n\tConstraint *m=NULL;\n\tfor(Cit it(v->in.begin());it!=v->in.end();++it) {\n\t\tConstraint *c=*it;\n\t\tif(canFollowLeft(c,u)) {\n\t\t\tif(dir==RIGHT) { \n\t\t\t\tchangedDirection = true; \n\t\t\t}\n\t\t\tif(c->left==r) {\n\t\t\t       \tr=NULL;\n\t\t\t        if(!c->equality) m=c; \n\t\t\t}\n\t\t\tPair p=compute_dfdv_between(r,c->left,v,\n\t\t\t\t\tLEFT,changedDirection);\n\t\t\tdfdv -= c->lm = -p.first;\n\t\t\tif(r && p.second) \n\t\t\t\tm = p.second;\n\t\t}\n\t}\n\tfor(Cit it(v->out.begin());it!=v->out.end();++it) {\n\t\tConstraint *c=*it;\n\t\tif(canFollowRight(c,u)) {\n\t\t\tif(dir==LEFT) { \n\t\t\t\tchangedDirection = true; \n\t\t\t}\n\t\t\tif(c->right==r) {\n\t\t\t       \tr=NULL; \n\t\t\t        if(!c->equality) m=c; \n\t\t\t}\n\t\t\tPair p=compute_dfdv_between(r,c->right,v,\n\t\t\t\t\tRIGHT,changedDirection);\n\t\t\tdfdv += c->lm = p.first;\n\t\t\tif(r && p.second) \n\t\t\t\tm = changedDirection && !c->equality && c->lm < p.second->lm \n\t\t\t\t\t? c \n\t\t\t\t\t: p.second;\n\t\t}\n\t}\n\treturn Pair(dfdv,m);\n}\n\n// resets LMs for all active constraints to 0 by\n// traversing active constraint tree starting from v,\n// not back tracking over u\nvoid Block::reset_active_lm(Variable* const v, Variable* const u) {\n\tfor(Cit it=v->out.begin();it!=v->out.end();++it) {\n\t\tConstraint *c=*it;\n\t\tif(canFollowRight(c,u)) {\n\t\t\tc->lm=0;\n\t\t\treset_active_lm(c->right,v);\n\t\t}\n\t}\n\tfor(Cit it=v->in.begin();it!=v->in.end();++it) {\n\t\tConstraint *c=*it;\n\t\tif(canFollowLeft(c,u)) {\n\t\t\tc->lm=0;\n\t\t\treset_active_lm(c->left,v);\n\t\t}\n\t}\n}\n/**\n * finds the constraint with the minimum lagrange multiplier, that is, the constraint\n * that most wants to split\n */\nConstraint *Block::findMinLM() {\n\tConstraint *min_lm=NULL;\n\treset_active_lm(vars->front(),NULL);\n\tcompute_dfdv(vars->front(),NULL,min_lm);\n\treturn min_lm;\n}\nConstraint *Block::findMinLMBetween(Variable* const lv, Variable* const rv) {\n\tConstraint *min_lm=NULL;\n\treset_active_lm(vars->front(),NULL);\n\tmin_lm=compute_dfdv_between(rv,lv,NULL).second;\n\treturn min_lm;\n}\n\n// populates block b by traversing the active constraint tree adding variables as they're \n// visited.  Starts from variable v and does not backtrack over variable u.\nvoid Block::populateSplitBlock(Block *b, Variable* const v, Variable* const u) {\n\tb->addVariable(v);\n\tfor (Cit c=v->in.begin();c!=v->in.end();++c) {\n\t\tif (canFollowLeft(*c,u))\n\t\t\tpopulateSplitBlock(b, (*c)->left, v);\n\t}\n\tfor (Cit c=v->out.begin();c!=v->out.end();++c) {\n\t\tif (canFollowRight(*c,u)) \n\t\t\tpopulateSplitBlock(b, (*c)->right, v);\n\t}\n}\n/**\n * Block needs to be split because of a violated constraint between vl and vr.\n * We need to search the active constraint tree between l and r and find the constraint\n * with min lagrangrian multiplier and split at that point.\n * Returns the split constraint\n */\nConstraint* Block::splitBetween(Variable* const vl, Variable* const vr,\n\t       \tBlock* &lb, Block* &rb) {\n#ifdef RECTANGLE_OVERLAP_LOGGING\n\tofstream f(LOGFILE,ios::app);\n\tf<<\"  need to split between: \"<<*vl<<\" and \"<<*vr<<endl;\n#endif\n\tConstraint *c=findMinLMBetween(vl, vr);\n#ifdef RECTANGLE_OVERLAP_LOGGING\n\tf<<\"  going to split on: \"<<*c<<endl;\n#endif\n\tsplit(lb,rb,c);\n\tdeleted = true;\n\treturn c;\n}\n/**\n * Creates two new blocks, l and r, and splits this block across constraint c,\n * placing the left subtree of constraints (and associated variables) into l\n * and the right into r.\n */\nvoid Block::split(Block* &l, Block* &r, Constraint* c) {\n\tc->active=false;\n\tl=new Block();\n\tpopulateSplitBlock(l,c->left,c->right);\n\tr=new Block();\n\tpopulateSplitBlock(r,c->right,c->left);\n}\n\n/**\n * Computes the cost (squared euclidean distance from desired positions) of the\n * current positions for variables in this block\n */\ndouble Block::cost() {\n\tdouble c = 0;\n\tfor (Vit v=vars->begin();v!=vars->end();++v) {\n\t\tdouble diff = (*v)->position() - (*v)->desiredPosition;\n\t\tc += (*v)->weight * diff * diff;\n\t}\n\treturn c;\n}\nostream& operator <<(ostream &os, const Block& b)\n{\n\tos<<\"Block:\";\n\tfor(Block::Vit v=b.vars->begin();v!=b.vars->end();++v) {\n\t\tos<<\" \"<<**v;\n\t}\n\tif(b.deleted) {\n\t\tos<<\" Deleted!\";\n\t}\n    return os;\n}\n"
  },
  {
    "path": "experimental/solve_VPSC/libvpsc/block.h",
    "content": "/**\n * \\brief A block is a group of variables that must be moved together to improve\n * the goal function without violating already active constraints.\n * The variables in a block are spanned by a tree of active constraints.\n *\n * Authors:\n *   Tim Dwyer <tgdwyer@gmail.com>\n *\n * Copyright (C) 2005 Authors\n *\n * Released under GNU LGPL.  Read the file 'COPYING' for more information.\n */\n\n#ifndef SEEN_REMOVEOVERLAP_BLOCK_H\n#define SEEN_REMOVEOVERLAP_BLOCK_H\n\n#include <vector>\n#include <iostream>\nclass Variable;\nclass Constraint;\ntemplate <class T> class PairingHeap;\nclass StupidPriorityQueue;\n\nclass Block\n{\n\ttypedef std::vector<Variable*> Variables;\n\ttypedef std::vector<Constraint*>::iterator Cit;\n\ttypedef std::vector<Variable*>::iterator Vit;\n\n\tfriend std::ostream& operator <<(std::ostream &os,const Block &b);\npublic:\n\tVariables *vars;\n\tdouble posn;\n\tdouble weight;\n\tdouble wposn;\n\tBlock(Variable* const v=NULL);\n\t~Block(void);\n\tConstraint* findMinLM();\n\tConstraint* findMinLMBetween(Variable* const lv, Variable* const rv);\n\tConstraint* findMinInConstraint();\n\tConstraint* findMinOutConstraint();\n\tvoid deleteMinInConstraint();\n\tvoid deleteMinOutConstraint();\n\tdouble desiredWeightedPosition();\n\tvoid merge(Block *b, Constraint *c, double dist);\n\tvoid merge(Block *b, Constraint *c);\n\tvoid mergeIn(Block *b);\n\tvoid mergeOut(Block *b);\n\tvoid split(Block *&l, Block *&r, Constraint *c);\n\tConstraint* splitBetween(Variable* vl, Variable* vr, Block* &lb, Block* &rb);\n\tvoid setUpInConstraints();\n\tvoid setUpOutConstraints();\n\tdouble cost();\n\tbool deleted;\n\tlong timeStamp;\n\tPairingHeap<Constraint*> *in;\n\tPairingHeap<Constraint*> *out;\nprivate:\n\ttypedef enum {NONE, LEFT, RIGHT} Direction;\n\ttypedef std::pair<double, Constraint*> Pair;\n\tvoid reset_active_lm(Variable* const v, Variable* const u);\n\tdouble compute_dfdv(Variable* const v, Variable* const u,\n\t\t       \tConstraint *&min_lm);\n\tPair compute_dfdv_between(\n\t\t\tVariable*, Variable* const, Variable* const,\n\t\t       \tconst Direction, bool);\n\tbool canFollowLeft(Constraint *c, const Variable* const last);\n\tbool canFollowRight(Constraint *c, const Variable* const last);\n\tvoid populateSplitBlock(Block *b, Variable* const v, Variable* const u);\n\tvoid addVariable(Variable* const v);\n\tvoid setUpConstraintHeap(PairingHeap<Constraint*>* &h,bool in);\n};\n\n#endif // SEEN_REMOVEOVERLAP_BLOCK_H\n"
  },
  {
    "path": "experimental/solve_VPSC/libvpsc/blocks.cpp",
    "content": "/**\n * \\brief A block structure defined over the variables\n *\n * A block structure defined over the variables such that each block contains\n * 1 or more variables, with the invariant that all constraints inside a block\n * are satisfied by keeping the variables fixed relative to one another\n *\n * Authors:\n *   Tim Dwyer <tgdwyer@gmail.com>\n *\n * Copyright (C) 2005 Authors\n *\n * Released under GNU LGPL.  Read the file 'COPYING' for more information.\n */\n\n#include \"blocks.h\"\n#include \"block.h\"\n#include \"constraint.h\"\n#ifdef RECTANGLE_OVERLAP_LOGGING\n#include <fstream>\nusing std::ios;\nusing std::ofstream;\nusing std::endl;\n#endif\nusing std::set;\nusing std::vector;\nusing std::iterator;\nusing std::list;\nusing std::copy;\n\nlong blockTimeCtr;\n\nBlocks::Blocks(const int n, Variable* const vs[]) : vs(vs),nvs(n) {\n\tblockTimeCtr=0;\n\tfor(int i=0;i<nvs;i++) {\n\t\tinsert(new Block(vs[i]));\n\t}\n}\nBlocks::~Blocks(void)\n{\n\tblockTimeCtr=0;\n\tfor(set<Block*>::iterator i=begin();i!=end();++i) {\n\t\tdelete *i;\n\t}\n\tclear();\n}\n\n/**\n * returns a list of variables with total ordering determined by the constraint \n * DAG\n */\nlist<Variable*> *Blocks::totalOrder() {\n\tlist<Variable*> *order = new list<Variable*>;\n\tfor(int i=0;i<nvs;i++) {\n\t\tvs[i]->visited=false;\n\t}\n\tfor(int i=0;i<nvs;i++) {\n\t\tif(vs[i]->in.size()==0) {\n\t\t\tdfsVisit(vs[i],order);\n\t\t}\n\t}\n\treturn order;\n}\n// Recursive depth first search giving total order by pushing nodes in the DAG\n// onto the front of the list when we finish searching them\nvoid Blocks::dfsVisit(Variable *v, list<Variable*> *order) {\n\tv->visited=true;\n\tvector<Constraint*>::iterator it=v->out.begin();\n\tfor(;it!=v->out.end();++it) {\n\t\tConstraint *c=*it;\n\t\tif(!c->right->visited) {\n\t\t\tdfsVisit(c->right, order);\n\t\t}\n\t}\t\n#ifdef RECTANGLE_OVERLAP_LOGGING\n\tofstream f(LOGFILE,ios::app);\n\tf<<\"  order=\"<<*v<<endl;\n#endif\n\torder->push_front(v);\n}\n/**\n * Processes incoming constraints, most violated to least, merging with the\n * neighbouring (left) block until no more violated constraints are found\n */\nvoid Blocks::mergeLeft(Block *r) {\t\n#ifdef RECTANGLE_OVERLAP_LOGGING\n\tofstream f(LOGFILE,ios::app);\n\tf<<\"mergeLeft called on \"<<*r<<endl;\n#endif\n\tr->timeStamp=++blockTimeCtr;\n\tr->setUpInConstraints();\n\tConstraint *c=r->findMinInConstraint();\n\twhile (c != NULL && c->slack()<0) {\n#ifdef RECTANGLE_OVERLAP_LOGGING\n\t\tf<<\"mergeLeft on constraint: \"<<*c<<endl;\n#endif\n\t\tr->deleteMinInConstraint();\n\t\tBlock *l = c->left->block;\t\t\n\t\tif (l->in==NULL) l->setUpInConstraints();\n\t\tdouble dist = c->right->offset - c->left->offset - c->gap;\n\t\tif (r->vars->size() < l->vars->size()) {\n\t\t\tdist=-dist;\n\t\t\tstd::swap(l, r);\n\t\t}\n\t\tblockTimeCtr++;\n\t\tr->merge(l, c, dist);\n\t\tr->mergeIn(l);\n\t\tr->timeStamp=blockTimeCtr;\n\t\tremoveBlock(l);\n\t\tc=r->findMinInConstraint();\n\t}\t\t\n#ifdef RECTANGLE_OVERLAP_LOGGING\n\tf<<\"merged \"<<*r<<endl;\n#endif\n}\t\n/**\n * Symmetrical to mergeLeft\n */\nvoid Blocks::mergeRight(Block *l) {\t\n#ifdef RECTANGLE_OVERLAP_LOGGING\n\tofstream f(LOGFILE,ios::app);\n\tf<<\"mergeRight called on \"<<*l<<endl;\n#endif\t\n\tl->setUpOutConstraints();\n\tConstraint *c = l->findMinOutConstraint();\n\twhile (c != NULL && c->slack()<0) {\t\t\n#ifdef RECTANGLE_OVERLAP_LOGGING\n\t\tf<<\"mergeRight on constraint: \"<<*c<<endl;\n#endif\n\t\tl->deleteMinOutConstraint();\n\t\tBlock *r = c->right->block;\n\t\tr->setUpOutConstraints();\n\t\tdouble dist = c->left->offset + c->gap - c->right->offset;\n\t\tif (l->vars->size() > r->vars->size()) {\n\t\t\tdist=-dist;\n\t\t\tstd::swap(l, r);\n\t\t}\n\t\tl->merge(r, c, dist);\n\t\tl->mergeOut(r);\n\t\tremoveBlock(r);\n\t\tc=l->findMinOutConstraint();\n\t}\t\n#ifdef RECTANGLE_OVERLAP_LOGGING\n\tf<<\"merged \"<<*l<<endl;\n#endif\n}\nvoid Blocks::removeBlock(Block *doomed) {\n\tdoomed->deleted=true;\n\t//erase(doomed);\n}\nvoid Blocks::cleanup() {\n\tvector<Block*> bcopy(begin(),end());\n\tfor(vector<Block*>::iterator i=bcopy.begin();i!=bcopy.end();++i) {\n\t\tBlock *b=*i;\n\t\tif(b->deleted) {\n\t\t\terase(b);\n\t\t\tdelete b;\n\t\t}\n\t}\n}\n/**\n * Splits block b across constraint c into two new blocks, l and r (c's left\n * and right sides respectively)\n */\nvoid Blocks::split(Block *b, Block *&l, Block *&r, Constraint *c) {\n\tb->split(l,r,c);\n#ifdef RECTANGLE_OVERLAP_LOGGING\n\tofstream f(LOGFILE,ios::app);\n\tf<<\"Split left: \"<<*l<<endl;\n\tf<<\"Split right: \"<<*r<<endl;\n#endif\n\tr->posn = b->posn;\n\tr->wposn = r->posn * r->weight;\n\tmergeLeft(l);\n\t// r may have been merged!\n\tr = c->right->block;\n\tr->wposn = r->desiredWeightedPosition();\n\tr->posn = r->wposn / r->weight;\n\tmergeRight(r);\n\tremoveBlock(b);\n\n\tinsert(l);\n\tinsert(r);\n}\n/**\n * returns the cost total squared distance of variables from their desired\n * positions\n */\ndouble Blocks::cost() {\n\tdouble c = 0;\n\tfor(set<Block*>::iterator i=begin();i!=end();++i) {\n\t\tc += (*i)->cost();\n\t}\n\treturn c;\n}\n\n"
  },
  {
    "path": "experimental/solve_VPSC/libvpsc/blocks.h",
    "content": "/**\n * \\brief A block structure defined over the variables\n *\n * A block structure defined over the variables such that each block contains\n * 1 or more variables, with the invariant that all constraints inside a block\n * are satisfied by keeping the variables fixed relative to one another\n *\n * Authors:\n *   Tim Dwyer <tgdwyer@gmail.com>\n *\n * Copyright (C) 2005 Authors\n *\n * Released under GNU LGPL.  Read the file 'COPYING' for more information.\n */\n\n#ifndef SEEN_REMOVEOVERLAP_BLOCKS_H\n#define SEEN_REMOVEOVERLAP_BLOCKS_H\n\n#ifdef RECTANGLE_OVERLAP_LOGGING\n#define LOGFILE \"cRectangleOverlap.log\"\n#endif\n\n#include <set>\n#include <list>\n\nclass Block;\nclass Variable;\nclass Constraint;\n/**\n * A block structure defined over the variables such that each block contains\n * 1 or more variables, with the invariant that all constraints inside a block\n * are satisfied by keeping the variables fixed relative to one another\n */\nclass Blocks : public std::set<Block*>\n{\npublic:\n\tBlocks(const int n, Variable* const vs[]);\n\t~Blocks(void);\n\tvoid mergeLeft(Block *r);\n\tvoid mergeRight(Block *l);\n\tvoid split(Block *b, Block *&l, Block *&r, Constraint *c);\n\tstd::list<Variable*> *totalOrder();\n\tvoid cleanup();\n\tdouble cost();\nprivate:\n\tvoid dfsVisit(Variable *v, std::list<Variable*> *order);\n\tvoid removeBlock(Block *doomed);\n\tVariable* const *vs;\n\tint nvs;\n};\n\nextern long blockTimeCtr;\n#endif // SEEN_REMOVEOVERLAP_BLOCKS_H\n"
  },
  {
    "path": "experimental/solve_VPSC/libvpsc/constraint.cpp",
    "content": "/**\n * \\brief A constraint determines a minimum or exact spacing required between\n * two variables.\n *\n * Authors:\n *   Tim Dwyer <tgdwyer@gmail.com>\n *\n * Copyright (C) 2005 Authors\n *\n * Released under GNU LGPL.  Read the file 'COPYING' for more information.\n */\n\n#include \"constraint.h\"\n#include <cassert>\nConstraint::Constraint(Variable *left, Variable *right, double gap, bool equality)\n: left(left),\n  right(right),\n  gap(gap),\n  timeStamp(0),\n  active(false),\n  visited(false),\n  equality(equality)\n{\n\tleft->out.push_back(this);\n\tright->in.push_back(this);\n}\nConstraint::~Constraint() {\n\tConstraints::iterator i;\n\tfor(i=left->out.begin(); i!=left->out.end(); i++) {\n\t\tif(*i==this) break;\n\t}\n\tleft->out.erase(i);\n\tfor(i=right->in.begin(); i!=right->in.end(); i++) {\n\t\tif(*i==this) break;\n\t}\n\tright->in.erase(i);\n}\nstd::ostream& operator <<(std::ostream &os, const Constraint &c)\n{\n\tif(&c==NULL) {\n\t\tos<<\"NULL\";\n\t} else {\n\t\tconst char *type=c.equality?\"=\":\"<=\";\n\t\tos<<*c.left<<\"+\"<<c.gap<<type<<*c.right<<\"(\"<<c.slack()<<\")\"<<(c.active?\"-active\":\"\");\n\t}\n\treturn os;\n}\n"
  },
  {
    "path": "experimental/solve_VPSC/libvpsc/constraint.h",
    "content": "/**\n * \\brief A constraint determines a minimum or exact spacing required between\n * two variables.\n *\n * Authors:\n *   Tim Dwyer <tgdwyer@gmail.com>\n *\n * Copyright (C) 2005 Authors\n *\n * Released under GNU LGPL.  Read the file 'COPYING' for more information.\n */\n\n#ifndef SEEN_REMOVEOVERLAP_CONSTRAINT_H\n#define SEEN_REMOVEOVERLAP_CONSTRAINT_H\n\n#include <iostream>\n#include \"variable.h\"\n\nclass Constraint\n{\n\tfriend std::ostream& operator <<(std::ostream &os,const Constraint &c);\npublic:\n\tVariable *left;\n\tVariable *right;\n\tdouble gap;\n\tdouble lm;\n\tConstraint(Variable *left, Variable *right, double gap, bool equality=false);\n\t~Constraint();\n\tinline double slack() const { return right->position() - gap - left->position(); }\n\tlong timeStamp;\n\tbool active;\n\tbool visited;\n\tbool equality;\n};\n#include <float.h>\n#include \"block.h\"\nstatic inline bool compareConstraints(Constraint *const &l, Constraint *const &r) {\n\tdouble const sl = \n\t\tl->left->block->timeStamp > l->timeStamp\n\t\t||l->left->block==l->right->block\n\t\t?-DBL_MAX:l->slack();\n\tdouble const sr = \n\t\tr->left->block->timeStamp > r->timeStamp\n\t\t||r->left->block==r->right->block\n\t\t?-DBL_MAX:r->slack();\n\tif(sl==sr) {\n\t\t// arbitrary choice based on id\n\t\tif(l->left->id==r->left->id) {\n\t\t\tif(l->right->id<r->right->id) return true;\n\t\t\treturn false;\n\t\t}\n\t\tif(l->left->id<r->left->id) return true;\n\t\treturn false;\n\t}\n\treturn sl < sr;\n}\n\n#endif // SEEN_REMOVEOVERLAP_CONSTRAINT_H\n"
  },
  {
    "path": "experimental/solve_VPSC/libvpsc/csolve_VPSC.cpp",
    "content": "/**\n * \\brief Bridge for C programs to access solve_VPSC (which is in C++)\n *\n * Authors:\n *   Tim Dwyer <tgdwyer@gmail.com>\n *\n * Copyright (C) 2005 Authors\n *\n * Released under GNU LGPL.  Read the file 'COPYING' for more information.\n */\n#include <iostream>\n#include <cassert>\n#include <variable.h>\n#include <constraint.h>\n#include <generate-constraints.h>\n#include <solve_VPSC.h>\n#include \"csolve_VPSC.h\"\nextern \"C\" {\nVariable* newVariable(int id, double desiredPos, double weight) {\n\treturn new Variable(id,desiredPos,weight);\n}\nConstraint* newConstraint(Variable* left, Variable* right, double gap) {\n\treturn new Constraint(left,right,gap);\n}\nVPSC* newVPSC(int n, Variable* vs[], int m, Constraint* cs[]) {\n\treturn new VPSC(n,vs,m,cs);\n}\nVPSC* newIncVPSC(int n, Variable* vs[], int m, Constraint* cs[]) {\n\treturn (VPSC*)new IncVPSC(n,vs,m,cs);\n}\n\nint genXConstraints(int n, boxf* bb, Variable** vs, Constraint*** cs,int transitiveClosure) {\n\tRectangle* rs[n];\n\tfor(int i=0;i<n;i++) {\n\t\trs[i]=new Rectangle(bb[i].LL.x,bb[i].UR.x,bb[i].LL.y,bb[i].UR.y);\n\t}\n\tint m = generateXConstraints(n,rs,vs,*cs,transitiveClosure);\n\tfor(int i=0;i<n;i++) {\n\t\tdelete rs[i];\n\t}\n\treturn m;\n}\nint genYConstraints(int n, boxf* bb, Variable** vs, Constraint*** cs) {\n\tRectangle* rs[n];\n\tfor(int i=0;i<n;i++) {\n\t\trs[i]=new Rectangle(bb[i].LL.x,bb[i].UR.x,bb[i].LL.y,bb[i].UR.y);\n\t}\n\tint m = generateYConstraints(n,rs,vs,*cs);\n\tfor(int i=0;i<n;i++) {\n\t\tdelete rs[i];\n\t}\n\treturn m;\n}\n\nConstraint** newConstraints(int m) {\n\treturn new Constraint*[m];\n}\nvoid deleteConstraints(int m, Constraint **cs) {\n\tfor(int i=0;i<m;i++) {\n\t\tdelete cs[i];\n\t}\n\tdelete [] cs;\n}\nvoid deleteConstraint(Constraint* c) {\n\tdelete c;\n}\nvoid deleteVariable(Variable* v) {\n\tdelete v;\n}\nvoid satisfyVPSC(VPSC* vpsc) {\n\ttry {\n\t\tvpsc->satisfy();\n\t} catch(const char *e) {\n\t\tstd::cerr << e << std::endl;\n\t\texit(1);\n\t}\n}\nint getSplitCnt(IncVPSC *vpsc) {\n\treturn vpsc->splitCnt;\n}\nvoid deleteVPSC(VPSC *vpsc) {\n\tassert(vpsc!=NULL);\n\tdelete vpsc;\n}\nvoid solveVPSC(VPSC* vpsc) {\n\tvpsc->solve();\n}\nvoid splitIncVPSC(IncVPSC* vpsc) {\n\tvpsc->splitBlocks();\n}\nvoid setVariableDesiredPos(Variable *v, double desiredPos) {\n\tv->desiredPosition = desiredPos;\n}\ndouble getVariablePos(Variable *v) {\n\treturn v->position();\n}\nvoid remapInConstraints(Variable *u, Variable *v, double dgap) {\n\tfor(Constraints::iterator i=u->in.begin();i!=u->in.end();i++) {\n\t\tConstraint* c=*i;\t\n\t\tc->right=v;\n\t\tc->gap+=dgap;\n\t\tv->in.push_back(c);\n\t}\n\tu->in.clear();\n}\nvoid remapOutConstraints(Variable *u, Variable *v, double dgap) {\n\tfor(Constraints::iterator i=u->out.begin();i!=u->out.end();i++) {\n\t\tConstraint* c=*i;\t\n\t\tc->left=v;\n\t\tc->gap+=dgap;\n\t\tv->out.push_back(c);\n\t}\n\tu->out.clear();\n}\nint getLeftVarID(Constraint *c) {\n\treturn c->left->id;\n}\nint getRightVarID(Constraint *c){\n\treturn c->right->id;\n}\ndouble getSeparation(Constraint *c){\n\treturn c->gap;\n}\n}\n"
  },
  {
    "path": "experimental/solve_VPSC/libvpsc/csolve_VPSC.h",
    "content": "/**\n * \\brief Bridge for C programs to access solve_VPSC (which is in C++)\n *\n * Authors:\n *   Tim Dwyer <tgdwyer@gmail.com>\n *\n * Copyright (C) 2005 Authors\n *\n * Released under GNU LGPL.  Read the file 'COPYING' for more information.\n */\n#ifndef _CSOLVE_VPSC_H_\n#define _CSOLVE_VPSC_H_\n#ifdef __cplusplus\nextern \"C\" {\n#endif\ntypedef struct Variable Variable;\nVariable* newVariable(int id, double desiredPos, double weight);\nvoid setVariableDesiredPos(Variable *, double desiredPos);\ndouble getVariablePos(Variable*);\n\ntypedef struct Constraint Constraint;\nConstraint* newConstraint(Variable* left, Variable* right, double gap);\n\ntypedef struct VPSC VPSC;\nVPSC* newVPSC(int n, Variable* vs[], int m, Constraint* cs[]);\nvoid deleteVPSC(VPSC*);\nvoid deleteConstraint(Constraint*);\nvoid deleteVariable(Variable*);\nConstraint** newConstraints(int m);\nvoid deleteConstraints(int m,Constraint**);\nvoid remapInConstraints(Variable *u, Variable *v, double dgap);\nvoid remapOutConstraints(Variable *u, Variable *v, double dgap);\nint getLeftVarID(Constraint *c);\nint getRightVarID(Constraint *c);\ndouble getSeparation(Constraint *c);\n\n#ifndef HAVE_POINTF_S\ntypedef struct pointf_s { double x, y; } pointf;\ntypedef struct { pointf LL, UR; } boxf;\n#endif\nint genXConstraints(int n, boxf[], Variable** vs, Constraint*** cs,\n\t\tint transitiveClosure);\nint genYConstraints(int n, boxf[], Variable** vs, Constraint*** cs);\n\nvoid satisfyVPSC(VPSC*);\nvoid solveVPSC(VPSC*);\ntypedef struct IncVPSC IncVPSC;\nVPSC* newIncVPSC(int n, Variable* vs[], int m, Constraint* cs[]);\nvoid splitIncVPSC(IncVPSC*);\nint getSplitCnt(IncVPSC *vpsc);\n#ifdef __cplusplus\n}\n#endif\n#endif /* _CSOLVE_VPSC_H_ */\n"
  },
  {
    "path": "experimental/solve_VPSC/libvpsc/generate-constraints.cpp",
    "content": "/**\n * \\brief Functions to automatically generate constraints for the\n * rectangular node overlap removal problem.\n *\n * Authors:\n *   Tim Dwyer <tgdwyer@gmail.com>\n *\n * Copyright (C) 2005 Authors\n *\n * Released under GNU LGPL.  Read the file 'COPYING' for more information.\n */\n\n#include <cmath>\n#include <set>\n#include <cassert>\n#include \"generate-constraints.h\"\n#include \"constraint.h\"\n\nusing std::set;\nusing std::vector;\n\nstd::ostream& operator <<(std::ostream &os, const Rectangle &r) {\n\tos << \"{\"<<r.minX<<\",\"<<r.maxX<<\",\"<<r.minY<<\",\"<<r.maxY<<\"},\";\n\treturn os;\n}\nRectangle::Rectangle(double x, double X, double y, double Y) \n: minX(x),maxX(X),minY(y),maxY(Y) {\n\t\tassert(x<=X);\n\t\tassert(y<=Y);\n}\n\nstruct Node;\nstruct CmpNodePos { bool operator()(const Node* u, const Node* v) const; };\n\ntypedef set<Node*,CmpNodePos> NodeSet;\n\nstruct Node {\n\tVariable *v;\n\tRectangle *r;\n\tdouble pos;\n\tNode *firstAbove, *firstBelow;\n\tNodeSet *leftNeighbours, *rightNeighbours;\n\tNode(Variable *v, Rectangle *r, double p) : v(v),r(r),pos(p) {\n\t\tfirstAbove=firstBelow=NULL;\n\t\tleftNeighbours=rightNeighbours=NULL;\n\t\tassert(r->width()<1e40);\n\t}\n\t~Node() {\n\t\tdelete leftNeighbours;\n\t\tdelete rightNeighbours;\n\t}\n\tvoid addLeftNeighbour(Node *u) {\n\t\tleftNeighbours->insert(u);\n\t}\n\tvoid addRightNeighbour(Node *u) {\n\t\trightNeighbours->insert(u);\n\t}\n\tvoid setNeighbours(NodeSet *left, NodeSet *right) {\n\t\tleftNeighbours=left;\n\t\trightNeighbours=right;\n\t\tfor(NodeSet::iterator i=left->begin();i!=left->end();++i) {\n\t\t\tNode *v=*(i);\n\t\t\tv->addRightNeighbour(this);\n\t\t}\n\t\tfor(NodeSet::iterator i=right->begin();i!=right->end();++i) {\n\t\t\tNode *v=*(i);\n\t\t\tv->addLeftNeighbour(this);\n\t\t}\n\t}\n};\nbool CmpNodePos::operator() (const Node* u, const Node* v) const {\n\tif (u->pos < v->pos) {\n\t\treturn true;\n\t}\n\tif (v->pos < u->pos) {\n\t\treturn false;\n\t}\n\tif (std::isnan(u->pos) != std::isnan(v->pos)) {\n\t\treturn std::isnan(u->pos);\n\t}\n\treturn u < v;\n\n\t/* I don't know how important it is to handle NaN correctly\n\t * (e.g. we probably handle it badly in other code anyway, and\n\t * in any case the best we can hope for is to reduce the\n\t * badness of other nodes).\n\t *\n\t * Nevertheless, we try to do the right thing here and in\n\t * event comparison.  The issue is that (on platforms with\n\t * ieee floating point comparison) NaN compares neither less\n\t * than nor greater than any other number, yet sort wants a\n\t * well-defined ordering.  In particular, we want to ensure\n\t * transitivity of equivalence, which normally wouldn't be\n\t * guaranteed if the \"middle\" item in the transitivity\n\t * involves a NaN.  (NaN is neither less than nor greater than\n\t * other numbers, so tends to be considered as equal to all\n\t * other numbers: even unequal numbers.)\n\t */\n}\n\nNodeSet* getLeftNeighbours(NodeSet &scanline,Node *v) {\n\tNodeSet *leftv = new NodeSet;\n\tNodeSet::iterator i=scanline.find(v);\n\twhile(i--!=scanline.begin()) {\n\t\tNode *u=*(i);\n\t\tif(u->r->overlapX(v->r)<=0) {\n\t\t\tleftv->insert(u);\n\t\t\treturn leftv;\n\t\t}\n\t\tif(u->r->overlapX(v->r)<=u->r->overlapY(v->r)) {\n\t\t\tleftv->insert(u);\n\t\t}\n\t}\n\treturn leftv;\n}\nNodeSet* getRightNeighbours(NodeSet &scanline,Node *v) {\n\tNodeSet *rightv = new NodeSet;\n\tNodeSet::iterator i=scanline.find(v);\n\tfor(++i;i!=scanline.end(); ++i) {\n\t\tNode *u=*(i);\n\t\tif(u->r->overlapX(v->r)<=0) {\n\t\t\trightv->insert(u);\n\t\t\treturn rightv;\n\t\t}\n\t\tif(u->r->overlapX(v->r)<=u->r->overlapY(v->r)) {\n\t\t\trightv->insert(u);\n\t\t}\n\t}\n\treturn rightv;\n}\n\ntypedef enum {Open, Close} EventType;\nstruct Event {\n\tEventType type;\n\tNode *v;\n\tdouble pos;\n\tEvent(EventType t, Node *v, double p) : type(t),v(v),pos(p) {};\n};\nEvent **events;\nint compare_events(const void *a, const void *b) {\n\tEvent *ea=*(Event**)a;\n\tEvent *eb=*(Event**)b;\n\tif(ea->v->r==eb->v->r) {\n\t\t// when comparing opening and closing from the same rect\n\t\t// open must come first\n\t\tif(ea->type==Open) return -1;\n\t\treturn 1;\n\t} else if(ea->pos > eb->pos) {\n\t\treturn 1;\n\t} else if(ea->pos < eb->pos) {\n\t\treturn -1;\n\t} else if(std::isnan(ea->pos) != std::isnan(ea->pos)) {\n\t\t/* See comment in CmpNodePos. */\n\t\treturn ( std::isnan(ea->pos)\n\t\t\t ? -1\n\t\t\t : 1 );\n\t}\n\treturn 0;\n}\n\n/**\n * Prepares constraints in order to apply VPSC horizontally.  Assumes variables have already been created.\n * useNeighbourLists determines whether or not a heuristic is used to deciding whether to resolve\n * all overlap in the x pass, or leave some overlaps for the y pass.\n */\nint generateXConstraints(const int n, Rectangle** rs, Variable** vars, Constraint** &cs, const bool useNeighbourLists) {\n\tevents=new Event*[2*n];\n\tint i,m,ctr=0;\n\tfor(i=0;i<n;i++) {\n\t\tvars[i]->desiredPosition=rs[i]->getCentreX();\n\t\tNode *v = new Node(vars[i],rs[i],rs[i]->getCentreX());\n\t\tevents[ctr++]=new Event(Open,v,rs[i]->getMinY());\n\t\tevents[ctr++]=new Event(Close,v,rs[i]->getMaxY());\n\t}\n\tqsort((Event*)events, (size_t)2*n, sizeof(Event*), compare_events );\n\n\tNodeSet scanline;\n\tvector<Constraint*> constraints;\n\tfor(i=0;i<2*n;i++) {\n\t\tEvent *e=events[i];\n\t\tNode *v=e->v;\n\t\tif(e->type==Open) {\n\t\t\tscanline.insert(v);\n\t\t\tif(useNeighbourLists) {\n\t\t\t\tv->setNeighbours(\n\t\t\t\t\tgetLeftNeighbours(scanline,v),\n\t\t\t\t\tgetRightNeighbours(scanline,v)\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tNodeSet::iterator it=scanline.find(v);\n\t\t\t\tif(it--!=scanline.begin()) {\n\t\t\t\t\tNode *u=*it;\n\t\t\t\t\tv->firstAbove=u;\n\t\t\t\t\tu->firstBelow=v;\n\t\t\t\t}\n\t\t\t\tit=scanline.find(v);\n\t\t\t\tif(++it!=scanline.end()) {\n\t\t\t\t\tNode *u=*it;\n\t\t\t\t\tv->firstBelow=u;\n\t\t\t\t\tu->firstAbove=v;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\t// Close event\n\t\t\tint r;\n\t\t\tif(useNeighbourLists) {\n\t\t\t\tfor(NodeSet::iterator i=v->leftNeighbours->begin();\n\t\t\t\t\ti!=v->leftNeighbours->end();i++\n\t\t\t\t) {\n\t\t\t\t\tNode *u=*i;\n\t\t\t\t\tdouble sep = (v->r->width()+u->r->width())/2.0;\n\t\t\t\t\tconstraints.push_back(new Constraint(u->v,v->v,sep));\n\t\t\t\t\tr=u->rightNeighbours->erase(v);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tfor(NodeSet::iterator i=v->rightNeighbours->begin();\n\t\t\t\t\ti!=v->rightNeighbours->end();i++\n\t\t\t\t) {\n\t\t\t\t\tNode *u=*i;\n\t\t\t\t\tdouble sep = (v->r->width()+u->r->width())/2.0;\n\t\t\t\t\tconstraints.push_back(new Constraint(v->v,u->v,sep));\n\t\t\t\t\tr=u->leftNeighbours->erase(v);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tNode *l=v->firstAbove, *r=v->firstBelow;\n\t\t\t\tif(l!=NULL) {\n\t\t\t\t\tdouble sep = (v->r->width()+l->r->width())/2.0;\n\t\t\t\t\tconstraints.push_back(new Constraint(l->v,v->v,sep));\n\t\t\t\t\tl->firstBelow=v->firstBelow;\n\t\t\t\t}\n\t\t\t\tif(r!=NULL) {\n\t\t\t\t\tdouble sep = (v->r->width()+r->r->width())/2.0;\n\t\t\t\t\tconstraints.push_back(new Constraint(v->v,r->v,sep));\n\t\t\t\t\tr->firstAbove=v->firstAbove;\n\t\t\t\t}\n\t\t\t}\n\t\t\tr=scanline.erase(v);\n\t\t\tdelete v;\n\t\t}\n\t\tdelete e;\n\t}\n\tdelete [] events;\n\tcs=new Constraint*[m=constraints.size()];\n\tfor(i=0;i<m;i++) cs[i]=constraints[i];\n\treturn m;\n}\n\n/**\n * Prepares constraints in order to apply VPSC vertically to remove ALL overlap.\n */\nint generateYConstraints(const int n, Rectangle** rs, Variable** vars, Constraint** &cs) {\n\tevents=new Event*[2*n];\n\tint ctr=0,i,m;\n\tfor(i=0;i<n;i++) {\n\t\tvars[i]->desiredPosition=rs[i]->getCentreY();\n\t\tNode *v = new Node(vars[i],rs[i],rs[i]->getCentreY());\n\t\tevents[ctr++]=new Event(Open,v,rs[i]->getMinX());\n\t\tevents[ctr++]=new Event(Close,v,rs[i]->getMaxX());\n\t}\n\tqsort((Event*)events, (size_t)2*n, sizeof(Event*), compare_events );\n\tNodeSet scanline;\n\tvector<Constraint*> constraints;\n\tfor(i=0;i<2*n;i++) {\n\t\tEvent *e=events[i];\n\t\tNode *v=e->v;\n\t\tif(e->type==Open) {\n\t\t\tscanline.insert(v);\n\t\t\tNodeSet::iterator i=scanline.find(v);\n\t\t\tif(i--!=scanline.begin()) {\n\t\t\t\tNode *u=*i;\n\t\t\t\tv->firstAbove=u;\n\t\t\t\tu->firstBelow=v;\n\t\t\t}\n\t\t\ti=scanline.find(v);\n\t\t\tif(++i!=scanline.end())\t {\n\t\t\t\tNode *u=*i;\n\t\t\t\tv->firstBelow=u;\n\t\t\t\tu->firstAbove=v;\n\t\t\t}\n\t\t} else {\n\t\t\t// Close event\n\t\t\tNode *l=v->firstAbove, *r=v->firstBelow;\n\t\t\tif(l!=NULL) {\n\t\t\t\tdouble sep = (v->r->height()+l->r->height())/2.0;\n\t\t\t\tconstraints.push_back(new Constraint(l->v,v->v,sep));\n\t\t\t\tl->firstBelow=v->firstBelow;\n\t\t\t}\n\t\t\tif(r!=NULL) {\n\t\t\t\tdouble sep = (v->r->height()+r->r->height())/2.0;\n\t\t\t\tconstraints.push_back(new Constraint(v->v,r->v,sep));\n\t\t\t\tr->firstAbove=v->firstAbove;\n\t\t\t}\n\t\t\tscanline.erase(v);\n\t\t\tdelete v;\n\t\t}\n\t\tdelete e;\n\t}\n\tdelete [] events;\n\tcs=new Constraint*[m=constraints.size()];\n\tfor(i=0;i<m;i++) cs[i]=constraints[i];\n\treturn m;\n}\n"
  },
  {
    "path": "experimental/solve_VPSC/libvpsc/generate-constraints.h",
    "content": "/**\n * \\brief Functions to automatically generate constraints for the\n * rectangular node overlap removal problem.\n *\n * Authors:\n *   Tim Dwyer <tgdwyer@gmail.com>\n *\n * Copyright (C) 2005 Authors\n *\n * Released under GNU LGPL.  Read the file 'COPYING' for more information.\n */\n#ifndef SEEN_REMOVEOVERLAP_GENERATE_CONSTRAINTS_H\n#define SEEN_REMOVEOVERLAP_GENERATE_CONSTRAINTS_H\n#include <iostream>\n\nclass Rectangle {\t\n\tfriend std::ostream& operator <<(std::ostream &os, const Rectangle &r);\npublic:\n\tstatic double xBorder,yBorder;\n\tRectangle(double x, double X, double y, double Y);\n\tdouble getMaxX() const { return maxX+xBorder; }\n\tdouble getMaxY() const { return maxY+yBorder; }\n\tdouble getMinX() const { return minX; }\n\tdouble getMinY() const { return minY; }\n\tdouble getMinD(unsigned const d) const {\n\t\treturn ( d == 0 ? getMinX() : getMinY() );\n\t}\n\tdouble getMaxD(unsigned const d) const {\n\t\treturn ( d == 0 ? getMaxX() : getMaxY() );\n\t}\n\tdouble getCentreX() const { return minX+width()/2.0; }\n\tdouble getCentreY() const { return minY+height()/2.0; }\n\tdouble width() const { return getMaxX()-minX; }\n\tdouble height() const { return getMaxY()-minY; }\n\tstatic void setXBorder(double x) {xBorder=x;}\n\tstatic void setYBorder(double y) {yBorder=y;}\n\tvoid moveCentreX(double x) {\n\t\tmoveMinX(x-width()/2.0);\n\t}\n\tvoid moveCentreY(double y) {\n\t\tmoveMinY(y-height()/2.0);\n\t}\n\tvoid moveMinX(double x) {\n\t\tmaxX=x+width()-xBorder;\n\t\tminX=x;\n\t}\n\tvoid moveMinY(double y) {\n\t\tmaxY=y+height()-yBorder;\n\t\tminY=y;\n\t}\n\tinline double overlapX(Rectangle *r) const {\n\t\tif (getCentreX() <= r->getCentreX() && r->minX < getMaxX())\n\t\t\treturn getMaxX() - r->minX;\n\t\tif (r->getCentreX() <= getCentreX() && minX < r->getMaxX())\n\t\t\treturn r->getMaxX() - minX;\n\t\treturn 0;\n\t}\n\tinline double overlapY(Rectangle *r) const {\n\t\tif (getCentreY() <= r->getCentreY() && r->minY < getMaxY())\n\t\t\treturn getMaxY() - r->minY;\n\t\tif (r->getCentreY() <= getCentreY() && minY < r->getMaxY())\n\t\t\treturn r->getMaxY() - minY;\n\t\treturn 0;\n\t}\nprivate:\n\tdouble minX,maxX,minY,maxY;\n};\n\n\nclass Variable;\nclass Constraint;\n\n// returns number of constraints generated\nint generateXConstraints(const int n, Rectangle** rs, Variable** vars, Constraint** &cs, const bool useNeighbourLists);\nint generateYConstraints(const int n, Rectangle** rs, Variable** vars, Constraint** &cs);\n\n\n#endif // SEEN_REMOVEOVERLAP_GENERATE_CONSTRAINTS_H\n"
  },
  {
    "path": "experimental/solve_VPSC/libvpsc/pairingheap/PairingHeap.cpp",
    "content": "/**\n * \\brief Pairing heap datastructure implementation\n *\n * Based on example code in \"Data structures and Algorithm Analysis in C++\"\n * by Mark Allen Weiss, used and released under the LGPL by permission\n * of the author.\n *\n * No promises about correctness.  Use at your own risk!\n *\n * Authors:\n *   Mark Allen Weiss\n *   Tim Dwyer <tgdwyer@gmail.com>\n *\n * Copyright (C) 2005 Authors\n *\n * Released under GNU LGPL.  Read the file 'COPYING' for more information.\n */\n\n#include <cassert>\n#include <vector>\n#include <list>\n#include \"dsexceptions.h\"\n#include \"PairingHeap.h\"\n\n#ifndef PAIRING_HEAP_CPP\n#define PAIRING_HEAP_CPP\nusing namespace std;\n/**\n* Construct the pairing heap.\n*/\ntemplate <class T>\nPairingHeap<T>::PairingHeap( bool (*lessThan)(T const &lhs, T const &rhs) )\n{\n\troot = NULL;\n\tcounter=0;\n\tthis->lessThan=lessThan;\n}\n\n\n/**\n* Copy constructor\n*/\ntemplate <class T>\nPairingHeap<T>::PairingHeap( const PairingHeap<T> & rhs )\n{\n\troot = NULL;\n\tcounter=rhs->size();\n\t*this = rhs;\n}\n\n/**\n* Destroy the leftist heap.\n*/\ntemplate <class T>\nPairingHeap<T>::~PairingHeap( )\n{\n\tmakeEmpty( );\n}\n\n/**\n* Insert item x into the priority queue, maintaining heap order.\n* Return a pointer to the node containing the new item.\n*/\ntemplate <class T>\nPairNode<T> *\nPairingHeap<T>::insert( const T & x )\n{\n\tPairNode<T> *newNode = new PairNode<T>( x );\n\n\tif( root == NULL )\n\t\troot = newNode;\n\telse\n\t\tcompareAndLink( root, newNode );\n\tcounter++;\n\treturn newNode;\n}\n\ntemplate <class T>\nunsigned PairingHeap<T>::size() const {\n\treturn counter;\n}\n\n/**\n* Find the smallest item in the priority queue.\n* Return the smallest item, or throw Underflow if empty.\n*/\ntemplate <class T>\nconst T & PairingHeap<T>::findMin( ) const\n{\n\tif( isEmpty( ) )\n\t\tthrow Underflow( );\n\treturn root->element;\n}\n/**\n * Remove the smallest item from the priority queue.\n * Throws Underflow if empty.\n */\ntemplate <class T>\nvoid PairingHeap<T>::deleteMin( )\n{\n    if( isEmpty( ) )\n        throw Underflow( );\n\n    PairNode<T> *oldRoot = root;\n\n    if( root->leftChild == NULL )\n        root = NULL;\n    else\n        root = combineSiblings( root->leftChild );\n    assert(counter);\n    counter--;\n    delete oldRoot;\n}\n\n/**\n* Test if the priority queue is logically empty.\n* Returns true if empty, false otherwise.\n*/\ntemplate <class T>\nbool PairingHeap<T>::isEmpty( ) const\n{\n\treturn root == NULL;\n}\n\n/**\n* Test if the priority queue is logically full.\n* Returns false in this implementation.\n*/\ntemplate <class T>\nbool PairingHeap<T>::isFull( ) const\n{\n\treturn false;\n}\n\n/**\n* Make the priority queue logically empty.\n*/\ntemplate <class T>\nvoid PairingHeap<T>::makeEmpty( )\n{\n\treclaimMemory( root );\n\troot = NULL;\n}\n\n/**\n* Deep copy.\n*/\ntemplate <class T>\nconst PairingHeap<T> &\nPairingHeap<T>::operator=( const PairingHeap<T> & rhs )\n{\n\tif( this != &rhs )\n\t{\n\t\tmakeEmpty( );\n\t\troot = clone( rhs.root );\n\t}\n\n\treturn *this;\n}\n\n/**\n* Internal method to make the tree empty.\n* WARNING: This is prone to running out of stack space.\n*/\ntemplate <class T>\nvoid PairingHeap<T>::reclaimMemory( PairNode<T> * t ) const\n{\n\tif( t != NULL )\n\t{\n\t\treclaimMemory( t->leftChild );\n\t\treclaimMemory( t->nextSibling );\n\t\tdelete t;\n\t}\n}\n\n/**\n* Change the value of the item stored in the pairing heap.\n* Does nothing if newVal is larger than currently stored value.\n* p points to a node returned by insert.\n* newVal is the new value, which must be smaller\n*    than the currently stored value.\n*/\ntemplate <class T>\nvoid PairingHeap<T>::decreaseKey( PairNode<T> *p,\n\t\t\t\t\t\t\t\t\t\t  const T & newVal )\n{\n\tif( lessThan(p->element,newVal) )\n\t\treturn;    // newVal cannot be bigger\n\tp->element = newVal;\n\tif( p != root )\n\t{\n\t\tif( p->nextSibling != NULL )\n\t\t\tp->nextSibling->prev = p->prev;\n\t\tif( p->prev->leftChild == p )\n\t\t\tp->prev->leftChild = p->nextSibling;\n\t\telse\n\t\t\tp->prev->nextSibling = p->nextSibling;\n\n\t\tp->nextSibling = NULL;\n\t\tcompareAndLink( root, p );\n\t}\n}\n\n/**\n* Internal method that is the basic operation to maintain order.\n* Links first and second together to satisfy heap order.\n* first is root of tree 1, which may not be NULL.\n*    first->nextSibling MUST be NULL on entry.\n* second is root of tree 2, which may be NULL.\n* first becomes the result of the tree merge.\n*/\ntemplate <class T>\nvoid PairingHeap<T>::\ncompareAndLink( PairNode<T> * & first,\n\t\t\t   PairNode<T> *second ) const\n{\n\tif( second == NULL )\n\t\treturn;\n\tif( lessThan(second->element,first->element) )\n\t{\n\t\t// Attach first as leftmost child of second\n\t\tsecond->prev = first->prev;\n\t\tfirst->prev = second;\n\t\tfirst->nextSibling = second->leftChild;\n\t\tif( first->nextSibling != NULL )\n\t\t\tfirst->nextSibling->prev = first;\n\t\tsecond->leftChild = first;\n\t\tfirst = second;\n\t}\n\telse\n\t{\n\t\t// Attach second as leftmost child of first\n\t\tsecond->prev = first;\n\t\tfirst->nextSibling = second->nextSibling;\n\t\tif( first->nextSibling != NULL )\n\t\t\tfirst->nextSibling->prev = first;\n\t\tsecond->nextSibling = first->leftChild;\n\t\tif( second->nextSibling != NULL )\n\t\t\tsecond->nextSibling->prev = second;\n\t\tfirst->leftChild = second;\n\t}\n}\n\n/**\n* Internal method that implements two-pass merging.\n* firstSibling the root of the conglomerate;\n*     assumed not NULL.\n*/\ntemplate <class T>\nPairNode<T> *\nPairingHeap<T>::combineSiblings( PairNode<T> *firstSibling ) const\n{\n\tif( firstSibling->nextSibling == NULL )\n\t\treturn firstSibling;\n\n\t// Allocate the array\n\tstatic vector<PairNode<T> *> treeArray( 5 );\n\n\t// Store the subtrees in an array\n\tint numSiblings = 0;\n\tfor( ; firstSibling != NULL; numSiblings++ )\n\t{\n\t\tif( numSiblings == (int)treeArray.size( ) )\n\t\t\ttreeArray.resize( numSiblings * 2 );\n\t\ttreeArray[ numSiblings ] = firstSibling;\n\t\tfirstSibling->prev->nextSibling = NULL;  // break links\n\t\tfirstSibling = firstSibling->nextSibling;\n\t}\n\tif( numSiblings == (int)treeArray.size( ) )\n\t\ttreeArray.resize( numSiblings + 1 );\n\ttreeArray[ numSiblings ] = NULL;\n\n\t// Combine subtrees two at a time, going left to right\n\tint i = 0;\n\tfor( ; i + 1 < numSiblings; i += 2 )\n\t\tcompareAndLink( treeArray[ i ], treeArray[ i + 1 ] );\n\n\tint j = i - 2;\n\n\t// j has the result of last compareAndLink.\n\t// If an odd number of trees, get the last one.\n\tif( j == numSiblings - 3 )\n\t\tcompareAndLink( treeArray[ j ], treeArray[ j + 2 ] );\n\n\t// Now go right to left, merging last tree with\n\t// next to last. The result becomes the new last.\n\tfor( ; j >= 2; j -= 2 )\n\t\tcompareAndLink( treeArray[ j - 2 ], treeArray[ j ] );\n\treturn treeArray[ 0 ];\n}\n\n/**\n* Internal method to clone subtree.\n* WARNING: This is prone to running out of stack space.\n*/\ntemplate <class T>\nPairNode<T> *\nPairingHeap<T>::clone( PairNode<T> * t ) const\n{\n\tif( t == NULL ) \n\t\treturn NULL;\n\telse\n\t{\n\t\tPairNode<T> *p = new PairNode<T>( t->element );\n\t\tif( ( p->leftChild = clone( t->leftChild ) ) != NULL )\n\t\t\tp->leftChild->prev = p;\n\t\tif( ( p->nextSibling = clone( t->nextSibling ) ) != NULL )\n\t\t\tp->nextSibling->prev = p;\n\t\treturn p;\n\t}\n}\ntemplate <class T>\nostream& operator <<(ostream &os, const PairingHeap<T> &b)\n{\n\tos<<\"Heap:\";\n\tif (b.root != NULL) {\n\t\tPairNode<T> *r = b.root;\n\t\tlist<PairNode<T>*> q;\n\t\tq.push_back(r);\n\t\twhile (!q.empty()) {\n\t\t\tr = q.front();\n\t\t\tq.pop_front();\n\t\t\tif (r->leftChild != NULL) {\n\t\t\t\tos << *r->element << \">\";\n\t\t\t\tPairNode<T> *c = r->leftChild;\n\t\t\t\twhile (c != NULL) {\n\t\t\t\t\tq.push_back(c);\n\t\t\t\t\tos << \",\" << *c->element;\n\t\t\t\t\tc = c->nextSibling;\n\t\t\t\t}\n\t\t\t\tos << \"|\";\n\t\t\t}\n\t\t}\n\t}\n    return os;\n}\n#endif\n"
  },
  {
    "path": "experimental/solve_VPSC/libvpsc/pairingheap/PairingHeap.h",
    "content": "/**\n * \\brief Pairing heap datastructure implementation\n *\n * Based on example code in \"Data structures and Algorithm Analysis in C++\"\n * by Mark Allen Weiss, used and released under the LGPL by permission\n * of the author.\n *\n * No promises about correctness.  Use at your own risk!\n *\n * Authors:\n *   Mark Allen Weiss\n *   Tim Dwyer <tgdwyer@gmail.com>\n *\n * Copyright (C) 2005 Authors\n *\n * Released under GNU LGPL.  Read the file 'COPYING' for more information.\n */\n#ifndef PAIRING_HEAP_H_\n#define PAIRING_HEAP_H_\n#include <stdlib.h>\n#include <fstream>\n// Pairing heap class\n//\n// CONSTRUCTION: with no parameters\n//\n// ******************PUBLIC OPERATIONS*********************\n// PairNode & insert( x ) --> Insert x\n// deleteMin( minItem )   --> Remove (and optionally return) smallest item\n// T findMin( )  --> Return smallest item\n// bool isEmpty( )        --> Return true if empty; else false\n// bool isFull( )         --> Return true if empty; else false\n// void makeEmpty( )      --> Remove all items\n// void decreaseKey( PairNode p, newVal )\n//                        --> Decrease value in node p\n// ******************ERRORS********************************\n// Throws Underflow as warranted\n\n\n// Node and forward declaration because g++ does\n// not understand nested classes.\ntemplate <class T> \nclass PairingHeap;\n\ntemplate <class T>\nstd::ostream& operator<< (std::ostream &os,const PairingHeap<T> &b);\n\ntemplate <class T>\nclass PairNode\n{\n\tfriend std::ostream& operator<< <T>(std::ostream &os,const PairingHeap<T> &b);\n\tT   element;\n\tPairNode    *leftChild;\n\tPairNode    *nextSibling;\n\tPairNode    *prev;\n\n\tPairNode( const T & theElement ) :\n\t       \telement( theElement ),\n\t\tleftChild(NULL), nextSibling(NULL), prev(NULL)\n       \t{ }\n\tfriend class PairingHeap<T>;\n};\n\ntemplate <class T>\nclass Comparator\n{\npublic:\n\tvirtual bool isLessThan(T const &lhs, T const &rhs) const = 0;\n};\n\ntemplate <class T>\nclass PairingHeap\n{\n\tfriend std::ostream& operator<< <T>(std::ostream &os,const PairingHeap<T> &b);\npublic:\n\tPairingHeap( bool (*lessThan)(T const &lhs, T const &rhs) );\n\tPairingHeap( const PairingHeap & rhs );\n\t~PairingHeap( );\n\n\tbool isEmpty( ) const;\n\tbool isFull( ) const;\n\tunsigned size() const;\n\n\tPairNode<T> *insert( const T & x );\n\tconst T & findMin( ) const;\n\tvoid deleteMin( );\n\tconst T extractMin( ) {\n\t\tT v = findMin();\n\t\tdeleteMin();\n\t\treturn v;\n\t}\n\tvoid makeEmpty( );\n\tvoid decreaseKey( PairNode<T> *p, const T & newVal );\n\tvoid merge( PairingHeap<T> *rhs )\n\t{\t\n\t\tPairNode<T> *broot=rhs->getRoot();\n\t\tif (root == NULL) {\n\t\t\troot = broot;\n\t\t} else {\n\t\t\tcompareAndLink(root, broot);\n\t\t}\n\t\tcounter+=rhs->size();\n\t}\n\n\tconst PairingHeap & operator=( const PairingHeap & rhs );\nprotected:\n\tPairNode<T> * getRoot() {\n\t\tPairNode<T> *r=root;\n\t\troot=NULL;\n\t\treturn r;\n\t}\nprivate:\n\tPairNode<T> *root;\n\tbool (*lessThan)(T const &lhs, T const &rhs);\n\tunsigned counter;\n\tvoid reclaimMemory( PairNode<T> *t ) const;\n\tvoid compareAndLink( PairNode<T> * & first, PairNode<T> *second ) const;\n\tPairNode<T> * combineSiblings( PairNode<T> *firstSibling ) const;\n\tPairNode<T> * clone( PairNode<T> * t ) const;\n};\n\n#include \"PairingHeap.cpp\"\n#endif\n"
  },
  {
    "path": "experimental/solve_VPSC/libvpsc/pairingheap/dsexceptions.h",
    "content": "#ifndef DSEXCEPTIONS_H_\n#define DSEXCEPTIONS_H_\n\nclass Underflow { };\nclass Overflow  { };\nclass OutOfMemory { };\nclass BadIterator { };\n\n#endif\n"
  },
  {
    "path": "experimental/solve_VPSC/libvpsc/placement_SolveVPSC.cpp",
    "content": "#include <jni.h>\n#include \"placement_SolveVPSC.h\"\n#include <stdio.h>\n#include \"solve_VPSC.h\"\n#include \"variable.h\"\n#include \"constraint.h\"\n#include \"remove_rectangle_overlap.h\"\n#include \"generate-constraints.h\"\n#include <assert.h>\n#include <map>\n#define MaxSize 500\n\nJNIEXPORT jdouble JNICALL Java_placement_SolveVPSC_solve\n  (JNIEnv *env, jobject obj, jobjectArray vName, jdoubleArray vWeight, jdoubleArray vDesPos, jintArray cLeft, jintArray cRight, jdoubleArray cGap, jdoubleArray vResult, jint mode)\n{\n\tjsize n = env->GetArrayLength(vWeight);\n\tjsize m = env->GetArrayLength(cLeft);\n\tint i;\n\tdouble *lvWeight = env->GetDoubleArrayElements(vWeight, 0);\n\tdouble *lvDesPos = env->GetDoubleArrayElements(vDesPos, 0);\n\tlong *lcLeft = env->GetIntArrayElements(cLeft, 0);\n\tlong *lcRight = env->GetIntArrayElements(cRight, 0);\n\tdouble *lcGap = env->GetDoubleArrayElements(cGap, 0);\n\tVariable **vs=new Variable*[n];\n\tConstraint **cs=new Constraint*[m];\n\tfor (i=0; i<n; i++) {\n\t\tjstring lvName = (jstring)env->GetObjectArrayElement(vName, i);\n\t\tconst char *name = env->GetStringUTFChars(lvName, NULL); \n\t\t// once upon a time variables had real names, now you'll have to \n\t\t// track them by number.\n\t\tvs[i]=new Variable(i,lvDesPos[i],lvWeight[i]);\n\t}\n\tfor (i=0; i<m; i++) {\n\t\tcs[i]=new Constraint(vs[lcLeft[i]],vs[lcRight[i]],lcGap[i]);\n\t}\n\tdouble cost=0;\n\tVPSC vpsc(vs,n,cs,m);\n\tif(mode==0) {\n\t\tvpsc.satisfy();\n\t} else {\n\t\tvpsc.solve();\n\t}\n\tfor (i=0; i<n; i++) {\n\t\tdouble p=vs[i]->position();\n\t\tenv->SetDoubleArrayRegion(vResult, i,1,&p);\n\t}\n\tfor (i=0; i<m; i++) {\n\t\tdelete cs[i];\n\t}\n\tdelete [] cs;\n\tfor (i=0; i<n; i++) {\n\t\tdelete vs[i];\n\t}\n\tenv->ReleaseIntArrayElements(cLeft, lcLeft, 0);\n\tenv->ReleaseIntArrayElements(cRight, lcRight, 0);\n\tenv->ReleaseDoubleArrayElements(cGap, lcGap, 0);\n\tenv->ReleaseDoubleArrayElements(vWeight, lvWeight, 0);\n\tenv->ReleaseDoubleArrayElements(vDesPos, lvDesPos, 0);\n\tdelete [] vs;\n\treturn cost;\n}\n\nstatic Variable **vs;\nstatic Constraint **cs;\nstatic int m,n;\nJNIEXPORT jint JNICALL Java_placement_SolveVPSC_generateXConstraints\n(JNIEnv *env, jobject obj, jdoubleArray rMinX, jdoubleArray rMaxX, jdoubleArray rMinY, jdoubleArray rMaxY, jdoubleArray rWeight) {\n\tn = (int)env->GetArrayLength(rWeight);\n\tRectangle **rs=new Rectangle*[n];\n\tdouble *ws = env->GetDoubleArrayElements(rWeight, 0);\n\tdouble *minX = env->GetDoubleArrayElements(rMinX, 0);\n\tdouble *maxX = env->GetDoubleArrayElements(rMaxX, 0);\n\tdouble *minY = env->GetDoubleArrayElements(rMinY, 0);\n\tdouble *maxY = env->GetDoubleArrayElements(rMaxY, 0);\n\tfor(int i=0;i<n;i++) rs[i]=new Rectangle(minX[i],maxX[i],minY[i],maxY[i]);\n\tm = generateXConstraints(rs, ws, n, vs, cs, true);\n\treturn m;\n}\n\nJNIEXPORT jint JNICALL Java_placement_SolveVPSC_generateYConstraints\n(JNIEnv *env, jobject obj, jdoubleArray rMinX, jdoubleArray rMaxX, jdoubleArray rMinY, jdoubleArray rMaxY, jdoubleArray rWeight) {\n\tn = (int)env->GetArrayLength(rWeight);\n\tRectangle **rs=new Rectangle*[n];\n\tdouble *ws = env->GetDoubleArrayElements(rWeight, 0);\n\tdouble *minX = env->GetDoubleArrayElements(rMinX, 0);\n\tdouble *maxX = env->GetDoubleArrayElements(rMaxX, 0);\n\tdouble *minY = env->GetDoubleArrayElements(rMinY, 0);\n\tdouble *maxY = env->GetDoubleArrayElements(rMaxY, 0);\n\tfor(int i=0;i<n;i++) rs[i]=new Rectangle(minX[i],maxX[i],minY[i],maxY[i]);\n\tm = generateYConstraints(rs, ws, n, vs, cs);\n\treturn m;\n}\nusing namespace std;\nJNIEXPORT void JNICALL Java_placement_SolveVPSC_getConstraints\n(JNIEnv *env, jobject obj, jintArray cLeft, jintArray cRight, jdoubleArray cGap) {\n\tmap<Variable*,int> vmap;\n\tfor(int i=0;i<n;i++) {\n\t\tvmap[vs[i]]=i;\n\t}\n\t\n\tfor(int i=0;i<m;i++) {\n\t\tjint l=vmap[cs[i]->left];\n\t\tjint r=vmap[cs[i]->right];\n\t\tdouble g=cs[i]->gap;\n\t\tenv->SetIntArrayRegion(cLeft, i,1,&l);\n\t\tenv->SetIntArrayRegion(cRight, i,1,&r);\n\t\tenv->SetDoubleArrayRegion(cGap, i,1,&g);\n\t}\n}\nJNIEXPORT void JNICALL Java_placement_SolveVPSC_removeOverlaps\n(JNIEnv *env, jobject obj, jdoubleArray rMinX, jdoubleArray rMaxX, jdoubleArray rMinY, jdoubleArray rMaxY) {\n\t//assert(1==2); //break for debugging\n\tn = (int)env->GetArrayLength(rMinX);\n\tRectangle **rs=new Rectangle*[n];\n\tdouble *minX = env->GetDoubleArrayElements(rMinX, 0);\n\tdouble *maxX = env->GetDoubleArrayElements(rMaxX, 0);\n\tdouble *minY = env->GetDoubleArrayElements(rMinY, 0);\n\tdouble *maxY = env->GetDoubleArrayElements(rMaxY, 0);\n\tfor(int i=0;i<n;i++) rs[i]=new Rectangle(minX[i],maxX[i],minY[i],maxY[i]);\n\tremoveRectangleOverlap(rs,n,0,0);\n\tfor (i=0; i<n; i++) {\n\t\tdouble x=rs[i]->getMinX();\n\t\tdouble y=rs[i]->getMinY();\n\t\tenv->SetDoubleArrayRegion(rMinX, i,1,&x);\n\t\tenv->SetDoubleArrayRegion(rMinY, i,1,&y);\n\t}\n\tdelete [] rs;\n\tenv->ReleaseDoubleArrayElements(rMaxX, maxX, 0);\n\tenv->ReleaseDoubleArrayElements(rMaxY, maxY, 0);\n}"
  },
  {
    "path": "experimental/solve_VPSC/libvpsc/placement_SolveVPSC.h",
    "content": "/* DO NOT EDIT THIS FILE - it is machine generated */\n#include <jni.h>\n/* Header for class placement_SolveVPSC */\n\n#ifndef _Included_placement_SolveVPSC\n#define _Included_placement_SolveVPSC\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n/*\n * Class:     placement_SolveVPSC\n * Method:    solve\n * Signature: ([Ljava/lang/String;[D[D[I[I[D[DI)D\n */\nJNIEXPORT jdouble JNICALL Java_placement_SolveVPSC_solve\n  (JNIEnv *, jobject, jobjectArray, jdoubleArray, jdoubleArray, jintArray, jintArray, jdoubleArray, jdoubleArray, jint);\n\n/*\n * Class:     placement_SolveVPSC\n * Method:    generateXConstraints\n * Signature: ([D[D[D[D[D)I\n */\nJNIEXPORT jint JNICALL Java_placement_SolveVPSC_generateXConstraints\n  (JNIEnv *, jobject, jdoubleArray, jdoubleArray, jdoubleArray, jdoubleArray, jdoubleArray);\n\n/*\n * Class:     placement_SolveVPSC\n * Method:    generateYConstraints\n * Signature: ([D[D[D[D[D)I\n */\nJNIEXPORT jint JNICALL Java_placement_SolveVPSC_generateYConstraints\n  (JNIEnv *, jobject, jdoubleArray, jdoubleArray, jdoubleArray, jdoubleArray, jdoubleArray);\n\n/*\n * Class:     placement_SolveVPSC\n * Method:    getConstraints\n * Signature: ([I[I[D)V\n */\nJNIEXPORT void JNICALL Java_placement_SolveVPSC_getConstraints\n  (JNIEnv *, jobject, jintArray, jintArray, jdoubleArray);\n\n/*\n * Class:     placement_SolveVPSC\n * Method:    removeOverlaps\n * Signature: ([D[D[D[D)V\n */\nJNIEXPORT void JNICALL Java_placement_SolveVPSC_removeOverlaps\n  (JNIEnv *, jobject, jdoubleArray, jdoubleArray, jdoubleArray, jdoubleArray);\n\n#ifdef __cplusplus\n}\n#endif\n#endif\n"
  },
  {
    "path": "experimental/solve_VPSC/libvpsc/remove_rectangle_overlap-test.cpp",
    "content": "#include \"removeoverlap/remove_rectangle_overlap.h\"\n#include <unistd.h>  // for alarm()\n#include <time.h>  // for srand seed and clock().\n#include <glib/gmacros.h>\n#include <glib/gmem.h>\n#include <cstdlib>\n#include <cmath>\n#include \"removeoverlap/generate-constraints.h\"\n#include \"utest/utest.h\"\nusing std::abs;\nusing std::rand;\n\nstatic bool\npossibly_eq(double const a, double const b)\n{\n    return abs(a - b) < 1e-13;\n}\n\nstatic bool\npossibly_le(double const a, double const b)\n{\n    return a - b < 1e-13;\n}\n\nstatic void\nshow_rects(unsigned const n_rects, double const rect2coords[][4])\n{\n    for (unsigned i = 0; i < n_rects; ++i) {\n        printf(\"{%g, %g, %g, %g},\\n\",\n               rect2coords[i][0],\n               rect2coords[i][1],\n               rect2coords[i][2],\n               rect2coords[i][3]);\n    }\n}\n\n/**\n * Returns the signum of x, but erring towards returning 0 if x is \"not too far\" from 0.  (\"Not too\n * far from 0\" means [-0.9, 0.9] in current version.)\n */\nstatic int\nsgn0(double const x)\n{\n    if (x <= -0.9) {\n        return -1;\n    } else if (0.9 <= x) {\n        return 1;\n    } else {\n        return 0;\n    }\n}\n\nstatic void\ntest_case(unsigned const n_rects, double const rect2coords[][4])\n{\n    Rectangle **rs = (Rectangle **) g_malloc(sizeof(Rectangle*) * n_rects);\n    for (unsigned i = 0; i < n_rects; ++i) {\n        rs[i] = new Rectangle(rect2coords[i][0],\n                              rect2coords[i][1],\n                              rect2coords[i][2],\n                              rect2coords[i][3]);\n    }\n    removeRectangleOverlap(rs, n_rects, 0.0, 0.0);\n    for (unsigned i = 0; i < n_rects; ++i) {\n        UTEST_ASSERT(possibly_eq(rs[i]->width(), (rect2coords[i][1] -\n                                                  rect2coords[i][0]  )));\n        UTEST_ASSERT(possibly_eq(rs[i]->height(), (rect2coords[i][3] -\n                                                   rect2coords[i][2]  )));\n        for (unsigned j = 0; j < i; ++j) {\n            if (!( possibly_le(rs[i]->getMaxX(), rs[j]->getMinX()) ||\n                   possibly_le(rs[j]->getMaxX(), rs[i]->getMinX()) ||\n                   possibly_le(rs[i]->getMaxY(), rs[j]->getMinY()) ||\n                   possibly_le(rs[j]->getMaxY(), rs[i]->getMinY())   )) {\n                show_rects(n_rects, rect2coords);\n                char buf[32];\n                sprintf(buf, \"[%u],[%u] of %u\", j, i, n_rects);\n                utest__fail(\"Found overlap among \", buf, \" rectangles\");\n            }\n        }\n\n        /* Optimality test. */\n        {\n            bool found_block[2] = {false, false};\n            int const desired_movement[2] = {sgn0(rect2coords[i][0] - rs[i]->getMinX()),\n                                             sgn0(rect2coords[i][2] - rs[i]->getMinY())};\n            for (unsigned j = 0; j < n_rects; ++j) {\n                if (j == i)\n                    continue;\n                for (unsigned d = 0; d < 2; ++d) {\n                    if ( ( desired_movement[d] < 0\n                           ? abs(rs[j]->getMaxD(d) - rs[i]->getMinD(d))\n                           : abs(rs[i]->getMaxD(d) - rs[j]->getMinD(d)) )\n                         < .002 ) {\n                        found_block[d] = true;\n                    }\n                }\n            }\n\n            for (unsigned d = 0; d < 2; ++d) {\n                if ( !found_block[d]\n                     && desired_movement[d] != 0 ) {\n                    show_rects(n_rects, rect2coords);\n                    char buf[32];\n                    sprintf(buf, \"%c in rectangle [%u] of %u\", \"XY\"[d], i, n_rects);\n                    utest__fail(\"Found clear non-optimality in \", buf, \" rectangles\");\n                }\n            }\n        }\n    }\n    for (unsigned i = 0; i < n_rects; ++i) {\n        delete rs[i];\n    }\n    g_free(rs);\n}\n\nint main()\n{\n    srand(time(NULL));\n\n    /* Ensure that the program doesn't run for more than 30 seconds. */\n    alarm(30);\n\n    utest_start(\"removeRectangleOverlap(zero gaps)\");\n\n    /* Derived from Bulia's initial test case.  This used to crash. */\n    UTEST_TEST(\"eg0\") {\n        double case0[][4] = {\n            {-180.5, 69.072, 368.071, 629.071},\n            {99.5, 297.644, 319.5, 449.071},\n            {199.5, 483.358, 450.929, 571.929},\n            {168.071, 277.644, 462.357, 623.357},\n            {99.5, 99.751, 479.5, 674.786},\n            {-111.929, 103.358, 453.786, 611.929},\n            {-29.0714, 143.358, 273.786, 557.643},\n            {122.357, 269.072, 322.357, 531.929},\n            {256.643, 357.644, 396.643, 520.5}\n        };\n        test_case(G_N_ELEMENTS(case0), case0);\n    }\n\n#if 0 /* This involves a zero-height rect, so we'll ignore for the moment. */\n    UTEST_TEST(\"eg1\") {\n        double case1[][4] = {\n            {5, 14, 9, 14},\n            {6, 13, 6, 8},\n            {11, 12, 5, 5},\n            {5, 8, 5, 7},\n            {12, 14, 14, 15},\n            {12, 14, 1, 14},\n            {1, 15, 14, 15},\n            {5, 6, 13, 13}\n        };\n        test_case(G_N_ELEMENTS(case1), case1);\n    }\n#endif\n\n    /* The next few examples used to result in overlaps. */\n    UTEST_TEST(\"eg2\") {\n        double case2[][4] = {\n            {3, 4, 6, 13},\n            {0, 1, 0, 5},\n            {0, 4, 1, 6},\n            {2, 5, 0, 6},\n            {0, 10, 9, 13},\n            {5, 11, 1, 13},\n            {1, 2, 3, 8}\n        };\n        test_case(G_N_ELEMENTS(case2), case2);\n    }\n\n    UTEST_TEST(\"eg3\") {\n        double case3[][4] = {\n            {0, 5, 0, 3},\n            {1, 2, 1, 3},\n            {3, 7, 4, 7},\n            {0, 9, 4, 5},\n            {3, 7, 0, 3}\n        };\n        test_case(G_N_ELEMENTS(case3), case3);\n    }\n\n    UTEST_TEST(\"eg4\") {\n        double case4[][4] = {\n            {0, 1, 2, 3},\n            {0, 4, 0, 4},\n            {1, 6, 0, 4},\n            {2, 3, 4, 5},\n            {0, 5, 4, 6}\n        };\n        test_case(G_N_ELEMENTS(case4), case4);\n    }\n\n    UTEST_TEST(\"eg5\") {\n        double case5[][4] = {\n            {1, 5, 1, 2},\n            {1, 6, 5, 7},\n            {6, 8, 1, 2},\n            {2, 3, 1, 4},\n            {5, 8, 2, 6}\n        };\n        test_case(G_N_ELEMENTS(case5), case5);\n    }\n\n    /* This one causes overlap in 2005-12-19 04:00 UTC version. */\n    UTEST_TEST(\"olap6\") {\n        double case6[][4] = {\n            {7, 22, 39, 54},\n            {7, 33, 0, 59},\n            {3, 26, 16, 56},\n            {7, 17, 18, 20},\n            {1, 59, 11, 26},\n            {19, 20, 13, 49},\n            {1, 10, 0, 4},\n            {47, 52, 1, 3}\n        };\n        test_case(G_N_ELEMENTS(case6), case6);\n    }\n\n    /* The next two examples caused loops in the version at 2005-12-07 04:00 UTC. */\n    UTEST_TEST(\"loop0\") {\n        double loop0[][4] = {\n            {13, 16, 6, 27},\n            {0, 6, 0, 12},\n            {11, 14, 1, 10},\n            {12, 39, 5, 24},\n            {14, 34, 4, 7},\n            {1, 30, 20, 27},\n            {1, 6, 1, 2},\n            {19, 28, 10, 24},\n            {4, 34, 15, 21},\n            {7, 13, 13, 34}\n        };\n        test_case(G_N_ELEMENTS(loop0), loop0);\n    }\n\n    UTEST_TEST(\"loop1\") {\n        double loop1[][4] = {\n            {6, 18, 9, 16},\n            {8, 26, 10, 13},\n            {3, 10, 0, 14},\n            {0, 5, 16, 22},\n            {1, 8, 11, 21},\n            {1, 5, 0, 13},\n            {24, 25, 0, 2}\n        };\n        test_case(G_N_ELEMENTS(loop1), loop1);\n    }\n\n    UTEST_TEST(\"loop2\") {\n        double loop2[][4] = {\n            {16, 22, 9, 16},\n            {8, 9, 14, 19},\n            {17, 25, 8, 13},\n            {10, 26, 26, 29},\n            {14, 19, 9, 19},\n            {0, 18, 3, 12},\n            {7, 8, 14, 22},\n            {14, 20, 25, 29}\n        };\n        test_case(G_N_ELEMENTS(loop2), loop2);\n    }\n\n    /* Random cases of up to 10 rectangles, with small non-neg int coords. */\n    for (unsigned n = 0; n <= 10; ++n) {\n        char buf[64];\n        sprintf(buf, \"random ints with %u rectangles\", n);\n        UTEST_TEST(buf) {\n            unsigned const fld_size = 8 * n;\n            double (*coords)[4] = (double (*)[4]) g_malloc(n * 4 * sizeof(double));\n            clock_t const clock_stop = clock() + CLOCKS_PER_SEC;\n            for (unsigned repeat = (n == 0 ? 1\n                                    : n == 1 ? 36\n                                    : (1 << 16)  ); repeat--;) {\n                for (unsigned i = 0; i < n; ++i) {\n                    for (unsigned d = 0; d < 2; ++d) {\n                        //unsigned const start = rand() % fld_size;\n                        //unsigned const end = start + rand() % (fld_size - start);\n                        unsigned const end = 1 + (rand() % (fld_size - 1));\n                        unsigned const start = rand() % end;\n                        coords[i][2 * d] = start;\n                        coords[i][2 * d + 1] = end;\n                    }\n                }\n                test_case(n, coords);\n                if (clock() >= clock_stop) {\n                    break;\n                }\n            }\n            g_free(coords);\n        }\n    }\n\n    return ( utest_end()\n             ? EXIT_SUCCESS\n             : EXIT_FAILURE );\n}\n\n\n/*\n  Local Variables:\n  mode:c++\n  c-file-style:\"stroustrup\"\n  c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))\n  indent-tabs-mode:nil\n  fill-column:99\n  End:\n*/\n// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=99 :\n"
  },
  {
    "path": "experimental/solve_VPSC/libvpsc/remove_rectangle_overlap.cpp",
    "content": "/**\n * \\brief remove overlaps between a set of rectangles.\n *\n * Authors:\n *   Tim Dwyer <tgdwyer@gmail.com>\n *\n * Copyright (C) 2005 Authors\n *\n * Released under GNU LGPL.  Read the file 'COPYING' for more information.\n */\n\n#include <iostream>\n#include <cassert>\n#include \"generate-constraints.h\"\n#include \"solve_VPSC.h\"\n#include \"variable.h\"\n#include \"constraint.h\"\n#ifdef RECTANGLE_OVERLAP_LOGGING\n#include <fstream>\n#include \"blocks.h\"\nusing std::ios;\nusing std::ofstream;\nusing std::endl;\n#endif\n\n#define EXTRA_GAP 0.0001\n\ndouble Rectangle::xBorder=0;\ndouble Rectangle::yBorder=0;\n/**\n * Takes an array of n rectangles and moves them as little as possible\n * such that rectangles are separated by at least xBorder horizontally\n * and yBorder vertically\n *\n * Works in three passes: \n * 1) removes some overlap horizontally\n * 2) removes remaining overlap vertically\n * 3) a last horizontal pass removes all overlap starting from original\n *    x-positions - this corrects the case where rectangles were moved \n *    too much in the first pass.\n */\nvoid removeRectangleOverlap(int n, Rectangle *rs[], double xBorder, double yBorder) {\n\tassert(0 <= n);\n\ttry {\n\t// The extra gap avoids numerical imprecision problems\n\tRectangle::setXBorder(xBorder+EXTRA_GAP);\n\tRectangle::setYBorder(yBorder+EXTRA_GAP);\n\tVariable **vs=new Variable*[n];\n\tfor(int i=0;i<n;i++) {\n\t\tvs[i]=new Variable(i,0,1);\n\t}\n\tConstraint **cs;\n\tdouble *oldX = new double[n];\n\tint m=generateXConstraints(n,rs,vs,cs,true);\n\tfor(int i=0;i<n;i++) {\n\t\toldX[i]=vs[i]->desiredPosition;\n\t}\n\tVPSC vpsc_x(n,vs,m,cs);\n#ifdef RECTANGLE_OVERLAP_LOGGING\n\tofstream f(LOGFILE,ios::app);\n\tf<<\"Calling VPSC: Horizontal pass 1\"<<endl;\n\tf.close();\n#endif\n\tvpsc_x.solve();\n\tfor(int i=0;i<n;i++) {\n\t\trs[i]->moveCentreX(vs[i]->position());\n\t}\n\tfor(int i = 0; i < m; ++i) {\n\t\tdelete cs[i];\n\t}\n\tdelete [] cs;\n\t// Removing the extra gap here ensures things that were moved to be adjacent to\n\t// one another above are not considered overlapping\n\tRectangle::setXBorder(Rectangle::xBorder-EXTRA_GAP);\n\tm=generateYConstraints(n,rs,vs,cs);\n\tVPSC vpsc_y(n,vs,m,cs);\n#ifdef RECTANGLE_OVERLAP_LOGGING\n\tf.open(LOGFILE,ios::app);\n\tf<<\"Calling VPSC: Vertical pass\"<<endl;\n\tf.close();\n#endif\n\tvpsc_y.solve();\n\tfor(int i=0;i<n;i++) {\n\t\trs[i]->moveCentreY(vs[i]->position());\n\t\trs[i]->moveCentreX(oldX[i]);\n\t}\n\tdelete [] oldX;\n\tfor(int i = 0; i < m; ++i) {\n\t\tdelete cs[i];\n\t}\n\tdelete [] cs;\n\tRectangle::setYBorder(Rectangle::yBorder-EXTRA_GAP);\n\tm=generateXConstraints(n,rs,vs,cs,false);\n\tVPSC vpsc_x2(n,vs,m,cs);\n#ifdef RECTANGLE_OVERLAP_LOGGING\n\tf.open(LOGFILE,ios::app);\n\tf<<\"Calling VPSC: Horizontal pass 2\"<<endl;\n\tf.close();\n#endif\n\tvpsc_x2.solve();\n\tfor(int i=0;i<n;i++) {\n\t\trs[i]->moveCentreX(vs[i]->position());\n\t\tdelete vs[i];\n\t}\n\tdelete [] vs;\n\tfor(int i = 0; i < m; ++i) {\n\t\tdelete cs[i];\n\t}\n\tdelete [] cs;\n\t} catch (char const *str) {\n\t\tstd::cerr<<str<<std::endl;\n\t\tfor(int i=0;i<n;i++) {\n\t\t\tstd::cerr << *rs[i]<<std::endl;\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "experimental/solve_VPSC/libvpsc/remove_rectangle_overlap.h",
    "content": "#ifndef REMOVE_RECTANGLE_OVERLAP_H_SEEN\n#define REMOVE_RECTANGLE_OVERLAP_H_SEEN\n\n/**\n * \\file Declaration of main internal remove-overlaps function.\n */\n/*\n * Authors:\n *   Tim Dwyer <tgdwyer@gmail.com>\n *\n * Copyright (C) 2005 Authors\n *\n * Released under GNU LGPL.  Read the file 'COPYING' for more information.\n */\n\nclass Rectangle;\n\nvoid removeRectangleOverlap(Rectangle *rs[], int n, double xBorder, double yBorder);\n\n\n#endif /* !REMOVE_RECTANGLE_OVERLAP_H_SEEN */\n"
  },
  {
    "path": "experimental/solve_VPSC/libvpsc/removeoverlap.cpp",
    "content": "/** \\file\n * Interface between Inkscape code (SPItem) and remove-overlaps function.\n */\n/*\n* Authors:\n*   Tim Dwyer <tgdwyer@gmail.com>\n*\n* Copyright (C) 2005 Authors\n*\n* Released under GNU LGPL.  Read the file 'COPYING' for more information.\n*/\n#include \"util/glib-list-iterators.h\"\n#include \"sp-item.h\"\n#include \"sp-item-transform.h\"\n#include \"removeoverlap/generate-constraints.h\"\n#include \"removeoverlap/remove_rectangle_overlap.h\"\n\n/**\n* Takes a list of inkscape items and moves them as little as possible\n* such that rectangular bounding boxes are separated by at least xGap\n* horizontally and yGap vertically\n*/\nvoid removeoverlap(GSList const *const items, double const xGap, double const yGap) {\n\tif(!items) {\n\t\treturn;\n\t}\n\n\tusing Inkscape::Util::GSListConstIterator;\n\tstd::list<SPItem *> selected;\n\tselected.insert<GSListConstIterator<SPItem *> >(selected.end(), items, NULL);\n\tif (selected.empty()) return;\n\tint n=selected.size();\n\n\t//Check 2 or more selected objects\n\tif (n < 2) return;\n\n\tRectangle **rs = new Rectangle*[n];\n\tint i=0;\n\n\tNR::Point const gap(xGap, yGap);\n\tfor (std::list<SPItem *>::iterator it(selected.begin());\n\t\tit != selected.end();\n\t\t++it)\n\t{\n\t\tusing NR::X; using NR::Y;\n\t\tNR::Rect const item_box(sp_item_bbox_desktop(*it));\n\t\t\n\t\t/* The current algorithm requires widths & heights to be strictly positive. */\n\t\tNR::Point min(item_box.min());\n\t\tNR::Point max(item_box.max());\n\t\tfor (unsigned d = 0; d < 2; ++d) {\n\t\t\tdouble const minsize = 1; // arbitrary positive number\n\t\t\tif (max[d] - min[d] + gap[d] < minsize) {\n\t\t\t\tdouble const mid = .5 * (min[d] + max[d]);\n\t\t\t\tmin[d] = mid - .5*minsize;\n\t\t\t\tmax[d] = mid + .5*minsize;\n\t\t\t} else {\n\t\t\t\tmin[d] -= .5*gap[d];\n\t\t\t\tmax[d] += .5*gap[d];\n\t\t\t}\n\t\t}\n\t\trs[i++] = new Rectangle(min[X], max[X],\n\t\t\t\t\tmin[Y], max[Y]);\n\t}\n\tremoveRectangleOverlap(rs, n, 0.0, 0.0);\n\ti=0;\n\tfor (std::list<SPItem *>::iterator it(selected.begin());\n\t\tit != selected.end();\n\t\t++it)\n\t{\n\t\tNR::Rect const item_box(sp_item_bbox_desktop(*it));\n\t\tRectangle *r = rs[i++];\n\t\tNR::Point const curr(item_box.midpoint());\n\t\tNR::Point const dest(r->getCentreX(),\n\t\t\t\t     r->getCentreY());\n\t\tsp_item_move_rel(*it, NR::translate(dest - curr));\n\t\tdelete r;\n\t}\n\tdelete [] rs;\n}\n"
  },
  {
    "path": "experimental/solve_VPSC/libvpsc/removeoverlap.h",
    "content": "/**\n * \\brief Remove overlaps function\n *\n * Authors:\n *   Tim Dwyer <tgdwyer@gmail.com>\n *\n * Copyright (C) 2005 Authors\n *\n * Released under GNU LGPL.  Read the file 'COPYING' for more information.\n */\n\n#ifndef SEEN_REMOVEOVERLAP_H\n#define SEEN_REMOVEOVERLAP_H\n\nvoid removeoverlap(GSList const *items, double xGap, double yGap);\n\n#endif // SEEN_REMOVEOVERLAP_H\n"
  },
  {
    "path": "experimental/solve_VPSC/libvpsc/solve_VPSC.cpp",
    "content": "/**\n * \\brief Solve an instance of the \"Variable Placement with Separation\n * Constraints\" problem.\n *\n * Authors:\n *   Tim Dwyer <tgdwyer@gmail.com>\n *\n * Copyright (C) 2005 Authors\n *\n * Released under GNU LGPL.  Read the file 'COPYING' for more information.\n */\n\n#include <cassert>\n#include \"constraint.h\"\n#include \"block.h\"\n#include \"blocks.h\"\n#include \"solve_VPSC.h\"\n#include <math.h>\n#include <sstream>\n#ifdef RECTANGLE_OVERLAP_LOGGING\n#include <fstream>\nusing std::ios;\nusing std::ofstream;\nusing std::endl;\n#endif\n\nusing std::ostringstream;\nusing std::list;\nusing std::set;\n\nstatic const double ZERO_UPPERBOUND=-0.0000001;\n\nIncVPSC::IncVPSC(const unsigned n, Variable* const vs[], const unsigned m, Constraint *cs[]) \n\t: VPSC(n,vs,m,cs) {\n\tinactive.assign(cs,cs+m);\n\tfor(ConstraintList::iterator i=inactive.begin();i!=inactive.end();++i) {\n\t\t(*i)->active=false;\n\t}\n}\nVPSC::VPSC(const unsigned n, Variable* const vs[], const unsigned m, Constraint *cs[]) : m(m), cs(cs), n(n), vs(vs) {\n\tbs=new Blocks(n, vs);\n#ifdef RECTANGLE_OVERLAP_LOGGING\n\tprintBlocks();\n\tassert(!constraintGraphIsCyclic(n,vs));\n#endif\n}\nVPSC::~VPSC() {\n\tdelete bs;\n}\n\n// useful in debugging\nvoid VPSC::printBlocks() {\n#ifdef RECTANGLE_OVERLAP_LOGGING\n\tofstream f(LOGFILE,ios::app);\n\tfor(set<Block*>::iterator i=bs->begin();i!=bs->end();++i) {\n\t\tBlock *b=*i;\n\t\tf<<\"  \"<<*b<<endl;\n\t}\n\tfor(unsigned i=0;i<m;i++) {\n\t\tf<<\"  \"<<*cs[i]<<endl;\n\t}\n#endif\n}\n/**\n* Produces a feasible - though not necessarily optimal - solution by\n* examining blocks in the partial order defined by the directed acyclic\n* graph of constraints. For each block (when processing left to right) we\n* maintain the invariant that all constraints to the left of the block\n* (incoming constraints) are satisfied. This is done by repeatedly merging\n* blocks into bigger blocks across violated constraints (most violated\n* first) fixing the position of variables inside blocks relative to one\n* another so that constraints internal to the block are satisfied.\n*/\nvoid VPSC::satisfy() {\n\tlist<Variable*> *vs=bs->totalOrder();\n\tfor(list<Variable*>::iterator i=vs->begin();i!=vs->end();++i) {\n\t\tVariable *v=*i;\n\t\tif(!v->block->deleted) {\n\t\t\tbs->mergeLeft(v->block);\n\t\t}\n\t}\n\tbs->cleanup();\n\tfor(unsigned i=0;i<m;i++) {\n\t\tif(cs[i]->slack() < ZERO_UPPERBOUND) {\n#ifdef RECTANGLE_OVERLAP_LOGGING\n\t\t\tofstream f(LOGFILE,ios::app);\n\t\t\tf<<\"Error: Unsatisfied constraint: \"<<*cs[i]<<endl;\n#endif\n\t\t\t//assert(cs[i]->slack()>-0.0000001);\n\t\t\tthrow \"Unsatisfied constraint\";\n\t\t}\n\t}\n\tdelete vs;\n}\n\nvoid VPSC::refine() {\n\tbool solved=false;\n\t// Solve shouldn't loop indefinately\n\t// ... but just to make sure we limit the number of iterations\n\tunsigned maxtries=100;\n\twhile(!solved&&maxtries>=0) {\n\t\tsolved=true;\n\t\tmaxtries--;\n\t\tfor(set<Block*>::const_iterator i=bs->begin();i!=bs->end();++i) {\n\t\t\tBlock *b=*i;\n\t\t\tb->setUpInConstraints();\n\t\t\tb->setUpOutConstraints();\n\t\t}\n\t\tfor(set<Block*>::const_iterator i=bs->begin();i!=bs->end();++i) {\n\t\t\tBlock *b=*i;\n\t\t\tConstraint *c=b->findMinLM();\n\t\t\tif(c!=NULL && c->lm<0) {\n#ifdef RECTANGLE_OVERLAP_LOGGING\n\t\t\t\tofstream f(LOGFILE,ios::app);\n\t\t\t\tf<<\"Split on constraint: \"<<*c<<endl;\n#endif\n\t\t\t\t// Split on c\n\t\t\t\tBlock *l=NULL, *r=NULL;\n\t\t\t\tbs->split(b,l,r,c);\n\t\t\t\tbs->cleanup();\n\t\t\t\t// split alters the block set so we have to restart\n\t\t\t\tsolved=false;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\tfor(unsigned i=0;i<m;i++) {\n\t\tif(cs[i]->slack() < ZERO_UPPERBOUND) {\n\t\t\tassert(cs[i]->slack()>ZERO_UPPERBOUND);\n\t\t\tthrow \"Unsatisfied constraint\";\n\t\t}\n\t}\n}\n/**\n * Calculate the optimal solution. After using satisfy() to produce a\n * feasible solution, refine() examines each block to see if further\n * refinement is possible by splitting the block. This is done repeatedly\n * until no further improvement is possible.\n */\nvoid VPSC::solve() {\n\tsatisfy();\n\trefine();\n}\n\nvoid IncVPSC::solve() {\n#ifdef RECTANGLE_OVERLAP_LOGGING\n\tofstream f(LOGFILE,ios::app);\n\tf<<\"solve_inc()...\"<<endl;\n#endif\n\tdouble lastcost,cost = bs->cost();\n\tdo {\n\t\tlastcost=cost;\n\t\tsatisfy();\n\t\tsplitBlocks();\n\t\tcost = bs->cost();\n#ifdef RECTANGLE_OVERLAP_LOGGING\n\tf<<\"  cost=\"<<cost<<endl;\n#endif\n\t} while(fabs(lastcost-cost)>0.0001);\n}\n/**\n * incremental version of satisfy that allows refinement after blocks are\n * moved.\n *\n *  - move blocks to new positions\n *  - repeatedly merge across most violated constraint until no more\n *    violated constraints exist\n *\n * Note: there is a special case to handle when the most violated constraint\n * is between two variables in the same block.  Then, we must split the block\n * over an active constraint between the two variables.  We choose the \n * constraint with the most negative lagrangian multiplier. \n */\nvoid IncVPSC::satisfy() {\n#ifdef RECTANGLE_OVERLAP_LOGGING\n\tofstream f(LOGFILE,ios::app);\n\tf<<\"satisfy_inc()...\"<<endl;\n#endif\n\tsplitBlocks();\n\tlong splitCtr = 0;\n\tConstraint* v = NULL;\n\twhile((v=mostViolated(inactive))&&(v->equality || v->slack() < ZERO_UPPERBOUND)) {\n\t\tassert(!v->active);\n\t\tBlock *lb = v->left->block, *rb = v->right->block;\n\t\tif(lb != rb) {\n\t\t\tlb->merge(rb,v);\n\t\t} else {\n\t\t\tif(splitCtr++>10000) {\n\t\t\t\tthrow \"Cycle Error!\";\n\t\t\t}\n\t\t\t// constraint is within block, need to split first\n\t\t\tinactive.push_back(lb->splitBetween(v->left,v->right,lb,rb));\n\t\t\tlb->merge(rb,v);\n\t\t\tbs->insert(lb);\n\t\t}\n\t}\n#ifdef RECTANGLE_OVERLAP_LOGGING\n\tf<<\"  finished merges.\"<<endl;\n#endif\n\tbs->cleanup();\n\tfor(unsigned i=0;i<m;i++) {\n\t\tv=cs[i];\n\t\tif(v->slack() < ZERO_UPPERBOUND) {\n\t\t\tostringstream s;\n\t\t\ts<<\"Unsatisfied constraint: \"<<*v;\n#ifdef RECTANGLE_OVERLAP_LOGGING\n\t\t\tofstream f(LOGFILE,ios::app);\n\t\t\tf<<s.str()<<endl;\n#endif\n\t\t\tthrow s.str().c_str();\n\t\t}\n\t}\n#ifdef RECTANGLE_OVERLAP_LOGGING\n\tf<<\"  finished cleanup.\"<<endl;\n\tprintBlocks();\n#endif\n}\nvoid IncVPSC::moveBlocks() {\n#ifdef RECTANGLE_OVERLAP_LOGGING\n\tofstream f(LOGFILE,ios::app);\n\tf<<\"moveBlocks()...\"<<endl;\n#endif\n\tfor(set<Block*>::const_iterator i(bs->begin());i!=bs->end();++i) {\n\t\tBlock *b = *i;\n\t\tb->wposn = b->desiredWeightedPosition();\n\t\tb->posn = b->wposn / b->weight;\n\t}\n#ifdef RECTANGLE_OVERLAP_LOGGING\n\tf<<\"  moved blocks.\"<<endl;\n#endif\n}\nvoid IncVPSC::splitBlocks() {\n#ifdef RECTANGLE_OVERLAP_LOGGING\n\tofstream f(LOGFILE,ios::app);\n#endif\n\tmoveBlocks();\n\tsplitCnt=0;\n\t// Split each block if necessary on min LM\n\tfor(set<Block*>::const_iterator i(bs->begin());i!=bs->end();++i) {\n\t\tBlock* b = *i;\n\t\tConstraint* v=b->findMinLM();\n\t\tif(v!=NULL && v->lm < ZERO_UPPERBOUND) {\n\t\t\tassert(!v->equality);\n#ifdef RECTANGLE_OVERLAP_LOGGING\n\t\t\tf<<\"    found split point: \"<<*v<<\" lm=\"<<v->lm<<endl;\n#endif\n\t\t\tsplitCnt++;\n\t\t\tBlock *b = v->left->block, *l=NULL, *r=NULL;\n\t\t\tassert(v->left->block == v->right->block);\n\t\t\tdouble pos = b->posn;\n\t\t\tb->split(l,r,v);\n\t\t\tl->posn=r->posn=pos;\n\t\t\tl->wposn = l->posn * l->weight;\n\t\t\tr->wposn = r->posn * r->weight;\n\t\t\tbs->insert(l);\n\t\t\tbs->insert(r);\n\t\t\tb->deleted=true;\n\t\t\tinactive.push_back(v);\n#ifdef RECTANGLE_OVERLAP_LOGGING\n\t\t\tf<<\"  new blocks: \"<<*l<<\" and \"<<*r<<endl;\n#endif\n\t\t}\n\t}\n#ifdef RECTANGLE_OVERLAP_LOGGING\n\tf<<\"  finished splits.\"<<endl;\n#endif\n\tbs->cleanup();\n}\n\n/**\n * Scan constraint list for the most violated constraint, or the first equality\n * constraint\n */\nConstraint* IncVPSC::mostViolated(ConstraintList &l) {\n\tdouble minSlack = DBL_MAX;\n\tConstraint* v=NULL;\n#ifdef RECTANGLE_OVERLAP_LOGGING\n\tofstream f(LOGFILE,ios::app);\n\tf<<\"Looking for most violated...\"<<endl;\n#endif\n\tConstraintList::iterator end = l.end();\n\tConstraintList::iterator deletePoint = end;\n\tfor(ConstraintList::iterator i=l.begin();i!=end;++i) {\n\t\tConstraint *c=*i;\n\t\tdouble slack = c->slack();\n\t\tif(c->equality || slack < minSlack) {\n\t\t\tminSlack=slack;\t\n\t\t\tv=c;\n\t\t\tdeletePoint=i;\n\t\t\tif(c->equality) break;\n\t\t}\n\t}\n\t// Because the constraint list is not order dependent we just\n\t// move the last element over the deletePoint and resize\n\t// downwards.  There is always at least 1 element in the\n\t// vector because of search.\n\tif(deletePoint != end && (minSlack<ZERO_UPPERBOUND||v->equality)) {\n\t\t*deletePoint = l[l.size()-1];\n\t\tl.resize(l.size()-1);\n\t}\n#ifdef RECTANGLE_OVERLAP_LOGGING\n\tf<<\"  most violated is: \"<<*v<<endl;\n#endif\n\treturn v;\n}\n\n#include <map>\nusing std::map;\nusing std::vector;\nstruct node {\n\tset<node*> in;\n\tset<node*> out;\n};\n// useful in debugging - cycles would be BAD\nbool VPSC::constraintGraphIsCyclic(const unsigned n, Variable *vs[]) {\n\tmap<Variable*, node*> varmap;\n\tvector<node*> graph;\n\tfor(unsigned i=0;i<n;i++) {\n\t\tnode *u=new node;\n\t\tgraph.push_back(u);\n\t\tvarmap[vs[i]]=u;\n\t}\n\tfor(unsigned i=0;i<n;i++) {\n\t\tfor(vector<Constraint*>::iterator c=vs[i]->in.begin();c!=vs[i]->in.end();++c) {\n\t\t\tVariable *l=(*c)->left;\n\t\t\tvarmap[vs[i]]->in.insert(varmap[l]);\n\t\t}\n\n\t\tfor(vector<Constraint*>::iterator c=vs[i]->out.begin();c!=vs[i]->out.end();++c) {\n\t\t\tVariable *r=(*c)->right;\n\t\t\tvarmap[vs[i]]->out.insert(varmap[r]);\n\t\t}\n\t}\n\twhile(graph.size()>0) {\n\t\tnode *u=NULL;\n\t\tvector<node*>::iterator i=graph.begin();\n\t\tfor(;i!=graph.end();++i) {\n\t\t\tu=*i;\n\t\t\tif(u->in.size()==0) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tif(i==graph.end() && graph.size()>0) {\n\t\t\t//cycle found!\n\t\t\treturn true;\n\t\t} else {\n\t\t\tgraph.erase(i);\n\t\t\tfor(set<node*>::iterator j=u->out.begin();j!=u->out.end();++j) {\n\t\t\t\tnode *v=*j;\n\t\t\t\tv->in.erase(u);\n\t\t\t}\n\t\t\tdelete u;\n\t\t}\n\t}\n\tfor(unsigned i=0; i<graph.size(); ++i) {\n\t\tdelete graph[i];\n\t}\n\treturn false;\n}\n\n// useful in debugging - cycles would be BAD\nbool VPSC::blockGraphIsCyclic() {\n\tmap<Block*, node*> bmap;\n\tvector<node*> graph;\n\tfor(set<Block*>::const_iterator i=bs->begin();i!=bs->end();++i) {\n\t\tBlock *b=*i;\n\t\tnode *u=new node;\n\t\tgraph.push_back(u);\n\t\tbmap[b]=u;\n\t}\n\tfor(set<Block*>::const_iterator i=bs->begin();i!=bs->end();++i) {\n\t\tBlock *b=*i;\n\t\tb->setUpInConstraints();\n\t\tConstraint *c=b->findMinInConstraint();\n\t\twhile(c!=NULL) {\n\t\t\tBlock *l=c->left->block;\n\t\t\tbmap[b]->in.insert(bmap[l]);\n\t\t\tb->deleteMinInConstraint();\n\t\t\tc=b->findMinInConstraint();\n\t\t}\n\n\t\tb->setUpOutConstraints();\n\t\tc=b->findMinOutConstraint();\n\t\twhile(c!=NULL) {\n\t\t\tBlock *r=c->right->block;\n\t\t\tbmap[b]->out.insert(bmap[r]);\n\t\t\tb->deleteMinOutConstraint();\n\t\t\tc=b->findMinOutConstraint();\n\t\t}\n\t}\n\twhile(graph.size()>0) {\n\t\tnode *u=NULL;\n\t\tvector<node*>::iterator i=graph.begin();\n\t\tfor(;i!=graph.end();++i) {\n\t\t\tu=*i;\n\t\t\tif(u->in.size()==0) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tif(i==graph.end() && graph.size()>0) {\n\t\t\t//cycle found!\n\t\t\treturn true;\n\t\t} else {\n\t\t\tgraph.erase(i);\n\t\t\tfor(set<node*>::iterator j=u->out.begin();j!=u->out.end();++j) {\n\t\t\t\tnode *v=*j;\n\t\t\t\tv->in.erase(u);\n\t\t\t}\n\t\t\tdelete u;\n\t\t}\n\t}\n\tfor(unsigned i=0; i<graph.size(); i++) {\n\t\tdelete graph[i];\n\t}\n\treturn false;\n}\n\n"
  },
  {
    "path": "experimental/solve_VPSC/libvpsc/solve_VPSC.h",
    "content": "/**\n * \\brief Solve an instance of the \"Variable Placement with Separation\n * Constraints\" problem.\n *\n * Authors:\n *   Tim Dwyer <tgdwyer@gmail.com>\n *\n * Copyright (C) 2005 Authors\n *\n * Released under GNU LGPL.  Read the file 'COPYING' for more information.\n */\n\n//\n// TODO: Really, we should have three classes: VPSC, IncrementalVPSC and\n// StaticVPSC, where the latter two inherit from VPSC.  StaticVPSC would be\n// the equivalent of what is currently VPSC.\n// Also, a lot of the code specific to one or other of these concrete\n// implementations should be moved from Block and Blocks: e.g. mergeLeft etc.\n//\n#ifndef SEEN_REMOVEOVERLAP_SOLVE_VPSC_H\n#define SEEN_REMOVEOVERLAP_SOLVE_VPSC_H\n\n#include <vector>\nclass Variable;\nclass Constraint;\nclass Blocks;\n\n/**\n * Variable Placement with Separation Constraints problem instance\n */\nclass VPSC {\npublic:\n\tvirtual void satisfy();\n\tvirtual void solve();\n\n\tVPSC(const unsigned n, Variable* const vs[], const unsigned m, Constraint *cs[]);\n\tvirtual ~VPSC();\n\tConstraint** getConstraints(unsigned &m) { m=this->m; return cs; }\n\tconst Variable* const * getVariables(unsigned &n) { n=this->n; return vs; }\nprotected:\n\tBlocks *bs;\n\tunsigned m;\n\tConstraint **cs;\n\tunsigned n;\n\tconst Variable* const *vs;\n\tvoid printBlocks();\nprivate:\n\tvoid refine();\n\tbool constraintGraphIsCyclic(const unsigned n, Variable *vs[]);\n\tbool blockGraphIsCyclic();\n};\n\nclass IncVPSC : public VPSC {\npublic:\n\tunsigned splitCnt;\n\tvoid satisfy();\n\tvoid solve();\n\tvoid moveBlocks();\n\tvoid splitBlocks();\n\tIncVPSC(const unsigned n, Variable* const vs[], const unsigned m, Constraint *cs[]);\nprivate:\n\ttypedef std::vector<Constraint*> ConstraintList;\n\tConstraintList inactive;\n\tConstraint* mostViolated(ConstraintList &l);\n};\n#endif // SEEN_REMOVEOVERLAP_SOLVE_VPSC_H\n"
  },
  {
    "path": "experimental/solve_VPSC/libvpsc/variable.cpp",
    "content": "/**\n *\n * Authors:\n *   Tim Dwyer <tgdwyer@gmail.com>\n *\n * Copyright (C) 2005 Authors\n *\n * Released under GNU LGPL.  Read the file 'COPYING' for more information.\n */\n#include \"variable.h\"\nstd::ostream& operator <<(std::ostream &os, const Variable &v) {\n\tos << \"(\" << v.id << \"=\" << v.position() << \")\";\n\treturn os;\n}\n\n"
  },
  {
    "path": "experimental/solve_VPSC/libvpsc/variable.h",
    "content": "/**\n *\n * Authors:\n *   Tim Dwyer <tgdwyer@gmail.com>\n *\n * Copyright (C) 2005 Authors\n *\n * Released under GNU LGPL.  Read the file 'COPYING' for more information.\n */\n#ifndef SEEN_REMOVEOVERLAP_VARIABLE_H\n#define SEEN_REMOVEOVERLAP_VARIABLE_H\n\n#include <vector>\n#include <iostream>\nclass Block;\nclass Constraint;\n#include \"block.h\"\n\ntypedef std::vector<Constraint*> Constraints;\nclass Variable\n{\n\tfriend std::ostream& operator <<(std::ostream &os, const Variable &v);\npublic:\n\tconst int id; // useful in log files\n\tdouble desiredPosition;\n\tconst double weight;\n\tdouble offset;\n\tBlock *block;\n\tbool visited;\n\tConstraints in;\n\tConstraints out;\n\tchar *toString();\n\tinline Variable(const int id, const double desiredPos, const double weight)\n\t\t: id(id)\n\t\t, desiredPosition(desiredPos)\n\t\t, weight(weight)\n\t\t, offset(0)\n\t\t, block(NULL)\n\t\t, visited(false)\n\t{\n\t}\n\tinline double position() const {\n\t\treturn block->posn+offset;\n\t}\n\t//double position() const;\n\t~Variable(void){\n\t\tin.clear();\n\t\tout.clear();\n\t}\n};\n#endif // SEEN_REMOVEOVERLAP_VARIABLE_H\n"
  },
  {
    "path": "experimental/solve_VPSC/tests/Makefile.am",
    "content": "INCLUDES = -I$(top_srcdir)/libvpsc\ncheck_PROGRAMS = rectangleoverlap csolve_VPSC block satisfy_inc\nsatisfy_inc_SOURCES = satisfy_inc.cpp\nsatisfy_inc_LDADD = $(top_srcdir)/libvpsc/libvpsc.la\nblock_SOURCES = block.cpp\nblock_LDADD = $(top_srcdir)/libvpsc/libvpsc.la\nrectangleoverlap_SOURCES = rectangleoverlap.cpp\nrectangleoverlap_LDADD = $(top_srcdir)/libvpsc/libvpsc.la\ncsolve_VPSC_SOURCES = csolve_VPSC.c\ncsolve_VPSC_LDADD = $(top_srcdir)/libvpsc/libvpsc.la\n\nTESTS = csolve_VPSC $(check_PROGRAMS)\n\n"
  },
  {
    "path": "experimental/solve_VPSC/tests/block.cpp",
    "content": "#include <variable.h>\n#include <constraint.h>\n#include <block.h>\n#include <iostream>\nusing namespace std;\n\nvoid test1() {\n\tcout << \"Block test 1...\" << endl;\n\tVariable *a1=new Variable(1,0,1);\n\tVariable *a2=new Variable(2,0,1);\n\tConstraint *c=new Constraint(a1,a2,1);\n\tBlock *b1=new Block(a1);\n\tBlock *b2=new Block(a2);\n\tb1->merge(b2,c);\n\tcout << \"Block: \" << *b1 << endl;\n\ta1->desiredPosition = -1;\n\ta2->desiredPosition = 2;\n\tConstraint *m = b1->findMinLMBetween(a1,a2);\n\tcout << \"Min lm constraint: \" << *m << endl;\n\tassert(c==m);\n\tcout << \"  lm=\" << c->lm << endl;\n\tcout << \"Block test 1... Success!\" << endl;\n}\n\n/*\n * Constraint tree:\n *    \\_/\n *    / \\\n */\nvoid test2() {\n\tcout << \"Block test 2...\" << endl;\n\tVariable *a[]={\n\t\tnew Variable(0,0,1),\n\t\tnew Variable(1,0,1),\n\t\tnew Variable(2,1,1),\n\t\tnew Variable(3,2,1),\n\t\tnew Variable(4,3,1),\n\t\tnew Variable(5,3,1)};\n\tConstraint *c[]={\n\t\tnew Constraint(a[0],a[2],2),\n\t\tnew Constraint(a[1],a[2],2),\n\t\tnew Constraint(a[2],a[3],2),\n\t\tnew Constraint(a[3],a[4],2),\n\t\tnew Constraint(a[3],a[5],2)};\n\tfor(int i=0;i<6;i++) {\n\t\tnew Block(a[i]);\n\t}\n\tfor(int i=0;i<5;i++) {\n\t\tBlock *l=c[i]->left->block, *r=c[i]->right->block;\n\t\tl->merge(r,c[i]);\n\t}\n\tBlock *b=a[0]->block;\n\tcout << \"Block: \" << *b << endl;\n\tfor(int i=0;i<6;i++) {\n\t\t\ta[i]->desiredPosition = i!=4?-2:5;\n\t}\n\tcout << \"calc min lm:\" << endl;\n\tConstraint *m = b->findMinLMBetween(a[0],a[4]);\n\tcout << \"Min lm constraint: \" << *m << endl;\n\tassert(m==c[3]);\n\tcout << \"Block test 2... Success!\" << endl;\n}\nint main() {\n\ttest1();\n\ttest2();\n\treturn 0;\n}\n"
  },
  {
    "path": "experimental/solve_VPSC/tests/csolve_VPSC.c",
    "content": "#include <stdio.h>\n#include <malloc.h>\n#include \"csolve_VPSC.h\"\n\nint main(int argc, char **argv) {\n\tVariable* v1 = newVariable(1, 1.0, 1.0);\n\tVariable* v2 = newVariable(1, 2.0, 1.0);\n\tConstraint* c = newConstraint(v1,v2,2.0);\n\tint n=2, m=1, i;\n\tVariable** vs = (Variable**)malloc(n*sizeof(Variable*));\n\tConstraint** cs = (Constraint**)malloc(m*sizeof(Constraint*));\n\tvs[0]=v1;\n\tvs[1]=v2;\n\tcs[0]=c;\n\tVPSC* vpsc = newIncVPSC(n,vs,m,cs);\n\tsatisfyVPSC(vpsc);\n\tsplitIncVPSC(vpsc);\n\tprintf(\"v=%f,%f\\n\",getVariablePos(v1),getVariablePos(v2));\n\tfor(i=0;i<n;i++) {\n\t\tfree(vs[i]);\n\t}\n\tfree(vs);\n\tfor(i=0;i<m;i++) {\n\t\tfree(cs[i]);\n\t}\n\tfree(cs);\n\tdeleteVPSC(vpsc);\n\treturn 0;\n}\n"
  },
  {
    "path": "experimental/solve_VPSC/tests/rectangleoverlap.cpp",
    "content": "#include <iostream>\n#include <cassert>\n#include <math.h>\n#include <time.h>\n#include <generate-constraints.h>\n#include <variable.h>\n#include <constraint.h>\n#include <solve_VPSC.h>\n#define EXTRA_GAP 0.0001\nusing namespace std;\nvoid removeoverlaps(int n, Rectangle **rs) {\n\tdouble xBorder=0, yBorder=0;\n\tassert(0 <= n);\n\ttry {\n\t\t// The extra gap avoids numerical imprecision problems\n\t\tRectangle::setXBorder(xBorder+EXTRA_GAP);\n\t\tRectangle::setYBorder(yBorder+EXTRA_GAP);\n\t\tVariable **vs=new Variable*[n];\n\t\tfor(int i=0;i<n;i++) {\n\t\t\tvs[i]=new Variable(i,0,1);\n\t\t}\n\t\tConstraint **cs;\n\t\tdouble *oldX = new double[n];\n\t\tint m=generateXConstraints(n,rs,vs,cs,true);\n\t\tfor(int i=0;i<n;i++) {\n\t\t\toldX[i]=vs[i]->desiredPosition;\n\t\t}\n\t\tIncVPSC vpsc_x(n,vs,m,cs);\n\t\tvpsc_x.solve();\n\t\tfor(int i=0;i<n;i++) {\n\t\t\trs[i]->moveCentreX(vs[i]->position());\n\t\t}\n\t\tfor(int i = 0; i < m; ++i) {\n\t\t\tdelete cs[i];\n\t\t}\n\t\tdelete [] cs;\n\t\t// Removing the extra gap here ensures things that were moved to be adjacent to\n\t\t// one another above are not considered overlapping\n\t\tRectangle::setXBorder(Rectangle::xBorder-EXTRA_GAP);\n\t\tm=generateYConstraints(n,rs,vs,cs);\n\t\tIncVPSC vpsc_y(n,vs,m,cs);\n\t\tvpsc_y.solve();\n\t\tfor(int i=0;i<n;i++) {\n\t\t\trs[i]->moveCentreY(vs[i]->position());\n\t\t\trs[i]->moveCentreX(oldX[i]);\n\t\t}\n\t\tdelete [] oldX;\n\t\tfor(int i = 0; i < m; ++i) {\n\t\t\tdelete cs[i];\n\t\t}\n\t\tdelete [] cs;\n\t\tRectangle::setYBorder(Rectangle::yBorder-EXTRA_GAP);\n\t\tm=generateXConstraints(n,rs,vs,cs,false);\n\t\tIncVPSC vpsc_x2(n,vs,m,cs);\n\t\tvpsc_x2.solve();\n\t\tfor(int i = 0; i < m; ++i) {\n\t\t\tdelete cs[i];\n\t\t}\n\t\tdelete [] cs;\n\t\tfor(int i=0;i<n;i++) {\n\t\t\trs[i]->moveCentreX(vs[i]->position());\n\t\t\tdelete vs[i];\n\t\t}\n\t\tdelete [] vs;\n\t} catch (char *str) {\n\t\tstd::cerr<<str<<std::endl;\n\t\tfor(int i=0;i<n;i++) {\n\t\t\tstd::cerr << *rs[i]<<std::endl;\n\t\t}\n\t}\n}\nunsigned countOverlaps(Rectangle **rs, unsigned n) {\n\tunsigned overlaps=0;\n\tfor(unsigned i=0;i<n-1;i++) {\n\t\tfor(unsigned j=i+1;j<n;j++) {\n\t\t\tif(rs[i]->overlapX(rs[j])>EXTRA_GAP&&rs[i]->overlapY(rs[j])>EXTRA_GAP) {\n\t\t\t\t/*\n\t\t\t\tcout << \"Overlap found between: \" << endl;\n\t\t\t\tcout << \"    \" << *rs[i] << endl;\n\t\t\t\tcout << \"    \" << *rs[j] << endl;\n\t\t\t\t*/\n\t\t\t\toverlaps++;\n\t\t\t}\n\t\t}\n\t}\n\treturn overlaps;\n}\ninline double getRand(double range) {\n\treturn range*rand()/RAND_MAX;\n}\nRectangle **generateRandomRects(unsigned n) {\n\tRectangle **rs=new Rectangle*[n];\n\tdouble const rect_size = 5;\n\tdouble const fld_size = sqrt(rect_size * n / 2.0);\n\tdouble coords[4];\n\tfor (unsigned i = 0; i < n; ++i) {\n\t\tfor (unsigned d = 0; d < 2; ++d) {\n\t\t\t//unsigned const end = 1 + (rand() % (fld_size - 1));\n\t\t\t//unsigned const start = rand() % end;\n\t\t\tdouble const start = getRand(fld_size);\n\t\t\tdouble const end = start + getRand(rect_size);\n\t\t\tcoords[2 * d] = start;\n\t\t\tcoords[2 * d + 1] = end;\n\t\t} \n\t\trs[i]=new Rectangle(coords[0],coords[1],coords[2],coords[3]);\n\t}\n\t//double k = (double)countOverlaps(rs,n)/n;\n\t//cout << \"    k=\"<< k << endl;\n\treturn rs;\n}\nRectangle **generateRects(double coords[][4], unsigned n) {\n\tRectangle **rs=new Rectangle*[n];\n\tfor (unsigned i = 0; i < n; ++i) {\n\t\trs[i]=new Rectangle(coords[i][0],coords[i][1],coords[i][2],coords[i][3]);\n\t}\n\treturn rs;\n}\nvoid test(Rectangle **rs, unsigned n, double &cost, double &duration) {\n\tRectangle **ors=new Rectangle*[n];\n\tdouble const rect_size = 5;\n\tdouble const fld_size = sqrt(rect_size * n / 2.0);\n\tfor (unsigned i = 0; i < n; ++i) {\n\t\tors[i]=new Rectangle(rs[i]->getMinX(),rs[i]->getMaxX(),rs[i]->getMinY(),rs[i]->getMaxY());\n\t}\n\n\tclock_t starttime = clock();\n\tremoveoverlaps(n,rs);\n\tduration = (double)(clock() - starttime)/CLOCKS_PER_SEC;\n\t/*\n\tif(countOverlaps(rs,n)!=0){\n\t\tstd::cerr<<\"************FAIL**************\"<<std::endl;\n\t\tfor(unsigned i=0;i<n;i++) {\n\t\t\tstd::cerr << *ors[i]<<std::endl;\n\t\t}\n\t\texit(1);\n\t}\n\t*/\n\tcost = 0;\n\tfor(unsigned i=0;i<n;i++) {\n\t\tdouble dx=rs[i]->getCentreX()-ors[i]->getCentreX();\n\t\tdouble dy=rs[i]->getCentreY()-ors[i]->getCentreY();\n\t\tcost+=sqrt(dx*dx+dy*dy);\n\t\tdelete rs[i];\n\t\tdelete ors[i];\n\t}\n\tdelete [] rs;\n\tdelete [] ors;\n}\ndouble test1[][4]={ { 0, 50, 0, 30 }, { 10, 20, 10, 29 },\n{ 30, 70, 39, 70 }, { 0, 90, 40, 50 }, { 30, 70, 1, 29 } };\nunsigned n1=5;\ndouble test2[][4]={ { 7, 22, 39, 54 }, { 7, 33, 0, 59 },\n{ 3, 26, 16, 56 }, { 7, 17, 18, 20 }, { 1, 59, 11, 26 },\n{ 19, 20, 13, 49 }, { 1, 10, 0, 4 }, { 47, 52, 1, 3 } };\nunsigned n2=8;\ndouble test3[][4]={ { 8, 32, 29, 36 }, { 19, 24, 2, 27 },\n{ 4, 5, 27, 55 }, { 6, 7, 13, 26 }, { 3, 39, 46, 62 },\n{ 6, 23, 2, 19 }, { 18, 39, 5, 23 }, { 35, 63, 42, 78 },\n{ 16, 18, 14, 72 }, { 12, 32, 10, 58 } };\nunsigned n3=10;\ndouble test4[][4]={ { 315.755, 355.288, 353.595, 449.627 },\n{ 395.048, 395.635, 253.943, 362.228 },\n{ 254.439, 393.289, 278.708, 286.346 },\n{ 209.852, 370.831, 326.496, 507.255 },\n{ 271.947, 415.74, 362.228, 450.318 },\n{ 293.408, 405.197, 220.61, 244.119 },\n{ 276.482, 386.472, 286.346, 435.767 },\n{ 268.211, 436.23, 192.807, 220.61 },\n{ 378.008, 502.118, 358.437, 475.587 },\n{ 340.68, 472.597, 249.492, 335.448 } };\nunsigned n4=10;\ndouble test5[][4]={ { 7, 22, 39, 54 }, { 7, 33, 0, 59 },\n{ 3, 26, 16, 56 }, { 7, 17, 18, 20 }, { 1, 59, 11, 26 },\n{ 19, 20, 13, 49 }, { 1, 10, 0, 4 }, { 47, 52, 1, 3 } };\nunsigned n5=8;\ndouble test6[][4]={ { 40, 69, 63, 69 }, { 1, 5, 27, 64 },\n{ 34, 66, 20, 22 }, { 1, 24, 10, 25 }, { 1, 19, 9, 61 },\n{ 0, 56, 8, 70 }, { 33, 35, 13, 28 }, { 11, 31, 33, 35 },\n{ 12, 22, 3, 23 } };\nunsigned n6=9;\ndouble test7[][4]={\t{ 341.594, 388.459, 373.491, 518.168 },\n{ 271.214, 324.782, 311.332, 409.166 },\n{ 293.848, 475.064, 305.194, 391.162 },\n{ 255.317, 447.738, 342.671, 489.923 },\n{ 228.375, 261.057, 206.422, 327.794 },\n{ 383.552, 462.834, 363.132, 412.843 },\n{ 288.859, 481.054, 351.895, 497.728 },\n{ 201.307, 368.511, 387.02, 394.95 },\n{ 257.961, 259.673, 386.503, 518.403 },\n{ 200.178, 275.606, 364.968, 466.787 } };\t\nunsigned n7=10;\ndouble test8[][4]={{12.807,15.7566,14.9478,16.7924},\n{7.76228,11.6532,4.75249,4.75249},\n{7.84596,10.1387,15.465,16.7709},\n{1.80748,3.0357,5.9983,6.16279},\n{6.46447,7.47249,12.8694,13.4378},\n{14.0026,17.3342,5.10141,9.81088},\n{6.84223,6.85932,6.40395,9.21135},\n{7.63462,10.3552,6.78124,8.59953},\n{0.26429,2.80847,14.5724,17.7455},\n{14.7686,15.7148,3.46036,5.66776},\n{10.635,11.4893,12.5044,16.941},\n{6.32027,10.7117,14.2953,15.6276},\n{11.9942,13.1118,10.6893,11.4477},\n{11.9384,15.1357,2.20982,6.92982},\n{2.89395,4.29002,11.7058,16.2896},\n{9.44116,12.7547,9.75556,11.1811},\n{5.2475,8.00607,15.3652,17.026},\n{2.09541,3.76981,2.5526,3.16739},\n{3.14595,6.66351,10.3007,14.4881},\n{4.88109,9.38044,9.02416,10.2954},\n{7.55378,9.14715,13.9686,16.0468},\n{1.70299,5.42198,14.1913,14.2191},\n{14.4877,14.4897,6.14013,8.50074},\n{12.9909,14.5163,10.322,12.4457},\n{11.616,12.0848,3.7601,5.45419},\n{10.3087,13.358,3.04666,3.53389},\n{2.28263,2.44881,13.806,15.8206},\n{3.31805,5.47662,3.91187,6.85355},\n{0.484138,2.06164,3.57335,7.87753},\n{4.73784,5.12359,9.383,11.9217},\n{12.2921,12.7769,12.329,12.8139},\n{12.7351,16.7141,12.7658,13.78},\n{3.71614,5.79872,1.53137,4.97126},\n{10.7423,14.8183,2.57104,2.94168},\n{9.93995,10.1557,1.3432,1.499},\n{0.198099,0.204966,9.29459,11.8795},\n{14.1043,18.8473,11.2028,14.1971},\n{4.23857,4.95743,14.7047,17.1439},\n{13.936,15.9612,10.7744,14.8598},\n{11.355,15.6824,2.49113,5.96963},\n{12.8528,16.3913,3.82582,6.67259},\n{13.9445,14.7354,10.8576,12.9503},\n{13.0041,15.6166,2.07035,3.70034},\n{2.31809,5.03195,1.13659,5.8604},\n{10.2454,14.5396,10.9442,15.4321},\n{7.12259,11.3929,7.20864,10.4059},\n{6.54862,9.88399,1.82828,5.89899},\n{4.27072,7.52613,7.99016,11.1703},\n{8.84828,9.15453,10.1489,11.7934},\n{7.71027,8.97206,3.26462,4.02636},\n{14.3383,15.1727,3.02586,3.26268},\n{9.21233,11.1919,13.9814,16.1433},\n{13.1946,16.1613,12.2268,13.1319},\n{13.0462,15.6689,7.03513,8.59752},\n{8.72724,11.3859,5.69193,7.8238},\n{10.6241,14.1033,7.88946,9.95327},\n{8.48376,10.8714,8.86955,11.2137},\n{3.55633,4.14351,13.7308,18.4988},\n{1.79802,4.68843,11.0964,11.6543},\n{13.1535,14.6895,1.52144,2.50643},\n{1.24533,4.27261,13.345,13.4925},\n{14.4031,18.7944,15.4447,18.0096},\n{8.56933,11.3392,0.446787,1.18762},\n{11.311,16.0574,8.41,8.76508},\n{13.5332,17.8479,8.2067,11.4446},\n{5.73826,6.63581,10.8364,11.6186},\n{10.1995,11.5202,6.54248,9.49804},\n{14.6456,16.7915,7.01621,7.57531},\n{15.1444,16.4184,1.45761,2.35577},\n{11.8169,12.0382,14.8149,19.3316},\n{10.148,11.1227,15.0087,18.1595},\n{10.9498,14.7849,12.3852,13.9467},\n{10.7631,10.9141,5.24419,8.64319},\n{11.2486,12.6029,6.25029,10.0076},\n{12.8731,16.0703,4.96619,8.54006},\n{6.92828,8.53172,8.36509,11.8971},\n{3.1677,7.20423,14.5582,17.1794},\n{14.1426,16.9327,15.1198,19.1306},\n{2.52943,6.64027,5.18935,8.58545},\n{6.89613,11.4515,3.7672,6.23813},\n{2.91428,6.40636,1.4231,4.10552},\n{9.81892,12.9687,8.25114,10.1775},\n{14.6192,14.7412,10.8349,15.1725},\n{6.96657,11.7009,11.0638,11.8966},\n{7.03182,9.20687,2.04293,2.60462},\n{7.47955,9.28533,7.45213,8.37318},\n{6.24651,9.79246,8.61803,9.91034},\n{4.73642,7.48461,9.59481,12.748},\n{8.70644,11.1702,2.54172,4.26587},\n{14.9028,19.4109,6.238,8.04256},\n{5.22907,8.45899,1.98714,4.94042},\n{8.96884,12.3636,1.72663,3.39844},\n{6.96563,8.04735,10.6198,11.3663},\n{1.65099,5.65883,10.5002,13.9039},\n{11.3337,11.5138,5.31369,7.75029},\n{2.79561,4.08151,7.04269,9.00167}};\n\nunsigned n8=96;\ndouble test9[][4]={{2.67865,4.81342,8.67025,11.5025},\n{5.77912,6.94355,9.80043,12.2904},\n{11.9459,13.8675,3.66967,7.38408},\n{6.72663,8.30474,3.37566,7.24571},\n{9.2081,10.9827,10.9557,11.8868},\n{0.161903,3.31202,3.35371,3.84933},\n{4.46508,9.18934,9.43037,10.9125},\n{3.84059,5.2565,8.66868,8.70713},\n{4.67598,5.15207,5.2252,8.92099},\n{1.19252,1.31215,7.97481,8.27191},\n{4.57641,5.71063,0.440628,4.17365},\n{6.80268,11.5523,3.78375,4.79819},\n{11.2172,13.7652,8.44876,11.1649},\n{11.4673,13.1644,6.09156,7.41026},\n{12.2995,13.585,0.155239,4.63887},\n{12.3513,15.3947,8.3437,11.1337},\n{3.92566,6.15611,12.432,16.3993},\n{12.6351,14.6039,9.96391,13.1152},\n{0.682894,2.48867,7.66904,8.86704},\n{3.50189,7.28939,8.37741,8.96276},\n{2.37719,4.19762,11.1129,12.0465},\n{5.53568,8.1444,11.9056,15.5818},\n{7.32876,11.2713,12.1655,15.0785},\n{2.534,6.15563,9.30845,11.2833},\n{8.00852,12.8051,2.16786,4.90262},\n{11.8095,12.814,11.5818,13.7731},\n{7.54398,9.23043,7.36953,10.7315},\n{8.36918,9.83071,11.8668,11.8776},\n{5.72267,9.66642,1.46379,3.71362},\n{11.2725,14.6538,4.76772,7.30304},\n{5.8638,10.7623,5.99865,10.0994},\n{11.0224,12.6455,0.852638,2.20201},\n{4.03151,8.51056,6.12449,10.3672},\n{7.75136,10.6782,10.648,11.8606},\n{11.9663,14.3993,2.83154,5.46437},\n{6.05275,8.00044,10.9675,15.3426},\n{10.9702,13.146,8.98465,12.4718},\n{4.99665,7.91376,9.19241,9.71153},\n{3.7422,4.00542,2.00556,2.53918},\n{9.01679,10.9439,12.8107,15.1367},\n{10.0117,11.5009,0.194049,3.08568},\n{8.29117,13.1323,6.99045,8.65707},\n{5.97395,10.5816,5.77559,7.35126},\n{5.68856,6.51699,4.40392,5.82242},\n{0.209729,3.89072,7.36013,8.98447},\n{0.360264,1.88558,0.319886,3.22738},\n{2.02163,2.07428,3.2753,8.12958},\n{5.05075,5.86987,12.7958,16.7689},\n{10.6484,15.5931,7.23546,10.4741},\n{7.20998,7.46939,2.44384,5.10459},\n{12.5022,15.1819,10.6593,13.5708},\n{2.3619,2.45407,5.75168,7.28966},\n{12.131,16.661,4.39608,8.19289},\n{9.81023,10.731,6.67919,9.31523},\n{6.97712,10.166,8.4813,13.3432},\n{6.45378,7.44457,8.96504,11.9806},\n{8.70396,11.5729,7.15588,12.1524},\n{9.93058,14.0306,0.849502,1.80855},\n{8.32174,8.34616,7.52595,12.0431},\n{2.79979,5.93358,4.90296,7.6893},\n{0.72484,5.42439,3.48229,5.77743},\n{6.05275,10.2779,7.4252,7.72184},\n{4.41176,6.91184,11.8809,15.3923},\n{6.50435,8.04432,11.4826,15.3172},\n{12.16,14.3518,1.13763,4.17255},\n{7.82506,10.5124,8.05713,9.03876}};\nunsigned n9=66;\ndouble test10[][4]={{15.9875,18.9768,15.3193,17.9811},\n{16.5669,19.7216,1.05824,1.58667},\n{8.80629,9.88527,9.71101,13.2142},\n{19.568,20.1767,3.28922,8.03561},\n{13.6363,15.6827,12.9329,16.6542},\n{2.32913,3.58085,8.28597,12.6503},\n{6.86597,11.2847,5.9172,10.236},\n{8.57413,11.0048,18.0203,18.4095},\n{7.68828,8.89193,9.52038,12.3945},\n{13.5784,15.499,0.824193,4.7533},\n{5.70392,8.26946,10.1955,12.8184},\n{17.9857,22.6483,14.2013,16.0377},\n{14.7965,16.4222,11.9332,16.5984},\n{20.5111,23.1383,0.355473,0.834461},\n{5.88763,9.2761,8.31995,11.6173},\n{13.8307,16.6334,17.2376,19.8715},\n{7.20005,8.99179,19.0137,23.483},\n{3.67112,6.97933,18.6142,21.1208},\n{0.936183,5.81945,5.11063,7.47703},\n{9.85383,12.4861,7.80027,11.677},\n{8.07584,11.1964,13.8571,17.9736},\n{8.07017,10.0661,8.42816,9.79417},\n{10.8259,11.6232,16.7028,19.3248},\n{18.55,19.3911,17.174,22.0082},\n{1.34073,1.93538,17.9341,20.4509},\n{11.7558,12.1994,0.295703,2.19289},\n{12.4063,13.662,0.965124,5.21391},\n{2.2033,2.85518,16.4455,20.0191},\n{6.3853,9.77239,0.892142,2.17773},\n{0.546736,5.29679,12.1949,15.2469},\n{14.1365,17.5213,14.7027,15.1512},\n{9.46879,11.9145,11.8539,14.4408},\n{8.49611,8.98075,17.1388,17.5066},\n{1.53577,2.52014,0.615943,4.13396},\n{7.12078,9.05901,20.3739,23.44},\n{2.7104,7.09713,16.4442,20.8587},\n{12.9707,14.2845,12.5642,16.2281},\n{13.5086,14.3207,17.7611,20.1056},\n{19.2264,24.1481,2.063,5.27645},\n{15.2016,18.2491,1.10228,3.37286},\n{16.7733,18.1385,2.35807,7.0123},\n{19.8272,21.9464,18.27,22.8376},\n{4.27133,8.48869,19.5925,21.488},\n{19.6951,23.7284,10.5207,11.1889},\n{0.799027,3.61863,1.42504,3.44902},\n{1.31871,5.95584,16.4147,18.2479},\n{19.8398,21.0495,15.2495,15.8842},\n{3.15773,5.76599,11.1562,12.2007},\n{4.61422,4.78559,16.6607,16.9497},\n{11.0064,11.5745,16.521,19.5463},\n{13.3865,15.7969,12.215,14.3112},\n{0.272424,4.59201,7.19502,9.58004},\n{15.6377,16.4926,18.5978,19.0178},\n{1.44957,1.65985,5.24023,10.1284},\n{0.0559948,0.138395,3.75354,4.46554},\n{3.24015,3.86196,12.205,14.0543},\n{2.64686,3.51587,16.1429,16.6103},\n{2.56003,5.14236,5.6624,8.31491},\n{13.7143,16.5806,7.32777,10.6354},\n{15.8994,20.4036,0.171759,0.567584},\n{11.1247,11.5263,7.61341,8.80042},\n{10.7869,11.8353,7.73861,8.39933},\n{16.7563,18.1604,15.6377,20.3633},\n{4.7627,5.87556,0.850618,4.25755},\n{11.2178,15.6734,14.2378,15.9026},\n{2.00323,5.94744,1.78428,4.77571},\n{16.0705,20.0359,9.50528,12.9563},\n{14.9808,18.3586,9.56819,10.8817},\n{13.7005,17.173,10.5755,15.5172},\n{6.24185,6.44174,11.9766,16.0609},\n{14.0767,16.1476,11.9904,14.2274},\n{18.3009,20.9378,0.109473,0.330122},\n{0.395109,4.35458,19.8694,23.5078},\n{17.4949,22.4626,6.16132,10.5268},\n{0.992178,2.11099,18.813,22.5419},\n{8.41369,12.6754,20.0682,22.6},\n{19.5239,23.6359,3.22945,3.81068},\n{6.60361,6.84761,11.8174,12.6899},\n{8.95351,9.96275,11.2373,12.3269},\n{13.8414,17.1229,18.182,20.7568},\n{13.0468,17.4872,16.8349,21.2615},\n{16.6053,17.1026,5.24778,8.1272},\n{1.20043,2.96974,10.1904,13.8153},\n{7.73924,7.74809,1.53703,3.76274},\n{15.0915,18.4866,18.6576,18.9426},\n{10.69,13.9811,6.92511,9.44625},\n{8.66032,12.8382,6.67974,9.08735},\n{3.24707,3.91176,7.21641,8.75134},\n{20.5281,23.518,5.04016,5.38868},\n{8.78238,13.6922,11.9149,12.334},\n{19.1358,19.5264,15.9157,16.8192},\n{4.52551,7.52884,12.1049,16.4566},\n{18.467,22.8957,2.97024,7.48362},\n{17.9618,18.9449,2.7601,4.06645},\n{10.8057,15.3718,7.7254,8.32173},\n{19.6416,21.5781,7.62473,11.5731},\n{5.14712,8.87694,0.495145,1.50088},\n{4.11719,6.22953,3.59814,8.25023},\n{6.34314,9.83141,1.90886,3.52039},\n{11.6041,11.7642,12.6177,16.2647},\n{17.4351,19.786,0.846214,2.85357},\n{7.90974,12.4031,10.5818,10.868},\n{3.33578,5.53021,19.271,22.6137},\n{14.3296,18.1074,3.76864,6.21134},\n{1.39798,4.21194,14.7015,18.9814},\n{13.3463,13.89,4.76333,8.78979},\n{7.78517,12.3834,12.0445,12.1204},\n{1.21553,4.14149,10.9523,11.5827},\n{10.7328,15.0635,11.2248,16.0148},\n{1.89816,6.42421,6.21479,9.51491},\n{5.76369,9.87896,0.471237,2.08597},\n{1.10543,3.50571,6.4243,6.85217},\n{13.4916,16.9187,13.4167,14.751},\n{6.61683,9.79075,4.44435,7.2165},\n{17.5276,21.8159,3.22316,7.12862},\n{8.09408,10.3727,0.167984,1.77021},\n{8.04815,12.6168,7.91666,11.0816},\n{1.32248,2.63905,12.5164,17.4845},\n{7.324,11.7358,9.05354,13.7152},\n{15.0274,18.5751,11.55,13.6444},\n{15.3627,16.1478,19.7391,21.3528},\n{16.5701,19.0741,18.0876,18.9877},\n{19.9719,20.1289,10.2999,14.2899},\n{5.77124,9.49847,20.3551,23.9988},\n{9.4065,13.7029,1.45775,2.17524},\n{8.22117,12.8533,16.9079,17.5996},\n{8.20293,12.4012,15.7691,15.783},\n{9.33037,11.8253,0.286895,2.70091},\n{12.5114,14.6471,11.0241,13.8678},\n{14.6423,15.2091,5.08987,9.29257},\n{10.4729,12.308,1.7717,6.27227},\n{9.65187,11.9638,14.3196,18.937},\n{5.1704,6.94718,18.4884,22.8028},\n{4.66015,8.43071,12.6095,14.2635},\n{19.5384,21.1589,7.47562,10.9592},\n{20.3595,24.407,0.804689,2.94465},\n{0.775119,2.53222,1.35017,2.38185},\n{14.1459,18.0717,13.111,17.3643},\n{15.9535,16.9371,3.47482,6.36462},\n{15.1727,17.7769,13.1324,16.2993},\n{17.2678,19.5719,19.2912,23.3942},\n{14.5832,17.1443,19.2559,24.0751},\n{1.57289,3.42857,7.75497,11.9183},\n{2.63994,5.18274,5.84108,8.64802},\n{7.56056,8.51991,0.284378,0.750091},\n{8.4225,12.0985,13.1443,16.5509},\n{12.4397,13.7349,16.1177,21.0089},\n{18.411,22.1179,12.4302,16.1478},\n{16.7343,19.9381,0.87138,4.38391},\n{0.729191,5.0941,0.4316,3.36382},\n{7.96699,10.079,15.0613,19.489},\n{14.4215,16.2705,13.932,15.6623},\n{9.37756,12.4608,12.8857,16.6014},\n{12.0729,12.5163,2.59841,7.39714},\n{7.52658,11.0203,15.2853,19.805},\n{16.0919,20.3462,13.6464,15.1218},\n{6.17075,10.0034,17.5729,21.8258},\n{8.94533,11.0185,7.98461,12.5047},\n{0.249775,1.8787,2.72361,7.6554},\n{11.5167,11.8826,8.7937,10.8008},\n{14.3038,17.8052,19.0873,20.7193},\n{19.7272,24.1131,5.29434,7.64106},\n{19.7624,20.0966,13.2827,17.354},\n{5.58186,7.99298,3.3987,5.8269},\n{19.7479,20.3262,16.1492,17.465},\n{3.25902,6.3684,17.0948,20.9851},\n{12.7549,14.4322,1.40931,6.02218},\n{12.232,13.2567,0.559319,3.07481},\n{0.138414,4.75571,14.9273,18.2745},\n{6.04241,6.23422,9.62104,10.3701}};\nunsigned n10=170;\ndouble test11[][4]={{2.20847,5.99613,25.7684,29.5065},\n{4.38169,7.14163,-7.79499,-7.42678},\n{17.1816,19.4476,-5.03151,-3.38153},\n{10.6383,11.0169,-0.356332,3.85003},\n{13.3309,15.7634,21.4146,24.0122},\n{17.1354,20.5384,27.9053,29.8839},\n{4.82128,7.88931,4.90792,5.71239},\n{13.1802,14.7891,24.0123,26.5035},\n{9.1468,9.95493,-3.73661,-1.29955},\n{14.4021,17.8989,19.2669,23.5805},\n{3.53936,4.95206,17.2632,19.2913},\n{11.2732,15.3951,10.4298,11.6976},\n{9.82902,13.9892,17.9523,19.9811},\n{10.0265,11.0793,16.4791,17.5196},\n{1.27427,5.64116,7.85316,8.33764},\n{3.70992,7.16293,5.06311,6.98578},\n{9.95501,13.9876,-3.13412,-1.29965},\n{17.6086,21.8963,15.3022,17.9743},\n{2.05607,2.66477,-0.552748,0.286511},\n{12.6971,13.3533,-4.23798,-3.73671},\n{7.7961,11.69,7.35371,11.9837},\n{7.68167,9.93012,1.7933,3.98514},\n{1.2176,2.27018,0.286611,3.17168},\n{4.98578,7.91342,12.8464,16.1781},\n{16.5918,21.3527,4.59687,5.72758},\n{9.12809,9.56481,1.38197,2.061},\n{14.6904,19.1649,-3.38143,-1.21492},\n{11.3046,15.5357,14.6315,17.2819},\n{3.69836,4.52282,5.06311,5.67974},\n{12.2713,13.7058,11.6977,14.6314},\n{0.130993,3.26738,-4.32728,-3.7221},\n{11.4317,12.3544,19.9812,22.2083},\n{10.0298,10.1041,11.1483,12.7055},\n{16.2023,16.7313,1.49517,4.59677},\n{12.4149,15.8265,4.33334,6.45789},\n{17.575,19.9519,12.3124,15.3021},\n{17.0991,22.0233,3.78959,6.02599},\n{3.99216,5.32933,0.583351,0.882127},\n{16.5929,18.003,14.3823,17.6574},\n{13.5273,15.1372,16.4791,20.1285},\n{12.3687,15.2044,6.45799,7.83514},\n{8.04258,9.47375,17.3137,21.5515},\n{7.329,10.9322,7.65703,11.5161},\n{1.98895,2.89459,1.84656,3.17168},\n{0.520521,2.46608,6.71895,10.4866},\n{13.184,16.1474,6.45799,7.30869},\n{2.13915,4.58689,17.2632,19.8192},\n{15.8375,18.2786,15.9558,18.1255},\n{14.7223,16.4109,16.4791,17.3636},\n{4.00206,7.29287,-4.32728,-1.41062},\n{16.6028,18.6157,14.6315,17.1786},\n{3.19495,7.10528,-1.41052,0.583251},\n{1.69626,5.11997,0.326338,1.84646},\n{12.1579,12.759,-0.356332,0.328198},\n{3.51735,7.12098,5.71249,7.85306},\n{0.953512,5.10372,3.17178,5.06301},\n{13.2737,14.3319,18.7924,21.1975},\n{1.46188,5.99876,10.3471,12.8463},\n{8.39195,9.77825,1.66426,2.061},\n{1.81344,5.57851,-3.53802,0.326238},\n{1.31773,2.99152,29.5066,33.3419},\n{5.33625,7.15652,19.4265,19.8527},\n{0.432492,3.44635,7.60608,10.3589},\n{1.60933,2.36115,-1.16144,0.286511},\n{9.27774,10.4284,-1.86525,-1.56998},\n{11.8878,13.7671,-5.11518,-4.23808},\n{10.0073,10.2574,11.282,12.9297},\n{10.5778,11.703,0.629406,0.965262},\n{3.17349,7.96657,16.1782,17.2631},\n{11.2281,13.6998,12.2002,12.4339},\n{13.7166,18.3124,19.2669,21.4145},\n{10.5388,15.0813,0.328298,4.33324},\n{9.05987,12.0136,-1.29945,-0.356432},\n{6.74526,7.05518,-8.26859,-7.79509},\n{17.7736,20.6859,5.72768,8.29825},\n{2.22113,7.1491,21.4284,25.7683},\n{16.1247,17.7842,2.70437,3.3773},\n{8.34023,10.0276,13.9827,18.7779},\n{15.1872,18.2348,17.1787,17.2902},\n{16.5308,17.6299,6.45799,8.71682},\n{5.98601,9.22204,23.2905,26.0581},\n{7.64095,10.7424,18.778,22.0208},\n{15.0585,19.52,17.7993,19.2668},\n{17.646,20.037,0.451228,3.78949},\n{0.0160052,1.94859,4.68464,6.71885},\n{7.29434,9.17489,13.9827,17.3136},\n{17.7896,21.639,6.02609,9.48842},\n{4.43065,8.71164,19.8528,23.2904},\n{16.5231,21.0708,3.3774,4.59677},\n{14.2096,16.0172,17.282,17.9522},\n{8.32648,9.09478,3.98524,7.65693},\n{3.6703,7.6841,0.583351,4.90782},\n{9.90605,10.9591,11.5162,13.1508},\n{14.7669,18.5129,-1.21482,3.3773},\n{3.48104,6.74301,29.5066,30.5551},\n{9.22657,10.4539,-5.59946,-1.29955},\n{8.12181,8.34154,-2.11601,1.66416},\n{4.11375,5.37752,30.5552,34.3283},\n{9.11434,12.5991,8.88212,10.4297},\n{11.3365,14.9133,-8.77796,-4.9549},\n{15.7809,16.0235,-2.30357,0.667869},\n{15.4629,16.7224,4.59687,6.45789},\n{13.3766,16.7042,21.4146,25.1652},\n{7.87643,10.2361,12.8464,13.9826},\n{7.38842,11.7536,11.5162,16.479},\n{5.15799,9.74446,-7.42668,-4.32738},\n{16.0009,16.044,-3.82308,0.667869},\n{15.6318,18.7733,8.71692,11.607},\n{10.7258,12.2305,7.30879,8.88202},\n{8.17133,9.84923,-1.56988,1.38187},\n{3.5179,5.38762,0.583351,5.06301},\n{9.4516,10.8319,22.0209,26.7891},\n{9.94456,11.8221,19.9812,21.2926},\n{5.14479,8.31779,3.92878,7.65693},\n{14.6057,18.2633,0.667969,4.59677},\n{5.62784,8.67939,17.3137,19.4264},\n{10.9244,13.5481,-1.29955,-1.29955},\n{5.76759,6.30746,-3.722,-3.5131},\n{7.13259,9.6258,8.33774,11.5161},\n{1.05144,1.32443,10.359,10.9074},\n{16.4807,19.9127,26.5036,27.9052},\n{5.9629,7.66553,-1.41052,-1.14028},\n{13.6489,16.9728,22.2084,25.5279},\n{2.50777,4.43837,19.8193,21.4283},\n{1.57577,3.7409,15.383,18.2258},\n{17.1816,18.8466,17.2903,17.7992},\n{8.43156,13.0154,-4.9548,-3.13422},\n{1.88827,6.19077,6.98588,10.347},\n{14.73,15.2147,17.9523,18.7923},\n{5.55742,8.69305,2.0611,3.92868}};\t\nunsigned n11=130;\nint main() {\n\tdouble c,t;\n\t/*\n\tcout << \"test1\" << endl;\n\ttest(generateRects(test1,n1),n1,c,t);\n\tcout << \"test2\" << endl;\n\ttest(generateRects(test2,n2),n2,c,t);\n\tcout << \"test3\" << endl;\n\ttest(generateRects(test3,n3),n3,c,t);\n\tcout << \"test4\" << endl;\n\ttest(generateRects(test4,n4),n4,c,t);\n\tcout << \"test5\" << endl;\n\ttest(generateRects(test5,n5),n5,c,t);\n\tcout << \"test6\" << endl;\n\ttest(generateRects(test6,n6),n6,c,t);\n\tcout << \"test7\" << endl;\n\ttest(generateRects(test7,n7),n7,c,t);\n\tcout << \"test8\" << endl;\n\ttest(generateRects(test8,n8),n8,c,t);\n\tcout << \"test9\" << endl;\n\ttest(generateRects(test9,n9),n9,c,t);\n\tcout << \"test10\" << endl;\n\ttest(generateRects(test10,n10),n10,c,t);\n\t\n\tcout << \"test11\" << endl;\n\ttest(generateRects(test11,n11),n11,c,t);\n\t*/\n\t//*/\n\tint max_size=100, repeats=100,step=10; \n\t//srand(time(NULL));\n\tfor(int i=10;i<=max_size;i+=step) {\n\t\t//if(i%5==0) cout << i << endl;\n\t\tdouble disp=0, time=0;\n\t\tfor(int repeat=repeats;repeat--;) {\n\t\t\ttest(generateRandomRects(i),i,c,t);\n\t\t\tdisp+=c;\n\t\t\ttime+=t;\n\t\t}   \n\t\tdisp/=repeats;\n\t\ttime/=repeats;\n\t\tcout << i << \",\" << time << \",\" << disp << endl;\n\t}\n\t//*/\n}\n"
  },
  {
    "path": "experimental/solve_VPSC/tests/satisfy_inc.cpp",
    "content": "#include <variable.h>\n#include <constraint.h>\n#include <solve_VPSC.h>\n#include <algorithm>\n#include <iostream>\n#include <time.h>\n#include <math.h>\nusing namespace std;\n\ninline int getRand(const int range) {\n\treturn (double)range*rand()/(RAND_MAX+1.0);\n}\ninline bool approxEquals(const double a, const double b) {\n\treturn fabs((double)a-b)<0.0001;\n}\ntypedef vector<Constraint*> CS;\n\n// most basic example\nvoid test1() {\n\tcout << \"Test 1...\" << endl;\n\tVariable *a[] = {\n\t\tnew Variable(0,6,1),\n\t\tnew Variable(0,5,1)};\n\tConstraint *c[] = {\n\t\tnew Constraint(a[0],a[1],2)};\n\tIncVPSC vpsc(2,a,1,c);\n\tvpsc.satisfy();\n\tassert(approxEquals(a[0]->position(),4.5));\n\tassert(approxEquals(a[1]->position(),6.5));\n\tcout << \"Test 1... done.\" << endl;\n}\n\n// no splits required\nvoid test2() {\n\tcout << \"Test 2...\" << endl;\n\tVariable *a[] = {\n\t\tnew Variable(0,4,1),\n\t\tnew Variable(1,6,1),\n\t\tnew Variable(2,9,1),\n\t\tnew Variable(3,2,1),\n\t\tnew Variable(4,5,1)};\n\tConstraint *c[] = {\n\t\tnew Constraint(a[0],a[2],3),\n\t\tnew Constraint(a[0],a[3],3),\n\t\tnew Constraint(a[1],a[4],3),\n\t\tnew Constraint(a[2],a[4],3),\n\t\tnew Constraint(a[2],a[3],3),\n\t\tnew Constraint(a[3],a[4],3)};\n\tdouble expected[]={0.5,6,3.5,6.5,9.5};\n\tunsigned int n = sizeof(a)/sizeof(Variable*);\n\tunsigned int m = sizeof(c)/sizeof(Constraint*);\n\tIncVPSC vpsc(n,a,m,c);\n\tvpsc.satisfy();\n\tfor(int i=0;i<n;i++) {\n\t\tassert(approxEquals(a[i]->position(),expected[i]));\n\t}\n\tcout << \"Test 2... done.\" << endl;\n}\n\n// split required - cycles without change in direction check\nvoid test3() {\n\tcout << \"Test 3...\" << endl;\n\tVariable *a[] = {\n\t\tnew Variable(0,5,1),\n\t\tnew Variable(1,6,1),\n\t\tnew Variable(2,7,1),\n\t\tnew Variable(3,4,1),\n\t\tnew Variable(4,3,1)};\n\tConstraint *c[] = {\n\t\tnew Constraint(a[0],a[4],3),\n\t\tnew Constraint(a[1],a[2],3),\n\t\tnew Constraint(a[2],a[3],3),\n\t\tnew Constraint(a[2],a[4],3),\n\t\tnew Constraint(a[3],a[4],3)};\n\tdouble expected[]={5,0.5,3.5,6.5,9.5};\n\tunsigned int n = sizeof(a)/sizeof(Variable*);\n\tunsigned int m = sizeof(c)/sizeof(Constraint*);\n\tIncVPSC vpsc(n,a,m,c);\n\tvpsc.satisfy();\n\tfor(int i=0;i<n;i++) {\n\t\tassert(approxEquals(a[i]->position(),expected[i]));\n\t}\n\tcout << \"Test 3... done.\" << endl;\n}\n// split required - cycles!\nvoid test4() {\n\tcout << \"Test 4...\" << endl;\n\tVariable *a[] = {\n\t\tnew Variable(0,7,1),\n\t\tnew Variable(1,1,1),\n\t\tnew Variable(2,6,1),\n\t\tnew Variable(3,0,1),\n\t\tnew Variable(4,2,1)};\n\tConstraint *c[] = {\n\t\tnew Constraint(a[0],a[3],3),\n\t\tnew Constraint(a[0],a[1],3),\n\t\tnew Constraint(a[1],a[4],3),\n\t\tnew Constraint(a[2],a[4],3),\n\t\tnew Constraint(a[2],a[3],3),\n\t\tnew Constraint(a[3],a[4],3)};\n\tdouble expected[]={5,0.5,3.5,6.5,9.5};\n\tunsigned int n = sizeof(a)/sizeof(Variable*);\n\tunsigned int m = sizeof(c)/sizeof(Constraint*);\n\ttry {\n\t\tIncVPSC vpsc(n,a,m,c);\n\t\tvpsc.solve();\n\t} catch (char const *msg) {\n\t\tcerr << msg << endl;\n\t\texit(1);\n\t}\n\n\t/*\n\tfor(int i=0;i<n;i++) {\n\t\tassert(approxEquals(a[i]->position(),expected[i]));\n\t}\n\t*/\n\tcout << \"Test 4... done.\" << endl;\n}\nvoid test5() {\n\tcout << \"Test 5...\" << endl;\n\tVariable *a[] = {\n\t\tnew Variable(0,0,1), new Variable(1,9,1), new\n\t\t\tVariable(2,1,1), new Variable(3,9,1), new\n\t\t\tVariable(4,5,1), new Variable(5,1,1), new\n\t\t\tVariable(6,2,1), new Variable(7,1,1), new\n\t\t\tVariable(8,6,1), new Variable(9,3,1)};\n\tConstraint *c[] = {\n\t\tnew Constraint(a[0],a[3],3), new Constraint(a[1],a[8],3),\n\t\tnew Constraint(a[1],a[6],3), new Constraint(a[2],a[6],3),\n\t\tnew Constraint(a[3],a[5],3), new Constraint(a[3],a[6],3),\n\t\tnew Constraint(a[3],a[7],3), new Constraint(a[4],a[8],3),\n\t\tnew Constraint(a[4],a[7],3), new Constraint(a[5],a[8],3),\n\t\tnew Constraint(a[5],a[7],3), new Constraint(a[5],a[8],3),\n\t\tnew Constraint(a[6],a[9],3), new Constraint(a[7],a[8],3),\n\t\tnew Constraint(a[7],a[9],3), new Constraint(a[8],a[9],3)\n\t};\n\tdouble expected[]={-3.71429,4,1,-0.714286,2.28571,2.28571,7,5.28571,8.28571,11.2857};\n\tunsigned int n = sizeof(a)/sizeof(Variable*);\n\tunsigned int m = sizeof(c)/sizeof(Constraint*);\n\ttry {\n\t\tIncVPSC vpsc(n,a,m,c);\n\t\tvpsc.solve();\n\t} catch (char const *msg) {\n\t\tcerr << msg << endl;\n\t\texit(1);\n\t}\n\n\tfor(int i=0;i<n;i++) {\n\t\tassert(approxEquals(a[i]->position(),expected[i]));\n\t}\n\tcout << \"Test 5... done.\" << endl;\n}\n\n// n=number vars\n// m=max constraints per var\nvoid rand_test(int n, int m) {\n\tVariable *a[n];\n\tCS cs;\n\tfor(int i=0;i<n;i++) {\n\t\ta[i]=new Variable(i,getRand(10),1);\n\t}\n\tfor(int i=0;i<n-1;i++) {\n\t\tfor(int j=0;j<getRand(m)+1;j++) {\n\t\t\tint e = i + getRand(n-1-i)+1;\n\t\t\tcs.push_back(new Constraint(a[i],a[e],3));\n\t\t}\n\t}\n\tConstraint *acs[cs.size()];\n\tfor(int i=0;i<cs.size();i++) {\n\t\tacs[i]=cs[i];\n\t}\n\t/*\n\tcout<<\"digraph g {\"<<endl;\n\tfor(CS::iterator i(cs.begin());i!=cs.end();i++) {\n\t\tConstraint *c=*i;\n\t\tcout << c->left->id << \"->\" << c->right->id << \";\" << endl;\n\t}\n\tcout<<\"}\"<<endl;\n\t*/\n\tIncVPSC vpsc(n,a,cs.size(),acs);\n\ttry {\n\t\tvpsc.solve();\n\t} catch (char const *msg) {\n\t\tcout << msg << endl;\n\t\tfor(int i=0;i<n;i++) {\n\t\t\tcout << \"new Variable(\"<<i<<\",\"<<a[i]->desiredPosition<< \",1),\" << endl;\n\t\t\t//cout << \"a[i]->Pos=\"<<a[i]->position() << endl;\n\t\t}\n\t\tfor(CS::iterator i(cs.begin());i!=cs.end();i++) {\n\t\t\tConstraint *c=*i;\n\t\t\t//cout << c->left->id << \"->\" << c->right->id << \";\" << endl;\n\t\t\tcout << \"new Constraint(a[\" <<  c->left->id << \"],a[\" <<  c->right->id << \"],3),\" << endl;\n\t\t}\n\t\tthrow \"test failed!\";\n\t}\n}\nint main() {\n\tsrand(time(NULL));\n\t//test1();\n\t//test2();\n\t//test3();\n\t//test4();\n\t//test5();\n\tfor(int i=0;i<100;i++) {\n\t\tif(i%10==0) cout << \"i=\" << i << endl;\n\t\trand_test(100,3);\n\t}\n\treturn 0;\n}\n"
  }
]